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 javax.inject.Inject;
import javax.inject.Named;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import android.content.pm.PackageManager;
public class ExploreFragment extends CommonsDaggerSupportFragment {
@ -41,6 +44,7 @@ public class ExploreFragment extends CommonsDaggerSupportFragment {
private ExploreListRootFragment featuredRootFragment;
private ExploreListRootFragment mobileRootFragment;
private ExploreMapRootFragment mapRootFragment;
private MenuItem othersMenuItem;
@Inject
@Named("default_preferences")
public JsonKvStore applicationKvStore;
@ -85,16 +89,29 @@ public class ExploreFragment extends CommonsDaggerSupportFragment {
@Override
public void onPageSelected(int position) {
// Control scrolling behavior
if (position == 2) {
binding.viewPager.setCanScroll(false);
// 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
public void onPageScrollStateChanged(int state) {
if (state == SCROLL_STATE_IDLE && binding.viewPager.getCurrentItem() == 2) {
if (othersMenuItem != null) {
othersMenuItem.setVisible(true);
}
}
}
});
setTabs();
@ -199,35 +216,18 @@ public class ExploreFragment extends CommonsDaggerSupportFragment {
*/
@Override
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) {
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) {
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 {
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.media.MediaDetailPagerFragment;
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
MediaDetailPagerFragment.MediaDetailProvider, CategoryImagesCallback {
@ -49,6 +52,9 @@ public class ExploreMapRootFragment extends CommonsDaggerSupportFragment impleme
Bundle featuredArguments = new Bundle();
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 (zoom != 0.0 || latitude != 0.0 || longitude != 0.0) {
featuredArguments.putDouble("prev_zoom", zoom);
@ -230,6 +236,13 @@ public class ExploreMapRootFragment extends CommonsDaggerSupportFragment impleme
mapFragment.loadNearbyMapFromExplore();
}
public void requestLocationPermission() {
if (mapFragment != null) {
// Delegate the permission request to ExploreMapFragment
mapFragment.requestLocationPermission();
}
}
@Override
public void onDestroy() {
super.onDestroy();