1 // Copyright 2015 The Chromium Authors 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 package org.chromium.net; 6 7 import org.chromium.base.ApplicationState; 8 import org.chromium.base.ApplicationStatus; 9 10 /** 11 * Regsitration policy which depends on the ApplicationState. 12 */ 13 public class RegistrationPolicyApplicationStatus 14 extends NetworkChangeNotifierAutoDetect.RegistrationPolicy 15 implements ApplicationStatus.ApplicationStateListener { 16 private boolean mDestroyed; 17 18 @Override init(NetworkChangeNotifierAutoDetect notifier)19 protected void init(NetworkChangeNotifierAutoDetect notifier) { 20 super.init(notifier); 21 ApplicationStatus.registerApplicationStateListener(this); 22 onApplicationStateChange(ApplicationState.UNKNOWN /* unused */); 23 } 24 25 @Override destroy()26 protected void destroy() { 27 if (mDestroyed) return; 28 ApplicationStatus.unregisterApplicationStateListener(this); 29 mDestroyed = true; 30 } 31 32 // ApplicationStatus.ApplicationStateListener 33 @Override onApplicationStateChange(int newState)34 public void onApplicationStateChange(int newState) { 35 // Use hasVisibleActivities() to determine if one of Chrome's activities 36 // is visible. Using |newState| causes spurious unregister then register 37 // events when flipping between Chrome's Activities, crbug.com/1030229. 38 if (ApplicationStatus.hasVisibleActivities()) { 39 register(); 40 } else { 41 unregister(); 42 } 43 } 44 } 45