diff --git a/src/org/fdroid/fdroid/AppDetails.java b/src/org/fdroid/fdroid/AppDetails.java index 5a96ffd65..14806aacb 100644 --- a/src/org/fdroid/fdroid/AppDetails.java +++ b/src/org/fdroid/fdroid/AppDetails.java @@ -57,6 +57,7 @@ import android.view.MenuItem; import android.view.SubMenu; import android.view.View; import android.view.ViewGroup; +import android.view.Window; import android.graphics.Bitmap; import com.nostra13.universalimageloader.core.DisplayImageOptions; @@ -260,7 +261,8 @@ public class AppDetails extends ListActivity { @Override protected void onCreate(Bundle savedInstanceState) { - + requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); + fdroidApp = ((FDroidApp) getApplication()); fdroidApp.applyTheme(this); @@ -353,6 +355,7 @@ public class AppDetails extends ListActivity { @Override protected void onResume() { + Log.d(TAG, "onresume"); super.onResume(); if (resetRequired) { if (!reset()) { @@ -930,6 +933,8 @@ public class AppDetails extends ListActivity { } private void installApk(File file, String packageName) { + setProgressBarIndeterminateVisibility(true); + try { installer.installPackage(file); } catch (AndroidNotCompatibleException e) { @@ -940,6 +945,8 @@ public class AppDetails extends ListActivity { } private void removeApk(String packageName) { + setProgressBarIndeterminateVisibility(true); + try { installer.deletePackage(packageName); } catch (AndroidNotCompatibleException e) { @@ -960,40 +967,46 @@ public class AppDetails extends ListActivity { private Installer.InstallerCallback myInstallerCallback = new Installer.InstallerCallback() { @Override - public void onPackageInstalled(int returnCode, boolean unattended) { - // TODO: check return code?! - if (downloadHandler != null) { - downloadHandler = null; - } - - PackageManagerCompat.setInstaller(mPm, app.id); + public void onSuccess(int operation, boolean unattended) { resetRequired = true; - // if unattended, onResume is not execute automatically - if (unattended) { - runOnUiThread(new Runnable() { - @Override - public void run() { - onResume(); - } - }); + if (operation == Installer.InstallerCallback.OPERATION_INSTALL) { + if (downloadHandler != null) { + downloadHandler = null; + } + + PackageManagerCompat.setInstaller(mPm, app.id); } + + // if unattended, onResume is not execute automatically +// if (unattended) { + runOnUiThread(new Runnable() { + @Override + public void run() { + onResume(); + setProgressBarIndeterminateVisibility(false); + } + }); +// } + } @Override - public void onPackageDeleted(int returnCode, boolean unattended) { - // TODO: check return code?! - resetRequired = true; + public void onError(int operation, boolean unattended, final String reason) { + runOnUiThread(new Runnable() { + @Override + public void run() { + setProgressBarIndeterminateVisibility(false); + + // TODO + AlertDialog.Builder alertBuilder = new AlertDialog.Builder(AppDetails.this); + alertBuilder.setTitle("Error"); + alertBuilder.setMessage(reason); + alertBuilder.setNeutralButton(android.R.string.ok, null); + alertBuilder.create().show(); + } + }); - // if unattended, onResume is not execute automatically - if (unattended) { - runOnUiThread(new Runnable() { - @Override - public void run() { - onResume(); - } - }); - } } }; diff --git a/src/org/fdroid/fdroid/PreferencesActivity.java b/src/org/fdroid/fdroid/PreferencesActivity.java index 7847f7bf1..7f74c145e 100644 --- a/src/org/fdroid/fdroid/PreferencesActivity.java +++ b/src/org/fdroid/fdroid/PreferencesActivity.java @@ -26,7 +26,6 @@ import android.preference.CheckBoxPreference; import android.preference.EditTextPreference; import android.preference.ListPreference; import android.app.AlertDialog; -import android.app.ProgressDialog; import android.content.SharedPreferences; import android.content.SharedPreferences.OnSharedPreferenceChangeListener; import android.view.MenuItem; diff --git a/src/org/fdroid/fdroid/installer/DefaultInstaller.java b/src/org/fdroid/fdroid/installer/DefaultInstaller.java index 5f6c558fe..ddb38caf7 100644 --- a/src/org/fdroid/fdroid/installer/DefaultInstaller.java +++ b/src/org/fdroid/fdroid/installer/DefaultInstaller.java @@ -98,17 +98,17 @@ public class DefaultInstaller extends Installer { switch (requestCode) { case REQUEST_CODE_INSTALL: if (resultCode == Activity.RESULT_OK) { - mCallback.onPackageInstalled(InstallerCallback.RETURN_SUCCESS, false); + mCallback.onSuccess(InstallerCallback.OPERATION_INSTALL, false); } else { - mCallback.onPackageInstalled(InstallerCallback.RETURN_CANCEL, false); + mCallback.onError(InstallerCallback.OPERATION_INSTALL, false, "todo"); } return true; case REQUEST_CODE_DELETE: if (resultCode == Activity.RESULT_OK) { - mCallback.onPackageDeleted(InstallerCallback.RETURN_SUCCESS, false); + mCallback.onSuccess(InstallerCallback.OPERATION_DELETE, false); } else { - mCallback.onPackageDeleted(InstallerCallback.RETURN_CANCEL, false); + mCallback.onError(InstallerCallback.OPERATION_DELETE, false, "todo"); } return true; diff --git a/src/org/fdroid/fdroid/installer/Installer.java b/src/org/fdroid/fdroid/installer/Installer.java index f27857f81..ec3a97e33 100644 --- a/src/org/fdroid/fdroid/installer/Installer.java +++ b/src/org/fdroid/fdroid/installer/Installer.java @@ -74,12 +74,13 @@ abstract public class Installer { */ public interface InstallerCallback { - public static final int RETURN_SUCCESS = 1; - public static final int RETURN_CANCEL = 0; + public static final int OPERATION_GENERIC_ERROR = 0; + public static final int OPERATION_INSTALL = 1; + public static final int OPERATION_DELETE = 2; - public void onPackageInstalled(int returnCode, boolean unattended); - - public void onPackageDeleted(int returnCode, boolean unattended); + public void onSuccess(int operation, boolean unattended); + + public void onError(int operation, boolean unattended, String reason); } public Installer(Context context, PackageManager pm, InstallerCallback callback) diff --git a/src/org/fdroid/fdroid/installer/RootInstaller.java b/src/org/fdroid/fdroid/installer/RootInstaller.java index d57294140..2d66a3335 100644 --- a/src/org/fdroid/fdroid/installer/RootInstaller.java +++ b/src/org/fdroid/fdroid/installer/RootInstaller.java @@ -62,8 +62,9 @@ public class RootInstaller extends Installer { // exec failed // Shell.OnCommandResultListener.SHELL_EXEC_FAILED - // reportError("Error opening root shell: exitCode " + - // exitCode); + // TODO + mCallback.onError(InstallerCallback.OPERATION_GENERIC_ERROR, true, + "Error opening root shell with exitCode " + exitCode); } else { // Shell is up: send our first request sendInstallCommand(apkFile); @@ -95,8 +96,9 @@ public class RootInstaller extends Installer { // exec failed // Shell.OnCommandResultListener.SHELL_EXEC_FAILED - // reportError("Error opening root shell: exitCode " + - // exitCode); + // TODO + mCallback.onError(InstallerCallback.OPERATION_GENERIC_ERROR, true, + "Error opening root shell with exitCode " + exitCode); } else { // Shell is up: send our first request sendDeleteCommand(packageName); @@ -120,9 +122,9 @@ public class RootInstaller extends Installer { rootSession.close(); if (exitCode < 0) { - // reportError("Error executing commands: exitCode " - // + exitCode); - mCallback.onPackageInstalled(InstallerCallback.RETURN_CANCEL, true); + // TODO + mCallback.onError(InstallerCallback.OPERATION_INSTALL, true, + "Install failed with exit code " + exitCode); } else { // wait until Android's internal PackageManger has // received the new package state @@ -134,8 +136,7 @@ public class RootInstaller extends Installer { } catch (InterruptedException e) { } - mCallback.onPackageInstalled(InstallerCallback.RETURN_SUCCESS, - true); + mCallback.onSuccess(InstallerCallback.OPERATION_INSTALL, true); } }); wait.start(); @@ -152,9 +153,9 @@ public class RootInstaller extends Installer { rootSession.close(); if (exitCode < 0) { - // reportError("Error executing commands: exitCode " - // + exitCode); - mCallback.onPackageDeleted(InstallerCallback.RETURN_CANCEL, true); + // TODO + mCallback.onError(InstallerCallback.OPERATION_DELETE, true, + "Delete failed with exit code " + exitCode); } else { // wait until Android's internal PackageManger has // received the new package state @@ -166,8 +167,7 @@ public class RootInstaller extends Installer { } catch (InterruptedException e) { } - mCallback.onPackageDeleted(InstallerCallback.RETURN_SUCCESS, - true); + mCallback.onSuccess(InstallerCallback.OPERATION_DELETE, true); } }); wait.start(); diff --git a/src/org/fdroid/fdroid/installer/SystemPermissionInstaller.java b/src/org/fdroid/fdroid/installer/SystemPermissionInstaller.java index 6cd07e080..51da59fa5 100644 --- a/src/org/fdroid/fdroid/installer/SystemPermissionInstaller.java +++ b/src/org/fdroid/fdroid/installer/SystemPermissionInstaller.java @@ -93,13 +93,13 @@ public class SystemPermissionInstaller extends Installer { } catch (InterruptedException e) { } - mCallback.onPackageInstalled(InstallerCallback.RETURN_SUCCESS, true); + mCallback.onSuccess(InstallerCallback.OPERATION_INSTALL, true); } }); wait.start(); } else { Log.d(TAG, "Install failed: " + returnCode); - mCallback.onPackageInstalled(InstallerCallback.RETURN_CANCEL, true); + mCallback.onError(InstallerCallback.OPERATION_INSTALL, true, "todo"); } } } @@ -123,13 +123,13 @@ public class SystemPermissionInstaller extends Installer { } catch (InterruptedException e) { } - mCallback.onPackageDeleted(InstallerCallback.RETURN_SUCCESS, true); + mCallback.onSuccess(InstallerCallback.OPERATION_DELETE, true); } }); wait.start(); } else { Log.d(TAG, "Delete failed: " + returnCode); - mCallback.onPackageDeleted(InstallerCallback.RETURN_CANCEL, true); + mCallback.onError(InstallerCallback.OPERATION_DELETE, true, "todo"); } } }