summaryrefslogtreecommitdiffstats
path: root/app/src/main/java/app/fedilab/android/activities
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/app/fedilab/android/activities')
-rw-r--r--app/src/main/java/app/fedilab/android/activities/BaseActivity.java9
-rw-r--r--app/src/main/java/app/fedilab/android/activities/BaseAlertDialogActivity.java9
-rw-r--r--app/src/main/java/app/fedilab/android/activities/BaseBarActivity.java9
-rw-r--r--app/src/main/java/app/fedilab/android/activities/BaseTransparentActivity.java9
-rw-r--r--app/src/main/java/app/fedilab/android/activities/ComposeActivity.java17
-rw-r--r--app/src/main/java/app/fedilab/android/activities/ContextActivity.java123
-rw-r--r--app/src/main/java/app/fedilab/android/activities/HashTagActivity.java274
-rw-r--r--app/src/main/java/app/fedilab/android/activities/LoginActivity.java29
-rw-r--r--app/src/main/java/app/fedilab/android/activities/ProfileActivity.java52
-rw-r--r--app/src/main/java/app/fedilab/android/activities/SettingsActivity.java57
-rw-r--r--app/src/main/java/app/fedilab/android/activities/SettingsActivity.kt56
11 files changed, 443 insertions, 201 deletions
diff --git a/app/src/main/java/app/fedilab/android/activities/BaseActivity.java b/app/src/main/java/app/fedilab/android/activities/BaseActivity.java
index 2f2b870f8..e7ba4af89 100644
--- a/app/src/main/java/app/fedilab/android/activities/BaseActivity.java
+++ b/app/src/main/java/app/fedilab/android/activities/BaseActivity.java
@@ -19,8 +19,11 @@ import android.annotation.SuppressLint;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.Configuration;
+import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
+import android.view.Window;
+import android.view.WindowManager;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
@@ -81,6 +84,9 @@ public class BaseActivity extends AppCompatActivity {
break;
case "BLACK":
setTheme(R.style.BlackAppTheme);
+ Window window = getWindow();
+ window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
+ window.setStatusBarColor(Color.BLACK);
currentThemeId = R.style.BlackAppTheme;
break;
case "DRACULA":
@@ -115,6 +121,9 @@ public class BaseActivity extends AppCompatActivity {
case "BLACK":
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
setTheme(R.style.BlackAppTheme);
+ Window window = getWindow();
+ window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
+ window.setStatusBarColor(Color.BLACK);
currentThemeId = R.style.BlackAppTheme;
break;
case "DRACULA":
diff --git a/app/src/main/java/app/fedilab/android/activities/BaseAlertDialogActivity.java b/app/src/main/java/app/fedilab/android/activities/BaseAlertDialogActivity.java
index 48b51a25b..734121bf5 100644
--- a/app/src/main/java/app/fedilab/android/activities/BaseAlertDialogActivity.java
+++ b/app/src/main/java/app/fedilab/android/activities/BaseAlertDialogActivity.java
@@ -19,8 +19,11 @@ import android.annotation.SuppressLint;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.Configuration;
+import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
+import android.view.Window;
+import android.view.WindowManager;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
@@ -74,6 +77,9 @@ public class BaseAlertDialogActivity extends AppCompatActivity {
setTheme(R.style.SolarizedAlertDialog);
break;
case "BLACK":
+ Window window = getWindow();
+ window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
+ window.setStatusBarColor(Color.BLACK);
setTheme(R.style.BlackAlertDialog);
break;
case "DRACULA":
@@ -102,6 +108,9 @@ public class BaseAlertDialogActivity extends AppCompatActivity {
break;
case "BLACK":
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
+ Window window = getWindow();
+ window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
+ window.setStatusBarColor(Color.BLACK);
setTheme(R.style.BlackAlertDialog);
break;
case "DRACULA":
diff --git a/app/src/main/java/app/fedilab/android/activities/BaseBarActivity.java b/app/src/main/java/app/fedilab/android/activities/BaseBarActivity.java
index e8f0111e4..2776d2ec2 100644
--- a/app/src/main/java/app/fedilab/android/activities/BaseBarActivity.java
+++ b/app/src/main/java/app/fedilab/android/activities/BaseBarActivity.java
@@ -19,8 +19,11 @@ import android.annotation.SuppressLint;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.Configuration;
+import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
+import android.view.Window;
+import android.view.WindowManager;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
@@ -73,6 +76,9 @@ public class BaseBarActivity extends AppCompatActivity {
setTheme(R.style.SolarizedAppThemeBar);
break;
case "BLACK":
+ Window window = getWindow();
+ window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
+ window.setStatusBarColor(Color.BLACK);
setTheme(R.style.BlackAppThemeBar);
break;
case "DRACULA":
@@ -102,6 +108,9 @@ public class BaseBarActivity extends AppCompatActivity {
break;
case "BLACK":
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
+ Window window = getWindow();
+ window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
+ window.setStatusBarColor(Color.BLACK);
setTheme(R.style.BlackAppThemeBar);
break;
case "DRACULA":
diff --git a/app/src/main/java/app/fedilab/android/activities/BaseTransparentActivity.java b/app/src/main/java/app/fedilab/android/activities/BaseTransparentActivity.java
index 77f2df730..0f2668649 100644
--- a/app/src/main/java/app/fedilab/android/activities/BaseTransparentActivity.java
+++ b/app/src/main/java/app/fedilab/android/activities/BaseTransparentActivity.java
@@ -19,8 +19,11 @@ import android.annotation.SuppressLint;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.Configuration;
+import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
+import android.view.Window;
+import android.view.WindowManager;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
@@ -73,6 +76,9 @@ public class BaseTransparentActivity extends AppCompatActivity {
setTheme(R.style.TransparentSolarized);
break;
case "BLACK":
+ Window window = getWindow();
+ window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
+ window.setStatusBarColor(Color.BLACK);
setTheme(R.style.TransparentBlack);
break;
case "DRACULA":
@@ -102,6 +108,9 @@ public class BaseTransparentActivity extends AppCompatActivity {
break;
case "BLACK":
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
+ Window window = getWindow();
+ window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
+ window.setStatusBarColor(Color.BLACK);
setTheme(R.style.TransparentBlack);
break;
case "DRACULA":
diff --git a/app/src/main/java/app/fedilab/android/activities/ComposeActivity.java b/app/src/main/java/app/fedilab/android/activities/ComposeActivity.java
index c9cedf5b8..1688d292e 100644
--- a/app/src/main/java/app/fedilab/android/activities/ComposeActivity.java
+++ b/app/src/main/java/app/fedilab/android/activities/ComposeActivity.java
@@ -402,8 +402,8 @@ public class ComposeActivity extends BaseActivity implements ComposeAdapter.Mana
return true;
}
- private void onRetrieveContact(PopupContactBinding binding, List<app.fedilab.android.client.entities.api.Account> accounts) {
- binding.loader.setVisibility(View.GONE);
+ private void onRetrieveContact(PopupContactBinding popupContactBinding, List<app.fedilab.android.client.entities.api.Account> accounts) {
+ popupContactBinding.loader.setVisibility(View.GONE);
if (accounts == null) {
accounts = new ArrayList<>();
}
@@ -413,8 +413,9 @@ public class ComposeActivity extends BaseActivity implements ComposeAdapter.Mana
checkedValues.add(composeAdapter.getLastComposeContent().contains("@" + account.acct));
}
AccountsReplyAdapter contactAdapter = new AccountsReplyAdapter(contacts, checkedValues);
- binding.lvAccountsSearch.setAdapter(contactAdapter);
- binding.lvAccountsSearch.setLayoutManager(new LinearLayoutManager(ComposeActivity.this));
+ contactAdapter.actionDone = ComposeActivity.this;
+ popupContactBinding.lvAccountsSearch.setAdapter(contactAdapter);
+ popupContactBinding.lvAccountsSearch.setLayoutManager(new LinearLayoutManager(ComposeActivity.this));
}
@Override
@@ -869,10 +870,14 @@ public class ComposeActivity extends BaseActivity implements ComposeAdapter.Mana
private boolean canBeSent(StatusDraft statusDraft) {
- if (statusDraft == null || statusDraft.statusDraftList == null || statusDraft.statusDraftList.isEmpty()) {
+ if (statusDraft == null) {
+ return false;
+ }
+ List<Status> statuses = statusDraft.statusDraftList;
+ if (statuses == null || statuses.size() == 0) {
return false;
}
- Status statusCheck = statusDraft.statusDraftList.get(0);
+ Status statusCheck = statuses.get(0);
if (statusCheck == null) {
return false;
}
diff --git a/app/src/main/java/app/fedilab/android/activities/ContextActivity.java b/app/src/main/java/app/fedilab/android/activities/ContextActivity.java
index 243e90b07..5a87a62de 100644
--- a/app/src/main/java/app/fedilab/android/activities/ContextActivity.java
+++ b/app/src/main/java/app/fedilab/android/activities/ContextActivity.java
@@ -18,6 +18,7 @@ package app.fedilab.android.activities;
import static app.fedilab.android.BaseMainActivity.currentAccount;
import static app.fedilab.android.ui.drawer.StatusAdapter.sendAction;
+import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Resources;
import android.os.Bundle;
@@ -33,6 +34,9 @@ import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;
import androidx.preference.PreferenceManager;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
import app.fedilab.android.BaseMainActivity;
import app.fedilab.android.R;
import app.fedilab.android.client.entities.api.Status;
@@ -43,19 +47,22 @@ import app.fedilab.android.helper.Helper;
import app.fedilab.android.helper.MastodonHelper;
import app.fedilab.android.ui.fragment.timeline.FragmentMastodonContext;
import app.fedilab.android.viewmodel.mastodon.StatusesVM;
+import es.dmoral.toasty.Toasty;
-public class ContextActivity extends BaseActivity {
+public class ContextActivity extends BaseActivity implements FragmentMastodonContext.FirstMessage {
public static boolean expand;
public static boolean displayCW;
public static Resources.Theme theme;
Fragment currentFragment;
+ private Status firstMessage;
+ private String remote_instance;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- app.fedilab.android.databinding.ActivityConversationBinding binding = ActivityConversationBinding.inflate(getLayoutInflater());
+ ActivityConversationBinding binding = ActivityConversationBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
setSupportActionBar(binding.toolbar);
ActionBar actionBar = getSupportActionBar();
@@ -75,8 +82,10 @@ public class ContextActivity extends BaseActivity {
Bundle b = getIntent().getExtras();
displayCW = sharedpreferences.getBoolean(getString(R.string.SET_EXPAND_CW), false);
Status focusedStatus = null; // or other values
- if (b != null)
+ if (b != null) {
focusedStatus = (Status) b.getSerializable(Helper.ARG_STATUS);
+ remote_instance = b.getString(Helper.ARG_REMOTE_INSTANCE, null);
+ }
if (focusedStatus == null || currentAccount == null || currentAccount.mastodon_account == null) {
finish();
return;
@@ -84,29 +93,34 @@ public class ContextActivity extends BaseActivity {
MastodonHelper.loadPPMastodon(binding.profilePicture, currentAccount.mastodon_account);
Bundle bundle = new Bundle();
bundle.putSerializable(Helper.ARG_STATUS, focusedStatus);
- currentFragment = Helper.addFragment(getSupportFragmentManager(), R.id.nav_host_fragment_content_main, new FragmentMastodonContext(), bundle, null, null);
- StatusesVM timelinesVM = new ViewModelProvider(ContextActivity.this).get(StatusesVM.class);
- timelinesVM.getStatus(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, focusedStatus.id).observe(ContextActivity.this, status -> {
- if (status != null) {
- StatusCache statusCache = new StatusCache();
- statusCache.instance = BaseMainActivity.currentInstance;
- statusCache.user_id = BaseMainActivity.currentUserID;
- statusCache.status = status;
- statusCache.status_id = status.id;
- //Update cache
- new Thread(() -> {
- try {
- new StatusCache(getApplication()).updateIfExists(statusCache);
- Handler mainHandler = new Handler(Looper.getMainLooper());
- //Update UI
- Runnable myRunnable = () -> sendAction(ContextActivity.this, Helper.ARG_STATUS_ACTION, status, null);
- mainHandler.post(myRunnable);
- } catch (DBException e) {
- e.printStackTrace();
- }
- }).start();
- }
- });
+ bundle.putString(Helper.ARG_REMOTE_INSTANCE, remote_instance);
+ FragmentMastodonContext fragmentMastodonContext = new FragmentMastodonContext();
+ fragmentMastodonContext.firstMessage = this;
+ currentFragment = Helper.addFragment(getSupportFragmentManager(), R.id.nav_host_fragment_content_main, fragmentMastodonContext, bundle, null, null);
+ if (remote_instance == null) {
+ StatusesVM timelinesVM = new ViewModelProvider(ContextActivity.this).get(StatusesVM.class);
+ timelinesVM.getStatus(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, focusedStatus.id).observe(ContextActivity.this, status -> {
+ if (status != null) {
+ StatusCache statusCache = new StatusCache();
+ statusCache.instance = BaseMainActivity.currentInstance;
+ statusCache.user_id = BaseMainActivity.currentUserID;
+ statusCache.status = status;
+ statusCache.status_id = status.id;
+ //Update cache
+ new Thread(() -> {
+ try {
+ new StatusCache(getApplication()).updateIfExists(statusCache);
+ Handler mainHandler = new Handler(Looper.getMainLooper());
+ //Update UI
+ Runnable myRunnable = () -> sendAction(ContextActivity.this, Helper.ARG_STATUS_ACTION, status, null);
+ mainHandler.post(myRunnable);
+ } catch (DBException e) {
+ e.printStackTrace();
+ }
+ }).start();
+ }
+ });
+ }
}
@@ -126,6 +140,18 @@ public class ContextActivity extends BaseActivity {
} else {
itemDisplayCW.setIcon(R.drawable.ic_outline_remove_red_eye_24);
}
+ MenuItem action_remote = menu.findItem(R.id.action_remote);
+ if (remote_instance != null) {
+ action_remote.setVisible(false);
+ } else {
+ if (firstMessage != null && !firstMessage.visibility.equalsIgnoreCase("direct") && !firstMessage.visibility.equalsIgnoreCase("private")) {
+ Pattern pattern = Helper.statusIdInUrl;
+ Matcher matcher = pattern.matcher(firstMessage.uri);
+ action_remote.setVisible(matcher.find());
+ } else {
+ action_remote.setVisible(false);
+ }
+ }
return true;
}
@@ -151,8 +177,53 @@ public class ContextActivity extends BaseActivity {
((FragmentMastodonContext) currentFragment).refresh();
}
invalidateOptionsMenu();
+ } else if (item.getItemId() == R.id.action_remote) {
+
+ if (firstMessage == null) {
+ Toasty.warning(ContextActivity.this, getString(R.string.toast_try_later), Toasty.LENGTH_SHORT).show();
+ return true;
+ }
+ if (firstMessage.account.acct != null) {
+ String[] splitAcct = firstMessage.account.acct.split("@");
+ String instance;
+ if (splitAcct.length > 1) {
+ instance = splitAcct[1];
+ } else {
+ Toasty.info(ContextActivity.this, getString(R.string.toast_on_your_instance), Toasty.LENGTH_SHORT).show();
+ return true;
+ }
+ Pattern pattern = Helper.statusIdInUrl;
+ Matcher matcher = pattern.matcher(firstMessage.uri);
+ String remoteId = null;
+ if (matcher.find()) {
+ remoteId = matcher.group(1);
+ }
+ if (remoteId != null) {
+ StatusesVM statusesVM = new ViewModelProvider(ContextActivity.this).get(StatusesVM.class);
+ statusesVM.getStatus(instance, null, remoteId).observe(ContextActivity.this, status -> {
+ if (status != null) {
+ Intent intentContext = new Intent(ContextActivity.this, ContextActivity.class);
+ intentContext.putExtra(Helper.ARG_STATUS, status);
+ intentContext.putExtra(Helper.ARG_REMOTE_INSTANCE, instance);
+ intentContext.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ startActivity(intentContext);
+ } else {
+ Toasty.warning(ContextActivity.this, getString(R.string.toast_error_fetch_message), Toasty.LENGTH_SHORT).show();
+ }
+ });
+ } else {
+ Toasty.warning(ContextActivity.this, getString(R.string.toast_error_fetch_message), Toasty.LENGTH_SHORT).show();
+ }
+ } else {
+ Toasty.warning(ContextActivity.this, getString(R.string.toast_error_fetch_message), Toasty.LENGTH_SHORT).show();
+ }
}
return true;
}
+ @Override
+ public void get(Status status) {
+ firstMessage = status;
+ invalidateOptionsMenu();
+ }
} \ No newline at end of file
diff --git a/app/src/main/java/app/fedilab/android/activities/HashTagActivity.java b/app/src/main/java/app/fedilab/android/activities/HashTagActivity.java
index d2b5d1c97..7bf49af50 100644
--- a/app/src/main/java/app/fedilab/android/activities/HashTagActivity.java
+++ b/app/src/main/java/app/fedilab/android/activities/HashTagActivity.java
@@ -26,6 +26,7 @@ import android.view.MenuItem;
import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBar;
+import androidx.appcompat.app.AlertDialog;
import androidx.lifecycle.ViewModelProvider;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
@@ -56,11 +57,15 @@ public class HashTagActivity extends BaseActivity {
public static int position;
private String tag;
- private boolean pinnedTag;
- private boolean followedTag;
- private boolean mutedTag;
+ private String stripTag;
+ private Boolean pinnedTag;
+ private Boolean followedTag;
+ private Boolean mutedTag;
private TagVM tagVM;
private Filter fedilabFilter;
+ private Filter.KeywordsAttributes keyword;
+ private PinnedTimeline pinnedTimeline;
+ private Pinned pinned;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -75,9 +80,10 @@ public class HashTagActivity extends BaseActivity {
}
if (tag == null)
finish();
- pinnedTag = false;
- followedTag = false;
- mutedTag = false;
+ pinnedTag = null;
+ followedTag = null;
+ mutedTag = null;
+ stripTag = tag.replaceAll("#", "");
setSupportActionBar(binding.toolbar);
ActionBar actionBar = getSupportActionBar();
//Remove title
@@ -91,7 +97,7 @@ public class HashTagActivity extends BaseActivity {
}
tagVM = new ViewModelProvider(HashTagActivity.this).get(TagVM.class);
- tagVM.getTag(MainActivity.currentInstance, MainActivity.currentToken, tag).observe(this, returnedTag -> {
+ tagVM.getTag(MainActivity.currentInstance, MainActivity.currentToken, stripTag).observe(this, returnedTag -> {
if (returnedTag != null) {
followedTag = returnedTag.following;
invalidateOptionsMenu();
@@ -100,19 +106,24 @@ public class HashTagActivity extends BaseActivity {
ReorderVM reorderVM = new ViewModelProvider(HashTagActivity.this).get(ReorderVM.class);
reorderVM.getAllPinned().observe(HashTagActivity.this, pinned -> {
if (pinned != null) {
+ this.pinned = pinned;
+ pinnedTag = false;
if (pinned.pinnedTimelines != null) {
for (PinnedTimeline pinnedTimeline : pinned.pinnedTimelines) {
if (pinnedTimeline.tagTimeline != null) {
- if (pinnedTimeline.tagTimeline.name.equalsIgnoreCase(tag)) {
+ if (pinnedTimeline.tagTimeline.name.equalsIgnoreCase(stripTag)) {
+ this.pinnedTimeline = pinnedTimeline;
pinnedTag = true;
- invalidateOptionsMenu();
+ break;
}
}
}
+ invalidateOptionsMenu();
}
}
});
if (MainActivity.filterFetched && MainActivity.mainFilters != null) {
+ mutedTag = false;
for (Filter filter : MainActivity.mainFilters) {
if (filter.title.equalsIgnoreCase(Helper.FEDILAB_MUTED_HASHTAGS)) {
fedilabFilter = filter;
@@ -120,17 +131,14 @@ public class HashTagActivity extends BaseActivity {
for (Filter.KeywordsAttributes keywordsAttributes : filter.keywords) {
if (fetch.equalsIgnoreCase(keywordsAttributes.keyword)) {
mutedTag = true;
+ keyword = keywordsAttributes;
invalidateOptionsMenu();
break;
}
}
- mutedTag = false;
- invalidateOptionsMenu();
- break;
}
}
- } else {
- mutedTag = true;
+ invalidateOptionsMenu();
}
Bundle bundle = new Bundle();
@@ -141,12 +149,12 @@ public class HashTagActivity extends BaseActivity {
Intent intentToot = new Intent(HashTagActivity.this, ComposeActivity.class);
StatusDraft statusDraft = new StatusDraft();
Status status = new Status();
- status.text = "#" + tag;
+ status.text = "#" + stripTag;
List<Status> statuses = new ArrayList<>();
statuses.add(status);
statusDraft.statusDraftList = statuses;
Bundle _b = new Bundle();
- _b.putSerializable(Helper.ARG_TAG_TIMELINE, statusDraft);
+ _b.putSerializable(Helper.ARG_STATUS_DRAFT, statusDraft);
intentToot.putExtras(_b);
startActivity(intentToot);
});
@@ -158,89 +166,125 @@ public class HashTagActivity extends BaseActivity {
finish();
return true;
} else if (item.getItemId() == R.id.action_add_timeline) {
- new Thread(() -> {
- try {
- Pinned pinned = new Pinned(HashTagActivity.this).getPinned(currentAccount);
- boolean canBeAdded = true;
- boolean update = true;
- if (pinned == null) {
- pinned = new Pinned();
- pinned.pinnedTimelines = new ArrayList<>();
- update = false;
- } else {
- for (PinnedTimeline pinnedTimeline : pinned.pinnedTimelines) {
- if (pinnedTimeline.type == Timeline.TimeLineEnum.TAG) {
- if (pinnedTimeline.tagTimeline.name.compareTo(tag.trim()) == 0) {
- canBeAdded = false;
- }
- }
- }
- }
- if (!canBeAdded) {
- Handler mainHandler = new Handler(Looper.getMainLooper());
- Runnable myRunnable = () -> Toasty.warning(HashTagActivity.this, getString(R.string.tags_already_stored), Toasty.LENGTH_SHORT).show();
- mainHandler.post(myRunnable);
- return;
- }
- PinnedTimeline pinnedTimeline = new PinnedTimeline();
- pinnedTimeline.type = Timeline.TimeLineEnum.TAG;
- pinnedTimeline.position = pinned.pinnedTimelines.size();
- pinnedTimeline.displayed = true;
- TagTimeline tagTimeline = new TagTimeline();
- tagTimeline.name = tag.trim();
- tagTimeline.isNSFW = false;
- tagTimeline.isART = false;
- pinnedTimeline.tagTimeline = tagTimeline;
- pinned.pinnedTimelines.add(pinnedTimeline);
- if (update) {
+
+ 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);
- } else {
- new Pinned(HashTagActivity.this).insertPinned(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);
- pinnedTag = true;
- invalidateOptionsMenu();
- } catch (DBException e) {
- e.printStackTrace();
- }
- }).start();
+ dialog.dismiss();
+ });
+ unpinConfirm.show();
+ } else {
+ new Thread(() -> {
+ try {
+ Pinned pinned = new Pinned(HashTagActivity.this).getPinned(currentAccount);
+ boolean canBeAdded = true;
+ boolean update = true;
+ if (pinned == null) {
+ pinned = new Pinned();
+ pinned.pinnedTimelines = new ArrayList<>();
+ update = false;
+ } else {
+ for (PinnedTimeline pinnedTimeline : pinned.pinnedTimelines) {
+ if (pinnedTimeline.type == Timeline.TimeLineEnum.TAG) {
+ if (pinnedTimeline.tagTimeline.name.compareTo(stripTag.trim()) == 0) {
+ canBeAdded = false;
+ }
+ }
+ }
+ }
+ if (!canBeAdded) {
+ Handler mainHandler = new Handler(Looper.getMainLooper());
+ Runnable myRunnable = () -> Toasty.warning(HashTagActivity.this, getString(R.string.tags_already_stored), Toasty.LENGTH_SHORT).show();
+ mainHandler.post(myRunnable);
+ return;
+ }
+ pinnedTimeline = new PinnedTimeline();
+ pinnedTimeline.type = Timeline.TimeLineEnum.TAG;
+ pinnedTimeline.position = pinned.pinnedTimelines.size();
+ pinnedTimeline.displayed = true;
+ TagTimeline tagTimeline = new TagTimeline();
+ tagTimeline.name = stripTag.trim();
+ tagTimeline.isNSFW = false;
+ tagTimeline.isART = false;
+ pinnedTimeline.tagTimeline = tagTimeline;
+ pinned.pinnedTimelines.add(pinnedTimeline);
+ if (update) {
+ new Pinned(HashTagActivity.this).updatePinned(pinned);
+ } else {
+ new Pinned(HashTagActivity.this).insertPinned(pinned);
+ }
+ 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);
+ pinnedTag = true;
+ invalidateOptionsMenu();
+ } catch (DBException e) {
+ e.printStackTrace();
+ }
+ }).start();
+ }
} else if (item.getItemId() == R.id.action_follow_tag) {
- tagVM.follow(MainActivity.currentInstance, MainActivity.currentToken, tag).observe(this, returnedTag -> {
- if (returnedTag != null) {
- followedTag = returnedTag.following;
- invalidateOptionsMenu();
- }
- });
+ if (!followedTag) {
+ tagVM.follow(MainActivity.currentInstance, MainActivity.currentToken, stripTag).observe(this, returnedTag -> {
+ if (returnedTag != null) {
+ followedTag = returnedTag.following;
+ invalidateOptionsMenu();
+ }
+ });
+ } else {
+ tagVM.unfollow(MainActivity.currentInstance, MainActivity.currentToken, stripTag).observe(this, returnedTag -> {
+ if (returnedTag != null) {
+ followedTag = returnedTag.following;
+ invalidateOptionsMenu();
+ }
+ });
+ }
} else if (item.getItemId() == R.id.action_mute) {
- if (MainActivity.mainFilters == null || fedilabFilter == null) {
- MainActivity.mainFilters = new ArrayList<>();
- Filter.FilterParams filterParams = new Filter.FilterParams();
- filterParams.title = Helper.FEDILAB_MUTED_HASHTAGS;
- filterParams.filter_action = "hide";
- filterParams.context = new ArrayList<>();
- filterParams.context.add("home");
- filterParams.context.add("public");
- filterParams.context.add("thread");
- filterParams.context.add("account");
- String finalTag = tag;
- FiltersVM filtersVM = new ViewModelProvider(HashTagActivity.this).get(FiltersVM.class);
- filtersVM.addFilter(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, filterParams)
- .observe(HashTagActivity.this, filter -> {
- if (filter != null) {
- MainActivity.mainFilters.add(filter);
- mutedTag = false;
- fedilabFilter = filter;
- muteTags();
- invalidateOptionsMenu();
- }
- });
+ if (!mutedTag) {
+ if (MainActivity.mainFilters == null || fedilabFilter == null) {
+ MainActivity.mainFilters = new ArrayList<>();
+ Filter.FilterParams filterParams = new Filter.FilterParams();
+ filterParams.title = Helper.FEDILAB_MUTED_HASHTAGS;
+ filterParams.filter_action = "hide";
+ filterParams.context = new ArrayList<>();
+ filterParams.context.add("home");
+ filterParams.context.add("public");
+ filterParams.context.add("thread");
+ filterParams.context.add("account");
+ FiltersVM filtersVM = new ViewModelProvider(HashTagActivity.this).get(FiltersVM.class);
+ filtersVM.addFilter(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, filterParams)
+ .observe(HashTagActivity.this, filter -> {
+ if (filter != null) {
+ MainActivity.mainFilters.add(filter);
+ mutedTag = false;
+ fedilabFilter = filter;
+ muteTags();
+ invalidateOptionsMenu();
+ }
+ });
+ } else {
+ muteTags();
+ }
} else {
- muteTags();
+ unmuteTags();
}
}
@@ -249,6 +293,24 @@ public