OSDN Git Service

Removed guest user access to Tap & Pay via Search.
authorAndre Garivay <andregarivay@google.com>
Thu, 31 May 2018 00:46:12 +0000 (17:46 -0700)
committerAndre Garivay <andregarivay@google.com>
Fri, 1 Jun 2018 16:57:23 +0000 (09:57 -0700)
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

src/com/android/settings/nfc/PaymentSettings.java
tests/robotests/src/com/android/settings/nfc/PaymentSettingsTest.java

index 8233581..6e03842 100644 (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);
                 }
index 0268711..b85bdda 100644 (file)
 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;