Document installer callback hack

This commit is contained in:
Dominik Schürmann 2014-05-11 00:26:31 +02:00
parent c48dcdc785
commit e1d9e0f3b1
4 changed files with 64 additions and 155 deletions

View File

@ -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

View File

@ -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

View File

@ -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);
}
}
});

View File

@ -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,