Snap for 6948038 from cf77b59c08706912ff6c18f9bc26420e4feadf17 to rvc-platform-release

Change-Id: I76e0425ae79e846ac148fd63206e7ddcb17e5b9b
diff --git a/Common/src/com/googlecode/android_scripting/facade/telephony/TelephonyConstants.java b/Common/src/com/googlecode/android_scripting/facade/telephony/TelephonyConstants.java
index ecbec0d..1c83e27 100644
--- a/Common/src/com/googlecode/android_scripting/facade/telephony/TelephonyConstants.java
+++ b/Common/src/com/googlecode/android_scripting/facade/telephony/TelephonyConstants.java
@@ -228,6 +228,15 @@
     public static final String DATA_STATE_UNKNOWN = "UNKNOWN";
 
     /**
+     * Constant for Override Network Type
+     * **/
+    public static final String OVERRIDE_NETWORK_TYPE_NONE = "NONE";
+    public static final String OVERRIDE_NETWORK_TYPE_LTE_CA = "LTE_CA";
+    public static final String OVERRIDE_NETWORK_TYPE_LTE_ADVANCED_PRO = "LTE_ADVANCED_PRO";
+    public static final String OVERRIDE_NETWORK_TYPE_NR_NSA = "NR_NSA";
+    public static final String OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE = "NR_MMWAVE";
+
+    /**
      * Constant for Telephony Manager Call State
      * **/
     public static final String TELEPHONY_STATE_RINGING = "RINGING";
@@ -317,6 +326,17 @@
     public static final String NETWORK_MODE_LTE_TDSCDMA_GSM_WCDMA = "NETWORK_MODE_LTE_TDSCDMA_GSM_WCDMA";
     public static final String NETWORK_MODE_TDSCDMA_CDMA_EVDO_GSM_WCDMA = "NETWORK_MODE_TDSCDMA_CDMA_EVDO_GSM_WCDMA";
     public static final String NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA = "NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA";
