blob: 61c5a9ac40d112d453cb0ad761bd6a941dcd9739 [file] [log] [blame]
yhiranobc742d82015-09-17 07:41:44 -07001// Copyright 2015 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "media/midi/midi_device_android.h"
6
Gyuyoung Kim34e191a2018-01-10 09:48:42 +00007#include <memory>
yhiranobc742d82015-09-17 07:41:44 -07008#include <string>
9
toyoshimff74bc22016-08-08 07:20:30 -070010#include "base/android/jni_string.h"
Mohamed Heikal88cc0e12019-06-21 19:17:47 +000011#include "media/midi/midi_jni_headers/MidiDeviceAndroid_jni.h"
yhiranobc742d82015-09-17 07:41:44 -070012#include "media/midi/midi_output_port_android.h"
13
Torne (Richard Coles)7527ac62017-07-31 21:17:01 +000014using base::android::JavaRef;
tornecaf5d7f2016-08-04 08:59:04 -070015using base::android::ScopedJavaLocalRef;
16
yhiranobc742d82015-09-17 07:41:44 -070017namespace midi {
18
toyoshimff74bc22016-08-08 07:20:30 -070019namespace {
20
21std::string ConvertMaybeJavaString(JNIEnv* env,
22 const base::android::JavaRef<jstring>& str) {
23 if (!str.obj())
24 return std::string();
25 return base::android::ConvertJavaStringToUTF8(str);
26}
27}
28
yhiranobc742d82015-09-17 07:41:44 -070029MidiDeviceAndroid::MidiDeviceAndroid(JNIEnv* env,
Torne (Richard Coles)7527ac62017-07-31 21:17:01 +000030 const JavaRef<jobject>& raw_device,
yhiranobc742d82015-09-17 07:41:44 -070031 MidiInputPortAndroid::Delegate* delegate)
Torne (Richard Coles)7527ac62017-07-31 21:17:01 +000032 : raw_device_(raw_device) {
yhiranobc742d82015-09-17 07:41:44 -070033 ScopedJavaLocalRef<jobjectArray> raw_input_ports =
34 Java_MidiDeviceAndroid_getInputPorts(env, raw_device);
Torne (Richard Coles)3b3dba52019-04-29 20:56:14 +000035 for (auto j_port : raw_input_ports.ReadElements<jobject>()) {
xiaofeng.zhang06152d82017-05-21 04:39:34 -070036 input_ports_.push_back(
Ran Jief10a6e2018-02-01 18:33:08 +000037 std::make_unique<MidiInputPortAndroid>(env, j_port.obj(), delegate));
yhiranobc742d82015-09-17 07:41:44 -070038 }
39
40 ScopedJavaLocalRef<jobjectArray> raw_output_ports =
41 Java_MidiDeviceAndroid_getOutputPorts(env, raw_device);
Torne (Richard Coles)3b3dba52019-04-29 20:56:14 +000042 for (auto j_port : raw_output_ports.ReadElements<jobject>()) {
Ran Jief10a6e2018-02-01 18:33:08 +000043 output_ports_.push_back(
44 std::make_unique<MidiOutputPortAndroid>(env, j_port.obj()));
yhiranobc742d82015-09-17 07:41:44 -070045 }
46}
47
48MidiDeviceAndroid::~MidiDeviceAndroid() {}
49
50std::string MidiDeviceAndroid::GetManufacturer() {
51 JNIEnv* env = base::android::AttachCurrentThread();
toyoshimff74bc22016-08-08 07:20:30 -070052 return ConvertMaybeJavaString(
torne94f81842016-08-16 08:10:44 -070053 env, Java_MidiDeviceAndroid_getManufacturer(env, raw_device_));
yhiranobc742d82015-09-17 07:41:44 -070054}
55
56std::string MidiDeviceAndroid::GetProductName() {
57 JNIEnv* env = base::android::AttachCurrentThread();
toyoshimff74bc22016-08-08 07:20:30 -070058 return ConvertMaybeJavaString(
torne94f81842016-08-16 08:10:44 -070059 env, Java_MidiDeviceAndroid_getProduct(env, raw_device_));
yhiranobc742d82015-09-17 07:41:44 -070060}
61
62std::string MidiDeviceAndroid::GetDeviceVersion() {
63 JNIEnv* env = base::android::AttachCurrentThread();
toyoshimff74bc22016-08-08 07:20:30 -070064 return ConvertMaybeJavaString(
torne94f81842016-08-16 08:10:44 -070065 env, Java_MidiDeviceAndroid_getVersion(env, raw_device_));
yhiranobc742d82015-09-17 07:41:44 -070066}
67
yhiranobc742d82015-09-17 07:41:44 -070068} // namespace midi