This commit is contained in:
Thomas 2020-05-30 17:38:08 +02:00
parent 97b76ebcc0
commit 15244299dd
5 changed files with 208 additions and 17 deletions

View File

@ -14,15 +14,77 @@ package app.fedilab.nitterizeme.fragments;
* You should have received a copy of the GNU General Public License along with UntrackMe; if not,
* see <http://www.gnu.org/licenses>. */
import android.content.SharedPreferences;
import android.os.Bundle;
import androidx.fragment.app.FragmentActivity;
import androidx.preference.PreferenceCategory;
import androidx.preference.PreferenceFragmentCompat;
import androidx.preference.SeekBarPreference;
import app.fedilab.nitterizeme.R;
public class InvidiousSettingsFragment extends PreferenceFragmentCompat {
public class InvidiousSettingsFragment extends PreferenceFragmentCompat implements SharedPreferences.OnSharedPreferenceChangeListener {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.preferences_invidious, rootKey);
SharedPreferences prefs = getPreferenceScreen().getSharedPreferences();
String volume_mode = prefs.getString(getString(R.string.invidious_volume_mode), "0");
if (volume_mode.compareTo("0") == 0 || volume_mode.compareTo("-1") == 0) {
PreferenceCategory player_parameters = findPreference(getString(R.string.invidious_category_player_parameters));
SeekBarPreference volume_pref = findPreference(getString(R.string.invidious_volume_value));
assert volume_pref != null;
assert player_parameters != null;
player_parameters.removePreference(volume_pref);
}
}
@Override
public void onResume() {
super.onResume();
getPreferenceScreen().getSharedPreferences()
.registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onPause() {
super.onPause();
getPreferenceScreen().getSharedPreferences()
.unregisterOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (key.compareTo(getString(R.string.invidious_volume_mode)) == 0) {
String volume_mode = sharedPreferences.getString(getString(R.string.invidious_volume_mode), "0");
SeekBarPreference volume_pref = findPreference(getString(R.string.invidious_volume_value));
PreferenceCategory player_parameters = findPreference(getString(R.string.invidious_category_player_parameters));
if (volume_mode.compareTo("0") == 0 || volume_mode.compareTo("-1") == 0) {
assert player_parameters != null;
if (volume_pref != null) {
player_parameters.removePreference(volume_pref);
}
} else {
FragmentActivity activity = getActivity();
assert activity != null;
SeekBarPreference volume_pref_new = new SeekBarPreference(activity);
volume_pref_new.setTitle(R.string.invidious_volume_mode_value);
volume_pref_new.setSummary(R.string.invidious_volume_mode_value_indication);
volume_pref_new.setKey(getString(R.string.invidious_volume_value));
volume_pref_new.setMax(100);
volume_pref_new.setDefaultValue(sharedPreferences.getInt(getString(R.string.invidious_volume_value), 60));
volume_pref_new.setIconSpaceReserved(false);
volume_pref_new.setShowSeekBarValue(true);
assert player_parameters != null;
if (volume_pref != null) {
player_parameters.removePreference(volume_pref);
}
player_parameters.addPreference(volume_pref_new);
}
}
}
}

View File

@ -475,6 +475,44 @@ public class Utils {
}
}
//Loop
String loop = sharedpreferences.getString(context.getString(R.string.invidious_loop_mode), "0");
if (loop.compareTo("-1") == 0) { //Remove value
newUrl = newUrl.replaceAll("&?loop=\\d", "");
} else if (loop.compareTo("0") != 0) { //Change value
if (newUrl.contains("loop=")) {
newUrl = newUrl.replaceAll("loop=\\d", loop);
} else {
newUrl += "&" + loop;
}
}
//Volume
String volume = sharedpreferences.getString(context.getString(R.string.invidious_volume_mode), "0");
if (volume.compareTo("-1") == 0) { //Remove value
newUrl = newUrl.replaceAll("&?volume=\\d{1,3}", "");
} else if (volume.compareTo("0") != 0) { //Change value
int volume_value = sharedpreferences.getInt(context.getString(R.string.invidious_volume_value), 60);
if (newUrl.contains("volume=")) {
newUrl = newUrl.replaceAll("volume=\\d{1,3}", "volume=" + volume_value);
} else {
newUrl += "&volume=" + volume_value;
}
}
//Player style
String player_style = sharedpreferences.getString(context.getString(R.string.invidious_player_style_mode), "0");
if (player_style.compareTo("-1") == 0) { //Remove value
newUrl = newUrl.replaceAll("&?player_style=\\w+", "");
} else if (player_style.compareTo("0") != 0) { //Change value
if (newUrl.contains("player_style=")) {
newUrl = newUrl.replaceAll("player_style=\\w+", player_style);
} else {
newUrl += "&" + player_style;
}
}
return newUrl;
}

