Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WIP] 5355: Fix uploadCancelled AfterLocationPickedTest #5508

Draft
wants to merge 13 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import androidx.test.espresso.intent.Intents
import androidx.test.espresso.intent.matcher.IntentMatchers
import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.espresso.matcher.ViewMatchers.withText
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.rule.ActivityTestRule
Expand Down Expand Up @@ -37,7 +38,8 @@ class UploadCancelledTest {
@JvmField
var mGrantPermissionRule: GrantPermissionRule =
GrantPermissionRule.grant(
"android.permission.WRITE_EXTERNAL_STORAGE"
"android.permission.WRITE_EXTERNAL_STORAGE",
"android.permission.ACCESS_FINE_LOCATION"
)

private val device: UiDevice =
Expand Down Expand Up @@ -102,6 +104,8 @@ class UploadCancelledTest {
)
actionMenuItemView.perform(click())

UITestHelper.sleep(2000)

val recyclerView = onView(
allOf(
withId(R.id.rv_nearby_list),
Expand All @@ -114,6 +118,8 @@ class UploadCancelledTest {
)
)

UITestHelper.sleep(2000)

val linearLayout3 = onView(
allOf(
withId(R.id.cameraButton),
Expand All @@ -128,6 +134,11 @@ class UploadCancelledTest {
)
linearLayout3.perform(click())

// Tap "Allow" on the one-time "Record location for in-app shots" dialog
onView(withText(R.string.option_allow)).check { view, _ ->
view?.performClick()
}

val pasteSensitiveTextInputEditText = onView(
allOf(
withId(R.id.caption_item_edit_text),
Expand Down Expand Up @@ -158,16 +169,11 @@ class UploadCancelledTest {
)
pasteSensitiveTextInputEditText2.perform(replaceText("test"), closeSoftKeyboard())

UITestHelper.sleep(2000)

val appCompatButton2 = onView(
allOf(
withId(R.id.btn_next),
childAtPosition(
childAtPosition(
withId(R.id.ll_container_media_detail),
2
),
1
),
isDisplayed()
)
)
Expand All @@ -182,6 +188,8 @@ class UploadCancelledTest {

Intents.intended(IntentMatchers.hasComponent(LocationPickerActivity::class.java.name))

UITestHelper.sleep(2000)

val floatingActionButton3 = onView(
allOf(
withId(R.id.location_chosen_button),
Expand All @@ -190,5 +198,9 @@ class UploadCancelledTest {
)
UITestHelper.sleep(2000)
floatingActionButton3.perform(click())

// Cancel Upload
UITestHelper.sleep(2000)
onView(withText(R.string.cancel)).perform(click())
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,14 @@
import static fr.free.nrw.commons.upload.mediaDetails.UploadMediaDetailFragment.LAST_ZOOM;
import static fr.free.nrw.commons.utils.MapUtils.ZOOM_LEVEL;

import android.Manifest.permission;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.drawable.Drawable;
import android.location.LocationManager;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.text.Html;
Expand All @@ -21,22 +23,24 @@
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.mapbox.mapboxsdk.camera.CameraPosition;
import com.mapbox.mapboxsdk.geometry.LatLng;
import fr.free.nrw.commons.R;
import fr.free.nrw.commons.Utils;
import fr.free.nrw.commons.filepicker.Constants;
import fr.free.nrw.commons.kvstore.BasicKvStore;
import fr.free.nrw.commons.kvstore.JsonKvStore;
import fr.free.nrw.commons.location.LocationPermissionsHelper;
import fr.free.nrw.commons.location.LocationPermissionsHelper.Dialog;
import fr.free.nrw.commons.location.LocationPermissionsHelper.LocationPermissionCallback;
import fr.free.nrw.commons.location.LocationServiceManager;
import fr.free.nrw.commons.theme.BaseActivity;
Expand Down Expand Up @@ -114,6 +118,7 @@ public class LocationPickerActivity extends BaseActivity implements
@Named("default_preferences")
public
JsonKvStore applicationKvStore;
BasicKvStore store;
/**
* isDarkTheme: for keeping a track of the device theme and modifying the map theme accordingly
*/
Expand All @@ -124,6 +129,7 @@ public class LocationPickerActivity extends BaseActivity implements

@Inject
LocationServiceManager locationManager;
LocationPermissionsHelper locationPermissionsHelper;

@SuppressLint("ClickableViewAccessibility")
@Override
Expand All @@ -133,6 +139,7 @@ protected void onCreate(@Nullable final Bundle savedInstanceState) {

isDarkTheme = systemThemeUtils.isDeviceInNightMode();
moveToCurrentLocation = false;
store = new BasicKvStore(this, "LocationPermissions");

getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
final ActionBar actionBar = getSupportActionBar();
Expand Down Expand Up @@ -366,19 +373,10 @@ private void removeSelectedLocationMarker() {
* Center the map at user's current location
*/
private void requestLocationPermissions() {
LocationPermissionsHelper.Dialog locationAccessDialog = new Dialog(
R.string.location_permission_title,
R.string.upload_map_location_access
);

LocationPermissionsHelper.Dialog locationOffDialog = new Dialog(
R.string.ask_to_turn_location_on,
R.string.upload_map_location_access
);
LocationPermissionsHelper locationPermissionsHelper = new LocationPermissionsHelper(
locationPermissionsHelper = new LocationPermissionsHelper(
this, locationManager, this);
locationPermissionsHelper.handleLocationPermissions(locationAccessDialog,
locationOffDialog);
locationPermissionsHelper.requestForLocationAccess(R.string.location_permission_title,
R.string.upload_map_location_access);
}

@Override
Expand All @@ -389,7 +387,7 @@ public void onRequestPermissionsResult(final int requestCode,
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
onLocationPermissionGranted();
} else {
onLocationPermissionDenied("");
onLocationPermissionDenied(getString(R.string.upload_map_location_access));
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
Expand All @@ -408,21 +406,47 @@ protected void onPause() {

@Override
public void onLocationPermissionDenied(String toastMessage) {
//do nothing
if (!ActivityCompat.shouldShowRequestPermissionRationale(this,
permission.ACCESS_FINE_LOCATION)) {
if (!locationPermissionsHelper.checkLocationPermission(this)) {
if (store.getBoolean("isPermissionDenied", false)) {
// means user has denied location permission twice or checked the "Don't show again"
locationPermissionsHelper.showAppSettingsDialog(this,
R.string.upload_map_location_access);
} else {
Toast.makeText(getBaseContext(), toastMessage, Toast.LENGTH_LONG).show();
}
store.putBoolean("isPermissionDenied", true);
}
} else {
Toast.makeText(getBaseContext(), toastMessage, Toast.LENGTH_LONG).show();
}
}

@Override
public void onLocationPermissionGranted() {
if (locationPermissionsHelper.isLocationAccessToAppsTurnedOn()) {
locationManager.requestLocationUpdatesFromProvider(LocationManager.NETWORK_PROVIDER);
locationManager.requestLocationUpdatesFromProvider(LocationManager.GPS_PROVIDER);
getLocation();
} else {
getLocation();
locationPermissionsHelper.showLocationOffDialog(this,
R.string.ask_to_turn_location_on_text);
}
}

/**
* Gets new location if locations services are on, else gets last location
*/
private void getLocation() {
fr.free.nrw.commons.location.LatLng currLocation = locationManager.getLastLocation();
if (currLocation != null) {
GeoPoint currLocationGeopoint = new GeoPoint(currLocation.getLatitude(),
currLocation.getLongitude());
addLocationMarker(currLocationGeopoint);
if (moveToCurrentLocation) {
mapView.getController().setCenter(currLocationGeopoint);
mapView.getController().animateTo(currLocationGeopoint);
moveToCurrentLocation = false;
}
mapView.getController().setCenter(currLocationGeopoint);
mapView.getController().animateTo(currLocationGeopoint);
markerImage.setTranslationY(0);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
import fr.free.nrw.commons.kvstore.JsonKvStore;
import fr.free.nrw.commons.location.LatLng;
import fr.free.nrw.commons.location.LocationPermissionsHelper;
import fr.free.nrw.commons.location.LocationPermissionsHelper.Dialog;
import fr.free.nrw.commons.location.LocationPermissionsHelper.LocationPermissionCallback;
import fr.free.nrw.commons.location.LocationServiceManager;
import fr.free.nrw.commons.nearby.Place;
Expand Down Expand Up @@ -85,15 +84,6 @@ public void initiateCameraPick(Activity activity,
*/
private void createDialogsAndHandleLocationPermissions(Activity activity,
ActivityResultLauncher<String[]> inAppCameraLocationPermissionLauncher) {
LocationPermissionsHelper.Dialog locationAccessDialog = new Dialog(
R.string.location_permission_title,
R.string.in_app_camera_location_permission_rationale
);

LocationPermissionsHelper.Dialog locationOffDialog = new Dialog(
R.string.ask_to_turn_location_on,
R.string.in_app_camera_needs_location
);
locationPermissionCallback = new LocationPermissionCallback() {
@Override
public void onLocationPermissionDenied(String toastMessage) {
Expand All @@ -117,8 +107,8 @@ public void onLocationPermissionGranted() {
inAppCameraLocationPermissionLauncher.launch(
new String[]{permission.ACCESS_FINE_LOCATION});
} else {
locationPermissionsHelper.handleLocationPermissions(locationAccessDialog,
locationOffDialog);
locationPermissionsHelper.requestForLocationAccess(R.string.location_permission_title,
R.string.in_app_camera_location_permission_rationale);
}

}
Expand All @@ -130,7 +120,7 @@ public void handleShowRationaleFlowCameraLocation(Activity activity) {
activity.getString(android.R.string.cancel),
() -> {
if (!locationPermissionsHelper.isLocationAccessToAppsTurnedOn()) {
locationPermissionsHelper.showLocationOffDialog(activity);
locationPermissionsHelper.showLocationOffDialog(activity, R.string.in_app_camera_needs_location);
}
},
() -> locationPermissionCallback.onLocationPermissionDenied(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,8 @@ public class ExploreMapContract {
interface View {
boolean isNetworkConnectionEstablished();
void populatePlaces(LatLng curlatLng);
void checkPermissionsAndPerformAction();
void askForLocationPermission();
void recenterMap(LatLng curLatLng);
void showLocationOffDialog();
void openLocationSettings();
void hideBottomDetailsSheet();
void displayBottomSheetWithInfo(Marker marker);
LatLng getMapCenter();
Expand Down
Loading
Loading