diff options
author | Rohan Shah <shahrk@google.com> | 2018-03-30 21:24:17 +0000 |
---|---|---|
committer | Rohan Shah <shahrk@google.com> | 2018-04-04 09:36:49 -0700 |
commit | cc3d1d8b96e7b59ea078c7ea8538d9e1ee5ef154 (patch) | |
tree | b4ebf450606e87243a1efd2345459479b307038a /packages/SystemUI/src | |
parent | 1e617f5c20a98794a8035f0af9630b711e73021f (diff) |
[QS] Update landscape UI
Rolling forward the landscape UI changes (To not break taimen with a
notch this time!). OG CL: ag/3717677
Shorten status bar height in landscape and update colors to use
wallpaperTextColor when in landscape mode.
Additionally modified scrim opacity for the QS panel to provide more
contrast/focus on content.
Test: Visually
Bug: 73808887
Change-Id: I249579d2898b9915868bb584661864d10ed88de2
Diffstat (limited to 'packages/SystemUI/src')
6 files changed, 179 insertions, 22 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java b/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java index 1ae06d751255..0683514f6f2a 100644 --- a/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java +++ b/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java @@ -81,6 +81,14 @@ public class BatteryMeterView extends LinearLayout implements private float mDarkIntensity; private int mUser; + /** + * Whether we should use colors that adapt based on wallpaper/the scrim behind quick settings. + */ + private boolean mUseWallpaperTextColors; + + private int mNonAdaptedForegroundColor; + private int mNonAdaptedBackgroundColor; + public BatteryMeterView(Context context) { this(context, null, 0); } @@ -140,6 +148,29 @@ public class BatteryMeterView extends LinearLayout implements updateShowPercent(); } + /** + * Sets whether the battery meter view uses the wallpaperTextColor. If we're not using it, we'll + * revert back to dark-mode-based/tinted colors. + * + * @param shouldUseWallpaperTextColor whether we should use wallpaperTextColor for all + * components + */ + public void useWallpaperTextColor(boolean shouldUseWallpaperTextColor) { + if (shouldUseWallpaperTextColor == mUseWallpaperTextColors) { + return; + } + + mUseWallpaperTextColors = shouldUseWallpaperTextColor; + + if (mUseWallpaperTextColors) { + updateColors( + Utils.getColorAttr(mContext, R.attr.wallpaperTextColor), + Utils.getColorAttr(mContext, R.attr.wallpaperTextColorSecondary)); + } else { + updateColors(mNonAdaptedForegroundColor, mNonAdaptedBackgroundColor); + } + } + public void setColorsFromContext(Context context) { if (context == null) { return; @@ -179,7 +210,8 @@ public class BatteryMeterView extends LinearLayout implements getContext().getContentResolver().registerContentObserver( Settings.System.getUriFor(SHOW_BATTERY_PERCENT), false, mSettingObserver, mUser); updateShowPercent(); - Dependency.get(TunerService.class).addTunable(this, StatusBarIconController.ICON_BLACKLIST); + Dependency.get(TunerService.class) + .addTunable(this, StatusBarIconController.ICON_BLACKLIST); Dependency.get(ConfigurationController.class).addCallback(this); mUserTracker.startTracking(); } @@ -273,19 +305,23 @@ public class BatteryMeterView extends LinearLayout implements @Override public void onDarkChanged(Rect area, float darkIntensity, int tint) { mDarkIntensity = darkIntensity; + float intensity = DarkIconDispatcher.isInArea(area, this) ? darkIntensity : 0; - int foreground = getColorForDarkIntensity(intensity, mLightModeFillColor, - mDarkModeFillColor); - int background = getColorForDarkIntensity(intensity, mLightModeBackgroundColor, - mDarkModeBackgroundColor); - mDrawable.setColors(foreground, background); - setTextColor(foreground); + mNonAdaptedForegroundColor = getColorForDarkIntensity( + intensity, mLightModeFillColor, mDarkModeFillColor); + mNonAdaptedBackgroundColor = getColorForDarkIntensity( + intensity, mLightModeBackgroundColor,mDarkModeBackgroundColor); + + if (!mUseWallpaperTextColors) { + updateColors(mNonAdaptedForegroundColor, mNonAdaptedBackgroundColor); + } } - public void setTextColor(int color) { - mTextColor = color; + private void updateColors(int foregroundColor, int backgroundColor) { + mDrawable.setColors(foregroundColor, backgroundColor); + mTextColor = foregroundColor; if (mBatteryPercentView != null) { - mBatteryPercentView.setTextColor(color); + mBatteryPercentView.setTextColor(foregroundColor); } } diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java b/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java index bfbfbf6fe813..71614634cd00 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java @@ -18,17 +18,15 @@ package com.android.systemui.qs; import android.content.Context; import android.content.res.Configuration; -import android.graphics.Canvas; -import android.graphics.Path; import android.graphics.Point; import android.util.AttributeSet; +import android.util.Log; import android.view.View; import android.widget.FrameLayout; import com.android.settingslib.Utils; import com.android.systemui.R; import com.android.systemui.qs.customize.QSCustomizer; -import com.android.systemui.statusbar.ExpandableOutlineView; /** * Wrapper view with background which contains {@link QSPanel} and {@link BaseStatusBarHeader} @@ -44,7 +42,11 @@ public class QSContainerImpl extends FrameLayout { protected float mQsExpansion; private QSCustomizer mQSCustomizer; private View mQSFooter; + private View mBackground; + private View mBackgroundGradient; + private View mStatusBarBackground; + private int mSideMargins; public QSContainerImpl(Context context, AttributeSet attrs) { @@ -60,6 +62,8 @@ public class QSContainerImpl extends FrameLayout { mQSCustomizer = findViewById(R.id.qs_customize); mQSFooter = findViewById(R.id.qs_footer); mBackground = findViewById(R.id.quick_settings_background); + mStatusBarBackground = findViewById(R.id.quick_settings_status_bar_background); + mBackgroundGradient = findViewById(R.id.quick_settings_gradient_view); mSideMargins = getResources().getDimensionPixelSize(R.dimen.notification_side_paddings); setClickable(true); @@ -68,6 +72,22 @@ public class QSContainerImpl extends FrameLayout { } @Override + protected void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + + // Hide the backgrounds when in landscape mode. + if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { + mBackgroundGradient.setVisibility(View.INVISIBLE); + mStatusBarBackground.setVisibility(View.INVISIBLE); + } else { + mBackgroundGradient.setVisibility(View.VISIBLE); + mStatusBarBackground.setVisibility(View.VISIBLE); + } + + updateResources(); + } + + @Override public boolean performClick() { // Want to receive clicks so missing QQS tiles doesn't cause collapse, but // don't want to do anything with them. @@ -101,6 +121,14 @@ public class QSContainerImpl extends FrameLayout { updateExpansion(); } + private void updateResources() { + LayoutParams layoutParams = (LayoutParams) mQSPanel.getLayoutParams(); + layoutParams.topMargin = mContext.getResources().getDimensionPixelSize( + com.android.internal.R.dimen.quick_qs_offset_height); + + mQSPanel.setLayoutParams(layoutParams); + } + /** * Overrides the height of this view (post-layout), so that the content is clipped to that * height and the background is set to that height. diff --git a/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java b/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java index df65d1fb82cd..2de435f32b25 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java @@ -26,6 +26,7 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.res.Configuration; +import android.content.res.Resources; import android.graphics.Color; import android.graphics.Rect; import android.media.AudioManager; @@ -54,8 +55,10 @@ import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.phone.PhoneStatusBarView; import com.android.systemui.statusbar.phone.StatusBarIconController; import com.android.systemui.statusbar.phone.StatusBarIconController.TintedIconManager; +import com.android.systemui.statusbar.policy.Clock; import com.android.systemui.statusbar.policy.DarkIconDispatcher; import com.android.systemui.statusbar.policy.DarkIconDispatcher.DarkReceiver; +import com.android.systemui.statusbar.policy.DateView; import com.android.systemui.statusbar.policy.NextAlarmController; import java.util.Locale; @@ -90,6 +93,7 @@ public class QuickStatusBarHeader extends RelativeLayout implements CommandQueue private TouchAnimator mStatusIconsAlphaAnimator; private TouchAnimator mHeaderTextContainerAlphaAnimator; + private View mSystemIconsView; private View mQuickQsStatusIcons; private View mDate; private View mHeaderTextContainerView; @@ -107,6 +111,9 @@ public class QuickStatusBarHeader extends RelativeLayout implements CommandQueue private View mStatusSeparator; private ImageView mRingerModeIcon; private TextView mRingerModeTextView; + private BatteryMeterView mBatteryMeterView; + private Clock mClockView; + private DateView mDateView; private NextAlarmController mAlarmController; /** Counts how many times the long press tooltip has been shown to the user. */ @@ -138,6 +145,7 @@ public class QuickStatusBarHeader extends RelativeLayout implements CommandQueue mHeaderQsPanel = findViewById(R.id.quick_qs_panel); mDate = findViewById(R.id.date); mDate.setOnClickListener(this); + mSystemIconsView = findViewById(R.id.quick_status_bar_system_icons); mQuickQsStatusIcons = findViewById(R.id.quick_qs_status_icons); mIconManager = new TintedIconManager(findViewById(R.id.statusIcons)); @@ -164,8 +172,10 @@ public class QuickStatusBarHeader extends RelativeLayout implements CommandQueue // Set the correct tint for the status icons so they contrast mIconManager.setTint(fillColor); - BatteryMeterView battery = findViewById(R.id.battery); - battery.setForceShowPercent(true); + mBatteryMeterView = findViewById(R.id.battery); + mBatteryMeterView.setForceShowPercent(true); + mClockView = findViewById(R.id.clock); + mDateView = findViewById(R.id.date); } private void updateStatusText() { @@ -212,6 +222,13 @@ public class QuickStatusBarHeader extends RelativeLayout implements CommandQueue protected void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); updateResources(); + + // Update color schemes in landscape to use wallpaperTextColor + boolean shouldUseWallpaperTextColor = + newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE; + mBatteryMeterView.useWallpaperTextColor(shouldUseWallpaperTextColor); + mClockView.useWallpaperTextColor(shouldUseWallpaperTextColor); + mDateView.useWallpaperTextColor(shouldUseWallpaperTextColor); } @Override @@ -221,11 +238,21 @@ public class QuickStatusBarHeader extends RelativeLayout implements CommandQueue } private void updateResources() { - // Update height, especially due to landscape mode restricting space. + Resources resources = mContext.getResources(); + + // Update height for a few views, especially due to landscape mode restricting space. mHeaderTextContainerView.getLayoutParams().height = - mContext.getResources().getDimensionPixelSize(R.dimen.qs_header_tooltip_height); + resources.getDimensionPixelSize(R.dimen.qs_header_tooltip_height); mHeaderTextContainerView.setLayoutParams(mHeaderTextContainerView.getLayoutParams()); + mSystemIconsView.getLayoutParams().height = resources.getDimensionPixelSize( + com.android.internal.R.dimen.quick_qs_offset_height); + mSystemIconsView.setLayoutParams(mSystemIconsView.getLayoutParams()); + + getLayoutParams().height = + resources.getDimensionPixelSize(com.android.internal.R.dimen.quick_qs_total_height); + setLayoutParams(getLayoutParams()); + updateStatusIconAlphaAnimator(); updateHeaderTextContainerAlphaAnimator(); } @@ -497,9 +524,8 @@ public class QuickStatusBarHeader extends RelativeLayout implements CommandQueue mHeaderQsPanel.setHost(host, null /* No customization in header */); // Use SystemUI context to get battery meter colors, and let it use the default tint (white) - BatteryMeterView battery = findViewById(R.id.battery); - battery.setColorsFromContext(mHost.getContext()); - battery.onDarkChanged(new Rect(), 0, DarkIconDispatcher.DEFAULT_ICON_TINT); + mBatteryMeterView.setColorsFromContext(mHost.getContext()); + mBatteryMeterView.onDarkChanged(new Rect(), 0, DarkIconDispatcher.DEFAULT_ICON_TINT); } public void setCallback(Callback qsPanelCallback) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java index 2c025b5e2392..4e12936ff47a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java @@ -85,7 +85,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnCo /** * Default alpha value for most scrims. */ - public static final float GRADIENT_SCRIM_ALPHA = 0.45f; + public static final float GRADIENT_SCRIM_ALPHA = 0.70f; /** * A scrim varies its opacity based on a busyness factor, for example * how many notifications are currently visible. diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java index 4c92d01eae4c..baeaaadf419f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java @@ -40,6 +40,7 @@ import android.view.Display; import android.view.View; import android.widget.TextView; +import com.android.settingslib.Utils; import com.android.systemui.DemoMode; import com.android.systemui.Dependency; import com.android.systemui.FontSizeUtils; @@ -84,6 +85,17 @@ public class Clock extends TextView implements DemoMode, Tunable, CommandQueue.C private boolean mShowSeconds; private Handler mSecondsHandler; + /** + * Whether we should use colors that adapt based on wallpaper/the scrim behind quick settings + * for text. + */ + private boolean mUseWallpaperTextColor; + + /** + * Color to be set on this {@link TextView}, when wallpaperTextColor is <b>not</b> utilized. + */ + private int mNonAdaptedColor; + public Clock(Context context) { this(context, null); } @@ -101,6 +113,7 @@ public class Clock extends TextView implements DemoMode, Tunable, CommandQueue.C try { mAmPmStyle = a.getInt(R.styleable.Clock_amPmStyle, AM_PM_STYLE_GONE); mShowDark = a.getBoolean(R.styleable.Clock_showDark, true); + mNonAdaptedColor = getCurrentTextColor(); } finally { a.recycle(); } @@ -227,7 +240,10 @@ public class Clock extends TextView implements DemoMode, Tunable, CommandQueue.C @Override public void onDarkChanged(Rect area, float darkIntensity, int tint) { - setTextColor(DarkIconDispatcher.getTint(area, this, tint)); + mNonAdaptedColor = DarkIconDispatcher.getTint(area, this, tint); + if (!mUseWallpaperTextColor) { + setTextColor(mNonAdaptedColor); + } } @Override @@ -242,6 +258,25 @@ public class Clock extends TextView implements DemoMode, Tunable, CommandQueue.C 0); } + /** + * Sets whether the clock uses the wallpaperTextColor. If we're not using it, we'll revert back + * to dark-mode-based/tinted colors. + * + * @param shouldUseWallpaperTextColor whether we should use wallpaperTextColor for text color + */ + public void useWallpaperTextColor(boolean shouldUseWallpaperTextColor) { + if (shouldUseWallpaperTextColor == mUseWallpaperTextColor) { + return; + } + mUseWallpaperTextColor = shouldUseWallpaperTextColor; + + if (mUseWallpaperTextColor) { + setTextColor(Utils.getColorAttr(mContext, R.attr.wallpaperTextColor)); + } else { + setTextColor(mNonAdaptedColor); + } + } + private void updateShowSeconds() { if (mShowSeconds) { // Wait until we have a display to start trying to show seconds. diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DateView.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DateView.java index 74a30fa8094f..ef630c7205e1 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DateView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DateView.java @@ -27,6 +27,7 @@ import android.text.TextUtils; import android.util.AttributeSet; import android.widget.TextView; +import com.android.settingslib.Utils; import com.android.systemui.Dependency; import com.android.systemui.R; @@ -42,6 +43,17 @@ public class DateView extends TextView { private String mLastText; private String mDatePattern; + /** + * Whether we should use colors that adapt based on wallpaper/the scrim behind quick settings + * for text. + */ + private boolean mUseWallpaperTextColor; + + /** + * Color to be set on this {@link TextView}, when wallpaperTextColor is <b>not</b> utilized. + */ + private int mNonAdaptedTextColor; + private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { @@ -62,6 +74,7 @@ public class DateView extends TextView { public DateView(Context context, AttributeSet attrs) { super(context, attrs); + mNonAdaptedTextColor = getCurrentTextColor(); TypedArray a = context.getTheme().obtainStyledAttributes( attrs, R.styleable.DateView, @@ -117,6 +130,25 @@ public class DateView extends TextView { } } + /** + * Sets whether the date view uses the wallpaperTextColor. If we're not using it, we'll revert + * back to dark-mode-based/tinted colors. + * + * @param shouldUseWallpaperTextColor whether we should use wallpaperTextColor for text color + */ + public void useWallpaperTextColor(boolean shouldUseWallpaperTextColor) { + if (shouldUseWallpaperTextColor == mUseWallpaperTextColor) { + return; + } + mUseWallpaperTextColor = shouldUseWallpaperTextColor; + + if (mUseWallpaperTextColor) { + setTextColor(Utils.getColorAttr(mContext, R.attr.wallpaperTextColor)); + } else { + setTextColor(mNonAdaptedTextColor); + } + } + public void setDatePattern(String pattern) { if (TextUtils.equals(pattern, mDatePattern)) { return; |