tweak layout
[WhereAmI.git] / src / org / average / whereami / WhereAmI.java
1 package org.average.whereami;
2
3 import android.app.Activity;
4 import android.os.Bundle;
5 import android.os.AsyncTask;
6 import android.os.Handler;
7 import android.os.SystemClock;
8 import android.content.res.Resources;
9 import android.text.format.Time;
10 import android.util.Log;
11 import android.view.View;
12 import android.view.Window;
13 import android.view.WindowManager;
14 import android.widget.TextView;
15
16 public class WhereAmI extends Activity
17 {
18     private class UpdateTarget {
19         public TextView tv;
20         public Integer updater; // will be the function/object
21         public UpdateTarget(TextView tv, Integer updater) {
22            this.tv = tv;
23            this.updater = updater;
24         }
25     }
26     private UpdateTarget[] ut;
27
28     private TextView tvt, tvd, tvs;
29     private Resources res;
30     private String[] month;
31     private String[] wday;
32
33     /** Called when the activity is first created. */
34     @Override
35     public void onCreate(Bundle savedInstanceState)
36     {
37         super.onCreate(savedInstanceState);
38         requestWindowFeature(Window.FEATURE_NO_TITLE);
39         getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
40         getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
41         setContentView(R.layout.main);
42         res = getResources();
43         month = res.getStringArray(R.array.month);
44         wday = res.getStringArray(R.array.wday);
45         tvt = (TextView)findViewById(R.id.time);
46         tvd = (TextView)findViewById(R.id.date);
47         tvs = (TextView)findViewById(R.id.timestamp);
48         ut = new UpdateTarget[] {
49             new UpdateTarget((TextView)findViewById(R.id.location),  1),
50             new UpdateTarget((TextView)findViewById(R.id.phonecall), 2)
51         };
52         Log.v("WhereAmI", "created UI, about to start update task");
53         updateClock.run();
54         updateCal.run();
55         updateInfo.run();
56         Log.v("WhereAmI", "created UI, update task created");
57     }
58
59     private Handler mHandler = new Handler();
60
61     private Runnable updateClock = new Runnable () {
62         public void run() {
63             long now = System.currentTimeMillis();
64             Time tm = new Time();
65             tm.set(now);
66             tvt.setText(tm.format("%H:%M"));
67             tm.set(now + 60000);
68             tm.second=0;
69             long next = tm.toMillis(false);
70             mHandler.postDelayed(this, next-now+1);
71         }
72     };
73
74     private Runnable updateCal = new Runnable () {
75         public void run() {
76             long now = System.currentTimeMillis();
77             Time tm = new Time();
78             tm.set(now);
79             tvd.setText(
80                        wday[tm.weekDay] +
81                        tm.format("\n%d ") +
82                        month[tm.month] +
83                        tm.format(" %Y"));
84             tm.set(now + 86400000);
85             tm.hour=0;
86             tm.minute=0;
87             tm.second=0;
88             long next = tm.toMillis(false);
89             mHandler.postDelayed(this, next-now+1);
90         }
91     };
92
93     private Runnable updateInfo = new Runnable () {
94         public void run() {
95             Log.v("updateInfo", "starting");
96             for (int i = 0; i < ut.length; i++) {
97                 ut[i].tv.setText(R.string.updating);
98                 new TimedUpdateTask().execute(ut[i]);
99             }
100             mHandler.postDelayed(this, 10000);
101         }
102     };
103
104     private class TimedUpdateTask extends AsyncTask<UpdateTarget, Void, String> {
105         private UpdateTarget ut;
106         @Override
107         protected String doInBackground(UpdateTarget... whereto) {
108             Log.v("TimedUpdateTask", "starting");
109             ut = whereto[0];
110             SystemClock.sleep(5000); // real job do be done here
111             Log.v("TimedUpdateTask", "about to return");
112             return "5 seconds passed";
113         }
114     
115         @Override
116         protected void onPostExecute(String str) {
117             Log.v("TimedUpdateTask", "callback executing");
118             ut.tv.setText(str);
119             Time tm = new Time();
120             tm.setToNow();
121             tvs.setText(R.string.lasttry);
122             tvs.append(tm.format(" %d/%m/%Y %H:%M:%S"));
123         }
124     }
125 }