Skip to content

Commit

Permalink
Disable media tunneling if the device is known for not supporting it
Browse files Browse the repository at this point in the history
Revert removing the Utils related to media tunneling.
  • Loading branch information
TobiGr committed Jun 4, 2023
1 parent a3f10fe commit 8290449
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 1 deletion.
18 changes: 18 additions & 0 deletions app/src/main/java/org/schabi/newpipe/settings/NewPipeSettings.java
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,10 @@ public static void initSettings(final Context context) {

saveDefaultVideoDownloadDirectory(context);
saveDefaultAudioDownloadDirectory(context);

if (isFirstRun) { // NOSONAR: isFirstRun is never null
setMediaTunneling(context);
}
}

static void saveDefaultVideoDownloadDirectory(final Context context) {
Expand Down Expand Up @@ -152,4 +156,18 @@ public static boolean showRemoteSearchSuggestions(final Context context,
return showSearchSuggestions(context, sharedPreferences,
R.string.show_remote_search_suggestions_key);
}

/**
* Check if device does not support media tunneling
* and disable that exoplayer feature if necessary.
* @see DeviceUtils#shouldSupportMediaTunneling()
* @param context
*/
public static void setMediaTunneling(@NonNull final Context context) {
if (!DeviceUtils.shouldSupportMediaTunneling()) {
PreferenceManager.getDefaultSharedPreferences(context).edit()
.putBoolean(context.getString(R.string.disable_media_tunneling_key), true)
.apply();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,17 @@ protected void migrate(@NonNull final Context context) {
}
};

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>
Expand All @@ -140,12 +151,13 @@ protected void migrate(@NonNull final Context context) {
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 = 5;
private static final int VERSION = 6;


public static void initMigrations(@NonNull final Context context, final boolean isFirstRun) {
Expand Down
32 changes: 32 additions & 0 deletions app/src/main/java/org/schabi/newpipe/util/DeviceUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,22 @@ public final class DeviceUtils {
private static Boolean isTV = null;
private static Boolean isFireTV = null;

/*
* Devices that do not support media tunneling
*/
// Formuler Z8 Pro, Z8, CC, Z Alpha, Z+ Neo
private static final boolean HI3798MV200 = Build.VERSION.SDK_INT == 24
&& Build.DEVICE.equals("Hi3798MV200");
// Zephir TS43UHD-2
private static final boolean CVT_MT5886_EU_1G = Build.VERSION.SDK_INT == 24
&& Build.DEVICE.equals("cvt_mt5886_eu_1g");
// Hilife TV
private static final boolean REALTEKATV = Build.VERSION.SDK_INT == 25
&& Build.DEVICE.equals("RealtekATV");
// Philips QM16XE
private static final boolean QM16XE_U = Build.VERSION.SDK_INT == 23
&& Build.DEVICE.equals("QM16XE_U");

private DeviceUtils() {
}

Expand Down Expand Up @@ -224,4 +240,20 @@ public static int getWindowHeight(@NonNull final WindowManager windowManager) {
return point.y;
}
}

/**
* Some devices have broken tunneled video playback but claim to support it.
* See https://github.com/TeamNewPipe/NewPipe/issues/5911
* @Note Add a new {@link org.schabi.newpipe.settings.SettingMigrations.Migration} which calls
* {@link org.schabi.newpipe.settings.NewPipeSettings#setMediaTunneling(Context)}
* when adding a new device to the method
* @return {@code false} if affected device; {@code true} otherwise
*/
public static boolean shouldSupportMediaTunneling() {
// Maintainers note: add a new SettingsMigration which calls
return !HI3798MV200
&& !CVT_MT5886_EU_1G
&& !REALTEKATV
&& !QM16XE_U;
}
}

0 comments on commit 8290449

Please sign in to comment.