|
|
@ -26,6 +26,7 @@ import android.view.MenuItem;
|
|
|
|
|
|
|
|
|
|
|
|
import androidx.annotation.NonNull;
|
|
|
|
import androidx.annotation.NonNull;
|
|
|
|
import androidx.appcompat.app.ActionBar;
|
|
|
|
import androidx.appcompat.app.ActionBar;
|
|
|
|
|
|
|
|
import androidx.appcompat.app.AlertDialog;
|
|
|
|
import androidx.lifecycle.ViewModelProvider;
|
|
|
|
import androidx.lifecycle.ViewModelProvider;
|
|
|
|
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
|
|
|
|
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
|
|
|
|
|
|
|
|
|
|
|
@ -56,11 +57,14 @@ public class HashTagActivity extends BaseActivity {
|
|
|
|
|
|
|
|
|
|
|
|
public static int position;
|
|
|
|
public static int position;
|
|
|
|
private String tag;
|
|
|
|
private String tag;
|
|
|
|
private boolean pinnedTag;
|
|
|
|
private Boolean pinnedTag;
|
|
|
|
private boolean followedTag;
|
|
|
|
private Boolean followedTag;
|
|
|
|
private boolean mutedTag;
|
|
|
|
private Boolean mutedTag;
|
|
|
|
private TagVM tagVM;
|
|
|
|
private TagVM tagVM;
|
|
|
|
private Filter fedilabFilter;
|
|
|
|
private Filter fedilabFilter;
|
|
|
|
|
|
|
|
private Filter.KeywordsAttributes keyword;
|
|
|
|
|
|
|
|
private PinnedTimeline pinnedTimeline;
|
|
|
|
|
|
|
|
private Pinned pinned;
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
protected void onCreate(Bundle savedInstanceState) {
|
|
|
|
protected void onCreate(Bundle savedInstanceState) {
|
|
|
@ -75,9 +79,9 @@ public class HashTagActivity extends BaseActivity {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (tag == null)
|
|
|
|
if (tag == null)
|
|
|
|
finish();
|
|
|
|
finish();
|
|
|
|
pinnedTag = false;
|
|
|
|
pinnedTag = null;
|
|
|
|
followedTag = false;
|
|
|
|
followedTag = null;
|
|
|
|
mutedTag = false;
|
|
|
|
mutedTag = null;
|
|
|
|
setSupportActionBar(binding.toolbar);
|
|
|
|
setSupportActionBar(binding.toolbar);
|
|
|
|
ActionBar actionBar = getSupportActionBar();
|
|
|
|
ActionBar actionBar = getSupportActionBar();
|
|
|
|
//Remove title
|
|
|
|
//Remove title
|
|
|
@ -100,19 +104,24 @@ public class HashTagActivity extends BaseActivity {
|
|
|
|
ReorderVM reorderVM = new ViewModelProvider(HashTagActivity.this).get(ReorderVM.class);
|
|
|
|
ReorderVM reorderVM = new ViewModelProvider(HashTagActivity.this).get(ReorderVM.class);
|
|
|
|
reorderVM.getAllPinned().observe(HashTagActivity.this, pinned -> {
|
|
|
|
reorderVM.getAllPinned().observe(HashTagActivity.this, pinned -> {
|
|
|
|
if (pinned != null) {
|
|
|
|
if (pinned != null) {
|
|
|
|
|
|
|
|
this.pinned = pinned;
|
|
|
|
|
|
|
|
pinnedTag = false;
|
|
|
|
if (pinned.pinnedTimelines != null) {
|
|
|
|
if (pinned.pinnedTimelines != null) {
|
|
|
|
for (PinnedTimeline pinnedTimeline : pinned.pinnedTimelines) {
|
|
|
|
for (PinnedTimeline pinnedTimeline : pinned.pinnedTimelines) {
|
|
|
|
if (pinnedTimeline.tagTimeline != null) {
|
|
|
|
if (pinnedTimeline.tagTimeline != null) {
|
|
|
|
if (pinnedTimeline.tagTimeline.name.equalsIgnoreCase(tag)) {
|
|
|
|
if (pinnedTimeline.tagTimeline.name.equalsIgnoreCase(tag)) {
|
|
|
|
|
|
|
|
this.pinnedTimeline = pinnedTimeline;
|
|
|
|
pinnedTag = true;
|
|
|
|
pinnedTag = true;
|
|
|
|
invalidateOptionsMenu();
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
invalidateOptionsMenu();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
if (MainActivity.filterFetched && MainActivity.mainFilters != null) {
|
|
|
|
if (MainActivity.filterFetched && MainActivity.mainFilters != null) {
|
|
|
|
|
|
|
|
mutedTag = false;
|
|
|
|
for (Filter filter : MainActivity.mainFilters) {
|
|
|
|
for (Filter filter : MainActivity.mainFilters) {
|
|
|
|
if (filter.title.equalsIgnoreCase(Helper.FEDILAB_MUTED_HASHTAGS)) {
|
|
|
|
if (filter.title.equalsIgnoreCase(Helper.FEDILAB_MUTED_HASHTAGS)) {
|
|
|
|
fedilabFilter = filter;
|
|
|
|
fedilabFilter = filter;
|
|
|
@ -120,17 +129,14 @@ public class HashTagActivity extends BaseActivity {
|
|
|
|
for (Filter.KeywordsAttributes keywordsAttributes : filter.keywords) {
|
|
|
|
for (Filter.KeywordsAttributes keywordsAttributes : filter.keywords) {
|
|
|
|
if (fetch.equalsIgnoreCase(keywordsAttributes.keyword)) {
|
|
|
|
if (fetch.equalsIgnoreCase(keywordsAttributes.keyword)) {
|
|
|
|
mutedTag = true;
|
|
|
|
mutedTag = true;
|
|
|
|
|
|
|
|
keyword = keywordsAttributes;
|
|
|
|
invalidateOptionsMenu();
|
|
|
|
invalidateOptionsMenu();
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
mutedTag = false;
|
|
|
|
|
|
|
|
invalidateOptionsMenu();
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
invalidateOptionsMenu();
|
|
|
|
mutedTag = true;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Bundle bundle = new Bundle();
|
|
|
|
Bundle bundle = new Bundle();
|
|
|
@ -158,6 +164,29 @@ public class HashTagActivity extends BaseActivity {
|
|
|
|
finish();
|
|
|
|
finish();
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
} else if (item.getItemId() == R.id.action_add_timeline) {
|
|
|
|
} else if (item.getItemId() == R.id.action_add_timeline) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (pinnedTag) {
|
|
|
|
|
|
|
|
AlertDialog.Builder unpinConfirm = new AlertDialog.Builder(HashTagActivity.this, Helper.dialogStyle());
|
|
|
|
|
|
|
|
unpinConfirm.setMessage(getString(R.string.unpin_timeline_description));
|
|
|
|
|
|
|
|
unpinConfirm.setNegativeButton(R.string.cancel, (dialog, which) -> dialog.dismiss());
|
|
|
|
|
|
|
|
unpinConfirm.setPositiveButton(R.string.yes, (dialog, which) -> {
|
|
|
|
|
|
|
|
pinned.pinnedTimelines.remove(pinnedTimeline);
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
new Pinned(HashTagActivity.this).updatePinned(pinned);
|
|
|
|
|
|
|
|
} catch (DBException e) {
|
|
|
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
pinnedTag = false;
|
|
|
|
|
|
|
|
invalidateOptionsMenu();
|
|
|
|
|
|
|
|
Bundle b = new Bundle();
|
|
|
|
|
|
|
|
b.putBoolean(Helper.RECEIVE_REDRAW_TOPBAR, true);
|
|
|
|
|
|
|
|
Intent intentBD = new Intent(Helper.BROADCAST_DATA);
|
|
|
|
|
|
|
|
intentBD.putExtras(b);
|
|
|
|
|
|
|
|
LocalBroadcastManager.getInstance(HashTagActivity.this).sendBroadcast(intentBD);
|
|
|
|
|
|
|
|
dialog.dismiss();
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
unpinConfirm.show();
|
|
|
|
|
|
|
|
} else {
|
|
|
|
new Thread(() -> {
|
|
|
|
new Thread(() -> {
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
Pinned pinned = new Pinned(HashTagActivity.this).getPinned(currentAccount);
|
|
|
|
Pinned pinned = new Pinned(HashTagActivity.this).getPinned(currentAccount);
|
|
|
@ -182,7 +211,7 @@ public class HashTagActivity extends BaseActivity {
|
|
|
|
mainHandler.post(myRunnable);
|
|
|
|
mainHandler.post(myRunnable);
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
PinnedTimeline pinnedTimeline = new PinnedTimeline();
|
|
|
|
pinnedTimeline = new PinnedTimeline();
|
|
|
|
pinnedTimeline.type = Timeline.TimeLineEnum.TAG;
|
|
|
|
pinnedTimeline.type = Timeline.TimeLineEnum.TAG;
|
|
|
|
pinnedTimeline.position = pinned.pinnedTimelines.size();
|
|
|
|
pinnedTimeline.position = pinned.pinnedTimelines.size();
|
|
|
|
pinnedTimeline.displayed = true;
|
|
|
|
pinnedTimeline.displayed = true;
|
|
|
@ -208,15 +237,26 @@ public class HashTagActivity extends BaseActivity {
|
|
|
|
e.printStackTrace();
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}).start();
|
|
|
|
}).start();
|
|
|
|
|
|
|
|
}
|
|
|
|
} else if (item.getItemId() == R.id.action_follow_tag) {
|
|
|
|
} else if (item.getItemId() == R.id.action_follow_tag) {
|
|
|
|
|
|
|
|
if (!followedTag) {
|
|
|
|
tagVM.follow(MainActivity.currentInstance, MainActivity.currentToken, tag).observe(this, returnedTag -> {
|
|
|
|
tagVM.follow(MainActivity.currentInstance, MainActivity.currentToken, tag).observe(this, returnedTag -> {
|
|
|
|
if (returnedTag != null) {
|
|
|
|
if (returnedTag != null) {
|
|
|
|
followedTag = returnedTag.following;
|
|
|
|
followedTag = returnedTag.following;
|
|
|
|
invalidateOptionsMenu();
|
|
|
|
invalidateOptionsMenu();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
tagVM.unfollow(MainActivity.currentInstance, MainActivity.currentToken, tag).observe(this, returnedTag -> {
|
|
|
|
|
|
|
|
if (returnedTag != null) {
|
|
|
|
|
|
|
|
followedTag = returnedTag.following;
|
|
|
|
|
|
|
|
invalidateOptionsMenu();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
}
|
|
|
|
} else if (item.getItemId() == R.id.action_mute) {
|
|
|
|
} else if (item.getItemId() == R.id.action_mute) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!mutedTag) {
|
|
|
|
if (MainActivity.mainFilters == null || fedilabFilter == null) {
|
|
|
|
if (MainActivity.mainFilters == null || fedilabFilter == null) {
|
|
|
|
MainActivity.mainFilters = new ArrayList<>();
|
|
|
|
MainActivity.mainFilters = new ArrayList<>();
|
|
|
|
Filter.FilterParams filterParams = new Filter.FilterParams();
|
|
|
|
Filter.FilterParams filterParams = new Filter.FilterParams();
|
|
|
@ -227,7 +267,6 @@ public class HashTagActivity extends BaseActivity {
|
|
|
|
filterParams.context.add("public");
|
|
|
|
filterParams.context.add("public");
|
|
|
|
filterParams.context.add("thread");
|
|
|
|
filterParams.context.add("thread");
|
|
|
|
filterParams.context.add("account");
|
|
|
|
filterParams.context.add("account");
|
|
|
|
String finalTag = tag;
|
|
|
|
|
|
|
|
FiltersVM filtersVM = new ViewModelProvider(HashTagActivity.this).get(FiltersVM.class);
|
|
|
|
FiltersVM filtersVM = new ViewModelProvider(HashTagActivity.this).get(FiltersVM.class);
|
|
|
|
filtersVM.addFilter(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, filterParams)
|
|
|
|
filtersVM.addFilter(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, filterParams)
|
|
|
|
.observe(HashTagActivity.this, filter -> {
|
|
|
|
.observe(HashTagActivity.this, filter -> {
|
|
|
@ -242,6 +281,9 @@ public class HashTagActivity extends BaseActivity {
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
muteTags();
|
|
|
|
muteTags();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
unmuteTags();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -249,6 +291,24 @@ public class HashTagActivity extends BaseActivity {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void unmuteTags() {
|
|
|
|
|
|
|
|
String search = tag.startsWith("#") ? tag : "#" + tag;
|
|
|
|
|
|
|
|
for (Filter.KeywordsAttributes keywordsAttributes : fedilabFilter.keywords) {
|
|
|
|
|
|
|
|
if (search.equalsIgnoreCase(keywordsAttributes.keyword)) {
|
|
|
|
|
|
|
|
keyword = keywordsAttributes;
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (keyword != null && keyword.id != null) {
|
|
|
|
|
|
|
|
FiltersVM filtersVM = new ViewModelProvider(HashTagActivity.this).get(FiltersVM.class);
|
|
|
|
|
|
|
|
filtersVM.removeKeyword(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, keyword.id);
|
|
|
|
|
|
|
|
fedilabFilter.keywords.remove(keyword);
|
|
|
|
|
|
|
|
mutedTag = false;
|
|
|
|
|
|
|
|
invalidateOptionsMenu();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void muteTags() {
|
|
|
|
private void muteTags() {
|
|
|
|
Filter.FilterParams filterParams = new Filter.FilterParams();
|
|
|
|
Filter.FilterParams filterParams = new Filter.FilterParams();
|
|
|
|
filterParams.id = fedilabFilter.id;
|
|
|
|
filterParams.id = fedilabFilter.id;
|
|
|
@ -261,6 +321,7 @@ public class HashTagActivity extends BaseActivity {
|
|
|
|
FiltersVM filtersVM = new ViewModelProvider(HashTagActivity.this).get(FiltersVM.class);
|
|
|
|
FiltersVM filtersVM = new ViewModelProvider(HashTagActivity.this).get(FiltersVM.class);
|
|
|
|
filtersVM.editFilter(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, filterParams)
|
|
|
|
filtersVM.editFilter(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, filterParams)
|
|
|
|
.observe(HashTagActivity.this, filter -> {
|
|
|
|
.observe(HashTagActivity.this, filter -> {
|
|
|
|
|
|
|
|
fedilabFilter = filter;
|
|
|
|
mutedTag = true;
|
|
|
|
mutedTag = true;
|
|
|
|
invalidateOptionsMenu();
|
|
|
|
invalidateOptionsMenu();
|
|
|
|
});
|
|
|
|
});
|
|
|
@ -272,13 +333,42 @@ public class HashTagActivity extends BaseActivity {
|
|
|
|
MenuItem pin = menu.findItem(R.id.action_add_timeline);
|
|
|
|
MenuItem pin = menu.findItem(R.id.action_add_timeline);
|
|
|
|
MenuItem follow = menu.findItem(R.id.action_follow_tag);
|
|
|
|
MenuItem follow = menu.findItem(R.id.action_follow_tag);
|
|
|
|
MenuItem mute = menu.findItem(R.id.action_mute);
|
|
|
|
MenuItem mute = menu.findItem(R.id.action_mute);
|
|
|
|
if (pinnedTag && pin != null) {
|
|
|
|
if (pinnedTag != null) {
|
|
|
|
|
|
|
|
pin.setVisible(true);
|
|
|
|
|
|
|
|
if (pinnedTag) {
|
|
|
|
|
|
|
|
pin.setIcon(R.drawable.tag_pin_off);
|
|
|
|
|
|
|
|
pin.setTitle(getString(R.string.unpin_tag));
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
pin.setTitle(getString(R.string.unpin_tag));
|
|
|
|
|
|
|
|
pin.setIcon(R.drawable.tag_pin);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
} else {
|
|
|
|
pin.setVisible(false);
|
|
|
|
pin.setVisible(false);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (followedTag && follow != null) {
|
|
|
|
if (followedTag != null) {
|
|
|
|
|
|
|
|
follow.setVisible(true);
|
|
|
|
|
|
|
|
if (followedTag) {
|
|
|
|
|
|
|
|
follow.setTitle(getString(R.string.unfollow_tag));
|
|
|
|
|
|
|
|
follow.setIcon(R.drawable.tag_unfollow);
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
follow.setTitle(getString(R.string.follow_tag));
|
|
|
|
|
|
|
|
follow.setIcon(R.drawable.tag_follow);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
} else {
|
|
|
|
follow.setVisible(false);
|
|
|
|
follow.setVisible(false);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
mute.setVisible(!mutedTag);
|
|
|
|
if (mutedTag != null) {
|
|
|
|
|
|
|
|
mute.setVisible(true);
|
|
|
|
|
|
|
|
if (mutedTag) {
|
|
|
|
|
|
|
|
mute.setTitle(getString(R.string.unmute_tag_action));
|
|
|
|
|
|
|
|
mute.setIcon(R.drawable.tag_unmuted);
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
mute.setTitle(getString(R.string.mute_tag_action));
|
|
|
|
|
|
|
|
mute.setIcon(R.drawable.tag_muted);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
mute.setVisible(false);
|
|
|
|
|
|
|
|
}
|
|
|
|
return super.onCreateOptionsMenu(menu);
|
|
|
|
return super.onCreateOptionsMenu(menu);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|