aboutsummaryrefslogtreecommitdiffstats
path: root/app/src/main/java/net/lacolaco
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/net/lacolaco')
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/activity/EditCommandActivity.java8
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/activity/EditExtractionActivity.java21
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/activity/EditTabActivity.java23
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/activity/EditTemplateActivity.java13
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/entity/IdObject.java5
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/adapter/CustomListAdapter.java113
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/adapter/EventListAdapter.java2
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/adapter/MessageListAdapter.java30
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/adapter/OrderedCustomListAdapter.java89
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/adapter/SearchListAdapter.java1
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/adapter/StatusListAdapter.java33
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/adapter/UnorderedCustomListAdapter.java84
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/adapter/UserListListAdapter.java13
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/dialog/ChooseTemplateDialogFragment.java6
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/dialog/HashtagDialogFragment.java6
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/dialog/MenuDialogFragment.java6
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/dialog/MessageDetailDialogFragment.java2
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/dialog/MessageMenuDialogFragment.java6
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/dialog/PostMenuDialogFragment.java6
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/dialog/QuoteDialogFragment.java6
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/dialog/SelectImageDialogFragment.java6
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/dialog/SelectSearchQueryDialogFragment.java10
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/dialog/SelectUserListDialogFragment.java6
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/dialog/StatusDetailDialogFragment.java4
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/dialog/StatusMenuDialogFragment.java6
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/dialog/TalkChainDialogFragment.java6
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/dialog/UserDetailDialogFragment.java10
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/dialog/UserMenuDialogFragment.java6
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/page/HistoryFragment.java2
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/page/HomeFragment.java4
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/page/MentionsFragment.java6
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/page/MessagesFragment.java4
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/page/SearchFragment.java2
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/page/UserListFragment.java2
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/viewmodel/EditableCheckBoxModel.java12
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/viewmodel/MessageViewModel.java8
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/viewmodel/StatusViewModel.java8
37 files changed, 326 insertions, 249 deletions
diff --git a/app/src/main/java/net/lacolaco/smileessence/activity/EditCommandActivity.java b/app/src/main/java/net/lacolaco/smileessence/activity/EditCommandActivity.java
index 0a0b531d..6d47656e 100644
--- a/app/src/main/java/net/lacolaco/smileessence/activity/EditCommandActivity.java
+++ b/app/src/main/java/net/lacolaco/smileessence/activity/EditCommandActivity.java
@@ -37,7 +37,7 @@ import net.lacolaco.smileessence.command.status.StatusCommand;
import net.lacolaco.smileessence.command.user.UserCommand;
import net.lacolaco.smileessence.entity.CommandSetting;
import net.lacolaco.smileessence.logging.Logger;
-import net.lacolaco.smileessence.view.adapter.CustomListAdapter;
+import net.lacolaco.smileessence.view.adapter.UnorderedCustomListAdapter;
import net.lacolaco.smileessence.viewmodel.CheckBoxModel;
import java.util.ArrayList;
@@ -47,7 +47,7 @@ public class EditCommandActivity extends Activity {
// ------------------------------ FIELDS ------------------------------
- private CustomListAdapter<CheckBoxModel> adapter;
+ private UnorderedCustomListAdapter<CheckBoxModel> adapter;
private List<Command> editedCommands;
// --------------------- GETTER / SETTER METHODS ---------------------
@@ -137,9 +137,9 @@ public class EditCommandActivity extends Activity {
private void initializeViews() {
ListView listView = getListView();
- adapter = new CustomListAdapter<>(this);
+ adapter = new UnorderedCustomListAdapter<>(this);
listView.setAdapter(adapter);
- adapter.addToTop(getCheckBoxItems());
+ adapter.addItemToTop(getCheckBoxItems());
adapter.update();
}
diff --git a/app/src/main/java/net/lacolaco/smileessence/activity/EditExtractionActivity.java b/app/src/main/java/net/lacolaco/smileessence/activity/EditExtractionActivity.java
index c010734f..9db52c25 100644
--- a/app/src/main/java/net/lacolaco/smileessence/activity/EditExtractionActivity.java
+++ b/app/src/main/java/net/lacolaco/smileessence/activity/EditExtractionActivity.java
@@ -37,9 +37,10 @@ import android.widget.TextView;
import net.lacolaco.smileessence.Application;
import net.lacolaco.smileessence.R;
import net.lacolaco.smileessence.entity.ExtractionWord;
+import net.lacolaco.smileessence.entity.IdObject;
import net.lacolaco.smileessence.logging.Logger;
import net.lacolaco.smileessence.view.DialogHelper;
-import net.lacolaco.smileessence.view.adapter.CustomListAdapter;
+import net.lacolaco.smileessence.view.adapter.OrderedCustomListAdapter;
import net.lacolaco.smileessence.view.dialog.EditTextDialogFragment;
import net.lacolaco.smileessence.viewmodel.IViewModel;
@@ -47,7 +48,7 @@ public class EditExtractionActivity extends Activity implements AdapterView.OnIt
// ------------------------------ FIELDS ------------------------------
- private CustomListAdapter<ExtractionWordViewModel> adapter;
+ private OrderedCustomListAdapter<ExtractionWordViewModel> adapter;
// --------------------- GETTER / SETTER METHODS ---------------------
@@ -143,8 +144,9 @@ public class EditExtractionActivity extends Activity implements AdapterView.OnIt
adapter.setNotifiable(false);
for (int i = adapter.getCount() - 1; i > -1; i--) {
if (checkedItems.get(i)) {
- ExtractionWordViewModel vm = adapter.removeItem(i);
+ ExtractionWordViewModel vm = adapter.getItem(i);
vm.getExtractionWord().remove();
+ adapter.removeItem(vm);
}
}
adapter.setNotifiable(true);
@@ -177,7 +179,7 @@ public class EditExtractionActivity extends Activity implements AdapterView.OnIt
return;
}
ExtractionWord extractionWord = ExtractionWord.add(text);
- adapter.addToBottom(new ExtractionWordViewModel(extractionWord));
+ adapter.addItem(new ExtractionWordViewModel(extractionWord));
adapter.notifyDataSetChanged();
updateListView();
}
@@ -188,9 +190,9 @@ public class EditExtractionActivity extends Activity implements AdapterView.OnIt
private void initializeViews() {
ListView listView = getListView();
- adapter = new CustomListAdapter<>(this);
+ adapter = new OrderedCustomListAdapter<>(this);
for (ExtractionWord ew : ExtractionWord.all()) {
- adapter.addToBottom(new ExtractionWordViewModel(ew));
+ adapter.addItem(new ExtractionWordViewModel(ew));
}
adapter.update();
listView.setAdapter(adapter);
@@ -207,7 +209,7 @@ public class EditExtractionActivity extends Activity implements AdapterView.OnIt
// --------------------- Interface IViewModel ---------------------
- private static class ExtractionWordViewModel implements IViewModel {
+ private static class ExtractionWordViewModel implements IViewModel, IdObject {
private final ExtractionWord ew;
public ExtractionWordViewModel(ExtractionWord ew) {
@@ -227,5 +229,10 @@ public class EditExtractionActivity extends Activity implements AdapterView.OnIt
textView.setText(ew.getPatternString());
return convertedView;
}
+
+ @Override
+ public long getId() {
+ return ew.getModelId();
+ }
}
}
diff --git a/app/src/main/java/net/lacolaco/smileessence/activity/EditTabActivity.java b/app/src/main/java/net/lacolaco/smileessence/activity/EditTabActivity.java
index 521b0691..ac2200b6 100644
--- a/app/src/main/java/net/lacolaco/smileessence/activity/EditTabActivity.java
+++ b/app/src/main/java/net/lacolaco/smileessence/activity/EditTabActivity.java
@@ -34,45 +34,46 @@ import net.lacolaco.smileessence.R;
import net.lacolaco.smileessence.logging.Logger;
import net.lacolaco.smileessence.notification.Notificator;
import net.lacolaco.smileessence.preference.UserPreferenceHelper;
-import net.lacolaco.smileessence.view.adapter.CustomListAdapter;
+import net.lacolaco.smileessence.view.adapter.OrderedCustomListAdapter;
import net.lacolaco.smileessence.viewmodel.EditableCheckBoxModel;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
public class EditTabActivity extends Activity {
// ------------------------------ FIELDS ------------------------------
- private CustomListAdapter<EditableCheckBoxModel> adapter;
+ private OrderedCustomListAdapter<EditableCheckBoxModel> adapter;
// --------------------- GETTER / SETTER METHODS ---------------------
private EditableCheckBoxModel[] getCheckBoxItems() {
List<EditableCheckBoxModel> models = new ArrayList<>();
- EditableCheckBoxModel post = new EditableCheckBoxModel(getString(R.string.page_name_post));
+ EditableCheckBoxModel post = new EditableCheckBoxModel(0, getString(R.string.page_name_post));
post.setChecked(true).setInputText(String.valueOf(0)).setFreezing(true);
models.add(post);
- EditableCheckBoxModel home = new EditableCheckBoxModel(getString(R.string.page_name_home));
+ EditableCheckBoxModel home = new EditableCheckBoxModel(1, getString(R.string.page_name_home));
home.setChecked(true).setInputText(String.valueOf(1)).setFreezing(true);
models.add(home);
- EditableCheckBoxModel mentions = new EditableCheckBoxModel(getString(R.string.page_name_mentions));
+ EditableCheckBoxModel mentions = new EditableCheckBoxModel(2, getString(R.string.page_name_mentions));
mentions.setChecked(true).setInputText(String.valueOf(2)).setFreezing(true);
models.add(mentions);
- EditableCheckBoxModel messages = new EditableCheckBoxModel(getString(R.string.page_name_messages));
+ EditableCheckBoxModel messages = new EditableCheckBoxModel(3, getString(R.string.page_name_messages));
messages.setChecked(getVisibility(R.string.key_page_messages_visibility))
.setInputText(String.valueOf(getPosition(R.string.key_page_messages_position, 3)));
models.add(messages);
- EditableCheckBoxModel history = new EditableCheckBoxModel(getString(R.string.page_name_history));
+ EditableCheckBoxModel history = new EditableCheckBoxModel(4, getString(R.string.page_name_history));
history.setChecked(getVisibility(R.string.key_page_history_visibility))
.setInputText(String.valueOf(getPosition(R.string.key_page_history_position, 4)));
models.add(history);
- EditableCheckBoxModel search = new EditableCheckBoxModel(getString(R.string.page_name_search));
+ EditableCheckBoxModel search = new EditableCheckBoxModel(5, getString(R.string.page_name_search));
search.setChecked(getVisibility(R.string.key_page_search_visibility))
.setInputText(String.valueOf(getPosition(R.string.key_page_search_position, 5)));
models.add(search);
- EditableCheckBoxModel list = new EditableCheckBoxModel(getString(R.string.page_name_list));
+ EditableCheckBoxModel list = new EditableCheckBoxModel(6, getString(R.string.page_name_list));
list.setChecked(getVisibility(R.string.key_page_list_visibility))
.setInputText(String.valueOf(getPosition(R.string.key_page_list_position, 6)));
models.add(list);
@@ -131,9 +132,9 @@ public class EditTabActivity extends Activity {
private void initializeViews() {
ListView listView = getListView();
- adapter = new CustomListAdapter<>(this);
+ adapter = new OrderedCustomListAdapter<>(this, Collections.reverseOrder());
listView.setAdapter(adapter);
- adapter.addToTop(getCheckBoxItems());
+ adapter.addItem(getCheckBoxItems());
adapter.update();
}
diff --git a/app/src/main/java/net/lacolaco/smileessence/activity/EditTemplateActivity.java b/app/src/main/java/net/lacolaco/smileessence/activity/EditTemplateActivity.java
index 1ae7376d..c322c845 100644
--- a/app/src/main/java/net/lacolaco/smileessence/activity/EditTemplateActivity.java
+++ b/app/src/main/java/net/lacolaco/smileessence/activity/EditTemplateActivity.java
@@ -38,7 +38,7 @@ import net.lacolaco.smileessence.R;
import net.lacolaco.smileessence.entity.Template;
import net.lacolaco.smileessence.logging.Logger;
import net.lacolaco.smileessence.view.DialogHelper;
-import net.lacolaco.smileessence.view.adapter.CustomListAdapter;
+import net.lacolaco.smileessence.view.adapter.UnorderedCustomListAdapter;
import net.lacolaco.smileessence.view.dialog.EditTextDialogFragment;
import java.util.List;
@@ -48,7 +48,7 @@ public class EditTemplateActivity extends Activity implements AdapterView.OnItem
// ------------------------------ FIELDS ------------------------------
- private CustomListAdapter<Template> adapter;
+ private UnorderedCustomListAdapter<Template> adapter;
// --------------------- GETTER / SETTER METHODS ---------------------
@@ -149,8 +149,9 @@ public class EditTemplateActivity extends Activity implements AdapterView.OnItem
adapter.setNotifiable(false);
for (int i = adapter.getCount() - 1; i > -1; i--) {
if (checkedItems.get(i)) {
- Template template = adapter.removeItem(i);
+ Template template = adapter.getItem(i);
template.delete();
+ adapter.removeItem(template);
}
}
adapter.setNotifiable(true);
@@ -186,7 +187,7 @@ public class EditTemplateActivity extends Activity implements AdapterView.OnItem
}
template.text = text;
template.save();
- adapter.addToBottom(template);
+ adapter.addItemToBottom(template);
adapter.notifyDataSetChanged();
updateListView();
}
@@ -197,9 +198,9 @@ public class EditTemplateActivity extends Activity implements AdapterView.OnItem
private void initializeViews() {
ListView listView = getListView();
- adapter = new CustomListAdapter<>(this);
+ adapter = new UnorderedCustomListAdapter<>(this);
listView.setAdapter(adapter);
- adapter.addToTop(getTemplates());
+ adapter.addItemToBottom(getTemplates());
adapter.update();
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
listView.setOnItemClickListener(this);
diff --git a/app/src/main/java/net/lacolaco/smileessence/entity/IdObject.java b/app/src/main/java/net/lacolaco/smileessence/entity/IdObject.java
new file mode 100644
index 00000000..444a627b
--- /dev/null
+++ b/app/src/main/java/net/lacolaco/smileessence/entity/IdObject.java
@@ -0,0 +1,5 @@
+package net.lacolaco.smileessence.entity;
+
+public interface IdObject {
+ long getId();
+}
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/adapter/CustomListAdapter.java b/app/src/main/java/net/lacolaco/smileessence/view/adapter/CustomListAdapter.java
index cae7dc82..ba888142 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/adapter/CustomListAdapter.java
+++ b/app/src/main/java/net/lacolaco/smileessence/view/adapter/CustomListAdapter.java
@@ -1,27 +1,3 @@
-/*
- * The MIT License (MIT)
- *
- * Copyright (c) 2012-2014 lacolaco.net
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
package net.lacolaco.smileessence.view.adapter;
import android.app.Activity;
@@ -31,20 +7,16 @@ import android.widget.BaseAdapter;
import net.lacolaco.smileessence.util.UIHandler;
import net.lacolaco.smileessence.viewmodel.IViewModel;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
+import java.util.*;
-public class CustomListAdapter<T extends IViewModel> extends BaseAdapter {
+public abstract class CustomListAdapter<T extends IViewModel> extends BaseAdapter {
// ------------------------------ FIELDS ------------------------------
protected final Object LOCK = new Object();
- protected List<T> list = new ArrayList<>();
- protected List<T> frozenList = new ArrayList<>();
private boolean isNotifiable = true;
- protected Activity activity;
+ private List<T> frozenList = new ArrayList<>();
+ private Activity activity;
// --------------------------- CONSTRUCTORS ---------------------------
@@ -54,30 +26,27 @@ public class CustomListAdapter<T extends IViewModel> extends BaseAdapter {
// --------------------- GETTER / SETTER METHODS ---------------------
- @Override
- public int getCount() {
- return frozenList.size();
- }
-
- public boolean isNotifiable() {
+ public final boolean isNotifiable() {
synchronized (LOCK) {
return isNotifiable;
}
}
- public void setNotifiable(boolean notifiable) {
+ public final void setNotifiable(boolean notifiable) {
synchronized (LOCK) {
isNotifiable = notifiable;
}
}
- // ------------------------ INTERFACE METHODS ------------------------
-
+ // --------------------- Interface BaseAdapter ---------------------
- // --------------------- Interface Adapter ---------------------
+ @Override
+ public final int getCount() {
+ return frozenList.size();
+ }
@Override
- public T getItem(int position) {
+ public final T getItem(int position) {
return frozenList.get(position);
}
@@ -87,65 +56,21 @@ public class CustomListAdapter<T extends IViewModel> extends BaseAdapter {
}
@Override
- public View getView(int position, View convertView, ViewGroup parent) {
+ public final View getView(int position, View convertView, ViewGroup parent) {
return getItem(position).getView(activity, activity.getLayoutInflater(), convertView);
}
// ------------------------ OVERRIDE METHODS ------------------------
@Override
- public void notifyDataSetChanged() {
- sort();
- frozenList = Collections.unmodifiableList(new ArrayList<>(list));
+ public final void notifyDataSetChanged() {
+ frozenList = getFrozenList();
super.notifyDataSetChanged();
}
// -------------------------- OTHER METHODS --------------------------
- public void addToBottom(T... items) {
- synchronized (LOCK) {
- for (T item : items) {
- if (list.contains(item)) {
- list.remove(item);
- }
- list.add(item);
- }
- }
- }
-
- public void addToTop(T... items) {
- synchronized (LOCK) {
- List<T> buffer = Arrays.asList(items);
- Collections.reverse(buffer);
- for (T item : buffer) {
- if (list.contains(item)) {
- list.remove(item);
- }
- list.add(0, item);
- }
- }
- }
-
- public void clear() {
- synchronized (LOCK) {
- list.clear();
- }
- }
-
- public T removeItem(int position) {
- synchronized (LOCK) {
- return list.remove(position);
- }
- }
-
- public boolean removeItem(T item) {
- synchronized (LOCK) {
- return list.remove(item);
- }
- }
-
- protected void sort() {
- }
+ protected abstract List<T> getFrozenList();
public void update() {
if (isNotifiable()) {
@@ -154,8 +79,6 @@ public class CustomListAdapter<T extends IViewModel> extends BaseAdapter {
}
public void updateForce() {
- synchronized (LOCK) {
- new UIHandler().post(this::notifyDataSetChanged);
- }
+ new UIHandler().post(this::notifyDataSetChanged);
}
-}
+} \ No newline at end of file
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/adapter/EventListAdapter.java b/app/src/main/java/net/lacolaco/smileessence/view/adapter/EventListAdapter.java
index d381e9ae..18741e02 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/adapter/EventListAdapter.java
+++ b/app/src/main/java/net/lacolaco/smileessence/view/adapter/EventListAdapter.java
@@ -27,7 +27,7 @@ package net.lacolaco.smileessence.view.adapter;
import android.app.Activity;
import net.lacolaco.smileessence.viewmodel.EventViewModel;
-public class EventListAdapter extends CustomListAdapter<EventViewModel> {
+public class EventListAdapter extends UnorderedCustomListAdapter<EventViewModel> {
// --------------------------- CONSTRUCTORS ---------------------------
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/adapter/MessageListAdapter.java b/app/src/main/java/net/lacolaco/smileessence/view/adapter/MessageListAdapter.java
index 9f9a39a0..114f9e58 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/adapter/MessageListAdapter.java
+++ b/app/src/main/java/net/lacolaco/smileessence/view/adapter/MessageListAdapter.java
@@ -27,10 +27,7 @@ package net.lacolaco.smileessence.view.adapter;
import android.app.Activity;
import net.lacolaco.smileessence.viewmodel.MessageViewModel;
-import java.util.Collections;
-import java.util.Iterator;
-
-public class MessageListAdapter extends CustomListAdapter<MessageViewModel> {
+public class MessageListAdapter extends OrderedCustomListAdapter<MessageViewModel> {
// --------------------------- CONSTRUCTORS ---------------------------
@@ -47,29 +44,4 @@ public class MessageListAdapter extends CustomListAdapter<MessageViewModel> {
public long getTopID() {
return getItem(0).getDirectMessage().getId();
}
-
- // ------------------------ OVERRIDE METHODS ------------------------
-
- @Override
- public void sort() {
- synchronized (LOCK) {
- Collections.sort(list, (lhs, rhs) -> rhs.getDirectMessage().getCreatedAt().compareTo(lhs.getDirectMessage().getCreatedAt()));
- }
- }
-
- // -------------------------- OTHER METHODS --------------------------
-
- public MessageViewModel removeByMessageID(long messageID) {
- synchronized (this.LOCK) {
- Iterator<MessageViewModel> iterator = this.list.iterator();
- while (iterator.hasNext()) {
- MessageViewModel message = iterator.next();
- if (message.getDirectMessage().getId() == messageID) {
- iterator.remove();
- return message;
- }
- }
- return null;
- }
- }
}
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/adapter/OrderedCustomListAdapter.java b/app/src/main/java/net/lacolaco/smileessence/view/adapter/OrderedCustomListAdapter.java
new file mode 100644
index 00000000..965e51f0
--- /dev/null
+++ b/app/src/main/java/net/lacolaco/smileessence/view/adapter/OrderedCustomListAdapter.java
@@ -0,0 +1,89 @@
+/*
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2012-2014 lacolaco.net
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+package net.lacolaco.smileessence.view.adapter;
+
+import android.app.Activity;
+import net.lacolaco.smileessence.entity.IdObject;
+import net.lacolaco.smileessence.viewmodel.IViewModel;
+
+import java.util.*;
+
+public class OrderedCustomListAdapter<T extends IViewModel & IdObject> extends CustomListAdapter<T> {
+
+ // ------------------------------ FIELDS ------------------------------
+
+ protected final Map<Long, T> treeMap;
+
+ // --------------------------- CONSTRUCTORS ---------------------------
+
+ public OrderedCustomListAdapter(Activity activity) {
+ this(activity, Long::compare);
+ }
+
+ public OrderedCustomListAdapter(Activity activity, Comparator<Long> comparator) {
+ super(activity);
+ this.treeMap = new TreeMap<>(Collections.reverseOrder(comparator)); // 降順
+ }
+
+ // ------------------------ OVERRIDE METHODS ------------------------
+
+ @Override
+ protected List<T> getFrozenList() {
+ return Collections.unmodifiableList(new ArrayList<>(treeMap.values()));
+ }
+
+ // -------------------------- OTHER METHODS --------------------------
+
+ public void addItem(T... items) {
+ synchronized (LOCK) {
+ for (T item : items) {
+ treeMap.put(item.getId(), item);
+ }
+ }
+ }
+
+ public void clear() {
+ synchronized (LOCK) {
+ treeMap.clear();
+ }
+ }
+
+ public T removeItem(T item) {
+ synchronized (LOCK) {
+ return treeMap.remove(item.getId());
+ }
+ }
+
+ public int removeItemById(long id) {
+ synchronized (LOCK) {
+ T item = treeMap.remove(id);
+ if (item == null) {
+ return 0;
+ } else {
+ return 1;
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/adapter/SearchListAdapter.java b/app/src/main/java/net/lacolaco/smileessence/view/adapter/SearchListAdapter.java
index 8c535c85..55f8ce9a 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/adapter/SearchListAdapter.java
+++ b/app/src/main/java/net/lacolaco/smileessence/view/adapter/SearchListAdapter.java
@@ -80,5 +80,4 @@ public class SearchListAdapter extends StatusListAdapter {
void onQueryChange(String newQuery);
}
-
}
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/adapter/StatusListAdapter.java b/app/src/main/java/net/lacolaco/smileessence/view/adapter/StatusListAdapter.java
index 314353c4..b9f7929d 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/adapter/StatusListAdapter.java
+++ b/app/src/main/java/net/lacolaco/smileessence/view/adapter/StatusListAdapter.java
@@ -25,12 +25,10 @@
package net.lacolaco.smileessence.view.adapter;
import android.app.Activity;
+import net.lacolaco.smileessence.entity.Tweet;
import net.lacolaco.smileessence.viewmodel.StatusViewModel;
-import java.util.Collections;
-import java.util.Iterator;
-
-public class StatusListAdapter extends CustomListAdapter<StatusViewModel> {
+public class StatusListAdapter extends OrderedCustomListAdapter<StatusViewModel> {
// --------------------------- CONSTRUCTORS ---------------------------
@@ -56,29 +54,20 @@ public class StatusListAdapter extends CustomListAdapter<StatusViewModel> {
}
}
- // ------------------------ OVERRIDE METHODS ------------------------
+ // -------------------------- OTHER METHODS --------------------------
- /**
- * Sort list by Status ID
- */
@Override
- protected void sort() {
+ public int removeItemById(long statusID) {
synchronized (LOCK) {
- Collections.sort(list, (lhs, rhs) -> Long.valueOf(rhs.getTweet().getId()).compareTo(lhs.getTweet().getId()));
- }
- }
-
- // -------------------------- OTHER METHODS --------------------------
-
- public void removeByStatusID(long statusID) {
- synchronized (this.LOCK) {
- Iterator<StatusViewModel> iterator = this.list.iterator();
- while (iterator.hasNext()) {
- StatusViewModel statusViewModel = iterator.next();
- if (statusViewModel.getTweet().getOriginalTweet().getId() == statusID) {
- iterator.remove();
+ int count = 0;
+ count += super.removeItemById(statusID);
+ Tweet t = Tweet.fetch(statusID);
+ if (t != null) {
+ for (long retweetId : t.getRetweets().values()) {
+ count += super.removeItemById(retweetId);
}
}
+ return count;
}
}
}
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/adapter/UnorderedCustomListAdapter.java b/app/src/main/java/net/lacolaco/smileessence/view/adapter/UnorderedCustomListAdapter.java
new file mode 100644
index 00000000..c115a0dc
--- /dev/null
+++ b/app/src/main/java/net/lacolaco/smileessence/view/adapter/UnorderedCustomListAdapter.java
@@ -0,0 +1,84 @@
+/*
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2012-2014 lacolaco.net
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+package net.lacolaco.smileessence.view.adapter;
+
+import android.app.Activity;
+import net.lacolaco.smileessence.viewmodel.IViewModel;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+
+public class UnorderedCustomListAdapter<T extends IViewModel> extends CustomListAdapter<T> {
+
+ // ------------------------------ FIELDS ------------------------------
+
+ protected final List<T> linkedList;
+
+ // --------------------------- CONSTRUCTORS ---------------------------
+
+ public UnorderedCustomListAdapter(Activity activity) {
+ super(activity);
+ this.linkedList = new LinkedList<>();
+ }
+
+ // ------------------------ OVERRIDE METHODS ------------------------
+
+ @Override
+ protected List<T> getFrozenList() {
+ return Collections.unmodifiableList(new ArrayList<>(linkedList));
+ }
+
+ // -------------------------- OTHER METHODS --------------------------
+
+ public void addItemToTop(T... items) {
+ synchronized (LOCK) {
+ for (T item : items) {
+ linkedList.add(item);
+ }
+ }
+ }
+
+ public void addItemToBottom(T... items) {
+ synchronized (LOCK) {
+ for (T item : items) {
+ linkedList.add(0, item);
+ }
+ }
+ }
+
+ public void clear() {
+ synchronized (LOCK) {
+ linkedList.clear();
+ }
+ }
+
+ public boolean removeItem(T item) {
+ synchronized (LOCK) {
+ return linkedList.remove(item);
+ }
+ }
+}
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/adapter/UserListListAdapter.java b/app/src/main/java/net/lacolaco/smileessence/view/adapter/UserListListAdapter.java
index 215416b5..81e33d7e 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/adapter/UserListListAdapter.java
+++ b/app/src/main/java/net/lacolaco/smileessence/view/adapter/UserListListAdapter.java
@@ -25,7 +25,6 @@
package net.lacolaco.smileessence.view.adapter;
import android.app.Activity;
-import net.lacolaco.smileessence.viewmodel.StatusViewModel;
public class UserListListAdapter extends StatusListAdapter {
@@ -48,16 +47,4 @@ public class UserListListAdapter extends StatusListAdapter {
public void setListFullName(String listFullName) {
this.listFullName = listFullName;
}
-
- // ------------------------ OVERRIDE METHODS ------------------------
-
- @Override
- public void addToBottom(StatusViewModel... items) {
- super.addToBottom(items);
- }
-
- @Override
- public void addToTop(StatusViewModel... items) {
- super.addToTop(items);
- }
}
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/dialog/ChooseTemplateDialogFragment.java b/app/src/main/java/net/lacolaco/smileessence/view/dialog/ChooseTemplateDialogFragment.java
index 4e7c6ab9..e4629c19 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/dialog/ChooseTemplateDialogFragment.java
+++ b/app/src/main/java/net/lacolaco/smileessence/view/dialog/ChooseTemplateDialogFragment.java
@@ -27,7 +27,7 @@ package net.lacolaco.smileessence.view.dialog;
import net.lacolaco.smileessence.command.Command;
import net.lacolaco.smileessence.command.post.PostCommandUseTemplate;
import net.lacolaco.smileessence.entity.Template;
-import net.lacolaco.smileessence.view.adapter.CustomListAdapter;
+import net.lacolaco.smileessence.view.adapter.UnorderedCustomListAdapter;
import java.util.ArrayList;
import java.util.List;
@@ -37,10 +37,10 @@ public class ChooseTemplateDialogFragment extends MenuDialogFragment {
// ------------------------ OVERRIDE METHODS ------------------------
@Override
- protected void setMenuItems(final CustomListAdapter<Command> adapter) {
+ protected void setMenuItems(final UnorderedCustomListAdapter<Command> adapter) {
List<Command> commands = getCommands();
for (Command command : commands) {
- adapter.addToBottom(command);
+ adapter.addItemToBottom(command);
}
adapter.update();
}
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/dialog/HashtagDialogFragment.java b/app/src/main/java/net/lacolaco/smileessence/view/dialog/HashtagDialogFragment.java
index 7269508c..abc4539b 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/dialog/HashtagDialogFragment.java
+++ b/app/src/main/java/net/lacolaco/smileessence/view/dialog/HashtagDialogFragment.java
@@ -31,7 +31,7 @@ import net.lacolaco.smileessence.command.Command;
import net.lacolaco.smileessence.command.CommandPasteToPost;
import net.lacolaco.smileessence.command.CommandSaveAsTemplate;
import net.lacolaco.smileessence.command.CommandSearchOnTwitter;
-import net.lacolaco.smileessence.view.adapter.CustomListAdapter;
+import net.lacolaco.smileessence.view.adapter.UnorderedCustomListAdapter;
import java.util.ArrayList;
import java.util.List;
@@ -57,12 +57,12 @@ public class HashtagDialogFragment extends MenuDialogFragment {
// ------------------------ OVERRIDE METHODS ------------------------
@Override
- protected void setMenuItems(final CustomListAdapter<Command> adapter) {
+ protected void setMenuItems(final UnorderedCustomListAdapter<Command> adapter) {
String text = getHashtagText();
List<Command> commands = getCommands(text);
Command.filter(commands);
for (Command command : commands) {
- adapter.addToBottom(command);
+ adapter.addItemToBottom(command);
}
adapter.update();
}
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/dialog/MenuDialogFragment.java b/app/src/main/java/net/lacolaco/smileessence/view/dialog/MenuDialogFragment.java
index 71355d61..0bf496c6 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/dialog/MenuDialogFragment.java
+++ b/app/src/main/java/net/lacolaco/smileessence/view/dialog/MenuDialogFragment.java
@@ -34,7 +34,7 @@ import net.lacolaco.smileessence.R;
import net.lacolaco.smileessence.activity.MainActivity;
import net.lacolaco.smileessence.command.Command;
import net.lacolaco.smileessence.command.IConfirmable;
-import net.lacolaco.smileessence.view.adapter.CustomListAdapter;
+import net.lacolaco.smileessence.view.adapter.UnorderedCustomListAdapter;
public abstract class MenuDialogFragment extends StackableDialogFragment implements AdapterView.OnItemClickListener {
@Override
@@ -42,7 +42,7 @@ public abstract class MenuDialogFragment extends StackableDialogFragment impleme
final MainActivity activity = (MainActivity) getActivity();
View body = activity.getLayoutInflater().inflate(R.layout.dialog_menu_list, null);
ListView listView = (ListView) body.findViewById(R.id.listview_dialog_menu_list);
- final CustomListAdapter<Command> adapter = new CustomListAdapter<>(activity);
+ final UnorderedCustomListAdapter<Command> adapter = new UnorderedCustomListAdapter<>(activity);
listView.setAdapter(adapter);
listView.setOnItemClickListener(this);
@@ -51,7 +51,7 @@ public abstract class MenuDialogFragment extends StackableDialogFragment impleme
return new AlertDialog.Builder(activity).setView(body).create();
}
- protected abstract void setMenuItems(final CustomListAdapter<Command> adapter);
+ protected abstract void setMenuItems(final UnorderedCustomListAdapter<Command> adapter);
protected void executeCommand(Command command) {
dismiss();
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/dialog/MessageDetailDialogFragment.java b/app/src/main/java/net/lacolaco/smileessence/view/dialog/MessageDetailDialogFragment.java
index 1a23bd28..f809807f 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/dialog/MessageDetailDialogFragment.java
+++ b/app/src/main/java/net/lacolaco/smileessence/view/dialog/MessageDetailDialogFragment.java
@@ -125,7 +125,7 @@ public class MessageDetailDialogFragment extends StackableDialogFragment impleme
}
if (replyTo != null) {
listView.setVisibility(View.VISIBLE);
- adapter.addToTop(new MessageViewModel(replyTo));
+ adapter.addItem(new MessageViewModel(replyTo));
adapter.updateForce();
} else {
listView.setVisibility(View.GONE);
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/dialog/MessageMenuDialogFragment.java b/app/src/main/java/net/lacolaco/smileessence/view/dialog/MessageMenuDialogFragment.java
index 27be3e54..228820f7 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/dialog/MessageMenuDialogFragment.java
+++ b/app/src/main/java/net/lacolaco/smileessence/view/dialog/MessageMenuDialogFragment.java
@@ -28,7 +28,7 @@ import android.app.Activity;
import android.os.Bundle;
import net.lacolaco.smileessence.command.*;
import net.lacolaco.smileessence.entity.DirectMessage;
-import net.lacolaco.smileessence.view.adapter.CustomListAdapter;
+import net.lacolaco.smileessence.view.adapter.UnorderedCustomListAdapter;
import java.util.ArrayList;
import java.util.List;
@@ -61,12 +61,12 @@ public class MessageMenuDialogFragment extends MenuDialogFragment {
}
@Override
- protected void setMenuItems(final CustomListAdapter<Command> adapter) {
+ protected void setMenuItems(final UnorderedCustomListAdapter<Command> adapter) {
if (message != null) {
List<Command> commands = getCommands();
Command.filter(commands);
for (Command command : commands) {
- adapter.addToBottom(command);
+ adapter.addItemToBottom(command);
}
adapter.update();
} else {
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/dialog/PostMenuDialogFragment.java b/app/src/main/java/net/lacolaco/smileessence/view/dialog/PostMenuDialogFragment.java
index ccc45112..c00ea94d 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/dialog/PostMenuDialogFragment.java
+++ b/app/src/main/java/net/lacolaco/smileessence/view/dialog/PostMenuDialogFragment.java
@@ -32,7 +32,7 @@ import net.lacolaco.smileessence.command.post.PostCommandMakeAnonymous;
import net.lacolaco.smileessence.command.post.PostCommandMorse;
import net.lacolaco.smileessence.command.post.PostCommandZekamashi;
import net.lacolaco.smileessence.notification.Notificator;
-import net.lacolaco.smileessence.view.adapter.CustomListAdapter;
+import net.lacolaco.smileessence.view.adapter.UnorderedCustomListAdapter;
import java.util.ArrayList;
import java.util.List;
@@ -42,7 +42,7 @@ public class PostMenuDialogFragment extends MenuDialogFragment {
// ------------------------ OVERRIDE METHODS ------------------------
@Override
- protected void setMenuItems(final CustomListAdapter<Command> adapter) {
+ protected void setMenuItems(final UnorderedCustomListAdapter<Command> adapter) {
List<Command> commands = getCommands();
Command.filter(commands);
if (commands.isEmpty()) {
@@ -50,7 +50,7 @@ public class PostMenuDialogFragment extends MenuDialogFragment {
dismiss();
}
for (Command command : commands) {
- adapter.addToBottom(command);
+ adapter.addItemToBottom(command);
}
adapter.update();
}
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/dialog/QuoteDialogFragment.java b/app/src/main/java/net/lacolaco/smileessence/view/dialog/QuoteDialogFragment.java
index ed03ddaa..81fda433 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/dialog/QuoteDialogFragment.java
+++ b/app/src/main/java/net/lacolaco/smileessence/view/dialog/QuoteDialogFragment.java
@@ -30,7 +30,7 @@ import net.lacolaco.smileessence.command.Command;
import net.lacolaco.smileessence.command.status.StatusCommandTextQuote;
import net.lacolaco.smileessence.command.status.StatusCommandURLQuote;
import net.lacolaco.smileessence.entity.Tweet;
-import net.lacolaco.smileessence.view.adapter.CustomListAdapter;
+import net.lacolaco.smileessence.view.adapter.UnorderedCustomListAdapter;
import java.util.ArrayList;
import java.util.List;
@@ -56,14 +56,14 @@ public class QuoteDialogFragment extends MenuDialogFragment {
// ------------------------ OVERRIDE METHODS ------------------------
@Override
- protected void setMenuItems(final CustomListAdapter<Command> adapter) {
+ protected void setMenuItems(final UnorderedCustomListAdapter<Command> adapter) {
Tweet tweet = Tweet.fetch(getStatusID());
if (tweet != null) {
List<Command> commands = getCommands(tweet);
Command.filter(commands);
for (Command command : commands) {
- adapter.addToBottom(command);
+ adapter.addItemToBottom(command);
}
adapter.update();
} else {
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/dialog/SelectImageDialogFragment.java b/app/src/main/java/net/lacolaco/smileessence/view/dialog/SelectImageDialogFragment.java
index 2d8ecf28..79b552d2 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/dialog/SelectImageDialogFragment.java
+++ b/app/src/main/java/net/lacolaco/smileessence/view/dialog/SelectImageDialogFragment.java
@@ -35,7 +35,7 @@ import net.lacolaco.smileessence.R;
import net.lacolaco.smileessence.activity.MainActivity;
import net.lacolaco.smileessence.command.Command;
import net.lacolaco.smileessence.util.IntentUtils;
-import net.lacolaco.smileessence.view.adapter.CustomListAdapter;
+import net.lacolaco.smileessence.view.adapter.UnorderedCustomListAdapter;
import java.util.ArrayList;
import java.util.List;
@@ -45,11 +45,11 @@ public class SelectImageDialogFragment extends MenuDialogFragment {
// ------------------------ OVERRIDE METHODS ------------------------
@Override
- protected void setMenuItems(final CustomListAdapter<Command> adapter) {
+ protected void setMenuItems(final UnorderedCustomListAdapter<Command> adapter) {
List<Command> commands = getCommands();
Command.filter(commands);
for (Command command : commands) {
- adapter.addToBottom(command);
+ adapter.addItemToBottom(command);
}
adapter.update();
}
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/dialog/SelectSearchQueryDialogFragment.java b/app/src/main/java/net/lacolaco/smileessence/view/dialog/SelectSearchQueryDialogFragment.java
index 6d95d3b6..4eb14413 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/dialog/SelectSearchQueryDialogFragment.java
+++ b/app/src/main/java/net/lacolaco/smileessence/view/dialog/SelectSearchQueryDialogFragment.java
@@ -37,7 +37,7 @@ import net.lacolaco.smileessence.command.Command;
import net.lacolaco.smileessence.command.CommandOpenSearch;
import net.lacolaco.smileessence.entity.SearchQuery;
import net.lacolaco.smileessence.notification.Notificator;
-import net.lacolaco.smileessence.view.adapter.CustomListAdapter;
+import net.lacolaco.smileessence.view.adapter.UnorderedCustomListAdapter;
import java.util.ArrayList;
import java.util.List;
@@ -49,7 +49,7 @@ public class SelectSearchQueryDialogFragment extends MenuDialogFragment implemen
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
final CommandOpenSearch command = (CommandOpenSearch) parent.getItemAtPosition(position);
- @SuppressWarnings("unchecked") final CustomListAdapter<Command> adapter = (CustomListAdapter<Command>) parent.getAdapter();
+ @SuppressWarnings("unchecked") final UnorderedCustomListAdapter<Command> adapter = (UnorderedCustomListAdapter<Command>) parent.getAdapter();
ConfirmDialogFragment.show(getActivity(), getString(R.string.dialog_confirm_delete_query), () -> {
adapter.removeItem(command);
@@ -65,11 +65,11 @@ public class SelectSearchQueryDialogFragment extends MenuDialogFragment implemen
// ------------------------ OVERRIDE METHODS ------------------------
@Override
- protected void setMenuItems(final CustomListAdapter<Command> adapter) {
+ protected void setMenuItems(final UnorderedCustomListAdapter<Command> adapter) {
List<Command> commands = getCommands();
Command.filter(commands);
for (Command command : commands) {
- adapter.addToBottom(command);
+ adapter.addItemToBottom(command);
}
adapter.update();
}
@@ -79,7 +79,7 @@ public class SelectSearchQueryDialogFragment extends MenuDialogFragment implemen
final MainActivity activity = (MainActivity) getActivity();
View body = activity.getLayoutInflater().inflate(R.layout.dialog_menu_list, null);
ListView listView = (ListView) body.findViewById(R.id.listview_dialog_menu_list);
- final CustomListAdapter<Command> adapter = new CustomListAdapter<>(activity);
+ final UnorderedCustomListAdapter<Command> adapter = new UnorderedCustomListAdapter<>(activity);
listView.setAdapter(adapter);
listView.setOnItemClickListener(this);
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/dialog/SelectUserListDialogFragment.java b/app/src/main/java/net/lacolaco/smileessence/view/dialog/SelectUserListDialogFragment.java
index f36961d8..ddb87734 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/dialog/SelectUserListDialogFragment.java
+++ b/app/src/main/java/net/lacolaco/smileessence/view/dialog/SelectUserListDialogFragment.java
@@ -31,7 +31,7 @@ import net.lacolaco.smileessence.R;
import net.lacolaco.smileessence.activity.MainActivity;
import net.lacolaco.smileessence.command.Command;
import net.lacolaco.smileessence.command.CommandOpenUserList;
-import net.lacolaco.smileessence.view.adapter.CustomListAdapter;
+import net.lacolaco.smileessence.view.adapter.UnorderedCustomListAdapter;
import java.util.ArrayList;
import java.util.List;
@@ -41,11 +41,11 @@ public class SelectUserListDialogFragment extends MenuDialogFragment {
// ------------------------ OVERRIDE METHODS ------------------------
@Override
- protected void setMenuItems(final CustomListAdapter<Command> adapter) {
+ protected void setMenuItems(final UnorderedCustomListAdapter<Command> adapter) {
List<Command> commands = getCommands();
Command.filter(commands);
for (Command command : commands) {
- adapter.addToBottom(command);
+ adapter.addItemToBottom(command);
}
adapter.update();
}
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/dialog/StatusDetailDialogFragment.java b/app/src/main/java/net/lacolaco/smileessence/view/dialog/StatusDetailDialogFragment.java
index bf69c0ed..2f0d7c91 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/dialog/StatusDetailDialogFragment.java
+++ b/app/src/main/java/net/lacolaco/smileessence/view/dialog/StatusDetailDialogFragment.java
@@ -133,12 +133,12 @@ public class StatusDetailDialogFragment extends StackableDialogFragment implemen
listView.setVisibility(View.VISIBLE);
Tweet replyToIfPresent = tweet.getInReplyToIfPresent();
if (replyToIfPresent != null) {
- adapter.addToTop(new StatusViewModel(replyToIfPresent));
+ adapter.addItem(new StatusViewModel(replyToIfPresent));
adapter.updateForce();
} else {
new ShowStatusTask(account, tweet.getInReplyToStatusId())
.onDoneUI(replyTo -> {
- adapter.addToTop(new StatusViewModel(replyTo));
+ adapter.addItem(new StatusViewModel(replyTo));
adapter.updateForce();
})
.execute();
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/dialog/StatusMenuDialogFragment.java b/app/src/main/java/net/lacolaco/smileessence/view/dialog/StatusMenuDialogFragment.java
index 7c626f57..d1b8649e 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/dialog/StatusMenuDialogFragment.java
+++ b/app/src/main/java/net/lacolaco/smileessence/view/dialog/StatusMenuDialogFragment.java
@@ -28,7 +28,7 @@ import android.app.Activity;
import android.os.Bundle;
import net.lacolaco.smileessence.command.*;
import net.lacolaco.smileessence.entity.Tweet;
-import net.lacolaco.smileessence.view.adapter.CustomListAdapter;
+import net.lacolaco.smileessence.view.adapter.UnorderedCustomListAdapter;
import java.util.ArrayList;
import java.util.LinkedHashSet;
@@ -62,12 +62,12 @@ public class StatusMenuDialogFragment extends MenuDialogFragment {
}
@Override
- protected void setMenuItems(final CustomListAdapter<Command> adapter) {
+ protected void setMenuItems(final UnorderedCustomListAdapter<Command> adapter) {
if (tweet != null) {
List<Command> commands = getCommands();
Command.filter(commands);
for (Command command : commands) {
- adapter.addToBottom(command);
+ adapter.addItemToBottom(command);
}
adapter.update();
} else {
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/dialog/TalkChainDialogFragment.java b/app/src/main/java/net/lacolaco/smileessence/view/dialog/TalkChainDialogFragment.java
index 6a965d94..e4ea83fc 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/dialog/TalkChainDialogFragment.java
+++ b/app/src/main/java/net/lacolaco/smileessence/view/dialog/TalkChainDialogFragment.java
@@ -34,7 +34,7 @@ import net.lacolaco.smileessence.R;
import net.lacolaco.smileessence.activity.MainActivity;
import net.lacolaco.smileessence.entity.Account;
import net.lacolaco.smileessence.twitter.task.GetTalkTask;
-import net.lacolaco.smileessence.view.adapter.StatusListAdapter;
+import net.lacolaco.smileessence.view.adapter.UnorderedCustomListAdapter;
import net.lacolaco.smileessence.viewmodel.StatusViewModel;
public class TalkChainDialogFragment extends StackableDialogFragment {
@@ -64,11 +64,11 @@ public class TalkChainDialogFragment extends StackableDialogFragment {
View view = getActivity().getLayoutInflater().inflate(R.layout.dialog_talk_list, null);
ListView listView = (ListView) view.findViewById(R.id.listview_dialog_talk_list);
- final StatusListAdapter adapter = new StatusListAdapter(getActivity());
+ final UnorderedCustomListAdapter<StatusViewModel> adapter = new UnorderedCustomListAdapter<StatusViewModel>(getActivity());
listView.setAdapter(adapter);
new GetTalkTask(account, getStatusID()).onProgressUI(tweet -> {
- adapter.addToBottom(new StatusViewModel(tweet));
+ adapter.addItemToBottom(new StatusViewModel(tweet));
adapter.updateForce();
}).execute();
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/dialog/UserDetailDialogFragment.java b/app/src/main/java/net/lacolaco/smileessence/view/dialog/UserDetailDialogFragment.java
index c2544f90..5862fdf1 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/dialog/UserDetailDialogFragment.java
+++ b/app/src/main/java/net/lacolaco/smileessence/view/dialog/UserDetailDialogFragment.java
@@ -57,7 +57,7 @@ import net.lacolaco.smileessence.util.Themes;
import net.lacolaco.smileessence.util.UIHandler;
import net.lacolaco.smileessence.util.UIObserverBundle;
import net.lacolaco.smileessence.view.DialogHelper;
-import net.lacolaco.smileessence.view.adapter.CustomListAdapter;
+import net.lacolaco.smileessence.view.adapter.OrderedCustomListAdapter;
import net.lacolaco.smileessence.view.adapter.StatusListAdapter;
import net.lacolaco.smileessence.viewmodel.StatusViewModel;
@@ -150,7 +150,7 @@ public class UserDetailDialogFragment extends StackableDialogFragment implements
.onFail(x -> Notificator.getInstance().alert(R.string.notice_error_get_user_timeline))
.onDoneUI(tweets -> {
for (int i = tweets.size() - 1; i >= 0; i--) {
- adapter.addToTop(new StatusViewModel(tweets.get(i)));
+ adapter.addItem(new StatusViewModel(tweets.get(i)));
}
updateListView(refreshView.getRefreshableView(), adapter, true);
refreshView.onRefreshComplete();
@@ -167,7 +167,7 @@ public class UserDetailDialogFragment extends StackableDialogFragment implements
.onFail(x -> Notificator.getInstance().alert(R.string.notice_error_get_user_timeline))
.onDoneUI(tweets -> {
for (Tweet tweet : tweets) {
- adapter.addToBottom(new StatusViewModel(tweet));
+ adapter.addItem(new StatusViewModel(tweet));
}
updateListView(refreshView.getRefreshableView(), adapter, false);
refreshView.onRefreshComplete();
@@ -250,7 +250,7 @@ public class UserDetailDialogFragment extends StackableDialogFragment implements
.onFail(x -> Notificator.getInstance().alert(R.string.notice_error_get_user_timeline))
.onDoneUI(tweets -> {
for (Tweet tweet : tweets) {
- adapter.addToBottom(new StatusViewModel(tweet));
+ adapter.addItem(new StatusViewModel(tweet));
}
adapter.updateForce();
tabHost.getTabWidget().getChildTabViewAt(1).setVisibility(View.VISIBLE);
@@ -379,7 +379,7 @@ public class UserDetailDialogFragment extends StackableDialogFragment implements
}
}
- protected void updateListView(AbsListView absListView, CustomListAdapter<?> adapter, boolean addedToTop) {
+ protected void updateListView(AbsListView absListView, OrderedCustomListAdapter<?> adapter, boolean addedToTop) {
int before = adapter.getCount();
adapter.notifyDataSetChanged(); // synchronized call (not adapter#updateForce())
int after = adapter.getCount();
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/dialog/UserMenuDialogFragment.java b/app/src/main/java/net/lacolaco/smileessence/view/dialog/UserMenuDialogFragment.java
index c877ac25..338c3170 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/dialog/UserMenuDialogFragment.java
+++ b/app/src/main/java/net/lacolaco/smileessence/view/dialog/UserMenuDialogFragment.java
@@ -29,7 +29,7 @@ import android.os.Bundle;
import net.lacolaco.smileessence.command.Command;
import net.lacolaco.smileessence.command.CommandSearchOnTwitter;
import net.lacolaco.smileessence.entity.User;
-import net.lacolaco.smileessence.view.adapter.CustomListAdapter;
+import net.lacolaco.smileessence.view.adapter.UnorderedCustomListAdapter;
import java.util.ArrayList;
import java.util.List;
@@ -62,12 +62,12 @@ public class UserMenuDialogFragment extends MenuDialogFragment {
}
@Override
- protected void setMenuItems(final CustomListAdapter<Command> adapter) {
+ protected void setMenuItems(final UnorderedCustomListAdapter<Command> adapter) {
if (user != null) {
List<Command> commands = getCommands();
Command.filter(commands);
for (Command command : commands) {
- adapter.addToBottom(command);
+ adapter.addItemToBottom(command);
}
adapter.update();
} else {
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/page/HistoryFragment.java b/app/src/main/java/net/lacolaco/smileessence/view/page/HistoryFragment.java
index 9a889899..b139575e 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/page/HistoryFragment.java
+++ b/app/src/main/java/net/lacolaco/smileessence/view/page/HistoryFragment.java
@@ -51,7 +51,7 @@ public class HistoryFragment extends CustomListFragment<EventListAdapter> {
setAdapter(adapter);
StatusFilter.getInstance().register(this, EventViewModel.class, (EventViewModel vm) -> {
- adapter.addToTop(vm);
+ adapter.addItemToTop(vm);
adapter.update();
}, null);
}
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/page/HomeFragment.java b/app/src/main/java/net/lacolaco/smileessence/view/page/HomeFragment.java
index c3d6df0e..53435faa 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/page/HomeFragment.java
+++ b/app/src/main/java/net/lacolaco/smileessence/view/page/HomeFragment.java
@@ -59,10 +59,10 @@ public class HomeFragment extends CustomListFragment<StatusListAdapter> {
setAdapter(adapter);
StatusFilter.getInstance().register(this, StatusViewModel.class, (StatusViewModel tweet) -> {
- adapter.addToTop(tweet);
+ adapter.addItem(tweet);
adapter.update();
}, id -> {
- adapter.removeByStatusID(id);
+ adapter.removeItemById(id);
adapter.updateForce();
});
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/page/MentionsFragment.java b/app/src/main/java/net/lacolaco/smileessence/view/page/MentionsFragment.java
index ca5d864a..f89550d0 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/page/MentionsFragment.java
+++ b/app/src/main/java/net/lacolaco/smileessence/view/page/MentionsFragment.java
@@ -57,19 +57,19 @@ public class MentionsFragment extends CustomListFragment<StatusListAdapter> {
StatusFilter.getInstance().register(this, StatusViewModel.class, (StatusViewModel tweet) -> {
if (tweet.getTweet().getMentions().contains(Application.getInstance().getCurrentAccount().getUser().getScreenName())) {
- adapter.addToTop(tweet);
+ adapter.addItem(tweet);
adapter.update();
} else {
for (ExtractionWord word : ExtractionWord.all()) {
if (word.getPattern().matcher(tweet.getTweet().getOriginalTweet().getText()).find()) {
- adapter.addToTop(tweet);
+ adapter.addItem(tweet);
adapter.update();
return;
}
}
}
}, id -> {
- adapter.removeByStatusID(id);
+ adapter.removeItemById(id);
adapter.updateForce();
});
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/page/MessagesFragment.java b/app/src/main/java/net/lacolaco/smileessence/view/page/MessagesFragment.java
index 8cca14bc..440d68f4 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/page/MessagesFragment.java
+++ b/app/src/main/java/net/lacolaco/smileessence/view/page/MessagesFragment.java
@@ -60,10 +60,10 @@ public class MessagesFragment extends CustomListFragment<MessageListAdapter> {
setAdapter(adapter);
StatusFilter.getInstance().register(this, MessageViewModel.class, (MessageViewModel message) -> {
- adapter.addToTop(message);
+ adapter.addItem(message);
adapter.update();
}, id -> {
- adapter.removeByMessageID(id);
+ adapter.removeItemById(id);
adapter.updateForce();
});
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/page/SearchFragment.java b/app/src/main/java/net/lacolaco/smileessence/view/page/SearchFragment.java
index 01bed430..fb4c0039 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/page/SearchFragment.java
+++ b/app/src/main/java/net/lacolaco/smileessence/view/page/SearchFragment.java
@@ -335,7 +335,7 @@ public class SearchFragment extends CustomListFragment<SearchListAdapter> implem
if (!tweet.isRetweet()) {
StatusViewModel viewModel = new StatusViewModel(tweet);
StatusFilter.getInstance().filter(viewModel);
- adapter.addToTop(viewModel);
+ adapter.addItem(viewModel);
}
}
}
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/page/UserListFragment.java b/app/src/main/java/net/lacolaco/smileessence/view/page/UserListFragment.java
index 646e6877..3fbdafee 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/page/UserListFragment.java
+++ b/app/src/main/java/net/lacolaco/smileessence/view/page/UserListFragment.java
@@ -209,7 +209,7 @@ public class UserListFragment extends CustomListFragment<UserListListAdapter> im
for (Tweet tweet : tweets) {
StatusViewModel statusViewModel = new StatusViewModel(tweet);
StatusFilter.getInstance().filter(statusViewModel);
- adapter.addToBottom(statusViewModel);
+ adapter.addItem(statusViewModel);
}
})
.onFinishUI(onFinish)
diff --git a/app/src/main/java/net/lacolaco/smileessence/viewmodel/EditableCheckBoxModel.java b/app/src/main/java/net/lacolaco/smileessence/viewmodel/EditableCheckBoxModel.java
index d79f4bdd..935f93b4 100644
--- a/app/src/main/java/net/lacolaco/smileessence/viewmodel/EditableCheckBoxModel.java
+++ b/app/src/main/java/net/lacolaco/smileessence/viewmodel/EditableCheckBoxModel.java
@@ -32,11 +32,13 @@ import android.view.View;
import android.widget.CheckBox;
import android.widget.EditText;
import net.lacolaco.smileessence.R;
+import net.lacolaco.smileessence.entity.IdObject;
-public class EditableCheckBoxModel implements IViewModel {
+public class EditableCheckBoxModel implements IViewModel, IdObject {
// ------------------------------ FIELDS ------------------------------
+ private final long id;
private final String text;
private boolean freezing;
private String inputText;
@@ -44,7 +46,8 @@ public class EditableCheckBoxModel implements IViewModel {
// --------------------------- CONSTRUCTORS ---------------------------
- public EditableCheckBoxModel(String text) {
+ public EditableCheckBoxModel(long id, String text) {
+ this.id = id;
this.text = text;
}
@@ -77,6 +80,11 @@ public class EditableCheckBoxModel implements IViewModel {
return this;
}
+ @Override
+ public long getId() {
+ return id;
+ }
+
// ------------------------ INTERFACE METHODS ------------------------
diff --git a/app/src/main/java/net/lacolaco/smileessence/viewmodel/MessageViewModel.java b/app/src/main/java/net/lacolaco/smileessence/viewmodel/MessageViewModel.java
index 5e72b8d2..5b6dbe54 100644
--- a/app/src/main/java/net/lacolaco/smileessence/viewmodel/MessageViewModel.java
+++ b/app/src/main/java/net/lacolaco/smileessence/viewmodel/MessageViewModel.java
@@ -36,6 +36,7 @@ import net.lacolaco.smileessence.activity.MainActivity;
import net.lacolaco.smileessence.data.ImageCache;
import net.lacolaco.smileessence.entity.Account;
import net.lacolaco.smileessence.entity.DirectMessage;
+import net.lacolaco.smileessence.entity.IdObject;
import net.lacolaco.smileessence.entity.RBinding;
import net.lacolaco.smileessence.preference.UserPreferenceHelper;
import net.lacolaco.smileessence.util.NameStyles;
@@ -49,7 +50,7 @@ import net.lacolaco.smileessence.view.listener.ListItemClickListener;
import java.lang.ref.WeakReference;
-public class MessageViewModel implements IViewModel {
+public class MessageViewModel implements IViewModel, IdObject {
// ------------------------------ FIELDS ------------------------------
@@ -70,6 +71,11 @@ public class MessageViewModel implements IViewModel {
return directMessage;
}
+ @Override
+ public long getId() {
+ return directMessage.getId();
+ }
+
private String getFooterText(Account account) {
StringBuilder builder = new StringBuilder();
builder.append(StringUtils.dateToString(directMessage.getCreatedAt()));
diff --git a/app/src/main/java/net/lacolaco/smileessence/viewmodel/StatusViewModel.java b/app/src/main/java/net/lacolaco/smileessence/viewmodel/StatusViewModel.java
index 0596b0bf..73eb0944 100644
--- a/app/src/main/java/net/lacolaco/smileessence/viewmodel/StatusViewModel.java
+++ b/app/src/main/java/net/lacolaco/smileessence/viewmodel/StatusViewModel.java
@@ -36,6 +36,7 @@ import net.lacolaco.smileessence.Application;
import net.lacolaco.smileessence.R;
import net.lacolaco.smileessence.activity.MainActivity;
import net.lacolaco.smileessence.data.ImageCache;
+import net.lacolaco.smileessence.entity.IdObject;
import net.lacolaco.smileessence.entity.RBinding;
import net.lacolaco.smileessence.entity.Tweet;
import net.lacolaco.smileessence.preference.UserPreferenceHelper;
@@ -49,7 +50,7 @@ import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;
-public class StatusViewModel implements IViewModel {
+public class StatusViewModel implements IViewModel, IdObject {
private Tweet tweet;
private ArrayList<BackgroundTask> lastTasks = new ArrayList<>(); // internal
@@ -66,6 +67,11 @@ public class StatusViewModel implements IViewModel {
return tweet;
}
+ @Override
+ public long getId() {
+ return tweet.getId();
+ }
+
private String getFooterText() {
StringBuilder builder = new StringBuilder();
if (tweet.isRetweet()) {