1660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon/* 2660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon * Copyright 2018 The Android Open Source Project 3660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon * 4660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon * Licensed under the Apache License, Version 2.0 (the "License"); 5660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon * you may not use this file except in compliance with the License. 6660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon * You may obtain a copy of the License at 7660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon * 8660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon * http://www.apache.org/licenses/LICENSE-2.0 9660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon * 10660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon * Unless required by applicable law or agreed to in writing, software 11660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon * distributed under the License is distributed on an "AS IS" BASIS, 12660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon * See the License for the specific language governing permissions and 14660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon * limitations under the License. 15660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon */ 16660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon 17660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon#ifndef ANDROID_JAUDIOATTRIBUTES_H 18660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon#define ANDROID_JAUDIOATTRIBUTES_H 19660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon 20660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon#include <jni.h> 21660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon#include <system/audio.h> 22660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon 23660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moonnamespace android { 24660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon 25660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moonclass JAudioAttributes { 26660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moonpublic: 27660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon /* Creates a Java AudioAttributes object. */ 28660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon static jobject createAudioAttributesObj(JNIEnv *env, 29660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon const audio_attributes_t* pAttributes, 30660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon audio_stream_type_t streamType) { 31660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon 32660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon jclass jBuilderCls = env->FindClass("android/media/AudioAttributes$Builder"); 33660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon jmethodID jBuilderCtor = env->GetMethodID(jBuilderCls, "<init>", "()V"); 34660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon jobject jBuilderObj = env->NewObject(jBuilderCls, jBuilderCtor); 35660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon 36660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon if (pAttributes != NULL) { 37660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon // If pAttributes is not null, streamType is ignored. 38660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon jmethodID jSetUsage = env->GetMethodID( 39660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon jBuilderCls, "setUsage", "(I)Landroid/media/AudioAttributes$Builder;"); 40660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon jBuilderObj = env->CallObjectMethod(jBuilderObj, jSetUsage, pAttributes->usage); 41660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon 42660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon jmethodID jSetContentType = env->GetMethodID(jBuilderCls, "setContentType", 43660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon "(I)Landroid/media/AudioAttributes$Builder;"); 44660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon jBuilderObj = env->CallObjectMethod(jBuilderObj, jSetContentType, 45660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon pAttributes->content_type); 46660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon 47660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon // TODO: Java AudioAttributes.Builder.setCapturePreset() is systemApi and hidden. 48660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon // Can we use this method? 49660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon// jmethodID jSetCapturePreset = env->GetMethodID(jBuilderCls, "setCapturePreset", 50660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon// "(I)Landroid/media/AudioAttributes$Builder;"); 51660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon// jBuilderObj = env->CallObjectMethod(jBuilderObj, jSetCapturePreset, 52660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon// pAttributes->source); 53660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon 54660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon jmethodID jSetFlags = env->GetMethodID(jBuilderCls, "setFlags", 55660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon "(I)Landroid/media/AudioAttributes$Builder;"); 56660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon jBuilderObj = env->CallObjectMethod(jBuilderObj, jSetFlags, pAttributes->flags); 57660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon 58660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon // TODO: Handle the 'tags' (char[] to HashSet<String>). 59660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon // How to parse the char[]? Is there any example of it? 60660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon // Also, the addTags() method is hidden. 61660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon } else { 62660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon // Call AudioAttributes.Builder.setLegacyStreamType().build() 63660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon jmethodID jSetLegacyStreamType = env->GetMethodID(jBuilderCls, "setLegacyStreamType", 64660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon "(I)Landroid/media/AudioAttributes$Builder;"); 65660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon jBuilderObj = env->CallObjectMethod(jBuilderObj, jSetLegacyStreamType, streamType); 66660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon } 67660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon 68660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon jmethodID jBuild = env->GetMethodID(jBuilderCls, "build", 69660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon "()Landroid/media/AudioAttributes;"); 70660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon return env->CallObjectMethod(jBuilderObj, jBuild); 71660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon } 72660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon 73660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon}; 74660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon 75660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon} // namespace android 76660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon 77660a74ebf0a8b5b6c79f9a016b202ccfaf815d3bHyundo Moon#endif // ANDROID_JAUDIOATTRIBUTES_H 78