summaryrefslogtreecommitdiff
path: root/packages/CarrierDefaultApp
diff options
context:
space:
mode:
authorHall Liu <hallliu@google.com>2020-11-12 12:21:23 -0800
committerHall Liu <hallliu@google.com>2021-03-02 13:38:53 -0800
commit39087a439edb3d3830b9976651ecc075ebda99da (patch)
tree089c85eca0f524e3966157e1430723e84404176e /packages/CarrierDefaultApp
parent1e21d8530b5ff5c266e278115c5bd901f502c566 (diff)
Expose the carrier signaling broadcasts
Expose broadcasts for communicating certain changes in state between Telephony and carrier apps. Implement a backward-compatibility layer to support carrier apps targeting <=R that are listening to the old hidden broadcasts. Fixes: 173050428 Test: atest CarrierSignalTest CarrierSignalAgentTest Change-Id: I15d032ee1e31d9be847c2f084161f8555c8172c1 Merged-In: I15d032ee1e31d9be847c2f084161f8555c8172c1
Diffstat (limited to 'packages/CarrierDefaultApp')
-rw-r--r--packages/CarrierDefaultApp/src/com/android/carrierdefaultapp/CustomConfigLoader.java25
1 files changed, 20 insertions, 5 deletions
diff --git a/packages/CarrierDefaultApp/src/com/android/carrierdefaultapp/CustomConfigLoader.java b/packages/CarrierDefaultApp/src/com/android/carrierdefaultapp/CustomConfigLoader.java
index c7f5e9a5ceec..f11febc15d04 100644
--- a/packages/CarrierDefaultApp/src/com/android/carrierdefaultapp/CustomConfigLoader.java
+++ b/packages/CarrierDefaultApp/src/com/android/carrierdefaultapp/CustomConfigLoader.java
@@ -20,6 +20,7 @@ import android.content.Intent;
import android.os.PersistableBundle;
import android.telephony.CarrierConfigManager;
import android.telephony.TelephonyManager;
+import android.telephony.data.ApnSetting;
import android.text.TextUtils;
import android.util.Log;
@@ -85,8 +86,8 @@ public class CustomConfigLoader {
case TelephonyManager.ACTION_CARRIER_SIGNAL_REQUEST_NETWORK_FAILED:
configs = b.getStringArray(CarrierConfigManager
.KEY_CARRIER_DEFAULT_ACTIONS_ON_DCFAILURE_STRING_ARRAY);
- arg1 = intent.getStringExtra(TelephonyManager.EXTRA_APN_TYPE);
- arg2 = intent.getStringExtra(TelephonyManager.EXTRA_ERROR_CODE);
+ arg1 = String.valueOf(intent.getIntExtra(TelephonyManager.EXTRA_APN_TYPE, -1));
+ arg2 = intent.getStringExtra(TelephonyManager.EXTRA_DATA_FAIL_CAUSE);
break;
case TelephonyManager.ACTION_CARRIER_SIGNAL_RESET:
configs = b.getStringArray(CarrierConfigManager
@@ -141,10 +142,24 @@ public class CustomConfigLoader {
// case 1
actionStr = splitStr[0];
} else if (splitStr.length == 2 && arg1 != null && arg2 != null) {
- // case 2
+ // case 2. The only thing that uses this is CARRIER_SIGNAL_REQUEST_NETWORK_FAILED,
+ // and the carrier config for that can provide either an int or string for the apn type,
+ // depending on when it was introduced. Therefore, return a positive match if either
+ // the int version or the string version of the apn type in the broadcast matches.
+ String apnInIntFormat = arg1;
+ String apnInStringFormat = null;
+ try {
+ int apnInt = Integer.parseInt(apnInIntFormat);
+ apnInStringFormat = ApnSetting.getApnTypeString(apnInt);
+ } catch (NumberFormatException e) {
+ Log.e(TAG, "Got invalid apn type from broadcast: " + apnInIntFormat);
+ }
+
String[] args = splitStr[0].split(INTRA_GROUP_DELIMITER);
- if (args.length == 2 && TextUtils.equals(arg1, args[0]) &&
- TextUtils.equals(arg2, args[1])) {
+ boolean doesArg1Match = TextUtils.equals(apnInIntFormat, args[0])
+ || (apnInStringFormat != null && TextUtils.equals(apnInStringFormat, args[0]));
+ if (args.length == 2 && doesArg1Match
+ && TextUtils.equals(arg2, args[1])) {
actionStr = splitStr[1];
}
} else if ((splitStr.length == 2) && (arg1 != null) && (arg2 == null)) {