mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-30 22:34:02 +01:00
* Resolves issue #2239 by adding an arrow for direction * Removed unnecessary change in styles.xml * spacing * javadoc --------- Co-authored-by: Nicolas Raoul <nicolas.raoul@gmail.com>
This commit is contained in:
parent
e99ff1c044
commit
e5c789e874
6 changed files with 105 additions and 5 deletions
|
|
@ -1,15 +1,21 @@
|
|||
package fr.free.nrw.commons.contributions;
|
||||
|
||||
import static android.content.Context.SENSOR_SERVICE;
|
||||
import static fr.free.nrw.commons.contributions.Contribution.STATE_FAILED;
|
||||
import static fr.free.nrw.commons.contributions.Contribution.STATE_PAUSED;
|
||||
import static fr.free.nrw.commons.nearby.fragments.NearbyParentFragment.WLM_URL;
|
||||
import static fr.free.nrw.commons.profile.ProfileActivity.KEY_USERNAME;
|
||||
import static fr.free.nrw.commons.utils.LengthUtils.computeBearing;
|
||||
import static fr.free.nrw.commons.utils.LengthUtils.formatDistanceBetween;
|
||||
|
||||
import android.Manifest;
|
||||
import android.Manifest.permission;
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Context;
|
||||
import android.hardware.Sensor;
|
||||
import android.hardware.SensorEvent;
|
||||
import android.hardware.SensorEventListener;
|
||||
import android.hardware.SensorManager;
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.Menu;
|
||||
|
|
@ -83,6 +89,7 @@ public class ContributionsFragment
|
|||
OnBackStackChangedListener,
|
||||
LocationUpdateListener,
|
||||
MediaDetailProvider,
|
||||
SensorEventListener,
|
||||
ICampaignsView, ContributionsContract.View, Callback{
|
||||
@Inject @Named("default_preferences") JsonKvStore store;
|
||||
@Inject NearbyController nearbyController;
|
||||
|
|
@ -122,6 +129,10 @@ public class ContributionsFragment
|
|||
|
||||
String userName;
|
||||
private boolean isUserProfile;
|
||||
|
||||
private SensorManager mSensorManager;
|
||||
private Sensor mLight;
|
||||
private float direction;
|
||||
private ActivityResultLauncher<String[]> nearbyLocationPermissionLauncher = registerForActivityResult(new ActivityResultContracts.RequestMultiplePermissions(), new ActivityResultCallback<Map<String, Boolean>>() {
|
||||
@Override
|
||||
public void onActivityResult(Map<String, Boolean> result) {
|
||||
|
|
@ -162,6 +173,8 @@ public class ContributionsFragment
|
|||
userName = getArguments().getString(KEY_USERNAME);
|
||||
isUserProfile = true;
|
||||
}
|
||||
mSensorManager = (SensorManager) getActivity().getSystemService(SENSOR_SERVICE);
|
||||
mLight = mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
|
|
@ -428,6 +441,7 @@ public class ContributionsFragment
|
|||
super.onPause();
|
||||
locationManager.removeLocationListener(this);
|
||||
locationManager.unregisterLocationManager();
|
||||
mSensorManager.unregisterListener(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -464,6 +478,7 @@ public class ContributionsFragment
|
|||
fetchCampaigns();
|
||||
}
|
||||
}
|
||||
mSensorManager.registerListener(this, mLight, SensorManager.SENSOR_DELAY_UI);
|
||||
}
|
||||
|
||||
private void checkPermissionsAndShowNearbyCardView() {
|
||||
|
|
@ -521,7 +536,8 @@ public class ContributionsFragment
|
|||
Place closestNearbyPlace = nearbyPlacesInfo.placeList.get(0);
|
||||
String distance = formatDistanceBetween(curLatLng, closestNearbyPlace.location);
|
||||
closestNearbyPlace.setDistance(distance);
|
||||
nearbyNotificationCardView.updateContent(closestNearbyPlace);
|
||||
direction = (float) computeBearing(curLatLng, closestNearbyPlace.location);
|
||||
nearbyNotificationCardView.updateContent(closestNearbyPlace, direction);
|
||||
} else {
|
||||
// Means that no close nearby place is found
|
||||
nearbyNotificationCardView.setVisibility(View.GONE);
|
||||
|
|
@ -793,6 +809,17 @@ public class ContributionsFragment
|
|||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* When the device rotates, rotate the Nearby banner's compass arrow in tandem.
|
||||
*/
|
||||
@Override
|
||||
public void onSensorChanged(SensorEvent event) {
|
||||
float rotateDegree = Math.round(event.values[0]);
|
||||
nearbyNotificationCardView.rotateCompass(rotateDegree, direction);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAccuracyChanged(Sensor sensor, int accuracy) {
|
||||
// Nothing to do.
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue