bug fix rearrange code

This commit is contained in:
NudeDude 2019-05-05 15:35:14 +02:00
parent a0efc085b4
commit fd63dfb805
19 changed files with 134 additions and 190 deletions

View File

@ -5,7 +5,7 @@
<configuration PROFILE_NAME="Debug" CONFIG_NAME="Debug" /> <configuration PROFILE_NAME="Debug" CONFIG_NAME="Debug" />
</configurations> </configurations>
</component> </component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK"> <component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" /> <output url="file://$PROJECT_DIR$/build/classes" />
</component> </component>
<component name="ProjectType"> <component name="ProjectType">

View File

@ -16,6 +16,15 @@ public class HomePagerAdapter extends FragmentPagerAdapter {
private static final int COUNT = 3; private static final int COUNT = 3;
private final Fragment[] fragments; private final Fragment[] fragments;
private static final Bundle HOME_TL = new Bundle();
private static final Bundle MENT_TL = new Bundle();
static {
HOME_TL.putSerializable("mode", TweetType.HOME);
MENT_TL.putSerializable("mode", TweetType.MENT);
HOME_TL.putBoolean("fix", true);
MENT_TL.putBoolean("fix", true);
}
public HomePagerAdapter(FragmentManager fm) { public HomePagerAdapter(FragmentManager fm) {
super(fm); super(fm);
@ -23,14 +32,6 @@ public class HomePagerAdapter extends FragmentPagerAdapter {
fragments[0] = new TweetListFragment(); fragments[0] = new TweetListFragment();
fragments[1] = new TrendListFragment(); fragments[1] = new TrendListFragment();
fragments[2] = new TweetListFragment(); fragments[2] = new TweetListFragment();
Bundle HOME_TL = new Bundle();
Bundle MENT_TL = new Bundle();
HOME_TL.putSerializable("mode", TweetType.HOME);
MENT_TL.putSerializable("mode", TweetType.MENT);
HOME_TL.putBoolean("fix", true);
MENT_TL.putBoolean("fix", true);
fragments[0].setArguments(HOME_TL); fragments[0].setArguments(HOME_TL);
fragments[2].setArguments(MENT_TL); fragments[2].setArguments(MENT_TL);
} }

View File

@ -1,15 +1,13 @@
package org.nuclearfog.twidda.adapter; package org.nuclearfog.twidda.adapter;
import android.support.v7.widget.RecyclerView;
public interface OnItemClickListener { public interface OnItemClickListener {
/** /**
* Item Click Listener * Item Click Listener
* *
* @param rv RecyclerView
* @param index Position of View * @param index Position of View
*/ */
void onItemClick(RecyclerView rv, int index); void onItemClick(int index);
} }

View File

@ -20,7 +20,7 @@ public class TrendAdapter extends Adapter<TrendAdapter.ItemHolder> {
private WeakReference<OnItemClickListener> itemClickListener; private WeakReference<OnItemClickListener> itemClickListener;
private Trend trends[]; private Trend[] trends;
private int font_color; private int font_color;
@ -62,7 +62,7 @@ public class TrendAdapter extends Adapter<TrendAdapter.ItemHolder> {
RecyclerView rv = (RecyclerView) parent; RecyclerView rv = (RecyclerView) parent;
int position = rv.getChildLayoutPosition(v); int position = rv.getChildLayoutPosition(v);
if (itemClickListener.get() != null) if (itemClickListener.get() != null)
itemClickListener.get().onItemClick(rv, position); itemClickListener.get().onItemClick(position);
} }
}); });
return new ItemHolder(v); return new ItemHolder(v);

View File

@ -94,7 +94,7 @@ public class TweetAdapter extends Adapter<TweetAdapter.ItemHolder> {
RecyclerView rv = (RecyclerView) parent; RecyclerView rv = (RecyclerView) parent;
int position = rv.getChildLayoutPosition(v); int position = rv.getChildLayoutPosition(v);
if (itemClickListener.get() != null) if (itemClickListener.get() != null)
itemClickListener.get().onItemClick(rv, position); itemClickListener.get().onItemClick(position);
} }
}); });
return new ItemHolder(v); return new ItemHolder(v);

View File

