ANDROID: Add compatibility helper to get system gestures insets

This commit is contained in:
Le Philousophe 2024-08-11 17:34:38 +02:00
parent 678a8fe4cb
commit 64eff5293a

View File

@ -8,6 +8,7 @@ import android.content.pm.ShortcutManager;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Insets;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.Icon;
@ -80,6 +81,95 @@ class CompatHelpers {
}
}
static class SystemInsets {
public interface SystemInsetsListener {
void systemInsetsUpdated(int insets[]);
}
public static void registerSystemInsetsListener(View v, SystemInsetsListener l) {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R) {
v.setOnApplyWindowInsetsListener(new OnApplyWindowInsetsListenerR(l));
} else if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) {
v.setOnApplyWindowInsetsListener(new OnApplyWindowInsetsListenerQ(l));
} else if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT_WATCH) {
v.setOnApplyWindowInsetsListener(new OnApplyWindowInsetsListenerKitKatW(l));
} else {
// Not available
int[] insets = new int[] { 0, 0, 0, 0 };
l.systemInsetsUpdated(insets);
}
}
@RequiresApi(android.os.Build.VERSION_CODES.KITKAT_WATCH)
@SuppressWarnings("deprecation")
private static class OnApplyWindowInsetsListenerKitKatW implements View.OnApplyWindowInsetsListener {
private SystemInsetsListener l;
public OnApplyWindowInsetsListenerKitKatW(SystemInsetsListener l) {
this.l = l;
}
@Override
public WindowInsets onApplyWindowInsets(View v, WindowInsets insets) {
// No system gestures inset before Android Q
int[] insetsArray = new int[] {
insets.getStableInsetLeft(),
insets.getStableInsetTop(),
insets.getStableInsetRight(),
insets.getStableInsetBottom()
};
l.systemInsetsUpdated(insetsArray);
return v.onApplyWindowInsets(insets);
}
}
@RequiresApi(android.os.Build.VERSION_CODES.Q)
@SuppressWarnings("deprecation")
private static class OnApplyWindowInsetsListenerQ implements View.OnApplyWindowInsetsListener {
private SystemInsetsListener l;
public OnApplyWindowInsetsListenerQ(SystemInsetsListener l) {
this.l = l;
}
@Override
public WindowInsets onApplyWindowInsets(View v, WindowInsets insets) {
Insets insetsStruct = insets.getStableInsets();
int[] insetsArray = new int[] {
insetsStruct.left,
insetsStruct.top,
insetsStruct.right,
insetsStruct.bottom,
};
l.systemInsetsUpdated(insetsArray);
return v.onApplyWindowInsets(insets);
}
}
@RequiresApi(android.os.Build.VERSION_CODES.R)
@SuppressWarnings("deprecation")
private static class OnApplyWindowInsetsListenerR implements View.OnApplyWindowInsetsListener {
private SystemInsetsListener l;
public OnApplyWindowInsetsListenerR(SystemInsetsListener l) {
this.l = l;
}
@Override
public WindowInsets onApplyWindowInsets(View v, WindowInsets insets) {
Insets insetsStruct = insets.getInsetsIgnoringVisibility(WindowInsets.Type.systemGestures());
int[] insetsArray = new int[] {
insetsStruct.left,
insetsStruct.top,
insetsStruct.right,
insetsStruct.bottom,
};
l.systemInsetsUpdated(insetsArray);
return v.onApplyWindowInsets(insets);
}
}
}
static class AudioTrackCompat {
public static class AudioTrackCompatReturn {
public AudioTrack audioTrack;