package mobi.monaca.framework.view; import java.io.IOException; import mobi.monaca.framework.MonacaPageActivity; import mobi.monaca.framework.util.MyLog; import org.apache.cordova.Config; import org.apache.cordova.CordovaWebView; import org.apache.cordova.api.LOG; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import android.content.Context; import android.content.pm.PackageManager.NameNotFoundException; import android.content.res.AssetManager; import android.content.res.XmlResourceParser; import android.util.AttributeSet; import android.view.KeyEvent; public class MonacaWebView extends CordovaWebView { public static final String TAG = MonacaWebView.class.getSimpleName(); public static final String INITIALIZATION_REQUEST_URL = "INITIALIZATION"; public static final String INITIALIZATION_MADIATOR = "javascript:"; public static final String INITIALIZATION_DESCRIPTION = "The connection to the server was unsuccessful."; public static final int INITIALIZATION_ERROR_CODE = -6; protected MonacaPageActivity page; protected Context context; private boolean notBackButton = true; @Deprecated public MonacaWebView(Context context, AttributeSet attrs, int defStyle, boolean privateBrowsing) { super(context, attrs, defStyle, privateBrowsing); this.context = context; init(); } @Deprecated public MonacaWebView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); this.context = context; init(); } @Deprecated public MonacaWebView(Context context, AttributeSet attrs) { super(context, attrs); this.context = context; init(); } public MonacaWebView(MonacaPageActivity page) { super(page); this.page = page; this.context = page.getContext(); init(); } protected void init() { resumeTimers(); notBackButton = true; } @Override public void goBack() { // MyLog.d(TAG, "called goBack"); super.goBack(); } @Override public boolean onKeyUp(int keyCode, KeyEvent event) { if (page != null && (keyCode == KeyEvent.KEYCODE_BACK && (page.hasBackButtonEventer() || page.hasOnTapBackButtonAction()))) { // if monaca has backbutton handler, do not call cordova backbutton event return true; } else { //to prevent from calling backHistory() by backbutton // TODO find smarter way notBackButton = !(this.canGoBack() && keyCode == KeyEvent.KEYCODE_BACK); boolean supersReturn = super.onKeyUp(keyCode, event); notBackButton = true; return supersReturn; } } @Override public void loadUrlIntoView(final String url) { if (url.equals(INITIALIZATION_REQUEST_URL)) { super.loadUrlIntoView(INITIALIZATION_MADIATOR); } else { super.loadUrlIntoView(url); } } @Override public boolean backHistory() { // MyLog.d(TAG, "backHistory()"); //to prevent from calling backHistory() by backbutton // TODO find smarter way if (notBackButton) { return super.backHistory(); } else { notBackButton = true; return false; } } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { MyLog.d(TAG, "onKeyDown"); if (keyCode == KeyEvent.KEYCODE_BACK) { // MonacaPageActivity uses BACK_BUTTON return false; } else { return super.onKeyDown(keyCode, event); } } }