1// Copyright 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5package org.chromium.base; 6 7import android.app.Activity; 8import android.app.Application; 9import android.os.Bundle; 10import android.view.Window; 11 12/** 13 * Basic application functionality that should be shared among all browser applications. 14 */ 15public class BaseChromiumApplication extends Application { 16 /** 17 * Interface to be implemented by listeners for window focus events. 18 */ 19 public interface WindowFocusChangedListener { 20 /** 21 * Called when the window focus changes for {@code activity}. 22 * @param activity The {@link Activity} that has a window focus changed event. 23 * @param hasFocus Whether or not {@code activity} gained or lost focus. 24 */ 25 public void onWindowFocusChanged(Activity activity, boolean hasFocus); 26 } 27 28 private ObserverList<WindowFocusChangedListener> mWindowFocusListeners = 29 new ObserverList<WindowFocusChangedListener>(); 30 31 @Override 32 public void onCreate() { 33 super.onCreate(); 34 ApplicationStatus.initialize(this); 35 36 registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() { 37 @Override 38 public void onActivityCreated(final Activity activity, Bundle savedInstanceState) { 39 Window.Callback callback = activity.getWindow().getCallback(); 40 activity.getWindow().setCallback(new WindowCallbackWrapper(callback) { 41 @Override 42 public void onWindowFocusChanged(boolean hasFocus) { 43 super.onWindowFocusChanged(hasFocus); 44 45 for (WindowFocusChangedListener listener : mWindowFocusListeners) { 46 listener.onWindowFocusChanged(activity, hasFocus); 47 } 48 } 49 }); 50 } 51 52 @Override 53 public void onActivityDestroyed(Activity activity) { 54 assert activity.getWindow().getCallback() instanceof WindowCallbackWrapper; 55 } 56 57 @Override 58 public void onActivityPaused(Activity activity) { 59 assert activity.getWindow().getCallback() instanceof WindowCallbackWrapper; 60 } 61 62 @Override 63 public void onActivityResumed(Activity activity) { 64 assert activity.getWindow().getCallback() instanceof WindowCallbackWrapper; 65 } 66 67 @Override 68 public void onActivitySaveInstanceState(Activity activity, Bundle outState) { 69 assert activity.getWindow().getCallback() instanceof WindowCallbackWrapper; 70 } 71 72 @Override 73 public void onActivityStarted(Activity activity) { 74 assert activity.getWindow().getCallback() instanceof WindowCallbackWrapper; 75 } 76 77 @Override 78 public void onActivityStopped(Activity activity) { 79 assert activity.getWindow().getCallback() instanceof WindowCallbackWrapper; 80 } 81 }); 82 } 83 84 /** 85 * Registers a listener to receive window focus updates on activities in this application. 86 * @param listener Listener to receive window focus events. 87 */ 88 public void registerWindowFocusChangedListener(WindowFocusChangedListener listener) { 89 mWindowFocusListeners.addObserver(listener); 90 } 91 92 /** 93 * Unregisters a listener from receiving window focus updates on activities in this application. 94 * @param listener Listener that doesn't want to receive window focus events. 95 */ 96 public void unregisterWindowFocusChangedListener(WindowFocusChangedListener listener) { 97 mWindowFocusListeners.removeObserver(listener); 98 } 99} 100