Start implementing conversation screen redesign

This commit is contained in:
Niels Andriesse 2020-01-10 11:35:16 +11:00
parent 7424684c75
commit 4f9b5f06f0
14 changed files with 280 additions and 215 deletions

12
res/drawable/ic_gear.xml Normal file
View file

@ -0,0 +1,12 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="25dp"
android:height="25dp"
android:viewportWidth="25"
android:viewportHeight="25">
<path
android:pathData="M12.5,7.48c-2.77,0 -5.02,2.25 -5.02,5.02c0,2.77 2.25,5.02 5.02,5.02s5.02,-2.25 5.02,-5.02C17.52,9.73 15.27,7.48 12.5,7.48zM12.5,15.82c-1.83,0 -3.32,-1.49 -3.32,-3.32c0,-1.83 1.49,-3.32 3.32,-3.32s3.32,1.49 3.32,3.32C15.82,14.33 14.33,15.82 12.5,15.82z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M23.57,9.88l-2.25,-0.24c-0.15,-0.47 -0.34,-0.92 -0.56,-1.36l1.42,-1.76c0.41,-0.51 0.37,-1.24 -0.09,-1.7l-1.91,-1.91c-0.46,-0.46 -1.2,-0.5 -1.7,-0.09l-1.76,1.42c-0.44,-0.22 -0.89,-0.41 -1.36,-0.56l-0.24,-2.25c-0.07,-0.65 -0.62,-1.14 -1.27,-1.14h-2.7c-0.65,0 -1.2,0.49 -1.27,1.14L9.64,3.67C9.17,3.83 8.72,4.01 8.28,4.24L6.52,2.82c-0.51,-0.41 -1.24,-0.37 -1.7,0.09L2.91,4.82c-0.46,0.46 -0.5,1.19 -0.09,1.7l1.42,1.76C4.01,8.72 3.83,9.17 3.67,9.64L1.42,9.88c-0.65,0.07 -1.14,0.62 -1.14,1.27v2.7c0,0.65 0.49,1.2 1.14,1.27l2.25,0.24c0.15,0.46 0.34,0.92 0.56,1.36l-1.42,1.76c-0.41,0.51 -0.37,1.24 0.09,1.7l1.91,1.91c0.46,0.46 1.19,0.5 1.7,0.09l1.76,-1.42c0.44,0.22 0.89,0.41 1.36,0.56l0.24,2.25c0.07,0.65 0.61,1.14 1.27,1.14h2.7c0.65,0 1.2,-0.49 1.27,-1.14l0.24,-2.25c0.46,-0.15 0.92,-0.34 1.36,-0.56l1.76,1.42c0.51,0.41 1.24,0.37 1.7,-0.09l1.91,-1.91c0.46,-0.46 0.5,-1.19 0.09,-1.7l-1.42,-1.76c0.22,-0.44 0.41,-0.89 0.56,-1.36l2.25,-0.24c0.65,-0.07 1.14,-0.62 1.14,-1.27v-2.7C24.71,10.5 24.22,9.95 23.57,9.88zM23.01,13.47l-2.15,0.23c-0.51,0.06 -0.94,0.41 -1.08,0.91c-0.16,0.53 -0.37,1.05 -0.64,1.53c-0.25,0.46 -0.21,1.01 0.12,1.41l1.36,1.69l-1.37,1.37l-1.69,-1.36c-0.4,-0.32 -0.96,-0.37 -1.41,-0.12c-0.49,0.27 -1,0.48 -1.53,0.64c-0.5,0.14 -0.86,0.57 -0.91,1.08l-0.23,2.15h-1.94l-0.23,-2.15c-0.06,-0.51 -0.41,-0.94 -0.91,-1.08c-0.53,-0.15 -1.05,-0.37 -1.53,-0.64c-0.46,-0.25 -1.01,-0.21 -1.41,0.12l-1.69,1.36l-1.37,-1.37l1.36,-1.69c0.33,-0.4 0.37,-0.96 0.12,-1.42c-0.27,-0.49 -0.48,-1 -0.64,-1.53c-0.14,-0.5 -0.57,-0.86 -1.08,-0.91l-2.15,-0.23v-1.94l2.15,-0.23c0.51,-0.05 0.94,-0.41 1.08,-0.91c0.15,-0.53 0.37,-1.05 0.64,-1.54c0.25,-0.46 0.2,-1.01 -0.12,-1.41L4.38,5.75l1.37,-1.37l1.69,1.36c0.4,0.32 0.96,0.37 1.41,0.12c0.49,-0.27 1,-0.48 1.53,-0.64c0.5,-0.15 0.86,-0.57 0.91,-1.08l0.23,-2.15h1.94l0.23,2.15c0.06,0.51 0.41,0.94 0.91,1.08c0.53,0.15 1.05,0.37 1.53,0.64c0.45,0.25 1.01,0.21 1.41,-0.12l1.69,-1.36l1.37,1.37l-1.36,1.69c-0.32,0.4 -0.37,0.96 -0.12,1.41c0.27,0.48 0.48,1 0.64,1.53c0.14,0.5 0.57,0.86 1.08,0.92l2.15,0.23V13.47z"
android:fillColor="#FFFFFF"/>
</vector>

View file

@ -1,24 +1,62 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent"
android:background="@drawable/default_session_background">
<android.support.v7.widget.Toolbar <android.support.v7.widget.Toolbar
android:id="@+id/toolbar" android:id="@+id/toolbar"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize" android:layout_height="?attr/actionBarSize"
android:background="?attr/conversation_list_toolbar_background" android:minHeight="?attr/actionBarSize"
android:theme="?attr/actionBarStyle" app:contentInsetLeft="24dp"
app:contentInsetStartWithNavigation="0dp" app:contentInsetRight="20dp"
app:layout_constraintEnd_toEndOf="parent" android:background="@color/action_bar_background"
app:layout_constraintStart_toStartOf="parent" android:theme="@style/Session.DarkActionBar">
app:layout_constraintTop_toTopOf="parent"
app:navigationIcon="?homeAsUpIndicator"
tools:background="#ff007f00">
<include layout="@layout/conversation_title_view" /> <LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:orientation="horizontal">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/titleTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Conversation"
android:textColor="@color/text"
android:textSize="@dimen/large_font_size"
android:fontFamily="sans-serif-medium" />
<TextView
android:id="@+id/subtitleTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="26 members"
android:textColor="@color/text"
android:textSize="@dimen/small_font_size" />
</LinearLayout>
<View
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" />
<ImageView
android:id="@+id/settingsButton"
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@drawable/ic_gear" />
</LinearLayout>
</android.support.v7.widget.Toolbar> </android.support.v7.widget.Toolbar>

