Merge "Add westworld log to quick access wallet UI." into sc-dev am: bceb8dc9b0 am: 2c8c799bdf

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15190472

Change-Id: I24c6ecaf481e35713b76bd0147ba33f0bbfe5567
This commit is contained in:
Silin Huang
2021-07-02 22:45:06 +00:00
committed by Automerger Merge Worker
4 changed files with 116 additions and 4 deletions

View File

@@ -34,6 +34,7 @@ import android.widget.Toolbar;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import com.android.internal.logging.UiEventLogger;
import com.android.keyguard.KeyguardUpdateMonitor; import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.keyguard.KeyguardUpdateMonitorCallback; import com.android.keyguard.KeyguardUpdateMonitorCallback;
import com.android.settingslib.Utils; import com.android.settingslib.Utils;
@@ -70,6 +71,7 @@ public class WalletActivity extends LifecycleActivity implements
private final UserTracker mUserTracker; private final UserTracker mUserTracker;
private final KeyguardUpdateMonitor mKeyguardUpdateMonitor; private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
private final StatusBarKeyguardViewManager mKeyguardViewManager; private final StatusBarKeyguardViewManager mKeyguardViewManager;
private final UiEventLogger mUiEventLogger;
private KeyguardUpdateMonitorCallback mKeyguardUpdateMonitorCallback; private KeyguardUpdateMonitorCallback mKeyguardUpdateMonitorCallback;
private WalletScreenController mWalletScreenController; private WalletScreenController mWalletScreenController;
@@ -87,7 +89,8 @@ public class WalletActivity extends LifecycleActivity implements
FalsingCollector falsingCollector, FalsingCollector falsingCollector,
UserTracker userTracker, UserTracker userTracker,
KeyguardUpdateMonitor keyguardUpdateMonitor, KeyguardUpdateMonitor keyguardUpdateMonitor,
StatusBarKeyguardViewManager keyguardViewManager) { StatusBarKeyguardViewManager keyguardViewManager,
UiEventLogger uiEventLogger) {
mKeyguardStateController = keyguardStateController; mKeyguardStateController = keyguardStateController;
mKeyguardDismissUtil = keyguardDismissUtil; mKeyguardDismissUtil = keyguardDismissUtil;
mActivityStarter = activityStarter; mActivityStarter = activityStarter;
@@ -98,6 +101,7 @@ public class WalletActivity extends LifecycleActivity implements
mUserTracker = userTracker; mUserTracker = userTracker;
mKeyguardUpdateMonitor = keyguardUpdateMonitor; mKeyguardUpdateMonitor = keyguardUpdateMonitor;
mKeyguardViewManager = keyguardViewManager; mKeyguardViewManager = keyguardViewManager;
mUiEventLogger = uiEventLogger;
} }
@Override @Override
@@ -129,7 +133,8 @@ public class WalletActivity extends LifecycleActivity implements
mUserTracker, mUserTracker,
mFalsingManager, mFalsingManager,
mKeyguardUpdateMonitor, mKeyguardUpdateMonitor,
mKeyguardStateController); mKeyguardStateController,
mUiEventLogger);
mKeyguardUpdateMonitorCallback = new KeyguardUpdateMonitorCallback() { mKeyguardUpdateMonitorCallback = new KeyguardUpdateMonitorCallback() {
@Override @Override
public void onBiometricRunningStateChanged( public void onBiometricRunningStateChanged(
@@ -153,11 +158,14 @@ public class WalletActivity extends LifecycleActivity implements
} }
if (mKeyguardStateController.isUnlocked()) { if (mKeyguardStateController.isUnlocked()) {
mUiEventLogger.log(WalletUiEvent.QAW_SHOW_ALL);
mActivityStarter.startActivity( mActivityStarter.startActivity(
mWalletClient.createWalletIntent(), true); mWalletClient.createWalletIntent(), true);
finish(); finish();
} else { } else {
mUiEventLogger.log(WalletUiEvent.QAW_UNLOCK_FROM_SHOW_ALL_BUTTON);
mKeyguardDismissUtil.executeWhenUnlocked(() -> { mKeyguardDismissUtil.executeWhenUnlocked(() -> {
mUiEventLogger.log(WalletUiEvent.QAW_SHOW_ALL);
mActivityStarter.startActivity( mActivityStarter.startActivity(
mWalletClient.createWalletIntent(), true); mWalletClient.createWalletIntent(), true);
finish(); finish();
@@ -175,6 +183,7 @@ public class WalletActivity extends LifecycleActivity implements
return; return;
} }
mUiEventLogger.log(WalletUiEvent.QAW_UNLOCK_FROM_UNLOCK_BUTTON);
mKeyguardDismissUtil.executeWhenUnlocked(() -> false, false, mKeyguardDismissUtil.executeWhenUnlocked(() -> false, false,
false); false);
}); });

View File

@@ -39,6 +39,7 @@ import android.widget.FrameLayout;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.logging.UiEventLogger;
import com.android.keyguard.KeyguardUpdateMonitor; import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.systemui.R; import com.android.systemui.R;
import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.plugins.ActivityStarter;
@@ -74,6 +75,7 @@ public class WalletScreenController implements
private final WalletView mWalletView; private final WalletView mWalletView;
private final WalletCardCarousel mCardCarousel; private final WalletCardCarousel mCardCarousel;
private final FalsingManager mFalsingManager; private final FalsingManager mFalsingManager;
private final UiEventLogger mUiEventLogger;
@VisibleForTesting String mSelectedCardId; @VisibleForTesting String mSelectedCardId;
@VisibleForTesting boolean mIsDismissed; @VisibleForTesting boolean mIsDismissed;
@@ -88,7 +90,8 @@ public class WalletScreenController implements
UserTracker userTracker, UserTracker userTracker,
FalsingManager falsingManager, FalsingManager falsingManager,
KeyguardUpdateMonitor keyguardUpdateMonitor, KeyguardUpdateMonitor keyguardUpdateMonitor,
KeyguardStateController keyguardStateController) { KeyguardStateController keyguardStateController,
UiEventLogger uiEventLogger) {
mContext = context; mContext = context;
mWalletClient = walletClient; mWalletClient = walletClient;
mActivityStarter = activityStarter; mActivityStarter = activityStarter;
@@ -97,6 +100,7 @@ public class WalletScreenController implements
mFalsingManager = falsingManager; mFalsingManager = falsingManager;
mKeyguardUpdateMonitor = keyguardUpdateMonitor; mKeyguardUpdateMonitor = keyguardUpdateMonitor;
mKeyguardStateController = keyguardStateController; mKeyguardStateController = keyguardStateController;
mUiEventLogger = uiEventLogger;
mPrefs = userTracker.getUserContext().getSharedPreferences(TAG, Context.MODE_PRIVATE); mPrefs = userTracker.getUserContext().getSharedPreferences(TAG, Context.MODE_PRIVATE);
mWalletView = walletView; mWalletView = walletView;
mWalletView.setMinimumHeight(getExpectedMinHeight()); mWalletView.setMinimumHeight(getExpectedMinHeight());
@@ -147,6 +151,7 @@ public class WalletScreenController implements
isUdfpsEnabled); isUdfpsEnabled);
} }
} }
mUiEventLogger.log(WalletUiEvent.QAW_IMPRESSION);
removeMinHeightAndRecordHeightOnLayout(); removeMinHeightAndRecordHeightOnLayout();
}); });
} }
@@ -180,6 +185,9 @@ public class WalletScreenController implements
if (mIsDismissed) { if (mIsDismissed) {
return; return;
} }
if (mSelectedCardId != null && !mSelectedCardId.equals(card.getCardId())) {
mUiEventLogger.log(WalletUiEvent.QAW_CHANGE_CARD);
}
mSelectedCardId = card.getCardId(); mSelectedCardId = card.getCardId();
selectCard(); selectCard();
} }
@@ -209,6 +217,12 @@ public class WalletScreenController implements
|| ((QAWalletCardViewInfo) cardInfo).mWalletCard.getPendingIntent() == null) { || ((QAWalletCardViewInfo) cardInfo).mWalletCard.getPendingIntent() == null) {
return; return;
} }
if (!mKeyguardStateController.isUnlocked()) {
mUiEventLogger.log(WalletUiEvent.QAW_UNLOCK_FROM_CARD_CLICK);
}
mUiEventLogger.log(WalletUiEvent.QAW_CLICK_CARD);
mActivityStarter.startActivity( mActivityStarter.startActivity(
((QAWalletCardViewInfo) cardInfo).mWalletCard.getPendingIntent().getIntent(), true); ((QAWalletCardViewInfo) cardInfo).mWalletCard.getPendingIntent().getIntent(), true);
} }

