Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 70520367 authored by Joonhun Shin's avatar Joonhun Shin Committed by Android (Google) Code Review
Browse files

Merge "Data only device(without FEATURE_TELEPHON_CALLING) : Add try/catch to...

Merge "Data only device(without FEATURE_TELEPHON_CALLING) : Add try/catch to handle UnsupportedOperationException" into main
parents c5363853 ca96bf69
Loading
Loading
Loading
Loading
+17 −2
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.internal.location;
import android.Manifest;
import android.annotation.RequiresPermission;
import android.content.Context;
import android.content.pm.PackageManager;
import android.location.LocationManager;
import android.os.SystemClock;
import android.telephony.TelephonyCallback;
@@ -26,6 +27,8 @@ import android.telephony.TelephonyManager;
import android.telephony.emergency.EmergencyNumber;
import android.util.Log;

import com.android.internal.telephony.flags.Flags;

import java.util.concurrent.TimeUnit;

/**
@@ -139,8 +142,20 @@ public class GpsNetInitiatedHandler {
                (mCallEndElapsedRealtimeMillis > 0)
                        && ((SystemClock.elapsedRealtime() - mCallEndElapsedRealtimeMillis)
                        < emergencyExtensionMillis);
        boolean isInEmergencyCallback = mTelephonyManager.getEmergencyCallbackMode();
        boolean isInEmergencySmsMode = mTelephonyManager.isInEmergencySmsMode();
        boolean isInEmergencyCallback = false;
        boolean isInEmergencySmsMode = false;
        if (!Flags.enforceTelephonyFeatureMappingForPublicApis()) {
            isInEmergencyCallback = mTelephonyManager.getEmergencyCallbackMode();
            isInEmergencySmsMode = mTelephonyManager.isInEmergencySmsMode();
        } else {
            PackageManager pm = mContext.getPackageManager();
            if (pm != null && pm.hasSystemFeature(PackageManager.FEATURE_TELEPHONY_CALLING)) {
                isInEmergencyCallback = mTelephonyManager.getEmergencyCallbackMode();
            }
            if (pm != null && pm.hasSystemFeature(PackageManager.FEATURE_TELEPHONY_MESSAGING)) {
                isInEmergencySmsMode = mTelephonyManager.isInEmergencySmsMode();
            }
        }
        return mIsInEmergencyCall || isInEmergencyCallback || isInEmergencyExtension
                || isInEmergencySmsMode;
    }
+9 −0
Original line number Diff line number Diff line
@@ -101,6 +101,7 @@ import com.android.internal.telephony.IOnSubscriptionsChangedListener;
import com.android.internal.telephony.IPhoneStateListener;
import com.android.internal.telephony.ITelephonyRegistry;
import com.android.internal.telephony.TelephonyPermissions;
import com.android.internal.telephony.flags.Flags;
import com.android.internal.telephony.util.TelephonyUtils;
import com.android.internal.util.ArrayUtils;
import com.android.internal.util.DumpUtils;
@@ -2679,6 +2680,14 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {
        if (!checkNotifyPermission("notifyEmergencyNumberList()")) {
            return;
        }
        if (Flags.enforceTelephonyFeatureMappingForPublicApis()) {
            if (!mContext.getPackageManager().hasSystemFeature(
                    PackageManager.FEATURE_TELEPHONY_CALLING)) {
                // TelephonyManager.getEmergencyNumberList() throws an exception if
                // FEATURE_TELEPHONY_CALLING is not defined.
                return;
            }
        }

        synchronized (mRecords) {
            if (validatePhoneId(phoneId)) {
+22 −4
Original line number Diff line number Diff line
@@ -22,12 +22,14 @@ import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.os.SystemClock;
import android.telephony.TelephonyCallback;
import android.telephony.TelephonyManager;
import android.util.Log;

import com.android.internal.telephony.TelephonyIntents;
import com.android.internal.telephony.flags.Flags;
import com.android.server.FgThread;

import java.util.Objects;
@@ -104,10 +106,26 @@ public class SystemEmergencyHelper extends EmergencyHelper {
        boolean isInExtensionTime = mEmergencyCallEndRealtimeMs != Long.MIN_VALUE
                && (SystemClock.elapsedRealtime() - mEmergencyCallEndRealtimeMs) < extensionTimeMs;

        if (!Flags.enforceTelephonyFeatureMapping()) {
            return mIsInEmergencyCall
                    || isInExtensionTime
                    || mTelephonyManager.getEmergencyCallbackMode()
                    || mTelephonyManager.isInEmergencySmsMode();
        } else {
            boolean emergencyCallbackMode = false;
            boolean emergencySmsMode = false;
            PackageManager pm = mContext.getPackageManager();
            if (pm.hasSystemFeature(PackageManager.FEATURE_TELEPHONY_CALLING)) {
                emergencyCallbackMode = mTelephonyManager.getEmergencyCallbackMode();
            }
            if (pm.hasSystemFeature(PackageManager.FEATURE_TELEPHONY_MESSAGING)) {
                emergencySmsMode = mTelephonyManager.isInEmergencySmsMode();
            }
            return mIsInEmergencyCall
                    || isInExtensionTime
                    || emergencyCallbackMode
                    || emergencySmsMode;
        }
    }

    private class EmergencyCallTelephonyCallback extends TelephonyCallback implements
+12 −2
Original line number Diff line number Diff line
@@ -2337,9 +2337,19 @@ public class UserManagerService extends IUserManager.Stub {
        final long identity = Binder.clearCallingIdentity();
        try {
            final TelecomManager telecomManager = mContext.getSystemService(TelecomManager.class);
            if (com.android.internal.telephony.flags
                    .Flags.enforceTelephonyFeatureMappingForPublicApis()) {
                if (mContext.getPackageManager().hasSystemFeature(
                        PackageManager.FEATURE_TELECOM)) {
                    if (telecomManager != null && telecomManager.isInCall()) {
                        flags |= UserManager.SWITCHABILITY_STATUS_USER_IN_CALL;
                    }
                }
            } else {
                if (telecomManager != null && telecomManager.isInCall()) {
                    flags |= UserManager.SWITCHABILITY_STATUS_USER_IN_CALL;
                }
            }
        } finally {
            Binder.restoreCallingIdentity(identity);
        }
+23 −6
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import android.telephony.TelephonyManager;
import android.util.Slog;

import com.android.internal.annotations.GuardedBy;
import com.android.internal.telephony.flags.Flags;

import java.util.ArrayList;
import java.util.List;
@@ -117,12 +118,28 @@ public class PhoneCallStateHandler {
    private boolean checkCallStatus() {
        List<SubscriptionInfo> infoList = mSubscriptionManager.getActiveSubscriptionInfoList();
        if (infoList == null) return false;
        if (!Flags.enforceTelephonyFeatureMapping()) {
            return infoList.stream()
                .filter(s -> (s.getSubscriptionId() != SubscriptionManager.INVALID_SUBSCRIPTION_ID))
                    .filter(s -> (s.getSubscriptionId()
                            != SubscriptionManager.INVALID_SUBSCRIPTION_ID))
                    .anyMatch(s -> isCallOngoingFromState(
                            mTelephonyManager
                                    .createForSubscriptionId(s.getSubscriptionId())
                                    .getCallStateForSubscription()));
        } else {
            return infoList.stream()
                    .filter(s -> (s.getSubscriptionId()
                            != SubscriptionManager.INVALID_SUBSCRIPTION_ID))
                    .anyMatch(s -> {
                        try {
                            return isCallOngoingFromState(mTelephonyManager
                                    .createForSubscriptionId(s.getSubscriptionId())
                                    .getCallStateForSubscription());
                        } catch (UnsupportedOperationException e) {
                            return false;
                        }
                    });
        }
    }

    private void updateTelephonyListeners() {