Merge "Final icons in dream overlay status bar." into tm-dev am: 2e60d41375
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/16943443 Change-Id: I979e45213f4ab2383d4b66207e412d7368ed84b1
This commit is contained in:
@@ -34,34 +34,5 @@
|
|||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<com.android.systemui.dreams.DreamOverlayStatusBarView
|
<include layout="@layout/dream_overlay_status_bar_view" />
|
||||||
android:id="@+id/dream_overlay_status_bar"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="@dimen/dream_overlay_status_bar_height"
|
|
||||||
android:paddingEnd="@dimen/dream_overlay_status_bar_margin"
|
|
||||||
android:paddingStart="@dimen/dream_overlay_status_bar_margin"
|
|
||||||
app:layout_constraintTop_toTopOf="parent">
|
|
||||||
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
|
||||||
android:id="@+id/dream_overlay_system_status"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent">
|
|
||||||
|
|
||||||
<com.android.systemui.statusbar.AlphaOptimizedImageView
|
|
||||||
android:id="@+id/dream_overlay_wifi_status"
|
|
||||||
android:layout_width="@dimen/status_bar_wifi_signal_size"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:layout_marginEnd="@dimen/dream_overlay_status_icon_margin"
|
|
||||||
android:visibility="gone"
|
|
||||||
app:layout_constraintEnd_toStartOf="@id/dream_overlay_battery" />
|
|
||||||
|
|
||||||
<com.android.systemui.battery.BatteryMeterView
|
|
||||||
android:id="@+id/dream_overlay_battery"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent" />
|
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
||||||
</com.android.systemui.dreams.DreamOverlayStatusBarView>
|
|
||||||
</com.android.systemui.dreams.DreamOverlayContainerView>
|
</com.android.systemui.dreams.DreamOverlayContainerView>
|
||||||
@@ -0,0 +1,96 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
~ 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.
|
||||||
|
-->
|
||||||
|
<com.android.systemui.dreams.DreamOverlayStatusBarView
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:id="@+id/dream_overlay_status_bar"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="@dimen/dream_overlay_status_bar_height"
|
||||||
|
android:paddingEnd="@dimen/dream_overlay_status_bar_margin"
|
||||||
|
android:paddingStart="@dimen/dream_overlay_status_bar_margin"
|
||||||
|
app:layout_constraintTop_toTopOf="parent">
|
||||||
|
|
||||||
|
<com.android.systemui.dreams.DreamOverlayDotImageView
|
||||||
|
android:id="@+id/dream_overlay_notification_indicator"
|
||||||
|
android:layout_width="@dimen/dream_overlay_notification_indicator_size"
|
||||||
|
android:layout_height="@dimen/dream_overlay_notification_indicator_size"
|
||||||
|
android:visibility="gone"
|
||||||
|
android:contentDescription="@string/dream_overlay_status_bar_notification_indicator"
|
||||||
|
app:dotColor="@android:color/white"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/dream_overlay_system_status"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent">
|
||||||
|
|
||||||
|
<com.android.systemui.statusbar.AlphaOptimizedImageView
|
||||||
|
android:id="@+id/dream_overlay_assistant_guest_mode_enabled"
|
||||||
|
android:layout_width="@dimen/dream_overlay_status_bar_icon_size"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_marginEnd="@dimen/dream_overlay_status_icon_margin"
|
||||||
|
android:src="@drawable/ic_account_circle"
|
||||||
|
android:tint="@android:color/white"
|
||||||
|
android:visibility="gone"
|
||||||
|
android:contentDescription=
|
||||||
|
"@string/dream_overlay_status_bar_assistant_guest_mode_enabled" />
|
||||||
|
|
||||||
|
<com.android.systemui.statusbar.AlphaOptimizedImageView
|
||||||
|
android:id="@+id/dream_overlay_alarm_set"
|
||||||
|
android:layout_width="@dimen/dream_overlay_status_bar_icon_size"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_marginEnd="@dimen/dream_overlay_status_icon_margin"
|
||||||
|
android:src="@drawable/ic_alarm"
|
||||||
|
android:tint="@android:color/white"
|
||||||
|
android:visibility="gone"
|
||||||
|
android:contentDescription="@string/dream_overlay_status_bar_alarm_set" />
|
||||||
|
|
||||||
|
<com.android.systemui.statusbar.AlphaOptimizedImageView
|
||||||
|
android:id="@+id/dream_overlay_priority_mode"
|
||||||
|
android:layout_width="@dimen/dream_overlay_status_bar_icon_size"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_marginEnd="@dimen/dream_overlay_status_icon_margin"
|
||||||
|
android:src="@drawable/ic_remove_circle"
|
||||||
|
android:tint="@android:color/white"
|
||||||
|
android:visibility="gone"
|
||||||
|
android:contentDescription="@string/dream_overlay_status_bar_priority_mode" />
|
||||||
|
|
||||||
|
<com.android.systemui.statusbar.AlphaOptimizedImageView
|
||||||
|
android:id="@+id/dream_overlay_wifi_status"
|
||||||
|
android:layout_width="@dimen/dream_overlay_status_bar_icon_size"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_marginEnd="@dimen/dream_overlay_status_icon_margin"
|
||||||
|
android:src="@drawable/ic_signal_wifi_off"
|
||||||
|
android:visibility="gone"
|
||||||
|
android:contentDescription="@string/dream_overlay_status_bar_wifi_off" />
|
||||||
|
|
||||||
|
<com.android.systemui.dreams.DreamOverlayDotImageView
|
||||||
|
android:id="@+id/dream_overlay_camera_mic_off"
|
||||||
|
android:layout_width="@dimen/dream_overlay_camera_mic_off_indicator_size"
|
||||||
|
android:layout_height="@dimen/dream_overlay_camera_mic_off_indicator_size"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_marginEnd="@dimen/dream_overlay_status_icon_margin"
|
||||||
|
android:visibility="gone"
|
||||||
|
android:contentDescription="@string/dream_overlay_status_bar_camera_mic_off"
|
||||||
|
app:dotColor="@color/dream_overlay_camera_mic_off_dot_color" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
</com.android.systemui.dreams.DreamOverlayStatusBarView>
|
||||||
@@ -199,5 +199,9 @@
|
|||||||
</declare-styleable>
|
</declare-styleable>
|
||||||
|
|
||||||
<attr name="overlayButtonTextColor" format="color" />
|
<attr name="overlayButtonTextColor" format="color" />
|
||||||
|
|
||||||
|
<declare-styleable name="DreamOverlayDotImageView">
|
||||||
|
<attr name="dotColor" format="color" />
|
||||||
|
</declare-styleable>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
||||||
|
|||||||
@@ -225,4 +225,6 @@
|
|||||||
<color name="settingslib_track_off_color">@color/settingslib_track_off</color>
|
<color name="settingslib_track_off_color">@color/settingslib_track_off</color>
|
||||||
<color name="connected_network_primary_color">#191C18</color>
|
<color name="connected_network_primary_color">#191C18</color>
|
||||||
<color name="connected_network_secondary_color">#41493D</color>
|
<color name="connected_network_secondary_color">#41493D</color>
|
||||||
|
|
||||||
|
<color name="dream_overlay_camera_mic_off_dot_color">#FCBE03</color>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -1332,12 +1332,16 @@
|
|||||||
<dimen name="fgs_manager_min_width_minor">100%</dimen>
|
<dimen name="fgs_manager_min_width_minor">100%</dimen>
|
||||||
|
|
||||||
<!-- Dream overlay related dimensions -->
|
<!-- Dream overlay related dimensions -->
|
||||||
<dimen name="dream_overlay_status_bar_height">80dp</dimen>
|
<dimen name="dream_overlay_status_bar_height">60dp</dimen>
|
||||||
<dimen name="dream_overlay_status_bar_margin">40dp</dimen>
|
<dimen name="dream_overlay_status_bar_margin">40dp</dimen>
|
||||||
<dimen name="dream_overlay_status_icon_margin">8dp</dimen>
|
<dimen name="dream_overlay_status_icon_margin">8dp</dimen>
|
||||||
|
<dimen name="dream_overlay_status_bar_icon_size">
|
||||||
|
@*android:dimen/status_bar_system_icon_size</dimen>
|
||||||
<!-- Height of the area at the top of the dream overlay to allow dragging down the notifications
|
<!-- Height of the area at the top of the dream overlay to allow dragging down the notifications
|
||||||
shade. -->
|
shade. -->
|
||||||
<dimen name="dream_overlay_notifications_drag_area_height">100dp</dimen>
|
<dimen name="dream_overlay_notifications_drag_area_height">100dp</dimen>
|
||||||
|
<dimen name="dream_overlay_camera_mic_off_indicator_size">8dp</dimen>
|
||||||
|
<dimen name="dream_overlay_notification_indicator_size">6dp</dimen>
|
||||||
|
|
||||||
<!-- Dream overlay complications related dimensions -->
|
<!-- Dream overlay complications related dimensions -->
|
||||||
<dimen name="dream_overlay_complication_clock_time_text_size">72sp</dimen>
|
<dimen name="dream_overlay_complication_clock_time_text_size">72sp</dimen>
|
||||||
|
|||||||
@@ -2410,4 +2410,17 @@
|
|||||||
|
|
||||||
<!-- Toast shown when a notification does not support dragging to split [CHAR LIMIT=NONE] -->
|
<!-- Toast shown when a notification does not support dragging to split [CHAR LIMIT=NONE] -->
|
||||||
<string name="drag_split_not_supported">This notification does not support dragging to Splitscreen.</string>
|
<string name="drag_split_not_supported">This notification does not support dragging to Splitscreen.</string>
|
||||||
|
|
||||||
|
<!-- Content description for the Wi-Fi off icon in the dream overlay status bar [CHAR LIMIT=NONE] -->
|
||||||
|
<string name="dream_overlay_status_bar_wifi_off">Wi\u2011Fi unavailable</string>
|
||||||
|
<!-- Content description for the priority mode icon in the dream overlay status bar [CHAR LIMIT=NONE] -->
|
||||||
|
<string name="dream_overlay_status_bar_priority_mode">Priority mode</string>
|
||||||
|
<!-- Content description for the alarm set icon in the dream overlay status bar [CHAR LIMIT=NONE] -->
|
||||||
|
<string name="dream_overlay_status_bar_alarm_set">Alarm set</string>
|
||||||
|
<!-- Content description for the assistant guest mode enabled icon in the dream overlay status bar [CHAR LIMIT=NONE] -->
|
||||||
|
<string name="dream_overlay_status_bar_assistant_guest_mode_enabled">Assistant guest mode enabled</string>
|
||||||
|
<!-- Content description for the camera and mic off icon in the dream overlay status bar [CHAR LIMIT=NONE] -->
|
||||||
|
<string name="dream_overlay_status_bar_camera_mic_off">Camera and mic are off</string>
|
||||||
|
<!-- Content description for the camera and mic off icon in the dream overlay status bar [CHAR LIMIT=NONE] -->
|
||||||
|
<string name="dream_overlay_status_bar_notification_indicator">There are notifications</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -25,17 +25,13 @@ import androidx.constraintlayout.widget.ConstraintLayout;
|
|||||||
|
|
||||||
import com.android.internal.util.Preconditions;
|
import com.android.internal.util.Preconditions;
|
||||||
import com.android.systemui.R;
|
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
|
* {@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
|
public class DreamOverlayStatusBarView extends ConstraintLayout {
|
||||||
BatteryStateChangeCallback {
|
|
||||||
|
|
||||||
private BatteryMeterView mBatteryView;
|
|
||||||
private ImageView mWifiStatusView;
|
private ImageView mWifiStatusView;
|
||||||
|
|
||||||
public DreamOverlayStatusBarView(Context context) {
|
public DreamOverlayStatusBarView(Context context) {
|
||||||
@@ -59,20 +55,8 @@ public class DreamOverlayStatusBarView extends ConstraintLayout implements
|
|||||||
protected void onFinishInflate() {
|
protected void onFinishInflate() {
|
||||||
super.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),
|
mWifiStatusView = Preconditions.checkNotNull(findViewById(R.id.dream_overlay_wifi_status),
|
||||||
"R.id.dream_overlay_wifi_status must not be null");
|
"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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -17,24 +17,19 @@
|
|||||||
package com.android.systemui.dreams;
|
package com.android.systemui.dreams;
|
||||||
|
|
||||||
import android.annotation.IntDef;
|
import android.annotation.IntDef;
|
||||||
import android.content.Context;
|
|
||||||
import android.net.ConnectivityManager;
|
import android.net.ConnectivityManager;
|
||||||
import android.net.ConnectivityManager.NetworkCallback;
|
import android.net.ConnectivityManager.NetworkCallback;
|
||||||
import android.net.Network;
|
import android.net.Network;
|
||||||
import android.net.NetworkCapabilities;
|
import android.net.NetworkCapabilities;
|
||||||
import android.net.NetworkRequest;
|
import android.net.NetworkRequest;
|
||||||
|
|
||||||
import com.android.systemui.battery.BatteryMeterViewController;
|
|
||||||
import com.android.systemui.dreams.dagger.DreamOverlayComponent;
|
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 com.android.systemui.util.ViewController;
|
||||||
|
|
||||||
import java.lang.annotation.Retention;
|
import java.lang.annotation.Retention;
|
||||||
import java.lang.annotation.RetentionPolicy;
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.inject.Named;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* View controller for {@link DreamOverlayStatusBarView}.
|
* View controller for {@link DreamOverlayStatusBarView}.
|
||||||
@@ -52,21 +47,7 @@ public class DreamOverlayStatusBarViewController extends ViewController<DreamOve
|
|||||||
private static final int WIFI_STATUS_UNAVAILABLE = 1;
|
private static final int WIFI_STATUS_UNAVAILABLE = 1;
|
||||||
private static final int WIFI_STATUS_AVAILABLE = 2;
|
private static final int WIFI_STATUS_AVAILABLE = 2;
|
||||||
|
|
||||||
@Retention(RetentionPolicy.SOURCE)
|
|
||||||
@IntDef(prefix = { "BATTERY_STATUS_" }, value = {
|
|
||||||
BATTERY_STATUS_UNKNOWN,
|
|
||||||
BATTERY_STATUS_NOT_CHARGING,
|
|
||||||
BATTERY_STATUS_CHARGING
|
|
||||||
})
|
|
||||||
private @interface BatteryStatus {}
|
|
||||||
private static final int BATTERY_STATUS_UNKNOWN = 0;
|
|
||||||
private static final int BATTERY_STATUS_NOT_CHARGING = 1;
|
|
||||||
private static final int BATTERY_STATUS_CHARGING = 2;
|
|
||||||
|
|
||||||
private final BatteryController mBatteryController;
|
|
||||||
private final BatteryMeterViewController mBatteryMeterViewController;
|
|
||||||
private final ConnectivityManager mConnectivityManager;
|
private final ConnectivityManager mConnectivityManager;
|
||||||
private final boolean mShowPercentAvailable;
|
|
||||||
|
|
||||||
private final NetworkRequest mNetworkRequest = new NetworkRequest.Builder()
|
private final NetworkRequest mNetworkRequest = new NetworkRequest.Builder()
|
||||||
.clearCapabilities()
|
.clearCapabilities()
|
||||||
@@ -91,43 +72,18 @@ public class DreamOverlayStatusBarViewController extends ViewController<DreamOve
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
private final BatteryController.BatteryStateChangeCallback mBatteryStateChangeCallback =
|
|
||||||
new BatteryController.BatteryStateChangeCallback() {
|
|
||||||
@Override
|
|
||||||
public void onBatteryLevelChanged(int level, boolean pluggedIn, boolean charging) {
|
|
||||||
DreamOverlayStatusBarViewController.this.onBatteryLevelChanged(charging);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private @WifiStatus int mWifiStatus = WIFI_STATUS_UNKNOWN;
|
private @WifiStatus int mWifiStatus = WIFI_STATUS_UNKNOWN;
|
||||||
private @BatteryStatus int mBatteryStatus = BATTERY_STATUS_UNKNOWN;
|
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public DreamOverlayStatusBarViewController(
|
public DreamOverlayStatusBarViewController(
|
||||||
Context context,
|
|
||||||
DreamOverlayStatusBarView view,
|
DreamOverlayStatusBarView view,
|
||||||
BatteryController batteryController,
|
|
||||||
@Named(DreamOverlayModule.DREAM_OVERLAY_BATTERY_CONTROLLER)
|
|
||||||
BatteryMeterViewController batteryMeterViewController,
|
|
||||||
ConnectivityManager connectivityManager) {
|
ConnectivityManager connectivityManager) {
|
||||||
super(view);
|
super(view);
|
||||||
mBatteryController = batteryController;
|
|
||||||
mBatteryMeterViewController = batteryMeterViewController;
|
|
||||||
mConnectivityManager = connectivityManager;
|
mConnectivityManager = connectivityManager;
|
||||||
|
|
||||||
mShowPercentAvailable = context.getResources().getBoolean(
|
|
||||||
com.android.internal.R.bool.config_battery_percentage_setting_available);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onInit() {
|
|
||||||
super.onInit();
|
|
||||||
mBatteryMeterViewController.init();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onViewAttached() {
|
protected void onViewAttached() {
|
||||||
mBatteryController.addCallback(mBatteryStateChangeCallback);
|
|
||||||
mConnectivityManager.registerNetworkCallback(mNetworkRequest, mNetworkCallback);
|
mConnectivityManager.registerNetworkCallback(mNetworkRequest, mNetworkCallback);
|
||||||
|
|
||||||
NetworkCapabilities capabilities =
|
NetworkCapabilities capabilities =
|
||||||
@@ -140,7 +96,6 @@ public class DreamOverlayStatusBarViewController extends ViewController<DreamOve
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onViewDetached() {
|
protected void onViewDetached() {
|
||||||
mBatteryController.removeCallback(mBatteryStateChangeCallback);
|
|
||||||
mConnectivityManager.unregisterNetworkCallback(mNetworkCallback);
|
mConnectivityManager.unregisterNetworkCallback(mNetworkCallback);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -155,18 +110,4 @@ public class DreamOverlayStatusBarViewController extends ViewController<DreamOve
|
|||||||
mView.showWifiStatus(mWifiStatus == WIFI_STATUS_UNAVAILABLE);
|
mView.showWifiStatus(mWifiStatus == WIFI_STATUS_UNAVAILABLE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* The battery level has changed. Update the battery status icon as appropriate.
|
|
||||||
* @param charging Whether the battery is currently charging.
|
|
||||||
*/
|
|
||||||
private void onBatteryLevelChanged(boolean charging) {
|
|
||||||
final int newBatteryStatus =
|
|
||||||
charging ? BATTERY_STATUS_CHARGING : BATTERY_STATUS_NOT_CHARGING;
|
|
||||||
if (mBatteryStatus != newBatteryStatus) {
|
|
||||||
mBatteryStatus = newBatteryStatus;
|
|
||||||
mView.showBatteryPercentText(
|
|
||||||
mBatteryStatus == BATTERY_STATUS_CHARGING && mShowPercentAvailable);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,9 +16,7 @@
|
|||||||
|
|
||||||
package com.android.systemui.dreams.dagger;
|
package com.android.systemui.dreams.dagger;
|
||||||
|
|
||||||
import android.content.ContentResolver;
|
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
import android.os.Handler;
|
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
@@ -28,15 +26,9 @@ import androidx.lifecycle.LifecycleRegistry;
|
|||||||
|
|
||||||
import com.android.internal.util.Preconditions;
|
import com.android.internal.util.Preconditions;
|
||||||
import com.android.systemui.R;
|
import com.android.systemui.R;
|
||||||
import com.android.systemui.battery.BatteryMeterView;
|
|
||||||
import com.android.systemui.battery.BatteryMeterViewController;
|
|
||||||
import com.android.systemui.broadcast.BroadcastDispatcher;
|
|
||||||
import com.android.systemui.dagger.qualifiers.Main;
|
import com.android.systemui.dagger.qualifiers.Main;
|
||||||
import com.android.systemui.dreams.DreamOverlayContainerView;
|
import com.android.systemui.dreams.DreamOverlayContainerView;
|
||||||
import com.android.systemui.dreams.DreamOverlayStatusBarView;
|
import com.android.systemui.dreams.DreamOverlayStatusBarView;
|
||||||
import com.android.systemui.statusbar.policy.BatteryController;
|
|
||||||
import com.android.systemui.statusbar.policy.ConfigurationController;
|
|
||||||
import com.android.systemui.tuner.TunerService;
|
|
||||||
|
|
||||||
import javax.inject.Named;
|
import javax.inject.Named;
|
||||||
|
|
||||||
@@ -47,9 +39,6 @@ import dagger.Provides;
|
|||||||
/** Dagger module for {@link DreamOverlayComponent}. */
|
/** Dagger module for {@link DreamOverlayComponent}. */
|
||||||
@Module
|
@Module
|
||||||
public abstract class DreamOverlayModule {
|
public abstract class DreamOverlayModule {
|
||||||
private static final String DREAM_OVERLAY_BATTERY_VIEW = "dream_overlay_battery_view";
|
|
||||||
public static final String DREAM_OVERLAY_BATTERY_CONTROLLER =
|
|
||||||
"dream_overlay_battery_controller";
|
|
||||||
public static final String DREAM_OVERLAY_CONTENT_VIEW = "dream_overlay_content_view";
|
public static final String DREAM_OVERLAY_CONTENT_VIEW = "dream_overlay_content_view";
|
||||||
public static final String MAX_BURN_IN_OFFSET = "max_burn_in_offset";
|
public static final String MAX_BURN_IN_OFFSET = "max_burn_in_offset";
|
||||||
public static final String BURN_IN_PROTECTION_UPDATE_INTERVAL =
|
public static final String BURN_IN_PROTECTION_UPDATE_INTERVAL =
|
||||||
@@ -83,37 +72,6 @@ public abstract class DreamOverlayModule {
|
|||||||
"R.id.status_bar must not be null");
|
"R.id.status_bar must not be null");
|
||||||
}
|
}
|
||||||
|
|
||||||
/** */
|
|
||||||
@Provides
|
|
||||||
@DreamOverlayComponent.DreamOverlayScope
|
|
||||||
@Named(DREAM_OVERLAY_BATTERY_VIEW)
|
|
||||||
static BatteryMeterView providesBatteryMeterView(DreamOverlayContainerView view) {
|
|
||||||
return Preconditions.checkNotNull(view.findViewById(R.id.dream_overlay_battery),
|
|
||||||
"R.id.battery must not be null");
|
|
||||||
}
|
|
||||||
|
|
||||||
/** */
|
|
||||||
@Provides
|
|
||||||
@DreamOverlayComponent.DreamOverlayScope
|
|
||||||
@Named(DREAM_OVERLAY_BATTERY_CONTROLLER)
|
|
||||||
static BatteryMeterViewController providesBatteryMeterViewController(
|
|
||||||
@Named(DREAM_OVERLAY_BATTERY_VIEW) BatteryMeterView batteryMeterView,
|
|
||||||
ConfigurationController configurationController,
|
|
||||||
TunerService tunerService,
|
|
||||||
BroadcastDispatcher broadcastDispatcher,
|
|
||||||
@Main Handler mainHandler,
|
|
||||||
ContentResolver contentResolver,
|
|
||||||
BatteryController batteryController) {
|
|
||||||
return new BatteryMeterViewController(
|
|
||||||
batteryMeterView,
|
|
||||||
configurationController,
|
|
||||||
tunerService,
|
|
||||||
broadcastDispatcher,
|
|
||||||
mainHandler,
|
|
||||||
contentResolver,
|
|
||||||
batteryController);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** */
|
/** */
|
||||||
@Provides
|
@Provides
|
||||||
@DreamOverlayComponent.DreamOverlayScope
|
@DreamOverlayComponent.DreamOverlayScope
|
||||||
|
|||||||
@@ -29,8 +29,6 @@ import android.testing.AndroidTestingRunner;
|
|||||||
import androidx.test.filters.SmallTest;
|
import androidx.test.filters.SmallTest;
|
||||||
|
|
||||||
import com.android.systemui.SysuiTestCase;
|
import com.android.systemui.SysuiTestCase;
|
||||||
import com.android.systemui.battery.BatteryMeterViewController;
|
|
||||||
import com.android.systemui.statusbar.policy.BatteryController;
|
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
@@ -46,10 +44,6 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase {
|
|||||||
@Mock
|
@Mock
|
||||||
DreamOverlayStatusBarView mView;
|
DreamOverlayStatusBarView mView;
|
||||||
@Mock
|
@Mock
|
||||||
BatteryController mBatteryController;
|
|
||||||
@Mock
|
|
||||||
BatteryMeterViewController mBatteryMeterViewController;
|
|
||||||
@Mock
|
|
||||||
ConnectivityManager mConnectivityManager;
|
ConnectivityManager mConnectivityManager;
|
||||||
@Mock
|
@Mock
|
||||||
NetworkCapabilities mNetworkCapabilities;
|
NetworkCapabilities mNetworkCapabilities;
|
||||||
@@ -61,22 +55,7 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase {
|
|||||||
@Before
|
@Before
|
||||||
public void setup() {
|
public void setup() {
|
||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
mController = new DreamOverlayStatusBarViewController(
|
mController = new DreamOverlayStatusBarViewController(mView, mConnectivityManager);
|
||||||
mContext, mView, mBatteryController, mBatteryMeterViewController,
|
|
||||||
mConnectivityManager);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testOnInitInitializesControllers() {
|
|
||||||
mController.onInit();
|
|
||||||
verify(mBatteryMeterViewController).init();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testOnViewAttachedAddsBatteryControllerCallback() {
|
|
||||||
mController.onViewAttached();
|
|
||||||
verify(mBatteryController)
|
|
||||||
.addCallback(any(BatteryController.BatteryStateChangeCallback.class));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -112,13 +91,6 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase {
|
|||||||
verify(mView).showWifiStatus(true);
|
verify(mView).showWifiStatus(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testOnViewDetachedRemovesBatteryControllerCallback() {
|
|
||||||
mController.onViewDetached();
|
|
||||||
verify(mBatteryController)
|
|
||||||
.removeCallback(any(BatteryController.BatteryStateChangeCallback.class));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testOnViewDetachedUnregistersNetworkCallback() {
|
public void testOnViewDetachedUnregistersNetworkCallback() {
|
||||||
mController.onViewDetached();
|
mController.onViewDetached();
|
||||||
@@ -126,26 +98,6 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase {
|
|||||||
.unregisterNetworkCallback(any(ConnectivityManager.NetworkCallback.class));
|
.unregisterNetworkCallback(any(ConnectivityManager.NetworkCallback.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testBatteryPercentTextShownWhenBatteryLevelChangesWhileCharging() {
|
|
||||||
final ArgumentCaptor<BatteryController.BatteryStateChangeCallback> 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<BatteryController.BatteryStateChangeCallback> callbackCapture =
|
|
||||||
ArgumentCaptor.forClass(BatteryController.BatteryStateChangeCallback.class);
|
|
||||||
mController.onViewAttached();
|
|
||||||
verify(mBatteryController).addCallback(callbackCapture.capture());
|
|
||||||
callbackCapture.getValue().onBatteryLevelChanged(1, true, false);
|
|
||||||
verify(mView).showBatteryPercentText(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testWifiStatusHiddenWhenWifiBecomesAvailable() {
|
public void testWifiStatusHiddenWhenWifiBecomesAvailable() {
|
||||||
// Make sure wifi starts out unavailable when onViewAttached is called.
|
// Make sure wifi starts out unavailable when onViewAttached is called.
|
||||||
|
|||||||
Reference in New Issue
Block a user