+ res = getResources();
+ month = res.getStringArray(R.array.month);
+ wday = res.getStringArray(R.array.wday);
+ Log.v("WhereAmI","month length " + Integer.toString(month.length));
+ Log.v("WhereAmI","wday length " + Integer.toString(wday.length));
+ tv = (TextView)findViewById(R.id.tv);
+ tv.setText(R.string.greet);
+ Log.v("WhereAmI", "created UI, about to start update task");
+ mHandler.postDelayed(updateClock, 1000);
+ Log.v("WhereAmI", "created UI, update task created");
+ }
+
+ private Handler mHandler = new Handler();
+
+ private Runnable updateClock = new Runnable () {
+ public void run() {
+ long now = System.currentTimeMillis();
+ Time tm = new Time();
+ tm.set(now);
+ Log.v("WhereAmI", "weekday is" + Integer.toString(tm.weekDay));
+ Log.v("WhereAmI", "month is" + Integer.toString(tm.month));
+ tv.setText(
+ wday[tm.weekDay] +
+ tm.format(", %d ") +
+ month[tm.month] +
+ tm.format(" %Y") +
+ tm.format(", %H:%M%:%S"));
+ tm.second++;
+ long next = tm.toMillis(false);
+ tv.append("\n" + Long.toString(next-now+1));
+
+ // new TimedUpdateTask().execute(5); // for delayed execution
+ mHandler.postDelayed(this, next-now+1);
+ }
+ };
+
+ private class TimedUpdateTask extends AsyncTask<Integer, Void, String> {
+ @Override
+ protected String doInBackground(Integer... howlong) {
+ Log.v("TimedUpdateTask", "starting");
+ try {
+ Thread.sleep(1000 * howlong[0]);
+ } catch (InterruptedException e) {
+ Log.e("TimedUpdateTask", "sleep interrupted");
+ }
+ Log.v("TimedUpdateTask", "about to return");
+ return (Integer.toString(howlong[0]) + " seconds passed");
+ }
+
+ @Override
+ protected void onPostExecute(String str) {
+ Log.v("TimedUpdateTask", "callback executing");
+ tv.setText(str);
+ }