diff --git a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java index a4576e786b..9146f8f378 100644 --- a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java +++ b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java @@ -100,6 +100,7 @@ import com.owncloud.android.ui.preview.PreviewVideoActivity; import com.owncloud.android.utils.DisplayUtils; import com.owncloud.android.utils.ErrorMessageAdapter; import com.owncloud.android.utils.FileStorageUtils; +import com.owncloud.android.utils.PermissionUtil; import com.owncloud.android.utils.UriUtils; import java.io.File; @@ -112,7 +113,6 @@ public class FileDisplayActivity extends HookActivity implements FileFragment.ContainerActivity, OnSslUntrustedCertListener, OnEnforceableRefreshListener { - private static final int PERMISSIONS_WRITE_EXTERNAL_STORAGE = 1; private SyncBroadcastReceiver mSyncBroadcastReceiver; private UploadFinishReceiver mUploadFinishReceiver; private DownloadFinishReceiver mDownloadFinishReceiver; @@ -210,33 +210,26 @@ public class FileDisplayActivity extends HookActivity protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); - if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) - != android.content.pm.PackageManager.PERMISSION_GRANTED) { + if (PermissionUtil.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { // Check if we should show an explanation - if (ActivityCompat.shouldShowRequestPermissionRationale(this, + if (PermissionUtil.shouldShowRequestPermissionRationale(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { - - // write access isn't considered a rationale enforced permission in 23 - // code is still in place in case this changes in the future - // Show explanation to the user and then request permission Snackbar snackbar = Snackbar.make(findViewById(R.id.ListLayout), R.string.permission_storage_access, Snackbar.LENGTH_INDEFINITE) .setAction(R.string.common_ok, new View.OnClickListener() { @Override public void onClick(View v) { - requestWriteExternalStoreagePermission(); + PermissionUtil.requestWriteExternalStoreagePermission(FileDisplayActivity.this); } }); - // Changing action button text color - View sbView = snackbar.getView(); - TextView textView = (TextView) sbView.findViewById(android.support.design.R.id.snackbar_action); - textView.setTextColor(ContextCompat.getColor(this, R.color.white)); + DisplayUtils.colorSnackbar(this, snackbar); + snackbar.show(); } else { // No explanation needed, request the permission. - requestWriteExternalStoreagePermission(); + PermissionUtil.requestWriteExternalStoreagePermission(this); } } @@ -250,20 +243,11 @@ public class FileDisplayActivity extends HookActivity setBackgroundText(); } - /** - * request the write permission for external storage. - */ - private void requestWriteExternalStoreagePermission() { - ActivityCompat.requestPermissions(this, - new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, - PERMISSIONS_WRITE_EXTERNAL_STORAGE); - } - @Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { - case PERMISSIONS_WRITE_EXTERNAL_STORAGE: { + case PermissionUtil.PERMISSIONS_WRITE_EXTERNAL_STORAGE: { // If request is cancelled, result arrays are empty. if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { diff --git a/src/com/owncloud/android/utils/DisplayUtils.java b/src/com/owncloud/android/utils/DisplayUtils.java index 1255400154..324baaab17 100644 --- a/src/com/owncloud/android/utils/DisplayUtils.java +++ b/src/com/owncloud/android/utils/DisplayUtils.java @@ -28,10 +28,14 @@ import android.content.Context; import android.graphics.Point; import android.graphics.PorterDuff; import android.os.Build; +import android.support.design.widget.Snackbar; +import android.support.v4.content.ContextCompat; import android.text.format.DateUtils; import android.view.Display; +import android.view.View; import android.widget.ProgressBar; import android.widget.SeekBar; +import android.widget.TextView; import com.owncloud.android.MainApp; import com.owncloud.android.R; @@ -278,4 +282,16 @@ public class DisplayUtils { } } + /** + * set the owncloud standard colors for the snackbar. + * + * @param context the context relevant for setting the color according to the context's theme + * @param snackbar the snackbar to be colored + */ + public static void colorSnackbar(Context context, Snackbar snackbar) { + // Changing action button text color + View sbView = snackbar.getView(); + TextView textView = (TextView) sbView.findViewById(android.support.design.R.id.snackbar_action); + textView.setTextColor(ContextCompat.getColor(context, R.color.white)); + } } diff --git a/src/com/owncloud/android/utils/PermissionUtil.java b/src/com/owncloud/android/utils/PermissionUtil.java new file mode 100644 index 0000000000..84effda723 --- /dev/null +++ b/src/com/owncloud/android/utils/PermissionUtil.java @@ -0,0 +1,53 @@ +package com.owncloud.android.utils; + +import android.Manifest; +import android.app.Activity; +import android.content.Context; +import android.support.v4.app.ActivityCompat; +import android.support.v4.content.ContextCompat; + +/** + * Created by scherzia on 29.12.2015. + */ +public class PermissionUtil { + public static final int PERMISSIONS_WRITE_EXTERNAL_STORAGE = 1; + + /** + * Wrapper method for ContextCompat.checkSelfPermission(). + * Determine whether the app has been granted a particular permission. + * + * @param permission The name of the permission being checked. + * + * @return true if app has the permission, or false if not. + */ + public static boolean checkSelfPermission(Context context, String permission) { + return ContextCompat.checkSelfPermission(context, permission) + != android.content.pm.PackageManager.PERMISSION_GRANTED; + } + + /** + * Wrapper method for ActivityCompat.shouldShowRequestPermissionRationale(). + * Gets whether you should show UI with rationale for requesting a permission. + * You should do this only if you do not have the permission and the context in + * which the permission is requested does not clearly communicate to the user + * what would be the benefit from granting this permission. + * + * @param activity The target activity. + * @param permission A permission to be requested. + * @return Whether to show permission rationale UI. + */ + public static boolean shouldShowRequestPermissionRationale(Activity activity, String permission) { + return ActivityCompat.shouldShowRequestPermissionRationale(activity, permission); + } + + /** + * request the write permission for external storage. + * + * @param activity The target activity. + */ + public static void requestWriteExternalStoreagePermission(Activity activity) { + ActivityCompat.requestPermissions(activity, + new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, + PERMISSIONS_WRITE_EXTERNAL_STORAGE); + } +}