diff --git a/app/src/main/java/org/nuclearfog/twidda/activity/MainActivity.java b/app/src/main/java/org/nuclearfog/twidda/activity/MainActivity.java index e24dd4d3..de91cf93 100644 --- a/app/src/main/java/org/nuclearfog/twidda/activity/MainActivity.java +++ b/app/src/main/java/org/nuclearfog/twidda/activity/MainActivity.java @@ -23,8 +23,6 @@ import com.google.android.material.tabs.TabLayout.Tab; import org.nuclearfog.twidda.R; import org.nuclearfog.twidda.adapter.FragmentAdapter; import org.nuclearfog.twidda.backend.LinkContentLoader; -import org.nuclearfog.twidda.backend.engine.EngineException; -import org.nuclearfog.twidda.backend.helper.ErrorHandler; import org.nuclearfog.twidda.database.GlobalSettings; import static android.view.Window.FEATURE_NO_TITLE; @@ -241,9 +239,4 @@ public class MainActivity extends AppCompatActivity implements OnTabSelectedList else loadingCircle.dismiss(); } - - - public void onError(EngineException error) { - ErrorHandler.handleFailure(this, error); - } } \ No newline at end of file diff --git a/app/src/main/java/org/nuclearfog/twidda/activity/MediaViewer.java b/app/src/main/java/org/nuclearfog/twidda/activity/MediaViewer.java index 7b02f3fa..b3d9cc4c 100644 --- a/app/src/main/java/org/nuclearfog/twidda/activity/MediaViewer.java +++ b/app/src/main/java/org/nuclearfog/twidda/activity/MediaViewer.java @@ -164,12 +164,11 @@ public class MediaViewer extends AppCompatActivity implements OnImageClickListen public void onPrepared(MediaPlayer mp) { if (type == MEDIAVIEWER_ANGIF) { mp.setLooping(true); - mp.start(); } else { videoController.show(0); mp.seekTo(videoPos); - mp.start(); } + mp.start(); mp.setOnInfoListener(new OnInfoListener() { @Override diff --git a/app/src/main/java/org/nuclearfog/twidda/activity/UserProfile.java b/app/src/main/java/org/nuclearfog/twidda/activity/UserProfile.java index 08563bcb..eeef1322 100644 --- a/app/src/main/java/org/nuclearfog/twidda/activity/UserProfile.java +++ b/app/src/main/java/org/nuclearfog/twidda/activity/UserProfile.java @@ -68,7 +68,7 @@ public class UserProfile extends AppCompatActivity implements OnClickListener, OnTagClickListener, OnTabSelectedListener { public static final String KEY_PROFILE_ID = "profile_id"; - // public static final String KEY_PROFILE_NAME = "profile_name"; // TODO + public static final String KEY_PROFILE_NAME = "profile_name"; public static final int RETURN_PROFILE_CHANGED = 2; private static final int REQUEST_PROFILE_CHANGED = 1; private static final int TRANSPARENCY = 0xafffffff; @@ -157,17 +157,23 @@ public class UserProfile extends AppCompatActivity implements OnClickListener, protected void onStart() { super.onStart(); Bundle param = getIntent().getExtras(); - if (profileAsync == null && param != null && param.containsKey(KEY_PROFILE_ID)) { - long userId = param.getLong(KEY_PROFILE_ID); - adapter.setupProfilePage(userId); + if (profileAsync == null && param != null) { + profileAsync = new ProfileLoader(this, LDR_PROFILE); + if (param.containsKey(KEY_PROFILE_ID)) { + long userId = param.getLong(KEY_PROFILE_ID); + adapter.setupProfilePage(userId); + profileAsync.execute(userId); + } else { + String username = param.getString(KEY_PROFILE_NAME); + adapter.setupProfilePage(username); + profileAsync.execute(username); + } Tab tweetTab = tabLayout.getTabAt(0); Tab favorTab = tabLayout.getTabAt(1); if (tweetTab != null && favorTab != null) { tweetTab.setCustomView(tweetTabTxt); favorTab.setCustomView(favorTabTxt); } - profileAsync = new ProfileLoader(this, LDR_PROFILE); - profileAsync.execute(userId); } } diff --git a/app/src/main/java/org/nuclearfog/twidda/adapter/FragmentAdapter.java b/app/src/main/java/org/nuclearfog/twidda/adapter/FragmentAdapter.java index 974f6a06..3b33d0cf 100644 --- a/app/src/main/java/org/nuclearfog/twidda/adapter/FragmentAdapter.java +++ b/app/src/main/java/org/nuclearfog/twidda/adapter/FragmentAdapter.java @@ -98,6 +98,22 @@ public class FragmentAdapter extends FragmentStatePagerAdapter { } + public void setupProfilePage(String username) { + Bundle usr_tweet = new Bundle(); + Bundle usr_favor = new Bundle(); + usr_tweet.putString(KEY_FRAG_TWEET_SEARCH, username); + usr_favor.putString(KEY_FRAG_TWEET_SEARCH, username); + usr_tweet.putInt(KEY_FRAG_TWEET_MODE, TWEET_FRAG_TWEETS); + usr_favor.putInt(KEY_FRAG_TWEET_MODE, TWEET_FRAG_FAVORS); + fragments = new Fragment[2]; + fragments[0] = new TweetFragment(); + fragments[1] = new TweetFragment(); + fragments[0].setArguments(usr_tweet); + fragments[1].setArguments(usr_favor); + notifyDataSetChanged(); + } + + public void setupSearchPage(String search) { Bundle tweetSearch = new Bundle(); Bundle userSearch = new Bundle(); @@ -208,7 +224,7 @@ public class FragmentAdapter extends FragmentStatePagerAdapter { public void notifySettingsChanged() { for (Fragment fragment : fragments) { if (fragment instanceof FragmentChangeObserver) - ((FragmentChangeObserver) fragment).onSettingsChange(); + ((FragmentChangeObserver) fragment).onReset(); } } @@ -217,8 +233,9 @@ public class FragmentAdapter extends FragmentStatePagerAdapter { * @param index tab position of page */ public void scrollToTop(int index) { - if (fragments[index] instanceof FragmentChangeObserver) + if (fragments[index] instanceof FragmentChangeObserver) { ((FragmentChangeObserver) fragments[index]).onTabChange(); + } } @@ -227,7 +244,7 @@ public class FragmentAdapter extends FragmentStatePagerAdapter { /** * called if settings changed to refresh fragments */ - void onSettingsChange(); + void onReset(); /** * called when the current tab changes diff --git a/app/src/main/java/org/nuclearfog/twidda/backend/LinkContentLoader.java b/app/src/main/java/org/nuclearfog/twidda/backend/LinkContentLoader.java index 401a92ed..346df003 100644 --- a/app/src/main/java/org/nuclearfog/twidda/backend/LinkContentLoader.java +++ b/app/src/main/java/org/nuclearfog/twidda/backend/LinkContentLoader.java @@ -6,22 +6,17 @@ import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; -import androidx.annotation.Nullable; - import org.nuclearfog.twidda.activity.MainActivity; import org.nuclearfog.twidda.activity.SearchPage; import org.nuclearfog.twidda.activity.TweetDetail; import org.nuclearfog.twidda.activity.UserProfile; -import org.nuclearfog.twidda.backend.engine.EngineException; -import org.nuclearfog.twidda.backend.engine.TwitterEngine; -import org.nuclearfog.twidda.backend.items.TwitterUser; import java.lang.ref.WeakReference; import static org.nuclearfog.twidda.activity.SearchPage.KEY_SEARCH_QUERY; import static org.nuclearfog.twidda.activity.TweetDetail.KEY_TWEET_ID; import static org.nuclearfog.twidda.activity.TweetDetail.KEY_TWEET_NAME; -import static org.nuclearfog.twidda.activity.UserProfile.KEY_PROFILE_ID; +import static org.nuclearfog.twidda.activity.UserProfile.KEY_PROFILE_NAME; /** * This class handles deep links and starts activities to show the content @@ -33,14 +28,10 @@ public class LinkContentLoader extends AsyncTask callback; - private TwitterEngine mTwitter; public LinkContentLoader(MainActivity callback) { this.callback = new WeakReference<>(callback); - mTwitter = TwitterEngine.getInstance(callback); } @Override @@ -65,12 +56,10 @@ public class LinkContentLoader extends AsyncTask 0) - name = name.substring(0, end); - TwitterUser user = mTwitter.getUser(name); - data.putLong(KEY_PROFILE_ID, user.getId()); + path = path.substring(0, end); + data.putString(KEY_PROFILE_NAME, path); return new DataHolder(data, UserProfile.class); } else if (path.startsWith("search")) { String search = link.getQueryParameter("q"); @@ -87,8 +76,6 @@ public class LinkContentLoader extends AsyncTask 0) { user = db.getUser(userId); - if (user != null) + if (user != null) { publishProgress(user); + } user = mTwitter.getUser(userId); } else { user = mTwitter.getUser(username); @@ -68,20 +69,27 @@ public class ProfileLoader extends AsyncTask 0) { + connection = mTwitter.getConnection(userId); + } else { + connection = mTwitter.getConnection(username); + } + if (!connection.isHome()) { + if (connection.isBlocked() || connection.isMuted()) { db.muteUser(userId, true); - else + } else { db.muteUser(userId, false); + } + } return connection; case ACTION_FOLLOW: connection = mTwitter.getConnection(userId); - if (!connection.isFriend()) + if (!connection.isFriend()) { user = mTwitter.followUser(userId); - else + } else { user = mTwitter.unfollowUser(userId); + } publishProgress(user); return mTwitter.getConnection(userId); diff --git a/app/src/main/java/org/nuclearfog/twidda/backend/TweetListLoader.java b/app/src/main/java/org/nuclearfog/twidda/backend/TweetListLoader.java index debb03c6..eb7a694e 100644 --- a/app/src/main/java/org/nuclearfog/twidda/backend/TweetListLoader.java +++ b/app/src/main/java/org/nuclearfog/twidda/backend/TweetListLoader.java @@ -63,10 +63,14 @@ public class TweetListLoader extends AsyncTask> { @Override protected List doInBackground(Object[] param) { List tweets = null; + String search; + int page; + long id; + try { switch (action) { case TL_HOME: - int page = (int) param[0]; + page = (int) param[0]; if (sinceId == LIST_EMPTY) { tweets = db.getHomeTimeline(); if (tweets.isEmpty()) { @@ -94,32 +98,43 @@ public class TweetListLoader extends AsyncTask> { break; case USR_TWEETS: - long id = (long) param[0]; page = (int) param[1]; - if (sinceId == LIST_EMPTY) { - tweets = db.getUserTweets(id); - if (tweets.isEmpty()) { + if (param[0] instanceof Long) { + id = (long) param[0]; + if (sinceId == LIST_EMPTY) { + tweets = db.getUserTweets(id); + if (tweets.isEmpty()) { + tweets = mTwitter.getUserTweets(id, sinceId, page); + db.storeUserTweets(tweets); + } + } else { tweets = mTwitter.getUserTweets(id, sinceId, page); db.storeUserTweets(tweets); } - } else { - tweets = mTwitter.getUserTweets(id, sinceId, page); + } else if (param[0] instanceof String) { + search = (String) param[0]; + tweets = mTwitter.getUserTweets(search, sinceId, page); db.storeUserTweets(tweets); } break; case USR_FAVORS: - id = (long) param[0]; page = (int) param[1]; - if (sinceId == LIST_EMPTY) { - tweets = db.getUserFavs(id); - if (tweets.isEmpty()) { + if (param[0] instanceof Long) { + id = (long) param[0]; + if (sinceId == LIST_EMPTY) { + tweets = db.getUserFavs(id); + if (tweets.isEmpty()) { + tweets = mTwitter.getUserFavs(id, page); + db.storeUserFavs(tweets, id); + } + } else { tweets = mTwitter.getUserFavs(id, page); db.storeUserFavs(tweets, id); } - } else { - tweets = mTwitter.getUserFavs(id, page); - db.storeUserFavs(tweets, id); + } else if (param[0] instanceof String) { + search = (String) param[0]; + tweets = mTwitter.getUserFavs(search, page); } break; @@ -130,7 +145,7 @@ public class TweetListLoader extends AsyncTask> { case TWEET_ANS: id = (long) param[0]; - String search = (String) param[1]; + search = (String) param[1]; if (sinceId == LIST_EMPTY) { tweets = db.getAnswers(id); if (tweets.isEmpty()) { diff --git a/app/src/main/java/org/nuclearfog/twidda/backend/engine/TwitterEngine.java b/app/src/main/java/org/nuclearfog/twidda/backend/engine/TwitterEngine.java index 81b78aba..88e692e1 100644 --- a/app/src/main/java/org/nuclearfog/twidda/backend/engine/TwitterEngine.java +++ b/app/src/main/java/org/nuclearfog/twidda/backend/engine/TwitterEngine.java @@ -328,6 +328,26 @@ public class TwitterEngine { } + /** + * Get User Tweets + * + * @param username screen name of the user + * @param sinceId minimum tweet ID + * @param page current page + * @return List of User Tweets + * @throws EngineException if access is unavailable + */ + public List getUserTweets(String username, long sinceId, int page) throws EngineException { + try { + int load = settings.getRowLimit(); + Paging paging = new Paging(page, load, sinceId); + return convertStatusList(twitter.getUserTimeline(username, paging)); + } catch (TwitterException err) { + throw new EngineException(err); + } + } + + /** * Get User Favs * @@ -348,6 +368,26 @@ public class TwitterEngine { } + /** + * Get User Favs + * + * @param username screen name of the user + * @param page current page + * @return List of User Favs + * @throws EngineException if access is unavailable + */ + public List getUserFavs(String username, int page) throws EngineException { + try { + int load = settings.getRowLimit(); + Paging paging = new Paging(page, load); + List favorits = twitter.getFavorites(username, paging); + return convertStatusList(favorits); + } catch (TwitterException err) { + throw new EngineException(err); + } + } + + /** * Get User Context * @@ -411,6 +451,22 @@ public class TwitterEngine { } + /** + * Efficient Access of Connection Information + * + * @param username screen name of the user + * @return User Properties + * @throws EngineException if Connection is unavailable + */ + public UserProperties getConnection(String username) throws EngineException { + try { + return new UserProperties(twitter.showFriendship(twitter.getScreenName(), username)); + } catch (TwitterException err) { + throw new EngineException(err); + } + } + + /** * Follow Twitter user * diff --git a/app/src/main/java/org/nuclearfog/twidda/backend/items/TwitterTrend.java b/app/src/main/java/org/nuclearfog/twidda/backend/items/TwitterTrend.java index 14743143..3037c4d8 100644 --- a/app/src/main/java/org/nuclearfog/twidda/backend/items/TwitterTrend.java +++ b/app/src/main/java/org/nuclearfog/twidda/backend/items/TwitterTrend.java @@ -89,10 +89,8 @@ public class TwitterTrend { public String getSearchString() { if (trendName.startsWith("#")) return trendName; - else { - if (!trendName.startsWith("\"") && !trendName.endsWith("\"")) - return "\"" + trendName + "\""; - return trendName; - } + if (!trendName.startsWith("\"") && !trendName.endsWith("\"")) + return "\"" + trendName + "\""; + return trendName; } } \ No newline at end of file diff --git a/app/src/main/java/org/nuclearfog/twidda/fragment/TrendFragment.java b/app/src/main/java/org/nuclearfog/twidda/fragment/TrendFragment.java index 8a603e0e..66988c91 100644 --- a/app/src/main/java/org/nuclearfog/twidda/fragment/TrendFragment.java +++ b/app/src/main/java/org/nuclearfog/twidda/fragment/TrendFragment.java @@ -95,7 +95,7 @@ public class TrendFragment extends Fragment implements OnRefreshListener, TrendC @Override - public void onSettingsChange() { + public void onReset() { if (getView() != null) { reload.setProgressBackgroundColorSchemeColor(settings.getHighlightColor()); list.setAdapter(adapter); // force redrawing list diff --git a/app/src/main/java/org/nuclearfog/twidda/fragment/TweetFragment.java b/app/src/main/java/org/nuclearfog/twidda/fragment/TweetFragment.java index 0f801546..1634affb 100644 --- a/app/src/main/java/org/nuclearfog/twidda/fragment/TweetFragment.java +++ b/app/src/main/java/org/nuclearfog/twidda/fragment/TweetFragment.java @@ -127,7 +127,7 @@ public class TweetFragment extends Fragment implements OnRefreshListener, TweetC @Override - public void onSettingsChange() { + public void onReset() { if (getView() != null) { reload.setProgressBackgroundColorSchemeColor(settings.getHighlightColor()); list.setAdapter(adapter); // force redrawing list @@ -222,12 +222,18 @@ public class TweetFragment extends Fragment implements OnRefreshListener, TweetC case TWEET_FRAG_TWEETS: tweetTask = new TweetListLoader(this, Action.USR_TWEETS); - tweetTask.execute(id, 1); + if (param.containsKey(KEY_FRAG_TWEET_ID)) + tweetTask.execute(id, 1); + else if (param.containsKey(KEY_FRAG_TWEET_SEARCH)) + tweetTask.execute(search, 1); break; case TWEET_FRAG_FAVORS: tweetTask = new TweetListLoader(this, Action.USR_FAVORS); - tweetTask.execute(id, 1); + if (param.containsKey(KEY_FRAG_TWEET_ID)) + tweetTask.execute(id, 1); + else if (param.containsKey(KEY_FRAG_TWEET_SEARCH)) + tweetTask.execute(search, 1); break; case TWEET_FRAG_ANSWER: diff --git a/app/src/main/java/org/nuclearfog/twidda/fragment/UserFragment.java b/app/src/main/java/org/nuclearfog/twidda/fragment/UserFragment.java index 38fac9ee..6605234c 100644 --- a/app/src/main/java/org/nuclearfog/twidda/fragment/UserFragment.java +++ b/app/src/main/java/org/nuclearfog/twidda/fragment/UserFragment.java @@ -114,7 +114,7 @@ public class UserFragment extends Fragment implements OnRefreshListener, UserCli @Override - public void onSettingsChange() { + public void onReset() { } /**