Merge "Make StatusBar purely optional" into sc-v2-dev

This commit is contained in:
TreeHugger Robot
2021-07-15 21:40:20 +00:00
committed by Android (Google) Code Review
39 changed files with 254 additions and 201 deletions

View File

@@ -39,113 +39,114 @@ import dagger.Lazy;
@SysUISingleton
public class ActivityStarterDelegate implements ActivityStarter {
private Optional<Lazy<StatusBar>> mActualStarter;
private Lazy<Optional<StatusBar>> mActualStarterOptionalLazy;
@Inject
public ActivityStarterDelegate(Optional<Lazy<StatusBar>> statusBar) {
mActualStarter = statusBar;
public ActivityStarterDelegate(Lazy<Optional<StatusBar>> statusBarOptionalLazy) {
mActualStarterOptionalLazy = statusBarOptionalLazy;
}
@Override
public void startPendingIntentDismissingKeyguard(PendingIntent intent) {
mActualStarter.ifPresent(
starter -> starter.get().startPendingIntentDismissingKeyguard(intent));
mActualStarterOptionalLazy.get().ifPresent(
starter -> starter.startPendingIntentDismissingKeyguard(intent));
}
@Override
public void startPendingIntentDismissingKeyguard(PendingIntent intent,
Runnable intentSentUiThreadCallback) {
mActualStarter.ifPresent(
starter -> starter.get().startPendingIntentDismissingKeyguard(intent,
intentSentUiThreadCallback));
mActualStarterOptionalLazy.get().ifPresent(
starter -> starter.startPendingIntentDismissingKeyguard(
intent, intentSentUiThreadCallback));
}
@Override
public void startPendingIntentDismissingKeyguard(PendingIntent intent,
Runnable intentSentUiThreadCallback, View associatedView) {
mActualStarter.ifPresent(
starter -> starter.get().startPendingIntentDismissingKeyguard(intent,
intentSentUiThreadCallback, associatedView));
mActualStarterOptionalLazy.get().ifPresent(
starter -> starter.startPendingIntentDismissingKeyguard(
intent, intentSentUiThreadCallback, associatedView));
}
@Override
public void startPendingIntentDismissingKeyguard(PendingIntent intent,
Runnable intentSentUiThreadCallback,
ActivityLaunchAnimator.Controller animationController) {
mActualStarter.ifPresent(
starter -> starter.get().startPendingIntentDismissingKeyguard(intent,
intentSentUiThreadCallback, animationController));
mActualStarterOptionalLazy.get().ifPresent(
starter -> starter.startPendingIntentDismissingKeyguard(
intent, intentSentUiThreadCallback, animationController));
}
@Override
public void startActivity(Intent intent, boolean onlyProvisioned, boolean dismissShade,
int flags) {
mActualStarter.ifPresent(
starter -> starter.get().startActivity(intent, onlyProvisioned, dismissShade,
flags));
mActualStarterOptionalLazy.get().ifPresent(
starter -> starter.startActivity(intent, onlyProvisioned, dismissShade, flags));
}
@Override
public void startActivity(Intent intent, boolean dismissShade) {
mActualStarter.ifPresent(starter -> starter.get().startActivity(intent, dismissShade));
mActualStarterOptionalLazy.get().ifPresent(
starter -> starter.startActivity(intent, dismissShade));
}
@Override
public void startActivity(Intent intent, boolean dismissShade,
@Nullable ActivityLaunchAnimator.Controller animationController) {
mActualStarter.ifPresent(
starter -> starter.get().startActivity(intent, dismissShade, animationController));
mActualStarterOptionalLazy.get().ifPresent(
starter -> starter.startActivity(intent, dismissShade, animationController));
}
@Override
public void startActivity(Intent intent, boolean onlyProvisioned, boolean dismissShade) {
mActualStarter.ifPresent(
starter -> starter.get().startActivity(intent, onlyProvisioned, dismissShade));
mActualStarterOptionalLazy.get().ifPresent(
starter -> starter.startActivity(intent, onlyProvisioned, dismissShade));
}
@Override
public void startActivity(Intent intent, boolean dismissShade, Callback callback) {
mActualStarter.ifPresent(
starter -> starter.get().startActivity(intent, dismissShade, callback));
mActualStarterOptionalLazy.get().ifPresent(
starter -> starter.startActivity(intent, dismissShade, callback));
}
@Override
public void postStartActivityDismissingKeyguard(Intent intent, int delay) {
mActualStarter.ifPresent(
starter -> starter.get().postStartActivityDismissingKeyguard(intent, delay));
mActualStarterOptionalLazy.get().ifPresent(
starter -> starter.postStartActivityDismissingKeyguard(intent, delay));
}
@Override
public void postStartActivityDismissingKeyguard(Intent intent, int delay,
@Nullable ActivityLaunchAnimator.Controller animationController) {
mActualStarter.ifPresent(
starter -> starter.get().postStartActivityDismissingKeyguard(intent, delay,
animationController));
mActualStarterOptionalLazy.get().ifPresent(
starter -> starter.postStartActivityDismissingKeyguard(
intent, delay, animationController));
}
@Override
public void postStartActivityDismissingKeyguard(PendingIntent intent) {
mActualStarter.ifPresent(
starter -> starter.get().postStartActivityDismissingKeyguard(intent));
mActualStarterOptionalLazy.get().ifPresent(
starter -> starter.postStartActivityDismissingKeyguard(intent));
}
@Override
public void postStartActivityDismissingKeyguard(PendingIntent intent,
ActivityLaunchAnimator.Controller animationController) {
mActualStarter.ifPresent(starter ->
starter.get().postStartActivityDismissingKeyguard(intent, animationController));
mActualStarterOptionalLazy.get().ifPresent(
starter -> starter.postStartActivityDismissingKeyguard(
intent, animationController));
}
@Override
public void postQSRunnableDismissingKeyguard(Runnable runnable) {
mActualStarter.ifPresent(
starter -> starter.get().postQSRunnableDismissingKeyguard(runnable));
mActualStarterOptionalLazy.get().ifPresent(
starter -> starter.postQSRunnableDismissingKeyguard(runnable));
}
@Override
public void dismissKeyguardThenExecute(OnDismissAction action, Runnable cancel,
boolean afterKeyguardGone) {
mActualStarter.ifPresent(starter -> starter.get().dismissKeyguardThenExecute(action, cancel,
afterKeyguardGone));
mActualStarterOptionalLazy.get().ifPresent(
starter -> starter.dismissKeyguardThenExecute(action, cancel, afterKeyguardGone));
}
}

View File

@@ -99,7 +99,6 @@ import com.android.systemui.statusbar.phone.LockscreenGestureLogger;
import com.android.systemui.statusbar.phone.ManagedProfileController;
import com.android.systemui.statusbar.phone.NotificationGroupAlertTransferHelper;
import com.android.systemui.statusbar.phone.ShadeController;
import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.statusbar.phone.StatusBarIconController;
import com.android.systemui.statusbar.phone.StatusBarWindowController;
import com.android.systemui.statusbar.policy.AccessibilityController;
@@ -350,7 +349,6 @@ public class Dependency {
@Inject Lazy<IWallpaperManager> mWallpaperManager;
@Inject Lazy<CommandQueue> mCommandQueue;
@Inject Lazy<Recents> mRecents;
@Inject Lazy<StatusBar> mStatusBar;
@Inject Lazy<RecordingController> mRecordingController;
@Inject Lazy<ProtoTracer> mProtoTracer;
@Inject Lazy<MediaOutputDialogFactory> mMediaOutputDialogFactory;
@@ -554,7 +552,6 @@ public class Dependency {
mProviders.put(IWallpaperManager.class, mWallpaperManager::get);
mProviders.put(CommandQueue.class, mCommandQueue::get);
mProviders.put(Recents.class, mRecents::get);
mProviders.put(StatusBar.class, mStatusBar::get);
mProviders.put(ProtoTracer.class, mProtoTracer::get);
mProviders.put(DeviceConfigProxy.class, mDeviceConfigProxy::get);
mProviders.put(TelephonyListenerManager.class, mTelephonyListenerManager::get);

View File

@@ -59,6 +59,7 @@ import com.android.systemui.statusbar.phone.StatusBarWindowCallback;
import com.android.systemui.util.Assert;
import java.util.Locale;
import java.util.Optional;
import javax.inject.Inject;
@@ -142,7 +143,7 @@ public class SystemActions extends SystemUI {
private final Recents mRecents;
private Locale mLocale;
private final AccessibilityManager mA11yManager;
private final Lazy<StatusBar> mStatusBar;
private final Lazy<Optional<StatusBar>> mStatusBarOptionalLazy;
private final NotificationShadeWindowController mNotificationShadeController;
private final StatusBarWindowCallback mNotificationShadeCallback;
private boolean mDismissNotificationShadeActionRegistered;
@@ -150,7 +151,7 @@ public class SystemActions extends SystemUI {
@Inject
public SystemActions(Context context,
NotificationShadeWindowController notificationShadeController,
Lazy<StatusBar> statusBar,
Lazy<Optional<StatusBar>> statusBarOptionalLazy,
Recents recents) {
super(context);
mRecents = recents;
@@ -163,7 +164,7 @@ public class SystemActions extends SystemUI {
// NotificationShadeWindowController.registerCallback() only keeps weak references.
mNotificationShadeCallback = (keyguardShowing, keyguardOccluded, bouncerShowing, mDozing) ->
registerOrUnregisterDismissNotificationShadeAction();
mStatusBar = statusBar;
mStatusBarOptionalLazy = statusBarOptionalLazy;
}
@Override
@@ -242,8 +243,9 @@ public class SystemActions extends SystemUI {
// Saving state in instance variable since this callback is called quite often to avoid
// binder calls
StatusBar statusBar = mStatusBar.get();
if (statusBar.isPanelExpanded() && !statusBar.isKeyguardShowing()) {
final Optional<StatusBar> statusBarOptional = mStatusBarOptionalLazy.get();
if (statusBarOptional.map(StatusBar::isPanelExpanded).orElse(false)
&& !statusBarOptional.get().isKeyguardShowing()) {
if (!mDismissNotificationShadeActionRegistered) {
mA11yManager.registerSystemAction(
createRemoteAction(
@@ -372,11 +374,12 @@ public class SystemActions extends SystemUI {
}
private void handleNotifications() {
mStatusBar.get().animateExpandNotificationsPanel();
mStatusBarOptionalLazy.get().ifPresent(StatusBar::animateExpandNotificationsPanel);
}
private void handleQuickSettings() {
mStatusBar.get().animateExpandSettingsPanel(null);
mStatusBarOptionalLazy.get().ifPresent(
statusBar -> statusBar.animateExpandSettingsPanel(null));
}
private void handlePowerDialog() {
@@ -425,7 +428,9 @@ public class SystemActions extends SystemUI {
}
private void handleAccessibilityDismissNotificationShade() {
mStatusBar.get().animateCollapsePanels(CommandQueue.FLAG_EXCLUDE_NONE, false /* force */);
mStatusBarOptionalLazy.get().ifPresent(
statusBar -> statusBar.animateCollapsePanels(
CommandQueue.FLAG_EXCLUDE_NONE, false /* force */));
}
private class SystemActionsBroadcastReceiver extends BroadcastReceiver {

View File

@@ -70,7 +70,7 @@ public final class PhoneStateMonitor {
};
private final Context mContext;
private final Optional<Lazy<StatusBar>> mStatusBarOptionalLazy;
private final Lazy<Optional<StatusBar>> mStatusBarOptionalLazy;
private final StatusBarStateController mStatusBarStateController;
private boolean mLauncherShowing;
@@ -78,7 +78,7 @@ public final class PhoneStateMonitor {
@Inject
PhoneStateMonitor(Context context, BroadcastDispatcher broadcastDispatcher,
Optional<Lazy<StatusBar>> statusBarOptionalLazy, BootCompleteCache bootCompleteCache) {
Lazy<Optional<StatusBar>> statusBarOptionalLazy, BootCompleteCache bootCompleteCache) {
mContext = context;
mStatusBarOptionalLazy = statusBarOptionalLazy;
mStatusBarStateController = Dependency.get(StatusBarStateController.class);
@@ -180,8 +180,7 @@ public final class PhoneStateMonitor {
}
private boolean isBouncerShowing() {
return mStatusBarOptionalLazy.map(
statusBarLazy -> statusBarLazy.get().isBouncerShowing()).orElse(false);
return mStatusBarOptionalLazy.get().map(StatusBar::isBouncerShowing).orElse(false);
}
private boolean isKeyguardLocked() {

View File

@@ -28,6 +28,7 @@ import com.android.systemui.util.ViewController;
import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.Optional;
/**
* Handles:
@@ -42,7 +43,7 @@ import java.io.PrintWriter;
abstract class UdfpsAnimationViewController<T extends UdfpsAnimationView>
extends ViewController<T> implements Dumpable {
@NonNull final StatusBarStateController mStatusBarStateController;
@NonNull final StatusBar mStatusBar;
@NonNull final Optional<StatusBar> mStatusBarOptional;
@NonNull final DumpManager mDumpManger;
boolean mNotificationShadeExpanded;
@@ -50,11 +51,11 @@ abstract class UdfpsAnimationViewController<T extends UdfpsAnimationView>
protected UdfpsAnimationViewController(
T view,
@NonNull StatusBarStateController statusBarStateController,
@NonNull StatusBar statusBar,
@NonNull Optional<StatusBar> statusBarOptional,
@NonNull DumpManager dumpManager) {
super(view);
mStatusBarStateController = statusBarStateController;
mStatusBar = statusBar;
mStatusBarOptional = statusBarOptional;
mDumpManger = dumpManager;
}
@@ -62,13 +63,17 @@ abstract class UdfpsAnimationViewController<T extends UdfpsAnimationView>
@Override
protected void onViewAttached() {
mStatusBar.addExpansionChangedListener(mStatusBarExpansionChangedListener);
mStatusBarOptional.ifPresent(
statusBar -> statusBar.addExpansionChangedListener(
mStatusBarExpansionChangedListener));
mDumpManger.registerDumpable(getDumpTag(), this);
}
@Override
protected void onViewDetached() {
mStatusBar.removeExpansionChangedListener(mStatusBarExpansionChangedListener);
mStatusBarOptional.ifPresent(
statusBar -> statusBar.removeExpansionChangedListener(
mStatusBarExpansionChangedListener));
mDumpManger.unregisterDumpable(getDumpTag());
}

View File

@@ -22,6 +22,8 @@ import com.android.systemui.dump.DumpManager;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.phone.StatusBar;
import java.util.Optional;
/**
* Class that coordinates non-HBM animations for biometric prompt.
*/
@@ -29,9 +31,9 @@ class UdfpsBpViewController extends UdfpsAnimationViewController<UdfpsBpView> {
protected UdfpsBpViewController(
@NonNull UdfpsBpView view,
@NonNull StatusBarStateController statusBarStateController,
@NonNull StatusBar statusBar,
@NonNull Optional<StatusBar> statusBarOptional,
@NonNull DumpManager dumpManager) {
super(view, statusBarStateController, statusBar, dumpManager);
super(view, statusBarStateController, statusBarOptional, dumpManager);
}
@Override

View File

@@ -108,7 +108,7 @@ public class UdfpsController implements DozeReceiver {
@NonNull private final LayoutInflater mInflater;
private final WindowManager mWindowManager;
private final DelayableExecutor mFgExecutor;
@NonNull private final StatusBar mStatusBar;
@NonNull private final Optional<StatusBar> mStatusBarOptional;
@NonNull private final StatusBarStateController mStatusBarStateController;
@NonNull private final StatusBarKeyguardViewManager mKeyguardViewManager;
@NonNull private final DumpManager mDumpManager;
@@ -480,7 +480,7 @@ public class UdfpsController implements DozeReceiver {
@NonNull WindowManager windowManager,
@NonNull StatusBarStateController statusBarStateController,
@Main DelayableExecutor fgExecutor,
@NonNull StatusBar statusBar,
@NonNull Optional<StatusBar> statusBarOptional,
@NonNull StatusBarKeyguardViewManager statusBarKeyguardViewManager,
@NonNull DumpManager dumpManager,
@NonNull KeyguardUpdateMonitor keyguardUpdateMonitor,
@@ -504,7 +504,7 @@ public class UdfpsController implements DozeReceiver {
mFingerprintManager = checkNotNull(fingerprintManager);
mWindowManager = windowManager;
mFgExecutor = fgExecutor;
mStatusBar = statusBar;
mStatusBarOptional = statusBarOptional;
mStatusBarStateController = statusBarStateController;
mKeyguardViewManager = statusBarKeyguardViewManager;
mDumpManager = dumpManager;
@@ -726,7 +726,7 @@ public class UdfpsController implements DozeReceiver {
enrollView,
mServerRequest.mEnrollHelper,
mStatusBarStateController,
mStatusBar,
mStatusBarOptional,
mDumpManager
);
case IUdfpsOverlayController.REASON_AUTH_FPM_KEYGUARD:
@@ -736,7 +736,7 @@ public class UdfpsController implements DozeReceiver {
return new UdfpsKeyguardViewController(
keyguardView,
mStatusBarStateController,
mStatusBar,
mStatusBarOptional,
mKeyguardViewManager,
mKeyguardUpdateMonitor,
mFgExecutor,
@@ -752,7 +752,7 @@ public class UdfpsController implements DozeReceiver {
return new UdfpsBpViewController(
bpView,
mStatusBarStateController,
mStatusBar,
mStatusBarOptional,
mDumpManager
);
case IUdfpsOverlayController.REASON_AUTH_FPM_OTHER:
@@ -762,7 +762,7 @@ public class UdfpsController implements DozeReceiver {
return new UdfpsFpmOtherViewController(
authOtherView,
mStatusBarStateController,
mStatusBar,
mStatusBarOptional,
mDumpManager
);
default:

View File

@@ -24,6 +24,8 @@ import com.android.systemui.dump.DumpManager;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.phone.StatusBar;
import java.util.Optional;
/**
* Class that coordinates non-HBM animations during enrollment.
*/
@@ -48,9 +50,9 @@ public class UdfpsEnrollViewController extends UdfpsAnimationViewController<Udfp
@NonNull UdfpsEnrollView view,
@NonNull UdfpsEnrollHelper enrollHelper,
@NonNull StatusBarStateController statusBarStateController,
@NonNull StatusBar statusBar,
@NonNull Optional<StatusBar> statusBarOptional,
@NonNull DumpManager dumpManager) {
super(view, statusBarStateController, statusBar, dumpManager);
super(view, statusBarStateController, statusBarOptional, dumpManager);
mEnrollProgressBarRadius = getContext().getResources()
.getInteger(R.integer.config_udfpsEnrollProgressBar);
mEnrollHelper = enrollHelper;

View File

@@ -22,6 +22,8 @@ import com.android.systemui.dump.DumpManager;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.phone.StatusBar;
import java.util.Optional;
/**
* Class that coordinates non-HBM animations for non keyguard, enrollment or biometric prompt
* states.
@@ -32,9 +34,9 @@ class UdfpsFpmOtherViewController extends UdfpsAnimationViewController<UdfpsFpmO
protected UdfpsFpmOtherViewController(
@NonNull UdfpsFpmOtherView view,
@NonNull StatusBarStateController statusBarStateController,
@NonNull StatusBar statusBar,
@NonNull Optional<StatusBar> statusBarOptional,
@NonNull DumpManager dumpManager) {
super(view, statusBarStateController, statusBar, dumpManager);
super(view, statusBarStateController, statusBarOptional, dumpManager);
}
@Override

View File

@@ -40,6 +40,7 @@ import com.android.systemui.util.concurrency.DelayableExecutor;
import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.Optional;
/**
@@ -80,7 +81,7 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud
protected UdfpsKeyguardViewController(
@NonNull UdfpsKeyguardView view,
@NonNull StatusBarStateController statusBarStateController,
@NonNull StatusBar statusBar,
@NonNull Optional<StatusBar> statusBarOptional,
@NonNull StatusBarKeyguardViewManager statusBarKeyguardViewManager,
@NonNull KeyguardUpdateMonitor keyguardUpdateMonitor,
@NonNull DelayableExecutor mainDelayableExecutor,
@@ -88,7 +89,7 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud
@NonNull KeyguardViewMediator keyguardViewMediator,
@NonNull LockscreenShadeTransitionController transitionController,
@NonNull UdfpsController udfpsController) {
super(view, statusBarStateController, statusBar, dumpManager);
super(view, statusBarStateController, statusBarOptional, dumpManager);
mKeyguardViewManager = statusBarKeyguardViewManager;
mKeyguardUpdateMonitor = keyguardUpdateMonitor;
mExecutor = mainDelayableExecutor;

View File

@@ -227,7 +227,7 @@ public class DependencyProvider {
Optional<Pip> pipOptional,
Optional<LegacySplitScreen> splitScreenOptional,
Optional<Recents> recentsOptional,
Lazy<StatusBar> statusBarLazy,
Lazy<Optional<StatusBar>> statusBarOptionalLazy,
ShadeController shadeController,
NotificationRemoteInputManager notificationRemoteInputManager,
NotificationShadeDepthController notificationShadeDepthController,
@@ -256,7 +256,7 @@ public class DependencyProvider {
pipOptional,
splitScreenOptional,
recentsOptional,
statusBarLazy,
statusBarOptionalLazy,
shadeController,
notificationRemoteInputManager,
notificationShadeDepthController,

View File

@@ -81,6 +81,7 @@ import com.android.systemui.util.leak.RotationUtils;
import com.android.systemui.util.settings.GlobalSettings;
import com.android.systemui.util.settings.SecureSettings;
import java.util.Optional;
import java.util.concurrent.Executor;
import javax.inject.Inject;
@@ -172,7 +173,7 @@ public class GlobalActionsDialog extends GlobalActionsDialogLite
SysUiState sysUiState,
@Main Handler handler,
PackageManager packageManager,
StatusBar statusBar) {
Optional<StatusBar> statusBarOptional) {
super(context,
windowManagerFuncs,
@@ -203,7 +204,7 @@ public class GlobalActionsDialog extends GlobalActionsDialogLite
sysUiState,
handler,
packageManager,
statusBar);
statusBarOptional);
mLockPatternUtils = lockPatternUtils;
mKeyguardStateController = keyguardStateController;
@@ -333,11 +334,11 @@ public class GlobalActionsDialog extends GlobalActionsDialogLite
NotificationShadeWindowController notificationShadeWindowController,
SysUiState sysuiState, Runnable onRotateCallback, boolean keyguardShowing,
MyPowerOptionsAdapter powerAdapter, UiEventLogger uiEventLogger,
StatusBar statusBar) {
Optional<StatusBar> statusBarOptional) {
super(context, com.android.systemui.R.style.Theme_SystemUI_Dialog_GlobalActions,
adapter, overflowAdapter, sysuiColorExtractor, statusBarService,
notificationShadeWindowController, sysuiState, onRotateCallback,
keyguardShowing, powerAdapter, uiEventLogger, statusBar);
keyguardShowing, powerAdapter, uiEventLogger, statusBarOptional);
mWalletFactory = walletFactory;
// Update window attributes

View File

@@ -131,6 +131,7 @@ import com.android.systemui.util.settings.SecureSettings;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.Executor;
import javax.inject.Inject;
@@ -229,7 +230,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
private int mDialogPressDelay = DIALOG_PRESS_DELAY; // ms
protected Handler mMainHandler;
private int mSmallestScreenWidthDp;
private final StatusBar mStatusBar;
private final Optional<StatusBar> mStatusBarOptional;
@VisibleForTesting
public enum GlobalActionsEvent implements UiEventLogger.UiEventEnum {
@@ -336,7 +337,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
SysUiState sysUiState,
@Main Handler handler,
PackageManager packageManager,
StatusBar statusBar) {
Optional<StatusBar> statusBarOptional) {
mContext = context;
mWindowManagerFuncs = windowManagerFuncs;
mAudioManager = audioManager;
@@ -365,7 +366,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
mSysUiState = sysUiState;
mMainHandler = handler;
mSmallestScreenWidthDp = resources.getConfiguration().smallestScreenWidthDp;
mStatusBar = statusBar;
mStatusBarOptional = statusBarOptional;
// receive broadcasts
IntentFilter filter = new IntentFilter();
@@ -415,8 +416,8 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
return mUiEventLogger;
}
protected StatusBar getStatusBar() {
return mStatusBar;
protected Optional<StatusBar> getStatusBar() {
return mStatusBarOptional;
}
/**
@@ -650,7 +651,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
mAdapter, mOverflowAdapter, mSysuiColorExtractor,
mStatusBarService, mNotificationShadeWindowController,
mSysUiState, this::onRotate, mKeyguardShowing, mPowerAdapter, mUiEventLogger,
mStatusBar);
mStatusBarOptional);
dialog.setOnDismissListener(this);
dialog.setOnShowListener(this);
@@ -852,7 +853,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
mUiEventLogger.log(GlobalActionsEvent.GA_EMERGENCY_DIALER_PRESS);
if (mTelecomManager != null) {
// Close shade so user sees the activity
mStatusBar.collapseShade();
mStatusBarOptional.ifPresent(StatusBar::collapseShade);
Intent intent = mTelecomManager.createLaunchEmergencyDialerIntent(
null /* number */);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
@@ -984,7 +985,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
mIActivityManager.requestInteractiveBugReport();
}
// Close shade so user sees the activity
mStatusBar.collapseShade();
mStatusBarOptional.ifPresent(StatusBar::collapseShade);
} catch (RemoteException e) {
}
}
@@ -1004,7 +1005,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
mUiEventLogger.log(GlobalActionsEvent.GA_BUGREPORT_LONG_PRESS);
mIActivityManager.requestFullBugReport();
// Close shade so user sees the activity
mStatusBar.collapseShade();
mStatusBarOptional.ifPresent(StatusBar::collapseShade);
} catch (RemoteException e) {
}
return false;
@@ -2122,7 +2123,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
protected final Runnable mOnRotateCallback;
private UiEventLogger mUiEventLogger;
private GestureDetector mGestureDetector;
private StatusBar mStatusBar;
private Optional<StatusBar> mStatusBarOptional;
protected ViewGroup mContainer;
@@ -2147,7 +2148,8 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
if (distanceY < 0 && distanceY > distanceX
&& e1.getY() <= mStatusBar.getStatusBarHeight()) {
&& e1.getY() <= mStatusBarOptional.map(
StatusBar::getStatusBarHeight).orElse(0)) {
// Downwards scroll from top
openShadeAndDismiss();
return true;
@@ -2159,7 +2161,8 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
if (velocityY > 0 && Math.abs(velocityY) > Math.abs(velocityX)
&& e1.getY() <= mStatusBar.getStatusBarHeight()) {
&& e1.getY() <= mStatusBarOptional.map(
StatusBar::getStatusBarHeight).orElse(0)) {
// Downwards fling from top
openShadeAndDismiss();
return true;
@@ -2174,7 +2177,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
NotificationShadeWindowController notificationShadeWindowController,
SysUiState sysuiState, Runnable onRotateCallback, boolean keyguardShowing,
MyPowerOptionsAdapter powerAdapter, UiEventLogger uiEventLogger,
StatusBar statusBar) {
Optional<StatusBar> statusBarOptional) {
super(context, themeRes);
mContext = context;
mAdapter = adapter;
@@ -2187,7 +2190,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
mOnRotateCallback = onRotateCallback;
mKeyguardShowing = keyguardShowing;
mUiEventLogger = uiEventLogger;
mStatusBar = statusBar;
mStatusBarOptional = statusBarOptional;
mGestureDetector = new GestureDetector(mContext, mGestureListener);
@@ -2218,12 +2221,14 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
private void openShadeAndDismiss() {
mUiEventLogger.log(GlobalActionsEvent.GA_CLOSE_TAP_OUTSIDE);
if (mStatusBar.isKeyguardShowing()) {
if (mStatusBarOptional.map(StatusBar::isKeyguardShowing).orElse(false)) {
// match existing lockscreen behavior to open QS when swiping from status bar
mStatusBar.animateExpandSettingsPanel(null);
mStatusBarOptional.ifPresent(
statusBar -> statusBar.animateExpandSettingsPanel(null));
} else {
// otherwise, swiping down should expand notification shade
mStatusBar.animateExpandNotificationsPanel();
mStatusBarOptional.ifPresent(
statusBar -> statusBar.animateExpandNotificationsPanel());
}
dismiss();
}

View File

@@ -187,7 +187,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener,
private final MetricsLogger mMetricsLogger;
private final Lazy<AssistManager> mAssistManagerLazy;
private final SysUiState mSysUiFlagsContainer;
private final Lazy<StatusBar> mStatusBarLazy;
private final Lazy<Optional<StatusBar>> mStatusBarOptionalLazy;
private final ShadeController mShadeController;
private final NotificationRemoteInputManager mNotificationRemoteInputManager;
private final OverviewProxyService mOverviewProxyService;
@@ -485,7 +485,8 @@ public class NavigationBar implements View.OnAttachStateChangeListener,
CommandQueue commandQueue,
Optional<Pip> pipOptional,
Optional<LegacySplitScreen> splitScreenOptional,
Optional<Recents> recentsOptional, Lazy<StatusBar> statusBarLazy,
Optional<Recents> recentsOptional,
Lazy<Optional<StatusBar>> statusBarOptionalLazy,
ShadeController shadeController,
NotificationRemoteInputManager notificationRemoteInputManager,
NotificationShadeDepthController notificationShadeDepthController,
@@ -503,7 +504,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener,
mMetricsLogger = metricsLogger;
mAssistManagerLazy = assistManagerLazy;
mSysUiFlagsContainer = sysUiFlagsContainer;
mStatusBarLazy = statusBarLazy;
mStatusBarOptionalLazy = statusBarOptionalLazy;
mShadeController = shadeController;
mNotificationRemoteInputManager = notificationRemoteInputManager;
mOverviewProxyService = overviewProxyService;
@@ -610,7 +611,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener,
@Override
public void onViewAttachedToWindow(View v) {
final Display display = v.getDisplay();
mNavigationBarView.setComponents(mStatusBarLazy.get().getPanelController());
mNavigationBarView.setComponents(mStatusBarOptionalLazy.get().get().getPanelController());
mNavigationBarView.setDisabledFlags(mDisabledFlags1);
mNavigationBarView.setOnVerticalChangedListener(this::onVerticalChanged);
mNavigationBarView.setOnTouchListener(this::onNavigationTouch);
@@ -1161,13 +1162,14 @@ public class NavigationBar implements View.OnAttachStateChangeListener,
// If an incoming call is ringing, HOME is totally disabled.
// (The user is already on the InCallUI at this point,
// and their ONLY options are to answer or reject the call.)
final Optional<StatusBar> statusBarOptional = mStatusBarOptionalLazy.get();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
mHomeBlockedThisTouch = false;
TelecomManager telecomManager =
mContext.getSystemService(TelecomManager.class);
if (telecomManager != null && telecomManager.isRinging()) {
if (mStatusBarLazy.get().isKeyguardShowing()) {
if (statusBarOptional.map(StatusBar::isKeyguardShowing).orElse(false)) {
Log.i(TAG, "Ignoring HOME; there's a ringing incoming call. " +
"No heads up");
mHomeBlockedThisTouch = true;
@@ -1183,14 +1185,15 @@ public class NavigationBar implements View.OnAttachStateChangeListener,
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
mHandler.removeCallbacks(mOnVariableDurationHomeLongClick);
mStatusBarLazy.get().awakenDreams();
statusBarOptional.ifPresent(StatusBar::awakenDreams);
break;
}
return false;
}
private void onVerticalChanged(boolean isVertical) {
mStatusBarLazy.get().setQsScrimEnabled(!isVertical);
mStatusBarOptionalLazy.get().ifPresent(
statusBar -> statusBar.setQsScrimEnabled(!isVertical));
}
private boolean onNavigationTouch(View v, MotionEvent event) {
@@ -1216,7 +1219,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener,
AssistManager.INVOCATION_TYPE_KEY,
AssistManager.INVOCATION_TYPE_HOME_BUTTON_LONG_PRESS);
mAssistManagerLazy.get().startAssist(args);
mStatusBarLazy.get().awakenDreams();
mStatusBarOptionalLazy.get().ifPresent(StatusBar::awakenDreams);
mNavigationBarView.abortCurrentGesture();
return true;
}
@@ -1242,7 +1245,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener,
LatencyTracker.getInstance(mContext).onActionStart(
LatencyTracker.ACTION_TOGGLE_RECENTS);
}
mStatusBarLazy.get().awakenDreams();
mStatusBarOptionalLazy.get().ifPresent(StatusBar::awakenDreams);
mCommandQueue.toggleRecentApps();
}
@@ -1347,8 +1350,11 @@ public class NavigationBar implements View.OnAttachStateChangeListener,
return false;
}
return mStatusBarLazy.get().toggleSplitScreenMode(MetricsEvent.ACTION_WINDOW_DOCK_LONGPRESS,
MetricsEvent.ACTION_WINDOW_UNDOCK_LONGPRESS);
return mStatusBarOptionalLazy.get().map(
statusBar -> statusBar.toggleSplitScreenMode(
MetricsEvent.ACTION_WINDOW_DOCK_LONGPRESS,
MetricsEvent.ACTION_WINDOW_UNDOCK_LONGPRESS))
.orElse(false);
}
private void onAccessibilityClick(View v) {
@@ -1474,7 +1480,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener,
private void checkBarModes() {
// We only have status bar on default display now.
if (mIsOnDefaultDisplay) {
mStatusBarLazy.get().checkBarModes();
mStatusBarOptionalLazy.get().ifPresent(StatusBar::checkBarModes);
} else {
checkNavBarModes();
}
@@ -1492,7 +1498,8 @@ public class NavigationBar implements View.OnAttachStateChangeListener,
* Checks current navigation bar mode and make transitions.
*/
public void checkNavBarModes() {
final boolean anim = mStatusBarLazy.get().isDeviceInteractive()
final boolean anim =
mStatusBarOptionalLazy.get().map(StatusBar::isDeviceInteractive).orElse(false)
&& mNavigationBarWindowState != WINDOW_STATE_HIDDEN;
mNavigationBarView.getBarTransitions().transitionTo(mNavigationBarMode, anim);
}

View File

@@ -104,7 +104,7 @@ public class NavigationBarController implements Callbacks,
private final Optional<Pip> mPipOptional;
private final Optional<LegacySplitScreen> mSplitScreenOptional;
private final Optional<Recents> mRecentsOptional;
private final Lazy<StatusBar> mStatusBarLazy;
private final Lazy<Optional<StatusBar>> mStatusBarOptionalLazy;
private final ShadeController mShadeController;
private final NotificationRemoteInputManager mNotificationRemoteInputManager;
private final SystemActions mSystemActions;
@@ -146,7 +146,7 @@ public class NavigationBarController implements Callbacks,
Optional<Pip> pipOptional,
Optional<LegacySplitScreen> splitScreenOptional,
Optional<Recents> recentsOptional,
Lazy<StatusBar> statusBarLazy,
Lazy<Optional<StatusBar>> statusBarOptionalLazy,
ShadeController shadeController,
NotificationRemoteInputManager notificationRemoteInputManager,
NotificationShadeDepthController notificationShadeDepthController,
@@ -175,7 +175,7 @@ public class NavigationBarController implements Callbacks,
mPipOptional = pipOptional;
mSplitScreenOptional = splitScreenOptional;
mRecentsOptional = recentsOptional;
mStatusBarLazy = statusBarLazy;
mStatusBarOptionalLazy = statusBarOptionalLazy;
mShadeController = shadeController;
mNotificationRemoteInputManager = notificationRemoteInputManager;
mNotificationShadeDepthController = notificationShadeDepthController;
@@ -369,7 +369,7 @@ public class NavigationBarController implements Callbacks,
mPipOptional,
mSplitScreenOptional,
mRecentsOptional,
mStatusBarLazy,
mStatusBarOptionalLazy,
mShadeController,
mNotificationRemoteInputManager,
mNotificationShadeDepthController,

View File

@@ -54,6 +54,7 @@ import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.time.Duration;
import java.util.Arrays;
import java.util.Optional;
import java.util.concurrent.Future;
import javax.inject.Inject;
@@ -108,15 +109,15 @@ public class PowerUI extends SystemUI implements CommandQueue.Callbacks {
private IThermalEventListener mUsbThermalEventListener;
private final BroadcastDispatcher mBroadcastDispatcher;
private final CommandQueue mCommandQueue;
private final Lazy<StatusBar> mStatusBarLazy;
private final Lazy<Optional<StatusBar>> mStatusBarOptionalLazy;
@Inject
public PowerUI(Context context, BroadcastDispatcher broadcastDispatcher,
CommandQueue commandQueue, Lazy<StatusBar> statusBarLazy) {
CommandQueue commandQueue, Lazy<Optional<StatusBar>> statusBarOptionalLazy) {
super(context);
mBroadcastDispatcher = broadcastDispatcher;
mCommandQueue = commandQueue;
mStatusBarLazy = statusBarLazy;
mStatusBarOptionalLazy = statusBarOptionalLazy;
}
public void start() {
@@ -710,7 +711,8 @@ public class PowerUI extends SystemUI implements CommandQueue.Callbacks {
int status = temp.getStatus();
if (status >= Temperature.THROTTLING_EMERGENCY) {
if (!mStatusBarLazy.get().isDeviceInVrMode()) {
final Optional<StatusBar> statusBarOptional = mStatusBarOptionalLazy.get();
if (!statusBarOptional.map(StatusBar::isDeviceInVrMode).orElse(false)) {
mWarnings.showHighTemperatureWarning();
Slog.d(TAG, "SkinThermalEventListener: notifyThrottling was called "
+ ", current skin status = " + status

View File

@@ -42,7 +42,7 @@ public class OverviewProxyRecentsImpl implements RecentsImplementation {
private final static String TAG = "OverviewProxyRecentsImpl";
@Nullable
private final Lazy<StatusBar> mStatusBarLazy;
private final Lazy<Optional<StatusBar>> mStatusBarOptionalLazy;
private Context mContext;
private Handler mHandler;
@@ -51,8 +51,8 @@ public class OverviewProxyRecentsImpl implements RecentsImplementation {
@SuppressWarnings("OptionalUsedAsFieldOrParameterType")
@Inject
public OverviewProxyRecentsImpl(Optional<Lazy<StatusBar>> statusBarLazy) {
mStatusBarLazy = statusBarLazy.orElse(null);
public OverviewProxyRecentsImpl(Lazy<Optional<StatusBar>> statusBarOptionalLazy) {
mStatusBarOptionalLazy = statusBarOptionalLazy;
}
@Override
@@ -109,8 +109,9 @@ public class OverviewProxyRecentsImpl implements RecentsImplementation {
}
};
// Preload only if device for current user is unlocked
if (mStatusBarLazy != null && mStatusBarLazy.get().isKeyguardShowing()) {
mStatusBarLazy.get().executeRunnableDismissingKeyguard(() -> {
final Optional<StatusBar> statusBarOptional = mStatusBarOptionalLazy.get();
if (statusBarOptional.map(StatusBar::isKeyguardShowing).orElse(false)) {
statusBarOptional.get().executeRunnableDismissingKeyguard(() -> {
// Flush trustmanager before checking device locked per user
mTrustManager.reportKeyguardShowingChanged();
mHandler.post(toggleRecents);

View File

@@ -136,7 +136,7 @@ public class OverviewProxyService extends CurrentUserTracker implements
private final Context mContext;
private final Optional<Pip> mPipOptional;
private final Optional<Lazy<StatusBar>> mStatusBarOptionalLazy;
private final Lazy<Optional<StatusBar>> mStatusBarOptionalLazy;
private final Optional<LegacySplitScreen> mLegacySplitScreenOptional;
private final Optional<SplitScreen> mSplitScreenOptional;
private SysUiState mSysUiState;
@@ -174,8 +174,8 @@ public class OverviewProxyService extends CurrentUserTracker implements
@Override
public void startScreenPinning(int taskId) {
verifyCallerAndClearCallingIdentityPostMain("startScreenPinning", () ->
mStatusBarOptionalLazy.ifPresent(
statusBarLazy -> statusBarLazy.get().showScreenPinningRequest(taskId,
mStatusBarOptionalLazy.get().ifPresent(
statusBar -> statusBar.showScreenPinningRequest(taskId,
false /* allowCancel */)));
}
@@ -195,8 +195,7 @@ public class OverviewProxyService extends CurrentUserTracker implements
public void onStatusBarMotionEvent(MotionEvent event) {
verifyCallerAndClearCallingIdentity("onStatusBarMotionEvent", () -> {
// TODO move this logic to message queue
mStatusBarOptionalLazy.ifPresent(statusBarLazy -> {
StatusBar statusBar = statusBarLazy.get();
mStatusBarOptionalLazy.get().ifPresent(statusBar -> {
if (event.getActionMasked() == ACTION_DOWN) {
statusBar.getPanelController().startExpandLatencyTracking();
}
@@ -527,7 +526,7 @@ public class OverviewProxyService extends CurrentUserTracker implements
Optional<Pip> pipOptional,
Optional<LegacySplitScreen> legacySplitScreenOptional,
Optional<SplitScreen> splitScreenOptional,
Optional<Lazy<StatusBar>> statusBarOptionalLazy,
Lazy<Optional<StatusBar>> statusBarOptionalLazy,
Optional<OneHanded> oneHandedOptional,
BroadcastDispatcher broadcastDispatcher,
ShellTransitions shellTransitions,
@@ -681,10 +680,9 @@ public class OverviewProxyService extends CurrentUserTracker implements
public void cleanupAfterDeath() {
if (mInputFocusTransferStarted) {
mHandler.post(() -> {
mStatusBarOptionalLazy.ifPresent(statusBarLazy -> {
mStatusBarOptionalLazy.get().ifPresent(statusBar -> {
mInputFocusTransferStarted = false;
statusBarLazy.get().onInputFocusTransfer(false, true /* cancel */,
0 /* velocity */);
statusBar.onInputFocusTransfer(false, true /* cancel */, 0 /* velocity */);
});
});
}

View File

@@ -51,10 +51,10 @@ import android.widget.TextView;
import com.android.systemui.Dependency;
import com.android.systemui.R;
import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.shared.system.QuickStepContract;
import com.android.systemui.shared.system.WindowManagerWrapper;
import com.android.systemui.navigationbar.NavigationBarView;
import com.android.systemui.navigationbar.NavigationModeController;
import com.android.systemui.shared.system.QuickStepContract;
import com.android.systemui.shared.system.WindowManagerWrapper;
import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.util.leak.RotationUtils;
@@ -69,7 +69,7 @@ public class ScreenPinningRequest implements View.OnClickListener,
NavigationModeController.ModeChangedListener {
private final Context mContext;
private final Optional<Lazy<StatusBar>> mStatusBarOptionalLazy;
private final Lazy<Optional<StatusBar>> mStatusBarOptionalLazy;
private final AccessibilityManager mAccessibilityService;
private final WindowManager mWindowManager;
@@ -82,7 +82,7 @@ public class ScreenPinningRequest implements View.OnClickListener,
private int taskId;
@Inject
public ScreenPinningRequest(Context context, Optional<Lazy<StatusBar>> statusBarOptionalLazy) {
public ScreenPinningRequest(Context context, Lazy<Optional<StatusBar>> statusBarOptionalLazy) {
mContext = context;
mStatusBarOptionalLazy = statusBarOptionalLazy;
mAccessibilityService = (AccessibilityManager)
@@ -266,8 +266,9 @@ public class ScreenPinningRequest implements View.OnClickListener,
.setVisibility(View.INVISIBLE);
}
NavigationBarView navigationBarView = mStatusBarOptionalLazy.map(
statusBarLazy -> statusBarLazy.get().getNavigationBarView()).orElse(null);
final Optional<StatusBar> statusBarOptional = mStatusBarOptionalLazy.get();
NavigationBarView navigationBarView =
statusBarOptional.map(StatusBar::getNavigationBarView).orElse(null);
final boolean recentsVisible = navigationBarView != null
&& navigationBarView.isRecentsButtonVisible();
boolean touchExplorationEnabled = mAccessibilityService.isTouchExplorationEnabled();

View File

@@ -84,6 +84,7 @@ import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import dagger.Lazy;
@@ -132,7 +133,7 @@ public class NotificationMediaManager implements Dumpable {
private final Context mContext;
private final MediaSessionManager mMediaSessionManager;
private final ArrayList<MediaListener> mMediaListeners;
private final Lazy<StatusBar> mStatusBarLazy;
private final Lazy<Optional<StatusBar>> mStatusBarOptionalLazy;
private final MediaArtworkProcessor mMediaArtworkProcessor;
private final Set<AsyncTask<?, ?, ?>> mProcessArtworkTasks = new ArraySet<>();
@@ -177,7 +178,7 @@ public class NotificationMediaManager implements Dumpable {
*/
public NotificationMediaManager(
Context context,
Lazy<StatusBar> statusBarLazy,
Lazy<Optional<StatusBar>> statusBarOptionalLazy,
Lazy<NotificationShadeWindowController> notificationShadeWindowController,
NotificationEntryManager notificationEntryManager,
MediaArtworkProcessor mediaArtworkProcessor,
@@ -197,7 +198,7 @@ public class NotificationMediaManager implements Dumpable {
mMediaSessionManager = (MediaSessionManager) mContext.getSystemService(
Context.MEDIA_SESSION_SERVICE);
// TODO: use KeyguardStateController#isOccluded to remove this dependency
mStatusBarLazy = statusBarLazy;
mStatusBarOptionalLazy = statusBarOptionalLazy;
mNotificationShadeWindowController = notificationShadeWindowController;
mEntryManager = notificationEntryManager;
mMainExecutor = mainExecutor;
@@ -694,7 +695,8 @@ public class NotificationMediaManager implements Dumpable {
NotificationShadeWindowController windowController =
mNotificationShadeWindowController.get();
boolean hideBecauseOccluded = mStatusBarLazy.get().isOccluded();
boolean hideBecauseOccluded =
mStatusBarOptionalLazy.get().map(StatusBar::isOccluded).orElse(false);
final boolean hasArtwork = artworkDrawable != null;
mColorExtractor.setHasMediaArtwork(hasMediaArtwork);

View File

@@ -45,6 +45,7 @@ import android.view.View;
import android.view.ViewGroup;
import android.view.ViewParent;
import android.widget.RemoteViews;
import android.widget.RemoteViews.InteractionHandler;
import android.widget.TextView;
import com.android.internal.annotations.VisibleForTesting;
@@ -70,6 +71,7 @@ import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Stream;
@@ -118,7 +120,7 @@ public class NotificationRemoteInputManager implements Dumpable {
private final Handler mMainHandler;
private final ActionClickLogger mLogger;
private final Lazy<StatusBar> mStatusBarLazy;
private final Lazy<Optional<StatusBar>> mStatusBarOptionalLazy;
protected final Context mContext;
private final UserManager mUserManager;
@@ -134,14 +136,14 @@ public class NotificationRemoteInputManager implements Dumpable {
protected Callback mCallback;
protected final ArrayList<NotificationLifetimeExtender> mLifetimeExtenders = new ArrayList<>();
private final RemoteViews.InteractionHandler
mInteractionHandler = new RemoteViews.InteractionHandler() {
private final InteractionHandler mInteractionHandler = new InteractionHandler() {
@Override
public boolean onInteraction(
View view, PendingIntent pendingIntent, RemoteViews.RemoteResponse response) {
mStatusBarLazy.get().wakeUpIfDozing(SystemClock.uptimeMillis(), view,
"NOTIFICATION_CLICK");
mStatusBarOptionalLazy.get().ifPresent(
statusBar -> statusBar.wakeUpIfDozing(
SystemClock.uptimeMillis(), view, "NOTIFICATION_CLICK"));
final NotificationEntry entry = getNotificationForParent(view.getParent());
mLogger.logInitialClick(entry, pendingIntent);
@@ -280,7 +282,7 @@ public class NotificationRemoteInputManager implements Dumpable {
NotificationLockscreenUserManager lockscreenUserManager,
SmartReplyController smartReplyController,
NotificationEntryManager notificationEntryManager,
Lazy<StatusBar> statusBarLazy,
Lazy<Optional<StatusBar>> statusBarOptionalLazy,
StatusBarStateController statusBarStateController,
@Main Handler mainHandler,
RemoteInputUriController remoteInputUriController,
@@ -290,7 +292,7 @@ public class NotificationRemoteInputManager implements Dumpable {
mLockscreenUserManager = lockscreenUserManager;
mSmartReplyController = smartReplyController;
mEntryManager = notificationEntryManager;
mStatusBarLazy = statusBarLazy;
mStatusBarOptionalLazy = statusBarOptionalLazy;
mMainHandler = mainHandler;
mLogger = logger;
mBarService = IStatusBarService.Stub.asInterface(

View File

@@ -92,7 +92,7 @@ public interface StatusBarDependenciesModule {
NotificationLockscreenUserManager lockscreenUserManager,
SmartReplyController smartReplyController,
NotificationEntryManager notificationEntryManager,
Lazy<StatusBar> statusBarLazy,
Lazy<Optional<StatusBar>> statusBarOptionalLazy,
StatusBarStateController statusBarStateController,
Handler mainHandler,
RemoteInputUriController remoteInputUriController,
@@ -103,7 +103,7 @@ public interface StatusBarDependenciesModule {
lockscreenUserManager,
smartReplyController,
notificationEntryManager,
statusBarLazy,
statusBarOptionalLazy,
statusBarStateController,
mainHandler,
remoteInputUriController,
@@ -116,7 +116,7 @@ public interface StatusBarDependenciesModule {
@Provides
static NotificationMediaManager provideNotificationMediaManager(
Context context,
Lazy<StatusBar> statusBarLazy,
Lazy<Optional<StatusBar>> statusBarOptionalLazy,
Lazy<NotificationShadeWindowController> notificationShadeWindowController,
NotificationEntryManager notificationEntryManager,
MediaArtworkProcessor mediaArtworkProcessor,
@@ -129,7 +129,7 @@ public interface StatusBarDependenciesModule {
MediaDataManager mediaDataManager) {
return new NotificationMediaManager(
context,
statusBarLazy,
statusBarOptionalLazy,
notificationShadeWindowController,
notificationEntryManager,
mediaArtworkProcessor,

View File

@@ -126,7 +126,7 @@ public interface NotificationsModule {
@Provides
static NotificationGutsManager provideNotificationGutsManager(
Context context,
Lazy<StatusBar> statusBarLazy,
Lazy<Optional<StatusBar>> statusBarOptionalLazy,
@Main Handler mainHandler,
@Background Handler bgHandler,
AccessibilityManager accessibilityManager,
@@ -145,7 +145,7 @@ public interface NotificationsModule {
ShadeController shadeController) {
return new NotificationGutsManager(
context,
statusBarLazy,
statusBarOptionalLazy,
mainHandler,
bgHandler,
accessibilityManager,

View File

@@ -116,7 +116,7 @@ public class NotificationGutsManager implements Dumpable, NotificationLifetimeEx
@VisibleForTesting
protected String mKeyToRemoveOnGutsClosed;
private final Lazy<StatusBar> mStatusBarLazy;
private final Lazy<Optional<StatusBar>> mStatusBarOptionalLazy;
private final Handler mMainHandler;
private final Handler mBgHandler;
private final Optional<BubblesManager> mBubblesManagerOptional;
@@ -135,7 +135,7 @@ public class NotificationGutsManager implements Dumpable, NotificationLifetimeEx
* Injected constructor. See {@link NotificationsModule}.
*/
public NotificationGutsManager(Context context,
Lazy<StatusBar> statusBarLazy,
Lazy<Optional<StatusBar>> statusBarOptionalLazy,
@Main Handler mainHandler,
@Background Handler bgHandler,
AccessibilityManager accessibilityManager,
@@ -153,7 +153,7 @@ public class NotificationGutsManager implements Dumpable, NotificationLifetimeEx
OnUserInteractionCallback onUserInteractionCallback,
ShadeController shadeController) {
mContext = context;
mStatusBarLazy = statusBarLazy;
mStatusBarOptionalLazy = statusBarOptionalLazy;
mMainHandler = mainHandler;
mBgHandler = bgHandler;
mAccessibilityManager = accessibilityManager;
@@ -564,13 +564,13 @@ public class NotificationGutsManager implements Dumpable, NotificationLifetimeEx
Runnable r = () -> mMainHandler.post(
() -> openGutsInternal(view, x, y, menuItem));
mStatusBarLazy.get().executeRunnableDismissingKeyguard(
r,
null /* cancelAction */,
false /* dismissShade */,
true /* afterKeyguardGone */,
true /* deferred */);
mStatusBarOptionalLazy.get().ifPresent(
statusBar -> statusBar.executeRunnableDismissingKeyguard(
r,
null /* cancelAction */,
false /* dismissShade */,
true /* afterKeyguardGone */,
true /* deferred */));
return true;
}
}

View File

@@ -58,9 +58,12 @@ import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import javax.inject.Inject;
import dagger.Lazy;
/**
* Contains the collapsed status bar and handles hiding/showing based on disable flags
* and keyguard state. Also manages lifecycle to make sure the views it contains are being
@@ -86,7 +89,7 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
private View mCenteredIconArea;
private int mDisabled1;
private int mDisabled2;
private StatusBar mStatusBarComponent;
private Lazy<Optional<StatusBar>> mStatusBarOptionalLazy;
private DarkIconManager mDarkIconManager;
private View mOperatorNameFrame;
private CommandQueue mCommandQueue;
@@ -118,13 +121,15 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
SystemStatusAnimationScheduler animationScheduler,
StatusBarLocationPublisher locationPublisher,
NotificationIconAreaController notificationIconAreaController,
FeatureFlags featureFlags
FeatureFlags featureFlags,
Lazy<Optional<StatusBar>> statusBarOptionalLazy
) {
mOngoingCallController = ongoingCallController;
mAnimationScheduler = animationScheduler;
mLocationPublisher = locationPublisher;
mNotificationIconAreaController = notificationIconAreaController;
mFeatureFlags = featureFlags;
mStatusBarOptionalLazy = statusBarOptionalLazy;
}
@Override
@@ -133,7 +138,6 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
mKeyguardStateController = Dependency.get(KeyguardStateController.class);
mNetworkController = Dependency.get(NetworkController.class);
mStatusBarStateController = Dependency.get(StatusBarStateController.class);
mStatusBarComponent = Dependency.get(StatusBar.class);
mCommandQueue = Dependency.get(CommandQueue.class);
}
@@ -269,7 +273,8 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
}
protected int adjustDisableFlags(int state) {
boolean headsUpVisible = mStatusBarComponent.headsUpShouldBeVisible();
boolean headsUpVisible = mStatusBarOptionalLazy.get()
.map(StatusBar::headsUpShouldBeVisible).orElse(false);
if (headsUpVisible) {
state |= DISABLE_CLOCK;
}
@@ -297,7 +302,8 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
// The shelf will be hidden when dozing with a custom clock, we must show notification
// icons in this occasion.
if (mStatusBarStateController.isDozing()
&& mStatusBarComponent.getPanelController().hasCustomClock()) {
&& mStatusBarOptionalLazy.get().map(
sb -> sb.getPanelController().hasCustomClock()).orElse(false)) {
state |= DISABLE_CLOCK | DISABLE_SYSTEM_INFO;
}
@@ -338,10 +344,13 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
}
private boolean shouldHideNotificationIcons() {
if (!mStatusBar.isClosed() && mStatusBarComponent.hideStatusBarIconsWhenExpanded()) {
final Optional<StatusBar> statusBarOptional = mStatusBarOptionalLazy.get();
if (!mStatusBar.isClosed()
&& statusBarOptional.map(
StatusBar::hideStatusBarIconsWhenExpanded).orElse(false)) {
return true;
}
if (mStatusBarComponent.hideStatusBarIconsForBouncer()) {
if (statusBarOptional.map(StatusBar::hideStatusBarIconsForBouncer).orElse(false)) {
return true;
}
return false;

View File

@@ -48,7 +48,7 @@ public class ShadeControllerImpl implements ShadeController {
protected final NotificationShadeWindowController mNotificationShadeWindowController;
private final StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
private final int mDisplayId;
protected final Lazy<StatusBar> mStatusBarLazy;
protected final Lazy<Optional<StatusBar>> mStatusBarOptionalLazy;
private final Lazy<AssistManager> mAssistManagerLazy;
private final Optional<Bubbles> mBubblesOptional;
@@ -61,7 +61,7 @@ public class ShadeControllerImpl implements ShadeController {
NotificationShadeWindowController notificationShadeWindowController,
StatusBarKeyguardViewManager statusBarKeyguardViewManager,
WindowManager windowManager,
Lazy<StatusBar> statusBarLazy,
Lazy<Optional<StatusBar>> statusBarOptionalLazy,
Lazy<AssistManager> assistManagerLazy,
Optional<Bubbles> bubblesOptional
) {
@@ -71,7 +71,7 @@ public class ShadeControllerImpl implements ShadeController {
mStatusBarKeyguardViewManager = statusBarKeyguardViewManager;
mDisplayId = windowManager.getDefaultDisplay().getDisplayId();
// TODO: Remove circular reference to StatusBar when possible.
mStatusBarLazy = statusBarLazy;
mStatusBarOptionalLazy = statusBarOptionalLazy;
mAssistManagerLazy = assistManagerLazy;
mBubblesOptional = bubblesOptional;
}
@@ -210,7 +210,7 @@ public class ShadeControllerImpl implements ShadeController {
}
private StatusBar getStatusBar() {
return mStatusBarLazy.get();
return mStatusBarOptionalLazy.get().get();
}
private NotificationPresenter getPresenter() {

View File

@@ -1190,7 +1190,8 @@ public class StatusBar extends SystemUI implements DemoMode,
mAnimationScheduler,
mStatusBarLocationPublisher,
mNotificationIconAreaController,
mFeatureFlags),
mFeatureFlags,
() -> Optional.of(this)),
CollapsedStatusBarFragment.TAG)
.commit();

View File

@@ -181,7 +181,7 @@ public class UdfpsControllerTest extends SysuiTestCase {
mWindowManager,
mStatusBarStateController,
mFgExecutor,
mStatusBar,
Optional.of(mStatusBar),
mStatusBarKeyguardViewManager,
mDumpManager,
mKeyguardUpdateMonitor,

View File

@@ -49,6 +49,7 @@ import org.mockito.Captor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import java.util.Optional;
@SmallTest
@RunWith(AndroidTestingRunner.class)
@@ -103,7 +104,7 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase {
mController = new UdfpsKeyguardViewController(
mView,
mStatusBarStateController,
mStatusBar,
Optional.of(mStatusBar),
mStatusBarKeyguardViewManager,
mKeyguardUpdateMonitor,
mExecutor,

View File

@@ -74,6 +74,7 @@ import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.Executor;
@SmallTest
@@ -154,7 +155,7 @@ public class GlobalActionsDialogLiteTest extends SysuiTestCase {
mSysUiState,
mHandler,
mPackageManager,
mStatusBar
Optional.of(mStatusBar)
);
mGlobalActionsDialogLite.setZeroDialogPressDelayForTesting();

View File

@@ -81,6 +81,7 @@ import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.Executor;
import java.util.regex.Pattern;
@@ -169,7 +170,7 @@ public class GlobalActionsDialogTest extends SysuiTestCase {
mSysUiState,
mHandler,
mPackageManager,
mStatusBar
Optional.of(mStatusBar)
);
mGlobalActionsDialog.setZeroDialogPressDelayForTesting();

View File

@@ -105,7 +105,7 @@ public class NavigationBarControllerTest extends SysuiTestCase {
Optional.of(mock(Pip.class)),
Optional.of(mock(LegacySplitScreen.class)),
Optional.of(mock(Recents.class)),
() -> mock(StatusBar.class),
() -> Optional.of(mock(StatusBar.class)),
mock(ShadeController.class),
mock(NotificationRemoteInputManager.class),
mock(NotificationShadeDepthController.class),

View File

@@ -272,7 +272,7 @@ public class NavigationBarTest extends SysuiTestCase {
Optional.of(mock(Pip.class)),
Optional.of(mock(LegacySplitScreen.class)),
Optional.of(mock(Recents.class)),
() -> mock(StatusBar.class),
() -> Optional.of(mock(StatusBar.class)),
mock(ShadeController.class),
mock(NotificationRemoteInputManager.class),
mock(NotificationShadeDepthController.class),

View File

@@ -58,6 +58,7 @@ import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import java.time.Duration;
import java.util.Optional;
import java.util.concurrent.TimeUnit;
import dagger.Lazy;
@@ -89,7 +90,7 @@ public class PowerUITest extends SysuiTestCase {
private IThermalEventListener mSkinThermalEventListener;
@Mock private BroadcastDispatcher mBroadcastDispatcher;
@Mock private CommandQueue mCommandQueue;
@Mock private Lazy<StatusBar> mStatusBarLazy;
@Mock private Lazy<Optional<StatusBar>> mStatusBarOptionalLazy;
@Mock private StatusBar mStatusBar;
@Before
@@ -98,7 +99,7 @@ public class PowerUITest extends SysuiTestCase {
mMockWarnings = mDependency.injectMockDependency(WarningsUI.class);
mEnhancedEstimates = mDependency.injectMockDependency(EnhancedEstimates.class);
when(mStatusBarLazy.get()).thenReturn(mStatusBar);
when(mStatusBarOptionalLazy.get()).thenReturn(Optional.of(mStatusBar));
mContext.addMockSystemService(Context.POWER_SERVICE, mPowerManager);
@@ -688,7 +689,8 @@ public class PowerUITest extends SysuiTestCase {
}
private void createPowerUi() {
mPowerUI = new PowerUI(mContext, mBroadcastDispatcher, mCommandQueue, mStatusBarLazy);
mPowerUI = new PowerUI(
mContext, mBroadcastDispatcher, mCommandQueue, mStatusBarOptionalLazy);
mPowerUI.mThermalService = mThermalServiceMock;
}

View File

@@ -44,6 +44,8 @@ import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import java.util.Optional;
import dagger.Lazy;
@SmallTest
@@ -80,7 +82,7 @@ public class NotificationRemoteInputManagerTest extends SysuiTestCase {
mRemoteInputManager = new TestableNotificationRemoteInputManager(mContext,
mLockscreenUserManager, mSmartReplyController, mEntryManager,
() -> mock(StatusBar.class),
() -> Optional.of(mock(StatusBar.class)),
mStateController,
Handler.createAsync(Looper.myLooper()),
mRemoteInputUriController,
@@ -265,7 +267,7 @@ public class NotificationRemoteInputManagerTest extends SysuiTestCase {
NotificationLockscreenUserManager lockscreenUserManager,
SmartReplyController smartReplyController,
NotificationEntryManager notificationEntryManager,
Lazy<StatusBar> statusBarLazy,
Lazy<Optional<StatusBar>> statusBarOptionalLazy,
StatusBarStateController statusBarStateController,
Handler mainHandler,
RemoteInputUriController remoteInputUriController,
@@ -276,7 +278,7 @@ public class NotificationRemoteInputManagerTest extends SysuiTestCase {
lockscreenUserManager,
smartReplyController,
notificationEntryManager,
statusBarLazy,
statusBarOptionalLazy,
statusBarStateController,
mainHandler,
remoteInputUriController,

View File

@@ -51,6 +51,8 @@ import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import java.util.Optional;
@RunWith(AndroidTestingRunner.class)
@TestableLooper.RunWithLooper
@SmallTest
@@ -90,7 +92,7 @@ public class SmartReplyControllerTest extends SysuiTestCase {
mRemoteInputManager = new NotificationRemoteInputManager(mContext,
mock(NotificationLockscreenUserManager.class), mSmartReplyController,
mNotificationEntryManager, () -> mock(StatusBar.class),
mNotificationEntryManager, () -> Optional.of(mock(StatusBar.class)),
mStatusBarStateController,
Handler.createAsync(Looper.myLooper()),
mRemoteInputUriController,

View File

@@ -91,7 +91,6 @@ import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Answers;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnit;
@@ -99,8 +98,6 @@ import org.mockito.junit.MockitoRule;
import java.util.Optional;
import javax.inject.Provider;
/**
* Tests for {@link NotificationGutsManager}.
*/
@@ -157,11 +154,12 @@ public class NotificationGutsManagerTest extends SysuiTestCase {
when(mAccessibilityManager.isTouchExplorationEnabled()).thenReturn(false);
mGutsManager = new NotificationGutsManager(mContext,
() -> mStatusBar, mHandler, mHandler, mAccessibilityManager, mHighPriorityProvider,
mINotificationManager, mNotificationEntryManager, mPeopleSpaceWidgetManager,
mLauncherApps, mShortcutManager, mChannelEditorDialogController, mContextTracker,
mAssistantFeedbackController, Optional.of(mBubblesManager),
new UiEventLoggerFake(), mOnUserInteractionCallback, mShadeController);
() -> Optional.of(mStatusBar), mHandler, mHandler, mAccessibilityManager,
mHighPriorityProvider, mINotificationManager, mNotificationEntryManager,
mPeopleSpaceWidgetManager, mLauncherApps, mShortcutManager,
mChannelEditorDialogController, mContextTracker, mAssistantFeedbackController,
Optional.of(mBubblesManager), new UiEventLoggerFake(), mOnUserInteractionCallback,
mShadeController);
mGutsManager.setUpWithPresenter(mPresenter, mNotificationListContainer,
mCheckSaveListener, mOnSettingsClickListener);
mGutsManager.setNotificationActivityStarter(mNotificationActivityStarter);

View File

@@ -47,11 +47,14 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import java.util.Optional;
@RunWith(AndroidTestingRunner.class)
@RunWithLooper(setAsMainLooper = true)
@SmallTest
public class CollapsedStatusBarFragmentTest extends SysuiBaseFragmentTest {
private StatusBar mStatusBar;
private NotificationIconAreaController mMockNotificationAreaController;
private View mNotificationAreaInner;
private StatusBarStateController mStatusBarStateController;
@@ -65,12 +68,11 @@ public class CollapsedStatusBarFragmentTest extends SysuiBaseFragmentTest {
@Before
public void setup() {
StatusBar statusBar = mock(StatusBar.class);
mDependency.injectTestDependency(StatusBar.class, statusBar);
mStatusBar = mock(StatusBar.class);
mStatusBarStateController = mDependency
.injectMockDependency(StatusBarStateController.class);
injectLeakCheckedDependencies(ALL_SUPPORTED_CLASSES);
when(statusBar.getPanelController()).thenReturn(
when(mStatusBar.getPanelController()).thenReturn(
mock(NotificationPanelViewController.class));
}
@@ -231,7 +233,8 @@ public class CollapsedStatusBarFragmentTest extends SysuiBaseFragmentTest {
mAnimationScheduler,
mLocationPublisher,
mMockNotificationAreaController,
mock(FeatureFlags.class));
mock(FeatureFlags.class),
() -> Optional.of(mStatusBar));
}
private void setUpNotificationIconAreaController() {

View File

@@ -353,7 +353,7 @@ public class StatusBarTest extends SysuiTestCase {
mShadeController = new ShadeControllerImpl(mCommandQueue,
mStatusBarStateController, mNotificationShadeWindowController,
mStatusBarKeyguardViewManager, mContext.getSystemService(WindowManager.class),
() -> mStatusBar, () -> mAssistManager, Optional.of(mBubbles));
() -> Optional.of(mStatusBar), () -> mAssistManager, Optional.of(mBubbles));
mStatusBar = new StatusBar(
mContext,