package dk.thoerup.ekllauncher; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.location.LocationManager; import android.net.ConnectivityManager; import android.os.Bundle; import android.os.PowerManager; import android.provider.Settings; import android.telephony.TelephonyManager; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.Window; import android.view.WindowManager; import android.webkit.WebSettings; import android.webkit.WebStorage; import android.webkit.WebView; import android.webkit.WebViewClient; public class EKLLauncherActivity extends Activity { class DummyWebViewClient extends WebViewClient { } public static final String LOGTAG = "EklLauncher"; static final String URL = "http://omdeling.info/mobil/ekl/"; //static final String URL = "http://t-hoerup.dk/android_js.html"; LocationManager locMgr; ConnectivityManager connMgr; TelephonyManager telMgr; WebView web; PowerManager.WakeLock wakeLock; @Override public void onAttachedToWindow() { this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); super.onAttachedToWindow(); } /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.e(LOGTAG, "Creating"); getWindow().requestFeature(Window.FEATURE_PROGRESS); try { int airplane = Settings.System.getInt(this.getContentResolver(), Settings.System.AIRPLANE_MODE_ON); if (airplane > 0) { Settings.System.putInt(this.getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 0); Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED); intent.putExtra("state", false); sendBroadcast(intent); } } catch (Settings.SettingNotFoundException e) { Log.d("EKL", "Exception " + e.getMessage() ); } locMgr = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); telMgr = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE); connMgr = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE); setContentView(R.layout.main); web = (WebView) findViewById(R.id.web); WebSettings settings = web.getSettings(); settings.setJavaScriptEnabled(true); settings.setAppCacheEnabled(true); settings.setAppCachePath( this.getCacheDir().toString() ); settings.setJavaScriptCanOpenWindowsAutomatically(false); settings.setGeolocationEnabled(true); settings.setDomStorageEnabled(true); settings.setDatabaseEnabled(true); settings.setDatabasePath( this.getCacheDir().toString() ); settings.setSupportMultipleWindows(false); JsPhoneObject jsPhone = new JsPhoneObject(telMgr); web.addJavascriptInterface( jsPhone , "jsPhone"); web.setWebChromeClient(new EKLChromeClient(this) ); web.setWebViewClient( new DummyWebViewClient() ); // skal have en webviewclient for at kunne styre ved forlad tur if (!locMgr.isProviderEnabled(LocationManager.GPS_PROVIDER )) { //Settings.Secure.putString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED, "network,gps"); AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage("GPS er slået fra på telefonen!\nSæt et flueben ved GPS i næste vindue og tryk derefter på tilbage knappen (nederst på telefonen)") .setPositiveButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { Intent myIntent = new Intent( Settings.ACTION_LOCATION_SOURCE_SETTINGS ); startActivity(myIntent); } }) .create() .show(); } } @Override protected void onStart() { super.onStart(); Log.e(LOGTAG, "Starting"); PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "EklLauncher"); wakeLock.acquire(); //Hvis at tlf rebooter mit i et område uden dækning er det ikke smart at vi skal vente på data //simHandler.sendEmptyMessage(0); web.loadUrl( URL ); } @Override protected void onStop() { Log.e(LOGTAG, "Stopping"); if (wakeLock != null && wakeLock.isHeld()) wakeLock.release(); if (!web.getUrl().equals("about:blank")) web.loadUrl("about:blank"); super.onStop(); } static final int RELOAD = 1; static final int FLUSH = 2; static final int EXIT = 3; @Override public boolean onCreateOptionsMenu(Menu menu) { MenuItem item; item = menu.add(0, RELOAD, 0, "Genindlæs side"); item.setIcon( R.drawable.ic_menu_refresh ); item = menu.add(0, FLUSH, 0, "Slet cache"); item.setIcon( R.drawable.ic_menu_delete ); item = menu.add(0, EXIT, 0, "Forlad"); item.setIcon( android.R.drawable.ic_menu_close_clear_cancel); return super.onCreateOptionsMenu(menu); } @Override public boolean onMenuItemSelected(int featureId, MenuItem item) { switch (item.getItemId()) { case RELOAD: web.reload(); break; case FLUSH: web.clearCache(true); WebStorage.getInstance().deleteAllData(); WebStorage.getInstance().deleteOrigin(URL); web.reload(); break; case EXIT: this.finish(); break; } return super.onMenuItemSelected(featureId, item); } /*void showMessage(String msg) { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage(msg) .setPositiveButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.dismiss(); } }) .create() .show(); }*/ /* Proof-of-concept code Handler timeoutHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); web.reload(); } }; class SimHandler extends Handler { public void testNetwork() { NetworkInfo network = connMgr.getActiveNetworkInfo(); if ( (telMgr.getSimState() == TelephonyManager.SIM_STATE_READY && telMgr.getDataState() == TelephonyManager.DATA_CONNECTED) || ( network != null && network.getType() == ConnectivityManager.TYPE_WIFI) ) { web.loadUrl( URL ); } else { web.loadData("

afventer netværksforbindelse

", "text/html", "iso-8859-1"); this.sendEmptyMessageDelayed(0, 1000); } } @Override public void handleMessage(Message msg) { super.handleMessage(msg); testNetwork(); } }; */ }