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

Commit cea5ce82 authored by Michael Mikhail's avatar Michael Mikhail
Browse files

Unregister callback in background thread.

Unregistering callback for media controller is blocking the main thread.
This CL sends the unregistering execution to background.

Flag: NONE
Bug: 336612071
Test: Posted media notification and removed it many times. Main thread
doesn't seem to be blocked.

Change-Id: Ifb3ceab533c40c2e0da7b6e72cc0a27776d2e6be
parent 5f46e1db
Loading
Loading
Loading
Loading
+11 −3
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import android.service.notification.StatusBarNotification;
import android.util.Log;

import com.android.systemui.Dumpable;
import com.android.systemui.dagger.qualifiers.Background;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.media.controls.domain.pipeline.MediaDataManager;
import com.android.systemui.media.controls.shared.model.MediaData;
@@ -47,6 +48,7 @@ import java.util.Collection;
import java.util.HashSet;
import java.util.Objects;
import java.util.Optional;
import java.util.concurrent.Executor;

/**
 * Handles tasks and state related to media notifications. For example, there is a 'current' media
@@ -75,6 +77,8 @@ public class NotificationMediaManager implements Dumpable {
    private final Context mContext;
    private final ArrayList<MediaListener> mMediaListeners;

    private final Executor mBackgroundExecutor;

    protected NotificationPresenter mPresenter;
    private MediaController mMediaController;
    private String mMediaNotificationKey;
@@ -115,13 +119,15 @@ public class NotificationMediaManager implements Dumpable {
            NotifPipeline notifPipeline,
            NotifCollection notifCollection,
            MediaDataManager mediaDataManager,
            DumpManager dumpManager) {
            DumpManager dumpManager,
            @Background Executor backgroundExecutor) {
        mContext = context;
        mMediaListeners = new ArrayList<>();
        mVisibilityProvider = visibilityProvider;
        mMediaDataManager = mediaDataManager;
        mNotifPipeline = notifPipeline;
        mNotifCollection = notifCollection;
        mBackgroundExecutor = backgroundExecutor;

        setupNotifPipeline();

@@ -381,9 +387,11 @@ public class NotificationMediaManager implements Dumpable {
                Log.v(TAG, "DEBUG_MEDIA: Disconnecting from old controller: "
                        + mMediaController.getPackageName());
            }
            mBackgroundExecutor.execute(() -> {
                mMediaController.unregisterCallback(mMediaListener);
        }
                mMediaController = null;
            });
        }
    }

    public interface MediaListener {
+7 −2
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import com.android.systemui.animation.AnimationFeatureFlags;
import com.android.systemui.animation.DialogTransitionAnimator;
import com.android.systemui.bouncer.domain.interactor.AlternateBouncerInteractor;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Background;
import com.android.systemui.dump.DumpHandler;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.media.controls.domain.pipeline.MediaDataManager;
@@ -68,6 +69,8 @@ import dagger.Provides;
import dagger.multibindings.ClassKey;
import dagger.multibindings.IntoMap;

import java.util.concurrent.Executor;

import javax.inject.Provider;

/**
@@ -94,14 +97,16 @@ public interface CentralSurfacesDependenciesModule {
            NotifPipeline notifPipeline,
            NotifCollection notifCollection,
            MediaDataManager mediaDataManager,
            DumpManager dumpManager) {
            DumpManager dumpManager,
            @Background Executor backgroundExecutor) {
        return new NotificationMediaManager(
                context,
                visibilityProvider,
                notifPipeline,
                notifCollection,
                mediaDataManager,
                dumpManager);
                dumpManager,
                backgroundExecutor);
    }

    /** */