// 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 #include "base/memory/singleton.h" #include "jni/ActivityStatus_jni.h" namespace base { namespace android { ActivityStatus::Listener::Listener( const ActivityStatus::StateChangeCallback& callback) : callback_(callback) { 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 >::get(); } static void OnActivityStateChange(JNIEnv* env, jclass clazz, int new_state) { ActivityStatus* activity_status = ActivityStatus::GetInstance(); ActivityState activity_state = static_cast(new_state); activity_status->OnActivityStateChange(activity_state); } bool ActivityStatus::RegisterBindings(JNIEnv* env) { return RegisterNativesImpl(env); } ActivityStatus::ActivityStatus() : observers_(new ObserverListThreadSafe()) { 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