Skip to content

Commit aa5f651

Browse files
committed
Improve presets view
Rework loader functionality.
1 parent d2ef14a commit aa5f651

File tree

1 file changed

+42
-12
lines changed

1 file changed

+42
-12
lines changed

dynamic-support/src/main/java/com/pranavpandey/android/dynamic/support/theme/view/DynamicPresetsView.java

Lines changed: 42 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,8 @@
2828
import androidx.annotation.NonNull;
2929
import androidx.annotation.Nullable;
3030
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;
3433
import androidx.lifecycle.ViewModelStoreOwner;
3534
import androidx.loader.app.LoaderManager;
3635
import androidx.loader.content.CursorLoader;
@@ -57,7 +56,7 @@
5756
* A recycler view frame layout to show the theme presets.
5857
*/
5958
public class DynamicPresetsView<T extends DynamicAppTheme>
60-
extends DynamicRecyclerViewNested implements LifecycleObserver {
59+
extends DynamicRecyclerViewNested implements DefaultLifecycleObserver {
6160

6261
/**
6362
* Listener to get the preset theme and click events.
@@ -123,6 +122,11 @@ void onPresetClick(@NonNull View anchor, @NonNull String theme,
123122
*/
124123
private Fragment mLifecycleOwner;
125124

125+
/**
126+
* Loader used by this view.
127+
*/
128+
private Loader<Cursor> mLoader;
129+
126130
/**
127131
* Listener to handle the preset events.
128132
*/
@@ -171,6 +175,22 @@ public void onClick(View v) {
171175
R.id.ads_theme_presets_header)).getIconView(), Theme.ColorType.NONE);
172176
}
173177

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+
174194
@Override
175195
protected @LayoutRes int getLayoutRes() {
176196
return R.layout.ads_theme_presets;
@@ -211,30 +231,40 @@ public void setPresetsAdapter(@Nullable Fragment owner, @LayoutRes int layout,
211231
mPresetsAdapter.setDynamicPresetsListener(dynamicPresetsListener);
212232
setAdapter(mPresetsAdapter);
213233

214-
if (owner != null) {
215-
owner.getLifecycle().addObserver(this);
234+
if (mLifecycleOwner != null) {
235+
mLifecycleOwner.getLifecycle().addObserver(this);
216236
}
217237

218238
loadPresets();
219239
}
220240

221-
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
222241
public void loadPresets() {
223242
if (isPackageExists()) {
224243
if (isPermissionGranted()) {
225244
setPresetsVisible(true);
226245
} else {
227246
mInfo.setSubtitle(getContext().getString(
228247
R.string.ads_permissions_subtitle_single));
229-
setPresetsVisible(false); }
248+
setPresetsVisible(false);
249+
}
230250
} else {
231251
mInfo.setSubtitle(getContext().getString(R.string.ads_theme_presets_desc));
232252
setPresetsVisible(false);
233253
}
234254

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();
238268
}
239269
}
240270

@@ -328,7 +358,7 @@ private void setPresetsVisible(boolean visible) {
328358
private final LoaderManager.LoaderCallbacks<Cursor> mLoaderCallbacks =
329359
new LoaderManager.LoaderCallbacks<Cursor>() {
330360
@Override
331-
public Loader<Cursor> onCreateLoader(int id, @Nullable Bundle args) {
361+
public @NonNull Loader<Cursor> onCreateLoader(int id, @Nullable Bundle args) {
332362
if (id == ADS_LOADER_PRESETS) {
333363
if (isPermissionGranted()) {
334364
try {

0 commit comments

Comments
 (0)