Index: base/android/activity_status.cc |
diff --git a/base/android/activity_status.cc b/base/android/activity_status.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..8fd549685cd364f0836175b8723133e6ba5c4624 |
--- /dev/null |
+++ b/base/android/activity_status.cc |
@@ -0,0 +1,68 @@ |
+// Copyright 2013 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 "base/android/activity_status.h" |
+ |
+#include <jni.h> |
+ |
+#include "base/memory/singleton.h" |
+#include "jni/ActivityStatus_jni.h" |
+ |
+namespace base { |
+namespace android { |
+ |
+ActivityStatus::Listener::Listener( |
+ const ActivityStatus::StateChangeCallback& callback) |
+ : callback_(callback) { |
joth
2013/04/26 20:29:10
nit: indent
digit1
2013/04/29 12:22:10
I've applied clang-format to the new sources.
|
+ ActivityStatus::GetInstance()->RegisterListener(this); |
+} |
+ |
+ActivityStatus::Listener::~Listener() { |
+ ActivityStatus::GetInstance()->UnregisterListener(this); |
+} |
+ |
+void ActivityStatus::Listener::Notify(ActivityState state) { |
+ callback_.Run(state); |
+} |
+ |
+// static |
+ActivityStatus* ActivityStatus::GetInstance() { |
+ return Singleton |
+ <ActivityStatus, LeakySingletonTraits<ActivityStatus> >::get(); |
+} |
+ |
+static void OnActivityStateChange( |
+ JNIEnv* env, jclass clazz, int new_state) { |
+ ActivityStatus* activity_status = ActivityStatus::GetInstance(); |
+ ActivityState activity_state = static_cast<ActivityState>(new_state); |
+ activity_status->OnActivityStateChange(activity_state); |
+} |
+ |
+bool ActivityStatus::RegisterBindings(JNIEnv* env) { |
+ return RegisterNativesImpl(env); |
+} |
+ |
+ActivityStatus::ActivityStatus() |
+ : observers_(new ObserverListThreadSafe<Listener>()) { |
+ Java_ActivityStatus_registerThreadSafeNativeStateListener( |
+ base::android::AttachCurrentThread()); |
+} |
+ |
+ActivityStatus::~ActivityStatus() { |
+} |
+ |
+void ActivityStatus::RegisterListener(Listener* listener) { |
+ observers_->AddObserver(listener); |
+} |
+ |
+void ActivityStatus::UnregisterListener(Listener* listener) { |
+ observers_->RemoveObserver(listener); |
+} |
+ |
+void ActivityStatus::OnActivityStateChange(ActivityState new_state) { |
+ observers_->Notify(&ActivityStatus::Listener::Notify, new_state); |
+} |
+ |
+} // namespace android |
+} // namespace base |