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

Commit 7e7924bf authored by Chaohui Wang's avatar Chaohui Wang Committed by Automerger Merge Worker
Browse files

Merge "Fix App Compatibility Settings' lifecycle" am: 0ba498b2

Original change: https://android-review.googlesource.com/c/platform/packages/apps/Settings/+/2010296

Change-Id: I0dfa53afd25bcd94624f6f79477a4c8b7a1921d2
parents 1a8bbc4a 0ba498b2
Loading
Loading
Loading
Loading
+51 −19
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.text.TextUtils;
import android.util.ArraySet;

import androidx.annotation.VisibleForTesting;
@@ -66,6 +67,8 @@ public class PlatformCompatDashboard extends DashboardFragment {

    private AndroidBuildClassifier mAndroidBuildClassifier = new AndroidBuildClassifier();

    private boolean mShouldStartAppPickerOnResume = true;

    @VisibleForTesting
    String mSelectedApp;

@@ -98,34 +101,49 @@ public class PlatformCompatDashboard extends DashboardFragment {
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        try {
            mChanges = getPlatformCompat().listUIChanges();
        } catch (RemoteException e) {
            throw new RuntimeException("Could not list changes!", e);
        }
        startAppPicker();
        if (icicle != null) {
            mShouldStartAppPickerOnResume = false;
            mSelectedApp = icicle.getString(COMPAT_APP);
        }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putString(COMPAT_APP, mSelectedApp);
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == REQUEST_COMPAT_CHANGE_APP) {
            if (resultCode == Activity.RESULT_OK) {
            mShouldStartAppPickerOnResume = false;
            switch (resultCode) {
                case Activity.RESULT_OK:
                    mSelectedApp = data.getAction();
                try {
                    final ApplicationInfo applicationInfo = getApplicationInfo();
                    addPreferences(applicationInfo);
                } catch (PackageManager.NameNotFoundException e) {
                    startAppPicker();
                    break;
                case Activity.RESULT_CANCELED:
                    if (TextUtils.isEmpty(mSelectedApp)) {
                        finish();
                    }
            } else if (resultCode == AppPicker.RESULT_NO_MATCHING_APPS) {
                    break;
                case AppPicker.RESULT_NO_MATCHING_APPS:
                    mSelectedApp = null;
                    break;
            }
            return;
        }
        super.onActivityResult(requestCode, resultCode, data);
    }

    @Override
    public void onResume() {
        super.onResume();
        if (isFinishingOrDestroyed()) {
            return;
        }
        if (!mShouldStartAppPickerOnResume) {
            if (TextUtils.isEmpty(mSelectedApp)) {
                new AlertDialog.Builder(getContext())
                        .setTitle(R.string.platform_compat_dialog_title_no_apps)
                        .setMessage(R.string.platform_compat_dialog_text_no_apps)
@@ -133,10 +151,24 @@ public class PlatformCompatDashboard extends DashboardFragment {
                        .setOnDismissListener(dialog -> finish())
                        .setCancelable(false)
                        .show();
                return;
            }
            try {
                final ApplicationInfo applicationInfo = getApplicationInfo();
                addPreferences(applicationInfo);
                return;
            } catch (PackageManager.NameNotFoundException e) {
                mShouldStartAppPickerOnResume = true;
                mSelectedApp = null;
            }
        super.onActivityResult(requestCode, resultCode, data);
        }
        startAppPicker();
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putString(COMPAT_APP, mSelectedApp);
    }

    private void addPreferences(ApplicationInfo applicationInfo) {