diff options
6 files changed, 64 insertions, 26 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java index ef465894e..f1eae4ca2 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java @@ -406,13 +406,12 @@ public class SyncManager { * deprecated! should be removed, as soon as the board-ID can be set by the frontend. * see searchLabelByTitle with board id. * @param accountId + * @param boardId * @param searchTerm * @return */ - @Deprecated public LiveData<List<Label>> searchLabelByTitle(final long accountId, final long boardId, String searchTerm){ - //return dataBaseAdapter.searchLabelByTitle(accountId, boardId, searchTerm); - throw new UnsupportedOperationException("please use other searchLabelByTitle method!"); + return dataBaseAdapter.searchLabelByTitle(accountId, boardId, searchTerm); } public String getServerUrl() throws NextcloudFilesAppAccountNotFoundException, NoCurrentAccountSelectedException { diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardDetailsFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardDetailsFragment.java index ad17c498a..52bbc6ee4 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardDetailsFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardDetailsFragment.java @@ -16,6 +16,7 @@ import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.TimePicker; +import android.widget.Toast; import com.google.android.material.chip.Chip; import com.google.android.material.chip.ChipGroup; @@ -223,14 +224,20 @@ public class CardDetailsFragment extends Fragment implements DatePickerDialog.On labels.setAdapter(new LabelAutoCompleteAdapter(this, getContext(), accountId, boardId)); labels.setOnItemClickListener((adapterView, view, position, id) -> { Label label = (Label) adapterView.getItemAtPosition(position); - syncManager.assignLabelToCard(label, card.getCard()); - - Chip chip = createChipFromLabel(label); - chip.setOnCloseIconClickListener(v -> { - labelsGroup.removeView(chip); - syncManager.unassignLabelFromCard(label, card.getCard()); - }); - labelsGroup.addView(chip); + if (LabelAutoCompleteAdapter.CREATE_ID == label.getId()) { + // TODO create label in database _and_ on server + Toast.makeText(getActivity(), "Implement server call", Toast.LENGTH_SHORT).show(); + } else { + // TODO needs to be done for created label too as soo as its created + syncManager.assignLabelToCard(label, card.getCard()); + + Chip chip = createChipFromLabel(label); + chip.setOnCloseIconClickListener(v -> { + labelsGroup.removeView(chip); + syncManager.unassignLabelFromCard(label, card.getCard()); + }); + labelsGroup.addView(chip); + } labels.setText(""); }); diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/LabelAutoCompleteAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/LabelAutoCompleteAdapter.java index 5cc774df0..57a1e8754 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/LabelAutoCompleteAdapter.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/LabelAutoCompleteAdapter.java @@ -26,12 +26,15 @@ import it.niedermann.nextcloud.deck.persistence.sync.SyncManager; import it.niedermann.nextcloud.deck.util.ViewUtil; public class LabelAutoCompleteAdapter extends BaseAdapter implements Filterable { + public static final long CREATE_ID = Long.MIN_VALUE; private Context context; private List<Label> labelList = new ArrayList<>(); private SyncManager syncManager; private long accountId; private long boardId; private LifecycleOwner owner; + private Label createLabel; + private String createLabelText; public LabelAutoCompleteAdapter(@NonNull LifecycleOwner owner, Context context, long accountId, long boardId) { this.owner = owner; @@ -39,6 +42,12 @@ public class LabelAutoCompleteAdapter extends BaseAdapter implements Filterable this.accountId = accountId; this.boardId = boardId; syncManager = new SyncManager(context, null); + createLabel = new Label(); + createLabel.setId(CREATE_ID); + createLabel.setBoardId(boardId); + createLabel.setAccountId(accountId); + createLabelText = context.getResources().getString(R.string.label_create); + createLabel.setColor("757575"); } @Override @@ -69,14 +78,23 @@ public class LabelAutoCompleteAdapter extends BaseAdapter implements Filterable convertView.setTag(holder); } - holder.icon.setImageDrawable( - ViewUtil.getTintedImageView( - context, - R.drawable.ic_label_grey600_24dp, - "#" + getItem(position).getColor() - ) - ); - + if (position < labelList.size() - 1) { + holder.icon.setImageDrawable( + ViewUtil.getTintedImageView( + context, + R.drawable.ic_plus, + "#" + getItem(position).getColor() + ) + ); + } else { + holder.icon.setImageDrawable( + ViewUtil.getTintedImageView( + context, + R.drawable.ic_label_grey600_24dp, + "#" + getItem(position).getColor() + ) + ); + } holder.label.setText(getItem(position).getTitle()); return convertView; } @@ -94,15 +112,19 @@ public class LabelAutoCompleteAdapter extends BaseAdapter implements Filterable LiveData<List<Label>> labelLiveData = syncManager.searchLabelByTitle(accountId, boardId, constraint.toString()); Observer<List<Label>> observer = new Observer<List<Label>>() { @Override - public void onChanged(List<Label> users) { + public void onChanged(List<Label> labels) { labelLiveData.removeObserver(this); - if (users != null) { - filterResults.values = users; - filterResults.count = users.size(); + createLabel.setTitle(String.format(createLabelText, constraint)); + if (labels != null) { + labels.add(createLabel); + filterResults.values = labels; + filterResults.count = labels.size(); publishResults(constraint, filterResults); } else { - filterResults.values = new ArrayList<>(); - filterResults.count = 0; + List<Label> createLabels = new ArrayList<>(); + createLabels.add(createLabel); + filterResults.values = createLabels; + filterResults.count = createLabels.size(); } } }; diff --git a/app/src/main/res/drawable/ic_plus.xml b/app/src/main/res/drawable/ic_plus.xml new file mode 100644 index 000000000..e713bc7ce --- /dev/null +++ b/app/src/main/res/drawable/ic_plus.xml @@ -0,0 +1,8 @@ +<!-- drawable/plus.xml --> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:height="24dp" + android:width="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> + <path android:fillColor="#757575" android:pathData="M19,13H13V19H11V13H5V11H11V5H13V11H19V13Z" /> +</vector>
\ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index d17860374..219547d8a 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -8,7 +8,7 @@ <color name="bg_accent">#0082c9</color> <color name="fg_accent">#fff</color> <color name="fg_secondary">#999</color> - + <color name="grey600">#757575</color> <!-- due date colors --> <color name="due_tomorrow">#7fffc53a</color> <color name="due_today">#7feca700</color> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b8a31e461..22332ef6a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -77,4 +77,6 @@ <string name="simple_title">Title</string> <string name="label_clear_due_date">Clear due date</string> + + <string name="label_create">Create %1$s</string> </resources> |