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

Unified Diff: remoting/client/jni/chromoting_jni_runtime.cc

Issue 29583003: Use jni_generator in Chromoting Android client (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed Created 7 years, 2 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « remoting/client/jni/chromoting_jni_runtime.h ('k') | remoting/client/jni/jni_interface.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/client/jni/chromoting_jni_runtime.cc
diff --git a/remoting/client/jni/chromoting_jni_runtime.cc b/remoting/client/jni/chromoting_jni_runtime.cc
index 11ca7309d3f99f686d37c40a464bcc7a334a5cec..6b531faab77133566477eec8a4903dcd52ee9ed9 100644
--- a/remoting/client/jni/chromoting_jni_runtime.cc
+++ b/remoting/client/jni/chromoting_jni_runtime.cc
@@ -4,21 +4,23 @@
#include "remoting/client/jni/chromoting_jni_runtime.h"
-#include "base/android/base_jni_registrar.h"
#include "base/android/jni_android.h"
+#include "base/android/jni_string.h"
#include "base/android/scoped_java_ref.h"
+#include "base/basictypes.h"
+#include "base/command_line.h"
#include "base/memory/singleton.h"
#include "base/stl_util.h"
#include "base/synchronization/waitable_event.h"
+#include "google_apis/google_api_keys.h"
+#include "jni/JniInterface_jni.h"
#include "media/base/yuv_convert.h"
-#include "net/android/net_jni_registrar.h"
#include "remoting/base/url_request_context.h"
#include "third_party/webrtc/modules/desktop_capture/desktop_frame.h"
-namespace {
+using base::android::ConvertJavaStringToUTF8;
-// Class and package name of the Java class supporting the methods we call.
-const char* const kJavaClass = "org/chromium/chromoting/jni/JniInterface";
+namespace {
const int kBytesPerPixel = 4;
@@ -26,22 +28,110 @@ const int kBytesPerPixel = 4;
namespace remoting {
+bool RegisterJni(JNIEnv* env) {
+ return remoting::RegisterNativesImpl(env);
+}
+
+// Implementation of stubs defined in JniInterface_jni.h. These are the entry
+// points for JNI calls from Java into C++.
+
+static void LoadNative(JNIEnv* env, jclass clazz, jobject context) {
+ base::android::ScopedJavaLocalRef<jobject> context_activity(env, context);
+ base::android::InitApplicationContext(context_activity);
+
+ // The google_apis functions check the command-line arguments to make sure no
+ // runtime API keys have been specified by the environment. Unfortunately, we
+ // neither launch Chromium nor have a command line, so we need to prevent
+ // them from DCHECKing out when they go looking.
+ CommandLine::Init(0, NULL);
+
+ // Create the singleton now so that the Chromoting threads will be set up.
+ remoting::ChromotingJniRuntime::GetInstance();
+}
+
+static jstring GetApiKey(JNIEnv* env, jclass clazz) {
+ return env->NewStringUTF(google_apis::GetAPIKey().c_str());
+}
+
+static jstring GetClientId(JNIEnv* env, jclass clazz) {
+ return env->NewStringUTF(
+ google_apis::GetOAuth2ClientID(google_apis::CLIENT_REMOTING).c_str());
+}
+
+static jstring GetClientSecret(JNIEnv* env, jclass clazz) {
+ return env->NewStringUTF(
+ google_apis::GetOAuth2ClientSecret(google_apis::CLIENT_REMOTING).c_str());
+}
+
+static void Connect(JNIEnv* env,
+ jclass clazz,
+ jstring username,
+ jstring authToken,
+ jstring hostJid,
+ jstring hostId,
+ jstring hostPubkey,
+ jstring pairId,
+ jstring pairSecret) {
+ remoting::ChromotingJniRuntime::GetInstance()->ConnectToHost(
+ ConvertJavaStringToUTF8(env, username).c_str(),
+ ConvertJavaStringToUTF8(env, authToken).c_str(),
+ ConvertJavaStringToUTF8(env, hostJid).c_str(),
+ ConvertJavaStringToUTF8(env, hostId).c_str(),
+ ConvertJavaStringToUTF8(env, hostPubkey).c_str(),
+ ConvertJavaStringToUTF8(env, pairId).c_str(),
+ ConvertJavaStringToUTF8(env, pairSecret).c_str());
+}
+
+static void Disconnect(JNIEnv* env, jclass clazz) {
+ remoting::ChromotingJniRuntime::GetInstance()->DisconnectFromHost();
+}
+
+static void AuthenticationResponse(JNIEnv* env,
+ jclass clazz,
+ jstring pin,
+ jboolean createPair) {
+ remoting::ChromotingJniRuntime::GetInstance()->session()->ProvideSecret(
+ ConvertJavaStringToUTF8(env, pin).c_str(), createPair);
+}
+
+static void ScheduleRedraw(JNIEnv* env, jclass clazz) {
+ remoting::ChromotingJniRuntime::GetInstance()->session()->RedrawDesktop();
+}
+
+static void MouseAction(JNIEnv* env,
+ jclass clazz,
+ jint x,
+ jint y,
+ jint whichButton,
+ jboolean buttonDown) {
+ // Button must be within the bounds of the MouseEvent_MouseButton enum.
+ DCHECK(whichButton >= 0 && whichButton < 5);
+
+ remoting::ChromotingJniRuntime::GetInstance()->session()->PerformMouseAction(
+ x,
+ y,
+ static_cast<remoting::protocol::MouseEvent_MouseButton>(whichButton),
+ buttonDown);
+}
+
+static void KeyboardAction(JNIEnv* env,
+ jclass clazz,
+ jint keyCode,
+ jboolean keyDown) {
+ remoting::ChromotingJniRuntime::GetInstance()
+ ->session()
+ ->PerformKeyboardAction(keyCode, keyDown);
+}
+
+// ChromotingJniRuntime implementation.
+
// static
ChromotingJniRuntime* ChromotingJniRuntime::GetInstance() {
return Singleton<ChromotingJniRuntime>::get();
}
ChromotingJniRuntime::ChromotingJniRuntime() {
- // Obtain a reference to the Java environment. (Future calls to this function
- // made from the same thread return the same stored reference instead of
- // repeating the work of attaching to the JVM.)
- JNIEnv* env = base::android::AttachCurrentThread();
-
- // The base and networks stacks must be registered with JNI in order to work
- // on Android. An AtExitManager cleans this up at process exit.
at_exit_manager_.reset(new base::AtExitManager());
- base::android::RegisterJni(env);
- net::android::RegisterJni(env);
// On Android, the UI thread is managed by Java, so we need to attach and
// start a special type of message loop to allow Chromium code to run tasks.
@@ -63,8 +153,6 @@ ChromotingJniRuntime::ChromotingJniRuntime() {
// Allows later decoding of video frames.
media::InitializeCPUSpecificYUVConversions();
-
- class_ = static_cast<jclass>(env->NewGlobalRef(env->FindClass(kJavaClass)));
}
ChromotingJniRuntime::~ChromotingJniRuntime() {
@@ -75,9 +163,6 @@ ChromotingJniRuntime::~ChromotingJniRuntime() {
// components' still being alive.
DisconnectFromHost();
- JNIEnv* env = base::android::AttachCurrentThread();
- env->DeleteGlobalRef(class_);
-
base::WaitableEvent done_event(false, false);
network_task_runner_->PostTask(FROM_HERE, base::Bind(
&ChromotingJniRuntime::DetachFromVmAndSignal,
@@ -125,21 +210,14 @@ void ChromotingJniRuntime::ReportConnectionStatus(
DCHECK(ui_task_runner_->BelongsToCurrentThread());
JNIEnv* env = base::android::AttachCurrentThread();
- env->CallStaticVoidMethod(
- class_,
- env->GetStaticMethodID(class_, "reportConnectionStatus", "(II)V"),
- state,
- error);
+ Java_JniInterface_reportConnectionStatus(env, state, error);
}
void ChromotingJniRuntime::DisplayAuthenticationPrompt(bool pairing_supported) {
DCHECK(ui_task_runner_->BelongsToCurrentThread());
JNIEnv* env = base::android::AttachCurrentThread();
- env->CallStaticVoidMethod(
- class_,
- env->GetStaticMethodID(class_, "displayAuthenticationPrompt", "(Z)V"),
- pairing_supported);
+ Java_JniInterface_displayAuthenticationPrompt(env, pairing_supported);
}
void ChromotingJniRuntime::CommitPairingCredentials(const std::string& host,
@@ -156,15 +234,8 @@ void ChromotingJniRuntime::CommitPairingCredentials(const std::string& host,
env->SetByteArrayRegion(secret_arr, 0, secret.size(),
reinterpret_cast<const jbyte*>(secret.c_str()));
- env->CallStaticVoidMethod(
- class_,
- env->GetStaticMethodID(
- class_,
- "commitPairingCredentials",
- "(Ljava/lang/String;[B[B)V"),
- host_jstr,
- id_arr,
- secret_arr);
+ Java_JniInterface_commitPairingCredentials(env, host_jstr, id_arr,
+ secret_arr);
// Because we passed them as arguments, their corresponding Java objects were
// GCd as soon as the managed method returned, so we mustn't release it here.
@@ -173,30 +244,14 @@ void ChromotingJniRuntime::CommitPairingCredentials(const std::string& host,
base::android::ScopedJavaLocalRef<jobject> ChromotingJniRuntime::NewBitmap(
webrtc::DesktopSize size) {
JNIEnv* env = base::android::AttachCurrentThread();
-
- jobject bitmap = env->CallStaticObjectMethod(
- class_,
- env->GetStaticMethodID(
- class_,
- "newBitmap",
- "(II)Landroid/graphics/Bitmap;"),
- size.width(),
- size.height());
- return base::android::ScopedJavaLocalRef<jobject>(env, bitmap);
+ return Java_JniInterface_newBitmap(env, size.width(), size.height());
}
void ChromotingJniRuntime::UpdateFrameBitmap(jobject bitmap) {
DCHECK(display_task_runner_->BelongsToCurrentThread());
JNIEnv* env = base::android::AttachCurrentThread();
-
- env->CallStaticVoidMethod(
- class_,
- env->GetStaticMethodID(
- class_,
- "setVideoFrame",
- "(Landroid/graphics/Bitmap;)V"),
- bitmap);
+ Java_JniInterface_setVideoFrame(env, bitmap);
}
void ChromotingJniRuntime::UpdateCursorShape(
@@ -214,26 +269,19 @@ void ChromotingJniRuntime::UpdateCursorShape(
JNIEnv* env = base::android::AttachCurrentThread();
base::android::ScopedJavaLocalRef<jobject> buffer(env,
env->NewDirectByteBuffer(data, cursor_total_bytes));
- env->CallStaticVoidMethod(
- class_,
- env->GetStaticMethodID(
- class_,
- "updateCursorShape",
- "(IIIILjava/nio/ByteBuffer;)V"),
- cursor_shape.width(),
- cursor_shape.height(),
- cursor_shape.hotspot_x(),
- cursor_shape.hotspot_y(),
- buffer.obj());
+ Java_JniInterface_updateCursorShape(env,
+ cursor_shape.width(),
+ cursor_shape.height(),
+ cursor_shape.hotspot_x(),
+ cursor_shape.hotspot_y(),
+ buffer.obj());
}
void ChromotingJniRuntime::RedrawCanvas() {
DCHECK(display_task_runner_->BelongsToCurrentThread());
JNIEnv* env = base::android::AttachCurrentThread();
- env->CallStaticVoidMethod(
- class_,
- env->GetStaticMethodID(class_, "redrawGraphicsInternal", "()V"));
+ Java_JniInterface_redrawGraphicsInternal(env);
}
void ChromotingJniRuntime::DetachFromVmAndSignal(base::WaitableEvent* waiter) {
« no previous file with comments | « remoting/client/jni/chromoting_jni_runtime.h ('k') | remoting/client/jni/jni_interface.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698