186 lines
6.7 KiB
Java
186 lines
6.7 KiB
Java
package androidx.lifecycle;
|
|
|
|
import android.app.Activity;
|
|
import android.app.Application;
|
|
import android.app.Fragment;
|
|
import android.app.FragmentManager;
|
|
import android.os.Build;
|
|
import android.os.Bundle;
|
|
import androidx.annotation.NonNull;
|
|
import androidx.annotation.Nullable;
|
|
import androidx.annotation.RequiresApi;
|
|
import androidx.annotation.RestrictTo;
|
|
import androidx.lifecycle.Lifecycle;
|
|
@RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX})
|
|
public class ReportFragment extends Fragment {
|
|
private static final String REPORT_FRAGMENT_TAG = "androidx.lifecycle.LifecycleDispatcher.report_fragment_tag";
|
|
private ActivityInitializationListener mProcessListener;
|
|
|
|
public interface ActivityInitializationListener {
|
|
void onCreate();
|
|
|
|
void onResume();
|
|
|
|
void onStart();
|
|
}
|
|
|
|
@RequiresApi(29)
|
|
public static class LifecycleCallbacks implements Application.ActivityLifecycleCallbacks {
|
|
public static void registerIn(Activity activity) {
|
|
activity.registerActivityLifecycleCallbacks(new LifecycleCallbacks());
|
|
}
|
|
|
|
@Override // android.app.Application.ActivityLifecycleCallbacks
|
|
public void onActivityCreated(@NonNull Activity activity, @Nullable Bundle bundle) {
|
|
}
|
|
|
|
@Override // android.app.Application.ActivityLifecycleCallbacks
|
|
public void onActivityDestroyed(@NonNull Activity activity) {
|
|
}
|
|
|
|
@Override // android.app.Application.ActivityLifecycleCallbacks
|
|
public void onActivityPaused(@NonNull Activity activity) {
|
|
}
|
|
|
|
@Override // android.app.Application.ActivityLifecycleCallbacks
|
|
public void onActivityPostCreated(@NonNull Activity activity, @Nullable Bundle bundle) {
|
|
ReportFragment.dispatch(activity, Lifecycle.Event.ON_CREATE);
|
|
}
|
|
|
|
@Override // android.app.Application.ActivityLifecycleCallbacks
|
|
public void onActivityPostResumed(@NonNull Activity activity) {
|
|
ReportFragment.dispatch(activity, Lifecycle.Event.ON_RESUME);
|
|
}
|
|
|
|
@Override // android.app.Application.ActivityLifecycleCallbacks
|
|
public void onActivityPostStarted(@NonNull Activity activity) {
|
|
ReportFragment.dispatch(activity, Lifecycle.Event.ON_START);
|
|
}
|
|
|
|
@Override // android.app.Application.ActivityLifecycleCallbacks
|
|
public void onActivityPreDestroyed(@NonNull Activity activity) {
|
|
ReportFragment.dispatch(activity, Lifecycle.Event.ON_DESTROY);
|
|
}
|
|
|
|
@Override // android.app.Application.ActivityLifecycleCallbacks
|
|
public void onActivityPrePaused(@NonNull Activity activity) {
|
|
ReportFragment.dispatch(activity, Lifecycle.Event.ON_PAUSE);
|
|
}
|
|
|
|
@Override // android.app.Application.ActivityLifecycleCallbacks
|
|
public void onActivityPreStopped(@NonNull Activity activity) {
|
|
ReportFragment.dispatch(activity, Lifecycle.Event.ON_STOP);
|
|
}
|
|
|
|
@Override // android.app.Application.ActivityLifecycleCallbacks
|
|
public void onActivityResumed(@NonNull Activity activity) {
|
|
}
|
|
|
|
@Override // android.app.Application.ActivityLifecycleCallbacks
|
|
public void onActivitySaveInstanceState(@NonNull Activity activity, @NonNull Bundle bundle) {
|
|
}
|
|
|
|
@Override // android.app.Application.ActivityLifecycleCallbacks
|
|
public void onActivityStarted(@NonNull Activity activity) {
|
|
}
|
|
|
|
@Override // android.app.Application.ActivityLifecycleCallbacks
|
|
public void onActivityStopped(@NonNull Activity activity) {
|
|
}
|
|
}
|
|
|
|
public static void dispatch(@NonNull Activity activity, @NonNull Lifecycle.Event event) {
|
|
if (activity instanceof LifecycleRegistryOwner) {
|
|
((LifecycleRegistryOwner) activity).getLifecycle().handleLifecycleEvent(event);
|
|
} else if (activity instanceof LifecycleOwner) {
|
|
Lifecycle lifecycle = ((LifecycleOwner) activity).getLifecycle();
|
|
if (lifecycle instanceof LifecycleRegistry) {
|
|
((LifecycleRegistry) lifecycle).handleLifecycleEvent(event);
|
|
}
|
|
}
|
|
}
|
|
|
|
private void dispatch(@NonNull Lifecycle.Event event) {
|
|
if (Build.VERSION.SDK_INT < 29) {
|
|
dispatch(getActivity(), event);
|
|
}
|
|
}
|
|
|
|
private void dispatchCreate(ActivityInitializationListener activityInitializationListener) {
|
|
if (activityInitializationListener != null) {
|
|
activityInitializationListener.onCreate();
|
|
}
|
|
}
|
|
|
|
private void dispatchResume(ActivityInitializationListener activityInitializationListener) {
|
|
if (activityInitializationListener != null) {
|
|
activityInitializationListener.onResume();
|
|
}
|
|
}
|
|
|
|
private void dispatchStart(ActivityInitializationListener activityInitializationListener) {
|
|
if (activityInitializationListener != null) {
|
|
activityInitializationListener.onStart();
|
|
}
|
|
}
|
|
|
|
public static ReportFragment get(Activity activity) {
|
|
return (ReportFragment) activity.getFragmentManager().findFragmentByTag(REPORT_FRAGMENT_TAG);
|
|
}
|
|
|
|
public static void injectIfNeededIn(Activity activity) {
|
|
if (Build.VERSION.SDK_INT >= 29) {
|
|
LifecycleCallbacks.registerIn(activity);
|
|
}
|
|
FragmentManager fragmentManager = activity.getFragmentManager();
|
|
if (fragmentManager.findFragmentByTag(REPORT_FRAGMENT_TAG) == null) {
|
|
fragmentManager.beginTransaction().add(new ReportFragment(), REPORT_FRAGMENT_TAG).commit();
|
|
fragmentManager.executePendingTransactions();
|
|
}
|
|
}
|
|
|
|
@Override // android.app.Fragment
|
|
public void onActivityCreated(Bundle bundle) {
|
|
super.onActivityCreated(bundle);
|
|
dispatchCreate(this.mProcessListener);
|
|
dispatch(Lifecycle.Event.ON_CREATE);
|
|
}
|
|
|
|
@Override // android.app.Fragment
|
|
public void onDestroy() {
|
|
super.onDestroy();
|
|
dispatch(Lifecycle.Event.ON_DESTROY);
|
|
this.mProcessListener = null;
|
|
}
|
|
|
|
@Override // android.app.Fragment
|
|
public void onPause() {
|
|
super.onPause();
|
|
dispatch(Lifecycle.Event.ON_PAUSE);
|
|
}
|
|
|
|
@Override // android.app.Fragment
|
|
public void onResume() {
|
|
super.onResume();
|
|
dispatchResume(this.mProcessListener);
|
|
dispatch(Lifecycle.Event.ON_RESUME);
|
|
}
|
|
|
|
@Override // android.app.Fragment
|
|
public void onStart() {
|
|
super.onStart();
|
|
dispatchStart(this.mProcessListener);
|
|
dispatch(Lifecycle.Event.ON_START);
|
|
}
|
|
|
|
@Override // android.app.Fragment
|
|
public void onStop() {
|
|
super.onStop();
|
|
dispatch(Lifecycle.Event.ON_STOP);
|
|
}
|
|
|
|
public void setProcessListener(ActivityInitializationListener activityInitializationListener) {
|
|
this.mProcessListener = activityInitializationListener;
|
|
}
|
|
}
|