diff options
author | Hall Liu <hallliu@google.com> | 2020-11-12 12:21:23 -0800 |
---|---|---|
committer | Hall Liu <hallliu@google.com> | 2021-03-02 13:38:53 -0800 |
commit | 39087a439edb3d3830b9976651ecc075ebda99da (patch) | |
tree | 089c85eca0f524e3966157e1430723e84404176e /packages/CarrierDefaultApp | |
parent | 1e21d8530b5ff5c266e278115c5bd901f502c566 (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.java | 25 |
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)) { |