From 199ec5d10148f804db41c182e3d515636657bc68 Mon Sep 17 00:00:00 2001 From: Will Date: Wed, 16 Feb 2022 09:22:44 -0800 Subject: [PATCH] Final icons in dream overlay status bar. This change adds the rest of the conditional icons to the dream overlay status bar. All icons are currently hidden. A follow-up changes will implement the logic to show them. Also, the battery icon has been removed. Test: atest DreamOverlayStatusBarViewControllerTest Bug: 216831310 Change-Id: I2ba271102a3fc0c56d4214165d980b7f2c8ee055 --- .../res/layout/dream_overlay_container.xml | 31 +---- .../layout/dream_overlay_status_bar_view.xml | 96 +++++++++++++ packages/SystemUI/res/values/attrs.xml | 4 + packages/SystemUI/res/values/colors.xml | 2 + packages/SystemUI/res/values/dimens.xml | 6 +- packages/SystemUI/res/values/strings.xml | 13 ++ .../dreams/DreamOverlayDotImageView.java | 128 ++++++++++++++++++ .../dreams/DreamOverlayStatusBarView.java | 20 +-- .../DreamOverlayStatusBarViewController.java | 59 -------- .../dreams/dagger/DreamOverlayModule.java | 42 ------ ...eamOverlayStatusBarViewControllerTest.java | 50 +------ 11 files changed, 252 insertions(+), 199 deletions(-) create mode 100644 packages/SystemUI/res/layout/dream_overlay_status_bar_view.xml create mode 100644 packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayDotImageView.java diff --git a/packages/SystemUI/res/layout/dream_overlay_container.xml b/packages/SystemUI/res/layout/dream_overlay_container.xml index 330f515a29fca..8e83b4abe0dcc 100644 --- a/packages/SystemUI/res/layout/dream_overlay_container.xml +++ b/packages/SystemUI/res/layout/dream_overlay_container.xml @@ -34,34 +34,5 @@ app:layout_constraintBottom_toBottomOf="parent" /> - - - - - - - - - - + \ No newline at end of file diff --git a/packages/SystemUI/res/layout/dream_overlay_status_bar_view.xml b/packages/SystemUI/res/layout/dream_overlay_status_bar_view.xml new file mode 100644 index 0000000000000..813787e8f9d02 --- /dev/null +++ b/packages/SystemUI/res/layout/dream_overlay_status_bar_view.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/packages/SystemUI/res/values/attrs.xml b/packages/SystemUI/res/values/attrs.xml index 2992859b1ce72..c5e005c556b2b 100644 --- a/packages/SystemUI/res/values/attrs.xml +++ b/packages/SystemUI/res/values/attrs.xml @@ -199,5 +199,9 @@ + + + + diff --git a/packages/SystemUI/res/values/colors.xml b/packages/SystemUI/res/values/colors.xml index f4e7cf3fcf40d..dc7470081da2e 100644 --- a/packages/SystemUI/res/values/colors.xml +++ b/packages/SystemUI/res/values/colors.xml @@ -225,4 +225,6 @@ @color/settingslib_track_off #191C18 #41493D + + #FCBE03 diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml index 3704134007663..fcf60bf43c621 100644 --- a/packages/SystemUI/res/values/dimens.xml +++ b/packages/SystemUI/res/values/dimens.xml @@ -1332,12 +1332,16 @@ 100% - 80dp + 60dp 40dp 8dp + + @*android:dimen/status_bar_system_icon_size 100dp + 8dp + 6dp 72sp diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml index 23b2529060565..df16b0d45228d 100644 --- a/packages/SystemUI/res/values/strings.xml +++ b/packages/SystemUI/res/values/strings.xml @@ -2410,4 +2410,17 @@ This notification does not support dragging to Splitscreen. + + + Wi\u2011Fi unavailable + + Priority mode + + Alarm set + + Assistant guest mode enabled + + Camera and mic are off + + There are notifications diff --git a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayDotImageView.java b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayDotImageView.java new file mode 100644 index 0000000000000..02a8b39a106a3 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayDotImageView.java @@ -0,0 +1,128 @@ +/* + * Copyright (C) 2022 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. + */ + +package com.android.systemui.dreams; + +import android.annotation.ColorInt; +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.ColorFilter; +import android.graphics.Paint; +import android.graphics.Rect; +import android.graphics.drawable.Drawable; +import android.util.AttributeSet; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.android.systemui.R; +import com.android.systemui.statusbar.AlphaOptimizedImageView; + +/** + * An {@link AlphaOptimizedImageView} that is responsible for rendering a dot. Used by + * {@link DreamOverlayStatusBarView}. + */ +public class DreamOverlayDotImageView extends AlphaOptimizedImageView { + private final @ColorInt int mDotColor; + + public DreamOverlayDotImageView(Context context) { + this(context, null); + } + + public DreamOverlayDotImageView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public DreamOverlayDotImageView(Context context, AttributeSet attrs, int defStyleAttr) { + this(context, attrs, defStyleAttr, 0); + } + + public DreamOverlayDotImageView(Context context, AttributeSet attrs, int defStyleAttr, + int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + TypedArray a = context.getTheme().obtainStyledAttributes(attrs, + R.styleable.DreamOverlayDotImageView, 0, 0); + + try { + mDotColor = a.getColor(R.styleable.DreamOverlayDotImageView_dotColor, Color.WHITE); + } finally { + a.recycle(); + } + } + + @Override + protected void onFinishInflate() { + super.onFinishInflate(); + setImageDrawable(new DotDrawable(mDotColor)); + } + + private static class DotDrawable extends Drawable { + private final Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + private Bitmap mDotBitmap; + private final Rect mBounds = new Rect(); + private final @ColorInt int mDotColor; + + DotDrawable(@ColorInt int color) { + mDotColor = color; + } + + @Override + public void draw(@NonNull Canvas canvas) { + if (mBounds.isEmpty()) { + return; + } + + if (mDotBitmap == null) { + mDotBitmap = createBitmap(mBounds.width(), mBounds.height()); + } + + canvas.drawBitmap(mDotBitmap, null, mBounds, mPaint); + } + + @Override + protected void onBoundsChange(Rect bounds) { + super.onBoundsChange(bounds); + mBounds.set(bounds.left, bounds.top, bounds.right, bounds.bottom); + // Make sure to regenerate the dot bitmap when the bounds change. + mDotBitmap = null; + } + + @Override + public void setAlpha(int alpha) { + } + + @Override + public void setColorFilter(@Nullable ColorFilter colorFilter) { + } + + @Override + public int getOpacity() { + return 0; + } + + private Bitmap createBitmap(int width, int height) { + Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); + Canvas canvas = new Canvas(bitmap); + Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); + paint.setColor(mDotColor); + canvas.drawCircle(width / 2.f, height / 2.f, Math.min(width, height) / 2.f, paint); + return bitmap; + } + } +} diff --git a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayStatusBarView.java b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayStatusBarView.java index 9847ef633bc17..2d969206b4685 100644 --- a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayStatusBarView.java +++ b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayStatusBarView.java @@ -25,17 +25,13 @@ import androidx.constraintlayout.widget.ConstraintLayout; import com.android.internal.util.Preconditions; import com.android.systemui.R; -import com.android.systemui.battery.BatteryMeterView; -import com.android.systemui.statusbar.policy.BatteryController.BatteryStateChangeCallback; /** * {@link DreamOverlayStatusBarView} is the view responsible for displaying the status bar in a - * dream. The status bar includes status icons such as battery and wifi. + * dream. The status bar displays conditional status icons such as "priority mode" and "no wifi". */ -public class DreamOverlayStatusBarView extends ConstraintLayout implements - BatteryStateChangeCallback { +public class DreamOverlayStatusBarView extends ConstraintLayout { - private BatteryMeterView mBatteryView; private ImageView mWifiStatusView; public DreamOverlayStatusBarView(Context context) { @@ -59,20 +55,8 @@ public class DreamOverlayStatusBarView extends ConstraintLayout implements protected void onFinishInflate() { super.onFinishInflate(); - mBatteryView = Preconditions.checkNotNull(findViewById(R.id.dream_overlay_battery), - "R.id.dream_overlay_battery must not be null"); mWifiStatusView = Preconditions.checkNotNull(findViewById(R.id.dream_overlay_wifi_status), "R.id.dream_overlay_wifi_status must not be null"); - - mWifiStatusView.setImageDrawable(getContext().getDrawable(R.drawable.ic_signal_wifi_off)); - } - - /** - * Whether to show the battery percent text next to the battery status icons. - * @param show True if the battery percent text should be shown. - */ - void showBatteryPercentText(boolean show) { - mBatteryView.setForceShowPercent(show); } /** diff --git a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayStatusBarViewController.java b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayStatusBarViewController.java index 5674b9f3f9fd6..ed82ab0e308f1 100644 --- a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayStatusBarViewController.java +++ b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayStatusBarViewController.java @@ -17,24 +17,19 @@ package com.android.systemui.dreams; import android.annotation.IntDef; -import android.content.Context; import android.net.ConnectivityManager; import android.net.ConnectivityManager.NetworkCallback; import android.net.Network; import android.net.NetworkCapabilities; import android.net.NetworkRequest; -import com.android.systemui.battery.BatteryMeterViewController; import com.android.systemui.dreams.dagger.DreamOverlayComponent; -import com.android.systemui.dreams.dagger.DreamOverlayModule; -import com.android.systemui.statusbar.policy.BatteryController; import com.android.systemui.util.ViewController; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import javax.inject.Inject; -import javax.inject.Named; /** * View controller for {@link DreamOverlayStatusBarView}. @@ -52,21 +47,7 @@ public class DreamOverlayStatusBarViewController extends ViewController callbackCapture = - ArgumentCaptor.forClass(BatteryController.BatteryStateChangeCallback.class); - mController.onViewAttached(); - verify(mBatteryController).addCallback(callbackCapture.capture()); - callbackCapture.getValue().onBatteryLevelChanged(1, true, true); - verify(mView).showBatteryPercentText(true); - } - - @Test - public void testBatteryPercentTextHiddenWhenBatteryLevelChangesWhileNotCharging() { - final ArgumentCaptor callbackCapture = - ArgumentCaptor.forClass(BatteryController.BatteryStateChangeCallback.class); - mController.onViewAttached(); - verify(mBatteryController).addCallback(callbackCapture.capture()); - callbackCapture.getValue().onBatteryLevelChanged(1, true, false); - verify(mView).showBatteryPercentText(false); - } - @Test public void testWifiStatusHiddenWhenWifiBecomesAvailable() { // Make sure wifi starts out unavailable when onViewAttached is called.