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

Commit 9e2be860 authored by Danny Lin's avatar Danny Lin Committed by Michael Bestas
Browse files

Add support for toggling taskbar

- Use new API to enable/disable SysUI taskbar integration
- User-facing setting to control taskbar eligibility
- Reload by restarting (live reload would be much more complicated)
- Update SysUI integration state before reloading

Depends on frameworks/base commit:
    SystemUI: Add API for runtime taskbar config

Change-Id: Id1889ca9b102f94cc0a1161f49de88428dcc0943
parent 301f4ea0
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -130,7 +130,7 @@ android_library {
android_library {
    name: "Launcher3CommonDepsLib",
    srcs: ["src_build_config/**/*.java"],
    static_libs: ["Launcher3ResLib"],
    static_libs: ["Launcher3ResLib", "org.lineageos.platform"],
    sdk_version: "current",
    min_sdk_version: min_launcher3_sdk_version,
    manifest: "AndroidManifest-common.xml",
+21 −2
Original line number Diff line number Diff line
@@ -51,6 +51,8 @@ import com.android.quickstep.TouchInteractionService;
import com.android.systemui.unfold.UnfoldTransitionProgressProvider;
import com.android.systemui.unfold.util.ScopedUnfoldTransitionProgressProvider;

import lineageos.providers.LineageSettings;

import java.io.PrintWriter;

/**
@@ -64,11 +66,15 @@ public class TaskbarManager {
    private static final Uri NAV_BAR_KIDS_MODE = Settings.Secure.getUriFor(
            Settings.Secure.NAV_BAR_KIDS_MODE);

    private static final Uri ENABLE_TASKBAR_URI = LineageSettings.System.getUriFor(
            LineageSettings.System.ENABLE_TASKBAR);

    private final Context mContext;
    private final DisplayController mDisplayController;
    private final TaskbarNavButtonController mNavButtonController;
    private final SettingsCache.OnChangeListener mUserSetupCompleteListener;
    private final SettingsCache.OnChangeListener mNavBarKidsModeListener;
    private final SettingsCache.OnChangeListener mEnableTaskBarListener;
    private final ComponentCallbacks mComponentCallbacks;
    private final SimpleBroadcastReceiver mShutdownReceiver;

@@ -113,6 +119,16 @@ public class TaskbarManager {
                SystemUiProxy.INSTANCE.get(mContext), new Handler());
        mUserSetupCompleteListener = isUserSetupComplete -> recreateTaskbar();
        mNavBarKidsModeListener = isNavBarKidsMode -> recreateTaskbar();
        mEnableTaskBarListener = isTaskBarEnabled -> {
            // Create the illusion of this taking effect immediately
            // Also needed because TaskbarManager inits before SystemUiProxy on start
            boolean enabled = LineageSettings.System.getInt(mContext.getContentResolver(),
                    LineageSettings.System.ENABLE_TASKBAR, 0) == 1;
            SystemUiProxy.INSTANCE.get(mContext).setTaskbarEnabled(enabled);

            // Restart launcher
            System.exit(0);
        };
        // TODO(b/227669780): Consolidate this w/ DisplayController callbacks
        mComponentCallbacks = new ComponentCallbacks() {
            private Configuration mOldConfig = mContext.getResources().getConfiguration();
@@ -170,6 +186,8 @@ public class TaskbarManager {
                mUserSetupCompleteListener);
        SettingsCache.INSTANCE.get(mContext).register(NAV_BAR_KIDS_MODE,
                mNavBarKidsModeListener);
        SettingsCache.INSTANCE.get(mContext).register(ENABLE_TASKBAR_URI,
                mEnableTaskBarListener);
        mContext.registerComponentCallbacks(mComponentCallbacks);
        mShutdownReceiver.register(mContext, Intent.ACTION_SHUTDOWN);

@@ -268,9 +286,10 @@ public class TaskbarManager {

        boolean isTaskBarEnabled = dp != null && dp.isTaskbarPresent;

        SystemUiProxy sysui = SystemUiProxy.INSTANCE.get(mContext);
        sysui.setTaskbarEnabled(isTaskBarEnabled);
        if (!isTaskBarEnabled) {
            SystemUiProxy.INSTANCE.get(mContext)
                    .notifyTaskbarStatus(/* visible */ false, /* stashed */ false);
            sysui.notifyTaskbarStatus(/* visible */ false, /* stashed */ false);
            return;
        }

+12 −0
Original line number Diff line number Diff line
@@ -442,6 +442,18 @@ public class SystemUiProxy implements ISystemUiProxy, DisplayController.DisplayI
        }
    }

    @Override
    public void setTaskbarEnabled(boolean enabled) {
        if (mSystemUiProxy != null) {
            try {
                mSystemUiProxy.setTaskbarEnabled(enabled);
            } catch (RemoteException e) {
                Log.w(TAG, "Failed call setTaskbarEnabled with arg: " +
                        enabled, e);
            }
        }
    }

    @Override
    public void notifyTaskbarStatus(boolean visible, boolean stashed) {
        if (mSystemUiProxy != null) {
+5 −1
Original line number Diff line number Diff line
@@ -46,6 +46,8 @@ import com.android.launcher3.util.DisplayController;
import com.android.launcher3.util.DisplayController.Info;
import com.android.launcher3.util.WindowBounds;

import lineageos.providers.LineageSettings;

import java.io.PrintWriter;
import java.util.List;

@@ -261,7 +263,9 @@ public class DeviceProfile {
        isTablet = info.isTablet(windowBounds);
        isPhone = !isTablet;
        isTwoPanels = isTablet && useTwoPanels;
        isTaskbarPresent = isTablet && ApiWrapper.TASKBAR_DRAWN_IN_PROCESS;
        boolean isTaskBarEnabled = LineageSettings.System.getInt(context.getContentResolver(),
                LineageSettings.System.ENABLE_TASKBAR, isTablet ? 1 : 0) == 1;
        isTaskbarPresent = isTaskBarEnabled && ApiWrapper.TASKBAR_DRAWN_IN_PROCESS;

        // Some more constants.
        context = getContext(context, info, isVerticalBarLayout() || (isTablet && isLandscape)