NekoX/TMessagesProj/src/main/java/org/telegram/ui/Components/ForegroundDetector.java

128 lines
3.4 KiB
Java

/*
* This is the source code of Telegram for Android v. 5.x.x
* It is licensed under GNU GPL v. 2 or later.
* You should have received a copy of the license in this archive (see LICENSE).
*
* Copyright Nikolai Kudashov, 2013-2018.
*/
package org.telegram.ui.Components;
import android.app.Activity;
import android.app.Application;
import android.os.Build;
import android.os.Bundle;
import android.os.SystemClock;
import org.telegram.messenger.BuildVars;
import org.telegram.messenger.FileLog;
import java.util.concurrent.CopyOnWriteArrayList;
public class ForegroundDetector implements Application.ActivityLifecycleCallbacks {
public interface Listener {
void onBecameForeground();
void onBecameBackground();
}
private int refs;
private boolean wasInBackground = true;
private long enterBackgroundTime = 0;
private CopyOnWriteArrayList<Listener> listeners = new CopyOnWriteArrayList<>();
private static ForegroundDetector Instance = null;
public static ForegroundDetector getInstance() {
return Instance;
}
public ForegroundDetector(Application application) {
Instance = this;
application.registerActivityLifecycleCallbacks(this);
}
public boolean isForeground() {
return refs > 0;
}
public boolean isBackground() {
return refs == 0;
}
public void addListener(Listener listener) {
listeners.add(listener);
}
public void removeListener(Listener listener) {
listeners.remove(listener);
}
@Override
public void onActivityStarted(Activity activity) {
if (++refs == 1) {
if (SystemClock.elapsedRealtime() - enterBackgroundTime < 200) {
wasInBackground = false;
}
if (BuildVars.LOGS_ENABLED) {
FileLog.d("switch to foreground");
}
for (Listener listener : listeners) {
try {
listener.onBecameForeground();
} catch (Exception e) {
FileLog.e(e);
}
}
}
}
public boolean isWasInBackground(boolean reset) {
if (reset && Build.VERSION.SDK_INT >= 21 && (SystemClock.elapsedRealtime() - enterBackgroundTime < 200)) {
wasInBackground = false;
}
return wasInBackground;
}
public void resetBackgroundVar() {
wasInBackground = false;
}
@Override
public void onActivityStopped(Activity activity) {
if (--refs == 0) {
enterBackgroundTime = SystemClock.elapsedRealtime();
wasInBackground = true;
if (BuildVars.LOGS_ENABLED) {
FileLog.d("switch to background");
}
for (Listener listener : listeners) {
try {
listener.onBecameBackground();
} catch (Exception e) {
FileLog.e(e);
}
}
}
}
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
}
@Override
public void onActivityResumed(Activity activity) {
}
@Override
public void onActivityPaused(Activity activity) {
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
@Override
public void onActivityDestroyed(Activity activity) {
}
}