Skip to content

Commit 73d64eb

Browse files
Also use ComponentCallbacks2
1 parent 3907fed commit 73d64eb

File tree

3 files changed

+52
-43
lines changed

3 files changed

+52
-43
lines changed

firebase-firestore/CHANGELOG.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
# Unreelased
1+
# Unreleased
22
- [changed] Increases the aggressiveness of network retires when an app's
3-
visibility status changes.
3+
foreground status changes.
44

55
# 23.0.1
66
- [changed] The SDK now tries to immediately establish a connection to the

firebase-firestore/src/main/java/com/google/firebase/firestore/remote/AndroidConnectivityMonitor.java

Lines changed: 50 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,11 @@
2020
import android.app.Activity;
2121
import android.app.Application;
2222
import android.content.BroadcastReceiver;
23+
import android.content.ComponentCallbacks2;
2324
import android.content.Context;
2425
import android.content.Intent;
2526
import android.content.IntentFilter;
27+
import android.content.res.Configuration;
2628
import android.net.ConnectivityManager;
2729
import android.net.Network;
2830
import android.os.Build;
@@ -33,6 +35,7 @@
3335
import com.google.firebase.firestore.util.Logger;
3436
import java.util.ArrayList;
3537
import java.util.List;
38+
import java.util.concurrent.atomic.AtomicBoolean;
3639

3740
/**
3841
* Android implementation of ConnectivityMonitor. Parallel implementations exist for N+ and pre-N.
@@ -94,47 +97,56 @@ private void configureNetworkMonitoring() {
9497
}
9598

9699
private void configureBackgroundStateListener() {
100+
Application applicationContext = (Application) context.getApplicationContext();
101+
final AtomicBoolean inBackground = new AtomicBoolean();
102+
97103
// Manually register an ActivityLifecycleCallback. Android's BackgroundDetector only notifies
98104
// when it is certain that the app transitioned from background to foreground. Instead, we
99105
// want to be notified whenever there is a slight chance that this transition happened.
100-
((Application) context.getApplicationContext())
101-
.registerActivityLifecycleCallbacks(
102-
new Application.ActivityLifecycleCallbacks() {
103-
@Nullable Activity lastActivity = null;
104-
105-
@Override
106-
public void onActivityCreated(
107-
@NonNull Activity activity, Bundle savedInstanceState) {}
108-
109-
@Override
110-
public void onActivityStarted(@NonNull Activity activity) {}
111-
112-
@Override
113-
public void onActivityResumed(@NonNull Activity activity) {
114-
// Only raise the foreground notification if the same activity when to the
115-
// background before. This prevents notifications when an app switches between
116-
// activities.
117-
if (activity == lastActivity) {
118-
raiseForegroundNotification();
119-
}
120-
lastActivity = null;
121-
}
122-
123-
@Override
124-
public void onActivityPaused(@NonNull Activity activity) {
125-
lastActivity = activity;
126-
}
127-
128-
@Override
129-
public void onActivityStopped(@NonNull Activity activity) {}
130-
131-
@Override
132-
public void onActivitySaveInstanceState(
133-
@NonNull Activity activity, @NonNull Bundle outState) {}
134-
135-
@Override
136-
public void onActivityDestroyed(@NonNull Activity activity) {}
137-
});
106+
applicationContext.registerActivityLifecycleCallbacks(
107+
new Application.ActivityLifecycleCallbacks() {
108+
@Override
109+
public void onActivityCreated(@NonNull Activity activity, Bundle savedInstanceState) {}
110+
111+
@Override
112+
public void onActivityStarted(@NonNull Activity activity) {}
113+
114+
@Override
115+
public void onActivityResumed(@NonNull Activity activity) {
116+
if (inBackground.compareAndSet(true, false)) {
117+
raiseForegroundNotification();
118+
}
119+
}
120+
121+
@Override
122+
public void onActivityPaused(@NonNull Activity activity) {}
123+
124+
@Override
125+
public void onActivityStopped(@NonNull Activity activity) {}
126+
127+
@Override
128+
public void onActivitySaveInstanceState(
129+
@NonNull Activity activity, @NonNull Bundle outState) {}
130+
131+
@Override
132+
public void onActivityDestroyed(@NonNull Activity activity) {}
133+
});
134+
135+
applicationContext.registerComponentCallbacks(
136+
new ComponentCallbacks2() {
137+
@Override
138+
public void onTrimMemory(int level) {
139+
if (level == ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN) {
140+
inBackground.set(true);
141+
}
142+
}
143+
144+
@Override
145+
public void onConfigurationChanged(@NonNull Configuration newConfig) {}
146+
147+
@Override
148+
public void onLowMemory() {}
149+
});
138150
}
139151

140152
public void raiseForegroundNotification() {

subprojects.cfg

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,6 @@ firebase-components:firebase-dynamic-module-support
1616
firebase-config
1717
firebase-config:ktx
1818
firebase-config:bandwagoner
19-
firebase-crashlytics
20-
firebase-crashlytics:ktx
21-
firebase-crashlytics-ndk
2219
firebase-database
2320
firebase-database:ktx
2421
firebase-database-collection

0 commit comments

Comments
 (0)