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

Commit 76747425 authored by Vinit Nayak's avatar Vinit Nayak
Browse files

Prevent showing system IME buttons for gesture nav in taskbar (2/2)

Don't update visibility of back and ime switcher buttons
on sysui navbar, let launcher handle it via existing
sysui state flags.

Bug: 191612881
Test: Double IME buttons don't show on IME w/ taskbar
Change-Id: I689626cb4c923ce4092ad409ac6d99030af8c464
parent ca897dc3
Loading
Loading
Loading
Loading
+24 −0
Original line number Diff line number Diff line
@@ -19,15 +19,21 @@ package com.android.systemui.shared.recents.utilities;
import static android.app.StatusBarManager.NAVIGATION_HINT_BACK_ALT;
import static android.app.StatusBarManager.NAVIGATION_HINT_IME_SHOWN;

import android.content.Context;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.Color;
import android.inputmethodservice.InputMethodService;
import android.os.Handler;
import android.os.Message;
import android.util.DisplayMetrics;
import android.view.Surface;

/* Common code */
public class Utilities {

    private static final float TABLET_MIN_DPS = 600;

    /**
     * Posts a runnable on a handler at the front of the queue ignoring any sync barriers.
     */
@@ -110,4 +116,22 @@ public class Utilities {

        return hints;
    }

    /** See {@link #isTablet(Configuration, Context)} */
    public static boolean isTablet(Context context) {
        Configuration newConfig = context.getResources().getConfiguration();
        return isTablet(newConfig, context);
    }

    /**
     * @return whether or not {@param newConfig} represents that of a large screen device or not
     */
    public static boolean isTablet(Configuration newConfig, Context context) {
        float density = Resources.getSystem().getDisplayMetrics().density;
        int size = Math.min((int) (density * newConfig.screenWidthDp),
                (int) (density* newConfig.screenHeightDp));
        DisplayMetrics metrics = context.getResources().getDisplayMetrics();
        float densityRatio = (float) metrics.densityDpi / DisplayMetrics.DENSITY_DEFAULT;
        return (size / densityRatio) >= TABLET_MIN_DPS;
    }
}
+5 −1
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ import static com.android.internal.accessibility.common.ShortcutConstants.CHOOSE
import static com.android.internal.config.sysui.SystemUiDeviceConfigFlags.HOME_BUTTON_LONG_PRESS_DURATION_MS;
import static com.android.internal.config.sysui.SystemUiDeviceConfigFlags.NAV_BAR_HANDLE_FORCE_OPAQUE;
import static com.android.systemui.recents.OverviewProxyService.OverviewProxyListener;
import static com.android.systemui.shared.recents.utilities.Utilities.isTablet;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_A11Y_BUTTON_CLICKABLE;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_A11Y_BUTTON_LONG_CLICKABLE;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_ALLOW_GESTURE_IGNORING_BAR_VISIBILITY;
@@ -853,7 +854,10 @@ public class NavigationBar implements View.OnAttachStateChangeListener,
        if (hints == mNavigationIconHints) return;

        mNavigationIconHints = hints;
        if (!isTablet(mContext)) {
            // All IME functions handled by launcher via Sysui flags for large screen
            mNavigationBarView.setNavigationIconHints(hints);
        }
        checkBarModes();
        updateSystemUiStateFlags(-1);
    }
+5 −16
Original line number Diff line number Diff line
@@ -19,15 +19,15 @@ package com.android.systemui.navigationbar;
import static android.view.Display.DEFAULT_DISPLAY;
import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_3BUTTON;

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

import android.content.Context;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.hardware.display.DisplayManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.RemoteException;
import android.util.DisplayMetrics;
import android.util.Log;
import android.util.SparseArray;
import android.view.Display;
@@ -84,8 +84,6 @@ public class NavigationBarController implements Callbacks,
        ConfigurationController.ConfigurationListener,
        NavigationModeController.ModeChangedListener, Dumpable {

    private static final float TABLET_MIN_DPS = 600;

    private static final String TAG = NavigationBarController.class.getSimpleName();

    private final Context mContext;
@@ -191,14 +189,14 @@ public class NavigationBarController implements Callbacks,
        mTaskbarDelegate = taskbarDelegate;
        mTaskbarDelegate.setOverviewProxyService(overviewProxyService,
                navigationBarA11yHelper, mSysUiFlagsContainer);
        mIsTablet = isTablet(mContext.getResources().getConfiguration());
        mIsTablet = isTablet(mContext);
        mUserTracker = userTracker;
    }

    @Override
    public void onConfigChanged(Configuration newConfig) {
        boolean isOldConfigTablet = mIsTablet;
        mIsTablet = isTablet(newConfig);
        mIsTablet = isTablet(newConfig, mContext);
        boolean largeScreenChanged = mIsTablet != isOldConfigTablet;
        // If we folded/unfolded while in 3 button, show navbar in folded state, hide in unfolded
        if (largeScreenChanged && updateNavbarForTaskbar()) {
@@ -270,7 +268,7 @@ public class NavigationBarController implements Callbacks,
    @Override
    public void onDisplayReady(int displayId) {
        Display display = mDisplayManager.getDisplay(displayId);
        mIsTablet = isTablet(mContext.getResources().getConfiguration());
        mIsTablet = isTablet(mContext);
        createNavigationBar(display, null /* savedState */, null /* result */);
    }

@@ -466,15 +464,6 @@ public class NavigationBarController implements Callbacks,
        return mNavigationBars.get(DEFAULT_DISPLAY);
    }

    private boolean isTablet(Configuration newConfig) {
        float density = Resources.getSystem().getDisplayMetrics().density;
        int size = Math.min((int) (density * newConfig.screenWidthDp),
                (int) (density* newConfig.screenHeightDp));
        DisplayMetrics metrics = mContext.getResources().getDisplayMetrics();
        float densityRatio = (float) metrics.densityDpi / DisplayMetrics.DENSITY_DEFAULT;
        return (size / densityRatio) >= TABLET_MIN_DPS;
    }

    @Override
    public void dump(@NonNull FileDescriptor fd, @NonNull PrintWriter pw, @NonNull String[] args) {
        for (int i = 0; i < mNavigationBars.size(); i++) {