summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2021-10-12 21:53:29 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2021-10-12 21:53:29 +0000
commit85d80477a32d731b7dffb6d724c294034ec17617 (patch)
tree3fddf8d5072cb27f481b22768580832224109210
parent3d54d2ba70666b3fff67af58f34e073483c148c6 (diff)
parentcbaab12cf2bc6cac32b0eb90717c9a6f0b117322 (diff)
downloadplatform_packages_providers_TelephonyProvider-simpleperf-release.tar.gz
platform_packages_providers_TelephonyProvider-simpleperf-release.tar.bz2
platform_packages_providers_TelephonyProvider-simpleperf-release.zip
Merge "Snap for 7817384 from 7c376deb24af2a6ad28fac211ec9f3bb373bc023 to simpleperf-release" into simpleperf-releasesimpleperf-release
-rw-r--r--Android.bp8
-rw-r--r--assets/latest_carrier_id/carrier_list.pbbin54680 -> 54581 bytes
-rw-r--r--assets/latest_carrier_id/carrier_list.textpb134
-rw-r--r--assets/sdk28_carrier_id/carrier_list.pbbin54440 -> 53562 bytes
-rw-r--r--assets/sdk28_carrier_id/carrier_list.textpb218
-rw-r--r--assets/sdk29_carrier_id/carrier_list.pbbin56399 -> 55545 bytes
-rw-r--r--assets/sdk29_carrier_id/carrier_list.textpb207
-rw-r--r--assets/sdk30_carrier_id/carrier_list.pbbin56656 -> 55817 bytes
-rw-r--r--assets/sdk30_carrier_id/carrier_list.textpb205
-rw-r--r--assets/sdk31_carrier_id/carrier_list.pbbin55044 -> 54899 bytes
-rw-r--r--assets/sdk31_carrier_id/carrier_list.textpb40
-rw-r--r--src/com/android/providers/telephony/CarrierIdProvider.java9
-rw-r--r--src/com/android/providers/telephony/MmsSmsDatabaseHelper.java16
-rw-r--r--src/com/android/providers/telephony/TelephonyBackupAgent.java99
-rw-r--r--src/com/android/providers/telephony/TelephonyProvider.java131
-rw-r--r--tests/Android.bp2
-rw-r--r--tests/AndroidManifest.xml7
-rw-r--r--tests/src/com/android/providers/telephony/TelephonyBackupAgentTest.java19
-rw-r--r--tests/src/com/android/providers/telephony/TelephonyDatabaseHelperTest.java24
-rw-r--r--tests/src/com/android/providers/telephony/TelephonyProviderTest.java5
20 files changed, 297 insertions, 827 deletions
diff --git a/Android.bp b/Android.bp
index 3b657378..cd24b245 100644
--- a/Android.bp
+++ b/Android.bp
@@ -32,3 +32,11 @@ filegroup {
name: "telephonyprovider-assets-carrierlist",
srcs: ["assets/latest_carrier_id/carrier_list.*"],
}
+
+// used to share src with unit test app
+filegroup {
+ name: "telephonyprovider-shared-srcs",
+ srcs: [
+ "src/**/*.java",
+ ],
+}
diff --git a/assets/latest_carrier_id/carrier_list.pb b/assets/latest_carrier_id/carrier_list.pb
index 4170a569..3bb6f2bd 100644
--- a/assets/latest_carrier_id/carrier_list.pb
+++ b/assets/latest_carrier_id/carrier_list.pb
Binary files differ
diff --git a/assets/latest_carrier_id/carrier_list.textpb b/assets/latest_carrier_id/carrier_list.textpb
index cd08effe..75e0864a 100644
--- a/assets/latest_carrier_id/carrier_list.textpb
+++ b/assets/latest_carrier_id/carrier_list.textpb
@@ -20,9 +20,6 @@ carrier_id {
mccmnc_tuple: "310640"
mccmnc_tuple: "310660"
mccmnc_tuple: "310800"
- mccmnc_tuple: "311660"
- mccmnc_tuple: "311882"
- mccmnc_tuple: "312250"
}
}
carrier_id {
@@ -243,7 +240,6 @@ carrier_id {
imsi_prefix_xpattern: "204049"
spn: ""
spn: "vodafone NL"
- spn: "Vodafone"
}
}
carrier_id {
@@ -351,10 +347,8 @@ carrier_id {
canonical_id: 27
carrier_name: "SFR"
carrier_attribute {
- mccmnc_tuple: "20809"
mccmnc_tuple: "20810"
- mccmnc_tuple: "20811"
- mccmnc_tuple: "20813"
+ mccmnc_tuple: "20809"
}
}
carrier_id {
@@ -944,8 +938,6 @@ carrier_id {
canonical_id: 718
carrier_name: "EE"
carrier_attribute {
- mccmnc_tuple: "23431"
- mccmnc_tuple: "23432"
mccmnc_tuple: "23430"
mccmnc_tuple: "23433"
mccmnc_tuple: "23486"
@@ -1519,7 +1511,6 @@ carrier_id {
carrier_name: "Telenor"
carrier_attribute {
mccmnc_tuple: "24201"
- mccmnc_tuple: "24212"
}
}
carrier_id {
@@ -6288,6 +6279,11 @@ carrier_id {
carrier_attribute {
mccmnc_tuple: "302490"
}
+ carrier_attribute {
+ mccmnc_tuple: "22201"
+ mccmnc_tuple: "22288"
+ gid1: "ffffff00"
+ }
}
carrier_id {
canonical_id: 1896
@@ -6700,9 +6696,6 @@ carrier_id {
mccmnc_tuple: "310210"
mccmnc_tuple: "310200"
mccmnc_tuple: "310160"
- mccmnc_tuple: "311660"
- mccmnc_tuple: "311882"
- mccmnc_tuple: "312250"
gid1: "6D38"
}
}
@@ -9885,7 +9878,7 @@ carrier_id {
canonical_id: 2357
carrier_name: "Tuenti"
carrier_attribute {
- mccmnc_tuple: "21405"
+ mccmnc_tuple: "21432"
spn: "Tuenti"
}
}
@@ -9908,8 +9901,13 @@ carrier_id {
carrier_name: "Telefonica"
carrier_attribute {
mccmnc_tuple: "26203"
+ gid1: "000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
+ gid1: "000500FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
gid1: "010301FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
gid1: "010901FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
+ gid1: "010251FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
+ gid1: "020302FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
+ gid1: "020902FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
}
}
carrier_id {
@@ -9917,8 +9915,13 @@ carrier_id {
carrier_name: "o2"
carrier_attribute {
mccmnc_tuple: "26207"
+ gid1: "000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
+ gid1: "000500FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
gid1: "010301FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
gid1: "010901FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
+ gid1: "010251FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
+ gid1: "020302FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
+ gid1: "020902FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
}
}
carrier_id {
@@ -10350,9 +10353,6 @@ carrier_id {
}
carrier_attribute {
mccmnc_tuple: "310240"
- mccmnc_tuple: "311660"
- mccmnc_tuple: "311882"
- mccmnc_tuple: "312250"
gid1: "1A53"
}
}
@@ -11014,102 +11014,6 @@ carrier_id {
}
}
carrier_id {
- canonical_id: 2517
- carrier_name: "Dish"
- carrier_attribute {
- mccmnc_tuple: "313340"
- gid1: "6530"
- }
-}
-carrier_id {
- canonical_id: 2518
- carrier_name: "Boost Mobile - MNO"
- carrier_attribute {
- mccmnc_tuple: "313340"
- gid1: "6332"
- }
-}
-carrier_id {
- canonical_id: 2519
- carrier_name: "Boost Mobile - MVNO1"
- carrier_attribute {
- mccmnc_tuple: "310240"
- gid1: "6432"
- }
-}
-carrier_id {
- canonical_id: 2520
- carrier_name: "Republic - MNO"
- carrier_attribute {
- mccmnc_tuple: "313340"
- gid1: "6630"
- }
-}
-carrier_id {
- canonical_id: 2521
- carrier_name: "Ting - MNO"
- carrier_attribute {
- mccmnc_tuple: "313340"
- gid1: "7330"
- }
-}
-carrier_id {
- canonical_id: 2522
- carrier_name: "Republic - MVNO1"
- carrier_attribute {
- mccmnc_tuple: "310240"
- gid1: "6436"
- }
-}
-carrier_id {
- canonical_id: 2523
- carrier_name: "Ting - MVNO1"
- carrier_attribute {
- mccmnc_tuple: "310240"
- gid1: "6430"
- }
-}
-carrier_id {
- canonical_id: 2524
- carrier_name: "Erate"
- carrier_attribute {
- mccmnc_tuple: "24215"
- gid1: "0e"
- }
-}
-carrier_id {
- canonical_id: 2525
- carrier_name: "Boost Mobile - MVNO2"
- carrier_attribute {
- mccmnc_tuple: "310410"
- gid1: "3432"
- }
-}
-carrier_id {
- canonical_id: 2526
- carrier_name: "Ting - MVNO2"
- carrier_attribute {
- mccmnc_tuple: "310410"
- gid1: "3430"
- }
-}
-carrier_id {
- canonical_id: 2527
- carrier_name: "Republic - MVNO2"
- carrier_attribute {
- mccmnc_tuple: "310410"
- gid1: "3436"
- }
-}
-carrier_id {
- canonical_id: 2528
- carrier_name: "Project Genesis - MNO"
- carrier_attribute {
- mccmnc_tuple: "313340"
- gid1: "6538"
- }
-}
-carrier_id {
canonical_id: 10000
carrier_name: "Tracfone-ATT"
carrier_attribute {
@@ -11386,11 +11290,11 @@ carrier_id {
}
carrier_id {
canonical_id: 10027
- carrier_name: "LINEMO"
+ carrier_name: "Softbank linemo"
carrier_attribute {
mccmnc_tuple: "44020"
gid1: "48FFFF"
}
parent_canonical_id: 1894
}
-version: 67108867
+version: 67108865
diff --git a/assets/sdk28_carrier_id/carrier_list.pb b/assets/sdk28_carrier_id/carrier_list.pb
index aa7da64c..91d6640f 100644
--- a/assets/sdk28_carrier_id/carrier_list.pb
+++ b/assets/sdk28_carrier_id/carrier_list.pb
Binary files differ
diff --git a/assets/sdk28_carrier_id/carrier_list.textpb b/assets/sdk28_carrier_id/carrier_list.textpb
index 6d08b5ec..0cd3a99a 100644
--- a/assets/sdk28_carrier_id/carrier_list.textpb
+++ b/assets/sdk28_carrier_id/carrier_list.textpb
@@ -22,15 +22,6 @@ carrier_id {
mccmnc_tuple: "310660"
mccmnc_tuple: "310800"
}
- carrier_attribute {
- mccmnc_tuple: "311660"
- }
- carrier_attribute {
- mccmnc_tuple: "311882"
- }
- carrier_attribute {
- mccmnc_tuple: "312250"
- }
}
carrier_id {
canonical_id: 2
@@ -589,12 +580,6 @@ carrier_id {
carrier_attribute {
mccmnc_tuple: "20809"
}
- carrier_attribute {
- mccmnc_tuple: "20811"
- }
- carrier_attribute {
- mccmnc_tuple: "20813"
- }
}
carrier_id {
canonical_id: 28
@@ -1024,9 +1009,6 @@ carrier_id {
carrier_attribute {
mccmnc_tuple: "732130"
}
- carrier_attribute {
- mccmnc_tuple: "732360"
- }
}
carrier_id {
canonical_id: 627
@@ -1198,12 +1180,6 @@ carrier_id {
carrier_attribute {
mccmnc_tuple: "23486"
}
- carrier_attribute {
- mccmnc_tuple: "23431"
- }
- carrier_attribute {
- mccmnc_tuple: "23432"
- }
}
carrier_id {
canonical_id: 720
@@ -1788,9 +1764,6 @@ carrier_id {
carrier_attribute {
mccmnc_tuple: "24201"
}
- carrier_attribute {
- mccmnc_tuple: "24212"
- }
}
carrier_id {
canonical_id: 959
@@ -6747,6 +6720,14 @@ carrier_id {
carrier_attribute {
mccmnc_tuple: "302490"
}
+ carrier_attribute {
+ mccmnc_tuple: "22201"
+ gid1: "ffffff00"
+ }
+ carrier_attribute {
+ mccmnc_tuple: "22288"
+ gid1: "ffffff00"
+ }
}
carrier_id {
canonical_id: 1896
@@ -7217,18 +7198,6 @@ carrier_id {
mccmnc_tuple: "310160"
gid1: "6D38"
}
- carrier_attribute {
- mccmnc_tuple: "311660"
- gid1: "6D38"
- }
- carrier_attribute {
- mccmnc_tuple: "311882"
- gid1: "6D38"
- }
- carrier_attribute {
- mccmnc_tuple: "312250"
- gid1: "6D38"
- }
}
carrier_id {
canonical_id: 1950
@@ -7808,7 +7777,7 @@ carrier_id {
}
carrier_id {
canonical_id: 2005
- carrier_name: "EURO INFORMATION TELECOM"
+ carrier_name: "NRJ Mobile"
carrier_attribute {
mccmnc_tuple: "20826"
}
@@ -7816,10 +7785,6 @@ carrier_id {
mccmnc_tuple: "20810"
gid1: "4E"
}
- carrier_attribute {
- mccmnc_tuple: "20601"
- gid1: "4E524A31"
- }
}
carrier_id {
canonical_id: 2006
@@ -8903,22 +8868,6 @@ carrier_id {
mccmnc_tuple: "50502"
imsi_prefix_xpattern: "50502100"
}
- carrier_attribute {
- mccmnc_tuple: "20812"
- gid1: "547275554b3030656e"
- }
- carrier_attribute {
- mccmnc_tuple: "310300"
- gid1: "547275554b3030656e"
- }
- carrier_attribute {
- mccmnc_tuple: "310690"
- gid1: "547275554b3030656e"
- }
- carrier_attribute {
- mccmnc_tuple: "45408"
- gid1: "547275554b3030656e"
- }
}
carrier_id {
canonical_id: 2144
@@ -10526,10 +10475,6 @@ carrier_id {
mccmnc_tuple: "21432"
spn: "Tuenti"
}
- carrier_attribute {
- mccmnc_tuple: "21405"
- spn: "Tuenti"
- }
}
carrier_id {
canonical_id: 2358
@@ -10898,22 +10843,6 @@ carrier_id {
mccmnc_tuple: "312530"
gid1: "000006"
}
- carrier_attribute {
- mccmnc_tuple: "310240"
- gid1: "1A53"
- }
- carrier_attribute {
- mccmnc_tuple: "311660"
- gid1: "1A53"
- }
- carrier_attribute {
- mccmnc_tuple: "311882"
- gid1: "1A53"
- }
- carrier_attribute {
- mccmnc_tuple: "312250"
- gid1: "1A53"
- }
}
carrier_id {
canonical_id: 2434
@@ -10957,14 +10886,6 @@ carrier_id {
}
}
carrier_id {
- canonical_id: 2439
- carrier_name: "VERY"
- carrier_attribute {
- mccmnc_tuple: "22299"
- gid1: "0000000099"
- }
-}
-carrier_id {
canonical_id: 2442
carrier_name: "Digi Spain"
carrier_attribute {
@@ -11132,10 +11053,6 @@ carrier_id {
spn: "GigSky"
gid1: "6E"
}
- carrier_attribute {
- mccmnc_tuple: "22201"
- spn: "GigSky"
- }
}
carrier_id {
canonical_id: 2460
@@ -11519,121 +11436,6 @@ carrier_id {
}
}
carrier_id {
- canonical_id: 2512
- carrier_name: "Goodspeed"
- carrier_attribute {
- mccmnc_tuple: "24042"
- gid1: "C5"
- }
- carrier_attribute {
- mccmnc_tuple: "23203"
- gid1: "C5"
- }
-}
-carrier_id {
- canonical_id: 2514
- carrier_name: "povo"
- carrier_attribute {
- mccmnc_tuple: "44051"
- gid1: "26"
- }
-}
-carrier_id {
- canonical_id: 2516
- carrier_name: "HMD Connect Pro"
- carrier_attribute {
- mccmnc_tuple: "22201"
- spn: "hmd connect"
- }
-}
-carrier_id {
- canonical_id: 2517
- carrier_name: "Dish"
- carrier_attribute {
- mccmnc_tuple: "313340"
- }
-}
-carrier_id {
- canonical_id: 2518
- carrier_name: "Boost Mobile - MNO"
- carrier_attribute {
- mccmnc_tuple: "313340"
- gid1: "6332"
- }
-}
-carrier_id {
- canonical_id: 2519
- carrier_name: "Boost Mobile - MVNO1"
- carrier_attribute {
- mccmnc_tuple: "310240"
- gid1: "6432"
- }
-}
-carrier_id {
- canonical_id: 2520
- carrier_name: "Republic - MNO"
- carrier_attribute {
- mccmnc_tuple: "313340"
- gid1: "6630"
- }
-}
-carrier_id {
- canonical_id: 2521
- carrier_name: "Ting - MNO"
- carrier_attribute {
- mccmnc_tuple: "313340"
- gid1: "7330"
- }
-}
-carrier_id {
- canonical_id: 2522
- carrier_name: "Republic - MVNO1"
- carrier_attribute {
- mccmnc_tuple: "310240"
- gid1: "6436"
- }
-}
-carrier_id {
- canonical_id: 2523
- carrier_name: "Ting - MVNO1"
- carrier_attribute {
- mccmnc_tuple: "310240"
- gid1: "6430"
- }
-}
-carrier_id {
- canonical_id: 2524
- carrier_name: "Erate"
- carrier_attribute {
- mccmnc_tuple: "24215"
- gid1: "0e"
- }
-}
-carrier_id {
- canonical_id: 2525
- carrier_name: "Boost Mobile - MVNO2"
- carrier_attribute {
- mccmnc_tuple: "310410"
- gid1: "3432"
- }
-}
-carrier_id {
- canonical_id: 2526
- carrier_name: "Ting - MVNO2"
- carrier_attribute {
- mccmnc_tuple: "310410"
- gid1: "3430"
- }
-}
-carrier_id {
- canonical_id: 2527
- carrier_name: "Republic - MVNO2"
- carrier_attribute {
- mccmnc_tuple: "310410"
- gid1: "3436"
- }
-}
-carrier_id {
canonical_id: 10000
carrier_name: "Tracfone-ATT"
carrier_attribute {
@@ -11876,4 +11678,4 @@ carrier_id {
}
parent_canonical_id: 2023
}
-version: 14
+version: 12
diff --git a/assets/sdk29_carrier_id/carrier_list.pb b/assets/sdk29_carrier_id/carrier_list.pb
index 44507d84..5e78f396 100644
--- a/assets/sdk29_carrier_id/carrier_list.pb
+++ b/assets/sdk29_carrier_id/carrier_list.pb
Binary files differ
diff --git a/assets/sdk29_carrier_id/carrier_list.textpb b/assets/sdk29_carrier_id/carrier_list.textpb
index 131b714a..6c1420c6 100644
--- a/assets/sdk29_carrier_id/carrier_list.textpb
+++ b/assets/sdk29_carrier_id/carrier_list.textpb
@@ -22,15 +22,6 @@ carrier_id {
mccmnc_tuple: "310660"
mccmnc_tuple: "310800"
}
- carrier_attribute {
- mccmnc_tuple: "311660"
- }
- carrier_attribute {
- mccmnc_tuple: "311882"
- }
- carrier_attribute {
- mccmnc_tuple: "312250"
- }
}
carrier_id {
canonical_id: 2
@@ -583,12 +574,6 @@ carrier_id {
mccmnc_tuple: "20810"
mccmnc_tuple: "20809"
}
- carrier_attribute {
- mccmnc_tuple: "20811"
- }
- carrier_attribute {
- mccmnc_tuple: "20813"
- }
}
carrier_id {
canonical_id: 28
@@ -1016,9 +1001,6 @@ carrier_id {
carrier_attribute {
mccmnc_tuple: "732130"
}
- carrier_attribute {
- mccmnc_tuple: "732360"
- }
}
carrier_id {
canonical_id: 627
@@ -1183,12 +1165,6 @@ carrier_id {
mccmnc_tuple: "23433"
mccmnc_tuple: "23486"
}
- carrier_attribute {
- mccmnc_tuple: "23431"
- }
- carrier_attribute {
- mccmnc_tuple: "23432"
- }
}
carrier_id {
canonical_id: 720
@@ -1750,9 +1726,6 @@ carrier_id {
carrier_attribute {
mccmnc_tuple: "24201"
}
- carrier_attribute {
- mccmnc_tuple: "24212"
- }
}
carrier_id {
canonical_id: 959
@@ -6562,6 +6535,11 @@ carrier_id {
carrier_attribute {
mccmnc_tuple: "302490"
}
+ carrier_attribute {
+ mccmnc_tuple: "22201"
+ mccmnc_tuple: "22288"
+ gid1: "ffffff00"
+ }
}
carrier_id {
canonical_id: 1896
@@ -6983,18 +6961,6 @@ carrier_id {
mccmnc_tuple: "310160"
gid1: "6D38"
}
- carrier_attribute {
- mccmnc_tuple: "311660"
- gid1: "6D38"
- }
- carrier_attribute {
- mccmnc_tuple: "311882"
- gid1: "6D38"
- }
- carrier_attribute {
- mccmnc_tuple: "312250"
- gid1: "6D38"
- }
}
carrier_id {
canonical_id: 1950
@@ -7545,7 +7511,7 @@ carrier_id {
}
carrier_id {
canonical_id: 2005
- carrier_name: "EURO INFORMATION TELECOM"
+ carrier_name: "NRJ Mobile"
carrier_attribute {
mccmnc_tuple: "20826"
}
@@ -8684,22 +8650,6 @@ carrier_id {
mccmnc_tuple: "50502"
imsi_prefix_xpattern: "50502100"
}
- carrier_attribute {
- mccmnc_tuple: "20812"
- gid1: "547275554b3030656e"
- }
- carrier_attribute {
- mccmnc_tuple: "310300"
- gid1: "547275554b3030656e"
- }
- carrier_attribute {
- mccmnc_tuple: "310690"
- gid1: "547275554b3030656e"
- }
- carrier_attribute {
- mccmnc_tuple: "45408"
- gid1: "547275554b3030656e"
- }
}
carrier_id {
canonical_id: 2144
@@ -10727,22 +10677,6 @@ carrier_id {
mccmnc_tuple: "312530"
gid1: "000006"
}
- carrier_attribute {
- mccmnc_tuple: "310240"
- gid1: "1A53"
- }
- carrier_attribute {
- mccmnc_tuple: "311660"
- gid1: "1A53"
- }
- carrier_attribute {
- mccmnc_tuple: "311882"
- gid1: "1A53"
- }
- carrier_attribute {
- mccmnc_tuple: "312250"
- gid1: "1A53"
- }
}
carrier_id {
canonical_id: 2434
@@ -10786,14 +10720,6 @@ carrier_id {
}
}
carrier_id {
- canonical_id: 2439
- carrier_name: "VERY"
- carrier_attribute {
- mccmnc_tuple: "22299"
- gid1: "0000000099"
- }
-}
-carrier_id {
canonical_id: 2442
carrier_name: "Digi Spain"
carrier_attribute {
@@ -10961,10 +10887,6 @@ carrier_id {
spn: "GigSky"
gid1: "6E"
}
- carrier_attribute {
- mccmnc_tuple: "22201"
- spn: "GigSky"
- }
}
carrier_id {
canonical_id: 2460
@@ -11348,121 +11270,6 @@ carrier_id {
}
}
carrier_id {
- canonical_id: 2512
- carrier_name: "Goodspeed"
- carrier_attribute {
- mccmnc_tuple: "24042"
- gid1: "C5"
- }
- carrier_attribute {
- mccmnc_tuple: "23203"
- gid1: "C5"
- }
-}
-carrier_id {
- canonical_id: 2514
- carrier_name: "povo"
- carrier_attribute {
- mccmnc_tuple: "44051"
- gid1: "26"
- }
-}
-carrier_id {
- canonical_id: 2516
- carrier_name: "HMD Connect Pro"
- carrier_attribute {
- mccmnc_tuple: "22201"
- spn: "hmd connect"
- }
-}
-carrier_id {
- canonical_id: 2517
- carrier_name: "Dish"
- carrier_attribute {
- mccmnc_tuple: "313340"
- }
-}
-carrier_id {
- canonical_id: 2518
- carrier_name: "Boost Mobile - MNO"
- carrier_attribute {
- mccmnc_tuple: "313340"
- gid1: "6332"
- }
-}
-carrier_id {
- canonical_id: 2519
- carrier_name: "Boost Mobile - MVNO1"
- carrier_attribute {
- mccmnc_tuple: "310240"
- gid1: "6432"
- }
-}
-carrier_id {
- canonical_id: 2520
- carrier_name: "Republic - MNO"
- carrier_attribute {
- mccmnc_tuple: "313340"
- gid1: "6630"
- }
-}
-carrier_id {
- canonical_id: 2521
- carrier_name: "Ting - MNO"
- carrier_attribute {
- mccmnc_tuple: "313340"
- gid1: "7330"
- }
-}
-carrier_id {
- canonical_id: 2522
- carrier_name: "Republic - MVNO1"
- carrier_attribute {
- mccmnc_tuple: "310240"
- gid1: "6436"
- }
-}
-carrier_id {
- canonical_id: 2523
- carrier_name: "Ting - MVNO1"
- carrier_attribute {
- mccmnc_tuple: "310240"
- gid1: "6430"
- }
-}
-carrier_id {
- canonical_id: 2524
- carrier_name: "Erate"
- carrier_attribute {
- mccmnc_tuple: "24215"
- gid1: "0e"
- }
-}
-carrier_id {
- canonical_id: 2525
- carrier_name: "Boost Mobile - MVNO2"
- carrier_attribute {
- mccmnc_tuple: "310410"
- gid1: "3432"
- }
-}
-carrier_id {
- canonical_id: 2526
- carrier_name: "Ting - MVNO2"
- carrier_attribute {
- mccmnc_tuple: "310410"
- gid1: "3430"
- }
-}
-carrier_id {
- canonical_id: 2527
- carrier_name: "Republic - MVNO2"
- carrier_attribute {
- mccmnc_tuple: "310410"
- gid1: "3436"
- }
-}
-carrier_id {
canonical_id: 10000
carrier_name: "Tracfone-ATT"
carrier_attribute {
@@ -11704,4 +11511,4 @@ carrier_id {
}
parent_canonical_id: 2023
}
-version: 16777238
+version: 16777236
diff --git a/assets/sdk30_carrier_id/carrier_list.pb b/assets/sdk30_carrier_id/carrier_list.pb
index 9287167b..946634dc 100644
--- a/assets/sdk30_carrier_id/carrier_list.pb
+++ b/assets/sdk30_carrier_id/carrier_list.pb
Binary files differ
diff --git a/assets/sdk30_carrier_id/carrier_list.textpb b/assets/sdk30_carrier_id/carrier_list.textpb
index 67daa47b..e301ad02 100644
--- a/assets/sdk30_carrier_id/carrier_list.textpb
+++ b/assets/sdk30_carrier_id/carrier_list.textpb
@@ -22,15 +22,6 @@ carrier_id {
mccmnc_tuple: "310660"
mccmnc_tuple: "310800"
}
- carrier_attribute {
- mccmnc_tuple: "311660"
- }
- carrier_attribute {
- mccmnc_tuple: "311882"
- }
- carrier_attribute {
- mccmnc_tuple: "312250"
- }
}
carrier_id {
canonical_id: 2
@@ -579,12 +570,6 @@ carrier_id {
mccmnc_tuple: "20810"
mccmnc_tuple: "20809"
}
- carrier_attribute {
- mccmnc_tuple: "20811"
- }
- carrier_attribute {
- mccmnc_tuple: "20813"
- }
}
carrier_id {
canonical_id: 28
@@ -1012,9 +997,6 @@ carrier_id {
carrier_attribute {
mccmnc_tuple: "732130"
}
- carrier_attribute {
- mccmnc_tuple: "732360"
- }
}
carrier_id {
canonical_id: 627
@@ -1179,12 +1161,6 @@ carrier_id {
mccmnc_tuple: "23433"
mccmnc_tuple: "23486"
}
- carrier_attribute {
- mccmnc_tuple: "23431"
- }
- carrier_attribute {
- mccmnc_tuple: "23432"
- }
}
carrier_id {
canonical_id: 720
@@ -1757,9 +1733,6 @@ carrier_id {
carrier_attribute {
mccmnc_tuple: "24201"
}
- carrier_attribute {
- mccmnc_tuple: "24212"
- }
}
carrier_id {
canonical_id: 959
@@ -6555,6 +6528,11 @@ carrier_id {
carrier_attribute {
mccmnc_tuple: "302490"
}
+ carrier_attribute {
+ mccmnc_tuple: "22201"
+ mccmnc_tuple: "22288"
+ gid1: "ffffff00"
+ }
}
carrier_id {
canonical_id: 1896
@@ -6976,18 +6954,6 @@ carrier_id {
mccmnc_tuple: "310160"
gid1: "6D38"
}
- carrier_attribute {
- mccmnc_tuple: "311660"
- gid1: "6D38"
- }
- carrier_attribute {
- mccmnc_tuple: "311882"
- gid1: "6D38"
- }
- carrier_attribute {
- mccmnc_tuple: "312250"
- gid1: "6D38"
- }
}
carrier_id {
canonical_id: 1950
@@ -7532,7 +7498,7 @@ carrier_id {
}
carrier_id {
canonical_id: 2005
- carrier_name: "EURO INFORMATION TELECOM"
+ carrier_name: "NRJ Mobile"
carrier_attribute {
mccmnc_tuple: "20826"
}
@@ -8640,22 +8606,6 @@ carrier_id {
mccmnc_tuple: "50502"
imsi_prefix_xpattern: "50502100"
}
- carrier_attribute {
- mccmnc_tuple: "20812"
- gid1: "547275554b3030656e"
- }
- carrier_attribute {
- mccmnc_tuple: "310300"
- gid1: "547275554b3030656e"
- }
- carrier_attribute {
- mccmnc_tuple: "310690"
- gid1: "547275554b3030656e"
- }
- carrier_attribute {
- mccmnc_tuple: "45408"
- gid1: "547275554b3030656e"
- }
}
carrier_id {
canonical_id: 2144
@@ -10676,22 +10626,6 @@ carrier_id {
mccmnc_tuple: "312530"
gid1: "000006"
}
- carrier_attribute {
- mccmnc_tuple: "310240"
- gid1: "1A53"
- }
- carrier_attribute {
- mccmnc_tuple: "311660"
- gid1: "1A53"
- }
- carrier_attribute {
- mccmnc_tuple: "311882"
- gid1: "1A53"
- }
- carrier_attribute {
- mccmnc_tuple: "312250"
- gid1: "1A53"
- }
}
carrier_id {
canonical_id: 2434
@@ -10734,15 +10668,11 @@ carrier_id {
}
carrier_id {
canonical_id: 2439
- carrier_name: "VERY"
+ carrier_name: "3 Digital"
carrier_attribute {
mccmnc_tuple: "22288"
gid1: "0000000099"
}
- carrier_attribute {
- mccmnc_tuple: "22299"
- gid1: "0000000099"
- }
}
carrier_id {
canonical_id: 2442
@@ -10901,10 +10831,6 @@ carrier_id {
gid1: "6F"
gid1: "6E"
}
- carrier_attribute {
- mccmnc_tuple: "22201"
- spn: "GigSky"
- }
}
carrier_id {
canonical_id: 2460
@@ -11321,121 +11247,6 @@ carrier_id {
}
}
carrier_id {
- canonical_id: 2512
- carrier_name: "Goodspeed"
- carrier_attribute {
- mccmnc_tuple: "24042"
- gid1: "C5"
- }
- carrier_attribute {
- mccmnc_tuple: "23203"
- gid1: "C5"
- }
-}
-carrier_id {
- canonical_id: 2514
- carrier_name: "povo"
- carrier_attribute {
- mccmnc_tuple: "44051"
- gid1: "26"
- }
-}
-carrier_id {
- canonical_id: 2516
- carrier_name: "HMD Connect Pro"
- carrier_attribute {
- mccmnc_tuple: "22201"
- spn: "hmd connect"
- }
-}
-carrier_id {
- canonical_id: 2517
- carrier_name: "Dish"
- carrier_attribute {
- mccmnc_tuple: "313340"
- }
-}
-carrier_id {
- canonical_id: 2518
- carrier_name: "Boost Mobile - MNO"
- carrier_attribute {
- mccmnc_tuple: "313340"
- gid1: "6332"
- }
-}
-carrier_id {
- canonical_id: 2519
- carrier_name: "Boost Mobile - MVNO1"
- carrier_attribute {
- mccmnc_tuple: "310240"
- gid1: "6432"
- }
-}
-carrier_id {
- canonical_id: 2520
- carrier_name: "Republic - MNO"
- carrier_attribute {
- mccmnc_tuple: "313340"
- gid1: "6630"
- }
-}
-carrier_id {
- canonical_id: 2521
- carrier_name: "Ting - MNO"
- carrier_attribute {
- mccmnc_tuple: "313340"
- gid1: "7330"
- }
-}
-carrier_id {
- canonical_id: 2522
- carrier_name: "Republic - MVNO1"
- carrier_attribute {
- mccmnc_tuple: "310240"
- gid1: "6436"
- }
-}
-carrier_id {
- canonical_id: 2523
- carrier_name: "Ting - MVNO1"
- carrier_attribute {
- mccmnc_tuple: "310240"
- gid1: "6430"
- }
-}
-carrier_id {
- canonical_id: 2524
- carrier_name: "Erate"
- carrier_attribute {
- mccmnc_tuple: "24215"
- gid1: "0e"
- }
-}
-carrier_id {
- canonical_id: 2525
- carrier_name: "Boost Mobile - MVNO2"
- carrier_attribute {
- mccmnc_tuple: "310410"
- gid1: "3432"
- }
-}
-carrier_id {
- canonical_id: 2526
- carrier_name: "Ting - MVNO2"
- carrier_attribute {
- mccmnc_tuple: "310410"
- gid1: "3430"
- }
-}
-carrier_id {
- canonical_id: 2527
- carrier_name: "Republic - MVNO2"
- carrier_attribute {
- mccmnc_tuple: "310410"
- gid1: "3436"
- }
-}
-carrier_id {
canonical_id: 10000
carrier_name: "Tracfone-ATT"
carrier_attribute {
@@ -11679,4 +11490,4 @@ carrier_id {
}
parent_canonical_id: 2023
}
-version: 33554472
+version: 33554470
diff --git a/assets/sdk31_carrier_id/carrier_list.pb b/assets/sdk31_carrier_id/carrier_list.pb
index 12d57d2c..d0380167 100644
--- a/assets/sdk31_carrier_id/carrier_list.pb
+++ b/assets/sdk31_carrier_id/carrier_list.pb
Binary files differ
diff --git a/assets/sdk31_carrier_id/carrier_list.textpb b/assets/sdk31_carrier_id/carrier_list.textpb
index aee2bff5..62398c01 100644
--- a/assets/sdk31_carrier_id/carrier_list.textpb
+++ b/assets/sdk31_carrier_id/carrier_list.textpb
@@ -11039,7 +11039,7 @@ carrier_id {
}
carrier_id {
canonical_id: 2519
- carrier_name: "Boost Mobile - MVNO1"
+ carrier_name: "Boost Mobile - MVNO"
carrier_attribute {
mccmnc_tuple: "310240"
gid1: "6432"
@@ -11063,7 +11063,7 @@ carrier_id {
}
carrier_id {
canonical_id: 2522
- carrier_name: "Republic - MVNO1"
+ carrier_name: "Republic - MVNO"
carrier_attribute {
mccmnc_tuple: "310240"
gid1: "6436"
@@ -11071,45 +11071,13 @@ carrier_id {
}
carrier_id {
canonical_id: 2523
- carrier_name: "Ting - MVNO1"
+ carrier_name: "Ting - MVNO"
carrier_attribute {
mccmnc_tuple: "310240"
gid1: "6430"
}
}
carrier_id {
- canonical_id: 2524
- carrier_name: "Erate"
- carrier_attribute {
- mccmnc_tuple: "24215"
- gid1: "0e"
- }
-}
-carrier_id {
- canonical_id: 2525
- carrier_name: "Boost Mobile - MVNO2"
- carrier_attribute {
- mccmnc_tuple: "310410"
- gid1: "3432"
- }
-}
-carrier_id {
- canonical_id: 2526
- carrier_name: "Ting - MVNO2"
- carrier_attribute {
- mccmnc_tuple: "310410"
- gid1: "3430"
- }
-}
-carrier_id {
- canonical_id: 2527
- carrier_name: "Republic - MVNO2"
- carrier_attribute {
- mccmnc_tuple: "310410"
- gid1: "3436"
- }
-}
-carrier_id {
canonical_id: 10000
carrier_name: "Tracfone-ATT"
carrier_attribute {
@@ -11393,4 +11361,4 @@ carrier_id {
}
parent_canonical_id: 1894
}
-version: 50331664
+version: 50331662
diff --git a/src/com/android/providers/telephony/CarrierIdProvider.java b/src/com/android/providers/telephony/CarrierIdProvider.java
index 3e751aa6..9b6c2c0d 100644
--- a/src/com/android/providers/telephony/CarrierIdProvider.java
+++ b/src/com/android/providers/telephony/CarrierIdProvider.java
@@ -189,14 +189,17 @@ public class CarrierIdProvider extends ContentProvider {
+ CarrierId.All.MCCMNC + ");";
}
+ static {
+ s_urlMatcher.addURI(AUTHORITY, "all", URL_ALL);
+ s_urlMatcher.addURI(AUTHORITY, "all/update_db", URL_ALL_UPDATE_FROM_PB);
+ s_urlMatcher.addURI(AUTHORITY, "all/get_version", URL_ALL_GET_VERSION);
+ }
+
@Override
public boolean onCreate() {
Log.d(TAG, "onCreate");
mDbHelper = new CarrierIdDatabaseHelper(getContext());
mDbHelper.getReadableDatabase();
- s_urlMatcher.addURI(AUTHORITY, "all", URL_ALL);
- s_urlMatcher.addURI(AUTHORITY, "all/update_db", URL_ALL_UPDATE_FROM_PB);
- s_urlMatcher.addURI(AUTHORITY, "all/get_version", URL_ALL_GET_VERSION);
updateDatabaseFromPb(mDbHelper.getWritableDatabase());
return true;
}
diff --git a/src/com/android/providers/telephony/MmsSmsDatabaseHelper.java b/src/com/android/providers/telephony/MmsSmsDatabaseHelper.java
index 068f2090..a9494fb0 100644
--- a/src/com/android/providers/telephony/MmsSmsDatabaseHelper.java
+++ b/src/com/android/providers/telephony/MmsSmsDatabaseHelper.java
@@ -526,6 +526,15 @@ public class MmsSmsDatabaseHelper extends SQLiteOpenHelper {
@Override
public void onCreate(SQLiteDatabase db) {
localLog("onCreate: Creating all SMS-MMS tables.");
+
+ createMmsTables(db);
+ createSmsTables(db);
+ createCommonTables(db);
+ createCommonTriggers(db);
+ createMmsTriggers(db);
+ createWordsTables(db);
+ createIndices(db);
+
// if FBE is not supported, or if this onCreate is for CE partition database
if (!StorageManager.isFileEncryptedNativeOrEmulated()
|| (mContext != null && mContext.isCredentialProtectedStorage())) {
@@ -546,13 +555,6 @@ public class MmsSmsDatabaseHelper extends SQLiteOpenHelper {
mContext.sendBroadcast(intent);
}
- createMmsTables(db);
- createSmsTables(db);
- createCommonTables(db);
- createCommonTriggers(db);
- createMmsTriggers(db);
- createWordsTables(db);
- createIndices(db);
}
private static void localLog(String logMsg) {
diff --git a/src/com/android/providers/telephony/TelephonyBackupAgent.java b/src/com/android/providers/telephony/TelephonyBackupAgent.java
index 6ce5da15..34fed99d 100644
--- a/src/com/android/providers/telephony/TelephonyBackupAgent.java
+++ b/src/com/android/providers/telephony/TelephonyBackupAgent.java
@@ -36,6 +36,7 @@ import android.net.Uri;
import android.os.Build;
import android.os.ParcelFileDescriptor;
import android.os.PowerManager;
+import android.preference.PreferenceManager;
import android.provider.BaseColumns;
import android.provider.Telephony;
import android.telephony.PhoneNumberUtils;
@@ -50,6 +51,7 @@ import android.util.Log;
import android.util.SparseArray;
import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.telephony.PhoneFactory;
import com.google.android.mms.ContentType;
import com.google.android.mms.pdu.CharacterSets;
@@ -114,6 +116,15 @@ public class TelephonyBackupAgent extends BackupAgent {
private static final boolean DEBUG = false;
private static volatile boolean sIsRestoring;
+ // SharedPreferences keys
+ private static final String NUM_SMS_RESTORED = "num_sms_restored";
+ private static final String NUM_SMS_EXCEPTIONS = "num_sms_exceptions";
+ private static final String NUM_SMS_FILES_STORED = "num_sms_files_restored";
+ private static final String NUM_SMS_FILES_WITH_EXCEPTIONS = "num_sms_files_with_exceptions";
+ private static final String NUM_MMS_RESTORED = "num_mms_restored";
+ private static final String NUM_MMS_EXCEPTIONS = "num_mms_exceptions";
+ private static final String NUM_MMS_FILES_STORED = "num_mms_files_restored";
+ private static final String NUM_MMS_FILES_WITH_EXCEPTIONS = "num_mms_files_with_exceptions";
// Copied from packages/apps/Messaging/src/com/android/messaging/sms/MmsUtils.java.
private static final int DEFAULT_DURATION = 5000; //ms
@@ -316,7 +327,7 @@ public class TelephonyBackupAgent extends BackupAgent {
@Override
public void onCreate() {
super.onCreate();
-
+ Log.d(TAG, "onCreate");
final SubscriptionManager subscriptionManager = SubscriptionManager.from(this);
if (subscriptionManager != null) {
final List<SubscriptionInfo> subInfo =
@@ -505,6 +516,28 @@ public class TelephonyBackupAgent extends BackupAgent {
public static class DeferredSmsMmsRestoreService extends IntentService {
private static final String TAG = "DeferredSmsMmsRestoreService";
+ private static boolean sSharedPrefsAddedToLocalLogs = false;
+
+ public static void addAllSharedPrefToLocalLog(Context context) {
+ if (sSharedPrefsAddedToLocalLogs) return;
+ localLog("addAllSharedPrefToLocalLog");
+ SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
+ Map<String, ?> allPref = sp.getAll();
+ if (allPref.keySet() == null || allPref.keySet().size() == 0) return;
+ for (String key : allPref.keySet()) {
+ try {
+ localLog(key + ":" + allPref.get(key).toString());
+ } catch (Exception e) {
+ localLog("Skipping over key " + key + " due to exception " + e);
+ }
+ }
+ sSharedPrefsAddedToLocalLogs = true;
+ }
+
+ public static void localLog(String logMsg) {
+ Log.d(TAG, logMsg);
+ PhoneFactory.localLog(TAG, logMsg);
+ }
private final Comparator<File> mFileComparator = new Comparator<File>() {
@Override
@@ -515,6 +548,7 @@ public class TelephonyBackupAgent extends BackupAgent {
public DeferredSmsMmsRestoreService() {
super(TAG);
+ Log.d(TAG, "DeferredSmsMmsRestoreService");
setIntentRedelivery(true);
}
@@ -523,6 +557,7 @@ public class TelephonyBackupAgent extends BackupAgent {
@Override
protected void onHandleIntent(Intent intent) {
+ Log.d(TAG, "onHandleIntent");
try {
mWakeLock.acquire();
sIsRestoring = true;
@@ -545,6 +580,7 @@ public class TelephonyBackupAgent extends BackupAgent {
} catch (Exception e) {
// Either IOException or RuntimeException.
Log.e(TAG, "onHandleIntent", e);
+ localLog("onHandleIntent: Exception " + e);
} finally {
file.delete();
}
@@ -552,11 +588,12 @@ public class TelephonyBackupAgent extends BackupAgent {
if (didRestore) {
// Tell the default sms app to do a full sync now that the messages have been
// restored.
- Log.d(TAG, "onHandleIntent done - notifying default sms app");
+ localLog("onHandleIntent: done - notifying default sms app");
ProviderUtil.notifyIfNotDefaultSmsApp(null /*uri*/, null /*calling package*/,
this);
}
} finally {
+ addAllSharedPrefToLocalLog(this);
sIsRestoring = false;
mWakeLock.release();
}
@@ -565,6 +602,12 @@ public class TelephonyBackupAgent extends BackupAgent {
@Override
public void onCreate() {
super.onCreate();
+ Log.d(TAG, "onCreate");
+ try {
+ PhoneFactory.addLocalLog(TAG, 32);
+ } catch (IllegalArgumentException e) {
+ // ignore
+ }
mTelephonyBackupAgent = new TelephonyBackupAgent();
mTelephonyBackupAgent.attach(this);
mTelephonyBackupAgent.onCreate();
@@ -583,8 +626,15 @@ public class TelephonyBackupAgent extends BackupAgent {
}
static void startIfFilesExist(Context context) {
+ try {
+ PhoneFactory.addLocalLog(TAG, 32);
+ } catch (IllegalArgumentException e) {
+ // ignore
+ }
File[] files = getFilesToRestore(context);
if (files == null || files.length == 0) {
+ Log.d(TAG, "startIfFilesExist: no files to restore");
+ addAllSharedPrefToLocalLog(context);
return;
}
context.startService(new Intent(context, DeferredSmsMmsRestoreService.class));
@@ -618,7 +668,7 @@ public class TelephonyBackupAgent extends BackupAgent {
Log.d(TAG, "Restoring text MMS");
putMmsMessagesToProvider(jsonReader);
} else {
- Log.e(TAG, "Unknown file to restore:" + fileName);
+ DeferredSmsMmsRestoreService.localLog("Unknown file to restore:" + fileName);
}
}
}
@@ -627,6 +677,7 @@ public class TelephonyBackupAgent extends BackupAgent {
void putSmsMessagesToProvider(JsonReader jsonReader) throws IOException {
jsonReader.beginArray();
int msgCount = 0;
+ int numExceptions = 0;
final int bulkInsertSize = mMaxMsgPerFile;
ContentValues[] values = new ContentValues[bulkInsertSize];
while (jsonReader.hasNext()) {
@@ -639,8 +690,10 @@ public class TelephonyBackupAgent extends BackupAgent {
if (msgCount % bulkInsertSize == 0) {
mContentResolver.bulkInsert(Telephony.Sms.CONTENT_URI, values);
}
- } catch (Exception e) {
+ } catch (RuntimeException e) {
Log.e(TAG, "putSmsMessagesToProvider", e);
+ DeferredSmsMmsRestoreService.localLog("putSmsMessagesToProvider: Exception " + e);
+ numExceptions++;
}
}
if (msgCount % bulkInsertSize > 0) {
@@ -648,12 +701,37 @@ public class TelephonyBackupAgent extends BackupAgent {
Arrays.copyOf(values, msgCount % bulkInsertSize));
}
jsonReader.endArray();
+ incremenentSharedPref(true, msgCount, numExceptions);
+ }
+
+ void incremenentSharedPref(boolean sms, int msgCount, int numExceptions) {
+ SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
+ SharedPreferences.Editor editor = sp.edit();
+ if (sms) {
+ editor.putInt(NUM_SMS_RESTORED, sp.getInt(NUM_SMS_RESTORED, 0) + msgCount);
+ editor.putInt(NUM_SMS_EXCEPTIONS, sp.getInt(NUM_SMS_EXCEPTIONS, 0) + numExceptions);
+ editor.putInt(NUM_SMS_FILES_STORED, sp.getInt(NUM_SMS_FILES_STORED, 0) + 1);
+ if (numExceptions > 0) {
+ editor.putInt(NUM_SMS_FILES_WITH_EXCEPTIONS,
+ sp.getInt(NUM_SMS_FILES_WITH_EXCEPTIONS, 0) + 1);
+ }
+ } else {
+ editor.putInt(NUM_MMS_RESTORED, sp.getInt(NUM_MMS_RESTORED, 0) + msgCount);
+ editor.putInt(NUM_MMS_EXCEPTIONS, sp.getInt(NUM_MMS_EXCEPTIONS, 0) + numExceptions);
+ editor.putInt(NUM_MMS_FILES_STORED, sp.getInt(NUM_MMS_FILES_STORED, 0) + 1);
+ if (numExceptions > 0) {
+ editor.putInt(NUM_MMS_FILES_WITH_EXCEPTIONS,
+ sp.getInt(NUM_MMS_FILES_WITH_EXCEPTIONS, 0) + 1);
+ }
+ }
+ editor.commit();
}
@VisibleForTesting
void putMmsMessagesToProvider(JsonReader jsonReader) throws IOException {
jsonReader.beginArray();
int total = 0;
+ int numExceptions = 0;
while (jsonReader.hasNext()) {
final Mms mms = readMmsFromReader(jsonReader);
if (DEBUG) {
@@ -672,9 +750,12 @@ public class TelephonyBackupAgent extends BackupAgent {
addMmsMessage(mms);
} catch (Exception e) {
Log.e(TAG, "putMmsMessagesToProvider", e);
+ numExceptions++;
+ DeferredSmsMmsRestoreService.localLog("putMmsMessagesToProvider: Exception " + e);
}
}
Log.d(TAG, "putMmsMessagesToProvider handled " + total + " new messages.");
+ incremenentSharedPref(false, total, numExceptions);
}
@VisibleForTesting
@@ -706,9 +787,17 @@ public class TelephonyBackupAgent extends BackupAgent {
}
};
+ /**
+ * Sets a temporary {@code SmsProviderQuery} for testing; note that this method
+ * is not thread safe.
+ *
+ * @return the previous {@code SmsProviderQuery}
+ */
@VisibleForTesting
- public void setSmsProviderQuery(SmsProviderQuery smsProviderQuery) {
+ public SmsProviderQuery getAndSetSmsProviderQuery(SmsProviderQuery smsProviderQuery) {
+ SmsProviderQuery result = mSmsProviderQuery;
mSmsProviderQuery = smsProviderQuery;
+ return result;
}
private boolean doesMmsExist(Mms mms) {
diff --git a/src/com/android/providers/telephony/TelephonyProvider.java b/src/com/android/providers/telephony/TelephonyProvider.java
index 4dc815db..0ff9fc69 100644
--- a/src/com/android/providers/telephony/TelephonyProvider.java
+++ b/src/com/android/providers/telephony/TelephonyProvider.java
@@ -69,21 +69,17 @@ import static android.provider.Telephony.Carriers.USER_EDITED;
import static android.provider.Telephony.Carriers.USER_VISIBLE;
import static android.provider.Telephony.Carriers.WAIT_TIME_RETRY;
import static android.provider.Telephony.Carriers._ID;
-import static java.nio.charset.StandardCharsets.UTF_8;
import android.annotation.NonNull;
import android.annotation.Nullable;
-import android.annotation.RequiresPermission;
import android.app.compat.CompatChanges;
import android.content.ComponentName;
import android.content.ContentProvider;
-import android.content.ContentProviderOperation;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
-import android.content.OperationApplicationException;
import android.content.ServiceConnection;
import android.content.SharedPreferences;
import android.content.UriMatcher;
@@ -115,6 +111,7 @@ import android.telephony.data.ApnSetting;
import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.ArraySet;
+import android.util.AtomicFile;
import android.util.Log;
import android.util.Pair;
import android.util.Xml;
@@ -129,7 +126,6 @@ import android.service.carrier.IApnSourceService;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
-import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
@@ -139,11 +135,9 @@ import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.lang.Integer;
-import java.lang.NoSuchFieldException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -568,8 +562,8 @@ public class TelephonyProvider extends ContentProvider
+ Telephony.SimInfo.COLUMN_CROSS_SIM_CALLING_ENABLED + " INTEGER DEFAULT 0,"
+ Telephony.SimInfo.COLUMN_RCS_CONFIG + " BLOB,"
+ Telephony.SimInfo.COLUMN_ALLOWED_NETWORK_TYPES_FOR_REASONS + " TEXT,"
- + Telephony.SimInfo.COLUMN_D2D_STATUS_SHARING + " INTEGER DEFAULT 0,"
+ Telephony.SimInfo.COLUMN_VOIMS_OPT_IN_STATUS + " INTEGER DEFAULT 0,"
+ + Telephony.SimInfo.COLUMN_D2D_STATUS_SHARING + " INTEGER DEFAULT 0,"
+ Telephony.SimInfo.COLUMN_D2D_STATUS_SHARING_SELECTED_CONTACTS + " TEXT"
+ ");";
}
@@ -1654,12 +1648,12 @@ public class TelephonyProvider extends ContentProvider
try {
// Try to update the siminfo table. It might not be there.
db.execSQL("ALTER TABLE " + SIMINFO_TABLE + " ADD COLUMN "
- + Telephony.SimInfo.COLUMN_D2D_STATUS_SHARING
+ + Telephony.SimInfo.COLUMN_VOIMS_OPT_IN_STATUS
+ " INTEGER DEFAULT 0;");
} catch (SQLiteException e) {
if (DBG) {
- log("onUpgrade failed to updated " + SIMINFO_TABLE
- + " to add d2d status sharing column. ");
+ log("onUpgrade skipping " + SIMINFO_TABLE + " upgrade. "
+ + "The table will get created in onOpen.");
}
}
oldVersion = 49 << 16 | 6;
@@ -1669,12 +1663,12 @@ public class TelephonyProvider extends ContentProvider
try {
// Try to update the siminfo table. It might not be there.
db.execSQL("ALTER TABLE " + SIMINFO_TABLE + " ADD COLUMN "
- + Telephony.SimInfo.COLUMN_VOIMS_OPT_IN_STATUS
+ + Telephony.SimInfo.COLUMN_D2D_STATUS_SHARING
+ " INTEGER DEFAULT 0;");
} catch (SQLiteException e) {
if (DBG) {
- log("onUpgrade skipping " + SIMINFO_TABLE + " upgrade. " +
- "The table will get created in onOpen.");
+ log("onUpgrade failed to updated " + SIMINFO_TABLE
+ + " to add d2d status sharing column. ");
}
}
oldVersion = 50 << 16 | 6;
@@ -2844,8 +2838,10 @@ public class TelephonyProvider extends ContentProvider
r.getString(R.string.apn_source_service)));
log("binding to service to restore apns, intent=" + intent);
try {
- if (context.bindService(intent, connection, Context.BIND_IMPORTANT |
- Context.BIND_AUTO_CREATE)) {
+ if (context.bindService(intent,
+ Context.BIND_IMPORTANT | Context.BIND_AUTO_CREATE,
+ runnable -> new Thread(runnable).start(),
+ connection)) {
synchronized (mLock) {
while (mIApnSourceService == null && !connectionBindingInvalid.get()) {
try {
@@ -2898,10 +2894,10 @@ public class TelephonyProvider extends ContentProvider
boolean isNewBuild = false;
String newBuildId = SystemProperties.get("ro.build.id", null);
+ SharedPreferences sp = getContext().getSharedPreferences(BUILD_ID_FILE,
+ Context.MODE_PRIVATE);
if (!TextUtils.isEmpty(newBuildId)) {
// Check if build id has changed
- SharedPreferences sp = getContext().getSharedPreferences(BUILD_ID_FILE,
- Context.MODE_PRIVATE);
String oldBuildId = sp.getString(RO_BUILD_ID, "");
if (!newBuildId.equals(oldBuildId)) {
localLog("onCreate: build id changed from " + oldBuildId + " to " + newBuildId);
@@ -2909,7 +2905,6 @@ public class TelephonyProvider extends ContentProvider
} else {
if (VDBG) log("onCreate: build id did not change: " + oldBuildId);
}
- sp.edit().putString(RO_BUILD_ID, newBuildId).apply();
} else {
if (VDBG) log("onCreate: newBuildId is empty");
}
@@ -2924,9 +2919,15 @@ public class TelephonyProvider extends ContentProvider
if (DBG) addAllApnSharedPrefToLocalLog();
}
- SharedPreferences sp = getContext().getSharedPreferences(ENFORCED_FILE,
+ // Write build id to SharedPreferences after APNs have been updated above by updateApnDb()
+ if (!TextUtils.isEmpty(newBuildId)) {
+ if (isNewBuild) log("onCreate: updating build id to " + newBuildId);
+ sp.edit().putString(RO_BUILD_ID, newBuildId).apply();
+ }
+
+ SharedPreferences spEnforcedFile = getContext().getSharedPreferences(ENFORCED_FILE,
Context.MODE_PRIVATE);
- mManagedApnEnforced = sp.getBoolean(ENFORCED_KEY, false);
+ mManagedApnEnforced = spEnforcedFile.getBoolean(ENFORCED_KEY, false);
if (VDBG) log("onCreate:- ret true");
@@ -3196,10 +3197,17 @@ public class TelephonyProvider extends ContentProvider
@VisibleForTesting
boolean writeSimSettingsToInternalStorage(byte[] data) {
- File file = new File(getContext().getFilesDir(), BACKED_UP_SIM_SPECIFIC_SETTINGS_FILE);
- try (FileOutputStream fos = new FileOutputStream(file)) {
+ AtomicFile atomicFile = new AtomicFile(
+ new File(getContext().getFilesDir(), BACKED_UP_SIM_SPECIFIC_SETTINGS_FILE));
+ FileOutputStream fos = null;
+ try {
+ fos = atomicFile.startWrite();
fos.write(data);
+ atomicFile.finishWrite(fos);
} catch (IOException e) {
+ if (fos != null) {
+ atomicFile.failWrite(fos);
+ }
loge("Not able to create internal file with per-sim configs. Failed with error "
+ e);
return false;
@@ -3226,8 +3234,9 @@ public class TelephonyProvider extends ContentProvider
return;
}
+ AtomicFile atomicFile = new AtomicFile(file);
PersistableBundle bundle = null;
- try (FileInputStream fis = new FileInputStream(file)) {
+ try (FileInputStream fis = atomicFile.openRead()) {
bundle = PersistableBundle.readFromStream(fis);
} catch (IOException e) {
loge("Failed to convert backed up per-sim configs to bundle. Stopping restore. "
@@ -3669,6 +3678,7 @@ public class TelephonyProvider extends ContentProvider
checkPermissionCompat(match, projectionIn);
switch (match) {
case URL_TELEPHONY_USING_SUBID: {
+ // The behaves exactly same as URL_SIM_APN_LIST_ID.
subIdString = url.getLastPathSegment();
try {
subId = Integer.parseInt(subIdString);
@@ -3677,13 +3687,13 @@ public class TelephonyProvider extends ContentProvider
return null;
}
if (DBG) log("subIdString = " + subIdString + " subId = " + subId);
- TelephonyManager telephonyManager = getContext()
- .getSystemService(TelephonyManager.class).createForSubscriptionId(subId);
- constraints.add(NUMERIC + " = '" + telephonyManager.getSimOperator() + "'");
+ qb.appendWhereStandalone(IS_NOT_OWNED_BY_DPC);
+ return getSubscriptionMatchingAPNList(qb, projectionIn, selection, selectionArgs,
+ sort, subId);
+
// TODO b/74213956 turn this back on once insertion includes correct sub id
// constraints.add(SUBSCRIPTION_ID + "=" + subIdString);
}
- // intentional fall through from above case
case URL_TELEPHONY: {
constraints.add(IS_NOT_OWNED_BY_DPC);
break;
@@ -3881,6 +3891,31 @@ public class TelephonyProvider extends ContentProvider
}
/**
+ * This method syncs PREF_FILE_FULL_APN with the db based on the current preferred apn ids.
+ */
+ private void updatePreferredApns() {
+ SharedPreferences spApn = getContext().getSharedPreferences(PREF_FILE_APN,
+ Context.MODE_PRIVATE);
+
+ Map<String, ?> allPrefApnId = spApn.getAll();
+ for (String key : allPrefApnId.keySet()) {
+ if (key.startsWith(COLUMN_APN_ID)) {
+ int subId;
+ try {
+ subId = Integer.parseInt(key.substring(COLUMN_APN_ID.length()));
+ } catch (NumberFormatException e) {
+ loge("updatePreferredApns: NumberFormatException for key=" + key);
+ continue;
+ }
+ long preferredApnId = getPreferredApnId(subId, false);
+ if (preferredApnId != INVALID_APN_ID) {
+ setPreferredApn(preferredApnId, subId);
+ }
+ }
+ }
+ }
+
+ /**
* To find the current sim APN. Query APN based on {MCC, MNC, MVNO} and {Carrier_ID}.
*
* There has three steps:
@@ -3942,10 +3977,19 @@ public class TelephonyProvider extends ContentProvider
data.add(ret.getString(ret.getColumnIndex(column)));
}
+ boolean isCurrentSimOperator;
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ isCurrentSimOperator = tm.matchesCurrentSimOperator(
+ ret.getString(numericIndex),
+ getMvnoTypeIntFromString(ret.getString(mvnoIndex)),
+ ret.getString(mvnoDataIndex));
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
+
boolean isMVNOAPN = !TextUtils.isEmpty(ret.getString(numericIndex))
- && tm.matchesCurrentSimOperator(ret.getString(numericIndex),
- getMvnoTypeIntFromString(ret.getString(mvnoIndex)),
- ret.getString(mvnoDataIndex));
+ && isCurrentSimOperator;
boolean isMNOAPN = !TextUtils.isEmpty(ret.getString(numericIndex))
&& ret.getString(numericIndex).equals(mccmnc)
&& TextUtils.isEmpty(ret.getString(mvnoIndex));
@@ -4619,6 +4663,19 @@ public class TelephonyProvider extends ContentProvider
}
}
+ // if APNs (CARRIERS_TABLE) have been updated, some of them may be preferred APN for
+ // different subs. So update the APN field values saved in SharedPref for all subIds.
+ switch (match) {
+ case URL_TELEPHONY_USING_SUBID:
+ case URL_TELEPHONY:
+ case URL_CURRENT_USING_SUBID:
+ case URL_CURRENT:
+ case URL_ID:
+ case URL_DPC_ID:
+ updatePreferredApns();
+ break;
+ }
+
if (count > 0) {
boolean usingSubId = false;
switch (uriType) {
@@ -4716,14 +4773,18 @@ public class TelephonyProvider extends ContentProvider
TelephonyManager telephonyManager =
(TelephonyManager) getContext().getSystemService(Context.TELEPHONY_SERVICE);
- for (String pkg : packages) {
- if (telephonyManager.checkCarrierPrivilegesForPackageAnyPhone(pkg) ==
+ final long token = Binder.clearCallingIdentity();
+ try {
+ for (String pkg : packages) {
+ if (telephonyManager.checkCarrierPrivilegesForPackageAnyPhone(pkg) ==
TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS) {
- return;
+ return;
+ }
}
+ } finally {
+ Binder.restoreCallingIdentity(token);
}
-
throw new SecurityException("No permission to access APN settings");
}
diff --git a/tests/Android.bp b/tests/Android.bp
index dafd7cdf..8ecc3707 100644
--- a/tests/Android.bp
+++ b/tests/Android.bp
@@ -23,7 +23,7 @@ android_test {
"android.test.base",
"android.test.mock",
],
- srcs: ["src/**/*.java"],
+ srcs: ["src/**/*.java", ":telephonyprovider-shared-srcs"],
platform_apis: true,
test_suites: ["device-tests"],
certificate: "platform",
diff --git a/tests/AndroidManifest.xml b/tests/AndroidManifest.xml
index 59fd8bd1..e4e9e698 100644
--- a/tests/AndroidManifest.xml
+++ b/tests/AndroidManifest.xml
@@ -17,12 +17,17 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.providers.telephony.tests">
+ <!-- Permissions required for reading and logging compat changes -->
+ <uses-permission android:name="android.permission.LOG_COMPAT_CHANGE"/>
+ <uses-permission android:name="android.permission.READ_COMPAT_CHANGE_CONFIG"/>
+ <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL"/>
+
<application>
<uses-library android:name="android.test.runner" />
</application>
<instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"
- android:targetPackage="com.android.providers.telephony"
+ android:targetPackage="com.android.providers.telephony.tests"
android:label="Tests for TelephonyProvider">
</instrumentation>
</manifest>
diff --git a/tests/src/com/android/providers/telephony/TelephonyBackupAgentTest.java b/tests/src/com/android/providers/telephony/TelephonyBackupAgentTest.java
index 00bb15e1..f6a9c7f9 100644
--- a/tests/src/com/android/providers/telephony/TelephonyBackupAgentTest.java
+++ b/tests/src/com/android/providers/telephony/TelephonyBackupAgentTest.java
@@ -43,6 +43,8 @@ import android.util.JsonReader;
import android.util.JsonWriter;
import android.util.SparseArray;
+import com.android.internal.telephony.PhoneFactory;
+
import libcore.io.IoUtils;
import com.google.android.mms.pdu.CharacterSets;
@@ -620,6 +622,7 @@ public class TelephonyBackupAgentTest extends AndroidTestCase {
*/
public void testRestoreSms_WithException() throws Exception {
mTelephonyBackupAgent.initUnknownSender();
+ PhoneFactory.addLocalLog("DeferredSmsMmsRestoreService", 1);
JsonReader jsonReader = new JsonReader(new StringReader(addRandomDataToJson(mAllSmsJson)));
FakeSmsProvider smsProvider = new FakeSmsProvider(mSmsRows, false);
mMockContentResolver.addProvider("sms", smsProvider);
@@ -635,12 +638,16 @@ public class TelephonyBackupAgentTest extends AndroidTestCase {
return false;
}
};
- mTelephonyBackupAgent.setSmsProviderQuery(smsProviderQuery);
-
- mTelephonyBackupAgent.putSmsMessagesToProvider(jsonReader);
- // the "- 1" is due to exception thrown for one of the messages
- assertEquals(mSmsRows.length - 1, smsProvider.getRowsAdded());
- assertEquals(mThreadProvider.mIsThreadArchived, mThreadProvider.mUpdateThreadsArchived);
+ TelephonyBackupAgent.SmsProviderQuery previousQuery =
+ mTelephonyBackupAgent.getAndSetSmsProviderQuery(smsProviderQuery);
+ try {
+ mTelephonyBackupAgent.putSmsMessagesToProvider(jsonReader);
+ // the "- 1" is due to exception thrown for one of the messages
+ assertEquals(mSmsRows.length - 1, smsProvider.getRowsAdded());
+ assertEquals(mThreadProvider.mIsThreadArchived, mThreadProvider.mUpdateThreadsArchived);
+ } finally {
+ mTelephonyBackupAgent.getAndSetSmsProviderQuery(previousQuery);
+ }
}
/**
diff --git a/tests/src/com/android/providers/telephony/TelephonyDatabaseHelperTest.java b/tests/src/com/android/providers/telephony/TelephonyDatabaseHelperTest.java
index fe2406f1..6f3f842a 100644
--- a/tests/src/com/android/providers/telephony/TelephonyDatabaseHelperTest.java
+++ b/tests/src/com/android/providers/telephony/TelephonyDatabaseHelperTest.java
@@ -218,35 +218,35 @@ public final class TelephonyDatabaseHelperTest {
}
@Test
- public void databaseHelperOnUpgrade_hasD2DStatusSharingField() {
- Log.d(TAG, "databaseHelperOnUpgrade_hasD2DStatusSharingField");
- // (5 << 16 | 6) is the first upgrade trigger in onUpgrade
+ public void databaseHelperOnUpgrade_hasVoImsOptInStatusField() {
+ Log.d(TAG, "databaseHelperOnUpgrade_hasImsRcsUceEnabledField");
+ // (5 << 16) is the first upgrade trigger in onUpgrade
SQLiteDatabase db = mInMemoryDbHelper.getWritableDatabase();
- mHelper.onUpgrade(db, (4 << 16), TelephonyProvider.getVersion(mContext));
+ mHelper.onUpgrade(db, 4 << 16, TelephonyProvider.getVersion(mContext));
- // the upgraded db must have the Telephony.SimInfo.COLUMN_D2D_SHARING_STATUS field
+ // the upgraded db must have the SubscriptionManager.VOIMS_OPT_IN_STATUS field
Cursor cursor = db.query("siminfo", null, null, null, null, null, null);
String[] upgradedColumns = cursor.getColumnNames();
Log.d(TAG, "siminfo columns: " + Arrays.toString(upgradedColumns));
assertTrue(Arrays.asList(upgradedColumns).contains(
- Telephony.SimInfo.COLUMN_D2D_STATUS_SHARING));
+ Telephony.SimInfo.COLUMN_VOIMS_OPT_IN_STATUS));
}
@Test
- public void databaseHelperOnUpgrade_hasVoImsOptInStatusField() {
- Log.d(TAG, "databaseHelperOnUpgrade_hasImsRcsUceEnabledField");
- // (5 << 16) is the first upgrade trigger in onUpgrade
+ public void databaseHelperOnUpgrade_hasD2DStatusSharingField() {
+ Log.d(TAG, "databaseHelperOnUpgrade_hasD2DStatusSharingField");
+ // (5 << 16 | 6) is the first upgrade trigger in onUpgrade
SQLiteDatabase db = mInMemoryDbHelper.getWritableDatabase();
- mHelper.onUpgrade(db, 4 << 16, TelephonyProvider.getVersion(mContext));
+ mHelper.onUpgrade(db, (4 << 16), TelephonyProvider.getVersion(mContext));
- // the upgraded db must have the SubscriptionManager.VOIMS_OPT_IN_STATUS field
+ // the upgraded db must have the Telephony.SimInfo.COLUMN_D2D_SHARING_STATUS field
Cursor cursor = db.query("siminfo", null, null, null, null, null, null);
String[] upgradedColumns = cursor.getColumnNames();
Log.d(TAG, "siminfo columns: " + Arrays.toString(upgradedColumns));
assertTrue(Arrays.asList(upgradedColumns).contains(
- Telephony.SimInfo.COLUMN_VOIMS_OPT_IN_STATUS));
+ Telephony.SimInfo.COLUMN_D2D_STATUS_SHARING));
}
@Test
diff --git a/tests/src/com/android/providers/telephony/TelephonyProviderTest.java b/tests/src/com/android/providers/telephony/TelephonyProviderTest.java
index 37ba7ecb..1a9b46cb 100644
--- a/tests/src/com/android/providers/telephony/TelephonyProviderTest.java
+++ b/tests/src/com/android/providers/telephony/TelephonyProviderTest.java
@@ -45,7 +45,6 @@ import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.test.mock.MockContentResolver;
import android.test.mock.MockContext;
-import android.test.mock.MockResources;
import android.test.suitebuilder.annotation.SmallTest;
import android.text.TextUtils;
import android.util.Log;
@@ -54,11 +53,14 @@ import androidx.test.InstrumentationRegistry;
import junit.framework.TestCase;
+import org.junit.Ignore;
import org.junit.Test;
import org.mockito.MockitoAnnotations;
import org.mockito.Mock;
import static org.mockito.Mockito.when;
+import com.android.internal.telephony.PhoneFactory;
+
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
@@ -1647,6 +1649,7 @@ public class TelephonyProviderTest extends TestCase {
assertEquals(1, cursor.getCount());
cursor.moveToFirst();
assertEquals(otherName, cursor.getString(0));
+ PhoneFactory.addLocalLog("TelephonyProvider", 1);
}
/**