From f38b7a30a0ac09a3b3ed24e7f0272df4ae9ee7b0 Mon Sep 17 00:00:00 2001 From: Niels Andriesse <andriesseniels@gmail.com> Date: Wed, 5 Feb 2020 11:29:45 +1100 Subject: [PATCH] Implement open group suggestion sheet --- .../default_bottom_sheet_background.xml | 11 ++++ .../default_bottom_sheet_background_inset.xml | 8 +++ res/drawable/ic_chat_bubbles.xml | 37 +++++++++++ ...ent_open_group_suggestion_bottom_sheet.xml | 63 +++++++++++++++++++ res/values/styles.xml | 8 +++ .../securesms/DeviceListFragment.java | 2 +- .../loki/redesign/activities/HomeActivity.kt | 29 +++++++++ .../activities/LinkedDevicesActivity.kt | 6 +- .../DeviceEditingOptionsBottomSheet.kt | 2 +- .../dialogs/OpenGroupSuggestionBottomSheet.kt | 29 +++++++++ .../securesms/util/TextSecurePreferences.java | 8 +++ 11 files changed, 196 insertions(+), 7 deletions(-) create mode 100644 res/drawable/default_bottom_sheet_background.xml create mode 100644 res/drawable/default_bottom_sheet_background_inset.xml create mode 100644 res/drawable/ic_chat_bubbles.xml create mode 100644 res/layout/fragment_open_group_suggestion_bottom_sheet.xml rename src/org/thoughtcrime/securesms/loki/redesign/{views => dialogs}/DeviceEditingOptionsBottomSheet.kt (94%) create mode 100644 src/org/thoughtcrime/securesms/loki/redesign/dialogs/OpenGroupSuggestionBottomSheet.kt diff --git a/res/drawable/default_bottom_sheet_background.xml b/res/drawable/default_bottom_sheet_background.xml new file mode 100644 index 0000000000..127fdb9645 --- /dev/null +++ b/res/drawable/default_bottom_sheet_background.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8"?> +<shape + xmlns:android="http://schemas.android.com/apk/res/android" + android:shape="rectangle"> + + <solid android:color="@color/dialog_background" /> + + <corners android:topLeftRadius="24dp" android:topRightRadius="24dp" /> + + <stroke android:width="@dimen/border_thickness" android:color="@color/dialog_border" /> +</shape> \ No newline at end of file diff --git a/res/drawable/default_bottom_sheet_background_inset.xml b/res/drawable/default_bottom_sheet_background_inset.xml new file mode 100644 index 0000000000..6806f7b96c --- /dev/null +++ b/res/drawable/default_bottom_sheet_background_inset.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8"?> +<inset + xmlns:android="http://schemas.android.com/apk/res/android" + android:drawable="@drawable/default_bottom_sheet_background" + android:insetLeft="-2dp" + android:insetRight="-2dp" + android:insetBottom="-2dp"> +</inset> \ No newline at end of file diff --git a/res/drawable/ic_chat_bubbles.xml b/res/drawable/ic_chat_bubbles.xml new file mode 100644 index 0000000000..6af5f35f47 --- /dev/null +++ b/res/drawable/ic_chat_bubbles.xml @@ -0,0 +1,37 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="129dp" + android:height="89dp" + android:viewportWidth="129" + android:viewportHeight="89"> + <path + android:pathData="M84.282,21C108.03,21 127.282,35.775 127.282,54C127.282,60.581 124.772,66.712 120.446,71.86C120.387,74.448 122.309,78.125 126.213,82.89C122.04,82.593 118.037,82.029 114.202,81.199C112.522,80.835 111.249,80.511 110.382,80.226C103.147,84.476 94.098,87 84.282,87C60.534,87 41.282,72.225 41.282,54C41.282,35.775 60.534,21 84.282,21Z" + android:strokeLineJoin="round" + android:strokeWidth="3" + android:fillColor="#00000000" + android:strokeColor="#02D370" + android:fillType="evenOdd"/> + <path + android:pathData="M33.282,1C50.403,1 64.282,11.969 64.282,25.5C64.282,39.031 50.403,50 33.282,50C26.123,50 19.531,48.082 14.283,44.861C13.67,45.098 12.651,45.376 11.226,45.693C8.462,46.309 5.576,46.728 2.568,46.949C5.767,42.926 7.12,39.948 6.627,38.015C3.867,34.353 2.282,30.073 2.282,25.5C2.282,11.969 16.161,1 33.282,1Z" + android:strokeWidth="2" + android:fillColor="#FFFFFF" + android:fillType="evenOdd" + android:strokeColor="#161616"/> + <path + android:pathData="M64,54m-4,0a4,4 0,1 1,8 0a4,4 0,1 1,-8 0" + android:strokeWidth="1" + android:fillColor="#02D370" + android:fillType="evenOdd" + android:strokeColor="#00000000"/> + <path + android:pathData="M84,54m-4,0a4,4 0,1 1,8 0a4,4 0,1 1,-8 0" + android:strokeWidth="1" + android:fillColor="#02D370" + android:fillType="evenOdd" + android:strokeColor="#00000000"/> + <path + android:pathData="M100,54a3.5,4 0,1 0,7 0a3.5,4 0,1 0,-7 0z" + android:strokeWidth="1" + android:fillColor="#02D370" + android:fillType="evenOdd" + android:strokeColor="#00000000"/> +</vector> diff --git a/res/layout/fragment_open_group_suggestion_bottom_sheet.xml b/res/layout/fragment_open_group_suggestion_bottom_sheet.xml new file mode 100644 index 0000000000..b26d9f86dc --- /dev/null +++ b/res/layout/fragment_open_group_suggestion_bottom_sheet.xml @@ -0,0 +1,63 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical" + android:gravity="center_horizontal" + android:padding="@dimen/large_spacing" + app:behavior_hideable="true" + app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior" + android:background="@drawable/default_bottom_sheet_background_inset"> + + <ImageView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:src="@drawable/ic_chat_bubbles" /> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="@dimen/large_spacing" + android:text="No messages yet" + android:textColor="@color/text" + android:textStyle="bold" + android:textSize="@dimen/large_font_size" /> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="@dimen/large_spacing" + android:text="Would you like to join the Session Public Chat?" + android:textColor="@color/text" + android:textSize="@dimen/medium_font_size" + android:textAlignment="center" /> + + <Button + style="@style/MediumProminentOutlineButton" + android:id="@+id/joinButton" + android:layout_width="240dp" + android:layout_height="@dimen/medium_button_height" + android:layout_marginTop="@dimen/large_spacing" + android:text="Join Public Chat" /> + + <Button + style="@style/MediumUnimportantOutlineButton" + android:id="@+id/dismissButton" + android:layout_width="240dp" + android:layout_height="@dimen/medium_button_height" + android:layout_marginTop="@dimen/medium_spacing" + android:text="No, thank you" /> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="@dimen/medium_spacing" + android:textSize="@dimen/very_small_font_size" + android:textColor="@color/text" + android:alpha="0.6" + android:textAlignment="center" + android:text="Open groups can be joined by anyone and do not provide full metadata protection" /> + +</LinearLayout> diff --git a/res/values/styles.xml b/res/values/styles.xml index fe6bab3fc9..7ceeb76dff 100644 --- a/res/values/styles.xml +++ b/res/values/styles.xml @@ -49,6 +49,14 @@ <item name="buttonBarPositiveButtonStyle">@style/Session.AlertDialog.PositiveButtonStyle</item> </style> + <style name="SessionBottomSheetDialogTheme" parent="Theme.Design.Light.BottomSheetDialog"> + <item name="bottomSheetStyle">@style/SessionBottomSheetStyle</item> + </style> + + <style name="SessionBottomSheetStyle" parent="Widget.Design.BottomSheet.Modal"> + <item name="android:background">@android:color/transparent</item> + </style> + <style name="Session.AlertDialog.NegativeButtonStyle" parent="Widget.AppCompat.Button.ButtonBar.AlertDialog"> <item name="android:textColor">@color/accent</item> </style> diff --git a/src/org/thoughtcrime/securesms/DeviceListFragment.java b/src/org/thoughtcrime/securesms/DeviceListFragment.java index 61328af624..91381c4835 100644 --- a/src/org/thoughtcrime/securesms/DeviceListFragment.java +++ b/src/org/thoughtcrime/securesms/DeviceListFragment.java @@ -25,7 +25,7 @@ import org.thoughtcrime.securesms.database.DatabaseFactory; import org.thoughtcrime.securesms.database.loaders.DeviceListLoader; import org.thoughtcrime.securesms.dependencies.InjectableType; import org.thoughtcrime.securesms.devicelist.Device; -import org.thoughtcrime.securesms.loki.redesign.views.DeviceEditingOptionsBottomSheet; +import org.thoughtcrime.securesms.loki.redesign.dialogs.DeviceEditingOptionsBottomSheet; import org.thoughtcrime.securesms.loki.redesign.utilities.MnemonicUtilities; import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.thoughtcrime.securesms.util.ViewUtil; diff --git a/src/org/thoughtcrime/securesms/loki/redesign/activities/HomeActivity.kt b/src/org/thoughtcrime/securesms/loki/redesign/activities/HomeActivity.kt index 514363f404..78cb11d8a2 100644 --- a/src/org/thoughtcrime/securesms/loki/redesign/activities/HomeActivity.kt +++ b/src/org/thoughtcrime/securesms/loki/redesign/activities/HomeActivity.kt @@ -22,13 +22,16 @@ import android.text.style.ForegroundColorSpan import android.view.View import kotlinx.android.synthetic.main.activity_home.* import network.loki.messenger.R +import nl.komponents.kovenant.ui.successUi import org.thoughtcrime.securesms.ApplicationContext import org.thoughtcrime.securesms.PassphraseRequiredActionBarActivity import org.thoughtcrime.securesms.conversation.ConversationActivity +import org.thoughtcrime.securesms.crypto.ProfileKeyUtil import org.thoughtcrime.securesms.database.DatabaseFactory import org.thoughtcrime.securesms.database.ThreadDatabase import org.thoughtcrime.securesms.database.model.ThreadRecord import org.thoughtcrime.securesms.loki.getColorWithID +import org.thoughtcrime.securesms.loki.redesign.dialogs.OpenGroupSuggestionBottomSheet import org.thoughtcrime.securesms.loki.redesign.utilities.push import org.thoughtcrime.securesms.loki.redesign.utilities.show import org.thoughtcrime.securesms.loki.redesign.views.ConversationView @@ -147,6 +150,32 @@ class HomeActivity : PassphraseRequiredActionBarActivity, ConversationClickListe if (hasViewedSeed || !isMasterDevice) { seedReminderView.visibility = View.GONE } + if (!TextSecurePreferences.getHasSeenOpenGroupSuggestionSheet(this)) { + val bottomSheet = OpenGroupSuggestionBottomSheet() + bottomSheet.onJoinTapped = { + TextSecurePreferences.setHasSeenOpenGroupSuggestionSheet(this) + bottomSheet.dismiss() + // TODO: Duplication of the code in JoinPublicChatActivity + val application = ApplicationContext.getInstance(this) + val channel: Long = 1 + val displayName = TextSecurePreferences.getProfileName(this) + val lokiPublicChatAPI = application.lokiPublicChatAPI!! + val url = "https://chat.getsession.org" + application.lokiPublicChatManager.addChat(url, channel).successUi { + lokiPublicChatAPI.getMessages(channel, url) + lokiPublicChatAPI.setDisplayName(displayName, url) + lokiPublicChatAPI.join(channel, url) + val profileKey: ByteArray = ProfileKeyUtil.getProfileKey(this) + val profileUrl: String? = TextSecurePreferences.getProfileAvatarUrl(this) + lokiPublicChatAPI.setProfilePicture(url, profileKey, profileUrl) + } + } + bottomSheet.onDismissTapped = { + TextSecurePreferences.setHasSeenOpenGroupSuggestionSheet(this) + bottomSheet.dismiss() + } + bottomSheet.show(supportFragmentManager, bottomSheet.tag) + } } // endregion diff --git a/src/org/thoughtcrime/securesms/loki/redesign/activities/LinkedDevicesActivity.kt b/src/org/thoughtcrime/securesms/loki/redesign/activities/LinkedDevicesActivity.kt index 669f575ac5..ba659cfa21 100644 --- a/src/org/thoughtcrime/securesms/loki/redesign/activities/LinkedDevicesActivity.kt +++ b/src/org/thoughtcrime/securesms/loki/redesign/activities/LinkedDevicesActivity.kt @@ -15,11 +15,7 @@ import network.loki.messenger.R import org.thoughtcrime.securesms.PassphraseRequiredActionBarActivity import org.thoughtcrime.securesms.database.DatabaseFactory import org.thoughtcrime.securesms.devicelist.Device -import org.thoughtcrime.securesms.loki.redesign.views.DeviceEditingOptionsBottomSheet -import org.thoughtcrime.securesms.loki.redesign.dialogs.EditDeviceNameDialog -import org.thoughtcrime.securesms.loki.redesign.dialogs.EditDeviceNameDialogDelegate -import org.thoughtcrime.securesms.loki.redesign.dialogs.LinkDeviceMasterModeDialog -import org.thoughtcrime.securesms.loki.redesign.dialogs.LinkDeviceMasterModeDialogDelegate +import org.thoughtcrime.securesms.loki.redesign.dialogs.* import org.thoughtcrime.securesms.loki.signAndSendPairingAuthorisationMessage import org.thoughtcrime.securesms.sms.MessageSender import org.thoughtcrime.securesms.util.TextSecurePreferences diff --git a/src/org/thoughtcrime/securesms/loki/redesign/views/DeviceEditingOptionsBottomSheet.kt b/src/org/thoughtcrime/securesms/loki/redesign/dialogs/DeviceEditingOptionsBottomSheet.kt similarity index 94% rename from src/org/thoughtcrime/securesms/loki/redesign/views/DeviceEditingOptionsBottomSheet.kt rename to src/org/thoughtcrime/securesms/loki/redesign/dialogs/DeviceEditingOptionsBottomSheet.kt index 78904471e4..d8bb4967f4 100644 --- a/src/org/thoughtcrime/securesms/loki/redesign/views/DeviceEditingOptionsBottomSheet.kt +++ b/src/org/thoughtcrime/securesms/loki/redesign/dialogs/DeviceEditingOptionsBottomSheet.kt @@ -1,4 +1,4 @@ -package org.thoughtcrime.securesms.loki.redesign.views +package org.thoughtcrime.securesms.loki.redesign.dialogs import android.os.Bundle import android.support.design.widget.BottomSheetDialogFragment diff --git a/src/org/thoughtcrime/securesms/loki/redesign/dialogs/OpenGroupSuggestionBottomSheet.kt b/src/org/thoughtcrime/securesms/loki/redesign/dialogs/OpenGroupSuggestionBottomSheet.kt new file mode 100644 index 0000000000..274b36af74 --- /dev/null +++ b/src/org/thoughtcrime/securesms/loki/redesign/dialogs/OpenGroupSuggestionBottomSheet.kt @@ -0,0 +1,29 @@ +package org.thoughtcrime.securesms.loki.redesign.dialogs + +import android.os.Bundle +import android.support.design.widget.BottomSheetDialogFragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import kotlinx.android.synthetic.main.fragment_open_group_suggestion_bottom_sheet.* +import network.loki.messenger.R + +public class OpenGroupSuggestionBottomSheet : BottomSheetDialogFragment() { + var onJoinTapped: (() -> Unit)? = null + var onDismissTapped: (() -> Unit)? = null + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setStyle(STYLE_NORMAL, R.style.SessionBottomSheetDialogTheme) + } + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + return inflater.inflate(R.layout.fragment_open_group_suggestion_bottom_sheet, container, false) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + joinButton.setOnClickListener { onJoinTapped?.invoke() } + dismissButton.setOnClickListener { onDismissTapped?.invoke() } + } +} \ No newline at end of file diff --git a/src/org/thoughtcrime/securesms/util/TextSecurePreferences.java b/src/org/thoughtcrime/securesms/util/TextSecurePreferences.java index d7fece32d1..052997e3ac 100644 --- a/src/org/thoughtcrime/securesms/util/TextSecurePreferences.java +++ b/src/org/thoughtcrime/securesms/util/TextSecurePreferences.java @@ -1250,6 +1250,14 @@ public class TextSecurePreferences { public static long getRestorationTime(Context context) { return getLongPreference(context, "restoration_time", 0); } + + public static boolean getHasSeenOpenGroupSuggestionSheet(Context context) { + return getBooleanPreference(context, "has_seen_open_group_suggestion_sheet", false); + } + + public static void setHasSeenOpenGroupSuggestionSheet(Context context) { + setBooleanPreference(context, "has_seen_open_group_suggestion_sheet", true); + } // endregion public static void clearAll(Context context) {