github popovicialinc/gama v1.2
GAMA v1.2

8 hours ago

Visual Engine and Rendering

  • Offloaded particle physics calculations to a background thread via withContext(Dispatchers.Default), preventing panel open animations and heavy compositions from stealing frame budget from the particle loop
  • Refactored the particle loop to snapshot all frame inputs (time, rotation, sensitivity, daytime flag) on the main thread before dispatching physics work, eliminating race conditions between the UI thread and the physics dispatcher
  • Reduced the parallax sensor smoothing animation from 800ms to 200ms for a more responsive feel when tilting the device
  • Added an isLandscape parameter to calculateCelestialPosition so the Sun and Moon track a tighter arc in landscape orientation, using screen height proportions tuned specifically for wide viewports
  • Added pressDown and pressUp SpringConfig presets to MotionTokens.Springs to centralize the asymmetric press physics used across interactive cards and buttons

Adaptive Type System

  • Introduced the AdaptiveTypeScale data class as a single source of truth for all font sizes across the app, replacing scattered hard-coded sp values
  • Implemented the rememberAdaptiveType composable which computes a scaled type ramp based on screen width, screen height, device DPI class, system font scale preference, and orientation
  • Exposed AdaptiveTypeScale via the LocalTypeScale CompositionLocal so every composable reads from the same computed scale without passing it as a parameter
  • Applied a 0.75-weighted accessibility scale to partially honour large system font preferences without breaking panel layouts for users who set fontScale above 1.5x
  • Constrained the combined scale multiplier to the range 0.85–1.35 to prevent unreadably small or oversized text on extreme device configurations

Theming and Colors

  • Fixed the OLED mode border color to use accentColor.copy(alpha = 0f) instead of Color.Transparent so border width animations fade cleanly without a hard color snap

User Interface Components

  • Replaced FlatButton with the new IllustratedButton component for the Vulkan, OpenGL, Resources, and GPUWatch action buttons, adding per-button icon illustrations rendered via Canvas drawscope
  • Added SecondaryIconButton as a compact icon-only button used for changelog refresh and secondary panel actions
  • Added ChangelogIconButton as a dedicated trigger for opening the changelog from the main screen footer
  • Added ChangelogShimmer as a skeleton placeholder shown while changelog text is being fetched from GitHub
  • Overhauled AnimatedElement to use a two-phase keyframe enter animation: scale rushes from 0.84 to a 1.065 overshoot in 62% of the duration, then eases back to 1.0 with a gentle curve, while translationY slides up without overshoot to prevent cards from escaping clip bounds
  • Added reverse stagger on exit to AnimatedElement so the bottom card leaves first and the top card last, mirroring the enter cascade
  • Added a separate translationY animationSpec to AnimatedElement that uses plain ease-out with no overshoot, decoupled from the scale keyframe spec
  • Updated PanelBackButton to accept a scrollState parameter and apply a 40% parallax translationY on its container as the panel scrolls, creating depth between the floating button and the content
  • Applied pressDown and pressUp spring presets to all interactive cards (SettingsNavigationCard, ToggleCard, RendererCard, IntegrationInfoCard) for asymmetric press-then-release physics
  • Added a subtle 0.07 alpha accent tint to the GlideOptionSelector track background
  • Added input-consuming overlay to GlideOptionSelector when disabled so pointer events are blocked cleanly rather than falling through

Panels and Dialogs

  • Added ResourcesPanel as a full-screen scrollable panel linking out to Shizuku documentation, device compatibility information, and community resources, with an ExternalLinkConfirmDialog intercept before opening any URL in the browser
  • Added ExternalLinkConfirmDialog which shows the destination URL and label before navigating away, with a cancel option
  • Added NotificationsPanel as a sub-panel of FunctionalityPanel for managing reminder notification settings, including enable/disable toggle, interval picker (2h / 4h / 6h / 12h / 24h), and a live preview button
  • Added IntegrationsPanel as a new top-level settings destination showing Quick Settings Tile and Home Screen Widget setup instructions with availability status badges
  • Added EasterEggDialog triggered by a long-press on the GAMA title text
  • Rebuilt ChangelogDialog with a landscape-aware two-column layout: a left sidebar with version info and navigation, and a right scrollable content column with painted top and bottom fade overlays; portrait retains the original single-column layout
  • Updated BouncyDialog exit animation to a two-stage sequence: a micro-swell to 1.08 scale over 80ms followed by a shrink to 0.72 with a deceleration easing curve, replacing the single-phase exit

Notifications

  • Added sendOpenGLReminderNotification which posts a randomised nudge notification on the gama_reminder_channel when the active renderer is OpenGL, personalising the title and body with the user name if set
  • Added an OpenGL reminder loop in GamaUI that polls every 15 minutes and fires a reminder notification when the configured interval has elapsed since the last send, only while the app is in the foreground and the current renderer is OpenGL
  • The reminder loop is keyed to notificationsEnabled and notifIntervalIndex so it restarts with the new interval immediately when the user changes the setting

Features and Functionality

  • Tracked the last renderer switch timestamp in shared preferences (last_switch_time) and displayed it as a relative time label on the Current Renderer card when no command output is present
  • Added the AggressiveWarningDialog a "don't show again" checkbox that persists to shared preferences (dont_show_aggressive_warning) so confirmed users skip the warning on subsequent toggles

Back Navigation

  • Added BackHandler entries for every panel and dialog (EasterEggDialog, ResourcesPanel, ExternalLinkConfirmDialog, IntegrationsPanel, NotificationsPanel, DeveloperPanel) so the system back gesture dismisses the foreground panel rather than exiting the app

Layout and Responsiveness

  • Added scrollState tracking to all panels (SettingsPanel, ResourcesPanel, VisualEffectsPanel, EffectsPanel, ParticlesPanel, ColorCustomizationPanel, OLEDPanel, FunctionalityPanel, NotificationsPanel, DeveloperPanel, IntegrationsPanel) so the floating PanelBackButton can read scroll position for its parallax offset

Performance

  • Reduced blur intensity from 20dp to 12dp to lower the cost of the RenderEffect offscreen pass

Removed

  • Removed GrainEffect composable which was causing a main-thread stall on first composition due to synchronous noise bitmap generation and BitmapShader setup

Don't miss a new gama release

NewReleases is sending notifications on new releases.