diff options
| author | Jason Monk <jmonk@google.com> | 2017-09-06 16:45:41 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2017-09-06 16:45:41 +0000 |
| commit | 181d4a8096970a55e8dc5eeeff8830df29e0f201 (patch) | |
| tree | 17ba586f078a41f6fbe594a307e57149f5ce18d2 /core/java | |
| parent | 3e009eef523c990c9058b2e4c7fe0e3c5e7d56f9 (diff) | |
| parent | 45484206740874ddd4024fedfdd8676d935ea67b (diff) | |
Merge "Make settings themed apps have light nav" into oc-mr1-dev
Diffstat (limited to 'core/java')
| -rw-r--r-- | core/java/com/android/internal/policy/DecorView.java | 43 | ||||
| -rw-r--r-- | core/java/com/android/internal/policy/PhoneWindow.java | 7 |
2 files changed, 44 insertions, 6 deletions
diff --git a/core/java/com/android/internal/policy/DecorView.java b/core/java/com/android/internal/policy/DecorView.java index 0d962eb424f6..dafa68ee095c 100644 --- a/core/java/com/android/internal/policy/DecorView.java +++ b/core/java/com/android/internal/policy/DecorView.java @@ -17,6 +17,9 @@ package com.android.internal.policy; import android.graphics.Outline; +import android.graphics.drawable.InsetDrawable; +import android.graphics.drawable.LayerDrawable; +import android.util.Pair; import android.view.ViewOutlineProvider; import android.view.accessibility.AccessibilityNodeInfo; import com.android.internal.R; @@ -1103,8 +1106,8 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind boolean navBarToLeftEdge = isNavBarToLeftEdge(mLastBottomInset, mLastLeftInset); int navBarSize = getNavBarSize(mLastBottomInset, mLastRightInset, mLastLeftInset); updateColorViewInt(mNavigationColorViewState, sysUiVisibility, - mWindow.mNavigationBarColor, navBarSize, navBarToRightEdge || navBarToLeftEdge, - navBarToLeftEdge, + mWindow.mNavigationBarColor, mWindow.mNavigationBarDividerColor, navBarSize, + navBarToRightEdge || navBarToLeftEdge, navBarToLeftEdge, 0 /* sideInset */, animate && !disallowAnimate, false /* force */); boolean statusBarNeedsRightInset = navBarToRightEdge @@ -1114,7 +1117,7 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind int statusBarSideInset = statusBarNeedsRightInset ? mLastRightInset : statusBarNeedsLeftInset ? mLastLeftInset : 0; updateColorViewInt(mStatusColorViewState, sysUiVisibility, - calculateStatusBarColor(), mLastTopInset, + calculateStatusBarColor(), 0, mLastTopInset, false /* matchVertical */, statusBarNeedsLeftInset, statusBarSideInset, animate && !disallowAnimate, mForceWindowDrawsStatusBarBackground); @@ -1201,6 +1204,7 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind * @param state the color view to update. * @param sysUiVis the current systemUiVisibility to apply. * @param color the current color to apply. + * @param dividerColor the current divider color to apply. * @param size the current size in the non-parent-matching dimension. * @param verticalBar if true the view is attached to a vertical edge, otherwise to a * horizontal edge, @@ -1208,7 +1212,7 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind * @param animate if true, the change will be animated. */ private void updateColorViewInt(final ColorViewState state, int sysUiVis, int color, - int size, boolean verticalBar, boolean seascape, int sideMargin, + int dividerColor, int size, boolean verticalBar, boolean seascape, int sideMargin, boolean animate, boolean force) { state.present = state.attributes.isPresent(sysUiVis, mWindow.getAttributes().flags, force); boolean show = state.attributes.isVisible(state.present, color, @@ -1227,7 +1231,7 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind if (view == null) { if (showView) { state.view = view = new View(mContext); - view.setBackgroundColor(color); + setColor(view, color, dividerColor, verticalBar, seascape); view.setTransitionName(state.attributes.transitionName); view.setId(state.attributes.id); visibilityChanged = true; @@ -1262,7 +1266,7 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind view.setLayoutParams(lp); } if (showView) { - view.setBackgroundColor(color); + setColor(view, color, dividerColor, verticalBar, seascape); } } if (visibilityChanged) { @@ -1295,6 +1299,33 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind state.color = color; } + private static void setColor(View v, int color, int dividerColor, boolean verticalBar, + boolean seascape) { + if (dividerColor != 0) { + final Pair<Boolean, Boolean> dir = (Pair<Boolean, Boolean>) v.getTag(); + if (dir == null || dir.first != verticalBar || dir.second != seascape) { + final int size = Math.round( + TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 1, + v.getContext().getResources().getDisplayMetrics())); + // Use an inset to make the divider line on the side that faces the app. + final InsetDrawable d = new InsetDrawable(new ColorDrawable(color), + verticalBar && !seascape ? size : 0, + !verticalBar ? size : 0, + verticalBar && seascape ? size : 0, 0); + v.setBackground(new LayerDrawable(new Drawable[] { + new ColorDrawable(dividerColor), d })); + v.setTag(new Pair<>(verticalBar, seascape)); + } else { + final LayerDrawable d = (LayerDrawable) v.getBackground(); + final InsetDrawable inset = ((InsetDrawable) d.getDrawable(0)); + ((ColorDrawable) inset.getDrawable()).setColor(dividerColor); + ((ColorDrawable) d.getDrawable(1)).setColor(color); + } + } else { + v.setBackgroundColor(color); + } + } + private void updateColorViewTranslations() { // Put the color views back in place when they get moved off the screen // due to the the ViewRootImpl panning. diff --git a/core/java/com/android/internal/policy/PhoneWindow.java b/core/java/com/android/internal/policy/PhoneWindow.java index 544afd993b37..2de95372f62c 100644 --- a/core/java/com/android/internal/policy/PhoneWindow.java +++ b/core/java/com/android/internal/policy/PhoneWindow.java @@ -233,6 +233,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { private int mTextColor = 0; int mStatusBarColor = 0; int mNavigationBarColor = 0; + int mNavigationBarDividerColor = 0; private boolean mForcedStatusBarColor = false; private boolean mForcedNavigationBarColor = false; @@ -2432,6 +2433,8 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { } if (!mForcedNavigationBarColor) { mNavigationBarColor = a.getColor(R.styleable.Window_navigationBarColor, 0xFF000000); + mNavigationBarDividerColor = a.getColor(R.styleable.Window_navigationBarDividerColor, + 0x00000000); } WindowManager.LayoutParams params = getAttributes(); @@ -2453,6 +2456,10 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { decor.setSystemUiVisibility( decor.getSystemUiVisibility() | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); } + if (a.getBoolean(R.styleable.Window_windowLightNavigationBar, false)) { + decor.setSystemUiVisibility( + decor.getSystemUiVisibility() | View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); + } if (mAlwaysReadCloseOnTouchAttr || getContext().getApplicationInfo().targetSdkVersion >= android.os.Build.VERSION_CODES.HONEYCOMB) { |
