Skip to content

Commit

Permalink
transport selection refactor
Browse files Browse the repository at this point in the history
Closes #1724
// FREEBIE
  • Loading branch information
mcginty committed Dec 12, 2014
1 parent 4a08841 commit 30232c1
Show file tree
Hide file tree
Showing 13 changed files with 443 additions and 93 deletions.
3 changes: 1 addition & 2 deletions res/layout/conversation_activity.xml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
android:layout_height="match_parent"
android:layout_above="@+id/bottom_container" />


<LinearLayout
android:layout_alignParentBottom="true"
android:id="@id/bottom_container"
Expand Down Expand Up @@ -97,7 +96,7 @@
android:contentDescription="@string/conversation_activity__compose_description"
android:textColor="?conversation_editor_text_color" />

<ImageButton
<org.thoughtcrime.securesms.components.SendButton
android:id="@+id/send_button"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
Expand Down
11 changes: 11 additions & 0 deletions res/layout/transport_selection.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="?conversation_transport_popup_background">
<ListView android:id="@+id/transport_selection_list"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
20 changes: 20 additions & 0 deletions res/layout/transport_selection_list_item.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="@dimen/transport_selection_popup_width"
android:layout_height="60dp"
android:gravity="center_vertical"
android:paddingLeft="10dp"
android:paddingRight="10dp">
<ImageView android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="Transport icon"/>
<TextView android:id="@+id/text"
android:paddingLeft="10dp"
android:fontFamily="sans-serif-light"
android:textSize="16sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
42 changes: 42 additions & 0 deletions res/values/arrays.xml
Original file line number Diff line number Diff line change
Expand Up @@ -142,4 +142,46 @@
<item>3000,3000</item>
<item>custom</item>
</string-array>

<string-array name="transport_selection_entries_text">
<item>@string/ConversationActivity_transport_insecure_sms</item>
<item>@string/ConversationActivity_transport_secure_sms</item>
<item>@string/ConversationActivity_transport_textsecure</item>
</string-array>

<string-array name="transport_selection_entries_media">
<item>@string/ConversationActivity_transport_insecure_mms</item>
<item>@string/ConversationActivity_transport_secure_mms</item>
<item>@string/ConversationActivity_transport_textsecure</item>
</string-array>

<string-array name="transport_selection_entries_compose_text">
<item>@string/conversation_activity__type_message_sms_insecure</item>
<item>@string/conversation_activity__type_message_sms_secure</item>
<item>@string/conversation_activity__type_message_push</item>
</string-array>

<string-array name="transport_selection_entries_compose_media">
<item>@string/conversation_activity__type_message_mms_insecure</item>
<item>@string/conversation_activity__type_message_mms_secure</item>
<item>@string/conversation_activity__type_message_push</item>
</string-array>

<string-array name="transport_selection_values">
<item>insecure_sms</item>
<item>secure_sms</item>
<item>textsecure</item>
</string-array>

<string-array name="transport_selection_icons_light">
<item>@drawable/ic_send_sms_insecure</item>
<item>@drawable/ic_send_sms_secure</item>
<item>@drawable/ic_send_push</item>
</string-array>

<string-array name="transport_selection_icons_dark">
<item>@drawable/ic_send_sms_insecure_dark</item>
<item>@drawable/ic_send_sms_secure</item>
<item>@drawable/ic_send_push</item>
</string-array>
</resources>
2 changes: 2 additions & 0 deletions res/values/attrs.xml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@
<attr name="conversation_send_button_sms_secure" format="reference"/>
<attr name="conversation_send_button_sms_insecure" format="reference"/>
<attr name="conversation_delivery_delivered" format="reference"/>
<attr name="conversation_transport_indicators" format="reference"/>
<attr name="conversation_transport_popup_background" format="reference"/>
<attr name="conversation_emoji_toggle" format="reference"/>
<attr name="conversation_keyboard_toggle" format="reference"/>

