Nextcloud: pre-select contact group method (CATEGORIES) (bitfireAT/davx5#410)

* LoginActivity: refactor menu to MenuProvider; LoginModel: add contact group type

* Take LoginModel group method into account when creating the account; Nextcloud login: set preferred contact group type
This commit is contained in:
Ricki Hirner 2023-10-18 15:08:43 +02:00
parent 52747e632f
commit b26ae345cd
No known key found for this signature in database
GPG key ID: 79A019FCAAEDD3AA
5 changed files with 48 additions and 24 deletions

View file

@ -19,7 +19,11 @@ import android.widget.ArrayAdapter
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import androidx.fragment.app.viewModels
import androidx.lifecycle.*
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import at.bitfire.davdroid.InvalidAccountException
import at.bitfire.davdroid.R
import at.bitfire.davdroid.databinding.LoginAccountDetailsBinding
@ -101,10 +105,10 @@ class AccountDetailsFragment : Fragment() {
v.createAccount.visibility = View.GONE
model.createAccount(
name,
loginModel.credentials,
config,
GroupMethod.valueOf(groupMethodName)
name,
loginModel.credentials,
config,
GroupMethod.valueOf(groupMethodName)
).observe(viewLifecycleOwner, Observer { success ->
if (success) {
// close Create account activity
@ -126,6 +130,7 @@ class AccountDetailsFragment : Fragment() {
val forcedGroupMethod = settings.getString(AccountSettings.KEY_CONTACT_GROUP_METHOD)?.let { GroupMethod.valueOf(it) }
if (forcedGroupMethod != null) {
// contact group type forced by settings
v.contactGroupMethod.isEnabled = false
for ((i, method) in resources.getStringArray(R.array.settings_contact_group_method_values).withIndex()) {
if (method == forcedGroupMethod.name) {
@ -133,8 +138,17 @@ class AccountDetailsFragment : Fragment() {
break
}
}
} else
} else {
// contact group type selectable
v.contactGroupMethod.isEnabled = true
for ((i, method) in resources.getStringArray(R.array.settings_contact_group_method_values).withIndex()) {
// take suggestion from detection process into account
if (method == loginModel.suggestedGroupMethod.name) {
v.contactGroupMethod.setSelection(i)
break
}
}
}
return v.root
}

View file

@ -6,8 +6,10 @@ package at.bitfire.davdroid.ui.setup
import android.os.Bundle
import android.view.Menu
import android.view.MenuInflater
import android.view.MenuItem
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.MenuProvider
import androidx.fragment.app.Fragment
import at.bitfire.davdroid.App
import at.bitfire.davdroid.R
@ -51,6 +53,22 @@ class LoginActivity: AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
addMenuProvider(object: MenuProvider {
override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
menuInflater.inflate(R.menu.activity_login, menu)
}
override fun onMenuItemSelected(menuItem: MenuItem): Boolean {
if (menuItem.itemId == R.id.help) {
UiUtils.launchUri(this@LoginActivity,
App.homepageUrl(this@LoginActivity).buildUpon().appendPath("tested-with").build())
return true
}
return false
}
})
if (savedInstanceState == null) {
// first call, add first login fragment
val factories = loginFragmentFactories // get factories from hilt
@ -71,14 +89,4 @@ class LoginActivity: AppCompatActivity() {
}
}
override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.activity_login, menu)
return true
}
fun showHelp(item: MenuItem) {
UiUtils.launchUri(this,
App.homepageUrl(this).buildUpon().appendPath("tested-with").build())
}
}

View file

@ -7,6 +7,7 @@ package at.bitfire.davdroid.ui.setup
import androidx.lifecycle.ViewModel
import at.bitfire.davdroid.db.Credentials
import at.bitfire.davdroid.servicedetection.DavResourceFinder
import at.bitfire.vcard4android.GroupMethod
import java.net.URI
class LoginModel: ViewModel() {
@ -16,9 +17,10 @@ class LoginModel: ViewModel() {
var configuration: DavResourceFinder.Configuration? = null
/**
* Account name that should be used as default account name when no email addresses have been found.
*/
/** account name that should be used as default account name when no email addresses have been found */
var suggestedAccountName: String? = null
}
/** group method that should be pre-selectedbr */
var suggestedGroupMethod: GroupMethod = GroupMethod.GROUP_VCARDS
}

View file

@ -54,6 +54,7 @@ import at.bitfire.davdroid.db.Credentials
import at.bitfire.davdroid.log.Logger
import at.bitfire.davdroid.network.HttpClient
import at.bitfire.davdroid.ui.UiUtils.haveCustomTabs
import at.bitfire.vcard4android.GroupMethod
import com.google.accompanist.themeadapter.material.MdcTheme
import com.google.android.material.snackbar.Snackbar
import dagger.Binds
@ -159,6 +160,7 @@ class NextcloudLoginFlowFragment: Fragment() {
// continue to next fragment
loginModel.baseURI = baseUri
loginModel.credentials = credentials
loginModel.suggestedGroupMethod = GroupMethod.CATEGORIES
parentFragmentManager.beginTransaction()
.replace(android.R.id.content, DetectConfigurationFragment(), null)
.addToBackStack(null)

View file

@ -7,8 +7,6 @@
android:id="@+id/help"
android:title="@string/help"
android:icon="@drawable/ic_help"
app:showAsAction="always"
android:onClick="showHelp">
</item>
app:showAsAction="always" />
</menu>