View File

@ -88,4 +88,24 @@
<item>quality=medium</item>
</string-array>
<string-array name="invidious_loop_values">
<item>0</item>
<item>-1</item>
<item>loop=1</item>
<item>loop=0</item>
</string-array>
<string-array name="invidious_volume_values">
<item>0</item>
<item>-1</item>
<item>1</item>
</string-array>
<string-array name="invidious_player_style_values">
<item>0</item>
<item>-1</item>
<item>player_style=invidious</item>
<item>player_style=youtube</item>
</string-array>
</resources>

View File

@ -1,6 +1,24 @@
<resources>
<string name="app_name" translatable="false">UntrackMe</string>
<string name="app_name_lite" translatable="false">UntrackMe Lite</string>
<!-- Some local values -->
<string name="invidious_dark_mode" translatable="false">invidious_dark_mode</string>
<string name="invidious_thin_mode" translatable="false">invidious_thin_mode</string>
<string name="invidious_language_mode" translatable="false">invidious_language_mode</string>
<string name="invidious_annotations_mode" translatable="false">invidious_annotations_mode</string>
<string name="invidious_autoplay_mode" translatable="false">invidious_autoplay_mode</string>
<string name="invidious_continue_mode" translatable="false">invidious_continue_mode</string>
<string name="invidious_listen_mode" translatable="false">invidious_listen_mode</string>
<string name="invidious_local_mode" translatable="false">invidious_local_mode</string>
<string name="invidious_subtitles_mode" translatable="false">invidious_subtitles_mode</string>
<string name="invidious_quality_mode" translatable="false">invidious_quality_mode</string>
<string name="invidious_loop_mode" translatable="false">invidious_loop_mode</string>
<string name="invidious_volume_mode" translatable="false">invidious_volume_mode</string>
<string name="invidious_volume_value" translatable="false">invidious_volume_value</string>
<string name="invidious_category_player_parameters" translatable="false">invidious_category_player_parameters</string>
<string name="invidious_player_style_mode" translatable="false">invidious_player_style_mode</string>
<string name="action_settings">Settings</string>
<string name="action_about">About</string>
<string name="developer">Developer</string>
@ -97,6 +115,19 @@
<string name="invidious_listen_mode_indication">Play only audio portion of video</string>
<string name="invidious_local_mode_title">Local</string>
<string name="invidious_local_mode_indication">Proxy video streams</string>
<string name="invidious_subtitles_mode_title">Subtitles</string>
<string name="invidious_subtitles_mode_indication">List of ISO 6391 language codes</string>
<string name="invidious_quality_mode_title">Quality</string>
<string name="invidious_quality_mode_indication">Default player quality</string>
<string name="invidious_loop_mode_title">Loop</string>
<string name="invidious_volume_mode_title">Volume</string>
<string name="invidious_volume_mode_indication">Default player volume, can be any whole number between 0 and 100</string>
<string name="invidious_loop_mode_indication">Loop player by default</string>
<string name="invidious_volume_mode_value">Volume value</string>
<string name="invidious_volume_mode_value_indication">Override the volume with this value</string>
<string name="pref_invidious_head3">Player Style</string>
<string name="invidious_player_style_mode_title">Appearance</string>
<string name="invidious_player_style_mode_indication">Invidious, the default one. YouTube, using a centered play button and always visible video control bar</string>
<string-array name="invidious_theme">
<item>Ignore</item>
@ -105,7 +136,6 @@
<item>Light theme</item>
</string-array>
<string-array name="invidious_enable">
<item>Ignore</item>
<item>Remove</item>
@ -150,25 +180,25 @@
</string-array>
<string-array name="invidious_quality">
<item>Ignore</item>
<item>Remove</item>
<item>DASH</item>
<item>720p</item>
<item>480p</item>
</string-array>
<!-- Some local values -->
<string name="invidious_dark_mode" translatable="false">invidious_dark_mode</string>
<string name="invidious_thin_mode" translatable="false">invidious_thin_mode</string>
<string name="invidious_language_mode" translatable="false">invidious_language_mode</string>
<string name="invidious_annotations_mode" translatable="false">invidious_annotations_mode</string>
<string name="invidious_autoplay_mode" translatable="false">invidious_autoplay_mode</string>
<string name="invidious_continue_mode" translatable="false">invidious_continue_mode</string>
<string name="invidious_listen_mode" translatable="false">invidious_listen_mode</string>
<string name="invidious_local_mode" translatable="false">invidious_local_mode</string>
<string name="invidious_subtitles_mode" translatable="false">invidious_subtitles_mode</string>
<string name="invidious_quality_mode" translatable="false">invidious_quality_mode</string>
<string name="invidious_subtitles_mode_title">Subtitles</string>
<string name="invidious_subtitles_mode_indication">List of ISO 639-1 language codes</string>
<string name="invidious_quality_mode_title">Quality</string>
<string name="invidious_quality_mode_indication">Default player quality</string>
<string-array name="invidious_volume">
<item>Ignore</item>
<item>Remove</item>
<item>Custom</item>
</string-array>
<string-array name="invidious_player_style">
<item>Ignore</item>
<item>Remove</item>
<item>Invidious</item>
<item>Youtube</item>
</string-array>
</resources>

