mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-27 21:03:54 +01:00
Add button click and permission request logic. Not: solve why location manager is null
This commit is contained in:
parent
9fecc07ad7
commit
a37fbf05f1
3 changed files with 113 additions and 3 deletions
|
|
@ -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) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue