diff options
author | yfriedman@chromium.org <yfriedman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-21 18:25:04 +0000 |
---|---|---|
committer | yfriedman@chromium.org <yfriedman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-21 18:25:04 +0000 |
commit | dc1241f3957cbf4ee58314312d00a43f802441f9 (patch) | |
tree | 17d7e699daf74abdaa35056b3ef216dea1dc392b /sync/util | |
parent | e548b0b65c63af2d294c015a949b2f402e6bca1a (diff) | |
download | chromium_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.cc | 4 | ||||
-rw-r--r-- | sync/util/session_utils_android.cc | 76 | ||||
-rw-r--r-- | sync/util/session_utils_android.h | 26 |
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_ |