View File

@@ -0,0 +1,58 @@
/*
* Copyright (C) 2021 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.systemui.wallet.ui;
import com.android.internal.logging.UiEvent;
import com.android.internal.logging.UiEventLogger;
/**
* Ui events for the Quick Access Wallet.
*/
public enum WalletUiEvent implements UiEventLogger.UiEventEnum {
@UiEvent(doc = "The default payment app is opened to show all payment cards.")
QAW_SHOW_ALL(860),
@UiEvent(doc = "The Quick Access Wallet homescreen is unlocked.")
QAW_UNLOCK_FROM_CARD_CLICK(861),
@UiEvent(doc = "The Quick Access Wallet center card is changed")
QAW_CHANGE_CARD(863),
@UiEvent(doc = "The Quick Access Wallet is opened.")
QAW_IMPRESSION(864),
@UiEvent(doc = "The Quick Access Wallet card is clicked")
QAW_CLICK_CARD(865),
@UiEvent(doc = "The Quick Access Wallet homescreen is unlocked via clicking the unlock button")
QAW_UNLOCK_FROM_UNLOCK_BUTTON(866),
@UiEvent(
doc = "The Quick Access Wallet homescreen is unlocked via clicking the show all button")
QAW_UNLOCK_FROM_SHOW_ALL_BUTTON(867);
private final int mId;
WalletUiEvent(int id) {
mId = id;
}
@Override
public int getId() {
return mId;
}
}

