Fix location permission prompt in Uploaded via Mobile screen (#5549)

This commit is contained in:
jagadeesh-18-bot 2025-06-01 04:55:44 +05:30
parent eb617ae8ca
commit 09975aa8c3
2 changed files with 42 additions and 29 deletions

View file

@ -27,6 +27,9 @@ import java.util.List;
import java.util.Locale; import java.util.Locale;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Named; import javax.inject.Named;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import android.content.pm.PackageManager;
public class ExploreFragment extends CommonsDaggerSupportFragment { public class ExploreFragment extends CommonsDaggerSupportFragment {
@ -41,6 +44,7 @@ public class ExploreFragment extends CommonsDaggerSupportFragment {
private ExploreListRootFragment featuredRootFragment; private ExploreListRootFragment featuredRootFragment;
private ExploreListRootFragment mobileRootFragment; private ExploreListRootFragment mobileRootFragment;
private ExploreMapRootFragment mapRootFragment; private ExploreMapRootFragment mapRootFragment;
private MenuItem othersMenuItem;
@Inject @Inject
@Named("default_preferences") @Named("default_preferences")
public JsonKvStore applicationKvStore; public JsonKvStore applicationKvStore;
@ -84,18 +88,31 @@ public class ExploreFragment extends CommonsDaggerSupportFragment {
} }
@Override @Override
public void onPageSelected(int position) { public void onPageSelected(int position) {
if (position == 2) { // Control scrolling behavior
binding.viewPager.setCanScroll(false); if (position == 2) {
} else { binding.viewPager.setCanScroll(false);
binding.viewPager.setCanScroll(true); // Request location permission only for the Map tab
if (mapRootFragment != null) {
mapRootFragment.requestLocationPermission();
} }
} else {
binding.viewPager.setCanScroll(true);
} }
// Update menu item visibility
if (othersMenuItem != null) {
othersMenuItem.setVisible(position == 2);
}
}
@Override @Override
public void onPageScrollStateChanged(int state) { public void onPageScrollStateChanged(int state) {
if (state == SCROLL_STATE_IDLE && binding.viewPager.getCurrentItem() == 2) {
if (othersMenuItem != null) {
othersMenuItem.setVisible(true);
}
} }
}
}); });
setTabs(); setTabs();
setHasOptionsMenu(true); setHasOptionsMenu(true);
@ -199,35 +216,18 @@ public class ExploreFragment extends CommonsDaggerSupportFragment {
*/ */
@Override @Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
// if logged in 'Show in Nearby' menu item is visible // If logged in, 'Show in Nearby' menu item is visible
if (applicationKvStore.getBoolean("login_skipped") == false) { if (applicationKvStore.getBoolean("login_skipped") == false) {
inflater.inflate(R.menu.explore_fragment_menu, menu); inflater.inflate(R.menu.explore_fragment_menu, menu);
MenuItem others = menu.findItem(R.id.list_item_show_in_nearby); othersMenuItem = menu.findItem(R.id.list_item_show_in_nearby);
// Set initial visibility based on the current tab
if (binding.viewPager.getCurrentItem() == 2) { if (binding.viewPager.getCurrentItem() == 2) {
others.setVisible(true); othersMenuItem.setVisible(true);
} else {
othersMenuItem.setVisible(false);
} }
// if on Map tab, show all menu options, else only show search
binding.viewPager.addOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset,
int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
others.setVisible((position == 2));
}
@Override
public void onPageScrollStateChanged(int state) {
if (state == SCROLL_STATE_IDLE && binding.viewPager.getCurrentItem() == 2) {
onPageSelected(2);
}
}
});
} else { } else {
inflater.inflate(R.menu.menu_search, menu); inflater.inflate(R.menu.menu_search, menu);
} }

View file

@ -18,6 +18,9 @@ import fr.free.nrw.commons.di.CommonsDaggerSupportFragment;
import fr.free.nrw.commons.explore.map.ExploreMapFragment; import fr.free.nrw.commons.explore.map.ExploreMapFragment;
import fr.free.nrw.commons.media.MediaDetailPagerFragment; import fr.free.nrw.commons.media.MediaDetailPagerFragment;
import fr.free.nrw.commons.navtab.NavTab; import fr.free.nrw.commons.navtab.NavTab;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import android.content.pm.PackageManager;
public class ExploreMapRootFragment extends CommonsDaggerSupportFragment implements public class ExploreMapRootFragment extends CommonsDaggerSupportFragment implements
MediaDetailPagerFragment.MediaDetailProvider, CategoryImagesCallback { MediaDetailPagerFragment.MediaDetailProvider, CategoryImagesCallback {
@ -49,6 +52,9 @@ public class ExploreMapRootFragment extends CommonsDaggerSupportFragment impleme
Bundle featuredArguments = new Bundle(); Bundle featuredArguments = new Bundle();
featuredArguments.putString("categoryName", title); featuredArguments.putString("categoryName", title);
// a flag to prevent automatic permission requests during initialization
featuredArguments.putBoolean("request_permission_on_start", false);
// if we came from 'Show in Explore' in Nearby, pass on zoom and center // if we came from 'Show in Explore' in Nearby, pass on zoom and center
if (zoom != 0.0 || latitude != 0.0 || longitude != 0.0) { if (zoom != 0.0 || latitude != 0.0 || longitude != 0.0) {
featuredArguments.putDouble("prev_zoom", zoom); featuredArguments.putDouble("prev_zoom", zoom);
@ -230,6 +236,13 @@ public class ExploreMapRootFragment extends CommonsDaggerSupportFragment impleme
mapFragment.loadNearbyMapFromExplore(); mapFragment.loadNearbyMapFromExplore();
} }
public void requestLocationPermission() {
if (mapFragment != null) {
// Delegate the permission request to ExploreMapFragment
mapFragment.requestLocationPermission();
}
}
@Override @Override
public void onDestroy() { public void onDestroy() {
super.onDestroy(); super.onDestroy();