Implement instance mutes (#1311)
* Implement instance mutes. #1143 * Move new classes to instancemute component * Add progress bar while instance list loads * Add undo snackbar for instance unmuting * Update display text for instance mutes
This commit is contained in:
parent
c10f3bce24
commit
a6819ce28e
20 changed files with 494 additions and 5 deletions
|
@ -34,6 +34,7 @@ import com.keylesspalace.tusky.R;
|
|||
import com.keylesspalace.tusky.adapter.StatusBaseViewHolder;
|
||||
import com.keylesspalace.tusky.adapter.TimelineAdapter;
|
||||
import com.keylesspalace.tusky.appstore.BlockEvent;
|
||||
import com.keylesspalace.tusky.appstore.DomainMuteEvent;
|
||||
import com.keylesspalace.tusky.appstore.EventHub;
|
||||
import com.keylesspalace.tusky.appstore.FavoriteEvent;
|
||||
import com.keylesspalace.tusky.appstore.MuteEvent;
|
||||
|
@ -56,6 +57,7 @@ import com.keylesspalace.tusky.repository.Placeholder;
|
|||
import com.keylesspalace.tusky.repository.TimelineRepository;
|
||||
import com.keylesspalace.tusky.repository.TimelineRequestMode;
|
||||
import com.keylesspalace.tusky.util.Either;
|
||||
import com.keylesspalace.tusky.util.LinkHelper;
|
||||
import com.keylesspalace.tusky.util.ListStatusAccessibilityDelegate;
|
||||
import com.keylesspalace.tusky.util.ListUtils;
|
||||
import com.keylesspalace.tusky.util.PairedList;
|
||||
|
@ -526,6 +528,11 @@ public class TimelineFragment extends SFragment implements
|
|||
String id = ((MuteEvent) event).getAccountId();
|
||||
removeAllByAccountId(id);
|
||||
}
|
||||
} else if (event instanceof DomainMuteEvent) {
|
||||
if (kind != Kind.USER && kind != Kind.USER_WITH_REPLIES && kind != Kind.USER_PINNED) {
|
||||
String instance = ((DomainMuteEvent) event).getInstance();
|
||||
removeAllByInstance(instance);
|
||||
}
|
||||
} else if (event instanceof StatusDeletedEvent) {
|
||||
if (kind != Kind.USER && kind != Kind.USER_WITH_REPLIES && kind != Kind.USER_PINNED) {
|
||||
String id = ((StatusDeletedEvent) event).getStatusId();
|
||||
|
@ -870,6 +877,18 @@ public class TimelineFragment extends SFragment implements
|
|||
updateAdapter();
|
||||
}
|
||||
|
||||
private void removeAllByInstance(String instance) {
|
||||
// using iterator to safely remove items while iterating
|
||||
Iterator<Either<Placeholder, Status>> iterator = statuses.iterator();
|
||||
while (iterator.hasNext()) {
|
||||
Status status = iterator.next().asRightOrNull();
|
||||
if (status != null && LinkHelper.getDomain(status.getAccount().getUrl()).equals(instance)) {
|
||||
iterator.remove();
|
||||
}
|
||||
}
|
||||
updateAdapter();
|
||||
}
|
||||
|
||||
private void onLoadMore() {
|
||||
if (didLoadEverythingBottom || bottomLoading) {
|
||||
return;
|
||||
|
|
|
@ -27,6 +27,7 @@ import com.keylesspalace.tusky.*
|
|||
import com.keylesspalace.tusky.R
|
||||
import com.keylesspalace.tusky.appstore.EventHub
|
||||
import com.keylesspalace.tusky.appstore.PreferenceChangedEvent
|
||||
import com.keylesspalace.tusky.components.instancemute.InstanceListActivity
|
||||
import com.keylesspalace.tusky.db.AccountManager
|
||||
import com.keylesspalace.tusky.di.Injectable
|
||||
import com.keylesspalace.tusky.entity.Account
|
||||
|
@ -59,6 +60,7 @@ class AccountPreferencesFragment : PreferenceFragmentCompat(),
|
|||
private lateinit var tabPreference: Preference
|
||||
private lateinit var mutedUsersPreference: Preference
|
||||
private lateinit var blockedUsersPreference: Preference
|
||||
private lateinit var mutedDomainsPreference: Preference
|
||||
|
||||
private lateinit var defaultPostPrivacyPreference: ListPreference
|
||||
private lateinit var defaultMediaSensitivityPreference: SwitchPreferenceCompat
|
||||
|
@ -78,6 +80,7 @@ class AccountPreferencesFragment : PreferenceFragmentCompat(),
|
|||
tabPreference = requirePreference("tabPreference")
|
||||
mutedUsersPreference = requirePreference("mutedUsersPreference")
|
||||
blockedUsersPreference = requirePreference("blockedUsersPreference")
|
||||
mutedDomainsPreference = requirePreference("mutedDomainsPreference")
|
||||
defaultPostPrivacyPreference = requirePreference("defaultPostPrivacy") as ListPreference
|
||||
defaultMediaSensitivityPreference = requirePreference("defaultMediaSensitivity") as SwitchPreferenceCompat
|
||||
mediaPreviewEnabledPreference = requirePreference("mediaPreviewEnabled") as SwitchPreferenceCompat
|
||||
|
@ -90,11 +93,13 @@ class AccountPreferencesFragment : PreferenceFragmentCompat(),
|
|||
notificationPreference.icon = IconicsDrawable(notificationPreference.context, GoogleMaterial.Icon.gmd_notifications).sizePx(iconSize).color(ThemeUtils.getColor(notificationPreference.context, R.attr.toolbar_icon_tint))
|
||||
mutedUsersPreference.icon = getTintedIcon(R.drawable.ic_mute_24dp)
|
||||
blockedUsersPreference.icon = IconicsDrawable(blockedUsersPreference.context, GoogleMaterial.Icon.gmd_block).sizePx(iconSize).color(ThemeUtils.getColor(blockedUsersPreference.context, R.attr.toolbar_icon_tint))
|
||||
mutedDomainsPreference.icon = getTintedIcon(R.drawable.ic_mute_24dp)
|
||||
|
||||
notificationPreference.onPreferenceClickListener = this
|
||||
tabPreference.onPreferenceClickListener = this
|
||||
mutedUsersPreference.onPreferenceClickListener = this
|
||||
blockedUsersPreference.onPreferenceClickListener = this
|
||||
mutedDomainsPreference.onPreferenceClickListener = this
|
||||
homeFiltersPreference.onPreferenceClickListener = this
|
||||
notificationFiltersPreference.onPreferenceClickListener = this
|
||||
publicFiltersPreference.onPreferenceClickListener = this
|
||||
|
@ -191,6 +196,12 @@ class AccountPreferencesFragment : PreferenceFragmentCompat(),
|
|||
activity?.overridePendingTransition(R.anim.slide_from_right, R.anim.slide_to_left)
|
||||
true
|
||||
}
|
||||
mutedDomainsPreference -> {
|
||||
val intent = Intent(context, InstanceListActivity::class.java)
|
||||
activity?.startActivity(intent)
|
||||
activity?.overridePendingTransition(R.anim.slide_from_right, R.anim.slide_to_left)
|
||||
true
|
||||
}
|
||||
homeFiltersPreference -> {
|
||||
launchFilterActivity(Filter.HOME, R.string.title_home)
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue