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:
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/accountswitcher/AccountSwitcherViewHolder.java2
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/manageaccounts/ManageAccountAdapter.java31
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/manageaccounts/ManageAccountViewHolder.java40
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/manageaccounts/ManageAccountsActivity.java77
-rw-r--r--app/src/main/res/layout/item_account_choose.xml4
-rw-r--r--app/src/main/res/menu/menu_account.xml23
-rw-r--r--app/src/main/res/values/strings.xml3
7 files changed, 140 insertions, 40 deletions
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/accountswitcher/AccountSwitcherViewHolder.java b/app/src/main/java/it/niedermann/owncloud/notes/accountswitcher/AccountSwitcherViewHolder.java
index db0379df..ae57b892 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/accountswitcher/AccountSwitcherViewHolder.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/accountswitcher/AccountSwitcherViewHolder.java
@@ -34,6 +34,6 @@ public class AccountSwitcherViewHolder extends RecyclerView.ViewHolder {
.apply(RequestOptions.circleCropTransform())
.into(binding.accountItemAvatar);
itemView.setOnClickListener((v) -> onAccountClick.accept(localAccount));
- binding.delete.setVisibility(View.GONE);
+ binding.accountContextMenu.setVisibility(View.GONE);
}
}
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/manageaccounts/ManageAccountAdapter.java b/app/src/main/java/it/niedermann/owncloud/notes/manageaccounts/ManageAccountAdapter.java
index 33156fb6..8d04e34e 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/manageaccounts/ManageAccountAdapter.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/manageaccounts/ManageAccountAdapter.java
@@ -1,6 +1,7 @@
package it.niedermann.owncloud.notes.manageaccounts;
import android.view.LayoutInflater;
+import android.view.MenuInflater;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
@@ -12,6 +13,7 @@ import java.util.ArrayList;
import java.util.List;
import it.niedermann.owncloud.notes.R;
+import it.niedermann.owncloud.notes.persistence.NotesDatabase;
import it.niedermann.owncloud.notes.shared.model.LocalAccount;
public class ManageAccountAdapter extends RecyclerView.Adapter<ManageAccountViewHolder> {
@@ -22,12 +24,21 @@ public class ManageAccountAdapter extends RecyclerView.Adapter<ManageAccountView
private final List<LocalAccount> localAccounts = new ArrayList<>();
@NonNull
private final Consumer<LocalAccount> onAccountClick;
- @Nullable
+ @NonNull
private final Consumer<LocalAccount> onAccountDelete;
+ @NonNull
+ Consumer<LocalAccount> onChangeNotesPath;
+ @NonNull
+ Consumer<LocalAccount> onChangeFileSuffix;
- public ManageAccountAdapter(@NonNull Consumer<LocalAccount> onAccountClick, @Nullable Consumer<LocalAccount> onAccountDelete) {
+ public ManageAccountAdapter(@NonNull Consumer<LocalAccount> onAccountClick,
+ @NonNull Consumer<LocalAccount> onAccountDelete,
+ @NonNull Consumer<LocalAccount> onChangeNotesPath,
+ @NonNull Consumer<LocalAccount> onChangeFileSuffix) {
this.onAccountClick = onAccountClick;
this.onAccountDelete = onAccountDelete;
+ this.onChangeNotesPath = onChangeNotesPath;
+ this.onChangeFileSuffix = onChangeFileSuffix;
setHasStableIds(true);
}
@@ -49,17 +60,15 @@ public class ManageAccountAdapter extends RecyclerView.Adapter<ManageAccountView
setCurrentLocalAccount(localAccountClicked);
onAccountClick.accept(localAccountClicked);
}, (localAccountToDelete -> {
- if (onAccountDelete != null) {
- for (int i = 0; i < localAccounts.size(); i++) {
- if (localAccounts.get(i).getId() == localAccountToDelete.getId()) {
- localAccounts.remove(i);
- notifyItemRemoved(i);
- break;
- }
+ for (int i = 0; i < localAccounts.size(); i++) {
+ if (localAccounts.get(i).getId() == localAccountToDelete.getId()) {
+ localAccounts.remove(i);
+ notifyItemRemoved(i);
+ break;
}
- onAccountDelete.accept(localAccountToDelete);
}
- }), currentLocalAccount != null && currentLocalAccount.getId() == localAccount.getId());
+ onAccountDelete.accept(localAccountToDelete);
+ }), onChangeNotesPath, onChangeFileSuffix, currentLocalAccount != null && currentLocalAccount.getId() == localAccount.getId());
}
@Override
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/manageaccounts/ManageAccountViewHolder.java b/app/src/main/java/it/niedermann/owncloud/notes/manageaccounts/ManageAccountViewHolder.java
index f077f75b..96a8f381 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/manageaccounts/ManageAccountViewHolder.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/manageaccounts/ManageAccountViewHolder.java
@@ -2,10 +2,14 @@ package it.niedermann.owncloud.notes.manageaccounts;
import android.graphics.drawable.LayerDrawable;
import android.net.Uri;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuInflater;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.appcompat.widget.PopupMenu;
import androidx.core.util.Consumer;
import androidx.recyclerview.widget.RecyclerView;
@@ -23,14 +27,21 @@ import static it.niedermann.owncloud.notes.branding.BrandingUtil.applyBrandToLay
public class ManageAccountViewHolder extends RecyclerView.ViewHolder {
- private ItemAccountChooseBinding binding;
+ private final ItemAccountChooseBinding binding;
public ManageAccountViewHolder(@NonNull View itemView) {
super(itemView);
binding = ItemAccountChooseBinding.bind(itemView);
}
- public void bind(@NonNull LocalAccount localAccount, @NonNull Consumer<LocalAccount> onAccountClick, @Nullable Consumer<LocalAccount> onAccountDelete, boolean isCurrentAccount) {
+ public void bind(
+ @NonNull LocalAccount localAccount,
+ @NonNull Consumer<LocalAccount> onAccountClick,
+ @NonNull Consumer<LocalAccount> onAccountDelete,
+ @NonNull Consumer<LocalAccount> onChangeNotesPath,
+ @NonNull Consumer<LocalAccount> onChangeFileSuffix,
+ boolean isCurrentAccount
+ ) {
binding.accountName.setText(localAccount.getUserName());
binding.accountHost.setText(Uri.parse(localAccount.getUrl()).getHost());
Glide.with(itemView.getContext())
@@ -39,12 +50,25 @@ public class ManageAccountViewHolder extends RecyclerView.ViewHolder {
.apply(RequestOptions.circleCropTransform())
.into(binding.accountItemAvatar);
itemView.setOnClickListener((v) -> onAccountClick.accept(localAccount));
- if (onAccountDelete == null) {
- binding.delete.setVisibility(GONE);
- } else {
- binding.delete.setVisibility(VISIBLE);
- binding.delete.setOnClickListener((v) -> onAccountDelete.accept(localAccount));
- }
+ binding.accountContextMenu.setVisibility(VISIBLE);
+ binding.accountContextMenu.setOnClickListener((v) -> {
+ final PopupMenu popup = new PopupMenu(itemView.getContext(), v);
+ popup.inflate(R.menu.menu_account);
+ popup.setOnMenuItemClickListener(item -> {
+ if (item.getItemId() == R.id.notes_path) {
+ onChangeNotesPath.accept(localAccount);
+ return true;
+ } else if (item.getItemId() == R.id.file_suffix) {
+ onChangeFileSuffix.accept(localAccount);
+ return true;
+ } else if (item.getItemId() == R.id.delete) {
+ onAccountDelete.accept(localAccount);
+ return true;
+ }
+ return false;
+ });
+ popup.show();
+ });
if (isCurrentAccount) {
binding.currentAccountIndicator.setVisibility(VISIBLE);
applyBrandToLayerDrawable((LayerDrawable) binding.currentAccountIndicator.getDrawable(), R.id.area, localAccount.getColor());
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 7cf64230..3874ca11 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
@@ -1,7 +1,10 @@
package it.niedermann.owncloud.notes.manageaccounts;
import android.os.Bundle;
+import android.widget.EditText;
+import android.widget.Toast;
+import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
@@ -10,9 +13,12 @@ import com.nextcloud.android.sso.exceptions.NoCurrentAccountSelectedException;
import com.nextcloud.android.sso.helper.SingleAccountHelper;
import com.nextcloud.android.sso.model.SingleSignOnAccount;
+import java.util.ArrayList;
import java.util.List;
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.persistence.NotesDatabase;
@@ -22,6 +28,7 @@ public class ManageAccountsActivity extends LockedActivity {
private ActivityManageAccountsBinding binding;
private ManageAccountAdapter adapter;
private NotesDatabase db = null;
+ private List<LocalAccount> localAccounts = new ArrayList<>();
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
@@ -34,27 +41,18 @@ public class ManageAccountsActivity extends LockedActivity {
db = NotesDatabase.getInstance(this);
- List<LocalAccount> localAccounts = db.getAccounts();
+ localAccounts.clear();
+ localAccounts.addAll(db.getAccounts());
- adapter = new ManageAccountAdapter((localAccount) -> SingleAccountHelper.setCurrentAccount(getApplicationContext(), localAccount.getAccountName()), (localAccount) -> {
- db.deleteAccount(localAccount);
- for (LocalAccount temp : localAccounts) {
- if (temp.getId() == localAccount.getId()) {
- localAccounts.remove(temp);
- break;
- }
- }
- if (localAccounts.size() > 0) {
- SingleAccountHelper.setCurrentAccount(getApplicationContext(), localAccounts.get(0).getAccountName());
- adapter.setCurrentLocalAccount(localAccounts.get(0));
- } else {
- setResult(AppCompatActivity.RESULT_FIRST_USER);
- finish();
- }
- });
+ adapter = new ManageAccountAdapter(
+ (localAccount) -> SingleAccountHelper.setCurrentAccount(getApplicationContext(), localAccount.getAccountName()),
+ this::onAccountDelete,
+ this::onChangeNotesPath,
+ this::onChangeFileSuffix
+ );
adapter.setLocalAccounts(localAccounts);
try {
- SingleSignOnAccount ssoAccount = SingleAccountHelper.getCurrentSingleSignOnAccount(this);
+ final SingleSignOnAccount ssoAccount = SingleAccountHelper.getCurrentSingleSignOnAccount(this);
if (ssoAccount != null) {
adapter.setCurrentLocalAccount(db.getLocalAccountByAccountName(ssoAccount.name));
}
@@ -64,6 +62,49 @@ public class ManageAccountsActivity extends LockedActivity {
binding.accounts.setAdapter(adapter);
}
+ private void onAccountDelete(@NonNull LocalAccount localAccount) {
+ db.deleteAccount(localAccount);
+ for (LocalAccount temp : localAccounts) {
+ if (temp.getId() == localAccount.getId()) {
+ localAccounts.remove(temp);
+ break;
+ }
+ }
+ if (localAccounts.size() > 0) {
+ SingleAccountHelper.setCurrentAccount(getApplicationContext(), localAccounts.get(0).getAccountName());
+ adapter.setCurrentLocalAccount(localAccounts.get(0));
+ } else {
+ setResult(AppCompatActivity.RESULT_FIRST_USER);
+ finish();
+ }
+ }
+
+ private void onChangeNotesPath(@NonNull LocalAccount localAccount) {
+ final EditText editText = new EditText(this);
+ new BrandedAlertDialogBuilder(this)
+ .setTitle(R.string.settings_notes_path)
+ .setMessage("Folder to store your notes in your Nextcloud")
+ .setView(editText)
+ .setNeutralButton(android.R.string.cancel, null)
+ .setPositiveButton(R.string.action_edit_save, (v, d) -> {
+ Toast.makeText(this, "Submitted " + editText.getText(), Toast.LENGTH_LONG).show();
+ })
+ .show();
+ }
+
+ private void onChangeFileSuffix(@NonNull LocalAccount localAccount) {
+ final EditText editText = new EditText(this);
+ new BrandedAlertDialogBuilder(this)
+ .setTitle(R.string.settings_file_suffix)
+ .setMessage("File extension for new notes in your Nextcloud")
+ .setView(editText)
+ .setNeutralButton(android.R.string.cancel, null)
+ .setPositiveButton("Save", (v, d) -> {
+ Toast.makeText(this, "Submitted " + editText.getText(), Toast.LENGTH_LONG).show();
+ })
+ .show();
+ }
+
@Override
public void applyBrand(int mainColor, int textColor) {
applyBrandToPrimaryToolbar(binding.appBar, binding.toolbar);
diff --git a/app/src/main/res/layout/item_account_choose.xml b/app/src/main/res/layout/item_account_choose.xml
index 8f321800..8cfbd4be 100644
--- a/app/src/main/res/layout/item_account_choose.xml
+++ b/app/src/main/res/layout/item_account_choose.xml
@@ -64,7 +64,7 @@
</LinearLayout>
<androidx.appcompat.widget.AppCompatImageView
- android:id="@+id/delete"
+ android:id="@+id/account_context_menu"
android:layout_width="36dp"
android:layout_height="36dp"
android:background="?attr/selectableItemBackgroundBorderless"
@@ -72,7 +72,7 @@
android:focusable="false"
android:scaleType="center"
android:visibility="gone"
- app:srcCompat="@drawable/ic_delete_grey600_24dp"
+ app:srcCompat="@drawable/ic_settings_grey600_24dp"
tools:visibility="visible" />
<View
diff --git a/app/src/main/res/menu/menu_account.xml b/app/src/main/res/menu/menu_account.xml
new file mode 100644
index 00000000..95cb00d7
--- /dev/null
+++ b/app/src/main/res/menu/menu_account.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto">
+
+ <item
+ android:id="@+id/notes_path"
+ android:orderInCategory="10"
+ android:title="@string/settings_notes_path"
+ app:showAsAction="never" />
+
+ <item
+ android:id="@+id/file_suffix"
+ android:orderInCategory="20"
+ android:title="@string/settings_file_suffix"
+ app:showAsAction="never" />
+
+ <item
+ android:id="@+id/delete"
+ android:orderInCategory="30"
+ android:title="@string/remove_account"
+ app:showAsAction="never" />
+
+</menu> \ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 45ba55a1..841ec5a3 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -295,4 +295,7 @@
<string name="no_account_configured_yet">No account configured yet</string>
<string name="no_other_accounts">You don\'t have configured any other accounts yet.</string>
<string name="context_based_formatting">Context based formatting popover</string>
+ <string name="settings_notes_path">Set folder</string>
+ <string name="settings_file_suffix">File extension</string>
+ <string name="remove_account">Remove account</string>
</resources>