@@ -5,7 +5,9 @@ package com.cheogram.android;
 
 import android.content.Context;
 import android.content.Intent;
+import android.graphics.drawable.BitmapDrawable;
 import android.graphics.drawable.Drawable;
+import android.graphics.drawable.Icon;
 import android.graphics.ImageDecoder;
 import android.graphics.Rect;
 import android.net.Uri;
@@ -27,6 +29,9 @@ import android.widget.TextView;
 
 import androidx.annotation.RequiresApi;
 import androidx.core.content.ContextCompat;
+import androidx.core.content.pm.ShortcutInfoCompat;
+import androidx.core.content.pm.ShortcutManagerCompat;
+import androidx.core.graphics.drawable.IconCompat;
 import androidx.databinding.DataBindingUtil;
 
 import com.google.common.io.ByteStreams;
@@ -57,6 +62,7 @@ import eu.siacs.conversations.entities.Conversation;
 import eu.siacs.conversations.entities.Message;
 import eu.siacs.conversations.persistance.FileBackend;
 import eu.siacs.conversations.services.XmppConnectionService;
+import eu.siacs.conversations.ui.ConversationsActivity;
 import eu.siacs.conversations.utils.Consumer;
 import eu.siacs.conversations.utils.MimeUtils;
 import eu.siacs.conversations.utils.UIHelper;
@@ -268,7 +274,7 @@ public class WebxdcPage implements ConversationPage {
 
 		binding.webview.loadUrl(baseUrl + "/index.html");
 
-		binding.actions.setAdapter(new ArrayAdapter<String>(context, R.layout.simple_list_item, new String[]{"Close"}) {
+		binding.actions.setAdapter(new ArrayAdapter<String>(context, R.layout.simple_list_item, new String[]{"Add to Home Screen", "Close"}) {
 			@Override
 			public View getView(int position, View convertView, ViewGroup parent) {
 				View v = super.getView(position, convertView, parent);
@@ -280,7 +286,25 @@ public class WebxdcPage implements ConversationPage {
 			}
 		});
 		binding.actions.setOnItemClickListener((parent, v, pos, id) -> {
-			remover.accept(WebxdcPage.this);
+			if (pos == 0) {
+				Intent intent = new Intent(xmppConnectionService, ConversationsActivity.class);
+				intent.setAction(ConversationsActivity.ACTION_VIEW_CONVERSATION);
+				intent.putExtra(ConversationsActivity.EXTRA_CONVERSATION, ((Conversation) source.getConversation()).getUuid());
+				intent.putExtra(ConversationsActivity.EXTRA_POST_INIT_ACTION, "webxdc");
+				intent.putExtra(ConversationsActivity.EXTRA_DOWNLOAD_UUID, source.getUuid());
+				intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
+
+				ShortcutInfoCompat.Builder builder = new ShortcutInfoCompat.Builder(xmppConnectionService, "webxdc:" + source.getUuid())
+					.setShortLabel(getTitle())
+					.setIntent(intent);
+				Drawable icon = getIcon();
+				if (icon != null && icon instanceof BitmapDrawable) {
+					builder = builder.setIcon(IconCompat.createFromIcon(Icon.createWithBitmap(((BitmapDrawable) icon).getBitmap())));
+				}
+				ShortcutManagerCompat.requestPinShortcut(xmppConnectionService, builder.build(), null);
+			} else {
+				remover.accept(WebxdcPage.this);
+			}
 		});
 
 		return getView();
  
  
  
    
    @@ -72,6 +72,7 @@ import androidx.viewpager.widget.PagerAdapter;
 import androidx.viewpager.widget.ViewPager;
 
 import com.cheogram.android.BobTransfer;
+import com.cheogram.android.WebxdcPage;
 
 import com.google.common.base.Optional;
 import com.google.common.collect.ImmutableList;
@@ -3034,6 +3035,16 @@ public class ConversationFragment extends XmppFragment
         }
         final Message message =
                 downloadUuid == null ? null : conversation.findMessageWithFileAndUuid(downloadUuid);
+        if ("webxdc".equals(postInitAction)) {
+            if (message == null) return;
+
+            Cid webxdcCid = message.getFileParams().getCids().get(0);
+            WebxdcPage webxdc = new WebxdcPage(webxdcCid, message, activity.xmppConnectionService);
+            Conversation conversation = (Conversation) message.getConversation();
+            if (!conversation.switchToSession("webxdc\0" + message.getUuid())) {
+                conversation.startWebxdc(webxdc);
+            }
+        }
         if (message != null) {
             startDownloadable(message);
         }