From 0331222483de36bb63a2796a358c6967f4518ec0 Mon Sep 17 00:00:00 2001 From: markchien Date: Mon, 17 Jun 2019 23:21:52 +0800 Subject: [PATCH] Fix entitlement failed when device is on CBRS When active cellular internet is switched to CBRS in DSDS case, default data sub id may not be changed. Fix by using active subscription id and pass this sub id to entitlement app. Bug: 134994718 Test: atest TetherServiceTest Test: manual test with carrer SIMs. Change-Id: I30a1d70c0690f0dba8f4171a2bde884f9b7ccfc4 --- .../network/TetherProvisioningActivity.java | 3 ++- .../settings/wifi/tether/TetherService.java | 20 ++++++++++--------- .../wifi/tether/TetherServiceTest.java | 2 +- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/com/android/settings/network/TetherProvisioningActivity.java b/src/com/android/settings/network/TetherProvisioningActivity.java index 48c570791b2..53a86cb39a6 100644 --- a/src/com/android/settings/network/TetherProvisioningActivity.java +++ b/src/com/android/settings/network/TetherProvisioningActivity.java @@ -55,7 +55,7 @@ public class TetherProvisioningActivity extends Activity { final int tetherSubId = getIntent().getIntExtra(EXTRA_SUBID, SubscriptionManager.INVALID_SUBSCRIPTION_ID); - final int subId = SubscriptionManager.getDefaultDataSubscriptionId(); + final int subId = SubscriptionManager.getActiveDataSubscriptionId(); if (tetherSubId != subId) { Log.e(TAG, "This Provisioning request is outdated, current subId: " + subId); return; @@ -67,6 +67,7 @@ public class TetherProvisioningActivity extends Activity { final Intent intent = new Intent(Intent.ACTION_MAIN); intent.setClassName(provisionApp[0], provisionApp[1]); intent.putExtra(EXTRA_TETHER_TYPE, tetherType); + intent.putExtra(SubscriptionManager.EXTRA_SUBSCRIPTION_INDEX, subId); if (DEBUG) { Log.d(TAG, "Starting provisioning app: " + provisionApp[0] + "." + provisionApp[1]); } diff --git a/src/com/android/settings/wifi/tether/TetherService.java b/src/com/android/settings/wifi/tether/TetherService.java index 34daccf6aea..058bba788ec 100644 --- a/src/com/android/settings/wifi/tether/TetherService.java +++ b/src/com/android/settings/wifi/tether/TetherService.java @@ -85,7 +85,7 @@ public class TetherService extends Service { public void onCreate() { super.onCreate(); if (DEBUG) Log.d(TAG, "Creating TetherService"); - String provisionResponse = getResourceForDefaultDataSubId().getString( + String provisionResponse = getResourceForActiveDataSubId().getString( com.android.internal.R.string.config_mobile_hotspot_provision_response); registerReceiver(mReceiver, new IntentFilter(provisionResponse), android.Manifest.permission.CONNECTIVITY_INTERNAL, null); @@ -105,7 +105,7 @@ public class TetherService extends Service { if (intent.hasExtra(EXTRA_SUBID)) { final int tetherSubId = intent.getIntExtra(EXTRA_SUBID, SubscriptionManager.INVALID_SUBSCRIPTION_ID); - final int subId = getTetherServiceWrapper().getDefaultDataSubscriptionId(); + final int subId = getTetherServiceWrapper().getActiveDataSubscriptionId(); if (tetherSubId != subId) { Log.e(TAG, "This Provisioning request is outdated, current subId: " + subId); if (!mInProvisionCheck) { @@ -273,11 +273,13 @@ public class TetherService extends Service { } private Intent getProvisionBroadcastIntent(int index) { - String provisionAction = getResourceForDefaultDataSubId().getString( + String provisionAction = getResourceForActiveDataSubId().getString( com.android.internal.R.string.config_mobile_hotspot_provision_app_no_ui); + final int subId = getTetherServiceWrapper().getActiveDataSubscriptionId(); Intent intent = new Intent(provisionAction); int type = mCurrentTethers.get(index); intent.putExtra(TETHER_CHOICE, type); + intent.putExtra(SubscriptionManager.EXTRA_SUBSCRIPTION_INDEX, subId); intent.setFlags(Intent.FLAG_RECEIVER_FOREGROUND | Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND); @@ -309,7 +311,7 @@ public class TetherService extends Service { PendingIntent pendingIntent = PendingIntent.getService(this, 0, intent, 0); AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); - int period = getResourceForDefaultDataSubId().getInteger( + int period = getResourceForActiveDataSubId().getInteger( com.android.internal.R.integer.config_mobile_hotspot_provision_check_period); long periodMs = period * MS_PER_HOUR; long firstTime = SystemClock.elapsedRealtime() + periodMs; @@ -362,7 +364,7 @@ public class TetherService extends Service { @Override public void onReceive(Context context, Intent intent) { if (DEBUG) Log.d(TAG, "Got provision result " + intent); - String provisionResponse = getResourceForDefaultDataSubId().getString( + String provisionResponse = getResourceForActiveDataSubId().getString( com.android.internal.R.string.config_mobile_hotspot_provision_response); if (provisionResponse.equals(intent.getAction())) { @@ -429,14 +431,14 @@ public class TetherService extends Service { mUsageStatsManager.setAppInactive(packageName, isInactive); } - int getDefaultDataSubscriptionId() { - return SubscriptionManager.getDefaultDataSubscriptionId(); + int getActiveDataSubscriptionId() { + return SubscriptionManager.getActiveDataSubscriptionId(); } } @VisibleForTesting - Resources getResourceForDefaultDataSubId() { - final int subId = getTetherServiceWrapper().getDefaultDataSubscriptionId(); + Resources getResourceForActiveDataSubId() { + final int subId = getTetherServiceWrapper().getActiveDataSubscriptionId(); return Utils.getResourcesForSubId(this, subId); } } diff --git a/tests/unit/src/com/android/settings/wifi/tether/TetherServiceTest.java b/tests/unit/src/com/android/settings/wifi/tether/TetherServiceTest.java index 0739ef0ce23..24d1bcc85e2 100644 --- a/tests/unit/src/com/android/settings/wifi/tether/TetherServiceTest.java +++ b/tests/unit/src/com/android/settings/wifi/tether/TetherServiceTest.java @@ -458,7 +458,7 @@ public class TetherServiceTest extends ServiceTestCase { } @Override - int getDefaultDataSubscriptionId() { + int getActiveDataSubscriptionId() { return INVALID_SUBSCRIPTION_ID; } }