mirror of
https://github.com/oxen-io/session-android.git
synced 2025-12-03 08:32:34 +00:00
Start implementing conversation screen redesign
This commit is contained in:
@@ -40,25 +40,20 @@ import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Vibrator;
|
||||
import android.provider.Browser;
|
||||
import android.provider.ContactsContract;
|
||||
import android.provider.Telephony;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.content.pm.ShortcutInfoCompat;
|
||||
import android.support.v4.content.pm.ShortcutManagerCompat;
|
||||
import android.support.v4.graphics.drawable.IconCompat;
|
||||
import android.support.v4.view.MenuItemCompat;
|
||||
import android.support.v7.app.ActionBar;
|
||||
import android.support.v7.app.AlertDialog;
|
||||
import android.support.v7.widget.SearchView;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.text.Editable;
|
||||
import android.text.TextUtils;
|
||||
import android.text.TextWatcher;
|
||||
import android.util.Pair;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuInflater;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
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.LinkPreviewViewModel;
|
||||
import org.thoughtcrime.securesms.logging.Log;
|
||||
import org.thoughtcrime.securesms.loki.FriendRequestViewDelegate;
|
||||
import org.thoughtcrime.securesms.loki.LokiAPIUtilities;
|
||||
import org.thoughtcrime.securesms.loki.LokiMessageDatabase;
|
||||
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.MultiDeviceUtilities;
|
||||
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.MediaSendActivity;
|
||||
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.DynamicLanguage;
|
||||
import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme;
|
||||
import org.thoughtcrime.securesms.util.ExpirationUtil;
|
||||
import org.thoughtcrime.securesms.util.GroupUtil;
|
||||
import org.thoughtcrime.securesms.util.IdentityUtil;
|
||||
import org.thoughtcrime.securesms.util.MediaUtil;
|
||||
@@ -303,7 +297,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
private AnimatingToggle buttonToggle;
|
||||
private SendButton sendButton;
|
||||
private ImageButton attachButton;
|
||||
protected ConversationTitleView titleView;
|
||||
private TextView titleTextView;
|
||||
private TextView charactersLeft;
|
||||
private ConversationFragment fragment;
|
||||
private Button unblockButton;
|
||||
@@ -477,7 +471,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
initializeIdentityRecords();
|
||||
composeText.setTransport(sendButton.getSelectedTransport());
|
||||
|
||||
titleView.setTitle(glideRequests, recipient);
|
||||
updateTitleTextView(glideRequests, recipient);
|
||||
setActionBarColor(recipient.getColor());
|
||||
setBlockedUserState(recipient, isSecureText, isDefaultSms);
|
||||
setGroupShareProfileReminder(recipient);
|
||||
@@ -564,7 +558,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
case GROUP_EDIT:
|
||||
recipient = Recipient.from(this, data.getParcelableExtra(GroupCreateActivity.GROUP_ADDRESS_EXTRA), true);
|
||||
recipient.addListener(this);
|
||||
titleView.setTitle(glideRequests, recipient);
|
||||
updateTitleTextView(glideRequests, recipient);
|
||||
NotificationChannels.updateContactChannelName(this, recipient);
|
||||
setBlockedUserState(recipient, isSecureText, isDefaultSms);
|
||||
supportInvalidateOptionsMenu();
|
||||
@@ -662,130 +656,130 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPrepareOptionsMenu(Menu menu) {
|
||||
MenuInflater inflater = this.getMenuInflater();
|
||||
menu.clear();
|
||||
|
||||
boolean isLokiPublicChat = isGroupConversation(); // TODO: Figure out a better way of determining this
|
||||
|
||||
if (isSecureText && !isLokiPublicChat) { // TODO:
|
||||
if (recipient.getExpireMessages() > 0) {
|
||||
inflater.inflate(R.menu.conversation_expiring_on, menu);
|
||||
|
||||
final MenuItem item = menu.findItem(R.id.menu_expiring_messages);
|
||||
final View actionView = MenuItemCompat.getActionView(item);
|
||||
final TextView badgeView = actionView.findViewById(R.id.expiration_badge);
|
||||
|
||||
badgeView.setText(ExpirationUtil.getExpirationAbbreviatedDisplayValue(this, recipient.getExpireMessages()));
|
||||
actionView.setOnClickListener(v -> onOptionsItemSelected(item));
|
||||
} else {
|
||||
inflater.inflate(R.menu.conversation_expiring_off, menu);
|
||||
}
|
||||
}
|
||||
|
||||
if (isSingleConversation()) {
|
||||
/*
|
||||
if (isSecureText) inflater.inflate(R.menu.conversation_callable_secure, menu);
|
||||
else inflater.inflate(R.menu.conversation_callable_insecure, menu);
|
||||
*/
|
||||
} else if (isGroupConversation() && !isLokiPublicChat) {
|
||||
inflater.inflate(R.menu.conversation_group_options, menu);
|
||||
|
||||
if (!isPushGroupConversation()) {
|
||||
inflater.inflate(R.menu.conversation_mms_group_options, menu);
|
||||
if (distributionType == ThreadDatabase.DistributionTypes.BROADCAST) {
|
||||
menu.findItem(R.id.menu_distribution_broadcast).setChecked(true);
|
||||
} else {
|
||||
menu.findItem(R.id.menu_distribution_conversation).setChecked(true);
|
||||
}
|
||||
} else if (isActiveGroup()) {
|
||||
inflater.inflate(R.menu.conversation_push_group_options, menu);
|
||||
}
|
||||
}
|
||||
|
||||
inflater.inflate(R.menu.conversation, menu);
|
||||
|
||||
if (isSingleConversation() && isSecureText) {
|
||||
inflater.inflate(R.menu.conversation_secure, menu);
|
||||
} else if (isSingleConversation()) {
|
||||
inflater.inflate(R.menu.conversation_insecure, menu);
|
||||
}
|
||||
|
||||
if (recipient != null && recipient.isMuted()) inflater.inflate(R.menu.conversation_muted, menu);
|
||||
else inflater.inflate(R.menu.conversation_unmuted, menu);
|
||||
|
||||
/*
|
||||
if (isSingleConversation() && getRecipient().getContactUri() == null) {
|
||||
inflater.inflate(R.menu.conversation_add_to_contacts, menu);
|
||||
}
|
||||
|
||||
|
||||
if (recipient != null && recipient.isLocalNumber()) {
|
||||
if (isSecureText) menu.findItem(R.id.menu_call_secure).setVisible(false);
|
||||
else menu.findItem(R.id.menu_call_insecure).setVisible(false);
|
||||
|
||||
MenuItem muteItem = menu.findItem(R.id.menu_mute_notifications);
|
||||
|
||||
if (muteItem != null) {
|
||||
muteItem.setVisible(false);
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
searchViewItem = menu.findItem(R.id.menu_search);
|
||||
|
||||
SearchView searchView = (SearchView) searchViewItem.getActionView();
|
||||
SearchView.OnQueryTextListener queryListener = new SearchView.OnQueryTextListener() {
|
||||
@Override
|
||||
public boolean onQueryTextSubmit(String query) {
|
||||
searchViewModel.onQueryUpdated(query, threadId);
|
||||
searchNav.showLoading();
|
||||
fragment.onSearchQueryUpdated(query);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onQueryTextChange(String query) {
|
||||
searchViewModel.onQueryUpdated(query, threadId);
|
||||
searchNav.showLoading();
|
||||
fragment.onSearchQueryUpdated(query);
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
searchViewItem.setOnActionExpandListener(new MenuItem.OnActionExpandListener() {
|
||||
@Override
|
||||
public boolean onMenuItemActionExpand(MenuItem item) {
|
||||
searchView.setOnQueryTextListener(queryListener);
|
||||
searchViewModel.onSearchOpened();
|
||||
searchNav.setVisibility(View.VISIBLE);
|
||||
searchNav.setData(0, 0);
|
||||
inputPanel.setVisibility(View.GONE);
|
||||
|
||||
for (int i = 0; i < menu.size(); i++) {
|
||||
if (!menu.getItem(i).equals(searchViewItem)) {
|
||||
menu.getItem(i).setVisible(false);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onMenuItemActionCollapse(MenuItem item) {
|
||||
searchView.setOnQueryTextListener(null);
|
||||
searchViewModel.onSearchClosed();
|
||||
searchNav.setVisibility(View.GONE);
|
||||
inputPanel.setVisibility(View.VISIBLE);
|
||||
fragment.onSearchQueryUpdated(null);
|
||||
invalidateOptionsMenu();
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
super.onPrepareOptionsMenu(menu);
|
||||
return true;
|
||||
}
|
||||
// @Override
|
||||
// public boolean onPrepareOptionsMenu(Menu menu) {
|
||||
// MenuInflater inflater = this.getMenuInflater();
|
||||
// menu.clear();
|
||||
//
|
||||
// boolean isLokiPublicChat = isGroupConversation(); // TODO: Figure out a better way of determining this
|
||||
//
|
||||
// if (isSecureText && !isLokiPublicChat) { // TODO:
|
||||
// if (recipient.getExpireMessages() > 0) {
|
||||
// inflater.inflate(R.menu.conversation_expiring_on, menu);
|
||||
//
|
||||
// final MenuItem item = menu.findItem(R.id.menu_expiring_messages);
|
||||
// final View actionView = MenuItemCompat.getActionView(item);
|
||||
// final TextView badgeView = actionView.findViewById(R.id.expiration_badge);
|
||||
//
|
||||
// badgeView.setText(ExpirationUtil.getExpirationAbbreviatedDisplayValue(this, recipient.getExpireMessages()));
|
||||
// actionView.setOnClickListener(v -> onOptionsItemSelected(item));
|
||||
// } else {
|
||||
// inflater.inflate(R.menu.conversation_expiring_off, menu);
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// if (isSingleConversation()) {
|
||||
// /*
|
||||
// if (isSecureText) inflater.inflate(R.menu.conversation_callable_secure, menu);
|
||||
// else inflater.inflate(R.menu.conversation_callable_insecure, menu);
|
||||
// */
|
||||
// } else if (isGroupConversation() && !isLokiPublicChat) {
|
||||
// inflater.inflate(R.menu.conversation_group_options, menu);
|
||||
//
|
||||
// if (!isPushGroupConversation()) {
|
||||
// inflater.inflate(R.menu.conversation_mms_group_options, menu);
|
||||
// if (distributionType == ThreadDatabase.DistributionTypes.BROADCAST) {
|
||||
// menu.findItem(R.id.menu_distribution_broadcast).setChecked(true);
|
||||
// } else {
|
||||
// menu.findItem(R.id.menu_distribution_conversation).setChecked(true);
|
||||
// }
|
||||
// } else if (isActiveGroup()) {
|
||||
// inflater.inflate(R.menu.conversation_push_group_options, menu);
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// inflater.inflate(R.menu.conversation, menu);
|
||||
//
|
||||
// if (isSingleConversation() && isSecureText) {
|
||||
// inflater.inflate(R.menu.conversation_secure, menu);
|
||||
// } else if (isSingleConversation()) {
|
||||
// inflater.inflate(R.menu.conversation_insecure, menu);
|
||||
// }
|
||||
//
|
||||
// if (recipient != null && recipient.isMuted()) inflater.inflate(R.menu.conversation_muted, menu);
|
||||
// else inflater.inflate(R.menu.conversation_unmuted, menu);
|
||||
//
|
||||
// /*
|
||||
// if (isSingleConversation() && getRecipient().getContactUri() == null) {
|
||||
// inflater.inflate(R.menu.conversation_add_to_contacts, menu);
|
||||
// }
|
||||
//
|
||||
//
|
||||
// if (recipient != null && recipient.isLocalNumber()) {
|
||||
// if (isSecureText) menu.findItem(R.id.menu_call_secure).setVisible(false);
|
||||
// else menu.findItem(R.id.menu_call_insecure).setVisible(false);
|
||||
//
|
||||
// MenuItem muteItem = menu.findItem(R.id.menu_mute_notifications);
|
||||
//
|
||||
// if (muteItem != null) {
|
||||
// muteItem.setVisible(false);
|
||||
// }
|
||||
// }
|
||||
// */
|
||||
//
|
||||
// searchViewItem = menu.findItem(R.id.menu_search);
|
||||
//
|
||||
// SearchView searchView = (SearchView) searchViewItem.getActionView();
|
||||
// SearchView.OnQueryTextListener queryListener = new SearchView.OnQueryTextListener() {
|
||||
// @Override
|
||||
// public boolean onQueryTextSubmit(String query) {
|
||||
// searchViewModel.onQueryUpdated(query, threadId);
|
||||
// searchNav.showLoading();
|
||||
// fragment.onSearchQueryUpdated(query);
|
||||
// return true;
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public boolean onQueryTextChange(String query) {
|
||||
// searchViewModel.onQueryUpdated(query, threadId);
|
||||
// searchNav.showLoading();
|
||||
// fragment.onSearchQueryUpdated(query);
|
||||
// return true;
|
||||
// }
|
||||
// };
|
||||
//
|
||||
// searchViewItem.setOnActionExpandListener(new MenuItem.OnActionExpandListener() {
|
||||
// @Override
|
||||
// public boolean onMenuItemActionExpand(MenuItem item) {
|
||||
// searchView.setOnQueryTextListener(queryListener);
|
||||
// searchViewModel.onSearchOpened();
|
||||
// searchNav.setVisibility(View.VISIBLE);
|
||||
// searchNav.setData(0, 0);
|
||||
// inputPanel.setVisibility(View.GONE);
|
||||
//
|
||||
// for (int i = 0; i < menu.size(); i++) {
|
||||
// if (!menu.getItem(i).equals(searchViewItem)) {
|
||||
// menu.getItem(i).setVisible(false);
|
||||
// }
|
||||
// }
|
||||
// return true;
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public boolean onMenuItemActionCollapse(MenuItem item) {
|
||||
// searchView.setOnQueryTextListener(null);
|
||||
// searchViewModel.onSearchClosed();
|
||||
// searchNav.setVisibility(View.GONE);
|
||||
// inputPanel.setVisibility(View.VISIBLE);
|
||||
// fragment.onSearchQueryUpdated(null);
|
||||
// invalidateOptionsMenu();
|
||||
// return true;
|
||||
// }
|
||||
// });
|
||||
//
|
||||
// super.onPrepareOptionsMenu(menu);
|
||||
// return true;
|
||||
// }
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
@@ -1168,11 +1162,11 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
private boolean handleDisplayQuickContact() {
|
||||
if (recipient.getAddress().isGroup()) return false;
|
||||
|
||||
if (recipient.getContactUri() != null) {
|
||||
ContactsContract.QuickContact.showQuickContact(ConversationActivity.this, titleView, recipient.getContactUri(), ContactsContract.QuickContact.MODE_LARGE, null);
|
||||
} else {
|
||||
handleAddToContacts();
|
||||
}
|
||||
// if (recipient.getContactUri() != null) {
|
||||
// ContactsContract.QuickContact.showQuickContact(ConversationActivity.this, titleView, recipient.getContactUri(), ContactsContract.QuickContact.MODE_LARGE, null);
|
||||
// } else {
|
||||
// handleAddToContacts();
|
||||
// }
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -1552,7 +1546,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
unverifiedBannerView.get().hide();
|
||||
}
|
||||
|
||||
titleView.setVerified(isSecureText && identityRecords.isVerified());
|
||||
// titleView.setVerified(isSecureText && identityRecords.isVerified());
|
||||
|
||||
future.set(true);
|
||||
}
|
||||
@@ -1563,7 +1557,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
}
|
||||
|
||||
private void initializeViews() {
|
||||
titleView = findViewById(R.id.conversation_title_view);
|
||||
titleTextView = findViewById(R.id.titleTextView);
|
||||
buttonToggle = ViewUtil.findById(this, R.id.button_toggle);
|
||||
sendButton = ViewUtil.findById(this, R.id.send_button);
|
||||
attachButton = ViewUtil.findById(this, R.id.attach_button);
|
||||
@@ -1648,7 +1642,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
ActionBar supportActionBar = getSupportActionBar();
|
||||
if (supportActionBar == null) throw new AssertionError();
|
||||
|
||||
supportActionBar.setDisplayHomeAsUpEnabled(true);
|
||||
// supportActionBar.setDisplayHomeAsUpEnabled(true);
|
||||
supportActionBar.setDisplayShowTitleEnabled(false);
|
||||
}
|
||||
|
||||
@@ -1774,8 +1768,8 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
Log.i(TAG, "onModified(" + recipient.getAddress().serialize() + ")");
|
||||
Util.runOnMain(() -> {
|
||||
Log.i(TAG, "onModifiedRun(): " + recipient.getRegistered());
|
||||
titleView.setTitle(glideRequests, recipient);
|
||||
titleView.setVerified(identityRecords.isVerified());
|
||||
updateTitleTextView(glideRequests, recipient);
|
||||
// titleView.setVerified(identityRecords.isVerified());
|
||||
setBlockedUserState(recipient, isSecureText, isDefaultSms);
|
||||
setActionBarColor(recipient.getColor());
|
||||
setGroupShareProfileReminder(recipient);
|
||||
@@ -1971,8 +1965,8 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
private void setActionBarColor(MaterialColor color) {
|
||||
ActionBar supportActionBar = getSupportActionBar();
|
||||
if (supportActionBar == null) throw new AssertionError();
|
||||
supportActionBar.setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.core_grey_90)));
|
||||
setStatusBarColor(getResources().getColor(R.color.black));
|
||||
supportActionBar.setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.action_bar_background)));
|
||||
setStatusBarColor(getResources().getColor(R.color.action_bar_background));
|
||||
}
|
||||
|
||||
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
|
||||
@Override
|
||||
public void acceptFriendRequest(@NotNull MessageRecord friendRequest) {
|
||||
|
||||
@@ -31,7 +31,6 @@ import android.widget.TextView;
|
||||
import com.annimon.stream.Stream;
|
||||
|
||||
import org.thoughtcrime.securesms.BindableConversationItem;
|
||||
import network.loki.messenger.R;
|
||||
import org.thoughtcrime.securesms.attachments.DatabaseAttachment;
|
||||
import org.thoughtcrime.securesms.conversation.ConversationAdapter.HeaderViewHolder;
|
||||
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.MmsMessageRecord;
|
||||
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.SlideDeck;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
@@ -65,6 +64,8 @@ import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import network.loki.messenger.R;
|
||||
|
||||
/**
|
||||
* A cursor adapter for a conversation thread. Ultimately
|
||||
* used by ComposeMessageActivity to display a conversation
|
||||
|
||||
@@ -79,7 +79,7 @@ import org.thoughtcrime.securesms.database.model.MmsMessageRecord;
|
||||
import org.thoughtcrime.securesms.jobs.DirectoryRefreshJob;
|
||||
import org.thoughtcrime.securesms.linkpreview.LinkPreview;
|
||||
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.mediasend.Media;
|
||||
import org.thoughtcrime.securesms.mms.GlideApp;
|
||||
|
||||
@@ -87,8 +87,8 @@ import org.thoughtcrime.securesms.jobs.SmsSendJob;
|
||||
import org.thoughtcrime.securesms.linkpreview.LinkPreview;
|
||||
import org.thoughtcrime.securesms.linkpreview.LinkPreviewUtil;
|
||||
import org.thoughtcrime.securesms.logging.Log;
|
||||
import org.thoughtcrime.securesms.loki.FriendRequestView;
|
||||
import org.thoughtcrime.securesms.loki.FriendRequestViewDelegate;
|
||||
import org.thoughtcrime.securesms.loki.redesign.views.FriendRequestView;
|
||||
import org.thoughtcrime.securesms.loki.redesign.views.FriendRequestViewDelegate;
|
||||
import org.thoughtcrime.securesms.loki.LokiMessageDatabase;
|
||||
import org.thoughtcrime.securesms.loki.MentionUtilities;
|
||||
import org.thoughtcrime.securesms.mms.GlideRequests;
|
||||
|
||||
@@ -5,9 +5,6 @@ import android.os.Build.VERSION;
|
||||
import android.os.Build.VERSION_CODES;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.app.ActivityOptionsCompat;
|
||||
|
||||
import network.loki.messenger.R;
|
||||
import org.thoughtcrime.securesms.logging.Log;
|
||||
import android.view.Display;
|
||||
import android.view.Gravity;
|
||||
import android.view.Menu;
|
||||
@@ -16,10 +13,13 @@ import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.WindowManager;
|
||||
|
||||
import org.thoughtcrime.securesms.logging.Log;
|
||||
import org.thoughtcrime.securesms.util.concurrent.ListenableFuture;
|
||||
|
||||
import java.util.concurrent.ExecutionException;
|
||||
|
||||
import network.loki.messenger.R;
|
||||
|
||||
public class ConversationPopupActivity extends ConversationActivity {
|
||||
|
||||
private static final String TAG = ConversationPopupActivity.class.getSimpleName();
|
||||
@@ -50,7 +50,7 @@ public class ConversationPopupActivity extends ConversationActivity {
|
||||
|
||||
super.onCreate(bundle, ready);
|
||||
|
||||
titleView.setOnClickListener(null);
|
||||
// titleView.setOnClickListener(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
@@ -1,17 +1,21 @@
|
||||
package org.thoughtcrime.securesms.loki
|
||||
package org.thoughtcrime.securesms.loki.redesign.views
|
||||
|
||||
import android.content.Context
|
||||
import android.os.Build
|
||||
import android.util.AttributeSet
|
||||
import android.util.TypedValue
|
||||
import android.view.Gravity
|
||||
import android.view.View
|
||||
import android.widget.Button
|
||||
import android.widget.LinearLayout
|
||||
import android.widget.ProgressBar
|
||||
import android.widget.TextView
|
||||
import com.github.ybq.android.spinkit.style.DoubleBounce
|
||||
import network.loki.messenger.R
|
||||
import org.thoughtcrime.securesms.database.DatabaseFactory
|
||||
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
|
||||
|
||||
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 {
|
||||
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.setTextSize(TypedValue.COMPLEX_UNIT_PX, resources.getDimension(R.dimen.small_font_size))
|
||||
result
|
||||
}
|
||||
|
||||
private val buttonLinearLayout by lazy {
|
||||
val result = LinearLayout(context)
|
||||
result.orientation = HORIZONTAL
|
||||
result.setPadding(0, resources.getDimension(R.dimen.medium_spacing).toInt(), 0, 0)
|
||||
result
|
||||
}
|
||||
|
||||
@@ -64,39 +70,45 @@ class FriendRequestView(context: Context, attrs: AttributeSet?, defStyleAttr: In
|
||||
if (isUISetUp) { return }
|
||||
isUISetUp = true
|
||||
orientation = VERTICAL
|
||||
setPadding(resources.getDimension(R.dimen.large_spacing).toInt(), 0, resources.getDimension(R.dimen.large_spacing).toInt(), 0)
|
||||
addView(topSpacer)
|
||||
addView(label)
|
||||
if (!message!!.isOutgoing) {
|
||||
val loader = ProgressBar(context)
|
||||
loader.isIndeterminate = true
|
||||
val color = resources.getColorWithID(R.color.white, context.theme)
|
||||
loader.indeterminateDrawable.setColorFilter(color, android.graphics.PorterDuff.Mode.SRC_IN)
|
||||
loader.indeterminateDrawable = DoubleBounce()
|
||||
val loaderLayoutParams = LayoutParams(LayoutParams.MATCH_PARENT, toPx(24, resources))
|
||||
loader.layoutParams = loaderLayoutParams
|
||||
loaderContainer.addView(loader)
|
||||
addView(loaderContainer)
|
||||
fun button(): Button {
|
||||
val result = Button(context)
|
||||
result.setBackgroundColor(resources.getColorWithID(R.color.transparent, context.theme))
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
result.elevation = 0f
|
||||
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
|
||||
result.layoutParams = buttonLayoutParams
|
||||
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()
|
||||
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() }
|
||||
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))
|
||||
addView(buttonLinearLayout)
|
||||
}
|
||||
@@ -155,4 +167,19 @@ class FriendRequestView(context: Context, attrs: AttributeSet?, defStyleAttr: In
|
||||
delegate?.rejectFriendRequest(message!!)
|
||||
}
|
||||
// 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
|
||||
Reference in New Issue
Block a user