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

Commit d2d9edbb authored by Matt Pietal's avatar Matt Pietal
Browse files

Keyguard: BG mediarouter initialization

MediaRouter init can cause ANRs in sysui on startup. Background the
initialization, and check for null no show/hide.

Fixes: 176061994
Test: atest SystemUiTests
Change-Id: I66b9e3736b7c28fd6c04195ced4523ec501202eb
parent a6075e69
Loading
Loading
Loading
Loading
+16 −6
Original line number Diff line number Diff line
@@ -37,16 +37,19 @@ import com.android.internal.annotations.VisibleForTesting;
import com.android.keyguard.dagger.KeyguardStatusViewComponent;
import com.android.systemui.Dependency;
import com.android.systemui.R;
import com.android.systemui.dagger.qualifiers.UiBackground;
import com.android.systemui.navigationbar.NavigationBarController;
import com.android.systemui.navigationbar.NavigationBarView;

import java.util.concurrent.Executor;

import javax.inject.Inject;

public class KeyguardDisplayManager {
    protected static final String TAG = "KeyguardDisplayManager";
    private static boolean DEBUG = KeyguardConstants.DEBUG;

    private final MediaRouter mMediaRouter;
    private MediaRouter mMediaRouter = null;
    private final DisplayManager mDisplayService;
    private final KeyguardStatusViewComponent.Factory mKeyguardStatusViewComponentFactory;
    private final Context mContext;
@@ -90,10 +93,11 @@ public class KeyguardDisplayManager {

    @Inject
    public KeyguardDisplayManager(Context context,
            KeyguardStatusViewComponent.Factory keyguardStatusViewComponentFactory) {
            KeyguardStatusViewComponent.Factory keyguardStatusViewComponentFactory,
            @UiBackground Executor uiBgExecutor) {
        mContext = context;
        mKeyguardStatusViewComponentFactory = keyguardStatusViewComponentFactory;
        mMediaRouter = mContext.getSystemService(MediaRouter.class);
        uiBgExecutor.execute(() -> mMediaRouter = mContext.getSystemService(MediaRouter.class));
        mDisplayService = mContext.getSystemService(DisplayManager.class);
        mDisplayService.registerDisplayListener(mDisplayListener, null /* handler */);
    }
@@ -162,8 +166,12 @@ public class KeyguardDisplayManager {
    public void show() {
        if (!mShowing) {
            if (DEBUG) Log.v(TAG, "show");
            if (mMediaRouter != null) {
                mMediaRouter.addCallback(MediaRouter.ROUTE_TYPE_REMOTE_DISPLAY,
                        mMediaRouterCallback, MediaRouter.CALLBACK_FLAG_PASSIVE_DISCOVERY);
            } else {
                Log.w(TAG, "MediaRouter not yet initialized");
            }
            updateDisplays(true /* showing */);
        }
        mShowing = true;
@@ -172,7 +180,9 @@ public class KeyguardDisplayManager {
    public void hide() {
        if (mShowing) {
            if (DEBUG) Log.v(TAG, "hide");
            if (mMediaRouter != null) {
                mMediaRouter.removeCallback(mMediaRouterCallback);
            }
            updateDisplays(false /* showing */);
        }
        mShowing = false;