Merge "Cancelling the notification once the satellite conenction got disconnected" into main
diff --git a/flags/misc.aconfig b/flags/misc.aconfig
index a750331..860c864 100644
--- a/flags/misc.aconfig
+++ b/flags/misc.aconfig
@@ -206,3 +206,26 @@
purpose: PURPOSE_BUGFIX
}
}
+
+# OWNER=rambowang TARGET=25Q2
+flag {
+ name: "support_carrier_services_for_hsum"
+ namespace: "telephony"
+ description: "Support Carrier Services (APIs) for HSUM."
+ bug:"345522246"
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
+}
+
+# OWNER=jackyu TARGET=25Q2
+flag {
+ name: "hsum_package_manager"
+ namespace: "telephony"
+ description: "Fixed the bug that package manager is not for the right user"
+ bug:"356827794"
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
+}
+
diff --git a/src/java/com/android/internal/telephony/CarrierPrivilegesTracker.java b/src/java/com/android/internal/telephony/CarrierPrivilegesTracker.java
index 98d0536..522cf77 100644
--- a/src/java/com/android/internal/telephony/CarrierPrivilegesTracker.java
+++ b/src/java/com/android/internal/telephony/CarrierPrivilegesTracker.java
@@ -31,6 +31,7 @@
import android.annotation.ElapsedRealtimeLong;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.SuppressLint;
import android.app.ActivityManager;
import android.content.BroadcastReceiver;
import android.content.Context;
@@ -66,6 +67,7 @@
import android.util.Pair;
import com.android.internal.annotations.GuardedBy;
+import com.android.internal.telephony.flags.FeatureFlags;
import com.android.internal.telephony.uicc.IccUtils;
import com.android.internal.telephony.uicc.UiccPort;
import com.android.internal.telephony.uicc.UiccProfile;
@@ -93,6 +95,7 @@
* Registered Telephony entities will receive notifications when the UIDs with these privileges
* change.
*/
+@SuppressLint("MissingPermission")
public class CarrierPrivilegesTracker extends Handler {
private static final String TAG = CarrierPrivilegesTracker.class.getSimpleName();
@@ -223,6 +226,9 @@
"mPrivilegedPackageInfoLock.writeLock()"})
private boolean mSimIsReadyButNotLoaded = false;
+ @NonNull
+ private final FeatureFlags mFeatureFlags;
+
/** Small snapshot to hold package names and UIDs of privileged packages. */
private static final class PrivilegedPackageInfo {
@NonNull final Set<String> mPackageNames;
@@ -316,7 +322,7 @@
boolean notExist = false;
try {
disabledByUser = action.equals(Intent.ACTION_PACKAGE_CHANGED)
- && mPackageManager.getApplicationEnabledSetting(pkgName)
+ && getApplicationEnabledSetting(pkgName)
== PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER;
} catch (IllegalArgumentException iae) {
// Very rare case when package changed race with package removed
@@ -336,10 +342,11 @@
}
};
- public CarrierPrivilegesTracker(
- @NonNull Looper looper, @NonNull Phone phone, @NonNull Context context) {
+ public CarrierPrivilegesTracker(@NonNull Looper looper, @NonNull Phone phone,
+ @NonNull Context context, @NonNull FeatureFlags flags) {
super(looper);
mContext = context;
+ mFeatureFlags = flags;
mPhone = phone;
mPackageManager = mContext.getPackageManager();
mUserManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
@@ -359,7 +366,13 @@
IntentFilter certFilter = new IntentFilter();
certFilter.addAction(TelephonyManager.ACTION_SIM_CARD_STATE_CHANGED);
certFilter.addAction(TelephonyManager.ACTION_SIM_APPLICATION_STATE_CHANGED);
- mContext.registerReceiver(mIntentReceiver, certFilter);
+ if (mFeatureFlags.supportCarrierServicesForHsum()) {
+ mContext.registerReceiverAsUser(
+ mIntentReceiver, UserHandle.of(ActivityManager.getCurrentUser()), certFilter,
+ /* broadcastPermission= */ null, /* scheduler= */ null);
+ } else {
+ mContext.registerReceiver(mIntentReceiver, certFilter);
+ }
IntentFilter packageFilter = new IntentFilter();
packageFilter.addAction(Intent.ACTION_PACKAGE_ADDED);
@@ -370,7 +383,13 @@
// For package-related broadcasts, specify the data scheme for "package" to receive the
// package name along with the broadcast
packageFilter.addDataScheme("package");
- mContext.registerReceiver(mIntentReceiver, packageFilter);
+ if (mFeatureFlags.supportCarrierServicesForHsum()) {
+ mContext.registerReceiverAsUser(
+ mIntentReceiver, UserHandle.of(ActivityManager.getCurrentUser()), packageFilter,
+ /* broadcastPermission= */ null, /* scheduler= */ null);
+ } else {
+ mContext.registerReceiver(mIntentReceiver, packageFilter);
+ }
sendMessage(obtainMessage(ACTION_INITIALIZE_TRACKER));
}
@@ -542,7 +561,14 @@
PackageInfo pkg;
try {
- pkg = mPackageManager.getPackageInfo(pkgName, INSTALLED_PACKAGES_QUERY_FLAGS);
+ pkg =
+ mFeatureFlags.supportCarrierServicesForHsum()
+ ? mPackageManager.getPackageInfoAsUser(
+ pkgName,
+ INSTALLED_PACKAGES_QUERY_FLAGS,
+ ActivityManager.getCurrentUser())
+ : mPackageManager.getPackageInfo(
+ pkgName, INSTALLED_PACKAGES_QUERY_FLAGS);
} catch (NameNotFoundException e) {
Rlog.e(TAG, "Error getting installed package: " + pkgName, e);
return;
@@ -620,7 +646,10 @@
private void refreshInstalledPackageCache() {
List<PackageInfo> installedPackages =
mPackageManager.getInstalledPackagesAsUser(
- INSTALLED_PACKAGES_QUERY_FLAGS, UserHandle.SYSTEM.getIdentifier());
+ INSTALLED_PACKAGES_QUERY_FLAGS,
+ mFeatureFlags.supportCarrierServicesForHsum()
+ ? ActivityManager.getCurrentUser()
+ : UserHandle.SYSTEM.getIdentifier());
for (PackageInfo pkg : installedPackages) {
updateCertsForPackage(pkg);
// This may be unnecessary before initialization, but invalidate the cache all the time
@@ -794,7 +823,9 @@
private int getPackageUid(@Nullable String pkgName) {
int uid = Process.INVALID_UID;
try {
- uid = mPackageManager.getPackageUid(pkgName, /* flags= */0);
+ uid = mFeatureFlags.supportCarrierServicesForHsum()
+ ? mPackageManager.getPackageUidAsUser(pkgName, ActivityManager.getCurrentUser())
+ : mPackageManager.getPackageUid(pkgName, /* flags= */0);
} catch (NameNotFoundException e) {
Rlog.e(TAG, "Unable to find uid for package " + pkgName);
}
@@ -994,10 +1025,25 @@
// Do the PackageManager queries before we take the lock, as these are the longest-running
// pieces of this method and don't depend on the set of carrier apps.
List<ResolveInfo> resolveInfos = new ArrayList<>();
- resolveInfos.addAll(mPackageManager.queryBroadcastReceivers(intent, 0));
- resolveInfos.addAll(mPackageManager.queryIntentActivities(intent, 0));
- resolveInfos.addAll(mPackageManager.queryIntentServices(intent, 0));
- resolveInfos.addAll(mPackageManager.queryIntentContentProviders(intent, 0));
+ if (mFeatureFlags.supportCarrierServicesForHsum()) {
+ resolveInfos.addAll(
+ mPackageManager.queryBroadcastReceiversAsUser(
+ intent, /* flags= */ 0, ActivityManager.getCurrentUser()));
+ resolveInfos.addAll(
+ mPackageManager.queryIntentActivitiesAsUser(
+ intent, /* flags= */ 0, ActivityManager.getCurrentUser()));
+ resolveInfos.addAll(
+ mPackageManager.queryIntentServicesAsUser(
+ intent, /* flags= */ 0, ActivityManager.getCurrentUser()));
+ resolveInfos.addAll(
+ mPackageManager.queryIntentContentProvidersAsUser(
+ intent, /* flags= */ 0, ActivityManager.getCurrentUser()));
+ } else {
+ resolveInfos.addAll(mPackageManager.queryBroadcastReceivers(intent, 0));
+ resolveInfos.addAll(mPackageManager.queryIntentActivities(intent, 0));
+ resolveInfos.addAll(mPackageManager.queryIntentServices(intent, 0));
+ resolveInfos.addAll(mPackageManager.queryIntentContentProviders(intent, 0));
+ }
// Now actually check which of the resolved packages have carrier privileges.
mPrivilegedPackageInfoLock.readLock().lock();
@@ -1031,8 +1077,15 @@
@NonNull
private Pair<String, Integer> getCarrierService(@NonNull Set<String> simPrivilegedPackages) {
- List<ResolveInfo> carrierServiceResolveInfos = mPackageManager.queryIntentServices(
- new Intent(CarrierService.CARRIER_SERVICE_INTERFACE), /* flags= */ 0);
+ List<ResolveInfo> carrierServiceResolveInfos =
+ mFeatureFlags.supportCarrierServicesForHsum()
+ ? mPackageManager.queryIntentServicesAsUser(
+ new Intent(CarrierService.CARRIER_SERVICE_INTERFACE),
+ /* flags= */ 0,
+ ActivityManager.getCurrentUser())
+ : mPackageManager.queryIntentServices(
+ new Intent(CarrierService.CARRIER_SERVICE_INTERFACE),
+ /* flags= */ 0);
String carrierServicePackageName = null;
for (ResolveInfo resolveInfo : carrierServiceResolveInfos) {
String packageName = getPackageName(resolveInfo);
@@ -1050,4 +1103,16 @@
? new Pair<>(null, Process.INVALID_UID)
: new Pair<>(carrierServicePackageName, getPackageUid(carrierServicePackageName));
}
+
+ private @PackageManager.EnabledState int getApplicationEnabledSetting(
+ @NonNull String packageName) {
+ if (mFeatureFlags.supportCarrierServicesForHsum()) {
+ return mContext.createContextAsUser(
+ UserHandle.of(ActivityManager.getCurrentUser()), /* flags= */ 0)
+ .getPackageManager()
+ .getApplicationEnabledSetting(packageName);
+ } else {
+ return mPackageManager.getApplicationEnabledSetting(packageName);
+ }
+ }
}
diff --git a/src/java/com/android/internal/telephony/CarrierServiceBindHelper.java b/src/java/com/android/internal/telephony/CarrierServiceBindHelper.java
index 960d794..55baecc 100644
--- a/src/java/com/android/internal/telephony/CarrierServiceBindHelper.java
+++ b/src/java/com/android/internal/telephony/CarrierServiceBindHelper.java
@@ -45,6 +45,7 @@
import android.util.SparseArray;
import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.telephony.flags.Flags;
import com.android.internal.telephony.util.TelephonyUtils;
import java.io.FileDescriptor;
@@ -171,7 +172,7 @@
context, mHandler.getLooper(), UserHandle.ALL);
try {
Context contextAsUser = mContext.createPackageContextAsUser(mContext.getPackageName(),
- 0, UserHandle.SYSTEM);
+ 0, Flags.supportCarrierServicesForHsum() ? UserHandle.CURRENT : UserHandle.SYSTEM);
contextAsUser.registerReceiver(mUserUnlockedReceiver,
new IntentFilter(Intent.ACTION_USER_UNLOCKED), null /* broadcastPermission */,
mHandler);
diff --git a/src/java/com/android/internal/telephony/Connection.java b/src/java/com/android/internal/telephony/Connection.java
index 82b4c2b8e..7a1c8fe 100644
--- a/src/java/com/android/internal/telephony/Connection.java
+++ b/src/java/com/android/internal/telephony/Connection.java
@@ -692,8 +692,18 @@
&& mEmergencyNumberInfo.getEmergencyCallRouting()
!= EmergencyNumber.EMERGENCY_CALL_ROUTING_EMERGENCY) {
int eccCategory = dialArgs.intentExtras.getInt(
- PhoneConstants.EXTRA_EMERGENCY_SERVICE_CATEGORY,
- mEmergencyNumberInfo.getEmergencyServiceCategoryBitmask());
+ PhoneConstants.EXTRA_EMERGENCY_SERVICE_CATEGORY,
+ mEmergencyNumberInfo.getEmergencyServiceCategoryBitmask());
+ // According to 3gpp 23.167 section 7.1.2, when CS domain is selected,
+ // emergency routing is performed only if the emergency category is provided.
+ if (this instanceof GsmCdmaConnection
+ && dialArgs.intentExtras.getInt(
+ PhoneConstants.EXTRA_EMERGENCY_SERVICE_CATEGORY,
+ EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED)
+ == EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED) {
+ Rlog.d(TAG, "setEmergencyCallInfo: specific eccCategory is required");
+ return;
+ }
Rlog.d(TAG, "setEmergencyCallInfo: enforce emergency routing eccCategory="
+ eccCategory);
List<String> emergencyUrns = dialArgs.intentExtras.getStringArrayList(
@@ -706,13 +716,32 @@
mEmergencyNumberInfo.getMnc(),
eccCategory,
emergencyUrns,
- mEmergencyNumberInfo.getEmergencyNumberSourceBitmask(),
+ getEmergencyNumberSourceForEmergencyRouting(),
EmergencyNumber.EMERGENCY_CALL_ROUTING_EMERGENCY);
}
}
}
/**
+ * Get the emergency number source to be used for emergency routing calls.
+ * This is not getting actual source, instead its forcing the source to
+ * EMERGENCY_NUMBER_SOURCE_NETWORK_SIGNALING.
+ * Even when the source is EMERGENCY_NUMBER_SOURCE_DATABASE,
+ * to allow the category information delivered by the network to be used,
+ * the source is set to EMERGENCY_NUMBER_SOURCE_NETWORK_SIGNALING.
+ */
+ private int getEmergencyNumberSourceForEmergencyRouting() {
+ int source = mEmergencyNumberInfo.getEmergencyNumberSourceBitmask();
+ Rlog.d(TAG, "getEmergencyNumberSourceForEmergencyRouting: source=" + source);
+
+ if (source != EmergencyNumber.EMERGENCY_NUMBER_SOURCE_TEST) {
+ source = EmergencyNumber.EMERGENCY_NUMBER_SOURCE_NETWORK_SIGNALING;
+ }
+
+ return source;
+ }
+
+ /**
* Set the non-detectable emergency number information.
*/
public void setNonDetectableEmergencyCallInfo(int eccCategory,
diff --git a/src/java/com/android/internal/telephony/GsmCdmaConnection.java b/src/java/com/android/internal/telephony/GsmCdmaConnection.java
index cc07047..d96663a 100644
--- a/src/java/com/android/internal/telephony/GsmCdmaConnection.java
+++ b/src/java/com/android/internal/telephony/GsmCdmaConnection.java
@@ -30,6 +30,7 @@
import android.telephony.DisconnectCause;
import android.telephony.PhoneNumberUtils;
import android.telephony.ServiceState;
+import android.telephony.emergency.EmergencyNumber;
import android.text.TextUtils;
import com.android.internal.telephony.PhoneInternalInterface.DialArgs;
@@ -186,7 +187,7 @@
mAddress = PhoneNumberUtils.extractNetworkPortionAlt(dialString);
if (dialArgs.isEmergency) {
- setEmergencyCallInfo(mOwner, null);
+ setEmergencyCallInfo(mOwner, dialArgs);
// There was no emergency number info found for this call, however it is
// still marked as an emergency number. This may happen if it was a redialed
diff --git a/src/java/com/android/internal/telephony/GsmCdmaPhone.java b/src/java/com/android/internal/telephony/GsmCdmaPhone.java
index 94a0a94..5d59327 100644
--- a/src/java/com/android/internal/telephony/GsmCdmaPhone.java
+++ b/src/java/com/android/internal/telephony/GsmCdmaPhone.java
@@ -391,7 +391,8 @@
mCarrierResolver = mTelephonyComponentFactory.inject(CarrierResolver.class.getName())
.makeCarrierResolver(this, featureFlags);
- mCarrierPrivilegesTracker = new CarrierPrivilegesTracker(Looper.myLooper(), this, context);
+ mCarrierPrivilegesTracker = new CarrierPrivilegesTracker(Looper.myLooper(), this, context,
+ featureFlags);
getCarrierActionAgent().registerForCarrierAction(
CarrierActionAgent.CARRIER_ACTION_SET_METERED_APNS_ENABLED, this,
diff --git a/src/java/com/android/internal/telephony/InboundSmsHandler.java b/src/java/com/android/internal/telephony/InboundSmsHandler.java
index c7c05bc..ca03f5d 100644
--- a/src/java/com/android/internal/telephony/InboundSmsHandler.java
+++ b/src/java/com/android/internal/telephony/InboundSmsHandler.java
@@ -75,6 +75,7 @@
import com.android.internal.telephony.analytics.TelephonyAnalytics;
import com.android.internal.telephony.analytics.TelephonyAnalytics.SmsMmsAnalytics;
import com.android.internal.telephony.flags.FeatureFlags;
+import com.android.internal.telephony.flags.Flags;
import com.android.internal.telephony.metrics.TelephonyMetrics;
import com.android.internal.telephony.satellite.metrics.CarrierRoamingSatelliteSessionStats;
import com.android.internal.telephony.util.NotificationChannelController;
@@ -2153,10 +2154,13 @@
// TODO(b/355049884): This is looking at sms package of the wrong user!
UserManager userManager =
(UserManager) context.getSystemService(Context.USER_SERVICE);
+ PackageManager pm = context.getPackageManager();
+ if (Flags.hsumPackageManager()) {
+ pm = context.createContextAsUser(UserHandle.CURRENT, 0).getPackageManager();
+ }
if (userManager.isUserUnlocked()) {
- context.startActivityAsUser(context.getPackageManager()
- .getLaunchIntentForPackage(Telephony.Sms.getDefaultSmsPackage(context)),
- UserHandle.CURRENT);
+ context.startActivityAsUser(pm.getLaunchIntentForPackage(
+ Telephony.Sms.getDefaultSmsPackage(context)), UserHandle.CURRENT);
}
}
}
diff --git a/src/java/com/android/internal/telephony/Phone.java b/src/java/com/android/internal/telephony/Phone.java
index 2bbcc99..69b19aa 100644
--- a/src/java/com/android/internal/telephony/Phone.java
+++ b/src/java/com/android/internal/telephony/Phone.java
@@ -898,6 +898,8 @@
Rlog.e(mLogTag, "Invalid Exception for usage setting " + ar.exception);
break; // technically extraneous, but good hygiene
}
+ } else {
+ mUsageSettingFromModem = msg.arg1;
}
break;
default:
@@ -4484,7 +4486,8 @@
mCi.getUsageSetting(obtainMessage(EVENT_GET_USAGE_SETTING_DONE));
// If the modem value is already known, and the value has changed, proceed to update.
} else if (mPreferredUsageSetting != mUsageSettingFromModem) {
- mCi.setUsageSetting(obtainMessage(EVENT_SET_USAGE_SETTING_DONE),
+ mCi.setUsageSetting(obtainMessage(EVENT_SET_USAGE_SETTING_DONE,
+ mPreferredUsageSetting, 0 /* unused */),
mPreferredUsageSetting);
}
return true;
diff --git a/src/java/com/android/internal/telephony/PhoneSubInfoController.java b/src/java/com/android/internal/telephony/PhoneSubInfoController.java
index 073e242..7ee3de2 100644
--- a/src/java/com/android/internal/telephony/PhoneSubInfoController.java
+++ b/src/java/com/android/internal/telephony/PhoneSubInfoController.java
@@ -785,9 +785,16 @@
*/
@Nullable
private String getCurrentPackageName() {
+ if (mFeatureFlags.hsumPackageManager()) {
+ PackageManager pm = mContext.createContextAsUser(Binder.getCallingUserHandle(), 0)
+ .getPackageManager();
+ if (pm == null) return null;
+ String[] callingPackageNames = pm.getPackagesForUid(Binder.getCallingUid());
+ return (callingPackageNames == null) ? null : callingPackageNames[0];
+ }
if (mPackageManager == null) return null;
- String[] callingUids = mPackageManager.getPackagesForUid(Binder.getCallingUid());
- return (callingUids == null) ? null : callingUids[0];
+ String[] callingPackageNames = mPackageManager.getPackagesForUid(Binder.getCallingUid());
+ return (callingPackageNames == null) ? null : callingPackageNames[0];
}
/**
diff --git a/src/java/com/android/internal/telephony/SmsController.java b/src/java/com/android/internal/telephony/SmsController.java
index 1295f38..e3c409d 100644
--- a/src/java/com/android/internal/telephony/SmsController.java
+++ b/src/java/com/android/internal/telephony/SmsController.java
@@ -224,7 +224,15 @@
}
}
+ @NonNull
private String getCallingPackage() {
+ if (mFlags.hsumPackageManager()) {
+ PackageManager pm = mContext.createContextAsUser(Binder.getCallingUserHandle(), 0)
+ .getPackageManager();
+ String[] packages = pm.getPackagesForUid(Binder.getCallingUid());
+ if (packages == null || packages.length == 0) return "";
+ return packages[0];
+ }
return mContext.getPackageManager().getPackagesForUid(Binder.getCallingUid())[0];
}
@@ -412,9 +420,7 @@
boolean persistMessageForNonDefaultSmsApp, long messageId) {
// This is different from the checking of other method. It prefers the package name
// returned by getCallPackage() for backward-compatibility.
- if (getCallingPackage() != null) {
- callingPackage = getCallingPackage();
- }
+ callingPackage = getCallingPackage();
UserHandle callingUser = Binder.getCallingUserHandle();
Rlog.d(LOG_TAG, "sendMultipartTextForSubscriber caller=" + callingPackage);
diff --git a/src/java/com/android/internal/telephony/satellite/SatelliteController.java b/src/java/com/android/internal/telephony/satellite/SatelliteController.java
index e3063dd..8ae6cf4 100644
--- a/src/java/com/android/internal/telephony/satellite/SatelliteController.java
+++ b/src/java/com/android/internal/telephony/satellite/SatelliteController.java
@@ -2271,12 +2271,6 @@
public void stopSatelliteTransmissionUpdates(@NonNull IIntegerConsumer errorCallback,
@NonNull ISatelliteTransmissionUpdateCallback callback) {
Consumer<Integer> result = FunctionalUtils.ignoreRemoteException(errorCallback::accept);
- int error = evaluateOemSatelliteRequestAllowed(true);
- if (error != SATELLITE_RESULT_SUCCESS) {
- result.accept(error);
- return;
- }
-
mPointingAppController.unregisterForSatelliteTransmissionUpdates(
getHighestPrioritySubscrption(), result, callback);
@@ -2780,7 +2774,7 @@
@NonNull INtnSignalStrengthCallback callback) throws RemoteException {
if (DBG) plogd("registerForNtnSignalStrengthChanged()");
- int error = evaluateOemSatelliteRequestAllowed(true);
+ int error = evaluateOemSatelliteRequestAllowed(false);
if (error == SATELLITE_RESULT_SUCCESS) {
mNtnSignalStrengthChangedListeners.put(callback.asBinder(), callback);
synchronized (mNtnSignalsStrengthLock) {
@@ -2808,11 +2802,7 @@
public void unregisterForNtnSignalStrengthChanged(
@NonNull INtnSignalStrengthCallback callback) {
if (DBG) plogd("unregisterForNtnSignalStrengthChanged()");
-
- int error = evaluateOemSatelliteRequestAllowed(true);
- if (error == SATELLITE_RESULT_SUCCESS) {
- mNtnSignalStrengthChangedListeners.remove(callback.asBinder());
- }
+ mNtnSignalStrengthChangedListeners.remove(callback.asBinder());
}
/**
@@ -2826,7 +2816,7 @@
@NonNull ISatelliteCapabilitiesCallback callback) {
if (DBG) plogd("registerForCapabilitiesChanged()");
- int error = evaluateOemSatelliteRequestAllowed(true);
+ int error = evaluateOemSatelliteRequestAllowed(false);
if (error != SATELLITE_RESULT_SUCCESS) return error;
mSatelliteCapabilitiesChangedListeners.put(callback.asBinder(), callback);
@@ -2844,11 +2834,7 @@
public void unregisterForCapabilitiesChanged(
@NonNull ISatelliteCapabilitiesCallback callback) {
if (DBG) plogd("unregisterForCapabilitiesChanged()");
-
- int error = evaluateOemSatelliteRequestAllowed(true);
- if (error == SATELLITE_RESULT_SUCCESS) {
- mSatelliteCapabilitiesChangedListeners.remove(callback.asBinder());
- }
+ mSatelliteCapabilitiesChangedListeners.remove(callback.asBinder());
}
/**
diff --git a/src/java/com/android/internal/telephony/satellite/SatelliteSOSMessageRecommender.java b/src/java/com/android/internal/telephony/satellite/SatelliteSOSMessageRecommender.java
index c4babcb..cca973f 100644
--- a/src/java/com/android/internal/telephony/satellite/SatelliteSOSMessageRecommender.java
+++ b/src/java/com/android/internal/telephony/satellite/SatelliteSOSMessageRecommender.java
@@ -124,6 +124,8 @@
@Nullable private PersistentLogger mPersistentLogger = null;
+ private boolean mIsTestEmergencyNumber = false;
+
/**
* Create an instance of SatelliteSOSMessageRecommender.
*
@@ -213,11 +215,13 @@
* @param connection The connection created by TelephonyConnectionService for the emergency
* call.
*/
- public void onEmergencyCallStarted(@NonNull Connection connection) {
+ public void onEmergencyCallStarted(@NonNull Connection connection,
+ boolean isTestEmergencyNumber) {
if (!isSatelliteSupported()) {
plogd("onEmergencyCallStarted: satellite is not supported");
return;
}
+ mIsTestEmergencyNumber = isTestEmergencyNumber;
if (hasMessages(EVENT_EMERGENCY_CALL_STARTED)) {
logd("onEmergencyCallStarted: Ignoring due to ongoing event:");
@@ -259,6 +263,7 @@
}
private void handleEmergencyCallStartedEvent(@NonNull Connection connection) {
+ plogd("handleEmergencyCallStartedEvent: connection=" + connection);
mSatelliteController.setLastEmergencyCallTime();
if (sendEventDisplayEmergencyMessageForcefully(connection)) {
@@ -316,10 +321,12 @@
boolean isCellularAvailable = SatelliteServiceUtils.isCellularAvailable();
if (!isCellularAvailable
&& isSatelliteAllowed()
- && (isSatelliteViaOemAvailable() || isSatelliteViaCarrierAvailable())
+ && (isSatelliteViaOemAvailable()
+ || isSatelliteConnectedViaCarrierWithinHysteresisTime())
&& shouldTrackCall(mEmergencyConnection.getState())) {
plogd("handleTimeoutEvent: Sent EVENT_DISPLAY_EMERGENCY_MESSAGE to Dialer");
- Bundle extras = createExtraBundleForEventDisplayEmergencyMessage();
+ Bundle extras = createExtraBundleForEventDisplayEmergencyMessage(
+ mIsTestEmergencyNumber);
mEmergencyConnection.sendConnectionEvent(
TelephonyManager.EVENT_DISPLAY_EMERGENCY_MESSAGE, extras);
isDialerNotified = true;
@@ -336,7 +343,7 @@
private boolean isSatelliteAllowed() {
synchronized (mLock) {
- if (isSatelliteViaCarrierAvailable()) return true;
+ if (isSatelliteConnectedViaCarrierWithinHysteresisTime()) return true;
return mIsSatelliteAllowedForCurrentLocation;
}
}
@@ -358,7 +365,7 @@
return satelliteProvisioned != null ? satelliteProvisioned : false;
}
- private boolean isSatelliteViaCarrierAvailable() {
+ private boolean isSatelliteConnectedViaCarrierWithinHysteresisTime() {
return mIsSatelliteConnectedViaCarrierWithinHysteresisTime.get();
}
@@ -413,6 +420,7 @@
}
private void cleanUpResources() {
+ plogd("cleanUpResources");
synchronized (mLock) {
stopTimer();
if (mEmergencyConnection != null) {
@@ -423,6 +431,7 @@
mIsTimerTimedOut = false;
mCheckingAccessRestrictionInProgress = false;
mIsSatelliteAllowedForCurrentLocation = false;
+ mIsTestEmergencyNumber = false;
}
}
@@ -500,7 +509,8 @@
if (!SatelliteServiceUtils.isCellularAvailable() && mEmergencyConnection != null) {
startTimer();
} else {
- logv("handleStateChangedEventForHysteresisTimer stopTimer");
+ plogd("handleStateChangedEventForHysteresisTimer stopTimer, mEmergencyConnection="
+ + mEmergencyConnection);
stopTimer();
}
}
@@ -513,7 +523,7 @@
sendMessageDelayed(obtainMessage(EVENT_TIME_OUT), mTimeoutMillis);
mCountOfTimerStarted++;
mIsTimerTimedOut = false;
- logd("startTimer mCountOfTimerStarted=" + mCountOfTimerStarted);
+ plogd("startTimer mCountOfTimerStarted=" + mCountOfTimerStarted);
}
}
@@ -532,7 +542,7 @@
}
private void selectEmergencyCallWaitForConnectionTimeoutDuration() {
- if (mSatelliteController.isSatelliteEmergencyMessagingSupportedViaCarrier()) {
+ if (isSatelliteConnectedViaCarrierWithinHysteresisTime()) {
mTimeoutMillis =
mSatelliteController.getCarrierEmergencyCallWaitForConnectionTimeoutMillis();
} else {
@@ -581,11 +591,13 @@
@Nullable
private static String getSatelliteEmergencyHandoverIntentActionFromOverlayConfig(
- @NonNull Context context) {
+ @NonNull Context context, boolean isTestEmergencyNumber) {
String action;
try {
- action = context.getResources().getString(
- R.string.config_satellite_emergency_handover_intent_action);
+ int actionIntent = isTestEmergencyNumber
+ ? R.string.config_satellite_test_with_esp_replies_intent_action
+ : R.string.config_satellite_emergency_handover_intent_action;
+ action = context.getResources().getString(actionIntent);
} catch (Resources.NotFoundException ex) {
loge("getSatelliteEmergencyHandoverIntentFilterActionFromOverlayConfig: ex=" + ex);
action = null;
@@ -631,15 +643,17 @@
return callback;
}
- @NonNull private Bundle createExtraBundleForEventDisplayEmergencyMessage() {
+ @NonNull private Bundle createExtraBundleForEventDisplayEmergencyMessage(
+ boolean isTestEmergencyNumber) {
int handoverType = EMERGENCY_CALL_TO_SATELLITE_HANDOVER_TYPE_SOS;
Pair<String, String> oemSatelliteMessagingApp =
getOemEnabledSatelliteHandoverAppFromOverlayConfig(mContext);
String packageName = oemSatelliteMessagingApp.first;
String className = oemSatelliteMessagingApp.second;
- String action = getSatelliteEmergencyHandoverIntentActionFromOverlayConfig(mContext);
+ String action = getSatelliteEmergencyHandoverIntentActionFromOverlayConfig(mContext,
+ isTestEmergencyNumber);
- if (isSatelliteViaCarrierAvailable()
+ if (isSatelliteConnectedViaCarrierWithinHysteresisTime()
|| isEmergencyCallToSatelliteHandoverTypeT911Enforced()) {
ComponentName defaultSmsAppComponent = getDefaultSmsApp();
handoverType = EMERGENCY_CALL_TO_SATELLITE_HANDOVER_TYPE_T911;
@@ -706,7 +720,8 @@
@NonNull Connection connection) {
plogd("Sent EVENT_DISPLAY_EMERGENCY_MESSAGE to Dialer forcefully.");
mEmergencyConnection = connection;
- Bundle extras = createExtraBundleForEventDisplayEmergencyMessage();
+ Bundle extras = createExtraBundleForEventDisplayEmergencyMessage(
+ /* isTestEmergencyNumber= */ true);
connection.sendConnectionEvent(TelephonyManager.EVENT_DISPLAY_EMERGENCY_MESSAGE, extras);
mEmergencyConnection = null;
}
@@ -723,7 +738,7 @@
@VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE)
public int getEmergencyCallToSatelliteHandoverType() {
if (Flags.carrierRoamingNbIotNtn() && isSatelliteViaOemAvailable()
- && isSatelliteViaCarrierAvailable()) {
+ && isSatelliteConnectedViaCarrierWithinHysteresisTime()) {
Phone satellitePhone = mSatelliteController.getSatellitePhone();
if (satellitePhone == null) {
ploge("getEmergencyCallToSatelliteHandoverType: satellitePhone is null");
@@ -732,7 +747,7 @@
int satelliteSubId = satellitePhone.getSubId();
return mSatelliteController.getCarrierRoamingNtnEmergencyCallToSatelliteHandoverType(
satelliteSubId);
- } else if (isSatelliteViaCarrierAvailable()) {
+ } else if (isSatelliteConnectedViaCarrierWithinHysteresisTime()) {
return EMERGENCY_CALL_TO_SATELLITE_HANDOVER_TYPE_T911;
} else {
return EMERGENCY_CALL_TO_SATELLITE_HANDOVER_TYPE_SOS;
diff --git a/src/java/com/android/internal/telephony/satellite/SatelliteServiceUtils.java b/src/java/com/android/internal/telephony/satellite/SatelliteServiceUtils.java
index 21c5c44..3936a7e 100644
--- a/src/java/com/android/internal/telephony/satellite/SatelliteServiceUtils.java
+++ b/src/java/com/android/internal/telephony/satellite/SatelliteServiceUtils.java
@@ -481,12 +481,12 @@
if ((state == STATE_IN_SERVICE || state == STATE_EMERGENCY_ONLY
|| serviceState.isEmergencyOnly())
&& !isSatellitePlmn(phone.getSubId(), serviceState)) {
- logv("isCellularAvailable true");
+ logd("isCellularAvailable true");
return true;
}
}
}
- logv("isCellularAvailable false");
+ logd("isCellularAvailable false");
return false;
}
diff --git a/src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java b/src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java
index 87d6d27..353493b 100644
--- a/src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java
+++ b/src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java
@@ -4561,6 +4561,10 @@
// Too many packages running with phone uid. Just return one here.
return "com.android.phone";
}
+ if (mFeatureFlags.hsumPackageManager()) {
+ return Arrays.toString(mContext.createContextAsUser(Binder.getCallingUserHandle(), 0)
+ .getPackageManager().getPackagesForUid(Binder.getCallingUid()));
+ }
return Arrays.toString(mContext.getPackageManager().getPackagesForUid(
Binder.getCallingUid()));
}
@@ -4765,9 +4769,16 @@
*/
@Nullable
private String getCurrentPackageName() {
+ if (mFeatureFlags.hsumPackageManager()) {
+ PackageManager pm = mContext.createContextAsUser(Binder.getCallingUserHandle(), 0)
+ .getPackageManager();
+ if (pm == null) return null;
+ String[] callingPackageNames = pm.getPackagesForUid(Binder.getCallingUid());
+ return (callingPackageNames == null) ? null : callingPackageNames[0];
+ }
if (mPackageManager == null) return null;
- String[] callingUids = mPackageManager.getPackagesForUid(Binder.getCallingUid());
- return (callingUids == null) ? null : callingUids[0];
+ String[] callingPackageNames = mPackageManager.getPackagesForUid(Binder.getCallingUid());
+ return (callingPackageNames == null) ? null : callingPackageNames[0];
}
/**
diff --git a/tests/telephonytests/src/com/android/internal/telephony/CarrierPrivilegesTrackerTest.java b/tests/telephonytests/src/com/android/internal/telephony/CarrierPrivilegesTrackerTest.java
index 06b63a2..a860dff 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/CarrierPrivilegesTrackerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/CarrierPrivilegesTrackerTest.java
@@ -52,6 +52,7 @@
import android.net.Uri;
import android.os.PersistableBundle;
import android.os.Process;
+import android.os.UserHandle;
import android.service.carrier.CarrierService;
import android.telephony.CarrierConfigManager;
import android.telephony.TelephonyManager;
@@ -187,9 +188,15 @@
pkg.packageName = pkgCertInfo.pkgName;
pkg.signatures = new Signature[] {new Signature(pkgCertInfo.cert)};
- when(mPackageManager.getPackageInfo(
- eq(pkgCertInfo.pkgName), eq(PM_FLAGS)))
- .thenReturn(pkg);
+ if (mFeatureFlags.supportCarrierServicesForHsum()) {
+ when(mPackageManager.getPackageInfoAsUser(
+ eq(pkgCertInfo.pkgName), eq(PM_FLAGS), anyInt()))
+ .thenReturn(pkg);
+ } else {
+ when(mPackageManager.getPackageInfo(
+ eq(pkgCertInfo.pkgName), eq(PM_FLAGS)))
+ .thenReturn(pkg);
+ }
when(mPackageManager.getPackageUidAsUser(
eq(pkgCertInfo.pkgName), eq(pkgCertInfo.userInfo.id)))
.thenReturn(pkgCertInfo.uid);
@@ -213,8 +220,8 @@
// Capture CarrierConfigChangeListener to emulate the carrier config change notification
ArgumentCaptor<CarrierConfigManager.CarrierConfigChangeListener> listenerArgumentCaptor =
ArgumentCaptor.forClass(CarrierConfigManager.CarrierConfigChangeListener.class);
- CarrierPrivilegesTracker cpt =
- new CarrierPrivilegesTracker(mTestableLooper.getLooper(), mPhone, mContext);
+ CarrierPrivilegesTracker cpt = new CarrierPrivilegesTracker(mTestableLooper.getLooper(),
+ mPhone, mContext, mFeatureFlags);
verify(mCarrierConfigManager).registerCarrierConfigChangeListener(any(),
listenerArgumentCaptor.capture());
mCarrierConfigChangeListener = listenerArgumentCaptor.getAllValues().get(0);
@@ -579,8 +586,14 @@
ResolveInfo pkg1ResolveInfo = new ResolveInfoBuilder().setActivity(PACKAGE_1).build();
ResolveInfo pkg2ResolveInfo = new ResolveInfoBuilder().setActivity(PACKAGE_2).build();
- when(mPackageManager.queryBroadcastReceivers(any(), anyInt())).thenReturn(
- List.of(pkg1ResolveInfo, pkg2ResolveInfo));
+ if (mFeatureFlags.supportCarrierServicesForHsum()) {
+ when(mPackageManager.queryBroadcastReceiversAsUser(any(), anyInt(),
+ anyInt())).thenReturn(
+ List.of(pkg1ResolveInfo, pkg2ResolveInfo));
+ } else {
+ when(mPackageManager.queryBroadcastReceivers(any(), anyInt())).thenReturn(
+ List.of(pkg1ResolveInfo, pkg2ResolveInfo));
+ }
// SIM is READY
sendSimCardStateChangedIntent(PHONE_ID, SIM_STATE_READY);
@@ -712,8 +725,13 @@
// Update PACKAGE_1 to have no signatures
PackageInfo pkg = new PackageInfo();
pkg.packageName = PACKAGE_1;
- when(mPackageManager.getPackageInfo(eq(PACKAGE_1), eq(PM_FLAGS)))
- .thenReturn(pkg);
+ if (mFeatureFlags.supportCarrierServicesForHsum()) {
+ when(mPackageManager.getPackageInfoAsUser(eq(PACKAGE_1), eq(PM_FLAGS), anyInt()))
+ .thenReturn(pkg);
+ } else {
+ when(mPackageManager.getPackageInfo(eq(PACKAGE_1), eq(PM_FLAGS)))
+ .thenReturn(pkg);
+ }
sendPackageChangedIntent(Intent.ACTION_PACKAGE_ADDED, PACKAGE_1);
mTestableLooper.processAllMessages();
@@ -784,19 +802,35 @@
setupInstalledPackages(
new PackageCertInfo(PACKAGE_1, CERT_1, USER_1, UID_1),
new PackageCertInfo(PACKAGE_2, CERT_2, USER_1, UID_2));
- when(mPackageManager.getPackageUid(eq(PACKAGE_1), anyInt())).thenReturn(UID_1);
- when(mPackageManager.getPackageUid(eq(PACKAGE_2), anyInt())).thenReturn(UID_2);
+ if (mFeatureFlags.supportCarrierServicesForHsum()) {
+ when(mPackageManager.getPackageUidAsUser(eq(PACKAGE_1), anyInt())).thenReturn(UID_1);
+ when(mPackageManager.getPackageUidAsUser(eq(PACKAGE_2), anyInt())).thenReturn(UID_2);
+ } else {
+ when(mPackageManager.getPackageUid(eq(PACKAGE_1), anyInt())).thenReturn(UID_1);
+ when(mPackageManager.getPackageUid(eq(PACKAGE_2), anyInt())).thenReturn(UID_2);
+ }
ResolveInfo resolveInfoPkg1 = new ResolveInfoBuilder().setService(PACKAGE_1).build();
- doReturn(List.of(resolveInfoPkg1))
- .when(mPackageManager)
- .queryIntentServices(any(), anyInt());
+ if (mFeatureFlags.supportCarrierServicesForHsum()) {
+ doReturn(List.of(resolveInfoPkg1))
+ .when(mPackageManager)
+ .queryIntentServicesAsUser(any(), anyInt(), anyInt());
+ } else {
+ doReturn(List.of(resolveInfoPkg1))
+ .when(mPackageManager)
+ .queryIntentServices(any(), anyInt());
+ }
mCarrierPrivilegesTracker = createCarrierPrivilegesTracker();
// Package_1 is disabled
when(mPackageManager.getApplicationEnabledSetting(eq(PACKAGE_1))).thenReturn(
PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER);
- doReturn(List.of()).when(
- mPackageManager).queryIntentServices(any(), anyInt());
+ if (mFeatureFlags.supportCarrierServicesForHsum()) {
+ doReturn(List.of()).when(
+ mPackageManager).queryIntentServicesAsUser(any(), anyInt(), anyInt());
+ } else {
+ doReturn(List.of()).when(
+ mPackageManager).queryIntentServices(any(), anyInt());
+ }
sendPackageChangedIntent(Intent.ACTION_PACKAGE_CHANGED, PACKAGE_1);
mTestableLooper.processAllMessages();
@@ -807,8 +841,13 @@
// Package_1 is re-enabled
when(mPackageManager.getApplicationEnabledSetting(eq(PACKAGE_1))).thenReturn(
PackageManager.COMPONENT_ENABLED_STATE_ENABLED);
- doReturn(List.of(resolveInfoPkg1)).when(
- mPackageManager).queryIntentServices(any(), anyInt());
+ if (mFeatureFlags.supportCarrierServicesForHsum()) {
+ doReturn(List.of(resolveInfoPkg1)).when(
+ mPackageManager).queryIntentServicesAsUser(any(), anyInt(), anyInt());
+ } else {
+ doReturn(List.of(resolveInfoPkg1)).when(
+ mPackageManager).queryIntentServices(any(), anyInt());
+ }
sendPackageChangedIntent(Intent.ACTION_PACKAGE_CHANGED, PACKAGE_1);
mTestableLooper.processAllMessages();
@@ -888,24 +927,45 @@
ResolveInfo privilegeBroadcast = new ResolveInfoBuilder().setActivity(PACKAGE_1).build();
ResolveInfo noPrivilegeBroadcast = new ResolveInfoBuilder().setActivity(PACKAGE_2).build();
- when(mPackageManager.queryBroadcastReceivers(any(), anyInt())).thenReturn(
- List.of(privilegeBroadcast, noPrivilegeBroadcast));
+ if (mFeatureFlags.supportCarrierServicesForHsum()) {
+ when(mPackageManager.queryBroadcastReceiversAsUser(any(), anyInt(),
+ anyInt())).thenReturn(
+ List.of(privilegeBroadcast, noPrivilegeBroadcast));
+ } else {
+ when(mPackageManager.queryBroadcastReceivers(any(), anyInt())).thenReturn(
+ List.of(privilegeBroadcast, noPrivilegeBroadcast));
+ }
ResolveInfo privilegeActivity = new ResolveInfoBuilder().setActivity(PACKAGE_3).build();
ResolveInfo noPrivilegeActivity = new ResolveInfoBuilder().setActivity(PACKAGE_4).build();
- when(mPackageManager.queryIntentActivities(any(), anyInt())).thenReturn(
- List.of(privilegeActivity, noPrivilegeActivity));
+ if (mFeatureFlags.supportCarrierServicesForHsum()) {
+ when(mPackageManager.queryIntentActivitiesAsUser(any(), anyInt(), anyInt())).thenReturn(
+ List.of(privilegeActivity, noPrivilegeActivity));
+ } else {
+ when(mPackageManager.queryIntentActivities(any(), anyInt())).thenReturn(
+ List.of(privilegeActivity, noPrivilegeActivity));
+ }
ResolveInfo privilegeService = new ResolveInfoBuilder().setService(PACKAGE_5).build();
ResolveInfo noPrivilegeService = new ResolveInfoBuilder().setService(PACKAGE_6).build();
// Use doReturn instead of when/thenReturn which has NPE with unknown reason
- doReturn(List.of(privilegeService, noPrivilegeService)).when(
- mPackageManager).queryIntentServices(any(), anyInt());
+ if (mFeatureFlags.supportCarrierServicesForHsum()) {
+ doReturn(List.of(privilegeService, noPrivilegeService)).when(
+ mPackageManager).queryIntentServicesAsUser(any(), anyInt(), anyInt());
+ } else {
+ doReturn(List.of(privilegeService, noPrivilegeService)).when(
+ mPackageManager).queryIntentServices(any(), anyInt());
+ }
ResolveInfo privilegeProvider = new ResolveInfoBuilder().setProvider(PACKAGE_7).build();
ResolveInfo noPrivilegeProvider = new ResolveInfoBuilder().setProvider(PACKAGE_8).build();
- when(mPackageManager.queryIntentContentProviders(any(), anyInt())).thenReturn(
- List.of(privilegeProvider, noPrivilegeProvider));
+ if (mFeatureFlags.supportCarrierServicesForHsum()) {
+ when(mPackageManager.queryIntentContentProvidersAsUser(any(), anyInt(), anyInt()))
+ .thenReturn(List.of(privilegeProvider, noPrivilegeProvider));
+ } else {
+ when(mPackageManager.queryIntentContentProviders(any(), anyInt())).thenReturn(
+ List.of(privilegeProvider, noPrivilegeProvider));
+ }
mCarrierPrivilegesTracker = createCarrierPrivilegesTracker();
Intent intent = new Intent(CarrierService.CARRIER_SERVICE_INTERFACE);
@@ -934,11 +994,19 @@
ResolveInfo privilegeService = new ResolveInfoBuilder().setService(PACKAGE_1).build();
ResolveInfo noPrivilegeService = new ResolveInfoBuilder().setService(PACKAGE_2).build();
// Use doReturn instead of when/thenReturn which has NPE with unknown reason
- doReturn(List.of(privilegeService, noPrivilegeService)).when(
- mPackageManager).queryIntentServices(any(), anyInt());
- when(mPackageManager.getPackageUid(eq(PACKAGE_1), anyInt())).thenReturn(UID_1);
- when(mPackageManager.getPackageUid(eq(PACKAGE_2), anyInt())).thenReturn(UID_2);
- when(mPackageManager.getPackageUid(eq(PACKAGE_3), anyInt())).thenReturn(UID_1);
+ if (mFeatureFlags.supportCarrierServicesForHsum()) {
+ doReturn(List.of(privilegeService, noPrivilegeService)).when(
+ mPackageManager).queryIntentServicesAsUser(any(), anyInt(), anyInt());
+ when(mPackageManager.getPackageUidAsUser(eq(PACKAGE_1), anyInt())).thenReturn(UID_1);
+ when(mPackageManager.getPackageUidAsUser(eq(PACKAGE_2), anyInt())).thenReturn(UID_2);
+ when(mPackageManager.getPackageUidAsUser(eq(PACKAGE_3), anyInt())).thenReturn(UID_1);
+ } else {
+ doReturn(List.of(privilegeService, noPrivilegeService)).when(
+ mPackageManager).queryIntentServices(any(), anyInt());
+ when(mPackageManager.getPackageUid(eq(PACKAGE_1), anyInt())).thenReturn(UID_1);
+ when(mPackageManager.getPackageUid(eq(PACKAGE_2), anyInt())).thenReturn(UID_2);
+ when(mPackageManager.getPackageUid(eq(PACKAGE_3), anyInt())).thenReturn(UID_1);
+ }
// Get CS package name for the first time
mCarrierPrivilegesTracker = createCarrierPrivilegesTracker();
@@ -947,7 +1015,11 @@
mTestableLooper.processAllMessages();
// Package manager should be queried from
- verify(mPackageManager).queryIntentServices(any(), anyInt());
+ if (mFeatureFlags.supportCarrierServicesForHsum()) {
+ verify(mPackageManager).queryIntentServicesAsUser(any(), anyInt(), anyInt());
+ } else {
+ verify(mPackageManager).queryIntentServices(any(), anyInt());
+ }
assertEquals(PACKAGE_1, carrierServicePackageName);
assertEquals(UID_1, carrierServiceUid);
@@ -958,7 +1030,11 @@
mTestableLooper.processAllMessages();
// It should return the same result, but didn't query package manager
- verify(mPackageManager, never()).queryIntentServices(any(), anyInt());
+ if (mFeatureFlags.supportCarrierServicesForHsum()) {
+ verify(mPackageManager, never()).queryIntentServicesAsUser(any(), anyInt(), anyInt());
+ } else {
+ verify(mPackageManager, never()).queryIntentServices(any(), anyInt());
+ }
assertEquals(PACKAGE_1, carrierServicePackageName);
assertEquals(UID_1, carrierServiceUid);
}
@@ -978,12 +1054,21 @@
ResolveInfo service1 = new ResolveInfoBuilder().setService(PACKAGE_1).build();
ResolveInfo service2 = new ResolveInfoBuilder().setService(PACKAGE_2).build();
// Use doReturn instead of when/thenReturn which has NPE with unknown reason
- doReturn(List.of(service1, service2))
- .when(mPackageManager)
- .queryIntentServices(any(), anyInt());
- when(mPackageManager.getPackageUid(eq(PACKAGE_1), anyInt())).thenReturn(UID_1);
- when(mPackageManager.getPackageUid(eq(PACKAGE_2), anyInt())).thenReturn(UID_2);
- when(mPackageManager.getPackageUid(eq(PACKAGE_3), anyInt())).thenReturn(UID_1);
+ if (mFeatureFlags.supportCarrierServicesForHsum()) {
+ doReturn(List.of(service1, service2))
+ .when(mPackageManager)
+ .queryIntentServicesAsUser(any(), anyInt(), anyInt());
+ when(mPackageManager.getPackageUidAsUser(eq(PACKAGE_1), anyInt())).thenReturn(UID_1);
+ when(mPackageManager.getPackageUidAsUser(eq(PACKAGE_2), anyInt())).thenReturn(UID_2);
+ when(mPackageManager.getPackageUidAsUser(eq(PACKAGE_3), anyInt())).thenReturn(UID_1);
+ } else {
+ doReturn(List.of(service1, service2))
+ .when(mPackageManager)
+ .queryIntentServices(any(), anyInt());
+ when(mPackageManager.getPackageUid(eq(PACKAGE_1), anyInt())).thenReturn(UID_1);
+ when(mPackageManager.getPackageUid(eq(PACKAGE_2), anyInt())).thenReturn(UID_2);
+ when(mPackageManager.getPackageUid(eq(PACKAGE_3), anyInt())).thenReturn(UID_1);
+ }
// Verify that neither carrier service (no privileges, or carrier-config based privileges)
// are accepted.
@@ -992,7 +1077,11 @@
int carrierServiceUid = mCarrierPrivilegesTracker.getCarrierServicePackageUid();
mTestableLooper.processAllMessages();
- verify(mPackageManager).queryIntentServices(any(), anyInt());
+ if (mFeatureFlags.supportCarrierServicesForHsum()) {
+ verify(mPackageManager).queryIntentServicesAsUser(any(), anyInt(), anyInt());
+ } else {
+ verify(mPackageManager).queryIntentServices(any(), anyInt());
+ }
assertNull(carrierServicePackageName);
assertEquals(Process.INVALID_UID, carrierServiceUid);
}
@@ -1008,11 +1097,19 @@
new PackageCertInfo(PACKAGE_3, CERT_1, USER_1, UID_1));
// No CarrierService declared at all
// Use doReturn instead of when/thenReturn which has NPE with unknown reason
- doReturn(List.of()).when(
- mPackageManager).queryIntentServices(any(), anyInt());
- when(mPackageManager.getPackageUid(eq(PACKAGE_1), anyInt())).thenReturn(UID_1);
- when(mPackageManager.getPackageUid(eq(PACKAGE_2), anyInt())).thenReturn(UID_2);
- when(mPackageManager.getPackageUid(eq(PACKAGE_3), anyInt())).thenReturn(UID_1);
+ if (mFeatureFlags.supportCarrierServicesForHsum()) {
+ doReturn(List.of()).when(
+ mPackageManager).queryIntentServicesAsUser(any(), anyInt(), anyInt());
+ when(mPackageManager.getPackageUidAsUser(eq(PACKAGE_1), anyInt())).thenReturn(UID_1);
+ when(mPackageManager.getPackageUidAsUser(eq(PACKAGE_2), anyInt())).thenReturn(UID_2);
+ when(mPackageManager.getPackageUidAsUser(eq(PACKAGE_3), anyInt())).thenReturn(UID_1);
+ } else {
+ doReturn(List.of()).when(
+ mPackageManager).queryIntentServices(any(), anyInt());
+ when(mPackageManager.getPackageUid(eq(PACKAGE_1), anyInt())).thenReturn(UID_1);
+ when(mPackageManager.getPackageUid(eq(PACKAGE_2), anyInt())).thenReturn(UID_2);
+ when(mPackageManager.getPackageUid(eq(PACKAGE_3), anyInt())).thenReturn(UID_1);
+ }
mCarrierPrivilegesTracker = createCarrierPrivilegesTracker();
String carrierServicePackageName = mCarrierPrivilegesTracker.getCarrierServicePackageName();
@@ -1021,7 +1118,11 @@
assertNull(carrierServicePackageName);
assertEquals(Process.INVALID_UID, carrierServiceUid);
- verify(mPackageManager).queryIntentServices(any(), anyInt());
+ if (mFeatureFlags.supportCarrierServicesForHsum()) {
+ verify(mPackageManager).queryIntentServicesAsUser(any(), anyInt(), anyInt());
+ } else {
+ verify(mPackageManager).queryIntentServices(any(), anyInt());
+ }
}
@Test
@@ -1030,10 +1131,17 @@
setupInstalledPackages(new PackageCertInfo(PACKAGE_1, CERT_1, USER_1, UID_1));
ResolveInfo carrierService = new ResolveInfoBuilder().setService(PACKAGE_1).build();
- doReturn(List.of(carrierService))
- .when(mPackageManager)
- .queryIntentServices(any(), anyInt());
- when(mPackageManager.getPackageUid(eq(PACKAGE_1), anyInt())).thenReturn(UID_1);
+ if (mFeatureFlags.supportCarrierServicesForHsum()) {
+ doReturn(List.of(carrierService))
+ .when(mPackageManager)
+ .queryIntentServicesAsUser(any(), anyInt(), anyInt());
+ when(mPackageManager.getPackageUidAsUser(eq(PACKAGE_1), anyInt())).thenReturn(UID_1);
+ } else {
+ doReturn(List.of(carrierService))
+ .when(mPackageManager)
+ .queryIntentServices(any(), anyInt());
+ when(mPackageManager.getPackageUid(eq(PACKAGE_1), anyInt())).thenReturn(UID_1);
+ }
// Set override, and verify the carrier service package was not set due to a lack of a
// matching cert.
@@ -1056,11 +1164,19 @@
ResolveInfo service1 = new ResolveInfoBuilder().setService(PACKAGE_1).build();
ResolveInfo service2 = new ResolveInfoBuilder().setService(PACKAGE_2).build();
- doReturn(List.of(service1, service2))
- .when(mPackageManager)
- .queryIntentServices(any(), anyInt());
- when(mPackageManager.getPackageUid(eq(PACKAGE_1), anyInt())).thenReturn(UID_1);
- when(mPackageManager.getPackageUid(eq(PACKAGE_2), anyInt())).thenReturn(UID_2);
+ if (mFeatureFlags.supportCarrierServicesForHsum()) {
+ doReturn(List.of(service1, service2))
+ .when(mPackageManager)
+ .queryIntentServicesAsUser(any(), anyInt(), anyInt());
+ when(mPackageManager.getPackageUidAsUser(eq(PACKAGE_1), anyInt())).thenReturn(UID_1);
+ when(mPackageManager.getPackageUidAsUser(eq(PACKAGE_2), anyInt())).thenReturn(UID_2);
+ } else {
+ doReturn(List.of(service1, service2))
+ .when(mPackageManager)
+ .queryIntentServices(any(), anyInt());
+ when(mPackageManager.getPackageUid(eq(PACKAGE_1), anyInt())).thenReturn(UID_1);
+ when(mPackageManager.getPackageUid(eq(PACKAGE_2), anyInt())).thenReturn(UID_2);
+ }
mCarrierPrivilegesTracker = createCarrierPrivilegesTracker();
@@ -1093,10 +1209,17 @@
setupInstalledPackages(new PackageCertInfo(PACKAGE_1, CERT_1, USER_1, UID_1));
ResolveInfo carrierService = new ResolveInfoBuilder().setService(PACKAGE_1).build();
- doReturn(List.of(carrierService))
- .when(mPackageManager)
- .queryIntentServices(any(), anyInt());
- when(mPackageManager.getPackageUid(eq(PACKAGE_1), anyInt())).thenReturn(UID_1);
+ if (mFeatureFlags.supportCarrierServicesForHsum()) {
+ doReturn(List.of(carrierService))
+ .when(mPackageManager)
+ .queryIntentServicesAsUser(any(), anyInt(), anyInt());
+ when(mPackageManager.getPackageUidAsUser(eq(PACKAGE_1), anyInt())).thenReturn(UID_1);
+ } else {
+ doReturn(List.of(carrierService))
+ .when(mPackageManager)
+ .queryIntentServices(any(), anyInt());
+ when(mPackageManager.getPackageUid(eq(PACKAGE_1), anyInt())).thenReturn(UID_1);
+ }
// Set override, and expect that an invalid package name would not be selected as the
// carrier config service.
@@ -1114,21 +1237,40 @@
}
private void sendSimCardStateChangedIntent(int phoneId, int simState) {
- mContext.sendBroadcast(
- new Intent(TelephonyManager.ACTION_SIM_CARD_STATE_CHANGED)
- .putExtra(EXTRA_SIM_STATE, simState)
- .putExtra(PhoneConstants.PHONE_KEY, phoneId));
+ if (mFeatureFlags.supportCarrierServicesForHsum()) {
+ mContext.sendBroadcastAsUser(
+ new Intent(TelephonyManager.ACTION_SIM_CARD_STATE_CHANGED)
+ .putExtra(EXTRA_SIM_STATE, simState)
+ .putExtra(PhoneConstants.PHONE_KEY, phoneId), UserHandle.ALL);
+ } else {
+ mContext.sendBroadcast(
+ new Intent(TelephonyManager.ACTION_SIM_CARD_STATE_CHANGED)
+ .putExtra(EXTRA_SIM_STATE, simState)
+ .putExtra(PhoneConstants.PHONE_KEY, phoneId));
+ }
}
private void sendSimApplicationStateChangedIntent(int phoneId, int simState) {
- mContext.sendBroadcast(
- new Intent(TelephonyManager.ACTION_SIM_APPLICATION_STATE_CHANGED)
- .putExtra(EXTRA_SIM_STATE, simState)
- .putExtra(PhoneConstants.PHONE_KEY, phoneId));
+ if (mFeatureFlags.supportCarrierServicesForHsum()) {
+ mContext.sendBroadcastAsUser(
+ new Intent(TelephonyManager.ACTION_SIM_APPLICATION_STATE_CHANGED)
+ .putExtra(EXTRA_SIM_STATE, simState)
+ .putExtra(PhoneConstants.PHONE_KEY, phoneId), UserHandle.ALL);
+ } else {
+ mContext.sendBroadcast(
+ new Intent(TelephonyManager.ACTION_SIM_APPLICATION_STATE_CHANGED)
+ .putExtra(EXTRA_SIM_STATE, simState)
+ .putExtra(PhoneConstants.PHONE_KEY, phoneId));
+ }
}
private void sendPackageChangedIntent(String action, String pkgName) {
- mContext.sendBroadcast(new Intent(action, new Uri.Builder().path(pkgName).build()));
+ if (mFeatureFlags.supportCarrierServicesForHsum()) {
+ mContext.sendBroadcastAsUser(
+ new Intent(action, new Uri.Builder().path(pkgName).build()), UserHandle.ALL);
+ } else {
+ mContext.sendBroadcast(new Intent(action, new Uri.Builder().path(pkgName).build()));
+ }
}
/** Returns the SHA-1 hash (as a hex String) for the given hex String. */
diff --git a/tests/telephonytests/src/com/android/internal/telephony/GsmCdmaConnectionTest.java b/tests/telephonytests/src/com/android/internal/telephony/GsmCdmaConnectionTest.java
index 45f8c12..e56ac90 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/GsmCdmaConnectionTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/GsmCdmaConnectionTest.java
@@ -21,10 +21,12 @@
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
+import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.telephony.DisconnectCause;
import android.telephony.PhoneNumberUtils;
+import android.telephony.emergency.EmergencyNumber;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
@@ -313,4 +315,52 @@
assertEquals(DisconnectCause.OUT_OF_SERVICE,
connection.disconnectCauseFromCode(CallFailCause.LOCAL_SERVICE_UNAVAILABLE));
}
+
+ @Test
+ public void testUpdateEmergencyRouting() {
+ Bundle extras = new Bundle();
+ extras.putBoolean(PhoneConstants.EXTRA_USE_EMERGENCY_ROUTING, true);
+
+ DialArgs dialArgs = new DialArgs.Builder()
+ .setIsEmergency(true)
+ .setIntentExtras(extras)
+ .build();
+
+ doReturn(true).when(mDomainSelectionResolver).isDomainSelectionSupported();
+
+ connection = new GsmCdmaConnection(mPhone, "911", mCT, null, dialArgs);
+ // Not updated when category is unset.
+ assertEquals(getTestEmergencyNumber(), connection.getEmergencyNumberInfo());
+
+ extras.putInt(PhoneConstants.EXTRA_EMERGENCY_SERVICE_CATEGORY,
+ EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED);
+
+ dialArgs = new DialArgs.Builder()
+ .setIsEmergency(true)
+ .setIntentExtras(extras)
+ .build();
+
+ connection = new GsmCdmaConnection(mPhone, "911", mCT, null, dialArgs);
+ // Not updated when category is EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED.
+ assertEquals(getTestEmergencyNumber(), connection.getEmergencyNumberInfo());
+
+ extras.putInt(PhoneConstants.EXTRA_EMERGENCY_SERVICE_CATEGORY,
+ EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_POLICE);
+
+ dialArgs = new DialArgs.Builder()
+ .setIsEmergency(true)
+ .setIntentExtras(extras)
+ .build();
+
+ connection = new GsmCdmaConnection(mPhone, "911", mCT, null, dialArgs);
+
+ EmergencyNumber expectedNumber = new EmergencyNumber("911", "us", "30",
+ EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_POLICE,
+ new ArrayList<String>(), EmergencyNumber.EMERGENCY_NUMBER_SOURCE_NETWORK_SIGNALING,
+ EmergencyNumber.EMERGENCY_CALL_ROUTING_EMERGENCY);
+
+ // Updated when category is not EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED.
+ assertNotEquals(getTestEmergencyNumber(), connection.getEmergencyNumberInfo());
+ assertEquals(expectedNumber, connection.getEmergencyNumberInfo());
+ }
}
diff --git a/tests/telephonytests/src/com/android/internal/telephony/GsmCdmaPhoneTest.java b/tests/telephonytests/src/com/android/internal/telephony/GsmCdmaPhoneTest.java
index ba08f8b..7735c97 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/GsmCdmaPhoneTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/GsmCdmaPhoneTest.java
@@ -2018,6 +2018,42 @@
@Test
@SmallTest
+ public void testUsageSettingUpdate_ResetToDefault() {
+ setupUsageSettingResources();
+ mPhoneUT.mCi = mMockCi;
+
+ SubscriptionInfoInternal si = makeSubscriptionInfoInternal(
+ false, SubscriptionManager.USAGE_SETTING_DATA_CENTRIC);
+ doReturn(si).when(mSubscriptionManagerService).getSubscriptionInfoInternal(anyInt());
+
+ mPhoneUT.updateUsageSetting();
+ processAllMessages();
+
+ verify(mMockCi).getUsageSetting(any());
+ mPhoneUT.sendMessage(mPhoneUT.obtainMessage(GsmCdmaPhone.EVENT_GET_USAGE_SETTING_DONE,
+ new AsyncResult(null,
+ new int[]{SubscriptionManager.USAGE_SETTING_VOICE_CENTRIC}, null)));
+ processAllMessages();
+
+ // Grab the message to ensure it returns the preferred value for updating the cache
+ ArgumentCaptor<Message> messageCaptor = ArgumentCaptor.forClass(Message.class);
+ verify(mMockCi).setUsageSetting(
+ messageCaptor.capture(), eq(SubscriptionManager.USAGE_SETTING_DATA_CENTRIC));
+ AsyncResult.forMessage(messageCaptor.getValue());
+ messageCaptor.getValue().sendToTarget();
+ processAllMessages();
+
+ si = makeSubscriptionInfoInternal(false, SubscriptionManager.USAGE_SETTING_VOICE_CENTRIC);
+ doReturn(si).when(mSubscriptionManagerService).getSubscriptionInfoInternal(anyInt());
+
+ mPhoneUT.updateUsageSetting();
+ processAllMessages();
+
+ verify(mMockCi).setUsageSetting(any(), eq(SubscriptionManager.USAGE_SETTING_VOICE_CENTRIC));
+ }
+
+ @Test
+ @SmallTest
public void testUsageSettingUpdate_DefaultOpportunistic() {
setupUsageSettingResources();
mPhoneUT.mCi = mMockCi;
diff --git a/tests/telephonytests/src/com/android/internal/telephony/TelephonyTest.java b/tests/telephonytests/src/com/android/internal/telephony/TelephonyTest.java
index dd4d63a..d80c9a2 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/TelephonyTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/TelephonyTest.java
@@ -582,6 +582,7 @@
doReturn(true).when(mFeatureFlags).minimalTelephonyCdmCheck();
doReturn(true).when(mFeatureFlags).supportNetworkProvider();
doReturn(true).when(mFeatureFlags).hsumBroadcast();
+ doReturn(true).when(mFeatureFlags).hsumPackageManager();
TelephonyManager.disableServiceHandleCaching();
PropertyInvalidatedCache.disableForTestMode();
diff --git a/tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteControllerTest.java b/tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteControllerTest.java
index 462c393..db46a00 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteControllerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteControllerTest.java
@@ -1471,49 +1471,6 @@
@Test
public void testStopSatelliteTransmissionUpdates() {
- mIIntegerConsumerSemaphore.drainPermits();
- mIIntegerConsumerResults.clear();
- mSatelliteControllerUT.stopSatelliteTransmissionUpdates(mIIntegerConsumer,
- mStopTransmissionUpdateCallback);
- processAllMessages();
- assertTrue(waitForIIntegerConsumerResult(1));
- assertEquals(SATELLITE_RESULT_INVALID_TELEPHONY_STATE,
- (long) mIIntegerConsumerResults.get(0));
-
- mIIntegerConsumerResults.clear();
- setUpResponseForRequestIsSatelliteSupported(false, SATELLITE_RESULT_SUCCESS);
- verifySatelliteSupported(false, SATELLITE_RESULT_SUCCESS);
- mSatelliteControllerUT.stopSatelliteTransmissionUpdates(mIIntegerConsumer,
- mStopTransmissionUpdateCallback);
- processAllMessages();
- assertTrue(waitForIIntegerConsumerResult(1));
- assertEquals(SATELLITE_RESULT_NOT_SUPPORTED, (long) mIIntegerConsumerResults.get(0));
-
- resetSatelliteControllerUT();
- mIIntegerConsumerResults.clear();
- setUpResponseForRequestIsSatelliteSupported(true, SATELLITE_RESULT_SUCCESS);
- verifySatelliteSupported(true, SATELLITE_RESULT_SUCCESS);
- mSatelliteControllerUT.stopSatelliteTransmissionUpdates(mIIntegerConsumer,
- mStopTransmissionUpdateCallback);
- processAllMessages();
- assertTrue(waitForIIntegerConsumerResult(1));
- assertEquals(SATELLITE_RESULT_SERVICE_NOT_PROVISIONED,
- (long) mIIntegerConsumerResults.get(0));
-
- resetSatelliteControllerUT();
- mIIntegerConsumerResults.clear();
- setUpResponseForRequestIsSatelliteSupported(true, SATELLITE_RESULT_SUCCESS);
- setUpResponseForRequestIsSatelliteProvisioned(false, SATELLITE_RESULT_SUCCESS);
- verifySatelliteSupported(true, SATELLITE_RESULT_SUCCESS);
- verifySatelliteProvisioned(false, SATELLITE_RESULT_SUCCESS);
- setUpResponseForStopSatelliteTransmissionUpdates(SATELLITE_RESULT_SUCCESS);
- mSatelliteControllerUT.stopSatelliteTransmissionUpdates(mIIntegerConsumer,
- mStopTransmissionUpdateCallback);
- processAllMessages();
- assertTrue(waitForIIntegerConsumerResult(1));
- assertEquals(SATELLITE_RESULT_SERVICE_NOT_PROVISIONED,
- (long) mIIntegerConsumerResults.get(0));
-
resetSatelliteControllerUT();
mIIntegerConsumerResults.clear();
provisionSatelliteService();
@@ -1533,7 +1490,11 @@
setUpResponseForStopSatelliteTransmissionUpdates(SATELLITE_RESULT_INVALID_TELEPHONY_STATE);
mSatelliteControllerUT.stopSatelliteTransmissionUpdates(mIIntegerConsumer,
mStopTransmissionUpdateCallback);
+ verify(mMockPointingAppController, times(2)).unregisterForSatelliteTransmissionUpdates(
+ anyInt(), any(), eq(mStopTransmissionUpdateCallback));
processAllMessages();
+ verify(mMockPointingAppController, times(2)).stopSatelliteTransmissionUpdates(
+ any(Message.class));
assertTrue(waitForIIntegerConsumerResult(1));
assertEquals(SATELLITE_RESULT_INVALID_TELEPHONY_STATE,
(long) mIIntegerConsumerResults.get(0));
diff --git a/tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteSOSMessageRecommenderTest.java b/tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteSOSMessageRecommenderTest.java
index 4cb8a03..230a9b1 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteSOSMessageRecommenderTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteSOSMessageRecommenderTest.java
@@ -204,7 +204,7 @@
when(mServiceState.getState()).thenReturn(STATE_OUT_OF_SERVICE);
when(mServiceState2.getState()).thenReturn(STATE_OUT_OF_SERVICE);
mTestSOSMessageRecommender.isSatelliteAllowedCallback = null;
- mTestSOSMessageRecommender.onEmergencyCallStarted(null);
+ mTestSOSMessageRecommender.onEmergencyCallStarted(null, false);
processAllMessages();
assertFalse(mTestSOSMessageRecommender.isTimerStarted());
assertEquals(0, mTestSOSMessageRecommender.getCountOfTimerStarted());
@@ -213,7 +213,7 @@
private void testTimeoutBeforeEmergencyCallEnd(int expectedHandoverType,
String expectedPackageName, String expectedClassName, String expectedAction) {
mTestSOSMessageRecommender.isSatelliteAllowedCallback = null;
- mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection);
+ mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection, false);
processAllMessages();
assertEquals(1, mTestSOSMessageRecommender.getCountOfTimerStarted());
assertRegisterForStateChangedEventsTriggered(mPhone, 1, 1);
@@ -246,7 +246,7 @@
mTestSatelliteController.setSatelliteConnectedViaCarrierWithinHysteresisTime(false);
mTestSatelliteController.setIsSatelliteViaOemProvisioned(false);
mTestSOSMessageRecommender.isSatelliteAllowedCallback = null;
- mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection);
+ mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection, false);
processAllMessages();
assertEquals(1, mTestSOSMessageRecommender.getCountOfTimerStarted());
assertRegisterForStateChangedEventsTriggered(mPhone, 1, 1);
@@ -273,7 +273,7 @@
mTestSOSMessageRecommender.isSatelliteAllowedCallback = null;
mTestSatelliteController.setSatelliteConnectedViaCarrierWithinHysteresisTime(false);
mTestSatelliteController.isOemEnabledSatelliteSupported = false;
- mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection);
+ mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection, false);
processAllMessages();
assertEquals(1, mTestSOSMessageRecommender.getCountOfTimerStarted());
assertRegisterForStateChangedEventsTriggered(mPhone, 1, 1);
@@ -312,7 +312,7 @@
@Test
public void testNetworkStateChangedBeforeTimeout() {
mTestSOSMessageRecommender.isSatelliteAllowedCallback = null;
- mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection);
+ mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection, false);
processAllMessages();
assertTrue(mTestSOSMessageRecommender.isTimerStarted());
assertEquals(1, mTestSOSMessageRecommender.getCountOfTimerStarted());
@@ -341,7 +341,7 @@
@Test
public void testSatelliteProvisionStateChangedBeforeTimeout() {
- mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection);
+ mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection, false);
processAllMessages();
assertTrue(mTestSOSMessageRecommender.isTimerStarted());
@@ -358,7 +358,7 @@
assertUnregisterForStateChangedEventsTriggered(mPhone, 1, 1);
assertUnregisterForStateChangedEventsTriggered(mPhone2, 1, 1);
- mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection);
+ mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection, false);
processAllMessages();
assertTrue(mTestSOSMessageRecommender.isTimerStarted());
assertEquals(1, mTestSOSMessageRecommender.getCountOfTimerStarted());
@@ -392,7 +392,7 @@
@Test
public void testEmergencyCallRedialBeforeTimeout() {
mTestSOSMessageRecommender.isSatelliteAllowedCallback = null;
- mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection);
+ mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection, false);
processAllMessages();
assertTrue(mTestSOSMessageRecommender.isTimerStarted());
assertEquals(1, mTestSOSMessageRecommender.getCountOfTimerStarted());
@@ -400,7 +400,7 @@
assertRegisterForStateChangedEventsTriggered(mPhone2, 1, 1);
assertNull(mTestSOSMessageRecommender.isSatelliteAllowedCallback);
- mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection);
+ mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection, false);
processAllMessages();
assertNull(mTestSOSMessageRecommender.isSatelliteAllowedCallback);
assertTrue(mTestSOSMessageRecommender.isTimerStarted());
@@ -454,7 +454,7 @@
@Test
public void testOnEmergencyCallConnectionStateChangedWithWrongCallId() {
- mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection);
+ mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection, false);
processAllMessages();
assertTrue(mTestSOSMessageRecommender.isTimerStarted());
@@ -476,7 +476,7 @@
@Test
public void testSatelliteNotAllowedInCurrentLocation() {
mTestSOSMessageRecommender.isSatelliteAllowedCallback = null;
- mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection);
+ mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection, false);
processAllMessages();
assertNull(mTestSOSMessageRecommender.isSatelliteAllowedCallback);
assertTrue(mTestSOSMessageRecommender.isTimerStarted());
@@ -508,7 +508,7 @@
mContext,
Looper.myLooper(),
satelliteController, mTestImsManager);
- testSOSMessageRecommender.onEmergencyCallStarted(mTestConnection);
+ testSOSMessageRecommender.onEmergencyCallStarted(mTestConnection, false);
processAllMessages();
assertFalse(testSOSMessageRecommender.isTimerStarted());
@@ -538,23 +538,36 @@
// Both OEM and carrier don't support satellite
mTestSatelliteController.isSatelliteEmergencyMessagingSupportedViaCarrier = false;
mTestSatelliteController.isOemEnabledSatelliteSupported = false;
- mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection);
+ mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection, false);
processAllMessages();
assertEquals(0, mTestSOSMessageRecommender.getTimeOutMillis());
// Only OEM support satellite
mTestSatelliteController.isOemEnabledSatelliteSupported = true;
- mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection);
+ mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection, false);
processAllMessages();
assertEquals(TEST_EMERGENCY_CALL_TO_SOS_MSG_HYSTERESIS_TIMEOUT_MILLIS,
mTestSOSMessageRecommender.getTimeOutMillis());
- // Both OEM and carrier support satellite. Thus, carrier's timeout duration will be used
+ // Both OEM and carrier support satellite, but device is not connected to carrier satellite
+ // within hysteresis time. Thus, OEM timer will be used.
long carrierTimeoutMillis = 1000;
mTestSatelliteController.isSatelliteEmergencyMessagingSupportedViaCarrier = true;
+ mTestSatelliteController.setSatelliteConnectedViaCarrierWithinHysteresisTime(false);
mTestSatelliteController.carrierEmergencyCallWaitForConnectionTimeoutMillis =
carrierTimeoutMillis;
- mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection);
+ mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection, false);
+ processAllMessages();
+ assertEquals(TEST_EMERGENCY_CALL_TO_SOS_MSG_HYSTERESIS_TIMEOUT_MILLIS,
+ mTestSOSMessageRecommender.getTimeOutMillis());
+
+ // Both OEM and carrier support satellite, and device is connected to carrier satellite
+ // within hysteresis time. Thus, carrier timer will be used.
+ mTestSatelliteController.isSatelliteEmergencyMessagingSupportedViaCarrier = true;
+ mTestSatelliteController.setSatelliteConnectedViaCarrierWithinHysteresisTime(true);
+ mTestSatelliteController.carrierEmergencyCallWaitForConnectionTimeoutMillis =
+ carrierTimeoutMillis;
+ mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection, false);
processAllMessages();
assertEquals(carrierTimeoutMillis, mTestSOSMessageRecommender.getTimeOutMillis());
}
@@ -565,7 +578,7 @@
mTestSatelliteController.setSatelliteConnectedViaCarrierWithinHysteresisTime(true);
mTestSatelliteController.mIsSatelliteViaOemProvisioned = true;
- mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection);
+ mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection, false);
assertEquals(EMERGENCY_CALL_TO_SATELLITE_HANDOVER_TYPE_T911,
mTestSOSMessageRecommender.getEmergencyCallToSatelliteHandoverType());
@@ -578,7 +591,7 @@
mTestSatelliteController.setSatelliteConnectedViaCarrierWithinHysteresisTime(true);
mTestSatelliteController.mIsSatelliteViaOemProvisioned = false;
- mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection);
+ mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection, false);
assertEquals(EMERGENCY_CALL_TO_SATELLITE_HANDOVER_TYPE_T911,
mTestSOSMessageRecommender.getEmergencyCallToSatelliteHandoverType());
@@ -591,13 +604,13 @@
mTestSatelliteController.setSatelliteConnectedViaCarrierWithinHysteresisTime(false);
mTestSatelliteController.mIsSatelliteViaOemProvisioned = true;
- mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection);
+ mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection, false);
assertEquals(EMERGENCY_CALL_TO_SATELLITE_HANDOVER_TYPE_SOS,
mTestSOSMessageRecommender.getEmergencyCallToSatelliteHandoverType());
mTestSatelliteController.setSatelliteConnectedViaCarrierWithinHysteresisTime(false);
mTestSatelliteController.mIsSatelliteViaOemProvisioned = false;
- mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection);
+ mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection, false);
assertEquals(EMERGENCY_CALL_TO_SATELLITE_HANDOVER_TYPE_SOS,
mTestSOSMessageRecommender.getEmergencyCallToSatelliteHandoverType());
@@ -606,7 +619,7 @@
private void testStopTrackingCallBeforeTimeout(
@Connection.ConnectionState int connectionState) {
- mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection);
+ mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection, false);
processAllMessages();
assertTrue(mTestSOSMessageRecommender.isTimerStarted());
@@ -628,7 +641,7 @@
@ServiceState.RegState int availableServiceState,
@ServiceState.RegState int unavailableServiceState) {
mTestSOSMessageRecommender.isSatelliteAllowedCallback = null;
- mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection);
+ mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection, false);
processAllMessages();
assertNull(mTestSOSMessageRecommender.isSatelliteAllowedCallback);
assertTrue(mTestSOSMessageRecommender.isTimerStarted());