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

Commit 23601a67 authored by Yiyi Shen's avatar Yiyi Shen
Browse files

Register callbacks on background thread to avoid ANR

Fix: 360798156
Test: atest
Flag: EXEMPT small fix
Change-Id: Ia40bbe33952fa7ea2b951c04cf47b4a05f641e26
parent d0ea9bc2
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);
    }
}