public static void firstTime(final Context context) {
    if (Preferences.get().isFirstTime()) {
      Preferences.get().setFirstTime(false);

      int isInstalledCorrectly = PrivilegedInstaller.isExtensionInstalledCorrectly(context);
      switch (isInstalledCorrectly) {
        case PrivilegedInstaller.IS_EXTENSION_INSTALLED_YES:
          Preferences.get().setPrivilegedInstallerEnabled(true);
          break;

        case PrivilegedInstaller.IS_EXTENSION_INSTALLED_NO:
          runFirstTime(context);
          break;

        case PrivilegedInstaller.IS_EXTENSION_INSTALLED_PERMISSIONS_PROBLEM:
        case PrivilegedInstaller.IS_EXTENSION_INSTALLED_SIGNATURE_PROBLEM:
        default:
          // do nothing
      }
    }
  }
  /** 3. Verify that install worked */
  private void postInstall() {
    // hack to get theme applied (which is not automatically applied due to activity's
    // Theme.NoDisplay
    ContextThemeWrapper theme = new ContextThemeWrapper(this, FDroidApp.getCurThemeResId());

    int isInstalledCorrectly = PrivilegedInstaller.isExtensionInstalledCorrectly(this);

    String title;
    String message;
    final int result;
    switch (isInstalledCorrectly) {
      case PrivilegedInstaller.IS_EXTENSION_INSTALLED_YES:
        title = getString(R.string.system_install_post_success);
        message = getString(R.string.system_install_post_success_message);
        result = Activity.RESULT_OK;

        // enable system installer on installation success
        Preferences.get().setPrivilegedInstallerEnabled(true);
        break;
      case PrivilegedInstaller.IS_EXTENSION_INSTALLED_NO:
        title = getString(R.string.system_install_post_fail);
        message = getString(R.string.system_install_post_fail_message);
        result = Activity.RESULT_CANCELED;
        break;
      case PrivilegedInstaller.IS_EXTENSION_INSTALLED_SIGNATURE_PROBLEM:
        title = getString(R.string.system_install_post_fail);
        message =
            getString(R.string.system_install_post_fail_message)
                + "\n\n"
                + getString(R.string.system_install_denied_signature);
        result = Activity.RESULT_CANCELED;
        break;
      case PrivilegedInstaller.IS_EXTENSION_INSTALLED_PERMISSIONS_PROBLEM:
        title = getString(R.string.system_install_post_fail);
        message =
            getString(R.string.system_install_post_fail_message)
                + "\n\n"
                + getString(R.string.system_install_denied_permissions);
        result = Activity.RESULT_CANCELED;
        break;
      default:
        throw new RuntimeException("unhandled return");
    }

    AlertDialog.Builder builder =
        new AlertDialog.Builder(theme)
            .setTitle(title)
            .setMessage(message)
            .setPositiveButton(
                R.string.ok,
                new DialogInterface.OnClickListener() {
                  @Override
                  public void onClick(DialogInterface dialogInterface, int i) {
                    InstallExtensionDialogActivity.this.setResult(result);
                    InstallExtensionDialogActivity.this.finish();
                    startActivity(new Intent(InstallExtensionDialogActivity.this, FDroid.class));
                  }
                })
            .setCancelable(false);
    builder.create().show();
  }