From 46767b77c004a3541c614f8e21d6a871dd148e54 Mon Sep 17 00:00:00 2001 From: Jason Monk Date: Thu, 18 Aug 2016 10:58:04 -0400 Subject: [PATCH] Extract plugin interface for QS Users must implement the QSContainer interface to be returned by a ViewProvider plugin. The QSContainer must contain a BaseStatusBarHeader and have the id of quick_settings_container. Test: Manual Change-Id: Ibfaa835cad20855a530e4ae142d8a2aeba4a277b --- .../systemui/plugins/qs/QSContainer.java | 124 ++++++++++++++++++ packages/SystemUI/res/layout/qs_panel.xml | 4 +- .../res/layout/status_bar_expanded.xml | 7 +- .../com/android/systemui/qs/QSAnimator.java | 2 +- ...{QSContainer.java => QSContainerImpl.java} | 32 +++-- .../src/com/android/systemui/qs/QSDetail.java | 9 +- .../src/com/android/systemui/qs/QSPanel.java | 13 +- .../src/com/android/systemui/qs/QSTile.java | 27 +--- .../systemui/qs/customize/QSCustomizer.java | 3 +- .../systemui/qs/tiles/BatteryTile.java | 1 + .../systemui/qs/tiles/BluetoothTile.java | 1 + .../android/systemui/qs/tiles/CastTile.java | 1 + .../systemui/qs/tiles/CellularTile.java | 2 +- .../android/systemui/qs/tiles/DndTile.java | 1 + .../android/systemui/qs/tiles/UserTile.java | 1 + .../android/systemui/qs/tiles/WifiTile.java | 1 + .../car/CarNavigationBarController.java | 5 +- .../statusbar/phone/ActivityStarter.java | 36 ----- .../statusbar/phone/BaseStatusBarHeader.java | 49 ------- .../phone/KeyguardBottomAreaView.java | 1 + .../statusbar/phone/MultiUserSwitch.java | 5 +- .../phone/NotificationPanelView.java | 8 +- .../NotificationsQuickSettingsContainer.java | 8 +- .../statusbar/phone/PhoneStatusBar.java | 15 ++- .../statusbar/phone/QuickStatusBarHeader.java | 16 ++- .../policy/UserSwitcherController.java | 7 +- 26 files changed, 208 insertions(+), 171 deletions(-) create mode 100644 packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSContainer.java rename packages/SystemUI/src/com/android/systemui/qs/{QSContainer.java => QSContainerImpl.java} (92%) delete mode 100644 packages/SystemUI/src/com/android/systemui/statusbar/phone/ActivityStarter.java delete mode 100644 packages/SystemUI/src/com/android/systemui/statusbar/phone/BaseStatusBarHeader.java diff --git a/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSContainer.java b/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSContainer.java new file mode 100644 index 0000000000000..3270587e72669 --- /dev/null +++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSContainer.java @@ -0,0 +1,124 @@ +/* + * Copyright (C) 2016 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.plugins.qs; + +import android.annotation.NonNull; +import android.annotation.Nullable; +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; +import android.util.AttributeSet; +import android.view.View; +import android.view.ViewGroup; +import android.widget.FrameLayout; +import android.widget.RelativeLayout; + +public abstract class QSContainer extends FrameLayout { + + public static final String ACTION = "com.android.systemui.action.PLUGIN_QS"; + + // This should be incremented any time this class or ActivityStarter or BaseStatusBarHeader + // change in incompatible ways. + public static final int VERSION = 1; + + public QSContainer(@NonNull Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + } + + public abstract void setPanelView(HeightListener notificationPanelView); + public abstract BaseStatusBarHeader getHeader(); + + public abstract int getQsMinExpansionHeight(); + public abstract int getDesiredHeight(); + public abstract void setHeightOverride(int desiredHeight); + public abstract void setHeaderClickable(boolean qsExpansionEnabled); + public abstract boolean isCustomizing(); + public abstract void setOverscrolling(boolean overscrolling); + public abstract void setExpanded(boolean qsExpanded); + public abstract void setListening(boolean listening); + public abstract boolean isShowingDetail(); + public abstract void closeDetail(); + public abstract void setKeyguardShowing(boolean keyguardShowing); + public abstract void animateHeaderSlidingIn(long delay); + public abstract void animateHeaderSlidingOut(); + public abstract void setQsExpansion(float qsExpansionFraction, float headerTranslation); + public abstract void setHeaderListening(boolean listening); + public abstract void notifyCustomizeChanged(); + + public abstract void setContainer(ViewGroup container); + + public interface HeightListener { + void onQsHeightChanged(); + } + + public interface Callback { + void onShowingDetail(DetailAdapter detail, int x, int y); + void onToggleStateChanged(boolean state); + void onScanStateChanged(boolean state); + } + + public interface DetailAdapter { + CharSequence getTitle(); + Boolean getToggleState(); + default boolean getToggleEnabled() { + return true; + } + View createDetailView(Context context, View convertView, ViewGroup parent); + Intent getSettingsIntent(); + void setToggleState(boolean state); + int getMetricsCategory(); + + /** + * Indicates whether the detail view wants to have its header (back button, title and + * toggle) shown. + */ + default boolean hasHeader() { return true; } + } + + public abstract static class BaseStatusBarHeader extends RelativeLayout { + + public BaseStatusBarHeader(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public abstract int getCollapsedHeight(); + public abstract int getExpandedHeight(); + + public abstract void setExpanded(boolean b); + public abstract void setExpansion(float headerExpansionFraction); + public abstract void setListening(boolean listening); + public abstract void updateEverything(); + public abstract void setActivityStarter(ActivityStarter activityStarter); + public abstract void setCallback(Callback qsPanelCallback); + public abstract View getExpandView(); + } + + /** + * An interface to start activities. This is used to as a callback from the views to + * {@link PhoneStatusBar} to allow custom handling for starting the activity, i.e. dismissing the + * Keyguard. + */ + public static interface ActivityStarter { + + void startPendingIntentDismissingKeyguard(PendingIntent intent); + void startActivity(Intent intent, boolean dismissShade); + void startActivity(Intent intent, boolean dismissShade, Callback callback); + void preventNextAnimation(); + + interface Callback { + void onActivityStarted(int resultCode); + } + } +} diff --git a/packages/SystemUI/res/layout/qs_panel.xml b/packages/SystemUI/res/layout/qs_panel.xml index 26c733950bf05..9e0a6fe4f6c51 100644 --- a/packages/SystemUI/res/layout/qs_panel.xml +++ b/packages/SystemUI/res/layout/qs_panel.xml @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. --> - - + diff --git a/packages/SystemUI/res/layout/status_bar_expanded.xml b/packages/SystemUI/res/layout/status_bar_expanded.xml index 3d70969e336d3..0339e038ebdf7 100644 --- a/packages/SystemUI/res/layout/status_bar_expanded.xml +++ b/packages/SystemUI/res/layout/status_bar_expanded.xml @@ -19,7 +19,7 @@ - + android:clipChildren="false" + systemui:viewType="com.android.systemui.plugins.qs.QSContainer" /> { return true; } - public interface DetailAdapter { - CharSequence getTitle(); - Boolean getToggleState(); - default boolean getToggleEnabled() { - return true; - } - View createDetailView(Context context, View convertView, ViewGroup parent); - Intent getSettingsIntent(); - void setToggleState(boolean state); - int getMetricsCategory(); - - /** - * @return the height in px the content of the detail view should take. - */ - default int getDetailViewHeight() { throw new UnsupportedOperationException(); }; - - /** - * Indicates whether the detail view wants to have its header (back button, title and - * toggle) shown. - */ - default boolean hasHeader() { return true; } - } - // safe to call from any thread public void addCallback(Callback callback) { diff --git a/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java b/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java index 0de1e3022b6c9..3493d2454983c 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java +++ b/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java @@ -33,10 +33,11 @@ import android.view.View; import android.widget.LinearLayout; import android.widget.Toolbar; import android.widget.Toolbar.OnMenuItemClickListener; + import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.MetricsProto; import com.android.systemui.R; -import com.android.systemui.qs.QSContainer; +import com.android.systemui.plugins.qs.QSContainer; import com.android.systemui.qs.QSDetailClipper; import com.android.systemui.qs.QSTile; import com.android.systemui.statusbar.phone.NotificationsQuickSettingsContainer; diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/BatteryTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/BatteryTile.java index 985bc9fdf4bb4..b61a81cbfdccd 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/BatteryTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/BatteryTile.java @@ -40,6 +40,7 @@ import com.android.settingslib.BatteryInfo; import com.android.settingslib.graph.UsageView; import com.android.systemui.BatteryMeterDrawable; import com.android.systemui.R; +import com.android.systemui.plugins.qs.QSContainer.DetailAdapter; import com.android.systemui.qs.QSTile; import com.android.systemui.statusbar.policy.BatteryController; diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java index 8d8474a135b4d..18bde27fc6b4e 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java @@ -32,6 +32,7 @@ import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.MetricsProto.MetricsEvent; import com.android.settingslib.bluetooth.CachedBluetoothDevice; import com.android.systemui.R; +import com.android.systemui.plugins.qs.QSContainer.DetailAdapter; import com.android.systemui.qs.QSDetailItems; import com.android.systemui.qs.QSDetailItems.Item; import com.android.systemui.qs.QSTile; diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java index c3e9b6e4dcc98..61bad771b6e01 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java @@ -28,6 +28,7 @@ import android.widget.Button; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.MetricsProto.MetricsEvent; import com.android.systemui.R; +import com.android.systemui.plugins.qs.QSContainer.DetailAdapter; import com.android.systemui.qs.QSDetailItems; import com.android.systemui.qs.QSDetailItems.Item; import com.android.systemui.qs.QSTile; diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java index 0de5105485dc2..7de883e2505d9 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java @@ -24,12 +24,12 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; -import android.widget.Switch; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.MetricsProto.MetricsEvent; import com.android.settingslib.net.DataUsageController; import com.android.systemui.R; +import com.android.systemui.plugins.qs.QSContainer.DetailAdapter; import com.android.systemui.qs.QSIconView; import com.android.systemui.qs.QSTile; import com.android.systemui.qs.SignalTileView; diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java index 91821bad988af..89bb1d2c9d8f2 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java @@ -37,6 +37,7 @@ import com.android.internal.logging.MetricsProto.MetricsEvent; import com.android.systemui.Prefs; import com.android.systemui.R; import com.android.systemui.SysUIToast; +import com.android.systemui.plugins.qs.QSContainer.DetailAdapter; import com.android.systemui.qs.QSTile; import com.android.systemui.statusbar.policy.ZenModeController; import com.android.systemui.volume.ZenModePanel; diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/UserTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/UserTile.java index cc875ac0a2ba9..b5fbfe05d3680 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/UserTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/UserTile.java @@ -22,6 +22,7 @@ import android.provider.Settings; import android.util.Pair; import com.android.internal.logging.MetricsProto.MetricsEvent; +import com.android.systemui.plugins.qs.QSContainer.DetailAdapter; import com.android.systemui.qs.QSTile; import com.android.systemui.statusbar.policy.UserInfoController; import com.android.systemui.statusbar.policy.UserSwitcherController; diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java index ba79a18f4ef22..27306fcfcd00b 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java @@ -31,6 +31,7 @@ import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.MetricsProto.MetricsEvent; import com.android.settingslib.wifi.AccessPoint; import com.android.systemui.R; +import com.android.systemui.plugins.qs.QSContainer.DetailAdapter; import com.android.systemui.qs.QSDetailItems; import com.android.systemui.qs.QSDetailItems.Item; import com.android.systemui.qs.QSIconView; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/car/CarNavigationBarController.java b/packages/SystemUI/src/com/android/systemui/statusbar/car/CarNavigationBarController.java index da57f7a75338d..baff6806dc73c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/car/CarNavigationBarController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/car/CarNavigationBarController.java @@ -15,17 +15,14 @@ */ package com.android.systemui.statusbar.car; -import android.app.ActivityManager; import android.app.ActivityManager.StackId; import android.content.Context; import android.content.Intent; -import android.content.IntentFilter; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.content.res.Resources; import android.content.res.TypedArray; import android.graphics.drawable.Drawable; -import android.os.Handler; import android.support.v4.util.SimpleArrayMap; import android.util.Log; import android.util.SparseBooleanArray; @@ -33,7 +30,7 @@ import android.view.View; import android.widget.LinearLayout; import com.android.systemui.R; -import com.android.systemui.statusbar.phone.ActivityStarter; +import com.android.systemui.plugins.qs.QSContainer.ActivityStarter; import java.net.URISyntaxException; import java.util.ArrayList; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ActivityStarter.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ActivityStarter.java deleted file mode 100644 index 8f689c6c00b37..0000000000000 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ActivityStarter.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (C) 2014 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.app.PendingIntent; -import android.content.Intent; - -/** - * An interface to start activities. This is used to as a callback from the views to - * {@link PhoneStatusBar} to allow custom handling for starting the activity, i.e. dismissing the - * Keyguard. - */ -public interface ActivityStarter { - void startPendingIntentDismissingKeyguard(PendingIntent intent); - void startActivity(Intent intent, boolean dismissShade); - void startActivity(Intent intent, boolean dismissShade, Callback callback); - void preventNextAnimation(); - - interface Callback { - void onActivityStarted(int resultCode); - } -} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BaseStatusBarHeader.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BaseStatusBarHeader.java deleted file mode 100644 index 79eef43d4e2ed..0000000000000 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BaseStatusBarHeader.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (C) 2015 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.content.Context; -import android.util.AttributeSet; -import android.widget.RelativeLayout; -import com.android.systemui.qs.QSPanel; -import com.android.systemui.qs.QSPanel.Callback; -import com.android.systemui.statusbar.policy.BatteryController; -import com.android.systemui.statusbar.policy.NetworkControllerImpl; -import com.android.systemui.statusbar.policy.NextAlarmController; -import com.android.systemui.statusbar.policy.UserInfoController; - -public abstract class BaseStatusBarHeader extends RelativeLayout implements - NetworkControllerImpl.EmergencyListener { - - public BaseStatusBarHeader(Context context, AttributeSet attrs) { - super(context, attrs); - } - - public abstract int getCollapsedHeight(); - public abstract int getExpandedHeight(); - - public abstract void setExpanded(boolean b); - public abstract void setExpansion(float headerExpansionFraction); - public abstract void setListening(boolean listening); - public abstract void updateEverything(); - public abstract void setActivityStarter(ActivityStarter activityStarter); - public abstract void setQSPanel(QSPanel qSPanel); - public abstract void setBatteryController(BatteryController batteryController); - public abstract void setNextAlarmController(NextAlarmController nextAlarmController); - public abstract void setUserInfoController(UserInfoController userInfoController); - public abstract void setCallback(Callback qsPanelCallback); -} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java index 8cabfb93bf327..0a391ebda5be1 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java @@ -61,6 +61,7 @@ import com.android.systemui.EventLogTags; import com.android.systemui.Interpolators; import com.android.systemui.R; import com.android.systemui.assist.AssistManager; +import com.android.systemui.plugins.qs.QSContainer.ActivityStarter; import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.KeyguardAffordanceView; import com.android.systemui.statusbar.KeyguardIndicationController; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/MultiUserSwitch.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/MultiUserSwitch.java index 0de06c90ecef0..af9454ceab135 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/MultiUserSwitch.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/MultiUserSwitch.java @@ -18,7 +18,6 @@ package com.android.systemui.statusbar.phone; import android.content.Context; import android.content.Intent; -import android.os.UserHandle; import android.os.UserManager; import android.provider.ContactsContract; import android.text.TextUtils; @@ -31,8 +30,8 @@ import android.widget.Button; import android.widget.FrameLayout; import com.android.systemui.R; +import com.android.systemui.plugins.qs.QSContainer.DetailAdapter; import com.android.systemui.qs.QSPanel; -import com.android.systemui.qs.QSTile; import com.android.systemui.statusbar.policy.KeyguardUserSwitcher; import com.android.systemui.statusbar.policy.UserSwitcherController; @@ -183,7 +182,7 @@ public class MultiUserSwitch extends FrameLayout implements View.OnClickListener return false; } - protected QSTile.DetailAdapter getUserDetailAdapter() { + protected DetailAdapter getUserDetailAdapter() { return mUserSwitcherController.userDetailAdapter; } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java index 812c5c151ce9b..5d1af2f5591c5 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java @@ -50,7 +50,7 @@ import com.android.systemui.EventLogTags; import com.android.systemui.Interpolators; import com.android.systemui.R; import com.android.systemui.classifier.FalsingManager; -import com.android.systemui.qs.QSContainer; +import com.android.systemui.plugins.qs.QSContainer; import com.android.systemui.statusbar.ExpandableNotificationRow; import com.android.systemui.statusbar.ExpandableView; import com.android.systemui.statusbar.FlingAnimationUtils; @@ -70,7 +70,7 @@ public class NotificationPanelView extends PanelView implements ExpandableView.OnHeightChangedListener, View.OnClickListener, NotificationStackScrollLayout.OnOverscrollTopChangedListener, KeyguardAffordanceHelper.Callback, NotificationStackScrollLayout.OnEmptySpaceClickListener, - HeadsUpManager.OnHeadsUpChangedListener { + HeadsUpManager.OnHeadsUpChangedListener, QSContainer.HeightListener { private static final boolean DEBUG = false; @@ -242,7 +242,7 @@ public class NotificationPanelView extends PanelView implements public void onInflated(View v) { mQsContainer = (QSContainer) v.findViewById(R.id.quick_settings_container); mQsContainer.setPanelView(NotificationPanelView.this); - mQsContainer.getHeader().findViewById(R.id.expand_indicator) + mQsContainer.getHeader().getExpandView() .setOnClickListener(NotificationPanelView.this); // recompute internal state when qspanel height changes @@ -2011,7 +2011,7 @@ public class NotificationPanelView extends PanelView implements } public void closeQsDetail() { - mQsContainer.getQsPanel().closeDetail(); + mQsContainer.closeDetail(); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationsQuickSettingsContainer.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationsQuickSettingsContainer.java index 36e59db1ac7b3..8b1fcd6b104f9 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationsQuickSettingsContainer.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationsQuickSettingsContainer.java @@ -24,10 +24,10 @@ import android.view.View; import android.view.ViewStub; import android.view.WindowInsets; import android.widget.FrameLayout; + import com.android.systemui.AutoReinflateContainer; import com.android.systemui.R; -import com.android.systemui.qs.QSContainer; -import com.android.systemui.qs.customize.QSCustomizer; +import com.android.systemui.plugins.qs.QSContainer; /** * The container with notification stack scroller and quick settings inside. @@ -130,8 +130,8 @@ public class NotificationsQuickSettingsContainer extends FrameLayout @Override public void onInflated(View v) { - QSCustomizer customizer = ((QSContainer) v).getCustomizer(); - customizer.setContainer(this); + QSContainer container = (QSContainer) v; + container.setContainer(this); } public void setQsExpanded(boolean expanded) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java index 082fde422ce97..40303c4ac37cb 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -141,7 +141,10 @@ import com.android.systemui.classifier.FalsingManager; import com.android.systemui.doze.DozeHost; import com.android.systemui.doze.DozeLog; import com.android.systemui.keyguard.KeyguardViewMediator; -import com.android.systemui.qs.QSContainer; +import com.android.systemui.plugins.qs.QSContainer.ActivityStarter; +import com.android.systemui.plugins.qs.QSContainer.BaseStatusBarHeader; +import com.android.systemui.plugins.qs.QSContainer; +import com.android.systemui.qs.QSContainerImpl; import com.android.systemui.qs.QSPanel; import com.android.systemui.recents.ScreenPinningRequest; import com.android.systemui.recents.events.EventBus; @@ -933,10 +936,12 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, public void onInflated(View v) { QSContainer qsContainer = (QSContainer) v.findViewById( R.id.quick_settings_container); - qsContainer.setHost(qsh); - mQSPanel = qsContainer.getQsPanel(); - mQSPanel.setBrightnessMirror(mBrightnessMirrorController); - mKeyguardStatusBar.setQSPanel(mQSPanel); + if (qsContainer instanceof QSContainerImpl) { + ((QSContainerImpl) qsContainer).setHost(qsh); + mQSPanel = ((QSContainerImpl) qsContainer).getQsPanel(); + mQSPanel.setBrightnessMirror(mBrightnessMirrorController); + mKeyguardStatusBar.setQSPanel(mQSPanel); + } mHeader = qsContainer.getHeader(); initSignalCluster(mHeader); mHeader.setActivityStarter(PhoneStatusBar.this); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStatusBarHeader.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStatusBarHeader.java index 3ad09d11ea0ad..b0b86beee333c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStatusBarHeader.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStatusBarHeader.java @@ -37,12 +37,15 @@ import com.android.internal.logging.MetricsProto; import com.android.keyguard.KeyguardStatusView; import com.android.systemui.FontSizeUtils; import com.android.systemui.R; +import com.android.systemui.plugins.qs.QSContainer.ActivityStarter; +import com.android.systemui.plugins.qs.QSContainer.BaseStatusBarHeader; import com.android.systemui.qs.QSPanel; -import com.android.systemui.qs.QSPanel.Callback; +import com.android.systemui.plugins.qs.QSContainer.Callback; import com.android.systemui.qs.QuickQSPanel; import com.android.systemui.qs.TouchAnimator; import com.android.systemui.qs.TouchAnimator.Builder; import com.android.systemui.statusbar.policy.BatteryController; +import com.android.systemui.statusbar.policy.NetworkController.EmergencyListener; import com.android.systemui.statusbar.policy.NextAlarmController; import com.android.systemui.statusbar.policy.NextAlarmController.NextAlarmChangeCallback; import com.android.systemui.statusbar.policy.UserInfoController; @@ -50,7 +53,7 @@ import com.android.systemui.statusbar.policy.UserInfoController.OnUserInfoChange import com.android.systemui.tuner.TunerService; public class QuickStatusBarHeader extends BaseStatusBarHeader implements - NextAlarmChangeCallback, OnClickListener, OnUserInfoChangedListener { + NextAlarmChangeCallback, OnClickListener, OnUserInfoChangedListener, EmergencyListener { private static final String TAG = "QuickStatusBarHeader"; @@ -254,6 +257,11 @@ public class QuickStatusBarHeader extends BaseStatusBarHeader implements updateListeners(); } + @Override + public View getExpandView() { + return findViewById(R.id.expand_indicator); + } + @Override public void updateEverything() { post(() -> { @@ -293,7 +301,6 @@ public class QuickStatusBarHeader extends BaseStatusBarHeader implements mActivityStarter = activityStarter; } - @Override public void setQSPanel(final QSPanel qsPanel) { mQsPanel = qsPanel; setupHost(qsPanel.getHost()); @@ -354,17 +361,14 @@ public class QuickStatusBarHeader extends BaseStatusBarHeader implements true /* dismissShade */); } - @Override public void setNextAlarmController(NextAlarmController nextAlarmController) { mNextAlarmController = nextAlarmController; } - @Override public void setBatteryController(BatteryController batteryController) { // Don't care } - @Override public void setUserInfoController(UserInfoController userInfoController) { userInfoController.addListener(this); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java index c3becb08e031b..30d1c54b40966 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java @@ -50,15 +50,14 @@ import android.widget.BaseAdapter; import com.android.internal.logging.MetricsProto.MetricsEvent; import com.android.internal.util.UserIcons; -import com.android.keyguard.KeyguardUpdateMonitor; import com.android.settingslib.RestrictedLockUtils; import com.android.systemui.GuestResumeSessionReceiver; import com.android.systemui.R; import com.android.systemui.SystemUI; import com.android.systemui.SystemUISecondaryUserService; -import com.android.systemui.qs.QSTile; +import com.android.systemui.plugins.qs.QSContainer.DetailAdapter; import com.android.systemui.qs.tiles.UserDetailView; -import com.android.systemui.statusbar.phone.ActivityStarter; +import com.android.systemui.plugins.qs.QSContainer.ActivityStarter; import com.android.systemui.statusbar.phone.SystemUIDialog; import java.io.FileDescriptor; @@ -793,7 +792,7 @@ public class UserSwitcherController { } } - public final QSTile.DetailAdapter userDetailAdapter = new QSTile.DetailAdapter() { + public final DetailAdapter userDetailAdapter = new DetailAdapter() { private final Intent USER_SETTINGS_INTENT = new Intent(Settings.ACTION_USER_SETTINGS); @Override