Expand Down
3 changes: 3 additions & 0 deletions res/values/dimens.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@
<dimen name="emoji_drawer_indicator_height">2dp</dimen>
<dimen name="emoji_drawer_left_right_padding">8dp</dimen>
<dimen name="conversation_item_date_text_size">12sp</dimen>
<dimen name="transport_selection_popup_width">200sp</dimen>
<dimen name="transport_selection_popup_xoff">0dp</dimen>
<dimen name="transport_selection_popup_yoff">1dp</dimen>
<dimen name="conversation_item_corner_radius">3dp</dimen>
<dimen name="conversation_item_drop_shadow_dist">2dp</dimen>
<dimen name="contact_selection_photo_size">50dp</dimen>
Expand Down
5 changes: 5 additions & 0 deletions res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,11 @@
<string name="ConversationActivity_this_device_does_not_appear_to_support_dial_actions">This device does not appear to support dial actions.</string>
<string name="ConversationActivity_leave_group">Leave group?</string>
<string name="ConversationActivity_are_you_sure_you_want_to_leave_this_group">Are you sure you want to leave this group?</string>
<string name="ConversationActivity_transport_insecure_sms">Insecure SMS</string>
<string name="ConversationActivity_transport_insecure_mms">Insecure MMS</string>
<string name="ConversationActivity_transport_secure_sms">Secure SMS</string>
<string name="ConversationActivity_transport_secure_mms">Secure MMS</string>
<string name="ConversationActivity_transport_textsecure">TextSecure</string>

<!-- ConversationFragment -->
<string name="ConversationFragment_message_details">Message details</string>
Expand Down
4 changes: 4 additions & 0 deletions res/values/themes.xml
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,8 @@
<item name="conversation_send_button_sms_secure">@drawable/ic_send_sms_secure</item>
<item name="conversation_send_button_sms_insecure">@drawable/ic_send_sms_insecure</item>
<item name="conversation_delivery_delivered">@drawable/ic_delivery_delivered</item>
<item name="conversation_transport_indicators">@array/transport_selection_icons_light</item>
<item name="conversation_transport_popup_background">@color/white</item>
<item name="conversation_emoji_toggle">@drawable/ic_emoji_dark</item>
<item name="conversation_keyboard_toggle">@drawable/ic_ime_dark</item>

Expand Down Expand Up @@ -139,6 +141,8 @@
<item name="conversation_send_button_sms_secure">@drawable/ic_send_sms_secure</item>
<item name="conversation_send_button_sms_insecure">@drawable/ic_send_sms_insecure_dark</item>
<item name="conversation_delivery_delivered">@drawable/ic_delivery_delivered_dark</item>
<item name="conversation_transport_indicators">@array/transport_selection_icons_dark</item>
<item name="conversation_transport_popup_background">@color/black</item>
<item name="conversation_emoji_toggle">@drawable/ic_emoji_light</item>
<item name="conversation_keyboard_toggle">@drawable/ic_ime_light</item>

Expand Down
113 changes: 22 additions & 91 deletions src/org/thoughtcrime/securesms/ConversationActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.net.Uri;
Expand All @@ -34,33 +33,30 @@
import android.telephony.PhoneNumberUtils;
import android.text.Editable;
import android.text.InputType;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.text.style.RelativeSizeSpan;
import android.util.Log;
import android.view.ContextMenu;
import android.view.ContextThemeWrapper;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnFocusChangeListener;
import android.view.View.OnKeyListener;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.TextView;
import android.widget.Toast;

import com.google.protobuf.ByteString;

import org.thoughtcrime.securesms.components.EmojiDrawer;
import org.thoughtcrime.securesms.components.EmojiToggle;
import org.thoughtcrime.securesms.components.SendButton;
import org.thoughtcrime.securesms.contacts.ContactAccessor;
import org.thoughtcrime.securesms.contacts.ContactAccessor.ContactData;
import org.thoughtcrime.securesms.crypto.KeyExchangeInitiator;
Expand Down Expand Up @@ -113,6 +109,7 @@
import org.whispersystems.textsecure.api.push.PushAddress;

import java.io.IOException;
import java.util.LinkedList;
import java.util.List;

