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 /** Registration policy which depends on the ApplicationState. */ 11 public class RegistrationPolicyApplicationStatus 12 extends NetworkChangeNotifierAutoDetect.RegistrationPolicy 13 implements ApplicationStatus.ApplicationStateListener { 14 private boolean mDestroyed; 15 16 @Override init(NetworkChangeNotifierAutoDetect notifier)17 protected void init(NetworkChangeNotifierAutoDetect notifier) { 18 super.init(notifier); 19 ApplicationStatus.registerApplicationStateListener(this); 20 onApplicationStateChange(ApplicationState.UNKNOWN); 21 } 22 23 @Override destroy()24 protected void destroy() { 25 if (mDestroyed) return; 26 ApplicationStatus.unregisterApplicationStateListener(this); 27 mDestroyed = true; 28 } 29 30 // ApplicationStatus.ApplicationStateListener 31 @Override onApplicationStateChange(int newState)32 public void onApplicationStateChange(int newState) { 33 // Use hasVisibleActivities() to determine if one of Chrome's activities 34 // is visible. Using |newState| causes spurious unregister then register 35 // events when flipping between Chrome's Activities, crbug.com/1030229. 36 if (ApplicationStatus.hasVisibleActivities()) { 37 register(); 38 } else { 39 unregister(); 40 } 41 } 42 } 43