diff options
author | Felix <google@ix5.org> | 2019-07-13 15:55:03 +0200 |
---|---|---|
committer | Michael Bestas <mkbestas@lineageos.org> | 2019-12-11 20:06:32 +0200 |
commit | a76b2d2446847314868ad8f2fbb99ffd542065a8 (patch) | |
tree | e49d451b3b3170442eb81bcef585f672fff1851e | |
parent | 9771aed88abcd175f21c8d0a988194c7a088504b (diff) | |
download | android_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.java | 17 | ||||
-rw-r--r-- | src/com/android/camera/PermissionsActivity.java | 9 | ||||
-rw-r--r-- | src/com/android/camera/app/FirstRunDialog.java | 21 | ||||
-rw-r--r-- | src/com/android/camera/settings/CameraSettingsActivity.java | 12 |
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); + } + } } /** |