From 737ecfb62057cd002fed7b65611153c26281cf84 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Tue, 23 Feb 2021 10:29:51 -0300 Subject: [PATCH 1/2] Some unrelated code changes to avatar settings --- .../settings/ConfirmAvatarDialogFragment.java | 42 +++++++++---------- .../android/settings/SettingsViewModel.java | 2 +- 2 files changed, 21 insertions(+), 23 deletions(-) diff --git a/briar-android/src/main/java/org/briarproject/briar/android/settings/ConfirmAvatarDialogFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/settings/ConfirmAvatarDialogFragment.java index 4c87a3fc0..34f95691a 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/settings/ConfirmAvatarDialogFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/settings/ConfirmAvatarDialogFragment.java @@ -32,7 +32,7 @@ public class ConfirmAvatarDialogFragment extends DialogFragment { @Inject ViewModelProvider.Factory viewModelFactory; - private SettingsViewModel settingsViewModel; + private SettingsViewModel viewModel; private static final String ARG_URI = "uri"; private Uri uri; @@ -51,6 +51,9 @@ public class ConfirmAvatarDialogFragment extends DialogFragment { public void onAttach(Context ctx) { super.onAttach(ctx); ((BaseActivity) requireActivity()).getActivityComponent().inject(this); + ViewModelProvider provider = + new ViewModelProvider(requireActivity(), viewModelFactory); + viewModel = provider.get(SettingsViewModel.class); } @Override @@ -60,32 +63,27 @@ public class ConfirmAvatarDialogFragment extends DialogFragment { uri = Uri.parse(argUri); FragmentActivity activity = requireActivity(); - - ViewModelProvider provider = - new ViewModelProvider(activity, viewModelFactory); - settingsViewModel = provider.get(SettingsViewModel.class); - - AlertDialog.Builder builder = - new AlertDialog.Builder(activity, R.style.BriarDialogTheme); - - LayoutInflater inflater = LayoutInflater.from(getContext()); + LayoutInflater inflater = LayoutInflater.from(activity); final View view = inflater.inflate(R.layout.fragment_confirm_avatar_dialog, null); - builder.setView(view); - - builder.setTitle(R.string.dialog_confirm_profile_picture_title); - builder.setNegativeButton(R.string.cancel, null); - builder.setPositiveButton(R.string.change, - (dialog, id) -> settingsViewModel.setAvatar(uri)); - ImageView imageView = view.findViewById(R.id.image); - imageView.setImageURI(uri); - TextView textViewUserName = view.findViewById(R.id.username); - settingsViewModel.getOwnIdentityInfo().observe(activity, - us -> textViewUserName.setText(us.getLocalAuthor().getName())); - return builder.create(); + // we can't use getViewLifecycleOwner() here + // as this fragment technically doesn't have a view + viewModel.getOwnIdentityInfo().observe(activity, us -> + textViewUserName.setText(us.getLocalAuthor().getName()) + ); + + int theme = R.style.BriarDialogTheme; + return new AlertDialog.Builder(activity, theme) + .setView(view) + .setTitle(R.string.dialog_confirm_profile_picture_title) + .setNegativeButton(R.string.cancel, null) + .setPositiveButton(R.string.change, (d, id) -> + viewModel.setAvatar(uri) + ) + .create(); } } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsViewModel.java b/briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsViewModel.java index c6821b92a..803e2bbf2 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsViewModel.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsViewModel.java @@ -79,7 +79,7 @@ class SettingsViewModel extends AndroidViewModel { return ownIdentityInfo; } - public LiveEvent getSetAvatarFailed() { + LiveEvent getSetAvatarFailed() { return setAvatarFailed; } From 6cfb70db95d81d9b2190075d1dda387f023f9a2c Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Mon, 1 Mar 2021 14:15:53 -0300 Subject: [PATCH 2/2] Load image from URI with Glide to prevent OOM errors --- .../android/settings/ConfirmAvatarDialogFragment.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/briar-android/src/main/java/org/briarproject/briar/android/settings/ConfirmAvatarDialogFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/settings/ConfirmAvatarDialogFragment.java index 34f95691a..c3d200aa4 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/settings/ConfirmAvatarDialogFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/settings/ConfirmAvatarDialogFragment.java @@ -9,10 +9,13 @@ import android.view.View; import android.widget.ImageView; import android.widget.TextView; +import com.bumptech.glide.load.engine.DiskCacheStrategy; + import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; import org.briarproject.briar.R; import org.briarproject.briar.android.activity.BaseActivity; +import org.briarproject.briar.android.conversation.glide.GlideApp; import javax.inject.Inject; @@ -69,6 +72,13 @@ public class ConfirmAvatarDialogFragment extends DialogFragment { ImageView imageView = view.findViewById(R.id.image); TextView textViewUserName = view.findViewById(R.id.username); + GlideApp.with(imageView) + .load(uri) + .diskCacheStrategy(DiskCacheStrategy.NONE) + .error(R.drawable.ic_image_broken) + .into(imageView) + .waitForLayout(); + // we can't use getViewLifecycleOwner() here // as this fragment technically doesn't have a view viewModel.getOwnIdentityInfo().observe(activity, us ->