Skip to content

Commit 1a31265

Browse files
authored
Fixes #4215 "Swiping on the last item in explore featured tab takes you to uploaded via mobile" (#4227)
* scrolling disabled on media details * javadoc added * javadoc modified
1 parent 7d5773f commit 1a31265

File tree

7 files changed

+87
-12
lines changed

7 files changed

+87
-12
lines changed

app/src/main/java/fr/free/nrw/commons/bookmarks/BookmarkFragment.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,35 +4,30 @@
44
import android.view.LayoutInflater;
55
import android.view.View;
66
import android.view.ViewGroup;
7-
import android.widget.AdapterView;
87

98
import android.widget.FrameLayout;
109
import androidx.annotation.NonNull;
1110
import androidx.annotation.Nullable;
1211
import androidx.fragment.app.FragmentManager;
13-
import androidx.viewpager.widget.ViewPager;
1412

1513
import com.google.android.material.tabs.TabLayout;
1614

17-
import fr.free.nrw.commons.contributions.MainActivity;
1815
import fr.free.nrw.commons.di.CommonsDaggerSupportFragment;
16+
import fr.free.nrw.commons.explore.ParentViewPager;
1917
import fr.free.nrw.commons.theme.BaseActivity;
2018
import javax.inject.Inject;
2119

2220
import butterknife.BindView;
2321
import butterknife.ButterKnife;
24-
import fr.free.nrw.commons.Media;
2522
import fr.free.nrw.commons.R;
26-
import fr.free.nrw.commons.category.CategoryImagesCallback;
2723
import fr.free.nrw.commons.contributions.ContributionController;
28-
import fr.free.nrw.commons.media.MediaDetailPagerFragment;
2924

