From d7ad3b934d18aeecdd0b4eec30674ea8748867a6 Mon Sep 17 00:00:00 2001 From: Pratham Pahariya <54663429+Pratham2305@users.noreply.github.com> Date: Mon, 18 Apr 2022 18:47:40 +0530 Subject: [PATCH] #4730 - Nothing happens on clicking media in the Contribution tab of User's Profile (#4736) * enable clicking on contributions in user's profile * Added null condition * Added Comments Co-authored-by: Pratham2305 --- .../contributions/ContributionsFragment.java | 52 +++++++++++++++---- .../ContributionsListFragment.java | 4 ++ .../media/MediaDetailPagerFragment.java | 6 ++- .../nearby/NearbyNotificationCardView.java | 2 +- .../nrw/commons/profile/ProfileActivity.java | 29 +++++++++-- app/src/main/res/layout/activity_profile.xml | 2 +- 6 files changed, 76 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsFragment.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsFragment.java index b5339bbeb..25d6e7d33 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsFragment.java @@ -3,6 +3,7 @@ package fr.free.nrw.commons.contributions; import static fr.free.nrw.commons.contributions.Contribution.STATE_FAILED; import static fr.free.nrw.commons.contributions.Contribution.STATE_PAUSED; import static fr.free.nrw.commons.nearby.fragments.NearbyParentFragment.WLM_URL; +import static fr.free.nrw.commons.profile.ProfileActivity.KEY_USERNAME; import static fr.free.nrw.commons.utils.LengthUtils.formatDistanceBetween; import android.Manifest; @@ -30,6 +31,7 @@ import fr.free.nrw.commons.Utils; import fr.free.nrw.commons.auth.SessionManager; import fr.free.nrw.commons.notification.Notification; import fr.free.nrw.commons.notification.NotificationController; +import fr.free.nrw.commons.profile.ProfileActivity; import fr.free.nrw.commons.theme.BaseActivity; import java.text.ParseException; import java.util.Date; @@ -113,6 +115,9 @@ public class ContributionsFragment private Campaign wlmCampaign; + String userName; + private boolean isUserProfile; + @NonNull public static ContributionsFragment newInstance() { ContributionsFragment fragment = new ContributionsFragment(); @@ -125,6 +130,10 @@ public class ContributionsFragment @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); + if (getArguments() != null && getArguments().getString(KEY_USERNAME) != null) { + userName = getArguments().getString(KEY_USERNAME); + isUserProfile = true; + } } @Nullable @@ -154,7 +163,11 @@ public class ContributionsFragment } initFragments(); - upDateUploadCount(); + if(isUserProfile) { + limitedConnectionEnabledLayout.setVisibility(View.GONE); + }else { + upDateUploadCount(); + } if(shouldShowMediaDetailsFragment){ showMediaDetailPagerFragment(); }else{ @@ -165,7 +178,7 @@ public class ContributionsFragment } if (!ConfigUtils.isBetaFlavour() && sessionManager.isUserLoggedIn() - && sessionManager.getCurrentAccount() != null) { + && sessionManager.getCurrentAccount() != null && !isUserProfile) { setUploadCount(); } limitedConnectionEnabledLayout.setOnClickListener(toggleDescriptionListener); @@ -269,7 +282,7 @@ public class ContributionsFragment */ private void showContributionsListFragment() { // show nearby card view on contributions list is visible - if (nearbyNotificationCardView != null) { + if (nearbyNotificationCardView != null && !isUserProfile) { if (store.getBoolean("displayNearbyCardView", true)) { if (nearbyNotificationCardView.cardViewVisibilityState == NearbyNotificationCardView.CardViewVisibilityState.READY) { @@ -301,6 +314,9 @@ public class ContributionsFragment private void initFragments() { if (null == contributionsListFragment) { contributionsListFragment = new ContributionsListFragment(); + Bundle contributionsListBundle = new Bundle(); + contributionsListBundle.putString(KEY_USERNAME, userName); + contributionsListFragment.setArguments(contributionsListBundle); } if (shouldShowMediaDetailsFragment) { @@ -398,7 +414,7 @@ public class ContributionsFragment }); // Notification cards should only be seen on contributions list, not in media details - if (mediaDetailPagerFragment == null) { + if (mediaDetailPagerFragment == null && !isUserProfile) { if (store.getBoolean("displayNearbyCardView", true)) { checkPermissionsAndShowNearbyCardView(); if (nearbyNotificationCardView.cardViewVisibilityState == NearbyNotificationCardView.CardViewVisibilityState.READY) { @@ -410,8 +426,11 @@ public class ContributionsFragment nearbyNotificationCardView.setVisibility(View.GONE); } - setNotificationCount(); - fetchCampaigns(); + // Notification Count and Campaigns should not be set, if it is used in User Profile + if(!isUserProfile) { + setNotificationCount(); + fetchCampaigns(); + } } } @@ -549,7 +568,7 @@ public class ContributionsFragment } @Override public void showCampaigns(Campaign campaign) { - if (campaign != null) { + if (campaign != null && !isUserProfile) { campaignView.setCampaign(campaign); } } @@ -619,6 +638,9 @@ public class ContributionsFragment public void showDetail(int position, boolean isWikipediaButtonDisplayed) { if (mediaDetailPagerFragment == null || !mediaDetailPagerFragment.isVisible()) { mediaDetailPagerFragment = new MediaDetailPagerFragment(); + if(isUserProfile) { + ((ProfileActivity)getActivity()).setScroll(false); + } showMediaDetailPagerFragment(); } mediaDetailPagerFragment.showImage(position, isWikipediaButtonDisplayed); @@ -641,7 +663,7 @@ public class ContributionsFragment public boolean backButtonClicked() { if (null != mediaDetailPagerFragment && mediaDetailPagerFragment.isVisible()) { - if (store.getBoolean("displayNearbyCardView", true)) { + if (store.getBoolean("displayNearbyCardView", true) && !isUserProfile) { if (nearbyNotificationCardView.cardViewVisibilityState == NearbyNotificationCardView.CardViewVisibilityState.READY) { nearbyNotificationCardView.setVisibility(View.VISIBLE); } @@ -650,9 +672,17 @@ public class ContributionsFragment } removeFragment(mediaDetailPagerFragment); showFragment(contributionsListFragment, CONTRIBUTION_LIST_FRAGMENT_TAG, mediaDetailPagerFragment); - ((BaseActivity)getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(false); - ((MainActivity)getActivity()).showTabs(); - fetchCampaigns(); + if(isUserProfile) { + // Fragment is associated with ProfileActivity + // Enable ParentViewPager Scroll + ((ProfileActivity)getActivity()).setScroll(true); + }else { + fetchCampaigns(); + } + if(getActivity() instanceof MainActivity) { + // Fragment is associated with MainActivity + ((MainActivity)getActivity()).showTabs(); + } return true; } return false; diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java index 3137c9b58..13155f37b 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java @@ -201,6 +201,10 @@ public class ContributionsListFragment extends CommonsDaggerSupportFragment impl @Override public void onItemRangeInserted(int positionStart, int itemCount) { super.onItemRangeInserted(positionStart, itemCount); + contributionsSize = adapter.getItemCount(); + if (callback != null) { + callback.notifyDataSetChanged(); + } if (itemCount > 0 && positionStart == 0) { if (adapter.getContributionForPosition(positionStart) != null) { rvContributionsList diff --git a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailPagerFragment.java b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailPagerFragment.java index 1c5cc01d8..8e66472f7 100644 --- a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailPagerFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailPagerFragment.java @@ -103,7 +103,6 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple pager.addOnPageChangeListener(this); adapter = new MediaDetailAdapter(getChildFragmentManager()); - ((BaseActivity)getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true); if (getActivity() != null) { final ActionBar actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar(); @@ -112,6 +111,11 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple } } + // If fragment is associated with ProfileActivity, then hide the tabLayout + if (getActivity() instanceof ProfileActivity) { + ((ProfileActivity)getActivity()).tabLayout.setVisibility(View.GONE); + } + pager.setAdapter(adapter); if (savedInstanceState != null) { diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyNotificationCardView.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyNotificationCardView.java index e255de7b4..99121eec2 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyNotificationCardView.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyNotificationCardView.java @@ -73,7 +73,7 @@ public class NearbyNotificationCardView extends SwipableCardView { protected void onAttachedToWindow() { super.onAttachedToWindow(); // If you don't setVisibility after getting layout params, then you will se an empty space in place of nearby NotificationCardView - if (((MainActivity)getContext()).defaultKvStore.getBoolean("displayNearbyCardView", true) && this.cardViewVisibilityState == NearbyNotificationCardView.CardViewVisibilityState.READY) { + if (getContext() instanceof MainActivity && ((MainActivity)getContext()).defaultKvStore.getBoolean("displayNearbyCardView", true) && this.cardViewVisibilityState == NearbyNotificationCardView.CardViewVisibilityState.READY) { setVisibility(VISIBLE); } else { setVisibility(GONE); diff --git a/app/src/main/java/fr/free/nrw/commons/profile/ProfileActivity.java b/app/src/main/java/fr/free/nrw/commons/profile/ProfileActivity.java index 71703e0d7..b7bbe5aca 100644 --- a/app/src/main/java/fr/free/nrw/commons/profile/ProfileActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/profile/ProfileActivity.java @@ -26,7 +26,9 @@ import fr.free.nrw.commons.R; import fr.free.nrw.commons.Utils; import fr.free.nrw.commons.ViewPagerAdapter; import fr.free.nrw.commons.auth.SessionManager; +import fr.free.nrw.commons.contributions.ContributionsFragment; import fr.free.nrw.commons.contributions.ContributionsListFragment; +import fr.free.nrw.commons.explore.ParentViewPager; import fr.free.nrw.commons.profile.achievements.AchievementsFragment; import fr.free.nrw.commons.profile.leaderboard.LeaderboardFragment; import fr.free.nrw.commons.theme.BaseActivity; @@ -46,10 +48,10 @@ public class ProfileActivity extends BaseActivity { private FragmentManager supportFragmentManager; @BindView(R.id.viewPager) - ViewPager viewPager; + ParentViewPager viewPager; @BindView(R.id.tab_layout) - TabLayout tabLayout; + public TabLayout tabLayout; @Inject SessionManager sessionManager; @@ -64,6 +66,11 @@ public class ProfileActivity extends BaseActivity { String userName; private boolean shouldShowContributions; + ContributionsFragment contributionsFragment; + + public void setScroll(boolean canScroll){ + viewPager.setCanScroll(canScroll); + } @Override protected void onRestoreInstanceState(final Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); @@ -137,11 +144,11 @@ public class ProfileActivity extends BaseActivity { titleList.add(getResources().getString(R.string.leaderboard_tab_title).toUpperCase()); if (shouldShowContributions) { - ContributionsListFragment contributionsListFragment = new ContributionsListFragment(); + contributionsFragment = new ContributionsFragment(); Bundle contributionsListBundle = new Bundle(); contributionsListBundle.putString(KEY_USERNAME, userName); - contributionsListFragment.setArguments(contributionsListBundle); - fragmentList.add(contributionsListFragment); + contributionsFragment.setArguments(contributionsListBundle); + fragmentList.add(contributionsFragment); titleList.add(getString(R.string.contributions_fragment).toUpperCase()); } viewPagerAdapter.setTabData(fragmentList, titleList); @@ -232,6 +239,18 @@ public class ProfileActivity extends BaseActivity { @Override protected void onSaveInstanceState(@NonNull final Bundle outState) { outState.putString(KEY_USERNAME, userName); + outState.putBoolean(KEY_SHOULD_SHOW_CONTRIBUTIONS, shouldShowContributions); super.onSaveInstanceState(outState); } + + @Override + public void onBackPressed() { + // Checking if MediaDetailPagerFragment is visible, If visible then show ContributionListFragment else close the ProfileActivity + if(contributionsFragment != null && contributionsFragment.getMediaDetailPagerFragment() != null && contributionsFragment.getMediaDetailPagerFragment().isVisible()) { + contributionsFragment.backButtonClicked(); + tabLayout.setVisibility(View.VISIBLE); + }else { + super.onBackPressed(); + } + } } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_profile.xml b/app/src/main/res/layout/activity_profile.xml index 47e24da27..114490f3f 100644 --- a/app/src/main/res/layout/activity_profile.xml +++ b/app/src/main/res/layout/activity_profile.xml @@ -27,7 +27,7 @@ app:tabTextColor="?attr/tabTextColor" /> -