Adds ability to mute from an individual status. Also, all statuses from that user are removed from the timeline on the spot.
This commit is contained in:
parent
b6e3edaa32
commit
0da98f4f67
@ -271,9 +271,9 @@ public class AccountFragment extends BaseFragment implements AccountActionListen
|
||||
|
||||
Call<Relationship> call;
|
||||
if (!mute) {
|
||||
call = api.unblockAccount(id);
|
||||
call = api.unmuteAccount(id);
|
||||
} else {
|
||||
call = api.blockAccount(id);
|
||||
call = api.muteAccount(id);
|
||||
}
|
||||
callList.add(call);
|
||||
call.enqueue(callback);
|
||||
|
@ -17,4 +17,5 @@ package com.keylesspalace.tusky;
|
||||
|
||||
interface AdapterItemRemover {
|
||||
void removeItem(int position);
|
||||
void removeAllByAccountId(String accountId);
|
||||
}
|
||||
|
@ -34,6 +34,7 @@ import com.keylesspalace.tusky.entity.Status;
|
||||
import com.squareup.picasso.Picasso;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
class NotificationsAdapter extends RecyclerView.Adapter implements AdapterItemRemover {
|
||||
@ -62,7 +63,7 @@ class NotificationsAdapter extends RecyclerView.Adapter implements AdapterItemRe
|
||||
}
|
||||
|
||||
|
||||
public void setFooterState(FooterState newFooterState) {
|
||||
void setFooterState(FooterState newFooterState) {
|
||||
FooterState oldValue = footerState;
|
||||
footerState = newFooterState;
|
||||
if (footerState != oldValue) {
|
||||
@ -210,6 +211,18 @@ class NotificationsAdapter extends RecyclerView.Adapter implements AdapterItemRe
|
||||
notifyItemChanged(position);
|
||||
}
|
||||
|
||||
public void removeAllByAccountId(String id) {
|
||||
for (int i = 0; i < notifications.size();) {
|
||||
Notification notification = notifications.get(i);
|
||||
if (id.equals(notification.account.id)) {
|
||||
notifications.remove(i);
|
||||
notifyItemRemoved(i);
|
||||
} else {
|
||||
i += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
interface NotificationActionListener {
|
||||
void onViewAccount(String id);
|
||||
}
|
||||
|
@ -37,6 +37,7 @@ import java.util.List;
|
||||
import okhttp3.ResponseBody;
|
||||
import retrofit2.Call;
|
||||
import retrofit2.Callback;
|
||||
import retrofit2.Response;
|
||||
|
||||
/* Note from Andrew on Jan. 22, 2017: This class is a design problem for me, so I left it with an
|
||||
* awkward name. TimelineFragment and NotificationFragment have significant overlap but the nature
|
||||
@ -163,18 +164,26 @@ public abstract class SFragment extends BaseFragment {
|
||||
callList.add(call);
|
||||
}
|
||||
|
||||
private void mute(String id) {
|
||||
Call<Relationship> call = getApi().muteAccount(id);
|
||||
call.enqueue(new Callback<Relationship>() {
|
||||
@Override
|
||||
public void onResponse(Call<Relationship> call, Response<Relationship> response) {}
|
||||
|
||||
@Override
|
||||
public void onFailure(Call<Relationship> call, Throwable t) {}
|
||||
});
|
||||
callList.add(call);
|
||||
}
|
||||
|
||||
private void block(String id) {
|
||||
Call<Relationship> call = getApi().blockAccount(id);
|
||||
call.enqueue(new Callback<Relationship>() {
|
||||
@Override
|
||||
public void onResponse(Call<Relationship> call, retrofit2.Response<Relationship> response) {
|
||||
|
||||
}
|
||||
public void onResponse(Call<Relationship> call, retrofit2.Response<Relationship> response) {}
|
||||
|
||||
@Override
|
||||
public void onFailure(Call<Relationship> call, Throwable t) {
|
||||
|
||||
}
|
||||
public void onFailure(Call<Relationship> call, Throwable t) {}
|
||||
});
|
||||
callList.add(call);
|
||||
}
|
||||
@ -183,14 +192,10 @@ public abstract class SFragment extends BaseFragment {
|
||||
Call<ResponseBody> call = getApi().deleteStatus(id);
|
||||
call.enqueue(new Callback<ResponseBody>() {
|
||||
@Override
|
||||
public void onResponse(Call<ResponseBody> call, retrofit2.Response<ResponseBody> response) {
|
||||
|
||||
}
|
||||
public void onResponse(Call<ResponseBody> call, retrofit2.Response<ResponseBody> response) {}
|
||||
|
||||
@Override
|
||||
public void onFailure(Call<ResponseBody> call, Throwable t) {
|
||||
|
||||
}
|
||||
public void onFailure(Call<ResponseBody> call, Throwable t) {}
|
||||
});
|
||||
callList.add(call);
|
||||
}
|
||||
@ -235,8 +240,14 @@ public abstract class SFragment extends BaseFragment {
|
||||
startActivity(Intent.createChooser(sendIntent, getResources().getText(R.string.send_status_link_to)));
|
||||
return true;
|
||||
}
|
||||
case R.id.status_mute: {
|
||||
mute(accountId);
|
||||
adapter.removeAllByAccountId(accountId);
|
||||
return true;
|
||||
}
|
||||
case R.id.status_block: {
|
||||
block(accountId);
|
||||
adapter.removeAllByAccountId(accountId);
|
||||
return true;
|
||||
}
|
||||
case R.id.status_report: {
|
||||
|
@ -65,6 +65,18 @@ class ThreadAdapter extends RecyclerView.Adapter implements AdapterItemRemover {
|
||||
notifyItemRemoved(position);
|
||||
}
|
||||
|
||||
public void removeAllByAccountId(String accountId) {
|
||||
for (int i = 0; i < statuses.size();) {
|
||||
Status status = statuses.get(i);
|
||||
if (accountId.equals(status.account.id)) {
|
||||
statuses.remove(i);
|
||||
notifyItemRemoved(i);
|
||||
} else {
|
||||
i += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int setStatus(Status status) {
|
||||
if (statuses.size() > 0 && statuses.get(statusIndex).equals(status)) {
|
||||
// Do not add this status on refresh, it's already in there.
|
||||
|
@ -79,7 +79,7 @@ class TimelineAdapter extends RecyclerView.Adapter implements AdapterItemRemover
|
||||
}
|
||||
}
|
||||
|
||||
public void setFooterState(FooterState newFooterState) {
|
||||
void setFooterState(FooterState newFooterState) {
|
||||
FooterState oldValue = footerState;
|
||||
footerState = newFooterState;
|
||||
if (footerState != oldValue) {
|
||||
@ -142,6 +142,18 @@ class TimelineAdapter extends RecyclerView.Adapter implements AdapterItemRemover
|
||||
notifyItemRemoved(position);
|
||||
}
|
||||
|
||||
public void removeAllByAccountId(String accountId) {
|
||||
for (int i = 0; i < statuses.size();) {
|
||||
Status status = statuses.get(i);
|
||||
if (accountId.equals(status.account.id)) {
|
||||
statuses.remove(i);
|
||||
notifyItemRemoved(i);
|
||||
} else {
|
||||
i += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
Status getItem(int position) {
|
||||
if (position >= 0 && position < statuses.size()) {
|
||||
|
@ -12,6 +12,8 @@
|
||||
android:title="@string/status_share_content"/>
|
||||
</menu>
|
||||
</item>
|
||||
<item android:title="@string/action_mute"
|
||||
android:id="@+id/status_mute" />
|
||||
<item android:title="@string/action_block"
|
||||
android:id="@+id/status_block" />
|
||||
<item android:title="@string/action_report"
|
||||
|
Loading…
Reference in New Issue
Block a user