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; } }