1
0
mirror of https://github.com/etesync/android synced 2025-08-05 05:15:17 +00:00

Update okhttp3 dependency.

This commit is contained in:
Tom Hacohen 2020-09-06 15:38:23 +03:00
parent 3001af5b2e
commit aefdfe5479
17 changed files with 48 additions and 42 deletions

View File

@ -158,7 +158,8 @@ dependencies {
kapt "io.requery:requery-processor:$requeryVersion" kapt "io.requery:requery-processor:$requeryVersion"
implementation 'com.google.code.findbugs:jsr305:3.0.2' implementation 'com.google.code.findbugs:jsr305:3.0.2'
def okhttp3Version = "3.12.1" def okhttp3Version = "4.8.1"
implementation "com.squareup.okhttp3:okhttp:$okhttp3Version"
implementation "com.squareup.okhttp3:logging-interceptor:$okhttp3Version" implementation "com.squareup.okhttp3:logging-interceptor:$okhttp3Version"
implementation 'com.google.code.gson:gson:1.7.2' implementation 'com.google.code.gson:gson:1.7.2'

View File

@ -29,7 +29,6 @@ import java.util.*
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
import java.util.logging.Level import java.util.logging.Level
import javax.net.ssl.* import javax.net.ssl.*
import java.util.logging.Logger as LoggerType
class HttpClient private constructor( class HttpClient private constructor(
val okHttpClient: OkHttpClient, val okHttpClient: OkHttpClient,
@ -58,7 +57,7 @@ class HttpClient private constructor(
override fun close() { override fun close() {
okHttpClient.cache()?.close() okHttpClient.cache?.close()
certManager?.close() certManager?.close()
} }
@ -76,8 +75,10 @@ class HttpClient private constructor(
init { init {
// add network logging, if requested // add network logging, if requested
if (logger.isLoggable(Level.FINEST)) { if (logger.isLoggable(Level.FINEST)) {
val loggingInterceptor = HttpLoggingInterceptor(HttpLoggingInterceptor.Logger { val loggingInterceptor = HttpLoggingInterceptor(object: HttpLoggingInterceptor.Logger {
message -> logger.finest(message) override fun log(message: String) {
logger.finest(message)
}
}) })
loggingInterceptor.level = HttpLoggingInterceptor.Level.BODY loggingInterceptor.level = HttpLoggingInterceptor.Level.BODY
orig.addInterceptor(loggingInterceptor) orig.addInterceptor(loggingInterceptor)
@ -163,7 +164,7 @@ class HttpClient private constructor(
var request = chain.request() var request = chain.request()
/* Only add to the host we want. */ /* Only add to the host we want. */
if (host == null || request.url().host() == host) { if (host == null || request.url.host == host) {
if (token != null && request.header(HEADER_AUTHORIZATION) == null) { if (token != null && request.header(HEADER_AUTHORIZATION) == null) {
request = request.newBuilder() request = request.newBuilder()
.header(HEADER_AUTHORIZATION, "Token $token") .header(HEADER_AUTHORIZATION, "Token $token")
@ -186,8 +187,8 @@ class HttpClient private constructor(
factory.trustManagers.first() as X509TrustManager factory.trustManagers.first() as X509TrustManager
}() }()
val hostnameVerifier = certManager?.hostnameVerifier(OkHostnameVerifier.INSTANCE) val hostnameVerifier = certManager?.hostnameVerifier(OkHostnameVerifier)
?: OkHostnameVerifier.INSTANCE ?: OkHostnameVerifier
var keyManager: KeyManager? = null var keyManager: KeyManager? = null
certificateAlias?.let { alias -> certificateAlias?.let { alias ->

View File

@ -22,7 +22,7 @@ import com.etesync.syncadapter.model.CollectionInfo
import com.etesync.syncadapter.model.JournalEntity import com.etesync.syncadapter.model.JournalEntity
import com.etesync.syncadapter.model.JournalModel import com.etesync.syncadapter.model.JournalModel
import com.etesync.syncadapter.resource.LocalCalendar import com.etesync.syncadapter.resource.LocalCalendar
import okhttp3.HttpUrl import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
import java.util.* import java.util.*
class CalendarsSyncAdapterService : SyncAdapterService() { class CalendarsSyncAdapterService : SyncAdapterService() {
@ -44,7 +44,7 @@ class CalendarsSyncAdapterService : SyncAdapterService() {
updateLocalCalendars(provider, account, settings) updateLocalCalendars(provider, account, settings)
val principal = HttpUrl.get(settings.uri!!)!! val principal = settings.uri?.toHttpUrlOrNull()!!
for (calendar in AndroidCalendar.find(account, provider, LocalCalendar.Factory, CalendarContract.Calendars.SYNC_EVENTS + "!=0", null)) { for (calendar in AndroidCalendar.find(account, provider, LocalCalendar.Factory, CalendarContract.Calendars.SYNC_EVENTS + "!=0", null)) {
Logger.log.info("Synchronizing calendar #" + calendar.id + ", URL: " + calendar.name) Logger.log.info("Synchronizing calendar #" + calendar.id + ", URL: " + calendar.name)

View File

@ -17,7 +17,7 @@ import com.etesync.syncadapter.InvalidAccountException
import com.etesync.syncadapter.R import com.etesync.syncadapter.R
import com.etesync.syncadapter.log.Logger import com.etesync.syncadapter.log.Logger
import com.etesync.syncadapter.resource.LocalAddressBook import com.etesync.syncadapter.resource.LocalAddressBook
import okhttp3.HttpUrl import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
class ContactsSyncAdapterService : SyncAdapterService() { class ContactsSyncAdapterService : SyncAdapterService() {
@ -52,7 +52,7 @@ class ContactsSyncAdapterService : SyncAdapterService() {
Logger.log.info("Synchronizing address book: " + addressBook.url) Logger.log.info("Synchronizing address book: " + addressBook.url)
Logger.log.info("Taking settings from: " + addressBook.mainAccount) Logger.log.info("Taking settings from: " + addressBook.mainAccount)
val principal = HttpUrl.get(settings.uri!!)!! val principal = settings.uri?.toHttpUrlOrNull()!!
ContactsSyncManager(context, account, settings, extras, authority, provider, syncResult, addressBook, principal).use { ContactsSyncManager(context, account, settings, extras, authority, provider, syncResult, addressBook, principal).use {
it.performSync() it.performSync()
} }

View File

@ -16,20 +16,21 @@ import at.bitfire.ical4android.CalendarStorageException
import at.bitfire.vcard4android.BatchOperation import at.bitfire.vcard4android.BatchOperation
import at.bitfire.vcard4android.Contact import at.bitfire.vcard4android.Contact
import at.bitfire.vcard4android.ContactsStorageException import at.bitfire.vcard4android.ContactsStorageException
import com.etesync.journalmanager.Exceptions
import com.etesync.journalmanager.JournalEntryManager
import com.etesync.journalmanager.model.SyncEntry
import com.etesync.syncadapter.AccountSettings import com.etesync.syncadapter.AccountSettings
import com.etesync.syncadapter.Constants import com.etesync.syncadapter.Constants
import com.etesync.syncadapter.HttpClient import com.etesync.syncadapter.HttpClient
import com.etesync.syncadapter.R import com.etesync.syncadapter.R
import com.etesync.journalmanager.Exceptions
import com.etesync.journalmanager.JournalEntryManager
import com.etesync.syncadapter.log.Logger import com.etesync.syncadapter.log.Logger
import com.etesync.syncadapter.model.CollectionInfo import com.etesync.syncadapter.model.CollectionInfo
import com.etesync.journalmanager.model.SyncEntry
import com.etesync.syncadapter.resource.LocalAddress import com.etesync.syncadapter.resource.LocalAddress
import com.etesync.syncadapter.resource.LocalAddressBook import com.etesync.syncadapter.resource.LocalAddressBook
import com.etesync.syncadapter.resource.LocalContact import com.etesync.syncadapter.resource.LocalContact
import com.etesync.syncadapter.resource.LocalGroup import com.etesync.syncadapter.resource.LocalGroup
import okhttp3.HttpUrl import okhttp3.HttpUrl
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
import okhttp3.Request import okhttp3.Request
import org.apache.commons.collections4.SetUtils import org.apache.commons.collections4.SetUtils
import java.io.FileNotFoundException import java.io.FileNotFoundException
@ -215,14 +216,14 @@ constructor(context: Context, account: Account, settings: AccountSettings, extra
class ResourceDownloader(internal var context: Context) : Contact.Downloader { class ResourceDownloader(internal var context: Context) : Contact.Downloader {
override fun download(url: String, accepts: String): ByteArray? { override fun download(url: String, accepts: String): ByteArray? {
val httpUrl = HttpUrl.parse(url) val httpUrl = url.toHttpUrlOrNull()
if (httpUrl == null) { if (httpUrl == null) {
Logger.log.log(Level.SEVERE, "Invalid external resource URL", url) Logger.log.log(Level.SEVERE, "Invalid external resource URL", url)
return null return null
} }
val host = httpUrl.host() val host = httpUrl.host
if (host == null) { if (host == null) {
Logger.log.log(Level.SEVERE, "External resource URL doesn't specify a host name", url) Logger.log.log(Level.SEVERE, "External resource URL doesn't specify a host name", url)
return null return null
@ -236,7 +237,7 @@ constructor(context: Context, account: Account, settings: AccountSettings, extra
.url(httpUrl) .url(httpUrl)
.build()).execute() .build()).execute()
val body = response.body() val body = response.body
if (body != null) { if (body != null) {
return body.bytes() return body.bytes()
} }

View File

@ -26,6 +26,7 @@ import com.etesync.syncadapter.*
import com.etesync.journalmanager.Crypto import com.etesync.journalmanager.Crypto
import com.etesync.journalmanager.Exceptions import com.etesync.journalmanager.Exceptions
import com.etesync.journalmanager.JournalManager import com.etesync.journalmanager.JournalManager
import com.etesync.syncadapter.*
import com.etesync.syncadapter.log.Logger import com.etesync.syncadapter.log.Logger
import com.etesync.syncadapter.model.CollectionInfo import com.etesync.syncadapter.model.CollectionInfo
import com.etesync.syncadapter.model.JournalEntity import com.etesync.syncadapter.model.JournalEntity
@ -33,7 +34,7 @@ import com.etesync.syncadapter.model.JournalModel
import com.etesync.syncadapter.ui.DebugInfoActivity import com.etesync.syncadapter.ui.DebugInfoActivity
import com.etesync.syncadapter.ui.PermissionsActivity import com.etesync.syncadapter.ui.PermissionsActivity
import com.etesync.syncadapter.utils.NotificationUtils import com.etesync.syncadapter.utils.NotificationUtils
import okhttp3.HttpUrl import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
import java.lang.Math.abs import java.lang.Math.abs
import java.util.* import java.util.*
import java.util.logging.Level import java.util.logging.Level
@ -207,7 +208,7 @@ abstract class SyncAdapterService : Service() {
val settings = AccountSettings(context, account) val settings = AccountSettings(context, account)
val httpClient = HttpClient.Builder(context, settings).setForeground(false).build() val httpClient = HttpClient.Builder(context, settings).setForeground(false).build()
val journalsManager = JournalManager(httpClient.okHttpClient, HttpUrl.get(settings.uri!!)!!) val journalsManager = JournalManager(httpClient.okHttpClient, settings.uri?.toHttpUrlOrNull()!!)
var journals = journalFetcher.list(journalsManager, settings, serviceType) var journals = journalFetcher.list(journalsManager, settings, serviceType)

View File

@ -27,7 +27,7 @@ import com.etesync.syncadapter.model.CollectionInfo
import com.etesync.syncadapter.model.JournalEntity import com.etesync.syncadapter.model.JournalEntity
import com.etesync.syncadapter.model.JournalModel import com.etesync.syncadapter.model.JournalModel
import com.etesync.syncadapter.resource.LocalTaskList import com.etesync.syncadapter.resource.LocalTaskList
import okhttp3.HttpUrl import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
import org.dmfs.tasks.contract.TaskContract import org.dmfs.tasks.contract.TaskContract
import java.util.* import java.util.*
@ -65,7 +65,7 @@ class TasksSyncAdapterService: SyncAdapterService() {
updateLocalTaskLists(taskProvider, account, accountSettings) updateLocalTaskLists(taskProvider, account, accountSettings)
val principal = HttpUrl.get(accountSettings.uri!!)!! val principal = accountSettings.uri?.toHttpUrlOrNull()!!
for (taskList in AndroidTaskList.find(account, taskProvider, LocalTaskList.Factory, "${TaskContract.TaskLists.SYNC_ENABLED}!=0", null)) { for (taskList in AndroidTaskList.find(account, taskProvider, LocalTaskList.Factory, "${TaskContract.TaskLists.SYNC_ENABLED}!=0", null)) {
Logger.log.info("Synchronizing task list #${taskList.id} [${taskList.syncId}]") Logger.log.info("Synchronizing task list #${taskList.id} [${taskList.syncId}]")

View File

@ -44,7 +44,7 @@ import com.etesync.syncadapter.utils.HintManager
import com.etesync.syncadapter.utils.ShowcaseBuilder import com.etesync.syncadapter.utils.ShowcaseBuilder
import com.etesync.syncadapter.utils.packageInstalled import com.etesync.syncadapter.utils.packageInstalled
import com.google.android.material.snackbar.Snackbar import com.google.android.material.snackbar.Snackbar
import okhttp3.HttpUrl import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
import org.jetbrains.anko.doAsync import org.jetbrains.anko.doAsync
import tourguide.tourguide.ToolTip import tourguide.tourguide.ToolTip
import java.util.logging.Level import java.util.logging.Level
@ -438,7 +438,7 @@ class AccountActivity : BaseActivity(), Toolbar.OnMenuItemClickListener, PopupMe
val accountManager = AccountManager.get(this) val accountManager = AccountManager.get(this)
val settings = AccountSettings(this@AccountActivity, account) val settings = AccountSettings(this@AccountActivity, account)
val authToken = settings.authToken val authToken = settings.authToken
val principal = HttpUrl.get(settings.uri!!) val principal = settings.uri?.toHttpUrlOrNull()
doAsync { doAsync {
try { try {

View File

@ -18,6 +18,7 @@ import com.etesync.journalmanager.UserInfoManager
import com.etesync.syncadapter.model.CollectionInfo import com.etesync.syncadapter.model.CollectionInfo
import com.etesync.syncadapter.model.JournalEntity import com.etesync.syncadapter.model.JournalEntity
import okhttp3.HttpUrl import okhttp3.HttpUrl
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
class AddMemberFragment : DialogFragment() { class AddMemberFragment : DialogFragment() {
private lateinit var account: Account private lateinit var account: Account
@ -42,7 +43,7 @@ class AddMemberFragment : DialogFragment() {
e.printStackTrace() e.printStackTrace()
} }
remote = HttpUrl.get(settings!!.uri!!) remote = settings?.uri?.toHttpUrlOrNull()!!
MemberAdd().execute() MemberAdd().execute()
} }

View File

@ -24,7 +24,7 @@ import com.etesync.journalmanager.UserInfoManager
import com.etesync.syncadapter.log.Logger import com.etesync.syncadapter.log.Logger
import com.etesync.syncadapter.syncadapter.requestSync import com.etesync.syncadapter.syncadapter.requestSync
import com.google.android.material.textfield.TextInputLayout import com.google.android.material.textfield.TextInputLayout
import okhttp3.HttpUrl import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
import org.jetbrains.anko.doAsync import org.jetbrains.anko.doAsync
import org.jetbrains.anko.uiThread import org.jetbrains.anko.uiThread
import java.util.* import java.util.*
@ -70,7 +70,7 @@ open class ChangeEncryptionPasswordActivity : BaseActivity() {
Logger.log.info("Finished deriving old key") Logger.log.info("Finished deriving old key")
var cryptoManager: Crypto.CryptoManager var cryptoManager: Crypto.CryptoManager
val principal = HttpUrl.get(settings.uri!!)!! val principal = settings.uri?.toHttpUrlOrNull()!!
try { try {
val userInfoManager = UserInfoManager(httpClient, principal) val userInfoManager = UserInfoManager(httpClient, principal)

View File

@ -17,7 +17,7 @@ import com.etesync.syncadapter.model.CollectionInfo
import com.etesync.syncadapter.model.JournalEntity import com.etesync.syncadapter.model.JournalEntity
import com.etesync.syncadapter.model.JournalModel import com.etesync.syncadapter.model.JournalModel
import com.etesync.syncadapter.model.MyEntityDataStore import com.etesync.syncadapter.model.MyEntityDataStore
import okhttp3.HttpUrl import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
import org.jetbrains.anko.doAsync import org.jetbrains.anko.doAsync
import org.jetbrains.anko.uiThread import org.jetbrains.anko.uiThread
import java.util.concurrent.Future import java.util.concurrent.Future
@ -54,7 +54,7 @@ class CollectionMembersListFragment : ListFragment(), AdapterView.OnItemClickLis
try { try {
val settings = AccountSettings(context!!, account) val settings = AccountSettings(context!!, account)
val httpClient = HttpClient.Builder(context, settings).build().okHttpClient val httpClient = HttpClient.Builder(context, settings).build().okHttpClient
val journalsManager = JournalManager(httpClient, HttpUrl.get(settings.uri!!)!!) val journalsManager = JournalManager(httpClient, settings.uri?.toHttpUrlOrNull()!!)
val journal = JournalManager.Journal.fakeWithUid(journalEntity.uid) val journal = JournalManager.Journal.fakeWithUid(journalEntity.uid)
members = journalsManager.listMembers(journal) members = journalsManager.listMembers(journal)

View File

@ -27,7 +27,7 @@ import com.etesync.syncadapter.model.CollectionInfo
import com.etesync.syncadapter.model.JournalEntity import com.etesync.syncadapter.model.JournalEntity
import com.etesync.syncadapter.model.JournalModel import com.etesync.syncadapter.model.JournalModel
import com.etesync.syncadapter.utils.TaskProviderHandling import com.etesync.syncadapter.utils.TaskProviderHandling
import okhttp3.HttpUrl import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
class CreateCollectionFragment : DialogFragment(), LoaderManager.LoaderCallbacks<Exception> { class CreateCollectionFragment : DialogFragment(), LoaderManager.LoaderCallbacks<Exception> {
@ -100,7 +100,7 @@ class CreateCollectionFragment : DialogFragment(), LoaderManager.LoaderCallbacks
info.serviceID = serviceEntity.id info.serviceID = serviceEntity.id
val settings = AccountSettings(context, account) val settings = AccountSettings(context, account)
val principal = HttpUrl.get(settings.uri!!) val principal = settings.uri?.toHttpUrlOrNull()
val httpClient = HttpClient.Builder(context, settings).build().okHttpClient val httpClient = HttpClient.Builder(context, settings).build().okHttpClient
val journalManager = JournalManager(httpClient, principal!!) val journalManager = JournalManager(httpClient, principal!!)

View File

@ -25,7 +25,7 @@ import com.etesync.journalmanager.Exceptions
import com.etesync.journalmanager.JournalManager import com.etesync.journalmanager.JournalManager
import com.etesync.syncadapter.model.CollectionInfo import com.etesync.syncadapter.model.CollectionInfo
import com.etesync.syncadapter.model.JournalEntity import com.etesync.syncadapter.model.JournalEntity
import okhttp3.HttpUrl import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
class DeleteCollectionFragment : DialogFragment(), LoaderManager.LoaderCallbacks<Exception> { class DeleteCollectionFragment : DialogFragment(), LoaderManager.LoaderCallbacks<Exception> {
@ -86,7 +86,7 @@ class DeleteCollectionFragment : DialogFragment(), LoaderManager.LoaderCallbacks
val data = (context.applicationContext as App).data val data = (context.applicationContext as App).data
val settings = AccountSettings(context, account) val settings = AccountSettings(context, account)
val principal = HttpUrl.get(settings.uri!!) val principal = settings.uri?.toHttpUrlOrNull()
val httpClient = HttpClient.Builder(context, settings).build().okHttpClient val httpClient = HttpClient.Builder(context, settings).build().okHttpClient
val journalManager = JournalManager(httpClient, principal!!) val journalManager = JournalManager(httpClient, principal!!)

View File

@ -10,7 +10,7 @@ import androidx.fragment.app.DialogFragment
import com.etesync.syncadapter.* import com.etesync.syncadapter.*
import com.etesync.journalmanager.JournalManager import com.etesync.journalmanager.JournalManager
import com.etesync.syncadapter.model.CollectionInfo import com.etesync.syncadapter.model.CollectionInfo
import okhttp3.HttpUrl import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
class RemoveMemberFragment : DialogFragment() { class RemoveMemberFragment : DialogFragment() {
private var settings: AccountSettings? = null private var settings: AccountSettings? = null
@ -46,7 +46,7 @@ class RemoveMemberFragment : DialogFragment() {
val httpClient = HttpClient.Builder(context, settings).build() val httpClient = HttpClient.Builder(context, settings).build()
try { try {
val remote = HttpUrl.get(settings!!.uri!!) val remote = settings?.uri?.toHttpUrlOrNull()
val journalsManager = JournalManager(httpClient.okHttpClient, remote!!) val journalsManager = JournalManager(httpClient.okHttpClient, remote!!)
val journal = JournalManager.Journal.fakeWithUid(info!!.uid!!) val journal = JournalManager.Journal.fakeWithUid(info!!.uid!!)

View File

@ -16,6 +16,7 @@ import com.etesync.journalmanager.UserInfoManager
import com.etesync.syncadapter.log.Logger import com.etesync.syncadapter.log.Logger
import com.etesync.syncadapter.model.CollectionInfo import com.etesync.syncadapter.model.CollectionInfo
import okhttp3.HttpUrl import okhttp3.HttpUrl
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
import java.io.IOException import java.io.IOException
import java.io.Serializable import java.io.Serializable
@ -35,7 +36,7 @@ class BaseConfigurationFinder(protected val context: Context, protected val cred
val cardDavConfig = findInitialConfiguration(CollectionInfo.Type.ADDRESS_BOOK) val cardDavConfig = findInitialConfiguration(CollectionInfo.Type.ADDRESS_BOOK)
val calDavConfig = findInitialConfiguration(CollectionInfo.Type.CALENDAR) val calDavConfig = findInitialConfiguration(CollectionInfo.Type.CALENDAR)
val authenticator = JournalAuthenticator(httpClient, HttpUrl.get(credentials.uri!!)!!) val authenticator = JournalAuthenticator(httpClient, credentials.uri?.toHttpUrlOrNull()!!)
var authtoken: String? = null var authtoken: String? = null
var userInfo: UserInfoManager.UserInfo? = null var userInfo: UserInfoManager.UserInfo? = null
@ -43,7 +44,7 @@ class BaseConfigurationFinder(protected val context: Context, protected val cred
authtoken = authenticator.getAuthToken(credentials.userName, credentials.password) authtoken = authenticator.getAuthToken(credentials.userName, credentials.password)
val authenticatedHttpClient = HttpClient.Builder(context, credentials.uri.host, authtoken!!).build().okHttpClient val authenticatedHttpClient = HttpClient.Builder(context, credentials.uri.host, authtoken!!).build().okHttpClient
val userInfoManager = UserInfoManager(authenticatedHttpClient, HttpUrl.get(credentials.uri)!!) val userInfoManager = UserInfoManager(authenticatedHttpClient, credentials.uri.toHttpUrlOrNull()!!)
userInfo = userInfoManager.fetch(credentials.userName) userInfo = userInfoManager.fetch(credentials.userName)
} catch (e: Exceptions.HttpException) { } catch (e: Exceptions.HttpException) {
Logger.log.warning(e.message) Logger.log.warning(e.message)

View File

@ -22,7 +22,7 @@ import com.etesync.syncadapter.R
import com.etesync.syncadapter.ui.WebViewActivity import com.etesync.syncadapter.ui.WebViewActivity
import com.google.android.material.textfield.TextInputLayout import com.google.android.material.textfield.TextInputLayout
import net.cachapa.expandablelayout.ExpandableLayout import net.cachapa.expandablelayout.ExpandableLayout
import okhttp3.HttpUrl import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
import java.net.URI import java.net.URI
class LoginCredentialsFragment : Fragment() { class LoginCredentialsFragment : Fragment() {
@ -105,9 +105,9 @@ class LoginCredentialsFragment : Fragment() {
val server = customServer.text.toString() val server = customServer.text.toString()
// If this field is null, just use the default // If this field is null, just use the default
if (!server.isEmpty()) { if (!server.isEmpty()) {
val url = HttpUrl.parse(server) val url = server.toHttpUrlOrNull()
if (url != null) { if (url != null) {
uri = url.uri() uri = url.toUri()
} else { } else {
customServer.error = getString(R.string.login_custom_server_error) customServer.error = getString(R.string.login_custom_server_error)
valid = false valid = false

View File

@ -17,7 +17,7 @@ import com.etesync.journalmanager.Constants
import com.etesync.journalmanager.Crypto import com.etesync.journalmanager.Crypto
import com.etesync.journalmanager.UserInfoManager import com.etesync.journalmanager.UserInfoManager
import com.etesync.syncadapter.log.Logger import com.etesync.syncadapter.log.Logger
import okhttp3.HttpUrl import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
class SetupUserInfoFragment : DialogFragment() { class SetupUserInfoFragment : DialogFragment() {
private lateinit var account: Account private lateinit var account: Account
@ -53,7 +53,7 @@ class SetupUserInfoFragment : DialogFragment() {
val cryptoManager: Crypto.CryptoManager val cryptoManager: Crypto.CryptoManager
val httpClient = HttpClient.Builder(context, settings).build().okHttpClient val httpClient = HttpClient.Builder(context, settings).build().okHttpClient
val userInfoManager = UserInfoManager(httpClient, HttpUrl.get(settings.uri!!)!!) val userInfoManager = UserInfoManager(httpClient, settings.uri?.toHttpUrlOrNull()!!)
var userInfo: UserInfoManager.UserInfo? = userInfoManager.fetch(account.name) var userInfo: UserInfoManager.UserInfo? = userInfoManager.fetch(account.name)
if (userInfo == null) { if (userInfo == null) {