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