Add button click and permission request logic. Not: solve why location manager is null

This commit is contained in:
neslihanturan 2018-09-13 14:10:42 +03:00
parent 9fecc07ad7
commit a37fbf05f1
3 changed files with 113 additions and 3 deletions

View file

@ -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<DataSetObserver> 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) {
}
}

View file

@ -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);
}
}
}

View file

@ -10,6 +10,7 @@
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/permission_request_button"
android:text="Tab to see closest wikidata item needs photo"
android:layout_centerInParent="true"
android:layout_marginLeft="8dp"
@ -24,7 +25,9 @@
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
android:layout_height="wrap_content"
android:id="@+id/content_layout"
>
<ImageView
android:id="@+id/nearby_icon"