OSDN Git Service

Make sure on non-dds phone, try MMS data connection when PS is not
authorMalcolm Chen <refuhoo@google.com>
Mon, 10 Jun 2019 21:34:33 +0000 (14:34 -0700)
committerXiangyu/Malcolm Chen <refuhoo@google.com>
Tue, 11 Jun 2019 22:22:53 +0000 (22:22 +0000)
attached.

Before setting up data connection, we check if it's on non-dds and
voice is registered on non-LTE network, if true we'll setup the data
connection even if it's not attached.

Bug: 134086103
Test: manual
Change-Id: I43e150c1d0cc4065da07f4a5ec738b967e7a9a6d

telephony/java/android/telephony/ServiceState.java

index 5d39a2c..518da74 100644 (file)
@@ -16,6 +16,8 @@
 
 package android.telephony;
 
+import static android.telephony.TelephonyManager.NETWORK_TYPE_BITMASK_UNKNOWN;
+
 import android.annotation.IntDef;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
@@ -1605,6 +1607,12 @@ public class ServiceState implements Parcelable {
         }
     }
 
+    /** @hide */
+    public static int networkTypeToAccessNetworkType(@TelephonyManager.NetworkType
+            int networkType) {
+        return rilRadioTechnologyToAccessNetworkType(networkTypeToRilRadioTechnology(networkType));
+    }
+
     /**
      * Get current data network type.
      *
@@ -1730,6 +1738,36 @@ public class ServiceState implements Parcelable {
         return false;
     }
 
+    /**
+     *
+     * Returns whether the bearerBitmask includes a networkType that matches the accessNetworkType.
+     *
+     * The NetworkType refers to NetworkType in TelephonyManager. For example
+     * {@link TelephonyManager#NETWORK_TYPE_GPRS}.
+     *
+     * The accessNetworkType refers to {@link AccessNetworkType}.
+     *
+     * @hide
+     * */
+    public static boolean networkBitmaskHasAccessNetworkType(
+            @TelephonyManager.NetworkTypeBitMask int networkBitmask, int accessNetworkType) {
+        if (networkBitmask == NETWORK_TYPE_BITMASK_UNKNOWN) return true;
+        if (accessNetworkType == AccessNetworkType.UNKNOWN) return false;
+
+        int networkType = 1;
+        while (networkBitmask != 0) {
+            if ((networkBitmask & 1) != 0) {
+                if (networkTypeToAccessNetworkType(networkType) == accessNetworkType) {
+                    return true;
+                }
+            }
+            networkBitmask = networkBitmask >> 1;
+            networkType++;
+        }
+
+        return false;
+    }
+
     /** @hide */
     public static int getBitmaskForTech(int radioTech) {
         if (radioTech >= 1) {