Skip to content

Commit

Permalink
Fix loading contact initially (closes #171)
Browse files Browse the repository at this point in the history
  • Loading branch information
Bnyro committed May 27, 2023
1 parent 6e7f22b commit f51bbf0
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 18 deletions.
4 changes: 3 additions & 1 deletion app/src/main/java/com/bnyro/contacts/ui/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ class MainActivity : ComponentActivity() {
val contactsModel: ContactsModel = ViewModelProvider(this).get()

contactsModel.init(this)
contactsModel.initialContactId = getInitialContactId()
contactsModel.initialContactData = getInsertContactData()

handleVcfShareAction(contactsModel)

Expand All @@ -38,7 +40,7 @@ class MainActivity : ComponentActivity() {
else -> isSystemInDarkTheme()
}
) {
ContactsScreen(getInsertContactData(), getInitialContactId())
ContactsScreen()
getInsertOrEditNumber()?.let {
AddToContactDialog(it)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -256,7 +256,6 @@ fun ContactsPage(
Manifest.permission.READ_CONTACTS
)


if (viewModel.isLoading) {
LaunchedEffect(Unit) {
if (hasPerms() || viewModel.contactsHelper !is DeviceContactsHelper) return@LaunchedEffect
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@ class ContactsModel : ViewModel() {
Manifest.permission.READ_CONTACTS
)
private var sessionId = 0
var initialContactId: Long? by mutableStateOf(null)
var initialContactData: ContactData? by mutableStateOf(null)

fun init(context: Context) {
contactsHelper = when (Preferences.getInt(Preferences.homeTabKey, 0)) {
Expand All @@ -46,7 +48,10 @@ class ContactsModel : ViewModel() {
fun loadContacts(context: Context) {
isLoading = true
if (contactsHelper is DeviceContactsHelper &&
!PermissionHelper.checkPermissions(context, permissions)) return
!PermissionHelper.checkPermissions(context, permissions)
) {
return
}
viewModelScope.launch(Dispatchers.IO) {
sessionId += 1
val currentSession = sessionId
Expand Down
23 changes: 8 additions & 15 deletions app/src/main/java/com/bnyro/contacts/ui/screens/ContactsScreen.kt
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@ import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewmodel.compose.viewModel
import com.bnyro.contacts.R
import com.bnyro.contacts.obj.ContactData
import com.bnyro.contacts.obj.NavBarItem
import com.bnyro.contacts.ui.components.ContactsPage
import com.bnyro.contacts.ui.models.ContactsModel
Expand All @@ -49,16 +48,10 @@ import kotlinx.coroutines.withContext

@SuppressLint("UnusedMaterial3ScaffoldPaddingParameter")
@Composable
fun ContactsScreen(
contactToInsert: ContactData?,
initialContact: Long?
) {
fun ContactsScreen() {
val context = LocalContext.current
val viewModel: ContactsModel = viewModel()
val themeModel: ThemeModel = viewModel()
var visibleContact by remember {
mutableStateOf<ContactData?>(null)
}
val scope = rememberCoroutineScope()

val bottomBarHeight = 80.dp
Expand All @@ -79,14 +72,14 @@ fun ContactsScreen(
viewModel.loadContacts(context)
}

LaunchedEffect(viewModel.contacts) {
initialContact ?: return@LaunchedEffect
LaunchedEffect(viewModel.isLoading) {
viewModel.initialContactId ?: return@LaunchedEffect
viewModel.contacts.firstOrNull {
it.contactId == initialContact
it.contactId == viewModel.initialContactId
}?.let {
scope.launch {
withContext(Dispatchers.IO) {
visibleContact = viewModel.loadAdvancedContactData(it)
viewModel.initialContactData = viewModel.loadAdvancedContactData(it)
}
}
}
Expand Down Expand Up @@ -154,16 +147,16 @@ fun ContactsScreen(
color = MaterialTheme.colorScheme.background
) {
ContactsPage(
contactToInsert,
viewModel.initialContactData,
nestedScrollConnection.takeIf { themeModel.collapsableBottomBar },
bottomBarOffsetHeight = with(LocalDensity.current) {
bottomBarHeight - bottomBarOffsetHeightPx.value.absoluteValue.toDp()
}.takeIf { themeModel.collapsableBottomBar } ?: 0.dp
)
}
visibleContact?.let {
viewModel.initialContactData?.let {
SingleContactScreen(it) {
visibleContact = null
viewModel.initialContactData = null
}
}
}
Expand Down

0 comments on commit f51bbf0

Please sign in to comment.