mirror of https://github.com/NekoX-Dev/NekoX.git
allow save video sticker
This commit is contained in:
parent
959f9dfc26
commit
9fd741ffa0
|
@ -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: {
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue