mirror of
https://github.com/DrKLO/Telegram.git
synced 2024-12-22 14:35:03 +01:00
update to 9.5.2
This commit is contained in:
parent
1a48adbec4
commit
1dcd153fe2
43 changed files with 587 additions and 142 deletions
|
@ -136,7 +136,7 @@ NativeRegistration::NativeRegistration(JNIEnv* jni, jclass clazz)
|
|||
|
||||
NativeRegistration::~NativeRegistration() {
|
||||
RTC_LOG(LS_INFO) << "NativeRegistration::dtor";
|
||||
jni_->UnregisterNatives(j_class_);
|
||||
//jni_->UnregisterNatives(j_class_);
|
||||
CHECK_EXCEPTION(jni_) << "Error during UnregisterNatives";
|
||||
}
|
||||
|
||||
|
|
|
@ -1878,6 +1878,7 @@ public class AndroidUtilities {
|
|||
}
|
||||
|
||||
public static ArrayList<File> getRootDirs() {
|
||||
HashSet<String> pathes = new HashSet<>();
|
||||
ArrayList<File> result = null;
|
||||
if (Build.VERSION.SDK_INT >= 19) {
|
||||
File[] dirs = ApplicationLoader.applicationContext.getExternalFilesDirs(null);
|
||||
|
@ -1898,16 +1899,22 @@ public class AndroidUtilities {
|
|||
continue;
|
||||
}
|
||||
}
|
||||
if (file != null && !pathes.contains(file.getAbsolutePath())) {
|
||||
pathes.add(file.getAbsolutePath());
|
||||
result.add(file);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (result == null) {
|
||||
result = new ArrayList<>();
|
||||
}
|
||||
if (result.isEmpty()) {
|
||||
result.add(Environment.getExternalStorageDirectory());
|
||||
File dir = Environment.getExternalStorageDirectory();
|
||||
if (dir != null && !pathes.contains(dir.getAbsolutePath())) {
|
||||
result.add(dir);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
@ -1919,7 +1926,9 @@ public class AndroidUtilities {
|
|||
} catch (Exception e) {
|
||||
FileLog.e(e);
|
||||
}
|
||||
|
||||
if (state == null || state.startsWith(Environment.MEDIA_MOUNTED)) {
|
||||
FileLog.d("external dir mounted");
|
||||
try {
|
||||
File file;
|
||||
if (Build.VERSION.SDK_INT >= 19) {
|
||||
|
@ -1936,16 +1945,20 @@ public class AndroidUtilities {
|
|||
} else {
|
||||
file = ApplicationLoader.applicationContext.getExternalCacheDir();
|
||||
}
|
||||
FileLog.d("check dir " + (file == null ? null : file.getPath()) + " ");
|
||||
if (file != null && (file.exists() || file.mkdirs()) && file.canWrite()) {
|
||||
boolean canWrite = true;
|
||||
try {
|
||||
AndroidUtilities.createEmptyFile(new File(file, ".nomedia"));
|
||||
} catch (Exception e) {
|
||||
canWrite = false;
|
||||
}
|
||||
if (canWrite) {
|
||||
// boolean canWrite = true;
|
||||
// try {
|
||||
// AndroidUtilities.createEmptyFile(new File(file, ".nomedia"));
|
||||
// } catch (Exception e) {
|
||||
// canWrite = false;
|
||||
// }
|
||||
// if (canWrite) {
|
||||
// return file;
|
||||
// }
|
||||
return file;
|
||||
}
|
||||
} else if (file != null) {
|
||||
FileLog.d("check dir file exist " + file.exists() + " can write " + file.canWrite());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
FileLog.e(e);
|
||||
|
|
|
@ -24,8 +24,8 @@ public class BuildVars {
|
|||
public static boolean USE_CLOUD_STRINGS = true;
|
||||
public static boolean CHECK_UPDATES = true;
|
||||
public static boolean NO_SCOPED_STORAGE = Build.VERSION.SDK_INT <= 29;
|
||||
public static int BUILD_VERSION = 3199;
|
||||
public static String BUILD_VERSION_STRING = "9.5.1";
|
||||
public static int BUILD_VERSION = 3208;
|
||||
public static String BUILD_VERSION_STRING = "9.5.2";
|
||||
public static int APP_ID = 4;
|
||||
public static String APP_HASH = "014b35b6184100b085b0d0572f9b5103";
|
||||
|
||||
|
|
|
@ -41,7 +41,7 @@ public class CacheByChatsController {
|
|||
} else if (type == KEEP_MEDIA_TYPE_GROUP) {
|
||||
return KEEP_MEDIA_ONE_MONTH;
|
||||
} else if (type == KEEP_MEDIA_TYPE_CHANNEL) {
|
||||
return KEEP_MEDIA_ONE_MONTH;
|
||||
return KEEP_MEDIA_ONE_WEEK;
|
||||
}
|
||||
return SharedConfig.keepMedia;
|
||||
}
|
||||
|
|
|
@ -1234,6 +1234,13 @@ public class DatabaseMigrationHelper {
|
|||
version = 113;
|
||||
}
|
||||
|
||||
if (version == 113) {
|
||||
//fix issue when database file was deleted
|
||||
//just reload dialogs
|
||||
messagesStorage.reset();
|
||||
database.executeFast("PRAGMA user_version = 114").stepThis().dispose();
|
||||
version = 114;
|
||||
}
|
||||
return version;
|
||||
}
|
||||
|
||||
|
|
|
@ -545,10 +545,9 @@ public class FileLoadOperation {
|
|||
filePartsStream.write(filesQueueByteBuffer.buf, 0, bufferSize);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
FileLog.e(e, false);
|
||||
if (AndroidUtilities.isENOSPC(e)) {
|
||||
LaunchActivity.checkFreeDiscSpaceStatic(1);
|
||||
} else {
|
||||
FileLog.e(e);
|
||||
}
|
||||
}
|
||||
totalTime += System.currentTimeMillis() - time;
|
||||
|
@ -881,6 +880,7 @@ public class FileLoadOperation {
|
|||
} catch (Exception e) {
|
||||
if (AndroidUtilities.isENOSPC(e)) {
|
||||
LaunchActivity.checkFreeDiscSpaceStatic(1);
|
||||
FileLog.e(e, false);
|
||||
} else {
|
||||
FileLog.e(e);
|
||||
}
|
||||
|
@ -1044,6 +1044,7 @@ public class FileLoadOperation {
|
|||
requestedBytesCount = downloadedBytes = 0;
|
||||
if (AndroidUtilities.isENOSPC(e)) {
|
||||
LaunchActivity.checkFreeDiscSpaceStatic(1);
|
||||
FileLog.e(e, false);
|
||||
} else {
|
||||
FileLog.e(e);
|
||||
}
|
||||
|
@ -1059,12 +1060,11 @@ public class FileLoadOperation {
|
|||
fileOutputStream.seek(downloadedBytes);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
FileLog.e(e, false);
|
||||
if (AndroidUtilities.isENOSPC(e)) {
|
||||
LaunchActivity.checkFreeDiscSpaceStatic(1);
|
||||
onFail(true, -1);
|
||||
return false;
|
||||
} else {
|
||||
FileLog.e(e, false);
|
||||
}
|
||||
}
|
||||
if (fileOutputStream == null) {
|
||||
|
@ -1091,11 +1091,11 @@ public class FileLoadOperation {
|
|||
delegate.saveFilePath(pathSaveData, null);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
FileLog.e(e, false);
|
||||
if (AndroidUtilities.isENOSPC(e)) {
|
||||
LaunchActivity.checkFreeDiscSpaceStatic(1);
|
||||
onFail(true, -1);
|
||||
} else {
|
||||
FileLog.e(e, false);
|
||||
onFail(true, 0);
|
||||
}
|
||||
}
|
||||
|
@ -1772,10 +1772,10 @@ public class FileLoadOperation {
|
|||
startDownloadRequest();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
FileLog.e(e, !AndroidUtilities.isFilNotFoundException(e) && !AndroidUtilities.isENOSPC(e));
|
||||
if (AndroidUtilities.isENOSPC(e)) {
|
||||
onFail(false, -1);
|
||||
} else {
|
||||
FileLog.e(e, !AndroidUtilities.isFilNotFoundException(e));
|
||||
onFail(false, 0);
|
||||
}
|
||||
}
|
||||
|
@ -1835,6 +1835,9 @@ public class FileLoadOperation {
|
|||
cleanup();
|
||||
state = reason == 1 ? stateCanceled : stateFailed;
|
||||
if (delegate != null) {
|
||||
if (BuildVars.LOGS_ENABLED) {
|
||||
FileLog.d("failed downloading file to " + cacheFileFinal + " reason = " + reason + " time = " + (System.currentTimeMillis() - startTime) + " dc = " + datacenterId + " size = " + AndroidUtilities.formatFileSize(totalBytesCount));
|
||||
}
|
||||
if (thread) {
|
||||
Utilities.stageQueue.postRunnable(() -> delegate.didFailedLoadingFile(FileLoadOperation.this, reason));
|
||||
} else {
|
||||
|
|
|
@ -1679,8 +1679,10 @@ public class FileLoader extends BaseController {
|
|||
|
||||
Runnable dumpFilesQueueRunnable = () -> {
|
||||
for (int i = 0; i < smallFilesQueue.length; i++) {
|
||||
if (smallFilesQueue[i].allOperations.size() > 0 || largeFilesQueue[i].allOperations.size() > 0) {
|
||||
FileLog.d("download queue: dc" + (i + 1) + " account=" + currentAccount + " small_operations=" + smallFilesQueue[i].allOperations.size() + " large_operations=" + largeFilesQueue[i].allOperations.size());
|
||||
}
|
||||
}
|
||||
dumpFilesQueue();
|
||||
};
|
||||
|
||||
|
|
|
@ -2176,9 +2176,18 @@ public class ImageLoader {
|
|||
}
|
||||
|
||||
public void checkMediaPaths() {
|
||||
checkMediaPaths(null);
|
||||
}
|
||||
|
||||
public void checkMediaPaths(Runnable after) {
|
||||
cacheOutQueue.postRunnable(() -> {
|
||||
final SparseArray<File> paths = createMediaPaths();
|
||||
AndroidUtilities.runOnUIThread(() -> FileLoader.setMediaDirs(paths));
|
||||
AndroidUtilities.runOnUIThread(() -> {
|
||||
FileLoader.setMediaDirs(paths);
|
||||
if (after != null) {
|
||||
after.run();
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -61,11 +61,10 @@ public class LiteMode {
|
|||
FLAG_ANIMATED_EMOJI_REACTIONS_PREMIUM |
|
||||
FLAG_ANIMATED_EMOJI_CHAT |
|
||||
FLAG_CHAT_FORUM_TWOCOLUMN |
|
||||
FLAG_CHAT_BLUR |
|
||||
FLAG_CALLS_ANIMATIONS |
|
||||
FLAG_AUTOPLAY_VIDEOS |
|
||||
FLAG_AUTOPLAY_GIFS
|
||||
); // 8031
|
||||
); // 7775
|
||||
public static int PRESET_HIGH = (
|
||||
FLAGS_ANIMATED_STICKERS |
|
||||
FLAGS_ANIMATED_EMOJI |
|
||||
|
@ -255,7 +254,7 @@ public class LiteMode {
|
|||
}
|
||||
|
||||
public static void savePreference() {
|
||||
MessagesController.getGlobalMainSettings().edit().putInt("lite_mode", value).putInt("lite_mode_battery_level", powerSaverLevel).apply();
|
||||
MessagesController.getGlobalMainSettings().edit().putInt("lite_mode2", value).putInt("lite_mode_battery_level", powerSaverLevel).apply();
|
||||
}
|
||||
|
||||
public static int getPowerSaverLevel() {
|
||||
|
|
|
@ -18,6 +18,7 @@ import android.content.res.Configuration;
|
|||
import android.telephony.TelephonyManager;
|
||||
import android.text.TextUtils;
|
||||
import android.text.format.DateFormat;
|
||||
import android.util.Log;
|
||||
import android.util.Xml;
|
||||
|
||||
import androidx.annotation.StringRes;
|
||||
|
@ -39,7 +40,9 @@ import java.util.Collection;
|
|||
import java.util.Currency;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.TimeZone;
|
||||
|
||||
public class LocaleController {
|
||||
|
@ -487,17 +490,65 @@ public class LocaleController {
|
|||
}
|
||||
}
|
||||
|
||||
private boolean checkingUpdateForCurrentRemoteLocale;
|
||||
|
||||
public void checkUpdateForCurrentRemoteLocale(int currentAccount, int version, int baseVersion) {
|
||||
if (currentLocaleInfo == null || !currentLocaleInfo.isRemote() && !currentLocaleInfo.isUnofficial()) {
|
||||
return;
|
||||
}
|
||||
if (currentLocaleInfo.hasBaseLang()) {
|
||||
if (currentLocaleInfo.baseVersion < baseVersion) {
|
||||
applyRemoteLanguage(currentLocaleInfo, currentLocaleInfo.baseLangCode, false, currentAccount, null);
|
||||
checkingUpdateForCurrentRemoteLocale = true;
|
||||
applyRemoteLanguage(currentLocaleInfo, currentLocaleInfo.baseLangCode, false, currentAccount, () -> {
|
||||
checkingUpdateForCurrentRemoteLocale = false;
|
||||
checkPatchLangpack(currentAccount);
|
||||
});
|
||||
}
|
||||
}
|
||||
if (currentLocaleInfo.version < version) {
|
||||
applyRemoteLanguage(currentLocaleInfo, currentLocaleInfo.shortName, false, currentAccount, null);
|
||||
checkingUpdateForCurrentRemoteLocale = true;
|
||||
applyRemoteLanguage(currentLocaleInfo, currentLocaleInfo.shortName, false, currentAccount, () -> {
|
||||
checkingUpdateForCurrentRemoteLocale = false;
|
||||
checkPatchLangpack(currentAccount);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
public int calculateTranslatedCount(HashMap<String, String> map) {
|
||||
int count = 0;
|
||||
HashSet<String> added = new HashSet<>();
|
||||
for (String k : map.keySet()) {
|
||||
if (k == null) {
|
||||
continue;
|
||||
}
|
||||
String real = null;
|
||||
if (k.endsWith("_other")) {
|
||||
real = k.substring(0, k.length() - 6);
|
||||
} else if (k.endsWith("_zero") || k.endsWith("_many")) {
|
||||
real = k.substring(0, k.length() - 5);
|
||||
} else if (k.endsWith("_one") || k.endsWith("_two") || k.endsWith("_few")) {
|
||||
real = k.substring(0, k.length() - 4);
|
||||
}
|
||||
if (real == null) {
|
||||
count++;
|
||||
} else if (!added.contains(real)) {
|
||||
added.add(real);
|
||||
count++;
|
||||
}
|
||||
}
|
||||
added.clear();
|
||||
return count;
|
||||
}
|
||||
|
||||
public void checkPatchLangpack(int currentAccount) {
|
||||
if (currentLocaleInfo == null || checkingUpdateForCurrentRemoteLocale) {
|
||||
return;
|
||||
}
|
||||
if (shouldReinstallLangpack(currentLocaleInfo.shortName)) {
|
||||
if (BuildVars.LOGS_ENABLED) {
|
||||
FileLog.d("reload locale because locale file is not enough");
|
||||
}
|
||||
AndroidUtilities.runOnUIThread(() -> reloadCurrentRemoteLocale(currentAccount, null, true, null));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -943,7 +994,7 @@ public class LocaleController {
|
|||
config.locale = currentLocale;
|
||||
ApplicationLoader.applicationContext.getResources().updateConfiguration(config, ApplicationLoader.applicationContext.getResources().getDisplayMetrics());
|
||||
changingConfiguration = false;
|
||||
if (reloadLastFile) {
|
||||
if (reloadLastFile || !isLoadingRemote && !force && shouldReinstallLangpack(localeInfo.shortName)) {
|
||||
if (BuildVars.LOGS_ENABLED) {
|
||||
FileLog.d("reload locale because one of file is corrupted " + pathToFile + " " + pathToBaseFile);
|
||||
}
|
||||
|
@ -2316,6 +2367,7 @@ public class LocaleController {
|
|||
onDone.run();
|
||||
}
|
||||
};
|
||||
patched(localeInfo.shortName);
|
||||
if (localeInfo.hasBaseLang() && (langCode == null || langCode.equals(localeInfo.baseLangCode))) {
|
||||
if (localeInfo.baseVersion != 0 && !force) {
|
||||
if (localeInfo.hasBaseLang()) {
|
||||
|
@ -3261,6 +3313,25 @@ public class LocaleController {
|
|||
return formatDistance(distance, type, null);
|
||||
}
|
||||
|
||||
// patch to force reinstalling of langpack in case some strings are missing after 9.0
|
||||
private boolean shouldReinstallLangpack(String lng) {
|
||||
int mustBeCount = MessagesController.getInstance(UserConfig.selectedAccount).checkResetLangpack;
|
||||
if (mustBeCount <= 0) {
|
||||
return false;
|
||||
}
|
||||
boolean alreadyPatched = MessagesController.getGlobalMainSettings().getBoolean("lngpack_patched_" + lng, false);
|
||||
if (alreadyPatched) {
|
||||
return false;
|
||||
}
|
||||
int count = calculateTranslatedCount(localeValues);
|
||||
if (count >= mustBeCount) {
|
||||
return false;
|
||||
}
|
||||
FileLog.e("reinstalling " + lng + " langpack because of patch (" + count + " keys, must be at least " + mustBeCount + ")");
|
||||
patched(lng);
|
||||
return true;
|
||||
}
|
||||
|
||||
public static String formatDistance(float distance, int type, Boolean useImperial) {
|
||||
ensureImperialSystemInit();
|
||||
boolean imperial = useImperial != null && useImperial || useImperial == null && useImperialSystemType;
|
||||
|
@ -3324,4 +3395,11 @@ public class LocaleController {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void patched(String lng) {
|
||||
if (BuildVars.LOGS_ENABLED) {
|
||||
FileLog.d("set as patched " + lng + " langpack");
|
||||
}
|
||||
MessagesController.getGlobalMainSettings().edit().putBoolean("lngpack_patched_" + lng, true).apply();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1665,7 +1665,7 @@ public class MediaController implements AudioManager.OnAudioFocusChangeListener,
|
|||
raisedToTop = 0;
|
||||
raisedToTopSign = 0;
|
||||
countLess = 0;
|
||||
} else if (proximityTouched && ((accelerometerSensor == null || linearSensor == null) && gravitySensor == null) && !VoIPService.isAnyKindOfCallActive()) {
|
||||
} else if (proximityTouched && ((accelerometerSensor == null || linearSensor == null) && gravitySensor == null || ignoreAccelerometerGestures()) && !VoIPService.isAnyKindOfCallActive()) {
|
||||
if (playingMessageObject != null && !ApplicationLoader.mainInterfacePaused && (playingMessageObject.isVoice() || playingMessageObject.isRoundVideo())) {
|
||||
if (!useFrontSpeaker && !NotificationsController.audioManager.isWiredHeadsetOn() && !NotificationsController.audioManager.isBluetoothA2dpOn()) {
|
||||
if (BuildVars.LOGS_ENABLED) {
|
||||
|
@ -3325,7 +3325,9 @@ public class MediaController implements AudioManager.OnAudioFocusChangeListener,
|
|||
startRaiseToEarSensors(raiseChat);
|
||||
}
|
||||
if (!ApplicationLoader.mainInterfacePaused && proximityWakeLock != null && !proximityWakeLock.isHeld() && (playingMessageObject.isVoice() || playingMessageObject.isRoundVideo())) {
|
||||
// proximityWakeLock.acquire();
|
||||
if (ignoreAccelerometerGestures()) {
|
||||
proximityWakeLock.acquire();
|
||||
}
|
||||
}
|
||||
startProgressTimer(playingMessageObject);
|
||||
NotificationCenter.getInstance(messageObject.currentAccount).postNotificationName(NotificationCenter.messagePlayingDidStart, messageObject, oldMessageObject);
|
||||
|
@ -3387,6 +3389,10 @@ public class MediaController implements AudioManager.OnAudioFocusChangeListener,
|
|||
return true;
|
||||
}
|
||||
|
||||
private boolean ignoreAccelerometerGestures() {
|
||||
return Build.MANUFACTURER.equalsIgnoreCase("samsung");
|
||||
}
|
||||
|
||||
public void updateSilent(boolean value) {
|
||||
isSilent = value;
|
||||
if (videoPlayer != null) {
|
||||
|
|
|
@ -27,7 +27,6 @@ import android.os.SystemClock;
|
|||
import android.telephony.TelephonyManager;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Base64;
|
||||
import android.util.Log;
|
||||
import android.util.SparseArray;
|
||||
import android.util.SparseBooleanArray;
|
||||
import android.util.SparseIntArray;
|
||||
|
@ -495,6 +494,8 @@ public class MessagesController extends BaseController implements NotificationCe
|
|||
public boolean giftAttachMenuIcon;
|
||||
public boolean giftTextFieldIcon;
|
||||
|
||||
public int checkResetLangpack;
|
||||
|
||||
public void getNextReactionMention(long dialogId, int topicId, int count, Consumer<Integer> callback) {
|
||||
final MessagesStorage messagesStorage = getMessagesStorage();
|
||||
messagesStorage.getStorageQueue().postRunnable(() -> {
|
||||
|
@ -1200,8 +1201,6 @@ public class MessagesController extends BaseController implements NotificationCe
|
|||
gifSearchBot = mainPreferences.getString("gifSearchBot", "gif");
|
||||
imageSearchBot = mainPreferences.getString("imageSearchBot", "pic");
|
||||
blockedCountry = mainPreferences.getBoolean("blockedCountry", false);
|
||||
dcDomainName = mainPreferences.getString("dcDomainName2", ConnectionsManager.native_isTestBackend(currentAccount) != 0 ? "tapv3.stel.com" : "apv3.stel.com");
|
||||
webFileDatacenterId = mainPreferences.getInt("webFileDatacenterId", ConnectionsManager.native_isTestBackend(currentAccount) != 0 ? 2 : 4);
|
||||
suggestedLangCode = mainPreferences.getString("suggestedLangCode", "en");
|
||||
animatedEmojisZoom = mainPreferences.getFloat("animatedEmojisZoom", 0.625f);
|
||||
qrLoginCamera = mainPreferences.getBoolean("qrLoginCamera", false);
|
||||
|
@ -1260,8 +1259,12 @@ public class MessagesController extends BaseController implements NotificationCe
|
|||
uploadMarkupVideo = mainPreferences.getBoolean("uploadMarkupVideo", true);
|
||||
giftAttachMenuIcon = mainPreferences.getBoolean("giftAttachMenuIcon", false);
|
||||
giftTextFieldIcon = mainPreferences.getBoolean("giftTextFieldIcon", false);
|
||||
checkResetLangpack = mainPreferences.getInt("checkResetLangpack", 0);
|
||||
BuildVars.GOOGLE_AUTH_CLIENT_ID = mainPreferences.getString("googleAuthClientId", BuildVars.GOOGLE_AUTH_CLIENT_ID);
|
||||
|
||||
dcDomainName = mainPreferences.getString("dcDomainName2", ConnectionsManager.native_isTestBackend(currentAccount) != 0 ? "tapv3.stel.com" : "apv3.stel.com");
|
||||
webFileDatacenterId = mainPreferences.getInt("webFileDatacenterId", ConnectionsManager.native_isTestBackend(currentAccount) != 0 ? 2 : 4);
|
||||
|
||||
Set<String> currencySet = mainPreferences.getStringSet("directPaymentsCurrency", null);
|
||||
if (currencySet != null) {
|
||||
directPaymentsCurrency.clear();
|
||||
|
@ -2964,6 +2967,18 @@ public class MessagesController extends BaseController implements NotificationCe
|
|||
}
|
||||
break;
|
||||
}
|
||||
case "android_check_reset_langpack": {
|
||||
if (value.value instanceof TLRPC.TL_jsonNumber) {
|
||||
TLRPC.TL_jsonNumber num = (TLRPC.TL_jsonNumber) value.value;
|
||||
if (num.value != checkResetLangpack) {
|
||||
checkResetLangpack = (int) num.value;
|
||||
editor.putInt("checkResetLangpack", checkResetLangpack);
|
||||
LocaleController.getInstance().checkPatchLangpack(currentAccount);
|
||||
changed = true;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (changed) {
|
||||
|
|
|
@ -94,7 +94,7 @@ public class MessagesStorage extends BaseController {
|
|||
}
|
||||
}
|
||||
|
||||
public final static int LAST_DB_VERSION = 113;
|
||||
public final static int LAST_DB_VERSION = 114;
|
||||
private boolean databaseMigrationInProgress;
|
||||
public boolean showClearDatabaseAlert;
|
||||
private LongSparseIntArray dialogIsForum = new LongSparseIntArray();
|
||||
|
@ -354,9 +354,6 @@ public class MessagesStorage extends BaseController {
|
|||
}
|
||||
} catch (Exception e) {
|
||||
FileLog.e(e);
|
||||
// if (BuildVars.DEBUG_PRIVATE_VERSION) {
|
||||
// throw new RuntimeException(e);
|
||||
// }
|
||||
if (openTries < 3 && e.getMessage() != null && e.getMessage().contains("malformed")) {
|
||||
if (openTries == 2) {
|
||||
cleanupInternal(true);
|
||||
|
@ -696,7 +693,11 @@ public class MessagesStorage extends BaseController {
|
|||
}
|
||||
|
||||
private void cleanupInternal(boolean deleteFiles) {
|
||||
if (deleteFiles) {
|
||||
reset();
|
||||
} else {
|
||||
clearDatabaseValues();
|
||||
}
|
||||
if (database != null) {
|
||||
database.close();
|
||||
database = null;
|
||||
|
@ -714,10 +715,11 @@ public class MessagesStorage extends BaseController {
|
|||
shmCacheFile.delete();
|
||||
shmCacheFile = null;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private void clearDatabaseValues() {
|
||||
public void clearDatabaseValues() {
|
||||
lastDateValue = 0;
|
||||
lastSeqValue = 0;
|
||||
lastPtsValue = 0;
|
||||
|
@ -1334,10 +1336,7 @@ public class MessagesStorage extends BaseController {
|
|||
if (cursor != null) {
|
||||
cursor.dispose();
|
||||
}
|
||||
AndroidUtilities.runOnUIThread(() -> {
|
||||
NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.didClearDatabase);
|
||||
getMediaDataController().loadAttachMenuBots(false, true);
|
||||
});
|
||||
reset();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -1828,6 +1827,23 @@ public class MessagesStorage extends BaseController {
|
|||
return files;
|
||||
}
|
||||
|
||||
public void reset() {
|
||||
clearDatabaseValues();
|
||||
|
||||
AndroidUtilities.runOnUIThread(() -> {
|
||||
for (int a = 0; a < 2; a++) {
|
||||
getUserConfig().setDialogsLoadOffset(a, 0, 0, 0, 0, 0, 0);
|
||||
getUserConfig().setTotalDialogsCount(a, 0);
|
||||
}
|
||||
getUserConfig().clearFilters();
|
||||
getUserConfig().clearPinnedDialogsLoaded();
|
||||
|
||||
NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.didClearDatabase);
|
||||
getMediaDataController().loadAttachMenuBots(false, true);
|
||||
getNotificationCenter().postNotificationName(NotificationCenter.onDatabaseReset);
|
||||
});
|
||||
}
|
||||
|
||||
private static class ReadDialog {
|
||||
public int lastMid;
|
||||
public int date;
|
||||
|
|
|
@ -51,6 +51,7 @@ public class SharedConfig {
|
|||
|
||||
public final static int PASSCODE_TYPE_PIN = 0,
|
||||
PASSCODE_TYPE_PASSWORD = 1;
|
||||
private static int legacyDevicePerformanceClass = -1;
|
||||
|
||||
public static boolean loopStickers() {
|
||||
return LiteMode.isEnabled(LiteMode.FLAG_ANIMATED_STICKERS_CHAT);
|
||||
|
@ -1473,4 +1474,36 @@ public class SharedConfig {
|
|||
public static boolean deviceIsAverage() {
|
||||
return getDevicePerformanceClass() <= PERFORMANCE_CLASS_AVERAGE;
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public static int getLegacyDevicePerformanceClass() {
|
||||
if (legacyDevicePerformanceClass == -1) {
|
||||
int androidVersion = Build.VERSION.SDK_INT;
|
||||
int cpuCount = ConnectionsManager.CPU_COUNT;
|
||||
int memoryClass = ((ActivityManager) ApplicationLoader.applicationContext.getSystemService(Context.ACTIVITY_SERVICE)).getMemoryClass();
|
||||
int totalCpuFreq = 0;
|
||||
int freqResolved = 0;
|
||||
for (int i = 0; i < cpuCount; i++) {
|
||||
try {
|
||||
RandomAccessFile reader = new RandomAccessFile(String.format(Locale.ENGLISH, "/sys/devices/system/cpu/cpu%d/cpufreq/cpuinfo_max_freq", i), "r");
|
||||
String line = reader.readLine();
|
||||
if (line != null) {
|
||||
totalCpuFreq += Utilities.parseInt(line) / 1000;
|
||||
freqResolved++;
|
||||
}
|
||||
reader.close();
|
||||
} catch (Throwable ignore) {}
|
||||
}
|
||||
int maxCpuFreq = freqResolved == 0 ? -1 : (int) Math.ceil(totalCpuFreq / (float) freqResolved);
|
||||
|
||||
if (androidVersion < 21 || cpuCount <= 2 || memoryClass <= 100 || cpuCount <= 4 && maxCpuFreq != -1 && maxCpuFreq <= 1250 || cpuCount <= 4 && maxCpuFreq <= 1600 && memoryClass <= 128 && androidVersion <= 21 || cpuCount <= 4 && maxCpuFreq <= 1300 && memoryClass <= 128 && androidVersion <= 24) {
|
||||
legacyDevicePerformanceClass = PERFORMANCE_CLASS_LOW;
|
||||
} else if (cpuCount < 8 || memoryClass <= 160 || maxCpuFreq != -1 && maxCpuFreq <= 2050 || maxCpuFreq == -1 && cpuCount == 8 && androidVersion <= 23) {
|
||||
legacyDevicePerformanceClass = PERFORMANCE_CLASS_AVERAGE;
|
||||
} else {
|
||||
legacyDevicePerformanceClass = PERFORMANCE_CLASS_HIGH;
|
||||
}
|
||||
}
|
||||
return legacyDevicePerformanceClass;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,8 +13,6 @@ import android.content.SharedPreferences;
|
|||
import android.os.SystemClock;
|
||||
import android.util.Base64;
|
||||
import android.util.LongSparseArray;
|
||||
import android.util.SparseArray;
|
||||
import android.util.SparseLongArray;
|
||||
|
||||
import org.telegram.tgnet.SerializedData;
|
||||
import org.telegram.tgnet.TLRPC;
|
||||
|
@ -32,7 +30,7 @@ public class UserConfig extends BaseController {
|
|||
public final static int MAX_ACCOUNT_COUNT = 4;
|
||||
|
||||
private final Object sync = new Object();
|
||||
private boolean configLoaded;
|
||||
private volatile boolean configLoaded;
|
||||
private TLRPC.User currentUser;
|
||||
public boolean registeredForPush;
|
||||
public int lastSendMessageId = -210000;
|
||||
|
@ -138,6 +136,9 @@ public class UserConfig extends BaseController {
|
|||
|
||||
public void saveConfig(boolean withFile) {
|
||||
NotificationCenter.getInstance(currentAccount).doOnIdle(() -> {
|
||||
if (!configLoaded) {
|
||||
return;
|
||||
}
|
||||
synchronized (sync) {
|
||||
try {
|
||||
SharedPreferences.Editor editor = getPreferences().edit();
|
||||
|
@ -285,7 +286,8 @@ public class UserConfig extends BaseController {
|
|||
}
|
||||
}
|
||||
|
||||
public void loadConfig() {
|
||||
public void
|
||||
loadConfig() {
|
||||
synchronized (sync) {
|
||||
if (configLoaded) {
|
||||
return;
|
||||
|
@ -519,6 +521,16 @@ public class UserConfig extends BaseController {
|
|||
getPreferences().edit().putBoolean("2pinnedDialogsLoaded" + folderId, loaded).commit();
|
||||
}
|
||||
|
||||
public void clearPinnedDialogsLoaded() {
|
||||
SharedPreferences.Editor editor = getPreferences().edit();
|
||||
for (String key : getPreferences().getAll().keySet()) {
|
||||
if (key.startsWith("2pinnedDialogsLoaded")) {
|
||||
editor.remove(key);
|
||||
}
|
||||
}
|
||||
editor.apply();
|
||||
}
|
||||
|
||||
public static final int i_dialogsLoadOffsetId = 0;
|
||||
public static final int i_dialogsLoadOffsetDate = 1;
|
||||
public static final int i_dialogsLoadOffsetUserId = 2;
|
||||
|
@ -597,4 +609,9 @@ public class UserConfig extends BaseController {
|
|||
public void setGlobalTtl(int ttl) {
|
||||
globalTtl = ttl;
|
||||
}
|
||||
|
||||
public void clearFilters() {
|
||||
getPreferences().edit().remove("filtersLoaded").apply();
|
||||
filtersLoaded = false;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3826,6 +3826,8 @@ public class VoIPService extends Service implements SensorEventListener, AudioMa
|
|||
} else {
|
||||
bluetoothScoActive = false;
|
||||
bluetoothScoConnecting = false;
|
||||
|
||||
am.setBluetoothScoOn(false);
|
||||
}
|
||||
for (StateListener l : stateListeners) {
|
||||
l.onAudioSettingsChanged();
|
||||
|
|
|
@ -66,6 +66,7 @@ import java.util.List;
|
|||
public class ActionBarLayout extends FrameLayout implements INavigationLayout, FloatingDebugProvider {
|
||||
|
||||
public boolean highlightActionButtons = false;
|
||||
private boolean attached;
|
||||
|
||||
@Override
|
||||
public void setHighlightActionButtons(boolean highlightActionButtons) {
|
||||
|
@ -2439,7 +2440,7 @@ public class ActionBarLayout extends FrameLayout implements INavigationLayout, F
|
|||
|
||||
ArrayList<String> lastActions = new ArrayList<>();
|
||||
Runnable debugBlackScreenRunnable = () -> {
|
||||
if (getLastFragment() != null && containerView.getChildCount() == 0) {
|
||||
if (attached && getLastFragment() != null && containerView.getChildCount() == 0) {
|
||||
if (BuildVars.DEBUG_VERSION) {
|
||||
FileLog.e(new RuntimeException(TextUtils.join(", ", lastActions)));
|
||||
}
|
||||
|
@ -2447,7 +2448,6 @@ public class ActionBarLayout extends FrameLayout implements INavigationLayout, F
|
|||
}
|
||||
};
|
||||
|
||||
|
||||
public void checkBlackScreen(String action) {
|
||||
// if (!BuildVars.DEBUG_VERSION) {
|
||||
// return;
|
||||
|
@ -2465,5 +2465,15 @@ public class ActionBarLayout extends FrameLayout implements INavigationLayout, F
|
|||
AndroidUtilities.cancelRunOnUIThread(debugBlackScreenRunnable);
|
||||
AndroidUtilities.runOnUIThread(debugBlackScreenRunnable, 500);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onAttachedToWindow() {
|
||||
super.onAttachedToWindow();
|
||||
attached = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDetachedFromWindow() {
|
||||
super.onDetachedFromWindow();
|
||||
attached = false;
|
||||
}
|
||||
}
|
|
@ -2116,8 +2116,15 @@ public class ActionBarMenuItem extends FrameLayout {
|
|||
}
|
||||
|
||||
public ActionBarPopupWindow.GapView addColoredGap() {
|
||||
return addColoredGap(-1);
|
||||
}
|
||||
|
||||
public ActionBarPopupWindow.GapView addColoredGap(int id) {
|
||||
createPopupLayout();
|
||||
ActionBarPopupWindow.GapView gap = new ActionBarPopupWindow.GapView(getContext(), resourcesProvider, Theme.key_actionBarDefaultSubmenuSeparator);
|
||||
if (id != -1) {
|
||||
gap.setTag(id);
|
||||
}
|
||||
gap.setTag(R.id.fit_width_tag, 1);
|
||||
popupLayout.addView(gap, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 8));
|
||||
return gap;
|
||||
|
|
|
@ -302,12 +302,13 @@ public abstract class BaseFragment {
|
|||
this.finishing = finishing;
|
||||
}
|
||||
|
||||
public void finishFragment(boolean animated) {
|
||||
public boolean finishFragment(boolean animated) {
|
||||
if (isFinished || parentLayout == null) {
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
finishing = true;
|
||||
parentLayout.closeLastFragment(animated);
|
||||
return true;
|
||||
}
|
||||
|
||||
public void removeSelfFromStack() {
|
||||
|
|
|
@ -247,6 +247,10 @@ public class CacheControlActivity extends BaseFragment implements NotificationCe
|
|||
});
|
||||
}
|
||||
|
||||
public static void resetCalculatedTotalSIze() {
|
||||
lastTotalSizeCalculated = null;
|
||||
}
|
||||
|
||||
public static void getDeviceTotalSize(Utilities.Callback2<Long, Long> onDone) {
|
||||
if (lastDeviceTotalSize != null && lastDeviceTotalFreeSize != null) {
|
||||
if (onDone != null) {
|
||||
|
|
|
@ -319,8 +319,7 @@ public class CalendarActivity extends BaseFragment {
|
|||
@Override
|
||||
public void run(boolean forAll) {
|
||||
finishFragment();
|
||||
|
||||
if (parentLayout.getFragmentStack().size() >= 2) {
|
||||
if (parentLayout != null && parentLayout.getFragmentStack().size() >= 2) {
|
||||
BaseFragment fragment = parentLayout.getFragmentStack().get(parentLayout.getFragmentStack().size() - 2);
|
||||
if (fragment instanceof ChatActivity) {
|
||||
((ChatActivity) fragment).deleteHistory(dateSelectedStart, dateSelectedEnd + 86400, forAll);
|
||||
|
|
|
@ -53,7 +53,6 @@ import android.text.TextUtils;
|
|||
import android.text.style.CharacterStyle;
|
||||
import android.text.style.ClickableSpan;
|
||||
import android.text.style.URLSpan;
|
||||
import android.util.Log;
|
||||
import android.util.Property;
|
||||
import android.util.SparseArray;
|
||||
import android.util.StateSet;
|
||||
|
@ -83,7 +82,6 @@ import org.telegram.PhoneFormat.PhoneFormat;
|
|||
import org.telegram.messenger.AccountInstance;
|
||||
import org.telegram.messenger.AndroidUtilities;
|
||||
import org.telegram.messenger.ApplicationLoader;
|
||||
import org.telegram.messenger.BuildVars;
|
||||
import org.telegram.messenger.ChatObject;
|
||||
import org.telegram.messenger.ContactsController;
|
||||
import org.telegram.messenger.DialogObject;
|
||||
|
@ -18046,7 +18044,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
|
|||
sb.append(LocaleController.getString("AccDescrMsgSending", R.string.AccDescrMsgSending));
|
||||
final float sendingProgress = radialProgress.getProgress();
|
||||
if (sendingProgress > 0f) {
|
||||
sb.append(", ").append(Integer.toString(Math.round(sendingProgress * 100))).append("%");
|
||||
sb.append(Integer.toString(Math.round(sendingProgress * 100))).append("%");
|
||||
}
|
||||
} else if (currentMessageObject.isSendError()) {
|
||||
sb.append("\n");
|
||||
|
|
|
@ -79,7 +79,7 @@ public class ShareTopicCell extends FrameLayout {
|
|||
}
|
||||
if (topic.icon_emoji_id != 0) {
|
||||
imageView.setImageDrawable(null);
|
||||
imageView.setAnimatedEmojiDrawable(new AnimatedEmojiDrawable(AnimatedEmojiDrawable.CACHE_TYPE_FORUM_TOPIC, UserConfig.selectedAccount, topic.icon_emoji_id));
|
||||
imageView.setAnimatedEmojiDrawable(new AnimatedEmojiDrawable(AnimatedEmojiDrawable.CACHE_TYPE_ALERT_PREVIEW_STATIC, UserConfig.selectedAccount, topic.icon_emoji_id));
|
||||
} else {
|
||||
imageView.setAnimatedEmojiDrawable(null);
|
||||
ForumBubbleDrawable forumBubbleDrawable = new ForumBubbleDrawable(topic.icon_color);
|
||||
|
|
|
@ -7354,7 +7354,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
|||
if (getUserConfig().isPremium()) {
|
||||
getMessagesController().getTranslateController().toggleTranslatingDialog(getDialogId());
|
||||
} else {
|
||||
MessagesController.getNotificationsSettings(currentAccount).edit().putInt("dialog_show_translate_count" + getDialogId(), 10).commit();
|
||||
MessagesController.getNotificationsSettings(currentAccount).edit().putInt("dialog_show_translate_count" + getDialogId(), 14).commit();
|
||||
showDialog(new PremiumFeatureBottomSheet(ChatActivity.this, PremiumPreviewFragment.PREMIUM_FEATURE_TRANSLATIONS, false));
|
||||
}
|
||||
updateTopPanel(true);
|
||||
|
@ -8586,7 +8586,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
|||
if (progressView == null) {
|
||||
return;
|
||||
}
|
||||
if (DISABLE_PROGRESS_VIEW && !AndroidUtilities.isTablet() && !isComments && currentUser == null && LiteMode.isEnabled(LiteMode.FLAG_CHAT_BACKGROUND)) {
|
||||
if (DISABLE_PROGRESS_VIEW && !AndroidUtilities.isTablet() && !isComments && currentUser == null && LiteMode.isEnabled(LiteMode.FLAGS_CHAT)) {
|
||||
animateProgressViewTo = show;
|
||||
return;
|
||||
}
|
||||
|
@ -9815,7 +9815,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
|||
|
||||
if (userInfo != null && userInfo.voice_messages_forbidden) {
|
||||
mediaBanTooltip.setText(AndroidUtilities.replaceTags(LocaleController.formatString(chatActivityEnterView.isInVideoMode() ? R.string.VideoMessagesRestrictedByPrivacy : R.string.VoiceMessagesRestrictedByPrivacy, currentUser.first_name)));
|
||||
} else if (!ChatObject.canSendVoice(currentChat) && !ChatObject.canSendVoice(currentChat)) {
|
||||
} else if (!ChatObject.canSendVoice(currentChat) && !ChatObject.canSendRoundVideo(currentChat)) {
|
||||
if (chatActivityEnterView.isInVideoMode()) {
|
||||
mediaBanTooltip.setText(ChatObject.getRestrictedErrorText(currentChat, ChatObject.ACTION_SEND_ROUND));
|
||||
} else {
|
||||
|
@ -16940,6 +16940,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
|||
builder.setTopAnimationIsNew(true);
|
||||
if (reason == 0) {
|
||||
if (currentChat instanceof TLRPC.TL_channelForbidden) {
|
||||
builder.setTitle(LocaleController.getString("ChannelCantOpenBannedByAdminTitle", R.string.ChannelCantOpenBannedByAdminTitle));
|
||||
builder.setMessage(LocaleController.getString("ChannelCantOpenBannedByAdmin", R.string.ChannelCantOpenBannedByAdmin));
|
||||
} else {
|
||||
builder.setTitle(LocaleController.getString(R.string.ChannelPrivate));
|
||||
|
@ -21835,7 +21836,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
|||
boolean showTranslate = (
|
||||
getUserConfig().isPremium() ?
|
||||
getMessagesController().getTranslateController().isDialogTranslatable(getDialogId()) && !getMessagesController().getTranslateController().isTranslateDialogHidden(getDialogId()) :
|
||||
!getMessagesController().premiumLocked && preferences.getInt("dialog_show_translate_count" + did, 3) <= 0
|
||||
!getMessagesController().premiumLocked && preferences.getInt("dialog_show_translate_count" + did, 5) <= 0
|
||||
);
|
||||
if (showRestartTopic) {
|
||||
shownRestartTopic = true;
|
||||
|
@ -24145,6 +24146,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
|||
drawable.setColorFilter(new PorterDuffColorFilter(getThemedColor(Theme.key_actionBarDefaultSubmenuItemIcon), PorterDuff.Mode.SRC_IN));
|
||||
drawable = new CrossfadeDrawable(drawable, new CircularProgressDrawable(AndroidUtilities.dp(12f), AndroidUtilities.dp(1.5f), getThemedColor(Theme.key_actionBarDefaultSubmenuItemIcon)));
|
||||
rateUp.setImageDrawable(drawable);
|
||||
rateUp.setContentDescription(LocaleController.getString(R.string.AccDescrRateTranscriptionUp));
|
||||
rateTranscription.addView(rateUp, LayoutHelper.createFrame(33, 33, Gravity.CENTER_HORIZONTAL | Gravity.TOP, -42, 39, 0, 0));
|
||||
|
||||
ImageView rateDown = new ImageView(contentView.getContext());
|
||||
|
@ -24153,6 +24155,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
|||
drawable.setColorFilter(new PorterDuffColorFilter(getThemedColor(Theme.key_actionBarDefaultSubmenuItemIcon), PorterDuff.Mode.SRC_IN));
|
||||
drawable = new CrossfadeDrawable(drawable, new CircularProgressDrawable(AndroidUtilities.dp(12f), AndroidUtilities.dp(1.5f), getThemedColor(Theme.key_actionBarDefaultSubmenuItemIcon)));
|
||||
rateDown.setImageDrawable(drawable);
|
||||
rateDown.setContentDescription(LocaleController.getString(R.string.AccDescrRateTranscriptionDown));
|
||||
rateTranscription.addView(rateDown, LayoutHelper.createFrame(33, 33, Gravity.CENTER_HORIZONTAL | Gravity.TOP, 42, 39, 0, 0));
|
||||
|
||||
Runnable rate = () -> {
|
||||
|
@ -24394,7 +24397,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
|||
alert.setDimBehind(false);
|
||||
closeMenu(false);
|
||||
|
||||
int hintCount = MessagesController.getNotificationsSettings(currentAccount).getInt("dialog_show_translate_count" + getDialogId(), 3);
|
||||
int hintCount = MessagesController.getNotificationsSettings(currentAccount).getInt("dialog_show_translate_count" + getDialogId(), 5);
|
||||
if (hintCount > 0) {
|
||||
hintCount--;
|
||||
MessagesController.getNotificationsSettings(currentAccount).edit().putInt("dialog_show_translate_count" + getDialogId(), hintCount).apply();
|
||||
|
@ -24415,7 +24418,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
|||
alert.setDimBehind(false);
|
||||
closeMenu(false);
|
||||
|
||||
int hintCount = MessagesController.getNotificationsSettings(currentAccount).getInt("dialog_show_translate_count" + getDialogId(), 3);
|
||||
int hintCount = MessagesController.getNotificationsSettings(currentAccount).getInt("dialog_show_translate_count" + getDialogId(), 5);
|
||||
if (hintCount > 0) {
|
||||
hintCount--;
|
||||
MessagesController.getNotificationsSettings(currentAccount).edit().putInt("dialog_show_translate_count" + getDialogId(), hintCount).apply();
|
||||
|
|
|
@ -2060,7 +2060,7 @@ public class ChatActivityEnterView extends BlurredFrameLayout implements Notific
|
|||
if (hasRecordVideo) {
|
||||
calledRecordRunnable = false;
|
||||
recordAudioVideoRunnableStarted = true;
|
||||
AndroidUtilities.runOnUIThread(recordAudioVideoRunnable, Math.max(150, ViewConfiguration.getLongPressTimeout()));
|
||||
AndroidUtilities.runOnUIThread(recordAudioVideoRunnable, 150);
|
||||
} else {
|
||||
recordAudioVideoRunnable.run();
|
||||
}
|
||||
|
|
|
@ -37,6 +37,7 @@ import android.text.TextPaint;
|
|||
import android.text.TextUtils;
|
||||
import android.text.TextWatcher;
|
||||
import android.text.style.ImageSpan;
|
||||
import android.util.Log;
|
||||
import android.util.LongSparseArray;
|
||||
import android.util.Property;
|
||||
import android.util.TypedValue;
|
||||
|
@ -679,6 +680,7 @@ public class ChatAttachAlert extends BottomSheet implements NotificationCenter.N
|
|||
|
||||
private FrameLayout frameLayout2;
|
||||
protected EditTextEmoji commentTextView;
|
||||
private int[] commentTextViewLocation = new int[2];
|
||||
private FrameLayout writeButtonContainer;
|
||||
private ImageView writeButton;
|
||||
private Drawable writeButtonDrawable;
|
||||
|
@ -1228,6 +1230,8 @@ public class ChatAttachAlert extends BottomSheet implements NotificationCenter.N
|
|||
invalidate();
|
||||
frameLayout2.invalidate();
|
||||
|
||||
updateCommentTextViewPosition();
|
||||
|
||||
if (currentAttachLayout != null) {
|
||||
currentAttachLayout.onContainerTranslationUpdated(currentPanTranslationY);
|
||||
}
|
||||
|
@ -2226,7 +2230,13 @@ public class ChatAttachAlert extends BottomSheet implements NotificationCenter.N
|
|||
float dy = (messageEditTextPredrawHeigth - editText.getMeasuredHeight()) + (messageEditTextPredrawScrollY - editText.getScrollY());
|
||||
editText.setOffsetY(editText.getOffsetY() - dy);
|
||||
ValueAnimator a = ValueAnimator.ofFloat(editText.getOffsetY(), 0);
|
||||
a.addUpdateListener(animation -> editText.setOffsetY((float) animation.getAnimatedValue()));
|
||||
a.addUpdateListener(animation -> {
|
||||
editText.setOffsetY((float) animation.getAnimatedValue());
|
||||
updateCommentTextViewPosition();
|
||||
if (currentAttachLayout == photoLayout) {
|
||||
photoLayout.onContainerTranslationUpdated(currentPanTranslationY);
|
||||
}
|
||||
});
|
||||
if (messageEditTextAnimator != null) {
|
||||
messageEditTextAnimator.cancel();
|
||||
}
|
||||
|
@ -2253,6 +2263,7 @@ public class ChatAttachAlert extends BottomSheet implements NotificationCenter.N
|
|||
}
|
||||
chatActivityEnterViewAnimateFromTop = frameLayout2.getTop() + captionEditTextTopOffset;
|
||||
frameLayout2.invalidate();
|
||||
updateCommentTextViewPosition();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -2270,6 +2281,12 @@ public class ChatAttachAlert extends BottomSheet implements NotificationCenter.N
|
|||
protected void closeParent() {
|
||||
ChatAttachAlert.super.dismiss();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
|
||||
super.onLayout(changed, left, top, right, bottom);
|
||||
updateCommentTextViewPosition();
|
||||
}
|
||||
};
|
||||
commentTextView.setHint(LocaleController.getString("AddCaption", R.string.AddCaption));
|
||||
commentTextView.onResume();
|
||||
|
@ -2608,6 +2625,14 @@ public class ChatAttachAlert extends BottomSheet implements NotificationCenter.N
|
|||
}
|
||||
}
|
||||
|
||||
public void updateCommentTextViewPosition() {
|
||||
commentTextView.getLocationOnScreen(commentTextViewLocation);
|
||||
}
|
||||
|
||||
public int getCommentTextViewTop() {
|
||||
return commentTextViewLocation[1];
|
||||
}
|
||||
|
||||
private void showCaptionLimitBulletin(BaseFragment parentFragment) {
|
||||
if (!(parentFragment instanceof ChatActivity) || !ChatObject.isChannelAndNotMegaGroup(((ChatActivity) parentFragment).getCurrentChat())) {
|
||||
return;
|
||||
|
|
|
@ -597,7 +597,7 @@ public class ChatAttachAlertPhotoLayout extends ChatAttachAlert.AttachAlertLayou
|
|||
parentAlert.selectedMenuItem.addSubItem(group, R.drawable.msg_ungroup, LocaleController.getString("SendWithoutGrouping", R.string.SendWithoutGrouping));
|
||||
spoilerItem = parentAlert.selectedMenuItem.addSubItem(spoiler, R.drawable.msg_spoiler, LocaleController.getString("EnablePhotoSpoiler", R.string.EnablePhotoSpoiler));
|
||||
parentAlert.selectedMenuItem.addSubItem(open_in, R.drawable.msg_openin, LocaleController.getString("OpenInExternalApp", R.string.OpenInExternalApp));
|
||||
parentAlert.selectedMenuItem.addGap(preview_gap);
|
||||
parentAlert.selectedMenuItem.addColoredGap(preview_gap);
|
||||
previewItem = parentAlert.selectedMenuItem.addSubItem(preview, R.drawable.msg_view_file, LocaleController.getString("AttachMediaPreviewButton", R.string.AttachMediaPreviewButton));
|
||||
parentAlert.selectedMenuItem.setFitSubItems(true);
|
||||
|
||||
|
@ -2117,12 +2117,13 @@ public class ChatAttachAlertPhotoLayout extends ChatAttachAlert.AttachAlertLayou
|
|||
if (Build.VERSION.SDK_INT >= 21) {
|
||||
super.dispatchDraw(canvas);
|
||||
} else {
|
||||
int maxY = (int) Math.min(parentAlert.getCommentTextViewTop() + currentPanTranslationY + parentAlert.getContainerView().getTranslationY() - cameraView.getTranslationY(), getMeasuredHeight());
|
||||
if (cameraAnimationInProgress) {
|
||||
AndroidUtilities.rectTmp.set(animationClipLeft + cameraViewOffsetX * (1f - cameraOpenProgress), animationClipTop + cameraViewOffsetY * (1f - cameraOpenProgress), animationClipRight, animationClipBottom);
|
||||
AndroidUtilities.rectTmp.set(animationClipLeft + cameraViewOffsetX * (1f - cameraOpenProgress), animationClipTop + cameraViewOffsetY * (1f - cameraOpenProgress), animationClipRight, Math.min(maxY, animationClipBottom));
|
||||
} else if (!cameraAnimationInProgress && !cameraOpened) {
|
||||
AndroidUtilities.rectTmp.set(cameraViewOffsetX, cameraViewOffsetY, getMeasuredWidth(), getMeasuredHeight());
|
||||
AndroidUtilities.rectTmp.set(cameraViewOffsetX, cameraViewOffsetY, getMeasuredWidth(), Math.min(maxY, getMeasuredHeight()));
|
||||
} else {
|
||||
AndroidUtilities.rectTmp.set(0 , 0, getMeasuredWidth(), getMeasuredHeight());
|
||||
AndroidUtilities.rectTmp.set(0 , 0, getMeasuredWidth(), Math.min(maxY, getMeasuredHeight()));
|
||||
}
|
||||
canvas.save();
|
||||
canvas.clipRect(AndroidUtilities.rectTmp);
|
||||
|
@ -2153,14 +2154,20 @@ public class ChatAttachAlertPhotoLayout extends ChatAttachAlert.AttachAlertLayou
|
|||
cameraView.setOutlineProvider(new ViewOutlineProvider() {
|
||||
@Override
|
||||
public void getOutline(View view, Outline outline) {
|
||||
int maxY = (int) Math.min(parentAlert.getCommentTextViewTop() + currentPanTranslationY + parentAlert.getContainerView().getTranslationY() - cameraView.getTranslationY(), view.getMeasuredHeight());
|
||||
if (cameraOpened) {
|
||||
maxY = view.getMeasuredHeight();
|
||||
} else if (cameraAnimationInProgress) {
|
||||
maxY = AndroidUtilities.lerp(maxY, view.getMeasuredHeight(), cameraOpenProgress);
|
||||
}
|
||||
if (cameraAnimationInProgress) {
|
||||
AndroidUtilities.rectTmp.set(animationClipLeft + cameraViewOffsetX * (1f - cameraOpenProgress), animationClipTop + cameraViewOffsetY * (1f - cameraOpenProgress), animationClipRight, animationClipBottom);
|
||||
outline.setRect((int) AndroidUtilities.rectTmp.left,(int) AndroidUtilities.rectTmp.top, (int) AndroidUtilities.rectTmp.right, (int) AndroidUtilities.rectTmp.bottom);
|
||||
outline.setRect((int) AndroidUtilities.rectTmp.left,(int) AndroidUtilities.rectTmp.top, (int) AndroidUtilities.rectTmp.right, Math.min(maxY, (int) AndroidUtilities.rectTmp.bottom));
|
||||
} else if (!cameraAnimationInProgress && !cameraOpened) {
|
||||
int rad = AndroidUtilities.dp(8 * parentAlert.cornerRadius);
|
||||
outline.setRoundRect((int) cameraViewOffsetX, (int) cameraViewOffsetY, view.getMeasuredWidth() + rad, view.getMeasuredHeight() + rad, rad);
|
||||
outline.setRoundRect((int) cameraViewOffsetX, (int) cameraViewOffsetY, view.getMeasuredWidth() + rad, Math.min(maxY, view.getMeasuredHeight()) + rad, rad);
|
||||
} else {
|
||||
outline.setRect(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
|
||||
outline.setRect(0, 0, view.getMeasuredWidth(), Math.min(maxY, view.getMeasuredHeight()));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -2228,6 +2235,12 @@ public class ChatAttachAlertPhotoLayout extends ChatAttachAlert.AttachAlertLayou
|
|||
cameraIcon = new FrameLayout(parentAlert.baseFragment.getParentActivity()) {
|
||||
@Override
|
||||
protected void onDraw(Canvas canvas) {
|
||||
int maxY = (int) Math.min(parentAlert.getCommentTextViewTop() + currentPanTranslationY + parentAlert.getContainerView().getTranslationY() - cameraView.getTranslationY(), getMeasuredHeight());
|
||||
if (cameraOpened) {
|
||||
maxY = getMeasuredHeight();
|
||||
} else if (cameraAnimationInProgress) {
|
||||
maxY = AndroidUtilities.lerp(maxY, getMeasuredHeight(), cameraOpenProgress);
|
||||
}
|
||||
int w = cameraDrawable.getIntrinsicWidth();
|
||||
int h = cameraDrawable.getIntrinsicHeight();
|
||||
int x = (itemSize - w) / 2;
|
||||
|
@ -2235,8 +2248,16 @@ public class ChatAttachAlertPhotoLayout extends ChatAttachAlert.AttachAlertLayou
|
|||
if (cameraViewOffsetY != 0) {
|
||||
y -= cameraViewOffsetY;
|
||||
}
|
||||
boolean clip = maxY < getMeasuredHeight();
|
||||
if (clip) {
|
||||
canvas.save();
|
||||
canvas.clipRect(0, 0, getMeasuredWidth(), maxY);
|
||||
}
|
||||
cameraDrawable.setBounds(x, y, x + w, y + h);
|
||||
cameraDrawable.draw(canvas);
|
||||
if (clip) {
|
||||
canvas.restore();
|
||||
}
|
||||
}
|
||||
};
|
||||
cameraIcon.setWillNotDraw(false);
|
||||
|
@ -2758,16 +2779,16 @@ public class ChatAttachAlertPhotoLayout extends ChatAttachAlert.AttachAlertLayou
|
|||
int finalWidth = itemSize;
|
||||
int finalHeight = itemSize;
|
||||
|
||||
FrameLayout.LayoutParams layoutParams;
|
||||
LayoutParams layoutParams;
|
||||
if (!cameraOpened) {
|
||||
cameraView.setClipTop((int) cameraViewOffsetY);
|
||||
cameraView.setClipBottom((int) cameraViewOffsetBottomY);
|
||||
layoutParams = (FrameLayout.LayoutParams) cameraView.getLayoutParams();
|
||||
layoutParams = (LayoutParams) cameraView.getLayoutParams();
|
||||
if (layoutParams.height != finalHeight || layoutParams.width != finalWidth) {
|
||||
layoutParams.width = finalWidth;
|
||||
layoutParams.height = finalHeight;
|
||||
cameraView.setLayoutParams(layoutParams);
|
||||
final FrameLayout.LayoutParams layoutParamsFinal = layoutParams;
|
||||
final LayoutParams layoutParamsFinal = layoutParams;
|
||||
AndroidUtilities.runOnUIThread(() -> {
|
||||
if (cameraView != null) {
|
||||
cameraView.setLayoutParams(layoutParamsFinal);
|
||||
|
@ -2779,12 +2800,12 @@ public class ChatAttachAlertPhotoLayout extends ChatAttachAlert.AttachAlertLayou
|
|||
finalWidth = (int) (itemSize - cameraViewOffsetX);
|
||||
finalHeight = (int) (itemSize - cameraViewOffsetY - cameraViewOffsetBottomY);
|
||||
|
||||
layoutParams = (FrameLayout.LayoutParams) cameraIcon.getLayoutParams();
|
||||
layoutParams = (LayoutParams) cameraIcon.getLayoutParams();
|
||||
if (layoutParams.height != finalHeight || layoutParams.width != finalWidth) {
|
||||
layoutParams.width = finalWidth;
|
||||
layoutParams.height = finalHeight;
|
||||
cameraIcon.setLayoutParams(layoutParams);
|
||||
final FrameLayout.LayoutParams layoutParamsFinal = layoutParams;
|
||||
final LayoutParams layoutParamsFinal = layoutParams;
|
||||
AndroidUtilities.runOnUIThread(() -> {
|
||||
if (cameraIcon != null) {
|
||||
cameraIcon.setLayoutParams(layoutParamsFinal);
|
||||
|
@ -3484,10 +3505,36 @@ public class ChatAttachAlertPhotoLayout extends ChatAttachAlert.AttachAlertLayou
|
|||
return !cameraOpened;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPanTransitionStart(boolean keyboardVisible, int contentHeight) {
|
||||
super.onPanTransitionStart(keyboardVisible, contentHeight);
|
||||
checkCameraViewPosition();
|
||||
if (cameraView != null) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
cameraView.invalidateOutline();
|
||||
} else {
|
||||
cameraView.invalidate();
|
||||
}
|
||||
}
|
||||
if (cameraIcon != null) {
|
||||
cameraIcon.invalidate();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
void onContainerTranslationUpdated(float currentPanTranslationY) {
|
||||
this.currentPanTranslationY = currentPanTranslationY;
|
||||
checkCameraViewPosition();
|
||||
if (cameraView != null) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
cameraView.invalidateOutline();
|
||||
} else {
|
||||
cameraView.invalidate();
|
||||
}
|
||||
}
|
||||
if (cameraIcon != null) {
|
||||
cameraIcon.invalidate();
|
||||
}
|
||||
invalidate();
|
||||
}
|
||||
|
||||
|
|
|
@ -1005,7 +1005,8 @@ public class InstantCameraView extends FrameLayout implements NotificationCenter
|
|||
sortedSizes.add(previewSizes.get(i));
|
||||
}
|
||||
}
|
||||
if (sortedSizes.isEmpty() || SharedConfig.getDevicePerformanceClass() == SharedConfig.PERFORMANCE_CLASS_LOW || SharedConfig.getDevicePerformanceClass() == SharedConfig.PERFORMANCE_CLASS_AVERAGE) {
|
||||
int devicePerformanceClass = SharedConfig.getLegacyDevicePerformanceClass();
|
||||
if (sortedSizes.isEmpty() || devicePerformanceClass == SharedConfig.PERFORMANCE_CLASS_LOW || devicePerformanceClass == SharedConfig.PERFORMANCE_CLASS_AVERAGE) {
|
||||
ArrayList<Size> sizes = sortedSizes;
|
||||
if (!sortedSizes.isEmpty()) {
|
||||
sizes = sortedSizes;
|
||||
|
@ -2691,7 +2692,8 @@ public class InstantCameraView extends FrameLayout implements NotificationCenter
|
|||
}
|
||||
|
||||
private String createFragmentShader(Size previewSize) {
|
||||
if (SharedConfig.getDevicePerformanceClass() == SharedConfig.PERFORMANCE_CLASS_LOW || SharedConfig.getDevicePerformanceClass() == SharedConfig.PERFORMANCE_CLASS_AVERAGE || Math.max(previewSize.getHeight(), previewSize.getWidth()) * 0.7f < MessagesController.getInstance(currentAccount).roundVideoSize) {
|
||||
int devicePerformanceClass = SharedConfig.getLegacyDevicePerformanceClass();
|
||||
if (devicePerformanceClass == SharedConfig.PERFORMANCE_CLASS_LOW || devicePerformanceClass == SharedConfig.PERFORMANCE_CLASS_AVERAGE || Math.max(previewSize.getHeight(), previewSize.getWidth()) * 0.7f < MessagesController.getInstance(currentAccount).roundVideoSize) {
|
||||
return "#extension GL_OES_EGL_image_external : require\n" +
|
||||
"precision highp float;\n" +
|
||||
"varying vec2 vTextureCoord;\n" +
|
||||
|
|
|
@ -14,6 +14,7 @@ import android.os.Build;
|
|||
import android.text.Layout;
|
||||
|
||||
import org.telegram.messenger.AndroidUtilities;
|
||||
import org.telegram.messenger.LiteMode;
|
||||
|
||||
public class LinkPath extends Path {
|
||||
|
||||
|
@ -137,7 +138,7 @@ public class LinkPath extends Path {
|
|||
}
|
||||
centerX = (right + left) / 2;
|
||||
centerY = (y2 + y) / 2;
|
||||
if (useRoundRect) {
|
||||
if (useRoundRect && LiteMode.isEnabled(LiteMode.FLAGS_CHAT)) {
|
||||
// final CharSequence text = currentLayout.getText();
|
||||
// int startOffset = currentLayout.getOffsetForHorizontal(currentLine, left), endOffset = currentLayout.getOffsetForHorizontal(currentLine, right) + 1;
|
||||
boolean startsWithWhitespace = false; // startOffset >= 0 && startOffset < text.length() && text.charAt(startOffset) == ' ';
|
||||
|
|
|
@ -3837,7 +3837,11 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter
|
|||
photoVideoAdapter.notifyDataSetChanged();
|
||||
}
|
||||
} else {
|
||||
try {
|
||||
adapter.notifyDataSetChanged();
|
||||
} catch (Throwable e) {
|
||||
|
||||
}
|
||||
}
|
||||
if (sharedMediaData[type].messages.isEmpty() && !sharedMediaData[type].loading) {
|
||||
if (listView != null) {
|
||||
|
|
|
@ -454,20 +454,35 @@ public class DataSettingsActivity extends BaseFragment {
|
|||
}
|
||||
}
|
||||
|
||||
boolean fullString = true;
|
||||
try {
|
||||
fullString = storageDirs.size() != 2 || storageDirs.get(0).getAbsolutePath().contains("/storage/emulated/") == storageDirs.get(1).getAbsolutePath().contains("/storage/emulated/");
|
||||
} catch (Exception ignore) {}
|
||||
|
||||
for (int a = 0, N = storageDirs.size(); a < N; a++) {
|
||||
String storageDir = storageDirs.get(a).getAbsolutePath();
|
||||
File file = storageDirs.get(a);
|
||||
String storageDir = file.getAbsolutePath();
|
||||
LanguageCell cell = new LanguageCell(context);
|
||||
cell.setPadding(AndroidUtilities.dp(4), 0, AndroidUtilities.dp(4), 0);
|
||||
cell.setTag(a);
|
||||
cell.setValue(storageDir.contains("/storage/emulated/") ? LocaleController.getString("InternalStorage", R.string.InternalStorage) : LocaleController.getString("SdCard", R.string.SdCard), storageDir);
|
||||
cell.setValue(
|
||||
storageDir.contains("/storage/emulated/") ? LocaleController.getString("InternalStorage", R.string.InternalStorage) : LocaleController.getString("SdCard", R.string.SdCard),
|
||||
fullString ?
|
||||
LocaleController.formatString("StoragePathFreeValue", R.string.StoragePathFreeValue, AndroidUtilities.formatFileSize(file.getFreeSpace()), storageDir) :
|
||||
LocaleController.formatString("StoragePathFree", R.string.StoragePathFree, AndroidUtilities.formatFileSize(file.getFreeSpace()))
|
||||
);
|
||||
cell.setLanguageSelected(storageDir.startsWith(dir), false);
|
||||
cell.setBackground(Theme.createSelectorDrawable(Theme.getColor(Theme.key_dialogButtonSelector), 2));
|
||||
linearLayout.addView(cell);
|
||||
cell.setOnClickListener(v -> {
|
||||
SharedConfig.storageCacheDir = storageDir;
|
||||
SharedConfig.saveConfig();
|
||||
ImageLoader.getInstance().checkMediaPaths();
|
||||
builder.getDismissRunnable().run();
|
||||
listAdapter.notifyItemChanged(storageNumRow);
|
||||
rebind(storageNumRow);
|
||||
ImageLoader.getInstance().checkMediaPaths(() -> {
|
||||
CacheControlActivity.resetCalculatedTotalSIze();
|
||||
loadCacheSize();
|
||||
});
|
||||
});
|
||||
}
|
||||
builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null);
|
||||
|
@ -582,7 +597,18 @@ public class DataSettingsActivity extends BaseFragment {
|
|||
);
|
||||
textCell.setTextAndValueAndColorfulIcon(LocaleController.getString("NetworkUsage", R.string.NetworkUsage), AndroidUtilities.formatFileSize(size), true, R.drawable.msg_filled_datausage, getThemedColor(Theme.key_color_green), storageNumRow != -1);
|
||||
} else if (position == storageNumRow) {
|
||||
textCell.setTextAndColorfulIcon(LocaleController.getString("StoragePath", R.string.StoragePath), R.drawable.msg_filled_sdcard, getThemedColor(Theme.key_color_yellow), false);
|
||||
String dir = storageDirs.get(0).getAbsolutePath();
|
||||
if (!TextUtils.isEmpty(SharedConfig.storageCacheDir)) {
|
||||
for (int a = 0, N = storageDirs.size(); a < N; a++) {
|
||||
String path = storageDirs.get(a).getAbsolutePath();
|
||||
if (path.startsWith(SharedConfig.storageCacheDir)) {
|
||||
dir = path;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
final String value = dir == null || dir.contains("/storage/emulated/") ? LocaleController.getString("InternalStorage", R.string.InternalStorage) : LocaleController.getString("SdCard", R.string.SdCard);
|
||||
textCell.setTextAndValueAndColorfulIcon(LocaleController.getString("StoragePath", R.string.StoragePath), value, true, R.drawable.msg_filled_sdcard, getThemedColor(Theme.key_color_yellow), false);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -43,6 +43,7 @@ import androidx.recyclerview.widget.RecyclerView;
|
|||
|
||||
import org.telegram.messenger.AndroidUtilities;
|
||||
import org.telegram.messenger.ChatObject;
|
||||
import org.telegram.messenger.ImageLocation;
|
||||
import org.telegram.messenger.LocaleController;
|
||||
import org.telegram.messenger.MemberRequestsController;
|
||||
import org.telegram.messenger.MessagesController;
|
||||
|
@ -777,8 +778,19 @@ public class MemberRequestsDelegate implements MemberRequestCell.OnClickListener
|
|||
public void setImporter(TLRPC.TL_chatInviteImporter importer, BackupImageView imageView) {
|
||||
this.importer = importer;
|
||||
this.imageView = imageView;
|
||||
|
||||
final ImageLocation imageLocation;
|
||||
final ImageLocation thumbLocation;
|
||||
TLRPC.User currentUser = MessagesController.getInstance(currentAccount).getUser(importer.user_id);
|
||||
imageLocation = ImageLocation.getForUserOrChat(currentUser, ImageLocation.TYPE_BIG);
|
||||
thumbLocation = ImageLocation.getForUserOrChat(currentUser, ImageLocation.TYPE_SMALL);
|
||||
final TLRPC.UserFull userFull = MessagesController.getInstance(currentAccount).getUserFull(importer.user_id);
|
||||
if (userFull == null) {
|
||||
MessagesController.getInstance(currentAccount).loadUserInfo(currentUser, false, 0);
|
||||
}
|
||||
viewPager.setParentAvatarImage(imageView);
|
||||
viewPager.setData(importer.user_id, true);
|
||||
viewPager.initIfEmpty(null, imageLocation, thumbLocation, true);
|
||||
TLRPC.User user = users.get(importer.user_id);
|
||||
nameText.setText(UserObject.getUserName(user));
|
||||
bioText.setText(importer.about);
|
||||
|
|
|
@ -8824,6 +8824,7 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
|||
} else if (id == NotificationCenter.onDatabaseReset) {
|
||||
dialogsLoaded[currentAccount] = false;
|
||||
loadDialogs(getAccountInstance());
|
||||
getMessagesController().loadPinnedDialogs(folderId, 0, null);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -742,7 +742,7 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati
|
|||
NotificationCenter.getGlobalInstance().addObserver(this, NotificationCenter.requestPermissions);
|
||||
NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.currentUserPremiumStatusChanged);
|
||||
LiteMode.addOnPowerSaverAppliedListener(this::onPowerSaver);
|
||||
if (actionBarLayout.getFragmentStack().isEmpty()) {
|
||||
if (actionBarLayout.getFragmentStack().isEmpty() && (layersActionBarLayout == null || layersActionBarLayout.getFragmentStack().isEmpty())) {
|
||||
if (!UserConfig.getInstance(currentAccount).isClientActivated()) {
|
||||
actionBarLayout.addFragmentToStack(getClientNotActivatedFragment());
|
||||
drawerLayoutContainer.setAllowOpenDrawer(false, false);
|
||||
|
@ -811,7 +811,7 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati
|
|||
FileLog.e(e);
|
||||
}
|
||||
} else {
|
||||
BaseFragment fragment = actionBarLayout.getFragmentStack().get(0);
|
||||
BaseFragment fragment = actionBarLayout.getFragmentStack().size() > 0 ? actionBarLayout.getFragmentStack().get(0) : layersActionBarLayout.getFragmentStack().get(0);
|
||||
if (fragment instanceof DialogsActivity) {
|
||||
((DialogsActivity) fragment).setSideMenu(sideMenu);
|
||||
}
|
||||
|
@ -1410,14 +1410,17 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati
|
|||
|
||||
if (!AndroidUtilities.isInMultiwindow && (!AndroidUtilities.isSmallTablet() || getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE)) {
|
||||
tabletFullSize = false;
|
||||
if (actionBarLayout.getFragmentStack().size() >= 2) {
|
||||
for (int a = 1; a < actionBarLayout.getFragmentStack().size(); a++) {
|
||||
BaseFragment chatFragment = actionBarLayout.getFragmentStack().get(a);
|
||||
List<BaseFragment> fragmentStack = actionBarLayout.getFragmentStack();
|
||||
if (fragmentStack.size() >= 2) {
|
||||
for (int a = 1; a < fragmentStack.size(); a++) {
|
||||
BaseFragment chatFragment = fragmentStack.get(a);
|
||||
if (chatFragment instanceof ChatActivity) {
|
||||
((ChatActivity) chatFragment).setIgnoreAttachOnPause(true);
|
||||
}
|
||||
chatFragment.onPause();
|
||||
actionBarLayout.removeFragmentFromStack(a);
|
||||
chatFragment.onFragmentDestroy();
|
||||
chatFragment.setParentLayout(null);
|
||||
fragmentStack.remove(chatFragment);
|
||||
rightActionBarLayout.addFragmentToStack(chatFragment);
|
||||
a--;
|
||||
}
|
||||
|
@ -1431,14 +1434,17 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati
|
|||
shadowTabletSide.setVisibility(!actionBarLayout.getFragmentStack().isEmpty() ? View.VISIBLE : View.GONE);
|
||||
} else {
|
||||
tabletFullSize = true;
|
||||
if (!rightActionBarLayout.getFragmentStack().isEmpty()) {
|
||||
for (int a = 0; a < rightActionBarLayout.getFragmentStack().size(); a++) {
|
||||
BaseFragment chatFragment = rightActionBarLayout.getFragmentStack().get(a);
|
||||
List<BaseFragment> fragmentStack = rightActionBarLayout.getFragmentStack();
|
||||
if (!fragmentStack.isEmpty()) {
|
||||
for (int a = 0; a < fragmentStack.size(); a++) {
|
||||
BaseFragment chatFragment = fragmentStack.get(a);
|
||||
if (chatFragment instanceof ChatActivity) {
|
||||
((ChatActivity) chatFragment).setIgnoreAttachOnPause(true);
|
||||
}
|
||||
chatFragment.onPause();
|
||||
rightActionBarLayout.removeFragmentFromStack(a);
|
||||
chatFragment.onFragmentDestroy();
|
||||
chatFragment.setParentLayout(null);
|
||||
fragmentStack.remove(chatFragment);
|
||||
actionBarLayout.addFragmentToStack(chatFragment);
|
||||
a--;
|
||||
}
|
||||
|
|
|
@ -434,15 +434,7 @@ public class LinkEditActivity extends BaseFragment {
|
|||
@Override public void onTextChanged(CharSequence s, int start, int before, int count) { }
|
||||
@Override
|
||||
public void afterTextChanged(Editable s) {
|
||||
SpannableStringBuilder builder = new SpannableStringBuilder(s);
|
||||
Emoji.replaceEmoji(builder, nameEditText.getPaint().getFontMetricsInt(), (int) nameEditText.getPaint().getTextSize(), false);
|
||||
int selection = nameEditText.getSelectionStart();
|
||||
nameEditText.removeTextChangedListener(this);
|
||||
nameEditText.setText(builder);
|
||||
if (selection >= 0) {
|
||||
nameEditText.setSelection(selection);
|
||||
}
|
||||
nameEditText.addTextChangedListener(this);
|
||||
Emoji.replaceEmoji(s, nameEditText.getPaint().getFontMetricsInt(), (int) nameEditText.getPaint().getTextSize(), false);
|
||||
}
|
||||
});
|
||||
nameEditText.setCursorVisible(false);
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package org.telegram.ui;
|
||||
|
||||
import static org.telegram.messenger.AndroidUtilities.dp;
|
||||
import static org.telegram.messenger.AndroidUtilities.dpf2;
|
||||
|
||||
import android.animation.Animator;
|
||||
import android.animation.AnimatorListenerAdapter;
|
||||
|
@ -10,17 +9,11 @@ import android.content.Context;
|
|||
import android.content.SharedPreferences;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.ColorFilter;
|
||||
import android.graphics.Paint;
|
||||
import android.graphics.Path;
|
||||
import android.graphics.PixelFormat;
|
||||
import android.graphics.PorterDuff;
|
||||
import android.graphics.PorterDuffColorFilter;
|
||||
import android.graphics.RectF;
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Build;
|
||||
import android.text.SpannableString;
|
||||
import android.os.Bundle;
|
||||
import android.text.SpannableStringBuilder;
|
||||
import android.text.Spanned;
|
||||
import android.text.TextUtils;
|
||||
|
@ -31,6 +24,7 @@ import android.view.Gravity;
|
|||
import android.view.HapticFeedbackConstants;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.accessibility.AccessibilityEvent;
|
||||
import android.view.accessibility.AccessibilityNodeInfo;
|
||||
import android.widget.FrameLayout;
|
||||
import android.widget.ImageView;
|
||||
|
@ -44,9 +38,6 @@ import androidx.recyclerview.widget.DefaultItemAnimator;
|
|||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.google.android.exoplayer2.extractor.mkv.MatroskaExtractor;
|
||||
import com.google.zxing.common.detector.MathUtils;
|
||||
|
||||
import org.telegram.messenger.AndroidUtilities;
|
||||
import org.telegram.messenger.LiteMode;
|
||||
import org.telegram.messenger.LocaleController;
|
||||
|
@ -59,7 +50,6 @@ import org.telegram.ui.ActionBar.BaseFragment;
|
|||
import org.telegram.ui.ActionBar.Theme;
|
||||
import org.telegram.ui.Cells.HeaderCell;
|
||||
import org.telegram.ui.Cells.TextCell;
|
||||
import org.telegram.ui.Cells.TextCheckCell;
|
||||
import org.telegram.ui.Cells.TextInfoPrivacyCell;
|
||||
import org.telegram.ui.Components.AnimatedEmojiDrawable;
|
||||
import org.telegram.ui.Components.AnimatedTextView;
|
||||
|
@ -68,17 +58,15 @@ import org.telegram.ui.Components.Bulletin;
|
|||
import org.telegram.ui.Components.BulletinFactory;
|
||||
import org.telegram.ui.Components.CheckBox2;
|
||||
import org.telegram.ui.Components.CubicBezierInterpolator;
|
||||
import org.telegram.ui.Components.IntSeekBarAccessibilityDelegate;
|
||||
import org.telegram.ui.Components.LayoutHelper;
|
||||
import org.telegram.ui.Components.ListView.AdapterWithDiffUtils;
|
||||
import org.telegram.ui.Components.RecyclerListView;
|
||||
import org.telegram.ui.Components.SeekBarAccessibilityDelegate;
|
||||
import org.telegram.ui.Components.SeekBarView;
|
||||
import org.telegram.ui.Components.SlideChooseView;
|
||||
import org.telegram.ui.Components.SlideView;
|
||||
import org.telegram.ui.Components.SpannableStringLight;
|
||||
import org.telegram.ui.Components.Switch;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Locale;
|
||||
|
||||
public class LiteModeSettingsActivity extends BaseFragment {
|
||||
|
||||
|
@ -223,7 +211,7 @@ public class LiteModeSettingsActivity extends BaseFragment {
|
|||
items.add(Item.asCheckbox(LocaleController.getString("LiteOptionsBackground"), LiteMode.FLAG_CHAT_BACKGROUND));
|
||||
items.add(Item.asCheckbox(LocaleController.getString("LiteOptionsTopics"), LiteMode.FLAG_CHAT_FORUM_TWOCOLUMN));
|
||||
items.add(Item.asCheckbox(LocaleController.getString("LiteOptionsSpoiler"), LiteMode.FLAG_CHAT_SPOILER));
|
||||
if (SharedConfig.canBlurChat()) {
|
||||
if (SharedConfig.getDevicePerformanceClass() >= SharedConfig.PERFORMANCE_CLASS_AVERAGE) {
|
||||
items.add(Item.asCheckbox(LocaleController.getString("LiteOptionsBlur"), LiteMode.FLAG_CHAT_BLUR));
|
||||
}
|
||||
items.add(Item.asCheckbox(LocaleController.getString("LiteOptionsScale"), LiteMode.FLAG_CHAT_SCALE));
|
||||
|
@ -309,7 +297,22 @@ public class LiteModeSettingsActivity extends BaseFragment {
|
|||
view = powerSaverSlider;
|
||||
view.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite));
|
||||
} else if (viewType == VIEW_TYPE_INFO) {
|
||||
view = new TextInfoPrivacyCell(context);
|
||||
view = new TextInfoPrivacyCell(context) {
|
||||
@Override
|
||||
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
|
||||
super.onInitializeAccessibilityNodeInfo(info);
|
||||
|
||||
info.setEnabled(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPopulateAccessibilityEvent(AccessibilityEvent event) {
|
||||
super.onPopulateAccessibilityEvent(event);
|
||||
|
||||
event.setContentDescription(getTextView().getText());
|
||||
setContentDescription(getTextView().getText());
|
||||
}
|
||||
};
|
||||
} else if (viewType == VIEW_TYPE_SWITCH || viewType == VIEW_TYPE_CHECKBOX) {
|
||||
view = new SwitchCell(context);
|
||||
} else if (viewType == VIEW_TYPE_SWITCH2) {
|
||||
|
@ -342,6 +345,7 @@ public class LiteModeSettingsActivity extends BaseFragment {
|
|||
textInfoPrivacyCell.setFixedSize(0);
|
||||
}
|
||||
textInfoPrivacyCell.setText(item.text);
|
||||
textInfoPrivacyCell.setContentDescription(item.text);
|
||||
boolean top = position > 0 && items.get(position - 1).viewType != VIEW_TYPE_INFO;
|
||||
boolean bottom = position + 1 < items.size() && items.get(position + 1).viewType != VIEW_TYPE_INFO;
|
||||
if (top && bottom) {
|
||||
|
@ -401,6 +405,7 @@ public class LiteModeSettingsActivity extends BaseFragment {
|
|||
public SwitchCell(Context context) {
|
||||
super(context);
|
||||
|
||||
setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_YES);
|
||||
setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite));
|
||||
|
||||
imageView = new ImageView(context);
|
||||
|
@ -423,12 +428,14 @@ public class LiteModeSettingsActivity extends BaseFragment {
|
|||
textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16);
|
||||
textView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText));
|
||||
textView.setGravity(LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT);
|
||||
textView.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_NO);
|
||||
|
||||
countTextView = new AnimatedTextView(context, false, true, true);
|
||||
countTextView.setAnimationProperties(.35f, 0, 200, CubicBezierInterpolator.EASE_OUT_QUINT);
|
||||
countTextView.setTypeface(AndroidUtilities.getTypeface(AndroidUtilities.TYPEFACE_ROBOTO_MEDIUM));
|
||||
countTextView.setTextSize(dp(14));
|
||||
countTextView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText));
|
||||
countTextView.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_NO);
|
||||
|
||||
arrowView = new ImageView(context);
|
||||
arrowView.setVisibility(GONE);
|
||||
|
@ -452,6 +459,7 @@ public class LiteModeSettingsActivity extends BaseFragment {
|
|||
switchView = new Switch(context);
|
||||
switchView.setVisibility(GONE);
|
||||
switchView.setColors(Theme.key_switchTrack, Theme.key_switchTrackChecked, Theme.key_windowBackgroundWhite, Theme.key_windowBackgroundWhite);
|
||||
switchView.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_NO);
|
||||
addView(switchView, LayoutHelper.createFrame(37, 50, Gravity.CENTER_VERTICAL | (LocaleController.isRTL ? Gravity.LEFT : Gravity.RIGHT), 19, 0, 19, 0));
|
||||
|
||||
checkBoxView = new CheckBox2(context, 21);
|
||||
|
@ -460,6 +468,7 @@ public class LiteModeSettingsActivity extends BaseFragment {
|
|||
checkBoxView.setChecked(true, false);
|
||||
checkBoxView.setDrawBackgroundAsArc(10);
|
||||
checkBoxView.setVisibility(GONE);
|
||||
checkBoxView.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_NO);
|
||||
addView(checkBoxView, LayoutHelper.createFrame(21, 21, Gravity.CENTER_VERTICAL | (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT), LocaleController.isRTL ? 0 : 64, 0, LocaleController.isRTL ? 64 : 0, 0));
|
||||
|
||||
setFocusable(true);
|
||||
|
@ -555,11 +564,24 @@ public class LiteModeSettingsActivity extends BaseFragment {
|
|||
}
|
||||
|
||||
private int preprocessFlagsCount(int flags) {
|
||||
boolean isPremium = getUserConfig().isPremium();
|
||||
int count = Integer.bitCount(flags);
|
||||
count += ((flags & LiteMode.FLAG_ANIMATED_EMOJI_CHAT_NOT_PREMIUM) > 0 ? -1 : 0) + ((flags & LiteMode.FLAG_ANIMATED_EMOJI_CHAT_PREMIUM) > 0 ? -1 : 0) + ((flags & LiteMode.FLAG_ANIMATED_EMOJI_CHAT) > 0 ? +1 : 0);
|
||||
count += ((flags & LiteMode.FLAG_ANIMATED_EMOJI_REACTIONS_NOT_PREMIUM) > 0 ? -1 : 0) + ((flags & LiteMode.FLAG_ANIMATED_EMOJI_REACTIONS_PREMIUM) > 0 ? -1 : 0) + ((flags & LiteMode.FLAG_ANIMATED_EMOJI_REACTIONS) > 0 ? +1 : 0);
|
||||
count += ((flags & LiteMode.FLAG_ANIMATED_EMOJI_KEYBOARD_NOT_PREMIUM) > 0 ? -1 : 0) + ((flags & LiteMode.FLAG_ANIMATED_EMOJI_KEYBOARD_PREMIUM) > 0 ? -1 : 0) + ((flags & LiteMode.FLAG_ANIMATED_EMOJI_KEYBOARD) > 0 ? +1 : 0);
|
||||
if (!SharedConfig.canBlurChat() && (flags & LiteMode.FLAG_CHAT_BLUR) > 0) {
|
||||
if (isPremium) {
|
||||
if ((flags & LiteMode.FLAG_ANIMATED_EMOJI_CHAT_NOT_PREMIUM) > 0)
|
||||
count--;
|
||||
if ((flags & LiteMode.FLAG_ANIMATED_EMOJI_REACTIONS_NOT_PREMIUM) > 0)
|
||||
count--;
|
||||
if ((flags & LiteMode.FLAG_ANIMATED_EMOJI_KEYBOARD_NOT_PREMIUM) > 0)
|
||||
count--;
|
||||
} else {
|
||||
if ((flags & LiteMode.FLAG_ANIMATED_EMOJI_CHAT_PREMIUM) > 0)
|
||||
count--;
|
||||
if ((flags & LiteMode.FLAG_ANIMATED_EMOJI_REACTIONS_PREMIUM) > 0)
|
||||
count--;
|
||||
if ((flags & LiteMode.FLAG_ANIMATED_EMOJI_KEYBOARD_PREMIUM) > 0)
|
||||
count--;
|
||||
}
|
||||
if (SharedConfig.getDevicePerformanceClass() < SharedConfig.PERFORMANCE_CLASS_AVERAGE && (flags & LiteMode.FLAG_CHAT_BLUR) > 0) {
|
||||
count--;
|
||||
}
|
||||
return count;
|
||||
|
@ -590,8 +612,9 @@ public class LiteModeSettingsActivity extends BaseFragment {
|
|||
@Override
|
||||
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
|
||||
super.onInitializeAccessibilityNodeInfo(info);
|
||||
info.setClassName("android.widget.Switch");
|
||||
info.setClassName(checkBoxView.getVisibility() == View.VISIBLE ? "android.widget.CheckBox" : "android.widget.Switch");
|
||||
info.setCheckable(true);
|
||||
info.setEnabled(true);
|
||||
if (checkBoxView.getVisibility() == View.VISIBLE) {
|
||||
info.setChecked(checkBoxView.isChecked());
|
||||
} else {
|
||||
|
@ -621,11 +644,14 @@ public class LiteModeSettingsActivity extends BaseFragment {
|
|||
TextView rightTextView;
|
||||
SeekBarView seekBarView;
|
||||
|
||||
private SeekBarAccessibilityDelegate seekBarAccessibilityDelegate;
|
||||
|
||||
public PowerSaverSlider(Context context) {
|
||||
super(context);
|
||||
|
||||
headerLayout = new LinearLayout(context);
|
||||
headerLayout.setGravity(LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT);
|
||||
headerLayout.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS);
|
||||
|
||||
headerTextView = new TextView(context);
|
||||
headerTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15);
|
||||
|
@ -680,9 +706,11 @@ public class LiteModeSettingsActivity extends BaseFragment {
|
|||
}
|
||||
});
|
||||
seekBarView.setProgress(LiteMode.getPowerSaverLevel() / 100F);
|
||||
seekBarView.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_NO);
|
||||
addView(seekBarView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 38 + 6, Gravity.TOP, 6, 68, 6, 0));
|
||||
|
||||
valuesView = new FrameLayout(context);
|
||||
valuesView.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS);
|
||||
|
||||
leftTextView = new TextView(context);
|
||||
leftTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 13);
|
||||
|
@ -725,9 +753,76 @@ public class LiteModeSettingsActivity extends BaseFragment {
|
|||
|
||||
addView(valuesView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.TOP | Gravity.FILL_HORIZONTAL, 21, 52, 21, 0));
|
||||
|
||||
seekBarAccessibilityDelegate = new IntSeekBarAccessibilityDelegate() {
|
||||
@Override
|
||||
protected int getProgress() {
|
||||
return LiteMode.getPowerSaverLevel();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setProgress(int progress) {
|
||||
seekBarView.delegate.onSeekBarDrag(true, progress / 100f);
|
||||
seekBarView.setProgress(progress / 100f);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getMaxValue() {
|
||||
return 100;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getDelta() {
|
||||
return 5;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onInitializeAccessibilityNodeInfoInternal(View host, AccessibilityNodeInfo info) {
|
||||
super.onInitializeAccessibilityNodeInfoInternal(host, info);
|
||||
|
||||
info.setEnabled(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPopulateAccessibilityEvent(@NonNull View host, @NonNull AccessibilityEvent event) {
|
||||
super.onPopulateAccessibilityEvent(host, event);
|
||||
|
||||
StringBuilder sb = new StringBuilder(LocaleController.getString(R.string.LiteBatteryTitle)).append(", ");
|
||||
int percent = LiteMode.getPowerSaverLevel();
|
||||
if (percent <= 0) {
|
||||
sb.append(LocaleController.getString(R.string.LiteBatteryAlwaysDisabled));
|
||||
} else if (percent >= 100) {
|
||||
sb.append(LocaleController.getString(R.string.LiteBatteryAlwaysEnabled));
|
||||
} else {
|
||||
sb.append(LocaleController.formatString(R.string.AccDescrLiteBatteryWhenBelow, Math.round(percent)));
|
||||
}
|
||||
|
||||
event.setContentDescription(sb);
|
||||
setContentDescription(sb);
|
||||
}
|
||||
};
|
||||
|
||||
update();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
|
||||
super.onInitializeAccessibilityNodeInfo(info);
|
||||
|
||||
seekBarAccessibilityDelegate.onInitializeAccessibilityNodeInfo(this, info);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPopulateAccessibilityEvent(AccessibilityEvent event) {
|
||||
super.onPopulateAccessibilityEvent(event);
|
||||
|
||||
seekBarAccessibilityDelegate.onPopulateAccessibilityEvent(this, event);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean performAccessibilityAction(int action, @Nullable Bundle arguments) {
|
||||
return seekBarAccessibilityDelegate.performAccessibilityAction(this, action, arguments);
|
||||
}
|
||||
|
||||
public void update() {
|
||||
final int percent = LiteMode.getPowerSaverLevel();
|
||||
|
||||
|
|
|
@ -2565,12 +2565,11 @@ public class LocationActivity extends BaseFragment implements NotificationCenter
|
|||
}
|
||||
|
||||
@Override
|
||||
public void finishFragment(boolean animated) {
|
||||
public boolean finishFragment(boolean animated) {
|
||||
if (onCheckGlScreenshot()) {
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
|
||||
super.finishFragment(animated);
|
||||
return super.finishFragment(animated);
|
||||
}
|
||||
|
||||
private boolean onCheckGlScreenshot() {
|
||||
|
|
|
@ -201,6 +201,7 @@ import org.telegram.ui.Components.CubicBezierInterpolator;
|
|||
import org.telegram.ui.Components.FadingTextViewLayout;
|
||||
import org.telegram.ui.Components.FilterShaders;
|
||||
import org.telegram.ui.Components.FloatSeekBarAccessibilityDelegate;
|
||||
import org.telegram.ui.Components.Forum.ForumUtilities;
|
||||
import org.telegram.ui.Components.GestureDetector2;
|
||||
import org.telegram.ui.Components.GroupedPhotosListView;
|
||||
import org.telegram.ui.Components.HideViewAfterAnimation;
|
||||
|
@ -4368,6 +4369,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
|
|||
} else {
|
||||
Bundle args = new Bundle();
|
||||
args.putBoolean("onlySelect", true);
|
||||
args.putBoolean("canSelectTopics", true);
|
||||
args.putInt("dialogsType", DialogsActivity.DIALOGS_TYPE_FORWARD);
|
||||
DialogsActivity fragment = new DialogsActivity(args);
|
||||
final ArrayList<MessageObject> fmessages = new ArrayList<>();
|
||||
|
@ -4394,7 +4396,8 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
|
|||
}
|
||||
}
|
||||
} else {
|
||||
long did = dids.get(0).dialogId;
|
||||
MessagesStorage.TopicKey topicKey = dids.get(0);
|
||||
long did = topicKey.dialogId;
|
||||
Bundle args1 = new Bundle();
|
||||
args1.putBoolean("scrollToTopOnResume", true);
|
||||
if (DialogObject.isEncryptedDialog(did)) {
|
||||
|
@ -4404,8 +4407,10 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
|
|||
} else {
|
||||
args1.putLong("chat_id", -did);
|
||||
}
|
||||
NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.closeChats);
|
||||
ChatActivity chatActivity = new ChatActivity(args1);
|
||||
if (topicKey.topicId != 0) {
|
||||
ForumUtilities.applyTopic(chatActivity, topicKey);
|
||||
}
|
||||
if (((LaunchActivity) parentActivity).presentFragment(chatActivity, true, false)) {
|
||||
chatActivity.showFieldPanelForForward(true, fmessages);
|
||||
} else {
|
||||
|
@ -16666,7 +16671,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
|
|||
if (animationStartTime != 0 || animationInProgress != 0) {
|
||||
return false;
|
||||
}
|
||||
if (Math.sqrt(Math.pow(AndroidUtilities.displaySize.x / 2f - e.getX(), 2) + Math.pow((AndroidUtilities.displaySize.y + AndroidUtilities.statusBarHeight) / 2f - e.getY(), 2)) < AndroidUtilities.dp(40)) {
|
||||
if (photoProgressViews[0] != null && photoProgressViews[0].isVisible() && photoProgressViews[0].backgroundState != PROGRESS_NONE && Math.sqrt(Math.pow(AndroidUtilities.displaySize.x / 2f - e.getX(), 2) + Math.pow((AndroidUtilities.displaySize.y + AndroidUtilities.statusBarHeight) / 2f - e.getY(), 2)) < AndroidUtilities.dp(40)) {
|
||||
return false; // play button
|
||||
}
|
||||
if (scale == 1.0f) {
|
||||
|
|
|
@ -3558,7 +3558,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
|
|||
showDialog(builder.create());
|
||||
} else {
|
||||
try {
|
||||
Toast.makeText(getParentActivity(), "¯\\_(ツ)_/¯", Toast.LENGTH_SHORT).show();
|
||||
Toast.makeText(getParentActivity(), LocaleController.getString("DebugMenuLongPress", R.string.DebugMenuLongPress), Toast.LENGTH_SHORT).show();
|
||||
} catch (Exception e) {
|
||||
FileLog.e(e);
|
||||
}
|
||||
|
|
|
@ -2970,7 +2970,7 @@ public class TopicsFragment extends BaseFragment implements NotificationCenter.N
|
|||
} else if (topic != null && topic.icon_emoji_id != 0) {
|
||||
setForumIcon(null);
|
||||
if (animatedEmojiDrawable == null || animatedEmojiDrawable.getDocumentId() != topic.icon_emoji_id) {
|
||||
setAnimatedEmojiDrawable(new AnimatedEmojiDrawable(AnimatedEmojiDrawable.CACHE_TYPE_FORUM_TOPIC, currentAccount, topic.icon_emoji_id));
|
||||
setAnimatedEmojiDrawable(new AnimatedEmojiDrawable(openedForForward ? AnimatedEmojiDrawable.CACHE_TYPE_ALERT_PREVIEW_STATIC : AnimatedEmojiDrawable.CACHE_TYPE_FORUM_TOPIC, currentAccount, topic.icon_emoji_id));
|
||||
}
|
||||
} else {
|
||||
setAnimatedEmojiDrawable(null);
|
||||
|
|
|
@ -2154,14 +2154,14 @@ public class TwoStepVerificationSetupActivity extends BaseFragment {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void finishFragment(boolean animated) {
|
||||
public boolean finishFragment(boolean animated) {
|
||||
for (BaseFragment fragment : getParentLayout().getFragmentStack()) {
|
||||
if (fragment != this && fragment instanceof TwoStepVerificationSetupActivity) {
|
||||
((TwoStepVerificationSetupActivity) fragment).floatingAutoAnimator.ignoreNextLayout();
|
||||
}
|
||||
}
|
||||
|
||||
super.finishFragment(animated);
|
||||
return super.finishFragment(animated);
|
||||
}
|
||||
|
||||
private void showSetForcePasswordAlert() {
|
||||
|
|
|
@ -542,6 +542,7 @@
|
|||
<string name="ChannelJoinTo">Do you want to join the channel \'%1$s\'?</string>
|
||||
<string name="ChannelCantOpenPrivate">Sorry, this channel is private, so you can’t view its content.</string>
|
||||
<string name="ChannelCantOpenPrivate2">Sorry, this channel is private.</string>
|
||||
<string name="ChannelCantOpenBannedByAdminTitle">Can\'t access the chat</string>
|
||||
<string name="ChannelCantOpenBannedByAdmin">Sorry, you can\'t access this chat because you were banned by an admin.</string>
|
||||
<string name="ChannelCantOpenBanned">Unfortunately, you were banned from participating in public groups.</string>
|
||||
<string name="ChannelCantOpenNa">Sorry, this chat is no longer accessible.</string>
|
||||
|
@ -2346,6 +2347,7 @@
|
|||
<string name="EmojiUseDefault">Use system default emoji</string>
|
||||
<string name="TelegramVersion">Telegram for Android %1$s</string>
|
||||
<string name="DebugMenu">Debug Menu</string>
|
||||
<string name="DebugMenuLongPress">Long press again for debug menu</string>
|
||||
<string name="DebugSendLogs">Send Logs</string>
|
||||
<string name="DebugSendLastLogs">Send Last Logs</string>
|
||||
<string name="DebugClearLogs">Clear Logs</string>
|
||||
|
@ -6350,4 +6352,10 @@
|
|||
<string name="ChannelInviteViaLinkRestricted">You can\'t create a link</string>
|
||||
<string name="ChannelInviteViaLinkRestricted2">This user can\'t be invited</string>
|
||||
<string name="ChannelInviteViaLinkRestricted3">This users can\'t be invited</string>
|
||||
<string name="StoragePathFree">%1$s free</string>
|
||||
<string name="StoragePathFreeValue">%1$s free, %2$s</string>
|
||||
<string name="AccDescrLiteBatteryWhenBelow">enabled when below %s%%</string>
|
||||
<string name="AccDescrLiteBatteryLevelAnnounce">%s%%</string>
|
||||
<string name="AccDescrRateTranscriptionUp">Rate up</string>
|
||||
<string name="AccDescrRateTranscriptionDown">Rate down</string>
|
||||
</resources>
|
||||
|
|
|
@ -13,8 +13,8 @@
|
|||
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
|
||||
# org.gradle.parallel=true
|
||||
#Sat Mar 12 05:53:50 MSK 2016
|
||||
APP_VERSION_CODE=3199
|
||||
APP_VERSION_NAME=9.5.1
|
||||
APP_VERSION_CODE=3208
|
||||
APP_VERSION_NAME=9.5.2
|
||||
APP_PACKAGE=org.telegram.messenger
|
||||
RELEASE_KEY_PASSWORD=android
|
||||
RELEASE_KEY_ALIAS=androidkey
|
||||
|
|
Loading…
Reference in a new issue