mirror of
				https://github.com/TeamNewPipe/NewPipe
				synced 2025-10-31 07:13:00 +00:00 
			
		
		
		
	Better detection of TV devices
Some devices were not detected as TV even though they are
This commit is contained in:
		| @@ -64,8 +64,8 @@ import org.schabi.newpipe.fragments.MainFragment; | ||||
| import org.schabi.newpipe.fragments.detail.VideoDetailFragment; | ||||
| import org.schabi.newpipe.fragments.list.search.SearchFragment; | ||||
| import org.schabi.newpipe.report.ErrorActivity; | ||||
| import org.schabi.newpipe.util.Constants; | ||||
| import org.schabi.newpipe.util.AndroidTvUtils; | ||||
| import org.schabi.newpipe.util.Constants; | ||||
| import org.schabi.newpipe.util.KioskTranslator; | ||||
| import org.schabi.newpipe.util.Localization; | ||||
| import org.schabi.newpipe.util.NavigationHelper; | ||||
| @@ -145,7 +145,7 @@ public class MainActivity extends AppCompatActivity { | ||||
|             ErrorActivity.reportUiError(this, e); | ||||
|         } | ||||
|  | ||||
|         if (AndroidTvUtils.isTv()) { | ||||
|         if (AndroidTvUtils.isTv(this)) { | ||||
|             FocusOverlayView.setupFocusObserver(this); | ||||
|         } | ||||
|     } | ||||
| @@ -532,7 +532,7 @@ public class MainActivity extends AppCompatActivity { | ||||
|             Log.d(TAG, "onBackPressed() called"); | ||||
|         } | ||||
|  | ||||
|         if (AndroidTvUtils.isTv()) { | ||||
|         if (AndroidTvUtils.isTv(this)) { | ||||
|             View drawerPanel = findViewById(R.id.navigation); | ||||
|             if (drawer.isDrawerOpen(drawerPanel)) { | ||||
|                 drawer.closeDrawers(); | ||||
|   | ||||
| @@ -344,7 +344,7 @@ public class RouterActivity extends AppCompatActivity { | ||||
|  | ||||
|         alertDialog.show(); | ||||
|  | ||||
|         if (AndroidTvUtils.isTv()) { | ||||
|         if (AndroidTvUtils.isTv(this)) { | ||||
|             FocusOverlayView.setupFocusObserver(alertDialog); | ||||
|         } | ||||
|     } | ||||
|   | ||||
| @@ -57,7 +57,7 @@ public class DownloadActivity extends AppCompatActivity { | ||||
|             } | ||||
|         }); | ||||
|  | ||||
|         if (AndroidTvUtils.isTv()) { | ||||
|         if (AndroidTvUtils.isTv(this)) { | ||||
|             FocusOverlayView.setupFocusObserver(this); | ||||
|         } | ||||
|     } | ||||
|   | ||||
| @@ -539,7 +539,7 @@ public class VideoDetailFragment extends BaseStateFragment<StreamInfo> | ||||
|  | ||||
|         thumbnailBackgroundButton.requestFocus(); | ||||
|  | ||||
|         if (AndroidTvUtils.isTv()) { | ||||
|         if (AndroidTvUtils.isTv(getContext())) { | ||||
|             // remove ripple effects from detail controls | ||||
|             final int transparent = getResources().getColor(R.color.transparent_background_color); | ||||
|             detailControlsAddToPlaylist.setBackgroundColor(transparent); | ||||
|   | ||||
| @@ -511,7 +511,7 @@ public class SearchFragment extends BaseListFragment<SearchInfo, ListExtractor.I | ||||
|             if (isSuggestionsEnabled && errorPanelRoot.getVisibility() != View.VISIBLE) { | ||||
|                 showSuggestionsPanel(); | ||||
|             } | ||||
|             if (AndroidTvUtils.isTv()) { | ||||
|             if (AndroidTvUtils.isTv(getContext())) { | ||||
|                 showKeyboardSearch(); | ||||
|             } | ||||
|         }); | ||||
|   | ||||
| @@ -129,7 +129,7 @@ public class CommentsMiniInfoItemHolder extends InfoItemHolder { | ||||
|  | ||||
|  | ||||
|         itemView.setOnLongClickListener(view -> { | ||||
|             if (!AndroidTvUtils.isTv()) { | ||||
|             if (!AndroidTvUtils.isTv(itemBuilder.getContext())) { | ||||
|                 ClipboardManager clipboardManager = (ClipboardManager) itemBuilder.getContext() | ||||
|                         .getSystemService(Context.CLIPBOARD_SERVICE); | ||||
|                 clipboardManager.setPrimaryClip(ClipData.newPlainText(null, commentText)); | ||||
|   | ||||
| @@ -179,7 +179,7 @@ public final class MainVideoPlayer extends AppCompatActivity | ||||
|                     final String orientKey = getString(R.string.last_orientation_landscape_key); | ||||
|  | ||||
|                     final boolean lastOrientationWasLandscape = defaultPreferences | ||||
|                             .getBoolean(orientKey, AndroidTvUtils.isTv()); | ||||
|                             .getBoolean(orientKey, AndroidTvUtils.isTv(getApplicationContext())); | ||||
|                     setLandscape(lastOrientationWasLandscape); | ||||
|                 } else { | ||||
|                     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); | ||||
| @@ -191,7 +191,7 @@ public final class MainVideoPlayer extends AppCompatActivity | ||||
|                 Settings.System.getUriFor(Settings.System.ACCELEROMETER_ROTATION), | ||||
|                 false, rotationObserver); | ||||
|  | ||||
|         if (AndroidTvUtils.isTv()) { | ||||
|         if (AndroidTvUtils.isTv(this)) { | ||||
|             FocusOverlayView.setupFocusObserver(this); | ||||
|         } | ||||
|     } | ||||
| @@ -223,7 +223,8 @@ public final class MainVideoPlayer extends AppCompatActivity | ||||
|             default: | ||||
|                 break; | ||||
|             case KeyEvent.KEYCODE_BACK: | ||||
|                 if (AndroidTvUtils.isTv() && playerImpl.isControlsVisible()) { | ||||
|                 if (AndroidTvUtils.isTv(getApplicationContext()) | ||||
|                         && playerImpl.isControlsVisible()) { | ||||
|                     playerImpl.hideControls(0, 0); | ||||
|                     hideSystemUi(); | ||||
|                     return true; | ||||
| @@ -271,7 +272,7 @@ public final class MainVideoPlayer extends AppCompatActivity | ||||
|             final String orientKey = getString(R.string.last_orientation_landscape_key); | ||||
|  | ||||
|             boolean lastOrientationWasLandscape = defaultPreferences | ||||
|                     .getBoolean(orientKey, AndroidTvUtils.isTv()); | ||||
|                     .getBoolean(orientKey, AndroidTvUtils.isTv(getApplicationContext())); | ||||
|             setLandscape(lastOrientationWasLandscape); | ||||
|         } | ||||
|  | ||||
|   | ||||
| @@ -62,7 +62,7 @@ public class SettingsActivity extends AppCompatActivity | ||||
|                     .commit(); | ||||
|         } | ||||
|  | ||||
|         if (AndroidTvUtils.isTv()) { | ||||
|         if (AndroidTvUtils.isTv(this)) { | ||||
|             FocusOverlayView.setupFocusObserver(this); | ||||
|         } | ||||
|     } | ||||
|   | ||||
| @@ -1,22 +1,45 @@ | ||||
| package org.schabi.newpipe.util; | ||||
|  | ||||
| import android.annotation.SuppressLint; | ||||
| import android.app.UiModeManager; | ||||
| import android.content.Context; | ||||
| import android.content.pm.PackageManager; | ||||
|  | ||||
| import android.content.res.Configuration; | ||||
| import android.os.BatteryManager; | ||||
| import android.view.KeyEvent; | ||||
|  | ||||
| import org.schabi.newpipe.App; | ||||
|  | ||||
| import static android.content.Context.BATTERY_SERVICE; | ||||
| import static android.content.Context.UI_MODE_SERVICE; | ||||
|  | ||||
| public final class AndroidTvUtils { | ||||
|     private static final String AMAZON_FEATURE_FIRE_TV = "amazon.hardware.fire_tv"; | ||||
|  | ||||
|     private AndroidTvUtils() { } | ||||
|     private AndroidTvUtils() { | ||||
|     } | ||||
|  | ||||
|     @SuppressLint("InlinedApi") | ||||
|     public static boolean isTv() { | ||||
|     public static boolean isTv(final Context context) { | ||||
|         PackageManager pm = App.getApp().getPackageManager(); | ||||
|  | ||||
|         return pm.hasSystemFeature(AMAZON_FEATURE_FIRE_TV) | ||||
|                 || pm.hasSystemFeature(PackageManager.FEATURE_LEANBACK); | ||||
|  | ||||
|         // from doc: https://developer.android.com/training/tv/start/hardware.html#runtime-check | ||||
|         boolean isAndroidTv = ((UiModeManager) context.getSystemService(UI_MODE_SERVICE)) | ||||
|                 .getCurrentModeType() == Configuration.UI_MODE_TYPE_TELEVISION; | ||||
|  | ||||
|         boolean isBatteryAbsent = ((BatteryManager) context.getSystemService(BATTERY_SERVICE)) | ||||
|                 .getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY) == 0; | ||||
|  | ||||
|         return isAndroidTv | ||||
|                 || pm.hasSystemFeature(AMAZON_FEATURE_FIRE_TV) | ||||
|                 || pm.hasSystemFeature(PackageManager.FEATURE_LEANBACK) | ||||
|                 || pm.hasSystemFeature(PackageManager.FEATURE_TELEVISION) | ||||
|  | ||||
|                 //from https://stackoverflow.com/a/58932366 | ||||
|                 || (isBatteryAbsent && !pm.hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN) | ||||
|                     && pm.hasSystemFeature(PackageManager.FEATURE_USB_HOST) | ||||
|                     && pm.hasSystemFeature(PackageManager.FEATURE_ETHERNET)); | ||||
|     } | ||||
|  | ||||
|     public static boolean isConfirmKey(final int keyCode) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 bopol
					bopol