diff options
author | stefan-niedermann <info@niedermann.it> | 2019-10-20 16:45:00 +0300 |
---|---|---|
committer | stefan-niedermann <info@niedermann.it> | 2019-10-20 16:45:00 +0300 |
commit | 94867a258b63e9173106b0c2fd1cb2a2cbc59dd7 (patch) | |
tree | e78bc82a0d17c16382109c4bd72438faa9cd350d /app/src | |
parent | 66780de0c2c597a8d2fc854f6c3fef63554a2d80 (diff) |
#148 Share boards with permissions
Display owner
Diffstat (limited to 'app/src')
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> |