... by switching from packageName/uid/pid to the Identity class.
This allows up to track which parts of the app trigger audio-recordings.
Test: atest CtsAppOpsTestCases
CtsNativeMediaAAudioTestCases
Fixes: 160150145
Change-Id: I0913a336a862e4a1cb38b9d967cfbdc490513ab0
72 lines
2.8 KiB
C++
72 lines
2.8 KiB
C++
/*
|
|
* Copyright (C) 2021 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#include "permission_utils.h"
|
|
#include "core_jni_helpers.h"
|
|
|
|
static struct {
|
|
jfieldID fieldUid; // Identity.uid
|
|
jfieldID fieldPid; // Identity.pid
|
|
jfieldID fieldPackageName; // Identity.packageName
|
|
jfieldID fieldAttributionTag; // Identity.attributionTag
|
|
} javaIdentityFields;
|
|
|
|
static const JNINativeMethod method_table[] = {
|
|
// no static methods, currently
|
|
};
|
|
|
|
int register_android_media_permission_Identity(JNIEnv* env) {
|
|
jclass identityClass = android::FindClassOrDie(env, "android/media/permission/Identity");
|
|
javaIdentityFields.fieldUid = android::GetFieldIDOrDie(env, identityClass, "uid", "I");
|
|
javaIdentityFields.fieldPid = android::GetFieldIDOrDie(env, identityClass, "pid", "I");
|
|
javaIdentityFields.fieldPackageName =
|
|
android::GetFieldIDOrDie(env, identityClass, "packageName", "Ljava/lang/String;");
|
|
javaIdentityFields.fieldAttributionTag =
|
|
android::GetFieldIDOrDie(env, identityClass, "attributionTag", "Ljava/lang/String;");
|
|
|
|
return android::RegisterMethodsOrDie(env, "android/media/permission/Identity", method_table,
|
|
NELEM(method_table));
|
|
}
|
|
|
|
namespace android::media::permission {
|
|
|
|
Identity convertIdentity(JNIEnv* env, const jobject& jIdentity) {
|
|
Identity identity;
|
|
|
|
identity.uid = env->GetIntField(jIdentity, javaIdentityFields.fieldUid);
|
|
identity.pid = env->GetIntField(jIdentity, javaIdentityFields.fieldPid);
|
|
|
|
jstring packageNameStr = static_cast<jstring>(
|
|
env->GetObjectField(jIdentity, javaIdentityFields.fieldPackageName));
|
|
if (packageNameStr == nullptr) {
|
|
identity.packageName = std::nullopt;
|
|
} else {
|
|
identity.packageName = std::string(ScopedUtfChars(env, packageNameStr).c_str());
|
|
}
|
|
|
|
jstring attributionTagStr = static_cast<jstring>(
|
|
env->GetObjectField(jIdentity, javaIdentityFields.fieldAttributionTag));
|
|
if (attributionTagStr == nullptr) {
|
|
identity.attributionTag = std::nullopt;
|
|
} else {
|
|
identity.attributionTag = std::string(ScopedUtfChars(env, attributionTagStr).c_str());
|
|
}
|
|
|
|
return identity;
|
|
}
|
|
|
|
} // namespace android::media::permission
|