From f53f3e6e41ae1badb43eabc049f1c5b22906ad08 Mon Sep 17 00:00:00 2001 From: Weng Su Date: Thu, 16 Jun 2022 00:33:07 +0800 Subject: [PATCH 1/4] Restrict AddAppNetworksActivity for guest user - Don't show AddAppNetworksActivity if the user is a guest. Bug: 224772678 Test: manual test make RunSettingsRoboTests ROBOTEST_FILTER=AddAppNetworksActivityTest Change-Id: I17571905f1c4a38db884e6d0523b7f8d668df607 --- .../AddAppNetworksActivity.java | 18 +++++++- .../AddAppNetworksActivityTest.java | 45 ++++++++++++++++--- 2 files changed, 55 insertions(+), 8 deletions(-) diff --git a/src/com/android/settings/wifi/addappnetworks/AddAppNetworksActivity.java b/src/com/android/settings/wifi/addappnetworks/AddAppNetworksActivity.java index 169bcb3d838..c52f75ec0e3 100644 --- a/src/com/android/settings/wifi/addappnetworks/AddAppNetworksActivity.java +++ b/src/com/android/settings/wifi/addappnetworks/AddAppNetworksActivity.java @@ -18,11 +18,14 @@ package com.android.settings.wifi.addappnetworks; import android.app.ActivityManager; import android.app.IActivityManager; +import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.os.RemoteException; +import android.os.UserManager; import android.provider.Settings; import android.text.TextUtils; +import android.util.EventLog; import android.util.Log; import android.view.Gravity; import android.view.Window; @@ -85,7 +88,13 @@ public class AddAppNetworksActivity extends FragmentActivity { } @VisibleForTesting - protected boolean showAddNetworksFragment() { + boolean showAddNetworksFragment() { + if (isGuestUser(getApplicationContext())) { + Log.e(TAG, "Guest user is not allowed to configure Wi-Fi!"); + EventLog.writeEvent(0x534e4554, "224772678", -1 /* UID */, "User is a guest"); + return false; + } + if (!isAddWifiConfigAllow()) { Log.d(TAG, "Not allowed by Enterprise Restriction"); return false; @@ -130,4 +139,11 @@ public class AddAppNetworksActivity extends FragmentActivity { boolean isAddWifiConfigAllow() { return WifiEnterpriseRestrictionUtils.isAddWifiConfigAllowed(this); } + + private static boolean isGuestUser(Context context) { + if (context == null) return false; + final UserManager userManager = context.getSystemService(UserManager.class); + if (userManager == null) return false; + return userManager.isGuestUser(); + } } diff --git a/tests/robotests/src/com/android/settings/wifi/addappnetworks/AddAppNetworksActivityTest.java b/tests/robotests/src/com/android/settings/wifi/addappnetworks/AddAppNetworksActivityTest.java index 8391b8aa8dd..dccd0234f65 100644 --- a/tests/robotests/src/com/android/settings/wifi/addappnetworks/AddAppNetworksActivityTest.java +++ b/tests/robotests/src/com/android/settings/wifi/addappnetworks/AddAppNetworksActivityTest.java @@ -18,24 +18,38 @@ package com.android.settings.wifi.addappnetworks; import static com.google.common.truth.Truth.assertThat; -import android.annotation.Nullable; -import android.app.IActivityManager; -import android.os.RemoteException; - import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; +import android.annotation.Nullable; +import android.app.IActivityManager; +import android.content.Context; +import android.os.RemoteException; +import android.os.UserManager; + +import androidx.test.core.app.ApplicationProvider; + import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; -import org.mockito.MockitoAnnotations; +import org.mockito.Spy; +import org.mockito.junit.MockitoJUnit; +import org.mockito.junit.MockitoRule; import org.robolectric.Robolectric; import org.robolectric.RobolectricTestRunner; @RunWith(RobolectricTestRunner.class) public class AddAppNetworksActivityTest { + @Rule + public final MockitoRule mMockitoRule = MockitoJUnit.rule(); + @Spy + Context mContext = ApplicationProvider.getApplicationContext(); + @Mock + UserManager mUserManager; @Mock private IActivityManager mIActivityManager; @@ -43,10 +57,13 @@ public class AddAppNetworksActivityTest { @Before public void setUp() { - MockitoAnnotations.initMocks(this); + when(mContext.getSystemService(UserManager.class)).thenReturn(mUserManager); + when(mUserManager.isGuestUser()).thenReturn(false); - mActivity = Robolectric.buildActivity(FakeAddAppNetworksActivity.class).create().get(); + mActivity = spy(Robolectric.buildActivity(FakeAddAppNetworksActivity.class).create().get()); + when(mActivity.getApplicationContext()).thenReturn(mContext); mActivity.mActivityManager = mIActivityManager; + fakeCallingPackage("com.android.settings"); } @Test @@ -84,6 +101,20 @@ public class AddAppNetworksActivityTest { assertThat(mActivity.showAddNetworksFragment()).isFalse(); } + @Test + public void showAddNetworksFragment_isGuestUser_returnFalse() { + when(mUserManager.isGuestUser()).thenReturn(true); + + assertThat(mActivity.showAddNetworksFragment()).isFalse(); + } + + @Test + public void showAddNetworksFragment_notGuestUser_returnTrue() { + when(mUserManager.isGuestUser()).thenReturn(false); + + assertThat(mActivity.showAddNetworksFragment()).isTrue(); + } + private void fakeCallingPackage(@Nullable String packageName) { try { when(mIActivityManager.getLaunchedFromPackage(any())).thenReturn(packageName); From 88037e4f5e05807db6c925bc5aeaf01f6276d4f9 Mon Sep 17 00:00:00 2001 From: Weng Su Date: Fri, 17 Jun 2022 02:17:20 +0800 Subject: [PATCH 2/4] Restrict ProviderModelSlice for guest user - Don't show ProviderModelSlice if the user is a guest. - Don't run background worker if the user is a guest. Bug: 227470877 Test: manual test atest -c ProviderModelSliceTest Change-Id: Id9fd50add271513c396adfbc083a9d8ea5f7771f --- .../settings/network/ProviderModelSlice.java | 9 ++++++ .../network/ProviderModelSliceTest.java | 31 +++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/src/com/android/settings/network/ProviderModelSlice.java b/src/com/android/settings/network/ProviderModelSlice.java index 0aae349e72f..86ba5639859 100644 --- a/src/com/android/settings/network/ProviderModelSlice.java +++ b/src/com/android/settings/network/ProviderModelSlice.java @@ -34,6 +34,7 @@ import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.net.Uri; import android.telephony.SubscriptionManager; +import android.util.EventLog; import android.util.Log; import android.view.WindowManager.LayoutParams; @@ -103,6 +104,12 @@ public class ProviderModelSlice extends WifiSlice { // Fifth section: Add the Wi-Fi items which are not connected. // Sixth section: Add the See All item. final ListBuilder listBuilder = mHelper.createListBuilder(getUri()); + if (isGuestUser(mContext)) { + Log.e(TAG, "Guest user is not allowed to configure Internet!"); + EventLog.writeEvent(0x534e4554, "227470877", -1 /* UID */, "User is a guest"); + return listBuilder.build(); + } + int maxListSize = 0; final NetworkProviderWorker worker = getWorker(); if (worker != null) { @@ -297,6 +304,8 @@ public class ProviderModelSlice extends WifiSlice { @Override public Class getBackgroundWorkerClass() { + if (isGuestUser(mContext)) return null; + return NetworkProviderWorker.class; } diff --git a/tests/unit/src/com/android/settings/network/ProviderModelSliceTest.java b/tests/unit/src/com/android/settings/network/ProviderModelSliceTest.java index 66247d3623e..345631cf5f6 100644 --- a/tests/unit/src/com/android/settings/network/ProviderModelSliceTest.java +++ b/tests/unit/src/com/android/settings/network/ProviderModelSliceTest.java @@ -42,6 +42,7 @@ import android.graphics.drawable.ColorDrawable; import android.net.ConnectivityManager; import android.net.Uri; import android.net.wifi.WifiManager; +import android.os.UserManager; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; @@ -86,6 +87,8 @@ public class ProviderModelSliceTest { private ListBuilder mListBuilder; private MockNetworkProviderWorker mMockNetworkProviderWorker; + @Mock + private UserManager mUserManager; @Mock private SubscriptionManager mSubscriptionManager; @Mock @@ -122,6 +125,8 @@ public class ProviderModelSliceTest { any(), any(), any(), any(), any(), anyLong(), anyLong(), any())) .thenReturn(mWifiPickerTracker); + when(mContext.getSystemService(UserManager.class)).thenReturn(mUserManager); + when(mUserManager.isGuestUser()).thenReturn(false); when(mContext.getSystemService(SubscriptionManager.class)).thenReturn(mSubscriptionManager); when(mContext.getSystemService(ConnectivityManager.class)).thenReturn(mConnectivityManager); when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager); @@ -162,6 +167,17 @@ public class ProviderModelSliceTest { .isEqualTo(Intent.FLAG_RECEIVER_FOREGROUND); } + @Test + @UiThreadTest + public void getSlice_isGuestUser_shouldNotAddRow() { + when(mUserManager.isGuestUser()).thenReturn(true); + + final Slice slice = mMockProviderModelSlice.getSlice(); + + assertThat(slice).isNotNull(); + verify(mListBuilder, never()).addRow(any()); + } + @Test @UiThreadTest public void getSlice_noWifiAndHasCarrierNoData_oneCarrier() { @@ -319,6 +335,21 @@ public class ProviderModelSliceTest { assertThat(mMockProviderModelSlice.hasSeeAllRow()).isTrue(); } + @Test + public void getBackgroundWorkerClass_isGuestUser_returnNull() { + when(mUserManager.isGuestUser()).thenReturn(true); + + assertThat(mMockProviderModelSlice.getBackgroundWorkerClass()).isNull(); + } + + @Test + public void getBackgroundWorkerClass_notGuestUser_returnWorkerClass() { + when(mUserManager.isGuestUser()).thenReturn(false); + + assertThat(mMockProviderModelSlice.getBackgroundWorkerClass()) + .isEqualTo(NetworkProviderWorker.class); + } + @Test public void providerModelSlice_hasCorrectUri() { assertThat(mMockProviderModelSlice.getUri()).isEqualTo(PROVIDER_MODEL_SLICE_URI); From fabd8de898b373048b2e760cc4a66e733d321b7c Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Tue, 21 Jun 2022 04:11:01 -0700 Subject: [PATCH 3/4] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I99e5ebe3a8c58c3c9dd9ba74a3081aed861c859b --- res/values-te/arrays.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/res/values-te/arrays.xml b/res/values-te/arrays.xml index 052cca704b5..625cdf4e37f 100644 --- a/res/values-te/arrays.xml +++ b/res/values-te/arrays.xml @@ -304,7 +304,7 @@ "లొకేషన్" "వైబ్రేట్" "కాంటాక్ట్‌లను చదవండి" - "కాంటాక్ట్‌లను సవరించండి" + "కాంటాక్ట్‌లను ఎడిట్ చేయండి" "కాల్ లాగ్‌ను చదవండి" "కాల్ లాగ్‌ను ఎడిట్ చేయండి" "క్యాలెండర్‌ను చదవండి" From 1b92a98891b31e7d861ffb3b5566f81072dcf8fe Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Tue, 21 Jun 2022 04:15:29 -0700 Subject: [PATCH 4/4] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I6239cc468a57eec0e714dab336bf2a913b54267e --- res/values-es/strings.xml | 2 +- res/values-eu/strings.xml | 2 +- res/values-hi/strings.xml | 2 +- res/values-in/strings.xml | 2 +- res/values-ja/strings.xml | 2 +- res/values-ko/strings.xml | 2 +- res/values-nl/strings.xml | 2 +- res/values-th/strings.xml | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml index 438e069073b..3c3ec00c985 100644 --- a/res/values-es/strings.xml +++ b/res/values-es/strings.xml @@ -4296,7 +4296,7 @@ "Desactivado" "Activado" "Desactivado" - "Activada" + "Activado" "Desactivado" "Fijar aplicaciones" "Fijar una aplicación te permite mantenerla visible hasta que dejes de fijarla. Esta función se puede usar para, por ejemplo, dejar que alguien de confianza juegue a un juego específico." diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml index 8795a39e100..95023a307b2 100644 --- a/res/values-eu/strings.xml +++ b/res/values-eu/strings.xml @@ -2857,7 +2857,7 @@ "Flasha" "Aktibatuta" "Seinalerik gabeko denbora" - "Bateriaren edukiera guztira" + "Bateriaren ahalmena, guztira" "Kalkulatutako energia-erabilera" "Hautemandako energia-erabilera" "Behartu gelditzera" diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml index ce4134454e8..7f4fb569bf8 100644 --- a/res/values-hi/strings.xml +++ b/res/values-hi/strings.xml @@ -3439,7 +3439,7 @@ "हमेशा" "सिवाय तब, जब पैसे चुकाने के लिए दूसरा ऐप्लिकेशन खुला हो" "टच किए बिना पैसे चुकाने के टर्मिनल पर, इससे पैसे चुकाएं:" - "पैसे चुकाने की मशीन का इस्तेमाल करना" + "पैसे चुकाने की टर्मिनल का इस्तेमाल करना" "पैसे चुकाने के लिए किसी ऐप्लिकेशन को चुनें. इसके बाद, टच किए बिना पैसे चुकाने के निशान वाले किसी टर्मिनल की ओर अपने फ़ोन का पिछला हिस्सा करके उसे पकड़े रहें." "ठीक है" "ज़्यादा…" diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml index b845809a7f2..96f2c7ce8a8 100644 --- a/res/values-in/strings.xml +++ b/res/values-in/strings.xml @@ -3440,7 +3440,7 @@ "Kecuali jika aplikasi pembayaran lain dibuka" "Di terminal nirsentuh, bayar dengan:" "Membayar di terminal" - "Siapkan aplikasi pembayaran. Lalu, cukup dekatkan bagian belakang ponsel ke terminal mana saja yang memiliki simbol nirkontak." + "Siapkan aplikasi pembayaran. Lalu, cukup dekatkan bagian belakang ponsel ke terminal mana saja yang memiliki simbol nirsentuh." "Mengerti" "Lainnya …" "Setel aplikasi pembayaran default" diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml index 49ec4afcee3..ac4e5788639 100644 --- a/res/values-ja/strings.xml +++ b/res/values-ja/strings.xml @@ -3030,7 +3030,7 @@ "安全ではない VPN: %d 件" "安全ではない VPN: %d 件" "接続の自動調整" - "ネットワーク接続を自動的に管理することで、電池が長持ちし、デバイスのパフォーマンスが改善します" + "ネットワーク接続を自動的に管理することで、バッテリーが長持ちし、デバイスのパフォーマンスが改善します" "ON" "OFF" "認証情報ストレージ" diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml index 909586546d1..ff15565f7ed 100644 --- a/res/values-ko/strings.xml +++ b/res/values-ko/strings.xml @@ -3451,7 +3451,7 @@ "미접촉 결제 단말기에서 %1$s 앱으로 결제합니다.\n\n이 앱이 %2$s 대신 기본 결제 앱으로 사용됩니다." "기본으로 설정" "업데이트" - "업무" + "직장" "제한사항" "제한사항 삭제" "PIN 변경" diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml index ee03ca41276..592cac14123 100644 --- a/res/values-nl/strings.xml +++ b/res/values-nl/strings.xml @@ -4027,7 +4027,7 @@ "Je meldingen lezen" "De app kan je meldingen lezen, waaronder persoonlijke informatie zoals contacten, berichten en foto\'s" "Berichten beantwoorden" - "De app kan berichten beantwoorden en acties uitvoeren voor knoppen in meldingen, waaronder meldingen snoozen of sluiten en gesprekken beantwoorden" + "De app kan berichten beantwoorden, meldingen snoozen of sluiten en gesprekken beantwoorden." "Instellingen wijzigen" "De app kan Niet storen aan- of uitzetten en gerelateerde instellingen wijzigen" "Als je %1$s geen toegang tot meldingen geeft, krijgt Niet storen mogelijk ook geen toegang." diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml index 11b1ac65327..bc2b887d5ae 100644 --- a/res/values-th/strings.xml +++ b/res/values-th/strings.xml @@ -3423,7 +3423,7 @@ "ติดตั้งแอปที่มี" "การชำระเงินแบบไม่ต้องสัมผัส" "แอปการชำระเงินเริ่มต้น" - "หากต้องการชำระเงินโดยใช้แอปการชำระเงิน ให้นำด้านหลังของอุปกรณ์ไปจ่อไว้ที่เครื่องชำระเงิน" + "หากต้องการชำระเงินโดยใช้แอปการชำระเงิน ให้นำด้านหลังของอุปกรณ์ไปแตะที่เครื่องชำระเงิน" "ดูข้อมูลเพิ่มเติม" "กำหนดให้แอปงานเป็นแอปชำระเงินเริ่มต้นไหม" "หากต้องการชำระเงินโดยใช้แอปงาน"