package com.jenzz.appstate; import android.annotation.SuppressLint; import android.app.Activity; import android.app.Application; import android.content.BroadcastReceiver; import android.content.ComponentCallbacks; import android.content.ComponentCallbacks2; import android.content.Intent; import android.content.IntentFilter; import android.support.annotation.NonNull; import java.util.ArrayList; import java.util.List; import static android.content.Intent.ACTION_SCREEN_OFF; @SuppressLint("Registered") public class FakeApplication extends Application { public static final Intent SCREEN_OFF = new Intent(ACTION_SCREEN_OFF); @NonNull private final List<ActivityLifecycleCallbacks> activityLifecycleCallbacks = new ArrayList<>(); @NonNull private final List<ComponentCallbacks2> componentCallbacks = new ArrayList<>(); @NonNull private final List<BroadcastReceiver> receivers = new ArrayList<>(); @Override public void registerActivityLifecycleCallbacks(ActivityLifecycleCallbacks callback) { activityLifecycleCallbacks.add(callback); } @Override public void unregisterActivityLifecycleCallbacks(ActivityLifecycleCallbacks callback) { activityLifecycleCallbacks.remove(callback); } @Override public void registerComponentCallbacks(ComponentCallbacks callback) { if (callback instanceof ComponentCallbacks2) { componentCallbacks.add((ComponentCallbacks2) callback); } } @Override public void unregisterComponentCallbacks(ComponentCallbacks callback) { if (callback instanceof ComponentCallbacks2) { componentCallbacks.remove(callback); } } @Override public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter) { receivers.add(receiver); return null; } @Override public void unregisterReceiver(BroadcastReceiver receiver) { receivers.remove(receiver); } public void goForeground() { notifyActivityStarted(); } public void goBackground() { notifyReceivers(SCREEN_OFF); } public void notifyActivityStarted() { for (ActivityLifecycleCallbacks callback : activityLifecycleCallbacks) { callback.onActivityStarted(new Activity()); } } public void notifyTrimMemory(int level) { for (ComponentCallbacks2 componentCallback : componentCallbacks) { componentCallback.onTrimMemory(level); } } public void notifyReceivers(@NonNull Intent intent) { for (BroadcastReceiver receiver : receivers) { receiver.onReceive(this, intent); } } }