diff --git a/app/src/main/java/org/nuclearfog/twidda/activity/ListPopup.java b/app/src/main/java/org/nuclearfog/twidda/activity/ListPopup.java index f73b988f..cc0f9459 100644 --- a/app/src/main/java/org/nuclearfog/twidda/activity/ListPopup.java +++ b/app/src/main/java/org/nuclearfog/twidda/activity/ListPopup.java @@ -48,7 +48,6 @@ public class ListPopup extends AppCompatActivity implements OnClickListener, OnD private CompoundButton visibility; private View progressCircle; private Dialog leaveDialog; - @Nullable private UserList userList; @@ -68,17 +67,14 @@ public class ListPopup extends AppCompatActivity implements OnClickListener, OnD GlobalSettings settings = GlobalSettings.getInstance(this); AppStyles.setTheme(settings, root, settings.getPopupColor()); - Bundle extras = getIntent().getExtras(); - if (extras != null) { - Object data = extras.getSerializable(KEY_LIST_EDITOR_DATA); - if (data instanceof UserList) { - userList = (UserList) data; - titleInput.setText(userList.getTitle()); - subTitleInput.setText(userList.getDescription()); - visibility.setChecked(!userList.isPrivate()); - popupTitle.setText(R.string.menu_edit_list); - updateButton.setText(R.string.update_list); - } + Object data = getIntent().getSerializableExtra(KEY_LIST_EDITOR_DATA); + if (data instanceof UserList) { + userList = (UserList) data; + titleInput.setText(userList.getTitle()); + subTitleInput.setText(userList.getDescription()); + visibility.setChecked(!userList.isPrivate()); + popupTitle.setText(R.string.menu_edit_list); + updateButton.setText(R.string.update_list); } leaveDialog = DialogBuilder.create(this, LISTPOPUP_LEAVE, this); updateButton.setOnClickListener(this); diff --git a/app/src/main/java/org/nuclearfog/twidda/activity/MessagePopup.java b/app/src/main/java/org/nuclearfog/twidda/activity/MessagePopup.java index 4af8afa0..867a6fd6 100644 --- a/app/src/main/java/org/nuclearfog/twidda/activity/MessagePopup.java +++ b/app/src/main/java/org/nuclearfog/twidda/activity/MessagePopup.java @@ -101,12 +101,10 @@ public class MessagePopup extends AppCompatActivity implements OnClickListener, View load = View.inflate(this, R.layout.item_load, null); View cancelButton = load.findViewById(R.id.kill_button); - Bundle param = getIntent().getExtras(); - if (param != null && param.containsKey(KEY_DM_PREFIX)) { - String prefix = param.getString(KEY_DM_PREFIX); + String prefix = getIntent().getStringExtra(KEY_DM_PREFIX); + if (prefix != null) { receiver.append(prefix); } - send.setImageResource(R.drawable.right); media.setImageResource(R.drawable.image_add); leaveDialog = DialogBuilder.create(this, MSG_POPUP_LEAVE, this); diff --git a/app/src/main/java/org/nuclearfog/twidda/activity/ProfileEditor.java b/app/src/main/java/org/nuclearfog/twidda/activity/ProfileEditor.java index ae0262ad..3d18b08d 100644 --- a/app/src/main/java/org/nuclearfog/twidda/activity/ProfileEditor.java +++ b/app/src/main/java/org/nuclearfog/twidda/activity/ProfileEditor.java @@ -58,6 +58,11 @@ import static org.nuclearfog.twidda.database.GlobalSettings.PROFILE_IMG_HIGH_RES */ public class ProfileEditor extends AppCompatActivity implements OnClickListener, OnDismissListener, OnDialogClick { + /** + * key to preload user data + */ + public static final String KEY_USER_DATA = "profile-editor-data"; + /** * Permission to read images from external storage */ @@ -137,6 +142,11 @@ public class ProfileEditor extends AppCompatActivity implements OnClickListener, loadingCircle.setContentView(load); cancelButton.setVisibility(VISIBLE); + Object data = getIntent().getSerializableExtra(KEY_USER_DATA); + if (data instanceof User) { + user = (User) data; + setUser(user); + } profile_image.setOnClickListener(this); profile_banner.setOnClickListener(this); addBannerBtn.setOnClickListener(this); @@ -145,16 +155,6 @@ public class ProfileEditor extends AppCompatActivity implements OnClickListener, } - @Override - protected void onStart() { - super.onStart(); - if (editorAsync == null) { - editorAsync = new UserUpdater(this, UserUpdater.Action.READ); - editorAsync.execute(); - } - } - - @Override protected void onDestroy() { if (editorAsync != null && editorAsync.getStatus() == RUNNING) @@ -203,7 +203,7 @@ public class ProfileEditor extends AppCompatActivity implements OnClickListener, link.setError(errMsg); } else { UserHolder userHolder = new UserHolder(username, userLink, userLoc, userBio, profileLink, bannerLink); - editorAsync = new UserUpdater(this, UserUpdater.Action.WRITE); + editorAsync = new UserUpdater(this); editorAsync.execute(userHolder); } } @@ -292,12 +292,32 @@ public class ProfileEditor extends AppCompatActivity implements OnClickListener, } } + /** + * called after user profile was updated successfully + */ + public void onSuccess(User user) { + Intent data = new Intent(); + data.putExtra(RETURN_PROFILE_DATA, user); + Toast.makeText(this, R.string.info_profile_updated, Toast.LENGTH_SHORT).show(); + setResult(RETURN_PROFILE_CHANGED, data); + finish(); + } + + /** + * called after an error occurs + * + * @param err Engine Exception + */ + public void onError(EngineException err) { + ErrorHandler.handleFailure(this, err); + } + /** * Set current user's information * * @param user Current user */ - public void setUser(User user) { + private void setUser(User user) { if (user.hasProfileImage()) { String pbLink = user.getImageLink(); if (!user.hasDefaultProfileImage()) @@ -320,29 +340,6 @@ public class ProfileEditor extends AppCompatActivity implements OnClickListener, this.user = user; } - /** - * called after user profile was updated successfully - */ - public void onSuccess(User user) { - Intent data = new Intent(); - data.putExtra(RETURN_PROFILE_DATA, user); - Toast.makeText(this, R.string.info_profile_updated, Toast.LENGTH_SHORT).show(); - setResult(RETURN_PROFILE_CHANGED, data); - finish(); - } - - /** - * called after an error occurs - * - * @param err Engine Exception - */ - public void onError(EngineException err) { - ErrorHandler.handleFailure(this, err); - if (user == null) { - finish(); - } - } - /** * Get images from storage or ask for permission * diff --git a/app/src/main/java/org/nuclearfog/twidda/activity/SearchPage.java b/app/src/main/java/org/nuclearfog/twidda/activity/SearchPage.java index d27e2461..5bb787bf 100644 --- a/app/src/main/java/org/nuclearfog/twidda/activity/SearchPage.java +++ b/app/src/main/java/org/nuclearfog/twidda/activity/SearchPage.java @@ -55,19 +55,15 @@ public class SearchPage extends AppCompatActivity implements OnTabSelectedListen setSupportActionBar(tool); settings = GlobalSettings.getInstance(this); - AppStyles.setTheme(settings, root); - adapter = new FragmentAdapter(getSupportFragmentManager()); tabLayout.setupWithViewPager(pager); tabLayout.addOnTabSelectedListener(this); pager.setAdapter(adapter); - Bundle param = getIntent().getExtras(); - if (param != null && param.containsKey(KEY_SEARCH_QUERY)) { - search = param.getString(KEY_SEARCH_QUERY); - adapter.setupSearchPage(search); - AppStyles.setTabIcons(tabLayout, settings, R.array.search_tab_icons); - } + search = getIntent().getStringExtra(KEY_SEARCH_QUERY); + adapter.setupSearchPage(search); + AppStyles.setTabIcons(tabLayout, settings, R.array.search_tab_icons); + AppStyles.setTheme(settings, root); } diff --git a/app/src/main/java/org/nuclearfog/twidda/activity/TweetActivity.java b/app/src/main/java/org/nuclearfog/twidda/activity/TweetActivity.java index d3e3c659..9d7d975a 100644 --- a/app/src/main/java/org/nuclearfog/twidda/activity/TweetActivity.java +++ b/app/src/main/java/org/nuclearfog/twidda/activity/TweetActivity.java @@ -105,7 +105,6 @@ public class TweetActivity extends AppCompatActivity implements OnClickListener, private TweetAction statusAsync; @Nullable private Tweet tweet; - private long tweetId; @Override @@ -132,24 +131,17 @@ public class TweetActivity extends AppCompatActivity implements OnClickListener, mediaButton = findViewById(R.id.tweet_media_attach); sensitive_media = findViewById(R.id.tweet_sensitive); - tool.setTitle(""); - setSupportActionBar(tool); - Bundle param = getIntent().getExtras(); - FragmentAdapter adapter = new FragmentAdapter(getSupportFragmentManager()); - if (param != null) { - String username; - Object data = param.getSerializable(KEY_TWEET_DATA); - if (data instanceof Tweet) { - tweet = (Tweet) data; - username = tweet.getUser().getScreenname(); - tweetId = tweet.getId(); - } else { - tweetId = param.getLong(KEY_TWEET_ID); - username = param.getString(KEY_TWEET_NAME, ""); - } - adapter.setupTweetPage(tweetId, username); + Object data = getIntent().getSerializableExtra(KEY_TWEET_DATA); + long tweetId = getIntent().getLongExtra(KEY_TWEET_ID, -1); + String username; + if (data instanceof Tweet) { + tweet = (Tweet) data; + username = tweet.getUser().getScreenname(); + } else { + username = getIntent().getStringExtra(KEY_TWEET_NAME); } - + FragmentAdapter adapter = new FragmentAdapter(getSupportFragmentManager()); + adapter.setupTweetPage(tweetId, username); pager.setOffscreenPageLimit(1); pager.setAdapter(adapter); @@ -162,6 +154,8 @@ public class TweetActivity extends AppCompatActivity implements OnClickListener, tweetText.setMovementMethod(LinkAndScrollMovement.getInstance()); tweetText.setLinkTextColor(settings.getHighlightColor()); deleteDialog = DialogBuilder.create(this, DELETE_TWEET, this); + tool.setTitle(""); + setSupportActionBar(tool); AppStyles.setTheme(settings, root); replyName.setOnClickListener(this); @@ -187,6 +181,7 @@ public class TweetActivity extends AppCompatActivity implements OnClickListener, } // Load Tweet from database first if no tweet is defined else { + long tweetId = getIntent().getLongExtra(KEY_TWEET_ID, -1); statusAsync = new TweetAction(this, tweetId); statusAsync.execute(Action.LD_DB); } diff --git a/app/src/main/java/org/nuclearfog/twidda/activity/TweetPopup.java b/app/src/main/java/org/nuclearfog/twidda/activity/TweetPopup.java index ef8463ae..4693c6a9 100644 --- a/app/src/main/java/org/nuclearfog/twidda/activity/TweetPopup.java +++ b/app/src/main/java/org/nuclearfog/twidda/activity/TweetPopup.java @@ -133,7 +133,6 @@ public class TweetPopup extends AppCompatActivity implements OnClickListener, Lo private Location location; private List mediaPath; private MediaType selectedFormat = MediaType.NONE; - private String prefix = ""; private long inReplyId = 0; @Override @@ -156,12 +155,12 @@ public class TweetPopup extends AppCompatActivity implements OnClickListener, Lo settings = GlobalSettings.getInstance(this); mediaPath = new LinkedList<>(); - Bundle param = getIntent().getExtras(); - if (param != null) { - inReplyId = param.getLong(KEY_TWEETPOPUP_REPLYID, 0); - prefix = param.getString(KEY_TWEETPOPUP_TEXT, ""); + Intent data = getIntent(); + inReplyId = data.getLongExtra(KEY_TWEETPOPUP_REPLYID, 0); + String prefix = data.getStringExtra(KEY_TWEETPOPUP_TEXT); + if (prefix != null) tweetText.append(prefix); - } + previewBtn.setImageResource(R.drawable.image); mediaBtn.setImageResource(R.drawable.image_add); locationBtn.setImageResource(R.drawable.location); @@ -416,7 +415,7 @@ public class TweetPopup extends AppCompatActivity implements OnClickListener, Lo * show confirmation dialog when closing edited tweet */ private void showClosingMsg() { - if (!prefix.equals(tweetText.getText().toString()) || !mediaPath.isEmpty()) { + if (tweetText.length() > 0 || !mediaPath.isEmpty()) { if (!closingDialog.isShowing()) { closingDialog.show(); } diff --git a/app/src/main/java/org/nuclearfog/twidda/activity/UserDetail.java b/app/src/main/java/org/nuclearfog/twidda/activity/UserDetail.java index d28a7e74..b29c608e 100644 --- a/app/src/main/java/org/nuclearfog/twidda/activity/UserDetail.java +++ b/app/src/main/java/org/nuclearfog/twidda/activity/UserDetail.java @@ -1,5 +1,6 @@ package org.nuclearfog.twidda.activity; +import android.content.Intent; import android.os.Bundle; import android.view.View; @@ -54,29 +55,26 @@ public class UserDetail extends AppCompatActivity { ViewPager pager = findViewById(R.id.user_pager); GlobalSettings settings = GlobalSettings.getInstance(this); - FragmentAdapter adapter = new FragmentAdapter(getSupportFragmentManager()); pager.setAdapter(adapter); - Bundle param = getIntent().getExtras(); - if (param != null && param.containsKey(KEY_USERDETAIL_ID) && param.containsKey(KEY_USERDETAIL_MODE)) { - long id = param.getLong(KEY_USERDETAIL_ID); - switch (param.getInt(KEY_USERDETAIL_MODE)) { - case USERLIST_FRIENDS: - toolbar.setTitle(R.string.userlist_following); - adapter.setupFriendsPage(id); - break; + Intent data = getIntent(); + long id = data.getLongExtra(KEY_USERDETAIL_ID, -1); + switch (data.getIntExtra(KEY_USERDETAIL_MODE, 0)) { + case USERLIST_FRIENDS: + toolbar.setTitle(R.string.userlist_following); + adapter.setupFriendsPage(id); + break; - case USERLIST_FOLLOWER: - toolbar.setTitle(R.string.userlist_follower); - adapter.setupFollowerPage(id); - break; + case USERLIST_FOLLOWER: + toolbar.setTitle(R.string.userlist_follower); + adapter.setupFollowerPage(id); + break; - case USERLIST_RETWEETS: - toolbar.setTitle(R.string.toolbar_userlist_retweet); - adapter.setupRetweeterPage(id); - break; - } + case USERLIST_RETWEETS: + toolbar.setTitle(R.string.toolbar_userlist_retweet); + adapter.setupRetweeterPage(id); + break; } setSupportActionBar(toolbar); AppStyles.setTheme(settings, root); diff --git a/app/src/main/java/org/nuclearfog/twidda/activity/UserLists.java b/app/src/main/java/org/nuclearfog/twidda/activity/UserLists.java index 7c6614cf..91dabe26 100644 --- a/app/src/main/java/org/nuclearfog/twidda/activity/UserLists.java +++ b/app/src/main/java/org/nuclearfog/twidda/activity/UserLists.java @@ -74,18 +74,13 @@ public class UserLists extends AppCompatActivity implements TabLayout.OnTabSelec mTab.setupWithViewPager(pager); mTab.addOnTabSelectedListener(this); - Bundle param = getIntent().getExtras(); - if (param != null) { - if (param.containsKey(KEY_USERLIST_OWNER_ID)) { - long ownerId = param.getLong(KEY_USERLIST_OWNER_ID); - isHome = ownerId == settings.getCurrentUserId(); - adapter.setupListPage(ownerId, ""); - } else if (param.containsKey(KEY_USERLIST_OWNER_NAME)) { - String ownerName = param.getString(KEY_USERLIST_OWNER_NAME); - adapter.setupListPage(-1, ownerName); - } - AppStyles.setTabIcons(mTab, settings, R.array.userlist_tab_icons); - } + Intent data = getIntent(); + long ownerId = data.getLongExtra(KEY_USERLIST_OWNER_ID, -1); + String ownerName = data.getStringExtra(KEY_USERLIST_OWNER_NAME); + isHome = ownerId == settings.getCurrentUserId(); + adapter.setupListPage(ownerId, ownerName); + + AppStyles.setTabIcons(mTab, settings, R.array.userlist_tab_icons); } 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 75a1ca2f..b0ffa442 100644 --- a/app/src/main/java/org/nuclearfog/twidda/activity/UserProfile.java +++ b/app/src/main/java/org/nuclearfog/twidda/activity/UserProfile.java @@ -56,6 +56,7 @@ import static org.nuclearfog.twidda.activity.MediaViewer.KEY_MEDIA_LINK; import static org.nuclearfog.twidda.activity.MediaViewer.KEY_MEDIA_TYPE; import static org.nuclearfog.twidda.activity.MediaViewer.MEDIAVIEWER_IMAGE; import static org.nuclearfog.twidda.activity.MessagePopup.KEY_DM_PREFIX; +import static org.nuclearfog.twidda.activity.ProfileEditor.KEY_USER_DATA; import static org.nuclearfog.twidda.activity.SearchPage.KEY_SEARCH_QUERY; import static org.nuclearfog.twidda.activity.TweetActivity.KEY_TWEET_ID; import static org.nuclearfog.twidda.activity.TweetActivity.KEY_TWEET_NAME; @@ -92,15 +93,15 @@ public class UserProfile extends AppCompatActivity implements OnClickListener, O public static final String KEY_PROFILE_ID = "profile_id"; /** - * Alternative Key for the screen name - */ - public static final String KEY_PROFILE_NAME = "profile_name"; - - /** - * key for user object, alternative to {@link #KEY_PROFILE_ID} and {@link #KEY_PROFILE_NAME} + * key for user object */ public static final String KEY_PROFILE_DATA = "profile_data"; + /** + * key to prevent this activity to reload profile information as they are up to date + */ + public static final String KEY_PROFILE_DISABLE_RELOAD = "profile_no_reload"; + /** * request code for {@link ProfileEditor} */ @@ -140,10 +141,6 @@ public class UserProfile extends AppCompatActivity implements OnClickListener, O @Nullable private User user; - private String username; - private long userId; - private boolean isHomeProfile; - @Override protected void onCreate(@Nullable Bundle b) { @@ -167,8 +164,7 @@ public class UserProfile extends AppCompatActivity implements OnClickListener, O follow_back = findViewById(R.id.follow_back); pager = findViewById(R.id.profile_pager); - tool.setTitle(""); - setSupportActionBar(tool); + settings = GlobalSettings.getInstance(this); following.setCompoundDrawablesWithIntrinsicBounds(R.drawable.following, 0, 0, 0); @@ -184,6 +180,8 @@ public class UserProfile extends AppCompatActivity implements OnClickListener, O bioTxt.setLinkTextColor(settings.getHighlightColor()); AppStyles.setTheme(settings, root); + tool.setTitle(""); + setSupportActionBar(tool); adapter = new FragmentAdapter(getSupportFragmentManager()); pager.setAdapter(adapter); pager.setOffscreenPageLimit(2); @@ -192,21 +190,15 @@ public class UserProfile extends AppCompatActivity implements OnClickListener, O blockConfirm = DialogBuilder.create(this, PROFILE_BLOCK, this); muteConfirm = DialogBuilder.create(this, PROFILE_MUTE, this); - Bundle param = getIntent().getExtras(); - if (param != null) { - Object data = param.getSerializable(KEY_PROFILE_DATA); - if (data instanceof User) { - user = (User) data; - userId = user.getId(); - username = user.getScreenname(); - } else { - userId = param.getLong(KEY_PROFILE_ID, -1); - username = param.getString(KEY_PROFILE_NAME, ""); - } - adapter.setupProfilePage(userId, username); - tabTweetCount = AppStyles.createTabIcon(tabLayout, settings, R.array.profile_tab_icons); - isHomeProfile = userId == settings.getCurrentUserId(); + Intent i = getIntent(); + user = (User) i.getSerializableExtra(KEY_PROFILE_DATA); + if (user != null) { + adapter.setupProfilePage(user.getId()); + } else { + long userId = i.getLongExtra(KEY_PROFILE_ID, 0); + adapter.setupProfilePage(userId); } + tabTweetCount = AppStyles.createTabIcon(tabLayout, settings, R.array.profile_tab_icons); tabLayout.addOnTabSelectedListener(this); following.setOnClickListener(this); @@ -221,12 +213,17 @@ public class UserProfile extends AppCompatActivity implements OnClickListener, O protected void onStart() { super.onStart(); if (profileAsync == null) { - profileAsync = new UserAction(this, userId, username); + Intent data = getIntent(); if (user == null) { + long userId = data.getLongExtra(KEY_PROFILE_ID, 0); + profileAsync = new UserAction(this, userId); profileAsync.execute(PROFILE_DB); } else { - profileAsync.execute(PROFILE_lOAD); setUser(user); + if (!data.getBooleanExtra(KEY_PROFILE_DISABLE_RELOAD, false)) { + profileAsync = new UserAction(this, user.getId()); + profileAsync.execute(PROFILE_lOAD); + } } } } @@ -271,10 +268,23 @@ public class UserProfile extends AppCompatActivity implements OnClickListener, O AppStyles.setMenuItemColor(followIcon, Color.YELLOW); followIcon.setTitle(R.string.menu_follow_requested); } - if (user.isLocked() && !isHomeProfile) { + if (user.isLocked() && !user.isCurrentUser()) { MenuItem listItem = m.findItem(R.id.profile_lists); listItem.setVisible(false); } + if (user.isCurrentUser()) { + MenuItem dmIcon = m.findItem(R.id.profile_message); + MenuItem setting = m.findItem(R.id.profile_settings); + dmIcon.setVisible(true); + setting.setVisible(true); + } else { + MenuItem followIcon = m.findItem(R.id.profile_follow); + MenuItem blockIcon = m.findItem(R.id.profile_block); + MenuItem muteIcon = m.findItem(R.id.profile_mute); + followIcon.setVisible(true); + blockIcon.setVisible(true); + muteIcon.setVisible(true); + } } if (relation != null) { if (relation.isFriend()) { @@ -300,78 +310,66 @@ public class UserProfile extends AppCompatActivity implements OnClickListener, O follow_back.setVisibility(VISIBLE); } } - if (isHomeProfile) { - MenuItem dmIcon = m.findItem(R.id.profile_message); - MenuItem setting = m.findItem(R.id.profile_settings); - dmIcon.setVisible(true); - setting.setVisible(true); - } else { - MenuItem followIcon = m.findItem(R.id.profile_follow); - MenuItem blockIcon = m.findItem(R.id.profile_block); - MenuItem muteIcon = m.findItem(R.id.profile_mute); - followIcon.setVisible(true); - blockIcon.setVisible(true); - muteIcon.setVisible(true); - } return super.onPrepareOptionsMenu(m); } @Override public boolean onOptionsItemSelected(@NonNull MenuItem item) { - // write tweet - if (item.getItemId() == R.id.profile_tweet) { - Intent tweet = new Intent(this, TweetPopup.class); - if (!isHomeProfile && user != null) { - // add username to tweet - String tweetPrefix = user.getScreenname() + " "; - tweet.putExtra(KEY_TWEETPOPUP_TEXT, tweetPrefix); + if (user != null) { + // write tweet + if (item.getItemId() == R.id.profile_tweet) { + Intent tweet = new Intent(this, TweetPopup.class); + if (!user.isCurrentUser()) { + // add username to tweet + String tweetPrefix = user.getScreenname() + " "; + tweet.putExtra(KEY_TWEETPOPUP_TEXT, tweetPrefix); + } + startActivity(tweet); } - startActivity(tweet); - } - // follow / unfollow user - else if (item.getItemId() == R.id.profile_follow) { - if (user != null && relation != null) { - if (!relation.isFriend()) { - profileAsync = new UserAction(this, user); - profileAsync.execute(ACTION_FOLLOW); - } else if (!unfollowConfirm.isShowing()) { - unfollowConfirm.show(); + // follow / unfollow user + else if (item.getItemId() == R.id.profile_follow) { + if (relation != null) { + if (!relation.isFriend()) { + profileAsync = new UserAction(this, user.getId()); + profileAsync.execute(ACTION_FOLLOW); + } else if (!unfollowConfirm.isShowing()) { + unfollowConfirm.show(); + } } } - } - // mute user - else if (item.getItemId() == R.id.profile_mute) { - if (user != null && relation != null) { - if (relation.isMuted()) { - profileAsync = new UserAction(this, user); - profileAsync.execute(ACTION_UNMUTE); - } else if (!muteConfirm.isShowing()) { - muteConfirm.show(); + // mute user + else if (item.getItemId() == R.id.profile_mute) { + if (relation != null) { + if (relation.isMuted()) { + profileAsync = new UserAction(this, user.getId()); + profileAsync.execute(ACTION_UNMUTE); + } else if (!muteConfirm.isShowing()) { + muteConfirm.show(); + } } } - } - // block user - else if (item.getItemId() == R.id.profile_block) { - if (user != null && relation != null) { - if (relation.isBlocked()) { - profileAsync = new UserAction(this, user); - profileAsync.execute(ACTION_UNBLOCK); - } else if (!blockConfirm.isShowing()) { - blockConfirm.show(); + // block user + else if (item.getItemId() == R.id.profile_block) { + if (relation != null) { + if (relation.isBlocked()) { + profileAsync = new UserAction(this, user.getId()); + profileAsync.execute(ACTION_UNBLOCK); + } else if (!blockConfirm.isShowing()) { + blockConfirm.show(); + } } } - } - // open profile editor - else if (item.getItemId() == R.id.profile_settings) { - Intent editProfile = new Intent(this, ProfileEditor.class); - startActivityForResult(editProfile, REQUEST_PROFILE_CHANGED); - } - // open direct message - else if (item.getItemId() == R.id.profile_message) { - if (user != null) { + // open profile editor + else if (item.getItemId() == R.id.profile_settings) { + Intent editProfile = new Intent(this, ProfileEditor.class); + editProfile.putExtra(KEY_USER_DATA, user); + startActivityForResult(editProfile, REQUEST_PROFILE_CHANGED); + } + // open direct message + else if (item.getItemId() == R.id.profile_message) { Intent dmPage; - if (isHomeProfile) { + if (user.isCurrentUser()) { dmPage = new Intent(this, DirectMessage.class); } else { dmPage = new Intent(this, MessagePopup.class); @@ -379,12 +377,12 @@ public class UserProfile extends AppCompatActivity implements OnClickListener, O } startActivity(dmPage); } - } - // open users list - else if (item.getItemId() == R.id.profile_lists) { - Intent listPage = new Intent(this, UserLists.class); - listPage.putExtra(KEY_USERLIST_OWNER_ID, userId); - startActivity(listPage); + // open users list + else if (item.getItemId() == R.id.profile_lists) { + Intent listPage = new Intent(this, UserLists.class); + listPage.putExtra(KEY_USERLIST_OWNER_ID, user.getId()); + startActivity(listPage); + } } return super.onOptionsItemSelected(item); } @@ -445,9 +443,9 @@ public class UserProfile extends AppCompatActivity implements OnClickListener, O // open following page if (v.getId() == R.id.following) { if (user != null && relation != null) { - if (!user.isLocked() || relation.isFriend() || isHomeProfile) { + if (!user.isLocked() || user.isCurrentUser() || relation.isFriend()) { Intent following = new Intent(this, UserDetail.class); - following.putExtra(KEY_USERDETAIL_ID, userId); + following.putExtra(KEY_USERDETAIL_ID, user.getId()); following.putExtra(KEY_USERDETAIL_MODE, USERLIST_FRIENDS); startActivity(following); } @@ -456,9 +454,9 @@ public class UserProfile extends AppCompatActivity implements OnClickListener, O // open follower page else if (v.getId() == R.id.follower) { if (user != null && relation != null) { - if (!user.isLocked() || relation.isFriend() || isHomeProfile) { + if (!user.isLocked() || user.isCurrentUser() || relation.isFriend()) { Intent follower = new Intent(this, UserDetail.class); - follower.putExtra(KEY_USERDETAIL_ID, userId); + follower.putExtra(KEY_USERDETAIL_ID, user.getId()); follower.putExtra(KEY_USERDETAIL_MODE, USERLIST_FOLLOWER); startActivity(follower); } @@ -500,7 +498,7 @@ public class UserProfile extends AppCompatActivity implements OnClickListener, O @Override public void onConfirm(DialogBuilder.DialogType type) { if (user != null) { - profileAsync = new UserAction(this, user); + profileAsync = new UserAction(this, user.getId()); // confirmed unfollowing user if (type == PROFILE_UNFOLLOW) { profileAsync.execute(ACTION_UNFOLLOW); 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 bd84ec7d..072510b7 100644 --- a/app/src/main/java/org/nuclearfog/twidda/adapter/FragmentAdapter.java +++ b/app/src/main/java/org/nuclearfog/twidda/adapter/FragmentAdapter.java @@ -105,28 +105,25 @@ public class FragmentAdapter extends FragmentStatePagerAdapter { } /** - * setup adapter for viewing user tweets and favs + * setup adapter for viewing user tweets and favorites * - * @param userId ID of the user - * @param username screen name of the user + * @param userId ID of the user */ - public void setupProfilePage(long userId, String username) { - Bundle usr_tweet = new Bundle(); - Bundle usr_favor = new Bundle(); - if (userId > 0) { - usr_tweet.putLong(KEY_FRAG_TWEET_ID, userId); - usr_favor.putLong(KEY_FRAG_TWEET_ID, userId); - } else { - 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); + public void setupProfilePage(long userId) { fragments = new ListFragment[2]; + fragments[0] = new TweetFragment(); - fragments[1] = new TweetFragment(); + Bundle usr_tweet = new Bundle(); + usr_tweet.putLong(KEY_FRAG_TWEET_ID, userId); + usr_tweet.putInt(KEY_FRAG_TWEET_MODE, TWEET_FRAG_TWEETS); fragments[0].setArguments(usr_tweet); + + fragments[1] = new TweetFragment(); + Bundle usr_favor = new Bundle(); + usr_favor.putLong(KEY_FRAG_TWEET_ID, userId); + usr_favor.putInt(KEY_FRAG_TWEET_MODE, TWEET_FRAG_FAVORS); fragments[1].setArguments(usr_favor); + notifyDataSetChanged(); } @@ -250,7 +247,8 @@ public class FragmentAdapter extends FragmentStatePagerAdapter { /** * setup adapter for a page of tweets and users in an user list * - * @param listId ID of an user list + * @param listId ID of an user list + * @param ownerOfList true if current user owns this list */ public void setupListContentPage(long listId, boolean ownerOfList) { Bundle tweetParam = new Bundle(); diff --git a/app/src/main/java/org/nuclearfog/twidda/backend/LinkLoader.java b/app/src/main/java/org/nuclearfog/twidda/backend/LinkLoader.java index 20705227..6aca9ab9 100644 --- a/app/src/main/java/org/nuclearfog/twidda/backend/LinkLoader.java +++ b/app/src/main/java/org/nuclearfog/twidda/backend/LinkLoader.java @@ -15,6 +15,8 @@ import org.nuclearfog.twidda.activity.TweetActivity; import org.nuclearfog.twidda.activity.TweetPopup; import org.nuclearfog.twidda.activity.UserLists; import org.nuclearfog.twidda.activity.UserProfile; +import org.nuclearfog.twidda.backend.engine.TwitterEngine; +import org.nuclearfog.twidda.backend.items.User; import java.lang.ref.WeakReference; import java.util.regex.Pattern; @@ -24,7 +26,8 @@ import static org.nuclearfog.twidda.activity.TweetActivity.KEY_TWEET_ID; import static org.nuclearfog.twidda.activity.TweetActivity.KEY_TWEET_NAME; import static org.nuclearfog.twidda.activity.TweetPopup.KEY_TWEETPOPUP_TEXT; import static org.nuclearfog.twidda.activity.UserLists.KEY_USERLIST_OWNER_NAME; -import static org.nuclearfog.twidda.activity.UserProfile.KEY_PROFILE_NAME; +import static org.nuclearfog.twidda.activity.UserProfile.KEY_PROFILE_DATA; +import static org.nuclearfog.twidda.activity.UserProfile.KEY_PROFILE_DISABLE_RELOAD; /** * This class handles deep links and starts activities to show the content @@ -38,10 +41,12 @@ public class LinkLoader extends AsyncTask { private static final Pattern LIST_PATH = Pattern.compile("[\\w]+/lists"); private WeakReference callback; + private TwitterEngine mTwitter; public LinkLoader(MainActivity callback) { super(); this.callback = new WeakReference<>(callback); + mTwitter = TwitterEngine.getInstance(callback); } @Override @@ -99,7 +104,9 @@ public class LinkLoader extends AsyncTask { int end = path.indexOf('/'); if (end > 0) path = path.substring(0, end); - data.putString(KEY_PROFILE_NAME, path); + User user = mTwitter.getUser(path); + data.putSerializable(KEY_PROFILE_DATA, user); + data.putBoolean(KEY_PROFILE_DISABLE_RELOAD, true); dataHolder = new DataHolder(data, UserProfile.class); } else if (TWEET_PATH.matcher(path).matches()) { String username = '@' + path.substring(0, path.indexOf('/')); diff --git a/app/src/main/java/org/nuclearfog/twidda/backend/UserAction.java b/app/src/main/java/org/nuclearfog/twidda/backend/UserAction.java index 05f13e34..31d985b6 100644 --- a/app/src/main/java/org/nuclearfog/twidda/backend/UserAction.java +++ b/app/src/main/java/org/nuclearfog/twidda/backend/UserAction.java @@ -61,28 +61,17 @@ public class UserAction extends AsyncTask { private TwitterEngine mTwitter; private AppDatabase db; private long userId; - private String screenName; /** * @param callback Callback to return the result - * @param user twitter user information + * @param userId ID of the twitter user */ - public UserAction(UserProfile callback, User user) { - this(callback, user.getId(), user.getScreenname()); - } - - /** - * @param callback Callback to return the result - * @param userId ID of the twitter user - * @param screenName username alternative to User ID - */ - public UserAction(UserProfile callback, long userId, String screenName) { + public UserAction(UserProfile callback, long userId) { super(); this.callback = new WeakReference<>(callback); mTwitter = TwitterEngine.getInstance(callback); db = new AppDatabase(callback); this.userId = userId; - this.screenName = screenName; } @@ -102,11 +91,11 @@ public class UserAction extends AsyncTask { case PROFILE_lOAD: // load user information from twitter - user = mTwitter.getUser(userId, screenName); + user = mTwitter.getUser(userId); publishProgress(user); db.storeUser(user); // load user relations from twitter - Relation relation = mTwitter.getConnection(userId, screenName); + Relation relation = mTwitter.getConnection(userId); if (!relation.isHome()) { boolean muteUser = relation.isBlocked() || relation.isMuted(); db.muteUser(userId, muteUser); @@ -147,7 +136,7 @@ public class UserAction extends AsyncTask { db.muteUser(userId, false); break; } - return mTwitter.getConnection(userId, screenName); + return mTwitter.getConnection(userId); } catch (EngineException twException) { this.twException = twException; return null; diff --git a/app/src/main/java/org/nuclearfog/twidda/backend/UserUpdater.java b/app/src/main/java/org/nuclearfog/twidda/backend/UserUpdater.java index dd4b8f55..955db59f 100644 --- a/app/src/main/java/org/nuclearfog/twidda/backend/UserUpdater.java +++ b/app/src/main/java/org/nuclearfog/twidda/backend/UserUpdater.java @@ -25,17 +25,10 @@ public class UserUpdater extends AsyncTask { private WeakReference callback; private TwitterEngine mTwitter; private AppDatabase db; - private Action action; - - public enum Action { - READ, - WRITE - } - public UserUpdater(ProfileEditor callback, Action action) { + public UserUpdater(ProfileEditor callback) { super(); - this.action = action; this.callback = new WeakReference<>(callback); mTwitter = TwitterEngine.getInstance(callback); db = new AppDatabase(callback); @@ -53,15 +46,9 @@ public class UserUpdater extends AsyncTask { @Override protected User doInBackground(UserHolder[] holder) { try { - switch (action) { - case READ: - return mTwitter.getCurrentUser(); - - case WRITE: - User user = mTwitter.updateProfile(holder[0]); - db.storeUser(user); - return user; - } + User user = mTwitter.updateProfile(holder[0]); + db.storeUser(user); + return user; } catch (EngineException twException) { this.twException = twException; } @@ -75,11 +62,7 @@ public class UserUpdater extends AsyncTask { if (activity != null) { activity.setLoading(false); if (user != null) { - if (action == Action.READ) { - activity.setUser(user); - } else { - activity.onSuccess(user); - } + activity.onSuccess(user); } else if (twException != null) { activity.onError(twException); } 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 418105f4..f267d6c0 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 @@ -406,36 +406,30 @@ public class TwitterEngine { /** - * Get User Context + * Get User * - * @param userId User ID - * @param username User screen name, if user ID is defined, username can be empty + * @param userId User ID * @return User Object * @throws EngineException if Access is unavailable */ - public User getUser(long userId, String username) throws EngineException { + public User getUser(long userId) throws EngineException { try { - if (userId > 0) { - return new User(twitter.showUser(userId), twitter.getId()); - } else { - return new User(twitter.showUser(username), twitter.getId()); - } + return new User(twitter.showUser(userId), twitter.getId()); } catch (Exception err) { throw new EngineException(err); } } - /** - * Get current user + * Get User * - * @return curent user + * @param username screen name of the user + * @return User Object * @throws EngineException if Access is unavailable */ - public User getCurrentUser() throws EngineException { + public User getUser(String username) throws EngineException { try { - long currentUserId = twitter.getId(); - return new User(twitter.showUser(currentUserId), currentUserId); + return new User(twitter.showUser(username), twitter.getId()); } catch (Exception err) { throw new EngineException(err); } @@ -445,18 +439,13 @@ public class TwitterEngine { /** * Efficient Access of Connection Information * - * @param userId User ID compared with Home ID - * @param username User screen name + * @param userId User ID compared with Home ID * @return User Properties * @throws EngineException if Connection is unavailable */ - public Relation getConnection(long userId, String username) throws EngineException { + public Relation getConnection(long userId) throws EngineException { try { - if (userId > 0) { - return new Relation(twitter.showFriendship(twitter.getId(), userId)); - } else { - return new Relation(twitter.showFriendship(twitter.getScreenName(), username)); - } + return new Relation(twitter.showFriendship(twitter.getId(), userId)); } catch (Exception err) { throw new EngineException(err); } diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index a501f1ae..ca271971 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -1,7 +1,7 @@ -