#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 <Pratham2305@users.noreply.github.com>
This commit is contained in:
Pratham Pahariya 2022-04-18 18:47:40 +05:30 committed by GitHub
parent 7579c1aa16
commit d7ad3b934d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 76 additions and 19 deletions

View file

@ -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_FAILED;
import static fr.free.nrw.commons.contributions.Contribution.STATE_PAUSED; 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.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 static fr.free.nrw.commons.utils.LengthUtils.formatDistanceBetween;
import android.Manifest; 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.auth.SessionManager;
import fr.free.nrw.commons.notification.Notification; import fr.free.nrw.commons.notification.Notification;
import fr.free.nrw.commons.notification.NotificationController; import fr.free.nrw.commons.notification.NotificationController;
import fr.free.nrw.commons.profile.ProfileActivity;
import fr.free.nrw.commons.theme.BaseActivity; import fr.free.nrw.commons.theme.BaseActivity;
import java.text.ParseException; import java.text.ParseException;
import java.util.Date; import java.util.Date;
@ -113,6 +115,9 @@ public class ContributionsFragment
private Campaign wlmCampaign; private Campaign wlmCampaign;
String userName;
private boolean isUserProfile;
@NonNull @NonNull
public static ContributionsFragment newInstance() { public static ContributionsFragment newInstance() {
ContributionsFragment fragment = new ContributionsFragment(); ContributionsFragment fragment = new ContributionsFragment();
@ -125,6 +130,10 @@ public class ContributionsFragment
@Override @Override
public void onCreate(@Nullable Bundle savedInstanceState) { public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
if (getArguments() != null && getArguments().getString(KEY_USERNAME) != null) {
userName = getArguments().getString(KEY_USERNAME);
isUserProfile = true;
}
} }
@Nullable @Nullable
@ -154,7 +163,11 @@ public class ContributionsFragment
} }
initFragments(); initFragments();
upDateUploadCount(); if(isUserProfile) {
limitedConnectionEnabledLayout.setVisibility(View.GONE);
}else {
upDateUploadCount();
}
if(shouldShowMediaDetailsFragment){ if(shouldShowMediaDetailsFragment){
showMediaDetailPagerFragment(); showMediaDetailPagerFragment();
}else{ }else{
@ -165,7 +178,7 @@ public class ContributionsFragment
} }
if (!ConfigUtils.isBetaFlavour() && sessionManager.isUserLoggedIn() if (!ConfigUtils.isBetaFlavour() && sessionManager.isUserLoggedIn()
&& sessionManager.getCurrentAccount() != null) { && sessionManager.getCurrentAccount() != null && !isUserProfile) {
setUploadCount(); setUploadCount();
} }
limitedConnectionEnabledLayout.setOnClickListener(toggleDescriptionListener); limitedConnectionEnabledLayout.setOnClickListener(toggleDescriptionListener);
@ -269,7 +282,7 @@ public class ContributionsFragment
*/ */
private void showContributionsListFragment() { private void showContributionsListFragment() {
// show nearby card view on contributions list is visible // show nearby card view on contributions list is visible
if (nearbyNotificationCardView != null) { if (nearbyNotificationCardView != null && !isUserProfile) {
if (store.getBoolean("displayNearbyCardView", true)) { if (store.getBoolean("displayNearbyCardView", true)) {
if (nearbyNotificationCardView.cardViewVisibilityState if (nearbyNotificationCardView.cardViewVisibilityState
== NearbyNotificationCardView.CardViewVisibilityState.READY) { == NearbyNotificationCardView.CardViewVisibilityState.READY) {
@ -301,6 +314,9 @@ public class ContributionsFragment
private void initFragments() { private void initFragments() {
if (null == contributionsListFragment) { if (null == contributionsListFragment) {
contributionsListFragment = new ContributionsListFragment(); contributionsListFragment = new ContributionsListFragment();
Bundle contributionsListBundle = new Bundle();
contributionsListBundle.putString(KEY_USERNAME, userName);
contributionsListFragment.setArguments(contributionsListBundle);
} }
if (shouldShowMediaDetailsFragment) { if (shouldShowMediaDetailsFragment) {
@ -398,7 +414,7 @@ public class ContributionsFragment
}); });
// Notification cards should only be seen on contributions list, not in media details // 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)) { if (store.getBoolean("displayNearbyCardView", true)) {
checkPermissionsAndShowNearbyCardView(); checkPermissionsAndShowNearbyCardView();
if (nearbyNotificationCardView.cardViewVisibilityState == NearbyNotificationCardView.CardViewVisibilityState.READY) { if (nearbyNotificationCardView.cardViewVisibilityState == NearbyNotificationCardView.CardViewVisibilityState.READY) {
@ -410,8 +426,11 @@ public class ContributionsFragment
nearbyNotificationCardView.setVisibility(View.GONE); nearbyNotificationCardView.setVisibility(View.GONE);
} }
setNotificationCount(); // Notification Count and Campaigns should not be set, if it is used in User Profile
fetchCampaigns(); if(!isUserProfile) {
setNotificationCount();
fetchCampaigns();
}
} }
} }
@ -549,7 +568,7 @@ public class ContributionsFragment
} }
@Override public void showCampaigns(Campaign campaign) { @Override public void showCampaigns(Campaign campaign) {
if (campaign != null) { if (campaign != null && !isUserProfile) {
campaignView.setCampaign(campaign); campaignView.setCampaign(campaign);
} }
} }
@ -619,6 +638,9 @@ public class ContributionsFragment
public void showDetail(int position, boolean isWikipediaButtonDisplayed) { public void showDetail(int position, boolean isWikipediaButtonDisplayed) {
if (mediaDetailPagerFragment == null || !mediaDetailPagerFragment.isVisible()) { if (mediaDetailPagerFragment == null || !mediaDetailPagerFragment.isVisible()) {
mediaDetailPagerFragment = new MediaDetailPagerFragment(); mediaDetailPagerFragment = new MediaDetailPagerFragment();
if(isUserProfile) {
((ProfileActivity)getActivity()).setScroll(false);
}
showMediaDetailPagerFragment(); showMediaDetailPagerFragment();
} }
mediaDetailPagerFragment.showImage(position, isWikipediaButtonDisplayed); mediaDetailPagerFragment.showImage(position, isWikipediaButtonDisplayed);
@ -641,7 +663,7 @@ public class ContributionsFragment
public boolean backButtonClicked() { public boolean backButtonClicked() {
if (null != mediaDetailPagerFragment && mediaDetailPagerFragment.isVisible()) { if (null != mediaDetailPagerFragment && mediaDetailPagerFragment.isVisible()) {
if (store.getBoolean("displayNearbyCardView", true)) { if (store.getBoolean("displayNearbyCardView", true) && !isUserProfile) {
if (nearbyNotificationCardView.cardViewVisibilityState == NearbyNotificationCardView.CardViewVisibilityState.READY) { if (nearbyNotificationCardView.cardViewVisibilityState == NearbyNotificationCardView.CardViewVisibilityState.READY) {
nearbyNotificationCardView.setVisibility(View.VISIBLE); nearbyNotificationCardView.setVisibility(View.VISIBLE);
} }
@ -650,9 +672,17 @@ public class ContributionsFragment
} }
removeFragment(mediaDetailPagerFragment); removeFragment(mediaDetailPagerFragment);
showFragment(contributionsListFragment, CONTRIBUTION_LIST_FRAGMENT_TAG, mediaDetailPagerFragment); showFragment(contributionsListFragment, CONTRIBUTION_LIST_FRAGMENT_TAG, mediaDetailPagerFragment);
((BaseActivity)getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(false); if(isUserProfile) {
((MainActivity)getActivity()).showTabs(); // Fragment is associated with ProfileActivity
fetchCampaigns(); // Enable ParentViewPager Scroll
((ProfileActivity)getActivity()).setScroll(true);
}else {
fetchCampaigns();
}
if(getActivity() instanceof MainActivity) {
// Fragment is associated with MainActivity
((MainActivity)getActivity()).showTabs();
}
return true; return true;
} }
return false; return false;

View file

@ -201,6 +201,10 @@ public class ContributionsListFragment extends CommonsDaggerSupportFragment impl
@Override @Override
public void onItemRangeInserted(int positionStart, int itemCount) { public void onItemRangeInserted(int positionStart, int itemCount) {
super.onItemRangeInserted(positionStart, itemCount); super.onItemRangeInserted(positionStart, itemCount);
contributionsSize = adapter.getItemCount();
if (callback != null) {
callback.notifyDataSetChanged();
}
if (itemCount > 0 && positionStart == 0) { if (itemCount > 0 && positionStart == 0) {
if (adapter.getContributionForPosition(positionStart) != null) { if (adapter.getContributionForPosition(positionStart) != null) {
rvContributionsList rvContributionsList

View file

@ -103,7 +103,6 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple
pager.addOnPageChangeListener(this); pager.addOnPageChangeListener(this);
adapter = new MediaDetailAdapter(getChildFragmentManager()); adapter = new MediaDetailAdapter(getChildFragmentManager());
((BaseActivity)getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
if (getActivity() != null) { if (getActivity() != null) {
final ActionBar actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar(); 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); pager.setAdapter(adapter);
if (savedInstanceState != null) { if (savedInstanceState != null) {

View file

@ -73,7 +73,7 @@ public class NearbyNotificationCardView extends SwipableCardView {
protected void onAttachedToWindow() { protected void onAttachedToWindow() {
super.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 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); setVisibility(VISIBLE);
} else { } else {
setVisibility(GONE); setVisibility(GONE);

View file

@ -26,7 +26,9 @@ import fr.free.nrw.commons.R;
import fr.free.nrw.commons.Utils; import fr.free.nrw.commons.Utils;
import fr.free.nrw.commons.ViewPagerAdapter; import fr.free.nrw.commons.ViewPagerAdapter;
import fr.free.nrw.commons.auth.SessionManager; 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.contributions.ContributionsListFragment;
import fr.free.nrw.commons.explore.ParentViewPager;
import fr.free.nrw.commons.profile.achievements.AchievementsFragment; import fr.free.nrw.commons.profile.achievements.AchievementsFragment;
import fr.free.nrw.commons.profile.leaderboard.LeaderboardFragment; import fr.free.nrw.commons.profile.leaderboard.LeaderboardFragment;
import fr.free.nrw.commons.theme.BaseActivity; import fr.free.nrw.commons.theme.BaseActivity;
@ -46,10 +48,10 @@ public class ProfileActivity extends BaseActivity {
private FragmentManager supportFragmentManager; private FragmentManager supportFragmentManager;
@BindView(R.id.viewPager) @BindView(R.id.viewPager)
ViewPager viewPager; ParentViewPager viewPager;
@BindView(R.id.tab_layout) @BindView(R.id.tab_layout)
TabLayout tabLayout; public TabLayout tabLayout;
@Inject @Inject
SessionManager sessionManager; SessionManager sessionManager;
@ -64,6 +66,11 @@ public class ProfileActivity extends BaseActivity {
String userName; String userName;
private boolean shouldShowContributions; private boolean shouldShowContributions;
ContributionsFragment contributionsFragment;
public void setScroll(boolean canScroll){
viewPager.setCanScroll(canScroll);
}
@Override @Override
protected void onRestoreInstanceState(final Bundle savedInstanceState) { protected void onRestoreInstanceState(final Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState); super.onRestoreInstanceState(savedInstanceState);
@ -137,11 +144,11 @@ public class ProfileActivity extends BaseActivity {
titleList.add(getResources().getString(R.string.leaderboard_tab_title).toUpperCase()); titleList.add(getResources().getString(R.string.leaderboard_tab_title).toUpperCase());
if (shouldShowContributions) { if (shouldShowContributions) {
ContributionsListFragment contributionsListFragment = new ContributionsListFragment(); contributionsFragment = new ContributionsFragment();
Bundle contributionsListBundle = new Bundle(); Bundle contributionsListBundle = new Bundle();
contributionsListBundle.putString(KEY_USERNAME, userName); contributionsListBundle.putString(KEY_USERNAME, userName);
contributionsListFragment.setArguments(contributionsListBundle); contributionsFragment.setArguments(contributionsListBundle);
fragmentList.add(contributionsListFragment); fragmentList.add(contributionsFragment);
titleList.add(getString(R.string.contributions_fragment).toUpperCase()); titleList.add(getString(R.string.contributions_fragment).toUpperCase());
} }
viewPagerAdapter.setTabData(fragmentList, titleList); viewPagerAdapter.setTabData(fragmentList, titleList);
@ -232,6 +239,18 @@ public class ProfileActivity extends BaseActivity {
@Override @Override
protected void onSaveInstanceState(@NonNull final Bundle outState) { protected void onSaveInstanceState(@NonNull final Bundle outState) {
outState.putString(KEY_USERNAME, userName); outState.putString(KEY_USERNAME, userName);
outState.putBoolean(KEY_SHOULD_SHOW_CONTRIBUTIONS, shouldShowContributions);
super.onSaveInstanceState(outState); 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();
}
}
} }

View file

@ -27,7 +27,7 @@
app:tabTextColor="?attr/tabTextColor" /> app:tabTextColor="?attr/tabTextColor" />
</com.google.android.material.appbar.AppBarLayout> </com.google.android.material.appbar.AppBarLayout>
<androidx.viewpager.widget.ViewPager <fr.free.nrw.commons.explore.ParentViewPager
android:id="@+id/viewPager" android:id="@+id/viewPager"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"