OSDN Git Service

スケジューリングのロジック作成。未テスト。テストクラスを作成すること
authorYuji Konishi <yuji.k64613@gmail.com>
Sat, 9 Jul 2011 12:29:18 +0000 (21:29 +0900)
committerYuji Konishi <yuji.k64613@gmail.com>
Sat, 9 Jul 2011 12:29:18 +0000 (21:29 +0900)
workspace/TrainDelayed/bin/TrainDelayed.apk
workspace/TrainDelayed/bin/classes.dex
workspace/TrainDelayed/bin/resources.ap_
workspace/TrainDelayed/src/com/td/TrainDelayedActivity.java
workspace/TrainDelayed/src/com/td/service/Scheduler.java [new file with mode: 0644]
workspace/TrainDelayed/src/com/td/service/Term.java [new file with mode: 0644]
workspace/TrainDelayed/src/com/td/service/TrainDelayedServiceImpl.java
workspace/TrainDelayed/src/com/td/utility/DateUtil.java
workspace/TrainDelayed/src/com/td/utility/Debug.java

index 88ab95f..0e4f0c8 100644 (file)
Binary files a/workspace/TrainDelayed/bin/TrainDelayed.apk and b/workspace/TrainDelayed/bin/TrainDelayed.apk differ
index fad00c5..f250680 100644 (file)
Binary files a/workspace/TrainDelayed/bin/classes.dex and b/workspace/TrainDelayed/bin/classes.dex differ
index eef50ce..cb45c44 100644 (file)
Binary files a/workspace/TrainDelayed/bin/resources.ap_ and b/workspace/TrainDelayed/bin/resources.ap_ differ
index da703d8..2e51484 100644 (file)
@@ -3,6 +3,8 @@ package com.td;
 import twitter4j.AsyncTwitter;
 import twitter4j.AsyncTwitterFactory;
 import android.app.AlarmManager;
+import android.app.Notification;
+import android.app.NotificationManager;
 import android.app.PendingIntent;
 import android.content.Context;
 import android.content.Intent;
