added option to show local timelines (Mastodon)

This commit is contained in:
nuclearfog 2023-02-04 17:06:09 +01:00
parent 3a8e2a3381
commit b07e944ecd
No known key found for this signature in database
GPG Key ID: 03488A185C476379
7 changed files with 52 additions and 8 deletions

View File

@ -348,6 +348,7 @@ public class Mastodon implements Connection {
@Override
public List<Status> searchStatuses(String search, long minId, long maxId) throws MastodonException {
List<String> params = new ArrayList<>();
params.add("local=" + settings.useLocalTimeline());
if (search.matches("#\\S+")) {
return getStatuses(ENDPOINT_HASHTAG_TIMELINE + search.substring(1), params, minId, maxId);
} else {
@ -361,6 +362,7 @@ public class Mastodon implements Connection {
@Override
public List<Status> getPublicTimeline(long minId, long maxId) throws MastodonException {
List<String> params = new ArrayList<>();
params.add("local=" + settings.useLocalTimeline());
return getStatuses(ENDPOINT_PUBLIC_TIMELINE, params, minId, maxId);
}

View File

@ -96,18 +96,19 @@ public class GlobalSettings {
private static final String ENABLE_LIKE = "like_enable";
private static final String ENABLE_TWITTER_ALT = "twitter_alt_set";
private static final String FILTER_RESULTS = "filter_results";
private static final String MASTODON_LOCAL_TIMELINE = "mastodon_local_timeline";
// current login preferences
private static final String LOGGED_IN = "login";
private static final String CURRENT_ID = "userID";
private static final String OAUTH_TOKEN = "key1";
private static final String OAUTH_SECRET = "key2";
private static final String CONSUMER_TOKEN = "api_key1";
private static final String CONSUMER_SECRET = "api_key2";
private static final String BEARER_TOKEN = "bearer";
private static final String CURRENT_API = "current_api_id";
private static final String HOSTNAME = "mastodon_host";
// login specific preference names
private static final String LOGGED_IN = "login";
private static final String CURRENT_ID = "userID";
private static final String OAUTH_TOKEN = "key1";
private static final String OAUTH_SECRET = "key2";
// file name of the preferences
private static final String APP_SETTINGS = "settings";
@ -144,6 +145,7 @@ public class GlobalSettings {
private boolean filterResults;
private boolean enableLike;
private boolean twitterAlt;
private boolean localOnly;
private int background_color;
private int font_color;
private int highlight_color;
@ -666,6 +668,27 @@ public class GlobalSettings {
initLogin();
}
/**
* use public Mastodon timeline of the local server only
*
* @return true to use local timeline only
*/
public boolean useLocalTimeline() {
return localOnly;
}
/**
* set public Mastodon timeline
*
* @param enable true to use local timeline only
*/
public void setLocalTimeline(boolean enable) {
localOnly = enable;
Editor edit = settings.edit();
edit.putBoolean(MASTODON_LOCAL_TIMELINE, enable);
edit.apply();
}
/**
* set proxy address
*
@ -946,6 +969,7 @@ public class GlobalSettings {
filterResults = settings.getBoolean(FILTER_RESULTS, true);
enableLike = settings.getBoolean(ENABLE_LIKE, false);
twitterAlt = settings.getBoolean(ENABLE_TWITTER_ALT, false);
localOnly = settings.getBoolean(MASTODON_LOCAL_TIMELINE, false);
proxyHost = settings.getString(PROXY_ADDR, "");
proxyPort = settings.getString(PROXY_PORT, "");
proxyUser = settings.getString(PROXY_USER, "");

View File

@ -30,6 +30,7 @@ import com.google.android.material.tabs.TabLayout.OnTabSelectedListener;
import com.google.android.material.tabs.TabLayout.Tab;
import org.nuclearfog.twidda.R;
import org.nuclearfog.twidda.config.Configuration;
import org.nuclearfog.twidda.ui.adapter.FragmentAdapter;
import org.nuclearfog.twidda.backend.api.ConnectionException;
import org.nuclearfog.twidda.backend.async.LinkLoader;
@ -156,7 +157,10 @@ public class MainActivity extends AppCompatActivity implements ActivityResultCal
getMenuInflater().inflate(R.menu.home, m);
AppStyles.setMenuIconColor(m, settings.getIconColor());
MenuItem search = m.findItem(R.id.menu_search);
MenuItem localTl = m.findItem(R.id.menu_local_timeline);
SearchView searchView = (SearchView) search.getActionView();
localTl.setVisible(settings.getLogin().getConfiguration() == Configuration.MASTODON);
localTl.setChecked(settings.useLocalTimeline());
searchView.setOnQueryTextListener(this);
return super.onCreateOptionsMenu(m);
}
@ -195,6 +199,13 @@ public class MainActivity extends AppCompatActivity implements ActivityResultCal
Intent accountManager = new Intent(this, AccountActivity.class);
activityResultLauncher.launch(accountManager);
}
// enable disable Mastodon local timeline
else if (item.getItemId() == R.id.menu_local_timeline) {
boolean toggle = !settings.useLocalTimeline();
settings.setLocalTimeline(toggle);
adapter.notifySettingsChanged();
item.setChecked(toggle);
}
return super.onOptionsItemSelected(item);
}

View File

@ -134,7 +134,7 @@ public class SearchActivity extends AppCompatActivity implements OnTabSelectedLi
}
// enable/disable search filter
else if (item.getItemId() == R.id.search_filter) {
boolean enable = !item.isChecked();
boolean enable = !settings.filterResults();
settings.setFilterResults(enable);
item.setChecked(enable);
}

View File

@ -9,6 +9,11 @@
app:actionViewClass="androidx.appcompat.widget.SearchView"
app:showAsAction="always|collapseActionView" />
<item
android:id="@+id/menu_local_timeline"
android:title="@string/menu_show_local_timeline"
android:checkable="true" />
<item
android:id="@+id/menu_profile"
android:title="@string/menu_open_home_profile"

View File

@ -147,7 +147,7 @@
<string name="info_user_removed">%1$s von der Liste entfernt!</string>
<string name="descr_remove_user">Nutzer von der Liste entfernen</string>
<string name="menu_tweet">Status posten</string>
<string name="menu_open_home_profile">Profil</string>
<string name="menu_open_home_profile">Profil anzeigen</string>
<string name="menu_open_twitter_search">Twitter suche</string>
<string name="menu_open_settings">Einstellungen</string>
<string name="menu_create_list">erstelle Nutzerliste</string>
@ -264,4 +264,5 @@
<string name="info_missing_key">bitte Schlüssel eingeben</string>
<string name="info_missing_host">bitte gültigen Hostnamen eingeben</string>
<string name="info_missing_api_keys">Bitte API-Schlüssel hinzufügen</string>
<string name="menu_show_local_timeline">zeige lokale Timeline</string>
</resources>

View File

@ -137,6 +137,7 @@
<string name="menu_excluded_users">Blocklists</string>
<string name="menu_exclude_user">exclude user</string>
<string name="menu_search_filter">filter results</string>
<string name="menu_show_local_timeline">show local timeline</string>
<string name="menu_hint_mute_user">enter @name to mute</string>
<string name="menu_hint_block_user">enter @name to block</string>
<string name="menu_refresh_exclude">refresh exclude list</string>