Launching updated package after finishing package installer

The updated package was not started after package update completed.
That's because the package installer were started on the app task,
start the app again would bring the same task.

Therefore, let's finish all the package installer activities before
launching the updated app.

Meanwhile, FLAG_ACTIVITY_CLEAR_TOP is used to clear the Setting's
activity instead of reorder the PackageInstallerActivity to front,
which could remove the Settings activity during the update flow.

Bug: 282618106
Test: verified locally with package update
Change-Id: Ie5942d1a9745ea9e3e9f0c04fa5d0ad332f23c93
This commit is contained in:
Louis Chang
2023-05-30 04:14:12 +00:00
parent fae45798fd
commit 791697e5e7
3 changed files with 10 additions and 8 deletions

View File

@@ -16,6 +16,8 @@
package com.android.packageinstaller;
import static android.content.Intent.CATEGORY_LAUNCHER;
import static com.android.packageinstaller.PackageInstallerActivity.EXTRA_STAGED_SESSION_ID;
import android.app.Activity;
@@ -45,6 +47,9 @@ public class DeleteStagedFileOnResult extends Activity {
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
setResult(resultCode, data);
finish();
if (data != null && data.hasCategory(CATEGORY_LAUNCHER)) {
startActivity(data);
}
}
@Override

View File

@@ -17,7 +17,6 @@
package com.android.packageinstaller;
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
@@ -123,11 +122,7 @@ public class InstallSuccess extends AlertActivity {
Button launchButton = mAlert.getButton(DialogInterface.BUTTON_POSITIVE);
if (enabled) {
launchButton.setOnClickListener(view -> {
try {
startActivity(mLaunchIntent);
} catch (ActivityNotFoundException | SecurityException e) {
Log.e(LOG_TAG, "Could not start activity", e);
}
setResult(Activity.RESULT_OK, mLaunchIntent);
finish();
});
} else {

View File

@@ -16,8 +16,9 @@
*/
package com.android.packageinstaller;
import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP;
import static android.content.Intent.FLAG_ACTIVITY_NO_HISTORY;
import static android.content.Intent.FLAG_ACTIVITY_REORDER_TO_FRONT;
import static android.content.Intent.FLAG_ACTIVITY_SINGLE_TOP;
import static android.view.WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
import android.Manifest;
@@ -789,7 +790,8 @@ public class PackageInstallerActivity extends AlertActivity {
}
new Handler(Looper.getMainLooper()).postDelayed(() -> {
if (!isDestroyed()) {
startActivity(getIntent().addFlags(FLAG_ACTIVITY_REORDER_TO_FRONT));
startActivity(getIntent().addFlags(
FLAG_ACTIVITY_CLEAR_TOP | FLAG_ACTIVITY_SINGLE_TOP));
}
}, 500);