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

Commit c7ab3115 authored by Jerry Chang's avatar Jerry Chang
Browse files

Migrate wm package in sysui to WM shell lib (4/n)

Seperate display listener registration out of constructor to prevent
circular initialization problem. Use builder to make sure
DisplayImeController and DisplaySystemBarsController will be initialized
properly.

Fix: 161963879
Bug: 161655636
Test: make CarSystemUI
Test: atest CarActivityViewDisplayIdCrashTest
Change-Id: I1104f7bc506d1194d8a2c016106647663d4d24ed
parent 5a63c659
Loading
Loading
Loading
Loading
+29 −1
Original line number Diff line number Diff line
@@ -68,12 +68,15 @@ public class DisplayImeController implements DisplayController.OnDisplaysChanged
    private final SparseArray<PerDisplay> mImePerDisplay = new SparseArray<>();
    private final ArrayList<ImePositionProcessor> mPositionProcessors = new ArrayList<>();

    public DisplayImeController(IWindowManager wmService, DisplayController displayController,
    protected DisplayImeController(IWindowManager wmService, DisplayController displayController,
            Handler mainHandler, TransactionPool transactionPool) {
        mHandler = mainHandler;
        mWmService = wmService;
        mTransactionPool = transactionPool;
        mDisplayController = displayController;
    }

    protected void startMonitorDisplays() {
        mDisplayController.addDisplayWindowListener(this);
    }

@@ -490,4 +493,29 @@ public class DisplayImeController implements DisplayController.OnDisplaysChanged
        return IInputMethodManager.Stub.asInterface(
                ServiceManager.getService(Context.INPUT_METHOD_SERVICE));
    }

    /** Builds {@link DisplayImeController} instance. */
    public static class Builder {
        private IWindowManager mWmService;
        private DisplayController mDisplayController;
        private Handler mHandler;
        private TransactionPool mTransactionPool;

        public Builder(IWindowManager wmService, DisplayController displayController,
                Handler handler, TransactionPool transactionPool) {
            mWmService = wmService;
            mDisplayController = displayController;
            mHandler = handler;
            mTransactionPool = transactionPool;
        }

        /** Builds and initializes {@link DisplayImeController} instance. */
        public DisplayImeController build() {
            DisplayImeController displayImeController = new DisplayImeController(mWmService,
                    mDisplayController, mHandler, mTransactionPool);
            // Separates startMonitorDisplays from constructor to prevent circular init issue.
            displayImeController.startMonitorDisplays();
            return displayImeController;
        }
    }
}
+7 −3
Original line number Diff line number Diff line
@@ -134,9 +134,13 @@ public abstract class CarSystemUIModule {
    }

    @Singleton
    @Binds
    abstract DisplayImeController bindDisplayImeController(
            DisplaySystemBarsController displaySystemBarsController);
    @Provides
    static DisplayImeController provideDisplayImeController(Context context,
            IWindowManager wmService, DisplayController displayController,
            @Main Handler mainHandler, TransactionPool transactionPool) {
        return new DisplaySystemBarsController.Builder(context, wmService, displayController,
                mainHandler, transactionPool).build();
    }

    @Binds
    abstract HeadsUpManager bindHeadsUpManagerPhone(HeadsUpManagerPhone headsUpManagerPhone);
+31 −7
Original line number Diff line number Diff line
@@ -36,25 +36,20 @@ import com.android.wm.shell.common.DisplayController;
import com.android.wm.shell.common.DisplayImeController;
import com.android.wm.shell.common.TransactionPool;

import javax.inject.Inject;
import javax.inject.Singleton;

/**
 * Controller that maps between displays and {@link IDisplayWindowInsetsController} in order to
 * give system bar control to SystemUI.
 * {@link R.bool#config_remoteInsetsControllerControlsSystemBars} determines whether this controller
 * takes control or not.
 */
@Singleton
public class DisplaySystemBarsController extends DisplayImeController {

    private static final String TAG = "DisplaySystemBarsController";

    private SparseArray<PerDisplay> mPerDisplaySparseArray;
    private final Context mContext;
    private SparseArray<PerDisplay> mPerDisplaySparseArray;

    @Inject
    public DisplaySystemBarsController(
    private DisplaySystemBarsController(
            Context context,
            IWindowManager wmService,
            DisplayController displayController,
@@ -172,4 +167,33 @@ public class DisplaySystemBarsController extends DisplayImeController {
            }
        }
    }

    /** Builds {@link DisplaySystemBarsController} instance. */
    public static class Builder {
        private Context mContext;
        private IWindowManager mWmService;
        private DisplayController mDisplayController;
        private Handler mHandler;
        private TransactionPool mTransactionPool;

        public Builder(Context context, IWindowManager wmService,
                DisplayController displayController, Handler handler,
                TransactionPool transactionPool) {
            mContext = context;
            mWmService = wmService;
            mDisplayController = displayController;
            mHandler = handler;
            mTransactionPool = transactionPool;
        }

        /** Builds and initializes {@link DisplaySystemBarsController} instance. */
        public DisplaySystemBarsController build() {
            DisplaySystemBarsController displaySystemBarsController =
                    new DisplaySystemBarsController(
                            mContext, mWmService, mDisplayController, mHandler, mTransactionPool);
            // Separates startMonitorDisplays from constructor to prevent circular init issue.
            displaySystemBarsController.startMonitorDisplays();
            return displaySystemBarsController;
        }
    }
}
+5 −4
Original line number Diff line number Diff line
@@ -59,9 +59,10 @@ public class WindowManagerShellModule {

    @Singleton
    @Provides
    static DisplayImeController provideDisplayImeController(
            IWindowManager wmService, DisplayController displayController,
            @Main Handler mainHandler, TransactionPool transactionPool) {
        return new DisplayImeController(wmService, displayController, mainHandler, transactionPool);
    static DisplayImeController provideDisplayImeController(IWindowManager wmService,
            DisplayController displayController, @Main Handler mainHandler,
            TransactionPool transactionPool) {
        return new DisplayImeController.Builder(wmService, displayController, mainHandler,
                transactionPool).build();
    }
}