View file

@ -216,7 +216,7 @@
</LinearLayout> </LinearLayout>
<org.thoughtcrime.securesms.loki.FriendRequestView <org.thoughtcrime.securesms.loki.redesign.views.FriendRequestView
android:id="@+id/friend_request_view" android:id="@+id/friend_request_view"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"

View file

@ -164,7 +164,7 @@
</LinearLayout> </LinearLayout>
<org.thoughtcrime.securesms.loki.FriendRequestView <org.thoughtcrime.securesms.loki.redesign.views.FriendRequestView
android:id="@+id/friend_request_view" android:id="@+id/friend_request_view"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"

View file

@ -2,11 +2,11 @@
<resources> <resources>
<style name="TextSecure.DarkTheme" parent="@style/TextSecure.BaseDarkTheme"> <style name="TextSecure.DarkTheme" parent="@style/TextSecure.BaseDarkTheme">
<item name="android:navigationBarColor">@color/core_grey_90</item> <item name="android:navigationBarColor">@color/navigation_bar_background</item>
</style> </style>
<style name="TextSecure.DarkNoActionBar" parent="@style/TextSecure.BaseDarkNoActionBar"> <style name="TextSecure.DarkNoActionBar" parent="@style/TextSecure.BaseDarkNoActionBar">
<item name="android:navigationBarColor">@color/core_grey_90</item> <item name="android:navigationBarColor">@color/navigation_bar_background</item>
<item name="android:colorControlActivated">@color/signal_primary_dark</item> <item name="android:colorControlActivated">@color/signal_primary_dark</item>
</style> </style>

View file

@ -1611,14 +1611,14 @@
<string name="fragment_add_public_chat_connection_failed_message">Couldn\'t Connect</string> <string name="fragment_add_public_chat_connection_failed_message">Couldn\'t Connect</string>
<!-- Friend request view --> <!-- Friend request view -->
<string name="view_friend_request_accept_button_title">Accept</string> <string name="view_friend_request_accept_button_title">Accept</string>
<string name="view_friend_request_reject_button_title">Reject</string> <string name="view_friend_request_reject_button_title">Decline</string>
<string name="view_friend_request_incoming_pending_message">%1$s sent you a friend request</string> <string name="view_friend_request_incoming_pending_message">%1$s sent you a message request</string>
<string name="view_friend_request_incoming_accepted_message">You\'ve accepted %1$s\'s friend request</string> <string name="view_friend_request_incoming_accepted_message">You\'ve accepted %1$s\'s message request</string>
<string name="view_friend_request_incoming_declined_message">You\'ve declined %1$s\'s friend request</string> <string name="view_friend_request_incoming_declined_message">You\'ve declined %1$s\'s message request</string>
<string name="view_friend_request_incoming_expired_message">%1$s\'s friend request has expired</string> <string name="view_friend_request_incoming_expired_message">%1$s\'s message request has expired</string>
<string name="view_friend_request_outgoing_pending_message">You\'ve sent %1$s a friend request</string> <string name="view_friend_request_outgoing_pending_message">You\'ve sent %1$s a message request</string>
<string name="view_friend_request_outgoing_accepted_message">%1$s accepted your friend request</string> <string name="view_friend_request_outgoing_accepted_message">%1$s accepted your message request</string>
<string name="view_friend_request_outgoing_expired_message">Your friend request to %1$s has expired</string> <string name="view_friend_request_outgoing_expired_message">Your message request to %1$s has expired</string>
<!-- Conversation activity --> <!-- Conversation activity -->
<string name="activity_conversation_pending_friend_request_hint">Pending Friend Request…</string> <string name="activity_conversation_pending_friend_request_hint">Pending Friend Request…</string>
<string name="activity_conversation_default_hint">New Message</string> <string name="activity_conversation_default_hint">New Message</string>

View file

