186186import org.telegram.messenger.browser.Browser;
187187import org.telegram.messenger.camera.CameraView;
188188import org.telegram.messenger.forkgram.ForkUtils;
189+ import org.telegram.messenger.forkgram.ExtractMediaFromPreview;
189190import org.telegram.messenger.support.LongSparseIntArray;
190191import org.telegram.messenger.utils.OnPostDrawView;
191192import org.telegram.messenger.utils.PhotoUtilities;
@@ -802,6 +803,9 @@ public void reloadPinnedMessages() {
802803 private TLObject pinnedImageLocationObject;
803804 private int linkSearchRequestId;
804805 public TLRPC.WebPage foundWebPage;
806+ public boolean forkExtractMediaActive;
807+ public TLRPC.WebPage forkExtractMediaFrozenWebPage;
808+ private ImageView forkExtractMediaButton;
805809 private ArrayList<CharSequence> foundUrls;
806810 private String pendingLinkSearchString;
807811 private Runnable pendingWebPageTimeoutRunnable;
@@ -8311,6 +8315,8 @@ public void setVisibility(int visibility) {
83118315 } else if (fieldPanelShown == 3) {
83128316 openAnotherForward();
83138317 } else if (fieldPanelShown == 4) {
8318+ forkExtractMediaActive = false;
8319+ forkExtractMediaFrozenWebPage = null;
83148320 foundWebPage = null;
83158321 if (messagePreviewParams != null) {
83168322 messagePreviewParams.updateLink(currentAccount, null, null, replyingMessageObject == threadMessageObject ? null : replyingMessageObject, replyingQuote, editingMessageObject);
@@ -8329,6 +8335,15 @@ public void setVisibility(int visibility) {
83298335 }
83308336 });
83318337
8338+ forkExtractMediaButton = new ImageView(context);
8339+ forkExtractMediaButton.setImageResource(R.drawable.input_extract_media);
8340+ forkExtractMediaButton.setScaleType(ImageView.ScaleType.CENTER);
8341+ forkExtractMediaButton.setColorFilter(new PorterDuffColorFilter(getThemedColor(Theme.key_glass_defaultIcon), PorterDuff.Mode.MULTIPLY));
8342+ forkExtractMediaButton.setBackgroundDrawable(Theme.createSelectorDrawable(getThemedColor(Theme.key_listSelector), 1, AndroidUtilities.dp(19)));
8343+ forkExtractMediaButton.setContentDescription(LocaleController.getString(R.string.ExtractMediaFromPreview));
8344+ forkExtractMediaButton.setVisibility(View.GONE);
8345+ chatActivityEnterTopView.addView(forkExtractMediaButton, LayoutHelper.createFrame(52, 46, Gravity.RIGHT | Gravity.TOP, 0, 0.5f, 52, 0));
8346+ forkExtractMediaButton.setOnClickListener(v -> forkToggleExtractMedia());
83328347 contentView.addView(
83338348 suggestEmojiPanel = new SuggestEmojiView(context, currentAccount, chatActivityEnterView, themeDelegate),
83348349 LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 160, Gravity.LEFT | Gravity.BOTTOM, 7, 0, 7, 0)
@@ -10924,6 +10939,59 @@ public void fallbackFieldPanel() {
1092410939 }
1092510940 }
1092610941
10942+ public TLRPC.WebPage forkExtractMediaEffectiveWebPage() {
10943+ return forkExtractMediaFrozenWebPage != null ? forkExtractMediaFrozenWebPage : foundWebPage;
10944+ }
10945+
10946+ public boolean forkExtractMediaAvailable() {
10947+ return fieldPanelShown == 4 && ExtractMediaFromPreview.hasMedia(forkExtractMediaEffectiveWebPage());
10948+ }
10949+
10950+ public boolean forkIsExtractMediaActive() {
10951+ return forkExtractMediaActive && forkExtractMediaFrozenWebPage != null;
10952+ }
10953+
10954+ private void forkToggleExtractMedia() {
10955+ if (forkExtractMediaActive) {
10956+ forkExtractMediaActive = false;
10957+ forkExtractMediaFrozenWebPage = null;
10958+ if (chatActivityEnterView != null) {
10959+ searchLinks(chatActivityEnterView.getFieldText(), true);
10960+ }
10961+ } else if (!forkExtractMediaAvailable()) {
10962+ forkExtractMediaActive = false;
10963+ forkExtractMediaFrozenWebPage = null;
10964+ } else {
10965+ forkExtractMediaActive = true;
10966+ forkExtractMediaFrozenWebPage = foundWebPage;
10967+ }
10968+ forkUpdateExtractMediaButton();
10969+ }
10970+
10971+ public void forkUpdateExtractMediaButton() {
10972+ if (forkExtractMediaButton == null) {
10973+ return;
10974+ }
10975+ boolean visible = forkExtractMediaAvailable() || forkIsExtractMediaActive();
10976+ forkExtractMediaButton.setVisibility(visible ? View.VISIBLE : View.GONE);
10977+ int color = getThemedColor(forkExtractMediaActive ? Theme.key_chat_messageLinkIn : Theme.key_glass_defaultIcon);
10978+ forkExtractMediaButton.setColorFilter(new PorterDuffColorFilter(color, PorterDuff.Mode.MULTIPLY));
10979+ }
10980+
10981+ public void forkResetExtractMediaAfterSend() {
10982+ forkExtractMediaActive = false;
10983+ forkExtractMediaFrozenWebPage = null;
10984+ foundWebPage = null;
10985+ if (messagePreviewParams != null) {
10986+ messagePreviewParams.updateLink(currentAccount, null, "", null, null, null);
10987+ }
10988+ if (chatActivityEnterView != null) {
10989+ chatActivityEnterView.setWebPage(null, true);
10990+ }
10991+ fallbackFieldPanel();
10992+ forkUpdateExtractMediaButton();
10993+ }
10994+
1092710995 private boolean keyboardWasVisible;
1092810996 private void openForwardingPreview(int startTab) {
1092910997 if (messagePreviewParams == null || forwardingPreviewView != null) {
@@ -14051,6 +14119,9 @@ private void editResetMediaManual() {
1405114119 }
1405214120
1405314121 public void checkEditLinkRemoved(final CharSequence charSequence) {
14122+ if (forkExtractMediaFrozenWebPage != null) {
14123+ return;
14124+ }
1405414125 final boolean manual = editingMessageObject != null && editingMessageObject.messageOwner != null && editingMessageObject.messageOwner.media != null && editingMessageObject.messageOwner.media.webpage != null && !(editingMessageObject.messageOwner.media.webpage instanceof TLRPC.TL_webPageEmpty) && editingMessageObject.messageOwner.media.manual;
1405514126 if (messagePreviewParams != null && editingMessageObject != null && (editingMessageObject.type == MessageObject.TYPE_TEXT || editingMessageObject.type == MessageObject.TYPE_EMOJIS) && foundWebPage != null) {
1405614127 if (messagePreviewParams.hasLink(charSequence, foundWebPage.url)) {
@@ -14071,6 +14142,9 @@ public void checkEditLinkRemoved(final CharSequence charSequence) {
1407114142 }
1407214143
1407314144 public void searchLinks(final CharSequence charSequence, final boolean force) {
14145+ if (forkExtractMediaFrozenWebPage != null) {
14146+ return;
14147+ }
1407414148 if (currentEncryptedChat != null && getMessagesController().secretWebpagePreview == 0 || editingMessageObject != null && (!editingMessageObject.isWebpage() || editingMessageObject.messageOwner.media.webpage instanceof TLRPC.TL_webPagePending)) {
1407514149 return;
1407614150 }
@@ -14219,6 +14293,9 @@ public void searchLinks(final CharSequence charSequence, final boolean force) {
1421914293 if (waitingForWebpageId != myId) {
1422014294 return;
1422114295 }
14296+ if (forkExtractMediaFrozenWebPage != null) {
14297+ return;
14298+ }
1422214299 if (success) {
1422314300 foundWebPage = webpage;
1422414301 foundWebPage.display_url = req.message;
@@ -15503,6 +15580,7 @@ public void showFieldPanel(boolean show, MessageObject messageObjectToReply, Mes
1550315580 if (chatActivityEnterView != null) {
1550415581 chatActivityEnterView.updateSendButtonPaid();
1550515582 }
15583+ forkUpdateExtractMediaButton();
1550615584 }
1550715585
1550815586 private void moveScrollToLastMessage(boolean skipSponsored) {
@@ -23354,7 +23432,7 @@ public void didReceivedNotification(int id, int account, final Object... args) {
2335423432 updateVisibleRows();
2335523433 }
2335623434 } else if (id == NotificationCenter.didReceivedWebpagesInUpdates) {
23357- if (foundWebPage != null) {
23435+ if (foundWebPage != null && forkExtractMediaFrozenWebPage == null ) {
2335823436 LongSparseArray<TLRPC.WebPage> hashMap = (LongSparseArray<TLRPC.WebPage>) args[0];
2335923437 for (int a = 0; a < hashMap.size(); a++) {
2336023438 TLRPC.WebPage webPage = hashMap.valueAt(a);
0 commit comments