Fix persistent hover overlay when mouse connected
This commit is contained in:
parent
95a65d5704
commit
ff774a1870
2 changed files with 73 additions and 13 deletions
|
|
@ -1,5 +1,6 @@
|
|||
package org.schabi.newpipe.util;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.UiModeManager;
|
||||
import android.content.Context;
|
||||
import android.content.pm.PackageManager;
|
||||
|
|
@ -22,6 +23,9 @@ import androidx.preference.PreferenceManager;
|
|||
import org.schabi.newpipe.App;
|
||||
import org.schabi.newpipe.R;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
public final class DeviceUtils {
|
||||
|
||||
private static final String AMAZON_FEATURE_FIRE_TV = "amazon.hardware.fire_tv";
|
||||
|
|
@ -84,6 +88,50 @@ public final class DeviceUtils {
|
|||
return DeviceUtils.isTV;
|
||||
}
|
||||
|
||||
public static boolean isDesktopMode(final Context context) {
|
||||
final boolean isDesktopMode = ContextCompat.getSystemService(context, UiModeManager.class)
|
||||
.getCurrentModeType() == Configuration.UI_MODE_TYPE_DESK;
|
||||
|
||||
// DeX check for standalone and multi-window mode
|
||||
boolean isDeXMode = false;
|
||||
try {
|
||||
final Configuration config = context.getResources().getConfiguration();
|
||||
final Class<?> configClass = config.getClass();
|
||||
final int semDesktopModeEnabledConst =
|
||||
configClass.getField("SEM_DESKTOP_MODE_ENABLED").getInt(configClass);
|
||||
final int currentMode =
|
||||
configClass.getField("semDesktopModeEnabled").getInt(config);
|
||||
if (semDesktopModeEnabledConst == currentMode) {
|
||||
isDeXMode = true;
|
||||
}
|
||||
} catch (final NoSuchFieldException | IllegalAccessException e) {
|
||||
// empty
|
||||
}
|
||||
@SuppressLint("WrongConstant") final Object desktopModeManager = context
|
||||
.getApplicationContext()
|
||||
.getSystemService("desktopmode");
|
||||
if (desktopModeManager != null) {
|
||||
try {
|
||||
final Method getDesktopModeStateMethod = desktopModeManager.getClass()
|
||||
.getDeclaredMethod("getDesktopModeState");
|
||||
final Object desktopModeState = getDesktopModeStateMethod
|
||||
.invoke(desktopModeManager);
|
||||
final Class<?> desktopModeStateClass = desktopModeState.getClass();
|
||||
final Method getEnabledMethod = desktopModeStateClass
|
||||
.getDeclaredMethod("getEnabled");
|
||||
final int enabled = (int) getEnabledMethod.invoke(desktopModeState);
|
||||
final boolean isEnabled = enabled == desktopModeStateClass
|
||||
.getDeclaredField("ENABLED").getInt(desktopModeStateClass);
|
||||
|
||||
isDeXMode = isEnabled;
|
||||
} catch (NoSuchFieldException | NoSuchMethodException
|
||||
| IllegalAccessException | InvocationTargetException e) {
|
||||
// Device does not support DeX 3.0
|
||||
}
|
||||
}
|
||||
return isDesktopMode || isDeXMode;
|
||||
}
|
||||
|
||||
public static boolean isTablet(@NonNull final Context context) {
|
||||
final String tabletModeSetting = PreferenceManager.getDefaultSharedPreferences(context)
|
||||
.getString(context.getString(R.string.tablet_mode_key), "");
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue