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
diff options
context:
space:
mode:
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java5
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardDetailsFragment.java23
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/card/LabelAutoCompleteAdapter.java50
-rw-r--r--app/src/main/res/drawable/ic_plus.xml8
-rw-r--r--app/src/main/res/values/colors.xml2
-rw-r--r--app/src/main/res/values/strings.xml2
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>