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

Commit 976d0606 authored by Fabian Kozynski's avatar Fabian Kozynski
Browse files

Fixes to remove controls for tablet

These fixes are needed in order for the following:
* No part of the controls tree is accessible when the flag is off
* The tile comes back once the flag is on

Test: manually flash changing handheld_core_hardware.xml
Test: atest AutoTileManagerTest DeviceControlsControllerImplTest
Bug: 268204890
Change-Id: I030ecbbf77feef0f342826d568210ac24bd2c141
parent 7e9ff1ef
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -19,11 +19,11 @@ package com.android.systemui.controls.dagger
import android.content.Context
import com.android.internal.widget.LockPatternUtils
import com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_BOOT
import com.android.systemui.controls.settings.ControlsSettingsRepository
import com.android.systemui.controls.controller.ControlsController
import com.android.systemui.controls.controller.ControlsTileResourceConfiguration
import com.android.systemui.controls.controller.ControlsTileResourceConfigurationImpl
import com.android.systemui.controls.management.ControlsListingController
import com.android.systemui.controls.settings.ControlsSettingsRepository
import com.android.systemui.controls.ui.ControlsUiController
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.settings.UserTracker
+2 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.content.Context;
import android.hardware.display.NightDisplayListener;
import android.os.Handler;

import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Background;
import com.android.systemui.media.dagger.MediaModule;
import com.android.systemui.qs.AutoAddTracker;
@@ -53,6 +54,7 @@ import dagger.Provides;
public interface QSModule {

    @Provides
    @SysUISingleton
    static AutoTileManager provideAutoTileManager(
            Context context,
            AutoAddTracker.Builder autoAddTrackerBuilder,
+24 −5
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import android.util.Log;
import com.android.internal.annotations.VisibleForTesting;
import com.android.systemui.R;
import com.android.systemui.dagger.qualifiers.Background;
import com.android.systemui.plugins.qs.QSTile;
import com.android.systemui.qs.AutoAddTracker;
import com.android.systemui.qs.QSTileHost;
import com.android.systemui.qs.ReduceBrightColorsController;
@@ -47,6 +48,7 @@ import com.android.systemui.util.UserAwareController;
import com.android.systemui.util.settings.SecureSettings;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Objects;

import javax.inject.Named;
@@ -165,9 +167,10 @@ public class AutoTileManager implements UserAwareController {
        if (!mAutoTracker.isAdded(BRIGHTNESS) && mIsReduceBrightColorsAvailable) {
            mReduceBrightColorsController.addCallback(mReduceBrightColorsCallback);
        }
        if (!mAutoTracker.isAdded(DEVICE_CONTROLS)) {
        // We always want this callback, because if the feature stops being supported,
        // we want to remove the tile from AutoAddTracker. That way it will be re-added when the
        // feature is reenabled (similar to work tile).
        mDeviceControlsController.setCallback(mDeviceControlsCallback);
        }
        if (!mAutoTracker.isAdded(WALLET)) {
            initWalletController();
        }
@@ -323,14 +326,30 @@ public class AutoTileManager implements UserAwareController {
        @Override
        public void onControlsUpdate(@Nullable Integer position) {
            if (mAutoTracker.isAdded(DEVICE_CONTROLS)) return;
            if (position != null) {
            if (position != null && !hasTile(DEVICE_CONTROLS)) {
                mHost.addTile(DEVICE_CONTROLS, position);
            }
                mAutoTracker.setTileAdded(DEVICE_CONTROLS);
            }
            mHandler.post(() -> mDeviceControlsController.removeCallback());
        }

        @Override
        public void removeControlsAutoTracker() {
            mAutoTracker.setTileRemoved(DEVICE_CONTROLS);
        }
    };

    private boolean hasTile(String tileSpec) {
        if (tileSpec == null) return false;
        Collection<QSTile> tiles = mHost.getTiles();
        for (QSTile tile : tiles) {
            if (tileSpec.equals(tile.getTileSpec())) {
                return true;
            }
        }
        return false;
    }

    private void initWalletController() {
        if (mAutoTracker.isAdded(WALLET)) return;
        Integer position = mWalletController.getWalletPosition();
+2 −0
Original line number Diff line number Diff line
@@ -25,6 +25,8 @@ interface DeviceControlsController {
         * If controls become available, initiate this callback with the desired position
         */
        fun onControlsUpdate(position: Int?)

        fun removeControlsAutoTracker()
    }

    /** Add callback, supporting only a single callback at once */
+5 −2
Original line number Diff line number Diff line
@@ -21,16 +21,15 @@ import android.content.Context
import android.content.SharedPreferences
import android.provider.Settings
import android.util.Log

import com.android.systemui.R
import com.android.systemui.controls.ControlsServiceInfo
import com.android.systemui.controls.dagger.ControlsComponent
import com.android.systemui.controls.management.ControlsListingController
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.settings.UserContextProvider
import com.android.systemui.statusbar.phone.AutoTileManager
import com.android.systemui.statusbar.policy.DeviceControlsController.Callback
import com.android.systemui.util.settings.SecureSettings

import javax.inject.Inject

/**
@@ -87,6 +86,10 @@ public class DeviceControlsControllerImpl @Inject constructor(
     * incorrect.
     */
    override fun setCallback(callback: Callback) {
        if (!controlsComponent.isEnabled()) {
            callback.removeControlsAutoTracker()
            return
        }
        // Treat any additional call as a reset before recalculating
        removeCallback()
        this.callback = callback
Loading