Merge "Add westworld log to quick access wallet UI." into sc-dev
This commit is contained in:
@@ -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);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user