+    public static final String NETWORK_MODE_NR_LTE_GSM_WCDMA = "NETWORK_MODE_NR_LTE_GSM_WCDMA";
+    public static final String NETWORK_MODE_NR_ONLY = "NETWORK_MODE_NR_ONLY";
+    public static final String NETWORK_MODE_NR_LTE = "NETWORK_MODE_NR_LTE";
+    public static final String NETWORK_MODE_NR_LTE_CDMA_EVDO = "NETWORK_MODE_NR_LTE_CDMA_EVDO";
+    public static final String NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA = "NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA";
+    public static final String NETWORK_MODE_NR_LTE_WCDMA = "NETWORK_MODE_NR_LTE_WCDMA";
+    public static final String NETWORK_MODE_NR_LTE_TDSCDMA = "NETWORK_MODE_NR_LTE_TDSCDMA";
+    public static final String NETWORK_MODE_NR_LTE_TDSCDMA_GSM = "NETWORK_MODE_NR_LTE_TDSCDMA_GSM";
+    public static final String NETWORK_MODE_NR_LTE_TDSCDMA_WCDMA = "NETWORK_MODE_NR_LTE_TDSCDMA_WCDMA";
+    public static final String NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA = "NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA";
+    public static final String NETWORK_MODE_NR_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA = "NETWORK_MODE_NR_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA";
     public static final String NETWORK_MODE_INVALID = "INVALID";
 
     /**
@@ -373,6 +393,7 @@
     public static final String EventPreciseStateChanged = "PreciseStateChanged";
     public static final String EventDataConnectionRealTimeInfoChanged = "DataConnectionRealTimeInfoChanged";
     public static final String EventDataConnectionStateChanged = "DataConnectionStateChanged";
+    public static final String EventDisplayInfoChanged = "DisplayInfoChanged";
     public static final String EventActiveDataSubIdChanged = "ActiveDataSubIdChanged";
     public static final String EventServiceStateChanged = "ServiceStateChanged";
     public static final String EventSignalStrengthChanged = "SignalStrengthChanged";
@@ -438,6 +459,13 @@
         public static final String DATA_CONNECTION_STATE = "dataConnectionState";
     }
 
+    public static class DisplayInfoContainer {
+        public static final String TIME = "time";
+        public static final String NETWORK = "network";
+        public static final String OVERRIDE = "override";
+        public static final String SUBSCRIPTION_ID = "subscriptionId";
+    }
+
     public static class ServiceStateContainer {
         public static final String VOICE_REG_STATE = "voiceRegState";
         public static final String VOICE_NETWORK_TYPE = "voiceNetworkType";
diff --git a/Common/src/com/googlecode/android_scripting/facade/telephony/TelephonyEvents.java b/Common/src/com/googlecode/android_scripting/facade/telephony/TelephonyEvents.java
index 7021475..04f8041 100644
--- a/Common/src/com/googlecode/android_scripting/facade/telephony/TelephonyEvents.java
+++ b/Common/src/com/googlecode/android_scripting/facade/telephony/TelephonyEvents.java
@@ -20,6 +20,7 @@
 import android.telephony.PhysicalChannelConfig;
 import android.telephony.PreciseCallState;
 import android.telephony.ServiceState;
+import android.telephony.TelephonyDisplayInfo;
 
 import com.googlecode.android_scripting.jsonrpc.JsonSerializable;
 
@@ -267,6 +268,52 @@
         }
     }
 
+    public static class DisplayInfoChangedEvent implements JsonSerializable {
+        private TelephonyDisplayInfo mDisplayInfoString;
+        private int mSubscriptionId;
+        private String mOverrideDataNetworkType;
+        private String mDataNetworkType;
+
+        DisplayInfoChangedEvent(TelephonyDisplayInfo DisplayInfoString, int subscriptionId) {
+            mDisplayInfoString = DisplayInfoString;
+            mSubscriptionId = subscriptionId;
+            mOverrideDataNetworkType = TelephonyUtils.getDisplayInfoString(
+                    DisplayInfoString.getOverrideNetworkType());
+            mDataNetworkType = TelephonyUtils.getNetworkTypeString(
+                    DisplayInfoString.getNetworkType());
+        }
+
+        public String getOverrideDataNetworkType() {
+            return mOverrideDataNetworkType;
+        }
+
+        public int getSubscriptionId() {
+            return mSubscriptionId;
+        }
+
+        public String getDataNetworkType() {
+            return mDataNetworkType;
+        }
+
+        public JSONObject toJSON() throws JSONException {
+            JSONObject displayInfoState = new JSONObject();
+
+            displayInfoState.put(
+                    TelephonyConstants.DisplayInfoContainer.OVERRIDE,
+                    mOverrideDataNetworkType);
+
+            displayInfoState.put(
+                    TelephonyConstants.DisplayInfoContainer.NETWORK,
+                    mDataNetworkType);
+
+            displayInfoState.put(
+                    TelephonyConstants.DisplayInfoContainer.SUBSCRIPTION_ID,
+                    mSubscriptionId);
+
+            return displayInfoState;
+        }
+    }
+
     public static class PhysicalChannelConfigChangedEvent implements JsonSerializable {
         private final List<PhysicalChannelConfig> mConfigs;
 
diff --git a/Common/src/com/googlecode/android_scripting/facade/telephony/TelephonyManagerFacade.java b/Common/src/com/googlecode/android_scripting/facade/telephony/TelephonyManagerFacade.java
index a338402..a7988aa 100644
--- a/Common/src/com/googlecode/android_scripting/facade/telephony/TelephonyManagerFacade.java
+++ b/Common/src/com/googlecode/android_scripting/facade/telephony/TelephonyManagerFacade.java
@@ -55,6 +55,8 @@
 import com.googlecode.android_scripting.facade.telephony.TelephonyStateListeners
                                                    .DataConnectionStateChangeListener;
 import com.googlecode.android_scripting.facade.telephony.TelephonyStateListeners
+                                                   .DisplayInfoStateChangeListener;
+import com.googlecode.android_scripting.facade.telephony.TelephonyStateListeners
                                                    .ServiceStateChangeListener;
 import com.googlecode.android_scripting.facade.telephony.TelephonyStateListeners
                                                    .SignalStrengthChangeListener;
@@ -303,6 +305,28 @@
         return true;
     }
 
+    @Rpc(description = "Starts tracking display info change" +
+                       "for default subscription ID.")
+    public Boolean telephonyStartTrackingDisplayInfoChange() {
+        return telephonyStartTrackingDisplayInfoChangeForSubscription(
+                              SubscriptionManager.DEFAULT_SUBSCRIPTION_ID);
+    }
+
+    @Rpc(description = "Starts tracking display info change" +
+                       "for specified subscription ID.")
+    public Boolean telephonyStartTrackingDisplayInfoChangeForSubscription(
+                @RpcParameter(name = "subId") Integer subId) {
+        StateChangeListener listener = getStateChangeListenerForSubscription(subId, true);
+        if(listener == null) {
+            Log.e("Invalid subscription ID");
+            return false;
+        }
+        mTelephonyManager.createForSubscriptionId(subId).listen(
+            listener.mDisplayInfoStateChangeListener,
+            PhoneStateListener.LISTEN_DISPLAY_INFO_CHANGED);
+        return true;
+    }
+
     @Rpc(description = "Turn on/off precise listening on fore/background or" +
                        " ringing calls for default voice subscription ID.")
     public Boolean telephonyAdjustPreciseCallStateListenLevel(
@@ -381,6 +405,28 @@
         return true;
     }
 
+    @Rpc(description = "Stops tracking display info change " +
+                       "for default subscription ID.")
+    public Boolean telephonyStopTrackingDisplayInfoChange() {
+        return telephonyStopTrackingDisplayInfoChangeForSubscription(
+                SubscriptionManager.DEFAULT_SUBSCRIPTION_ID);
+    }
+
+    @Rpc(description = "Stops tracking display info change " +
+                       "for specified subscription ID.")
+    public Boolean telephonyStopTrackingDisplayInfoChangeForSubscription(
+                   @RpcParameter(name = "subId") Integer subId) {
+        StateChangeListener listener = getStateChangeListenerForSubscription(subId, false);
+        if(listener == null) {
+            Log.e("Invalid subscription ID");
+            return false;
+        }
+        mTelephonyManager.createForSubscriptionId(subId).listen(
+            listener.mDisplayInfoStateChangeListener,
+            PhoneStateListener.LISTEN_NONE);
+        return true;
+    }
+
     @Rpc(description = "Stops tracking call state change " +
             "for default voice subscription ID.")
     public Boolean telephonyStopTrackingCallStateChange() {
@@ -1506,6 +1552,7 @@
         public CellInfoChangeListener mCellInfoChangeListener;
         public DataConnectionStateChangeListener mDataConnectionStateChangeListener;
         public ActiveDataSubIdChangeListener mActiveDataSubIdChangeListener;
+        public DisplayInfoStateChangeListener mDisplayInfoStateChangeListener;
         public DataConnectionRealTimeInfoChangeListener mDataConnectionRTInfoChangeListener;
         public VoiceMailStateChangeListener mVoiceMailStateChangeListener;
 
@@ -1520,6 +1567,9 @@
             mActiveDataSubIdChangeListener =
                 new ActiveDataSubIdChangeListener(
                         mEventFacade, mTelephonyManager, subId, mService.getMainLooper());
+            mDisplayInfoStateChangeListener =
+                new DisplayInfoStateChangeListener(
+                        mEventFacade, mTelephonyManager, subId, mService.getMainLooper());
             mCallStateChangeListener =
                 new CallStateChangeListener(mEventFacade, subId, mService.getMainLooper());
             mCellInfoChangeListener =
@@ -1545,6 +1595,9 @@
                     mActiveDataSubIdChangeListener,
                     PhoneStateListener.LISTEN_NONE);
             mTelephonyManager.listen(
+                    mDisplayInfoStateChangeListener,
+                    PhoneStateListener.LISTEN_NONE);
+            mTelephonyManager.listen(
                     mCellInfoChangeListener,
                     PhoneStateListener.LISTEN_NONE);
             mTelephonyManager.listen(
diff --git a/Common/src/com/googlecode/android_scripting/facade/telephony/TelephonyStateListeners.java b/Common/src/com/googlecode/android_scripting/facade/telephony/TelephonyStateListeners.java
index e06af17..b13b66c 100644
--- a/Common/src/com/googlecode/android_scripting/facade/telephony/TelephonyStateListeners.java
+++ b/Common/src/com/googlecode/android_scripting/facade/telephony/TelephonyStateListeners.java
@@ -24,6 +24,7 @@
 import android.telephony.ServiceState;
 import android.telephony.SignalStrength;
 import android.telephony.SubscriptionManager;
+import android.telephony.TelephonyDisplayInfo;
 import android.telephony.TelephonyManager;
 
 import com.googlecode.android_scripting.facade.EventFacade;
@@ -217,6 +218,45 @@
         }
     }
 
+    public static class DisplayInfoStateChangeListener extends PhoneStateListener {
+
+        private final EventFacade mEventFacade;
+        private final TelephonyManager mTelephonyManager;
+        public static final int sListeningStates =
+                PhoneStateListener.LISTEN_DISPLAY_INFO_CHANGED;
+        public int subscriptionId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
+
+        public DisplayInfoStateChangeListener(EventFacade ef, TelephonyManager tm) {
+            super();
+            mEventFacade = ef;
+            mTelephonyManager = tm;
+            subscriptionId = SubscriptionManager.DEFAULT_SUBSCRIPTION_ID;
+        }
+
+        public DisplayInfoStateChangeListener(EventFacade ef, TelephonyManager tm, int subId) {
+            super();
+            mEventFacade = ef;
+            mTelephonyManager = tm;
+            subscriptionId = subId;
+        }
+
+        public DisplayInfoStateChangeListener(
+                EventFacade ef, TelephonyManager tm, int subId, Looper looper) {
+            super(looper);
+            mEventFacade = ef;
+            mTelephonyManager = tm;
+            subscriptionId = subId;
+        }
+
+        @Override
+        public void onDisplayInfoChanged(TelephonyDisplayInfo mTelephonyDisplayInfo) {
+            mEventFacade.postEvent(
+                TelephonyConstants.EventDisplayInfoChanged,
+                    new TelephonyEvents.DisplayInfoChangedEvent(
+                        mTelephonyDisplayInfo, subscriptionId));
+        }
+    }
+
     public static class ServiceStateChangeListener extends PhoneStateListener {
 
         private final EventFacade mEventFacade;
diff --git a/Common/src/com/googlecode/android_scripting/facade/telephony/TelephonyUtils.java b/Common/src/com/googlecode/android_scripting/facade/telephony/TelephonyUtils.java
index 3b0b436..c1556cc 100644
--- a/Common/src/com/googlecode/android_scripting/facade/telephony/TelephonyUtils.java
+++ b/Common/src/com/googlecode/android_scripting/facade/telephony/TelephonyUtils.java
@@ -18,10 +18,12 @@
 import com.android.ims.ImsConfig;
 import com.android.internal.telephony.RILConstants;
 import com.googlecode.android_scripting.Log;
+
 import android.telecom.TelecomManager;
 import android.telephony.DataConnectionRealTimeInfo;
 import android.telephony.PreciseCallState;
 import android.telephony.ServiceState;
+import android.telephony.TelephonyDisplayInfo;
 import android.telephony.TelephonyManager;
 import android.telephony.VoLteServiceState;
 
@@ -189,6 +191,23 @@
         return TelephonyConstants.DATA_STATE_UNKNOWN;
     }
 
+    public static String getDisplayInfoString(int state) {
+        switch (state) {
+            case TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NONE:
+                return TelephonyConstants.OVERRIDE_NETWORK_TYPE_NONE;
+            case TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_LTE_CA:
+                return TelephonyConstants.OVERRIDE_NETWORK_TYPE_LTE_CA;
+            case TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_LTE_ADVANCED_PRO:
+                return TelephonyConstants.OVERRIDE_NETWORK_TYPE_LTE_ADVANCED_PRO;
+            case TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA:
+                return TelephonyConstants.OVERRIDE_NETWORK_TYPE_NR_NSA;
+            case TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE:
+                return TelephonyConstants.OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE;
+        }
+        Log.d("getDisplayInfoStateString error. int: " + state);
+        return TelephonyConstants.OVERRIDE_NETWORK_TYPE_NONE;
+    }
+
     public static int getNetworkModeIntfromString(String networkMode) {
         switch (networkMode) {
             case TelephonyConstants.NETWORK_MODE_WCDMA_PREF:
@@ -237,6 +256,28 @@
                 return RILConstants.NETWORK_MODE_TDSCDMA_CDMA_EVDO_GSM_WCDMA;
             case TelephonyConstants.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
                 return RILConstants.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA;
+            case TelephonyConstants.NETWORK_MODE_NR_LTE_GSM_WCDMA:
+                return RILConstants.NETWORK_MODE_NR_LTE_GSM_WCDMA;
+            case TelephonyConstants.NETWORK_MODE_NR_ONLY:
+                return RILConstants.NETWORK_MODE_NR_ONLY;
+            case TelephonyConstants.NETWORK_MODE_NR_LTE:
+                return RILConstants.NETWORK_MODE_NR_LTE;
+            case TelephonyConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO:
+                return RILConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO;
+            case TelephonyConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA:
+                return RILConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA;
+            case TelephonyConstants.NETWORK_MODE_NR_LTE_WCDMA:
+                return RILConstants.NETWORK_MODE_NR_LTE_WCDMA;
+            case TelephonyConstants.NETWORK_MODE_NR_LTE_TDSCDMA:
+                return RILConstants.NETWORK_MODE_NR_LTE_TDSCDMA;
+            case TelephonyConstants.NETWORK_MODE_NR_LTE_TDSCDMA_GSM:
+                return RILConstants.NETWORK_MODE_NR_LTE_TDSCDMA_GSM;
+            case TelephonyConstants.NETWORK_MODE_NR_LTE_TDSCDMA_WCDMA:
+                return RILConstants.NETWORK_MODE_NR_LTE_TDSCDMA_WCDMA;
+            case TelephonyConstants.NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA:
+                return RILConstants.NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA;
+            case TelephonyConstants.NETWORK_MODE_NR_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
+                return RILConstants.NETWORK_MODE_NR_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA;
         }
         Log.d("getNetworkModeIntfromString error. String: " + networkMode);
         return RILConstants.RIL_ERRNO_INVALID_RESPONSE;
@@ -290,6 +331,28 @@
                 return TelephonyConstants.NETWORK_MODE_TDSCDMA_CDMA_EVDO_GSM_WCDMA;
             case RILConstants.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
                 return TelephonyConstants.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA;
+            case RILConstants.NETWORK_MODE_NR_LTE_GSM_WCDMA:
+                return TelephonyConstants.NETWORK_MODE_NR_LTE_GSM_WCDMA;
+            case RILConstants.NETWORK_MODE_NR_ONLY:
+                return TelephonyConstants.NETWORK_MODE_NR_ONLY;
+            case RILConstants.NETWORK_MODE_NR_LTE:
+                return TelephonyConstants.NETWORK_MODE_NR_LTE;
+            case RILConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO:
+                return TelephonyConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO;
+            case RILConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA:
+                return TelephonyConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA;
+            case RILConstants.NETWORK_MODE_NR_LTE_WCDMA:
+                return TelephonyConstants.NETWORK_MODE_NR_LTE_WCDMA;
+            case RILConstants.NETWORK_MODE_NR_LTE_TDSCDMA:
+                return TelephonyConstants.NETWORK_MODE_NR_LTE_TDSCDMA;
+            case RILConstants.NETWORK_MODE_NR_LTE_TDSCDMA_GSM:
+                return TelephonyConstants.NETWORK_MODE_NR_LTE_TDSCDMA_GSM;
+            case RILConstants.NETWORK_MODE_NR_LTE_TDSCDMA_WCDMA:
+                return TelephonyConstants.NETWORK_MODE_NR_LTE_TDSCDMA_WCDMA;
+            case RILConstants.NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA:
+                return TelephonyConstants.NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA;
+            case RILConstants.NETWORK_MODE_NR_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
+                return TelephonyConstants.NETWORK_MODE_NR_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA;
         }
         Log.d("getNetworkModeStringfromInt error. Int: " + networkMode);
         return TelephonyConstants.NETWORK_MODE_INVALID;