From b67af2c70241ef4e242cad9785b3369a5f7aaea9 Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Mon, 21 Dec 2020 21:07:28 +0100 Subject: [PATCH] Wip: Work on trusting ikeys --- .../contacts/PresenceModeToColorMapper.java | 28 +++++++++++++++++ .../detail/AndroidContactDetailViewModel.java | 5 +++ .../detail/ContactDetailFragment.java | 31 ++++++++++--------- ..._openpgp_4_fingerprint_info_toggleable.xml | 6 ++-- .../data/repository/RxIkeyRepository.java | 1 + .../contact/ContactDetailViewModel.java | 8 +++++ 6 files changed, 61 insertions(+), 18 deletions(-) create mode 100644 app/src/main/java/org/mercury_im/messenger/android/ui/contacts/PresenceModeToColorMapper.java diff --git a/app/src/main/java/org/mercury_im/messenger/android/ui/contacts/PresenceModeToColorMapper.java b/app/src/main/java/org/mercury_im/messenger/android/ui/contacts/PresenceModeToColorMapper.java new file mode 100644 index 0000000..bb11bb8 --- /dev/null +++ b/app/src/main/java/org/mercury_im/messenger/android/ui/contacts/PresenceModeToColorMapper.java @@ -0,0 +1,28 @@ +package org.mercury_im.messenger.android.ui.contacts; + +import androidx.annotation.ColorInt; + +import org.jivesoftware.smack.packet.Presence; +import org.mercury_im.messenger.android.util.ColorUtil; + +public class PresenceModeToColorMapper { + + @ColorInt + public static int map(Presence.Mode mode) { + int color = 0; + switch (mode) { + case chat: + case available: + color = ColorUtil.rgb(0, 255, 0); + break; + case away: + case xa: + color = ColorUtil.rgb(255, 128, 0); + break; + case dnd: + color = ColorUtil.rgb(255, 0, 0); + break; + } + return color; + } +} diff --git a/app/src/main/java/org/mercury_im/messenger/android/ui/contacts/detail/AndroidContactDetailViewModel.java b/app/src/main/java/org/mercury_im/messenger/android/ui/contacts/detail/AndroidContactDetailViewModel.java index dc9beb4..8ce109c 100644 --- a/app/src/main/java/org/mercury_im/messenger/android/ui/contacts/detail/AndroidContactDetailViewModel.java +++ b/app/src/main/java/org/mercury_im/messenger/android/ui/contacts/detail/AndroidContactDetailViewModel.java @@ -9,6 +9,7 @@ import androidx.lifecycle.ViewModel; import org.jivesoftware.smack.SmackException; import org.jivesoftware.smack.XMPPException; import org.jivesoftware.smack.packet.Presence; +import org.jxmpp.jid.EntityBareJid; import org.mercury_im.messenger.android.MercuryImApplication; import org.mercury_im.messenger.android.ui.avatar.AvatarDrawable; import org.mercury_im.messenger.android.ui.base.MercuryAndroidViewModel; @@ -129,4 +130,8 @@ public class AndroidContactDetailViewModel extends ViewModel implements MercuryA public ContactDetailViewModel getCommonViewModel() { return commonViewModel; } + + public void markIkeyFingerprintTrusted(OpenPgpV4Fingerprint fingerprint, EntityBareJid owner, boolean isChecked) { + commonViewModel.markIkeyFingerprintTrusted(fingerprint, owner, isChecked); + } } diff --git a/app/src/main/java/org/mercury_im/messenger/android/ui/contacts/detail/ContactDetailFragment.java b/app/src/main/java/org/mercury_im/messenger/android/ui/contacts/detail/ContactDetailFragment.java index 0e5570a..2a28316 100644 --- a/app/src/main/java/org/mercury_im/messenger/android/ui/contacts/detail/ContactDetailFragment.java +++ b/app/src/main/java/org/mercury_im/messenger/android/ui/contacts/detail/ContactDetailFragment.java @@ -9,9 +9,12 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; +import android.widget.CompoundButton; import android.widget.EditText; import android.widget.ImageView; +import android.widget.Switch; import android.widget.TextView; +import android.widget.ToggleButton; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -25,6 +28,7 @@ import com.google.android.material.chip.Chip; import com.google.android.material.chip.ChipGroup; import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton; +import org.mercury_im.messenger.android.ui.contacts.PresenceModeToColorMapper; import org.mercury_im.messenger.android.ui.openpgp.OpenPgpV4FingerprintFormatter; import org.mercury_im.messenger.android.ui.openpgp.ToggleableFingerprintsAdapter; import org.mercury_im.messenger.core.Messenger; @@ -90,12 +94,14 @@ public class ContactDetailFragment extends Fragment { private ToggleableFingerprintsAdapter fingerprintsAdapter; private AndroidContactDetailViewModel viewModel; + private Switch ikeyTrustToggle; @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_contact_details, container, false); ButterKnife.bind(this, view); + ikeyTrustToggle = ikeyLayout.findViewById(R.id.fingerprint_toggle); if (fab != null) { fab.setOnClickListener(v -> { @@ -142,20 +148,7 @@ public class ContactDetailFragment extends Fragment { private void observeViewModel() { viewModel.getContactAvatar().observe(this, drawable -> contactAvatar.setImageDrawable(drawable)); viewModel.getContactPresenceMode().observe(this, mode -> { - int color = 0; - switch (mode) { - case chat: - case available: - color = ColorUtil.rgb(0, 255, 0); - break; - case away: - case xa: - color = ColorUtil.rgb(255, 128, 0); - break; - case dnd: - color = ColorUtil.rgb(255, 0, 0); - break; - } + int color = PresenceModeToColorMapper.map(mode); contactStatusBadge.setColorFilter(color); }); viewModel.getContactName().observe(this, name -> contactName.setText(name)); @@ -178,8 +171,16 @@ public class ContactDetailFragment extends Fragment { private void setIkeyFingerprint(Optional fingerprintViewItemOptional) { if (fingerprintViewItemOptional.isPresent()) { + FingerprintViewItem item = fingerprintViewItemOptional.getItem(); ikeyLayout.setVisibility(View.VISIBLE); - ikeyFingerprint.setText(OpenPgpV4FingerprintFormatter.formatOpenPgpV4Fingerprint(fingerprintViewItemOptional.getItem().getFingerprint())); + ikeyFingerprint.setText(OpenPgpV4FingerprintFormatter.formatOpenPgpV4Fingerprint(item.getFingerprint())); + ikeyTrustToggle.setChecked(item.isTrusted()); + ikeyTrustToggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + viewModel.markIkeyFingerprintTrusted(item.getFingerprint(), item.getOwner(), isChecked); + } + }); } else { ikeyLayout.setVisibility(View.GONE); } diff --git a/app/src/main/res/layout/view_openpgp_4_fingerprint_info_toggleable.xml b/app/src/main/res/layout/view_openpgp_4_fingerprint_info_toggleable.xml index 4fc9b15..2da1eab 100644 --- a/app/src/main/res/layout/view_openpgp_4_fingerprint_info_toggleable.xml +++ b/app/src/main/res/layout/view_openpgp_4_fingerprint_info_toggleable.xml @@ -30,11 +30,11 @@ android:id="@+id/fingerprint_timestamp" android:layout_width="wrap_content" android:layout_height="wrap_content" - tools:text="2018-03-01T15:26:12Z" - app:layout_constraintStart_toStartOf="@id/fingerprint" + app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="@id/fingerprint" + app:layout_constraintStart_toStartOf="@id/fingerprint" app:layout_constraintTop_toBottomOf="@id/fingerprint" - app:layout_constraintBottom_toBottomOf="parent" /> + tools:text="2018-03-01T15:26:12Z" />