@ -32,9 +32,10 @@
<item name="windowActionModeOverlay">true</item> <item name="windowActionModeOverlay">true</item>
<item name="theme_type">light</item> <item name="theme_type">light</item>
<item name="colorPrimary">@color/textsecure_primary</item> <item name="colorPrimary">@color/action_bar_background</item>
<item name="colorPrimaryDark">@color/textsecure_primary_dark</item> <item name="colorPrimaryDark">@color/action_bar_background</item>
<item name="colorAccent">@color/textsecure_primary_dark</item> <item name="colorAccent">@color/textsecure_primary_dark</item>
<item name="android:navigationBarColor">@color/navigation_bar_background</item>
<item name="recipient_preference_blocked">#d00000</item> <item name="recipient_preference_blocked">#d00000</item>
<item name="contact_selection_label_text">#66000000</item> <item name="contact_selection_label_text">#66000000</item>
@ -60,8 +61,10 @@
<item name="theme_type">dark</item> <item name="theme_type">dark</item>
<item name="actionBarPopupTheme">@style/ThemeOverlay.AppCompat.Dark</item> <item name="actionBarPopupTheme">@style/ThemeOverlay.AppCompat.Dark</item>
<item name="colorPrimary">@color/gray95</item> <item name="colorPrimary">@color/action_bar_background</item>
<item name="colorPrimaryDark">@color/action_bar_background</item>
<item name="colorAccent">@color/signal_primary_dark</item> <item name="colorAccent">@color/signal_primary_dark</item>
<item name="android:navigationBarColor">@color/navigation_bar_background</item>
<item name="recipient_preference_blocked">#d00000</item> <item name="recipient_preference_blocked">#d00000</item>
<item name="contact_selection_label_text">#66eeeeee</item> <item name="contact_selection_label_text">#66eeeeee</item>
@ -145,12 +148,12 @@
<style name="TextSecure.LightTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar"> <style name="TextSecure.LightTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar">
<item name="theme_type">light</item> <item name="theme_type">light</item>
<item name="actionBarStyle">@style/TextSecure.LightActionBar</item> <item name="actionBarStyle">@style/Session.DarkActionBar</item>
<item name="actionBarTabBarStyle">@style/TextSecure.LightActionBar.TabBar</item> <item name="actionBarTabBarStyle">@style/TextSecure.LightActionBar.TabBar</item>
<item name="actionModeBackground">@color/gray50</item> <item name="actionModeBackground">@color/gray50</item>
<item name="actionModeCloseDrawable">@drawable/ic_close_white_24dp</item> <item name="actionModeCloseDrawable">@drawable/ic_close_white_24dp</item>
<item name="colorPrimary">@color/textsecure_primary</item> <item name="colorPrimary">@color/action_bar_background</item>
<item name="colorPrimaryDark">@color/textsecure_primary_dark</item> <item name="colorPrimaryDark">@color/action_bar_background</item>
<item name="colorAccent">@color/textsecure_primary_dark</item> <item name="colorAccent">@color/textsecure_primary_dark</item>
<item name="colorControlActivated">@color/signal_primary</item> <item name="colorControlActivated">@color/signal_primary</item>
<item name="colorControlHighlight">@color/signal_primary</item> <item name="colorControlHighlight">@color/signal_primary</item>
@ -158,6 +161,7 @@
<item name="alertDialogTheme">@style/AppCompatAlertDialogStyleLight</item> <item name="alertDialogTheme">@style/AppCompatAlertDialogStyleLight</item>
<item name="android:alertDialogTheme">@style/AppCompatDialogStyleLight</item> <item name="android:alertDialogTheme">@style/AppCompatDialogStyleLight</item>
<item name="bottomSheetDialogTheme">@style/Theme.MaterialComponents.Light.BottomSheetDialog</item> <item name="bottomSheetDialogTheme">@style/Theme.MaterialComponents.Light.BottomSheetDialog</item>
<item name="android:navigationBarColor">@color/navigation_bar_background</item>
<!--<item name="android:windowContentOverlay">@drawable/compat_actionbar_shadow_background</item>--> <!--<item name="android:windowContentOverlay">@drawable/compat_actionbar_shadow_background</item>-->
<item name="attachment_type_selector_background">@color/white</item> <item name="attachment_type_selector_background">@color/white</item>
@ -320,7 +324,7 @@
<item name="shared_contact_details_header_background">@color/grey_100</item> <item name="shared_contact_details_header_background">@color/grey_100</item>
<item name="shared_contact_details_titlebar">@color/grey_400</item> <item name="shared_contact_details_titlebar">@color/grey_400</item>
<item name="shared_contact_item_button_color">@color/core_grey_02</item> <item name="shared_contact_item_button_color">@color/core_grey_02</item>
<item name="android:statusBarColor">@color/black</item> <item name="android:statusBarColor">@color/action_bar_background</item>
</style> </style>
<style name="TextSecure.DarkTheme" parent="@style/TextSecure.BaseDarkTheme"> <style name="TextSecure.DarkTheme" parent="@style/TextSecure.BaseDarkTheme">
@ -329,7 +333,7 @@
<style name="TextSecure.BaseDarkTheme" parent="@style/Theme.AppCompat"> <style name="TextSecure.BaseDarkTheme" parent="@style/Theme.AppCompat">
<item name="theme_type">dark</item> <item name="theme_type">dark</item>
<item name="actionBarStyle">@style/TextSecure.DarkActionBar</item> <item name="actionBarStyle">@style/Session.DarkActionBar</item>
<item name="actionBarTabBarStyle">@style/TextSecure.DarkActionBar.TabBar</item> <item name="actionBarTabBarStyle">@style/TextSecure.DarkActionBar.TabBar</item>
<item name="actionBarPopupTheme">@style/ThemeOverlay.AppCompat.Dark</item> <item name="actionBarPopupTheme">@style/ThemeOverlay.AppCompat.Dark</item>
<item name="actionModeBackground">@color/gray50</item> <item name="actionModeBackground">@color/gray50</item>
@ -343,6 +347,7 @@
<item name="alertDialogTheme">@style/AppCompatAlertDialogStyleDark</item> <item name="alertDialogTheme">@style/AppCompatAlertDialogStyleDark</item>
<item name="android:alertDialogTheme">@style/AppCompatDialogStyleDark</item> <item name="android:alertDialogTheme">@style/AppCompatDialogStyleDark</item>
<item name="bottomSheetDialogTheme">@style/Theme.MaterialComponents.BottomSheetDialog</item> <item name="bottomSheetDialogTheme">@style/Theme.MaterialComponents.BottomSheetDialog</item>
<item name="android:navigationBarColor">@color/navigation_bar_background</item>
<item name="attachment_type_selector_background">@color/gray95</item> <item name="attachment_type_selector_background">@color/gray95</item>
<item name="attachment_document_icon_small">@drawable/ic_document_small_dark</item> <item name="attachment_document_icon_small">@drawable/ic_document_small_dark</item>

View file

