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

Commit 877d5349 authored by Hall Liu's avatar Hall Liu
Browse files

Move CS focus manager to its own thread

There's no good reason for it to be on the main thread, and it was
threatening to cause deadlocks. Moving to a separate thread.

Test: manual, verify no regressions
Change-Id: Ifc519ac778985e9f73a1325211693b4a9f5ba1e2
Merged-In: Ifc519ac778985e9f73a1325211693b4a9f5ba1e2
parent 4621e9bd
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -426,8 +426,7 @@ public class CallsManager extends Call.ListenerBase
                playerFactory, mRinger, new RingbackPlayer(playerFactory),
                bluetoothStateReceiver, mDtmfLocalTonePlayer);

        mConnectionSvrFocusMgr = connectionServiceFocusManagerFactory.create(
                mRequester, Looper.getMainLooper());
        mConnectionSvrFocusMgr = connectionServiceFocusManagerFactory.create(mRequester);
        mHeadsetMediaButton = headsetMediaButtonFactory.create(context, this, mLock);
        mTtyManager = new TtyManager(context, mWiredHeadsetManager);
        mProximitySensorManager = proximitySensorManagerFactory.create(context, this);
+6 −3
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.server.telecom;
import android.annotation.Nullable;
import android.content.ComponentName;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
import android.os.Message;
import android.telecom.Log;
@@ -42,7 +43,7 @@ public class ConnectionServiceFocusManager {

    /** Factory interface used to create the {@link ConnectionServiceFocusManager} instance. */
    public interface ConnectionServiceFocusManagerFactory {
        ConnectionServiceFocusManager create(CallsManagerRequester requester, Looper looper);
        ConnectionServiceFocusManager create(CallsManagerRequester requester);
    }

    /**
@@ -276,10 +277,12 @@ public class ConnectionServiceFocusManager {
    private FocusManagerHandler mEventHandler;

    public ConnectionServiceFocusManager(
            CallsManagerRequester callsManagerRequester, Looper looper) {
            CallsManagerRequester callsManagerRequester) {
        mCallsManagerRequester = callsManagerRequester;
        mCallsManagerRequester.setCallsManagerListener(mCallsManagerListener);
        mEventHandler = new FocusManagerHandler(looper);
        HandlerThread handlerThread = new HandlerThread(TAG);
        handlerThread.start();
        mEventHandler = new FocusManagerHandler(handlerThread.getLooper());
        mCalls = new ArrayList<>();
    }

+1 −9
Original line number Diff line number Diff line
@@ -163,15 +163,7 @@ public class TelecomService extends Service implements TelecomSystem.Component {
                                            phoneAccountRegistrar);
                                }
                            },
                            new ConnectionServiceFocusManager
                                    .ConnectionServiceFocusManagerFactory() {
                                @Override
                                public ConnectionServiceFocusManager create(
                                        ConnectionServiceFocusManager.CallsManagerRequester requester,
                                        Looper looper) {
                                    return new ConnectionServiceFocusManager(requester, looper);
                                }
                            },
                            ConnectionServiceFocusManager::new,
                            new Timeouts.Adapter(),
                            new AsyncRingtonePlayer(),
                            new PhoneNumberUtilsAdapterImpl(),
+1 −1
Original line number Diff line number Diff line
@@ -168,7 +168,7 @@ public class CallsManagerTest extends TelecomTestCase {
                .thenReturn(mCallAudioModeStateMachine);
        when(mClockProxy.currentTimeMillis()).thenReturn(System.currentTimeMillis());
        when(mClockProxy.elapsedRealtime()).thenReturn(SystemClock.elapsedRealtime());
        when(mConnSvrFocusManagerFactory.create(any(), any())).thenReturn(mConnectionSvrFocusMgr);
        when(mConnSvrFocusManagerFactory.create(any())).thenReturn(mConnectionSvrFocusMgr);
        mCallsManager = new CallsManager(
                mComponentContextFixture.getTestDouble().getApplicationContext(),
                mLock,
+1 −3
Original line number Diff line number Diff line
@@ -16,7 +16,6 @@

package com.android.server.telecom.tests;

import android.os.Looper;
import android.test.suitebuilder.annotation.SmallTest;
import com.android.server.telecom.Call;
import com.android.server.telecom.CallState;
@@ -63,8 +62,7 @@ public class ConnectionServiceFocusManagerTest extends TelecomTestCase {
    @Before
    public void setUp() throws Exception {
        super.setUp();
        mFocusManagerUT = new ConnectionServiceFocusManager(
                mockCallsManagerRequester, Looper.getMainLooper());
        mFocusManagerUT = new ConnectionServiceFocusManager(mockCallsManagerRequester);
        mNewCall = createFakeCall(mNewConnectionService, CallState.NEW);
        mActiveCall = createFakeCall(mActiveConnectionService, CallState.ACTIVE);
        ArgumentCaptor<CallsManager.CallsManagerListener> captor =
Loading