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 @@
+
+