diff --git a/src/org/fdroid/fdroid/AppDetails.java b/src/org/fdroid/fdroid/AppDetails.java index 6d8d4361a..adcfd6707 100644 --- a/src/org/fdroid/fdroid/AppDetails.java +++ b/src/org/fdroid/fdroid/AppDetails.java @@ -964,28 +964,46 @@ public class AppDetails extends ListActivity { @Override public void onSuccess(final int operation) { - runOnUiThread(new Runnable() { + // TODO: this is a hack!!! + // Currently the views are not automatically updated when the receivers are notified + // if an app is installed/removed + // We are currently waiting that the receivers change the database and then reload the view + // + // Better approach: + // Implement Android Loader that restarts automatically on db change! + Thread wait = new Thread(new Runnable() { @Override public void run() { - Log.d(TAG, "handling installer onSuccess"); - - notifyAppChanged(app.id); - - resetRequired = true; - - if (operation == Installer.InstallerCallback.OPERATION_INSTALL) { - if (downloadHandler != null) { - downloadHandler = null; - } - - PackageManagerCompat.setInstaller(mPm, app.id); + try { + Thread.sleep(2000); + } catch (InterruptedException e) { } - // TODO: whole onResume? - onResume(); - setProgressBarIndeterminateVisibility(false); + runOnUiThread(new Runnable() { + @Override + public void run() { + Log.d(TAG, "handling installer onSuccess"); + + notifyAppChanged(app.id); + + resetRequired = true; + + if (operation == Installer.InstallerCallback.OPERATION_INSTALL) { + if (downloadHandler != null) { + downloadHandler = null; + } + + PackageManagerCompat.setInstaller(mPm, app.id); + } + + // TODO: whole onResume? + onResume(); + setProgressBarIndeterminateVisibility(false); + } + }); } }); + wait.start(); } @Override diff --git a/src/org/fdroid/fdroid/installer/DefaultInstallerSdk14.java b/src/org/fdroid/fdroid/installer/DefaultInstallerSdk14.java index 218a3242b..e08157037 100644 --- a/src/org/fdroid/fdroid/installer/DefaultInstallerSdk14.java +++ b/src/org/fdroid/fdroid/installer/DefaultInstallerSdk14.java @@ -21,8 +21,6 @@ package org.fdroid.fdroid.installer; import java.io.File; -import org.fdroid.fdroid.installer.Installer.InstallerCallback; - import android.annotation.TargetApi; import android.app.Activity; import android.content.ActivityNotFoundException; @@ -99,82 +97,40 @@ public class DefaultInstallerSdk14 extends Installer { } @Override - public boolean handleOnActivityResult(final int requestCode, final int resultCode, Intent data) { + public boolean handleOnActivityResult(int requestCode, int resultCode, Intent data) { /** * resultCode is always 0 on Android < 4.0. See * com.android.packageinstaller.PackageInstallerActivity: setResult is * never executed! */ - // wait until Android's internal PackageManger has - // received the new package state - Thread wait = new Thread(new Runnable() { - @Override - public void run() { - try { - Thread.sleep(2000); - } catch (InterruptedException e) { + switch (requestCode) { + case REQUEST_CODE_INSTALL: + if (resultCode == Activity.RESULT_OK) { + mCallback.onSuccess(InstallerCallback.OPERATION_INSTALL); + } else if (resultCode == Activity.RESULT_CANCELED) { + mCallback.onError(InstallerCallback.OPERATION_INSTALL, + InstallerCallback.ERROR_CODE_CANCELED); + } else { + mCallback.onError(InstallerCallback.OPERATION_INSTALL, + InstallerCallback.ERROR_CODE_OTHER); } - switch (requestCode) { - case REQUEST_CODE_INSTALL: - if (resultCode == Activity.RESULT_OK) { - mCallback.onSuccess(InstallerCallback.OPERATION_INSTALL); - } else if (resultCode == Activity.RESULT_CANCELED) { - mCallback.onError(InstallerCallback.OPERATION_INSTALL, - InstallerCallback.ERROR_CODE_CANCELED); - } else { - mCallback.onError(InstallerCallback.OPERATION_INSTALL, - InstallerCallback.ERROR_CODE_OTHER); - } - - // return true; - case REQUEST_CODE_DELETE: - if (resultCode == Activity.RESULT_OK) { - mCallback.onSuccess(InstallerCallback.OPERATION_DELETE); - } else if (resultCode == Activity.RESULT_CANCELED) { - mCallback.onError(InstallerCallback.OPERATION_DELETE, - InstallerCallback.ERROR_CODE_CANCELED); - } else { - mCallback.onError(InstallerCallback.OPERATION_DELETE, - InstallerCallback.ERROR_CODE_OTHER); - } - - // return true; - default: - // return false; + return true; + case REQUEST_CODE_DELETE: + if (resultCode == Activity.RESULT_OK) { + mCallback.onSuccess(InstallerCallback.OPERATION_DELETE); + } else if (resultCode == Activity.RESULT_CANCELED) { + mCallback.onError(InstallerCallback.OPERATION_DELETE, + InstallerCallback.ERROR_CODE_CANCELED); + } else { + mCallback.onError(InstallerCallback.OPERATION_DELETE, + InstallerCallback.ERROR_CODE_OTHER); } - } - }); - wait.start(); - return true; - // case REQUEST_CODE_INSTALL: - // if (resultCode == Activity.RESULT_OK) { - // mCallback.onSuccess(InstallerCallback.OPERATION_INSTALL); - // } else if (resultCode == Activity.RESULT_CANCELED) { - // mCallback.onError(InstallerCallback.OPERATION_INSTALL, - // InstallerCallback.ERROR_CODE_CANCELED); - // } else { - // mCallback.onError(InstallerCallback.OPERATION_INSTALL, - // InstallerCallback.ERROR_CODE_OTHER); - // } - // - // return true; - // case REQUEST_CODE_DELETE: - // if (resultCode == Activity.RESULT_OK) { - // mCallback.onSuccess(InstallerCallback.OPERATION_DELETE); - // } else if (resultCode == Activity.RESULT_CANCELED) { - // mCallback.onError(InstallerCallback.OPERATION_DELETE, - // InstallerCallback.ERROR_CODE_CANCELED); - // } else { - // mCallback.onError(InstallerCallback.OPERATION_DELETE, - // InstallerCallback.ERROR_CODE_OTHER); - // } - // - // return true; - // default: - // return false; - // } + return true; + default: + return false; + } } @Override diff --git a/src/org/fdroid/fdroid/installer/RootInstaller.java b/src/org/fdroid/fdroid/installer/RootInstaller.java index 04380428f..67e10aa0a 100644 --- a/src/org/fdroid/fdroid/installer/RootInstaller.java +++ b/src/org/fdroid/fdroid/installer/RootInstaller.java @@ -158,20 +158,7 @@ public class RootInstaller extends Installer { mCallback.onError(InstallerCallback.OPERATION_INSTALL, InstallerCallback.ERROR_CODE_OTHER); } else { - // wait until Android's internal PackageManger - // has received the new package state - Thread wait = new Thread(new Runnable() { - @Override - public void run() { - try { - Thread.sleep(2000); - } catch (InterruptedException e) { - } - - mCallback.onSuccess(InstallerCallback.OPERATION_INSTALL); - } - }); - wait.start(); + mCallback.onSuccess(InstallerCallback.OPERATION_INSTALL); } } }); @@ -190,20 +177,7 @@ public class RootInstaller extends Installer { mCallback.onError(InstallerCallback.OPERATION_INSTALL, InstallerCallback.ERROR_CODE_OTHER); } else { - // wait until Android's internal PackageManger has - // received the new package state - Thread wait = new Thread(new Runnable() { - @Override - public void run() { - try { - Thread.sleep(2000); - } catch (InterruptedException e) { - } - - mCallback.onSuccess(InstallerCallback.OPERATION_INSTALL); - } - }); - wait.start(); + mCallback.onSuccess(InstallerCallback.OPERATION_INSTALL); } } }); @@ -221,20 +195,7 @@ public class RootInstaller extends Installer { mCallback.onError(InstallerCallback.OPERATION_DELETE, InstallerCallback.ERROR_CODE_OTHER); } else { - // wait until Android's internal PackageManger has - // received the new package state - Thread wait = new Thread(new Runnable() { - @Override - public void run() { - try { - Thread.sleep(2000); - } catch (InterruptedException e) { - } - - mCallback.onSuccess(InstallerCallback.OPERATION_DELETE); - } - }); - wait.start(); + mCallback.onSuccess(InstallerCallback.OPERATION_DELETE); } } }); diff --git a/src/org/fdroid/fdroid/installer/SystemPermissionInstaller.java b/src/org/fdroid/fdroid/installer/SystemPermissionInstaller.java index a3fdb905e..708a6caaa 100644 --- a/src/org/fdroid/fdroid/installer/SystemPermissionInstaller.java +++ b/src/org/fdroid/fdroid/installer/SystemPermissionInstaller.java @@ -96,20 +96,7 @@ public class SystemPermissionInstaller extends Installer { if (returnCode == INSTALL_SUCCEEDED) { Log.d(TAG, "Install succeeded"); - // wait until Android's internal PackageManger has - // received the new package state - Thread wait = new Thread(new Runnable() { - @Override - public void run() { - try { - Thread.sleep(2000); - } catch (InterruptedException e) { - } - - mCallback.onSuccess(InstallerCallback.OPERATION_INSTALL); - } - }); - wait.start(); + mCallback.onSuccess(InstallerCallback.OPERATION_INSTALL); } else { Log.e(TAG, "Install failed with returnCode " + returnCode); mCallback.onError(InstallerCallback.OPERATION_INSTALL, @@ -127,20 +114,7 @@ public class SystemPermissionInstaller extends Installer { if (returnCode == DELETE_SUCCEEDED) { Log.d(TAG, "Delete succeeded"); - // wait until Android's internal PackageManger has - // received the new package state - Thread wait = new Thread(new Runnable() { - @Override - public void run() { - try { - Thread.sleep(2000); - } catch (InterruptedException e) { - } - - mCallback.onSuccess(InstallerCallback.OPERATION_DELETE); - } - }); - wait.start(); + mCallback.onSuccess(InstallerCallback.OPERATION_DELETE); } else { Log.e(TAG, "Delete failed with returnCode " + returnCode); mCallback.onError(InstallerCallback.OPERATION_DELETE,