Merge "Adding more icons to split shade header" into sc-v2-dev am: 390ae0ce43
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15243871 Change-Id: I897ef5bf6082407147f70954c352ca91450efa54
This commit is contained in:
@@ -21,7 +21,7 @@
|
||||
android:layout_height="@*android:dimen/quick_qs_offset_height"
|
||||
android:clipChildren="false"
|
||||
android:clipToPadding="false"
|
||||
android:minHeight="48dp"
|
||||
android:minHeight="@dimen/qs_header_row_min_height"
|
||||
android:clickable="false"
|
||||
android:focusable="true"
|
||||
android:theme="@style/Theme.SystemUI.QuickSettings.Header">
|
||||
@@ -31,7 +31,7 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:minWidth="48dp"
|
||||
android:minHeight="48dp"
|
||||
android:minHeight="@dimen/qs_header_row_min_height"
|
||||
android:gravity="center_vertical|start"
|
||||
android:paddingStart="@dimen/status_bar_left_clock_starting_padding"
|
||||
android:paddingEnd="@dimen/status_bar_left_clock_end_padding"
|
||||
@@ -43,7 +43,7 @@
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:minHeight="48dp"
|
||||
android:minHeight="@dimen/qs_header_row_min_height"
|
||||
android:minWidth="48dp"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_gravity="end|center_vertical"
|
||||
|
||||
89
packages/SystemUI/res/layout/split_shade_header.xml
Normal file
89
packages/SystemUI/res/layout/split_shade_header.xml
Normal file
@@ -0,0 +1,89 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (C) 2021 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.
|
||||
-->
|
||||
<LinearLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:systemui="http://schemas.android.com/apk/res-auto"
|
||||
android:id="@+id/split_shade_status_bar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/split_shade_header_height"
|
||||
android:minHeight="@dimen/split_shade_header_min_height"
|
||||
android:clickable="false"
|
||||
android:focusable="true"
|
||||
android:paddingLeft="@dimen/qs_panel_padding"
|
||||
android:paddingRight="@dimen/qs_panel_padding"
|
||||
android:visibility="gone"
|
||||
android:theme="@style/Theme.SystemUI.QuickSettings.Header">
|
||||
|
||||
<com.android.systemui.statusbar.policy.Clock
|
||||
android:id="@+id/clock"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:minWidth="48dp"
|
||||
android:minHeight="@dimen/split_shade_header_min_height"
|
||||
android:gravity="start|center_vertical"
|
||||
android:paddingStart="@dimen/status_bar_left_clock_starting_padding"
|
||||
android:paddingEnd="@dimen/status_bar_left_clock_end_padding"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="@style/TextAppearance.QS.Status" />
|
||||
|
||||
<com.android.systemui.statusbar.policy.DateView
|
||||
android:id="@+id/date"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="start|center_vertical"
|
||||
android:gravity="center_vertical"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="@style/TextAppearance.QS.Status"
|
||||
systemui:datePattern="@string/abbrev_wday_month_day_no_year_alarm" />
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/rightLayout"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:gravity="end">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="end|center_vertical">
|
||||
|
||||
<include
|
||||
android:id="@+id/carrier_group"
|
||||
layout="@layout/qs_carrier_group"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="end|center_vertical"
|
||||
android:layout_marginStart="8dp"
|
||||
android:focusable="false"
|
||||
android:minHeight="@dimen/split_shade_header_min_height"
|
||||
android:minWidth="48dp" />
|
||||
|
||||
<com.android.systemui.statusbar.phone.StatusIconContainer
|
||||
android:id="@+id/statusIcons"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:paddingEnd="@dimen/signal_cluster_battery_padding" />
|
||||
|
||||
<com.android.systemui.BatteryMeterView
|
||||
android:id="@+id/batteryRemainingIcon"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
systemui:textAppearance="@style/TextAppearance.QS.Status" />
|
||||
</LinearLayout>
|
||||
</FrameLayout>
|
||||
|
||||
</LinearLayout>
|
||||
@@ -67,7 +67,7 @@
|
||||
android:clipToPadding="false"
|
||||
android:clipChildren="false">
|
||||
|
||||
<include layout="@layout/quick_qs_status_icons"/>
|
||||
<include layout="@layout/split_shade_header"/>
|
||||
|
||||
<include
|
||||
layout="@layout/keyguard_status_view"
|
||||
|
||||
@@ -461,7 +461,8 @@
|
||||
<dimen name="match_parent">-1px</dimen>
|
||||
|
||||
<!-- Height of status bar in split shade mode - visible only on large screens -->
|
||||
<dimen name="split_shade_status_bar_height">@*android:dimen/quick_qs_offset_height</dimen>
|
||||
<dimen name="split_shade_header_height">@*android:dimen/quick_qs_offset_height</dimen>
|
||||
<dimen name="split_shade_header_min_height">@dimen/qs_header_row_min_height</dimen>
|
||||
|
||||
<!-- The top margin of the panel that holds the list of notifications. -->
|
||||
<dimen name="notification_panel_margin_top">0dp</dimen>
|
||||
@@ -631,6 +632,7 @@
|
||||
<dimen name="qs_footer_icon_size">20dp</dimen>
|
||||
<dimen name="qs_header_top_padding">15dp</dimen>
|
||||
<dimen name="qs_header_bottom_padding">14dp</dimen>
|
||||
<dimen name="qs_header_row_min_height">48dp</dimen>
|
||||
|
||||
<dimen name="qs_footer_padding">20dp</dimen>
|
||||
<dimen name="qs_security_footer_height">88dp</dimen>
|
||||
|
||||
@@ -192,6 +192,7 @@ public class BatteryMeterView extends LinearLayout implements
|
||||
* 0 - No preference
|
||||
* 1 - Force on
|
||||
* 2 - Force off
|
||||
* 3 - Estimate
|
||||
* @param mode desired mode (none, on, off)
|
||||
*/
|
||||
public void setPercentShowMode(@BatteryPercentMode int mode) {
|
||||
|
||||
@@ -334,7 +334,7 @@ public class NotificationPanelViewController extends PanelViewController {
|
||||
private final int mMaxKeyguardNotifications;
|
||||
private final LockscreenShadeTransitionController mLockscreenShadeTransitionController;
|
||||
private final TapAgainViewController mTapAgainViewController;
|
||||
private final SplitShadeStatusBarController mSplitShadeStatusBarController;
|
||||
private final SplitShadeHeaderController mSplitShadeHeaderController;
|
||||
private boolean mShouldUseSplitNotificationShade;
|
||||
// Current max allowed keyguard notifications determined by measuring the panel
|
||||
private int mMaxAllowedKeyguardNotifications;
|
||||
@@ -723,7 +723,7 @@ public class NotificationPanelViewController extends PanelViewController {
|
||||
QuickAccessWalletController quickAccessWalletController,
|
||||
@Main Executor uiExecutor,
|
||||
SecureSettings secureSettings,
|
||||
SplitShadeStatusBarController splitShadeStatusBarController,
|
||||
SplitShadeHeaderController splitShadeHeaderController,
|
||||
UnlockedScreenOffAnimationController unlockedScreenOffAnimationController,
|
||||
NotificationRemoteInputManager remoteInputManager) {
|
||||
super(view, falsingManager, dozeLog, keyguardStateController,
|
||||
@@ -757,7 +757,7 @@ public class NotificationPanelViewController extends PanelViewController {
|
||||
mShouldUseSplitNotificationShade =
|
||||
Utils.shouldUseSplitNotificationShade(mFeatureFlags, mResources);
|
||||
mView.setWillNotDraw(!DEBUG);
|
||||
mSplitShadeStatusBarController = splitShadeStatusBarController;
|
||||
mSplitShadeHeaderController = splitShadeHeaderController;
|
||||
mLayoutInflater = layoutInflater;
|
||||
mFalsingManager = falsingManager;
|
||||
mFalsingCollector = falsingCollector;
|
||||
@@ -1027,7 +1027,7 @@ public class NotificationPanelViewController extends PanelViewController {
|
||||
mQuickQsOffsetHeight = mResources.getDimensionPixelSize(
|
||||
com.android.internal.R.dimen.quick_qs_offset_height);
|
||||
mSplitShadeStatusBarHeight =
|
||||
mResources.getDimensionPixelSize(R.dimen.split_shade_status_bar_height);
|
||||
mResources.getDimensionPixelSize(R.dimen.split_shade_header_height);
|
||||
int qsWidth = mResources.getDimensionPixelSize(R.dimen.qs_panel_width);
|
||||
int panelWidth = mResources.getDimensionPixelSize(R.dimen.notification_panel_width);
|
||||
mShouldUseSplitNotificationShade =
|
||||
@@ -1039,7 +1039,7 @@ public class NotificationPanelViewController extends PanelViewController {
|
||||
|
||||
int topMargin = mShouldUseSplitNotificationShade ? mSplitShadeStatusBarHeight :
|
||||
mResources.getDimensionPixelSize(R.dimen.notification_panel_margin_top);
|
||||
mSplitShadeStatusBarController.setSplitShadeMode(mShouldUseSplitNotificationShade);
|
||||
mSplitShadeHeaderController.setSplitShadeMode(mShouldUseSplitNotificationShade);
|
||||
|
||||
// To change the constraints at runtime, all children of the ConstraintLayout must have ids
|
||||
ensureAllViewsHaveIds(mNotificationContainerParent);
|
||||
@@ -4468,7 +4468,7 @@ public class NotificationPanelViewController extends PanelViewController {
|
||||
maybeAnimateBottomAreaAlpha();
|
||||
resetHorizontalPanelPosition();
|
||||
updateQsState();
|
||||
mSplitShadeStatusBarController.setShadeExpanded(
|
||||
mSplitShadeHeaderController.setShadeExpanded(
|
||||
mBarState == SHADE || mBarState == SHADE_LOCKED);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,83 @@
|
||||
/*
|
||||
* Copyright (C) 2021 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.statusbar.phone
|
||||
|
||||
import android.view.View
|
||||
import com.android.systemui.BatteryMeterView
|
||||
import com.android.systemui.R
|
||||
import com.android.systemui.qs.carrier.QSCarrierGroupController
|
||||
import com.android.systemui.statusbar.FeatureFlags
|
||||
import com.android.systemui.statusbar.phone.dagger.StatusBarComponent.StatusBarScope
|
||||
import com.android.systemui.statusbar.phone.dagger.StatusBarViewModule.SPLIT_SHADE_HEADER
|
||||
import javax.inject.Inject
|
||||
import javax.inject.Named
|
||||
|
||||
@StatusBarScope
|
||||
class SplitShadeHeaderController @Inject constructor(
|
||||
@Named(SPLIT_SHADE_HEADER) private val statusBar: View,
|
||||
private val statusBarIconController: StatusBarIconController,
|
||||
qsCarrierGroupControllerBuilder: QSCarrierGroupController.Builder,
|
||||
featureFlags: FeatureFlags
|
||||
) {
|
||||
|
||||
private val iconManager: StatusBarIconController.IconManager
|
||||
private val qsCarrierGroupController: QSCarrierGroupController
|
||||
private var visible = false
|
||||
|
||||
var shadeExpanded = false
|
||||
set(value) {
|
||||
field = value
|
||||
updateVisibility()
|
||||
}
|
||||
|
||||
var splitShadeMode = false
|
||||
set(value) {
|
||||
field = value
|
||||
updateVisibility()
|
||||
}
|
||||
|
||||
init {
|
||||
val batteryIcon: BatteryMeterView = statusBar.findViewById(R.id.batteryRemainingIcon)
|
||||
// battery settings same as in QS icons
|
||||
batteryIcon.setIgnoreTunerUpdates(true)
|
||||
batteryIcon.setPercentShowMode(BatteryMeterView.MODE_ESTIMATE)
|
||||
|
||||
val iconContainer: StatusIconContainer = statusBar.findViewById(R.id.statusIcons)
|
||||
iconManager = StatusBarIconController.IconManager(iconContainer, featureFlags)
|
||||
qsCarrierGroupController = qsCarrierGroupControllerBuilder
|
||||
.setQSCarrierGroup(statusBar.findViewById(R.id.carrier_group))
|
||||
.build()
|
||||
}
|
||||
|
||||
private fun updateVisibility() {
|
||||
val shouldBeVisible = shadeExpanded && splitShadeMode
|
||||
if (visible != shouldBeVisible) {
|
||||
visible = shouldBeVisible
|
||||
statusBar.visibility = if (shouldBeVisible) View.VISIBLE else View.GONE
|
||||
updateListeners(shouldBeVisible)
|
||||
}
|
||||
}
|
||||
|
||||
private fun updateListeners(visible: Boolean) {
|
||||
qsCarrierGroupController.setListening(visible)
|
||||
if (visible) {
|
||||
statusBarIconController.addIconGroup(iconManager)
|
||||
} else {
|
||||
statusBarIconController.removeIconGroup(iconManager)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
package com.android.systemui.statusbar.phone
|
||||
|
||||
import android.view.View
|
||||
import com.android.systemui.statusbar.phone.dagger.StatusBarComponent.StatusBarScope
|
||||
import com.android.systemui.statusbar.phone.dagger.StatusBarViewModule.SPLIT_SHADE_STATUS_BAR
|
||||
import javax.inject.Inject
|
||||
import javax.inject.Named
|
||||
|
||||
@StatusBarScope
|
||||
class SplitShadeStatusBarController @Inject constructor(
|
||||
@Named(SPLIT_SHADE_STATUS_BAR) val view: View
|
||||
) {
|
||||
|
||||
var shadeExpanded = false
|
||||
set(value) {
|
||||
field = value
|
||||
updateVisibility()
|
||||
}
|
||||
|
||||
var splitShadeMode = false
|
||||
set(value) {
|
||||
field = value
|
||||
updateVisibility()
|
||||
}
|
||||
|
||||
private fun updateVisibility() {
|
||||
view.visibility = if (shadeExpanded && splitShadeMode) View.VISIBLE else View.GONE
|
||||
}
|
||||
}
|
||||
@@ -23,7 +23,7 @@ import com.android.systemui.biometrics.AuthRippleController;
|
||||
import com.android.systemui.statusbar.phone.NotificationPanelViewController;
|
||||
import com.android.systemui.statusbar.phone.NotificationShadeWindowView;
|
||||
import com.android.systemui.statusbar.phone.NotificationShadeWindowViewController;
|
||||
import com.android.systemui.statusbar.phone.SplitShadeStatusBarController;
|
||||
import com.android.systemui.statusbar.phone.SplitShadeHeaderController;
|
||||
import com.android.systemui.statusbar.phone.StatusBarWindowController;
|
||||
|
||||
import java.lang.annotation.Documented;
|
||||
@@ -92,5 +92,5 @@ public interface StatusBarComponent {
|
||||
* Creates a SplitShadeStatusBarController.
|
||||
*/
|
||||
@StatusBarScope
|
||||
SplitShadeStatusBarController getSplitShadeStatusBarController();
|
||||
SplitShadeHeaderController getSplitShadeStatusBarController();
|
||||
}
|
||||
|
||||
@@ -34,7 +34,7 @@ import dagger.Provides;
|
||||
@Module
|
||||
public abstract class StatusBarViewModule {
|
||||
|
||||
public static final String SPLIT_SHADE_STATUS_BAR = "split_shade_status_bar";
|
||||
public static final String SPLIT_SHADE_HEADER = "split_shade_header";
|
||||
|
||||
/** */
|
||||
@Provides
|
||||
@@ -63,11 +63,11 @@ public abstract class StatusBarViewModule {
|
||||
|
||||
/** */
|
||||
@Provides
|
||||
@Named(SPLIT_SHADE_STATUS_BAR)
|
||||
@Named(SPLIT_SHADE_HEADER)
|
||||
@StatusBarComponent.StatusBarScope
|
||||
public static View getSlitShadeStatusBarView(
|
||||
NotificationShadeWindowView notificationShadeWindowView) {
|
||||
return notificationShadeWindowView.findViewById(R.id.quick_qs_status_icons);
|
||||
return notificationShadeWindowView.findViewById(R.id.split_shade_status_bar);
|
||||
}
|
||||
|
||||
/** */
|
||||
|
||||
@@ -283,7 +283,7 @@ public class NotificationPanelViewTest extends SysuiTestCase {
|
||||
@Mock
|
||||
private SecureSettings mSecureSettings;
|
||||
@Mock
|
||||
private SplitShadeStatusBarController mSplitShadeStatusBarController;
|
||||
private SplitShadeHeaderController mSplitShadeHeaderController;
|
||||
@Mock
|
||||
private ContentResolver mContentResolver;
|
||||
@Mock
|
||||
@@ -440,7 +440,7 @@ public class NotificationPanelViewTest extends SysuiTestCase {
|
||||
mQuickAccessWalletController,
|
||||
new FakeExecutor(new FakeSystemClock()),
|
||||
mSecureSettings,
|
||||
mSplitShadeStatusBarController,
|
||||
mSplitShadeHeaderController,
|
||||
mUnlockedScreenOffAnimationController,
|
||||
mNotificationRemoteInputManager);
|
||||
mNotificationPanelViewController.initDependencies(
|
||||
|
||||
Reference in New Issue
Block a user