|
28 | 28 | import androidx.annotation.NonNull;
|
29 | 29 | import androidx.annotation.Nullable;
|
30 | 30 | import androidx.fragment.app.Fragment;
|
31 |
| -import androidx.lifecycle.Lifecycle; |
32 |
| -import androidx.lifecycle.LifecycleObserver; |
33 |
| -import androidx.lifecycle.OnLifecycleEvent; |
| 31 | +import androidx.lifecycle.DefaultLifecycleObserver; |
| 32 | +import androidx.lifecycle.LifecycleOwner; |
34 | 33 | import androidx.lifecycle.ViewModelStoreOwner;
|
35 | 34 | import androidx.loader.app.LoaderManager;
|
36 | 35 | import androidx.loader.content.CursorLoader;
|
|
57 | 56 | * A recycler view frame layout to show the theme presets.
|
58 | 57 | */
|
59 | 58 | public class DynamicPresetsView<T extends DynamicAppTheme>
|
60 |
| - extends DynamicRecyclerViewNested implements LifecycleObserver { |
| 59 | + extends DynamicRecyclerViewNested implements DefaultLifecycleObserver { |
61 | 60 |
|
62 | 61 | /**
|
63 | 62 | * Listener to get the preset theme and click events.
|
@@ -123,6 +122,11 @@ void onPresetClick(@NonNull View anchor, @NonNull String theme,
|
123 | 122 | */
|
124 | 123 | private Fragment mLifecycleOwner;
|
125 | 124 |
|
| 125 | + /** |
| 126 | + * Loader used by this view. |
| 127 | + */ |
| 128 | + private Loader<Cursor> mLoader; |
| 129 | + |
126 | 130 | /**
|
127 | 131 | * Listener to handle the preset events.
|
128 | 132 | */
|
@@ -171,6 +175,22 @@ public void onClick(View v) {
|
171 | 175 | R.id.ads_theme_presets_header)).getIconView(), Theme.ColorType.NONE);
|
172 | 176 | }
|
173 | 177 |
|
| 178 | + @Override |
| 179 | + public void onStart(@NonNull LifecycleOwner owner) { |
| 180 | + DefaultLifecycleObserver.super.onStart(owner); |
| 181 | + |
| 182 | + loadPresets(); |
| 183 | + } |
| 184 | + |
| 185 | + @Override |
| 186 | + protected void onDetachedFromWindow() { |
| 187 | + super.onDetachedFromWindow(); |
| 188 | + |
| 189 | + if (mLifecycleOwner != null) { |
| 190 | + mLifecycleOwner.getLifecycle().removeObserver(this); |
| 191 | + } |
| 192 | + } |
| 193 | + |
174 | 194 | @Override
|
175 | 195 | protected @LayoutRes int getLayoutRes() {
|
176 | 196 | return R.layout.ads_theme_presets;
|
@@ -211,30 +231,40 @@ public void setPresetsAdapter(@Nullable Fragment owner, @LayoutRes int layout,
|
211 | 231 | mPresetsAdapter.setDynamicPresetsListener(dynamicPresetsListener);
|
212 | 232 | setAdapter(mPresetsAdapter);
|
213 | 233 |
|
214 |
| - if (owner != null) { |
215 |
| - owner.getLifecycle().addObserver(this); |
| 234 | + if (mLifecycleOwner != null) { |
| 235 | + mLifecycleOwner.getLifecycle().addObserver(this); |
216 | 236 | }
|
217 | 237 |
|
218 | 238 | loadPresets();
|
219 | 239 | }
|
220 | 240 |
|
221 |
| - @OnLifecycleEvent(Lifecycle.Event.ON_RESUME) |
222 | 241 | public void loadPresets() {
|
223 | 242 | if (isPackageExists()) {
|
224 | 243 | if (isPermissionGranted()) {
|
225 | 244 | setPresetsVisible(true);
|
226 | 245 | } else {
|
227 | 246 | mInfo.setSubtitle(getContext().getString(
|
228 | 247 | R.string.ads_permissions_subtitle_single));
|
229 |
| - setPresetsVisible(false); } |
| 248 | + setPresetsVisible(false); |
| 249 | + } |
230 | 250 | } else {
|
231 | 251 | mInfo.setSubtitle(getContext().getString(R.string.ads_theme_presets_desc));
|
232 | 252 | setPresetsVisible(false);
|
233 | 253 | }
|
234 | 254 |
|
235 |
| - if (mLifecycleOwner != null && isPermissionGranted()) { |
236 |
| - LoaderManager.getInstance(mLifecycleOwner).initLoader( |
237 |
| - ADS_LOADER_PRESETS, null, mLoaderCallbacks).forceLoad(); |
| 255 | + if (mLifecycleOwner == null || !isPermissionGranted()) { |
| 256 | + return; |
| 257 | + } |
| 258 | + |
| 259 | + if (mLoader == null) { |
| 260 | + mLoader = LoaderManager.getInstance(mLifecycleOwner).initLoader( |
| 261 | + ADS_LOADER_PRESETS, null, mLoaderCallbacks); |
| 262 | + } |
| 263 | + |
| 264 | + if (mLoader.isStarted()) { |
| 265 | + mLoader.forceLoad(); |
| 266 | + } else { |
| 267 | + mLoader.startLoading(); |
238 | 268 | }
|
239 | 269 | }
|
240 | 270 |
|
@@ -328,7 +358,7 @@ private void setPresetsVisible(boolean visible) {
|
328 | 358 | private final LoaderManager.LoaderCallbacks<Cursor> mLoaderCallbacks =
|
329 | 359 | new LoaderManager.LoaderCallbacks<Cursor>() {
|
330 | 360 | @Override
|
331 |
| - public Loader<Cursor> onCreateLoader(int id, @Nullable Bundle args) { |
| 361 | + public @NonNull Loader<Cursor> onCreateLoader(int id, @Nullable Bundle args) { |
332 | 362 | if (id == ADS_LOADER_PRESETS) {
|
333 | 363 | if (isPermissionGranted()) {
|
334 | 364 | try {
|
|
0 commit comments