import static org.thoughtcrime.securesms.database.GroupDatabase.GroupRecord;
Expand Down Expand Up @@ -147,14 +144,10 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
private static final int PICK_CONTACT_INFO = 4;
private static final int GROUP_EDIT = 5;

private static final int SEND_ATTRIBUTES[] = new int[]{R.attr.conversation_send_button_push,
R.attr.conversation_send_button_sms_secure,
R.attr.conversation_send_button_sms_insecure};

private MasterSecret masterSecret;
private EditText composeText;
private ImageButton sendButton;
private TextView charactersLeft;
private MasterSecret masterSecret;
private EditText composeText;
private SendButton sendButton;
private TextView charactersLeft;

private AttachmentTypeSelectorAdapter attachmentAdapter;
private AttachmentManager attachmentManager;
Expand Down Expand Up @@ -317,49 +310,6 @@ public boolean onOptionsItemSelected(MenuItem item) {
return false;
}

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
if (isEncryptedConversation && isSingleConversation()) {
SessionStore sessionStore = new TextSecureSessionStore(this, masterSecret);
Recipient primaryRecipient = getRecipients() == null ? null : getRecipients().getPrimaryRecipient();
boolean isPushDestination = DirectoryHelper.isPushDestination(this, getRecipients());
boolean isSecureDestination = isSingleConversation() && sessionStore.containsSession(primaryRecipient.getRecipientId(),
PushAddress.DEFAULT_DEVICE_ID);

getMenuInflater().inflate(R.menu.conversation_button_context, menu);

if (attachmentManager.isAttachmentPresent()) {
menu.removeItem(R.id.menu_context_send_encrypted_sms);
menu.removeItem(R.id.menu_context_send_unencrypted_sms);
} else {
menu.removeItem(R.id.menu_context_send_encrypted_mms);
menu.removeItem(R.id.menu_context_send_unencrypted_mms);
}

if (!isPushDestination) {
menu.removeItem(R.id.menu_context_send_push);
}

if (!isSecureDestination) {
menu.removeItem(R.id.menu_context_send_encrypted_mms);
menu.removeItem(R.id.menu_context_send_encrypted_sms);
}
}
}

@Override
public boolean onContextItemSelected(android.view.MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_context_send_push: sendMessage(false, false); return true;
case R.id.menu_context_send_encrypted_mms:
case R.id.menu_context_send_encrypted_sms: sendMessage(false, true); return true;
case R.id.menu_context_send_unencrypted_mms:
case R.id.menu_context_send_unencrypted_sms: sendMessage(true, true); return true;
}

return false;
}

