Skip to content

Latest commit

 

History

History
184 lines (160 loc) · 12.1 KB

File metadata and controls

184 lines (160 loc) · 12.1 KB

IchthysOS — crDroid Settings status tracker

Per-setting status of every crDroid Settings screen. Companion to ROM_CHANGELOG.md (which is feature-oriented); this one is checklist-oriented for tracking what actually works.

Legend

  • ✅ confirmed working on-device
  • 🟡 works with caveats (see note)
  • 🔧 backend implemented + builds, not yet confirmed on-device
  • ❌ implemented but NOT working (bug)
  • ⛔ no backend yet — the toggle persists but nothing reads it
  • 🚫 blocked on A17 architecture (documented reason)

The vast majority of crDroid settings are currently ⛔: they save correctly (verified: the Settings.System / Secure / LineageSettings providers all persist), but no SystemUI/framework code reads them yet. Backends are being ported screen by screen. Only the items explicitly marked below have a backend.


Status bar (crdroid_settings_statusbar + status_bar_clock) — active focus

Clock & date (status_bar_clock)

  • status_bar_clock_seconds — seconds in the clock (ROM default ON)
  • status_bar_clock_date_display — show date (gone/small/normal)
  • status_bar_clock_date_style — date case (regular/lower/upper)
  • status_bar_clock_date_position — date left/right of time
  • status_bar_clock_date_format — custom date format
  • status_bar_clock_period_separator:.
  • status_bar_clock_bold — bold clock
  • status_bar_am_pm — AM/PM style (normal/small/gone)
  • 🔧 status_bar_clock_auto_hide — hide clock after 5s (simplified timeout model; not the "hide while launcher visible" semantics)
  • status_bar_clock (position left/center/right) — verified on-device 2026-07-15: all three positions work — value 2 → clock top-left, 1 → top-center, 0 → top-right. Added center + right clock views; shows the selected one, respects DISABLE_CLOCK.

Battery

  • status_bar_show_battery_percentre-confirmed 2026-07-14: value 1 renders the percent ("85") inside the battery glyph in the status bar; 0 hides it. Backend (BatteryRepository → BatteryViewModel.BasedOnUserSetting) is correct end-to-end. The earlier "toggle is broken" report was the default being 0 (hidden) plus the crDroid-tab crash making the UI feel unstable — not a backend bug. 🟡 "2 next-to" maps to inside
  • 🟡 status_bar_battery_style — 0 portrait ✅, 2 text ✅ (note: text color is dim/uses the battery fill color — fix pending to use the status-bar foreground color); ❌ 1 circle / 3 dotted-circle do not work (unified Compose battery is a single rounded-rect path — no circle drawable; they fall back to portrait)
  • status_bar_battery_text_charging — (pref is commented out in crDroidSettings anyway)
  • 🔧 batterybar sub-screen (statusbar_battery_bar*) — implemented 2026-07-15 (10 settings): new BatteryBarView (SystemUI statusbar/BatteryBarView.java) drawn full-width along the bottom edge of PhoneStatusBarView, added in StatusBarRoot.addCrDroidStatusBarViews. Backs statusbar_battery_bar (enable), _thickness (dp), _style (regular/center-mirrored/reversed), _blend_color + _blend_color_reverse, _color, _battery_low_color, _animate, _enable_charging_color, _charging_color. Self-observes settings via TunerService (system:) and battery state via an ACTION_BATTERY_CHANGED receiver. ✅ verified on-device 2026-07-15: the bar renders full-width along the status-bar bottom edge, width tracks the level (~85%), amber charging color applied. (The A17 status bar is a real PhoneStatusBarView/FrameLayout hosted via Compose AndroidView — only the start/end icon areas get Compose overlays — so a full-width bottom-edge bar renders fine. This unblocks the "new view" category.)

Behavior / gestures

  • double_tap_sleep_gesture — double-tap status bar to sleep (default ON)
  • 🔧 status_bar_brightness_control — swipe status bar to change brightness
  • 🚫 status_bar_brightness_control_lockscreen — separate keyguard status bar view on A17; not wired
  • 🔧 statusbar_extra_padding_start / _top / _end — extra status bar padding (start ✅ verified)

