From aeb3e4473bb34e0bf4dbcb9a57c2ca83c1fa6551 Mon Sep 17 00:00:00 2001 From: Alexandru-Andrei Rotaru Date: Mon, 7 Aug 2017 12:21:31 +0100 Subject: [PATCH 1/4] Check password blacklist when setting credential If the password is valid by all other checks, see if it is present on the blacklist and disallow it if it is. Test: set a password blacklist, try and set a blacklisted password and see an explanation, set a non-blacklisted password successfully. Test: make ROBOTEST_FILTER=ChooseLockPasswordTest RunSettingsRoboTests Bug: 63578054 Fix: 65659151 Change-Id: Id155b824ad4b5839c23b6f5fd3fdfdcfc78c3df1 --- AndroidManifest.xml | 1 + res/values/strings.xml | 6 ++ .../settings/password/ChooseLockPassword.java | 45 ++++++++++----- .../password/ChooseLockPasswordTest.java | 55 +++++++++++++++---- 4 files changed, 83 insertions(+), 24 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 4beaf8fc5f7..68cac150a13 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -88,6 +88,7 @@ + Device admin doesn\'t allow using a recent PIN + + Common PINs are blocked by your IT admin. Try a different PIN. + This can\'t include an invalid character @@ -1388,6 +1391,9 @@ Device admin doesn\'t allow using a recent password + + Common passwords are blocked by your IT admin. Try a different password. + Ascending, descending, or repeated sequence of digits isn\'t allowed diff --git a/src/com/android/settings/password/ChooseLockPassword.java b/src/com/android/settings/password/ChooseLockPassword.java index e5fbe6c40f5..4e54f3ceb9a 100644 --- a/src/com/android/settings/password/ChooseLockPassword.java +++ b/src/com/android/settings/password/ChooseLockPassword.java @@ -228,19 +228,20 @@ public class ChooseLockPassword extends SettingsActivity { private static final int MIN_NON_LETTER_IN_PASSWORD = 5; // Error code returned from {@link #validatePassword(String)}. - private static final int NO_ERROR = 0; - private static final int CONTAIN_INVALID_CHARACTERS = 1 << 0; - private static final int TOO_SHORT = 1 << 1; - private static final int TOO_LONG = 1 << 2; - private static final int CONTAIN_NON_DIGITS = 1 << 3; - private static final int CONTAIN_SEQUENTIAL_DIGITS = 1 << 4; - private static final int RECENTLY_USED = 1 << 5; - private static final int NOT_ENOUGH_LETTER = 1 << 6; - private static final int NOT_ENOUGH_UPPER_CASE = 1 << 7; - private static final int NOT_ENOUGH_LOWER_CASE = 1 << 8; - private static final int NOT_ENOUGH_DIGITS = 1 << 9; - private static final int NOT_ENOUGH_SYMBOLS = 1 << 10; - private static final int NOT_ENOUGH_NON_LETTER = 1 << 11; + static final int NO_ERROR = 0; + static final int CONTAIN_INVALID_CHARACTERS = 1 << 0; + static final int TOO_SHORT = 1 << 1; + static final int TOO_LONG = 1 << 2; + static final int CONTAIN_NON_DIGITS = 1 << 3; + static final int CONTAIN_SEQUENTIAL_DIGITS = 1 << 4; + static final int RECENTLY_USED = 1 << 5; + static final int NOT_ENOUGH_LETTER = 1 << 6; + static final int NOT_ENOUGH_UPPER_CASE = 1 << 7; + static final int NOT_ENOUGH_LOWER_CASE = 1 << 8; + static final int NOT_ENOUGH_DIGITS = 1 << 9; + static final int NOT_ENOUGH_SYMBOLS = 1 << 10; + static final int NOT_ENOUGH_NON_LETTER = 1 << 11; + static final int BLACKLISTED = 1 << 12; /** * Keep track internally of where the user is in choosing a pattern. @@ -720,6 +721,17 @@ public class ChooseLockPassword extends SettingsActivity { break; } } + + // Only check the blacklist if the password is otherwise valid. Checking the blacklist + // can be expensive and it is not useful to report the fact it is on a blacklist if it + // couldn't be set anyway. + if (errorCode == NO_ERROR) { + if (mLockPatternUtils.getDevicePolicyManager() + .isPasswordBlacklisted(mUserId, password)) { + errorCode |= BLACKLISTED; + } + } + return errorCode; } @@ -787,7 +799,7 @@ public class ChooseLockPassword extends SettingsActivity { * @param errorCode error code returned from {@link #validatePassword(String)}. * @return an array of messages describing the error, important messages come first. */ - private String[] convertErrorCodeToMessages(int errorCode) { + String[] convertErrorCodeToMessages(int errorCode) { List messages = new ArrayList<>(); if ((errorCode & CONTAIN_INVALID_CHARACTERS) > 0) { messages.add(getString(R.string.lockpassword_illegal_character)); @@ -842,6 +854,11 @@ public class ChooseLockPassword extends SettingsActivity { messages.add(getString((mIsAlphaMode) ? R.string.lockpassword_password_recently_used : R.string.lockpassword_pin_recently_used)); } + if ((errorCode & BLACKLISTED) > 0) { + messages.add(getString((mIsAlphaMode) + ? R.string.lockpassword_password_blacklisted_by_admin + : R.string.lockpassword_pin_blacklisted_by_admin)); + } return messages.toArray(new String[0]); } diff --git a/tests/robotests/src/com/android/settings/password/ChooseLockPasswordTest.java b/tests/robotests/src/com/android/settings/password/ChooseLockPasswordTest.java index c0036037875..70e68fe25e1 100644 --- a/tests/robotests/src/com/android/settings/password/ChooseLockPasswordTest.java +++ b/tests/robotests/src/com/android/settings/password/ChooseLockPasswordTest.java @@ -127,6 +127,36 @@ public class ChooseLockPasswordTest { .isEqualTo(123); } + @Test + public void blacklist_addsErrorMessageForPin() { + final ChooseLockPassword activity = buildChooseLockPasswordActivity( + new IntentBuilder(application) + .setUserId(UserHandle.myUserId()) + // Set to numeric for a PIN + .setPasswordQuality(DevicePolicyManager.PASSWORD_QUALITY_NUMERIC) + .build()); + final ChooseLockPasswordFragment fragment = getChooseLockPasswordFragment(activity); + final int errors = ChooseLockPasswordFragment.BLACKLISTED; + final String[] messages = fragment.convertErrorCodeToMessages(errors); + assertThat(messages).isEqualTo(new String[] { + activity.getString(R.string.lockpassword_pin_blacklisted_by_admin) }); + } + + @Test + public void blacklist_addsErrorMessageForPassword() { + final ChooseLockPassword activity = buildChooseLockPasswordActivity( + new IntentBuilder(application) + .setUserId(UserHandle.myUserId()) + // Set to alphabetic for a password + .setPasswordQuality(DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC) + .build()); + final ChooseLockPasswordFragment fragment = getChooseLockPasswordFragment(activity); + final int errors = ChooseLockPasswordFragment.BLACKLISTED; + final String[] messages = fragment.convertErrorCodeToMessages(errors); + assertThat(messages).isEqualTo(new String[] { + activity.getString(R.string.lockpassword_password_blacklisted_by_admin) }); + } + @Test public void assertThat_chooseLockIconChanged_WhenFingerprintExtraSet() { ShadowDrawable drawable = setActivityAndGetIconDrawable(true); @@ -139,17 +169,22 @@ public class ChooseLockPasswordTest { assertThat(drawable.getCreatedFromResId()).isNotEqualTo(R.drawable.ic_fingerprint_header); } + private ChooseLockPassword buildChooseLockPasswordActivity(Intent intent) { + return Robolectric.buildActivity(ChooseLockPassword.class, intent).setup().get(); + } + + private ChooseLockPasswordFragment getChooseLockPasswordFragment(ChooseLockPassword activity) { + return (ChooseLockPasswordFragment) + activity.getFragmentManager().findFragmentById(R.id.main_content); + } + private ShadowDrawable setActivityAndGetIconDrawable(boolean addFingerprintExtra) { - ChooseLockPassword passwordActivity = - Robolectric.buildActivity( - ChooseLockPassword.class, - new IntentBuilder(application) - .setUserId(UserHandle.myUserId()) - .setForFingerprint(addFingerprintExtra) - .build()) - .setup().get(); - ChooseLockPasswordFragment fragment = (ChooseLockPasswordFragment) - passwordActivity.getFragmentManager().findFragmentById(R.id.main_content); + ChooseLockPassword passwordActivity = buildChooseLockPasswordActivity( + new IntentBuilder(application) + .setUserId(UserHandle.myUserId()) + .setForFingerprint(addFingerprintExtra) + .build()); + ChooseLockPasswordFragment fragment = getChooseLockPasswordFragment(passwordActivity); return Shadows.shadowOf(((GlifLayout) fragment.getView()).getIcon()); } } From 1e9183e0c07fb893c64cbaa9d80ee56a094d9dd8 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Mon, 18 Dec 2017 20:37:58 -0800 Subject: [PATCH 2/4] Import translations. DO NOT MERGE Auto-generated-cl: translation import Bug: 64712476 Change-Id: Ib8ace3f2052b60e0623095c5647b9c9c3b2c199c --- res/values-eu/strings.xml | 4 ++-- res/values-gl/strings.xml | 4 ++-- res/values-hi/strings.xml | 2 +- res/values-hu/strings.xml | 8 ++++---- res/values-hy/strings.xml | 2 +- res/values-mk/strings.xml | 10 ++++------ res/values-ne/strings.xml | 8 ++++---- res/values-ro/strings.xml | 8 +++----- res/values-sk/strings.xml | 4 +--- res/values-sl/strings.xml | 4 +--- res/values-sw/strings.xml | 2 +- res/values-zh-rTW/strings.xml | 2 +- 12 files changed, 25 insertions(+), 33 deletions(-) diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml index ea1677c9f25..1b48c72bde7 100644 --- a/res/values-eu/strings.xml +++ b/res/values-eu/strings.xml @@ -624,7 +624,7 @@ "Gailu honekin parekatzeko:<br><b>%1$s</b><br><br>Ziurtatu pasakode hau erakusten duela:<br><b>%2$s</b>" "Igorlea:<br><b>%1$s</b><br><br>Gailuarekin parekatu?" "Honekin parekatzeko:<br><b>%1$s</b><br><br>Idatzi hau bertan:<br><b>%2$s</b>, eta sakatu Itzuli edo Sartu." - "Baimendu kontaktuak eta deien historia atzitzea" + "Baimendu kontaktuetarako eta deien historiarako sarbidea" "Ezin izan da %1$s gailura konektatu." "Bilatu gailuak" @@ -1850,7 +1850,7 @@ "Audio monofonikoa" "Konbinatu kanalak audioa erreproduzitzean" "Sakatuta edukitzearen atzerapena" - "Kolore-alderantzikatzea" + "Koloreak alderantzikatzeko aukera" "Baliteke errendimenduan eragina izatea" "Egin klik erakusleak mugitzeari uztean" "Klik egin aurretiko atzerapena" diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml index 8cdfd66082e..e08eec2f5f7 100644 --- a/res/values-gl/strings.xml +++ b/res/values-gl/strings.xml @@ -1787,9 +1787,9 @@ "Información sobre a tableta" "Información sobre o teléfono" "Introdución de texto" - "Método de entrada" + "Método de introdución de texto" "Teclado actual" - "Selector do método de entrada" + "Selector do método de introdución" "Automático" "Mostrar sempre" "Ocultar sempre" diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml index 334e5265181..2b08d040b93 100644 --- a/res/values-hi/strings.xml +++ b/res/values-hi/strings.xml @@ -624,7 +624,7 @@ "इससे युग्मित करने के लिए:<br><b>%1$s</b><br><br>सुनिश्चित करें कि वह यह पासकी दिखा रहा है:<br><b>%2$s</b>" "इससे:<br><b>%1$s</b><br><br>इस डिवाइस से जोड़ें?" "इसके साथ युग्‍मित करने के लिए:<br><b>%1$s</b><br><br>इस पर लिखें:<br><b>%2$s</b>, फिर Return या Enter दबाएं." - "आपके संपर्क और कॉल इतिहास देखने की मंज़ूरी दें" + "अपने संपर्क और कॉल इतिहास देखने की मंज़ूरी दें" "%1$s से कनेक्‍ट नहीं किया जा सका." "डिवाइस के लिए स्‍कैन" diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml index 1891f37db9c..93cb38ca754 100644 --- a/res/values-hu/strings.xml +++ b/res/values-hu/strings.xml @@ -1232,10 +1232,10 @@ "Egyéb felhasználók" "Eszköz tárhelye" "Hordozható tárhely" - "%1$s felhasználva, összesen: %2$s" + "%2$s/%1$s foglalt" "^1"" ^2""" - "Összesen: %1$s" - "használatban; összes tárhely: %1$s" + "/ %1$s foglalt" + "/ %1$s foglalt" "A(z) %1$s csatlakoztatva" "A(z) %1$s csatlakoztatása sikertelen" "A(z) %1$s biztonságosan eltávolítva" @@ -3696,7 +3696,7 @@ "Egyéb alkalmazások" "Fájlok" "^1"" ^2""" - "A(z) %1$s tárhelyből felhasznált mennyiség" + "/ %1$s foglalt" "foglalt" "Alkalmazás törlése" "Eltávolítja ezt az azonnali alkalmazást?" diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml index 80a2fd487b1..23b41f337e1 100644 --- a/res/values-hy/strings.xml +++ b/res/values-hy/strings.xml @@ -3287,7 +3287,7 @@ "Ցույց տալ այլ հավելվածների վրայից" "Ցուցադրել մյուս հավելվածների վրայից" "Հավելվածը վերևում ցուցադրելու թույլտվություն" - "Թույլ տալ այս հավելվածի ցուցադրումը ձեր օգտագործած այլ հավելվածների վերևում: Այն կարող է խանգարել այդ հավելվածների ձեր կողմից օգտագործմանը կամ փոխել դրանք ցուցադրման կամ աշխատանքի եղանակը:" + "Թույլ տալ այս հավելվածի ցուցադրումը ձեր օգտագործած այլ հավելվածների վրայից: Դա կարող է խանգարել այդ հավելվածների ձեր կողմից օգտագործմանը կամ փոխել դրանք ցուցադրման կամ աշխատանքի եղանակը:" "vr վիրտուալ իրականություն ունկնդրիչ ստերեո օգնության ծառայություն" "համակարգի զգուշացում պատուհան երկխոսություն ցուցադրել այլ հավելվածների վերևում" "Ցույց տալ այլ հավելվածների վրայից" diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml index 5a1039cc218..bab3e4ba1c5 100644 --- a/res/values-mk/strings.xml +++ b/res/values-mk/strings.xml @@ -624,7 +624,7 @@ "За да се спари со:<br><b>%1$s</b><br><br>Проверете дали се прикажува оваа лозинка:<br><b>%2$s</b>" "Од:<br><b>%1$s</b><br><br>Спари се со овој уред?" "За да се спари со:<br><b>%1$s</b><br><br>Напишете на него:<br><b>%2$s</b>, потоа притиснете „Врати“ или „Внеси“." - "Дозволете %1$s да пристапува до контактите и историјата на повици." + "Дозволете пристап до вашите контакти и историјата на повици" "Не можеше да се поврзе со %1$s." "Скенирај за уреди" @@ -688,7 +688,7 @@ "Поврзана" "Во употреба" "Недостапна" - "Подесувања на приказ" + "Поставки за приказ" "Опции за приказ на безжична мрежа" "Заборави" "Готово" @@ -1207,7 +1207,7 @@ "СД картичката ќе се одмонтира." "Одмонтирање" "Одмонтирање во тек" - "Меморијата е речиси полна" + "Капацитетот е речиси полн" "Некои функции на системот, како што е синхронизирањето, може да не функционираат правилно. Обидете се да ослободите простор со бришење или откачување предмети, како што се апликации или медиумски содржини." "Преименувај" "Монтирај" @@ -2334,7 +2334,7 @@ "Календар" "Контакти" "Добре дојдовте на Google Sync!"\n"Дозволен е пристап кон Google за синхронизирање на податоците за да се овозможи пристап кон вашите контакти, состаноци и повеќе, од каде и да сте." - "Подесувања на синхронизација на апликација" + "Поставки за синхронизација на апликации" "Податоци и синхронизација" "Смени лозинка" "Поставки на сметка" @@ -3400,8 +3400,6 @@ "Користи поладни бои на екранот" "За да се примени промената на бојата, исклучете го екранот" "За да се примени промената на мониторот за телефонија, рестартирајте го уредот" - "Камера HAL HDR+" - "За применување промена на Камера HAL HDR+, рестартиртирајте го уредот" "Ласерски сензор за камерата" "Автоматски ажурирања на системот" "Користење" diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml index 43e9a060895..3d9b633fb3c 100644 --- a/res/values-ne/strings.xml +++ b/res/values-ne/strings.xml @@ -359,8 +359,8 @@ "फिंगरप्रिन्ट थप्नुहोस्" "स्क्रिन लक" - %1$dफिंगरप्रिन्टका सेट अप - %1$dफिंगरप्रिन्ट सेट अप + %1$dफिंगरप्रिन्टका सेटअप + %1$dफिंगरप्रिन्ट सेटअप "फिंगरप्रिन्टमार्फत अनलक" @@ -460,7 +460,7 @@ "आफ्नो ट्याब्लेटलाई सुरक्षित गर्नुहोस्" "आफ्नो यन्त्रलाई सुरक्षित गर्नुहोस्" "तपाईँको फोन सुरक्षित गर्नुहोस्" - "थप सुरक्षाका लागि एउटा ब्याकअप स्क्रिन लक सेट अप गर्नुहोस्।" + "थप सुरक्षाका लागि एउटा ब्याकअप स्क्रिन लक सेटअप गर्नुहोस्।" "यन्त्र सुरक्षा विशेषताहरू सक्रिय गरेर तपाईंको अनुमति बिना यो ट्याब्लेट प्रयोग गर्नबाट रोक्नुहोस्। तपाईंले प्रयोग गर्न चाहेको स्क्रिन लक रोज्नुहोस्।" "यन्त्र सुरक्षा विशेषताहरू सक्रिय गरेर तपाईंको अनुमति बिना यो यन्त्र प्रयोग गर्नबाट रोक्नुहोस्। तपाईंले प्रयोग गर्न चाहेको स्क्रिन लक रोज्नुहोस्।" "यन्त्र सुरक्षा विशेषताहरू सक्रिय गरेर तपाईंको अनुमति बिना यो फोन प्रयोग गर्नबाट रोक्नुहोस्। तपाईंले प्रयोग गर्न चाहेको स्क्रिन लक रोज्नुहोस्।" @@ -2736,7 +2736,7 @@ "सञ्जाल नाम प्रसारणले लुकेका सञ्जालहरू स्वचालित जडान हुनमा रोक्ने असक्षम पार्दै।" "%1$d dBm %2$d asu" "SIM कार्डहरू परिवर्तन गरिए।" - "सेट अप गर्न ट्याप गर्नुहोस्" + "सेटअप गर्न ट्याप गर्नुहोस्" "निम्नको लागि उपयुक्त SIM" "प्रत्येक पटक सोध्नुहोस्" "छनौट आवश्यक छ" diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml index d9bf3cea1e6..a3552d122a4 100644 --- a/res/values-ro/strings.xml +++ b/res/values-ro/strings.xml @@ -635,7 +635,7 @@ "Pentru asocierea cu:<br><b>%1$s</b><br><br>asigurați-vă că se afișează această cheie de acces:<br><b>%2$s</b>" "De la:<br><b>%1$s</b><br><br>Asociați cu acest dispozitiv?" "Pentru împerecherea cu:<br><b>%1$s</b><br><br>Introduceți pe acesta:<br><b>%2$s</b>, apoi apăsați tasta Return sau Enter." - "Permiteți ca %1$s să acceseze persoanele de contact și istoricul apelurilor" + "Permiteți accesul la agendă și la istoricul apelurilor" "Nu s-a putut conecta la %1$s." "Scanați pentru a detecta dispozitive" @@ -741,7 +741,7 @@ "Evitați conexiunile slabe" "Nu utilizați o rețea Wi-Fi, cu excepția cazului în care aceasta are o conexiune la internet adecvată" "Utilizați numai rețelele care au conexiune bună la internet" - "Conectați-vă la rețele deschise" + "Conectează-te la rețele deschise" "Conectați-vă automat la rețele publice de înaltă calitate" "Pentru a folosi funcția, selectați un furnizor de evaluări ale rețelei" "Pentru a folosi funcția, selectați un furnizor de evaluări ale rețelei compatibil" @@ -2990,7 +2990,7 @@ "Afișați notificările" "Nu afișați niciodată notificările în umbră sau pe dispozitive periferice" "Permiteți punct de notificare" - "Afișați punctul de notificare" + "Afișează punctul de notificare" "Ignoră Nu deranja" "Permiteți acestor notificări să vă întrerupă când modul Nu deranja este setat la Numai cu prioritate" "Pe ecranul de blocare" @@ -3442,8 +3442,6 @@ "Folosiți culori mai reci pentru afișare" "Pentru a aplica modificarea culorilor, dezactivați ecranul" "Pentru a aplica modificarea pentru Telephony Monitor, reporniți dispozitivul" - "Camera foto HAL HDR+" - "Pentru a aplica modificarea Camerei foto HAL HDR+, reporniți dispozitivul" "Senzor laser al camerei foto" "Actualizări automate de sistem" "Utilizare" diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml index ab1acdc0134..c2ce5f68740 100644 --- a/res/values-sk/strings.xml +++ b/res/values-sk/strings.xml @@ -646,7 +646,7 @@ "Párovanie so zariadením:<br><b>%1$s</b><br><br>Uistite sa, že zobrazuje tento prístupový kľúč:<br><b>%2$s</b>" "Zo zariadenia:<br><b>%1$s</b><br><br>Párovať s týmto zariadením?" "Ak chcete svoje zariadenie spárovať so zariadením <br><b>%1$s</b><br><br>, zadajte na ňom kód <br><b>%2$s</b> a stlačte kláves Enter." - "Povoliť zariadeniu %1$s prístup k vašim kontaktom a histórii hovorov" + "Povoliť prístup ku kontaktom a histórii hovorov" "Nepodarilo sa pripojiť k zariadeniu %1$s." "Vyhľadať zariadenia" @@ -3484,8 +3484,6 @@ "Používať studenšie farby obrazovky" "Ak chcete použiť zmenu farby, vypnite obrazovku" "Ak chcete použiť zmenu monitorovania telefonických služieb, reštartujte zariadenie" - "Režim HAL HDR+ fotoaparátu" - "Ak chcete uplatniť zmenu režimu HAL HDR+ fotoaparátu, reštartujte zariadenie" "Laserový snímač fotoaparátu" "Automatické aktualizácie systému" "Spotreba" diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml index 3e04d8bcc9b..5c16cc0c73e 100644 --- a/res/values-sl/strings.xml +++ b/res/values-sl/strings.xml @@ -646,7 +646,7 @@ "Če želite seznaniti z napravo:<br><b>%1$s</b><br><br>Prikazano mora biti to geslo:<br><b>%2$s</b>" "Od:<br><b>%1$s</b><br><br>Ali se želite povezati s to napravo?" "Če želite vzpostaviti povezavo z napravo:<br><b>%1$s</b><br><br>V njej vnesite:<br><b>%2$s</b> in pritisnite Return ali Enter." - "Dovolite napravi %1$s, da dostopa do vaših stikov in zgodovine klicev" + "Dovoli dostop do stikov in zgodovine klicev" "Povezave z napravo %1$s ni bilo mogoče vzpostaviti." "Išči naprave" @@ -3484,8 +3484,6 @@ "Uporaba hladnejših barv zaslona" "Če želite uveljaviti spremembo barv, izklopite zaslon" "Če želite uveljaviti spremembo nadziranja telefonije, znova zaženite napravo" - "HDR+ za HAL kamere" - "Če želite uveljaviti spremembo nastavitve HDR+ za HAL kamere, znova zaženite napravo" "Lasersko tipalo fotoaparata" "Samodejne sistemske posodobitve" "Poraba" diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml index 3d7b9a9d761..004960d5181 100644 --- a/res/values-sw/strings.xml +++ b/res/values-sw/strings.xml @@ -2501,7 +2501,7 @@ "Tayari umeunganisha kwenye VPN ambayo imewashwa kila mara. Ikiwa utaunganisha kwenye programu tofauti, programu hiyo itaondoa VPN iliyopo na kuzima hali ya imewashwa kila mara." "Tayari umeunganisha kwenye VPN. Ikiwa utaunganisha kwenye programu tofauti, programu hiyo itaondoa VPN iliyopo." "Washa" - "Haiwezi kuunganisha %1$s" + "%1$s imeshindwa kuunganisha" "Programu hii haitumii VPN iliyo katika hali ya kuwaka kila mara" "VPN" "Ongeza wasifu wa VPN" diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml index a33f03c776d..eba9ea332d0 100644 --- a/res/values-zh-rTW/strings.xml +++ b/res/values-zh-rTW/strings.xml @@ -3698,7 +3698,7 @@ "其他應用程式" "檔案" "^1"" ^2""" - "總儲存空間:%1$s" + "(總儲存空間:%1$s)" "已使用" "清除應用程式" "要移除這個免安裝應用程式嗎?" From 596de5e45c035834c87d183ecc24d5267a8c72ac Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Mon, 18 Dec 2017 20:43:20 -0800 Subject: [PATCH 3/4] Import translations. DO NOT MERGE Auto-generated-cl: translation import Bug: 64712476 Change-Id: Ie62b3a6c465b7d0f011cfdc5e51fb3f195ed4306 --- res/values-eu/strings.xml | 4 ++-- res/values-gl/strings.xml | 4 ++-- res/values-hi/strings.xml | 2 +- res/values-hu/strings.xml | 8 ++++---- res/values-hy/strings.xml | 2 +- res/values-mk/strings.xml | 8 ++++---- res/values-ne/strings.xml | 8 ++++---- res/values-ro/strings.xml | 6 +++--- res/values-sk/strings.xml | 2 +- res/values-sl/strings.xml | 2 +- res/values-sw/strings.xml | 2 +- res/values-zh-rTW/strings.xml | 2 +- 12 files changed, 25 insertions(+), 25 deletions(-) diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml index 5e7b1d04ce3..c599745f451 100644 --- a/res/values-eu/strings.xml +++ b/res/values-eu/strings.xml @@ -618,7 +618,7 @@ "Gailu honekin parekatzeko:<br><b>%1$s</b><br><br>Ziurtatu pasakode hau erakusten duela:<br><b>%2$s</b>" "Igorlea:<br><b>%1$s</b><br><br>Gailuarekin parekatu?" "Honekin parekatzeko:<br><b>%1$s</b><br><br>Idatzi hau bertan:<br><b>%2$s</b>, eta sakatu Itzuli edo Sartu." - "Baimendu kontaktuak eta deien historia atzitzea" + "Baimendu kontaktuetarako eta deien historiarako sarbidea" "Ezin izan da %1$s gailura konektatu." "Bilatu gailuak" @@ -1844,7 +1844,7 @@ "Audio monofonikoa" "Konbinatu kanalak audioa erreproduzitzean" "Sakatuta edukitzearen atzerapena" - "Kolore-alderantzikatzea" + "Koloreak alderantzikatzeko aukera" "Baliteke errendimenduan eragina izatea" "Egin klik erakusleak mugitzeari uztean" "Klik egin aurretiko atzerapena" diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml index 458dfbd5e2f..5548ce9f3fd 100644 --- a/res/values-gl/strings.xml +++ b/res/values-gl/strings.xml @@ -1774,9 +1774,9 @@ "Información sobre a tableta" "Información sobre o teléfono" "Introdución de texto" - "Método de entrada" + "Método de introdución de texto" "Teclado actual" - "Selector do método de entrada" + "Selector do método de introdución" "Automático" "Mostrar sempre" "Ocultar sempre" diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml index 37332a08dea..d348cec7e08 100644 --- a/res/values-hi/strings.xml +++ b/res/values-hi/strings.xml @@ -618,7 +618,7 @@ "इससे युग्मित करने के लिए:<br><b>%1$s</b><br><br>सुनिश्चित करें कि वह यह पासकी दिखा रहा है:<br><b>%2$s</b>" "इससे:<br><b>%1$s</b><br><br>इस डिवाइस से जोड़ें?" "इसके साथ युग्‍मित करने के लिए:<br><b>%1$s</b><br><br>इस पर लिखें:<br><b>%2$s</b>, फिर Return या Enter दबाएं." - "आपके संपर्क और कॉल इतिहास देखने की मंज़ूरी दें" + "अपने संपर्क और कॉल इतिहास देखने की मंज़ूरी दें" "%1$s से कनेक्‍ट नहीं किया जा सका." "डिवाइस के लिए स्‍कैन" diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml index 6de94d311ed..30fe18067d8 100644 --- a/res/values-hu/strings.xml +++ b/res/values-hu/strings.xml @@ -1222,10 +1222,10 @@ "Egyéb felhasználók" "Eszköz tárhelye" "Hordozható tárhely" - "%1$s felhasználva, összesen: %2$s" + "%2$s/%1$s foglalt" "^1"" ^2""" - "Összesen: %1$s" - "használatban; összes tárhely: %1$s" + "/ %1$s foglalt" + "/ %1$s foglalt" "A(z) %1$s csatlakoztatva" "A(z) %1$s csatlakoztatása sikertelen" "A(z) %1$s biztonságosan eltávolítva" @@ -3680,7 +3680,7 @@ "Egyéb alkalmazások" "Fájlok" "^1"" ^2""" - "A(z) %1$s tárhelyből felhasznált mennyiség" + "/ %1$s foglalt" "foglalt" "Alkalmazás törlése" "Eltávolítja ezt az azonnali alkalmazást?" diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml index b2e1bf00257..f05ced8592c 100644 --- a/res/values-hy/strings.xml +++ b/res/values-hy/strings.xml @@ -3276,7 +3276,7 @@ "Ցույց տալ այլ հավելվածների վրայից" "Ցուցադրել մյուս հավելվածների վրայից" "Հավելվածը վերևում ցուցադրելու թույլտվություն" - "Թույլ տալ այս հավելվածի ցուցադրումը ձեր օգտագործած այլ հավելվածների վերևում: Այն կարող է խանգարել այդ հավելվածների ձեր կողմից օգտագործմանը կամ փոխել դրանք ցուցադրման կամ աշխատանքի եղանակը:" + "Թույլ տալ այս հավելվածի ցուցադրումը ձեր օգտագործած այլ հավելվածների վրայից: Դա կարող է խանգարել այդ հավելվածների ձեր կողմից օգտագործմանը կամ փոխել դրանք ցուցադրման կամ աշխատանքի եղանակը:" "vr վիրտուալ իրականություն ունկնդրիչ ստերեո օգնության ծառայություն" "համակարգի զգուշացում պատուհան երկխոսություն ցուցադրել այլ հավելվածների վերևում" "Ցույց տալ այլ հավելվածների վրայից" diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml index 14f500a3ed4..2ec82e02a25 100644 --- a/res/values-mk/strings.xml +++ b/res/values-mk/strings.xml @@ -618,7 +618,7 @@ "За да се спари со:<br><b>%1$s</b><br><br>Проверете дали се прикажува оваа лозинка:<br><b>%2$s</b>" "Од:<br><b>%1$s</b><br><br>Спари се со овој уред?" "За да се спари со:<br><b>%1$s</b><br><br>Напишете на него:<br><b>%2$s</b>, потоа притиснете „Врати“ или „Внеси“." - "Дозволете %1$s да пристапува до контактите и историјата на повици." + "Дозволете пристап до вашите контакти и историјата на повици" "Не можеше да се поврзе со %1$s." "Скенирај за уреди" @@ -682,7 +682,7 @@ "Поврзана" "Во употреба" "Недостапна" - "Подесувања на приказ" + "Поставки за приказ" "Опции за приказ на безжична мрежа" "Заборави" "Готово" @@ -1197,7 +1197,7 @@ "СД картичката ќе се одмонтира." "Одмонтирање" "Одмонтирање во тек" - "Меморијата е речиси полна" + "Капацитетот е речиси полн" "Некои функции на системот, како што е синхронизирањето, може да не функционираат правилно. Обидете се да ослободите простор со бришење или откачување предмети, како што се апликации или медиумски содржини." "Преименувај" "Монтирај" @@ -2329,7 +2329,7 @@ "Календар" "Контакти" "Добре дојдовте на Google Sync!"\n"Дозволен е пристап кон Google за синхронизирање на податоците за да се овозможи пристап кон вашите контакти, состаноци и повеќе, од каде и да сте." - "Подесувања на синхронизација на апликација" + "Поставки за синхронизација на апликации" "Податоци и синхронизација" "Смени лозинка" "Поставки на сметка" diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml index c9726a2598c..09c69bde808 100644 --- a/res/values-ne/strings.xml +++ b/res/values-ne/strings.xml @@ -359,8 +359,8 @@ "फिंगरप्रिन्ट थप्नुहोस्" "स्क्रिन लक" - %1$dफिंगरप्रिन्टका सेट अप - %1$dफिंगरप्रिन्ट सेट अप + %1$dफिंगरप्रिन्टका सेटअप + %1$dफिंगरप्रिन्ट सेटअप "फिंगरप्रिन्टमार्फत अनलक" @@ -455,7 +455,7 @@ "आफ्नो ट्याब्लेटलाई सुरक्षित गर्नुहोस्" "आफ्नो यन्त्रलाई सुरक्षित गर्नुहोस्" "तपाईँको फोन सुरक्षित गर्नुहोस्" - "थप सुरक्षाका लागि एउटा ब्याक अप सम्बन्धी स्क्रिन लक सेट अप गर्नुहोस्।" + "थप सुरक्षाका लागि एउटा ब्याक अप सम्बन्धी स्क्रिन लक सेटअप गर्नुहोस्।" "यन्त्र सुरक्षा विशेषताहरू सक्रिय गरेर तपाईंको अनुमति बिना यो ट्याब्लेट प्रयोग गर्नबाट रोक्नुहोस्। तपाईंले प्रयोग गर्न चाहेको स्क्रिन लक रोज्नुहोस्।" "यन्त्र सुरक्षा विशेषताहरू सक्रिय गरेर तपाईंको अनुमति बिना यो यन्त्र प्रयोग गर्नबाट रोक्नुहोस्। तपाईंले प्रयोग गर्न चाहेको स्क्रिन लक रोज्नुहोस्।" "यन्त्र सुरक्षा विशेषताहरू सक्रिय गरेर तपाईंको अनुमति बिना यो फोन प्रयोग गर्नबाट रोक्नुहोस्। तपाईंले प्रयोग गर्न चाहेको स्क्रिन लक रोज्नुहोस्।" @@ -2727,7 +2727,7 @@ "सञ्जाल नाम प्रसारणले लुकेका सञ्जालहरू स्वचालित जडान हुनमा रोक्ने असक्षम पार्दै।" "%1$d dBm %2$d asu" "SIM कार्डहरू परिवर्तन गरिए।" - "सेट अप गर्न ट्याप गर्नुहोस्" + "सेटअप गर्न ट्याप गर्नुहोस्" "निम्नको लागि उपयुक्त SIM" "प्रत्येक पटक सोध्नुहोस्" "छनौट आवश्यक छ" diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml index 20a8273eb4e..1ff4b391420 100644 --- a/res/values-ro/strings.xml +++ b/res/values-ro/strings.xml @@ -629,7 +629,7 @@ "Pentru asocierea cu:<br><b>%1$s</b><br><br>asigurați-vă că se afișează această cheie de acces:<br><b>%2$s</b>" "De la:<br><b>%1$s</b><br><br>Asociați cu acest dispozitiv?" "Pentru împerecherea cu:<br><b>%1$s</b><br><br>Introduceți pe acesta:<br><b>%2$s</b>, apoi apăsați tasta Return sau Enter." - "Permiteți ca %1$s să acceseze persoanele de contact și istoricul apelurilor" + "Permiteți accesul la agendă și la istoricul apelurilor" "Nu s-a putut conecta la %1$s." "Scanați pentru a detecta dispozitive" @@ -735,7 +735,7 @@ "Evitați conexiunile slabe" "Nu utilizați o rețea Wi-Fi, cu excepția cazului în care aceasta are o conexiune la internet adecvată" "Utilizați numai rețelele care au conexiune bună la internet" - "Conectați-vă la rețele deschise" + "Conectează-te la rețele deschise" "Conectați-vă automat la rețele publice de înaltă calitate" "Pentru a folosi funcția, selectați un furnizor de evaluări ale rețelei" "Pentru a folosi funcția, selectați un furnizor de evaluări ale rețelei compatibil" @@ -2981,7 +2981,7 @@ "Afișați notificările" "Nu afișați niciodată notificările în umbră sau pe dispozitive periferice" "Permiteți punct de notificare" - "Afișați punctul de notificare" + "Afișează punctul de notificare" "Ignoră Nu deranja" "Permiteți acestor notificări să vă întrerupă când modul Nu deranja este setat la Numai cu prioritate" "Pe ecranul de blocare" diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml index bd71e362e36..9b313a8e5a6 100644 --- a/res/values-sk/strings.xml +++ b/res/values-sk/strings.xml @@ -640,7 +640,7 @@ "Párovanie so zariadením:<br><b>%1$s</b><br><br>Uistite sa, že zobrazuje tento prístupový kľúč:<br><b>%2$s</b>" "Zo zariadenia:<br><b>%1$s</b><br><br>Párovať s týmto zariadením?" "Ak chcete svoje zariadenie spárovať so zariadením <br><b>%1$s</b><br><br>, zadajte na ňom kód <br><b>%2$s</b> a stlačte kláves Enter." - "Povoliť zariadeniu %1$s prístup k vašim kontaktom a histórii hovorov" + "Povoliť prístup ku kontaktom a histórii hovorov" "Nepodarilo sa pripojiť k zariadeniu %1$s." "Vyhľadať zariadenia" diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml index 15b1902296a..0eda4338bbd 100644 --- a/res/values-sl/strings.xml +++ b/res/values-sl/strings.xml @@ -640,7 +640,7 @@ "Če želite seznaniti z napravo:<br><b>%1$s</b><br><br>Prikazano mora biti to geslo:<br><b>%2$s</b>" "Od:<br><b>%1$s</b><br><br>Ali se želite povezati s to napravo?" "Če želite vzpostaviti povezavo z napravo:<br><b>%1$s</b><br><br>V njej vnesite:<br><b>%2$s</b> in pritisnite Return ali Enter." - "Dovolite napravi %1$s, da dostopa do vaših stikov in zgodovine klicev" + "Dovoli dostop do stikov in zgodovine klicev" "Povezave z napravo %1$s ni bilo mogoče vzpostaviti." "Išči naprave" diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml index 23fa4e07891..aefeb581334 100644 --- a/res/values-sw/strings.xml +++ b/res/values-sw/strings.xml @@ -2492,7 +2492,7 @@ "Tayari umeunganisha kwenye VPN ambayo imewashwa kila mara. Ikiwa utaunganisha kwenye programu tofauti, programu hiyo itaondoa VPN iliyopo na kuzima hali ya imewashwa kila mara." "Tayari umeunganisha kwenye VPN. Ikiwa utaunganisha kwenye programu tofauti, programu hiyo itaondoa VPN iliyopo." "Washa" - "Haiwezi kuunganisha %1$s" + "%1$s imeshindwa kuunganisha" "Programu hii haitumii VPN iliyo katika hali ya kuwaka kila mara" "VPN" "Ongeza wasifu wa VPN" diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml index 739b368858f..56674405f69 100644 --- a/res/values-zh-rTW/strings.xml +++ b/res/values-zh-rTW/strings.xml @@ -3682,7 +3682,7 @@ "其他應用程式" "檔案" "^1"" ^2""" - "總儲存空間:%1$s" + "(總儲存空間:%1$s)" "已使用" "清除應用程式" "要移除這個免安裝應用程式嗎?" From 76e569d3a60e99d4eb04615e9cb9b75d35ec8bef Mon Sep 17 00:00:00 2001 From: Ashita Sriraman Date: Tue, 19 Dec 2017 06:25:54 +0000 Subject: [PATCH 4/4] Revert "Moving settings tests into the settings package" This reverts commit 54fa3c5e413b8f9163bf2bae820dbf08c3671867. Reason for revert: Change-Id: Id90d8718b4b0db3f3831fb2dc82cae6aea6c9170 --- tests/uitests/Android.mk | 36 - tests/uitests/AndroidManifest.xml | 34 - tests/uitests/AndroidTest.xml | 27 - .../functional/AboutPhoneSettingsTests.java | 224 ----- .../AccessibilitySettingsTests.java | 279 ------- .../functional/AppsSettingsTests.java | 136 --- .../BluetoothNetworkSettingsTests.java | 163 ---- .../functional/ConnectedDeviceTests.java | 92 --- .../functional/DataUsageSettingsTests.java | 84 -- .../functional/DisplaySettingsTest.java | 268 ------ .../functional/HomepageDisplayTests.java | 99 --- .../functional/LocationSettingsTests.java | 243 ------ .../functional/MoreWirelessSettingsTests.java | 126 --- .../functional/NotificationSettingsTests.java | 158 ---- .../SecuritySettingsLaunchTest.java | 75 -- .../functional/SoundSettingsTest.java | 334 -------- .../settings/functional/SyncSettingsTest.java | 70 -- .../WirelessNetworkSettingsTests.java | 777 ------------------ .../testutils/SettingsTestUtils.java | 61 -- 19 files changed, 3286 deletions(-) delete mode 100644 tests/uitests/Android.mk delete mode 100644 tests/uitests/AndroidManifest.xml delete mode 100644 tests/uitests/AndroidTest.xml delete mode 100644 tests/uitests/src/com/android/settings/functional/AboutPhoneSettingsTests.java delete mode 100644 tests/uitests/src/com/android/settings/functional/AccessibilitySettingsTests.java delete mode 100644 tests/uitests/src/com/android/settings/functional/AppsSettingsTests.java delete mode 100644 tests/uitests/src/com/android/settings/functional/BluetoothNetworkSettingsTests.java delete mode 100644 tests/uitests/src/com/android/settings/functional/ConnectedDeviceTests.java delete mode 100644 tests/uitests/src/com/android/settings/functional/DataUsageSettingsTests.java delete mode 100644 tests/uitests/src/com/android/settings/functional/DisplaySettingsTest.java delete mode 100644 tests/uitests/src/com/android/settings/functional/HomepageDisplayTests.java delete mode 100644 tests/uitests/src/com/android/settings/functional/LocationSettingsTests.java delete mode 100644 tests/uitests/src/com/android/settings/functional/MoreWirelessSettingsTests.java delete mode 100644 tests/uitests/src/com/android/settings/functional/NotificationSettingsTests.java delete mode 100644 tests/uitests/src/com/android/settings/functional/SecuritySettingsLaunchTest.java delete mode 100644 tests/uitests/src/com/android/settings/functional/SoundSettingsTest.java delete mode 100644 tests/uitests/src/com/android/settings/functional/SyncSettingsTest.java delete mode 100644 tests/uitests/src/com/android/settings/functional/WirelessNetworkSettingsTests.java delete mode 100644 tests/uitests/src/com/android/settings/functional/testutils/SettingsTestUtils.java diff --git a/tests/uitests/Android.mk b/tests/uitests/Android.mk deleted file mode 100644 index b905088ff21..00000000000 --- a/tests/uitests/Android.mk +++ /dev/null @@ -1,36 +0,0 @@ -# Copyright (C) 2017 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. - -LOCAL_PATH := $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_PACKAGE_NAME := SettingsUITests -LOCAL_COMPATIBILITY_SUITE := device-tests -LOCAL_SRC_FILES := $(call all-java-files-under, src) -LOCAL_MODULE_TAGS := tests -LOCAL_JAVA_LIBRARIES := android.test.runner android.test.base -LOCAL_STATIC_JAVA_LIBRARIES := \ - app-helpers-base \ - launcher-helper-lib \ - settings-helper \ - timeresult-helper-lib \ - ub-uiautomator \ - sysui-helper \ - google-sysui-helper \ - metrics-helper-lib \ - platform-test-annotations \ - -#LOCAL_SDK_VERSION := current - -include $(BUILD_PACKAGE) diff --git a/tests/uitests/AndroidManifest.xml b/tests/uitests/AndroidManifest.xml deleted file mode 100644 index 0e6e91e0d75..00000000000 --- a/tests/uitests/AndroidManifest.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/tests/uitests/AndroidTest.xml b/tests/uitests/AndroidTest.xml deleted file mode 100644 index 99bd76f4249..00000000000 --- a/tests/uitests/AndroidTest.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - diff --git a/tests/uitests/src/com/android/settings/functional/AboutPhoneSettingsTests.java b/tests/uitests/src/com/android/settings/functional/AboutPhoneSettingsTests.java deleted file mode 100644 index 09814f4f5d4..00000000000 --- a/tests/uitests/src/com/android/settings/functional/AboutPhoneSettingsTests.java +++ /dev/null @@ -1,224 +0,0 @@ -/* - * Copyright (C) 2017 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.settings.ui; - -import android.content.Intent; -import android.os.RemoteException; -import android.provider.Settings; -import android.support.test.uiautomator.By; -import android.support.test.uiautomator.Direction; -import android.support.test.uiautomator.UiDevice; -import android.support.test.uiautomator.UiObject2; -import android.support.test.uiautomator.Until; -import android.test.InstrumentationTestCase; -import android.test.suitebuilder.annotation.MediumTest; -import android.test.suitebuilder.annotation.Suppress; -import android.text.TextUtils; -import android.util.Log; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Iterator; - -/** Verifies basic functionality of the About Phone screen */ -public class AboutPhoneSettingsTests extends InstrumentationTestCase { - private static final boolean LOCAL_LOGV = false; - private static final String TAG = "AboutPhoneSettingsTest"; - private static final int TIMEOUT = 2000; - private static final String SETTINGS_PACKAGE = "com.android.settings"; - - private UiDevice mDevice; - - // TODO: retrieve using name/ids from com.android.settings package - private static final String[] sResourceTexts = { - "Status", - "Legal information", - "Regulatory labels", - "Model", - "Android version", - "Android security patch level", - "Baseband version", - "Kernel version", - "Build number" - }; - - private static final String[] sClickableResourceTexts = { - "Status", "Legal information", "Regulatory labels", - }; - - @Override - public void setUp() throws Exception { - if (LOCAL_LOGV) { - Log.d(TAG, "-------"); - } - super.setUp(); - mDevice = UiDevice.getInstance(getInstrumentation()); - try { - mDevice.setOrientationNatural(); - } catch (RemoteException e) { - throw new RuntimeException("Failed to freeze device orientaion", e); - } - - // make sure we are in a clean state before starting the test - mDevice.pressHome(); - Thread.sleep(TIMEOUT * 2); - launchAboutPhoneSettings(Settings.ACTION_DEVICE_INFO_SETTINGS); - // TODO: make sure we are always at the top of the app - // currently this will fail if the user has navigated into submenus - UiObject2 view = - mDevice.wait( - Until.findObject(By.res(SETTINGS_PACKAGE + ":id/main_content")), TIMEOUT); - assertNotNull("Could not find main About Phone screen", view); - view.scroll(Direction.UP, 1.0f); - } - - @Override - protected void tearDown() throws Exception { - // Adding an extra pressBack so we exit About Phone Settings - // and finish the test cleanly - mDevice.pressBack(); - mDevice.pressHome(); // finish settings activity - mDevice.waitForIdle(TIMEOUT * 2); // give UI time to finish animating - super.tearDown(); - } - - private void launchAboutPhoneSettings(String aboutSetting) throws Exception { - Intent aboutIntent = new Intent(aboutSetting); - aboutIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - getInstrumentation().getContext().startActivity(aboutIntent); - } - - /** - * Callable actions that can be taken when a UIObject2 is found - * - * @param device The current UiDevice - * @param item The UiObject2 that was found and can be acted on - * - * @return {@code true} if the call was successful, and {@code false} otherwise - */ - public interface UIObject2Callback { - boolean call(UiDevice device, UiObject2 item) throws Exception; - } - - /** - * Clicks the given item and then presses the Back button - * - *

Used to test whether a given UiObject2 can be successfully clicked. - * Presses Back to restore state to the previous screen. - * - * @param device The device that can be used to press Back - * @param item The item to click - * - * @return {@code true} if clicking the item succeeded, and {@code false} otherwise - */ - public class UiObject2Clicker implements UIObject2Callback { - public boolean call(UiDevice device, UiObject2 item) throws Exception { - item.click(); - Thread.sleep(TIMEOUT * 2); // give UI time to finish animating - boolean pressWorked = device.pressBack(); - Thread.sleep(TIMEOUT * 2); - return pressWorked; - } - } - - /** - * Removes items found in the view and optionally takes some action. - * - * @param device The current UiDevice - * @param itemsLeftToFind The items to search for in the current view - * @param action Action to call on each item that is found; pass {@code null} to take no action - */ - private void removeItemsAndTakeAction( - UiDevice device, ArrayList itemsLeftToFind, UIObject2Callback action) throws Exception { - for (Iterator iterator = itemsLeftToFind.iterator(); iterator.hasNext(); ) { - String itemText = iterator.next(); - UiObject2 item = device.wait(Until.findObject(By.text(itemText)), TIMEOUT); - if (item != null) { - if (LOCAL_LOGV) { - Log.d(TAG, itemText + " is present"); - } - iterator.remove(); - if (action != null) { - boolean success = action.call(device, item); - assertTrue("Calling action after " + itemText + " did not work", success); - } - } else { - if (LOCAL_LOGV) { - Log.d(TAG, "Could not find " + itemText); - } - } - } - } - - /** - * Searches for UI elements in the current view and optionally takes some action. - * - *

Will scroll down the screen until it has found all elements or reached the bottom. - * This allows elements to be found and acted on even if they change order. - * - * @param device The current UiDevice - * @param itemsToFind The items to search for in the current view - * @param action Action to call on each item that is found; pass {@code null} to take no action - */ - public void searchForItemsAndTakeAction(UiDevice device, String[] itemsToFind, UIObject2Callback action) - throws Exception { - - ArrayList itemsLeftToFind = new ArrayList(Arrays.asList(itemsToFind)); - assertFalse( - "There must be at least one item to search for on the screen!", - itemsLeftToFind.isEmpty()); - - if (LOCAL_LOGV) { - Log.d(TAG, "items: " + TextUtils.join(", ", itemsLeftToFind)); - } - boolean canScrollDown = true; - while (canScrollDown && !itemsLeftToFind.isEmpty()) { - removeItemsAndTakeAction(device, itemsLeftToFind, action); - - // when we've finished searching the current view, scroll down - UiObject2 view = - device.wait( - Until.findObject(By.res(SETTINGS_PACKAGE + ":id/main_content")), - TIMEOUT * 2); - if (view != null) { - canScrollDown = view.scroll(Direction.DOWN, 1.0f); - } else { - canScrollDown = false; - } - } - // check the last items once we have reached the bottom of the view - removeItemsAndTakeAction(device, itemsLeftToFind, action); - - assertTrue( - "The following items were not found on the screen: " - + TextUtils.join(", ", itemsLeftToFind), - itemsLeftToFind.isEmpty()); - } - - @MediumTest // UI interaction - public void testAllMenuEntriesExist() throws Exception { - searchForItemsAndTakeAction(mDevice, sResourceTexts, null); - } - - // Suppressing this test as it might be causing other test failures - // Will verify that this test is the cause before proceeding with solution - @Suppress - @MediumTest // UI interaction - public void testClickableEntriesCanBeClicked() throws Exception { - searchForItemsAndTakeAction(mDevice, sClickableResourceTexts, new UiObject2Clicker()); - } -} diff --git a/tests/uitests/src/com/android/settings/functional/AccessibilitySettingsTests.java b/tests/uitests/src/com/android/settings/functional/AccessibilitySettingsTests.java deleted file mode 100644 index f5896191075..00000000000 --- a/tests/uitests/src/com/android/settings/functional/AccessibilitySettingsTests.java +++ /dev/null @@ -1,279 +0,0 @@ -/* - * Copyright (C) 2017 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.settings.ui; - -import android.content.Context; -import android.net.wifi.WifiManager; -import android.os.RemoteException; -import android.platform.test.annotations.Presubmit; -import android.provider.Settings; -import android.support.test.metricshelper.MetricsAsserts; -import android.support.test.uiautomator.By; -import android.support.test.uiautomator.Direction; -import android.support.test.uiautomator.UiDevice; -import android.support.test.uiautomator.UiObject2; -import android.support.test.uiautomator.Until; -import android.system.helpers.SettingsHelper; -import android.test.InstrumentationTestCase; -import android.test.suitebuilder.annotation.MediumTest; -import android.test.suitebuilder.annotation.Suppress; - -import android.metrics.MetricsReader; -import com.android.internal.logging.nano.MetricsProto.MetricsEvent; - -public class AccessibilitySettingsTests extends InstrumentationTestCase { - - private static final String SETTINGS_PACKAGE = "com.android.settings"; - private static final int TIMEOUT = 2000; - private UiDevice mDevice; - private MetricsReader mMetricsReader; - - @Override - public void setUp() throws Exception { - super.setUp(); - mDevice = UiDevice.getInstance(getInstrumentation()); - try { - mDevice.setOrientationNatural(); - } catch (RemoteException e) { - throw new RuntimeException("failed to freeze device orientaion", e); - } - mMetricsReader = new MetricsReader(); - // Clear out old logs - mMetricsReader.checkpoint(); - } - - @Override - protected void tearDown() throws Exception { - // Need to finish settings activity - mDevice.pressBack(); - mDevice.pressHome(); - mDevice.waitForIdle(); - super.tearDown(); - } - - @Presubmit - @MediumTest - public void testHighContrastTextOn() throws Exception { - verifyAccessibilitySettingOnOrOff("High contrast text", - Settings.Secure.ACCESSIBILITY_HIGH_TEXT_CONTRAST_ENABLED, 0, 1); - } - - @Presubmit - @MediumTest - public void testHighContrastTextOff() throws Exception { - verifyAccessibilitySettingOnOrOff("High contrast text", - Settings.Secure.ACCESSIBILITY_HIGH_TEXT_CONTRAST_ENABLED, 1, 0); - } - - @Presubmit - @MediumTest - public void testPowerButtonEndsCallOn() throws Exception { - verifyAccessibilitySettingOnOrOff("Power button ends call", - Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR, 1, 2); - } - - @Presubmit - @MediumTest - public void testPowerButtonEndsCallOff() throws Exception { - verifyAccessibilitySettingOnOrOff("Power button ends call", - Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR, 2, 1); - } - - /* Suppressing these four tests. The settings don't play - * nice with Settings.System.putInt or Settings.Secure.putInt. - * Need further clarification. Filed bug b/27792029 - */ - @Suppress - @MediumTest - public void testAutoRotateScreenOn() throws Exception { - verifyAccessibilitySettingOnOrOff("Auto-rotate screen", - Settings.System.ACCELEROMETER_ROTATION, 0, 1); - } - - @Suppress - @MediumTest - public void testAutoRotateScreenOff() throws Exception { - verifyAccessibilitySettingOnOrOff("Auto-rotate screen", - Settings.System.ACCELEROMETER_ROTATION, 1, 0); - } - - @Suppress - @MediumTest - public void testMonoAudioOn() throws Exception { - verifyAccessibilitySettingOnOrOff("Mono audio", - Settings.System.MASTER_MONO, 0, 1); - } - - @Suppress - @MediumTest - public void testMonoAudioOff() throws Exception { - verifyAccessibilitySettingOnOrOff("Mono audio", - Settings.System.MASTER_MONO, 1, 0); - } - - @Presubmit - @MediumTest - public void testLargeMousePointerOn() throws Exception { - verifyAccessibilitySettingOnOrOff("Large mouse pointer", - Settings.Secure.ACCESSIBILITY_LARGE_POINTER_ICON, 0, 1); - } - - @Presubmit - @MediumTest - public void testLargeMousePointerOff() throws Exception { - verifyAccessibilitySettingOnOrOff("Large mouse pointer", - Settings.Secure.ACCESSIBILITY_LARGE_POINTER_ICON, 1, 0); - } - - @Presubmit - @MediumTest - public void testColorCorrection() throws Exception { - verifySettingToggleAfterScreenLoad("Color correction", - Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED); - MetricsAsserts.assertHasVisibilityLog("Missing color correction log", - mMetricsReader, MetricsEvent.ACCESSIBILITY_TOGGLE_DALTONIZER, true); - } - - // Suppressing this test, since UiAutomator + talkback don't play nice - @Suppress - @MediumTest - public void testTalkback() throws Exception { - verifySettingToggleAfterScreenLoad("TalkBack", - Settings.Secure.ACCESSIBILITY_ENABLED); - } - - @Presubmit - @MediumTest - public void testCaptions() throws Exception { - verifySettingToggleAfterScreenLoad("Captions", - Settings.Secure.ACCESSIBILITY_CAPTIONING_ENABLED); - MetricsAsserts.assertHasVisibilityLog("Missing captions log", - mMetricsReader, MetricsEvent.ACCESSIBILITY_CAPTION_PROPERTIES, true); - } - - @Presubmit - @MediumTest - public void testMagnificationGesture() throws Exception { - verifySettingToggleAfterScreenLoad("Magnification", "Magnify with triple-tap", - Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED); - MetricsAsserts.assertHasVisibilityLog("Missing magnification log", - mMetricsReader, MetricsEvent.ACCESSIBILITY_TOGGLE_SCREEN_MAGNIFICATION, true); - } - - @MediumTest - public void testClickAfterPointerStopsMoving() throws Exception { - verifySettingToggleAfterScreenLoad("Click after pointer stops moving", - Settings.Secure.ACCESSIBILITY_AUTOCLICK_ENABLED); - } - - @MediumTest - public void testAccessibilitySettingsLoadLog() throws Exception { - launchAccessibilitySettings(); - MetricsAsserts.assertHasVisibilityLog("Missing accessibility settings load log", - mMetricsReader, MetricsEvent.ACCESSIBILITY, true); - } - - public void launchAccessibilitySettings() throws Exception { - SettingsHelper.launchSettingsPage(getInstrumentation().getContext(), - Settings.ACTION_ACCESSIBILITY_SETTINGS); - } - - private void verifyAccessibilitySettingOnOrOff(String settingText, - String settingFlag, int initialFlagValue, int expectedFlagValue) - throws Exception { - Settings.Secure.putInt(getInstrumentation().getContext().getContentResolver(), - settingFlag, initialFlagValue); - launchAccessibilitySettings(); - UiObject2 settingsTitle = findItemOnScreen(settingText); - settingsTitle.click(); - Thread.sleep(TIMEOUT); - int settingValue = Settings.Secure - .getInt(getInstrumentation().getContext().getContentResolver(), settingFlag); - assertEquals(settingText + " not correctly set after toggle", - expectedFlagValue, settingValue); - } - - private void verifySettingToggleAfterScreenLoad(String settingText, String settingFlag) - throws Exception { - verifySettingToggleAfterScreenLoad(settingText, null, settingFlag); - } - - private void verifySettingToggleAfterScreenLoad - (String settingText, String subSetting, String settingFlag) throws Exception { - // Load accessibility settings - launchAccessibilitySettings(); - Settings.Secure.putInt(getInstrumentation().getContext().getContentResolver(), - settingFlag, 0); - Thread.sleep(TIMEOUT); - // Tap on setting required - UiObject2 settingTitle = findItemOnScreen(settingText); - // Load screen - settingTitle.click(); - Thread.sleep(TIMEOUT); - if (subSetting != null) { - UiObject2 subSettingObject = findItemOnScreen(subSetting); - subSettingObject.click(); - Thread.sleep(TIMEOUT); - } - // Toggle value - UiObject2 settingToggle = mDevice.wait(Until.findObject(By.text("Off")), - TIMEOUT); - settingToggle.click(); - dismissOpenDialog(); - Thread.sleep(TIMEOUT); - // Assert new value - int settingValue = Settings.Secure. - getInt(getInstrumentation().getContext().getContentResolver(), settingFlag); - assertEquals(settingText + " value not set correctly", 1, settingValue); - // Toogle value - settingToggle.click(); - dismissOpenDialog(); - mDevice.pressBack(); - Thread.sleep(TIMEOUT); - // Assert reset to old value - settingValue = Settings.Secure. - getInt(getInstrumentation().getContext().getContentResolver(), settingFlag); - assertEquals(settingText + " value not set correctly", 0, settingValue); - } - - private UiObject2 findItemOnScreen(String item) throws Exception { - int count = 0; - UiObject2 settingsPanel = mDevice.wait(Until.findObject - (By.res(SETTINGS_PACKAGE, "list")), TIMEOUT); - while (settingsPanel.fling(Direction.UP) && count < 3) { - count++; - } - count = 0; - UiObject2 setting = null; - while(count < 3 && setting == null) { - setting = mDevice.wait(Until.findObject(By.text(item)), TIMEOUT); - if (setting == null) { - settingsPanel.scroll(Direction.DOWN, 1.0f); - } - count++; - } - return setting; - } - - private void dismissOpenDialog() throws Exception { - UiObject2 okButton = mDevice.wait(Until.findObject - (By.res("android:id/button1")), TIMEOUT*2); - if (okButton != null) { - okButton.click(); - } - } -} diff --git a/tests/uitests/src/com/android/settings/functional/AppsSettingsTests.java b/tests/uitests/src/com/android/settings/functional/AppsSettingsTests.java deleted file mode 100644 index 473d2f38d21..00000000000 --- a/tests/uitests/src/com/android/settings/functional/AppsSettingsTests.java +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Copyright (C) 2017 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.settings.ui; - -import android.content.Intent; -import android.os.RemoteException; -import android.provider.Settings; -import android.support.test.uiautomator.By; -import android.support.test.uiautomator.Direction; -import android.support.test.uiautomator.UiDevice; -import android.support.test.uiautomator.UiObject2; -import android.support.test.uiautomator.Until; -import android.system.helpers.ActivityHelper; -import android.test.InstrumentationTestCase; -import android.test.suitebuilder.annotation.MediumTest; -import android.text.TextUtils; -import android.util.Log; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Iterator; - -/** Verifies basic functionality of the About Phone screen */ -public class AppsSettingsTests extends InstrumentationTestCase { - private static final boolean LOCAL_LOGV = false; - private static final String SETTINGS_PACKAGE = "com.android.settings"; - private static final String TAG = "AboutPhoneSettingsTest"; - private static final int TIMEOUT = 2000; - private ActivityHelper mActivityHelper = null; - - private UiDevice mDevice; - - private static final String[] sResourceTexts = { - "Storage", - "Data usage", - "Permissions", - "App notifications", - "Open by default", - "Battery", - "Memory" - }; - - @Override - public void setUp() throws Exception { - if (LOCAL_LOGV) { - Log.d(TAG, "-------"); - } - super.setUp(); - mDevice = UiDevice.getInstance(getInstrumentation()); - mActivityHelper = ActivityHelper.getInstance(); - try { - mDevice.setOrientationNatural(); - } catch (RemoteException e) { - throw new RuntimeException("Failed to freeze device orientaion", e); - } - - // make sure we are in a clean state before starting the test - mDevice.pressHome(); - Thread.sleep(TIMEOUT * 2); - launchAppsSettings(); - UiObject2 view = - mDevice.wait( - Until.findObject(By.text("All apps")), TIMEOUT); - assertNotNull("Could not find Settings > Apps screen", view); - } - - @Override - protected void tearDown() throws Exception { - mDevice.pressBack(); - mDevice.pressHome(); // finish settings activity - mDevice.waitForIdle(TIMEOUT * 2); // give UI time to finish animating - super.tearDown(); - } - - @MediumTest - public void testAppSettingsListForCalculator() { - UiObject2 calculator = mDevice.wait( - Until.findObject(By.text("Calculator")), TIMEOUT); - calculator.click(); - for (String setting : sResourceTexts) { - UiObject2 appSetting = - mDevice.wait( - Until.findObject(By.text(setting)), TIMEOUT); - assertNotNull("Missing setting for Calculator: " + setting, appSetting); - appSetting.scroll(Direction.DOWN, 10.0f); - } - } - - @MediumTest - public void testDisablingAndEnablingSystemApp() throws Exception { - launchAppsSettings(); - UiObject2 calculator = mDevice.wait( - Until.findObject(By.text("Calculator")), TIMEOUT); - calculator.click(); - mDevice.waitForIdle(TIMEOUT); - UiObject2 appInfoList = mDevice.wait( - Until.findObject(By.res(SETTINGS_PACKAGE, "list")), TIMEOUT); - appInfoList.scroll(Direction.DOWN, 100.0f); - UiObject2 disableButton = mDevice.wait( - Until.findObject(By.text("DISABLE")), TIMEOUT); - disableButton.click(); - mDevice.waitForIdle(TIMEOUT); - // Click on "Disable App" on dialog. - mDevice.wait( - Until.findObject(By.text("DISABLE APP")), TIMEOUT).click(); - mDevice.waitForIdle(TIMEOUT); - UiObject2 enableButton = mDevice.wait( - Until.findObject(By.text("ENABLE")), TIMEOUT); - assertNotNull("App not disabled successfully", enableButton); - enableButton.click(); - mDevice.waitForIdle(TIMEOUT); - disableButton = mDevice.wait( - Until.findObject(By.text("DISABLE")), TIMEOUT); - assertNotNull("App not enabled successfully", disableButton); - } - - private void launchAppsSettings() throws Exception { - Intent appsSettingsIntent = new - Intent(Settings.ACTION_MANAGE_APPLICATIONS_SETTINGS); - mActivityHelper.launchIntent(appsSettingsIntent); - } -} diff --git a/tests/uitests/src/com/android/settings/functional/BluetoothNetworkSettingsTests.java b/tests/uitests/src/com/android/settings/functional/BluetoothNetworkSettingsTests.java deleted file mode 100644 index ac008490141..00000000000 --- a/tests/uitests/src/com/android/settings/functional/BluetoothNetworkSettingsTests.java +++ /dev/null @@ -1,163 +0,0 @@ -/* - * Copyright (C) 2017 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.settings.ui; - -import android.bluetooth.BluetoothAdapter; -import android.bluetooth.BluetoothManager; -import android.content.Context; -import android.content.Intent; -import android.metrics.MetricsReader; -import android.os.RemoteException; -import android.platform.test.annotations.Presubmit; -import android.provider.Settings; -import android.support.test.metricshelper.MetricsAsserts; -import android.support.test.uiautomator.By; -import android.support.test.uiautomator.BySelector; -import android.support.test.uiautomator.UiDevice; -import android.support.test.uiautomator.UiObject2; -import android.support.test.uiautomator.Until; -import android.test.InstrumentationTestCase; -import android.test.suitebuilder.annotation.MediumTest; - -import com.android.internal.logging.nano.MetricsProto.MetricsEvent; - -public class BluetoothNetworkSettingsTests extends InstrumentationTestCase { - - private static final String SETTINGS_PACKAGE = "com.android.settings"; - private static final int TIMEOUT = 2000; - private static final int LONG_TIMEOUT = 40000; - private UiDevice mDevice; - private MetricsReader mMetricsReader; - - @Override - public void setUp() throws Exception { - super.setUp(); - mDevice = UiDevice.getInstance(getInstrumentation()); - try { - mDevice.setOrientationNatural(); - } catch (RemoteException e) { - throw new RuntimeException("failed to freeze device orientaion", e); - } - mMetricsReader = new MetricsReader(); - // Clear out old logs - mMetricsReader.checkpoint(); - } - - @Override - protected void tearDown() throws Exception { - mDevice.pressBack(); - mDevice.pressHome(); - mDevice.waitForIdle(); - super.tearDown(); - } - - @Presubmit - @MediumTest - public void testBluetoothEnabled() throws Exception { - verifyBluetoothOnOrOff(true); - MetricsAsserts.assertHasActionLog("missing bluetooth toggle log", - mMetricsReader, MetricsEvent.ACTION_BLUETOOTH_TOGGLE); - } - - @Presubmit - @MediumTest - public void testBluetoothDisabled() throws Exception { - verifyBluetoothOnOrOff(false); - MetricsAsserts.assertHasActionLog("missing bluetooth toggle log", - mMetricsReader, MetricsEvent.ACTION_BLUETOOTH_TOGGLE); - } - - @MediumTest - public void testRenameOption() throws Exception { - launchBluetoothSettings(); - verifyUiObjectClicked(By.text("Device name"), "Rename preference"); - verifyUiObjectClicked(By.text("CANCEL"), "CANCEL button"); - - MetricsAsserts.assertHasActionLog("missing bluetooth rename device log", - mMetricsReader, MetricsEvent.ACTION_BLUETOOTH_RENAME); - MetricsAsserts.assertHasVisibilityLog("missing bluetooth rename dialog log", - mMetricsReader, MetricsEvent.DIALOG_BLUETOOTH_RENAME, true); - } - - @MediumTest - public void testReceivedFilesOption() throws Exception { - launchBluetoothSettings(); - verifyUiObjectClicked(By.text("Received files"), "Received files preference"); - - MetricsAsserts.assertHasActionLog("missing bluetooth received files log", - mMetricsReader, MetricsEvent.ACTION_BLUETOOTH_FILES); - } - - @MediumTest - public void testHelpFeedbackOverflowOption() throws Exception { - launchBluetoothSettings(); - - // Verify help & feedback - assertNotNull("Help & feedback item not found under Bluetooth Settings", - mDevice.wait(Until.findObject(By.desc("Help & feedback")), TIMEOUT)); - } - - public void launchBluetoothSettings() throws Exception { - Intent btIntent = new Intent(Settings.ACTION_BLUETOOTH_SETTINGS); - btIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - getInstrumentation().getContext().startActivity(btIntent); - Thread.sleep(TIMEOUT * 2); - } - - /** - * Find the {@link UiObject2} by {@code itemSelector} and try to click it if possible. - * - * If not find, throw assertion error - * @param itemSelector used to find the {@link UiObject2} - * @param text the description of the {@link UiObject2} - */ - private void verifyUiObjectClicked(BySelector itemSelector, String text) throws Exception { - UiObject2 uiObject2 = mDevice.wait(Until.findObject(itemSelector), TIMEOUT); - assertNotNull(text + "is not present in bluetooth settings page", uiObject2); - uiObject2.click(); - } - - /** - * Toggles the Bluetooth switch and verifies that the change is reflected in Settings - * - * @param verifyOn set to whether you want the setting turned On or Off - */ - private void verifyBluetoothOnOrOff(boolean verifyOn) throws Exception { - String switchText = "ON"; - BluetoothAdapter bluetoothAdapter = ((BluetoothManager) getInstrumentation().getContext() - .getSystemService(Context.BLUETOOTH_SERVICE)).getAdapter(); - if (verifyOn) { - switchText = "OFF"; - bluetoothAdapter.disable(); - } else { - bluetoothAdapter.enable(); - } - launchBluetoothSettings(); - mDevice.wait(Until - .findObject(By.res(SETTINGS_PACKAGE, "switch_widget").text(switchText)), TIMEOUT) - .click(); - Thread.sleep(TIMEOUT); - String bluetoothValue = - Settings.Global.getString(getInstrumentation().getContext().getContentResolver(), - Settings.Global.BLUETOOTH_ON); - if (verifyOn) { - assertEquals("1", bluetoothValue); - } else { - assertEquals("0", bluetoothValue); - } - } -} diff --git a/tests/uitests/src/com/android/settings/functional/ConnectedDeviceTests.java b/tests/uitests/src/com/android/settings/functional/ConnectedDeviceTests.java deleted file mode 100644 index e8d8bab574a..00000000000 --- a/tests/uitests/src/com/android/settings/functional/ConnectedDeviceTests.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright (C) 2017 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.settings.ui; - -import android.content.Context; -import android.content.Intent; -import android.nfc.NfcAdapter; -import android.nfc.NfcManager; -import android.os.RemoteException; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.MediumTest; -import android.support.test.runner.AndroidJUnit4; -import android.support.test.uiautomator.By; -import android.support.test.uiautomator.UiDevice; -import android.support.test.uiautomator.UiObject2; -import android.support.test.uiautomator.Until; - -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; - -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -@MediumTest -@RunWith(AndroidJUnit4.class) -public class ConnectedDeviceTests { - - private static final String SETTINGS_PACKAGE = "com.android.settings"; - private static final int TIMEOUT = 2000; - private UiDevice mDevice; - - @Before - public void setUp() throws Exception { - mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()); - try { - mDevice.setOrientationNatural(); - } catch (RemoteException e) { - throw new RuntimeException("failed to freeze device orientation", e); - } - } - - @After - public void tearDown() throws Exception { - mDevice.pressBack(); - mDevice.pressHome(); - } - - // This NFC toggle test is set up this way since there's no way to set - // the NFC flag to enabled or disabled without touching UI. - // This way, we get coverage for whether or not the toggle button works. - @Test - public void testNFCToggle() throws Exception { - NfcManager manager = (NfcManager) InstrumentationRegistry.getTargetContext() - .getSystemService(Context.NFC_SERVICE); - NfcAdapter nfcAdapter = manager.getDefaultAdapter(); - boolean nfcInitiallyEnabled = nfcAdapter.isEnabled(); - InstrumentationRegistry.getContext().startActivity(new Intent() - .setClassName( - SETTINGS_PACKAGE, - "com.android.settings.Settings$ConnectedDeviceDashboardActivity")); - UiObject2 nfcSetting = mDevice.wait(Until.findObject(By.text("NFC")), TIMEOUT); - nfcSetting.click(); - Thread.sleep(TIMEOUT * 2); - if (nfcInitiallyEnabled) { - assertFalse("NFC wasn't disabled on toggle", nfcAdapter.isEnabled()); - nfcSetting.click(); - Thread.sleep(TIMEOUT * 2); - assertTrue("NFC wasn't enabled on toggle", nfcAdapter.isEnabled()); - } else { - assertTrue("NFC wasn't enabled on toggle", nfcAdapter.isEnabled()); - nfcSetting.click(); - Thread.sleep(TIMEOUT * 2); - assertFalse("NFC wasn't disabled on toggle", nfcAdapter.isEnabled()); - } - } -} diff --git a/tests/uitests/src/com/android/settings/functional/DataUsageSettingsTests.java b/tests/uitests/src/com/android/settings/functional/DataUsageSettingsTests.java deleted file mode 100644 index 860d6f6f6dd..00000000000 --- a/tests/uitests/src/com/android/settings/functional/DataUsageSettingsTests.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright (C) 2017 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.settings.ui; - -import android.os.RemoteException; -import android.provider.Settings; -import android.support.test.uiautomator.By; -import android.support.test.uiautomator.UiDevice; -import android.support.test.uiautomator.Until; -import android.system.helpers.SettingsHelper; -import android.test.InstrumentationTestCase; -import android.test.suitebuilder.annotation.MediumTest; -import android.test.suitebuilder.annotation.Suppress; - -public class DataUsageSettingsTests extends InstrumentationTestCase { - - private static final String SETTINGS_PACKAGE = "com.android.settings"; - private static final int TIMEOUT = 2000; - private UiDevice mDevice; - - @Override - public void setUp() throws Exception { - super.setUp(); - mDevice = UiDevice.getInstance(getInstrumentation()); - try { - mDevice.setOrientationNatural(); - } catch (RemoteException e) { - throw new RuntimeException("failed to freeze device orientaion", e); - } - } - - @Override - protected void tearDown() throws Exception { - // Need to finish settings activity - mDevice.pressBack(); - mDevice.pressHome(); - super.tearDown(); - } - - @MediumTest - public void testElementsOnDataUsageScreen() throws Exception { - launchDataUsageSettings(); - assertNotNull("Data usage element not found", - mDevice.wait(Until.findObject(By.text("Usage")), - TIMEOUT)); - assertNotNull("Data usage bar not found", - mDevice.wait(Until.findObject(By.res(SETTINGS_PACKAGE, - "color_bar")), TIMEOUT)); - assertNotNull("WiFi Data usage element not found", - mDevice.wait(Until.findObject(By.text("Wi-Fi data usage")), - TIMEOUT)); - assertNotNull("Network restrictions element not found", - mDevice.wait(Until.findObject(By.text("Network restrictions")), - TIMEOUT)); - } - - public void launchDataUsageSettings() throws Exception { - SettingsHelper.launchSettingsPage(getInstrumentation().getContext(), - Settings.ACTION_SETTINGS); - mDevice.wait(Until - .findObject(By.text("Network & Internet")), TIMEOUT) - .click(); - Thread.sleep(TIMEOUT * 2); - assertNotNull("Network & internet screen not loaded", mDevice.wait( - Until.findObject(By.text("Data usage")), TIMEOUT)); - mDevice.wait(Until - .findObject(By.text("Data usage")), TIMEOUT) - .click(); - } -} diff --git a/tests/uitests/src/com/android/settings/functional/DisplaySettingsTest.java b/tests/uitests/src/com/android/settings/functional/DisplaySettingsTest.java deleted file mode 100644 index 44bfbee4f1c..00000000000 --- a/tests/uitests/src/com/android/settings/functional/DisplaySettingsTest.java +++ /dev/null @@ -1,268 +0,0 @@ -/* - * Copyright (C) 2017 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.settings.ui; - -import android.content.ContentResolver; -import android.platform.test.annotations.Presubmit; -import android.provider.Settings; -import android.support.test.uiautomator.By; -import android.support.test.uiautomator.UiDevice; -import android.support.test.uiautomator.UiObject2; -import android.support.test.uiautomator.Until; -import android.system.helpers.SettingsHelper; -import android.system.helpers.SettingsHelper.SettingsType; -import android.test.InstrumentationTestCase; -import android.test.suitebuilder.annotation.MediumTest; -import android.test.suitebuilder.annotation.Suppress; - -import java.util.regex.Pattern; - -public class DisplaySettingsTest extends InstrumentationTestCase { - - private static final String PAGE = Settings.ACTION_DISPLAY_SETTINGS; - private static final int TIMEOUT = 2000; - private static final FontSetting FONT_SMALL = new FontSetting("Small", 0.85f); - private static final FontSetting FONT_NORMAL = new FontSetting("Default", 1.00f); - private static final FontSetting FONT_LARGE = new FontSetting("Large", 1.15f); - private static final FontSetting FONT_HUGE = new FontSetting("Largest", 1.30f); - - private UiDevice mDevice; - private ContentResolver mResolver; - private SettingsHelper mHelper; - - @Override - public void setUp() throws Exception { - super.setUp(); - mDevice = UiDevice.getInstance(getInstrumentation()); - mDevice.setOrientationNatural(); - mResolver = getInstrumentation().getContext().getContentResolver(); - mHelper = new SettingsHelper(); - } - - @Override - public void tearDown() throws Exception { - // reset settings we touched that may impact others - Settings.System.putFloat(mResolver, Settings.System.FONT_SCALE, 1.00f); - mDevice.waitForIdle(); - super.tearDown(); - } - - @Presubmit - @MediumTest - public void testAdaptiveBrightness() throws Exception { - SettingsHelper.launchSettingsPage(getInstrumentation().getContext(), PAGE); - mHelper.scrollVert(true); - Thread.sleep(1000); - - assertTrue(mHelper.verifyToggleSetting(SettingsType.SYSTEM, PAGE, "Adaptive brightness", - Settings.System.SCREEN_BRIGHTNESS_MODE)); - assertTrue(mHelper.verifyToggleSetting(SettingsType.SYSTEM, PAGE, "Adaptive brightness", - Settings.System.SCREEN_BRIGHTNESS_MODE)); - } - - - // blocked on b/27487224 - @MediumTest - @Suppress - public void testDaydreamToggle() throws Exception { - SettingsHelper.launchSettingsPage(getInstrumentation().getContext(), PAGE); - clickMore(); - Pattern p = Pattern.compile("On|Off"); - mHelper.clickSetting("Screen saver"); - Thread.sleep(1000); - try { - assertTrue(mHelper.verifyToggleSetting(SettingsType.SECURE, PAGE, p, - Settings.Secure.SCREENSAVER_ENABLED, false)); - assertTrue(mHelper.verifyToggleSetting(SettingsType.SECURE, PAGE, p, - Settings.Secure.SCREENSAVER_ENABLED, false)); - } finally { - mDevice.pressBack(); - } - } - - @MediumTest - public void testAccelRotation() throws Exception { - SettingsHelper.launchSettingsPage(getInstrumentation().getContext(), PAGE); - mHelper.scrollVert(true); - clickMore(); - Thread.sleep(4000); - int currentAccelSetting = Settings.System.getInt( - mResolver, Settings.System.ACCELEROMETER_ROTATION); - mHelper.clickSetting("Auto-rotate screen"); - int newAccelSetting = Settings.System.getInt( - mResolver, Settings.System.ACCELEROMETER_ROTATION); - assertTrue("Accelorometer setting unchanged after toggle", currentAccelSetting != newAccelSetting); - mHelper.clickSetting("Auto-rotate screen"); - int revertedAccelSetting = Settings.System.getInt( - mResolver, Settings.System.ACCELEROMETER_ROTATION); - assertTrue("Accelorometer setting unchanged after toggle", revertedAccelSetting != newAccelSetting); - } - - @MediumTest - public void testDaydream() throws Exception { - Settings.Secure.putInt(mResolver, Settings.Secure.SCREENSAVER_ENABLED, 1); - SettingsHelper.launchSettingsPage(getInstrumentation().getContext(), PAGE); - clickMore(); - mHelper.scrollVert(false); - mDevice.wait(Until.findObject(By.text("Screen saver")), TIMEOUT).click(); - try { - assertTrue(mHelper.verifyRadioSetting(SettingsType.SECURE, PAGE, - "Current screen saver", "Clock", Settings.Secure.SCREENSAVER_COMPONENTS, - "com.google.android.deskclock/com.android.deskclock.Screensaver")); - assertTrue(mHelper.verifyRadioSetting(SettingsType.SECURE, PAGE, - "Current screen saver", "Colors", Settings.Secure.SCREENSAVER_COMPONENTS, - "com.android.dreams.basic/com.android.dreams.basic.Colors")); - assertTrue(mHelper.verifyRadioSetting(SettingsType.SECURE, PAGE, - "Current screen saver", "Photos", Settings.Secure.SCREENSAVER_COMPONENTS, - "com.google.android.apps.photos/com.google.android.apps.photos.daydream" - + ".PhotosDreamService")); - } finally { - mDevice.pressBack(); - Thread.sleep(2000); - } - } - - @Presubmit - @MediumTest - public void testSleep15Seconds() throws Exception { - SettingsHelper.launchSettingsPage(getInstrumentation().getContext(), PAGE); - mHelper.scrollVert(true); - assertTrue(mHelper.verifyRadioSetting(SettingsType.SYSTEM, PAGE, - "Sleep", "15 seconds", Settings.System.SCREEN_OFF_TIMEOUT, "15000")); - } - - @MediumTest - public void testSleep30Seconds() throws Exception { - SettingsHelper.launchSettingsPage(getInstrumentation().getContext(), PAGE); - mHelper.scrollVert(true); - assertTrue(mHelper.verifyRadioSetting(SettingsType.SYSTEM, PAGE, - "Sleep", "30 seconds", Settings.System.SCREEN_OFF_TIMEOUT, "30000")); - } - - @MediumTest - public void testSleep1Minute() throws Exception { - SettingsHelper.launchSettingsPage(getInstrumentation().getContext(), PAGE); - mHelper.scrollVert(true); - assertTrue(mHelper.verifyRadioSetting(SettingsType.SYSTEM, PAGE, - "Sleep", "1 minute", Settings.System.SCREEN_OFF_TIMEOUT, "60000")); - } - - @MediumTest - public void testSleep2Minutes() throws Exception { - SettingsHelper.launchSettingsPage(getInstrumentation().getContext(), PAGE); - mHelper.scrollVert(true); - assertTrue(mHelper.verifyRadioSetting(SettingsType.SYSTEM, PAGE, - "Sleep", "2 minutes", Settings.System.SCREEN_OFF_TIMEOUT, "120000")); - } - - @MediumTest - public void testSleep5Minutes() throws Exception { - SettingsHelper.launchSettingsPage(getInstrumentation().getContext(), PAGE); - mHelper.scrollVert(true); - assertTrue(mHelper.verifyRadioSetting(SettingsType.SYSTEM, PAGE, - "Sleep", "5 minutes", Settings.System.SCREEN_OFF_TIMEOUT, "300000")); - } - - @MediumTest - public void testSleep10Minutes() throws Exception { - SettingsHelper.launchSettingsPage(getInstrumentation().getContext(), PAGE); - mHelper.scrollVert(true); - assertTrue(mHelper.verifyRadioSetting(SettingsType.SYSTEM, PAGE, - "Sleep", "10 minutes", Settings.System.SCREEN_OFF_TIMEOUT, "600000")); - } - - @MediumTest - public void testSleep30Minutes() throws Exception { - SettingsHelper.launchSettingsPage(getInstrumentation().getContext(), PAGE); - mHelper.scrollVert(true); - assertTrue(mHelper.verifyRadioSetting(SettingsType.SYSTEM, PAGE, - "Sleep", "30 minutes", Settings.System.SCREEN_OFF_TIMEOUT, "1800000")); - } - - @Presubmit - @MediumTest - public void testFontSizeLarge() throws Exception { - verifyFontSizeSetting(1.00f, FONT_LARGE); - // Leaving the font size at large can make later tests fail, so reset it - Settings.System.putFloat(mResolver, Settings.System.FONT_SCALE, 1.00f); - // It takes a second for the new font size to be picked up - Thread.sleep(2000); - } - - @MediumTest - public void testFontSizeDefault() throws Exception { - verifyFontSizeSetting(1.15f, FONT_NORMAL); - } - - @MediumTest - public void testFontSizeLargest() throws Exception { - verifyFontSizeSetting(1.00f, FONT_HUGE); - // Leaving the font size at huge can make later tests fail, so reset it - Settings.System.putFloat(mResolver, Settings.System.FONT_SCALE, 1.00f); - // It takes a second for the new font size to be picked up - Thread.sleep(2000); - } - - @MediumTest - public void testFontSizeSmall() throws Exception { - verifyFontSizeSetting(1.00f, FONT_SMALL); - } - - private void verifyFontSizeSetting(float resetValue, FontSetting setting) - throws Exception { - Settings.System.putFloat(mResolver, Settings.System.FONT_SCALE, resetValue); - SettingsHelper.launchSettingsPage(getInstrumentation().getContext(), PAGE); - clickMore(); - mHelper.clickSetting("Font size"); - try { - mDevice.wait(Until.findObject(By.desc(setting.getName())), TIMEOUT).click(); - Thread.sleep(1000); - float changedValue = Settings.System.getFloat( - mResolver, Settings.System.FONT_SCALE); - assertEquals(setting.getSize(), changedValue, 0.0001); - } finally { - // Make sure to back out of the font menu - mDevice.pressBack(); - } - } - - private void clickMore() throws InterruptedException { - UiObject2 more = mDevice.wait(Until.findObject(By.text("Advanced")), TIMEOUT); - if (more != null) { - more.click(); - Thread.sleep(TIMEOUT); - } - } - - private static class FontSetting { - private final String mSizeName; - private final float mSizeVal; - - public FontSetting(String sizeName, float sizeVal) { - mSizeName = sizeName; - mSizeVal = sizeVal; - } - - public String getName() { - return mSizeName; - } - - public float getSize() { - return mSizeVal; - } - } -} diff --git a/tests/uitests/src/com/android/settings/functional/HomepageDisplayTests.java b/tests/uitests/src/com/android/settings/functional/HomepageDisplayTests.java deleted file mode 100644 index 6f4ec88c922..00000000000 --- a/tests/uitests/src/com/android/settings/functional/HomepageDisplayTests.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright (C) 2017 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.settings.ui; - -import android.os.RemoteException; -import android.platform.test.annotations.Presubmit; -import android.provider.Settings; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.MediumTest; -import android.support.test.runner.AndroidJUnit4; -import android.support.test.uiautomator.By; -import android.support.test.uiautomator.Direction; -import android.support.test.uiautomator.UiDevice; -import android.support.test.uiautomator.UiObject2; -import android.support.test.uiautomator.Until; -import android.system.helpers.SettingsHelper; - -import com.android.settings.functional.testutils.SettingsTestUtils; - -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; - -import static com.android.settings.functional.testutils.SettingsTestUtils.SETTINGS_PACKAGE; -import static com.android.settings.functional.testutils.SettingsTestUtils.TIMEOUT; - -@MediumTest -@RunWith(AndroidJUnit4.class) -public class HomepageDisplayTests { - - private static final String[] HOMEPAGE_ITEMS = { - "Network & internet", - "Connected devices", - "Apps & notifications", - "Battery", - "Display", - "Sound", - "Storage", - "Security & location", - "Users & accounts", - "Accessibility", - "System", - "Support & tips" - }; - - private UiDevice mDevice; - private SettingsHelper mSettingsHelper; - - @Before - public void setUp() throws Exception { - mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()); - mSettingsHelper = new SettingsHelper(); - try { - mDevice.setOrientationNatural(); - } catch (RemoteException e) { - throw new RuntimeException("failed to freeze device orientaion", e); - } - } - - @After - public void tearDown() throws Exception { - // Need to finish settings activity - mDevice.pressHome(); - } - - @Presubmit - @Test - public void testHomepageCategory() throws Exception { - // Launch Settings - SettingsHelper.launchSettingsPage( - InstrumentationRegistry.getContext(), Settings.ACTION_SETTINGS); - - // Scroll to top - final UiObject2 view = mDevice.wait( - Until.findObject(By.res(SETTINGS_PACKAGE, "main_content")), - TIMEOUT); - view.scroll(Direction.UP, 100f); - - // Inspect each item - for (String item : HOMEPAGE_ITEMS) { - SettingsTestUtils.assertTitleMatch(mDevice, item); - } - } -} diff --git a/tests/uitests/src/com/android/settings/functional/LocationSettingsTests.java b/tests/uitests/src/com/android/settings/functional/LocationSettingsTests.java deleted file mode 100644 index d417eb1c357..00000000000 --- a/tests/uitests/src/com/android/settings/functional/LocationSettingsTests.java +++ /dev/null @@ -1,243 +0,0 @@ -/* - * Copyright (C) 2017 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.settings.ui; - -import android.os.RemoteException; -import android.platform.test.annotations.Presubmit; -import android.provider.Settings; -import android.support.test.uiautomator.By; -import android.support.test.uiautomator.Direction; -import android.support.test.uiautomator.UiDevice; -import android.support.test.uiautomator.UiObject2; -import android.support.test.uiautomator.Until; -import android.system.helpers.SettingsHelper; -import android.test.InstrumentationTestCase; -import android.test.suitebuilder.annotation.MediumTest; - - -public class LocationSettingsTests extends InstrumentationTestCase { - - private static final String SETTINGS_PACKAGE = "com.android.settings"; - private static final int TIMEOUT = 2000; - private UiDevice mDevice; - - @Override - public void setUp() throws Exception { - super.setUp(); - mDevice = UiDevice.getInstance(getInstrumentation()); - try { - mDevice.setOrientationNatural(); - } catch (RemoteException e) { - throw new RuntimeException("failed to freeze device orientaion", e); - } - } - - @Override - protected void tearDown() throws Exception { - mDevice.pressBack(); - mDevice.pressHome(); - super.tearDown(); - } - - @MediumTest - public void testLoadingLocationSettings () throws Exception { - // Load Security - SettingsHelper.launchSettingsPage(getInstrumentation().getContext(), - Settings.ACTION_SECURITY_SETTINGS); - - SettingsHelper helper = new SettingsHelper(); - helper.scrollVert(true); - // Tap on location - UiObject2 settingsPanel = mDevice.wait(Until.findObject - (By.res(SETTINGS_PACKAGE, "main_content")), TIMEOUT); - int count = 0; - UiObject2 locationTitle = null; - while(count < 6 && locationTitle == null) { - locationTitle = mDevice.wait(Until.findObject(By.text("Location")), TIMEOUT); - if (locationTitle == null) { - settingsPanel.scroll(Direction.DOWN, 1.0f); - } - count++; - } - // Verify location settings loads. - locationTitle.click(); - Thread.sleep(TIMEOUT); - assertNotNull("Location screen has not loaded correctly", - mDevice.wait(Until.findObject(By.text("Location services")), TIMEOUT)); - } - - @Presubmit - @MediumTest - public void testLocationSettingOn() throws Exception { - verifyLocationSettingsOnOrOff(true); - } - - @MediumTest - public void testLocationSettingOff() throws Exception { - verifyLocationSettingsOnOrOff(false); - } - - @MediumTest - public void testLocationDeviceOnlyMode() throws Exception { - // Changing the value from default before testing the toggle to Device only mode - Settings.Secure.putInt(getInstrumentation().getContext().getContentResolver(), - Settings.Secure.LOCATION_MODE, Settings.Secure.LOCATION_MODE_HIGH_ACCURACY); - dismissAlertDialogs(); - Thread.sleep(TIMEOUT); - verifyLocationSettingsMode(Settings.Secure.LOCATION_MODE_SENSORS_ONLY); - } - - @MediumTest - public void testLocationBatterySavingMode() throws Exception { - Settings.Secure.putInt(getInstrumentation().getContext().getContentResolver(), - Settings.Secure.LOCATION_MODE, Settings.Secure.LOCATION_MODE_SENSORS_ONLY); - Thread.sleep(TIMEOUT); - verifyLocationSettingsMode(Settings.Secure.LOCATION_MODE_BATTERY_SAVING); - } - - @MediumTest - public void testLocationHighAccuracyMode() throws Exception { - Settings.Secure.putInt(getInstrumentation().getContext().getContentResolver(), - Settings.Secure.LOCATION_MODE, Settings.Secure.LOCATION_MODE_SENSORS_ONLY); - Thread.sleep(TIMEOUT); - verifyLocationSettingsMode(Settings.Secure.LOCATION_MODE_HIGH_ACCURACY); - } - - @MediumTest - public void testLocationSettingsElements() throws Exception { - String[] textElements = {"Location", "Mode", "Recent location requests", - "Location services"}; - SettingsHelper.launchSettingsPage(getInstrumentation().getContext(), - Settings.ACTION_LOCATION_SOURCE_SETTINGS); - Thread.sleep(TIMEOUT); - for (String element : textElements) { - assertNotNull(element + " item not found under Location Settings", - mDevice.wait(Until.findObject(By.text(element)), TIMEOUT)); - } - } - - @MediumTest - public void testLocationSettingsOverflowMenuElements() throws Exception { - SettingsHelper.launchSettingsPage(getInstrumentation().getContext(), - Settings.ACTION_LOCATION_SOURCE_SETTINGS); - // Verify help & feedback - assertNotNull("Help & feedback item not found under Location Settings", - mDevice.wait(Until.findObject(By.desc("Help & feedback")), TIMEOUT)); - // Verify scanning - assertNotNull("Scanning item not found under Location Settings", - mDevice.wait(Until.findObject(By.text("Scanning")), TIMEOUT)); - } - - private void verifyLocationSettingsMode(int mode) throws Exception { - int modeIntValue = 1; - String textMode = "Device only"; - if (mode == Settings.Secure.LOCATION_MODE_HIGH_ACCURACY) { - modeIntValue = 3; - textMode = "High accuracy"; - } - else if (mode == Settings.Secure.LOCATION_MODE_BATTERY_SAVING) { - modeIntValue = 2; - textMode = "Battery saving"; - } - // Load location settings - SettingsHelper.launchSettingsPage(getInstrumentation().getContext(), - Settings.ACTION_LOCATION_SOURCE_SETTINGS); - // Tap on mode - dismissAlertDialogs(); - // Load location settings - mDevice.wait(Until.findObject(By.text("Mode")), TIMEOUT).click(); - Thread.sleep(TIMEOUT); - assertNotNull("Location mode screen not loaded", mDevice.wait(Until.findObject - (By.text("Location mode")), TIMEOUT)); - // Choose said mode - mDevice.wait(Until.findObject(By.text(textMode)), TIMEOUT).click(); - Thread.sleep(TIMEOUT); - dismissAlertDialogs(); - mDevice.wait(Until.findObject(By.desc("Navigate up")), TIMEOUT).click(); - Thread.sleep(TIMEOUT); - if (mode == Settings.Secure.LOCATION_MODE_HIGH_ACCURACY || - mode == Settings.Secure.LOCATION_MODE_BATTERY_SAVING) { - dismissAlertDialogs(); - } - // get setting and verify value - // Verify change of mode - int locationSettingMode = - Settings.Secure.getInt(getInstrumentation().getContext().getContentResolver(), - Settings.Secure.LOCATION_MODE); - assertEquals(mode + " value not set correctly for location.", modeIntValue, - locationSettingMode); - } - - private void verifyLocationSettingsOnOrOff(boolean verifyOn) throws Exception { - // Set location flag - if (verifyOn) { - Settings.Secure.putInt(getInstrumentation().getContext().getContentResolver(), - Settings.Secure.LOCATION_MODE, Settings.Secure.LOCATION_MODE_OFF); - } - else { - Settings.Secure.putInt(getInstrumentation().getContext().getContentResolver(), - Settings.Secure.LOCATION_MODE, Settings.Secure.LOCATION_MODE_HIGH_ACCURACY); - } - dismissAlertDialogs(); - // Load location settings - SettingsHelper.launchSettingsPage(getInstrumentation().getContext(), - Settings.ACTION_LOCATION_SOURCE_SETTINGS); - dismissAlertDialogs(); - // Toggle UI - mDevice.wait(Until.findObject(By.res(SETTINGS_PACKAGE, "switch_widget")), TIMEOUT).click(); - dismissAlertDialogs(); - Thread.sleep(TIMEOUT); - // Verify change in setting - int locationEnabled = Settings.Secure.getInt(getInstrumentation() - .getContext().getContentResolver(), - Settings.Secure.LOCATION_MODE); - if (verifyOn) { - assertFalse("Location not enabled correctly", locationEnabled == 0); - } - else { - assertEquals("Location not disabled correctly", 0, locationEnabled); - } - } - - // This method dismisses both alert dialogs that might popup and - // interfere with the test. Since the order in which the dialog - // shows up changes in no specific known way, we're checking for - // both dialogs in any order for a robust test. Bug b/36233151 - // filed against Location team for specifications. This is a - // workaround in the meantime to ensure coverage. - private void dismissAlertDialogs() throws Exception { - for (int count = 0; count < 2; count++) { - UiObject2 agreeDialog = mDevice.wait(Until.findObject - (By.text("Improve location accuracy?")), TIMEOUT); - UiObject2 previousChoiceYesButton = mDevice.wait(Until.findObject - (By.text("YES")), TIMEOUT); - if (agreeDialog != null) { - mDevice.wait(Until.findObject - (By.text("AGREE")), TIMEOUT).click(); - Thread.sleep(TIMEOUT); - assertNull("Improve location dialog not dismissed", - mDevice.wait(Until.findObject - (By.text("Improve location accuracy?")), TIMEOUT)); - } - if (previousChoiceYesButton != null) { - previousChoiceYesButton.click(); - // Short sleep to wait for the new screen - Thread.sleep(TIMEOUT); - } - } - } -} diff --git a/tests/uitests/src/com/android/settings/functional/MoreWirelessSettingsTests.java b/tests/uitests/src/com/android/settings/functional/MoreWirelessSettingsTests.java deleted file mode 100644 index 3349d2c3474..00000000000 --- a/tests/uitests/src/com/android/settings/functional/MoreWirelessSettingsTests.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Copyright (C) 2017 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.settings.ui; - -import android.os.RemoteException; -import android.platform.test.annotations.Presubmit; -import android.provider.Settings; -import android.support.test.uiautomator.By; -import android.support.test.uiautomator.UiDevice; -import android.support.test.uiautomator.UiObject2; -import android.support.test.uiautomator.Until; -import android.system.helpers.SettingsHelper; -import android.test.InstrumentationTestCase; -import android.test.suitebuilder.annotation.MediumTest; - - -public class MoreWirelessSettingsTests extends InstrumentationTestCase { - - private static final String SETTINGS_PACKAGE = "com.android.settings"; - private static final int TIMEOUT = 2000; - private UiDevice mDevice; - - @Override - public void setUp() throws Exception { - super.setUp(); - mDevice = UiDevice.getInstance(getInstrumentation()); - try { - mDevice.setOrientationNatural(); - } catch (RemoteException e) { - throw new RuntimeException("failed to freeze device orientaion", e); - } - } - - @Override - protected void tearDown() throws Exception { - mDevice.pressBack(); - mDevice.pressHome(); - super.tearDown(); - } - - @Presubmit - @MediumTest - public void testAirplaneModeEnabled() throws Exception { - verifyAirplaneModeOnOrOff(true); - // Toggling this via the wifi network settings page - // because of bug b/34858716. Once that is fixed, - // we should be able to set this via Settings putString. - toggleAirplaneModeSwitch(); - } - - @Presubmit - @MediumTest - public void testAirplaneModeDisabled() throws Exception { - verifyAirplaneModeOnOrOff(false); - } - - @MediumTest - public void testTetheringMenuLoad() throws Exception { - SettingsHelper.launchSettingsPage(getInstrumentation().getContext(), - Settings.ACTION_WIRELESS_SETTINGS); - mDevice.wait(Until - .findObject(By.text("Hotspot & tethering")), TIMEOUT) - .click(); - Thread.sleep(TIMEOUT); - UiObject2 usbTethering = mDevice.wait(Until - .findObject(By.text("USB tethering")), TIMEOUT); - assertNotNull("Tethering screen did not load correctly", usbTethering); - } - - @MediumTest - public void testVPNMenuLoad() throws Exception { - SettingsHelper.launchSettingsPage(getInstrumentation().getContext(), - Settings.ACTION_WIRELESS_SETTINGS); - mDevice.wait(Until - .findObject(By.text("VPN")), TIMEOUT) - .click(); - Thread.sleep(TIMEOUT); - UiObject2 usbTethering = mDevice.wait(Until - .findObject(By.res(SETTINGS_PACKAGE, "vpn_create")), TIMEOUT); - assertNotNull("VPN screen did not load correctly", usbTethering); - } - - private void verifyAirplaneModeOnOrOff(boolean verifyOn) throws Exception { - if (verifyOn) { - Settings.Global.putString(getInstrumentation().getContext().getContentResolver(), - Settings.Global.AIRPLANE_MODE_ON, "0"); - } - else { - Settings.Global.putString(getInstrumentation().getContext().getContentResolver(), - Settings.Global.AIRPLANE_MODE_ON, "1"); - } - toggleAirplaneModeSwitch(); - String airplaneModeValue = Settings.Global - .getString(getInstrumentation().getContext().getContentResolver(), - Settings.Global.AIRPLANE_MODE_ON); - if (verifyOn) { - assertEquals("1", airplaneModeValue); - } - else { - assertEquals("0", airplaneModeValue); - } - } - - private void toggleAirplaneModeSwitch() throws Exception { - SettingsHelper.launchSettingsPage(getInstrumentation().getContext(), - Settings.ACTION_WIRELESS_SETTINGS); - mDevice.wait(Until - .findObject(By.text("Airplane mode")), TIMEOUT) - .click(); - Thread.sleep(TIMEOUT); - } -} diff --git a/tests/uitests/src/com/android/settings/functional/NotificationSettingsTests.java b/tests/uitests/src/com/android/settings/functional/NotificationSettingsTests.java deleted file mode 100644 index 9ef55ce387a..00000000000 --- a/tests/uitests/src/com/android/settings/functional/NotificationSettingsTests.java +++ /dev/null @@ -1,158 +0,0 @@ -/* - * Copyright (C) 2017 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.settings.ui; - -import android.content.Intent; -import android.os.RemoteException; -import android.provider.Settings; -import android.support.test.uiautomator.By; -import android.support.test.uiautomator.BySelector; -import android.support.test.uiautomator.Direction; -import android.support.test.uiautomator.UiDevice; -import android.support.test.uiautomator.UiObject2; -import android.support.test.uiautomator.Until; -import android.system.helpers.ActivityHelper; -import android.system.helpers.SettingsHelper; -import android.widget.ListView; -import android.test.InstrumentationTestCase; -import android.test.suitebuilder.annotation.MediumTest; -import android.util.Log; - -/** Verifies that you can get to the notification app listing page from the apps & notifications - * page */ -public class NotificationSettingsTests extends InstrumentationTestCase { - private static final boolean LOCAL_LOGV = false; - private static final String TAG = "NotifiSettingsTests"; - private static final int TIMEOUT = 2000; - private ActivityHelper mActivityHelper = null; - private SettingsHelper mSettingsHelper = null; - - private UiDevice mDevice; - @Override - public void setUp() throws Exception { - if (LOCAL_LOGV) { - Log.d(TAG, "-------"); - } - super.setUp(); - mDevice = UiDevice.getInstance(getInstrumentation()); - mActivityHelper = ActivityHelper.getInstance(); - mSettingsHelper = SettingsHelper.getInstance(); - try { - mDevice.setOrientationNatural(); - } catch (RemoteException e) { - throw new RuntimeException("Failed to freeze device orientaion", e); - } - - // make sure we are in a clean state before starting the test - mDevice.pressHome(); - Thread.sleep(TIMEOUT * 2); - launchAppsSettings(); - } - - @Override - protected void tearDown() throws Exception { - mDevice.pressBack(); - mDevice.pressHome(); // finish settings activity - mDevice.waitForIdle(TIMEOUT * 2); // give UI time to finish animating - super.tearDown(); - } - - @MediumTest - public void testNotificationsSettingsListForCalculator() { - UiObject2 configureNotifications = mDevice.wait( - Until.findObject(By.text("Notifications")), TIMEOUT); - configureNotifications.click(); - mDevice.wait(Until.findObject(By.text("Blink light")), TIMEOUT); - UiObject2 appNotifications = mDevice.wait( - Until.findObject(By.text("On for all apps")), TIMEOUT); - appNotifications.click(); - UiObject2 view = - mDevice.wait( - Until.findObject(By.text("All apps")), TIMEOUT); - assertNotNull("Could not find Settings > Apps screen", view); - UiObject2 app = mDevice.wait(Until.findObject(By.text("Calculator")), TIMEOUT); - assertNotNull("Could not find Calculator notification settings", app); - } - - - @MediumTest - public void testNotificationsSettingsListForPhone() { - UiObject2 configureNotifications = mDevice.wait( - Until.findObject(By.text("Notifications")), TIMEOUT); - configureNotifications.click(); - mDevice.wait(Until.findObject(By.text("Blink light")), TIMEOUT); - UiObject2 appNotifications = mDevice.wait( - Until.findObject(By.text("On for all apps")), TIMEOUT); - appNotifications.click(); - UiObject2 view = - mDevice.wait( - Until.findObject(By.text("All apps")), TIMEOUT); - assertNotNull("Could not find Settings > Apps screen", view); - - final BySelector preferenceListSelector = By.clazz(ListView.class).res("android:id/list"); - UiObject2 apps = mDevice.wait(Until.findObject(preferenceListSelector), TIMEOUT); - - UiObject2 phone = scrollTo(mDevice, apps, By.text("Phone"), Direction.DOWN); - assertNotNull("Could not find Phone notification settings", phone); - phone.click(); - UiObject2 incomingCalls = mDevice.wait(Until.findObject(By.text("Incoming calls")), TIMEOUT); - assertNotNull("Could not find incoming calls channel", incomingCalls); - incomingCalls.click(); - - // here's the meat of this test: make sure that you cannot change - // most settings for this channel - - UiObject2 importance = mDevice.wait(Until.findObject(By.text("Importance")), TIMEOUT); - assertNotNull("Could not find importance toggle", importance); - assertFalse(importance.isEnabled()); - assertFalse(mDevice.wait(Until.findObject(By.text("Sound")), TIMEOUT).isEnabled());; - assertFalse(mDevice.wait(Until.findObject(By.text("Vibrate")), TIMEOUT).isEnabled()); - assertFalse(mDevice.wait(Until.findObject(By.text("Override Do Not Disturb")), TIMEOUT).isEnabled()); - - - - - - - } - - private UiObject2 scrollTo(UiDevice device, UiObject2 scrollable, - BySelector target, Direction direction) { - while (!device.hasObject(target) && scrollable.scroll(direction, 1.0f)) { - // continue - } - if (!device.hasObject(target)) { - // Scroll once more if not found; in some cases UiObject2.scroll can return false when - // the last item is not fully visible yet for list views. - scrollable.scroll(direction, 1.0f); - } - return device.findObject(target); - } - - - private void launchAppsSettings() throws Exception { - Intent appsSettingsIntent = new Intent(Settings.ACTION_SETTINGS); - mActivityHelper.launchIntent(appsSettingsIntent); - mSettingsHelper.flingSettingsToStart(); - UiObject2 view = mDevice.wait( - Until.findObject(By.text("Apps & notifications")), TIMEOUT); - view.click(); - UiObject2 title = mDevice.wait( - Until.findObject(By.text("Apps & notifications")), TIMEOUT); - assertNotNull("Could not find Settings > Apps & notifications screen", title); - } -} diff --git a/tests/uitests/src/com/android/settings/functional/SecuritySettingsLaunchTest.java b/tests/uitests/src/com/android/settings/functional/SecuritySettingsLaunchTest.java deleted file mode 100644 index fa3bd022e39..00000000000 --- a/tests/uitests/src/com/android/settings/functional/SecuritySettingsLaunchTest.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright (C) 2017 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.settings.ui; - -import android.os.RemoteException; -import android.provider.Settings; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.MediumTest; -import android.support.test.runner.AndroidJUnit4; -import android.support.test.uiautomator.UiDevice; -import android.system.helpers.SettingsHelper; - -import com.android.settings.functional.testutils.SettingsTestUtils; - -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; - -@MediumTest -@RunWith(AndroidJUnit4.class) -public class SecuritySettingsLaunchTest { - - // Items we really want to always show - private static final String[] CATEGORIES = new String[]{ - "Security status", - "Device security", - "Privacy", - }; - - private UiDevice mDevice; - private SettingsHelper mHelper; - - @Before - public void setUp() throws Exception { - mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()); - mHelper = SettingsHelper.getInstance(); - try { - mDevice.setOrientationNatural(); - } catch (RemoteException e) { - throw new RuntimeException("failed to freeze device orientaion", e); - } - } - - @After - public void tearDown() throws Exception { - // Go back to home for next test. - mDevice.pressHome(); - } - - @Test - public void launchSecuritySettings() throws Exception { - // Launch Settings - SettingsHelper.launchSettingsPage( - InstrumentationRegistry.getContext(), Settings.ACTION_SECURITY_SETTINGS); - mHelper.scrollVert(false); - for (String category : CATEGORIES) { - SettingsTestUtils.assertTitleMatch(mDevice, category); - } - } -} diff --git a/tests/uitests/src/com/android/settings/functional/SoundSettingsTest.java b/tests/uitests/src/com/android/settings/functional/SoundSettingsTest.java deleted file mode 100644 index 681ecb1ef7a..00000000000 --- a/tests/uitests/src/com/android/settings/functional/SoundSettingsTest.java +++ /dev/null @@ -1,334 +0,0 @@ -/* - * Copyright (C) 2017 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.settings.ui; - -import android.app.NotificationManager; -import android.content.ContentResolver; -import android.content.Context; -import android.os.Handler; -import android.os.SystemClock; -import android.provider.Settings; -import android.service.notification.ZenModeConfig; -import android.support.test.uiautomator.UiObject2; -import android.system.helpers.SettingsHelper; -import android.system.helpers.SettingsHelper.SettingsType; -import android.support.test.uiautomator.By; -import android.support.test.uiautomator.UiDevice; -import android.support.test.uiautomator.Until; -import android.test.InstrumentationTestCase; -import android.test.suitebuilder.annotation.MediumTest; -import android.test.suitebuilder.annotation.Suppress; - -import java.util.HashMap; - -public class SoundSettingsTest extends InstrumentationTestCase { - private static final String PAGE = Settings.ACTION_SOUND_SETTINGS; - private static final int TIMEOUT = 2000; - - private UiDevice mDevice; - private ContentResolver mResolver; - private SettingsHelper mHelper; - - - private HashMap ringtoneSounds = new HashMap() {{ - put("angler","Dione"); - put("bullhead","Dione"); - put("marlin","Spaceship"); - put("sailfish","Spaceship"); - put("walleye","Copycat"); - put("taimen","Copycat"); - }}; - - private HashMap ringtoneCodes = new HashMap() {{ - put("angler","38"); - put("bullhead","38"); - put("marlin","37"); - put("sailfish","37"); - put("walleye","26"); - put("taimen","26"); - }}; - - private HashMap alarmSounds = new HashMap() {{ - put("angler","Awaken"); - put("bullhead","Awaken"); - put("marlin","Bounce"); - put("sailfish","Bounce"); - put("walleye","Cuckoo clock"); - put("taimen","Cuckoo clock"); - }}; - - private HashMap alarmCodes = new HashMap() {{ - put("angler","6"); - put("bullhead","6"); - put("marlin","49"); - put("sailfish","49"); - put("walleye","15"); - put("taimen","15"); - }}; - - private HashMap notificationSounds = new HashMap() {{ - put("angler","Ceres"); - put("bullhead","Ceres"); - put("marlin","Trill"); - put("sailfish","Trill"); - put("walleye","Pipes"); - put("taimen","Pipes"); - }}; - - - private HashMap notificationCodes = new HashMap() {{ - put("angler","26"); - put("bullhead","26"); - put("marlin","57"); - put("sailfish","57"); - put("walleye","69"); - put("taimen","69"); - }}; - - @Override - public void setUp() throws Exception { - super.setUp(); - mDevice = UiDevice.getInstance(getInstrumentation()); - mDevice.setOrientationNatural(); - mResolver = getInstrumentation().getContext().getContentResolver(); - mHelper = new SettingsHelper(); - } - - @Override - public void tearDown() throws Exception { - mDevice.pressBack(); - mDevice.pressHome(); - mDevice.waitForIdle(); - mDevice.unfreezeRotation(); - super.tearDown(); - } - - @MediumTest - public void testCallVibrate() throws Exception { - assertTrue(mHelper.verifyToggleSetting(SettingsType.SYSTEM, PAGE, - "Also vibrate for calls", Settings.System.VIBRATE_WHEN_RINGING)); - assertTrue(mHelper.verifyToggleSetting(SettingsType.SYSTEM, PAGE, - "Also vibrate for calls", Settings.System.VIBRATE_WHEN_RINGING)); - } - - @MediumTest - public void testOtherSoundsDialPadTones() throws Exception { - loadOtherSoundsPage(); - assertTrue("Dial pad tones not toggled", mHelper.verifyToggleSetting( - SettingsType.SYSTEM, PAGE, "Dial pad tones", - Settings.System.DTMF_TONE_WHEN_DIALING)); - } - - @MediumTest - public void testOtherSoundsScreenLocking() throws Exception { - loadOtherSoundsPage(); - assertTrue("Screen locking sounds not toggled", - mHelper.verifyToggleSetting(SettingsType.SYSTEM, PAGE, - "Screen locking sounds", Settings.System.LOCKSCREEN_SOUNDS_ENABLED)); - } - - @MediumTest - public void testOtherSoundsCharging() throws Exception { - loadOtherSoundsPage(); - assertTrue("Charging sounds not toggled", - mHelper.verifyToggleSetting(SettingsType.GLOBAL, PAGE, - "Charging sounds", Settings.Global.CHARGING_SOUNDS_ENABLED)); - } - - @MediumTest - public void testOtherSoundsTouch() throws Exception { - loadOtherSoundsPage(); - assertTrue("Touch sounds not toggled", - mHelper.verifyToggleSetting(SettingsType.SYSTEM, PAGE, - "Touch sounds", Settings.System.SOUND_EFFECTS_ENABLED)); - } - - @MediumTest - public void testOtherSoundsVibrateOnTap() throws Exception { - loadOtherSoundsPage(); - assertTrue("Vibrate on tap not toggled", - mHelper.verifyToggleSetting(SettingsType.SYSTEM, PAGE, - "Vibrate on tap", Settings.System.HAPTIC_FEEDBACK_ENABLED)); - } - - private void loadOtherSoundsPage() throws Exception { - launchSoundSettings(); - mHelper.scrollVert(false); - Thread.sleep(1000); - } - - private void launchSoundSettings() throws Exception { - SettingsHelper.launchSettingsPage(getInstrumentation().getContext(), PAGE); - mHelper.scrollVert(false); - clickMore(); - Thread.sleep(1000); - mHelper.scrollVert(true); - Thread.sleep(1000); - } - - /* - * Rather than verifying every ringtone, verify the ones least likely to change - * (None and Hangouts) and an arbitrary one from the ringtone pool. - */ - @MediumTest - public void testPhoneRingtoneNone() throws Exception { - launchSoundSettings(); - mHelper.clickSetting("Phone ringtone"); - verifyRingtone(new RingtoneSetting("None", "null"), - Settings.System.RINGTONE); - } - - @MediumTest - @Suppress - public void testPhoneRingtoneHangouts() throws Exception { - launchSoundSettings(); - mHelper.clickSetting("Phone ringtone"); - verifyRingtone(new RingtoneSetting("Hangouts Call", "31"), Settings.System.RINGTONE); - } - - @MediumTest - public void testPhoneRingtone() throws Exception { - launchSoundSettings(); - mHelper.clickSetting("Phone ringtone"); - String ringtone = ringtoneSounds.get(mDevice.getProductName()).toString(); - String ringtoneSettingValue = ringtoneCodes.get(mDevice.getProductName()).toString(); - verifyRingtone(new RingtoneSetting(ringtone, ringtoneSettingValue), - Settings.System.RINGTONE); - } - - @MediumTest - public void testNotificationRingtoneNone() throws Exception { - launchSoundSettings(); - mHelper.clickSetting("Default notification sound"); - verifyRingtone(new RingtoneSetting("None", "null"), - Settings.System.NOTIFICATION_SOUND); - } - - @MediumTest - @Suppress - public void testNotificationRingtoneHangouts() throws Exception { - launchSoundSettings(); - mHelper.clickSetting("Default notification sound"); - verifyRingtone(new RingtoneSetting("Hangouts Message", "30"), - Settings.System.NOTIFICATION_SOUND); - } - - @MediumTest - public void testNotificationRingtone() throws Exception { - launchSoundSettings(); - mHelper.clickSetting("Default notification sound"); - String notificationRingtone = notificationSounds.get(mDevice.getProductName()).toString(); - String notificationSettingValue = notificationCodes.get(mDevice.getProductName()).toString(); - verifyRingtone(new RingtoneSetting(notificationRingtone, notificationSettingValue), - Settings.System.NOTIFICATION_SOUND); - } - - @MediumTest - public void testAlarmRingtoneNone() throws Exception { - launchSoundSettings(); - mHelper.clickSetting("Default alarm sound"); - verifyRingtone(new RingtoneSetting("None", "null"), - Settings.System.ALARM_ALERT); - } - - @MediumTest - public void testAlarmRingtone() throws Exception { - launchSoundSettings(); - String alarmRingtone = alarmSounds.get(mDevice.getProductName()).toString(); - String alarmSettingValue = alarmCodes.get(mDevice.getProductName()).toString(); - mHelper.clickSetting("Default alarm sound"); - verifyRingtone(new RingtoneSetting(alarmRingtone, alarmSettingValue), - Settings.System.ALARM_ALERT); - } - - /* - * This method verifies that setting a custom ringtone changes the - * ringtone code setting on the system. Each ringtone sound corresponds - * to an arbitrary code. To see which ringtone code this is on your device, run - * adb shell settings get system ringtone - * The number you see at the end of the file path is the one you need. - * To see alarms and notifications ringtone codes, run the following: - * adb shell settings get system alarm_alert - * adb shell settings get system notification_sound - * @param r Ringtone setting - the name of the ringtone as displayed on device - * @param settingName - the code of the ringtone as explained above - * @param dir - the direction in which to scroll - */ - private void verifyRingtone(RingtoneSetting r, String settingName) throws Exception { - findRingtoneInList(r.getName()).click(); - if (mDevice.getProductName().equals("walleye") || mDevice.getProductName().equals("taimen")) { - mDevice.wait(Until.findObject(By.text("SAVE")), TIMEOUT).click(); - } - else { - mDevice.wait(Until.findObject(By.text("OK")), TIMEOUT).click(); - } - SystemClock.sleep(1000); - if (r.getVal().equals("null")) { - assertEquals(null, - Settings.System.getString(mResolver, settingName)); - } else if (r.getName().contains("Hangouts")) { - assertEquals("content://media/external/audio/media/" + r.getVal(), - Settings.System.getString(mResolver, settingName)); - } else { - assertEquals("content://media/internal/audio/media/" + r.getVal(), - Settings.System.getString(mResolver, settingName)); - } - } - - private enum ScrollDir { - UP, - DOWN, - NOSCROLL - } - - class RingtoneSetting { - private final String mName; - private final String mMediaVal; - public RingtoneSetting(String name, String fname) { - mName = name; - mMediaVal = fname; - } - public String getName() { - return mName; - } - public String getVal() { - return mMediaVal; - } - } - - private void clickMore() throws InterruptedException { - UiObject2 more = mDevice.wait(Until.findObject(By.text("Advanced")), TIMEOUT); - if (more != null) { - more.click(); - Thread.sleep(TIMEOUT); - } - } - - private UiObject2 findRingtoneInList(String ringtone) throws Exception { - mHelper.scrollVert(false); - SystemClock.sleep(1000); - UiObject2 ringToneObject = mDevice.wait(Until.findObject(By.text(ringtone)), TIMEOUT); - int count = 0; - while (ringToneObject == null && count < 5) { - mHelper.scrollVert(true); - SystemClock.sleep(1000); - ringToneObject = mDevice.wait(Until.findObject(By.text(ringtone)), TIMEOUT); - count++; - } - return ringToneObject; - } -} diff --git a/tests/uitests/src/com/android/settings/functional/SyncSettingsTest.java b/tests/uitests/src/com/android/settings/functional/SyncSettingsTest.java deleted file mode 100644 index d80af61f215..00000000000 --- a/tests/uitests/src/com/android/settings/functional/SyncSettingsTest.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (C) 2017 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.settings.ui; - -import android.os.RemoteException; -import android.provider.Settings; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.MediumTest; -import android.support.test.runner.AndroidJUnit4; -import android.support.test.uiautomator.By; -import android.support.test.uiautomator.UiDevice; -import android.support.test.uiautomator.UiObject2; -import android.support.test.uiautomator.Until; -import android.system.helpers.SettingsHelper; - -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; - -import static junit.framework.Assert.assertTrue; - -@MediumTest -@RunWith(AndroidJUnit4.class) -public class SyncSettingsTest { - private static final int TIMEOUT = 2000; - - private UiDevice mDevice; - - @Before - public void setUp() throws Exception { - mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()); - - try { - mDevice.setOrientationNatural(); - } catch (RemoteException e) { - throw new RuntimeException("failed to freeze device orientaion", e); - } - } - - @After - public void tearDown() throws Exception { - // Need to finish settings activity - mDevice.pressHome(); - } - - @Test - public void syncPageShouldHaveAddAccountButton() throws Exception { - // Launch Settings - SettingsHelper.launchSettingsPage( - InstrumentationRegistry.getContext(), Settings.ACTION_SYNC_SETTINGS); - UiObject2 addAccount = mDevice.wait( - Until.findObject(By.text("Add account")), TIMEOUT); - assertTrue(addAccount != null); - } -} diff --git a/tests/uitests/src/com/android/settings/functional/WirelessNetworkSettingsTests.java b/tests/uitests/src/com/android/settings/functional/WirelessNetworkSettingsTests.java deleted file mode 100644 index 696d9e71405..00000000000 --- a/tests/uitests/src/com/android/settings/functional/WirelessNetworkSettingsTests.java +++ /dev/null @@ -1,777 +0,0 @@ -/* - * Copyright (C) 2017 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.settings.ui; - -import android.content.Context; -import android.content.Intent; -import android.net.wifi.WifiManager; -import android.os.RemoteException; -import android.platform.test.annotations.Presubmit; -import android.provider.Settings; -import android.system.helpers.CommandsHelper; -import android.system.helpers.SettingsHelper; -import android.support.test.uiautomator.By; -import android.support.test.uiautomator.BySelector; -import android.support.test.uiautomator.Direction; -import android.support.test.uiautomator.StaleObjectException; -import android.support.test.uiautomator.UiDevice; -import android.support.test.uiautomator.UiObject2; -import android.support.test.uiautomator.Until; -import android.test.InstrumentationTestCase; -import android.test.suitebuilder.annotation.MediumTest; -import android.test.suitebuilder.annotation.Suppress; -import android.util.Log; -import junit.framework.AssertionFailedError; - -public class WirelessNetworkSettingsTests extends InstrumentationTestCase { - // These back button presses are performed in tearDown() to exit Wifi - // Settings sub-menus that a test might finish in. This number should be - // high enough to account for the deepest sub-menu a test might enter. - private static final int NUM_BACK_BUTTON_PRESSES = 5; - private static final int TIMEOUT = 2000; - private static final int SLEEP_TIME = 500; - private static final String AIRPLANE_MODE_BROADCAST = - "am broadcast -a android.intent.action.AIRPLANE_MODE"; - private static final String TAG="WirelessNetworkSettingsTests"; - - // Note: The values of these variables might affect flakiness in tests that involve - // scrolling. Adjust where necessary. - private static final float SCROLL_UP_PERCENT = 10.0f; - private static final float SCROLL_DOWN_PERCENT = 0.5f; - private static final int MAX_SCROLL_ATTEMPTS = 10; - private static final int MAX_ADD_NETWORK_BUTTON_ATTEMPTS = 3; - private static final int SCROLL_SPEED = 2000; - - private static final String TEST_SSID = "testSsid"; - private static final String TEST_PW_GE_8_CHAR = "testPasswordGreaterThan8Char"; - private static final String TEST_PW_LT_8_CHAR = "lt8Char"; - private static final String TEST_DOMAIN = "testDomain.com"; - - private static final String SETTINGS_PACKAGE = "com.android.settings"; - - private static final String CHECKBOX_CLASS = "android.widget.CheckBox"; - private static final String SPINNER_CLASS = "android.widget.Spinner"; - private static final String EDIT_TEXT_CLASS = "android.widget.EditText"; - private static final String SCROLLVIEW_CLASS = "android.widget.ScrollView"; - private static final String LISTVIEW_CLASS = "android.widget.ListView"; - - private static final String ADD_NETWORK_MENU_CANCEL_BUTTON_TEXT = "CANCEL"; - private static final String ADD_NETWORK_MENU_SAVE_BUTTON_TEXT = "SAVE"; - private static final String ADD_NETWORK_PREFERENCE_TEXT = "Add network"; - private static final String CONFIGURE_WIFI_PREFERENCE_TEXT = "Wi‑Fi preferences"; - private static final String CONFIGURE_WIFI_ADVANCED_PREFERENCE_TEXT = "Advanced"; - private static final String CACERT_MENU_PLEASE_SELECT_TEXT = "Please select"; - private static final String CACERT_MENU_USE_SYSTEM_CERTS_TEXT = "Use system certificates"; - private static final String CACERT_MENU_DO_NOT_VALIDATE_TEXT = "Do not validate"; - private static final String USERCERT_MENU_PLEASE_SELECT_TEXT = "Please select"; - private static final String USERCERT_MENU_DO_NOT_PROVIDE_TEXT = "Do not provide"; - private static final String SECURITY_OPTION_NONE_TEXT = "None"; - private static final String SECURITY_OPTION_WEP_TEXT = "WEP"; - private static final String SECURITY_OPTION_PSK_TEXT = "WPA/WPA2 PSK"; - private static final String SECURITY_OPTION_EAP_TEXT = "802.1x EAP"; - private static final String EAP_METHOD_PEAP_TEXT = "PEAP"; - private static final String EAP_METHOD_TLS_TEXT = "TLS"; - private static final String EAP_METHOD_TTLS_TEXT = "TTLS"; - private static final String EAP_METHOD_PWD_TEXT = "PWD"; - private static final String EAP_METHOD_SIM_TEXT = "SIM"; - private static final String EAP_METHOD_AKA_TEXT = "AKA"; - private static final String EAP_METHOD_AKA_PRIME_TEXT = "AKA'"; - private static final String PHASE2_MENU_NONE_TEXT = "None"; - private static final String PHASE2_MENU_MSCHAPV2_TEXT = "MSCHAPV2"; - private static final String PHASE2_MENU_GTC_TEXT = "GTC"; - - private static final String ADD_NETWORK_MENU_ADV_TOGGLE_RES_ID = "wifi_advanced_togglebox"; - private static final String ADD_NETWORK_MENU_IP_SETTINGS_RES_ID = "ip_settings"; - private static final String ADD_NETWORK_MENU_PROXY_SETTINGS_RES_ID = "proxy_settings"; - private static final String ADD_NETWORK_MENU_SECURITY_OPTION_RES_ID = "security"; - private static final String ADD_NETWORK_MENU_EAP_METHOD_RES_ID = "method"; - private static final String ADD_NETWORK_MENU_SSID_RES_ID = "ssid"; - private static final String ADD_NETWORK_MENU_PHASE2_RES_ID = "phase2"; - private static final String ADD_NETWORK_MENU_CACERT_RES_ID = "ca_cert"; - private static final String ADD_NETWORK_MENU_USERCERT_RES_ID = "user_cert"; - private static final String ADD_NETWORK_MENU_NO_DOMAIN_WARNING_RES_ID = "no_domain_warning"; - private static final String ADD_NETWORK_MENU_NO_CACERT_WARNING_RES_ID = "no_ca_cert_warning"; - private static final String ADD_NETWORK_MENU_DOMAIN_LAYOUT_RES_ID = "l_domain"; - private static final String ADD_NETWORK_MENU_DOMAIN_RES_ID = "domain"; - private static final String ADD_NETWORK_MENU_IDENTITY_LAYOUT_RES_ID = "l_identity"; - private static final String ADD_NETWORK_MENU_ANONYMOUS_LAYOUT_RES_ID = "l_anonymous"; - private static final String ADD_NETWORK_MENU_PASSWORD_LAYOUT_RES_ID = "password_layout"; - private static final String ADD_NETWORK_MENU_SHOW_PASSWORD_LAYOUT_RES_ID = - "show_password_layout"; - private static final String ADD_NETWORK_MENU_PASSWORD_RES_ID = "password"; - - private static final BySelector ADD_NETWORK_MENU_SCROLLABLE_BY_SELECTOR = - By.scrollable(true).clazz(SCROLLVIEW_CLASS); - private static final BySelector SPINNER_OPTIONS_SCROLLABLE_BY_SELECTOR = - By.scrollable(true).clazz(LISTVIEW_CLASS); - - private UiDevice mDevice; - private CommandsHelper mCommandsHelper; - - @Override - public void setUp() throws Exception { - super.setUp(); - mDevice = UiDevice.getInstance(getInstrumentation()); - try { - mDevice.setOrientationNatural(); - } catch (RemoteException e) { - throw new RuntimeException("failed to freeze device orientation", e); - } - // Ensure airplane mode is OFF so that wifi can be enabled using WiFiManager. - Settings.Global.putString(getInstrumentation().getContext().getContentResolver(), - Settings.Global.AIRPLANE_MODE_ON, "0"); - Log.d(TAG, "sending airplane mode broadcast to device"); - mCommandsHelper = CommandsHelper.getInstance(); - mCommandsHelper.executeShellCommand(AIRPLANE_MODE_BROADCAST); - } - - @Override - protected void tearDown() throws Exception { - // Exit all settings sub-menus. - for (int i = 0; i < NUM_BACK_BUTTON_PRESSES; ++i) { - mDevice.pressBack(); - } - mDevice.pressHome(); - super.tearDown(); - } - - @Presubmit - @MediumTest - public void testWiFiEnabled() throws Exception { - verifyWiFiOnOrOff(true); - } - - @Presubmit - @MediumTest - public void testWiFiDisabled() throws Exception { - verifyWiFiOnOrOff(false); - } - - @MediumTest - public void testWifiMenuLoadConfigure() throws Exception { - loadWiFiConfigureMenu(); - Thread.sleep(SLEEP_TIME); - UiObject2 configureWiFiHeading = mDevice.wait(Until.findObject - (By.text(CONFIGURE_WIFI_PREFERENCE_TEXT)), TIMEOUT); - assertNotNull("Configure WiFi menu has not loaded correctly", configureWiFiHeading); - } - - @MediumTest - public void testNetworkNotificationsOn() throws Exception { - verifyNetworkNotificationsOnOrOff(true); - } - - @MediumTest - public void testNetworkNotificationsOff() throws Exception { - verifyNetworkNotificationsOnOrOff(false); - } - - @MediumTest - public void testAddNetworkMenu_Default() throws Exception { - loadAddNetworkMenu(); - - // Submit button should be disabled by default, while cancel button should be enabled. - assertFalse(mDevice.wait(Until.findObject( - By.text(ADD_NETWORK_MENU_SAVE_BUTTON_TEXT)), TIMEOUT).isEnabled()); - assertTrue(mDevice.wait(Until.findObject( - By.text(ADD_NETWORK_MENU_CANCEL_BUTTON_TEXT)), TIMEOUT).isEnabled()); - - // Check that the SSID field is defaults to the hint. - assertEquals("Enter the SSID", mDevice.wait(Until.findObject(By - .res(SETTINGS_PACKAGE, ADD_NETWORK_MENU_SSID_RES_ID) - .clazz(EDIT_TEXT_CLASS)), TIMEOUT*2) - .getText()); - - // Check Security defaults to None. - assertEquals("None", mDevice.wait(Until.findObject(By - .res(SETTINGS_PACKAGE, ADD_NETWORK_MENU_SECURITY_OPTION_RES_ID) - .clazz(SPINNER_CLASS)), TIMEOUT) - .getChildren().get(0).getText()); - - // Check advanced options are collapsed by default. - assertFalse(mDevice.wait(Until.findObject(By - .res(SETTINGS_PACKAGE, ADD_NETWORK_MENU_ADV_TOGGLE_RES_ID) - .clazz(CHECKBOX_CLASS)), TIMEOUT).isChecked()); - - } - - @Suppress - @MediumTest - public void testAddNetworkMenu_Proxy() throws Exception { - loadAddNetworkMenu(); - - // Toggle advanced options. - mDevice.wait(Until.findObject(By - .res(SETTINGS_PACKAGE, ADD_NETWORK_MENU_ADV_TOGGLE_RES_ID) - .clazz(CHECKBOX_CLASS)), TIMEOUT).click(); - - // Verify Proxy defaults to None. - BySelector proxySettingsBySelector = - By.res(SETTINGS_PACKAGE, ADD_NETWORK_MENU_PROXY_SETTINGS_RES_ID) - .clazz(SPINNER_CLASS); - findOrScrollToObject(ADD_NETWORK_MENU_SCROLLABLE_BY_SELECTOR, proxySettingsBySelector); - assertEquals("None", mDevice.wait(Until.findObject(proxySettingsBySelector), TIMEOUT) - .getChildren().get(0).getText()); - - // Verify that Proxy Manual fields appear. - findOrScrollToObject(ADD_NETWORK_MENU_SCROLLABLE_BY_SELECTOR, proxySettingsBySelector); - mDevice.wait(Until.findObject(proxySettingsBySelector), TIMEOUT).click(); - mDevice.wait(Until.findObject(By.text("Manual")), TIMEOUT).click(); - findOrScrollToObject(ADD_NETWORK_MENU_SCROLLABLE_BY_SELECTOR, - By.res(SETTINGS_PACKAGE, "proxy_warning_limited_support")); - findOrScrollToObject(ADD_NETWORK_MENU_SCROLLABLE_BY_SELECTOR, - By.res(SETTINGS_PACKAGE, "proxy_hostname")); - findOrScrollToObject(ADD_NETWORK_MENU_SCROLLABLE_BY_SELECTOR, - By.res(SETTINGS_PACKAGE, "proxy_exclusionlist")); - - // Verify that Proxy Auto-Config options appear. - findOrScrollToObject(ADD_NETWORK_MENU_SCROLLABLE_BY_SELECTOR, proxySettingsBySelector); - mDevice.wait(Until.findObject(proxySettingsBySelector), TIMEOUT).click(); - mDevice.wait(Until.findObject(By.text("Proxy Auto-Config")), TIMEOUT).click(); - findOrScrollToObject(ADD_NETWORK_MENU_SCROLLABLE_BY_SELECTOR, - By.res(SETTINGS_PACKAGE, "proxy_pac")); - } - - @Suppress - @MediumTest - public void testAddNetworkMenu_IpSettings() throws Exception { - loadAddNetworkMenu(); - - // Toggle advanced options. - mDevice.wait(Until.findObject(By - .res(SETTINGS_PACKAGE, ADD_NETWORK_MENU_ADV_TOGGLE_RES_ID) - .clazz(CHECKBOX_CLASS)), TIMEOUT).click(); - - // Verify IP settings defaults to DHCP. - BySelector ipSettingsBySelector = - By.res(SETTINGS_PACKAGE, ADD_NETWORK_MENU_IP_SETTINGS_RES_ID).clazz(SPINNER_CLASS); - findOrScrollToObject(ADD_NETWORK_MENU_SCROLLABLE_BY_SELECTOR, ipSettingsBySelector); - assertEquals("DHCP", mDevice.wait(Until.findObject(ipSettingsBySelector), TIMEOUT) - .getChildren().get(0).getText()); - - // Verify that Static IP settings options appear. - findOrScrollToObject(ADD_NETWORK_MENU_SCROLLABLE_BY_SELECTOR, ipSettingsBySelector).click(); - mDevice.wait(Until.findObject(By.text("Static")), TIMEOUT).click(); - findOrScrollToObject(ADD_NETWORK_MENU_SCROLLABLE_BY_SELECTOR, - By.res(SETTINGS_PACKAGE, "ipaddress")); - findOrScrollToObject(ADD_NETWORK_MENU_SCROLLABLE_BY_SELECTOR, - By.res(SETTINGS_PACKAGE, "gateway")); - findOrScrollToObject(ADD_NETWORK_MENU_SCROLLABLE_BY_SELECTOR, - By.res(SETTINGS_PACKAGE, "network_prefix_length")); - findOrScrollToObject(ADD_NETWORK_MENU_SCROLLABLE_BY_SELECTOR, - By.res(SETTINGS_PACKAGE, "dns1")); - findOrScrollToObject(ADD_NETWORK_MENU_SCROLLABLE_BY_SELECTOR, - By.res(SETTINGS_PACKAGE, "dns2")); - } - - @Suppress - @MediumTest - public void testPhase2Settings() throws Exception { - loadAddNetworkMenu(); - selectSecurityOption(SECURITY_OPTION_EAP_TEXT); - - BySelector phase2SettingsBySelector = - By.res(SETTINGS_PACKAGE, ADD_NETWORK_MENU_PHASE2_RES_ID).clazz(SPINNER_CLASS); - findOrScrollToObject(ADD_NETWORK_MENU_SCROLLABLE_BY_SELECTOR, phase2SettingsBySelector); - assertEquals(PHASE2_MENU_NONE_TEXT, mDevice.wait(Until - .findObject(phase2SettingsBySelector), TIMEOUT).getChildren().get(0).getText()); - mDevice.wait(Until.findObject(phase2SettingsBySelector), TIMEOUT).click(); - Thread.sleep(SLEEP_TIME); - - // Verify Phase 2 authentication spinner options. - assertNotNull(mDevice.wait(Until.findObject(By.text(PHASE2_MENU_NONE_TEXT)), TIMEOUT)); - assertNotNull(mDevice.wait(Until.findObject(By.text(PHASE2_MENU_MSCHAPV2_TEXT)), TIMEOUT)); - assertNotNull(mDevice.wait(Until.findObject(By.text(PHASE2_MENU_GTC_TEXT)), TIMEOUT)); - } - - @Suppress - @MediumTest - public void testCaCertSettings() throws Exception { - loadAddNetworkMenu(); - selectSecurityOption(SECURITY_OPTION_EAP_TEXT); - - BySelector caCertSettingsBySelector = - By.res(SETTINGS_PACKAGE, ADD_NETWORK_MENU_CACERT_RES_ID).clazz(SPINNER_CLASS); - findOrScrollToObject(ADD_NETWORK_MENU_SCROLLABLE_BY_SELECTOR, caCertSettingsBySelector); - assertEquals(CACERT_MENU_PLEASE_SELECT_TEXT, mDevice.wait(Until - .findObject(caCertSettingsBySelector), TIMEOUT).getChildren().get(0).getText()); - mDevice.wait(Until.findObject(caCertSettingsBySelector), TIMEOUT).click(); - Thread.sleep(SLEEP_TIME); - - // Verify CA certificate spinner options. - assertNotNull(mDevice.wait(Until.findObject( - By.text(CACERT_MENU_PLEASE_SELECT_TEXT)), TIMEOUT)); - assertNotNull(mDevice.wait(Until.findObject( - By.text(CACERT_MENU_USE_SYSTEM_CERTS_TEXT)), TIMEOUT)); - assertNotNull(mDevice.wait(Until.findObject( - By.text(CACERT_MENU_DO_NOT_VALIDATE_TEXT)), TIMEOUT)); - - // Verify that a domain field and warning appear when the user selects the - // "Use system certificates" option. - mDevice.wait(Until.findObject(By.text(CACERT_MENU_USE_SYSTEM_CERTS_TEXT)), TIMEOUT).click(); - findOrScrollToObject(ADD_NETWORK_MENU_SCROLLABLE_BY_SELECTOR, - By.res(SETTINGS_PACKAGE, ADD_NETWORK_MENU_DOMAIN_LAYOUT_RES_ID)); - findOrScrollToObject(ADD_NETWORK_MENU_SCROLLABLE_BY_SELECTOR, - By.res(SETTINGS_PACKAGE, ADD_NETWORK_MENU_NO_DOMAIN_WARNING_RES_ID)); - - // Verify that a warning appears when the user chooses the "Do Not Validate" option. - mDevice.wait(Until.findObject(caCertSettingsBySelector), TIMEOUT).click(); - mDevice.wait(Until.findObject(By.text(CACERT_MENU_DO_NOT_VALIDATE_TEXT)), TIMEOUT).click(); - findOrScrollToObject(ADD_NETWORK_MENU_SCROLLABLE_BY_SELECTOR, - By.res(SETTINGS_PACKAGE, ADD_NETWORK_MENU_NO_CACERT_WARNING_RES_ID)); - } - - @Suppress - @MediumTest - public void testAddNetwork_NoSecurity() throws Exception { - loadAddNetworkMenu(); - selectSecurityOption(SECURITY_OPTION_NONE_TEXT); - - // Entering an SSID is enough to enable the submit button. // TODO THIS GUY - enterSSID(TEST_SSID); - assertTrue(mDevice.wait(Until - .findObject(By.text(ADD_NETWORK_MENU_SAVE_BUTTON_TEXT)), TIMEOUT).isEnabled()); - } - - @Suppress - @MediumTest - public void testAddNetwork_WEP() throws Exception { - loadAddNetworkMenu(); - selectSecurityOption(SECURITY_OPTION_WEP_TEXT); - assertFalse(mDevice.wait(Until.findObject( - By.text(ADD_NETWORK_MENU_SAVE_BUTTON_TEXT)), TIMEOUT).isEnabled()); - - // Verify that WEP fields appear. - findOrScrollToObject(ADD_NETWORK_MENU_SCROLLABLE_BY_SELECTOR, - By.res(SETTINGS_PACKAGE, ADD_NETWORK_MENU_PASSWORD_LAYOUT_RES_ID)); - findOrScrollToObject(ADD_NETWORK_MENU_SCROLLABLE_BY_SELECTOR, - By.res(SETTINGS_PACKAGE, ADD_NETWORK_MENU_SHOW_PASSWORD_LAYOUT_RES_ID)); - - // Entering an SSID alone does not enable the submit button. - enterSSID(TEST_SSID); - assertFalse(mDevice.wait(Until.findObject( - By.text(ADD_NETWORK_MENU_SAVE_BUTTON_TEXT)), TIMEOUT).isEnabled()); - - // Submit button is only enabled after a password is entered. - enterPassword(TEST_PW_GE_8_CHAR); - assertTrue(mDevice.wait(Until - .findObject(By.text(ADD_NETWORK_MENU_SAVE_BUTTON_TEXT)), TIMEOUT).isEnabled()); - } - - @Suppress - @MediumTest - public void testAddNetwork_PSK() throws Exception { - loadAddNetworkMenu(); - selectSecurityOption(SECURITY_OPTION_PSK_TEXT); - assertFalse(mDevice.wait(Until.findObject( - By.text(ADD_NETWORK_MENU_SAVE_BUTTON_TEXT)), TIMEOUT).isEnabled()); - - // Verify that PSK fields appear. - findOrScrollToObject(ADD_NETWORK_MENU_SCROLLABLE_BY_SELECTOR, - By.res(SETTINGS_PACKAGE, ADD_NETWORK_MENU_PASSWORD_LAYOUT_RES_ID)); - findOrScrollToObject(ADD_NETWORK_MENU_SCROLLABLE_BY_SELECTOR, - By.res(SETTINGS_PACKAGE, ADD_NETWORK_MENU_SHOW_PASSWORD_LAYOUT_RES_ID)); - - // Entering an SSID alone does not enable the submit button. - enterSSID(TEST_SSID); - assertFalse(mDevice.wait(Until.findObject( - By.text(ADD_NETWORK_MENU_SAVE_BUTTON_TEXT)), TIMEOUT).isEnabled()); - - // Entering an password that is too short does not enable submit button. - enterPassword(TEST_PW_LT_8_CHAR); - assertFalse(mDevice.wait(Until.findObject( - By.text(ADD_NETWORK_MENU_SAVE_BUTTON_TEXT)), TIMEOUT).isEnabled()); - - // Submit button is only enabled after a password of valid length is entered. - enterPassword(TEST_PW_GE_8_CHAR); - assertTrue(mDevice.wait(Until.findObject( - By.text(ADD_NETWORK_MENU_SAVE_BUTTON_TEXT)), TIMEOUT).isEnabled()); - } - - @Suppress - @MediumTest - public void testAddNetwork_EAP_PEAP() throws Exception { - loadAddNetworkMenu(); - selectSecurityOption(SECURITY_OPTION_EAP_TEXT); - assertFalse(mDevice.wait(Until.findObject( - By.text(ADD_NETWORK_MENU_SAVE_BUTTON_TEXT)), TIMEOUT).isEnabled()); - - selectEAPMethod(EAP_METHOD_PEAP_TEXT); - - // Verify that EAP-PEAP fields appear. - findOrScrollToObject(ADD_NETWORK_MENU_SCROLLABLE_BY_SELECTOR, - By.res(SETTINGS_PACKAGE, ADD_NETWORK_MENU_PHASE2_RES_ID)); - findOrScrollToObject(ADD_NETWORK_MENU_SCROLLABLE_BY_SELECTOR, - By.res(SETTINGS_PACKAGE, ADD_NETWORK_MENU_CACERT_RES_ID)); - findOrScrollToObject(ADD_NETWORK_MENU_SCROLLABLE_BY_SELECTOR, - By.res(SETTINGS_PACKAGE, ADD_NETWORK_MENU_IDENTITY_LAYOUT_RES_ID)); - findOrScrollToObject(ADD_NETWORK_MENU_SCROLLABLE_BY_SELECTOR, - By.res(SETTINGS_PACKAGE, ADD_NETWORK_MENU_ANONYMOUS_LAYOUT_RES_ID)); - findOrScrollToObject(ADD_NETWORK_MENU_SCROLLABLE_BY_SELECTOR, - By.res(SETTINGS_PACKAGE, ADD_NETWORK_MENU_PASSWORD_LAYOUT_RES_ID)); - findOrScrollToObject(ADD_NETWORK_MENU_SCROLLABLE_BY_SELECTOR, - By.res(SETTINGS_PACKAGE, ADD_NETWORK_MENU_SHOW_PASSWORD_LAYOUT_RES_ID)); - - // Entering an SSID alone does not enable the submit button. - enterSSID(TEST_SSID); - assertFalse(mDevice.wait(Until.findObject( - By.text(ADD_NETWORK_MENU_SAVE_BUTTON_TEXT)), TIMEOUT).isEnabled()); - - verifyCaCertificateSubmitConditions(); - } - - @Suppress - @MediumTest - public void testAddNetwork_EAP_TLS() throws Exception { - loadAddNetworkMenu(); - selectSecurityOption(SECURITY_OPTION_EAP_TEXT); - assertFalse(mDevice.wait(Until.findObject( - By.text(ADD_NETWORK_MENU_SAVE_BUTTON_TEXT)), TIMEOUT).isEnabled()); - - selectEAPMethod(EAP_METHOD_TLS_TEXT); - - // Verify that EAP-TLS fields appear. - findOrScrollToObject(ADD_NETWORK_MENU_SCROLLABLE_BY_SELECTOR, - By.res(SETTINGS_PACKAGE, ADD_NETWORK_MENU_CACERT_RES_ID)); - findOrScrollToObject(ADD_NETWORK_MENU_SCROLLABLE_BY_SELECTOR, - By.res(SETTINGS_PACKAGE, ADD_NETWORK_MENU_USERCERT_RES_ID)); - findOrScrollToObject(ADD_NETWORK_MENU_SCROLLABLE_BY_SELECTOR, - By.res(SETTINGS_PACKAGE, ADD_NETWORK_MENU_IDENTITY_LAYOUT_RES_ID)); - - // Entering an SSID alone does not enable the submit button. - enterSSID(TEST_SSID); - assertFalse(mDevice.wait(Until.findObject( - By.text(ADD_NETWORK_MENU_SAVE_BUTTON_TEXT)), TIMEOUT).isEnabled()); - - // Selecting the User certificate "Do not provide" option alone does not enable the submit - // button. - selectUserCertificateOption(USERCERT_MENU_DO_NOT_PROVIDE_TEXT); - assertFalse(mDevice.wait(Until.findObject( - By.text(ADD_NETWORK_MENU_SAVE_BUTTON_TEXT)), TIMEOUT).isEnabled()); - - verifyCaCertificateSubmitConditions(); - } - - @Suppress - @MediumTest - public void testAddNetwork_EAP_TTLS() throws Exception { - loadAddNetworkMenu(); - selectSecurityOption(SECURITY_OPTION_EAP_TEXT); - assertFalse(mDevice.wait(Until.findObject( - By.text(ADD_NETWORK_MENU_SAVE_BUTTON_TEXT)), TIMEOUT).isEnabled()); - - selectEAPMethod(EAP_METHOD_TTLS_TEXT); - - // Verify that EAP-TLS fields appear. - findOrScrollToObject(ADD_NETWORK_MENU_SCROLLABLE_BY_SELECTOR, - By.res(SETTINGS_PACKAGE, ADD_NETWORK_MENU_PHASE2_RES_ID)); - findOrScrollToObject(ADD_NETWORK_MENU_SCROLLABLE_BY_SELECTOR, - By.res(SETTINGS_PACKAGE, ADD_NETWORK_MENU_CACERT_RES_ID)); - findOrScrollToObject(ADD_NETWORK_MENU_SCROLLABLE_BY_SELECTOR, - By.res(SETTINGS_PACKAGE, ADD_NETWORK_MENU_IDENTITY_LAYOUT_RES_ID)); - findOrScrollToObject(ADD_NETWORK_MENU_SCROLLABLE_BY_SELECTOR, - By.res(SETTINGS_PACKAGE, ADD_NETWORK_MENU_ANONYMOUS_LAYOUT_RES_ID)); - findOrScrollToObject(ADD_NETWORK_MENU_SCROLLABLE_BY_SELECTOR, - By.res(SETTINGS_PACKAGE, ADD_NETWORK_MENU_PASSWORD_LAYOUT_RES_ID)); - - // Entering an SSID alone does not enable the submit button. - enterSSID(TEST_SSID); - assertFalse(mDevice.wait(Until.findObject( - By.text(ADD_NETWORK_MENU_SAVE_BUTTON_TEXT)), TIMEOUT).isEnabled()); - - verifyCaCertificateSubmitConditions(); - } - - @Suppress - @MediumTest - public void testAddNetwork_EAP_PWD() throws Exception { - loadAddNetworkMenu(); - selectSecurityOption(SECURITY_OPTION_EAP_TEXT); - assertFalse(mDevice.wait(Until.findObject( - By.text(ADD_NETWORK_MENU_SAVE_BUTTON_TEXT)), TIMEOUT).isEnabled()); - - selectEAPMethod(EAP_METHOD_PWD_TEXT); - - // Verify that EAP-TLS fields appear. - findOrScrollToObject(ADD_NETWORK_MENU_SCROLLABLE_BY_SELECTOR, - By.res(SETTINGS_PACKAGE, ADD_NETWORK_MENU_IDENTITY_LAYOUT_RES_ID)); - findOrScrollToObject(ADD_NETWORK_MENU_SCROLLABLE_BY_SELECTOR, - By.res(SETTINGS_PACKAGE, ADD_NETWORK_MENU_PASSWORD_LAYOUT_RES_ID)); - - // Entering an SSID alone enables the submit button. - enterSSID(TEST_SSID); - assertTrue(mDevice.wait(Until.findObject( - By.text(ADD_NETWORK_MENU_SAVE_BUTTON_TEXT)), TIMEOUT).isEnabled()); - } - - @Suppress - @MediumTest - public void testAddNetwork_EAP_SIM() throws Exception { - loadAddNetworkMenu(); - selectSecurityOption(SECURITY_OPTION_EAP_TEXT); - assertFalse(mDevice.wait(Until.findObject( - By.text(ADD_NETWORK_MENU_SAVE_BUTTON_TEXT)), TIMEOUT).isEnabled()); - - selectEAPMethod(EAP_METHOD_SIM_TEXT); - - // Entering an SSID alone enables the submit button. - enterSSID(TEST_SSID); - assertTrue(mDevice.wait(Until.findObject( - By.text(ADD_NETWORK_MENU_SAVE_BUTTON_TEXT)), TIMEOUT).isEnabled()); - } - - @Suppress - @MediumTest - public void testAddNetwork_EAP_AKA() throws Exception { - loadAddNetworkMenu(); - selectSecurityOption(SECURITY_OPTION_EAP_TEXT); - assertFalse(mDevice.wait(Until.findObject( - By.text(ADD_NETWORK_MENU_SAVE_BUTTON_TEXT)), TIMEOUT).isEnabled()); - - selectEAPMethod(EAP_METHOD_AKA_TEXT); - - // Entering an SSID alone enables the submit button. - enterSSID(TEST_SSID); - assertTrue(mDevice.wait(Until.findObject( - By.text(ADD_NETWORK_MENU_SAVE_BUTTON_TEXT)), TIMEOUT).isEnabled()); - } - - @Suppress - @MediumTest - public void testAddNetwork_EAP_AKA_PRIME() throws Exception { - loadAddNetworkMenu(); - selectSecurityOption(SECURITY_OPTION_EAP_TEXT); - assertFalse(mDevice.wait(Until.findObject( - By.text(ADD_NETWORK_MENU_SAVE_BUTTON_TEXT)), TIMEOUT).isEnabled()); - - selectEAPMethod(EAP_METHOD_AKA_PRIME_TEXT); - - // Entering an SSID alone enables the submit button. - enterSSID(TEST_SSID); - assertTrue(mDevice.wait(Until.findObject( - By.text(ADD_NETWORK_MENU_SAVE_BUTTON_TEXT)), TIMEOUT).isEnabled()); - } - - private void verifyKeepWiFiOnDuringSleep(String settingToBeVerified, int settingValue) - throws Exception { - loadWiFiConfigureMenu(); - mDevice.wait(Until.findObject(By.text("Keep Wi‑Fi on during sleep")), TIMEOUT) - .click(); - mDevice.wait(Until.findObject(By.clazz("android.widget.CheckedTextView") - .text(settingToBeVerified)), TIMEOUT).click(); - Thread.sleep(SLEEP_TIME); - int keepWiFiOnSetting = - Settings.Global.getInt(getInstrumentation().getContext().getContentResolver(), - Settings.Global.WIFI_SLEEP_POLICY); - assertEquals(settingValue, keepWiFiOnSetting); - } - - private void verifyNetworkNotificationsOnOrOff(boolean verifyOn) - throws Exception { - // Enable network recommendations to enable the toggle switch for Network - // notifications - Settings.Global.putString(getInstrumentation().getContext().getContentResolver(), - Settings.Global.NETWORK_RECOMMENDATIONS_ENABLED, "1"); - if (verifyOn) { - Settings.Global.putString(getInstrumentation().getContext().getContentResolver(), - Settings.Global.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON, "0"); - } - else { - Settings.Global.putString(getInstrumentation().getContext().getContentResolver(), - Settings.Global.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON, "1"); - } - loadWiFiConfigureMenu(); - mDevice.wait(Until.findObject(By.text("Open network notification")), TIMEOUT) - .click(); - Thread.sleep(SLEEP_TIME); - String wifiNotificationValue = - Settings.Global.getString(getInstrumentation().getContext().getContentResolver(), - Settings.Global.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON); - if (verifyOn) { - assertEquals("1", wifiNotificationValue); - } - else { - assertEquals("0", wifiNotificationValue); - } - } - - private void verifyWiFiOnOrOff(boolean verifyOn) throws Exception { - String switchText = "On"; - if (verifyOn) { - switchText = "Off"; - } - loadWiFiSettingsPage(!verifyOn); - mDevice.wait(Until - .findObject(By.res(SETTINGS_PACKAGE, "switch_bar").text(switchText)), TIMEOUT) - .click(); - Thread.sleep(SLEEP_TIME); - String wifiValue = - Settings.Global.getString(getInstrumentation().getContext().getContentResolver(), - Settings.Global.WIFI_ON); - if (verifyOn) { - // 1 is Enabled, 2 is Enabled while airplane mode is ON. - assertTrue(wifiValue.equals("1") || wifiValue.equals("2")); - } - else { - assertEquals("0", wifiValue); - } - } - - private void verifyCaCertificateSubmitConditions() throws Exception { - // Selecting the CA certificate "Do not validate" option enables the submit button. - selectCaCertificateOption(CACERT_MENU_DO_NOT_VALIDATE_TEXT); - assertTrue(mDevice.wait(Until.findObject( - By.text(ADD_NETWORK_MENU_SAVE_BUTTON_TEXT)), TIMEOUT).isEnabled()); - - // However, selecting the CA certificate "Use system certificates option" is not enough to - // enable the submit button. - selectCaCertificateOption(CACERT_MENU_USE_SYSTEM_CERTS_TEXT); - assertFalse(mDevice.wait(Until.findObject( - By.text(ADD_NETWORK_MENU_SAVE_BUTTON_TEXT)), TIMEOUT).isEnabled()); - - // Submit button is only enabled after a domain is entered as well. - enterDomain(TEST_DOMAIN); - assertTrue(mDevice.wait(Until.findObject( - By.text(ADD_NETWORK_MENU_SAVE_BUTTON_TEXT)), TIMEOUT).isEnabled()); - } - - private void loadWiFiSettingsPage(boolean wifiEnabled) throws Exception { - WifiManager wifiManager = (WifiManager)getInstrumentation().getContext() - .getSystemService(Context.WIFI_SERVICE); - wifiManager.setWifiEnabled(wifiEnabled); - SettingsHelper.launchSettingsPage(getInstrumentation().getContext(), - Settings.ACTION_WIFI_SETTINGS); - } - - private void loadWiFiConfigureMenu() throws Exception { - loadWiFiSettingsPage(false); - Thread.sleep(TIMEOUT); - mDevice.wait(Until.findObject(By.text(CONFIGURE_WIFI_PREFERENCE_TEXT)), TIMEOUT).click(); - mDevice.wait(Until.findObject( - By.text(CONFIGURE_WIFI_ADVANCED_PREFERENCE_TEXT)), TIMEOUT).click(); - } - - private void loadAddNetworkMenu() throws Exception { - loadWiFiSettingsPage(true); - for (int attempts = 0; attempts < MAX_ADD_NETWORK_BUTTON_ATTEMPTS; ++attempts) { - try { - findOrScrollToObject(By.scrollable(true), By.text(ADD_NETWORK_PREFERENCE_TEXT)) - .click(); - } catch (StaleObjectException e) { - // The network list might have been updated between when the Add network button was - // found, and when it UI automator attempted to click on it. Retry. - continue; - } - // If we get here, we successfully clicked on the Add network button, so we are done. - Thread.sleep(SLEEP_TIME*5); - return; - } - - fail("Failed to load Add Network Menu after " + MAX_ADD_NETWORK_BUTTON_ATTEMPTS - + " retries"); - } - - private void selectSecurityOption(String securityOption) throws Exception { - // We might not need to scroll to the security options if not enough add network menu - // options are visible. - findOrScrollToObject(ADD_NETWORK_MENU_SCROLLABLE_BY_SELECTOR, - By.res(SETTINGS_PACKAGE, ADD_NETWORK_MENU_SECURITY_OPTION_RES_ID) - .clazz(SPINNER_CLASS)).click(); - Thread.sleep(SLEEP_TIME); - mDevice.wait(Until.findObject(By.text(securityOption)), TIMEOUT).click(); - } - - private void selectEAPMethod(String eapMethod) throws Exception { - findOrScrollToObject(ADD_NETWORK_MENU_SCROLLABLE_BY_SELECTOR, - By.res(SETTINGS_PACKAGE, ADD_NETWORK_MENU_EAP_METHOD_RES_ID).clazz(SPINNER_CLASS)) - .click(); - Thread.sleep(SLEEP_TIME); - findOrScrollToObject(SPINNER_OPTIONS_SCROLLABLE_BY_SELECTOR, By.text(eapMethod)).click(); - } - - private void selectUserCertificateOption(String userCertificateOption) throws Exception { - findOrScrollToObject(ADD_NETWORK_MENU_SCROLLABLE_BY_SELECTOR, - By.res(SETTINGS_PACKAGE, ADD_NETWORK_MENU_USERCERT_RES_ID).clazz(SPINNER_CLASS)) - .click(); - mDevice.wait(Until.findObject(By.text(userCertificateOption)), TIMEOUT).click(); - } - - private void selectCaCertificateOption(String caCertificateOption) throws Exception { - findOrScrollToObject(ADD_NETWORK_MENU_SCROLLABLE_BY_SELECTOR, - By.res(SETTINGS_PACKAGE, ADD_NETWORK_MENU_CACERT_RES_ID).clazz(SPINNER_CLASS)) - .click(); - mDevice.wait(Until.findObject(By.text(caCertificateOption)), TIMEOUT).click(); - } - - private void enterSSID(String ssid) throws Exception { - // We might not need to scroll to the SSID option if not enough add network menu options - // are visible. - findOrScrollToObject(ADD_NETWORK_MENU_SCROLLABLE_BY_SELECTOR, - By.res(SETTINGS_PACKAGE, ADD_NETWORK_MENU_SSID_RES_ID).clazz(EDIT_TEXT_CLASS)) - .setText(ssid); - } - - private void enterPassword(String password) throws Exception { - findOrScrollToObject(ADD_NETWORK_MENU_SCROLLABLE_BY_SELECTOR, - By.res(SETTINGS_PACKAGE, ADD_NETWORK_MENU_PASSWORD_RES_ID).clazz(EDIT_TEXT_CLASS)) - .setText(password); - } - - private void enterDomain(String domain) throws Exception { - findOrScrollToObject(ADD_NETWORK_MENU_SCROLLABLE_BY_SELECTOR, - By.res(SETTINGS_PACKAGE, ADD_NETWORK_MENU_DOMAIN_RES_ID)).setText(domain); - } - - // Use this if the UI object might or might not need to be scrolled to. - private UiObject2 findOrScrollToObject(BySelector scrollableSelector, BySelector objectSelector) - throws Exception { - UiObject2 object = mDevice.wait(Until.findObject(objectSelector), TIMEOUT); - if (object == null) { - object = scrollToObject(scrollableSelector, objectSelector); - } - return object; - } - - private UiObject2 scrollToObject(BySelector scrollableSelector, BySelector objectSelector) - throws Exception { - UiObject2 scrollable = mDevice.wait(Until.findObject(scrollableSelector), TIMEOUT); - if (scrollable == null) { - fail("Could not find scrollable UI object identified by " + scrollableSelector); - } - UiObject2 found = null; - // Scroll all the way up first, then all the way down. - while (true) { - // Optimization: terminate if we find the object while scrolling up to reset, so - // we save the time spent scrolling down again. - boolean canScrollAgain = scrollable.scroll(Direction.UP, SCROLL_UP_PERCENT, - SCROLL_SPEED); - found = mDevice.findObject(objectSelector); - if (found != null) return found; - if (!canScrollAgain) break; - } - for (int attempts = 0; found == null && attempts < MAX_SCROLL_ATTEMPTS; ++attempts) { - // Return value of UiObject2.scroll() is not reliable, so do not use it in loop - // condition, in case it causes this loop to terminate prematurely. - scrollable.scroll(Direction.DOWN, SCROLL_DOWN_PERCENT, SCROLL_SPEED); - found = mDevice.findObject(objectSelector); - } - if (found == null) { - fail("Could not scroll to UI object identified by " + objectSelector); - } - return found; - } -} diff --git a/tests/uitests/src/com/android/settings/functional/testutils/SettingsTestUtils.java b/tests/uitests/src/com/android/settings/functional/testutils/SettingsTestUtils.java deleted file mode 100644 index 834eeccca05..00000000000 --- a/tests/uitests/src/com/android/settings/functional/testutils/SettingsTestUtils.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (C) 2017 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.settings.functional.testutils; - -import static org.junit.Assert.assertNotNull; - -import android.support.test.uiautomator.By; -import android.support.test.uiautomator.Direction; -import android.support.test.uiautomator.UiDevice; -import android.support.test.uiautomator.UiObject2; -import android.support.test.uiautomator.Until; - -public class SettingsTestUtils { - - public static final String SETTINGS_PACKAGE = "com.android.settings"; - public static final int TIMEOUT = 2000; - - private void scrollToTop(UiDevice device) throws Exception { - int count = 5; - UiObject2 view = null; - while (count >= 0) { - view = device.wait( - Until.findObject(By.res(SETTINGS_PACKAGE, "main_content")), - TIMEOUT); - view.scroll(Direction.UP, 1.0f); - count--; - } - } - - public static void assertTitleMatch(UiDevice device, String title) { - int maxAttempt = 5; - UiObject2 item = null; - UiObject2 view = null; - while (maxAttempt-- > 0) { - item = device.wait(Until.findObject(By.res("android:id/title").text(title)), TIMEOUT); - if (item == null) { - view = device.wait( - Until.findObject(By.res(SETTINGS_PACKAGE, "main_content")), - TIMEOUT); - view.scroll(Direction.DOWN, 1.0f); - } else { - return; - } - } - assertNotNull(String.format("%s in Setting has not been loaded correctly", title), item); - } -}