chinwag-android/app/src/main/java/com/keylesspalace/tusky/adapter/AccountAdapter.java

114 lines
3.5 KiB
Java
Raw Normal View History

2017-01-31 15:51:02 +11:00
/* Copyright 2017 Andrew Dawson
*
2017-04-10 10:12:31 +10:00
* This file is a part of Tusky.
2017-01-31 15:51:02 +11:00
*
2017-04-10 10:12:31 +10:00
* 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.
2017-01-31 15:51:02 +11:00
*
* Tusky is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
2017-04-10 10:12:31 +10:00
* the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
* Public License for more details.
2017-01-31 15:51:02 +11:00
*
2017-04-10 10:12:31 +10:00
* You should have received a copy of the GNU General Public License along with Tusky; if not,
* see <http://www.gnu.org/licenses>. */
2017-01-31 15:51:02 +11:00
2017-05-05 08:55:34 +10:00
package com.keylesspalace.tusky.adapter;
2017-01-31 15:51:02 +11:00
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
2017-01-31 15:51:02 +11:00
import android.support.v7.widget.RecyclerView;
import com.keylesspalace.tusky.entity.Account;
2017-05-05 08:55:34 +10:00
import com.keylesspalace.tusky.interfaces.AccountActionListener;
import com.keylesspalace.tusky.util.ListUtils;
2017-01-31 15:51:02 +11:00
import java.util.ArrayList;
import java.util.List;
2017-05-05 08:55:34 +10:00
public abstract class AccountAdapter extends RecyclerView.Adapter {
static final int VIEW_TYPE_ACCOUNT = 0;
static final int VIEW_TYPE_FOOTER = 1;
List<Account> accountList;
AccountActionListener accountActionListener;
private boolean bottomLoading;
2017-01-31 15:51:02 +11:00
AccountAdapter(AccountActionListener accountActionListener) {
this.accountList = new ArrayList<>();
2017-01-31 15:51:02 +11:00
this.accountActionListener = accountActionListener;
bottomLoading = false;
2017-01-31 15:51:02 +11:00
}
@Override
public int getItemCount() {
return accountList.size() + (bottomLoading ? 1 : 0);
2017-01-31 15:51:02 +11:00
}
@Override
public int getItemViewType(int position) {
if (position == accountList.size() && bottomLoading) {
return VIEW_TYPE_FOOTER;
2017-01-31 15:51:02 +11:00
} else {
return VIEW_TYPE_ACCOUNT;
2017-01-31 15:51:02 +11:00
}
}
public void update(@NonNull List<Account> newAccounts) {
accountList = ListUtils.removeDuplicates(newAccounts);
2017-01-31 15:51:02 +11:00
notifyDataSetChanged();
}
public void addItems(List<Account> newAccounts) {
int end = accountList.size();
Account last = accountList.get(end - 1);
if (last != null && !findAccount(newAccounts, last.getId())) {
accountList.addAll(newAccounts);
notifyItemRangeInserted(end, newAccounts.size());
}
}
public void setBottomLoading(boolean loading) {
boolean wasLoading = bottomLoading;
if(wasLoading == loading) {
return;
}
bottomLoading = loading;
if(loading) {
notifyItemInserted(accountList.size());
} else {
notifyItemRemoved(accountList.size());
}
}
private static boolean findAccount(List<Account> accounts, String id) {
for (Account account : accounts) {
if (account.getId().equals(id)) {
return true;
}
}
return false;
2017-01-31 15:51:02 +11:00
}
@Nullable
2017-05-05 08:55:34 +10:00
public Account removeItem(int position) {
if (position < 0 || position >= accountList.size()) {
return null;
}
Account account = accountList.remove(position);
notifyItemRemoved(position);
return account;
}
2017-05-05 08:55:34 +10:00
public void addItem(Account account, int position) {
if (position < 0 || position > accountList.size()) {
return;
}
accountList.add(position, account);
notifyItemInserted(position);
}
2017-01-31 15:51:02 +11:00
}