OSDN Git Service

T29626
[everfolder/source.git] / source / workspace / EverFolder / src / com / yuji / ef / SettingActivity.java
index 246cf4e..b6b5f66 100644 (file)
@@ -19,14 +19,14 @@ import android.widget.Button;
 import android.widget.LinearLayout;
 import android.widget.Spinner;
 import android.widget.TextView;
-import android.widget.Toast;
 
-import com.yuji.ef.common.CommonUtil;
+import com.evernote.client.oauth.android.EvernoteSession;
 import com.yuji.ef.common.Constant;
 import com.yuji.ef.dao.LockDao;
 import com.yuji.ef.dao.Node;
 import com.yuji.ef.dao.NodeCacheDao;
 import com.yuji.ef.dao.NodeDao;
+import com.yuji.ef.exception.EfException;
 import com.yuji.ef.pref.EditPrefUtil;
 import com.yuji.ef.service.NoteUpdatorService;
 import com.yuji.ef.task.NoteUpdateTask;
@@ -34,17 +34,23 @@ import com.yuji.ef.utility.AsyncTaskCommand;
 import com.yuji.ef.utility.BaseActivity;
 import com.yuji.ef.utility.Debug;
 import com.yuji.ef.utility.EvernoteUtil;
+import com.yuji.ef.utility.LockHandler;
+import com.yuji.ef.utility.LockListener;
+import com.yuji.ef.utility.OAuthUtil;
 