@ -0,0 +1,39 @@
package org.nuclearfog.twidda.adapter;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import org.nuclearfog.twidda.fragment.TweetListFragment;
import org.nuclearfog.twidda.fragment.TweetListFragment.TweetType;
public class TweetPagerAdapter extends FragmentPagerAdapter {
private Fragment[] fragments;
public TweetPagerAdapter(FragmentManager fm, long id, String name) {
super(fm);
Bundle param = new Bundle();
param.putSerializable("mode",TweetType.TWEET_ANSR);
param.putString("search", name);
param.putBoolean("fix", false);
param.putLong("id", id);
fragments = new Fragment[1];
fragments[0] = new TweetListFragment();
fragments[0].setArguments(param);
}
@Override
public Fragment getItem(int pos) {
return fragments[pos];
}
@Override
public int getCount() {
return fragments.length;
}
}

View File

@ -77,7 +77,7 @@ public class UserAdapter extends Adapter<UserAdapter.ItemHolder> {
RecyclerView rv = (RecyclerView) parent; RecyclerView rv = (RecyclerView) parent;
int position = rv.getChildLayoutPosition(v); int position = rv.getChildLayoutPosition(v);
if (itemClickListener.get() != null) if (itemClickListener.get() != null)
itemClickListener.get().onItemClick(rv, position); itemClickListener.get().onItemClick(position);
} }
}); });
return new ItemHolder(v); return new ItemHolder(v);

View File

