Merge "Ime in gestural mode will have ime switcher and down arrow" into qt-dev
am: 9ad8aa3ad6
Change-Id: Iff99ec432a7937ff0521a2329fe9349bd293608a
This commit is contained in:
@@ -37,16 +37,10 @@
|
||||
android:paddingStart="@dimen/navigation_key_padding"
|
||||
android:paddingEnd="@dimen/navigation_key_padding"
|
||||
/>
|
||||
<com.android.systemui.statusbar.policy.KeyButtonView
|
||||
android:id="@+id/ime_switcher"
|
||||
<include layout="@layout/ime_switcher"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="0"
|
||||
android:scaleType="center"
|
||||
android:visibility="invisible"
|
||||
android:contentDescription="@string/accessibility_ime_switch_button"
|
||||
android:paddingStart="@dimen/navigation_key_padding"
|
||||
android:paddingEnd="@dimen/navigation_key_padding"
|
||||
/>
|
||||
<com.android.systemui.statusbar.policy.KeyButtonView
|
||||
android:id="@+id/rotate_suggestion"
|
||||
|
||||
@@ -21,5 +21,7 @@
|
||||
android:layout_width="@dimen/navigation_home_handle_width"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="0"
|
||||
android:paddingStart="@dimen/navigation_key_padding"
|
||||
android:paddingEnd="@dimen/navigation_key_padding"
|
||||
/>
|
||||
|
||||
|
||||
28
packages/SystemUI/res/layout/ime_switcher.xml
Normal file
28
packages/SystemUI/res/layout/ime_switcher.xml
Normal file
@@ -0,0 +1,28 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
~ Copyright (C) 2019 The Android Open Source Project
|
||||
~
|
||||
~ Licensed under the Apache License, Version 2.0 (the "License");
|
||||
~ you may not use this file except in compliance with the License.
|
||||
~ You may obtain a copy of the License at
|
||||
~
|
||||
~ http://www.apache.org/licenses/LICENSE-2.0
|
||||
~
|
||||
~ Unless required by applicable law or agreed to in writing, software
|
||||
~ distributed under the License is distributed on an "AS IS" BASIS,
|
||||
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
~ See the License for the specific language governing permissions and
|
||||
~ limitations under the License
|
||||
-->
|
||||
|
||||
<com.android.systemui.statusbar.policy.KeyButtonView
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/ime_switcher"
|
||||
android:layout_width="@dimen/navigation_key_width"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="0"
|
||||
android:contentDescription="@string/accessibility_ime_switch_button"
|
||||
android:scaleType="center"
|
||||
android:paddingStart="@dimen/navigation_key_padding"
|
||||
android:paddingEnd="@dimen/navigation_key_padding"
|
||||
/>
|
||||
@@ -35,13 +35,13 @@
|
||||
android:visibility="invisible"
|
||||
android:contentDescription="@string/accessibility_menu"
|
||||
/>
|
||||
<com.android.systemui.statusbar.policy.KeyButtonView
|
||||
android:id="@+id/ime_switcher"
|
||||
<include layout="@layout/ime_switcher"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:visibility="invisible"
|
||||
android:contentDescription="@string/accessibility_ime_switch_button"
|
||||
android:scaleType="centerInside"
|
||||
android:visibility="invisible"
|
||||
android:paddingStart="0dp"
|
||||
android:paddingEnd="0dp"
|
||||
/>
|
||||
<com.android.systemui.statusbar.policy.KeyButtonView
|
||||
android:id="@+id/rotate_suggestion"
|
||||
|
||||
@@ -330,7 +330,7 @@
|
||||
<!-- Nav bar button default ordering/layout -->
|
||||
<string name="config_navBarLayout" translatable="false">left[.5W],back[1WC];home;recent[1WC],right[.5W]</string>
|
||||
<string name="config_navBarLayoutQuickstep" translatable="false">back[1.7WC];home;contextual[1.7WC]</string>
|
||||
<string name="config_navBarLayoutHandle" translatable="false">";home_handle;"</string>
|
||||
<string name="config_navBarLayoutHandle" translatable="false">back[1.7WC];home_handle;ime_switcher[1.7WC]</string>
|
||||
|
||||
<bool name="quick_settings_show_full_alarm">false</bool>
|
||||
|
||||
|
||||
@@ -51,6 +51,9 @@ public class ContextualButton extends ButtonDispatcher {
|
||||
* Reload the drawable from resource id, should reapply the previous dark intensity.
|
||||
*/
|
||||
public void updateIcon() {
|
||||
if (getCurrentView() == null || !getCurrentView().isAttachedToWindow()) {
|
||||
return;
|
||||
}
|
||||
final KeyButtonDrawable currentDrawable = getImageDrawable();
|
||||
KeyButtonDrawable drawable = getNewDrawable();
|
||||
if (currentDrawable != null) {
|
||||
|
||||
@@ -112,23 +112,24 @@ public class ContextualButtonGroup extends ButtonDispatcher {
|
||||
* their icons for their buttons.
|
||||
*/
|
||||
public void updateIcons() {
|
||||
if (getCurrentView() == null || !getCurrentView().isAttachedToWindow()) {
|
||||
return;
|
||||
}
|
||||
for (ButtonData data : mButtonData) {
|
||||
data.button.updateIcon();
|
||||
}
|
||||
}
|
||||
|
||||
public void dump(PrintWriter pw) {
|
||||
View view = getCurrentView();
|
||||
pw.println("ContextualButtonGroup {");
|
||||
pw.println(" getVisibleContextButton(): " + getVisibleContextButton());
|
||||
pw.println(" isVisible(): " + isVisible());
|
||||
pw.println(" attached(): " + (view != null && view.isAttachedToWindow()));
|
||||
pw.println(" mButtonData [ ");
|
||||
for (int i = mButtonData.size() - 1; i >= 0; --i) {
|
||||
final ButtonData data = mButtonData.get(i);
|
||||
view = data.button.getCurrentView();
|
||||
pw.println(" " + i + ": markedVisible=" + data.markedVisible
|
||||
+ " visible=" + data.button.getVisibility()
|
||||
+ " attached=" + (view != null && view.isAttachedToWindow())
|
||||
+ " alpha=" + data.button.getAlpha());
|
||||
}
|
||||
pw.println(" ]");
|
||||
|
||||
@@ -202,7 +202,9 @@ public class NavigationBarFragment extends LifecycleFragment implements Callback
|
||||
@Override
|
||||
public void onBackButtonAlphaChanged(float alpha, boolean animate) {
|
||||
final ButtonDispatcher backButton = mNavigationBarView.getBackButton();
|
||||
if (QuickStepContract.isGesturalMode(getContext())) {
|
||||
final boolean useAltBack =
|
||||
(mNavigationIconHints & StatusBarManager.NAVIGATION_HINT_BACK_ALT) != 0;
|
||||
if (QuickStepContract.isGesturalMode(getContext()) && !useAltBack) {
|
||||
// If property was changed to hide/show back button, going home will trigger
|
||||
// launcher to to change the back button alpha to reflect property change
|
||||
backButton.setVisibility(View.GONE);
|
||||
|
||||
@@ -68,6 +68,7 @@ public class NavigationBarInflaterView extends FrameLayout
|
||||
public static final String LEFT = "left";
|
||||
public static final String RIGHT = "right";
|
||||
public static final String CONTEXTUAL = "contextual";
|
||||
public static final String IME_SWITCHER = "ime_switcher";
|
||||
|
||||
public static final String GRAVITY_SEPARATOR = ";";
|
||||
public static final String BUTTON_SEPARATOR = ",";
|
||||
@@ -164,17 +165,21 @@ public class NavigationBarInflaterView extends FrameLayout
|
||||
@Override
|
||||
public void onTuningChanged(String key, String newValue) {
|
||||
if (NAV_BAR_VIEWS.equals(key)) {
|
||||
if (!Objects.equals(mCurrentLayout, newValue)) {
|
||||
mUsingCustomLayout = newValue != null;
|
||||
clearViews();
|
||||
inflateLayout(newValue);
|
||||
}
|
||||
setNavigationBarLayout(newValue);
|
||||
} else if (NAV_BAR_LEFT.equals(key) || NAV_BAR_RIGHT.equals(key)) {
|
||||
clearViews();
|
||||
inflateLayout(mCurrentLayout);
|
||||
}
|
||||
}
|
||||
|
||||
public void setNavigationBarLayout(String layoutValue) {
|
||||
if (!Objects.equals(mCurrentLayout, layoutValue)) {
|
||||
mUsingCustomLayout = layoutValue != null;
|
||||
clearViews();
|
||||
inflateLayout(layoutValue);
|
||||
}
|
||||
}
|
||||
|
||||
public void onLikelyDefaultLayoutChange() {
|
||||
// Don't override custom layouts
|
||||
if (mUsingCustomLayout) return;
|
||||
@@ -401,6 +406,8 @@ public class NavigationBarInflaterView extends FrameLayout
|
||||
v = inflater.inflate(R.layout.contextual, parent, false);
|
||||
} else if (HOME_HANDLE.equals(button)) {
|
||||
v = inflater.inflate(R.layout.home_handle, parent, false);
|
||||
} else if (IME_SWITCHER.equals(button)) {
|
||||
v = inflater.inflate(R.layout.ime_switcher, parent, false);
|
||||
} else if (button.startsWith(KEY)) {
|
||||
String uri = extractImage(button);
|
||||
int code = extractKeycode(button);
|
||||
|
||||
@@ -21,7 +21,6 @@ import static android.view.WindowManagerPolicyConstants.NAV_BAR_INVALID;
|
||||
|
||||
import static com.android.systemui.shared.system.NavigationBarCompat.FLAG_SHOW_OVERVIEW_BUTTON;
|
||||
import static com.android.systemui.statusbar.phone.BarTransitions.MODE_OPAQUE;
|
||||
import static com.android.systemui.statusbar.phone.NavigationBarInflaterView.NAV_BAR_VIEWS;
|
||||
|
||||
import android.animation.LayoutTransition;
|
||||
import android.animation.LayoutTransition.TransitionListener;
|
||||
@@ -35,6 +34,7 @@ import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.content.pm.ParceledListSlice;
|
||||
import android.content.res.Configuration;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Point;
|
||||
@@ -48,6 +48,8 @@ import android.util.Log;
|
||||
import android.util.Slog;
|
||||
import android.util.SparseArray;
|
||||
import android.view.Display;
|
||||
import android.view.IPinnedStackController;
|
||||
import android.view.IPinnedStackListener;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.Surface;
|
||||
import android.view.View;
|
||||
@@ -133,6 +135,7 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav
|
||||
private boolean mUseCarModeUi = false;
|
||||
private boolean mInCarMode = false;
|
||||
private boolean mDockedStackExists;
|
||||
private boolean mImeVisible;
|
||||
|
||||
private final SparseArray<ButtonDispatcher> mButtonDispatchers = new SparseArray<>();
|
||||
private final ContextualButtonGroup mContextualButtonGroup;
|
||||
@@ -234,6 +237,45 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav
|
||||
}
|
||||
};
|
||||
|
||||
private final IPinnedStackListener.Stub mImeChangedListener = new IPinnedStackListener.Stub() {
|
||||
@Override
|
||||
public void onListenerRegistered(IPinnedStackController controller) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onImeVisibilityChanged(boolean imeVisible, int imeHeight) {
|
||||
post(() -> {
|
||||
// TODO remove this and do below when mNavigationIconHints changes
|
||||
if (imeVisible) {
|
||||
getBackButton().setVisibility(VISIBLE);
|
||||
reloadNavIcons();
|
||||
} else {
|
||||
getImeSwitchButton().setVisibility(GONE);
|
||||
}
|
||||
mImeVisible = imeVisible;
|
||||
updateWindowTouchable();
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onShelfVisibilityChanged(boolean shelfVisible, int shelfHeight) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMinimizedStateChanged(boolean isMinimized) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMovementBoundsChanged(Rect insetBounds, Rect normalBounds,
|
||||
Rect animatingBounds, boolean fromImeAdjustment, boolean fromShelfAdjustment,
|
||||
int displayRotation) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActionsChanged(ParceledListSlice actions) {
|
||||
}
|
||||
};
|
||||
|
||||
private BroadcastReceiver mOverlaysChangedReceiver = new BroadcastReceiver() {
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
@@ -472,6 +514,11 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav
|
||||
return;
|
||||
}
|
||||
|
||||
if (QuickStepContract.isGesturalMode(getContext())) {
|
||||
drawable.setRotation(degrees);
|
||||
return;
|
||||
}
|
||||
|
||||
// Animate the back button's rotation to the new degrees and only in portrait move up the
|
||||
// back button to line up with the other buttons
|
||||
float targetY = !mOverviewProxyService.shouldShowSwipeUpUI() && !mIsVertical && useAltBack
|
||||
@@ -574,8 +621,8 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav
|
||||
// Always disable recents when alternate car mode UI is active and for secondary displays.
|
||||
boolean disableRecent = isRecentsButtonDisabled();
|
||||
|
||||
boolean disableBack = QuickStepContract.isGesturalMode(getContext())
|
||||
|| (((mDisabledFlags & View.STATUS_BAR_DISABLE_BACK) != 0) && !useAltBack);
|
||||
boolean disableBack = !useAltBack && (QuickStepContract.isGesturalMode(getContext())
|
||||
|| ((mDisabledFlags & View.STATUS_BAR_DISABLE_BACK) != 0));
|
||||
|
||||
// When screen pinning, don't hide back and home when connected service or back and
|
||||
// recents buttons when disconnected from launcher service in screen pinning mode,
|
||||
@@ -715,6 +762,11 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav
|
||||
setWindowFlag(WindowManager.LayoutParams.FLAG_SLIPPERY, slippery);
|
||||
}
|
||||
|
||||
public void updateWindowTouchable() {
|
||||
boolean touchable = mImeVisible || !QuickStepContract.isGesturalMode(getContext());
|
||||
setWindowFlag(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE, !touchable);
|
||||
}
|
||||
|
||||
private void setWindowFlag(int flags, boolean enable) {
|
||||
final ViewGroup navbarView = ((ViewGroup) getParent());
|
||||
if (navbarView == null) {
|
||||
@@ -734,7 +786,7 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav
|
||||
}
|
||||
|
||||
private void onOverlaysChanged() {
|
||||
mNavigationInflaterView.onTuningChanged(NAV_BAR_VIEWS, null);
|
||||
mNavigationInflaterView.setNavigationBarLayout(null);
|
||||
|
||||
// Color adaption is tied with showing home handle, only avaliable if visible
|
||||
if (QuickStepContract.isGesturalMode(getContext())) {
|
||||
@@ -1062,6 +1114,15 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav
|
||||
filter.addDataScheme("package");
|
||||
getContext().registerReceiver(mOverlaysChangedReceiver, filter);
|
||||
mEdgeBackGestureHandler.onNavBarAttached();
|
||||
|
||||
if (QuickStepContract.isGesturalMode(getContext())) {
|
||||
try {
|
||||
WindowManagerWrapper.getInstance().addPinnedStackListener(mImeChangedListener);
|
||||
} catch (RemoteException e) {
|
||||
Log.e(TAG, "Failed to register pinned stack listener", e);
|
||||
}
|
||||
}
|
||||
updateWindowTouchable();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -1078,6 +1139,8 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav
|
||||
|
||||
getContext().unregisterReceiver(mOverlaysChangedReceiver);
|
||||
mEdgeBackGestureHandler.onNavBarDetached();
|
||||
|
||||
WindowManagerWrapper.getInstance().removePinnedStackListener(mImeChangedListener);
|
||||
}
|
||||
|
||||
private void setUpSwipeUpOnboarding(boolean connectedToOverviewProxy) {
|
||||
|
||||
@@ -36,6 +36,7 @@ import com.android.systemui.SysuiTestCase;
|
||||
import com.android.systemui.statusbar.policy.KeyButtonDrawable;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
@@ -173,6 +174,7 @@ public class NavigationBarContextTest extends SysuiTestCase {
|
||||
}
|
||||
|
||||
@Test
|
||||
@Ignore("b/112934365")
|
||||
public void testUpdateIconsDarkIntensity() throws Exception {
|
||||
final int unusedColor = 0;
|
||||
final Drawable d = mock(Drawable.class);
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
|
||||
package com.android.server.wm;
|
||||
|
||||
import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
|
||||
import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD;
|
||||
import static android.view.WindowManagerPolicyConstants.NAV_BAR_BOTTOM;
|
||||
import static android.view.WindowManagerPolicyConstants.NAV_BAR_LEFT;
|
||||
@@ -91,7 +90,7 @@ public class NavigationBarExperiments {
|
||||
* @param w the window that is being offset by experiment
|
||||
*/
|
||||
public void offsetWindowFramesForNavBar(int navPosition, WindowState w) {
|
||||
if (w.getAttrs().type != TYPE_INPUT_METHOD && w.getActivityType() != ACTIVITY_TYPE_HOME) {
|
||||
if (w.getAttrs().type != TYPE_INPUT_METHOD) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -102,6 +101,7 @@ public class NavigationBarExperiments {
|
||||
int navHeight = getNavigationBarFrameHeight() - getNavigationBarHeight();
|
||||
if (navHeight > 0) {
|
||||
cf.bottom -= navHeight;
|
||||
windowFrames.mStableFrame.bottom -= navHeight;
|
||||
}
|
||||
break;
|
||||
case NAV_BAR_LEFT:
|
||||
|
||||
Reference in New Issue
Block a user