private void copyResourcesToLocal() { String name, sFileName; InputStream content; R.raw a = new R.raw(); java.lang.reflect.Field[] t = R.raw.class.getFields(); Resources resources = getResources(); boolean succeed = true; for (int i = 0; i < t.length; i++) { try { name = resources.getText(t[i].getInt(a)).toString(); sFileName = name.substring(name.lastIndexOf('/') + 1, name.length()); content = getResources().openRawResource(t[i].getInt(a)); content.reset(); // perl project if (sFileName.endsWith(GlobalConstants.PERL_PROJECT_ZIP_NAME)) { succeed &= Utils.unzip(content, this.getFilesDir().getAbsolutePath() + "/", true); } // perl -> /data/data/com.android.perl/files/perl else if (sFileName.endsWith(GlobalConstants.PERL_ZIP_NAME)) { succeed &= Utils.unzip(content, this.getFilesDir().getAbsolutePath() + "/", true); FileUtils.chmod(new File(this.getFilesDir().getAbsolutePath() + "/perl/perl"), 0755); } // perl extras -> /sdcard/com.android.perl/perl/site-perl else if (sFileName.endsWith(GlobalConstants.PERL_EXTRAS_ZIP_NAME)) { Utils.createDirectoryOnExternalStorage(this.getPackageName() + "/" + "extras"); Utils.createDirectoryOnExternalStorage( this.getPackageName() + "/" + "extras" + "/" + "tmp"); succeed &= Utils.unzip( content, Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + this.getPackageName() + "/extras/", true); } } catch (Exception e) { Log.e(GlobalConstants.LOG_TAG, "Failed to copyResourcesToLocal", e); succeed = false; } } // end for all files in res/raw }
// Unpack and set file permission for python files located in res/raw based // off of Anthony Prieur & Daniel Oppenheim work // https://code.google.com/p/android-python27/ private void copyPythonToLocal() { String zipPath, zipName; InputStream content; R.raw a = new R.raw(); java.lang.reflect.Field[] t = R.raw.class.getFields(); Resources resources = getResources(); Log.i(Common.LOG_TAG, Common.LOG_INFO_PYTHON_UNZIP_STARTED); for (int i = 0; i < t.length; i++) { try { // Get path of zip to unpack zipPath = resources.getText(t[i].getInt(a)).toString(); // Extract the zipName from zipPath zipName = zipPath.substring(zipPath.lastIndexOf('/') + 1, zipPath.length()); content = getResources().openRawResource(t[i].getInt(a)); content.reset(); // Python_27 we unpack to -> // /data/data/com.sensibility_testbed/files/python if (zipName.endsWith(Common.PYTHON_ZIP_NAME)) { // This is the Python binary. It needs to live in /data/data/...., // as it can't be made executable on the SDcard due to VFAT. // Thus, we must not use seattleInstallDirectory for this. Utils.unzip(content, this.getFilesDir().getAbsolutePath() + "/", true); // set file permissions FileUtils.chmod( new File(this.getFilesDir().getAbsolutePath() + "/python/bin/python"), 0755); } // Python_extras_27 we unpack to -> // /sdcard/com.sensibility_testbed/extras/python else if (zipName.endsWith(Common.PYTHON_EXTRAS_ZIP_NAME)) { Utils.unzip(content, seattleInstallDirectory.getAbsolutePath() + "/extras/", true); } } catch (Exception e) { Log.e(Common.LOG_TAG, Common.LOG_EXCEPTION_PYTHON_UNZIPPING, e); } } Log.i(Common.LOG_TAG, Common.LOG_INFO_PYTHON_UNZIP_COMPLETED); }
@Override protected void onStart() { super.onStart(); try { jsonSrc = FileUtils.readFromAssetsFile(that, "json2.js"); androidJsSrc = FileUtils.readFromAssetsFile(that, "android.js"); } catch (IOException e1) { throw new RuntimeException(e1); } mObserver = new HtmlEventObserver(); // TODO // RpcReceiverManager mFacadeManager = getRpcReceiverManager(); // mFacadeManager.getReceiver(EventFacade.class).addGlobalEventObserver(mObserver); // mAPIWrapperSource = generateAPIWrapper(); PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, config.getLOG_TAG()); mWebView.setKeepScreenOn(true); mWebView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); mWebView.setScrollbarFadingEnabled(false); mWebView.setVerticalScrollBarEnabled(false); mWebView.setHorizontalScrollBarEnabled(false); mWebView.setScrollContainer(false); WebSettings webSettings = mWebView.getSettings(); webSettings.setSavePassword(false); webSettings.setSaveFormData(false); webSettings.setJavaScriptEnabled(true); webSettings.setPluginsEnabled(true); webSettings.setSupportZoom(false); webSettings.setSupportZoom(true); webSettings.setBuiltInZoomControls(true); webSettings.setUseWideViewPort(true); webSettings.setLoadWithOverviewMode(true); mWebView.addJavascriptInterface(mWrapper, "_rpc_wrapper"); mWebView.addJavascriptInterface( new Object() { @SuppressWarnings("unused") public void register(String event, int id) { mObserver.register(event, id); } }, "_callback_wrapper"); if (Build.VERSION.SDK_INT >= 5) { try { Method m1 = WebSettings.class.getMethod("setDomStorageEnabled", new Class[] {Boolean.TYPE}); m1.invoke(webSettings, Boolean.TRUE); Method m2 = WebSettings.class.getMethod("setDatabaseEnabled", new Class[] {Boolean.TYPE}); m2.invoke(webSettings, Boolean.TRUE); Method m3 = WebSettings.class.getMethod("setDatabasePath", new Class[] {String.class}); m3.invoke(webSettings, this.getFilesDir().getParent() + "/databases/"); } catch (Exception e) { e.printStackTrace(); } } mWebView.setWebChromeClient(new WebChromeClient() {}); mWebView.setWebViewClient( new WebViewClient() { // public void onReceivedError(WebView view, int errorCode, String description, // String failingUrl) { // Toast.makeText(that, "Error: " + description, Toast.LENGTH_SHORT).show(); // } }); webSettings.setCacheMode(WebSettings.LOAD_NORMAL); if (Build.VERSION.SDK_INT >= 11 && Build.VERSION.SDK_INT < 14) { mWebView.setSystemUiVisibility(WebView.STATUS_BAR_HIDDEN); } else if (Build.VERSION.SDK_INT >= 14) { mWebView.setSystemUiVisibility(WebView.SYSTEM_UI_FLAG_HIDE_NAVIGATION); } mWebView.loadUrl("javascript:" + jsonSrc); mWebView.loadUrl("javascript:" + androidJsSrc); mWebView.loadUrl("javascript:" + mAPIWrapperSource); Log.d( config.getLOG_TAG(), "Launch Webview: " + "file://" + this.getFilesDir().getAbsolutePath() + "/" + config.getMAIN_SCRIPT_NAME()); mWebView.loadUrl( "file://" + this.getFilesDir().getAbsolutePath() + "/" + config.getMAIN_SCRIPT_NAME()); }