summaryrefslogtreecommitdiffstats
path: root/sync/util
diff options
context:
space:
mode:
authoryfriedman@chromium.org <yfriedman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-21 18:25:04 +0000
committeryfriedman@chromium.org <yfriedman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-21 18:25:04 +0000
commitdc1241f3957cbf4ee58314312d00a43f802441f9 (patch)
tree17d7e699daf74abdaa35056b3ef216dea1dc392b /sync/util
parente548b0b65c63af2d294c015a949b2f402e6bca1a (diff)
downloadchromium_src-dc1241f3957cbf4ee58314312d00a43f802441f9.zip
chromium_src-dc1241f3957cbf4ee58314312d00a43f802441f9.tar.gz
chromium_src-dc1241f3957cbf4ee58314312d00a43f802441f9.tar.bz2
Continue implementing session sync for Android.
Adds utilities to get the device name and model type. IsTablet is stubbed due to additional Java deps. Note that if we actually ran unit_tests for Android they'd crash with this change since it depends on the Android framework and we don't have apk-based tests yet, but this happily compiles and links and sync_unit_tests still runs and passes. BUG= TEST= Review URL: http://codereview.chromium.org/9704060 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@128010 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'sync/util')
-rw-r--r--sync/util/get_session_name.cc4
-rw-r--r--sync/util/session_utils_android.cc76
-rw-r--r--sync/util/session_utils_android.h26
3 files changed, 106 insertions, 0 deletions
diff --git a/sync/util/get_session_name.cc b/sync/util/get_session_name.cc
index e37c12f..a447b3e 100644
--- a/sync/util/get_session_name.cc
+++ b/sync/util/get_session_name.cc
@@ -17,6 +17,8 @@
#include "sync/util/get_session_name_mac.h"
#elif defined(OS_WIN)
#include "sync/util/get_session_name_win.h"
+#elif defined(OS_ANDROID)
+#include "sync/util/session_utils_android.h"
#endif
namespace browser_sync {
@@ -33,6 +35,8 @@ std::string GetSessionNameSynchronously() {
session_name = internal::GetHardwareModelName();
#elif defined(OS_WIN)
session_name = internal::GetComputerName();
+#elif defined(OS_ANDROID)
+ session_name = internal::GetModel();
#endif
if (session_name == "Unknown" || session_name.empty())
diff --git a/sync/util/session_utils_android.cc b/sync/util/session_utils_android.cc
new file mode 100644
index 0000000..4eee6a3
--- /dev/null
+++ b/sync/util/session_utils_android.cc
@@ -0,0 +1,76 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <jni.h>
+#include <sys/system_properties.h>
+
+#include "sync/util/session_utils_android.h"
+
+#include "base/android/jni_android.h"
+#include "base/android/jni_string.h"
+#include "base/android/scoped_java_ref.h"
+#include "base/logging.h"
+
+using base::android::AttachCurrentThread;
+using base::android::CheckException;
+using base::android::ConvertUTF8ToJavaString;
+using base::android::GetApplicationContext;
+using base::android::GetClass;
+using base::android::JavaRef;
+using base::android::ScopedJavaLocalRef;
+
+namespace {
+
+ScopedJavaLocalRef<jstring> GetAndroidIdJNI(
+ JNIEnv* env, const JavaRef<jobject>& content_resolver) {
+ ScopedJavaLocalRef<jclass> clazz(
+ GetClass(env, "android/provider/Settings$Secure"));
+ jmethodID j_get_string = GetStaticMethodID(env, clazz, "getString",
+ "(Landroid/content/ContentResolver;Ljava/lang/String;)"
+ "Ljava/lang/String;");
+ ScopedJavaLocalRef<jstring> j_android_id =
+ ConvertUTF8ToJavaString(env, "android_id");
+ jstring android_id = static_cast<jstring>(
+ env->CallStaticObjectMethod(
+ clazz.obj(), j_get_string, content_resolver.obj(),
+ j_android_id.obj()));
+ CheckException(env);
+ return ScopedJavaLocalRef<jstring>(env, android_id);
+}
+
+ScopedJavaLocalRef<jobject> GetContentResolver(JNIEnv* env) {
+ ScopedJavaLocalRef<jclass> clazz(GetClass(env, "android/content/Context"));
+ jmethodID j_get_content_resolver_method = GetMethodID(
+ env, clazz,"getContentResolver", "()Landroid/content/ContentResolver;");
+ jobject content_resolver = env->CallObjectMethod(
+ GetApplicationContext(), j_get_content_resolver_method);
+ CheckException(env);
+ return ScopedJavaLocalRef<jobject>(env, content_resolver);
+}
+
+}
+
+namespace browser_sync {
+namespace internal {
+
+std::string GetAndroidId() {
+ JNIEnv* env = AttachCurrentThread();
+ ScopedJavaLocalRef<jstring> android_id =
+ GetAndroidIdJNI(env, GetContentResolver(env));
+ return ConvertJavaStringToUTF8(android_id);
+}
+
+std::string GetModel() {
+ char model[PROP_VALUE_MAX];
+ __system_property_get("ro.product.model", model);
+ return model;
+}
+
+bool IsTabletUi() {
+ NOTIMPLEMENTED() << "TODO(yfriedman): Upstream this";
+ return true;
+}
+
+} // namespace internal
+} // namespace browser_sync
diff --git a/sync/util/session_utils_android.h b/sync/util/session_utils_android.h
new file mode 100644
index 0000000..6d09b7c
--- /dev/null
+++ b/sync/util/session_utils_android.h
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef SYNC_UTIL_SESSION_UTILS_ANDROID_H_
+#define SYNC_UTIL_SESSION_UTILS_ANDROID_H_
+#pragma once
+
+#include <string>
+
+namespace browser_sync {
+namespace internal {
+
+// Return the unique identifier of this device.
+std::string GetAndroidId();
+
+// Return the end-user-visible name for this device.
+std::string GetModel();
+
+// Return if the device is a tablet.
+bool IsTabletUi();
+
+} // namespace internal
+} // namespace browser_sync
+
+#endif // SYNC_UTIL_SESSION_UTILS_ANDROID_H_