Loading app/src/main/kotlin/at/bitfire/davdroid/App.kt +6 −10 Original line number Diff line number Diff line Loading @@ -44,16 +44,12 @@ class App: Application(), Thread.UncaughtExceptionHandler, Configuration.Provide * @return the Uri for the browser */ fun homepageUrl(context: Context, page: String? = null): Uri { val builder = Uri.parse(context.getString(R.string.homepage_url)).buildUpon() if (page != null) builder.appendPath(page) return builder .appendQueryParameter("pk_campaign", BuildConfig.APPLICATION_ID) .appendQueryParameter("pk_kwd", context::class.java.simpleName) .appendQueryParameter("app-version", BuildConfig.VERSION_NAME) .build() val url = if (HOMEPAGE_PRIVACY == page) { R.string.privacy_url } else { R.string.homepage_url } return Uri.parse(context.getString(url)).buildUpon().build() } } Loading app/src/main/kotlin/at/bitfire/davdroid/ui/intro/BatteryOptimizationsFragment.kt +1 −3 Original line number Diff line number Diff line Loading @@ -67,9 +67,7 @@ class BatteryOptimizationsFragment: Fragment() { binding.autostartHeading.text = getString(R.string.intro_autostart_title, WordUtils.capitalize(Build.MANUFACTURER)) binding.autostartText.setText(R.string.intro_autostart_text) binding.autostartMoreInfo.setOnClickListener { UiUtils.launchUri(requireActivity(), App.homepageUrl(requireActivity()).buildUpon() .appendPath("faq").appendPath("synchronization-is-not-run-as-expected") .appendQueryParameter("manufacturer", Build.MANUFACTURER.lowercase(Locale.ROOT)).build()) UiUtils.launchUri(requireActivity(), App.homepageUrl(requireActivity())) } binding.infoLeaveUnchecked.text = getString(R.string.intro_leave_unchecked, getString(R.string.app_settings_reset_hints)) Loading app/src/main/kotlin/at/bitfire/davdroid/ui/intro/OpenSourceFragment.kt +1 −3 Original line number Diff line number Diff line Loading @@ -36,9 +36,7 @@ class OpenSourceFragment: Fragment() { binding.text.text = getString(R.string.intro_open_source_text, getString(R.string.app_name)) binding.moreInfo.setOnClickListener { UiUtils.launchUri(requireActivity(), App.homepageUrl(requireActivity()).buildUpon() .appendPath("donate") .build()) UiUtils.launchUri(requireActivity(), App.homepageUrl(requireActivity())) } return binding.root Loading app/src/main/kotlin/at/bitfire/davdroid/ui/setup/GoogleLoginFragment.kt +32 −8 Original line number Diff line number Diff line Loading @@ -4,6 +4,8 @@ package at.bitfire.davdroid.ui.setup import android.accounts.AccountManager import android.app.Activity import android.app.Application import android.content.ActivityNotFoundException import android.content.Context Loading Loading @@ -33,15 +35,18 @@ import androidx.compose.material.Card import androidx.compose.material.MaterialTheme import androidx.compose.material.OutlinedTextField import androidx.compose.material.Text import androidx.compose.material.TextFieldDefaults import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Warning import androidx.compose.runtime.Composable import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.ColorFilter import androidx.compose.ui.platform.ComposeView import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.colorResource import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.input.ImeAction Loading @@ -62,6 +67,7 @@ import at.bitfire.davdroid.BuildConfig import at.bitfire.davdroid.R import at.bitfire.davdroid.db.Credentials import at.bitfire.davdroid.log.Logger import at.bitfire.davdroid.ui.AccountsActivity import at.bitfire.davdroid.ui.UiUtils import com.google.accompanist.themeadapter.material.MdcTheme import com.google.android.material.snackbar.Snackbar Loading Loading @@ -233,10 +239,11 @@ fun GoogleLogin( .padding(8.dp) .verticalScroll(rememberScrollState())) { Text( stringResource(R.string.login_type_google), stringResource(R.string.login_type_google_e), style = MaterialTheme.typography.h5, modifier = Modifier.padding(vertical = 16.dp)) /* Card(Modifier.fillMaxWidth()) { Column(Modifier.padding(8.dp)) { Row { Loading @@ -256,9 +263,9 @@ fun GoogleLogin( } } } */ val email = rememberSaveable { mutableStateOf(defaultEmail ?: "") } val userClientId = rememberSaveable { mutableStateOf("") } fun login() { // append @gmail.com, if necessary Loading @@ -266,11 +273,19 @@ fun GoogleLogin( if (it.contains('@')) it else it + "@gmail.com" "${it}@gmail.com" } val clientId = StringUtils.trimToNull(userClientId.value.trim()) onLogin(loginEmail, clientId) val accountManager = AccountManager.get(context) val options = Bundle() options.putString(LoginActivity.OPEN_APP_PACKAGE_AFTER_AUTH, context.packageName) options.putString( LoginActivity.OPEN_APP_ACTIVITY_AFTER_AUTH, AccountsActivity::class.java.name, ) options.putString(LoginActivity.USERNAME_HINT, loginEmail) accountManager.addAccount(context.getString(R.string.google_account_type), null, null, options, context as Activity?, null, null) } OutlinedTextField( email.value, Loading @@ -287,10 +302,19 @@ fun GoogleLogin( placeholder = { Text("example@gmail.com") }, modifier = Modifier .fillMaxWidth() .padding(top = 8.dp) .padding(top = 8.dp), colors = TextFieldDefaults.outlinedTextFieldColors( textColor = colorResource(R.color.primaryTextColor), // Text color focusedBorderColor = colorResource(R.color.accentColor), // Border color when focused unfocusedBorderColor = Color.Gray, // Border color when not focused cursorColor = colorResource(R.color.accentColor), // Cursor color focusedLabelColor = colorResource(R.color.accentColor), // Label color when focused unfocusedLabelColor = Color.Gray, // Label color when not focused placeholderColor = Color.LightGray // Placeholder text color ) ) OutlinedTextField( /*OutlinedTextField( userClientId.value, singleLine = true, onValueChange = { clientId -> Loading @@ -308,7 +332,7 @@ fun GoogleLogin( modifier = Modifier .fillMaxWidth() .padding(top = 8.dp) ) )*/ Button( onClick = { login() }, Loading app/src/main/res/layout/account_list.xml +0 −2 Original line number Diff line number Diff line Loading @@ -23,14 +23,12 @@ app:drawableLeftCompat="@drawable/ic_notifications_off" app:drawableTint="?android:attr/textColorPrimary" android:drawablePadding="8dp" style="@style/TextAppearance.MaterialComponents.Body1" android:text="@string/account_list_no_notification_permission"/> <Button android:id="@+id/allow_notifications" android:layout_width="wrap_content" android:layout_height="wrap_content" style="@style/Widget.MaterialComponents.Button.TextButton" android:text="@string/account_permissions_action" /> </LinearLayout> Loading Loading
app/src/main/kotlin/at/bitfire/davdroid/App.kt +6 −10 Original line number Diff line number Diff line Loading @@ -44,16 +44,12 @@ class App: Application(), Thread.UncaughtExceptionHandler, Configuration.Provide * @return the Uri for the browser */ fun homepageUrl(context: Context, page: String? = null): Uri { val builder = Uri.parse(context.getString(R.string.homepage_url)).buildUpon() if (page != null) builder.appendPath(page) return builder .appendQueryParameter("pk_campaign", BuildConfig.APPLICATION_ID) .appendQueryParameter("pk_kwd", context::class.java.simpleName) .appendQueryParameter("app-version", BuildConfig.VERSION_NAME) .build() val url = if (HOMEPAGE_PRIVACY == page) { R.string.privacy_url } else { R.string.homepage_url } return Uri.parse(context.getString(url)).buildUpon().build() } } Loading
app/src/main/kotlin/at/bitfire/davdroid/ui/intro/BatteryOptimizationsFragment.kt +1 −3 Original line number Diff line number Diff line Loading @@ -67,9 +67,7 @@ class BatteryOptimizationsFragment: Fragment() { binding.autostartHeading.text = getString(R.string.intro_autostart_title, WordUtils.capitalize(Build.MANUFACTURER)) binding.autostartText.setText(R.string.intro_autostart_text) binding.autostartMoreInfo.setOnClickListener { UiUtils.launchUri(requireActivity(), App.homepageUrl(requireActivity()).buildUpon() .appendPath("faq").appendPath("synchronization-is-not-run-as-expected") .appendQueryParameter("manufacturer", Build.MANUFACTURER.lowercase(Locale.ROOT)).build()) UiUtils.launchUri(requireActivity(), App.homepageUrl(requireActivity())) } binding.infoLeaveUnchecked.text = getString(R.string.intro_leave_unchecked, getString(R.string.app_settings_reset_hints)) Loading
app/src/main/kotlin/at/bitfire/davdroid/ui/intro/OpenSourceFragment.kt +1 −3 Original line number Diff line number Diff line Loading @@ -36,9 +36,7 @@ class OpenSourceFragment: Fragment() { binding.text.text = getString(R.string.intro_open_source_text, getString(R.string.app_name)) binding.moreInfo.setOnClickListener { UiUtils.launchUri(requireActivity(), App.homepageUrl(requireActivity()).buildUpon() .appendPath("donate") .build()) UiUtils.launchUri(requireActivity(), App.homepageUrl(requireActivity())) } return binding.root Loading
app/src/main/kotlin/at/bitfire/davdroid/ui/setup/GoogleLoginFragment.kt +32 −8 Original line number Diff line number Diff line Loading @@ -4,6 +4,8 @@ package at.bitfire.davdroid.ui.setup import android.accounts.AccountManager import android.app.Activity import android.app.Application import android.content.ActivityNotFoundException import android.content.Context Loading Loading @@ -33,15 +35,18 @@ import androidx.compose.material.Card import androidx.compose.material.MaterialTheme import androidx.compose.material.OutlinedTextField import androidx.compose.material.Text import androidx.compose.material.TextFieldDefaults import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Warning import androidx.compose.runtime.Composable import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.ColorFilter import androidx.compose.ui.platform.ComposeView import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.colorResource import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.input.ImeAction Loading @@ -62,6 +67,7 @@ import at.bitfire.davdroid.BuildConfig import at.bitfire.davdroid.R import at.bitfire.davdroid.db.Credentials import at.bitfire.davdroid.log.Logger import at.bitfire.davdroid.ui.AccountsActivity import at.bitfire.davdroid.ui.UiUtils import com.google.accompanist.themeadapter.material.MdcTheme import com.google.android.material.snackbar.Snackbar Loading Loading @@ -233,10 +239,11 @@ fun GoogleLogin( .padding(8.dp) .verticalScroll(rememberScrollState())) { Text( stringResource(R.string.login_type_google), stringResource(R.string.login_type_google_e), style = MaterialTheme.typography.h5, modifier = Modifier.padding(vertical = 16.dp)) /* Card(Modifier.fillMaxWidth()) { Column(Modifier.padding(8.dp)) { Row { Loading @@ -256,9 +263,9 @@ fun GoogleLogin( } } } */ val email = rememberSaveable { mutableStateOf(defaultEmail ?: "") } val userClientId = rememberSaveable { mutableStateOf("") } fun login() { // append @gmail.com, if necessary Loading @@ -266,11 +273,19 @@ fun GoogleLogin( if (it.contains('@')) it else it + "@gmail.com" "${it}@gmail.com" } val clientId = StringUtils.trimToNull(userClientId.value.trim()) onLogin(loginEmail, clientId) val accountManager = AccountManager.get(context) val options = Bundle() options.putString(LoginActivity.OPEN_APP_PACKAGE_AFTER_AUTH, context.packageName) options.putString( LoginActivity.OPEN_APP_ACTIVITY_AFTER_AUTH, AccountsActivity::class.java.name, ) options.putString(LoginActivity.USERNAME_HINT, loginEmail) accountManager.addAccount(context.getString(R.string.google_account_type), null, null, options, context as Activity?, null, null) } OutlinedTextField( email.value, Loading @@ -287,10 +302,19 @@ fun GoogleLogin( placeholder = { Text("example@gmail.com") }, modifier = Modifier .fillMaxWidth() .padding(top = 8.dp) .padding(top = 8.dp), colors = TextFieldDefaults.outlinedTextFieldColors( textColor = colorResource(R.color.primaryTextColor), // Text color focusedBorderColor = colorResource(R.color.accentColor), // Border color when focused unfocusedBorderColor = Color.Gray, // Border color when not focused cursorColor = colorResource(R.color.accentColor), // Cursor color focusedLabelColor = colorResource(R.color.accentColor), // Label color when focused unfocusedLabelColor = Color.Gray, // Label color when not focused placeholderColor = Color.LightGray // Placeholder text color ) ) OutlinedTextField( /*OutlinedTextField( userClientId.value, singleLine = true, onValueChange = { clientId -> Loading @@ -308,7 +332,7 @@ fun GoogleLogin( modifier = Modifier .fillMaxWidth() .padding(top = 8.dp) ) )*/ Button( onClick = { login() }, Loading
app/src/main/res/layout/account_list.xml +0 −2 Original line number Diff line number Diff line Loading @@ -23,14 +23,12 @@ app:drawableLeftCompat="@drawable/ic_notifications_off" app:drawableTint="?android:attr/textColorPrimary" android:drawablePadding="8dp" style="@style/TextAppearance.MaterialComponents.Body1" android:text="@string/account_list_no_notification_permission"/> <Button android:id="@+id/allow_notifications" android:layout_width="wrap_content" android:layout_height="wrap_content" style="@style/Widget.MaterialComponents.Button.TextButton" android:text="@string/account_permissions_action" /> </LinearLayout> Loading