diff --git a/.gitignore b/.gitignore
index 6fff17c..e59e800 100644
--- a/.gitignore
+++ b/.gitignore
@@ -18,9 +18,6 @@ android/admob.properties
lib/logic/app_config.dart
# ── File types the shipped app does not contain ────────────────────────────
-# Server code, infrastructure configs, captures, archives, dumps and logs.
-# None of these extensions are tracked, so a blanket rule is safe and stays
-# safe — it covers files that do not exist yet.
*.py
*.pyc
*.json
@@ -53,6 +50,7 @@ scraped/
backup/
backups/
lib/logic/backup/
+server_files/
# ── Flutter / Dart build output ────────────────────────────────────────────
.dart_tool/
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index d7ce2b1..0a5bbaf 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -18,11 +18,6 @@
-
-
-
-
-
- if (call.method == "getLaunchableApps") {
- result.success(launchableApps())
- } else {
- result.notImplemented()
- }
- }
-
EventChannel(flutterEngine.dartExecutor.binaryMessenger, networkChannel)
.setStreamHandler(object : EventChannel.StreamHandler {
override fun onListen(arguments: Any?, events: EventChannel.EventSink?) {
@@ -129,6 +114,14 @@ class MainActivity : FlutterActivity() {
stopIntent.putExtra("COMMAND", AppConfigs.V2RAY_SERVICE_COMMANDS.STOP_SERVICE)
val stopPendingIntent = PendingIntent.getService(this, 0, stopIntent, flags)
+ // Public lock-screen preview: keep the VPN status visible but hide the
+ // session countdown/speed so usage metadata never reaches the lock screen.
+ val publicVersion = NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID)
+ .setSmallIcon(R.drawable.notification_status_icon)
+ .setContentTitle("Revolt VPN")
+ .setContentText("VPN is active")
+ .build()
+
val builder = NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID)
.setSmallIcon(R.drawable.notification_status_icon)
.setContentTitle(title)
@@ -142,6 +135,8 @@ class MainActivity : FlutterActivity() {
.setSilent(true)
.setShowWhen(false)
.setPriority(NotificationCompat.PRIORITY_LOW)
+ .setVisibility(NotificationCompat.VISIBILITY_PRIVATE)
+ .setPublicVersion(publicVersion)
if (launchIntent != null) {
builder.setContentIntent(PendingIntent.getActivity(this, 0, launchIntent, flags))
@@ -311,54 +306,6 @@ class MainActivity : FlutterActivity() {
null
}
- private fun launchableApps(): List