summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelix <google@ix5.org>2019-07-13 15:55:03 +0200
committerMichael Bestas <mkbestas@lineageos.org>2019-12-11 20:06:32 +0200
commita76b2d2446847314868ad8f2fbb99ffd542065a8 (patch)
treee49d451b3b3170442eb81bcef585f672fff1851e
parent9771aed88abcd175f21c8d0a988194c7a088504b (diff)
downloadandroid_packages_apps_Camera2-a76b2d2446847314868ad8f2fbb99ffd542065a8.tar.gz
android_packages_apps_Camera2-a76b2d2446847314868ad8f2fbb99ffd542065a8.tar.bz2
android_packages_apps_Camera2-a76b2d2446847314868ad8f2fbb99ffd542065a8.zip
Rework permissions request flow
Don't ask for location permissions if the user hasn't first opted into saving geolocation. Also add some TODOs for converting PermissionsActivity into a dialog and for Android Q's NFC deprecation Signed-off-by: Felix <google@ix5.org> Change-Id: Iab927e3202ea1b70e2cfd1b8671e3c900d2f2eb6
-rw-r--r--src/com/android/camera/CameraActivity.java17
-rw-r--r--src/com/android/camera/PermissionsActivity.java9
-rw-r--r--src/com/android/camera/app/FirstRunDialog.java21
-rw-r--r--src/com/android/camera/settings/CameraSettingsActivity.java12
4 files changed, 50 insertions, 9 deletions
diff --git a/src/com/android/camera/CameraActivity.java b/src/com/android/camera/CameraActivity.java
index d60979327..2de3ae825 100644
--- a/src/com/android/camera/CameraActivity.java
+++ b/src/com/android/camera/CameraActivity.java
@@ -195,9 +195,6 @@ public class CameraActivity extends QuickActivity
private static final long SCREEN_DELAY_MS = 2 * 60 * 1000; // 2 mins.
/** Load metadata for 10 items ahead of our current. */
private static final int FILMSTRIP_PRELOAD_AHEAD_ITEMS = 10;
- private static final int PERMISSIONS_ACTIVITY_REQUEST_CODE = 1;
- private static final int PERMISSIONS_RESULT_CODE_OK = 1;
- private static final int PERMISSIONS_RESULT_CODE_FAILED = 2;
/** Should be used wherever a context is needed. */
private Context mAppContext;
@@ -865,6 +862,7 @@ public class CameraActivity extends QuickActivity
messageId > 0 ? getString(messageId) : "");
}
+ // Candidate for deletion as Android Beam is deprecated in Android Q
private void setupNfcBeamPush() {
NfcAdapter adapter = NfcAdapter.getDefaultAdapter(mAppContext);
if (adapter == null) {
@@ -1654,6 +1652,7 @@ public class CameraActivity extends QuickActivity
preloadFilmstripItems();
+ // Candidate for deletion as Android Beam is deprecated in Android Q
setupNfcBeamPush();
mLocalImagesObserver = new FilmstripContentObserver();
@@ -1955,10 +1954,14 @@ public class CameraActivity extends QuickActivity
} else {
mHasCriticalPermissions = false;
}
-
- if ((checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
- !mSettingsManager.getBoolean(SettingsManager.SCOPE_GLOBAL, Keys.KEY_HAS_SEEN_PERMISSIONS_DIALOGS)) ||
- !mHasCriticalPermissions) {
+ if (!mHasCriticalPermissions || (mSettingsManager.getBoolean(
+ SettingsManager.SCOPE_GLOBAL, Keys.KEY_RECORD_LOCATION) &&
+ (checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION)
+ != PackageManager.PERMISSION_GRANTED) &&
+ !mSettingsManager.getBoolean(SettingsManager.SCOPE_GLOBAL,
+ Keys.KEY_HAS_SEEN_PERMISSIONS_DIALOGS))) {
+ // TODO: Convert PermissionsActivity into a dialog so we
+ // don't lose the state of CameraActivity.
Intent intent = new Intent(this, PermissionsActivity.class);
startActivity(intent);
finish();
diff --git a/src/com/android/camera/PermissionsActivity.java b/src/com/android/camera/PermissionsActivity.java
index 1f94463ff..aca4778e6 100644
--- a/src/com/android/camera/PermissionsActivity.java
+++ b/src/com/android/camera/PermissionsActivity.java
@@ -24,6 +24,9 @@ import com.android.camera2.R;
/**
* Activity that shows permissions request dialogs and handles lack of critical permissions.
+ * TODO: Convert PermissionsActivity into a dialog to be emitted from
+ * CameraActivity as not to have to restart CameraActivity from
+ * scratch.
*/
public class PermissionsActivity extends QuickActivity {
private static final Log.Tag TAG = new Log.Tag("PermissionsActivity");
@@ -132,8 +135,10 @@ public class PermissionsActivity extends QuickActivity {
mFlagHasWriteStoragePermission = true;
}
- if (checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION)
- != PackageManager.PERMISSION_GRANTED) {
+ if (mSettingsManager.getBoolean(SettingsManager.SCOPE_GLOBAL,
+ Keys.KEY_RECORD_LOCATION)
+ && (checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION)
+ != PackageManager.PERMISSION_GRANTED)) {
mNumPermissionsToRequest++;
mShouldRequestLocationPermission = true;
}
diff --git a/src/com/android/camera/app/FirstRunDialog.java b/src/com/android/camera/app/FirstRunDialog.java
index 91c057092..58e1fcbba 100644
--- a/src/com/android/camera/app/FirstRunDialog.java
+++ b/src/com/android/camera/app/FirstRunDialog.java
@@ -16,9 +16,12 @@
package com.android.camera.app;
+import android.Manifest;
import android.app.Dialog;
+import android.app.Activity;
import android.content.Context;
import android.content.DialogInterface;
+import android.content.pm.PackageManager;
import android.view.ViewGroup;
import com.android.camera.device.CameraId;
@@ -51,6 +54,9 @@ public class FirstRunDialog {
/** The default preference of whether enabling location recording. */
private static final boolean DEFAULT_LOCATION_RECORDING_ENABLED = true;
+ /** Request code to PackageManager */
+ private static final int PERMISSION_REQUEST_CODE = 1;
+
/** Listener to receive events. */
private final FirstRunDialogListener mListener;
@@ -203,6 +209,18 @@ public class FirstRunDialog {
mAspectRatioPreferenceDialog.show();
}
+ private void checkLocationPermission() {
+ if (mContext.checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION)
+ != PackageManager.PERMISSION_GRANTED) {
+ Activity activity = (Activity) mContext;
+ activity.requestPermissions(
+ new String[] {Manifest.permission.ACCESS_COARSE_LOCATION},
+ PERMISSION_REQUEST_CODE);
+ mSettingsManager.set(SettingsManager.SCOPE_GLOBAL,
+ Keys.KEY_HAS_SEEN_PERMISSIONS_DIALOGS, true);
+ }
+ }
+
/**
* Prompts a dialog to allow people to choose location preference when
* people open the app for the first time. If the preference has been set,
@@ -220,6 +238,9 @@ public class FirstRunDialog {
SettingsManager.SCOPE_GLOBAL,
Keys.KEY_RECORD_LOCATION,
locationRecordingEnabled);
+ if (locationRecordingEnabled) {
+ checkLocationPermission();
+ }
if (shouldShowAspectRatioDialog()) {
// Prompt the second dialog about aspect ratio preference.
diff --git a/src/com/android/camera/settings/CameraSettingsActivity.java b/src/com/android/camera/settings/CameraSettingsActivity.java
index c83d25600..a64770043 100644
--- a/src/com/android/camera/settings/CameraSettingsActivity.java
+++ b/src/com/android/camera/settings/CameraSettingsActivity.java
@@ -16,10 +16,12 @@
package com.android.camera.settings;
+import android.Manifest;
import android.app.ActionBar;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
+import android.content.pm.PackageManager;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.os.Bundle;
@@ -68,6 +70,7 @@ public class CameraSettingsActivity extends FragmentActivity {
*/
public static final String PREF_SCREEN_EXTRA = "pref_screen_extra";
public static final String HIDE_ADVANCED_SCREEN = "hide_advanced";
+ private static final int PERMISSION_REQUEST_CODE = 1;
private OneCameraManager mOneCameraManager;
@Override
@@ -346,6 +349,15 @@ public class CameraSettingsActivity extends FragmentActivity {
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
setSummary(findPreference(key));
+ if (key.equals(Keys.KEY_RECORD_LOCATION)
+ && sharedPreferences.getString(key, "0").equals("1")) {
+ Context context = this.getActivity().getApplicationContext();
+ if (context.checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION)
+ != PackageManager.PERMISSION_GRANTED) {
+ requestPermissions(new String[] {Manifest.permission.ACCESS_COARSE_LOCATION},
+ PERMISSION_REQUEST_CODE);
+ }
+ }
}
/**