3025
public class BookmarkFragment extends CommonsDaggerSupportFragment {
3126

3227
private FragmentManager supportFragmentManager;
3328
private BookmarksPagerAdapter adapter;
3429
@BindView(R.id.viewPagerBookmarks)
35-
ViewPager viewPager;
30+
ParentViewPager viewPager;
3631
@BindView(R.id.tab_layout)
3732
TabLayout tabLayout;
3833
@BindView(R.id.fragmentContainer)
@@ -48,6 +43,10 @@ public static BookmarkFragment newInstance() {
4843
return fragment;
4944
}
5045

46+
public void setScroll(boolean canScroll){
47+
viewPager.setCanScroll(canScroll);
48+
}
49+
5150
@Override
5251
public void onCreate(@Nullable final Bundle savedInstanceState) {
5352
super.onCreate(savedInstanceState);

app/src/main/java/fr/free/nrw/commons/bookmarks/BookmarkListRootFragment.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,13 +181,14 @@ public void viewPagerNotifyDataSetChanged() {
181181
}
182182

183183
public void backPressed() {
184-
//check medaiDetailPage fragment is not null then we check medaiDetail.is Visible or not to avoid NullPointerException
184+
//check mediaDetailPage fragment is not null then we check mediaDetail.is Visible or not to avoid NullPointerException
185185
if(mediaDetails!=null) {
186186
if (mediaDetails.isVisible()) {
187187
// todo add get list fragment
188188
((BookmarkFragment) getParentFragment()).tabLayout.setVisibility(View.VISIBLE);
189189
ArrayList<Integer> removed=mediaDetails.getRemovedItems();
190190
removeFragment(mediaDetails);
191+
((BookmarkFragment) getParentFragment()).setScroll(true);
191192
setFragment(listFragment, mediaDetails);
192193
((MainActivity) getActivity()).showTabs();
193194
if(listFragment instanceof BookmarkPicturesFragment){
@@ -217,6 +218,7 @@ public void onItemClick(AdapterView<?> parent, View view, int position, long id)
217218
container.setVisibility(View.VISIBLE);
218219
((BookmarkFragment)getParentFragment()).tabLayout.setVisibility(View.GONE);
219220
mediaDetails = new MediaDetailPagerFragment(false, true);
221+
((BookmarkFragment) getParentFragment()).setScroll(false);
220222
setFragment(mediaDetails, listFragment);
221223
mediaDetails.showImage(position);
222224
}

app/src/main/java/fr/free/nrw/commons/explore/ExploreFragment.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import androidx.annotation.NonNull;
1111
import androidx.annotation.Nullable;
1212
import androidx.fragment.app.Fragment;
13-
import androidx.viewpager.widget.ViewPager;
1413
import butterknife.BindView;
1514
import butterknife.ButterKnife;
1615
import com.google.android.material.tabs.TabLayout;
@@ -30,11 +29,15 @@ public class ExploreFragment extends CommonsDaggerSupportFragment {
3029
@BindView(R.id.tab_layout)
3130
TabLayout tabLayout;
3231
@BindView(R.id.viewPager)
33-
ViewPager viewPager;
32+
ParentViewPager viewPager;
3433
ViewPagerAdapter viewPagerAdapter;
3534
private ExploreListRootFragment featuredRootFragment;
3635
private ExploreListRootFragment mobileRootFragment;
3736

37+
public void setScroll(boolean canScroll){
38+
viewPager.setCanScroll(canScroll);
39+
}
40+
3841
@NonNull
3942
public static ExploreFragment newInstance() {
4043
ExploreFragment fragment = new ExploreFragment();

app/src/main/java/fr/free/nrw/commons/explore/ExploreListRootFragment.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ public void onMediaClicked(int position) {
118118
((ExploreFragment)getParentFragment()).tabLayout.setVisibility(View.GONE);
119119
mediaDetails = new MediaDetailPagerFragment(false, true);
120120
mediaDetails.showImage(position);
121+
((ExploreFragment) getParentFragment()).setScroll(false);
121122
setFragment(mediaDetails, listFragment);
122123
}
123124

@@ -173,6 +174,7 @@ public void backPressed() {
173174
// todo add get list fragment
174175
((ExploreFragment)getParentFragment()).tabLayout.setVisibility(View.VISIBLE);
175176
removeFragment(mediaDetails);
177+
((ExploreFragment) getParentFragment()).setScroll(true);
176178
setFragment(listFragment, mediaDetails);
177179
} else {
178180
((MainActivity) getActivity()).setSelectedItemId(NavTab.CONTRIBUTIONS.code());
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package fr.free.nrw.commons.explore;
2+
3+
import android.content.Context;
4+
import android.util.AttributeSet;
5+
import android.view.MotionEvent;
6+
import androidx.viewpager.widget.ViewPager;
7+
8+
/**
9+
* ParentViewPager
10+
* A custom viewPager whose scrolling can be enabled and disabled.
11+
*/
12+
public class ParentViewPager extends ViewPager {
13+
14+
/**
15+
* Boolean variable that stores the current state of pager scroll i.e(enabled or disabled)
16+
*/
17+
private boolean canScroll = true;
18+
19+
20+
/**
21+
* Default constructors
22+
*/
23+
public ParentViewPager(Context context) {
24+
super(context);
25+
}
26+
27+
public ParentViewPager(Context context, AttributeSet attrs) {
28+
super(context, attrs);
29+
}
30+
31+
32+
/**
33+
* Setter method for canScroll.
34+
*/
35+
public void setCanScroll(boolean canScroll) {
36+
this.canScroll = canScroll;
37+
}
38+
39+
40+
/**
41+
* Getter method for canScroll.
42+
*/
43+
public boolean isCanScroll() {
44+
return canScroll;
45+
}
46+
47+
48+
/**
49+
* Method that prevents scrolling if canScroll is set to false.
50+
*/
51+
@Override
52+
public boolean onTouchEvent(MotionEvent ev) {
53+
return canScroll && super.onTouchEvent(ev);
54+
}
55+
56+
57+
/**
58+
* A facilitator method that allows parent to intercept touch events before its children.
59+
* thus making it possible to prevent swiping parent on child end.
60+
*/
61+
@Override
62+
public boolean onInterceptTouchEvent(MotionEvent ev) {
63+
return canScroll && super.onInterceptTouchEvent(ev);
64+
}
65+
66+
67+
68+
69+
}

app/src/main/res/layout/fragment_bookmarks.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
android:orientation="horizontal"
3131
android:visibility="gone"/>
3232

33-
<androidx.viewpager.widget.ViewPager
33+
<fr.free.nrw.commons.explore.ParentViewPager
3434
android:id="@+id/viewPagerBookmarks"
3535
android:layout_width="match_parent"
3636
android:layout_height="match_parent"

app/src/main/res/layout/fragment_explore.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
android:orientation="horizontal"
3131
android:visibility="gone" />
3232

33-
<androidx.viewpager.widget.ViewPager
33+
<fr.free.nrw.commons.explore.ParentViewPager
3434
android:id="@+id/viewPager"
3535
android:layout_width="match_parent"
3636
android:layout_height="match_parent"

0 commit comments

Comments
 (0)