Rename to Smart Notification Inbox (com.roundingmobile.sni), new app icons

- Rename app from Alert Vault to Smart Notification Inbox
- Package: com.roundingmobile.alertvault → com.roundingmobile.sni
- All internal references cleaned (theme, prefs, db, exports)
- New default (blue) and premium (gold) app icons
- Updated all string resources across all locales
- Renamed docs and schema directories
This commit is contained in:
jima 2026-03-17 16:56:16 +01:00
parent ed2420c139
commit 62933bf975
146 changed files with 446 additions and 446 deletions

View file

@ -1,8 +1,8 @@
# AlertVault — Claude Code Instructions
# SNI — Claude Code Instructions
## READ FIRST
Read `AlertVault-ARCHITECTURE.md` before doing anything. It contains the full architecture, module structure, database schema, all features, and the test instrumentation protocol.
Read `SNI-ARCHITECTURE.md` before doing anything. It contains the full architecture, module structure, database schema, all features, and the test instrumentation protocol.
---
@ -65,11 +65,11 @@ Three flavors exist: `free`, `pro`, `testing`.
adb install -r app/build/outputs/apk/testing/debug/app-testing-debug.apk
# Launch testing flavor
adb shell am start -n com.roundingmobile.alertvault.testing.debug/com.roundingmobile.alertvault.presentation.MainActivity
adb shell am start -n com.roundingmobile.sni.testing.debug/com.roundingmobile.sni.presentation.MainActivity
# Grant notification listener
adb shell cmd notification allow_listener \
com.roundingmobile.alertvault.testing.debug/com.roundingmobile.alertvault.service.NotificationCaptureService
com.roundingmobile.sni.testing.debug/com.roundingmobile.sni.service.NotificationCaptureService
```
The **testing** flavor is your primary development target. It has all pro features plus the test instrumentation layer. Build and test against it. Periodically also build the free and pro flavors to verify they compile and the flavor-specific code (ads, feature gates) works.
@ -82,11 +82,11 @@ The **testing** flavor is your primary development target. It has all pro featur
```bash
# Dump all visible UI element positions → logcat
adb shell am broadcast -a com.roundingmobile.alertvault.test.DUMP_UI
adb shell am broadcast -a com.roundingmobile.sni.test.DUMP_UI
adb logcat -d -s CLAUDE_TEST:V
# Dump app state → logcat
adb shell am broadcast -a com.roundingmobile.alertvault.test.DUMP_STATE
adb shell am broadcast -a com.roundingmobile.sni.test.DUMP_STATE
adb logcat -d -s CLAUDE_TEST:V
# Stream test logs live
@ -125,36 +125,36 @@ adb shell uiautomator dump && adb pull /sdcard/window_dump.xml
```bash
# Single notification
adb shell am broadcast -a com.roundingmobile.alertvault.test.INJECT_NOTIFICATION \
adb shell am broadcast -a com.roundingmobile.sni.test.INJECT_NOTIFICATION \
--es package "com.whatsapp" --es app_name "WhatsApp" \
--es title "John" --es text "See you later" \
--es category "message" --ei priority 2
# Batch
adb shell am broadcast -a com.roundingmobile.alertvault.test.INJECT_BATCH \
adb shell am broadcast -a com.roundingmobile.sni.test.INJECT_BATCH \
--es json '[{"package":"com.whatsapp","title":"John","text":"Hi"},{"package":"com.google.android.gm","app_name":"Gmail","title":"Anna","text":"Meeting"}]'
# Remove notification
adb shell am broadcast -a com.roundingmobile.alertvault.test.REMOVE_NOTIFICATION --ei notification_id 123
adb shell am broadcast -a com.roundingmobile.sni.test.REMOVE_NOTIFICATION --ei notification_id 123
# Navigate directly
adb shell am broadcast -a com.roundingmobile.alertvault.test.NAVIGATE --es screen "settings"
adb shell am broadcast -a com.roundingmobile.sni.test.NAVIGATE --es screen "settings"
# Set preference
adb shell am broadcast -a com.roundingmobile.alertvault.test.SET_STATE --es key "retention_days" --es value "7"
adb shell am broadcast -a com.roundingmobile.sni.test.SET_STATE --es key "retention_days" --es value "7"
# Clear DB
adb shell am broadcast -a com.roundingmobile.alertvault.test.CLEAR_DB
adb shell am broadcast -a com.roundingmobile.sni.test.CLEAR_DB
# Trigger workers
adb shell am broadcast -a com.roundingmobile.alertvault.test.TRIGGER_CLEANUP
adb shell am broadcast -a com.roundingmobile.alertvault.test.TRIGGER_DIGEST
adb shell am broadcast -a com.roundingmobile.sni.test.TRIGGER_CLEANUP
adb shell am broadcast -a com.roundingmobile.sni.test.TRIGGER_DIGEST
```
### CRITICAL RULE: Always DUMP_UI before tapping
Never guess coordinates. Always:
1. `adb shell am broadcast -a com.roundingmobile.alertvault.test.DUMP_UI`
1. `adb shell am broadcast -a com.roundingmobile.sni.test.DUMP_UI`
2. `adb logcat -d -s CLAUDE_TEST:V` → parse VIEW lines
3. Calculate center of target element: `x = (left+right)/2, y = (top+bottom)/2`
4. `adb shell input tap x y`
@ -210,7 +210,7 @@ Create the project structure with:
**Verify:**
1. Build and install testing flavor
2. `adb shell am broadcast -a com.roundingmobile.alertvault.test.DUMP_UI`
2. `adb shell am broadcast -a com.roundingmobile.sni.test.DUMP_UI`
3. `adb logcat -d -s CLAUDE_TEST:V` → should see VIEW lines for bottom nav items
4. Build free flavor → verify it compiles (no-op instrumentation)
5. Build pro flavor → verify it compiles
@ -536,8 +536,8 @@ Walk through every file. Check:
### App won't install
```bash
adb shell pm list packages | grep alertvault
adb uninstall com.roundingmobile.alertvault.testing.debug
adb shell pm list packages | grep sni
adb uninstall com.roundingmobile.sni.testing.debug
adb install -r app/build/outputs/apk/testing/debug/app-testing-debug.apk
```
@ -545,12 +545,12 @@ adb install -r app/build/outputs/apk/testing/debug/app-testing-debug.apk
```bash
adb shell cmd notification list_listeners
adb shell cmd notification allow_listener \
com.roundingmobile.alertvault.testing.debug/com.roundingmobile.alertvault.service.NotificationCaptureService
com.roundingmobile.sni.testing.debug/com.roundingmobile.sni.service.NotificationCaptureService
```
### No CLAUDE_TEST output
- Verify testing flavor installed: `adb shell pm list packages | grep testing`
- App running: `adb shell pidof com.roundingmobile.alertvault.testing.debug`
- App running: `adb shell pidof com.roundingmobile.sni.testing.debug`
- Try DUMP_STATE and wait before reading logcat
### Build failures

View file

