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.Intent;
import android.content.ServiceConnection; import android.content.ServiceConnection;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.database.Cursor; import android.database.Cursor;
import android.database.DataSetObserver; import android.database.DataSetObserver;
import android.graphics.PorterDuff; import android.graphics.PorterDuff;
import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.IBinder; import android.os.IBinder;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction; 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.Media;
import fr.free.nrw.commons.R; import fr.free.nrw.commons.R;
import fr.free.nrw.commons.di.CommonsDaggerSupportFragment; 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.media.MediaDetailPagerFragment;
import fr.free.nrw.commons.mwapi.MediaWikiApi; import fr.free.nrw.commons.mwapi.MediaWikiApi;
import fr.free.nrw.commons.nearby.NearbyNoificationCardView; 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.Contribution.STATE_FAILED;
import static fr.free.nrw.commons.contributions.ContributionDao.Table.ALL_FIELDS; 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.contributions.ContributionsContentProvider.BASE_URI;
import static fr.free.nrw.commons.location.LocationServiceManager.LOCATION_REQUEST;
import static fr.free.nrw.commons.settings.Prefs.UPLOADS_SHOWING; import static fr.free.nrw.commons.settings.Prefs.UPLOADS_SHOWING;
public class ContributionsFragment public class ContributionsFragment
@ -66,7 +73,9 @@ public class ContributionsFragment
AdapterView.OnItemClickListener, AdapterView.OnItemClickListener,
MediaDetailPagerFragment.MediaDetailProvider, MediaDetailPagerFragment.MediaDetailProvider,
FragmentManager.OnBackStackChangedListener, FragmentManager.OnBackStackChangedListener,
ContributionsListFragment.SourceRefresher { ContributionsListFragment.SourceRefresher,
LocationUpdateListener
{
@Inject @Inject
@Named("default_preferences") @Named("default_preferences")
SharedPreferences prefs; SharedPreferences prefs;
@ -76,6 +85,8 @@ public class ContributionsFragment
MediaWikiApi mediaWikiApi; MediaWikiApi mediaWikiApi;
@Inject @Inject
NotificationController notificationController; NotificationController notificationController;
@Inject
public LocationServiceManager locationManager;
private ArrayList<DataSetObserver> observersWaitingForLoad = new ArrayList<>(); private ArrayList<DataSetObserver> observersWaitingForLoad = new ArrayList<>();
private Cursor allContributions; private Cursor allContributions;
@ -91,7 +102,6 @@ public class ContributionsFragment
public NearbyNoificationCardView nearbyNoificationCardView; public NearbyNoificationCardView nearbyNoificationCardView;
/** /**
* Since we will need to use parent activity on onAuthCookieAcquired, we have to wait * 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. * fragment to be attached. Latch will be responsible for this sync.
@ -266,6 +276,28 @@ public class ContributionsFragment
allContributions = contributionDao.loadAllContributions(); allContributions = contributionDao.loadAllContributions();
getActivity().getSupportLoaderManager().initLoader(0, null, ContributionsFragment.this); 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 @Override
@ -274,6 +306,7 @@ public class ContributionsFragment
showDetail(i); showDetail(i);
} }
/** /**
* Replace whatever is in the current contributionsFragmentContainer view with * Replace whatever is in the current contributionsFragmentContainer view with
* mediaDetailPagerFragment, and preserve previous state in back stack. * 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 @Override
public void onSaveInstanceState(Bundle outState) { public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState); super.onSaveInstanceState(outState);
@ -425,6 +472,18 @@ public class ContributionsFragment
} }
new UnreadNotificationsCheckAsync((ContributionsActivity) getActivity(), notificationController).execute(); 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 @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.annotation.Nullable;
import android.support.v7.widget.CardView; import android.support.v7.widget.CardView;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.util.Log;
import android.view.View; import android.view.View;
import android.view.animation.AnimationUtils; import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextSwitcher; import android.widget.TextSwitcher;
import android.widget.TextView; import android.widget.TextView;
@ -15,6 +18,8 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import fr.free.nrw.commons.R; 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; import fr.free.nrw.commons.notification.Notification;
/** /**
@ -23,6 +28,9 @@ import fr.free.nrw.commons.notification.Notification;
public class NearbyNoificationCardView extends CardView{ public class NearbyNoificationCardView extends CardView{
private Context context; private Context context;
private Button permissionRequestButton;
private RelativeLayout contentLayout;
private TextView notificationTextSwitcher; private TextView notificationTextSwitcher;
private TextView notificationTimeSwitcher; private TextView notificationTimeSwitcher;
private ImageView notificationIcon; private ImageView notificationIcon;
@ -47,9 +55,39 @@ public class NearbyNoificationCardView extends CardView{
private void init() { private void init() {
View rootView = inflate(context, R.layout.nearby_card_view, this); 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); notificationTextSwitcher = rootView.findViewById(R.id.nearby_title);
notificationTimeSwitcher = rootView.findViewById(R.id.nearby_distance); notificationTimeSwitcher = rootView.findViewById(R.id.nearby_distance);
notificationIcon = rootView.findViewById(R.id.nearby_icon); 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 <Button
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:id="@+id/permission_request_button"
android:text="Tab to see closest wikidata item needs photo" android:text="Tab to see closest wikidata item needs photo"
android:layout_centerInParent="true" android:layout_centerInParent="true"
android:layout_marginLeft="8dp" android:layout_marginLeft="8dp"
@ -24,7 +25,9 @@
<RelativeLayout <RelativeLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content"
android:id="@+id/content_layout"
>
<ImageView <ImageView
android:id="@+id/nearby_icon" android:id="@+id/nearby_icon"