Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f4e71476 authored by Winson Chiu's avatar Winson Chiu
Browse files

Rebind InstallSuccess UI on resume

Similar to a previous fix for the main Activity, AlertDialog doesn't
work properly if the UI is set up when it's not visible. To avoid this,
rebind in onResume. A future refactor should clean this up to avoid the
use of AlertDialog.

Bug: 182493158

Test: manual, verify fail/success of steps in linked bug

Change-Id: I6547385900d4c58ed3d113d7d0162c0cb8c20cba
parent 3c8e0904
Loading
Loading
Loading
Loading
+61 −38
Original line number Diff line number Diff line
@@ -41,6 +41,15 @@ import java.util.List;
public class InstallSuccess extends AlertActivity {
    private static final String LOG_TAG = InstallSuccess.class.getSimpleName();

    @Nullable
    private PackageUtil.AppSnippet mAppSnippet;

    @Nullable
    private String mAppPackageName;

    @Nullable
    private Intent mLaunchIntent;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
@@ -55,40 +64,55 @@ public class InstallSuccess extends AlertActivity {
            Intent intent = getIntent();
            ApplicationInfo appInfo =
                    intent.getParcelableExtra(PackageUtil.INTENT_ATTR_APPLICATION_INFO);
            mAppPackageName = appInfo.packageName;
            Uri packageURI = intent.getData();

            // Set header icon and title
            PackageUtil.AppSnippet as;
            PackageManager pm = getPackageManager();

            if ("package".equals(packageURI.getScheme())) {
                as = new PackageUtil.AppSnippet(pm.getApplicationLabel(appInfo),
                mAppSnippet = new PackageUtil.AppSnippet(pm.getApplicationLabel(appInfo),
                        pm.getApplicationIcon(appInfo));
            } else {
                File sourceFile = new File(packageURI.getPath());
                as = PackageUtil.getAppSnippet(this, appInfo, sourceFile);
                mAppSnippet = PackageUtil.getAppSnippet(this, appInfo, sourceFile);
            }

            mLaunchIntent = getPackageManager().getLaunchIntentForPackage(mAppPackageName);

            bindUi();
        }
    }

            mAlert.setIcon(as.icon);
            mAlert.setTitle(as.label);
    @Override
    protected void onResume() {
        super.onResume();
        bindUi();
    }

    private void bindUi() {
        if (mAppSnippet == null) {
            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),
                (ignored, ignored2) -> {
                        if (appInfo.packageName != null) {
                            Log.i(LOG_TAG, "Finished installing " + appInfo.packageName);
                    if (mAppPackageName != null) {
                        Log.i(LOG_TAG, "Finished installing " + mAppPackageName);
                    }
                    finish();
                }, null);
        setupAlert();
        requireViewById(R.id.install_success).setVisibility(View.VISIBLE);
        // Enable or disable "launch" button
            Intent launchIntent = getPackageManager().getLaunchIntentForPackage(
                    appInfo.packageName);
        boolean enabled = false;
            if (launchIntent != null) {
                List<ResolveInfo> list = getPackageManager().queryIntentActivities(launchIntent,
        if (mLaunchIntent != null) {
            List<ResolveInfo> list = getPackageManager().queryIntentActivities(mLaunchIntent,
                    0);
            if (list != null && list.size() > 0) {
                enabled = true;
@@ -99,7 +123,7 @@ public class InstallSuccess extends AlertActivity {
        if (enabled) {
            launchButton.setOnClickListener(view -> {
                try {
                        startActivity(launchIntent);
                    startActivity(mLaunchIntent);
                } catch (ActivityNotFoundException | SecurityException e) {
                    Log.e(LOG_TAG, "Could not start activity", e);
                }
@@ -110,4 +134,3 @@ public class InstallSuccess extends AlertActivity {
        }
    }
}
}