187187import org.telegram.messenger.browser.Browser;
188188import org.telegram.messenger.camera.CameraView;
189189import org.telegram.messenger.forkgram.ForkUtils;
190+ import org.telegram.messenger.forkgram.ExtractMediaFromPreview;
190191import org.telegram.messenger.support.LongSparseIntArray;
191192import org.telegram.messenger.utils.OnPostDrawView;
192193import org.telegram.messenger.utils.PhotoUtilities;
@@ -805,6 +806,9 @@ public void reloadPinnedMessages() {
805806 private TLObject pinnedImageLocationObject;
806807 private int linkSearchRequestId;
807808 public TLRPC.WebPage foundWebPage;
809+ public boolean forkExtractMediaActive;
810+ public TLRPC.WebPage forkExtractMediaFrozenWebPage;
811+ private ImageView forkExtractMediaButton;
808812 private ArrayList<CharSequence> foundUrls;
809813 private String pendingLinkSearchString;
810814 private Runnable pendingWebPageTimeoutRunnable;
@@ -8382,6 +8386,8 @@ public void setVisibility(int visibility) {
83828386 } else if (fieldPanelShown == 3) {
83838387 openAnotherForward();
83848388 } else if (fieldPanelShown == 4) {
8389+ forkExtractMediaActive = false;
8390+ forkExtractMediaFrozenWebPage = null;
83858391 foundWebPage = null;
83868392 if (messagePreviewParams != null) {
83878393 messagePreviewParams.updateLink(currentAccount, null, null, replyingMessageObject == threadMessageObject ? null : replyingMessageObject, replyingQuote, editingMessageObject);
@@ -8400,6 +8406,16 @@ public void setVisibility(int visibility) {
84008406 }
84018407 });
84028408
8409+ forkExtractMediaButton = new ImageView(context);
8410+ forkExtractMediaButton.setImageResource(R.drawable.input_extract_media);
8411+ forkExtractMediaButton.setScaleType(ImageView.ScaleType.CENTER);
8412+ forkExtractMediaButton.setColorFilter(new PorterDuffColorFilter(getThemedColor(Theme.key_glass_defaultIcon), PorterDuff.Mode.MULTIPLY));
8413+ forkExtractMediaButton.setBackgroundDrawable(Theme.createSelectorDrawable(getThemedColor(Theme.key_listSelector), 1, AndroidUtilities.dp(19)));
8414+ forkExtractMediaButton.setContentDescription(LocaleController.getString(R.string.ExtractMediaFromPreview));
8415+ forkExtractMediaButton.setVisibility(View.GONE);
8416+ chatActivityEnterTopView.addView(forkExtractMediaButton, LayoutHelper.createFrame(52, 46, Gravity.RIGHT | Gravity.TOP, 0, 0.5f, 52, 0));
8417+ forkExtractMediaButton.setOnClickListener(v -> forkToggleExtractMedia());
8418+
84038419 replyNameTextView = new SimpleTextView(context);
84048420 replyNameTextView.setTextSize(14);
84058421 replyNameTextView.setTextColor(getThemedColor(Theme.key_chat_replyPanelName));
@@ -11029,6 +11045,59 @@ public void fallbackFieldPanel() {
1102911045 }
1103011046 }
1103111047
11048+ public TLRPC.WebPage forkExtractMediaEffectiveWebPage() {
11049+ return forkExtractMediaFrozenWebPage != null ? forkExtractMediaFrozenWebPage : foundWebPage;
11050+ }
11051+
11052+ public boolean forkExtractMediaAvailable() {
11053+ return fieldPanelShown == 4 && ExtractMediaFromPreview.hasMedia(forkExtractMediaEffectiveWebPage());
11054+ }
11055+
11056+ public boolean forkIsExtractMediaActive() {
11057+ return forkExtractMediaActive && forkExtractMediaFrozenWebPage != null;
11058+ }
11059+
11060+ private void forkToggleExtractMedia() {
11061+ if (forkExtractMediaActive) {
11062+ forkExtractMediaActive = false;
11063+ forkExtractMediaFrozenWebPage = null;
11064+ if (chatActivityEnterView != null) {
11065+ searchLinks(chatActivityEnterView.getFieldText(), true);
11066+ }
11067+ } else if (!forkExtractMediaAvailable()) {
11068+ forkExtractMediaActive = false;
11069+ forkExtractMediaFrozenWebPage = null;
11070+ } else {
11071+ forkExtractMediaActive = true;
11072+ forkExtractMediaFrozenWebPage = foundWebPage;
11073+ }
11074+ forkUpdateExtractMediaButton();
11075+ }
11076+
11077+ public void forkUpdateExtractMediaButton() {
11078+ if (forkExtractMediaButton == null) {
11079+ return;
11080+ }
11081+ boolean visible = forkExtractMediaAvailable() || forkIsExtractMediaActive();
11082+ forkExtractMediaButton.setVisibility(visible ? View.VISIBLE : View.GONE);
11083+ int color = getThemedColor(forkExtractMediaActive ? Theme.key_chat_messageLinkIn : Theme.key_glass_defaultIcon);
11084+ forkExtractMediaButton.setColorFilter(new PorterDuffColorFilter(color, PorterDuff.Mode.MULTIPLY));
11085+ }
11086+
11087+ public void forkResetExtractMediaAfterSend() {
11088+ forkExtractMediaActive = false;
11089+ forkExtractMediaFrozenWebPage = null;
11090+ foundWebPage = null;
11091+ if (messagePreviewParams != null) {
11092+ messagePreviewParams.updateLink(currentAccount, null, "", null, null, null);
11093+ }
11094+ if (chatActivityEnterView != null) {
11095+ chatActivityEnterView.setWebPage(null, true);
11096+ }
11097+ fallbackFieldPanel();
11098+ forkUpdateExtractMediaButton();
11099+ }
11100+
1103211101 private boolean keyboardWasVisible;
1103311102 private void openForwardingPreview(int startTab) {
1103411103 if (messagePreviewParams == null || forwardingPreviewView != null) {
@@ -14146,6 +14215,9 @@ private void editResetMediaManual() {
1414614215 }
1414714216
1414814217 public void checkEditLinkRemoved(final CharSequence charSequence) {
14218+ if (forkExtractMediaFrozenWebPage != null) {
14219+ return;
14220+ }
1414914221 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;
1415014222 if (messagePreviewParams != null && editingMessageObject != null && (editingMessageObject.type == MessageObject.TYPE_TEXT || editingMessageObject.type == MessageObject.TYPE_EMOJIS) && foundWebPage != null) {
1415114223 if (messagePreviewParams.hasLink(charSequence, foundWebPage.url)) {
@@ -14166,6 +14238,9 @@ public void checkEditLinkRemoved(final CharSequence charSequence) {
1416614238 }
1416714239
1416814240 public void searchLinks(final CharSequence charSequence, final boolean force) {
14241+ if (forkExtractMediaFrozenWebPage != null) {
14242+ return;
14243+ }
1416914244 if (currentEncryptedChat != null && getMessagesController().secretWebpagePreview == 0 || editingMessageObject != null && (!editingMessageObject.isWebpage() || editingMessageObject.messageOwner.media.webpage instanceof TLRPC.TL_webPagePending)) {
1417014245 return;
1417114246 }
@@ -14314,6 +14389,9 @@ public void searchLinks(final CharSequence charSequence, final boolean force) {
1431414389 if (waitingForWebpageId != myId) {
1431514390 return;
1431614391 }
14392+ if (forkExtractMediaFrozenWebPage != null) {
14393+ return;
14394+ }
1431714395 if (success) {
1431814396 foundWebPage = webpage;
1431914397 foundWebPage.display_url = req.message;
@@ -15540,6 +15618,7 @@ public void showFieldPanel(boolean show, MessageObject messageObjectToReply, Mes
1554015618 if (chatActivityEnterView != null) {
1554115619 chatActivityEnterView.updateSendButtonPaid();
1554215620 }
15621+ forkUpdateExtractMediaButton();
1554315622 }
1554415623
1554515624 private void moveScrollToLastMessage(boolean skipSponsored) {
@@ -23378,7 +23457,7 @@ public void didReceivedNotification(int id, int account, final Object... args) {
2337823457 updateVisibleRows();
2337923458 }
2338023459 } else if (id == NotificationCenter.didReceivedWebpagesInUpdates) {
23381- if (foundWebPage != null) {
23460+ if (foundWebPage != null && forkExtractMediaFrozenWebPage == null ) {
2338223461 LongSparseArray<TLRPC.WebPage> hashMap = (LongSparseArray<TLRPC.WebPage>) args[0];
2338323462 for (int a = 0; a < hashMap.size(); a++) {
2338423463 TLRPC.WebPage webPage = hashMap.valueAt(a);
0 commit comments