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

Commit c8157f66 authored by Sudheer Shanka's avatar Sudheer Shanka Committed by Android (Google) Code Review
Browse files

Merge "Allow querying the intent-filters receivers were registered for." into main

parents 076131eb abf6e804
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -1030,6 +1030,7 @@ package android.content {
  public abstract class Context {
    method @NonNull public java.io.File getCrateDir(@NonNull String);
    method public abstract int getDisplayId();
    method @NonNull public java.util.List<android.content.IntentFilter> getRegisteredIntentFilters(@NonNull android.content.BroadcastReceiver);
    method @NonNull public android.os.UserHandle getUser();
    method public int getUserId();
    method public void setAutofillOptions(@Nullable android.content.AutofillOptions);
+18 −0
Original line number Diff line number Diff line
@@ -1962,6 +1962,24 @@ class ContextImpl extends Context {
        }
    }

    @Override
    @NonNull
    public List<IntentFilter> getRegisteredIntentFilters(@NonNull BroadcastReceiver receiver) {
        if (mPackageInfo != null) {
            IIntentReceiver rd = mPackageInfo.findRegisteredReceiverDispatcher(
                    receiver, getOuterContext());
            try {
                final List<IntentFilter> filters = ActivityManager.getService()
                        .getRegisteredIntentFilters(rd);
                return filters == null ? new ArrayList<>() : filters;
            } catch (RemoteException e) {
                throw e.rethrowFromSystemServer();
            }
        } else {
            throw new RuntimeException("Not supported in system context");
        }
    }

    private void validateServiceIntent(Intent service) {
        if (service.getComponent() == null && service.getPackage() == null) {
            if (getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.LOLLIPOP) {
+1 −0
Original line number Diff line number Diff line
@@ -181,6 +181,7 @@ interface IActivityManager {
            in IntentFilter filter, in String requiredPermission, int userId, int flags);
    @UnsupportedAppUsage
    void unregisterReceiver(in IIntentReceiver receiver);
    List<IntentFilter> getRegisteredIntentFilters(in IIntentReceiver receiver);
    /** @deprecated Use {@link #broadcastIntentWithFeature} instead */
    @UnsupportedAppUsage(maxTargetSdk=29, publicAlternatives="Use {@link android.content.Context#sendBroadcast(android.content.Intent)} instead")
    int broadcastIntent(in IApplicationThread caller, in Intent intent,
+12 −0
Original line number Diff line number Diff line
@@ -1627,6 +1627,18 @@ public final class LoadedApk {
        }
    }

    IIntentReceiver findRegisteredReceiverDispatcher(BroadcastReceiver r, Context context) {
        synchronized (mReceivers) {
            final ArrayMap<BroadcastReceiver, LoadedApk.ReceiverDispatcher> map =
                    mReceivers.get(context);
            if (map != null) {
                final LoadedApk.ReceiverDispatcher rd = map.get(r);
                return rd == null ? null : rd.getIIntentReceiver();
            }
            return null;
        }
    }

    public IIntentReceiver forgetReceiverDispatcher(Context context,
            BroadcastReceiver r) {
        synchronized (mReceivers) {
+21 −0
Original line number Diff line number Diff line
@@ -3657,6 +3657,27 @@ public abstract class Context {
     */
    public abstract void unregisterReceiver(BroadcastReceiver receiver);

    /**
     * Returns the list of {@link IntentFilter} objects that have been registered for the given
     * {@link BroadcastReceiver}.
     *
     * @param receiver The {@link BroadcastReceiver} whose registered intent filters
     *                 should be retrieved.
     *
     * @return A list of registered intent filters, or an empty list if the given receiver is not
     *         registered.
     *
     * @throws NullPointerException if the {@code receiver} is {@code null}.
     *
     * @hide
     */
    @SuppressLint("UnflaggedApi") // TestApi
    @TestApi
    @NonNull
    public List<IntentFilter> getRegisteredIntentFilters(@NonNull BroadcastReceiver receiver) {
        throw new RuntimeException("Not implemented. Must override in a subclass.");
    }

    /**
     * Request that a given application service be started.  The Intent
     * should either contain the complete class name of a specific service
Loading