Merge "Unable to adjust remote session volume in Sound Setting" into rvc-dev
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 358bd83..c39095c 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -785,7 +785,7 @@
<string name="nfc_disclaimer_title" msgid="3696580694485048039">"Skakel NFC aan"</string>
<string name="nfc_disclaimer_content" msgid="8256675597551036207">"NFC ruil data uit tussen hierdie toestel en ander nabygeleë toestelle of teikens, soos byvoorbeeld betaalterminale, toeganglesers en interaktiewe advertensies of merkers."</string>
<string name="nfc_secure_settings_title" msgid="4906958426927741485">"Vereis toestelontsluiting vir NFC"</string>
- <string name="nfc_secure_toggle_summary" product="default" msgid="4591286109299690373">"Laat die gebruik van NFC-betalings en Publieke Vervoer net toe wanneer die skerm ontsluit is"</string>
+ <string name="nfc_secure_toggle_summary" product="default" msgid="4591286109299690373">"Laat die gebruik van NFC-betalings en -oordragte net toe wanneer die skerm ontsluit is"</string>
<string name="android_beam_settings_title" msgid="2797963824490671295">"Android Beam"</string>
<string name="android_beam_on_summary" msgid="6067720758437490896">"Gereed om programinhoud te stuur via NFC"</string>
<string name="android_beam_off_summary" msgid="5693961375631325042">"Af"</string>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 9920192..5424dd7 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -853,7 +853,7 @@
<string name="nfc_disclaimer_title" msgid="3696580694485048039">"تفعيل NFC"</string>
<string name="nfc_disclaimer_content" msgid="8256675597551036207">"يتم من خلال تقنية الاتصال بالحقل القريب (NFC) تبادل البيانات بين هذا الجهاز والأجهزة أو الأهداف المجاورة الأخرى، مثل محطات الدفع وبرامج قراءة الوصول والعلامات أو الإعلانات التفاعلية."</string>
<string name="nfc_secure_settings_title" msgid="4906958426927741485">"يجب فتح قفل الجهاز لاستخدام تقنية الاتصالات القريبة المدى (NFC)"</string>
- <string name="nfc_secure_toggle_summary" product="default" msgid="4591286109299690373">"السماح باستخدام \"الدفع والتقل عبر تقنية NFC\" فقط عندما تكون الشاشة مفتوحة"</string>
+ <string name="nfc_secure_toggle_summary" product="default" msgid="4591286109299690373">"السماح باستخدام \"الدفع والتنقل عبر تقنية NFC\" فقط عندما تكون الشاشة مفتوحة"</string>
<string name="android_beam_settings_title" msgid="2797963824490671295">"شعاع Android"</string>
<string name="android_beam_on_summary" msgid="6067720758437490896">"جاهز لنقل محتوى التطبيق عبر الاتصالات القريبة المدى (NFC)"</string>
<string name="android_beam_off_summary" msgid="5693961375631325042">"إيقاف"</string>
@@ -1861,7 +1861,7 @@
<string name="lockpassword_confirm_pins_dont_match" msgid="1103699575489401030">"أرقام التعريف الشخصي غير متطابقة"</string>
<string name="lockpassword_draw_your_pattern_again_header" msgid="1045638030120803622">"ارسم النقش مرة أخرى"</string>
<string name="lockpassword_choose_lock_generic_header" msgid="5669348379247148696">"اختيار طريقة فتح القفل"</string>
- <string name="lockpassword_password_set_toast" msgid="6615759749393973795">"تم تعيين كلمة المرور"</string>
+ <string name="lockpassword_password_set_toast" msgid="6615759749393973795">"تم ضبط كلمة المرور"</string>
<string name="lockpassword_pin_set_toast" msgid="5415783847198570890">"تم تعيين رمز PIN"</string>
<string name="lockpassword_pattern_set_toast" msgid="3090582314362416762">"تم تعيين النقش"</string>
<string name="lockpassword_choose_your_password_header_for_face" msgid="5359649947642749079">"لاستخدام \"فتح القفل بالوجه\"، يجب تحديد كلمة مرور"</string>
@@ -2192,7 +2192,7 @@
<string name="app_name_label" msgid="3809910527680143673">"التطبيق"</string>
<string name="last_time_used_label" msgid="2639712813493534074">"آخر مرة تم استخدامه"</string>
<string name="usage_time_label" msgid="9105343335151559883">"وقت الاستخدام"</string>
- <string name="accessibility_settings" msgid="4713215774904704682">"سهولة الاستخدام"</string>
+ <string name="accessibility_settings" msgid="4713215774904704682">"إمكانية الوصول"</string>
<string name="accessibility_settings_title" msgid="6739115703615065716">"إعدادات \"سهولة الاستخدام\""</string>
<string name="accessibility_settings_summary" msgid="2195085206729325737">"أجهزة قارئ الشاشة والشاشة وعناصر التحكم التفاعلية"</string>
<string name="vision_settings_title" msgid="8919983801864103069">"إعدادات الرؤية"</string>
@@ -4886,7 +4886,7 @@
<item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> شهادة CA كحد أدنى</item>
<item quantity="one">شهادة CA واحدة (<xliff:g id="COUNT_0">%d</xliff:g>) كحد أدنى</item>
</plurals>
- <string name="enterprise_privacy_lock_device" msgid="464054894363899866">"يمكن للمشرف قفل الجهاز وإعادة تعيين كلمة المرور"</string>
+ <string name="enterprise_privacy_lock_device" msgid="464054894363899866">"يمكن للمشرف قفل الجهاز وإعادة ضبط كلمة المرور"</string>
<string name="enterprise_privacy_wipe_device" msgid="869589182352244591">"يمكن للمشرف حذف جميع بيانات الجهاز"</string>
<string name="enterprise_privacy_failed_password_wipe_device" msgid="7045164901334821226">"محاولات كلمة المرور الخاطئة قبل حذف جميع بيانات الجهاز"</string>
<string name="enterprise_privacy_failed_password_wipe_work" msgid="2537582942554484170">"محاولات كلمة المرور الخاطئة قبل حذف بيانات الملف الشخصي للعمل"</string>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index a7023fc..0c37eab 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -785,7 +785,7 @@
<string name="nfc_disclaimer_title" msgid="3696580694485048039">"Включване на КБП"</string>
<string name="nfc_disclaimer_content" msgid="8256675597551036207">"Чрез КБП се обменят данни между това устройство и други в близост или целеви такива, като например терминали за плащане, четци за достъп и интерактивни реклами или маркери."</string>
<string name="nfc_secure_settings_title" msgid="4906958426927741485">"Изискване за отключване на устройството за NFC"</string>
- <string name="nfc_secure_toggle_summary" product="default" msgid="4591286109299690373">"Разрешаване на използването на КБП за плащане и прехвърляне само при отключен екран"</string>
+ <string name="nfc_secure_toggle_summary" product="default" msgid="4591286109299690373">"Разрешаване на използването на NFC за плащане и прехвърляне само при отключен екран"</string>
<string name="android_beam_settings_title" msgid="2797963824490671295">"Android Beam"</string>
<string name="android_beam_on_summary" msgid="6067720758437490896">"В готовност за предаване на съдържание на приложения чрез КБП"</string>
<string name="android_beam_off_summary" msgid="5693961375631325042">"Изключено"</string>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 1d21d6e..03f28f3 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -4812,7 +4812,7 @@
<string name="see_more" msgid="7499355691042812723">"Ver más"</string>
<string name="see_less" msgid="2642392725363552793">"Ver menos"</string>
<string name="network_connection_request_dialog_title" msgid="1896186380874289434">"Conectar al dispositivo"</string>
- <string name="network_connection_request_dialog_summary" msgid="7693038309792726170">"La app de <xliff:g id="APPNAME">%1$s</xliff:g> quiere usar una red Wi-Fi temporal para conectarte al dispositivo"</string>
+ <string name="network_connection_request_dialog_summary" msgid="7693038309792726170">"La app de <xliff:g id="APPNAME">%1$s</xliff:g> quiere usar una red Wi-Fi temporal para conectarse a tu dispositivo"</string>
<string name="network_connection_timeout_dialog_message" msgid="598509083077743772">"No se encontraron dispositivos. Asegúrate de que los dispositivos estén encendidos y puedan conectarse."</string>
<string name="network_connection_timeout_dialog_ok" msgid="6022675321823723755">"Volver a intentarlo"</string>
<string name="network_connection_errorstate_dialog_message" msgid="3360714322047603239">"Se produjo un error. La aplicación canceló la solicitud para elegir un dispositivo."</string>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index f469e55..67d04eb 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -2551,7 +2551,7 @@
<item quantity="other">%1$d אפליקציות מוגבלות</item>
<item quantity="one">אפליקציה מוגבלת אחת</item>
</plurals>
- <string name="battery_header_title_alternate" msgid="8371821625994616659"><small>" "<font size="20">"<xliff:g id="UNIT">%</xliff:g>"</font></small>"<xliff:g id="NUMBER">^1</xliff:g>"</string>
+ <string name="battery_header_title_alternate" msgid="8371821625994616659"><small>" "<font size="20">"<xliff:g id="NUMBER">^1</xliff:g>"</font></small>"<xliff:g id="UNIT">%</xliff:g>"</string>
<string name="dialog_stop_title" msgid="5972757101865665655">"לעצור את האפליקציה?"</string>
<string name="dialog_stop_message" product="default" msgid="2063536418875183799">"הניהול של צריכת הסוללה בטלפון לא תקין, כי האפליקציה <xliff:g id="APP">%1$s</xliff:g> לא מאפשרת למכשיר להיכנס למצב שינה.\n\nכדי לפתור את הבעיה, ניתן להפסיק את פעולת האפליקציה.\n\nאם הבעיה תימשך, ייתכן שיהיה עליך להסיר את התקנת האפליקציה כדי לשפר את ביצועי הסוללה."</string>
<string name="dialog_stop_message" product="tablet" msgid="426862716783569739">"הניהול של צריכת הסוללה בטאבלט לא תקין, כי האפליקציה <xliff:g id="APP">%1$s</xliff:g> לא מאפשרת למכשיר להיכנס למצב שינה.\n\nכדי לפתור את הבעיה, ניתן להפסיק את פעולת האפליקציה.\n\nאם הבעיה תימשך, ייתכן שיהיה עליך להסיר את התקנת האפליקציה כדי לשפר את ביצועי הסוללה."</string>
diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml
index 5870b41..adba54b 100644
--- a/res/values-mk/strings.xml
+++ b/res/values-mk/strings.xml
@@ -1798,7 +1798,7 @@
<string name="lockpassword_confirm_your_pin_details_frp" msgid="2128795640346033349">"Телефонот е ресетиран на фабрички поставки. За да го користите, внесете го претходниот PIN."</string>
<string name="lockpassword_confirm_your_password_details_frp" msgid="4031863562975125016">"Телефонот е ресетиран на фабрички поставки. За да го користите, внесете ја претходната лозинка."</string>
<string name="lockpassword_confirm_your_pattern_header_frp" msgid="5641858015891896427">"Потврдете ја шемата"</string>
- <string name="lockpassword_confirm_your_pin_header_frp" msgid="8285647793164729982">"Потврди PIN"</string>
+ <string name="lockpassword_confirm_your_pin_header_frp" msgid="8285647793164729982">"Потврдете го PIN-от"</string>
<string name="lockpassword_confirm_your_password_header_frp" msgid="7932240547542564033">"Потврдете ја лозинката"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"Погрешен PIN"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Погрешна лозинка"</string>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 44b6e17..c5ad3de 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -785,7 +785,7 @@
<string name="nfc_disclaimer_title" msgid="3696580694485048039">"เปิดใช้ NFC"</string>
<string name="nfc_disclaimer_content" msgid="8256675597551036207">"NFC จะแลกเปลี่ยนข้อมูลระหว่างอุปกรณ์นี้กับอุปกรณ์อื่นที่อยู่ใกล้ๆ หรืออุปกรณ์เป้าหมาย เช่น เครื่องชำระเงิน เครื่องอ่านการเข้าถึง และโฆษณาหรือป้ายสินค้าเชิงโต้ตอบ"</string>
<string name="nfc_secure_settings_title" msgid="4906958426927741485">"ต้องปลดล็อกอุปกรณ์เพื่อใช้งาน NFC"</string>
- <string name="nfc_secure_toggle_summary" product="default" msgid="4591286109299690373">"อนุญาตการใช้การชำระเงินผ่าน NFC และขนส่งสาธารณะเฉพาะเวลาที่ไม่ได้ล็อกหน้าจอเท่านั้น"</string>
+ <string name="nfc_secure_toggle_summary" product="default" msgid="4591286109299690373">"อนุญาตให้ใช้ขนส่งสาธารณะและการชำระเงินผ่าน NFC เฉพาะเวลาที่ไม่ได้ล็อกหน้าจอเท่านั้น"</string>
<string name="android_beam_settings_title" msgid="2797963824490671295">"Android Beam"</string>
<string name="android_beam_on_summary" msgid="6067720758437490896">"พร้อมที่จะส่งเนื้อหาแอปผ่านทาง NFC"</string>
<string name="android_beam_off_summary" msgid="5693961375631325042">"ปิด"</string>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 27b0984..e453b76 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -2200,7 +2200,7 @@
<string name="accessibility_shortcut_edit_dialog_title_software_gesture" msgid="8078659880723370597">"Провести двома пальцями вгору"</string>
<string name="accessibility_shortcut_edit_dialog_title_software_gesture_talkback" msgid="7422753388389160524">"Провести трьома пальцями вгору"</string>
<string name="accessibility_shortcut_edit_dialog_title_software" msgid="4796192466943479849">"Натиснути кнопку спеціальних можливостей"</string>
- <string name="accessibility_shortcut_edit_dialog_summary_software" msgid="5606196352833449600">"Натиснути кнопку спеціальних можливостей <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> унизу екрана.\n\nЩоб переключитися між функціями, натисніть і утримуйте кнопку спеціальних можливостей."</string>
+ <string name="accessibility_shortcut_edit_dialog_summary_software" msgid="5606196352833449600">"Натисніть кнопку спеціальних можливостей <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> унизу екрана.\n\nЩоб переключитися між функціями, натисніть і утримуйте кнопку спеціальних можливостей."</string>
<string name="accessibility_shortcut_edit_dialog_summary_software_gesture" msgid="8292555254353761635">"Провести двома пальцями знизу вгору по екрану.\n\nЩоб переключитися між функціями, проведіть двома пальцями вгору й утримуйте екран."</string>
<string name="accessibility_shortcut_edit_dialog_summary_software_gesture_talkback" msgid="84483464524360845">"Провести по екрану знизу вгору трьома пальцями.\n\nЩоб переключитися між функціями, проведіть по екрану знизу вгору трьома пальцями й утримуйте їх."</string>
<string name="accessibility_shortcut_edit_dialog_title_hardware" msgid="2356853121810443026">"Утримувати клавіші гучності"</string>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 4d2dc3d..5643083 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -11816,6 +11816,8 @@
<string name="network_connection_errorstate_dialog_message">Something came up. The application has cancelled the request to choose a device.</string>
<!-- Toast message when connection is successful [CHAR LIMIT=30] -->
<string name="network_connection_connect_successful">Connection successful</string>
+ <!-- Toast message when connection is failure [CHAR LIMIT=30] -->
+ <string name="network_connection_connect_failure">Connection failed</string>
<!-- Neutral button for Network connection request Dialog [CHAR LIMIT=30] -->
<string name="network_connection_request_dialog_showall">Show all</string>
<!-- Message for Network connection searching progress Dialog. Searching for wifi ap. [CHAR LIMIT=40] -->
diff --git a/src/com/android/settings/applications/AppStorageSettings.java b/src/com/android/settings/applications/AppStorageSettings.java
index f07c66c..8a54c73 100644
--- a/src/com/android/settings/applications/AppStorageSettings.java
+++ b/src/com/android/settings/applications/AppStorageSettings.java
@@ -54,6 +54,7 @@
import com.android.settings.Utils;
import com.android.settings.deviceinfo.StorageWizardMoveConfirm;
import com.android.settingslib.RestrictedLockUtils;
+import com.android.settingslib.applications.AppUtils;
import com.android.settingslib.applications.ApplicationsState.Callbacks;
import com.android.settingslib.applications.StorageStatsSource;
import com.android.settingslib.applications.StorageStatsSource.AppStorageStats;
@@ -321,7 +322,7 @@
.setButton1OnClickListener(v -> handleClearDataClick());
}
- if (mAppsControlDisallowedBySystem) {
+ if (mAppsControlDisallowedBySystem || AppUtils.isMainlineModule(mPm, mPackageName)) {
mButtonsPref.setButton1Enabled(false);
}
}
@@ -579,7 +580,7 @@
.setButton2OnClickListener(v -> handleClearCacheClick());
}
}
- if (mAppsControlDisallowedBySystem) {
+ if (mAppsControlDisallowedBySystem || AppUtils.isMainlineModule(mPm, mPackageName)) {
mButtonsPref.setButton1Enabled(false).setButton2Enabled(false);
}
}
diff --git a/src/com/android/settings/applications/appinfo/AppButtonsPreferenceController.java b/src/com/android/settings/applications/appinfo/AppButtonsPreferenceController.java
index 147c412..36ad2ce 100644
--- a/src/com/android/settings/applications/appinfo/AppButtonsPreferenceController.java
+++ b/src/com/android/settings/applications/appinfo/AppButtonsPreferenceController.java
@@ -744,7 +744,9 @@
}
private boolean isSystemModule() {
- return mAppEntry != null && AppUtils.isSystemModule(mContext, mAppEntry.info.packageName);
+ return mAppEntry != null
+ && (AppUtils.isSystemModule(mContext, mAppEntry.info.packageName)
+ || AppUtils.isMainlineModule(mPm, mAppEntry.info.packageName));
}
/**
diff --git a/src/com/android/settings/applications/appinfo/AppInstallerInfoPreferenceController.java b/src/com/android/settings/applications/appinfo/AppInstallerInfoPreferenceController.java
index 2e11953..5e99e8b 100644
--- a/src/com/android/settings/applications/appinfo/AppInstallerInfoPreferenceController.java
+++ b/src/com/android/settings/applications/appinfo/AppInstallerInfoPreferenceController.java
@@ -43,7 +43,7 @@
return DISABLED_FOR_USER;
}
- if (AppUtils.isMainlineModule(mContext, mPackageName)) {
+ if (AppUtils.isMainlineModule(mContext.getPackageManager(), mPackageName)) {
return DISABLED_FOR_USER;
}
diff --git a/src/com/android/settings/network/TetherProvisioningActivity.java b/src/com/android/settings/network/TetherProvisioningActivity.java
index 09efe48..bb61546 100644
--- a/src/com/android/settings/network/TetherProvisioningActivity.java
+++ b/src/com/android/settings/network/TetherProvisioningActivity.java
@@ -16,13 +16,19 @@
package com.android.settings.network;
+import static android.net.TetheringConstants.EXTRA_ADD_TETHER_TYPE;
+import static android.net.TetheringConstants.EXTRA_PROVISION_CALLBACK;
+import static android.net.TetheringConstants.EXTRA_RUN_PROVISION;
+import static android.net.TetheringManager.TETHERING_INVALID;
+import static android.net.TetheringManager.TETHER_ERROR_NO_ERROR;
+import static android.net.TetheringManager.TETHER_ERROR_PROVISIONING_FAILED;
+import static android.telephony.SubscriptionManager.EXTRA_SUBSCRIPTION_INDEX;
+import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID;
+
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.res.Resources;
-import android.net.ConnectivityManager;
-import android.net.TetheringConstants;
-import android.net.TetheringManager;
import android.os.Bundle;
import android.os.ResultReceiver;
import android.os.UserHandle;
@@ -52,23 +58,19 @@
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- mResultReceiver = (ResultReceiver)getIntent().getParcelableExtra(
- ConnectivityManager.EXTRA_PROVISION_CALLBACK);
+ mResultReceiver = (ResultReceiver) getIntent().getParcelableExtra(EXTRA_PROVISION_CALLBACK);
- final int tetherType = getIntent().getIntExtra(ConnectivityManager.EXTRA_ADD_TETHER_TYPE,
- ConnectivityManager.TETHERING_INVALID);
+ final int tetherType = getIntent().getIntExtra(EXTRA_ADD_TETHER_TYPE, TETHERING_INVALID);
- final int tetherSubId = getIntent().getIntExtra(EXTRA_SUBID,
- SubscriptionManager.INVALID_SUBSCRIPTION_ID);
+ final int tetherSubId = getIntent().getIntExtra(EXTRA_SUBID, INVALID_SUBSCRIPTION_ID);
final int subId = SubscriptionManager.getActiveDataSubscriptionId();
if (tetherSubId != subId) {
Log.e(TAG, "This Provisioning request is outdated, current subId: " + subId);
- mResultReceiver.send(TetheringManager.TETHER_ERROR_PROVISIONING_FAILED, null);
+ mResultReceiver.send(TETHER_ERROR_PROVISIONING_FAILED, null);
finish();
return;
}
- String[] provisionApp = getIntent().getStringArrayExtra(
- TetheringConstants.EXTRA_RUN_PROVISION);
+ String[] provisionApp = getIntent().getStringArrayExtra(EXTRA_RUN_PROVISION);
if (provisionApp == null || provisionApp.length < 2) {
final Resources res = Utils.getResourcesForSubId(this, subId);
provisionApp = res.getStringArray(
@@ -77,8 +79,8 @@
final Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setClassName(provisionApp[0], provisionApp[1]);
intent.putExtra(EXTRA_TETHER_TYPE, tetherType);
- intent.putExtra(SubscriptionManager.EXTRA_SUBSCRIPTION_INDEX, subId);
- intent.putExtra(ConnectivityManager.EXTRA_PROVISION_CALLBACK, mResultReceiver);
+ intent.putExtra(EXTRA_SUBSCRIPTION_INDEX, subId);
+ intent.putExtra(EXTRA_PROVISION_CALLBACK, mResultReceiver);
if (DEBUG) {
Log.d(TAG, "Starting provisioning app: " + provisionApp[0] + "." + provisionApp[1]);
}
@@ -86,7 +88,7 @@
if (getPackageManager().queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY).isEmpty()) {
Log.e(TAG, "Provisioning app is configured, but not available.");
- mResultReceiver.send(TetheringManager.TETHER_ERROR_PROVISIONING_FAILED, null);
+ mResultReceiver.send(TETHER_ERROR_PROVISIONING_FAILED, null);
finish();
return;
}
@@ -99,9 +101,8 @@
super.onActivityResult(requestCode, resultCode, intent);
if (requestCode == PROVISION_REQUEST) {
if (DEBUG) Log.d(TAG, "Got result from app: " + resultCode);
- int result = resultCode == Activity.RESULT_OK ?
- TetheringManager.TETHER_ERROR_NO_ERROR :
- TetheringManager.TETHER_ERROR_PROVISIONING_FAILED;
+ int result = resultCode == Activity.RESULT_OK
+ ? TETHER_ERROR_NO_ERROR : TETHER_ERROR_PROVISIONING_FAILED;
mResultReceiver.send(result, null);
finish();
}
diff --git a/src/com/android/settings/network/telephony/CellInfoUtil.java b/src/com/android/settings/network/telephony/CellInfoUtil.java
index 7412428..d7d2b18 100644
--- a/src/com/android/settings/network/telephony/CellInfoUtil.java
+++ b/src/com/android/settings/network/telephony/CellInfoUtil.java
@@ -33,6 +33,9 @@
import android.text.TextDirectionHeuristics;
import android.text.TextUtils;
+import com.android.internal.telephony.OperatorInfo;
+
+import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
@@ -99,6 +102,35 @@
return cellId;
}
+ /**
+ * Creates a CellInfo object from OperatorInfo. GsmCellInfo is used here only because
+ * operatorInfo does not contain technology type while CellInfo is an abstract object that
+ * requires to specify technology type. It doesn't matter which CellInfo type to use here, since
+ * we only want to wrap the operator info and PLMN to a CellInfo object.
+ */
+ public static CellInfo convertOperatorInfoToCellInfo(OperatorInfo operatorInfo) {
+ final String operatorNumeric = operatorInfo.getOperatorNumeric();
+ String mcc = null;
+ String mnc = null;
+ if (operatorNumeric != null && operatorNumeric.matches("^[0-9]{5,6}$")) {
+ mcc = operatorNumeric.substring(0, 3);
+ mnc = operatorNumeric.substring(3);
+ }
+ final CellIdentityGsm cig = new CellIdentityGsm(
+ Integer.MAX_VALUE /* lac */,
+ Integer.MAX_VALUE /* cid */,
+ Integer.MAX_VALUE /* arfcn */,
+ Integer.MAX_VALUE /* bsic */,
+ mcc,
+ mnc,
+ operatorInfo.getOperatorAlphaLong(),
+ operatorInfo.getOperatorAlphaShort(),
+ Collections.emptyList());
+
+ final CellInfoGsm ci = new CellInfoGsm();
+ ci.setCellIdentity(cig);
+ return ci;
+ }
/** Convert a list of cellInfos to readable string without sensitive info. */
public static String cellInfoListToString(List<CellInfo> cellInfos) {
diff --git a/src/com/android/settings/network/telephony/NetworkOperatorPreference.java b/src/com/android/settings/network/telephony/NetworkOperatorPreference.java
index 7173ccc..97894b1 100644
--- a/src/com/android/settings/network/telephony/NetworkOperatorPreference.java
+++ b/src/com/android/settings/network/telephony/NetworkOperatorPreference.java
@@ -57,6 +57,7 @@
private List<String> mForbiddenPlmns;
private int mLevel = LEVEL_NONE;
private boolean mShow4GForLTE;
+ private boolean mUseNewApi;
public NetworkOperatorPreference(Context context, CellInfo cellinfo,
List<String> forbiddenPlmns, boolean show4GForLTE) {
@@ -75,6 +76,8 @@
super(context);
mForbiddenPlmns = forbiddenPlmns;
mShow4GForLTE = show4GForLTE;
+ mUseNewApi = context.getResources().getBoolean(
+ com.android.internal.R.bool.config_enableNewAutoSelectNetworkUI);
}
/**
@@ -215,7 +218,7 @@
}
private void updateIcon(int level) {
- if (level < 0 || level >= NUM_SIGNAL_STRENGTH_BINS) {
+ if (!mUseNewApi || level < 0 || level >= NUM_SIGNAL_STRENGTH_BINS) {
return;
}
final Context context = getContext();
diff --git a/src/com/android/settings/network/telephony/NetworkScanHelper.java b/src/com/android/settings/network/telephony/NetworkScanHelper.java
index fe5b9e1..524a737 100644
--- a/src/com/android/settings/network/telephony/NetworkScanHelper.java
+++ b/src/com/android/settings/network/telephony/NetworkScanHelper.java
@@ -16,6 +16,7 @@
package com.android.settings.network.telephony;
+import android.annotation.IntDef;
import android.telephony.AccessNetworkConstants.AccessNetworkType;
import android.telephony.CellInfo;
import android.telephony.NetworkScan;
@@ -25,9 +26,21 @@
import android.telephony.TelephonyScanManager;
import android.util.Log;
+import com.android.internal.telephony.CellNetworkScanResult;
+
+import com.google.common.util.concurrent.FutureCallback;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.MoreExecutors;
+import com.google.common.util.concurrent.SettableFuture;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.List;
+import java.util.concurrent.CancellationException;
import java.util.concurrent.Executor;
+import java.util.stream.Collectors;
/**
* A helper class that builds the common interface and performs the network scan for two different
@@ -70,6 +83,33 @@
void onError(int errorCode);
}
+ @Retention(RetentionPolicy.SOURCE)
+ @IntDef({NETWORK_SCAN_TYPE_WAIT_FOR_ALL_RESULTS, NETWORK_SCAN_TYPE_INCREMENTAL_RESULTS})
+ public @interface NetworkQueryType {}
+
+ /**
+ * Performs the network scan using {@link TelephonyManager#getAvailableNetworks()}. The network
+ * scan results won't be returned to the caller until the network scan is completed.
+ *
+ * <p> This is typically used when the modem doesn't support the new network scan api
+ * {@link TelephonyManager#requestNetworkScan(
+ * NetworkScanRequest, Executor, TelephonyScanManager.NetworkScanCallback)}.
+ */
+ public static final int NETWORK_SCAN_TYPE_WAIT_FOR_ALL_RESULTS = 1;
+
+ /**
+ * Performs the network scan using {@link TelephonyManager#requestNetworkScan(
+ * NetworkScanRequest, Executor, TelephonyScanManager.NetworkScanCallback)} The network scan
+ * results will be returned to the caller periodically in a small time window until the network
+ * scan is completed. The complete results should be returned in the last called of
+ * {@link NetworkScanCallback#onResults(List)}.
+ *
+ * <p> This is recommended to be used if modem supports the new network scan api
+ * {@link TelephonyManager#requestNetworkScan(
+ * NetworkScanRequest, Executor, TelephonyScanManager.NetworkScanCallback)}
+ */
+ public static final int NETWORK_SCAN_TYPE_INCREMENTAL_RESULTS = 2;
+
/** The constants below are used in the async network scan. */
private static final boolean INCREMENTAL_RESULTS = true;
private static final int SEARCH_PERIODICITY_SEC = 5;
@@ -83,6 +123,9 @@
private NetworkScan mNetworkScanRequester;
+ /** Callbacks for sync network scan */
+ private ListenableFuture<List<CellInfo>> mNetworkScanFuture;
+
public NetworkScanHelper(TelephonyManager tm, NetworkScanCallback callback, Executor executor) {
mTelephonyManager = tm;
mNetworkScanCallback = callback;
@@ -139,38 +182,63 @@
}
/**
- * Request a network scan.
+ * Performs a network scan for the given type {@code type}.
+ * {@link #NETWORK_SCAN_TYPE_INCREMENTAL_RESULTS} is recommended if modem supports
+ * {@link TelephonyManager#requestNetworkScan(
+ * NetworkScanRequest, Executor, TelephonyScanManager.NetworkScanCallback)}.
*
- * Performs the network scan using {@link TelephonyManager#requestNetworkScan(
- * NetworkScanRequest, Executor, TelephonyScanManager.NetworkScanCallback)} The network scan
- * results will be returned to the caller periodically in a small time window until the network
- * scan is completed. The complete results should be returned in the last called of
- * {@link NetworkScanCallback#onResults(List)}.
+ * @param type used to tell which network scan API should be used.
*/
- public void startNetworkScan() {
- if (mNetworkScanRequester != null) {
- return;
- }
- mNetworkScanRequester = mTelephonyManager.requestNetworkScan(
- createNetworkScanForPreferredAccessNetworks(),
- mExecutor,
- mInternalNetworkScanCallback);
- if (mNetworkScanRequester == null) {
- onError(NetworkScan.ERROR_RADIO_INTERFACE_ERROR);
+ public void startNetworkScan(@NetworkQueryType int type) {
+ if (type == NETWORK_SCAN_TYPE_WAIT_FOR_ALL_RESULTS) {
+ mNetworkScanFuture = SettableFuture.create();
+ Futures.addCallback(mNetworkScanFuture, new FutureCallback<List<CellInfo>>() {
+ @Override
+ public void onSuccess(List<CellInfo> result) {
+ onResults(result);
+ onComplete();
+ }
+
+ @Override
+ public void onFailure(Throwable t) {
+ if (t instanceof CancellationException) {
+ return;
+ }
+ int errCode = Integer.parseInt(t.getMessage());
+ onError(errCode);
+ }
+ }, MoreExecutors.directExecutor());
+ mExecutor.execute(new NetworkScanSyncTask(
+ mTelephonyManager, (SettableFuture) mNetworkScanFuture));
+ } else if (type == NETWORK_SCAN_TYPE_INCREMENTAL_RESULTS) {
+ if (mNetworkScanRequester != null) {
+ return;
+ }
+ mNetworkScanRequester = mTelephonyManager.requestNetworkScan(
+ createNetworkScanForPreferredAccessNetworks(),
+ mExecutor,
+ mInternalNetworkScanCallback);
+ if (mNetworkScanRequester == null) {
+ onError(NetworkScan.ERROR_RADIO_INTERFACE_ERROR);
+ }
}
}
/**
- * Stops the network scan.
- *
- * Use this method to stop an ongoing scan. When user requests a new scan, a {@link NetworkScan}
- * object will be returned, and the user can stop the scan by calling this method.
+ * The network scan of type {@link #NETWORK_SCAN_TYPE_WAIT_FOR_ALL_RESULTS} can't be stopped,
+ * however, the result of the current network scan won't be returned to the callback after
+ * calling this method.
*/
public void stopNetworkQuery() {
if (mNetworkScanRequester != null) {
mNetworkScanRequester.stopScan();
mNetworkScanRequester = null;
}
+
+ if (mNetworkScanFuture != null) {
+ mNetworkScanFuture.cancel(true /* mayInterruptIfRunning */);
+ mNetworkScanFuture = null;
+ }
}
private void onResults(List<CellInfo> cellInfos) {
@@ -185,6 +253,23 @@
mNetworkScanCallback.onError(errCode);
}
+ /**
+ * Converts the status code of {@link CellNetworkScanResult} to one of the
+ * {@link NetworkScan.ScanErrorCode}.
+ * @param errCode status code from {@link CellNetworkScanResult}.
+ *
+ * @return one of the scan error code from {@link NetworkScan.ScanErrorCode}.
+ */
+ private static int convertToScanErrorCode(int errCode) {
+ switch (errCode) {
+ case CellNetworkScanResult.STATUS_RADIO_NOT_AVAILABLE:
+ return NetworkScan.ERROR_RADIO_INTERFACE_ERROR;
+ case CellNetworkScanResult.STATUS_RADIO_GENERIC_FAILURE:
+ default:
+ return NetworkScan.ERROR_MODEM_ERROR;
+ }
+ }
+
private final class NetworkScanCallbackImpl extends TelephonyScanManager.NetworkScanCallback {
public void onResults(List<CellInfo> results) {
Log.d(TAG, "Async scan onResults() results = "
@@ -202,4 +287,35 @@
NetworkScanHelper.this.onError(errCode);
}
}
+
+ private static final class NetworkScanSyncTask implements Runnable {
+ private final SettableFuture<List<CellInfo>> mCallback;
+ private final TelephonyManager mTelephonyManager;
+
+ NetworkScanSyncTask(
+ TelephonyManager telephonyManager, SettableFuture<List<CellInfo>> callback) {
+ mTelephonyManager = telephonyManager;
+ mCallback = callback;
+ }
+
+ @Override
+ public void run() {
+ final CellNetworkScanResult result = mTelephonyManager.getAvailableNetworks();
+ if (result.getStatus() == CellNetworkScanResult.STATUS_SUCCESS) {
+ final List<CellInfo> cellInfos = result.getOperators()
+ .stream()
+ .map(operatorInfo
+ -> CellInfoUtil.convertOperatorInfoToCellInfo(operatorInfo))
+ .collect(Collectors.toList());
+ Log.d(TAG, "Sync network scan completed, cellInfos = "
+ + CellInfoUtil.cellInfoListToString(cellInfos));
+ mCallback.set(cellInfos);
+ } else {
+ final Throwable error = new Throwable(
+ Integer.toString(convertToScanErrorCode(result.getStatus())));
+ mCallback.setException(error);
+ Log.d(TAG, "Sync network scan error, ex = " + error);
+ }
+ }
+ }
}
diff --git a/src/com/android/settings/network/telephony/NetworkSelectSettings.java b/src/com/android/settings/network/telephony/NetworkSelectSettings.java
index 7877063..3f18928 100644
--- a/src/com/android/settings/network/telephony/NetworkSelectSettings.java
+++ b/src/com/android/settings/network/telephony/NetworkSelectSettings.java
@@ -93,6 +93,8 @@
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
+ mUseNewApi = getContext().getResources().getBoolean(
+ com.android.internal.R.bool.config_enableNewAutoSelectNetworkUI);
mSubId = getArguments().getInt(Settings.EXTRA_SUB_ID);
mPreferenceCategory = findPreference(PREF_KEY_NETWORK_OPERATORS);
@@ -464,7 +466,10 @@
if (mNetworkScanHelper != null) {
mRequestIdManualNetworkScan = getNewRequestId();
mWaitingForNumberOfScanResults = MIN_NUMBER_OF_SCAN_REQUIRED;
- mNetworkScanHelper.startNetworkScan();
+ mNetworkScanHelper.startNetworkScan(
+ mUseNewApi
+ ? NetworkScanHelper.NETWORK_SCAN_TYPE_INCREMENTAL_RESULTS
+ : NetworkScanHelper.NETWORK_SCAN_TYPE_WAIT_FOR_ALL_RESULTS);
}
}
diff --git a/src/com/android/settings/wifi/NetworkRequestDialogActivity.java b/src/com/android/settings/wifi/NetworkRequestDialogActivity.java
index 49e167e..90a0de3 100644
--- a/src/com/android/settings/wifi/NetworkRequestDialogActivity.java
+++ b/src/com/android/settings/wifi/NetworkRequestDialogActivity.java
@@ -216,13 +216,12 @@
@Override
public void onUserSelectionConnectFailure(WifiConfiguration wificonfiguration) {
- if (mIsSpecifiedSsid) {
- showSingleSsidRequestDialog(
- WifiInfo.sanitizeSsid(mMatchedConfig.SSID), true /* isTryAgain */);
- return;
+ if (!isFinishing()) {
+ Toast.makeText(this, R.string.network_connection_connect_failure, Toast.LENGTH_SHORT)
+ .show();
+ setResult(RESULT_OK);
+ finish();
}
-
- mDialogFragment.onUserSelectionConnectFailure(wificonfiguration);
}
// Called when user click "Connect" button. Called by
diff --git a/src/com/android/settings/wifi/NetworkRequestDialogBaseFragment.java b/src/com/android/settings/wifi/NetworkRequestDialogBaseFragment.java
index c17bacd..f2e24ae 100644
--- a/src/com/android/settings/wifi/NetworkRequestDialogBaseFragment.java
+++ b/src/com/android/settings/wifi/NetworkRequestDialogBaseFragment.java
@@ -21,7 +21,6 @@
import android.content.DialogInterface;
import android.content.Intent;
import android.net.wifi.ScanResult;
-import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager.NetworkRequestUserSelectionCallback;
import androidx.annotation.NonNull;
@@ -91,7 +90,4 @@
protected void onMatch(List<ScanResult> scanResults) {
}
-
- protected void onUserSelectionConnectFailure(WifiConfiguration wificonfiguration) {
- }
}
diff --git a/src/com/android/settings/wifi/NetworkRequestDialogFragment.java b/src/com/android/settings/wifi/NetworkRequestDialogFragment.java
index edaa4d9..f179df0 100644
--- a/src/com/android/settings/wifi/NetworkRequestDialogFragment.java
+++ b/src/com/android/settings/wifi/NetworkRequestDialogFragment.java
@@ -324,11 +324,6 @@
}
}
- @Override
- public void onUserSelectionConnectFailure(WifiConfiguration wificonfiguration) {
- // Do nothing when selection is failed, let user could try again easily.
- }
-
@VisibleForTesting
final class FilterWifiTracker {
private final List<String> mAccessPointKeys;
diff --git a/src/com/android/settings/wifi/tether/HotspotOffReceiver.java b/src/com/android/settings/wifi/tether/HotspotOffReceiver.java
deleted file mode 100644
index fcbf888..0000000
--- a/src/com/android/settings/wifi/tether/HotspotOffReceiver.java
+++ /dev/null
@@ -1,55 +0,0 @@
-
-package com.android.settings.wifi.tether;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.net.ConnectivityManager;
-import android.net.wifi.WifiManager;
-import android.util.Log;
-
-/**
- * This receiver catches when quick settings turns off the hotspot, so we can
- * cancel the alarm in that case. All other cancels are handled in tethersettings.
- */
-public class HotspotOffReceiver extends BroadcastReceiver {
-
- private static final String TAG = "HotspotOffReceiver";
- private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
-
- private Context mContext;
- private boolean mRegistered;
-
- public HotspotOffReceiver(Context context) {
- mContext = context;
- }
-
- @Override
- public void onReceive(Context context, Intent intent) {
- if (WifiManager.WIFI_AP_STATE_CHANGED_ACTION.equals(intent.getAction())) {
- WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
- if (wifiManager.getWifiApState() == WifiManager.WIFI_AP_STATE_DISABLED) {
- if (DEBUG) Log.d(TAG, "TetherService.cancelRecheckAlarmIfNecessary called");
- // The hotspot has been turned off, we don't need to recheck tethering.
- TetherService.cancelRecheckAlarmIfNecessary(
- context, ConnectivityManager.TETHERING_WIFI);
- }
- }
- }
-
- public void register() {
- if (!mRegistered) {
- mContext.registerReceiver(this,
- new IntentFilter(WifiManager.WIFI_AP_STATE_CHANGED_ACTION));
- mRegistered = true;
- }
- }
-
- public void unregister() {
- if (mRegistered) {
- mContext.unregisterReceiver(this);
- mRegistered = false;
- }
- }
-}
diff --git a/src/com/android/settings/wifi/tether/TetherService.java b/src/com/android/settings/wifi/tether/TetherService.java
index e01a246..72ea1a9 100644
--- a/src/com/android/settings/wifi/tether/TetherService.java
+++ b/src/com/android/settings/wifi/tether/TetherService.java
@@ -16,15 +16,24 @@
package com.android.settings.wifi.tether;
+import static android.net.TetheringConstants.EXTRA_ADD_TETHER_TYPE;
+import static android.net.TetheringConstants.EXTRA_PROVISION_CALLBACK;
+import static android.net.TetheringConstants.EXTRA_REM_TETHER_TYPE;
+import static android.net.TetheringConstants.EXTRA_RUN_PROVISION;
+import static android.net.TetheringManager.TETHERING_BLUETOOTH;
+import static android.net.TetheringManager.TETHERING_ETHERNET;
+import static android.net.TetheringManager.TETHERING_INVALID;
+import static android.net.TetheringManager.TETHERING_USB;
+import static android.net.TetheringManager.TETHERING_WIFI;
+import static android.net.TetheringManager.TETHER_ERROR_NO_ERROR;
+import static android.net.TetheringManager.TETHER_ERROR_PROVISIONING_FAILED;
+import static android.net.TetheringManager.TETHER_ERROR_UNKNOWN_IFACE;
+import static android.telephony.SubscriptionManager.EXTRA_SUBSCRIPTION_INDEX;
+import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID;
+
import android.app.Activity;
-import android.app.AlarmManager;
-import android.app.PendingIntent;
import android.app.Service;
import android.app.usage.UsageStatsManager;
-import android.bluetooth.BluetoothAdapter;
-import android.bluetooth.BluetoothPan;
-import android.bluetooth.BluetoothProfile;
-import android.bluetooth.BluetoothProfile.ServiceListener;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
@@ -33,10 +42,9 @@
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.res.Resources;
-import android.net.ConnectivityManager;
+import android.net.TetheringManager;
import android.os.IBinder;
import android.os.ResultReceiver;
-import android.os.SystemClock;
import android.telephony.SubscriptionManager;
import android.text.TextUtils;
import android.util.ArrayMap;
@@ -74,7 +82,6 @@
private TetherServiceWrapper mWrapper;
private ArrayList<Integer> mCurrentTethers;
private ArrayMap<Integer, List<ResultReceiver>> mPendingCallbacks;
- private HotspotOffReceiver mHotspotReceiver;
@Override
public IBinder onBind(Intent intent) {
@@ -93,18 +100,16 @@
mCurrentTethers = stringToTethers(prefs.getString(KEY_TETHERS, ""));
mCurrentTypeIndex = 0;
mPendingCallbacks = new ArrayMap<>(3);
- mPendingCallbacks.put(ConnectivityManager.TETHERING_WIFI, new ArrayList<ResultReceiver>());
- mPendingCallbacks.put(ConnectivityManager.TETHERING_USB, new ArrayList<ResultReceiver>());
- mPendingCallbacks.put(
- ConnectivityManager.TETHERING_BLUETOOTH, new ArrayList<ResultReceiver>());
- mHotspotReceiver = new HotspotOffReceiver(this);
+ mPendingCallbacks.put(TETHERING_WIFI, new ArrayList<ResultReceiver>());
+ mPendingCallbacks.put(TETHERING_USB, new ArrayList<ResultReceiver>());
+ mPendingCallbacks.put(TETHERING_BLUETOOTH, new ArrayList<ResultReceiver>());
+ mPendingCallbacks.put(TETHERING_ETHERNET, new ArrayList<ResultReceiver>());
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (intent.hasExtra(EXTRA_SUBID)) {
- final int tetherSubId = intent.getIntExtra(EXTRA_SUBID,
- SubscriptionManager.INVALID_SUBSCRIPTION_ID);
+ final int tetherSubId = intent.getIntExtra(EXTRA_SUBID, INVALID_SUBSCRIPTION_ID);
final int subId = getTetherServiceWrapper().getActiveDataSubscriptionId();
if (tetherSubId != subId) {
Log.e(TAG, "This Provisioning request is outdated, current subId: " + subId);
@@ -114,18 +119,16 @@
return START_NOT_STICKY;
}
}
- if (intent.hasExtra(ConnectivityManager.EXTRA_ADD_TETHER_TYPE)) {
- int type = intent.getIntExtra(ConnectivityManager.EXTRA_ADD_TETHER_TYPE,
- ConnectivityManager.TETHERING_INVALID);
- ResultReceiver callback =
- intent.getParcelableExtra(ConnectivityManager.EXTRA_PROVISION_CALLBACK);
+ if (intent.hasExtra(EXTRA_ADD_TETHER_TYPE)) {
+ int type = intent.getIntExtra(EXTRA_ADD_TETHER_TYPE, TETHERING_INVALID);
+ ResultReceiver callback = intent.getParcelableExtra(EXTRA_PROVISION_CALLBACK);
if (callback != null) {
List<ResultReceiver> callbacksForType = mPendingCallbacks.get(type);
if (callbacksForType != null) {
callbacksForType.add(callback);
} else {
// Invalid tether type. Just ignore this request and report failure.
- callback.send(ConnectivityManager.TETHER_ERROR_UNKNOWN_IFACE, null);
+ callback.send(TETHER_ERROR_UNKNOWN_IFACE, null);
stopSelf();
return START_NOT_STICKY;
}
@@ -137,30 +140,20 @@
}
}
- if (intent.hasExtra(ConnectivityManager.EXTRA_REM_TETHER_TYPE)) {
+ if (intent.hasExtra(EXTRA_REM_TETHER_TYPE)) {
if (!mInProvisionCheck) {
- int type = intent.getIntExtra(ConnectivityManager.EXTRA_REM_TETHER_TYPE,
- ConnectivityManager.TETHERING_INVALID);
+ int type = intent.getIntExtra(EXTRA_REM_TETHER_TYPE, TETHERING_INVALID);
int index = mCurrentTethers.indexOf(type);
if (DEBUG) Log.d(TAG, "Removing tether " + type + ", index " + index);
if (index >= 0) {
removeTypeAtIndex(index);
}
- cancelAlarmIfNecessary();
} else {
- if (DEBUG) Log.d(TAG, "Don't cancel alarm during provisioning");
+ if (DEBUG) Log.d(TAG, "Don't remove tether type during provisioning");
}
}
- // Only set the alarm if we have one tether, meaning the one just added,
- // to avoid setting it when it was already set previously for another
- // type.
- if (intent.getBooleanExtra(ConnectivityManager.EXTRA_SET_ALARM, false)
- && mCurrentTethers.size() == 1) {
- scheduleAlarm();
- }
-
- if (intent.getBooleanExtra(ConnectivityManager.EXTRA_RUN_PROVISION, false)) {
+ if (intent.getBooleanExtra(EXTRA_RUN_PROVISION, false)) {
startProvisioning(mCurrentTypeIndex);
} else if (!mInProvisionCheck) {
// If we aren't running any provisioning, no reason to stay alive.
@@ -182,16 +175,11 @@
SharedPreferences prefs = getSharedPreferences(PREFS, MODE_PRIVATE);
prefs.edit().putString(KEY_TETHERS, tethersToString(mCurrentTethers)).commit();
- unregisterReceivers();
+ unregisterReceiver(mReceiver);
if (DEBUG) Log.d(TAG, "Destroying TetherService");
super.onDestroy();
}
- private void unregisterReceivers() {
- unregisterReceiver(mReceiver);
- mHotspotReceiver.unregister();
- }
-
private void removeTypeAtIndex(int index) {
mCurrentTethers.remove(index);
// If we are currently in the middle of a check, we may need to adjust the
@@ -202,11 +190,6 @@
}
}
- @VisibleForTesting
- void setHotspotOffReceiver(HotspotOffReceiver receiver) {
- mHotspotReceiver = receiver;
- }
-
private ArrayList<Integer> stringToTethers(String tethersStr) {
ArrayList<Integer> ret = new ArrayList<Integer>();
if (TextUtils.isEmpty(tethersStr)) return ret;
@@ -231,32 +214,9 @@
return buffer.toString();
}
- private void disableWifiTethering() {
- ConnectivityManager cm =
- (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
- cm.stopTethering(ConnectivityManager.TETHERING_WIFI);
- }
-
- private void disableUsbTethering() {
- ConnectivityManager cm =
- (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
- cm.setUsbTethering(false);
- }
-
- private void disableBtTethering() {
- final BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
- if (adapter != null) {
- adapter.getProfileProxy(this, new ServiceListener() {
- @Override
- public void onServiceDisconnected(int profile) { }
-
- @Override
- public void onServiceConnected(int profile, BluetoothProfile proxy) {
- ((BluetoothPan) proxy).setBluetoothTethering(false);
- adapter.closeProfileProxy(BluetoothProfile.PAN, proxy);
- }
- }, BluetoothProfile.PAN);
- }
+ private void disableTethering(final int tetheringType) {
+ final TetheringManager tm = (TetheringManager) getSystemService(Context.TETHERING_SERVICE);
+ tm.stopTethering(tetheringType);
}
private void startProvisioning(int index) {
@@ -279,7 +239,7 @@
Intent intent = new Intent(provisionAction);
int type = mCurrentTethers.get(index);
intent.putExtra(TETHER_CHOICE, type);
- intent.putExtra(SubscriptionManager.EXTRA_SUBSCRIPTION_INDEX, subId);
+ intent.putExtra(EXTRA_SUBSCRIPTION_INDEX, subId);
intent.setFlags(Intent.FLAG_RECEIVER_FOREGROUND
| Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND);
@@ -304,55 +264,13 @@
}
}
- @VisibleForTesting
- void scheduleAlarm() {
- Intent intent = new Intent(this, TetherService.class);
- intent.putExtra(ConnectivityManager.EXTRA_RUN_PROVISION, true);
-
- PendingIntent pendingIntent = PendingIntent.getService(this, 0, intent, 0);
- AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
- int period = getResourceForActiveDataSubId().getInteger(
- com.android.internal.R.integer.config_mobile_hotspot_provision_check_period);
- long periodMs = period * MS_PER_HOUR;
- long firstTime = SystemClock.elapsedRealtime() + periodMs;
- if (DEBUG) Log.d(TAG, "Scheduling alarm at interval " + periodMs);
- alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME, firstTime, periodMs,
- pendingIntent);
- mHotspotReceiver.register();
- }
-
- /**
- * Cancels the recheck alarm only if no tethering is currently active.
- *
- * Runs in the background, to get access to bluetooth service that takes time to bind.
- */
- public static void cancelRecheckAlarmIfNecessary(final Context context, int type) {
- Intent intent = new Intent(context, TetherService.class);
- intent.putExtra(ConnectivityManager.EXTRA_REM_TETHER_TYPE, type);
- context.startService(intent);
- }
-
- @VisibleForTesting
- void cancelAlarmIfNecessary() {
- if (mCurrentTethers.size() != 0) {
- if (DEBUG) Log.d(TAG, "Tethering still active, not cancelling alarm");
- return;
- }
- Intent intent = new Intent(this, TetherService.class);
- PendingIntent pendingIntent = PendingIntent.getService(this, 0, intent, 0);
- AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
- alarmManager.cancel(pendingIntent);
- if (DEBUG) Log.d(TAG, "Tethering no longer active, canceling recheck");
- mHotspotReceiver.unregister();
- }
-
private void fireCallbacksForType(int type, int result) {
List<ResultReceiver> callbacksForType = mPendingCallbacks.get(type);
if (callbacksForType == null) {
return;
}
- int errorCode = result == RESULT_OK ? ConnectivityManager.TETHER_ERROR_NO_ERROR :
- ConnectivityManager.TETHER_ERROR_PROVISION_FAILED;
+ int errorCode = result == RESULT_OK ? TETHER_ERROR_NO_ERROR :
+ TETHER_ERROR_PROVISIONING_FAILED;
for (ResultReceiver callback : callbacksForType) {
if (DEBUG) Log.d(TAG, "Firing result: " + errorCode + " to callback");
callback.send(errorCode, null);
@@ -375,19 +293,7 @@
int checkType = mCurrentTethers.get(mCurrentTypeIndex);
mInProvisionCheck = false;
int result = intent.getIntExtra(EXTRA_RESULT, RESULT_DEFAULT);
- if (result != RESULT_OK) {
- switch (checkType) {
- case ConnectivityManager.TETHERING_WIFI:
- disableWifiTethering();
- break;
- case ConnectivityManager.TETHERING_BLUETOOTH:
- disableBtTethering();
- break;
- case ConnectivityManager.TETHERING_USB:
- disableUsbTethering();
- break;
- }
- }
+ if (result != RESULT_OK) disableTethering(checkType);
fireCallbacksForType(checkType, result);
if (++mCurrentTypeIndex >= mCurrentTethers.size()) {
diff --git a/tests/robotests/src/com/android/settings/applications/AppStorageSettingsTest.java b/tests/robotests/src/com/android/settings/applications/AppStorageSettingsTest.java
index 3517702..2027ace 100644
--- a/tests/robotests/src/com/android/settings/applications/AppStorageSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/applications/AppStorageSettingsTest.java
@@ -16,9 +16,9 @@
package com.android.settings.applications;
+import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.nullable;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.mock;
@@ -28,6 +28,10 @@
import static org.mockito.Mockito.when;
import android.content.Context;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.ModuleInfo;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
import android.view.View;
import android.widget.Button;
@@ -51,6 +55,8 @@
private AppStorageSettings mSettings;
private Button mLeftButton;
private Button mRightButton;
+ @Mock
+ private PackageManager mPackageManager;
@Before
public void setUp() {
@@ -58,6 +64,8 @@
mLeftButton = new Button(RuntimeEnvironment.application);
mRightButton = new Button(RuntimeEnvironment.application);
mSettings = spy(new AppStorageSettings());
+ mSettings.mPm = mPackageManager;
+ mSettings.mPackageName = "Package";
mSettings.mSizeController = mSizesController;
mButtonsPref = createMock();
mSettings.mButtonsPref = mButtonsPref;
@@ -77,7 +85,9 @@
}
@Test
- public void updateUiWithSize_noAppStats_shouldDisableClearButtons() {
+ public void updateUiWithSize_noAppStats_shouldDisableClearButtons()
+ throws PackageManager.NameNotFoundException {
+ mockMainlineModule(mSettings.mPackageName, false /* isMainlineModule */);
mSettings.updateUiWithSize(null);
verify(mSizesController).updateUi(nullable(Context.class));
@@ -86,12 +96,15 @@
}
@Test
- public void updateUiWithSize_hasDataAndCache_shouldEnableClearButtons() {
+ public void updateUiWithSize_hasDataAndCache_shouldEnableClearButtons()
+ throws PackageManager.NameNotFoundException {
final AppStorageStats stats = mock(AppStorageStats.class);
when(stats.getCacheBytes()).thenReturn(5000L);
when(stats.getDataBytes()).thenReturn(10000L);
doNothing().when(mSettings).handleClearCacheClick();
doNothing().when(mSettings).handleClearDataClick();
+ mockMainlineModule(mSettings.mPackageName, false /* isMainlineModule */);
+
mSettings.updateUiWithSize(stats);
verify(mButtonsPref).setButton1Enabled(true);
@@ -105,6 +118,22 @@
verify(mSettings).handleClearCacheClick();
}
+ @Test
+ public void updateUiWithSize_mainlineModule_shouldDisableClearButtons()
+ throws PackageManager.NameNotFoundException {
+ final AppStorageStats stats = mock(AppStorageStats.class);
+ when(stats.getCacheBytes()).thenReturn(5000L);
+ when(stats.getDataBytes()).thenReturn(10000L);
+ doNothing().when(mSettings).handleClearCacheClick();
+ doNothing().when(mSettings).handleClearDataClick();
+ mockMainlineModule(mSettings.mPackageName, true /* isMainlineModule */);
+
+
+ mSettings.updateUiWithSize(stats);
+ verify(mButtonsPref).setButton1Enabled(false);
+ verify(mButtonsPref).setButton2Enabled(false);
+ }
+
private ActionButtonsPreference createMock() {
final ActionButtonsPreference pref = mock(ActionButtonsPreference.class);
when(pref.setButton1Text(anyInt())).thenReturn(pref);
@@ -121,5 +150,23 @@
return pref;
}
+
+ private void mockMainlineModule(String packageName, boolean isMainlineModule)
+ throws PackageManager.NameNotFoundException {
+ final PackageInfo packageInfo = new PackageInfo();
+ final ApplicationInfo applicationInfo = new ApplicationInfo();
+ applicationInfo.sourceDir = "apex";
+ packageInfo.applicationInfo = applicationInfo;
+
+ if (isMainlineModule) {
+ when(mPackageManager.getModuleInfo(packageName, 0 /* flags */)).thenReturn(
+ new ModuleInfo());
+ } else {
+ when(mPackageManager.getPackageInfo(packageName, 0 /* flags */)).thenReturn(
+ packageInfo);
+ when(mPackageManager.getModuleInfo(packageName, 0 /* flags */)).thenThrow(
+ new PackageManager.NameNotFoundException());
+ }
+ }
}
diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/AppButtonsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/AppButtonsPreferenceControllerTest.java
index c2bcd1c..a5ac209 100644
--- a/tests/robotests/src/com/android/settings/applications/appinfo/AppButtonsPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/appinfo/AppButtonsPreferenceControllerTest.java
@@ -543,6 +543,19 @@
assertThat(i.getBooleanExtra(KEY_REMOVE_TASK_WHEN_FINISHING, false)).isFalse();
}
+ @Test
+ @Config(shadows = ShadowAppUtils.class)
+ public void isAvailable_nonMainlineModule_isTrue() {
+ assertThat(mController.isAvailable()).isTrue();
+ }
+
+ @Test
+ @Config(shadows = ShadowAppUtils.class)
+ public void isAvailable_mainlineModule_isFalse() {
+ ShadowAppUtils.addMainlineModule(mController.mPackageName);
+ assertThat(mController.isAvailable()).isFalse();
+ }
+
/**
* The test fragment which implements
* {@link ButtonActionDialogFragment.AppButtonsDialogListener}
@@ -597,16 +610,22 @@
public static class ShadowAppUtils {
public static Set<String> sSystemModules = new ArraySet<>();
+ public static Set<String> sMainlineModules = new ArraySet<>();
@Resetter
public static void reset() {
sSystemModules.clear();
+ sMainlineModules.clear();
}
public static void addHiddenModule(String pkg) {
sSystemModules.add(pkg);
}
+ public static void addMainlineModule(String pkg) {
+ sMainlineModules.add(pkg);
+ }
+
@Implementation
protected static boolean isInstant(ApplicationInfo info) {
return false;
@@ -616,5 +635,10 @@
protected static boolean isSystemModule(Context context, String packageName) {
return sSystemModules.contains(packageName);
}
+
+ @Implementation
+ protected static boolean isMainlineModule(PackageManager pm, String packageName) {
+ return sMainlineModules.contains(packageName);
+ }
}
}
diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/AppInstallerInfoPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/AppInstallerInfoPreferenceControllerTest.java
index 00bd5f8..d37a685 100644
--- a/tests/robotests/src/com/android/settings/applications/appinfo/AppInstallerInfoPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/appinfo/AppInstallerInfoPreferenceControllerTest.java
@@ -99,12 +99,15 @@
}
@Test
- public void getAvailabilityStatus_hasAppLabel_shouldReturnAvailable() {
+ public void getAvailabilityStatus_hasAppLabel_shouldReturnAvailable()
+ throws PackageManager.NameNotFoundException {
+ final String packageName = "Package1";
when(mUserManager.isManagedProfile()).thenReturn(false);
when(mAppInfo.loadLabel(mPackageManager)).thenReturn("Label1");
mController = new AppInstallerInfoPreferenceController(mContext, "test_key");
- mController.setPackageName("Package1");
+ mController.setPackageName(packageName);
mController.setParentFragment(mFragment);
+ mockMainlineModule(packageName, false /* isMainlineModule */);
assertThat(mController.getAvailabilityStatus())
.isEqualTo(BasePreferenceController.AVAILABLE);
@@ -153,12 +156,31 @@
@Test
public void getAvailabilityStatus_isMainlineModule_shouldReturnDisabled()
throws PackageManager.NameNotFoundException {
+ final String packageName = "Package";
when(mUserManager.isManagedProfile()).thenReturn(false);
when(mAppInfo.loadLabel(mPackageManager)).thenReturn("Label");
- mController.setPackageName("Package");
- when(mPackageManager.getModuleInfo("Package", 0 /* flags */)).thenReturn(new ModuleInfo());
+ mController.setPackageName(packageName);
+ mockMainlineModule(packageName, true /* isMainlineModule */);
assertThat(mController.getAvailabilityStatus()).isEqualTo(
BasePreferenceController.DISABLED_FOR_USER);
}
+
+ private void mockMainlineModule(String packageName, boolean isMainlineModule)
+ throws PackageManager.NameNotFoundException {
+ final PackageInfo packageInfo = new PackageInfo();
+ final ApplicationInfo applicationInfo = new ApplicationInfo();
+ applicationInfo.sourceDir = "apex";
+ packageInfo.applicationInfo = applicationInfo;
+
+ if (isMainlineModule) {
+ when(mPackageManager.getModuleInfo(packageName, 0 /* flags */)).thenReturn(
+ new ModuleInfo());
+ } else {
+ when(mPackageManager.getPackageInfo(packageName, 0 /* flags */)).thenReturn(
+ packageInfo);
+ when(mPackageManager.getModuleInfo(packageName, 0 /* flags */)).thenThrow(
+ new PackageManager.NameNotFoundException());
+ }
+ }
}
diff --git a/tests/robotests/src/com/android/settings/network/telephony/NetworkScanHelperTest.java b/tests/robotests/src/com/android/settings/network/telephony/NetworkScanHelperTest.java
index 19ae6ff..1e7bfaf 100644
--- a/tests/robotests/src/com/android/settings/network/telephony/NetworkScanHelperTest.java
+++ b/tests/robotests/src/com/android/settings/network/telephony/NetworkScanHelperTest.java
@@ -164,7 +164,8 @@
}
private void startNetworkScan_incremental(boolean waitForCompletion) {
- mNetworkScanHelper.startNetworkScan();
+ mNetworkScanHelper.startNetworkScan(
+ NetworkScanHelper.NETWORK_SCAN_TYPE_INCREMENTAL_RESULTS);
if (!waitForCompletion) {
mNetworkScanHelper.stopNetworkQuery();
}
diff --git a/tests/robotests/src/com/android/settings/wifi/NetworkRequestDialogActivityTest.java b/tests/robotests/src/com/android/settings/wifi/NetworkRequestDialogActivityTest.java
index c744647..ecf9c68 100644
--- a/tests/robotests/src/com/android/settings/wifi/NetworkRequestDialogActivityTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/NetworkRequestDialogActivityTest.java
@@ -126,4 +126,13 @@
verify(mActivity).finish();
}
+
+ @Test
+ public void updateAccessPointList_onUserSelectionConnectFailure_shouldFinishActivity() {
+ final WifiConfiguration config = new WifiConfiguration();
+ config.SSID = "Test AP 3";
+ mActivity.onUserSelectionConnectFailure(config);
+
+ verify(mActivity).finish();
+ }
}
diff --git a/tests/robotests/src/com/android/settings/wifi/tether/TetherServiceTest.java b/tests/robotests/src/com/android/settings/wifi/tether/TetherServiceTest.java
deleted file mode 100644
index 61b9b5b..0000000
--- a/tests/robotests/src/com/android/settings/wifi/tether/TetherServiceTest.java
+++ /dev/null
@@ -1,130 +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.wifi.tether;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.content.Context;
-import android.content.SharedPreferences;
-import android.content.res.Resources;
-import android.net.wifi.WifiManager;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-import org.robolectric.shadows.ShadowApplication;
-import org.robolectric.shadows.ShadowApplication.Wrapper;
-import org.robolectric.util.ReflectionHelpers;
-
-import java.util.ArrayList;
-
-@RunWith(RobolectricTestRunner.class)
-public class TetherServiceTest {
-
- private static final int CHECK_PERIOD_HOURS = 24;
-
- @Mock
- private Context mContext;
- @Mock
- private Resources mResources;
-
- private Context mAppContext;
- private TetherService mService;
-
- @Before
- public void setUp() {
- MockitoAnnotations.initMocks(this);
- mAppContext = RuntimeEnvironment.application;
- mService = spy(new TetherService());
- ReflectionHelpers.setField(mService, "mBase", mAppContext);
- mService.setHotspotOffReceiver(new HotspotOffReceiver(mContext));
- doReturn(CHECK_PERIOD_HOURS).when(mResources).getInteger(
- com.android.internal.R.integer.config_mobile_hotspot_provision_check_period);
- doReturn(mResources).when(mService).getResourceForActiveDataSubId();
- }
-
- @Test
- public void scheduleAlarm_shouldRegisterReceiver() {
- mService.setHotspotOffReceiver(new HotspotOffReceiver(mAppContext));
-
- mService.scheduleAlarm();
-
- boolean found = false;
- for (Wrapper wrapper : ShadowApplication.getInstance().getRegisteredReceivers()) {
- if (wrapper.intentFilter.matchAction(WifiManager.WIFI_AP_STATE_CHANGED_ACTION)) {
- found = true;
- break;
- }
- }
-
- assertThat(found).isTrue();
- }
-
- @Test
- public void cancelAlarmIfNecessary_hasActiveTethers_shouldNotUnregisterReceiver() {
- mService.scheduleAlarm();
- final ArrayList<Integer> tethers = new ArrayList<>();
- tethers.add(1);
- ReflectionHelpers.setField(mService, "mCurrentTethers", tethers);
-
- mService.cancelAlarmIfNecessary();
-
- verify(mContext, never()).unregisterReceiver(any(HotspotOffReceiver.class));
- }
-
- @Test
- public void cancelAlarmIfNecessary_noActiveTethers_shouldUnregisterReceiver() {
- final ArrayList<Integer> tethers = new ArrayList<>();
- ReflectionHelpers.setField(mService, "mCurrentTethers", tethers);
- mService.scheduleAlarm();
-
- mService.cancelAlarmIfNecessary();
-
- verify(mContext).unregisterReceiver(any(HotspotOffReceiver.class));
- }
-
- @Test
- public void onDestroy_shouldUnregisterReceiver() {
- final ArrayList<Integer> tethers = new ArrayList<>();
- ReflectionHelpers.setField(mService, "mCurrentTethers", tethers);
- ReflectionHelpers.setField(mService, "mBase", mContext);
- final SharedPreferences prefs = mock(SharedPreferences .class);
- final SharedPreferences.Editor editor = mock(SharedPreferences.Editor.class);
- when(mContext.getSharedPreferences(anyString(), anyInt())).thenReturn(prefs);
- when(prefs.edit()).thenReturn(editor);
- when(editor.putString(anyString(), anyString())).thenReturn(editor);
- final HotspotOffReceiver hotspotOffReceiver = mock(HotspotOffReceiver.class);
- mService.setHotspotOffReceiver(hotspotOffReceiver);
-
- mService.onDestroy();
-
- verify(hotspotOffReceiver).unregister();
- }
-}
diff --git a/tests/unit/src/com/android/settings/wifi/tether/TetherServiceTest.java b/tests/unit/src/com/android/settings/wifi/tether/TetherServiceTest.java
index 6891441..19f29c0 100644
--- a/tests/unit/src/com/android/settings/wifi/tether/TetherServiceTest.java
+++ b/tests/unit/src/com/android/settings/wifi/tether/TetherServiceTest.java
@@ -16,27 +16,23 @@
package com.android.settings.wifi.tether;
-import static android.net.ConnectivityManager.EXTRA_ADD_TETHER_TYPE;
-import static android.net.ConnectivityManager.EXTRA_PROVISION_CALLBACK;
-import static android.net.ConnectivityManager.EXTRA_REM_TETHER_TYPE;
-import static android.net.ConnectivityManager.EXTRA_RUN_PROVISION;
-import static android.net.ConnectivityManager.EXTRA_SET_ALARM;
-import static android.net.ConnectivityManager.TETHERING_BLUETOOTH;
-import static android.net.ConnectivityManager.TETHERING_INVALID;
-import static android.net.ConnectivityManager.TETHERING_USB;
-import static android.net.ConnectivityManager.TETHERING_WIFI;
-import static android.net.ConnectivityManager.TETHER_ERROR_NO_ERROR;
-import static android.net.ConnectivityManager.TETHER_ERROR_PROVISION_FAILED;
+import static android.net.TetheringConstants.EXTRA_ADD_TETHER_TYPE;
+import static android.net.TetheringConstants.EXTRA_PROVISION_CALLBACK;
+import static android.net.TetheringConstants.EXTRA_RUN_PROVISION;
+import static android.net.TetheringManager.TETHERING_BLUETOOTH;
+import static android.net.TetheringManager.TETHERING_INVALID;
+import static android.net.TetheringManager.TETHERING_USB;
+import static android.net.TetheringManager.TETHERING_WIFI;
+import static android.net.TetheringManager.TETHER_ERROR_NO_ERROR;
+import static android.net.TetheringManager.TETHER_ERROR_PROVISIONING_FAILED;
import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID;
import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyLong;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.app.Activity;
-import android.app.AlarmManager;
import android.app.PendingIntent;
import android.app.usage.UsageStatsManager;
import android.content.BroadcastReceiver;
@@ -51,7 +47,7 @@
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.res.Resources;
-import android.net.ConnectivityManager;
+import android.net.TetheringManager;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.os.ResultReceiver;
@@ -92,8 +88,7 @@
private ProvisionReceiver mProvisionReceiver;
private Receiver mResultReceiver;
- @Mock private AlarmManager mAlarmManager;
- @Mock private ConnectivityManager mConnectivityManager;
+ @Mock private TetheringManager mTetheringManager;
@Mock private PackageManager mPackageManager;
@Mock private WifiManager mWifiManager;
@Mock private SharedPreferences mPrefs;
@@ -158,15 +153,6 @@
super.tearDown();
}
- private void cancelAllProvisioning() {
- int[] types = new int[]{TETHERING_BLUETOOTH, TETHERING_WIFI, TETHERING_USB};
- for (int type : types) {
- Intent intent = new Intent();
- intent.putExtra(EXTRA_REM_TETHER_TYPE, type);
- startService(intent);
- }
- }
-
public void testStartForProvision() {
runProvisioningForType(TETHERING_WIFI);
@@ -184,19 +170,6 @@
assertTrue(mWrapper.isAppInactive(FAKE_PACKAGE_NAME));
}
- public void testScheduleRechecks() {
- Intent intent = new Intent();
- intent.putExtra(EXTRA_ADD_TETHER_TYPE, TETHERING_WIFI);
- intent.putExtra(EXTRA_SET_ALARM, true);
- startService(intent);
-
- long period = TEST_CHECK_PERIOD * MS_PER_HOUR;
- verify(mAlarmManager).setRepeating(eq(AlarmManager.ELAPSED_REALTIME), anyLong(),
- eq(period), mPiCaptor.capture());
- PendingIntent pi = mPiCaptor.getValue();
- assertEquals(TetherService.class.getName(), pi.getIntent().getComponent().getClassName());
- }
-
public void testStartMultiple() {
runProvisioningForType(TETHERING_WIFI);
@@ -235,9 +208,9 @@
runProvisioningForType(TETHERING_WIFI);
assertTrue(waitForProvisionRequest(TETHERING_WIFI));
- assertTrue(waitForProvisionResponse(TETHER_ERROR_PROVISION_FAILED));
+ assertTrue(waitForProvisionResponse(TETHER_ERROR_PROVISIONING_FAILED));
- verify(mConnectivityManager).stopTethering(ConnectivityManager.TETHERING_WIFI);
+ verify(mTetheringManager).stopTethering(TETHERING_WIFI);
}
public void testFailureStopsTethering_Usb() {
@@ -246,24 +219,9 @@
runProvisioningForType(TETHERING_USB);
assertTrue(waitForProvisionRequest(TETHERING_USB));
- assertTrue(waitForProvisionResponse(TETHER_ERROR_PROVISION_FAILED));
+ assertTrue(waitForProvisionResponse(TETHER_ERROR_PROVISIONING_FAILED));
- verify(mConnectivityManager).setUsbTethering(eq(false));
- }
-
- public void testCancelAlarm() {
- runProvisioningForType(TETHERING_WIFI);
-
- assertTrue(waitForProvisionRequest(TETHERING_WIFI));
- assertTrue(waitForProvisionResponse(TETHER_ERROR_NO_ERROR));
-
- Intent intent = new Intent();
- intent.putExtra(EXTRA_REM_TETHER_TYPE, TETHERING_WIFI);
- startService(intent);
-
- verify(mAlarmManager).cancel(mPiCaptor.capture());
- PendingIntent pi = mPiCaptor.getValue();
- assertEquals(TetherService.class.getName(), pi.getIntent().getComponent().getClassName());
+ verify(mTetheringManager).stopTethering(TETHERING_USB);
}
public void testIgnoreOutdatedRequest() {
@@ -387,10 +345,8 @@
@Override
public Object getSystemService(String name) {
- if (ALARM_SERVICE.equals(name)) {
- return mAlarmManager;
- } else if (CONNECTIVITY_SERVICE.equals(name)) {
- return mConnectivityManager;
+ if (TETHERING_SERVICE.equals(name)) {
+ return mTetheringManager;
} else if (WIFI_SERVICE.equals(name)) {
return mWifiManager;
}