Document installer callback hack
This commit is contained in:
parent
c48dcdc785
commit
e1d9e0f3b1
@ -964,28 +964,46 @@ public class AppDetails extends ListActivity {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onSuccess(final int operation) {
|
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
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
Log.d(TAG, "handling installer onSuccess");
|
try {
|
||||||
|
Thread.sleep(2000);
|
||||||
notifyAppChanged(app.id);
|
} catch (InterruptedException e) {
|
||||||
|
|
||||||
resetRequired = true;
|
|
||||||
|
|
||||||
if (operation == Installer.InstallerCallback.OPERATION_INSTALL) {
|
|
||||||
if (downloadHandler != null) {
|
|
||||||
downloadHandler = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
PackageManagerCompat.setInstaller(mPm, app.id);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: whole onResume?
|
runOnUiThread(new Runnable() {
|
||||||
onResume();
|
@Override
|
||||||
setProgressBarIndeterminateVisibility(false);
|
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
|
@Override
|
||||||
|
@ -21,8 +21,6 @@ package org.fdroid.fdroid.installer;
|
|||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
|
||||||
import org.fdroid.fdroid.installer.Installer.InstallerCallback;
|
|
||||||
|
|
||||||
import android.annotation.TargetApi;
|
import android.annotation.TargetApi;
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.ActivityNotFoundException;
|
import android.content.ActivityNotFoundException;
|
||||||
@ -99,82 +97,40 @@ public class DefaultInstallerSdk14 extends Installer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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
|
* resultCode is always 0 on Android < 4.0. See
|
||||||
* com.android.packageinstaller.PackageInstallerActivity: setResult is
|
* com.android.packageinstaller.PackageInstallerActivity: setResult is
|
||||||
* never executed!
|
* never executed!
|
||||||
*/
|
*/
|
||||||
// wait until Android's internal PackageManger has
|
switch (requestCode) {
|
||||||
// received the new package state
|
case REQUEST_CODE_INSTALL:
|
||||||
Thread wait = new Thread(new Runnable() {
|
if (resultCode == Activity.RESULT_OK) {
|
||||||
@Override
|
mCallback.onSuccess(InstallerCallback.OPERATION_INSTALL);
|
||||||
public void run() {
|
} else if (resultCode == Activity.RESULT_CANCELED) {
|
||||||
try {
|
mCallback.onError(InstallerCallback.OPERATION_INSTALL,
|
||||||
Thread.sleep(2000);
|
InstallerCallback.ERROR_CODE_CANCELED);
|
||||||
} catch (InterruptedException e) {
|
} else {
|
||||||
|
mCallback.onError(InstallerCallback.OPERATION_INSTALL,
|
||||||
|
InstallerCallback.ERROR_CODE_OTHER);
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (requestCode) {
|
return true;
|
||||||
case REQUEST_CODE_INSTALL:
|
case REQUEST_CODE_DELETE:
|
||||||
if (resultCode == Activity.RESULT_OK) {
|
if (resultCode == Activity.RESULT_OK) {
|
||||||
mCallback.onSuccess(InstallerCallback.OPERATION_INSTALL);
|
mCallback.onSuccess(InstallerCallback.OPERATION_DELETE);
|
||||||
} else if (resultCode == Activity.RESULT_CANCELED) {
|
} else if (resultCode == Activity.RESULT_CANCELED) {
|
||||||
mCallback.onError(InstallerCallback.OPERATION_INSTALL,
|
mCallback.onError(InstallerCallback.OPERATION_DELETE,
|
||||||
InstallerCallback.ERROR_CODE_CANCELED);
|
InstallerCallback.ERROR_CODE_CANCELED);
|
||||||
} else {
|
} else {
|
||||||
mCallback.onError(InstallerCallback.OPERATION_INSTALL,
|
mCallback.onError(InstallerCallback.OPERATION_DELETE,
|
||||||
InstallerCallback.ERROR_CODE_OTHER);
|
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;
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
});
|
|
||||||
wait.start();
|
|
||||||
return true;
|
|
||||||
|
|
||||||
// case REQUEST_CODE_INSTALL:
|
return true;
|
||||||
// if (resultCode == Activity.RESULT_OK) {
|
default:
|
||||||
// mCallback.onSuccess(InstallerCallback.OPERATION_INSTALL);
|
return false;
|
||||||
// } 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;
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -158,20 +158,7 @@ public class RootInstaller extends Installer {
|
|||||||
mCallback.onError(InstallerCallback.OPERATION_INSTALL,
|
mCallback.onError(InstallerCallback.OPERATION_INSTALL,
|
||||||
InstallerCallback.ERROR_CODE_OTHER);
|
InstallerCallback.ERROR_CODE_OTHER);
|
||||||
} else {
|
} else {
|
||||||
// wait until Android's internal PackageManger
|
mCallback.onSuccess(InstallerCallback.OPERATION_INSTALL);
|
||||||
// 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();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -190,20 +177,7 @@ public class RootInstaller extends Installer {
|
|||||||
mCallback.onError(InstallerCallback.OPERATION_INSTALL,
|
mCallback.onError(InstallerCallback.OPERATION_INSTALL,
|
||||||
InstallerCallback.ERROR_CODE_OTHER);
|
InstallerCallback.ERROR_CODE_OTHER);
|
||||||
} else {
|
} else {
|
||||||
// wait until Android's internal PackageManger has
|
mCallback.onSuccess(InstallerCallback.OPERATION_INSTALL);
|
||||||
// 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();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -221,20 +195,7 @@ public class RootInstaller extends Installer {
|
|||||||
mCallback.onError(InstallerCallback.OPERATION_DELETE,
|
mCallback.onError(InstallerCallback.OPERATION_DELETE,
|
||||||
InstallerCallback.ERROR_CODE_OTHER);
|
InstallerCallback.ERROR_CODE_OTHER);
|
||||||
} else {
|
} else {
|
||||||
// wait until Android's internal PackageManger has
|
mCallback.onSuccess(InstallerCallback.OPERATION_DELETE);
|
||||||
// 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();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -96,20 +96,7 @@ public class SystemPermissionInstaller extends Installer {
|
|||||||
if (returnCode == INSTALL_SUCCEEDED) {
|
if (returnCode == INSTALL_SUCCEEDED) {
|
||||||
Log.d(TAG, "Install succeeded");
|
Log.d(TAG, "Install succeeded");
|
||||||
|
|
||||||
// wait until Android's internal PackageManger has
|
mCallback.onSuccess(InstallerCallback.OPERATION_INSTALL);
|
||||||
// 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();
|
|
||||||
} else {
|
} else {
|
||||||
Log.e(TAG, "Install failed with returnCode " + returnCode);
|
Log.e(TAG, "Install failed with returnCode " + returnCode);
|
||||||
mCallback.onError(InstallerCallback.OPERATION_INSTALL,
|
mCallback.onError(InstallerCallback.OPERATION_INSTALL,
|
||||||
@ -127,20 +114,7 @@ public class SystemPermissionInstaller extends Installer {
|
|||||||
if (returnCode == DELETE_SUCCEEDED) {
|
if (returnCode == DELETE_SUCCEEDED) {
|
||||||
Log.d(TAG, "Delete succeeded");
|
Log.d(TAG, "Delete succeeded");
|
||||||
|
|
||||||
// wait until Android's internal PackageManger has
|
mCallback.onSuccess(InstallerCallback.OPERATION_DELETE);
|
||||||
// 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();
|
|
||||||
} else {
|
} else {
|
||||||
Log.e(TAG, "Delete failed with returnCode " + returnCode);
|
Log.e(TAG, "Delete failed with returnCode " + returnCode);
|
||||||
mCallback.onError(InstallerCallback.OPERATION_DELETE,
|
mCallback.onError(InstallerCallback.OPERATION_DELETE,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user