Snap for 12151362 from 60b073420c5f352e4845ce1c5ab38c7b001212ca to mainline-permission-release

Change-Id: I9847a4b67e2b7e2d4d250136a0d6313bb71f996b
diff --git a/satellite_client/src/android/telephony/satellite/wrapper/CarrierRoamingNtnModeListenerWrapper.java b/satellite_client/src/android/telephony/satellite/wrapper/CarrierRoamingNtnModeListenerWrapper.java
index 4a2436e..1c0a840 100644
--- a/satellite_client/src/android/telephony/satellite/wrapper/CarrierRoamingNtnModeListenerWrapper.java
+++ b/satellite_client/src/android/telephony/satellite/wrapper/CarrierRoamingNtnModeListenerWrapper.java
@@ -16,6 +16,9 @@
 
 package android.telephony.satellite.wrapper;
 
+import android.telephony.CarrierConfigManager;
+import android.telephony.ServiceState;
+
 /** Interface for carrier roaming non-terrestrial network listener. */
 public interface CarrierRoamingNtnModeListenerWrapper {
     /**
@@ -28,4 +31,22 @@
      *                           {code false} otherwise.
      */
     void onCarrierRoamingNtnModeChanged(boolean active);
+
+    /**
+     * Callback invoked when eligibility to connect to carrier roaming non-terrestrial network
+     * changes.
+     *
+     * @param eligible {@code true} when the device is eligible for satellite
+     * communication if all the following conditions are met:
+     * <ul>
+     * <li>Any subscription on the device supports P2P satellite messaging which is defined by
+     * {@link CarrierConfigManager#KEY_SATELLITE_ATTACH_SUPPORTED_BOOL} </li>
+     * <li>{@link CarrierConfigManager#KEY_CARRIER_ROAMING_NTN_CONNECT_TYPE_INT} set to
+     * {@link CarrierConfigManager#CARRIER_ROAMING_NTN_CONNECT_MANUAL} </li>
+     * <li>The device is in {@link ServiceState#STATE_OUT_OF_SERVICE}, not connected to Wi-Fi,
+     * and the hysteresis timer defined by {@link CarrierConfigManager
+     * #KEY_CARRIER_SUPPORTED_SATELLITE_NOTIFICATION_HYSTERESIS_SEC_INT} is expired. </li>
+     * </ul>
+     */
+    default void onCarrierRoamingNtnEligibleStateChanged(boolean eligible) {}
 }
diff --git a/satellite_client/src/android/telephony/satellite/wrapper/ProvisionSubscriberIdWrapper.java b/satellite_client/src/android/telephony/satellite/wrapper/ProvisionSubscriberIdWrapper.java
index 760fc34..c547ee0 100644
--- a/satellite_client/src/android/telephony/satellite/wrapper/ProvisionSubscriberIdWrapper.java
+++ b/satellite_client/src/android/telephony/satellite/wrapper/ProvisionSubscriberIdWrapper.java
@@ -21,13 +21,14 @@
 import java.util.Objects;
 
 public class ProvisionSubscriberIdWrapper {
-    @NonNull
-    private final String subscriberId;
+    @NonNull private final String subscriberId;
     private int carrierId;
+    @NonNull private final String niddApn;
 
-    public ProvisionSubscriberIdWrapper(String subscriberId, int carrierId) {
+    public ProvisionSubscriberIdWrapper(String subscriberId, int carrierId, String niddApn) {
         this.subscriberId = subscriberId;
         this.carrierId = carrierId;
+        this.niddApn = niddApn;
     }
 
     @NonNull
@@ -39,6 +40,11 @@
         return carrierId;
     }
 
+    @NonNull
+    public String getNiddApn() {
+        return niddApn;
+    }
+
     @Override
     @NonNull
     public String toString() {
@@ -49,6 +55,10 @@
 
         sb.append("carrierId:");
         sb.append(carrierId);
+        sb.append(",");
+
+        sb.append("niddApn:");
+        sb.append(niddApn);
         return sb.toString();
     }
 
@@ -58,11 +68,11 @@
         if (o == null || getClass() != o.getClass()) return false;
         ProvisionSubscriberIdWrapper that = (ProvisionSubscriberIdWrapper) o;
         return Objects.equals(subscriberId, that.subscriberId)
-                && carrierId == that.carrierId;
+                && carrierId == that.carrierId && Objects.equals(niddApn, that.niddApn);
     }
 
     @Override
     public int hashCode() {
-        return Objects.hash(subscriberId, carrierId);
+        return Objects.hash(subscriberId, carrierId, niddApn);
     }
 }
diff --git a/satellite_client/src/android/telephony/satellite/wrapper/SatelliteManagerWrapper.java b/satellite_client/src/android/telephony/satellite/wrapper/SatelliteManagerWrapper.java
index 8bc9e6d..2227a75 100644
--- a/satellite_client/src/android/telephony/satellite/wrapper/SatelliteManagerWrapper.java
+++ b/satellite_client/src/android/telephony/satellite/wrapper/SatelliteManagerWrapper.java
@@ -104,8 +104,8 @@
           SatelliteSupportedStateCallbackWrapper, SatelliteSupportedStateCallback>
           sSatelliteSupportedStateCallbackWrapperMap = new ConcurrentHashMap<>();
 