@ -18,7 +18,7 @@ if (keystorePropsFile.exists()) {
}
android {
namespace = "com.roundingmobile.alertvault"
namespace = "com.roundingmobile.sni"
compileSdk = 36
signingConfigs {
@ -31,7 +31,7 @@ android {
}
defaultConfig {
applicationId = "com.roundingmobile.alertvault"
applicationId = "com.roundingmobile.sni"
minSdk = 26
targetSdk = 35
versionCode = 3
@ -43,14 +43,14 @@ android {
productFlavors {
create("prod") {
dimension = "tier"
applicationId = "com.roundingmobile.alertvault"
applicationId = "com.roundingmobile.sni"
buildConfigField("boolean", "TEST_INSTRUMENTED", "false")
buildConfigField("boolean", "ADS_ENABLED", "true")
buildConfigField("int", "RETENTION_LIMIT_HOURS", "0")
}
create("dev") {
dimension = "tier"
applicationId = "com.roundingmobile.alertvault.dev"
applicationId = "com.roundingmobile.sni.dev"
buildConfigField("boolean", "TEST_INSTRUMENTED", "true")
buildConfigField("boolean", "ADS_ENABLED", "false")
buildConfigField("int", "RETENTION_LIMIT_HOURS", "0")
@ -99,14 +99,14 @@ tasks.whenTaskAdded {
val apkDir = layout.buildDirectory.dir("outputs/apk").get().asFile
apkDir.walkTopDown().filter { it.extension == "apk" }.forEach { apk ->
val oldName = apk.name
if (oldName.startsWith("rmt-alertvault")) return@forEach // already renamed
if (oldName.startsWith("rmt-sni")) return@forEach // already renamed
// Parse: app-<flavor>-<buildType>.apk
val parts = oldName.removeSuffix(".apk").split("-")
if (parts.size >= 3) {
val flavor = parts[1]
val version = android.defaultConfig.versionName ?: "0"
val date = LocalDate.now().toString()
val newName = "rmt-alertvault.${flavor}.v${version}.${date}.apk"
val newName = "rmt-sni.${flavor}.v${version}.${date}.apk"
val newFile = File(apk.parentFile, newName)
apk.renameTo(newFile)
println("Renamed: $oldName → $newName")

View file

@ -34,10 +34,10 @@
}
# Keep @Serializable classes
-keep,includedescriptorclasses class com.roundingmobile.alertvault.**$$serializer { *; }
-keepclassmembers class com.roundingmobile.alertvault.** {
-keep,includedescriptorclasses class com.roundingmobile.sni.**$$serializer { *; }
-keepclassmembers class com.roundingmobile.sni.** {
*** Companion;
}
-keepclasseswithmembers class com.roundingmobile.alertvault.** {
-keepclasseswithmembers class com.roundingmobile.sni.** {
kotlinx.serialization.KSerializer serializer(...);
}

View file

@ -3,19 +3,19 @@
<application>
<receiver
android:name="com.roundingmobile.alertvault.instrumentation.TestBroadcastReceiver"
android:name="com.roundingmobile.sni.instrumentation.TestBroadcastReceiver"
android:exported="true">
<intent-filter>
<action android:name="com.roundingmobile.alertvault.test.DUMP_UI" />
<action android:name="com.roundingmobile.alertvault.test.DUMP_STATE" />
<action android:name="com.roundingmobile.alertvault.test.NAVIGATE" />
<action android:name="com.roundingmobile.alertvault.test.SET_STATE" />
<action android:name="com.roundingmobile.alertvault.test.CLEAR_DB" />
<action android:name="com.roundingmobile.alertvault.test.INJECT_NOTIFICATION" />
<action android:name="com.roundingmobile.alertvault.test.INJECT_BATCH" />
<action android:name="com.roundingmobile.alertvault.test.REMOVE_NOTIFICATION" />
<action android:name="com.roundingmobile.alertvault.test.TRIGGER_CLEANUP" />
<action android:name="com.roundingmobile.alertvault.test.TRIGGER_DIGEST" />
<action android:name="com.roundingmobile.sni.test.DUMP_UI" />
<action android:name="com.roundingmobile.sni.test.DUMP_STATE" />
<action android:name="com.roundingmobile.sni.test.NAVIGATE" />
<action android:name="com.roundingmobile.sni.test.SET_STATE" />
<action android:name="com.roundingmobile.sni.test.CLEAR_DB" />
<action android:name="com.roundingmobile.sni.test.INJECT_NOTIFICATION" />
<action android:name="com.roundingmobile.sni.test.INJECT_BATCH" />
<action android:name="com.roundingmobile.sni.test.REMOVE_NOTIFICATION" />
<action android:name="com.roundingmobile.sni.test.TRIGGER_CLEANUP" />
<action android:name="com.roundingmobile.sni.test.TRIGGER_DIGEST" />
</intent-filter>
</receiver>
</application>

View file

@ -1,7 +1,7 @@
package com.roundingmobile.alertvault.di
package com.roundingmobile.sni.di
import com.roundingmobile.alertvault.instrumentation.LiveTestInstrumentation
import com.roundingmobile.alertvault.instrumentation.TestInstrumentation
import com.roundingmobile.sni.instrumentation.LiveTestInstrumentation
import com.roundingmobile.sni.instrumentation.TestInstrumentation
import dagger.Binds
import dagger.Module
import dagger.hilt.InstallIn

View file

@ -1,8 +1,8 @@
package com.roundingmobile.alertvault.instrumentation
package com.roundingmobile.sni.instrumentation
import android.util.Log
import androidx.compose.ui.geometry.Rect
import com.roundingmobile.alertvault.instrumentation.TestInstrumentation
import com.roundingmobile.sni.instrumentation.TestInstrumentation
import java.util.concurrent.ConcurrentHashMap
import javax.inject.Inject
import javax.inject.Singleton

View file

@ -1,11 +1,11 @@
package com.roundingmobile.alertvault.instrumentation
package com.roundingmobile.sni.instrumentation
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.util.Log
import com.roundingmobile.alertvault.domain.model.CapturedNotification
import com.roundingmobile.alertvault.domain.repository.NotificationRepository
import com.roundingmobile.sni.domain.model.CapturedNotification
import com.roundingmobile.sni.domain.repository.NotificationRepository
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
@ -165,7 +165,7 @@ class TestBroadcastReceiver : BroadcastReceiver() {
companion object {
private const val TAG = "CLAUDE_TEST"
private const val PREFIX = "com.roundingmobile.alertvault.test."
private const val PREFIX = "com.roundingmobile.sni.test."
const val ACTION_DUMP_UI = "${PREFIX}DUMP_UI"
const val ACTION_DUMP_STATE = "${PREFIX}DUMP_STATE"
const val ACTION_NAVIGATE = "${PREFIX}NAVIGATE"

View file

@ -18,7 +18,7 @@
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.AlertVault"
android:theme="@style/Theme.SNI"
tools:targetApi="35">
<service
@ -33,7 +33,7 @@
<activity
android:name=".presentation.MainActivity"
android:exported="false"
android:theme="@style/Theme.AlertVault" />
android:theme="@style/Theme.SNI" />
<!-- Blue Steel icon (default) -->
<activity-alias

View file

@ -1,31 +0,0 @@
package com.roundingmobile.alertvault.data.local.db
import androidx.room.Database
import androidx.room.RoomDatabase
import com.roundingmobile.alertvault.data.local.db.dao.AppFilterDao
import com.roundingmobile.alertvault.data.local.db.dao.FilterRuleDao
import com.roundingmobile.alertvault.data.local.db.dao.HiddenAppDao
import com.roundingmobile.alertvault.data.local.db.dao.NotificationDao
import com.roundingmobile.alertvault.data.local.db.entity.AppFilterEntity
import com.roundingmobile.alertvault.data.local.db.entity.FilterRuleEntity
import com.roundingmobile.alertvault.data.local.db.entity.HiddenAppEntity
import com.roundingmobile.alertvault.data.local.db.entity.NotificationEntity
import com.roundingmobile.alertvault.data.local.db.entity.NotificationFtsEntity
@Database(
entities = [
NotificationEntity::class,
NotificationFtsEntity::class,
HiddenAppEntity::class,
AppFilterEntity::class,
FilterRuleEntity::class
],
version = 4,
exportSchema = true
)
abstract class AppDatabase : RoomDatabase() {
abstract fun notificationDao(): NotificationDao
abstract fun hiddenAppDao(): HiddenAppDao
abstract fun appFilterDao(): AppFilterDao
abstract fun filterRuleDao(): FilterRuleDao
}

View file

@ -1 +0,0 @@
package com.roundingmobile.alertvault.presentation.theme

View file

@ -1,4 +1,4 @@
package com.roundingmobile.alertvault
package com.roundingmobile.sni
import android.app.Application
import dagger.hilt.android.HiltAndroidApp

View file

@ -1,14 +1,14 @@
package com.roundingmobile.alertvault.data.di
package com.roundingmobile.sni.data.di
import android.content.Context
import androidx.room.Room
import androidx.room.migration.Migration
import androidx.sqlite.db.SupportSQLiteDatabase
import com.roundingmobile.alertvault.data.local.db.AppDatabase
import com.roundingmobile.alertvault.data.local.db.dao.AppFilterDao
import com.roundingmobile.alertvault.data.local.db.dao.FilterRuleDao
import com.roundingmobile.alertvault.data.local.db.dao.HiddenAppDao
import com.roundingmobile.alertvault.data.local.db.dao.NotificationDao
import com.roundingmobile.sni.data.local.db.AppDatabase
import com.roundingmobile.sni.data.local.db.dao.AppFilterDao
import com.roundingmobile.sni.data.local.db.dao.FilterRuleDao
import com.roundingmobile.sni.data.local.db.dao.HiddenAppDao
import com.roundingmobile.sni.data.local.db.dao.NotificationDao
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
@ -70,7 +70,7 @@ object DatabaseModule {
return Room.databaseBuilder(
context,
AppDatabase::class.java,
"alertvault.db"
"sni.db"
).addMigrations(MIGRATION_1_2, MIGRATION_2_3, MIGRATION_3_4)
.fallbackToDestructiveMigration()
.build()

View file

@ -1,4 +1,4 @@
package com.roundingmobile.alertvault.data.di
package com.roundingmobile.sni.data.di
import android.content.Context
import android.content.SharedPreferences
@ -16,6 +16,6 @@ object PreferencesModule {
@Provides
@Singleton
fun provideSharedPreferences(@ApplicationContext context: Context): SharedPreferences {
return context.getSharedPreferences("alertvault_prefs", Context.MODE_PRIVATE)
return context.getSharedPreferences("sni_prefs", Context.MODE_PRIVATE)
}
}

View file

@ -1,11 +1,11 @@
package com.roundingmobile.alertvault.data.di
package com.roundingmobile.sni.data.di
import com.roundingmobile.alertvault.data.provider.ProStatusProviderImpl
import com.roundingmobile.alertvault.data.repository.FilterRuleRepositoryImpl
import com.roundingmobile.alertvault.data.repository.NotificationRepositoryImpl
import com.roundingmobile.alertvault.domain.provider.ProStatusProvider
import com.roundingmobile.alertvault.domain.repository.FilterRuleRepository
import com.roundingmobile.alertvault.domain.repository.NotificationRepository
import com.roundingmobile.sni.data.provider.ProStatusProviderImpl
import com.roundingmobile.sni.data.repository.FilterRuleRepositoryImpl
import com.roundingmobile.sni.data.repository.NotificationRepositoryImpl
import com.roundingmobile.sni.domain.provider.ProStatusProvider
import com.roundingmobile.sni.domain.repository.FilterRuleRepository
import com.roundingmobile.sni.domain.repository.NotificationRepository
import dagger.Binds
import dagger.Module
import dagger.hilt.InstallIn

View file

@ -1,4 +1,4 @@
package com.roundingmobile.alertvault.data.export
package com.roundingmobile.sni.data.export
import android.content.ContentValues
import android.content.Context

View file

@ -0,0 +1,31 @@
package com.roundingmobile.sni.data.local.db
import androidx.room.Database
import androidx.room.RoomDatabase
import com.roundingmobile.sni.data.local.db.dao.AppFilterDao
import com.roundingmobile.sni.data.local.db.dao.FilterRuleDao
import com.roundingmobile.sni.data.local.db.dao.HiddenAppDao
import com.roundingmobile.sni.data.local.db.dao.NotificationDao
import com.roundingmobile.sni.data.local.db.entity.AppFilterEntity
import com.roundingmobile.sni.data.local.db.entity.FilterRuleEntity
import com.roundingmobile.sni.data.local.db.entity.HiddenAppEntity
import com.roundingmobile.sni.data.local.db.entity.NotificationEntity
import com.roundingmobile.sni.data.local.db.entity.NotificationFtsEntity
@Database(
entities = [
NotificationEntity::class,
NotificationFtsEntity::class,
HiddenAppEntity::class,
AppFilterEntity::class,
FilterRuleEntity::class
],
version = 4,
exportSchema = true
)
abstract class AppDatabase : RoomDatabase() {
abstract fun notificationDao(): NotificationDao
abstract fun hiddenAppDao(): HiddenAppDao
abstract fun appFilterDao(): AppFilterDao
abstract fun filterRuleDao(): FilterRuleDao
}

View file

@ -1,10 +1,10 @@
package com.roundingmobile.alertvault.data.local.db.dao
package com.roundingmobile.sni.data.local.db.dao
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
import com.roundingmobile.alertvault.data.local.db.entity.AppFilterEntity
import com.roundingmobile.sni.data.local.db.entity.AppFilterEntity
import kotlinx.coroutines.flow.Flow
@Dao

View file

@ -1,11 +1,11 @@
package com.roundingmobile.alertvault.data.local.db.dao
package com.roundingmobile.sni.data.local.db.dao
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
import androidx.room.Update
import com.roundingmobile.alertvault.data.local.db.entity.FilterRuleEntity
import com.roundingmobile.sni.data.local.db.entity.FilterRuleEntity
import kotlinx.coroutines.flow.Flow
@Dao

View file

@ -1,10 +1,10 @@
package com.roundingmobile.alertvault.data.local.db.dao
package com.roundingmobile.sni.data.local.db.dao
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
import com.roundingmobile.alertvault.data.local.db.entity.HiddenAppEntity
import com.roundingmobile.sni.data.local.db.entity.HiddenAppEntity
import kotlinx.coroutines.flow.Flow
@Dao

View file

@ -1,11 +1,11 @@
package com.roundingmobile.alertvault.data.local.db.dao
package com.roundingmobile.sni.data.local.db.dao
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
import androidx.room.Update
import com.roundingmobile.alertvault.data.local.db.entity.NotificationEntity
import com.roundingmobile.sni.data.local.db.entity.NotificationEntity
import kotlinx.coroutines.flow.Flow
@Dao

View file

@ -1,4 +1,4 @@
package com.roundingmobile.alertvault.data.local.db.entity
package com.roundingmobile.sni.data.local.db.entity
import androidx.room.ColumnInfo
import androidx.room.Entity

View file

@ -1,4 +1,4 @@
package com.roundingmobile.alertvault.data.local.db.entity
package com.roundingmobile.sni.data.local.db.entity
import androidx.room.ColumnInfo
import androidx.room.Entity

View file

@ -1,4 +1,4 @@
package com.roundingmobile.alertvault.data.local.db.entity
package com.roundingmobile.sni.data.local.db.entity
import androidx.room.ColumnInfo
import androidx.room.Entity

View file

@ -1,4 +1,4 @@
package com.roundingmobile.alertvault.data.local.db.entity
package com.roundingmobile.sni.data.local.db.entity
import androidx.room.ColumnInfo
import androidx.room.Entity

View file

@ -1,4 +1,4 @@
package com.roundingmobile.alertvault.data.local.db.entity
package com.roundingmobile.sni.data.local.db.entity
import androidx.room.Entity
import androidx.room.Fts4

View file

@ -1,10 +1,10 @@
package com.roundingmobile.alertvault.data.mapper
package com.roundingmobile.sni.data.mapper
import com.roundingmobile.alertvault.data.local.db.entity.FilterRuleEntity
import com.roundingmobile.alertvault.domain.model.ConditionOperator
import com.roundingmobile.alertvault.domain.model.FilterAction
import com.roundingmobile.alertvault.domain.model.FilterCondition
import com.roundingmobile.alertvault.domain.model.FilterRule
import com.roundingmobile.sni.data.local.db.entity.FilterRuleEntity
import com.roundingmobile.sni.domain.model.ConditionOperator
import com.roundingmobile.sni.domain.model.FilterAction
import com.roundingmobile.sni.domain.model.FilterCondition
import com.roundingmobile.sni.domain.model.FilterRule
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json

View file

@ -1,7 +1,7 @@
package com.roundingmobile.alertvault.data.mapper
package com.roundingmobile.sni.data.mapper
import com.roundingmobile.alertvault.data.local.db.entity.NotificationEntity
import com.roundingmobile.alertvault.domain.model.CapturedNotification
import com.roundingmobile.sni.data.local.db.entity.NotificationEntity
import com.roundingmobile.sni.domain.model.CapturedNotification
fun NotificationEntity.toDomain(): CapturedNotification = CapturedNotification(
id = id,

View file

@ -1,7 +1,7 @@
package com.roundingmobile.alertvault.data.provider
package com.roundingmobile.sni.data.provider
import android.content.SharedPreferences
import com.roundingmobile.alertvault.domain.provider.ProStatusProvider
import com.roundingmobile.sni.domain.provider.ProStatusProvider
import kotlinx.coroutines.channels.awaitClose
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.callbackFlow

View file

@ -1,14 +1,14 @@
package com.roundingmobile.alertvault.data.repository
package com.roundingmobile.sni.data.repository
import com.roundingmobile.alertvault.data.local.db.dao.FilterRuleDao
import com.roundingmobile.alertvault.data.mapper.toDomain
import com.roundingmobile.alertvault.data.mapper.toEntity
import com.roundingmobile.alertvault.domain.model.FilterAction
import com.roundingmobile.alertvault.domain.model.FilterCondition
import com.roundingmobile.alertvault.domain.model.FilterRule
import com.roundingmobile.alertvault.domain.model.MatchField
import com.roundingmobile.alertvault.domain.model.MatchType
import com.roundingmobile.alertvault.domain.repository.FilterRuleRepository
import com.roundingmobile.sni.data.local.db.dao.FilterRuleDao
import com.roundingmobile.sni.data.mapper.toDomain
import com.roundingmobile.sni.data.mapper.toEntity
import com.roundingmobile.sni.domain.model.FilterAction
import com.roundingmobile.sni.domain.model.FilterCondition
import com.roundingmobile.sni.domain.model.FilterRule
import com.roundingmobile.sni.domain.model.MatchField
import com.roundingmobile.sni.domain.model.MatchType
import com.roundingmobile.sni.domain.repository.FilterRuleRepository
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map
import javax.inject.Inject

View file

@ -1,16 +1,16 @@
package com.roundingmobile.alertvault.data.repository
package com.roundingmobile.sni.data.repository
import com.roundingmobile.alertvault.data.local.db.dao.AppFilterDao
import com.roundingmobile.alertvault.data.local.db.dao.HiddenAppDao
import com.roundingmobile.alertvault.data.local.db.dao.NotificationDao
import com.roundingmobile.alertvault.data.local.db.entity.AppFilterEntity
import com.roundingmobile.alertvault.data.local.db.entity.HiddenAppEntity
import com.roundingmobile.alertvault.data.mapper.toDomain
import com.roundingmobile.alertvault.data.mapper.toEntity
import com.roundingmobile.alertvault.domain.model.AppInfo
import com.roundingmobile.alertvault.domain.model.CapturedNotification
import com.roundingmobile.alertvault.domain.model.SortOrder
import com.roundingmobile.alertvault.domain.repository.NotificationRepository
import com.roundingmobile.sni.data.local.db.dao.AppFilterDao
import com.roundingmobile.sni.data.local.db.dao.HiddenAppDao
import com.roundingmobile.sni.data.local.db.dao.NotificationDao
import com.roundingmobile.sni.data.local.db.entity.AppFilterEntity
import com.roundingmobile.sni.data.local.db.entity.HiddenAppEntity
import com.roundingmobile.sni.data.mapper.toDomain
import com.roundingmobile.sni.data.mapper.toEntity
import com.roundingmobile.sni.domain.model.AppInfo
import com.roundingmobile.sni.domain.model.CapturedNotification
import com.roundingmobile.sni.domain.model.SortOrder
import com.roundingmobile.sni.domain.repository.NotificationRepository
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map
import javax.inject.Inject

View file

@ -1,4 +1,4 @@
package com.roundingmobile.alertvault.domain.model
package com.roundingmobile.sni.domain.model
data class AppInfo(
val packageName: String,

View file

@ -1,4 +1,4 @@
package com.roundingmobile.alertvault.domain.model
package com.roundingmobile.sni.domain.model
data class CapturedNotification(
val id: Long,

View file

@ -1,4 +1,4 @@
package com.roundingmobile.alertvault.domain.model
package com.roundingmobile.sni.domain.model
enum class ExportFormat {
CSV,

View file

@ -1,4 +1,4 @@
package com.roundingmobile.alertvault.domain.model
package com.roundingmobile.sni.domain.model
import kotlinx.serialization.Serializable

View file

@ -1,4 +1,4 @@
package com.roundingmobile.alertvault.domain.model
package com.roundingmobile.sni.domain.model
enum class SortOrder {
NEWEST_FIRST,

View file

@ -1,4 +1,4 @@
package com.roundingmobile.alertvault.domain.model
package com.roundingmobile.sni.domain.model
enum class SwipeAction {
DELETE,

View file

@ -1,4 +1,4 @@
package com.roundingmobile.alertvault.domain.provider
package com.roundingmobile.sni.domain.provider
import kotlinx.coroutines.flow.Flow

View file

@ -1,6 +1,6 @@
package com.roundingmobile.alertvault.domain.repository
package com.roundingmobile.sni.domain.repository
import com.roundingmobile.alertvault.domain.model.FilterRule
import com.roundingmobile.sni.domain.model.FilterRule
import kotlinx.coroutines.flow.Flow
interface FilterRuleRepository {

View file

@ -1,8 +1,8 @@
package com.roundingmobile.alertvault.domain.repository
package com.roundingmobile.sni.domain.repository
import com.roundingmobile.alertvault.domain.model.AppInfo
import com.roundingmobile.alertvault.domain.model.CapturedNotification
import com.roundingmobile.alertvault.domain.model.SortOrder
import com.roundingmobile.sni.domain.model.AppInfo
import com.roundingmobile.sni.domain.model.CapturedNotification
import com.roundingmobile.sni.domain.model.SortOrder
import kotlinx.coroutines.flow.Flow
interface NotificationRepository {

View file

@ -1,7 +1,7 @@
package com.roundingmobile.alertvault.domain.usecase
package com.roundingmobile.sni.domain.usecase
import com.roundingmobile.alertvault.domain.model.AppInfo
import com.roundingmobile.alertvault.domain.repository.NotificationRepository
import com.roundingmobile.sni.domain.model.AppInfo
import com.roundingmobile.sni.domain.repository.NotificationRepository
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.combine
import javax.inject.Inject

View file

@ -1,8 +1,8 @@
package com.roundingmobile.alertvault.domain.usecase
package com.roundingmobile.sni.domain.usecase
import com.roundingmobile.alertvault.domain.model.CapturedNotification
import com.roundingmobile.alertvault.domain.model.ExportFormat
import com.roundingmobile.alertvault.domain.repository.NotificationRepository
import com.roundingmobile.sni.domain.model.CapturedNotification
import com.roundingmobile.sni.domain.model.ExportFormat
import com.roundingmobile.sni.domain.repository.NotificationRepository
import kotlinx.coroutines.flow.first
import javax.inject.Inject
@ -11,7 +11,7 @@ class ExportNotificationsUseCase @Inject constructor(
) {
suspend operator fun invoke(format: ExportFormat): String {
val notifications = repository.getTimeline(
com.roundingmobile.alertvault.domain.model.SortOrder.NEWEST_FIRST
com.roundingmobile.sni.domain.model.SortOrder.NEWEST_FIRST
).first()
return when (format) {
ExportFormat.CSV -> toCsv(notifications)

View file

@ -1,7 +1,7 @@
package com.roundingmobile.alertvault.domain.usecase
package com.roundingmobile.sni.domain.usecase
import com.roundingmobile.alertvault.domain.model.AppInfo
import com.roundingmobile.alertvault.domain.repository.NotificationRepository
import com.roundingmobile.sni.domain.model.AppInfo
import com.roundingmobile.sni.domain.repository.NotificationRepository
import kotlinx.coroutines.flow.Flow
import javax.inject.Inject

View file

@ -1,11 +1,11 @@
package com.roundingmobile.alertvault.domain.usecase
package com.roundingmobile.sni.domain.usecase
import com.roundingmobile.alertvault.domain.model.ConditionOperator
import com.roundingmobile.alertvault.domain.model.FilterAction
import com.roundingmobile.alertvault.domain.model.FilterCondition
import com.roundingmobile.alertvault.domain.model.FilterRule
import com.roundingmobile.alertvault.domain.model.MatchField
import com.roundingmobile.alertvault.domain.model.MatchType
import com.roundingmobile.sni.domain.model.ConditionOperator
import com.roundingmobile.sni.domain.model.FilterAction
import com.roundingmobile.sni.domain.model.FilterCondition
import com.roundingmobile.sni.domain.model.FilterRule
import com.roundingmobile.sni.domain.model.MatchField
import com.roundingmobile.sni.domain.model.MatchType
import javax.inject.Inject
import javax.inject.Singleton

View file

@ -1,7 +1,7 @@
package com.roundingmobile.alertvault.domain.usecase
package com.roundingmobile.sni.domain.usecase
import com.roundingmobile.alertvault.domain.model.CapturedNotification
import com.roundingmobile.alertvault.domain.repository.NotificationRepository
import com.roundingmobile.sni.domain.model.CapturedNotification
import com.roundingmobile.sni.domain.repository.NotificationRepository
import kotlinx.coroutines.flow.Flow
import javax.inject.Inject

View file

@ -1,8 +1,8 @@
package com.roundingmobile.alertvault.domain.usecase
package com.roundingmobile.sni.domain.usecase
import com.roundingmobile.alertvault.domain.model.CapturedNotification
import com.roundingmobile.alertvault.domain.model.SortOrder
import com.roundingmobile.alertvault.domain.repository.NotificationRepository
import com.roundingmobile.sni.domain.model.CapturedNotification
import com.roundingmobile.sni.domain.model.SortOrder
import com.roundingmobile.sni.domain.repository.NotificationRepository
import kotlinx.coroutines.flow.Flow
import javax.inject.Inject

View file

@ -1,7 +1,7 @@
package com.roundingmobile.alertvault.domain.usecase
package com.roundingmobile.sni.domain.usecase
import com.roundingmobile.alertvault.domain.model.CapturedNotification
import com.roundingmobile.alertvault.domain.repository.NotificationRepository
import com.roundingmobile.sni.domain.model.CapturedNotification
import com.roundingmobile.sni.domain.repository.NotificationRepository
import kotlinx.coroutines.flow.Flow
import javax.inject.Inject

View file

@ -1,4 +1,4 @@
package com.roundingmobile.alertvault.instrumentation
package com.roundingmobile.sni.instrumentation
import androidx.compose.ui.Modifier
import androidx.compose.ui.geometry.Rect

View file

@ -1,4 +1,4 @@
package com.roundingmobile.alertvault.instrumentation
package com.roundingmobile.sni.instrumentation
import androidx.compose.ui.Modifier
import androidx.compose.ui.geometry.Rect

View file

@ -1,4 +1,4 @@
package com.roundingmobile.alertvault.presentation
package com.roundingmobile.sni.presentation
import android.content.Intent
import android.content.SharedPreferences
@ -51,18 +51,18 @@ import androidx.navigation.NavDestination.Companion.hasRoute
import androidx.navigation.NavGraph.Companion.findStartDestination
import androidx.navigation.compose.currentBackStackEntryAsState
import androidx.navigation.compose.rememberNavController
import com.roundingmobile.alertvault.R
import com.roundingmobile.alertvault.instrumentation.TestInstrumentation
import com.roundingmobile.alertvault.instrumentation.testTrack
import com.roundingmobile.alertvault.presentation.navigation.AppNavGraph
import com.roundingmobile.alertvault.presentation.navigation.Route
import com.roundingmobile.alertvault.presentation.onboarding.PermissionScreen
import com.roundingmobile.alertvault.presentation.theme.AppThemeType
import com.roundingmobile.alertvault.presentation.theme.AlertVaultTheme
import com.roundingmobile.alertvault.presentation.common.LocalDateFormatter
import com.roundingmobile.alertvault.security.AppLockManager
import com.roundingmobile.alertvault.util.AppDateFormatter
import com.roundingmobile.alertvault.util.AppIconManager
import com.roundingmobile.sni.R
import com.roundingmobile.sni.instrumentation.TestInstrumentation
import com.roundingmobile.sni.instrumentation.testTrack
import com.roundingmobile.sni.presentation.navigation.AppNavGraph
import com.roundingmobile.sni.presentation.navigation.Route
import com.roundingmobile.sni.presentation.onboarding.PermissionScreen
import com.roundingmobile.sni.presentation.theme.AppThemeType
import com.roundingmobile.sni.presentation.theme.SNITheme
import com.roundingmobile.sni.presentation.common.LocalDateFormatter
import com.roundingmobile.sni.security.AppLockManager
import com.roundingmobile.sni.util.AppDateFormatter
import com.roundingmobile.sni.util.AppIconManager
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
@ -103,7 +103,7 @@ class MainActivity : FragmentActivity() {
if (lockManager.shouldLock()) isLocked = true
setContent {
AlertVaultTheme(themeType = currentTheme) {
SNITheme(themeType = currentTheme) {
androidx.compose.runtime.CompositionLocalProvider(LocalDateFormatter provides dateFormatter) {
Surface(
modifier = Modifier.fillMaxSize(),

View file

@ -1,4 +1,4 @@
package com.roundingmobile.alertvault.presentation.common
package com.roundingmobile.sni.presentation.common
import android.graphics.Bitmap
import android.graphics.Canvas

View file

@ -1,4 +1,4 @@
package com.roundingmobile.alertvault.presentation.common
package com.roundingmobile.sni.presentation.common
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
@ -16,7 +16,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import com.roundingmobile.alertvault.R
import com.roundingmobile.sni.R
@Composable
fun EmptyState(

View file

@ -1,6 +1,6 @@
package com.roundingmobile.alertvault.presentation.common
package com.roundingmobile.sni.presentation.common
import androidx.compose.runtime.compositionLocalOf
import com.roundingmobile.alertvault.util.AppDateFormatter
import com.roundingmobile.sni.util.AppDateFormatter
val LocalDateFormatter = compositionLocalOf<AppDateFormatter?> { null }

View file

@ -1,12 +1,12 @@
package com.roundingmobile.alertvault.presentation.common
package com.roundingmobile.sni.presentation.common
import android.content.ClipData
import android.content.ClipboardManager
import android.content.Context
import android.content.Intent
import android.widget.Toast
import com.roundingmobile.alertvault.R
import com.roundingmobile.alertvault.domain.model.CapturedNotification
import com.roundingmobile.sni.R
import com.roundingmobile.sni.domain.model.CapturedNotification
/**
* Shared utility functions for notification actions (copy, share, open app).

View file

@ -1,4 +1,4 @@
package com.roundingmobile.alertvault.presentation.common
package com.roundingmobile.sni.presentation.common
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
@ -29,8 +29,8 @@ import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import com.roundingmobile.alertvault.R
import com.roundingmobile.alertvault.domain.model.CapturedNotification
import com.roundingmobile.sni.R
import com.roundingmobile.sni.domain.model.CapturedNotification
import java.text.SimpleDateFormat
import java.util.Date
import java.util.Locale

View file

@ -1,4 +1,4 @@
package com.roundingmobile.alertvault.presentation.common
package com.roundingmobile.sni.presentation.common
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
@ -15,7 +15,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import com.roundingmobile.alertvault.R
import com.roundingmobile.sni.R
@Composable
fun PremiumGateDialog(

View file

@ -1,4 +1,4 @@
package com.roundingmobile.alertvault.presentation.common
package com.roundingmobile.sni.presentation.common
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
@ -11,7 +11,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import com.roundingmobile.alertvault.R
import com.roundingmobile.sni.R
@Composable
fun SeenDivider(modifier: Modifier = Modifier) {

View file

@ -1,4 +1,4 @@
package com.roundingmobile.alertvault.presentation.common
package com.roundingmobile.sni.presentation.common
import androidx.compose.animation.core.animateFloatAsState
import androidx.compose.animation.core.tween
@ -48,9 +48,9 @@ import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import com.roundingmobile.alertvault.R
import com.roundingmobile.alertvault.domain.model.CapturedNotification
import com.roundingmobile.alertvault.domain.model.SwipeAction
import com.roundingmobile.sni.R
import com.roundingmobile.sni.domain.model.CapturedNotification
import com.roundingmobile.sni.domain.model.SwipeAction
@OptIn(ExperimentalMaterial3Api::class, ExperimentalFoundationApi::class)
@Composable

View file

@ -1,4 +1,4 @@
package com.roundingmobile.alertvault.presentation.common
package com.roundingmobile.sni.presentation.common
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.MaterialTheme

View file

@ -1,4 +1,4 @@
package com.roundingmobile.alertvault.presentation.detail
package com.roundingmobile.sni.presentation.detail
import android.content.Context
import androidx.compose.animation.AnimatedVisibility
@ -53,13 +53,13 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.roundingmobile.alertvault.R
import com.roundingmobile.alertvault.domain.model.CapturedNotification
import com.roundingmobile.alertvault.instrumentation.TestInstrumentation
import com.roundingmobile.alertvault.instrumentation.testTrack
import com.roundingmobile.alertvault.presentation.common.AppIcon
import com.roundingmobile.alertvault.presentation.common.LocalDateFormatter
import com.roundingmobile.alertvault.presentation.common.NotificationActions
import com.roundingmobile.sni.R
import com.roundingmobile.sni.domain.model.CapturedNotification
import com.roundingmobile.sni.instrumentation.TestInstrumentation
import com.roundingmobile.sni.instrumentation.testTrack
import com.roundingmobile.sni.presentation.common.AppIcon
import com.roundingmobile.sni.presentation.common.LocalDateFormatter
import com.roundingmobile.sni.presentation.common.NotificationActions
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.JsonObject
import kotlinx.serialization.json.jsonPrimitive

View file

@ -1,14 +1,14 @@
package com.roundingmobile.alertvault.presentation.detail
package com.roundingmobile.sni.presentation.detail
import androidx.lifecycle.SavedStateHandle
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import androidx.navigation.toRoute
import com.roundingmobile.alertvault.domain.model.CapturedNotification
import com.roundingmobile.alertvault.domain.repository.NotificationRepository
import com.roundingmobile.alertvault.domain.usecase.GetNotificationDetailUseCase
import com.roundingmobile.alertvault.presentation.navigation.Route
import com.roundingmobile.alertvault.service.NotificationCaptureService
import com.roundingmobile.sni.domain.model.CapturedNotification
import com.roundingmobile.sni.domain.repository.NotificationRepository
import com.roundingmobile.sni.domain.usecase.GetNotificationDetailUseCase
import com.roundingmobile.sni.presentation.navigation.Route
import com.roundingmobile.sni.service.NotificationCaptureService
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.SharingStarted

View file

@ -1,4 +1,4 @@
package com.roundingmobile.alertvault.presentation.export
package com.roundingmobile.sni.presentation.export
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
@ -26,10 +26,10 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.roundingmobile.alertvault.R
import com.roundingmobile.alertvault.domain.model.ExportFormat
import com.roundingmobile.alertvault.instrumentation.TestInstrumentation
import com.roundingmobile.alertvault.instrumentation.testTrack
import com.roundingmobile.sni.R
import com.roundingmobile.sni.domain.model.ExportFormat
import com.roundingmobile.sni.instrumentation.TestInstrumentation
import com.roundingmobile.sni.instrumentation.testTrack
@OptIn(ExperimentalMaterial3Api::class)
@Composable

View file

@ -1,10 +1,10 @@
package com.roundingmobile.alertvault.presentation.export
package com.roundingmobile.sni.presentation.export
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.roundingmobile.alertvault.data.export.FileExporter
import com.roundingmobile.alertvault.domain.model.ExportFormat
import com.roundingmobile.alertvault.domain.usecase.ExportNotificationsUseCase
import com.roundingmobile.sni.data.export.FileExporter
import com.roundingmobile.sni.domain.model.ExportFormat
import com.roundingmobile.sni.domain.usecase.ExportNotificationsUseCase
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
@ -37,7 +37,7 @@ class ExportViewModel @Inject constructor(
ExportFormat.JSON -> "application/json"
ExportFormat.TXT, ExportFormat.PDF -> "text/plain"
}
val fileName = "alertvault_export_${System.currentTimeMillis()}.$extension"
val fileName = "sni_export_${System.currentTimeMillis()}.$extension"
val success = fileExporter.saveToDownloads(fileName, mimeType, content)
if (success) {

View file

@ -1,4 +1,4 @@
package com.roundingmobile.alertvault.presentation.lock
package com.roundingmobile.sni.presentation.lock
import androidx.compose.animation.core.Animatable
import androidx.compose.animation.core.spring
@ -39,7 +39,7 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.roundingmobile.alertvault.R
import com.roundingmobile.sni.R
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch

View file

@ -1,4 +1,4 @@
package com.roundingmobile.alertvault.presentation.navigation
package com.roundingmobile.sni.presentation.navigation
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
@ -12,13 +12,13 @@ import androidx.navigation.NavHostController
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.toRoute
import com.roundingmobile.alertvault.instrumentation.TestInstrumentation
import com.roundingmobile.alertvault.presentation.detail.DetailScreen
import com.roundingmobile.alertvault.presentation.export.ExportScreen
import com.roundingmobile.alertvault.presentation.settings.FilterRulesScreen
import com.roundingmobile.alertvault.presentation.settings.SettingsScreen
import com.roundingmobile.alertvault.presentation.stats.StatsScreen
import com.roundingmobile.alertvault.presentation.timeline.TimelineScreen
import com.roundingmobile.sni.instrumentation.TestInstrumentation
import com.roundingmobile.sni.presentation.detail.DetailScreen
import com.roundingmobile.sni.presentation.export.ExportScreen
import com.roundingmobile.sni.presentation.settings.FilterRulesScreen
import com.roundingmobile.sni.presentation.settings.SettingsScreen
import com.roundingmobile.sni.presentation.stats.StatsScreen
import com.roundingmobile.sni.presentation.timeline.TimelineScreen
@Composable
fun AppNavGraph(

View file

@ -1,4 +1,4 @@
package com.roundingmobile.alertvault.presentation.navigation
package com.roundingmobile.sni.presentation.navigation
import kotlinx.serialization.Serializable

View file

@ -1,4 +1,4 @@
package com.roundingmobile.alertvault.presentation.onboarding
package com.roundingmobile.sni.presentation.onboarding
import android.content.ComponentName
import android.content.Context
@ -41,8 +41,8 @@ import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleEventObserver
import com.roundingmobile.alertvault.R
import com.roundingmobile.alertvault.service.NotificationCaptureService
import com.roundingmobile.sni.R
import com.roundingmobile.sni.service.NotificationCaptureService
@Composable
fun OnboardingScreen(

View file

@ -1,4 +1,4 @@
package com.roundingmobile.alertvault.presentation.onboarding
package com.roundingmobile.sni.presentation.onboarding
import android.content.Intent
import android.provider.Settings
@ -24,7 +24,7 @@ import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import com.roundingmobile.alertvault.R
import com.roundingmobile.sni.R
@Composable
fun PermissionScreen(modifier: Modifier = Modifier) {

View file

@ -1,4 +1,4 @@
package com.roundingmobile.alertvault.presentation.settings
package com.roundingmobile.sni.presentation.settings
import android.content.pm.ApplicationInfo
import android.content.pm.PackageManager
@ -39,9 +39,9 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import com.roundingmobile.alertvault.R
import com.roundingmobile.alertvault.domain.model.AppInfo
import com.roundingmobile.alertvault.presentation.common.AppIcon
import com.roundingmobile.sni.R
import com.roundingmobile.sni.domain.model.AppInfo
import com.roundingmobile.sni.presentation.common.AppIcon
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext

View file

@ -1,4 +1,4 @@
package com.roundingmobile.alertvault.presentation.settings
package com.roundingmobile.sni.presentation.settings
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.foundation.layout.Arrangement
@ -47,15 +47,15 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import com.roundingmobile.alertvault.R
import com.roundingmobile.alertvault.domain.model.AppInfo
import com.roundingmobile.alertvault.domain.model.ConditionOperator
import com.roundingmobile.alertvault.domain.model.FilterAction
import com.roundingmobile.alertvault.domain.model.FilterCondition
import com.roundingmobile.alertvault.domain.model.FilterRule
import com.roundingmobile.alertvault.domain.model.MatchField
import com.roundingmobile.alertvault.domain.model.MatchType
import com.roundingmobile.alertvault.presentation.common.PremiumGateDialog
import com.roundingmobile.sni.R
import com.roundingmobile.sni.domain.model.AppInfo
import com.roundingmobile.sni.domain.model.ConditionOperator
import com.roundingmobile.sni.domain.model.FilterAction
import com.roundingmobile.sni.domain.model.FilterCondition
import com.roundingmobile.sni.domain.model.FilterRule
import com.roundingmobile.sni.domain.model.MatchField
import com.roundingmobile.sni.domain.model.MatchType
import com.roundingmobile.sni.presentation.common.PremiumGateDialog
// Mutable wrapper for editing a condition row
private data class EditableCondition(

View file

@ -1,12 +1,12 @@
package com.roundingmobile.alertvault.presentation.settings
package com.roundingmobile.sni.presentation.settings
import android.content.res.Resources
import com.roundingmobile.alertvault.R
import com.roundingmobile.alertvault.domain.model.ConditionOperator
import com.roundingmobile.alertvault.domain.model.FilterAction
import com.roundingmobile.alertvault.domain.model.FilterCondition
import com.roundingmobile.alertvault.domain.model.MatchField
import com.roundingmobile.alertvault.domain.model.MatchType
import com.roundingmobile.sni.R
import com.roundingmobile.sni.domain.model.ConditionOperator
import com.roundingmobile.sni.domain.model.FilterAction
import com.roundingmobile.sni.domain.model.FilterCondition
import com.roundingmobile.sni.domain.model.MatchField
import com.roundingmobile.sni.domain.model.MatchType
internal fun buildCompoundSummary(
appName: String?,

View file

@ -1,4 +1,4 @@
package com.roundingmobile.alertvault.presentation.settings
package com.roundingmobile.sni.presentation.settings
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
@ -43,17 +43,17 @@ import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.roundingmobile.alertvault.domain.model.ConditionOperator
import com.roundingmobile.alertvault.domain.model.FilterAction
import com.roundingmobile.alertvault.domain.model.FilterCondition
import com.roundingmobile.alertvault.domain.model.FilterRule
import com.roundingmobile.alertvault.domain.model.MatchField
import com.roundingmobile.alertvault.domain.model.MatchType
import com.roundingmobile.sni.domain.model.ConditionOperator
import com.roundingmobile.sni.domain.model.FilterAction
import com.roundingmobile.sni.domain.model.FilterCondition
import com.roundingmobile.sni.domain.model.FilterRule
import com.roundingmobile.sni.domain.model.MatchField
import com.roundingmobile.sni.domain.model.MatchType
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import com.roundingmobile.alertvault.R
import com.roundingmobile.alertvault.instrumentation.TestInstrumentation
import com.roundingmobile.alertvault.presentation.common.AppIcon
import com.roundingmobile.sni.R
import com.roundingmobile.sni.instrumentation.TestInstrumentation
import com.roundingmobile.sni.presentation.common.AppIcon
@OptIn(ExperimentalMaterial3Api::class)
@Composable

View file

@ -1,17 +1,17 @@
package com.roundingmobile.alertvault.presentation.settings
package com.roundingmobile.sni.presentation.settings
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.roundingmobile.alertvault.domain.model.AppInfo
import com.roundingmobile.alertvault.domain.model.CapturedNotification
import com.roundingmobile.alertvault.domain.model.FilterAction
import com.roundingmobile.alertvault.domain.model.FilterCondition
import com.roundingmobile.alertvault.domain.model.FilterRule
import com.roundingmobile.alertvault.domain.model.MatchField
import com.roundingmobile.alertvault.domain.model.MatchType
import com.roundingmobile.alertvault.domain.provider.ProStatusProvider
import com.roundingmobile.alertvault.domain.repository.FilterRuleRepository
import com.roundingmobile.alertvault.domain.repository.NotificationRepository
import com.roundingmobile.sni.domain.model.AppInfo
import com.roundingmobile.sni.domain.model.CapturedNotification
import com.roundingmobile.sni.domain.model.FilterAction
import com.roundingmobile.sni.domain.model.FilterCondition
import com.roundingmobile.sni.domain.model.FilterRule
import com.roundingmobile.sni.domain.model.MatchField
import com.roundingmobile.sni.domain.model.MatchType
import com.roundingmobile.sni.domain.provider.ProStatusProvider
import com.roundingmobile.sni.domain.repository.FilterRuleRepository
import com.roundingmobile.sni.domain.repository.NotificationRepository
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow

View file

@ -1,4 +1,4 @@
package com.roundingmobile.alertvault.presentation.settings
package com.roundingmobile.sni.presentation.settings
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
@ -21,7 +21,7 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.text.input.PasswordVisualTransformation
import androidx.compose.ui.unit.dp
import com.roundingmobile.alertvault.R
import com.roundingmobile.sni.R
@Composable
fun PinSetupDialog(

View file

@ -1,4 +1,4 @@
package com.roundingmobile.alertvault.presentation.settings
package com.roundingmobile.sni.presentation.settings
import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.background
@ -63,16 +63,16 @@ import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.roundingmobile.alertvault.R
import com.roundingmobile.alertvault.domain.model.SwipeAction
import com.roundingmobile.alertvault.instrumentation.TestInstrumentation
import com.roundingmobile.alertvault.instrumentation.testTrack
import com.roundingmobile.alertvault.presentation.common.AppIcon
import com.roundingmobile.alertvault.presentation.theme.AppThemeType
import com.roundingmobile.alertvault.presentation.theme.AppThemes
import com.roundingmobile.alertvault.util.AppDateFormatter
import com.roundingmobile.alertvault.util.DateFormatOption
import com.roundingmobile.alertvault.util.TimeFormatOption
import com.roundingmobile.sni.R
import com.roundingmobile.sni.domain.model.SwipeAction
import com.roundingmobile.sni.instrumentation.TestInstrumentation
import com.roundingmobile.sni.instrumentation.testTrack
import com.roundingmobile.sni.presentation.common.AppIcon
import com.roundingmobile.sni.presentation.theme.AppThemeType
import com.roundingmobile.sni.presentation.theme.AppThemes
import com.roundingmobile.sni.util.AppDateFormatter
import com.roundingmobile.sni.util.DateFormatOption
import com.roundingmobile.sni.util.TimeFormatOption
@OptIn(ExperimentalMaterial3Api::class)
@Composable
@ -161,7 +161,7 @@ fun SettingsScreen(
}
if (showIconProGate) {
com.roundingmobile.alertvault.presentation.common.PremiumGateDialog(
com.roundingmobile.sni.presentation.common.PremiumGateDialog(
feature = stringResource(R.string.settings_app_icon_custom),
description = stringResource(R.string.settings_app_icon_description),
onUpgrade = { showIconProGate = false },
@ -240,7 +240,7 @@ fun SettingsScreen(
SettingsRow(
icon = Icons.Default.Schedule,
title = stringResource(R.string.settings_lock_after),
subtitle = com.roundingmobile.alertvault.security.AppLockManager.timeoutLabel(state.lockTimeoutMs, LocalContext.current.resources),
subtitle = com.roundingmobile.sni.security.AppLockManager.timeoutLabel(state.lockTimeoutMs, LocalContext.current.resources),
onClick = { showTimeoutDialog = true }
)
HorizontalDivider(modifier = Modifier.padding(horizontal = 16.dp))
@ -251,7 +251,7 @@ fun SettingsScreen(
title = { Text(stringResource(R.string.settings_lock_after_leaving)) },
text = {
Column {
com.roundingmobile.alertvault.security.AppLockManager.TIMEOUT_OPTIONS.forEach { (ms, labelRes) ->
com.roundingmobile.sni.security.AppLockManager.TIMEOUT_OPTIONS.forEach { (ms, labelRes) ->
Row(
modifier = Modifier
.fillMaxWidth()
@ -374,7 +374,7 @@ fun SettingsScreen(
SettingsRow(
icon = Icons.Default.Info,
title = stringResource(R.string.settings_about),
subtitle = stringResource(R.string.settings_about_version, com.roundingmobile.alertvault.BuildConfig.VERSION_NAME),
subtitle = stringResource(R.string.settings_about_version, com.roundingmobile.sni.BuildConfig.VERSION_NAME),
modifier = Modifier.testTrack(instrumentation, "settings_about")
)
Spacer(modifier = Modifier.height(32.dp))
@ -694,8 +694,8 @@ private fun TimeFormatSelector(selected: TimeFormatOption, onSelect: (TimeFormat
@Composable
private fun AppIconDialog(
current: com.roundingmobile.alertvault.util.AppIconStyle,
onSelect: (com.roundingmobile.alertvault.util.AppIconStyle) -> Unit,
current: com.roundingmobile.sni.util.AppIconStyle,
onSelect: (com.roundingmobile.sni.util.AppIconStyle) -> Unit,
onDismiss: () -> Unit
) {
AlertDialog(
@ -709,7 +709,7 @@ private fun AppIconDialog(
color = MaterialTheme.colorScheme.onSurfaceVariant,
modifier = Modifier.padding(bottom = 12.dp)
)
com.roundingmobile.alertvault.util.AppIconStyle.entries.forEach { style ->
com.roundingmobile.sni.util.AppIconStyle.entries.forEach { style ->
Row(
modifier = Modifier
.fillMaxWidth()

View file

@ -1,20 +1,20 @@
package com.roundingmobile.alertvault.presentation.settings
package com.roundingmobile.sni.presentation.settings
import android.content.SharedPreferences
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.roundingmobile.alertvault.domain.model.SwipeAction
import com.roundingmobile.alertvault.domain.provider.ProStatusProvider
import com.roundingmobile.alertvault.domain.repository.FilterRuleRepository
import com.roundingmobile.alertvault.domain.repository.NotificationRepository
import com.roundingmobile.alertvault.presentation.theme.AppThemeType
import com.roundingmobile.alertvault.security.AppLockManager
import com.roundingmobile.alertvault.security.NotificationFilter
import com.roundingmobile.alertvault.util.AppDateFormatter
import com.roundingmobile.alertvault.util.AppIconManager
import com.roundingmobile.alertvault.util.AppIconStyle
import com.roundingmobile.alertvault.util.DateFormatOption
import com.roundingmobile.alertvault.util.TimeFormatOption
import com.roundingmobile.sni.domain.model.SwipeAction
import com.roundingmobile.sni.domain.provider.ProStatusProvider
import com.roundingmobile.sni.domain.repository.FilterRuleRepository
import com.roundingmobile.sni.domain.repository.NotificationRepository
import com.roundingmobile.sni.presentation.theme.AppThemeType
import com.roundingmobile.sni.security.AppLockManager
import com.roundingmobile.sni.security.NotificationFilter
import com.roundingmobile.sni.util.AppDateFormatter
import com.roundingmobile.sni.util.AppIconManager
import com.roundingmobile.sni.util.AppIconStyle
import com.roundingmobile.sni.util.DateFormatOption
import com.roundingmobile.sni.util.TimeFormatOption
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.SharingStarted

View file

@ -1,4 +1,4 @@
package com.roundingmobile.alertvault.presentation.stats
package com.roundingmobile.sni.presentation.stats
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
@ -25,11 +25,11 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.roundingmobile.alertvault.R
import com.roundingmobile.alertvault.domain.model.AppInfo
import com.roundingmobile.alertvault.instrumentation.TestInstrumentation
import com.roundingmobile.alertvault.instrumentation.testTrack
import com.roundingmobile.alertvault.presentation.common.EmptyState
import com.roundingmobile.sni.R
import com.roundingmobile.sni.domain.model.AppInfo
import com.roundingmobile.sni.instrumentation.TestInstrumentation
import com.roundingmobile.sni.instrumentation.testTrack
import com.roundingmobile.sni.presentation.common.EmptyState
@OptIn(ExperimentalMaterial3Api::class)
@Composable

View file

@ -1,9 +1,9 @@
package com.roundingmobile.alertvault.presentation.stats
package com.roundingmobile.sni.presentation.stats
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.roundingmobile.alertvault.domain.model.AppInfo
import com.roundingmobile.alertvault.domain.usecase.ComputeStatisticsUseCase
import com.roundingmobile.sni.domain.model.AppInfo
import com.roundingmobile.sni.domain.usecase.ComputeStatisticsUseCase
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow

View file

@ -1,11 +1,11 @@
package com.roundingmobile.alertvault.presentation.theme
package com.roundingmobile.sni.presentation.theme
import androidx.annotation.StringRes
import androidx.compose.material3.ColorScheme
import androidx.compose.material3.darkColorScheme
import androidx.compose.material3.lightColorScheme
import androidx.compose.ui.graphics.Color
import com.roundingmobile.alertvault.R
import com.roundingmobile.sni.R
enum class AppThemeType(@StringRes val displayNameRes: Int) {
SYSTEM(R.string.theme_system_default),

View file

@ -0,0 +1 @@
package com.roundingmobile.sni.presentation.theme

View file

@ -1,4 +1,4 @@
package com.roundingmobile.alertvault.presentation.theme
package com.roundingmobile.sni.presentation.theme
import android.os.Build
import androidx.compose.foundation.isSystemInDarkTheme
@ -13,7 +13,7 @@ import androidx.compose.ui.platform.LocalContext
val LocalAppThemeType = compositionLocalOf { AppThemeType.SYSTEM }
@Composable
fun AlertVaultTheme(
fun SNITheme(
themeType: AppThemeType = AppThemeType.SYSTEM,
darkTheme: Boolean = isSystemInDarkTheme(),
content: @Composable () -> Unit

View file

@ -1,4 +1,4 @@
package com.roundingmobile.alertvault.presentation.theme
package com.roundingmobile.sni.presentation.theme
import androidx.compose.material3.Typography
import androidx.compose.ui.text.TextStyle

View file

@ -1,4 +1,4 @@
package com.roundingmobile.alertvault.presentation.timeline
package com.roundingmobile.sni.presentation.timeline
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
@ -30,10 +30,10 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import com.roundingmobile.alertvault.R
import com.roundingmobile.alertvault.presentation.common.AppIcon
import com.roundingmobile.alertvault.presentation.common.formatTimeShort
import com.roundingmobile.alertvault.util.ConsecutiveGroup
import com.roundingmobile.sni.R
import com.roundingmobile.sni.presentation.common.AppIcon
import com.roundingmobile.sni.presentation.common.formatTimeShort
import com.roundingmobile.sni.util.ConsecutiveGroup
@OptIn(ExperimentalMaterial3Api::class)
@Composable

View file

@ -1,4 +1,4 @@
package com.roundingmobile.alertvault.presentation.timeline
package com.roundingmobile.sni.presentation.timeline
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Row
@ -18,10 +18,10 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import com.roundingmobile.alertvault.R
import com.roundingmobile.alertvault.instrumentation.TestInstrumentation
import com.roundingmobile.alertvault.instrumentation.testTrack
import com.roundingmobile.alertvault.presentation.common.AppIcon
import com.roundingmobile.sni.R
import com.roundingmobile.sni.instrumentation.TestInstrumentation
import com.roundingmobile.sni.instrumentation.testTrack
import com.roundingmobile.sni.presentation.common.AppIcon
@OptIn(ExperimentalMaterial3Api::class)
@Composable

View file

@ -1,4 +1,4 @@
package com.roundingmobile.alertvault.presentation.timeline
package com.roundingmobile.sni.presentation.timeline
import androidx.activity.compose.BackHandler
import androidx.compose.animation.AnimatedContent
@ -53,20 +53,20 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.roundingmobile.alertvault.R
import com.roundingmobile.sni.R
import androidx.compose.foundation.layout.PaddingValues
import com.roundingmobile.alertvault.domain.model.CapturedNotification
import com.roundingmobile.alertvault.domain.model.SortOrder
import com.roundingmobile.alertvault.domain.model.SwipeAction
import com.roundingmobile.alertvault.instrumentation.TestInstrumentation
import com.roundingmobile.alertvault.instrumentation.testTrack
import com.roundingmobile.alertvault.presentation.common.EmptyState
import com.roundingmobile.alertvault.presentation.common.SeenDivider
import com.roundingmobile.alertvault.presentation.common.SwipeableNotificationItem
import com.roundingmobile.alertvault.presentation.settings.FilterRuleEditorSheet
import com.roundingmobile.alertvault.presentation.settings.FilterRulesViewModel
import com.roundingmobile.sni.domain.model.CapturedNotification
import com.roundingmobile.sni.domain.model.SortOrder
import com.roundingmobile.sni.domain.model.SwipeAction
import com.roundingmobile.sni.instrumentation.TestInstrumentation
import com.roundingmobile.sni.instrumentation.testTrack
import com.roundingmobile.sni.presentation.common.EmptyState
import com.roundingmobile.sni.presentation.common.SeenDivider
import com.roundingmobile.sni.presentation.common.SwipeableNotificationItem
import com.roundingmobile.sni.presentation.settings.FilterRuleEditorSheet
import com.roundingmobile.sni.presentation.settings.FilterRulesViewModel
import kotlinx.coroutines.launch
import com.roundingmobile.alertvault.util.DateTimeUtils
import com.roundingmobile.sni.util.DateTimeUtils
@OptIn(ExperimentalMaterial3Api::class, ExperimentalLayoutApi::class)
@Composable

View file

@ -1,4 +1,4 @@
package com.roundingmobile.alertvault.presentation.timeline
package com.roundingmobile.sni.presentation.timeline
import android.content.Context
import android.content.SharedPreferences
@ -6,10 +6,10 @@ import android.content.pm.PackageManager
import android.graphics.drawable.Drawable
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.roundingmobile.alertvault.domain.model.CapturedNotification
import com.roundingmobile.alertvault.domain.model.SortOrder
import com.roundingmobile.alertvault.domain.model.SwipeAction
import com.roundingmobile.alertvault.domain.repository.NotificationRepository
import com.roundingmobile.sni.domain.model.CapturedNotification
import com.roundingmobile.sni.domain.model.SortOrder
import com.roundingmobile.sni.domain.model.SwipeAction
import com.roundingmobile.sni.domain.repository.NotificationRepository
import dagger.hilt.android.lifecycle.HiltViewModel
import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.ExperimentalCoroutinesApi
@ -24,7 +24,7 @@ import kotlinx.coroutines.flow.flatMapLatest
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.launch
import com.roundingmobile.alertvault.service.NotificationCaptureService
import com.roundingmobile.sni.service.NotificationCaptureService
import javax.inject.Inject
@HiltViewModel

View file

@ -1,4 +1,4 @@
package com.roundingmobile.alertvault.security
package com.roundingmobile.sni.security
import android.app.KeyguardManager
import android.content.Context
@ -8,7 +8,7 @@ import android.util.Log
import androidx.annotation.StringRes
import androidx.security.crypto.EncryptedSharedPreferences
import androidx.security.crypto.MasterKey
import com.roundingmobile.alertvault.R
import com.roundingmobile.sni.R
import dagger.hilt.android.qualifiers.ApplicationContext
import javax.inject.Inject
import javax.inject.Singleton
@ -21,7 +21,7 @@ class AppLockManager @Inject constructor(
companion object {
private const val TAG = "AppLockManager"
private const val PREFS_FILE = "alertvault_lock_prefs"
private const val PREFS_FILE = "sni_lock_prefs"
private const val KEY_LOCK_ENABLED = "lock_enabled_v2"
private const val KEY_LOCK_TIMEOUT = "lock_timeout_ms"
private const val KEY_LAST_BG = "lock_last_bg_time"

View file

@ -1,4 +1,4 @@
package com.roundingmobile.alertvault.security
package com.roundingmobile.sni.security
import android.app.Notification
import android.content.SharedPreferences

View file

@ -1,4 +1,4 @@
package com.roundingmobile.alertvault.security
package com.roundingmobile.sni.security
import android.content.SharedPreferences
import javax.inject.Inject

View file

@ -1,17 +1,17 @@
package com.roundingmobile.alertvault.service
package com.roundingmobile.sni.service
import android.content.pm.PackageManager
import android.service.notification.NotificationListenerService
import android.service.notification.StatusBarNotification
import android.util.Log
import com.roundingmobile.alertvault.domain.model.FilterAction
import com.roundingmobile.alertvault.domain.repository.FilterRuleRepository
import com.roundingmobile.alertvault.domain.repository.NotificationRepository
import com.roundingmobile.alertvault.domain.usecase.FilterRuleEngine
import com.roundingmobile.alertvault.instrumentation.TestInstrumentation
import com.roundingmobile.alertvault.security.NotificationFilter
import com.roundingmobile.alertvault.util.NotificationParser
import com.roundingmobile.alertvault.BuildConfig
import com.roundingmobile.sni.domain.model.FilterAction
import com.roundingmobile.sni.domain.repository.FilterRuleRepository
import com.roundingmobile.sni.domain.repository.NotificationRepository
import com.roundingmobile.sni.domain.usecase.FilterRuleEngine
import com.roundingmobile.sni.instrumentation.TestInstrumentation
import com.roundingmobile.sni.security.NotificationFilter
import com.roundingmobile.sni.util.NotificationParser
import com.roundingmobile.sni.BuildConfig
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
@ -33,7 +33,7 @@ class NotificationCaptureService : NotificationListenerService() {
@Inject lateinit var filter: NotificationFilter
@Inject lateinit var filterRuleRepository: FilterRuleRepository
@Inject lateinit var filterRuleEngine: FilterRuleEngine
@Inject lateinit var appIconStorage: com.roundingmobile.alertvault.util.AppIconStorage
@Inject lateinit var appIconStorage: com.roundingmobile.sni.util.AppIconStorage
private val serviceScope = CoroutineScope(SupervisorJob() + Dispatchers.IO)
@ -134,7 +134,7 @@ class NotificationCaptureService : NotificationListenerService() {
private suspend fun saveNotification(
sbn: StatusBarNotification,
parsed: com.roundingmobile.alertvault.domain.model.CapturedNotification,
parsed: com.roundingmobile.sni.domain.model.CapturedNotification,
appName: String,
isRead: Boolean
) {

View file

@ -1,4 +1,4 @@
package com.roundingmobile.alertvault.util
package com.roundingmobile.sni.util
import android.content.SharedPreferences
import java.text.DateFormat

View file

@ -1,4 +1,4 @@
package com.roundingmobile.alertvault.util
package com.roundingmobile.sni.util
import android.content.ComponentName
import android.content.Context

View file

@ -1,4 +1,4 @@
package com.roundingmobile.alertvault.util
package com.roundingmobile.sni.util
import android.content.Context
import android.graphics.Bitmap

View file

@ -1,6 +1,6 @@
package com.roundingmobile.alertvault.util
package com.roundingmobile.sni.util
import com.roundingmobile.alertvault.domain.model.CapturedNotification
import com.roundingmobile.sni.domain.model.CapturedNotification
import java.util.Calendar
object DateTimeUtils {

View file

@ -1,8 +1,8 @@
package com.roundingmobile.alertvault.util
package com.roundingmobile.sni.util
import android.app.Notification
import android.service.notification.StatusBarNotification
import com.roundingmobile.alertvault.domain.model.CapturedNotification
import com.roundingmobile.sni.domain.model.CapturedNotification
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.9 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 517 B

After

Width:  |  Height:  |  Size: 517 B

Before After
Before After

Some files were not shown because too many files have changed in this diff Show more