From a3438c4f8d94aae7eabbbf396da0bfd062756190 Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Tue, 25 Aug 2020 16:35:16 -0300 Subject: [PATCH] Change where edit profile screen requests camera permission. --- .../details/AddGroupDetailsFragment.java | 10 ++----- ...tarSelectionBottomSheetDialogFragment.java | 26 +++++++++++++++++-- .../profiles/edit/EditProfileFragment.java | 13 +--------- app/src/main/res/values/strings.xml | 1 + 4 files changed, 28 insertions(+), 22 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/details/AddGroupDetailsFragment.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/details/AddGroupDetailsFragment.java index 157a5757e..51fba8fca 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/details/AddGroupDetailsFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/details/AddGroupDetailsFragment.java @@ -1,6 +1,5 @@ package org.thoughtcrime.securesms.groups.ui.creategroup.details; -import android.Manifest; import android.app.Activity; import android.content.Context; import android.content.Intent; @@ -37,7 +36,6 @@ import org.thoughtcrime.securesms.mediasend.AvatarSelectionBottomSheetDialogFrag import org.thoughtcrime.securesms.mediasend.Media; import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader; import org.thoughtcrime.securesms.mms.GlideApp; -import org.thoughtcrime.securesms.permissions.Permissions; import org.thoughtcrime.securesms.profiles.AvatarHelper; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; @@ -253,12 +251,8 @@ public class AddGroupDetailsFragment extends LoggingFragment { } private void showAvatarSelectionBottomSheet() { - Permissions.with(this) - .request(Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE) - .ifNecessary() - .onAnyResult(() -> AvatarSelectionBottomSheetDialogFragment.create(viewModel.hasAvatar(), true, REQUEST_CODE_AVATAR, true) - .show(getChildFragmentManager(), "BOTTOM")) - .execute(); + AvatarSelectionBottomSheetDialogFragment.create(viewModel.hasAvatar(), true, REQUEST_CODE_AVATAR, true) + .show(getChildFragmentManager(), "BOTTOM"); } public interface Callback { diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/AvatarSelectionBottomSheetDialogFragment.java b/app/src/main/java/org/thoughtcrime/securesms/mediasend/AvatarSelectionBottomSheetDialogFragment.java index 9713d61be..8ff7a6cc8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/AvatarSelectionBottomSheetDialogFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/AvatarSelectionBottomSheetDialogFragment.java @@ -1,11 +1,13 @@ package org.thoughtcrime.securesms.mediasend; +import android.Manifest; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.Toast; import androidx.annotation.AttrRes; import androidx.annotation.NonNull; @@ -21,6 +23,7 @@ import com.google.android.material.bottomsheet.BottomSheetDialogFragment; import org.thoughtcrime.securesms.ClearProfileAvatarActivity; import org.thoughtcrime.securesms.R; +import org.thoughtcrime.securesms.permissions.Permissions; import org.thoughtcrime.securesms.util.ThemeUtil; import java.util.ArrayList; @@ -68,7 +71,7 @@ public class AvatarSelectionBottomSheetDialogFragment extends BottomSheetDialogF super.onCreate(savedInstanceState); if (getOptionsCount() == 1) { - launchOptionAndDismiss(getOptionsFromArguments().get(0)); + askForPermissionIfNeededAndLaunch(getOptionsFromArguments().get(0)); } } @@ -80,7 +83,12 @@ public class AvatarSelectionBottomSheetDialogFragment extends BottomSheetDialogF @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { RecyclerView recyclerView = view.findViewById(R.id.avatar_selection_bottom_sheet_dialog_fragment_recycler); - recyclerView.setAdapter(new SelectionOptionAdapter(getOptionsFromArguments(), this::launchOptionAndDismiss)); + recyclerView.setAdapter(new SelectionOptionAdapter(getOptionsFromArguments(), this::askForPermissionIfNeededAndLaunch)); + } + + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + Permissions.onRequestPermissionsResult(this, requestCode, permissions, grantResults); } @SuppressWarnings("ConstantConditions") @@ -95,6 +103,20 @@ public class AvatarSelectionBottomSheetDialogFragment extends BottomSheetDialogF return Stream.of(optionCodes).map(SelectionOption::fromCode).toList(); } + private void askForPermissionIfNeededAndLaunch(@NonNull SelectionOption option) { + if (option == SelectionOption.CAPTURE) { + Permissions.with(this) + .request(Manifest.permission.CAMERA) + .ifNecessary() + .onAllGranted(() -> launchOptionAndDismiss(option)) + .onAnyDenied(() -> Toast.makeText(requireContext(), R.string.AvatarSelectionBottomSheetDialogFragment__taking_a_photo_requires_the_camera_permission, Toast.LENGTH_SHORT) + .show()) + .execute(); + } else { + launchOptionAndDismiss(option); + } + } + private void launchOptionAndDismiss(@NonNull SelectionOption option) { Intent intent = createIntent(requireContext(), option, requireArguments().getBoolean(ARG_IS_GROUP)); diff --git a/app/src/main/java/org/thoughtcrime/securesms/profiles/edit/EditProfileFragment.java b/app/src/main/java/org/thoughtcrime/securesms/profiles/edit/EditProfileFragment.java index b746619b0..809f24b8d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/profiles/edit/EditProfileFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/profiles/edit/EditProfileFragment.java @@ -1,6 +1,5 @@ package org.thoughtcrime.securesms.profiles.edit; -import android.Manifest; import android.animation.Animator; import android.content.Context; import android.content.Intent; @@ -38,7 +37,6 @@ import org.thoughtcrime.securesms.mediasend.AvatarSelectionActivity; import org.thoughtcrime.securesms.mediasend.AvatarSelectionBottomSheetDialogFragment; import org.thoughtcrime.securesms.mediasend.Media; import org.thoughtcrime.securesms.mms.GlideApp; -import org.thoughtcrime.securesms.permissions.Permissions; import org.thoughtcrime.securesms.profiles.ProfileName; import org.thoughtcrime.securesms.providers.BlobProvider; import org.thoughtcrime.securesms.registration.RegistrationUtil; @@ -152,11 +150,6 @@ public class EditProfileFragment extends LoggingFragment { } } - @Override - public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { - Permissions.onRequestPermissionsResult(this, requestCode, permissions, grantResults); - } - @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); @@ -232,11 +225,7 @@ public class EditProfileFragment extends LoggingFragment { usernameLabel.setVisibility(View.VISIBLE); } - this.avatar.setOnClickListener(v -> Permissions.with(this) - .request(Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE) - .ifNecessary() - .onAnyResult(this::startAvatarSelection) - .execute()); + this.avatar.setOnClickListener(v -> startAvatarSelection()); this.givenName .addTextChangedListener(new AfterTextChanged(s -> { trimInPlace(s, isEditingGroup); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9e5faae0c..d46a9b3bc 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -387,6 +387,7 @@ Take photo Choose from gallery Remove photo + Taking a photo requires the camera permission. Now