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.net.NetworkInfo; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.provider.Settings; import android.telephony.TelephonyManager; import android.text.InputType; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.Window; import android.webkit.GeolocationPermissions.Callback; import android.webkit.JsPromptResult; import android.webkit.WebChromeClient; import android.webkit.WebSettings; import android.webkit.WebStorage; import android.webkit.WebStorage.QuotaUpdater; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.EditText; public class EKLLauncherActivity extends Activity { class CustomChromeClient extends WebChromeClient { @Override public void onReachedMaxAppCacheSize(long spaceNeeded, long totalUsedQuota, QuotaUpdater quotaUpdater) { quotaUpdater.updateQuota(totalUsedQuota + 4096); } public void onProgressChanged(WebView view, int progress) { // Activities and WebViews measure progress with different scales. // The progress meter will automatically disappear when we reach 100% EKLLauncherActivity.this.setProgress(progress * 100); } @Override public void onExceededDatabaseQuota(String url, String databaseIdentifier, long currentQuota, long estimatedSize, long totalUsedQuota, QuotaUpdater quotaUpdater) { quotaUpdater.updateQuota(estimatedSize); // altid giv tilladelse til større db quota } @Override public void onGeolocationPermissionsShowPrompt(String origin, Callback callback) { callback.invoke(origin, true, true); //altid give tilladelse til geo location } /* @Override public boolean onJsAlert(WebView view, String url, String message, JsResult result) { return super.onJsAlert(view, url, message, result); } @Override public boolean onJsConfirm(WebView view, String url, String message, JsResult result) { Toast.makeText(EKLLauncherActivity.this, "Oh no! " + message, Toast.LENGTH_SHORT).show(); return super.onJsConfirm(view, url, message, result); }*/ @Override public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, final JsPromptResult result) { String msg = message.trim().toLowerCase(); if (msg.equals("pda identifikation mangler")) { result.confirm(device); timeoutHandler.sendEmptyMessageDelayed(1, 500); //efter pdaID er sendt til app'en skal vi genindlæse siden for at tvinge den til at hente data return true; } else if (msg.startsWith("indtast retur antal")) { AlertDialog.Builder alert = new AlertDialog.Builder(EKLLauncherActivity.this); //alert.setTitle("Title"); alert.setMessage(message); // Set an EditText view to get user input final EditText input = new EditText(EKLLauncherActivity.this); input.setInputType(InputType.TYPE_CLASS_NUMBER); alert.setView(input); alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { result.confirm(input.getText().toString()); } }); alert.show(); return true; } else { return super.onJsPrompt(view, url, message, defaultValue, result); } } } class DummyWebViewClient extends WebViewClient { } static final String URL = "http://omdeling.info/mobil/ekl/login.php"; LocationManager locMgr; ConnectivityManager connMgr; TelephonyManager telMgr; WebView web; String device = ""; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); 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); device = telMgr.getLine1Number(); if (device == null || device.equals("")) { device = telMgr.getDeviceId(); if(device == null) device = ""; } 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); web.setWebChromeClient(new CustomChromeClient() ); web.setWebViewClient( new DummyWebViewClient() ); // skal have en webviewclient for at kunne styre ved forlad tur simHandler.sendEmptyMessage(0); 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_SECURITY_SETTINGS ); startActivity(myIntent); } }) .create() .show(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuItem item; item = menu.add(0, 1, 0, "Genindlæs side"); item.setIcon( R.drawable.ic_menu_refresh ); item = menu.add(0, 2, 0, "Slet cache"); item.setIcon( R.drawable.ic_menu_delete ); return super.onCreateOptionsMenu(menu); } @Override public boolean onMenuItemSelected(int featureId, MenuItem item) { switch (item.getItemId()) { case 1: web.reload(); break; case 2: WebStorage.getInstance().deleteAllData(); web.clearCache(true); web.reload(); break; } return super.onMenuItemSelected(featureId, item); } Handler timeoutHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); web.reload(); } }; SimHandler simHandler = new SimHandler(); 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(); } }; }