Document installer callback hack
This commit is contained in:
parent
c48dcdc785
commit
e1d9e0f3b1
@ -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
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -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,
|
||||
|
Loading…
x
Reference in New Issue
Block a user