Replace settings migration with automatic check for device blacklist version
This commit is contained in:
parent
40d102fcb5
commit
d6a1170ddb
6 changed files with 86 additions and 46 deletions
|
|
@ -267,10 +267,10 @@ public class ContentSettingsFragment extends BasePreferenceFragment {
|
|||
// R.string.disabled_media_tunneling_automatically_key == 0:
|
||||
// automatic value overridden by user in settings
|
||||
// R.string.disabled_media_tunneling_automatically_key == -1: not set
|
||||
final boolean wasMediaTunnelingEnabledAutomatically =
|
||||
final boolean wasMediaTunnelingDisabledAutomatically =
|
||||
prefs.getInt(automaticTunnelingKey, -1) == 1
|
||||
&& prefs.getBoolean(tunnelingKey, false);
|
||||
if (wasMediaTunnelingEnabledAutomatically) {
|
||||
if (wasMediaTunnelingDisabledAutomatically) {
|
||||
prefs.edit()
|
||||
.putInt(automaticTunnelingKey, -1)
|
||||
.putBoolean(tunnelingKey, false)
|
||||
|
|
|
|||
|
|
@ -17,24 +17,24 @@ public class ExoPlayerSettingsFragment extends BasePreferenceFragment {
|
|||
@Nullable final String rootKey) {
|
||||
addPreferencesFromResourceRegistry();
|
||||
|
||||
final String disableMediaTunnelingAutomaticallyKey =
|
||||
final String disabledMediaTunnelingAutomaticallyKey =
|
||||
getString(R.string.disabled_media_tunneling_automatically_key);
|
||||
final SwitchPreferenceCompat disableMediaTunnelingPref =
|
||||
(SwitchPreferenceCompat) requirePreference(R.string.disable_media_tunneling_key);
|
||||
final SharedPreferences prefs = PreferenceManager
|
||||
.getDefaultSharedPreferences(requireContext());
|
||||
final boolean mediaTunnelingAutomaticallyEnabled =
|
||||
prefs.getInt(disableMediaTunnelingAutomaticallyKey, -1) == 1;
|
||||
final boolean mediaTunnelingAutomaticallyDisabled =
|
||||
prefs.getInt(disabledMediaTunnelingAutomaticallyKey, -1) == 1;
|
||||
final String summaryText = getString(R.string.disable_media_tunneling_summary);
|
||||
disableMediaTunnelingPref.setSummary(mediaTunnelingAutomaticallyEnabled
|
||||
? summaryText + getString(R.string.disable_media_tunneling_automatic_info)
|
||||
disableMediaTunnelingPref.setSummary(mediaTunnelingAutomaticallyDisabled
|
||||
? summaryText + " " + getString(R.string.disable_media_tunneling_automatic_info)
|
||||
: summaryText);
|
||||
|
||||
disableMediaTunnelingPref.setOnPreferenceChangeListener((Preference p, Object enabled) -> {
|
||||
if (Boolean.FALSE.equals(enabled)) {
|
||||
PreferenceManager.getDefaultSharedPreferences(requireContext())
|
||||
.edit()
|
||||
.putInt(disableMediaTunnelingAutomaticallyKey, 0)
|
||||
.putInt(disabledMediaTunnelingAutomaticallyKey, 0)
|
||||
.apply();
|
||||
// the info text might have been shown before
|
||||
p.setSummary(R.string.disable_media_tunneling_summary);
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
package org.schabi.newpipe.settings;
|
||||
|
||||
import static org.schabi.newpipe.extractor.utils.Utils.isNullOrEmpty;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.Build;
|
||||
|
|
@ -15,8 +17,6 @@ import org.schabi.newpipe.util.DeviceUtils;
|
|||
import java.io.File;
|
||||
import java.util.Set;
|
||||
|
||||
import static org.schabi.newpipe.extractor.utils.Utils.isNullOrEmpty;
|
||||
|
||||
/*
|
||||
* Created by k3b on 07.01.2016.
|
||||
*
|
||||
|
|
@ -61,7 +61,7 @@ public final class NewPipeSettings {
|
|||
}
|
||||
|
||||
// first run migrations, then setDefaultValues, since the latter requires the correct types
|
||||
SettingMigrations.initMigrations(context, isFirstRun);
|
||||
SettingMigrations.runMigrationsIfNeeded(context, isFirstRun);
|
||||
|
||||
// readAgain is true so that if new settings are added their default value is set
|
||||
PreferenceManager.setDefaultValues(context, R.xml.main_settings, true);
|
||||
|
|
@ -77,9 +77,7 @@ public final class NewPipeSettings {
|
|||
saveDefaultVideoDownloadDirectory(context);
|
||||
saveDefaultAudioDownloadDirectory(context);
|
||||
|
||||
if (isFirstRun) { // NOSONAR: isFirstRun is never null
|
||||
setMediaTunneling(context);
|
||||
}
|
||||
disableMediaTunnelingIfNecessary(context, isFirstRun);
|
||||
}
|
||||
|
||||
static void saveDefaultVideoDownloadDirectory(final Context context) {
|
||||
|
|
@ -157,6 +155,28 @@ public final class NewPipeSettings {
|
|||
R.string.show_remote_search_suggestions_key);
|
||||
}
|
||||
|
||||
private static void disableMediaTunnelingIfNecessary(@NonNull final Context context,
|
||||
final boolean isFirstRun) {
|
||||
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
final String disabledTunnelingKey = context.getString(R.string.disable_media_tunneling_key);
|
||||
final String disabledTunnelingAutomaticallyKey =
|
||||
context.getString(R.string.disabled_media_tunneling_automatically_key);
|
||||
final String blacklistVersionKey =
|
||||
context.getString(R.string.media_tunneling_device_blacklist_version);
|
||||
|
||||
final int lastMediaTunnelingUpdate = prefs.getInt(blacklistVersionKey, 0);
|
||||
final boolean wasDeviceBlacklistUpdated =
|
||||
DeviceUtils.MEDIA_TUNNELING_DEVICE_BLACKLIST_VERSION != lastMediaTunnelingUpdate;
|
||||
final boolean wasMediaTunnelingEnabledByUser =
|
||||
prefs.getInt(disabledTunnelingAutomaticallyKey, -1) == 0
|
||||
&& !prefs.getBoolean(disabledTunnelingKey, false);
|
||||
|
||||
if (Boolean.TRUE.equals(isFirstRun)
|
||||
|| (wasDeviceBlacklistUpdated && !wasMediaTunnelingEnabledByUser)) {
|
||||
setMediaTunneling(context);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if device does not support media tunneling
|
||||
* and disable that exoplayer feature if necessary.
|
||||
|
|
@ -164,12 +184,19 @@ public final class NewPipeSettings {
|
|||
* @param context
|
||||
*/
|
||||
public static void setMediaTunneling(@NonNull final Context context) {
|
||||
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
if (!DeviceUtils.shouldSupportMediaTunneling()) {
|
||||
PreferenceManager.getDefaultSharedPreferences(context).edit()
|
||||
prefs.edit()
|
||||
.putBoolean(context.getString(R.string.disable_media_tunneling_key), true)
|
||||
.putInt(context.getString(
|
||||
R.string.disabled_media_tunneling_automatically_key), 1)
|
||||
.putInt(context.getString(R.string.media_tunneling_device_blacklist_version),
|
||||
DeviceUtils.MEDIA_TUNNELING_DEVICE_BLACKLIST_VERSION)
|
||||
.apply();
|
||||
} else {
|
||||
prefs.edit()
|
||||
.putInt(context.getString(R.string.media_tunneling_device_blacklist_version),
|
||||
DeviceUtils.MEDIA_TUNNELING_DEVICE_BLACKLIST_VERSION).apply();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -128,17 +128,6 @@ public final class SettingMigrations {
|
|||
}
|
||||
};
|
||||
|
||||
private static final Migration MIGRATION_5_6 = new Migration(5, 6) {
|
||||
@Override
|
||||
protected void migrate(@NonNull final Context context) {
|
||||
// PR #8875 added a new settings page for exoplayer introducing a specific setting
|
||||
// to disable media tunneling. However, media tunneling should be disabled by default
|
||||
// for some devices, because they are known for not supporting media tunneling
|
||||
// which can result in a black screen while playing videos.
|
||||
NewPipeSettings.setMediaTunneling(context);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* List of all implemented migrations.
|
||||
* <p>
|
||||
|
|
@ -151,16 +140,16 @@ public final class SettingMigrations {
|
|||
MIGRATION_2_3,
|
||||
MIGRATION_3_4,
|
||||
MIGRATION_4_5,
|
||||
MIGRATION_5_6,
|
||||
};
|
||||
|
||||
/**
|
||||
* Version number for preferences. Must be incremented every time a migration is necessary.
|
||||
*/
|
||||
private static final int VERSION = 6;
|
||||
private static final int VERSION = 5;
|
||||
|
||||
|
||||
public static void initMigrations(@NonNull final Context context, final boolean isFirstRun) {
|
||||
public static void runMigrationsIfNeeded(@NonNull final Context context,
|
||||
final boolean isFirstRun) {
|
||||
// setup migrations and check if there is something to do
|
||||
sp = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
final String lastPrefVersionKey = context.getString(R.string.last_used_preferences_version);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue