private void checkAndLaunchUpdate() { Log.i(LOG_FILE_NAME, "Checking for an update"); int statusCode = 8; // UNEXPECTED_ERROR File baseUpdateDir = null; if (Build.VERSION.SDK_INT >= 8) baseUpdateDir = getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS); else baseUpdateDir = new File(Environment.getExternalStorageDirectory().getPath(), "download"); File updateDir = new File(new File(baseUpdateDir, "updates"), "0"); File updateFile = new File(updateDir, "update.apk"); File statusFile = new File(updateDir, "update.status"); if (!statusFile.exists() || !readUpdateStatus(statusFile).equals("pending")) return; if (!updateFile.exists()) return; Log.i(LOG_FILE_NAME, "Update is available!"); // Launch APK File updateFileToRun = new File(updateDir, getPackageName() + "-update.apk"); try { if (updateFile.renameTo(updateFileToRun)) { String amCmd = "/system/bin/am start -a android.intent.action.VIEW " + "-n com.android.packageinstaller/.PackageInstallerActivity -d file://" + updateFileToRun.getPath(); Log.i(LOG_FILE_NAME, amCmd); Runtime.getRuntime().exec(amCmd); statusCode = 0; // OK } else { Log.i(LOG_FILE_NAME, "Cannot rename the update file!"); statusCode = 7; // WRITE_ERROR } } catch (Exception e) { Log.i(LOG_FILE_NAME, "error launching installer to update", e); } // Update the status file String status = statusCode == 0 ? "succeeded\n" : "failed: " + statusCode + "\n"; OutputStream outStream; try { byte[] buf = status.getBytes("UTF-8"); outStream = new FileOutputStream(statusFile); outStream.write(buf, 0, buf.length); outStream.close(); } catch (Exception e) { Log.i(LOG_FILE_NAME, "error writing status file", e); } if (statusCode == 0) System.exit(0); }
@Override public void onStop() { Log.i("fbreader", "onStop"); PopupPanel.removeAllWindows(FBReaderApp.Instance()); super.onStop(); Process process = null; String appRoot = getApplicationContext().getFilesDir().getParent(); try { process = Runtime.getRuntime().exec("su -c " + appRoot + "/lib/libexekillevklistener.so"); process.waitFor(); evkListenerProcess = null; } catch (Exception e) { e.printStackTrace(); } finally { process.destroy(); } }
@Override public void onResume() { super.onResume(); try { sendBroadcast(new Intent(getApplicationContext(), KillerCallback.class)); } catch (Throwable t) { } PopupPanel.restoreVisibilities(FBReaderApp.Instance()); Log.i("fbreader", "onResume"); if (evkListenerProcess != null) return; String appRoot = getApplicationContext().getFilesDir().getParent(); try { evkListenerProcess = Runtime.getRuntime().exec("su -c " + appRoot + "/lib/libexefbevklistener.so"); } catch (Exception e) { e.printStackTrace(); } }
@Override public void onCreate(Bundle icicle) { super.onCreate(icicle); final ZLAndroidApplication application = (ZLAndroidApplication) getApplication(); myFullScreenFlag = application.ShowStatusBarOption.getValue() ? 0 : WindowManager.LayoutParams.FLAG_FULLSCREEN; getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, myFullScreenFlag); final FBReaderApp fbReader = (FBReaderApp) FBReaderApp.Instance(); if (fbReader.getPopupById(TextSearchPopup.ID) == null) { new TextSearchPopup(fbReader); } if (fbReader.getPopupById(NavigationPopup.ID) == null) { new NavigationPopup(fbReader); } if (fbReader.getPopupById(SelectionPopup.ID) == null) { new SelectionPopup(fbReader); } fbReader.addAction(ActionCode.SHOW_LIBRARY, new ShowLibraryAction(this, fbReader)); fbReader.addAction(ActionCode.SHOW_PREFERENCES, new ShowPreferencesAction(this, fbReader)); fbReader.addAction(ActionCode.SHOW_BOOK_INFO, new ShowBookInfoAction(this, fbReader)); fbReader.addAction(ActionCode.SHOW_TOC, new ShowTOCAction(this, fbReader)); fbReader.addAction(ActionCode.SHOW_BOOKMARKS, new ShowBookmarksAction(this, fbReader)); fbReader.addAction( ActionCode.SHOW_NETWORK_LIBRARY, new ShowNetworkLibraryAction(this, fbReader)); fbReader.addAction(ActionCode.SHOW_MENU, new ShowMenuAction(this, fbReader)); fbReader.addAction(ActionCode.SHOW_NAVIGATION, new ShowNavigationAction(this, fbReader)); fbReader.addAction(ActionCode.SEARCH, new SearchAction(this, fbReader)); fbReader.addAction( ActionCode.SELECTION_SHOW_PANEL, new SelectionShowPanelAction(this, fbReader)); fbReader.addAction( ActionCode.SELECTION_HIDE_PANEL, new SelectionHidePanelAction(this, fbReader)); fbReader.addAction( ActionCode.SELECTION_COPY_TO_CLIPBOARD, new SelectionCopyAction(this, fbReader)); fbReader.addAction(ActionCode.SELECTION_SHARE, new SelectionShareAction(this, fbReader)); fbReader.addAction( ActionCode.SELECTION_TRANSLATE, new SelectionTranslateAction(this, fbReader)); fbReader.addAction(ActionCode.SELECTION_BOOKMARK, new SelectionBookmarkAction(this, fbReader)); fbReader.addAction(ActionCode.PROCESS_HYPERLINK, new ProcessHyperlinkAction(this, fbReader)); fbReader.addAction(ActionCode.SHOW_CANCEL_MENU, new ShowCancelMenuAction(this, fbReader)); Process process = null; appRoot = getApplicationContext().getFilesDir().getParent(); Log.i("fbreader", "app root = " + appRoot); try { process = Runtime.getRuntime().exec("su -c " + appRoot + "/lib/libexechmod.so"); process.waitFor(); } catch (Exception e) { e.printStackTrace(); } finally { process.destroy(); } }