Add download button on notification if applicable
This commit is contained in:
parent
dc8b467cf6
commit
edd58f19b4
|
@ -108,9 +108,9 @@ public class Conversation extends AbstractEntity implements Blockable {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void findMessagesWithFiles(OnMessageFound onMessageFound) {
|
public void findMessagesWithFiles(final OnMessageFound onMessageFound) {
|
||||||
synchronized (this.messages) {
|
synchronized (this.messages) {
|
||||||
for (Message message : this.messages) {
|
for (final Message message : this.messages) {
|
||||||
if ((message.getType() == Message.TYPE_IMAGE || message.getType() == Message.TYPE_FILE)
|
if ((message.getType() == Message.TYPE_IMAGE || message.getType() == Message.TYPE_FILE)
|
||||||
&& message.getEncryption() != Message.ENCRYPTION_PGP) {
|
&& message.getEncryption() != Message.ENCRYPTION_PGP) {
|
||||||
onMessageFound.onMessageFound(message);
|
onMessageFound.onMessageFound(message);
|
||||||
|
@ -119,10 +119,10 @@ public class Conversation extends AbstractEntity implements Blockable {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Message findMessageWithFileAndUuid(String uuid) {
|
public Message findMessageWithFileAndUuid(final String uuid) {
|
||||||
synchronized (this.messages) {
|
synchronized (this.messages) {
|
||||||
for (Message message : this.messages) {
|
for (final Message message : this.messages) {
|
||||||
if (message.getType() == Message.TYPE_IMAGE
|
if ((message.getType() == Message.TYPE_IMAGE || message.getType() == Message.TYPE_FILE)
|
||||||
&& message.getEncryption() != Message.ENCRYPTION_PGP
|
&& message.getEncryption() != Message.ENCRYPTION_PGP
|
||||||
&& message.getUuid().equals(uuid)) {
|
&& message.getUuid().equals(uuid)) {
|
||||||
return message;
|
return message;
|
||||||
|
|
|
@ -44,7 +44,7 @@ import eu.siacs.conversations.utils.UIHelper;
|
||||||
|
|
||||||
public class NotificationService {
|
public class NotificationService {
|
||||||
|
|
||||||
private XmppConnectionService mXmppConnectionService;
|
private final XmppConnectionService mXmppConnectionService;
|
||||||
|
|
||||||
private final LinkedHashMap<String, ArrayList<Message>> notifications = new LinkedHashMap<>();
|
private final LinkedHashMap<String, ArrayList<Message>> notifications = new LinkedHashMap<>();
|
||||||
|
|
||||||
|
@ -56,7 +56,7 @@ public class NotificationService {
|
||||||
private boolean mIsInForeground;
|
private boolean mIsInForeground;
|
||||||
private long mLastNotification;
|
private long mLastNotification;
|
||||||
|
|
||||||
public NotificationService(XmppConnectionService service) {
|
public NotificationService(final XmppConnectionService service) {
|
||||||
this.mXmppConnectionService = service;
|
this.mXmppConnectionService = service;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -214,17 +214,17 @@ public class NotificationService {
|
||||||
private Builder buildMultipleConversation() {
|
private Builder buildMultipleConversation() {
|
||||||
final Builder mBuilder = new NotificationCompat.Builder(
|
final Builder mBuilder = new NotificationCompat.Builder(
|
||||||
mXmppConnectionService);
|
mXmppConnectionService);
|
||||||
NotificationCompat.InboxStyle style = new NotificationCompat.InboxStyle();
|
final NotificationCompat.InboxStyle style = new NotificationCompat.InboxStyle();
|
||||||
style.setBigContentTitle(notifications.size()
|
style.setBigContentTitle(notifications.size()
|
||||||
+ " "
|
+ " "
|
||||||
+ mXmppConnectionService
|
+ mXmppConnectionService
|
||||||
.getString(R.string.unread_conversations));
|
.getString(R.string.unread_conversations));
|
||||||
final StringBuilder names = new StringBuilder();
|
final StringBuilder names = new StringBuilder();
|
||||||
Conversation conversation = null;
|
Conversation conversation = null;
|
||||||
for (ArrayList<Message> messages : notifications.values()) {
|
for (final ArrayList<Message> messages : notifications.values()) {
|
||||||
if (messages.size() > 0) {
|
if (messages.size() > 0) {
|
||||||
conversation = messages.get(0).getConversation();
|
conversation = messages.get(0).getConversation();
|
||||||
String name = conversation.getName();
|
final String name = conversation.getName();
|
||||||
style.addLine(Html.fromHtml("<b>" + name + "</b> "
|
style.addLine(Html.fromHtml("<b>" + name + "</b> "
|
||||||
+ UIHelper.getMessagePreview(mXmppConnectionService,messages.get(0)).first));
|
+ UIHelper.getMessagePreview(mXmppConnectionService,messages.get(0)).first));
|
||||||
names.append(name);
|
names.append(name);
|
||||||
|
@ -241,8 +241,7 @@ public class NotificationService {
|
||||||
mBuilder.setContentText(names.toString());
|
mBuilder.setContentText(names.toString());
|
||||||
mBuilder.setStyle(style);
|
mBuilder.setStyle(style);
|
||||||
if (conversation != null) {
|
if (conversation != null) {
|
||||||
mBuilder.setContentIntent(createContentIntent(conversation
|
mBuilder.setContentIntent(createContentIntent(conversation));
|
||||||
.getUuid()));
|
|
||||||
}
|
}
|
||||||
return mBuilder;
|
return mBuilder;
|
||||||
}
|
}
|
||||||
|
@ -256,14 +255,24 @@ public class NotificationService {
|
||||||
mBuilder.setLargeIcon(mXmppConnectionService.getAvatarService()
|
mBuilder.setLargeIcon(mXmppConnectionService.getAvatarService()
|
||||||
.get(conversation, getPixel(64)));
|
.get(conversation, getPixel(64)));
|
||||||
mBuilder.setContentTitle(conversation.getName());
|
mBuilder.setContentTitle(conversation.getName());
|
||||||
final Message message;
|
Message message;
|
||||||
if ((message = getImage(messages)) != null) {
|
if ((message = getImage(messages)) != null) {
|
||||||
modifyForImage(mBuilder, message, messages, notify);
|
modifyForImage(mBuilder, message, messages, notify);
|
||||||
} else {
|
} else {
|
||||||
modifyForTextOnly(mBuilder, messages, notify);
|
modifyForTextOnly(mBuilder, messages, notify);
|
||||||
}
|
}
|
||||||
mBuilder.setContentIntent(createContentIntent(conversation
|
if ((message = getFirstDownloadableMessage(messages)) != null) {
|
||||||
.getUuid()));
|
mBuilder.addAction(
|
||||||
|
R.drawable.ic_action_download,
|
||||||
|
mXmppConnectionService.getResources().getString(
|
||||||
|
message.getType() == Message.TYPE_IMAGE ?
|
||||||
|
R.string.download_image :
|
||||||
|
R.string.download_file
|
||||||
|
),
|
||||||
|
createDownloadIntent(message)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
mBuilder.setContentIntent(createContentIntent(conversation));
|
||||||
}
|
}
|
||||||
return mBuilder;
|
return mBuilder;
|
||||||
}
|
}
|
||||||
|
@ -303,7 +312,7 @@ public class NotificationService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Message getImage(final ArrayList<Message> messages) {
|
private Message getImage(final Iterable<Message> messages) {
|
||||||
for (final Message message : messages) {
|
for (final Message message : messages) {
|
||||||
if (message.getType() == Message.TYPE_IMAGE
|
if (message.getType() == Message.TYPE_IMAGE
|
||||||
&& message.getDownloadable() == null
|
&& message.getDownloadable() == null
|
||||||
|
@ -314,7 +323,17 @@ public class NotificationService {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getMergedBodies(final ArrayList<Message> messages) {
|
private Message getFirstDownloadableMessage(final Iterable<Message> messages) {
|
||||||
|
for (final Message message : messages) {
|
||||||
|
if ((message.getType() == Message.TYPE_FILE || message.getType() == Message.TYPE_IMAGE) &&
|
||||||
|
message.getDownloadable() != null) {
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private CharSequence getMergedBodies(final ArrayList<Message> messages) {
|
||||||
final StringBuilder text = new StringBuilder();
|
final StringBuilder text = new StringBuilder();
|
||||||
for (int i = 0; i < messages.size(); ++i) {
|
for (int i = 0; i < messages.size(); ++i) {
|
||||||
text.append(UIHelper.getMessagePreview(mXmppConnectionService,messages.get(i)).first);
|
text.append(UIHelper.getMessagePreview(mXmppConnectionService,messages.get(i)).first);
|
||||||
|
@ -325,25 +344,39 @@ public class NotificationService {
|
||||||
return text.toString();
|
return text.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
private PendingIntent createContentIntent(final String conversationUuid) {
|
private PendingIntent createContentIntent(final String conversationUuid, final String downloadMessageUuid) {
|
||||||
final TaskStackBuilder stackBuilder = TaskStackBuilder
|
final TaskStackBuilder stackBuilder = TaskStackBuilder
|
||||||
.create(mXmppConnectionService);
|
.create(mXmppConnectionService);
|
||||||
stackBuilder.addParentStack(ConversationActivity.class);
|
stackBuilder.addParentStack(ConversationActivity.class);
|
||||||
|
|
||||||
final Intent viewConversationIntent = new Intent(mXmppConnectionService,
|
final Intent viewConversationIntent = new Intent(mXmppConnectionService,
|
||||||
ConversationActivity.class);
|
ConversationActivity.class);
|
||||||
|
if (downloadMessageUuid != null) {
|
||||||
|
viewConversationIntent.setAction(ConversationActivity.ACTION_DOWNLOAD);
|
||||||
|
} else {
|
||||||
viewConversationIntent.setAction(Intent.ACTION_VIEW);
|
viewConversationIntent.setAction(Intent.ACTION_VIEW);
|
||||||
|
}
|
||||||
if (conversationUuid != null) {
|
if (conversationUuid != null) {
|
||||||
viewConversationIntent.putExtra(ConversationActivity.CONVERSATION,
|
viewConversationIntent.putExtra(ConversationActivity.CONVERSATION, conversationUuid);
|
||||||
conversationUuid);
|
|
||||||
viewConversationIntent.setType(ConversationActivity.VIEW_CONVERSATION);
|
viewConversationIntent.setType(ConversationActivity.VIEW_CONVERSATION);
|
||||||
}
|
}
|
||||||
|
if (downloadMessageUuid != null) {
|
||||||
|
viewConversationIntent.putExtra(ConversationActivity.MESSAGE, downloadMessageUuid);
|
||||||
|
}
|
||||||
|
|
||||||
stackBuilder.addNextIntent(viewConversationIntent);
|
stackBuilder.addNextIntent(viewConversationIntent);
|
||||||
|
|
||||||
return stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
|
return stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private PendingIntent createDownloadIntent(final Message message) {
|
||||||
|
return createContentIntent(message.getConversationUuid(), message.getUuid());
|
||||||
|
}
|
||||||
|
|
||||||
|
private PendingIntent createContentIntent(final Conversation conversation) {
|
||||||
|
return createContentIntent(conversation.getUuid(), null);
|
||||||
|
}
|
||||||
|
|
||||||
private PendingIntent createDeleteIntent() {
|
private PendingIntent createDeleteIntent() {
|
||||||
final Intent intent = new Intent(mXmppConnectionService,
|
final Intent intent = new Intent(mXmppConnectionService,
|
||||||
XmppConnectionService.class);
|
XmppConnectionService.class);
|
||||||
|
@ -445,7 +478,7 @@ public class NotificationService {
|
||||||
mBuilder.setOngoing(true);
|
mBuilder.setOngoing(true);
|
||||||
//mBuilder.setLights(0xffffffff, 2000, 4000);
|
//mBuilder.setLights(0xffffffff, 2000, 4000);
|
||||||
mBuilder.setSmallIcon(R.drawable.ic_stat_alert_warning);
|
mBuilder.setSmallIcon(R.drawable.ic_stat_alert_warning);
|
||||||
TaskStackBuilder stackBuilder = TaskStackBuilder.create(mXmppConnectionService);
|
final TaskStackBuilder stackBuilder = TaskStackBuilder.create(mXmppConnectionService);
|
||||||
stackBuilder.addParentStack(ConversationActivity.class);
|
stackBuilder.addParentStack(ConversationActivity.class);
|
||||||
|
|
||||||
final Intent manageAccountsIntent = new Intent(mXmppConnectionService,ManageAccountActivity.class);
|
final Intent manageAccountsIntent = new Intent(mXmppConnectionService,ManageAccountActivity.class);
|
||||||
|
|
|
@ -15,7 +15,6 @@ import android.os.SystemClock;
|
||||||
import android.provider.MediaStore;
|
import android.provider.MediaStore;
|
||||||
import android.support.v4.widget.SlidingPaneLayout;
|
import android.support.v4.widget.SlidingPaneLayout;
|
||||||
import android.support.v4.widget.SlidingPaneLayout.PanelSlideListener;
|
import android.support.v4.widget.SlidingPaneLayout.PanelSlideListener;
|
||||||
import android.util.Log;
|
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
@ -33,7 +32,6 @@ import net.java.otr4j.session.SessionStatus;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import eu.siacs.conversations.Config;
|
|
||||||
import eu.siacs.conversations.R;
|
import eu.siacs.conversations.R;
|
||||||
import eu.siacs.conversations.entities.Account;
|
import eu.siacs.conversations.entities.Account;
|
||||||
import eu.siacs.conversations.entities.Blockable;
|
import eu.siacs.conversations.entities.Blockable;
|
||||||
|
@ -50,8 +48,11 @@ import eu.siacs.conversations.xmpp.OnUpdateBlocklist;
|
||||||
public class ConversationActivity extends XmppActivity
|
public class ConversationActivity extends XmppActivity
|
||||||
implements OnAccountUpdate, OnConversationUpdate, OnRosterUpdate, OnUpdateBlocklist {
|
implements OnAccountUpdate, OnConversationUpdate, OnRosterUpdate, OnUpdateBlocklist {
|
||||||
|
|
||||||
|
public static final String ACTION_DOWNLOAD = "eu.siacs.conversations.action.DOWNLOAD";
|
||||||
|
|
||||||
public static final String VIEW_CONVERSATION = "viewConversation";
|
public static final String VIEW_CONVERSATION = "viewConversation";
|
||||||
public static final String CONVERSATION = "conversationUuid";
|
public static final String CONVERSATION = "conversationUuid";
|
||||||
|
public static final String MESSAGE = "messageUuid";
|
||||||
public static final String TEXT = "text";
|
public static final String TEXT = "text";
|
||||||
public static final String NICK = "nick";
|
public static final String NICK = "nick";
|
||||||
|
|
||||||
|
@ -823,10 +824,11 @@ public class ConversationActivity extends XmppActivity
|
||||||
setIntent(new Intent());
|
setIntent(new Intent());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleViewConversationIntent(Intent intent) {
|
private void handleViewConversationIntent(final Intent intent) {
|
||||||
String uuid = (String) intent.getExtras().get(CONVERSATION);
|
final String uuid = (String) intent.getExtras().get(CONVERSATION);
|
||||||
String text = intent.getExtras().getString(TEXT, "");
|
final String downloadUuid = (String) intent.getExtras().get(MESSAGE);
|
||||||
String nick = intent.getExtras().getString(NICK,null);
|
final String text = intent.getExtras().getString(TEXT, "");
|
||||||
|
final String nick = intent.getExtras().getString(NICK, null);
|
||||||
if (selectConversationByUuid(uuid)) {
|
if (selectConversationByUuid(uuid)) {
|
||||||
this.mConversationFragment.reInit(getSelectedConversation());
|
this.mConversationFragment.reInit(getSelectedConversation());
|
||||||
if (nick != null) {
|
if (nick != null) {
|
||||||
|
@ -839,6 +841,12 @@ public class ConversationActivity extends XmppActivity
|
||||||
if (mContentView instanceof SlidingPaneLayout) {
|
if (mContentView instanceof SlidingPaneLayout) {
|
||||||
updateActionBarTitle(true); //fixes bug where slp isn't properly closed yet
|
updateActionBarTitle(true); //fixes bug where slp isn't properly closed yet
|
||||||
}
|
}
|
||||||
|
if (downloadUuid != null) {
|
||||||
|
final Message message = mSelectedConversation.findMessageWithFileAndUuid(downloadUuid);
|
||||||
|
if (message != null) {
|
||||||
|
mConversationFragment.messageListAdapter.startDownloadable(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
BIN
src/main/res/drawable-hdpi/ic_action_download.png
Normal file
BIN
src/main/res/drawable-hdpi/ic_action_download.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 363 B |
BIN
src/main/res/drawable-mdpi/ic_action_download.png
Normal file
BIN
src/main/res/drawable-mdpi/ic_action_download.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 313 B |
BIN
src/main/res/drawable-xhdpi/ic_action_download.png
Normal file
BIN
src/main/res/drawable-xhdpi/ic_action_download.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 470 B |
BIN
src/main/res/drawable-xxhdpi/ic_action_download.png
Normal file
BIN
src/main/res/drawable-xxhdpi/ic_action_download.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 574 B |
|
@ -85,6 +85,7 @@
|
||||||
<string name="send_pgp_message">Send OpenPGP encrypted message</string>
|
<string name="send_pgp_message">Send OpenPGP encrypted message</string>
|
||||||
<string name="your_nick_has_been_changed">Your nickname has been changed</string>
|
<string name="your_nick_has_been_changed">Your nickname has been changed</string>
|
||||||
<string name="download_image">Download Image</string>
|
<string name="download_image">Download Image</string>
|
||||||
|
<string name="download_file">Download File</string>
|
||||||
<string name="image_offered_for_download"><i>Image file offered for download</i></string>
|
<string name="image_offered_for_download"><i>Image file offered for download</i></string>
|
||||||
<string name="send_unencrypted">Send unencrypted</string>
|
<string name="send_unencrypted">Send unencrypted</string>
|
||||||
<string name="decryption_failed">Decryption failed. Maybe you don’t have the proper private key.</string>
|
<string name="decryption_failed">Decryption failed. Maybe you don’t have the proper private key.</string>
|
||||||
|
|
Loading…
Reference in a new issue