View File

@ -36,6 +36,7 @@
<PreferenceCategory
android:title="@string/pref_invidious_head2"
android:key="@string/invidious_category_player_parameters"
app:iconSpaceReserved="false">
<ListPreference
android:defaultValue="0"
@ -103,5 +104,45 @@
app:summary="@string/invidious_quality_mode_indication"
app:title="@string/invidious_quality_mode_title" />
<ListPreference
android:defaultValue="0"
android:entries="@array/invidious_enable"
android:entryValues="@array/invidious_loop_values"
app:iconSpaceReserved="false"
app:key="@string/invidious_loop_mode"
app:summary="@string/invidious_loop_mode_indication"
app:title="@string/invidious_loop_mode_title" />
<ListPreference
android:defaultValue="0"
android:entries="@array/invidious_volume"
android:entryValues="@array/invidious_volume_values"
app:iconSpaceReserved="false"
app:key="@string/invidious_volume_mode"
app:summary="@string/invidious_volume_mode_indication"
app:title="@string/invidious_volume_mode_title" />
<SeekBarPreference
android:defaultValue="60"
app:showSeekBarValue="true"
app:iconSpaceReserved="false"
android:key="@string/invidious_volume_value"
android:title="@string/invidious_volume_mode_value"
app:summary="@string/invidious_volume_mode_value_indication"
android:max="100" />
</PreferenceCategory>
<PreferenceCategory
android:title="@string/pref_invidious_head3"
app:iconSpaceReserved="false">
<ListPreference
android:defaultValue="0"
android:entries="@array/invidious_player_style"
android:entryValues="@array/invidious_player_style_values"
app:iconSpaceReserved="false"
app:key="@string/invidious_player_style_mode"
app:summary="@string/invidious_player_style_mode_indication"
app:title="@string/invidious_player_style_mode_title" />
</PreferenceCategory>
</PreferenceScreen>