/** * Wire * Copyright (C) 2016 Wire Swiss GmbH * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.waz.zclient.testutils; import android.annotation.SuppressLint; import android.os.Parcel; import com.waz.api.Asset; import com.waz.api.EphemeralExpiration; import com.waz.api.IConversation; import com.waz.api.ImageAsset; import com.waz.api.Message; import com.waz.api.MessageContent; import com.waz.api.MessagesList; import com.waz.api.SyncIndicator; import com.waz.api.User; import org.threeten.bp.Instant; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class MockMessagesList extends MockObservable implements MessagesList { private List<MockMessage> mockMessages = new ArrayList<>(); private int lastReadIndex = -1; private MockConversation conversation; public MockMessagesList(MockConversation conversation) { super(conversation.id); this.conversation = conversation; } @Override public int getUnreadCount() { return lastReadIndex == -1 ? mockMessages.size() : mockMessages.size() - 1 - lastReadIndex; } @Override public int getLastReadIndex() { return lastReadIndex; } @Override public int getMessageIndex(Message m) { return mockMessages.indexOf(m); } @Override public Message getLastMessage() { return mockMessages.get(mockMessages.size() - 1); } @Override public SyncIndicator getSyncIndicator() { return null; } @Override public Message get(int position) { return mockMessages.get(position); } @Override public int size() { return mockMessages.size(); } @Override public Iterator<Message> iterator() { return null; } @Override public void triggerInternalUpdate() { conversation.triggerInternalUpdate(); super.triggerInternalUpdate(); } public void setMessages(int numMessages) { mockMessages.clear(); for (int i = 0; i < numMessages; i++) { mockMessages.add(new MockMessage(i)); } triggerInternalUpdate(); } public void addExtraMessage(boolean messageVisible) { mockMessages.add(new MockMessage(mockMessages.size())); if (messageVisible) { lastReadIndex++; } triggerInternalUpdate(); } public void setLastReadMessageIndex(int index) { if (index < 0 || index >= mockMessages.size()) { throw new IllegalArgumentException("The last read message needs to exist!"); } lastReadIndex = index; } @SuppressLint("ParcelCreator") public static class MockMessage extends MockObservable implements Message { public MockMessage(int id) { super(id); } @Override public Part[] getParts() { return new Part[0]; } @Override public String getId() { return Integer.toString(id); } @Override public String getConversationId() { return null; } @Override public IConversation getConversation() { return null; } @Override public Type getMessageType() { return null; } @Override public Status getMessageStatus() { return null; } @Override public User getUser() { return null; } @Override public ImageAsset getImage() { return null; } @Override public ImageAsset getImage(int width, int height) { return null; } @Override public Asset getAsset() { return null; } @Override public String getBody() { return null; } @Override public Instant getTime() { return null; } @Override public Instant getEditTime() { return null; } @Override public boolean isDeleted() { return false; } @Override public boolean isEmpty() { return false; } @Override public boolean isHotKnock() { return false; } @Override public boolean isEdited() { return false; } @Override public boolean isCreateConversation() { return false; } @Override public boolean isFirstMessage() { return false; } @Override public boolean isLastMessageFromSelf() { return false; } @Override public boolean isLastMessageFromOther() { return false; } @Override public boolean isUserMentioned() { return false; } @Override public User[] getMentionedUsers() { return new User[0]; } @Override public User[] getLikes() { return new User[0]; } @Override public boolean isLikedByThisUser() { return false; } @Override public boolean isLiked() { return false; } @Override public void like() { } @Override public void unlike() { } @Override public boolean isEphemeral() { return false; } @Override public boolean isExpired() { return false; } @Override public EphemeralExpiration getEphemeralExpiration() { return null; } @Override public Instant getExpirationTime() { return null; } @Override public void retry() { } @Override public void delete() { } @Override public void recall() { } @Override public void update(MessageContent.Text content) { } @Override public Instant getLocalTime() { return null; } @Override public MessageContent.Location getLocation() { return null; } @Override public String getNewConversationName() { return null; } @Override public int getImageWidth() { return 0; } @Override public int getImageHeight() { return 0; } @Override public User[] getMembers() { return new User[0]; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { } } }