From 46dbfb475fe0d1644f27f78e35735ba32c92225b Mon Sep 17 00:00:00 2001 From: Jason Monk Date: Thu, 25 Feb 2016 14:59:20 -0500 Subject: [PATCH] Handle density changes in QS Bug: 26845796 Change-Id: Icc783c9d706382e553df49f699aaf44aac943d18 --- .../SystemUI/res/layout/status_bar_expanded.xml | 5 +- packages/SystemUI/res/values/attrs.xml | 4 ++ .../src/com/android/systemui/DensityContainer.java | 78 ++++++++++++++++++++++ .../src/com/android/systemui/qs/QSPanel.java | 11 ++- .../src/com/android/systemui/qs/QSTile.java | 1 + .../systemui/statusbar/SignalClusterView.java | 2 + .../statusbar/phone/BaseStatusBarHeader.java | 1 - .../statusbar/phone/NotificationPanelView.java | 12 +++- .../phone/NotificationsQuickSettingsContainer.java | 2 +- .../systemui/statusbar/phone/PhoneStatusBar.java | 40 +++++------ .../systemui/statusbar/phone/QSTileHost.java | 27 ++++++-- .../statusbar/phone/QuickStatusBarHeader.java | 43 +++++++----- .../statusbar/phone/StatusBarHeaderView.java | 3 +- .../systemui/statusbar/policy/CallbackHandler.java | 3 +- .../statusbar/policy/NetworkController.java | 10 ++- .../statusbar/policy/NetworkControllerImpl.java | 8 +-- .../statusbar/policy/NightModeController.java | 8 +-- .../systemui/qs/external/TileServicesTests.java | 2 +- .../statusbar/policy/CallbackHandlerTest.java | 4 +- 19 files changed, 193 insertions(+), 71 deletions(-) create mode 100644 packages/SystemUI/src/com/android/systemui/DensityContainer.java diff --git a/packages/SystemUI/res/layout/status_bar_expanded.xml b/packages/SystemUI/res/layout/status_bar_expanded.xml index 289b1d9db32c..656941f8b725 100644 --- a/packages/SystemUI/res/layout/status_bar_expanded.xml +++ b/packages/SystemUI/res/layout/status_bar_expanded.xml @@ -39,8 +39,9 @@ android:clipToPadding="false" android:clipChildren="false"> - diff --git a/packages/SystemUI/res/values/attrs.xml b/packages/SystemUI/res/values/attrs.xml index 189eb3be302a..e040ab26f97a 100644 --- a/packages/SystemUI/res/values/attrs.xml +++ b/packages/SystemUI/res/values/attrs.xml @@ -93,5 +93,9 @@ + + + + diff --git a/packages/SystemUI/src/com/android/systemui/DensityContainer.java b/packages/SystemUI/src/com/android/systemui/DensityContainer.java new file mode 100644 index 000000000000..2e3cb4977488 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/DensityContainer.java @@ -0,0 +1,78 @@ +/* + * 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; + +import android.annotation.Nullable; +import android.content.Context; +import android.content.res.Configuration; +import android.content.res.TypedArray; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.FrameLayout; + +import java.util.ArrayList; +import java.util.List; + +public class DensityContainer extends FrameLayout { + + private final List mInflateListeners = new ArrayList<>(); + private final int mLayout; + private int mDensity; + + public DensityContainer(Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + + mDensity = context.getResources().getConfiguration().densityDpi; + + TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.DensityContainer); + if (!a.hasValue(R.styleable.DensityContainer_android_layout)) { + throw new IllegalArgumentException("DensityContainer must contain a layout"); + } + mLayout = a.getResourceId(R.styleable.DensityContainer_android_layout, 0); + inflateLayout(); + } + + @Override + protected void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + int density = newConfig.densityDpi; + if (density != mDensity) { + mDensity = density; + inflateLayout(); + } + } + + private void inflateLayout() { + removeAllViews(); + LayoutInflater.from(getContext()).inflate(mLayout, this); + final int N = mInflateListeners.size(); + for (int i = 0; i < N; i++) { + mInflateListeners.get(i).onInflated(getChildAt(0)); + } + } + + public void addInflateListener(InflateListener listener) { + mInflateListeners.add(listener); + listener.onInflated(getChildAt(0)); + } + + public interface InflateListener { + /** + * Called whenever a new view is inflated. + */ + void onInflated(View v); + } +} diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java index 30a985052bc2..b6269e2328dd 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java @@ -31,6 +31,7 @@ import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.MetricsProto.MetricsEvent; import com.android.systemui.R; import com.android.systemui.qs.QSTile.DetailAdapter; +import com.android.systemui.qs.QSTile.Host.Callback; import com.android.systemui.qs.customize.QSCustomizer; import com.android.systemui.qs.external.CustomTile; import com.android.systemui.settings.BrightnessController; @@ -44,7 +45,7 @@ import java.util.ArrayList; import java.util.Collection; /** View that represents the quick settings tile panel. **/ -public class QSPanel extends LinearLayout implements Tunable { +public class QSPanel extends LinearLayout implements Tunable, Callback { public static final String QS_SHOW_BRIGHTNESS = "qs_show_brightness"; @@ -123,10 +124,16 @@ public class QSPanel extends LinearLayout implements Tunable { @Override protected void onDetachedFromWindow() { TunerService.get(mContext).removeTunable(this); + mHost.removeCallback(this); super.onDetachedFromWindow(); } @Override + public void onTilesChanged() { + setTiles(mHost.getTiles()); + } + + @Override public void onTuningChanged(String key, String newValue) { if (QS_SHOW_BRIGHTNESS.equals(key)) { mBrightnessView.setVisibility(newValue == null || Integer.parseInt(newValue) != 0 @@ -168,6 +175,8 @@ public class QSPanel extends LinearLayout implements Tunable { public void setHost(QSTileHost host) { mHost = host; + mHost.addCallback(this); + setTiles(mHost.getTiles()); mFooter.setHost(host); createCustomizePanel(); } diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSTile.java b/packages/SystemUI/src/com/android/systemui/qs/QSTile.java index df622b8f374c..39fabc58cf8a 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSTile.java @@ -390,6 +390,7 @@ public abstract class QSTile implements Listenable { Context getContext(); Collection> getTiles(); void addCallback(Callback callback); + void removeCallback(Callback callback); BluetoothController getBluetoothController(); LocationController getLocationController(); RotationLockController getRotationLockController(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java b/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java index c892b11e33fa..960e4cf47001 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java @@ -227,6 +227,8 @@ public class SignalClusterView protected void onDetachedFromWindow() { mMobileSignalGroup.removeAllViews(); TunerService.get(mContext).removeTunable(this); + mSC.removeCallback(this); + mNC.removeSignalCallback(this); super.onDetachedFromWindow(); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BaseStatusBarHeader.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BaseStatusBarHeader.java index eade2a89447d..6e1c862ebd73 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BaseStatusBarHeader.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BaseStatusBarHeader.java @@ -19,7 +19,6 @@ 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.statusbar.policy.BatteryController; import com.android.systemui.statusbar.policy.NetworkControllerImpl; 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 05ae41be33d4..127febae5ee8 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java @@ -42,6 +42,8 @@ import android.widget.TextView; import com.android.internal.logging.MetricsLogger; import com.android.keyguard.KeyguardStatusView; import com.android.systemui.DejankUtils; +import com.android.systemui.DensityContainer; +import com.android.systemui.DensityContainer.InflateListener; import com.android.systemui.EventLogConstants; import com.android.systemui.EventLogTags; import com.android.systemui.Interpolators; @@ -215,8 +217,14 @@ public class NotificationPanelView extends PanelView implements super.onFinishInflate(); mKeyguardStatusBar = (KeyguardStatusBarView) findViewById(R.id.keyguard_header); mKeyguardStatusView = (KeyguardStatusView) findViewById(R.id.keyguard_status_view); - mQsContainer = (QSContainer) findViewById(R.id.quick_settings_container); - mQsContainer.getHeader().setOnClickListener(this); + DensityContainer container = (DensityContainer) findViewById(R.id.qs_density_container); + container.addInflateListener(new InflateListener() { + @Override + public void onInflated(View v) { + mQsContainer = (QSContainer) v.findViewById(R.id.quick_settings_container); + mQsContainer.getHeader().setOnClickListener(NotificationPanelView.this); + } + }); mClockView = (TextView) findViewById(R.id.clock_view); mNotificationContainerParent = (NotificationsQuickSettingsContainer) findViewById(R.id.notification_container_parent); 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 7cc720df1c27..6d90e5cf416f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationsQuickSettingsContainer.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationsQuickSettingsContainer.java @@ -47,7 +47,7 @@ public class NotificationsQuickSettingsContainer extends FrameLayout @Override protected void onFinishInflate() { super.onFinishInflate(); - mQsContainer = findViewById(R.id.quick_settings_container); + mQsContainer = findViewById(R.id.qs_density_container); mStackScroller = findViewById(R.id.notification_stack_scroller); mKeyguardStatusBar = findViewById(R.id.keyguard_header); ViewStub userSwitcher = (ViewStub) findViewById(R.id.keyguard_user_switcher); 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 9b87a8adbeb6..e73994443491 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -23,7 +23,6 @@ import android.annotation.NonNull; import android.app.ActivityManager; import android.app.ActivityManagerNative; import android.app.IActivityManager; -import android.app.IWallpaperManagerCallback; import android.app.Notification; import android.app.PendingIntent; import android.app.StatusBarManager; @@ -104,6 +103,8 @@ import com.android.keyguard.KeyguardUpdateMonitorCallback; import com.android.keyguard.ViewMediatorCallback; import com.android.systemui.BatteryMeterView; import com.android.systemui.DemoMode; +import com.android.systemui.DensityContainer; +import com.android.systemui.DensityContainer.InflateListener; import com.android.systemui.EventLogConstants; import com.android.systemui.EventLogTags; import com.android.systemui.Interpolators; @@ -778,8 +779,6 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, mStatusBarView.setScrimController(mScrimController); mDozeScrimController = new DozeScrimController(mScrimController, context); - mHeader = (BaseStatusBarHeader) mStatusBarWindow.findViewById(R.id.header); - mHeader.setActivityStarter(this); mKeyguardStatusBar = (KeyguardStatusBarView) mStatusBarWindow.findViewById(R.id.keyguard_header); mKeyguardStatusView = mStatusBarWindow.findViewById(R.id.keyguard_status_view); mKeyguardBottomArea = @@ -839,12 +838,6 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, initSignalCluster(mStatusBarView); initSignalCluster(mKeyguardStatusBar); - initSignalCluster(mHeader); - - final boolean isAPhone = mNetworkController.hasVoiceCallingFeature(); - if (isAPhone) { - mNetworkController.addEmergencyListener(mHeader); - } mFlashlightController = new FlashlightController(mContext); mKeyguardBottomArea.setFlashlightController(mFlashlightController); @@ -863,39 +856,40 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, } // Set up the quick settings tile panel - mQSPanel = (QSPanel) mStatusBarWindow.findViewById(R.id.quick_settings_panel); - if (mQSPanel != null) { + DensityContainer container = (DensityContainer) mStatusBarWindow.findViewById( + R.id.qs_density_container); + if (container != null) { final QSTileHost qsh = new QSTileHost(mContext, this, mBluetoothController, mLocationController, mRotationLockController, mNetworkController, mZenModeController, mHotspotController, mCastController, mFlashlightController, mUserSwitcherController, mUserInfoController, mKeyguardMonitor, - mSecurityController, mBatteryController, mIconController); - mQSPanel.setTiles(qsh.getTiles()); + mSecurityController, mBatteryController, mIconController, + mNextAlarmController); mBrightnessMirrorController = new BrightnessMirrorController(mStatusBarWindow); - mQSPanel.setBrightnessMirror(mBrightnessMirrorController); - QSContainer qsContainer = (QSContainer) mStatusBarWindow.findViewById( - R.id.quick_settings_container); - qsContainer.setHost(qsh); - qsh.addCallback(new QSTileHost.Callback() { + container.addInflateListener(new InflateListener() { @Override - public void onTilesChanged() { - mQSPanel.setTiles(qsh.getTiles()); + public void onInflated(View v) { + QSContainer qsContainer = (QSContainer) v.findViewById( + R.id.quick_settings_container); + qsContainer.setHost(qsh); + mQSPanel = qsContainer.getQsPanel(); + mQSPanel.setBrightnessMirror(mBrightnessMirrorController); + mHeader = qsContainer.getHeader(); + initSignalCluster(mHeader); + mHeader.setActivityStarter(PhoneStatusBar.this); } }); } // User info. Trigger first load. - mHeader.setUserInfoController(mUserInfoController); mKeyguardStatusBar.setUserInfoController(mUserInfoController); mKeyguardStatusBar.setUserSwitcherController(mUserSwitcherController); mUserInfoController.reloadUserInfo(); - mHeader.setBatteryController(mBatteryController); ((BatteryMeterView) mStatusBarView.findViewById(R.id.battery)).setBatteryController( mBatteryController); mKeyguardStatusBar.setBatteryController(mBatteryController); - mHeader.setNextAlarmController(mNextAlarmController); PowerManager pm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE); mBroadcastReceiver.onReceive(mContext, diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QSTileHost.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QSTileHost.java index 80afb9a3c705..f894a22d4acb 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QSTileHost.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QSTileHost.java @@ -57,6 +57,7 @@ import com.android.systemui.qs.tiles.WorkModeTile; import com.android.systemui.statusbar.policy.BatteryController; import com.android.systemui.statusbar.policy.BluetoothController; import com.android.systemui.statusbar.policy.CastController; +import com.android.systemui.statusbar.policy.NextAlarmController; import com.android.systemui.statusbar.policy.NightModeController; import com.android.systemui.statusbar.policy.FlashlightController; import com.android.systemui.statusbar.policy.HotspotController; @@ -111,16 +112,18 @@ public final class QSTileHost implements QSTile.Host, Tunable { private final NightModeController mNightModeController; private final AutoTileManager mAutoTiles; private final ManagedProfileController mProfileController; + private final NextAlarmController mNextAlarmController; private View mHeader; public QSTileHost(Context context, PhoneStatusBar statusBar, - BluetoothController bluetooth, LocationController location, - RotationLockController rotation, NetworkController network, - ZenModeController zen, HotspotController hotspot, - CastController cast, FlashlightController flashlight, - UserSwitcherController userSwitcher, UserInfoController userInfo, - KeyguardMonitor keyguard, SecurityController security, - BatteryController battery, StatusBarIconController iconController) { + BluetoothController bluetooth, LocationController location, + RotationLockController rotation, NetworkController network, + ZenModeController zen, HotspotController hotspot, + CastController cast, FlashlightController flashlight, + UserSwitcherController userSwitcher, UserInfoController userInfo, + KeyguardMonitor keyguard, SecurityController security, + BatteryController battery, StatusBarIconController iconController, + NextAlarmController nextAlarmController) { mContext = context; mStatusBar = statusBar; mBluetooth = bluetooth; @@ -137,6 +140,7 @@ public final class QSTileHost implements QSTile.Host, Tunable { mSecurity = security; mBattery = battery; mIconController = iconController; + mNextAlarmController = nextAlarmController; mNightModeController = new NightModeController(mContext, true); mProfileController = new ManagedProfileController(this); @@ -152,6 +156,10 @@ public final class QSTileHost implements QSTile.Host, Tunable { mAutoTiles = new AutoTileManager(context, this); } + public NextAlarmController getNextAlarmController() { + return mNextAlarmController; + } + public void setHeaderView(View view) { mHeader = view; } @@ -171,6 +179,11 @@ public final class QSTileHost implements QSTile.Host, Tunable { } @Override + public void removeCallback(Callback callback) { + mCallbacks.remove(callback); + } + + @Override public Collection> getTiles() { return mTiles.values(); } 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 b549d5912117..256cc6b6ae3f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStatusBarHeader.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStatusBarHeader.java @@ -35,13 +35,13 @@ import com.android.systemui.FontSizeUtils; import com.android.systemui.R; import com.android.systemui.qs.QSAnimator; import com.android.systemui.qs.QSPanel; -import com.android.systemui.qs.QSTile; import com.android.systemui.qs.QuickQSPanel; import com.android.systemui.qs.TouchAnimator; import com.android.systemui.statusbar.policy.BatteryController; import com.android.systemui.statusbar.policy.NextAlarmController; import com.android.systemui.statusbar.policy.NextAlarmController.NextAlarmChangeCallback; import com.android.systemui.statusbar.policy.UserInfoController; +import com.android.systemui.statusbar.policy.UserInfoController.OnUserInfoChangedListener; import com.android.systemui.tuner.TunerService; public class QuickStatusBarHeader extends BaseStatusBarHeader implements @@ -90,6 +90,7 @@ public class QuickStatusBarHeader extends BaseStatusBarHeader implements private TouchAnimator mAlarmTranslation; private TouchAnimator mSettingsAlpha; private float mExpansionAmount; + private QSTileHost mHost; public QuickStatusBarHeader(Context context, AttributeSet attrs) { super(context, attrs); @@ -222,6 +223,14 @@ public class QuickStatusBarHeader extends BaseStatusBarHeader implements mExpandIndicator.setExpanded(headerExpansionFraction > EXPAND_INDICATOR_THRESHOLD); } + @Override + protected void onDetachedFromWindow() { + setListening(false); + mHost.getUserInfoController().remListener(mUserListener); + mHost.getNetworkController().removeEmergencyListener(this); + super.onDetachedFromWindow(); + } + private void updateAlarmVisibilities() { mAlarmStatus.setVisibility(mAlarmShowing ? View.VISIBLE : View.INVISIBLE); mAlarmStatusCollapsed.setVisibility(mAlarmShowing ? View.VISIBLE : View.INVISIBLE); @@ -284,17 +293,19 @@ public class QuickStatusBarHeader extends BaseStatusBarHeader implements } public void setupHost(final QSTileHost host) { + mHost = host; host.setHeaderView(this); mHeaderQsPanel.setQSPanelAndHeader(mQsPanel, this); - mHeaderQsPanel.setHost(host); mHeaderQsPanel.setMaxTiles(5); - mHeaderQsPanel.setTiles(host.getTiles()); - host.addCallback(new QSTile.Host.Callback() { - @Override - public void onTilesChanged() { - mHeaderQsPanel.setTiles(host.getTiles()); - } - }); + mHeaderQsPanel.setHost(host); + setUserInfoController(host.getUserInfoController()); + setBatteryController(host.getBatteryController()); + setNextAlarmController(host.getNextAlarmController()); + + final boolean isAPhone = mHost.getNetworkController().hasVoiceCallingFeature(); + if (isAPhone) { + mHost.getNetworkController().addEmergencyListener(this); + } } @Override @@ -340,12 +351,7 @@ public class QuickStatusBarHeader extends BaseStatusBarHeader implements @Override public void setUserInfoController(UserInfoController userInfoController) { - userInfoController.addListener(new UserInfoController.OnUserInfoChangedListener() { - @Override - public void onUserInfoChanged(String name, Drawable picture) { - mMultiUserAvatar.setImageDrawable(picture); - } - }); + userInfoController.addListener(mUserListener); } @Override @@ -358,4 +364,11 @@ public class QuickStatusBarHeader extends BaseStatusBarHeader implements } } } + + private final OnUserInfoChangedListener mUserListener = new OnUserInfoChangedListener() { + @Override + public void onUserInfoChanged(String name, Drawable picture) { + mMultiUserAvatar.setImageDrawable(picture); + } + }; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeaderView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeaderView.java index 3e3b16922f7a..a051973efdda 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeaderView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeaderView.java @@ -39,7 +39,6 @@ import android.widget.RelativeLayout; import android.widget.Switch; import android.widget.TextView; import android.widget.Toast; - import com.android.keyguard.KeyguardStatusView; import com.android.systemui.BatteryMeterView; import com.android.systemui.FontSizeUtils; @@ -48,7 +47,7 @@ import com.android.systemui.qs.QSPanel; import com.android.systemui.qs.QSTile; import com.android.systemui.qs.QSTile.DetailAdapter; import com.android.systemui.statusbar.policy.BatteryController; -import com.android.systemui.statusbar.policy.NetworkControllerImpl.EmergencyListener; +import com.android.systemui.statusbar.policy.NetworkController.EmergencyListener; import com.android.systemui.statusbar.policy.NextAlarmController; import com.android.systemui.statusbar.policy.UserInfoController; import com.android.systemui.tuner.TunerService; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java index e618cb87887d..3142ddfe9fb7 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java @@ -19,11 +19,10 @@ import android.os.Handler; import android.os.Looper; import android.os.Message; import android.telephony.SubscriptionInfo; - import com.android.internal.annotations.VisibleForTesting; +import com.android.systemui.statusbar.policy.NetworkController.EmergencyListener; import com.android.systemui.statusbar.policy.NetworkController.IconState; import com.android.systemui.statusbar.policy.NetworkController.SignalCallback; -import com.android.systemui.statusbar.policy.NetworkControllerImpl.EmergencyListener; import java.util.ArrayList; import java.util.List; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java index 93c73228265e..348e0b003997 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java @@ -19,7 +19,6 @@ package com.android.systemui.statusbar.policy; import android.content.Context; import android.content.Intent; import android.telephony.SubscriptionInfo; - import com.android.settingslib.net.DataUsageController; import com.android.settingslib.wifi.AccessPoint; @@ -36,6 +35,11 @@ public interface NetworkController { DataUsageController getMobileDataController(); DataSaverController getDataSaverController(); + boolean hasVoiceCallingFeature(); + + void addEmergencyListener(EmergencyListener listener); + void removeEmergencyListener(EmergencyListener listener); + public interface SignalCallback { void setWifiIndicators(boolean enabled, IconState statusIcon, IconState qsIcon, boolean activityIn, boolean activityOut, String description); @@ -53,6 +57,10 @@ public interface NetworkController { void setMobileDataEnabled(boolean enabled); } + public interface EmergencyListener { + void setEmergencyCallsOnly(boolean emergencyOnly); + } + public static class IconState { public final boolean visible; public final int icon; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java index eecf8c2ea39e..8193b52b569c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java @@ -252,6 +252,10 @@ public class NetworkControllerImpl extends BroadcastReceiver mCallbackHandler.setEmergencyCallsOnly(isEmergencyOnly()); } + public void removeEmergencyListener(EmergencyListener listener) { + mCallbackHandler.setListening(listener, false); + } + public boolean hasMobileDataFeature() { return mHasMobileDataFeature; } @@ -812,10 +816,6 @@ public class NetworkControllerImpl extends BroadcastReceiver } }; - public interface EmergencyListener { - void setEmergencyCallsOnly(boolean emergencyOnly); - } - public static class SubscriptionDefaults { public int getDefaultVoiceSubId() { return SubscriptionManager.getDefaultVoiceSubscriptionId(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NightModeController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NightModeController.java index 0b1911bb15fc..4611ef9f31db 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NightModeController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NightModeController.java @@ -14,17 +14,13 @@ package com.android.systemui.statusbar.policy; -import libcore.util.Objects; - import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.opengl.Matrix; -import android.provider.Settings; import android.provider.Settings.Secure; import android.util.MathUtils; - import com.android.systemui.tuner.TunerService; import java.util.ArrayList; @@ -189,8 +185,8 @@ public class NightModeController implements TunerService.Tunable { } private void updateNightMode(Intent intent) { - mIsNight = intent.getBooleanExtra(EXTRA_IS_NIGHT, false); - mAmount = intent.getFloatExtra(EXTRA_AMOUNT, 0); + mIsNight = intent != null && intent.getBooleanExtra(EXTRA_IS_NIGHT, false); + mAmount = intent != null ? intent.getFloatExtra(EXTRA_AMOUNT, 0) : 0; } private final BroadcastReceiver mReceiver = new BroadcastReceiver() { diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServicesTests.java b/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServicesTests.java index 18412519af50..01514646b66e 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServicesTests.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServicesTests.java @@ -43,7 +43,7 @@ public class TileServicesTests extends SysuiTestCase { QSTileHost host = new QSTileHost(mContext, null, null, null, null, networkController, null, Mockito.mock(HotspotController.class), null, - null, null, null, null, null, null, null); + null, null, null, null, null, null, null, null); mTileService = new TestTileServices(host, Looper.myLooper()); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CallbackHandlerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CallbackHandlerTest.java index 00b8de237347..19cb24322095 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CallbackHandlerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CallbackHandlerTest.java @@ -19,12 +19,10 @@ import android.os.HandlerThread; import android.telephony.SubscriptionInfo; import android.test.AndroidTestCase; import android.test.suitebuilder.annotation.SmallTest; - import com.android.systemui.R; +import com.android.systemui.statusbar.policy.NetworkController.EmergencyListener; import com.android.systemui.statusbar.policy.NetworkController.IconState; import com.android.systemui.statusbar.policy.NetworkController.SignalCallback; -import com.android.systemui.statusbar.policy.NetworkControllerImpl.EmergencyListener; - import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.Mockito; -- 2.11.0