Commit 8c50d4d0 authored by DrKLO's avatar DrKLO

Merge branch 'dev'

parents cd9d188f 8233e89d

Too many changes to show.

To preserve performance only 1000 of 1000+ files are displayed.

...@@ -3,7 +3,7 @@ buildscript { ...@@ -3,7 +3,7 @@ buildscript {
mavenCentral() mavenCentral()
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:0.13.+' classpath 'com.android.tools.build:gradle:0.14.0'
} }
} }
apply plugin: 'com.android.application' apply plugin: 'com.android.application'
...@@ -17,7 +17,7 @@ tasks.withType(JavaCompile) { ...@@ -17,7 +17,7 @@ tasks.withType(JavaCompile) {
} }
dependencies { dependencies {
compile 'com.android.support:support-v4:20.0.+' compile 'com.android.support:support-v4:21.0.+'
compile 'com.google.android.gms:play-services:3.2.+' compile 'com.google.android.gms:play-services:3.2.+'
compile 'net.hockeyapp.android:HockeySDK:3.0.2' compile 'net.hockeyapp.android:HockeySDK:3.0.2'
compile 'com.googlecode.mp4parser:isoparser:1.0.+' compile 'com.googlecode.mp4parser:isoparser:1.0.+'
...@@ -25,7 +25,7 @@ dependencies { ...@@ -25,7 +25,7 @@ dependencies {
android { android {
compileSdkVersion 21 compileSdkVersion 21
buildToolsVersion '21.0.2' buildToolsVersion '21.1.1'
signingConfigs { signingConfigs {
debug { debug {
...@@ -43,19 +43,19 @@ android { ...@@ -43,19 +43,19 @@ android {
buildTypes { buildTypes {
debug { debug {
debuggable true debuggable true
jniDebugBuild false jniDebuggable true
signingConfig signingConfigs.debug signingConfig signingConfigs.debug
} }
release { release {
debuggable false debuggable false
jniDebugBuild false jniDebuggable false
signingConfig signingConfigs.release signingConfig signingConfigs.release
} }
foss { foss {
debuggable false debuggable false
jniDebugBuild false jniDebuggable false
signingConfig signingConfigs.release signingConfig signingConfigs.release
} }
} }
...@@ -65,22 +65,22 @@ android { ...@@ -65,22 +65,22 @@ android {
jni.srcDirs = [] //disable automatic ndk-build call jni.srcDirs = [] //disable automatic ndk-build call
} }
sourceSets { sourceSets.debug {
debug {
manifest.srcFile 'config/debug/AndroidManifest.xml' manifest.srcFile 'config/debug/AndroidManifest.xml'
} }
release {
sourceSets.release {
manifest.srcFile 'config/release/AndroidManifest.xml' manifest.srcFile 'config/release/AndroidManifest.xml'
} }
foss {
sourceSets.foss {
manifest.srcFile 'config/foss/AndroidManifest.xml' manifest.srcFile 'config/foss/AndroidManifest.xml'
} }
}
defaultConfig { defaultConfig {
minSdkVersion 8 minSdkVersion 8
targetSdkVersion 19 targetSdkVersion 21
versionCode 374 versionCode 403
versionName "1.9.6" versionName "2.1.0"
} }
} }
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
android:icon="@drawable/ic_launcher" android:icon="@drawable/ic_launcher"
android:label="@string/AppName" android:label="@string/AppName"
android:theme="@style/Theme.TMessages.Start" android:theme="@style/Theme.TMessages.Start"
android:name="org.telegram.ui.ApplicationLoader" android:name=".ApplicationLoader"
android:hardwareAccelerated="true" android:hardwareAccelerated="true"
android:largeHeap="true"> android:largeHeap="true">
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
android:icon="@drawable/ic_launcher" android:icon="@drawable/ic_launcher"
android:label="@string/AppName" android:label="@string/AppName"
android:theme="@style/Theme.TMessages.Start" android:theme="@style/Theme.TMessages.Start"
android:name="org.telegram.ui.ApplicationLoader" android:name=".ApplicationLoader"
android:hardwareAccelerated="true" android:hardwareAccelerated="true"
android:largeHeap="true"> android:largeHeap="true">
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
android:icon="@drawable/ic_launcher" android:icon="@drawable/ic_launcher"
android:label="@string/AppName" android:label="@string/AppName"
android:theme="@style/Theme.TMessages.Start" android:theme="@style/Theme.TMessages.Start"
android:name="org.telegram.ui.ApplicationLoader" android:name=".ApplicationLoader"
android:hardwareAccelerated="true" android:hardwareAccelerated="true"
android:largeHeap="true"> android:largeHeap="true">
......
...@@ -2,10 +2,10 @@ LOCAL_PATH := $(call my-dir) ...@@ -2,10 +2,10 @@ LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS) include $(CLEAR_VARS)
LOCAL_PRELINK_MODULE := false LOCAL_PRELINK_MODULE := false
LOCAL_MODULE := tmessages LOCAL_MODULE := tmessages.4
LOCAL_CFLAGS := -w -std=gnu99 -O2 -DNULL=0 -DSOCKLEN_T=socklen_t -DLOCALE_NOT_USED -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 LOCAL_CFLAGS := -w -std=gnu99 -O2 -DNULL=0 -DSOCKLEN_T=socklen_t -DLOCALE_NOT_USED -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64
LOCAL_CFLAGS += -Drestrict='' -D__EMX__ -DOPUS_BUILD -DFIXED_POINT -DUSE_ALLOCA -DHAVE_LRINT -DHAVE_LRINTF -fno-math-errno 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 LOCAL_CFLAGS += -DANDROID_NDK -DDISABLE_IMPORTGL -fno-strict-aliasing -fprefetch-loop-arrays -DAVOID_TABLES -DANDROID_TILE_BASED_DECODE -DANDROID_ARMV6_IDCT -DHAVE_STRCHRNUL=0
LOCAL_CPPFLAGS := -DBSD=1 -ffast-math -O2 -funroll-loops LOCAL_CPPFLAGS := -DBSD=1 -ffast-math -O2 -funroll-loops
#LOCAL_LDLIBS := -llog #LOCAL_LDLIBS := -llog
LOCAL_LDLIBS := -ljnigraphics -llog LOCAL_LDLIBS := -ljnigraphics -llog
...@@ -162,10 +162,23 @@ LOCAL_SRC_FILES += \ ...@@ -162,10 +162,23 @@ LOCAL_SRC_FILES += \
./giflib/gifalloc.c ./giflib/gifalloc.c
LOCAL_SRC_FILES += \ LOCAL_SRC_FILES += \
./aes/aes_core.c \
./aes/aes_ige.c \ ./aes/aes_ige.c \
./aes/aes_misc.c ./aes/aes_misc.c
ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
LOCAL_SRC_FILES += ./aes/aes_arm.S
else
ifeq ($(TARGET_ARCH_ABI),armeabi)
LOCAL_SRC_FILES += ./aes/aes_arm.S
else
ifeq ($(TARGET_ARCH_ABI),x86)
LOCAL_SRC_FILES += ./aes/aes_core.c
else
LOCAL_SRC_FILES += ./aes/aes_core.c
endif
endif
endif
LOCAL_SRC_FILES += \ LOCAL_SRC_FILES += \
./sqlite/sqlite3.c ./sqlite/sqlite3.c
...@@ -277,7 +290,6 @@ LOCAL_SRC_FILES += \ ...@@ -277,7 +290,6 @@ LOCAL_SRC_FILES += \
./gif.c \ ./gif.c \
./utils.c \ ./utils.c \
./image.c \ ./image.c \
./video.c \ ./video.c
./fake.c
include $(BUILD_SHARED_LIBRARY) include $(BUILD_SHARED_LIBRARY)
\ No newline at end of file
This diff is collapsed.
#ifndef __ARM_ARCH_H__
#define __ARM_ARCH_H__
#if !defined(__ARM_ARCH__)
# if defined(__CC_ARM)
# define __ARM_ARCH__ __TARGET_ARCH_ARM
# if defined(__BIG_ENDIAN)
# define __ARMEB__
# else
# define __ARMEL__
# endif
# elif defined(__GNUC__)
/*
* Why doesn't gcc define __ARM_ARCH__? Instead it defines
* bunch of below macros. See all_architectires[] table in
* gcc/config/arm/arm.c. On a side note it defines
* __ARMEL__/__ARMEB__ for little-/big-endian.
*/
# if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || \
defined(__ARM_ARCH_7R__)|| defined(__ARM_ARCH_7M__) || \
defined(__ARM_ARCH_7EM__)
# define __ARM_ARCH__ 7
# elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || \
defined(__ARM_ARCH_6K__)|| defined(__ARM_ARCH_6M__) || \
defined(__ARM_ARCH_6Z__)|| defined(__ARM_ARCH_6ZK__) || \
defined(__ARM_ARCH_6T2__)
# define __ARM_ARCH__ 6
# elif defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5T__) || \
defined(__ARM_ARCH_5E__)|| defined(__ARM_ARCH_5TE__) || \
defined(__ARM_ARCH_5TEJ__)
# define __ARM_ARCH__ 5
# elif defined(__ARM_ARCH_4__) || defined(__ARM_ARCH_4T__)
# define __ARM_ARCH__ 4
# else
# error "unsupported ARM architecture"
# endif
# endif
#endif
#ifdef OPENSSL_FIPSCANISTER
#include <openssl/fipssyms.h>
#endif
#if !__ASSEMBLER__
extern unsigned int OPENSSL_armcap_P;
#define ARMV7_NEON (1<<0)
#define ARMV7_TICK (1<<1)
#endif
#endif
#include <stdio.h>
void fakeFunction() {
printf("some androids has buggy native loader, so i should check size of libs in java to know that native library is correct. So each changed native library should has diffrent size in different app versions. This function will increase lib size for few bytes :)");
printf("");
}
...@@ -589,7 +589,7 @@ static jint open(GifFileType *GifFileIn, int Error, int startPos, JNIEnv *env, j ...@@ -589,7 +589,7 @@ static jint open(GifFileType *GifFileIn, int Error, int startPos, JNIEnv *env, j
return (jint)(Error == 0 ? info : NULL); return (jint)(Error == 0 ? info : NULL);
} }
JNIEXPORT jlong JNICALL Java_org_telegram_ui_Views_GifDrawable_getAllocationByteCount(JNIEnv *env, jclass class, jobject gifInfo) { JNIEXPORT jlong JNICALL Java_org_telegram_ui_Components_GifDrawable_getAllocationByteCount(JNIEnv *env, jclass class, jobject gifInfo) {
GifInfo *info = (GifInfo *)gifInfo; GifInfo *info = (GifInfo *)gifInfo;
if (info == NULL) { if (info == NULL) {
return 0; return 0;
...@@ -602,7 +602,7 @@ JNIEXPORT jlong JNICALL Java_org_telegram_ui_Views_GifDrawable_getAllocationByte ...@@ -602,7 +602,7 @@ JNIEXPORT jlong JNICALL Java_org_telegram_ui_Views_GifDrawable_getAllocationByte
return sum; return sum;
} }
JNIEXPORT void JNICALL Java_org_telegram_ui_Views_GifDrawable_reset(JNIEnv *env, jclass class, jobject gifInfo) { JNIEXPORT void JNICALL Java_org_telegram_ui_Components_GifDrawable_reset(JNIEnv *env, jclass class, jobject gifInfo) {
GifInfo *info = (GifInfo *)gifInfo; GifInfo *info = (GifInfo *)gifInfo;
if (info == NULL) { if (info == NULL) {
return; return;
...@@ -610,7 +610,7 @@ JNIEXPORT void JNICALL Java_org_telegram_ui_Views_GifDrawable_reset(JNIEnv *env, ...@@ -610,7 +610,7 @@ JNIEXPORT void JNICALL Java_org_telegram_ui_Views_GifDrawable_reset(JNIEnv *env,
reset(info); reset(info);
} }
JNIEXPORT void JNICALL Java_org_telegram_ui_Views_GifDrawable_setSpeedFactor(JNIEnv *env, jclass class, jobject gifInfo, jfloat factor) { JNIEXPORT void JNICALL Java_org_telegram_ui_Components_GifDrawable_setSpeedFactor(JNIEnv *env, jclass class, jobject gifInfo, jfloat factor) {
GifInfo *info = (GifInfo *)gifInfo; GifInfo *info = (GifInfo *)gifInfo;
if (info == NULL) { if (info == NULL) {
return; return;
...@@ -618,7 +618,7 @@ JNIEXPORT void JNICALL Java_org_telegram_ui_Views_GifDrawable_setSpeedFactor(JNI ...@@ -618,7 +618,7 @@ JNIEXPORT void JNICALL Java_org_telegram_ui_Views_GifDrawable_setSpeedFactor(JNI
info->speedFactor = factor; info->speedFactor = factor;
} }
JNIEXPORT void JNICALL Java_org_telegram_ui_Views_GifDrawable_seekToTime(JNIEnv *env, jclass class, jobject gifInfo, jint desiredPos, jintArray jPixels) { JNIEXPORT void JNICALL Java_org_telegram_ui_Components_GifDrawable_seekToTime(JNIEnv *env, jclass class, jobject gifInfo, jint desiredPos, jintArray jPixels) {
GifInfo *info = (GifInfo *)gifInfo; GifInfo *info = (GifInfo *)gifInfo;
if (info == NULL || jPixels == NULL) { if (info == NULL || jPixels == NULL) {
return; return;
...@@ -665,7 +665,7 @@ JNIEXPORT void JNICALL Java_org_telegram_ui_Views_GifDrawable_seekToTime(JNIEnv ...@@ -665,7 +665,7 @@ JNIEXPORT void JNICALL Java_org_telegram_ui_Views_GifDrawable_seekToTime(JNIEnv
} }
} }
JNIEXPORT void JNICALL Java_org_telegram_ui_Views_GifDrawable_seekToFrame(JNIEnv *env, jclass class, jobject gifInfo, jint desiredIdx, jintArray jPixels) { JNIEXPORT void JNICALL Java_org_telegram_ui_Components_GifDrawable_seekToFrame(JNIEnv *env, jclass class, jobject gifInfo, jint desiredIdx, jintArray jPixels) {
GifInfo *info = (GifInfo *)gifInfo; GifInfo *info = (GifInfo *)gifInfo;
if (info == NULL|| jPixels==NULL) { if (info == NULL|| jPixels==NULL) {
return; return;
...@@ -701,7 +701,7 @@ JNIEXPORT void JNICALL Java_org_telegram_ui_Views_GifDrawable_seekToFrame(JNIEnv ...@@ -701,7 +701,7 @@ JNIEXPORT void JNICALL Java_org_telegram_ui_Views_GifDrawable_seekToFrame(JNIEnv
} }
} }
JNIEXPORT void JNICALL Java_org_telegram_ui_Views_GifDrawable_renderFrame(JNIEnv *env, jclass class, jintArray jPixels, jobject gifInfo, jintArray metaData) { JNIEXPORT void JNICALL Java_org_telegram_ui_Components_GifDrawable_renderFrame(JNIEnv *env, jclass class, jintArray jPixels, jobject gifInfo, jintArray metaData) {
GifInfo *info = (GifInfo *)gifInfo; GifInfo *info = (GifInfo *)gifInfo;
if (info == NULL || jPixels == NULL) { if (info == NULL || jPixels == NULL) {
return; return;
...@@ -752,7 +752,7 @@ JNIEXPORT void JNICALL Java_org_telegram_ui_Views_GifDrawable_renderFrame(JNIEnv ...@@ -752,7 +752,7 @@ JNIEXPORT void JNICALL Java_org_telegram_ui_Views_GifDrawable_renderFrame(JNIEnv
(*env)->ReleaseIntArrayElements(env, metaData, rawMetaData, 0); (*env)->ReleaseIntArrayElements(env, metaData, rawMetaData, 0);
} }
JNIEXPORT void JNICALL Java_org_telegram_ui_Views_GifDrawable_free(JNIEnv *env, jclass class, jobject gifInfo) { JNIEXPORT void JNICALL Java_org_telegram_ui_Components_GifDrawable_free(JNIEnv *env, jclass class, jobject gifInfo) {
if (gifInfo == NULL) { if (gifInfo == NULL) {
return; return;
} }
...@@ -765,7 +765,7 @@ JNIEXPORT void JNICALL Java_org_telegram_ui_Views_GifDrawable_free(JNIEnv *env, ...@@ -765,7 +765,7 @@ JNIEXPORT void JNICALL Java_org_telegram_ui_Views_GifDrawable_free(JNIEnv *env,
cleanUp(info); cleanUp(info);
} }
JNIEXPORT jstring JNICALL Java_org_telegram_ui_Views_GifDrawable_getComment(JNIEnv *env, jclass class, jobject gifInfo) { JNIEXPORT jstring JNICALL Java_org_telegram_ui_Components_GifDrawable_getComment(JNIEnv *env, jclass class, jobject gifInfo) {
if (gifInfo == NULL) { if (gifInfo == NULL) {
return NULL; return NULL;
} }
...@@ -773,14 +773,14 @@ JNIEXPORT jstring JNICALL Java_org_telegram_ui_Views_GifDrawable_getComment(JNIE ...@@ -773,14 +773,14 @@ JNIEXPORT jstring JNICALL Java_org_telegram_ui_Views_GifDrawable_getComment(JNIE
return (*env)->NewStringUTF(env, info->comment); return (*env)->NewStringUTF(env, info->comment);
} }
JNIEXPORT jint JNICALL Java_org_telegram_ui_Views_GifDrawable_getLoopCount(JNIEnv *env, jclass class, jobject gifInfo) { JNIEXPORT jint JNICALL Java_org_telegram_ui_Components_GifDrawable_getLoopCount(JNIEnv *env, jclass class, jobject gifInfo) {
if (gifInfo == NULL) { if (gifInfo == NULL) {
return 0; return 0;
} }
return ((GifInfo *)gifInfo)->loopCount; return ((GifInfo *)gifInfo)->loopCount;
} }
JNIEXPORT jint JNICALL Java_org_telegram_ui_Views_GifDrawable_getDuration(JNIEnv *env, jclass class, jobject gifInfo) { JNIEXPORT jint JNICALL Java_org_telegram_ui_Components_GifDrawable_getDuration(JNIEnv *env, jclass class, jobject gifInfo) {
GifInfo *info = (GifInfo *)gifInfo; GifInfo *info = (GifInfo *)gifInfo;
if (info == NULL) { if (info == NULL) {
return 0; return 0;
...@@ -793,7 +793,7 @@ JNIEXPORT jint JNICALL Java_org_telegram_ui_Views_GifDrawable_getDuration(JNIEnv ...@@ -793,7 +793,7 @@ JNIEXPORT jint JNICALL Java_org_telegram_ui_Views_GifDrawable_getDuration(JNIEnv
return sum; return sum;
} }
JNIEXPORT jint JNICALL Java_org_telegram_ui_Views_GifDrawable_getCurrentPosition(JNIEnv *env, jclass class, jobject gifInfo) { JNIEXPORT jint JNICALL Java_org_telegram_ui_Components_GifDrawable_getCurrentPosition(JNIEnv *env, jclass class, jobject gifInfo) {
GifInfo *info = (GifInfo *)gifInfo; GifInfo *info = (GifInfo *)gifInfo;
if (info == NULL) { if (info == NULL) {
return 0; return 0;
...@@ -811,7 +811,7 @@ JNIEXPORT jint JNICALL Java_org_telegram_ui_Views_GifDrawable_getCurrentPosition ...@@ -811,7 +811,7 @@ JNIEXPORT jint JNICALL Java_org_telegram_ui_Views_GifDrawable_getCurrentPosition
return (int) (sum + remainder); return (int) (sum + remainder);
} }
JNIEXPORT void JNICALL Java_org_telegram_ui_Views_GifDrawable_saveRemainder(JNIEnv *env, jclass class, jobject gifInfo) { JNIEXPORT void JNICALL Java_org_telegram_ui_Components_GifDrawable_saveRemainder(JNIEnv *env, jclass class, jobject gifInfo) {
GifInfo *info = (GifInfo *)gifInfo; GifInfo *info = (GifInfo *)gifInfo;
if (info == NULL) { if (info == NULL) {
return; return;
...@@ -819,7 +819,7 @@ JNIEXPORT void JNICALL Java_org_telegram_ui_Views_GifDrawable_saveRemainder(JNIE ...@@ -819,7 +819,7 @@ JNIEXPORT void JNICALL Java_org_telegram_ui_Views_GifDrawable_saveRemainder(JNIE
info->lastFrameReaminder = getRealTime() - info->nextStartTime; info->lastFrameReaminder = getRealTime() - info->nextStartTime;
} }
JNIEXPORT void JNICALL Java_org_telegram_ui_Views_GifDrawable_restoreRemainder(JNIEnv *env, jclass class, jobject gifInfo) { JNIEXPORT void JNICALL Java_org_telegram_ui_Components_GifDrawable_restoreRemainder(JNIEnv *env, jclass class, jobject gifInfo) {
GifInfo *info = (GifInfo *)gifInfo; GifInfo *info = (GifInfo *)gifInfo;
if (info == NULL || info->lastFrameReaminder == ULONG_MAX) { if (info == NULL || info->lastFrameReaminder == ULONG_MAX) {
return; return;
...@@ -828,7 +828,7 @@ JNIEXPORT void JNICALL Java_org_telegram_ui_Views_GifDrawable_restoreRemainder(J ...@@ -828,7 +828,7 @@ JNIEXPORT void JNICALL Java_org_telegram_ui_Views_GifDrawable_restoreRemainder(J
info->lastFrameReaminder = ULONG_MAX; info->lastFrameReaminder = ULONG_MAX;
} }
JNIEXPORT jint JNICALL Java_org_telegram_ui_Views_GifDrawable_openFile(JNIEnv *env, jclass class, jintArray metaData, jstring jfname) { JNIEXPORT jint JNICALL Java_org_telegram_ui_Components_GifDrawable_openFile(JNIEnv *env, jclass class, jintArray metaData, jstring jfname) {
if (jfname == NULL) { if (jfname == NULL) {
setMetaData(0, 0, 0, D_GIF_ERR_OPEN_FAILED, env, metaData); setMetaData(0, 0, 0, D_GIF_ERR_OPEN_FAILED, env, metaData);
return (jint) NULL; return (jint) NULL;
......
...@@ -229,10 +229,12 @@ JNIEXPORT void Java_org_telegram_messenger_Utilities_blurBitmap(JNIEnv *env, jcl ...@@ -229,10 +229,12 @@ JNIEXPORT void Java_org_telegram_messenger_Utilities_blurBitmap(JNIEnv *env, jcl
AndroidBitmap_unlockPixels(env, bitmap); AndroidBitmap_unlockPixels(env, bitmap);
} }
JNIEXPORT void Java_org_telegram_messenger_Utilities_loadBitmap(JNIEnv *env, jclass class, jstring path, jintArray bitmap, int scale, int format, int width, int height) { JNIEXPORT void Java_org_telegram_messenger_Utilities_loadBitmap(JNIEnv *env, jclass class, jstring path, jobject bitmap, int scale, int width, int height, int stride) {
AndroidBitmapInfo info;
int i; int i;
if ((i = AndroidBitmap_getInfo(env, bitmap, &info)) >= 0) {
char *fileName = (*env)->GetStringUTFChars(env, path, NULL); char *fileName = (*env)->GetStringUTFChars(env, path, NULL);
FILE *infile; FILE *infile;
...@@ -244,8 +246,6 @@ JNIEXPORT void Java_org_telegram_messenger_Utilities_loadBitmap(JNIEnv *env, jcl ...@@ -244,8 +246,6 @@ JNIEXPORT void Java_org_telegram_messenger_Utilities_loadBitmap(JNIEnv *env, jcl
jerr.pub.error_exit = my_error_exit; jerr.pub.error_exit = my_error_exit;
if (!setjmp(jerr.setjmp_buffer)) { if (!setjmp(jerr.setjmp_buffer)) {
unsigned char *bitmapBuf = (*env)->GetPrimitiveArrayCritical(env, bitmap, 0);
if (bitmapBuf) {
jpeg_create_decompress(&cinfo); jpeg_create_decompress(&cinfo);
jpeg_stdio_src(&cinfo, infile); jpeg_stdio_src(&cinfo, infile);
...@@ -257,22 +257,16 @@ JNIEXPORT void Java_org_telegram_messenger_Utilities_loadBitmap(JNIEnv *env, jcl ...@@ -257,22 +257,16 @@ JNIEXPORT void Java_org_telegram_messenger_Utilities_loadBitmap(JNIEnv *env, jcl
jpeg_start_decompress(&cinfo); jpeg_start_decompress(&cinfo);
int row_stride = cinfo.output_width * cinfo.output_components; int row_stride = cinfo.output_width * cinfo.output_components;
JSAMPARRAY buffer = (*cinfo.mem->alloc_sarray) ((j_common_ptr) &cinfo, JPOOL_IMAGE, row_stride, 1); JSAMPARRAY buffer = (*cinfo.mem->alloc_sarray) ((j_common_ptr) &cinfo, JPOOL_IMAGE, row_stride, 1);
int stride = width;
if (format == 0) {
stride *= 4;
} else if (format == 1) {
stride *= 2;
}
unsigned char *pixels = bitmapBuf;
unsigned char *pixels;
if ((i = AndroidBitmap_lockPixels(env, bitmap, &pixels)) >= 0) {
int rowCount = min(cinfo.output_height, height); int rowCount = min(cinfo.output_height, height);
int colCount = min(cinfo.output_width, width); int colCount = min(cinfo.output_width, width);
while (cinfo.output_scanline < rowCount) { while (cinfo.output_scanline < rowCount) {
jpeg_read_scanlines(&cinfo, buffer, 1); jpeg_read_scanlines(&cinfo, buffer, 1);
if (format == 0) { //if (info.format == ANDROID_BITMAP_FORMAT_RGBA_8888) {
if (cinfo.out_color_space == JCS_GRAYSCALE) { if (cinfo.out_color_space == JCS_GRAYSCALE) {
for (i = 0; i < colCount; i++) { for (i = 0; i < colCount; i++) {
float alpha = buffer[0][i] / 255.0f; float alpha = buffer[0][i] / 255.0f;
...@@ -284,24 +278,26 @@ JNIEXPORT void Java_org_telegram_messenger_Utilities_loadBitmap(JNIEnv *env, jcl ...@@ -284,24 +278,26 @@ JNIEXPORT void Java_org_telegram_messenger_Utilities_loadBitmap(JNIEnv *env, jcl
} else { } else {
int c = 0; int c = 0;
for (i = 0; i < colCount; i++) { for (i = 0; i < colCount; i++) {
pixels[i * 4] = buffer[0][i * 3 + 2]; pixels[i * 4] = buffer[0][i * 3];
pixels[i * 4 + 1] = buffer[0][i * 3 + 1]; pixels[i * 4 + 1] = buffer[0][i * 3 + 1];
pixels[i * 4 + 2] = buffer[0][i * 3]; pixels[i * 4 + 2] = buffer[0][i * 3 + 2];
pixels[i * 4 + 3] = 255; pixels[i * 4 + 3] = 255;
c += 4; c += 4;
} }
} }
} else if (format == 1) { //} else if (info.format == ANDROID_BITMAP_FORMAT_RGB_565) {
} //}
pixels += stride; pixels += stride;
} }
(*env)->ReleasePrimitiveArrayCritical(env, bitmap, bitmapBuf, 0);
jpeg_finish_decompress(&cinfo); AndroidBitmap_unlockPixels(env, bitmap);
} else { } else {
throwException(env, "can't get bitmap buff"); throwException(env, "AndroidBitmap_lockPixels() failed ! error=%d", i);
} }
jpeg_finish_decompress(&cinfo);
} else { } else {
throwException(env, "the JPEG code has signaled an error"); throwException(env, "the JPEG code has signaled an error");
} }
...@@ -313,4 +309,7 @@ JNIEXPORT void Java_org_telegram_messenger_Utilities_loadBitmap(JNIEnv *env, jcl ...@@ -313,4 +309,7 @@ JNIEXPORT void Java_org_telegram_messenger_Utilities_loadBitmap(JNIEnv *env, jcl
} }
(*env)->ReleaseStringUTFChars(env, path, fileName); (*env)->ReleaseStringUTFChars(env, path, fileName);
} else {
throwException(env, "AndroidBitmap_getInfo() failed ! error=%d", i);
}
} }
This diff is collapsed.
This diff is collapsed.
...@@ -4,10 +4,10 @@ ...@@ -4,10 +4,10 @@
android:installLocation="auto"> android:installLocation="auto">
<supports-screens android:anyDensity="true" <supports-screens android:anyDensity="true"
android:smallScreens="true"
android:normalScreens="true"
android:largeScreens="true" android:largeScreens="true"
android:normalScreens="true"
android:resizeable="true" android:resizeable="true"
android:smallScreens="true"
android:xlargeScreens="true"/> android:xlargeScreens="true"/>
<uses-feature android:glEsVersion="0x00020000" android:required="false"/> <uses-feature android:glEsVersion="0x00020000" android:required="false"/>
...@@ -41,20 +41,20 @@ ...@@ -41,20 +41,20 @@
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application <application
android:name=".ApplicationLoader"
android:allowBackup="false" android:allowBackup="false"
android:hardwareAccelerated="true"
android:icon="@drawable/ic_launcher" android:icon="@drawable/ic_launcher"
android:label="@string/AppName" android:label="@string/AppName"
android:theme="@style/Theme.TMessages.Start" android:largeHeap="true"
android:name="org.telegram.ui.ApplicationLoader" android:theme="@style/Theme.TMessages.Start">
android:hardwareAccelerated="true"
android:largeHeap="true">
<activity <activity
android:name="org.telegram.ui.LaunchActivity" android:name="org.telegram.ui.LaunchActivity"
android:windowSoftInputMode="adjustResize" android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
android:hardwareAccelerated="true" android:hardwareAccelerated="true"
android:launchMode="singleTask" android:launchMode="singleTask"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"> android:windowSoftInputMode="adjustPan">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.LAUNCHER" />
...@@ -95,6 +95,19 @@ ...@@ -95,6 +95,19 @@
<category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="vnd.android.cursor.item/vnd.org.telegram.messenger.android.profile"/> <data android:mimeType="vnd.android.cursor.item/vnd.org.telegram.messenger.android.profile"/>
</intent-filter> </intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:host="telegram.me" android:scheme="http" />
<data android:host="telegram.me" android:scheme="https" />
</intent-filter>
<intent-filter android:icon="@drawable/ic_launcher" android:priority="1">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="tg" />
</intent-filter>
</activity> </activity>
<activity <activity
android:name="org.telegram.ui.IntroActivity" android:name="org.telegram.ui.IntroActivity"
...@@ -105,9 +118,9 @@ ...@@ -105,9 +118,9 @@
android:configChanges="keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" android:configChanges="keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
android:excludeFromRecents="true" android:excludeFromRecents="true"
android:launchMode="singleTask" android:launchMode="singleTask"
android:windowSoftInputMode="adjustResize|stateHidden"
android:taskAffinity="" android:taskAffinity=""
android:theme="@style/Theme.TMessages.PopupNotification"> android:theme="@style/Theme.TMessages.PopupNotification"
android:windowSoftInputMode="adjustResize|stateHidden">
</activity> </activity>
<receiver android:name="org.telegram.android.SmsListener"> <receiver android:name="org.telegram.android.SmsListener">
...@@ -116,8 +129,7 @@ ...@@ -116,8 +129,7 @@
</intent-filter> </intent-filter>
</receiver> </receiver>
<service android:name="org.telegram.android.AuthenticatorService" <service android:name="org.telegram.android.AuthenticatorService" android:exported="true">
android:exported="true">
<intent-filter> <intent-filter>
<action android:name="android.accounts.AccountAuthenticator"/> <action android:name="android.accounts.AccountAuthenticator"/>
</intent-filter> </intent-filter>
...@@ -125,8 +137,7 @@ ...@@ -125,8 +137,7 @@
android:resource="@xml/auth"/> android:resource="@xml/auth"/>
</service> </service>
<service android:name="org.telegram.android.ContactsSyncAdapterService" <service android:name="org.telegram.android.ContactsSyncAdapterService" android:exported="true">
android:exported="true">
<intent-filter> <intent-filter>
<action android:name="android.content.SyncAdapter" /> <action android:name="android.content.SyncAdapter" />
</intent-filter> </intent-filter>
......
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
package org.telegram.PhoneFormat; package org.telegram.PhoneFormat;
import org.telegram.ui.ApplicationLoader; import org.telegram.messenger.ApplicationLoader;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.InputStream; import java.io.InputStream;
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
package org.telegram.SQLite; package org.telegram.SQLite;
import org.telegram.messenger.FileLog; import org.telegram.messenger.FileLog;
import org.telegram.ui.ApplicationLoader; import org.telegram.messenger.ApplicationLoader;
public class SQLiteDatabase { public class SQLiteDatabase {
private final int sqliteHandle; private final int sqliteHandle;
......
...@@ -12,11 +12,11 @@ import android.content.BroadcastReceiver; ...@@ -12,11 +12,11 @@ import android.content.BroadcastReceiver;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import org.telegram.ui.ApplicationLoader; import org.telegram.messenger.ApplicationLoader;
public class AppStartReceiver extends BroadcastReceiver { public class AppStartReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
AndroidUtilities.RunOnUIThread(new Runnable() { AndroidUtilities.runOnUIThread(new Runnable() {
@Override @Override
public void run() { public void run() {
ApplicationLoader.startPushService(); ApplicationLoader.startPushService();
......
...@@ -16,7 +16,7 @@ import android.content.Intent; ...@@ -16,7 +16,7 @@ import android.content.Intent;
import org.json.JSONObject; import org.json.JSONObject;
import org.telegram.messenger.ConnectionsManager; import org.telegram.messenger.ConnectionsManager;
import org.telegram.messenger.FileLog; import org.telegram.messenger.FileLog;
import org.telegram.ui.ApplicationLoader; import org.telegram.messenger.ApplicationLoader;
public class GcmBroadcastReceiver extends BroadcastReceiver { public class GcmBroadcastReceiver extends BroadcastReceiver {
...@@ -27,7 +27,7 @@ public class GcmBroadcastReceiver extends BroadcastReceiver { ...@@ -27,7 +27,7 @@ public class GcmBroadcastReceiver extends BroadcastReceiver {
FileLog.d("tmessages", "GCM received intent: " + intent); FileLog.d("tmessages", "GCM received intent: " + intent);
if (intent.getAction().equals("com.google.android.c2dm.intent.RECEIVE")) { if (intent.getAction().equals("com.google.android.c2dm.intent.RECEIVE")) {
AndroidUtilities.RunOnUIThread(new Runnable() { AndroidUtilities.runOnUIThread(new Runnable() {
@Override @Override
public void run() { public void run() {
ApplicationLoader.postInitApplication(); ApplicationLoader.postInitApplication();
......
...@@ -31,7 +31,7 @@ import org.telegram.messenger.FileLog; ...@@ -31,7 +31,7 @@ import org.telegram.messenger.FileLog;
import org.telegram.messenger.TLRPC; import org.telegram.messenger.TLRPC;
import org.telegram.messenger.UserConfig; import org.telegram.messenger.UserConfig;
import org.telegram.messenger.Utilities; import org.telegram.messenger.Utilities;
import org.telegram.ui.ApplicationLoader; import org.telegram.messenger.ApplicationLoader;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.File; import java.io.File;
...@@ -307,7 +307,7 @@ public class ImageLoader { ...@@ -307,7 +307,7 @@ public class ImageLoader {
} }
private void onPostExecute(final BitmapDrawable bitmapDrawable) { private void onPostExecute(final BitmapDrawable bitmapDrawable) {
AndroidUtilities.RunOnUIThread(new Runnable() { AndroidUtilities.runOnUIThread(new Runnable() {
@Override @Override
public void run() { public void run() {
if (bitmapDrawable != null && memCache.get(cacheImage.key) == null) { if (bitmapDrawable != null && memCache.get(cacheImage.key) == null) {
...@@ -518,7 +518,7 @@ public class ImageLoader { ...@@ -518,7 +518,7 @@ public class ImageLoader {
if (lastProgressUpdateTime == 0 || lastProgressUpdateTime < currentTime - 500) { if (lastProgressUpdateTime == 0 || lastProgressUpdateTime < currentTime - 500) {
lastProgressUpdateTime = currentTime; lastProgressUpdateTime = currentTime;
AndroidUtilities.RunOnUIThread(new Runnable() { AndroidUtilities.runOnUIThread(new Runnable() {
@Override @Override
public void run() { public void run() {
NotificationCenter.getInstance().postNotificationName(NotificationCenter.FileUploadProgressChanged, location, progress, isEncrypted); NotificationCenter.getInstance().postNotificationName(NotificationCenter.FileUploadProgressChanged, location, progress, isEncrypted);
...@@ -549,7 +549,7 @@ public class ImageLoader { ...@@ -549,7 +549,7 @@ public class ImageLoader {
@Override @Override
public void fileDidLoaded(final String location, final File finalFile, final File tempFile) { public void fileDidLoaded(final String location, final File finalFile, final File tempFile) {
AndroidUtilities.RunOnUIThread(new Runnable() { AndroidUtilities.runOnUIThread(new Runnable() {
@Override @Override
public void run() { public void run() {
if (location != null) { if (location != null) {
...@@ -567,7 +567,7 @@ public class ImageLoader { ...@@ -567,7 +567,7 @@ public class ImageLoader {
@Override @Override
public void fileDidFailedLoad(final String location, final int state) { public void fileDidFailedLoad(final String location, final int state) {
AndroidUtilities.RunOnUIThread(new Runnable() { AndroidUtilities.runOnUIThread(new Runnable() {
@Override @Override
public void run() { public void run() {
ImageLoader.this.fileDidFailedLoad(location); ImageLoader.this.fileDidFailedLoad(location);
...@@ -581,7 +581,7 @@ public class ImageLoader { ...@@ -581,7 +581,7 @@ public class ImageLoader {
long currentTime = System.currentTimeMillis(); long currentTime = System.currentTimeMillis();
if (lastProgressUpdateTime == 0 || lastProgressUpdateTime < currentTime - 500) { if (lastProgressUpdateTime == 0 || lastProgressUpdateTime < currentTime - 500) {
lastProgressUpdateTime = currentTime; lastProgressUpdateTime = currentTime;
AndroidUtilities.RunOnUIThread(new Runnable() { AndroidUtilities.runOnUIThread(new Runnable() {
@Override @Override
public void run() { public void run() {
NotificationCenter.getInstance().postNotificationName(NotificationCenter.FileLoadProgressChanged, location, progress); NotificationCenter.getInstance().postNotificationName(NotificationCenter.FileLoadProgressChanged, location, progress);
...@@ -601,7 +601,7 @@ public class ImageLoader { ...@@ -601,7 +601,7 @@ public class ImageLoader {
} }
}; };
if (Intent.ACTION_MEDIA_UNMOUNTED.equals(intent.getAction())) { if (Intent.ACTION_MEDIA_UNMOUNTED.equals(intent.getAction())) {
AndroidUtilities.RunOnUIThread(r, 1000); AndroidUtilities.runOnUIThread(r, 1000);
} else { } else {
r.run(); r.run();
} }
...@@ -816,7 +816,7 @@ public class ImageLoader { ...@@ -816,7 +816,7 @@ public class ImageLoader {
} }
public void replaceImageInCache(final String oldKey, final String newKey) { public void replaceImageInCache(final String oldKey, final String newKey) {
AndroidUtilities.RunOnUIThread(new Runnable() { AndroidUtilities.runOnUIThread(new Runnable() {
@Override @Override
public void run() { public void run() {
ArrayList<String> arr = memCache.getFilterKeys(oldKey); ArrayList<String> arr = memCache.getFilterKeys(oldKey);
...@@ -1117,9 +1117,9 @@ public class ImageLoader { ...@@ -1117,9 +1117,9 @@ public class ImageLoader {
return b; return b;
} }
private static TLRPC.PhotoSize scaleAndSaveImageInternal(Bitmap bitmap, int w, int h, float photoW, float photoH, float scaleFactor, int quality, boolean cache) throws Exception { private static TLRPC.PhotoSize scaleAndSaveImageInternal(Bitmap bitmap, int w, int h, float photoW, float photoH, float scaleFactor, int quality, boolean cache, boolean scaleAnyway) throws Exception {
Bitmap scaledBitmap = null; Bitmap scaledBitmap = null;
if (scaleFactor > 1) { if (scaleFactor > 1 || scaleAnyway) {
scaledBitmap = Bitmap.createScaledBitmap(bitmap, w, h, true); scaledBitmap = Bitmap.createScaledBitmap(bitmap, w, h, true);
} else { } else {
scaledBitmap = bitmap; scaledBitmap = bitmap;
...@@ -1171,6 +1171,10 @@ public class ImageLoader { ...@@ -1171,6 +1171,10 @@ public class ImageLoader {
} }
public static TLRPC.PhotoSize scaleAndSaveImage(Bitmap bitmap, float maxWidth, float maxHeight, int quality, boolean cache) { public static TLRPC.PhotoSize scaleAndSaveImage(Bitmap bitmap, float maxWidth, float maxHeight, int quality, boolean cache) {
return scaleAndSaveImage(bitmap, maxWidth, maxHeight, quality, cache, 0, 0);
}
public static TLRPC.PhotoSize scaleAndSaveImage(Bitmap bitmap, float maxWidth, float maxHeight, int quality, boolean cache, int minWidth, int minHeight) {
if (bitmap == null) { if (bitmap == null) {
return null; return null;
} }
...@@ -1179,7 +1183,12 @@ public class ImageLoader { ...@@ -1179,7 +1183,12 @@ public class ImageLoader {
if (photoW == 0 || photoH == 0) { if (photoW == 0 || photoH == 0) {
return null; return null;
} }
boolean scaleAnyway = false;
float scaleFactor = Math.max(photoW / maxWidth, photoH / maxHeight); float scaleFactor = Math.max(photoW / maxWidth, photoH / maxHeight);
if (scaleFactor < 1 && minWidth != 0 && minHeight != 0) {
scaleFactor = Math.max(photoW / minWidth, photoH / minHeight);
scaleAnyway = true;
}
int w = (int)(photoW / scaleFactor); int w = (int)(photoW / scaleFactor);
int h = (int)(photoH / scaleFactor); int h = (int)(photoH / scaleFactor);
if (h == 0 || w == 0) { if (h == 0 || w == 0) {
...@@ -1187,13 +1196,13 @@ public class ImageLoader { ...@@ -1187,13 +1196,13 @@ public class ImageLoader {
} }
try { try {
return scaleAndSaveImageInternal(bitmap, w, h, photoW, photoH, scaleFactor, quality, cache); return scaleAndSaveImageInternal(bitmap, w, h, photoW, photoH, scaleFactor, quality, cache, scaleAnyway);
} catch (Throwable e) { } catch (Throwable e) {
FileLog.e("tmessages", e); FileLog.e("tmessages", e);
ImageLoader.getInstance().clearMemory(); ImageLoader.getInstance().clearMemory();
System.gc(); System.gc();
try { try {
return scaleAndSaveImageInternal(bitmap, w, h, photoW, photoH, scaleFactor, quality, cache); return scaleAndSaveImageInternal(bitmap, w, h, photoW, photoH, scaleFactor, quality, cache, scaleAnyway);
} catch (Throwable e2) { } catch (Throwable e2) {
FileLog.e("tmessages", e2); FileLog.e("tmessages", e2);
return null; return null;
......
...@@ -139,7 +139,7 @@ public class ImageReceiver { ...@@ -139,7 +139,7 @@ public class ImageReceiver {
if (roundRadius != 0) { if (roundRadius != 0) {
bitmapShader = new BitmapShader(bitmap.getBitmap(), Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); bitmapShader = new BitmapShader(bitmap.getBitmap(), Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
roundPaint.setShader(bitmapShader); roundPaint.setShader(bitmapShader);
bitmapRect.set(0, 0, bitmap.getIntrinsicWidth(), bitmap.getIntrinsicHeight()); bitmapRect.set(0, 0, bitmap.getBitmap().getWidth(), bitmap.getBitmap().getHeight());
} }
if (parentView != null) { if (parentView != null) {
parentView.invalidate(); parentView.invalidate();
...@@ -225,11 +225,13 @@ public class ImageReceiver { ...@@ -225,11 +225,13 @@ public class ImageReceiver {
if (bitmapDrawable != null) { if (bitmapDrawable != null) {
if (bitmapShader != null) { if (bitmapShader != null) {
drawRegion.set(imageX, imageY, imageX + imageW, imageY + imageH); drawRegion.set(imageX, imageY, imageX + imageW, imageY + imageH);
roundRect.set(imageX, imageY, imageX + imageW, imageY + imageH); if (isVisible) {
roundRect.set(drawRegion);
shaderMatrix.reset(); shaderMatrix.reset();
shaderMatrix.setScale(1.5f, 1.5f); shaderMatrix.setRectToRect(bitmapRect, roundRect, Matrix.ScaleToFit.FILL);
bitmapShader.setLocalMatrix(shaderMatrix); bitmapShader.setLocalMatrix(shaderMatrix);
canvas.drawRoundRect(roundRect, roundRadius, roundRadius, roundPaint); canvas.drawRoundRect(roundRect, roundRadius, roundRadius, roundPaint);
}
} else { } else {
int bitmapW = bitmapDrawable.getIntrinsicWidth(); int bitmapW = bitmapDrawable.getIntrinsicWidth();
int bitmapH = bitmapDrawable.getIntrinsicHeight(); int bitmapH = bitmapDrawable.getIntrinsicHeight();
...@@ -412,10 +414,12 @@ public class ImageReceiver { ...@@ -412,10 +414,12 @@ public class ImageReceiver {
public void setRoundRadius(int value) { public void setRoundRadius(int value) {
roundRadius = value; roundRadius = value;
if (roundRadius != 0) { if (roundRadius != 0) {
if (roundPaint == null) {
roundPaint = new Paint(Paint.ANTI_ALIAS_FLAG); roundPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
roundRect = new RectF(); roundRect = new RectF();
shaderMatrix = new Matrix(); shaderMatrix = new Matrix();
bitmapRect = new RectF(); bitmapRect = new RectF();
}
} else { } else {
roundPaint = null; roundPaint = null;
roundRect = null; roundRect = null;
...@@ -423,4 +427,8 @@ public class ImageReceiver { ...@@ -423,4 +427,8 @@ public class ImageReceiver {
bitmapRect = null; bitmapRect = null;
} }
} }
public int getRoundRadius() {
return roundRadius;
}
} }
...@@ -18,12 +18,13 @@ import android.content.res.Configuration; ...@@ -18,12 +18,13 @@ import android.content.res.Configuration;
import android.text.format.DateFormat; import android.text.format.DateFormat;
import android.util.Xml; import android.util.Xml;
import org.telegram.android.time.FastDateFormat;
import org.telegram.messenger.ConnectionsManager; import org.telegram.messenger.ConnectionsManager;
import org.telegram.messenger.FileLog; import org.telegram.messenger.FileLog;
import org.telegram.messenger.R; import org.telegram.messenger.R;
import org.telegram.messenger.TLRPC; import org.telegram.messenger.TLRPC;
import org.telegram.messenger.Utilities; import org.telegram.messenger.Utilities;
import org.telegram.ui.ApplicationLoader; import org.telegram.messenger.ApplicationLoader;
import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParser;
import java.io.File; import java.io.File;
...@@ -781,8 +782,22 @@ public class LocaleController { ...@@ -781,8 +782,22 @@ public class LocaleController {
} }
public static String formatUserStatus(TLRPC.User user) { public static String formatUserStatus(TLRPC.User user) {
if (user != null && user.status != null && user.status.expires == 0) {
if (user.status instanceof TLRPC.TL_userStatusRecently) {
user.status.expires = -100;
} else if (user.status instanceof TLRPC.TL_userStatusLastWeek) {
user.status.expires = -101;
} else if (user.status instanceof TLRPC.TL_userStatusLastMonth) {
user.status.expires = -102;
}
}
if (user != null && user.status != null && user.status.expires <= 0) {
if (MessagesController.getInstance().onlinePrivacy.containsKey(user.id)) {
return getString("Online", R.string.Online);
}
}
if (user == null || user.status == null || user.status.expires == 0 || user instanceof TLRPC.TL_userDeleted || user instanceof TLRPC.TL_userEmpty) { if (user == null || user.status == null || user.status.expires == 0 || user instanceof TLRPC.TL_userDeleted || user instanceof TLRPC.TL_userEmpty) {
return getString("Offline", R.string.Offline); return getString("ALongTimeAgo", R.string.ALongTimeAgo);
} else { } else {
int currentTime = ConnectionsManager.getInstance().getCurrentTime(); int currentTime = ConnectionsManager.getInstance().getCurrentTime();
if (user.status.expires > currentTime) { if (user.status.expires > currentTime) {
...@@ -790,6 +805,12 @@ public class LocaleController { ...@@ -790,6 +805,12 @@ public class LocaleController {
} else { } else {
if (user.status.expires == -1) { if (user.status.expires == -1) {
return getString("Invisible", R.string.Invisible); return getString("Invisible", R.string.Invisible);
} else if (user.status.expires == -100) {
return getString("Lately", R.string.Lately);
} else if (user.status.expires == -101) {
return getString("WithinAWeek", R.string.WithinAWeek);
} else if (user.status.expires == -102) {
return getString("WithinAMonth", R.string.WithinAMonth);
} else { } else {
return formatDateOnline(user.status.expires); return formatDateOnline(user.status.expires);
} }
......
...@@ -25,7 +25,7 @@ import org.telegram.messenger.FileLog; ...@@ -25,7 +25,7 @@ import org.telegram.messenger.FileLog;
import org.telegram.messenger.TLRPC; import org.telegram.messenger.TLRPC;
import org.telegram.messenger.R; import org.telegram.messenger.R;
import org.telegram.messenger.UserConfig; import org.telegram.messenger.UserConfig;
import org.telegram.ui.Views.URLSpanNoUnderline; import org.telegram.ui.Components.URLSpanNoUnderline;
import java.util.AbstractMap; import java.util.AbstractMap;
import java.util.ArrayList; import java.util.ArrayList;
...@@ -345,7 +345,9 @@ public class MessageObject { ...@@ -345,7 +345,9 @@ public class MessageObject {
int dateMonth = rightNow.get(Calendar.MONTH); int dateMonth = rightNow.get(Calendar.MONTH);
dateKey = String.format("%d_%02d_%02d", dateYear, dateMonth, dateDay); dateKey = String.format("%d_%02d_%02d", dateYear, dateMonth, dateDay);
if (preview != 0) {
generateLayout(); generateLayout();
}
generateThumbs(false, preview); generateThumbs(false, preview);
} }
...@@ -450,6 +452,60 @@ public class MessageObject { ...@@ -450,6 +452,60 @@ public class MessageObject {
return ""; return "";
} }
private boolean containsUrls(String message) {
if (message == null || message.length() < 3 || message.length() > 1024 * 20) {
return false;
}
boolean containsSomething = false;
int length = message.length();
int digitsInRow = 0;
int schemeSequence = 0;
int dotSequence = 0;
char lastChar = 0;
for (int i = 0; i < length; i++) {
char c = message.charAt(i);
if (c >= '0' && c <= '9') {
digitsInRow++;
if (digitsInRow >= 6) {
return true;
}
schemeSequence = 0;
dotSequence = 0;
} else if (c == ':') {
if (schemeSequence == 0) {
schemeSequence = 1;
} else {
schemeSequence = 0;
}
} else if (c == '/') {
if (schemeSequence == 2) {
return true;
}
if (schemeSequence == 1) {
schemeSequence++;
} else {
schemeSequence = 0;
}
} else if (c == '.') {
if (dotSequence == 0 && lastChar != ' ') {
dotSequence++;
} else {
dotSequence = 0;
}
} else if (c != ' ' && lastChar == '.' && dotSequence == 1) {
return true;
}
lastChar = c;
}
return false;
}
private void generateLayout() { private void generateLayout() {
if (type != 0 || messageOwner.to_id == null || messageText == null || messageText.length() == 0) { if (type != 0 || messageOwner.to_id == null || messageText == null || messageText.length() == 0) {
return; return;
...@@ -457,11 +513,11 @@ public class MessageObject { ...@@ -457,11 +513,11 @@ public class MessageObject {
textLayoutBlocks = new ArrayList<TextLayoutBlock>(); textLayoutBlocks = new ArrayList<TextLayoutBlock>();
if (messageText instanceof Spannable) { if (messageText instanceof Spannable && containsUrls(messageOwner.message)) {
if (messageOwner.message != null && messageOwner.message.contains(".") && (messageOwner.message.contains(".com") || messageOwner.message.contains("http") || messageOwner.message.contains(".ru") || messageOwner.message.contains(".org") || messageOwner.message.contains(".net"))) { if (messageOwner.message.length() < 100) {
Linkify.addLinks((Spannable)messageText, Linkify.WEB_URLS); Linkify.addLinks((Spannable) messageText, Linkify.WEB_URLS | Linkify.PHONE_NUMBERS);
} else if (messageText.length() < 100) { } else {
Linkify.addLinks((Spannable)messageText, Linkify.WEB_URLS | Linkify.EMAIL_ADDRESSES | Linkify.PHONE_NUMBERS); Linkify.addLinks((Spannable) messageText, Linkify.WEB_URLS);
} }
} }
...@@ -574,10 +630,7 @@ public class MessageObject { ...@@ -574,10 +630,7 @@ public class MessageObject {
} }
if (lineWidth > maxWidth + 100) { if (lineWidth > maxWidth + 100) {
int start = block.textLayout.getLineStart(n); lineWidth = maxWidth;
int end = block.textLayout.getLineEnd(n);
CharSequence text = block.textLayout.getText().subSequence(start, end);
continue;
} }
try { try {
......
...@@ -23,7 +23,6 @@ public class NotificationCenter { ...@@ -23,7 +23,6 @@ public class NotificationCenter {
public static final int messageReceivedByAck = 9; public static final int messageReceivedByAck = 9;
public static final int messageReceivedByServer = 10; public static final int messageReceivedByServer = 10;
public static final int messageSendError = 11; public static final int messageSendError = 11;
public static final int reloadSearchResults = 12;
public static final int contactsDidLoaded = 13; public static final int contactsDidLoaded = 13;
public static final int chatDidCreated = 15; public static final int chatDidCreated = 15;
public static final int chatDidFailCreate = 16; public static final int chatDidFailCreate = 16;
...@@ -42,10 +41,13 @@ public class NotificationCenter { ...@@ -42,10 +41,13 @@ public class NotificationCenter {
public static final int hideEmojiKeyboard = 30; public static final int hideEmojiKeyboard = 30;
public static final int stopEncodingService = 31; public static final int stopEncodingService = 31;
public static final int didCreatedNewDeleteTask = 32; public static final int didCreatedNewDeleteTask = 32;
public static final int mainUserInfoChanged = 33;
public static final int privacyRulesUpdated = 34;
public static final int wallpapersDidLoaded = 171; public static final int wallpapersDidLoaded = 171;
public static final int closeOtherAppActivities = 702; public static final int closeOtherAppActivities = 702;
public static final int didUpdatedConnectionState = 703; public static final int didUpdatedConnectionState = 703;
public static final int didReceiveSmsCode = 998;
public static final int emojiDidLoaded = 999; public static final int emojiDidLoaded = 999;
public static final int appDidLogout = 1234; public static final int appDidLogout = 1234;
......
...@@ -21,7 +21,7 @@ public class NotificationRepeat extends IntentService { ...@@ -21,7 +21,7 @@ public class NotificationRepeat extends IntentService {
@Override @Override
protected void onHandleIntent(Intent intent) { protected void onHandleIntent(Intent intent) {
AndroidUtilities.RunOnUIThread(new Runnable() { AndroidUtilities.runOnUIThread(new Runnable() {
@Override @Override
public void run() { public void run() {
NotificationsController.getInstance().repeatNotificationMaybe(); NotificationsController.getInstance().repeatNotificationMaybe();
......
...@@ -14,7 +14,7 @@ import android.content.SharedPreferences; ...@@ -14,7 +14,7 @@ import android.content.SharedPreferences;
import android.os.IBinder; import android.os.IBinder;
import org.telegram.messenger.FileLog; import org.telegram.messenger.FileLog;
import org.telegram.ui.ApplicationLoader; import org.telegram.messenger.ApplicationLoader;
public class NotificationsService extends Service { public class NotificationsService extends Service {
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment