Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/stefan-niedermann/nextcloud-notes.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Niedermann <info@niedermann.it>2021-03-16 01:37:29 +0300
committerStefan Niedermann <info@niedermann.it>2021-03-16 01:37:29 +0300
commit669d457f5c2eaf062dec08a133f3516ee4038c4d (patch)
treebe54883e6c0b29f154fee21243939ec8907a18d6
parenta447542fc16f602fa0e7db7533b2ca78b72d18fc (diff)
#916 Change remote account settings - Server connection
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/manageaccounts/ManageAccountsActivity.java56
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesClient.java11
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesClientV1.java16
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/shared/model/ServerSettings.java47
4 files changed, 122 insertions, 8 deletions
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/manageaccounts/ManageAccountsActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/manageaccounts/ManageAccountsActivity.java
index 1e51c20e..7f973528 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/manageaccounts/ManageAccountsActivity.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/manageaccounts/ManageAccountsActivity.java
@@ -13,8 +13,10 @@ import androidx.annotation.AttrRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.Px;
+import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
+import com.nextcloud.android.sso.AccountImporter;
import com.nextcloud.android.sso.exceptions.NextcloudFilesAppAccountNotFoundException;
import com.nextcloud.android.sso.exceptions.NoCurrentAccountSelectedException;
import com.nextcloud.android.sso.helper.SingleAccountHelper;
@@ -27,8 +29,11 @@ import it.niedermann.owncloud.notes.LockedActivity;
import it.niedermann.owncloud.notes.R;
import it.niedermann.owncloud.notes.branding.BrandedAlertDialogBuilder;
import it.niedermann.owncloud.notes.databinding.ActivityManageAccountsBinding;
-import it.niedermann.owncloud.notes.shared.model.LocalAccount;
+import it.niedermann.owncloud.notes.exception.ExceptionDialogFragment;
+import it.niedermann.owncloud.notes.persistence.NotesClient;
import it.niedermann.owncloud.notes.persistence.NotesDatabase;
+import it.niedermann.owncloud.notes.shared.model.LocalAccount;
+import it.niedermann.owncloud.notes.shared.model.ServerSettings;
import static android.os.Build.VERSION.SDK_INT;
import static android.os.Build.VERSION_CODES.LOLLIPOP_MR1;
@@ -90,34 +95,71 @@ public class ManageAccountsActivity extends LockedActivity {
}
private void onChangeNotesPath(@NonNull LocalAccount localAccount) {
+ final NotesClient client = NotesClient.newInstance(localAccount.getPreferredApiVersion(), getApplicationContext());
final EditText editText = new EditText(this);
+ editText.setEnabled(false);
final View wrapper = createDialogViewWrapper(editText);
- new BrandedAlertDialogBuilder(this)
+ final AlertDialog dialog = new BrandedAlertDialogBuilder(this)
.setTitle(R.string.settings_notes_path)
.setMessage("Folder to store your notes in your Nextcloud")
.setView(wrapper)
.setNeutralButton(android.R.string.cancel, null)
- .setPositiveButton(R.string.action_edit_save, (v, d) -> {
- Toast.makeText(this, "Submitted " + editText.getText(), Toast.LENGTH_LONG).show();
- })
+ .setPositiveButton(R.string.action_edit_save, (v, d) -> new Thread(() -> {
+ try {
+ final ServerSettings newSettings = client.putServerSettings(AccountImporter.getSingleSignOnAccount(this, localAccount.getAccountName()), new ServerSettings(editText.getText().toString(), null));
+ Toast.makeText(this, "New notes path: " + newSettings.getNotesPath(), Toast.LENGTH_LONG).show();
+ } catch (Exception e) {
+ ExceptionDialogFragment.newInstance(e).show(getSupportFragmentManager(), ExceptionDialogFragment.class.getSimpleName());
+ }
+ }).start())
.show();
+ new Thread(() -> {
+ try {
+ final ServerSettings oldSettings = client.getServerSettings(AccountImporter.getSingleSignOnAccount(this, localAccount.getAccountName()));
+ editText.setText(oldSettings.getNotesPath());
+ editText.setEnabled(true);
+ } catch (Exception e) {
+ dialog.dismiss();
+ ExceptionDialogFragment.newInstance(e).show(getSupportFragmentManager(), ExceptionDialogFragment.class.getSimpleName());
+ }
+ }).start();
}
private void onChangeFileSuffix(@NonNull LocalAccount localAccount) {
+ final NotesClient client = NotesClient.newInstance(localAccount.getPreferredApiVersion(), getApplicationContext());
final Spinner spinner = new Spinner(this);
+ spinner.setEnabled(false);
final View wrapper = createDialogViewWrapper(spinner);
final ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.settings_file_suffixes, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
- new BrandedAlertDialogBuilder(this)
+ final AlertDialog dialog = new BrandedAlertDialogBuilder(this)
.setTitle(R.string.settings_file_suffix)
.setMessage("File extension for new notes in your Nextcloud")
.setView(wrapper)
.setNeutralButton(android.R.string.cancel, null)
.setPositiveButton("Save", (v, d) -> {
- Toast.makeText(this, "Submitted " + spinner.getSelectedItem(), Toast.LENGTH_LONG).show();
+ new Thread(() -> {
+ try {
+ final ServerSettings newSettings = client.putServerSettings(AccountImporter.getSingleSignOnAccount(this, localAccount.getAccountName()), new ServerSettings(null, spinner.getSelectedItem().toString()));
+ Toast.makeText(this, "New file suffix: " + newSettings.getNotesPath(), Toast.LENGTH_LONG).show();
+ } catch (Exception e) {
+ ExceptionDialogFragment.newInstance(e).show(getSupportFragmentManager(), ExceptionDialogFragment.class.getSimpleName());
+ }
+ }).start();
})
.show();
+ new Thread(() -> {
+ try {
+ final ServerSettings oldSettings = client.getServerSettings(AccountImporter.getSingleSignOnAccount(this, localAccount.getAccountName()));
+ // TODO
+// spinner.setSelection(adapteroldSettings.getNotesPath());
+ spinner.setEnabled(true);
+ } catch (Exception e) {
+ dialog.dismiss();
+ ExceptionDialogFragment.newInstance(e).show(getSupportFragmentManager(), ExceptionDialogFragment.class.getSimpleName());
+ }
+ }).start();
}
@NonNull
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesClient.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesClient.java
index c9ab9b39..cffce6c9 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesClient.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesClient.java
@@ -29,6 +29,7 @@ import it.niedermann.owncloud.notes.shared.model.ApiVersion;
import it.niedermann.owncloud.notes.shared.model.CloudNote;
import it.niedermann.owncloud.notes.shared.model.ServerResponse.NoteResponse;
import it.niedermann.owncloud.notes.shared.model.ServerResponse.NotesResponse;
+import it.niedermann.owncloud.notes.shared.model.ServerSettings;
@SuppressWarnings("WeakerAccess")
@WorkerThread
@@ -61,6 +62,8 @@ public abstract class NotesClient {
public static final String JSON_CATEGORY = "category";
public static final String JSON_ETAG = "etag";
public static final String JSON_MODIFIED = "modified";
+ public static final String JSON_SETTINGS_NOTES_PATH = "notesPath";
+ public static final String JSON_SETTINGS_FILE_SUFFIX = "fileSuffix";
public static final ApiVersion[] SUPPORTED_API_VERSIONS = new ApiVersion[]{
new ApiVersion(1, 0),
@@ -96,6 +99,14 @@ public abstract class NotesClient {
abstract void deleteNote(SingleSignOnAccount ssoAccount, long noteId) throws Exception;
+ public ServerSettings getServerSettings(SingleSignOnAccount ssoAccount) throws Exception {
+ throw new UnsupportedOperationException("Not available in this API version");
+ }
+
+ public ServerSettings putServerSettings(SingleSignOnAccount ssoAccount, @NonNull ServerSettings settings) throws Exception {
+ throw new UnsupportedOperationException("Not available in this API version");
+ }
+
/**
* This entity class is used to return relevant data of the HTTP reponse.
*/
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesClientV1.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesClientV1.java
index 220d4f8f..c9150f6c 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesClientV1.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesClientV1.java
@@ -15,6 +15,7 @@ import java.util.Map;
import it.niedermann.owncloud.notes.shared.model.CloudNote;
import it.niedermann.owncloud.notes.shared.model.ServerResponse.NoteResponse;
import it.niedermann.owncloud.notes.shared.model.ServerResponse.NotesResponse;
+import it.niedermann.owncloud.notes.shared.model.ServerSettings;
@WorkerThread
public class NotesClientV1 extends NotesClient {
@@ -32,7 +33,7 @@ public class NotesClientV1 extends NotesClient {
}
private NoteResponse putNote(SingleSignOnAccount ssoAccount, CloudNote note, String path, String method) throws Exception {
- JSONObject paramObject = new JSONObject();
+ final JSONObject paramObject = new JSONObject();
paramObject.accumulate(JSON_TITLE, note.getTitle());
paramObject.accumulate(JSON_CONTENT, note.getContent());
paramObject.accumulate(JSON_MODIFIED, note.getModified().getTimeInMillis() / 1000);
@@ -57,4 +58,17 @@ public class NotesClientV1 extends NotesClient {
protected String getApiPath() {
return API_PATH;
}
+
+ @Override
+ public ServerSettings getServerSettings(SingleSignOnAccount ssoAccount) throws Exception {
+ return ServerSettings.from(new JSONObject(this.requestServer(ssoAccount, "settings", METHOD_GET, null, null, null).getContent()));
+ }
+
+ @Override
+ public ServerSettings putServerSettings(SingleSignOnAccount ssoAccount, @NonNull ServerSettings settings) throws Exception {
+ final JSONObject paramObject = new JSONObject();
+ paramObject.accumulate(JSON_SETTINGS_NOTES_PATH, settings.getNotesPath());
+ paramObject.accumulate(JSON_SETTINGS_FILE_SUFFIX, settings.getFileSuffix());
+ return ServerSettings.from(new JSONObject(this.requestServer(ssoAccount, "settings", METHOD_PUT, null, paramObject, null).getContent()));
+ }
}
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/shared/model/ServerSettings.java b/app/src/main/java/it/niedermann/owncloud/notes/shared/model/ServerSettings.java
new file mode 100644
index 00000000..e977b697
--- /dev/null
+++ b/app/src/main/java/it/niedermann/owncloud/notes/shared/model/ServerSettings.java
@@ -0,0 +1,47 @@
+package it.niedermann.owncloud.notes.shared.model;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.io.Serializable;
+
+import static it.niedermann.owncloud.notes.persistence.NotesClient.JSON_SETTINGS_FILE_SUFFIX;
+import static it.niedermann.owncloud.notes.persistence.NotesClient.JSON_SETTINGS_NOTES_PATH;
+
+public class ServerSettings implements Serializable {
+ private String notesPath = "";
+ private String fileSuffix = "";
+
+ public ServerSettings(String notesPath, String fileSuffix) {
+ setNotesPath(notesPath);
+ setFileSuffix(fileSuffix);
+ }
+
+ public static ServerSettings from(JSONObject settings) throws JSONException {
+ String notesPath = "";
+ if (settings.has(JSON_SETTINGS_NOTES_PATH)) {
+ notesPath = settings.getString(JSON_SETTINGS_NOTES_PATH);
+ }
+ String fileSuffix = "";
+ if (settings.has(JSON_SETTINGS_FILE_SUFFIX)) {
+ fileSuffix = settings.getString(JSON_SETTINGS_FILE_SUFFIX);
+ }
+ return new ServerSettings(notesPath, fileSuffix);
+ }
+
+ public String getNotesPath() {
+ return notesPath;
+ }
+
+ public void setNotesPath(String notesPath) {
+ this.notesPath = notesPath;
+ }
+
+ public String getFileSuffix() {
+ return fileSuffix;
+ }
+
+ public void setFileSuffix(String fileSuffix) {
+ this.fileSuffix = fileSuffix;
+ }
+} \ No newline at end of file