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

Commit 8ac5080f authored by Rafael Higuera Silva's avatar Rafael Higuera Silva Committed by Automerger Merge Worker
Browse files

Merge "Revert "Adding renounce permissions logic to ipc calls."" am: 702d7d10 am: ef47b4fa

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2000932

Change-Id: Ie5589018d34fb4001dbd232a021e93759eb45c14
parents 35ce6344 ef47b4fa
Loading
Loading
Loading
Loading
+4 −6
Original line number Diff line number Diff line
@@ -239,10 +239,8 @@ public class TelephonyRegistryManager {
     * @param events Events
     * @param notifyNow Whether to notify instantly
     */
    public void listenFromListener(int subId, @NonNull boolean renounceFineLocationAccess,
            @NonNull boolean renounceCoarseLocationAccess, @NonNull String pkg,
            @NonNull String featureId, @NonNull PhoneStateListener listener,
            @NonNull int events, boolean notifyNow) {
    public void listenFromListener(int subId, @NonNull String pkg, @NonNull String featureId,
            @NonNull PhoneStateListener listener, @NonNull int events, boolean notifyNow) {
        if (listener == null) {
            throw new IllegalStateException("telephony service is null.");
        }
@@ -259,8 +257,8 @@ public class TelephonyRegistryManager {
            } else if (listener.mSubId != null) {
                subId = listener.mSubId;
            }
            sRegistry.listenWithEventList(renounceFineLocationAccess, renounceCoarseLocationAccess,
                    subId, pkg, featureId, listener.callback, eventsList, notifyNow);
            sRegistry.listenWithEventList(false, false, subId, pkg, featureId,
                    listener.callback, eventsList, notifyNow);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
+16 −70
Original line number Diff line number Diff line
@@ -48,7 +48,6 @@ import android.compat.annotation.EnabledAfter;
import android.compat.annotation.UnsupportedAppUsage;
import android.content.ComponentName;
import android.content.Context;
import android.content.ContextParams;
import android.content.Intent;
import android.database.Cursor;
import android.net.ConnectivityManager;
@@ -141,7 +140,6 @@ import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.Executor;
import java.util.concurrent.RejectedExecutionException;
@@ -379,8 +377,16 @@ public class TelephonyManager {
    @UnsupportedAppUsage
    public TelephonyManager(Context context, int subId) {
        mSubId = subId;
        mContext = mergeAttributionAndRenouncedPermissions(context.getApplicationContext(),
            context);
        Context appContext = context.getApplicationContext();
        if (appContext != null) {
            if (Objects.equals(context.getAttributionTag(), appContext.getAttributionTag())) {
                mContext = appContext;
            } else {
                mContext = appContext.createAttributionContext(context.getAttributionTag());
            }
        } else {
            mContext = context;
        }
        mSubscriptionManager = SubscriptionManager.from(mContext);
    }
@@ -401,34 +407,6 @@ public class TelephonyManager {
        return sInstance;
    }
    // This method takes the Application context and adds the attributionTag
    // and renouncedPermissions from the given context.
    private Context mergeAttributionAndRenouncedPermissions(Context to, Context from) {
        Context contextToReturn = from;
        if (to != null) {
            if (!Objects.equals(from.getAttributionTag(), to.getAttributionTag())) {
                contextToReturn = to.createAttributionContext(from.getAttributionTag());
            } else {
                contextToReturn = to;
            }
            Set<String> renouncedPermissions =
                    from.getAttributionSource().getRenouncedPermissions();
            if (!renouncedPermissions.isEmpty()) {
                if (to.getParams() != null) {
                    contextToReturn = contextToReturn.createContext(
                            new ContextParams.Builder(to.getParams())
                                    .setRenouncedPermissions(renouncedPermissions).build());
                } else {
                    contextToReturn = contextToReturn.createContext(
                            new ContextParams.Builder()
                                    .setRenouncedPermissions(renouncedPermissions).build());
                }
            }
        }
        return contextToReturn;
    }
    private String getOpPackageName() {
        // For legacy reasons the TelephonyManager has API for getting
        // a static instance with no context set preventing us from
@@ -459,16 +437,6 @@ public class TelephonyManager {
        return null;
    }
    private Set<String> getRenouncedPermissions() {
        // For legacy reasons the TelephonyManager has API for getting
        // a static instance with no context set preventing us from
        // getting the attribution source.
        if (mContext != null) {
            return mContext.getAttributionSource().getRenouncedPermissions();
        }
        return Collections.emptySet();
    }
    /**
     * Post a runnable to the BackgroundThread.
     *
@@ -6170,14 +6138,8 @@ public class TelephonyManager {
                (TelephonyRegistryManager)
                        mContext.getSystemService(Context.TELEPHONY_REGISTRY_SERVICE);
        if (telephonyRegistry != null) {
            Set<String> renouncedPermissions = getRenouncedPermissions();
            boolean renounceFineLocationAccess = renouncedPermissions
                    .contains(Manifest.permission.ACCESS_FINE_LOCATION);
            boolean renounceCoarseLocationAccess = renouncedPermissions
                    .contains(Manifest.permission.ACCESS_COARSE_LOCATION);
            telephonyRegistry.listenFromListener(mSubId, renounceFineLocationAccess,
                    renounceCoarseLocationAccess, getOpPackageName(), getAttributionTag(),
                    listener, events, notifyNow);
            telephonyRegistry.listenFromListener(mSubId, getOpPackageName(),
                    getAttributionTag(), listener, events, notifyNow);
        } else {
            Rlog.w(TAG, "telephony registry not ready.");
        }
@@ -11640,10 +11602,7 @@ public class TelephonyManager {
            Manifest.permission.ACCESS_COARSE_LOCATION
    })
    public @Nullable ServiceState getServiceState() {
        return getServiceState(getRenouncedPermissions()
                    .contains(Manifest.permission.ACCESS_FINE_LOCATION),
                               getRenouncedPermissions()
                    .contains(Manifest.permission.ACCESS_COARSE_LOCATION));
        return getServiceState(false, false);
    }
    /**
@@ -11655,11 +11614,6 @@ public class TelephonyManager {
     * If you want continuous updates of service state info, register a {@link PhoneStateListener}
     * via {@link #listen} with the {@link PhoneStateListener#LISTEN_SERVICE_STATE} event.
     *
     * There's another way to renounce permissions with a custom context
     * {@link AttributionSource.Builder#setRenouncedPermissions(Set<String>)} but only for system
     * apps. To avoid confusion, calling this method supersede renouncing permissions with a
     * custom context.
     *
     * <p>Requires Permission: {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
     * or that the calling app has carrier privileges (see {@link #hasCarrierPrivileges})
     * and {@link android.Manifest.permission#ACCESS_COARSE_LOCATION}.
@@ -11703,7 +11657,8 @@ public class TelephonyManager {
            ITelephony service = getITelephony();
            if (service != null) {
                return service.getServiceStateForSubscriber(subId, renounceFineLocationAccess,
                        renounceCoarseLocationAccess, getOpPackageName(), getAttributionTag());
                        renounceCoarseLocationAccess,
                        getOpPackageName(), getAttributionTag());
            }
        } catch (RemoteException e) {
            Log.e(TAG, "Error calling ITelephony#getServiceStateForSubscriber", e);
@@ -15539,10 +15494,7 @@ public class TelephonyManager {
     */
    public void registerTelephonyCallback(@NonNull @CallbackExecutor Executor executor,
            @NonNull TelephonyCallback callback) {
        registerTelephonyCallback(
                getRenouncedPermissions().contains(Manifest.permission.ACCESS_FINE_LOCATION),
                getRenouncedPermissions().contains(Manifest.permission.ACCESS_COARSE_LOCATION),
                executor, callback);
        registerTelephonyCallback(false, false, executor, callback);
    }
    /**
@@ -15572,12 +15524,6 @@ public class TelephonyManager {
     * instability. If a process has registered too many callbacks without unregistering them, it
     * may encounter an {@link IllegalStateException} when trying to register more callbacks.
     *
     * <p>
     * There's another way to renounce permissions with a custom context
     * {@link AttributionSource.Builder#setRenouncedPermissions(Set<String>)} but only for system
     * apps. To avoid confusion, calling this method supersede renouncing permissions with a
     * custom context.
     *
     * @param renounceFineLocationAccess Set this to true if the caller would not like to receive
     * location related information which will be sent if the caller already possess
     * {@link android.Manifest.permission#ACCESS_FINE_LOCATION} and do not renounce the permissions.