diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2021-06-23 02:35:52 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2021-06-23 02:35:52 +0000 |
commit | 597e109f691d5bad9ab91b44d767fd7bd0f638e8 (patch) | |
tree | c9a45b33b3c2d00e39bc4be8877abfcd86fa1e41 | |
parent | 736a91df76e34f9e9dc93865710da9d2734ea526 (diff) | |
parent | 15bb2977b870495211117548ea132810e8cff7c9 (diff) | |
download | voip-597e109f691d5bad9ab91b44d767fd7bd0f638e8.tar.gz |
Snap for 7483611 from 15bb2977b870495211117548ea132810e8cff7c9 to mainline-neuralnetworks-releaseandroid-mainline-12.0.0_r92android-mainline-12.0.0_r78android-mainline-12.0.0_r50android-mainline-12.0.0_r33android-mainline-12.0.0_r3android12-mainline-neuralnetworks-release
Change-Id: I17a431ff787e2bc74b4f101f8a8b894250decb12
-rw-r--r-- | Android.bp | 4 | ||||
-rw-r--r-- | src/java/android/net/rtp/AudioCodec.java | 3 | ||||
-rw-r--r-- | src/java/android/net/rtp/AudioGroup.java | 26 | ||||
-rw-r--r-- | src/java/android/net/rtp/AudioStream.java | 2 | ||||
-rw-r--r-- | src/java/android/net/rtp/RtpStream.java | 2 | ||||
-rw-r--r-- | src/java/android/net/sip/SipAudioCall.java | 2 | ||||
-rw-r--r-- | src/java/android/net/sip/SipErrorCode.java | 2 | ||||
-rw-r--r-- | src/java/android/net/sip/SipException.java | 2 | ||||
-rw-r--r-- | src/java/android/net/sip/SipManager.java | 2 | ||||
-rw-r--r-- | src/java/android/net/sip/SipProfile.java | 2 | ||||
-rw-r--r-- | src/java/android/net/sip/SipRegistrationListener.java | 2 | ||||
-rw-r--r-- | src/java/android/net/sip/SipSession.java | 2 | ||||
-rw-r--r-- | src/java/com/android/server/sip/SipService.java | 4 | ||||
-rw-r--r-- | src/jni/rtp/Android.bp | 12 | ||||
-rw-r--r-- | src/jni/rtp/AudioGroup.cpp | 43 | ||||
-rw-r--r-- | src/jni/rtp/GsmCodec.cpp | 2 |
16 files changed, 77 insertions, 35 deletions
@@ -12,6 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. +package { + default_applicable_licenses: ["Android-Apache-2.0"], +} + filegroup { name: "opt-net-voip-srcs", srcs: [ diff --git a/src/java/android/net/rtp/AudioCodec.java b/src/java/android/net/rtp/AudioCodec.java index 85255c8..9cae573 100644 --- a/src/java/android/net/rtp/AudioCodec.java +++ b/src/java/android/net/rtp/AudioCodec.java @@ -33,6 +33,9 @@ import java.util.Arrays; * </pre> * * @see AudioStream + * + * @deprecated {@link android.net.sip.SipManager} and associated classes are no longer + * supported and should not be used as the basis of future VOIP apps. */ public class AudioCodec { /** diff --git a/src/java/android/net/rtp/AudioGroup.java b/src/java/android/net/rtp/AudioGroup.java index 9d96006..3a85bbc 100644 --- a/src/java/android/net/rtp/AudioGroup.java +++ b/src/java/android/net/rtp/AudioGroup.java @@ -17,9 +17,10 @@ package android.net.rtp; import android.annotation.NonNull; -import android.app.ActivityThread; +import android.content.AttributionSource; import android.content.Context; import android.media.AudioManager; +import android.os.Parcel; import java.util.HashMap; import java.util.Locale; @@ -63,6 +64,9 @@ import java.util.Map; * the AudioGroups is in use.</p> * * @see AudioStream + * + * @deprecated {@link android.net.sip.SipManager} and associated classes are no longer supported and + * should not be used as the basis of future VOIP apps. */ public class AudioGroup { /** @@ -114,7 +118,7 @@ public class AudioGroup { /** * Creates an empty AudioGroup. - * @param context Context used to get package name + * @param context Context the group belongs to */ public AudioGroup(@NonNull Context context) { mContext = context; @@ -164,11 +168,15 @@ public class AudioGroup { AudioCodec codec = stream.getCodec(); String codecSpec = String.format(Locale.US, "%d %s %s", codec.type, codec.rtpmap, codec.fmtp); - long id = nativeAdd(stream.getMode(), stream.getSocket(), - stream.getRemoteAddress().getHostAddress(), - stream.getRemotePort(), codecSpec, stream.getDtmfType(), - mContext != null ? mContext.getOpPackageName() - : ActivityThread.currentOpPackageName()); + + final long id; + try (AttributionSource.ScopedParcelState attributionSourceState = mContext + .getAttributionSource().asScopedParcelState()) { + id = nativeAdd(stream.getMode(), stream.getSocket(), + stream.getRemoteAddress().getHostAddress(), + stream.getRemotePort(), codecSpec, stream.getDtmfType(), + attributionSourceState.getParcel()); + } mStreams.put(stream, id); } catch (NullPointerException e) { throw new IllegalStateException(e); @@ -176,8 +184,8 @@ public class AudioGroup { } } - private native long nativeAdd(int mode, int socket, String remoteAddress, - int remotePort, String codecSpec, int dtmfType, String opPackageName); + private native long nativeAdd(int mode, int socket, String remoteAddress, int remotePort, + String codecSpec, int dtmfType, Parcel attributionSource); // Package-private method used by AudioStream.join(). synchronized void remove(AudioStream stream) { diff --git a/src/java/android/net/rtp/AudioStream.java b/src/java/android/net/rtp/AudioStream.java index 5cd1abc..e746e7d 100644 --- a/src/java/android/net/rtp/AudioStream.java +++ b/src/java/android/net/rtp/AudioStream.java @@ -41,6 +41,8 @@ import java.net.SocketException; * * @see RtpStream * @see AudioGroup + * @deprecated {@link android.net.sip.SipManager} and associated classes are no longer supported and + * should not be used as the basis of future VOIP apps. */ public class AudioStream extends RtpStream { private AudioCodec mCodec; diff --git a/src/java/android/net/rtp/RtpStream.java b/src/java/android/net/rtp/RtpStream.java index b9d75cd..ad37455 100644 --- a/src/java/android/net/rtp/RtpStream.java +++ b/src/java/android/net/rtp/RtpStream.java @@ -27,6 +27,8 @@ import java.net.SocketException; * * <p class="note">Using this class requires * {@link android.Manifest.permission#INTERNET} permission.</p> + * @deprecated {@link android.net.sip.SipManager} and associated classes are no longer supported and + * should not be used as the basis of future VOIP apps. */ public class RtpStream { /** diff --git a/src/java/android/net/sip/SipAudioCall.java b/src/java/android/net/sip/SipAudioCall.java index 363995c..4d70017 100644 --- a/src/java/android/net/sip/SipAudioCall.java +++ b/src/java/android/net/sip/SipAudioCall.java @@ -56,6 +56,8 @@ import java.net.UnknownHostException; * <a href="{@docRoot}guide/topics/network/sip.html">Session Initiation Protocol</a> * developer guide.</p> * </div> + * @deprecated {@link android.net.sip.SipManager} and associated classes are no longer supported and + * should not be used as the basis of future VOIP apps. */ public class SipAudioCall { private static final String LOG_TAG = SipAudioCall.class.getSimpleName(); diff --git a/src/java/android/net/sip/SipErrorCode.java b/src/java/android/net/sip/SipErrorCode.java index 509728f..e3f54eb 100644 --- a/src/java/android/net/sip/SipErrorCode.java +++ b/src/java/android/net/sip/SipErrorCode.java @@ -22,6 +22,8 @@ package android.net.sip; * {@link SipSession.Listener#onError onError()}, * {@link SipSession.Listener#onCallChangeFailed onCallChangeFailed()} and * {@link SipSession.Listener#onRegistrationFailed onRegistrationFailed()}. + * @deprecated {@link android.net.sip.SipManager} and associated classes are no longer supported and + * should not be used as the basis of future VOIP apps. */ public class SipErrorCode { /** Not an error. */ diff --git a/src/java/android/net/sip/SipException.java b/src/java/android/net/sip/SipException.java index 0339395..b9cdb12 100644 --- a/src/java/android/net/sip/SipException.java +++ b/src/java/android/net/sip/SipException.java @@ -18,6 +18,8 @@ package android.net.sip; /** * Indicates a general SIP-related exception. + * @deprecated {@link android.net.sip.SipManager} and associated classes are no longer supported and + * should not be used as the basis of future VOIP apps. */ public class SipException extends Exception { public SipException() { diff --git a/src/java/android/net/sip/SipManager.java b/src/java/android/net/sip/SipManager.java index 39f66de..b74b07d 100644 --- a/src/java/android/net/sip/SipManager.java +++ b/src/java/android/net/sip/SipManager.java @@ -63,6 +63,8 @@ import java.util.List; * <a href="{@docRoot}guide/topics/network/sip.html">Session Initiation Protocol</a> * developer guide.</p> * </div> + * @deprecated {@link android.net.sip.SipManager} and associated classes are no longer supported and + * should not be used as the basis of future VOIP apps. */ public class SipManager { /** diff --git a/src/java/android/net/sip/SipProfile.java b/src/java/android/net/sip/SipProfile.java index 14b0334..6f22e47 100644 --- a/src/java/android/net/sip/SipProfile.java +++ b/src/java/android/net/sip/SipProfile.java @@ -45,6 +45,8 @@ import javax.sip.address.URI; * <a href="{@docRoot}guide/topics/network/sip.html">Session Initiation Protocol</a> * developer guide.</p> * </div> + * @deprecated {@link android.net.sip.SipManager} and associated classes are no longer supported and + * should not be used as the basis of future VOIP apps. */ public class SipProfile implements Parcelable, Serializable, Cloneable { private static final long serialVersionUID = 1L; diff --git a/src/java/android/net/sip/SipRegistrationListener.java b/src/java/android/net/sip/SipRegistrationListener.java index 9968cc7..0175e8a 100644 --- a/src/java/android/net/sip/SipRegistrationListener.java +++ b/src/java/android/net/sip/SipRegistrationListener.java @@ -18,6 +18,8 @@ package android.net.sip; /** * Listener for SIP registration events. + * @deprecated {@link android.net.sip.SipManager} and associated classes are no longer supported and + * should not be used as the basis of future VOIP apps. */ public interface SipRegistrationListener { /** diff --git a/src/java/android/net/sip/SipSession.java b/src/java/android/net/sip/SipSession.java index edbc66f..764871c 100644 --- a/src/java/android/net/sip/SipSession.java +++ b/src/java/android/net/sip/SipSession.java @@ -25,6 +25,8 @@ import android.telephony.Rlog; * <p>You can get a {@link SipSession} from {@link SipManager} with {@link * SipManager#createSipSession createSipSession()} (when initiating calls) or {@link * SipManager#getSessionFor getSessionFor()} (when receiving calls).</p> + * @deprecated {@link android.net.sip.SipManager} and associated classes are no longer supported and + * should not be used as the basis of future VOIP apps. */ public final class SipSession { private static final String TAG = "SipSession"; diff --git a/src/java/com/android/server/sip/SipService.java b/src/java/com/android/server/sip/SipService.java index ca91943..c68508b 100644 --- a/src/java/com/android/server/sip/SipService.java +++ b/src/java/com/android/server/sip/SipService.java @@ -344,7 +344,7 @@ public final class SipService extends ISipService.Stub { if (DBG) log("notify: profile added: " + localProfile); Intent intent = new Intent(SipManager.ACTION_SIP_ADD_PHONE); intent.putExtra(SipManager.EXTRA_LOCAL_URI, localProfile.getUriString()); - mContext.sendBroadcast(intent); + mContext.sendBroadcast(intent, android.Manifest.permission.USE_SIP); if (mSipGroups.size() == 1) { registerReceivers(); } @@ -354,7 +354,7 @@ public final class SipService extends ISipService.Stub { if (DBG) log("notify: profile removed: " + localProfile); Intent intent = new Intent(SipManager.ACTION_SIP_REMOVE_PROFILE); intent.putExtra(SipManager.EXTRA_LOCAL_URI, localProfile.getUriString()); - mContext.sendBroadcast(intent); + mContext.sendBroadcast(intent, android.Manifest.permission.USE_SIP); if (mSipGroups.size() == 0) { unregisterReceivers(); } diff --git a/src/jni/rtp/Android.bp b/src/jni/rtp/Android.bp index b6c8588..325d6b9 100644 --- a/src/jni/rtp/Android.bp +++ b/src/jni/rtp/Android.bp @@ -12,6 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. +package { + default_applicable_licenses: ["Android-Apache-2.0"], +} + cc_library_shared { name: "librtp_jni", srcs: [ @@ -32,8 +36,11 @@ cc_library_shared { ], shared_libs: [ + "framework-permission-aidl-cpp", + "libandroid_runtime", "libaudioclient", "libaudiofoundation", + "libbinder", "libcutils", "liblog", "libnativehelper", @@ -42,13 +49,10 @@ cc_library_shared { ], static_libs: [ "libgsm", + "framework-permission-aidl-cpp", "libstagefright_amrnbdec", "libstagefright_amrnbenc", ], - include_dirs: [ - "frameworks/av/media/libstagefright/codecs/amrnb/enc/src", - "frameworks/av/media/libstagefright/codecs/amrnb/dec/src", - ], cflags: [ "-fvisibility=hidden", "-Wall", diff --git a/src/jni/rtp/AudioGroup.cpp b/src/jni/rtp/AudioGroup.cpp index 51b723d..e92e799 100644 --- a/src/jni/rtp/AudioGroup.cpp +++ b/src/jni/rtp/AudioGroup.cpp @@ -44,6 +44,8 @@ #include <system/audio.h> #include <nativehelper/ScopedUtfChars.h> +#include <android/content/AttributionSourceState.h> +#include <android_os_Parcel.h> #include "jni.h" #include <nativehelper/JNIHelp.h> @@ -57,6 +59,8 @@ namespace { using namespace android; +using android::content::AttributionSourceState; + int gRandom = -1; // We use a circular array to implement jitter buffer. The simplest way is doing @@ -480,7 +484,7 @@ void AudioStream::decode(int tick) class AudioGroup { public: - explicit AudioGroup(const String16 &opPackageName); + explicit AudioGroup(const AttributionSourceState &attributionSource); ~AudioGroup(); bool set(int sampleRate, int sampleCount); @@ -505,7 +509,7 @@ private: int mEventQueue; volatile int mDtmfEvent; - String16 mOpPackageName; + const AttributionSourceState mAttributionSource; int mMode; int mSampleRate; @@ -554,9 +558,9 @@ private: sp<DeviceThread> mDeviceThread; }; -AudioGroup::AudioGroup(const String16 &opPackageName) +AudioGroup::AudioGroup(const AttributionSourceState &attributionSource) + : mAttributionSource(attributionSource) { - mOpPackageName = opPackageName; mMode = ON_HOLD; mChain = NULL; mEventQueue = -1; @@ -818,7 +822,7 @@ bool AudioGroup::DeviceThread::threadLoop() // Initialize AudioTrack and AudioRecord. sp<AudioTrack> track = new AudioTrack(); - sp<AudioRecord> record = new AudioRecord(mGroup->mOpPackageName); + sp<AudioRecord> record = new AudioRecord(mGroup->mAttributionSource); // Set caller name so it can be logged in destructor. // MediaMetricsConstants.h: AMEDIAMETRICS_PROP_CALLERNAME_VALUE_RTP track->setCallerName("rtp"); @@ -851,14 +855,14 @@ bool AudioGroup::DeviceThread::threadLoop() sp<AudioEffect> aec; if (mode == ECHO_SUPPRESSION) { if (mGroup->platformHasAec()) { - aec = new AudioEffect(FX_IID_AEC, - mGroup->mOpPackageName, - NULL, - 0, - 0, - 0, - record->getSessionId(), - AUDIO_IO_HANDLE_NONE); // record sessionId is sufficient. + aec = new AudioEffect(mGroup->mAttributionSource); + aec->set(FX_IID_AEC, + NULL, + 0, + 0, + 0, + record->getSessionId(), + AUDIO_IO_HANDLE_NONE); // record sessionId is sufficient. status_t status = aec->initCheck(); if (status == NO_ERROR || status == ALREADY_EXISTS) { aec->setEnabled(true); @@ -953,7 +957,7 @@ static jfieldID gMode; jlong add(JNIEnv *env, jobject thiz, jint mode, jint socket, jstring jRemoteAddress, jint remotePort, - jstring jCodecSpec, jint dtmfType, jstring opPackageNameStr) + jstring jCodecSpec, jint dtmfType, jobject jAttributionSource) { AudioCodec *codec = NULL; AudioStream *stream = NULL; @@ -981,7 +985,9 @@ jlong add(JNIEnv *env, jobject thiz, jint mode, return 0; } - ScopedUtfChars opPackageName(env, opPackageNameStr); + Parcel* parcel = parcelForJavaObject(env, jAttributionSource); + AttributionSourceState attributionSource; + attributionSource.readFromParcel(parcel); // Create audio codec. int codecType = -1; @@ -1012,7 +1018,7 @@ jlong add(JNIEnv *env, jobject thiz, jint mode, group = (AudioGroup *)env->GetLongField(thiz, gNative); if (!group) { int mode = env->GetIntField(thiz, gMode); - group = new AudioGroup(String16(opPackageName.c_str())); + group = new AudioGroup(attributionSource); if (!group->set(8000, 256) || !group->setMode(mode)) { jniThrowException(env, "java/lang/IllegalStateException", "cannot initialize audio group"); @@ -1068,7 +1074,7 @@ void sendDtmf(JNIEnv *env, jobject thiz, jint event) } JNINativeMethod gMethods[] = { - {"nativeAdd", "(IILjava/lang/String;ILjava/lang/String;ILjava/lang/String;)J", (void *)add}, + {"nativeAdd", "(IILjava/lang/String;ILjava/lang/String;ILandroid/os/Parcel;)J", (void *)add}, {"nativeRemove", "(J)V", (void *)remove}, {"nativeSetMode", "(I)V", (void *)setMode}, {"nativeSendDtmf", "(I)V", (void *)sendDtmf}, @@ -1078,7 +1084,7 @@ JNINativeMethod gMethods[] = { int registerAudioGroup(JNIEnv *env) { - gRandom = open("/dev/urandom", O_RDONLY); + gRandom = open("/dev/urandom", O_RDONLY | O_CLOEXEC); if (gRandom == -1) { ALOGE("urandom: %s", strerror(errno)); return -1; @@ -1092,5 +1098,6 @@ int registerAudioGroup(JNIEnv *env) ALOGE("JNI registration failed"); return -1; } + return 0; } diff --git a/src/jni/rtp/GsmCodec.cpp b/src/jni/rtp/GsmCodec.cpp index 4a04bfa..ff1acec 100644 --- a/src/jni/rtp/GsmCodec.cpp +++ b/src/jni/rtp/GsmCodec.cpp @@ -16,9 +16,7 @@ #include "AudioCodec.h" -extern "C" { #include "gsm.h" -} namespace { |