allow save video sticker

This commit is contained in:
luvletter2333 2022-02-28 14:30:31 +08:00
parent 959f9dfc26
commit 9fd741ffa0
No known key found for this signature in database
GPG Key ID: A26A8880836E1978
3 changed files with 74 additions and 47 deletions

View File

@ -290,6 +290,7 @@ import cn.hutool.core.util.StrUtil;
import kotlin.Unit; import kotlin.Unit;
import tw.nekomimi.nekogram.ui.BottomBuilder; import tw.nekomimi.nekogram.ui.BottomBuilder;
import tw.nekomimi.nekogram.ui.MessageDetailsActivity; import tw.nekomimi.nekogram.ui.MessageDetailsActivity;
import tw.nekomimi.nekogram.ui.MessageHelper;
import tw.nekomimi.nekogram.utils.EnvUtil; import tw.nekomimi.nekogram.utils.EnvUtil;
import tw.nekomimi.nekogram.NekoConfig; import tw.nekomimi.nekogram.NekoConfig;
import tw.nekomimi.nekogram.NekoXConfig; import tw.nekomimi.nekogram.NekoXConfig;
@ -23131,38 +23132,6 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
MediaController.saveFile(path, getParentActivity(), messageObject.isVideo() ? 1 : 0, null, null); MediaController.saveFile(path, getParentActivity(), messageObject.isVideo() ? 1 : 0, null, null);
} }
private void saveStickerToGallery(MessageObject messageObject) {
String path = messageObject.messageOwner.attachPath;
if (!TextUtils.isEmpty(path)) {
File temp = new File(path);
if (!temp.exists()) {
path = null;
}
}
if (TextUtils.isEmpty(path)) {
path = FileLoader.getPathToMessage(messageObject.messageOwner).toString();
File temp = new File(path);
if (!temp.exists()) {
path = null;
}
}
if (TextUtils.isEmpty(path)) {
path = FileLoader.getPathToAttach(messageObject.getDocument(), true).toString();
}
if (!TextUtils.isEmpty(path)) {
try {
Bitmap image = BitmapFactory.decodeFile(path);
FileOutputStream stream = new FileOutputStream(path + ".png");
image.compress(Bitmap.CompressFormat.PNG, 100, stream);
stream.close();
MediaController.saveFile(path + ".png", getParentActivity(), 0, null, null);
} catch (Exception e) {
FileLog.e(e);
}
}
}
public MessageObject getMessageForTranslate() { public MessageObject getMessageForTranslate() {
MessageObject messageObject = null; MessageObject messageObject = null;
if (selectedObjectGroup != null && !selectedObjectGroup.isDocuments) { if (selectedObjectGroup != null && !selectedObjectGroup.isDocuments) {
@ -29197,7 +29166,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
selectedObjectToEditCaption = null; selectedObjectToEditCaption = null;
return; return;
} }
saveStickerToGallery(selectedObject); getMessageHelper().saveStickerToGallery(getParentActivity(), selectedObject);
break; break;
} }
case nkbtn_translate: { case nkbtn_translate: {

View File

@ -65,6 +65,7 @@ import java.io.FileOutputStream;
import java.util.ArrayList; import java.util.ArrayList;
import tw.nekomimi.nekogram.NekoConfig; import tw.nekomimi.nekogram.NekoConfig;
import tw.nekomimi.nekogram.ui.MessageHelper;
public class ContentPreviewViewer { public class ContentPreviewViewer {
@ -121,6 +122,8 @@ public class ContentPreviewViewer {
private final static int CONTENT_TYPE_STICKER = 0; private final static int CONTENT_TYPE_STICKER = 0;
private final static int CONTENT_TYPE_GIF = 1; private final static int CONTENT_TYPE_GIF = 1;
private final static int nkbtn_stickerdl = 110;
private static TextPaint textPaint; private static TextPaint textPaint;
private int startX; private int startX;
@ -197,7 +200,7 @@ public class ContentPreviewViewer {
} }
items.add(LocaleController.getString("SaveToGallery", R.string.SaveToGallery)); items.add(LocaleController.getString("SaveToGallery", R.string.SaveToGallery));
icons.add(R.drawable.baseline_image_24); icons.add(R.drawable.baseline_image_24);
actions.add(110); actions.add(nkbtn_stickerdl);
} }
if (!MessageObject.isMaskDocument(currentDocument) && (inFavs || MediaDataController.getInstance(currentAccount).canAddStickerToFavorites() && MessageObject.isStickerHasSet(currentDocument))) { if (!MessageObject.isMaskDocument(currentDocument) && (inFavs || MediaDataController.getInstance(currentAccount).canAddStickerToFavorites() && MessageObject.isStickerHasSet(currentDocument))) {
items.add(inFavs ? LocaleController.getString("DeleteFromFavorites", R.string.DeleteFromFavorites) : LocaleController.getString("AddToFavorites", R.string.AddToFavorites)); items.add(inFavs ? LocaleController.getString("DeleteFromFavorites", R.string.DeleteFromFavorites) : LocaleController.getString("AddToFavorites", R.string.AddToFavorites));
@ -240,20 +243,9 @@ public class ContentPreviewViewer {
MediaDataController.getInstance(currentAccount).addRecentSticker(MediaDataController.TYPE_IMAGE, parentObject, currentDocument, (int) (System.currentTimeMillis() / 1000), true); MediaDataController.getInstance(currentAccount).addRecentSticker(MediaDataController.TYPE_IMAGE, parentObject, currentDocument, (int) (System.currentTimeMillis() / 1000), true);
} else if (actions.get(which) == 5) { } else if (actions.get(which) == 5) {
delegate.remove(importingSticker); delegate.remove(importingSticker);
} else if (actions.get(which) == 110) { } else if (actions.get(which) == nkbtn_stickerdl) {
// save to gallery // save to gallery
String path = FileLoader.getPathToAttach(currentDocument, true).toString(); MessageHelper.getInstance(currentAccount).saveStickerToGallery(parentActivity, currentDocument);
if (!TextUtils.isEmpty(path)) {
try {
Bitmap image = BitmapFactory.decodeFile(path);
FileOutputStream stream = new FileOutputStream(path + ".png");
image.compress(Bitmap.CompressFormat.PNG, 100, stream);
stream.close();
MediaController.saveFile(path + ".png", parentActivity, 0, null, null);
} catch (Exception e) {
FileLog.e(e);
}
}
} }
}); });
builder.setDimBehind(false); builder.setDimBehind(false);

