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

Commit ef4a07da authored by LuK1337's avatar LuK1337
Browse files

LineageParts: Add "Enable taskbar" toggle

Change-Id: Ie0ea98898c887a70f44511b35ac95f5d2750545d
parent dddd442a
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@ android_app {
        "androidx.recyclerview_recyclerview",
        "jsr305",
        "org.lineageos.platform.internal",
        "SystemUISharedLib",
    ],

    required: [
+1 −0
Original line number Diff line number Diff line
@@ -242,6 +242,7 @@

    <!-- Navigation Bar -->
    <string name="navigation_bar_category">Navigation bar</string>
    <string name="navigation_bar_enable_taskbar_title">Enable taskbar</string>
    <string name="navigation_bar_invert_layout_title">Invert layout</string>
    <string name="navigation_bar_invert_layout_summary">Inverts the layout of the navigation bar and other items, such as the IME switcher</string>
    <string name="navigation_bar_left_summary">Place the navigation bar on the left side of the screen in landscape mode</string>
+4 −0
Original line number Diff line number Diff line
@@ -43,6 +43,10 @@
        android:key="navigation_bar_category"
        android:title="@string/navigation_bar_category" >

        <SwitchPreference
                android:key="enable_taskbar"
                android:title="@string/navigation_bar_enable_taskbar_title" />

        <lineageos.preference.LineageSystemSettingSwitchPreference
                android:key="navigation_bar_menu_arrow_keys"
                android:title="@string/navigation_bar_arrow_keys_title"
+74 −8
Original line number Diff line number Diff line
@@ -17,7 +17,9 @@

package org.lineageos.lineageparts.input;

import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_2BUTTON;
import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_3BUTTON_OVERLAY;
import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL_OVERLAY;

import android.app.ActivityManager;
import android.content.ComponentName;
@@ -49,6 +51,8 @@ import androidx.preference.PreferenceManager;
import androidx.preference.PreferenceScreen;
import androidx.preference.SwitchPreference;

import static com.android.systemui.shared.recents.utilities.Utilities.isTablet;

import org.lineageos.lineageparts.R;
import org.lineageos.lineageparts.SettingsPreferenceFragment;
import org.lineageos.lineageparts.search.BaseSearchIndexProvider;
@@ -110,6 +114,8 @@ public class ButtonSettings extends SettingsPreferenceFragment
    private static final String KEY_CLICK_PARTIAL_SCREENSHOT =
            "click_partial_screenshot";
    private static final String KEY_SWAP_CAPACITIVE_KEYS = "swap_capacitive_keys";
    private static final String KEY_NAV_BAR_INVERSE = "sysui_nav_bar_inverse";
    private static final String KEY_ENABLE_TASKBAR = "enable_taskbar";

    private static final String CATEGORY_POWER = "power_key";
    private static final String CATEGORY_HOME = "home_key";
@@ -152,6 +158,8 @@ public class ButtonSettings extends SettingsPreferenceFragment
    private SwitchPreference mTorchLongPressPowerGesture;
    private ListPreference mTorchLongPressPowerTimeout;
    private SwitchPreference mSwapCapacitiveKeys;
    private SwitchPreference mNavBarInverse;
    private SwitchPreference mEnableTaskbar;

    private PreferenceCategory mNavigationPreferencesCat;

@@ -474,6 +482,21 @@ public class ButtonSettings extends SettingsPreferenceFragment
            mSwapCapacitiveKeys.setDependency(KEY_DISABLE_NAV_KEYS);
        }

        mNavBarInverse = findPreference(KEY_NAV_BAR_INVERSE);

        mEnableTaskbar = findPreference(KEY_ENABLE_TASKBAR);
        if (mEnableTaskbar != null) {
            if (!isTablet(getContext()) || !hasNavigationBar()) {
                mNavigationPreferencesCat.removePreference(mEnableTaskbar);
            } else {
                mEnableTaskbar.setOnPreferenceChangeListener(this);
                mEnableTaskbar.setChecked(LineageSettings.System.getInt(getContentResolver(),
                        LineageSettings.System.ENABLE_TASKBAR,
                        isTablet(getContext()) ? 1 : 0) == 1);
                toggleTaskBarDependencies(mEnableTaskbar.isChecked());
            }
        }

        // Override key actions on Go devices in order to hide any unsupported features
        if (ActivityManager.isLowRamDeviceStatic()) {
            String[] actionEntriesGo = res.getStringArray(R.array.hardware_keys_action_entries_go);
@@ -642,10 +665,60 @@ public class ButtonSettings extends SettingsPreferenceFragment
        } else if (preference == mSwapCapacitiveKeys) {
            mHardware.set(LineageHardwareManager.FEATURE_KEY_SWAP, (Boolean) newValue);
            return true;
        } else if (preference == mEnableTaskbar) {
            toggleTaskBarDependencies((Boolean) newValue);
            if ((Boolean) newValue && is2ButtonNavigationEnabled(getContext())) {
                // Let's switch to gestural mode if user previously had 2 buttons enabled.
                setButtonNavigationMode(NAV_BAR_MODE_GESTURAL_OVERLAY);
            }
            LineageSettings.System.putInt(getContentResolver(),
                    LineageSettings.System.ENABLE_TASKBAR, ((Boolean) newValue) ? 1 : 0);
            return true;
        }
        return false;
    }

    private static boolean is2ButtonNavigationEnabled(Context context) {
        return NAV_BAR_MODE_2BUTTON == context.getResources().getInteger(
                com.android.internal.R.integer.config_navBarInteractionMode);
    }

    private static void setButtonNavigationMode(String overlayPackage) {
        IOverlayManager overlayManager = IOverlayManager.Stub.asInterface(
                ServiceManager.getService(Context.OVERLAY_SERVICE));
        try {
            overlayManager.setEnabledExclusiveInCategory(overlayPackage, UserHandle.USER_CURRENT);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

    private void toggleTaskBarDependencies(boolean enabled) {
        if (mNavigationArrowKeys != null) {
            mNavigationArrowKeys.setEnabled(!enabled);
        }

        if (mNavBarInverse != null) {
            mNavBarInverse.setEnabled(!enabled);
        }

        if (mNavigationBackLongPressAction != null) {
            mNavigationBackLongPressAction.setEnabled(!enabled);
        }

        if (mNavigationHomeLongPressAction != null) {
            mNavigationHomeLongPressAction.setEnabled(!enabled);
        }

        if (mNavigationHomeDoubleTapAction != null) {
            mNavigationHomeDoubleTapAction.setEnabled(!enabled);
        }

        if (mNavigationAppSwitchLongPressAction != null) {
            mNavigationAppSwitchLongPressAction.setEnabled(!enabled);
        }
    }

    private static void writeDisableNavkeysOption(Context context, boolean enabled) {
        LineageSettings.System.putIntForUser(context.getContentResolver(),
                LineageSettings.System.FORCE_SHOW_NAVBAR, enabled ? 1 : 0, UserHandle.USER_CURRENT);
@@ -825,14 +898,7 @@ public class ButtonSettings extends SettingsPreferenceFragment
            mDisableNavigationKeys.setEnabled(false);
            mNavigationPreferencesCat.setEnabled(false);
            if (!mDisableNavigationKeys.isChecked()) {
                IOverlayManager overlayManager = IOverlayManager.Stub.asInterface(
                        ServiceManager.getService(Context.OVERLAY_SERVICE));
                try {
                    overlayManager.setEnabledExclusiveInCategory(NAV_BAR_MODE_3BUTTON_OVERLAY,
                            UserHandle.USER_CURRENT);
                } catch (RemoteException e) {
                    throw e.rethrowFromSystemServer();
                }
                setButtonNavigationMode(NAV_BAR_MODE_3BUTTON_OVERLAY);
            }
            writeDisableNavkeysOption(getActivity(), mDisableNavigationKeys.isChecked());
            updateDisableNavkeysOption();