summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/PackageInstaller/AndroidManifest.xml1
-rw-r--r--packages/PackageInstaller/res/values/themes.xml4
-rw-r--r--packages/PackageInstaller/src/com/android/packageinstaller/InstallFailed.java32
-rw-r--r--packages/PackageInstaller/src/com/android/packageinstaller/InstallInstalling.java26
-rw-r--r--packages/PackageInstaller/src/com/android/packageinstaller/InstallStaging.java38
-rw-r--r--packages/PackageInstaller/src/com/android/packageinstaller/InstallSuccess.java32
-rw-r--r--packages/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java35
7 files changed, 111 insertions, 57 deletions
diff --git a/packages/PackageInstaller/AndroidManifest.xml b/packages/PackageInstaller/AndroidManifest.xml
index a16f9f55b466..3065362ce840 100644
--- a/packages/PackageInstaller/AndroidManifest.xml
+++ b/packages/PackageInstaller/AndroidManifest.xml
@@ -81,6 +81,7 @@
android:exported="false" />
<activity android:name=".PackageInstallerActivity"
+ android:theme="@style/Theme.AlertDialogActivity.NoAnimation"
android:exported="false" />
<activity android:name=".InstallInstalling"
diff --git a/packages/PackageInstaller/res/values/themes.xml b/packages/PackageInstaller/res/values/themes.xml
index aa1fa164b021..811fa7380c48 100644
--- a/packages/PackageInstaller/res/values/themes.xml
+++ b/packages/PackageInstaller/res/values/themes.xml
@@ -32,8 +32,8 @@
<item name="android:windowNoTitle">true</item>
</style>
- <style name="Theme.AlertDialogActivity.NoDim">
- <item name="android:windowNoTitle">true</item>
+ <style name="Theme.AlertDialogActivity.NoDim"
+ parent="@style/Theme.AlertDialogActivity.NoActionBar">
<item name="android:backgroundDimAmount">0</item>
</style>
diff --git a/packages/PackageInstaller/src/com/android/packageinstaller/InstallFailed.java b/packages/PackageInstaller/src/com/android/packageinstaller/InstallFailed.java
index 74f04e093162..eef21991b845 100644
--- a/packages/PackageInstaller/src/com/android/packageinstaller/InstallFailed.java
+++ b/packages/PackageInstaller/src/com/android/packageinstaller/InstallFailed.java
@@ -36,12 +36,14 @@ import androidx.annotation.Nullable;
/**
* Installation failed: Return status code to the caller or display failure UI to user
*/
-public class InstallFailed extends AlertActivity {
+public class InstallFailed extends Activity {
private static final String LOG_TAG = InstallFailed.class.getSimpleName();
/** Label of the app that failed to install */
private CharSequence mLabel;
+ private AlertDialog mDialog;
+
/**
* Unhide the appropriate label for the statusCode.
*
@@ -53,19 +55,19 @@ public class InstallFailed extends AlertActivity {
View viewToEnable;
switch (statusCode) {
case PackageInstaller.STATUS_FAILURE_BLOCKED:
- viewToEnable = requireViewById(R.id.install_failed_blocked);
+ viewToEnable = mDialog.requireViewById(R.id.install_failed_blocked);
break;
case PackageInstaller.STATUS_FAILURE_CONFLICT:
- viewToEnable = requireViewById(R.id.install_failed_conflict);
+ viewToEnable = mDialog.requireViewById(R.id.install_failed_conflict);
break;
case PackageInstaller.STATUS_FAILURE_INCOMPATIBLE:
- viewToEnable = requireViewById(R.id.install_failed_incompatible);
+ viewToEnable = mDialog.requireViewById(R.id.install_failed_incompatible);
break;
case PackageInstaller.STATUS_FAILURE_INVALID:
- viewToEnable = requireViewById(R.id.install_failed_invalid_apk);
+ viewToEnable = mDialog.requireViewById(R.id.install_failed_invalid_apk);
break;
default:
- viewToEnable = requireViewById(R.id.install_failed);
+ viewToEnable = mDialog.requireViewById(R.id.install_failed);
break;
}
@@ -105,12 +107,18 @@ public class InstallFailed extends AlertActivity {
// Store label for dialog
mLabel = as.label;
- mAlert.setIcon(as.icon);
- mAlert.setTitle(as.label);
- mAlert.setView(R.layout.install_content_view);
- mAlert.setButton(DialogInterface.BUTTON_POSITIVE, getString(R.string.done),
- (ignored, ignored2) -> finish(), null);
- setupAlert();
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+
+ builder.setIcon(as.icon);
+ builder.setTitle(as.label);
+ builder.setView(R.layout.install_content_view);
+ builder.setPositiveButton(getString(R.string.done),
+ (ignored, ignored2) -> finish());
+ builder.setOnCancelListener(dialog -> {
+ finish();
+ });
+ mDialog = builder.create();
+ mDialog.show();
// Show out of space dialog if needed
if (statusCode == PackageInstaller.STATUS_FAILURE_STORAGE) {
diff --git a/packages/PackageInstaller/src/com/android/packageinstaller/InstallInstalling.java b/packages/PackageInstaller/src/com/android/packageinstaller/InstallInstalling.java
index 4992ef1e1c00..8d8254ad4058 100644
--- a/packages/PackageInstaller/src/com/android/packageinstaller/InstallInstalling.java
+++ b/packages/PackageInstaller/src/com/android/packageinstaller/InstallInstalling.java
@@ -19,6 +19,8 @@ package com.android.packageinstaller;
import static com.android.packageinstaller.PackageInstallerActivity.EXTRA_APP_SNIPPET;
import static com.android.packageinstaller.PackageInstallerActivity.EXTRA_STAGED_SESSION_ID;
+import android.app.Activity;
+import android.app.AlertDialog;
import android.app.PendingIntent;
import android.content.DialogInterface;
import android.content.Intent;
@@ -43,7 +45,7 @@ import java.io.IOException;
* <p>This has two phases: First send the data to the package manager, then wait until the package
* manager processed the result.</p>
*/
-public class InstallInstalling extends AlertActivity {
+public class InstallInstalling extends Activity {
private static final String LOG_TAG = InstallInstalling.class.getSimpleName();
private static final String SESSION_ID = "com.android.packageinstaller.SESSION_ID";
@@ -67,6 +69,8 @@ public class InstallInstalling extends AlertActivity {
/** The button that can cancel this dialog */
private Button mCancelButton;
+ private AlertDialog mDialog;
+
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -90,10 +94,12 @@ public class InstallInstalling extends AlertActivity {
PackageUtil.AppSnippet as = getIntent()
.getParcelableExtra(EXTRA_APP_SNIPPET, PackageUtil.AppSnippet.class);
- mAlert.setIcon(as.icon);
- mAlert.setTitle(as.label);
- mAlert.setView(R.layout.install_content_view);
- mAlert.setButton(DialogInterface.BUTTON_NEGATIVE, getString(R.string.cancel),
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+
+ builder.setIcon(as.icon);
+ builder.setTitle(as.label);
+ builder.setView(R.layout.install_content_view);
+ builder.setNegativeButton(getString(R.string.cancel),
(ignored, ignored2) -> {
if (mInstallingTask != null) {
mInstallingTask.cancel(true);
@@ -106,9 +112,11 @@ public class InstallInstalling extends AlertActivity {
setResult(RESULT_CANCELED);
finish();
- }, null);
- setupAlert();
- requireViewById(R.id.installing).setVisibility(View.VISIBLE);
+ });
+ builder.setCancelable(false);
+ mDialog = builder.create();
+ mDialog.show();
+ mDialog.requireViewById(R.id.installing).setVisibility(View.VISIBLE);
if (savedInstanceState != null) {
mSessionId = savedInstanceState.getInt(SESSION_ID);
@@ -145,7 +153,7 @@ public class InstallInstalling extends AlertActivity {
}
}
- mCancelButton = mAlert.getButton(DialogInterface.BUTTON_NEGATIVE);
+ mCancelButton = mDialog.getButton(DialogInterface.BUTTON_NEGATIVE);
}
}
diff --git a/packages/PackageInstaller/src/com/android/packageinstaller/InstallStaging.java b/packages/PackageInstaller/src/com/android/packageinstaller/InstallStaging.java
index 483fb8c451ae..cf2f85ed5356 100644
--- a/packages/PackageInstaller/src/com/android/packageinstaller/InstallStaging.java
+++ b/packages/PackageInstaller/src/com/android/packageinstaller/InstallStaging.java
@@ -52,7 +52,7 @@ import java.io.OutputStream;
* If a package gets installed from a content URI this step stages the installation session
* reading bytes from the URI.
*/
-public class InstallStaging extends AlertActivity {
+public class InstallStaging extends Activity {
private static final String LOG_TAG = InstallStaging.class.getSimpleName();
private static final String STAGED_SESSION_ID = "STAGED_SESSION_ID";
@@ -65,6 +65,8 @@ public class InstallStaging extends AlertActivity {
/** The session the package is in */
private int mStagedSessionId;
+ private AlertDialog mDialog;
+
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -72,10 +74,13 @@ public class InstallStaging extends AlertActivity {
mInstaller = getPackageManager().getPackageInstaller();
setFinishOnTouchOutside(true);
- mAlert.setIcon(R.drawable.ic_file_download);
- mAlert.setTitle(getString(R.string.app_name_unknown));
- mAlert.setView(R.layout.install_content_view);
- mAlert.setButton(DialogInterface.BUTTON_NEGATIVE, getString(R.string.cancel),
+
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+
+ builder.setIcon(R.drawable.ic_file_download);
+ builder.setTitle(getString(R.string.app_name_unknown));
+ builder.setView(R.layout.install_content_view);
+ builder.setNegativeButton(getString(R.string.cancel),
(ignored, ignored2) -> {
if (mStagingTask != null) {
mStagingTask.cancel(true);
@@ -85,9 +90,21 @@ public class InstallStaging extends AlertActivity {
setResult(RESULT_CANCELED);
finish();
- }, null);
- setupAlert();
- requireViewById(R.id.staging).setVisibility(View.VISIBLE);
+ });
+ builder.setOnCancelListener(dialog -> {
+ if (mStagingTask != null) {
+ mStagingTask.cancel(true);
+ }
+
+ cleanupStagingSession();
+
+ setResult(RESULT_CANCELED);
+ finish();
+ });
+ mDialog = builder.create();
+ mDialog.show();
+ mDialog.requireViewById(com.android.packageinstaller.R.id.staging)
+ .setVisibility(View.VISIBLE);
if (savedInstanceState != null) {
mStagedSessionId = savedInstanceState.getInt(STAGED_SESSION_ID, 0);
@@ -275,8 +292,9 @@ public class InstallStaging extends AlertActivity {
@Override
protected void onPreExecute() {
final long sizeBytes = getContentSizeBytes();
-
- mProgressBar = sizeBytes > 0 ? requireViewById(R.id.progress_indeterminate) : null;
+ if (sizeBytes > 0 && mDialog != null) {
+ mProgressBar = mDialog.requireViewById(R.id.progress_indeterminate);
+ }
if (mProgressBar != null) {
mProgressBar.setProgress(0);
mProgressBar.setMax(100);
diff --git a/packages/PackageInstaller/src/com/android/packageinstaller/InstallSuccess.java b/packages/PackageInstaller/src/com/android/packageinstaller/InstallSuccess.java
index fbc9525d4615..9af88c3b4694 100644
--- a/packages/PackageInstaller/src/com/android/packageinstaller/InstallSuccess.java
+++ b/packages/PackageInstaller/src/com/android/packageinstaller/InstallSuccess.java
@@ -17,6 +17,7 @@
package com.android.packageinstaller;
import android.app.Activity;
+import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
@@ -34,7 +35,7 @@ import java.util.List;
/**
* Finish installation: Return status code to the caller or display "success" UI to user
*/
-public class InstallSuccess extends AlertActivity {
+public class InstallSuccess extends Activity {
private static final String LOG_TAG = InstallSuccess.class.getSimpleName();
@Nullable
@@ -46,6 +47,8 @@ public class InstallSuccess extends AlertActivity {
@Nullable
private Intent mLaunchIntent;
+ private AlertDialog mDialog;
+
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -83,20 +86,27 @@ public class InstallSuccess extends AlertActivity {
return;
}
- mAlert.setIcon(mAppSnippet.icon);
- mAlert.setTitle(mAppSnippet.label);
- mAlert.setView(R.layout.install_content_view);
- mAlert.setButton(DialogInterface.BUTTON_POSITIVE, getString(R.string.launch), null,
- null);
- mAlert.setButton(DialogInterface.BUTTON_NEGATIVE, getString(R.string.done),
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ builder.setIcon(mAppSnippet.icon);
+ builder.setTitle(mAppSnippet.label);
+ builder.setView(R.layout.install_content_view);
+ builder.setPositiveButton(getString(R.string.launch), null);
+ builder.setNegativeButton(getString(R.string.done),
(ignored, ignored2) -> {
if (mAppPackageName != null) {
Log.i(LOG_TAG, "Finished installing " + mAppPackageName);
}
finish();
- }, null);
- setupAlert();
- requireViewById(R.id.install_success).setVisibility(View.VISIBLE);
+ });
+ builder.setOnCancelListener(dialog -> {
+ if (mAppPackageName != null) {
+ Log.i(LOG_TAG, "Finished installing " + mAppPackageName);
+ }
+ finish();
+ });
+ mDialog = builder.create();
+ mDialog.show();
+ mDialog.requireViewById(R.id.install_success).setVisibility(View.VISIBLE);
// Enable or disable "launch" button
boolean enabled = false;
if (mLaunchIntent != null) {
@@ -107,7 +117,7 @@ public class InstallSuccess extends AlertActivity {
}
}
- Button launchButton = mAlert.getButton(DialogInterface.BUTTON_POSITIVE);
+ Button launchButton = mDialog.getButton(DialogInterface.BUTTON_POSITIVE);
if (enabled) {
launchButton.setOnClickListener(view -> {
setResult(Activity.RESULT_OK, mLaunchIntent);
diff --git a/packages/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java b/packages/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java
index c5ae4a37b355..ceb580d170d0 100644
--- a/packages/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java
+++ b/packages/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java
@@ -71,7 +71,7 @@ import java.util.List;
* Based on the user response the package is then installed by launching InstallAppConfirm
* sub activity. All state transitions are handled in this activity
*/
-public class PackageInstallerActivity extends AlertActivity {
+public class PackageInstallerActivity extends Activity {
private static final String TAG = "PackageInstaller";
private static final int REQUEST_TRUST_EXTERNAL_SOURCE = 1;
@@ -135,11 +135,13 @@ public class PackageInstallerActivity extends AlertActivity {
// Would the mOk button be enabled if this activity would be resumed
private boolean mEnableOk = false;
+ private AlertDialog mDialog;
+
private void startInstallConfirm() {
TextView viewToEnable;
if (mAppInfo != null) {
- viewToEnable = requireViewById(R.id.install_confirm_question_update);
+ viewToEnable = mDialog.requireViewById(R.id.install_confirm_question_update);
final CharSequence existingUpdateOwnerLabel = getExistingUpdateOwnerLabel();
final CharSequence requestedUpdateOwnerLabel = getApplicationLabel(mCallingPackage);
@@ -157,7 +159,7 @@ public class PackageInstallerActivity extends AlertActivity {
}
} else {
// This is a new application with no permissions.
- viewToEnable = requireViewById(R.id.install_confirm_question);
+ viewToEnable = mDialog.requireViewById(R.id.install_confirm_question);
}
viewToEnable.setVisibility(View.VISIBLE);
@@ -480,10 +482,11 @@ public class PackageInstallerActivity extends AlertActivity {
}
private void bindUi() {
- mAlert.setIcon(mAppSnippet.icon);
- mAlert.setTitle(mAppSnippet.label);
- mAlert.setView(R.layout.install_content_view);
- mAlert.setButton(DialogInterface.BUTTON_POSITIVE, getString(R.string.install),
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ builder.setIcon(mAppSnippet.icon);
+ builder.setTitle(mAppSnippet.label);
+ builder.setView(R.layout.install_content_view);
+ builder.setPositiveButton(getString(R.string.install),
(ignored, ignored2) -> {
if (mOk.isEnabled()) {
if (mSessionId != -1) {
@@ -493,20 +496,26 @@ public class PackageInstallerActivity extends AlertActivity {
startInstall();
}
}
- }, null);
- mAlert.setButton(DialogInterface.BUTTON_NEGATIVE, getString(R.string.cancel),
+ });
+ builder.setNegativeButton(getString(R.string.cancel),
(ignored, ignored2) -> {
// Cancel and finish
setActivityResult(RESULT_CANCELED);
finish();
- }, null);
- setupAlert();
+ });
+ builder.setOnCancelListener(dialog -> {
+ // Cancel and finish
+ setActivityResult(RESULT_CANCELED);
+ finish();
+ });
+ mDialog = builder.create();
+ mDialog.show();
- mOk = mAlert.getButton(DialogInterface.BUTTON_POSITIVE);
+ mOk = mDialog.getButton(DialogInterface.BUTTON_POSITIVE);
mOk.setEnabled(false);
if (!mOk.isInTouchMode()) {
- mAlert.getButton(DialogInterface.BUTTON_NEGATIVE).requestFocus();
+ mDialog.getButton(DialogInterface.BUTTON_NEGATIVE).requestFocus();
}
}