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

Commit 702d7d10 authored by Rafael Higuera Silva's avatar Rafael Higuera Silva Committed by Gerrit Code Review
Browse files

Merge "Revert "Adding renounce permissions logic to ipc calls.""

parents 0b340743 97f44be5
Loading
Loading
Loading
Loading
+4 −6
Original line number Original line Diff line number Diff line
@@ -239,10 +239,8 @@ public class TelephonyRegistryManager {
     * @param events Events
     * @param events Events
     * @param notifyNow Whether to notify instantly
     * @param notifyNow Whether to notify instantly
     */
     */
    public void listenFromListener(int subId, @NonNull boolean renounceFineLocationAccess,
    public void listenFromListener(int subId, @NonNull String pkg, @NonNull String featureId,
            @NonNull boolean renounceCoarseLocationAccess, @NonNull String pkg,
            @NonNull PhoneStateListener listener, @NonNull int events, boolean notifyNow) {
            @NonNull String featureId, @NonNull PhoneStateListener listener,
            @NonNull int events, boolean notifyNow) {
        if (listener == null) {
        if (listener == null) {
            throw new IllegalStateException("telephony service is null.");
            throw new IllegalStateException("telephony service is null.");
        }
        }
@@ -259,8 +257,8 @@ public class TelephonyRegistryManager {
            } else if (listener.mSubId != null) {
            } else if (listener.mSubId != null) {
                subId = listener.mSubId;
                subId = listener.mSubId;
            }
            }
            sRegistry.listenWithEventList(renounceFineLocationAccess, renounceCoarseLocationAccess,
            sRegistry.listenWithEventList(false, false, subId, pkg, featureId,
                    subId, pkg, featureId, listener.callback, eventsList, notifyNow);
                    listener.callback, eventsList, notifyNow);
        } catch (RemoteException e) {
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
            throw e.rethrowFromSystemServer();
        }
        }
+16 −70
Original line number Original line Diff line number Diff line
@@ -48,7 +48,6 @@ import android.compat.annotation.EnabledAfter;
import android.compat.annotation.UnsupportedAppUsage;
import android.compat.annotation.UnsupportedAppUsage;
import android.content.ComponentName;
import android.content.ComponentName;
import android.content.Context;
import android.content.Context;
import android.content.ContextParams;
import android.content.Intent;
import android.content.Intent;
import android.database.Cursor;
import android.database.Cursor;
import android.net.ConnectivityManager;
import android.net.ConnectivityManager;
@@ -141,7 +140,6 @@ import java.util.List;
import java.util.Locale;
import java.util.Locale;
import java.util.Map;
import java.util.Map;
import java.util.Objects;
import java.util.Objects;
import java.util.Set;
import java.util.UUID;
import java.util.UUID;
import java.util.concurrent.Executor;
import java.util.concurrent.Executor;
import java.util.concurrent.RejectedExecutionException;
import java.util.concurrent.RejectedExecutionException;
@@ -379,8 +377,16 @@ public class TelephonyManager {
    @UnsupportedAppUsage
    @UnsupportedAppUsage
    public TelephonyManager(Context context, int subId) {
    public TelephonyManager(Context context, int subId) {
        mSubId = subId;
        mSubId = subId;
        mContext = mergeAttributionAndRenouncedPermissions(context.getApplicationContext(),
        Context appContext = context.getApplicationContext();
            context);
        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);
        mSubscriptionManager = SubscriptionManager.from(mContext);
    }
    }
