Skip to content

Commit d1a82a8

Browse files
EdwardsoenTobiGr
authored andcommitted
Include a high-resolution option in the default resolution settings.
1 parent b1ab261 commit d1a82a8

4 files changed

Lines changed: 108 additions & 1 deletion

File tree

app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java

Lines changed: 64 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import com.google.android.material.snackbar.Snackbar;
1414

1515
import org.schabi.newpipe.R;
16+
import org.schabi.newpipe.util.ListHelper;
1617
import org.schabi.newpipe.util.PermissionHelper;
1718

1819
import java.util.LinkedList;
@@ -26,7 +27,7 @@ public void onCreatePreferences(final Bundle savedInstanceState, final String ro
2627
addPreferencesFromResourceRegistry();
2728

2829
updateSeekOptions();
29-
30+
updateResolutionOptions();
3031
listener = (sharedPreferences, key) -> {
3132

3233
// on M and above, if user chooses to minimise to popup player on exit
@@ -48,10 +49,72 @@ && getString(R.string.minimize_on_exit_key).equals(key)) {
4849
}
4950
} else if (getString(R.string.use_inexact_seek_key).equals(key)) {
5051
updateSeekOptions();
52+
} else if (getString(R.string.show_higher_resolutions_key).equals(key)) {
53+
updateResolutionOptions();
5154
}
5255
};
5356
}
5457

