diff --git a/PLAY_STORE.md b/PLAY_STORE.md new file mode 100644 index 0000000..cfd30ce --- /dev/null +++ b/PLAY_STORE.md @@ -0,0 +1,46 @@ +# Mizafi — Play Store release + +This branch prepares **Mizafi** for Google Play publishing. The open-source repository remains **[FlowFi](https://github.com/saadkhalidkhan/FlowFi)**; only the shipped app identity changes. + +| Item | Value | +|------|--------| +| **Play Store app name** | Mizafi | +| **Package name** | `com.saadproductlabs.mizafi` | +| **Developer / publisher** | Saad Product Labs | + +## Build a release APK or AAB + +```bash +./gradlew :app:bundleRelease +``` + +Output: `app/build/outputs/bundle/release/app-release.aab` + +For a local APK: + +```bash +./gradlew :app:assembleRelease +``` + +## Install debug build + +```bash +./gradlew :app:installDebug +adb shell am start -n com.saadproductlabs.mizafi/.MainActivity +``` + +## Before you upload + +1. **Signing** — Configure a release keystore in `app/build.gradle.kts` (not committed). +2. **Store listing** — App name **Mizafi**, developer **Saad Product Labs**. +3. **Privacy policy** — Required if you collect data; this app stores data locally only (Room). +4. **Screenshots** — Capture from this branch (Mizafi branding). +5. **Version** — Bump `versionCode` / `versionName` in `app/build.gradle.kts` for each release. + +## Copyright + +Source is licensed under the [MIT License](LICENSE): + +> Copyright (c) 2026 Saad Khalid Khan + +Publishing on Play Store under **Saad Product Labs** does not change the license or GitHub repo name. diff --git a/README.md b/README.md index 8f72f2f..189350e 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # FlowFi +> **Play Store branch:** App ships as **[Mizafi](PLAY_STORE.md)** (`com.saadproductlabs.mizafi`) by **Saad Product Labs**. This GitHub repo name stays **FlowFi**. + [![CI](https://github.com/saadkhalidkhan/FlowFi/actions/workflows/ci.yml/badge.svg)](https://github.com/saadkhalidkhan/FlowFi/actions/workflows/ci.yml) [![Docs](https://github.com/saadkhalidkhan/FlowFi/actions/workflows/docs.yml/badge.svg)](https://github.com/saadkhalidkhan/FlowFi/actions/workflows/docs.yml) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) @@ -73,7 +75,7 @@ Install on a device or emulator: ```bash ./gradlew :app:installDebug -adb shell am start -n com.example.flowfi/.MainActivity +adb shell am start -n com.saadproductlabs.mizafi/.MainActivity ``` ## Usage examples @@ -81,10 +83,10 @@ adb shell am start -n com.example.flowfi/.MainActivity ### Insert a transaction ```kotlin -import com.example.flowfi.data.database.AppDatabase -import com.example.flowfi.data.entity.TransactionEntity -import com.example.flowfi.data.entity.TransactionType -import com.example.flowfi.data.repository.TransactionRepositoryImpl +import com.saadproductlabs.mizafi.data.database.AppDatabase +import com.saadproductlabs.mizafi.data.entity.TransactionEntity +import com.saadproductlabs.mizafi.data.entity.TransactionType +import com.saadproductlabs.mizafi.data.repository.TransactionRepositoryImpl val repository = TransactionRepositoryImpl( AppDatabase.getDatabase(context).transactionDao() @@ -104,7 +106,7 @@ repository.insertTransaction( ### Observe totals in a ViewModel ```kotlin -import com.example.flowfi.data.entity.TransactionType +import com.saadproductlabs.mizafi.data.entity.TransactionType import kotlinx.coroutines.flow.map repository.getAllTransactions() @@ -118,7 +120,7 @@ repository.getAllTransactions() ### Create a savings goal ```kotlin -import com.example.flowfi.data.entity.SavingsGoalEntity +import com.saadproductlabs.mizafi.data.entity.SavingsGoalEntity savingsGoalRepository.insertGoal( SavingsGoalEntity( @@ -132,7 +134,7 @@ savingsGoalRepository.insertGoal( ### Generate behavioral insights ```kotlin -import com.example.flowfi.domain.InsightEngine +import com.saadproductlabs.mizafi.domain.InsightEngine val insights = InsightEngine.generate(transactions) insights.forEach { println(it.message) } @@ -141,7 +143,7 @@ insights.forEach { println(it.message) } ### Wire repositories in `Application` ```kotlin -class FlowFiApplication : Application() { +class MizafiApplication : Application() { val database by lazy { AppDatabase.getDatabase(this) } val repository by lazy { TransactionRepositoryImpl(database.transactionDao()) } val savingsGoalRepository by lazy { @@ -170,7 +172,7 @@ Published docs (GitHub Pages): **https://saadkhalidkhan.github.io/FlowFi/** ``` FlowFi/ ├── app/ -│ └── src/main/java/com/example/flowfi/ +│ └── src/main/java/com/saadproductlabs/mizafi/ │ ├── data/ # Room entities, DAOs, repositories │ ├── domain/ # InsightEngine, CategoryAnalytics │ ├── ui/ # Compose screens, theme, navigation diff --git a/app/build.gradle.kts b/app/build.gradle.kts index f0d6524..d17de66 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -6,11 +6,11 @@ plugins { } android { - namespace = "com.example.flowfi" + namespace = "com.saadproductlabs.mizafi" compileSdk = 36 defaultConfig { - applicationId = "com.example.flowfi" + applicationId = "com.saadproductlabs.mizafi" minSdk = 26 targetSdk = 36 versionCode = 1 diff --git a/app/src/androidTest/java/com/example/flowfi/ExampleInstrumentedTest.kt b/app/src/androidTest/java/com/saadproductlabs/mizafi/ExampleInstrumentedTest.kt similarity index 83% rename from app/src/androidTest/java/com/example/flowfi/ExampleInstrumentedTest.kt rename to app/src/androidTest/java/com/saadproductlabs/mizafi/ExampleInstrumentedTest.kt index 1a168b7..b8bfbf9 100644 --- a/app/src/androidTest/java/com/example/flowfi/ExampleInstrumentedTest.kt +++ b/app/src/androidTest/java/com/saadproductlabs/mizafi/ExampleInstrumentedTest.kt @@ -1,4 +1,4 @@ -package com.example.flowfi +package com.saadproductlabs.mizafi import androidx.test.platform.app.InstrumentationRegistry import androidx.test.ext.junit.runners.AndroidJUnit4 @@ -19,6 +19,6 @@ class ExampleInstrumentedTest { fun useAppContext() { // Context of the app under test. val appContext = InstrumentationRegistry.getInstrumentation().targetContext - assertEquals("com.example.flowfi", appContext.packageName) + assertEquals("com.saadproductlabs.mizafi", appContext.packageName) } } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 8dc45dc..20c77a0 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -5,7 +5,7 @@ + android:theme="@style/Theme.Mizafi"> + android:theme="@style/Theme.Mizafi"> diff --git a/app/src/main/java/com/example/flowfi/FlowFiApplication.kt b/app/src/main/java/com/example/flowfi/FlowFiApplication.kt deleted file mode 100644 index 106a8e8..0000000 --- a/app/src/main/java/com/example/flowfi/FlowFiApplication.kt +++ /dev/null @@ -1,16 +0,0 @@ -package com.example.flowfi - -import android.app.Application -import com.example.flowfi.data.database.AppDatabase -import com.example.flowfi.data.repository.SavingsGoalRepository -import com.example.flowfi.data.repository.SavingsGoalRepositoryImpl -import com.example.flowfi.data.repository.TransactionRepository -import com.example.flowfi.data.repository.TransactionRepositoryImpl - -class FlowFiApplication : Application() { - val database: AppDatabase by lazy { AppDatabase.getDatabase(this) } - val repository: TransactionRepository by lazy { TransactionRepositoryImpl(database.transactionDao()) } - val savingsGoalRepository: SavingsGoalRepository by lazy { - SavingsGoalRepositoryImpl(database.savingsGoalDao()) - } -} diff --git a/app/src/main/java/com/example/flowfi/MainActivity.kt b/app/src/main/java/com/saadproductlabs/mizafi/MainActivity.kt similarity index 77% rename from app/src/main/java/com/example/flowfi/MainActivity.kt rename to app/src/main/java/com/saadproductlabs/mizafi/MainActivity.kt index f7f3e7f..84f6e4e 100644 --- a/app/src/main/java/com/example/flowfi/MainActivity.kt +++ b/app/src/main/java/com/saadproductlabs/mizafi/MainActivity.kt @@ -1,4 +1,4 @@ -package com.example.flowfi +package com.saadproductlabs.mizafi import android.os.Bundle import androidx.activity.ComponentActivity @@ -11,10 +11,10 @@ import androidx.compose.material3.Surface import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.lifecycle.viewmodel.compose.viewModel -import com.example.flowfi.ui.navigation.FlowFiNavHost -import com.example.flowfi.ui.theme.FlowFiTheme -import com.example.flowfi.viewmodel.TransactionViewModel -import com.example.flowfi.viewmodel.TransactionViewModelFactory +import com.saadproductlabs.mizafi.ui.navigation.MizafiNavHost +import com.saadproductlabs.mizafi.ui.theme.MizafiTheme +import com.saadproductlabs.mizafi.viewmodel.TransactionViewModel +import com.saadproductlabs.mizafi.viewmodel.TransactionViewModelFactory class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { @@ -30,8 +30,8 @@ class MainActivity : ComponentActivity() { ) ) setContent { - FlowFiTheme { - val application = application as FlowFiApplication + MizafiTheme { + val application = application as MizafiApplication val viewModel: TransactionViewModel = viewModel( factory = TransactionViewModelFactory( application.repository, @@ -43,7 +43,7 @@ class MainActivity : ComponentActivity() { modifier = Modifier.fillMaxSize(), color = MaterialTheme.colorScheme.background ) { - FlowFiNavHost(viewModel = viewModel) + MizafiNavHost(viewModel = viewModel) } } } diff --git a/app/src/main/java/com/saadproductlabs/mizafi/MizafiApplication.kt b/app/src/main/java/com/saadproductlabs/mizafi/MizafiApplication.kt new file mode 100644 index 0000000..c0b68e7 --- /dev/null +++ b/app/src/main/java/com/saadproductlabs/mizafi/MizafiApplication.kt @@ -0,0 +1,16 @@ +package com.saadproductlabs.mizafi + +import android.app.Application +import com.saadproductlabs.mizafi.data.database.AppDatabase +import com.saadproductlabs.mizafi.data.repository.SavingsGoalRepository +import com.saadproductlabs.mizafi.data.repository.SavingsGoalRepositoryImpl +import com.saadproductlabs.mizafi.data.repository.TransactionRepository +import com.saadproductlabs.mizafi.data.repository.TransactionRepositoryImpl + +class MizafiApplication : Application() { + val database: AppDatabase by lazy { AppDatabase.getDatabase(this) } + val repository: TransactionRepository by lazy { TransactionRepositoryImpl(database.transactionDao()) } + val savingsGoalRepository: SavingsGoalRepository by lazy { + SavingsGoalRepositoryImpl(database.savingsGoalDao()) + } +} diff --git a/app/src/main/java/com/example/flowfi/data/dao/SavingsGoalDao.kt b/app/src/main/java/com/saadproductlabs/mizafi/data/dao/SavingsGoalDao.kt similarity index 84% rename from app/src/main/java/com/example/flowfi/data/dao/SavingsGoalDao.kt rename to app/src/main/java/com/saadproductlabs/mizafi/data/dao/SavingsGoalDao.kt index 0ab1fbc..9a90dbc 100644 --- a/app/src/main/java/com/example/flowfi/data/dao/SavingsGoalDao.kt +++ b/app/src/main/java/com/saadproductlabs/mizafi/data/dao/SavingsGoalDao.kt @@ -1,4 +1,4 @@ -package com.example.flowfi.data.dao +package com.saadproductlabs.mizafi.data.dao import androidx.room.Dao import androidx.room.Delete @@ -6,7 +6,7 @@ import androidx.room.Insert import androidx.room.OnConflictStrategy import androidx.room.Query import androidx.room.Update -import com.example.flowfi.data.entity.SavingsGoalEntity +import com.saadproductlabs.mizafi.data.entity.SavingsGoalEntity import kotlinx.coroutines.flow.Flow @Dao diff --git a/app/src/main/java/com/example/flowfi/data/dao/TransactionDao.kt b/app/src/main/java/com/saadproductlabs/mizafi/data/dao/TransactionDao.kt similarity index 90% rename from app/src/main/java/com/example/flowfi/data/dao/TransactionDao.kt rename to app/src/main/java/com/saadproductlabs/mizafi/data/dao/TransactionDao.kt index 1b16f03..77d41c3 100644 --- a/app/src/main/java/com/example/flowfi/data/dao/TransactionDao.kt +++ b/app/src/main/java/com/saadproductlabs/mizafi/data/dao/TransactionDao.kt @@ -1,4 +1,4 @@ -package com.example.flowfi.data.dao +package com.saadproductlabs.mizafi.data.dao import androidx.room.Dao import androidx.room.Delete @@ -6,7 +6,7 @@ import androidx.room.Insert import androidx.room.OnConflictStrategy import androidx.room.Query import androidx.room.Update -import com.example.flowfi.data.entity.TransactionEntity +import com.saadproductlabs.mizafi.data.entity.TransactionEntity import kotlinx.coroutines.flow.Flow @Dao diff --git a/app/src/main/java/com/example/flowfi/data/database/AppDatabase.kt b/app/src/main/java/com/saadproductlabs/mizafi/data/database/AppDatabase.kt similarity index 74% rename from app/src/main/java/com/example/flowfi/data/database/AppDatabase.kt rename to app/src/main/java/com/saadproductlabs/mizafi/data/database/AppDatabase.kt index c2b76f8..0176b7a 100644 --- a/app/src/main/java/com/example/flowfi/data/database/AppDatabase.kt +++ b/app/src/main/java/com/saadproductlabs/mizafi/data/database/AppDatabase.kt @@ -1,14 +1,14 @@ -package com.example.flowfi.data.database +package com.saadproductlabs.mizafi.data.database import android.content.Context import androidx.room.Database import androidx.room.Room import androidx.room.RoomDatabase import androidx.room.TypeConverters -import com.example.flowfi.data.dao.SavingsGoalDao -import com.example.flowfi.data.dao.TransactionDao -import com.example.flowfi.data.entity.SavingsGoalEntity -import com.example.flowfi.data.entity.TransactionEntity +import com.saadproductlabs.mizafi.data.dao.SavingsGoalDao +import com.saadproductlabs.mizafi.data.dao.TransactionDao +import com.saadproductlabs.mizafi.data.entity.SavingsGoalEntity +import com.saadproductlabs.mizafi.data.entity.TransactionEntity @Database( entities = [TransactionEntity::class, SavingsGoalEntity::class], @@ -29,7 +29,7 @@ abstract class AppDatabase : RoomDatabase() { val instance = Room.databaseBuilder( context.applicationContext, AppDatabase::class.java, - "flowfi_database" + "mizafi_database" ).fallbackToDestructiveMigration() .build() INSTANCE = instance diff --git a/app/src/main/java/com/example/flowfi/data/database/Converters.kt b/app/src/main/java/com/saadproductlabs/mizafi/data/database/Converters.kt similarity index 73% rename from app/src/main/java/com/example/flowfi/data/database/Converters.kt rename to app/src/main/java/com/saadproductlabs/mizafi/data/database/Converters.kt index 8afb631..e749ea4 100644 --- a/app/src/main/java/com/example/flowfi/data/database/Converters.kt +++ b/app/src/main/java/com/saadproductlabs/mizafi/data/database/Converters.kt @@ -1,7 +1,7 @@ -package com.example.flowfi.data.database +package com.saadproductlabs.mizafi.data.database import androidx.room.TypeConverter -import com.example.flowfi.data.entity.TransactionType +import com.saadproductlabs.mizafi.data.entity.TransactionType class Converters { @TypeConverter diff --git a/app/src/main/java/com/example/flowfi/data/entity/SavingsGoalEntity.kt b/app/src/main/java/com/saadproductlabs/mizafi/data/entity/SavingsGoalEntity.kt similarity index 90% rename from app/src/main/java/com/example/flowfi/data/entity/SavingsGoalEntity.kt rename to app/src/main/java/com/saadproductlabs/mizafi/data/entity/SavingsGoalEntity.kt index fd25c5e..4de4100 100644 --- a/app/src/main/java/com/example/flowfi/data/entity/SavingsGoalEntity.kt +++ b/app/src/main/java/com/saadproductlabs/mizafi/data/entity/SavingsGoalEntity.kt @@ -1,4 +1,4 @@ -package com.example.flowfi.data.entity +package com.saadproductlabs.mizafi.data.entity import androidx.room.Entity import androidx.room.PrimaryKey diff --git a/app/src/main/java/com/example/flowfi/data/entity/TransactionEntity.kt b/app/src/main/java/com/saadproductlabs/mizafi/data/entity/TransactionEntity.kt similarity index 89% rename from app/src/main/java/com/example/flowfi/data/entity/TransactionEntity.kt rename to app/src/main/java/com/saadproductlabs/mizafi/data/entity/TransactionEntity.kt index acf0006..d4daa54 100644 --- a/app/src/main/java/com/example/flowfi/data/entity/TransactionEntity.kt +++ b/app/src/main/java/com/saadproductlabs/mizafi/data/entity/TransactionEntity.kt @@ -1,4 +1,4 @@ -package com.example.flowfi.data.entity +package com.saadproductlabs.mizafi.data.entity import androidx.room.Entity import androidx.room.PrimaryKey diff --git a/app/src/main/java/com/example/flowfi/data/repository/SavingsGoalRepository.kt b/app/src/main/java/com/saadproductlabs/mizafi/data/repository/SavingsGoalRepository.kt similarity index 82% rename from app/src/main/java/com/example/flowfi/data/repository/SavingsGoalRepository.kt rename to app/src/main/java/com/saadproductlabs/mizafi/data/repository/SavingsGoalRepository.kt index 89e6c6d..74fa474 100644 --- a/app/src/main/java/com/example/flowfi/data/repository/SavingsGoalRepository.kt +++ b/app/src/main/java/com/saadproductlabs/mizafi/data/repository/SavingsGoalRepository.kt @@ -1,7 +1,7 @@ -package com.example.flowfi.data.repository +package com.saadproductlabs.mizafi.data.repository -import com.example.flowfi.data.dao.SavingsGoalDao -import com.example.flowfi.data.entity.SavingsGoalEntity +import com.saadproductlabs.mizafi.data.dao.SavingsGoalDao +import com.saadproductlabs.mizafi.data.entity.SavingsGoalEntity import kotlinx.coroutines.flow.Flow interface SavingsGoalRepository { diff --git a/app/src/main/java/com/example/flowfi/data/repository/TransactionRepository.kt b/app/src/main/java/com/saadproductlabs/mizafi/data/repository/TransactionRepository.kt similarity index 88% rename from app/src/main/java/com/example/flowfi/data/repository/TransactionRepository.kt rename to app/src/main/java/com/saadproductlabs/mizafi/data/repository/TransactionRepository.kt index f66b203..f0e90dd 100644 --- a/app/src/main/java/com/example/flowfi/data/repository/TransactionRepository.kt +++ b/app/src/main/java/com/saadproductlabs/mizafi/data/repository/TransactionRepository.kt @@ -1,7 +1,7 @@ -package com.example.flowfi.data.repository +package com.saadproductlabs.mizafi.data.repository -import com.example.flowfi.data.dao.TransactionDao -import com.example.flowfi.data.entity.TransactionEntity +import com.saadproductlabs.mizafi.data.dao.TransactionDao +import com.saadproductlabs.mizafi.data.entity.TransactionEntity import kotlinx.coroutines.flow.Flow interface TransactionRepository { diff --git a/app/src/main/java/com/example/flowfi/domain/CategoryAnalytics.kt b/app/src/main/java/com/saadproductlabs/mizafi/domain/CategoryAnalytics.kt similarity index 81% rename from app/src/main/java/com/example/flowfi/domain/CategoryAnalytics.kt rename to app/src/main/java/com/saadproductlabs/mizafi/domain/CategoryAnalytics.kt index b2b5216..6c6bc39 100644 --- a/app/src/main/java/com/example/flowfi/domain/CategoryAnalytics.kt +++ b/app/src/main/java/com/saadproductlabs/mizafi/domain/CategoryAnalytics.kt @@ -1,8 +1,8 @@ -package com.example.flowfi.domain +package com.saadproductlabs.mizafi.domain -import com.example.flowfi.data.entity.TransactionEntity -import com.example.flowfi.data.entity.TransactionType -import com.example.flowfi.util.DateUtils +import com.saadproductlabs.mizafi.data.entity.TransactionEntity +import com.saadproductlabs.mizafi.data.entity.TransactionType +import com.saadproductlabs.mizafi.util.DateUtils data class CategorySpend( val category: String, diff --git a/app/src/main/java/com/example/flowfi/domain/InsightEngine.kt b/app/src/main/java/com/saadproductlabs/mizafi/domain/InsightEngine.kt similarity index 96% rename from app/src/main/java/com/example/flowfi/domain/InsightEngine.kt rename to app/src/main/java/com/saadproductlabs/mizafi/domain/InsightEngine.kt index 1a66a45..1eb6ef3 100644 --- a/app/src/main/java/com/example/flowfi/domain/InsightEngine.kt +++ b/app/src/main/java/com/saadproductlabs/mizafi/domain/InsightEngine.kt @@ -1,8 +1,8 @@ -package com.example.flowfi.domain +package com.saadproductlabs.mizafi.domain -import com.example.flowfi.data.entity.TransactionEntity -import com.example.flowfi.data.entity.TransactionType -import com.example.flowfi.util.DateUtils +import com.saadproductlabs.mizafi.data.entity.TransactionEntity +import com.saadproductlabs.mizafi.data.entity.TransactionType +import com.saadproductlabs.mizafi.util.DateUtils import kotlin.math.roundToInt enum class InsightTone { diff --git a/app/src/main/java/com/example/flowfi/ui/components/CategoryBarChart.kt b/app/src/main/java/com/saadproductlabs/mizafi/ui/components/CategoryBarChart.kt similarity index 94% rename from app/src/main/java/com/example/flowfi/ui/components/CategoryBarChart.kt rename to app/src/main/java/com/saadproductlabs/mizafi/ui/components/CategoryBarChart.kt index 80154eb..494b922 100644 --- a/app/src/main/java/com/example/flowfi/ui/components/CategoryBarChart.kt +++ b/app/src/main/java/com/saadproductlabs/mizafi/ui/components/CategoryBarChart.kt @@ -1,4 +1,4 @@ -package com.example.flowfi.ui.components +package com.saadproductlabs.mizafi.ui.components import androidx.compose.foundation.Canvas import androidx.compose.foundation.layout.* @@ -12,8 +12,8 @@ import androidx.compose.ui.geometry.Size import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp -import com.example.flowfi.domain.CategorySpend -import com.example.flowfi.ui.util.formatCurrency +import com.saadproductlabs.mizafi.domain.CategorySpend +import com.saadproductlabs.mizafi.ui.util.formatCurrency @Composable fun CategoryBarChart( diff --git a/app/src/main/java/com/example/flowfi/ui/model/TransactionCategories.kt b/app/src/main/java/com/saadproductlabs/mizafi/ui/model/TransactionCategories.kt similarity index 81% rename from app/src/main/java/com/example/flowfi/ui/model/TransactionCategories.kt rename to app/src/main/java/com/saadproductlabs/mizafi/ui/model/TransactionCategories.kt index dd99484..774a2b1 100644 --- a/app/src/main/java/com/example/flowfi/ui/model/TransactionCategories.kt +++ b/app/src/main/java/com/saadproductlabs/mizafi/ui/model/TransactionCategories.kt @@ -1,6 +1,6 @@ -package com.example.flowfi.ui.model +package com.saadproductlabs.mizafi.ui.model -import com.example.flowfi.data.entity.TransactionType +import com.saadproductlabs.mizafi.data.entity.TransactionType object TransactionCategories { val expense = listOf("Food", "Transport", "Bills", "Shopping", "Other") diff --git a/app/src/main/java/com/example/flowfi/ui/model/TransactionListFilters.kt b/app/src/main/java/com/saadproductlabs/mizafi/ui/model/TransactionListFilters.kt similarity index 90% rename from app/src/main/java/com/example/flowfi/ui/model/TransactionListFilters.kt rename to app/src/main/java/com/saadproductlabs/mizafi/ui/model/TransactionListFilters.kt index 1a2fdbb..9cb221b 100644 --- a/app/src/main/java/com/example/flowfi/ui/model/TransactionListFilters.kt +++ b/app/src/main/java/com/saadproductlabs/mizafi/ui/model/TransactionListFilters.kt @@ -1,7 +1,7 @@ -package com.example.flowfi.ui.model +package com.saadproductlabs.mizafi.ui.model -import com.example.flowfi.data.entity.TransactionEntity -import com.example.flowfi.ui.util.formatMonthYear +import com.saadproductlabs.mizafi.data.entity.TransactionEntity +import com.saadproductlabs.mizafi.ui.util.formatMonthYear import java.util.Calendar data class MonthFilterOption( diff --git a/app/src/main/java/com/example/flowfi/ui/navigation/FlowFiNavHost.kt b/app/src/main/java/com/saadproductlabs/mizafi/ui/navigation/MizafiNavHost.kt similarity index 86% rename from app/src/main/java/com/example/flowfi/ui/navigation/FlowFiNavHost.kt rename to app/src/main/java/com/saadproductlabs/mizafi/ui/navigation/MizafiNavHost.kt index 1c8fb71..b6b7efd 100644 --- a/app/src/main/java/com/example/flowfi/ui/navigation/FlowFiNavHost.kt +++ b/app/src/main/java/com/saadproductlabs/mizafi/ui/navigation/MizafiNavHost.kt @@ -1,4 +1,4 @@ -package com.example.flowfi.ui.navigation +package com.saadproductlabs.mizafi.ui.navigation import androidx.compose.runtime.Composable import androidx.navigation.NavHostController @@ -7,14 +7,14 @@ import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.navArgument import androidx.navigation.compose.rememberNavController -import com.example.flowfi.ui.screens.DashboardScreen -import com.example.flowfi.ui.screens.InsightsScreen -import com.example.flowfi.ui.screens.TransactionEntryScreen -import com.example.flowfi.ui.screens.TransactionListScreen -import com.example.flowfi.viewmodel.TransactionViewModel +import com.saadproductlabs.mizafi.ui.screens.DashboardScreen +import com.saadproductlabs.mizafi.ui.screens.InsightsScreen +import com.saadproductlabs.mizafi.ui.screens.TransactionEntryScreen +import com.saadproductlabs.mizafi.ui.screens.TransactionListScreen +import com.saadproductlabs.mizafi.viewmodel.TransactionViewModel @Composable -fun FlowFiNavHost( +fun MizafiNavHost( viewModel: TransactionViewModel, navController: NavHostController = rememberNavController() ) { diff --git a/app/src/main/java/com/example/flowfi/ui/navigation/NavDestinations.kt b/app/src/main/java/com/saadproductlabs/mizafi/ui/navigation/NavDestinations.kt similarity index 89% rename from app/src/main/java/com/example/flowfi/ui/navigation/NavDestinations.kt rename to app/src/main/java/com/saadproductlabs/mizafi/ui/navigation/NavDestinations.kt index ed6b138..dfe9e2f 100644 --- a/app/src/main/java/com/example/flowfi/ui/navigation/NavDestinations.kt +++ b/app/src/main/java/com/saadproductlabs/mizafi/ui/navigation/NavDestinations.kt @@ -1,4 +1,4 @@ -package com.example.flowfi.ui.navigation +package com.saadproductlabs.mizafi.ui.navigation sealed class Screen(val route: String) { object Dashboard : Screen("dashboard") diff --git a/app/src/main/java/com/example/flowfi/ui/screens/DashboardScreen.kt b/app/src/main/java/com/saadproductlabs/mizafi/ui/screens/DashboardScreen.kt similarity index 92% rename from app/src/main/java/com/example/flowfi/ui/screens/DashboardScreen.kt rename to app/src/main/java/com/saadproductlabs/mizafi/ui/screens/DashboardScreen.kt index 1877dcb..f1d6c95 100644 --- a/app/src/main/java/com/example/flowfi/ui/screens/DashboardScreen.kt +++ b/app/src/main/java/com/saadproductlabs/mizafi/ui/screens/DashboardScreen.kt @@ -1,4 +1,4 @@ -package com.example.flowfi.ui.screens +package com.saadproductlabs.mizafi.ui.screens import androidx.compose.foundation.background import androidx.compose.foundation.layout.* @@ -23,16 +23,16 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp -import com.example.flowfi.data.entity.TransactionEntity -import com.example.flowfi.data.entity.TransactionType -import com.example.flowfi.ui.theme.ExpenseRed -import com.example.flowfi.ui.theme.ExpenseRedContainer -import com.example.flowfi.ui.theme.IncomeGreen -import com.example.flowfi.ui.theme.IncomeGreenContainer -import com.example.flowfi.ui.util.formatCurrency -import com.example.flowfi.ui.util.formatCurrentMonthYear -import com.example.flowfi.ui.util.formatTransactionDate -import com.example.flowfi.viewmodel.TransactionViewModel +import com.saadproductlabs.mizafi.data.entity.TransactionEntity +import com.saadproductlabs.mizafi.data.entity.TransactionType +import com.saadproductlabs.mizafi.ui.theme.ExpenseRed +import com.saadproductlabs.mizafi.ui.theme.ExpenseRedContainer +import com.saadproductlabs.mizafi.ui.theme.IncomeGreen +import com.saadproductlabs.mizafi.ui.theme.IncomeGreenContainer +import com.saadproductlabs.mizafi.ui.util.formatCurrency +import com.saadproductlabs.mizafi.ui.util.formatCurrentMonthYear +import com.saadproductlabs.mizafi.ui.util.formatTransactionDate +import com.saadproductlabs.mizafi.viewmodel.TransactionViewModel @OptIn(ExperimentalMaterial3Api::class) @Composable @@ -48,9 +48,9 @@ fun DashboardScreen( Scaffold( contentWindowInsets = WindowInsets.safeDrawing, topBar = { - TopAppBar( - title = { Text("FlowFi", fontWeight = FontWeight.Bold) }, - colors = TopAppBarDefaults.topAppBarColors( + CenterAlignedTopAppBar( + title = { Text("Mizafi", fontWeight = FontWeight.Bold) }, + colors = TopAppBarDefaults.centerAlignedTopAppBarColors( containerColor = MaterialTheme.colorScheme.primaryContainer, titleContentColor = MaterialTheme.colorScheme.onPrimaryContainer ) @@ -148,7 +148,7 @@ fun DashboardScreen( @Composable private fun GuidancePreviewCard( - topInsight: com.example.flowfi.domain.BehavioralInsight?, + topInsight: com.saadproductlabs.mizafi.domain.BehavioralInsight?, onViewInsights: () -> Unit ) { Card( diff --git a/app/src/main/java/com/example/flowfi/ui/screens/InsightsScreen.kt b/app/src/main/java/com/saadproductlabs/mizafi/ui/screens/InsightsScreen.kt similarity index 94% rename from app/src/main/java/com/example/flowfi/ui/screens/InsightsScreen.kt rename to app/src/main/java/com/saadproductlabs/mizafi/ui/screens/InsightsScreen.kt index eb12b44..d6103e3 100644 --- a/app/src/main/java/com/example/flowfi/ui/screens/InsightsScreen.kt +++ b/app/src/main/java/com/saadproductlabs/mizafi/ui/screens/InsightsScreen.kt @@ -1,4 +1,4 @@ -package com.example.flowfi.ui.screens +package com.saadproductlabs.mizafi.ui.screens import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.WindowInsets @@ -27,18 +27,18 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp -import com.example.flowfi.data.entity.SavingsGoalEntity -import com.example.flowfi.domain.BehavioralInsight -import com.example.flowfi.domain.InsightTone -import com.example.flowfi.ui.components.CategoryBarChart -import com.example.flowfi.ui.theme.ExpenseRed -import com.example.flowfi.ui.theme.ExpenseRedContainer -import com.example.flowfi.ui.theme.IncomeGreen -import com.example.flowfi.ui.theme.IncomeGreenContainer -import com.example.flowfi.ui.util.formatCurrency -import com.example.flowfi.ui.util.formatCurrentMonthYear -import com.example.flowfi.ui.util.isValidAmountInput -import com.example.flowfi.viewmodel.TransactionViewModel +import com.saadproductlabs.mizafi.data.entity.SavingsGoalEntity +import com.saadproductlabs.mizafi.domain.BehavioralInsight +import com.saadproductlabs.mizafi.domain.InsightTone +import com.saadproductlabs.mizafi.ui.components.CategoryBarChart +import com.saadproductlabs.mizafi.ui.theme.ExpenseRed +import com.saadproductlabs.mizafi.ui.theme.ExpenseRedContainer +import com.saadproductlabs.mizafi.ui.theme.IncomeGreen +import com.saadproductlabs.mizafi.ui.theme.IncomeGreenContainer +import com.saadproductlabs.mizafi.ui.util.formatCurrency +import com.saadproductlabs.mizafi.ui.util.formatCurrentMonthYear +import com.saadproductlabs.mizafi.ui.util.isValidAmountInput +import com.saadproductlabs.mizafi.viewmodel.TransactionViewModel private val goalPresets = listOf("Emergency fund", "Bike", "Marriage", "Travel") @@ -187,7 +187,7 @@ private fun GuidanceHeroCard() { ) Spacer(modifier = Modifier.height(8.dp)) Text( - text = "FlowFi highlights trends, category mix, and goal progress so you can act—not just read numbers.", + text = "Mizafi highlights trends, category mix, and goal progress so you can act—not just read numbers.", style = MaterialTheme.typography.bodyMedium, color = MaterialTheme.colorScheme.onSecondaryContainer.copy(alpha = 0.85f) ) @@ -260,7 +260,7 @@ fun BehavioralInsightCard(insight: BehavioralInsight) { @Composable private fun AnalyticsCard( - breakdown: List, + breakdown: List, chartColors: List ) { Card( diff --git a/app/src/main/java/com/example/flowfi/ui/screens/TransactionEntryScreen.kt b/app/src/main/java/com/saadproductlabs/mizafi/ui/screens/TransactionEntryScreen.kt similarity index 94% rename from app/src/main/java/com/example/flowfi/ui/screens/TransactionEntryScreen.kt rename to app/src/main/java/com/saadproductlabs/mizafi/ui/screens/TransactionEntryScreen.kt index d51c1fb..9905d9a 100644 --- a/app/src/main/java/com/example/flowfi/ui/screens/TransactionEntryScreen.kt +++ b/app/src/main/java/com/saadproductlabs/mizafi/ui/screens/TransactionEntryScreen.kt @@ -1,4 +1,4 @@ -package com.example.flowfi.ui.screens +package com.saadproductlabs.mizafi.ui.screens import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.WindowInsets @@ -14,14 +14,14 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.unit.dp -import com.example.flowfi.data.entity.TransactionEntity -import com.example.flowfi.data.entity.TransactionType -import com.example.flowfi.ui.model.TransactionCategories -import com.example.flowfi.ui.util.currencyPrefix -import com.example.flowfi.ui.util.formatAmountForInput -import com.example.flowfi.ui.util.formatTransactionDate -import com.example.flowfi.ui.util.isValidAmountInput -import com.example.flowfi.viewmodel.TransactionViewModel +import com.saadproductlabs.mizafi.data.entity.TransactionEntity +import com.saadproductlabs.mizafi.data.entity.TransactionType +import com.saadproductlabs.mizafi.ui.model.TransactionCategories +import com.saadproductlabs.mizafi.ui.util.currencyPrefix +import com.saadproductlabs.mizafi.ui.util.formatAmountForInput +import com.saadproductlabs.mizafi.ui.util.formatTransactionDate +import com.saadproductlabs.mizafi.ui.util.isValidAmountInput +import com.saadproductlabs.mizafi.viewmodel.TransactionViewModel @OptIn(ExperimentalMaterial3Api::class) @Composable diff --git a/app/src/main/java/com/example/flowfi/ui/screens/TransactionListScreen.kt b/app/src/main/java/com/saadproductlabs/mizafi/ui/screens/TransactionListScreen.kt similarity index 97% rename from app/src/main/java/com/example/flowfi/ui/screens/TransactionListScreen.kt rename to app/src/main/java/com/saadproductlabs/mizafi/ui/screens/TransactionListScreen.kt index 8ec57bd..f8372d5 100644 --- a/app/src/main/java/com/example/flowfi/ui/screens/TransactionListScreen.kt +++ b/app/src/main/java/com/saadproductlabs/mizafi/ui/screens/TransactionListScreen.kt @@ -1,4 +1,4 @@ -package com.example.flowfi.ui.screens +package com.saadproductlabs.mizafi.ui.screens import androidx.compose.foundation.background import androidx.compose.foundation.layout.* @@ -16,10 +16,10 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp -import com.example.flowfi.ui.model.TransactionListFilters -import com.example.flowfi.ui.theme.ExpenseRed -import com.example.flowfi.ui.util.formatTransactionDate -import com.example.flowfi.viewmodel.TransactionViewModel +import com.saadproductlabs.mizafi.ui.model.TransactionListFilters +import com.saadproductlabs.mizafi.ui.theme.ExpenseRed +import com.saadproductlabs.mizafi.ui.util.formatTransactionDate +import com.saadproductlabs.mizafi.viewmodel.TransactionViewModel import kotlinx.coroutines.launch @OptIn(ExperimentalMaterial3Api::class) @@ -202,7 +202,7 @@ fun TransactionListScreen( private fun TransactionFilterFields( selectedMonthLabel: String, selectedCategoryLabel: String, - monthOptions: List, + monthOptions: List, categoryOptions: List, onMonthSelected: (String?) -> Unit, onCategorySelected: (String?) -> Unit diff --git a/app/src/main/java/com/example/flowfi/ui/theme/Color.kt b/app/src/main/java/com/saadproductlabs/mizafi/ui/theme/Color.kt similarity index 90% rename from app/src/main/java/com/example/flowfi/ui/theme/Color.kt rename to app/src/main/java/com/saadproductlabs/mizafi/ui/theme/Color.kt index 4acdc5f..ccc742b 100644 --- a/app/src/main/java/com/example/flowfi/ui/theme/Color.kt +++ b/app/src/main/java/com/saadproductlabs/mizafi/ui/theme/Color.kt @@ -1,4 +1,4 @@ -package com.example.flowfi.ui.theme +package com.saadproductlabs.mizafi.ui.theme import androidx.compose.ui.graphics.Color diff --git a/app/src/main/java/com/example/flowfi/ui/theme/Theme.kt b/app/src/main/java/com/saadproductlabs/mizafi/ui/theme/Theme.kt similarity index 96% rename from app/src/main/java/com/example/flowfi/ui/theme/Theme.kt rename to app/src/main/java/com/saadproductlabs/mizafi/ui/theme/Theme.kt index 6a0233f..be4bd5f 100644 --- a/app/src/main/java/com/example/flowfi/ui/theme/Theme.kt +++ b/app/src/main/java/com/saadproductlabs/mizafi/ui/theme/Theme.kt @@ -1,4 +1,4 @@ -package com.example.flowfi.ui.theme +package com.saadproductlabs.mizafi.ui.theme import android.app.Activity import android.os.Build @@ -34,7 +34,7 @@ private val LightColorScheme = lightColorScheme( ) @Composable -fun FlowFiTheme( +fun MizafiTheme( darkTheme: Boolean = isSystemInDarkTheme(), // Dynamic color is available on Android 12+ dynamicColor: Boolean = true, diff --git a/app/src/main/java/com/example/flowfi/ui/theme/Type.kt b/app/src/main/java/com/saadproductlabs/mizafi/ui/theme/Type.kt similarity index 95% rename from app/src/main/java/com/example/flowfi/ui/theme/Type.kt rename to app/src/main/java/com/saadproductlabs/mizafi/ui/theme/Type.kt index ca8f5ff..6c93ec6 100644 --- a/app/src/main/java/com/example/flowfi/ui/theme/Type.kt +++ b/app/src/main/java/com/saadproductlabs/mizafi/ui/theme/Type.kt @@ -1,4 +1,4 @@ -package com.example.flowfi.ui.theme +package com.saadproductlabs.mizafi.ui.theme import androidx.compose.material3.Typography import androidx.compose.ui.text.TextStyle diff --git a/app/src/main/java/com/example/flowfi/ui/util/Formatters.kt b/app/src/main/java/com/saadproductlabs/mizafi/ui/util/Formatters.kt similarity index 97% rename from app/src/main/java/com/example/flowfi/ui/util/Formatters.kt rename to app/src/main/java/com/saadproductlabs/mizafi/ui/util/Formatters.kt index 578467e..88c562c 100644 --- a/app/src/main/java/com/example/flowfi/ui/util/Formatters.kt +++ b/app/src/main/java/com/saadproductlabs/mizafi/ui/util/Formatters.kt @@ -1,4 +1,4 @@ -package com.example.flowfi.ui.util +package com.saadproductlabs.mizafi.ui.util import java.text.NumberFormat import java.text.SimpleDateFormat diff --git a/app/src/main/java/com/example/flowfi/util/DateUtils.kt b/app/src/main/java/com/saadproductlabs/mizafi/util/DateUtils.kt similarity index 98% rename from app/src/main/java/com/example/flowfi/util/DateUtils.kt rename to app/src/main/java/com/saadproductlabs/mizafi/util/DateUtils.kt index 0b13fd2..54a8592 100644 --- a/app/src/main/java/com/example/flowfi/util/DateUtils.kt +++ b/app/src/main/java/com/saadproductlabs/mizafi/util/DateUtils.kt @@ -1,4 +1,4 @@ -package com.example.flowfi.util +package com.saadproductlabs.mizafi.util import java.util.Calendar diff --git a/app/src/main/java/com/example/flowfi/viewmodel/TransactionViewModel.kt b/app/src/main/java/com/saadproductlabs/mizafi/viewmodel/TransactionViewModel.kt similarity index 82% rename from app/src/main/java/com/example/flowfi/viewmodel/TransactionViewModel.kt rename to app/src/main/java/com/saadproductlabs/mizafi/viewmodel/TransactionViewModel.kt index 7f5d219..1a414ac 100644 --- a/app/src/main/java/com/example/flowfi/viewmodel/TransactionViewModel.kt +++ b/app/src/main/java/com/saadproductlabs/mizafi/viewmodel/TransactionViewModel.kt @@ -1,17 +1,17 @@ -package com.example.flowfi.viewmodel +package com.saadproductlabs.mizafi.viewmodel import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import com.example.flowfi.data.entity.SavingsGoalEntity -import com.example.flowfi.data.entity.TransactionEntity -import com.example.flowfi.data.entity.TransactionType -import com.example.flowfi.data.repository.SavingsGoalRepository -import com.example.flowfi.data.repository.TransactionRepository -import com.example.flowfi.domain.BehavioralInsight -import com.example.flowfi.domain.CategoryAnalytics -import com.example.flowfi.domain.CategorySpend -import com.example.flowfi.domain.InsightEngine -import com.example.flowfi.util.DateUtils +import com.saadproductlabs.mizafi.data.entity.SavingsGoalEntity +import com.saadproductlabs.mizafi.data.entity.TransactionEntity +import com.saadproductlabs.mizafi.data.entity.TransactionType +import com.saadproductlabs.mizafi.data.repository.SavingsGoalRepository +import com.saadproductlabs.mizafi.data.repository.TransactionRepository +import com.saadproductlabs.mizafi.domain.BehavioralInsight +import com.saadproductlabs.mizafi.domain.CategoryAnalytics +import com.saadproductlabs.mizafi.domain.CategorySpend +import com.saadproductlabs.mizafi.domain.InsightEngine +import com.saadproductlabs.mizafi.util.DateUtils import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.combine diff --git a/app/src/main/java/com/example/flowfi/viewmodel/TransactionViewModelFactory.kt b/app/src/main/java/com/saadproductlabs/mizafi/viewmodel/TransactionViewModelFactory.kt similarity index 76% rename from app/src/main/java/com/example/flowfi/viewmodel/TransactionViewModelFactory.kt rename to app/src/main/java/com/saadproductlabs/mizafi/viewmodel/TransactionViewModelFactory.kt index acd9b01..de7fccd 100644 --- a/app/src/main/java/com/example/flowfi/viewmodel/TransactionViewModelFactory.kt +++ b/app/src/main/java/com/saadproductlabs/mizafi/viewmodel/TransactionViewModelFactory.kt @@ -1,9 +1,9 @@ -package com.example.flowfi.viewmodel +package com.saadproductlabs.mizafi.viewmodel import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider -import com.example.flowfi.data.repository.SavingsGoalRepository -import com.example.flowfi.data.repository.TransactionRepository +import com.saadproductlabs.mizafi.data.repository.SavingsGoalRepository +import com.saadproductlabs.mizafi.data.repository.TransactionRepository class TransactionViewModelFactory( private val transactionRepository: TransactionRepository, diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c8d58d5..4668b84 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,3 +1,3 @@ - FlowFi + Mizafi \ No newline at end of file diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 257e6bf..7f5b1dd 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -1,4 +1,4 @@ -