Icons

  • 🔧 statusbar_notif_count — count badge on notif icons (only apps that set Notification.number)
  • 🔧 statusbar_colored_icons — colored (app-colored) status bar icons
  • wifi_standard_icon — 🚫 blocked (A17 Compose wifi pipeline)
  • bluetooth_show_battery — 🚫 blocked (no BT battery API in A17 icon pipeline)
  • enable_camera_privacy_indicator / enable_location_privacy_indicator / enable_projection_privacy_indicator — needs PrivacyConfig gating (deferred; default ON)

Logo & network traffic (new views) — COSMETIC POLISH, low priority

  • ⏸️ status_bar_logo (+ _position, _style) — code + 33 drawables added; SystemUI stable (fixed an infinite-recursion boot crash), but the view does not render (A17 Compose start-side overlay covers it). Left in place, not actively being fixed — cosmetic polish.
  • ⏸️ network traffic (network_traffic_*) — code present, does not render. Deferred to the very last batch at user's request (do not work on until told). Left untouched in the tree.

Roadmap priority (per user): make the ROM mostly usable first — functional/behavior settings — and leave cosmetic/niche features (logo, network traffic, battery bar, dynamic bar, custom clock styles) as the last bit of polish. Network traffic is explicitly the final batch.

Carrier / misc

  • lockscreen_show_carrier, lockscreen_show_custom_carrier_text
  • qs_quick_pulldown, qs_smart_pulldown — 🚫 legacy shade path inert (scene_container on); to be re-done in the scene framework (in the Quick Settings batch)

Recents (built from prior session + this one)

  • ✅ Classic (LegacyRecents) recents — pre-Quickstep vertical recents, works
  • recents_type selection infra (0 stock / 1 classic / 2 slim) — Classic verified
  • ⛔ Slim recents — no working modern source exists to port; not implemented (crDroidSettings has no slim screen; would be an IchthysOS addition)

crDroid Settings tab crash (FIXED 2026-07-14)

  • 🐛→🔧 Opening the Lock screen tab (and other tabs to the right) crashed the whole crDroid UI. Root cause: the tabbed layout's ViewPager2 (offscreenPageLimit = 1) preloads the adjacent Buttons tab (tab 3, next to Lock screen tab 2). ButtonBacklightBrightness inflates in Buttons.onCreate and its constructor calls DeviceUtils.hasKeyboardBacklightSupport, which reads org.lineageos.platform.internal.R.integer.config_deviceSupportsKeyboardBrightnessControl. The lineage-sdk resource package (id 0x3f, installed to /system_ext/framework/) is not attached to the Settings app's runtime AssetManager, so every org.lineageos.platform.internal.R.* read throws Resources$NotFoundExceptionInflateException → crash. crDroid's lineage classes (LineageSettings, LineageHardwareManager) work because they're linked via libs; only the lineage resources are missing at runtime. Fix: added resilient DeviceUtils.getLineageInteger/Boolean/ Float(context, resId, default) helpers (try/catch → lineage-sdk config.xml defaults) and routed all 16 lineage-internal-R reads (DeviceUtils, ButtonBacklightBrightness, Buttons, Notifications) through them. On Cuttlefish the defaults (no hardware keys/backlight/LED) are the correct values. Reads of com.android.internal.R.* (framework, always loaded) were left as-is. Settings-only rebuild.

Lock screen (crdroid_settings_lockscreen)

