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.