package in.co.praveenkumar.mdroid.activity; import in.co.praveenkumar.R; import in.co.praveenkumar.mdroid.helper.ApplicationClass; import in.co.praveenkumar.mdroid.helper.Param; import in.co.praveenkumar.mdroid.helper.SessionSetting; import in.co.praveenkumar.mdroid.model.MoodleSiteInfo; import android.annotation.SuppressLint; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.webkit.CookieSyncManager; import android.webkit.JsResult; import android.webkit.WebChromeClient; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Toast; @SuppressWarnings("deprecation") @SuppressLint("SetJavaScriptEnabled") public class AppBrowserActivity extends BaseNavigationActivity { static final String TAG = "AppBrowserActivity"; final int MAX_LOGIN_ATTEMPTS = 2; // Since page load callback occurs during redirects too. MoodleSiteInfo mSiteInfo; WebView mBrowser; String DEFAULT_URL = "http://mdroid.praveenkumar.co.in"; String DEFAULT_TITLE = "MDroid browser"; int loginAttempts = 0; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_appbrowser); setUpDrawer(); // Send a tracker ((ApplicationClass) getApplication()) .sendScreen(Param.GA_SCREEN_BROWSER); // Setup title and url String url = DEFAULT_URL; String title = DEFAULT_TITLE; try { url = getIntent().getStringExtra("url"); title = getIntent().getStringExtra("title"); } catch (Exception e) { e.printStackTrace(); } title = (title == null || title.contentEquals("")) ? DEFAULT_TITLE : title; getSupportActionBar().setTitle(title); getSupportActionBar().setIcon(R.drawable.icon_public_white); // Get siteinfo for auto login SessionSetting session = new SessionSetting(this); mSiteInfo = MoodleSiteInfo.findById(MoodleSiteInfo.class, session.getCurrentSiteId()); // Init browser with cookies enabled and synced from last session mBrowser = (WebView) findViewById(R.id.webview); CookieSyncManager.createInstance(this); CookieSyncManager.getInstance().startSync(); // Enable Javascript and DOM storage mBrowser.getSettings().setJavaScriptEnabled(true); mBrowser.getSettings().setDomStorageEnabled(true); mBrowser.setWebChromeClient(new WebChromeClient() { @Override public boolean onJsAlert(WebView view, String url, String message, JsResult result) { return super.onJsAlert(view, url, message, result); } }); // Override the WebViewClient for auto login on load mBrowser.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } @Override public void onPageFinished(WebView view, String url) { Log.d(TAG, "Page load finished"); if (loginAttempts < MAX_LOGIN_ATTEMPTS && mSiteInfo != null) { loginAttempts++; tryAutoLogin(); } } }); loginAttempts = 0; mBrowser.loadUrl(url); } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater menuInflater = getMenuInflater(); menuInflater.inflate(R.menu.app_browser, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_login: tryAutoLogin(); return true; default: return super.onOptionsItemSelected(item); } } void tryAutoLogin(){ Toast.makeText(this, getString(R.string.activity_appbrowser_autologin_info), Toast.LENGTH_SHORT).show(); String uname = mSiteInfo.getUsername(); String password = mSiteInfo.getLoginPassword(); mBrowser.loadUrl("javascript: {" + "document.getElementById('username').value = '" + uname + "';" + "document.getElementById('password').value = '" + password + "';" + "document.forms[0].submit(); };"); Log.d(TAG, "Login attempted"); } }