bug fix, renamed variables and classes

This commit is contained in:
nuclearfog 2023-04-02 19:15:01 +02:00
parent 354c65d1a4
commit efd07880dc
No known key found for this signature in database
GPG Key ID: 03488A185C476379
6 changed files with 59 additions and 46 deletions

View File

@ -68,7 +68,7 @@ dependencies {
implementation 'jp.wasabeef:picasso-transformations:2.4.0' implementation 'jp.wasabeef:picasso-transformations:2.4.0'
implementation 'com.github.QuadFlask:colorpicker:0.0.15' implementation 'com.github.QuadFlask:colorpicker:0.0.15'
implementation 'com.github.nuclearfog:ZoomView:1.0.4' implementation 'com.github.nuclearfog:ZoomView:1.0.4'
implementation 'com.github.nuclearfog:Tagger:2.3' implementation 'com.github.nuclearfog:Tagger:2.4'
implementation 'com.github.nuclearfog:LinkAndScrollMovement:1.4.1' implementation 'com.github.nuclearfog:LinkAndScrollMovement:1.4.1'
implementation 'com.github.kyleduo:SwitchButton:2.0.3-SNAPSHOT' implementation 'com.github.kyleduo:SwitchButton:2.0.3-SNAPSHOT'
} }

View File

@ -10,14 +10,14 @@ import org.nuclearfog.twidda.backend.api.twitter.v1.TwitterV1;
import org.nuclearfog.twidda.backend.api.twitter.v2.TwitterV2; import org.nuclearfog.twidda.backend.api.twitter.v2.TwitterV2;
import org.nuclearfog.twidda.config.Configuration; import org.nuclearfog.twidda.config.Configuration;
import org.nuclearfog.twidda.config.GlobalSettings; import org.nuclearfog.twidda.config.GlobalSettings;
import org.nuclearfog.twidda.config.GlobalSettings.OnSettingsChangeListener; import org.nuclearfog.twidda.config.GlobalSettings.SettingsChangeObserver;
/** /**
* this class manages multiple API implementations depending on settings * this class manages multiple API implementations depending on settings
* *
* @author nuclearfog * @author nuclearfog
*/ */
public class ConnectionManager implements OnSettingsChangeListener { public class ConnectionManager implements SettingsChangeObserver {
private static final int IDX_MASTODON = 0; private static final int IDX_MASTODON = 0;
private static final int IDX_TWITTER1 = 1; private static final int IDX_TWITTER1 = 1;
@ -39,7 +39,7 @@ public class ConnectionManager implements OnSettingsChangeListener {
connections[IDX_TWITTER2] = new TwitterV2(context); connections[IDX_TWITTER2] = new TwitterV2(context);
settings = GlobalSettings.getInstance(context); settings = GlobalSettings.getInstance(context);
settings.addSettingsChangeListener(this); settings.addObserver(this);
} }

View File

@ -7,14 +7,14 @@ import com.squareup.picasso.OkHttp3Downloader;
import com.squareup.picasso.Picasso; import com.squareup.picasso.Picasso;
import org.nuclearfog.twidda.config.GlobalSettings; import org.nuclearfog.twidda.config.GlobalSettings;
import org.nuclearfog.twidda.config.GlobalSettings.OnSettingsChangeListener; import org.nuclearfog.twidda.config.GlobalSettings.SettingsChangeObserver;
/** /**
* Create Picasso instance with proxy connection and image cache * Create Picasso instance with proxy connection and image cache
* *
* @author nuclearfog * @author nuclearfog
*/ */
public class PicassoBuilder implements OnSettingsChangeListener { public class PicassoBuilder implements SettingsChangeObserver {
/** /**
* local image cache size in bytes * local image cache size in bytes
@ -36,7 +36,7 @@ public class PicassoBuilder implements OnSettingsChangeListener {
*/ */
private PicassoBuilder(Context context) { private PicassoBuilder(Context context) {
GlobalSettings settings = GlobalSettings.getInstance(context); GlobalSettings settings = GlobalSettings.getInstance(context);
settings.addSettingsChangeListener(this); settings.addObserver(this);
downloader = new OkHttp3Downloader(ConnectionBuilder.create(context, STORAGE_SIZE)); downloader = new OkHttp3Downloader(ConnectionBuilder.create(context, STORAGE_SIZE));
imageCache = new LruCache(CACHE_SIZE); imageCache = new LruCache(CACHE_SIZE);
notifySettingsChange = false; notifySettingsChange = false;

View File

@ -162,8 +162,11 @@ public class GlobalSettings {
private int indexScale; private int indexScale;
private int listSize; private int listSize;
private List<OnSettingsChangeListener> settingsChangeListeners = new LinkedList<>(); private List<SettingsChangeObserver> settingsChangeObservers = new LinkedList<>();
/**
* single instance constructor
*/
private GlobalSettings() { private GlobalSettings() {
} }
@ -947,20 +950,20 @@ public class GlobalSettings {
* changes like new proxy settings requires re initialization * changes like new proxy settings requires re initialization
* registered instances can be notified if these setting change * registered instances can be notified if these setting change
* *
* @param listener listener called when some settings change * @param observer listener called when some settings change
*/ */
public void addSettingsChangeListener(@NonNull OnSettingsChangeListener listener) { public void addObserver(@NonNull SettingsChangeObserver observer) {
settingsChangeListeners.add(listener); settingsChangeObservers.add(observer);
} }
/** /**
* notify listener when settings changes and clear old instances * notify listener when settings changes and clear old instances
*/ */
private void notifySettingsChange() { private void notifySettingsChange() {
for (OnSettingsChangeListener listener : settingsChangeListeners) { for (SettingsChangeObserver observer : settingsChangeObservers) {
listener.onSettingsChange(); observer.onSettingsChange();
} }
settingsChangeListeners.clear(); settingsChangeObservers.clear();
} }
/** /**
@ -1022,9 +1025,9 @@ public class GlobalSettings {
} }
/** /**
* global listener for settings * Observer interface to notify subclasses when settings change
*/ */
public interface OnSettingsChangeListener { public interface SettingsChangeObserver {
/** /**
* called when settings change * called when settings change

View File

@ -145,6 +145,7 @@ public class ProfileActivity extends AppCompatActivity implements ActivityResult
private GlobalSettings settings; private GlobalSettings settings;
private Picasso picasso; private Picasso picasso;
private ConfirmDialog confirmDialog; private ConfirmDialog confirmDialog;
private RelationLoader relationLoader; private RelationLoader relationLoader;
private UserLoader userLoader; private UserLoader userLoader;
private EmojiLoader emojiLoader; private EmojiLoader emojiLoader;
@ -283,6 +284,7 @@ public class ProfileActivity extends AppCompatActivity implements ActivityResult
protected void onDestroy() { protected void onDestroy() {
relationLoader.cancel(); relationLoader.cancel();
userLoader.cancel(); userLoader.cancel();
emojiLoader.cancel();
super.onDestroy(); super.onDestroy();
} }

View File

@ -197,13 +197,14 @@ public class StatusActivity extends AppCompatActivity implements OnClickListener
private AsyncCallback<EmojiResult> statusTextUpdate = this::onStatusTextUpdate; private AsyncCallback<EmojiResult> statusTextUpdate = this::onStatusTextUpdate;
private AsyncCallback<EmojiResult> usernameUpdate = this::onUsernameUpdate; private AsyncCallback<EmojiResult> usernameUpdate = this::onUsernameUpdate;
private StatusAction statusLoader;
private NotificationAction notificationLoader;
private TranslationLoader translationLoader;
private PollAction pollLoader;
private EmojiLoader emojiLoader;
@Nullable @Nullable
private ClipboardManager clip; private ClipboardManager clip;
private StatusAction statusAsync;
private PollAction voteAsync;
private NotificationAction notificationAsync;
private TranslationLoader translationAsync;
private EmojiLoader emojiAsync;
private GlobalSettings settings; private GlobalSettings settings;
private Picasso picasso; private Picasso picasso;
private PreviewAdapter adapter; private PreviewAdapter adapter;
@ -259,11 +260,11 @@ public class StatusActivity extends AppCompatActivity implements OnClickListener
spoilerHint = findViewById(R.id.page_status_text_sensitive_hint); spoilerHint = findViewById(R.id.page_status_text_sensitive_hint);
cardList = findViewById(R.id.page_status_cards); cardList = findViewById(R.id.page_status_cards);
statusAsync = new StatusAction(this); statusLoader = new StatusAction(this);
voteAsync = new PollAction(this); pollLoader = new PollAction(this);
notificationAsync = new NotificationAction(this); notificationLoader = new NotificationAction(this);
translationAsync = new TranslationLoader(this); translationLoader = new TranslationLoader(this);
emojiAsync = new EmojiLoader(this); emojiLoader = new EmojiLoader(this);
picasso = PicassoBuilder.get(this); picasso = PicassoBuilder.get(this);
settings = GlobalSettings.getInstance(this); settings = GlobalSettings.getInstance(this);
@ -305,7 +306,7 @@ public class StatusActivity extends AppCompatActivity implements OnClickListener
Status embeddedStatus = status.getEmbeddedStatus(); Status embeddedStatus = status.getEmbeddedStatus();
setStatus(status); setStatus(status);
StatusParam statusParam = new StatusParam(StatusParam.ONLINE, status.getId()); StatusParam statusParam = new StatusParam(StatusParam.ONLINE, status.getId());
statusAsync.execute(statusParam, statusCallback); statusLoader.execute(statusParam, statusCallback);
if (embeddedStatus != null) { if (embeddedStatus != null) {
statusId = embeddedStatus.getId(); statusId = embeddedStatus.getId();
replyUsername = embeddedStatus.getAuthor().getScreenname(); replyUsername = embeddedStatus.getAuthor().getScreenname();
@ -317,7 +318,7 @@ public class StatusActivity extends AppCompatActivity implements OnClickListener
} else if (notificationObject instanceof Notification) { } else if (notificationObject instanceof Notification) {
Notification notification = (Notification) notificationObject; Notification notification = (Notification) notificationObject;
NotificationActionParam notificationParam = new NotificationActionParam(NotificationActionParam.ONLINE, notification.getId()); NotificationActionParam notificationParam = new NotificationActionParam(NotificationActionParam.ONLINE, notification.getId());
notificationAsync.execute(notificationParam, notificationCallback); notificationLoader.execute(notificationParam, notificationCallback);
if (notification.getStatus() != null) { if (notification.getStatus() != null) {
setNotification(notification); setNotification(notification);
statusId = notification.getStatus().getId(); statusId = notification.getStatus().getId();
@ -329,11 +330,11 @@ public class StatusActivity extends AppCompatActivity implements OnClickListener
if (statusId != 0L) { if (statusId != 0L) {
replyUsername = savedInstanceState.getString(KEY_STATUS_NAME); replyUsername = savedInstanceState.getString(KEY_STATUS_NAME);
StatusParam statusParam = new StatusParam(StatusParam.DATABASE, statusId); StatusParam statusParam = new StatusParam(StatusParam.DATABASE, statusId);
statusAsync.execute(statusParam, statusCallback); statusLoader.execute(statusParam, statusCallback);
} else if (notificationId != 0L) { } else if (notificationId != 0L) {
replyUsername = savedInstanceState.getString(KEY_NOTIFICATION_NAME); replyUsername = savedInstanceState.getString(KEY_NOTIFICATION_NAME);
NotificationActionParam notificationParam = new NotificationActionParam(NotificationActionParam.ONLINE, notificationId); NotificationActionParam notificationParam = new NotificationActionParam(NotificationActionParam.ONLINE, notificationId);
notificationAsync.execute(notificationParam, notificationCallback); notificationLoader.execute(notificationParam, notificationCallback);
} }
} }
// initialize status reply list // initialize status reply list
@ -366,7 +367,11 @@ public class StatusActivity extends AppCompatActivity implements OnClickListener
@Override @Override
protected void onDestroy() { protected void onDestroy() {
statusAsync.cancel(); statusLoader.cancel();
pollLoader.cancel();
notificationLoader.cancel();
translationLoader.cancel();
emojiLoader.cancel();
super.onDestroy(); super.onDestroy();
} }
@ -475,13 +480,13 @@ public class StatusActivity extends AppCompatActivity implements OnClickListener
Toast.makeText(getApplicationContext(), R.string.info_loading, Toast.LENGTH_SHORT).show(); Toast.makeText(getApplicationContext(), R.string.info_loading, Toast.LENGTH_SHORT).show();
int mode = status.isBookmarked() ? StatusParam.UNBOOKMARK : StatusParam.BOOKMARK; int mode = status.isBookmarked() ? StatusParam.UNBOOKMARK : StatusParam.BOOKMARK;
StatusParam param = new StatusParam(mode, status.getId()); StatusParam param = new StatusParam(mode, status.getId());
statusAsync.execute(param, statusCallback); statusLoader.execute(param, statusCallback);
} }
// hide status // hide status
else if (item.getItemId() == R.id.menu_status_hide) { else if (item.getItemId() == R.id.menu_status_hide) {
int mode = hidden ? StatusParam.UNHIDE : StatusParam.HIDE; int mode = hidden ? StatusParam.UNHIDE : StatusParam.HIDE;
StatusParam param = new StatusParam(mode, status.getId()); StatusParam param = new StatusParam(mode, status.getId());
statusAsync.execute(param, statusCallback); statusLoader.execute(param, statusCallback);
} }
// get status link // get status link
else if (item.getItemId() == R.id.menu_status_browser) { else if (item.getItemId() == R.id.menu_status_browser) {
@ -606,8 +611,8 @@ public class StatusActivity extends AppCompatActivity implements OnClickListener
} }
// translate status text // translate status text
else if (v.getId() == R.id.page_status_text_translate) { else if (v.getId() == R.id.page_status_text_translate) {
if (translationAsync.isIdle() && translation == null) { if (translationLoader.isIdle() && translation == null) {
translationAsync.execute(status.getId(), translationResult); translationLoader.execute(status.getId(), translationResult);
} }
} }
} }
@ -616,13 +621,13 @@ public class StatusActivity extends AppCompatActivity implements OnClickListener
@Override @Override
public boolean onLongClick(View v) { public boolean onLongClick(View v) {
if (status != null && statusAsync.isIdle()) { if (status != null && statusLoader.isIdle()) {
// repost this status // repost this status
if (v.getId() == R.id.page_status_repost) { if (v.getId() == R.id.page_status_repost) {
Toast.makeText(getApplicationContext(), R.string.info_loading, Toast.LENGTH_SHORT).show(); Toast.makeText(getApplicationContext(), R.string.info_loading, Toast.LENGTH_SHORT).show();
int mode = status.isReposted() ? StatusParam.UNREPOST : StatusParam.REPOST; int mode = status.isReposted() ? StatusParam.UNREPOST : StatusParam.REPOST;
StatusParam param = new StatusParam(mode, status.getId()); StatusParam param = new StatusParam(mode, status.getId());
statusAsync.execute(param, statusCallback); statusLoader.execute(param, statusCallback);
return true; return true;
} }
// favorite this status // favorite this status
@ -630,7 +635,7 @@ public class StatusActivity extends AppCompatActivity implements OnClickListener
Toast.makeText(getApplicationContext(), R.string.info_loading, Toast.LENGTH_SHORT).show(); Toast.makeText(getApplicationContext(), R.string.info_loading, Toast.LENGTH_SHORT).show();
int mode = status.isFavorited() ? StatusParam.UNFAVORITE : StatusParam.FAVORITE; int mode = status.isFavorited() ? StatusParam.UNFAVORITE : StatusParam.FAVORITE;
StatusParam param = new StatusParam(mode, status.getId()); StatusParam param = new StatusParam(mode, status.getId());
statusAsync.execute(param, statusCallback); statusLoader.execute(param, statusCallback);
return true; return true;
} }
// go to original status // go to original status
@ -673,7 +678,7 @@ public class StatusActivity extends AppCompatActivity implements OnClickListener
id = status.getEmbeddedStatus().getId(); id = status.getEmbeddedStatus().getId();
} }
StatusParam param = new StatusParam(StatusParam.DELETE, id); StatusParam param = new StatusParam(StatusParam.DELETE, id);
statusAsync.execute(param, statusCallback); statusLoader.execute(param, statusCallback);
} }
break; break;
@ -786,9 +791,9 @@ public class StatusActivity extends AppCompatActivity implements OnClickListener
@Override @Override
public void onVoteClick(Poll poll, int[] selection) { public void onVoteClick(Poll poll, int[] selection) {
if (voteAsync.isIdle()) { if (pollLoader.isIdle()) {
PollActionParam param = new PollActionParam(PollActionParam.VOTE, poll, selection); PollActionParam param = new PollActionParam(PollActionParam.VOTE, poll, selection);
voteAsync.execute(param, pollResult); pollLoader.execute(param, pollResult);
} }
} }
@ -833,9 +838,11 @@ public class StatusActivity extends AppCompatActivity implements OnClickListener
} else { } else {
screenName.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0); screenName.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
} }
if (!status.getLanguage().isEmpty() && !status.getLanguage().equals(Locale.getDefault().getLanguage())) { if (!status.getText().isEmpty() && !status.getLanguage().isEmpty() && !status.getLanguage().equals(Locale.getDefault().getLanguage())) {
translateText.setVisibility(View.VISIBLE); translateText.setVisibility(View.VISIBLE);
translateText.setTextColor(settings.getHighlightColor()); translateText.setTextColor(settings.getHighlightColor());
} else {
translateText.setVisibility(View.GONE);
} }
username.setText(author.getUsername()); username.setText(author.getUsername());
screenName.setText(author.getScreenname()); screenName.setText(author.getScreenname());
@ -925,12 +932,12 @@ public class StatusActivity extends AppCompatActivity implements OnClickListener
if (settings.imagesEnabled()) { if (settings.imagesEnabled()) {
if (status.getEmojis().length > 0 && spannableText != null) { if (status.getEmojis().length > 0 && spannableText != null) {
EmojiParam param = new EmojiParam(status.getEmojis(), spannableText, getResources().getDimensionPixelSize(R.dimen.page_status_icon_size)); EmojiParam param = new EmojiParam(status.getEmojis(), spannableText, getResources().getDimensionPixelSize(R.dimen.page_status_icon_size));
emojiAsync.execute(param, statusTextUpdate); emojiLoader.execute(param, statusTextUpdate);
} }
if (author.getEmojis().length > 0 && !author.getUsername().isEmpty()) { if (author.getEmojis().length > 0 && !author.getUsername().isEmpty()) {
SpannableString usernameSpan = new SpannableString(author.getUsername()); SpannableString usernameSpan = new SpannableString(author.getUsername());
EmojiParam param = new EmojiParam(author.getEmojis(), usernameSpan, getResources().getDimensionPixelSize(R.dimen.page_status_icon_size)); EmojiParam param = new EmojiParam(author.getEmojis(), usernameSpan, getResources().getDimensionPixelSize(R.dimen.page_status_icon_size));
emojiAsync.execute(param, usernameUpdate); emojiLoader.execute(param, usernameUpdate);
} }
} }
} }
@ -965,6 +972,7 @@ public class StatusActivity extends AppCompatActivity implements OnClickListener
translateText.append(translation.getSource() + ", "); translateText.append(translation.getSource() + ", ");
translateText.append(getString(R.string.status_translate_source_language)); translateText.append(getString(R.string.status_translate_source_language));
translateText.append(translation.getOriginalLanguage()); translateText.append(translation.getOriginalLanguage());
translateText.setVisibility(View.VISIBLE);
} }
} }
@ -979,7 +987,7 @@ public class StatusActivity extends AppCompatActivity implements OnClickListener
case StatusResult.DATABASE: case StatusResult.DATABASE:
if (result.status != null) { if (result.status != null) {
StatusParam param = new StatusParam(StatusParam.ONLINE, result.status.getId()); StatusParam param = new StatusParam(StatusParam.ONLINE, result.status.getId());
statusAsync.execute(param, statusCallback); statusLoader.execute(param, statusCallback);
} }
break; break;
@ -1064,7 +1072,7 @@ public class StatusActivity extends AppCompatActivity implements OnClickListener
case NotificationActionResult.DATABASE: case NotificationActionResult.DATABASE:
if (result.notification != null) { if (result.notification != null) {
NotificationActionParam param = new NotificationActionParam(NotificationActionParam.ONLINE, result.notification.getId()); NotificationActionParam param = new NotificationActionParam(NotificationActionParam.ONLINE, result.notification.getId());
notificationAsync.execute(param, notificationCallback); notificationLoader.execute(param, notificationCallback);
} }
// fall through // fall through