Skip to content

Commit f470c1f

Browse files
committed
Merge branch 'dev' into nav3-migration/edit-subscription-activity
# Conflicts: # app/src/main/AndroidManifest.xml # app/src/main/java/at/bitfire/icsdroid/model/EditSubscriptionModel.kt # app/src/main/java/at/bitfire/icsdroid/ui/nav/MainApp.kt
2 parents 2cd831c + fa58f54 commit f470c1f

13 files changed

Lines changed: 328 additions & 342 deletions

.github/dependabot.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,15 @@ updates:
99
directory: "/" # Location of package manifests
1010
schedule:
1111
interval: "weekly"
12+
commit-message:
13+
prefix: "[CI] "
14+
groups:
15+
ci-actions:
16+
patterns: ["*"]
1217
- package-ecosystem: "gradle"
1318
directory: "/" # Location of package manifests
1419
schedule:
1520
interval: "daily"
21+
groups:
22+
lib-dependencies:
23+
patterns: ["*"]

app/src/main/AndroidManifest.xml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -114,10 +114,6 @@
114114
<data android:mimeType="text/calendar" />
115115
</intent-filter>
116116
</activity>
117-
<activity
118-
android:name=".ui.InfoActivity"
119-
android:label="@string/activity_app_info"
120-
android:parentActivityName=".MainActivity" />
121117

122118
</application>
123119

app/src/main/java/at/bitfire/icsdroid/MainActivity.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class MainActivity : AppCompatActivity() {
2121
super.onCreate(savedInstanceState)
2222

2323
setContentThemed {
24-
MainApp(savedInstanceState, intent.extras, ::finish)
24+
MainApp(savedInstanceState, intent, ::finish)
2525
}
2626
}
2727