-public class SettingActivity extends BaseActivity {
+public class SettingActivity extends BaseActivity implements LockListener {
        private EditPrefUtil pref = new EditPrefUtil(this);
 
        private LinearLayout msgLayout;
        private TextView confirmMsg;
        private Button loginButton;
+       private Button logoutButton;
        private Button listButton;
        private Button bookButton;
        private Button updateButton;
        private Spinner updateSpinner;
+       private LinearLayout updateDateLayout;
+       private TextView updateDateText;
        private Button closeButton;
 
        private boolean isRegister = false;
@@ -52,14 +58,34 @@ public class SettingActivity extends BaseActivity {
 
        private boolean lock = false;
        private boolean isInit = true;
+       private boolean isInCycle = false;
+       private LockHandler lockHandler = null;
+       
+       private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
+               @Override
+               public void onReceive(Context context, Intent intent) {
+                       String action = intent.getAction();
+
+                       if (action.equals(Constant.ACTION_MESSAGE)) {
+                               String msg = intent
+                                               .getStringExtra(Constant.ACTION_MESSAGE_MESSAGE);
+                               EfException.msg(SettingActivity.this, msg);
+                       } else if (action.equals(Constant.ACTION_UPDATE)) {
+                               if (isInCycle && !lock) {
+                                       LockDao lockDao = (LockDao) LockDao.getInstance();
+                                       lock = lockDao.lock(SettingActivity.this,
+                                                       Constant.LOCK_UPDATE_NOTE);
+                                       setStatus();
+                               }
+                       }
+               }
+       };
 
        private class NoteUpdatorReceiver extends BroadcastReceiver {
 
                @Override
                public void onReceive(Context context, Intent intent) {
-                       Toast toast = Toast.makeText(getApplicationContext(), "Time over!",
-                                       Toast.LENGTH_LONG);
-                       toast.show();
+                       ;
                }
        }
 
@@ -82,13 +108,21 @@ public class SettingActivity extends BaseActivity {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.setting);
 
+               IntentFilter intentFilter = new IntentFilter();
+               intentFilter.addAction(Constant.ACTION_UPDATE);
+               intentFilter.addAction(Constant.ACTION_MESSAGE);
+               registerReceiver(broadcastReceiver, intentFilter);
+
                msgLayout = (LinearLayout) findViewById(R.id.settingMsgLayout);
                confirmMsg = (TextView) findViewById(R.id.settingConfirmMsg);
                loginButton = (Button) findViewById(R.id.settingLoginButton);
+               logoutButton = (Button) findViewById(R.id.settingLogoutButton);
                listButton = (Button) findViewById(R.id.settingListButton);
                bookButton = (Button) findViewById(R.id.settingBookButton);
                updateButton = (Button) findViewById(R.id.settingUpdateButton);
                updateSpinner = (Spinner) findViewById(R.id.settingUpdateSpinner);
+               updateDateLayout = (LinearLayout) findViewById(R.id.settingUpdateDateLayout);
+               updateDateText = (TextView) findViewById(R.id.settingUpdateDateText);
                closeButton = (Button) findViewById(R.id.settingCloseButton);
 
                loginButton.setOnClickListener(new OnClickListener() {
@@ -97,6 +131,12 @@ public class SettingActivity extends BaseActivity {
                                loginButtonOnClick();
                        }
                });
+               logoutButton.setOnClickListener(new OnClickListener() {
+                       @Override
+                       public void onClick(View v) {
+                               logoutButtonOnClick();
+                       }
+               });
                listButton.setOnClickListener(new OnClickListener() {
                        @Override
                        public void onClick(View v) {
@@ -138,6 +178,20 @@ public class SettingActivity extends BaseActivity {
                noteOrderAdapter
                                .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                updateSpinner.setAdapter(noteOrderAdapter);
+
+               OAuthUtil authUtil = OAuthUtil.getInstance();
+               EvernoteSession session = authUtil.setupSession(this);
+               EvernoteUtil.getInstance().setSession(session);
+       }
+
+       @Override
+       public void sendLockResult(boolean b) {
+               lock = true;
+
+               if (isInit) {
+                       isInit = false;
+               }
+               setStatus();
        }
 
        @Override
@@ -148,6 +202,12 @@ public class SettingActivity extends BaseActivity {
        @Override
        protected void onResume() {
                super.onResume();
+               isInCycle = true;
+
+               lockHandler = new LockHandler();
+               boolean isUnlock = false;
+               lockHandler.lock(this, Constant.LOCK_UPDATE_NOTE, true, isUnlock);
+               lock = false;
 
                int updateTime = pref.getInt(Constant.PREF_UPDATE_TIME, 0);
 
@@ -159,11 +219,7 @@ public class SettingActivity extends BaseActivity {
                                break;
                        }
                }
-
-               if (isInit) {
-                       setStatus();
-                       isInit = false;
-               }
+               setStatus();
        }
 
        @Override
@@ -196,7 +252,18 @@ public class SettingActivity extends BaseActivity {
                        }
                }
 
+               // ロック未取得でも解除する(ゴミ掃除)
+               LockDao lockDao = (LockDao) LockDao.getInstance();
+               lockDao.unlock(this, Constant.LOCK_UPDATE_NOTE);
+               lock = false;
+
+               if (lockHandler != null){
+                       lockHandler.cancel();
+                       lockHandler = null;
+               }
+               
                super.onPause();
+               isInCycle = false;
        }
 
        @Override
@@ -231,6 +298,21 @@ public class SettingActivity extends BaseActivity {
                Intent intent = new Intent(this, (Class<?>) OAuthActivity.class);
                startActivityForResult(intent, 0);
        }
+       
+       private void logoutButtonOnClick(){
+               try {
+                       OAuthUtil util = OAuthUtil.getInstance();
+                       util.logout(this);
+                       EvernoteSession session = util.setupSession(this);
+                       EvernoteUtil.getInstance().setSession(session);
+                       
+                       setStatus();
+               }
+               catch (Exception e){
+                       // TODO
+                       e.printStackTrace();
+               }
+       }
 
        private void listButtonOnClick() {
                updateButton(false);
@@ -246,38 +328,58 @@ public class SettingActivity extends BaseActivity {
        }
 
        private void updateButton(boolean isAll) {
+               // #29618
+               // LockDao lockDao = (LockDao) LockDao.getInstance();
+               // lock = lockDao.lock(this, Constant.LOCK_UPDATE_NOTE);
                LockDao lockDao = (LockDao) LockDao.getInstance();
-               lock = lockDao.lock(this, Constant.LOCK_UPDATE_NOTE);
+               boolean b = lockDao.move(NoteUpdateTask.LOCK_OBJ,
+                               Constant.LOCK_UPDATE_NOTE);
+               if (!b) {
+                       EfException.msg(R.string.ErrorSystem);
+                       return;
+               }
 
                if (!lock) {
                        setStatus();
                        return;
                }
 
-               NoteUpdateTask task = new NoteUpdateTask(this, true, true, isAll);
+               pref.put(Constant.PREF_UPDATE_DATA, Constant.ON);
+               pref.update();
+
+               lock = false;
+               setStatus();
+
+               NoteUpdateTask task = new NoteUpdateTask(this, true, true, isAll, true);
 
                AsyncTaskCommand command = new AsyncTaskCommand(this, task);
-               // TODO
                // command.setTitle(getString(R.string.updatorNoteDialogTitle));
                // command.setButtonTitle(getString(R.string.cancelButton));
                command.setCancelable(false);
                command.setDialog(false);
                command.execute("");
-
-               setStatus();
        }
 
-//     public void done(int errorCode) {
-//             LockDao lockDao = (LockDao) LockDao.getInstance();
-//             lockDao.unlock(this, Constant.LOCK_UPDATE_NOTE);
-//             lock = false;
-//
-//             setStatus();
-//     }
+       public void done(int errorCode) {
+               // // #29618
+               // // lock = false;
+               // lock = true;
+               //
+               // setStatus();
+
+               if (isInCycle) {
+                       // onResume()で生成している & cancel()は、呼ばれていないため
+                       //lockHandler = new LockHandler();
+                       boolean isUnlock = false;
+                       lockHandler.lock(this, Constant.LOCK_UPDATE_NOTE, true, isUnlock);
+                       lock = false;
+                       setStatus();
+               }
+       }
 
        private void updateSpinnerItemSelected(AdapterView<?> parent, View view,
                        int position, long id) {
-
+               setStatus();
        }
 
        private void closeButtonOnClick() {
@@ -285,15 +387,17 @@ public class SettingActivity extends BaseActivity {
        }
 
        private void setStatus() {
-               if (lock) {
+               if (!lock) {
                        msgLayout.setVisibility(View.VISIBLE);
                        confirmMsg.setText(getString(R.string.settingUpdateMsg));
 
                        loginButton.setEnabled(false);
+                       logoutButton.setEnabled(false);
                        listButton.setEnabled(false);
                        bookButton.setEnabled(false);
                        updateButton.setEnabled(false);
                        updateSpinner.setEnabled(false);
+                       updateDateLayout.setVisibility(View.GONE);
 
                        return;
                }
@@ -304,66 +408,85 @@ public class SettingActivity extends BaseActivity {
                        confirmMsg.setText(getString(R.string.settingLoginMsg));
 
                        loginButton.setEnabled(true);
+                       logoutButton.setEnabled(false);
                        listButton.setEnabled(false);
                        listButton.setVisibility(View.GONE);
                        bookButton.setEnabled(false);
                        updateButton.setEnabled(false);
                        updateSpinner.setEnabled(false);
+                       updateDateLayout.setVisibility(View.GONE);
 
                        return;
                }
 
                NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
                List<Node> list = dao.searchBook();
-               if (list == null || list.size() <= 0){
+               if (list == null || list.size() <= 0) {
                        msgLayout.setVisibility(View.VISIBLE);
                        confirmMsg.setText(getString(R.string.settingDoListMsg));
 
-                       loginButton.setEnabled(true);
+                       loginButton.setEnabled(false);
+                       logoutButton.setEnabled(true);
                        listButton.setEnabled(true);
                        listButton.setVisibility(View.VISIBLE);
                        bookButton.setEnabled(false);
                        updateButton.setEnabled(false);
                        updateSpinner.setEnabled(false);
+                       updateDateLayout.setVisibility(View.GONE);
 
                        return;
-               }               
-               
+               }
+
                list = dao.searchSelectedBook();
                if (list == null || list.size() <= 0) {
                        msgLayout.setVisibility(View.VISIBLE);
                        confirmMsg.setText(getString(R.string.settingDoSelectMsg));
 
-                       loginButton.setEnabled(true);
+                       loginButton.setEnabled(false);
+                       logoutButton.setEnabled(true);
                        listButton.setEnabled(false);
                        listButton.setVisibility(View.GONE);
                        bookButton.setEnabled(true);
                        updateButton.setEnabled(false);
                        updateSpinner.setEnabled(false);
+                       updateDateLayout.setVisibility(View.GONE);
 
                        return;
                }
 
-               if (false) {
-                       // TODO
+               if (dao.isEmptyNote()) {
                        msgLayout.setVisibility(View.VISIBLE);
                        confirmMsg.setText(getString(R.string.settingDoUpdateMsg));
 
-                       loginButton.setEnabled(true);
+                       loginButton.setEnabled(false);
+                       logoutButton.setEnabled(true);
                        listButton.setEnabled(false);
                        listButton.setVisibility(View.GONE);
                        bookButton.setEnabled(true);
                        updateButton.setEnabled(true);
-                       updateSpinner.setEnabled(true);
+                       updateSpinner.setEnabled(false);
+                       updateDateLayout.setVisibility(View.GONE);
                        return;
                }
 
-               loginButton.setEnabled(true);
+               loginButton.setEnabled(false);
+               logoutButton.setEnabled(true);
                listButton.setEnabled(false);
                listButton.setVisibility(View.GONE);
                bookButton.setEnabled(true);
                updateButton.setEnabled(true);
                updateSpinner.setEnabled(true);
+
+               int pos = updateSpinner.getSelectedItemPosition();
+               if (pos == 0) {
+                       updateDateLayout.setVisibility(View.GONE);
+               } else {
+                       updateDateLayout.setVisibility(View.VISIBLE);
+               }
+               String updateDate = pref.get(Constant.PREF_UPDATE_DATETIME);
+               updateDateText.setText(updateDate);
+
                msgLayout.setVisibility(View.GONE);
        }
+
 }