#192 create first two sample assisted WebDAV clouds
This commit is contained in:
parent
5b1d7cfefb
commit
56ec2e204f
@ -2,6 +2,6 @@ package org.cryptomator.domain;
|
||||
|
||||
public enum CloudType {
|
||||
|
||||
DROPBOX, GOOGLE_DRIVE, ONEDRIVE, WEBDAV, LOCAL, CRYPTO
|
||||
DROPBOX, GOOGLE_DRIVE, ONEDRIVE, LOCAL, CRYPTO, WEBDAV, WEB_DE, MAILBOX_ORG
|
||||
|
||||
}
|
||||
|
@ -10,4 +10,8 @@ public interface WebDavAddOrChangeIntent {
|
||||
|
||||
@Optional
|
||||
WebDavCloudModel webDavCloud();
|
||||
|
||||
@Optional
|
||||
String preFilledURL();
|
||||
|
||||
}
|
||||
|
@ -15,24 +15,36 @@ enum class CloudTypeModel(builder: Builder) {
|
||||
ONEDRIVE(Builder("ONEDRIVE", R.string.cloud_names_onedrive) //
|
||||
.withCloudImageResource(R.drawable.cloud_type_onedrive) //
|
||||
.withCloudImageLargeResource(R.drawable.cloud_type_onedrive_large)), //
|
||||
LOCAL(Builder("LOCAL", R.string.cloud_names_local_storage) //
|
||||
.withCloudImageResource(R.drawable.storage_type_local) //
|
||||
.withCloudImageLargeResource(R.drawable.storage_type_local_large)), //
|
||||
WEBDAV(Builder("WEBDAV", R.string.cloud_names_webdav) //
|
||||
.withCloudImageResource(R.drawable.cloud_type_webdav) //
|
||||
.withCloudImageLargeResource(R.drawable.cloud_type_webdav_large) //
|
||||
.withMultiInstances()), //
|
||||
LOCAL(Builder("LOCAL", R.string.cloud_names_local_storage) //
|
||||
.withCloudImageResource(R.drawable.storage_type_local) //
|
||||
.withCloudImageLargeResource(R.drawable.storage_type_local_large));
|
||||
WEB_DE(Builder("WEB", R.string.cloud_names_webde) //
|
||||
.withCloudImageResource(R.drawable.cloud_type_webdav) //
|
||||
.withCloudImageLargeResource(R.drawable.cloud_type_webde_large) //
|
||||
.withMultiInstances()
|
||||
.withPreFilledURL("https://webdav.smartdrive.web.de")), //
|
||||
MAILBOX_ORG(Builder("MAILBOX", R.string.cloud_names_mailboxorg) //
|
||||
.withCloudImageResource(R.drawable.cloud_type_webdav) //
|
||||
.withCloudImageLargeResource(R.drawable.cloud_type_webdav_large) //
|
||||
.withMultiInstances()
|
||||
.withPreFilledURL("https://dav.mailbox.org/servlet/webdav.infostore"));
|
||||
|
||||
val cloudName: String = builder.cloudName
|
||||
val displayNameResource: Int = builder.displayNameResource
|
||||
val cloudImageResource: Int = builder.cloudImageResource
|
||||
val cloudImageLargeResource: Int = builder.cloudImageLargeResource
|
||||
val isMultiInstance: Boolean = builder.multiInstances
|
||||
val preFilledURL: String = builder.preFilledURL
|
||||
|
||||
private class Builder(val cloudName: String, val displayNameResource: Int) {
|
||||
var cloudImageResource = 0
|
||||
var cloudImageLargeResource = 0
|
||||
var multiInstances = false
|
||||
var preFilledURL = ""
|
||||
|
||||
fun withCloudImageResource(cloudImageResource: Int): Builder {
|
||||
this.cloudImageResource = cloudImageResource
|
||||
@ -48,6 +60,11 @@ enum class CloudTypeModel(builder: Builder) {
|
||||
multiInstances = true
|
||||
return this
|
||||
}
|
||||
|
||||
fun withPreFilledURL(preFilledURL: String): Builder {
|
||||
this.preFilledURL = preFilledURL
|
||||
return this
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
@ -18,7 +18,7 @@ class CloudModelMapper @Inject constructor() : ModelMapper<CloudModel, Cloud>()
|
||||
CloudTypeModel.ONEDRIVE -> OnedriveCloudModel(domainObject)
|
||||
CloudTypeModel.CRYPTO -> CryptoCloudModel(domainObject)
|
||||
CloudTypeModel.LOCAL -> LocalStorageModel(domainObject)
|
||||
CloudTypeModel.WEBDAV -> WebDavCloudModel(domainObject)
|
||||
CloudTypeModel.WEBDAV, CloudTypeModel.WEB_DE, CloudTypeModel.MAILBOX_ORG -> WebDavCloudModel(domainObject)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -6,9 +6,7 @@ import android.net.Uri
|
||||
import android.os.Build
|
||||
import android.widget.Toast
|
||||
import androidx.annotation.RequiresApi
|
||||
import org.cryptomator.domain.Cloud
|
||||
import org.cryptomator.domain.LocalStorageCloud
|
||||
import org.cryptomator.domain.Vault
|
||||
import org.cryptomator.domain.*
|
||||
import org.cryptomator.domain.di.PerView
|
||||
import org.cryptomator.domain.usecases.cloud.AddOrChangeCloudConnectionUseCase
|
||||
import org.cryptomator.domain.usecases.cloud.GetCloudsUseCase
|
||||
@ -48,8 +46,13 @@ class CloudConnectionListPresenter @Inject constructor( //
|
||||
}
|
||||
|
||||
fun loadCloudList() {
|
||||
val cloudTypeFilter = when(selectedCloudType.get()) {
|
||||
CloudTypeModel.WEB_DE, CloudTypeModel.MAILBOX_ORG -> CloudTypeModel.WEBDAV
|
||||
else -> selectedCloudType.get()
|
||||
}
|
||||
|
||||
getCloudsUseCase //
|
||||
.withCloudType(CloudTypeModel.valueOf(selectedCloudType.get())) //
|
||||
.withCloudType(CloudTypeModel.valueOf(cloudTypeFilter)) //
|
||||
.run(object : DefaultResultHandler<List<Cloud>>() {
|
||||
override fun onSuccess(clouds: List<Cloud>) {
|
||||
val cloudModels: MutableList<CloudModel> = ArrayList()
|
||||
@ -60,6 +63,18 @@ class CloudConnectionListPresenter @Inject constructor( //
|
||||
return@forEach
|
||||
}
|
||||
}
|
||||
|
||||
// WebDAV but WEB.DE, MAILBOX_ORG, or ...
|
||||
if(cloud.type() == CloudType.WEBDAV && selectedCloudType.get() != cloud.type()) {
|
||||
when (selectedCloudType.get()) {
|
||||
CloudTypeModel.WEB_DE, CloudTypeModel.MAILBOX_ORG -> {
|
||||
if(!(cloud as WebDavCloud).url().startsWith(selectedCloudType.get().preFilledURL)) {
|
||||
return@forEach
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
cloudModels.add(cloudModelMapper.toModel(cloud))
|
||||
}
|
||||
view?.showCloudModels(cloudModels)
|
||||
@ -123,6 +138,8 @@ class CloudConnectionListPresenter @Inject constructor( //
|
||||
CloudTypeModel.WEBDAV -> requestActivityResult(ActivityResultCallbacks.addChangeWebDavCloud(), //
|
||||
Intents.webDavAddOrChangeIntent())
|
||||
CloudTypeModel.LOCAL -> openDocumentTree()
|
||||
CloudTypeModel.WEB_DE, CloudTypeModel.MAILBOX_ORG -> requestActivityResult(ActivityResultCallbacks.addChangeWebDavCloud(), //
|
||||
Intents.webDavAddOrChangeIntent().withPreFilledURL(selectedCloudType.get().preFilledURL))
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -29,7 +29,7 @@ class ChooseCloudServiceActivity : BaseActivity(), ChooseCloudServiceView {
|
||||
setSupportActionBar(toolbar)
|
||||
}
|
||||
|
||||
override fun createFragment(): Fragment? = ChooseCloudServiceFragment()
|
||||
override fun createFragment(): Fragment = ChooseCloudServiceFragment()
|
||||
|
||||
override fun getCustomMenuResource(): Int = R.menu.menu_cloud_services
|
||||
|
||||
|
@ -31,7 +31,7 @@ class WebDavAddOrChangeActivity : BaseActivity(),
|
||||
setSupportActionBar(toolbar)
|
||||
}
|
||||
|
||||
override fun createFragment(): Fragment = WebDavAddOrChangeFragment.newInstance(webDavAddOrChangeIntent.webDavCloud())
|
||||
override fun createFragment(): Fragment = WebDavAddOrChangeFragment.newInstance(webDavAddOrChangeIntent.webDavCloud(), webDavAddOrChangeIntent.preFilledURL())
|
||||
|
||||
override fun onCheckUserInputSucceeded(urlPort: String, username: String, password: String, cloudId: Long?, certificate: String?) {
|
||||
webDavAddOrChangeFragment().hideKeyboard()
|
||||
|
@ -23,6 +23,9 @@ class WebDavAddOrChangeFragment : BaseFragment() {
|
||||
private val webDavCloudModel: WebDavCloudModel?
|
||||
get() = arguments?.getSerializable(ARG_WEBDAV_CLOUD) as? WebDavCloudModel
|
||||
|
||||
private val preFilledPath: String?
|
||||
get() = arguments?.getSerializable(ARG_PRE_FILLED_PATH) as? String
|
||||
|
||||
override fun setupView() {
|
||||
createCloudButton.setOnClickListener { createCloud() }
|
||||
createCloudButton.setOnEditorActionListener { _, actionId, _ ->
|
||||
@ -32,12 +35,16 @@ class WebDavAddOrChangeFragment : BaseFragment() {
|
||||
false
|
||||
}
|
||||
|
||||
preFilledPath?.let {
|
||||
urlPortEditText.setText(it)
|
||||
}
|
||||
|
||||
urlPortEditText.text?.length?.let { urlPortEditText.setSelection(it) }
|
||||
showEditableCloudContent(webDavCloudModel)
|
||||
}
|
||||
|
||||
private fun showEditableCloudContent(webDavCloudModel: WebDavCloudModel?) {
|
||||
if (webDavCloudModel != null) {
|
||||
webDavCloudModel?.let {
|
||||
urlPortEditText.setText(webDavCloudModel.url())
|
||||
userNameEditText.setText(webDavCloudModel.username())
|
||||
passwordEditText.setText(getPassword(webDavCloudModel.accessToken()))
|
||||
@ -74,11 +81,13 @@ class WebDavAddOrChangeFragment : BaseFragment() {
|
||||
companion object {
|
||||
|
||||
private const val ARG_WEBDAV_CLOUD = "WEBDAV_CLOUD"
|
||||
private const val ARG_PRE_FILLED_PATH = "PRE_FILLED_CLOUD_PATH"
|
||||
|
||||
fun newInstance(cloudModel: WebDavCloudModel?): WebDavAddOrChangeFragment {
|
||||
fun newInstance(cloudModel: WebDavCloudModel?, preFilledURL: String?): androidx.fragment.app.Fragment {
|
||||
val result = WebDavAddOrChangeFragment()
|
||||
val args = Bundle()
|
||||
args.putSerializable(ARG_WEBDAV_CLOUD, cloudModel)
|
||||
args.putSerializable(ARG_PRE_FILLED_PATH, preFilledURL)
|
||||
result.arguments = args
|
||||
return result
|
||||
}
|
||||
|
Binary file not shown.
After Width: | Height: | Size: 17 KiB |
Binary file not shown.
After Width: | Height: | Size: 24 KiB |
@ -41,6 +41,8 @@
|
||||
<string name="cloud_names_onedrive" translatable="false">OneDrive</string>
|
||||
<string name="cloud_names_webdav" translatable="false">WebDAV</string>
|
||||
<string name="cloud_names_local_storage">Local storage</string>
|
||||
<string name="cloud_names_webde" translatable="false">WEB.DE</string>
|
||||
<string name="cloud_names_mailboxorg" translatable="false">Mailbox.org</string>
|
||||
|
||||
<!-- # permission -->
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user