Merge "Fix race condition crash" into oc-mr1-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
8170ea1b3c
@@ -429,7 +429,7 @@ public class StatusBar extends SystemUI implements DemoMode,
|
||||
private int mStatusBarWindowState = WINDOW_STATE_SHOWING;
|
||||
protected StatusBarWindowManager mStatusBarWindowManager;
|
||||
protected UnlockMethodCache mUnlockMethodCache;
|
||||
private DozeServiceHost mDozeServiceHost;
|
||||
private DozeServiceHost mDozeServiceHost = new DozeServiceHost();
|
||||
private boolean mWakeUpComingFromTouch;
|
||||
private PointF mWakeUpTouchLocation;
|
||||
|
||||
@@ -733,7 +733,8 @@ public class StatusBar extends SystemUI implements DemoMode,
|
||||
private KeyguardUserSwitcher mKeyguardUserSwitcher;
|
||||
private UserSwitcherController mUserSwitcherController;
|
||||
private NetworkController mNetworkController;
|
||||
private KeyguardMonitorImpl mKeyguardMonitor;
|
||||
private KeyguardMonitorImpl mKeyguardMonitor
|
||||
= (KeyguardMonitorImpl) Dependency.get(KeyguardMonitor.class);
|
||||
private BatteryController mBatteryController;
|
||||
protected boolean mPanelExpanded;
|
||||
private IOverlayManager mOverlayManager;
|
||||
@@ -741,7 +742,7 @@ public class StatusBar extends SystemUI implements DemoMode,
|
||||
private boolean mIsKeyguard;
|
||||
private LogMaker mStatusBarStateLog;
|
||||
private LockscreenGestureLogger mLockscreenGestureLogger = new LockscreenGestureLogger();
|
||||
private NotificationIconAreaController mNotificationIconAreaController;
|
||||
protected NotificationIconAreaController mNotificationIconAreaController;
|
||||
private boolean mReinflateNotificationsOnUserSwitched;
|
||||
private HashMap<String, Entry> mPendingNotifications = new HashMap<>();
|
||||
private boolean mClearAllEnabled;
|
||||
@@ -788,14 +789,12 @@ public class StatusBar extends SystemUI implements DemoMode,
|
||||
public void start() {
|
||||
mNetworkController = Dependency.get(NetworkController.class);
|
||||
mUserSwitcherController = Dependency.get(UserSwitcherController.class);
|
||||
mKeyguardMonitor = (KeyguardMonitorImpl) Dependency.get(KeyguardMonitor.class);
|
||||
mScreenLifecycle = Dependency.get(ScreenLifecycle.class);
|
||||
mScreenLifecycle.addObserver(mScreenObserver);
|
||||
mWakefulnessLifecycle = Dependency.get(WakefulnessLifecycle.class);
|
||||
mWakefulnessLifecycle.addObserver(mWakefulnessObserver);
|
||||
mBatteryController = Dependency.get(BatteryController.class);
|
||||
mAssistManager = Dependency.get(AssistManager.class);
|
||||
mDeviceProvisionedController = Dependency.get(DeviceProvisionedController.class);
|
||||
mSystemServicesProxy = SystemServicesProxy.getInstance(mContext);
|
||||
mOverlayManager = IOverlayManager.Stub.asInterface(
|
||||
ServiceManager.getService(Context.OVERLAY_SERVICE));
|
||||
@@ -981,7 +980,6 @@ public class StatusBar extends SystemUI implements DemoMode,
|
||||
startKeyguard();
|
||||
|
||||
KeyguardUpdateMonitor.getInstance(mContext).registerCallback(mUpdateCallback);
|
||||
mDozeServiceHost = new DozeServiceHost();
|
||||
putComponent(DozeHost.class, mDozeServiceHost);
|
||||
|
||||
notifyUserAboutHiddenNotifications();
|
||||
@@ -1328,7 +1326,7 @@ public class StatusBar extends SystemUI implements DemoMode,
|
||||
// Clock and bottom icons
|
||||
mNotificationPanel.onOverlayChanged();
|
||||
// The status bar on the keyguard is a special layout.
|
||||
mKeyguardStatusBar.onOverlayChanged();
|
||||
if (mKeyguardStatusBar != null) mKeyguardStatusBar.onOverlayChanged();
|
||||
// Recreate Indication controller because internal references changed
|
||||
mKeyguardIndicationController =
|
||||
SystemUIFactory.getInstance().createKeyguardIndicationController(mContext,
|
||||
@@ -1373,7 +1371,7 @@ public class StatusBar extends SystemUI implements DemoMode,
|
||||
}
|
||||
|
||||
private void inflateSignalClusters() {
|
||||
reinflateSignalCluster(mKeyguardStatusBar);
|
||||
if (mKeyguardStatusBar != null) reinflateSignalCluster(mKeyguardStatusBar);
|
||||
}
|
||||
|
||||
public static SignalClusterView reinflateSignalCluster(View view) {
|
||||
@@ -4565,7 +4563,7 @@ public class StatusBar extends SystemUI implements DemoMode,
|
||||
if (mKeyguardUserSwitcher != null) {
|
||||
mKeyguardUserSwitcher.setKeyguard(true, fromShadeLocked);
|
||||
}
|
||||
mStatusBarView.removePendingHideExpandedRunnables();
|
||||
if (mStatusBarView != null) mStatusBarView.removePendingHideExpandedRunnables();
|
||||
if (mAmbientIndicationContainer != null) {
|
||||
mAmbientIndicationContainer.setVisibility(View.VISIBLE);
|
||||
}
|
||||
@@ -4603,7 +4601,7 @@ public class StatusBar extends SystemUI implements DemoMode,
|
||||
/**
|
||||
* Switches theme from light to dark and vice-versa.
|
||||
*/
|
||||
private void updateTheme() {
|
||||
protected void updateTheme() {
|
||||
final boolean inflated = mStackScroller != null;
|
||||
|
||||
// The system wallpaper defines if QS should be light or dark.
|
||||
@@ -5673,7 +5671,8 @@ public class StatusBar extends SystemUI implements DemoMode,
|
||||
|
||||
protected KeyguardManager mKeyguardManager;
|
||||
private LockPatternUtils mLockPatternUtils;
|
||||
private DeviceProvisionedController mDeviceProvisionedController;
|
||||
private DeviceProvisionedController mDeviceProvisionedController
|
||||
= Dependency.get(DeviceProvisionedController.class);
|
||||
protected SystemServicesProxy mSystemServicesProxy;
|
||||
|
||||
// UI-specific methods
|
||||
|
||||
@@ -42,6 +42,7 @@
|
||||
<uses-permission android:name="android.permission.TRUST_LISTENER" />
|
||||
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
|
||||
<uses-permission android:name="android.permission.DEVICE_POWER" />
|
||||
<uses-permission android:name="android.permission.READ_CONTACTS" />
|
||||
|
||||
<application>
|
||||
<uses-library android:name="android.test.runner" />
|
||||
|
||||
@@ -26,21 +26,19 @@ import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyBoolean;
|
||||
import static org.mockito.ArgumentMatchers.anyInt;
|
||||
import static org.mockito.ArgumentMatchers.anyString;
|
||||
import static org.mockito.Matchers.any;
|
||||
import static org.mockito.Matchers.anyBoolean;
|
||||
import static org.mockito.Matchers.anyInt;
|
||||
import static org.mockito.Matchers.anyString;
|
||||
import static org.mockito.Mockito.doAnswer;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.when;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.app.Notification;
|
||||
import android.app.trust.TrustManager;
|
||||
import android.content.Context;
|
||||
import android.hardware.fingerprint.FingerprintManager;
|
||||
import android.metrics.LogMaker;
|
||||
import android.os.Binder;
|
||||
import android.os.Handler;
|
||||
import android.os.HandlerThread;
|
||||
import android.os.IPowerManager;
|
||||
@@ -51,20 +49,25 @@ import android.os.UserHandle;
|
||||
import android.service.notification.StatusBarNotification;
|
||||
import android.support.test.filters.SmallTest;
|
||||
import android.support.test.metricshelper.MetricsAsserts;
|
||||
import android.support.test.runner.AndroidJUnit4;
|
||||
import android.testing.AndroidTestingRunner;
|
||||
import android.testing.LayoutInflaterBuilder;
|
||||
import android.testing.TestableLooper;
|
||||
import android.testing.TestableLooper.MessageHandler;
|
||||
import android.testing.TestableLooper.RunWithLooper;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup.LayoutParams;
|
||||
import android.widget.FrameLayout;
|
||||
|
||||
import com.android.internal.logging.MetricsLogger;
|
||||
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
|
||||
import com.android.internal.logging.testing.FakeMetricsLogger;
|
||||
import com.android.internal.statusbar.IStatusBarService;
|
||||
import com.android.keyguard.KeyguardHostView.OnDismissAction;
|
||||
import com.android.keyguard.KeyguardStatusView;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.SysuiTestCase;
|
||||
import com.android.systemui.assist.AssistManager;
|
||||
import com.android.systemui.keyguard.WakefulnessLifecycle;
|
||||
import com.android.systemui.recents.misc.SystemServicesProxy;
|
||||
import com.android.systemui.statusbar.ActivatableNotificationView;
|
||||
@@ -73,7 +76,11 @@ import com.android.systemui.statusbar.KeyguardIndicationController;
|
||||
import com.android.systemui.statusbar.NotificationData;
|
||||
import com.android.systemui.statusbar.NotificationData.Entry;
|
||||
import com.android.systemui.statusbar.StatusBarState;
|
||||
import com.android.systemui.statusbar.policy.DateView;
|
||||
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
|
||||
import com.android.systemui.statusbar.policy.HeadsUpManager;
|
||||
import com.android.systemui.statusbar.policy.KeyguardMonitor;
|
||||
import com.android.systemui.statusbar.policy.KeyguardMonitorImpl;
|
||||
import com.android.systemui.statusbar.stack.NotificationStackScrollLayout;
|
||||
|
||||
import org.junit.Before;
|
||||
@@ -106,12 +113,20 @@ public class StatusBarTest extends SysuiTestCase {
|
||||
|
||||
@Before
|
||||
public void setup() throws Exception {
|
||||
mContext.setTheme(R.style.Theme_SystemUI_Light);
|
||||
mDependency.injectMockDependency(AssistManager.class);
|
||||
mDependency.injectMockDependency(DeviceProvisionedController.class);
|
||||
mDependency.injectTestDependency(KeyguardMonitor.class, mock(KeyguardMonitorImpl.class));
|
||||
CommandQueue commandQueue = mock(CommandQueue.class);
|
||||
when(commandQueue.asBinder()).thenReturn(new Binder());
|
||||
mContext.putComponent(CommandQueue.class, commandQueue);
|
||||
mContext.addMockSystemService(TrustManager.class, mock(TrustManager.class));
|
||||
mContext.addMockSystemService(FingerprintManager.class, mock(FingerprintManager.class));
|
||||
mStatusBarKeyguardViewManager = mock(StatusBarKeyguardViewManager.class);
|
||||
mUnlockMethodCache = mock(UnlockMethodCache.class);
|
||||
mKeyguardIndicationController = mock(KeyguardIndicationController.class);
|
||||
mStackScroller = mock(NotificationStackScrollLayout.class);
|
||||
when(mStackScroller.generateLayoutParams(any())).thenReturn(new LayoutParams(0, 0));
|
||||
mMetricsLogger = new FakeMetricsLogger();
|
||||
mHeadsUpManager = mock(HeadsUpManager.class);
|
||||
mNotificationData = mock(NotificationData.class);
|
||||
@@ -133,6 +148,7 @@ public class StatusBarTest extends SysuiTestCase {
|
||||
mNotificationData, mPowerManager, mSystemServicesProxy, mNotificationPanelView,
|
||||
mBarService);
|
||||
mStatusBar.mContext = mContext;
|
||||
mStatusBar.mComponents = mContext.getComponents();
|
||||
doAnswer(invocation -> {
|
||||
OnDismissAction onDismissAction = (OnDismissAction) invocation.getArguments()[0];
|
||||
onDismissAction.onDismiss();
|
||||
@@ -484,6 +500,16 @@ public class StatusBarTest extends SysuiTestCase {
|
||||
mStatusBar.dump(null, new PrintWriter(new ByteArrayOutputStream()), null);
|
||||
}
|
||||
|
||||
@Test
|
||||
@RunWithLooper(setAsMainLooper = true)
|
||||
public void testUpdateKeyguardState_DoesNotCrash() {
|
||||
mStatusBar.mStatusBarWindow = mock(StatusBarWindowView.class);
|
||||
mStatusBar.mState = StatusBarState.KEYGUARD;
|
||||
mStatusBar.mDozeScrimController = mock(DozeScrimController.class);
|
||||
mStatusBar.mNotificationIconAreaController = mock(NotificationIconAreaController.class);
|
||||
mStatusBar.updateKeyguardState(false, false);
|
||||
}
|
||||
|
||||
static class TestableStatusBar extends StatusBar {
|
||||
public TestableStatusBar(StatusBarKeyguardViewManager man,
|
||||
UnlockMethodCache unlock, KeyguardIndicationController key,
|
||||
@@ -502,6 +528,7 @@ public class StatusBarTest extends SysuiTestCase {
|
||||
mNotificationPanel = panelView;
|
||||
mBarService = barService;
|
||||
mWakefulnessLifecycle = createAwakeWakefulnessLifecycle();
|
||||
mScrimController = mock(ScrimController.class);
|
||||
}
|
||||
|
||||
private WakefulnessLifecycle createAwakeWakefulnessLifecycle() {
|
||||
@@ -511,6 +538,11 @@ public class StatusBarTest extends SysuiTestCase {
|
||||
return wakefulnessLifecycle;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void updateTheme() {
|
||||
// Do nothing for now, until we have more mocking and StatusBar is smaller.
|
||||
}
|
||||
|
||||
public void setBarStateForTest(int state) {
|
||||
mState = state;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user