turn send button in cancel button while in whisper mode

Daniel Gultsch created

Change summary

art/ic_send_cancel_away.svg                                       | 54 +
art/ic_send_cancel_dnd.svg                                        | 54 +
art/ic_send_cancel_offline.svg                                    | 54 +
art/ic_send_cancel_online.svg                                     | 54 +
art/render.rb                                                     |  4 
src/main/java/eu/siacs/conversations/ui/ConversationFragment.java | 42 
src/main/res/drawable-hdpi/ic_send_cancel_away.png                |  0 
src/main/res/drawable-hdpi/ic_send_cancel_dnd.png                 |  0 
src/main/res/drawable-hdpi/ic_send_cancel_offline.png             |  0 
src/main/res/drawable-hdpi/ic_send_cancel_online.png              |  0 
src/main/res/drawable-mdpi/ic_send_cancel_away.png                |  0 
src/main/res/drawable-mdpi/ic_send_cancel_dnd.png                 |  0 
src/main/res/drawable-mdpi/ic_send_cancel_offline.png             |  0 
src/main/res/drawable-mdpi/ic_send_cancel_online.png              |  0 
src/main/res/drawable-xhdpi/ic_send_cancel_away.png               |  0 
src/main/res/drawable-xhdpi/ic_send_cancel_dnd.png                |  0 
src/main/res/drawable-xhdpi/ic_send_cancel_offline.png            |  0 
src/main/res/drawable-xhdpi/ic_send_cancel_online.png             |  0 
src/main/res/drawable-xxhdpi/ic_send_cancel_away.png              |  0 
src/main/res/drawable-xxhdpi/ic_send_cancel_dnd.png               |  0 
src/main/res/drawable-xxhdpi/ic_send_cancel_offline.png           |  0 
src/main/res/drawable-xxhdpi/ic_send_cancel_online.png            |  0 
src/main/res/drawable-xxxhdpi/ic_send_cancel_away.png             |  0 
src/main/res/drawable-xxxhdpi/ic_send_cancel_dnd.png              |  0 
src/main/res/drawable-xxxhdpi/ic_send_cancel_offline.png          |  0 
src/main/res/drawable-xxxhdpi/ic_send_cancel_online.png           |  0 
26 files changed, 250 insertions(+), 12 deletions(-)

Detailed changes

art/ic_send_cancel_away.svg 🔗

@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48"
+   height="48"
+   viewBox="0 0 48 48"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.91 r13725"
+   sodipodi:docname="ic_send_cancel_away.svg">
+  <metadata
+     id="metadata10">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs8" />
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="956"
+     inkscape:window-height="507"
+     id="namedview6"
+     showgrid="false"
+     inkscape:zoom="4.9166667"
+     inkscape:cx="-8.3389831"
+     inkscape:cy="24"
+     inkscape:window-x="0"
+     inkscape:window-y="549"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg2" />
+  <path
+     d="M24 4C12.95 4 4 12.95 4 24s8.95 20 20 20 20-8.95 20-20S35.05 4 24 4zm10 27.17L31.17 34 24 26.83 16.83 34 14 31.17 21.17 24 14 16.83 16.83 14 24 21.17 31.17 14 34 16.83 26.83 24 34 31.17z"
+     id="path4"
+     style="fill:#ff9800;fill-opacity:0.627451" />
+</svg>

art/ic_send_cancel_dnd.svg 🔗

@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48"
+   height="48"
+   viewBox="0 0 48 48"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.91 r13725"
+   sodipodi:docname="ic_send_cancel_dnd.svg">
+  <metadata
+     id="metadata10">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs8" />
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="956"
+     inkscape:window-height="507"
+     id="namedview6"
+     showgrid="false"
+     inkscape:zoom="4.9166667"
+     inkscape:cx="-8.3389831"
+     inkscape:cy="24"
+     inkscape:window-x="0"
+     inkscape:window-y="549"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg2" />
+  <path
+     d="M24 4C12.95 4 4 12.95 4 24s8.95 20 20 20 20-8.95 20-20S35.05 4 24 4zm10 27.17L31.17 34 24 26.83 16.83 34 14 31.17 21.17 24 14 16.83 16.83 14 24 21.17 31.17 14 34 16.83 26.83 24 34 31.17z"
+     id="path4"
+     style="fill:#e51c23;fill-opacity:0.627451" />
+</svg>

art/ic_send_cancel_offline.svg 🔗

@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48"
+   height="48"
+   viewBox="0 0 48 48"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.91 r13725"
+   sodipodi:docname="ic_send_cancel_offline.svg">
+  <metadata
+     id="metadata10">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs8" />
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1920"
+     inkscape:window-height="1080"
+     id="namedview6"
+     showgrid="false"
+     inkscape:zoom="4.9166667"
+     inkscape:cx="-7.9322034"
+     inkscape:cy="24"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg2" />
+  <path
+     d="M24 4C12.95 4 4 12.95 4 24s8.95 20 20 20 20-8.95 20-20S35.05 4 24 4zm10 27.17L31.17 34 24 26.83 16.83 34 14 31.17 21.17 24 14 16.83 16.83 14 24 21.17 31.17 14 34 16.83 26.83 24 34 31.17z"
+     id="path4"
+     style="fill:#000000;fill-opacity:0.627451" />
+</svg>

art/ic_send_cancel_online.svg 🔗

