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>2020-06-06 12:28:10 +0300
committerStefan Niedermann <info@niedermann.it>2020-06-06 12:28:10 +0300
commit4c2a01c693f1b93cd26f542391d2a0ee17fc0202 (patch)
tree3f1b1a4d14877783d0abe68f3262460e00a9cb65 /app/src/main
parent49f373fd1e03033ef3b4038638007e2ff31a47f5 (diff)
Display indicator for currently active account in ManageAccountsActivity
Diffstat (limited to 'app/src/main')
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/accountswitcher/AccountSwitcherDialog.java15
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/branding/BrandingUtil.java11
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/manageaccounts/ManageAccountAdapter.java19
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/manageaccounts/ManageAccountViewHolder.java19
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/manageaccounts/ManageAccountsActivity.java12
-rw-r--r--app/src/main/res/layout/item_account_choose.xml32
6 files changed, 85 insertions, 23 deletions
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/accountswitcher/AccountSwitcherDialog.java b/app/src/main/java/it/niedermann/owncloud/notes/accountswitcher/AccountSwitcherDialog.java
index 24c191aa..249d2c3d 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/accountswitcher/AccountSwitcherDialog.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/accountswitcher/AccountSwitcherDialog.java
@@ -3,14 +3,12 @@ package it.niedermann.owncloud.notes.accountswitcher;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
-import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable;
import android.net.Uri;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
-import androidx.core.graphics.drawable.DrawableCompat;
import androidx.fragment.app.DialogFragment;
import com.bumptech.glide.Glide;
@@ -19,14 +17,16 @@ import com.bumptech.glide.request.RequestOptions;
import java.util.List;
import it.niedermann.owncloud.notes.R;
+import it.niedermann.owncloud.notes.branding.BrandedDialogFragment;
import it.niedermann.owncloud.notes.databinding.DialogAccountSwitcherBinding;
import it.niedermann.owncloud.notes.manageaccounts.ManageAccountsActivity;
import it.niedermann.owncloud.notes.model.LocalAccount;
import it.niedermann.owncloud.notes.persistence.NotesDatabase;
import static it.niedermann.owncloud.notes.android.activity.NotesListViewActivity.manage_account;
+import static it.niedermann.owncloud.notes.branding.BrandingUtil.applyBrandToLayerDrawable;
-public class AccountSwitcherDialog extends DialogFragment {
+public class AccountSwitcherDialog extends BrandedDialogFragment {
private static final String KEY_CURRENT_ACCOUNT_ID = "current_account_id";
@@ -69,10 +69,6 @@ public class AccountSwitcherDialog extends DialogFragment {
.into(binding.currentAccountItemAvatar);
binding.accountLayout.setOnClickListener((v) -> dismiss());
- LayerDrawable ld = (LayerDrawable) binding.check.getDrawable();
- Drawable ldDrawable = ld.findDrawableByLayerId(R.id.area);
- DrawableCompat.setTint(ldDrawable, currentLocalAccount.getColor());
-
AccountSwitcherAdapter adapter = new AccountSwitcherAdapter((localAccount -> {
accountSwitcherListener.onAccountChosen(localAccount);
dismiss();
@@ -111,4 +107,9 @@ public class AccountSwitcherDialog extends DialogFragment {
return dialog;
}
+
+ @Override
+ public void applyBrand(int mainColor, int textColor) {
+ applyBrandToLayerDrawable((LayerDrawable) binding.check.getDrawable(), R.id.area, mainColor);
+ }
}
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/branding/BrandingUtil.java b/app/src/main/java/it/niedermann/owncloud/notes/branding/BrandingUtil.java
index 6e4c033c..f84bd8e4 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/branding/BrandingUtil.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/branding/BrandingUtil.java
@@ -5,11 +5,13 @@ import android.content.SharedPreferences;
import android.content.res.ColorStateList;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
+import android.graphics.drawable.LayerDrawable;
import android.util.Log;
import android.view.MenuItem;
import android.widget.EditText;
import androidx.annotation.ColorInt;
+import androidx.annotation.IdRes;
import androidx.annotation.NonNull;
import androidx.core.graphics.drawable.DrawableCompat;
import androidx.preference.PreferenceManager;
@@ -120,4 +122,13 @@ public class BrandingUtil {
menuItem.setIcon(drawable);
}
}
+
+ public static void applyBrandToLayerDrawable(@NonNull LayerDrawable check, @IdRes int areaToColor, @ColorInt int mainColor) {
+ final Drawable drawable = check.findDrawableByLayerId(areaToColor);
+ if (drawable == null) {
+ Log.e(TAG, "Could not find areaToColor (" + areaToColor + "). Cannot apply brand.");
+ } else {
+ DrawableCompat.setTint(drawable, mainColor);
+ }
+ }
}
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 644c2ba3..50ab925b 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
@@ -16,6 +16,8 @@ import it.niedermann.owncloud.notes.model.LocalAccount;
public class ManageAccountAdapter extends RecyclerView.Adapter<ManageAccountViewHolder> {
+ @Nullable
+ private LocalAccount currentLocalAccount = null;
@NonNull
private final List<LocalAccount> localAccounts = new ArrayList<>();
@NonNull
@@ -42,18 +44,22 @@ public class ManageAccountAdapter extends RecyclerView.Adapter<ManageAccountView
@Override
public void onBindViewHolder(@NonNull ManageAccountViewHolder holder, int position) {
- holder.bind(localAccounts.get(position), onAccountClick, (localAccount -> {
+ final LocalAccount localAccount = localAccounts.get(position);
+ holder.bind(localAccount, (localAccountClicked) -> {
+ setCurrentLocalAccount(localAccountClicked);
+ onAccountClick.accept(localAccountClicked);
+ }, (localAccountToDelete -> {
if (onAccountDelete != null) {
for (int i = 0; i < localAccounts.size(); i++) {
- if (localAccounts.get(i).getId() == localAccount.getId()) {
+ if (localAccounts.get(i).getId() == localAccountToDelete.getId()) {
localAccounts.remove(i);
notifyItemRemoved(i);
break;
}
}
- onAccountDelete.accept(localAccount);
+ onAccountDelete.accept(localAccountToDelete);
}
- }));
+ }), currentLocalAccount != null && currentLocalAccount.getId() == localAccount.getId());
}
@Override
@@ -66,4 +72,9 @@ public class ManageAccountAdapter extends RecyclerView.Adapter<ManageAccountView
this.localAccounts.addAll(localAccounts);
notifyDataSetChanged();
}
+
+ public void setCurrentLocalAccount(@Nullable LocalAccount currentLocalAccount) {
+ this.currentLocalAccount = currentLocalAccount;
+ notifyDataSetChanged();
+ }
}
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 e20528cd..df56fba5 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
@@ -1,5 +1,6 @@
package it.niedermann.owncloud.notes.manageaccounts;
+import android.graphics.drawable.LayerDrawable;
import android.net.Uri;
import android.view.View;
@@ -15,16 +16,20 @@ import it.niedermann.owncloud.notes.R;
import it.niedermann.owncloud.notes.databinding.ItemAccountChooseBinding;
import it.niedermann.owncloud.notes.model.LocalAccount;
+import static android.view.View.GONE;
+import static android.view.View.VISIBLE;
+import static it.niedermann.owncloud.notes.branding.BrandingUtil.applyBrandToLayerDrawable;
+
public class ManageAccountViewHolder extends RecyclerView.ViewHolder {
- ItemAccountChooseBinding binding;
+ private 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) {
+ public void bind(@NonNull LocalAccount localAccount, @NonNull Consumer<LocalAccount> onAccountClick, @Nullable Consumer<LocalAccount> onAccountDelete, boolean isCurrentAccount) {
binding.accountItemLabel.setText(localAccount.getAccountName());
Glide.with(itemView.getContext())
.load(localAccount.getUrl() + "/index.php/avatar/" + Uri.encode(localAccount.getUserName()) + "/64")
@@ -33,10 +38,16 @@ public class ManageAccountViewHolder extends RecyclerView.ViewHolder {
.into(binding.accountItemAvatar);
itemView.setOnClickListener((v) -> onAccountClick.accept(localAccount));
if (onAccountDelete == null) {
- binding.delete.setVisibility(View.GONE);
+ binding.delete.setVisibility(GONE);
} else {
- binding.delete.setVisibility(View.VISIBLE);
+ binding.delete.setVisibility(VISIBLE);
binding.delete.setOnClickListener((v) -> onAccountDelete.accept(localAccount));
}
+ if (isCurrentAccount) {
+ binding.currentAccountIndicator.setVisibility(VISIBLE);
+ applyBrandToLayerDrawable((LayerDrawable) binding.currentAccountIndicator.getDrawable(), R.id.area, localAccount.getColor());
+ } else {
+ binding.currentAccountIndicator.setVisibility(GONE);
+ }
}
}
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 dde9beff..123f345e 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
@@ -5,7 +5,10 @@ import android.os.Bundle;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
+import com.nextcloud.android.sso.exceptions.NextcloudFilesAppAccountNotFoundException;
+import com.nextcloud.android.sso.exceptions.NoCurrentAccountSelectedException;
import com.nextcloud.android.sso.helper.SingleAccountHelper;
+import com.nextcloud.android.sso.model.SingleSignOnAccount;
import java.util.List;
@@ -46,12 +49,21 @@ public class ManageAccountsActivity extends LockedActivity {
}
if (localAccounts.size() > 0) {
SingleAccountHelper.setCurrentAccount(getApplicationContext(), localAccounts.get(0).getAccountName());
+ adapter.setCurrentLocalAccount(localAccounts.get(0));
} else {
setResult(AppCompatActivity.RESULT_FIRST_USER);
finish();
}
});
adapter.setLocalAccounts(localAccounts);
+ try {
+ SingleSignOnAccount ssoAccount = SingleAccountHelper.getCurrentSingleSignOnAccount(this);
+ if (ssoAccount != null) {
+ adapter.setCurrentLocalAccount(db.getLocalAccountByAccountName(ssoAccount.name));
+ }
+ } catch (NextcloudFilesAppAccountNotFoundException | NoCurrentAccountSelectedException e) {
+ e.printStackTrace();
+ }
binding.accounts.setAdapter(adapter);
}
diff --git a/app/src/main/res/layout/item_account_choose.xml b/app/src/main/res/layout/item_account_choose.xml
index 1d72ab16..33abe594 100644
--- a/app/src/main/res/layout/item_account_choose.xml
+++ b/app/src/main/res/layout/item_account_choose.xml
@@ -8,14 +8,30 @@
android:orientation="horizontal"
android:padding="@dimen/spacer_3x">
- <androidx.appcompat.widget.AppCompatImageView
- android:id="@+id/accountItemAvatar"
- android:layout_width="36dp"
- android:layout_height="36dp"
- android:contentDescription="@null"
- android:focusable="false"
- android:scaleType="center"
- app:srcCompat="@drawable/ic_account_circle_grey_24dp" />
+ <FrameLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginEnd="@dimen/spacer_1hx"
+ android:layout_marginRight="@dimen/spacer_1hx">
+
+ <androidx.appcompat.widget.AppCompatImageView
+ android:id="@+id/accountItemAvatar"
+ android:layout_width="36dp"
+ android:layout_height="36dp"
+ android:contentDescription="@null"
+ android:focusable="false"
+ android:scaleType="center"
+ app:srcCompat="@drawable/ic_account_circle_grey_24dp" />
+
+ <androidx.appcompat.widget.AppCompatImageView
+ android:id="@+id/currentAccountIndicator"
+ android:layout_width="12dp"
+ android:layout_height="12dp"
+ android:layout_gravity="end|bottom"
+ android:visibility="gone"
+ app:srcCompat="@drawable/check"
+ tools:visibility="visible" />
+ </FrameLayout>
<TextView
android:id="@+id/accountItemLabel"