@ -40,25 +40,20 @@ import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.Vibrator; import android.os.Vibrator;
import android.provider.Browser; import android.provider.Browser;
import android.provider.ContactsContract;
import android.provider.Telephony; import android.provider.Telephony;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.v4.content.pm.ShortcutInfoCompat; import android.support.v4.content.pm.ShortcutInfoCompat;
import android.support.v4.content.pm.ShortcutManagerCompat; import android.support.v4.content.pm.ShortcutManagerCompat;
import android.support.v4.graphics.drawable.IconCompat; import android.support.v4.graphics.drawable.IconCompat;
import android.support.v4.view.MenuItemCompat;
import android.support.v7.app.ActionBar; import android.support.v7.app.ActionBar;
import android.support.v7.app.AlertDialog; import android.support.v7.app.AlertDialog;
import android.support.v7.widget.SearchView;
import android.support.v7.widget.Toolbar; import android.support.v7.widget.Toolbar;
import android.text.Editable; import android.text.Editable;
import android.text.TextUtils; import android.text.TextUtils;
import android.text.TextWatcher; import android.text.TextWatcher;
import android.util.Pair; import android.util.Pair;
import android.view.KeyEvent; import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.View.OnClickListener; import android.view.View.OnClickListener;
@ -152,7 +147,6 @@ import org.thoughtcrime.securesms.linkpreview.LinkPreviewRepository;
import org.thoughtcrime.securesms.linkpreview.LinkPreviewUtil; import org.thoughtcrime.securesms.linkpreview.LinkPreviewUtil;
import org.thoughtcrime.securesms.linkpreview.LinkPreviewViewModel; import org.thoughtcrime.securesms.linkpreview.LinkPreviewViewModel;
import org.thoughtcrime.securesms.logging.Log; import org.thoughtcrime.securesms.logging.Log;
import org.thoughtcrime.securesms.loki.FriendRequestViewDelegate;
import org.thoughtcrime.securesms.loki.LokiAPIUtilities; import org.thoughtcrime.securesms.loki.LokiAPIUtilities;
import org.thoughtcrime.securesms.loki.LokiMessageDatabase; import org.thoughtcrime.securesms.loki.LokiMessageDatabase;
import org.thoughtcrime.securesms.loki.LokiThreadDatabase; import org.thoughtcrime.securesms.loki.LokiThreadDatabase;
@ -161,6 +155,7 @@ import org.thoughtcrime.securesms.loki.LokiUserDatabase;
import org.thoughtcrime.securesms.loki.MentionCandidateSelectionView; import org.thoughtcrime.securesms.loki.MentionCandidateSelectionView;
import org.thoughtcrime.securesms.loki.MultiDeviceUtilities; import org.thoughtcrime.securesms.loki.MultiDeviceUtilities;
import org.thoughtcrime.securesms.loki.redesign.activities.HomeActivity; import org.thoughtcrime.securesms.loki.redesign.activities.HomeActivity;
import org.thoughtcrime.securesms.loki.redesign.views.FriendRequestViewDelegate;
import org.thoughtcrime.securesms.mediasend.Media; import org.thoughtcrime.securesms.mediasend.Media;
import org.thoughtcrime.securesms.mediasend.MediaSendActivity; import org.thoughtcrime.securesms.mediasend.MediaSendActivity;
import org.thoughtcrime.securesms.mms.AttachmentManager; import org.thoughtcrime.securesms.mms.AttachmentManager;
@ -210,7 +205,6 @@ import org.thoughtcrime.securesms.util.Dialogs;
import org.thoughtcrime.securesms.util.DirectoryHelper; import org.thoughtcrime.securesms.util.DirectoryHelper;
import org.thoughtcrime.securesms.util.DynamicLanguage; import org.thoughtcrime.securesms.util.DynamicLanguage;
import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme; import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme;
import org.thoughtcrime.securesms.util.ExpirationUtil;
import org.thoughtcrime.securesms.util.GroupUtil; import org.thoughtcrime.securesms.util.GroupUtil;
import org.thoughtcrime.securesms.util.IdentityUtil; import org.thoughtcrime.securesms.util.IdentityUtil;
import org.thoughtcrime.securesms.util.MediaUtil; import org.thoughtcrime.securesms.util.MediaUtil;
@ -303,7 +297,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
private AnimatingToggle buttonToggle; private AnimatingToggle buttonToggle;
private SendButton sendButton; private SendButton sendButton;
private ImageButton attachButton; private ImageButton attachButton;
protected ConversationTitleView titleView; private TextView titleTextView;
private TextView charactersLeft; private TextView charactersLeft;
private ConversationFragment fragment; private ConversationFragment fragment;
private Button unblockButton; private Button unblockButton;
@ -477,7 +471,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
initializeIdentityRecords(); initializeIdentityRecords();
composeText.setTransport(sendButton.getSelectedTransport()); composeText.setTransport(sendButton.getSelectedTransport());
titleView.setTitle(glideRequests, recipient); updateTitleTextView(glideRequests, recipient);
setActionBarColor(recipient.getColor()); setActionBarColor(recipient.getColor());
setBlockedUserState(recipient, isSecureText, isDefaultSms); setBlockedUserState(recipient, isSecureText, isDefaultSms);
setGroupShareProfileReminder(recipient); setGroupShareProfileReminder(recipient);
@ -564,7 +558,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
case GROUP_EDIT: case GROUP_EDIT:
recipient = Recipient.from(this, data.getParcelableExtra(GroupCreateActivity.GROUP_ADDRESS_EXTRA), true); recipient = Recipient.from(this, data.getParcelableExtra(GroupCreateActivity.GROUP_ADDRESS_EXTRA), true);
recipient.addListener(this); recipient.addListener(this);
titleView.setTitle(glideRequests, recipient); updateTitleTextView(glideRequests, recipient);
NotificationChannels.updateContactChannelName(this, recipient); NotificationChannels.updateContactChannelName(this, recipient);
setBlockedUserState(recipient, isSecureText, isDefaultSms); setBlockedUserState(recipient, isSecureText, isDefaultSms);
supportInvalidateOptionsMenu(); supportInvalidateOptionsMenu();
@ -662,130 +656,130 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
} }
} }
@Override // @Override
public boolean onPrepareOptionsMenu(Menu menu) { // public boolean onPrepareOptionsMenu(Menu menu) {
MenuInflater inflater = this.getMenuInflater(); // MenuInflater inflater = this.getMenuInflater();
menu.clear(); // menu.clear();
//
boolean isLokiPublicChat = isGroupConversation(); // TODO: Figure out a better way of determining this // boolean isLokiPublicChat = isGroupConversation(); // TODO: Figure out a better way of determining this
//
if (isSecureText && !isLokiPublicChat) { // TODO: // if (isSecureText && !isLokiPublicChat) { // TODO:
if (recipient.getExpireMessages() > 0) { // if (recipient.getExpireMessages() > 0) {
inflater.inflate(R.menu.conversation_expiring_on, menu); // inflater.inflate(R.menu.conversation_expiring_on, menu);
//
final MenuItem item = menu.findItem(R.id.menu_expiring_messages); // final MenuItem item = menu.findItem(R.id.menu_expiring_messages);
final View actionView = MenuItemCompat.getActionView(item); // final View actionView = MenuItemCompat.getActionView(item);
final TextView badgeView = actionView.findViewById(R.id.expiration_badge); // final TextView badgeView = actionView.findViewById(R.id.expiration_badge);
//
badgeView.setText(ExpirationUtil.getExpirationAbbreviatedDisplayValue(this, recipient.getExpireMessages())); // badgeView.setText(ExpirationUtil.getExpirationAbbreviatedDisplayValue(this, recipient.getExpireMessages()));
actionView.setOnClickListener(v -> onOptionsItemSelected(item)); // actionView.setOnClickListener(v -> onOptionsItemSelected(item));
} else { // } else {
inflater.inflate(R.menu.conversation_expiring_off, menu); // inflater.inflate(R.menu.conversation_expiring_off, menu);
} // }
} // }
//
if (isSingleConversation()) { // if (isSingleConversation()) {
/* // /*
if (isSecureText) inflater.inflate(R.menu.conversation_callable_secure, menu); // if (isSecureText) inflater.inflate(R.menu.conversation_callable_secure, menu);
else inflater.inflate(R.menu.conversation_callable_insecure, menu); // else inflater.inflate(R.menu.conversation_callable_insecure, menu);
*/ // */
} else if (isGroupConversation() && !isLokiPublicChat) { // } else if (isGroupConversation() && !isLokiPublicChat) {
inflater.inflate(R.menu.conversation_group_options, menu); // inflater.inflate(R.menu.conversation_group_options, menu);
//
if (!isPushGroupConversation()) { // if (!isPushGroupConversation()) {
inflater.inflate(R.menu.conversation_mms_group_options, menu); // inflater.inflate(R.menu.conversation_mms_group_options, menu);
if (distributionType == ThreadDatabase.DistributionTypes.BROADCAST) { // if (distributionType == ThreadDatabase.DistributionTypes.BROADCAST) {
menu.findItem(R.id.menu_distribution_broadcast).setChecked(true); // menu.findItem(R.id.menu_distribution_broadcast).setChecked(true);
} else { // } else {
menu.findItem(R.id.menu_distribution_conversation).setChecked(true); // menu.findItem(R.id.menu_distribution_conversation).setChecked(true);
} // }
} else if (isActiveGroup()) { // } else if (isActiveGroup()) {
inflater.inflate(R.menu.conversation_push_group_options, menu); // inflater.inflate(R.menu.conversation_push_group_options, menu);
} // }
} // }
//
inflater.inflate(R.menu.conversation, menu); // inflater.inflate(R.menu.conversation, menu);
//
if (isSingleConversation() && isSecureText) { // if (isSingleConversation() && isSecureText) {
inflater.inflate(R.menu.conversation_secure, menu); // inflater.inflate(R.menu.conversation_secure, menu);
} else if (isSingleConversation()) { // } else if (isSingleConversation()) {
inflater.inflate(R.menu.conversation_insecure, menu); // inflater.inflate(R.menu.conversation_insecure, menu);
} // }
//
if (recipient != null && recipient.isMuted()) inflater.inflate(R.menu.conversation_muted, menu); // if (recipient != null && recipient.isMuted()) inflater.inflate(R.menu.conversation_muted, menu);
else inflater.inflate(R.menu.conversation_unmuted, menu); // else inflater.inflate(R.menu.conversation_unmuted, menu);
//
/* // /*
if (isSingleConversation() && getRecipient().getContactUri() == null) { // if (isSingleConversation() && getRecipient().getContactUri() == null) {
inflater.inflate(R.menu.conversation_add_to_contacts, menu); // inflater.inflate(R.menu.conversation_add_to_contacts, menu);
} // }
//
//
if (recipient != null && recipient.isLocalNumber()) { // if (recipient != null && recipient.isLocalNumber()) {
if (isSecureText) menu.findItem(R.id.menu_call_secure).setVisible(false); // if (isSecureText) menu.findItem(R.id.menu_call_secure).setVisible(false);
else menu.findItem(R.id.menu_call_insecure).setVisible(false); // else menu.findItem(R.id.menu_call_insecure).setVisible(false);
//
MenuItem muteItem = menu.findItem(R.id.menu_mute_notifications); // MenuItem muteItem = menu.findItem(R.id.menu_mute_notifications);
//
if (muteItem != null) { // if (muteItem != null) {
muteItem.setVisible(false); // muteItem.setVisible(false);
} // }
} // }
*/ // */
//
searchViewItem = menu.findItem(R.id.menu_search); // searchViewItem = menu.findItem(R.id.menu_search);
//
SearchView searchView = (SearchView) searchViewItem.getActionView(); // SearchView searchView = (SearchView) searchViewItem.getActionView();
SearchView.OnQueryTextListener queryListener = new SearchView.OnQueryTextListener() { // SearchView.OnQueryTextListener queryListener = new SearchView.OnQueryTextListener() {
@Override // @Override
public boolean onQueryTextSubmit(String query) { // public boolean onQueryTextSubmit(String query) {
searchViewModel.onQueryUpdated(query, threadId); // searchViewModel.onQueryUpdated(query, threadId);
searchNav.showLoading(); // searchNav.showLoading();
fragment.onSearchQueryUpdated(query); // fragment.onSearchQueryUpdated(query);
return true; // return true;
} // }
//
@Override // @Override
public boolean onQueryTextChange(String query) { // public boolean onQueryTextChange(String query) {
searchViewModel.onQueryUpdated(query, threadId); // searchViewModel.onQueryUpdated(query, threadId);
searchNav.showLoading(); // searchNav.showLoading();
fragment.onSearchQueryUpdated(query); // fragment.onSearchQueryUpdated(query);
return true; // return true;
} // }
}; // };
//
searchViewItem.setOnActionExpandListener(new MenuItem.OnActionExpandListener() { // searchViewItem.setOnActionExpandListener(new MenuItem.OnActionExpandListener() {
@Override // @Override
public boolean onMenuItemActionExpand(MenuItem item) { // public boolean onMenuItemActionExpand(MenuItem item) {
searchView.setOnQueryTextListener(queryListener); // searchView.setOnQueryTextListener(queryListener);
searchViewModel.onSearchOpened(); // searchViewModel.onSearchOpened();
searchNav.setVisibility(View.VISIBLE); // searchNav.setVisibility(View.VISIBLE);
searchNav.setData(0, 0); // searchNav.setData(0, 0);
inputPanel.setVisibility(View.GONE); // inputPanel.setVisibility(View.GONE);
//
for (int i = 0; i < menu.size(); i++) { // for (int i = 0; i < menu.size(); i++) {
if (!menu.getItem(i).equals(searchViewItem)) { // if (!menu.getItem(i).equals(searchViewItem)) {
menu.getItem(i).setVisible(false); // menu.getItem(i).setVisible(false);
} // }
} // }
return true; // return true;
} // }
//
@Override // @Override
public boolean onMenuItemActionCollapse(MenuItem item) { // public boolean onMenuItemActionCollapse(MenuItem item) {
searchView.setOnQueryTextListener(null); // searchView.setOnQueryTextListener(null);
searchViewModel.onSearchClosed(); // searchViewModel.onSearchClosed();
searchNav.setVisibility(View.GONE); // searchNav.setVisibility(View.GONE);
inputPanel.setVisibility(View.VISIBLE); // inputPanel.setVisibility(View.VISIBLE);
fragment.onSearchQueryUpdated(null); // fragment.onSearchQueryUpdated(null);
invalidateOptionsMenu(); // invalidateOptionsMenu();
return true; // return true;
} // }
}); // });
//
super.onPrepareOptionsMenu(menu); // super.onPrepareOptionsMenu(menu);
return true; // return true;
} // }
@Override @Override
public boolean onOptionsItemSelected(MenuItem item) { public boolean onOptionsItemSelected(MenuItem item) {
@ -1168,11 +1162,11 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
private boolean handleDisplayQuickContact() { private boolean handleDisplayQuickContact() {
if (recipient.getAddress().isGroup()) return false; if (recipient.getAddress().isGroup()) return false;
if (recipient.getContactUri() != null) { // if (recipient.getContactUri() != null) {
ContactsContract.QuickContact.showQuickContact(ConversationActivity.this, titleView, recipient.getContactUri(), ContactsContract.QuickContact.MODE_LARGE, null); // ContactsContract.QuickContact.showQuickContact(ConversationActivity.this, titleView, recipient.getContactUri(), ContactsContract.QuickContact.MODE_LARGE, null);
} else { // } else {
handleAddToContacts(); // handleAddToContacts();
} // }
return true; return true;
} }
@ -1552,7 +1546,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
unverifiedBannerView.get().hide(); unverifiedBannerView.get().hide();
} }
titleView.setVerified(isSecureText && identityRecords.isVerified()); // titleView.setVerified(isSecureText && identityRecords.isVerified());
future.set(true); future.set(true);
} }
@ -1563,7 +1557,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
} }
private void initializeViews() { private void initializeViews() {
titleView = findViewById(R.id.conversation_title_view); titleTextView = findViewById(R.id.titleTextView);
buttonToggle = ViewUtil.findById(this, R.id.button_toggle); buttonToggle = ViewUtil.findById(this, R.id.button_toggle);
sendButton = ViewUtil.findById(this, R.id.send_button); sendButton = ViewUtil.findById(this, R.id.send_button);
attachButton = ViewUtil.findById(this, R.id.attach_button); attachButton = ViewUtil.findById(this, R.id.attach_button);
@ -1648,7 +1642,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
ActionBar supportActionBar = getSupportActionBar(); ActionBar supportActionBar = getSupportActionBar();
if (supportActionBar == null) throw new AssertionError(); if (supportActionBar == null) throw new AssertionError();
supportActionBar.setDisplayHomeAsUpEnabled(true); // supportActionBar.setDisplayHomeAsUpEnabled(true);
supportActionBar.setDisplayShowTitleEnabled(false); supportActionBar.setDisplayShowTitleEnabled(false);
} }
@ -1774,8 +1768,8 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
Log.i(TAG, "onModified(" + recipient.getAddress().serialize() + ")"); Log.i(TAG, "onModified(" + recipient.getAddress().serialize() + ")");
Util.runOnMain(() -> { Util.runOnMain(() -> {
Log.i(TAG, "onModifiedRun(): " + recipient.getRegistered()); Log.i(TAG, "onModifiedRun(): " + recipient.getRegistered());
titleView.setTitle(glideRequests, recipient); updateTitleTextView(glideRequests, recipient);
titleView.setVerified(identityRecords.isVerified()); // titleView.setVerified(identityRecords.isVerified());
setBlockedUserState(recipient, isSecureText, isDefaultSms); setBlockedUserState(recipient, isSecureText, isDefaultSms);
setActionBarColor(recipient.getColor()); setActionBarColor(recipient.getColor());
setGroupShareProfileReminder(recipient); setGroupShareProfileReminder(recipient);
@ -1971,8 +1965,8 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
private void setActionBarColor(MaterialColor color) { private void setActionBarColor(MaterialColor color) {
ActionBar supportActionBar = getSupportActionBar(); ActionBar supportActionBar = getSupportActionBar();
if (supportActionBar == null) throw new AssertionError(); if (supportActionBar == null) throw new AssertionError();
supportActionBar.setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.core_grey_90))); supportActionBar.setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.action_bar_background)));
setStatusBarColor(getResources().getColor(R.color.black)); setStatusBarColor(getResources().getColor(R.color.action_bar_background));
} }
private void setBlockedUserState(Recipient recipient, boolean isSecureText, boolean isDefaultSms) { private void setBlockedUserState(Recipient recipient, boolean isSecureText, boolean isDefaultSms) {
@ -3042,6 +3036,10 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
} }
} }
private void updateTitleTextView(GlideRequests glide, Recipient recipient) {
}
// region Loki // region Loki
@Override @Override
public void acceptFriendRequest(@NotNull MessageRecord friendRequest) { public void acceptFriendRequest(@NotNull MessageRecord friendRequest) {

View file

@ -31,7 +31,6 @@ import android.widget.TextView;
import com.annimon.stream.Stream; import com.annimon.stream.Stream;
import org.thoughtcrime.securesms.BindableConversationItem; import org.thoughtcrime.securesms.BindableConversationItem;
import network.loki.messenger.R;
import org.thoughtcrime.securesms.attachments.DatabaseAttachment; import org.thoughtcrime.securesms.attachments.DatabaseAttachment;
import org.thoughtcrime.securesms.conversation.ConversationAdapter.HeaderViewHolder; import org.thoughtcrime.securesms.conversation.ConversationAdapter.HeaderViewHolder;
import org.thoughtcrime.securesms.database.DatabaseFactory; import org.thoughtcrime.securesms.database.DatabaseFactory;
@ -41,7 +40,7 @@ import org.thoughtcrime.securesms.database.MmsSmsDatabase;
import org.thoughtcrime.securesms.database.model.MessageRecord; import org.thoughtcrime.securesms.database.model.MessageRecord;
import org.thoughtcrime.securesms.database.model.MmsMessageRecord; import org.thoughtcrime.securesms.database.model.MmsMessageRecord;
import org.thoughtcrime.securesms.logging.Log; import org.thoughtcrime.securesms.logging.Log;
import org.thoughtcrime.securesms.loki.FriendRequestViewDelegate; import org.thoughtcrime.securesms.loki.redesign.views.FriendRequestViewDelegate;
import org.thoughtcrime.securesms.mms.GlideRequests; import org.thoughtcrime.securesms.mms.GlideRequests;
import org.thoughtcrime.securesms.mms.SlideDeck; import org.thoughtcrime.securesms.mms.SlideDeck;
import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.Recipient;
@ -65,6 +64,8 @@ import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import network.loki.messenger.R;
/** /**
* A cursor adapter for a conversation thread. Ultimately * A cursor adapter for a conversation thread. Ultimately
* used by ComposeMessageActivity to display a conversation * used by ComposeMessageActivity to display a conversation

View file

@ -79,7 +79,7 @@ import org.thoughtcrime.securesms.database.model.MmsMessageRecord;
import org.thoughtcrime.securesms.jobs.DirectoryRefreshJob; import org.thoughtcrime.securesms.jobs.DirectoryRefreshJob;
import org.thoughtcrime.securesms.linkpreview.LinkPreview; import org.thoughtcrime.securesms.linkpreview.LinkPreview;
import org.thoughtcrime.securesms.logging.Log; import org.thoughtcrime.securesms.logging.Log;
import org.thoughtcrime.securesms.loki.FriendRequestViewDelegate; import org.thoughtcrime.securesms.loki.redesign.views.FriendRequestViewDelegate;
import org.thoughtcrime.securesms.longmessage.LongMessageActivity; import org.thoughtcrime.securesms.longmessage.LongMessageActivity;
import org.thoughtcrime.securesms.mediasend.Media; import org.thoughtcrime.securesms.mediasend.Media;
import org.thoughtcrime.securesms.mms.GlideApp; import org.thoughtcrime.securesms.mms.GlideApp;

View file

@ -87,8 +87,8 @@ import org.thoughtcrime.securesms.jobs.SmsSendJob;
import org.thoughtcrime.securesms.linkpreview.LinkPreview; import org.thoughtcrime.securesms.linkpreview.LinkPreview;
import org.thoughtcrime.securesms.linkpreview.LinkPreviewUtil; import org.thoughtcrime.securesms.linkpreview.LinkPreviewUtil;
import org.thoughtcrime.securesms.logging.Log; import org.thoughtcrime.securesms.logging.Log;
import org.thoughtcrime.securesms.loki.FriendRequestView; import org.thoughtcrime.securesms.loki.redesign.views.FriendRequestView;
import org.thoughtcrime.securesms.loki.FriendRequestViewDelegate; import org.thoughtcrime.securesms.loki.redesign.views.FriendRequestViewDelegate;
import org.thoughtcrime.securesms.loki.LokiMessageDatabase; import org.thoughtcrime.securesms.loki.LokiMessageDatabase;
import org.thoughtcrime.securesms.loki.MentionUtilities; import org.thoughtcrime.securesms.loki.MentionUtilities;
import org.thoughtcrime.securesms.mms.GlideRequests; import org.thoughtcrime.securesms.mms.GlideRequests;

View file

@ -5,9 +5,6 @@ import android.os.Build.VERSION;
import android.os.Build.VERSION_CODES; import android.os.Build.VERSION_CODES;
import android.os.Bundle; import android.os.Bundle;
import android.support.v4.app.ActivityOptionsCompat; import android.support.v4.app.ActivityOptionsCompat;
import network.loki.messenger.R;
import org.thoughtcrime.securesms.logging.Log;
import android.view.Display; import android.view.Display;
import android.view.Gravity; import android.view.Gravity;
import android.view.Menu; import android.view.Menu;
@ -16,10 +13,13 @@ import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.WindowManager; import android.view.WindowManager;
import org.thoughtcrime.securesms.logging.Log;
import org.thoughtcrime.securesms.util.concurrent.ListenableFuture; import org.thoughtcrime.securesms.util.concurrent.ListenableFuture;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
import network.loki.messenger.R;
public class ConversationPopupActivity extends ConversationActivity { public class ConversationPopupActivity extends ConversationActivity {
private static final String TAG = ConversationPopupActivity.class.getSimpleName(); private static final String TAG = ConversationPopupActivity.class.getSimpleName();
@ -50,7 +50,7 @@ public class ConversationPopupActivity extends ConversationActivity {
super.onCreate(bundle, ready); super.onCreate(bundle, ready);
titleView.setOnClickListener(null); // titleView.setOnClickListener(null);
} }
@Override @Override

View file

@ -1,16 +0,0 @@
package org.thoughtcrime.securesms.loki
import org.thoughtcrime.securesms.database.model.MessageRecord
interface FriendRequestViewDelegate {
/**
* Implementations of this method should update the thread's friend request status
* and send a friend request accepted message.
*/
fun acceptFriendRequest(friendRequest: MessageRecord)
/**
* Implementations of this method should update the thread's friend request status
* and remove the pre keys associated with the contact.
*/
fun rejectFriendRequest(friendRequest: MessageRecord)
}

View file

@ -1,17 +1,21 @@
package org.thoughtcrime.securesms.loki package org.thoughtcrime.securesms.loki.redesign.views
import android.content.Context import android.content.Context
import android.os.Build import android.os.Build
import android.util.AttributeSet import android.util.AttributeSet
import android.util.TypedValue
import android.view.Gravity import android.view.Gravity
import android.view.View import android.view.View
import android.widget.Button import android.widget.Button
import android.widget.LinearLayout import android.widget.LinearLayout
import android.widget.ProgressBar import android.widget.ProgressBar
import android.widget.TextView import android.widget.TextView
import com.github.ybq.android.spinkit.style.DoubleBounce
import network.loki.messenger.R import network.loki.messenger.R
import org.thoughtcrime.securesms.database.DatabaseFactory import org.thoughtcrime.securesms.database.DatabaseFactory
import org.thoughtcrime.securesms.database.model.MessageRecord import org.thoughtcrime.securesms.database.model.MessageRecord
import org.thoughtcrime.securesms.loki.getColorWithID
import org.thoughtcrime.securesms.loki.toPx
import org.whispersystems.signalservice.loki.messaging.LokiMessageFriendRequestStatus import org.whispersystems.signalservice.loki.messaging.LokiMessageFriendRequestStatus
class FriendRequestView(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : LinearLayout(context, attrs, defStyleAttr) { class FriendRequestView(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : LinearLayout(context, attrs, defStyleAttr) {
@ -28,14 +32,16 @@ class FriendRequestView(context: Context, attrs: AttributeSet?, defStyleAttr: In
private val label by lazy { private val label by lazy {
val result = TextView(context) val result = TextView(context)
result.setTextColor(resources.getColorWithID(R.color.white, context.theme)) result.setTextColor(resources.getColorWithID(R.color.text, context.theme))
result.textAlignment = TextView.TEXT_ALIGNMENT_CENTER result.textAlignment = TextView.TEXT_ALIGNMENT_CENTER
result.setTextSize(TypedValue.COMPLEX_UNIT_PX, resources.getDimension(R.dimen.small_font_size))
result result
} }
private val buttonLinearLayout by lazy { private val buttonLinearLayout by lazy {
val result = LinearLayout(context) val result = LinearLayout(context)
result.orientation = HORIZONTAL result.orientation = HORIZONTAL
result.setPadding(0, resources.getDimension(R.dimen.medium_spacing).toInt(), 0, 0)
result result
} }
@ -64,39 +70,45 @@ class FriendRequestView(context: Context, attrs: AttributeSet?, defStyleAttr: In
if (isUISetUp) { return } if (isUISetUp) { return }
isUISetUp = true isUISetUp = true
orientation = VERTICAL orientation = VERTICAL
setPadding(resources.getDimension(R.dimen.large_spacing).toInt(), 0, resources.getDimension(R.dimen.large_spacing).toInt(), 0)
addView(topSpacer) addView(topSpacer)
addView(label) addView(label)
if (!message!!.isOutgoing) { if (!message!!.isOutgoing) {
val loader = ProgressBar(context) val loader = ProgressBar(context)
loader.isIndeterminate = true loader.isIndeterminate = true
val color = resources.getColorWithID(R.color.white, context.theme) loader.indeterminateDrawable = DoubleBounce()
loader.indeterminateDrawable.setColorFilter(color, android.graphics.PorterDuff.Mode.SRC_IN)
val loaderLayoutParams = LayoutParams(LayoutParams.MATCH_PARENT, toPx(24, resources)) val loaderLayoutParams = LayoutParams(LayoutParams.MATCH_PARENT, toPx(24, resources))
loader.layoutParams = loaderLayoutParams loader.layoutParams = loaderLayoutParams
loaderContainer.addView(loader) loaderContainer.addView(loader)
addView(loaderContainer) addView(loaderContainer)
fun button(): Button { fun button(): Button {
val result = Button(context) val result = Button(context)
result.setBackgroundColor(resources.getColorWithID(R.color.transparent, context.theme))
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
result.elevation = 0f result.elevation = 0f
result.stateListAnimator = null result.stateListAnimator = null
} }
val buttonLayoutParams = LayoutParams(0, toPx(50, resources)) result.setTextColor(resources.getColorWithID(R.color.text, context.theme))
result.setTextSize(TypedValue.COMPLEX_UNIT_PX, resources.getDimension(R.dimen.small_font_size))
result.isAllCaps = false
result.setPadding(0, 0, 0, 0)
val buttonLayoutParams = LayoutParams(0, resources.getDimension(R.dimen.small_button_height).toInt())
buttonLayoutParams.weight = 1f buttonLayoutParams.weight = 1f
result.layoutParams = buttonLayoutParams result.layoutParams = buttonLayoutParams
return result return result
} }
val acceptButton = button()
acceptButton.text = resources.getString(R.string.view_friend_request_accept_button_title)
acceptButton.setTextColor(resources.getColorWithID(R.color.signal_primary, context.theme))
acceptButton.setOnClickListener { accept() }
buttonLinearLayout.addView(acceptButton)
val rejectButton = button() val rejectButton = button()
rejectButton.text = resources.getString(R.string.view_friend_request_reject_button_title) rejectButton.text = resources.getString(R.string.view_friend_request_reject_button_title)
rejectButton.setTextColor(resources.getColorWithID(R.color.red, context.theme)) rejectButton.setBackgroundResource(R.drawable.unimportant_dialog_button_background)
rejectButton.setOnClickListener { reject() } rejectButton.setOnClickListener { reject() }
buttonLinearLayout.addView(rejectButton) buttonLinearLayout.addView(rejectButton)
val acceptButton = button()
acceptButton.text = resources.getString(R.string.view_friend_request_accept_button_title)
acceptButton.setBackgroundResource(R.drawable.prominent_dialog_button_background)
val acceptButtonLayoutParams = acceptButton.layoutParams as LayoutParams
acceptButtonLayoutParams.setMargins(resources.getDimension(R.dimen.medium_spacing).toInt(), 0, 0, 0)
acceptButton.layoutParams = acceptButtonLayoutParams
acceptButton.setOnClickListener { accept() }
buttonLinearLayout.addView(acceptButton)
buttonLinearLayout.layoutParams = LayoutParams(LayoutParams.MATCH_PARENT, toPx(50, resources)) buttonLinearLayout.layoutParams = LayoutParams(LayoutParams.MATCH_PARENT, toPx(50, resources))
addView(buttonLinearLayout) addView(buttonLinearLayout)
} }
@ -155,4 +167,19 @@ class FriendRequestView(context: Context, attrs: AttributeSet?, defStyleAttr: In
delegate?.rejectFriendRequest(message!!) delegate?.rejectFriendRequest(message!!)
} }
// endregion // endregion
} }
// region Delegate
interface FriendRequestViewDelegate {
/**
* Implementations of this method should update the thread's friend request status
* and send a friend request accepted message.
*/
fun acceptFriendRequest(friendRequest: MessageRecord)
/**
* Implementations of this method should update the thread's friend request status
* and remove the pre keys associated with the contact.
*/
fun rejectFriendRequest(friendRequest: MessageRecord)
}
// endregion