@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48"
+   height="48"
+   viewBox="0 0 48 48"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.91 r13725"
+   sodipodi:docname="ic_send_cancel_online.svg">
+  <metadata
+     id="metadata10">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs8" />
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="956"
+     inkscape:window-height="507"
+     id="namedview6"
+     showgrid="false"
+     inkscape:zoom="4.9166667"
+     inkscape:cx="-8.3389831"
+     inkscape:cy="24"
+     inkscape:window-x="0"
+     inkscape:window-y="549"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg2" />
+  <path
+     d="M24 4C12.95 4 4 12.95 4 24s8.95 20 20 20 20-8.95 20-20S35.05 4 24 4zm10 27.17L31.17 34 24 26.83 16.83 34 14 31.17 21.17 24 14 16.83 16.83 14 24 21.17 31.17 14 34 16.83 26.83 24 34 31.17z"
+     id="path4"
+     style="fill:#259b24;fill-opacity:0.627451" />
+</svg>

art/render.rb 🔗

@@ -26,6 +26,10 @@ images = {
         'ic_send_voice_offline.svg' => ['ic_send_voice_offline', 36],
         'ic_send_voice_away.svg' => ['ic_send_voice_away', 36],
         'ic_send_voice_dnd.svg' => ['ic_send_voice_dnd', 36],
+	'ic_send_cancel_online.svg' => ['ic_send_cancel_online', 36],
+        'ic_send_cancel_offline.svg' => ['ic_send_cancel_offline', 36],
+        'ic_send_cancel_away.svg' => ['ic_send_cancel_away', 36],
+        'ic_send_cancel_dnd.svg' => ['ic_send_cancel_dnd', 36],
 	}
 images.each do |source, result|
 	resolutions.each do |name, factor|

src/main/java/eu/siacs/conversations/ui/ConversationFragment.java 🔗

@@ -245,6 +245,13 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa
 					case RECORD_VOICE:
 						activity.attachFile(ConversationActivity.ATTACHMENT_CHOICE_RECORD_VOICE);
 						break;
+					case CANCEL:
+						if (conversation != null && conversation.getMode() == Conversation.MODE_MULTI) {
+							conversation.setNextCounterpart(null);
+							updateChatMsgHint();
+							updateSendButton();
+						}
+						break;
 					default:
 						sendMessage();
 				}
@@ -257,8 +264,7 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa
 
 		@Override
 		public void onClick(View v) {
-			Intent intent = new Intent(getActivity(),
-					ConferenceDetailsActivity.class);
+			Intent intent = new Intent(getActivity(), ConferenceDetailsActivity.class);
 			intent.setAction(ConferenceDetailsActivity.ACTION_VIEW_MUC);
 			intent.putExtra("uuid", conversation.getUuid());
 			startActivity(intent);
@@ -271,13 +277,6 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa
 		if (this.conversation == null) {
 			return;
 		}
-		if (mEditMessage.getText().length() < 1) {
-			if (this.conversation.getMode() == Conversation.MODE_MULTI) {
-				conversation.setNextCounterpart(null);
-				updateChatMsgHint();
-			}
-			return;
-		}
 		Message message = new Message(conversation, mEditMessage.getText()
 				.toString(), conversation.getNextEncryption(activity
 				.forceEncryption()));
@@ -558,6 +557,7 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa
 		this.mEditMessage.setText("");
 		this.conversation.setNextCounterpart(counterpart);
 		updateChatMsgHint();
+		updateSendButton();
 	}
 
 	protected void highlightInConference(String nick) {
@@ -808,7 +808,7 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa
 		updateChatMsgHint();
 	}
 
-	enum SendButtonAction {TEXT, TAKE_PHOTO, SEND_LOCATION, RECORD_VOICE}
+	enum SendButtonAction {TEXT, TAKE_PHOTO, SEND_LOCATION, RECORD_VOICE, CANCEL}
 
 	private int getSendButtonImageResource(SendButtonAction action, int status) {
 		switch (action) {
@@ -864,6 +864,19 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa
 					default:
 						return R.drawable.ic_send_location_offline;
 				}
+			case CANCEL:
+				switch (status) {
+					case Presences.CHAT:
+					case Presences.ONLINE:
+						return R.drawable.ic_send_cancel_online;
+					case Presences.AWAY:
+						return R.drawable.ic_send_cancel_away;
+					case Presences.XA:
+					case Presences.DND:
+						return R.drawable.ic_send_cancel_dnd;
+					default:
+						return R.drawable.ic_send_cancel_offline;
+				}
 		}
 		return R.drawable.ic_send_text_offline;
 	}
@@ -872,10 +885,15 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa
 		final Conversation c = this.conversation;
 		final SendButtonAction action;
 		final int status;
+		final boolean empty = this.mEditMessage == null || this.mEditMessage.getText().length() == 0;
 		if (c.getMode() == Conversation.MODE_MULTI) {
-			action = SendButtonAction.TEXT;
+			if (empty && c.getNextCounterpart() != null) {
+				action = SendButtonAction.CANCEL;
+			} else {
+				action = SendButtonAction.TEXT;
+			}
 		} else {
-			if (this.mEditMessage == null || this.mEditMessage.getText().length() == 0) {
+			if (empty) {
 				String setting = activity.getPreferences().getString("quick_action","recent");
 				if (setting.equals("recent")) {
 					setting = activity.getPreferences().getString("recently_used_quick_action","text");