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

Commit 2af55886 authored by Chaohui Wang's avatar Chaohui Wang
Browse files

Fix unable to toggle off Pause app activity

The "Pause app activity if unused" SwitchPreference under App info page.

Currently, the preference controller updates the UI state in the
onOpChanged(), which is unnecessary and is called in another non-UI
thread.

Not updating state in onOpChanged() to fix.

Note: This controller implements the LifecycleObserver to handle
lifecycle related logic, but it's actually a no-op before change
If9e48e44267de8e89a5e8f45d256719130936320. So it used to work fine
without the OnOpChangedListener, we can remove it now.

Fix: 227762370
Test: manual
Change-Id: I33f1f55a706407d7b409c3544f9889c45855b34d
parent fa878f2f
Loading
Loading
Loading
Loading
+1 −27
Original line number Diff line number Diff line
@@ -33,13 +33,9 @@ import android.content.Context;
import android.content.pm.PackageManager;
import android.permission.PermissionControllerManager;
import android.provider.DeviceConfig;
import android.text.TextUtils;
import android.util.Slog;

import androidx.annotation.NonNull;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleObserver;
import androidx.lifecycle.OnLifecycleEvent;
import androidx.preference.Preference;
import androidx.preference.SwitchPreference;

@@ -49,8 +45,7 @@ import com.google.common.annotations.VisibleForTesting;
 * A PreferenceController handling the logic for exempting hibernation of app
 */
public final class HibernationSwitchPreferenceController extends AppInfoPreferenceControllerBase
        implements LifecycleObserver, AppOpsManager.OnOpChangedListener,
        Preference.OnPreferenceChangeListener {
        implements Preference.OnPreferenceChangeListener {
    private static final String TAG = "HibernationSwitchPrefController";
    private String mPackageName;
    private final AppOpsManager mAppOpsManager;
@@ -69,19 +64,6 @@ public final class HibernationSwitchPreferenceController extends AppInfoPreferen
        mPermissionControllerManager = context.getSystemService(PermissionControllerManager.class);
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    public void onResume() {
        if (mIsPackageSet) {
            mAppOpsManager.startWatchingMode(
                    OPSTR_AUTO_REVOKE_PERMISSIONS_IF_UNUSED, mPackageName, this);
        }
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    public void onPause() {
        mAppOpsManager.stopWatchingMode(this);
    }

    @Override
    public int getAvailabilityStatus() {
        return isHibernationEnabled() && mIsPackageSet ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
@@ -148,14 +130,6 @@ public final class HibernationSwitchPreferenceController extends AppInfoPreferen
        return mode == MODE_DEFAULT ? mIsPackageExemptByDefault : mode != MODE_ALLOWED;
    }

    @Override
    public void onOpChanged(String op, String packageName) {
        if (OPSTR_AUTO_REVOKE_PERMISSIONS_IF_UNUSED.equals(op)
                && TextUtils.equals(mPackageName, packageName)) {
            updateState(mPreference);
        }
    }

    @Override
    public boolean onPreferenceChange(Preference preference, Object isChecked) {
        try {