OSDN Git Service

FOO
[everfolder/source.git] / source / workspace / EverFolder / src / com / yuji / ef / service / NoteUpdatorService.java
index 0f4eb16..7e8b5b3 100644 (file)
@@ -14,6 +14,7 @@ import android.widget.Toast;
 import com.evernote.client.oauth.android.EvernoteSession;
 import com.yuji.ef.Initialize;
 import com.yuji.ef.R;
+import com.yuji.ef.SettingActivity;
 import com.yuji.ef.common.Constant;
 import com.yuji.ef.dao.LockDao;
 import com.yuji.ef.exception.EfException;
@@ -54,6 +55,8 @@ public class NoteUpdatorService extends Service {
        private Runnable task = new Runnable() {
                public void run() {
                        try {
+                               //cancelAlermTime(NoteUpdatorService.this);
+                               
                                if (action.equals(ACTION_START)) {
                                        // 初期起動
                                } else {
@@ -106,11 +109,11 @@ public class NoteUpdatorService extends Service {
                }
 
                private void execute() throws EfException {
-                       Initialize.initialize(NoteUpdatorService.this, null);
-
                        pref.put(Constant.PREF_UPDATE_DATA, Constant.ON);
                        pref.update();
 
+                       Initialize.initialize(NoteUpdatorService.this, null);
+
                        NoteUpdateTask task = new NoteUpdateTask(null, true, true, true);
                        task.doExecute();
 
@@ -207,8 +210,22 @@ public class NoteUpdatorService extends Service {
                AlarmManager am = (AlarmManager) context
                                .getSystemService(Context.ALARM_SERVICE);
                am.set(AlarmManager.RTC, t, alarmSender);
+               
+               pref.put(Constant.PREF_NEXT_TIME, t);
+               pref.update();
        }
 
+       private static void cancelAlermTime(Context context){
+               Calendar cal = Calendar.getInstance();
+
+               long t = cal.getTimeInMillis();
+               PendingIntent alarmSender = PendingIntent.getService(context, 0,
+                               new Intent(context, NoteUpdatorService.class), 0);
+               AlarmManager am = (AlarmManager) context
+                               .getSystemService(Context.ALARM_SERVICE);
+               am.cancel(alarmSender);
+       }
+       
        public static void stopService(Context context) {
                PendingIntent alarmSender = PendingIntent.getService(context, 0,
                                new Intent(context, NoteUpdatorService.class),
@@ -228,6 +245,24 @@ public class NoteUpdatorService extends Service {
                boolean isSet = NoteUpdatorService.isSetAlarmSender(context);
                int updateTime = pref.getInt(Constant.PREF_UPDATE_TIME);
 
+               // TODO
+               // サービス起動中でなく、ロックが残っている場合、削除(DB排他で、ロックされないこと)
+               // サービスのロック削除
+               long t = pref.getLong(Constant.PREF_NEXT_TIME);
+               Calendar cal = Calendar.getInstance();
+               long now = cal.getTimeInMillis();
+               if (t < now){
+                       isSet = false;
+                       
+                       // サービス起動中の場合は、DBロックがかかり
+                       // 更新後まで、ロックは解除されない。
+                       LockDao lockDao = (LockDao) LockDao.getInstance();
+                       lockDao.unlock(NoteUpdatorService.class,
+                                       Constant.LOCK_UPDATE_NOTE);
+                       lockDao.unlock(SettingActivity.class, Constant.LOCK_UPDATE_NOTE);
+                       lockDao = null;
+               }
+               
                if (updateTime > 0) {
                        if (!isSet) {
                                // 再起動時