Merge "Convert all SCREEN_OFF receivers to BroadcastDispatcher"
This commit is contained in:
committed by
Android (Google) Code Review
commit
6c98b3a672
@@ -17,6 +17,7 @@
|
||||
package com.android.systemui;
|
||||
|
||||
import com.android.systemui.keyguard.KeyguardViewMediator;
|
||||
import com.android.systemui.power.PowerUI;
|
||||
|
||||
import dagger.Binds;
|
||||
import dagger.Module;
|
||||
@@ -33,4 +34,10 @@ public abstract class SystemUIBinder {
|
||||
@IntoMap
|
||||
@ClassKey(KeyguardViewMediator.class)
|
||||
public abstract SystemUI bindKeyguardViewMediator(KeyguardViewMediator sysui);
|
||||
|
||||
/** Inject into PowerUI. */
|
||||
@Binds
|
||||
@IntoMap
|
||||
@ClassKey(PowerUI.class)
|
||||
public abstract SystemUI bindPowerUI(PowerUI sysui);
|
||||
}
|
||||
|
||||
@@ -75,7 +75,7 @@ open class BroadcastDispatcher @Inject constructor (
|
||||
* @param filter A filter to determine what broadcasts should be dispatched to this receiver.
|
||||
* It will only take into account actions and categories for filtering.
|
||||
* @param handler A handler to dispatch [BroadcastReceiver.onReceive]. By default, it is the
|
||||
* main handler.
|
||||
* main handler. Pass `null` to use the default.
|
||||
* @param user A user handle to determine which broadcast should be dispatched to this receiver.
|
||||
* By default, it is the current user.
|
||||
*/
|
||||
@@ -83,10 +83,12 @@ open class BroadcastDispatcher @Inject constructor (
|
||||
fun registerReceiver(
|
||||
receiver: BroadcastReceiver,
|
||||
filter: IntentFilter,
|
||||
handler: Handler = mainHandler,
|
||||
handler: Handler? = mainHandler,
|
||||
user: UserHandle = context.user
|
||||
) {
|
||||
this.handler.obtainMessage(MSG_ADD_RECEIVER, ReceiverData(receiver, filter, handler, user))
|
||||
this.handler
|
||||
.obtainMessage(MSG_ADD_RECEIVER,
|
||||
ReceiverData(receiver, filter, handler ?: mainHandler, user))
|
||||
.sendToTarget()
|
||||
}
|
||||
|
||||
|
||||
@@ -34,7 +34,7 @@ import java.util.concurrent.atomic.AtomicBoolean
|
||||
|
||||
private const val MSG_REGISTER_RECEIVER = 0
|
||||
private const val MSG_UNREGISTER_RECEIVER = 1
|
||||
private const val TAG = "UniversalReceiver"
|
||||
private const val TAG = "UserBroadcastDispatcher"
|
||||
private const val DEBUG = false
|
||||
|
||||
/**
|
||||
@@ -97,7 +97,7 @@ class UserBroadcastDispatcher(
|
||||
private val receiverToReceiverData = ArrayMap<BroadcastReceiver, MutableSet<ReceiverData>>()
|
||||
|
||||
override fun onReceive(context: Context, intent: Intent) {
|
||||
bgHandler.post(HandleBroadcastRunnable(actionsToReceivers, context, intent))
|
||||
bgHandler.post(HandleBroadcastRunnable(actionsToReceivers, context, intent, pendingResult))
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -160,7 +160,8 @@ class UserBroadcastDispatcher(
|
||||
private class HandleBroadcastRunnable(
|
||||
val actionsToReceivers: Map<String, Set<ReceiverData>>,
|
||||
val context: Context,
|
||||
val intent: Intent
|
||||
val intent: Intent,
|
||||
val pendingResult: PendingResult
|
||||
) : Runnable {
|
||||
override fun run() {
|
||||
if (DEBUG) Log.w(TAG, "Dispatching $intent")
|
||||
@@ -171,6 +172,7 @@ class UserBroadcastDispatcher(
|
||||
?.forEach {
|
||||
it.handler.post {
|
||||
if (DEBUG) Log.w(TAG, "Dispatching to ${it.receiver}")
|
||||
it.receiver.pendingResult = pendingResult
|
||||
it.receiver.onReceive(context, intent)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -90,6 +90,7 @@ import com.android.systemui.Dependency;
|
||||
import com.android.systemui.Interpolators;
|
||||
import com.android.systemui.MultiListLayout;
|
||||
import com.android.systemui.MultiListLayout.MultiListAdapter;
|
||||
import com.android.systemui.broadcast.BroadcastDispatcher;
|
||||
import com.android.systemui.colorextraction.SysuiColorExtractor;
|
||||
import com.android.systemui.plugins.ActivityStarter;
|
||||
import com.android.systemui.plugins.GlobalActions.GlobalActionsManager;
|
||||
@@ -187,7 +188,7 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
|
||||
filter.addAction(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
|
||||
filter.addAction(Intent.ACTION_SCREEN_OFF);
|
||||
filter.addAction(TelephonyIntents.ACTION_EMERGENCY_CALLBACK_MODE_CHANGED);
|
||||
context.registerReceiver(mBroadcastReceiver, filter);
|
||||
Dependency.get(BroadcastDispatcher.class).registerReceiver(mBroadcastReceiver, filter);
|
||||
|
||||
ConnectivityManager cm = (ConnectivityManager)
|
||||
context.getSystemService(Context.CONNECTIVITY_SERVICE);
|
||||
|
||||
@@ -45,6 +45,7 @@ import com.android.settingslib.utils.ThreadUtils;
|
||||
import com.android.systemui.Dependency;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.SystemUI;
|
||||
import com.android.systemui.broadcast.BroadcastDispatcher;
|
||||
import com.android.systemui.statusbar.phone.StatusBar;
|
||||
|
||||
import java.io.FileDescriptor;
|
||||
@@ -53,6 +54,8 @@ import java.time.Duration;
|
||||
import java.util.Arrays;
|
||||
import java.util.concurrent.Future;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
public class PowerUI extends SystemUI {
|
||||
|
||||
static final String TAG = "PowerUI";
|
||||
@@ -97,6 +100,12 @@ public class PowerUI extends SystemUI {
|
||||
|
||||
private IThermalEventListener mSkinThermalEventListener;
|
||||
private IThermalEventListener mUsbThermalEventListener;
|
||||
private final BroadcastDispatcher mBroadcastDispatcher;
|
||||
|
||||
@Inject
|
||||
public PowerUI(BroadcastDispatcher broadcastDispatcher) {
|
||||
mBroadcastDispatcher = broadcastDispatcher;
|
||||
}
|
||||
|
||||
public void start() {
|
||||
mPowerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
|
||||
@@ -211,7 +220,7 @@ public class PowerUI extends SystemUI {
|
||||
filter.addAction(Intent.ACTION_SCREEN_OFF);
|
||||
filter.addAction(Intent.ACTION_SCREEN_ON);
|
||||
filter.addAction(Intent.ACTION_USER_SWITCHED);
|
||||
mContext.registerReceiver(this, filter, null, mHandler);
|
||||
mBroadcastDispatcher.registerReceiver(this, filter, mHandler);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -61,8 +61,10 @@ import android.view.animation.DecelerateInterpolator;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.android.systemui.Dependency;
|
||||
import com.android.systemui.Prefs;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.broadcast.BroadcastDispatcher;
|
||||
import com.android.systemui.shared.recents.IOverviewProxy;
|
||||
import com.android.systemui.shared.system.ActivityManagerWrapper;
|
||||
import com.android.systemui.shared.system.QuickStepContract;
|
||||
@@ -245,10 +247,15 @@ public class RecentsOnboarding {
|
||||
|
||||
private final View.OnAttachStateChangeListener mOnAttachStateChangeListener
|
||||
= new View.OnAttachStateChangeListener() {
|
||||
|
||||
private final BroadcastDispatcher mBroadcastDispatcher = Dependency.get(
|
||||
BroadcastDispatcher.class);
|
||||
|
||||
@Override
|
||||
public void onViewAttachedToWindow(View view) {
|
||||
if (view == mLayout) {
|
||||
mContext.registerReceiver(mReceiver, new IntentFilter(Intent.ACTION_SCREEN_OFF));
|
||||
mBroadcastDispatcher.registerReceiver(mReceiver,
|
||||
new IntentFilter(Intent.ACTION_SCREEN_OFF));
|
||||
mLayoutAttachedToWindow = true;
|
||||
if (view.getTag().equals(R.string.recents_swipe_up_onboarding)) {
|
||||
mHasDismissedSwipeUpTip = false;
|
||||
@@ -273,7 +280,7 @@ public class RecentsOnboarding {
|
||||
}
|
||||
mOverviewOpenedCountSinceQuickScrubTipDismiss = 0;
|
||||
}
|
||||
mContext.unregisterReceiver(mReceiver);
|
||||
mBroadcastDispatcher.unregisterReceiver(mReceiver);
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -335,10 +342,11 @@ public class RecentsOnboarding {
|
||||
private void notifyOnTip(int action, int target) {
|
||||
try {
|
||||
IOverviewProxy overviewProxy = mOverviewProxyService.getProxy();
|
||||
if(overviewProxy != null) {
|
||||
if (overviewProxy != null) {
|
||||
overviewProxy.onTip(action, target);
|
||||
}
|
||||
} catch (RemoteException e) {}
|
||||
} catch (RemoteException e) {
|
||||
}
|
||||
}
|
||||
|
||||
public void onNavigationModeChanged(int mode) {
|
||||
|
||||
@@ -47,6 +47,7 @@ import android.widget.TextView;
|
||||
import com.android.systemui.Dependency;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.SysUiServiceProvider;
|
||||
import com.android.systemui.broadcast.BroadcastDispatcher;
|
||||
import com.android.systemui.shared.system.QuickStepContract;
|
||||
import com.android.systemui.shared.system.WindowManagerWrapper;
|
||||
import com.android.systemui.statusbar.phone.NavigationBarView;
|
||||
@@ -159,6 +160,8 @@ public class ScreenPinningRequest implements View.OnClickListener,
|
||||
private ValueAnimator mColorAnim;
|
||||
private ViewGroup mLayout;
|
||||
private boolean mShowCancel;
|
||||
private final BroadcastDispatcher mBroadcastDispatcher =
|
||||
Dependency.get(BroadcastDispatcher.class);
|
||||
|
||||
public RequestWindowView(Context context, boolean showCancel) {
|
||||
super(context);
|
||||
@@ -212,7 +215,7 @@ public class ScreenPinningRequest implements View.OnClickListener,
|
||||
IntentFilter filter = new IntentFilter(Intent.ACTION_CONFIGURATION_CHANGED);
|
||||
filter.addAction(Intent.ACTION_USER_SWITCHED);
|
||||
filter.addAction(Intent.ACTION_SCREEN_OFF);
|
||||
mContext.registerReceiver(mReceiver, filter);
|
||||
mBroadcastDispatcher.registerReceiver(mReceiver, filter);
|
||||
}
|
||||
|
||||
private void inflateView(int rotation) {
|
||||
@@ -313,7 +316,7 @@ public class ScreenPinningRequest implements View.OnClickListener,
|
||||
|
||||
@Override
|
||||
public void onDetachedFromWindow() {
|
||||
mContext.unregisterReceiver(mReceiver);
|
||||
mBroadcastDispatcher.unregisterReceiver(mReceiver);
|
||||
}
|
||||
|
||||
protected void onConfigurationChanged() {
|
||||
|
||||
@@ -89,6 +89,7 @@ import com.android.systemui.R;
|
||||
import com.android.systemui.SysUiServiceProvider;
|
||||
import com.android.systemui.assist.AssistHandleViewController;
|
||||
import com.android.systemui.assist.AssistManager;
|
||||
import com.android.systemui.broadcast.BroadcastDispatcher;
|
||||
import com.android.systemui.fragments.FragmentHostManager;
|
||||
import com.android.systemui.fragments.FragmentHostManager.FragmentListener;
|
||||
import com.android.systemui.model.SysUiState;
|
||||
@@ -171,6 +172,8 @@ public class NavigationBarFragment extends LifecycleFragment implements Callback
|
||||
|
||||
private OverviewProxyService mOverviewProxyService;
|
||||
|
||||
private final BroadcastDispatcher mBroadcastDispatcher;
|
||||
|
||||
@VisibleForTesting
|
||||
public int mDisplayId;
|
||||
private boolean mIsOnDefaultDisplay;
|
||||
@@ -252,7 +255,8 @@ public class NavigationBarFragment extends LifecycleFragment implements Callback
|
||||
AssistManager assistManager, OverviewProxyService overviewProxyService,
|
||||
NavigationModeController navigationModeController,
|
||||
StatusBarStateController statusBarStateController,
|
||||
SysUiState sysUiFlagsContainer) {
|
||||
SysUiState sysUiFlagsContainer,
|
||||
BroadcastDispatcher broadcastDispatcher) {
|
||||
mAccessibilityManagerWrapper = accessibilityManagerWrapper;
|
||||
mDeviceProvisionedController = deviceProvisionedController;
|
||||
mStatusBarStateController = statusBarStateController;
|
||||
@@ -263,6 +267,7 @@ public class NavigationBarFragment extends LifecycleFragment implements Callback
|
||||
mOverviewProxyService = overviewProxyService;
|
||||
mNavigationModeController = navigationModeController;
|
||||
mNavBarMode = navigationModeController.addListener(this);
|
||||
mBroadcastDispatcher = broadcastDispatcher;
|
||||
}
|
||||
|
||||
// ----- Fragment Lifecycle Callbacks -----
|
||||
@@ -340,7 +345,8 @@ public class NavigationBarFragment extends LifecycleFragment implements Callback
|
||||
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF);
|
||||
filter.addAction(Intent.ACTION_SCREEN_ON);
|
||||
filter.addAction(Intent.ACTION_USER_SWITCHED);
|
||||
getContext().registerReceiverAsUser(mBroadcastReceiver, UserHandle.ALL, filter, null, null);
|
||||
mBroadcastDispatcher.registerReceiver(mBroadcastReceiver, filter, Handler.getMain(),
|
||||
UserHandle.ALL);
|
||||
notifyNavigationBarScreenOn();
|
||||
|
||||
mOverviewProxyService.addCallback(mOverviewProxyListener);
|
||||
@@ -383,7 +389,7 @@ public class NavigationBarFragment extends LifecycleFragment implements Callback
|
||||
mNavigationBarView.getLightTransitionsController().destroy(getContext());
|
||||
}
|
||||
mOverviewProxyService.removeCallback(mOverviewProxyListener);
|
||||
getContext().unregisterReceiver(mBroadcastReceiver);
|
||||
mBroadcastDispatcher.unregisterReceiver(mBroadcastReceiver);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -147,6 +147,7 @@ import com.android.systemui.SystemUIFactory;
|
||||
import com.android.systemui.UiOffloadThread;
|
||||
import com.android.systemui.appops.AppOpsController;
|
||||
import com.android.systemui.assist.AssistManager;
|
||||
import com.android.systemui.broadcast.BroadcastDispatcher;
|
||||
import com.android.systemui.bubbles.BubbleController;
|
||||
import com.android.systemui.charging.WirelessChargingAnimation;
|
||||
import com.android.systemui.classifier.FalsingLog;
|
||||
@@ -223,7 +224,6 @@ import com.android.systemui.statusbar.policy.DeviceProvisionedController.DeviceP
|
||||
import com.android.systemui.statusbar.policy.ExtensionController;
|
||||
import com.android.systemui.statusbar.policy.HeadsUpManager;
|
||||
import com.android.systemui.statusbar.policy.KeyguardStateController;
|
||||
import com.android.systemui.statusbar.policy.KeyguardStateControllerImpl;
|
||||
import com.android.systemui.statusbar.policy.KeyguardUserSwitcher;
|
||||
import com.android.systemui.statusbar.policy.NetworkController;
|
||||
import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener;
|
||||
@@ -394,6 +394,9 @@ public class StatusBar extends SystemUI implements DemoMode,
|
||||
@Inject
|
||||
protected NotifPipelineInitializer mNotifPipelineInitializer;
|
||||
|
||||
@VisibleForTesting
|
||||
BroadcastDispatcher mBroadcastDispatcher;
|
||||
|
||||
// expanded notifications
|
||||
protected NotificationPanelView mNotificationPanel; // the sliding/resizing panel within the notification window
|
||||
|
||||
@@ -668,6 +671,7 @@ public class StatusBar extends SystemUI implements DemoMode,
|
||||
mBubbleController = Dependency.get(BubbleController.class);
|
||||
mBubbleController.setExpandListener(mBubbleExpandListener);
|
||||
mActivityIntentHelper = new ActivityIntentHelper(mContext);
|
||||
mBroadcastDispatcher = Dependency.get(BroadcastDispatcher.class);
|
||||
KeyguardSliceProvider sliceProvider = KeyguardSliceProvider.getAttachedInstance();
|
||||
if (sliceProvider != null) {
|
||||
sliceProvider.initDependencies(mMediaManager, mStatusBarStateController,
|
||||
@@ -1049,11 +1053,7 @@ public class StatusBar extends SystemUI implements DemoMode,
|
||||
}
|
||||
|
||||
// receive broadcasts
|
||||
IntentFilter filter = new IntentFilter();
|
||||
filter.addAction(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
|
||||
filter.addAction(Intent.ACTION_SCREEN_OFF);
|
||||
filter.addAction(DevicePolicyManager.ACTION_SHOW_DEVICE_MONITORING_DIALOG);
|
||||
context.registerReceiverAsUser(mBroadcastReceiver, UserHandle.ALL, filter, null, null);
|
||||
registerBroadcastReceiver();
|
||||
|
||||
IntentFilter demoFilter = new IntentFilter();
|
||||
if (DEBUG_MEDIA_FAKE_ARTWORK) {
|
||||
@@ -1074,6 +1074,15 @@ public class StatusBar extends SystemUI implements DemoMode,
|
||||
ThreadedRenderer.overrideProperty("ambientRatio", String.valueOf(1.5f));
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
protected void registerBroadcastReceiver() {
|
||||
IntentFilter filter = new IntentFilter();
|
||||
filter.addAction(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
|
||||
filter.addAction(Intent.ACTION_SCREEN_OFF);
|
||||
filter.addAction(DevicePolicyManager.ACTION_SHOW_DEVICE_MONITORING_DIALOG);
|
||||
mBroadcastDispatcher.registerReceiver(mBroadcastReceiver, filter, null, UserHandle.ALL);
|
||||
}
|
||||
|
||||
protected QS createDefaultQSFragment() {
|
||||
return FragmentHostManager.get(mStatusBarWindow).create(QSFragment.class);
|
||||
}
|
||||
|
||||
@@ -28,6 +28,7 @@ import android.view.WindowManager.LayoutParams;
|
||||
|
||||
import com.android.systemui.Dependency;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.broadcast.BroadcastDispatcher;
|
||||
import com.android.systemui.statusbar.policy.KeyguardStateController;
|
||||
|
||||
|
||||
@@ -138,20 +139,21 @@ public class SystemUIDialog extends AlertDialog {
|
||||
|
||||
private final Dialog mDialog;
|
||||
private boolean mRegistered;
|
||||
private final BroadcastDispatcher mBroadcastDispatcher;
|
||||
|
||||
DismissReceiver(Dialog dialog) {
|
||||
mDialog = dialog;
|
||||
mBroadcastDispatcher = Dependency.get(BroadcastDispatcher.class);
|
||||
}
|
||||
|
||||
void register() {
|
||||
mDialog.getContext()
|
||||
.registerReceiverAsUser(this, UserHandle.CURRENT, INTENT_FILTER, null, null);
|
||||
mBroadcastDispatcher.registerReceiver(this, INTENT_FILTER, null, UserHandle.CURRENT);
|
||||
mRegistered = true;
|
||||
}
|
||||
|
||||
void unregister() {
|
||||
if (mRegistered) {
|
||||
mDialog.getContext().unregisterReceiver(this);
|
||||
mBroadcastDispatcher.unregisterReceiver(this);
|
||||
mRegistered = false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,6 +16,8 @@
|
||||
|
||||
package com.android.systemui.statusbar.policy;
|
||||
|
||||
import static com.android.systemui.util.InjectionInflationController.VIEW_CONTEXT;
|
||||
|
||||
import android.app.StatusBarManager;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
@@ -44,6 +46,7 @@ import com.android.systemui.Dependency;
|
||||
import com.android.systemui.FontSizeUtils;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.SysUiServiceProvider;
|
||||
import com.android.systemui.broadcast.BroadcastDispatcher;
|
||||
import com.android.systemui.plugins.DarkIconDispatcher;
|
||||
import com.android.systemui.plugins.DarkIconDispatcher.DarkReceiver;
|
||||
import com.android.systemui.settings.CurrentUserTracker;
|
||||
@@ -60,6 +63,9 @@ import java.util.Calendar;
|
||||
import java.util.Locale;
|
||||
import java.util.TimeZone;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
|
||||
/**
|
||||
* Digital clock for the status bar.
|
||||
*/
|
||||
@@ -107,15 +113,20 @@ public class Clock extends TextView implements DemoMode, Tunable, CommandQueue.C
|
||||
*/
|
||||
private int mNonAdaptedColor;
|
||||
|
||||
public Clock(Context context) {
|
||||
this(context, null);
|
||||
}
|
||||
private final BroadcastDispatcher mBroadcastDispatcher;
|
||||
|
||||
public Clock(Context context, AttributeSet attrs) {
|
||||
this(context, attrs, 0);
|
||||
this(context, attrs, null);
|
||||
}
|
||||
|
||||
public Clock(Context context, AttributeSet attrs, int defStyle) {
|
||||
@Inject
|
||||
public Clock(@Named(VIEW_CONTEXT) Context context, AttributeSet attrs,
|
||||
BroadcastDispatcher broadcastDispatcher) {
|
||||
this(context, attrs, 0, broadcastDispatcher);
|
||||
}
|
||||
|
||||
public Clock(Context context, AttributeSet attrs, int defStyle,
|
||||
BroadcastDispatcher broadcastDispatcher) {
|
||||
super(context, attrs, defStyle);
|
||||
TypedArray a = context.getTheme().obtainStyledAttributes(
|
||||
attrs,
|
||||
@@ -134,6 +145,7 @@ public class Clock extends TextView implements DemoMode, Tunable, CommandQueue.C
|
||||
mCurrentUserId = newUserId;
|
||||
}
|
||||
};
|
||||
mBroadcastDispatcher = broadcastDispatcher;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -358,11 +370,11 @@ public class Clock extends TextView implements DemoMode, Tunable, CommandQueue.C
|
||||
}
|
||||
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF);
|
||||
filter.addAction(Intent.ACTION_SCREEN_ON);
|
||||
mContext.registerReceiver(mScreenReceiver, filter);
|
||||
mBroadcastDispatcher.registerReceiver(mScreenReceiver, filter);
|
||||
}
|
||||
} else {
|
||||
if (mSecondsHandler != null) {
|
||||
mContext.unregisterReceiver(mScreenReceiver);
|
||||
mBroadcastDispatcher.unregisterReceiver(mScreenReceiver);
|
||||
mSecondsHandler.removeCallbacks(mSecondTick);
|
||||
mSecondsHandler = null;
|
||||
updateClock();
|
||||
|
||||
@@ -37,6 +37,7 @@ import com.android.systemui.statusbar.NotificationShelf;
|
||||
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout;
|
||||
import com.android.systemui.statusbar.phone.LockIcon;
|
||||
import com.android.systemui.statusbar.phone.NotificationPanelView;
|
||||
import com.android.systemui.statusbar.policy.Clock;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
@@ -178,6 +179,11 @@ public class InjectionInflationController {
|
||||
* Creates the QSCustomizer.
|
||||
*/
|
||||
QSCustomizer createQSCustomizer();
|
||||
|
||||
/**
|
||||
* Creates a Clock.
|
||||
*/
|
||||
Clock createClock();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -59,6 +59,7 @@ import com.android.settingslib.volume.MediaSessions;
|
||||
import com.android.systemui.Dumpable;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.SysUiServiceProvider;
|
||||
import com.android.systemui.broadcast.BroadcastDispatcher;
|
||||
import com.android.systemui.keyguard.WakefulnessLifecycle;
|
||||
import com.android.systemui.plugins.VolumeDialogController;
|
||||
import com.android.systemui.qs.tiles.DndTile;
|
||||
@@ -137,9 +138,10 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa
|
||||
private UserActivityListener mUserActivityListener;
|
||||
|
||||
protected final VC mVolumeController = new VC();
|
||||
protected final BroadcastDispatcher mBroadcastDispatcher;
|
||||
|
||||
@Inject
|
||||
public VolumeDialogControllerImpl(Context context) {
|
||||
public VolumeDialogControllerImpl(Context context, BroadcastDispatcher broadcastDispatcher) {
|
||||
mContext = context.getApplicationContext();
|
||||
mNotificationManager = (NotificationManager) mContext.getSystemService(
|
||||
Context.NOTIFICATION_SERVICE);
|
||||
@@ -152,6 +154,7 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa
|
||||
mAudio = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
|
||||
mNoMan = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
mObserver = new SettingObserver(mWorker);
|
||||
mBroadcastDispatcher = broadcastDispatcher;
|
||||
mObserver.init();
|
||||
mReceiver.init();
|
||||
mVibrator = (Vibrator) mContext.getSystemService(Context.VIBRATOR_SERVICE);
|
||||
@@ -1004,11 +1007,11 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa
|
||||
filter.addAction(Intent.ACTION_CONFIGURATION_CHANGED);
|
||||
filter.addAction(Intent.ACTION_SCREEN_OFF);
|
||||
filter.addAction(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
|
||||
mContext.registerReceiver(this, filter, null, mWorker);
|
||||
mBroadcastDispatcher.registerReceiver(this, filter, mWorker);
|
||||
}
|
||||
|
||||
public void destroy() {
|
||||
mContext.unregisterReceiver(this);
|
||||
mBroadcastDispatcher.unregisterReceiver(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -70,6 +70,8 @@ class UserBroadcastDispatcherTest : SysuiTestCase() {
|
||||
private lateinit var mockContext: Context
|
||||
@Mock
|
||||
private lateinit var mockHandler: Handler
|
||||
@Mock
|
||||
private lateinit var mPendingResult: BroadcastReceiver.PendingResult
|
||||
|
||||
@Captor
|
||||
private lateinit var argumentCaptor: ArgumentCaptor<IntentFilter>
|
||||
@@ -88,6 +90,7 @@ class UserBroadcastDispatcherTest : SysuiTestCase() {
|
||||
|
||||
universalBroadcastReceiver = UserBroadcastDispatcher(
|
||||
mockContext, USER_ID, handler, testableLooper.looper)
|
||||
universalBroadcastReceiver.pendingResult = mPendingResult
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -227,4 +230,19 @@ class UserBroadcastDispatcherTest : SysuiTestCase() {
|
||||
verify(broadcastReceiver).onReceive(mockContext, intent)
|
||||
verify(broadcastReceiverOther).onReceive(mockContext, intent)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testPendingResult() {
|
||||
intentFilter = IntentFilter(ACTION_1)
|
||||
universalBroadcastReceiver.registerReceiver(
|
||||
ReceiverData(broadcastReceiver, intentFilter, handler, USER_HANDLE))
|
||||
|
||||
val intent = Intent(ACTION_1)
|
||||
universalBroadcastReceiver.onReceive(mockContext, intent)
|
||||
|
||||
testableLooper.processAllMessages()
|
||||
|
||||
verify(broadcastReceiver).onReceive(mockContext, intent)
|
||||
verify(broadcastReceiver).pendingResult = mPendingResult
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@ import static android.provider.Settings.Global.SHOW_USB_TEMPERATURE_ALARM;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Matchers.eq;
|
||||
import static org.mockito.Mockito.anyObject;
|
||||
import static org.mockito.Mockito.mock;
|
||||
@@ -27,8 +28,11 @@ import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.IntentFilter;
|
||||
import android.os.BatteryManager;
|
||||
import android.os.Handler;
|
||||
import android.os.IThermalEventListener;
|
||||
import android.os.IThermalService;
|
||||
import android.os.PowerManager;
|
||||
@@ -43,6 +47,7 @@ import android.testing.TestableResources;
|
||||
import com.android.settingslib.fuelgauge.Estimate;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.SysuiTestCase;
|
||||
import com.android.systemui.broadcast.BroadcastDispatcher;
|
||||
import com.android.systemui.power.PowerUI.WarningsUI;
|
||||
import com.android.systemui.statusbar.phone.StatusBar;
|
||||
|
||||
@@ -80,6 +85,7 @@ public class PowerUITest extends SysuiTestCase {
|
||||
@Mock private IThermalService mThermalServiceMock;
|
||||
private IThermalEventListener mUsbThermalEventListener;
|
||||
private IThermalEventListener mSkinThermalEventListener;
|
||||
@Mock private BroadcastDispatcher mBroadcastDispatcher;
|
||||
|
||||
@Before
|
||||
public void setup() {
|
||||
@@ -95,6 +101,15 @@ public class PowerUITest extends SysuiTestCase {
|
||||
mUsbThermalEventListener = mPowerUI.new UsbThermalEventListener();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testReceiverIsRegisteredToDispatcherOnStart() {
|
||||
mPowerUI.start();
|
||||
verify(mBroadcastDispatcher).registerReceiver(
|
||||
any(BroadcastReceiver.class),
|
||||
any(IntentFilter.class),
|
||||
any(Handler.class)); //PowerUI does not call with User
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSkinWarning_throttlingCritical() throws Exception {
|
||||
mPowerUI.start();
|
||||
@@ -667,7 +682,7 @@ public class PowerUITest extends SysuiTestCase {
|
||||
}
|
||||
|
||||
private void createPowerUi() {
|
||||
mPowerUI = new PowerUI();
|
||||
mPowerUI = new PowerUI(mBroadcastDispatcher);
|
||||
mPowerUI.mContext = mContext;
|
||||
mPowerUI.mComponents = mContext.getComponents();
|
||||
mPowerUI.mThermalService = mThermalServiceMock;
|
||||
|
||||
@@ -24,9 +24,11 @@ import static android.view.DisplayAdjustments.DEFAULT_DISPLAY_ADJUSTMENTS;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyBoolean;
|
||||
import static org.mockito.ArgumentMatchers.anyInt;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.annotation.LayoutRes;
|
||||
@@ -34,11 +36,14 @@ import android.annotation.Nullable;
|
||||
import android.app.Fragment;
|
||||
import android.app.FragmentController;
|
||||
import android.app.FragmentHostCallback;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.IntentFilter;
|
||||
import android.hardware.display.DisplayManagerGlobal;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.os.UserHandle;
|
||||
import android.testing.AndroidTestingRunner;
|
||||
import android.testing.LeakCheck.Tracker;
|
||||
import android.testing.TestableLooper;
|
||||
@@ -58,6 +63,7 @@ import com.android.systemui.Dependency;
|
||||
import com.android.systemui.SysuiBaseFragmentTest;
|
||||
import com.android.systemui.SysuiTestableContext;
|
||||
import com.android.systemui.assist.AssistManager;
|
||||
import com.android.systemui.broadcast.BroadcastDispatcher;
|
||||
import com.android.systemui.model.SysUiState;
|
||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||
import com.android.systemui.recents.OverviewProxyService;
|
||||
@@ -70,6 +76,8 @@ import com.android.systemui.statusbar.policy.DeviceProvisionedController;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
|
||||
@RunWith(AndroidTestingRunner.class)
|
||||
@RunWithLooper()
|
||||
@@ -85,6 +93,8 @@ public class NavigationBarFragmentTest extends SysuiBaseFragmentTest {
|
||||
private OverviewProxyService mOverviewProxyService;
|
||||
private CommandQueue mCommandQueue;
|
||||
private SysUiState mMockSysUiState;
|
||||
@Mock
|
||||
private BroadcastDispatcher mBroadcastDispatcher;
|
||||
|
||||
private AccessibilityManagerWrapper mAccessibilityWrapper =
|
||||
new AccessibilityManagerWrapper(mContext) {
|
||||
@@ -112,6 +122,8 @@ public class NavigationBarFragmentTest extends SysuiBaseFragmentTest {
|
||||
|
||||
@Before
|
||||
public void setupFragment() throws Exception {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
|
||||
setupSysuiDependency();
|
||||
createRootView();
|
||||
mOverviewProxyService =
|
||||
@@ -176,6 +188,18 @@ public class NavigationBarFragmentTest extends SysuiBaseFragmentTest {
|
||||
navigationBarFragment.onHomeLongClick(navigationBarFragment.getView());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRegisteredWithDispatcher() {
|
||||
mFragments.dispatchResume();
|
||||
processAllMessages();
|
||||
|
||||
verify(mBroadcastDispatcher).registerReceiver(
|
||||
any(BroadcastReceiver.class),
|
||||
any(IntentFilter.class),
|
||||
any(Handler.class),
|
||||
any(UserHandle.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSetImeWindowStatusWhenImeSwitchOnDisplay() {
|
||||
// Create default & external NavBar fragment.
|
||||
@@ -227,7 +251,8 @@ public class NavigationBarFragmentTest extends SysuiBaseFragmentTest {
|
||||
mOverviewProxyService,
|
||||
mock(NavigationModeController.class),
|
||||
mock(StatusBarStateController.class),
|
||||
mMockSysUiState);
|
||||
mMockSysUiState,
|
||||
mBroadcastDispatcher);
|
||||
}
|
||||
|
||||
private class HostCallbacksForExternalDisplay extends
|
||||
|
||||
@@ -41,7 +41,9 @@ import static org.mockito.Mockito.when;
|
||||
import android.app.Notification;
|
||||
import android.app.StatusBarManager;
|
||||
import android.app.trust.TrustManager;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.IntentFilter;
|
||||
import android.hardware.display.AmbientDisplayConfiguration;
|
||||
import android.hardware.fingerprint.FingerprintManager;
|
||||
import android.metrics.LogMaker;
|
||||
@@ -51,6 +53,7 @@ import android.os.IPowerManager;
|
||||
import android.os.Looper;
|
||||
import android.os.PowerManager;
|
||||
import android.os.RemoteException;
|
||||
import android.os.UserHandle;
|
||||
import android.service.dreams.IDreamManager;
|
||||
import android.support.test.metricshelper.MetricsAsserts;
|
||||
import android.testing.AndroidTestingRunner;
|
||||
@@ -75,6 +78,7 @@ import com.android.systemui.SysuiTestCase;
|
||||
import com.android.systemui.UiOffloadThread;
|
||||
import com.android.systemui.appops.AppOpsController;
|
||||
import com.android.systemui.assist.AssistManager;
|
||||
import com.android.systemui.broadcast.BroadcastDispatcher;
|
||||
import com.android.systemui.bubbles.BubbleController;
|
||||
import com.android.systemui.doze.DozeHost;
|
||||
import com.android.systemui.doze.DozeLog;
|
||||
@@ -171,6 +175,8 @@ public class StatusBarTest extends SysuiTestCase {
|
||||
private AmbientDisplayConfiguration mAmbientDisplayConfiguration;
|
||||
@Mock
|
||||
private StatusBarWindowView mStatusBarWindowView;
|
||||
@Mock
|
||||
private BroadcastDispatcher mBroadcastDispatcher;
|
||||
|
||||
private TestableStatusBar mStatusBar;
|
||||
private FakeMetricsLogger mMetricsLogger;
|
||||
@@ -199,6 +205,7 @@ public class StatusBarTest extends SysuiTestCase {
|
||||
mDependency.injectTestDependency(NotificationFilter.class, mNotificationFilter);
|
||||
mDependency.injectTestDependency(NotificationAlertingManager.class,
|
||||
mNotificationAlertingManager);
|
||||
mDependency.injectTestDependency(BroadcastDispatcher.class, mBroadcastDispatcher);
|
||||
|
||||
IPowerManager powerManagerService = mock(IPowerManager.class);
|
||||
mPowerManager = new PowerManager(mContext, powerManagerService,
|
||||
@@ -263,7 +270,8 @@ public class StatusBarTest extends SysuiTestCase {
|
||||
mDozeScrimController, mock(NotificationShelf.class),
|
||||
mLockscreenUserManager, mCommandQueue, mNotificationPresenter,
|
||||
mock(BubbleController.class), mock(NavigationBarController.class),
|
||||
mock(AutoHideController.class), mKeyguardUpdateMonitor, mStatusBarWindowView);
|
||||
mock(AutoHideController.class), mKeyguardUpdateMonitor, mStatusBarWindowView,
|
||||
mBroadcastDispatcher);
|
||||
mStatusBar.mContext = mContext;
|
||||
mStatusBar.mComponents = mContext.getComponents();
|
||||
SystemUIFactory.getInstance().getRootComponent()
|
||||
@@ -774,6 +782,16 @@ public class StatusBarTest extends SysuiTestCase {
|
||||
verify(mNotificationPanelView, never()).expand(anyBoolean());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRegisterBroadcastsonDispatcher() {
|
||||
mStatusBar.registerBroadcastReceiver();
|
||||
verify(mBroadcastDispatcher).registerReceiver(
|
||||
any(BroadcastReceiver.class),
|
||||
any(IntentFilter.class),
|
||||
eq(null),
|
||||
any(UserHandle.class));
|
||||
}
|
||||
|
||||
static class TestableStatusBar extends StatusBar {
|
||||
public TestableStatusBar(StatusBarKeyguardViewManager man,
|
||||
KeyguardIndicationController key,
|
||||
@@ -801,7 +819,8 @@ public class StatusBarTest extends SysuiTestCase {
|
||||
NavigationBarController navBarController,
|
||||
AutoHideController autoHideController,
|
||||
KeyguardUpdateMonitor keyguardUpdateMonitor,
|
||||
StatusBarWindowView statusBarWindow) {
|
||||
StatusBarWindowView statusBarWindow,
|
||||
BroadcastDispatcher broadcastDispatcher) {
|
||||
mStatusBarKeyguardViewManager = man;
|
||||
mKeyguardIndicationController = key;
|
||||
mStackScroller = stack;
|
||||
@@ -835,6 +854,7 @@ public class StatusBarTest extends SysuiTestCase {
|
||||
mKeyguardUpdateMonitor = keyguardUpdateMonitor;
|
||||
mStatusBarWindow = statusBarWindow;
|
||||
mDozeServiceHost.mWakeLockScreenPerformsAuth = false;
|
||||
mBroadcastDispatcher = broadcastDispatcher;
|
||||
}
|
||||
|
||||
private WakefulnessLifecycle createAwakeWakefulnessLifecycle() {
|
||||
|
||||
@@ -18,11 +18,9 @@ import static junit.framework.Assert.assertTrue;
|
||||
|
||||
import static org.mockito.Matchers.any;
|
||||
import static org.mockito.Matchers.eq;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.verify;
|
||||
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.testing.AndroidTestingRunner;
|
||||
@@ -31,11 +29,14 @@ import android.testing.TestableLooper.RunWithLooper;
|
||||
import androidx.test.filters.SmallTest;
|
||||
|
||||
import com.android.systemui.SysuiTestCase;
|
||||
import com.android.systemui.broadcast.BroadcastDispatcher;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.ArgumentCaptor;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
|
||||
@RunWith(AndroidTestingRunner.class)
|
||||
@RunWithLooper
|
||||
@@ -43,13 +44,16 @@ import org.mockito.ArgumentCaptor;
|
||||
public class SystemUIDialogTest extends SysuiTestCase {
|
||||
|
||||
private SystemUIDialog mDialog;
|
||||
|
||||
Context mContextSpy;
|
||||
@Mock
|
||||
private BroadcastDispatcher mBroadcastDispatcher;
|
||||
|
||||
@Before
|
||||
public void setup() {
|
||||
mContextSpy = spy(mContext);
|
||||
mDialog = new SystemUIDialog(mContextSpy);
|
||||
MockitoAnnotations.initMocks(this);
|
||||
|
||||
mDependency.injectTestDependency(BroadcastDispatcher.class, mBroadcastDispatcher);
|
||||
|
||||
mDialog = new SystemUIDialog(mContext);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -60,12 +64,12 @@ public class SystemUIDialogTest extends SysuiTestCase {
|
||||
ArgumentCaptor.forClass(IntentFilter.class);
|
||||
|
||||
mDialog.show();
|
||||
verify(mContextSpy).registerReceiverAsUser(broadcastReceiverCaptor.capture(), any(),
|
||||
intentFilterCaptor.capture(), any(), any());
|
||||
verify(mBroadcastDispatcher).registerReceiver(broadcastReceiverCaptor.capture(),
|
||||
intentFilterCaptor.capture(), eq(null), any());
|
||||
|
||||
assertTrue(intentFilterCaptor.getValue().hasAction(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));
|
||||
|
||||
mDialog.dismiss();
|
||||
verify(mContextSpy).unregisterReceiver(eq(broadcastReceiverCaptor.getValue()));
|
||||
verify(mBroadcastDispatcher).unregisterReceiver(eq(broadcastReceiverCaptor.getValue()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,40 +16,63 @@
|
||||
|
||||
package com.android.systemui.volume;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.IntentFilter;
|
||||
import android.media.AudioManager;
|
||||
import android.media.session.MediaSession;
|
||||
import android.os.Handler;
|
||||
import android.testing.AndroidTestingRunner;
|
||||
|
||||
import androidx.test.filters.SmallTest;
|
||||
|
||||
import com.android.systemui.SysuiTestCase;
|
||||
import com.android.systemui.broadcast.BroadcastDispatcher;
|
||||
import com.android.systemui.keyguard.WakefulnessLifecycle;
|
||||
import com.android.systemui.statusbar.phone.StatusBar;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
|
||||
@RunWith(AndroidTestingRunner.class)
|
||||
@SmallTest
|
||||
public class VolumeDialogControllerImplTest extends SysuiTestCase {
|
||||
|
||||
TestableVolumeDialogControllerImpl mVolumeController;
|
||||
VolumeDialogControllerImpl.C mCallback;
|
||||
StatusBar mStatusBar;
|
||||
@Mock
|
||||
private BroadcastDispatcher mBroadcastDispatcher;
|
||||
|
||||
@Before
|
||||
public void setup() throws Exception {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
|
||||
mCallback = mock(VolumeDialogControllerImpl.C.class);
|
||||
mStatusBar = mock(StatusBar.class);
|
||||
mVolumeController = new TestableVolumeDialogControllerImpl(mContext, mCallback, mStatusBar);
|
||||
mVolumeController = new TestableVolumeDialogControllerImpl(mContext, mCallback, mStatusBar,
|
||||
mBroadcastDispatcher);
|
||||
mVolumeController.setEnableDialogs(true, true);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRegisteredWithDispatcher() {
|
||||
verify(mBroadcastDispatcher).registerReceiver(
|
||||
any(BroadcastReceiver.class),
|
||||
any(IntentFilter.class),
|
||||
any(Handler.class)); // VolumeDialogControllerImpl does not call with user
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testVolumeChangeW_deviceNotInteractiveAOD() {
|
||||
when(mStatusBar.isDeviceInteractive()).thenReturn(false);
|
||||
@@ -81,7 +104,7 @@ public class VolumeDialogControllerImplTest extends SysuiTestCase {
|
||||
public void testVolumeChangeW_nullStatusBar() {
|
||||
VolumeDialogControllerImpl.C callback = mock(VolumeDialogControllerImpl.C.class);
|
||||
TestableVolumeDialogControllerImpl nullStatusBarTestableDialog = new
|
||||
TestableVolumeDialogControllerImpl(mContext, callback, null);
|
||||
TestableVolumeDialogControllerImpl(mContext, callback, null, mBroadcastDispatcher);
|
||||
nullStatusBarTestableDialog.setEnableDialogs(true, true);
|
||||
nullStatusBarTestableDialog.onVolumeChangedW(0, AudioManager.FLAG_SHOW_UI);
|
||||
verify(callback, times(1)).onShowRequested(Events.SHOW_REASON_VOLUME_CHANGED);
|
||||
@@ -100,8 +123,9 @@ public class VolumeDialogControllerImplTest extends SysuiTestCase {
|
||||
}
|
||||
|
||||
static class TestableVolumeDialogControllerImpl extends VolumeDialogControllerImpl {
|
||||
public TestableVolumeDialogControllerImpl(Context context, C callback, StatusBar s) {
|
||||
super(context);
|
||||
TestableVolumeDialogControllerImpl(Context context, C callback, StatusBar s,
|
||||
BroadcastDispatcher broadcastDispatcher) {
|
||||
super(context, broadcastDispatcher);
|
||||
mCallbacks = callback;
|
||||
mStatusBar = s;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user