|
16 | 16 |
|
17 | 17 | package dagger.hilt.android.internal.managers; |
18 | 18 |
|
19 | | -import dagger.hilt.android.components.ActivityComponent; |
20 | 19 | import android.content.Context; |
21 | 20 | import android.content.ContextWrapper; |
22 | 21 | import androidx.fragment.app.Fragment; |
|
34 | 33 | import dagger.hilt.android.internal.builders.ViewWithFragmentComponentBuilder; |
35 | 34 | import dagger.hilt.internal.GeneratedComponentManager; |
36 | 35 | import dagger.hilt.internal.Preconditions; |
| 36 | +import java.lang.ref.WeakReference; |
37 | 37 |
|
38 | 38 | /** |
39 | 39 | * Do not use except in Hilt generated code! |
@@ -86,6 +86,24 @@ public Object generatedComponent() { |
86 | 86 | private Object createComponent() { |
87 | 87 | Object componentManager = getParentComponentManager(/* allowMissing= */ false); |
88 | 88 | if (hasFragmentBindings) { |
| 89 | + if (componentManager instanceof Fragment) { |
| 90 | + final WeakReference<ViewComponentManager> managerRef = new WeakReference<>(this); |
| 91 | + ((Fragment) componentManager) |
| 92 | + .getLifecycle() |
| 93 | + .addObserver( |
| 94 | + new LifecycleEventObserver() { |
| 95 | + @Override |
| 96 | + public void onStateChanged(LifecycleOwner source, Lifecycle.Event event) { |
| 97 | + if (event == Lifecycle.Event.ON_DESTROY) { |
| 98 | + ViewComponentManager manager = managerRef.get(); |
| 99 | + if (manager != null) { |
| 100 | + manager.component = null; |
| 101 | + } |
| 102 | + source.getLifecycle().removeObserver(this); |
| 103 | + } |
| 104 | + } |
| 105 | + }); |
| 106 | + } |
89 | 107 | return EntryPoints.get(componentManager, ViewWithFragmentComponentBuilderEntryPoint.class) |
90 | 108 | .viewWithFragmentComponentBuilder() |
91 | 109 | .view(view) |
@@ -183,6 +201,7 @@ public void onStateChanged(LifecycleOwner source, Lifecycle.Event event) { |
183 | 201 | FragmentContextWrapper.this.fragment = null; |
184 | 202 | FragmentContextWrapper.this.baseInflater = null; |
185 | 203 | FragmentContextWrapper.this.inflater = null; |
| 204 | + source.getLifecycle().removeObserver(this); |
186 | 205 | } |
187 | 206 | } |
188 | 207 | }; |
|
0 commit comments