added Twitter API version selector

This commit is contained in:
nuclearfog 2023-01-22 22:15:38 +01:00
parent 1dc5e532a8
commit 0c0942ee75
No known key found for this signature in database
GPG Key ID: 03488A185C476379
22 changed files with 167 additions and 74 deletions

View File

@ -106,15 +106,22 @@ public class FragmentAdapter extends FragmentStatePagerAdapter {
fragments = new ListFragment[4];
fragments[0] = new StatusFragment();
fragments[1] = new TrendFragment();
if (settings.getLogin().getApiType() == Account.API_TWITTER) {
fragments[2] = new NotificationFragment();
fragments[3] = new MessageFragment();
} else {
fragments[2] = new StatusFragment();
fragments[3] = new NotificationFragment();
Bundle parampublicTl = new Bundle();
parampublicTl.putInt(KEY_STATUS_FRAGMENT_MODE, STATUS_FRAGMENT_PUBLIC);
fragments[2].setArguments(parampublicTl);
switch (settings.getLogin().getApiType()) {
case Account.API_TWITTER_1:
case Account.API_TWITTER_2:
fragments[2] = new NotificationFragment();
fragments[3] = new MessageFragment();
break;
default:
case Account.API_MASTODON:
fragments[2] = new StatusFragment();
fragments[3] = new NotificationFragment();
Bundle parampublicTl = new Bundle();
parampublicTl.putInt(KEY_STATUS_FRAGMENT_MODE, STATUS_FRAGMENT_PUBLIC);
fragments[2].setArguments(parampublicTl);
break;
}
fragments[0].setArguments(paramHomeTl);
notifyDataSetChanged();
@ -193,12 +200,18 @@ public class FragmentAdapter extends FragmentStatePagerAdapter {
paramUserlistOwnership.putInt(KEY_FRAG_LIST_LIST_TYPE, LIST_USER_OWNS);
paramUserlistSubscription.putInt(KEY_FRAG_LIST_LIST_TYPE, LIST_USER_SUBSCR_TO);
if (settings.getLogin().getApiType() == Account.API_TWITTER) {
fragments = new ListFragment[2];
fragments[1] = new UserListFragment();
fragments[1].setArguments(paramUserlistSubscription);
} else {
fragments = new ListFragment[1];
switch (settings.getLogin().getApiType()) {
case Account.API_TWITTER_1:
case Account.API_TWITTER_2:
fragments = new ListFragment[2];
fragments[1] = new UserListFragment();
fragments[1].setArguments(paramUserlistSubscription);
break;
default:
case Account.API_MASTODON:
fragments = new ListFragment[1];
break;
}
fragments[0] = new UserListFragment();
fragments[0].setArguments(paramUserlistOwnership);
@ -222,12 +235,18 @@ public class FragmentAdapter extends FragmentStatePagerAdapter {
paramUserlistMember.putLong(KEY_FRAG_USER_ID, listId);
paramUserlistSubscriber.putLong(KEY_FRAG_USER_ID, listId);
paramUserlistSubscriber.putInt(KEY_FRAG_USER_MODE, USER_FRAG_LIST_SUBSCRIBER);
if (settings.getLogin().getApiType() == Account.API_TWITTER) {
fragments = new ListFragment[3];
fragments[2] = new UserFragment();
fragments[2].setArguments(paramUserlistSubscriber);
} else {
fragments = new ListFragment[2];
switch (settings.getLogin().getApiType()) {
case Account.API_TWITTER_1:
case Account.API_TWITTER_2:
fragments = new ListFragment[3];
fragments[2] = new UserFragment();
fragments[2].setArguments(paramUserlistSubscriber);
break;
default:
case Account.API_MASTODON:
fragments = new ListFragment[2];
break;
}
fragments[0] = new StatusFragment();
fragments[1] = new UserFragment();

View File

@ -30,7 +30,7 @@ public class OptionsAdapter extends RecyclerView.Adapter<Optionholder> implement
*/
public OptionsAdapter(GlobalSettings settings, OnOptionClickListener listener) {
// currently Twitter doesn't support vote over API
enableVote = settings.getLogin().getApiType() != Account.API_TWITTER;
enableVote = settings.getLogin().getApiType() == Account.API_MASTODON;
this.settings = settings;
this.listener = listener;
}

View File

@ -105,7 +105,7 @@ public class AccountHolder extends ViewHolder implements OnClickListener {
screenname.setText(R.string.account_user_id_prefix);
screenname.append(Long.toString(account.getId()));
}
if (account.getApiType() == Account.API_TWITTER) {
if (account.getApiType() == Account.API_TWITTER_1 || account.getApiType() == Account.API_TWITTER_2) {
screenname.append(ACCOUNT_TWITTER);
} else if (account.getApiType() == Account.API_MASTODON) {
String host = account.getHostname();

View File

@ -66,7 +66,8 @@ public class UserlistHolder extends ViewHolder implements OnClickListener {
subscriber = itemView.findViewById(R.id.item_list_subscriber);
followList = itemView.findViewById(R.id.item_list_following_indicator);
enableExtras = settings.getLogin().getApiType() == Account.API_TWITTER;
int apiType = settings.getLogin().getApiType();
enableExtras = apiType == Account.API_TWITTER_1 || apiType == Account.API_TWITTER_2;
enableImages = settings.imagesEnabled();
if (!enableExtras) {

View File

@ -67,7 +67,7 @@ public class ConnectionManager {
// select automatically
else {
Account login = settings.getLogin();
if (login.getApiType() == Account.API_TWITTER) {
if (login.getApiType() == Account.API_TWITTER_1 || login.getApiType() == Account.API_TWITTER_2) {
connection = new Twitter(context);
} else if (login.getApiType() == Account.API_MASTODON) {
connection = new Mastodon(context);

View File

@ -83,4 +83,13 @@ public class Tokens {
return TOKEN_SECRET;
return login.getConsumerSecret();
}
/**
* @return true to use Twitte rAPI v2
*/
public boolean useAPIv2() {
if (USE_DEFAULT_KEYS)
return !DISABLE_API_V2;
return settings.isTwitterV2Enabled();
}
}

View File

@ -310,7 +310,7 @@ public class Twitter implements Connection {
@Override
public Users getRepostingUsers(long tweetId, long cursor) throws TwitterException {
List<String> params = new ArrayList<>();
if (!Tokens.DISABLE_API_V2) {
if (tokens.useAPIv2()) {
String endpoint = TWEET_UNI + tweetId + "/retweeted_by";
return getUsers2(endpoint, params);
} else {
@ -327,7 +327,7 @@ public class Twitter implements Connection {
@Override
public Users getFavoritingUsers(long tweetId, long cursor) throws TwitterException {
if (!Tokens.DISABLE_API_V2) {
if (tokens.useAPIv2()) {
String endpoint = TWEET_UNI + tweetId + "/liking_users";
return getUsers2(endpoint, new ArrayList<>());
} else {
@ -625,7 +625,7 @@ public class Twitter implements Connection {
public List<Status> getStatusReplies(long id, long minId, long maxId, String... extras) throws TwitterException {
List<String> params = new ArrayList<>();
List<Status> replies = new LinkedList<>();
if (!Tokens.DISABLE_API_V2) {
if (tokens.useAPIv2()) {
params.add("query=" + StringTools.encode("conversation_id:" + id));
// Note: minId disabled! Twitter refuses API request containing minId of a tweet older than one week
List<Status> result = getTweets2(TWEET_SEARCH_2, params, 0, maxId);
@ -660,7 +660,7 @@ public class Twitter implements Connection {
List<String> params = new ArrayList<>();
params.add("id=" + id);
Status status = getTweet1(TWEET_LOOKUP, params);
if (!Tokens.DISABLE_API_V2) {
if (tokens.useAPIv2()) {
try {
params.clear();
return getTweet2(TWEET2_LOOKUP + id, params, status);

View File

@ -18,6 +18,7 @@ public class TwitterAccount implements Account {
private static final String TWITTER_HOST = "https://twitter.com";
private long date;
private int type;
private String oauthToken, oauthSecret;
private String consumerToken, consumerSecret;
@ -47,6 +48,7 @@ public class TwitterAccount implements Account {
this.consumerSecret = consumerSecret;
this.user = user;
date = System.currentTimeMillis();
type = API_TWITTER_1;
}
@ -106,7 +108,7 @@ public class TwitterAccount implements Account {
@Override
public int getApiType() {
return Account.API_TWITTER;
return type;
}
@ -129,4 +131,11 @@ public class TwitterAccount implements Account {
return false;
return user.equals(((Account) obj).getUser());
}
/**
* override API version
*/
public void enableV2() {
type = API_TWITTER_2;
}
}

View File

@ -7,6 +7,7 @@ import androidx.annotation.Nullable;
import org.nuclearfog.twidda.backend.api.Connection;
import org.nuclearfog.twidda.backend.api.ConnectionException;
import org.nuclearfog.twidda.backend.api.ConnectionManager;
import org.nuclearfog.twidda.backend.api.twitter.impl.TwitterAccount;
import org.nuclearfog.twidda.database.AppDatabase;
import org.nuclearfog.twidda.database.GlobalSettings;
import org.nuclearfog.twidda.model.Account;
@ -35,12 +36,17 @@ public class LoginAction extends AsyncTask<String, Void, String> {
/**
* use Twitter account to login
*/
public static final int LOGIN_TWITTER = 10;
public static final int LOGIN_TWITTER_1 = 10;
/**
* use Twitter account to login
*/
public static final int LOGIN_TWITTER_2 = 11;
/**
* use Mastodon account to login
*/
public static final int LOGIN_MASTODON = 11;
public static final int LOGIN_MASTODON = 20;
private WeakReference<LoginActivity> weakRef;
private AppDatabase database;
@ -49,7 +55,7 @@ public class LoginAction extends AsyncTask<String, Void, String> {
@Nullable
private ConnectionException exception;
private int mode;
private int mode, network;
/**
* Account to twitter with PIN
@ -64,8 +70,9 @@ public class LoginAction extends AsyncTask<String, Void, String> {
database = new AppDatabase(activity);
settings = GlobalSettings.getInstance(activity);
this.mode = mode;
this.network = network;
if (network == LOGIN_TWITTER) {
if (network == LOGIN_TWITTER_1 || network == LOGIN_TWITTER_2) {
connection = ConnectionManager.get(activity, ConnectionManager.SELECT_TWITTER);
} else if (network == LOGIN_MASTODON) {
connection = ConnectionManager.get(activity, ConnectionManager.SELECT_MASTODON);
@ -91,6 +98,9 @@ public class LoginAction extends AsyncTask<String, Void, String> {
case MODE_LOGIN:
// login with pin and access token
Account account = connection.loginApp(param);
if (network == LOGIN_TWITTER_2 && account instanceof TwitterAccount) {
((TwitterAccount) account).enableV2();
}
// save new user information
database.saveLogin(account);
return "";

View File

@ -100,6 +100,7 @@ public class GlobalSettings {
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 ENABLE_V2 = "enable_twitter_v2";
private static final String HOSTNAME = "mastodon_host";
// login specific preference names
@ -144,6 +145,7 @@ public class GlobalSettings {
private boolean filterResults;
private boolean enableLike;
private boolean twitterAlt;
private boolean enableV2;
private int background_color;
private int font_color;
private int highlight_color;
@ -505,7 +507,7 @@ public class GlobalSettings {
* @return saved location information
*/
public Location getTrendLocation() {
if (account.getApiType() == Account.API_TWITTER)
if (account.getApiType() == Account.API_TWITTER_1 || account.getApiType() == Account.API_TWITTER_2)
return location;
return new LocationImpl(-1L, "");
}
@ -661,6 +663,13 @@ public class GlobalSettings {
initLogin();
}
/**
* @return true if Twitter API v2 is enabled
*/
public boolean isTwitterV2Enabled() {
return enableV2;
}
/**
* set proxy address
*
@ -866,8 +875,11 @@ public class GlobalSettings {
e.remove(HOSTNAME);
} else {
AccountImpl account = new AccountImpl(login);
enableV2 = account.getApiType() == Account.API_TWITTER_2;
this.account = account;
loggedIn = true;
// setup alternative Twitter host
if (account.getApiType() == Account.API_TWITTER && twitterAlt) {
if ((account.getApiType() == Account.API_TWITTER_1 || account.getApiType() == Account.API_TWITTER_2) && twitterAlt) {
account.setHost(TWITTER_ALT_HOST);
}
e.putString(HOSTNAME, account.getHostname());
@ -879,8 +891,7 @@ public class GlobalSettings {
e.putString(BEARER_TOKEN, account.getBearerToken());
e.putInt(CURRENT_API, account.getApiType());
e.putBoolean(LOGGED_IN, true);
this.account = account;
loggedIn = true;
e.putBoolean(ENABLE_V2, enableV2);
}
e.apply();
if (notify) {
@ -937,6 +948,7 @@ public class GlobalSettings {
filterResults = settings.getBoolean(FILTER_RESULTS, true);
enableLike = settings.getBoolean(ENABLE_LIKE, false);
twitterAlt = settings.getBoolean(ENABLE_TWITTER_ALT, false);
enableV2 = settings.getBoolean(ENABLE_V2, false);
proxyHost = settings.getString(PROXY_ADDR, "");
proxyPort = settings.getString(PROXY_PORT, "");
proxyUser = settings.getString(PROXY_USER, "");
@ -958,9 +970,9 @@ public class GlobalSettings {
String consumerSecret = settings.getString(CONSUMER_SECRET, "");
String bearerToken = settings.getString(BEARER_TOKEN, "");
String hostname = settings.getString(HOSTNAME, TWITTER_HOST);
int apiId = settings.getInt(CURRENT_API, Account.API_TWITTER);
int apiId = settings.getInt(CURRENT_API, Account.API_TWITTER_1);
long userId = settings.getLong(CURRENT_ID, 0);
if (apiId == Account.API_TWITTER && twitterAlt)
if ((apiId == Account.API_TWITTER_1 || apiId == Account.API_TWITTER_2) && twitterAlt)
hostname = TWITTER_ALT_HOST;
account = new AccountImpl(userId, oauthToken, oauthSecret, consumerToken, consumerSecret, bearerToken, hostname, apiId);
}

View File

@ -150,7 +150,7 @@ public class AccountImpl implements Account {
@Override
public boolean usingDefaultTokens() {
if (apiType != API_TWITTER)
if (apiType != API_TWITTER_1 && apiType != Account.API_TWITTER_2)
return false;
return consumerToken == null || consumerToken.isEmpty() || consumerSecret == null || consumerSecret.isEmpty();
}

View File

@ -70,12 +70,14 @@ public class UserImpl implements User {
defaultImage = (register & DEFAULT_IMAGE_MASK) != 0;
isCurrentUser = account.getId() == id;
if (account.getApiType() != Account.API_TWITTER || defaultImage || profileImageOrig.isEmpty()) {
if ((account.getApiType() != Account.API_TWITTER_1 && account.getApiType() != Account.API_TWITTER_2)
|| defaultImage || profileImageOrig.isEmpty()) {
profileImageSmall = profileImageOrig;
} else {
profileImageSmall = profileImageOrig + "_bigger";
}
if (account.getApiType() != Account.API_TWITTER || profileBannerOrig.isEmpty()) {
if ((account.getApiType() != Account.API_TWITTER_1 && account.getApiType() != Account.API_TWITTER_2)
|| profileBannerOrig.isEmpty()) {
profileBannerSmall = profileBannerOrig;
} else if (profileBannerOrig.endsWith("/1500x500")) {
profileBannerSmall = profileBannerOrig.substring(0, profileBannerOrig.length() - 9) + "/600x200";

View File

@ -13,9 +13,14 @@ import java.io.Serializable;
public interface Account extends Serializable {
/**
* API ID used for Twitter accounts
* API ID for twitter version 1.1
*/
int API_TWITTER = 1;
int API_TWITTER_1 = 1;
/**
* API ID for twitter version 2.0
*/
int API_TWITTER_2 = 3;
/**
* API ID used for Mastodon accounts
@ -69,7 +74,7 @@ public interface Account extends Serializable {
String getHostname();
/**
* @return type of the ID {@link #API_TWITTER,#API_MASTODON}
* @return type of the ID {@link #API_TWITTER_1,#API_TWITTER_2,#API_MASTODON}
*/
int getApiType();

View File

@ -185,22 +185,27 @@ public class LoginActivity extends AppCompatActivity implements OnClickListener,
}
// generate Twitter login link
else if (hostSelector.getSelectedItemId() == NetworkAdapter.ID_TWITTER) {
int network = TWITTER_V1.equals(hostname) ? LoginAction.LOGIN_TWITTER_1 : LoginAction.LOGIN_TWITTER_2;
// use user defined token keys
if (key1 != null && key2 != null) {
if (key1.trim().isEmpty() || key2.trim().isEmpty()) {
Toast.makeText(getApplicationContext(), R.string.error_empty_token, LENGTH_SHORT).show();
} else {
Toast.makeText(getApplicationContext(), R.string.info_open_twitter_login, LENGTH_LONG).show();
loginAsync = new LoginAction(this, LoginAction.LOGIN_TWITTER, LoginAction.MODE_REQUEST);
loginAsync = new LoginAction(this, network, LoginAction.MODE_REQUEST);
loginAsync.execute(key1, key2);
}
}
// use system tokens
else if (Tokens.USE_DEFAULT_KEYS) {
Toast.makeText(getApplicationContext(), R.string.info_open_twitter_login, LENGTH_LONG).show();
loginAsync = new LoginAction(this, LoginAction.LOGIN_TWITTER, LoginAction.MODE_REQUEST);
loginAsync = new LoginAction(this, network, LoginAction.MODE_REQUEST);
loginAsync.execute();
}
// no tokens are set, print error message
else {
Toast.makeText(getApplicationContext(), R.string.info_missing_api_keys, LENGTH_SHORT).show();
}
}
// generate Mastodon login
else if (hostSelector.getSelectedItemId() == NetworkAdapter.ID_MASTODON) {
@ -235,21 +240,26 @@ public class LoginActivity extends AppCompatActivity implements OnClickListener,
}
// login to Twitter
else if (hostSelector.getSelectedItemId() == NetworkAdapter.ID_TWITTER) {
int network = TWITTER_V1.equals(hostname) ? LoginAction.LOGIN_TWITTER_1 : LoginAction.LOGIN_TWITTER_2;
if (key1 != null && key2 != null) {
if (key1.trim().isEmpty() || key2.trim().isEmpty()) {
Toast.makeText(getApplicationContext(), R.string.error_empty_token, LENGTH_SHORT).show();
} else {
Toast.makeText(getApplicationContext(), R.string.info_login_to_twitter, LENGTH_LONG).show();
loginAsync = new LoginAction(this, LoginAction.LOGIN_TWITTER, LoginAction.MODE_LOGIN);
loginAsync = new LoginAction(this, network, LoginAction.MODE_LOGIN);
loginAsync.execute(loginLink, code, key1, key2);
}
}
// use system tokens
else if (Tokens.USE_DEFAULT_KEYS) {
Toast.makeText(getApplicationContext(), R.string.info_login_to_twitter, LENGTH_LONG).show();
loginAsync = new LoginAction(this, LoginAction.LOGIN_TWITTER, LoginAction.MODE_LOGIN);
loginAsync = new LoginAction(this, network, LoginAction.MODE_LOGIN);
loginAsync.execute(loginLink, code);
}
// no tokens are set
else {
Toast.makeText(getApplicationContext(), R.string.info_missing_api_keys, LENGTH_SHORT).show();
}
}
// login to mastodon
else if (hostSelector.getSelectedItemId() == NetworkAdapter.ID_MASTODON) {

View File

@ -116,10 +116,15 @@ public class MainActivity extends AppCompatActivity implements OnTabSelectedList
// initialize lists
else if (adapter.isEmpty()) {
adapter.setupForHomePage();
if (settings.getLogin().getApiType() == Account.API_TWITTER) {
AppStyles.setTabIcons(tabLayout, settings, R.array.home_twitter_icons);
} else if (settings.getLogin().getApiType() == Account.API_MASTODON) {
AppStyles.setTabIcons(tabLayout, settings, R.array.home_mastodon_icons);
switch (settings.getLogin().getApiType()) {
case Account.API_TWITTER_1:
case Account.API_TWITTER_2:
AppStyles.setTabIcons(tabLayout, settings, R.array.home_twitter_icons);
break;
case Account.API_MASTODON:
AppStyles.setTabIcons(tabLayout, settings, R.array.home_mastodon_icons);
break;
}
// check if there is a Twitter link
if (getIntent().getData() != null) {
@ -176,10 +181,15 @@ public class MainActivity extends AppCompatActivity implements OnTabSelectedList
break;
}
AppStyles.setTheme(root);
if (settings.getLogin().getApiType() == Account.API_TWITTER) {
AppStyles.setTabIcons(tabLayout, settings, R.array.home_twitter_icons);
} else if (settings.getLogin().getApiType() == Account.API_MASTODON) {
AppStyles.setTabIcons(tabLayout, settings, R.array.home_mastodon_icons);
switch (settings.getLogin().getApiType()) {
case Account.API_TWITTER_1:
case Account.API_TWITTER_2:
AppStyles.setTabIcons(tabLayout, settings, R.array.home_twitter_icons);
break;
case Account.API_MASTODON:
AppStyles.setTabIcons(tabLayout, settings, R.array.home_mastodon_icons);
break;
}
AppStyles.setOverflowIcon(toolbar, settings.getIconColor());
}

View File

@ -214,14 +214,13 @@ public class ProfileActivity extends AppCompatActivity implements OnClickListene
Intent i = getIntent();
Object o = i.getSerializableExtra(KEY_PROFILE_USER);
Account login = settings.getLogin();
boolean enableFavs = login.getApiType() == Account.API_TWITTER_1 || login.getApiType() == Account.API_TWITTER_2;
if (o instanceof User) {
user = (User) o;
boolean enableFavs = login.getApiType() == Account.API_TWITTER || login.getId() == user.getId();
adapter.setupProfilePage(user.getId(), enableFavs);
adapter.setupProfilePage(user.getId(), enableFavs || login.getId() == user.getId());
} else {
long userId = i.getLongExtra(KEY_PROFILE_ID, 0);
boolean enableFavs = login.getApiType() == Account.API_TWITTER || login.getId() == userId;
adapter.setupProfilePage(userId, enableFavs);
adapter.setupProfilePage(userId, enableFavs || login.getId() == userId);
}
if (settings.likeEnabled()) {
tabIndicator = AppStyles.setTabIconsWithText(tabLayout, settings, R.array.profile_tab_icons_like);
@ -321,7 +320,8 @@ public class ProfileActivity extends AppCompatActivity implements OnClickListene
AppStyles.setMenuItemColor(followIcon, settings.getFollowPendingColor());
followIcon.setTitle(R.string.menu_follow_requested);
}
if (user.isCurrentUser() || (!user.isProtected() && settings.getLogin().getApiType() == Account.API_TWITTER)) {
if (user.isCurrentUser() || (!user.isProtected() && (settings.getLogin().getApiType() == Account.API_TWITTER_1
|| settings.getLogin().getApiType() == Account.API_TWITTER_2))) {
MenuItem listItem = m.findItem(R.id.profile_lists);
listItem.setVisible(true);
}
@ -493,8 +493,9 @@ public class ProfileActivity extends AppCompatActivity implements OnClickListene
// open following page
if (v.getId() == R.id.following) {
if (relation != null) {
if ((settings.getLogin().getApiType() != Account.API_TWITTER || !user.isProtected())
|| user.isCurrentUser() || relation.isFollowing()) {
int apiType = settings.getLogin().getApiType();
if (((apiType != Account.API_TWITTER_1 && settings.getLogin().getApiType() != Account.API_TWITTER_2)
|| !user.isProtected()) || user.isCurrentUser() || relation.isFollowing()) {
Intent usersIntent = new Intent(this, UsersActivity.class);
usersIntent.putExtra(KEY_USERS_ID, user.getId());
usersIntent.putExtra(KEY_USERS_MODE, USERS_FRIENDS);
@ -505,8 +506,9 @@ public class ProfileActivity extends AppCompatActivity implements OnClickListene
// open follower page
else if (v.getId() == R.id.follower) {
if (relation != null) {
if ((settings.getLogin().getApiType() != Account.API_TWITTER || !user.isProtected())
|| user.isCurrentUser() || relation.isFollowing()) {
int apiType = settings.getLogin().getApiType();
if (((apiType != Account.API_TWITTER_1 && settings.getLogin().getApiType() != Account.API_TWITTER_2)
|| !user.isProtected()) || user.isCurrentUser() || relation.isFollowing()) {
Intent usersIntent = new Intent(this, UsersActivity.class);
usersIntent.putExtra(KEY_USERS_ID, user.getId());
usersIntent.putExtra(KEY_USERS_MODE, USERS_FOLLOWER);

View File

@ -127,7 +127,7 @@ public class ProfileEditor extends MediaActivity implements OnClickListener, OnP
constraints.connect(R.id.profile_edit_add_banner, ConstraintSet.TOP, R.id.profile_edit_banner, ConstraintSet.TOP);
constraints.applyTo(root);
}
if (settings.getLogin().getApiType() != Account.API_TWITTER) {
if (settings.getLogin().getApiType() != Account.API_TWITTER_1 || settings.getLogin().getApiType() != Account.API_TWITTER_2) {
profileUrl.setVisibility(View.GONE);
location.setVisibility(View.GONE);
locationDescription.setVisibility(View.GONE);

View File

@ -105,7 +105,7 @@ public class SearchActivity extends AppCompatActivity implements OnTabSelectedLi
MenuItem searchItem = m.findItem(R.id.new_search);
MenuItem searchFilter = m.findItem(R.id.search_filter);
SearchView searchView = (SearchView) searchItem.getActionView();
if (settings.getLogin().getApiType() == Account.API_TWITTER) {
if (settings.getLogin().getApiType() == Account.API_TWITTER_1 || settings.getLogin().getApiType() == Account.API_TWITTER_2) {
searchFilter.setChecked(settings.filterResults());
} else {
searchFilter.setVisible(false);

View File

@ -184,7 +184,8 @@ public class SettingsActivity extends AppCompatActivity implements OnClickListen
appInfo = new InfoDialog(this);
license = new LicenseDialog(this);
if (settings.getLogin().getApiType() != Account.API_TWITTER) {
if (settings.getLogin().getApiType() != Account.API_TWITTER_1
&& settings.getLogin().getApiType() != Account.API_TWITTER_2) {
enableTwitterAlt.setVisibility(GONE);
EnableTwitterAltDescr.setVisibility(GONE);
trend_card.setVisibility(GONE);
@ -244,7 +245,8 @@ public class SettingsActivity extends AppCompatActivity implements OnClickListen
@Override
protected void onStart() {
super.onStart();
if (settings.getLogin().getApiType() == Account.API_TWITTER && locationAsync == null) {
int apiType = settings.getLogin().getApiType();
if ((apiType == Account.API_TWITTER_1 || apiType == Account.API_TWITTER_2) && locationAsync == null) {
locationAsync = new LocationLoader(this);
locationAsync.execute();
}

View File

@ -88,10 +88,10 @@ public class ConnectionDialog extends Dialog implements OnCheckedChangeListener,
}
dismiss();
} else if (!enableApi.isChecked()) {
if (!Tokens.DISABLE_API_V2) {
callback.onConnectionSet(null, null, OnConnectionSetCallback.TWITTER_V2);
} else {
if (Tokens.DISABLE_API_V2) {
callback.onConnectionSet(null, null, OnConnectionSetCallback.TWITTER_V1);
} else {
callback.onConnectionSet(null, null, OnConnectionSetCallback.TWITTER_V2);
}
dismiss();
} else {

View File

@ -267,4 +267,5 @@
<string name="login_network_settings">Verbindungseinstellungen</string>
<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>
</resources>

View File

@ -18,6 +18,7 @@
<string name="info_list_updated">Userlist updated</string>
<string name="info_list_created">Userlist created</string>
<string name="info_open_twitter_login">redirecting to Twitter login website. Please wait</string>
<string name="info_missing_api_keys">please add API tokens first before proceeding</string>
<string name="info_open_mastodon_login">redirecting to Mastodon login website. Please wait</string>
<string name="info_login_to_twitter">login to Twitter, please wait</string>
<string name="info_login_to_mastodon">login to Mastodon, please wait</string>