Loading packages/SystemUI/multivalentTests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.kt +1 −1 Original line number Diff line number Diff line Loading @@ -783,7 +783,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { underTest.reinflateViewFlipper(onViewInflatedCallback) verify(viewFlipperController).clearViews() verify(viewFlipperController) .asynchronouslyInflateView(any(), any(), onViewInflatedCallbackArgumentCaptor.capture()) .getSecurityView(any(), any(), onViewInflatedCallbackArgumentCaptor.capture()) onViewInflatedCallbackArgumentCaptor.value.onViewInflated(inputViewController) verify(view).updateSecurityViewFlipper() } Loading packages/SystemUI/multivalentTests/src/com/android/keyguard/KeyguardSecurityViewFlipperControllerTest.java +28 −10 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.verify; Loading Loading @@ -129,23 +130,40 @@ public class KeyguardSecurityViewFlipperControllerTest extends SysuiTestCase { } @Test public void asynchronouslyInflateView() { mKeyguardSecurityViewFlipperController.asynchronouslyInflateView(SecurityMode.PIN, mKeyguardSecurityCallback, null); verify(mAsyncLayoutInflater).inflate(anyInt(), eq(mView), any( AsyncLayoutInflater.OnInflateFinishedListener.class)); public void asynchronouslyInflateView_setNeedsInput() { mKeyguardSecurityViewFlipperController.clearViews(); ArgumentCaptor<AsyncLayoutInflater.OnInflateFinishedListener> argumentCaptor = ArgumentCaptor.forClass(AsyncLayoutInflater.OnInflateFinishedListener.class); mKeyguardSecurityViewFlipperController.getSecurityView(SecurityMode.PIN, mKeyguardSecurityCallback, controller -> {}); verify(mAsyncLayoutInflater).inflate(anyInt(), eq(mView), argumentCaptor.capture()); argumentCaptor.getValue().onInflateFinished( LayoutInflater.from(getContext()).inflate(R.layout.keyguard_pin_view, null), R.layout.keyguard_pin_view, mView); } @Test public void asynchronouslyInflateView_setNeedsInput() { public void getSecurityView_multipleInvocations_callsAsyncInflateOnce() { mKeyguardSecurityViewFlipperController.clearViews(); // Make 2 calls to get security view var callback1 = mock(KeyguardSecurityViewFlipperController.OnViewInflatedCallback.class); var callback2 = mock(KeyguardSecurityViewFlipperController.OnViewInflatedCallback.class); mKeyguardSecurityViewFlipperController.getSecurityView(SecurityMode.PIN, mKeyguardSecurityCallback, callback1); mKeyguardSecurityViewFlipperController.getSecurityView(SecurityMode.PIN, mKeyguardSecurityCallback, callback2); // Verify inflation is called once... ArgumentCaptor<AsyncLayoutInflater.OnInflateFinishedListener> argumentCaptor = ArgumentCaptor.forClass(AsyncLayoutInflater.OnInflateFinishedListener.class); mKeyguardSecurityViewFlipperController.asynchronouslyInflateView(SecurityMode.PIN, mKeyguardSecurityCallback, null); verify(mAsyncLayoutInflater).inflate(anyInt(), eq(mView), argumentCaptor.capture()); argumentCaptor.getValue().onInflateFinished( LayoutInflater.from(getContext()).inflate(R.layout.keyguard_password_view, null), R.layout.keyguard_password_view, mView); LayoutInflater.from(getContext()).inflate(R.layout.keyguard_pin_view, null), R.layout.keyguard_pin_view, mView); // ... and both callbacks get invoked verify(callback1).onViewInflated(mKeyguardInputViewController); verify(callback2).onViewInflated(mKeyguardInputViewController); } @Test Loading packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java +1 −1 Original line number Diff line number Diff line Loading @@ -1242,7 +1242,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard public void reinflateViewFlipper( KeyguardSecurityViewFlipperController.OnViewInflatedCallback onViewInflatedListener) { mSecurityViewFlipperController.clearViews(); mSecurityViewFlipperController.asynchronouslyInflateView(mCurrentSecurityMode, mSecurityViewFlipperController.getSecurityView(mCurrentSecurityMode, mKeyguardSecurityCallback, (controller) -> { mView.updateSecurityViewFlipper(); onViewInflatedListener.onViewInflated(controller); Loading packages/SystemUI/src/com/android/keyguard/KeyguardSecurityViewFlipperController.java +25 −15 Original line number Diff line number Diff line Loading @@ -23,7 +23,6 @@ import static com.android.systemui.flags.Flags.LOCKSCREEN_ENABLE_LANDSCAPE; import android.util.Log; import android.view.LayoutInflater; import androidx.annotation.Nullable; import androidx.asynclayoutinflater.view.AsyncLayoutInflater; import com.android.internal.annotations.VisibleForTesting; Loading @@ -35,7 +34,9 @@ import com.android.systemui.res.R; import com.android.systemui.util.ViewController; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import javax.inject.Inject; Loading @@ -56,6 +57,8 @@ public class KeyguardSecurityViewFlipperController private final EmergencyButtonController.Factory mEmergencyButtonControllerFactory; private final Factory mKeyguardSecurityViewControllerFactory; private final FeatureFlags mFeatureFlags; private final List<OnViewInflatedCallback> mOnViewInflatedListeners = new ArrayList<>(); private final Set<SecurityMode> mSecurityModeInProgress = new HashSet<>(); @Inject protected KeyguardSecurityViewFlipperController(KeyguardSecurityViewFlipper view, Loading Loading @@ -106,7 +109,13 @@ public class KeyguardSecurityViewFlipperController } } asynchronouslyInflateView(securityMode, keyguardSecurityCallback, onViewInflatedCallback); // Prevent multiple inflations for the same security mode. Instead, add callback to a list // and then notify each in order when the view is inflated. mOnViewInflatedListeners.add(onViewInflatedCallback); if (!mSecurityModeInProgress.contains(securityMode)) { mSecurityModeInProgress.add(securityMode); asynchronouslyInflateView(securityMode, keyguardSecurityCallback); } } /** Loading @@ -117,9 +126,8 @@ public class KeyguardSecurityViewFlipperController * @param securityMode * @param keyguardSecurityCallback */ public void asynchronouslyInflateView(SecurityMode securityMode, KeyguardSecurityCallback keyguardSecurityCallback, @Nullable OnViewInflatedCallback onViewInflatedListener) { private void asynchronouslyInflateView(SecurityMode securityMode, KeyguardSecurityCallback keyguardSecurityCallback) { int layoutId = mFeatureFlags.isEnabled(LOCKSCREEN_ENABLE_LANDSCAPE) ? getLayoutIdFor(securityMode) : getLegacyLayoutIdFor(securityMode); if (layoutId != 0) { Loading @@ -129,14 +137,18 @@ public class KeyguardSecurityViewFlipperController mAsyncLayoutInflater.inflate(layoutId, mView, (view, resId, parent) -> { mView.addView(view); mSecurityModeInProgress.remove(securityMode); KeyguardInputViewController<KeyguardInputView> childController = mKeyguardSecurityViewControllerFactory.create( (KeyguardInputView) view, securityMode, keyguardSecurityCallback); childController.init(); mChildren.add(childController); if (onViewInflatedListener != null) { onViewInflatedListener.onViewInflated(childController); for (OnViewInflatedCallback callback : mOnViewInflatedListeners) { callback.onViewInflated(childController); } mOnViewInflatedListeners.clear(); // Single bouncer constrains are default if (mFeatureFlags.isEnabled(LOCKSCREEN_ENABLE_LANDSCAPE)) { Loading @@ -144,10 +156,8 @@ public class KeyguardSecurityViewFlipperController getResources().getBoolean(R.bool.update_bouncer_constraints) && getResources().getConfiguration().orientation == ORIENTATION_LANDSCAPE; updateConstraints(useSplitBouncer); } } }); } } Loading Loading
packages/SystemUI/multivalentTests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.kt +1 −1 Original line number Diff line number Diff line Loading @@ -783,7 +783,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { underTest.reinflateViewFlipper(onViewInflatedCallback) verify(viewFlipperController).clearViews() verify(viewFlipperController) .asynchronouslyInflateView(any(), any(), onViewInflatedCallbackArgumentCaptor.capture()) .getSecurityView(any(), any(), onViewInflatedCallbackArgumentCaptor.capture()) onViewInflatedCallbackArgumentCaptor.value.onViewInflated(inputViewController) verify(view).updateSecurityViewFlipper() } Loading
packages/SystemUI/multivalentTests/src/com/android/keyguard/KeyguardSecurityViewFlipperControllerTest.java +28 −10 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.verify; Loading Loading @@ -129,23 +130,40 @@ public class KeyguardSecurityViewFlipperControllerTest extends SysuiTestCase { } @Test public void asynchronouslyInflateView() { mKeyguardSecurityViewFlipperController.asynchronouslyInflateView(SecurityMode.PIN, mKeyguardSecurityCallback, null); verify(mAsyncLayoutInflater).inflate(anyInt(), eq(mView), any( AsyncLayoutInflater.OnInflateFinishedListener.class)); public void asynchronouslyInflateView_setNeedsInput() { mKeyguardSecurityViewFlipperController.clearViews(); ArgumentCaptor<AsyncLayoutInflater.OnInflateFinishedListener> argumentCaptor = ArgumentCaptor.forClass(AsyncLayoutInflater.OnInflateFinishedListener.class); mKeyguardSecurityViewFlipperController.getSecurityView(SecurityMode.PIN, mKeyguardSecurityCallback, controller -> {}); verify(mAsyncLayoutInflater).inflate(anyInt(), eq(mView), argumentCaptor.capture()); argumentCaptor.getValue().onInflateFinished( LayoutInflater.from(getContext()).inflate(R.layout.keyguard_pin_view, null), R.layout.keyguard_pin_view, mView); } @Test public void asynchronouslyInflateView_setNeedsInput() { public void getSecurityView_multipleInvocations_callsAsyncInflateOnce() { mKeyguardSecurityViewFlipperController.clearViews(); // Make 2 calls to get security view var callback1 = mock(KeyguardSecurityViewFlipperController.OnViewInflatedCallback.class); var callback2 = mock(KeyguardSecurityViewFlipperController.OnViewInflatedCallback.class); mKeyguardSecurityViewFlipperController.getSecurityView(SecurityMode.PIN, mKeyguardSecurityCallback, callback1); mKeyguardSecurityViewFlipperController.getSecurityView(SecurityMode.PIN, mKeyguardSecurityCallback, callback2); // Verify inflation is called once... ArgumentCaptor<AsyncLayoutInflater.OnInflateFinishedListener> argumentCaptor = ArgumentCaptor.forClass(AsyncLayoutInflater.OnInflateFinishedListener.class); mKeyguardSecurityViewFlipperController.asynchronouslyInflateView(SecurityMode.PIN, mKeyguardSecurityCallback, null); verify(mAsyncLayoutInflater).inflate(anyInt(), eq(mView), argumentCaptor.capture()); argumentCaptor.getValue().onInflateFinished( LayoutInflater.from(getContext()).inflate(R.layout.keyguard_password_view, null), R.layout.keyguard_password_view, mView); LayoutInflater.from(getContext()).inflate(R.layout.keyguard_pin_view, null), R.layout.keyguard_pin_view, mView); // ... and both callbacks get invoked verify(callback1).onViewInflated(mKeyguardInputViewController); verify(callback2).onViewInflated(mKeyguardInputViewController); } @Test Loading
packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java +1 −1 Original line number Diff line number Diff line Loading @@ -1242,7 +1242,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard public void reinflateViewFlipper( KeyguardSecurityViewFlipperController.OnViewInflatedCallback onViewInflatedListener) { mSecurityViewFlipperController.clearViews(); mSecurityViewFlipperController.asynchronouslyInflateView(mCurrentSecurityMode, mSecurityViewFlipperController.getSecurityView(mCurrentSecurityMode, mKeyguardSecurityCallback, (controller) -> { mView.updateSecurityViewFlipper(); onViewInflatedListener.onViewInflated(controller); Loading
packages/SystemUI/src/com/android/keyguard/KeyguardSecurityViewFlipperController.java +25 −15 Original line number Diff line number Diff line Loading @@ -23,7 +23,6 @@ import static com.android.systemui.flags.Flags.LOCKSCREEN_ENABLE_LANDSCAPE; import android.util.Log; import android.view.LayoutInflater; import androidx.annotation.Nullable; import androidx.asynclayoutinflater.view.AsyncLayoutInflater; import com.android.internal.annotations.VisibleForTesting; Loading @@ -35,7 +34,9 @@ import com.android.systemui.res.R; import com.android.systemui.util.ViewController; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import javax.inject.Inject; Loading @@ -56,6 +57,8 @@ public class KeyguardSecurityViewFlipperController private final EmergencyButtonController.Factory mEmergencyButtonControllerFactory; private final Factory mKeyguardSecurityViewControllerFactory; private final FeatureFlags mFeatureFlags; private final List<OnViewInflatedCallback> mOnViewInflatedListeners = new ArrayList<>(); private final Set<SecurityMode> mSecurityModeInProgress = new HashSet<>(); @Inject protected KeyguardSecurityViewFlipperController(KeyguardSecurityViewFlipper view, Loading Loading @@ -106,7 +109,13 @@ public class KeyguardSecurityViewFlipperController } } asynchronouslyInflateView(securityMode, keyguardSecurityCallback, onViewInflatedCallback); // Prevent multiple inflations for the same security mode. Instead, add callback to a list // and then notify each in order when the view is inflated. mOnViewInflatedListeners.add(onViewInflatedCallback); if (!mSecurityModeInProgress.contains(securityMode)) { mSecurityModeInProgress.add(securityMode); asynchronouslyInflateView(securityMode, keyguardSecurityCallback); } } /** Loading @@ -117,9 +126,8 @@ public class KeyguardSecurityViewFlipperController * @param securityMode * @param keyguardSecurityCallback */ public void asynchronouslyInflateView(SecurityMode securityMode, KeyguardSecurityCallback keyguardSecurityCallback, @Nullable OnViewInflatedCallback onViewInflatedListener) { private void asynchronouslyInflateView(SecurityMode securityMode, KeyguardSecurityCallback keyguardSecurityCallback) { int layoutId = mFeatureFlags.isEnabled(LOCKSCREEN_ENABLE_LANDSCAPE) ? getLayoutIdFor(securityMode) : getLegacyLayoutIdFor(securityMode); if (layoutId != 0) { Loading @@ -129,14 +137,18 @@ public class KeyguardSecurityViewFlipperController mAsyncLayoutInflater.inflate(layoutId, mView, (view, resId, parent) -> { mView.addView(view); mSecurityModeInProgress.remove(securityMode); KeyguardInputViewController<KeyguardInputView> childController = mKeyguardSecurityViewControllerFactory.create( (KeyguardInputView) view, securityMode, keyguardSecurityCallback); childController.init(); mChildren.add(childController); if (onViewInflatedListener != null) { onViewInflatedListener.onViewInflated(childController); for (OnViewInflatedCallback callback : mOnViewInflatedListeners) { callback.onViewInflated(childController); } mOnViewInflatedListeners.clear(); // Single bouncer constrains are default if (mFeatureFlags.isEnabled(LOCKSCREEN_ENABLE_LANDSCAPE)) { Loading @@ -144,10 +156,8 @@ public class KeyguardSecurityViewFlipperController getResources().getBoolean(R.bool.update_bouncer_constraints) && getResources().getConfiguration().orientation == ORIENTATION_LANDSCAPE; updateConstraints(useSplitBouncer); } } }); } } Loading