diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsFragment.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsFragment.java index ce1b674bc..165112851 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsFragment.java @@ -5,11 +5,14 @@ import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; import android.content.SharedPreferences; +import android.content.pm.PackageManager; import android.database.Cursor; import android.database.DataSetObserver; import android.graphics.PorterDuff; +import android.os.Build; import android.os.Bundle; import android.os.IBinder; +import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; @@ -40,6 +43,9 @@ import fr.free.nrw.commons.HandlerService; import fr.free.nrw.commons.Media; import fr.free.nrw.commons.R; import fr.free.nrw.commons.di.CommonsDaggerSupportFragment; +import fr.free.nrw.commons.location.LatLng; +import fr.free.nrw.commons.location.LocationServiceManager; +import fr.free.nrw.commons.location.LocationUpdateListener; import fr.free.nrw.commons.media.MediaDetailPagerFragment; import fr.free.nrw.commons.mwapi.MediaWikiApi; import fr.free.nrw.commons.nearby.NearbyNoificationCardView; @@ -58,6 +64,7 @@ import timber.log.Timber; import static fr.free.nrw.commons.contributions.Contribution.STATE_FAILED; import static fr.free.nrw.commons.contributions.ContributionDao.Table.ALL_FIELDS; import static fr.free.nrw.commons.contributions.ContributionsContentProvider.BASE_URI; +import static fr.free.nrw.commons.location.LocationServiceManager.LOCATION_REQUEST; import static fr.free.nrw.commons.settings.Prefs.UPLOADS_SHOWING; public class ContributionsFragment @@ -66,7 +73,9 @@ public class ContributionsFragment AdapterView.OnItemClickListener, MediaDetailPagerFragment.MediaDetailProvider, FragmentManager.OnBackStackChangedListener, - ContributionsListFragment.SourceRefresher { + ContributionsListFragment.SourceRefresher, + LocationUpdateListener + { @Inject @Named("default_preferences") SharedPreferences prefs; @@ -76,6 +85,8 @@ public class ContributionsFragment MediaWikiApi mediaWikiApi; @Inject NotificationController notificationController; + @Inject + public LocationServiceManager locationManager; private ArrayList observersWaitingForLoad = new ArrayList<>(); private Cursor allContributions; @@ -91,7 +102,6 @@ public class ContributionsFragment public NearbyNoificationCardView nearbyNoificationCardView; - /** * Since we will need to use parent activity on onAuthCookieAcquired, we have to wait * fragment to be attached. Latch will be responsible for this sync. @@ -266,6 +276,28 @@ public class ContributionsFragment allContributions = contributionDao.loadAllContributions(); getActivity().getSupportLoaderManager().initLoader(0, null, ContributionsFragment.this); } + + } + + @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) { + Timber.d("Location permission granted, refreshing view"); + // No need to display permission request button anymore + nearbyNoificationCardView.displayPermissionRequestButton(false); + } else { + // No need to display permission request button anymore + nearbyNoificationCardView.displayPermissionRequestButton(false); + } + } + break; + + default: + // This is needed to allow the request codes from the Fragments to be routed appropriately + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + } } @Override @@ -274,6 +306,7 @@ public class ContributionsFragment showDetail(i); } + /** * Replace whatever is in the current contributionsFragmentContainer view with * mediaDetailPagerFragment, and preserve previous state in back stack. @@ -408,6 +441,20 @@ public class ContributionsFragment } + @Override + public void onStart() { + super.onStart(); + locationManager.addLocationListener(this); + + } + + @Override + public void onPause() { + super.onPause(); + locationManager.removeLocationListener(this); + locationManager.unregisterLocationManager(); + } + @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); @@ -425,6 +472,18 @@ public class ContributionsFragment } new UnreadNotificationsCheckAsync((ContributionsActivity) getActivity(), notificationController).execute(); + + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (locationManager.isLocationPermissionGranted()) { + // Display nearest location, first listen + nearbyNoificationCardView.displayPermissionRequestButton(false); + + } else { + // Display tab to see button, since permission is not granted and you have to grant it first + nearbyNoificationCardView.displayPermissionRequestButton(true); + } + } } @Override @@ -439,5 +498,15 @@ public class ContributionsFragment } } } + + @Override + public void onLocationChangedSignificantly(LatLng latLng) { + + } + + @Override + public void onLocationChangedSlightly(LatLng latLng) { + + } } diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyNoificationCardView.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyNoificationCardView.java index 54dd2c394..e89b4df73 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyNoificationCardView.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyNoificationCardView.java @@ -5,9 +5,12 @@ import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v7.widget.CardView; import android.util.AttributeSet; +import android.util.Log; import android.view.View; import android.view.animation.AnimationUtils; +import android.widget.Button; import android.widget.ImageView; +import android.widget.RelativeLayout; import android.widget.TextSwitcher; import android.widget.TextView; @@ -15,6 +18,8 @@ import java.util.ArrayList; import java.util.List; import fr.free.nrw.commons.R; +import fr.free.nrw.commons.contributions.ContributionsActivity; +import fr.free.nrw.commons.contributions.ContributionsFragment; import fr.free.nrw.commons.notification.Notification; /** @@ -23,6 +28,9 @@ import fr.free.nrw.commons.notification.Notification; public class NearbyNoificationCardView extends CardView{ private Context context; + + private Button permissionRequestButton; + private RelativeLayout contentLayout; private TextView notificationTextSwitcher; private TextView notificationTimeSwitcher; private ImageView notificationIcon; @@ -47,9 +55,39 @@ public class NearbyNoificationCardView extends CardView{ private void init() { View rootView = inflate(context, R.layout.nearby_card_view, this); + + permissionRequestButton = rootView.findViewById(R.id.permission_request_button); + contentLayout = rootView.findViewById(R.id.content_layout); + notificationTextSwitcher = rootView.findViewById(R.id.nearby_title); notificationTimeSwitcher = rootView.findViewById(R.id.nearby_distance); notificationIcon = rootView.findViewById(R.id.nearby_icon); + + setActionListeners(); + + Log.d("deneme2",context.toString()); + } + + private void setActionListeners() { + permissionRequestButton.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View view) { + if (!((ContributionsActivity)context).isFinishing()) { + // TODO: why location manager is null + ((ContributionsActivity) context).contributionsFragment.locationManager.requestPermissions((ContributionsActivity) context); + } + } + }); + } + + public void displayPermissionRequestButton(boolean isPermissionRequestButtonNeeded) { + if (isPermissionRequestButtonNeeded) { + contentLayout.setVisibility(GONE); + permissionRequestButton.setVisibility(VISIBLE); + } else { + contentLayout.setVisibility(VISIBLE); + permissionRequestButton.setVisibility(GONE); + } } } diff --git a/app/src/main/res/layout/nearby_card_view.xml b/app/src/main/res/layout/nearby_card_view.xml index 38f32bb06..fcfcf4fca 100644 --- a/app/src/main/res/layout/nearby_card_view.xml +++ b/app/src/main/res/layout/nearby_card_view.xml @@ -10,6 +10,7 @@