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

Commit 8e5fb2c5 authored by Santiago Seifert's avatar Santiago Seifert Committed by Automerger Merge Worker
Browse files

Merge "Add support for SELF_SCAN_ONLY providers" into udc-dev am: dd18aad7

parents b6c2aeda dd18aad7
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -80,6 +80,18 @@ public abstract class MediaRoute2ProviderService extends Service {
    @SdkConstant(SdkConstant.SdkConstantType.SERVICE_ACTION)
    public static final String SERVICE_INTERFACE = "android.media.MediaRoute2ProviderService";

    /**
     * A category indicating that the associated provider is only intended for use within the app
     * that hosts the provider.
     *
     * <p>Declaring this category helps the system save resources by avoiding the launch of services
     * whose routes are known to be private to the app that provides them.
     *
     * @hide
     */
    public static final String CATEGORY_SELF_SCAN_ONLY =
            "android.media.MediaRoute2ProviderService.SELF_SCAN_ONLY";

    /**
     * The request ID to pass {@link #notifySessionCreated(long, RoutingSessionInfo)}
     * when {@link MediaRoute2ProviderService} created a session although there was no creation
+12 −11
Original line number Diff line number Diff line
@@ -333,12 +333,9 @@ public class AutomaticBrightnessController {
        // Initialize to active (normal) screen brightness mode
        switchToInteractiveScreenBrightnessMode();

        if (userLux != BrightnessMappingStrategy.NO_USER_LUX
                && userBrightness != BrightnessMappingStrategy.NO_USER_BRIGHTNESS) {
        // Use the given short-term model
        setScreenBrightnessByUser(userLux, userBrightness);
    }
    }

    /**
     * Enable/disable logging.
@@ -520,6 +517,10 @@ public class AutomaticBrightnessController {
    }

    private boolean setScreenBrightnessByUser(float lux, float brightness) {
        if (lux == BrightnessMappingStrategy.NO_USER_LUX
                || brightness == BrightnessMappingStrategy.NO_USER_BRIGHTNESS) {
            return false;
        }
        mCurrentBrightnessMapper.addUserDataPoint(lux, brightness);
        mShortTermModel.setUserBrightness(lux, brightness);
        return true;
@@ -1234,14 +1235,14 @@ public class AutomaticBrightnessController {
        // light.
        // The anchor determines what were the light levels when the user has set their preference,
        // and we use a relative threshold to determine when to revert to the OEM curve.
        private float mAnchor = -1f;
        private float mBrightness;
        private boolean mIsValid = true;
        private float mAnchor = BrightnessMappingStrategy.NO_USER_LUX;
        private float mBrightness = BrightnessMappingStrategy.NO_USER_BRIGHTNESS;
        private boolean mIsValid = false;

        private void reset() {
            mAnchor = -1f;
            mBrightness = -1f;
            mIsValid = true;
            mAnchor = BrightnessMappingStrategy.NO_USER_LUX;
            mBrightness = BrightnessMappingStrategy.NO_USER_BRIGHTNESS;
            mIsValid = false;
        }

        private void invalidate() {
+4 −1
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Set;

abstract class MediaRoute2Provider {
    final ComponentName mComponentName;
@@ -56,7 +57,9 @@ abstract class MediaRoute2Provider {
    public abstract void requestCreateSession(long requestId, String packageName, String routeId,
            @Nullable Bundle sessionHints);
    public abstract void releaseSession(long requestId, String sessionId);
    public abstract void updateDiscoveryPreference(RouteDiscoveryPreference discoveryPreference);

    public abstract void updateDiscoveryPreference(
            Set<String> activelyScanningPackages, RouteDiscoveryPreference discoveryPreference);

    public abstract void selectRoute(long requestId, String sessionId, String routeId);
    public abstract void deselectRoute(long requestId, String sessionId, String routeId);
+26 −8
Original line number Diff line number Diff line
@@ -49,6 +49,7 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.Set;

/**
 * Maintains a connection to a particular {@link MediaRoute2ProviderService}.
@@ -61,6 +62,7 @@ final class MediaRoute2ProviderServiceProxy extends MediaRoute2Provider
    private final Context mContext;
    private final int mUserId;
    private final Handler mHandler;
    private final boolean mIsSelfScanOnlyProvider;

    // Connection state
    private boolean mRunning;
@@ -70,14 +72,19 @@ final class MediaRoute2ProviderServiceProxy extends MediaRoute2Provider

    private boolean mIsManagerScanning;
    private RouteDiscoveryPreference mLastDiscoveryPreference = null;
    private boolean mLastDiscoveryPreferenceIncludesThisPackage = false;

    @GuardedBy("mLock")
    final List<RoutingSessionInfo> mReleasingSessions = new ArrayList<>();

    MediaRoute2ProviderServiceProxy(@NonNull Context context, @NonNull ComponentName componentName,
    MediaRoute2ProviderServiceProxy(
            @NonNull Context context,
            @NonNull ComponentName componentName,
            boolean isSelfScanOnlyProvider,
            int userId) {
        super(componentName);
        mContext = Objects.requireNonNull(context, "Context must not be null.");
        mIsSelfScanOnlyProvider = isSelfScanOnlyProvider;
        mUserId = userId;
        mHandler = new Handler(Looper.myLooper());
    }
@@ -107,8 +114,11 @@ final class MediaRoute2ProviderServiceProxy extends MediaRoute2Provider
    }

    @Override
    public void updateDiscoveryPreference(RouteDiscoveryPreference discoveryPreference) {
    public void updateDiscoveryPreference(
            Set<String> activelyScanningPackages, RouteDiscoveryPreference discoveryPreference) {
        mLastDiscoveryPreference = discoveryPreference;
        mLastDiscoveryPreferenceIncludesThisPackage =
                activelyScanningPackages.contains(mComponentName.getPackageName());
        if (mConnectionReady) {
            mActiveConnection.updateDiscoveryPreference(discoveryPreference);
        }
@@ -209,11 +219,15 @@ final class MediaRoute2ProviderServiceProxy extends MediaRoute2Provider

    private boolean shouldBind() {
        if (mRunning) {
            // Bind when there is a discovery preference or an active route session.
            return (mLastDiscoveryPreference != null
                    && !mLastDiscoveryPreference.getPreferredFeatures().isEmpty())
                    || !getSessionInfos().isEmpty()
                    || mIsManagerScanning;
            boolean shouldBind =
                    mLastDiscoveryPreference != null
                            && !mLastDiscoveryPreference.getPreferredFeatures().isEmpty();
            if (mIsSelfScanOnlyProvider) {
                shouldBind &= mLastDiscoveryPreferenceIncludesThisPackage;
            }
            shouldBind |= mIsManagerScanning;
            shouldBind |= !getSessionInfos().isEmpty();
            return shouldBind;
        }
        return false;
    }
@@ -301,7 +315,11 @@ final class MediaRoute2ProviderServiceProxy extends MediaRoute2Provider
        if (mActiveConnection == connection) {
            mConnectionReady = true;
            if (mLastDiscoveryPreference != null) {
                updateDiscoveryPreference(mLastDiscoveryPreference);
                updateDiscoveryPreference(
                        mLastDiscoveryPreferenceIncludesThisPackage
                                ? Set.of(mComponentName.getPackageName())
                                : Set.of(),
                        mLastDiscoveryPreference);
            }
        }
    }
+20 −7
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package com.android.server.media;

import static android.content.pm.PackageManager.GET_RESOLVED_FILTER;

import android.annotation.NonNull;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
@@ -34,6 +36,7 @@ import android.util.Slog;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;

/**
 * Watches changes of packages, or scan them for finding media route providers.
@@ -41,8 +44,8 @@ import java.util.Collections;
final class MediaRoute2ProviderWatcher {
    private static final String TAG = "MR2ProviderWatcher";
    private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
    private static final PackageManager.ResolveInfoFlags RESOLVE_INFO_FLAGS_NONE =
            PackageManager.ResolveInfoFlags.of(0);
    private static final PackageManager.ResolveInfoFlags RESOLVE_INFO_FLAGS =
            PackageManager.ResolveInfoFlags.of(GET_RESOLVED_FILTER);

    private final Context mContext;
    private final Callback mCallback;
@@ -118,15 +121,25 @@ final class MediaRoute2ProviderWatcher {
        int targetIndex = 0;
        Intent intent = new Intent(MediaRoute2ProviderService.SERVICE_INTERFACE);
        for (ResolveInfo resolveInfo :
                mPackageManager.queryIntentServicesAsUser(
                        intent, RESOLVE_INFO_FLAGS_NONE, mUserId)) {
                mPackageManager.queryIntentServicesAsUser(intent, RESOLVE_INFO_FLAGS, mUserId)) {
            ServiceInfo serviceInfo = resolveInfo.serviceInfo;
            if (serviceInfo != null) {
                boolean isSelfScanOnlyProvider = false;
                Iterator<String> categoriesIterator = resolveInfo.filter.categoriesIterator();
                if (categoriesIterator != null) {
                    while (categoriesIterator.hasNext()) {
                        isSelfScanOnlyProvider |=
                                MediaRoute2ProviderService.CATEGORY_SELF_SCAN_ONLY.equals(
                                        categoriesIterator.next());
                    }
                }
                int sourceIndex = findProvider(serviceInfo.packageName, serviceInfo.name);
                if (sourceIndex < 0) {
                    MediaRoute2ProviderServiceProxy proxy =
                            new MediaRoute2ProviderServiceProxy(mContext,
                            new MediaRoute2ProviderServiceProxy(
                                    mContext,
                                    new ComponentName(serviceInfo.packageName, serviceInfo.name),
                                    isSelfScanOnlyProvider,
                                    mUserId);
                    proxy.start();
                    mProxies.add(targetIndex++, proxy);
Loading