2019-02-19 14:57:49 +01:00
|
|
|
package org.schabi.newpipe.util;
|
2019-02-01 14:02:28 +01:00
|
|
|
|
2020-04-25 11:35:15 +02:00
|
|
|
import android.app.UiModeManager;
|
|
|
|
import android.content.Context;
|
2019-09-20 11:23:17 +02:00
|
|
|
import android.content.pm.PackageManager;
|
2020-04-25 11:35:15 +02:00
|
|
|
import android.content.res.Configuration;
|
|
|
|
import android.os.BatteryManager;
|
2020-04-25 23:38:34 +02:00
|
|
|
import android.os.Build;
|
2019-11-16 07:06:59 +01:00
|
|
|
import android.view.KeyEvent;
|
2020-04-25 11:35:15 +02:00
|
|
|
|
2020-07-21 00:43:49 +02:00
|
|
|
import androidx.annotation.NonNull;
|
2020-09-13 13:50:29 +02:00
|
|
|
import androidx.core.content.ContextCompat;
|
2019-02-01 14:02:28 +01:00
|
|
|
|
2020-09-13 13:50:29 +02:00
|
|
|
import org.schabi.newpipe.App;
|
2020-04-25 11:35:15 +02:00
|
|
|
|
2020-07-21 00:43:49 +02:00
|
|
|
public final class DeviceUtils {
|
2020-04-26 00:36:45 +02:00
|
|
|
|
2020-04-11 04:03:22 +02:00
|
|
|
private static final String AMAZON_FEATURE_FIRE_TV = "amazon.hardware.fire_tv";
|
2020-04-26 00:36:45 +02:00
|
|
|
private static Boolean isTV = null;
|
2020-04-11 04:03:22 +02:00
|
|
|
|
2020-07-21 00:43:49 +02:00
|
|
|
private DeviceUtils() {
|
2020-04-25 11:35:15 +02:00
|
|
|
}
|
2020-04-11 03:25:05 +02:00
|
|
|
|
2020-04-25 11:35:15 +02:00
|
|
|
public static boolean isTv(final Context context) {
|
2020-07-21 00:43:49 +02:00
|
|
|
if (isTV != null) {
|
|
|
|
return isTV;
|
2020-04-26 00:36:45 +02:00
|
|
|
}
|
|
|
|
|
2020-08-16 10:24:58 +02:00
|
|
|
final PackageManager pm = App.getApp().getPackageManager();
|
2020-04-25 11:35:15 +02:00
|
|
|
|
|
|
|
// from doc: https://developer.android.com/training/tv/start/hardware.html#runtime-check
|
2020-09-13 13:50:29 +02:00
|
|
|
boolean isTv = ContextCompat.getSystemService(context, UiModeManager.class)
|
2020-04-26 00:36:45 +02:00
|
|
|
.getCurrentModeType() == Configuration.UI_MODE_TYPE_TELEVISION
|
|
|
|
|| pm.hasSystemFeature(AMAZON_FEATURE_FIRE_TV)
|
|
|
|
|| pm.hasSystemFeature(PackageManager.FEATURE_TELEVISION);
|
2020-04-25 11:35:15 +02:00
|
|
|
|
2020-04-25 23:38:34 +02:00
|
|
|
// from https://stackoverflow.com/a/58932366
|
|
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
2020-09-13 13:50:29 +02:00
|
|
|
final boolean isBatteryAbsent = context.getSystemService(BatteryManager.class)
|
2020-04-25 23:38:34 +02:00
|
|
|
.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY) == 0;
|
|
|
|
isTv = isTv || (isBatteryAbsent
|
|
|
|
&& !pm.hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN)
|
2020-04-25 11:35:15 +02:00
|
|
|
&& pm.hasSystemFeature(PackageManager.FEATURE_USB_HOST)
|
|
|
|
&& pm.hasSystemFeature(PackageManager.FEATURE_ETHERNET));
|
2020-04-25 23:38:34 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
|
|
|
isTv = isTv || pm.hasSystemFeature(PackageManager.FEATURE_LEANBACK);
|
|
|
|
}
|
|
|
|
|
2020-07-21 00:43:49 +02:00
|
|
|
DeviceUtils.isTV = isTv;
|
|
|
|
return DeviceUtils.isTV;
|
|
|
|
}
|
|
|
|
|
|
|
|
public static boolean isTablet(@NonNull final Context context) {
|
|
|
|
return (context
|
|
|
|
.getResources()
|
|
|
|
.getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK)
|
|
|
|
>= Configuration.SCREENLAYOUT_SIZE_LARGE;
|
2019-02-01 14:02:28 +01:00
|
|
|
}
|
2019-11-16 07:06:59 +01:00
|
|
|
|
2020-04-11 03:25:05 +02:00
|
|
|
public static boolean isConfirmKey(final int keyCode) {
|
2019-11-16 07:06:59 +01:00
|
|
|
switch (keyCode) {
|
|
|
|
case KeyEvent.KEYCODE_DPAD_CENTER:
|
|
|
|
case KeyEvent.KEYCODE_ENTER:
|
|
|
|
case KeyEvent.KEYCODE_SPACE:
|
|
|
|
case KeyEvent.KEYCODE_NUMPAD_ENTER:
|
|
|
|
return true;
|
|
|
|
default:
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
2019-02-01 14:02:28 +01:00
|
|
|
}
|