The worker exited early when the DB was empty (fresh installs via browser).
Now upserts a self-record for slug='silverdroid' before the isEmpty guard
so update notifications fire even when no other apps have been installed
via the AppStore.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- AppStoreJsBridge: add canInstallApps() JS interface for UI gating
- AppStoreJsBridge: gate installApp() on canRequestPackageInstalls() at
runtime; redirect to Settings and fire onInstallError callback on deny
- AppStoreJsBridge: fix getInstalledVersion() to cross-check PackageManager,
correcting stale version strings and removing uninstalled app records
- InstallerService: add reconcileWithPackageManager() to sync Room DB with
actual installed packages on every app start
- MainActivity: launch reconciliation on start before WebView loads
- WasmWebView: set webView ref on bridge for evaluateJavascript callbacks
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Changed from custom Result sealed class to kotlin.Result which has
proper success/failure factory methods. Updated pattern matching to
use getOrElse for cleaner error handling.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Features:
- Fixed app name from "Dark Side Admin" to "SilverDROID"
- Added remote configuration loader with AppStore integration
- Support for user-specific configurations
- Bearer token authentication for secure config retrieval
- Automatic fallback to local config if remote fails
- Remote config refresh interval support
Configuration example updated with remoteConfig section.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Removed netcipher libraries causing duplicate class errors.
Both VPN and Tor managers are now stubs that log configuration
and can be extended in future releases with proper implementations.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Removed incompatible WireGuard library dependency and created
stub implementation for VPN that logs configuration. Tor integration
remains functional via Orbot. Full WireGuard support requires native
library integration in future update.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Removed custom signing config and use debug keystore for release
builds to enable installation. Disabled minification temporarily.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Added debug keystore signing for release builds to enable
installation on devices. Using Android debug keystore for now.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Added database domain to included paths before excluding pwa_cache.db
to fix FullBackupContent lint error in data extraction rules.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Added database domain to included paths before excluding pwa_cache.db
to fix FullBackupContent lint error.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Moved windowLightNavigationBar attribute to values-v27/themes.xml
since it requires API level 27 but minSdk is 26. This resolves
lint NewApi errors.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
The setAppCacheEnabled() method was deprecated in API 18 and removed
in newer Android versions. Removing it to fix compilation errors.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Created placeholder ic_launcher and ic_launcher_round icons for all
density buckets (mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi) to resolve
AAPT resource linking errors.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Uses find to remove all corrupted package.xml files in the Android
SDK platforms directory, not just android-35. This fixes issues with
android-36-ext19 and other platform versions.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
The BlurView library is hosted on JitPack, not Maven Central.
Adding the JitPack repository to resolve the missing dependency.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Removes corrupted package.xml and reinstalls android-35 platform
to fix SAXParseException during build. The Docker image has a
corrupted SDK that needs to be repaired on each build.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Adds sdkmanager license acceptance and SDK update to fix corrupted
package.xml files in the Android SDK. This resolves the SAXParseException
that was preventing tests from running.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
The previous gradlew script was incomplete and missing the CLASSPATH
configuration, causing the wrapper JAR to not be found. This commit
replaces it with the complete official Gradle wrapper scripts.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>