summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/com/android/gallery3d/app/AbstractGalleryActivity.java3
-rw-r--r--src/com/android/gallery3d/app/AbstractPermissionActivity.java117
-rwxr-xr-xsrc/com/android/gallery3d/app/GalleryActivity.java59
-rw-r--r--src/com/android/gallery3d/app/MovieActivity.java114
-rw-r--r--src/com/android/gallery3d/app/PickerActivity.java10
5 files changed, 217 insertions, 86 deletions
diff --git a/src/com/android/gallery3d/app/AbstractGalleryActivity.java b/src/com/android/gallery3d/app/AbstractGalleryActivity.java
index f9b0fd6dc..709151a1a 100644
--- a/src/com/android/gallery3d/app/AbstractGalleryActivity.java
+++ b/src/com/android/gallery3d/app/AbstractGalleryActivity.java
@@ -51,7 +51,8 @@ import com.android.photos.data.GalleryBitmapPool;
import java.io.FileNotFoundException;
-public class AbstractGalleryActivity extends Activity implements GalleryContext {
+public abstract class AbstractGalleryActivity extends AbstractPermissionActivity
+ implements GalleryContext {
private static final String TAG = "AbstractGalleryActivity";
private GLRootView mGLRootView;
private StateManager mStateManager;
diff --git a/src/com/android/gallery3d/app/AbstractPermissionActivity.java b/src/com/android/gallery3d/app/AbstractPermissionActivity.java
new file mode 100644
index 000000000..e4fc95372
--- /dev/null
+++ b/src/com/android/gallery3d/app/AbstractPermissionActivity.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright (c) 2016, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package com.android.gallery3d.app;
+
+import android.Manifest;
+import android.app.Activity;
+import android.content.pm.PackageManager;
+import android.os.Build;
+import android.os.Bundle;
+
+import java.util.ArrayList;
+
+public abstract class AbstractPermissionActivity extends Activity {
+
+ public static final int PERMISSION_REQUEST_STORAGE = 1;
+ private boolean permissionGranted = false;
+
+ protected abstract void onGetPermissionsSuccess();
+ protected abstract void onGetPermissionsFailure();
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ requestStoragePermission();
+ }
+
+ private void requestStoragePermission() {
+ String[] permissions = {
+ Manifest.permission.WRITE_EXTERNAL_STORAGE,
+ Manifest.permission.READ_EXTERNAL_STORAGE
+ };
+ requestPermission(permissions, PERMISSION_REQUEST_STORAGE);
+ }
+
+ protected void requestPermission(String[] permissions, int requestCode) {
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
+ permissionGranted = true;
+ return;
+ }
+
+ boolean needRequest = false;
+ ArrayList<String> permissionList = new ArrayList<String>();
+ for (String permission : permissions) {
+ if (checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) {
+ permissionList.add(permission);
+ needRequest = true;
+ }
+ }
+
+ if (needRequest) {
+ int count = permissionList.size();
+ if (count > 0) {
+ String[] permissionArray = new String[count];
+ for (int i = 0; i < count; i++) {
+ permissionArray[i] = permissionList.get(i);
+ }
+
+ requestPermissions(permissionArray, requestCode);
+ }
+ }
+ permissionGranted = !needRequest;
+ }
+
+ private boolean checkPermissionGrantResults(int[] grantResults) {
+ for (int result : grantResults) {
+ if (result != PackageManager.PERMISSION_GRANTED) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public void onRequestPermissionsResult(int requestCode, String[] permissions,
+ int[] grantResults) {
+ permissionGranted = checkPermissionGrantResults(grantResults);
+ switch (requestCode) {
+ case PERMISSION_REQUEST_STORAGE: {
+ if (permissionGranted) {
+ onGetPermissionsSuccess();
+ } else {
+ onGetPermissionsFailure();
+ }
+ }
+ }
+ }
+
+ protected boolean isPermissionGranted() {
+ return permissionGranted;
+ }
+}
diff --git a/src/com/android/gallery3d/app/GalleryActivity.java b/src/com/android/gallery3d/app/GalleryActivity.java
index 7a4e5db28..93ac5a4bc 100755
--- a/src/com/android/gallery3d/app/GalleryActivity.java
+++ b/src/com/android/gallery3d/app/GalleryActivity.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2015-2016, The Linux Foundation. All rights reserved.
* Not a Contribution
*
* Copyright (C) 2009 The Android Open Source Project
@@ -123,8 +123,7 @@ public final class GalleryActivity extends AbstractGalleryActivity implements On
initView();
mSavedInstanceState = savedInstanceState;
-
- if (!needRequestStoragePermission()) {
+ if (isPermissionGranted()) {
init();
}
}
@@ -144,57 +143,13 @@ public final class GalleryActivity extends AbstractGalleryActivity implements On
}
@Override
- public void onRequestPermissionsResult(int requestCode, String permissions[],
- int[] grantResults) {
- switch (requestCode) {
- case PERMISSION_REQUEST_STORAGE: {
- if (checkPermissionGrantResults(grantResults)) {
- init();
- } else {
- finish();
- }
- }
- }
- }
-
- private boolean needRequestStoragePermission() {
- if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) return false;
-
- boolean needRequest = false;
- String[] permissions = {
- Manifest.permission.WRITE_EXTERNAL_STORAGE,
- Manifest.permission.READ_EXTERNAL_STORAGE
- };
- ArrayList<String> permissionList = new ArrayList<String>();
- for (String permission : permissions) {
- if (checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) {
- permissionList.add(permission);
- needRequest = true;
- }
- }
-
- if (needRequest) {
- int count = permissionList.size();
- if (count > 0) {
- String[] permissionArray = new String[count];
- for (int i = 0; i < count; i++) {
- permissionArray[i] = permissionList.get(i);
- }
-
- requestPermissions(permissionArray, PERMISSION_REQUEST_STORAGE);
- }
- }
-
- return needRequest;
+ protected void onGetPermissionsSuccess() {
+ init();
}
- private boolean checkPermissionGrantResults(int[] grantResults) {
- for (int result : grantResults) {
- if (result != PackageManager.PERMISSION_GRANTED) {
- return false;
- }
- }
- return true;
+ @Override
+ protected void onGetPermissionsFailure() {
+ finish();
}
private static class ActionItem {
diff --git a/src/com/android/gallery3d/app/MovieActivity.java b/src/com/android/gallery3d/app/MovieActivity.java
index cbea7b303..150b3807f 100644
--- a/src/com/android/gallery3d/app/MovieActivity.java
+++ b/src/com/android/gallery3d/app/MovieActivity.java
@@ -19,7 +19,6 @@ package com.android.gallery3d.app;
import android.annotation.TargetApi;
import android.app.ActionBar;
import android.app.ActionBar.OnMenuVisibilityListener;
-import android.app.Activity;
import android.app.AlertDialog;
import android.app.KeyguardManager;
import android.bluetooth.BluetoothClass;
@@ -86,7 +85,7 @@ import android.bluetooth.BluetoothProfile;
* to set the action bar logo so the playback process looks more seamlessly integrated with
* the original activity.
*/
-public class MovieActivity extends Activity {
+public class MovieActivity extends AbstractPermissionActivity {
@SuppressWarnings("unused")
private static final String TAG = "MovieActivity";
private static final boolean LOG = true;
@@ -126,6 +125,7 @@ public class MovieActivity extends Activity {
private IMovieItem mMovieItem;
private IActivityHooker mMovieHooker;
private KeyguardManager mKeyguardManager;
+ private Bundle mSavedInstanceState;
private boolean mResumed = false;
private boolean mControlResumed = false;
@@ -186,14 +186,29 @@ public class MovieActivity extends Activity {
Intent intent = getIntent();
- mMovieHooker = ExtensionHelper.getHooker(this);
- initMovieInfo(intent);
-
initializeActionBar(intent);
mFinishOnCompletion = intent.getBooleanExtra(
MediaStore.EXTRA_FINISH_ON_COMPLETION, true);
mPrefs = getSharedPreferences(getApplicationContext().getPackageName(),
Context.MODE_PRIVATE);
+ mSavedInstanceState = savedInstanceState;
+ if (isPermissionGranted()) {
+ init(intent, rootView, savedInstanceState);
+ }
+
+ // DRM validation
+// Uri original = intent.getData();
+// String mimeType = intent.getType();
+// String filepath = DrmHelper.getFilePath(this, original);
+// if (DrmHelper.isDrmFile(filepath)) {
+// if (!DrmHelper.validateLicense(this, filepath, mimeType)) {
+// finish();
+// }
+// }
+ }
+
+ private void init(Intent intent, View rootView, Bundle savedInstanceState) {
+ initMovieInfo(intent);
mPlayer = new MoviePlayer(rootView, this, mMovieItem, savedInstanceState,
!mFinishOnCompletion) {
@Override
@@ -223,12 +238,7 @@ public class MovieActivity extends Activity {
// We set the background in the theme to have the launching animation.
// But for the performance (and battery), we remove the background here.
win.setBackgroundDrawable(null);
- mMovieHooker.init(this, intent);
- mMovieHooker.setParameter(null, mPlayer.getMoviePlayerExt());
- mMovieHooker.setParameter(null, mMovieItem);
- mMovieHooker.setParameter(null, mPlayer.getVideoSurface());
- mMovieHooker.onCreate(savedInstanceState);
-
+ initMovieHooker(intent, savedInstanceState);
// Determine available/supported effects
final Descriptor[] effects = AudioEffect.queryEffects();
for (final Descriptor effect : effects) {
@@ -246,16 +256,29 @@ public class MovieActivity extends Activity {
initEffects(mp.getAudioSessionId());
}
});
+ }
- // DRM validation
-// Uri original = intent.getData();
-// String mimeType = intent.getType();
-// String filepath = DrmHelper.getFilePath(this, original);
-// if (DrmHelper.isDrmFile(filepath)) {
-// if (!DrmHelper.validateLicense(this, filepath, mimeType)) {
-// finish();
-// }
-// }
+ private void initMovieHooker(Intent intent, Bundle savedInstanceState) {
+ mMovieHooker = ExtensionHelper.getHooker(this);
+ mMovieHooker.init(this, intent);
+ mMovieHooker.setParameter(null, mPlayer.getMoviePlayerExt());
+ mMovieHooker.setParameter(null, mMovieItem);
+ mMovieHooker.setParameter(null, mPlayer.getVideoSurface());
+ mMovieHooker.onCreate(savedInstanceState);
+ }
+
+
+ @Override
+ protected void onGetPermissionsSuccess() {
+ init(getIntent(), findViewById(R.id.movie_view_root), mSavedInstanceState);
+ mPlayer.requestAudioFocus();
+ mMovieHooker.onStart();
+ registerScreenReceiver();
+ }
+
+ @Override
+ protected void onGetPermissionsFailure() {
+ finish();
}
private void setActionBarLogoFromIntent(Intent intent) {
@@ -337,7 +360,6 @@ public class MovieActivity extends Activity {
// share provider is singleton, we should refresh our history file.
mShareProvider.setShareHistoryFileName(SHARE_HISTORY_FILE);
}
- refreshShareProvider(mMovieItem);
final MenuItem mi = menu.add(R.string.audio_effects);
mi.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@@ -347,14 +369,19 @@ public class MovieActivity extends Activity {
return true;
}
});
- mMovieHooker.onCreateOptionsMenu(menu);
+ if (isPermissionGranted()) {
+ refreshShareProvider(mMovieItem);
+ mMovieHooker.onCreateOptionsMenu(menu);
+ }
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
- mMovieHooker.onPrepareOptionsMenu(menu);
+ if (mMovieHooker != null) {
+ mMovieHooker.onPrepareOptionsMenu(menu);
+ }
// if (mMovieItem != null
// && !DrmHelper.isShareableDrmFile(DrmHelper.getFilePath(this,
@@ -550,6 +577,10 @@ public class MovieActivity extends Activity {
@Override
public void onStart() {
+ if (!isPermissionGranted()) {
+ super.onStart();
+ return;
+ }
mPlayer.requestAudioFocus();
super.onStart();
mMovieHooker.onStart();
@@ -558,6 +589,10 @@ public class MovieActivity extends Activity {
@Override
protected void onStop() {
+ if (!isPermissionGranted()) {
+ super.onStop();
+ return;
+ }
mPlayer.abandonAudioFocus();
super.onStop();
if (mControlResumed && mPlayer != null) {
@@ -570,6 +605,10 @@ public class MovieActivity extends Activity {
@Override
public void onPause() {
+ if (!isPermissionGranted()) {
+ super.onPause();
+ return;
+ }
// Audio track will be deallocated for local video playback,
// thus recycle effect here.
releaseEffects();
@@ -588,8 +627,6 @@ public class MovieActivity extends Activity {
@Override
public void onResume() {
- invalidateOptionsMenu();
-
if ((mVirtualizerSupported) || (mBassBoostSupported)) {
final IntentFilter intentFilter = new IntentFilter(Intent.ACTION_HEADSET_PLUG);
intentFilter.addAction(BluetoothDevice.ACTION_ACL_CONNECTED);
@@ -599,14 +636,19 @@ public class MovieActivity extends Activity {
}
mResumed = true;
- if (!isKeyguardLocked() && !mControlResumed && mPlayer != null) {
- mPlayer.onResume();
- mControlResumed = true;
- //initEffects(mPlayer.getAudioSessionId());
+ if (isPermissionGranted()) {
+ invalidateOptionsMenu();
+ if (!isKeyguardLocked() && !mControlResumed && mPlayer != null) {
+ mPlayer.onResume();
+ mControlResumed = true;
+ //initEffects(mPlayer.getAudioSessionId());
+ }
+ enhanceActionBar();
+ super.onResume();
+ mMovieHooker.onResume();
+ } else {
+ super.onResume();
}
- enhanceActionBar();
- super.onResume();
- mMovieHooker.onResume();
}
@Override
@@ -614,7 +656,9 @@ public class MovieActivity extends Activity {
super.onConfigurationChanged(newConfig);
if(this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE ||
this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
- mPlayer.setDefaultScreenMode();
+ if(mPlayer != null) {
+ mPlayer.setDefaultScreenMode();
+ }
}
}
@@ -635,6 +679,10 @@ public class MovieActivity extends Activity {
@Override
public void onDestroy() {
+ if (!isPermissionGranted()) {
+ super.onDestroy();
+ return;
+ }
releaseEffects();
mPlayer.onDestroy();
super.onDestroy();
diff --git a/src/com/android/gallery3d/app/PickerActivity.java b/src/com/android/gallery3d/app/PickerActivity.java
index 09ce203ee..78d0f253e 100644
--- a/src/com/android/gallery3d/app/PickerActivity.java
+++ b/src/com/android/gallery3d/app/PickerActivity.java
@@ -80,4 +80,14 @@ public class PickerActivity extends AbstractGalleryActivity
public void onClick(View v) {
if (v.getId() == R.id.cancel) finish();
}
+
+ @Override
+ protected void onGetPermissionsSuccess() {
+
+ }
+
+ @Override
+ protected void onGetPermissionsFailure() {
+
+ }
}