restructured adapter, bug fix

This commit is contained in:
nuclearfog 2019-12-26 11:40:09 +01:00
parent 27c846954d
commit bef82da590
No known key found for this signature in database
GPG Key ID: ED35E22099354A64
15 changed files with 96 additions and 157 deletions

View File

@ -37,6 +37,7 @@ public class MainActivity extends AppCompatActivity implements OnTabSelectedList
@Nullable
private FragmentAdapter adapter;
private TabLayout tablayout;
private GlobalSettings settings;
private ViewPager pager;
private View root;
private long homeId;
@ -61,6 +62,9 @@ public class MainActivity extends AppCompatActivity implements OnTabSelectedList
if (getSupportActionBar() != null)
getSupportActionBar().setDisplayShowTitleEnabled(false);
settings = GlobalSettings.getInstance(this);
root.setBackgroundColor(settings.getBackgroundColor());
tablayout.setSelectedTabIndicatorColor(settings.getHighlightColor());
tablayout.setupWithViewPager(pager);
tablayout.addOnTabSelectedListener(this);
pager.setOffscreenPageLimit(3);
@ -70,7 +74,7 @@ public class MainActivity extends AppCompatActivity implements OnTabSelectedList
@Override
protected void onStart() {
super.onStart();
GlobalSettings settings = GlobalSettings.getInstance(this);
if (!settings.getLogin()) {
Intent loginIntent = new Intent(this, LoginPage.class);
startActivityForResult(loginIntent, LOGIN);
@ -89,8 +93,6 @@ public class MainActivity extends AppCompatActivity implements OnTabSelectedList
mnTab.setIcon(R.drawable.mention);
}
}
root.setBackgroundColor(settings.getBackgroundColor());
tablayout.setSelectedTabIndicatorColor(settings.getHighlightColor());
}
@ -103,14 +105,15 @@ public class MainActivity extends AppCompatActivity implements OnTabSelectedList
break;
case SETTING:
root.setBackgroundColor(settings.getBackgroundColor());
tablayout.setSelectedTabIndicatorColor(settings.getHighlightColor());
if (adapter != null) {
if (returnCode == DB_CLEARED) {
if (returnCode == DB_CLEARED)
adapter.clearData();
} else if (returnCode == APP_LOGOUT) {
else if (returnCode == APP_LOGOUT)
adapter = null;
} else {
else
adapter.notifySettingsChanged();
}
}
break;
}

View File

