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

Commit a73545d8 authored by Yiyi Shen's avatar Yiyi Shen Committed by Android (Google) Code Review
Browse files

Merge "Register callbacks on background thread to avoid ANR" into main

parents 77292869 23601a67
Loading
Loading
Loading
Loading
+27 −18
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ import com.android.settings.connecteddevice.DevicePreferenceCallback;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.flags.Flags;
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.utils.ThreadUtils;

import java.util.ArrayList;
import java.util.Collections;
@@ -90,28 +91,12 @@ public class FastPairDevicePreferenceController extends BasePreferenceController

    @Override
    public void onStart(@NonNull LifecycleOwner owner) {
        if (mFastPairDeviceUpdater != null) {
            mFastPairDeviceUpdater.setPreferenceContext(mContext);
            mFastPairDeviceUpdater.registerCallback();
        } else {
            if (DEBUG) {
                Log.d(TAG, "Callback register: Fast Pair device updater is null. Ignore.");
            }
        }
        mContext.registerReceiver(mReceiver, mIntentFilter, Context.RECEIVER_EXPORTED_UNAUDITED);
        var unused = ThreadUtils.postOnBackgroundThread(() -> registerCallbacks());
    }

    @Override
    public void onStop(@NonNull LifecycleOwner owner) {
        if (mFastPairDeviceUpdater != null) {
            mFastPairDeviceUpdater.setPreferenceContext(null);
            mFastPairDeviceUpdater.unregisterCallback();
        } else {
            if (DEBUG) {
                Log.d(TAG, "Callback unregister: Fast Pair device updater is null. Ignore.");
            }
        }
        mContext.unregisterReceiver(mReceiver);
        var unused = ThreadUtils.postOnBackgroundThread(() -> unregisterCallbacks());
    }

    @Override
@@ -208,4 +193,28 @@ public class FastPairDevicePreferenceController extends BasePreferenceController
            mSeeAllPreference.setVisible(false);
        }
    }

    private void registerCallbacks() {
        if (mFastPairDeviceUpdater != null) {
            mFastPairDeviceUpdater.setPreferenceContext(mContext);
            mFastPairDeviceUpdater.registerCallback();
        } else {
            if (DEBUG) {
                Log.d(TAG, "Callback register: Fast Pair device updater is null. Ignore.");
            }
        }
        mContext.registerReceiver(mReceiver, mIntentFilter, Context.RECEIVER_EXPORTED_UNAUDITED);
    }

    private void unregisterCallbacks() {
        if (mFastPairDeviceUpdater != null) {
            mFastPairDeviceUpdater.setPreferenceContext(null);
            mFastPairDeviceUpdater.unregisterCallback();
        } else {
            if (DEBUG) {
                Log.d(TAG, "Callback unregister: Fast Pair device updater is null. Ignore.");
            }
        }
        mContext.unregisterReceiver(mReceiver);
    }
}