From a89159e0f5f8eadef38aa74e1d0eac6b5551dd45 Mon Sep 17 00:00:00 2001 From: Evan Chen Date: Wed, 11 May 2022 18:10:01 -0700 Subject: [PATCH 1/6] Update AssociationIno creation for Bluetooth test Bug: 189250370 Test: ake RunSettingsRoboTests ROBOTEST_FILTER=BluetoothDetailsCompanionAppsControllerTest Change-Id: Iebbd2ca754b20d251f7a128bc2c460b4c3093762 Merged-In: Iebbd2ca754b20d251f7a128bc2c460b4c3093762 --- .../bluetooth/BluetoothDetailsCompanionAppsControllerTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsCompanionAppsControllerTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsCompanionAppsControllerTest.java index 3fa306f18d0..86829b40081 100644 --- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsCompanionAppsControllerTest.java +++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsCompanionAppsControllerTest.java @@ -109,6 +109,7 @@ public class BluetoothDetailsCompanionAppsControllerTest extends /* deviceProfile */ "", /* selfManaged */ false, /* notifyOnDeviceNearby */ true, + /* revoked */ false, /* timeApprovedMs */ System.currentTimeMillis(), /* lastTimeConnected */ Long.MAX_VALUE); From 03da62810c83c903301590d57dd62ad0efc79795 Mon Sep 17 00:00:00 2001 From: Bonian Chen Date: Mon, 13 Jun 2022 20:55:32 +0800 Subject: [PATCH 2/6] [Settings] Avoid from close dialog when touch outside. Roaming confirmation dialog might get closed when touch outside, which is easily been triggered when having a large screen. Solution: avoid from close dialog when touch outside of dialog area. Bug: 235183999 Test: local Change-Id: Ic312d80e6f04cb8f323ebc713eef4e15257de358 --- .../settings/network/telephony/RoamingDialogFragment.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/network/telephony/RoamingDialogFragment.java b/src/com/android/settings/network/telephony/RoamingDialogFragment.java index bd452267111..3e9875e9844 100644 --- a/src/com/android/settings/network/telephony/RoamingDialogFragment.java +++ b/src/com/android/settings/network/telephony/RoamingDialogFragment.java @@ -72,7 +72,9 @@ public class RoamingDialogFragment extends InstrumentedDialogFragment implements .setIconAttribute(android.R.attr.alertDialogIcon) .setPositiveButton(android.R.string.yes, this) .setNegativeButton(android.R.string.no, this); - return builder.create(); + AlertDialog dialog = builder.create(); + dialog.setCanceledOnTouchOutside(false); + return dialog; } @Override From a1df448703dfea5dc2382aacccc6bdf493528620 Mon Sep 17 00:00:00 2001 From: Salud Lemus Date: Thu, 16 Jun 2022 12:28:19 -0700 Subject: [PATCH 3/6] Fix title used for financed device info in Settings The title for the financed device info page in Settings changes to "Managed device info" instead of "Financed device info" Bug: 236259020 Test: Manual test Change-Id: Ica6d990e8dada28b643a5523ec284c18d4af89d2 --- .../settings/enterprise/EnterprisePrivacySettings.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/com/android/settings/enterprise/EnterprisePrivacySettings.java b/src/com/android/settings/enterprise/EnterprisePrivacySettings.java index 92e4f4a5c43..a154dedfb8f 100644 --- a/src/com/android/settings/enterprise/EnterprisePrivacySettings.java +++ b/src/com/android/settings/enterprise/EnterprisePrivacySettings.java @@ -77,6 +77,10 @@ public class EnterprisePrivacySettings extends DashboardFragment { public void onCreate(Bundle icicle) { super.onCreate(icicle); + if (mPrivacySettingsPreference instanceof PrivacySettingsFinancedPreference) { + return; + } + replaceEnterprisePreferenceScreenTitle( MANAGED_DEVICE_INFO, R.string.enterprise_privacy_settings); From 2714015bac6adef5f0b85b133c64c9252af56e6b Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Mon, 20 Jun 2022 23:15:51 -0700 Subject: [PATCH 4/6] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I09a80efa89b4558201beeb22aa7c854b2e86096e --- 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 382bed292daf49a1dca4f3c9d196f9d622406461 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Mon, 20 Jun 2022 23:19:45 -0700 Subject: [PATCH 5/6] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I3c1724acd927e61e022d74d348092d256d2072ed --- 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 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml index 2176bfd3963..b6b9f1461f0 100644 --- a/res/values-eu/strings.xml +++ b/res/values-eu/strings.xml @@ -2867,7 +2867,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 ec67f788bbb..a93fa481f4a 100644 --- a/res/values-hi/strings.xml +++ b/res/values-hi/strings.xml @@ -3449,7 +3449,7 @@ "हमेशा" "सिवाय तब, जब पैसे चुकाने के लिए दूसरा ऐप्लिकेशन खुला हो" "टच किए बिना पैसे चुकाने के टर्मिनल पर, इससे पैसे चुकाएं:" - "पैसे चुकाने की मशीन का इस्तेमाल करना" + "पैसे चुकाने की टर्मिनल का इस्तेमाल करना" "पैसे चुकाने के लिए किसी ऐप्लिकेशन को चुनें. इसके बाद, टच किए बिना पैसे चुकाने के निशान वाले किसी टर्मिनल की ओर अपने फ़ोन का पिछला हिस्सा करके उसे पकड़े रहें." "ठीक है" "ज़्यादा…" diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml index f7b3e433376..6836909d1ef 100644 --- a/res/values-in/strings.xml +++ b/res/values-in/strings.xml @@ -3450,7 +3450,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 553156d7203..56c221747a1 100644 --- a/res/values-ja/strings.xml +++ b/res/values-ja/strings.xml @@ -3040,7 +3040,7 @@ "安全ではない VPN: %d 件" "安全ではない VPN: %d 件" "接続の自動調整" - "ネットワーク接続を自動的に管理することで、電池が長持ちし、デバイスのパフォーマンスが改善します" + "ネットワーク接続を自動的に管理することで、バッテリーが長持ちし、デバイスのパフォーマンスが改善します" "ON" "OFF" "認証情報ストレージ" diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml index 00c8cc02e5e..093b6be8071 100644 --- a/res/values-ko/strings.xml +++ b/res/values-ko/strings.xml @@ -3461,7 +3461,7 @@ "미접촉 결제 단말기에서 %1$s 앱으로 결제합니다.\n\n이 앱이 %2$s 대신 기본 결제 앱으로 사용됩니다." "기본으로 설정" "업데이트" - "업무" + "직장" "제한사항" "제한사항 삭제" "PIN 변경" diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml index 5b28e73131d..922fe00927f 100644 --- a/res/values-nl/strings.xml +++ b/res/values-nl/strings.xml @@ -4037,7 +4037,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 fc5925b3488..5980dedf063 100644 --- a/res/values-th/strings.xml +++ b/res/values-th/strings.xml @@ -3433,7 +3433,7 @@ "ติดตั้งแอปที่มี" "การชำระเงินแบบไม่ต้องสัมผัส" "แอปการชำระเงินเริ่มต้น" - "หากต้องการชำระเงินโดยใช้แอปการชำระเงิน ให้นำด้านหลังของอุปกรณ์ไปจ่อไว้ที่เครื่องชำระเงิน" + "หากต้องการชำระเงินโดยใช้แอปการชำระเงิน ให้นำด้านหลังของอุปกรณ์ไปแตะที่เครื่องชำระเงิน" "ดูข้อมูลเพิ่มเติม" "กำหนดให้แอปงานเป็นแอปชำระเงินเริ่มต้นไหม" "หากต้องการชำระเงินโดยใช้แอปงาน" From 54cb55b87e9ec535620f02881245d2c5eae7033b Mon Sep 17 00:00:00 2001 From: Salud Lemus Date: Wed, 22 Jun 2022 16:11:00 -0700 Subject: [PATCH 6/6] Add unit tests for verifying title Bug: 236259020 Test: m RunSettingsRoboTests ROBOTEST_FILTER=EnterprisePrivacySettingsTest Change-Id: I520c94818951acce25c5d8a090b6d59feff93a1c --- .../EnterprisePrivacySettingsTest.java | 129 ++++++++++++++---- 1 file changed, 101 insertions(+), 28 deletions(-) diff --git a/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacySettingsTest.java b/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacySettingsTest.java index e028c629dbe..b3de1841989 100644 --- a/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacySettingsTest.java +++ b/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacySettingsTest.java @@ -17,18 +17,21 @@ package com.android.settings.enterprise; import static android.app.admin.DevicePolicyManager.DEVICE_OWNER_TYPE_DEFAULT; +import static android.app.admin.DevicePolicyManager.DEVICE_OWNER_TYPE_FINANCED; import static com.google.common.truth.Truth.assertThat; -import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; import android.app.admin.DevicePolicyManager; import android.content.ComponentName; import android.content.Context; +import android.os.Bundle; import android.provider.SearchIndexableResource; +import android.widget.FrameLayout; +import androidx.appcompat.app.AppCompatActivity; import androidx.test.core.app.ApplicationProvider; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; @@ -42,9 +45,10 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import org.robolectric.Robolectric; import org.robolectric.RobolectricTestRunner; +import org.robolectric.android.controller.ActivityController; -import java.util.ArrayList; import java.util.List; @RunWith(RobolectricTestRunner.class) @@ -54,33 +58,33 @@ public class EnterprisePrivacySettingsTest extends AbsBasePrivacySettingsPrefere @Mock private DevicePolicyManager mDevicePolicyManager; - @Mock - private PrivacySettingsPreference mPrivacySettingsPreference; private FakeFeatureFactory mFeatureFactory; private EnterprisePrivacySettings mSettings; private Context mContext; + private TestActivity mActivity; @Before public void setUp() { MockitoAnnotations.initMocks(this); - mContext = spy(ApplicationProvider.getApplicationContext()); + mContext = ApplicationProvider.getApplicationContext(); mFeatureFactory = FakeFeatureFactory.setupForTest(); mSettings = new EnterprisePrivacySettings(); - mSettings.mPrivacySettingsPreference = mPrivacySettingsPreference; + mSettings.mPrivacySettingsPreference = new PrivacySettingsEnterprisePreference(mContext); - when(mContext.getSystemService(DevicePolicyManager.class)).thenReturn(mDevicePolicyManager); - when(mDevicePolicyManager.isDeviceManaged()).thenReturn(true); - when(mDevicePolicyManager.getDeviceOwnerComponentOnAnyUser()) - .thenReturn(DEVICE_OWNER_COMPONENT); - when(mDevicePolicyManager.getDeviceOwnerType(DEVICE_OWNER_COMPONENT)) - .thenReturn(DEVICE_OWNER_TYPE_DEFAULT); + ActivityController controller = Robolectric.buildActivity( + TestActivity.class).create(); + mActivity = controller.get(); + + mActivity + .getSupportFragmentManager() + .beginTransaction() + .add(TestActivity.CONTAINER_VIEW_ID, mSettings) + .commit(); + controller.start(); } @Test public void verifyConstants() { - when(mPrivacySettingsPreference.getPreferenceScreenResId()) - .thenReturn(R.xml.enterprise_privacy_settings); - assertThat(mSettings.getMetricsCategory()) .isEqualTo(MetricsEvent.ENTERPRISE_PRIVACY_SETTINGS); assertThat(mSettings.getLogTag()).isEqualTo("EnterprisePrivacySettings"); @@ -90,7 +94,7 @@ public class EnterprisePrivacySettingsTest extends AbsBasePrivacySettingsPrefere } @Test - public void isPageEnabled_hasDeviceOwner_shouldReturnTrue() { + public void isPageEnabled_hasDeviceOwner_returnsTrue() { when(mFeatureFactory.enterprisePrivacyFeatureProvider.hasDeviceOwner()) .thenReturn(true); @@ -99,7 +103,7 @@ public class EnterprisePrivacySettingsTest extends AbsBasePrivacySettingsPrefere } @Test - public void isPageEnabled_noDeviceOwner_shouldReturnFalse() { + public void isPageEnabled_noDeviceOwner_returnsFalse() { when(mDevicePolicyManager.isDeviceManaged()).thenReturn(false); when(mFeatureFactory.enterprisePrivacyFeatureProvider.hasDeviceOwner()) .thenReturn(false); @@ -109,36 +113,105 @@ public class EnterprisePrivacySettingsTest extends AbsBasePrivacySettingsPrefere } @Test - public void getPreferenceControllers() { - final List controllers = new ArrayList<>(); - controllers.add(new NetworkLogsPreferenceController(mContext)); - when(mPrivacySettingsPreference.createPreferenceControllers(anyBoolean())) - .thenReturn(controllers); - + public void getPreferenceControllers_returnsEnterprisePreferenceControllers() { final List privacyControllers = mSettings.createPreferenceControllers(mContext); - assertThat(privacyControllers).isNotNull(); - assertThat(privacyControllers.size()).isEqualTo(1); - assertThat(controllers.get(0)).isInstanceOf(NetworkLogsPreferenceController.class); + verifyEnterprisePreferenceControllers(privacyControllers); } @Test public void getSearchIndexProviderPreferenceControllers_returnsEnterpriseSearchIndexPreferenceControllers() { + Context context = spy(ApplicationProvider.getApplicationContext()); + setupPrivacyPreference(context, DEVICE_OWNER_TYPE_DEFAULT); + final List controllers = EnterprisePrivacySettings.SEARCH_INDEX_DATA_PROVIDER - .getPreferenceControllers(mContext); + .getPreferenceControllers(context); verifyEnterprisePreferenceControllers(controllers); } + @Test + public void + getSearchIndexProviderPreferenceControllers_returnsFinancedSearchIndexPreferenceControllers() { + Context context = spy(ApplicationProvider.getApplicationContext()); + setupPrivacyPreference(context, DEVICE_OWNER_TYPE_FINANCED); + + final List controllers = + EnterprisePrivacySettings.SEARCH_INDEX_DATA_PROVIDER + .getPreferenceControllers(context); + + verifyFinancedPreferenceControllers(controllers); + } + @Test public void getXmlResourcesToIndex_returnsEnterpriseXmlResources() { + Context context = spy(ApplicationProvider.getApplicationContext()); + setupPrivacyPreference(context, DEVICE_OWNER_TYPE_DEFAULT); + final List searchIndexableResources = EnterprisePrivacySettings.SEARCH_INDEX_DATA_PROVIDER - .getXmlResourcesToIndex(mContext, true); + .getXmlResourcesToIndex(context, true); verifyEnterpriseSearchIndexableResources(searchIndexableResources); } + + @Test + public void getXmlResourcesToIndex_returnsFinancedXmlResources() { + Context context = spy(ApplicationProvider.getApplicationContext()); + setupPrivacyPreference(context, DEVICE_OWNER_TYPE_FINANCED); + + final List searchIndexableResources = + EnterprisePrivacySettings.SEARCH_INDEX_DATA_PROVIDER + .getXmlResourcesToIndex(context, true); + + verifyFinancedSearchIndexableResources(searchIndexableResources); + } + + @Test + public void onCreate_enterprisePrivacyPreference_updatesTitle() { + mSettings.onCreate(new Bundle()); + + assertThat(mActivity.getTitle()) + .isEqualTo(mContext.getText(R.string.enterprise_privacy_settings)); + } + + @Test + public void onCreate_financedPrivacyPreference_doesNotUpdateTitle() { + mSettings.mPrivacySettingsPreference = new PrivacySettingsFinancedPreference(mContext); + + mSettings.onCreate(new Bundle()); + + assertThat(mActivity.getTitle()) + .isEqualTo(mContext.getText(R.string.financed_privacy_settings)); + } + + private void setupPrivacyPreference(Context context, int deviceOwnerType) { + when(context.getSystemService(DevicePolicyManager.class)).thenReturn(mDevicePolicyManager); + when(mDevicePolicyManager.isDeviceManaged()).thenReturn(true); + when(mDevicePolicyManager.getDeviceOwnerComponentOnAnyUser()) + .thenReturn(DEVICE_OWNER_COMPONENT); + when(mDevicePolicyManager.getDeviceOwnerType(DEVICE_OWNER_COMPONENT)) + .thenReturn(deviceOwnerType); + } + + private static final class TestActivity extends AppCompatActivity { + + private static final int CONTAINER_VIEW_ID = 1234; + + @Override + protected void onCreate(Bundle bundle) { + super.onCreate(bundle); + + FrameLayout frameLayout = new FrameLayout(this); + frameLayout.setId(CONTAINER_VIEW_ID); + + // Need to set the Theme.AppCompat theme (or descendant) with this activity, otherwise + // a {@link IllegalStateException} is thrown when setting the content view. + setTheme(R.style.Theme_AppCompat_Light); + setContentView(frameLayout); + } + } }