diff --git a/.idea/compiler.xml b/.idea/compiler.xml
index 8b3f102..8fabff5 100644
--- a/.idea/compiler.xml
+++ b/.idea/compiler.xml
@@ -1,6 +1,6 @@
-
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index b2c751a..1896758 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,6 +1,7 @@
+
-
+
diff --git a/app/src/main/java/com/approagency/pharmacy/DrugApp.kt b/app/src/main/java/com/approagency/pharmacy/DrugApp.kt
index d305b49..1172fcc 100644
--- a/app/src/main/java/com/approagency/pharmacy/DrugApp.kt
+++ b/app/src/main/java/com/approagency/pharmacy/DrugApp.kt
@@ -3,12 +3,18 @@ package com.approagency.pharmacy
import android.app.Application
import com.approagency.pharmacy.data.local.database.LabDatabase
import com.approagency.pharmacy.di.appModule
-import kotlinx.coroutines.GlobalScope
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.launch
import org.koin.android.ext.koin.androidContext
import org.koin.core.context.startKoin
-class DrugApp : Application(){
+class DrugApp : Application() {
+
+ // اسکوپ سطحاپ برای کارهای پسزمینهی طولعمرِ برنامه (بهجای GlobalScope).
+ private val applicationScope = CoroutineScope(SupervisorJob() + Dispatchers.IO)
+
override fun onCreate() {
super.onCreate()
startKoin {
@@ -17,9 +23,9 @@ class DrugApp : Application(){
printLogger()
}
- // Preload database (optional, for faster access)
- GlobalScope.launch {
+ // پیشبارگذاری دیتابیس برای دسترسی سریعتر
+ applicationScope.launch {
LabDatabase.getInstance(this@DrugApp)
}
}
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/com/approagency/pharmacy/MainActivity.kt b/app/src/main/java/com/approagency/pharmacy/MainActivity.kt
index 57b6986..a0fe469 100644
--- a/app/src/main/java/com/approagency/pharmacy/MainActivity.kt
+++ b/app/src/main/java/com/approagency/pharmacy/MainActivity.kt
@@ -20,6 +20,7 @@ import com.approagency.pharmacy.data.local.SessionManager
import com.approagency.pharmacy.domain.repository.AuthRepository
import com.approagency.pharmacy.navigation.AppNavGraph
import com.approagency.pharmacy.presentation.account.OtpAutoFillBus
+import com.approagency.pharmacy.presentation.account.OtpAutofillController
import com.approagency.pharmacy.ui.theme.DrugTheme
import com.google.android.gms.auth.api.phone.SmsRetriever
import com.google.android.gms.common.api.CommonStatusCodes
@@ -27,7 +28,7 @@ import com.google.android.gms.common.api.Status
import kotlinx.coroutines.launch
import org.koin.android.ext.android.inject
-class MainActivity : ComponentActivity() {
+class MainActivity : ComponentActivity(), OtpAutofillController {
private val session: SessionManager by inject()
private val authRepository: AuthRepository by inject()
@@ -71,7 +72,7 @@ class MainActivity : ComponentActivity() {
// ---------- خودکارپُرکُنِ کد پیامک (SMS User Consent API) ----------
/** آغاز گوشدادن به پیامکِ کد؛ کدِ یافتشده از طریق [OtpAutoFillBus] تحویل میشود. */
- fun startOtpAutofill() {
+ override fun startOtpAutofill() {
SmsRetriever.getClient(this).startSmsUserConsent(null)
if (otpSmsReceiver != null) return
val receiver = object : BroadcastReceiver() {
@@ -103,7 +104,7 @@ class MainActivity : ComponentActivity() {
)
}
- fun stopOtpAutofill() {
+ override fun stopOtpAutofill() {
otpSmsReceiver?.let { runCatching { unregisterReceiver(it) } }
otpSmsReceiver = null
}
diff --git a/app/src/main/java/com/approagency/pharmacy/data/local/SessionManager.kt b/app/src/main/java/com/approagency/pharmacy/data/local/SessionManager.kt
index 86d1c32..a3b2b81 100644
--- a/app/src/main/java/com/approagency/pharmacy/data/local/SessionManager.kt
+++ b/app/src/main/java/com/approagency/pharmacy/data/local/SessionManager.kt
@@ -2,7 +2,7 @@ package com.approagency.pharmacy.data.local
import android.content.Context
import android.content.SharedPreferences
-import com.approagency.pharmacy.ui.theme.ThemeMode
+import com.approagency.pharmacy.domain.model.ThemeMode
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
diff --git a/app/src/main/java/com/approagency/pharmacy/data/repository/DrugRepositoryImpl.kt b/app/src/main/java/com/approagency/pharmacy/data/repository/DrugRepositoryImpl.kt
index 01e4bf6..cbadbe1 100644
--- a/app/src/main/java/com/approagency/pharmacy/data/repository/DrugRepositoryImpl.kt
+++ b/app/src/main/java/com/approagency/pharmacy/data/repository/DrugRepositoryImpl.kt
@@ -37,10 +37,8 @@ class DrugRepositoryImpl(
override suspend fun drugDetail(cod: Int): Result {
return try {
val response= apiService.getDrugDetail(cod = cod)
- println(response.message)
return Result.success(response)
}catch (e: Exception){
- println(e.message)
Result.failure(e)
}
}
@@ -48,7 +46,6 @@ class DrugRepositoryImpl(
override suspend fun getGorohDaroei(): Result {
return try {
val response = apiService.getGorohDaroei()
- println(response)
return Result.success(response)
}catch (e: Exception){
Result.failure(e)
@@ -63,8 +60,6 @@ class DrugRepositoryImpl(
pageNumber = params.pageNumber
)
- println("HTML Response length: ${htmlResponse.length}")
-
val searchResult = parser.parseSearchResultsWithPagination(htmlResponse)
Result.success(searchResult)
diff --git a/app/src/main/java/com/approagency/pharmacy/ui/theme/ThemeMode.kt b/app/src/main/java/com/approagency/pharmacy/domain/model/ThemeMode.kt
similarity index 76%
rename from app/src/main/java/com/approagency/pharmacy/ui/theme/ThemeMode.kt
rename to app/src/main/java/com/approagency/pharmacy/domain/model/ThemeMode.kt
index 4b183a2..ba7c3d3 100644
--- a/app/src/main/java/com/approagency/pharmacy/ui/theme/ThemeMode.kt
+++ b/app/src/main/java/com/approagency/pharmacy/domain/model/ThemeMode.kt
@@ -1,4 +1,4 @@
-package com.approagency.pharmacy.ui.theme
+package com.approagency.pharmacy.domain.model
/** حالت نمایش انتخابی کاربر؛ پیشفرض پیروی از سیستم است. */
enum class ThemeMode { SYSTEM, LIGHT, DARK }
diff --git a/app/src/main/java/com/approagency/pharmacy/navigation/AccountAppBar.kt b/app/src/main/java/com/approagency/pharmacy/navigation/AccountAppBar.kt
new file mode 100644
index 0000000..3d29804
--- /dev/null
+++ b/app/src/main/java/com/approagency/pharmacy/navigation/AccountAppBar.kt
@@ -0,0 +1,69 @@
+package com.approagency.pharmacy.navigation
+
+import androidx.compose.foundation.layout.Column
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Menu
+import androidx.compose.material3.ElevatedButton
+import androidx.compose.material3.ExperimentalMaterial3Api
+import androidx.compose.material3.Icon
+import androidx.compose.material3.IconButton
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.Text
+import androidx.compose.material3.TopAppBar
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.text.style.TextAlign
+import com.approagency.pharmacy.data.local.AccountState
+
+/**
+ * نوار بالای اپ: دکمهی منو، اطلاعات حساب (موبایل + وضعیت اشتراک) و کنشِ
+ * ورود/خرید اشتراک.
+ */
+@OptIn(ExperimentalMaterial3Api::class)
+@Composable
+fun AccountAppBar(
+ account: AccountState,
+ onMenuClick: () -> Unit,
+ onAccountClick: () -> Unit
+) {
+ TopAppBar(
+ navigationIcon = {
+ IconButton(onClick = onMenuClick) {
+ Icon(
+ imageVector = Icons.Filled.Menu,
+ contentDescription = "منو"
+ )
+ }
+ },
+ title = {
+ if (account.isLoggedIn) {
+ Column {
+ Text(
+ text = account.mobile ?: account.displayName.orEmpty(),
+ style = MaterialTheme.typography.bodyMedium
+ )
+ Text(
+ text = account.subscriptionTitle ?: "بدون اشتراک",
+ style = MaterialTheme.typography.labelSmall,
+ color = if (account.isSubscribed)
+ MaterialTheme.colorScheme.primary
+ else
+ MaterialTheme.colorScheme.onSurfaceVariant
+ )
+ }
+ } else {
+ Text(text = "دارویاب", style = MaterialTheme.typography.titleMedium)
+ }
+ },
+ actions = {
+ if (!account.isLoggedIn) {
+ ElevatedButton(onClick = onAccountClick) {
+ Text("ورود", textAlign = TextAlign.Center)
+ }
+ } else if (!account.isSubscribed) {
+ ElevatedButton(onClick = onAccountClick) {
+ Text("خرید اشتراک", textAlign = TextAlign.Center)
+ }
+ }
+ }
+ )
+}
diff --git a/app/src/main/java/com/approagency/pharmacy/navigation/MainContainer.kt b/app/src/main/java/com/approagency/pharmacy/navigation/MainContainer.kt
index 59a6a7d..f69aa7a 100644
--- a/app/src/main/java/com/approagency/pharmacy/navigation/MainContainer.kt
+++ b/app/src/main/java/com/approagency/pharmacy/navigation/MainContainer.kt
@@ -1,22 +1,11 @@
package com.approagency.pharmacy.navigation
import androidx.compose.foundation.layout.Box
-import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.padding
-import androidx.compose.material.icons.Icons
-import androidx.compose.material.icons.filled.AccountCircle
-import androidx.compose.material.icons.filled.Menu
import androidx.compose.material3.DrawerValue
-import androidx.compose.material3.ElevatedButton
import androidx.compose.material3.ExperimentalMaterial3Api
-import androidx.compose.material3.Icon
-import androidx.compose.material3.IconButton
-import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.ModalNavigationDrawer
import androidx.compose.material3.Scaffold
-import androidx.compose.material3.Text
-import androidx.compose.material3.TextButton
-import androidx.compose.material3.TopAppBar
import androidx.compose.material3.rememberDrawerState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
@@ -27,9 +16,7 @@ import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
-import androidx.compose.ui.text.style.TextAlign
import androidx.navigation.NavHostController
-import com.approagency.pharmacy.data.local.AccountState
import com.approagency.pharmacy.data.local.SessionManager
import com.approagency.pharmacy.domain.repository.AuthRepository
import com.approagency.pharmacy.presentation.account.AccountDrawer
@@ -112,53 +99,3 @@ fun MainContainer(
)
}
}
-
-@OptIn(ExperimentalMaterial3Api::class)
-@Composable
-private fun AccountAppBar(
- account: AccountState,
- onMenuClick: () -> Unit,
- onAccountClick: () -> Unit
-) {
- TopAppBar(
- navigationIcon = {
- IconButton(onClick = onMenuClick) {
- Icon(
- imageVector = Icons.Filled.Menu,
- contentDescription = "منو"
- )
- }
- },
- title = {
- if (account.isLoggedIn) {
- Column {
- Text(
- text = account.mobile ?: account.displayName.orEmpty(),
- style = MaterialTheme.typography.bodyMedium
- )
- Text(
- text = account.subscriptionTitle ?: "بدون اشتراک",
- style = MaterialTheme.typography.labelSmall,
- color = if (account.isSubscribed)
- MaterialTheme.colorScheme.primary
- else
- MaterialTheme.colorScheme.onSurfaceVariant
- )
- }
- } else {
- Text(text = "دارویاب", style = MaterialTheme.typography.titleMedium)
- }
- },
- actions = {
- if (!account.isLoggedIn) {
- ElevatedButton(onClick = onAccountClick) {
- Text("ورود", textAlign = TextAlign.Center)
- }
- }else if (!account.isSubscribed){
- ElevatedButton(onClick = onAccountClick) {
- Text("خرید اشتراک", textAlign = TextAlign.Center)
- }
- }
- }
- )
-}
diff --git a/app/src/main/java/com/approagency/pharmacy/presentation/account/AccountDrawer.kt b/app/src/main/java/com/approagency/pharmacy/presentation/account/AccountDrawer.kt
index fc3efe3..ec15097 100644
--- a/app/src/main/java/com/approagency/pharmacy/presentation/account/AccountDrawer.kt
+++ b/app/src/main/java/com/approagency/pharmacy/presentation/account/AccountDrawer.kt
@@ -43,7 +43,7 @@ import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.LayoutDirection
import androidx.compose.ui.unit.dp
import com.approagency.pharmacy.data.local.AccountState
-import com.approagency.pharmacy.ui.theme.ThemeMode
+import com.approagency.pharmacy.domain.model.ThemeMode
import com.vada.caller.ui.theme.dime
/**
diff --git a/app/src/main/java/com/approagency/pharmacy/presentation/account/AccountSheet.kt b/app/src/main/java/com/approagency/pharmacy/presentation/account/AccountSheet.kt
index c51adeb..4e9becb 100644
--- a/app/src/main/java/com/approagency/pharmacy/presentation/account/AccountSheet.kt
+++ b/app/src/main/java/com/approagency/pharmacy/presentation/account/AccountSheet.kt
@@ -12,9 +12,7 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.heightIn
import androidx.compose.foundation.layout.padding
-import androidx.compose.foundation.layout.width
import androidx.compose.foundation.text.KeyboardOptions
-import androidx.compose.material3.Card
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.OutlinedTextField
@@ -26,7 +24,6 @@ import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
-import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalLayoutDirection
@@ -35,12 +32,9 @@ import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.LayoutDirection
import androidx.compose.ui.unit.dp
-import com.approagency.pharmacy.MainActivity
-import com.approagency.pharmacy.domain.model.SubscriptionProduct
import com.approagency.pharmacy.presentation.common.CustomModalBottomSheet
import com.approagency.pharmacy.presentation.common.OtpTextField
import com.approagency.pharmacy.presentation.common.PrimaryButton
-import com.approagency.pharmacy.presentation.common.shimmer
import com.approagency.pharmacy.presentation.viewModel.AccountPhase
import com.approagency.pharmacy.presentation.viewModel.AccountViewModel
import com.vada.caller.ui.theme.dime
@@ -71,9 +65,9 @@ fun AccountSheet(
// در مرحلهی کد، گوشدادن به پیامک را آغاز کن و با خروج متوقفش کن.
val isOtpStep = ui.phase == AccountPhase.EnterOtp
DisposableEffect(isOtpStep) {
- val mainActivity = activity as? MainActivity
- if (isOtpStep) mainActivity?.startOtpAutofill()
- onDispose { mainActivity?.stopOtpAutofill() }
+ val autofill = activity as? OtpAutofillController
+ if (isOtpStep) autofill?.startOtpAutofill()
+ onDispose { autofill?.stopOtpAutofill() }
}
// کدِ خواندهشده از پیامک را در فیلد بگذار و بهصورت خودکار تأیید کن.
@@ -151,13 +145,13 @@ fun AccountSheet(
ui.productsLoading -> Column(
verticalArrangement = Arrangement.spacedBy(MaterialTheme.dime.md)
) {
- repeat(2) { ProductCardSkeleton() }
+ repeat(2) { SubscriptionProductCardSkeleton() }
}
else -> Column(
verticalArrangement = Arrangement.spacedBy(MaterialTheme.dime.md)
) {
ui.products.forEach { product ->
- ProductCard(
+ SubscriptionProductCard(
product = product,
isPurchasing = ui.purchasingProductId == product.id,
onBuy = { activity?.let { viewModel.purchase(it, product) } }
@@ -205,74 +199,3 @@ private fun SheetTitle(text: String) {
Text(text = text, style = MaterialTheme.typography.titleLarge, fontWeight = FontWeight.Bold)
Spacer(Modifier.height(MaterialTheme.dime.xs))
}
-
-@Composable
-private fun ProductCard(
- product: SubscriptionProduct,
- isPurchasing: Boolean,
- onBuy: () -> Unit
-) {
- Card(modifier = Modifier.fillMaxWidth()) {
- Column(modifier = Modifier.padding(MaterialTheme.dime.lg)) {
- Row(
- modifier = Modifier.fillMaxWidth(),
- horizontalArrangement = Arrangement.SpaceBetween,
- verticalAlignment = Alignment.CenterVertically
- ) {
- Text(product.title, style = MaterialTheme.typography.titleMedium)
- Text(
- "${formatPrice(product.price)} تومان",
- style = MaterialTheme.typography.titleSmall,
- color = MaterialTheme.colorScheme.primary
- )
- }
- if (!product.description.isNullOrBlank()) {
- Spacer(Modifier.height(MaterialTheme.dime.xs))
- Text(
- product.description,
- style = MaterialTheme.typography.bodySmall,
- color = MaterialTheme.colorScheme.onSurfaceVariant
- )
- }
- Spacer(Modifier.height(MaterialTheme.dime.md))
- PrimaryButton(text = "خرید", height = 44, isLoading = isPurchasing, onClick = onBuy)
- }
- }
-}
-
-/** جایگیرندهی shimmer برای کارت محصول هنگام بارگذاری. */
-@Composable
-private fun ProductCardSkeleton() {
- Card(modifier = Modifier.fillMaxWidth()) {
- Column(modifier = Modifier.padding(MaterialTheme.dime.lg)) {
- Row(
- modifier = Modifier.fillMaxWidth(),
- horizontalArrangement = Arrangement.SpaceBetween
- ) {
- Box(
- Modifier
- .width(120.dp)
- .height(18.dp)
- .shimmer()
- )
- Box(
- Modifier
- .width(72.dp)
- .height(18.dp)
- .shimmer()
- )
- }
- Spacer(Modifier.height(MaterialTheme.dime.md))
- Box(
- Modifier
- .fillMaxWidth()
- .height(44.dp)
- .shimmer(shape = MaterialTheme.shapes.medium)
- )
- }
- }
-}
-
-/** قالببندی قیمت با جداکنندهی هزارگان. */
-private fun formatPrice(price: Long): String =
- price.toString().reversed().chunked(3).joinToString(",").reversed()
diff --git a/app/src/main/java/com/approagency/pharmacy/presentation/account/OtpAutofillController.kt b/app/src/main/java/com/approagency/pharmacy/presentation/account/OtpAutofillController.kt
new file mode 100644
index 0000000..5be59d1
--- /dev/null
+++ b/app/src/main/java/com/approagency/pharmacy/presentation/account/OtpAutofillController.kt
@@ -0,0 +1,12 @@
+package com.approagency.pharmacy.presentation.account
+
+/**
+ * قراردادِ شروع/توقفِ خودکارپُرکُنِ کدِ پیامک.
+ *
+ * اکتیویتی میزبان آن را پیادهسازی میکند؛ شیتِ ورود فقط به این اینترفیس وابسته
+ * است و از نوعِ مشخصِ اکتیویتی بیخبر میماند.
+ */
+interface OtpAutofillController {
+ fun startOtpAutofill()
+ fun stopOtpAutofill()
+}
diff --git a/app/src/main/java/com/approagency/pharmacy/presentation/account/SubscriptionProductCard.kt b/app/src/main/java/com/approagency/pharmacy/presentation/account/SubscriptionProductCard.kt
new file mode 100644
index 0000000..d3d269c
--- /dev/null
+++ b/app/src/main/java/com/approagency/pharmacy/presentation/account/SubscriptionProductCard.kt
@@ -0,0 +1,94 @@
+package com.approagency.pharmacy.presentation.account
+
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.width
+import androidx.compose.material3.Card
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.unit.dp
+import com.approagency.pharmacy.domain.model.SubscriptionProduct
+import com.approagency.pharmacy.presentation.common.PrimaryButton
+import com.approagency.pharmacy.presentation.common.shimmer
+import com.vada.caller.ui.theme.dime
+
+/** کارت یک محصول اشتراک بههمراه دکمهی خرید. */
+@Composable
+fun SubscriptionProductCard(
+ product: SubscriptionProduct,
+ isPurchasing: Boolean,
+ onBuy: () -> Unit
+) {
+ Card(modifier = Modifier.fillMaxWidth()) {
+ Column(modifier = Modifier.padding(MaterialTheme.dime.lg)) {
+ Row(
+ modifier = Modifier.fillMaxWidth(),
+ horizontalArrangement = Arrangement.SpaceBetween,
+ verticalAlignment = Alignment.CenterVertically
+ ) {
+ Text(product.title, style = MaterialTheme.typography.titleMedium)
+ Text(
+ "${formatPrice(product.price)} تومان",
+ style = MaterialTheme.typography.titleSmall,
+ color = MaterialTheme.colorScheme.primary
+ )
+ }
+ if (!product.description.isNullOrBlank()) {
+ Spacer(Modifier.height(MaterialTheme.dime.xs))
+ Text(
+ product.description,
+ style = MaterialTheme.typography.bodySmall,
+ color = MaterialTheme.colorScheme.onSurfaceVariant
+ )
+ }
+ Spacer(Modifier.height(MaterialTheme.dime.md))
+ PrimaryButton(text = "خرید", height = 44, isLoading = isPurchasing, onClick = onBuy)
+ }
+ }
+}
+
+/** جایگیرندهی shimmer برای کارت محصول هنگام بارگذاری. */
+@Composable
+fun SubscriptionProductCardSkeleton() {
+ Card(modifier = Modifier.fillMaxWidth()) {
+ Column(modifier = Modifier.padding(MaterialTheme.dime.lg)) {
+ Row(
+ modifier = Modifier.fillMaxWidth(),
+ horizontalArrangement = Arrangement.SpaceBetween
+ ) {
+ Box(
+ Modifier
+ .width(120.dp)
+ .height(18.dp)
+ .shimmer()
+ )
+ Box(
+ Modifier
+ .width(72.dp)
+ .height(18.dp)
+ .shimmer()
+ )
+ }
+ Spacer(Modifier.height(MaterialTheme.dime.md))
+ Box(
+ Modifier
+ .fillMaxWidth()
+ .height(44.dp)
+ .shimmer(shape = MaterialTheme.shapes.medium)
+ )
+ }
+ }
+}
+
+/** قالببندی قیمت با جداکنندهی هزارگان. */
+private fun formatPrice(price: Long): String =
+ price.toString().reversed().chunked(3).joinToString(",").reversed()
diff --git a/app/src/main/java/com/approagency/pharmacy/presentation/common/CustomBottonSheet.kt b/app/src/main/java/com/approagency/pharmacy/presentation/common/CustomBottomSheet.kt
similarity index 100%
rename from app/src/main/java/com/approagency/pharmacy/presentation/common/CustomBottonSheet.kt
rename to app/src/main/java/com/approagency/pharmacy/presentation/common/CustomBottomSheet.kt
diff --git a/app/src/main/java/com/approagency/pharmacy/presentation/common/loading.kt b/app/src/main/java/com/approagency/pharmacy/presentation/common/Loading.kt
similarity index 100%
rename from app/src/main/java/com/approagency/pharmacy/presentation/common/loading.kt
rename to app/src/main/java/com/approagency/pharmacy/presentation/common/Loading.kt
diff --git a/app/src/main/java/com/approagency/pharmacy/presentation/common/primaryButton.kt b/app/src/main/java/com/approagency/pharmacy/presentation/common/PrimaryButton.kt
similarity index 100%
rename from app/src/main/java/com/approagency/pharmacy/presentation/common/primaryButton.kt
rename to app/src/main/java/com/approagency/pharmacy/presentation/common/PrimaryButton.kt
diff --git a/app/src/main/java/com/approagency/pharmacy/presentation/viewModel/HomeViewModel.kt b/app/src/main/java/com/approagency/pharmacy/presentation/viewModel/HomeViewModel.kt
index ad0dd3d..7e23536 100644
--- a/app/src/main/java/com/approagency/pharmacy/presentation/viewModel/HomeViewModel.kt
+++ b/app/src/main/java/com/approagency/pharmacy/presentation/viewModel/HomeViewModel.kt
@@ -65,7 +65,6 @@ class HomeViewModel (
viewModelScope.launch {
try {
val result = getDrugSearchUseCase.invoke(drugSearchParams)
- println(result)
_uiState.update { it.copy(
drugSearchState = it.drugSearchState.copy(
isLoading = false,
@@ -74,10 +73,8 @@ class HomeViewModel (
) }
} catch (e: Exception) {
- println(e.message)
handleError(e.toUserMessage())
}catch (e: Exception) {
- println(e.message)
handleError(e.toUserMessage())
}
}
@@ -103,7 +100,6 @@ class HomeViewModel (
)
)
}
- println(result)
} catch (e: Exception) {
handleError(e.toUserMessage())
}catch (e: Exception) {
diff --git a/app/src/main/java/com/approagency/pharmacy/ui/theme/Dimention.kt b/app/src/main/java/com/approagency/pharmacy/ui/theme/Dimension.kt
similarity index 100%
rename from app/src/main/java/com/approagency/pharmacy/ui/theme/Dimention.kt
rename to app/src/main/java/com/approagency/pharmacy/ui/theme/Dimension.kt
diff --git a/app/src/main/java/com/approagency/pharmacy/ui/theme/Theme.kt b/app/src/main/java/com/approagency/pharmacy/ui/theme/Theme.kt
index f2a3b51..7eea201 100644
--- a/app/src/main/java/com/approagency/pharmacy/ui/theme/Theme.kt
+++ b/app/src/main/java/com/approagency/pharmacy/ui/theme/Theme.kt
@@ -11,6 +11,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
+import com.approagency.pharmacy.domain.model.ThemeMode
import com.fabirt.podcastapp.ui.theme.Shapes
import com.vada.caller.ui.theme.Dime
import com.vada.caller.ui.theme.LocalDime