diff options
author | nico <nicorg2529@gmail.com> | 2019-01-04 15:55:19 +0000 |
---|---|---|
committer | Michael Bestas <mkbestas@lineageos.org> | 2019-01-21 15:55:09 +0100 |
commit | eef2974c7fb1499d667a7c2578e3f71bc64715f3 (patch) | |
tree | cf75590046aaa55c0ea74b9ce5a74a25ab8ec9c1 | |
parent | 68a1d795d34dcaf7dc53b0feaf9397172851d0de (diff) | |
download | lineage-sdk-eef2974c7fb1499d667a7c2578e3f71bc64715f3.tar.gz lineage-sdk-eef2974c7fb1499d667a7c2578e3f71bc64715f3.tar.bz2 lineage-sdk-eef2974c7fb1499d667a7c2578e3f71bc64715f3.zip |
TelephonyExtUtils: Set timeout for (de)activating provision
* catch OEM RIL being unresponsive to UICC provisioning request
Change-Id: Ic28c01412bffaec4cadabd3d68434ddef75693ef
-rw-r--r-- | sdk/src/java/org/lineageos/internal/util/TelephonyExtUtils.java | 66 |
1 files changed, 52 insertions, 14 deletions
diff --git a/sdk/src/java/org/lineageos/internal/util/TelephonyExtUtils.java b/sdk/src/java/org/lineageos/internal/util/TelephonyExtUtils.java index 59f6d10f..776470a4 100644 --- a/sdk/src/java/org/lineageos/internal/util/TelephonyExtUtils.java +++ b/sdk/src/java/org/lineageos/internal/util/TelephonyExtUtils.java @@ -20,8 +20,10 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.os.AsyncTask; import android.os.RemoteException; import android.os.ServiceManager; +import android.os.SystemProperties; import android.telephony.SubscriptionManager; import android.util.Log; @@ -31,6 +33,8 @@ import org.codeaurora.internal.IExtTelephony; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.TimeoutException; +import java.util.concurrent.TimeUnit; public final class TelephonyExtUtils { private static final boolean DEBUG = false; @@ -41,6 +45,9 @@ public final class TelephonyExtUtils { public static final String EXTRA_NEW_PROVISION_STATE = "newProvisionState"; + private static final int ACTIVATE_TIME_OUT = 15000; + private static final String PROP_TIME_OUT = "sys.uicc.activate.timeout"; + // This is the list of possible values that // IExtTelephony.getCurrentUiccCardProvisioningStatus() can return public static final int CARD_NOT_PRESENT = -2; @@ -147,15 +154,7 @@ public final class TelephonyExtUtils { * @return The result of the activation or -1 */ public int activateUiccCard(int slotId) { - IExtTelephony service = getService(); - if (service != null) { - try { - return mExtTelephony.activateUiccCard(slotId); - } catch (RemoteException ex) { - Log.e(TAG, "Activating sub failed for slotId: " + slotId); - } - } - return -1; + return setUiccCardProvisioningStatus(PROVISIONED, slotId); } /** @@ -164,14 +163,53 @@ public final class TelephonyExtUtils { * @return The result of the deactivation or -1 */ public int deactivateUiccCard(int slotId) { + return setUiccCardProvisioningStatus(NOT_PROVISIONED, slotId); + } + + private int setUiccCardProvisioningStatus(int provStatus, int slotId) { + String actionStr; + switch (provStatus) { + case PROVISIONED: + actionStr = "Activating"; + break; + case NOT_PROVISIONED: + actionStr = "Deactivating"; + break; + default: + Log.e(TAG, "Invalid argument for setUiccCardProvisioningStatus " + + "(provStatus=" + provStatus + ", slotId=" + slotId + ")"); + return -1; + } + IExtTelephony service = getService(); - if (service != null) { - try { - return mExtTelephony.deactivateUiccCard(slotId); - } catch (RemoteException ex) { - Log.e(TAG, "Deactivating sub failed for slotId: " + slotId); + if (service == null) { + return -1; + } + + AsyncTask<Integer, Void, Integer> task = new AsyncTask<Integer, Void, Integer>() { + @Override + protected Integer doInBackground(Integer... params) { + try { + return params[0] == PROVISIONED + ? mExtTelephony.activateUiccCard(params[1]) + : mExtTelephony.deactivateUiccCard(params[1]); + } catch (RemoteException ex) { + Log.e(TAG, actionStr + " sub failed for slotId: " + params[1]); + } + return -1; } + }; + + try { + return task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, provStatus, slotId) + .get(ACTIVATE_TIME_OUT, TimeUnit.MILLISECONDS); + } catch (TimeoutException ex) { + Log.e(TAG, actionStr + " sub timed out for slotId: " + slotId); + SystemProperties.set(PROP_TIME_OUT, Integer.toString(slotId + 1)); + } catch (Exception ex) { + Log.e(TAG, actionStr + " sub task failed for slotId: " + slotId); } + return -1; } |