@@ -31,6 +33,12 @@ public class TrainDelayedActivity extends BaseActivity {
                final TrainTwitterAdapter listener = new TrainTwitterAdapter(this);
                twitter.addListener(listener);
 
+               Button button1 = (Button) this.findViewById(R.id.button01);
+               button1.setOnClickListener(new OnClickListener() {
+                       public void onClick(View v) {
+                               
+                       }});
+
                Button button2 = (Button) this.findViewById(R.id.button02);
                button2.setOnClickListener(new OnClickListener() {
                        public void onClick(View view) {
@@ -139,13 +147,13 @@ public class TrainDelayedActivity extends BaseActivity {
                // trainDelayedService.stopSelf(); // \83T\81[\83r\83X\82Í\95K\97v\82È\82¢\82Ì\82Å\8fI\97¹\82³\82¹\82é\81B
        }
 
-//     private void getColumnData(Cursor cur) {
-//             if (cur.moveToFirst()) {
-//                     do {
-//                             int val = cur.getInt(0);
-//                             Debug.d(this, "VAL=" + val);
-//                     } while (cur.moveToNext());
-//
-//             }
-//     }
+       // private void getColumnData(Cursor cur) {
+       // if (cur.moveToFirst()) {
+       // do {
+       // int val = cur.getInt(0);
+       // Debug.d(this, "VAL=" + val);
+       // } while (cur.moveToNext());
+       //
+       // }
+       // }
 }
\ No newline at end of file
diff --git a/workspace/TrainDelayed/src/com/td/service/Scheduler.java b/workspace/TrainDelayed/src/com/td/service/Scheduler.java
new file mode 100644 (file)
index 0000000..ba31b27
--- /dev/null
@@ -0,0 +1,165 @@
+package com.td.service;\r
+\r
+import java.util.ArrayList;\r
+import java.util.Calendar;\r
+import java.util.Collections;\r
+import java.util.Comparator;\r
+import java.util.Date;\r
+import java.util.List;\r
+\r
+import com.td.db.Monitor;\r
+import com.td.db.MonitorDao;\r
+import com.td.utility.DateUtil;\r
+\r
+public class Scheduler {\r
+       private int N = 7;//TODO\r
+       private static Calendar cal = Calendar.getInstance();\r
+       private List<Term>[] list = null;\r
+       private Comparator<Term> comp = new Comparator<Term>(){\r
+               public int compare(Term t1, Term t2) {\r
+                       return t1.getFrom() - t2.getFrom();\r
+               }\r
+       };\r
+       \r
+       public Scheduler(){\r
+\r
+       }\r
+       \r
+       public void calcSchedule(){\r
+               \r
+       }\r
+\r
+       public long nextSchedule(long now){\r
+               long next = now + DateUtil.LEN * 1000;\r
+               \r
+               cal.setTimeInMillis(next);\r
+               Date date = cal.getTime();\r
+               int h = date.getHours();\r
+               int m = date.getMinutes();\r
+               int hm = DateUtil.getHm(h, m);\r
+               int w = date.getDay();\r
+               \r
+               for (int i = 0; i < N; i++){\r
+                       int n = (w + i) % N;\r
+                       List<Term> l = list[n];\r
+                       int j = isContain(l, hm);\r
+                       if (j == 0){\r
+                               return next;\r
+                       }\r
+                       if (j > 0){\r
+                               Term t = l.get(j - 1);\r
+                               // \8d¡\93ú(next)\82©\82ç\81Ai\93ú\8cã\82Ì\81Afrom\8e\9e\r
+                               return DateUtil.getTime(date, i, t.getFrom());\r
+                       }\r
+                       if (i > 0){\r
+                               // \91¼\82Ì\97j\93ú\82Ì\8fê\8d\87\r
+                               if (l.size() > 0){\r
+                                       Term t = l.get(0);\r
+                                       // \8d¡\93ú(next)\82©\82ç\81Ai\93ú\8cã\82Ì\81Afrom\8e\9e\r
+                                       return DateUtil.getTime(date, i, t.getFrom());\r
+                               }\r
+                               \r
+                       }\r
+               }\r
+               return -1;\r
+       }\r
+\r
+       public int isContain(List<Term> l, int hm) {\r
+               int from;\r
+               int to;\r
+               \r
+               for (int i = 0; i < l.size(); i++){\r
+                       Term t = l.get(i);\r
+                       from = t.getFrom();\r
+                       to = t.getTo();\r
+                       if (from <= hm && hm <= to){\r
+                               return 0;\r
+                       }\r
+                       if (to < hm){\r
+                               return i + 1;\r
+                       }\r
+               } \r
+               return -1;\r
+       }\r
+\r
+       public void makeSchedule(){\r
+               if (list != null){\r
+                       return;\r
+               }\r
+\r
+               MonitorDao dao = MonitorDao.getInstance();\r
+               List<Monitor> mList = dao.search();\r
+               makeSchedule(mList);\r
+       }\r
+       \r
+       public void makeSchedule(List<Monitor> mList){\r
+               clearSchedule();\r
+               \r
+               for (Monitor monitor : mList){\r
+                       add(list, monitor);\r
+               }       \r
+       }\r
+       \r
+       private void clearSchedule(){\r
+               list = new List[N];\r
+               for (int i = 0; i < list.length; i++){\r
+                       list[i] = new ArrayList<Term>();\r
+               }\r
+       }\r
+       \r
+       public void add(List<Term>[] ll, Monitor monitor){\r
+               Term term = new Term(monitor.getFrom(), monitor.getTo());\r
+               for (int i = 0; i < N; i++){\r
+                       if (monitor.getWeek(i)){\r
+                               add(ll[i], term);\r
+                       }\r
+               }\r
+       }\r
+       \r
+       public void add(List<Term> l, Term term){\r
+               int i = 0;\r
+               while (i < l.size()){\r
+                       Term t = l.get(i);\r
+                       if (isContain(t, term)){\r
+                               term = add(t, term);\r
+                               l.remove(i);\r
+                               continue;\r
+                       }\r
+                       i++;\r
+               }\r
+               l.add(term);\r
+               Collections.sort(l, comp);\r
+       }\r
+       \r
+       public boolean isContain(Term t1, Term t2){\r
+               int from1 = t1.getFrom();\r
+               int to1 = t1.getTo();\r
+               int from2 = t2.getFrom();\r
+               int to2 = t2.getTo();\r
+\r
+               if (from1 <= from2 && from2 <= to1){\r
+                       return true;\r
+               }\r
+               if (from1 <= to2 && to2 <= to1){\r
+                       return true;\r
+               }\r
+               if (from2 <= from1 && from1 <= to2){\r
+                       return true;\r
+               }\r
+               if (from2 <= to1 && to1 <= to2){\r
+                       return true;\r
+               }\r
+               return false;\r
+       }\r
+\r
+       public Term add(Term t1, Term t2){\r
+               int from1 = t1.getFrom();\r
+               int to1 = t1.getTo();\r
+               int from2 = t2.getFrom();\r
+               int to2 = t2.getTo();\r
+               \r
+               int from = (from1 < from2)? from1 : from2;\r
+               int to = (to1 < to2)? to1 : to2;\r
+               return new Term(from, to);\r
+       }\r
+}\r
diff --git a/workspace/TrainDelayed/src/com/td/service/Term.java b/workspace/TrainDelayed/src/com/td/service/Term.java
new file mode 100644 (file)
index 0000000..6120a7f
--- /dev/null
@@ -0,0 +1,24 @@
+package com.td.service;\r
+\r
+public class Term {\r
+       private int from;\r
+       private int to;\r
+       \r
+       public Term(int from, int to){\r
+               this.from = from;\r
+               this.to = to;\r
+       }\r
+       \r
+       public int getFrom() {\r
+               return from;\r
+       }\r
+       public void setFrom(int from) {\r
+               this.from = from;\r
+       }\r
+       public int getTo() {\r
+               return to;\r
+       }\r
+       public void setTo(int to) {\r
+               this.to = to;\r
+       }\r
+}\r
index 11e4d28..1dea82d 100644 (file)
@@ -9,6 +9,8 @@ import twitter4j.AsyncTwitter;
 import twitter4j.AsyncTwitterFactory;\r
 import twitter4j.Query;\r
 import android.app.AlarmManager;\r
+import android.app.Notification;\r
+import android.app.NotificationManager;\r
 import android.app.PendingIntent;\r
 import android.app.Service;\r
 import android.content.Context;\r
@@ -16,6 +18,8 @@ import android.content.Intent;
 import android.os.Binder;\r
 import android.os.IBinder;\r
 \r
+import com.td.R;\r
+import com.td.TrainDelayedActivity;\r
 import com.td.TrainTwitterAdapter;\r
 import com.td.db.Train;\r
 import com.td.db.TrainDao;\r
@@ -26,14 +30,14 @@ public class TrainDelayedServiceImpl extends Service {
        public static final String ACTION = TrainDelayedServiceImpl.class\r
                        .getSimpleName();\r
        private final IBinder binder = new Binder();\r
-       \r
-//     private boolean isCanceled = false;\r
-//     \r
-//     public class TrainDelayedBinder extends Binder {\r
-//             public TrainDelayedServiceImpl getService() {\r
-//                     return TrainDelayedServiceImpl.this;\r
-//             }\r
-//     }\r
+\r
+       // private boolean isCanceled = false;\r
+       //\r
+       // public class TrainDelayedBinder extends Binder {\r
+       // public TrainDelayedServiceImpl getService() {\r
+       // return TrainDelayedServiceImpl.this;\r
+       // }\r
+       // }\r
 \r
        // TODO\r
        private AsyncTwitterFactory factory = new AsyncTwitterFactory();\r
@@ -41,7 +45,7 @@ public class TrainDelayedServiceImpl extends Service {
        private TrainTwitterAdapter listener = new TrainTwitterAdapter(this);\r
 \r
        private Timer timer = null;\r
-       private int id = 0;\r
+       private static int id = 0;\r
 \r
        @Override\r
        public IBinder onBind(Intent intent) {\r
@@ -113,7 +117,7 @@ public class TrainDelayedServiceImpl extends Service {
        }\r
 \r
        // TODO\r
-       //private PendingIntent alarmSender;\r
+       // private PendingIntent alarmSender;\r
 \r
        public void schedule2(long delay) {\r
                try {\r
@@ -135,18 +139,47 @@ public class TrainDelayedServiceImpl extends Service {
                                query.setQuery(text);\r
                                twitter.search(query);\r
                        }\r
-\r
+                       // TODO\r
+                       //notificate("id = " + id);\r
+                       \r
                        id++;\r
                } catch (Exception e) {\r
                        Debug.d(this, null, e);\r
                }\r
        }\r
 \r
-//     public void scheduleStop() {\r
-//             if (timer != null) {\r
-//                     timer.cancel();\r
-//             }\r
-//     }\r
+       private void notificate(String msg) {\r
+               try {\r
+                       String ns = Context.NOTIFICATION_SERVICE;\r
+                       NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns);\r
+\r
+                       int icon = R.drawable.icon;\r
+                       CharSequence tickerText = "\93d\8eÔ\82ª\92x\82ê\82Ä\82é?";\r
+                       long when = System.currentTimeMillis();\r
+                       Notification notification = new Notification(icon, tickerText, when);\r
+\r
+                       Context context = getApplicationContext();\r
+                       CharSequence contentTitle = "My notification";\r
+                       CharSequence contentText = msg;\r
+                       Intent notificationIntent = new Intent(this,\r
+                                       TrainDelayedActivity.class);\r
+                       PendingIntent contentIntent = PendingIntent.getActivity(this, 0,\r
+                                       notificationIntent, 0);\r
+                       notification.setLatestEventInfo(context, contentTitle, contentText,\r
+                                       contentIntent);\r
+\r
+                       int HELLO_ID = 1;\r
+                       mNotificationManager.notify(HELLO_ID, notification);\r
+               } catch (Exception e) {\r
+                       Debug.d(this, null, e);\r
+               }\r
+       }\r
+\r
+       // public void scheduleStop() {\r
+       // if (timer != null) {\r
+       // timer.cancel();\r
+       // }\r
+       // }\r
 \r
        @Override\r
        public void onCreate() {\r
@@ -167,7 +200,7 @@ public class TrainDelayedServiceImpl extends Service {
                                                Debug.d(this, null, e);\r
                                        }\r
                                }\r
-                                       \r
+\r
                                // \8e\9f\89ñ\8bN\93®\93o\98^\r
                                long now = System.currentTimeMillis();\r
                                PendingIntent alarmSender = PendingIntent.getService(\r
@@ -175,7 +208,8 @@ public class TrainDelayedServiceImpl extends Service {
                                                                TrainDelayedServiceImpl.this,\r
                                                                TrainDelayedServiceImpl.class), 0);\r
                                AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);\r
-                               alarm.set(AlarmManager.RTC, now + DateUtil.LEN * 60 * 1000, alarmSender);\r
+                               alarm.set(AlarmManager.RTC, now + DateUtil.LEN * 60 * 1000,\r
+                                               alarmSender);\r
 \r
                                // \83T\81[\83r\83X\8fI\97¹\r
                                TrainDelayedServiceImpl.this.stopSelf();\r
@@ -200,8 +234,8 @@ public class TrainDelayedServiceImpl extends Service {
        @Override\r
        public void onDestroy() {\r
                Debug.d(this, Debug.ON_DESTROY);\r
-               //TODO\r
-               //scheduleStop();\r
+               // TODO\r
+               // scheduleStop();\r
 \r
                super.onDestroy();\r
        }\r
index 6426dd4..332a6dc 100644 (file)
@@ -1,6 +1,7 @@
 package com.td.utility;\r
 \r
 import java.text.DecimalFormat;\r
+import java.util.Calendar;\r
 import java.util.Date;\r
 \r
 public class DateUtil {\r
@@ -66,4 +67,15 @@ public class DateUtil {
                sb.append(fmt2.format((int) (ymd % 100)));\r
                return sb.toString();\r
        }\r
+\r
+       public static long getTime(Date date, int i, int from) {\r
+               // \8d¡\93ú(date)\82©\82ç\81Ai\93ú\8cã\82Ì\81Afrom\8e\9e\r
+               Calendar cal = Calendar.getInstance();\r
+               cal.setTime(date);\r
+               cal.add(Calendar.DAY_OF_MONTH, i);\r
+               cal.set(Calendar.HOUR_OF_DAY, from / 100);\r
+               cal.set(Calendar.MINUTE, from % 100);\r
+               \r
+               return cal.getTimeInMillis();\r
+       }\r
 }\r
index 36a2390..451be58 100644 (file)
@@ -19,7 +19,19 @@ public class Debug {
        }\r
 \r
        public static void d(Object target, String msg, Throwable t){\r
-               if (!Log.isLoggable(FILTER, Log.DEBUG)){\r
+               d(target, msg, t, Log.DEBUG);\r
+       }\r
+\r
+       public static void i(Object target, String msg){\r
+               i(target, msg, null);\r
+       }\r
+\r
+       public static void i(Object target, String msg, Throwable t){\r
+               d(target, msg, t, Log.INFO);\r
+       }\r
+\r
+       private static void d(Object target, String msg, Throwable t, int level){\r
+               if (!Log.isLoggable(FILTER, level)){\r
                        return;\r
                }\r
        \r