Video editing and compression on 4.1+ (please test it and send debug info to me), Tablet version, a lot of other things (don't upload to markets, it's unstable)
|
@ -80,7 +80,7 @@ android {
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
minSdkVersion 8
|
minSdkVersion 8
|
||||||
targetSdkVersion 19
|
targetSdkVersion 19
|
||||||
versionCode 326
|
versionCode 327
|
||||||
versionName "1.8.3"
|
versionName "1.9.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,12 +3,12 @@ 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
|
||||||
LOCAL_CFLAGS := -w -std=gnu99 -O2 -DNULL=0 -DSOCKLEN_T=socklen_t -DLOCALE_NOT_USED -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 -DLOG_DISABLED
|
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
|
||||||
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
|
LOCAL_LDLIBS := -ljnigraphics -llog
|
||||||
|
|
||||||
LOCAL_SRC_FILES := \
|
LOCAL_SRC_FILES := \
|
||||||
./opus/src/opus.c \
|
./opus/src/opus.c \
|
||||||
|
@ -227,6 +227,46 @@ LOCAL_SRC_FILES += \
|
||||||
./libjpeg/jquant2.c \
|
./libjpeg/jquant2.c \
|
||||||
./libjpeg/jutils.c
|
./libjpeg/jutils.c
|
||||||
|
|
||||||
|
LOCAL_SRC_FILES += \
|
||||||
|
./libyuv/source/compare_common.cc \
|
||||||
|
./libyuv/source/compare_neon.cc \
|
||||||
|
./libyuv/source/compare_posix.cc \
|
||||||
|
./libyuv/source/compare_win.cc \
|
||||||
|
./libyuv/source/compare.cc \
|
||||||
|
./libyuv/source/convert_argb.cc \
|
||||||
|
./libyuv/source/convert_from_argb.cc \
|
||||||
|
./libyuv/source/convert_from.cc \
|
||||||
|
./libyuv/source/convert_jpeg.cc \
|
||||||
|
./libyuv/source/convert_to_argb.cc \
|
||||||
|
./libyuv/source/convert_to_i420.cc \
|
||||||
|
./libyuv/source/convert.cc \
|
||||||
|
./libyuv/source/cpu_id.cc \
|
||||||
|
./libyuv/source/format_conversion.cc \
|
||||||
|
./libyuv/source/mjpeg_decoder.cc \
|
||||||
|
./libyuv/source/mjpeg_validate.cc \
|
||||||
|
./libyuv/source/planar_functions.cc \
|
||||||
|
./libyuv/source/rotate_argb.cc \
|
||||||
|
./libyuv/source/rotate_mips.cc \
|
||||||
|
./libyuv/source/rotate_neon.cc \
|
||||||
|
./libyuv/source/rotate_neon64.cc \
|
||||||
|
./libyuv/source/rotate.cc \
|
||||||
|
./libyuv/source/row_any.cc \
|
||||||
|
./libyuv/source/row_common.cc \
|
||||||
|
./libyuv/source/row_mips.cc \
|
||||||
|
./libyuv/source/row_neon.cc \
|
||||||
|
./libyuv/source/row_neon64.cc \
|
||||||
|
./libyuv/source/row_posix.cc \
|
||||||
|
./libyuv/source/row_win.cc \
|
||||||
|
./libyuv/source/scale_argb.cc \
|
||||||
|
./libyuv/source/scale_common.cc \
|
||||||
|
./libyuv/source/scale_mips.cc \
|
||||||
|
./libyuv/source/scale_neon.cc \
|
||||||
|
./libyuv/source/scale_neon64.cc \
|
||||||
|
./libyuv/source/scale_posix.cc \
|
||||||
|
./libyuv/source/scale_win.cc \
|
||||||
|
./libyuv/source/scale.cc \
|
||||||
|
./libyuv/source/video_common.cc
|
||||||
|
|
||||||
LOCAL_SRC_FILES += \
|
LOCAL_SRC_FILES += \
|
||||||
./jni.c \
|
./jni.c \
|
||||||
./sqlite_cursor.c \
|
./sqlite_cursor.c \
|
||||||
|
@ -237,6 +277,7 @@ LOCAL_SRC_FILES += \
|
||||||
./gif.c \
|
./gif.c \
|
||||||
./utils.c \
|
./utils.c \
|
||||||
./image.c \
|
./image.c \
|
||||||
|
./video.c \
|
||||||
./fake.c
|
./fake.c
|
||||||
|
|
||||||
include $(BUILD_SHARED_LIBRARY)
|
include $(BUILD_SHARED_LIBRARY)
|
|
@ -4,7 +4,7 @@
|
||||||
#include <android/log.h>
|
#include <android/log.h>
|
||||||
#include <jni.h>
|
#include <jni.h>
|
||||||
|
|
||||||
#define LOG_TAG "tmessages_native"
|
#define LOG_TAG "tmessages"
|
||||||
#ifndef LOG_DISABLED
|
#ifndef LOG_DISABLED
|
||||||
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)
|
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)
|
||||||
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
|
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
|
||||||
|
|
94
TMessagesProj/jni/video.c
Normal file
|
@ -0,0 +1,94 @@
|
||||||
|
#include <jni.h>
|
||||||
|
#include <libyuv.h>
|
||||||
|
#include <utils.h>
|
||||||
|
|
||||||
|
enum COLOR_FORMATTYPE {
|
||||||
|
COLOR_FormatMonochrome = 1,
|
||||||
|
COLOR_Format8bitRGB332 = 2,
|
||||||
|
COLOR_Format12bitRGB444 = 3,
|
||||||
|
COLOR_Format16bitARGB4444 = 4,
|
||||||
|
COLOR_Format16bitARGB1555 = 5,
|
||||||
|
COLOR_Format16bitRGB565 = 6,
|
||||||
|
COLOR_Format16bitBGR565 = 7,
|
||||||
|
COLOR_Format18bitRGB666 = 8,
|
||||||
|
COLOR_Format18bitARGB1665 = 9,
|
||||||
|
COLOR_Format19bitARGB1666 = 10,
|
||||||
|
COLOR_Format24bitRGB888 = 11,
|
||||||
|
COLOR_Format24bitBGR888 = 12,
|
||||||
|
COLOR_Format24bitARGB1887 = 13,
|
||||||
|
COLOR_Format25bitARGB1888 = 14,
|
||||||
|
COLOR_Format32bitBGRA8888 = 15,
|
||||||
|
COLOR_Format32bitARGB8888 = 16,
|
||||||
|
COLOR_FormatYUV411Planar = 17,
|
||||||
|
COLOR_FormatYUV411PackedPlanar = 18,
|
||||||
|
COLOR_FormatYUV420Planar = 19,
|
||||||
|
COLOR_FormatYUV420PackedPlanar = 20,
|
||||||
|
COLOR_FormatYUV420SemiPlanar = 21,
|
||||||
|
COLOR_FormatYUV422Planar = 22,
|
||||||
|
COLOR_FormatYUV422PackedPlanar = 23,
|
||||||
|
COLOR_FormatYUV422SemiPlanar = 24,
|
||||||
|
COLOR_FormatYCbYCr = 25,
|
||||||
|
COLOR_FormatYCrYCb = 26,
|
||||||
|
COLOR_FormatCbYCrY = 27,
|
||||||
|
COLOR_FormatCrYCbY = 28,
|
||||||
|
COLOR_FormatYUV444Interleaved = 29,
|
||||||
|
COLOR_FormatRawBayer8bit = 30,
|
||||||
|
COLOR_FormatRawBayer10bit = 31,
|
||||||
|
COLOR_FormatRawBayer8bitcompressed = 32,
|
||||||
|
COLOR_FormatL2 = 33,
|
||||||
|
COLOR_FormatL4 = 34,
|
||||||
|
COLOR_FormatL8 = 35,
|
||||||
|
COLOR_FormatL16 = 36,
|
||||||
|
COLOR_FormatL24 = 37,
|
||||||
|
COLOR_FormatL32 = 38,
|
||||||
|
COLOR_FormatYUV420PackedSemiPlanar = 39,
|
||||||
|
COLOR_FormatYUV422PackedSemiPlanar = 40,
|
||||||
|
COLOR_Format18BitBGR666 = 41,
|
||||||
|
COLOR_Format24BitARGB6666 = 42,
|
||||||
|
COLOR_Format24BitABGR6666 = 43,
|
||||||
|
|
||||||
|
COLOR_TI_FormatYUV420PackedSemiPlanar = 0x7f000100,
|
||||||
|
COLOR_FormatSurface = 0x7F000789,
|
||||||
|
COLOR_QCOM_FormatYUV420SemiPlanar = 0x7fa30c00
|
||||||
|
};
|
||||||
|
|
||||||
|
int isSemiPlanarYUV(int colorFormat) {
|
||||||
|
switch (colorFormat) {
|
||||||
|
case COLOR_FormatYUV420Planar:
|
||||||
|
case COLOR_FormatYUV420PackedPlanar:
|
||||||
|
return 0;
|
||||||
|
case COLOR_FormatYUV420SemiPlanar:
|
||||||
|
case COLOR_FormatYUV420PackedSemiPlanar:
|
||||||
|
case COLOR_TI_FormatYUV420PackedSemiPlanar:
|
||||||
|
return 1;
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
JNIEXPORT int Java_org_telegram_messenger_Utilities_convertVideoFrame(JNIEnv *env, jclass class, jobject src, jobject dest, int destFormat, int width, int height, int padding) {
|
||||||
|
if (!src || !dest || !destFormat) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
jbyte *srcBuff = (*env)->GetDirectBufferAddress(env, src);
|
||||||
|
jbyte *destBuff = (*env)->GetDirectBufferAddress(env, dest);
|
||||||
|
|
||||||
|
int half_width = (width + 1) / 2;
|
||||||
|
int half_height = (height + 1) / 2;
|
||||||
|
|
||||||
|
if (!isSemiPlanarYUV(destFormat)) {
|
||||||
|
ARGBToI420(srcBuff, width * 4,
|
||||||
|
destBuff, width,
|
||||||
|
destBuff + width * height + half_width * half_height + padding * 5 / 4, half_width,
|
||||||
|
destBuff + width * height + padding, half_width,
|
||||||
|
width, height);
|
||||||
|
} else {
|
||||||
|
ARGBToNV21(srcBuff, width * 4,
|
||||||
|
destBuff, width,
|
||||||
|
destBuff + width * height + padding, half_width * 2,
|
||||||
|
width, height);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
|
@ -98,8 +98,7 @@
|
||||||
</activity>
|
</activity>
|
||||||
<activity
|
<activity
|
||||||
android:name="org.telegram.ui.IntroActivity"
|
android:name="org.telegram.ui.IntroActivity"
|
||||||
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
|
android:configChanges="keyboard|keyboardHidden|orientation|screenSize">
|
||||||
android:screenOrientation="portrait">
|
|
||||||
</activity>
|
</activity>
|
||||||
<activity
|
<activity
|
||||||
android:name="org.telegram.ui.PopupNotificationActivity"
|
android:name="org.telegram.ui.PopupNotificationActivity"
|
||||||
|
|
|
@ -23,10 +23,13 @@ import android.view.WindowManager;
|
||||||
import android.view.inputmethod.InputMethodManager;
|
import android.view.inputmethod.InputMethodManager;
|
||||||
|
|
||||||
import org.telegram.messenger.FileLog;
|
import org.telegram.messenger.FileLog;
|
||||||
|
import org.telegram.messenger.R;
|
||||||
|
import org.telegram.messenger.UserConfig;
|
||||||
import org.telegram.ui.ApplicationLoader;
|
import org.telegram.ui.ApplicationLoader;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.Hashtable;
|
import java.util.Hashtable;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
public class AndroidUtilities {
|
public class AndroidUtilities {
|
||||||
private static final Hashtable<String, Typeface> typefaceCache = new Hashtable<String, Typeface>();
|
private static final Hashtable<String, Typeface> typefaceCache = new Hashtable<String, Typeface>();
|
||||||
|
@ -39,13 +42,44 @@ public class AndroidUtilities {
|
||||||
public static float density = 1;
|
public static float density = 1;
|
||||||
public static Point displaySize = new Point();
|
public static Point displaySize = new Point();
|
||||||
|
|
||||||
|
public static int[] arrColors = {0xffee4928, 0xff41a903, 0xffe09602, 0xff0f94ed, 0xff8f3bf7, 0xfffc4380, 0xff00a1c4, 0xffeb7002};
|
||||||
|
public static int[] arrUsersAvatars = {
|
||||||
|
R.drawable.user_red,
|
||||||
|
R.drawable.user_green,
|
||||||
|
R.drawable.user_yellow,
|
||||||
|
R.drawable.user_blue,
|
||||||
|
R.drawable.user_violet,
|
||||||
|
R.drawable.user_pink,
|
||||||
|
R.drawable.user_aqua,
|
||||||
|
R.drawable.user_orange};
|
||||||
|
|
||||||
|
public static int[] arrGroupsAvatars = {
|
||||||
|
R.drawable.group_red,
|
||||||
|
R.drawable.group_green,
|
||||||
|
R.drawable.group_yellow,
|
||||||
|
R.drawable.group_blue,
|
||||||
|
R.drawable.group_violet,
|
||||||
|
R.drawable.group_pink,
|
||||||
|
R.drawable.group_aqua,
|
||||||
|
R.drawable.group_orange};
|
||||||
|
|
||||||
|
public static int[] arrBroadcastAvatars = {
|
||||||
|
R.drawable.broadcast_red,
|
||||||
|
R.drawable.broadcast_green,
|
||||||
|
R.drawable.broadcast_yellow,
|
||||||
|
R.drawable.broadcast_blue,
|
||||||
|
R.drawable.broadcast_violet,
|
||||||
|
R.drawable.broadcast_pink,
|
||||||
|
R.drawable.broadcast_aqua,
|
||||||
|
R.drawable.broadcast_orange};
|
||||||
|
|
||||||
static {
|
static {
|
||||||
density = ApplicationLoader.applicationContext.getResources().getDisplayMetrics().density;
|
density = ApplicationLoader.applicationContext.getResources().getDisplayMetrics().density;
|
||||||
checkDisplaySize();
|
checkDisplaySize();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void lockOrientation(Activity activity) {
|
public static void lockOrientation(Activity activity) {
|
||||||
if (prevOrientation != -10) {
|
if (activity == null || prevOrientation != -10) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
|
@ -103,6 +137,9 @@ public class AndroidUtilities {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void unlockOrientation(Activity activity) {
|
public static void unlockOrientation(Activity activity) {
|
||||||
|
if (activity == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
if (prevOrientation != -10) {
|
if (prevOrientation != -10) {
|
||||||
activity.setRequestedOrientation(prevOrientation);
|
activity.setRequestedOrientation(prevOrientation);
|
||||||
|
@ -229,4 +266,60 @@ public class AndroidUtilities {
|
||||||
public static void RunOnUIThread(Runnable runnable) {
|
public static void RunOnUIThread(Runnable runnable) {
|
||||||
ApplicationLoader.applicationHandler.post(runnable);
|
ApplicationLoader.applicationHandler.post(runnable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean isTablet() {
|
||||||
|
return (ApplicationLoader.applicationContext.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int getColorIndex(int id) {
|
||||||
|
int[] arr;
|
||||||
|
if (id >= 0) {
|
||||||
|
arr = arrUsersAvatars;
|
||||||
|
} else {
|
||||||
|
arr = arrGroupsAvatars;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
String str;
|
||||||
|
if (id >= 0) {
|
||||||
|
str = String.format(Locale.US, "%d%d", id, UserConfig.getClientUserId());
|
||||||
|
} else {
|
||||||
|
str = String.format(Locale.US, "%d", id);
|
||||||
|
}
|
||||||
|
if (str.length() > 15) {
|
||||||
|
str = str.substring(0, 15);
|
||||||
|
}
|
||||||
|
java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5");
|
||||||
|
byte[] digest = md.digest(str.getBytes());
|
||||||
|
int b = digest[Math.abs(id % 16)];
|
||||||
|
if (b < 0) {
|
||||||
|
b += 256;
|
||||||
|
}
|
||||||
|
return Math.abs(b) % arr.length;
|
||||||
|
} catch (Exception e) {
|
||||||
|
FileLog.e("tmessages", e);
|
||||||
|
}
|
||||||
|
return id % arr.length;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int getColorForId(int id) {
|
||||||
|
if (id / 1000 == 333) {
|
||||||
|
return 0xff0f94ed;
|
||||||
|
}
|
||||||
|
return arrColors[getColorIndex(id)];
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int getUserAvatarForId(int id) {
|
||||||
|
if (id / 1000 == 333 || id / 1000 == 777) {
|
||||||
|
return R.drawable.telegram_avatar;
|
||||||
|
}
|
||||||
|
return arrUsersAvatars[getColorIndex(id)];
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int getGroupAvatarForId(int id) {
|
||||||
|
return arrGroupsAvatars[getColorIndex(-Math.abs(id))];
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int getBroadcastAvatarForId(int id) {
|
||||||
|
return arrBroadcastAvatars[getColorIndex(-Math.abs(id))];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,6 +17,7 @@ import android.database.Cursor;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.provider.BaseColumns;
|
import android.provider.BaseColumns;
|
||||||
import android.provider.ContactsContract;
|
import android.provider.ContactsContract;
|
||||||
|
import android.provider.Settings;
|
||||||
import android.util.SparseArray;
|
import android.util.SparseArray;
|
||||||
|
|
||||||
import org.telegram.PhoneFormat.PhoneFormat;
|
import org.telegram.PhoneFormat.PhoneFormat;
|
||||||
|
@ -48,6 +49,7 @@ public class ContactsController {
|
||||||
private boolean contactsBookLoaded = false;
|
private boolean contactsBookLoaded = false;
|
||||||
private String lastContactsVersions = "";
|
private String lastContactsVersions = "";
|
||||||
private ArrayList<Integer> delayedContactsUpdate = new ArrayList<Integer>();
|
private ArrayList<Integer> delayedContactsUpdate = new ArrayList<Integer>();
|
||||||
|
public int nameDisplayOrder = 1;
|
||||||
|
|
||||||
public static class Contact {
|
public static class Contact {
|
||||||
public int id;
|
public int id;
|
||||||
|
@ -99,6 +101,14 @@ public class ContactsController {
|
||||||
return localInstance;
|
return localInstance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ContactsController() {
|
||||||
|
try {
|
||||||
|
nameDisplayOrder = Settings.System.getInt(ApplicationLoader.applicationContext.getContentResolver(), "android.contacts.DISPLAY_ORDER");
|
||||||
|
} catch (Exception e) {
|
||||||
|
FileLog.e("tmessages", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void cleanup() {
|
public void cleanup() {
|
||||||
contactsBook.clear();
|
contactsBook.clear();
|
||||||
contactsBookSPhones.clear();
|
contactsBookSPhones.clear();
|
||||||
|
@ -1465,7 +1475,7 @@ public class ContactsController {
|
||||||
MessagesStorage.getInstance().putContacts(arrayList, false);
|
MessagesStorage.getInstance().putContacts(arrayList, false);
|
||||||
|
|
||||||
if (u.phone != null && u.phone.length() > 0) {
|
if (u.phone != null && u.phone.length() > 0) {
|
||||||
String name = Utilities.formatName(u.first_name, u.last_name);
|
String name = formatName(u.first_name, u.last_name);
|
||||||
MessagesStorage.getInstance().applyPhoneBookUpdates(u.phone, "");
|
MessagesStorage.getInstance().applyPhoneBookUpdates(u.phone, "");
|
||||||
Contact contact = contactsBookSPhones.get(u.phone);
|
Contact contact = contactsBookSPhones.get(u.phone);
|
||||||
if (contact != null) {
|
if (contact != null) {
|
||||||
|
@ -1529,7 +1539,7 @@ public class ContactsController {
|
||||||
|
|
||||||
for (TLRPC.User user : users) {
|
for (TLRPC.User user : users) {
|
||||||
if (user.phone != null && user.phone.length() > 0) {
|
if (user.phone != null && user.phone.length() > 0) {
|
||||||
String name = Utilities.formatName(user.first_name, user.last_name);
|
String name = ContactsController.formatName(user.first_name, user.last_name);
|
||||||
MessagesStorage.getInstance().applyPhoneBookUpdates(user.phone, "");
|
MessagesStorage.getInstance().applyPhoneBookUpdates(user.phone, "");
|
||||||
Contact contact = contactsBookSPhones.get(user.phone);
|
Contact contact = contactsBookSPhones.get(user.phone);
|
||||||
if (contact != null) {
|
if (contact != null) {
|
||||||
|
@ -1563,4 +1573,24 @@ public class ContactsController {
|
||||||
}
|
}
|
||||||
}, true, RPCRequest.RPCRequestClassGeneric);
|
}, true, RPCRequest.RPCRequestClassGeneric);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String formatName(String firstName, String lastName) {
|
||||||
|
String result = null;
|
||||||
|
if (ContactsController.getInstance().nameDisplayOrder == 1) {
|
||||||
|
result = firstName;
|
||||||
|
if (result == null || result.length() == 0) {
|
||||||
|
result = lastName;
|
||||||
|
} else if (result.length() != 0 && lastName != null && lastName.length() != 0) {
|
||||||
|
result += " " + lastName;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
result = lastName;
|
||||||
|
if (result == null || result.length() == 0) {
|
||||||
|
result = firstName;
|
||||||
|
} else if (result.length() != 0 && firstName != null && firstName.length() != 0) {
|
||||||
|
result += " " + firstName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result.trim();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -214,7 +214,11 @@ public class Emoji {
|
||||||
emojiFullSize = 90;
|
emojiFullSize = 90;
|
||||||
}
|
}
|
||||||
drawImgSize = AndroidUtilities.dp(20);
|
drawImgSize = AndroidUtilities.dp(20);
|
||||||
|
if (AndroidUtilities.isTablet()) {
|
||||||
|
bigImgSize = AndroidUtilities.dp(40);
|
||||||
|
} else {
|
||||||
bigImgSize = AndroidUtilities.dp(30);
|
bigImgSize = AndroidUtilities.dp(30);
|
||||||
|
}
|
||||||
|
|
||||||
for (int j = 1; j < data.length; j++) {
|
for (int j = 1; j < data.length; j++) {
|
||||||
for (int i = 0; i < data[j].length; i++) {
|
for (int i = 0; i < data[j].length; i++) {
|
||||||
|
|
|
@ -91,7 +91,7 @@ public class MessageObject {
|
||||||
messageText = LocaleController.getString("ActionYouCreateGroup", R.string.ActionYouCreateGroup);
|
messageText = LocaleController.getString("ActionYouCreateGroup", R.string.ActionYouCreateGroup);
|
||||||
} else {
|
} else {
|
||||||
if (fromUser != null) {
|
if (fromUser != null) {
|
||||||
messageText = LocaleController.getString("ActionCreateGroup", R.string.ActionCreateGroup).replace("un1", Utilities.formatName(fromUser.first_name, fromUser.last_name));
|
messageText = LocaleController.getString("ActionCreateGroup", R.string.ActionCreateGroup).replace("un1", ContactsController.formatName(fromUser.first_name, fromUser.last_name));
|
||||||
} else {
|
} else {
|
||||||
messageText = LocaleController.getString("ActionCreateGroup", R.string.ActionCreateGroup).replace("un1", "");
|
messageText = LocaleController.getString("ActionCreateGroup", R.string.ActionCreateGroup).replace("un1", "");
|
||||||
}
|
}
|
||||||
|
@ -102,7 +102,7 @@ public class MessageObject {
|
||||||
messageText = LocaleController.getString("ActionYouLeftUser", R.string.ActionYouLeftUser);
|
messageText = LocaleController.getString("ActionYouLeftUser", R.string.ActionYouLeftUser);
|
||||||
} else {
|
} else {
|
||||||
if (fromUser != null) {
|
if (fromUser != null) {
|
||||||
messageText = LocaleController.getString("ActionLeftUser", R.string.ActionLeftUser).replace("un1", Utilities.formatName(fromUser.first_name, fromUser.last_name));
|
messageText = LocaleController.getString("ActionLeftUser", R.string.ActionLeftUser).replace("un1", ContactsController.formatName(fromUser.first_name, fromUser.last_name));
|
||||||
} else {
|
} else {
|
||||||
messageText = LocaleController.getString("ActionLeftUser", R.string.ActionLeftUser).replace("un1", "");
|
messageText = LocaleController.getString("ActionLeftUser", R.string.ActionLeftUser).replace("un1", "");
|
||||||
}
|
}
|
||||||
|
@ -117,11 +117,11 @@ public class MessageObject {
|
||||||
}
|
}
|
||||||
if (who != null && fromUser != null) {
|
if (who != null && fromUser != null) {
|
||||||
if (isFromMe()) {
|
if (isFromMe()) {
|
||||||
messageText = LocaleController.getString("ActionYouKickUser", R.string.ActionYouKickUser).replace("un2", Utilities.formatName(who.first_name, who.last_name));
|
messageText = LocaleController.getString("ActionYouKickUser", R.string.ActionYouKickUser).replace("un2", ContactsController.formatName(who.first_name, who.last_name));
|
||||||
} else if (message.action.user_id == UserConfig.getClientUserId()) {
|
} else if (message.action.user_id == UserConfig.getClientUserId()) {
|
||||||
messageText = LocaleController.getString("ActionKickUserYou", R.string.ActionKickUserYou).replace("un1", Utilities.formatName(fromUser.first_name, fromUser.last_name));
|
messageText = LocaleController.getString("ActionKickUserYou", R.string.ActionKickUserYou).replace("un1", ContactsController.formatName(fromUser.first_name, fromUser.last_name));
|
||||||
} else {
|
} else {
|
||||||
messageText = LocaleController.getString("ActionKickUser", R.string.ActionKickUser).replace("un2", Utilities.formatName(who.first_name, who.last_name)).replace("un1", Utilities.formatName(fromUser.first_name, fromUser.last_name));
|
messageText = LocaleController.getString("ActionKickUser", R.string.ActionKickUser).replace("un2", ContactsController.formatName(who.first_name, who.last_name)).replace("un1", ContactsController.formatName(fromUser.first_name, fromUser.last_name));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
messageText = LocaleController.getString("ActionKickUser", R.string.ActionKickUser).replace("un2", "").replace("un1", "");
|
messageText = LocaleController.getString("ActionKickUser", R.string.ActionKickUser).replace("un2", "").replace("un1", "");
|
||||||
|
@ -137,11 +137,11 @@ public class MessageObject {
|
||||||
}
|
}
|
||||||
if (whoUser != null && fromUser != null) {
|
if (whoUser != null && fromUser != null) {
|
||||||
if (isFromMe()) {
|
if (isFromMe()) {
|
||||||
messageText = LocaleController.getString("ActionYouAddUser", R.string.ActionYouAddUser).replace("un2", Utilities.formatName(whoUser.first_name, whoUser.last_name));
|
messageText = LocaleController.getString("ActionYouAddUser", R.string.ActionYouAddUser).replace("un2", ContactsController.formatName(whoUser.first_name, whoUser.last_name));
|
||||||
} else if (message.action.user_id == UserConfig.getClientUserId()) {
|
} else if (message.action.user_id == UserConfig.getClientUserId()) {
|
||||||
messageText = LocaleController.getString("ActionAddUserYou", R.string.ActionAddUserYou).replace("un1", Utilities.formatName(fromUser.first_name, fromUser.last_name));
|
messageText = LocaleController.getString("ActionAddUserYou", R.string.ActionAddUserYou).replace("un1", ContactsController.formatName(fromUser.first_name, fromUser.last_name));
|
||||||
} else {
|
} else {
|
||||||
messageText = LocaleController.getString("ActionAddUser", R.string.ActionAddUser).replace("un2", Utilities.formatName(whoUser.first_name, whoUser.last_name)).replace("un1", Utilities.formatName(fromUser.first_name, fromUser.last_name));
|
messageText = LocaleController.getString("ActionAddUser", R.string.ActionAddUser).replace("un2", ContactsController.formatName(whoUser.first_name, whoUser.last_name)).replace("un1", ContactsController.formatName(fromUser.first_name, fromUser.last_name));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
messageText = LocaleController.getString("ActionAddUser", R.string.ActionAddUser).replace("un2", "").replace("un1", "");
|
messageText = LocaleController.getString("ActionAddUser", R.string.ActionAddUser).replace("un2", "").replace("un1", "");
|
||||||
|
@ -151,7 +151,7 @@ public class MessageObject {
|
||||||
messageText = LocaleController.getString("ActionYouChangedPhoto", R.string.ActionYouChangedPhoto);
|
messageText = LocaleController.getString("ActionYouChangedPhoto", R.string.ActionYouChangedPhoto);
|
||||||
} else {
|
} else {
|
||||||
if (fromUser != null) {
|
if (fromUser != null) {
|
||||||
messageText = LocaleController.getString("ActionChangedPhoto", R.string.ActionChangedPhoto).replace("un1", Utilities.formatName(fromUser.first_name, fromUser.last_name));
|
messageText = LocaleController.getString("ActionChangedPhoto", R.string.ActionChangedPhoto).replace("un1", ContactsController.formatName(fromUser.first_name, fromUser.last_name));
|
||||||
} else {
|
} else {
|
||||||
messageText = LocaleController.getString("ActionChangedPhoto", R.string.ActionChangedPhoto).replace("un1", "");
|
messageText = LocaleController.getString("ActionChangedPhoto", R.string.ActionChangedPhoto).replace("un1", "");
|
||||||
}
|
}
|
||||||
|
@ -161,7 +161,7 @@ public class MessageObject {
|
||||||
messageText = LocaleController.getString("ActionYouChangedTitle", R.string.ActionYouChangedTitle).replace("un2", message.action.title);
|
messageText = LocaleController.getString("ActionYouChangedTitle", R.string.ActionYouChangedTitle).replace("un2", message.action.title);
|
||||||
} else {
|
} else {
|
||||||
if (fromUser != null) {
|
if (fromUser != null) {
|
||||||
messageText = LocaleController.getString("ActionChangedTitle", R.string.ActionChangedTitle).replace("un1", Utilities.formatName(fromUser.first_name, fromUser.last_name)).replace("un2", message.action.title);
|
messageText = LocaleController.getString("ActionChangedTitle", R.string.ActionChangedTitle).replace("un1", ContactsController.formatName(fromUser.first_name, fromUser.last_name)).replace("un2", message.action.title);
|
||||||
} else {
|
} else {
|
||||||
messageText = LocaleController.getString("ActionChangedTitle", R.string.ActionChangedTitle).replace("un1", "").replace("un2", message.action.title);
|
messageText = LocaleController.getString("ActionChangedTitle", R.string.ActionChangedTitle).replace("un1", "").replace("un2", message.action.title);
|
||||||
}
|
}
|
||||||
|
@ -171,7 +171,7 @@ public class MessageObject {
|
||||||
messageText = LocaleController.getString("ActionYouRemovedPhoto", R.string.ActionYouRemovedPhoto);
|
messageText = LocaleController.getString("ActionYouRemovedPhoto", R.string.ActionYouRemovedPhoto);
|
||||||
} else {
|
} else {
|
||||||
if (fromUser != null) {
|
if (fromUser != null) {
|
||||||
messageText = LocaleController.getString("ActionRemovedPhoto", R.string.ActionRemovedPhoto).replace("un1", Utilities.formatName(fromUser.first_name, fromUser.last_name));
|
messageText = LocaleController.getString("ActionRemovedPhoto", R.string.ActionRemovedPhoto).replace("un1", ContactsController.formatName(fromUser.first_name, fromUser.last_name));
|
||||||
} else {
|
} else {
|
||||||
messageText = LocaleController.getString("ActionRemovedPhoto", R.string.ActionRemovedPhoto).replace("un1", "");
|
messageText = LocaleController.getString("ActionRemovedPhoto", R.string.ActionRemovedPhoto).replace("un1", "");
|
||||||
}
|
}
|
||||||
|
@ -232,13 +232,13 @@ public class MessageObject {
|
||||||
messageText = LocaleController.formatString("NotificationUnrecognizedDevice", R.string.NotificationUnrecognizedDevice, name, date, message.action.title, message.action.address);
|
messageText = LocaleController.formatString("NotificationUnrecognizedDevice", R.string.NotificationUnrecognizedDevice, name, date, message.action.title, message.action.address);
|
||||||
} else if (message.action instanceof TLRPC.TL_messageActionUserJoined) {
|
} else if (message.action instanceof TLRPC.TL_messageActionUserJoined) {
|
||||||
if (fromUser != null) {
|
if (fromUser != null) {
|
||||||
messageText = LocaleController.formatString("NotificationContactJoined", R.string.NotificationContactJoined, Utilities.formatName(fromUser.first_name, fromUser.last_name));
|
messageText = LocaleController.formatString("NotificationContactJoined", R.string.NotificationContactJoined, ContactsController.formatName(fromUser.first_name, fromUser.last_name));
|
||||||
} else {
|
} else {
|
||||||
messageText = LocaleController.formatString("NotificationContactJoined", R.string.NotificationContactJoined, "");
|
messageText = LocaleController.formatString("NotificationContactJoined", R.string.NotificationContactJoined, "");
|
||||||
}
|
}
|
||||||
} else if (message.action instanceof TLRPC.TL_messageActionUserUpdatedPhoto) {
|
} else if (message.action instanceof TLRPC.TL_messageActionUserUpdatedPhoto) {
|
||||||
if (fromUser != null) {
|
if (fromUser != null) {
|
||||||
messageText = LocaleController.formatString("NotificationContactNewPhoto", R.string.NotificationContactNewPhoto, Utilities.formatName(fromUser.first_name, fromUser.last_name));
|
messageText = LocaleController.formatString("NotificationContactNewPhoto", R.string.NotificationContactNewPhoto, ContactsController.formatName(fromUser.first_name, fromUser.last_name));
|
||||||
} else {
|
} else {
|
||||||
messageText = LocaleController.formatString("NotificationContactNewPhoto", R.string.NotificationContactNewPhoto, "");
|
messageText = LocaleController.formatString("NotificationContactNewPhoto", R.string.NotificationContactNewPhoto, "");
|
||||||
}
|
}
|
||||||
|
@ -443,11 +443,24 @@ public class MessageObject {
|
||||||
}
|
}
|
||||||
|
|
||||||
int maxWidth;
|
int maxWidth;
|
||||||
|
if (AndroidUtilities.isTablet()) {
|
||||||
|
int min = Math.min(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y);
|
||||||
|
int leftWidth = min / 100 * 35;
|
||||||
|
if (leftWidth < AndroidUtilities.dp(320)) {
|
||||||
|
leftWidth = AndroidUtilities.dp(320);
|
||||||
|
}
|
||||||
|
if (messageOwner.to_id.chat_id != 0) {
|
||||||
|
maxWidth = min - leftWidth - AndroidUtilities.dp(122);
|
||||||
|
} else {
|
||||||
|
maxWidth = min - leftWidth - AndroidUtilities.dp(80);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
if (messageOwner.to_id.chat_id != 0) {
|
if (messageOwner.to_id.chat_id != 0) {
|
||||||
maxWidth = Math.min(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y) - AndroidUtilities.dp(122);
|
maxWidth = Math.min(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y) - AndroidUtilities.dp(122);
|
||||||
} else {
|
} else {
|
||||||
maxWidth = Math.min(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y) - AndroidUtilities.dp(80);
|
maxWidth = Math.min(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y) - AndroidUtilities.dp(80);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
StaticLayout textLayout = null;
|
StaticLayout textLayout = null;
|
||||||
|
|
||||||
|
@ -485,12 +498,17 @@ public class MessageObject {
|
||||||
CharSequence str = messageText.subSequence(startCharacter, endCharacter);
|
CharSequence str = messageText.subSequence(startCharacter, endCharacter);
|
||||||
block.textLayout = new StaticLayout(str, textPaint, maxWidth, Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false);
|
block.textLayout = new StaticLayout(str, textPaint, maxWidth, Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false);
|
||||||
block.textYOffset = textLayout.getLineTop(linesOffset);
|
block.textYOffset = textLayout.getLineTop(linesOffset);
|
||||||
if (a != blocksCount - 1) {
|
if (a != 0) {
|
||||||
|
blockHeight = Math.min(blockHeight, (int)(block.textYOffset - prevOffset));
|
||||||
|
}
|
||||||
|
prevOffset = block.textYOffset;
|
||||||
|
/*if (a != blocksCount - 1) {
|
||||||
|
int height = block.textLayout.getHeight();
|
||||||
blockHeight = Math.min(blockHeight, block.textLayout.getHeight());
|
blockHeight = Math.min(blockHeight, block.textLayout.getHeight());
|
||||||
prevOffset = block.textYOffset;
|
prevOffset = block.textYOffset;
|
||||||
} else {
|
} else {
|
||||||
blockHeight = Math.min(blockHeight, (int)(block.textYOffset - prevOffset));
|
blockHeight = Math.min(blockHeight, (int)(block.textYOffset - prevOffset));
|
||||||
}
|
}*/
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
FileLog.e("tmessages", e);
|
FileLog.e("tmessages", e);
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -143,7 +143,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter
|
||||||
preferences = ApplicationLoader.applicationContext.getSharedPreferences("mainconfig", Activity.MODE_PRIVATE);
|
preferences = ApplicationLoader.applicationContext.getSharedPreferences("mainconfig", Activity.MODE_PRIVATE);
|
||||||
maxGroupCount = preferences.getInt("maxGroupCount", 200);
|
maxGroupCount = preferences.getInt("maxGroupCount", 200);
|
||||||
maxBroadcastCount = preferences.getInt("maxBroadcastCount", 100);
|
maxBroadcastCount = preferences.getInt("maxBroadcastCount", 100);
|
||||||
fontSize = preferences.getInt("fons_size", 16);
|
fontSize = preferences.getInt("fons_size", AndroidUtilities.isTablet() ? 18 : 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateConfig(final TLRPC.TL_config config) {
|
public void updateConfig(final TLRPC.TL_config config) {
|
||||||
|
@ -1175,7 +1175,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter
|
||||||
if (label.length() != 0) {
|
if (label.length() != 0) {
|
||||||
label += ", ";
|
label += ", ";
|
||||||
}
|
}
|
||||||
label += Utilities.formatName(user.first_name, user.last_name);
|
label += ContactsController.formatName(user.first_name, user.last_name);
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
if (count == 2) {
|
if (count == 2) {
|
||||||
|
@ -3462,9 +3462,23 @@ public class MessagesController implements NotificationCenter.NotificationCenter
|
||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
boolean change = false;
|
||||||
if (dialog.top_message > 0 && lastMessage.messageOwner.id > 0 && lastMessage.messageOwner.id > dialog.top_message ||
|
if (dialog.top_message > 0 && lastMessage.messageOwner.id > 0 && lastMessage.messageOwner.id > dialog.top_message ||
|
||||||
dialog.top_message < 0 && lastMessage.messageOwner.id < 0 && lastMessage.messageOwner.id < dialog.top_message ||
|
dialog.top_message < 0 && lastMessage.messageOwner.id < 0 && lastMessage.messageOwner.id < dialog.top_message) {
|
||||||
dialog.last_message_date < lastMessage.messageOwner.date) {
|
change = true;
|
||||||
|
} else {
|
||||||
|
MessageObject currentDialogMessage = dialogMessage.get(dialog.top_message);
|
||||||
|
if (currentDialogMessage != null) {
|
||||||
|
if (currentDialogMessage.messageOwner.send_state == MessageObject.MESSAGE_SEND_STATE_SENDING && lastMessage.messageOwner.send_state == MessageObject.MESSAGE_SEND_STATE_SENDING) {
|
||||||
|
change = true;
|
||||||
|
} else if (dialog.last_message_date < lastMessage.messageOwner.date || dialog.last_message_date == lastMessage.messageOwner.date && lastMessage.messageOwner.send_state == MessageObject.MESSAGE_SEND_STATE_SENDING) {
|
||||||
|
change = true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
change = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (change) {
|
||||||
dialogMessage.remove(dialog.top_message);
|
dialogMessage.remove(dialog.top_message);
|
||||||
dialog.top_message = lastMessage.messageOwner.id;
|
dialog.top_message = lastMessage.messageOwner.id;
|
||||||
if (!isBroadcast) {
|
if (!isBroadcast) {
|
||||||
|
|
|
@ -1253,7 +1253,7 @@ public class MessagesStorage {
|
||||||
if (user.status != null) {
|
if (user.status != null) {
|
||||||
user.status.expires = cursor.intValue(7);
|
user.status.expires = cursor.intValue(7);
|
||||||
}
|
}
|
||||||
resultArrayNames.add(Html.fromHtml("<font color=\"#00a60e\">" + Utilities.formatName(user.first_name, user.last_name) + "</font>"));
|
resultArrayNames.add(Html.fromHtml("<font color=\"#00a60e\">" + ContactsController.formatName(user.first_name, user.last_name) + "</font>"));
|
||||||
resultArray.add(chat);
|
resultArray.add(chat);
|
||||||
encUsers.add(user);
|
encUsers.add(user);
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,9 +24,9 @@ import java.util.zip.ZipFile;
|
||||||
public class NativeLoader {
|
public class NativeLoader {
|
||||||
|
|
||||||
private static final long sizes[] = new long[] {
|
private static final long sizes[] = new long[] {
|
||||||
811664, //armeabi
|
946908, //armeabi
|
||||||
864932, //armeabi-v7a
|
1028848, //armeabi-v7a
|
||||||
1262644, //x86
|
1603780, //x86
|
||||||
0, //mips
|
0, //mips
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -38,6 +38,7 @@ public class NotificationCenter {
|
||||||
public static final int notificationsSettingsUpdated = 26;
|
public static final int notificationsSettingsUpdated = 26;
|
||||||
public static final int pushMessagesUpdated = 27;
|
public static final int pushMessagesUpdated = 27;
|
||||||
public static final int blockedUsersDidLoaded = 28;
|
public static final int blockedUsersDidLoaded = 28;
|
||||||
|
public static final int openedChatChanged = 29;
|
||||||
|
|
||||||
public static final int wallpapersDidLoaded = 171;
|
public static final int wallpapersDidLoaded = 171;
|
||||||
public static final int closeOtherAppActivities = 702;
|
public static final int closeOtherAppActivities = 702;
|
||||||
|
@ -67,7 +68,7 @@ public class NotificationCenter {
|
||||||
final private HashMap<Integer, Object> removeAfterBroadcast = new HashMap<Integer, Object>();
|
final private HashMap<Integer, Object> removeAfterBroadcast = new HashMap<Integer, Object>();
|
||||||
final private HashMap<Integer, Object> addAfterBroadcast = new HashMap<Integer, Object>();
|
final private HashMap<Integer, Object> addAfterBroadcast = new HashMap<Integer, Object>();
|
||||||
|
|
||||||
private boolean broadcasting = false;
|
private int broadcasting = 0;
|
||||||
|
|
||||||
private static volatile NotificationCenter Instance = null;
|
private static volatile NotificationCenter Instance = null;
|
||||||
public static NotificationCenter getInstance() {
|
public static NotificationCenter getInstance() {
|
||||||
|
@ -89,14 +90,15 @@ public class NotificationCenter {
|
||||||
|
|
||||||
public void postNotificationName(int id, Object... args) {
|
public void postNotificationName(int id, Object... args) {
|
||||||
synchronized (observers) {
|
synchronized (observers) {
|
||||||
broadcasting = true;
|
broadcasting++;
|
||||||
ArrayList<Object> objects = observers.get(id);
|
ArrayList<Object> objects = observers.get(id);
|
||||||
if (objects != null) {
|
if (objects != null) {
|
||||||
for (Object obj : objects) {
|
for (Object obj : objects) {
|
||||||
((NotificationCenterDelegate)obj).didReceivedNotification(id, args);
|
((NotificationCenterDelegate)obj).didReceivedNotification(id, args);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
broadcasting = false;
|
broadcasting--;
|
||||||
|
if (broadcasting == 0) {
|
||||||
if (!removeAfterBroadcast.isEmpty()) {
|
if (!removeAfterBroadcast.isEmpty()) {
|
||||||
for (HashMap.Entry<Integer, Object> entry : removeAfterBroadcast.entrySet()) {
|
for (HashMap.Entry<Integer, Object> entry : removeAfterBroadcast.entrySet()) {
|
||||||
removeObserver(entry.getValue(), entry.getKey());
|
removeObserver(entry.getValue(), entry.getKey());
|
||||||
|
@ -111,10 +113,11 @@ public class NotificationCenter {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void addObserver(Object observer, int id) {
|
public void addObserver(Object observer, int id) {
|
||||||
synchronized (observers) {
|
synchronized (observers) {
|
||||||
if (broadcasting) {
|
if (broadcasting != 0) {
|
||||||
addAfterBroadcast.put(id, observer);
|
addAfterBroadcast.put(id, observer);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -131,7 +134,7 @@ public class NotificationCenter {
|
||||||
|
|
||||||
public void removeObserver(Object observer, int id) {
|
public void removeObserver(Object observer, int id) {
|
||||||
synchronized (observers) {
|
synchronized (observers) {
|
||||||
if (broadcasting) {
|
if (broadcasting != 0) {
|
||||||
removeAfterBroadcast.put(id, observer);
|
removeAfterBroadcast.put(id, observer);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,7 +30,6 @@ 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.UserConfig;
|
import org.telegram.messenger.UserConfig;
|
||||||
import org.telegram.messenger.Utilities;
|
|
||||||
import org.telegram.ui.ApplicationLoader;
|
import org.telegram.ui.ApplicationLoader;
|
||||||
import org.telegram.ui.LaunchActivity;
|
import org.telegram.ui.LaunchActivity;
|
||||||
import org.telegram.ui.PopupNotificationActivity;
|
import org.telegram.ui.PopupNotificationActivity;
|
||||||
|
@ -126,9 +125,9 @@ public class NotificationsController {
|
||||||
if (preferences.getBoolean("EnablePreviewAll", true)) {
|
if (preferences.getBoolean("EnablePreviewAll", true)) {
|
||||||
if (messageObject.messageOwner instanceof TLRPC.TL_messageService) {
|
if (messageObject.messageOwner instanceof TLRPC.TL_messageService) {
|
||||||
if (messageObject.messageOwner.action instanceof TLRPC.TL_messageActionUserJoined) {
|
if (messageObject.messageOwner.action instanceof TLRPC.TL_messageActionUserJoined) {
|
||||||
msg = LocaleController.formatString("NotificationContactJoined", R.string.NotificationContactJoined, Utilities.formatName(user.first_name, user.last_name));
|
msg = LocaleController.formatString("NotificationContactJoined", R.string.NotificationContactJoined, ContactsController.formatName(user.first_name, user.last_name));
|
||||||
} else if (messageObject.messageOwner.action instanceof TLRPC.TL_messageActionUserUpdatedPhoto) {
|
} else if (messageObject.messageOwner.action instanceof TLRPC.TL_messageActionUserUpdatedPhoto) {
|
||||||
msg = LocaleController.formatString("NotificationContactNewPhoto", R.string.NotificationContactNewPhoto, Utilities.formatName(user.first_name, user.last_name));
|
msg = LocaleController.formatString("NotificationContactNewPhoto", R.string.NotificationContactNewPhoto, ContactsController.formatName(user.first_name, user.last_name));
|
||||||
} else if (messageObject.messageOwner.action instanceof TLRPC.TL_messageActionLoginUnknownLocation) {
|
} else if (messageObject.messageOwner.action instanceof TLRPC.TL_messageActionLoginUnknownLocation) {
|
||||||
String date = String.format("%s %s %s", LocaleController.formatterYear.format(((long)messageObject.messageOwner.date) * 1000), LocaleController.getString("OtherAt", R.string.OtherAt), LocaleController.formatterDay.format(((long)messageObject.messageOwner.date) * 1000));
|
String date = String.format("%s %s %s", LocaleController.formatterYear.format(((long)messageObject.messageOwner.date) * 1000), LocaleController.getString("OtherAt", R.string.OtherAt), LocaleController.formatterDay.format(((long)messageObject.messageOwner.date) * 1000));
|
||||||
msg = LocaleController.formatString("NotificationUnrecognizedDevice", R.string.NotificationUnrecognizedDevice, UserConfig.getCurrentUser().first_name, date, messageObject.messageOwner.action.title, messageObject.messageOwner.action.address);
|
msg = LocaleController.formatString("NotificationUnrecognizedDevice", R.string.NotificationUnrecognizedDevice, UserConfig.getCurrentUser().first_name, date, messageObject.messageOwner.action.title, messageObject.messageOwner.action.address);
|
||||||
|
@ -136,26 +135,26 @@ public class NotificationsController {
|
||||||
} else {
|
} else {
|
||||||
if (messageObject.messageOwner.media instanceof TLRPC.TL_messageMediaEmpty) {
|
if (messageObject.messageOwner.media instanceof TLRPC.TL_messageMediaEmpty) {
|
||||||
if (messageObject.messageOwner.message != null && messageObject.messageOwner.message.length() != 0) {
|
if (messageObject.messageOwner.message != null && messageObject.messageOwner.message.length() != 0) {
|
||||||
msg = LocaleController.formatString("NotificationMessageText", R.string.NotificationMessageText, Utilities.formatName(user.first_name, user.last_name), messageObject.messageOwner.message);
|
msg = LocaleController.formatString("NotificationMessageText", R.string.NotificationMessageText, ContactsController.formatName(user.first_name, user.last_name), messageObject.messageOwner.message);
|
||||||
} else {
|
} else {
|
||||||
msg = LocaleController.formatString("NotificationMessageNoText", R.string.NotificationMessageNoText, Utilities.formatName(user.first_name, user.last_name));
|
msg = LocaleController.formatString("NotificationMessageNoText", R.string.NotificationMessageNoText, ContactsController.formatName(user.first_name, user.last_name));
|
||||||
}
|
}
|
||||||
} else if (messageObject.messageOwner.media instanceof TLRPC.TL_messageMediaPhoto) {
|
} else if (messageObject.messageOwner.media instanceof TLRPC.TL_messageMediaPhoto) {
|
||||||
msg = LocaleController.formatString("NotificationMessagePhoto", R.string.NotificationMessagePhoto, Utilities.formatName(user.first_name, user.last_name));
|
msg = LocaleController.formatString("NotificationMessagePhoto", R.string.NotificationMessagePhoto, ContactsController.formatName(user.first_name, user.last_name));
|
||||||
} else if (messageObject.messageOwner.media instanceof TLRPC.TL_messageMediaVideo) {
|
} else if (messageObject.messageOwner.media instanceof TLRPC.TL_messageMediaVideo) {
|
||||||
msg = LocaleController.formatString("NotificationMessageVideo", R.string.NotificationMessageVideo, Utilities.formatName(user.first_name, user.last_name));
|
msg = LocaleController.formatString("NotificationMessageVideo", R.string.NotificationMessageVideo, ContactsController.formatName(user.first_name, user.last_name));
|
||||||
} else if (messageObject.messageOwner.media instanceof TLRPC.TL_messageMediaContact) {
|
} else if (messageObject.messageOwner.media instanceof TLRPC.TL_messageMediaContact) {
|
||||||
msg = LocaleController.formatString("NotificationMessageContact", R.string.NotificationMessageContact, Utilities.formatName(user.first_name, user.last_name));
|
msg = LocaleController.formatString("NotificationMessageContact", R.string.NotificationMessageContact, ContactsController.formatName(user.first_name, user.last_name));
|
||||||
} else if (messageObject.messageOwner.media instanceof TLRPC.TL_messageMediaGeo) {
|
} else if (messageObject.messageOwner.media instanceof TLRPC.TL_messageMediaGeo) {
|
||||||
msg = LocaleController.formatString("NotificationMessageMap", R.string.NotificationMessageMap, Utilities.formatName(user.first_name, user.last_name));
|
msg = LocaleController.formatString("NotificationMessageMap", R.string.NotificationMessageMap, ContactsController.formatName(user.first_name, user.last_name));
|
||||||
} else if (messageObject.messageOwner.media instanceof TLRPC.TL_messageMediaDocument) {
|
} else if (messageObject.messageOwner.media instanceof TLRPC.TL_messageMediaDocument) {
|
||||||
msg = LocaleController.formatString("NotificationMessageDocument", R.string.NotificationMessageDocument, Utilities.formatName(user.first_name, user.last_name));
|
msg = LocaleController.formatString("NotificationMessageDocument", R.string.NotificationMessageDocument, ContactsController.formatName(user.first_name, user.last_name));
|
||||||
} else if (messageObject.messageOwner.media instanceof TLRPC.TL_messageMediaAudio) {
|
} else if (messageObject.messageOwner.media instanceof TLRPC.TL_messageMediaAudio) {
|
||||||
msg = LocaleController.formatString("NotificationMessageAudio", R.string.NotificationMessageAudio, Utilities.formatName(user.first_name, user.last_name));
|
msg = LocaleController.formatString("NotificationMessageAudio", R.string.NotificationMessageAudio, ContactsController.formatName(user.first_name, user.last_name));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
msg = LocaleController.formatString("NotificationMessageNoText", R.string.NotificationMessageNoText, Utilities.formatName(user.first_name, user.last_name));
|
msg = LocaleController.formatString("NotificationMessageNoText", R.string.NotificationMessageNoText, ContactsController.formatName(user.first_name, user.last_name));
|
||||||
}
|
}
|
||||||
} else if (chat_id != 0) {
|
} else if (chat_id != 0) {
|
||||||
SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("Notifications", Context.MODE_PRIVATE);
|
SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("Notifications", Context.MODE_PRIVATE);
|
||||||
|
@ -163,29 +162,29 @@ public class NotificationsController {
|
||||||
if (messageObject.messageOwner instanceof TLRPC.TL_messageService) {
|
if (messageObject.messageOwner instanceof TLRPC.TL_messageService) {
|
||||||
if (messageObject.messageOwner.action instanceof TLRPC.TL_messageActionChatAddUser) {
|
if (messageObject.messageOwner.action instanceof TLRPC.TL_messageActionChatAddUser) {
|
||||||
if (messageObject.messageOwner.action.user_id == UserConfig.getClientUserId()) {
|
if (messageObject.messageOwner.action.user_id == UserConfig.getClientUserId()) {
|
||||||
msg = LocaleController.formatString("NotificationInvitedToGroup", R.string.NotificationInvitedToGroup, Utilities.formatName(user.first_name, user.last_name), chat.title);
|
msg = LocaleController.formatString("NotificationInvitedToGroup", R.string.NotificationInvitedToGroup, ContactsController.formatName(user.first_name, user.last_name), chat.title);
|
||||||
} else {
|
} else {
|
||||||
TLRPC.User u2 = MessagesController.getInstance().getUser(messageObject.messageOwner.action.user_id);
|
TLRPC.User u2 = MessagesController.getInstance().getUser(messageObject.messageOwner.action.user_id);
|
||||||
if (u2 == null) {
|
if (u2 == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
msg = LocaleController.formatString("NotificationGroupAddMember", R.string.NotificationGroupAddMember, Utilities.formatName(user.first_name, user.last_name), chat.title, Utilities.formatName(u2.first_name, u2.last_name));
|
msg = LocaleController.formatString("NotificationGroupAddMember", R.string.NotificationGroupAddMember, ContactsController.formatName(user.first_name, user.last_name), chat.title, ContactsController.formatName(u2.first_name, u2.last_name));
|
||||||
}
|
}
|
||||||
} else if (messageObject.messageOwner.action instanceof TLRPC.TL_messageActionChatEditTitle) {
|
} else if (messageObject.messageOwner.action instanceof TLRPC.TL_messageActionChatEditTitle) {
|
||||||
msg = LocaleController.formatString("NotificationEditedGroupName", R.string.NotificationEditedGroupName, Utilities.formatName(user.first_name, user.last_name), messageObject.messageOwner.action.title);
|
msg = LocaleController.formatString("NotificationEditedGroupName", R.string.NotificationEditedGroupName, ContactsController.formatName(user.first_name, user.last_name), messageObject.messageOwner.action.title);
|
||||||
} else if (messageObject.messageOwner.action instanceof TLRPC.TL_messageActionChatEditPhoto || messageObject.messageOwner.action instanceof TLRPC.TL_messageActionChatDeletePhoto) {
|
} else if (messageObject.messageOwner.action instanceof TLRPC.TL_messageActionChatEditPhoto || messageObject.messageOwner.action instanceof TLRPC.TL_messageActionChatDeletePhoto) {
|
||||||
msg = LocaleController.formatString("NotificationEditedGroupPhoto", R.string.NotificationEditedGroupPhoto, Utilities.formatName(user.first_name, user.last_name), chat.title);
|
msg = LocaleController.formatString("NotificationEditedGroupPhoto", R.string.NotificationEditedGroupPhoto, ContactsController.formatName(user.first_name, user.last_name), chat.title);
|
||||||
} else if (messageObject.messageOwner.action instanceof TLRPC.TL_messageActionChatDeleteUser) {
|
} else if (messageObject.messageOwner.action instanceof TLRPC.TL_messageActionChatDeleteUser) {
|
||||||
if (messageObject.messageOwner.action.user_id == UserConfig.getClientUserId()) {
|
if (messageObject.messageOwner.action.user_id == UserConfig.getClientUserId()) {
|
||||||
msg = LocaleController.formatString("NotificationGroupKickYou", R.string.NotificationGroupKickYou, Utilities.formatName(user.first_name, user.last_name), chat.title);
|
msg = LocaleController.formatString("NotificationGroupKickYou", R.string.NotificationGroupKickYou, ContactsController.formatName(user.first_name, user.last_name), chat.title);
|
||||||
} else if (messageObject.messageOwner.action.user_id == user.id) {
|
} else if (messageObject.messageOwner.action.user_id == user.id) {
|
||||||
msg = LocaleController.formatString("NotificationGroupLeftMember", R.string.NotificationGroupLeftMember, Utilities.formatName(user.first_name, user.last_name), chat.title);
|
msg = LocaleController.formatString("NotificationGroupLeftMember", R.string.NotificationGroupLeftMember, ContactsController.formatName(user.first_name, user.last_name), chat.title);
|
||||||
} else {
|
} else {
|
||||||
TLRPC.User u2 = MessagesController.getInstance().getUser(messageObject.messageOwner.action.user_id);
|
TLRPC.User u2 = MessagesController.getInstance().getUser(messageObject.messageOwner.action.user_id);
|
||||||
if (u2 == null) {
|
if (u2 == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
msg = LocaleController.formatString("NotificationGroupKickMember", R.string.NotificationGroupKickMember, Utilities.formatName(user.first_name, user.last_name), chat.title, Utilities.formatName(u2.first_name, u2.last_name));
|
msg = LocaleController.formatString("NotificationGroupKickMember", R.string.NotificationGroupKickMember, ContactsController.formatName(user.first_name, user.last_name), chat.title, ContactsController.formatName(u2.first_name, u2.last_name));
|
||||||
}
|
}
|
||||||
} else if (messageObject.messageOwner.action instanceof TLRPC.TL_messageActionChatCreate) {
|
} else if (messageObject.messageOwner.action instanceof TLRPC.TL_messageActionChatCreate) {
|
||||||
msg = messageObject.messageText.toString();
|
msg = messageObject.messageText.toString();
|
||||||
|
@ -193,26 +192,26 @@ public class NotificationsController {
|
||||||
} else {
|
} else {
|
||||||
if (messageObject.messageOwner.media instanceof TLRPC.TL_messageMediaEmpty) {
|
if (messageObject.messageOwner.media instanceof TLRPC.TL_messageMediaEmpty) {
|
||||||
if (messageObject.messageOwner.message != null && messageObject.messageOwner.message.length() != 0) {
|
if (messageObject.messageOwner.message != null && messageObject.messageOwner.message.length() != 0) {
|
||||||
msg = LocaleController.formatString("NotificationMessageGroupText", R.string.NotificationMessageGroupText, Utilities.formatName(user.first_name, user.last_name), chat.title, messageObject.messageOwner.message);
|
msg = LocaleController.formatString("NotificationMessageGroupText", R.string.NotificationMessageGroupText, ContactsController.formatName(user.first_name, user.last_name), chat.title, messageObject.messageOwner.message);
|
||||||
} else {
|
} else {
|
||||||
msg = LocaleController.formatString("NotificationMessageGroupNoText", R.string.NotificationMessageGroupNoText, Utilities.formatName(user.first_name, user.last_name), chat.title);
|
msg = LocaleController.formatString("NotificationMessageGroupNoText", R.string.NotificationMessageGroupNoText, ContactsController.formatName(user.first_name, user.last_name), chat.title);
|
||||||
}
|
}
|
||||||
} else if (messageObject.messageOwner.media instanceof TLRPC.TL_messageMediaPhoto) {
|
} else if (messageObject.messageOwner.media instanceof TLRPC.TL_messageMediaPhoto) {
|
||||||
msg = LocaleController.formatString("NotificationMessageGroupPhoto", R.string.NotificationMessageGroupPhoto, Utilities.formatName(user.first_name, user.last_name), chat.title);
|
msg = LocaleController.formatString("NotificationMessageGroupPhoto", R.string.NotificationMessageGroupPhoto, ContactsController.formatName(user.first_name, user.last_name), chat.title);
|
||||||
} else if (messageObject.messageOwner.media instanceof TLRPC.TL_messageMediaVideo) {
|
} else if (messageObject.messageOwner.media instanceof TLRPC.TL_messageMediaVideo) {
|
||||||
msg = LocaleController.formatString("NotificationMessageGroupVideo", R.string.NotificationMessageGroupVideo, Utilities.formatName(user.first_name, user.last_name), chat.title);
|
msg = LocaleController.formatString("NotificationMessageGroupVideo", R.string.NotificationMessageGroupVideo, ContactsController.formatName(user.first_name, user.last_name), chat.title);
|
||||||
} else if (messageObject.messageOwner.media instanceof TLRPC.TL_messageMediaContact) {
|
} else if (messageObject.messageOwner.media instanceof TLRPC.TL_messageMediaContact) {
|
||||||
msg = LocaleController.formatString("NotificationMessageGroupContact", R.string.NotificationMessageGroupContact, Utilities.formatName(user.first_name, user.last_name), chat.title);
|
msg = LocaleController.formatString("NotificationMessageGroupContact", R.string.NotificationMessageGroupContact, ContactsController.formatName(user.first_name, user.last_name), chat.title);
|
||||||
} else if (messageObject.messageOwner.media instanceof TLRPC.TL_messageMediaGeo) {
|
} else if (messageObject.messageOwner.media instanceof TLRPC.TL_messageMediaGeo) {
|
||||||
msg = LocaleController.formatString("NotificationMessageGroupMap", R.string.NotificationMessageGroupMap, Utilities.formatName(user.first_name, user.last_name), chat.title);
|
msg = LocaleController.formatString("NotificationMessageGroupMap", R.string.NotificationMessageGroupMap, ContactsController.formatName(user.first_name, user.last_name), chat.title);
|
||||||
} else if (messageObject.messageOwner.media instanceof TLRPC.TL_messageMediaDocument) {
|
} else if (messageObject.messageOwner.media instanceof TLRPC.TL_messageMediaDocument) {
|
||||||
msg = LocaleController.formatString("NotificationMessageGroupDocument", R.string.NotificationMessageGroupDocument, Utilities.formatName(user.first_name, user.last_name), chat.title);
|
msg = LocaleController.formatString("NotificationMessageGroupDocument", R.string.NotificationMessageGroupDocument, ContactsController.formatName(user.first_name, user.last_name), chat.title);
|
||||||
} else if (messageObject.messageOwner.media instanceof TLRPC.TL_messageMediaAudio) {
|
} else if (messageObject.messageOwner.media instanceof TLRPC.TL_messageMediaAudio) {
|
||||||
msg = LocaleController.formatString("NotificationMessageGroupAudio", R.string.NotificationMessageGroupAudio, Utilities.formatName(user.first_name, user.last_name), chat.title);
|
msg = LocaleController.formatString("NotificationMessageGroupAudio", R.string.NotificationMessageGroupAudio, ContactsController.formatName(user.first_name, user.last_name), chat.title);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
msg = LocaleController.formatString("NotificationMessageGroupNoText", R.string.NotificationMessageGroupNoText, Utilities.formatName(user.first_name, user.last_name), chat.title);
|
msg = LocaleController.formatString("NotificationMessageGroupNoText", R.string.NotificationMessageGroupNoText, ContactsController.formatName(user.first_name, user.last_name), chat.title);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -358,7 +357,7 @@ public class NotificationsController {
|
||||||
if (chat != null) {
|
if (chat != null) {
|
||||||
name = chat.title;
|
name = chat.title;
|
||||||
} else {
|
} else {
|
||||||
name = Utilities.formatName(user.first_name, user.last_name);
|
name = ContactsController.formatName(user.first_name, user.last_name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,7 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter
|
||||||
|
|
||||||
private TLRPC.ChatParticipants currentChatInfo = null;
|
private TLRPC.ChatParticipants currentChatInfo = null;
|
||||||
private HashMap<String, ArrayList<DelayedMessage>> delayedMessages = new HashMap<String, ArrayList<DelayedMessage>>();
|
private HashMap<String, ArrayList<DelayedMessage>> delayedMessages = new HashMap<String, ArrayList<DelayedMessage>>();
|
||||||
|
private HashMap<Integer, MessageObject> unsentMessages = new HashMap<Integer, MessageObject>();
|
||||||
|
|
||||||
private class DelayedMessage {
|
private class DelayedMessage {
|
||||||
public TLObject sendRequest;
|
public TLObject sendRequest;
|
||||||
|
@ -153,6 +154,7 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter
|
||||||
arr.remove(a);
|
arr.remove(a);
|
||||||
a--;
|
a--;
|
||||||
NotificationCenter.getInstance().postNotificationName(NotificationCenter.messageSendError, obj.obj.messageOwner.id);
|
NotificationCenter.getInstance().postNotificationName(NotificationCenter.messageSendError, obj.obj.messageOwner.id);
|
||||||
|
processSentMessage(obj.obj.messageOwner.id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (arr.isEmpty()) {
|
if (arr.isEmpty()) {
|
||||||
|
@ -191,14 +193,25 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter
|
||||||
MessagesController.getInstance().deleteMessages(messages, null, null);
|
MessagesController.getInstance().deleteMessages(messages, null, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean retrySendMessage(MessageObject messageObject) {
|
public boolean retrySendMessage(MessageObject messageObject, boolean unsent) {
|
||||||
if (messageObject.messageOwner.id >= 0) {
|
if (messageObject.messageOwner.id >= 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
if (unsent) {
|
||||||
|
unsentMessages.put(messageObject.messageOwner.id, messageObject);
|
||||||
|
}
|
||||||
sendMessage(messageObject);
|
sendMessage(messageObject);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void processSentMessage(int id) {
|
||||||
|
int prevSize = unsentMessages.size();
|
||||||
|
unsentMessages.remove(id);
|
||||||
|
if (prevSize != 0 && unsentMessages.size() == 0) {
|
||||||
|
checkUnsentMessages();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void processForwardFromMyName(MessageObject messageObject, long did) {
|
public void processForwardFromMyName(MessageObject messageObject, long did) {
|
||||||
if (messageObject == null) {
|
if (messageObject == null) {
|
||||||
return;
|
return;
|
||||||
|
@ -271,7 +284,6 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter
|
||||||
}
|
}
|
||||||
|
|
||||||
private void sendMessage(String message, double lat, double lon, TLRPC.TL_photo photo, TLRPC.TL_video video, MessageObject msgObj, TLRPC.User user, TLRPC.TL_document document, TLRPC.TL_audio audio, String originalPath, long peer, boolean retry) {
|
private void sendMessage(String message, double lat, double lon, TLRPC.TL_photo photo, TLRPC.TL_video video, MessageObject msgObj, TLRPC.User user, TLRPC.TL_document document, TLRPC.TL_audio audio, String originalPath, long peer, boolean retry) {
|
||||||
|
|
||||||
TLRPC.Message newMsg = null;
|
TLRPC.Message newMsg = null;
|
||||||
int type = -1;
|
int type = -1;
|
||||||
if (retry) {
|
if (retry) {
|
||||||
|
@ -394,12 +406,12 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter
|
||||||
newMsg.local_id = newMsg.id = UserConfig.getNewMessageId();
|
newMsg.local_id = newMsg.id = UserConfig.getNewMessageId();
|
||||||
newMsg.from_id = UserConfig.getClientUserId();
|
newMsg.from_id = UserConfig.getClientUserId();
|
||||||
newMsg.out = true;
|
newMsg.out = true;
|
||||||
newMsg.date = ConnectionsManager.getInstance().getCurrentTime();
|
|
||||||
UserConfig.saveConfig(false);
|
UserConfig.saveConfig(false);
|
||||||
}
|
}
|
||||||
if (newMsg.random_id == 0) {
|
if (newMsg.random_id == 0) {
|
||||||
newMsg.random_id = getNextRandomId();
|
newMsg.random_id = getNextRandomId();
|
||||||
}
|
}
|
||||||
|
newMsg.date = ConnectionsManager.getInstance().getCurrentTime();
|
||||||
newMsg.unread = true;
|
newMsg.unread = true;
|
||||||
newMsg.dialog_id = peer;
|
newMsg.dialog_id = peer;
|
||||||
int lower_id = (int) peer;
|
int lower_id = (int) peer;
|
||||||
|
@ -410,6 +422,7 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter
|
||||||
if (lower_id != 0) {
|
if (lower_id != 0) {
|
||||||
if (high_id == 1) {
|
if (high_id == 1) {
|
||||||
if (currentChatInfo == null) {
|
if (currentChatInfo == null) {
|
||||||
|
processSentMessage(newMsg.id);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
sendToPeers = new ArrayList<TLRPC.InputUser>();
|
sendToPeers = new ArrayList<TLRPC.InputUser>();
|
||||||
|
@ -434,6 +447,7 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter
|
||||||
|
|
||||||
TLRPC.User sendToUser = MessagesController.getInstance().getUser(lower_id);
|
TLRPC.User sendToUser = MessagesController.getInstance().getUser(lower_id);
|
||||||
if (sendToUser == null) {
|
if (sendToUser == null) {
|
||||||
|
processSentMessage(newMsg.id);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (sendToUser instanceof TLRPC.TL_userForeign || sendToUser instanceof TLRPC.TL_userRequest) {
|
if (sendToUser instanceof TLRPC.TL_userForeign || sendToUser instanceof TLRPC.TL_userRequest) {
|
||||||
|
@ -767,6 +781,7 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter
|
||||||
MessagesStorage.getInstance().markMessageAsSendError(newMsgObj.messageOwner.id);
|
MessagesStorage.getInstance().markMessageAsSendError(newMsgObj.messageOwner.id);
|
||||||
newMsgObj.messageOwner.send_state = MessageObject.MESSAGE_SEND_STATE_SEND_ERROR;
|
newMsgObj.messageOwner.send_state = MessageObject.MESSAGE_SEND_STATE_SEND_ERROR;
|
||||||
NotificationCenter.getInstance().postNotificationName(NotificationCenter.messageSendError, newMsgObj.messageOwner.id);
|
NotificationCenter.getInstance().postNotificationName(NotificationCenter.messageSendError, newMsgObj.messageOwner.id);
|
||||||
|
processSentMessage(newMsgObj.messageOwner.id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -855,11 +870,12 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter
|
||||||
final boolean isBroadcast = req instanceof TLRPC.TL_messages_sendBroadcast;
|
final boolean isBroadcast = req instanceof TLRPC.TL_messages_sendBroadcast;
|
||||||
final ArrayList<TLRPC.Message> sentMessages = new ArrayList<TLRPC.Message>();
|
final ArrayList<TLRPC.Message> sentMessages = new ArrayList<TLRPC.Message>();
|
||||||
|
|
||||||
if (response instanceof TLRPC.TL_messages_sentMessage) {
|
if (response instanceof TLRPC.messages_SentMessage) {
|
||||||
TLRPC.TL_messages_sentMessage res = (TLRPC.TL_messages_sentMessage) response;
|
TLRPC.TL_messages_sentMessage res = (TLRPC.TL_messages_sentMessage) response;
|
||||||
newMsgObj.messageOwner.id = res.id;
|
newMsgObj.messageOwner.id = res.id;
|
||||||
newMsgObj.messageOwner.date = res.date;
|
newMsgObj.messageOwner.date = res.date;
|
||||||
MessagesController.getInstance().processNewDifferenceParams(res.seq, res.pts, res.date);
|
MessagesController.getInstance().processNewDifferenceParams(res.seq, res.pts, res.date);
|
||||||
|
//TODO link check
|
||||||
} else if (response instanceof TLRPC.messages_StatedMessage) {
|
} else if (response instanceof TLRPC.messages_StatedMessage) {
|
||||||
TLRPC.messages_StatedMessage res = (TLRPC.messages_StatedMessage) response;
|
TLRPC.messages_StatedMessage res = (TLRPC.messages_StatedMessage) response;
|
||||||
sentMessages.add(res.message);
|
sentMessages.add(res.message);
|
||||||
|
@ -903,6 +919,7 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter
|
||||||
NotificationCenter.getInstance().postNotificationName(NotificationCenter.dialogsNeedReload);
|
NotificationCenter.getInstance().postNotificationName(NotificationCenter.dialogsNeedReload);
|
||||||
}
|
}
|
||||||
NotificationCenter.getInstance().postNotificationName(NotificationCenter.messageReceivedByServer, oldId, (isBroadcast ? oldId : newMsgObj.messageOwner.id), newMsgObj);
|
NotificationCenter.getInstance().postNotificationName(NotificationCenter.messageReceivedByServer, oldId, (isBroadcast ? oldId : newMsgObj.messageOwner.id), newMsgObj);
|
||||||
|
processSentMessage(oldId);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -914,6 +931,7 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter
|
||||||
public void run() {
|
public void run() {
|
||||||
newMsgObj.messageOwner.send_state = MessageObject.MESSAGE_SEND_STATE_SEND_ERROR;
|
newMsgObj.messageOwner.send_state = MessageObject.MESSAGE_SEND_STATE_SEND_ERROR;
|
||||||
NotificationCenter.getInstance().postNotificationName(NotificationCenter.messageSendError, newMsgObj.messageOwner.id);
|
NotificationCenter.getInstance().postNotificationName(NotificationCenter.messageSendError, newMsgObj.messageOwner.id);
|
||||||
|
processSentMessage(newMsgObj.messageOwner.id);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -1009,6 +1027,7 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter
|
||||||
public void run() {
|
public void run() {
|
||||||
newMsgObj.messageOwner.send_state = MessageObject.MESSAGE_SEND_STATE_SENT;
|
newMsgObj.messageOwner.send_state = MessageObject.MESSAGE_SEND_STATE_SENT;
|
||||||
NotificationCenter.getInstance().postNotificationName(NotificationCenter.messageReceivedByServer, newMsgObj.messageOwner.id, newMsgObj.messageOwner.id, newMsgObj);
|
NotificationCenter.getInstance().postNotificationName(NotificationCenter.messageReceivedByServer, newMsgObj.messageOwner.id, newMsgObj.messageOwner.id, newMsgObj);
|
||||||
|
processSentMessage(newMsgObj.messageOwner.id);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -1020,6 +1039,7 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter
|
||||||
public void run() {
|
public void run() {
|
||||||
newMsgObj.messageOwner.send_state = MessageObject.MESSAGE_SEND_STATE_SEND_ERROR;
|
newMsgObj.messageOwner.send_state = MessageObject.MESSAGE_SEND_STATE_SEND_ERROR;
|
||||||
NotificationCenter.getInstance().postNotificationName(NotificationCenter.messageSendError, newMsgObj.messageOwner.id);
|
NotificationCenter.getInstance().postNotificationName(NotificationCenter.messageSendError, newMsgObj.messageOwner.id);
|
||||||
|
processSentMessage(newMsgObj.messageOwner.id);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -1370,7 +1390,7 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter
|
||||||
MessagesController.getInstance().putEncryptedChats(encryptedChats, true);
|
MessagesController.getInstance().putEncryptedChats(encryptedChats, true);
|
||||||
for (TLRPC.Message message : messages) {
|
for (TLRPC.Message message : messages) {
|
||||||
MessageObject messageObject = new MessageObject(message, null, 0);
|
MessageObject messageObject = new MessageObject(message, null, 0);
|
||||||
retrySendMessage(messageObject);
|
retrySendMessage(messageObject, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -87,7 +87,7 @@ public class MP4Builder {
|
||||||
fos.flush();
|
fos.flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void writeSampleData(int trackIndex, ByteBuffer byteBuf, MediaCodec.BufferInfo bufferInfo) throws Exception {
|
public boolean writeSampleData(int trackIndex, ByteBuffer byteBuf, MediaCodec.BufferInfo bufferInfo) throws Exception {
|
||||||
if (writeNewMdat) {
|
if (writeNewMdat) {
|
||||||
mdat.setContentSize(0);
|
mdat.setContentSize(0);
|
||||||
mdat.getBox(fc);
|
mdat.getBox(fc);
|
||||||
|
@ -111,16 +111,18 @@ public class MP4Builder {
|
||||||
currentMp4Movie.addSample(trackIndex, dataOffset, bufferInfo);
|
currentMp4Movie.addSample(trackIndex, dataOffset, bufferInfo);
|
||||||
byteBuf.position(bufferInfo.offset);
|
byteBuf.position(bufferInfo.offset);
|
||||||
byteBuf.limit(bufferInfo.offset + bufferInfo.size);
|
byteBuf.limit(bufferInfo.offset + bufferInfo.size);
|
||||||
|
|
||||||
fc.write(byteBuf);
|
fc.write(byteBuf);
|
||||||
dataOffset += bufferInfo.size;
|
dataOffset += bufferInfo.size;
|
||||||
|
|
||||||
if (flush) {
|
if (flush) {
|
||||||
fos.flush();
|
fos.flush();
|
||||||
}
|
}
|
||||||
|
return flush;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int addTrack(MediaFormat mediaFormat, boolean isVideo) throws Exception {
|
public int addTrack(MediaFormat mediaFormat, boolean isAudio) throws Exception {
|
||||||
return currentMp4Movie.addTrack(mediaFormat, isVideo);
|
return currentMp4Movie.addTrack(mediaFormat, isAudio);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void finishMovie(boolean error) throws Exception {
|
public void finishMovie(boolean error) throws Exception {
|
||||||
|
|
|
@ -74,8 +74,8 @@ public class Mp4Movie {
|
||||||
track.addSample(offset, bufferInfo);
|
track.addSample(offset, bufferInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int addTrack(MediaFormat mediaFormat, boolean isVideo) throws Exception {
|
public int addTrack(MediaFormat mediaFormat, boolean isAudio) throws Exception {
|
||||||
tracks.add(new Track(tracks.size(), mediaFormat, isVideo));
|
tracks.add(new Track(tracks.size(), mediaFormat, isAudio));
|
||||||
return tracks.size() - 1;
|
return tracks.size() - 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,32 +18,44 @@ package org.telegram.android.video;
|
||||||
|
|
||||||
import android.annotation.TargetApi;
|
import android.annotation.TargetApi;
|
||||||
import android.graphics.SurfaceTexture;
|
import android.graphics.SurfaceTexture;
|
||||||
import android.opengl.EGL14;
|
import android.opengl.GLES20;
|
||||||
import android.view.Surface;
|
import android.view.Surface;
|
||||||
|
|
||||||
|
import java.nio.ByteBuffer;
|
||||||
|
import java.nio.ByteOrder;
|
||||||
|
|
||||||
import javax.microedition.khronos.egl.EGL10;
|
import javax.microedition.khronos.egl.EGL10;
|
||||||
import javax.microedition.khronos.egl.EGLConfig;
|
import javax.microedition.khronos.egl.EGLConfig;
|
||||||
import javax.microedition.khronos.egl.EGLContext;
|
import javax.microedition.khronos.egl.EGLContext;
|
||||||
import javax.microedition.khronos.egl.EGLDisplay;
|
import javax.microedition.khronos.egl.EGLDisplay;
|
||||||
import javax.microedition.khronos.egl.EGLSurface;
|
import javax.microedition.khronos.egl.EGLSurface;
|
||||||
|
|
||||||
@TargetApi(17)
|
@TargetApi(16)
|
||||||
public class OutputSurface implements SurfaceTexture.OnFrameAvailableListener {
|
public class OutputSurface implements SurfaceTexture.OnFrameAvailableListener {
|
||||||
|
|
||||||
private static final int EGL_OPENGL_ES2_BIT = 4;
|
private static final int EGL_OPENGL_ES2_BIT = 4;
|
||||||
|
private static final int EGL_CONTEXT_CLIENT_VERSION = 0x3098;
|
||||||
private EGL10 mEGL;
|
private EGL10 mEGL;
|
||||||
private EGLDisplay mEGLDisplay;
|
private EGLDisplay mEGLDisplay = null;
|
||||||
private EGLContext mEGLContext;
|
private EGLContext mEGLContext = null;
|
||||||
private EGLSurface mEGLSurface;
|
private EGLSurface mEGLSurface = null;
|
||||||
private SurfaceTexture mSurfaceTexture;
|
private SurfaceTexture mSurfaceTexture;
|
||||||
private Surface mSurface;
|
private Surface mSurface;
|
||||||
private final Object mFrameSyncObject = new Object();
|
private final Object mFrameSyncObject = new Object();
|
||||||
private boolean mFrameAvailable;
|
private boolean mFrameAvailable;
|
||||||
private TextureRenderer mTextureRender;
|
private TextureRenderer mTextureRender;
|
||||||
|
private int mWidth;
|
||||||
|
private int mHeight;
|
||||||
|
private ByteBuffer mPixelBuf;
|
||||||
|
|
||||||
public OutputSurface(int width, int height) {
|
public OutputSurface(int width, int height) {
|
||||||
if (width <= 0 || height <= 0) {
|
if (width <= 0 || height <= 0) {
|
||||||
throw new IllegalArgumentException();
|
throw new IllegalArgumentException();
|
||||||
}
|
}
|
||||||
|
mWidth = width;
|
||||||
|
mHeight = height;
|
||||||
|
mPixelBuf = ByteBuffer.allocateDirect(mWidth * mHeight * 4);
|
||||||
|
mPixelBuf.order(ByteOrder.LITTLE_ENDIAN);
|
||||||
eglSetup(width, height);
|
eglSetup(width, height);
|
||||||
makeCurrent();
|
makeCurrent();
|
||||||
setup();
|
setup();
|
||||||
|
@ -64,28 +76,35 @@ public class OutputSurface implements SurfaceTexture.OnFrameAvailableListener {
|
||||||
private void eglSetup(int width, int height) {
|
private void eglSetup(int width, int height) {
|
||||||
mEGL = (EGL10) EGLContext.getEGL();
|
mEGL = (EGL10) EGLContext.getEGL();
|
||||||
mEGLDisplay = mEGL.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY);
|
mEGLDisplay = mEGL.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY);
|
||||||
|
|
||||||
|
if (mEGLDisplay == EGL10.EGL_NO_DISPLAY) {
|
||||||
|
throw new RuntimeException("unable to get EGL10 display");
|
||||||
|
}
|
||||||
|
|
||||||
if (!mEGL.eglInitialize(mEGLDisplay, null)) {
|
if (!mEGL.eglInitialize(mEGLDisplay, null)) {
|
||||||
|
mEGLDisplay = null;
|
||||||
throw new RuntimeException("unable to initialize EGL10");
|
throw new RuntimeException("unable to initialize EGL10");
|
||||||
}
|
}
|
||||||
|
|
||||||
int[] attribList = {
|
int[] attribList = {
|
||||||
EGL10.EGL_RED_SIZE, 8,
|
EGL10.EGL_RED_SIZE, 8,
|
||||||
EGL10.EGL_GREEN_SIZE, 8,
|
EGL10.EGL_GREEN_SIZE, 8,
|
||||||
EGL10.EGL_BLUE_SIZE, 8,
|
EGL10.EGL_BLUE_SIZE, 8,
|
||||||
|
EGL10.EGL_ALPHA_SIZE, 8,
|
||||||
EGL10.EGL_SURFACE_TYPE, EGL10.EGL_PBUFFER_BIT,
|
EGL10.EGL_SURFACE_TYPE, EGL10.EGL_PBUFFER_BIT,
|
||||||
EGL10.EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
|
EGL10.EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
|
||||||
EGL10.EGL_NONE
|
EGL10.EGL_NONE
|
||||||
};
|
};
|
||||||
EGLConfig[] configs = new EGLConfig[1];
|
EGLConfig[] configs = new EGLConfig[1];
|
||||||
int[] numConfigs = new int[1];
|
int[] numConfigs = new int[1];
|
||||||
if (!mEGL.eglChooseConfig(mEGLDisplay, attribList, configs, 1, numConfigs)) {
|
if (!mEGL.eglChooseConfig(mEGLDisplay, attribList, configs, configs.length, numConfigs)) {
|
||||||
throw new RuntimeException("unable to find RGB888+pbuffer EGL config");
|
throw new RuntimeException("unable to find RGB888+pbuffer EGL config");
|
||||||
}
|
}
|
||||||
int[] attrib_list = {
|
int[] attrib_list = {
|
||||||
EGL14.EGL_CONTEXT_CLIENT_VERSION, 2,
|
EGL_CONTEXT_CLIENT_VERSION, 2,
|
||||||
EGL10.EGL_NONE
|
EGL10.EGL_NONE
|
||||||
};
|
};
|
||||||
mEGLContext = mEGL.eglCreateContext(mEGLDisplay, configs[0], EGL10.EGL_NO_CONTEXT,
|
mEGLContext = mEGL.eglCreateContext(mEGLDisplay, configs[0], EGL10.EGL_NO_CONTEXT, attrib_list);
|
||||||
attrib_list);
|
|
||||||
checkEglError("eglCreateContext");
|
checkEglError("eglCreateContext");
|
||||||
if (mEGLContext == null) {
|
if (mEGLContext == null) {
|
||||||
throw new RuntimeException("null context");
|
throw new RuntimeException("null context");
|
||||||
|
@ -139,7 +158,7 @@ public class OutputSurface implements SurfaceTexture.OnFrameAvailableListener {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void awaitNewImage() {
|
public void awaitNewImage() {
|
||||||
final int TIMEOUT_MS = 500;
|
final int TIMEOUT_MS = 2500;
|
||||||
synchronized (mFrameSyncObject) {
|
synchronized (mFrameSyncObject) {
|
||||||
while (!mFrameAvailable) {
|
while (!mFrameAvailable) {
|
||||||
try {
|
try {
|
||||||
|
@ -157,8 +176,8 @@ public class OutputSurface implements SurfaceTexture.OnFrameAvailableListener {
|
||||||
mSurfaceTexture.updateTexImage();
|
mSurfaceTexture.updateTexImage();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void drawImage() {
|
public void drawImage(boolean invert) {
|
||||||
mTextureRender.drawFrame(mSurfaceTexture);
|
mTextureRender.drawFrame(mSurfaceTexture, invert);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -172,6 +191,12 @@ public class OutputSurface implements SurfaceTexture.OnFrameAvailableListener {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ByteBuffer getFrame() {
|
||||||
|
mPixelBuf.rewind();
|
||||||
|
GLES20.glReadPixels(0, 0, mWidth, mHeight, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, mPixelBuf);
|
||||||
|
return mPixelBuf;
|
||||||
|
}
|
||||||
|
|
||||||
private void checkEglError(String msg) {
|
private void checkEglError(String msg) {
|
||||||
if (mEGL.eglGetError() != EGL10.EGL_SUCCESS) {
|
if (mEGL.eglGetError() != EGL10.EGL_SUCCESS) {
|
||||||
throw new RuntimeException("EGL error encountered (see log)");
|
throw new RuntimeException("EGL error encountered (see log)");
|
||||||
|
|
|
@ -26,20 +26,21 @@ import android.opengl.GLES11Ext;
|
||||||
import android.opengl.GLES20;
|
import android.opengl.GLES20;
|
||||||
import android.opengl.Matrix;
|
import android.opengl.Matrix;
|
||||||
|
|
||||||
@TargetApi(17)
|
@TargetApi(16)
|
||||||
public class TextureRenderer {
|
public class TextureRenderer {
|
||||||
|
|
||||||
private static final int FLOAT_SIZE_BYTES = 4;
|
private static final int FLOAT_SIZE_BYTES = 4;
|
||||||
private static final int TRIANGLE_VERTICES_DATA_STRIDE_BYTES = 5 * FLOAT_SIZE_BYTES;
|
private static final int TRIANGLE_VERTICES_DATA_STRIDE_BYTES = 5 * FLOAT_SIZE_BYTES;
|
||||||
private static final int TRIANGLE_VERTICES_DATA_POS_OFFSET = 0;
|
private static final int TRIANGLE_VERTICES_DATA_POS_OFFSET = 0;
|
||||||
private static final int TRIANGLE_VERTICES_DATA_UV_OFFSET = 3;
|
private static final int TRIANGLE_VERTICES_DATA_UV_OFFSET = 3;
|
||||||
private static final float[] mTriangleVerticesData = {
|
private static final float[] mTriangleVerticesData = {
|
||||||
// X, Y, Z, U, V
|
|
||||||
-1.0f, -1.0f, 0, 0.f, 0.f,
|
-1.0f, -1.0f, 0, 0.f, 0.f,
|
||||||
1.0f, -1.0f, 0, 1.f, 0.f,
|
1.0f, -1.0f, 0, 1.f, 0.f,
|
||||||
-1.0f, 1.0f, 0, 0.f, 1.f,
|
-1.0f, 1.0f, 0, 0.f, 1.f,
|
||||||
1.0f, 1.0f, 0, 1.f, 1.f,
|
1.0f, 1.0f, 0, 1.f, 1.f,
|
||||||
};
|
};
|
||||||
private FloatBuffer mTriangleVertices;
|
private FloatBuffer mTriangleVertices;
|
||||||
|
|
||||||
private static final String VERTEX_SHADER =
|
private static final String VERTEX_SHADER =
|
||||||
"uniform mat4 uMVPMatrix;\n" +
|
"uniform mat4 uMVPMatrix;\n" +
|
||||||
"uniform mat4 uSTMatrix;\n" +
|
"uniform mat4 uSTMatrix;\n" +
|
||||||
|
@ -50,14 +51,16 @@ public class TextureRenderer {
|
||||||
" gl_Position = uMVPMatrix * aPosition;\n" +
|
" gl_Position = uMVPMatrix * aPosition;\n" +
|
||||||
" vTextureCoord = (uSTMatrix * aTextureCoord).xy;\n" +
|
" vTextureCoord = (uSTMatrix * aTextureCoord).xy;\n" +
|
||||||
"}\n";
|
"}\n";
|
||||||
|
|
||||||
private static final String FRAGMENT_SHADER =
|
private static final String FRAGMENT_SHADER =
|
||||||
"#extension GL_OES_EGL_image_external : require\n" +
|
"#extension GL_OES_EGL_image_external : require\n" +
|
||||||
"precision mediump float;\n" + // highp here doesn't seem to matter
|
"precision mediump float;\n" +
|
||||||
"varying vec2 vTextureCoord;\n" +
|
"varying vec2 vTextureCoord;\n" +
|
||||||
"uniform samplerExternalOES sTexture;\n" +
|
"uniform samplerExternalOES sTexture;\n" +
|
||||||
"void main() {\n" +
|
"void main() {\n" +
|
||||||
" gl_FragColor = texture2D(sTexture, vTextureCoord);\n" +
|
" gl_FragColor = texture2D(sTexture, vTextureCoord);\n" +
|
||||||
"}\n";
|
"}\n";
|
||||||
|
|
||||||
private float[] mMVPMatrix = new float[16];
|
private float[] mMVPMatrix = new float[16];
|
||||||
private float[] mSTMatrix = new float[16];
|
private float[] mSTMatrix = new float[16];
|
||||||
private int mProgram;
|
private int mProgram;
|
||||||
|
@ -77,11 +80,15 @@ public class TextureRenderer {
|
||||||
return mTextureID;
|
return mTextureID;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void drawFrame(SurfaceTexture st) {
|
public void drawFrame(SurfaceTexture st, boolean invert) {
|
||||||
checkGlError("onDrawFrame start");
|
checkGlError("onDrawFrame start");
|
||||||
st.getTransformMatrix(mSTMatrix);
|
st.getTransformMatrix(mSTMatrix);
|
||||||
GLES20.glClearColor(0.0f, 1.0f, 0.0f, 1.0f);
|
|
||||||
GLES20.glClear(GLES20.GL_DEPTH_BUFFER_BIT | GLES20.GL_COLOR_BUFFER_BIT);
|
if (invert) {
|
||||||
|
mSTMatrix[5] = -mSTMatrix[5];
|
||||||
|
mSTMatrix[13] = 1.0f - mSTMatrix[13];
|
||||||
|
}
|
||||||
|
|
||||||
GLES20.glUseProgram(mProgram);
|
GLES20.glUseProgram(mProgram);
|
||||||
checkGlError("glUseProgram");
|
checkGlError("glUseProgram");
|
||||||
GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
|
GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
|
||||||
|
@ -96,9 +103,8 @@ public class TextureRenderer {
|
||||||
checkGlError("glVertexAttribPointer maTextureHandle");
|
checkGlError("glVertexAttribPointer maTextureHandle");
|
||||||
GLES20.glEnableVertexAttribArray(maTextureHandle);
|
GLES20.glEnableVertexAttribArray(maTextureHandle);
|
||||||
checkGlError("glEnableVertexAttribArray maTextureHandle");
|
checkGlError("glEnableVertexAttribArray maTextureHandle");
|
||||||
Matrix.setIdentityM(mMVPMatrix, 0);
|
|
||||||
GLES20.glUniformMatrix4fv(muMVPMatrixHandle, 1, false, mMVPMatrix, 0);
|
|
||||||
GLES20.glUniformMatrix4fv(muSTMatrixHandle, 1, false, mSTMatrix, 0);
|
GLES20.glUniformMatrix4fv(muSTMatrixHandle, 1, false, mSTMatrix, 0);
|
||||||
|
GLES20.glUniformMatrix4fv(muMVPMatrixHandle, 1, false, mMVPMatrix, 0);
|
||||||
GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4);
|
GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4);
|
||||||
checkGlError("glDrawArrays");
|
checkGlError("glDrawArrays");
|
||||||
GLES20.glFinish();
|
GLES20.glFinish();
|
||||||
|
@ -139,6 +145,8 @@ public class TextureRenderer {
|
||||||
GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE);
|
GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE);
|
||||||
GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE);
|
GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE);
|
||||||
checkGlError("glTexParameter");
|
checkGlError("glTexParameter");
|
||||||
|
|
||||||
|
Matrix.setIdentityM(mMVPMatrix, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void changeFragmentShader(String fragmentShader) {
|
public void changeFragmentShader(String fragmentShader) {
|
||||||
|
|
|
@ -67,9 +67,9 @@ public class Track {
|
||||||
samplingFrequencyIndexMap.put(8000, 0xb);
|
samplingFrequencyIndexMap.put(8000, 0xb);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Track(int id, MediaFormat format, boolean isVideo) throws Exception {
|
public Track(int id, MediaFormat format, boolean isAudio) throws Exception {
|
||||||
trackId = id;
|
trackId = id;
|
||||||
if (isVideo) {
|
if (!isAudio) {
|
||||||
sampleDurations.add((long)3015);
|
sampleDurations.add((long)3015);
|
||||||
duration = 3015;
|
duration = 3015;
|
||||||
width = format.getInteger(MediaFormat.KEY_WIDTH);
|
width = format.getInteger(MediaFormat.KEY_WIDTH);
|
||||||
|
@ -79,6 +79,8 @@ public class Track {
|
||||||
handler = "vide";
|
handler = "vide";
|
||||||
headerBox = new VideoMediaHeaderBox();
|
headerBox = new VideoMediaHeaderBox();
|
||||||
sampleDescriptionBox = new SampleDescriptionBox();
|
sampleDescriptionBox = new SampleDescriptionBox();
|
||||||
|
String mime = format.getString(MediaFormat.KEY_MIME);
|
||||||
|
if (mime.equals("video/avc")) {
|
||||||
VisualSampleEntry visualSampleEntry = new VisualSampleEntry("avc1");
|
VisualSampleEntry visualSampleEntry = new VisualSampleEntry("avc1");
|
||||||
visualSampleEntry.setDataReferenceIndex(1);
|
visualSampleEntry.setDataReferenceIndex(1);
|
||||||
visualSampleEntry.setDepth(24);
|
visualSampleEntry.setDepth(24);
|
||||||
|
@ -90,6 +92,7 @@ public class Track {
|
||||||
|
|
||||||
AvcConfigurationBox avcConfigurationBox = new AvcConfigurationBox();
|
AvcConfigurationBox avcConfigurationBox = new AvcConfigurationBox();
|
||||||
|
|
||||||
|
if (format.getByteBuffer("csd-0") != null) {
|
||||||
ArrayList<byte[]> spsArray = new ArrayList<byte[]>();
|
ArrayList<byte[]> spsArray = new ArrayList<byte[]>();
|
||||||
ByteBuffer spsBuff = format.getByteBuffer("csd-0");
|
ByteBuffer spsBuff = format.getByteBuffer("csd-0");
|
||||||
spsBuff.position(4);
|
spsBuff.position(4);
|
||||||
|
@ -103,11 +106,12 @@ public class Track {
|
||||||
byte[] ppsBytes = new byte[ppsBuff.remaining()];
|
byte[] ppsBytes = new byte[ppsBuff.remaining()];
|
||||||
ppsBuff.get(ppsBytes);
|
ppsBuff.get(ppsBytes);
|
||||||
ppsArray.add(ppsBytes);
|
ppsArray.add(ppsBytes);
|
||||||
|
avcConfigurationBox.setSequenceParameterSets(spsArray);
|
||||||
|
avcConfigurationBox.setPictureParameterSets(ppsArray);
|
||||||
|
}
|
||||||
//ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(spsBytes);
|
//ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(spsBytes);
|
||||||
//SeqParameterSet seqParameterSet = SeqParameterSet.read(byteArrayInputStream);
|
//SeqParameterSet seqParameterSet = SeqParameterSet.read(byteArrayInputStream);
|
||||||
|
|
||||||
avcConfigurationBox.setSequenceParameterSets(spsArray);
|
|
||||||
avcConfigurationBox.setPictureParameterSets(ppsArray);
|
|
||||||
avcConfigurationBox.setAvcLevelIndication(13);
|
avcConfigurationBox.setAvcLevelIndication(13);
|
||||||
avcConfigurationBox.setAvcProfileIndication(100);
|
avcConfigurationBox.setAvcProfileIndication(100);
|
||||||
avcConfigurationBox.setBitDepthLumaMinus8(-1);
|
avcConfigurationBox.setBitDepthLumaMinus8(-1);
|
||||||
|
@ -119,6 +123,18 @@ public class Track {
|
||||||
|
|
||||||
visualSampleEntry.addBox(avcConfigurationBox);
|
visualSampleEntry.addBox(avcConfigurationBox);
|
||||||
sampleDescriptionBox.addBox(visualSampleEntry);
|
sampleDescriptionBox.addBox(visualSampleEntry);
|
||||||
|
} else if (mime.equals("video/mp4v")) {
|
||||||
|
VisualSampleEntry visualSampleEntry = new VisualSampleEntry("mp4v");
|
||||||
|
visualSampleEntry.setDataReferenceIndex(1);
|
||||||
|
visualSampleEntry.setDepth(24);
|
||||||
|
visualSampleEntry.setFrameCount(1);
|
||||||
|
visualSampleEntry.setHorizresolution(72);
|
||||||
|
visualSampleEntry.setVertresolution(72);
|
||||||
|
visualSampleEntry.setWidth(width);
|
||||||
|
visualSampleEntry.setHeight(height);
|
||||||
|
|
||||||
|
sampleDescriptionBox.addBox(visualSampleEntry);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
sampleDurations.add((long)1024);
|
sampleDurations.add((long)1024);
|
||||||
duration = 1024;
|
duration = 1024;
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
package org.telegram.messenger;
|
package org.telegram.messenger;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.Semaphore;
|
import java.util.concurrent.Semaphore;
|
||||||
|
@ -37,6 +38,7 @@ public class FileLoader {
|
||||||
private ConcurrentHashMap<String, FileUploadOperation> uploadOperationPathsEnc = new ConcurrentHashMap<String, FileUploadOperation>();
|
private ConcurrentHashMap<String, FileUploadOperation> uploadOperationPathsEnc = new ConcurrentHashMap<String, FileUploadOperation>();
|
||||||
private ConcurrentHashMap<String, FileLoadOperation> loadOperationPaths = new ConcurrentHashMap<String, FileLoadOperation>();
|
private ConcurrentHashMap<String, FileLoadOperation> loadOperationPaths = new ConcurrentHashMap<String, FileLoadOperation>();
|
||||||
private ConcurrentHashMap<String, Float> fileProgresses = new ConcurrentHashMap<String, Float>();
|
private ConcurrentHashMap<String, Float> fileProgresses = new ConcurrentHashMap<String, Float>();
|
||||||
|
private HashMap<String, Long> uploadSizes = new HashMap<String, Long>();
|
||||||
|
|
||||||
private FileLoaderDelegate delegate = null;
|
private FileLoaderDelegate delegate = null;
|
||||||
|
|
||||||
|
@ -70,6 +72,7 @@ public class FileLoader {
|
||||||
} else {
|
} else {
|
||||||
operation = uploadOperationPathsEnc.get(location);
|
operation = uploadOperationPathsEnc.get(location);
|
||||||
}
|
}
|
||||||
|
uploadSizes.remove(location);
|
||||||
if (operation != null) {
|
if (operation != null) {
|
||||||
uploadOperationQueue.remove(operation);
|
uploadOperationQueue.remove(operation);
|
||||||
uploadSmallOperationQueue.remove(operation);
|
uploadSmallOperationQueue.remove(operation);
|
||||||
|
@ -95,6 +98,8 @@ public class FileLoader {
|
||||||
}
|
}
|
||||||
if (operation != null) {
|
if (operation != null) {
|
||||||
operation.checkNewDataAvailable(finalSize);
|
operation.checkNewDataAvailable(finalSize);
|
||||||
|
} else if (finalSize != 0) {
|
||||||
|
uploadSizes.put(location, finalSize);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -117,7 +122,15 @@ public class FileLoader {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
FileUploadOperation operation = new FileUploadOperation(location, encrypted, estimatedSize);
|
int esimated = estimatedSize;
|
||||||
|
if (esimated != 0) {
|
||||||
|
Long finalSize = uploadSizes.get(location);
|
||||||
|
if (finalSize != null) {
|
||||||
|
esimated = 0;
|
||||||
|
uploadSizes.remove(location);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FileUploadOperation operation = new FileUploadOperation(location, encrypted, esimated);
|
||||||
if (encrypted) {
|
if (encrypted) {
|
||||||
uploadOperationPathsEnc.put(location, operation);
|
uploadOperationPathsEnc.put(location, operation);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -14,7 +14,6 @@ import android.content.ContentUris;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.content.res.Configuration;
|
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
|
@ -51,7 +50,6 @@ import java.security.spec.RSAPublicKeySpec;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.Locale;
|
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
import java.util.zip.GZIPInputStream;
|
import java.util.zip.GZIPInputStream;
|
||||||
|
@ -74,23 +72,6 @@ public class Utilities {
|
||||||
public static volatile DispatchQueue searchQueue = new DispatchQueue("searchQueue");
|
public static volatile DispatchQueue searchQueue = new DispatchQueue("searchQueue");
|
||||||
public static volatile DispatchQueue photoBookQueue = new DispatchQueue("photoBookQueue");
|
public static volatile DispatchQueue photoBookQueue = new DispatchQueue("photoBookQueue");
|
||||||
|
|
||||||
public static int[] arrColors = {0xffee4928, 0xff41a903, 0xffe09602, 0xff0f94ed, 0xff8f3bf7, 0xfffc4380, 0xff00a1c4, 0xffeb7002};
|
|
||||||
public static int[] arrUsersAvatars = {
|
|
||||||
R.drawable.user_red,
|
|
||||||
R.drawable.user_green,
|
|
||||||
R.drawable.user_yellow,
|
|
||||||
R.drawable.user_blue,
|
|
||||||
R.drawable.user_violet,
|
|
||||||
R.drawable.user_pink,
|
|
||||||
R.drawable.user_aqua,
|
|
||||||
R.drawable.user_orange};
|
|
||||||
|
|
||||||
public static int[] arrGroupsAvatars = {
|
|
||||||
R.drawable.group_green,
|
|
||||||
R.drawable.group_red,
|
|
||||||
R.drawable.group_blue,
|
|
||||||
R.drawable.group_yellow};
|
|
||||||
|
|
||||||
final protected static char[] hexArray = "0123456789ABCDEF".toCharArray();
|
final protected static char[] hexArray = "0123456789ABCDEF".toCharArray();
|
||||||
|
|
||||||
public static ProgressDialog progressDialog;
|
public static ProgressDialog progressDialog;
|
||||||
|
@ -132,6 +113,7 @@ public class Utilities {
|
||||||
public native static long doPQNative(long _what);
|
public native static long doPQNative(long _what);
|
||||||
public native static void loadBitmap(String path, int[] bitmap, int scale, int format, int width, int height);
|
public native static void loadBitmap(String path, int[] bitmap, int scale, int format, int width, int height);
|
||||||
public native static void blurBitmap(Object bitmap);
|
public native static void blurBitmap(Object bitmap);
|
||||||
|
public native static int convertVideoFrame(ByteBuffer src, ByteBuffer dest, int destFormat, int width, int height, int padding);
|
||||||
private native static void aesIgeEncryption(ByteBuffer buffer, byte[] key, byte[] iv, boolean encrypt, int offset, int length);
|
private native static void aesIgeEncryption(ByteBuffer buffer, byte[] key, byte[] iv, boolean encrypt, int offset, int length);
|
||||||
|
|
||||||
public static void aesIgeEncryption(ByteBuffer buffer, byte[] key, byte[] iv, boolean encrypt, boolean changeIv, int offset, int length) {
|
public static void aesIgeEncryption(ByteBuffer buffer, byte[] key, byte[] iv, boolean encrypt, boolean changeIv, int offset, int length) {
|
||||||
|
@ -509,54 +491,6 @@ public class Utilities {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int getColorIndex(int id) {
|
|
||||||
int[] arr;
|
|
||||||
if (id >= 0) {
|
|
||||||
arr = arrUsersAvatars;
|
|
||||||
} else {
|
|
||||||
arr = arrGroupsAvatars;
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
String str;
|
|
||||||
if (id >= 0) {
|
|
||||||
str = String.format(Locale.US, "%d%d", id, UserConfig.getClientUserId());
|
|
||||||
} else {
|
|
||||||
str = String.format(Locale.US, "%d", id);
|
|
||||||
}
|
|
||||||
if (str.length() > 15) {
|
|
||||||
str = str.substring(0, 15);
|
|
||||||
}
|
|
||||||
java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5");
|
|
||||||
byte[] digest = md.digest(str.getBytes());
|
|
||||||
int b = digest[Math.abs(id % 16)];
|
|
||||||
if (b < 0) {
|
|
||||||
b += 256;
|
|
||||||
}
|
|
||||||
return Math.abs(b) % arr.length;
|
|
||||||
} catch (Exception e) {
|
|
||||||
FileLog.e("tmessages", e);
|
|
||||||
}
|
|
||||||
return id % arr.length;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int getColorForId(int id) {
|
|
||||||
if (id / 1000 == 333) {
|
|
||||||
return 0xff0f94ed;
|
|
||||||
}
|
|
||||||
return arrColors[getColorIndex(id)];
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int getUserAvatarForId(int id) {
|
|
||||||
if (id / 1000 == 333 || id / 1000 == 777) {
|
|
||||||
return R.drawable.telegram_avatar;
|
|
||||||
}
|
|
||||||
return arrUsersAvatars[getColorIndex(id)];
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int getGroupAvatarForId(int id) {
|
|
||||||
return arrGroupsAvatars[getColorIndex(-Math.abs(id))];
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String MD5(String md5) {
|
public static String MD5(String md5) {
|
||||||
if (md5 == null) {
|
if (md5 == null) {
|
||||||
return null;
|
return null;
|
||||||
|
@ -757,16 +691,6 @@ public class Utilities {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String formatName(String firstName, String lastName) {
|
|
||||||
String result = firstName;
|
|
||||||
if (result == null || result.length() == 0) {
|
|
||||||
result = lastName;
|
|
||||||
} else if (result.length() != 0 && lastName != null && lastName.length() != 0) {
|
|
||||||
result += " " + lastName;
|
|
||||||
}
|
|
||||||
return result.trim();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String formatFileSize(long size) {
|
public static String formatFileSize(long size) {
|
||||||
if (size < 1024) {
|
if (size < 1024) {
|
||||||
return String.format("%d B", size);
|
return String.format("%d B", size);
|
||||||
|
@ -816,8 +740,4 @@ public class Utilities {
|
||||||
UpdateManager.register(context, BuildVars.HOCKEY_APP_HASH);
|
UpdateManager.register(context, BuildVars.HOCKEY_APP_HASH);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isTablet(Context context) {
|
|
||||||
return (context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,7 +23,6 @@ import org.telegram.android.MediaController;
|
||||||
import org.telegram.messenger.TLRPC;
|
import org.telegram.messenger.TLRPC;
|
||||||
import org.telegram.android.MessagesController;
|
import org.telegram.android.MessagesController;
|
||||||
import org.telegram.messenger.R;
|
import org.telegram.messenger.R;
|
||||||
import org.telegram.messenger.Utilities;
|
|
||||||
import org.telegram.android.MessageObject;
|
import org.telegram.android.MessageObject;
|
||||||
import org.telegram.android.ImageReceiver;
|
import org.telegram.android.ImageReceiver;
|
||||||
import org.telegram.ui.Views.ProgressView;
|
import org.telegram.ui.Views.ProgressView;
|
||||||
|
@ -355,9 +354,9 @@ public class ChatAudioCell extends ChatBaseCell implements SeekBar.SeekBarDelega
|
||||||
if (audioUser.photo != null) {
|
if (audioUser.photo != null) {
|
||||||
currentPhoto = audioUser.photo.photo_small;
|
currentPhoto = audioUser.photo.photo_small;
|
||||||
}
|
}
|
||||||
avatarImage.setImage(currentPhoto, "50_50", getResources().getDrawable(Utilities.getUserAvatarForId(uid)));
|
avatarImage.setImage(currentPhoto, "50_50", getResources().getDrawable(AndroidUtilities.getUserAvatarForId(uid)));
|
||||||
} else {
|
} else {
|
||||||
avatarImage.setImage((TLRPC.FileLocation)null, "50_50", getResources().getDrawable(Utilities.getUserAvatarForId(uid)));
|
avatarImage.setImage((TLRPC.FileLocation)null, "50_50", getResources().getDrawable(AndroidUtilities.getUserAvatarForId(uid)));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (messageObject.isOut()) {
|
if (messageObject.isOut()) {
|
||||||
|
|
|
@ -23,11 +23,11 @@ import android.view.SoundEffectConstants;
|
||||||
import android.view.ViewConfiguration;
|
import android.view.ViewConfiguration;
|
||||||
|
|
||||||
import org.telegram.android.AndroidUtilities;
|
import org.telegram.android.AndroidUtilities;
|
||||||
|
import org.telegram.android.ContactsController;
|
||||||
import org.telegram.android.LocaleController;
|
import org.telegram.android.LocaleController;
|
||||||
import org.telegram.messenger.TLRPC;
|
import org.telegram.messenger.TLRPC;
|
||||||
import org.telegram.android.MessagesController;
|
import org.telegram.android.MessagesController;
|
||||||
import org.telegram.messenger.R;
|
import org.telegram.messenger.R;
|
||||||
import org.telegram.messenger.Utilities;
|
|
||||||
import org.telegram.android.MessageObject;
|
import org.telegram.android.MessageObject;
|
||||||
import org.telegram.android.ImageReceiver;
|
import org.telegram.android.ImageReceiver;
|
||||||
|
|
||||||
|
@ -233,7 +233,7 @@ public class ChatBaseCell extends BaseCell {
|
||||||
|
|
||||||
String newNameString = null;
|
String newNameString = null;
|
||||||
if (drawName && isChat && newUser != null && !currentMessageObject.isOut()) {
|
if (drawName && isChat && newUser != null && !currentMessageObject.isOut()) {
|
||||||
newNameString = Utilities.formatName(newUser.first_name, newUser.last_name);
|
newNameString = ContactsController.formatName(newUser.first_name, newUser.last_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (currentNameString == null && newNameString != null || currentNameString != null && newNameString == null || currentNameString != null && newNameString != null && !currentNameString.equals(newNameString)) {
|
if (currentNameString == null && newNameString != null || currentNameString != null && newNameString == null || currentNameString != null && newNameString != null && !currentNameString.equals(newNameString)) {
|
||||||
|
@ -243,7 +243,7 @@ public class ChatBaseCell extends BaseCell {
|
||||||
newUser = MessagesController.getInstance().getUser(currentMessageObject.messageOwner.fwd_from_id);
|
newUser = MessagesController.getInstance().getUser(currentMessageObject.messageOwner.fwd_from_id);
|
||||||
newNameString = null;
|
newNameString = null;
|
||||||
if (newUser != null && drawForwardedName && currentMessageObject.messageOwner instanceof TLRPC.TL_messageForwarded) {
|
if (newUser != null && drawForwardedName && currentMessageObject.messageOwner instanceof TLRPC.TL_messageForwarded) {
|
||||||
newNameString = Utilities.formatName(newUser.first_name, newUser.last_name);
|
newNameString = ContactsController.formatName(newUser.first_name, newUser.last_name);
|
||||||
}
|
}
|
||||||
return currentForwardNameString == null && newNameString != null || currentForwardNameString != null && newNameString == null || currentForwardNameString != null && newNameString != null && !currentForwardNameString.equals(newNameString);
|
return currentForwardNameString == null && newNameString != null || currentForwardNameString != null && newNameString == null || currentForwardNameString != null && newNameString != null && !currentForwardNameString.equals(newNameString);
|
||||||
}
|
}
|
||||||
|
@ -265,7 +265,7 @@ public class ChatBaseCell extends BaseCell {
|
||||||
} else {
|
} else {
|
||||||
currentPhoto = null;
|
currentPhoto = null;
|
||||||
}
|
}
|
||||||
avatarImage.setImage(currentPhoto, "50_50", getResources().getDrawable(Utilities.getUserAvatarForId(currentUser.id)));
|
avatarImage.setImage(currentPhoto, "50_50", getResources().getDrawable(AndroidUtilities.getUserAvatarForId(currentUser.id)));
|
||||||
} else {
|
} else {
|
||||||
avatarImage.setImage((TLRPC.FileLocation)null, "50_50", null);
|
avatarImage.setImage((TLRPC.FileLocation)null, "50_50", null);
|
||||||
}
|
}
|
||||||
|
@ -287,7 +287,7 @@ public class ChatBaseCell extends BaseCell {
|
||||||
namesOffset = 0;
|
namesOffset = 0;
|
||||||
|
|
||||||
if (drawName && isChat && currentUser != null && !currentMessageObject.isOut()) {
|
if (drawName && isChat && currentUser != null && !currentMessageObject.isOut()) {
|
||||||
currentNameString = Utilities.formatName(currentUser.first_name, currentUser.last_name);
|
currentNameString = ContactsController.formatName(currentUser.first_name, currentUser.last_name);
|
||||||
nameWidth = getMaxNameWidth();
|
nameWidth = getMaxNameWidth();
|
||||||
|
|
||||||
CharSequence nameStringFinal = TextUtils.ellipsize(currentNameString.replace("\n", " "), namePaint, nameWidth - AndroidUtilities.dp(12), TextUtils.TruncateAt.END);
|
CharSequence nameStringFinal = TextUtils.ellipsize(currentNameString.replace("\n", " "), namePaint, nameWidth - AndroidUtilities.dp(12), TextUtils.TruncateAt.END);
|
||||||
|
@ -308,7 +308,7 @@ public class ChatBaseCell extends BaseCell {
|
||||||
if (drawForwardedName && messageObject.messageOwner instanceof TLRPC.TL_messageForwarded) {
|
if (drawForwardedName && messageObject.messageOwner instanceof TLRPC.TL_messageForwarded) {
|
||||||
currentForwardUser = MessagesController.getInstance().getUser(messageObject.messageOwner.fwd_from_id);
|
currentForwardUser = MessagesController.getInstance().getUser(messageObject.messageOwner.fwd_from_id);
|
||||||
if (currentForwardUser != null) {
|
if (currentForwardUser != null) {
|
||||||
currentForwardNameString = Utilities.formatName(currentForwardUser.first_name, currentForwardUser.last_name);
|
currentForwardNameString = ContactsController.formatName(currentForwardUser.first_name, currentForwardUser.last_name);
|
||||||
|
|
||||||
forwardedNameWidth = getMaxNameWidth();
|
forwardedNameWidth = getMaxNameWidth();
|
||||||
|
|
||||||
|
@ -520,7 +520,7 @@ public class ChatBaseCell extends BaseCell {
|
||||||
if (drawName && nameLayout != null) {
|
if (drawName && nameLayout != null) {
|
||||||
canvas.save();
|
canvas.save();
|
||||||
canvas.translate(currentBackgroundDrawable.getBounds().left + AndroidUtilities.dp(19) - nameOffsetX, AndroidUtilities.dp(10));
|
canvas.translate(currentBackgroundDrawable.getBounds().left + AndroidUtilities.dp(19) - nameOffsetX, AndroidUtilities.dp(10));
|
||||||
namePaint.setColor(Utilities.getColorForId(currentUser.id));
|
namePaint.setColor(AndroidUtilities.getColorForId(currentUser.id));
|
||||||
nameLayout.draw(canvas);
|
nameLayout.draw(canvas);
|
||||||
canvas.restore();
|
canvas.restore();
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,6 +11,7 @@ package org.telegram.ui.Cells;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.graphics.Canvas;
|
import android.graphics.Canvas;
|
||||||
import android.graphics.Paint;
|
import android.graphics.Paint;
|
||||||
|
import android.graphics.RectF;
|
||||||
import android.graphics.drawable.BitmapDrawable;
|
import android.graphics.drawable.BitmapDrawable;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.text.Layout;
|
import android.text.Layout;
|
||||||
|
@ -19,6 +20,7 @@ import android.text.TextPaint;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.view.MotionEvent;
|
import android.view.MotionEvent;
|
||||||
import android.view.SoundEffectConstants;
|
import android.view.SoundEffectConstants;
|
||||||
|
import android.view.animation.DecelerateInterpolator;
|
||||||
|
|
||||||
import org.telegram.android.AndroidUtilities;
|
import org.telegram.android.AndroidUtilities;
|
||||||
import org.telegram.android.ImageLoader;
|
import org.telegram.android.ImageLoader;
|
||||||
|
@ -32,7 +34,6 @@ import org.telegram.android.PhotoObject;
|
||||||
import org.telegram.ui.PhotoViewer;
|
import org.telegram.ui.PhotoViewer;
|
||||||
import org.telegram.ui.Views.GifDrawable;
|
import org.telegram.ui.Views.GifDrawable;
|
||||||
import org.telegram.android.ImageReceiver;
|
import org.telegram.android.ImageReceiver;
|
||||||
import org.telegram.ui.Views.RoundProgressView;
|
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
@ -54,6 +55,9 @@ public class ChatMediaCell extends ChatBaseCell implements MediaController.FileD
|
||||||
private static MessageObject lastDownloadedGifMessage = null;
|
private static MessageObject lastDownloadedGifMessage = null;
|
||||||
private static TextPaint namePaint;
|
private static TextPaint namePaint;
|
||||||
private static Paint docBackPaint;
|
private static Paint docBackPaint;
|
||||||
|
private static Paint progressPaint;
|
||||||
|
private static Paint progressBackgroundPaint;
|
||||||
|
private static DecelerateInterpolator decelerateInterpolator;
|
||||||
|
|
||||||
private GifDrawable gifDrawable = null;
|
private GifDrawable gifDrawable = null;
|
||||||
|
|
||||||
|
@ -63,7 +67,6 @@ public class ChatMediaCell extends ChatBaseCell implements MediaController.FileD
|
||||||
private String currentUrl;
|
private String currentUrl;
|
||||||
private String currentPhotoFilter;
|
private String currentPhotoFilter;
|
||||||
private ImageReceiver photoImage;
|
private ImageReceiver photoImage;
|
||||||
private RoundProgressView progressView;
|
|
||||||
private boolean progressVisible = false;
|
private boolean progressVisible = false;
|
||||||
private boolean photoNotSet = false;
|
private boolean photoNotSet = false;
|
||||||
private boolean cancelLoading = false;
|
private boolean cancelLoading = false;
|
||||||
|
@ -87,6 +90,15 @@ public class ChatMediaCell extends ChatBaseCell implements MediaController.FileD
|
||||||
|
|
||||||
public ChatMediaCellDelegate mediaDelegate = null;
|
public ChatMediaCellDelegate mediaDelegate = null;
|
||||||
|
|
||||||
|
private float currentProgress = 0;
|
||||||
|
private RectF progressRect = new RectF();
|
||||||
|
private long lastUpdateTime = 0;
|
||||||
|
private boolean animationStarted = false;
|
||||||
|
private float radOffset = 0;
|
||||||
|
private float animatedProgressValue = 0;
|
||||||
|
private long currentProgressTime = 0;
|
||||||
|
private float animationProgressStart = 0;
|
||||||
|
|
||||||
public ChatMediaCell(Context context) {
|
public ChatMediaCell(Context context) {
|
||||||
super(context);
|
super(context);
|
||||||
|
|
||||||
|
@ -113,12 +125,21 @@ public class ChatMediaCell extends ChatBaseCell implements MediaController.FileD
|
||||||
namePaint.setTextSize(AndroidUtilities.dp(16));
|
namePaint.setTextSize(AndroidUtilities.dp(16));
|
||||||
|
|
||||||
docBackPaint = new Paint();
|
docBackPaint = new Paint();
|
||||||
|
|
||||||
|
progressPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
|
||||||
|
progressPaint.setStyle(Paint.Style.STROKE);
|
||||||
|
progressPaint.setStrokeWidth(AndroidUtilities.dp(2));
|
||||||
|
|
||||||
|
decelerateInterpolator = new DecelerateInterpolator();
|
||||||
|
|
||||||
|
progressBackgroundPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
|
||||||
|
progressBackgroundPaint.setStyle(Paint.Style.STROKE);
|
||||||
|
progressBackgroundPaint.setStrokeWidth(AndroidUtilities.dp(2));
|
||||||
}
|
}
|
||||||
|
|
||||||
TAG = MediaController.getInstance().generateObserverTag();
|
TAG = MediaController.getInstance().generateObserverTag();
|
||||||
|
|
||||||
photoImage = new ImageReceiver(this);
|
photoImage = new ImageReceiver(this);
|
||||||
progressView = new RoundProgressView();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void clearGifImage() {
|
public void clearGifImage() {
|
||||||
|
@ -260,6 +281,7 @@ public class ChatMediaCell extends ChatBaseCell implements MediaController.FileD
|
||||||
FileLoader.getInstance().loadFile(currentMessageObject.messageOwner.media.video);
|
FileLoader.getInstance().loadFile(currentMessageObject.messageOwner.media.video);
|
||||||
}
|
}
|
||||||
progressVisible = true;
|
progressVisible = true;
|
||||||
|
startAnimation();
|
||||||
buttonState = 1;
|
buttonState = 1;
|
||||||
invalidate();
|
invalidate();
|
||||||
} else if (buttonState == 1) {
|
} else if (buttonState == 1) {
|
||||||
|
@ -280,6 +302,7 @@ public class ChatMediaCell extends ChatBaseCell implements MediaController.FileD
|
||||||
FileLoader.getInstance().cancelLoadFile(currentMessageObject.messageOwner.media.video);
|
FileLoader.getInstance().cancelLoadFile(currentMessageObject.messageOwner.media.video);
|
||||||
}
|
}
|
||||||
progressVisible = false;
|
progressVisible = false;
|
||||||
|
stopAnimation();
|
||||||
buttonState = 0;
|
buttonState = 0;
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
@ -342,7 +365,17 @@ public class ChatMediaCell extends ChatBaseCell implements MediaController.FileD
|
||||||
if (name == null || name.length() == 0) {
|
if (name == null || name.length() == 0) {
|
||||||
name = LocaleController.getString("AttachDocument", R.string.AttachDocument);
|
name = LocaleController.getString("AttachDocument", R.string.AttachDocument);
|
||||||
}
|
}
|
||||||
int maxWidth = Math.min(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y) - AndroidUtilities.dp(122 + 86 + 24);
|
int maxWidth;
|
||||||
|
if (AndroidUtilities.isTablet()) {
|
||||||
|
int min = Math.min(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y);
|
||||||
|
int leftWidth = min / 100 * 35;
|
||||||
|
if (leftWidth < AndroidUtilities.dp(320)) {
|
||||||
|
leftWidth = AndroidUtilities.dp(320);
|
||||||
|
}
|
||||||
|
maxWidth = min - leftWidth - AndroidUtilities.dp(122 + 86 + 24);
|
||||||
|
} else {
|
||||||
|
maxWidth = Math.min(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y) - AndroidUtilities.dp(122 + 86 + 24);
|
||||||
|
}
|
||||||
if (currentNameString == null || !currentNameString.equals(name)) {
|
if (currentNameString == null || !currentNameString.equals(name)) {
|
||||||
currentNameString = name;
|
currentNameString = name;
|
||||||
nameWidth = Math.min(maxWidth, (int) Math.ceil(namePaint.measureText(currentNameString)));
|
nameWidth = Math.min(maxWidth, (int) Math.ceil(namePaint.measureText(currentNameString)));
|
||||||
|
@ -426,8 +459,17 @@ public class ChatMediaCell extends ChatBaseCell implements MediaController.FileD
|
||||||
double lon = messageObject.messageOwner.media.geo._long;
|
double lon = messageObject.messageOwner.media.geo._long;
|
||||||
currentUrl = String.format(Locale.US, "https://maps.googleapis.com/maps/api/staticmap?center=%f,%f&zoom=13&size=100x100&maptype=roadmap&scale=%d&markers=color:red|size:big|%f,%f&sensor=false", lat, lon, Math.min(2, (int)Math.ceil(AndroidUtilities.density)), lat, lon);
|
currentUrl = String.format(Locale.US, "https://maps.googleapis.com/maps/api/staticmap?center=%f,%f&zoom=13&size=100x100&maptype=roadmap&scale=%d&markers=color:red|size:big|%f,%f&sensor=false", lat, lon, Math.min(2, (int)Math.ceil(AndroidUtilities.density)), lat, lon);
|
||||||
photoImage.setImage(currentUrl, null, messageObject.isOut() ? placeholderOutDrawable : placeholderInDrawable);
|
photoImage.setImage(currentUrl, null, messageObject.isOut() ? placeholderOutDrawable : placeholderInDrawable);
|
||||||
|
} else {
|
||||||
|
if (AndroidUtilities.isTablet()) {
|
||||||
|
int min = Math.min(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y);
|
||||||
|
int leftWidth = min / 100 * 35;
|
||||||
|
if (leftWidth < AndroidUtilities.dp(320)) {
|
||||||
|
leftWidth = AndroidUtilities.dp(320);
|
||||||
|
}
|
||||||
|
photoWidth = (int)((min - leftWidth) * 0.7f);
|
||||||
} else {
|
} else {
|
||||||
photoWidth = (int) (Math.min(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y) * 0.7f);
|
photoWidth = (int) (Math.min(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y) * 0.7f);
|
||||||
|
}
|
||||||
photoHeight = photoWidth + AndroidUtilities.dp(100);
|
photoHeight = photoWidth + AndroidUtilities.dp(100);
|
||||||
|
|
||||||
if (photoWidth > 800) {
|
if (photoWidth > 800) {
|
||||||
|
@ -549,13 +591,10 @@ public class ChatMediaCell extends ChatBaseCell implements MediaController.FileD
|
||||||
if (currentMessageObject.messageOwner.attachPath != null) {
|
if (currentMessageObject.messageOwner.attachPath != null) {
|
||||||
MediaController.getInstance().addLoadingFileObserver(currentMessageObject.messageOwner.attachPath, this);
|
MediaController.getInstance().addLoadingFileObserver(currentMessageObject.messageOwner.attachPath, this);
|
||||||
progressVisible = true;
|
progressVisible = true;
|
||||||
|
startAnimation();
|
||||||
buttonState = 1;
|
buttonState = 1;
|
||||||
Float progress = FileLoader.getInstance().getFileProgress(currentMessageObject.messageOwner.attachPath);
|
Float progress = FileLoader.getInstance().getFileProgress(currentMessageObject.messageOwner.attachPath);
|
||||||
if (progress != null) {
|
setProgress(progress != null ? progress : 0, false);
|
||||||
progressView.setProgress(progress);
|
|
||||||
} else {
|
|
||||||
progressView.setProgress(0);
|
|
||||||
}
|
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -571,25 +610,25 @@ public class ChatMediaCell extends ChatBaseCell implements MediaController.FileD
|
||||||
if (cancelLoading || currentMessageObject.type != 1 || !MediaController.getInstance().canDownloadMedia(MediaController.AUTODOWNLOAD_MASK_PHOTO)) {
|
if (cancelLoading || currentMessageObject.type != 1 || !MediaController.getInstance().canDownloadMedia(MediaController.AUTODOWNLOAD_MASK_PHOTO)) {
|
||||||
buttonState = 0;
|
buttonState = 0;
|
||||||
progressVisible = false;
|
progressVisible = false;
|
||||||
|
stopAnimation();
|
||||||
} else {
|
} else {
|
||||||
buttonState = 1;
|
buttonState = 1;
|
||||||
progressVisible = true;
|
progressVisible = true;
|
||||||
|
startAnimation();
|
||||||
}
|
}
|
||||||
progressView.setProgress(0);
|
setProgress(0, false);
|
||||||
} else {
|
} else {
|
||||||
buttonState = 1;
|
buttonState = 1;
|
||||||
progressVisible = true;
|
progressVisible = true;
|
||||||
|
startAnimation();
|
||||||
Float progress = FileLoader.getInstance().getFileProgress(fileName);
|
Float progress = FileLoader.getInstance().getFileProgress(fileName);
|
||||||
if (progress != null) {
|
setProgress(progress != null ? progress : 0, false);
|
||||||
progressView.setProgress(progress);
|
|
||||||
} else {
|
|
||||||
progressView.setProgress(0);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
invalidate();
|
invalidate();
|
||||||
} else {
|
} else {
|
||||||
MediaController.getInstance().removeLoadingFileObserver(this);
|
MediaController.getInstance().removeLoadingFileObserver(this);
|
||||||
progressVisible = false;
|
progressVisible = false;
|
||||||
|
stopAnimation();
|
||||||
if (currentMessageObject.type == 8 && (gifDrawable == null || gifDrawable != null && !gifDrawable.isRunning())) {
|
if (currentMessageObject.type == 8 && (gifDrawable == null || gifDrawable != null && !gifDrawable.isRunning())) {
|
||||||
buttonState = 2;
|
buttonState = 2;
|
||||||
} else if (currentMessageObject.type == 3) {
|
} else if (currentMessageObject.type == 3) {
|
||||||
|
@ -602,6 +641,54 @@ public class ChatMediaCell extends ChatBaseCell implements MediaController.FileD
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void updateAnimation() {
|
||||||
|
long newTime = System.currentTimeMillis();
|
||||||
|
long dt = newTime - lastUpdateTime;
|
||||||
|
lastUpdateTime = newTime;
|
||||||
|
|
||||||
|
radOffset += 360 * dt / 3000.0f;
|
||||||
|
float progressDiff = currentProgress - animationProgressStart;
|
||||||
|
if (progressDiff > 0) {
|
||||||
|
currentProgressTime += dt;
|
||||||
|
if (currentProgressTime >= 300) {
|
||||||
|
animatedProgressValue = currentProgress;
|
||||||
|
animationProgressStart = currentProgress;
|
||||||
|
currentProgressTime = 0;
|
||||||
|
} else {
|
||||||
|
animatedProgressValue = animationProgressStart + progressDiff * decelerateInterpolator.getInterpolation(currentProgressTime / 300.0f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
invalidateProgress();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void startAnimation() {
|
||||||
|
lastUpdateTime = System.currentTimeMillis();
|
||||||
|
animationStarted = true;
|
||||||
|
invalidateProgress();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setProgress(float value, boolean animated) {
|
||||||
|
if (!animated) {
|
||||||
|
animatedProgressValue = value;
|
||||||
|
animationProgressStart = value;
|
||||||
|
} else {
|
||||||
|
animationProgressStart = animatedProgressValue;
|
||||||
|
}
|
||||||
|
currentProgress = value;
|
||||||
|
currentProgressTime = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void invalidateProgress() {
|
||||||
|
int offset = AndroidUtilities.dp(1);
|
||||||
|
invalidate((int)progressRect.left - offset, (int)progressRect.top - offset, (int)progressRect.right + offset * 2, (int)progressRect.bottom + offset * 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void stopAnimation() {
|
||||||
|
radOffset = 0;
|
||||||
|
animationStarted = false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
||||||
setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), photoHeight + AndroidUtilities.dp(14));
|
setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), photoHeight + AndroidUtilities.dp(14));
|
||||||
|
@ -629,7 +716,7 @@ public class ChatMediaCell extends ChatBaseCell implements MediaController.FileD
|
||||||
int size = AndroidUtilities.dp(44);
|
int size = AndroidUtilities.dp(44);
|
||||||
buttonX = (int)(x + (photoWidth - size) / 2.0f);
|
buttonX = (int)(x + (photoWidth - size) / 2.0f);
|
||||||
buttonY = (int)(AndroidUtilities.dp(7) + (photoHeight - size) / 2.0f);
|
buttonY = (int)(AndroidUtilities.dp(7) + (photoHeight - size) / 2.0f);
|
||||||
progressView.rect.set(buttonX + AndroidUtilities.dp(1), buttonY + AndroidUtilities.dp(1), buttonX + AndroidUtilities.dp(43), buttonY + AndroidUtilities.dp(43));
|
progressRect.set(buttonX + AndroidUtilities.dp(1), buttonY + AndroidUtilities.dp(1), buttonX + AndroidUtilities.dp(43), buttonY + AndroidUtilities.dp(43));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -646,6 +733,8 @@ public class ChatMediaCell extends ChatBaseCell implements MediaController.FileD
|
||||||
drawTime = photoImage.getVisible();
|
drawTime = photoImage.getVisible();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
boolean needProgressBackground = false;
|
||||||
if (currentMessageObject.type == 9) {
|
if (currentMessageObject.type == 9) {
|
||||||
if (currentMessageObject.isOut()) {
|
if (currentMessageObject.isOut()) {
|
||||||
infoPaint.setColor(0xff75b166);
|
infoPaint.setColor(0xff75b166);
|
||||||
|
@ -664,15 +753,21 @@ public class ChatMediaCell extends ChatBaseCell implements MediaController.FileD
|
||||||
drawable.draw(canvas);
|
drawable.draw(canvas);
|
||||||
}
|
}
|
||||||
if (currentMessageObject.isOut()) {
|
if (currentMessageObject.isOut()) {
|
||||||
progressView.setColor(0xff81bd72);
|
progressPaint.setColor(0xff81bd72);
|
||||||
|
progressBackgroundPaint.setColor(0xffbae4a2);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
progressView.setColor(0xffadbdcc);
|
progressPaint.setColor(0xffadbdcc);
|
||||||
|
progressBackgroundPaint.setColor(0xffd5dee7);
|
||||||
|
}
|
||||||
|
needProgressBackground = true;
|
||||||
|
} else {
|
||||||
|
progressPaint.setColor(0xffffffff);
|
||||||
|
needProgressBackground = false;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
progressView.setColor(0xffffffff);
|
progressPaint.setColor(0xffffffff);
|
||||||
}
|
needProgressBackground = false;
|
||||||
} else {
|
|
||||||
progressView.setColor(0xffffffff);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (buttonState >= 0 && buttonState < 4) {
|
if (buttonState >= 0 && buttonState < 4) {
|
||||||
|
@ -687,7 +782,10 @@ public class ChatMediaCell extends ChatBaseCell implements MediaController.FileD
|
||||||
}
|
}
|
||||||
|
|
||||||
if (progressVisible) {
|
if (progressVisible) {
|
||||||
progressView.draw(canvas);
|
if (needProgressBackground) {
|
||||||
|
canvas.drawArc(progressRect, 0, 360, false, progressBackgroundPaint);
|
||||||
|
}
|
||||||
|
canvas.drawArc(progressRect, -90 + radOffset, Math.max(4, 360 * animatedProgressValue), false, progressPaint);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nameLayout != null) {
|
if (nameLayout != null) {
|
||||||
|
@ -717,6 +815,10 @@ public class ChatMediaCell extends ChatBaseCell implements MediaController.FileD
|
||||||
infoLayout.draw(canvas);
|
infoLayout.draw(canvas);
|
||||||
canvas.restore();
|
canvas.restore();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (animationStarted) {
|
||||||
|
updateAnimation();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -738,17 +840,17 @@ public class ChatMediaCell extends ChatBaseCell implements MediaController.FileD
|
||||||
@Override
|
@Override
|
||||||
public void onProgressDownload(String fileName, float progress) {
|
public void onProgressDownload(String fileName, float progress) {
|
||||||
progressVisible = true;
|
progressVisible = true;
|
||||||
progressView.setProgress(progress);
|
setProgress(progress, true);
|
||||||
if (buttonState != 1) {
|
if (buttonState != 1) {
|
||||||
updateButtonState();
|
updateButtonState();
|
||||||
}
|
}
|
||||||
invalidate();
|
invalidateProgress();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onProgressUpload(String fileName, float progress, boolean isEncrypted) {
|
public void onProgressUpload(String fileName, float progress, boolean isEncrypted) {
|
||||||
progressView.setProgress(progress);
|
setProgress(progress, true);
|
||||||
invalidate();
|
invalidateProgress();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -131,6 +131,21 @@ public class ChatMessageCell extends ChatBaseCell {
|
||||||
}
|
}
|
||||||
pressedLink = null;
|
pressedLink = null;
|
||||||
int maxWidth;
|
int maxWidth;
|
||||||
|
|
||||||
|
if (AndroidUtilities.isTablet()) {
|
||||||
|
int min = Math.min(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y);
|
||||||
|
int leftWidth = min / 100 * 35;
|
||||||
|
if (leftWidth < AndroidUtilities.dp(320)) {
|
||||||
|
leftWidth = AndroidUtilities.dp(320);
|
||||||
|
}
|
||||||
|
if (isChat && !messageObject.isOut()) {
|
||||||
|
maxWidth = min - leftWidth - AndroidUtilities.dp(122);
|
||||||
|
drawName = true;
|
||||||
|
} else {
|
||||||
|
maxWidth = min - leftWidth - AndroidUtilities.dp(80);
|
||||||
|
drawName = false;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
if (isChat && !messageObject.isOut()) {
|
if (isChat && !messageObject.isOut()) {
|
||||||
maxWidth = AndroidUtilities.displaySize.x - AndroidUtilities.dp(122);
|
maxWidth = AndroidUtilities.displaySize.x - AndroidUtilities.dp(122);
|
||||||
drawName = true;
|
drawName = true;
|
||||||
|
@ -138,6 +153,7 @@ public class ChatMessageCell extends ChatBaseCell {
|
||||||
maxWidth = AndroidUtilities.displaySize.x - AndroidUtilities.dp(80);
|
maxWidth = AndroidUtilities.displaySize.x - AndroidUtilities.dp(80);
|
||||||
drawName = false;
|
drawName = false;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
backgroundWidth = maxWidth;
|
backgroundWidth = maxWidth;
|
||||||
|
|
||||||
|
|
|
@ -19,13 +19,13 @@ import android.text.TextUtils;
|
||||||
|
|
||||||
import org.telegram.android.AndroidUtilities;
|
import org.telegram.android.AndroidUtilities;
|
||||||
import org.telegram.PhoneFormat.PhoneFormat;
|
import org.telegram.PhoneFormat.PhoneFormat;
|
||||||
|
import org.telegram.android.ContactsController;
|
||||||
import org.telegram.android.LocaleController;
|
import org.telegram.android.LocaleController;
|
||||||
import org.telegram.messenger.TLRPC;
|
import org.telegram.messenger.TLRPC;
|
||||||
import org.telegram.messenger.ConnectionsManager;
|
import org.telegram.messenger.ConnectionsManager;
|
||||||
import org.telegram.android.MessagesController;
|
import org.telegram.android.MessagesController;
|
||||||
import org.telegram.messenger.R;
|
import org.telegram.messenger.R;
|
||||||
import org.telegram.messenger.UserConfig;
|
import org.telegram.messenger.UserConfig;
|
||||||
import org.telegram.messenger.Utilities;
|
|
||||||
import org.telegram.android.ImageReceiver;
|
import org.telegram.android.ImageReceiver;
|
||||||
|
|
||||||
public class ChatOrUserCell extends BaseCell {
|
public class ChatOrUserCell extends BaseCell {
|
||||||
|
@ -157,12 +157,16 @@ public class ChatOrUserCell extends BaseCell {
|
||||||
if (user.photo != null) {
|
if (user.photo != null) {
|
||||||
photo = user.photo.photo_small;
|
photo = user.photo.photo_small;
|
||||||
}
|
}
|
||||||
placeHolderId = Utilities.getUserAvatarForId(user.id);
|
placeHolderId = AndroidUtilities.getUserAvatarForId(user.id);
|
||||||
} else if (chat != null) {
|
} else if (chat != null) {
|
||||||
if (chat.photo != null) {
|
if (chat.photo != null) {
|
||||||
photo = chat.photo.photo_small;
|
photo = chat.photo.photo_small;
|
||||||
}
|
}
|
||||||
placeHolderId = Utilities.getGroupAvatarForId(chat.id);
|
if (chat.id > 0) {
|
||||||
|
placeHolderId = AndroidUtilities.getGroupAvatarForId(chat.id);
|
||||||
|
} else {
|
||||||
|
placeHolderId = AndroidUtilities.getBroadcastAvatarForId(chat.id);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mask != 0) {
|
if (mask != 0) {
|
||||||
|
@ -339,7 +343,7 @@ public class ChatOrUserCell extends BaseCell {
|
||||||
if (chat != null) {
|
if (chat != null) {
|
||||||
nameString2 = chat.title;
|
nameString2 = chat.title;
|
||||||
} else if (user != null) {
|
} else if (user != null) {
|
||||||
nameString2 = Utilities.formatName(user.first_name, user.last_name);
|
nameString2 = ContactsController.formatName(user.first_name, user.last_name);
|
||||||
}
|
}
|
||||||
nameString = nameString2.replace("\n", " ");
|
nameString = nameString2.replace("\n", " ");
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,7 +27,6 @@ import org.telegram.android.Emoji;
|
||||||
import org.telegram.android.MessagesController;
|
import org.telegram.android.MessagesController;
|
||||||
import org.telegram.messenger.R;
|
import org.telegram.messenger.R;
|
||||||
import org.telegram.messenger.UserConfig;
|
import org.telegram.messenger.UserConfig;
|
||||||
import org.telegram.messenger.Utilities;
|
|
||||||
import org.telegram.android.MessageObject;
|
import org.telegram.android.MessageObject;
|
||||||
import org.telegram.android.ImageReceiver;
|
import org.telegram.android.ImageReceiver;
|
||||||
|
|
||||||
|
@ -155,6 +154,10 @@ public class DialogCell extends BaseCell {
|
||||||
update(0);
|
update(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public TLRPC.TL_dialog getDialog() {
|
||||||
|
return currentDialog;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onDetachedFromWindow() {
|
protected void onDetachedFromWindow() {
|
||||||
super.onDetachedFromWindow();
|
super.onDetachedFromWindow();
|
||||||
|
@ -249,12 +252,16 @@ public class DialogCell extends BaseCell {
|
||||||
if (user.photo != null) {
|
if (user.photo != null) {
|
||||||
photo = user.photo.photo_small;
|
photo = user.photo.photo_small;
|
||||||
}
|
}
|
||||||
placeHolderId = Utilities.getUserAvatarForId(user.id);
|
placeHolderId = AndroidUtilities.getUserAvatarForId(user.id);
|
||||||
} else if (chat != null) {
|
} else if (chat != null) {
|
||||||
if (chat.photo != null) {
|
if (chat.photo != null) {
|
||||||
photo = chat.photo.photo_small;
|
photo = chat.photo.photo_small;
|
||||||
}
|
}
|
||||||
placeHolderId = Utilities.getGroupAvatarForId(chat.id);
|
if (chat.id > 0) {
|
||||||
|
placeHolderId = AndroidUtilities.getGroupAvatarForId(chat.id);
|
||||||
|
} else {
|
||||||
|
placeHolderId = AndroidUtilities.getBroadcastAvatarForId(chat.id);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
avatarImage.setImage(photo, "50_50", placeHolderId == 0 ? null : getResources().getDrawable(placeHolderId));
|
avatarImage.setImage(photo, "50_50", placeHolderId == 0 ? null : getResources().getDrawable(placeHolderId));
|
||||||
|
|
||||||
|
@ -564,17 +571,17 @@ public class DialogCell extends BaseCell {
|
||||||
} else if (user != null) {
|
} else if (user != null) {
|
||||||
if (user.id / 1000 != 777 && user.id / 1000 != 333 && ContactsController.getInstance().contactsDict.get(user.id) == null) {
|
if (user.id / 1000 != 777 && user.id / 1000 != 333 && ContactsController.getInstance().contactsDict.get(user.id) == null) {
|
||||||
if (ContactsController.getInstance().contactsDict.size() == 0 && (!ContactsController.getInstance().contactsLoaded || ContactsController.getInstance().isLoadingContacts())) {
|
if (ContactsController.getInstance().contactsDict.size() == 0 && (!ContactsController.getInstance().contactsLoaded || ContactsController.getInstance().isLoadingContacts())) {
|
||||||
nameString = Utilities.formatName(user.first_name, user.last_name);
|
nameString = ContactsController.formatName(user.first_name, user.last_name);
|
||||||
} else {
|
} else {
|
||||||
if (user.phone != null && user.phone.length() != 0) {
|
if (user.phone != null && user.phone.length() != 0) {
|
||||||
nameString = PhoneFormat.getInstance().format("+" + user.phone);
|
nameString = PhoneFormat.getInstance().format("+" + user.phone);
|
||||||
} else {
|
} else {
|
||||||
currentNamePaint = nameUnknownPaint;
|
currentNamePaint = nameUnknownPaint;
|
||||||
nameString = Utilities.formatName(user.first_name, user.last_name);
|
nameString = ContactsController.formatName(user.first_name, user.last_name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
nameString = Utilities.formatName(user.first_name, user.last_name);
|
nameString = ContactsController.formatName(user.first_name, user.last_name);
|
||||||
}
|
}
|
||||||
if (encryptedChat != null) {
|
if (encryptedChat != null) {
|
||||||
currentNamePaint = nameEncryptedPaint;
|
currentNamePaint = nameEncryptedPaint;
|
||||||
|
|
|
@ -20,11 +20,11 @@ import android.content.pm.PackageManager;
|
||||||
import android.content.res.Configuration;
|
import android.content.res.Configuration;
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.graphics.Rect;
|
import android.graphics.Rect;
|
||||||
import android.graphics.drawable.AnimationDrawable;
|
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.media.MediaPlayer;
|
import android.media.MediaPlayer;
|
||||||
import android.media.ThumbnailUtils;
|
import android.media.ThumbnailUtils;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.provider.MediaStore;
|
import android.provider.MediaStore;
|
||||||
import android.text.Html;
|
import android.text.Html;
|
||||||
|
@ -83,6 +83,7 @@ import org.telegram.ui.Views.LayoutListView;
|
||||||
import org.telegram.ui.Views.MessageActionLayout;
|
import org.telegram.ui.Views.MessageActionLayout;
|
||||||
import org.telegram.ui.Views.SizeNotifierRelativeLayout;
|
import org.telegram.ui.Views.SizeNotifierRelativeLayout;
|
||||||
import org.telegram.ui.Views.TimerButton;
|
import org.telegram.ui.Views.TimerButton;
|
||||||
|
import org.telegram.ui.Views.TypingDotsDrawable;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -112,6 +113,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
private BackupImageView avatarImageView;
|
private BackupImageView avatarImageView;
|
||||||
private TextView bottomOverlayChatText;
|
private TextView bottomOverlayChatText;
|
||||||
private View bottomOverlayChat;
|
private View bottomOverlayChat;
|
||||||
|
private TypingDotsDrawable typingDotsDrawable;
|
||||||
|
|
||||||
private TextView bottomOverlayText;
|
private TextView bottomOverlayText;
|
||||||
|
|
||||||
|
@ -146,6 +148,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
private boolean loading = false;
|
private boolean loading = false;
|
||||||
private boolean cacheEndReaced = false;
|
private boolean cacheEndReaced = false;
|
||||||
private boolean firstLoading = true;
|
private boolean firstLoading = true;
|
||||||
|
private int loadsCount = 0;
|
||||||
|
|
||||||
private int minDate = 0;
|
private int minDate = 0;
|
||||||
private boolean first = true;
|
private boolean first = true;
|
||||||
|
@ -348,6 +351,13 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
userBlocked = MessagesController.getInstance().blockedUsers.contains(currentUser.id);
|
userBlocked = MessagesController.getInstance().blockedUsers.contains(currentUser.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (AndroidUtilities.isTablet()) {
|
||||||
|
NotificationCenter.getInstance().postNotificationName(NotificationCenter.openedChatChanged, dialog_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
typingDotsDrawable = new TypingDotsDrawable();
|
||||||
|
typingDotsDrawable.setIsChat(currentChat != null);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -376,6 +386,9 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
NotificationCenter.getInstance().removeObserver(this, NotificationCenter.audioDidReset);
|
NotificationCenter.getInstance().removeObserver(this, NotificationCenter.audioDidReset);
|
||||||
NotificationCenter.getInstance().removeObserver(this, NotificationCenter.screenshotTook);
|
NotificationCenter.getInstance().removeObserver(this, NotificationCenter.screenshotTook);
|
||||||
NotificationCenter.getInstance().removeObserver(this, NotificationCenter.blockedUsersDidLoaded);
|
NotificationCenter.getInstance().removeObserver(this, NotificationCenter.blockedUsersDidLoaded);
|
||||||
|
if (AndroidUtilities.isTablet()) {
|
||||||
|
NotificationCenter.getInstance().postNotificationName(NotificationCenter.openedChatChanged, (long)0);
|
||||||
|
}
|
||||||
if (currentEncryptedChat != null) {
|
if (currentEncryptedChat != null) {
|
||||||
MediaController.getInstance().stopMediaObserver();
|
MediaController.getInstance().stopMediaObserver();
|
||||||
}
|
}
|
||||||
|
@ -387,6 +400,9 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
public View createView(LayoutInflater inflater, ViewGroup container) {
|
public View createView(LayoutInflater inflater, ViewGroup container) {
|
||||||
if (fragmentView == null) {
|
if (fragmentView == null) {
|
||||||
actionBarLayer.setDisplayHomeAsUpEnabled(true, R.drawable.ic_ab_back);
|
actionBarLayer.setDisplayHomeAsUpEnabled(true, R.drawable.ic_ab_back);
|
||||||
|
if (AndroidUtilities.isTablet()) {
|
||||||
|
actionBarLayer.setExtraLeftMargin(4);
|
||||||
|
}
|
||||||
actionBarLayer.setBackOverlay(R.layout.updating_state_layout);
|
actionBarLayer.setBackOverlay(R.layout.updating_state_layout);
|
||||||
actionBarLayer.setActionBarMenuOnItemClick(new ActionBarLayer.ActionBarMenuOnItemClick() {
|
actionBarLayer.setActionBarMenuOnItemClick(new ActionBarLayer.ActionBarMenuOnItemClick() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -554,7 +570,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
menuItem = item;
|
menuItem = item;
|
||||||
|
|
||||||
ActionBarMenu actionMode = actionBarLayer.createActionMode();
|
ActionBarMenu actionMode = actionBarLayer.createActionMode();
|
||||||
actionMode.addItem(-2, R.drawable.ic_ab_done_gray);
|
actionMode.addItem(-2, R.drawable.ic_ab_done_gray, R.drawable.bar_selector_mode);
|
||||||
|
|
||||||
FrameLayout layout = new FrameLayout(actionMode.getContext());
|
FrameLayout layout = new FrameLayout(actionMode.getContext());
|
||||||
layout.setBackgroundColor(0xffe5e5e5);
|
layout.setBackgroundColor(0xffe5e5e5);
|
||||||
|
@ -573,7 +589,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
selectedMessagesCountTextView.setSingleLine(true);
|
selectedMessagesCountTextView.setSingleLine(true);
|
||||||
selectedMessagesCountTextView.setLines(1);
|
selectedMessagesCountTextView.setLines(1);
|
||||||
selectedMessagesCountTextView.setEllipsize(TextUtils.TruncateAt.END);
|
selectedMessagesCountTextView.setEllipsize(TextUtils.TruncateAt.END);
|
||||||
selectedMessagesCountTextView.setPadding(AndroidUtilities.dp(6), 0, 0, 0);
|
selectedMessagesCountTextView.setPadding(AndroidUtilities.dp(11), 0, 0, 0);
|
||||||
selectedMessagesCountTextView.setGravity(Gravity.CENTER_VERTICAL);
|
selectedMessagesCountTextView.setGravity(Gravity.CENTER_VERTICAL);
|
||||||
selectedMessagesCountTextView.setOnTouchListener(new View.OnTouchListener() {
|
selectedMessagesCountTextView.setOnTouchListener(new View.OnTouchListener() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -589,12 +605,12 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
selectedMessagesCountTextView.setLayoutParams(layoutParams);
|
selectedMessagesCountTextView.setLayoutParams(layoutParams);
|
||||||
|
|
||||||
if (currentEncryptedChat == null) {
|
if (currentEncryptedChat == null) {
|
||||||
actionMode.addItem(copy, R.drawable.ic_ab_fwd_copy);
|
actionMode.addItem(copy, R.drawable.ic_ab_fwd_copy, R.drawable.bar_selector_mode);
|
||||||
actionMode.addItem(forward, R.drawable.ic_ab_fwd_forward);
|
actionMode.addItem(forward, R.drawable.ic_ab_fwd_forward, R.drawable.bar_selector_mode);
|
||||||
actionMode.addItem(delete, R.drawable.ic_ab_fwd_delete);
|
actionMode.addItem(delete, R.drawable.ic_ab_fwd_delete, R.drawable.bar_selector_mode);
|
||||||
} else {
|
} else {
|
||||||
actionMode.addItem(copy, R.drawable.ic_ab_fwd_copy);
|
actionMode.addItem(copy, R.drawable.ic_ab_fwd_copy, R.drawable.bar_selector_mode);
|
||||||
actionMode.addItem(delete, R.drawable.ic_ab_fwd_delete);
|
actionMode.addItem(delete, R.drawable.ic_ab_fwd_delete, R.drawable.bar_selector_mode);
|
||||||
}
|
}
|
||||||
actionMode.getItem(copy).setVisibility(selectedMessagesCanCopyIds.size() != 0 ? View.VISIBLE : View.GONE);
|
actionMode.getItem(copy).setVisibility(selectedMessagesCanCopyIds.size() != 0 ? View.VISIBLE : View.GONE);
|
||||||
|
|
||||||
|
@ -1023,12 +1039,16 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
if (currentUser.photo != null) {
|
if (currentUser.photo != null) {
|
||||||
photo = currentUser.photo.photo_small;
|
photo = currentUser.photo.photo_small;
|
||||||
}
|
}
|
||||||
placeHolderId = Utilities.getUserAvatarForId(currentUser.id);
|
placeHolderId = AndroidUtilities.getUserAvatarForId(currentUser.id);
|
||||||
} else if (currentChat != null) {
|
} else if (currentChat != null) {
|
||||||
if (currentChat.photo != null) {
|
if (currentChat.photo != null) {
|
||||||
photo = currentChat.photo.photo_small;
|
photo = currentChat.photo.photo_small;
|
||||||
}
|
}
|
||||||
placeHolderId = Utilities.getGroupAvatarForId(currentChat.id);
|
if (isBraodcast) {
|
||||||
|
placeHolderId = AndroidUtilities.getBroadcastAvatarForId(currentChat.id);
|
||||||
|
} else {
|
||||||
|
placeHolderId = AndroidUtilities.getGroupAvatarForId(currentChat.id);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
avatarImageView.setImage(photo, "50_50", placeHolderId);
|
avatarImageView.setImage(photo, "50_50", placeHolderId);
|
||||||
}
|
}
|
||||||
|
@ -1215,10 +1235,10 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
if (currentUser.phone != null && currentUser.phone.length() != 0) {
|
if (currentUser.phone != null && currentUser.phone.length() != 0) {
|
||||||
actionBarLayer.setTitle(PhoneFormat.getInstance().format("+" + currentUser.phone));
|
actionBarLayer.setTitle(PhoneFormat.getInstance().format("+" + currentUser.phone));
|
||||||
} else {
|
} else {
|
||||||
actionBarLayer.setTitle(Utilities.formatName(currentUser.first_name, currentUser.last_name));
|
actionBarLayer.setTitle(ContactsController.formatName(currentUser.first_name, currentUser.last_name));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
actionBarLayer.setTitle(Utilities.formatName(currentUser.first_name, currentUser.last_name));
|
actionBarLayer.setTitle(ContactsController.formatName(currentUser.first_name, currentUser.last_name));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1268,7 +1288,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
if (currentUser.photo != null) {
|
if (currentUser.photo != null) {
|
||||||
newPhoto = currentUser.photo.photo_small;
|
newPhoto = currentUser.photo.photo_small;
|
||||||
}
|
}
|
||||||
placeHolderId = Utilities.getUserAvatarForId(currentUser.id);
|
placeHolderId = AndroidUtilities.getUserAvatarForId(currentUser.id);
|
||||||
} else if (currentChat != null) {
|
} else if (currentChat != null) {
|
||||||
TLRPC.Chat chat = MessagesController.getInstance().getChat(currentChat.id);
|
TLRPC.Chat chat = MessagesController.getInstance().getChat(currentChat.id);
|
||||||
if (chat == null) {
|
if (chat == null) {
|
||||||
|
@ -1278,7 +1298,11 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
if (currentChat.photo != null) {
|
if (currentChat.photo != null) {
|
||||||
newPhoto = currentChat.photo.photo_small;
|
newPhoto = currentChat.photo.photo_small;
|
||||||
}
|
}
|
||||||
placeHolderId = Utilities.getGroupAvatarForId(currentChat.id);
|
if (isBraodcast) {
|
||||||
|
placeHolderId = AndroidUtilities.getBroadcastAvatarForId(currentChat.id);
|
||||||
|
} else {
|
||||||
|
placeHolderId = AndroidUtilities.getGroupAvatarForId(currentChat.id);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (avatarImageView != null) {
|
if (avatarImageView != null) {
|
||||||
avatarImageView.setImage(newPhoto, "50_50", placeHolderId);
|
avatarImageView.setImage(newPhoto, "50_50", placeHolderId);
|
||||||
|
@ -1331,15 +1355,15 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
}
|
}
|
||||||
currentPicturePath = null;
|
currentPicturePath = null;
|
||||||
}
|
}
|
||||||
/*if(android.os.Build.VERSION.SDK_INT >= 18) {
|
if(android.os.Build.VERSION.SDK_INT >= 16) {
|
||||||
Bundle args = new Bundle();
|
Bundle args = new Bundle();
|
||||||
args.putString("videoPath", videoPath);
|
args.putString("videoPath", videoPath);
|
||||||
VideoEditorActivity fragment = new VideoEditorActivity(args);
|
VideoEditorActivity fragment = new VideoEditorActivity(args);
|
||||||
fragment.setDelegate(this);
|
fragment.setDelegate(this);
|
||||||
presentFragment(fragment);
|
presentFragment(fragment);
|
||||||
} else {*/
|
} else {
|
||||||
processSendingVideo(videoPath, null, 0, 0, 0, 0);
|
processSendingVideo(videoPath, null, 0, 0, 0, 0);
|
||||||
//}
|
}
|
||||||
} else if (requestCode == 21) {
|
} else if (requestCode == 21) {
|
||||||
if (data == null || data.getData() == null) {
|
if (data == null || data.getData() == null) {
|
||||||
showAttachmentError();
|
showAttachmentError();
|
||||||
|
@ -1703,6 +1727,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
if (id == NotificationCenter.messagesDidLoaded) {
|
if (id == NotificationCenter.messagesDidLoaded) {
|
||||||
long did = (Long)args[0];
|
long did = (Long)args[0];
|
||||||
if (did == dialog_id) {
|
if (did == dialog_id) {
|
||||||
|
loadsCount++;
|
||||||
int count = (Integer)args[1];
|
int count = (Integer)args[1];
|
||||||
boolean isCache = (Boolean)args[3];
|
boolean isCache = (Boolean)args[3];
|
||||||
int fnid = (Integer)args[4];
|
int fnid = (Integer)args[4];
|
||||||
|
@ -1721,6 +1746,10 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
int newRowsCount = 0;
|
int newRowsCount = 0;
|
||||||
unread_end_reached = last_unread_id == 0;
|
unread_end_reached = last_unread_id == 0;
|
||||||
|
|
||||||
|
if (loadsCount == 1 && messArr.size() > 20) {
|
||||||
|
loadsCount++;
|
||||||
|
}
|
||||||
|
|
||||||
if (firstLoading) {
|
if (firstLoading) {
|
||||||
if (!unread_end_reached) {
|
if (!unread_end_reached) {
|
||||||
messages.clear();
|
messages.clear();
|
||||||
|
@ -2488,19 +2517,14 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
}
|
}
|
||||||
if (start) {
|
if (start) {
|
||||||
try {
|
try {
|
||||||
if (currentChat != null) {
|
actionBarLayer.setSubTitleIcon(0, typingDotsDrawable, AndroidUtilities.dp(4));
|
||||||
actionBarLayer.setSubTitleIcon(R.drawable.typing_dots_chat, AndroidUtilities.dp(4));
|
typingDotsDrawable.start();
|
||||||
} else {
|
|
||||||
actionBarLayer.setSubTitleIcon(R.drawable.typing_dots, AndroidUtilities.dp(4));
|
|
||||||
}
|
|
||||||
AnimationDrawable mAnim = (AnimationDrawable)actionBarLayer.getSubTitleIcon();
|
|
||||||
mAnim.setAlpha(200);
|
|
||||||
mAnim.start();
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
FileLog.e("tmessages", e);
|
FileLog.e("tmessages", e);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
actionBarLayer.setSubTitleIcon(0, 0);
|
actionBarLayer.setSubTitleIcon(0, null, 0);
|
||||||
|
typingDotsDrawable.stop();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2567,7 +2591,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
int height = AndroidUtilities.dp(48);
|
int height = AndroidUtilities.dp(48);
|
||||||
if (!Utilities.isTablet(getParentActivity()) && getParentActivity().getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
|
if (!AndroidUtilities.isTablet() && getParentActivity().getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
|
||||||
height = AndroidUtilities.dp(40);
|
height = AndroidUtilities.dp(40);
|
||||||
selectedMessagesCountTextView.setTextSize(16);
|
selectedMessagesCountTextView.setTextSize(16);
|
||||||
} else {
|
} else {
|
||||||
|
@ -2782,7 +2806,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (option == 0) {
|
if (option == 0) {
|
||||||
if (SendMessagesHelper.getInstance().retrySendMessage(selectedObject)) {
|
if (SendMessagesHelper.getInstance().retrySendMessage(selectedObject, false)) {
|
||||||
chatListView.setSelectionFromTop(messages.size() - 1, -100000 - chatListView.getPaddingTop());
|
chatListView.setSelectionFromTop(messages.size() - 1, -100000 - chatListView.getPaddingTop());
|
||||||
}
|
}
|
||||||
} else if (option == 1) {
|
} else if (option == 1) {
|
||||||
|
@ -3196,6 +3220,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
} else {
|
} else {
|
||||||
progressBar.setBackgroundResource(R.drawable.system_loader1);
|
progressBar.setBackgroundResource(R.drawable.system_loader1);
|
||||||
}
|
}
|
||||||
|
progressBar.setVisibility(loadsCount > 1 ? View.VISIBLE : View.INVISIBLE);
|
||||||
}
|
}
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
@ -3440,33 +3465,42 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
if (fromUser.photo != null) {
|
if (fromUser.photo != null) {
|
||||||
photo = fromUser.photo.photo_small;
|
photo = fromUser.photo.photo_small;
|
||||||
}
|
}
|
||||||
int placeHolderId = Utilities.getUserAvatarForId(fromUser.id);
|
int placeHolderId = AndroidUtilities.getUserAvatarForId(fromUser.id);
|
||||||
avatarImageView.setImage(photo, "50_50", placeHolderId);
|
avatarImageView.setImage(photo, "50_50", placeHolderId);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type != 12 && type != 13 && nameTextView != null && fromUser != null && type != 8 && type != 9) {
|
if (type != 12 && type != 13 && nameTextView != null && fromUser != null && type != 8 && type != 9) {
|
||||||
nameTextView.setText(Utilities.formatName(fromUser.first_name, fromUser.last_name));
|
nameTextView.setText(ContactsController.formatName(fromUser.first_name, fromUser.last_name));
|
||||||
nameTextView.setTextColor(Utilities.getColorForId(message.messageOwner.from_id));
|
nameTextView.setTextColor(AndroidUtilities.getColorForId(message.messageOwner.from_id));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type == 11 || type == 10) {
|
if (type == 11 || type == 10) {
|
||||||
int width = AndroidUtilities.displaySize.x - AndroidUtilities.dp(30);
|
int width = 0;
|
||||||
|
if (AndroidUtilities.isTablet()) {
|
||||||
|
int leftWidth = AndroidUtilities.displaySize.x / 100 * 35;
|
||||||
|
if (leftWidth < AndroidUtilities.dp(320)) {
|
||||||
|
leftWidth = AndroidUtilities.dp(320);
|
||||||
|
}
|
||||||
|
width = AndroidUtilities.displaySize.x - leftWidth - AndroidUtilities.dp(30);
|
||||||
|
} else {
|
||||||
|
width = AndroidUtilities.displaySize.x - AndroidUtilities.dp(30);
|
||||||
|
}
|
||||||
messageTextView.setText(message.messageText);
|
messageTextView.setText(message.messageText);
|
||||||
messageTextView.setMaxWidth(width);
|
messageTextView.setMaxWidth(width);
|
||||||
|
|
||||||
if (type == 11) {
|
if (type == 11) {
|
||||||
if (message.messageOwner.action instanceof TLRPC.TL_messageActionUserUpdatedPhoto) {
|
if (message.messageOwner.action instanceof TLRPC.TL_messageActionUserUpdatedPhoto) {
|
||||||
photoImage.setImage(message.messageOwner.action.newUserPhoto.photo_small, "50_50", Utilities.getUserAvatarForId(currentUser.id));
|
photoImage.setImage(message.messageOwner.action.newUserPhoto.photo_small, "50_50", AndroidUtilities.getUserAvatarForId(currentUser.id));
|
||||||
} else {
|
} else {
|
||||||
PhotoObject photo = PhotoObject.getClosestImageWithSize(message.photoThumbs, AndroidUtilities.dp(64), AndroidUtilities.dp(64));
|
PhotoObject photo = PhotoObject.getClosestImageWithSize(message.photoThumbs, AndroidUtilities.dp(64), AndroidUtilities.dp(64));
|
||||||
if (photo != null) {
|
if (photo != null) {
|
||||||
if (photo.image != null) {
|
if (photo.image != null) {
|
||||||
photoImage.setImageBitmap(photo.image);
|
photoImage.setImageBitmap(photo.image);
|
||||||
} else {
|
} else {
|
||||||
photoImage.setImage(photo.photoOwner.location, "50_50", Utilities.getGroupAvatarForId(currentChat.id));
|
photoImage.setImage(photo.photoOwner.location, "50_50", AndroidUtilities.getGroupAvatarForId(currentChat.id));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
photoImage.setImageResource(Utilities.getGroupAvatarForId(currentChat.id));
|
photoImage.setImageResource(AndroidUtilities.getGroupAvatarForId(currentChat.id));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
photoImage.imageReceiver.setVisible(!PhotoViewer.getInstance().isShowingImage(message), false);
|
photoImage.imageReceiver.setVisible(!PhotoViewer.getInstance().isShowingImage(message), false);
|
||||||
|
@ -3474,8 +3508,8 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
} else if (type == 12 || type == 13) {
|
} else if (type == 12 || type == 13) {
|
||||||
TLRPC.User contactUser = MessagesController.getInstance().getUser(message.messageOwner.media.user_id);
|
TLRPC.User contactUser = MessagesController.getInstance().getUser(message.messageOwner.media.user_id);
|
||||||
if (contactUser != null) {
|
if (contactUser != null) {
|
||||||
nameTextView.setText(Utilities.formatName(message.messageOwner.media.first_name, message.messageOwner.media.last_name));
|
nameTextView.setText(ContactsController.formatName(message.messageOwner.media.first_name, message.messageOwner.media.last_name));
|
||||||
nameTextView.setTextColor(Utilities.getColorForId(contactUser.id));
|
nameTextView.setTextColor(AndroidUtilities.getColorForId(contactUser.id));
|
||||||
String phone = message.messageOwner.media.phone_number;
|
String phone = message.messageOwner.media.phone_number;
|
||||||
if (phone != null && phone.length() != 0) {
|
if (phone != null && phone.length() != 0) {
|
||||||
if (!phone.startsWith("+")) {
|
if (!phone.startsWith("+")) {
|
||||||
|
@ -3489,7 +3523,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
if (contactUser.photo != null) {
|
if (contactUser.photo != null) {
|
||||||
photo = contactUser.photo.photo_small;
|
photo = contactUser.photo.photo_small;
|
||||||
}
|
}
|
||||||
int placeHolderId = Utilities.getUserAvatarForId(contactUser.id);
|
int placeHolderId = AndroidUtilities.getUserAvatarForId(contactUser.id);
|
||||||
contactAvatar.setImage(photo, "50_50", placeHolderId);
|
contactAvatar.setImage(photo, "50_50", placeHolderId);
|
||||||
if (contactUser.id != UserConfig.getClientUserId() && ContactsController.getInstance().contactsDict.get(contactUser.id) == null) {
|
if (contactUser.id != UserConfig.getClientUserId() && ContactsController.getInstance().contactsDict.get(contactUser.id) == null) {
|
||||||
addContactView.setVisibility(View.VISIBLE);
|
addContactView.setVisibility(View.VISIBLE);
|
||||||
|
@ -3497,8 +3531,8 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
addContactView.setVisibility(View.GONE);
|
addContactView.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
nameTextView.setText(Utilities.formatName(message.messageOwner.media.first_name, message.messageOwner.media.last_name));
|
nameTextView.setText(ContactsController.formatName(message.messageOwner.media.first_name, message.messageOwner.media.last_name));
|
||||||
nameTextView.setTextColor(Utilities.getColorForId(message.messageOwner.media.user_id));
|
nameTextView.setTextColor(AndroidUtilities.getColorForId(message.messageOwner.media.user_id));
|
||||||
String phone = message.messageOwner.media.phone_number;
|
String phone = message.messageOwner.media.phone_number;
|
||||||
if (phone != null && phone.length() != 0) {
|
if (phone != null && phone.length() != 0) {
|
||||||
if (message.messageOwner.media.user_id != 0 && !phone.startsWith("+")) {
|
if (message.messageOwner.media.user_id != 0 && !phone.startsWith("+")) {
|
||||||
|
@ -3508,7 +3542,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
} else {
|
} else {
|
||||||
phoneTextView.setText("Unknown");
|
phoneTextView.setText("Unknown");
|
||||||
}
|
}
|
||||||
contactAvatar.setImageResource(Utilities.getUserAvatarForId(message.messageOwner.media.user_id));
|
contactAvatar.setImageResource(AndroidUtilities.getUserAvatarForId(message.messageOwner.media.user_id));
|
||||||
addContactView.setVisibility(View.GONE);
|
addContactView.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
} else if (type == 6) {
|
} else if (type == 6) {
|
||||||
|
@ -3632,8 +3666,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
FileLog.e("tmessages", e);
|
FileLog.e("tmessages", e);
|
||||||
}
|
}
|
||||||
} else if (i == 0) {
|
} else if (i == 0) {
|
||||||
int sdk = android.os.Build.VERSION.SDK_INT;
|
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
|
||||||
if (sdk < android.os.Build.VERSION_CODES.HONEYCOMB) {
|
|
||||||
android.text.ClipboardManager clipboard = (android.text.ClipboardManager) ApplicationLoader.applicationContext.getSystemService(Context.CLIPBOARD_SERVICE);
|
android.text.ClipboardManager clipboard = (android.text.ClipboardManager) ApplicationLoader.applicationContext.getSystemService(Context.CLIPBOARD_SERVICE);
|
||||||
clipboard.setText(message.messageOwner.media.phone_number);
|
clipboard.setText(message.messageOwner.media.phone_number);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -641,7 +641,7 @@ public class ChatProfileActivity extends BaseFragment implements NotificationCen
|
||||||
photo = chat.photo.photo_small;
|
photo = chat.photo.photo_small;
|
||||||
photoBig = chat.photo.photo_big;
|
photoBig = chat.photo.photo_big;
|
||||||
}
|
}
|
||||||
avatarImage.setImage(photo, "50_50", Utilities.getGroupAvatarForId(chat.id));
|
avatarImage.setImage(photo, "50_50", chat_id > 0 ? AndroidUtilities.getGroupAvatarForId(chat.id) : AndroidUtilities.getBroadcastAvatarForId(chat.id));
|
||||||
avatarImage.imageReceiver.setVisible(!PhotoViewer.getInstance().isShowingImage(photoBig), false);
|
avatarImage.imageReceiver.setVisible(!PhotoViewer.getInstance().isShowingImage(photoBig), false);
|
||||||
return view;
|
return view;
|
||||||
} else if (type == 1) {
|
} else if (type == 1) {
|
||||||
|
|
|
@ -29,7 +29,6 @@ import org.telegram.messenger.TLRPC;
|
||||||
import org.telegram.android.MessagesController;
|
import org.telegram.android.MessagesController;
|
||||||
import org.telegram.android.NotificationCenter;
|
import org.telegram.android.NotificationCenter;
|
||||||
import org.telegram.messenger.R;
|
import org.telegram.messenger.R;
|
||||||
import org.telegram.messenger.Utilities;
|
|
||||||
import org.telegram.ui.Views.BackupImageView;
|
import org.telegram.ui.Views.BackupImageView;
|
||||||
import org.telegram.ui.Views.ActionBar.BaseFragment;
|
import org.telegram.ui.Views.ActionBar.BaseFragment;
|
||||||
|
|
||||||
|
@ -165,7 +164,7 @@ public class ContactAddActivity extends BaseFragment implements NotificationCent
|
||||||
if (user.photo != null) {
|
if (user.photo != null) {
|
||||||
photo = user.photo.photo_small;
|
photo = user.photo.photo_small;
|
||||||
}
|
}
|
||||||
avatarImage.setImage(photo, "50_50", Utilities.getUserAvatarForId(user.id));
|
avatarImage.setImage(photo, "50_50", AndroidUtilities.getUserAvatarForId(user.id));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void didReceivedNotification(int id, Object... args) {
|
public void didReceivedNotification(int id, Object... args) {
|
||||||
|
|
|
@ -349,7 +349,7 @@ public class ContactsActivity extends BaseFragment implements NotificationCenter
|
||||||
}
|
}
|
||||||
AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
|
AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
|
||||||
builder.setTitle(LocaleController.getString("AppName", R.string.AppName));
|
builder.setTitle(LocaleController.getString("AppName", R.string.AppName));
|
||||||
builder.setMessage(LocaleController.formatStringSimple(selectAlertString, Utilities.formatName(user.first_name, user.last_name)));
|
builder.setMessage(LocaleController.formatStringSimple(selectAlertString, ContactsController.formatName(user.first_name, user.last_name)));
|
||||||
final EditText editText = new EditText(getParentActivity());
|
final EditText editText = new EditText(getParentActivity());
|
||||||
if (android.os.Build.VERSION.SDK_INT < 11) {
|
if (android.os.Build.VERSION.SDK_INT < 11) {
|
||||||
editText.setBackgroundResource(android.R.drawable.editbox_background_normal);
|
editText.setBackgroundResource(android.R.drawable.editbox_background_normal);
|
||||||
|
|
|
@ -332,7 +332,7 @@ public class GroupCreateActivity extends BaseFragment implements NotificationCen
|
||||||
LayoutInflater lf = (LayoutInflater)ApplicationLoader.applicationContext.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
|
LayoutInflater lf = (LayoutInflater)ApplicationLoader.applicationContext.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
|
||||||
View textView = lf.inflate(R.layout.group_create_bubble, null);
|
View textView = lf.inflate(R.layout.group_create_bubble, null);
|
||||||
TextView text = (TextView)textView.findViewById(R.id.bubble_text_view);
|
TextView text = (TextView)textView.findViewById(R.id.bubble_text_view);
|
||||||
String name = Utilities.formatName(user.first_name, user.last_name);
|
String name = ContactsController.formatName(user.first_name, user.last_name);
|
||||||
if (name.length() == 0 && user.phone != null && user.phone.length() != 0) {
|
if (name.length() == 0 && user.phone != null && user.phone.length() != 0) {
|
||||||
name = PhoneFormat.getInstance().format("+" + user.phone);
|
name = PhoneFormat.getInstance().format("+" + user.phone);
|
||||||
}
|
}
|
||||||
|
@ -539,7 +539,7 @@ public class GroupCreateActivity extends BaseFragment implements NotificationCen
|
||||||
if (searchWas && searching) {
|
if (searchWas && searching) {
|
||||||
holder.nameTextView.setText(searchResultNames.get(position));
|
holder.nameTextView.setText(searchResultNames.get(position));
|
||||||
} else {
|
} else {
|
||||||
String name = Utilities.formatName(user.first_name, user.last_name);
|
String name = ContactsController.formatName(user.first_name, user.last_name);
|
||||||
if (name.length() == 0) {
|
if (name.length() == 0) {
|
||||||
if (user.phone != null && user.phone.length() != 0) {
|
if (user.phone != null && user.phone.length() != 0) {
|
||||||
name = PhoneFormat.getInstance().format("+" + user.phone);
|
name = PhoneFormat.getInstance().format("+" + user.phone);
|
||||||
|
@ -554,7 +554,7 @@ public class GroupCreateActivity extends BaseFragment implements NotificationCen
|
||||||
if (user.photo != null) {
|
if (user.photo != null) {
|
||||||
photo = user.photo.photo_small;
|
photo = user.photo.photo_small;
|
||||||
}
|
}
|
||||||
int placeHolderId = Utilities.getUserAvatarForId(user.id);
|
int placeHolderId = AndroidUtilities.getUserAvatarForId(user.id);
|
||||||
holder.avatarImage.setImage(photo, "50_50", placeHolderId);
|
holder.avatarImage.setImage(photo, "50_50", placeHolderId);
|
||||||
|
|
||||||
holder.messageTextView.setText(LocaleController.formatUserStatus(user));
|
holder.messageTextView.setText(LocaleController.formatUserStatus(user));
|
||||||
|
|
|
@ -10,6 +10,7 @@ package org.telegram.ui;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.content.pm.ActivityInfo;
|
||||||
import android.database.DataSetObserver;
|
import android.database.DataSetObserver;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Parcelable;
|
import android.os.Parcelable;
|
||||||
|
@ -24,6 +25,7 @@ import android.view.animation.AnimationUtils;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import org.telegram.android.AndroidUtilities;
|
||||||
import org.telegram.android.LocaleController;
|
import org.telegram.android.LocaleController;
|
||||||
import org.telegram.messenger.R;
|
import org.telegram.messenger.R;
|
||||||
import org.telegram.messenger.Utilities;
|
import org.telegram.messenger.Utilities;
|
||||||
|
@ -46,7 +48,12 @@ public class IntroActivity extends Activity {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
requestWindowFeature(Window.FEATURE_NO_TITLE);
|
requestWindowFeature(Window.FEATURE_NO_TITLE);
|
||||||
|
|
||||||
|
if (AndroidUtilities.isTablet()) {
|
||||||
|
setContentView(R.layout.intro_layout_tablet);
|
||||||
|
} else {
|
||||||
|
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
|
||||||
setContentView(R.layout.intro_layout);
|
setContentView(R.layout.intro_layout);
|
||||||
|
}
|
||||||
|
|
||||||
if (LocaleController.isRTL) {
|
if (LocaleController.isRTL) {
|
||||||
icons = new int[] {
|
icons = new int[] {
|
||||||
|
|
|
@ -125,7 +125,7 @@ public class LanguageSelectActivity extends BaseFragment {
|
||||||
}
|
}
|
||||||
if (localeInfo != null) {
|
if (localeInfo != null) {
|
||||||
LocaleController.getInstance().applyLanguage(localeInfo, true);
|
LocaleController.getInstance().applyLanguage(localeInfo, true);
|
||||||
getParentActivity().rebuildAllFragmentViews();
|
parentLayout.rebuildAllFragmentViews(false);
|
||||||
}
|
}
|
||||||
finishFragment();
|
finishFragment();
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,15 +8,25 @@
|
||||||
|
|
||||||
package org.telegram.ui;
|
package org.telegram.ui;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
import android.content.ContentResolver;
|
import android.content.ContentResolver;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Parcelable;
|
import android.os.Parcelable;
|
||||||
import android.provider.ContactsContract;
|
import android.provider.ContactsContract;
|
||||||
|
import android.view.ActionMode;
|
||||||
|
import android.view.MotionEvent;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.view.ViewTreeObserver;
|
||||||
|
import android.view.Window;
|
||||||
|
import android.widget.FrameLayout;
|
||||||
|
import android.widget.LinearLayout;
|
||||||
|
import android.widget.RelativeLayout;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
@ -31,7 +41,7 @@ import org.telegram.messenger.R;
|
||||||
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.Views.ActionBar.ActionBarActivity;
|
import org.telegram.ui.Views.ActionBar.ActionBarLayout;
|
||||||
import org.telegram.ui.Views.ActionBar.BaseFragment;
|
import org.telegram.ui.Views.ActionBar.BaseFragment;
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
|
@ -40,7 +50,7 @@ import java.io.InputStreamReader;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class LaunchActivity extends ActionBarActivity implements NotificationCenter.NotificationCenterDelegate, MessagesActivity.MessagesActivityDelegate {
|
public class LaunchActivity extends Activity implements ActionBarLayout.ActionBarLayoutDelegate, NotificationCenter.NotificationCenterDelegate, MessagesActivity.MessagesActivityDelegate {
|
||||||
private boolean finished = false;
|
private boolean finished = false;
|
||||||
private String videoPath = null;
|
private String videoPath = null;
|
||||||
private String sendingText = null;
|
private String sendingText = null;
|
||||||
|
@ -49,6 +59,16 @@ public class LaunchActivity extends ActionBarActivity implements NotificationCen
|
||||||
private ArrayList<String> documentsOriginalPathsArray = null;
|
private ArrayList<String> documentsOriginalPathsArray = null;
|
||||||
private ArrayList<TLRPC.User> contactsToSend = null;
|
private ArrayList<TLRPC.User> contactsToSend = null;
|
||||||
private int currentConnectionState;
|
private int currentConnectionState;
|
||||||
|
private static ArrayList<BaseFragment> mainFragmentsStack = new ArrayList<BaseFragment>();
|
||||||
|
private static ArrayList<BaseFragment> layerFragmentsStack = new ArrayList<BaseFragment>();
|
||||||
|
private static ArrayList<BaseFragment> rightFragmentsStack = new ArrayList<BaseFragment>();
|
||||||
|
|
||||||
|
private ActionBarLayout actionBarLayout = null;
|
||||||
|
private ActionBarLayout layersActionBarLayout = null;
|
||||||
|
private ActionBarLayout rightActionBarLayout = null;
|
||||||
|
private FrameLayout shadowTablet = null;
|
||||||
|
private LinearLayout buttonLayoutTablet = null;
|
||||||
|
private FrameLayout shadowTabletSide = null;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
@ -57,7 +77,7 @@ public class LaunchActivity extends ActionBarActivity implements NotificationCen
|
||||||
if (!UserConfig.isClientActivated()) {
|
if (!UserConfig.isClientActivated()) {
|
||||||
Intent intent = getIntent();
|
Intent intent = getIntent();
|
||||||
if (intent != null && intent.getAction() != null && (Intent.ACTION_SEND.equals(intent.getAction()) || intent.getAction().equals(Intent.ACTION_SEND_MULTIPLE))) {
|
if (intent != null && intent.getAction() != null && (Intent.ACTION_SEND.equals(intent.getAction()) || intent.getAction().equals(Intent.ACTION_SEND_MULTIPLE))) {
|
||||||
super.onCreateFinish(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
finish();
|
finish();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -67,15 +87,123 @@ public class LaunchActivity extends ActionBarActivity implements NotificationCen
|
||||||
if (state.isEmpty()) {
|
if (state.isEmpty()) {
|
||||||
Intent intent2 = new Intent(this, IntroActivity.class);
|
Intent intent2 = new Intent(this, IntroActivity.class);
|
||||||
startActivity(intent2);
|
startActivity(intent2);
|
||||||
super.onCreateFinish(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
finish();
|
finish();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
requestWindowFeature(Window.FEATURE_NO_TITLE);
|
||||||
|
setTheme(R.style.Theme_TMessages);
|
||||||
|
getWindow().setBackgroundDrawableResource(R.drawable.transparent);
|
||||||
|
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
|
actionBarLayout = new ActionBarLayout(this);
|
||||||
|
if (AndroidUtilities.isTablet()) {
|
||||||
|
setContentView(R.layout.launch_layout_tablet);
|
||||||
|
shadowTablet = (FrameLayout)findViewById(R.id.shadow_tablet);
|
||||||
|
buttonLayoutTablet = (LinearLayout)findViewById(R.id.launch_button_layout);
|
||||||
|
shadowTabletSide = (FrameLayout)findViewById(R.id.shadow_tablet_side);
|
||||||
|
|
||||||
|
shadowTablet.setOnTouchListener(new View.OnTouchListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onTouch(View v, MotionEvent event) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
RelativeLayout launchLayout = (RelativeLayout)findViewById(R.id.launch_layout);
|
||||||
|
|
||||||
|
layersActionBarLayout = new ActionBarLayout(this);
|
||||||
|
layersActionBarLayout.setBackgroundView(shadowTablet);
|
||||||
|
layersActionBarLayout.setUseAlphaAnimations(true);
|
||||||
|
layersActionBarLayout.setBackgroundResource(R.drawable.boxshadow);
|
||||||
|
launchLayout.addView(layersActionBarLayout);
|
||||||
|
RelativeLayout.LayoutParams relativeLayoutParams = (RelativeLayout.LayoutParams)layersActionBarLayout.getLayoutParams();
|
||||||
|
relativeLayoutParams.width = AndroidUtilities.dp(498);
|
||||||
|
relativeLayoutParams.height = AndroidUtilities.dp(528);
|
||||||
|
relativeLayoutParams.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE);
|
||||||
|
layersActionBarLayout.setLayoutParams(relativeLayoutParams);
|
||||||
|
layersActionBarLayout.init(layerFragmentsStack);
|
||||||
|
layersActionBarLayout.setDelegate(this);
|
||||||
|
layersActionBarLayout.setVisibility(View.GONE);
|
||||||
|
|
||||||
|
launchLayout.addView(actionBarLayout, 2);
|
||||||
|
relativeLayoutParams = (RelativeLayout.LayoutParams)actionBarLayout.getLayoutParams();
|
||||||
|
relativeLayoutParams.width = AndroidUtilities.dp(320);
|
||||||
|
relativeLayoutParams.height = RelativeLayout.LayoutParams.MATCH_PARENT;
|
||||||
|
actionBarLayout.setLayoutParams(relativeLayoutParams);
|
||||||
|
|
||||||
|
rightActionBarLayout = new ActionBarLayout(this);
|
||||||
|
launchLayout.addView(rightActionBarLayout, 3);
|
||||||
|
relativeLayoutParams = (RelativeLayout.LayoutParams)rightActionBarLayout.getLayoutParams();
|
||||||
|
relativeLayoutParams.width = AndroidUtilities.dp(320);
|
||||||
|
relativeLayoutParams.height = RelativeLayout.LayoutParams.MATCH_PARENT;
|
||||||
|
rightActionBarLayout.setLayoutParams(relativeLayoutParams);
|
||||||
|
rightActionBarLayout.init(rightFragmentsStack);
|
||||||
|
rightActionBarLayout.setDelegate(this);
|
||||||
|
rightActionBarLayout.setVisibility(rightFragmentsStack.isEmpty() ? View.GONE : View.VISIBLE);
|
||||||
|
buttonLayoutTablet.setVisibility(rightFragmentsStack.isEmpty() ? View.VISIBLE : View.GONE);
|
||||||
|
|
||||||
|
TextView button = (TextView)findViewById(R.id.new_group_button);
|
||||||
|
button.setText(LocaleController.getString("NewGroup", R.string.NewGroup));
|
||||||
|
button.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
presentFragment(new GroupCreateActivity());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
button = (TextView)findViewById(R.id.new_secret_button);
|
||||||
|
button.setText(LocaleController.getString("NewSecretChat", R.string.NewSecretChat));
|
||||||
|
button.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
Bundle args = new Bundle();
|
||||||
|
args.putBoolean("onlyUsers", true);
|
||||||
|
args.putBoolean("destroyAfterSelect", true);
|
||||||
|
args.putBoolean("usersAsSections", true);
|
||||||
|
args.putBoolean("createSecretChat", true);
|
||||||
|
presentFragment(new ContactsActivity(args));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
button = (TextView)findViewById(R.id.new_broadcast_button);
|
||||||
|
button.setText(LocaleController.getString("NewBroadcastList", R.string.NewBroadcastList));
|
||||||
|
button.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
Bundle args = new Bundle();
|
||||||
|
args.putBoolean("broadcast", true);
|
||||||
|
presentFragment(new GroupCreateActivity(args));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
button = (TextView)findViewById(R.id.contacts_button);
|
||||||
|
button.setText(LocaleController.getString("Contacts", R.string.Contacts));
|
||||||
|
button.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
presentFragment(new ContactsActivity(null));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
button = (TextView)findViewById(R.id.settings_button);
|
||||||
|
button.setText(LocaleController.getString("Settings", R.string.Settings));
|
||||||
|
button.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
presentFragment(new SettingsActivity());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
setContentView(actionBarLayout, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
|
||||||
|
}
|
||||||
|
actionBarLayout.init(mainFragmentsStack);
|
||||||
|
actionBarLayout.setDelegate(this);
|
||||||
|
|
||||||
int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
|
int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
|
||||||
if (resourceId > 0) {
|
if (resourceId > 0) {
|
||||||
AndroidUtilities.statusBarHeight = getResources().getDimensionPixelSize(resourceId);
|
AndroidUtilities.statusBarHeight = getResources().getDimensionPixelSize(resourceId);
|
||||||
|
@ -88,11 +216,11 @@ public class LaunchActivity extends ActionBarActivity implements NotificationCen
|
||||||
NotificationCenter.getInstance().addObserver(this, NotificationCenter.closeOtherAppActivities);
|
NotificationCenter.getInstance().addObserver(this, NotificationCenter.closeOtherAppActivities);
|
||||||
NotificationCenter.getInstance().addObserver(this, NotificationCenter.didUpdatedConnectionState);
|
NotificationCenter.getInstance().addObserver(this, NotificationCenter.didUpdatedConnectionState);
|
||||||
|
|
||||||
if (fragmentsStack.isEmpty()) {
|
if (actionBarLayout.fragmentsStack.isEmpty()) {
|
||||||
if (!UserConfig.isClientActivated()) {
|
if (!UserConfig.isClientActivated()) {
|
||||||
addFragmentToStack(new LoginActivity());
|
actionBarLayout.addFragmentToStack(new LoginActivity());
|
||||||
} else {
|
} else {
|
||||||
addFragmentToStack(new MessagesActivity(null));
|
actionBarLayout.addFragmentToStack(new MessagesActivity(null));
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -103,31 +231,31 @@ public class LaunchActivity extends ActionBarActivity implements NotificationCen
|
||||||
if (fragmentName.equals("chat")) {
|
if (fragmentName.equals("chat")) {
|
||||||
if (args != null) {
|
if (args != null) {
|
||||||
ChatActivity chat = new ChatActivity(args);
|
ChatActivity chat = new ChatActivity(args);
|
||||||
if (addFragmentToStack(chat)) {
|
if (actionBarLayout.addFragmentToStack(chat)) {
|
||||||
chat.restoreSelfArgs(savedInstanceState);
|
chat.restoreSelfArgs(savedInstanceState);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (fragmentName.equals("settings")) {
|
} else if (fragmentName.equals("settings")) {
|
||||||
SettingsActivity settings = new SettingsActivity();
|
SettingsActivity settings = new SettingsActivity();
|
||||||
addFragmentToStack(settings);
|
actionBarLayout.addFragmentToStack(settings);
|
||||||
settings.restoreSelfArgs(savedInstanceState);
|
settings.restoreSelfArgs(savedInstanceState);
|
||||||
} else if (fragmentName.equals("group")) {
|
} else if (fragmentName.equals("group")) {
|
||||||
if (args != null) {
|
if (args != null) {
|
||||||
GroupCreateFinalActivity group = new GroupCreateFinalActivity(args);
|
GroupCreateFinalActivity group = new GroupCreateFinalActivity(args);
|
||||||
if (addFragmentToStack(group)) {
|
if (actionBarLayout.addFragmentToStack(group)) {
|
||||||
group.restoreSelfArgs(savedInstanceState);
|
group.restoreSelfArgs(savedInstanceState);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (fragmentName.equals("chat_profile")) {
|
} else if (fragmentName.equals("chat_profile")) {
|
||||||
if (args != null) {
|
if (args != null) {
|
||||||
ChatProfileActivity profile = new ChatProfileActivity(args);
|
ChatProfileActivity profile = new ChatProfileActivity(args);
|
||||||
if (addFragmentToStack(profile)) {
|
if (actionBarLayout.addFragmentToStack(profile)) {
|
||||||
profile.restoreSelfArgs(savedInstanceState);
|
profile.restoreSelfArgs(savedInstanceState);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (fragmentName.equals("wallpapers")) {
|
} else if (fragmentName.equals("wallpapers")) {
|
||||||
SettingsWallpapersActivity settings = new SettingsWallpapersActivity();
|
SettingsWallpapersActivity settings = new SettingsWallpapersActivity();
|
||||||
addFragmentToStack(settings);
|
actionBarLayout.addFragmentToStack(settings);
|
||||||
settings.restoreSelfArgs(savedInstanceState);
|
settings.restoreSelfArgs(savedInstanceState);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -138,6 +266,7 @@ public class LaunchActivity extends ActionBarActivity implements NotificationCen
|
||||||
}
|
}
|
||||||
|
|
||||||
handleIntent(getIntent(), false, savedInstanceState != null);
|
handleIntent(getIntent(), false, savedInstanceState != null);
|
||||||
|
needLayout();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleIntent(Intent intent, boolean isNew, boolean restore) {
|
private void handleIntent(Intent intent, boolean isNew, boolean restore) {
|
||||||
|
@ -382,7 +511,7 @@ public class LaunchActivity extends ActionBarActivity implements NotificationCen
|
||||||
Bundle args = new Bundle();
|
Bundle args = new Bundle();
|
||||||
args.putInt("user_id", push_user_id);
|
args.putInt("user_id", push_user_id);
|
||||||
ChatActivity fragment = new ChatActivity(args);
|
ChatActivity fragment = new ChatActivity(args);
|
||||||
if (presentFragment(fragment, false, true)) {
|
if (actionBarLayout.presentFragment(fragment, false, true)) {
|
||||||
pushOpened = true;
|
pushOpened = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -390,19 +519,19 @@ public class LaunchActivity extends ActionBarActivity implements NotificationCen
|
||||||
Bundle args = new Bundle();
|
Bundle args = new Bundle();
|
||||||
args.putInt("chat_id", push_chat_id);
|
args.putInt("chat_id", push_chat_id);
|
||||||
ChatActivity fragment = new ChatActivity(args);
|
ChatActivity fragment = new ChatActivity(args);
|
||||||
if (presentFragment(fragment, false, true)) {
|
if (actionBarLayout.presentFragment(fragment, false, true)) {
|
||||||
pushOpened = true;
|
pushOpened = true;
|
||||||
}
|
}
|
||||||
} else if (push_enc_id != 0) {
|
} else if (push_enc_id != 0) {
|
||||||
Bundle args = new Bundle();
|
Bundle args = new Bundle();
|
||||||
args.putInt("enc_id", push_enc_id);
|
args.putInt("enc_id", push_enc_id);
|
||||||
ChatActivity fragment = new ChatActivity(args);
|
ChatActivity fragment = new ChatActivity(args);
|
||||||
if (presentFragment(fragment, false, true)) {
|
if (actionBarLayout.presentFragment(fragment, false, true)) {
|
||||||
pushOpened = true;
|
pushOpened = true;
|
||||||
}
|
}
|
||||||
} else if (showDialogsList) {
|
} else if (showDialogsList) {
|
||||||
for (int a = 1; a < fragmentsStack.size(); a++) {
|
for (int a = 1; a < actionBarLayout.fragmentsStack.size(); a++) {
|
||||||
removeFragmentFromStack(fragmentsStack.get(a));
|
actionBarLayout.removeFragmentFromStack(actionBarLayout.fragmentsStack.get(a));
|
||||||
a--;
|
a--;
|
||||||
}
|
}
|
||||||
pushOpened = false;
|
pushOpened = false;
|
||||||
|
@ -415,25 +544,29 @@ public class LaunchActivity extends ActionBarActivity implements NotificationCen
|
||||||
args.putString("selectAlertString", LocaleController.getString("SendMessagesTo", R.string.SendMessagesTo));
|
args.putString("selectAlertString", LocaleController.getString("SendMessagesTo", R.string.SendMessagesTo));
|
||||||
MessagesActivity fragment = new MessagesActivity(args);
|
MessagesActivity fragment = new MessagesActivity(args);
|
||||||
fragment.setDelegate(this);
|
fragment.setDelegate(this);
|
||||||
presentFragment(fragment, false, true);
|
actionBarLayout.presentFragment(fragment, false, true);
|
||||||
pushOpened = true;
|
pushOpened = true;
|
||||||
if (PhotoViewer.getInstance().isVisible()) {
|
if (PhotoViewer.getInstance().isVisible()) {
|
||||||
PhotoViewer.getInstance().closePhoto(true);
|
PhotoViewer.getInstance().closePhoto(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (open_settings != 0) {
|
if (open_settings != 0) {
|
||||||
presentFragment(new SettingsActivity(), false, true);
|
actionBarLayout.presentFragment(new SettingsActivity(), false, true);
|
||||||
pushOpened = true;
|
pushOpened = true;
|
||||||
}
|
}
|
||||||
if (!pushOpened && !isNew) {
|
if (!pushOpened && !isNew) {
|
||||||
if (fragmentsStack.isEmpty()) {
|
if (actionBarLayout.fragmentsStack.isEmpty()) {
|
||||||
if (!UserConfig.isClientActivated()) {
|
if (!UserConfig.isClientActivated()) {
|
||||||
addFragmentToStack(new LoginActivity());
|
actionBarLayout.addFragmentToStack(new LoginActivity());
|
||||||
} else {
|
} else {
|
||||||
addFragmentToStack(new MessagesActivity(null));
|
actionBarLayout.addFragmentToStack(new MessagesActivity(null));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
showLastFragment();
|
actionBarLayout.showLastFragment();
|
||||||
|
if (AndroidUtilities.isTablet()) {
|
||||||
|
layersActionBarLayout.showLastFragment();
|
||||||
|
rightActionBarLayout.showLastFragment();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
intent.setAction(null);
|
intent.setAction(null);
|
||||||
|
@ -468,7 +601,7 @@ public class LaunchActivity extends ActionBarActivity implements NotificationCen
|
||||||
args.putInt("enc_id", high_id);
|
args.putInt("enc_id", high_id);
|
||||||
}
|
}
|
||||||
ChatActivity fragment = new ChatActivity(args);
|
ChatActivity fragment = new ChatActivity(args);
|
||||||
presentFragment(fragment, true);
|
actionBarLayout.presentFragment(fragment, true);
|
||||||
if (videoPath != null) {
|
if (videoPath != null) {
|
||||||
fragment.processSendingVideo(videoPath, null, 0, 0, 0, 0);
|
fragment.processSendingVideo(videoPath, null, 0, 0, 0, 0);
|
||||||
}
|
}
|
||||||
|
@ -496,18 +629,98 @@ public class LaunchActivity extends ActionBarActivity implements NotificationCen
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void onFinish() {
|
||||||
|
if (finished) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
finished = true;
|
||||||
|
NotificationCenter.getInstance().removeObserver(this, NotificationCenter.appDidLogout);
|
||||||
|
NotificationCenter.getInstance().removeObserver(this, NotificationCenter.closeOtherAppActivities);
|
||||||
|
NotificationCenter.getInstance().removeObserver(this, NotificationCenter.didUpdatedConnectionState);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void presentFragment(BaseFragment fragment) {
|
||||||
|
actionBarLayout.presentFragment(fragment);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean presentFragment(final BaseFragment fragment, final boolean removeLast, boolean forceWithoutAnimation) {
|
||||||
|
return actionBarLayout.presentFragment(fragment, removeLast, forceWithoutAnimation);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void needLayout() {
|
||||||
|
if (AndroidUtilities.isTablet()) {
|
||||||
|
int leftWidth = AndroidUtilities.displaySize.x / 100 * 35;
|
||||||
|
if (leftWidth < AndroidUtilities.dp(320)) {
|
||||||
|
leftWidth = AndroidUtilities.dp(320);
|
||||||
|
}
|
||||||
|
|
||||||
|
RelativeLayout.LayoutParams relativeLayoutParams = (RelativeLayout.LayoutParams) actionBarLayout.getLayoutParams();
|
||||||
|
relativeLayoutParams.width = leftWidth;
|
||||||
|
relativeLayoutParams.height = RelativeLayout.LayoutParams.MATCH_PARENT;
|
||||||
|
actionBarLayout.setLayoutParams(relativeLayoutParams);
|
||||||
|
|
||||||
|
relativeLayoutParams = (RelativeLayout.LayoutParams) shadowTabletSide.getLayoutParams();
|
||||||
|
relativeLayoutParams.leftMargin = leftWidth;
|
||||||
|
shadowTabletSide.setLayoutParams(relativeLayoutParams);
|
||||||
|
|
||||||
|
relativeLayoutParams = (RelativeLayout.LayoutParams) rightActionBarLayout.getLayoutParams();
|
||||||
|
relativeLayoutParams.width = AndroidUtilities.displaySize.x - leftWidth;
|
||||||
|
relativeLayoutParams.height = RelativeLayout.LayoutParams.MATCH_PARENT;
|
||||||
|
relativeLayoutParams.leftMargin = leftWidth;
|
||||||
|
rightActionBarLayout.setLayoutParams(relativeLayoutParams);
|
||||||
|
|
||||||
|
relativeLayoutParams = (RelativeLayout.LayoutParams) buttonLayoutTablet.getLayoutParams();
|
||||||
|
relativeLayoutParams.width = AndroidUtilities.displaySize.x - leftWidth;
|
||||||
|
relativeLayoutParams.height = RelativeLayout.LayoutParams.WRAP_CONTENT;
|
||||||
|
relativeLayoutParams.leftMargin = leftWidth;
|
||||||
|
buttonLayoutTablet.setLayoutParams(relativeLayoutParams);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void fixLayout() {
|
||||||
|
if (AndroidUtilities.isTablet()) {
|
||||||
|
final ViewTreeObserver obs = actionBarLayout.getViewTreeObserver();
|
||||||
|
obs.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
|
||||||
|
@Override
|
||||||
|
public void onGlobalLayout() {
|
||||||
|
needLayout();
|
||||||
|
if (Build.VERSION.SDK_INT < 16) {
|
||||||
|
obs.removeGlobalOnLayoutListener(this);
|
||||||
|
} else {
|
||||||
|
obs.removeOnGlobalLayoutListener(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||||
super.onActivityResult(requestCode, resultCode, data);
|
super.onActivityResult(requestCode, resultCode, data);
|
||||||
if (fragmentsStack.size() != 0) {
|
if (actionBarLayout.fragmentsStack.size() != 0) {
|
||||||
BaseFragment fragment = fragmentsStack.get(fragmentsStack.size() - 1);
|
BaseFragment fragment = actionBarLayout.fragmentsStack.get(actionBarLayout.fragmentsStack.size() - 1);
|
||||||
fragment.onActivityResultFragment(requestCode, resultCode, data);
|
fragment.onActivityResultFragment(requestCode, resultCode, data);
|
||||||
}
|
}
|
||||||
|
if (AndroidUtilities.isTablet()) {
|
||||||
|
if (rightActionBarLayout.fragmentsStack.size() != 0) {
|
||||||
|
BaseFragment fragment = rightActionBarLayout.fragmentsStack.get(rightActionBarLayout.fragmentsStack.size() - 1);
|
||||||
|
fragment.onActivityResultFragment(requestCode, resultCode, data);
|
||||||
|
}
|
||||||
|
if (layersActionBarLayout.fragmentsStack.size() != 0) {
|
||||||
|
BaseFragment fragment = layersActionBarLayout.fragmentsStack.get(layersActionBarLayout.fragmentsStack.size() - 1);
|
||||||
|
fragment.onActivityResultFragment(requestCode, resultCode, data);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onPause() {
|
protected void onPause() {
|
||||||
super.onPause();
|
super.onPause();
|
||||||
|
actionBarLayout.onPause();
|
||||||
|
if (AndroidUtilities.isTablet()) {
|
||||||
|
rightActionBarLayout.onPause();
|
||||||
|
layersActionBarLayout.onPause();
|
||||||
|
}
|
||||||
ApplicationLoader.mainInterfacePaused = true;
|
ApplicationLoader.mainInterfacePaused = true;
|
||||||
ConnectionsManager.getInstance().setAppPaused(true, false);
|
ConnectionsManager.getInstance().setAppPaused(true, false);
|
||||||
}
|
}
|
||||||
|
@ -522,38 +735,43 @@ public class LaunchActivity extends ActionBarActivity implements NotificationCen
|
||||||
@Override
|
@Override
|
||||||
protected void onResume() {
|
protected void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
|
actionBarLayout.onResume();
|
||||||
|
if (AndroidUtilities.isTablet()) {
|
||||||
|
rightActionBarLayout.onResume();
|
||||||
|
layersActionBarLayout.onResume();
|
||||||
|
}
|
||||||
Utilities.checkForCrashes(this);
|
Utilities.checkForCrashes(this);
|
||||||
Utilities.checkForUpdates(this);
|
Utilities.checkForUpdates(this);
|
||||||
ApplicationLoader.mainInterfacePaused = false;
|
ApplicationLoader.mainInterfacePaused = false;
|
||||||
ConnectionsManager.getInstance().setAppPaused(false, false);
|
ConnectionsManager.getInstance().setAppPaused(false, false);
|
||||||
actionBar.setBackOverlayVisible(currentConnectionState != 0);
|
actionBarLayout.getActionBar().setBackOverlayVisible(currentConnectionState != 0);
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onFinish() {
|
|
||||||
if (finished) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
finished = true;
|
|
||||||
NotificationCenter.getInstance().removeObserver(this, NotificationCenter.appDidLogout);
|
|
||||||
NotificationCenter.getInstance().removeObserver(this, NotificationCenter.closeOtherAppActivities);
|
|
||||||
NotificationCenter.getInstance().removeObserver(this, NotificationCenter.didUpdatedConnectionState);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onConfigurationChanged(android.content.res.Configuration newConfig) {
|
public void onConfigurationChanged(android.content.res.Configuration newConfig) {
|
||||||
super.onConfigurationChanged(newConfig);
|
|
||||||
AndroidUtilities.checkDisplaySize();
|
AndroidUtilities.checkDisplaySize();
|
||||||
|
super.onConfigurationChanged(newConfig);
|
||||||
|
fixLayout();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public void didReceivedNotification(int id, Object... args) {
|
public void didReceivedNotification(int id, Object... args) {
|
||||||
if (id == NotificationCenter.appDidLogout) {
|
if (id == NotificationCenter.appDidLogout) {
|
||||||
for (BaseFragment fragment : fragmentsStack) {
|
for (BaseFragment fragment : actionBarLayout.fragmentsStack) {
|
||||||
fragment.onFragmentDestroy();
|
fragment.onFragmentDestroy();
|
||||||
}
|
}
|
||||||
fragmentsStack.clear();
|
actionBarLayout.fragmentsStack.clear();
|
||||||
|
if (AndroidUtilities.isTablet()) {
|
||||||
|
for (BaseFragment fragment : layersActionBarLayout.fragmentsStack) {
|
||||||
|
fragment.onFragmentDestroy();
|
||||||
|
}
|
||||||
|
layersActionBarLayout.fragmentsStack.clear();
|
||||||
|
for (BaseFragment fragment : rightActionBarLayout.fragmentsStack) {
|
||||||
|
fragment.onFragmentDestroy();
|
||||||
|
}
|
||||||
|
rightActionBarLayout.fragmentsStack.clear();
|
||||||
|
}
|
||||||
Intent intent2 = new Intent(this, IntroActivity.class);
|
Intent intent2 = new Intent(this, IntroActivity.class);
|
||||||
startActivity(intent2);
|
startActivity(intent2);
|
||||||
onFinish();
|
onFinish();
|
||||||
|
@ -567,35 +785,17 @@ public class LaunchActivity extends ActionBarActivity implements NotificationCen
|
||||||
if (currentConnectionState != state) {
|
if (currentConnectionState != state) {
|
||||||
FileLog.e("tmessages", "switch to state " + state);
|
FileLog.e("tmessages", "switch to state " + state);
|
||||||
currentConnectionState = state;
|
currentConnectionState = state;
|
||||||
actionBar.setBackOverlayVisible(currentConnectionState != 0);
|
actionBarLayout.getActionBar().setBackOverlayVisible(currentConnectionState != 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onOverlayShow(View view, BaseFragment fragment) {
|
|
||||||
if (view == null || fragment == null || fragmentsStack.isEmpty()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
View backStatusButton = view.findViewById(R.id.back_button);
|
|
||||||
TextView statusText = (TextView)view.findViewById(R.id.status_text);
|
|
||||||
backStatusButton.setVisibility(fragmentsStack.get(0) == fragment ? View.GONE : View.VISIBLE);
|
|
||||||
view.setEnabled(fragmentsStack.get(0) != fragment);
|
|
||||||
if (currentConnectionState == 1) {
|
|
||||||
statusText.setText(LocaleController.getString("WaitingForNetwork", R.string.WaitingForNetwork));
|
|
||||||
} else if (currentConnectionState == 2) {
|
|
||||||
statusText.setText(LocaleController.getString("Connecting", R.string.Connecting));
|
|
||||||
} else if (currentConnectionState == 3) {
|
|
||||||
statusText.setText(LocaleController.getString("Updating", R.string.Updating));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onSaveInstanceState(Bundle outState) {
|
protected void onSaveInstanceState(Bundle outState) {
|
||||||
try {
|
try {
|
||||||
super.onSaveInstanceState(outState);
|
super.onSaveInstanceState(outState);
|
||||||
if (!fragmentsStack.isEmpty()) {
|
if (!actionBarLayout.fragmentsStack.isEmpty()) {
|
||||||
BaseFragment lastFragment = fragmentsStack.get(fragmentsStack.size() - 1);
|
BaseFragment lastFragment = actionBarLayout.fragmentsStack.get(actionBarLayout.fragmentsStack.size() - 1);
|
||||||
Bundle args = lastFragment.getArguments();
|
Bundle args = lastFragment.getArguments();
|
||||||
if (lastFragment instanceof ChatActivity && args != null) {
|
if (lastFragment instanceof ChatActivity && args != null) {
|
||||||
outState.putBundle("args", args);
|
outState.putBundle("args", args);
|
||||||
|
@ -623,7 +823,52 @@ public class LaunchActivity extends ActionBarActivity implements NotificationCen
|
||||||
if (PhotoViewer.getInstance().isVisible()) {
|
if (PhotoViewer.getInstance().isVisible()) {
|
||||||
PhotoViewer.getInstance().closePhoto(true);
|
PhotoViewer.getInstance().closePhoto(true);
|
||||||
} else {
|
} else {
|
||||||
super.onBackPressed();
|
if (AndroidUtilities.isTablet()) {
|
||||||
|
if (layersActionBarLayout.getVisibility() == View.VISIBLE) {
|
||||||
|
layersActionBarLayout.onBackPressed();
|
||||||
|
} else {
|
||||||
|
boolean cancel = false;
|
||||||
|
if (rightActionBarLayout.getVisibility() == View.VISIBLE && !rightActionBarLayout.fragmentsStack.isEmpty()) {
|
||||||
|
BaseFragment lastFragment = rightActionBarLayout.fragmentsStack.get(rightActionBarLayout.fragmentsStack.size() - 1);
|
||||||
|
cancel = !lastFragment.onBackPressed();
|
||||||
|
}
|
||||||
|
if (!cancel) {
|
||||||
|
actionBarLayout.onBackPressed();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
actionBarLayout.onBackPressed();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLowMemory() {
|
||||||
|
super.onLowMemory();
|
||||||
|
actionBarLayout.onLowMemory();
|
||||||
|
if (AndroidUtilities.isTablet()) {
|
||||||
|
rightActionBarLayout.onLowMemory();
|
||||||
|
layersActionBarLayout.onLowMemory();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onActionModeStarted(ActionMode mode) {
|
||||||
|
super.onActionModeStarted(mode);
|
||||||
|
actionBarLayout.onActionModeStarted(mode);
|
||||||
|
if (AndroidUtilities.isTablet()) {
|
||||||
|
rightActionBarLayout.onActionModeStarted(mode);
|
||||||
|
layersActionBarLayout.onActionModeStarted(mode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onActionModeFinished(ActionMode mode) {
|
||||||
|
super.onActionModeFinished(mode);
|
||||||
|
actionBarLayout.onActionModeFinished(mode);
|
||||||
|
if (AndroidUtilities.isTablet()) {
|
||||||
|
rightActionBarLayout.onActionModeFinished(mode);
|
||||||
|
layersActionBarLayout.onActionModeFinished(mode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -633,11 +878,150 @@ public class LaunchActivity extends ActionBarActivity implements NotificationCen
|
||||||
PhotoViewer.getInstance().closePhoto(true);
|
PhotoViewer.getInstance().closePhoto(true);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return super.onPreIme();
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLowMemory() {
|
public void onOverlayShow(View view, BaseFragment fragment) {
|
||||||
super.onLowMemory();
|
if (view == null || fragment == null || actionBarLayout.fragmentsStack.isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
View backStatusButton = view.findViewById(R.id.back_button);
|
||||||
|
TextView statusText = (TextView)view.findViewById(R.id.status_text);
|
||||||
|
backStatusButton.setVisibility(actionBarLayout.fragmentsStack.get(0) == fragment ? View.GONE : View.VISIBLE);
|
||||||
|
view.setEnabled(actionBarLayout.fragmentsStack.get(0) != fragment);
|
||||||
|
if (currentConnectionState == 1) {
|
||||||
|
statusText.setText(LocaleController.getString("WaitingForNetwork", R.string.WaitingForNetwork));
|
||||||
|
} else if (currentConnectionState == 2) {
|
||||||
|
statusText.setText(LocaleController.getString("Connecting", R.string.Connecting));
|
||||||
|
} else if (currentConnectionState == 3) {
|
||||||
|
statusText.setText(LocaleController.getString("Updating", R.string.Updating));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean needPresentFragment(BaseFragment fragment, boolean removeLast, boolean forceWithoutAnimation, ActionBarLayout layout) {
|
||||||
|
if (AndroidUtilities.isTablet()) {
|
||||||
|
if (fragment instanceof MessagesActivity) {
|
||||||
|
MessagesActivity messagesActivity = (MessagesActivity)fragment;
|
||||||
|
if (messagesActivity.getDelegate() == null && layout != actionBarLayout) {
|
||||||
|
actionBarLayout.removeAllFragments();
|
||||||
|
actionBarLayout.presentFragment(fragment, removeLast, forceWithoutAnimation);
|
||||||
|
layersActionBarLayout.removeAllFragments();
|
||||||
|
layersActionBarLayout.setVisibility(View.GONE);
|
||||||
|
if (rightFragmentsStack.isEmpty()) {
|
||||||
|
buttonLayoutTablet.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (fragment instanceof ChatActivity) {
|
||||||
|
if (layout != rightActionBarLayout) {
|
||||||
|
rightActionBarLayout.setVisibility(View.VISIBLE);
|
||||||
|
buttonLayoutTablet.setVisibility(View.GONE);
|
||||||
|
rightActionBarLayout.removeAllFragments();
|
||||||
|
rightActionBarLayout.presentFragment(fragment, removeLast, true);
|
||||||
|
if (removeLast) {
|
||||||
|
layout.closeLastFragment(true);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (layout != layersActionBarLayout) {
|
||||||
|
layersActionBarLayout.setVisibility(View.VISIBLE);
|
||||||
|
if (fragment instanceof LoginActivity) {
|
||||||
|
buttonLayoutTablet.setVisibility(View.GONE);
|
||||||
|
shadowTablet.setBackgroundColor(0x00000000);
|
||||||
|
} else {
|
||||||
|
shadowTablet.setBackgroundColor(0x7F000000);
|
||||||
|
}
|
||||||
|
layersActionBarLayout.presentFragment(fragment, removeLast, forceWithoutAnimation);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean needAddFragmentToStack(BaseFragment fragment, ActionBarLayout layout) {
|
||||||
|
if (AndroidUtilities.isTablet()) {
|
||||||
|
if (fragment instanceof MessagesActivity) {
|
||||||
|
MessagesActivity messagesActivity = (MessagesActivity)fragment;
|
||||||
|
if (messagesActivity.getDelegate() == null && layout != actionBarLayout) {
|
||||||
|
actionBarLayout.removeAllFragments();
|
||||||
|
actionBarLayout.addFragmentToStack(fragment);
|
||||||
|
layersActionBarLayout.removeAllFragments();
|
||||||
|
layersActionBarLayout.setVisibility(View.GONE);
|
||||||
|
if (rightFragmentsStack.isEmpty()) {
|
||||||
|
buttonLayoutTablet.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (fragment instanceof ChatActivity) {
|
||||||
|
if (layout != rightActionBarLayout) {
|
||||||
|
rightActionBarLayout.setVisibility(View.VISIBLE);
|
||||||
|
buttonLayoutTablet.setVisibility(View.GONE);
|
||||||
|
rightActionBarLayout.removeAllFragments();
|
||||||
|
rightActionBarLayout.addFragmentToStack(fragment);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (layout != layersActionBarLayout) {
|
||||||
|
layersActionBarLayout.setVisibility(View.VISIBLE);
|
||||||
|
if (fragment instanceof LoginActivity) {
|
||||||
|
buttonLayoutTablet.setVisibility(View.GONE);
|
||||||
|
shadowTablet.setBackgroundColor(0x00000000);
|
||||||
|
} else {
|
||||||
|
shadowTablet.setBackgroundColor(0x7F000000);
|
||||||
|
}
|
||||||
|
layersActionBarLayout.addFragmentToStack(fragment);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean needCloseLastFragment(ActionBarLayout layout) {
|
||||||
|
if (AndroidUtilities.isTablet()) {
|
||||||
|
if (layout == actionBarLayout && layout.fragmentsStack.size() <= 1) {
|
||||||
|
onFinish();
|
||||||
|
finish();
|
||||||
|
return false;
|
||||||
|
} else if (layout == rightActionBarLayout) {
|
||||||
|
buttonLayoutTablet.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (layout.fragmentsStack.size() <= 1) {
|
||||||
|
onFinish();
|
||||||
|
finish();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onRebuildAllFragments(ActionBarLayout layout) {
|
||||||
|
if (AndroidUtilities.isTablet()) {
|
||||||
|
if (layout == layersActionBarLayout) {
|
||||||
|
rightActionBarLayout.rebuildAllFragmentViews(true);
|
||||||
|
rightActionBarLayout.showLastFragment();
|
||||||
|
actionBarLayout.rebuildAllFragmentViews(true);
|
||||||
|
actionBarLayout.showLastFragment();
|
||||||
|
|
||||||
|
TextView button = (TextView)findViewById(R.id.new_group_button);
|
||||||
|
button.setText(LocaleController.getString("NewGroup", R.string.NewGroup));
|
||||||
|
button = (TextView)findViewById(R.id.new_secret_button);
|
||||||
|
button.setText(LocaleController.getString("NewSecretChat", R.string.NewSecretChat));
|
||||||
|
button = (TextView)findViewById(R.id.new_broadcast_button);
|
||||||
|
button.setText(LocaleController.getString("NewBroadcastList", R.string.NewBroadcastList));
|
||||||
|
button = (TextView)findViewById(R.id.contacts_button);
|
||||||
|
button.setText(LocaleController.getString("Contacts", R.string.Contacts));
|
||||||
|
button = (TextView)findViewById(R.id.settings_button);
|
||||||
|
button.setText(LocaleController.getString("Settings", R.string.Settings));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,6 +27,8 @@ import com.google.android.gms.maps.model.LatLng;
|
||||||
import com.google.android.gms.maps.model.Marker;
|
import com.google.android.gms.maps.model.Marker;
|
||||||
import com.google.android.gms.maps.model.MarkerOptions;
|
import com.google.android.gms.maps.model.MarkerOptions;
|
||||||
|
|
||||||
|
import org.telegram.android.AndroidUtilities;
|
||||||
|
import org.telegram.android.ContactsController;
|
||||||
import org.telegram.messenger.FileLog;
|
import org.telegram.messenger.FileLog;
|
||||||
import org.telegram.android.LocaleController;
|
import org.telegram.android.LocaleController;
|
||||||
import org.telegram.messenger.TLRPC;
|
import org.telegram.messenger.TLRPC;
|
||||||
|
@ -34,7 +36,6 @@ import org.telegram.android.MessageObject;
|
||||||
import org.telegram.android.MessagesController;
|
import org.telegram.android.MessagesController;
|
||||||
import org.telegram.android.NotificationCenter;
|
import org.telegram.android.NotificationCenter;
|
||||||
import org.telegram.messenger.R;
|
import org.telegram.messenger.R;
|
||||||
import org.telegram.messenger.Utilities;
|
|
||||||
import org.telegram.ui.Views.ActionBar.ActionBarLayer;
|
import org.telegram.ui.Views.ActionBar.ActionBarLayer;
|
||||||
import org.telegram.ui.Views.ActionBar.ActionBarMenu;
|
import org.telegram.ui.Views.ActionBar.ActionBarMenu;
|
||||||
import org.telegram.ui.Views.ActionBar.ActionBarMenuItem;
|
import org.telegram.ui.Views.ActionBar.ActionBarMenuItem;
|
||||||
|
@ -235,8 +236,8 @@ public class LocationActivity extends BaseFragment implements NotificationCenter
|
||||||
if (user.photo != null) {
|
if (user.photo != null) {
|
||||||
photo = user.photo.photo_small;
|
photo = user.photo.photo_small;
|
||||||
}
|
}
|
||||||
avatarImageView.setImage(photo, "50_50", Utilities.getUserAvatarForId(user.id));
|
avatarImageView.setImage(photo, "50_50", AndroidUtilities.getUserAvatarForId(user.id));
|
||||||
nameTextView.setText(Utilities.formatName(user.first_name, user.last_name));
|
nameTextView.setText(ContactsController.formatName(user.first_name, user.last_name));
|
||||||
}
|
}
|
||||||
userLocation = new Location("network");
|
userLocation = new Location("network");
|
||||||
userLocation.setLatitude(messageObject.messageOwner.media.geo.lat);
|
userLocation.setLatitude(messageObject.messageOwner.media.geo.lat);
|
||||||
|
@ -284,8 +285,8 @@ public class LocationActivity extends BaseFragment implements NotificationCenter
|
||||||
if (user.photo != null) {
|
if (user.photo != null) {
|
||||||
photo = user.photo.photo_small;
|
photo = user.photo.photo_small;
|
||||||
}
|
}
|
||||||
avatarImageView.setImage(photo, null, Utilities.getUserAvatarForId(user.id));
|
avatarImageView.setImage(photo, null, AndroidUtilities.getUserAvatarForId(user.id));
|
||||||
nameTextView.setText(Utilities.formatName(user.first_name, user.last_name));
|
nameTextView.setText(ContactsController.formatName(user.first_name, user.last_name));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -326,15 +326,21 @@ public class MediaActivity extends BaseFragment implements NotificationCenter.No
|
||||||
WindowManager manager = (WindowManager)ApplicationLoader.applicationContext.getSystemService(Activity.WINDOW_SERVICE);
|
WindowManager manager = (WindowManager)ApplicationLoader.applicationContext.getSystemService(Activity.WINDOW_SERVICE);
|
||||||
int rotation = manager.getDefaultDisplay().getRotation();
|
int rotation = manager.getDefaultDisplay().getRotation();
|
||||||
|
|
||||||
|
if (AndroidUtilities.isTablet()) {
|
||||||
|
listView.setNumColumns(4);
|
||||||
|
itemWidth = AndroidUtilities.dp(490) / 4 - AndroidUtilities.dp(2) * 3;
|
||||||
|
listView.setColumnWidth(itemWidth);
|
||||||
|
} else {
|
||||||
if (rotation == Surface.ROTATION_270 || rotation == Surface.ROTATION_90) {
|
if (rotation == Surface.ROTATION_270 || rotation == Surface.ROTATION_90) {
|
||||||
listView.setNumColumns(6);
|
listView.setNumColumns(6);
|
||||||
itemWidth = getParentActivity().getResources().getDisplayMetrics().widthPixels / 6 - AndroidUtilities.dp(2) * 5;
|
itemWidth = AndroidUtilities.displaySize.x / 6 - AndroidUtilities.dp(2) * 5;
|
||||||
listView.setColumnWidth(itemWidth);
|
listView.setColumnWidth(itemWidth);
|
||||||
} else {
|
} else {
|
||||||
listView.setNumColumns(4);
|
listView.setNumColumns(4);
|
||||||
itemWidth = getParentActivity().getResources().getDisplayMetrics().widthPixels / 4 - AndroidUtilities.dp(2) * 3;
|
itemWidth = AndroidUtilities.displaySize.x / 4 - AndroidUtilities.dp(2) * 3;
|
||||||
listView.setColumnWidth(itemWidth);
|
listView.setColumnWidth(itemWidth);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
listView.setPadding(listView.getPaddingLeft(), AndroidUtilities.dp(4), listView.getPaddingRight(), listView.getPaddingBottom());
|
listView.setPadding(listView.getPaddingLeft(), AndroidUtilities.dp(4), listView.getPaddingRight(), listView.getPaddingBottom());
|
||||||
listAdapter.notifyDataSetChanged();
|
listAdapter.notifyDataSetChanged();
|
||||||
|
|
||||||
|
|
|
@ -68,6 +68,8 @@ public class MessagesActivity extends BaseFragment implements NotificationCenter
|
||||||
|
|
||||||
private MessagesActivityDelegate delegate;
|
private MessagesActivityDelegate delegate;
|
||||||
|
|
||||||
|
private long openedDialogId = 0;
|
||||||
|
|
||||||
private final static int messages_list_menu_new_messages = 1;
|
private final static int messages_list_menu_new_messages = 1;
|
||||||
private final static int messages_list_menu_new_chat = 2;
|
private final static int messages_list_menu_new_chat = 2;
|
||||||
private final static int messages_list_menu_other = 6;
|
private final static int messages_list_menu_other = 6;
|
||||||
|
@ -94,6 +96,7 @@ public class MessagesActivity extends BaseFragment implements NotificationCenter
|
||||||
NotificationCenter.getInstance().addObserver(this, NotificationCenter.encryptedChatUpdated);
|
NotificationCenter.getInstance().addObserver(this, NotificationCenter.encryptedChatUpdated);
|
||||||
NotificationCenter.getInstance().addObserver(this, NotificationCenter.contactsDidLoaded);
|
NotificationCenter.getInstance().addObserver(this, NotificationCenter.contactsDidLoaded);
|
||||||
NotificationCenter.getInstance().addObserver(this, NotificationCenter.appDidLogout);
|
NotificationCenter.getInstance().addObserver(this, NotificationCenter.appDidLogout);
|
||||||
|
NotificationCenter.getInstance().addObserver(this, NotificationCenter.openedChatChanged);
|
||||||
if (getArguments() != null) {
|
if (getArguments() != null) {
|
||||||
onlySelect = arguments.getBoolean("onlySelect", false);
|
onlySelect = arguments.getBoolean("onlySelect", false);
|
||||||
serverOnly = arguments.getBoolean("serverOnly", false);
|
serverOnly = arguments.getBoolean("serverOnly", false);
|
||||||
|
@ -116,6 +119,7 @@ public class MessagesActivity extends BaseFragment implements NotificationCenter
|
||||||
NotificationCenter.getInstance().removeObserver(this, NotificationCenter.encryptedChatUpdated);
|
NotificationCenter.getInstance().removeObserver(this, NotificationCenter.encryptedChatUpdated);
|
||||||
NotificationCenter.getInstance().removeObserver(this, NotificationCenter.contactsDidLoaded);
|
NotificationCenter.getInstance().removeObserver(this, NotificationCenter.contactsDidLoaded);
|
||||||
NotificationCenter.getInstance().removeObserver(this, NotificationCenter.appDidLogout);
|
NotificationCenter.getInstance().removeObserver(this, NotificationCenter.appDidLogout);
|
||||||
|
NotificationCenter.getInstance().removeObserver(this, NotificationCenter.openedChatChanged);
|
||||||
delegate = null;
|
delegate = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -224,6 +228,10 @@ public class MessagesActivity extends BaseFragment implements NotificationCenter
|
||||||
|
|
||||||
messagesListView = (ListView)fragmentView.findViewById(R.id.messages_list_view);
|
messagesListView = (ListView)fragmentView.findViewById(R.id.messages_list_view);
|
||||||
messagesListView.setAdapter(messagesListViewAdapter);
|
messagesListView.setAdapter(messagesListViewAdapter);
|
||||||
|
if (delegate == null && AndroidUtilities.isTablet()) {
|
||||||
|
messagesListView.setDivider(inflater.getContext().getResources().getDrawable(R.drawable.messages_list_divider2));
|
||||||
|
messagesListView.setDividerHeight(1);
|
||||||
|
}
|
||||||
|
|
||||||
progressView = fragmentView.findViewById(R.id.progressLayout);
|
progressView = fragmentView.findViewById(R.id.progressLayout);
|
||||||
messagesListViewAdapter.notifyDataSetChanged();
|
messagesListViewAdapter.notifyDataSetChanged();
|
||||||
|
@ -305,7 +313,14 @@ public class MessagesActivity extends BaseFragment implements NotificationCenter
|
||||||
} else {
|
} else {
|
||||||
args.putInt("enc_id", high_id);
|
args.putInt("enc_id", high_id);
|
||||||
}
|
}
|
||||||
|
if (AndroidUtilities.isTablet()) {
|
||||||
|
if (openedDialogId == dialog_id) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
openedDialogId = dialog_id;
|
||||||
|
}
|
||||||
presentFragment(new ChatActivity(args));
|
presentFragment(new ChatActivity(args));
|
||||||
|
updateVisibleRows(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -469,6 +484,11 @@ public class MessagesActivity extends BaseFragment implements NotificationCenter
|
||||||
updateVisibleRows(0);
|
updateVisibleRows(0);
|
||||||
} else if (id == NotificationCenter.contactsDidLoaded) {
|
} else if (id == NotificationCenter.contactsDidLoaded) {
|
||||||
updateVisibleRows(0);
|
updateVisibleRows(0);
|
||||||
|
} else if (id == NotificationCenter.openedChatChanged) {
|
||||||
|
if (!serverOnly && AndroidUtilities.isTablet()) {
|
||||||
|
openedDialogId = (Long)args[0];
|
||||||
|
updateVisibleRows(0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -480,7 +500,15 @@ public class MessagesActivity extends BaseFragment implements NotificationCenter
|
||||||
for (int a = 0; a < count; a++) {
|
for (int a = 0; a < count; a++) {
|
||||||
View child = messagesListView.getChildAt(a);
|
View child = messagesListView.getChildAt(a);
|
||||||
if (child instanceof DialogCell) {
|
if (child instanceof DialogCell) {
|
||||||
((DialogCell) child).update(mask);
|
DialogCell cell = (DialogCell) child;
|
||||||
|
if (!serverOnly && AndroidUtilities.isTablet() && cell.getDialog() != null) {
|
||||||
|
if (cell.getDialog().id == openedDialogId) {
|
||||||
|
child.setBackgroundColor(0x0f000000);
|
||||||
|
} else {
|
||||||
|
child.setBackgroundColor(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cell.update(mask);
|
||||||
} else if (child instanceof ChatOrUserCell) {
|
} else if (child instanceof ChatOrUserCell) {
|
||||||
((ChatOrUserCell) child).update(mask);
|
((ChatOrUserCell) child).update(mask);
|
||||||
}
|
}
|
||||||
|
@ -491,6 +519,10 @@ public class MessagesActivity extends BaseFragment implements NotificationCenter
|
||||||
this.delegate = delegate;
|
this.delegate = delegate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public MessagesActivityDelegate getDelegate() {
|
||||||
|
return delegate;
|
||||||
|
}
|
||||||
|
|
||||||
private void didSelectResult(final long dialog_id, boolean useAlert, final boolean param) {
|
private void didSelectResult(final long dialog_id, boolean useAlert, final boolean param) {
|
||||||
if (useAlert && selectAlertString != null) {
|
if (useAlert && selectAlertString != null) {
|
||||||
if (getParentActivity() == null) {
|
if (getParentActivity() == null) {
|
||||||
|
@ -513,7 +545,7 @@ public class MessagesActivity extends BaseFragment implements NotificationCenter
|
||||||
if (user == null) {
|
if (user == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
builder.setMessage(LocaleController.formatStringSimple(selectAlertString, Utilities.formatName(user.first_name, user.last_name)));
|
builder.setMessage(LocaleController.formatStringSimple(selectAlertString, ContactsController.formatName(user.first_name, user.last_name)));
|
||||||
} else if (lower_part < 0) {
|
} else if (lower_part < 0) {
|
||||||
TLRPC.Chat chat = MessagesController.getInstance().getChat(-lower_part);
|
TLRPC.Chat chat = MessagesController.getInstance().getChat(-lower_part);
|
||||||
if (chat == null) {
|
if (chat == null) {
|
||||||
|
@ -528,7 +560,7 @@ public class MessagesActivity extends BaseFragment implements NotificationCenter
|
||||||
if (user == null) {
|
if (user == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
builder.setMessage(LocaleController.formatStringSimple(selectAlertString, Utilities.formatName(user.first_name, user.last_name)));
|
builder.setMessage(LocaleController.formatStringSimple(selectAlertString, ContactsController.formatName(user.first_name, user.last_name)));
|
||||||
}
|
}
|
||||||
CheckBox checkBox = null;
|
CheckBox checkBox = null;
|
||||||
/*if (delegate instanceof ChatActivity) {
|
/*if (delegate instanceof ChatActivity) {
|
||||||
|
@ -713,7 +745,15 @@ public class MessagesActivity extends BaseFragment implements NotificationCenter
|
||||||
if (serverOnly) {
|
if (serverOnly) {
|
||||||
((DialogCell)view).setDialog(MessagesController.getInstance().dialogsServerOnly.get(i));
|
((DialogCell)view).setDialog(MessagesController.getInstance().dialogsServerOnly.get(i));
|
||||||
} else {
|
} else {
|
||||||
((DialogCell)view).setDialog(MessagesController.getInstance().dialogs.get(i));
|
TLRPC.TL_dialog dialog = MessagesController.getInstance().dialogs.get(i);
|
||||||
|
if (AndroidUtilities.isTablet()) {
|
||||||
|
if (dialog.id == openedDialogId) {
|
||||||
|
view.setBackgroundColor(0x0f000000);
|
||||||
|
} else {
|
||||||
|
view.setBackgroundColor(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
((DialogCell)view).setDialog(dialog);
|
||||||
}
|
}
|
||||||
|
|
||||||
return view;
|
return view;
|
||||||
|
|
|
@ -12,17 +12,14 @@ import android.content.Context;
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.graphics.Canvas;
|
import android.graphics.Canvas;
|
||||||
import android.graphics.Paint;
|
import android.graphics.Paint;
|
||||||
import android.graphics.Point;
|
|
||||||
import android.graphics.drawable.BitmapDrawable;
|
import android.graphics.drawable.BitmapDrawable;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
import android.view.Display;
|
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.MotionEvent;
|
import android.view.MotionEvent;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.view.WindowManager;
|
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.FrameLayout;
|
import android.widget.FrameLayout;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
@ -302,14 +299,12 @@ public class PhotoCropActivity extends BaseFragment {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Point displaySize = new Point();
|
int size = 0;
|
||||||
Display display = ((WindowManager)ApplicationLoader.applicationContext.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
|
if (AndroidUtilities.isTablet()) {
|
||||||
if(android.os.Build.VERSION.SDK_INT < 13) {
|
size = AndroidUtilities.dp(520);
|
||||||
displaySize.set(display.getWidth(), display.getHeight());
|
|
||||||
} else {
|
} else {
|
||||||
display.getSize(displaySize);
|
size = Math.max(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y);
|
||||||
}
|
}
|
||||||
int size = Math.max(displaySize.x, displaySize.y);
|
|
||||||
imageToCrop = ImageLoader.loadBitmap(photoPath, photoUri, size, size);
|
imageToCrop = ImageLoader.loadBitmap(photoPath, photoUri, size, size);
|
||||||
if (imageToCrop == null) {
|
if (imageToCrop == null) {
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -394,18 +394,26 @@ public class PhotoPickerActivity extends BaseFragment implements NotificationCen
|
||||||
|
|
||||||
int columnsCount = 2;
|
int columnsCount = 2;
|
||||||
if (selectedAlbum != null) {
|
if (selectedAlbum != null) {
|
||||||
|
if (AndroidUtilities.isTablet()) {
|
||||||
|
columnsCount = 3;
|
||||||
|
} else {
|
||||||
if (rotation == Surface.ROTATION_270 || rotation == Surface.ROTATION_90) {
|
if (rotation == Surface.ROTATION_270 || rotation == Surface.ROTATION_90) {
|
||||||
columnsCount = 5;
|
columnsCount = 5;
|
||||||
} else {
|
} else {
|
||||||
columnsCount = 3;
|
columnsCount = 3;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if (rotation == Surface.ROTATION_270 || rotation == Surface.ROTATION_90) {
|
if (rotation == Surface.ROTATION_270 || rotation == Surface.ROTATION_90) {
|
||||||
columnsCount = 4;
|
columnsCount = 4;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
listView.setNumColumns(columnsCount);
|
listView.setNumColumns(columnsCount);
|
||||||
itemWidth = (getParentActivity().getResources().getDisplayMetrics().widthPixels - ((columnsCount + 1) * AndroidUtilities.dp(4))) / columnsCount;
|
if (AndroidUtilities.isTablet()) {
|
||||||
|
itemWidth = (AndroidUtilities.dp(490) - ((columnsCount + 1) * AndroidUtilities.dp(4))) / columnsCount;
|
||||||
|
} else {
|
||||||
|
itemWidth = (AndroidUtilities.displaySize.x - ((columnsCount + 1) * AndroidUtilities.dp(4))) / columnsCount;
|
||||||
|
}
|
||||||
listView.setColumnWidth(itemWidth);
|
listView.setColumnWidth(itemWidth);
|
||||||
|
|
||||||
listAdapter.notifyDataSetChanged();
|
listAdapter.notifyDataSetChanged();
|
||||||
|
|
|
@ -47,6 +47,7 @@ import android.widget.Scroller;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import org.telegram.android.AndroidUtilities;
|
import org.telegram.android.AndroidUtilities;
|
||||||
|
import org.telegram.android.ContactsController;
|
||||||
import org.telegram.android.MessagesStorage;
|
import org.telegram.android.MessagesStorage;
|
||||||
import org.telegram.messenger.ConnectionsManager;
|
import org.telegram.messenger.ConnectionsManager;
|
||||||
import org.telegram.messenger.FileLoader;
|
import org.telegram.messenger.FileLoader;
|
||||||
|
@ -62,7 +63,6 @@ import org.telegram.messenger.Utilities;
|
||||||
import org.telegram.android.MessageObject;
|
import org.telegram.android.MessageObject;
|
||||||
import org.telegram.android.PhotoObject;
|
import org.telegram.android.PhotoObject;
|
||||||
import org.telegram.ui.Views.ActionBar.ActionBar;
|
import org.telegram.ui.Views.ActionBar.ActionBar;
|
||||||
import org.telegram.ui.Views.ActionBar.ActionBarActivity;
|
|
||||||
import org.telegram.ui.Views.ActionBar.ActionBarLayer;
|
import org.telegram.ui.Views.ActionBar.ActionBarLayer;
|
||||||
import org.telegram.ui.Views.ActionBar.ActionBarMenu;
|
import org.telegram.ui.Views.ActionBar.ActionBarMenu;
|
||||||
import org.telegram.ui.Views.ActionBar.ActionBarMenuItem;
|
import org.telegram.ui.Views.ActionBar.ActionBarMenuItem;
|
||||||
|
@ -521,7 +521,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
|
||||||
closePhoto(false);
|
closePhoto(false);
|
||||||
Bundle args2 = new Bundle();
|
Bundle args2 = new Bundle();
|
||||||
args2.putLong("dialog_id", currentDialogId);
|
args2.putLong("dialog_id", currentDialogId);
|
||||||
((ActionBarActivity)parentActivity).presentFragment(new MediaActivity(args2), false, true);
|
((LaunchActivity)parentActivity).presentFragment(new MediaActivity(args2), false, true);
|
||||||
}
|
}
|
||||||
} else if (id == gallery_menu_send) {
|
} else if (id == gallery_menu_send) {
|
||||||
/*Intent intent = new Intent(this, MessagesActivity.class);
|
/*Intent intent = new Intent(this, MessagesActivity.class);
|
||||||
|
@ -1219,7 +1219,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
|
||||||
currentMessageObject = imagesArr.get(currentIndex);
|
currentMessageObject = imagesArr.get(currentIndex);
|
||||||
TLRPC.User user = MessagesController.getInstance().getUser(currentMessageObject.messageOwner.from_id);
|
TLRPC.User user = MessagesController.getInstance().getUser(currentMessageObject.messageOwner.from_id);
|
||||||
if (user != null) {
|
if (user != null) {
|
||||||
nameTextView.setText(Utilities.formatName(user.first_name, user.last_name));
|
nameTextView.setText(ContactsController.formatName(user.first_name, user.last_name));
|
||||||
} else {
|
} else {
|
||||||
nameTextView.setText("");
|
nameTextView.setText("");
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,6 @@ import android.app.KeyguardManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.res.Configuration;
|
import android.content.res.Configuration;
|
||||||
import android.graphics.drawable.AnimationDrawable;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.PowerManager;
|
import android.os.PowerManager;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
|
@ -43,7 +42,6 @@ import org.telegram.messenger.FileLog;
|
||||||
import org.telegram.android.NotificationCenter;
|
import org.telegram.android.NotificationCenter;
|
||||||
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.android.MessageObject;
|
import org.telegram.android.MessageObject;
|
||||||
import org.telegram.android.PhotoObject;
|
import org.telegram.android.PhotoObject;
|
||||||
import org.telegram.ui.Views.ActionBar.ActionBar;
|
import org.telegram.ui.Views.ActionBar.ActionBar;
|
||||||
|
@ -53,6 +51,7 @@ import org.telegram.ui.Views.BackupImageView;
|
||||||
import org.telegram.ui.Views.ChatActivityEnterView;
|
import org.telegram.ui.Views.ChatActivityEnterView;
|
||||||
import org.telegram.ui.Views.FrameLayoutFixed;
|
import org.telegram.ui.Views.FrameLayoutFixed;
|
||||||
import org.telegram.ui.Views.PopupAudioView;
|
import org.telegram.ui.Views.PopupAudioView;
|
||||||
|
import org.telegram.ui.Views.TypingDotsDrawable;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -71,6 +70,7 @@ public class PopupNotificationActivity extends Activity implements NotificationC
|
||||||
private ArrayList<ViewGroup> imageViews = new ArrayList<ViewGroup>();
|
private ArrayList<ViewGroup> imageViews = new ArrayList<ViewGroup>();
|
||||||
private ArrayList<ViewGroup> audioViews = new ArrayList<ViewGroup>();
|
private ArrayList<ViewGroup> audioViews = new ArrayList<ViewGroup>();
|
||||||
private VelocityTracker velocityTracker = null;
|
private VelocityTracker velocityTracker = null;
|
||||||
|
private TypingDotsDrawable typingDotsDrawable;
|
||||||
|
|
||||||
private int classGuid;
|
private int classGuid;
|
||||||
private TLRPC.User currentUser;
|
private TLRPC.User currentUser;
|
||||||
|
@ -151,6 +151,8 @@ public class PopupNotificationActivity extends Activity implements NotificationC
|
||||||
NotificationCenter.getInstance().addObserver(this, NotificationCenter.contactsDidLoaded);
|
NotificationCenter.getInstance().addObserver(this, NotificationCenter.contactsDidLoaded);
|
||||||
NotificationCenter.getInstance().addObserver(this, NotificationCenter.emojiDidLoaded);
|
NotificationCenter.getInstance().addObserver(this, NotificationCenter.emojiDidLoaded);
|
||||||
|
|
||||||
|
typingDotsDrawable = new TypingDotsDrawable();
|
||||||
|
|
||||||
chatActivityEnterView = new ChatActivityEnterView();
|
chatActivityEnterView = new ChatActivityEnterView();
|
||||||
chatActivityEnterView.setDelegate(new ChatActivityEnterView.ChatActivityEnterViewDelegate() {
|
chatActivityEnterView.setDelegate(new ChatActivityEnterView.ChatActivityEnterViewDelegate() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -624,7 +626,7 @@ public class PopupNotificationActivity extends Activity implements NotificationC
|
||||||
messageContainer.getViewTreeObserver().removeOnPreDrawListener(this);
|
messageContainer.getViewTreeObserver().removeOnPreDrawListener(this);
|
||||||
if (!checkTransitionAnimation() && !startedMoving) {
|
if (!checkTransitionAnimation() && !startedMoving) {
|
||||||
ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams)messageContainer.getLayoutParams();
|
ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams)messageContainer.getLayoutParams();
|
||||||
if (!Utilities.isTablet(PopupNotificationActivity.this) && PopupNotificationActivity.this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
|
if (!AndroidUtilities.isTablet() && PopupNotificationActivity.this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
|
||||||
layoutParams.topMargin = AndroidUtilities.dp(40);
|
layoutParams.topMargin = AndroidUtilities.dp(40);
|
||||||
} else {
|
} else {
|
||||||
layoutParams.topMargin = AndroidUtilities.dp(48);
|
layoutParams.topMargin = AndroidUtilities.dp(48);
|
||||||
|
@ -739,10 +741,10 @@ public class PopupNotificationActivity extends Activity implements NotificationC
|
||||||
|
|
||||||
if (currentChat != null && currentUser != null) {
|
if (currentChat != null && currentUser != null) {
|
||||||
actionBarLayer.setTitle(currentChat.title);
|
actionBarLayer.setTitle(currentChat.title);
|
||||||
actionBarLayer.setSubtitle(Utilities.formatName(currentUser.first_name, currentUser.last_name));
|
actionBarLayer.setSubtitle(ContactsController.formatName(currentUser.first_name, currentUser.last_name));
|
||||||
actionBarLayer.setTitleIcon(0, 0);
|
actionBarLayer.setTitleIcon(0, 0);
|
||||||
} else if (currentUser != null) {
|
} else if (currentUser != null) {
|
||||||
actionBarLayer.setTitle(Utilities.formatName(currentUser.first_name, currentUser.last_name));
|
actionBarLayer.setTitle(ContactsController.formatName(currentUser.first_name, currentUser.last_name));
|
||||||
if ((int)dialog_id == 0) {
|
if ((int)dialog_id == 0) {
|
||||||
actionBarLayer.setTitleIcon(R.drawable.ic_lock_white, AndroidUtilities.dp(4));
|
actionBarLayer.setTitleIcon(R.drawable.ic_lock_white, AndroidUtilities.dp(4));
|
||||||
} else {
|
} else {
|
||||||
|
@ -767,10 +769,10 @@ public class PopupNotificationActivity extends Activity implements NotificationC
|
||||||
if (currentUser.phone != null && currentUser.phone.length() != 0) {
|
if (currentUser.phone != null && currentUser.phone.length() != 0) {
|
||||||
actionBarLayer.setTitle(PhoneFormat.getInstance().format("+" + currentUser.phone));
|
actionBarLayer.setTitle(PhoneFormat.getInstance().format("+" + currentUser.phone));
|
||||||
} else {
|
} else {
|
||||||
actionBarLayer.setTitle(Utilities.formatName(currentUser.first_name, currentUser.last_name));
|
actionBarLayer.setTitle(ContactsController.formatName(currentUser.first_name, currentUser.last_name));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
actionBarLayer.setTitle(Utilities.formatName(currentUser.first_name, currentUser.last_name));
|
actionBarLayer.setTitle(ContactsController.formatName(currentUser.first_name, currentUser.last_name));
|
||||||
}
|
}
|
||||||
CharSequence printString = MessagesController.getInstance().printingStrings.get(currentMessageObject.getDialogId());
|
CharSequence printString = MessagesController.getInstance().printingStrings.get(currentMessageObject.getDialogId());
|
||||||
if (printString == null || printString.length() == 0) {
|
if (printString == null || printString.length() == 0) {
|
||||||
|
@ -800,7 +802,7 @@ public class PopupNotificationActivity extends Activity implements NotificationC
|
||||||
if (currentChat.photo != null) {
|
if (currentChat.photo != null) {
|
||||||
newPhoto = currentChat.photo.photo_small;
|
newPhoto = currentChat.photo.photo_small;
|
||||||
}
|
}
|
||||||
placeHolderId = Utilities.getGroupAvatarForId(currentChat.id);
|
placeHolderId = AndroidUtilities.getGroupAvatarForId(currentChat.id);
|
||||||
} else if (currentUser != null) {
|
} else if (currentUser != null) {
|
||||||
TLRPC.User user = MessagesController.getInstance().getUser(currentUser.id);
|
TLRPC.User user = MessagesController.getInstance().getUser(currentUser.id);
|
||||||
if (user == null) {
|
if (user == null) {
|
||||||
|
@ -810,7 +812,7 @@ public class PopupNotificationActivity extends Activity implements NotificationC
|
||||||
if (currentUser.photo != null) {
|
if (currentUser.photo != null) {
|
||||||
newPhoto = currentUser.photo.photo_small;
|
newPhoto = currentUser.photo.photo_small;
|
||||||
}
|
}
|
||||||
placeHolderId = Utilities.getUserAvatarForId(currentUser.id);
|
placeHolderId = AndroidUtilities.getUserAvatarForId(currentUser.id);
|
||||||
}
|
}
|
||||||
if (avatarImageView != null) {
|
if (avatarImageView != null) {
|
||||||
avatarImageView.setImage(newPhoto, "50_50", placeHolderId);
|
avatarImageView.setImage(newPhoto, "50_50", placeHolderId);
|
||||||
|
@ -823,15 +825,14 @@ public class PopupNotificationActivity extends Activity implements NotificationC
|
||||||
}
|
}
|
||||||
if (start) {
|
if (start) {
|
||||||
try {
|
try {
|
||||||
actionBarLayer.setSubTitleIcon(R.drawable.typing_dots, AndroidUtilities.dp(4));
|
actionBarLayer.setSubTitleIcon(0, typingDotsDrawable, AndroidUtilities.dp(4));
|
||||||
AnimationDrawable mAnim = (AnimationDrawable)actionBarLayer.getSubTitleIcon();
|
typingDotsDrawable.start();
|
||||||
mAnim.setAlpha(200);
|
|
||||||
mAnim.start();
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
FileLog.e("tmessages", e);
|
FileLog.e("tmessages", e);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
actionBarLayer.setSubTitleIcon(0, 0);
|
actionBarLayer.setSubTitleIcon(0, null, 0);
|
||||||
|
typingDotsDrawable.stop();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -52,7 +52,6 @@ import org.telegram.android.NotificationCenter;
|
||||||
import org.telegram.messenger.R;
|
import org.telegram.messenger.R;
|
||||||
import org.telegram.messenger.RPCRequest;
|
import org.telegram.messenger.RPCRequest;
|
||||||
import org.telegram.messenger.UserConfig;
|
import org.telegram.messenger.UserConfig;
|
||||||
import org.telegram.messenger.Utilities;
|
|
||||||
import org.telegram.android.MessageObject;
|
import org.telegram.android.MessageObject;
|
||||||
import org.telegram.android.PhotoObject;
|
import org.telegram.android.PhotoObject;
|
||||||
import org.telegram.ui.Adapters.BaseFragmentAdapter;
|
import org.telegram.ui.Adapters.BaseFragmentAdapter;
|
||||||
|
@ -817,7 +816,7 @@ public class SettingsActivity extends BaseFragment implements NotificationCenter
|
||||||
user = UserConfig.getCurrentUser();
|
user = UserConfig.getCurrentUser();
|
||||||
}
|
}
|
||||||
if (user != null) {
|
if (user != null) {
|
||||||
textView.setText(Utilities.formatName(user.first_name, user.last_name));
|
textView.setText(ContactsController.formatName(user.first_name, user.last_name));
|
||||||
BackupImageView avatarImage = (BackupImageView)view.findViewById(R.id.settings_avatar_image);
|
BackupImageView avatarImage = (BackupImageView)view.findViewById(R.id.settings_avatar_image);
|
||||||
avatarImage.processDetach = false;
|
avatarImage.processDetach = false;
|
||||||
TLRPC.FileLocation photo = null;
|
TLRPC.FileLocation photo = null;
|
||||||
|
@ -826,7 +825,7 @@ public class SettingsActivity extends BaseFragment implements NotificationCenter
|
||||||
photo = user.photo.photo_small;
|
photo = user.photo.photo_small;
|
||||||
photoBig = user.photo.photo_big;
|
photoBig = user.photo.photo_big;
|
||||||
}
|
}
|
||||||
avatarImage.setImage(photo, "50_50", Utilities.getUserAvatarForId(user.id));
|
avatarImage.setImage(photo, "50_50", AndroidUtilities.getUserAvatarForId(user.id));
|
||||||
avatarImage.imageReceiver.setVisible(!PhotoViewer.getInstance().isShowingImage(photoBig), false);
|
avatarImage.imageReceiver.setVisible(!PhotoViewer.getInstance().isShowingImage(photoBig), false);
|
||||||
}
|
}
|
||||||
return view;
|
return view;
|
||||||
|
@ -979,7 +978,7 @@ public class SettingsActivity extends BaseFragment implements NotificationCenter
|
||||||
View divider = view.findViewById(R.id.settings_row_divider);
|
View divider = view.findViewById(R.id.settings_row_divider);
|
||||||
if (i == textSizeRow) {
|
if (i == textSizeRow) {
|
||||||
SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("mainconfig", Activity.MODE_PRIVATE);
|
SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("mainconfig", Activity.MODE_PRIVATE);
|
||||||
int size = preferences.getInt("fons_size", 16);
|
int size = preferences.getInt("fons_size", AndroidUtilities.isTablet() ? 18 : 16);
|
||||||
detailTextView.setText(String.format("%d", size));
|
detailTextView.setText(String.format("%d", size));
|
||||||
textView.setText(LocaleController.getString("TextSize", R.string.TextSize));
|
textView.setText(LocaleController.getString("TextSize", R.string.TextSize));
|
||||||
divider.setVisibility(View.VISIBLE);
|
divider.setVisibility(View.VISIBLE);
|
||||||
|
|
|
@ -34,7 +34,6 @@ import org.telegram.android.MessagesController;
|
||||||
import org.telegram.android.MessagesStorage;
|
import org.telegram.android.MessagesStorage;
|
||||||
import org.telegram.android.NotificationCenter;
|
import org.telegram.android.NotificationCenter;
|
||||||
import org.telegram.messenger.R;
|
import org.telegram.messenger.R;
|
||||||
import org.telegram.messenger.Utilities;
|
|
||||||
import org.telegram.android.MessageObject;
|
import org.telegram.android.MessageObject;
|
||||||
import org.telegram.ui.Adapters.BaseFragmentAdapter;
|
import org.telegram.ui.Adapters.BaseFragmentAdapter;
|
||||||
import org.telegram.ui.Views.ActionBar.ActionBarLayer;
|
import org.telegram.ui.Views.ActionBar.ActionBarLayer;
|
||||||
|
@ -542,7 +541,7 @@ public class UserProfileActivity extends BaseFragment implements NotificationCen
|
||||||
Typeface typeface = AndroidUtilities.getTypeface("fonts/rmedium.ttf");
|
Typeface typeface = AndroidUtilities.getTypeface("fonts/rmedium.ttf");
|
||||||
textView.setTypeface(typeface);
|
textView.setTypeface(typeface);
|
||||||
|
|
||||||
textView.setText(Utilities.formatName(user.first_name, user.last_name));
|
textView.setText(ContactsController.formatName(user.first_name, user.last_name));
|
||||||
onlineText.setText(LocaleController.formatUserStatus(user));
|
onlineText.setText(LocaleController.formatUserStatus(user));
|
||||||
|
|
||||||
TLRPC.FileLocation photo = null;
|
TLRPC.FileLocation photo = null;
|
||||||
|
@ -551,7 +550,7 @@ public class UserProfileActivity extends BaseFragment implements NotificationCen
|
||||||
photo = user.photo.photo_small;
|
photo = user.photo.photo_small;
|
||||||
photoBig = user.photo.photo_big;
|
photoBig = user.photo.photo_big;
|
||||||
}
|
}
|
||||||
avatarImage.setImage(photo, "50_50", Utilities.getUserAvatarForId(user.id));
|
avatarImage.setImage(photo, "50_50", AndroidUtilities.getUserAvatarForId(user.id));
|
||||||
avatarImage.imageReceiver.setVisible(!PhotoViewer.getInstance().isShowingImage(photoBig), false);
|
avatarImage.imageReceiver.setVisible(!PhotoViewer.getInstance().isShowingImage(photoBig), false);
|
||||||
return view;
|
return view;
|
||||||
} else if (type == 1) {
|
} else if (type == 1) {
|
||||||
|
|
|
@ -21,7 +21,6 @@ import android.widget.FrameLayout;
|
||||||
|
|
||||||
import org.telegram.android.AndroidUtilities;
|
import org.telegram.android.AndroidUtilities;
|
||||||
import org.telegram.messenger.R;
|
import org.telegram.messenger.R;
|
||||||
import org.telegram.messenger.Utilities;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
@ -171,7 +170,7 @@ public class ActionBar extends FrameLayout {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
||||||
if (!Utilities.isTablet(getContext()) && getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
|
if (!AndroidUtilities.isTablet() && getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
|
||||||
super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(40), MeasureSpec.EXACTLY));
|
super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(40), MeasureSpec.EXACTLY));
|
||||||
} else {
|
} else {
|
||||||
super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(48), MeasureSpec.EXACTLY));
|
super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(48), MeasureSpec.EXACTLY));
|
||||||
|
|
|
@ -23,7 +23,6 @@ import android.widget.TextView;
|
||||||
|
|
||||||
import org.telegram.android.AndroidUtilities;
|
import org.telegram.android.AndroidUtilities;
|
||||||
import org.telegram.messenger.R;
|
import org.telegram.messenger.R;
|
||||||
import org.telegram.messenger.Utilities;
|
|
||||||
|
|
||||||
public class ActionBarLayer extends FrameLayout {
|
public class ActionBarLayer extends FrameLayout {
|
||||||
|
|
||||||
|
@ -55,6 +54,7 @@ public class ActionBarLayer extends FrameLayout {
|
||||||
private boolean isBackOverlayVisible;
|
private boolean isBackOverlayVisible;
|
||||||
protected BaseFragment parentFragment;
|
protected BaseFragment parentFragment;
|
||||||
public ActionBarMenuOnItemClick actionBarMenuOnItemClick;
|
public ActionBarMenuOnItemClick actionBarMenuOnItemClick;
|
||||||
|
private int leftMargin = 0;
|
||||||
|
|
||||||
public ActionBarLayer(Context context, ActionBar actionBar) {
|
public ActionBarLayer(Context context, ActionBar actionBar) {
|
||||||
super(context);
|
super(context);
|
||||||
|
@ -94,13 +94,17 @@ public class ActionBarLayer extends FrameLayout {
|
||||||
super(context, attrs, defStyleAttr);
|
super(context, attrs, defStyleAttr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setExtraLeftMargin(int margin) {
|
||||||
|
leftMargin = margin;
|
||||||
|
}
|
||||||
|
|
||||||
private void positionBackImage(int height) {
|
private void positionBackImage(int height) {
|
||||||
if (backButtonImageView != null) {
|
if (backButtonImageView != null) {
|
||||||
LayoutParams layoutParams = (LayoutParams)backButtonImageView.getLayoutParams();
|
LayoutParams layoutParams = (LayoutParams)backButtonImageView.getLayoutParams();
|
||||||
layoutParams.width = LayoutParams.WRAP_CONTENT;
|
layoutParams.width = LayoutParams.WRAP_CONTENT;
|
||||||
layoutParams.height = LayoutParams.WRAP_CONTENT;
|
layoutParams.height = LayoutParams.WRAP_CONTENT;
|
||||||
layoutParams.gravity = Gravity.TOP | Gravity.LEFT;
|
layoutParams.gravity = Gravity.TOP | Gravity.LEFT;
|
||||||
layoutParams.setMargins(AndroidUtilities.dp(3), (height - backButtonImageView.getDrawable().getIntrinsicHeight()) / 2, 0, 0);
|
layoutParams.setMargins(AndroidUtilities.dp(3 + leftMargin), (height - backButtonImageView.getDrawable().getIntrinsicHeight()) / 2, 0, 0);
|
||||||
backButtonImageView.setLayoutParams(layoutParams);
|
backButtonImageView.setLayoutParams(layoutParams);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -108,7 +112,7 @@ public class ActionBarLayer extends FrameLayout {
|
||||||
private void positionLogoImage(int height) {
|
private void positionLogoImage(int height) {
|
||||||
if (logoImageView != null) {
|
if (logoImageView != null) {
|
||||||
LayoutParams layoutParams = (LayoutParams) logoImageView.getLayoutParams();
|
LayoutParams layoutParams = (LayoutParams) logoImageView.getLayoutParams();
|
||||||
if (!Utilities.isTablet(getContext()) && getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
|
if (!AndroidUtilities.isTablet() && getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
|
||||||
layoutParams.width = (int)(logoImageView.getDrawable().getIntrinsicWidth() / 1.3f);
|
layoutParams.width = (int)(logoImageView.getDrawable().getIntrinsicWidth() / 1.3f);
|
||||||
layoutParams.height = (int)(logoImageView.getDrawable().getIntrinsicHeight() / 1.3f);
|
layoutParams.height = (int)(logoImageView.getDrawable().getIntrinsicHeight() / 1.3f);
|
||||||
layoutParams.setMargins(AndroidUtilities.dp(12), (height - layoutParams.height) / 2, 0, 0);
|
layoutParams.setMargins(AndroidUtilities.dp(12), (height - layoutParams.height) / 2, 0, 0);
|
||||||
|
@ -124,7 +128,7 @@ public class ActionBarLayer extends FrameLayout {
|
||||||
|
|
||||||
private void positionTitle(int width, int height) {
|
private void positionTitle(int width, int height) {
|
||||||
int offset = AndroidUtilities.dp(2);
|
int offset = AndroidUtilities.dp(2);
|
||||||
if (!Utilities.isTablet(getContext()) && getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
|
if (!AndroidUtilities.isTablet() && getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
|
||||||
offset = AndroidUtilities.dp(1);
|
offset = AndroidUtilities.dp(1);
|
||||||
}
|
}
|
||||||
int maxTextWidth = 0;
|
int maxTextWidth = 0;
|
||||||
|
@ -132,7 +136,7 @@ public class ActionBarLayer extends FrameLayout {
|
||||||
LayoutParams layoutParams = null;
|
LayoutParams layoutParams = null;
|
||||||
|
|
||||||
if (titleTextView != null && titleTextView.getVisibility() == VISIBLE) {
|
if (titleTextView != null && titleTextView.getVisibility() == VISIBLE) {
|
||||||
if (!Utilities.isTablet(getContext()) && getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
|
if (!AndroidUtilities.isTablet() && getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
|
||||||
titleTextView.setTextSize(16);
|
titleTextView.setTextSize(16);
|
||||||
} else {
|
} else {
|
||||||
titleTextView.setTextSize(18);
|
titleTextView.setTextSize(18);
|
||||||
|
@ -147,7 +151,7 @@ public class ActionBarLayer extends FrameLayout {
|
||||||
maxTextWidth = titleTextView.getMeasuredWidth();
|
maxTextWidth = titleTextView.getMeasuredWidth();
|
||||||
}
|
}
|
||||||
if (subTitleTextView != null && subTitleTextView.getVisibility() == VISIBLE) {
|
if (subTitleTextView != null && subTitleTextView.getVisibility() == VISIBLE) {
|
||||||
if (!Utilities.isTablet(getContext()) && getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
|
if (!AndroidUtilities.isTablet() && getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
|
||||||
subTitleTextView.setTextSize(12);
|
subTitleTextView.setTextSize(12);
|
||||||
} else {
|
} else {
|
||||||
subTitleTextView.setTextSize(14);
|
subTitleTextView.setTextSize(14);
|
||||||
|
@ -164,12 +168,12 @@ public class ActionBarLayer extends FrameLayout {
|
||||||
|
|
||||||
int x = 0;
|
int x = 0;
|
||||||
if (logoImageView == null || logoImageView.getVisibility() == GONE) {
|
if (logoImageView == null || logoImageView.getVisibility() == GONE) {
|
||||||
x = AndroidUtilities.dp(16);
|
x = AndroidUtilities.dp(16 + leftMargin);
|
||||||
} else {
|
} else {
|
||||||
if (!Utilities.isTablet(getContext()) && getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
|
if (!AndroidUtilities.isTablet() && getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
|
||||||
x = AndroidUtilities.dp(22) + (int)(logoImageView.getDrawable().getIntrinsicWidth() / 1.3f);
|
x = AndroidUtilities.dp(22 + leftMargin) + (int)(logoImageView.getDrawable().getIntrinsicWidth() / 1.3f);
|
||||||
} else {
|
} else {
|
||||||
x = AndroidUtilities.dp(22) + logoImageView.getDrawable().getIntrinsicWidth();
|
x = AndroidUtilities.dp(22 + leftMargin) + logoImageView.getDrawable().getIntrinsicWidth();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -258,8 +262,8 @@ public class ActionBarLayer extends FrameLayout {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setSubTitleIcon(int resourceId, int padding) {
|
public void setSubTitleIcon(int resourceId, Drawable drawable, int padding) {
|
||||||
if (resourceId != 0 && subTitleTextView == null) {
|
if ((resourceId != 0 || drawable != null) && subTitleTextView == null) {
|
||||||
subTitleTextView = new TextView(getContext());
|
subTitleTextView = new TextView(getContext());
|
||||||
backButtonFrameLayout.addView(subTitleTextView);
|
backButtonFrameLayout.addView(subTitleTextView);
|
||||||
subTitleTextView.setGravity(Gravity.LEFT);
|
subTitleTextView.setGravity(Gravity.LEFT);
|
||||||
|
@ -271,7 +275,11 @@ public class ActionBarLayer extends FrameLayout {
|
||||||
positionTitle(getMeasuredWidth(), getMeasuredHeight());
|
positionTitle(getMeasuredWidth(), getMeasuredHeight());
|
||||||
}
|
}
|
||||||
if (subTitleTextView != null) {
|
if (subTitleTextView != null) {
|
||||||
|
if (drawable != null) {
|
||||||
|
subTitleTextView.setCompoundDrawablesWithIntrinsicBounds(drawable, null, null, null);
|
||||||
|
} else {
|
||||||
subTitleTextView.setCompoundDrawablesWithIntrinsicBounds(resourceId, 0, 0, 0);
|
subTitleTextView.setCompoundDrawablesWithIntrinsicBounds(resourceId, 0, 0, 0);
|
||||||
|
}
|
||||||
subTitleTextView.setCompoundDrawablePadding(padding);
|
subTitleTextView.setCompoundDrawablePadding(padding);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -479,7 +487,7 @@ public class ActionBarLayer extends FrameLayout {
|
||||||
}
|
}
|
||||||
isBackOverlayVisible = visible;
|
isBackOverlayVisible = visible;
|
||||||
if (visible) {
|
if (visible) {
|
||||||
((ActionBarActivity)getContext()).onOverlayShow(actionOverlay, parentFragment);
|
parentFragment.parentLayout.onOverlayShow(actionOverlay, parentFragment);
|
||||||
}
|
}
|
||||||
positionBackOverlay(getMeasuredWidth(), getMeasuredHeight());
|
positionBackOverlay(getMeasuredWidth(), getMeasuredHeight());
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,7 +16,6 @@ import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.res.Configuration;
|
import android.content.res.Configuration;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.view.ActionMode;
|
import android.view.ActionMode;
|
||||||
import android.view.Gravity;
|
import android.view.Gravity;
|
||||||
|
@ -26,7 +25,6 @@ import android.view.VelocityTracker;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.view.ViewTreeObserver;
|
import android.view.ViewTreeObserver;
|
||||||
import android.view.Window;
|
|
||||||
import android.view.WindowManager;
|
import android.view.WindowManager;
|
||||||
import android.view.animation.Animation;
|
import android.view.animation.Animation;
|
||||||
import android.view.animation.AnimationUtils;
|
import android.view.animation.AnimationUtils;
|
||||||
|
@ -35,11 +33,10 @@ import android.widget.FrameLayout;
|
||||||
import org.telegram.android.AndroidUtilities;
|
import org.telegram.android.AndroidUtilities;
|
||||||
import org.telegram.messenger.FileLog;
|
import org.telegram.messenger.FileLog;
|
||||||
import org.telegram.messenger.R;
|
import org.telegram.messenger.R;
|
||||||
import org.telegram.messenger.Utilities;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
public class ActionBarActivity extends Activity {
|
public class ActionBarLayout extends FrameLayout {
|
||||||
|
|
||||||
private class FrameLayoutAnimationListener extends FrameLayout {
|
private class FrameLayoutAnimationListener extends FrameLayout {
|
||||||
public FrameLayoutAnimationListener(Context context) {
|
public FrameLayoutAnimationListener(Context context) {
|
||||||
|
@ -49,18 +46,30 @@ public class ActionBarActivity extends Activity {
|
||||||
@Override
|
@Override
|
||||||
protected void onAnimationEnd() {
|
protected void onAnimationEnd() {
|
||||||
super.onAnimationEnd();
|
super.onAnimationEnd();
|
||||||
ActionBarActivity.this.onAnimationEnd();
|
ActionBarLayout.this.onAnimationEndCheck();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static interface ActionBarLayoutDelegate {
|
||||||
|
public abstract boolean onPreIme();
|
||||||
|
public abstract void onOverlayShow(View view, BaseFragment fragment);
|
||||||
|
public abstract boolean needPresentFragment(BaseFragment fragment, boolean removeLast, boolean forceWithoutAnimation, ActionBarLayout layout);
|
||||||
|
public abstract boolean needAddFragmentToStack(BaseFragment fragment, ActionBarLayout layout);
|
||||||
|
public abstract boolean needCloseLastFragment(ActionBarLayout layout);
|
||||||
|
public abstract void onRebuildAllFragments(ActionBarLayout layout);
|
||||||
|
}
|
||||||
|
|
||||||
protected ActionBar actionBar;
|
protected ActionBar actionBar;
|
||||||
private FrameLayoutAnimationListener containerView;
|
private FrameLayoutAnimationListener containerView;
|
||||||
private FrameLayoutAnimationListener containerViewBack;
|
private FrameLayoutAnimationListener containerViewBack;
|
||||||
protected FrameLayout contentView;
|
|
||||||
private View shadowView;
|
private View shadowView;
|
||||||
|
|
||||||
private Animation openAnimation;
|
private Animation openAnimation;
|
||||||
private Animation closeAnimation;
|
private Animation closeAnimation;
|
||||||
|
private Animation alphaOpenAnimation;
|
||||||
|
private Animation alphaOpenAnimation2;
|
||||||
|
private Animation alphaCloseAnimation;
|
||||||
|
private Animation alphaCloseAnimation2;
|
||||||
|
|
||||||
private boolean maybeStartTracking = false;
|
private boolean maybeStartTracking = false;
|
||||||
protected boolean startedTracking = false;
|
protected boolean startedTracking = false;
|
||||||
|
@ -75,69 +84,35 @@ public class ActionBarActivity extends Activity {
|
||||||
private int startedTrackingPointerId;
|
private int startedTrackingPointerId;
|
||||||
private Runnable onCloseAnimationEndRunnable = null;
|
private Runnable onCloseAnimationEndRunnable = null;
|
||||||
private Runnable onOpenAnimationEndRunnable = null;
|
private Runnable onOpenAnimationEndRunnable = null;
|
||||||
|
private boolean useAlphaAnimations = false;
|
||||||
|
private View backgroundView;
|
||||||
|
|
||||||
private class FrameLayoutTouch extends FrameLayout {
|
private ActionBarLayoutDelegate delegate = null;
|
||||||
public FrameLayoutTouch(Context context) {
|
protected Activity parentActivity = null;
|
||||||
|
|
||||||
|
public ArrayList<BaseFragment> fragmentsStack = null;
|
||||||
|
|
||||||
|
public ActionBarLayout(Context context) {
|
||||||
super(context);
|
super(context);
|
||||||
}
|
parentActivity = (Activity)context;
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onInterceptTouchEvent(MotionEvent ev) {
|
|
||||||
return !(!animationInProgress && !checkTransitionAnimation()) || ((ActionBarActivity) getContext()).onTouchEvent(ev);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void requestDisallowInterceptTouchEvent(boolean disallowIntercept) {
|
|
||||||
((ActionBarActivity)getContext()).onTouchEvent(null);
|
|
||||||
super.requestDisallowInterceptTouchEvent(disallowIntercept);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean dispatchKeyEventPreIme(KeyEvent event) {
|
|
||||||
if (event != null && event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
|
|
||||||
return ((ActionBarActivity)getContext()).onPreIme() || super.dispatchKeyEventPreIme(event);
|
|
||||||
}
|
|
||||||
return super.dispatchKeyEventPreIme(event);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onKeyPreIme(int keyCode, KeyEvent event) {
|
|
||||||
return super.onKeyPreIme(keyCode, event);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static ArrayList<BaseFragment> fragmentsStack = new ArrayList<BaseFragment>();
|
|
||||||
|
|
||||||
protected void onCreateFinish(Bundle savedInstanceState) {
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
requestWindowFeature(Window.FEATURE_NO_TITLE);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
openAnimation = AnimationUtils.loadAnimation(this, R.anim.scale_in);
|
openAnimation = AnimationUtils.loadAnimation(context, R.anim.scale_in);
|
||||||
closeAnimation = AnimationUtils.loadAnimation(this, R.anim.scale_out);
|
closeAnimation = AnimationUtils.loadAnimation(context, R.anim.scale_out);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
FileLog.e("tmessages", e);
|
FileLog.e("tmessages", e);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
setTheme(R.style.Theme_TMessages);
|
public void init(ArrayList<BaseFragment> stack) {
|
||||||
getWindow().setBackgroundDrawableResource(R.drawable.transparent);
|
fragmentsStack = stack;
|
||||||
|
containerViewBack = new FrameLayoutAnimationListener(parentActivity);
|
||||||
|
addView(containerViewBack);
|
||||||
|
|
||||||
contentView = new FrameLayoutTouch(this);
|
containerView = new FrameLayoutAnimationListener(parentActivity);
|
||||||
setContentView(contentView, new ViewGroup.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT));
|
addView(containerView);
|
||||||
|
|
||||||
containerViewBack = new FrameLayoutAnimationListener(this);
|
shadowView = new FrameLayout(parentActivity);
|
||||||
contentView.addView(containerViewBack);
|
addView(shadowView);
|
||||||
|
|
||||||
containerView = new FrameLayoutAnimationListener(this);
|
|
||||||
contentView.addView(containerView);
|
|
||||||
|
|
||||||
shadowView = new FrameLayout(this);
|
|
||||||
contentView.addView(shadowView);
|
|
||||||
shadowView.setBackgroundResource(R.drawable.shadow);
|
shadowView.setBackgroundResource(R.drawable.shadow);
|
||||||
ViewGroup.LayoutParams layoutParams = shadowView.getLayoutParams();
|
ViewGroup.LayoutParams layoutParams = shadowView.getLayoutParams();
|
||||||
layoutParams.width = AndroidUtilities.dp(2);
|
layoutParams.width = AndroidUtilities.dp(2);
|
||||||
|
@ -145,14 +120,14 @@ public class ActionBarActivity extends Activity {
|
||||||
shadowView.setLayoutParams(layoutParams);
|
shadowView.setLayoutParams(layoutParams);
|
||||||
shadowView.setVisibility(View.INVISIBLE);
|
shadowView.setVisibility(View.INVISIBLE);
|
||||||
|
|
||||||
actionBar = new ActionBar(this);
|
actionBar = new ActionBar(parentActivity);
|
||||||
contentView.addView(actionBar);
|
addView(actionBar);
|
||||||
layoutParams = actionBar.getLayoutParams();
|
layoutParams = actionBar.getLayoutParams();
|
||||||
layoutParams.width = FrameLayout.LayoutParams.MATCH_PARENT;
|
layoutParams.width = FrameLayout.LayoutParams.MATCH_PARENT;
|
||||||
actionBar.setLayoutParams(layoutParams);
|
actionBar.setLayoutParams(layoutParams);
|
||||||
|
|
||||||
for (BaseFragment fragment : fragmentsStack) {
|
for (BaseFragment fragment : fragmentsStack) {
|
||||||
fragment.setParentActivity(this);
|
fragment.setParentLayout(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
needLayout();
|
needLayout();
|
||||||
|
@ -168,9 +143,7 @@ public class ActionBarActivity extends Activity {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
public void onResume() {
|
||||||
protected void onResume() {
|
|
||||||
super.onResume();
|
|
||||||
fixLayout();
|
fixLayout();
|
||||||
if (transitionAnimationInProgress) {
|
if (transitionAnimationInProgress) {
|
||||||
if (onCloseAnimationEndRunnable != null) {
|
if (onCloseAnimationEndRunnable != null) {
|
||||||
|
@ -189,15 +162,42 @@ public class ActionBarActivity extends Activity {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
public void onPause() {
|
||||||
protected void onPause() {
|
|
||||||
super.onPause();
|
|
||||||
if (!fragmentsStack.isEmpty()) {
|
if (!fragmentsStack.isEmpty()) {
|
||||||
BaseFragment lastFragment = fragmentsStack.get(fragmentsStack.size() - 1);
|
BaseFragment lastFragment = fragmentsStack.get(fragmentsStack.size() - 1);
|
||||||
lastFragment.onPause();
|
lastFragment.onPause();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onInterceptTouchEvent(MotionEvent ev) {
|
||||||
|
return !(!animationInProgress && !checkTransitionAnimation()) || onTouchEvent(ev);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void requestDisallowInterceptTouchEvent(boolean disallowIntercept) {
|
||||||
|
onTouchEvent(null);
|
||||||
|
super.requestDisallowInterceptTouchEvent(disallowIntercept);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean dispatchKeyEventPreIme(KeyEvent event) {
|
||||||
|
if (event != null && event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
|
||||||
|
return delegate != null && delegate.onPreIme() || super.dispatchKeyEventPreIme(event);
|
||||||
|
}
|
||||||
|
return super.dispatchKeyEventPreIme(event);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onAnimationEnd() {
|
||||||
|
super.onAnimationEnd();
|
||||||
|
onAnimationEndCheck();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDelegate(ActionBarLayoutDelegate delegate) {
|
||||||
|
this.delegate = delegate;
|
||||||
|
}
|
||||||
|
|
||||||
private void onSlideAnimationEnd(boolean backAnimation) {
|
private void onSlideAnimationEnd(boolean backAnimation) {
|
||||||
containerView.setX(0);
|
containerView.setX(0);
|
||||||
containerViewBack.setX(0);
|
containerViewBack.setX(0);
|
||||||
|
@ -208,7 +208,7 @@ public class ActionBarActivity extends Activity {
|
||||||
BaseFragment lastFragment = fragmentsStack.get(fragmentsStack.size() - 1);
|
BaseFragment lastFragment = fragmentsStack.get(fragmentsStack.size() - 1);
|
||||||
lastFragment.onPause();
|
lastFragment.onPause();
|
||||||
lastFragment.onFragmentDestroy();
|
lastFragment.onFragmentDestroy();
|
||||||
lastFragment.setParentActivity(null);
|
lastFragment.setParentLayout(null);
|
||||||
fragmentsStack.remove(fragmentsStack.size() - 1);
|
fragmentsStack.remove(fragmentsStack.size() - 1);
|
||||||
|
|
||||||
FrameLayoutAnimationListener temp = containerView;
|
FrameLayoutAnimationListener temp = containerView;
|
||||||
|
@ -230,7 +230,7 @@ public class ActionBarActivity extends Activity {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
containerViewBack.setVisibility(View.GONE);
|
containerViewBack.setVisibility(View.GONE);
|
||||||
AndroidUtilities.unlockOrientation(this);
|
AndroidUtilities.unlockOrientation(parentActivity);
|
||||||
startedTracking = false;
|
startedTracking = false;
|
||||||
animationInProgress = false;
|
animationInProgress = false;
|
||||||
}
|
}
|
||||||
|
@ -246,7 +246,7 @@ public class ActionBarActivity extends Activity {
|
||||||
|
|
||||||
BaseFragment lastFragment = fragmentsStack.get(fragmentsStack.size() - 2);
|
BaseFragment lastFragment = fragmentsStack.get(fragmentsStack.size() - 2);
|
||||||
actionBar.prepareForMoving(lastFragment.actionBarLayer);
|
actionBar.prepareForMoving(lastFragment.actionBarLayer);
|
||||||
View fragmentView = lastFragment.createView(getLayoutInflater(), null);
|
View fragmentView = lastFragment.createView(parentActivity.getLayoutInflater(), null);
|
||||||
ViewGroup parentView = (ViewGroup)fragmentView.getParent();
|
ViewGroup parentView = (ViewGroup)fragmentView.getParent();
|
||||||
if (parentView != null) {
|
if (parentView != null) {
|
||||||
parentView.removeView(fragmentView);
|
parentView.removeView(fragmentView);
|
||||||
|
@ -261,7 +261,7 @@ public class ActionBarActivity extends Activity {
|
||||||
}
|
}
|
||||||
lastFragment.onResume();
|
lastFragment.onResume();
|
||||||
|
|
||||||
AndroidUtilities.lockOrientation(this);
|
AndroidUtilities.lockOrientation(parentActivity);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean onTouchEvent(MotionEvent ev) {
|
public boolean onTouchEvent(MotionEvent ev) {
|
||||||
|
@ -289,8 +289,8 @@ public class ActionBarActivity extends Activity {
|
||||||
prepareForMoving(ev);
|
prepareForMoving(ev);
|
||||||
} else if (startedTracking) {
|
} else if (startedTracking) {
|
||||||
if (!beginTrackingSent) {
|
if (!beginTrackingSent) {
|
||||||
if (getCurrentFocus() != null) {
|
if (parentActivity.getCurrentFocus() != null) {
|
||||||
AndroidUtilities.hideKeyboard(getCurrentFocus());
|
AndroidUtilities.hideKeyboard(parentActivity.getCurrentFocus());
|
||||||
}
|
}
|
||||||
BaseFragment currentFragment = fragmentsStack.get(fragmentsStack.size() - 1);
|
BaseFragment currentFragment = fragmentsStack.get(fragmentsStack.size() - 1);
|
||||||
currentFragment.onBeginSlide();
|
currentFragment.onBeginSlide();
|
||||||
|
@ -377,7 +377,10 @@ public class ActionBarActivity extends Activity {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
public ActionBar getActionBar() {
|
||||||
|
return actionBar;
|
||||||
|
}
|
||||||
|
|
||||||
public void onBackPressed() {
|
public void onBackPressed() {
|
||||||
if (startedTracking || checkTransitionAnimation() || fragmentsStack.isEmpty()) {
|
if (startedTracking || checkTransitionAnimation() || fragmentsStack.isEmpty()) {
|
||||||
return;
|
return;
|
||||||
|
@ -388,58 +391,54 @@ public class ActionBarActivity extends Activity {
|
||||||
}
|
}
|
||||||
BaseFragment lastFragment = fragmentsStack.get(fragmentsStack.size() - 1);
|
BaseFragment lastFragment = fragmentsStack.get(fragmentsStack.size() - 1);
|
||||||
if (lastFragment.onBackPressed()) {
|
if (lastFragment.onBackPressed()) {
|
||||||
if (fragmentsStack.size() == 1) {
|
if (!fragmentsStack.isEmpty()) {
|
||||||
fragmentsStack.get(0).onFragmentDestroy();
|
|
||||||
fragmentsStack.clear();
|
|
||||||
onFinish();
|
|
||||||
finish();
|
|
||||||
} else if (!fragmentsStack.isEmpty()) {
|
|
||||||
closeLastFragment(true);
|
closeLastFragment(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onLowMemory() {
|
public void onLowMemory() {
|
||||||
super.onLowMemory();
|
|
||||||
for (BaseFragment fragment : fragmentsStack) {
|
for (BaseFragment fragment : fragmentsStack) {
|
||||||
fragment.onLowMemory();
|
fragment.onLowMemory();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void onAnimationEndCheck() {
|
||||||
|
onCloseAnimationEnd(false);
|
||||||
|
onOpenAnimationEnd(false);
|
||||||
|
}
|
||||||
|
|
||||||
public boolean checkTransitionAnimation() {
|
public boolean checkTransitionAnimation() {
|
||||||
if (transitionAnimationInProgress && transitionAnimationStartTime < System.currentTimeMillis() - 400) {
|
if (transitionAnimationInProgress && transitionAnimationStartTime < System.currentTimeMillis() - 400) {
|
||||||
transitionAnimationInProgress = false;
|
transitionAnimationInProgress = false;
|
||||||
onAnimationEnd();
|
onAnimationEndCheck();
|
||||||
}
|
}
|
||||||
return transitionAnimationInProgress;
|
return transitionAnimationInProgress;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void fixLayout() {
|
private void fixLayout() {
|
||||||
if (contentView != null) {
|
ViewTreeObserver obs = getViewTreeObserver();
|
||||||
ViewTreeObserver obs = contentView.getViewTreeObserver();
|
|
||||||
obs.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
|
obs.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onGlobalLayout() {
|
public void onGlobalLayout() {
|
||||||
needLayout();
|
needLayout();
|
||||||
|
|
||||||
if (Build.VERSION.SDK_INT < 16) {
|
if (Build.VERSION.SDK_INT < 16) {
|
||||||
contentView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
|
getViewTreeObserver().removeGlobalOnLayoutListener(this);
|
||||||
} else {
|
} else {
|
||||||
contentView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
|
getViewTreeObserver().removeOnGlobalLayoutListener(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public void needLayout() {
|
public void needLayout() {
|
||||||
WindowManager manager = (WindowManager) getSystemService(WINDOW_SERVICE);
|
WindowManager manager = (WindowManager)parentActivity.getSystemService(Context.WINDOW_SERVICE);
|
||||||
int rotation = manager.getDefaultDisplay().getRotation();
|
int rotation = manager.getDefaultDisplay().getRotation();
|
||||||
|
|
||||||
int height = 0;
|
int height = 0;
|
||||||
if (actionBar.getVisibility() == View.VISIBLE) {
|
if (actionBar.getVisibility() == View.VISIBLE) {
|
||||||
if (!Utilities.isTablet(this) && getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
|
if (!AndroidUtilities.isTablet() && getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
|
||||||
height = AndroidUtilities.dp(40);
|
height = AndroidUtilities.dp(40);
|
||||||
} else {
|
} else {
|
||||||
height = AndroidUtilities.dp(48);
|
height = AndroidUtilities.dp(48);
|
||||||
|
@ -475,7 +474,7 @@ public class ActionBarActivity extends Activity {
|
||||||
fragment.onPause();
|
fragment.onPause();
|
||||||
if (removeLast) {
|
if (removeLast) {
|
||||||
fragment.onFragmentDestroy();
|
fragment.onFragmentDestroy();
|
||||||
fragment.setParentActivity(null);
|
fragment.setParentLayout(null);
|
||||||
fragmentsStack.remove(fragment);
|
fragmentsStack.remove(fragment);
|
||||||
} else {
|
} else {
|
||||||
if (fragment.fragmentView != null) {
|
if (fragment.fragmentView != null) {
|
||||||
|
@ -497,18 +496,21 @@ public class ActionBarActivity extends Activity {
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean presentFragment(final BaseFragment fragment, final boolean removeLast, boolean forceWithoutAnimation) {
|
public boolean presentFragment(final BaseFragment fragment, final boolean removeLast, boolean forceWithoutAnimation) {
|
||||||
if (checkTransitionAnimation() || !fragment.onFragmentCreate()) {
|
if (checkTransitionAnimation() || delegate != null && !delegate.needPresentFragment(fragment, removeLast, forceWithoutAnimation, this) || !fragment.onFragmentCreate()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (getCurrentFocus() != null) {
|
if (parentActivity.getCurrentFocus() != null) {
|
||||||
AndroidUtilities.hideKeyboard(getCurrentFocus());
|
AndroidUtilities.hideKeyboard(parentActivity.getCurrentFocus());
|
||||||
|
}
|
||||||
|
boolean needAnimation = openAnimation != null && !forceWithoutAnimation && parentActivity.getSharedPreferences("mainconfig", Activity.MODE_PRIVATE).getBoolean("view_animations", true);
|
||||||
|
if (useAlphaAnimations && fragmentsStack.size() == 0 && alphaOpenAnimation == null) {
|
||||||
|
needAnimation = false;
|
||||||
}
|
}
|
||||||
boolean needAnimation = openAnimation != null && !forceWithoutAnimation && getSharedPreferences("mainconfig", Activity.MODE_PRIVATE).getBoolean("view_animations", true);
|
|
||||||
|
|
||||||
final BaseFragment currentFragment = !fragmentsStack.isEmpty() ? fragmentsStack.get(fragmentsStack.size() - 1) : null;
|
final BaseFragment currentFragment = !fragmentsStack.isEmpty() ? fragmentsStack.get(fragmentsStack.size() - 1) : null;
|
||||||
|
|
||||||
fragment.setParentActivity(this);
|
fragment.setParentLayout(this);
|
||||||
View fragmentView = fragment.createView(getLayoutInflater(), null);
|
View fragmentView = fragment.createView(parentActivity.getLayoutInflater(), null);
|
||||||
containerViewBack.addView(fragmentView);
|
containerViewBack.addView(fragmentView);
|
||||||
ViewGroup.LayoutParams layoutParams = fragmentView.getLayoutParams();
|
ViewGroup.LayoutParams layoutParams = fragmentView.getLayoutParams();
|
||||||
layoutParams.width = FrameLayout.LayoutParams.MATCH_PARENT;
|
layoutParams.width = FrameLayout.LayoutParams.MATCH_PARENT;
|
||||||
|
@ -534,6 +536,14 @@ public class ActionBarActivity extends Activity {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (needAnimation) {
|
if (needAnimation) {
|
||||||
|
if (useAlphaAnimations && fragmentsStack.size() == 1) {
|
||||||
|
presentFragmentInternalRemoveOld(removeLast, currentFragment);
|
||||||
|
startAnimation(alphaOpenAnimation);
|
||||||
|
if (backgroundView != null) {
|
||||||
|
backgroundView.setVisibility(VISIBLE);
|
||||||
|
backgroundView.startAnimation(alphaOpenAnimation2);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
transitionAnimationStartTime = System.currentTimeMillis();
|
transitionAnimationStartTime = System.currentTimeMillis();
|
||||||
transitionAnimationInProgress = true;
|
transitionAnimationInProgress = true;
|
||||||
onOpenAnimationEndRunnable = new Runnable() {
|
onOpenAnimationEndRunnable = new Runnable() {
|
||||||
|
@ -545,6 +555,7 @@ public class ActionBarActivity extends Activity {
|
||||||
};
|
};
|
||||||
openAnimation.reset();
|
openAnimation.reset();
|
||||||
containerView.startAnimation(openAnimation);
|
containerView.startAnimation(openAnimation);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
fragment.onOpenAnimationEnd();
|
fragment.onOpenAnimationEnd();
|
||||||
}
|
}
|
||||||
|
@ -552,10 +563,10 @@ public class ActionBarActivity extends Activity {
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean addFragmentToStack(BaseFragment fragment) {
|
public boolean addFragmentToStack(BaseFragment fragment) {
|
||||||
if (!fragment.onFragmentCreate()) {
|
if (delegate != null && !delegate.needAddFragmentToStack(fragment, this) || !fragment.onFragmentCreate()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
fragment.setParentActivity(this);
|
fragment.setParentLayout(this);
|
||||||
fragmentsStack.add(fragment);
|
fragmentsStack.add(fragment);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -563,7 +574,7 @@ public class ActionBarActivity extends Activity {
|
||||||
private void closeLastFragmentInternalRemoveOld(BaseFragment fragment) {
|
private void closeLastFragmentInternalRemoveOld(BaseFragment fragment) {
|
||||||
fragment.onPause();
|
fragment.onPause();
|
||||||
fragment.onFragmentDestroy();
|
fragment.onFragmentDestroy();
|
||||||
fragment.setParentActivity(null);
|
fragment.setParentLayout(null);
|
||||||
fragmentsStack.remove(fragment);
|
fragmentsStack.remove(fragment);
|
||||||
containerViewBack.setVisibility(View.GONE);
|
containerViewBack.setVisibility(View.GONE);
|
||||||
ViewGroup parent = (ViewGroup)containerView.getParent();
|
ViewGroup parent = (ViewGroup)containerView.getParent();
|
||||||
|
@ -572,23 +583,30 @@ public class ActionBarActivity extends Activity {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void closeLastFragment(boolean animated) {
|
public void closeLastFragment(boolean animated) {
|
||||||
if (fragmentsStack.size() <= 1 || checkTransitionAnimation()) {
|
if (delegate != null && !delegate.needCloseLastFragment(this) || checkTransitionAnimation()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (getCurrentFocus() != null) {
|
if (parentActivity.getCurrentFocus() != null) {
|
||||||
AndroidUtilities.hideKeyboard(getCurrentFocus());
|
AndroidUtilities.hideKeyboard(parentActivity.getCurrentFocus());
|
||||||
|
}
|
||||||
|
boolean needAnimation = animated && closeAnimation != null && parentActivity.getSharedPreferences("mainconfig", Activity.MODE_PRIVATE).getBoolean("view_animations", true);
|
||||||
|
if (useAlphaAnimations && fragmentsStack.size() == 1 && alphaCloseAnimation == null) {
|
||||||
|
needAnimation = false;
|
||||||
}
|
}
|
||||||
boolean needAnimation = animated && closeAnimation != null && getSharedPreferences("mainconfig", Activity.MODE_PRIVATE).getBoolean("view_animations", true);
|
|
||||||
final BaseFragment currentFragment = fragmentsStack.get(fragmentsStack.size() - 1);
|
final BaseFragment currentFragment = fragmentsStack.get(fragmentsStack.size() - 1);
|
||||||
BaseFragment previousFragment = fragmentsStack.get(fragmentsStack.size() - 2);
|
BaseFragment previousFragment = null;
|
||||||
|
if (fragmentsStack.size() > 1) {
|
||||||
|
previousFragment = fragmentsStack.get(fragmentsStack.size() - 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (previousFragment != null) {
|
||||||
FrameLayoutAnimationListener temp = containerView;
|
FrameLayoutAnimationListener temp = containerView;
|
||||||
containerView = containerViewBack;
|
containerView = containerViewBack;
|
||||||
containerViewBack = temp;
|
containerViewBack = temp;
|
||||||
containerView.setVisibility(View.VISIBLE);
|
containerView.setVisibility(View.VISIBLE);
|
||||||
|
|
||||||
previousFragment.setParentActivity(this);
|
previousFragment.setParentLayout(this);
|
||||||
View fragmentView = previousFragment.createView(getLayoutInflater(), null);
|
View fragmentView = previousFragment.createView(parentActivity.getLayoutInflater(), null);
|
||||||
containerView.addView(fragmentView);
|
containerView.addView(fragmentView);
|
||||||
ViewGroup.LayoutParams layoutParams = fragmentView.getLayoutParams();
|
ViewGroup.LayoutParams layoutParams = fragmentView.getLayoutParams();
|
||||||
layoutParams.width = FrameLayout.LayoutParams.MATCH_PARENT;
|
layoutParams.width = FrameLayout.LayoutParams.MATCH_PARENT;
|
||||||
|
@ -616,6 +634,34 @@ public class ActionBarActivity extends Activity {
|
||||||
};
|
};
|
||||||
containerViewBack.startAnimation(closeAnimation);
|
containerViewBack.startAnimation(closeAnimation);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
if (needAnimation && useAlphaAnimations) {
|
||||||
|
transitionAnimationStartTime = System.currentTimeMillis();
|
||||||
|
transitionAnimationInProgress = true;
|
||||||
|
alphaCloseAnimation.reset();
|
||||||
|
alphaCloseAnimation2.reset();
|
||||||
|
startAnimation(alphaCloseAnimation);
|
||||||
|
if (backgroundView != null) {
|
||||||
|
backgroundView.startAnimation(alphaCloseAnimation2);
|
||||||
|
}
|
||||||
|
onCloseAnimationEndRunnable = new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
removeFragmentFromStack(currentFragment);
|
||||||
|
setVisibility(GONE);
|
||||||
|
if (backgroundView != null) {
|
||||||
|
backgroundView.setVisibility(GONE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
removeFragmentFromStack(currentFragment);
|
||||||
|
setVisibility(GONE);
|
||||||
|
if (backgroundView != null) {
|
||||||
|
backgroundView.setVisibility(GONE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void showLastFragment() {
|
public void showLastFragment() {
|
||||||
|
@ -623,8 +669,8 @@ public class ActionBarActivity extends Activity {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
BaseFragment previousFragment = fragmentsStack.get(fragmentsStack.size() - 1);
|
BaseFragment previousFragment = fragmentsStack.get(fragmentsStack.size() - 1);
|
||||||
previousFragment.setParentActivity(this);
|
previousFragment.setParentLayout(this);
|
||||||
View fragmentView = previousFragment.createView(getLayoutInflater(), null);
|
View fragmentView = previousFragment.createView(parentActivity.getLayoutInflater(), null);
|
||||||
containerView.addView(fragmentView);
|
containerView.addView(fragmentView);
|
||||||
ViewGroup.LayoutParams layoutParams = fragmentView.getLayoutParams();
|
ViewGroup.LayoutParams layoutParams = fragmentView.getLayoutParams();
|
||||||
layoutParams.width = FrameLayout.LayoutParams.MATCH_PARENT;
|
layoutParams.width = FrameLayout.LayoutParams.MATCH_PARENT;
|
||||||
|
@ -640,19 +686,25 @@ public class ActionBarActivity extends Activity {
|
||||||
public void removeFragmentFromStack(BaseFragment fragment) {
|
public void removeFragmentFromStack(BaseFragment fragment) {
|
||||||
fragment.onPause();
|
fragment.onPause();
|
||||||
fragment.onFragmentDestroy();
|
fragment.onFragmentDestroy();
|
||||||
fragment.setParentActivity(null);
|
fragment.setParentLayout(null);
|
||||||
fragmentsStack.remove(fragment);
|
fragmentsStack.remove(fragment);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void rebuildAllFragmentViews() {
|
public void removeAllFragments() {
|
||||||
for (int a = 0; a < fragmentsStack.size() - 1; a++) {
|
for (int a = 0; a < fragmentsStack.size(); a++) {
|
||||||
fragmentsStack.get(a).setParentActivity(null);
|
removeFragmentFromStack(fragmentsStack.get(a));
|
||||||
fragmentsStack.get(a).setParentActivity(this);
|
a--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void onFinish() {
|
public void rebuildAllFragmentViews(boolean last) {
|
||||||
|
for (int a = 0; a < fragmentsStack.size() - (last ? 0 : 1); a++) {
|
||||||
|
fragmentsStack.get(a).setParentLayout(null);
|
||||||
|
fragmentsStack.get(a).setParentLayout(this);
|
||||||
|
}
|
||||||
|
if (delegate != null) {
|
||||||
|
delegate.onRebuildAllFragments(this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void showActionBar() {
|
public void showActionBar() {
|
||||||
|
@ -672,28 +724,22 @@ public class ActionBarActivity extends Activity {
|
||||||
return super.onKeyUp(keyCode, event);
|
return super.onKeyUp(keyCode, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onOverlayShow(View view, BaseFragment fragment) {
|
protected void onOverlayShow(View view, BaseFragment fragment) {
|
||||||
|
if (delegate != null) {
|
||||||
|
delegate.onOverlayShow(view, fragment);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onActionModeStarted(ActionMode mode) {
|
public void onActionModeStarted(ActionMode mode) {
|
||||||
super.onActionModeStarted(mode);
|
|
||||||
hideActionBar();
|
hideActionBar();
|
||||||
inActionMode = true;
|
inActionMode = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onActionModeFinished(ActionMode mode) {
|
public void onActionModeFinished(ActionMode mode) {
|
||||||
super.onActionModeFinished(mode);
|
|
||||||
showActionBar();
|
showActionBar();
|
||||||
inActionMode = false;
|
inActionMode = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean onPreIme() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void onCloseAnimationEnd(boolean post) {
|
private void onCloseAnimationEnd(boolean post) {
|
||||||
if (transitionAnimationInProgress && onCloseAnimationEndRunnable != null) {
|
if (transitionAnimationInProgress && onCloseAnimationEndRunnable != null) {
|
||||||
transitionAnimationInProgress = false;
|
transitionAnimationInProgress = false;
|
||||||
|
@ -730,12 +776,6 @@ public class ActionBarActivity extends Activity {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onAnimationEnd() {
|
|
||||||
onCloseAnimationEnd(false);
|
|
||||||
onOpenAnimationEnd(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void startActivityForResult(final Intent intent, final int requestCode) {
|
public void startActivityForResult(final Intent intent, final int requestCode) {
|
||||||
if (transitionAnimationInProgress) {
|
if (transitionAnimationInProgress) {
|
||||||
if (onCloseAnimationEndRunnable != null) {
|
if (onCloseAnimationEndRunnable != null) {
|
||||||
|
@ -747,12 +787,26 @@ public class ActionBarActivity extends Activity {
|
||||||
}
|
}
|
||||||
containerView.invalidate();
|
containerView.invalidate();
|
||||||
if (intent != null) {
|
if (intent != null) {
|
||||||
super.startActivityForResult(intent, requestCode);
|
parentActivity.startActivityForResult(intent, requestCode);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (intent != null) {
|
if (intent != null) {
|
||||||
super.startActivityForResult(intent, requestCode);
|
parentActivity.startActivityForResult(intent, requestCode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setUseAlphaAnimations(boolean value) {
|
||||||
|
useAlphaAnimations = value;
|
||||||
|
if (useAlphaAnimations) {
|
||||||
|
alphaOpenAnimation = AnimationUtils.loadAnimation(getContext(), R.anim.icon_anim_fade_in);
|
||||||
|
alphaOpenAnimation2 = AnimationUtils.loadAnimation(getContext(), R.anim.icon_anim_fade_in);
|
||||||
|
alphaCloseAnimation = AnimationUtils.loadAnimation(getContext(), R.anim.icon_anim_fade_out);
|
||||||
|
alphaCloseAnimation2 = AnimationUtils.loadAnimation(getContext(), R.anim.icon_anim_fade_out);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBackgroundView(View view) {
|
||||||
|
backgroundView = view;
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -61,7 +61,11 @@ public class ActionBarMenu extends LinearLayout {
|
||||||
}
|
}
|
||||||
|
|
||||||
public ActionBarMenuItem addItem(int id, int icon) {
|
public ActionBarMenuItem addItem(int id, int icon) {
|
||||||
ActionBarMenuItem menuItem = new ActionBarMenuItem(getContext(), this, parentActionBar, parentActionBarLayer.itemsBackgroundResourceId);
|
return addItem(id, icon, parentActionBarLayer.itemsBackgroundResourceId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ActionBarMenuItem addItem(int id, int icon, int backgroundResource) {
|
||||||
|
ActionBarMenuItem menuItem = new ActionBarMenuItem(getContext(), this, parentActionBar, backgroundResource);
|
||||||
menuItem.setTag(id);
|
menuItem.setTag(id);
|
||||||
menuItem.setScaleType(ImageView.ScaleType.CENTER);
|
menuItem.setScaleType(ImageView.ScaleType.CENTER);
|
||||||
menuItem.setImageResource(icon);
|
menuItem.setImageResource(icon);
|
||||||
|
|
|
@ -14,8 +14,12 @@ import android.os.Build;
|
||||||
import android.text.Editable;
|
import android.text.Editable;
|
||||||
import android.text.TextWatcher;
|
import android.text.TextWatcher;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
|
import android.view.ActionMode;
|
||||||
|
import android.view.ContextMenu;
|
||||||
import android.view.Gravity;
|
import android.view.Gravity;
|
||||||
import android.view.KeyEvent;
|
import android.view.KeyEvent;
|
||||||
|
import android.view.Menu;
|
||||||
|
import android.view.MenuItem;
|
||||||
import android.view.MotionEvent;
|
import android.view.MotionEvent;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.WindowManager;
|
import android.view.WindowManager;
|
||||||
|
@ -28,7 +32,6 @@ import android.widget.TextView;
|
||||||
|
|
||||||
import org.telegram.android.AndroidUtilities;
|
import org.telegram.android.AndroidUtilities;
|
||||||
import org.telegram.messenger.R;
|
import org.telegram.messenger.R;
|
||||||
import org.telegram.messenger.Utilities;
|
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
|
|
||||||
|
@ -257,6 +260,30 @@ public class ActionBarMenuItem extends ImageView {
|
||||||
searchField.setBackgroundResource(R.drawable.search_light_states);
|
searchField.setBackgroundResource(R.drawable.search_light_states);
|
||||||
searchField.setPadding(AndroidUtilities.dp(6), 0, AndroidUtilities.dp(6), 0);
|
searchField.setPadding(AndroidUtilities.dp(6), 0, AndroidUtilities.dp(6), 0);
|
||||||
searchField.setInputType(EditorInfo.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
|
searchField.setInputType(EditorInfo.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
|
||||||
|
if (android.os.Build.VERSION.SDK_INT < 11) {
|
||||||
|
searchField.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {
|
||||||
|
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
|
||||||
|
menu.clear();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
searchField.setCustomSelectionActionModeCallback(new ActionMode.Callback() {
|
||||||
|
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onDestroyActionMode(ActionMode mode) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
searchField.setOnEditorActionListener(new TextView.OnEditorActionListener() {
|
searchField.setOnEditorActionListener(new TextView.OnEditorActionListener() {
|
||||||
@Override
|
@Override
|
||||||
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
|
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
|
|
||||||
package org.telegram.ui.Views.ActionBar;
|
package org.telegram.ui.Views.ActionBar;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
@ -23,7 +24,7 @@ import org.telegram.messenger.R;
|
||||||
public class BaseFragment {
|
public class BaseFragment {
|
||||||
private boolean isFinished = false;
|
private boolean isFinished = false;
|
||||||
protected View fragmentView;
|
protected View fragmentView;
|
||||||
private ActionBarActivity parentActivity;
|
protected ActionBarLayout parentLayout;
|
||||||
protected ActionBarLayer actionBarLayer;
|
protected ActionBarLayer actionBarLayer;
|
||||||
protected int classGuid = 0;
|
protected int classGuid = 0;
|
||||||
protected Bundle arguments;
|
protected Bundle arguments;
|
||||||
|
@ -47,9 +48,9 @@ public class BaseFragment {
|
||||||
return arguments;
|
return arguments;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setParentActivity(ActionBarActivity activity) {
|
public void setParentLayout(ActionBarLayout layout) {
|
||||||
if (parentActivity != activity) {
|
if (parentLayout != layout) {
|
||||||
parentActivity = activity;
|
parentLayout = layout;
|
||||||
if (fragmentView != null) {
|
if (fragmentView != null) {
|
||||||
ViewGroup parent = (ViewGroup) fragmentView.getParent();
|
ViewGroup parent = (ViewGroup) fragmentView.getParent();
|
||||||
if (parent != null) {
|
if (parent != null) {
|
||||||
|
@ -57,11 +58,11 @@ public class BaseFragment {
|
||||||
}
|
}
|
||||||
fragmentView = null;
|
fragmentView = null;
|
||||||
}
|
}
|
||||||
if (parentActivity != null) {
|
if (parentLayout != null) {
|
||||||
if (actionBarLayer != null) {
|
if (actionBarLayer != null) {
|
||||||
actionBarLayer.onDestroy();
|
actionBarLayer.onDestroy();
|
||||||
}
|
}
|
||||||
actionBarLayer = parentActivity.getInternalActionBar().createLayer();
|
actionBarLayer = parentLayout.getInternalActionBar().createLayer();
|
||||||
actionBarLayer.parentFragment = this;
|
actionBarLayer.parentFragment = this;
|
||||||
actionBarLayer.setBackgroundResource(R.color.header);
|
actionBarLayer.setBackgroundResource(R.color.header);
|
||||||
actionBarLayer.setItemsBackground(R.drawable.bar_selector);
|
actionBarLayer.setItemsBackground(R.drawable.bar_selector);
|
||||||
|
@ -74,17 +75,17 @@ public class BaseFragment {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void finishFragment(boolean animated) {
|
public void finishFragment(boolean animated) {
|
||||||
if (isFinished || parentActivity == null) {
|
if (isFinished || parentLayout == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
parentActivity.closeLastFragment(animated);
|
parentLayout.closeLastFragment(animated);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removeSelfFromStack() {
|
public void removeSelfFromStack() {
|
||||||
if (isFinished || parentActivity == null) {
|
if (isFinished || parentLayout == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
parentActivity.removeFragmentFromStack(this);
|
parentLayout.removeFragmentFromStack(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean onFragmentCreate() {
|
public boolean onFragmentCreate() {
|
||||||
|
@ -139,39 +140,39 @@ public class BaseFragment {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void presentFragment(BaseFragment fragment) {
|
public void presentFragment(BaseFragment fragment) {
|
||||||
if (parentActivity == null) {
|
if (parentLayout == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
parentActivity.presentFragment(fragment);
|
parentLayout.presentFragment(fragment);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void presentFragment(BaseFragment fragment, boolean removeLast) {
|
public void presentFragment(BaseFragment fragment, boolean removeLast) {
|
||||||
if (parentActivity == null) {
|
if (parentLayout == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
parentActivity.presentFragment(fragment, removeLast);
|
parentLayout.presentFragment(fragment, removeLast);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void presentFragment(BaseFragment fragment, boolean removeLast, boolean forceWithoutAnimation) {
|
public void presentFragment(BaseFragment fragment, boolean removeLast, boolean forceWithoutAnimation) {
|
||||||
if (parentActivity == null) {
|
if (parentLayout == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
parentActivity.presentFragment(fragment, removeLast, forceWithoutAnimation);
|
parentLayout.presentFragment(fragment, removeLast, forceWithoutAnimation);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ActionBarActivity getParentActivity() {
|
public Activity getParentActivity() {
|
||||||
return parentActivity;
|
return parentLayout.parentActivity;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void showActionBar() {
|
public void showActionBar() {
|
||||||
if (parentActivity != null) {
|
if (parentLayout != null) {
|
||||||
parentActivity.showActionBar();
|
parentLayout.showActionBar();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void hideActionBar() {
|
public void hideActionBar() {
|
||||||
if (parentActivity != null) {
|
if (parentLayout != null) {
|
||||||
parentActivity.hideActionBar();
|
parentLayout.hideActionBar();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -198,7 +199,7 @@ public class BaseFragment {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void showAlertDialog(AlertDialog.Builder builder) {
|
protected void showAlertDialog(AlertDialog.Builder builder) {
|
||||||
if (parentActivity == null || parentActivity.checkTransitionAnimation() || parentActivity.animationInProgress || parentActivity.startedTracking) {
|
if (parentLayout == null || parentLayout.checkTransitionAnimation() || parentLayout.animationInProgress || parentLayout.startedTracking) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -451,7 +451,7 @@ public class ChatActivityEnterView implements NotificationCenter.NotificationCen
|
||||||
}
|
}
|
||||||
emojiPopup.setHeight(View.MeasureSpec.makeMeasureSpec(currentHeight, View.MeasureSpec.EXACTLY));
|
emojiPopup.setHeight(View.MeasureSpec.makeMeasureSpec(currentHeight, View.MeasureSpec.EXACTLY));
|
||||||
if (sizeNotifierRelativeLayout != null) {
|
if (sizeNotifierRelativeLayout != null) {
|
||||||
emojiPopup.setWidth(View.MeasureSpec.makeMeasureSpec(sizeNotifierRelativeLayout.getWidth(), View.MeasureSpec.EXACTLY));
|
emojiPopup.setWidth(View.MeasureSpec.makeMeasureSpec(AndroidUtilities.displaySize.x, View.MeasureSpec.EXACTLY));
|
||||||
}
|
}
|
||||||
|
|
||||||
emojiPopup.showAtLocation(parentActivity.getWindow().getDecorView(), 83, 0, 0);
|
emojiPopup.showAtLocation(parentActivity.getWindow().getDecorView(), 83, 0, 0);
|
||||||
|
@ -585,7 +585,7 @@ public class ChatActivityEnterView implements NotificationCenter.NotificationCen
|
||||||
if (emojiPopup != null && emojiPopup.isShowing()) {
|
if (emojiPopup != null && emojiPopup.isShowing()) {
|
||||||
WindowManager wm = (WindowManager) ApplicationLoader.applicationContext.getSystemService(Context.WINDOW_SERVICE);
|
WindowManager wm = (WindowManager) ApplicationLoader.applicationContext.getSystemService(Context.WINDOW_SERVICE);
|
||||||
final WindowManager.LayoutParams layoutParams = (WindowManager.LayoutParams)emojiPopup.getContentView().getLayoutParams();
|
final WindowManager.LayoutParams layoutParams = (WindowManager.LayoutParams)emojiPopup.getContentView().getLayoutParams();
|
||||||
layoutParams.width = sizeNotifierRelativeLayout.getWidth();
|
layoutParams.width = AndroidUtilities.displaySize.x;
|
||||||
if (rotation == Surface.ROTATION_270 || rotation == Surface.ROTATION_90) {
|
if (rotation == Surface.ROTATION_270 || rotation == Surface.ROTATION_90) {
|
||||||
layoutParams.height = keyboardHeightLand;
|
layoutParams.height = keyboardHeightLand;
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -104,7 +104,11 @@ public class EmojiView extends LinearLayout {
|
||||||
setOrientation(LinearLayout.VERTICAL);
|
setOrientation(LinearLayout.VERTICAL);
|
||||||
for (int i = 0; i < Emoji.data.length; i++) {
|
for (int i = 0; i < Emoji.data.length; i++) {
|
||||||
GridView gridView = new GridView(getContext());
|
GridView gridView = new GridView(getContext());
|
||||||
gridView.setColumnWidth(AndroidUtilities.dpf(45.0f));
|
if (AndroidUtilities.isTablet()) {
|
||||||
|
gridView.setColumnWidth(AndroidUtilities.dp(60));
|
||||||
|
} else {
|
||||||
|
gridView.setColumnWidth(AndroidUtilities.dp(45));
|
||||||
|
}
|
||||||
gridView.setNumColumns(-1);
|
gridView.setNumColumns(-1);
|
||||||
views.add(gridView);
|
views.add(gridView);
|
||||||
|
|
||||||
|
@ -122,7 +126,7 @@ public class EmojiView extends LinearLayout {
|
||||||
tabs.setIndicatorColor(0xff33b5e5);
|
tabs.setIndicatorColor(0xff33b5e5);
|
||||||
tabs.setIndicatorHeight(AndroidUtilities.dpf(2.0f));
|
tabs.setIndicatorHeight(AndroidUtilities.dpf(2.0f));
|
||||||
tabs.setUnderlineHeight(AndroidUtilities.dpf(2.0f));
|
tabs.setUnderlineHeight(AndroidUtilities.dpf(2.0f));
|
||||||
tabs.setUnderlineColor(1711276032);
|
tabs.setUnderlineColor(0x66000000);
|
||||||
tabs.setTabBackground(0);
|
tabs.setTabBackground(0);
|
||||||
LinearLayout localLinearLayout = new LinearLayout(getContext());
|
LinearLayout localLinearLayout = new LinearLayout(getContext());
|
||||||
localLinearLayout.setOrientation(LinearLayout.HORIZONTAL);
|
localLinearLayout.setOrientation(LinearLayout.HORIZONTAL);
|
||||||
|
@ -138,7 +142,7 @@ public class EmojiView extends LinearLayout {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
localLinearLayout.addView(localImageView, new LinearLayout.LayoutParams(AndroidUtilities.dpf(61.0f), LayoutParams.MATCH_PARENT));
|
localLinearLayout.addView(localImageView, new LinearLayout.LayoutParams(AndroidUtilities.dp(61), LayoutParams.MATCH_PARENT));
|
||||||
recentsWrap = new FrameLayout(getContext());
|
recentsWrap = new FrameLayout(getContext());
|
||||||
recentsWrap.addView(views.get(0));
|
recentsWrap.addView(views.get(0));
|
||||||
TextView localTextView = new TextView(getContext());
|
TextView localTextView = new TextView(getContext());
|
||||||
|
|
|
@ -1,47 +0,0 @@
|
||||||
/*
|
|
||||||
* This is the source code of Telegram for Android v. 1.7.x.
|
|
||||||
* It is licensed under GNU GPL v. 2 or later.
|
|
||||||
* You should have received a copy of the license in this archive (see LICENSE).
|
|
||||||
*
|
|
||||||
* Copyright Nikolai Kudashov, 2013-2014.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.telegram.ui.Views;
|
|
||||||
|
|
||||||
import android.graphics.Canvas;
|
|
||||||
import android.graphics.Paint;
|
|
||||||
import android.graphics.RectF;
|
|
||||||
|
|
||||||
import org.telegram.android.AndroidUtilities;
|
|
||||||
|
|
||||||
public class RoundProgressView {
|
|
||||||
private Paint paint;
|
|
||||||
|
|
||||||
public float currentProgress = 0;
|
|
||||||
public RectF rect = new RectF();
|
|
||||||
|
|
||||||
public RoundProgressView() {
|
|
||||||
paint = new Paint();
|
|
||||||
paint.setColor(0xffffffff);
|
|
||||||
paint.setStyle(Paint.Style.STROKE);
|
|
||||||
paint.setStrokeWidth(AndroidUtilities.dp(2));
|
|
||||||
paint.setAntiAlias(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setColor(int color) {
|
|
||||||
paint.setColor(color);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setProgress(float progress) {
|
|
||||||
currentProgress = progress;
|
|
||||||
if (currentProgress < 0) {
|
|
||||||
currentProgress = 0;
|
|
||||||
} else if (currentProgress > 1) {
|
|
||||||
currentProgress = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void draw(Canvas canvas) {
|
|
||||||
canvas.drawArc(rect, -90, 360 * currentProgress, false, paint);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -65,13 +65,13 @@ public class SizeNotifierRelativeLayout extends RelativeLayout {
|
||||||
@Override
|
@Override
|
||||||
protected void onDraw(Canvas canvas) {
|
protected void onDraw(Canvas canvas) {
|
||||||
if (backgroundDrawable != null) {
|
if (backgroundDrawable != null) {
|
||||||
float scaleX = (float)AndroidUtilities.displaySize.x / (float)backgroundDrawable.getIntrinsicWidth();
|
float scaleX = (float)getMeasuredWidth() / (float)backgroundDrawable.getIntrinsicWidth();
|
||||||
float scaleY = (float)AndroidUtilities.displaySize.y / (float)backgroundDrawable.getIntrinsicHeight();
|
float scaleY = (float)getMeasuredHeight() / (float)backgroundDrawable.getIntrinsicHeight();
|
||||||
float scale = scaleX < scaleY ? scaleY : scaleX;
|
float scale = scaleX < scaleY ? scaleY : scaleX;
|
||||||
int width = (int)Math.ceil(backgroundDrawable.getIntrinsicWidth() * scale);
|
int width = (int)Math.ceil(backgroundDrawable.getIntrinsicWidth() * scale);
|
||||||
int height = (int)Math.ceil(backgroundDrawable.getIntrinsicHeight() * scale);
|
int height = (int)Math.ceil(backgroundDrawable.getIntrinsicHeight() * scale);
|
||||||
int x = (AndroidUtilities.displaySize.x - width) / 2;
|
int x = (getMeasuredWidth() - width) / 2;
|
||||||
int y = (AndroidUtilities.displaySize.y - height) / 2;
|
int y = (getMeasuredHeight() - height) / 2;
|
||||||
backgroundDrawable.setBounds(x, y, x + width, y + height);
|
backgroundDrawable.setBounds(x, y, x + width, y + height);
|
||||||
backgroundDrawable.draw(canvas);
|
backgroundDrawable.draw(canvas);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -0,0 +1,125 @@
|
||||||
|
/*
|
||||||
|
* This is the source code of Telegram for Android v. 1.7.x.
|
||||||
|
* It is licensed under GNU GPL v. 2 or later.
|
||||||
|
* You should have received a copy of the license in this archive (see LICENSE).
|
||||||
|
*
|
||||||
|
* Copyright Nikolai Kudashov, 2013-2014.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.telegram.ui.Views;
|
||||||
|
|
||||||
|
import android.graphics.Canvas;
|
||||||
|
import android.graphics.ColorFilter;
|
||||||
|
import android.graphics.Paint;
|
||||||
|
import android.graphics.drawable.Drawable;
|
||||||
|
import android.view.animation.DecelerateInterpolator;
|
||||||
|
|
||||||
|
import org.telegram.android.AndroidUtilities;
|
||||||
|
|
||||||
|
public class TypingDotsDrawable extends Drawable {
|
||||||
|
private boolean isChat = false;
|
||||||
|
private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
|
||||||
|
private float[] scales = new float[3];
|
||||||
|
private float[] startTimes = new float[] {0, 150, 300};
|
||||||
|
private float[] elapsedTimes = new float[] {0, 0, 0};
|
||||||
|
private long lastUpdateTime = 0;
|
||||||
|
private boolean started = false;
|
||||||
|
private DecelerateInterpolator decelerateInterpolator = new DecelerateInterpolator();
|
||||||
|
|
||||||
|
public TypingDotsDrawable() {
|
||||||
|
super();
|
||||||
|
paint.setColor(0xffd7e8f7);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIsChat(boolean value) {
|
||||||
|
isChat = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void update() {
|
||||||
|
long newTime = System.currentTimeMillis();
|
||||||
|
long dt = newTime - lastUpdateTime;
|
||||||
|
lastUpdateTime = newTime;
|
||||||
|
|
||||||
|
for (int a = 0; a < 3; a++) {
|
||||||
|
elapsedTimes[a] += dt;
|
||||||
|
float timeSinceStart = elapsedTimes[a] - startTimes[a];
|
||||||
|
if (timeSinceStart > 0) {
|
||||||
|
if (timeSinceStart <= 320) {
|
||||||
|
float diff = decelerateInterpolator.getInterpolation(timeSinceStart / 320.0f);
|
||||||
|
scales[a] = 1.33f + diff;
|
||||||
|
} else if (timeSinceStart <= 640) {
|
||||||
|
float diff = decelerateInterpolator.getInterpolation((timeSinceStart - 320.0f) / 320.0f);
|
||||||
|
scales[a] = 1.33f + (1 - diff);
|
||||||
|
} else if (timeSinceStart >= 800) {
|
||||||
|
elapsedTimes[a] = 0;
|
||||||
|
startTimes[a] = 0;
|
||||||
|
scales[a] = 1.33f;
|
||||||
|
} else {
|
||||||
|
scales[a] = 1.33f;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
scales[a] = 1.33f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
invalidateSelf();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void start() {
|
||||||
|
lastUpdateTime = System.currentTimeMillis();
|
||||||
|
started = true;
|
||||||
|
invalidateSelf();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void stop() {
|
||||||
|
for (int a = 0; a < 3; a++) {
|
||||||
|
elapsedTimes[a] = 0;
|
||||||
|
scales[a] = 1.33f;
|
||||||
|
}
|
||||||
|
startTimes[0] = 0;
|
||||||
|
startTimes[1] = 150;
|
||||||
|
startTimes[2] = 300;
|
||||||
|
started = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void draw(Canvas canvas) {
|
||||||
|
int y = 0;
|
||||||
|
if (isChat) {
|
||||||
|
y = AndroidUtilities.dp(6);
|
||||||
|
} else {
|
||||||
|
y = AndroidUtilities.dp(7);
|
||||||
|
}
|
||||||
|
canvas.drawCircle(AndroidUtilities.dp(3), y, scales[0] * AndroidUtilities.density, paint);
|
||||||
|
canvas.drawCircle(AndroidUtilities.dp(9), y, scales[1] * AndroidUtilities.density, paint);
|
||||||
|
canvas.drawCircle(AndroidUtilities.dp(15), y, scales[2] * AndroidUtilities.density, paint);
|
||||||
|
if (started) {
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setAlpha(int alpha) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setColorFilter(ColorFilter cf) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getOpacity() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getIntrinsicWidth() {
|
||||||
|
return AndroidUtilities.dp(18);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getIntrinsicHeight() {
|
||||||
|
return AndroidUtilities.dp(10);
|
||||||
|
}
|
||||||
|
}
|
|
@ -22,7 +22,6 @@ import org.telegram.messenger.R;
|
||||||
public class VideoSeekBarView extends View {
|
public class VideoSeekBarView extends View {
|
||||||
|
|
||||||
private static Drawable thumbDrawable1;
|
private static Drawable thumbDrawable1;
|
||||||
private static Drawable thumbDrawablePressed1;
|
|
||||||
private static Paint innerPaint1 = new Paint();
|
private static Paint innerPaint1 = new Paint();
|
||||||
private static int thumbWidth;
|
private static int thumbWidth;
|
||||||
private static int thumbHeight;
|
private static int thumbHeight;
|
||||||
|
@ -37,8 +36,7 @@ public class VideoSeekBarView extends View {
|
||||||
|
|
||||||
private void init(Context context) {
|
private void init(Context context) {
|
||||||
if (thumbDrawable1 == null) {
|
if (thumbDrawable1 == null) {
|
||||||
thumbDrawable1 = context.getResources().getDrawable(R.drawable.playback);
|
thumbDrawable1 = context.getResources().getDrawable(R.drawable.videolapse);
|
||||||
thumbDrawablePressed1 = context.getResources().getDrawable(R.drawable.playback_active);
|
|
||||||
innerPaint1.setColor(0x99999999);
|
innerPaint1.setColor(0x99999999);
|
||||||
thumbWidth = thumbDrawable1.getIntrinsicWidth();
|
thumbWidth = thumbDrawable1.getIntrinsicWidth();
|
||||||
thumbHeight = thumbDrawable1.getIntrinsicHeight();
|
thumbHeight = thumbDrawable1.getIntrinsicHeight();
|
||||||
|
@ -118,16 +116,10 @@ public class VideoSeekBarView extends View {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onDraw(Canvas canvas) {
|
protected void onDraw(Canvas canvas) {
|
||||||
Drawable thumb = null;
|
|
||||||
if (!pressed) {
|
|
||||||
thumb = thumbDrawable1;
|
|
||||||
} else {
|
|
||||||
thumb = thumbDrawablePressed1;
|
|
||||||
}
|
|
||||||
int y = (getMeasuredHeight() - thumbHeight) / 2;
|
int y = (getMeasuredHeight() - thumbHeight) / 2;
|
||||||
int thumbX = (int)((getMeasuredWidth() - thumbWidth) * progress);
|
int thumbX = (int)((getMeasuredWidth() - thumbWidth) * progress);
|
||||||
canvas.drawRect(thumbWidth / 2, getMeasuredHeight() / 2 - AndroidUtilities.dp(1), getMeasuredWidth() - thumbWidth / 2, getMeasuredHeight() / 2 + AndroidUtilities.dp(1), innerPaint1);
|
canvas.drawRect(thumbWidth / 2, getMeasuredHeight() / 2 - AndroidUtilities.dp(1), getMeasuredWidth() - thumbWidth / 2, getMeasuredHeight() / 2 + AndroidUtilities.dp(1), innerPaint1);
|
||||||
thumb.setBounds(thumbX, y, thumbX + thumbWidth, y + thumbHeight);
|
thumbDrawable1.setBounds(thumbX, y, thumbX + thumbWidth, y + thumbHeight);
|
||||||
thumb.draw(canvas);
|
thumbDrawable1.draw(canvas);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,6 +14,7 @@ import android.graphics.Bitmap;
|
||||||
import android.graphics.Canvas;
|
import android.graphics.Canvas;
|
||||||
import android.graphics.Paint;
|
import android.graphics.Paint;
|
||||||
import android.graphics.Rect;
|
import android.graphics.Rect;
|
||||||
|
import android.graphics.drawable.Drawable;
|
||||||
import android.media.MediaMetadataRetriever;
|
import android.media.MediaMetadataRetriever;
|
||||||
import android.os.AsyncTask;
|
import android.os.AsyncTask;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
|
@ -22,6 +23,7 @@ import android.view.View;
|
||||||
|
|
||||||
import org.telegram.android.AndroidUtilities;
|
import org.telegram.android.AndroidUtilities;
|
||||||
import org.telegram.messenger.FileLog;
|
import org.telegram.messenger.FileLog;
|
||||||
|
import org.telegram.messenger.R;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
@ -44,32 +46,34 @@ public class VideoTimelineView extends View {
|
||||||
private int frameWidth = 0;
|
private int frameWidth = 0;
|
||||||
private int frameHeight = 0;
|
private int frameHeight = 0;
|
||||||
private int framesToLoad = 0;
|
private int framesToLoad = 0;
|
||||||
|
private Drawable pickDrawable = null;
|
||||||
|
|
||||||
public abstract interface VideoTimelineViewDelegate {
|
public abstract interface VideoTimelineViewDelegate {
|
||||||
public void onLeftProgressChanged(float progress);
|
public void onLeftProgressChanged(float progress);
|
||||||
public void onRifhtProgressChanged(float progress);
|
public void onRifhtProgressChanged(float progress);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void init() {
|
private void init(Context context) {
|
||||||
paint = new Paint();
|
paint = new Paint();
|
||||||
paint.setColor(0xff66d1ee);
|
paint.setColor(0xff66d1ee);
|
||||||
paint2 = new Paint();
|
paint2 = new Paint();
|
||||||
paint2.setColor(0x2266d1ee);
|
paint2.setColor(0x7f000000);
|
||||||
|
pickDrawable = getResources().getDrawable(R.drawable.videotrimmer);
|
||||||
}
|
}
|
||||||
|
|
||||||
public VideoTimelineView(Context context) {
|
public VideoTimelineView(Context context) {
|
||||||
super(context);
|
super(context);
|
||||||
init();
|
init(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
public VideoTimelineView(Context context, AttributeSet attrs) {
|
public VideoTimelineView(Context context, AttributeSet attrs) {
|
||||||
super(context, attrs);
|
super(context, attrs);
|
||||||
init();
|
init(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
public VideoTimelineView(Context context, AttributeSet attrs, int defStyleAttr) {
|
public VideoTimelineView(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||||
super(context, attrs, defStyleAttr);
|
super(context, attrs, defStyleAttr);
|
||||||
init();
|
init(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
public float getLeftProgress() {
|
public float getLeftProgress() {
|
||||||
|
@ -88,9 +92,9 @@ public class VideoTimelineView extends View {
|
||||||
float x = event.getX();
|
float x = event.getX();
|
||||||
float y = event.getY();
|
float y = event.getY();
|
||||||
|
|
||||||
int width = getMeasuredWidth() - AndroidUtilities.dp(12);
|
int width = getMeasuredWidth() - AndroidUtilities.dp(32);
|
||||||
int startX = (int)(width * progressLeft) + AndroidUtilities.dp(3);
|
int startX = (int)(width * progressLeft) + AndroidUtilities.dp(16);
|
||||||
int endX = (int)(width * progressRight) + AndroidUtilities.dp(9);
|
int endX = (int)(width * progressRight) + AndroidUtilities.dp(16);
|
||||||
|
|
||||||
if (event.getAction() == MotionEvent.ACTION_DOWN) {
|
if (event.getAction() == MotionEvent.ACTION_DOWN) {
|
||||||
int additionWidth = AndroidUtilities.dp(12);
|
int additionWidth = AndroidUtilities.dp(12);
|
||||||
|
@ -118,12 +122,12 @@ public class VideoTimelineView extends View {
|
||||||
} else if (event.getAction() == MotionEvent.ACTION_MOVE) {
|
} else if (event.getAction() == MotionEvent.ACTION_MOVE) {
|
||||||
if (pressedLeft) {
|
if (pressedLeft) {
|
||||||
startX = (int)(x - pressDx);
|
startX = (int)(x - pressDx);
|
||||||
if (startX < AndroidUtilities.dp(3)) {
|
if (startX < AndroidUtilities.dp(16)) {
|
||||||
startX = AndroidUtilities.dp(3);
|
startX = AndroidUtilities.dp(16);
|
||||||
} else if (startX > endX - AndroidUtilities.dp(6)) {
|
} else if (startX > endX) {
|
||||||
startX = endX - AndroidUtilities.dp(6);
|
startX = endX;
|
||||||
}
|
}
|
||||||
progressLeft = (float)(startX - AndroidUtilities.dp(3)) / (float)width;
|
progressLeft = (float)(startX - AndroidUtilities.dp(16)) / (float)width;
|
||||||
if (delegate != null) {
|
if (delegate != null) {
|
||||||
delegate.onLeftProgressChanged(progressLeft);
|
delegate.onLeftProgressChanged(progressLeft);
|
||||||
}
|
}
|
||||||
|
@ -131,12 +135,12 @@ public class VideoTimelineView extends View {
|
||||||
return true;
|
return true;
|
||||||
} else if (pressedRight) {
|
} else if (pressedRight) {
|
||||||
endX = (int)(x - pressDx);
|
endX = (int)(x - pressDx);
|
||||||
if (endX < startX + AndroidUtilities.dp(6)) {
|
if (endX < startX) {
|
||||||
endX = startX + AndroidUtilities.dp(6);
|
endX = startX;
|
||||||
} else if (endX > width + AndroidUtilities.dp(9)) {
|
} else if (endX > width + AndroidUtilities.dp(16)) {
|
||||||
endX = width + AndroidUtilities.dp(9);
|
endX = width + AndroidUtilities.dp(16);
|
||||||
}
|
}
|
||||||
progressRight = (float)(endX - AndroidUtilities.dp(9)) / (float)width;
|
progressRight = (float)(endX - AndroidUtilities.dp(16)) / (float)width;
|
||||||
if (delegate != null) {
|
if (delegate != null) {
|
||||||
delegate.onRifhtProgressChanged(progressRight);
|
delegate.onRifhtProgressChanged(progressRight);
|
||||||
}
|
}
|
||||||
|
@ -163,9 +167,9 @@ public class VideoTimelineView extends View {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (frameNum == 0) {
|
if (frameNum == 0) {
|
||||||
frameHeight = getMeasuredHeight() - AndroidUtilities.dp(4);
|
frameHeight = AndroidUtilities.dp(40);
|
||||||
framesToLoad = getMeasuredWidth() / frameHeight;
|
framesToLoad = (getMeasuredWidth() - AndroidUtilities.dp(16)) / frameHeight;
|
||||||
frameWidth = (int)Math.ceil((float)getMeasuredWidth() / (float)framesToLoad);
|
frameWidth = (int)Math.ceil((float)(getMeasuredWidth() - AndroidUtilities.dp(16)) / (float)framesToLoad);
|
||||||
frameTimeOffset = videoLength / framesToLoad;
|
frameTimeOffset = videoLength / framesToLoad;
|
||||||
}
|
}
|
||||||
currentTask = new AsyncTask<Integer, Integer, Bitmap>() {
|
currentTask = new AsyncTask<Integer, Integer, Bitmap>() {
|
||||||
|
@ -262,24 +266,39 @@ public class VideoTimelineView extends View {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onDraw(Canvas canvas) {
|
protected void onDraw(Canvas canvas) {
|
||||||
|
int width = getMeasuredWidth() - AndroidUtilities.dp(36);
|
||||||
|
int startX = (int)(width * progressLeft) + AndroidUtilities.dp(16);
|
||||||
|
int endX = (int)(width * progressRight) + AndroidUtilities.dp(16);
|
||||||
|
|
||||||
|
canvas.save();
|
||||||
|
canvas.clipRect(AndroidUtilities.dp(16), 0, width + AndroidUtilities.dp(20), AndroidUtilities.dp(44));
|
||||||
if (frames.isEmpty() && currentTask == null) {
|
if (frames.isEmpty() && currentTask == null) {
|
||||||
reloadFrames(0);
|
reloadFrames(0);
|
||||||
} else {
|
} else {
|
||||||
int offset = 0;
|
int offset = 0;
|
||||||
for (Bitmap bitmap : frames) {
|
for (Bitmap bitmap : frames) {
|
||||||
if (bitmap != null) {
|
if (bitmap != null) {
|
||||||
canvas.drawBitmap(bitmap, offset * frameWidth, AndroidUtilities.dp(2), null);
|
canvas.drawBitmap(bitmap, AndroidUtilities.dp(16) + offset * frameWidth, AndroidUtilities.dp(2), null);
|
||||||
}
|
}
|
||||||
offset++;
|
offset++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
int width = getMeasuredWidth() - AndroidUtilities.dp(12);
|
|
||||||
int startX = (int)(width * progressLeft);
|
canvas.drawRect(AndroidUtilities.dp(16), AndroidUtilities.dp(2), startX, AndroidUtilities.dp(42), paint2);
|
||||||
int endX = (int)(width * progressRight);
|
canvas.drawRect(endX + AndroidUtilities.dp(4), AndroidUtilities.dp(2), AndroidUtilities.dp(16) + width + AndroidUtilities.dp(4), AndroidUtilities.dp(42), paint2);
|
||||||
canvas.drawRect(startX, 0, startX + AndroidUtilities.dp(6), getMeasuredHeight(), paint);
|
|
||||||
canvas.drawRect(endX + AndroidUtilities.dp(6), 0, endX + AndroidUtilities.dp(12), getMeasuredHeight(), paint);
|
canvas.drawRect(startX, 0, startX + AndroidUtilities.dp(2), AndroidUtilities.dp(44), paint);
|
||||||
canvas.drawRect(startX + AndroidUtilities.dp(6), AndroidUtilities.dp(4), endX + AndroidUtilities.dp(6), getMeasuredHeight() - AndroidUtilities.dp(4), paint2);
|
canvas.drawRect(endX + AndroidUtilities.dp(2), 0, endX + AndroidUtilities.dp(4), AndroidUtilities.dp(44), paint);
|
||||||
canvas.drawRect(startX + AndroidUtilities.dp(6), AndroidUtilities.dp(2), endX + AndroidUtilities.dp(6), AndroidUtilities.dp(4), paint);
|
canvas.drawRect(startX + AndroidUtilities.dp(2), 0, endX + AndroidUtilities.dp(4), AndroidUtilities.dp(2), paint);
|
||||||
canvas.drawRect(startX + AndroidUtilities.dp(6), getMeasuredHeight() - AndroidUtilities.dp(4), endX + AndroidUtilities.dp(6), getMeasuredHeight() - AndroidUtilities.dp(2), paint);
|
canvas.drawRect(startX + AndroidUtilities.dp(2), AndroidUtilities.dp(42), endX + AndroidUtilities.dp(4), AndroidUtilities.dp(44), paint);
|
||||||
|
canvas.restore();
|
||||||
|
|
||||||
|
int drawableWidth = pickDrawable.getIntrinsicWidth();
|
||||||
|
int drawableHeight = pickDrawable.getIntrinsicHeight();
|
||||||
|
pickDrawable.setBounds(startX - drawableWidth / 2, getMeasuredHeight() - drawableHeight, startX + drawableWidth / 2, getMeasuredHeight());
|
||||||
|
pickDrawable.draw(canvas);
|
||||||
|
|
||||||
|
pickDrawable.setBounds(endX - drawableWidth / 2 + AndroidUtilities.dp(4), getMeasuredHeight() - drawableHeight, endX + drawableWidth / 2 + AndroidUtilities.dp(4), getMeasuredHeight());
|
||||||
|
pickDrawable.draw(canvas);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
BIN
TMessagesProj/src/main/res/drawable-hdpi/boxshadow.9.png
Normal file
After Width: | Height: | Size: 299 B |
BIN
TMessagesProj/src/main/res/drawable-hdpi/broadcast_aqua.png
Executable file
After Width: | Height: | Size: 3.5 KiB |
BIN
TMessagesProj/src/main/res/drawable-hdpi/broadcast_blue.png
Executable file
After Width: | Height: | Size: 3.7 KiB |
BIN
TMessagesProj/src/main/res/drawable-hdpi/broadcast_green.png
Executable file
After Width: | Height: | Size: 3.7 KiB |
BIN
TMessagesProj/src/main/res/drawable-hdpi/broadcast_orange.png
Executable file
After Width: | Height: | Size: 3.7 KiB |
BIN
TMessagesProj/src/main/res/drawable-hdpi/broadcast_pink.png
Executable file
After Width: | Height: | Size: 3.7 KiB |
BIN
TMessagesProj/src/main/res/drawable-hdpi/broadcast_red.png
Executable file
After Width: | Height: | Size: 3.9 KiB |
BIN
TMessagesProj/src/main/res/drawable-hdpi/broadcast_violet.png
Executable file
After Width: | Height: | Size: 3.8 KiB |
BIN
TMessagesProj/src/main/res/drawable-hdpi/broadcast_yellow.png
Executable file
After Width: | Height: | Size: 3.8 KiB |
BIN
TMessagesProj/src/main/res/drawable-hdpi/btnshadow.9.png
Normal file
After Width: | Height: | Size: 229 B |
BIN
TMessagesProj/src/main/res/drawable-hdpi/cats.jpg
Normal file
After Width: | Height: | Size: 140 KiB |
Before Width: | Height: | Size: 2 KiB |
Before Width: | Height: | Size: 2 KiB |
Before Width: | Height: | Size: 2 KiB |
Before Width: | Height: | Size: 2 KiB |
Before Width: | Height: | Size: 2 KiB |
Before Width: | Height: | Size: 2 KiB |
Before Width: | Height: | Size: 2 KiB |
Before Width: | Height: | Size: 2 KiB |
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 6.4 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 200 B |
Before Width: | Height: | Size: 253 B |
Before Width: | Height: | Size: 242 B |
Before Width: | Height: | Size: 244 B |
Before Width: | Height: | Size: 204 B |
Before Width: | Height: | Size: 250 B |
Before Width: | Height: | Size: 240 B |
Before Width: | Height: | Size: 242 B |
BIN
TMessagesProj/src/main/res/drawable-hdpi/videolapse.png
Executable file
After Width: | Height: | Size: 2.8 KiB |
BIN
TMessagesProj/src/main/res/drawable-hdpi/videotrimmer.png
Executable file
After Width: | Height: | Size: 2.8 KiB |
BIN
TMessagesProj/src/main/res/drawable-ldpi/boxshadow.9.png
Normal file
After Width: | Height: | Size: 160 B |
BIN
TMessagesProj/src/main/res/drawable-ldpi/broadcast_aqua.png
Executable file
After Width: | Height: | Size: 2.1 KiB |
BIN
TMessagesProj/src/main/res/drawable-ldpi/broadcast_blue.png
Executable file
After Width: | Height: | Size: 2.1 KiB |
BIN
TMessagesProj/src/main/res/drawable-ldpi/broadcast_green.png
Executable file
After Width: | Height: | Size: 2.1 KiB |
BIN
TMessagesProj/src/main/res/drawable-ldpi/broadcast_orange.png
Executable file
After Width: | Height: | Size: 2.2 KiB |