From dd599c697933180570c1278f9179875b04b3c433 Mon Sep 17 00:00:00 2001 From: dkanada Date: Sun, 30 May 2021 11:43:46 +0900 Subject: [PATCH] add file select preference for media downloads --- app/build.gradle | 2 + .../gramophone/util/PreferenceUtil.java | 4 ++ .../views/settings/FilePreference.java | 59 +++++++++++++++++++ app/src/main/res/values/strings.xml | 1 + app/src/main/res/xml/pref_cache.xml | 5 ++ 5 files changed, 71 insertions(+) create mode 100644 app/src/main/java/com/dkanada/gramophone/views/settings/FilePreference.java diff --git a/app/build.gradle b/app/build.gradle index 101658ce..04e93393 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -79,6 +79,8 @@ dependencies { implementation 'com.afollestad.material-dialogs:commons:0.9.6.0' implementation 'com.afollestad:material-cab:0.1.12' + implementation 'me.zhanghai.android.materialprogressbar:library:1.6.1' + implementation 'com.github.codekidX:storage-chooser:2.0.4.4' implementation 'com.pacioianu.david:ink-page-indicator:1.3.0' implementation 'com.h6ah4i.android.widget.advrecyclerview:advrecyclerview:1.0.0' implementation 'com.android.support:multidex:1.0.3' diff --git a/app/src/main/java/com/dkanada/gramophone/util/PreferenceUtil.java b/app/src/main/java/com/dkanada/gramophone/util/PreferenceUtil.java index 3ad3a03d..05982f98 100644 --- a/app/src/main/java/com/dkanada/gramophone/util/PreferenceUtil.java +++ b/app/src/main/java/com/dkanada/gramophone/util/PreferenceUtil.java @@ -130,6 +130,10 @@ public final class PreferenceUtil { return instance; } + public SharedPreferences getPreferences() { + return mPreferences; + } + public void registerOnSharedPreferenceChangedListener(SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener) { mPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); } diff --git a/app/src/main/java/com/dkanada/gramophone/views/settings/FilePreference.java b/app/src/main/java/com/dkanada/gramophone/views/settings/FilePreference.java new file mode 100644 index 00000000..66840d94 --- /dev/null +++ b/app/src/main/java/com/dkanada/gramophone/views/settings/FilePreference.java @@ -0,0 +1,59 @@ +package com.dkanada.gramophone.views.settings; + +import android.app.Activity; +import android.app.FragmentManager; +import android.content.Context; +import android.content.SharedPreferences; +import android.util.AttributeSet; +import android.view.View; + +import androidx.preference.Preference; +import androidx.preference.PreferenceViewHolder; + +import com.codekidlabs.storagechooser.StorageChooser; +import com.dkanada.gramophone.util.PreferenceUtil; + +public class FilePreference extends Preference implements View.OnClickListener, StorageChooser.OnSelectListener { + private final SharedPreferences preferences; + private final String defaultLocation; + + public FilePreference(Context context, AttributeSet attrs) { + super(context, attrs); + + preferences = PreferenceUtil.getInstance(getContext()).getPreferences(); + defaultLocation = getContext().getCacheDir().toString(); + + setSummary(preferences.getString(getKey(), defaultLocation)); + } + + @Override + public void onBindViewHolder(PreferenceViewHolder holder) { + super.onBindViewHolder(holder); + + holder.itemView.setOnClickListener(this); + } + + @Override + public void onSelect(String path) { + preferences.edit().putString(getKey(), path).apply(); + setSummary(path); + } + + @Override + public void onClick(View v) { + Activity activity = (Activity) getContext(); + FragmentManager fragmentManager = activity.getFragmentManager(); + + StorageChooser chooser = new StorageChooser.Builder() + .withActivity(activity) + .withFragmentManager(fragmentManager) + .withPredefinedPath(preferences.getString(getKey(), defaultLocation)) + .allowCustomPath(true) + .allowAddFolder(true) + .setType(StorageChooser.DIRECTORY_CHOOSER) + .build(); + + chooser.setOnSelectListener(this); + chooser.show(); + } +} diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ef39550f..c6f49d4e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -126,6 +126,7 @@ Remember Shuffle Remember Queue Page Size + Download Location Images Media diff --git a/app/src/main/res/xml/pref_cache.xml b/app/src/main/res/xml/pref_cache.xml index 6fdd66a7..da377581 100644 --- a/app/src/main/res/xml/pref_cache.xml +++ b/app/src/main/res/xml/pref_cache.xml @@ -4,6 +4,11 @@ + +