From 80eaa18ac94163ff3abf49b64caa90d43da4fc4c Mon Sep 17 00:00:00 2001 From: Likai Ding Date: Thu, 25 Feb 2016 15:01:30 +0800 Subject: Gallery: runtime permission check Some permissions are not used anymore so they are removed from manifest. Storage permission is required on startup. Change-Id: I46bd46b4f59667cd5818e53a37621ded8727b60e CRs-Fixed: 977136 --- AndroidManifest.xml | 7 +--- src/com/android/gallery3d/app/GalleryActivity.java | 40 ++++++++++++++++++++-- 2 files changed, 38 insertions(+), 9 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index d9d9b4eb5..91a243c20 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -24,23 +24,18 @@ - + - - - - - diff --git a/src/com/android/gallery3d/app/GalleryActivity.java b/src/com/android/gallery3d/app/GalleryActivity.java index 88de5bdff..9d9f92cff 100644 --- a/src/com/android/gallery3d/app/GalleryActivity.java +++ b/src/com/android/gallery3d/app/GalleryActivity.java @@ -28,9 +28,11 @@ import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnCancelListener; import android.content.Intent; +import android.content.pm.PackageManager; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; +import android.Manifest; import android.net.Uri; import android.os.Bundle; import android.os.Handler; @@ -103,6 +105,10 @@ public final class GalleryActivity extends AbstractGalleryActivity implements On * such as Intent.ACTION_VIEW, Intent.ACTION_GET_CONTENT, Intent.PICK. */ private boolean mDrawerLayoutSupported = true; + private static final int PERMISSION_REQUEST_STORAGE = 1; + private Bundle mSavedInstanceState; + + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -116,8 +122,20 @@ public final class GalleryActivity extends AbstractGalleryActivity implements On setContentView(R.layout.gallery_main); initView(); - if (savedInstanceState != null) { - getStateManager().restoreFromState(savedInstanceState); + mSavedInstanceState = savedInstanceState; + if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) + != PackageManager.PERMISSION_GRANTED) { + requestPermissions(new String[] { + Manifest.permission.WRITE_EXTERNAL_STORAGE + }, PERMISSION_REQUEST_STORAGE); + } else { + init(); + } + } + + private void init() { + if (mSavedInstanceState != null) { + getStateManager().restoreFromState(mSavedInstanceState); } else { initializeByIntent(); } @@ -125,6 +143,23 @@ public final class GalleryActivity extends AbstractGalleryActivity implements On boolean ddmBulk = SystemProperties.getBoolean("persist.gallery.dualcam.ddmbulk", false); if(ddmBulk) startBulkMpoProcess(); + + mSavedInstanceState = null; + } + + @Override + public void onRequestPermissionsResult(int requestCode, String permissions[], + int[] grantResults) { + switch (requestCode) { + case PERMISSION_REQUEST_STORAGE: { + if (grantResults.length > 0 + && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + init(); + } else { + finish(); + } + } + } } private static class ActionItem { @@ -539,7 +574,6 @@ public final class GalleryActivity extends AbstractGalleryActivity implements On @Override protected void onResume() { - Utils.assertTrue(getStateManager().getStateCount() > 0); super.onResume(); if (mVersionCheckDialog != null) { mVersionCheckDialog.show(); -- cgit v1.2.3