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

Commit dd6b98fb authored by Bill Yi's avatar Bill Yi
Browse files

Merge commit '4a34069a' into HEAD

parents af300d9c 4a34069a
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -2098,4 +2098,9 @@ public interface Phone {
     * Returns the modem activity information
     */
    public void getModemActivityInfo(Message response);

    /**
     * Set boolean broadcastEmergencyCallStateChanges
     */
    public void setBroadcastEmergencyCallStateChanges(boolean broadcast);
}
+22 −2
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.internal.telephony;

import android.app.ActivityManagerNative;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
@@ -33,6 +34,7 @@ import android.os.Message;
import android.os.Registrant;
import android.os.RegistrantList;
import android.os.SystemProperties;
import android.os.UserHandle;
import android.preference.PreferenceManager;
import android.provider.Settings;
import android.telecom.VideoProfile;
@@ -87,6 +89,7 @@ import java.util.concurrent.atomic.AtomicReference;

public abstract class PhoneBase extends Handler implements Phone {
    private static final String LOG_TAG = "PhoneBase";
    private static final boolean DBG = true;

    private boolean mImsIntentReceiverRegistered = false;
    private BroadcastReceiver mImsIntentReceiver = new BroadcastReceiver() {
@@ -250,6 +253,8 @@ public abstract class PhoneBase extends Handler implements Phone {
    protected int mReportInterval = 0;  // ms
    protected int mLceStatus = RILConstants.LCE_NOT_AVAILABLE;

    private boolean mBroadcastEmergencyCallStateChanges = false;

    @Override
    public String getPhoneName() {
        return mName;
@@ -2605,6 +2610,21 @@ public abstract class PhoneBase extends Handler implements Phone {
        return false;
    }

    public void sendEmergencyCallStateChange(boolean callActive) {
        if (mBroadcastEmergencyCallStateChanges) {
            Intent intent = new Intent(TelephonyIntents.ACTION_EMERGENCY_CALL_STATE_CHANGED);
            intent.putExtra(PhoneConstants.PHONE_IN_EMERGENCY_CALL, callActive);
            SubscriptionManager.putPhoneIdAndSubIdExtra(intent, getPhoneId());
            ActivityManagerNative.broadcastStickyIntent(intent, null, UserHandle.USER_ALL);
            if (DBG) Rlog.d(LOG_TAG, "sendEmergencyCallStateChange");
        }
    }

    @Override
    public void setBroadcastEmergencyCallStateChanges(boolean broadcast) {
        mBroadcastEmergencyCallStateChanges = broadcast;
    }

    public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
        pw.println("PhoneBase: subId=" + getSubId());
        pw.println(" mPhoneId=" + mPhoneId);
+20 −0
Original line number Diff line number Diff line
@@ -175,6 +175,21 @@ public class PhoneProxy extends Handler implements Phone {
            }
            // Force update IMS service
            ImsManager.updateImsServiceConfig(mContext, mPhoneId, true);

            // Update broadcastEmergencyCallStateChanges
            CarrierConfigManager configMgr = (CarrierConfigManager)
                    mActivePhone.getContext().getSystemService(Context.CARRIER_CONFIG_SERVICE);
            PersistableBundle b = configMgr.getConfigForSubId(mActivePhone.getSubId());
            if (b != null) {
                boolean broadcastEmergencyCallStateChanges = b.getBoolean(
                        CarrierConfigManager.KEY_BROADCAST_EMERGENCY_CALL_STATE_CHANGES_BOOL);
                logd("broadcastEmergencyCallStateChanges =" + broadcastEmergencyCallStateChanges);
                mActivePhone.setBroadcastEmergencyCallStateChanges(
                        broadcastEmergencyCallStateChanges);
            } else {
                loge("didn't get broadcastEmergencyCallStateChanges from carrier config");
            }

            break;

        default:
@@ -1639,6 +1654,11 @@ public class PhoneProxy extends Handler implements Phone {
        return mActivePhone.isWifiCallingEnabled();
    }

    @Override
    public void setBroadcastEmergencyCallStateChanges(boolean broadcast) {
        mActivePhone.setBroadcastEmergencyCallStateChanges(broadcast);
    }

    public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
        try {
            ((PhoneBase)mActivePhone).dump(fd, pw, args);
+56 −7
Original line number Diff line number Diff line
@@ -18,6 +18,9 @@

package com.android.internal.telephony;

import android.app.AppOpsManager;
import android.content.Context;
import android.os.Binder;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.telephony.SubscriptionManager;
@@ -28,22 +31,68 @@ import java.lang.NullPointerException;

public class PhoneSubInfoController extends IPhoneSubInfo.Stub {
    private static final String TAG = "PhoneSubInfoController";
    private Phone[] mPhone;

    public PhoneSubInfoController(Phone[] phone) {
        mPhone = phone;
    private final Phone[] mPhone;
    private final Context mContext;
    private final AppOpsManager mAppOps;

    public PhoneSubInfoController(Phone[] phones) {
        mPhone = phones;
        Context context = null;
        AppOpsManager appOpsManager = null;
        for (Phone phone : mPhone) {
            if (phone != null) {
                context = phone.getContext();
                appOpsManager = context.getSystemService(AppOpsManager.class);
                break;
            }
        }
        mContext = context;
        mAppOps = appOpsManager;
        if (ServiceManager.getService("iphonesubinfo") == null) {
            ServiceManager.addService("iphonesubinfo", this);
        }
    }

    // try-state
    // either have permission (true), don't (exception), or explicitly turned off (false)
    private boolean canReadPhoneState(String callingPackage, String message) {
        if (mContext == null) return false;
        try {
            mContext.enforceCallingOrSelfPermission(
                    android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, message);

            // SKIP checking for run-time permission since caller or self has PRIVILEDGED permission
            return true;
        } catch (SecurityException e) {
            mContext.enforceCallingOrSelfPermission(android.Manifest.permission.READ_PHONE_STATE,
                    message);
        }



        if (mAppOps.noteOp(AppOpsManager.OP_READ_PHONE_STATE, Binder.getCallingUid(),
                callingPackage) != AppOpsManager.MODE_ALLOWED) {
            return false;
        }

        return true;
    }

    public String getDeviceId(String callingPackage) {
        return getDeviceIdForPhone(SubscriptionManager.getPhoneId(getDefaultSubscription()));
        return getDeviceIdForPhone(SubscriptionManager.getPhoneId(getDefaultSubscription()),
                callingPackage);
    }

    public String getDeviceIdForPhone(int phoneId, String callingPackage) {
        if (!canReadPhoneState(callingPackage, "getDeviceId")) {
            return null;
        }

    public String getDeviceIdForPhone(int phoneId) {
        Phone phone = getPhone(phoneId);
        final Phone phone = getPhone(phoneId);
        if (phone != null) {
            phone.getContext().enforceCallingOrSelfPermission(
                    android.Manifest.permission.READ_PHONE_STATE,
                    "Requires READ_PHONE_STATE");
            return phone.getDeviceId();
        } else {
            Rlog.e(TAG,"getDeviceIdForPhone phone " + phoneId + " is null");
+1 −1
Original line number Diff line number Diff line
@@ -152,7 +152,7 @@ public class PhoneSubInfoProxy extends IPhoneSubInfo.Stub {
    }

    @Override
    public String getDeviceIdForPhone(int phoneId) throws RemoteException {
    public String getDeviceIdForPhone(int phoneId, String callingPackage) throws RemoteException {
        // FIXME: getDeviceIdForPhone
        return null;
    }
Loading