@@ -401,34 +407,6 @@ public class TelephonyManager {
        return sInstance;
        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() {
    private String getOpPackageName() {
        // For legacy reasons the TelephonyManager has API for getting
        // For legacy reasons the TelephonyManager has API for getting
        // a static instance with no context set preventing us from
        // a static instance with no context set preventing us from
@@ -459,16 +437,6 @@ public class TelephonyManager {
        return null;
        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.
     * Post a runnable to the BackgroundThread.
     *
     *
@@ -6170,14 +6138,8 @@ public class TelephonyManager {
                (TelephonyRegistryManager)
                (TelephonyRegistryManager)
                        mContext.getSystemService(Context.TELEPHONY_REGISTRY_SERVICE);
                        mContext.getSystemService(Context.TELEPHONY_REGISTRY_SERVICE);
        if (telephonyRegistry != null) {
        if (telephonyRegistry != null) {
            Set<String> renouncedPermissions = getRenouncedPermissions();
            telephonyRegistry.listenFromListener(mSubId, getOpPackageName(),
            boolean renounceFineLocationAccess = renouncedPermissions
                    getAttributionTag(), listener, events, notifyNow);
                    .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);
        } else {
        } else {
            Rlog.w(TAG, "telephony registry not ready.");
            Rlog.w(TAG, "telephony registry not ready.");
        }
        }
@@ -11640,10 +11602,7 @@ public class TelephonyManager {
            Manifest.permission.ACCESS_COARSE_LOCATION
            Manifest.permission.ACCESS_COARSE_LOCATION
    })
    })
    public @Nullable ServiceState getServiceState() {
    public @Nullable ServiceState getServiceState() {
        return getServiceState(getRenouncedPermissions()
        return getServiceState(false, false);
                    .contains(Manifest.permission.ACCESS_FINE_LOCATION),
                               getRenouncedPermissions()
                    .contains(Manifest.permission.ACCESS_COARSE_LOCATION));
    }
    }
    /**
    /**
@@ -11655,11 +11614,6 @@ public class TelephonyManager {
     * If you want continuous updates of service state info, register a {@link PhoneStateListener}
     * If you want continuous updates of service state info, register a {@link PhoneStateListener}
     * via {@link #listen} with the {@link PhoneStateListener#LISTEN_SERVICE_STATE} event.
     * 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}
     * <p>Requires Permission: {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
     * or that the calling app has carrier privileges (see {@link #hasCarrierPrivileges})
     * or that the calling app has carrier privileges (see {@link #hasCarrierPrivileges})
     * and {@link android.Manifest.permission#ACCESS_COARSE_LOCATION}.
     * and {@link android.Manifest.permission#ACCESS_COARSE_LOCATION}.
@@ -11703,7 +11657,8 @@ public class TelephonyManager {
            ITelephony service = getITelephony();
            ITelephony service = getITelephony();
            if (service != null) {
            if (service != null) {
                return service.getServiceStateForSubscriber(subId, renounceFineLocationAccess,
                return service.getServiceStateForSubscriber(subId, renounceFineLocationAccess,
                        renounceCoarseLocationAccess, getOpPackageName(), getAttributionTag());
                        renounceCoarseLocationAccess,
                        getOpPackageName(), getAttributionTag());
            }
            }
        } catch (RemoteException e) {
        } catch (RemoteException e) {
            Log.e(TAG, "Error calling ITelephony#getServiceStateForSubscriber", e);
            Log.e(TAG, "Error calling ITelephony#getServiceStateForSubscriber", e);
@@ -15539,10 +15494,7 @@ public class TelephonyManager {
     */
     */
    public void registerTelephonyCallback(@NonNull @CallbackExecutor Executor executor,
    public void registerTelephonyCallback(@NonNull @CallbackExecutor Executor executor,
            @NonNull TelephonyCallback callback) {
            @NonNull TelephonyCallback callback) {
        registerTelephonyCallback(
        registerTelephonyCallback(false, false, executor, callback);
                getRenouncedPermissions().contains(Manifest.permission.ACCESS_FINE_LOCATION),
                getRenouncedPermissions().contains(Manifest.permission.ACCESS_COARSE_LOCATION),
                executor, callback);
    }
    }
    /**
    /**
@@ -15572,12 +15524,6 @@ public class TelephonyManager {
     * instability. If a process has registered too many callbacks without unregistering them, it
     * instability. If a process has registered too many callbacks without unregistering them, it
     * may encounter an {@link IllegalStateException} when trying to register more callbacks.
     * 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
     * @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
     * 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.
     * {@link android.Manifest.permission#ACCESS_FINE_LOCATION} and do not renounce the permissions.