Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(138)

Side by Side Diff: content/browser/gamepad/gamepad_platform_data_fetcher_android.cc

Issue 165483003: Gamepad API for Android (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: address comments Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2014 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 "content/browser/gamepad/gamepad_platform_data_fetcher_android.h"
6
7 #include "base/android/jni_array.h"
8 #include "base/android/jni_string.h"
9 #include "base/debug/trace_event.h"
10 #include "base/strings/string16.h"
11 #include "jni/GamepadAdapter_jni.h"
12 #include "third_party/WebKit/public/platform/WebGamepad.h"
13
14 using base::android::AttachCurrentThread;
15 using base::string16;
16 using blink::WebGamepad;
17 using blink::WebGamepads;
18
19 namespace content {
20
21 namespace {
22
23 template <size_t array_length>
24 void CopyJavaStringToWebUCharArray(
25 JNIEnv* env, jstring src, blink::WebUChar* array) {
26 COMPILE_ASSERT(sizeof(string16::value_type) == sizeof(blink::WebUChar),
27 string16_and_WebUChar_are_same_size);
28 string16 data;
29 base::android::ConvertJavaStringToUTF16(env, src, &data);
30 COMPILE_ASSERT(array_length > 0, array_length_at_least_1);
31 const size_t characters_to_copy = std::min(data.size(), array_length - 1);
32 memcpy(array, data.data(), characters_to_copy * sizeof(string16::value_type));
33 array[characters_to_copy] = 0;
34 }
35
36 }
37
38 static void RefreshGamepad(
39 JNIEnv* env,
40 jobject obj,
41 jlong gamepads,
42 jint index,
43 jboolean connected,
44 jstring id,
45 jstring mapping,
46 jlong timestamp,
47 jfloatArray axes,
48 jfloatArray buttons) {
49 WebGamepad& pad = reinterpret_cast<WebGamepads*>(gamepads)->items[index];
50 pad.connected = connected;
51 if (!connected)
52 return;
53
54 CopyJavaStringToWebUCharArray<WebGamepad::idLengthCap>(env, id, pad.id);
55 CopyJavaStringToWebUCharArray<WebGamepad::mappingLengthCap>(
56 env, mapping, pad.mapping);
57
58 pad.timestamp = timestamp;
59
60 std::vector<float> axes_data;
61 base::android::JavaFloatArrayToFloatVector(env, axes, &axes_data);
62 pad.axesLength = std::min(axes_data.size(), WebGamepad::axesLengthCap);
63 memcpy(pad.axes, axes_data.begin(), pad.axesLength * sizeof(float));
64
65 std::vector<float> buttons_data;
66 base::android::JavaFloatArrayToFloatVector(env, buttons, &buttons_data);
67 pad.buttonsLength =
68 std::min(buttons_data.size(), WebGamepad::buttonsLengthCap);
69 for (unsigned i = 0; i < pad.buttonsLength; ++i) {
70 float value = buttons_data[i];
71 pad.buttons[i].pressed = value;
72 pad.buttons[i].value = value;
73 }
74 }
75
76 GamepadPlatformDataFetcherAndroid::GamepadPlatformDataFetcherAndroid() {
77 Java_GamepadAdapter_setDataRequested(AttachCurrentThread(), true);
78 }
79
80 GamepadPlatformDataFetcherAndroid::~GamepadPlatformDataFetcherAndroid() {
81 }
82
83 void GamepadPlatformDataFetcherAndroid::GetGamepadData(
84 WebGamepads* pads,
85 bool devices_changed_hint) {
86 TRACE_EVENT0("GAMEPAD", "GetGamepadData");
87 pads->length = WebGamepads::itemsLengthCap;
88 Java_GamepadAdapter_getGamepadData(
89 AttachCurrentThread(), reinterpret_cast<intptr_t>(pads));
90 }
91
92 void GamepadPlatformDataFetcherAndroid::PauseHint(bool paused) {
93 Java_GamepadAdapter_setDataRequested(AttachCurrentThread(), !paused);
94 }
95
96 bool GamepadPlatformDataFetcherAndroid::RegisterGamepadAdapter(JNIEnv* env) {
97 return RegisterNativesImpl(env);
98 }
99
100 }
OLDNEW
« no previous file with comments | « content/browser/gamepad/gamepad_platform_data_fetcher_android.h ('k') | content/browser/gamepad/gamepad_provider.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698