View File

@ -4,13 +4,19 @@ import static tw.nekomimi.nekogram.utils.LangsKt.uDismiss;
import static tw.nekomimi.nekogram.utils.LangsKt.uUpdate; import static tw.nekomimi.nekogram.utils.LangsKt.uUpdate;
import android.content.Context; import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.text.TextUtils;
import android.util.SparseArray; import android.util.SparseArray;
import org.telegram.SQLite.SQLiteCursor; import org.telegram.SQLite.SQLiteCursor;
import org.telegram.SQLite.SQLiteException; import org.telegram.SQLite.SQLiteException;
import org.telegram.messenger.AccountInstance;
import org.telegram.messenger.AndroidUtilities; import org.telegram.messenger.AndroidUtilities;
import org.telegram.messenger.BaseController; import org.telegram.messenger.BaseController;
import org.telegram.messenger.FileLoader;
import org.telegram.messenger.FileLog; import org.telegram.messenger.FileLog;
import org.telegram.messenger.MediaController;
import org.telegram.messenger.MessageObject; import org.telegram.messenger.MessageObject;
import org.telegram.messenger.MessagesController; import org.telegram.messenger.MessagesController;
import org.telegram.messenger.NotificationCenter; import org.telegram.messenger.NotificationCenter;
@ -20,6 +26,8 @@ import org.telegram.tgnet.NativeByteBuffer;
import org.telegram.tgnet.TLRPC; import org.telegram.tgnet.TLRPC;
import org.telegram.ui.ActionBar.AlertDialog; import org.telegram.ui.ActionBar.AlertDialog;
import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
@ -348,4 +356,62 @@ public class MessageHelper extends BaseController {
return ret; return ret;
} }
public void saveStickerToGallery(Context context, MessageObject messageObject) {
if (messageObject.isAnimatedSticker()) return;
// Animated Sticker is not supported.
String path = messageObject.messageOwner.attachPath;
if (!TextUtils.isEmpty(path)) {
File temp = new File(path);
if (!temp.exists()) {
path = null;
}
}
if (TextUtils.isEmpty(path)) {
path = FileLoader.getPathToMessage(messageObject.messageOwner).toString();
File temp = new File(path);
if (!temp.exists()) {
path = null;
}
}
if (TextUtils.isEmpty(path)) {
path = FileLoader.getPathToAttach(messageObject.getDocument(), true).toString();
}
if (!TextUtils.isEmpty(path)) {
if (messageObject.isVideoSticker()) {
MediaController.saveFile(path, context, 1, null, null);
} else {
try {
Bitmap image = BitmapFactory.decodeFile(path);
FileOutputStream stream = new FileOutputStream(path + ".png");
image.compress(Bitmap.CompressFormat.PNG, 100, stream);
stream.close();
MediaController.saveFile(path + ".png", context, 0, null, null);
} catch (Exception e) {
FileLog.e(e);
}
}
}
}
public void saveStickerToGallery(Context context, TLRPC.Document document) {
String path = FileLoader.getPathToAttach(document, true).toString();
if (!TextUtils.isEmpty(path)) {
if (MessageObject.isVideoSticker(document)) {
MediaController.saveFile(path, context, 1, null, document.mime_type);
} else {
try {
Bitmap image = BitmapFactory.decodeFile(path);
FileOutputStream stream = new FileOutputStream(path + ".png");
image.compress(Bitmap.CompressFormat.PNG, 100, stream);
stream.close();
MediaController.saveFile(path + ".png", context, 0, null, null);
} catch (Exception e) {
FileLog.e(e);
}
}
}
}
} }