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:
parent
ed2420c139
commit
62933bf975
146 changed files with 446 additions and 446 deletions
40
CLAUDE.md
40
CLAUDE.md
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
|
|
|
|||
6
app/proguard-rules.pro
vendored
6
app/proguard-rules.pro
vendored
|
|
@ -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(...);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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"
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
@ -1 +0,0 @@
|
|||
package com.roundingmobile.alertvault.presentation.theme
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package com.roundingmobile.alertvault
|
||||
package com.roundingmobile.sni
|
||||
|
||||
import android.app.Application
|
||||
import dagger.hilt.android.HiltAndroidApp
|
||||
|
|
@ -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()
|
||||
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package com.roundingmobile.alertvault.data.export
|
||||
package com.roundingmobile.sni.data.export
|
||||
|
||||
import android.content.ContentValues
|
||||
import android.content.Context
|
||||
|
|
@ -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
|
||||
}
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
||||
|
|
@ -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,
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package com.roundingmobile.alertvault.domain.model
|
||||
package com.roundingmobile.sni.domain.model
|
||||
|
||||
data class AppInfo(
|
||||
val packageName: String,
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package com.roundingmobile.alertvault.domain.model
|
||||
package com.roundingmobile.sni.domain.model
|
||||
|
||||
data class CapturedNotification(
|
||||
val id: Long,
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package com.roundingmobile.alertvault.domain.model
|
||||
package com.roundingmobile.sni.domain.model
|
||||
|
||||
enum class ExportFormat {
|
||||
CSV,
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package com.roundingmobile.alertvault.domain.model
|
||||
package com.roundingmobile.sni.domain.model
|
||||
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package com.roundingmobile.alertvault.domain.model
|
||||
package com.roundingmobile.sni.domain.model
|
||||
|
||||
enum class SortOrder {
|
||||
NEWEST_FIRST,
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package com.roundingmobile.alertvault.domain.model
|
||||
package com.roundingmobile.sni.domain.model
|
||||
|
||||
enum class SwipeAction {
|
||||
DELETE,
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package com.roundingmobile.alertvault.domain.provider
|
||||
package com.roundingmobile.sni.domain.provider
|
||||
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
||||
|
|
@ -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 {
|
||||
|
|
@ -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 {
|
||||
|
|
@ -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
|
||||
|
|
@ -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)
|
||||
|
|
@ -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
|
||||
|
||||
|
|
@ -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
|
||||
|
||||
|
|
@ -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
|
||||
|
||||
|
|
@ -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
|
||||
|
||||
|
|
@ -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
|
||||
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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(),
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package com.roundingmobile.alertvault.presentation.common
|
||||
package com.roundingmobile.sni.presentation.common
|
||||
|
||||
import android.graphics.Bitmap
|
||||
import android.graphics.Canvas
|
||||
|
|
@ -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(
|
||||
|
|
@ -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 }
|
||||
|
|
@ -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).
|
||||
|
|
@ -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
|
||||
|
|
@ -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(
|
||||
|
|
@ -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) {
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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) {
|
||||
|
|
@ -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
|
||||
|
||||
|
|
@ -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(
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package com.roundingmobile.alertvault.presentation.navigation
|
||||
package com.roundingmobile.sni.presentation.navigation
|
||||
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
|
|
@ -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(
|
||||
|
|
@ -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) {
|
||||
|
|
@ -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
|
||||
|
||||
|
|
@ -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(
|
||||
|
|
@ -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?,
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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(
|
||||
|
|
@ -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()
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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),
|
||||
|
|
@ -0,0 +1 @@
|
|||
package com.roundingmobile.sni.presentation.theme
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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"
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package com.roundingmobile.alertvault.security
|
||||
package com.roundingmobile.sni.security
|
||||
|
||||
import android.app.Notification
|
||||
import android.content.SharedPreferences
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package com.roundingmobile.alertvault.security
|
||||
package com.roundingmobile.sni.security
|
||||
|
||||
import android.content.SharedPreferences
|
||||
import javax.inject.Inject
|
||||
|
|
@ -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
|
||||
) {
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package com.roundingmobile.alertvault.util
|
||||
package com.roundingmobile.sni.util
|
||||
|
||||
import android.content.SharedPreferences
|
||||
import java.text.DateFormat
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package com.roundingmobile.alertvault.util
|
||||
package com.roundingmobile.sni.util
|
||||
|
||||
import android.content.ComponentName
|
||||
import android.content.Context
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package com.roundingmobile.alertvault.util
|
||||
package com.roundingmobile.sni.util
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.Bitmap
|
||||
|
|
@ -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 {
|
||||
|
|
@ -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 |
Binary file not shown.
|
Before Width: | Height: | Size: 517 B After Width: | Height: | Size: 517 B |
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue