From 0df58496498442be084b487f606d71e3e58f81da Mon Sep 17 00:00:00 2001 From: NudeDude Date: Fri, 23 Mar 2018 17:10:23 +0100 Subject: [PATCH] Bugfix Performance raised --- .../org/nuclearfog/twidda/MainActivity.java | 10 ++--- .../nuclearfog/twidda/backend/MainPage.java | 12 +++--- .../twidda/backend/ProfileLoader.java | 26 +++++++------ .../twidda/backend/StatusLoader.java | 8 ++-- .../twidda/backend/TwitterEngine.java | 37 +++++++------------ ...weetDatabase.java => DatabaseAdapter.java} | 8 ++-- .../nuclearfog/twidda/window/UserProfile.java | 10 ++--- 7 files changed, 54 insertions(+), 57 deletions(-) rename app/src/main/java/org/nuclearfog/twidda/database/{TweetDatabase.java => DatabaseAdapter.java} (98%) diff --git a/app/src/main/java/org/nuclearfog/twidda/MainActivity.java b/app/src/main/java/org/nuclearfog/twidda/MainActivity.java index e3c8e259..162fd138 100644 --- a/app/src/main/java/org/nuclearfog/twidda/MainActivity.java +++ b/app/src/main/java/org/nuclearfog/twidda/MainActivity.java @@ -19,7 +19,7 @@ import android.widget.TabHost.TabSpec; import org.nuclearfog.twidda.backend.listitems.*; import org.nuclearfog.twidda.database.TrendDatabase; -import org.nuclearfog.twidda.database.TweetDatabase; +import org.nuclearfog.twidda.database.DatabaseAdapter; import org.nuclearfog.twidda.backend.Registration; import org.nuclearfog.twidda.backend.MainPage; import org.nuclearfog.twidda.viewadapter.TimelineRecycler; @@ -328,14 +328,14 @@ public class MainActivity extends AppCompatActivity implements TimelineRecycler mentRc = (TimelineRecycler) mentionList.getAdapter(); if(tlRc == null || tlRc.getItemCount() == 0) { - TweetDatabase tweetDeck = new TweetDatabase(getApplicationContext()); - List tweets = tweetDeck.load(TweetDatabase.HOME, -1L); + DatabaseAdapter tweetDeck = new DatabaseAdapter(getApplicationContext()); + List tweets = tweetDeck.load(DatabaseAdapter.HOME, -1L); tlRc = new TimelineRecycler(tweets, MainActivity.this); timelineList.setAdapter(tlRc); } if(mentRc == null || mentRc.getItemCount() == 0) { - TweetDatabase mentDeck = new TweetDatabase(getApplicationContext()); - List tweets = mentDeck.load(TweetDatabase.MENT,-1L); + DatabaseAdapter mentDeck = new DatabaseAdapter(getApplicationContext()); + List tweets = mentDeck.load(DatabaseAdapter.MENT,-1L); mentRc = new TimelineRecycler(tweets, MainActivity.this); mentionList.setAdapter(mentRc); } 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 e453052a..91a91700 100644 --- a/app/src/main/java/org/nuclearfog/twidda/backend/MainPage.java +++ b/app/src/main/java/org/nuclearfog/twidda/backend/MainPage.java @@ -1,7 +1,7 @@ package org.nuclearfog.twidda.backend; import org.nuclearfog.twidda.database.TrendDatabase; -import org.nuclearfog.twidda.database.TweetDatabase; +import org.nuclearfog.twidda.database.DatabaseAdapter; import org.nuclearfog.twidda.MainActivity; import org.nuclearfog.twidda.R; import org.nuclearfog.twidda.viewadapter.TimelineRecycler; @@ -62,7 +62,7 @@ public class MainPage extends AsyncTask { int page = args[1]; long id = 1L; try { - TweetDatabase tweetDb = new TweetDatabase(ui.get()); + DatabaseAdapter tweetDb = new DatabaseAdapter(ui.get()); switch (MODE) { case HOME: List tweets; @@ -70,11 +70,11 @@ public class MainPage extends AsyncTask { if(timelineAdapter != null && timelineAdapter.getItemCount() > 0) { id = timelineAdapter.getItemId(0); tweets = mTwitter.getHome(page,id); - tweetDb.store(tweets, TweetDatabase.HOME,-1L); + tweetDb.store(tweets, DatabaseAdapter.HOME,-1L); tweets.addAll(timelineAdapter.getData()); } else { tweets = mTwitter.getHome(page,id); - tweetDb.store(tweets, TweetDatabase.HOME,-1L); + tweetDb.store(tweets, DatabaseAdapter.HOME,-1L); } timelineAdapter = new TimelineRecycler(tweets, ui.get()); timelineAdapter.setColor(highlight, font); @@ -95,11 +95,11 @@ public class MainPage extends AsyncTask { if(mentionAdapter != null && mentionAdapter.getItemCount() != 0) { id = mentionAdapter.getItemId(0); mention = mTwitter.getMention(page,id); - tweetDb.store(mention,TweetDatabase.MENT,-1L); + tweetDb.store(mention, DatabaseAdapter.MENT,-1L); mention.addAll(mentionAdapter.getData()); } else { mention = mTwitter.getMention(page,id); - tweetDb.store(mention,TweetDatabase.MENT,-1L); + tweetDb.store(mention, DatabaseAdapter.MENT,-1L); } mentionAdapter = new TimelineRecycler(mention, ui.get()); mentionAdapter.setColor(highlight, font); 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 e353261a..405442fb 100644 --- a/app/src/main/java/org/nuclearfog/twidda/backend/ProfileLoader.java +++ b/app/src/main/java/org/nuclearfog/twidda/backend/ProfileLoader.java @@ -12,7 +12,7 @@ import android.widget.TextView; import android.widget.Toast; import org.nuclearfog.twidda.R; -import org.nuclearfog.twidda.database.TweetDatabase; +import org.nuclearfog.twidda.database.DatabaseAdapter; import org.nuclearfog.twidda.viewadapter.TimelineRecycler; import org.nuclearfog.twidda.window.ColorPreferences; import org.nuclearfog.twidda.window.UserProfile; @@ -73,13 +73,17 @@ public class ProfileLoader extends AsyncTask { isHome = TwitterEngine.getHomeId() == userId; if(!isHome) { - isFollowing = mTwitter.getConnection(userId, true); - isFollowed = mTwitter.getConnection(userId, false); - muted = mTwitter.getBlocked(userId); + boolean connection[] = mTwitter.getConnection(userId); + isFollowing = connection[0]; + isFollowed = connection[1]; + muted = connection[2]; } if(MODE == GET_INFORMATION) { - TwitterUser user = mTwitter.getUser(userId); + DatabaseAdapter userdb = new DatabaseAdapter(ui.get()); + TwitterUser user = userdb.getUser(userId); + if(user == null) + user = mTwitter.getUser(userId); screenName = user.screenname; username = user.username; description = user.bio; @@ -97,17 +101,17 @@ public class ProfileLoader extends AsyncTask { } else if(MODE == GET_TWEETS) { - TweetDatabase tweetDb = new TweetDatabase(ui.get()); + DatabaseAdapter tweetDb = new DatabaseAdapter(ui.get()); List tweets; homeTl = (TimelineRecycler) profileTweets.getAdapter(); if(homeTl != null && homeTl.getItemCount() > 0) { id = homeTl.getItemId(0); tweets = mTwitter.getUserTweets(userId,args[2],id); - tweetDb.store(tweets,TweetDatabase.TWEET, userId); + tweetDb.store(tweets, DatabaseAdapter.TWEET, userId); tweets.addAll(homeTl.getData()); } else { tweets = mTwitter.getUserTweets(userId,args[2],id); - tweetDb.store(tweets,TweetDatabase.TWEET, userId); + tweetDb.store(tweets, DatabaseAdapter.TWEET, userId); } homeTl = new TimelineRecycler(tweets,ui.get()); homeTl.setColor(highlight,font); @@ -115,17 +119,17 @@ public class ProfileLoader extends AsyncTask { } else if(MODE == GET_FAVS) { - TweetDatabase tweetDb = new TweetDatabase(ui.get()); + DatabaseAdapter tweetDb = new DatabaseAdapter(ui.get()); List favorits; homeFav = (TimelineRecycler) profileFavorits.getAdapter(); if(homeFav != null && homeFav.getItemCount() > 0) { id = homeFav.getItemId(0); favorits = mTwitter.getUserFavs(userId,args[2],id); - tweetDb.store(favorits,TweetDatabase.FAVT, userId); + tweetDb.store(favorits, DatabaseAdapter.FAVT, userId); favorits.addAll(homeFav.getData()); } else { favorits = mTwitter.getUserFavs(userId,args[2],id); - tweetDb.store(favorits,TweetDatabase.FAVT, userId); + tweetDb.store(favorits, DatabaseAdapter.FAVT, userId); } homeFav = new TimelineRecycler(favorits,ui.get()); homeFav.setColor(highlight,font); diff --git a/app/src/main/java/org/nuclearfog/twidda/backend/StatusLoader.java b/app/src/main/java/org/nuclearfog/twidda/backend/StatusLoader.java index 1fc2acfb..eecea269 100644 --- a/app/src/main/java/org/nuclearfog/twidda/backend/StatusLoader.java +++ b/app/src/main/java/org/nuclearfog/twidda/backend/StatusLoader.java @@ -30,7 +30,7 @@ import java.util.List; import twitter4j.TwitterException; -import org.nuclearfog.twidda.database.TweetDatabase; +import org.nuclearfog.twidda.database.DatabaseAdapter; import org.nuclearfog.twidda.R; import org.nuclearfog.twidda.viewadapter.TimelineRecycler; import org.nuclearfog.twidda.window.ColorPreferences; @@ -120,7 +120,7 @@ public class StatusLoader extends AsyncTask implements View.On else if(mode == RETWEET) { if(retweeted) { mTwitter.retweet(tweetID, true); - new TweetDatabase(ui.get()).removeStatus(tweetID); + new DatabaseAdapter(ui.get()).removeStatus(tweetID); retweeted = false; rt--; } else { @@ -156,12 +156,12 @@ public class StatusLoader extends AsyncTask implements View.On } else if(mode == DELETE) { mTwitter.deleteTweet(tweetID); - new TweetDatabase(ui.get()).removeStatus(tweetID); + new DatabaseAdapter(ui.get()).removeStatus(tweetID); } }catch(TwitterException e) { int err = e.getErrorCode(); if(err == 144) { // gelöscht - new TweetDatabase(ui.get()).removeStatus(tweetID); + new DatabaseAdapter(ui.get()).removeStatus(tweetID); } errMSG = e.getMessage(); return ERROR; diff --git a/app/src/main/java/org/nuclearfog/twidda/backend/TwitterEngine.java b/app/src/main/java/org/nuclearfog/twidda/backend/TwitterEngine.java index 8c36c269..e8dcd3c3 100644 --- a/app/src/main/java/org/nuclearfog/twidda/backend/TwitterEngine.java +++ b/app/src/main/java/org/nuclearfog/twidda/backend/TwitterEngine.java @@ -17,6 +17,7 @@ import twitter4j.MediaEntity; import twitter4j.Paging; import twitter4j.Query; import twitter4j.QueryResult; +import twitter4j.Relationship; import twitter4j.Status; import twitter4j.StatusUpdate; import twitter4j.Trends; @@ -241,28 +242,18 @@ public class TwitterEngine { /** - * Get Connection between Home and another User - * @param id User ID - * @param following mode following = true , follower = false - * @return result - * @throws TwitterException if Access is unavailable + * Efficient Access of Connection Information + * @param id User ID compared with Home ID + * @return array of connection states Index 0: Following, 1: Follow, 2: blocked + * @throws TwitterException if Connection is unavailable */ - public boolean getConnection(long id,boolean following) throws TwitterException { - if(following) - return twitter.showFriendship(twitterID,id).isSourceFollowingTarget(); - else - return twitter.showFriendship(twitterID,id).isTargetFollowingSource(); - } - - - /** - * Get Block Status - * @param id User ID - * @return if target is blocked - * @throws TwitterException if Access is unavailable - */ - public boolean getBlocked(long id) throws TwitterException { - return twitter.showFriendship(twitter.getId(),id).isSourceBlockingTarget(); + public boolean[] getConnection(long id) throws TwitterException { + Relationship connect = twitter.showFriendship(twitterID,id); + boolean connection[] = new boolean[3]; + connection[0] = connect.isSourceFollowingTarget(); + connection[1] = connect.isTargetFollowingSource(); + connection[2] = connect.isSourceBlockingTarget(); + return connection; } @@ -273,7 +264,7 @@ public class TwitterEngine { * @throws TwitterException if Access is unavailable */ public boolean toggleFollow(long id) throws TwitterException { - if(getConnection(id,false)) { + if(getConnection(id)[1]) { twitter.destroyFriendship(id); return false; } else { @@ -290,7 +281,7 @@ public class TwitterEngine { * @throws TwitterException if Access is unavailable */ public boolean toggleBlock(long id) throws TwitterException { - if(getBlocked(id)){ + if(getConnection(id)[2]){ twitter.destroyBlock(id); return false; } else { diff --git a/app/src/main/java/org/nuclearfog/twidda/database/TweetDatabase.java b/app/src/main/java/org/nuclearfog/twidda/database/DatabaseAdapter.java similarity index 98% rename from app/src/main/java/org/nuclearfog/twidda/database/TweetDatabase.java rename to app/src/main/java/org/nuclearfog/twidda/database/DatabaseAdapter.java index 1f803d52..d8eafe64 100644 --- a/app/src/main/java/org/nuclearfog/twidda/database/TweetDatabase.java +++ b/app/src/main/java/org/nuclearfog/twidda/database/DatabaseAdapter.java @@ -8,7 +8,7 @@ import android.database.sqlite.SQLiteDatabase; import java.util.ArrayList; import java.util.List; -public class TweetDatabase { +public class DatabaseAdapter { public static final int FAVT = 1; public static final int TWEET = 2; @@ -19,7 +19,7 @@ public class TweetDatabase { private List tweetlist; private Context context; - public TweetDatabase(Context context) { + public DatabaseAdapter(Context context) { dataHelper = AppDatabase.getInstance(context); tweetlist = new ArrayList<>(); this.context = context; @@ -193,8 +193,10 @@ public class TweetDatabase { private void storeStatus(Tweet tweet, SQLiteDatabase db, long retweetID) { ContentValues status = new ContentValues(); ContentValues user = new ContentValues(); + TwitterUser mUser = tweet.user; status.put("tweetID", tweet.tweetID); + status.put("userID", mUser.userID); status.put("time", tweet.time); status.put("tweet", tweet.tweet); status.put("retweet", tweet.retweet); @@ -205,7 +207,7 @@ public class TweetDatabase { status.put("replyname", tweet.replyName); status.put("retweeted",tweet.retweeted); status.put("favorized", tweet.favorized); - TwitterUser mUser = tweet.user; + user.put("userID", mUser.userID); user.put("username", mUser.username); user.put("scrname", mUser.screenname.substring(1)); diff --git a/app/src/main/java/org/nuclearfog/twidda/window/UserProfile.java b/app/src/main/java/org/nuclearfog/twidda/window/UserProfile.java index 8fc11411..502164f8 100644 --- a/app/src/main/java/org/nuclearfog/twidda/window/UserProfile.java +++ b/app/src/main/java/org/nuclearfog/twidda/window/UserProfile.java @@ -18,7 +18,7 @@ import android.widget.TextView; import org.nuclearfog.twidda.R; import org.nuclearfog.twidda.backend.listitems.*; -import org.nuclearfog.twidda.database.TweetDatabase; +import org.nuclearfog.twidda.database.DatabaseAdapter; import org.nuclearfog.twidda.backend.ProfileLoader; import org.nuclearfog.twidda.viewadapter.TimelineRecycler; @@ -207,10 +207,10 @@ public class UserProfile extends AppCompatActivity implements View.OnClickListen int background = mcolor.getColor(ColorPreferences.BACKGROUND); int font_color = mcolor.getColor(ColorPreferences.FONT_COLOR); - TweetDatabase mTweet = new TweetDatabase(getApplicationContext()); - TweetDatabase fTweet = new TweetDatabase(getApplicationContext()); - List userTweets = mTweet.load(TweetDatabase.TWEET,userId); - List userFavorit = fTweet.load(TweetDatabase.FAVT,userId); + DatabaseAdapter mTweet = new DatabaseAdapter(getApplicationContext()); + DatabaseAdapter fTweet = new DatabaseAdapter(getApplicationContext()); + List userTweets = mTweet.load(DatabaseAdapter.TWEET,userId); + List userFavorit = fTweet.load(DatabaseAdapter.FAVT,userId); mTweets = new ProfileLoader(UserProfile.this); mFavorits = new ProfileLoader(UserProfile.this);