Merge "Add esos questionnaire button" into main
diff --git a/ecc/input/eccdata.txt b/ecc/input/eccdata.txt
index 3248179..c4edc9e 100644
--- a/ecc/input/eccdata.txt
+++ b/ecc/input/eccdata.txt
@@ -208,17 +208,14 @@
eccs {
phone_number: "122"
types: POLICE
- routing: NORMAL
}
eccs {
phone_number: "124"
types: AMBULANCE
- routing: NORMAL
}
eccs {
phone_number: "123"
types: FIRE
- routing: NORMAL
}
ecc_fallback: "112"
}
@@ -521,7 +518,7 @@
eccs {
phone_number: "117"
types: POLICE
- routing: NORMAL
+ routing: EMERGENCY
}
eccs {
phone_number: "144"
@@ -551,7 +548,6 @@
eccs {
phone_number: "1414"
types: TYPE_UNSPECIFIED
- routing: NORMAL
}
eccs {
phone_number: "0800117117"
@@ -1201,46 +1197,6 @@
types: FIRE
routing: NORMAL
}
- eccs {
- phone_number: "115"
- types: TYPE_UNSPECIFIED
- routing: NORMAL
- }
- eccs {
- phone_number: "116000"
- types: TYPE_UNSPECIFIED
- routing: NORMAL
- }
- eccs {
- phone_number: "191"
- types: MOUNTAIN_RESCUE
- routing: NORMAL
- }
- eccs {
- phone_number: "196"
- types: MARINE_GUARD
- routing: NORMAL
- }
- eccs {
- phone_number: "197"
- types: TYPE_UNSPECIFIED
- routing: NORMAL
- }
- eccs {
- phone_number: "116117"
- types: TYPE_UNSPECIFIED
- routing: NORMAL
- }
- eccs {
- phone_number: "119"
- types: TYPE_UNSPECIFIED
- routing: NORMAL
- }
- eccs {
- phone_number: "116111"
- types: TYPE_UNSPECIFIED
- routing: NORMAL
- }
ecc_fallback: "112"
}
countries {
@@ -1411,12 +1367,10 @@
eccs {
phone_number: "101"
types: AMBULANCE
- routing: NORMAL
}
eccs {
phone_number: "102"
types: FIRE
- routing: NORMAL
}
ecc_fallback: "112"
}
@@ -1435,28 +1389,6 @@
types: FIRE
routing: NORMAL
}
- eccs {
- phone_number: "101"
- types: FIRE
- routing: NORMAL
- }
- eccs {
- phone_number: "102"
- types: AMBULANCE
- routing: NORMAL
- }
- eccs {
- phone_number: "103"
- types: TYPE_UNSPECIFIED
- routing: NORMAL
- }
- eccs {
- phone_number: "108"
- types: POLICE
- types: AMBULANCE
- types: FIRE
- routing: NORMAL
- }
ecc_fallback: "112"
}
countries {
@@ -2428,86 +2360,6 @@
types: AMBULANCE
types: FIRE
}
- eccs {
- phone_number: "984"
- types: TYPE_UNSPECIFIED
- routing: NORMAL
- normal_routing_mncs: "01"
- normal_routing_mncs: "06"
- }
- eccs {
- phone_number: "985"
- types: MOUNTAIN_RESCUE
- routing: NORMAL
- normal_routing_mncs: "01"
- normal_routing_mncs: "06"
- }
- eccs {
- phone_number: "997"
- types: POLICE
- routing: NORMAL
- normal_routing_mncs: "01"
- normal_routing_mncs: "06"
- }
- eccs {
- phone_number: "998"
- types: FIRE
- routing: NORMAL
- normal_routing_mncs: "01"
- normal_routing_mncs: "06"
- }
- eccs {
- phone_number: "999"
- types: AMBULANCE
- routing: NORMAL
- normal_routing_mncs: "01"
- normal_routing_mncs: "06"
- }
- eccs {
- phone_number: "986"
- types: POLICE
- routing: NORMAL
- }
- eccs {
- phone_number: "987"
- types: TYPE_UNSPECIFIED
- routing: NORMAL
- }
- eccs {
- phone_number: "989"
- types: TYPE_UNSPECIFIED
- routing: NORMAL
- }
- eccs {
- phone_number: "991"
- types: TYPE_UNSPECIFIED
- routing: NORMAL
- }
- eccs {
- phone_number: "992"
- types: TYPE_UNSPECIFIED
- routing: NORMAL
- }
- eccs {
- phone_number: "993"
- types: TYPE_UNSPECIFIED
- routing: NORMAL
- }
- eccs {
- phone_number: "994"
- types: TYPE_UNSPECIFIED
- routing: NORMAL
- }
- eccs {
- phone_number: "995"
- types: TYPE_UNSPECIFIED
- routing: NORMAL
- }
- eccs {
- phone_number: "996"
- types: TYPE_UNSPECIFIED
- routing: NORMAL
- }
ecc_fallback: "112"
}
countries {
@@ -2618,46 +2470,6 @@
types: FIRE
routing: NORMAL
}
- eccs {
- phone_number: "115"
- types: TYPE_UNSPECIFIED
- routing: NORMAL
- }
- eccs {
- phone_number: "116000"
- types: TYPE_UNSPECIFIED
- routing: NORMAL
- }
- eccs {
- phone_number: "191"
- types: MOUNTAIN_RESCUE
- routing: NORMAL
- }
- eccs {
- phone_number: "196"
- types: MARINE_GUARD
- routing: NORMAL
- }
- eccs {
- phone_number: "197"
- types: TYPE_UNSPECIFIED
- routing: NORMAL
- }
- eccs {
- phone_number: "116117"
- types: TYPE_UNSPECIFIED
- routing: NORMAL
- }
- eccs {
- phone_number: "119"
- types: TYPE_UNSPECIFIED
- routing: NORMAL
- }
- eccs {
- phone_number: "116111"
- types: TYPE_UNSPECIFIED
- routing: NORMAL
- }
ecc_fallback: "112"
}
countries {
@@ -2816,7 +2628,6 @@
phone_number: "995"
types: AMBULANCE
types: FIRE
- routing: NORMAL
}
ecc_fallback: "112"
}
@@ -2841,11 +2652,6 @@
types: AMBULANCE
types: FIRE
}
- eccs {
- phone_number: "113"
- types: POLICE
- routing: NORMAL
- }
ecc_fallback: "112"
}
countries {
@@ -2856,11 +2662,6 @@
types: AMBULANCE
types: FIRE
}
- eccs {
- phone_number: "159"
- types: TYPE_UNSPECIFIED
- routing: NORMAL
- }
ecc_fallback: "112"
}
countries {
@@ -3183,13 +2984,11 @@
eccs {
phone_number: "110"
types: POLICE
- routing: NORMAL
}
eccs {
phone_number: "119"
types: AMBULANCE
types: FIRE
- routing: NORMAL
}
ecc_fallback: "112"
}
diff --git a/ecc/output/eccdata b/ecc/output/eccdata
index b42de09..482ed79 100644
--- a/ecc/output/eccdata
+++ b/ecc/output/eccdata
Binary files differ
diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml
index c15fa11..6694b97 100644
--- a/res/values-mn/strings.xml
+++ b/res/values-mn/strings.xml
@@ -56,7 +56,7 @@
<string name="requesting_unlock" msgid="930512210309437741">"Сүлжээг тайлах хүсэлтийг илгээж байна…"</string>
<string name="unlock_failed" msgid="7103543844840661366">"Сүлжээг тайлах хүсэлт амжилтгүй боллоо."</string>
<string name="unlock_success" msgid="32681089371067565">"Сүлжээг амжилттай тайллаа."</string>
- <string name="mobile_network_settings_not_available" msgid="8678168497517090039">"Энэ хэрэглэгч мобайл сүлжээний тохиргоог ашиглах боломжгүй"</string>
+ <string name="mobile_network_settings_not_available" msgid="8678168497517090039">"Энэ хэрэглэгч хөдөлгөөнт холбооны сүлжээний тохиргоог ашиглах боломжгүй"</string>
<string name="labelGSMMore" msgid="7354182269461281543">"GSM дуудлагын тохиргоо"</string>
<string name="labelGsmMore_with_label" msgid="3206015314393246224">"GSM дуудлагын тохиргоо (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="labelCDMAMore" msgid="7937441382611224632">"CDMA дуудлагын тохиргоо"</string>
@@ -173,7 +173,7 @@
<string name="vm_change_pin_error_invalid" msgid="5230002671175580674">"Шинэ ПИН-д буруу тэмдэгт агуулагдаж байна."</string>
<string name="vm_change_pin_error_system_error" msgid="9116483527909681791">"ПИН-г өөрчлөх боломжгүй"</string>
<string name="vvm_unsupported_message_format" msgid="4206402558577739713">"Дэмжигдээгүй мессежийн төрөл, сонсохын тулд <xliff:g id="NUMBER">%s</xliff:g> руу залгана уу."</string>
- <string name="network_settings_title" msgid="7560807107123171541">"Мобайл сүлжээ"</string>
+ <string name="network_settings_title" msgid="7560807107123171541">"Хөдөлгөөнт холбооны сүлжээ"</string>
<string name="label_available" msgid="1316084116670821258">"Боломжтой сүлжээнүүд"</string>
<string name="load_networks_progress" msgid="4051433047717401683">"Хайж байна..."</string>
<string name="empty_networks_list" msgid="9216418268008582342">"Сүлжээ олдсонгүй."</string>
@@ -305,7 +305,7 @@
<string name="keywords_carrier_settings_euicc" msgid="8540160967922063745">"үүрэн холбооны компани, esim, sim, euicc, үүрэн холбооны компани сэлгэх, үүрэн холбооны компани нэмэх"</string>
<string name="carrier_settings_euicc_summary" msgid="2027941166597330117">"<xliff:g id="CARRIER_NAME">%1$s</xliff:g> — <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>"</string>
<string name="mobile_data_settings_title" msgid="7228249980933944101">"Мобайл дата"</string>
- <string name="mobile_data_settings_summary" msgid="5012570152029118471">"Мобайл сүлжээг ашиглан датанд хандах"</string>
+ <string name="mobile_data_settings_summary" msgid="5012570152029118471">"Хөдөлгөөнт холбооны сүлжээг ашиглан датанд хандах"</string>
<string name="data_usage_disable_mobile" msgid="5669109209055988308">"Мобайл датаг унтраах уу?"</string>
<string name="sim_selection_required_pref" msgid="6985901872978341314">"Сонгох шаардлагатай"</string>
<string name="sim_change_data_title" msgid="9142726786345906606">"Дата SIM солих уу?"</string>
@@ -535,16 +535,16 @@
<string name="notification_voicemail_no_vm_number" msgid="3423686009815186750">"Дуут шуудангийн дугаар тодорхойгүй"</string>
<string name="notification_network_selection_title" msgid="255595526707809121">"Үйлчилгээ байхгүй"</string>
<string name="notification_network_selection_text" msgid="553288408722427659">"Сонгосон <xliff:g id="OPERATOR_NAME">%s</xliff:g> сүлжээг ашиглах боломжгүй"</string>
- <string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Дуудлага хийхийн тулд мобайл сүлжээг асаах, нислэгийн горим буюу батарей хэмнэх горимыг идэвхгүй болгоно уу."</string>
+ <string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"Дуудлага хийхийн тулд хөдөлгөөнт холбооны сүлжээг асаах, нислэгийн горим буюу батарей хэмнэх горимыг идэвхгүй болгоно уу."</string>
<string name="incall_error_power_off" product="default" msgid="8131672264311208673">"Дуудлага хийхийн тулд онгоцны горимыг унтраа."</string>
<string name="incall_error_power_off_wfc" msgid="9125661184694727052">"Дуудлага хийхийн тулд онгоцны горимыг унтраа эсвэл утасгүй интернетэд холбогдоно уу."</string>
<string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"Утас хэт халуун байна"</b>\n\n"Энэ дуудлагыг гүйцээх боломжгүй. Та утсаа хөрсөн үед дахин оролдоно уу.\n\nТа яаралтай дуудлага хийх боломжтой хэвээр байна."</string>
<string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Яаралтай түргэн тусламжийн бус дуудлага хийхийн тулд яаралтай түргэн тусламжийн callback горимоос гарна уу."</string>
<string name="incall_error_emergency_only" msgid="8786127461027964653">"Сүлжээнд бүртгэгдээгүй."</string>
<string name="incall_error_out_of_service" msgid="1927265196942672791">"Мобайль сүлжээ байхгүй."</string>
- <string name="incall_error_out_of_service_2g" msgid="904434080740846116">"Мобайл сүлжээ боломжгүй байна.\n\nДуудлага хийхийн тулд утасгүй сүлжээнд холбогдоно уу.\n\n2G-г энэ төхөөрөмж дээр идэвхгүй болгосон бөгөөд энэ нь таны холболтод нөлөөлж байж магадгүй. Үргэлжлүүлэхийн тулд Тохиргоо руу очоод, 2G-г зөвшөөрөхийг идэвхжүүлнэ үү."</string>
- <string name="incall_error_out_of_service_wfc" msgid="4497663185857190885">"Мобайл сүлжээнд холбогдох боломжгүй байна. Дуудлага хийхийн тулд утасгүй интернетэд холбогдоно уу."</string>
- <string name="incall_error_out_of_service_wfc_2g_user" msgid="8218768986365299663">"Мобайл сүлжээ боломжгүй байна.\n\nДуудлага хийхийн тулд утасгүй сүлжээнд холбогдоно уу.\n\n2G-г энэ төхөөрөмж дээр идэвхгүй болгосон бөгөөд энэ нь таны холболтод нөлөөлж байж магадгүй. Үргэлжлүүлэхийн тулд Тохиргоо руу очоод, 2G-г зөвшөөрөхийг идэвхжүүлнэ үү."</string>
+ <string name="incall_error_out_of_service_2g" msgid="904434080740846116">"Хөдөлгөөнт холбооны сүлжээ боломжгүй байна.\n\nДуудлага хийхийн тулд утасгүй сүлжээнд холбогдоно уу.\n\n2G-г энэ төхөөрөмж дээр идэвхгүй болгосон бөгөөд энэ нь таны холболтод нөлөөлж байж магадгүй. Үргэлжлүүлэхийн тулд Тохиргоо руу очоод, 2G-г зөвшөөрөхийг идэвхжүүлнэ үү."</string>
+ <string name="incall_error_out_of_service_wfc" msgid="4497663185857190885">"Хөдөлгөөнт холбооны сүлжээнд холбогдох боломжгүй байна. Дуудлага хийхийн тулд утасгүй интернетэд холбогдоно уу."</string>
+ <string name="incall_error_out_of_service_wfc_2g_user" msgid="8218768986365299663">"Хөдөлгөөнт холбооны сүлжээ боломжгүй байна.\n\nДуудлага хийхийн тулд утасгүй сүлжээнд холбогдоно уу.\n\n2G-г энэ төхөөрөмж дээр идэвхгүй болгосон бөгөөд энэ нь таны холболтод нөлөөлж байж магадгүй. Үргэлжлүүлэхийн тулд Тохиргоо руу очоод, 2G-г зөвшөөрөхийг идэвхжүүлнэ үү."</string>
<string name="incall_error_no_phone_number_supplied" msgid="8680831089508851894">"Дуудлага хийхийн тулд хүчин төгөлдөр дугаар оруулна уу."</string>
<string name="incall_error_call_failed" msgid="393508653582682539">"Дуудлага амжилтгүй болсон."</string>
<string name="incall_error_cannot_add_call" msgid="5425764862628655443">"Дуудлагыг энэ удаад нэмэх боломжгүй. Та мессеж илгээн холбоо тогтоохыг оролдох боломжтой."</string>
@@ -717,7 +717,7 @@
<string name="clh_card_title_call_ended_txt" msgid="5977978317527299698">"Дуудлага дууссан"</string>
<string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Нислэгийн горим асаалттай"</string>
<string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"SIM картад хандах боломжгүй"</string>
- <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Мобайл сүлжээ байхгүй"</string>
+ <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Хөдөлгөөнт холбооны сүлжээ байхгүй"</string>
<string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"Хиймэл дагуулын горим асаалттай байна"</string>
<string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Таны залгахыг оролдож буй утасны дугаарт асуудал байна. Алдааны код 1."</string>
<string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"Дуудлагыг гүйцээж чадсангүй. Алдааны код 3."</string>
@@ -824,10 +824,10 @@
<string name="callFailed_already_ringing" msgid="2376603543544289303">"Хариулаагүй ирсэн дуудлага байх үед дуудлага хийх боломжгүй. Шинэ дуудлага хийхийн өмнө ирсэн дуудлагад хариулах эсвэл татгалзана уу."</string>
<string name="callFailed_calling_disabled" msgid="5010992739401206283">"ro.telephony.disable-call системийн өмчийг ашиглан дуудлагыг цуцалсан бол дуудлага хийх боломжгүй."</string>
<string name="callFailed_too_many_calls" msgid="2761754044990799580">"Аль хэдийн хоёр дуудлага хийж байгаа тул дуудлага хийх боломжгүй байна. Шинэ дуудлага хийхийн өмнө аль нэг дуудлагыг салгах эсвэл тэдгээрийг хурал болгож нэгтгэнэ үү."</string>
- <string name="supp_service_over_ut_precautions" msgid="2145018231396701311">"<xliff:g id="SUPP_SERVICE">%s</xliff:g>-г ашиглахын тулд мобайл датаг асаасан эсэхээ шалгана уу. Та үүнийг мобайл сүлжээний тохиргоонд өөрчлөх боломжтой."</string>
- <string name="supp_service_over_ut_precautions_roaming" msgid="670342104569972327">"<xliff:g id="SUPP_SERVICE">%s</xliff:g>-г ашиглахын тулд мобайл дата болон дата роуминг асаасан эсэхээ шалгана уу. Та эдгээрийг мобайл сүлжээний тохиргоонд өөрчлөх боломжтой."</string>
- <string name="supp_service_over_ut_precautions_dual_sim" msgid="5166866975550910474">"<xliff:g id="SUPP_SERVICE">%1$s</xliff:g>-г ашиглахын тулд SIM <xliff:g id="SIM_NUMBER">%2$d</xliff:g>-д мобайл датаг асаасан эсэхээ шалгана уу. Та үүнийг мобайл сүлжээний тохиргоонд өөрчлөх боломжтой."</string>
- <string name="supp_service_over_ut_precautions_roaming_dual_sim" msgid="6627654855191817965">"<xliff:g id="SUPP_SERVICE">%1$s</xliff:g>-г ашиглахын тулд SIM <xliff:g id="SIM_NUMBER">%2$d</xliff:g>-д мобайл дата болон дата роуминг асаасан эсэхээ шалгана уу. Та эдгээрийг мобайл сүлжээний тохиргоонд өөрчлөх боломжтой."</string>
+ <string name="supp_service_over_ut_precautions" msgid="2145018231396701311">"<xliff:g id="SUPP_SERVICE">%s</xliff:g>-г ашиглахын тулд мобайл датаг асаасан эсэхээ шалгана уу. Та үүнийг хөдөлгөөнт холбооны сүлжээний тохиргоонд өөрчлөх боломжтой."</string>
+ <string name="supp_service_over_ut_precautions_roaming" msgid="670342104569972327">"<xliff:g id="SUPP_SERVICE">%s</xliff:g>-г ашиглахын тулд мобайл дата болон дата роуминг асаасан эсэхээ шалгана уу. Та эдгээрийг хөдөлгөөнт холбооны сүлжээний тохиргоонд өөрчлөх боломжтой."</string>
+ <string name="supp_service_over_ut_precautions_dual_sim" msgid="5166866975550910474">"<xliff:g id="SUPP_SERVICE">%1$s</xliff:g>-г ашиглахын тулд SIM <xliff:g id="SIM_NUMBER">%2$d</xliff:g>-д мобайл датаг асаасан эсэхээ шалгана уу. Та үүнийг хөдөлгөөнт холбооны сүлжээний тохиргоонд өөрчлөх боломжтой."</string>
+ <string name="supp_service_over_ut_precautions_roaming_dual_sim" msgid="6627654855191817965">"<xliff:g id="SUPP_SERVICE">%1$s</xliff:g>-г ашиглахын тулд SIM <xliff:g id="SIM_NUMBER">%2$d</xliff:g>-д мобайл дата болон дата роуминг асаасан эсэхээ шалгана уу. Та эдгээрийг хөдөлгөөнт холбооны сүлжээний тохиргоонд өөрчлөх боломжтой."</string>
<string name="supp_service_over_ut_precautions_dialog_dismiss" msgid="5934541487903081652">"Үл хэрэгсэх"</string>
<string name="radio_info_data_connection_enable" msgid="6183729739783252840">"Дата холболтыг идэвхжүүлэх"</string>
<string name="radio_info_data_connection_disable" msgid="6404751291511368706">"Дата холболтыг идэвхгүй болгох"</string>
diff --git a/src/com/android/phone/PhoneGlobals.java b/src/com/android/phone/PhoneGlobals.java
index 4e077e9..6b85016 100644
--- a/src/com/android/phone/PhoneGlobals.java
+++ b/src/com/android/phone/PhoneGlobals.java
@@ -518,7 +518,9 @@
ContentResolver resolver = getContentResolver();
- if (mFeatureFlags.enforceTelephonyFeatureMappingForPublicApis()) {
+ if (mFeatureFlags.enforceTelephonyFeatureMappingForPublicApis()
+ && !getResources().getBoolean(
+ com.android.internal.R.bool.config_force_phone_globals_creation)) {
if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEPHONY)) {
Log.v(LOG_TAG, "onCreate()... but not defined FEATURE_TELEPHONY");
return;
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index e22f51a..e6a143b 100644
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -13930,6 +13930,32 @@
}
/**
+ * This API can be used by only CTS to set the cache whether satellite communication is allowed.
+ *
+ * @param state a state indicates whether satellite access allowed state should be cached and
+ * the allowed state.
+ * @return {@code true} if the setting is successful, {@code false} otherwise.
+ */
+ public boolean setIsSatelliteCommunicationAllowedForCurrentLocationCache(String state) {
+ if (!mFeatureFlags.oemEnabledSatelliteFlag()) {
+ Log.d(LOG_TAG, "setIsSatelliteCommunicationAllowedForCurrentLocationCache: "
+ + "oemEnabledSatelliteFlag is disabled");
+ return false;
+ }
+
+ Log.d(LOG_TAG, "setIsSatelliteCommunicationAllowedForCurrentLocationCache: "
+ + "state=" + state);
+ TelephonyPermissions.enforceShellOnly(
+ Binder.getCallingUid(),
+ "setIsSatelliteCommunicationAllowedForCurrentLocationCache");
+ TelephonyPermissions.enforceCallingOrSelfModifyPermissionOrCarrierPrivilege(mApp,
+ SubscriptionManager.INVALID_SUBSCRIPTION_ID,
+ "setIsSatelliteCommunicationAllowedForCurrentLocationCache");
+ return mSatelliteAccessController.setIsSatelliteCommunicationAllowedForCurrentLocationCache(
+ state);
+ }
+
+ /**
* Sets the service defined in ComponentName to be bound.
*
* This should only be used for testing.
diff --git a/src/com/android/phone/TelephonyShellCommand.java b/src/com/android/phone/TelephonyShellCommand.java
index 9f67c75..6969275 100644
--- a/src/com/android/phone/TelephonyShellCommand.java
+++ b/src/com/android/phone/TelephonyShellCommand.java
@@ -207,6 +207,8 @@
"set-oem-enabled-satellite-provision-status";
private static final String SET_SHOULD_SEND_DATAGRAM_TO_MODEM_IN_DEMO_MODE =
"set-should-send-datagram-to-modem-in-demo-mode";
+ private static final String SET_IS_SATELLITE_COMMUNICATION_ALLOWED_FOR_CURRENT_LOCATION_CACHE =
+ "set-is-satellite-communication-allowed-for-current-location-cache";
private static final String DOMAIN_SELECTION_SUBCOMMAND = "domainselection";
private static final String DOMAIN_SELECTION_SET_SERVICE_OVERRIDE = "set-dss-override";
@@ -418,6 +420,8 @@
return handleSetCountryCodes();
case SET_OEM_ENABLED_SATELLITE_PROVISION_STATUS:
return handleSetOemEnabledSatelliteProvisionStatus();
+ case SET_IS_SATELLITE_COMMUNICATION_ALLOWED_FOR_CURRENT_LOCATION_CACHE:
+ return handleSetIsSatelliteCommunicationAllowedForCurrentLocationCache();
default: {
return handleDefaultCommands(cmd);
}
@@ -3699,6 +3703,61 @@
return 0;
}
+ private int handleSetIsSatelliteCommunicationAllowedForCurrentLocationCache() {
+ PrintWriter errPw = getErrPrintWriter();
+ String opt;
+ String state;
+
+ if ((opt = getNextArg()) == null) {
+ errPw.println(
+ "adb shell cmd phone set-is-satellite-communication-allowed-for-current"
+ + "-location-cache :"
+ + " Invalid Argument");
+ return -1;
+ } else {
+ switch (opt) {
+ case "-a": {
+ state = "cache_allowed";
+ break;
+ }
+ case "-n": {
+ state = "cache_clear_and_not_allowed";
+ break;
+ }
+ case "-c": {
+ state = "clear_cache_only";
+ break;
+ }
+ default:
+ errPw.println(
+ "adb shell cmd phone set-is-satellite-communication-allowed-for-current"
+ + "-location-cache :"
+ + " Invalid Argument");
+ return -1;
+ }
+ }
+
+ Log.d(LOG_TAG, "handleSetIsSatelliteCommunicationAllowedForCurrentLocationCache("
+ + state + ")");
+
+ try {
+ boolean result = mInterface.setIsSatelliteCommunicationAllowedForCurrentLocationCache(
+ state);
+ if (VDBG) {
+ Log.v(LOG_TAG, "setIsSatelliteCommunicationAllowedForCurrentLocationCache "
+ + "returns: "
+ + result);
+ }
+ getOutPrintWriter().println(result);
+ } catch (RemoteException e) {
+ Log.w(LOG_TAG, "setIsSatelliteCommunicationAllowedForCurrentLocationCache("
+ + state + "), error = " + e.getMessage());
+ errPw.println("Exception: " + e.getMessage());
+ return -1;
+ }
+ return 0;
+ }
+
/**
* Sample inputStr = "US,UK,CA;2,1,3"
* Sample output: {[US,2], [UK,1], [CA,3]}
diff --git a/src/com/android/phone/satellite/accesscontrol/SatelliteAccessController.java b/src/com/android/phone/satellite/accesscontrol/SatelliteAccessController.java
index 9bea4a4..97a170b 100644
--- a/src/com/android/phone/satellite/accesscontrol/SatelliteAccessController.java
+++ b/src/com/android/phone/satellite/accesscontrol/SatelliteAccessController.java
@@ -76,6 +76,7 @@
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
+import java.time.Duration;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@@ -208,6 +209,10 @@
@GuardedBy("mSatelliteCommunicationAllowStateLock")
private boolean mCurrentSatelliteAllowedState = false;
+ private static final long NANOS_IN_DAY = Duration.ofDays(1).toNanos();
+ private boolean mLatestSatelliteCommunicationAllowed;
+ private long mLatestSatelliteCommunicationAllowedSetTime;
+
/**
* Create a SatelliteAccessController instance.
*
@@ -279,8 +284,10 @@
if (sInstance == null) {
HandlerThread handlerThread = new HandlerThread("SatelliteAccessController");
handlerThread.start();
+ LocationManager lm = context.createAttributionContext("telephony")
+ .getSystemService(LocationManager.class);
sInstance = new SatelliteAccessController(context, featureFlags,
- handlerThread.getLooper(), context.getSystemService(LocationManager.class),
+ handlerThread.getLooper(), lm,
context.getSystemService(TelecomManager.class), null, null);
}
return sInstance;
@@ -788,7 +795,7 @@
sendSatelliteAllowResultToReceivers(resultCode, bundle, false);
} else {
logd("Satellite is provisioned");
- checkSatelliteAccessRestrictionForCurrentLocation();
+ checkSatelliteAccessRestrictionUsingGPS();
}
} else {
loge("KEY_SATELLITE_PROVISIONED does not exist.");
@@ -839,6 +846,55 @@
}
/**
+ * Telephony-internal logic to verify if satellite access is restricted from the location query.
+ */
+ private void checkSatelliteAccessRestrictionUsingGPS() {
+ logv("checkSatelliteAccessRestrictionUsingGPS:");
+ if (isInEmergency()) {
+ executeLocationQuery();
+ } else {
+ if (mLocationManager.isLocationEnabled()) {
+ logd("location query is allowed");
+ if (isCommunicationAllowedCacheValid()) {
+ Bundle bundle = new Bundle();
+ bundle.putBoolean(KEY_SATELLITE_COMMUNICATION_ALLOWED,
+ mLatestSatelliteCommunicationAllowed);
+ sendSatelliteAllowResultToReceivers(SATELLITE_RESULT_SUCCESS, bundle,
+ mLatestSatelliteCommunicationAllowed);
+ } else {
+ executeLocationQuery();
+ }
+ } else {
+ logv("location query is not allowed");
+ Bundle bundle = new Bundle();
+ bundle.putBoolean(KEY_SATELLITE_COMMUNICATION_ALLOWED, false);
+ sendSatelliteAllowResultToReceivers(SATELLITE_RESULT_SUCCESS, bundle, false);
+ }
+ }
+ }
+
+ /* returns true,if the latest query was executed in 24Hr, or returns false. */
+ private boolean isCommunicationAllowedCacheValid() {
+ if (mLatestSatelliteCommunicationAllowedSetTime > 0) {
+ long currentTime = SystemClock.elapsedRealtimeNanos();
+ if ((currentTime - mLatestSatelliteCommunicationAllowedSetTime) <= NANOS_IN_DAY) {
+ logv("isCommunicationAllowedCacheValid: cache is valid");
+ return true;
+ }
+ }
+ logv("isCommunicationAllowedCacheValid: cache is expired");
+ return false;
+ }
+
+ private void executeLocationQuery() {
+ logv("executeLocationQuery");
+ synchronized (mLock) {
+ mFreshLastKnownLocation = getFreshLastKnownLocation();
+ checkSatelliteAccessRestrictionUsingOnDeviceData();
+ }
+ }
+
+ /**
* This function synchronously checks if satellite is allowed at current location using cached
* country codes.
*/
@@ -915,7 +971,18 @@
if (location != null) {
checkSatelliteAccessRestrictionForLocation(location);
} else {
- checkSatelliteAccessRestrictionUsingCachedCountryCodes();
+ logd("current location is not available");
+ Bundle bundle = new Bundle();
+ if (isCommunicationAllowedCacheValid()) {
+ logd("onCurrentLocationAvailable: 24Hr cache is still valid, using it");
+ bundle.putBoolean(KEY_SATELLITE_COMMUNICATION_ALLOWED,
+ mLatestSatelliteCommunicationAllowed);
+ sendSatelliteAllowResultToReceivers(SATELLITE_RESULT_SUCCESS, bundle,
+ mLatestSatelliteCommunicationAllowed);
+ } else {
+ bundle.putBoolean(KEY_SATELLITE_COMMUNICATION_ALLOWED, false);
+ sendSatelliteAllowResultToReceivers(SATELLITE_RESULT_SUCCESS, bundle, false);
+ }
}
}
}
@@ -933,7 +1000,10 @@
} else {
if (!initSatelliteOnDeviceAccessController()) {
loge("Failed to init SatelliteOnDeviceAccessController");
- checkSatelliteAccessRestrictionUsingCachedCountryCodes();
+ Bundle bundle = new Bundle();
+ bundle.putBoolean(KEY_SATELLITE_COMMUNICATION_ALLOWED, false);
+ sendSatelliteAllowResultToReceivers(SATELLITE_RESULT_SUCCESS, bundle,
+ false);
return;
}
satelliteAllowed = mSatelliteOnDeviceAccessController
@@ -944,11 +1014,23 @@
bundle.putBoolean(KEY_SATELLITE_COMMUNICATION_ALLOWED, satelliteAllowed);
sendSatelliteAllowResultToReceivers(SATELLITE_RESULT_SUCCESS, bundle,
satelliteAllowed);
+ mLatestSatelliteCommunicationAllowed = satelliteAllowed;
+ mLatestSatelliteCommunicationAllowedSetTime = SystemClock.elapsedRealtimeNanos();
} catch (Exception ex) {
loge("checkSatelliteAccessRestrictionForLocation: ex=" + ex);
reportAnomaly(UUID_ON_DEVICE_LOOKUP_EXCEPTION,
"On-device satellite lookup exception");
- checkSatelliteAccessRestrictionUsingCachedCountryCodes();
+ Bundle bundle = new Bundle();
+ if (isCommunicationAllowedCacheValid()) {
+ bundle.putBoolean(KEY_SATELLITE_COMMUNICATION_ALLOWED,
+ mLatestSatelliteCommunicationAllowed);
+ logd("checkSatelliteAccessRestrictionForLocation: 24Hr cache is still valid, "
+ + "using it");
+ } else {
+ bundle.putBoolean(KEY_SATELLITE_COMMUNICATION_ALLOWED, false);
+ }
+ sendSatelliteAllowResultToReceivers(SATELLITE_RESULT_SUCCESS, bundle,
+ mLatestSatelliteCommunicationAllowed);
}
}
}
@@ -1324,6 +1406,49 @@
mSatelliteCommunicationAllowedStateChangedListeners.remove(callback.asBinder());
}
+ /**
+ * This API can be used by only CTS to set the cache whether satellite communication is allowed.
+ *
+ * @param state a state indicates whether satellite access allowed state should be cached and
+ * the allowed state.
+ * @return {@code true} if the setting is successful, {@code false} otherwise.
+ */
+ public boolean setIsSatelliteCommunicationAllowedForCurrentLocationCache(String state) {
+ if (!mFeatureFlags.oemEnabledSatelliteFlag()) {
+ logd("setIsSatelliteCommunicationAllowedForCurrentLocationCache: "
+ + "oemEnabledSatelliteFlag is disabled");
+ return false;
+ }
+
+ if (!isMockModemAllowed()) {
+ logd("setIsSatelliteCommunicationAllowedForCurrentLocationCache: "
+ + "mock modem not allowed.");
+ return false;
+ }
+
+ logd("setIsSatelliteCommunicationAllowedForCurrentLocationCache: state=" + state);
+
+ synchronized (mSatelliteCommunicationAllowStateLock) {
+ if ("cache_allowed".equalsIgnoreCase(state)) {
+ mLatestSatelliteCommunicationAllowedSetTime = SystemClock.elapsedRealtimeNanos();
+ mLatestSatelliteCommunicationAllowed = true;
+ mCurrentSatelliteAllowedState = true;
+ } else if ("cache_clear_and_not_allowed".equalsIgnoreCase(state)) {
+ mLatestSatelliteCommunicationAllowedSetTime = 0;
+ mLatestSatelliteCommunicationAllowed = false;
+ mCurrentSatelliteAllowedState = false;
+ } else if ("clear_cache_only".equalsIgnoreCase(state)) {
+ mLatestSatelliteCommunicationAllowedSetTime = 0;
+ mLatestSatelliteCommunicationAllowed = false;
+ } else {
+ loge("setIsSatelliteCommunicationAllowedForCurrentLocationCache: invalid state="
+ + state);
+ return false;
+ }
+ }
+ return true;
+ }
+
private void notifySatelliteCommunicationAllowedStateChanged(boolean allowState) {
logd("notifySatelliteCommunicationAllowedStateChanged: allowState=" + allowState);
@@ -1352,4 +1477,8 @@
private static void loge(@NonNull String log) {
Rlog.e(TAG, log);
}
+
+ private static void logv(@NonNull String log) {
+ Rlog.v(TAG, log);
+ }
}
diff --git a/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java b/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java
index 5c651da..daa4b4e 100644
--- a/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java
+++ b/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java
@@ -1057,8 +1057,8 @@
+ ", lastNetworkType=" + accessNetworkTypeToString(mLastNetworkType));
if (mLastRegResult != null
- && !SubscriptionManager.isValidSubscriptionId(getSubId())
- && sPreferGeranWhenSimAbsent.contains(mLastRegResult.getCountryIso())) {
+ && sPreferGeranWhenSimAbsent.contains(mLastRegResult.getCountryIso())
+ && !isSimReady()) {
logi("getNextPreferredNetworks preferGeran");
preferredNetworks.add(GERAN);
preferredNetworks.add(UTRAN);
diff --git a/src/com/android/services/telephony/domainselection/NormalCallDomainSelector.java b/src/com/android/services/telephony/domainselection/NormalCallDomainSelector.java
index 31a1cc2..8d49634 100644
--- a/src/com/android/services/telephony/domainselection/NormalCallDomainSelector.java
+++ b/src/com/android/services/telephony/domainselection/NormalCallDomainSelector.java
@@ -108,7 +108,7 @@
mSelectorState = SelectorState.INACTIVE;
loge("Subscription-ids doesn't match. This instance is associated with sub-id:"
+ getSubId() + ", requested sub-id:" + subId);
- // TODO: Throw anamoly here. This condition should never occur.
+ // TODO: Throw anomaly here. This condition should never occur.
}
}
@@ -314,6 +314,7 @@
private synchronized void selectDomain() {
if (mSelectorState != SelectorState.ACTIVE || mSelectionAttributes == null
|| mTransportSelectorCallback == null) {
+ mSelectorState = SelectorState.INACTIVE;
logd("Domain Selection is stopped.");
return;
}
@@ -429,7 +430,7 @@
}
@VisibleForTesting
- public SelectorState getSelectorState() {
+ protected SelectorState getSelectorState() {
return mSelectorState;
}
}
diff --git a/testapps/TestSatelliteApp/src/com/android/phone/testapps/satellitetestapp/TestSatelliteService.java b/testapps/TestSatelliteApp/src/com/android/phone/testapps/satellitetestapp/TestSatelliteService.java
index d79240e..b5b781c 100644
--- a/testapps/TestSatelliteApp/src/com/android/phone/testapps/satellitetestapp/TestSatelliteService.java
+++ b/testapps/TestSatelliteApp/src/com/android/phone/testapps/satellitetestapp/TestSatelliteService.java
@@ -36,6 +36,7 @@
import android.telephony.satellite.stub.SatelliteModemState;
import android.telephony.satellite.stub.SatelliteResult;
import android.telephony.satellite.stub.SatelliteService;
+import android.telephony.satellite.stub.SystemSelectionSpecifier;
import android.util.Log;
import com.android.internal.util.FunctionalUtils;
@@ -434,6 +435,23 @@
mIsRequestIsSatelliteEnabledForCarrier = true;
}
+ @Override
+ public void updateSatelliteSubscription(@NonNull String iccId,
+ @NonNull IIntegerConsumer resultCallback) {
+ logd("updateSatelliteSubscription: iccId=" + iccId + " mErrorCode=" + mErrorCode);
+ runWithExecutor(() -> resultCallback.accept(mErrorCode));
+ }
+
+ @Override
+ public void updateSystemSelectionChannels(
+ @NonNull List<SystemSelectionSpecifier> systemSelectionSpecifiers,
+ @NonNull IIntegerConsumer resultCallback) {
+ logd(" updateSystemSelectionChannels: "
+ + "systemSelectionSpecifiers=" + systemSelectionSpecifiers
+ + " mErrorCode=" + mErrorCode);
+ runWithExecutor(() -> resultCallback.accept(mErrorCode));
+ }
+
public void setLocalSatelliteListener(@NonNull ILocalSatelliteListener listener) {
logd("setLocalSatelliteListener: listener=" + listener);
mLocalListener = listener;
diff --git a/tests/src/com/android/phone/satellite/accesscontrol/SatelliteAccessControllerTest.java b/tests/src/com/android/phone/satellite/accesscontrol/SatelliteAccessControllerTest.java
index 62d9d8c..f2427b1 100644
--- a/tests/src/com/android/phone/satellite/accesscontrol/SatelliteAccessControllerTest.java
+++ b/tests/src/com/android/phone/satellite/accesscontrol/SatelliteAccessControllerTest.java
@@ -323,22 +323,11 @@
mSatelliteAllowedSemaphore, 1));
assertEquals(SATELLITE_RESULT_MODEM_ERROR, mQueriedSatelliteAllowedResultCode);
- // Network country codes are available.
- setUpResponseForRequestIsSatelliteSupported(true, SATELLITE_RESULT_SUCCESS);
- setUpResponseForRequestIsSatelliteProvisioned(true, SATELLITE_RESULT_SUCCESS);
- clearAllInvocations();
- when(mMockCountryDetector.getCurrentNetworkCountryIso()).thenReturn(listOf("US", "CA"));
- mSatelliteAccessControllerUT.requestIsCommunicationAllowedForCurrentLocation(
- SUB_ID, mSatelliteAllowedReceiver);
- mTestableLooper.processAllMessages();
- assertTrue(waitForRequestIsSatelliteAllowedForCurrentLocationResult(
- mSatelliteAllowedSemaphore, 1));
- assertEquals(SATELLITE_RESULT_SUCCESS, mQueriedSatelliteAllowedResultCode);
- assertTrue(mQueriedSatelliteAllowed);
-
// Network country codes are not available. TelecomManager.isInEmergencyCall() returns true.
// On-device access controller will be used. Last known location is available and fresh.
clearAllInvocations();
+ setUpResponseForRequestIsSatelliteSupported(true, SATELLITE_RESULT_SUCCESS);
+ setUpResponseForRequestIsSatelliteProvisioned(true, SATELLITE_RESULT_SUCCESS);
when(mMockCountryDetector.getCurrentNetworkCountryIso()).thenReturn(EMPTY_STRING_LIST);
when(mMockTelecomManager.isInEmergencyCall()).thenReturn(true);
mSatelliteAccessControllerUT.elapsedRealtimeNanos = TEST_LOCATION_FRESH_DURATION_NANOS + 1;
@@ -424,12 +413,11 @@
assertFalse(mSatelliteAccessControllerUT.isWaitForCurrentLocationTimerStarted());
verify(mMockSatelliteOnDeviceAccessController, never()).isSatCommunicationAllowedAtLocation(
any(SatelliteOnDeviceAccessController.LocationToken.class));
- verifyCountryDetectorApisCalled();
assertTrue(waitForRequestIsSatelliteAllowedForCurrentLocationResult(
mSatelliteAllowedSemaphore, 1));
assertEquals(SATELLITE_RESULT_SUCCESS,
mQueriedSatelliteAllowedResultCode);
- assertFalse(mQueriedSatelliteAllowed);
+ assertTrue(mQueriedSatelliteAllowed);
// Network country codes are not available. TelecomManager.isInEmergencyCall() returns
// false. No phone is in ECM. Last known location is not fresh. Cached country codes should
@@ -452,43 +440,11 @@
any(Consumer.class));
verify(mMockSatelliteOnDeviceAccessController, never()).isSatCommunicationAllowedAtLocation(
any(SatelliteOnDeviceAccessController.LocationToken.class));
- verifyCountryDetectorApisCalled();
assertTrue(waitForRequestIsSatelliteAllowedForCurrentLocationResult(
mSatelliteAllowedSemaphore, 1));
assertEquals(SATELLITE_RESULT_SUCCESS, mQueriedSatelliteAllowedResultCode);
assertFalse(mQueriedSatelliteAllowed);
- // Network country codes are not available. TelecomManager.isInEmergencyCall() returns
- // false. No phone is in ECM. Last known location is not fresh. Cached country codes should
- // be used for verifying satellite allow. Cached country codes are available.
- clearAllInvocations();
- when(mMockCountryDetector.getCurrentNetworkCountryIso()).thenReturn(EMPTY_STRING_LIST);
- when(mMockCountryDetector.getCachedLocationCountryIsoInfo())
- .thenReturn(new Pair<>("US", 5L));
- Map<String, Long> cachedNetworkCountryCodes = new HashMap<>();
- cachedNetworkCountryCodes.put("UK", 1L);
- cachedNetworkCountryCodes.put("US", 3L);
- when(mMockCountryDetector.getCachedNetworkCountryIsoInfo())
- .thenReturn(cachedNetworkCountryCodes);
- when(mMockTelecomManager.isInEmergencyCall()).thenReturn(false);
- when(mMockPhone.isInEcm()).thenReturn(false);
- when(mMockPhone2.isInEcm()).thenReturn(false);
- mSatelliteAccessControllerUT.elapsedRealtimeNanos = TEST_LOCATION_FRESH_DURATION_NANOS + 1;
- when(mMockLocation0.getElapsedRealtimeNanos()).thenReturn(0L);
- when(mMockLocation1.getElapsedRealtimeNanos()).thenReturn(0L);
- mSatelliteAccessControllerUT.requestIsCommunicationAllowedForCurrentLocation(
- SUB_ID, mSatelliteAllowedReceiver);
- mTestableLooper.processAllMessages();
- verify(mMockLocationManager, never()).getCurrentLocation(anyString(),
- any(LocationRequest.class), any(CancellationSignal.class), any(Executor.class),
- any(Consumer.class));
- verify(mMockSatelliteOnDeviceAccessController, never()).isSatCommunicationAllowedAtLocation(
- any(SatelliteOnDeviceAccessController.LocationToken.class));
- verifyCountryDetectorApisCalled();
- assertTrue(waitForRequestIsSatelliteAllowedForCurrentLocationResult(
- mSatelliteAllowedSemaphore, 1));
- assertEquals(SATELLITE_RESULT_SUCCESS, mQueriedSatelliteAllowedResultCode);
- assertTrue(mQueriedSatelliteAllowed);
}
@Test
diff --git a/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java b/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java
index 5062b32..f783a12 100644
--- a/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java
+++ b/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java
@@ -3971,7 +3971,7 @@
}
@Test
- public void testAdjustCsRatPreference() throws Exception {
+ public void testInvalidSubscriptionAdjustCsRatPreference() throws Exception {
doReturn(new String[] {"us"}).when(mResources).getStringArray(
eq(R.array.config_countries_prefer_geran_when_sim_absent));
@@ -3998,6 +3998,34 @@
}
@Test
+ public void testSimNotReadyAdjustCsRatPreference() throws Exception {
+ doReturn(new String[] {"us"}).when(mResources).getStringArray(
+ eq(R.array.config_countries_prefer_geran_when_sim_absent));
+
+ createSelector(SLOT_0_SUB_ID);
+ unsolBarringInfoChanged(false);
+ // SIM state is not ready.
+ doReturn(TelephonyManager.SIM_STATE_PIN_REQUIRED)
+ .when(mTelephonyManager).getSimState(anyInt());
+
+ EmergencyRegistrationResult regResult = getEmergencyRegResult(EUTRAN,
+ REGISTRATION_STATE_UNKNOWN, 0, false, true, 0, 0, "", "", "us");
+ SelectionAttributes attr = getSelectionAttributes(SLOT_0, SLOT_0_SUB_ID, regResult);
+ mDomainSelector.selectDomain(attr, mTransportSelectorCallback);
+ processAllMessages();
+
+ bindImsServiceUnregistered();
+
+ verifyPsDialed();
+
+ mDomainSelector.reselectDomain(attr);
+ processAllMessages();
+
+ // Verify adjusted RAT preference
+ verifyScanPreferred(DomainSelectionService.SCAN_TYPE_NO_PREFERENCE, GERAN);
+ }
+
+ @Test
public void testNotAdjustCsRatPreferenceCountryNotIdentified() throws Exception {
doReturn(new String[] {"us"}).when(mResources).getStringArray(
eq(R.array.config_countries_prefer_geran_when_sim_absent));
diff --git a/tests/src/com/android/services/telephony/domainselection/NormalCallDomainSelectorTest.java b/tests/src/com/android/services/telephony/domainselection/NormalCallDomainSelectorTest.java
index 6e438bf..309418e 100644
--- a/tests/src/com/android/services/telephony/domainselection/NormalCallDomainSelectorTest.java
+++ b/tests/src/com/android/services/telephony/domainselection/NormalCallDomainSelectorTest.java
@@ -48,6 +48,7 @@
import android.telephony.ims.ImsManager;
import android.telephony.ims.ImsMmTelManager;
import android.telephony.ims.ImsReasonInfo;
+import android.testing.TestableLooper;
import android.util.Log;
import androidx.test.runner.AndroidJUnit4;
@@ -60,7 +61,6 @@
import org.mockito.MockitoAnnotations;
import java.util.List;
-import java.util.concurrent.Executors;
import java.util.function.Consumer;
/**
@@ -79,7 +79,7 @@
private HandlerThread mHandlerThread;
private NormalCallDomainSelector mNormalCallDomainSelector;
-
+ private TestableLooper mTestableLooper;
@Mock private Context mMockContext;
@Mock private CarrierConfigManager mMockCarrierConfigMgr;
@Mock private ImsManager mMockImsManager;
@@ -124,6 +124,12 @@
mNormalCallDomainSelector = new NormalCallDomainSelector(mMockContext, SLOT_ID, SUB_ID_1,
mHandlerThread.getLooper(), mMockImsStateTracker, mMockDestroyListener);
+
+ try {
+ setUpTestableLooper();
+ } catch (Exception e) {
+ fail(e.toString());
+ }
}
@After
@@ -131,6 +137,23 @@
if (mHandlerThread != null) {
mHandlerThread.quit();
}
+
+ if (mTestableLooper != null) {
+ mTestableLooper.destroy();
+ mTestableLooper = null;
+ }
+ }
+
+ private void setUpTestableLooper() throws Exception {
+ mTestableLooper = new TestableLooper(mNormalCallDomainSelector.getLooper());
+ }
+
+ private void processAllMessages() {
+ Log.d(TAG, "processAllMessages - start");
+ while (!mTestableLooper.getLooper().getQueue().isIdle()) {
+ mTestableLooper.processAllMessages();
+ }
+ Log.d(TAG, "processAllMessages - end");
}
private void initialize(ServiceState serviceState, boolean isImsRegistered,
@@ -154,22 +177,22 @@
@Test
public void testInitialState() {
- assertEquals(mNormalCallDomainSelector.getSelectorState(),
- NormalCallDomainSelector.SelectorState.INACTIVE);
+ assertEquals(NormalCallDomainSelector.SelectorState.INACTIVE,
+ mNormalCallDomainSelector.getSelectorState());
}
@Test
public void testDestroyedState() {
mNormalCallDomainSelector.destroy();
- assertEquals(mNormalCallDomainSelector.getSelectorState(),
- NormalCallDomainSelector.SelectorState.DESTROYED);
+ assertEquals(NormalCallDomainSelector.SelectorState.DESTROYED,
+ mNormalCallDomainSelector.getSelectorState());
}
@Test
public void testDestroyedDuringActiveState() {
- MockTransportSelectorCallback transportSelectorCallback =
- new MockTransportSelectorCallback(mNormalCallDomainSelector);
+ TestTransportSelectorCallback transportSelectorCallback =
+ new TestTransportSelectorCallback(mNormalCallDomainSelector);
DomainSelectionService.SelectionAttributes attributes =
new DomainSelectionService.SelectionAttributes.Builder(
@@ -183,19 +206,19 @@
mNormalCallDomainSelector.selectDomain(attributes, transportSelectorCallback);
- assertEquals(mNormalCallDomainSelector.getSelectorState(),
- NormalCallDomainSelector.SelectorState.ACTIVE);
+ assertEquals(NormalCallDomainSelector.SelectorState.ACTIVE,
+ mNormalCallDomainSelector.getSelectorState());
mNormalCallDomainSelector.destroy();
- assertEquals(mNormalCallDomainSelector.getSelectorState(),
- NormalCallDomainSelector.SelectorState.DESTROYED);
+ assertEquals(NormalCallDomainSelector.SelectorState.DESTROYED,
+ mNormalCallDomainSelector.getSelectorState());
}
@Test
public void testSelectDomainInputParams() {
- MockTransportSelectorCallback transportSelectorCallback =
- new MockTransportSelectorCallback(mNormalCallDomainSelector);
+ TestTransportSelectorCallback transportSelectorCallback =
+ new TestTransportSelectorCallback(mNormalCallDomainSelector);
DomainSelectionService.SelectionAttributes attributes =
new DomainSelectionService.SelectionAttributes.Builder(
@@ -208,8 +231,8 @@
.build();
mNormalCallDomainSelector.selectDomain(attributes, transportSelectorCallback);
- assertEquals(mNormalCallDomainSelector.getSelectorState(),
- NormalCallDomainSelector.SelectorState.ACTIVE);
+ assertEquals(NormalCallDomainSelector.SelectorState.ACTIVE,
+ mNormalCallDomainSelector.getSelectorState());
// Case 1: null inputs
try {
@@ -218,8 +241,8 @@
fail("Invalid input params not handled." + e.getMessage());
}
- assertEquals(mNormalCallDomainSelector.getSelectorState(),
- NormalCallDomainSelector.SelectorState.INACTIVE);
+ assertEquals(NormalCallDomainSelector.SelectorState.INACTIVE,
+ mNormalCallDomainSelector.getSelectorState());
// Case 2: null TransportSelectorCallback
try {
@@ -228,8 +251,8 @@
fail("Invalid params (SelectionAttributes) not handled." + e.getMessage());
}
- assertEquals(mNormalCallDomainSelector.getSelectorState(),
- NormalCallDomainSelector.SelectorState.INACTIVE);
+ assertEquals(NormalCallDomainSelector.SelectorState.INACTIVE,
+ mNormalCallDomainSelector.getSelectorState());
// Case 3: null SelectionAttributes
transportSelectorCallback.mSelectionTerminated = false;
@@ -239,11 +262,10 @@
fail("Invalid params (SelectionAttributes) not handled." + e.getMessage());
}
- assertTrue(transportSelectorCallback
- .verifyOnSelectionTerminated(DisconnectCause.OUTGOING_FAILURE));
-
- assertEquals(mNormalCallDomainSelector.getSelectorState(),
- NormalCallDomainSelector.SelectorState.DESTROYED);
+ assertTrue(transportSelectorCallback.mSelectionTerminated);
+ assertEquals(transportSelectorCallback.mCauseCode, DisconnectCause.OUTGOING_FAILURE);
+ assertEquals(NormalCallDomainSelector.SelectorState.DESTROYED,
+ mNormalCallDomainSelector.getSelectorState());
// Case 4: Invalid Subscription-id
attributes = new DomainSelectionService.SelectionAttributes.Builder(
@@ -260,11 +282,10 @@
fail("Invalid params (SelectionAttributes) not handled." + e.getMessage());
}
- assertTrue(transportSelectorCallback
- .verifyOnSelectionTerminated(DisconnectCause.OUTGOING_FAILURE));
-
- assertEquals(mNormalCallDomainSelector.getSelectorState(),
- NormalCallDomainSelector.SelectorState.DESTROYED);
+ assertTrue(transportSelectorCallback.mSelectionTerminated);
+ assertEquals(transportSelectorCallback.mCauseCode, DisconnectCause.OUTGOING_FAILURE);
+ assertEquals(NormalCallDomainSelector.SelectorState.DESTROYED,
+ mNormalCallDomainSelector.getSelectorState());
// Case 5: Invalid SELECTOR_TYPE
attributes =
@@ -282,11 +303,10 @@
fail("Invalid params (SelectionAttributes) not handled." + e.getMessage());
}
- assertTrue(transportSelectorCallback
- .verifyOnSelectionTerminated(DisconnectCause.OUTGOING_FAILURE));
-
- assertEquals(mNormalCallDomainSelector.getSelectorState(),
- NormalCallDomainSelector.SelectorState.DESTROYED);
+ assertTrue(transportSelectorCallback.mSelectionTerminated);
+ assertEquals(transportSelectorCallback.mCauseCode, DisconnectCause.OUTGOING_FAILURE);
+ assertEquals(NormalCallDomainSelector.SelectorState.DESTROYED,
+ mNormalCallDomainSelector.getSelectorState());
// Case 6: Emergency Call
attributes = new DomainSelectionService.SelectionAttributes.Builder(
@@ -303,44 +323,52 @@
fail("Invalid params (SelectionAttributes) not handled." + e.getMessage());
}
- assertEquals(mNormalCallDomainSelector.getSelectorState(),
- NormalCallDomainSelector.SelectorState.DESTROYED);
-
- assertTrue(transportSelectorCallback
- .verifyOnSelectionTerminated(DisconnectCause.OUTGOING_FAILURE));
+ assertTrue(transportSelectorCallback.mSelectionTerminated);
+ assertEquals(transportSelectorCallback.mCauseCode, DisconnectCause.OUTGOING_FAILURE);
+ assertEquals(NormalCallDomainSelector.SelectorState.DESTROYED,
+ mNormalCallDomainSelector.getSelectorState());
}
@Test
public void testOutOfService() {
- MockTransportSelectorCallback transportSelectorCallback =
- new MockTransportSelectorCallback(mNormalCallDomainSelector);
- DomainSelectionService.SelectionAttributes attributes =
- new DomainSelectionService.SelectionAttributes.Builder(
- SLOT_ID, SUB_ID_1, SELECTOR_TYPE_CALLING)
- .setAddress(TEST_URI)
- .setCallId(TEST_CALLID)
- .setEmergency(false)
- .setVideoCall(true)
- .setExitedFromAirplaneMode(false)
- .build();
+ final TestTransportSelectorCallback transportSelectorCallback =
+ new TestTransportSelectorCallback(mNormalCallDomainSelector);
+ mNormalCallDomainSelector.post(() -> {
- ServiceState serviceState = new ServiceState();
- serviceState.setStateOutOfService();
- initialize(serviceState, false, false, false, false);
+ DomainSelectionService.SelectionAttributes attributes =
+ new DomainSelectionService.SelectionAttributes.Builder(
+ SLOT_ID, SUB_ID_1, SELECTOR_TYPE_CALLING)
+ .setAddress(TEST_URI)
+ .setCallId(TEST_CALLID)
+ .setEmergency(false)
+ .setVideoCall(true)
+ .setExitedFromAirplaneMode(false)
+ .build();
- mNormalCallDomainSelector.selectDomain(attributes, transportSelectorCallback);
+ ServiceState serviceState = new ServiceState();
+ serviceState.setStateOutOfService();
+ initialize(serviceState, false, false, false, false);
- assertTrue(transportSelectorCallback
- .verifyOnSelectionTerminated(DisconnectCause.OUT_OF_SERVICE));
+ mNormalCallDomainSelector.selectDomain(attributes, transportSelectorCallback);
+ });
- assertEquals(mNormalCallDomainSelector.getSelectorState(),
- NormalCallDomainSelector.SelectorState.DESTROYED);
+ processAllMessages();
+ assertTrue(transportSelectorCallback.mSelectionTerminated);
+ assertEquals(DisconnectCause.OUT_OF_SERVICE, transportSelectorCallback.mCauseCode);
+
+ assertEquals(NormalCallDomainSelector.SelectorState.DESTROYED,
+ mNormalCallDomainSelector.getSelectorState());
}
@Test
public void testDomainSelection() {
- MockTransportSelectorCallback transportSelectorCallback =
- new MockTransportSelectorCallback(mNormalCallDomainSelector);
+ final TestTransportSelectorCallback transportSelectorCallback =
+ new TestTransportSelectorCallback(mNormalCallDomainSelector);
+
+ final ServiceState serviceState = new ServiceState();
+ serviceState.setState(ServiceState.STATE_IN_SERVICE);
+ initialize(serviceState, true, true, true, true);
+ transportSelectorCallback.reset();
DomainSelectionService.SelectionAttributes attributes =
new DomainSelectionService.SelectionAttributes.Builder(
SLOT_ID, SUB_ID_1, SELECTOR_TYPE_CALLING)
@@ -352,34 +380,17 @@
.build();
// Case 1: WLAN
- ServiceState serviceState = new ServiceState();
- serviceState.setState(ServiceState.STATE_IN_SERVICE);
- initialize(serviceState, true, true, true, true);
-
mNormalCallDomainSelector.selectDomain(attributes, transportSelectorCallback);
- assertTrue(transportSelectorCallback.verifyOnWlanSelected());
-
- assertEquals(mNormalCallDomainSelector.getSelectorState(),
- NormalCallDomainSelector.SelectorState.INACTIVE);
+ processAllMessages();
+ assertTrue(transportSelectorCallback.mWlanSelected);
+ assertEquals(NormalCallDomainSelector.SelectorState.INACTIVE,
+ mNormalCallDomainSelector.getSelectorState());
// Case 2: 5G
- mNormalCallDomainSelector.selectDomain(attributes, transportSelectorCallback);
-
+ serviceState.setState(ServiceState.STATE_IN_SERVICE);
initialize(serviceState, true, false, true, true);
- mNormalCallDomainSelector.selectDomain(attributes, transportSelectorCallback);
-
- assertTrue(transportSelectorCallback.verifyOnWwanSelected());
-
- assertTrue(transportSelectorCallback
- .verifyOnDomainSelected(NetworkRegistrationInfo.DOMAIN_PS));
-
- assertEquals(mNormalCallDomainSelector.getSelectorState(),
- NormalCallDomainSelector.SelectorState.INACTIVE);
-
- // Case 3: PS -> CS redial
- ImsReasonInfo imsReasonInfo = new ImsReasonInfo();
- imsReasonInfo.mCode = ImsReasonInfo.CODE_LOCAL_CALL_CS_RETRY_REQUIRED;
+ transportSelectorCallback.reset();
attributes = new DomainSelectionService.SelectionAttributes.Builder(
SLOT_ID, SUB_ID_1, SELECTOR_TYPE_CALLING)
.setAddress(TEST_URI)
@@ -387,54 +398,89 @@
.setEmergency(false)
.setVideoCall(false)
.setExitedFromAirplaneMode(false)
- .setPsDisconnectCause(imsReasonInfo)
+ .build();
+
+ mNormalCallDomainSelector.selectDomain(attributes, transportSelectorCallback);
+
+ processAllMessages();
+ assertTrue(transportSelectorCallback.mWwanSelected);
+ assertEquals(NetworkRegistrationInfo.DOMAIN_PS, transportSelectorCallback.mSelectedDomain);
+ assertEquals(NormalCallDomainSelector.SelectorState.INACTIVE,
+ mNormalCallDomainSelector.getSelectorState());
+
+
+ // Case 3: PS -> CS redial
+ final ImsReasonInfo imsReasonInfoCsRetry = new ImsReasonInfo(
+ ImsReasonInfo.CODE_LOCAL_CALL_CS_RETRY_REQUIRED, 0, null);
+ transportSelectorCallback.reset();
+ attributes = new DomainSelectionService.SelectionAttributes.Builder(
+ SLOT_ID, SUB_ID_1, SELECTOR_TYPE_CALLING)
+ .setAddress(TEST_URI)
+ .setCallId(TEST_CALLID)
+ .setEmergency(false)
+ .setVideoCall(false)
+ .setExitedFromAirplaneMode(false)
+ .setPsDisconnectCause(imsReasonInfoCsRetry)
.build();
mNormalCallDomainSelector.reselectDomain(attributes);
- assertTrue(transportSelectorCallback
- .verifyOnDomainSelected(NetworkRegistrationInfo.DOMAIN_CS));
-
- assertEquals(mNormalCallDomainSelector.getSelectorState(),
- NormalCallDomainSelector.SelectorState.INACTIVE);
+ processAllMessages();
+ assertEquals(transportSelectorCallback.mSelectedDomain, NetworkRegistrationInfo.DOMAIN_CS);
+ assertEquals(NormalCallDomainSelector.SelectorState.INACTIVE,
+ mNormalCallDomainSelector.getSelectorState());
// Case 4: CS call
+ transportSelectorCallback.reset();
+ initialize(serviceState, false, false, false, false);
NetworkRegistrationInfo nwRegistrationInfo = new NetworkRegistrationInfo(
NetworkRegistrationInfo.DOMAIN_CS, AccessNetworkConstants.TRANSPORT_TYPE_WWAN,
NetworkRegistrationInfo.REGISTRATION_STATE_HOME,
AccessNetworkConstants.AccessNetworkType.UTRAN, 0, false,
null, null, null, false, 0, 0, 0);
serviceState.addNetworkRegistrationInfo(nwRegistrationInfo);
+ attributes = new DomainSelectionService.SelectionAttributes.Builder(
+ SLOT_ID, SUB_ID_1, SELECTOR_TYPE_CALLING)
+ .setAddress(TEST_URI)
+ .setCallId(TEST_CALLID)
+ .setEmergency(false)
+ .setVideoCall(false)
+ .setExitedFromAirplaneMode(false)
+ .setPsDisconnectCause(imsReasonInfoCsRetry)
+ .build();
mNormalCallDomainSelector.selectDomain(attributes, transportSelectorCallback);
- initialize(serviceState, false, false, false, false);
- mNormalCallDomainSelector.selectDomain(attributes, transportSelectorCallback);
-
- assertTrue(transportSelectorCallback.verifyOnWwanSelected());
-
- assertTrue(transportSelectorCallback
- .verifyOnDomainSelected(NetworkRegistrationInfo.DOMAIN_CS));
-
- assertEquals(mNormalCallDomainSelector.getSelectorState(),
- NormalCallDomainSelector.SelectorState.INACTIVE);
+ processAllMessages();
+ assertEquals(transportSelectorCallback.mSelectedDomain, NetworkRegistrationInfo.DOMAIN_CS);
+ assertEquals(NormalCallDomainSelector.SelectorState.INACTIVE,
+ mNormalCallDomainSelector.getSelectorState());
//Case 5: Backup calling
serviceState.setStateOutOfService();
+ transportSelectorCallback.reset();
+ attributes = new DomainSelectionService.SelectionAttributes.Builder(
+ SLOT_ID, SUB_ID_1, SELECTOR_TYPE_CALLING)
+ .setAddress(TEST_URI)
+ .setCallId(TEST_CALLID)
+ .setEmergency(false)
+ .setVideoCall(false)
+ .setExitedFromAirplaneMode(false)
+ .setPsDisconnectCause(imsReasonInfoCsRetry)
+ .build();
initialize(serviceState, true, true, true, true);
-
mNormalCallDomainSelector.selectDomain(attributes, transportSelectorCallback);
- assertTrue(transportSelectorCallback.verifyOnWlanSelected());
-
- assertEquals(mNormalCallDomainSelector.getSelectorState(),
- NormalCallDomainSelector.SelectorState.ACTIVE);
+ processAllMessages();
+ assertTrue(transportSelectorCallback.mWlanSelected);
+ assertEquals(NormalCallDomainSelector.SelectorState.INACTIVE,
+ mNormalCallDomainSelector.getSelectorState());
}
@Test
public void testWPSCallDomainSelection() {
- MockTransportSelectorCallback transportSelectorCallback =
- new MockTransportSelectorCallback(mNormalCallDomainSelector);
+ TestTransportSelectorCallback transportSelectorCallback =
+ new TestTransportSelectorCallback(mNormalCallDomainSelector);
DomainSelectionService.SelectionAttributes attributes =
new DomainSelectionService.SelectionAttributes.Builder(
SLOT_ID, SUB_ID_1, SELECTOR_TYPE_CALLING)
@@ -457,46 +503,43 @@
mNormalCallDomainSelector.selectDomain(attributes, transportSelectorCallback);
- assertTrue(transportSelectorCallback.verifyOnWwanSelected());
-
- assertTrue(transportSelectorCallback
- .verifyOnDomainSelected(NetworkRegistrationInfo.DOMAIN_CS));
-
- assertEquals(mNormalCallDomainSelector.getSelectorState(),
- NormalCallDomainSelector.SelectorState.INACTIVE);
+ processAllMessages();
+ assertTrue(transportSelectorCallback.mWwanSelected);
+ assertEquals(transportSelectorCallback.mSelectedDomain, NetworkRegistrationInfo.DOMAIN_CS);
+ assertEquals(NormalCallDomainSelector.SelectorState.INACTIVE,
+ mNormalCallDomainSelector.getSelectorState());
//Case 2: WPS supported by IMS and WLAN registered
+ transportSelectorCallback.reset();
config.putBoolean(CarrierConfigManager.KEY_SUPPORT_WPS_OVER_IMS_BOOL, true);
serviceState.setState(ServiceState.STATE_IN_SERVICE);
initialize(serviceState, true, true, true, true);
mNormalCallDomainSelector.selectDomain(attributes, transportSelectorCallback);
- assertTrue(transportSelectorCallback.verifyOnWlanSelected());
-
+ processAllMessages();
+ assertTrue(transportSelectorCallback.mWlanSelected);
assertEquals(mNormalCallDomainSelector.getSelectorState(),
NormalCallDomainSelector.SelectorState.INACTIVE);
//Case 2: WPS supported by IMS and LTE registered
+ transportSelectorCallback.reset();
config.putBoolean(CarrierConfigManager.KEY_SUPPORT_WPS_OVER_IMS_BOOL, true);
serviceState.setState(ServiceState.STATE_IN_SERVICE);
initialize(serviceState, true, false, true, true);
mNormalCallDomainSelector.selectDomain(attributes, transportSelectorCallback);
- assertTrue(transportSelectorCallback.verifyOnWwanSelected());
-
- assertTrue(transportSelectorCallback
- .verifyOnDomainSelected(NetworkRegistrationInfo.DOMAIN_PS));
-
- assertEquals(mNormalCallDomainSelector.getSelectorState(),
- NormalCallDomainSelector.SelectorState.INACTIVE);
+ processAllMessages();
+ assertEquals(transportSelectorCallback.mSelectedDomain, NetworkRegistrationInfo.DOMAIN_PS);
+ assertEquals(NormalCallDomainSelector.SelectorState.INACTIVE,
+ mNormalCallDomainSelector.getSelectorState());
}
@Test
public void testTtyCallDomainSelection() {
- MockTransportSelectorCallback transportSelectorCallback =
- new MockTransportSelectorCallback(mNormalCallDomainSelector);
+ TestTransportSelectorCallback transportSelectorCallback =
+ new TestTransportSelectorCallback(mNormalCallDomainSelector);
DomainSelectionService.SelectionAttributes attributes =
new DomainSelectionService.SelectionAttributes.Builder(
SLOT_ID, SUB_ID_1, SELECTOR_TYPE_CALLING)
@@ -520,42 +563,34 @@
mNormalCallDomainSelector.selectDomain(attributes, transportSelectorCallback);
- assertTrue(transportSelectorCallback.verifyOnWwanSelected());
-
- assertTrue(transportSelectorCallback
- .verifyOnDomainSelected(NetworkRegistrationInfo.DOMAIN_CS));
-
- assertEquals(mNormalCallDomainSelector.getSelectorState(),
- NormalCallDomainSelector.SelectorState.INACTIVE);
+ processAllMessages();
+ assertTrue(transportSelectorCallback.mWwanSelected);
+ assertEquals(transportSelectorCallback.mSelectedDomain, NetworkRegistrationInfo.DOMAIN_CS);
+ assertEquals(NormalCallDomainSelector.SelectorState.INACTIVE,
+ mNormalCallDomainSelector.getSelectorState());
//Case 2: TTY supported by IMS and TTY enabled
+ transportSelectorCallback.reset();
config.putBoolean(CarrierConfigManager.KEY_CARRIER_VOLTE_TTY_SUPPORTED_BOOL, true);
mNormalCallDomainSelector.selectDomain(attributes, transportSelectorCallback);
- assertTrue(transportSelectorCallback.verifyOnWwanSelected());
-
- assertTrue(transportSelectorCallback
- .verifyOnDomainSelected(NetworkRegistrationInfo.DOMAIN_PS));
-
- assertEquals(mNormalCallDomainSelector.getSelectorState(),
- NormalCallDomainSelector.SelectorState.INACTIVE);
+ processAllMessages();
+ assertEquals(transportSelectorCallback.mSelectedDomain, NetworkRegistrationInfo.DOMAIN_PS);
+ assertEquals(NormalCallDomainSelector.SelectorState.INACTIVE,
+ mNormalCallDomainSelector.getSelectorState());
//Case 3: TTY supported by IMS and TTY disabled
+ transportSelectorCallback.reset();
doReturn(TelecomManager.TTY_MODE_OFF).when(mMockTelecomManager).getCurrentTtyMode();
mNormalCallDomainSelector.selectDomain(attributes, transportSelectorCallback);
- assertTrue(transportSelectorCallback.verifyOnWwanSelected());
-
- assertTrue(transportSelectorCallback
- .verifyOnDomainSelected(NetworkRegistrationInfo.DOMAIN_PS));
-
- assertEquals(mNormalCallDomainSelector.getSelectorState(),
- NormalCallDomainSelector.SelectorState.INACTIVE);
+ processAllMessages();
+ assertEquals(transportSelectorCallback.mSelectedDomain, NetworkRegistrationInfo.DOMAIN_PS);
+ assertEquals(NormalCallDomainSelector.SelectorState.INACTIVE,
+ mNormalCallDomainSelector.getSelectorState());
}
-
-
- static class MockTransportSelectorCallback implements TransportSelectorCallback,
+ static class TestTransportSelectorCallback implements TransportSelectorCallback,
WwanSelectorCallback {
public boolean mCreated;
public boolean mWlanSelected;
@@ -566,8 +601,9 @@
int mSelectedDomain;
NormalCallDomainSelector mNormalCallDomainSelector;
- MockTransportSelectorCallback(NormalCallDomainSelector normalCallDomainSelector) {
+ TestTransportSelectorCallback(NormalCallDomainSelector normalCallDomainSelector) {
mNormalCallDomainSelector = normalCallDomainSelector;
+ mCauseCode = DisconnectCause.NOT_VALID;
}
@Override
@@ -575,50 +611,21 @@
Log.d(TAG, "onCreated");
mCreated = true;
- assertEquals(mNormalCallDomainSelector.getSelectorState(),
- NormalCallDomainSelector.SelectorState.INACTIVE);
-
- notifyAll();
- }
-
- public boolean verifyOnCreated() {
- mCreated = false;
- Log.d(TAG, "verifyOnCreated");
- waitForCallback(mCreated);
- return mCreated;
+ assertEquals(NormalCallDomainSelector.SelectorState.INACTIVE,
+ mNormalCallDomainSelector.getSelectorState());
}
@Override
public synchronized void onWlanSelected(boolean useEmergencyPdn) {
Log.d(TAG, "onWlanSelected");
mWlanSelected = true;
-
- assertEquals(mNormalCallDomainSelector.getSelectorState(),
- NormalCallDomainSelector.SelectorState.INACTIVE);
-
- notifyAll();
- }
-
- public boolean verifyOnWlanSelected() {
- Log.d(TAG, "verifyOnWlanSelected");
- waitForCallback(mWlanSelected);
- return mWlanSelected;
}
@Override
public void onWwanSelected(final Consumer<WwanSelectorCallback> consumer) {
+ Log.d(TAG, "onWwanSelected");
mWwanSelected = true;
- Executors.newSingleThreadExecutor().execute(() -> {
- consumer.accept(this);
- });
-
- assertEquals(mNormalCallDomainSelector.getSelectorState(),
- NormalCallDomainSelector.SelectorState.INACTIVE);
- }
-
- public boolean verifyOnWwanSelected() {
- waitForCallback(mWwanSelected);
- return mWwanSelected;
+ consumer.accept(this);
}
@Override
@@ -627,31 +634,12 @@
mCauseCode = cause;
mSelectionTerminated = true;
- assertEquals(mNormalCallDomainSelector.getSelectorState(),
- NormalCallDomainSelector.SelectorState.INACTIVE);
+ assertEquals(NormalCallDomainSelector.SelectorState.INACTIVE,
+ mNormalCallDomainSelector.getSelectorState());
notifyAll();
}
- public boolean verifyOnSelectionTerminated(int cause) {
- Log.i(TAG, "verifyOnSelectionTerminated - called");
- waitForCallback(mSelectionTerminated);
- return (mSelectionTerminated && cause == mCauseCode);
- }
-
- private synchronized void waitForCallback(boolean condition) {
- long now = System.currentTimeMillis();
- long deadline = now + 1000;
- try {
- while (!condition && now < deadline) {
- wait(deadline - now);
- now = System.currentTimeMillis();
- }
- } catch (Exception e) {
- Log.i(TAG, e.getMessage());
- }
- }
-
@Override
public void onRequestEmergencyNetworkScan(@NonNull List<Integer> preferredNetworks,
int scanType,
@@ -668,17 +656,19 @@
mSelectedDomain = domain;
mDomainSelected = true;
- assertEquals(mNormalCallDomainSelector.getSelectorState(),
- NormalCallDomainSelector.SelectorState.INACTIVE);
+ assertEquals(NormalCallDomainSelector.SelectorState.INACTIVE,
+ mNormalCallDomainSelector.getSelectorState());
notifyAll();
}
-
- public boolean verifyOnDomainSelected(int domain) {
- Log.i(TAG, "verifyOnDomainSelected - called");
+ public void reset() {
+ mCreated = false;
+ mWlanSelected = false;
+ mWwanSelected = false;
+ mSelectionTerminated = false;
mDomainSelected = false;
- waitForCallback(mDomainSelected);
- return (domain == mSelectedDomain);
+ mCauseCode = DisconnectCause.NOT_VALID;
+ mSelectedDomain = NetworkRegistrationInfo.DOMAIN_UNKNOWN;
}
}
}