예제 #1
0
  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);
  }
예제 #2
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();
    }
  }
예제 #3
0
  @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();
    }
  }
예제 #4
0
  @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();
    }
  }