From 5f0edaaaf55f26420345a1cd690b988f752d17c6 Mon Sep 17 00:00:00 2001 From: Mathew Inwood Date: Mon, 2 Nov 2020 10:29:35 +0000 Subject: Add maxTargetSdk restriction to unused APIs. These are APIs that have @UnsupportedAppUsage but for which we don't have any evidence of them currently being used, so should be safe to remove from the unsupported list. Bug: 170729553 Test: Treehugger Merged-In: I8285daa8530260251ecad6f3f38f98e263629ca7 Change-Id: I626caf7c1fe46c5ab1f39c2895b42a34319f771a --- media/java/android/media/AudioAttributes.java | 4 +-- media/java/android/media/AudioDevicePort.java | 3 ++- .../java/android/media/AudioDevicePortConfig.java | 3 ++- media/java/android/media/AudioFormat.java | 9 ++++--- media/java/android/media/AudioGain.java | 3 ++- media/java/android/media/AudioHandle.java | 3 ++- media/java/android/media/AudioManager.java | 18 ++++++------- media/java/android/media/AudioMixPort.java | 5 ++-- media/java/android/media/AudioMixPortConfig.java | 3 ++- media/java/android/media/AudioPatch.java | 3 ++- media/java/android/media/AudioPort.java | 5 ++-- media/java/android/media/AudioPortConfig.java | 3 ++- .../java/android/media/AudioPortEventHandler.java | 5 ++-- media/java/android/media/AudioRecord.java | 9 ++++--- .../android/media/AudioRecordingConfiguration.java | 3 ++- media/java/android/media/AudioSystem.java | 9 ++++--- media/java/android/media/AudioTrack.java | 7 ++--- media/java/android/media/CamcorderProfile.java | 2 +- media/java/android/media/EncoderCapabilities.java | 13 ++++----- media/java/android/media/IAudioService.aidl | 2 +- .../java/android/media/IRemoteDisplayCallback.aidl | 2 +- media/java/android/media/JetPlayer.java | 5 ++-- media/java/android/media/MediaMetadata.java | 3 ++- media/java/android/media/MediaMuxer.java | 17 ++++++------ media/java/android/media/MediaPlayer.java | 9 ++++--- media/java/android/media/MediaRecorder.java | 2 +- media/java/android/media/MediaRouter.java | 4 +-- media/java/android/media/MicrophoneInfo.java | 3 ++- media/java/android/media/PlaybackParams.java | 14 +++++----- media/java/android/media/RemoteControlClient.java | 5 ++-- media/java/android/media/RemoteController.java | 3 ++- media/java/android/media/RemoteDisplay.java | 7 ++--- media/java/android/media/RemoteDisplayState.java | 5 ++-- media/java/android/media/Ringtone.java | 3 ++- media/java/android/media/RingtoneManager.java | 5 ++-- media/java/android/media/TimedText.java | 3 ++- media/java/android/media/ToneGenerator.java | 3 ++- media/java/android/media/TtmlRenderer.java | 3 ++- media/java/android/media/VolumeShaper.java | 31 +++++++++++----------- media/java/android/media/audiofx/AudioEffect.java | 4 +-- media/java/android/media/audiopolicy/AudioMix.java | 15 ++++++----- .../android/media/audiopolicy/AudioMixingRule.java | 13 ++++----- media/java/android/media/session/MediaSession.java | 3 ++- .../media/soundtrigger/SoundTriggerDetector.java | 5 ++-- .../media/soundtrigger/SoundTriggerManager.java | 5 ++-- media/java/android/media/tv/TvInputInfo.java | 3 ++- media/java/android/media/tv/TvInputService.java | 3 ++- .../android/service/media/MediaBrowserService.java | 3 ++- 48 files changed, 166 insertions(+), 127 deletions(-) (limited to 'media') diff --git a/media/java/android/media/AudioAttributes.java b/media/java/android/media/AudioAttributes.java index 158482a6a833..717074cba26f 100644 --- a/media/java/android/media/AudioAttributes.java +++ b/media/java/android/media/AudioAttributes.java @@ -502,7 +502,7 @@ public final class AudioAttributes implements Parcelable { @Retention(RetentionPolicy.SOURCE) public @interface CapturePolicy {} - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private int mUsage = USAGE_UNKNOWN; @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023) private int mContentType = CONTENT_TYPE_UNKNOWN; @@ -511,7 +511,7 @@ public final class AudioAttributes implements Parcelable { @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023) private int mFlags = 0x0; private HashSet mTags; - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private String mFormattedTags; private Bundle mBundle; // lazy-initialized, may be null diff --git a/media/java/android/media/AudioDevicePort.java b/media/java/android/media/AudioDevicePort.java index f6b04540c5c7..0f79675862c7 100644 --- a/media/java/android/media/AudioDevicePort.java +++ b/media/java/android/media/AudioDevicePort.java @@ -18,6 +18,7 @@ package android.media; import android.annotation.NonNull; import android.compat.annotation.UnsupportedAppUsage; +import android.os.Build; import java.util.Arrays; @@ -41,7 +42,7 @@ public class AudioDevicePort extends AudioPort { private final int[] mEncapsulationModes; private final int[] mEncapsulationMetadataTypes; - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) AudioDevicePort(AudioHandle handle, String deviceName, int[] samplingRates, int[] channelMasks, int[] channelIndexMasks, int[] formats, AudioGain[] gains, int type, String address, int[] encapsulationModes, diff --git a/media/java/android/media/AudioDevicePortConfig.java b/media/java/android/media/AudioDevicePortConfig.java index 51b8037b82f8..69fd82be179b 100644 --- a/media/java/android/media/AudioDevicePortConfig.java +++ b/media/java/android/media/AudioDevicePortConfig.java @@ -17,6 +17,7 @@ package android.media; import android.compat.annotation.UnsupportedAppUsage; +import android.os.Build; /** * An AudioDevicePortConfig describes a possible configuration of an output or input device @@ -28,7 +29,7 @@ import android.compat.annotation.UnsupportedAppUsage; */ public class AudioDevicePortConfig extends AudioPortConfig { - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) AudioDevicePortConfig(AudioDevicePort devicePort, int samplingRate, int channelMask, int format, AudioGainConfig gain) { super((AudioPort)devicePort, samplingRate, channelMask, format, gain); diff --git a/media/java/android/media/AudioFormat.java b/media/java/android/media/AudioFormat.java index 8a60bdebbf09..1d06e2837841 100644 --- a/media/java/android/media/AudioFormat.java +++ b/media/java/android/media/AudioFormat.java @@ -21,6 +21,7 @@ import android.annotation.IntRange; import android.annotation.NonNull; import android.annotation.TestApi; import android.compat.annotation.UnsupportedAppUsage; +import android.os.Build; import android.os.Parcel; import android.os.Parcelable; @@ -685,7 +686,7 @@ public final class AudioFormat implements Parcelable { */ // Update sound trigger JNI in core/jni/android_hardware_SoundTrigger.cpp when modifying this // constructor - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private AudioFormat(int encoding, int sampleRate, int channelMask, int channelIndexMask) { this( AUDIO_FORMAT_HAS_PROPERTY_ENCODING @@ -744,11 +745,11 @@ public final class AudioFormat implements Parcelable { // This is an immutable class, all member variables are final. // Essential values. - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private final int mEncoding; - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private final int mSampleRate; - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private final int mChannelMask; private final int mChannelIndexMask; private final int mPropertySetMask; diff --git a/media/java/android/media/AudioGain.java b/media/java/android/media/AudioGain.java index cae1b59d46a7..98dc06a6a996 100644 --- a/media/java/android/media/AudioGain.java +++ b/media/java/android/media/AudioGain.java @@ -17,6 +17,7 @@ package android.media; import android.compat.annotation.UnsupportedAppUsage; +import android.os.Build; /** * The AudioGain describes a gain controller. Gain controllers are exposed by @@ -71,7 +72,7 @@ public class AudioGain { // The channel mask passed to the constructor is as specified in AudioFormat // (e.g. AudioFormat.CHANNEL_OUT_STEREO) - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) AudioGain(int index, int mode, int channelMask, int minValue, int maxValue, int defaultValue, int stepValue, int rampDurationMinMs, int rampDurationMaxMs) { diff --git a/media/java/android/media/AudioHandle.java b/media/java/android/media/AudioHandle.java index 8fc834f8d0a9..ce51b5a33a9a 100644 --- a/media/java/android/media/AudioHandle.java +++ b/media/java/android/media/AudioHandle.java @@ -17,6 +17,7 @@ package android.media; import android.compat.annotation.UnsupportedAppUsage; +import android.os.Build; /** * The AudioHandle is used by the audio framework implementation to @@ -28,7 +29,7 @@ class AudioHandle { @UnsupportedAppUsage private final int mId; - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) AudioHandle(int id) { mId = id; } diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java index 4a26e8939a50..57b853332f3f 100755 --- a/media/java/android/media/AudioManager.java +++ b/media/java/android/media/AudioManager.java @@ -707,7 +707,7 @@ public class AudioManager { * @hide * For test purposes only, will throw NPE with some methods that require a Context. */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public AudioManager() { mUseVolumeKeySounds = true; mUseFixedVolume = false; @@ -951,7 +951,7 @@ public class AudioManager { * @see #setRingerMode(int) * @hide */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public static boolean isValidRingerMode(int ringerMode) { if (ringerMode < 0 || ringerMode > RINGER_MODE_MAX) { return false; @@ -2011,7 +2011,7 @@ public class AudioManager { * @see #stopBluetoothSco() * @see #ACTION_SCO_AUDIO_STATE_UPDATED */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public void startBluetoothScoVirtualCall() { final IAudioService service = getService(); try { @@ -2163,7 +2163,7 @@ public class AudioManager { * @param on set true to mute the microphone; * false to turn mute off */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public void setMicrophoneMuteFromSwitch(boolean on) { final IAudioService service = getService(); try { @@ -2423,7 +2423,7 @@ public class AudioManager { * display). Note that BT audio sinks are not considered remote devices. * @return true if {@link AudioManager#STREAM_MUSIC} is active on a remote device */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public boolean isMusicActiveRemotely() { return AudioSystem.isStreamActiveRemotely(STREAM_MUSIC, 0); } @@ -2574,7 +2574,7 @@ public class AudioManager { /** * @hide Number of sound effects */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public static final int NUM_SOUND_EFFECTS = 10; /** @@ -3408,7 +3408,7 @@ public class AudioManager { * @param durationHint the type of focus request. AUDIOFOCUS_GAIN_TRANSIENT is recommended so * media applications resume after a call */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public void requestAudioFocusForCall(int streamType, int durationHint) { final IAudioService service = getService(); try { @@ -3512,7 +3512,7 @@ public class AudioManager { * when ringing ends and the call is rejected or not answered. * Should match one or more calls to {@link #requestAudioFocusForCall(int, int)}. */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public void abandonAudioFocusForCall() { final IAudioService service = getService(); try { @@ -4246,7 +4246,7 @@ public class AudioManager { * agent when audio settings are restored and causes the AudioService * to read and apply restored settings. */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public void reloadAudioSettings() { final IAudioService service = getService(); try { diff --git a/media/java/android/media/AudioMixPort.java b/media/java/android/media/AudioMixPort.java index 33d603f0b9da..0e286b0f1f89 100644 --- a/media/java/android/media/AudioMixPort.java +++ b/media/java/android/media/AudioMixPort.java @@ -17,6 +17,7 @@ package android.media; import android.compat.annotation.UnsupportedAppUsage; +import android.os.Build; /** * The AudioMixPort is a specialized type of AudioPort @@ -32,7 +33,7 @@ public class AudioMixPort extends AudioPort { private final int mIoHandle; - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) AudioMixPort(AudioHandle handle, int ioHandle, int role, String deviceName, int[] samplingRates, int[] channelMasks, int[] channelIndexMasks, int[] formats, AudioGain[] gains) { @@ -53,7 +54,7 @@ public class AudioMixPort extends AudioPort { /** * Get the device type (e.g AudioManager.DEVICE_OUT_SPEAKER) */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public int ioHandle() { return mIoHandle; } diff --git a/media/java/android/media/AudioMixPortConfig.java b/media/java/android/media/AudioMixPortConfig.java index 9d8120624a45..483524a8c168 100644 --- a/media/java/android/media/AudioMixPortConfig.java +++ b/media/java/android/media/AudioMixPortConfig.java @@ -17,6 +17,7 @@ package android.media; import android.compat.annotation.UnsupportedAppUsage; +import android.os.Build; /** * An AudioMixPortConfig describes a possible configuration of an output or input mixer. @@ -28,7 +29,7 @@ import android.compat.annotation.UnsupportedAppUsage; public class AudioMixPortConfig extends AudioPortConfig { - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) AudioMixPortConfig(AudioMixPort mixPort, int samplingRate, int channelMask, int format, AudioGainConfig gain) { super((AudioPort)mixPort, samplingRate, channelMask, format, gain); diff --git a/media/java/android/media/AudioPatch.java b/media/java/android/media/AudioPatch.java index e5107d4e3309..99663bf3aab8 100644 --- a/media/java/android/media/AudioPatch.java +++ b/media/java/android/media/AudioPatch.java @@ -17,6 +17,7 @@ package android.media; import android.compat.annotation.UnsupportedAppUsage; +import android.os.Build; /** @@ -36,7 +37,7 @@ public class AudioPatch { private final AudioPortConfig[] mSources; private final AudioPortConfig[] mSinks; - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) AudioPatch(AudioHandle patchHandle, AudioPortConfig[] sources, AudioPortConfig[] sinks) { mHandle = patchHandle; mSources = sources; diff --git a/media/java/android/media/AudioPort.java b/media/java/android/media/AudioPort.java index 7c3ca24e1c9a..e6dc622a11c1 100644 --- a/media/java/android/media/AudioPort.java +++ b/media/java/android/media/AudioPort.java @@ -17,6 +17,7 @@ package android.media; import android.compat.annotation.UnsupportedAppUsage; +import android.os.Build; /** * An audio port is a node of the audio framework or hardware that can be connected to or @@ -82,7 +83,7 @@ public class AudioPort { @UnsupportedAppUsage private AudioPortConfig mActiveConfig; - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) AudioPort(AudioHandle handle, int role, String name, int[] samplingRates, int[] channelMasks, int[] channelIndexMasks, int[] formats, AudioGain[] gains) { @@ -113,7 +114,7 @@ public class AudioPort { /** * Get the audio port role */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public int role() { return mRole; } diff --git a/media/java/android/media/AudioPortConfig.java b/media/java/android/media/AudioPortConfig.java index 16fb5b80eb3e..4dd3cb699a7d 100644 --- a/media/java/android/media/AudioPortConfig.java +++ b/media/java/android/media/AudioPortConfig.java @@ -17,6 +17,7 @@ package android.media; import android.compat.annotation.UnsupportedAppUsage; +import android.os.Build; /** * An AudioPortConfig contains a possible configuration of an audio port chosen @@ -50,7 +51,7 @@ public class AudioPortConfig { static final int CHANNEL_MASK = 0x2; static final int FORMAT = 0x4; static final int GAIN = 0x8; - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) int mConfigMask; @UnsupportedAppUsage diff --git a/media/java/android/media/AudioPortEventHandler.java b/media/java/android/media/AudioPortEventHandler.java index 8e8dfaf24b9a..763eb2944d19 100644 --- a/media/java/android/media/AudioPortEventHandler.java +++ b/media/java/android/media/AudioPortEventHandler.java @@ -17,6 +17,7 @@ package android.media; import android.compat.annotation.UnsupportedAppUsage; +import android.os.Build; import android.os.Handler; import android.os.HandlerThread; import android.os.Message; @@ -54,7 +55,7 @@ class AudioPortEventHandler { * Accessed by native methods: JNI Callback context. */ @SuppressWarnings("unused") - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private long mJniCallback; void init() { @@ -178,7 +179,7 @@ class AudioPortEventHandler { } @SuppressWarnings("unused") - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private static void postEventFromNative(Object module_ref, int what, int arg1, int arg2, Object obj) { AudioPortEventHandler eventHandler = diff --git a/media/java/android/media/AudioRecord.java b/media/java/android/media/AudioRecord.java index 4d26b8d3f7af..d670f073fe8b 100644 --- a/media/java/android/media/AudioRecord.java +++ b/media/java/android/media/AudioRecord.java @@ -30,6 +30,7 @@ import android.media.audiopolicy.AudioMix; import android.media.audiopolicy.AudioPolicy; import android.media.projection.MediaProjection; import android.os.Binder; +import android.os.Build; import android.os.Handler; import android.os.IBinder; import android.os.Looper; @@ -174,14 +175,14 @@ public class AudioRecord implements AudioRouting, MicrophoneDirection, * Accessed by native methods: provides access to the callback data. */ @SuppressWarnings("unused") - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private long mNativeCallbackCookie; /** * Accessed by native methods: provides access to the JNIDeviceCallback instance. */ @SuppressWarnings("unused") - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private long mNativeDeviceCallback; @@ -261,7 +262,7 @@ public class AudioRecord implements AudioRouting, MicrophoneDirection, /** * AudioAttributes */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private AudioAttributes mAudioAttributes; private boolean mIsSubmixFullVolume = false; @@ -1960,7 +1961,7 @@ public class AudioRecord implements AudioRouting, MicrophoneDirection, // Java methods called from the native side //-------------------- @SuppressWarnings("unused") - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private static void postEventFromNative(Object audiorecord_ref, int what, int arg1, int arg2, Object obj) { //logd("Event posted from the native side: event="+ what + " args="+ arg1+" "+arg2); diff --git a/media/java/android/media/AudioRecordingConfiguration.java b/media/java/android/media/AudioRecordingConfiguration.java index 42841d178401..6febabe0aefc 100644 --- a/media/java/android/media/AudioRecordingConfiguration.java +++ b/media/java/android/media/AudioRecordingConfiguration.java @@ -23,6 +23,7 @@ import android.annotation.SystemApi; import android.annotation.TestApi; import android.compat.annotation.UnsupportedAppUsage; import android.media.audiofx.AudioEffect; +import android.os.Build; import android.os.Parcel; import android.os.Parcelable; import android.util.Log; @@ -222,7 +223,7 @@ public final class AudioRecordingConfiguration implements Parcelable { *
When called without the permission, the result is an empty string. * @return the package name */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public String getClientPackageName() { return mClientPackageName; } /** diff --git a/media/java/android/media/AudioSystem.java b/media/java/android/media/AudioSystem.java index 20905380a2f1..f1eb53dda5b9 100644 --- a/media/java/android/media/AudioSystem.java +++ b/media/java/android/media/AudioSystem.java @@ -25,6 +25,7 @@ import android.content.Context; import android.content.pm.PackageManager; import android.media.audiofx.AudioEffect; import android.media.audiopolicy.AudioMix; +import android.os.Build; import android.telephony.TelephonyManager; import android.util.Log; @@ -81,7 +82,7 @@ public class AudioSystem public static final int STREAM_BLUETOOTH_SCO = 6; /** @hide Used to identify the volume of audio streams for enforced system sounds in certain * countries (e.g camera in Japan) */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public static final int STREAM_SYSTEM_ENFORCED = 7; /** @hide Used to identify the volume of audio streams for DTMF tones */ public static final int STREAM_DTMF = 8; @@ -594,7 +595,7 @@ public class AudioSystem } } - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private static void dynamicPolicyCallbackFromNative(int event, String regId, int val) { DynamicPolicyCallback cb; @@ -671,7 +672,7 @@ public class AudioSystem * @param effects * @param activeSource */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private static void recordingCallbackFromNative(int event, int riid, int uid, int session, int source, int portId, boolean silenced, int[] recordingFormat, AudioEffect.Descriptor[] clientEffects, AudioEffect.Descriptor[] effects, @@ -1485,7 +1486,7 @@ public class AudioSystem @UnsupportedAppUsage public static native int setMasterMute(boolean mute); /** @hide */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public static native boolean getMasterMute(); /** @hide */ @UnsupportedAppUsage diff --git a/media/java/android/media/AudioTrack.java b/media/java/android/media/AudioTrack.java index fa6a4ff5af67..b2c2c4b1bbb4 100644 --- a/media/java/android/media/AudioTrack.java +++ b/media/java/android/media/AudioTrack.java @@ -27,6 +27,7 @@ import android.annotation.SystemApi; import android.annotation.TestApi; import android.compat.annotation.UnsupportedAppUsage; import android.os.Binder; +import android.os.Build; import android.os.Handler; import android.os.HandlerThread; import android.os.Looper; @@ -579,7 +580,7 @@ public class AudioTrack extends PlayerBase * the native AudioTrack object, but not stored in it). */ @SuppressWarnings("unused") - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private long mJniData; @@ -875,7 +876,7 @@ public class AudioTrack extends PlayerBase /** * @hide */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) /* package */ void deferred_connect(long nativeTrackInJavaObj) { if (mState != STATE_INITIALIZED) { // Note that for this native_setup, we are providing an already created/initialized @@ -4012,7 +4013,7 @@ public class AudioTrack extends PlayerBase // Java methods called from the native side //-------------------- @SuppressWarnings("unused") - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private static void postEventFromNative(Object audiotrack_ref, int what, int arg1, int arg2, Object obj) { //logd("Event posted from the native side: event="+ what + " args="+ arg1+" "+arg2); diff --git a/media/java/android/media/CamcorderProfile.java b/media/java/android/media/CamcorderProfile.java index f89893136804..210fe3d42130 100644 --- a/media/java/android/media/CamcorderProfile.java +++ b/media/java/android/media/CamcorderProfile.java @@ -555,7 +555,7 @@ public class CamcorderProfile // Methods implemented by JNI @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023) private static native final void native_init(); - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private static native final CamcorderProfile native_get_camcorder_profile( int cameraId, int quality); private static native final boolean native_has_camcorder_profile( diff --git a/media/java/android/media/EncoderCapabilities.java b/media/java/android/media/EncoderCapabilities.java index 67ce0f7cc0b9..768b6431f1a9 100644 --- a/media/java/android/media/EncoderCapabilities.java +++ b/media/java/android/media/EncoderCapabilities.java @@ -17,6 +17,7 @@ package android.media; import android.compat.annotation.UnsupportedAppUsage; +import android.os.Build; import java.util.ArrayList; import java.util.List; @@ -44,19 +45,19 @@ public class EncoderCapabilities */ static public class VideoEncoderCap { // These are not modifiable externally, thus are public accessible - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public final int mCodec; // @see android.media.MediaRecorder.VideoEncoder public final int mMinBitRate; // min bit rate (bps) public final int mMaxBitRate; // max bit rate (bps) public final int mMinFrameRate; // min frame rate (fps) public final int mMaxFrameRate; // max frame rate (fps) - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public final int mMinFrameWidth; // min frame width (pixel) - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public final int mMaxFrameWidth; // max frame width (pixel) - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public final int mMinFrameHeight; // min frame height (pixel) - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public final int mMaxFrameHeight; // max frame height (pixel) // Private constructor called by JNI @@ -134,7 +135,7 @@ public class EncoderCapabilities * Returns the capabilities of the supported video encoders. * @see android.media.EncoderCapabilities.VideoEncoderCap */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public static List getVideoEncoders() { int nEncoders = native_get_num_video_encoders(); if (nEncoders == 0) return null; diff --git a/media/java/android/media/IAudioService.aidl b/media/java/android/media/IAudioService.aidl index 4cf236a84eb0..78806eb9e547 100755 --- a/media/java/android/media/IAudioService.aidl +++ b/media/java/android/media/IAudioService.aidl @@ -76,7 +76,7 @@ interface IAudioService { void adjustStreamVolume(int streamType, int direction, int flags, String callingPackage); - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = 30, trackingBug = 170729553) void setStreamVolume(int streamType, int index, int flags, String callingPackage); oneway void handleVolumeKey(in KeyEvent event, boolean isOnTv, diff --git a/media/java/android/media/IRemoteDisplayCallback.aidl b/media/java/android/media/IRemoteDisplayCallback.aidl index 584417d65121..75813c9ba593 100644 --- a/media/java/android/media/IRemoteDisplayCallback.aidl +++ b/media/java/android/media/IRemoteDisplayCallback.aidl @@ -22,6 +22,6 @@ import android.media.RemoteDisplayState; * {@hide} */ oneway interface IRemoteDisplayCallback { - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = 30, trackingBug = 170729553) void onStateChanged(in RemoteDisplayState state); } diff --git a/media/java/android/media/JetPlayer.java b/media/java/android/media/JetPlayer.java index 84ee09b35b81..875c6f52d9b2 100644 --- a/media/java/android/media/JetPlayer.java +++ b/media/java/android/media/JetPlayer.java @@ -19,6 +19,7 @@ package android.media; import android.compat.annotation.UnsupportedAppUsage; import android.content.res.AssetFileDescriptor; +import android.os.Build; import android.os.Handler; import android.os.Looper; import android.os.Message; @@ -130,7 +131,7 @@ public class JetPlayer * Accessed by native methods: provides access to C++ JetPlayer object */ @SuppressWarnings("unused") - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private long mNativePlayerInJavaObj; @@ -564,7 +565,7 @@ public class JetPlayer // Called exclusively by native code //-------------------- @SuppressWarnings("unused") - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private static void postEventFromNative(Object jetplayer_ref, int what, int arg1, int arg2) { //logd("Event posted from the native side: event="+ what + " args="+ arg1+" "+arg2); diff --git a/media/java/android/media/MediaMetadata.java b/media/java/android/media/MediaMetadata.java index a23191f36efc..6dfbe2dd559b 100644 --- a/media/java/android/media/MediaMetadata.java +++ b/media/java/android/media/MediaMetadata.java @@ -24,6 +24,7 @@ import android.graphics.BitmapFactory; import android.media.browse.MediaBrowser; import android.media.session.MediaController; import android.net.Uri; +import android.os.Build; import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; @@ -627,7 +628,7 @@ public final class MediaMetadata implements Parcelable { * @return The key used by this class or null if no mapping exists * @hide */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public static String getKeyFromMetadataEditorKey(int editorKey) { return EDITOR_KEY_MAPPING.get(editorKey, null); } diff --git a/media/java/android/media/MediaMuxer.java b/media/java/android/media/MediaMuxer.java index 54675d018038..ac19c21ae085 100644 --- a/media/java/android/media/MediaMuxer.java +++ b/media/java/android/media/MediaMuxer.java @@ -20,6 +20,7 @@ import android.annotation.IntDef; import android.annotation.NonNull; import android.compat.annotation.UnsupportedAppUsage; import android.media.MediaCodec.BufferInfo; +import android.os.Build; import dalvik.system.CloseGuard; @@ -286,10 +287,10 @@ final public class MediaMuxer { public @interface Format {} // All the native functions are listed here. - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private static native long nativeSetup(@NonNull FileDescriptor fd, int format) throws IllegalArgumentException, IOException; - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private static native void nativeRelease(long nativeObject); private static native void nativeStart(long nativeObject); private static native void nativeStop(long nativeObject); @@ -303,22 +304,22 @@ final public class MediaMuxer { int offset, int size, long presentationTimeUs, @MediaCodec.BufferFlag int flags); // Muxer internal states. - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private static final int MUXER_STATE_UNINITIALIZED = -1; private static final int MUXER_STATE_INITIALIZED = 0; - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private static final int MUXER_STATE_STARTED = 1; - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private static final int MUXER_STATE_STOPPED = 2; - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private int mState = MUXER_STATE_UNINITIALIZED; - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private final CloseGuard mCloseGuard = CloseGuard.get(); private int mLastTrackIndex = -1; - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private long mNativeObject; private String convertMuxerStateCodeToString(int aState) { diff --git a/media/java/android/media/MediaPlayer.java b/media/java/android/media/MediaPlayer.java index 36ae3ec75a99..559786cc7093 100644 --- a/media/java/android/media/MediaPlayer.java +++ b/media/java/android/media/MediaPlayer.java @@ -29,6 +29,7 @@ import android.graphics.SurfaceTexture; import android.media.SubtitleController.Anchor; import android.media.SubtitleTrack.RenderingWidget; import android.net.Uri; +import android.os.Build; import android.os.Handler; import android.os.HandlerThread; import android.os.IBinder; @@ -1142,7 +1143,7 @@ public class MediaPlayer extends PlayerBase setDataSource(path, headers, null); } - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private void setDataSource(String path, Map headers, List cookies) throws IOException, IllegalArgumentException, SecurityException, IllegalStateException { @@ -1163,7 +1164,7 @@ public class MediaPlayer extends PlayerBase setDataSource(path, keys, values, cookies); } - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private void setDataSource(String path, String[] keys, String[] values, List cookies) throws IOException, IllegalArgumentException, SecurityException, IllegalStateException { @@ -4217,7 +4218,7 @@ public class MediaPlayer extends PlayerBase * JAVA framework to avoid triggering track scanning. * @hide */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public static final int MEDIA_INFO_EXTERNAL_METADATA_UPDATE = 803; /** Informs that audio is not playing. Note that playback of the video @@ -4237,7 +4238,7 @@ public class MediaPlayer extends PlayerBase * * {@hide} */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public static final int MEDIA_INFO_TIMED_TEXT_ERROR = 900; /** Subtitle track was not supported by the media framework. diff --git a/media/java/android/media/MediaRecorder.java b/media/java/android/media/MediaRecorder.java index 4198d7917932..73ef31504b74 100644 --- a/media/java/android/media/MediaRecorder.java +++ b/media/java/android/media/MediaRecorder.java @@ -108,7 +108,7 @@ public class MediaRecorder implements AudioRouting, private long mNativeContext; @SuppressWarnings("unused") - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private Surface mSurface; @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023) diff --git a/media/java/android/media/MediaRouter.java b/media/java/android/media/MediaRouter.java index 6fa378724240..cf643dd113f5 100644 --- a/media/java/android/media/MediaRouter.java +++ b/media/java/android/media/MediaRouter.java @@ -843,7 +843,7 @@ public class MediaRouter { } /** @hide */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public RouteInfo getSelectedRoute() { return getSelectedRoute(ROUTE_TYPE_ANY); } @@ -1756,7 +1756,7 @@ public class MediaRouter { return getName(context.getResources()); } - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) CharSequence getName(Resources res) { if (mNameResId != 0) { return res.getText(mNameResId); diff --git a/media/java/android/media/MicrophoneInfo.java b/media/java/android/media/MicrophoneInfo.java index 876628fefff4..a46db1dd9350 100644 --- a/media/java/android/media/MicrophoneInfo.java +++ b/media/java/android/media/MicrophoneInfo.java @@ -19,6 +19,7 @@ package android.media; import android.annotation.IntDef; import android.annotation.NonNull; import android.compat.annotation.UnsupportedAppUsage; +import android.os.Build; import android.util.Pair; import java.lang.annotation.Retention; @@ -164,7 +165,7 @@ public final class MicrophoneInfo { private int mType; private int mDirectionality; - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) MicrophoneInfo(String deviceId, int type, String address, int location, int group, int indexInTheGroup, Coordinate3F position, Coordinate3F orientation, List> frequencyResponse, diff --git a/media/java/android/media/PlaybackParams.java b/media/java/android/media/PlaybackParams.java index f24f831d0333..080b9a4513ee 100644 --- a/media/java/android/media/PlaybackParams.java +++ b/media/java/android/media/PlaybackParams.java @@ -87,23 +87,23 @@ public final class PlaybackParams implements Parcelable { public static final int AUDIO_STRETCH_MODE_VOICE = 1; // flags to indicate which params are actually set - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private static final int SET_SPEED = 1 << 0; - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private static final int SET_PITCH = 1 << 1; - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private static final int SET_AUDIO_FALLBACK_MODE = 1 << 2; - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private static final int SET_AUDIO_STRETCH_MODE = 1 << 3; @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023) private int mSet = 0; // params - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private int mAudioFallbackMode = AUDIO_FALLBACK_MODE_DEFAULT; - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private int mAudioStretchMode = AUDIO_STRETCH_MODE_DEFAULT; - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private float mPitch = 1.0f; @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023) private float mSpeed = 1.0f; diff --git a/media/java/android/media/RemoteControlClient.java b/media/java/android/media/RemoteControlClient.java index c5fd3c30236d..60a00529cb5d 100644 --- a/media/java/android/media/RemoteControlClient.java +++ b/media/java/android/media/RemoteControlClient.java @@ -24,6 +24,7 @@ import android.graphics.Bitmap; import android.media.session.MediaSession; import android.media.session.MediaSessionLegacyHelper; import android.media.session.PlaybackState; +import android.os.Build; import android.os.Bundle; import android.os.Looper; import android.os.SystemClock; @@ -816,7 +817,7 @@ import android.util.Log; * position updates. The playback position being "readable" is considered from the application's * point of view. */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public static int MEDIA_POSITION_READABLE = 1 << 0; /** * @hide @@ -824,7 +825,7 @@ import android.util.Log; * playback position updates. The playback position being "writable" * is considered from the application's point of view. */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public static int MEDIA_POSITION_WRITABLE = 1 << 1; /** @hide */ diff --git a/media/java/android/media/RemoteController.java b/media/java/android/media/RemoteController.java index 9e48f1e05391..7807b9b21758 100644 --- a/media/java/android/media/RemoteController.java +++ b/media/java/android/media/RemoteController.java @@ -26,6 +26,7 @@ import android.media.session.MediaSession; import android.media.session.MediaSessionLegacyHelper; import android.media.session.MediaSessionManager; import android.media.session.PlaybackState; +import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.Looper; @@ -78,7 +79,7 @@ import java.util.List; private int mArtworkHeight = -1; private boolean mEnabled = true; // synchronized on mInfoLock, for USE_SESSION apis. - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private MediaController mCurrentSession; /** diff --git a/media/java/android/media/RemoteDisplay.java b/media/java/android/media/RemoteDisplay.java index e529af9da935..2a0e54d1b767 100644 --- a/media/java/android/media/RemoteDisplay.java +++ b/media/java/android/media/RemoteDisplay.java @@ -17,6 +17,7 @@ package android.media; import android.compat.annotation.UnsupportedAppUsage; +import android.os.Build; import android.os.Handler; import android.view.Surface; @@ -127,7 +128,7 @@ public final class RemoteDisplay { } // Called from native. - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private void notifyDisplayConnected(final Surface surface, final int width, final int height, final int flags, final int session) { mHandler.post(new Runnable() { @@ -139,7 +140,7 @@ public final class RemoteDisplay { } // Called from native. - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private void notifyDisplayDisconnected() { mHandler.post(new Runnable() { @Override @@ -150,7 +151,7 @@ public final class RemoteDisplay { } // Called from native. - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private void notifyDisplayError(final int error) { mHandler.post(new Runnable() { @Override diff --git a/media/java/android/media/RemoteDisplayState.java b/media/java/android/media/RemoteDisplayState.java index fed361a960e6..370f5b1326f8 100644 --- a/media/java/android/media/RemoteDisplayState.java +++ b/media/java/android/media/RemoteDisplayState.java @@ -17,6 +17,7 @@ package android.media; import android.compat.annotation.UnsupportedAppUsage; +import android.os.Build; import android.os.Parcel; import android.os.Parcelable; import android.text.TextUtils; @@ -41,10 +42,10 @@ public final class RemoteDisplayState implements Parcelable { /** * A list of all remote displays. */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public final ArrayList displays; - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public RemoteDisplayState() { displays = new ArrayList(); } diff --git a/media/java/android/media/Ringtone.java b/media/java/android/media/Ringtone.java index d02b49697821..bd783ce9f6b2 100644 --- a/media/java/android/media/Ringtone.java +++ b/media/java/android/media/Ringtone.java @@ -26,6 +26,7 @@ import android.content.res.Resources.NotFoundException; import android.database.Cursor; import android.net.Uri; import android.os.Binder; +import android.os.Build; import android.os.RemoteException; import android.provider.MediaStore; import android.provider.MediaStore.MediaColumns; @@ -73,7 +74,7 @@ public class Ringtone { private final IRingtonePlayer mRemotePlayer; private final Binder mRemoteToken; - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private MediaPlayer mLocalPlayer; private final MyOnCompletionListener mCompletionListener = new MyOnCompletionListener(); diff --git a/media/java/android/media/RingtoneManager.java b/media/java/android/media/RingtoneManager.java index 9deeb8fbab16..e2e13b048cf7 100644 --- a/media/java/android/media/RingtoneManager.java +++ b/media/java/android/media/RingtoneManager.java @@ -36,6 +36,7 @@ import android.content.res.AssetFileDescriptor; import android.database.Cursor; import android.database.StaleDataException; import android.net.Uri; +import android.os.Build; import android.os.Environment; import android.os.FileUtils; import android.os.IBinder; @@ -585,7 +586,7 @@ public class RingtoneManager { return new ExternalRingtonesCursorWrapper(res, MediaStore.Audio.Media.EXTERNAL_CONTENT_URI); } - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private Cursor getMediaRingtones(Context context) { // MediaStore now returns ringtones on other storage devices, even when // we don't have storage or audio permissions @@ -728,7 +729,7 @@ public class RingtoneManager { * @param volumeShaperConfig config for volume shaper of the ringtone if applied. * @see #getRingtone(Context, Uri) */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private static Ringtone getRingtone( final Context context, Uri ringtoneUri, int streamType, @Nullable VolumeShaper.Configuration volumeShaperConfig) { diff --git a/media/java/android/media/TimedText.java b/media/java/android/media/TimedText.java index 120642a8e7cb..fd615472903d 100644 --- a/media/java/android/media/TimedText.java +++ b/media/java/android/media/TimedText.java @@ -18,6 +18,7 @@ package android.media; import android.compat.annotation.UnsupportedAppUsage; import android.graphics.Rect; +import android.os.Build; import android.os.Parcel; import android.util.Log; @@ -736,7 +737,7 @@ public final class TimedText * List of CharPos, Karaoke, Font, Style, and HyperText, or 3) an instance of * Justification. */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private Object getObject(final int key) { if (containsKey(key)) { return mKeyObjectMap.get(key); diff --git a/media/java/android/media/ToneGenerator.java b/media/java/android/media/ToneGenerator.java index cc114a9092e1..140e70d32c78 100644 --- a/media/java/android/media/ToneGenerator.java +++ b/media/java/android/media/ToneGenerator.java @@ -17,6 +17,7 @@ package android.media; import android.compat.annotation.UnsupportedAppUsage; +import android.os.Build; @@ -895,6 +896,6 @@ public class ToneGenerator protected void finalize() { native_finalize(); } @SuppressWarnings("unused") - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private long mNativeContext; // accessed by native methods } diff --git a/media/java/android/media/TtmlRenderer.java b/media/java/android/media/TtmlRenderer.java index e5782642f4eb..3a6c3909bbaf 100644 --- a/media/java/android/media/TtmlRenderer.java +++ b/media/java/android/media/TtmlRenderer.java @@ -18,6 +18,7 @@ package android.media; import android.compat.annotation.UnsupportedAppUsage; import android.content.Context; +import android.os.Build; import android.text.TextUtils; import android.util.AttributeSet; import android.util.Log; @@ -49,7 +50,7 @@ public class TtmlRenderer extends SubtitleController.Renderer { private TtmlRenderingWidget mRenderingWidget; - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public TtmlRenderer(Context context) { mContext = context; } diff --git a/media/java/android/media/VolumeShaper.java b/media/java/android/media/VolumeShaper.java index 99dfe1e8e32f..df8d08e8e846 100644 --- a/media/java/android/media/VolumeShaper.java +++ b/media/java/android/media/VolumeShaper.java @@ -20,6 +20,7 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.TestApi; import android.compat.annotation.UnsupportedAppUsage; +import android.os.Build; import android.os.Parcel; import android.os.Parcelable; @@ -413,23 +414,23 @@ public final class VolumeShaper implements AutoCloseable { */ // type of VolumeShaper - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private final int mType; // valid when mType is TYPE_ID - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private final int mId; // valid when mType is TYPE_SCALE - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private final int mOptionFlags; - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private final double mDurationMs; - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private final int mInterpolatorType; - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private final float[] mTimes; - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private final float[] mVolumes; @Override @@ -572,7 +573,7 @@ public final class VolumeShaper implements AutoCloseable { * Direct constructor for VolumeShaper. * Use the Builder instead. */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private Configuration(@Type int type, int id, @OptionFlag int optionFlags, @@ -1132,11 +1133,11 @@ public final class VolumeShaper implements AutoCloseable { private static final int FLAG_PUBLIC_ALL = FLAG_REVERSE | FLAG_TERMINATE; - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private final int mFlags; - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private final int mReplaceId; - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private final float mXOffset; @Override @@ -1198,7 +1199,7 @@ public final class VolumeShaper implements AutoCloseable { } }; - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private Operation(@Flag int flags, int replaceId, float xOffset) { mFlags = flags; mReplaceId = replaceId; @@ -1358,9 +1359,9 @@ public final class VolumeShaper implements AutoCloseable { * Not for public use. */ public static final class State implements Parcelable { - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private float mVolume; - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private float mXOffset; @Override @@ -1411,7 +1412,7 @@ public final class VolumeShaper implements AutoCloseable { } }; - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) /* package */ State(float volume, float xOffset) { mVolume = volume; mXOffset = xOffset; diff --git a/media/java/android/media/audiofx/AudioEffect.java b/media/java/android/media/audiofx/AudioEffect.java index 42635216e98f..0c6cc652f940 100644 --- a/media/java/android/media/audiofx/AudioEffect.java +++ b/media/java/android/media/audiofx/AudioEffect.java @@ -902,7 +902,7 @@ public class AudioEffect { * In case of success, the returns the number of meaningful integers in value array. * @hide */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public int getParameter(int[] param, int[] value) throws IllegalStateException { if (param.length > 2 || value.length > 2) { @@ -971,7 +971,7 @@ public class AudioEffect { * @see #getParameter(byte[], byte[]) * @hide */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public int getParameter(int[] param, byte[] value) throws IllegalStateException { if (param.length > 2) { diff --git a/media/java/android/media/audiopolicy/AudioMix.java b/media/java/android/media/audiopolicy/AudioMix.java index 4e451c6e42b1..221147dcad8f 100644 --- a/media/java/android/media/audiopolicy/AudioMix.java +++ b/media/java/android/media/audiopolicy/AudioMix.java @@ -23,6 +23,7 @@ import android.compat.annotation.UnsupportedAppUsage; import android.media.AudioDeviceInfo; import android.media.AudioFormat; import android.media.AudioSystem; +import android.os.Build; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -34,24 +35,24 @@ import java.util.Objects; @SystemApi public class AudioMix { - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private AudioMixingRule mRule; - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private AudioFormat mFormat; - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private int mRouteFlags; - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private int mMixType = MIX_TYPE_INVALID; // written by AudioPolicy int mMixState = MIX_STATE_DISABLED; - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) int mCallbackFlags; - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) String mDeviceAddress; // initialized in constructor, read by AudioPolicyConfig - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) final int mDeviceSystemType; // an AudioSystem.DEVICE_* value, not AudioDeviceInfo.TYPE_* /** diff --git a/media/java/android/media/audiopolicy/AudioMixingRule.java b/media/java/android/media/audiopolicy/AudioMixingRule.java index f6f982a4ebe2..de153135eeb9 100644 --- a/media/java/android/media/audiopolicy/AudioMixingRule.java +++ b/media/java/android/media/audiopolicy/AudioMixingRule.java @@ -20,6 +20,7 @@ import android.annotation.NonNull; import android.annotation.SystemApi; import android.compat.annotation.UnsupportedAppUsage; import android.media.AudioAttributes; +import android.os.Build; import android.os.Parcel; import android.util.Log; @@ -109,11 +110,11 @@ public class AudioMixingRule { /** @hide */ public static final class AudioMixMatchCriterion { - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) final AudioAttributes mAttr; - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) final int mIntProp; - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) final int mRule; /** input parameters must be valid */ @@ -199,13 +200,13 @@ public class AudioMixingRule { private final int mTargetMixType; int getTargetMixType() { return mTargetMixType; } - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private final ArrayList mCriteria; /** @hide */ public ArrayList getCriteria() { return mCriteria; } - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private boolean mAllowPrivilegedPlaybackCapture = false; - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private boolean mVoiceCommunicationCaptureAllowed = false; /** @hide */ diff --git a/media/java/android/media/session/MediaSession.java b/media/java/android/media/session/MediaSession.java index 8bf462c5a5cf..a637fcbcd138 100644 --- a/media/java/android/media/session/MediaSession.java +++ b/media/java/android/media/session/MediaSession.java @@ -33,6 +33,7 @@ import android.media.VolumeProvider; import android.media.session.MediaSessionManager.RemoteUserInfo; import android.net.Uri; import android.os.BadParcelableException; +import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.Looper; @@ -1397,7 +1398,7 @@ public final class MediaSession { public static final int UNKNOWN_ID = -1; private final MediaDescription mDescription; - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private final long mId; /** diff --git a/media/java/android/media/soundtrigger/SoundTriggerDetector.java b/media/java/android/media/soundtrigger/SoundTriggerDetector.java index 08953392ca18..4f4090d9ef86 100644 --- a/media/java/android/media/soundtrigger/SoundTriggerDetector.java +++ b/media/java/android/media/soundtrigger/SoundTriggerDetector.java @@ -28,6 +28,7 @@ import android.hardware.soundtrigger.SoundTrigger; import android.hardware.soundtrigger.SoundTrigger.ModuleProperties; import android.hardware.soundtrigger.SoundTrigger.RecognitionConfig; import android.media.AudioFormat; +import android.os.Build; import android.os.Handler; import android.os.Looper; import android.os.Message; @@ -192,7 +193,7 @@ public final class SoundTriggerDetector { * @hide */ @Nullable - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public byte[] getData() { if (!mTriggerAvailable) { return mData; @@ -220,7 +221,7 @@ public final class SoundTriggerDetector { * @hide */ @Nullable - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public Integer getCaptureSession() { if (mCaptureAvailable) { return mCaptureSession; diff --git a/media/java/android/media/soundtrigger/SoundTriggerManager.java b/media/java/android/media/soundtrigger/SoundTriggerManager.java index 7d51b104a47d..edfc98b7ba0d 100644 --- a/media/java/android/media/soundtrigger/SoundTriggerManager.java +++ b/media/java/android/media/soundtrigger/SoundTriggerManager.java @@ -33,6 +33,7 @@ import android.hardware.soundtrigger.SoundTrigger.KeyphraseSoundModel; import android.hardware.soundtrigger.SoundTrigger.ModelParamRange; import android.hardware.soundtrigger.SoundTrigger.RecognitionConfig; import android.hardware.soundtrigger.SoundTrigger.SoundModel; +import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.ParcelUuid; @@ -363,7 +364,7 @@ public final class SoundTriggerManager { * @hide */ @RequiresPermission(android.Manifest.permission.MANAGE_SOUND_TRIGGER) - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public int stopRecognition(UUID soundModelId) { if (soundModelId == null) { return STATUS_ERROR; @@ -380,7 +381,7 @@ public final class SoundTriggerManager { * @hide */ @RequiresPermission(android.Manifest.permission.MANAGE_SOUND_TRIGGER) - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public int unloadSoundModel(UUID soundModelId) { if (soundModelId == null) { return STATUS_ERROR; diff --git a/media/java/android/media/tv/TvInputInfo.java b/media/java/android/media/tv/TvInputInfo.java index 377b2bc19c6b..195ad5bc10f9 100644 --- a/media/java/android/media/tv/TvInputInfo.java +++ b/media/java/android/media/tv/TvInputInfo.java @@ -38,6 +38,7 @@ import android.hardware.hdmi.HdmiDeviceInfo; import android.hardware.hdmi.HdmiUtils; import android.hardware.hdmi.HdmiUtils.HdmiAddressRelativePosition; import android.net.Uri; +import android.os.Build; import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; @@ -326,7 +327,7 @@ public final class TvInputInfo implements Parcelable { * Returns the component of the service that implements this TV input. * @hide */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public ComponentName getComponent() { return new ComponentName(mService.serviceInfo.packageName, mService.serviceInfo.name); } diff --git a/media/java/android/media/tv/TvInputService.java b/media/java/android/media/tv/TvInputService.java index 95199cc8e045..abbf4780bcc1 100755 --- a/media/java/android/media/tv/TvInputService.java +++ b/media/java/android/media/tv/TvInputService.java @@ -34,6 +34,7 @@ import android.hardware.hdmi.HdmiDeviceInfo; import android.media.PlaybackParams; import android.net.Uri; import android.os.AsyncTask; +import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.IBinder; @@ -385,7 +386,7 @@ public abstract class TvInputService extends Service { private OverlayViewCleanUpTask mOverlayViewCleanUpTask; private boolean mOverlayViewEnabled; private IBinder mWindowToken; - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private Rect mOverlayFrame; private long mStartPositionMs = TvInputManager.TIME_SHIFT_INVALID_TIME; private long mCurrentPositionMs = TvInputManager.TIME_SHIFT_INVALID_TIME; diff --git a/media/java/android/service/media/MediaBrowserService.java b/media/java/android/service/media/MediaBrowserService.java index 06adf30a8303..9e9d511b1488 100644 --- a/media/java/android/service/media/MediaBrowserService.java +++ b/media/java/android/service/media/MediaBrowserService.java @@ -32,6 +32,7 @@ import android.media.session.MediaSession; import android.media.session.MediaSessionManager; import android.media.session.MediaSessionManager.RemoteUserInfo; import android.os.Binder; +import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.IBinder; @@ -87,7 +88,7 @@ public abstract class MediaBrowserService extends Service { * A key for passing the MediaItem to the ResultReceiver in getItem. * @hide */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public static final String KEY_MEDIA_ITEM = "media_item"; private static final int RESULT_FLAG_OPTION_NOT_HANDLED = 1 << 0; -- cgit v1.2.3 From ed15eee545584a75ba4825a2f8650f4db470ad4a Mon Sep 17 00:00:00 2001 From: Mikhail Naganov Date: Fri, 31 Jul 2020 17:42:20 -0700 Subject: Update Visualizer implementation after changes in AudioEffect AudioEffect was fixed to remove a call to AudioEffect::set away from the constructor. Bug: 162323621 Bug: 174222126 Test: repro steps from the bug atest android.media.cts.VisualizerTest Change-Id: I90ac6e4fe0a1229758a98a63a3b7810de60469be Merged-In: I90ac6e4fe0a1229758a98a63a3b7810de60469be --- media/jni/audioeffect/Visualizer.cpp | 33 ++++++++++++--------- media/jni/audioeffect/Visualizer.h | 34 +++++++++++++--------- .../jni/audioeffect/android_media_AudioEffect.cpp | 21 +++++++------ media/jni/audioeffect/android_media_Visualizer.cpp | 10 +++---- 4 files changed, 55 insertions(+), 43 deletions(-) (limited to 'media') diff --git a/media/jni/audioeffect/Visualizer.cpp b/media/jni/audioeffect/Visualizer.cpp index efeb3352d393..d92c7caf57a6 100644 --- a/media/jni/audioeffect/Visualizer.cpp +++ b/media/jni/audioeffect/Visualizer.cpp @@ -33,21 +33,9 @@ namespace android { // --------------------------------------------------------------------------- -Visualizer::Visualizer (const String16& opPackageName, - int32_t priority, - effect_callback_t cbf, - void* user, - audio_session_t sessionId) - : AudioEffect(SL_IID_VISUALIZATION, opPackageName, NULL, priority, cbf, user, sessionId), - mCaptureRate(CAPTURE_RATE_DEF), - mCaptureSize(CAPTURE_SIZE_DEF), - mSampleRate(44100000), - mScalingMode(VISUALIZER_SCALING_MODE_NORMALIZED), - mMeasurementMode(MEASUREMENT_MODE_NONE), - mCaptureCallBack(NULL), - mCaptureCbkUser(NULL) +Visualizer::Visualizer (const String16& opPackageName) + : AudioEffect(opPackageName) { - initCaptureSize(); } Visualizer::~Visualizer() @@ -57,6 +45,23 @@ Visualizer::~Visualizer() setCaptureCallBack(NULL, NULL, 0, 0); } +status_t Visualizer::set(int32_t priority, + effect_callback_t cbf, + void* user, + audio_session_t sessionId, + audio_io_handle_t io, + const AudioDeviceTypeAddr& device, + bool probe) +{ + status_t status = AudioEffect::set( + SL_IID_VISUALIZATION, nullptr, priority, cbf, user, sessionId, io, device, probe); + if (status == NO_ERROR || status == ALREADY_EXISTS) { + initCaptureSize(); + } + return status; +} + + void Visualizer::release() { ALOGV("Visualizer::release()"); diff --git a/media/jni/audioeffect/Visualizer.h b/media/jni/audioeffect/Visualizer.h index d4672a95c6d8..8b6a62f25638 100644 --- a/media/jni/audioeffect/Visualizer.h +++ b/media/jni/audioeffect/Visualizer.h @@ -65,14 +65,22 @@ public: /* Constructor. * See AudioEffect constructor for details on parameters. */ - Visualizer(const String16& opPackageName, - int32_t priority = 0, - effect_callback_t cbf = NULL, - void* user = NULL, - audio_session_t sessionId = AUDIO_SESSION_OUTPUT_MIX); + explicit Visualizer(const String16& opPackageName); ~Visualizer(); + /** + * Initialize an uninitialized Visualizer. + * See AudioEffect 'set' function for details on parameters. + */ + status_t set(int32_t priority = 0, + effect_callback_t cbf = NULL, + void* user = NULL, + audio_session_t sessionId = AUDIO_SESSION_OUTPUT_MIX, + audio_io_handle_t io = AUDIO_IO_HANDLE_NONE, + const AudioDeviceTypeAddr& device = {}, + bool probe = false); + // Declared 'final' because we call this in ~Visualizer(). status_t setEnabled(bool enabled) final; @@ -163,15 +171,15 @@ private: uint32_t initCaptureSize(); Mutex mCaptureLock; - uint32_t mCaptureRate; - uint32_t mCaptureSize; - uint32_t mSampleRate; - uint32_t mScalingMode; - uint32_t mMeasurementMode; - capture_cbk_t mCaptureCallBack; - void *mCaptureCbkUser; + uint32_t mCaptureRate = CAPTURE_RATE_DEF; + uint32_t mCaptureSize = CAPTURE_SIZE_DEF; + uint32_t mSampleRate = 44100000; + uint32_t mScalingMode = VISUALIZER_SCALING_MODE_NORMALIZED; + uint32_t mMeasurementMode = MEASUREMENT_MODE_NONE; + capture_cbk_t mCaptureCallBack = nullptr; + void *mCaptureCbkUser = nullptr; sp mCaptureThread; - uint32_t mCaptureFlags; + uint32_t mCaptureFlags = 0; }; diff --git a/media/jni/audioeffect/android_media_AudioEffect.cpp b/media/jni/audioeffect/android_media_AudioEffect.cpp index dbe7b4b619c9..96961ac21a2d 100644 --- a/media/jni/audioeffect/android_media_AudioEffect.cpp +++ b/media/jni/audioeffect/android_media_AudioEffect.cpp @@ -337,22 +337,21 @@ android_media_AudioEffect_native_setup(JNIEnv *env, jobject thiz, jobject weak_t } // create the native AudioEffect object - lpAudioEffect = new AudioEffect(typeStr, - String16(opPackageNameStr.c_str()), - uuidStr, - priority, - effectCallback, - &lpJniStorage->mCallbackData, - (audio_session_t) sessionId, - AUDIO_IO_HANDLE_NONE, - device, - probe); + lpAudioEffect = new AudioEffect(String16(opPackageNameStr.c_str())); if (lpAudioEffect == 0) { ALOGE("Error creating AudioEffect"); goto setup_failure; } - + lpAudioEffect->set(typeStr, + uuidStr, + priority, + effectCallback, + &lpJniStorage->mCallbackData, + (audio_session_t) sessionId, + AUDIO_IO_HANDLE_NONE, + device, + probe); lStatus = AudioEffectJni::translateNativeErrorToJava(lpAudioEffect->initCheck()); if (lStatus != AUDIOEFFECT_SUCCESS && lStatus != AUDIOEFFECT_ERROR_ALREADY_EXISTS) { ALOGE("AudioEffect initCheck failed %d", lStatus); diff --git a/media/jni/audioeffect/android_media_Visualizer.cpp b/media/jni/audioeffect/android_media_Visualizer.cpp index f9a77f474c50..4c5970a30a05 100644 --- a/media/jni/audioeffect/android_media_Visualizer.cpp +++ b/media/jni/audioeffect/android_media_Visualizer.cpp @@ -382,15 +382,15 @@ android_media_visualizer_native_setup(JNIEnv *env, jobject thiz, jobject weak_th } // create the native Visualizer object - lpVisualizer = new Visualizer(String16(opPackageNameStr.c_str()), - 0, - android_media_visualizer_effect_callback, - lpJniStorage, - (audio_session_t) sessionId); + lpVisualizer = new Visualizer(String16(opPackageNameStr.c_str())); if (lpVisualizer == 0) { ALOGE("Error creating Visualizer"); goto setup_failure; } + lpVisualizer->set(0, + android_media_visualizer_effect_callback, + lpJniStorage, + (audio_session_t) sessionId); lStatus = translateError(lpVisualizer->initCheck()); if (lStatus != VISUALIZER_SUCCESS && lStatus != VISUALIZER_ERROR_ALREADY_EXISTS) { -- cgit v1.2.3 From ab813b4f12159a9231870e0865c5e7d2d6cef2d6 Mon Sep 17 00:00:00 2001 From: Santiago Seifert Date: Fri, 20 Nov 2020 20:25:46 +0000 Subject: Expose MediaExtractor entry point to MediaMetrics Bug: 170386720 Test: atest CtsMediaV2TestCases:ExtractorTest$FunctionalityTest Change-Id: Id10861db464b88734c34c81db945b1a828f0bc2c Merged-In: Id10861db464b88734c34c81db945b1a828f0bc2c --- media/jni/android_media_MediaExtractor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'media') diff --git a/media/jni/android_media_MediaExtractor.cpp b/media/jni/android_media_MediaExtractor.cpp index 528dc62c3016..c60203eae759 100644 --- a/media/jni/android_media_MediaExtractor.cpp +++ b/media/jni/android_media_MediaExtractor.cpp @@ -68,7 +68,7 @@ JMediaExtractor::JMediaExtractor(JNIEnv *env, jobject thiz) mClass = (jclass)env->NewGlobalRef(clazz); mObject = env->NewWeakGlobalRef(thiz); - mImpl = new NuMediaExtractor; + mImpl = new NuMediaExtractor(NuMediaExtractor::EntryPoint::SDK); } JMediaExtractor::~JMediaExtractor() { -- cgit v1.2.3 From 6b6699abe5afd5022ce93e7bea39cd08a20d342a Mon Sep 17 00:00:00 2001 From: Santiago Seifert Date: Fri, 20 Nov 2020 20:25:46 +0000 Subject: Expose MediaExtractor entry point to MediaMetrics Bug: 170386720 Test: atest CtsMediaV2TestCases:ExtractorTest$FunctionalityTest Change-Id: Id10861db464b88734c34c81db945b1a828f0bc2c Merged-In: Id10861db464b88734c34c81db945b1a828f0bc2c --- media/jni/android_media_MediaExtractor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'media') diff --git a/media/jni/android_media_MediaExtractor.cpp b/media/jni/android_media_MediaExtractor.cpp index 948ebcd9fdd5..6a622c5a1566 100644 --- a/media/jni/android_media_MediaExtractor.cpp +++ b/media/jni/android_media_MediaExtractor.cpp @@ -68,7 +68,7 @@ JMediaExtractor::JMediaExtractor(JNIEnv *env, jobject thiz) mClass = (jclass)env->NewGlobalRef(clazz); mObject = env->NewWeakGlobalRef(thiz); - mImpl = new NuMediaExtractor; + mImpl = new NuMediaExtractor(NuMediaExtractor::EntryPoint::SDK); } JMediaExtractor::~JMediaExtractor() { -- cgit v1.2.3 From 946d9f1d21b53aed2275544764d48157ab2fdb98 Mon Sep 17 00:00:00 2001 From: jiabin Date: Mon, 14 Dec 2020 21:13:30 -0800 Subject: Add package name when initializing SoundPool. The package name is useful for permission validation. Currently, package name is required when starting external vibration so that the vibrator service can verify if the app has the permission to start vibration. Bug: 175595599 Test: SoundPool tests in cts Test: play audio-coupled-haptic file using SoundPool. Change-Id: Ibfe414063a303118a5bb393d65ea5dc2323bf722 Merged-In: Ibfe414063a303118a5bb393d65ea5dc2323bf722 (cherry picked from commit de9005bab1751e23342bbc9f0f51213eea8885af) --- media/java/android/media/SoundPool.java | 5 +++-- media/jni/soundpool/SoundPool.cpp | 5 +++-- media/jni/soundpool/SoundPool.h | 5 ++++- media/jni/soundpool/Stream.cpp | 4 +++- media/jni/soundpool/StreamManager.cpp | 4 +++- media/jni/soundpool/StreamManager.h | 8 +++++++- media/jni/soundpool/android_media_SoundPool.cpp | 8 +++++--- 7 files changed, 28 insertions(+), 11 deletions(-) (limited to 'media') diff --git a/media/java/android/media/SoundPool.java b/media/java/android/media/SoundPool.java index 1bf2863989a5..3f685a4c934e 100644 --- a/media/java/android/media/SoundPool.java +++ b/media/java/android/media/SoundPool.java @@ -149,7 +149,8 @@ public class SoundPool extends PlayerBase { super(attributes, AudioPlaybackConfiguration.PLAYER_TYPE_JAM_SOUNDPOOL); // do native setup - if (native_setup(new WeakReference(this), maxStreams, attributes) != 0) { + if (native_setup(new WeakReference(this), + maxStreams, attributes, getCurrentOpPackageName()) != 0) { throw new RuntimeException("Native setup failed"); } mAttributes = attributes; @@ -501,7 +502,7 @@ public class SoundPool extends PlayerBase { private native final int _load(FileDescriptor fd, long offset, long length, int priority); private native final int native_setup(Object weakRef, int maxStreams, - Object/*AudioAttributes*/ attributes); + @NonNull Object/*AudioAttributes*/ attributes, @NonNull String opPackageName); private native final int _play(int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate); diff --git a/media/jni/soundpool/SoundPool.cpp b/media/jni/soundpool/SoundPool.cpp index ac44843859f6..253b4e3a8a09 100644 --- a/media/jni/soundpool/SoundPool.cpp +++ b/media/jni/soundpool/SoundPool.cpp @@ -84,8 +84,9 @@ bool checkLoop(int32_t *loop) } // namespace -SoundPool::SoundPool(int32_t maxStreams, const audio_attributes_t* attributes) - : mStreamManager(maxStreams, kStreamManagerThreads, attributes) +SoundPool::SoundPool( + int32_t maxStreams, const audio_attributes_t* attributes, const std::string& opPackageName) + : mStreamManager(maxStreams, kStreamManagerThreads, attributes, opPackageName) { ALOGV("%s(maxStreams=%d, attr={ content_type=%d, usage=%d, flags=0x%x, tags=%s })", __func__, maxStreams, diff --git a/media/jni/soundpool/SoundPool.h b/media/jni/soundpool/SoundPool.h index d5b16ef629cd..ffb1c997393a 100644 --- a/media/jni/soundpool/SoundPool.h +++ b/media/jni/soundpool/SoundPool.h @@ -19,6 +19,8 @@ #include "SoundManager.h" #include "StreamManager.h" +#include + namespace android { /** @@ -29,7 +31,8 @@ namespace android { */ class SoundPool { public: - SoundPool(int32_t maxStreams, const audio_attributes_t* attributes); + SoundPool(int32_t maxStreams, const audio_attributes_t* attributes, + const std::string& opPackageName = {}); ~SoundPool(); // SoundPool Java API support diff --git a/media/jni/soundpool/Stream.cpp b/media/jni/soundpool/Stream.cpp index e7042d0562a4..73e319a5902e 100644 --- a/media/jni/soundpool/Stream.cpp +++ b/media/jni/soundpool/Stream.cpp @@ -332,7 +332,9 @@ void Stream::play_l(const std::shared_ptr& sound, int32_t nextStreamID, 0 /*default notification frames*/, AUDIO_SESSION_ALLOCATE, AudioTrack::TRANSFER_DEFAULT, nullptr /*offloadInfo*/, -1 /*uid*/, -1 /*pid*/, - mStreamManager->getAttributes()); + mStreamManager->getAttributes(), + false /*doNotReconnect*/, 1.0f /*maxRequiredSpeed*/, + mStreamManager->getOpPackageName()); // Set caller name so it can be logged in destructor. // MediaMetricsConstants.h: AMEDIAMETRICS_PROP_CALLERNAME_VALUE_SOUNDPOOL newTrack->setCallerName("soundpool"); diff --git a/media/jni/soundpool/StreamManager.cpp b/media/jni/soundpool/StreamManager.cpp index 5b6494d4947e..502ee00b583e 100644 --- a/media/jni/soundpool/StreamManager.cpp +++ b/media/jni/soundpool/StreamManager.cpp @@ -98,9 +98,11 @@ int32_t StreamMap::getNextIdForStream(Stream* stream) const { #pragma clang diagnostic ignored "-Wthread-safety-analysis" StreamManager::StreamManager( - int32_t streams, size_t threads, const audio_attributes_t* attributes) + int32_t streams, size_t threads, const audio_attributes_t* attributes, + std::string opPackageName) : StreamMap(streams) , mAttributes(*attributes) + , mOpPackageName(std::move(opPackageName)) { ALOGV("%s(%d, %zu, ...)", __func__, streams, threads); forEach([this](Stream *stream) { diff --git a/media/jni/soundpool/StreamManager.h b/media/jni/soundpool/StreamManager.h index 59ae2f9d108b..81ac69eb4358 100644 --- a/media/jni/soundpool/StreamManager.h +++ b/media/jni/soundpool/StreamManager.h @@ -24,6 +24,7 @@ #include #include #include +#include #include #include @@ -386,7 +387,8 @@ class StreamManager : public StreamMap { public: // Note: the SoundPool pointer is only used for stream initialization. // It is not stored in StreamManager. - StreamManager(int32_t streams, size_t threads, const audio_attributes_t* attributes); + StreamManager(int32_t streams, size_t threads, const audio_attributes_t* attributes, + std::string opPackageName); ~StreamManager(); // Returns positive streamID on success, 0 on failure. This is locked. @@ -400,6 +402,8 @@ public: const audio_attributes_t* getAttributes() const { return &mAttributes; } + const std::string& getOpPackageName() const { return mOpPackageName; } + // Moves the stream to the restart queue (called upon BUFFER_END of the static track) // this is locked internally. // If activeStreamIDToMatch is nonzero, it will only move to the restart queue @@ -473,6 +477,8 @@ private: // The paired stream may be active or restarting. // No particular order. std::unordered_set mProcessingStreams GUARDED_BY(mStreamManagerLock); + + const std::string mOpPackageName; }; } // namespace android::soundpool diff --git a/media/jni/soundpool/android_media_SoundPool.cpp b/media/jni/soundpool/android_media_SoundPool.cpp index 8f6df3db718b..de96737d4034 100644 --- a/media/jni/soundpool/android_media_SoundPool.cpp +++ b/media/jni/soundpool/android_media_SoundPool.cpp @@ -22,6 +22,7 @@ #include #include #include +#include #include #include "SoundPool.h" @@ -181,7 +182,7 @@ static void android_media_callback(SoundPoolEvent event, SoundPool* soundPool, v static jint android_media_SoundPool_native_setup(JNIEnv *env, jobject thiz, jobject weakRef, - jint maxChannels, jobject jaa) + jint maxChannels, jobject jaa, jstring opPackageName) { if (jaa == nullptr) { ALOGE("Error creating SoundPool: invalid audio attributes"); @@ -203,7 +204,8 @@ android_media_SoundPool_native_setup(JNIEnv *env, jobject thiz, jobject weakRef, paa->flags = env->GetIntField(jaa, javaAudioAttrFields.fieldFlags); ALOGV("android_media_SoundPool_native_setup"); - auto *ap = new SoundPool(maxChannels, paa); + ScopedUtfChars opPackageNameStr(env, opPackageName); + auto *ap = new SoundPool(maxChannels, paa, opPackageNameStr.c_str()); if (ap == nullptr) { return -1; } @@ -298,7 +300,7 @@ static JNINativeMethod gMethods[] = { (void *)android_media_SoundPool_setRate }, { "native_setup", - "(Ljava/lang/Object;ILjava/lang/Object;)I", + "(Ljava/lang/Object;ILjava/lang/Object;Ljava/lang/String;)I", (void*)android_media_SoundPool_native_setup }, { "native_release", -- cgit v1.2.3 From 181d26b7e5844d6952ff16365cac3730d5ba366f Mon Sep 17 00:00:00 2001 From: jiabin Date: Mon, 14 Dec 2020 21:13:30 -0800 Subject: Add package name when initializing SoundPool. The package name is useful for permission validation. Currently, package name is required when starting external vibration so that the vibrator service can verify if the app has the permission to start vibration. Bug: 175595599 Test: SoundPool tests in cts Test: play audio-coupled-haptic file using SoundPool. Change-Id: Ibfe414063a303118a5bb393d65ea5dc2323bf722 Merged-In: Ibfe414063a303118a5bb393d65ea5dc2323bf722 (cherry picked from commit de9005bab1751e23342bbc9f0f51213eea8885af) --- media/java/android/media/SoundPool.java | 5 +++-- media/jni/soundpool/SoundPool.cpp | 5 +++-- media/jni/soundpool/SoundPool.h | 5 ++++- media/jni/soundpool/Stream.cpp | 4 +++- media/jni/soundpool/StreamManager.cpp | 4 +++- media/jni/soundpool/StreamManager.h | 8 +++++++- media/jni/soundpool/android_media_SoundPool.cpp | 8 +++++--- 7 files changed, 28 insertions(+), 11 deletions(-) (limited to 'media') diff --git a/media/java/android/media/SoundPool.java b/media/java/android/media/SoundPool.java index 1bf2863989a5..3f685a4c934e 100644 --- a/media/java/android/media/SoundPool.java +++ b/media/java/android/media/SoundPool.java @@ -149,7 +149,8 @@ public class SoundPool extends PlayerBase { super(attributes, AudioPlaybackConfiguration.PLAYER_TYPE_JAM_SOUNDPOOL); // do native setup - if (native_setup(new WeakReference(this), maxStreams, attributes) != 0) { + if (native_setup(new WeakReference(this), + maxStreams, attributes, getCurrentOpPackageName()) != 0) { throw new RuntimeException("Native setup failed"); } mAttributes = attributes; @@ -501,7 +502,7 @@ public class SoundPool extends PlayerBase { private native final int _load(FileDescriptor fd, long offset, long length, int priority); private native final int native_setup(Object weakRef, int maxStreams, - Object/*AudioAttributes*/ attributes); + @NonNull Object/*AudioAttributes*/ attributes, @NonNull String opPackageName); private native final int _play(int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate); diff --git a/media/jni/soundpool/SoundPool.cpp b/media/jni/soundpool/SoundPool.cpp index ac44843859f6..253b4e3a8a09 100644 --- a/media/jni/soundpool/SoundPool.cpp +++ b/media/jni/soundpool/SoundPool.cpp @@ -84,8 +84,9 @@ bool checkLoop(int32_t *loop) } // namespace -SoundPool::SoundPool(int32_t maxStreams, const audio_attributes_t* attributes) - : mStreamManager(maxStreams, kStreamManagerThreads, attributes) +SoundPool::SoundPool( + int32_t maxStreams, const audio_attributes_t* attributes, const std::string& opPackageName) + : mStreamManager(maxStreams, kStreamManagerThreads, attributes, opPackageName) { ALOGV("%s(maxStreams=%d, attr={ content_type=%d, usage=%d, flags=0x%x, tags=%s })", __func__, maxStreams, diff --git a/media/jni/soundpool/SoundPool.h b/media/jni/soundpool/SoundPool.h index d5b16ef629cd..ffb1c997393a 100644 --- a/media/jni/soundpool/SoundPool.h +++ b/media/jni/soundpool/SoundPool.h @@ -19,6 +19,8 @@ #include "SoundManager.h" #include "StreamManager.h" +#include + namespace android { /** @@ -29,7 +31,8 @@ namespace android { */ class SoundPool { public: - SoundPool(int32_t maxStreams, const audio_attributes_t* attributes); + SoundPool(int32_t maxStreams, const audio_attributes_t* attributes, + const std::string& opPackageName = {}); ~SoundPool(); // SoundPool Java API support diff --git a/media/jni/soundpool/Stream.cpp b/media/jni/soundpool/Stream.cpp index e7042d0562a4..73e319a5902e 100644 --- a/media/jni/soundpool/Stream.cpp +++ b/media/jni/soundpool/Stream.cpp @@ -332,7 +332,9 @@ void Stream::play_l(const std::shared_ptr& sound, int32_t nextStreamID, 0 /*default notification frames*/, AUDIO_SESSION_ALLOCATE, AudioTrack::TRANSFER_DEFAULT, nullptr /*offloadInfo*/, -1 /*uid*/, -1 /*pid*/, - mStreamManager->getAttributes()); + mStreamManager->getAttributes(), + false /*doNotReconnect*/, 1.0f /*maxRequiredSpeed*/, + mStreamManager->getOpPackageName()); // Set caller name so it can be logged in destructor. // MediaMetricsConstants.h: AMEDIAMETRICS_PROP_CALLERNAME_VALUE_SOUNDPOOL newTrack->setCallerName("soundpool"); diff --git a/media/jni/soundpool/StreamManager.cpp b/media/jni/soundpool/StreamManager.cpp index 5b6494d4947e..502ee00b583e 100644 --- a/media/jni/soundpool/StreamManager.cpp +++ b/media/jni/soundpool/StreamManager.cpp @@ -98,9 +98,11 @@ int32_t StreamMap::getNextIdForStream(Stream* stream) const { #pragma clang diagnostic ignored "-Wthread-safety-analysis" StreamManager::StreamManager( - int32_t streams, size_t threads, const audio_attributes_t* attributes) + int32_t streams, size_t threads, const audio_attributes_t* attributes, + std::string opPackageName) : StreamMap(streams) , mAttributes(*attributes) + , mOpPackageName(std::move(opPackageName)) { ALOGV("%s(%d, %zu, ...)", __func__, streams, threads); forEach([this](Stream *stream) { diff --git a/media/jni/soundpool/StreamManager.h b/media/jni/soundpool/StreamManager.h index 59ae2f9d108b..81ac69eb4358 100644 --- a/media/jni/soundpool/StreamManager.h +++ b/media/jni/soundpool/StreamManager.h @@ -24,6 +24,7 @@ #include #include #include +#include #include #include @@ -386,7 +387,8 @@ class StreamManager : public StreamMap { public: // Note: the SoundPool pointer is only used for stream initialization. // It is not stored in StreamManager. - StreamManager(int32_t streams, size_t threads, const audio_attributes_t* attributes); + StreamManager(int32_t streams, size_t threads, const audio_attributes_t* attributes, + std::string opPackageName); ~StreamManager(); // Returns positive streamID on success, 0 on failure. This is locked. @@ -400,6 +402,8 @@ public: const audio_attributes_t* getAttributes() const { return &mAttributes; } + const std::string& getOpPackageName() const { return mOpPackageName; } + // Moves the stream to the restart queue (called upon BUFFER_END of the static track) // this is locked internally. // If activeStreamIDToMatch is nonzero, it will only move to the restart queue @@ -473,6 +477,8 @@ private: // The paired stream may be active or restarting. // No particular order. std::unordered_set mProcessingStreams GUARDED_BY(mStreamManagerLock); + + const std::string mOpPackageName; }; } // namespace android::soundpool diff --git a/media/jni/soundpool/android_media_SoundPool.cpp b/media/jni/soundpool/android_media_SoundPool.cpp index 26725f87bfdc..357cc63bd41e 100644 --- a/media/jni/soundpool/android_media_SoundPool.cpp +++ b/media/jni/soundpool/android_media_SoundPool.cpp @@ -22,6 +22,7 @@ #include #include #include +#include #include #include "SoundPool.h" @@ -181,7 +182,7 @@ static void android_media_callback(SoundPoolEvent event, SoundPool* soundPool, v static jint android_media_SoundPool_native_setup(JNIEnv *env, jobject thiz, jobject weakRef, - jint maxChannels, jobject jaa) + jint maxChannels, jobject jaa, jstring opPackageName) { if (jaa == nullptr) { ALOGE("Error creating SoundPool: invalid audio attributes"); @@ -203,7 +204,8 @@ android_media_SoundPool_native_setup(JNIEnv *env, jobject thiz, jobject weakRef, paa->flags = (audio_flags_mask_t) env->GetIntField(jaa, javaAudioAttrFields.fieldFlags); ALOGV("android_media_SoundPool_native_setup"); - auto *ap = new SoundPool(maxChannels, paa); + ScopedUtfChars opPackageNameStr(env, opPackageName); + auto *ap = new SoundPool(maxChannels, paa, opPackageNameStr.c_str()); if (ap == nullptr) { return -1; } @@ -298,7 +300,7 @@ static JNINativeMethod gMethods[] = { (void *)android_media_SoundPool_setRate }, { "native_setup", - "(Ljava/lang/Object;ILjava/lang/Object;)I", + "(Ljava/lang/Object;ILjava/lang/Object;Ljava/lang/String;)I", (void*)android_media_SoundPool_native_setup }, { "native_release", -- cgit v1.2.3 From 56bc77955355f5e2db824c6cab977cc245283d97 Mon Sep 17 00:00:00 2001 From: Kyunglyul Hyun Date: Thu, 15 Oct 2020 06:20:45 +0000 Subject: MediaRouterService binds services when necessary MediaRouterService maintained bindings to provider services once those are established. With this CL, it only binds services when there is a non-empty discovery preference set by a foreground app or an app is casting. This change may break output switcher, which enables transfer media of background apps. To alleviate that MediaRouter2Manager#startScan and #stopScan are added so that system UI can force the service bind to the services and find remote devices to cast. Bug: 169575701 Bug: 172920557 Test: manually and CTS Change-Id: I4a47fdb1c9fe05a04d26950485833c9cbfb91a69 (cherry picked from commit 9f889ca4e62044900004cb7ce4e85415d2b019e2) (cherry picked from commit 602b168f99b00c037191234a85190d845680aa64) --- media/java/android/media/IMediaRouterService.aidl | 2 ++ media/java/android/media/MediaRouter2Manager.java | 30 ++++++++++++++++++++++ .../android/media/RouteDiscoveryPreference.java | 1 + 3 files changed, 33 insertions(+) (limited to 'media') diff --git a/media/java/android/media/IMediaRouterService.aidl b/media/java/android/media/IMediaRouterService.aidl index 068f9689d06f..4b8a8adade1f 100644 --- a/media/java/android/media/IMediaRouterService.aidl +++ b/media/java/android/media/IMediaRouterService.aidl @@ -73,6 +73,8 @@ interface IMediaRouterService { void unregisterManager(IMediaRouter2Manager manager); void setRouteVolumeWithManager(IMediaRouter2Manager manager, int requestId, in MediaRoute2Info route, int volume); + void startScan(IMediaRouter2Manager manager); + void stopScan(IMediaRouter2Manager manager); void requestCreateSessionWithManager(IMediaRouter2Manager manager, int requestId, in RoutingSessionInfo oldSession, in @nullable MediaRoute2Info route); diff --git a/media/java/android/media/MediaRouter2Manager.java b/media/java/android/media/MediaRouter2Manager.java index 4b09a5f19fb0..68237de2ca98 100644 --- a/media/java/android/media/MediaRouter2Manager.java +++ b/media/java/android/media/MediaRouter2Manager.java @@ -146,6 +146,36 @@ public final class MediaRouter2Manager { } } + /** + * Starts scanning remote routes. + * @see #stopScan(String) + */ + public void startScan() { + Client client = getOrCreateClient(); + if (client != null) { + try { + mMediaRouterService.startScan(client); + } catch (RemoteException ex) { + Log.e(TAG, "Unable to get sessions. Service probably died.", ex); + } + } + } + + /** + * Stops scanning remote routes to reduce resource consumption. + * @see #startScan(String) + */ + public void stopScan() { + Client client = getOrCreateClient(); + if (client != null) { + try { + mMediaRouterService.stopScan(client); + } catch (RemoteException ex) { + Log.e(TAG, "Unable to get sessions. Service probably died.", ex); + } + } + } + /** * Gets a {@link android.media.session.MediaController} associated with the * given routing session. diff --git a/media/java/android/media/RouteDiscoveryPreference.java b/media/java/android/media/RouteDiscoveryPreference.java index 68f2964dbeb2..2f952474b7f0 100644 --- a/media/java/android/media/RouteDiscoveryPreference.java +++ b/media/java/android/media/RouteDiscoveryPreference.java @@ -153,6 +153,7 @@ public final class RouteDiscoveryPreference implements Parcelable { return false; } RouteDiscoveryPreference other = (RouteDiscoveryPreference) o; + //TODO: Make this order-free return Objects.equals(mPreferredFeatures, other.mPreferredFeatures) && mShouldPerformActiveScan == other.mShouldPerformActiveScan; } -- cgit v1.2.3