app/src/main/java/at/bitfire/icsdroid/db/dao/SubscriptionsDao.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ interface SubscriptionsDao {
4747
suspend fun getByUrl(url: String): Subscription?
4848

4949
@Query("SELECT * FROM subscriptions WHERE id=:id")
50-
fun getWithCredentialsByIdFlow(id: Long): Flow<SubscriptionWithCredential?>
50+
suspend fun getWithCredentialsById(id: Long): SubscriptionWithCredential?
5151

5252
@Query("SELECT errorMessage FROM subscriptions WHERE id=:id")
5353
fun getErrorMessageFlow(id: Long): Flow<String?>

app/src/main/java/at/bitfire/icsdroid/model/EditSubscriptionModel.kt

Lines changed: 21 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ import dagger.assisted.AssistedInject
2323
import dagger.hilt.android.lifecycle.HiltViewModel
2424
import dagger.hilt.android.qualifiers.ApplicationContext
2525
import kotlinx.coroutines.Dispatchers
26-
import kotlinx.coroutines.flow.firstOrNull
2726
import kotlinx.coroutines.launch
2827
import kotlinx.coroutines.withContext
2928

@@ -42,7 +41,7 @@ class EditSubscriptionModel @AssistedInject constructor(
4241

4342
private var initialSubscription: Subscription? = null
4443
private var initialCredential: Credential? = null
45-
private var initialRequiresAuthValue: Boolean? = null
44+
private val initialRequiresAuth: Boolean get() = initialCredential != null
4645

4746
/**
4847
* Whether user input is error free
@@ -69,7 +68,7 @@ class EditSubscriptionModel @AssistedInject constructor(
6968
get() = with(subscriptionSettingsUseCase) {
7069
val requiresAuth = uiState.requiresAuth
7170

72-
val credentialsDirty = initialRequiresAuthValue != requiresAuth || initialCredential?.let {
71+
val credentialsDirty = initialRequiresAuth != requiresAuth || initialCredential?.let {
7372
!equalsCredential(it)
7473
} ?: false
7574
val subscriptionsDirty = initialSubscription?.let {
@@ -79,49 +78,34 @@ class EditSubscriptionModel @AssistedInject constructor(
7978
credentialsDirty || subscriptionsDirty
8079
}
8180

82-
val subscription = db.subscriptionsDao().getByIdFlow(subscriptionId)
83-
val subscriptionWithCredential = db.subscriptionsDao().getWithCredentialsByIdFlow(subscriptionId)
81+
var successMessage: String? by mutableStateOf(null)
82+
private set
83+
84+
var subscriptionWithCredential: SubscriptionsDao.SubscriptionWithCredential? = null
85+
private set
8486

8587
init {
86-
// Initialise view models and save their initial state
8788
viewModelScope.launch {
88-
subscriptionWithCredential.collect { data ->
89-
if (data != null)
90-
onSubscriptionLoaded(data)
89+
db.subscriptionsDao().getWithCredentialsById(subscriptionId)?.let {
90+
onSubscriptionLoaded(it)
9191
}
9292
}
9393
}
9494

9595
/**
9696
* Initialise view models and remember their initial state
9797
*/
98-
private fun onSubscriptionLoaded(subscriptionWithCredential: SubscriptionsDao.SubscriptionWithCredential) =
99-
with(subscriptionSettingsUseCase) {
100-
val subscription = subscriptionWithCredential.subscription
101-
102-
setUrl(subscription.url.toString())
103-
setTitle(subscription.displayName)
104-
setColor(subscription.color)
105-
setCustomUserAgent(subscription.customUserAgent)
106-
setIgnoreAlerts(subscription.ignoreEmbeddedAlerts)
107-
setDefaultAlarmMinutes(subscription.defaultAlarmMinutes?.toString())
108-
setDefaultAllDayAlarmMinutes(subscription.defaultAllDayAlarmMinutes?.toString())
109-
setIgnoreDescription(subscription.ignoreDescription)
110-
111-
val credential = subscriptionWithCredential.credential
112-
val requiresAuth = credential != null
113-
setRequiresAuth(requiresAuth)
114-
115-
if (credential != null) {
116-
setUsername(credential.username)
117-
setPassword(credential.password)
118-
}
98+
private fun onSubscriptionLoaded(subscriptionWithCredential: SubscriptionsDao.SubscriptionWithCredential) {
99+
val subscription = subscriptionWithCredential.subscription
100+
val credential = subscriptionWithCredential.credential
119101

120-
// Save state, before user makes changes
121-
initialSubscription = subscription
122-
initialCredential = credential
123-
initialRequiresAuthValue = uiState.requiresAuth
124-
}
102+
// Save the initial state, before updating the UI, so the state is persisted
103+
initialSubscription = subscription
104+
initialCredential = credential
105+
this.subscriptionWithCredential = subscriptionWithCredential
106+
107+
subscriptionSettingsUseCase.update(subscription, credential)
108+
}
125109

126110
private suspend fun showMessage(@StringRes message: Int) = withContext(Dispatchers.Main) {
127111
Toast.makeText(context, message, Toast.LENGTH_LONG).show()
@@ -132,7 +116,7 @@ class EditSubscriptionModel @AssistedInject constructor(
132116
*/
133117
fun updateSubscription() = with(subscriptionSettingsUseCase.uiState) {
134118
viewModelScope.launch(Dispatchers.IO) {
135-
subscription.firstOrNull()?.let { subscription ->
119+
subscriptionWithCredential?.let { (subscription) ->
136120
val newSubscription = subscription.copy(
137121
displayName = title ?: subscription.displayName,
138122
color = color,
@@ -164,7 +148,7 @@ class EditSubscriptionModel @AssistedInject constructor(
164148
*/
165149
fun removeSubscription() {
166150
viewModelScope.launch(Dispatchers.IO) {
167-
subscription.firstOrNull()?.let { subscription ->
151+
subscriptionWithCredential?.let { (subscription) ->
168152
db.subscriptionsDao().delete(subscription)
169153

170154
// sync the subscription to reflect the changes in the calendar provider

app/src/main/java/at/bitfire/icsdroid/model/SubscriptionSettingsUseCase.kt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,23 @@ class SubscriptionSettingsUseCase @Inject constructor() {
8181
uiState = uiState.copy(ignoreDescription = value)
8282
}
8383

84+
fun update(subscription: Subscription, credential: Credential?) {
85+
uiState = uiState.copy(
86+
url = subscription.url.toString(),
87+
title = subscription.displayName,
88+
color = subscription.color,
89+
customUserAgent = subscription.customUserAgent,
90+
ignoreAlerts = subscription.ignoreEmbeddedAlerts,
91+
defaultAlarmMinutes = subscription.defaultAlarmMinutes,
92+
defaultAllDayAlarmMinutes = subscription.defaultAllDayAlarmMinutes,
93+
ignoreDescription = subscription.ignoreDescription,
94+
95+
requiresAuth = credential != null,
96+
username = credential?.username,
97+
password = credential?.password
98+
)
99+
}
100+
84101
fun equalsSubscription(subscription: Subscription) =
85102
uiState.url == subscription.url.toString()
86103
&& uiState.title == subscription.displayName

0 commit comments

Comments
 (0)