package jgarciabt.smartwebview; import android.app.Activity; import android.content.IntentFilter; import android.net.Uri; import android.os.Bundle; import android.view.View; import android.webkit.WebView; import com.squareup.otto.Subscribe; import butterknife.ButterKnife; import butterknife.InjectView; import jgarciabt.smartwebview.broadcast.NetworkBroadcastReceiver; import jgarciabt.smartwebview.broadcast.events.InternetDownEvent; import jgarciabt.smartwebview.bus.BusManager; import jgarciabt.smartwebview.utils.Constants; import jgarciabt.smartwebview.utils.CustomWebViewClient; /** * Created by JGarcia on 28/3/15. */ public class LauncherActivity extends Activity { @InjectView(R.id.webViewFrame) public WebView webViewFrame; private BusManager busManager; private NetworkBroadcastReceiver networkBroadcastReceiver; private IntentFilter intentFilter; private String lastUrlAvailable; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_launcher); ButterKnife.inject(this); busManager = BusManager.getInstance(); busManager.register(this); networkBroadcastReceiver = new NetworkBroadcastReceiver(this); intentFilter = new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE"); if (savedInstanceState != null) { webViewFrame.restoreState(savedInstanceState); webViewFrame.setWebViewClient(new CustomWebViewClient(this)); // Enable JavaScript only if you need it // webViewFrame.getSettings().setJavaScriptEnabled(true); } else { setupWebView(); } } @Override protected void onPause() { super.onPause(); unregisterReceiver(networkBroadcastReceiver); } @Override protected void onResume() { super.onResume(); registerReceiver(networkBroadcastReceiver, intentFilter); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); webViewFrame.saveState(outState); outState.putString(Constants.LAST_URL_AVAILABLE, lastUrlAvailable); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); lastUrlAvailable = savedInstanceState.getString(Constants.LAST_URL_AVAILABLE); } @Override public void onBackPressed() { if (!isOnRootURL(webViewFrame.getUrl())) { String goBackUrl = previousLevelUrl(webViewFrame.getUrl()); webViewFrame.loadUrl(goBackUrl); } else { finish(); } } private void setupWebView() { lastUrlAvailable = Constants.BASE_URL; webViewFrame.loadUrl(Constants.BASE_URL); webViewFrame.setWebViewClient(new CustomWebViewClient(this)); // Enable JavaScript only if you need it // webViewFrame.getSettings().setJavaScriptEnabled(true); } private boolean isOnRootURL(String currentUrl) { return (currentUrl.matches(Constants.BASE_URL) || currentUrl.matches(Constants.OFFLINE_FILE)); } private String previousLevelUrl(String currentUrl) { String lastPath = Uri.parse(currentUrl).getLastPathSegment(); return currentUrl.substring(0, currentUrl.length() - lastPath.length() - 1); } @Subscribe public void internetConnectionGone(InternetDownEvent event) { lastUrlAvailable = webViewFrame.getUrl(); } }