mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-27 04:43:54 +01:00
Nearby tab accessible without GPS (#4771)
* Nearby accessible without GPS * Java doc added * Added NearbyParentFragment test * Test added * merged two method and tests updates
This commit is contained in:
parent
e135fea20d
commit
0e4755301e
2 changed files with 180 additions and 10 deletions
|
|
@ -485,32 +485,52 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment
|
||||||
registerNetworkReceiver();
|
registerNetworkReceiver();
|
||||||
if (isResumed() && ((MainActivity)getActivity()).activeFragment == ActiveFragment.NEARBY) {
|
if (isResumed() && ((MainActivity)getActivity()).activeFragment == ActiveFragment.NEARBY) {
|
||||||
if(!isPermissionDenied && !applicationKvStore.getBoolean("doNotAskForLocationPermission", false)){
|
if(!isPermissionDenied && !applicationKvStore.getBoolean("doNotAskForLocationPermission", false)){
|
||||||
startTheMap();
|
if (!locationManager.isGPSProviderEnabled()) {
|
||||||
|
startMapWithCondition("Without GPS");
|
||||||
|
} else {
|
||||||
|
startTheMap();
|
||||||
|
}
|
||||||
}else{
|
}else{
|
||||||
startMapWithoutPermission();
|
startMapWithCondition("Without Permission");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void startMapWithoutPermission() {
|
/**
|
||||||
|
* Starts the map without GPS and without permission
|
||||||
|
* By default it points to 51.50550,-0.07520 coordinates, other than that it points to the
|
||||||
|
* last known location which can be get by the key "LastLocation" from applicationKvStore
|
||||||
|
*
|
||||||
|
* @param condition : for which condition the map should start
|
||||||
|
*/
|
||||||
|
private void startMapWithCondition(final String condition) {
|
||||||
mapView.onStart();
|
mapView.onStart();
|
||||||
|
|
||||||
applicationKvStore.putBoolean("doNotAskForLocationPermission", true);
|
if (condition.equals("Without Permission")) {
|
||||||
|
applicationKvStore.putBoolean("doNotAskForLocationPermission", true);
|
||||||
|
}
|
||||||
|
|
||||||
final CameraPosition position;
|
final CameraPosition position;
|
||||||
if(applicationKvStore.getString("LastLocation")!=null) { // Checking for last searched location
|
if (applicationKvStore.getString("LastLocation")!=null) {
|
||||||
String[] locationLatLng = applicationKvStore.getString("LastLocation").split(",");
|
final String[] locationLatLng
|
||||||
lastKnownLocation = new fr.free.nrw.commons.location.LatLng(Double.valueOf(locationLatLng[0]), Double.valueOf(locationLatLng[1]), 1f);
|
= applicationKvStore.getString("LastLocation").split(",");
|
||||||
|
lastKnownLocation
|
||||||
|
= new fr.free.nrw.commons.location.LatLng(Double.parseDouble(locationLatLng[0]),
|
||||||
|
Double.parseDouble(locationLatLng[1]), 1f);
|
||||||
position = new CameraPosition.Builder()
|
position = new CameraPosition.Builder()
|
||||||
.target(LocationUtils.commonsLatLngToMapBoxLatLng(lastKnownLocation))
|
.target(LocationUtils.commonsLatLngToMapBoxLatLng(lastKnownLocation))
|
||||||
.zoom(ZOOM_LEVEL)
|
.zoom(ZOOM_LEVEL)
|
||||||
.build();
|
.build();
|
||||||
}else {
|
|
||||||
lastKnownLocation = new fr.free.nrw.commons.location.LatLng(51.50550,-0.07520,1f);
|
} else {
|
||||||
|
lastKnownLocation = new fr.free.nrw.commons.location.LatLng(51.50550,
|
||||||
|
-0.07520,1f);
|
||||||
position = new CameraPosition.Builder()
|
position = new CameraPosition.Builder()
|
||||||
.target(LocationUtils.commonsLatLngToMapBoxLatLng(lastKnownLocation))
|
.target(LocationUtils.commonsLatLngToMapBoxLatLng(lastKnownLocation))
|
||||||
.zoom(ZOOM_OUT)
|
.zoom(ZOOM_OUT)
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(mapBox != null){
|
if(mapBox != null){
|
||||||
mapBox.moveCamera(CameraUpdateFactory.newCameraPosition(position));
|
mapBox.moveCamera(CameraUpdateFactory.newCameraPosition(position));
|
||||||
addOnCameraMoveListener();
|
addOnCameraMoveListener();
|
||||||
|
|
@ -1368,7 +1388,7 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void addCurrentLocationMarker(final fr.free.nrw.commons.location.LatLng curLatLng) {
|
public void addCurrentLocationMarker(final fr.free.nrw.commons.location.LatLng curLatLng) {
|
||||||
if (null != curLatLng && !isPermissionDenied) {
|
if (null != curLatLng && !isPermissionDenied && locationManager.isGPSProviderEnabled()) {
|
||||||
ExecutorUtils.get().submit(() -> {
|
ExecutorUtils.get().submit(() -> {
|
||||||
mapView.post(() -> removeCurrentLocationMarker());
|
mapView.post(() -> removeCurrentLocationMarker());
|
||||||
Timber.d("Adds current location marker");
|
Timber.d("Adds current location marker");
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,150 @@
|
||||||
|
package fr.free.nrw.commons.nearby
|
||||||
|
|
||||||
|
import com.mapbox.mapboxsdk.camera.CameraPosition
|
||||||
|
import com.mapbox.mapboxsdk.camera.CameraUpdateFactory
|
||||||
|
import com.mapbox.mapboxsdk.geometry.LatLng
|
||||||
|
import com.mapbox.mapboxsdk.maps.MapView
|
||||||
|
import com.mapbox.mapboxsdk.maps.MapboxMap
|
||||||
|
import fr.free.nrw.commons.TestCommonsApplication
|
||||||
|
import fr.free.nrw.commons.kvstore.JsonKvStore
|
||||||
|
import fr.free.nrw.commons.nearby.fragments.NearbyParentFragment
|
||||||
|
import fr.free.nrw.commons.nearby.presenter.NearbyParentFragmentPresenter
|
||||||
|
import org.junit.Before
|
||||||
|
import org.junit.Test
|
||||||
|
import org.junit.runner.RunWith
|
||||||
|
import org.mockito.Mock
|
||||||
|
import org.mockito.Mockito.*
|
||||||
|
import org.mockito.MockitoAnnotations
|
||||||
|
import org.powermock.reflect.Whitebox
|
||||||
|
import org.robolectric.RobolectricTestRunner
|
||||||
|
import org.robolectric.annotation.Config
|
||||||
|
import org.robolectric.annotation.LooperMode
|
||||||
|
import java.lang.reflect.Method
|
||||||
|
|
||||||
|
@RunWith(RobolectricTestRunner::class)
|
||||||
|
@Config(sdk = [21], application = TestCommonsApplication::class)
|
||||||
|
@LooperMode(LooperMode.Mode.PAUSED)
|
||||||
|
class NearbyParentFragmentUnitTest {
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private lateinit var mapView: MapView
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private lateinit var applicationKvStore: JsonKvStore
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private lateinit var mapBox: MapboxMap
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private lateinit var presenter: NearbyParentFragmentPresenter
|
||||||
|
|
||||||
|
private lateinit var fragment: NearbyParentFragment
|
||||||
|
|
||||||
|
@Before
|
||||||
|
fun setUp() {
|
||||||
|
MockitoAnnotations.initMocks(this)
|
||||||
|
fragment = NearbyParentFragment()
|
||||||
|
Whitebox.setInternalState(fragment, "mapView", mapView)
|
||||||
|
Whitebox.setInternalState(fragment, "applicationKvStore", applicationKvStore)
|
||||||
|
Whitebox.setInternalState(fragment, "mapBox", mapBox)
|
||||||
|
Whitebox.setInternalState(fragment, "presenter", presenter)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun `Start map without gps test when last location known`() {
|
||||||
|
val method: Method = NearbyParentFragment::class.java.getDeclaredMethod(
|
||||||
|
"startMapWithCondition",
|
||||||
|
String::class.java
|
||||||
|
)
|
||||||
|
method.isAccessible = true
|
||||||
|
method.invoke(fragment, "Without GPS")
|
||||||
|
verify(mapView, times(1)).onStart()
|
||||||
|
verify(applicationKvStore, times(1)).getString("LastLocation")
|
||||||
|
verify(presenter, times(1)).onMapReady()
|
||||||
|
val position = CameraPosition.Builder()
|
||||||
|
.target(LatLng(
|
||||||
|
51.50550,
|
||||||
|
-0.07520, 0.0
|
||||||
|
))
|
||||||
|
.zoom(0.0)
|
||||||
|
.build()
|
||||||
|
verify(mapBox, times(1))
|
||||||
|
.moveCamera(CameraUpdateFactory.newCameraPosition(position))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun `Start map without gps test when last location unknown`() {
|
||||||
|
`when`(applicationKvStore.getString("LastLocation")).thenReturn("23.76,56.876")
|
||||||
|
val method: Method = NearbyParentFragment::class.java.getDeclaredMethod(
|
||||||
|
"startMapWithCondition",
|
||||||
|
String::class.java
|
||||||
|
)
|
||||||
|
method.isAccessible = true
|
||||||
|
method.invoke(fragment, "Without GPS")
|
||||||
|
verify(mapView, times(1)).onStart()
|
||||||
|
verify(applicationKvStore, times(2)).getString("LastLocation")
|
||||||
|
verify(presenter, times(1)).onMapReady()
|
||||||
|
val position = CameraPosition.Builder()
|
||||||
|
.target(LatLng(
|
||||||
|
23.76,
|
||||||
|
56.876, 0.0
|
||||||
|
))
|
||||||
|
.zoom(14.0)
|
||||||
|
.build()
|
||||||
|
verify(mapBox, times(1))
|
||||||
|
.moveCamera(CameraUpdateFactory.newCameraPosition(position))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun `Start map without location permission test when last location known`() {
|
||||||
|
val method: Method = NearbyParentFragment::class.java.getDeclaredMethod(
|
||||||
|
"startMapWithCondition",
|
||||||
|
String::class.java
|
||||||
|
)
|
||||||
|
method.isAccessible = true
|
||||||
|
method.invoke(fragment, "Without Permission")
|
||||||
|
verify(mapView, times(1)).onStart()
|
||||||
|
verify(applicationKvStore, times(1)).getString("LastLocation")
|
||||||
|
verify(applicationKvStore, times(1))
|
||||||
|
.putBoolean("doNotAskForLocationPermission", true)
|
||||||
|
verify(presenter, times(1)).onMapReady()
|
||||||
|
val position = CameraPosition.Builder()
|
||||||
|
.target(LatLng(
|
||||||
|
51.50550,
|
||||||
|
-0.07520, 0.0
|
||||||
|
))
|
||||||
|
.zoom(0.0)
|
||||||
|
.build()
|
||||||
|
verify(mapBox, times(1))
|
||||||
|
.moveCamera(CameraUpdateFactory.newCameraPosition(position))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun `Start map without location permission test when last location unknown`() {
|
||||||
|
`when`(applicationKvStore.getString("LastLocation")).thenReturn("23.76,56.876")
|
||||||
|
val method: Method = NearbyParentFragment::class.java.getDeclaredMethod(
|
||||||
|
"startMapWithCondition",
|
||||||
|
String::class.java
|
||||||
|
)
|
||||||
|
method.isAccessible = true
|
||||||
|
method.invoke(fragment, "Without Permission")
|
||||||
|
verify(mapView, times(1)).onStart()
|
||||||
|
verify(applicationKvStore, times(2)).getString("LastLocation")
|
||||||
|
verify(applicationKvStore, times(1))
|
||||||
|
.putBoolean("doNotAskForLocationPermission", true)
|
||||||
|
verify(presenter, times(1)).onMapReady()
|
||||||
|
val position = CameraPosition.Builder()
|
||||||
|
.target(LatLng(
|
||||||
|
23.76,
|
||||||
|
56.876, 0.0
|
||||||
|
))
|
||||||
|
.zoom(14.0)
|
||||||
|
.build()
|
||||||
|
verify(mapBox, times(1))
|
||||||
|
.moveCamera(CameraUpdateFactory.newCameraPosition(position))
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue