From 758e559760fad15661635854c85116366bc091a4 Mon Sep 17 00:00:00 2001 From: calderwoodra Date: Mon, 17 Jul 2017 13:17:21 -0700 Subject: Replaced video calling/camera permission dialog with a toast. Since we are given the camera permission by default for video calling, we don't need to request it from the framework. But, for privacy reasons, we still need to tell the user that we have it. Since we're changing the preference for call composer, v10.1 users will see this this toast again if they've never made a video call. The toast is shown in the following situations: 1. If a user receives a video call 2. If a user makes a video call 3. If the user opens call composer The toast doesn't show: 1. If the user has already seen the toast anywhere before 2. If the user has revoked the system permission and grants it with a system dialog Bug: 36608790,63405063 Test: manual PiperOrigin-RevId: 162258610 Change-Id: Ie93413c9c2e1f083919e7183eb920100b06fd4a4 --- .../callcomposer/CameraComposerFragment.java | 11 +++------ .../android/dialer/theme/res/values/strings.xml | 3 --- java/com/android/dialer/util/PermissionsUtil.java | 26 ++++++++++++++++++++++ .../com/android/dialer/util/res/values/strings.xml | 2 ++ 4 files changed, 31 insertions(+), 11 deletions(-) (limited to 'java/com/android/dialer') diff --git a/java/com/android/dialer/callcomposer/CameraComposerFragment.java b/java/com/android/dialer/callcomposer/CameraComposerFragment.java index d55f3222c..a5c65fd9d 100644 --- a/java/com/android/dialer/callcomposer/CameraComposerFragment.java +++ b/java/com/android/dialer/callcomposer/CameraComposerFragment.java @@ -18,13 +18,11 @@ package com.android.dialer.callcomposer; import android.Manifest; import android.content.Intent; -import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.graphics.drawable.Animatable; import android.hardware.Camera.CameraInfo; import android.net.Uri; import android.os.Bundle; -import android.preference.PreferenceManager; import android.provider.Settings; import android.support.annotation.NonNull; import android.support.annotation.Nullable; @@ -57,7 +55,6 @@ import com.android.dialer.util.PermissionsUtil; public class CameraComposerFragment extends CallComposerFragment implements CameraManagerListener, OnClickListener, CameraManager.MediaCallback { - private static final String CAMERA_PRIVACY_PREF = "camera_privacy_permission"; private static final String CAMERA_DIRECTION_KEY = "camera_direction"; private static final String CAMERA_URI_KEY = "camera_key"; @@ -134,11 +131,8 @@ public class CameraComposerFragment extends CallComposerFragment } private void setupCamera() { - SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getContext()); - if (!preferences.getBoolean(CAMERA_PRIVACY_PREF, false)) { - Toast.makeText(getContext(), getString(R.string.camera_privacy_text), Toast.LENGTH_LONG) - .show(); - preferences.edit().putBoolean(CAMERA_PRIVACY_PREF, true).apply(); + if (!PermissionsUtil.hasCameraPrivacyToastShown(getContext())) { + PermissionsUtil.showCameraPermissionToast(getContext()); } CameraManager.get().setListener(this); preview.setShown(); @@ -403,6 +397,7 @@ public class CameraComposerFragment extends CallComposerFragment Logger.get(getContext()).logImpression(DialerImpression.Type.CAMERA_PERMISSION_GRANTED); LogUtil.i("CameraComposerFragment.onRequestPermissionsResult", "Permission granted."); permissionView.setVisibility(View.GONE); + PermissionsUtil.setCameraPrivacyToastShown(getContext()); setupCamera(); } else if (requestCode == CAMERA_PERMISSION) { Logger.get(getContext()).logImpression(DialerImpression.Type.CAMERA_PERMISSION_DENIED); diff --git a/java/com/android/dialer/theme/res/values/strings.xml b/java/com/android/dialer/theme/res/values/strings.xml index af61d3596..74cabadf7 100644 --- a/java/com/android/dialer/theme/res/values/strings.xml +++ b/java/com/android/dialer/theme/res/values/strings.xml @@ -30,9 +30,6 @@ used in the Launcher icon. --> Phone - - Camera permission enabled - Video call diff --git a/java/com/android/dialer/util/PermissionsUtil.java b/java/com/android/dialer/util/PermissionsUtil.java index 34828317d..cb973680d 100644 --- a/java/com/android/dialer/util/PermissionsUtil.java +++ b/java/com/android/dialer/util/PermissionsUtil.java @@ -38,6 +38,7 @@ import android.content.pm.PackageManager; import android.support.annotation.NonNull; import android.support.v4.content.ContextCompat; import android.support.v4.content.LocalBroadcastManager; +import android.widget.Toast; import com.android.dialer.common.LogUtil; import java.util.ArrayList; import java.util.Arrays; @@ -47,6 +48,7 @@ import java.util.List; /** Utility class to help with runtime permissions. */ public class PermissionsUtil { + private static final String PREFERENCE_CAMERA_ALLOWED_BY_USER = "camera_allowed_by_user"; private static final String PERMISSION_PREFERENCE = "dialer_permissions"; private static final String CEQUINT_PERMISSION = "com.cequint.ecid.CALLER_ID_LOOKUP"; @@ -207,4 +209,28 @@ public class PermissionsUtil { } return permissionsCurrentlyDenied.toArray(new String[permissionsCurrentlyDenied.size()]); } + + /** + * Since we are granted the camera permission automatically as a first-party app, we need to show + * a toast to let users know the permission was granted for privacy reasons. + * + * @return true if we've already shown the camera privacy toast. + */ + public static boolean hasCameraPrivacyToastShown(@NonNull Context context) { + return DialerUtils.getDefaultSharedPreferenceForDeviceProtectedStorageContext(context) + .getBoolean(PREFERENCE_CAMERA_ALLOWED_BY_USER, false); + } + + public static void showCameraPermissionToast(@NonNull Context context) { + Toast.makeText(context, context.getString(R.string.camera_privacy_text), Toast.LENGTH_LONG) + .show(); + setCameraPrivacyToastShown(context); + } + + public static void setCameraPrivacyToastShown(@NonNull Context context) { + DialerUtils.getDefaultSharedPreferenceForDeviceProtectedStorageContext(context) + .edit() + .putBoolean(PREFERENCE_CAMERA_ALLOWED_BY_USER, true) + .apply(); + } } diff --git a/java/com/android/dialer/util/res/values/strings.xml b/java/com/android/dialer/util/res/values/strings.xml index 43ea6e31a..a4d944c19 100644 --- a/java/com/android/dialer/util/res/values/strings.xml +++ b/java/com/android/dialer/util/res/values/strings.xml @@ -39,4 +39,6 @@ Continue + + Camera permission enabled -- cgit v1.2.3