Centralize SystemUI capability checks

This commit is contained in:
ajp_anton
2026-07-08 01:58:03 +00:00
parent 4f57e9e33c
commit 321048f787
6 changed files with 42 additions and 26 deletions
@@ -0,0 +1,28 @@
package se.ajpanton.statusbartweak.platform;
import android.os.Build;
import se.ajpanton.statusbartweak.shell.settings.SbtSettings;
public final class SystemUiCapabilities {
private SystemUiCapabilities() {
}
public static boolean isSamsungOneUi() {
return "samsung".equalsIgnoreCase(Build.MANUFACTURER);
}
public static boolean supportsLockscreenShadeWindowRoot() {
return !isSamsungOneUi();
}
public static boolean supportsExperimentalGenericAodStatusbarRoot(SbtSettings settings) {
return !isSamsungOneUi()
&& settings != null
&& settings.debugExperimentalAodStatusbarRoot;
}
public static boolean treatsUnknownAodNotificationStyleAsIcons(SbtSettings settings) {
return supportsExperimentalGenericAodStatusbarRoot(settings);
}
}
@@ -7,7 +7,6 @@ import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Looper;
import android.os.PowerManager;
import android.service.notification.StatusBarNotification;
@@ -36,6 +35,7 @@ import java.util.Set;
import java.util.WeakHashMap;
import java.util.function.Function;
import se.ajpanton.statusbartweak.platform.SystemUiCapabilities;
import se.ajpanton.statusbartweak.runtime.NotificationKeyReflection;
import se.ajpanton.statusbartweak.runtime.RuntimeMutationGuard;
import se.ajpanton.statusbartweak.runtime.ViewIdNames;
@@ -5058,11 +5058,7 @@ final class StockLayoutCanvasController {
|| (activeScene != null
&& activeScene.isLockscreen()
&& isNotificationShadeWindowRoot(root)
&& !isSamsungDevice());
}
private boolean isSamsungDevice() {
return "samsung".equalsIgnoreCase(Build.MANUFACTURER);
&& SystemUiCapabilities.supportsLockscreenShadeWindowRoot());
}
private void updateActiveScene(View root, Context context) {
@@ -5114,12 +5110,11 @@ final class StockLayoutCanvasController {
if (root == null
|| activeScene == null
|| !activeScene.isAod()
|| isSamsungDevice()
|| !isUnlockedStatusBarRoot(root)) {
return false;
}
SbtSettings settings = RuntimeSettingsCache.get(root.getContext());
return settings.debugExperimentalAodStatusbarRoot;
return SystemUiCapabilities.supportsExperimentalGenericAodStatusbarRoot(settings);
}
private boolean hasConfirmedAodPluginDescendant(View root) {
@@ -2,7 +2,6 @@ package se.ajpanton.statusbartweak.runtime.render;
import android.app.KeyguardManager;
import android.content.Context;
import android.os.Build;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
@@ -11,6 +10,7 @@ import java.util.ArrayList;
import java.util.Objects;
import java.util.WeakHashMap;
import se.ajpanton.statusbartweak.platform.SystemUiCapabilities;
import se.ajpanton.statusbartweak.runtime.features.clock.ClockLayoutTextFactory;
import se.ajpanton.statusbartweak.runtime.layoutsolver.StatusBarLayoutSolver.Bounds;
import se.ajpanton.statusbartweak.runtime.mode.NotificationDisplayStyle;
@@ -467,8 +467,7 @@ public final class UnlockedIconSnapshotRenderController {
&& (style == NotificationDisplayStyle.ICONS
|| style == NotificationDisplayStyle.DOT
|| (style == NotificationDisplayStyle.UNKNOWN
&& settings.debugExperimentalAodStatusbarRoot
&& !"samsung".equalsIgnoreCase(Build.MANUFACTURER)));
&& SystemUiCapabilities.treatsUnknownAodNotificationStyleAsIcons(settings)));
}
return settings.layoutNotifEnabledUnlocked;
}
@@ -1,7 +1,6 @@
package se.ajpanton.statusbartweak.runtime.render;
import android.graphics.Rect;
import android.os.Build;
import android.view.View;
import android.view.ViewGroup;
@@ -12,6 +11,7 @@ import java.util.Locale;
import java.util.Map;
import java.util.WeakHashMap;
import se.ajpanton.statusbartweak.platform.SystemUiCapabilities;
import se.ajpanton.statusbartweak.R;
import se.ajpanton.statusbartweak.runtime.layoutsolver.StatusBarLayoutSolver.AnchorSide;
import se.ajpanton.statusbartweak.runtime.layoutsolver.StatusBarLayoutSolver.Bounds;
@@ -874,9 +874,7 @@ final class UnlockedLayoutPlanner {
}
private boolean isExperimentalGenericAod(SbtSettings settings) {
return settings != null
&& settings.debugExperimentalAodStatusbarRoot
&& !"samsung".equalsIgnoreCase(Build.MANUFACTURER);
return SystemUiCapabilities.supportsExperimentalGenericAodStatusbarRoot(settings);
}
private ArrayList<SnapshotPlacement> unreadNotificationPlacements(
@@ -4,7 +4,6 @@ import android.content.Context;
import android.content.Intent;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.BatteryManager;
import android.view.View;
import android.view.ViewGroup;
@@ -19,6 +18,7 @@ import java.util.Locale;
import java.util.Objects;
import java.util.WeakHashMap;
import se.ajpanton.statusbartweak.platform.SystemUiCapabilities;
import se.ajpanton.statusbartweak.runtime.NotificationKeyReflection;
import se.ajpanton.statusbartweak.runtime.ViewIdNames;
import se.ajpanton.statusbartweak.runtime.hooks.ReflectionSupport;
@@ -142,13 +142,12 @@ final class UnlockedStockSourceCollector {
NotificationDisplayStyle style = scene.notificationDisplayStyle();
return style == NotificationDisplayStyle.ICONS
|| style == NotificationDisplayStyle.DOT
|| (style == NotificationDisplayStyle.UNKNOWN && isExperimentalGenericAod(settings));
|| (style == NotificationDisplayStyle.UNKNOWN
&& SystemUiCapabilities.treatsUnknownAodNotificationStyleAsIcons(settings));
}
private boolean isExperimentalGenericAod(SbtSettings settings) {
return settings != null
&& settings.debugExperimentalAodStatusbarRoot
&& !"samsung".equalsIgnoreCase(Build.MANUFACTURER);
return SystemUiCapabilities.supportsExperimentalGenericAodStatusbarRoot(settings);
}
private String reflectString(View view, String methodName, String... fieldNames) {
@@ -4,7 +4,6 @@ import android.Manifest;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.LayoutInflater;
@@ -28,6 +27,7 @@ import java.util.HashMap;
import java.util.Map;
import se.ajpanton.statusbartweak.R;
import se.ajpanton.statusbartweak.platform.SystemUiCapabilities;
import se.ajpanton.statusbartweak.shell.debug.DebugNotifications;
import se.ajpanton.statusbartweak.shell.settings.ClockCameraTypeSupport;
import se.ajpanton.statusbartweak.shell.settings.SbtDefaults;
@@ -147,7 +147,8 @@ public class IconsDebugFragment extends Fragment {
SbtSettings.KEY_DEBUG_EXPERIMENTAL_AOD_STATUSBAR_ROOT,
SbtDefaults.DEBUG_EXPERIMENTAL_AOD_STATUSBAR_ROOT_DEFAULT,
true);
if (isSamsungDevice() && experimentalAodStatusbarRootSwitch != null) {
if (SystemUiCapabilities.isSamsungOneUi()
&& experimentalAodStatusbarRootSwitch != null) {
experimentalAodStatusbarRootSwitch.setChecked(false);
experimentalAodStatusbarRootSwitch.setEnabled(false);
}
@@ -201,10 +202,6 @@ public class IconsDebugFragment extends Fragment {
return root;
}
private boolean isSamsungDevice() {
return "samsung".equalsIgnoreCase(Build.MANUFACTURER);
}
private void styleCompactCounterButton(MaterialButton button) {
ViewTreeSupport.styleCompactButtonText(button, 13f);
}