X-Git-Url: http://www.average.org/gitweb/?p=WhereAmI.git;a=blobdiff_plain;f=src%2Forg%2Faverage%2Fwhereami%2FWhereAmI.java;h=0f193cd71d3a13d8047f3ee6108c165ac034e45a;hp=c74ab2d09e0f758a0e73ef9190beee84d4c01035;hb=0d7962e1af14f0264b93d733f0ffff93082c9eab;hpb=4b9b982f86a201f57cd9c48d8a7246e768a018dc diff --git a/src/org/average/whereami/WhereAmI.java b/src/org/average/whereami/WhereAmI.java index c74ab2d..0f193cd 100644 --- a/src/org/average/whereami/WhereAmI.java +++ b/src/org/average/whereami/WhereAmI.java @@ -2,14 +2,124 @@ package org.average.whereami; import android.app.Activity; import android.os.Bundle; +import android.os.AsyncTask; +import android.os.Handler; +import android.os.SystemClock; +import android.content.res.Resources; +import android.text.format.Time; +import android.util.Log; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.TextView; public class WhereAmI extends Activity { + private class UpdateTarget { + public TextView tv; + public Integer updater; // will be the function/object + public UpdateTarget(TextView tv, Integer updater) { + this.tv = tv; + this.updater = updater; + } + } + private UpdateTarget[] ut; + + private TextView tvt, tvd, tvs; + private Resources res; + private String[] month; + private String[] wday; + /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + requestWindowFeature(Window.FEATURE_NO_TITLE); + getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); + getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); setContentView(R.layout.main); + res = getResources(); + month = res.getStringArray(R.array.month); + wday = res.getStringArray(R.array.wday); + tvt = (TextView)findViewById(R.id.time); + tvd = (TextView)findViewById(R.id.date); + tvs = (TextView)findViewById(R.id.timestamp); + ut = new UpdateTarget[] { + new UpdateTarget((TextView)findViewById(R.id.location), 1), + new UpdateTarget((TextView)findViewById(R.id.phonecall), 2) + }; + Log.v("WhereAmI", "created UI, about to start update task"); + updateClock.run(); + updateCal.run(); + updateInfo.run(); + 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); + tvt.setText(tm.format("%H:%M")); + tm.set(now + 60000); + tm.second=0; + long next = tm.toMillis(false); + mHandler.postDelayed(this, next-now+1); + } + }; + + private Runnable updateCal = new Runnable () { + public void run() { + long now = System.currentTimeMillis(); + Time tm = new Time(); + tm.set(now); + tvd.setText( + wday[tm.weekDay] + + tm.format("\n%d ") + + month[tm.month] + + tm.format(" %Y")); + tm.set(now + 86400000); + tm.hour=0; + tm.minute=0; + tm.second=0; + long next = tm.toMillis(false); + mHandler.postDelayed(this, next-now+1); + } + }; + + private Runnable updateInfo = new Runnable () { + public void run() { + Log.v("updateInfo", "starting"); + for (int i = 0; i < ut.length; i++) { + ut[i].tv.setText(R.string.updating); + new TimedUpdateTask().execute(ut[i]); + } + mHandler.postDelayed(this, 10000); + } + }; + + private class TimedUpdateTask extends AsyncTask { + private UpdateTarget ut; + @Override + protected String doInBackground(UpdateTarget... whereto) { + Log.v("TimedUpdateTask", "starting"); + ut = whereto[0]; + SystemClock.sleep(5000); // real job do be done here + Log.v("TimedUpdateTask", "about to return"); + return "5 seconds passed"; + } + + @Override + protected void onPostExecute(String str) { + Log.v("TimedUpdateTask", "callback executing"); + ut.tv.setText(str); + Time tm = new Time(); + tm.setToNow(); + tvs.setText(R.string.lasttry); + tvs.append(tm.format(" %d/%m/%Y %H:%M:%S")); + } } }