-  private static final ConcurrentHashMap<
-          CarrierRoamingNtnModeListenerWrapper, TelephonyCallback.CarrierRoamingNtnModeListener>
+  private static final ConcurrentHashMap<CarrierRoamingNtnModeListenerWrapper,
+          CarrierRoamingNtnModeListener>
           sCarrierRoamingNtnModeListenerWrapperMap = new ConcurrentHashMap<>();
 
   private static final ConcurrentHashMap<SatelliteCommunicationAllowedStateCallbackWrapper,
@@ -156,6 +156,11 @@
    * is the last message to emergency service provider indicating no more help is needed.
    */
   public static final int DATAGRAM_TYPE_LAST_SOS_MESSAGE_NO_HELP_NEEDED = 5;
+  /**
+   * Datagram type indicating that the message to be sent or received is of type SMS.
+   */
+  public static final int DATAGRAM_TYPE_SMS = 6;
+
   /** @hide */
   @IntDef(
       prefix = "DATAGRAM_TYPE_",
@@ -165,7 +170,8 @@
               DATAGRAM_TYPE_LOCATION_SHARING,
               DATAGRAM_TYPE_KEEP_ALIVE,
               DATAGRAM_TYPE_LAST_SOS_MESSAGE_STILL_NEED_HELP,
-              DATAGRAM_TYPE_LAST_SOS_MESSAGE_NO_HELP_NEEDED
+              DATAGRAM_TYPE_LAST_SOS_MESSAGE_NO_HELP_NEEDED,
+              DATAGRAM_TYPE_SMS
       })
   @Retention(RetentionPolicy.SOURCE)
   public @interface DatagramType {}
@@ -825,31 +831,49 @@
     }
   }
 
+  private class CarrierRoamingNtnModeListener extends TelephonyCallback
+          implements TelephonyCallback.CarrierRoamingNtnModeListener {
+
+    private CarrierRoamingNtnModeListenerWrapper mListenerWrapper;
+
+    public CarrierRoamingNtnModeListener(CarrierRoamingNtnModeListenerWrapper listenerWrapper) {
+      mListenerWrapper = listenerWrapper;
+    }
+
+    @Override
+    public void onCarrierRoamingNtnModeChanged(boolean active) {
+      logd("onCarrierRoamingNtnModeChanged: active=" + active);
+      mListenerWrapper.onCarrierRoamingNtnModeChanged(active);
+    }
+
+    @Override
+    public void onCarrierRoamingNtnEligibleStateChanged(boolean eligible) {
+      logd("onCarrierRoamingNtnEligibleStateChanged: eligible=" + eligible);
+      mListenerWrapper.onCarrierRoamingNtnEligibleStateChanged(eligible);
+    }
+  }
+
   /** Register for carrier roaming non-terrestrial network mode changes. */
   public void registerForCarrierRoamingNtnModeChanged(int subId,
           @NonNull @CallbackExecutor Executor executor,
           @NonNull CarrierRoamingNtnModeListenerWrapper listener) {
-    TelephonyCallback.CarrierRoamingNtnModeListener internalListener = new TelephonyCallback
-            .CarrierRoamingNtnModeListener() {
-      @Override
-      public void onCarrierRoamingNtnModeChanged(boolean active) {
-        listener.onCarrierRoamingNtnModeChanged(active);
-      }
-    };
+    logd("registerForCarrierRoamingNtnModeChanged: subId=" + subId);
+    CarrierRoamingNtnModeListener internalListener = new CarrierRoamingNtnModeListener(listener);
     sCarrierRoamingNtnModeListenerWrapperMap.put(listener, internalListener);
 
     TelephonyManager tm = mTelephonyManager.createForSubscriptionId(subId);
-    tm.registerTelephonyCallback(executor, (TelephonyCallback) internalListener);
+    tm.registerTelephonyCallback(executor, internalListener);
   }
 
   /** Unregister for carrier roaming non-terrestrial network mode changes. */
   public void unregisterForCarrierRoamingNtnModeChanged(int subId,
           @NonNull CarrierRoamingNtnModeListenerWrapper listener) {
-    TelephonyCallback.CarrierRoamingNtnModeListener internalListener =
+    logd("unregisterForCarrierRoamingNtnModeChanged: subId=" + subId);
+    CarrierRoamingNtnModeListener internalListener =
             sCarrierRoamingNtnModeListenerWrapperMap.get(listener);
     if (internalListener != null) {
       TelephonyManager tm = mTelephonyManager.createForSubscriptionId(subId);
-      tm.unregisterTelephonyCallback((TelephonyCallback) internalListener);
+      tm.unregisterTelephonyCallback(internalListener);
     }
   }
 
@@ -1417,7 +1441,8 @@
               @Override
               public void onResult(List<ProvisionSubscriberId> result) {
                 callback.onResult(result.stream().map(ids -> new ProvisionSubscriberIdWrapper(
-                        ids.getSubscriberId(), ids.getCarrierId())).collect(Collectors.toList()));
+                        ids.getSubscriberId(), ids.getCarrierId(), ids.getNiddApn())).collect(
+                        Collectors.toList()));
               }
 
               @Override
@@ -1479,7 +1504,7 @@
             };
     mSatelliteManager.provisionSatellite(list.stream()
             .map(wrapper -> new ProvisionSubscriberId(wrapper.getSubscriberId(),
-                    wrapper.getCarrierId()))
+                    wrapper.getCarrierId(), wrapper.getNiddApn()))
             .collect(Collectors.toList()), executor, internalCallback);
   }