58+
/**
59+
* Update default resolution, default popup resolution & mobile data resolution options.
60+
* show high resolution when "Show higher resolution" option enabled.
61+
*/
62+
private void updateResolutionOptions() {
63+
final ListPreference defaultResolution = findPreference(
64+
getString(R.string.default_resolution_key));
65+
final ListPreference defaultPopupResolution = findPreference(
66+
getString(R.string.default_popup_resolution_key));
67+
final ListPreference mobileDataResolution = findPreference(
68+
getString(R.string.limit_mobile_data_usage_key));
69+
final Resources resources = getResources();
70+
final boolean showHigherResolutions = getPreferenceManager().getSharedPreferences()
71+
.getBoolean(resources.getString(R.string.show_higher_resolutions_key), false);
72+
final List<String> resolutionListDescriptions = ListHelper.getSortedResolutionList(
73+
resources,
74+
R.array.resolution_list_description,
75+
R.array.high_resolution_list_descriptions,
76+
showHigherResolutions);
77+
final List<String> resolutionListValues = ListHelper.getSortedResolutionList(
78+
resources,
79+
R.array.resolution_list_values,
80+
R.array.high_resolution_list_values,
81+
showHigherResolutions);
82+
final List<String> limitDataUsageResolutionValues = ListHelper.getSortedResolutionList(
83+
resources,
84+
R.array.limit_data_usage_values_list,
85+
R.array.high_resolution_limit_data_usage_values_list,
86+
showHigherResolutions);
87+
final List<String> limitDataUsageResolutionDescriptions = ListHelper
88+
.getSortedResolutionList(resources,
89+
R.array.limit_data_usage_description_list,
90+
R.array.high_resolution_list_descriptions,
91+
showHigherResolutions);
92+
defaultResolution.setEntries(resolutionListDescriptions.toArray(new String[0]));
93+
defaultResolution.setEntryValues(resolutionListValues.toArray(new String[0]));
94+
defaultPopupResolution.setEntries(resolutionListDescriptions.toArray(new String[0]));
95+
defaultPopupResolution.setEntryValues(resolutionListValues.toArray(new String[0]));
96+
mobileDataResolution.setEntries(
97+
limitDataUsageResolutionDescriptions.toArray(new String[0]));
98+
mobileDataResolution.setEntryValues(limitDataUsageResolutionValues.toArray(new String[0]));
99+
if (!showHigherResolutions) {
100+
if (ListHelper.isHighResolutionSelected(defaultResolution.getValue(),
101+
R.array.high_resolution_list_values,
102+
resources)) {
103+
defaultResolution.setValueIndex(0);
104+
}
105+
if (ListHelper.isHighResolutionSelected(defaultPopupResolution.getValue(),
106+
R.array.high_resolution_list_values,
107+
resources)) {
108+
defaultPopupResolution.setValueIndex(0);
109+
}
110+
if (ListHelper.isHighResolutionSelected(mobileDataResolution.getValue(),
111+
R.array.high_resolution_limit_data_usage_values_list,
112+
resources)) {
113+
mobileDataResolution.setValueIndex(0);
114+
}
115+
}
116+
}
117+
55118
/**
56119
* Update fast-forward/-rewind seek duration options
57120
* according to language and inexact seek setting.

app/src/main/java/org/schabi/newpipe/util/ListHelper.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import android.content.Context;
66
import android.content.SharedPreferences;
7+
import android.content.res.Resources;
78
import android.net.ConnectivityManager;
89

910
import androidx.annotation.NonNull;
@@ -239,6 +240,30 @@ public static List<VideoStream> getSortedStreamVideosList(
239240
videoOnlyStreams, ascendingOrder, preferVideoOnlyStreams);
240241
}
241242

243+
public static List<String> getSortedResolutionList(
244+
final Resources resources,
245+
final int defaultResolutionKey,
246+
final int additionalResolutionKey,
247+
final boolean showHigherResolutions) {
248+
final List<String> defaultResolution = new ArrayList<String>(Arrays.asList(
249+
resources.getStringArray(defaultResolutionKey)));
250+
if (!showHigherResolutions) {
251+
return defaultResolution;
252+
}
253+
final List<String> additionalResolutions = Arrays.asList(
254+
resources.getStringArray(additionalResolutionKey));
255+
defaultResolution.addAll(1, additionalResolutions);
256+
return defaultResolution;
257+
}
258+
259+
public static boolean isHighResolutionSelected(final String selectedResolution,
260+
final int additionalResolutionKey,
261+
final Resources resources) {
262+
return Arrays.asList(resources.getStringArray(
263+
additionalResolutionKey))
264+
.contains(selectedResolution);
265+
}
266+
242267
/**
243268
* Filter the list of audio streams and return a list with the preferred stream for
244269
* each audio track. Streams are sorted with the preferred language in the first position.

app/src/main/res/values/settings_keys.xml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,16 @@
124124
<string name="default_popup_resolution_value">480p</string>
125125
<string name="best_resolution_key">best_resolution</string>
126126

127+
<string-array name="high_resolution_list_values">
128+
<item>2160p</item>
129+
<item>1440p</item>
130+
</string-array>
131+
132+
<string-array name="high_resolution_list_descriptions">
133+
<item>2160p</item>
134+
<item>1440p</item>
135+
</string-array>
136+
127137
<string-array name="resolution_list_values">
128138
<item>@string/best_resolution_key</item>
129139
<item>1080p60</item>
@@ -1301,6 +1311,11 @@
13011311
<item>144p</item>
13021312
</string-array>
13031313

1314+
<string-array name="high_resolution_limit_data_usage_values_list">
1315+
<item>2160p</item>
1316+
<item>1440p</item>
1317+
</string-array>
1318+
13041319
<string name="list_view_mode_key">list_view_mode</string>
13051320
<string name="list_view_mode_value">@string/list_view_mode_auto_key</string>
13061321

app/src/main/res/values/strings.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -543,6 +543,10 @@
543543
<item>240p</item>
544544
<item>144p</item>
545545
</string-array>
546+
<string-array name="high_resolution_limit_data_usage_description_list">
547+
<item>2160p</item>
548+
<item>1440p</item>
549+
</string-array>
546550
<!-- Notifications settings -->
547551
<string name="enable_streams_notifications_title">New streams notifications</string>
548552
<string name="enable_streams_notifications_summary">Notify about new streams from subscriptions</string>

0 commit comments

Comments
 (0)