@ -5,7 +5,7 @@ import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
import androidx.fragment.app.FragmentStatePagerAdapter;
import org.nuclearfog.twidda.fragment.ListFragment;
import org.nuclearfog.twidda.fragment.MessageFragment;
@ -25,7 +25,7 @@ import static org.nuclearfog.twidda.fragment.UserFragment.KEY_FRAG_USER_ID;
import static org.nuclearfog.twidda.fragment.UserFragment.KEY_FRAG_USER_MODE;
import static org.nuclearfog.twidda.fragment.UserFragment.KEY_FRAG_USER_SEARCH;
public class FragmentAdapter extends FragmentPagerAdapter {
public class FragmentAdapter extends FragmentStatePagerAdapter {
public enum AdapterType {
PROFILE_TAB,

View File

@ -29,16 +29,17 @@ public class ImageAdapter extends Adapter<ImageAdapter.ImageHolder> {
private List<Bitmap> images;
private boolean loading;
public ImageAdapter(OnImageClickListener l) {
itemClickListener = new WeakReference<>(l);
images = new LinkedList<>();
loading = true;
loading = false;
}
@MainThread
public void addLast(@NonNull Bitmap image) {
int imagePos = images.size();
if (imagePos == 0)
loading = true;
images.add(image);
notifyItemInserted(imagePos);
}

View File

@ -1,6 +1,5 @@
package org.nuclearfog.twidda.adapter;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
@ -20,6 +19,7 @@ import org.nuclearfog.twidda.R;
import org.nuclearfog.twidda.backend.helper.StringTools;
import org.nuclearfog.twidda.backend.items.TwitterList;
import org.nuclearfog.twidda.backend.items.TwitterUser;
import org.nuclearfog.twidda.database.GlobalSettings;
import java.lang.ref.WeakReference;
import java.text.NumberFormat;
@ -34,13 +34,13 @@ public class ListAdapter extends Adapter<ListAdapter.ListHolder> {
private WeakReference<ListClickListener> listener;
private List<TwitterList> data;
private NumberFormat formatter;
private int fontColor;
private GlobalSettings settings;
public ListAdapter(ListClickListener l) {
public ListAdapter(ListClickListener l, GlobalSettings settings) {
data = new ArrayList<>();
listener = new WeakReference<>(l);
formatter = NumberFormat.getIntegerInstance();
fontColor = Color.WHITE;
this.settings = settings;
}
@MainThread
@ -59,10 +59,6 @@ public class ListAdapter extends Adapter<ListAdapter.ListHolder> {
}
}
public void setColor(int fontColor) {
this.fontColor = fontColor;
}
@Override
public int getItemCount() {
return data.size();
@ -85,11 +81,12 @@ public class ListAdapter extends Adapter<ListAdapter.ListHolder> {
vh.createdAt.setText(StringTools.getTimeString(item.getCreatedAt()));
vh.memberCount.setText(formatter.format(item.getMemberCount()));
vh.subscriberCount.setText(formatter.format(item.getSubscriberCount()));
vh.title.setTextColor(fontColor);
vh.ownername.setTextColor(fontColor);
vh.description.setTextColor(fontColor);
vh.createdAt.setTextColor(fontColor);
Picasso.get().load(owner.getImageLink() + "_mini").into(vh.pb_image);
vh.title.setTextColor(settings.getFontColor());
vh.ownername.setTextColor(settings.getFontColor());
vh.description.setTextColor(settings.getFontColor());
vh.createdAt.setTextColor(settings.getFontColor());
if (settings.getImageLoad())
Picasso.get().load(owner.getImageLink() + "_mini").into(vh.pb_image);
vh.pb_image.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {

View File

@ -1,6 +1,5 @@
package org.nuclearfog.twidda.adapter;
import android.graphics.Color;
import android.text.Spanned;
import android.text.method.LinkMovementMethod;
import android.view.LayoutInflater;
@ -23,6 +22,7 @@ import org.nuclearfog.twidda.R;
import org.nuclearfog.twidda.backend.helper.StringTools;
import org.nuclearfog.twidda.backend.items.Message;
import org.nuclearfog.twidda.backend.items.TwitterUser;
import org.nuclearfog.twidda.database.GlobalSettings;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
@ -32,17 +32,12 @@ public class MessageAdapter extends Adapter<MessageAdapter.MessageHolder> {
private WeakReference<OnItemSelected> itemClickListener;
private List<Message> messages;
private int highlight;
private int fontColor;
private boolean loadImage;
private GlobalSettings settings;
public MessageAdapter(OnItemSelected l) {
public MessageAdapter(OnItemSelected l, GlobalSettings settings) {
itemClickListener = new WeakReference<>(l);
messages = new ArrayList<>();
fontColor = Color.WHITE;
highlight = Color.WHITE;
loadImage = true;
this.settings = settings;
}
@MainThread
@ -65,15 +60,6 @@ public class MessageAdapter extends Adapter<MessageAdapter.MessageHolder> {
notifyItemRemoved(pos);
}
public void setColor(int fontColor, int highlight) {
this.fontColor = fontColor;
this.highlight = highlight;
}
public void setImage(boolean loadImage) {
this.loadImage = loadImage;
}
@Override
public long getItemId(int index) {
return messages.get(index).getId();
@ -98,21 +84,21 @@ public class MessageAdapter extends Adapter<MessageAdapter.MessageHolder> {
Message message = messages.get(index);
TwitterUser sender = message.getSender();
if (itemClickListener.get() != null)
text = Tagger.makeText(message.getText(), highlight, itemClickListener.get());
text = Tagger.makeText(message.getText(), settings.getHighlightColor(), itemClickListener.get());
else
text = Tagger.makeText(message.getText(), highlight);
text = Tagger.makeText(message.getText(), settings.getHighlightColor());
vh.message.setText(text);
vh.message.setMovementMethod(LinkMovementMethod.getInstance());
vh.message.setLinkTextColor(highlight);
vh.message.setLinkTextColor(settings.getHighlightColor());
vh.username.setText(sender.getUsername());
vh.screenname.setText(sender.getScreenname());
vh.createdAt.setText(StringTools.getTimeString(message.getTime()));
vh.receivername.setText(message.getReceiver().getScreenname());
vh.message.setTextColor(fontColor);
vh.username.setTextColor(fontColor);
vh.screenname.setTextColor(fontColor);
vh.receivername.setTextColor(fontColor);
vh.createdAt.setTextColor(fontColor);
vh.message.setTextColor(settings.getFontColor());
vh.username.setTextColor(settings.getFontColor());
vh.screenname.setTextColor(settings.getFontColor());
vh.receivername.setTextColor(settings.getFontColor());
vh.createdAt.setTextColor(settings.getFontColor());
vh.answer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
@ -142,7 +128,7 @@ public class MessageAdapter extends Adapter<MessageAdapter.MessageHolder> {
vh.screenname.setCompoundDrawablesWithIntrinsicBounds(R.drawable.lock, 0, 0, 0);
else
vh.screenname.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
if (loadImage)
if (settings.getImageLoad())
Picasso.get().load(sender.getImageLink() + "_mini").into(vh.profile_img);
}

View File

@ -1,6 +1,5 @@
package org.nuclearfog.twidda.adapter;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
@ -14,6 +13,7 @@ import androidx.recyclerview.widget.RecyclerView.Adapter;
import androidx.recyclerview.widget.RecyclerView.ViewHolder;
import org.nuclearfog.twidda.R;
import org.nuclearfog.twidda.database.GlobalSettings;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
@ -23,16 +23,12 @@ public class TrendAdapter extends Adapter<TrendAdapter.ItemHolder> {
private WeakReference<OnItemClickListener> itemClickListener;
private List<String> trends;
private int font_color;
private GlobalSettings settings;
public TrendAdapter(OnItemClickListener l) {
public TrendAdapter(OnItemClickListener l, GlobalSettings settings) {
itemClickListener = new WeakReference<>(l);
trends = new ArrayList<>();
font_color = Color.WHITE;
}
public void setColor(int font_color) {
this.font_color = font_color;
this.settings = settings;
}
public String getData(int index) {
@ -83,8 +79,8 @@ public class TrendAdapter extends Adapter<TrendAdapter.ItemHolder> {
String posStr = index + 1 + ".";
vh.pos.setText(posStr);
vh.trends.setText(trends.get(index));
vh.pos.setTextColor(font_color);
vh.trends.setTextColor(font_color);
vh.pos.setTextColor(settings.getFontColor());
vh.trends.setTextColor(settings.getFontColor());
}
class ItemHolder extends ViewHolder {

View File

@ -1,6 +1,5 @@
package org.nuclearfog.twidda.adapter;
import android.graphics.Color;
import android.text.Spanned;
import android.view.LayoutInflater;
import android.view.View;
@ -21,6 +20,7 @@ import org.nuclearfog.tag.Tagger;
import org.nuclearfog.twidda.R;
import org.nuclearfog.twidda.backend.helper.StringTools;
import org.nuclearfog.twidda.backend.items.Tweet;
import org.nuclearfog.twidda.database.GlobalSettings;
import java.lang.ref.WeakReference;
import java.text.NumberFormat;
@ -32,26 +32,13 @@ public class TweetAdapter extends Adapter<TweetAdapter.ItemHolder> {
private WeakReference<OnItemClickListener> itemClickListener;
private NumberFormat formatter;
private List<Tweet> tweets;
private int highlight;
private int font_color;
private boolean image_load;
private GlobalSettings settings;
public TweetAdapter(OnItemClickListener l) {
public TweetAdapter(OnItemClickListener l, GlobalSettings settings) {
itemClickListener = new WeakReference<>(l);
formatter = NumberFormat.getIntegerInstance();
tweets = new ArrayList<>();
highlight = Color.WHITE;
font_color = Color.WHITE;
image_load = true;
}
public void setColor(int highlight, int font_color) {
this.highlight = highlight;
this.font_color = font_color;
}
public void setImage(boolean image_load) {
this.image_load = image_load;
this.settings = settings;
}
public Tweet get(int index) {
@ -72,10 +59,7 @@ public class TweetAdapter extends Adapter<TweetAdapter.ItemHolder> {
notifyDataSetChanged();
}
public boolean isEmpty() {
return tweets.isEmpty();
}
@MainThread
public void remove(long id) {
int index = -1;
for (int pos = 0; pos < tweets.size() && index < 0; pos++) {
@ -88,6 +72,10 @@ public class TweetAdapter extends Adapter<TweetAdapter.ItemHolder> {
notifyItemRemoved(index);
}
public boolean isEmpty() {
return tweets.isEmpty();
}
@Override
public long getItemId(int index) {
return tweets.get(index).getId();
@ -125,17 +113,17 @@ public class TweetAdapter extends Adapter<TweetAdapter.ItemHolder> {
} else {
vh.retweeter.setText("");
}
Spanned text = Tagger.makeText(tweet.getTweet(), highlight);
Spanned text = Tagger.makeText(tweet.getTweet(), settings.getHighlightColor());
vh.username.setText(tweet.getUser().getUsername());
vh.screenname.setText(tweet.getUser().getScreenname());
vh.tweet.setText(text);
vh.retweet.setText(formatter.format(tweet.getRetweetCount()));
vh.favorite.setText(formatter.format(tweet.getFavorCount()));
vh.time.setText(StringTools.getTimeString(tweet.getTime()));
vh.username.setTextColor(font_color);
vh.screenname.setTextColor(font_color);
vh.tweet.setTextColor(font_color);
vh.time.setTextColor(font_color);
vh.username.setTextColor(settings.getFontColor());
vh.screenname.setTextColor(settings.getFontColor());
vh.tweet.setTextColor(settings.getFontColor());
vh.time.setTextColor(settings.getFontColor());
if (tweet.retweeted())
vh.retweet.setCompoundDrawablesWithIntrinsicBounds(R.drawable.retweet_enabled, 0, 0, 0);
else
@ -152,7 +140,7 @@ public class TweetAdapter extends Adapter<TweetAdapter.ItemHolder> {
vh.screenname.setCompoundDrawablesWithIntrinsicBounds(R.drawable.lock, 0, 0, 0);
else
vh.screenname.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
if (image_load)
if (settings.getImageLoad())
Picasso.get().load(tweet.getUser().getImageLink() + "_mini").into(vh.profile);
else
vh.profile.setImageResource(0);

View File

@ -1,6 +1,5 @@
package org.nuclearfog.twidda.adapter;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
@ -18,6 +17,7 @@ import com.squareup.picasso.Picasso;
import org.nuclearfog.twidda.R;
import org.nuclearfog.twidda.backend.items.TwitterUser;
import org.nuclearfog.twidda.database.GlobalSettings;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
@ -27,14 +27,12 @@ public class UserAdapter extends Adapter<UserAdapter.ItemHolder> {
private WeakReference<OnItemClickListener> itemClickListener;
private List<TwitterUser> users;
private int font_color;
private boolean loadImage;
private GlobalSettings settings;
public UserAdapter(OnItemClickListener l) {
public UserAdapter(OnItemClickListener l, GlobalSettings settings) {
itemClickListener = new WeakReference<>(l);
users = new ArrayList<>();
font_color = Color.WHITE;
loadImage = true;
this.settings = settings;
}
public TwitterUser getData(int index) {
@ -48,13 +46,6 @@ public class UserAdapter extends Adapter<UserAdapter.ItemHolder> {
notifyDataSetChanged();
}
public void setColor(int font_color) {
this.font_color = font_color;
}
public void setImage(boolean image) {
loadImage = image;
}
@Override
public int getItemCount() {
@ -86,11 +77,11 @@ public class UserAdapter extends Adapter<UserAdapter.ItemHolder> {
public void onBindViewHolder(@NonNull ItemHolder vh, int index) {
TwitterUser user = users.get(index);
vh.username.setText(user.getUsername());
vh.username.setTextColor(font_color);
vh.username.setTextColor(settings.getFontColor());
vh.screenname.setText(user.getScreenname());
vh.screenname.setTextColor(font_color);
vh.screenname.setTextColor(settings.getFontColor());
if (loadImage) {
if (settings.getImageLoad()) {
Picasso.get().load(user.getImageLink() + "_mini").into(vh.profileImg);
}
if (user.isVerified()) {

View File

@ -791,11 +791,13 @@ public class TwitterEngine {
TwitterList followUserList(long listId) throws EngineException {
try {
UserList list = twitter.showUserList(listId);
if (list.isFollowing())
list = twitter.destroyUserListSubscription(listId);
else
list = twitter.createUserListSubscription(listId);
return new TwitterList(list, twitterID);
if (list.isFollowing()) {
twitter.destroyUserListSubscription(listId);
return new TwitterList(list, twitterID, false);
} else {
twitter.createUserListSubscription(listId);
return new TwitterList(list, twitterID, true);
}
} catch (TwitterException err) {
throw new EngineException(err);
}

View File

@ -21,17 +21,21 @@ public class TwitterList {
private final int memberCount;
private final int subscriberCnt;
public TwitterList(UserList list, long homeId) {
public TwitterList(UserList list, long homeId, boolean isFollowing) {
id = list.getId();
title = list.getName();
createdAt = list.getCreatedAt().getTime();
description = list.getDescription();
owner = new TwitterUser(list.getUser());
isFollowing = list.isFollowing();
isPrivate = !list.isPublic();
memberCount = list.getMemberCount();
subscriberCnt = list.getSubscriberCount();
enableFollow = homeId != owner.getId();
this.isFollowing = isFollowing;
}
public TwitterList(UserList list, long homeId) {
this(list, homeId, list.isFollowing());
}
/**

View File

@ -52,8 +52,7 @@ public class ListFragment extends Fragment implements OnRefreshListener, ListCli
Context context = inflater.getContext();
GlobalSettings settings = GlobalSettings.getInstance(context);
adapter = new ListAdapter(this);
adapter.setColor(settings.getFontColor());
adapter = new ListAdapter(this, settings);
RecyclerView listView = new RecyclerView(inflater.getContext());
listView.setLayoutManager(new LinearLayoutManager(context));
@ -62,8 +61,8 @@ public class ListFragment extends Fragment implements OnRefreshListener, ListCli
reloadLayout = new SwipeRefreshLayout(context);
reloadLayout.setProgressBackgroundColorSchemeColor(settings.getHighlightColor());
reloadLayout.addView(listView);
reloadLayout.setOnRefreshListener(this);
reloadLayout.addView(listView);
return reloadLayout;
}

View File

@ -42,9 +42,7 @@ public class MessageFragment extends Fragment implements OnRefreshListener, OnIt
Context context = inflater.getContext();
GlobalSettings settings = GlobalSettings.getInstance(context);
adapter = new MessageAdapter(this);
adapter.setColor(settings.getFontColor(), settings.getHighlightColor());
adapter.setImage(settings.getImageLoad());
adapter = new MessageAdapter(this, settings);
RecyclerView list = new RecyclerView(context);
list.setLayoutManager(new LinearLayoutManager(context));
@ -52,10 +50,9 @@ public class MessageFragment extends Fragment implements OnRefreshListener, OnIt
list.setAdapter(adapter);
reload = new SwipeRefreshLayout(context);
reload.addView(list);
reload.setOnRefreshListener(this);
reload.setProgressBackgroundColorSchemeColor(settings.getHighlightColor());
reload.setOnRefreshListener(this);
reload.addView(list);
return reload;
}

View File

@ -39,7 +39,7 @@ public class TrendFragment extends Fragment implements OnRefreshListener, OnItem
Context context = inflater.getContext();
settings = GlobalSettings.getInstance(context);
adapter = new TrendAdapter(this);
adapter = new TrendAdapter(this, settings);
list = new RecyclerView(context);
list.setLayoutManager(new LinearLayoutManager(context));
@ -47,10 +47,8 @@ public class TrendFragment extends Fragment implements OnRefreshListener, OnItem
list.setAdapter(adapter);
reload = new SwipeRefreshLayout(context);
reload.addView(list);
reload.setOnRefreshListener(this);
setColors();
reload.addView(list);
return reload;
}
@ -60,6 +58,7 @@ public class TrendFragment extends Fragment implements OnRefreshListener, OnItem
super.onStart();
if (trendTask == null)
load();
reload.setProgressBackgroundColorSchemeColor(settings.getHighlightColor());
}
@ -93,10 +92,8 @@ public class TrendFragment extends Fragment implements OnRefreshListener, OnItem
@Override
public void onSettingsChange() {
if (adapter != null && reload != null) {
adapter.clear();
setColors();
}
if (adapter != null)
adapter.notifyDataSetChanged();
trendTask = null;
}
@ -140,10 +137,4 @@ public class TrendFragment extends Fragment implements OnRefreshListener, OnItem
trendTask = new TrendLoader(this);
trendTask.execute(settings.getTrendLocation().getWoeId());
}
private void setColors() {
reload.setProgressBackgroundColorSchemeColor(settings.getHighlightColor());
adapter.setColor(settings.getFontColor());
}
}

View File

@ -71,19 +71,16 @@ public class TweetFragment extends Fragment implements OnRefreshListener, OnItem
search = b.getString(KEY_FRAG_TWEET_SEARCH, "");
fixSize = b.getBoolean(KEY_FRAG_TWEET_FIX_LAYOUT, false);
}
settings = GlobalSettings.getInstance(context);
adapter = new TweetAdapter(this);
adapter = new TweetAdapter(this, settings);
list = new RecyclerView(context);
list.setLayoutManager(new LinearLayoutManager(context));
list.setHasFixedSize(fixSize);
list.setAdapter(adapter);
reload = new SwipeRefreshLayout(context);
reload.addView(list);
reload.setOnRefreshListener(this);
setColors();
reload.addView(list);
return reload;
}
@ -93,6 +90,7 @@ public class TweetFragment extends Fragment implements OnRefreshListener, OnItem
super.onStart();
if (tweetTask == null)
load();
reload.setProgressBackgroundColorSchemeColor(settings.getHighlightColor());
}
@ -136,11 +134,8 @@ public class TweetFragment extends Fragment implements OnRefreshListener, OnItem
@Override
public void onSettingsChange() {
if (adapter != null && reload != null) {
adapter.clear();
setColors();
}
tweetTask = null;
if (adapter != null)
adapter.notifyDataSetChanged();
}
@ -221,11 +216,4 @@ public class TweetFragment extends Fragment implements OnRefreshListener, OnItem
break;
}
}
private void setColors() {
reload.setProgressBackgroundColorSchemeColor(settings.getHighlightColor());
adapter.setColor(settings.getHighlightColor(), settings.getFontColor());
adapter.setImage(settings.getImageLoad());
}
}

View File

@ -66,20 +66,16 @@ public class UserFragment extends Fragment implements OnRefreshListener, OnItemC
search = b.getString(KEY_FRAG_USER_SEARCH, "");
fixLayout = b.getBoolean(KEY_FRAG_USER_FIX_LAYOUT, true);
}
adapter = new UserAdapter(this);
adapter.setColor(settings.getFontColor());
adapter.setImage(settings.getImageLoad());
adapter = new UserAdapter(this, settings);
list = new RecyclerView(context);
list.setLayoutManager(new LinearLayoutManager(context));
list.setHasFixedSize(fixLayout);
list.setAdapter(adapter);
reload = new SwipeRefreshLayout(context);
reload.addView(list);
reload.setProgressBackgroundColorSchemeColor(settings.getHighlightColor());
reload.setOnRefreshListener(this);
reload.addView(list);
return reload;
}