@Override
public void onBackPressed() {
if (emojiDrawer.getVisibility() == View.VISIBLE) {
Expand Down Expand Up @@ -700,7 +650,6 @@ protected void onPostExecute(List<Draft> drafts) {
}

private void initializeSecurity() {
TypedArray drawables = obtainStyledAttributes(SEND_ATTRIBUTES);
SessionStore sessionStore = new TextSecureSessionStore(this, masterSecret);
Recipient primaryRecipient = getRecipients() == null ? null : getRecipients().getPrimaryRecipient();
boolean isPushDestination = DirectoryHelper.isPushDestination(this, getRecipients());
Expand All @@ -715,27 +664,21 @@ private void initializeSecurity() {
this.characterCalculator = new CharacterCalculator();
}

sendButton.initializeAvailableTransports(!recipients.isSingleRecipient() || attachmentManager.isAttachmentPresent());
if (!isPushDestination ) sendButton.disableTransport("textsecure");
if (!isSecureDestination) sendButton.disableTransport("secure_sms");

if (isPushDestination) {
sendButton.setImageDrawable(drawables.getDrawable(0));
setComposeHint(getString(R.string.conversation_activity__type_message_push));
sendButton.setDefaultTransport("textsecure");
} else if (isSecureDestination) {
sendButton.setImageDrawable(drawables.getDrawable(1));
setComposeHint(attachmentManager.isAttachmentPresent() ?
getString(R.string.conversation_activity__type_message_mms_secure) :
getString(R.string.conversation_activity__type_message_sms_secure));
sendButton.setDefaultTransport("secure_sms");
} else {
sendButton.setImageDrawable(drawables.getDrawable(2));
setComposeHint((attachmentManager.isAttachmentPresent() || !recipients.isSingleRecipient()) ?
getString(R.string.conversation_activity__type_message_mms_insecure) :
getString(R.string.conversation_activity__type_message_sms_insecure));
sendButton.setDefaultTransport("insecure_sms");
}

drawables.recycle();

calculateCharactersRemaining();
}


private void initializeMmsEnabledCheck() {
new AsyncTask<Void, Void, Boolean>() {
@Override
Expand Down Expand Up @@ -763,7 +706,7 @@ private void initializeResources() {
threadId = getIntent().getLongExtra(THREAD_ID_EXTRA, -1);
distributionType = getIntent().getIntExtra(DISTRIBUTION_TYPE_EXTRA,
ThreadDatabase.DistributionTypes.DEFAULT);
sendButton = (ImageButton)findViewById(R.id.send_button);
sendButton = (SendButton)findViewById(R.id.send_button);
composeText = (EditText)findViewById(R.id.embedded_text_editor);
masterSecret = getIntent().getParcelableExtra(MASTER_SECRET_EXTRA);
charactersLeft = (TextView)findViewById(R.id.space_left);
Expand All @@ -782,6 +725,7 @@ private void initializeResources() {

sendButton.setOnClickListener(sendButtonListener);
sendButton.setEnabled(true);
sendButton.setComposeTextView(composeText);
composeText.setOnKeyListener(composeKeyPressedListener);
composeText.addTextChangedListener(composeKeyPressedListener);
composeText.setOnEditorActionListener(sendButtonListener);
Expand All @@ -796,8 +740,6 @@ public void onModified(Recipient recipient) {
initializeTitleBar();
}
});

registerForContextMenu(sendButton);
}

private void initializeReceivers() {
Expand Down Expand Up @@ -1056,20 +998,20 @@ private void sendComplete(long threadId) {
fragment.scrollToBottom();
}


private void sendMessage(boolean forcePlaintext, boolean forceSms) {
private void sendMessage() {
try {
final Recipients recipients = getRecipients();

if (recipients == null)
if (recipients == null) {
throw new RecipientFormattingException("Badly formatted");
}

if ((!recipients.isSingleRecipient() || recipients.isEmailRecipient()) && !isMmsEnabled) {
handleManualMmsRequired();
} else if (attachmentManager.isAttachmentPresent() || !recipients.isSingleRecipient() || recipients.isGroupRecipient() || recipients.isEmailRecipient()) {
sendMediaMessage(forcePlaintext, forceSms);
sendMediaMessage(sendButton.getSelectedTransport().isForcedPlaintext(), sendButton.getSelectedTransport().isForcedSms());
} else {
sendTextMessage(forcePlaintext, forceSms);
sendTextMessage(sendButton.getSelectedTransport().isForcedPlaintext(), sendButton.getSelectedTransport().isForcedSms());
}
} catch (RecipientFormattingException ex) {
Toast.makeText(ConversationActivity.this,
Expand Down Expand Up @@ -1171,7 +1113,7 @@ public void onClick(View v) {
private class SendButtonListener implements OnClickListener, TextView.OnEditorActionListener {
@Override
public void onClick(View v) {
sendMessage(false, false);
sendMessage();
}

@Override
Expand Down Expand Up @@ -1239,17 +1181,6 @@ public void setComposeText(String text) {
this.composeText.setText(text);
}

private void setComposeHint(String hint){
if (hint == null) {
this.composeText.setHint(null);
} else {
SpannableString span = new SpannableString(hint);
span.setSpan(new RelativeSizeSpan(0.8f), 0, hint.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
this.composeText.setHint(span);
this.sendButton.setContentDescription(hint);
}
}

@Override
public void onAttachmentChanged() {
initializeSecurity();
Expand Down

0 comments on commit 30232c1

Please sign in to comment.