From edd2706cf028ddef4bb2a6f7da1bf24b9d9ed36a Mon Sep 17 00:00:00 2001 From: cretin45 Date: Thu, 5 May 2016 12:52:55 -0700 Subject: Trebuchet: Add runtime storage perm check for wallpaper picker Issue-id: FEIJ-441 Change-Id: Iac9a2c249de595568f68313335d337410928d19e --- .../android/launcher3/WallpaperCropActivity.java | 42 ++++++++++++++++++++++ .../android/launcher3/WallpaperPickerActivity.java | 2 +- res/values/cm_strings.xml | 2 ++ 3 files changed, 45 insertions(+), 1 deletion(-) diff --git a/WallpaperPicker/src/com/android/launcher3/WallpaperCropActivity.java b/WallpaperPicker/src/com/android/launcher3/WallpaperCropActivity.java index 4aa51dbd9..1efe30104 100644 --- a/WallpaperPicker/src/com/android/launcher3/WallpaperCropActivity.java +++ b/WallpaperPicker/src/com/android/launcher3/WallpaperCropActivity.java @@ -16,6 +16,7 @@ package com.android.launcher3; +import android.Manifest; import android.annotation.TargetApi; import android.app.ActionBar; import android.app.Activity; @@ -23,6 +24,7 @@ import android.app.WallpaperManager; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; +import android.content.pm.PackageManager; import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.Bitmap; @@ -58,6 +60,8 @@ import java.util.WeakHashMap; public class WallpaperCropActivity extends BaseActivity implements Handler.Callback { private static final String LOGTAG = "Launcher3.CropActivity"; + private static final int REQUEST_CODE_STORAGE_PERMISSION_CHECK = 100; + protected static final String WALLPAPER_WIDTH_KEY = WallpaperUtils.WALLPAPER_WIDTH_KEY; protected static final String WALLPAPER_HEIGHT_KEY = WallpaperUtils.WALLPAPER_HEIGHT_KEY; @@ -90,6 +94,34 @@ public class WallpaperCropActivity extends BaseActivity implements Handler.Callb public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + if (!hasStoragePermissions()) { + requestStoragePermissions(); + } else { + load(); + } + } + + @Override + public void onRequestPermissionsResult(int requestCode, String[] permissions, + int[] grantResults) { + if (requestCode == REQUEST_CODE_STORAGE_PERMISSION_CHECK) { + for (int i = 0; i < permissions.length; i++ ) { + final String permission = permissions[i]; + final int grantResult = grantResults[i]; + if (permission.equals(Manifest.permission.READ_EXTERNAL_STORAGE)) { + if (grantResult == PackageManager.PERMISSION_GRANTED) { + load(); + } else { + Toast.makeText(this, getString(R.string.storage_permission_denied), + Toast.LENGTH_SHORT).show(); + finish(); + } + } + } + } + } + + private void load() { mLoaderThread = new HandlerThread("wallpaper_loader"); mLoaderThread.start(); mLoaderHandler = new Handler(mLoaderThread.getLooper(), this); @@ -451,6 +483,16 @@ public class WallpaperCropActivity extends BaseActivity implements Handler.Callb sp, getWindowManager(), WallpaperManager.getInstance(getContext()), true); } + private boolean hasStoragePermissions() { + return checkCallingOrSelfPermission(android.Manifest.permission.READ_EXTERNAL_STORAGE) == + PackageManager.PERMISSION_GRANTED; + } + + private void requestStoragePermissions() { + requestPermissions(new String[] {android.Manifest.permission.READ_EXTERNAL_STORAGE}, + REQUEST_CODE_STORAGE_PERMISSION_CHECK); + } + static class LoadRequest { BitmapSource src; boolean touchEnabled; diff --git a/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java b/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java index 59858501a..abf202604 100644 --- a/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java +++ b/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java @@ -721,7 +721,7 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { public void onStop() { super.onStop(); mWallpaperStrip = findViewById(R.id.wallpaper_strip); - if (mWallpaperStrip.getAlpha() < 1f) { + if (mWallpaperStrip != null && mWallpaperStrip.getAlpha() < 1f) { mWallpaperStrip.setAlpha(1f); mWallpaperStrip.setVisibility(View.VISIBLE); } diff --git a/res/values/cm_strings.xml b/res/values/cm_strings.xml index 1c6aaf868..36a2f2517 100644 --- a/res/values/cm_strings.xml +++ b/res/values/cm_strings.xml @@ -77,4 +77,6 @@ App not available + + Can\'t access storage -- cgit v1.2.3