Tab now opens without crashing (see crash-fix section above). Verification 2026-07-15:

  • lockscreen_battery_infoverified on-device: with a lock set, the keyguard indication text shows "Battery 85%". Works.
  • 🔧 double_tap_sleep_lockscreen — double-tap empty lockscreen to sleep (passive window-root detector; default off). Code confirmed correct (gated on KEYGUARD state + the setting, fed on the window-root touch dispatch before the scene-container branch). Could not verify via adb — two sequential input tap calls are >300 ms apart (JVM spawn latency), so they never register as a GestureDetector double-tap. Needs a manual human double-tap to confirm.
  • 🔧 lockscreen_enable_power_menu — allow power menu on a secure lock screen (gated in PhoneWindowManager / system_server). Not yet verified (needs secure lock + long-press power).
  • 🔧 enable_ripple_effect — fingerprint/face unlock ripple animation toggle. Not yet verified (needs a biometric unlock event; Cuttlefish virtual fingerprint).
  • ⛔ custom keyguard clock styles, weather (needs OmniJaws), UDFPS (no HW on Cuttlefish), fp vibrate (fingerprint HAL), pulse/media-art — deferred/hard

All 🔧 above built clean (SystemUI + services); on-device verify pending. Framework (services) changes need a full image build (or services.jar push) to take effect — not just an APK push.

Sound (crdroid_settings_sound)

  • disable_all_vibration (IchthysOS addition) — global master toggle that drops EVERY vibration (haptics/ring/notification/alarm/system) at VibrationSettings. Under Sound settings. Verified on-device: with it on, the vibrator history shows all haptics ignored_for_settings.

Boot animation

  • ✅ Custom IchthysOS boot animation — user-provided frames repackaged into a valid stored bootanimation.zip. Restructured 2026-07-15 (v2) into three parts around the true seamless loop. Frame analysis (RMSE): the fish is a turntable spin with an exact 29-frame period — frame 30 == frame 1 (RMSE 2.1), so frames 1–29 are the one perfect loop; the motion diverges after frame 30 (frame 44 ≠ 15) into the wind-down + morph.
    • desc.txt: 680 680 24 / p 0 0 part0 / c 1 0 part1 / c 1 0 part2
    • part0 = frames 1–29 (seamless spin loop) — p count 0, loops until boot completes.
    • part1 = frames 30–71 (transition out: finishes the spin + winds down to a flat side profile) — c (play-to-completion). Must flow through frame 30 (==frame 1) because cutting the loop straight to the wind-down (frame 29→59) is a hard pose jump (RMSE 4200).
    • part2 = frames 72–100 (morph → ICHTHYS symbol → "IchthysOS" text) — c.
    • (No "transition-in" part: the source opens already mid-spin at frame 1, which is the loop start.)
    • Verified via live bootanim preview: fish loops; on service.bootanim.exit=1 it finishes the spin, winds down, and types out "IchthysOS", then exits. In the tree at device/google/cuttlefish/shared/phone/bootanimation.zip (shipped via PRODUCT_COPY_FILES to /product/media/) and backed up to ~/Downloads/IchthysOS-bootanimation-FIXED.zip.

System-wide defaults

  • ✅ 24-hour time default (framework)
  • ✅ Status-bar-seconds default ON

Quick Settings (crdroid_settings_quicksettings, qs_*) — prior session partial

  • ✅ Android 8.1-style collapsed QS (single row of icon tiles)
  • ✅ QS brightness slider (thin + %)
  • ⛔ everything else on this screen (qs_panel_style, tile shapes/animations, brightness slider position, header image, etc.) — no backend yet

Volume (prior session)

  • ✅ Horizontal 8.1-style volume dialog (step number, no ringer drawer, pitch-black + accent border, centered, white slider outline)

Theming / Monet (monet_engine) — prior session

  • ✅ Pitch-black mode (dark surfaces → pure black)
  • ⛔ rest of monet_engine screen — no backend yet

Screens with NO backend yet (⛔ all — persist but do nothing)

crdroid_settings_lockscreen (+ lockscreen clock, media art, edge light, pulse, always-on-display, doze) · crdroid_settings_ui (settings icons, gradient, dynamic bar) · crdroid_settings_notifications (notification light, battery light) · crdroid_settings_sound (adaptive playback) · crdroid_settings_button (hardware keys, power menu) · crdroid_settings_misc (smart pixels, sensor block, game spoofing, play integrity, tricky store) · crdroid_settings_about.


Last updated: 2026-07-14. Update per-item as backends are ported/verified.