From f4d9ab0a60d5aa0d1c54d1827e2f17697e2b2a96 Mon Sep 17 00:00:00 2001 From: NudeDude Date: Sat, 3 Mar 2018 18:26:54 +0100 Subject: [PATCH] Bugfix Optimizations --- .../nuclearfog/twidda/backend/MainPage.java | 40 ++++---- .../twidda/backend/ProfileLoader.java | 8 +- .../twidda/database/AppDatabase.java | 4 +- .../twidda/database/TweetDatabase.java | 96 ++++++++++++------- .../twidda/viewadapter/TimelineAdapter.java | 7 +- .../nuclearfog/twidda/window/AppSettings.java | 1 + app/src/main/res/layout/trend.xml | 1 - app/src/main/res/layout/tweet.xml | 41 ++++---- app/src/main/res/layout/tweet_detail.xml | 13 ++- app/src/main/res/layout/useritem.xml | 8 +- 10 files changed, 127 insertions(+), 92 deletions(-) diff --git a/app/src/main/java/org/nuclearfog/twidda/backend/MainPage.java b/app/src/main/java/org/nuclearfog/twidda/backend/MainPage.java index dcc5aa71..e5f93d7b 100644 --- a/app/src/main/java/org/nuclearfog/twidda/backend/MainPage.java +++ b/app/src/main/java/org/nuclearfog/twidda/backend/MainPage.java @@ -66,30 +66,30 @@ public class MainPage extends AsyncTask { try { switch (MODE) { case HOME: - timelineAdapter = (TimelineAdapter) timelineList.getAdapter(); - if(timelineAdapter.getCount() == 0) { - TweetDatabase mTweets = new TweetDatabase(mTwitter.getHome(page,id), context,TweetDatabase.HOME_TL,0); - timelineAdapter = new TimelineAdapter(context,mTweets); - } else { - id = timelineAdapter.getItemId(0); - timelineAdapter.getData().add(mTwitter.getHome(page,id)); - } - break; + timelineAdapter = (TimelineAdapter) timelineList.getAdapter(); + if(timelineAdapter != null && timelineAdapter.getCount() != 0) { + id = timelineAdapter.getItemId(0); + timelineAdapter.getData().add(mTwitter.getHome(page,id)); + } else { + TweetDatabase mTweets = new TweetDatabase(mTwitter.getHome(page,id), context,TweetDatabase.HOME_TL,0); + timelineAdapter = new TimelineAdapter(context,mTweets); + } + break; case TRND: - trendsAdapter = new TrendAdapter(context, new TrendDatabase(mTwitter.getTrends(woeid),context)); - break; + trendsAdapter = new TrendAdapter(context, new TrendDatabase(mTwitter.getTrends(woeid),context)); + break; case MENT: - mentionAdapter = (TimelineAdapter) mentionList.getAdapter(); - if(mentionAdapter.getCount() == 0) { - TweetDatabase mention = new TweetDatabase(mTwitter.getMention(page,id), context,TweetDatabase.GET_MENT,0); - mentionAdapter = new TimelineAdapter(context,mention); - } else { - id = mentionAdapter.getItemId(0); - mentionAdapter.getData().add(mTwitter.getMention(page,id)); - } - break; + mentionAdapter = (TimelineAdapter) mentionList.getAdapter(); + if(mentionAdapter != null && mentionAdapter.getCount() != 0) { + id = mentionAdapter.getItemId(0); + mentionAdapter.getData().add(mTwitter.getMention(page,id)); + } else { + TweetDatabase mention = new TweetDatabase(mTwitter.getMention(page,id), context,TweetDatabase.GET_MENT,0); + mentionAdapter = new TimelineAdapter(context,mention); + } + break; } } catch (Exception e){ e.printStackTrace(); diff --git a/app/src/main/java/org/nuclearfog/twidda/backend/ProfileLoader.java b/app/src/main/java/org/nuclearfog/twidda/backend/ProfileLoader.java index b37fb95a..21eb63d7 100644 --- a/app/src/main/java/org/nuclearfog/twidda/backend/ProfileLoader.java +++ b/app/src/main/java/org/nuclearfog/twidda/backend/ProfileLoader.java @@ -117,12 +117,12 @@ public class ProfileLoader extends AsyncTask { else if(MODE == GET_TWEETS) { homeTl = (TimelineAdapter) profileTweets.getAdapter(); - if(homeTl != null) { - id = homeTl.getItemId(0); - homeTl.getData().add(mTwitter.getUserTweets(userId,args[2],id)); - } else { + if(homeTl == null || homeTl.getCount() == 0) { TweetDatabase hTweets = new TweetDatabase(mTwitter.getUserTweets(userId,args[2],id),context,TweetDatabase.USER_TL,userId); homeTl = new TimelineAdapter(context,hTweets); + } else { + id = homeTl.getItemId(0); + homeTl.getData().add(mTwitter.getUserTweets(userId,args[2],id)); } } else if(MODE == GET_FAVS) diff --git a/app/src/main/java/org/nuclearfog/twidda/database/AppDatabase.java b/app/src/main/java/org/nuclearfog/twidda/database/AppDatabase.java index dc565cb5..34ce3128 100644 --- a/app/src/main/java/org/nuclearfog/twidda/database/AppDatabase.java +++ b/app/src/main/java/org/nuclearfog/twidda/database/AppDatabase.java @@ -12,9 +12,9 @@ public class AppDatabase extends SQLiteOpenHelper "location TEXT, link TEXT, verify INTEGER);"; private static final String tQuery = "CREATE TABLE IF NOT EXISTS tweet (" + - "tweetID INTEGER PRIMARY KEY, userID INTEGER," + + "tweetID INTEGER PRIMARY KEY, userID INTEGER, retweeter TEXT," + "time INTEGER, tweet TEXT, retweet INTEGER, favorite INTEGER," + - "answers INTEGER, FOREIGN KEY (userID) REFERENCES user(userID));"; + "FOREIGN KEY (userID) REFERENCES user(userID));"; private static final String trQuery = "CREATE TABLE IF NOT EXISTS trend (" + "trendpos INTEGER PRIMARY KEY, trendname TEXT, trendlink TEXT);"; diff --git a/app/src/main/java/org/nuclearfog/twidda/database/TweetDatabase.java b/app/src/main/java/org/nuclearfog/twidda/database/TweetDatabase.java index 4a6b6f63..2b07cec1 100644 --- a/app/src/main/java/org/nuclearfog/twidda/database/TweetDatabase.java +++ b/app/src/main/java/org/nuclearfog/twidda/database/TweetDatabase.java @@ -15,17 +15,16 @@ import twitter4j.Status; import twitter4j.User; public class TweetDatabase { - public static final int HOME_TL = 0; // GET HOME TIMELINE - public static final int FAV_TL = 1; // GET FAVORITE TL - public static final int USER_TL = 2; // GET USERS TWEET TL @userID - public static final int GET_TWEET = 3; // GET TWEET @ userID - public static final int GET_MENT = 4; // GET MENTION TL + public static final int HOME_TL = 0; + public static final int FAV_TL = 1; + public static final int USER_TL = 2; + public static final int GET_TWEET = 3; + public static final int GET_MENT = 4; private AppDatabase dataHelper; - private List user,scrname,tweet,pbLink; + private List user,scrname,tweet,pbLink,retweeter; private List userId,tweetId,timeMillis; - private List noRT,noFav,noAns, verify; - private SharedPreferences settings; + private List noRT,noFav, verify; private boolean toggleImg; private int size = 0; private int mode = 0; @@ -110,6 +109,15 @@ public class TweetDatabase { for(int pos = 0; pos < stats.size(); pos++) { Status stat = stats.get(pos); User usr = stat.getUser(); + Status rtStat = stat.getRetweetedStatus(); + + if(rtStat != null) { + tweet.put("retweeter",usr.getScreenName()); + stat = rtStat; + usr = rtStat.getUser(); + } else { + tweet.put("retweeter","\0"); + } user.put("userID",usr.getId()); user.put("username", usr.getName()); @@ -126,7 +134,6 @@ public class TweetDatabase { tweet.put("tweet", stat.getText()); tweet.put("retweet", stat.getRetweetCount()); tweet.put("favorite", stat.getFavoriteCount()); - tweet.put("answers", 0); home.put("tweetID", stat.getId()); fav.put("tweetID", stat.getId()); @@ -182,30 +189,30 @@ public class TweetDatabase { if(cursor.moveToFirst()) { do { - index = cursor.getColumnIndex("time"); // time + index = cursor.getColumnIndex("time"); timeMillis.add(cursor.getLong(index)); - index = cursor.getColumnIndex("tweet"); // tweet - tweet.add( cursor.getString(index) ); - index = cursor.getColumnIndex("retweet"); // retweet - noRT.add( cursor.getInt(index) ); - index = cursor.getColumnIndex("favorite"); // fav - noFav.add( cursor.getInt(index) ); - index = cursor.getColumnIndex("answers"); // answers - noAns.add(cursor.getInt(index)); - index = cursor.getColumnIndex("username"); // user - user.add(cursor.getString(index) ); - index = cursor.getColumnIndex("scrname"); // username - scrname.add(cursor.getString(index) ); - index = cursor.getColumnIndex("verify"); // VERIFIED + index = cursor.getColumnIndex("tweet"); + tweet.add( cursor.getString(index)); + index = cursor.getColumnIndex("retweet"); + noRT.add( cursor.getInt(index)); + index = cursor.getColumnIndex("favorite"); + noFav.add( cursor.getInt(index)); + index = cursor.getColumnIndex("username"); + user.add(cursor.getString(index)); + index = cursor.getColumnIndex("scrname"); + scrname.add(cursor.getString(index)); + index = cursor.getColumnIndex("verify"); verify.add(cursor.getInt(index)); - index = cursor.getColumnIndex("pbLink"); // image - pbLink.add(cursor.getString(index) ); - index = cursor.getColumnIndex("userID"); // UserID - userId.add(cursor.getLong(index) ); - index = cursor.getColumnIndex("tweetID"); // tweetID - tweetId.add(cursor.getLong(index) ); + index = cursor.getColumnIndex("pbLink"); + pbLink.add(cursor.getString(index)); + index = cursor.getColumnIndex("userID"); + userId.add(cursor.getLong(index)); + index = cursor.getColumnIndex("tweetID"); + tweetId.add(cursor.getLong(index)); + index = cursor.getColumnIndex("retweeter"); + retweeter.add(cursor.getString(index)); size++; - } while(cursor.moveToNext() && size < limit); + } while(cursor.moveToNext() && size < limit); } cursor.close(); db.close(); @@ -216,7 +223,6 @@ public class TweetDatabase { } public int getRetweet(int pos){return noRT.get(pos);} public int getFavorite(int pos){return noFav.get(pos);} - public int getAnswer(int pos){return noAns.get(pos);} public long getUserID(int pos){return userId.get(pos);} public long getTweetId(int pos){return tweetId.get(pos);} public long getTime(int pos){return timeMillis.get(pos);} @@ -224,9 +230,13 @@ public class TweetDatabase { public String getScreenname(int pos){return scrname.get(pos);} public String getTweet(int pos){return tweet.get(pos);} public String getDate(int pos){return timeToString(getTime(pos));} - public String getPbLink (int pos){return pbLink.get(pos);} + public String getPbLink(int pos){return pbLink.get(pos);} public boolean loadImages(){return toggleImg;} public boolean isVerified(int pos){return verify.get(pos) == 1;} + public String getRetweeter(int pos) { + if(retweeter.get(pos).trim().isEmpty()) return ""; + else return " RT @"+retweeter.get(pos); + } /** * Convert Time to String @@ -260,7 +270,7 @@ public class TweetDatabase { private void initialize(Context c) { dataHelper = AppDatabase.getInstance(c); - settings = c.getSharedPreferences("settings", 0); + SharedPreferences settings = c.getSharedPreferences("settings", 0); limit = settings.getInt("limit", 200); toggleImg = settings.getBoolean("image_load", true); initArray(); @@ -268,13 +278,20 @@ public class TweetDatabase { private void insert(List stats) { for(Status stat: stats) { + Status rtStat = stat.getRetweetedStatus(); User usr = stat.getUser(); + if(rtStat != null) { + retweeter.add(usr.getScreenName()); + stat = rtStat; + usr = rtStat.getUser(); + } else { + retweeter.add(" "); + } user.add(usr.getName()); scrname.add('@'+usr.getScreenName()); tweet.add(stat.getText()); noRT.add(stat.getRetweetCount()); noFav.add(stat.getFavoriteCount()); - noAns.add(0); // TODO userId.add(usr.getId()); pbLink.add(usr.getMiniProfileImageURL()); tweetId.add(stat.getId()); @@ -287,13 +304,20 @@ public class TweetDatabase { private void insertNew(List stats) { for(int index = stats.size()-1 ; index >=0 ; index--) { Status stat = stats.get(index); + Status rtStat = stat.getRetweetedStatus(); User usr = stat.getUser(); + if(rtStat != null) { + retweeter.add(usr.getScreenName()); + stat = rtStat; + usr = rtStat.getUser(); + } else { + retweeter.add(0,"\0"); + } user.add(0,usr.getName()); scrname.add(0,'@'+usr.getScreenName()); tweet.add(0,stat.getText()); noRT.add(0,stat.getRetweetCount()); noFav.add(0,stat.getFavoriteCount()); - noAns.add(0,0); // TODO userId.add(0,usr.getId()); pbLink.add(0,usr.getMiniProfileImageURL()); tweetId.add(0,stat.getId()); @@ -309,11 +333,11 @@ public class TweetDatabase { tweet = new ArrayList<>(); noRT = new ArrayList<>(); noFav = new ArrayList<>(); - noAns = new ArrayList<>(); userId = new ArrayList<>(); pbLink = new ArrayList<>(); tweetId = new ArrayList<>(); verify = new ArrayList<>(); + retweeter = new ArrayList<>(); timeMillis = new ArrayList<>(); } } \ No newline at end of file diff --git a/app/src/main/java/org/nuclearfog/twidda/viewadapter/TimelineAdapter.java b/app/src/main/java/org/nuclearfog/twidda/viewadapter/TimelineAdapter.java index 4f619570..5f7eecd7 100644 --- a/app/src/main/java/org/nuclearfog/twidda/viewadapter/TimelineAdapter.java +++ b/app/src/main/java/org/nuclearfog/twidda/viewadapter/TimelineAdapter.java @@ -1,6 +1,7 @@ package org.nuclearfog.twidda.viewadapter; import android.content.Context; +import android.media.Image; import android.support.annotation.NonNull; import android.text.SpannableStringBuilder; import android.text.Spanned; @@ -71,13 +72,15 @@ public class TimelineAdapter extends ArrayAdapter implements View.OnClickListene ((TextView) v.findViewById(R.id.tweettext)).setText(highlight(mTweets.getTweet(position))); ((TextView) v.findViewById(R.id.retweet_number)).setText(retweetStr); ((TextView) v.findViewById(R.id.favorite_number)).setText(favoriteStr); + ((TextView) v.findViewById(R.id.retweeter)).setText(mTweets.getRetweeter(position)); ((TextView) v.findViewById(R.id.time)).setText(mTweets.getDate(position)); ((TextView) v.findViewById(R.id.tweettext)).setTextColor(textColor); ImageView pb = v.findViewById(R.id.tweetPb); + ImageView verify = v.findViewById(R.id.list_verify); if(mTweets.isVerified(position)) { - v.findViewById(R.id.list_verify).setVisibility(View.VISIBLE); + verify.setVisibility(ImageView.VISIBLE); } else { - v.findViewById(R.id.list_verify).setVisibility(View.INVISIBLE); + verify.setVisibility(ImageView.INVISIBLE); } if(mTweets.loadImages()) { Picasso.with(context).load(mTweets.getPbLink(position)).into(pb); diff --git a/app/src/main/java/org/nuclearfog/twidda/window/AppSettings.java b/app/src/main/java/org/nuclearfog/twidda/window/AppSettings.java index b138ac20..95f3c2a5 100644 --- a/app/src/main/java/org/nuclearfog/twidda/window/AppSettings.java +++ b/app/src/main/java/org/nuclearfog/twidda/window/AppSettings.java @@ -190,5 +190,6 @@ public class AppSettings extends AppCompatActivity implements View.OnClickListen edit.putBoolean("image_load", imgEnabled); edit.apply(); mColor.commit(); + Toast.makeText(getApplicationContext(), "Gespeichert", Toast.LENGTH_SHORT).show(); } } \ No newline at end of file diff --git a/app/src/main/res/layout/trend.xml b/app/src/main/res/layout/trend.xml index 62ea0a62..a6a7f9d2 100644 --- a/app/src/main/res/layout/trend.xml +++ b/app/src/main/res/layout/trend.xml @@ -2,7 +2,6 @@ - - + + + android:layout_weight="1" + android:singleLine="true" /> + android:textAlignment="gravity" + android:textSize="12sp" /> + +