From 6315e5927512e5585ecdaeee92b46718052c3f6a Mon Sep 17 00:00:00 2001 From: Sooraj Sasindran Date: Thu, 28 Feb 2019 14:46:14 -0800 Subject: [PATCH] Should not turn on validation for data Should not turn on validation for data switch every time. Provide result as a callback Test: verified manually Bug: 126264455 Change-Id: I5df2311d91fdab34563148b4466163696e52faf9 --- api/current.txt | 2 +- api/system-current.txt | 2 +- .../telephony/SubscriptionManager.java | 9 ++--- .../android/telephony/TelephonyManager.java | 33 +++++++++++++++---- .../com/android/internal/telephony/IOns.aidl | 8 +++-- 5 files changed, 40 insertions(+), 14 deletions(-) diff --git a/api/current.txt b/api/current.txt index 12b4d4b29c845..92d5670c110a5 100644 --- a/api/current.txt +++ b/api/current.txt @@ -45217,7 +45217,7 @@ package android.telephony { method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean setNetworkSelectionModeManual(String, boolean); method public boolean setOperatorBrandOverride(String); method public boolean setPreferredNetworkTypeToGlobal(); - method public boolean setPreferredOpportunisticDataSubscription(int); + method public void setPreferredOpportunisticDataSubscription(int, boolean, @Nullable java.util.concurrent.Executor, @Nullable java.util.function.Consumer); method public void setVisualVoicemailSmsFilterSettings(android.telephony.VisualVoicemailSmsFilterSettings); method public boolean setVoiceMailNumber(String, String); method @Deprecated public void setVoicemailRingtoneUri(android.telecom.PhoneAccountHandle, android.net.Uri); diff --git a/api/system-current.txt b/api/system-current.txt index 7cd8c143dfd75..2c9b7aac608b1 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -7886,7 +7886,7 @@ package android.telephony { method public void requestEmbeddedSubscriptionInfoListRefresh(int); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setDefaultDataSubId(int); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setDefaultSmsSubId(int); - method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setPreferredDataSubscriptionId(int, boolean, @NonNull java.util.concurrent.Executor, java.util.function.Consumer); + method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setPreferredDataSubscriptionId(int, boolean, @Nullable java.util.concurrent.Executor, @Nullable java.util.function.Consumer); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean setSubscriptionEnabled(int, boolean); field @NonNull public static final android.net.Uri ADVANCED_CALLING_ENABLED_CONTENT_URI; field public static final int PROFILE_CLASS_DEFAULT = -1; // 0xffffffff diff --git a/telephony/java/android/telephony/SubscriptionManager.java b/telephony/java/android/telephony/SubscriptionManager.java index d7a0e50e5df7b..8edc5b4f404a6 100644 --- a/telephony/java/android/telephony/SubscriptionManager.java +++ b/telephony/java/android/telephony/SubscriptionManager.java @@ -2600,7 +2600,7 @@ public class SubscriptionManager { @SystemApi @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setPreferredDataSubscriptionId(int subId, boolean needValidation, - @NonNull @CallbackExecutor Executor executor, Consumer callback) { + @Nullable @CallbackExecutor Executor executor, @Nullable Consumer callback) { if (VDBG) logd("[setPreferredDataSubscriptionId]+ subId:" + subId); try { ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub")); @@ -2609,10 +2609,11 @@ public class SubscriptionManager { ISetOpportunisticDataCallback callbackStub = new ISetOpportunisticDataCallback.Stub() { @Override public void onComplete(int result) { + if (executor == null || callback == null) { + return; + } Binder.withCleanCallingIdentity(() -> executor.execute(() -> { - if (callback != null) { - callback.accept(result); - } + callback.accept(result); })); } }; diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index 0b003dc528aa6..04f3c6b395b20 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -81,6 +81,7 @@ import com.android.internal.telephony.CellNetworkScanResult; import com.android.internal.telephony.INumberVerificationCallback; import com.android.internal.telephony.IOns; import com.android.internal.telephony.IPhoneSubInfo; +import com.android.internal.telephony.ISetOpportunisticDataCallback; import com.android.internal.telephony.ITelephony; import com.android.internal.telephony.ITelephonyRegistry; import com.android.internal.telephony.OperatorInfo; @@ -98,6 +99,7 @@ import java.util.List; import java.util.Locale; import java.util.Map; import java.util.concurrent.Executor; +import java.util.function.Consumer; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -10185,21 +10187,40 @@ public class TelephonyManager { * @param subId which opportunistic subscription * {@link SubscriptionManager#getOpportunisticSubscriptions} is preferred for cellular data. * Pass {@link SubscriptionManager#DEFAULT_SUBSCRIPTION_ID} to unset the preference - * @return true if request is accepted, else false. + * @param needValidation whether validation is needed before switch happens. + * @param executor The executor of where the callback will execute. + * @param callback Callback will be triggered once it succeeds or failed. + * See {@link TelephonyManager.SetOpportunisticSubscriptionResult} + * for more details. Pass null if don't care about the result. * */ - public boolean setPreferredOpportunisticDataSubscription(int subId) { + public void setPreferredOpportunisticDataSubscription(int subId, boolean needValidation, + @Nullable @CallbackExecutor Executor executor, @Nullable Consumer callback) { String pkgForDebug = mContext != null ? mContext.getOpPackageName() : ""; try { IOns iOpportunisticNetworkService = getIOns(); - if (iOpportunisticNetworkService != null) { - return iOpportunisticNetworkService - .setPreferredDataSubscriptionId(subId, pkgForDebug); + if (iOpportunisticNetworkService == null) { + return; } + ISetOpportunisticDataCallback callbackStub = new ISetOpportunisticDataCallback.Stub() { + @Override + public void onComplete(int result) { + if (executor == null || callback == null) { + return; + } + Binder.withCleanCallingIdentity(() -> executor.execute(() -> { + callback.accept(result); + })); + } + }; + + iOpportunisticNetworkService + .setPreferredDataSubscriptionId(subId, needValidation, callbackStub, + pkgForDebug); } catch (RemoteException ex) { Rlog.e(TAG, "setPreferredDataSubscriptionId RemoteException", ex); } - return false; + return; } /** diff --git a/telephony/java/com/android/internal/telephony/IOns.aidl b/telephony/java/com/android/internal/telephony/IOns.aidl index 0e3d12b7f8382..0364477ead8cd 100755 --- a/telephony/java/com/android/internal/telephony/IOns.aidl +++ b/telephony/java/com/android/internal/telephony/IOns.aidl @@ -18,6 +18,8 @@ package com.android.internal.telephony; import android.telephony.AvailableNetworkInfo; +import com.android.internal.telephony.ISetOpportunisticDataCallback; + interface IOns { /** @@ -62,11 +64,13 @@ interface IOns { * @param subId which opportunistic subscription * {@link SubscriptionManager#getOpportunisticSubscriptions} is preferred for cellular data. * Pass {@link SubscriptionManager#DEFAULT_SUBSCRIPTION_ID} to unset the preference + * @param needValidation whether validation is needed before switch happens. + * @param callback callback upon request completion. * @param callingPackage caller's package name - * @return true if request is accepted, else false. * */ - boolean setPreferredDataSubscriptionId(int subId, String callingPackage); + void setPreferredDataSubscriptionId(int subId, boolean needValidation, + ISetOpportunisticDataCallback callbackStub, String callingPackage); /** * Get preferred opportunistic data subscription Id