diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index f6e311248..26788cd1b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -137,5 +137,12 @@
+
+
+
diff --git a/app/src/main/java/org/schabi/newpipe/SettingsActivity.java b/app/src/main/java/org/schabi/newpipe/SettingsActivity.java
index 6436574de..e9c4a4870 100644
--- a/app/src/main/java/org/schabi/newpipe/SettingsActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/SettingsActivity.java
@@ -1,18 +1,15 @@
package org.schabi.newpipe;
import android.app.Activity;
+import android.content.ClipData;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Configuration;
-import android.media.AudioManager;
+import android.net.Uri;
+import android.os.Build;
import android.os.Bundle;
-import android.os.Environment;
-import android.preference.CheckBoxPreference;
-import android.preference.EditTextPreference;
-import android.preference.ListPreference;
import android.preference.PreferenceActivity;
-import android.preference.PreferenceFragment;
import android.preference.PreferenceManager;
import android.support.annotation.LayoutRes;
import android.support.annotation.NonNull;
@@ -23,6 +20,10 @@ import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
+import com.nononsenseapps.filepicker.FilePickerActivity;
+
+import java.util.ArrayList;
+
import info.guardianproject.netcipher.proxy.OrbotHelper;
/**
@@ -47,8 +48,8 @@ import info.guardianproject.netcipher.proxy.OrbotHelper;
public class SettingsActivity extends PreferenceActivity {
- private static final int REQUEST_INSTALL_ORBOT = 0x1234;
- private AppCompatDelegate mDelegate;
+ public static final int REQUEST_INSTALL_ORBOT = 0x1234;
+ private AppCompatDelegate mDelegate = null;
@Override
protected void onCreate(Bundle savedInstanceBundle) {
@@ -64,113 +65,59 @@ public class SettingsActivity extends PreferenceActivity {
getFragmentManager().beginTransaction()
.replace(android.R.id.content, new SettingsFragment())
.commit();
-
- }
-
- public static class SettingsFragment extends PreferenceFragment{
- SharedPreferences.OnSharedPreferenceChangeListener prefListener;
-
- // get keys
- String DEFAULT_RESOLUTION_PREFERENCE;
- String DEFAULT_AUDIO_FORMAT_PREFERENCE;
- String SEARCH_LANGUAGE_PREFERENCE;
- String DOWNLOAD_PATH_PREFERENCE;
- String DOWNLOAD_PATH_AUDIO_PREFERENCE;
- String USE_TOR_KEY;
-
- private ListPreference defaultResolutionPreference;
- private ListPreference defaultAudioFormatPreference;
- private ListPreference searchLanguagePreference;
- private EditTextPreference downloadPathPreference;
- private EditTextPreference downloadPathAudioPreference;
- private CheckBoxPreference useTorCheckBox;
- private SharedPreferences defaultPreferences;
-
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- addPreferencesFromResource(R.xml.settings);
-
- final Activity activity = getActivity();
-
- defaultPreferences = PreferenceManager.getDefaultSharedPreferences(activity);
-
- // get keys
- DEFAULT_RESOLUTION_PREFERENCE =getString(R.string.default_resolution_key);
- DEFAULT_AUDIO_FORMAT_PREFERENCE =getString(R.string.default_audio_format_key);
- SEARCH_LANGUAGE_PREFERENCE =getString(R.string.search_language_key);
- DOWNLOAD_PATH_PREFERENCE = getString(R.string.download_path_key);
- DOWNLOAD_PATH_AUDIO_PREFERENCE = getString(R.string.download_path_audio_key);
- USE_TOR_KEY = getString(R.string.use_tor_key);
-
- // get pref objects
- defaultResolutionPreference =
- (ListPreference) findPreference(DEFAULT_RESOLUTION_PREFERENCE);
- defaultAudioFormatPreference =
- (ListPreference) findPreference(DEFAULT_AUDIO_FORMAT_PREFERENCE);
- searchLanguagePreference =
- (ListPreference) findPreference(SEARCH_LANGUAGE_PREFERENCE);
- downloadPathPreference =
- (EditTextPreference) findPreference(DOWNLOAD_PATH_PREFERENCE);
- downloadPathAudioPreference =
- (EditTextPreference) findPreference(DOWNLOAD_PATH_AUDIO_PREFERENCE);
- useTorCheckBox = (CheckBoxPreference) findPreference(USE_TOR_KEY);
-
- prefListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
- @Override
- public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
- String key) {
- Activity a = getActivity();
- if(a != null) {
- updateSummary();
-
- if (defaultPreferences.getBoolean(USE_TOR_KEY, false)) {
- if (OrbotHelper.isOrbotInstalled(a)) {
- App.configureTor(true);
- OrbotHelper.requestStartTor(a);
- } else {
- Intent intent = OrbotHelper.getOrbotInstallIntent(a);
- a.startActivityForResult(intent, REQUEST_INSTALL_ORBOT);
- }
- } else {
- App.configureTor(false);
- }
- }
- }
- };
- defaultPreferences.registerOnSharedPreferenceChangeListener(prefListener);
-
- updateSummary();
- }
-
- // This is used to show the status of some preference in the description
- private void updateSummary() {
- defaultResolutionPreference.setSummary(
- defaultPreferences.getString(DEFAULT_RESOLUTION_PREFERENCE,
- getString(R.string.default_resolution_value)));
- defaultAudioFormatPreference.setSummary(
- defaultPreferences.getString(DEFAULT_AUDIO_FORMAT_PREFERENCE,
- getString(R.string.default_audio_format_value)));
- searchLanguagePreference.setSummary(
- defaultPreferences.getString(SEARCH_LANGUAGE_PREFERENCE,
- getString(R.string.default_language_value)));
- downloadPathPreference.setSummary(
- defaultPreferences.getString(DOWNLOAD_PATH_PREFERENCE,
- getString(R.string.download_path_summary)));
- downloadPathAudioPreference.setSummary(
- defaultPreferences.getString(DOWNLOAD_PATH_AUDIO_PREFERENCE,
- getString(R.string.download_path_audio_summary)));
- }
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+
+ if ((requestCode == R.string.download_path_audio_key
+ || requestCode == R.string.download_path_key)
+ && resultCode == Activity.RESULT_OK) {
+
+ Uri uri = null;
+ if (data.getBooleanExtra(FilePickerActivity.EXTRA_ALLOW_MULTIPLE, false)) {
+ // For JellyBean and above
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
+ ClipData clip = data.getClipData();
+
+ if (clip != null) {
+ for (int i = 0; i < clip.getItemCount(); i++) {
+ uri = clip.getItemAt(i).getUri();
+ }
+ }
+ // For Ice Cream Sandwich
+ } else {
+ ArrayList paths = data.getStringArrayListExtra
+ (FilePickerActivity.EXTRA_PATHS);
+
+ if (paths != null) {
+ for (String path: paths) {
+ uri = Uri.parse(path);
+ }
+ }
+ }
+ } else {
+ uri = data.getData();
+ }
+ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
+
+ //requestCode is equal to R.string.download_path_key or
+ //R.string.download_path_audio_key
+ String key = getString(requestCode);
+ String path = data.getData().toString().substring(7);
+ prefs.edit()
+ .putString(key, path)
+ .commit();
+ }
+ else if(requestCode == REQUEST_INSTALL_ORBOT)
+ {
+ // try to start tor regardless of resultCode since clicking back after
+ // installing the app does not necessarily return RESULT_OK
+ App.configureTor(requestCode == REQUEST_INSTALL_ORBOT
+ && OrbotHelper.requestStartTor(this));
+
+ }
super.onActivityResult(requestCode, resultCode, data);
- // try to start tor regardless of resultCode since clicking back after
- // installing the app does not necessarily return RESULT_OK
- App.configureTor(requestCode == REQUEST_INSTALL_ORBOT
- && OrbotHelper.requestStartTor(this));
}
@Override
diff --git a/app/src/main/java/org/schabi/newpipe/SettingsFragment.java b/app/src/main/java/org/schabi/newpipe/SettingsFragment.java
new file mode 100644
index 000000000..916d9d6b1
--- /dev/null
+++ b/app/src/main/java/org/schabi/newpipe/SettingsFragment.java
@@ -0,0 +1,167 @@
+package org.schabi.newpipe;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.os.Bundle;
+import android.preference.CheckBoxPreference;
+import android.preference.ListPreference;
+import android.preference.Preference;
+import android.preference.PreferenceFragment;
+import android.preference.PreferenceManager;
+import android.preference.PreferenceScreen;
+
+import com.nononsenseapps.filepicker.FilePickerActivity;
+
+import info.guardianproject.netcipher.proxy.OrbotHelper;
+
+/**
+ * Created by david on 15/06/16.
+ */
+public class SettingsFragment extends PreferenceFragment
+ implements SharedPreferences.OnSharedPreferenceChangeListener
+{
+ SharedPreferences.OnSharedPreferenceChangeListener prefListener;
+
+ // get keys
+ String DEFAULT_RESOLUTION_PREFERENCE;
+ String DEFAULT_AUDIO_FORMAT_PREFERENCE;
+ String SEARCH_LANGUAGE_PREFERENCE;
+ String DOWNLOAD_PATH_PREFERENCE;
+ String DOWNLOAD_PATH_AUDIO_PREFERENCE;
+ String USE_TOR_KEY;
+
+ private ListPreference defaultResolutionPreference;
+ private ListPreference defaultAudioFormatPreference;
+ private ListPreference searchLanguagePreference;
+ private Preference downloadPathPreference;
+ private Preference downloadPathAudioPreference;
+ private CheckBoxPreference useTorCheckBox;
+ private SharedPreferences defaultPreferences;
+
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ addPreferencesFromResource(R.xml.settings);
+
+ final Activity activity = getActivity();
+
+ defaultPreferences = PreferenceManager.getDefaultSharedPreferences(activity);
+
+ // get keys
+ DEFAULT_RESOLUTION_PREFERENCE = getString(R.string.default_resolution_key);
+ DEFAULT_AUDIO_FORMAT_PREFERENCE = getString(R.string.default_audio_format_key);
+ SEARCH_LANGUAGE_PREFERENCE = getString(R.string.search_language_key);
+ DOWNLOAD_PATH_PREFERENCE = getString(R.string.download_path_key);
+ DOWNLOAD_PATH_AUDIO_PREFERENCE = getString(R.string.download_path_audio_key);
+ USE_TOR_KEY = getString(R.string.use_tor_key);
+
+ // get pref objects
+ defaultResolutionPreference =
+ (ListPreference) findPreference(DEFAULT_RESOLUTION_PREFERENCE);
+ defaultAudioFormatPreference =
+ (ListPreference) findPreference(DEFAULT_AUDIO_FORMAT_PREFERENCE);
+ searchLanguagePreference =
+ (ListPreference) findPreference(SEARCH_LANGUAGE_PREFERENCE);
+ downloadPathPreference = findPreference(DOWNLOAD_PATH_PREFERENCE);
+ downloadPathAudioPreference = findPreference(DOWNLOAD_PATH_AUDIO_PREFERENCE);
+ useTorCheckBox = (CheckBoxPreference) findPreference(USE_TOR_KEY);
+
+ prefListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
+ @Override
+ public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
+ String key) {
+ Activity a = getActivity();
+ if(a == null)
+ {
+ return;
+ }
+ if (key == USE_TOR_KEY)
+ {
+ updateSummary();
+
+ if (defaultPreferences.getBoolean(USE_TOR_KEY, false)) {
+ if (OrbotHelper.isOrbotInstalled(a)) {
+ App.configureTor(true);
+ OrbotHelper.requestStartTor(a);
+ } else {
+ Intent intent = OrbotHelper.getOrbotInstallIntent(a);
+ a.startActivityForResult(intent, SettingsActivity.REQUEST_INSTALL_ORBOT);
+ }
+ } else {
+ App.configureTor(false);
+ }
+ }
+ else if (key == DOWNLOAD_PATH_PREFERENCE)
+ {
+ String downloadPath = sharedPreferences
+ .getString(DOWNLOAD_PATH_PREFERENCE,
+ getString(R.string.download_path_summary));
+ downloadPathPreference
+ .setSummary(downloadPath);
+ }
+ else if (key == DOWNLOAD_PATH_AUDIO_PREFERENCE)
+ {
+ String downloadPath = sharedPreferences
+ .getString(DOWNLOAD_PATH_AUDIO_PREFERENCE,
+ getString(R.string.download_path_audio_summary));
+ downloadPathAudioPreference
+ .setSummary(downloadPath);
+ }
+ }
+ };
+ defaultPreferences.registerOnSharedPreferenceChangeListener(prefListener);
+
+ updateSummary();
+ }
+
+ @Override
+ public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
+
+ if(preference.getKey() == downloadPathPreference.getKey() ||
+ preference.getKey() == downloadPathAudioPreference.getKey())
+ {
+ Activity activity = getActivity();
+ Intent i = new Intent(activity, FilePickerActivity.class);
+
+ i.putExtra(FilePickerActivity.EXTRA_ALLOW_MULTIPLE, false);
+ i.putExtra(FilePickerActivity.EXTRA_ALLOW_CREATE_DIR, true);
+ i.putExtra(FilePickerActivity.EXTRA_MODE, FilePickerActivity.MODE_DIR);
+ if(preference.getKey() == downloadPathPreference.getKey())
+ {
+ activity.startActivityForResult(i, R.string.download_path_key);
+ }
+ else if (preference.getKey() == downloadPathAudioPreference.getKey())
+ {
+ activity.startActivityForResult(i, R.string.download_path_audio_key);
+ }
+ }
+
+ return super.onPreferenceTreeClick(preferenceScreen, preference);
+ }
+
+ // This is used to show the status of some preference in the description
+ private void updateSummary() {
+ defaultResolutionPreference.setSummary(
+ defaultPreferences.getString(DEFAULT_RESOLUTION_PREFERENCE,
+ getString(R.string.default_resolution_value)));
+ defaultAudioFormatPreference.setSummary(
+ defaultPreferences.getString(DEFAULT_AUDIO_FORMAT_PREFERENCE,
+ getString(R.string.default_audio_format_value)));
+ searchLanguagePreference.setSummary(
+ defaultPreferences.getString(SEARCH_LANGUAGE_PREFERENCE,
+ getString(R.string.default_language_value)));
+ downloadPathPreference.setSummary(
+ defaultPreferences.getString(DOWNLOAD_PATH_PREFERENCE,
+ getString(R.string.download_path_summary)));
+ downloadPathAudioPreference.setSummary(
+ defaultPreferences.getString(DOWNLOAD_PATH_AUDIO_PREFERENCE,
+ getString(R.string.download_path_audio_summary)));
+ }
+
+ @Override
+ public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
+
+ }
+}
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index e7549b7f7..1c8dca48f 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -49,4 +49,24 @@
+
+
+
+
+
diff --git a/app/src/main/res/xml/settings.xml b/app/src/main/res/xml/settings.xml
index f40ce43bc..f3c53ec36 100644
--- a/app/src/main/res/xml/settings.xml
+++ b/app/src/main/res/xml/settings.xml
@@ -92,13 +92,13 @@
android:title="@string/settings_category_other_title"
android:textAllCaps="true">
-
-