Merge 2.10 with master & Fixed merge conflicts (#2844)

This commit is contained in:
Ashish Kumar 2019-04-03 22:39:54 +05:30 committed by Josephine Lim
parent 02ad3b2dc8
commit 08a555c095
18 changed files with 172 additions and 113 deletions

View file

@ -10,6 +10,6 @@ public class FragmentUtils {
* @return
*/
public static boolean isFragmentUIActive(Fragment fragment) {
return fragment.getActivity() != null && fragment.isAdded() && !fragment.isDetached() && !fragment.isRemoving();
return fragment!=null && fragment.getActivity() != null && fragment.isAdded() && !fragment.isDetached() && !fragment.isRemoving();
}
}

View file

@ -14,7 +14,6 @@ import com.karumi.dexter.listener.PermissionDeniedResponse;
import com.karumi.dexter.listener.PermissionGrantedResponse;
import com.karumi.dexter.listener.PermissionRequest;
import com.karumi.dexter.listener.single.BasePermissionListener;
import fr.free.nrw.commons.CommonsApplication;
import fr.free.nrw.commons.R;
@ -64,42 +63,68 @@ public class PermissionUtils {
* @param rationaleTitle rationale title to be displayed when permission was denied
* @param rationaleMessage rationale message to be displayed when permission was denied
*/
public static void checkPermissionsAndPerformAction(Activity activity,
String permission,
Runnable onPermissionGranted,
@StringRes int rationaleTitle,
@StringRes int rationaleMessage) {
Dexter.withActivity(activity)
.withPermission(permission)
.withListener(new BasePermissionListener() {
@Override
public void onPermissionGranted(PermissionGrantedResponse response) {
onPermissionGranted.run();
}
public static void checkPermissionsAndPerformAction(Activity activity, String permission,
Runnable onPermissionGranted, @StringRes int rationaleTitle,
@StringRes int rationaleMessage) {
checkPermissionsAndPerformAction(activity, permission, onPermissionGranted, null,
rationaleTitle, rationaleMessage);
}
@Override
public void onPermissionDenied(PermissionDeniedResponse response) {
if (response.isPermanentlyDenied()) {
DialogUtil.showAlertDialog(activity,
activity.getString(rationaleTitle),
activity.getString(rationaleMessage),
activity.getString(R.string.navigation_item_settings),
null,
() -> askUserToManuallyEnablePermissionFromSettings(activity),
null);
/**
* Checks for a particular permission and runs the corresponding runnables to perform an action when the permission is granted/denied
* Also, it shows a rationale if needed
*
* Sample usage:
*
* PermissionUtils.checkPermissionsAndPerformAction(activity,
* Manifest.permission.WRITE_EXTERNAL_STORAGE,
* () -> initiateCameraUpload(activity),
* () -> showMessage(),
* R.string.storage_permission_title,
* R.string.write_storage_permission_rationale);
*
*
* @param activity activity requesting permissions
* @param permission the permission being requests
* @param onPermissionGranted the runnable to be executed when the permission is granted
* @param onPermissionDenied the runnable to be executed when the permission is denied(but not permanently)
* @param rationaleTitle rationale title to be displayed when permission was denied
* @param rationaleMessage rationale message to be displayed when permission was denied
*/
public static void checkPermissionsAndPerformAction(Activity activity, String permission,
Runnable onPermissionGranted, Runnable onPermissionDenied, @StringRes int rationaleTitle,
@StringRes int rationaleMessage) {
Dexter.withActivity(activity)
.withPermission(permission)
.withListener(new BasePermissionListener() {
@Override public void onPermissionGranted(PermissionGrantedResponse response) {
onPermissionGranted.run();
}
@Override public void onPermissionDenied(PermissionDeniedResponse response) {
if (response.isPermanentlyDenied()) {
DialogUtil.showAlertDialog(activity, activity.getString(rationaleTitle),
activity.getString(rationaleMessage),
activity.getString(R.string.navigation_item_settings), null,
() -> askUserToManuallyEnablePermissionFromSettings(activity), null);
} else {
if (null != onPermissionDenied) {
onPermissionDenied.run();
}
}
}
@Override
public void onPermissionRationaleShouldBeShown(PermissionRequest permission, PermissionToken token) {
DialogUtil.showAlertDialog(activity,
activity.getString(rationaleTitle),
activity.getString(rationaleMessage),
activity.getString(android.R.string.ok),
activity.getString(android.R.string.cancel),
token::continuePermissionRequest,
token::cancelPermissionRequest);
}
}).check();
@Override
public void onPermissionRationaleShouldBeShown(PermissionRequest permission,
PermissionToken token) {
DialogUtil.showAlertDialog(activity, activity.getString(rationaleTitle),
activity.getString(rationaleMessage),
activity.getString(android.R.string.ok),
activity.getString(android.R.string.cancel),
token::continuePermissionRequest, token::cancelPermissionRequest);
}
})
.check();
}
}

View file

@ -6,6 +6,7 @@ import android.view.Display;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.Toast;
import timber.log.Timber;
import com.google.android.material.snackbar.Snackbar;
@ -22,7 +23,13 @@ public class ViewUtil {
return;
}
ExecutorUtils.uiExecutor().execute(() -> Snackbar.make(view, messageResourceId, Snackbar.LENGTH_SHORT).show());
ExecutorUtils.uiExecutor().execute(() -> {
try {
Snackbar.make(view, messageResourceId, Snackbar.LENGTH_SHORT).show();
}catch (IllegalStateException e){
Timber.e(e.getMessage());
}
});
}
public static void showLongToast(Context context, String text) {