@ -22,7 +22,7 @@ public class ImageLoader extends AsyncTask<String, Void, Boolean> {
private WeakReference<ImageDetail> ui; private WeakReference<ImageDetail> ui;
private ImageAdapter imageAdapter; private ImageAdapter imageAdapter;
private Bitmap images[]; private Bitmap[] images;
public ImageLoader(@NonNull ImageDetail context) { public ImageLoader(@NonNull ImageDetail context) {

View File

@ -3,8 +3,6 @@ package org.nuclearfog.twidda.backend;
import android.content.Intent; import android.content.Intent;
import android.os.AsyncTask; import android.os.AsyncTask;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.RecyclerView;
import android.text.Spannable; import android.text.Spannable;
import android.text.method.LinkMovementMethod; import android.text.method.LinkMovementMethod;
import android.util.Log; import android.util.Log;
@ -13,11 +11,8 @@ import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
import com.squareup.picasso.Picasso;
import org.nuclearfog.tag.Tagger; import org.nuclearfog.tag.Tagger;
import org.nuclearfog.twidda.R; import org.nuclearfog.twidda.R;
import org.nuclearfog.twidda.adapter.TweetAdapter;
import org.nuclearfog.twidda.backend.items.Tweet; import org.nuclearfog.twidda.backend.items.Tweet;
import org.nuclearfog.twidda.database.DatabaseAdapter; import org.nuclearfog.twidda.database.DatabaseAdapter;
import org.nuclearfog.twidda.database.GlobalSettings; import org.nuclearfog.twidda.database.GlobalSettings;
@ -27,19 +22,17 @@ import org.nuclearfog.twidda.window.UserProfile;
import java.lang.ref.WeakReference; import java.lang.ref.WeakReference;
import java.text.NumberFormat; import java.text.NumberFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import twitter4j.TwitterException; import twitter4j.TwitterException;
import com.squareup.picasso.Picasso;
import static android.view.View.VISIBLE; import static android.view.View.VISIBLE;
import static org.nuclearfog.twidda.window.TweetDetail.STAT_CHANGED; import static org.nuclearfog.twidda.window.TweetDetail.STAT_CHANGED;
public class StatusLoader extends AsyncTask<Long, Void, Void> { public class StatusLoader extends AsyncTask<Long, Void, Void> {
public enum Mode { public enum Mode {
LOAD, LOAD,
ANS,
RETWEET, RETWEET,
FAVORITE, FAVORITE,
DELETE DELETE
@ -51,48 +44,31 @@ public class StatusLoader extends AsyncTask<Long, Void, Void> {
private TwitterEngine mTwitter; private TwitterEngine mTwitter;
private TwitterException err; private TwitterException err;
private WeakReference<TweetDetail> ui; private WeakReference<TweetDetail> ui;
private TweetAdapter answerAdapter;
private SimpleDateFormat sdf; private SimpleDateFormat sdf;
private NumberFormat formatter; private NumberFormat formatter;
private List<Tweet> answers;
private Tweet tweet; private Tweet tweet;
private int highlight, font_color;
private boolean toggleImg, toggleAns;
private long homeId; private long homeId;
private int font_color, highlight;
private boolean toggleImg;
public StatusLoader(@NonNull TweetDetail context, Mode mode) { public StatusLoader(@NonNull TweetDetail context, Mode mode) {
mTwitter = TwitterEngine.getInstance(context); mTwitter = TwitterEngine.getInstance(context);
GlobalSettings settings = GlobalSettings.getInstance(context); GlobalSettings settings = GlobalSettings.getInstance(context);
RecyclerView replyList = context.findViewById(R.id.answer_list);
answerAdapter = (TweetAdapter) replyList.getAdapter();
sdf = settings.getDateFormatter(); sdf = settings.getDateFormatter();
formatter = NumberFormat.getIntegerInstance(); formatter = NumberFormat.getIntegerInstance();
font_color = settings.getFontColor(); font_color = settings.getFontColor();
highlight = settings.getHighlightColor(); highlight = settings.getHighlightColor();
toggleImg = settings.getImageLoad(); toggleImg = settings.getImageLoad();
toggleAns = settings.getAnswerLoad();
homeId = settings.getUserId(); homeId = settings.getUserId();
ui = new WeakReference<>(context); ui = new WeakReference<>(context);
answers = new ArrayList<>();
this.mode = mode; this.mode = mode;
} }
@Override
protected void onPreExecute() {
if (ui.get() == null) return;
if (mode == Mode.LOAD && toggleAns) {
SwipeRefreshLayout ansReload = ui.get().findViewById(R.id.answer_reload);
ansReload.setRefreshing(true);
}
}
@Override @Override
protected Void doInBackground(Long... data) { protected Void doInBackground(Long... data) {
final long TWEETID = data[0]; final long TWEETID = data[0];
long sinceId = TWEETID;
boolean updateStatus = false; boolean updateStatus = false;
DatabaseAdapter db = new DatabaseAdapter(ui.get()); DatabaseAdapter db = new DatabaseAdapter(ui.get());
try { try {
@ -100,26 +76,12 @@ public class StatusLoader extends AsyncTask<Long, Void, Void> {
case LOAD: case LOAD:
tweet = db.getStatus(TWEETID); tweet = db.getStatus(TWEETID);
if (tweet != null) { if (tweet != null) {
answers = db.getAnswers(TWEETID);
publishProgress(); publishProgress();
updateStatus = true; updateStatus = true;
} }
case ANS:
tweet = mTwitter.getStatus(TWEETID); tweet = mTwitter.getStatus(TWEETID);
if (!updateStatus)
updateStatus = db.containStatus(TWEETID);
if (mode == Mode.ANS || toggleAns) {
if (answerAdapter.getItemCount() > 0)
sinceId = answerAdapter.getItemId(0);
answers = mTwitter.getAnswers(tweet.getUser().getScreenname(), TWEETID, sinceId);
if (updateStatus && !answers.isEmpty())
db.storeReplies(answers);
answers.addAll(answerAdapter.getData());
}
publishProgress(); publishProgress();
if (!updateStatus)
if (updateStatus)
db.updateStatus(tweet); db.updateStatus(tweet);
break; break;
@ -166,19 +128,11 @@ public class StatusLoader extends AsyncTask<Long, Void, Void> {
protected void onProgressUpdate(Void... v) { protected void onProgressUpdate(Void... v) {
if (ui.get() == null) return; if (ui.get() == null) return;
if (!answers.isEmpty()) {
SwipeRefreshLayout ansReload = ui.get().findViewById(R.id.answer_reload);
ansReload.setRefreshing(false);
answerAdapter.setData(answers);
answerAdapter.notifyDataSetChanged();
}
TextView username = ui.get().findViewById(R.id.usernamedetail); TextView username = ui.get().findViewById(R.id.usernamedetail);
TextView scrName = ui.get().findViewById(R.id.scrnamedetail); TextView scrName = ui.get().findViewById(R.id.scrnamedetail);
TextView replyName = ui.get().findViewById(R.id.answer_reference_detail); TextView replyName = ui.get().findViewById(R.id.answer_reference_detail);
TextView txtRet = ui.get().findViewById(R.id.no_rt_detail); TextView txtRet = ui.get().findViewById(R.id.no_rt_detail);
TextView txtFav = ui.get().findViewById(R.id.no_fav_detail); TextView txtFav = ui.get().findViewById(R.id.no_fav_detail);
TextView txtAns = ui.get().findViewById(R.id.no_ans_detail);
ImageView profile_img = ui.get().findViewById(R.id.profileimage_detail); ImageView profile_img = ui.get().findViewById(R.id.profileimage_detail);
ImageView retweetButton = ui.get().findViewById(R.id.rt_button_detail); ImageView retweetButton = ui.get().findViewById(R.id.rt_button_detail);
ImageView favoriteButton = ui.get().findViewById(R.id.fav_button_detail); ImageView favoriteButton = ui.get().findViewById(R.id.fav_button_detail);
@ -240,7 +194,6 @@ public class StatusLoader extends AsyncTask<Long, Void, Void> {
txtFav.setText(formatter.format(tweet.getFavorCount())); txtFav.setText(formatter.format(tweet.getFavorCount()));
txtRet.setText(formatter.format(tweet.getRetweetCount())); txtRet.setText(formatter.format(tweet.getRetweetCount()));
txtAns.setText(formatter.format(answerAdapter.getItemCount()));
if (tweet.getReplyId() > 1) { if (tweet.getReplyId() > 1) {
String reply = ui.get().getString(R.string.answering); String reply = ui.get().getString(R.string.answering);
@ -283,11 +236,6 @@ public class StatusLoader extends AsyncTask<Long, Void, Void> {
protected void onPostExecute(Void v) { protected void onPostExecute(Void v) {
if (ui.get() == null) return; if (ui.get() == null) return;
if (answers.isEmpty()) {
SwipeRefreshLayout ansReload = ui.get().findViewById(R.id.answer_reload);
ansReload.setRefreshing(false);
}
if (!failure) { if (!failure) {
if (mode == Mode.DELETE) { if (mode == Mode.DELETE) {
Toast.makeText(ui.get(), R.string.tweet_removed, Toast.LENGTH_SHORT).show(); Toast.makeText(ui.get(), R.string.tweet_removed, Toast.LENGTH_SHORT).show();
@ -302,13 +250,4 @@ public class StatusLoader extends AsyncTask<Long, Void, Void> {
} }
} }
} }
@Override
protected void onCancelled() {
if (ui.get() == null) return;
SwipeRefreshLayout ansReload = ui.get().findViewById(R.id.answer_reload);
ansReload.setRefreshing(false);
}
} }

View File

@ -85,7 +85,7 @@ public class TrendListFragment extends Fragment implements OnRefreshListener, On
@Override @Override
public void onItemClick(RecyclerView rv, int pos) { public void onItemClick(int pos) {
if (!reload.isRefreshing()) { if (!reload.isRefreshing()) {
String search = adapter.getData(pos).getName(); String search = adapter.getData(pos).getName();
Intent intent = new Intent(getContext(), SearchPage.class); Intent intent = new Intent(getContext(), SearchPage.class);

View File

@ -62,7 +62,6 @@ public class TweetListFragment extends Fragment implements OnRefreshListener, On
View v = inflater.inflate(R.layout.fragment_list, parent, false); View v = inflater.inflate(R.layout.fragment_list, parent, false);
reload = v.findViewById(R.id.fragment_reload); reload = v.findViewById(R.id.fragment_reload);
reload.setOnRefreshListener(this); reload.setOnRefreshListener(this);
adapter = new TweetAdapter(this); adapter = new TweetAdapter(this);
@ -111,7 +110,7 @@ public class TweetListFragment extends Fragment implements OnRefreshListener, On
break; break;
case TWEET_ANSR: case TWEET_ANSR:
tweetTask = new TweetLoader(root, Mode.DB_ANS); tweetTask = new TweetLoader(root, Mode.DB_ANS);
tweetTask.execute(id); tweetTask.execute(id, search);
break; break;
case SEARCH: case SEARCH:
tweetTask = new TweetLoader(root, Mode.TWEET_SEARCH); tweetTask = new TweetLoader(root, Mode.TWEET_SEARCH);
@ -155,7 +154,7 @@ public class TweetListFragment extends Fragment implements OnRefreshListener, On
break; break;
case TWEET_ANSR: case TWEET_ANSR:
tweetTask = new TweetLoader(root, Mode.TWEET_ANS); tweetTask = new TweetLoader(root, Mode.TWEET_ANS);
tweetTask.execute(id); tweetTask.execute(id, search);
break; break;
case SEARCH: case SEARCH:
tweetTask = new TweetLoader(root, Mode.TWEET_SEARCH); tweetTask = new TweetLoader(root, Mode.TWEET_SEARCH);
@ -170,7 +169,7 @@ public class TweetListFragment extends Fragment implements OnRefreshListener, On
@Override @Override
public void onItemClick(RecyclerView rv, int pos) { public void onItemClick(int pos) {
if (!reload.isRefreshing()) { if (!reload.isRefreshing()) {
Tweet tweet = adapter.getData(pos); Tweet tweet = adapter.getData(pos);
if (tweet.getEmbeddedTweet() != null) if (tweet.getEmbeddedTweet() != null)

View File

@ -102,7 +102,7 @@ public class UserListFragment extends Fragment implements OnRefreshListener, OnI
@Override @Override
public void onItemClick(RecyclerView rv, int pos) { public void onItemClick(int pos) {
if (!reload.isRefreshing()) { if (!reload.isRefreshing()) {
TwitterUser user = adapter.getData(pos); TwitterUser user = adapter.getData(pos);
long userID = user.getId(); long userID = user.getId();

View File

@ -4,6 +4,7 @@ import android.os.AsyncTask;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.v4.widget.SwipeRefreshLayout; import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.ViewGroup; import android.view.ViewGroup;
import org.nuclearfog.twidda.adapter.MessageAdapter; import org.nuclearfog.twidda.adapter.MessageAdapter;
@ -73,13 +74,14 @@ public class MessageLoader extends AsyncTask<Long, Void, Boolean> {
break; break;
} }
} catch (TwitterException err) { } catch (TwitterException err) {
if (err.getErrorCode() == 34) { if (err.getErrorCode() == 34)
db.deleteDm(messageId); db.deleteDm(messageId);
} else { else
this.err = err; this.err = err;
}
return false; return false;
} catch (Exception err) { } catch (Exception err) {
if (err.getMessage() != null)
Log.e("Status Loader", err.getMessage());
return false; return false;
} }
return true; return true;

View File

@ -4,6 +4,7 @@ import android.os.AsyncTask;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.v4.widget.SwipeRefreshLayout; import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View; import android.view.View;
import org.nuclearfog.twidda.R; import org.nuclearfog.twidda.R;
@ -76,6 +77,8 @@ public class TrendLoader extends AsyncTask<Void, Void, Boolean> {
this.err = err; this.err = err;
return false; return false;
} catch (Exception err) { } catch (Exception err) {
if (err.getMessage() != null)
Log.e("Status Loader", err.getMessage());
return false; return false;
} }
return true; return true;

View File

@ -4,8 +4,10 @@ import android.os.AsyncTask;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.v4.widget.SwipeRefreshLayout; import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View; import android.view.View;
import org.nuclearfog.twidda.BuildConfig;
import org.nuclearfog.twidda.R; import org.nuclearfog.twidda.R;
import org.nuclearfog.twidda.adapter.TweetAdapter; import org.nuclearfog.twidda.adapter.TweetAdapter;
import org.nuclearfog.twidda.backend.ErrorHandler; import org.nuclearfog.twidda.backend.ErrorHandler;
@ -65,6 +67,7 @@ public class TweetLoader extends AsyncTask<Object, Void, Boolean> {
@Override @Override
protected Boolean doInBackground(Object[] param) { protected Boolean doInBackground(Object[] param) {
long sinceId = 1; long sinceId = 1;
try { try {
switch (mode) { switch (mode) {
case DB_HOME: case DB_HOME:
@ -95,49 +98,57 @@ public class TweetLoader extends AsyncTask<Object, Void, Boolean> {
break; break;
case DB_TWEETS: case DB_TWEETS:
tweets = db.getUserTweets((long) param[0]); long tweetId = (long) param[0];
tweets = db.getUserTweets(tweetId);
if (!tweets.isEmpty()) if (!tweets.isEmpty())
break; break;
case USR_TWEETS: case USR_TWEETS:
tweetId = (long) param[0];
if (adapter.getItemCount() > 0) if (adapter.getItemCount() > 0)
sinceId = adapter.getItemId(0); sinceId = adapter.getItemId(0);
tweets = mTwitter.getUserTweets((long) param[0], sinceId, 1); tweets = mTwitter.getUserTweets(tweetId, sinceId, 1);
db.storeUserTweets(tweets); db.storeUserTweets(tweets);
tweets.addAll(adapter.getData()); tweets.addAll(adapter.getData());
break; break;
case DB_FAVORS: case DB_FAVORS:
tweets = db.getUserFavs((long) param[0]); tweetId = (long) param[0];
tweets = db.getUserFavs(tweetId);
if (!tweets.isEmpty()) if (!tweets.isEmpty())
break; break;
case USR_FAVORS: case USR_FAVORS:
tweetId = (long) param[0];
if (adapter.getItemCount() > 0) if (adapter.getItemCount() > 0)
sinceId = adapter.getItemId(0); sinceId = adapter.getItemId(0);
tweets = mTwitter.getUserFavs((long) param[0], sinceId, 1); tweets = mTwitter.getUserFavs(tweetId, sinceId, 1);
db.storeUserFavs(tweets, (long) param[0]); db.storeUserFavs(tweets, tweetId);
tweets.addAll(adapter.getData()); tweets.addAll(adapter.getData());
break; break;
case DB_ANS: case DB_ANS:
tweets = db.getAnswers((long) param[0]); tweetId = (long) param[0];
tweets = db.getAnswers(tweetId);
if (tweets.isEmpty() || !settings.getAnswerLoad()) if (tweets.isEmpty() || !settings.getAnswerLoad())
break; break;
case TWEET_ANS: case TWEET_ANS:
String search = (String) param[1];
tweetId = (long) param[0];
if (adapter.getItemCount() > 0) if (adapter.getItemCount() > 0)
sinceId = adapter.getItemId(0); sinceId = adapter.getItemId(0);
tweets = mTwitter.getAnswers((String) param[1], (long) param[0], sinceId); tweets = mTwitter.getAnswers(search, tweetId, sinceId);
if (!tweets.isEmpty() && db.containStatus((long) param[0])) if (!tweets.isEmpty() && db.containStatus(tweetId))
db.storeReplies(tweets); db.storeReplies(tweets);
tweets.addAll(adapter.getData()); tweets.addAll(adapter.getData());
break; break;
case TWEET_SEARCH: case TWEET_SEARCH:
search = (String) param[0];
if (adapter.getItemCount() > 0) if (adapter.getItemCount() > 0)
sinceId = adapter.getItemId(0); sinceId = adapter.getItemId(0);
tweets = mTwitter.searchTweets((String) param[0], sinceId); tweets = mTwitter.searchTweets(search, sinceId);
tweets.addAll(adapter.getData()); tweets.addAll(adapter.getData());
break; break;
} }
@ -145,6 +156,8 @@ public class TweetLoader extends AsyncTask<Object, Void, Boolean> {
this.err = err; this.err = err;
return false; return false;
} catch (Exception err) { } catch (Exception err) {
if (err.getMessage() != null)
Log.e("TweetLoader", err.getMessage());
return false; return false;
} }
return true; return true;

View File

@ -4,6 +4,7 @@ import android.os.AsyncTask;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.v4.widget.SwipeRefreshLayout; import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View; import android.view.View;
import org.nuclearfog.twidda.R; import org.nuclearfog.twidda.R;
@ -81,6 +82,8 @@ public class UserLoader extends AsyncTask<Object, Void, Boolean> {
this.err = err; this.err = err;
return false; return false;
} catch (Exception err) { } catch (Exception err) {
if (err.getMessage() != null)
Log.e("Status Loader", err.getMessage());
return false; return false;
} }
return true; return true;

View File

@ -9,12 +9,9 @@ import android.net.ConnectivityManager;
import android.net.Uri; import android.net.Uri;
import android.os.AsyncTask.Status; import android.os.AsyncTask.Status;
import android.os.Bundle; import android.os.Bundle;
import android.support.v4.widget.SwipeRefreshLayout; import android.support.v4.view.ViewPager;
import android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener;
import android.support.v7.app.AlertDialog.Builder; import android.support.v7.app.AlertDialog.Builder;
import android.support.v7.app.AppCompatActivity; import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar; import android.support.v7.widget.Toolbar;
import android.text.method.ScrollingMovementMethod; import android.text.method.ScrollingMovementMethod;
import android.view.Menu; import android.view.Menu;
@ -28,11 +25,9 @@ import org.nuclearfog.tag.Tagger.OnTagClickListener;
import org.nuclearfog.twidda.BuildConfig; import org.nuclearfog.twidda.BuildConfig;
import org.nuclearfog.twidda.MainActivity; import org.nuclearfog.twidda.MainActivity;
import org.nuclearfog.twidda.R; import org.nuclearfog.twidda.R;
import org.nuclearfog.twidda.adapter.OnItemClickListener; import org.nuclearfog.twidda.adapter.TweetPagerAdapter;
import org.nuclearfog.twidda.adapter.TweetAdapter;
import org.nuclearfog.twidda.backend.StatusLoader; import org.nuclearfog.twidda.backend.StatusLoader;
import org.nuclearfog.twidda.backend.StatusLoader.Mode; import org.nuclearfog.twidda.backend.StatusLoader.Mode;
import org.nuclearfog.twidda.backend.items.Tweet;
import org.nuclearfog.twidda.database.GlobalSettings; import org.nuclearfog.twidda.database.GlobalSettings;
import org.nuclearfog.twidda.window.UserDetail.UserType; import org.nuclearfog.twidda.window.UserDetail.UserType;
@ -40,21 +35,16 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
public class TweetDetail extends AppCompatActivity implements OnClickListener, public class TweetDetail extends AppCompatActivity implements OnClickListener, OnTagClickListener {
OnItemClickListener, OnRefreshListener, OnTagClickListener {
public static final int STAT_CHANGED = 1; public static final int STAT_CHANGED = 1;
private static final int TWEET = 2; private static final int TWEET = 2;
private RecyclerView answer_list;
private TweetAdapter answerAdapter;
private StatusLoader statusAsync;
private GlobalSettings settings;
private SwipeRefreshLayout answerReload;
private ConnectivityManager mConnect; private ConnectivityManager mConnect;
private String username = ""; private StatusLoader statusAsync;
private String username;
private boolean isHome; private boolean isHome;
private long tweetID = 0; private long tweetID;
@Override @Override
@ -65,25 +55,15 @@ public class TweetDetail extends AppCompatActivity implements OnClickListener,
Bundle param = getIntent().getExtras(); Bundle param = getIntent().getExtras();
Uri link = getIntent().getData(); Uri link = getIntent().getData();
if (link != null) { if (param != null && param.containsKey("tweetID") && param.containsKey("username")) {
getTweet(link.getPath());
} else if (param != null) {
if (BuildConfig.DEBUG && param.size() != 2)
throw new AssertionError();
tweetID = param.getLong("tweetID"); tweetID = param.getLong("tweetID");
username = param.getString("username"); username = param.getString("username");
} else { } else if (link != null) {
finish(); getTweet(link.getPath());
} else if(BuildConfig.DEBUG) {
throw new AssertionError();
} }
Toolbar tool = findViewById(R.id.tweet_toolbar);
setSupportActionBar(tool);
if (getSupportActionBar() != null)
getSupportActionBar().setDisplayShowTitleEnabled(false);
settings = GlobalSettings.getInstance(this);
mConnect = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
View root = findViewById(R.id.tweet_layout); View root = findViewById(R.id.tweet_layout);
View retweet = findViewById(R.id.rt_button_detail); View retweet = findViewById(R.id.rt_button_detail);
View favorite = findViewById(R.id.fav_button_detail); View favorite = findViewById(R.id.fav_button_detail);
@ -91,31 +71,35 @@ public class TweetDetail extends AppCompatActivity implements OnClickListener,
View txtFav = findViewById(R.id.no_fav_detail); View txtFav = findViewById(R.id.no_fav_detail);
View answer = findViewById(R.id.answer_button); View answer = findViewById(R.id.answer_button);
TextView tweetTxt = findViewById(R.id.tweet_detailed); TextView tweetTxt = findViewById(R.id.tweet_detailed);
answerReload = findViewById(R.id.answer_reload); Toolbar tool = findViewById(R.id.tweet_toolbar);
answer_list = findViewById(R.id.answer_list); ViewPager pager = findViewById(R.id.tweet_pager);
answer_list.setLayoutManager(new LinearLayoutManager(this));
setSupportActionBar(tool);
if (getSupportActionBar() != null)
getSupportActionBar().setDisplayShowTitleEnabled(false);
GlobalSettings settings = GlobalSettings.getInstance(this);
TweetPagerAdapter adapter = new TweetPagerAdapter(getSupportFragmentManager(), tweetID, username);
mConnect = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
tweetTxt.setMovementMethod(ScrollingMovementMethod.getInstance()); tweetTxt.setMovementMethod(ScrollingMovementMethod.getInstance());
tweetTxt.setLinkTextColor(settings.getHighlightColor()); tweetTxt.setLinkTextColor(settings.getHighlightColor());
root.setBackgroundColor(settings.getBackgroundColor()); root.setBackgroundColor(settings.getBackgroundColor());
answerReload.setProgressBackgroundColorSchemeColor(settings.getHighlightColor()); pager.setOffscreenPageLimit(1);
pager.setAdapter(adapter);
favorite.setOnClickListener(this); favorite.setOnClickListener(this);
retweet.setOnClickListener(this); retweet.setOnClickListener(this);
answerReload.setOnRefreshListener(this);
txtFav.setOnClickListener(this); txtFav.setOnClickListener(this);
txtRt.setOnClickListener(this); txtRt.setOnClickListener(this);
answer.setOnClickListener(this); answer.setOnClickListener(this);
} }
@Override
protected void onStart() { protected void onStart() {
super.onStart(); super.onStart();
if (statusAsync == null) { if (statusAsync == null) {
answerAdapter = new TweetAdapter(this);
answerAdapter.toggleImage(settings.getImageLoad());
answerAdapter.setColor(settings.getHighlightColor(), settings.getFontColor());
answer_list.setAdapter(answerAdapter);
statusAsync = new StatusLoader(this, Mode.LOAD); statusAsync = new StatusLoader(this, Mode.LOAD);
statusAsync.execute(tweetID); statusAsync.execute(tweetID);
} }
@ -247,25 +231,6 @@ public class TweetDetail extends AppCompatActivity implements OnClickListener,
} }
@Override
public void onItemClick(RecyclerView rv, int position) {
if (!answerReload.isRefreshing()) {
Tweet tweet = answerAdapter.getData(position);
Intent intent = new Intent(this, TweetDetail.class);
intent.putExtra("tweetID", tweet.getId());
intent.putExtra("username", tweet.getUser().getScreenname());
startActivityForResult(intent, TWEET);
}
}
@Override
public void onRefresh() {
statusAsync = new StatusLoader(this, Mode.ANS);
statusAsync.execute(tweetID);
}
public void imageClick(String[] mediaLinks) { public void imageClick(String[] mediaLinks) {
Intent image = new Intent(this, ImageDetail.class); Intent image = new Intent(this, ImageDetail.class);
image.putExtra("link", mediaLinks); image.putExtra("link", mediaLinks);

View File

@ -91,7 +91,7 @@
<ImageView <ImageView
android:id="@+id/tweet_locked" android:id="@+id/tweet_locked"
android:layout_width="@dimen/icon_size" android:layout_width="0dp"
android:layout_height="@dimen/icon_size" android:layout_height="@dimen/icon_size"
android:layout_marginEnd="@dimen/icon_margin" android:layout_marginEnd="@dimen/icon_margin"
android:layout_marginRight="@dimen/icon_margin" android:layout_marginRight="@dimen/icon_margin"
@ -188,21 +188,10 @@
android:id="@+id/answer_button" android:id="@+id/answer_button"
android:layout_width="@dimen/tweet_page_icon" android:layout_width="@dimen/tweet_page_icon"
android:layout_height="@dimen/tweet_page_icon" android:layout_height="@dimen/tweet_page_icon"
android:layout_marginEnd="@dimen/icon_margin" android:layout_marginRight="@dimen/tweet_footer_icon_dist"
android:layout_marginRight="@dimen/tweet_icon_margin"
android:contentDescription="@string/answer_button" android:contentDescription="@string/answer_button"
app:srcCompat="@drawable/answer" /> app:srcCompat="@drawable/answer" />
<TextView
android:id="@+id/no_ans_detail"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:ems="10"
android:gravity="center_vertical"
android:singleLine="true"
android:textSize="12sp" />
<ImageView <ImageView
android:id="@+id/rt_button_detail" android:id="@+id/rt_button_detail"
android:layout_width="@dimen/tweet_page_icon" android:layout_width="@dimen/tweet_page_icon"
@ -214,9 +203,9 @@
<TextView <TextView
android:id="@+id/no_rt_detail" android:id="@+id/no_rt_detail"
android:layout_width="0dp" android:layout_width="@dimen/tweet_footer_icon_dist"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_weight="1" android:layout_marginRight="5dp"
android:ems="10" android:ems="10"
android:gravity="center_vertical" android:gravity="center_vertical"
android:singleLine="true" android:singleLine="true"
@ -233,9 +222,8 @@
<TextView <TextView
android:id="@+id/no_fav_detail" android:id="@+id/no_fav_detail"
android:layout_width="0dp" android:layout_width="@dimen/tweet_footer_icon_dist"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_weight="1"
android:ems="10" android:ems="10"
android:gravity="center_vertical" android:gravity="center_vertical"
android:singleLine="true" android:singleLine="true"
@ -243,18 +231,11 @@
</LinearLayout> </LinearLayout>
<android.support.v4.widget.SwipeRefreshLayout <android.support.v4.view.ViewPager
android:id="@+id/answer_reload" android:id="@+id/tweet_pager"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<android.support.v7.widget.RecyclerView
android:id="@+id/answer_list"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" /> android:layout_height="match_parent" />
</android.support.v4.widget.SwipeRefreshLayout>
</LinearLayout> </LinearLayout>
</android.support.v4.widget.NestedScrollView> </android.support.v4.widget.NestedScrollView>

View File

@ -50,6 +50,7 @@
<!--Tabs--> <!--Tabs-->
<dimen name="tab_padding_top">5dp</dimen> <dimen name="tab_padding_top">5dp</dimen>
<dimen name="tweet_footer_icon_dist">100dp</dimen>
<!--Text limitation--> <!--Text limitation-->
<integer name="tweet_max_line">10</integer> <integer name="tweet_max_line">10</integer>