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

github.com/stefan-niedermann/nextcloud-deck.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/app/src
diff options
context:
space:
mode:
authorstefan-niedermann <info@niedermann.it>2019-10-20 16:45:00 +0300
committerstefan-niedermann <info@niedermann.it>2019-10-20 16:45:00 +0300
commit94867a258b63e9173106b0c2fd1cb2a2cbc59dd7 (patch)
treee78bc82a0d17c16382109c4bd72438faa9cd350d /app/src
parent66780de0c2c597a8d2fc854f6c3fef63554a2d80 (diff)
#148 Share boards with permissions
Display owner
Diffstat (limited to 'app/src')
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/board/AccessControlAdapter.java114
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/board/AccessControlDialogFragment.java18
-rw-r--r--app/src/main/res/layout/item_access_control_owner.xml43
-rw-r--r--app/src/main/res/values/strings.xml1
4 files changed, 133 insertions, 43 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/AccessControlAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/AccessControlAdapter.java
index c723a26a7..9c98a5d10 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/AccessControlAdapter.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/AccessControlAdapter.java
@@ -28,7 +28,10 @@ import it.niedermann.nextcloud.deck.model.AccessControl;
import it.niedermann.nextcloud.deck.model.enums.DBStatus;
import it.niedermann.nextcloud.deck.util.ViewUtil;
-public class AccessControlAdapter extends RecyclerView.Adapter<AccessControlAdapter.ActivitiesViewHolder> {
+public class AccessControlAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
+
+ private static final int TYPE_HEADER = 0;
+ private static final int TYPE_ITEM = 1;
@NonNull
private List<AccessControl> accessControls;
@@ -46,46 +49,66 @@ public class AccessControlAdapter extends RecyclerView.Adapter<AccessControlAdap
@NonNull
@Override
- public ActivitiesViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
- View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_access_control, parent, false);
- return new ActivitiesViewHolder(v);
+ public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ if (viewType == TYPE_HEADER) {
+ View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_access_control_owner, parent, false);
+ return new OwnerViewHolder(v);
+ } else if (viewType == TYPE_ITEM) {
+ View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_access_control, parent, false);
+ return new AccessControlViewHolder(v);
+ }
+ throw new RuntimeException("there is no type that matches the type " + viewType + " + make sure your using types correctly");
}
@Override
- public void onBindViewHolder(@NonNull ActivitiesViewHolder holder, int position) {
+ public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
AccessControl ac = accessControls.get(position);
-
- if (context != null) {
- try {
- ViewUtil.addAvatar(context, holder.avatar, SingleAccountHelper.getCurrentSingleSignOnAccount(context).url, ac.getUser().getUid(), R.drawable.ic_person_grey600_24dp);
- } catch (NextcloudFilesAppAccountNotFoundException | NoCurrentAccountSelectedException e) {
- e.printStackTrace();
+ if (holder instanceof OwnerViewHolder) {
+ OwnerViewHolder ownerHolder = (OwnerViewHolder) holder;
+ ownerHolder.owner.setText(ac.getUser().getDisplayname());
+
+ if (context != null) {
+ try {
+ ViewUtil.addAvatar(context, ownerHolder.avatar, SingleAccountHelper.getCurrentSingleSignOnAccount(context).url, ac.getUser().getUid(), R.drawable.ic_person_grey600_24dp);
+ } catch (NextcloudFilesAppAccountNotFoundException | NoCurrentAccountSelectedException e) {
+ e.printStackTrace();
+ }
+ }
+ } else if (holder instanceof AccessControlViewHolder) {
+ AccessControlViewHolder acHolder = (AccessControlViewHolder) holder;
+
+ if (context != null) {
+ try {
+ ViewUtil.addAvatar(context, acHolder.avatar, SingleAccountHelper.getCurrentSingleSignOnAccount(context).url, ac.getUser().getUid(), R.drawable.ic_person_grey600_24dp);
+ } catch (NextcloudFilesAppAccountNotFoundException | NoCurrentAccountSelectedException e) {
+ e.printStackTrace();
+ }
}
- }
- holder.username.setText(ac.getUser().getDisplayname());
- holder.username.setCompoundDrawables(null, null, ac.getStatus() == DBStatus.LOCAL_EDITED.getId() ? holder.syncIcon : null, null);
- // TODO remove from list when deleted
- holder.deleteButton.setOnClickListener((v) -> accessControlChangedListener.deleteAccessControl(ac));
-
- holder.switchEdit.setChecked(ac.isPermissionEdit());
- holder.switchEdit.setOnCheckedChangeListener((buttonView, isChecked) -> {
- ac.setPermissionEdit(isChecked);
- accessControlChangedListener.updateAccessControl(ac);
- });
-
- holder.switchManage.setChecked(ac.isPermissionManage());
- holder.switchManage.setOnCheckedChangeListener((buttonView, isChecked) -> {
- ac.setPermissionManage(isChecked);
- accessControlChangedListener.updateAccessControl(ac);
- holder.username.setCompoundDrawables(null, null, null, null);
- });
-
- holder.switchShare.setChecked(ac.isPermissionShare());
- holder.switchShare.setOnCheckedChangeListener((buttonView, isChecked) -> {
- ac.setPermissionShare(isChecked);
- accessControlChangedListener.updateAccessControl(ac);
- });
+ acHolder.username.setText(ac.getUser().getDisplayname());
+ acHolder.username.setCompoundDrawables(null, null, ac.getStatus() == DBStatus.LOCAL_EDITED.getId() ? acHolder.syncIcon : null, null);
+ // TODO remove from list when deleted
+ acHolder.deleteButton.setOnClickListener((v) -> accessControlChangedListener.deleteAccessControl(ac));
+
+ acHolder.switchEdit.setChecked(ac.isPermissionEdit());
+ acHolder.switchEdit.setOnCheckedChangeListener((buttonView, isChecked) -> {
+ ac.setPermissionEdit(isChecked);
+ accessControlChangedListener.updateAccessControl(ac);
+ });
+
+ acHolder.switchManage.setChecked(ac.isPermissionManage());
+ acHolder.switchManage.setOnCheckedChangeListener((buttonView, isChecked) -> {
+ ac.setPermissionManage(isChecked);
+ accessControlChangedListener.updateAccessControl(ac);
+ acHolder.username.setCompoundDrawables(null, null, null, null);
+ });
+
+ acHolder.switchShare.setChecked(ac.isPermissionShare());
+ acHolder.switchShare.setOnCheckedChangeListener((buttonView, isChecked) -> {
+ ac.setPermissionShare(isChecked);
+ accessControlChangedListener.updateAccessControl(ac);
+ });
+ }
}
@Override
@@ -93,7 +116,12 @@ public class AccessControlAdapter extends RecyclerView.Adapter<AccessControlAdap
return accessControls.size();
}
- static class ActivitiesViewHolder extends RecyclerView.ViewHolder {
+ @Override
+ public int getItemViewType(int position) {
+ return (position == 0) ? TYPE_HEADER : TYPE_ITEM;
+ }
+
+ static class AccessControlViewHolder extends RecyclerView.ViewHolder {
@BindDrawable(R.drawable.ic_sync_blue_24dp)
Drawable syncIcon;
@BindView(R.id.avatar)
@@ -109,7 +137,19 @@ public class AccessControlAdapter extends RecyclerView.Adapter<AccessControlAdap
@BindView(R.id.permission_share)
SwitchCompat switchShare;
- private ActivitiesViewHolder(View view) {
+ private AccessControlViewHolder(View view) {
+ super(view);
+ ButterKnife.bind(this, view);
+ }
+ }
+
+ static class OwnerViewHolder extends RecyclerView.ViewHolder {
+ @BindView(R.id.avatar)
+ ImageView avatar;
+ @BindView(R.id.owner)
+ TextView owner;
+
+ private OwnerViewHolder(View view) {
super(view);
ButterKnife.bind(this, view);
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/AccessControlDialogFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/AccessControlDialogFragment.java
index 77d3be6bd..8398cdeac 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/AccessControlDialogFragment.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/AccessControlDialogFragment.java
@@ -20,6 +20,7 @@ import butterknife.ButterKnife;
import it.niedermann.nextcloud.deck.Application;
import it.niedermann.nextcloud.deck.R;
import it.niedermann.nextcloud.deck.model.AccessControl;
+import it.niedermann.nextcloud.deck.model.full.FullBoard;
import it.niedermann.nextcloud.deck.persistence.sync.SyncManager;
import it.niedermann.nextcloud.deck.ui.card.UserAutoCompleteAdapter;
import it.niedermann.nextcloud.deck.ui.widget.DelayedAutoCompleteTextView;
@@ -64,12 +65,17 @@ public class AccessControlDialogFragment extends DialogFragment implements
throw new IllegalArgumentException("accountId and boardId must be provided");
} else {
syncManager = new SyncManager(activity);
- syncManager.getAccessControlByLocalBoardId(accountId, boardId).observe(this, (List<AccessControl> accessControlList) -> {
- RecyclerView.Adapter adapter = new AccessControlAdapter(accessControlList, this, getContext());
- peopleList.setAdapter(adapter);
- userAutoCompleteAdapter = new UserAutoCompleteAdapter(this, activity, accountId, boardId);
- people.setAdapter(userAutoCompleteAdapter);
- people.setOnItemClickListener(this);
+ syncManager.getFullBoardById(accountId, boardId).observe(this, (FullBoard fullBoard) -> {
+ syncManager.getAccessControlByLocalBoardId(accountId, boardId).observe(this, (List<AccessControl> accessControlList) -> {
+ AccessControl ownerControl = new AccessControl();
+ ownerControl.setUser(fullBoard.getOwner().get(0));
+ accessControlList.add(0, ownerControl);
+ RecyclerView.Adapter adapter = new AccessControlAdapter(accessControlList, this, getContext());
+ peopleList.setAdapter(adapter);
+ userAutoCompleteAdapter = new UserAutoCompleteAdapter(this, activity, accountId, boardId);
+ people.setAdapter(userAutoCompleteAdapter);
+ people.setOnItemClickListener(this);
+ });
});
}
diff --git a/app/src/main/res/layout/item_access_control_owner.xml b/app/src/main/res/layout/item_access_control_owner.xml
new file mode 100644
index 000000000..368f52480
--- /dev/null
+++ b/app/src/main/res/layout/item_access_control_owner.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:padding="@dimen/standard_padding">
+
+ <ImageView
+ android:id="@+id/avatar"
+ android:layout_width="@dimen/avatar_size"
+ android:layout_height="match_parent"
+ android:layout_marginEnd="@dimen/standard_margin"
+ android:layout_marginRight="@dimen/standard_margin"
+ android:contentDescription="@null"
+ app:srcCompat="@drawable/ic_person_grey600_24dp" />
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
+
+ <TextView
+ android:id="@+id/owner"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:layout_gravity="center"
+ android:textSize="16sp"
+ tools:text="Username" />
+
+ <TextView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:layout_gravity="center"
+ android:textColor="@color/fg_secondary"
+ android:text="@string/owner"
+ tools:text="Username" />
+ </LinearLayout>
+
+</LinearLayout> \ 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 5b8526ae4..06a974528 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -143,4 +143,5 @@
<string name="simple_share">share</string>
<string name="you_have_to_be_connected_to_the_internet_in_order_to_add_an_account">You have to be connected to the internet in order to add an account.</string>
<string name="simple_select">Select</string>
+ <string name="owner">owner</string>
</resources>