Merge "Sets up LifecycleOwner for shade." into tm-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
cce53f3c16
@@ -44,6 +44,8 @@ import android.view.WindowManager;
|
|||||||
import android.view.WindowManager.LayoutParams;
|
import android.view.WindowManager.LayoutParams;
|
||||||
import android.view.WindowManagerGlobal;
|
import android.view.WindowManagerGlobal;
|
||||||
|
|
||||||
|
import androidx.lifecycle.ViewTreeLifecycleOwner;
|
||||||
|
|
||||||
import com.android.keyguard.KeyguardUpdateMonitor;
|
import com.android.keyguard.KeyguardUpdateMonitor;
|
||||||
import com.android.systemui.Dumpable;
|
import com.android.systemui.Dumpable;
|
||||||
import com.android.systemui.R;
|
import com.android.systemui.R;
|
||||||
@@ -52,6 +54,7 @@ import com.android.systemui.colorextraction.SysuiColorExtractor;
|
|||||||
import com.android.systemui.dagger.SysUISingleton;
|
import com.android.systemui.dagger.SysUISingleton;
|
||||||
import com.android.systemui.dump.DumpManager;
|
import com.android.systemui.dump.DumpManager;
|
||||||
import com.android.systemui.keyguard.KeyguardViewMediator;
|
import com.android.systemui.keyguard.KeyguardViewMediator;
|
||||||
|
import com.android.systemui.lifecycle.WindowAddedViewLifecycleOwner;
|
||||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||||
import com.android.systemui.plugins.statusbar.StatusBarStateController.StateListener;
|
import com.android.systemui.plugins.statusbar.StatusBarStateController.StateListener;
|
||||||
import com.android.systemui.statusbar.NotificationShadeWindowController;
|
import com.android.systemui.statusbar.NotificationShadeWindowController;
|
||||||
@@ -241,6 +244,16 @@ public class NotificationShadeWindowControllerImpl implements NotificationShadeW
|
|||||||
mLp.insetsFlags.behavior = BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE;
|
mLp.insetsFlags.behavior = BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE;
|
||||||
|
|
||||||
mWindowManager.addView(mNotificationShadeView, mLp);
|
mWindowManager.addView(mNotificationShadeView, mLp);
|
||||||
|
|
||||||
|
// Set up and "inject" a LifecycleOwner bound to the Window-View relationship such that all
|
||||||
|
// views in the sub-tree rooted under this view can access the LifecycleOwner using
|
||||||
|
// ViewTreeLifecycleOwner.get(...).
|
||||||
|
if (ViewTreeLifecycleOwner.get(mNotificationShadeView) == null) {
|
||||||
|
ViewTreeLifecycleOwner.set(
|
||||||
|
mNotificationShadeView,
|
||||||
|
new WindowAddedViewLifecycleOwner(mNotificationShadeView));
|
||||||
|
}
|
||||||
|
|
||||||
mLpChanged.copyFrom(mLp);
|
mLpChanged.copyFrom(mLp);
|
||||||
onThemeChanged();
|
onThemeChanged();
|
||||||
|
|
||||||
|
|||||||
@@ -28,8 +28,10 @@ import static org.mockito.ArgumentMatchers.anyInt;
|
|||||||
import static org.mockito.ArgumentMatchers.eq;
|
import static org.mockito.ArgumentMatchers.eq;
|
||||||
import static org.mockito.Mockito.atLeastOnce;
|
import static org.mockito.Mockito.atLeastOnce;
|
||||||
import static org.mockito.Mockito.clearInvocations;
|
import static org.mockito.Mockito.clearInvocations;
|
||||||
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.never;
|
import static org.mockito.Mockito.never;
|
||||||
import static org.mockito.Mockito.reset;
|
import static org.mockito.Mockito.reset;
|
||||||
|
import static org.mockito.Mockito.spy;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.verifyNoMoreInteractions;
|
import static org.mockito.Mockito.verifyNoMoreInteractions;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
@@ -42,6 +44,8 @@ import android.testing.TestableLooper.RunWithLooper;
|
|||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.WindowManager;
|
import android.view.WindowManager;
|
||||||
|
|
||||||
|
import androidx.lifecycle.LifecycleOwner;
|
||||||
|
import androidx.lifecycle.ViewTreeLifecycleOwner;
|
||||||
import androidx.test.filters.SmallTest;
|
import androidx.test.filters.SmallTest;
|
||||||
|
|
||||||
import com.android.internal.colorextraction.ColorExtractor;
|
import com.android.internal.colorextraction.ColorExtractor;
|
||||||
@@ -61,6 +65,7 @@ import org.mockito.ArgumentCaptor;
|
|||||||
import org.mockito.Captor;
|
import org.mockito.Captor;
|
||||||
import org.mockito.Mock;
|
import org.mockito.Mock;
|
||||||
import org.mockito.MockitoAnnotations;
|
import org.mockito.MockitoAnnotations;
|
||||||
|
import org.mockito.Spy;
|
||||||
|
|
||||||
@RunWith(AndroidTestingRunner.class)
|
@RunWith(AndroidTestingRunner.class)
|
||||||
@RunWithLooper
|
@RunWithLooper
|
||||||
@@ -69,7 +74,8 @@ public class NotificationShadeWindowControllerImplTest extends SysuiTestCase {
|
|||||||
|
|
||||||
@Mock private WindowManager mWindowManager;
|
@Mock private WindowManager mWindowManager;
|
||||||
@Mock private DozeParameters mDozeParameters;
|
@Mock private DozeParameters mDozeParameters;
|
||||||
@Mock private NotificationShadeWindowView mNotificationShadeWindowView;
|
@Spy private final NotificationShadeWindowView mNotificationShadeWindowView = spy(
|
||||||
|
new NotificationShadeWindowView(mContext, null));
|
||||||
@Mock private IActivityManager mActivityManager;
|
@Mock private IActivityManager mActivityManager;
|
||||||
@Mock private SysuiStatusBarStateController mStatusBarStateController;
|
@Mock private SysuiStatusBarStateController mStatusBarStateController;
|
||||||
@Mock private ConfigurationController mConfigurationController;
|
@Mock private ConfigurationController mConfigurationController;
|
||||||
@@ -85,6 +91,7 @@ public class NotificationShadeWindowControllerImplTest extends SysuiTestCase {
|
|||||||
|
|
||||||
private NotificationShadeWindowControllerImpl mNotificationShadeWindowController;
|
private NotificationShadeWindowControllerImpl mNotificationShadeWindowController;
|
||||||
|
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
@@ -176,6 +183,24 @@ public class NotificationShadeWindowControllerImplTest extends SysuiTestCase {
|
|||||||
verify(mWindowManager, never()).updateViewLayout(any(), mLayoutParameters.capture());
|
verify(mWindowManager, never()).updateViewLayout(any(), mLayoutParameters.capture());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void attach_setsUpLifecycleOwner() {
|
||||||
|
mNotificationShadeWindowController.attach();
|
||||||
|
|
||||||
|
assertThat(ViewTreeLifecycleOwner.get(mNotificationShadeWindowView)).isNotNull();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void attach_doesNotSetUpLifecycleOwnerIfAlreadySet() {
|
||||||
|
final LifecycleOwner previouslySet = mock(LifecycleOwner.class);
|
||||||
|
ViewTreeLifecycleOwner.set(mNotificationShadeWindowView, previouslySet);
|
||||||
|
|
||||||
|
mNotificationShadeWindowController.attach();
|
||||||
|
|
||||||
|
assertThat(ViewTreeLifecycleOwner.get(mNotificationShadeWindowView))
|
||||||
|
.isEqualTo(previouslySet);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void setScrimsVisibility_earlyReturn() {
|
public void setScrimsVisibility_earlyReturn() {
|
||||||
clearInvocations(mWindowManager);
|
clearInvocations(mWindowManager);
|
||||||
|
|||||||
@@ -71,6 +71,7 @@ import android.testing.TestableLooper;
|
|||||||
import android.util.Pair;
|
import android.util.Pair;
|
||||||
import android.util.SparseArray;
|
import android.util.SparseArray;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.view.ViewTreeObserver;
|
||||||
import android.view.WindowManager;
|
import android.view.WindowManager;
|
||||||
|
|
||||||
import androidx.test.filters.SmallTest;
|
import androidx.test.filters.SmallTest;
|
||||||
@@ -265,6 +266,8 @@ public class BubblesTest extends SysuiTestCase {
|
|||||||
ShellExecutor syncExecutor = new SyncExecutor();
|
ShellExecutor syncExecutor = new SyncExecutor();
|
||||||
|
|
||||||
when(mColorExtractor.getNeutralColors()).thenReturn(mGradientColors);
|
when(mColorExtractor.getNeutralColors()).thenReturn(mGradientColors);
|
||||||
|
when(mNotificationShadeWindowView.getViewTreeObserver())
|
||||||
|
.thenReturn(mock(ViewTreeObserver.class));
|
||||||
|
|
||||||
mNotificationShadeWindowController = new NotificationShadeWindowControllerImpl(mContext,
|
mNotificationShadeWindowController = new NotificationShadeWindowControllerImpl(mContext,
|
||||||
mWindowManager, mActivityManager, mDozeParameters, mStatusBarStateController,
|
mWindowManager, mActivityManager, mDozeParameters, mStatusBarStateController,
|
||||||
|
|||||||
Reference in New Issue
Block a user