From d6ce0894463a48ac91c72d7ae3628c3bd16d0a28 Mon Sep 17 00:00:00 2001 From: Martin Brabham Date: Tue, 26 Jan 2016 16:59:09 -0500 Subject: Refine CMFM permissions. Change-Id: Iee25427e2b0dbebc7e54558f6a0d98fab74ad16c --- Android.mk | 10 +++ res/values/strings.xml | 5 +- .../filemanager/activities/NavigationActivity.java | 76 ++++++++++++++++++---- 3 files changed, 77 insertions(+), 14 deletions(-) diff --git a/Android.mk b/Android.mk index 407e86ab..3ffaf4f5 100644 --- a/Android.mk +++ b/Android.mk @@ -21,9 +21,19 @@ LOCAL_SRC_FILES := $(call all-java-files-under, src) LOCAL_SRC_FILES += $(call all-java-files-under, libs/android-syntax-highlight/src) LOCAL_SRC_FILES += $(call all-java-files-under, libs/color-picker-view/src) +uicommon_dir := ../../../external/uicommon + +LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res \ + $(LOCAL_PATH)/$(uicommon_dir)/res + +LOCAL_AAPT_FLAGS := \ + --auto-add-overlay \ + --extra-packages com.cyngn.uicommon + LOCAL_STATIC_JAVA_LIBRARIES += libtruezip LOCAL_STATIC_JAVA_LIBRARIES += android-support-v4 LOCAL_STATIC_JAVA_LIBRARIES += juniversalchardet +LOCAL_STATIC_JAVA_LIBRARIES += uicommon LOCAL_PACKAGE_NAME := CMFileManager LOCAL_CERTIFICATE := platform diff --git a/res/values/strings.xml b/res/values/strings.xml index 4199502d..2e64c818 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -843,6 +843,9 @@ Couldn\'t find an app to open this file - The app cannot run without permission to write to external storage. + Filemanager requires permission to storage in order to view your files. + Go to Settings, and tap Permissions to grant permission. + Ok + Settings diff --git a/src/com/cyanogenmod/filemanager/activities/NavigationActivity.java b/src/com/cyanogenmod/filemanager/activities/NavigationActivity.java index bf663b65..5cfeb5bb 100755 --- a/src/com/cyanogenmod/filemanager/activities/NavigationActivity.java +++ b/src/com/cyanogenmod/filemanager/activities/NavigationActivity.java @@ -42,6 +42,7 @@ import android.os.Environment; import android.os.Handler; import android.os.Parcelable; import android.os.storage.StorageVolume; +import android.provider.Settings; import android.support.v4.app.ActionBarDrawerToggle; import android.support.v4.widget.DrawerLayout; import android.text.TextUtils; @@ -121,6 +122,7 @@ import com.cyanogenmod.filemanager.util.FileHelper; import com.cyanogenmod.filemanager.util.MimeTypeHelper.MimeTypeCategory; import com.cyanogenmod.filemanager.util.MountPointHelper; import com.cyanogenmod.filemanager.util.StorageHelper; +import com.cyngn.uicommon.view.Snackbar; import java.io.File; import java.io.FileNotFoundException; @@ -527,10 +529,58 @@ public class NavigationActivity extends Activity mDrawerToggle.syncState(); } } else { - String text = getResources().getString(R.string.storage_permissions_denied); - Toast.makeText(this, text, Toast.LENGTH_LONG).show(); - finish(); + if (shouldShowRequestPermissionRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + String text = getResources().getString(R.string.storage_permissions_denied); + final ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this + .findViewById(android.R.id.content)).getChildAt(0); + if (viewGroup != null) { + Snackbar snackbar = Snackbar.make(viewGroup, text, + Snackbar.LENGTH_INDEFINITE, 3); + snackbar.setAction(R.string.snackbar_ok, new OnClickListener() { + @Override + public void onClick(View v) { + requestNecessaryPermissions(); + } + }); + snackbar.show(); + } + } else { + StringBuilder builder = new StringBuilder(getString(R.string + .storage_permissions_denied)); + builder.append("\n\n"); + builder.append(getString(R.string.storage_permissions_explanation)); + final ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this + .findViewById(android.R.id.content)).getChildAt(0); + if (viewGroup != null) { + Snackbar snackbar = Snackbar.make(viewGroup, builder.toString(), + Snackbar.LENGTH_INDEFINITE, 7); + snackbar.setAction(R.string.snackbar_settings, new OnClickListener() { + @Override + public void onClick(View v) { + startInstalledAppDetailsActivity(NavigationActivity.this); + finish(); + } + }); + snackbar.show(); + } + } + + } + + } + + public static void startInstalledAppDetailsActivity(final Activity context) { + if (context == null) { + return; } + final Intent i = new Intent(); + i.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); + i.addCategory(Intent.CATEGORY_DEFAULT); + i.setData(Uri.parse("package:" + context.getPackageName())); + i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); + i.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); + context.startActivity(i); } private void finishOnCreate() { @@ -558,13 +608,6 @@ public class NavigationActivity extends Activity mImm = (InputMethodManager) this.getSystemService( Context.INPUT_METHOD_SERVICE); - // Set the theme before setContentView - Theme theme = ThemeManager.getCurrentTheme(this); - theme.setBaseThemeNoActionBar(this); - - //Set the main layout of the activity - setContentView(R.layout.navigation); - //Initialize nfc adapter NfcAdapter mNfcAdapter = NfcAdapter.getDefaultAdapter(this); if (mNfcAdapter != null) { @@ -669,15 +712,22 @@ public class NavigationActivity extends Activity Log.d(TAG, "NavigationActivity.onCreate"); //$NON-NLS-1$ } + // Set the theme before setContentView + Theme theme = ThemeManager.getCurrentTheme(this); + theme.setBaseThemeNoActionBar(this); + + //Set the main layout of the activity + setContentView(R.layout.navigation); + + //Save state + super.onCreate(state); + if (!hasPermissions()) { requestNecessaryPermissions(); } else { finishOnCreate(); } - //Save state - super.onCreate(state); - } @Override -- cgit v1.2.3