diff --git a/packages/SystemUI/res/drawable/ic_ime_switcher_default.xml b/packages/SystemUI/res/drawable/ic_ime_switcher_default.xml index 6a7f18b80b9f5..d5f8a2ad113d2 100644 --- a/packages/SystemUI/res/drawable/ic_ime_switcher_default.xml +++ b/packages/SystemUI/res/drawable/ic_ime_switcher_default.xml @@ -15,11 +15,11 @@ --> + android:width="20dp" + android:height="20dp" + android:viewportWidth="24" + android:viewportHeight="24"> diff --git a/packages/SystemUI/res/drawable/ic_sysbar_accessibility_button.xml b/packages/SystemUI/res/drawable/ic_sysbar_accessibility_button.xml index 6fbc404d9905a..8d569b2ca6e44 100644 --- a/packages/SystemUI/res/drawable/ic_sysbar_accessibility_button.xml +++ b/packages/SystemUI/res/drawable/ic_sysbar_accessibility_button.xml @@ -15,8 +15,8 @@ limitations under the License. --> - - + android:pathData="M16.78,10.03l-3.97,3.97l3.97,3.97l-1.06,1.06l-5.03,-5.03l5.03,-5.03z" + android:fillColor="?attr/singleToneColor" /> \ No newline at end of file diff --git a/packages/SystemUI/res/drawable/ic_sysbar_menu.xml b/packages/SystemUI/res/drawable/ic_sysbar_menu.xml index 5cc17911f11ff..d53c95b1cb807 100644 --- a/packages/SystemUI/res/drawable/ic_sysbar_menu.xml +++ b/packages/SystemUI/res/drawable/ic_sysbar_menu.xml @@ -15,8 +15,8 @@ limitations under the License. --> diff --git a/packages/SystemUI/res/drawable/ic_sysbar_rotate_button.xml b/packages/SystemUI/res/drawable/ic_sysbar_rotate_button.xml index 6c1ae99940359..907be01be5083 100644 --- a/packages/SystemUI/res/drawable/ic_sysbar_rotate_button.xml +++ b/packages/SystemUI/res/drawable/ic_sysbar_rotate_button.xml @@ -17,14 +17,14 @@ + android:pathData="M12,4c-0.06,0 -0.12,0.01 -0.18,0.01l1.09,-1.09L11.5,1.5L8,5l3.5,3.5l1.41,-1.41l-1.08,-1.08C11.89,6.01 11.95,6 12,6c3.31,0 6,2.69 6,6c0,1.7 -0.71,3.23 -1.85,4.32l1.41,1.41C19.06,16.28 20,14.25 20,12C20,7.59 16.41,4 12,4zM16,19l-3.5,3.5l-1.41,-1.41l1.1,-1.1C12.13,19.98 12.06,20 12,20c-4.41,0 -8,-3.59 -8,-8c0,-2.25 0.94,-4.28 2.43,-5.73l1.41,1.41C6.71,8.77 6,10.3 6,12c0,3.31 2.69,6 6,6c0.05,0 0.11,-0.01 0.16,-0.01l-1.07,-1.07l1.41,-1.41L16,19z"/> diff --git a/packages/SystemUI/res/layout/contextual.xml b/packages/SystemUI/res/layout/contextual.xml new file mode 100644 index 0000000000000..94591e932b5b5 --- /dev/null +++ b/packages/SystemUI/res/layout/contextual.xml @@ -0,0 +1,72 @@ + + + + + + + + + diff --git a/packages/SystemUI/res/layout/navigation_layout.xml b/packages/SystemUI/res/layout/navigation_layout.xml index d72021e27e0bc..baaf699c278ad 100644 --- a/packages/SystemUI/res/layout/navigation_layout.xml +++ b/packages/SystemUI/res/layout/navigation_layout.xml @@ -18,16 +18,14 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:systemui="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" - android:layout_height="match_parent" - android:layout_marginStart="@dimen/rounded_corner_content_padding" - android:layout_marginEnd="@dimen/rounded_corner_content_padding" - android:paddingStart="@dimen/nav_content_padding" - android:paddingEnd="@dimen/nav_content_padding"> + android:layout_height="match_parent"> @@ -36,6 +34,8 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" + android:paddingStart="@dimen/nav_content_padding" + android:paddingEnd="@dimen/nav_content_padding" android:clipToPadding="false" android:clipChildren="false" /> @@ -46,6 +46,8 @@ android:layout_gravity="center" android:gravity="center" android:orientation="horizontal" + android:paddingStart="@dimen/nav_content_padding" + android:paddingEnd="@dimen/nav_content_padding" android:clipToPadding="false" android:clipChildren="false" /> diff --git a/packages/SystemUI/res/layout/navigation_layout_rot90.xml b/packages/SystemUI/res/layout/navigation_layout_rot90.xml index 0e17e5b57caed..6d5b77885a09d 100644 --- a/packages/SystemUI/res/layout/navigation_layout_rot90.xml +++ b/packages/SystemUI/res/layout/navigation_layout_rot90.xml @@ -18,23 +18,26 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:systemui="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" - android:layout_height="match_parent" - android:layout_marginTop="@dimen/rounded_corner_content_padding" - android:layout_marginBottom="@dimen/rounded_corner_content_padding" - android:paddingTop="8dp" - android:paddingBottom="8dp"> + android:layout_height="match_parent"> + android:layout_height="match_parent" + android:paddingTop="@dimen/rounded_corner_content_padding" + android:paddingBottom="@dimen/rounded_corner_content_padding" + android:clipChildren="false" + android:clipToPadding="false"> + android:paddingTop="@dimen/nav_content_padding" + android:paddingBottom="@dimen/nav_content_padding" + android:clipChildren="false" + android:clipToPadding="false" /> + android:paddingTop="@dimen/nav_content_padding" + android:paddingBottom="@dimen/nav_content_padding" + android:clipChildren="false" + android:clipToPadding="false" /> diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml index fb3601ca391c2..5c0d5dde2b4f4 100644 --- a/packages/SystemUI/res/values/config.xml +++ b/packages/SystemUI/res/values/config.xml @@ -367,6 +367,7 @@ left[.5W],back[1WC];home;recent[1WC],right[.5W] + back[1.7WC];home;contextual[1.7WC] false diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarInflaterView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarInflaterView.java index 4885c2f796d96..e6f2c33c33d22 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarInflaterView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarInflaterView.java @@ -34,11 +34,12 @@ import android.widget.LinearLayout; import android.widget.Space; import com.android.systemui.Dependency; +import com.android.systemui.OverviewProxyService; import com.android.systemui.R; import com.android.systemui.plugins.PluginListener; import com.android.systemui.plugins.PluginManager; import com.android.systemui.plugins.statusbar.phone.NavBarButtonProvider; -import com.android.systemui.statusbar.phone.ReverseLinearLayout.ReverseFrameLayout; +import com.android.systemui.statusbar.phone.ReverseLinearLayout.ReverseRelativeLayout; import com.android.systemui.statusbar.policy.KeyButtonView; import com.android.systemui.tuner.TunerService; import com.android.systemui.tuner.TunerService.Tunable; @@ -67,6 +68,7 @@ public class NavigationBarInflaterView extends FrameLayout public static final String KEY = "key"; public static final String LEFT = "left"; public static final String RIGHT = "right"; + public static final String CONTEXTUAL = "contextual"; public static final String GRAVITY_SEPARATOR = ";"; public static final String BUTTON_SEPARATOR = ","; @@ -97,6 +99,9 @@ public class NavigationBarInflaterView extends FrameLayout private View mLastLandscape; private boolean mAlternativeOrder; + private boolean mUsingCustomLayout; + + private OverviewProxyService mOverviewProxyService; public NavigationBarInflaterView(Context context, AttributeSet attrs) { super(context, attrs); @@ -105,6 +110,7 @@ public class NavigationBarInflaterView extends FrameLayout context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); Mode displayMode = mDisplay.getMode(); isRot0Landscape = displayMode.getPhysicalWidth() > displayMode.getPhysicalHeight(); + mOverviewProxyService = Dependency.get(OverviewProxyService.class); } private void createInflaters() { @@ -136,7 +142,10 @@ public class NavigationBarInflaterView extends FrameLayout } protected String getDefaultLayout() { - return mContext.getString(R.string.config_navBarLayout); + final int defaultResource = mOverviewProxyService.shouldShowSwipeUpUI() + ? R.string.config_navBarLayoutQuickstep + : R.string.config_navBarLayout; + return mContext.getString(defaultResource); } @Override @@ -159,6 +168,7 @@ public class NavigationBarInflaterView extends FrameLayout public void onTuningChanged(String key, String newValue) { if (NAV_BAR_VIEWS.equals(key)) { if (!Objects.equals(mCurrentLayout, newValue)) { + mUsingCustomLayout = newValue != null; clearViews(); inflateLayout(newValue); } @@ -168,6 +178,18 @@ public class NavigationBarInflaterView extends FrameLayout } } + public void onLikelyDefaultLayoutChange() { + // Don't override custom layouts + if (mUsingCustomLayout) return; + + // Reevaluate new layout + final String newValue = getDefaultLayout(); + if (!Objects.equals(mCurrentLayout, newValue)) { + clearViews(); + inflateLayout(newValue); + } + } + public void setButtonDispatchers(SparseArray buttonDispatchers) { mButtonDispatchers = buttonDispatchers; for (int i = 0; i < buttonDispatchers.size(); i++) { @@ -178,10 +200,12 @@ public class NavigationBarInflaterView extends FrameLayout public void updateButtonDispatchersCurrentView() { if (mButtonDispatchers != null) { final int rotation = mDisplay.getRotation(); - final View view = rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_180 - ? mRot0 : mRot90; + final boolean portrait = rotation == Surface.ROTATION_0 + || rotation == Surface.ROTATION_180; + final View view = portrait ? mRot0 : mRot90; for (int i = 0; i < mButtonDispatchers.size(); i++) { - mButtonDispatchers.valueAt(i).setCurrentView(view); + final ButtonDispatcher dispatcher = mButtonDispatchers.valueAt(i); + dispatcher.setCurrentView(view); } } } @@ -288,8 +312,8 @@ public class NavigationBarInflaterView extends FrameLayout addToDispatchers(v); View lastView = landscape ? mLastLandscape : mLastPortrait; View accessibilityView = v; - if (v instanceof ReverseFrameLayout) { - accessibilityView = ((ReverseFrameLayout) v).getChildAt(0); + if (v instanceof ReverseRelativeLayout) { + accessibilityView = ((ReverseRelativeLayout) v).getChildAt(0); } if (lastView != null) { accessibilityView.setAccessibilityTraversalAfter(lastView.getId()); @@ -307,21 +331,33 @@ public class NavigationBarInflaterView extends FrameLayout if (sizeStr == null) return v; if (sizeStr.contains(WEIGHT_SUFFIX)) { + // To support gravity, wrap in RelativeLayout and apply gravity to it. + // Children wanting to use gravity must be smaller then the frame. float weight = Float.parseFloat(sizeStr.substring(0, sizeStr.indexOf(WEIGHT_SUFFIX))); - FrameLayout frame = new ReverseFrameLayout(mContext); + ReverseRelativeLayout frame = new ReverseRelativeLayout(mContext); LayoutParams childParams = new LayoutParams(v.getLayoutParams()); - if (sizeStr.endsWith(WEIGHT_CENTERED_SUFFIX)) { - childParams.gravity = Gravity.CENTER; - } else { - childParams.gravity = landscape ? (start ? Gravity.BOTTOM : Gravity.TOP) - : (start ? Gravity.START : Gravity.END); - } + + // Compute gravity to apply + int gravity = (landscape) ? (start ? Gravity.TOP : Gravity.BOTTOM) + : (start ? Gravity.START : Gravity.END); + if (sizeStr.endsWith(WEIGHT_CENTERED_SUFFIX)) gravity = Gravity.CENTER; + + // Set default gravity, flipped if needed in reversed layouts (270 RTL and 90 LTR) + frame.setDefaultGravity(gravity); + frame.setGravity(gravity); // Apply gravity to root + frame.addView(v, childParams); + + // Use weighting to set the width of the frame frame.setLayoutParams(new LinearLayout.LayoutParams(0, MATCH_PARENT, weight)); + + // Ensure ripples can be drawn outside bounds frame.setClipChildren(false); frame.setClipToPadding(false); + return frame; } + float size = Float.parseFloat(sizeStr); ViewGroup.LayoutParams params = v.getLayoutParams(); params.width = (int) (params.width * size); @@ -355,6 +391,8 @@ public class NavigationBarInflaterView extends FrameLayout v = inflater.inflate(R.layout.nav_key_space, parent, false); } else if (CLIPBOARD.equals(button)) { v = inflater.inflate(R.layout.clipboard, parent, false); + } else if (CONTEXTUAL.equals(button)) { + v = inflater.inflate(R.layout.contextual, parent, false); } else if (button.startsWith(KEY)) { String uri = extractImage(button); int code = extractKeycode(button); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java index 49f9ee2b1c836..704e9634bb2a2 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java @@ -746,6 +746,12 @@ public class NavigationBarView extends FrameLayout implements PluginListener