Skip to content

Commit

Permalink
Update to 5.10.0
Browse files Browse the repository at this point in the history
  • Loading branch information
DrKLO committed Aug 21, 2019
1 parent 9f48ec7 commit 53e04b5
Show file tree
Hide file tree
Showing 252 changed files with 11,378 additions and 5,119 deletions.
4 changes: 2 additions & 2 deletions TMessagesProj/build.gradle
Expand Up @@ -242,7 +242,7 @@ android {
}
}

defaultConfig.versionCode = 1648
defaultConfig.versionCode = 1684

applicationVariants.all { variant ->
variant.outputs.all { output ->
Expand Down Expand Up @@ -276,7 +276,7 @@ android {
defaultConfig {
minSdkVersion 16
targetSdkVersion 27
versionName "5.9.0"
versionName "5.10.0"

vectorDrawables.generatedDensities = ['mdpi', 'hdpi', 'xhdpi', 'xxhdpi']

Expand Down
1 change: 1 addition & 0 deletions TMessagesProj/config/debug/AndroidManifest_SDK23.xml
Expand Up @@ -16,6 +16,7 @@
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.READ_CALL_LOG" />

<permission android:name="org.telegram.messenger.permission.MAPS_RECEIVE" android:protectionLevel="signature"/>

Expand Down
1 change: 1 addition & 0 deletions TMessagesProj/config/release/AndroidManifest_SDK23.xml
Expand Up @@ -16,6 +16,7 @@
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.READ_CALL_LOG" />

<permission android:name="org.telegram.messenger.permission.MAPS_RECEIVE" android:protectionLevel="signature"/>

Expand Down
4 changes: 2 additions & 2 deletions TMessagesProj/jni/Android.mk
Expand Up @@ -101,7 +101,7 @@ LOCAL_PATH := $(MY_LOCAL_PATH) # restore local path after include

include $(CLEAR_VARS)

LOCAL_CPPFLAGS := -Wall -std=c++11 -DANDROID -frtti -DHAVE_PTHREAD -finline-functions -ffast-math -Os
LOCAL_CPPFLAGS := -Wall -std=c++14 -DANDROID -frtti -DHAVE_PTHREAD -finline-functions -ffast-math -Os

LOCAL_C_INCLUDES += ./jni/boringssl/include/
LOCAL_ARM_MODE := arm
Expand Down Expand Up @@ -351,7 +351,7 @@ LOCAL_MODULE := tmessages.30
LOCAL_CFLAGS := -w -std=c11 -Os -DNULL=0 -DSOCKLEN_T=socklen_t -DLOCALE_NOT_USED -D_LARGEFILE_SOURCE=1
LOCAL_CFLAGS += -Drestrict='' -D__EMX__ -DOPUS_BUILD -DFIXED_POINT -DUSE_ALLOCA -DHAVE_LRINT -DHAVE_LRINTF -fno-math-errno
LOCAL_CFLAGS += -DANDROID_NDK -DDISABLE_IMPORTGL -fno-strict-aliasing -fprefetch-loop-arrays -DAVOID_TABLES -DANDROID_TILE_BASED_DECODE -DANDROID_ARMV6_IDCT -ffast-math -D__STDC_CONSTANT_MACROS
LOCAL_CPPFLAGS := -DBSD=1 -ffast-math -Os -funroll-loops -std=c++11
LOCAL_CPPFLAGS := -DBSD=1 -ffast-math -Os -funroll-loops -std=c++14
LOCAL_LDLIBS := -ljnigraphics -llog -lz -lEGL -lGLESv2 -landroid
LOCAL_STATIC_LIBRARIES := webp sqlite lz4 rlottie tgnet swscale avformat avcodec avresample avutil voip flac

Expand Down
6 changes: 3 additions & 3 deletions TMessagesProj/jni/TgNetWrapper.cpp
Expand Up @@ -215,10 +215,10 @@ void setPushConnectionEnabled(JNIEnv *env, jclass c, jint instanceNum, jboolean
ConnectionsManager::getInstance(instanceNum).setPushConnectionEnabled(value);
}

void applyDnsConfig(JNIEnv *env, jclass c, jint instanceNum, jlong address, jstring phone) {
void applyDnsConfig(JNIEnv *env, jclass c, jint instanceNum, jlong address, jstring phone, jint date) {
const char *phoneStr = env->GetStringUTFChars(phone, 0);

ConnectionsManager::getInstance(instanceNum).applyDnsConfig((NativeByteBuffer *) (intptr_t) address, phoneStr);
ConnectionsManager::getInstance(instanceNum).applyDnsConfig((NativeByteBuffer *) (intptr_t) address, phoneStr, date);
if (phoneStr != 0) {
env->ReleaseStringUTFChars(phone, phoneStr);
}
Expand Down Expand Up @@ -436,7 +436,7 @@ static JNINativeMethod ConnectionsManagerMethods[] = {
{"native_setNetworkAvailable", "(IZIZ)V", (void *) setNetworkAvailable},
{"native_setPushConnectionEnabled", "(IZ)V", (void *) setPushConnectionEnabled},
{"native_setJava", "(Z)V", (void *) setJava},
{"native_applyDnsConfig", "(IJLjava/lang/String;)V", (void *) applyDnsConfig},
{"native_applyDnsConfig", "(IJLjava/lang/String;I)V", (void *) applyDnsConfig},
{"native_checkProxy", "(ILjava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/telegram/tgnet/RequestTimeDelegate;)J", (void *) checkProxy},
{"native_onHostNameResolved", "(Ljava/lang/String;JLjava/lang/String;)V", (void *) onHostNameResolved}
};
Expand Down
17 changes: 12 additions & 5 deletions TMessagesProj/jni/gifvideo.cpp
Expand Up @@ -338,7 +338,7 @@ void Java_org_telegram_ui_Components_AnimatedFileDrawable_getVideoInfo(JNIEnv *e
}
}

jlong Java_org_telegram_ui_Components_AnimatedFileDrawable_createDecoder(JNIEnv *env, jclass clazz, jstring src, jintArray data, jint account, jlong streamFileSize, jobject stream) {
jlong Java_org_telegram_ui_Components_AnimatedFileDrawable_createDecoder(JNIEnv *env, jclass clazz, jstring src, jintArray data, jint account, jlong streamFileSize, jobject stream, jboolean preview) {
VideoInfo *info = new VideoInfo();

char const *srcString = env->GetStringUTFChars(src, 0);
Expand Down Expand Up @@ -377,6 +377,9 @@ jlong Java_org_telegram_ui_Components_AnimatedFileDrawable_createDecoder(JNIEnv
return 0;
}
info->fmt_ctx->flags |= AVFMT_FLAG_FAST_SEEK;
if (preview) {
info->fmt_ctx->flags |= AVFMT_FLAG_NOBUFFER;
}
} else {
if ((ret = avformat_open_input(&info->fmt_ctx, info->src, NULL, NULL)) < 0) {
LOGE("can't open source file %s, %s", info->src, av_err2str(ret));
Expand Down Expand Up @@ -478,7 +481,7 @@ void Java_org_telegram_ui_Components_AnimatedFileDrawable_prepareToSeek(JNIEnv *
info->seeking = true;
}

void Java_org_telegram_ui_Components_AnimatedFileDrawable_seekToMs(JNIEnv *env, jclass clazz, jlong ptr, jlong ms) {
void Java_org_telegram_ui_Components_AnimatedFileDrawable_seekToMs(JNIEnv *env, jclass clazz, jlong ptr, jlong ms, jboolean precise) {
if (ptr == NULL) {
return;
}
Expand All @@ -491,6 +494,9 @@ void Java_org_telegram_ui_Components_AnimatedFileDrawable_seekToMs(JNIEnv *env,
return;
} else {
avcodec_flush_buffers(info->video_dec_ctx);
if (!precise) {
return;
}
int got_frame = 0;
int32_t tries = 1000;
while (tries > 0) {
Expand Down Expand Up @@ -544,15 +550,16 @@ void Java_org_telegram_ui_Components_AnimatedFileDrawable_seekToMs(JNIEnv *env,
}
}

jint Java_org_telegram_ui_Components_AnimatedFileDrawable_getVideoFrame(JNIEnv *env, jclass clazz, jlong ptr, jobject bitmap, jintArray data, jint stride) {
jint Java_org_telegram_ui_Components_AnimatedFileDrawable_getVideoFrame(JNIEnv *env, jclass clazz, jlong ptr, jobject bitmap, jintArray data, jint stride, jboolean preview) {
if (ptr == NULL || bitmap == nullptr) {
return 0;
}
//int64_t time = ConnectionsManager::getInstance(0).getCurrentTimeMonotonicMillis();
VideoInfo *info = (VideoInfo *) (intptr_t) ptr;
int ret = 0;
int got_frame = 0;
int32_t triesCount = 6;
int32_t triesCount = preview ? 50 : 6;
//info->has_decoded_frames = false;
while (!info->stopped && triesCount != 0) {
if (info->pkt.size == 0) {
ret = av_read_frame(info->fmt_ctx, &info->pkt);
Expand Down Expand Up @@ -586,7 +593,7 @@ jint Java_org_telegram_ui_Components_AnimatedFileDrawable_getVideoFrame(JNIEnv *
LOGE("can't decode packet flushed %s", info->src);
return 0;
}
if (got_frame == 0) {
if (!preview && got_frame == 0) {
if (info->has_decoded_frames) {
if ((ret = av_seek_frame(info->fmt_ctx, info->video_stream_idx, 0, AVSEEK_FLAG_BACKWARD | AVSEEK_FLAG_FRAME)) < 0) {
LOGE("can't seek to begin of file %s, %s", info->src, av_err2str(ret));
Expand Down
17 changes: 15 additions & 2 deletions TMessagesProj/jni/lottie.cpp
Expand Up @@ -5,6 +5,7 @@
#include <lz4.h>
#include <unistd.h>
#include <pthread.h>
#include <map>
#include <tgnet/ConnectionsManager.h>
#include <tgnet/FileLog.h>
#include "c_utils.h"
Expand Down Expand Up @@ -35,12 +36,24 @@ typedef struct LottieInfo {
bool nextFrameIsCacheFrame = false;
};

jlong Java_org_telegram_ui_Components_RLottieDrawable_create(JNIEnv *env, jclass clazz, jstring src, jintArray data, jboolean precache) {
jlong Java_org_telegram_ui_Components_RLottieDrawable_create(JNIEnv *env, jclass clazz, jstring src, jintArray data, jboolean precache, jintArray colorReplacement) {
LottieInfo *info = new LottieInfo();

std::map<int32_t, int32_t> colors;
if (colorReplacement != nullptr) {
jint *arr = env->GetIntArrayElements(colorReplacement, 0);
if (arr != nullptr) {
jsize len = env->GetArrayLength(colorReplacement);
for (int32_t a = 0; a < len / 2; a++) {
colors[arr[a * 2]] = arr[a * 2 + 1];
}
env->ReleaseIntArrayElements(colorReplacement, arr, 0);
}
}

char const *srcString = env->GetStringUTFChars(src, 0);
info->path = srcString;
info->animation = rlottie::Animation::loadFromFile(info->path);
info->animation = rlottie::Animation::loadFromFile(info->path, colors);
if (srcString != 0) {
env->ReleaseStringUTFChars(src, srcString);
}
Expand Down
3 changes: 2 additions & 1 deletion TMessagesProj/jni/rlottie/inc/rlottie.h
Expand Up @@ -22,6 +22,7 @@
#include <future>
#include <vector>
#include <memory>
#include <map>

#ifdef _WIN32
#ifdef LOT_BUILD
Expand Down Expand Up @@ -257,7 +258,7 @@ class LOT_EXPORT Animation {
* @internal
*/
static std::unique_ptr<Animation>
loadFromFile(const std::string &path);
loadFromFile(const std::string &path, std::map<int32_t, int32_t> &colorReplacement);

/**
* @brief Constructs an animation object from JSON string data.
Expand Down
4 changes: 2 additions & 2 deletions TMessagesProj/jni/rlottie/src/lottie/lottieanimation.cpp
Expand Up @@ -136,15 +136,15 @@ std::unique_ptr<Animation> Animation::loadFromData(
return nullptr;
}

std::unique_ptr<Animation> Animation::loadFromFile(const std::string &path)
std::unique_ptr<Animation> Animation::loadFromFile(const std::string &path, std::map<int32_t, int32_t> &colorReplacement)
{
if (path.empty()) {
vWarning << "File path is empty";
return nullptr;
}

LottieLoader loader;
if (loader.load(path)) {
if (loader.load(path, colorReplacement)) {
auto animation = std::unique_ptr<Animation>(new Animation);
animation->d->init(loader.model());
return animation;
Expand Down
8 changes: 4 additions & 4 deletions TMessagesProj/jni/rlottie/src/lottie/lottieloader.cpp
Expand Up @@ -75,7 +75,7 @@ static std::string dirname(const std::string &path)
return std::string(path, 0, len);
}

bool LottieLoader::load(const std::string &path)
bool LottieLoader::load(const std::string &path, std::map<int32_t, int32_t> &colorReplacement)
{
mModel = LottieFileCache::instance().find(path);
if (mModel) return true;
Expand All @@ -90,7 +90,7 @@ bool LottieLoader::load(const std::string &path)
std::stringstream buf;
buf << f.rdbuf();

LottieParser parser(const_cast<char *>(buf.str().data()), dirname(path).c_str());
LottieParser parser(const_cast<char *>(buf.str().data()), dirname(path).c_str(), colorReplacement);
if (parser.hasParsingError()) {
f.close();
return false;
Expand All @@ -110,8 +110,8 @@ bool LottieLoader::loadFromData(std::string &&jsonData, const std::string &key,
mModel = LottieFileCache::instance().find(key);
if (mModel) return true;

LottieParser parser(const_cast<char *>(jsonData.c_str()),
resourcePath.c_str());
std::map<int32_t, int32_t> colors;
LottieParser parser(const_cast<char *>(jsonData.c_str()), resourcePath.c_str(), colors);
mModel = parser.model();
LottieFileCache::instance().add(key, mModel);

Expand Down
7 changes: 4 additions & 3 deletions TMessagesProj/jni/rlottie/src/lottie/lottieloader.h
Expand Up @@ -19,14 +19,15 @@
#ifndef LOTTIELOADER_H
#define LOTTIELOADER_H

#include<sstream>
#include<memory>
#include <sstream>
#include <memory>
#include <map>

class LOTModel;
class LottieLoader
{
public:
bool load(const std::string &filePath);
bool load(const std::string &filePath, std::map<int32_t, int32_t> &colorReplacement);
bool loadFromData(std::string &&jsonData, const std::string &key, const std::string &resourcePath);
std::shared_ptr<LOTModel> model();
private:
Expand Down
2 changes: 1 addition & 1 deletion TMessagesProj/jni/rlottie/src/lottie/lottiemodel.cpp
Expand Up @@ -210,7 +210,7 @@ void LOTGradient::populate(VGradientStops &stops, int frameNo)
int j = 0;
for (int i = 0; i < colorPoints; i++) {
float colorStop = ptr[0];
LottieColor color = LottieColor(ptr[1], ptr[2], ptr[3]);
LottieColor color = LottieColor(ptr[3], ptr[2], ptr[1]);
if (opacityArraySize) {
if (j == opacityArraySize) {
// already reached the end
Expand Down
57 changes: 47 additions & 10 deletions TMessagesProj/jni/rlottie/src/lottie/lottieparser.cpp
Expand Up @@ -55,6 +55,7 @@

#include <array>
#include <sstream>
#include <tgnet/FileLog.h>

#include "lottiemodel.h"
#include "rapidjson/document.h"
Expand Down Expand Up @@ -181,8 +182,8 @@ class LookaheadParserHandler {

class LottieParserImpl : protected LookaheadParserHandler {
public:
LottieParserImpl(char *str, const char *dir_path)
: LookaheadParserHandler(str), mDirPath(dir_path)
LottieParserImpl(char *str, const char *dir_path, std::map<int32_t, int32_t> &colorReplacement)
: LookaheadParserHandler(str), mDirPath(dir_path), colorMap(colorReplacement)
{
}

Expand Down Expand Up @@ -286,6 +287,8 @@ class LottieParserImpl : protected LookaheadParserHandler {
std::vector<std::shared_ptr<LOTLayerData>> mLayersToUpdate;
std::string mDirPath;
std::vector<LayerInfo> mLayerInfoList;
std::map<int32_t, int32_t> colorMap;

void SkipOut(int depth);
bool parsingError{false};
};
Expand Down Expand Up @@ -840,17 +843,31 @@ LottieColor LottieParserImpl::toColor(const char *str)
}

char tmp[3] = {'\0', '\0', '\0'};

tmp[0] = str[1];
tmp[1] = str[2];
color.b = std::strtol(tmp, NULL, 16) / 255.0;

long b = std::strtol(tmp, NULL, 16);
tmp[0] = str[3];
tmp[1] = str[4];
color.g = std::strtol(tmp, NULL, 16) / 255.0;

long g = std::strtol(tmp, NULL, 16);
tmp[0] = str[5];
tmp[1] = str[6];
color.r = std::strtol(tmp, NULL, 16) / 255.0;
long r = std::strtol(tmp, NULL, 16);

if (!colorMap.empty()) {
int32_t c = (int32_t) (((b & 0xff) << 16) | ((g & 0xff) << 8) | (r & 0xff));
std::map<int32_t, int32_t>::iterator iter = colorMap.find(c);
if (iter != colorMap.end()) {
c = iter->second;
b = (c >> 16) & 0xff;
g = (c >> 8) & 0xff;
r = (c) & 0xff;
}
}

color.r = r / 255.0f;
color.g = g / 255.0f;
color.b = b / 255.0f;

return color;
}
Expand Down Expand Up @@ -1095,6 +1112,10 @@ std::shared_ptr<LOTMaskData> LottieParserImpl::parseMaskObject()
obj->mInv = GetBool();
} else if (0 == strcmp(key, "mode")) {
const char *str = GetString();
if (str == nullptr) {
parsingError = true;
return sharedMask;
}
switch (str[0]) {
case 'n':
obj->mMode = LOTMaskData::Mode::None;
Expand Down Expand Up @@ -1260,7 +1281,9 @@ std::shared_ptr<LOTData> LottieParserImpl::parseGroupObject() {
staticFlag &= child.get()->isStatic();
}

group->setStatic(staticFlag && group->mTransform->isStatic());
if (group->mTransform) {
group->setStatic(staticFlag && group->mTransform->isStatic());
}

return sharedGroup;
}
Expand Down Expand Up @@ -2005,6 +2028,20 @@ void LottieParserImpl::getValue(LottieColor &color)
parsingError = true;
return;
}
if (!colorMap.empty()) {
int32_t r = (int32_t) (val[2] * 255);
int32_t g = (int32_t) (val[1] * 255);
int32_t b = (int32_t) (val[0] * 255);

int32_t c = (int32_t) (((b & 0xff) << 16) | ((g & 0xff) << 8) | (r & 0xff));
std::map<int32_t, int32_t>::iterator iter = colorMap.find(c);
if (iter != colorMap.end()) {
c = iter->second;
val[0] = ((c >> 16) & 0xff) / 255.0f;
val[1] = ((c >> 8) & 0xff) / 255.0f;
val[2] = ((c) & 0xff) / 255.0f;
}
}
color.r = val[2];
color.g = val[1];
color.b = val[0];
Expand Down Expand Up @@ -2590,8 +2627,8 @@ LottieParser::~LottieParser()
delete d;
}

LottieParser::LottieParser(char *str, const char *dir_path)
: d(new LottieParserImpl(str, dir_path))
LottieParser::LottieParser(char *str, const char *dir_path, std::map<int32_t, int32_t> &colorReplacement)
: d(new LottieParserImpl(str, dir_path, colorReplacement))
{
d->parseComposition();
if (d->hasParsingError()) {
Expand Down

1 comment on commit 53e04b5

@zarEclEC
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not release source same day as app, like iOS does?

Please sign in to comment.