Removed guest user access to Tap & Pay via Search.

Gathered user info to verify that user is not a guest. If user is a
guest (and only a guest: other alternate users may use the feature),
they are not allowed to load the nfc_payment_settings xml file.

Change-Id: I5700b9cd4b639b031b6d464827d16f4ea4cfa03f
Fixes: 80111261
Test: Robotests
This commit is contained in:
Andre Garivay
2018-05-30 17:46:12 -07:00
parent f1dc08a608
commit 6d48242da7
2 changed files with 49 additions and 6 deletions

View File

@@ -20,12 +20,15 @@ import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.UserHandle;
import android.os.UserManager;
import android.provider.SearchIndexableResource;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.content.pm.UserInfo;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
@@ -111,6 +114,11 @@ public class PaymentSettings extends DashboardFragment {
@Override
protected boolean isPageSearchEnabled(Context context) {
final UserManager userManager = context.getSystemService(UserManager.class);
final UserInfo myUserInfo = userManager.getUserInfo(UserHandle.myUserId());
if (myUserInfo.isGuest()) {
return false;
}
final PackageManager pm = context.getPackageManager();
return pm.hasSystemFeature(PackageManager.FEATURE_NFC);
}

View File

@@ -18,11 +18,16 @@
package com.android.settings.nfc;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
import android.content.Context;
import android.content.pm.PackageManager;
import android.content.pm.UserInfo;
import android.os.UserHandle;
import android.os.UserManager;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
@@ -45,22 +50,31 @@ public class PaymentSettingsTest {
static final String PAYMENT_KEY = "nfc_payment";
static final String FOREGROUND_KEY = "nfc_foreground";
static final String PAYMENT_SCREEN_KEY = "nfc_payment_settings_screen";
private Context mContext;
@Mock
private PackageManager mManager;
private PackageManager mPackageManager;
@Mock
private UserManager mUserManager;
@Mock
private UserInfo mUserInfo;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mContext = spy(RuntimeEnvironment.application);
when(mContext.getPackageManager()).thenReturn(mManager);
when(mContext.getPackageManager()).thenReturn(mPackageManager);
doReturn(mUserManager).when(mContext).getSystemService(UserManager.class);
when(mUserManager.getUserInfo(UserHandle.myUserId())).thenReturn(mUserInfo);
}
@Test
public void getNonIndexableKey_NoNFC_AllKeysAdded() {
when(mManager.hasSystemFeature(PackageManager.FEATURE_NFC)).thenReturn(false);
public void getNonIndexableKey_noNFC_allKeysAdded() {
when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_NFC)).thenReturn(false);
final List<String> niks =
PaymentSettings.SEARCH_INDEX_DATA_PROVIDER.getNonIndexableKeys(mContext);
@@ -70,8 +84,8 @@ public class PaymentSettingsTest {
}
@Test
public void getNonIndexableKey_NFC_ForegroundKeyAdded() {
when(mManager.hasSystemFeature(PackageManager.FEATURE_NFC)).thenReturn(true);
public void getNonIndexableKey_NFC_foregroundKeyAdded() {
when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_NFC)).thenReturn(true);
final List<String> niks =
PaymentSettings.SEARCH_INDEX_DATA_PROVIDER.getNonIndexableKeys(mContext);
@@ -79,6 +93,27 @@ public class PaymentSettingsTest {
assertThat(niks).contains(FOREGROUND_KEY);
}
@Test
public void getNonIndexableKey_primaryUser_returnsTrue() {
when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_NFC)).thenReturn(true);
final List<String> niks =
PaymentSettings.SEARCH_INDEX_DATA_PROVIDER.getNonIndexableKeys(mContext);
assertThat(niks).containsExactly(FOREGROUND_KEY);
}
@Test
public void getNonIndexabkeKey_guestUser_returnsFalse() {
when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_NFC)).thenReturn(true);
when(mUserInfo.isGuest()).thenReturn(true);
final List<String> niks =
PaymentSettings.SEARCH_INDEX_DATA_PROVIDER.getNonIndexableKeys(mContext);
assertThat(niks).containsAllOf(FOREGROUND_KEY, PAYMENT_KEY, PAYMENT_SCREEN_KEY);
}
@Implements(PaymentBackend.class)
public static class ShadowPaymentBackend {
private ArrayList<PaymentBackend.PaymentAppInfo> mAppInfos;