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

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

Change-Id: I82dd55dfcdc7e4d55c7efe404a8923d5f77fb886
This commit is contained in:
Silin Huang
2021-07-02 22:40:21 +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 com.android.internal.logging.UiEventLogger;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.keyguard.KeyguardUpdateMonitorCallback;
import com.android.settingslib.Utils;
@@ -70,6 +71,7 @@ public class WalletActivity extends LifecycleActivity implements
private final UserTracker mUserTracker;
private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
private final StatusBarKeyguardViewManager mKeyguardViewManager;
private final UiEventLogger mUiEventLogger;
private KeyguardUpdateMonitorCallback mKeyguardUpdateMonitorCallback;
private WalletScreenController mWalletScreenController;
@@ -87,7 +89,8 @@ public class WalletActivity extends LifecycleActivity implements
FalsingCollector falsingCollector,
UserTracker userTracker,
KeyguardUpdateMonitor keyguardUpdateMonitor,
StatusBarKeyguardViewManager keyguardViewManager) {
StatusBarKeyguardViewManager keyguardViewManager,
UiEventLogger uiEventLogger) {
mKeyguardStateController = keyguardStateController;
mKeyguardDismissUtil = keyguardDismissUtil;
mActivityStarter = activityStarter;
@@ -98,6 +101,7 @@ public class WalletActivity extends LifecycleActivity implements
mUserTracker = userTracker;
mKeyguardUpdateMonitor = keyguardUpdateMonitor;
mKeyguardViewManager = keyguardViewManager;
mUiEventLogger = uiEventLogger;
}
@Override
@@ -129,7 +133,8 @@ public class WalletActivity extends LifecycleActivity implements
mUserTracker,
mFalsingManager,
mKeyguardUpdateMonitor,
mKeyguardStateController);
mKeyguardStateController,
mUiEventLogger);
mKeyguardUpdateMonitorCallback = new KeyguardUpdateMonitorCallback() {
@Override
public void onBiometricRunningStateChanged(
@@ -153,11 +158,14 @@ public class WalletActivity extends LifecycleActivity implements
}
if (mKeyguardStateController.isUnlocked()) {
mUiEventLogger.log(WalletUiEvent.QAW_SHOW_ALL);
mActivityStarter.startActivity(
mWalletClient.createWalletIntent(), true);
finish();
} else {
mUiEventLogger.log(WalletUiEvent.QAW_UNLOCK_FROM_SHOW_ALL_BUTTON);
mKeyguardDismissUtil.executeWhenUnlocked(() -> {
mUiEventLogger.log(WalletUiEvent.QAW_SHOW_ALL);
mActivityStarter.startActivity(
mWalletClient.createWalletIntent(), true);
finish();
@@ -175,6 +183,7 @@ public class WalletActivity extends LifecycleActivity implements
return;
}
mUiEventLogger.log(WalletUiEvent.QAW_UNLOCK_FROM_UNLOCK_BUTTON);
mKeyguardDismissUtil.executeWhenUnlocked(() -> false, false,
false);
});

View File

@@ -39,6 +39,7 @@ import android.widget.FrameLayout;
import androidx.annotation.NonNull;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.logging.UiEventLogger;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.systemui.R;
import com.android.systemui.plugins.ActivityStarter;
@@ -74,6 +75,7 @@ public class WalletScreenController implements
private final WalletView mWalletView;
private final WalletCardCarousel mCardCarousel;
private final FalsingManager mFalsingManager;
private final UiEventLogger mUiEventLogger;
@VisibleForTesting String mSelectedCardId;
@VisibleForTesting boolean mIsDismissed;
@@ -88,7 +90,8 @@ public class WalletScreenController implements
UserTracker userTracker,
FalsingManager falsingManager,
KeyguardUpdateMonitor keyguardUpdateMonitor,
KeyguardStateController keyguardStateController) {
KeyguardStateController keyguardStateController,
UiEventLogger uiEventLogger) {
mContext = context;
mWalletClient = walletClient;
mActivityStarter = activityStarter;
@@ -97,6 +100,7 @@ public class WalletScreenController implements
mFalsingManager = falsingManager;
mKeyguardUpdateMonitor = keyguardUpdateMonitor;
mKeyguardStateController = keyguardStateController;
mUiEventLogger = uiEventLogger;
mPrefs = userTracker.getUserContext().getSharedPreferences(TAG, Context.MODE_PRIVATE);
mWalletView = walletView;
mWalletView.setMinimumHeight(getExpectedMinHeight());
@@ -147,6 +151,7 @@ public class WalletScreenController implements
isUdfpsEnabled);
}
}
mUiEventLogger.log(WalletUiEvent.QAW_IMPRESSION);
removeMinHeightAndRecordHeightOnLayout();
});
}
@@ -180,6 +185,9 @@ public class WalletScreenController implements
if (mIsDismissed) {
return;
}
if (mSelectedCardId != null && !mSelectedCardId.equals(card.getCardId())) {
mUiEventLogger.log(WalletUiEvent.QAW_CHANGE_CARD);
}
mSelectedCardId = card.getCardId();
selectCard();
}
@@ -209,6 +217,12 @@ public class WalletScreenController implements
|| ((QAWalletCardViewInfo) cardInfo).mWalletCard.getPendingIntent() == null) {
return;
}
if (!mKeyguardStateController.isUnlocked()) {
mUiEventLogger.log(WalletUiEvent.QAW_UNLOCK_FROM_CARD_CLICK);
}
mUiEventLogger.log(WalletUiEvent.QAW_CLICK_CARD);
mActivityStarter.startActivity(
((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.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -43,6 +44,7 @@ import android.testing.TestableLooper;
import androidx.test.filters.SmallTest;
import com.android.internal.logging.UiEventLogger;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.plugins.ActivityStarter;
@@ -91,6 +93,8 @@ public class WalletScreenControllerTest extends SysuiTestCase {
KeyguardUpdateMonitor mKeyguardUpdateMonitor;
@Mock
KeyguardStateController mKeyguardStateController;
@Mock
UiEventLogger mUiEventLogger;
@Captor
ArgumentCaptor<Intent> mIntentCaptor;
@Captor
@@ -123,7 +127,8 @@ public class WalletScreenControllerTest extends SysuiTestCase {
mUserTracker,
mFalsingManager,
mKeyguardUpdateMonitor,
mKeyguardStateController);
mKeyguardStateController,
mUiEventLogger);
}
@Test
@@ -172,6 +177,8 @@ public class WalletScreenControllerTest extends SysuiTestCase {
callback.onWalletCardsRetrieved(response);
mTestableLooper.processAllMessages();
verify(mUiEventLogger).log(WalletUiEvent.QAW_IMPRESSION);
assertEquals(VISIBLE, mWalletView.getCardCarouselContainer().getVisibility());
assertEquals(VISIBLE, mWalletView.getActionButton().getVisibility());
}
@@ -198,6 +205,8 @@ public class WalletScreenControllerTest extends SysuiTestCase {
assertEquals(VISIBLE, mWalletView.getCardCarouselContainer().getVisibility());
assertEquals("Hold to reader", mWalletView.getCardLabel().getText().toString());
assertEquals(GONE, mWalletView.getErrorView().getVisibility());
verify(mUiEventLogger, times(1)).log(WalletUiEvent.QAW_IMPRESSION);
}
@Test
@@ -351,6 +360,14 @@ public class WalletScreenControllerTest extends SysuiTestCase {
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
public void onCardClicked_startIntent() {
WalletCardViewInfo walletCardViewInfo = createCardViewInfo(createWalletCard(mContext));
@@ -361,6 +378,20 @@ public class WalletScreenControllerTest extends SysuiTestCase {
assertEquals(mWalletIntent.getAction(), mIntentCaptor.getValue().getAction());
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