Add display name to S3 cloud
This commit is contained in:
parent
7f0967ab88
commit
e4ad22b00b
@ -70,6 +70,7 @@ public class CloudEntityMapper extends EntityMapper<CloudEntity, Cloud> {
|
|||||||
.withAccessKey(entity.getAccessToken()) //
|
.withAccessKey(entity.getAccessToken()) //
|
||||||
.withSecretKey(entity.getS3SecretKey()) //
|
.withSecretKey(entity.getS3SecretKey()) //
|
||||||
.withS3Bucket(entity.getS3Bucket()) //
|
.withS3Bucket(entity.getS3Bucket()) //
|
||||||
|
.withDisplayName(entity.getUsername()) //
|
||||||
.build();
|
.build();
|
||||||
case WEBDAV:
|
case WEBDAV:
|
||||||
return aWebDavCloudCloud() //
|
return aWebDavCloudCloud() //
|
||||||
@ -116,6 +117,7 @@ public class CloudEntityMapper extends EntityMapper<CloudEntity, Cloud> {
|
|||||||
result.setAccessToken(((S3Cloud) domainObject).accessKey());
|
result.setAccessToken(((S3Cloud) domainObject).accessKey());
|
||||||
result.setS3SecretKey(((S3Cloud) domainObject).secretKey());
|
result.setS3SecretKey(((S3Cloud) domainObject).secretKey());
|
||||||
result.setS3Bucket(((S3Cloud) domainObject).s3Bucket());
|
result.setS3Bucket(((S3Cloud) domainObject).s3Bucket());
|
||||||
|
result.setUsername(((S3Cloud) domainObject).displayName());
|
||||||
break;
|
break;
|
||||||
case WEBDAV:
|
case WEBDAV:
|
||||||
result.setAccessToken(((WebDavCloud) domainObject).password());
|
result.setAccessToken(((WebDavCloud) domainObject).password());
|
||||||
|
@ -10,6 +10,7 @@ public class S3Cloud implements Cloud {
|
|||||||
private final String s3Bucket;
|
private final String s3Bucket;
|
||||||
private final String s3Endpoint;
|
private final String s3Endpoint;
|
||||||
private final String s3Region;
|
private final String s3Region;
|
||||||
|
private final String displayName;
|
||||||
|
|
||||||
private S3Cloud(Builder builder) {
|
private S3Cloud(Builder builder) {
|
||||||
this.id = builder.id;
|
this.id = builder.id;
|
||||||
@ -18,6 +19,7 @@ public class S3Cloud implements Cloud {
|
|||||||
this.s3Bucket = builder.s3Bucket;
|
this.s3Bucket = builder.s3Bucket;
|
||||||
this.s3Endpoint = builder.s3Endpoint;
|
this.s3Endpoint = builder.s3Endpoint;
|
||||||
this.s3Region = builder.s3Region;
|
this.s3Region = builder.s3Region;
|
||||||
|
this.displayName = builder.displayName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Builder aS3Cloud() {
|
public static Builder aS3Cloud() {
|
||||||
@ -31,7 +33,8 @@ public class S3Cloud implements Cloud {
|
|||||||
.withSecretKey(s3Cloud.secretKey()) //
|
.withSecretKey(s3Cloud.secretKey()) //
|
||||||
.withS3Bucket(s3Cloud.s3Bucket()) //
|
.withS3Bucket(s3Cloud.s3Bucket()) //
|
||||||
.withS3Endpoint(s3Cloud.s3Endpoint()) //
|
.withS3Endpoint(s3Cloud.s3Endpoint()) //
|
||||||
.withS3Region(s3Cloud.s3Region());
|
.withS3Region(s3Cloud.s3Region()) //
|
||||||
|
.withDisplayName(s3Cloud.displayName());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -59,6 +62,10 @@ public class S3Cloud implements Cloud {
|
|||||||
return s3Region;
|
return s3Region;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String displayName() {
|
||||||
|
return displayName;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CloudType type() {
|
public CloudType type() {
|
||||||
return CloudType.S3;
|
return CloudType.S3;
|
||||||
@ -124,6 +131,7 @@ public class S3Cloud implements Cloud {
|
|||||||
private String s3Bucket;
|
private String s3Bucket;
|
||||||
private String s3Endpoint;
|
private String s3Endpoint;
|
||||||
private String s3Region;
|
private String s3Region;
|
||||||
|
private String displayName;
|
||||||
|
|
||||||
private Builder() {
|
private Builder() {
|
||||||
}
|
}
|
||||||
@ -158,6 +166,11 @@ public class S3Cloud implements Cloud {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Builder withDisplayName(String displayName) {
|
||||||
|
this.displayName = displayName;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
public S3Cloud build() {
|
public S3Cloud build() {
|
||||||
return new S3Cloud(this);
|
return new S3Cloud(this);
|
||||||
}
|
}
|
||||||
|
@ -23,13 +23,13 @@ enum class CloudTypeModel(builder: Builder) {
|
|||||||
.withVaultImageResource(R.drawable.pcloud_vault) //
|
.withVaultImageResource(R.drawable.pcloud_vault) //
|
||||||
.withVaultSelectedImageResource(R.drawable.pcloud_vault_selected) //
|
.withVaultSelectedImageResource(R.drawable.pcloud_vault_selected) //
|
||||||
.withMultiInstances()), //
|
.withMultiInstances()), //
|
||||||
S3(Builder("S3", R.string.cloud_names_s3) //
|
WEBDAV(Builder("WEBDAV", R.string.cloud_names_webdav) //
|
||||||
.withCloudImageResource(R.drawable.s3) //
|
.withCloudImageResource(R.drawable.webdav) //
|
||||||
.withVaultImageResource(R.drawable.webdav_vault) //
|
.withVaultImageResource(R.drawable.webdav_vault) //
|
||||||
.withVaultSelectedImageResource(R.drawable.webdav_vault_selected) //
|
.withVaultSelectedImageResource(R.drawable.webdav_vault_selected) //
|
||||||
.withMultiInstances()), //
|
.withMultiInstances()), //
|
||||||
WEBDAV(Builder("WEBDAV", R.string.cloud_names_webdav) //
|
S3(Builder("S3", R.string.cloud_names_s3) //
|
||||||
.withCloudImageResource(R.drawable.webdav) //
|
.withCloudImageResource(R.drawable.s3) //
|
||||||
.withVaultImageResource(R.drawable.webdav_vault) //
|
.withVaultImageResource(R.drawable.webdav_vault) //
|
||||||
.withVaultSelectedImageResource(R.drawable.webdav_vault_selected) //
|
.withVaultSelectedImageResource(R.drawable.webdav_vault_selected) //
|
||||||
.withMultiInstances()), //
|
.withMultiInstances()), //
|
||||||
|
@ -10,8 +10,8 @@ class S3CloudModel(cloud: Cloud) : CloudModel(cloud) {
|
|||||||
return R.string.cloud_names_s3
|
return R.string.cloud_names_s3
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun username(): String? {
|
override fun username(): String {
|
||||||
return "" // FIXME
|
return cloud().displayName()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun cloudType(): CloudTypeModel {
|
override fun cloudType(): CloudTypeModel {
|
||||||
|
@ -93,8 +93,8 @@ class CloudSettingsPresenter @Inject constructor( //
|
|||||||
private fun effectiveTitle(cloudTypeModel: CloudTypeModel): String {
|
private fun effectiveTitle(cloudTypeModel: CloudTypeModel): String {
|
||||||
when (cloudTypeModel) {
|
when (cloudTypeModel) {
|
||||||
CloudTypeModel.PCLOUD -> return context().getString(R.string.screen_cloud_settings_pcloud_connections)
|
CloudTypeModel.PCLOUD -> return context().getString(R.string.screen_cloud_settings_pcloud_connections)
|
||||||
CloudTypeModel.S3 -> return context().getString(R.string.screen_cloud_settings_s3_connections)
|
|
||||||
CloudTypeModel.WEBDAV -> return context().getString(R.string.screen_cloud_settings_webdav_connections)
|
CloudTypeModel.WEBDAV -> return context().getString(R.string.screen_cloud_settings_webdav_connections)
|
||||||
|
CloudTypeModel.S3 -> return context().getString(R.string.screen_cloud_settings_s3_connections)
|
||||||
CloudTypeModel.LOCAL -> return context().getString(R.string.screen_cloud_settings_local_storage_locations)
|
CloudTypeModel.LOCAL -> return context().getString(R.string.screen_cloud_settings_local_storage_locations)
|
||||||
}
|
}
|
||||||
return context().getString(R.string.screen_cloud_settings_title)
|
return context().getString(R.string.screen_cloud_settings_title)
|
||||||
@ -127,8 +127,8 @@ class CloudSettingsPresenter @Inject constructor( //
|
|||||||
.toMutableList() //
|
.toMutableList() //
|
||||||
.also {
|
.also {
|
||||||
it.add(aPCloud())
|
it.add(aPCloud())
|
||||||
it.add(aS3Cloud())
|
|
||||||
it.add(aWebdavCloud())
|
it.add(aWebdavCloud())
|
||||||
|
it.add(aS3Cloud())
|
||||||
it.add(aLocalCloud())
|
it.add(aLocalCloud())
|
||||||
}
|
}
|
||||||
view?.render(cloudModel)
|
view?.render(cloudModel)
|
||||||
@ -138,14 +138,14 @@ class CloudSettingsPresenter @Inject constructor( //
|
|||||||
return PCloudModel(PCloud.aPCloud().build())
|
return PCloudModel(PCloud.aPCloud().build())
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun aS3Cloud(): S3CloudModel {
|
|
||||||
return S3CloudModel(S3Cloud.aS3Cloud().build())
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun aWebdavCloud(): WebDavCloudModel {
|
private fun aWebdavCloud(): WebDavCloudModel {
|
||||||
return WebDavCloudModel(WebDavCloud.aWebDavCloudCloud().build())
|
return WebDavCloudModel(WebDavCloud.aWebDavCloudCloud().build())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun aS3Cloud(): S3CloudModel {
|
||||||
|
return S3CloudModel(S3Cloud.aS3Cloud().build())
|
||||||
|
}
|
||||||
|
|
||||||
private fun aLocalCloud(): CloudModel {
|
private fun aLocalCloud(): CloudModel {
|
||||||
return LocalStorageModel(LocalStorageCloud.aLocalStorage().build())
|
return LocalStorageModel(LocalStorageCloud.aLocalStorage().build())
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,7 @@ class S3AddOrChangePresenter @Inject internal constructor( //
|
|||||||
private val connectToS3UseCase: ConnectToS3UseCase, //
|
private val connectToS3UseCase: ConnectToS3UseCase, //
|
||||||
exceptionMappings: ExceptionHandlers) : Presenter<S3AddOrChangeView>(exceptionMappings) {
|
exceptionMappings: ExceptionHandlers) : Presenter<S3AddOrChangeView>(exceptionMappings) {
|
||||||
|
|
||||||
fun checkUserInput(accessKey: String, secretKey: String, bucket: String, endpoint: String?, region: String?, cloudId: Long?) {
|
fun checkUserInput(accessKey: String, secretKey: String, bucket: String, endpoint: String?, region: String?, cloudId: Long?, displayName: String) {
|
||||||
var statusMessage: String? = null
|
var statusMessage: String? = null
|
||||||
|
|
||||||
/*if (accessKey.isEmpty()) {
|
/*if (accessKey.isEmpty()) {
|
||||||
@ -36,7 +36,7 @@ class S3AddOrChangePresenter @Inject internal constructor( //
|
|||||||
// FIXME showError instead of displaying a toast
|
// FIXME showError instead of displaying a toast
|
||||||
Toast.makeText(context(), statusMessage, Toast.LENGTH_SHORT).show()
|
Toast.makeText(context(), statusMessage, Toast.LENGTH_SHORT).show()
|
||||||
} else {
|
} else {
|
||||||
view?.onCheckUserInputSucceeded(encrypt(accessKey), encrypt(secretKey), bucket, endpoint, region, cloudId)
|
view?.onCheckUserInputSucceeded(encrypt(accessKey), encrypt(secretKey), bucket, endpoint, region, cloudId, displayName)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -46,22 +46,23 @@ class S3AddOrChangePresenter @Inject internal constructor( //
|
|||||||
.encrypt(text)
|
.encrypt(text)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun mapToCloud(accessKey: String, secretKey: String, bucket: String, endpoint: String?, region: String?, cloudId: Long?): S3Cloud {
|
private fun mapToCloud(accessKey: String, secretKey: String, bucket: String, endpoint: String?, region: String?, cloudId: Long?, displayName: String): S3Cloud {
|
||||||
var builder = S3Cloud //
|
var builder = S3Cloud //
|
||||||
.aS3Cloud() //
|
.aS3Cloud() //
|
||||||
.withAccessKey(accessKey) //
|
.withAccessKey(accessKey) //
|
||||||
.withSecretKey(secretKey) //
|
.withSecretKey(secretKey) //
|
||||||
.withS3Bucket(bucket) //
|
.withS3Bucket(bucket) //
|
||||||
.withS3Endpoint(endpoint) //
|
.withS3Endpoint(endpoint) //
|
||||||
.withS3Region(region)
|
.withS3Region(region) //
|
||||||
|
.withDisplayName(displayName)
|
||||||
|
|
||||||
cloudId?.let { builder = builder.withId(cloudId) }
|
cloudId?.let { builder = builder.withId(cloudId) }
|
||||||
|
|
||||||
return builder.build()
|
return builder.build()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun authenticate(accessKey: String, secretKey: String, bucket: String, endpoint: String?, region: String?, cloudId: Long?) {
|
fun authenticate(accessKey: String, secretKey: String, bucket: String, endpoint: String?, region: String?, cloudId: Long?, displayName: String) {
|
||||||
authenticate(mapToCloud(accessKey, secretKey, bucket, endpoint, region, cloudId))
|
authenticate(mapToCloud(accessKey, secretKey, bucket, endpoint, region, cloudId, displayName))
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun authenticate(cloud: S3Cloud) {
|
private fun authenticate(cloud: S3Cloud) {
|
||||||
|
@ -27,9 +27,9 @@ class S3AddOrChangeActivity : BaseActivity(), S3AddOrChangeView {
|
|||||||
|
|
||||||
override fun createFragment(): Fragment = S3AddOrChangeFragment.newInstance(s3AddOrChangeIntent.s3Cloud())
|
override fun createFragment(): Fragment = S3AddOrChangeFragment.newInstance(s3AddOrChangeIntent.s3Cloud())
|
||||||
|
|
||||||
override fun onCheckUserInputSucceeded(accessKey: String, secretKey: String, bucket: String, endpoint: String?, region: String?, cloudId: Long?) {
|
override fun onCheckUserInputSucceeded(accessKey: String, secretKey: String, bucket: String, endpoint: String?, region: String?, cloudId: Long?, displayName: String) {
|
||||||
s3AddOrChangeFragment().hideKeyboard()
|
s3AddOrChangeFragment().hideKeyboard()
|
||||||
s3AddOrChangePresenter.authenticate(accessKey, secretKey, bucket, endpoint, region, cloudId)
|
s3AddOrChangePresenter.authenticate(accessKey, secretKey, bucket, endpoint, region, cloudId, displayName)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun s3AddOrChangeFragment(): S3AddOrChangeFragment = getCurrentFragment(R.id.fragmentContainer) as S3AddOrChangeFragment
|
private fun s3AddOrChangeFragment(): S3AddOrChangeFragment = getCurrentFragment(R.id.fragmentContainer) as S3AddOrChangeFragment
|
||||||
|
@ -2,6 +2,6 @@ package org.cryptomator.presentation.ui.activity.view
|
|||||||
|
|
||||||
interface S3AddOrChangeView : View {
|
interface S3AddOrChangeView : View {
|
||||||
|
|
||||||
fun onCheckUserInputSucceeded(accessKey: String, secretKey: String, bucket: String, endpoint: String?, region: String?, cloudId: Long?)
|
fun onCheckUserInputSucceeded(accessKey: String, secretKey: String, bucket: String, endpoint: String?, region: String?, cloudId: Long?, displayName: String)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -87,7 +87,7 @@ internal constructor(context: Context) : RecyclerViewBaseAdapter<CloudModel, Clo
|
|||||||
|
|
||||||
|
|
||||||
private fun bindS3loudModel(cloudModel: S3CloudModel) {
|
private fun bindS3loudModel(cloudModel: S3CloudModel) {
|
||||||
itemView.cloudText.text = cloudModel.username() // FIXME what to display
|
itemView.cloudText.text = cloudModel.username()
|
||||||
itemView.cloudSubText.visibility = View.GONE
|
itemView.cloudSubText.visibility = View.GONE
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,7 +70,7 @@ class CloudConnectionSettingsBottomSheet : BaseBottomSheet<CloudConnectionSettin
|
|||||||
|
|
||||||
private fun bindViewForS3(cloudModel: S3CloudModel) {
|
private fun bindViewForS3(cloudModel: S3CloudModel) {
|
||||||
change_cloud.visibility = View.VISIBLE
|
change_cloud.visibility = View.VISIBLE
|
||||||
tv_cloud_name.text = cloudModel.username() // FIXME what to display
|
tv_cloud_name.text = cloudModel.username()
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
@ -14,6 +14,7 @@ import javax.inject.Inject
|
|||||||
import kotlinx.android.synthetic.main.fragment_setup_s3.accessKeyEditText
|
import kotlinx.android.synthetic.main.fragment_setup_s3.accessKeyEditText
|
||||||
import kotlinx.android.synthetic.main.fragment_setup_s3.bucketEditText
|
import kotlinx.android.synthetic.main.fragment_setup_s3.bucketEditText
|
||||||
import kotlinx.android.synthetic.main.fragment_setup_s3.createCloudButton
|
import kotlinx.android.synthetic.main.fragment_setup_s3.createCloudButton
|
||||||
|
import kotlinx.android.synthetic.main.fragment_setup_s3.displayNameEditText
|
||||||
import kotlinx.android.synthetic.main.fragment_setup_s3.endpointEditText
|
import kotlinx.android.synthetic.main.fragment_setup_s3.endpointEditText
|
||||||
import kotlinx.android.synthetic.main.fragment_setup_s3.ll_custom_s3
|
import kotlinx.android.synthetic.main.fragment_setup_s3.ll_custom_s3
|
||||||
import kotlinx.android.synthetic.main.fragment_setup_s3.regionEditText
|
import kotlinx.android.synthetic.main.fragment_setup_s3.regionEditText
|
||||||
@ -64,6 +65,7 @@ class S3AddOrChangeFragment : BaseFragment() {
|
|||||||
private fun showEditableCloudContent(s3CloudModel: S3CloudModel?) {
|
private fun showEditableCloudContent(s3CloudModel: S3CloudModel?) {
|
||||||
s3CloudModel?.let {
|
s3CloudModel?.let {
|
||||||
cloudId = s3CloudModel.id()
|
cloudId = s3CloudModel.id()
|
||||||
|
displayNameEditText.setText(s3CloudModel.username())
|
||||||
accessKeyEditText.setText(decrypt(s3CloudModel.accessKey()))
|
accessKeyEditText.setText(decrypt(s3CloudModel.accessKey()))
|
||||||
secretKeyEditText.setText(decrypt(s3CloudModel.secretKey()))
|
secretKeyEditText.setText(decrypt(s3CloudModel.secretKey()))
|
||||||
bucketEditText.setText(s3CloudModel.s3Bucket())
|
bucketEditText.setText(s3CloudModel.s3Bucket())
|
||||||
@ -89,6 +91,7 @@ class S3AddOrChangeFragment : BaseFragment() {
|
|||||||
val accessKey = accessKeyEditText.text.toString().trim()
|
val accessKey = accessKeyEditText.text.toString().trim()
|
||||||
val secretKey = secretKeyEditText.text.toString().trim()
|
val secretKey = secretKeyEditText.text.toString().trim()
|
||||||
val bucket = bucketEditText.text.toString().trim()
|
val bucket = bucketEditText.text.toString().trim()
|
||||||
|
val displayName = displayNameEditText.text.toString().trim()
|
||||||
|
|
||||||
var endpoint: String? = null
|
var endpoint: String? = null
|
||||||
var region: String? = null
|
var region: String? = null
|
||||||
@ -97,7 +100,7 @@ class S3AddOrChangeFragment : BaseFragment() {
|
|||||||
region = regionEditText.text.toString().trim()
|
region = regionEditText.text.toString().trim()
|
||||||
}
|
}
|
||||||
|
|
||||||
s3AddOrChangePresenter.checkUserInput(accessKey, secretKey, bucket, endpoint, region, cloudId)
|
s3AddOrChangePresenter.checkUserInput(accessKey, secretKey, bucket, endpoint, region, cloudId, displayName)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun hideKeyboard() {
|
fun hideKeyboard() {
|
||||||
|
@ -1,10 +1,36 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:padding="@dimen/activity_vertical_margin">
|
android:padding="@dimen/activity_vertical_margin">
|
||||||
|
|
||||||
|
<com.google.android.material.textfield.TextInputLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
|
<com.google.android.material.textfield.TextInputEditText
|
||||||
|
android:id="@+id/displayNameEditText"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:hint="@string/screen_s3_settings_display_name_label"
|
||||||
|
android:imeOptions="flagNoPersonalizedLearning"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:singleLine="true" />
|
||||||
|
|
||||||
|
</com.google.android.material.textfield.TextInputLayout>
|
||||||
|
|
||||||
|
<com.google.android.material.textfield.TextInputLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
|
|
||||||
|
</com.google.android.material.textfield.TextInputLayout>
|
||||||
|
|
||||||
<com.google.android.material.textfield.TextInputLayout
|
<com.google.android.material.textfield.TextInputLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content">
|
android:layout_height="wrap_content">
|
||||||
@ -110,4 +136,4 @@
|
|||||||
android:textStyle="bold" />
|
android:textStyle="bold" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
</ScrollView>
|
||||||
|
@ -175,6 +175,7 @@
|
|||||||
|
|
||||||
<!-- ## screen: s3 settings -->
|
<!-- ## screen: s3 settings -->
|
||||||
<string name="screen_s3_settings_title" translatable="false">@string/cloud_names_s3</string>
|
<string name="screen_s3_settings_title" translatable="false">@string/cloud_names_s3</string>
|
||||||
|
<string name="screen_s3_settings_display_name_label">Display Name</string>
|
||||||
<string name="screen_s3_settings_access_key_label">Access Key</string>
|
<string name="screen_s3_settings_access_key_label">Access Key</string>
|
||||||
<string name="screen_s3_settings_secret_key_label">Secret Key</string>
|
<string name="screen_s3_settings_secret_key_label">Secret Key</string>
|
||||||
<string name="screen_s3_settings_bucket_label">Bucket</string>
|
<string name="screen_s3_settings_bucket_label">Bucket</string>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user