Merge pull request #707 from misaochan/check-location-permission

Check for location permissions when loading Nearby
This commit is contained in:
Josephine Lim 2017-06-04 23:22:28 +10:00 committed by GitHub
commit ab487ad4f9
5 changed files with 127 additions and 18 deletions

View file

@ -64,4 +64,9 @@ android {
disable 'ExtraTranslation'
abortOnError false
}
//FIXME: Temporary fix for https://github.com/commons-app/apps-android-commons/issues/709
configurations.all {
resolutionStrategy.force 'com.android.support:support-annotations:25.2.0'
}
}

View file

@ -1,14 +1,20 @@
package fr.free.nrw.commons.nearby;
import android.Manifest;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.location.LocationManager;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AlertDialog;
import android.view.Menu;
import android.view.MenuInflater;
@ -38,6 +44,7 @@ public class NearbyActivity extends NavigationBaseActivity {
@BindView(R.id.progressBar)
ProgressBar progressBar;
private boolean isMapViewActive = false;
private static final int LOCATION_REQUEST = 1;
private LocationServiceManager locationManager;
private LatLng curLatLang;
@ -52,13 +59,8 @@ public class NearbyActivity extends NavigationBaseActivity {
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
checkLocationPermission();
bundle = new Bundle();
locationManager = new LocationServiceManager(this);
locationManager.registerLocationManager();
curLatLang = locationManager.getLatestLocation();
nearbyAsyncTask = new NearbyAsyncTask(this);
nearbyAsyncTask.execute();
initDrawer();
}
@ -89,6 +91,51 @@ public class NearbyActivity extends NavigationBaseActivity {
}
}
private void startLookingForNearby() {
locationManager = new LocationServiceManager(this);
locationManager.registerLocationManager();
curLatLang = locationManager.getLatestLocation();
nearbyAsyncTask = new NearbyAsyncTask(this);
nearbyAsyncTask.execute();
}
private void checkLocationPermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
startLookingForNearby();
} else {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, LOCATION_REQUEST);
}
} else {
startLookingForNearby();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case LOCATION_REQUEST: {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
startLookingForNearby();
} else {
//If permission not granted, go to page that says Nearby Places cannot be displayed
if (nearbyAsyncTask != null) {
nearbyAsyncTask.cancel(true);
}
if (progressBar != null) {
progressBar.setVisibility(View.GONE);
}
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
Fragment noPermissionsFragment = new NoPermissionsFragment();
fragmentTransaction.replace(R.id.container, noPermissionsFragment);
fragmentTransaction.commit();
}
}
}
}
protected void checkGps() {
LocationManager manager = (LocationManager) getSystemService(LOCATION_SERVICE);
if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
@ -128,6 +175,7 @@ public class NearbyActivity extends NavigationBaseActivity {
}
private void showMapView() {
if (nearbyAsyncTask != null) {
if (!isMapViewActive) {
isMapViewActive = true;
if (nearbyAsyncTask.getStatus() == AsyncTask.Status.FINISHED) {
@ -141,6 +189,7 @@ public class NearbyActivity extends NavigationBaseActivity {
}
}
}
}
@Override
protected void onResume() {
@ -151,8 +200,10 @@ public class NearbyActivity extends NavigationBaseActivity {
@Override
protected void onPause() {
super.onPause();
if (nearbyAsyncTask != null) {
nearbyAsyncTask.cancel(true);
}
}
protected void refreshView() {
nearbyAsyncTask = new NearbyAsyncTask(this);
@ -166,8 +217,10 @@ public class NearbyActivity extends NavigationBaseActivity {
@Override
protected void onDestroy() {
super.onDestroy();
if (locationManager != null) {
locationManager.unregisterLocationManager();
}
}
private class NearbyAsyncTask extends AsyncTask<Void, Integer, List<Place>> {

View file

@ -0,0 +1,30 @@
package fr.free.nrw.commons.nearby;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import butterknife.ButterKnife;
import fr.free.nrw.commons.R;
import timber.log.Timber;
/**
* Tells user that Nearby Places cannot be displayed if location permissions are denied
*/
public class NoPermissionsFragment extends Fragment {
public NoPermissionsFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Timber.d("NoPermissionsFragment created");
View view = inflater.inflate(R.layout.fragment_no_permissions, container, false);
ButterKnife.bind(this, view);
return view;
}
}

View file

@ -0,0 +1,19 @@
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="fr.free.nrw.commons.nearby.NoPermissionsFragment">
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center"
android:paddingLeft="30dp"
android:paddingRight="30dp"
android:text="@string/nearby_needs_permissions"
android:textAlignment="center"
android:textSize="18sp" />
</FrameLayout>

View file

@ -194,7 +194,9 @@ Tap this message (or hit back) to skip this step.</string>
<string name="navigation_item_logout">Logout</string>
<string name="navigation_item_info">Tutorial</string>
<string name="nearby_needs_permissions">Nearby places cannot be displayed without location permissions</string>
<string name="no_description_found">no description found</string>
<string name="nearby_info_menu_commons_article">Commons Article</string>
<string name="nearby_info_menu_wikidata_article">Wikidata item</string>
</resources>