diff --git a/build.gradle b/build.gradle index 205b0f5dc..364e3f3a6 100644 --- a/build.gradle +++ b/build.gradle @@ -149,7 +149,7 @@ dependencies { implementation 'org.videolan:libvlc:2.1.1' - implementation 'pub.devrel:easypermissions:0.4.2' + implementation 'pub.devrel:easypermissions:3.0.0' testImplementation 'org.robolectric:robolectric:3.1.2' testImplementation 'junit:junit:4.12' testImplementation 'org.robolectric:shadows-multidex:3.0' diff --git a/src/main/java/org/amahi/anywhere/activity/ServerFilesActivity.java b/src/main/java/org/amahi/anywhere/activity/ServerFilesActivity.java index 2bb506755..973312296 100644 --- a/src/main/java/org/amahi/anywhere/activity/ServerFilesActivity.java +++ b/src/main/java/org/amahi/anywhere/activity/ServerFilesActivity.java @@ -31,20 +31,23 @@ import android.os.Environment; import android.os.IBinder; import android.provider.MediaStore; -import androidx.annotation.NonNull; -import androidx.annotation.RequiresApi; -import com.google.android.material.floatingactionbutton.FloatingActionButton; -import com.google.android.material.snackbar.Snackbar; -import androidx.fragment.app.Fragment; -import androidx.core.content.FileProvider; -import androidx.appcompat.app.AppCompatActivity; +import android.util.Log; import android.view.MenuItem; import android.view.View; import android.widget.FrameLayout; +import androidx.annotation.NonNull; +import androidx.annotation.RequiresApi; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.app.ActivityCompat; +import androidx.core.content.FileProvider; +import androidx.fragment.app.Fragment; + import com.google.android.gms.cast.framework.CastContext; import com.google.android.gms.cast.framework.CastState; import com.google.android.gms.cast.framework.CastStateListener; +import com.google.android.material.floatingactionbutton.FloatingActionButton; +import com.google.android.material.snackbar.Snackbar; import com.squareup.otto.Subscribe; import org.amahi.anywhere.AmahiApplication; @@ -61,8 +64,8 @@ import org.amahi.anywhere.bus.UploadClickEvent; import org.amahi.anywhere.db.entities.OfflineFile; import org.amahi.anywhere.db.repositories.OfflineFileRepository; -import org.amahi.anywhere.fragment.AudioControllerFragment; import org.amahi.anywhere.fragment.AlertDialogFragment; +import org.amahi.anywhere.fragment.AudioControllerFragment; import org.amahi.anywhere.fragment.GooglePlaySearchFragment; import org.amahi.anywhere.fragment.PrepareDialogFragment; import org.amahi.anywhere.fragment.ProgressDialogFragment; @@ -368,8 +371,12 @@ private void checkCameraPermissions() { if (EasyPermissions.hasPermissions(this, perms)) { openCamera(); } else { - EasyPermissions.requestPermissions(this, getString(R.string.camera_permission), - CAMERA_PERMISSION, perms); + if (ActivityCompat.shouldShowRequestPermissionRationale(ServerFilesActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + showPermissionSnackBar(getString(R.string.file_upload_permission_denied)); + } else { + EasyPermissions.requestPermissions(this, getString(R.string.camera_permission), + CAMERA_PERMISSION, perms); + } } } @@ -399,11 +406,16 @@ private File createImageFile() throws IOException { @RequiresApi(api = Build.VERSION_CODES.M) private void checkFileReadPermissions() { String[] perms = {Manifest.permission.READ_EXTERNAL_STORAGE}; + if (EasyPermissions.hasPermissions(this, perms)) { showFileChooser(); } else { - EasyPermissions.requestPermissions(this, getString(R.string.file_upload_permission), - FILE_UPLOAD_PERMISSION, perms); + if (ActivityCompat.shouldShowRequestPermissionRationale(ServerFilesActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE)) { + showPermissionSnackBar(getString(R.string.file_upload_permission_denied)); + } else { + EasyPermissions.requestPermissions(this, getString(R.string.file_upload_permission), + FILE_UPLOAD_PERMISSION, perms); + } } } @@ -441,6 +453,8 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { uploadFile(cameraImage); } break; + case AppSettingsDialog.DEFAULT_SETTINGS_REQ_CODE: + break; } } }