View File

@@ -22,6 +22,7 @@ import static android.view.View.VISIBLE;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
@@ -43,6 +44,7 @@ import android.testing.TestableLooper;
import androidx.test.filters.SmallTest; import androidx.test.filters.SmallTest;
import com.android.internal.logging.UiEventLogger;
import com.android.keyguard.KeyguardUpdateMonitor; import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.systemui.SysuiTestCase; import com.android.systemui.SysuiTestCase;
import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.plugins.ActivityStarter;
@@ -91,6 +93,8 @@ public class WalletScreenControllerTest extends SysuiTestCase {
KeyguardUpdateMonitor mKeyguardUpdateMonitor; KeyguardUpdateMonitor mKeyguardUpdateMonitor;
@Mock @Mock
KeyguardStateController mKeyguardStateController; KeyguardStateController mKeyguardStateController;
@Mock
UiEventLogger mUiEventLogger;
@Captor @Captor
ArgumentCaptor<Intent> mIntentCaptor; ArgumentCaptor<Intent> mIntentCaptor;
@Captor @Captor
@@ -123,7 +127,8 @@ public class WalletScreenControllerTest extends SysuiTestCase {
mUserTracker, mUserTracker,
mFalsingManager, mFalsingManager,
mKeyguardUpdateMonitor, mKeyguardUpdateMonitor,
mKeyguardStateController); mKeyguardStateController,
mUiEventLogger);
} }
@Test @Test
@@ -172,6 +177,8 @@ public class WalletScreenControllerTest extends SysuiTestCase {
callback.onWalletCardsRetrieved(response); callback.onWalletCardsRetrieved(response);
mTestableLooper.processAllMessages(); mTestableLooper.processAllMessages();
verify(mUiEventLogger).log(WalletUiEvent.QAW_IMPRESSION);
assertEquals(VISIBLE, mWalletView.getCardCarouselContainer().getVisibility()); assertEquals(VISIBLE, mWalletView.getCardCarouselContainer().getVisibility());
assertEquals(VISIBLE, mWalletView.getActionButton().getVisibility()); assertEquals(VISIBLE, mWalletView.getActionButton().getVisibility());
} }
@@ -198,6 +205,8 @@ public class WalletScreenControllerTest extends SysuiTestCase {
assertEquals(VISIBLE, mWalletView.getCardCarouselContainer().getVisibility()); assertEquals(VISIBLE, mWalletView.getCardCarouselContainer().getVisibility());
assertEquals("Hold to reader", mWalletView.getCardLabel().getText().toString()); assertEquals("Hold to reader", mWalletView.getCardLabel().getText().toString());
assertEquals(GONE, mWalletView.getErrorView().getVisibility()); assertEquals(GONE, mWalletView.getErrorView().getVisibility());
verify(mUiEventLogger, times(1)).log(WalletUiEvent.QAW_IMPRESSION);
} }
@Test @Test
@@ -351,6 +360,14 @@ public class WalletScreenControllerTest extends SysuiTestCase {
assertEquals(CARD_ID_1, mController.mSelectedCardId); assertEquals(CARD_ID_1, mController.mSelectedCardId);
} }
@Test
public void logOnCardChanged() {
mController.onCardSelected(createCardViewInfo(createWalletCard(mContext)));
mController.onCardSelected(createCardViewInfo(createNonActiveWalletCard(mContext)));
verify(mUiEventLogger, times(1)).log(WalletUiEvent.QAW_CHANGE_CARD);
}
@Test @Test
public void onCardClicked_startIntent() { public void onCardClicked_startIntent() {
WalletCardViewInfo walletCardViewInfo = createCardViewInfo(createWalletCard(mContext)); WalletCardViewInfo walletCardViewInfo = createCardViewInfo(createWalletCard(mContext));
@@ -361,6 +378,20 @@ public class WalletScreenControllerTest extends SysuiTestCase {
assertEquals(mWalletIntent.getAction(), mIntentCaptor.getValue().getAction()); assertEquals(mWalletIntent.getAction(), mIntentCaptor.getValue().getAction());
assertEquals(mWalletIntent.getComponent(), mIntentCaptor.getValue().getComponent()); assertEquals(mWalletIntent.getComponent(), mIntentCaptor.getValue().getComponent());
verify(mUiEventLogger, times(1)).log(WalletUiEvent.QAW_CLICK_CARD);
}
@Test
public void onCardClicked_deviceLocked_logUnlockEvent() {
when(mKeyguardStateController.isUnlocked()).thenReturn(false);
WalletCardViewInfo walletCardViewInfo = createCardViewInfo(createWalletCard(mContext));
mController.onCardClicked(walletCardViewInfo);
verify(mUiEventLogger, times(1))
.log(WalletUiEvent.QAW_UNLOCK_FROM_CARD_CLICK);
verify(mUiEventLogger, times(1)).log(WalletUiEvent.QAW_CLICK_CARD);
} }
@Test @Test