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
This commit is contained in:
@@ -34,34 +34,5 @@
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
/>
|
||||
|
||||
<com.android.systemui.dreams.DreamOverlayStatusBarView
|
||||
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>
|
||||
<include layout="@layout/dream_overlay_status_bar_view" />
|
||||
</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>
|
||||
|
||||
<attr name="overlayButtonTextColor" format="color" />
|
||||
|
||||
<declare-styleable name="DreamOverlayDotImageView">
|
||||
<attr name="dotColor" format="color" />
|
||||
</declare-styleable>
|
||||
</resources>
|
||||
|
||||
|
||||
@@ -225,4 +225,6 @@
|
||||
<color name="settingslib_track_off_color">@color/settingslib_track_off</color>
|
||||
<color name="connected_network_primary_color">#191C18</color>
|
||||
<color name="connected_network_secondary_color">#41493D</color>
|
||||
|
||||
<color name="dream_overlay_camera_mic_off_dot_color">#FCBE03</color>
|
||||
</resources>
|
||||
|
||||
@@ -1332,12 +1332,16 @@
|
||||
<dimen name="fgs_manager_min_width_minor">100%</dimen>
|
||||
|
||||
<!-- 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_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
|
||||
shade. -->
|
||||
<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 -->
|
||||
<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] -->
|
||||
<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>
|
||||
|
||||
@@ -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.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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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<DreamOve
|
||||
private static final int WIFI_STATUS_UNAVAILABLE = 1;
|
||||
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 boolean mShowPercentAvailable;
|
||||
|
||||
private final NetworkRequest mNetworkRequest = new NetworkRequest.Builder()
|
||||
.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 @BatteryStatus int mBatteryStatus = BATTERY_STATUS_UNKNOWN;
|
||||
|
||||
@Inject
|
||||
public DreamOverlayStatusBarViewController(
|
||||
Context context,
|
||||
DreamOverlayStatusBarView view,
|
||||
BatteryController batteryController,
|
||||
@Named(DreamOverlayModule.DREAM_OVERLAY_BATTERY_CONTROLLER)
|
||||
BatteryMeterViewController batteryMeterViewController,
|
||||
ConnectivityManager connectivityManager) {
|
||||
super(view);
|
||||
mBatteryController = batteryController;
|
||||
mBatteryMeterViewController = batteryMeterViewController;
|
||||
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
|
||||
protected void onViewAttached() {
|
||||
mBatteryController.addCallback(mBatteryStateChangeCallback);
|
||||
mConnectivityManager.registerNetworkCallback(mNetworkRequest, mNetworkCallback);
|
||||
|
||||
NetworkCapabilities capabilities =
|
||||
@@ -140,7 +96,6 @@ public class DreamOverlayStatusBarViewController extends ViewController<DreamOve
|
||||
|
||||
@Override
|
||||
protected void onViewDetached() {
|
||||
mBatteryController.removeCallback(mBatteryStateChangeCallback);
|
||||
mConnectivityManager.unregisterNetworkCallback(mNetworkCallback);
|
||||
}
|
||||
|
||||
@@ -155,18 +110,4 @@ public class DreamOverlayStatusBarViewController extends ViewController<DreamOve
|
||||
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;
|
||||
|
||||
import android.content.ContentResolver;
|
||||
import android.content.res.Resources;
|
||||
import android.os.Handler;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
@@ -28,15 +26,9 @@ import androidx.lifecycle.LifecycleRegistry;
|
||||
|
||||
import com.android.internal.util.Preconditions;
|
||||
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.dreams.DreamOverlayContainerView;
|
||||
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;
|
||||
|
||||
@@ -47,9 +39,6 @@ import dagger.Provides;
|
||||
/** Dagger module for {@link DreamOverlayComponent}. */
|
||||
@Module
|
||||
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 MAX_BURN_IN_OFFSET = "max_burn_in_offset";
|
||||
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");
|
||||
}
|
||||
|
||||
/** */
|
||||
@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
|
||||
@DreamOverlayComponent.DreamOverlayScope
|
||||
|
||||
@@ -29,8 +29,6 @@ import android.testing.AndroidTestingRunner;
|
||||
import androidx.test.filters.SmallTest;
|
||||
|
||||
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.Test;
|
||||
@@ -46,10 +44,6 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase {
|
||||
@Mock
|
||||
DreamOverlayStatusBarView mView;
|
||||
@Mock
|
||||
BatteryController mBatteryController;
|
||||
@Mock
|
||||
BatteryMeterViewController mBatteryMeterViewController;
|
||||
@Mock
|
||||
ConnectivityManager mConnectivityManager;
|
||||
@Mock
|
||||
NetworkCapabilities mNetworkCapabilities;
|
||||
@@ -61,22 +55,7 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase {
|
||||
@Before
|
||||
public void setup() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
mController = new DreamOverlayStatusBarViewController(
|
||||
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));
|
||||
mController = new DreamOverlayStatusBarViewController(mView, mConnectivityManager);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -112,13 +91,6 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase {
|
||||
verify(mView).showWifiStatus(true);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOnViewDetachedRemovesBatteryControllerCallback() {
|
||||
mController.onViewDetached();
|
||||
verify(mBatteryController)
|
||||
.removeCallback(any(BatteryController.BatteryStateChangeCallback.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOnViewDetachedUnregistersNetworkCallback() {
|
||||
mController.onViewDetached();
|
||||
@@ -126,26 +98,6 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase {
|
||||
.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
|
||||
public void testWifiStatusHiddenWhenWifiBecomesAvailable() {
|
||||
// Make sure wifi starts out unavailable when onViewAttached is called.
|
||||
|
||||
Reference in New Issue
Block a user