mirror of
https://github.com/DrKLO/Telegram.git
synced 2024-12-22 14:35:03 +01:00
update to 9.4.2
This commit is contained in:
parent
fb2d9f90bc
commit
c48aa4f3c9
51 changed files with 368 additions and 477 deletions
|
@ -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 = 3102;
|
||||
public static String BUILD_VERSION_STRING = "9.4.1";
|
||||
public static int BUILD_VERSION = 3106;
|
||||
public static String BUILD_VERSION_STRING = "9.4.2";
|
||||
public static int APP_ID = 4;
|
||||
public static String APP_HASH = "014b35b6184100b085b0d0572f9b5103";
|
||||
|
||||
|
|
|
@ -110,7 +110,7 @@ public class DispatchQueuePoolBackground {
|
|||
@UiThread
|
||||
public static void execute(Runnable runnable, boolean now) {
|
||||
if (Thread.currentThread() != ApplicationLoader.applicationHandler.getLooper().getThread()) {
|
||||
if (BuildVars.DEBUG_PRIVATE_VERSION) {
|
||||
if (BuildVars.DEBUG_VERSION) {
|
||||
FileLog.e(new RuntimeException("wrong thread"));
|
||||
}
|
||||
return;
|
||||
|
|
|
@ -71,7 +71,7 @@ public class FileLog {
|
|||
private static HashSet<String> excludeRequests;
|
||||
|
||||
public static void dumpResponseAndRequest(TLObject request, TLObject response, TLRPC.TL_error error, long requestMsgId, long startRequestTimeInMillis, int requestToken) {
|
||||
if (!BuildVars.DEBUG_PRIVATE_VERSION || !BuildVars.LOGS_ENABLED || request == null || SharedConfig.getDevicePerformanceClass() == SharedConfig.PERFORMANCE_CLASS_LOW) {
|
||||
if (!BuildVars.DEBUG_VERSION || !BuildVars.LOGS_ENABLED || request == null || SharedConfig.getDevicePerformanceClass() == SharedConfig.PERFORMANCE_CLASS_LOW) {
|
||||
return;
|
||||
}
|
||||
String requestSimpleName = request.getClass().getSimpleName();
|
||||
|
@ -115,7 +115,7 @@ public class FileLog {
|
|||
}
|
||||
|
||||
public static void dumpUnparsedMessage(TLObject message, long messageId) {
|
||||
if (!BuildVars.DEBUG_PRIVATE_VERSION || !BuildVars.LOGS_ENABLED || message == null) {
|
||||
if (!BuildVars.DEBUG_VERSION || !BuildVars.LOGS_ENABLED || message == null) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
|
|
|
@ -1605,7 +1605,7 @@ public class ImageLoader {
|
|||
bitmapDrawable = new BitmapDrawable(bitmap);
|
||||
}
|
||||
|
||||
lottieDrawable.recycle();
|
||||
lottieDrawable.recycle(false);
|
||||
currentBitmap.recycle();
|
||||
onPostExecute(bitmapDrawable);
|
||||
}
|
||||
|
@ -1621,7 +1621,7 @@ public class ImageLoader {
|
|||
lottieMemCache.put(cacheImage.key, lottieDrawable);
|
||||
toSet = lottieDrawable;
|
||||
} else {
|
||||
lottieDrawable.recycle();
|
||||
lottieDrawable.recycle(false);
|
||||
}
|
||||
if (toSet != null) {
|
||||
incrementUseCount(cacheImage.key);
|
||||
|
@ -2010,7 +2010,7 @@ public class ImageLoader {
|
|||
((AnimatedFileDrawable) oldValue).recycle();
|
||||
}
|
||||
if (oldValue instanceof RLottieDrawable) {
|
||||
((RLottieDrawable) oldValue).recycle();
|
||||
((RLottieDrawable) oldValue).recycle(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -125,7 +125,7 @@ public class ImageReceiver implements NotificationCenter.NotificationCenterDeleg
|
|||
} else if (drawable != null) {
|
||||
if (drawable instanceof RLottieDrawable) {
|
||||
RLottieDrawable fileDrawable = (RLottieDrawable) drawable;
|
||||
fileDrawable.recycle();
|
||||
fileDrawable.recycle(false);
|
||||
} else if (drawable instanceof AnimatedFileDrawable) {
|
||||
AnimatedFileDrawable fileDrawable = (AnimatedFileDrawable) drawable;
|
||||
fileDrawable.recycle();
|
||||
|
@ -2795,7 +2795,7 @@ public class ImageReceiver implements NotificationCenter.NotificationCenterDeleg
|
|||
boolean canDelete = ImageLoader.getInstance().decrementUseCount(key);
|
||||
if (!ImageLoader.getInstance().isInMemCache(key, true)) {
|
||||
if (canDelete) {
|
||||
fileDrawable.recycle();
|
||||
fileDrawable.recycle(false);
|
||||
}
|
||||
}
|
||||
} else if (image instanceof AnimatedFileDrawable) {
|
||||
|
|
|
@ -483,7 +483,7 @@ public class LocaleController {
|
|||
langCode = langCode.replace("-", "_");
|
||||
}
|
||||
if (langCode == null || currentLocaleInfo != null && (langCode.equals(currentLocaleInfo.shortName) || langCode.equals(currentLocaleInfo.baseLangCode))) {
|
||||
applyRemoteLanguage(currentLocaleInfo, langCode, force, currentAccount, onDone);
|
||||
applyRemoteLanguage(currentLocaleInfo, langCode, force, force, currentAccount, onDone);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -493,11 +493,11 @@ public class LocaleController {
|
|||
}
|
||||
if (currentLocaleInfo.hasBaseLang()) {
|
||||
if (currentLocaleInfo.baseVersion < baseVersion) {
|
||||
applyRemoteLanguage(currentLocaleInfo, currentLocaleInfo.baseLangCode, false, currentAccount, null);
|
||||
applyRemoteLanguage(currentLocaleInfo, currentLocaleInfo.baseLangCode, false, false, currentAccount, null);
|
||||
}
|
||||
}
|
||||
if (currentLocaleInfo.version < version) {
|
||||
applyRemoteLanguage(currentLocaleInfo, currentLocaleInfo.shortName, false, currentAccount, null);
|
||||
applyRemoteLanguage(currentLocaleInfo, currentLocaleInfo.shortName, false, false, currentAccount, null);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -654,7 +654,7 @@ public class LocaleController {
|
|||
saveOtherLanguages();
|
||||
}
|
||||
localeValues = stringMap;
|
||||
applyLanguage(localeInfo, true, false, true, false, currentAccount, null);
|
||||
applyLanguage(localeInfo, true, false, true, false, false, currentAccount, null);
|
||||
return true;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
|
@ -849,10 +849,10 @@ public class LocaleController {
|
|||
}
|
||||
|
||||
public int applyLanguage(LocaleInfo localeInfo, boolean override, boolean init, final int currentAccount) {
|
||||
return applyLanguage(localeInfo, override, init, false, false, currentAccount, null);
|
||||
return applyLanguage(localeInfo, override, init, false, false, false, currentAccount, null);
|
||||
}
|
||||
|
||||
public int applyLanguage(final LocaleInfo localeInfo, boolean override, boolean init, boolean fromFile, boolean force, final int currentAccount, Runnable onDone) {
|
||||
public int applyLanguage(final LocaleInfo localeInfo, boolean override, boolean init, boolean fromFile, boolean force, boolean forceFullDifference, final int currentAccount, Runnable onDone) {
|
||||
if (localeInfo == null) {
|
||||
return 0;
|
||||
}
|
||||
|
@ -885,9 +885,9 @@ public class LocaleController {
|
|||
}
|
||||
isLoadingRemote = true;
|
||||
if (init) {
|
||||
AndroidUtilities.runOnUIThread(() -> applyRemoteLanguage(localeInfo, null, true, currentAccount, onDone));
|
||||
AndroidUtilities.runOnUIThread(() -> applyRemoteLanguage(localeInfo, null, true, forceFullDifference, currentAccount, onDone));
|
||||
} else {
|
||||
requestId = applyRemoteLanguage(localeInfo, null, true, currentAccount, onDone);
|
||||
requestId = applyRemoteLanguage(localeInfo, null, true, forceFullDifference, currentAccount, onDone);
|
||||
}
|
||||
}
|
||||
try {
|
||||
|
@ -929,12 +929,12 @@ public class LocaleController {
|
|||
}
|
||||
if (currentPluralRules == null) {
|
||||
currentPluralRules = allRules.get(args[0]);
|
||||
if (currentPluralRules == null) {
|
||||
currentPluralRules = allRules.get(currentLocale.getLanguage());
|
||||
if (currentPluralRules == null) {
|
||||
currentPluralRules = new PluralRules_None();
|
||||
}
|
||||
}
|
||||
}
|
||||
if (currentPluralRules == null) {
|
||||
currentPluralRules = allRules.get(currentLocale.getLanguage());
|
||||
}
|
||||
if (currentPluralRules == null) {
|
||||
currentPluralRules = new PluralRules_None();
|
||||
}
|
||||
changingConfiguration = true;
|
||||
Locale.setDefault(currentLocale);
|
||||
|
@ -2063,6 +2063,9 @@ public class LocaleController {
|
|||
|
||||
public void saveRemoteLocaleStrings(LocaleInfo localeInfo, final TLRPC.TL_langPackDifference difference, int currentAccount, Runnable onDone) {
|
||||
if (difference == null || difference.strings.isEmpty() || localeInfo == null || localeInfo.isLocal()) {
|
||||
if (onDone != null) {
|
||||
onDone.run();
|
||||
}
|
||||
return;
|
||||
}
|
||||
final String langCode = difference.lang_code.replace('-', '_').toLowerCase();
|
||||
|
@ -2264,42 +2267,57 @@ public class LocaleController {
|
|||
}, ConnectionsManager.RequestFlagWithoutLogin);
|
||||
}
|
||||
|
||||
private int applyRemoteLanguage(LocaleInfo localeInfo, String langCode, boolean force, final int currentAccount, Runnable onDone) {
|
||||
private int applyRemoteLanguage(LocaleInfo localeInfo, String langCode, boolean force, boolean forceFullDifference, final int currentAccount, Runnable onDone) {
|
||||
if (localeInfo == null || !localeInfo.isRemote() && !localeInfo.isUnofficial()) {
|
||||
return 0;
|
||||
}
|
||||
int[] requested = new int[1], received = new int[1];
|
||||
requested[0] = received[0] = 0;
|
||||
Runnable onPartlyDone = () -> {
|
||||
received[0]++;
|
||||
if (received[0] >= requested[0] && onDone != null) {
|
||||
onDone.run();
|
||||
}
|
||||
};
|
||||
if (localeInfo.hasBaseLang() && (langCode == null || langCode.equals(localeInfo.baseLangCode))) {
|
||||
if (localeInfo.baseVersion != 0 && !force) {
|
||||
if (localeInfo.baseVersion != 0 && !forceFullDifference) {
|
||||
if (localeInfo.hasBaseLang()) {
|
||||
TLRPC.TL_langpack_getDifference req = new TLRPC.TL_langpack_getDifference();
|
||||
req.from_version = localeInfo.baseVersion;
|
||||
req.lang_code = localeInfo.getBaseLangCode();
|
||||
req.lang_pack = "";
|
||||
return ConnectionsManager.getInstance(currentAccount).sendRequest(req, (response, error) -> {
|
||||
requested[0]++;
|
||||
ConnectionsManager.getInstance(currentAccount).sendRequest(req, (response, error) -> {
|
||||
if (response != null) {
|
||||
AndroidUtilities.runOnUIThread(() -> saveRemoteLocaleStrings(localeInfo, (TLRPC.TL_langPackDifference) response, currentAccount, onDone));
|
||||
AndroidUtilities.runOnUIThread(() -> saveRemoteLocaleStrings(localeInfo, (TLRPC.TL_langPackDifference) response, currentAccount, onPartlyDone));
|
||||
}
|
||||
}, ConnectionsManager.RequestFlagWithoutLogin);
|
||||
}
|
||||
} else {
|
||||
TLRPC.TL_langpack_getLangPack req = new TLRPC.TL_langpack_getLangPack();
|
||||
req.lang_code = localeInfo.getBaseLangCode();
|
||||
return ConnectionsManager.getInstance(currentAccount).sendRequest(req, (TLObject response, TLRPC.TL_error error) -> {
|
||||
requested[0]++;
|
||||
ConnectionsManager.getInstance(currentAccount).sendRequest(req, (TLObject response, TLRPC.TL_error error) -> {
|
||||
if (response != null) {
|
||||
AndroidUtilities.runOnUIThread(() -> saveRemoteLocaleStrings(localeInfo, (TLRPC.TL_langPackDifference) response, currentAccount, onDone));
|
||||
AndroidUtilities.runOnUIThread(() -> {
|
||||
saveRemoteLocaleStrings(localeInfo, (TLRPC.TL_langPackDifference) response, currentAccount, onPartlyDone);
|
||||
});
|
||||
}
|
||||
}, ConnectionsManager.RequestFlagWithoutLogin);
|
||||
}
|
||||
}
|
||||
if (langCode == null || langCode.equals(localeInfo.shortName)) {
|
||||
if (localeInfo.version != 0 && !force) {
|
||||
if (localeInfo.version != 0 && !forceFullDifference) {
|
||||
TLRPC.TL_langpack_getDifference req = new TLRPC.TL_langpack_getDifference();
|
||||
req.from_version = localeInfo.version;
|
||||
req.lang_code = localeInfo.getLangCode();
|
||||
req.lang_pack = "";
|
||||
requested[0]++;
|
||||
return ConnectionsManager.getInstance(currentAccount).sendRequest(req, (response, error) -> {
|
||||
if (response != null) {
|
||||
AndroidUtilities.runOnUIThread(() -> saveRemoteLocaleStrings(localeInfo, (TLRPC.TL_langPackDifference) response, currentAccount, onDone));
|
||||
AndroidUtilities.runOnUIThread(() -> {
|
||||
saveRemoteLocaleStrings(localeInfo, (TLRPC.TL_langPackDifference) response, currentAccount, onPartlyDone);
|
||||
});
|
||||
}
|
||||
}, ConnectionsManager.RequestFlagWithoutLogin);
|
||||
} else {
|
||||
|
@ -2308,9 +2326,12 @@ public class LocaleController {
|
|||
}
|
||||
TLRPC.TL_langpack_getLangPack req = new TLRPC.TL_langpack_getLangPack();
|
||||
req.lang_code = localeInfo.getLangCode();
|
||||
requested[0]++;
|
||||
return ConnectionsManager.getInstance(currentAccount).sendRequest(req, (TLObject response, TLRPC.TL_error error) -> {
|
||||
if (response != null) {
|
||||
AndroidUtilities.runOnUIThread(() -> saveRemoteLocaleStrings(localeInfo, (TLRPC.TL_langPackDifference) response, currentAccount, onDone));
|
||||
AndroidUtilities.runOnUIThread(() -> {
|
||||
saveRemoteLocaleStrings(localeInfo, (TLRPC.TL_langPackDifference) response, currentAccount, onPartlyDone);
|
||||
});
|
||||
}
|
||||
}, ConnectionsManager.RequestFlagWithoutLogin);
|
||||
}
|
||||
|
|
|
@ -4211,9 +4211,6 @@ public class NotificationsController extends BaseController {
|
|||
photoPath = null;
|
||||
canReply = false;
|
||||
}
|
||||
if (passcode) {
|
||||
canReply = false;
|
||||
}
|
||||
|
||||
if (photoPath != null) {
|
||||
avatalFile = getFileLoader().getPathToAttach(photoPath, true);
|
||||
|
|
|
@ -5751,6 +5751,13 @@ public class SendMessagesHelper extends BaseController implements NotificationCe
|
|||
} else {
|
||||
isSentError = true;
|
||||
existFlags = 0;
|
||||
if (BuildVars.LOGS_ENABLED) {
|
||||
StringBuilder builder = new StringBuilder();
|
||||
for (int i = 0; i < updatesArr.size(); i++) {
|
||||
builder.append(updatesArr.get(i).getClass().getSimpleName()).append(", ");
|
||||
}
|
||||
FileLog.d("can't find message int updates " + builder);
|
||||
}
|
||||
}
|
||||
Utilities.stageQueue.postRunnable(() -> getMessagesController().processUpdates(updates, false));
|
||||
} else {
|
||||
|
|
|
@ -1869,8 +1869,8 @@ public class ActionBarLayout extends FrameLayout implements INavigationLayout, F
|
|||
}
|
||||
|
||||
@Override
|
||||
public void removeFragmentFromStack(BaseFragment fragment) {
|
||||
if ((fragmentsStack.size() > 0 && fragmentsStack.get(fragmentsStack.size() - 1) == fragment) || (fragmentsStack.size() > 1 && fragmentsStack.get(fragmentsStack.size() - 2) == fragment)) {
|
||||
public void removeFragmentFromStack(BaseFragment fragment, boolean immediate) {
|
||||
if (((fragmentsStack.size() > 0 && fragmentsStack.get(fragmentsStack.size() - 1) == fragment) || (fragmentsStack.size() > 1 && fragmentsStack.get(fragmentsStack.size() - 2) == fragment))) {
|
||||
onOpenAnimationEnd();
|
||||
onCloseAnimationEnd();
|
||||
}
|
||||
|
@ -1880,7 +1880,7 @@ public class ActionBarLayout extends FrameLayout implements INavigationLayout, F
|
|||
if (delegate != null && fragmentsStack.size() == 1 && AndroidUtilities.isTablet()) {
|
||||
delegate.needCloseLastFragment(this);
|
||||
}
|
||||
removeFragmentFromStackInternal(fragment, true);
|
||||
removeFragmentFromStackInternal(fragment, fragment.allowFinishFragmentInsteadOfRemoveFromStack() && !immediate);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -311,6 +311,10 @@ public abstract class BaseFragment {
|
|||
}
|
||||
|
||||
public void removeSelfFromStack() {
|
||||
removeSelfFromStack(false);
|
||||
}
|
||||
|
||||
public void removeSelfFromStack(boolean immediate) {
|
||||
if (isFinished || parentLayout == null) {
|
||||
return;
|
||||
}
|
||||
|
@ -318,7 +322,11 @@ public abstract class BaseFragment {
|
|||
parentDialog.dismiss();
|
||||
return;
|
||||
}
|
||||
parentLayout.removeFragmentFromStack(this);
|
||||
parentLayout.removeFragmentFromStack(this, immediate);
|
||||
}
|
||||
|
||||
public boolean allowFinishFragmentInsteadOfRemoveFromStack() {
|
||||
return true;
|
||||
}
|
||||
|
||||
protected boolean isFinishing() {
|
||||
|
|
|
@ -23,7 +23,7 @@ public interface INavigationLayout {
|
|||
boolean presentFragment(NavigationParams params);
|
||||
boolean checkTransitionAnimation();
|
||||
boolean addFragmentToStack(BaseFragment fragment, int position);
|
||||
void removeFragmentFromStack(BaseFragment fragment);
|
||||
void removeFragmentFromStack(BaseFragment fragment, boolean immediate);
|
||||
List<BaseFragment> getFragmentStack();
|
||||
void setDelegate(INavigationLayoutDelegate INavigationLayoutDelegate);
|
||||
void closeLastFragment(boolean animated, boolean forceNoAnimation);
|
||||
|
@ -78,6 +78,9 @@ public interface INavigationLayout {
|
|||
return SharedConfig.useLNavigation ? new LNavigation(context) : new ActionBarLayout(context);
|
||||
}
|
||||
|
||||
default void removeFragmentFromStack(BaseFragment fragment) {
|
||||
removeFragmentFromStack(fragment, false);
|
||||
}
|
||||
default boolean isActionBarInCrossfade() {
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -8888,22 +8888,22 @@ public class Theme {
|
|||
|
||||
if (dialogs_archiveAvatarDrawable != null) {
|
||||
dialogs_archiveAvatarDrawable.setCallback(null);
|
||||
dialogs_archiveAvatarDrawable.recycle();
|
||||
dialogs_archiveAvatarDrawable.recycle(false);
|
||||
}
|
||||
if (dialogs_archiveDrawable != null) {
|
||||
dialogs_archiveDrawable.recycle();
|
||||
dialogs_archiveDrawable.recycle(false);
|
||||
}
|
||||
if (dialogs_unarchiveDrawable != null) {
|
||||
dialogs_unarchiveDrawable.recycle();
|
||||
dialogs_unarchiveDrawable.recycle(false);
|
||||
}
|
||||
if (dialogs_pinArchiveDrawable != null) {
|
||||
dialogs_pinArchiveDrawable.recycle();
|
||||
dialogs_pinArchiveDrawable.recycle(false);
|
||||
}
|
||||
if (dialogs_unpinArchiveDrawable != null) {
|
||||
dialogs_unpinArchiveDrawable.recycle();
|
||||
dialogs_unpinArchiveDrawable.recycle(false);
|
||||
}
|
||||
if (dialogs_hidePsaDrawable != null) {
|
||||
dialogs_hidePsaDrawable.recycle();
|
||||
dialogs_hidePsaDrawable.recycle(false);
|
||||
}
|
||||
dialogs_archiveAvatarDrawable = new RLottieDrawable(R.raw.chats_archiveavatar, "chats_archiveavatar", AndroidUtilities.dp(36), AndroidUtilities.dp(36), false, null);
|
||||
dialogs_archiveDrawable = new RLottieDrawable(R.raw.chats_archive, "chats_archive", AndroidUtilities.dp(36), AndroidUtilities.dp(36));
|
||||
|
|
|
@ -89,7 +89,7 @@ public class CacheChatsExceptionsFragment extends BaseFragment {
|
|||
}
|
||||
args.putBoolean("allowGlobalSearch", false);
|
||||
DialogsActivity activity = new DialogsActivity(args);
|
||||
activity.setDelegate((fragment, dids, message, param) -> {
|
||||
activity.setDelegate((fragment, dids, message, param, topicsFragment) -> {
|
||||
activity.finishFragment();
|
||||
CacheByChatsController.KeepMediaException newException = null;
|
||||
for (int i = 0; i < dids.size(); i++) {
|
||||
|
|
|
@ -40,6 +40,7 @@ import org.telegram.ui.Components.RLottieImageView;
|
|||
import org.telegram.ui.Components.Switch;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Locale;
|
||||
|
||||
public class TextCheckCell extends FrameLayout {
|
||||
private boolean isAnimatingToThumbInsteadOfTouch;
|
||||
|
@ -59,6 +60,7 @@ public class TextCheckCell extends FrameLayout {
|
|||
private int padding;
|
||||
private Theme.ResourcesProvider resourcesProvider;
|
||||
ImageView imageView;
|
||||
private boolean isRTL;
|
||||
|
||||
public static final Property<TextCheckCell, Float> ANIMATION_PROGRESS = new AnimationProperties.FloatProperty<TextCheckCell>("animationProgress") {
|
||||
@Override
|
||||
|
@ -121,6 +123,8 @@ public class TextCheckCell extends FrameLayout {
|
|||
addView(checkBox, LayoutHelper.createFrame(37, 20, (LocaleController.isRTL ? Gravity.LEFT : Gravity.RIGHT) | Gravity.CENTER_VERTICAL, 22, 0, 22, 0));
|
||||
|
||||
setClipChildren(false);
|
||||
|
||||
isRTL = LocaleController.isRTL;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -167,6 +171,11 @@ public class TextCheckCell extends FrameLayout {
|
|||
}
|
||||
|
||||
public void updateRTL() {
|
||||
if (isRTL == LocaleController.isRTL) {
|
||||
return;
|
||||
}
|
||||
isRTL = LocaleController.isRTL;
|
||||
|
||||
textView.setGravity((LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.CENTER_VERTICAL);
|
||||
removeView(textView);
|
||||
addView(textView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.TOP, LocaleController.isRTL ? 70 : padding, 0, LocaleController.isRTL ? padding : 70, 0));
|
||||
|
|
|
@ -39,6 +39,7 @@ public class TextInfoPrivacyCell extends FrameLayout {
|
|||
private int topPadding = 10;
|
||||
private int bottomPadding = 17;
|
||||
private int fixedSize;
|
||||
private boolean isRTL;
|
||||
|
||||
private CharSequence text;
|
||||
private final Theme.ResourcesProvider resourcesProvider;
|
||||
|
@ -76,9 +77,23 @@ public class TextInfoPrivacyCell extends FrameLayout {
|
|||
textView.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_NO);
|
||||
addView(textView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.TOP, padding, 0, padding, 0));
|
||||
|
||||
isRTL = LocaleController.isRTL;
|
||||
|
||||
setWillNotDraw(false);
|
||||
}
|
||||
|
||||
public void updateRTL() {
|
||||
if (isRTL == LocaleController.isRTL) {
|
||||
return;
|
||||
}
|
||||
isRTL = LocaleController.isRTL;
|
||||
|
||||
textView.setGravity(LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT);
|
||||
FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) textView.getLayoutParams();
|
||||
layoutParams.gravity = (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.TOP;
|
||||
textView.setLayoutParams(layoutParams);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDraw(Canvas canvas) {
|
||||
if (links != null) {
|
||||
|
|
|
@ -24,7 +24,6 @@ import org.telegram.ui.Components.AnimationProperties;
|
|||
import org.telegram.ui.Components.CubicBezierInterpolator;
|
||||
import org.telegram.ui.Components.LayoutHelper;
|
||||
import org.telegram.ui.Components.RadioButton;
|
||||
import org.telegram.ui.Components.Switch;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
|
@ -42,6 +41,8 @@ public class TextRadioCell extends FrameLayout {
|
|||
private float lastTouchX;
|
||||
private ObjectAnimator animator;
|
||||
private boolean drawCheckRipple;
|
||||
private boolean isRTL;
|
||||
private int padding;
|
||||
|
||||
public static final Property<TextRadioCell, Float> ANIMATION_PROGRESS = new AnimationProperties.FloatProperty<TextRadioCell>("animationProgress") {
|
||||
@Override
|
||||
|
@ -67,6 +68,8 @@ public class TextRadioCell extends FrameLayout {
|
|||
public TextRadioCell(Context context, int padding, boolean dialog) {
|
||||
super(context);
|
||||
|
||||
this.padding = padding;
|
||||
|
||||
textView = new TextView(context);
|
||||
textView.setTextColor(Theme.getColor(dialog ? Theme.key_dialogTextBlack : Theme.key_windowBackgroundWhiteBlackText));
|
||||
textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16);
|
||||
|
@ -94,9 +97,33 @@ public class TextRadioCell extends FrameLayout {
|
|||
radioButton.setColor(Theme.getColor(Theme.key_radioBackground), Theme.getColor(Theme.key_radioBackgroundChecked));
|
||||
addView(radioButton, LayoutHelper.createFrame(20, 20, (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.CENTER_VERTICAL, 22, 0, 22, 0));
|
||||
|
||||
isRTL = LocaleController.isRTL;
|
||||
|
||||
setClipChildren(false);
|
||||
}
|
||||
|
||||
public void updateRTL() {
|
||||
if (isRTL == LocaleController.isRTL) {
|
||||
return;
|
||||
}
|
||||
isRTL = LocaleController.isRTL;
|
||||
textView.setGravity((LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.CENTER_VERTICAL);
|
||||
FrameLayout.LayoutParams textViewLayout = (FrameLayout.LayoutParams) textView.getLayoutParams();
|
||||
textViewLayout.gravity = (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.TOP;
|
||||
textViewLayout.leftMargin = AndroidUtilities.dp(LocaleController.isRTL ? padding : 64);
|
||||
textViewLayout.rightMargin = AndroidUtilities.dp(LocaleController.isRTL ? 64 : padding);
|
||||
textView.setLayoutParams(textViewLayout);
|
||||
valueTextView.setGravity(LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT);
|
||||
FrameLayout.LayoutParams valueTextViewLayout = (FrameLayout.LayoutParams) valueTextView.getLayoutParams();
|
||||
valueTextViewLayout.gravity = (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.TOP;
|
||||
valueTextViewLayout.leftMargin = AndroidUtilities.dp(LocaleController.isRTL ? padding : 64);
|
||||
valueTextViewLayout.rightMargin = AndroidUtilities.dp(LocaleController.isRTL ? 64 : padding);
|
||||
valueTextView.setLayoutParams(valueTextViewLayout);
|
||||
FrameLayout.LayoutParams radioButtonLayout = (FrameLayout.LayoutParams) radioButton.getLayoutParams();
|
||||
radioButtonLayout.gravity = (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.CENTER_VERTICAL;
|
||||
radioButton.setLayoutParams(radioButtonLayout);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
||||
if (isMultiline) {
|
||||
|
|
|
@ -16420,7 +16420,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
|||
if (AndroidUtilities.isTablet() && parentLayout != null && parentLayout.getFragmentStack().size() > 1) {
|
||||
finishFragment();
|
||||
} else {
|
||||
removeSelfFromStack();
|
||||
removeSelfFromStack(true);
|
||||
}
|
||||
}
|
||||
} else if (id == NotificationCenter.commentsRead) {
|
||||
|
@ -24243,7 +24243,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
|||
@Override
|
||||
public void onSwipeBackProgress(PopupSwipeBackLayout layout, float toProgress, float progress) {
|
||||
if (toProgress == 0 && !isEnter) {
|
||||
finalReactionsLayout.startEnterAnimation();
|
||||
finalReactionsLayout.startEnterAnimation(false);
|
||||
isEnter = true;
|
||||
} else if (toProgress == 1 && isEnter) {
|
||||
finalReactionsLayout.setAlpha(1f - progress);
|
||||
|
@ -24377,7 +24377,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
|||
scrimPopupWindow.setDismissAnimationDuration(220);
|
||||
scrimPopupWindow.setOutsideTouchable(true);
|
||||
scrimPopupWindow.setClippingEnabled(true);
|
||||
if (reactionsLayout == null) {
|
||||
if (!isReactionsAvailable || reactionsLayout == null) {
|
||||
scrimPopupWindow.setAnimationStyle(R.style.PopupContextAnimation);
|
||||
} else {
|
||||
scrimPopupWindow.setAnimationStyle(0);
|
||||
|
@ -24430,7 +24430,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
|||
}
|
||||
scrimPopupWindow.showAtLocation(chatListView, Gravity.LEFT | Gravity.TOP, finalPopupX, finalPopupY);
|
||||
if (isReactionsAvailable && finalReactionsLayout != null) {
|
||||
finalReactionsLayout.startEnterAnimation();
|
||||
finalReactionsLayout.startEnterAnimation(true);
|
||||
}
|
||||
AndroidUtilities.runOnUIThread(() -> {
|
||||
if (scrimPopupWindowItems != null && scrimPopupWindowItems.length > 0 && scrimPopupWindowItems[0] != null) {
|
||||
|
@ -25530,7 +25530,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean didSelectDialogs(DialogsActivity fragment, ArrayList<MessagesStorage.TopicKey> dids, CharSequence message, boolean param) {
|
||||
public boolean didSelectDialogs(DialogsActivity fragment, ArrayList<MessagesStorage.TopicKey> dids, CharSequence message, boolean param, TopicsFragment topicsFragment) {
|
||||
if (forwardingMessage == null && selectedMessagesIds[0].size() == 0 && selectedMessagesIds[1].size() == 0) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -363,7 +363,7 @@ public class AlertsCreator {
|
|||
} else if (request instanceof TLRPC.TL_messages_sendScheduledMessages) {
|
||||
dialogId = DialogObject.getPeerDialogId(((TLRPC.TL_messages_sendScheduledMessages) request).peer);
|
||||
}
|
||||
if (BuildVars.DEBUG_VERSION && error.text != null && error.text.startsWith("CHAT_SEND_") && error.text.endsWith("FORBIDDEN")) {
|
||||
if (error.text != null && error.text.startsWith("CHAT_SEND_") && error.text.endsWith("FORBIDDEN")) {
|
||||
String errorText = error.text;
|
||||
TLRPC.Chat chat = dialogId < 0 ? MessagesController.getInstance(currentAccount).getChat(-dialogId) : null;
|
||||
switch (error.text) {
|
||||
|
@ -628,7 +628,7 @@ public class AlertsCreator {
|
|||
localeInfo.pathToFile = "unofficial";
|
||||
}
|
||||
}
|
||||
LocaleController.getInstance().applyLanguage(localeInfo, true, false, false, true, UserConfig.selectedAccount, null);
|
||||
LocaleController.getInstance().applyLanguage(localeInfo, true, false, false, true, true, UserConfig.selectedAccount, null);
|
||||
activity.rebuildAllFragments(true);
|
||||
});
|
||||
builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null);
|
||||
|
|
|
@ -1395,7 +1395,7 @@ public class AudioPlayerAlert extends BottomSheet implements NotificationCenter.
|
|||
DialogsActivity fragment = new DialogsActivity(args);
|
||||
final ArrayList<MessageObject> fmessages = new ArrayList<>();
|
||||
fmessages.add(messageObject);
|
||||
fragment.setDelegate((fragment1, dids, message, param) -> {
|
||||
fragment.setDelegate((fragment1, dids, message, param, topicsFragment) -> {
|
||||
if (dids.size() > 1 || dids.get(0) .dialogId== UserConfig.getInstance(currentAccount).getClientUserId() || message != null) {
|
||||
for (int a = 0; a < dids.size(); a++) {
|
||||
long did = dids.get(a).dialogId;
|
||||
|
|
|
@ -150,6 +150,7 @@ import org.telegram.ui.PhotoViewer;
|
|||
import org.telegram.ui.PremiumPreviewFragment;
|
||||
import org.telegram.ui.ProfileActivity;
|
||||
import org.telegram.ui.StickersActivity;
|
||||
import org.telegram.ui.TopicsFragment;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
|
@ -7415,7 +7416,7 @@ public class ChatActivityEnterView extends BlurredFrameLayout implements Notific
|
|||
args.putBoolean("onlySelect", true);
|
||||
args.putInt("dialogsType", DialogsActivity.DIALOGS_TYPE_BOT_SHARE);
|
||||
DialogsActivity fragment = new DialogsActivity(args);
|
||||
fragment.setDelegate((fragment1, dids, message, param) -> {
|
||||
fragment.setDelegate((fragment1, dids, message, param, topicsFragment) -> {
|
||||
long uid = messageObject.messageOwner.from_id.user_id;
|
||||
if (messageObject.messageOwner.via_bot_id != 0) {
|
||||
uid = messageObject.messageOwner.via_bot_id;
|
||||
|
@ -7483,7 +7484,7 @@ public class ChatActivityEnterView extends BlurredFrameLayout implements Notific
|
|||
DialogsActivity fragment = new DialogsActivity(args);
|
||||
fragment.setDelegate(new DialogsActivity.DialogsActivityDelegate() {
|
||||
@Override
|
||||
public boolean didSelectDialogs(DialogsActivity fragment, ArrayList<MessagesStorage.TopicKey> dids, CharSequence message, boolean param) {
|
||||
public boolean didSelectDialogs(DialogsActivity fragment, ArrayList<MessagesStorage.TopicKey> dids, CharSequence message, boolean param, TopicsFragment topicsFragment) {
|
||||
if (dids != null && !dids.isEmpty()) {
|
||||
TLRPC.TL_messages_sendBotRequestedPeer req = new TLRPC.TL_messages_sendBotRequestedPeer();
|
||||
req.peer = MessagesController.getInstance(currentAccount).getInputPeer(messageObject.messageOwner.peer_id);
|
||||
|
|
|
@ -994,13 +994,13 @@ public class EmojiPacksAlert extends BottomSheet implements NotificationCenter.N
|
|||
}
|
||||
}
|
||||
|
||||
boolean mePremium = UserConfig.getInstance(currentAccount).isPremium();
|
||||
// boolean mePremium = UserConfig.getInstance(currentAccount).isPremium();
|
||||
ArrayList<TLRPC.TL_messages_stickerSet> canInstallPacks = new ArrayList<>(notInstalledPacks);
|
||||
for (int i = 0; i < canInstallPacks.size(); ++i) {
|
||||
if (MessageObject.isPremiumEmojiPack(canInstallPacks.get(i)) && !mePremium) {
|
||||
canInstallPacks.remove(i--);
|
||||
}
|
||||
}
|
||||
// for (int i = 0; i < canInstallPacks.size(); ++i) {
|
||||
// if (MessageObject.isPremiumEmojiPack(canInstallPacks.get(i)) && !mePremium) {
|
||||
// canInstallPacks.remove(i--);
|
||||
// }
|
||||
// }
|
||||
|
||||
boolean loadedNow = customEmojiPacks.inputStickerSets != null && allPacks.size() == customEmojiPacks.inputStickerSets.size();
|
||||
if (!loaded && loadedNow) {
|
||||
|
@ -1030,11 +1030,11 @@ public class EmojiPacksAlert extends BottomSheet implements NotificationCenter.N
|
|||
addButtonView.setVisibility(View.GONE);
|
||||
removeButtonView.setVisibility(View.GONE);
|
||||
updateShowButton(false);
|
||||
} else if (canInstallPacks.size() <= 0 && notInstalledPacks.size() >= 0 && !mePremium || !loaded) {
|
||||
premiumButtonView.setVisibility(View.VISIBLE);
|
||||
addButtonView.setVisibility(View.GONE);
|
||||
removeButtonView.setVisibility(View.GONE);
|
||||
updateShowButton(true);
|
||||
// } else if (canInstallPacks.size() <= 0 && notInstalledPacks.size() >= 0 && !mePremium || !loaded) {
|
||||
// premiumButtonView.setVisibility(View.VISIBLE);
|
||||
// addButtonView.setVisibility(View.GONE);
|
||||
// removeButtonView.setVisibility(View.GONE);
|
||||
// updateShowButton(true);
|
||||
} else {
|
||||
premiumButtonView.setVisibility(View.INVISIBLE);
|
||||
if (canInstallPacks.size() > 0) {
|
||||
|
|
|
@ -23,7 +23,7 @@ public class HelloParticles {
|
|||
"Sveiki", "Halo", "გამარჯობა", "Hallå", "Salam", "Tere", "Dia dhuit", "こんにちは", "Сайн уу",
|
||||
"Bongu", "Ahoj", "γεια", "Zdravo", "नमस्ते", "Habari", "Hallo", "ជំរាបសួរ", "مرحبًا", "ನಮಸ್ಕಾರ",
|
||||
"Салам", "Silav li wir", "سڵاو", "Kif inti", "Talofa", "Thobela", "हॅलो", "ሰላም", "Здраво",
|
||||
"ഹലോ", "ہیلو", "ꯍꯦꯜꯂꯣ", "Alô", "வணக்கம்", "Mhoro", "Moni", "Alo", "สวัสดี", "Salom", ""
|
||||
"ഹലോ", "ہیلو", "ꯍꯦꯜꯂꯣ", "Alô", "வணக்கம்", "Mhoro", "Moni", "Alo", "สวัสดี", "Salom", "Բարեւ"
|
||||
};
|
||||
|
||||
public static class Drawable {
|
||||
|
|
|
@ -236,7 +236,7 @@ public class RLottieDrawable extends BitmapDrawable implements Animatable, Bitma
|
|||
if (destroyWhenDone) {
|
||||
checkRunningTasks();
|
||||
if (loadFrameTask == null && cacheGenerateTask == null && nativePtr != 0) {
|
||||
recycleNativePtr();
|
||||
recycleNativePtr(true);
|
||||
}
|
||||
}
|
||||
if ((nativePtr == 0 || fallbackCache) && secondNativePtr == 0 && bitmapsCache == null) {
|
||||
|
@ -250,20 +250,33 @@ public class RLottieDrawable extends BitmapDrawable implements Animatable, Bitma
|
|||
scheduleNextGetFrame();
|
||||
}
|
||||
|
||||
private void recycleNativePtr() {
|
||||
private void recycleNativePtr(boolean uiThread) {
|
||||
long nativePtrFinal = nativePtr;
|
||||
long secondNativePtrFinal = secondNativePtr;
|
||||
|
||||
nativePtr = 0;
|
||||
secondNativePtr = 0;
|
||||
DispatchQueuePoolBackground.execute(() -> {
|
||||
if (nativePtrFinal != 0) {
|
||||
destroy(nativePtrFinal);
|
||||
if (nativePtrFinal != 0 || secondNativePtrFinal != 0) {
|
||||
if (uiThread) {
|
||||
DispatchQueuePoolBackground.execute(() -> {
|
||||
if (nativePtrFinal != 0) {
|
||||
destroy(nativePtrFinal);
|
||||
}
|
||||
if (secondNativePtrFinal != 0) {
|
||||
destroy(secondNativePtrFinal);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
Utilities.globalQueue.postRunnable(() ->{
|
||||
if (nativePtrFinal != 0) {
|
||||
destroy(nativePtrFinal);
|
||||
}
|
||||
if (secondNativePtrFinal != 0) {
|
||||
destroy(secondNativePtrFinal);
|
||||
}
|
||||
});
|
||||
}
|
||||
if (secondNativePtrFinal != 0) {
|
||||
destroy(secondNativePtrFinal);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
protected void recycleResources() {
|
||||
|
@ -611,7 +624,7 @@ public class RLottieDrawable extends BitmapDrawable implements Animatable, Bitma
|
|||
AndroidUtilities.runOnUIThread(() -> {
|
||||
loadingInBackground = false;
|
||||
if (!secondLoadingInBackground && destroyAfterLoading) {
|
||||
recycle();
|
||||
recycle(true);
|
||||
return;
|
||||
}
|
||||
timeBetweenFrames = Math.max(16, (int) (1000.0f / metaData[1]));
|
||||
|
@ -645,7 +658,7 @@ public class RLottieDrawable extends BitmapDrawable implements Animatable, Bitma
|
|||
AndroidUtilities.runOnUIThread(() -> {
|
||||
secondLoadingInBackground = false;
|
||||
if (!loadingInBackground && destroyAfterLoading) {
|
||||
recycle();
|
||||
recycle(true);
|
||||
}
|
||||
});
|
||||
return;
|
||||
|
@ -655,7 +668,7 @@ public class RLottieDrawable extends BitmapDrawable implements Animatable, Bitma
|
|||
AndroidUtilities.runOnUIThread(() -> {
|
||||
secondLoadingInBackground = false;
|
||||
if (!secondLoadingInBackground && destroyAfterLoading) {
|
||||
recycle();
|
||||
recycle(true);
|
||||
return;
|
||||
}
|
||||
secondFramesCount = metaData2[0];
|
||||
|
@ -817,14 +830,14 @@ public class RLottieDrawable extends BitmapDrawable implements Animatable, Bitma
|
|||
}
|
||||
}
|
||||
|
||||
public void recycle() {
|
||||
public void recycle(boolean uiThread) {
|
||||
isRunning = false;
|
||||
isRecycled = true;
|
||||
checkRunningTasks();
|
||||
if (loadingInBackground || secondLoadingInBackground) {
|
||||
destroyAfterLoading = true;
|
||||
} else if (loadFrameTask == null && cacheGenerateTask == null && !generatingCache) {
|
||||
recycleNativePtr();
|
||||
recycleNativePtr(uiThread);
|
||||
if (bitmapsCache != null) {
|
||||
bitmapsCache.recycle();
|
||||
bitmapsCache = null;
|
||||
|
@ -853,7 +866,7 @@ public class RLottieDrawable extends BitmapDrawable implements Animatable, Bitma
|
|||
@Override
|
||||
protected void finalize() throws Throwable {
|
||||
try {
|
||||
recycle();
|
||||
recycle(false);
|
||||
} finally {
|
||||
super.finalize();
|
||||
}
|
||||
|
|
|
@ -292,7 +292,7 @@ public class ChatSelectionReactionMenuOverlay extends FrameLayout {
|
|||
}
|
||||
|
||||
private boolean isMessageTypeAllowed(MessageObject obj) {
|
||||
return MessageObject.isPhoto(obj.messageOwner) || obj.getDocument() != null && MessageObject.isVideoDocument(obj.getDocument());
|
||||
return MessageObject.isPhoto(obj.messageOwner) || obj.getDocument() != null && (MessageObject.isVideoDocument(obj.getDocument()) || MessageObject.isGifDocument(obj.getDocument()));
|
||||
}
|
||||
|
||||
public void setSelectedMessages(List<MessageObject> messages) {
|
||||
|
@ -341,7 +341,7 @@ public class ChatSelectionReactionMenuOverlay extends FrameLayout {
|
|||
if (reactionsContainerLayout.isEnabled()) {
|
||||
messageSet = true;
|
||||
reactionsContainerLayout.setMessage(currentPrimaryObject, parentFragment.getCurrentChatInfo());
|
||||
reactionsContainerLayout.startEnterAnimation();
|
||||
reactionsContainerLayout.startEnterAnimation(false);
|
||||
} else {
|
||||
messageSet = false;
|
||||
reactionsContainerLayout.setTransitionProgress(1f);
|
||||
|
|
|
@ -162,6 +162,7 @@ public class ReactionsContainerLayout extends FrameLayout implements Notificatio
|
|||
private boolean allReactionsIsDefault;
|
||||
private Paint selectedPaint;
|
||||
ChatScrimPopupContainerLayout parentLayout;
|
||||
private boolean animatePopup;
|
||||
|
||||
public ReactionsContainerLayout(BaseFragment fragment, @NonNull Context context, int currentAccount, Theme.ResourcesProvider resourcesProvider) {
|
||||
super(context);
|
||||
|
@ -925,7 +926,7 @@ public class ReactionsContainerLayout extends FrameLayout implements Notificatio
|
|||
public void setTransitionProgress(float transitionProgress) {
|
||||
this.transitionProgress = transitionProgress;
|
||||
if (parentLayout != null && parentLayout.getPopupWindowLayout() != null) {
|
||||
parentLayout.getPopupWindowLayout().setReactionsTransitionProgress(transitionProgress);
|
||||
parentLayout.getPopupWindowLayout().setReactionsTransitionProgress(animatePopup ? transitionProgress : 1);
|
||||
}
|
||||
invalidate();
|
||||
}
|
||||
|
@ -1046,7 +1047,8 @@ public class ReactionsContainerLayout extends FrameLayout implements Notificatio
|
|||
}
|
||||
}
|
||||
|
||||
public void startEnterAnimation() {
|
||||
public void startEnterAnimation(boolean animatePopup) {
|
||||
this.animatePopup = animatePopup;
|
||||
setTransitionProgress(0);
|
||||
setAlpha(1f);
|
||||
ObjectAnimator animator = ObjectAnimator.ofFloat(this, ReactionsContainerLayout.TRANSITION_PROGRESS_VALUE, 0f, 1f).setDuration(350);
|
||||
|
@ -1559,7 +1561,7 @@ public class ReactionsContainerLayout extends FrameLayout implements Notificatio
|
|||
if (chatFull.id == waitingLoadingChatId && getVisibility() != View.VISIBLE && !(chatFull.available_reactions instanceof TLRPC.TL_chatReactionsNone)) {
|
||||
setMessage(messageObject, null);
|
||||
setVisibility(View.VISIBLE);
|
||||
startEnterAnimation();
|
||||
startEnterAnimation(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -520,7 +520,7 @@ public class SearchViewPager extends ViewPagerFixed implements FilteredSearchVie
|
|||
args.putBoolean("onlySelect", true);
|
||||
args.putInt("dialogsType", DialogsActivity.DIALOGS_TYPE_FORWARD);
|
||||
DialogsActivity fragment = new DialogsActivity(args);
|
||||
fragment.setDelegate((fragment1, dids, message, param) -> {
|
||||
fragment.setDelegate((fragment1, dids, message, param, topicsFragment) -> {
|
||||
ArrayList<MessageObject> fmessages = new ArrayList<>();
|
||||
Iterator<FilteredSearchView.MessageHashId> idIterator = selectedFiles.keySet().iterator();
|
||||
while (idIterator.hasNext()) {
|
||||
|
|
|
@ -3256,7 +3256,7 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter
|
|||
args.putBoolean("canSelectTopics", true);
|
||||
args.putInt("dialogsType", DialogsActivity.DIALOGS_TYPE_FORWARD);
|
||||
DialogsActivity fragment = new DialogsActivity(args);
|
||||
fragment.setDelegate((fragment1, dids, message, param) -> {
|
||||
fragment.setDelegate((fragment1, dids, message, param, topicsFragment) -> {
|
||||
ArrayList<MessageObject> fmessages = new ArrayList<>();
|
||||
for (int a = 1; a >= 0; a--) {
|
||||
ArrayList<Integer> ids = new ArrayList<>();
|
||||
|
|
|
@ -196,7 +196,7 @@ public class SlotsDrawable extends RLottieDrawable {
|
|||
AndroidUtilities.runOnUIThread(() -> {
|
||||
loadingInBackground = false;
|
||||
if (!secondLoadingInBackground && destroyAfterLoading) {
|
||||
recycle();
|
||||
recycle(true);
|
||||
}
|
||||
});
|
||||
return;
|
||||
|
@ -240,7 +240,7 @@ public class SlotsDrawable extends RLottieDrawable {
|
|||
AndroidUtilities.runOnUIThread(() -> {
|
||||
loadingInBackground = false;
|
||||
if (!secondLoadingInBackground && destroyAfterLoading) {
|
||||
recycle();
|
||||
recycle(true);
|
||||
return;
|
||||
}
|
||||
nativePtr = nativePtrs[0];
|
||||
|
@ -268,7 +268,7 @@ public class SlotsDrawable extends RLottieDrawable {
|
|||
AndroidUtilities.runOnUIThread(() -> {
|
||||
secondLoadingInBackground = false;
|
||||
if (!loadingInBackground && destroyAfterLoading) {
|
||||
recycle();
|
||||
recycle(true);
|
||||
}
|
||||
});
|
||||
return;
|
||||
|
@ -359,7 +359,7 @@ public class SlotsDrawable extends RLottieDrawable {
|
|||
}
|
||||
secondLoadingInBackground = false;
|
||||
if (!loadingInBackground && destroyAfterLoading) {
|
||||
recycle();
|
||||
recycle(true);
|
||||
return;
|
||||
}
|
||||
secondNativePtr = secondNativePtrs[0];
|
||||
|
@ -373,7 +373,7 @@ public class SlotsDrawable extends RLottieDrawable {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void recycle() {
|
||||
public void recycle(boolean uiThread) {
|
||||
isRunning = false;
|
||||
isRecycled = true;
|
||||
checkRunningTasks();
|
||||
|
|
|
@ -234,9 +234,18 @@ public class TranslateButton extends FrameLayout {
|
|||
RestrictedLanguagesSelectActivity.toggleLanguage(detectedLanguage, true);
|
||||
translateController.checkRestrictedLanguagesUpdate();
|
||||
translateController.setHideTranslateDialog(dialogId, true);
|
||||
BulletinFactory.of(fragment).createSimpleBulletin(R.raw.msg_translate, AndroidUtilities.replaceTags(LocaleController.formatString("AddedToDoNotTranslate", R.string.AddedToDoNotTranslate, TranslateAlert2.capitalFirst(detectedLanguageName))), LocaleController.getString("Settings", R.string.Settings), () -> {
|
||||
fragment.presentFragment(new RestrictedLanguagesSelectActivity());
|
||||
}).show();
|
||||
String bulletinText;
|
||||
if (accusative[0]) {
|
||||
bulletinText = LocaleController.formatString("AddedToDoNotTranslate", R.string.AddedToDoNotTranslate, TranslateAlert2.capitalFirst(detectedLanguageNameAccusative));
|
||||
} else {
|
||||
bulletinText = LocaleController.formatString("AddedToDoNotTranslateOther", R.string.AddedToDoNotTranslateOther, TranslateAlert2.capitalFirst(detectedLanguageNameAccusative));
|
||||
}
|
||||
BulletinFactory.of(fragment).createSimpleBulletin(
|
||||
R.raw.msg_translate,
|
||||
bulletinText,
|
||||
LocaleController.getString("Settings", R.string.Settings),
|
||||
() -> fragment.presentFragment(new RestrictedLanguagesSelectActivity())
|
||||
).show();
|
||||
popupWindow.dismiss();
|
||||
});
|
||||
popupLayout.addView(dontTranslateButton);
|
||||
|
|
|
@ -938,7 +938,7 @@ public class ContactsActivity extends BaseFragment implements NotificationCenter
|
|||
}
|
||||
} else if (id == NotificationCenter.closeChats) {
|
||||
if (!creatingChat) {
|
||||
removeSelfFromStack();
|
||||
removeSelfFromStack(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -89,7 +89,7 @@ public class DialogOrContactPickerActivity extends BaseFragment {
|
|||
args.putBoolean("resetDelegate", false);
|
||||
args.putInt("dialogsType", DialogsActivity.DIALOGS_TYPE_BLOCK);
|
||||
dialogsActivity = new DialogsActivity(args);
|
||||
dialogsActivity.setDelegate((fragment, dids, message, param) -> {
|
||||
dialogsActivity.setDelegate((fragment, dids, message, param, topicsFragment) -> {
|
||||
if (dids.isEmpty()) {
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -2201,7 +2201,7 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
|||
}
|
||||
|
||||
public interface DialogsActivityDelegate {
|
||||
boolean didSelectDialogs(DialogsActivity fragment, ArrayList<MessagesStorage.TopicKey> dids, CharSequence message, boolean param);
|
||||
boolean didSelectDialogs(DialogsActivity fragment, ArrayList<MessagesStorage.TopicKey> dids, CharSequence message, boolean param, TopicsFragment topicsFragment);
|
||||
}
|
||||
|
||||
public DialogsActivity(Bundle args) {
|
||||
|
@ -3380,7 +3380,7 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
|||
if (closeFragment) {
|
||||
removeSelfFromStack();
|
||||
}
|
||||
dialogsActivityDelegate.didSelectDialogs(DialogsActivity.this, arrayList, null, true);
|
||||
dialogsActivityDelegate.didSelectDialogs(DialogsActivity.this, arrayList, null, true, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -3850,7 +3850,7 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
|||
for (int i = 0; i < selectedDialogs.size(); i++) {
|
||||
topicKeys.add(MessagesStorage.TopicKey.of(selectedDialogs.get(i), 0));
|
||||
}
|
||||
delegate.didSelectDialogs(DialogsActivity.this, topicKeys, null, false);
|
||||
delegate.didSelectDialogs(DialogsActivity.this, topicKeys, null, false, null);
|
||||
} else {
|
||||
if (floatingButton.getVisibility() != View.VISIBLE) {
|
||||
return;
|
||||
|
@ -3989,7 +3989,7 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
|||
for (int i = 0; i < selectedDialogs.size(); i++) {
|
||||
topicKeys.add(MessagesStorage.TopicKey.of(selectedDialogs.get(i), 0));
|
||||
}
|
||||
delegate.didSelectDialogs(DialogsActivity.this, topicKeys, message, false);
|
||||
delegate.didSelectDialogs(DialogsActivity.this, topicKeys, message, false, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -4182,7 +4182,7 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
|||
for (int i = 0; i < selectedDialogs.size(); i++) {
|
||||
topicKeys.add(MessagesStorage.TopicKey.of(selectedDialogs.get(i), 0));
|
||||
}
|
||||
delegate.didSelectDialogs(DialogsActivity.this, topicKeys, commentView.getFieldText(), false);
|
||||
delegate.didSelectDialogs(DialogsActivity.this, topicKeys, commentView.getFieldText(), false, null);
|
||||
});
|
||||
writeButtonBackground.setOnLongClickListener(v -> {
|
||||
if (isNextButton) {
|
||||
|
@ -4834,7 +4834,7 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
|||
if (delegate != null) {
|
||||
ArrayList<MessagesStorage.TopicKey> keys = new ArrayList<>();
|
||||
keys.add(MessagesStorage.TopicKey.of(-chatId, 0));
|
||||
delegate.didSelectDialogs(DialogsActivity.this, keys, null, false);
|
||||
delegate.didSelectDialogs(DialogsActivity.this, keys, null, false, null);
|
||||
}
|
||||
}
|
||||
);
|
||||
|
@ -4935,7 +4935,7 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
|||
if (delegate != null) {
|
||||
ArrayList<MessagesStorage.TopicKey> keys = new ArrayList<>();
|
||||
keys.add(MessagesStorage.TopicKey.of(-chatId, 0));
|
||||
delegate.didSelectDialogs(DialogsActivity.this, keys, null, false);
|
||||
delegate.didSelectDialogs(DialogsActivity.this, keys, null, false, null);
|
||||
}
|
||||
}
|
||||
);
|
||||
|
@ -5262,6 +5262,7 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
|||
int[] position = new int[2];
|
||||
passcodeItem.getLocationInWindow(position);
|
||||
((LaunchActivity) getParentActivity()).showPasscodeActivity(false, true, position[0] + passcodeItem.getMeasuredWidth() / 2, position[1] + passcodeItem.getMeasuredHeight() / 2, () -> passcodeItem.setAlpha(1.0f), () -> passcodeItem.setAlpha(0.0f));
|
||||
getNotificationsController().showNotifications();
|
||||
updatePasscodeButton();
|
||||
} else if (id == 2) {
|
||||
presentFragment(new ProxyListActivity());
|
||||
|
@ -9509,6 +9510,10 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
|||
}
|
||||
|
||||
public void didSelectResult(final long dialogId, int topicId, boolean useAlert, final boolean param) {
|
||||
didSelectResult(dialogId, topicId, useAlert, param, null);
|
||||
}
|
||||
|
||||
public void didSelectResult(final long dialogId, int topicId, boolean useAlert, final boolean param, TopicsFragment topicsFragment) {
|
||||
if (!checkCanWrite(dialogId)) {
|
||||
return;
|
||||
}
|
||||
|
@ -9549,7 +9554,7 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
|||
setDialogsListFrozen(true);
|
||||
ArrayList<MessagesStorage.TopicKey> dids = new ArrayList<>();
|
||||
dids.add(MessagesStorage.TopicKey.of(dialogId, 0));
|
||||
delegate.didSelectDialogs(DialogsActivity.this, dids, null, param);
|
||||
delegate.didSelectDialogs(DialogsActivity.this, dids, null, param, null);
|
||||
});
|
||||
} else {
|
||||
AlertsCreator.processError(currentAccount, error, this, req);
|
||||
|
@ -9617,7 +9622,7 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
|||
}
|
||||
builder.setTitle(title);
|
||||
builder.setMessage(AndroidUtilities.replaceTags(message));
|
||||
builder.setPositiveButton(buttonText, (dialogInterface, i) -> didSelectResult(dialogId, topicId,false, false));
|
||||
builder.setPositiveButton(buttonText, (dialogInterface, i) -> didSelectResult(dialogId, topicId,false, false, topicsFragment));
|
||||
builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null);
|
||||
showDialog(builder.create());
|
||||
} else if (initialDialogsType == DIALOGS_TYPE_BOT_REQUEST_PEER) {
|
||||
|
@ -9625,7 +9630,7 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
|||
if (delegate != null) {
|
||||
ArrayList<MessagesStorage.TopicKey> dids = new ArrayList<>();
|
||||
dids.add(MessagesStorage.TopicKey.of(dialogId, topicId));
|
||||
delegate.didSelectDialogs(DialogsActivity.this, dids, null, param);
|
||||
delegate.didSelectDialogs(DialogsActivity.this, dids, null, param, topicsFragment);
|
||||
if (resetDelegate) {
|
||||
delegate = null;
|
||||
}
|
||||
|
@ -9653,7 +9658,7 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
|||
if (delegate != null) {
|
||||
ArrayList<MessagesStorage.TopicKey> dids = new ArrayList<>();
|
||||
dids.add(MessagesStorage.TopicKey.of(dialogId, topicId));
|
||||
boolean res = delegate.didSelectDialogs(DialogsActivity.this, dids, null, param);
|
||||
boolean res = delegate.didSelectDialogs(DialogsActivity.this, dids, null, param, topicsFragment);
|
||||
if (res && resetDelegate) {
|
||||
delegate = null;
|
||||
}
|
||||
|
@ -9767,7 +9772,7 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
|||
for (int i = 0; i < selectedDialogs.size(); i++) {
|
||||
topicKeys.add(MessagesStorage.TopicKey.of(selectedDialogs.get(i), 0));
|
||||
}
|
||||
delegate.didSelectDialogs(DialogsActivity.this, topicKeys, commentView.getFieldText(), false);
|
||||
delegate.didSelectDialogs(DialogsActivity.this, topicKeys, commentView.getFieldText(), false, null);
|
||||
});
|
||||
|
||||
layout.addView(sendPopupLayout2, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT));
|
||||
|
|
|
@ -31,7 +31,7 @@ public class FeedWidgetConfigActivity extends ExternalActionActivity {
|
|||
args.putBoolean("allowSwitchAccount", true);
|
||||
args.putBoolean("checkCanWrite", false);
|
||||
DialogsActivity fragment = new DialogsActivity(args);
|
||||
fragment.setDelegate((fragment1, dids, message, param) -> {
|
||||
fragment.setDelegate((fragment1, dids, message, param, topicsFragment) -> {
|
||||
AccountInstance.getInstance(fragment1.getCurrentAccount()).getMessagesStorage().putWidgetDialogs(creatingAppWidgetId, dids);
|
||||
|
||||
SharedPreferences preferences = FeedWidgetConfigActivity.this.getSharedPreferences("shortcut_widget", Activity.MODE_PRIVATE);
|
||||
|
|
|
@ -98,7 +98,7 @@ public class KeepMediaPopupView extends ActionBarPopupWindow.ActionBarPopupWindo
|
|||
}
|
||||
args.putBoolean("allowGlobalSearch", false);
|
||||
DialogsActivity activity = new DialogsActivity(args);
|
||||
activity.setDelegate((fragment, dids, message, param) -> {
|
||||
activity.setDelegate((fragment, dids, message, param, topicsFragment) -> {
|
||||
CacheByChatsController.KeepMediaException newException = null;
|
||||
for (int i = 0; i < dids.size(); i++) {
|
||||
exceptions.add(newException = new CacheByChatsController.KeepMediaException(dids.get(i).dialogId, CacheByChatsController.KEEP_MEDIA_ONE_DAY));
|
||||
|
|
|
@ -1078,7 +1078,7 @@ public class LNavigation extends FrameLayout implements INavigationLayout, Float
|
|||
}
|
||||
|
||||
@Override
|
||||
public void removeFragmentFromStack(BaseFragment fragment) {
|
||||
public void removeFragmentFromStack(BaseFragment fragment, boolean immediate) {
|
||||
int i = fragmentStack.indexOf(fragment);
|
||||
if (i == -1) {
|
||||
return;
|
||||
|
|
|
@ -8,30 +8,23 @@
|
|||
|
||||
package org.telegram.ui;
|
||||
|
||||
import android.animation.Animator;
|
||||
import android.animation.AnimatorListenerAdapter;
|
||||
import android.animation.ValueAnimator;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.res.Configuration;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.view.Gravity;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.EditText;
|
||||
import android.widget.FrameLayout;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.recyclerview.widget.DefaultItemAnimator;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import org.telegram.messenger.AndroidUtilities;
|
||||
import org.telegram.messenger.FileLog;
|
||||
import org.telegram.messenger.LanguageDetector;
|
||||
import org.telegram.messenger.LocaleController;
|
||||
import org.telegram.messenger.MessagesController;
|
||||
import org.telegram.messenger.NotificationCenter;
|
||||
|
@ -220,7 +213,16 @@ public class LanguageSelectActivity extends BaseFragment implements Notification
|
|||
final boolean currentFullValue = getContextValue() || getChatValue();
|
||||
if (currentFullValue != prevFullValue) {
|
||||
int start = 1 + (!getMessagesController().premiumLocked ? 1 : 0);
|
||||
listAdapter.notifyItemChanged(start);
|
||||
TextCheckCell last = null;
|
||||
for (int i = 0; i < listView.getChildCount(); ++i) {
|
||||
View child = listView.getChildAt(i);
|
||||
if (listView.getChildAdapterPosition(child) == start && child instanceof TextCheckCell) {
|
||||
last = (TextCheckCell) child;
|
||||
}
|
||||
}
|
||||
if (last != null) {
|
||||
last.setDivider(currentFullValue);
|
||||
}
|
||||
if (currentFullValue) {
|
||||
listAdapter.notifyItemInserted(start + 1);
|
||||
} else {
|
||||
|
@ -255,11 +257,16 @@ public class LanguageSelectActivity extends BaseFragment implements Notification
|
|||
boolean sameLang = prevLocale == localeInfo;
|
||||
|
||||
final AlertDialog progressDialog = new AlertDialog(getContext(), AlertDialog.ALERT_TYPE_SPINNER);
|
||||
int reqId = LocaleController.getInstance().applyLanguage(localeInfo, true, false, false, true, currentAccount, () -> {
|
||||
if (!sameLang) {
|
||||
progressDialog.showDelayed(500);
|
||||
}
|
||||
int reqId = LocaleController.getInstance().applyLanguage(localeInfo, true, false, false, true, false, currentAccount, () -> {
|
||||
progressDialog.dismiss();
|
||||
if (!sameLang) {
|
||||
actionBar.closeSearchField();
|
||||
updateLanguage();
|
||||
AndroidUtilities.runOnUIThread(() -> {
|
||||
actionBar.closeSearchField();
|
||||
updateLanguage();
|
||||
}, 10);
|
||||
}
|
||||
});
|
||||
if (reqId != 0) {
|
||||
|
@ -276,16 +283,14 @@ public class LanguageSelectActivity extends BaseFragment implements Notification
|
|||
|
||||
if (selectedLanguages.contains(prevLangCode) && !selectedLanguages.contains(langCode)) {
|
||||
newSelectedLanguages.removeIf(s -> s != null && s.equals(prevLangCode));
|
||||
newSelectedLanguages.add(langCode);
|
||||
if (langCode != null && !"null".equals(langCode)) {
|
||||
newSelectedLanguages.add(langCode);
|
||||
}
|
||||
}
|
||||
preferences.edit().putStringSet("translate_button_restricted_languages", newSelectedLanguages).apply();
|
||||
MessagesController.getInstance(currentAccount).getTranslateController().checkRestrictedLanguagesUpdate();
|
||||
MessagesController.getInstance(currentAccount).getTranslateController().cleanup();
|
||||
|
||||
if (!sameLang) {
|
||||
progressDialog.showDelayed(500);
|
||||
}
|
||||
|
||||
TranslateController.invalidateSuggestedLanguageCodes();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
|
@ -420,26 +425,7 @@ public class LanguageSelectActivity extends BaseFragment implements Notification
|
|||
listView.setAdapter(listAdapter);
|
||||
}
|
||||
} else {
|
||||
// try {
|
||||
// if (searchTimer != null) {
|
||||
// searchTimer.cancel();
|
||||
// }
|
||||
// } catch (Exception e) {
|
||||
// FileLog.e(e);
|
||||
// }
|
||||
// searchTimer = new Timer();
|
||||
// searchTimer.schedule(new TimerTask() {
|
||||
// @Override
|
||||
// public void run() {
|
||||
// try {
|
||||
// searchTimer.cancel();
|
||||
// searchTimer = null;
|
||||
// } catch (Exception e) {
|
||||
// FileLog.e(e);
|
||||
// }
|
||||
processSearch(query);
|
||||
// }
|
||||
// }, 100, 300);
|
||||
processSearch(query);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -447,15 +433,17 @@ public class LanguageSelectActivity extends BaseFragment implements Notification
|
|||
if (actionBar != null) {
|
||||
actionBar.setTitleAnimated(LocaleController.getString("Language", R.string.Language), true, 350, CubicBezierInterpolator.EASE_OUT_QUINT);
|
||||
}
|
||||
if (listView != null) {
|
||||
for (int i = 0; i < listView.getChildCount(); ++i) {
|
||||
View child = listView.getChildAt(i);
|
||||
if (child instanceof TranslateSettings || child instanceof HeaderCell) {
|
||||
listAdapter.notifyItemChanged(listView.getChildAdapterPosition(child));
|
||||
} else {
|
||||
listAdapter.onBindViewHolder(listView.getChildViewHolder(child), listView.getChildAdapterPosition(child));
|
||||
}
|
||||
}
|
||||
if (listAdapter != null) {
|
||||
listAdapter.notifyItemRangeChanged(0, listAdapter.getItemCount());
|
||||
// for (int i = 0; i < listView.getChildCount(); ++i) {
|
||||
// View child = listView.getChildAt(i);
|
||||
// listAdapter.onBindViewHolder(listView.getChildViewHolder(child), listView.getChildAdapterPosition(child));
|
||||
// if (child instanceof TextRadioCell) {
|
||||
// ((TextRadioCell) child).updateRTL();
|
||||
// } else if (child instanceof TextInfoPrivacyCell) {
|
||||
// ((TextInfoPrivacyCell) child).updateRTL();
|
||||
// }
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -495,278 +483,6 @@ public class LanguageSelectActivity extends BaseFragment implements Notification
|
|||
});
|
||||
}
|
||||
|
||||
private class TranslateSettings extends LinearLayout {
|
||||
private SharedPreferences preferences;
|
||||
|
||||
private HeaderCell header;
|
||||
private TextCheckCell showButtonCheck;
|
||||
private TextCheckCell showChatButtonCheck;
|
||||
private TextSettingsCell doNotTranslateCell;
|
||||
private TextInfoPrivacyCell info;
|
||||
private TextInfoPrivacyCell info2;
|
||||
private ValueAnimator doNotTranslateCellAnimation = null;
|
||||
// private HeaderCell header2;
|
||||
|
||||
// private float HEIGHT_OPEN = 243;
|
||||
// private float HEIGHT_CLOSED = HEIGHT_OPEN - 50;
|
||||
|
||||
private Drawable topShadow, bottomShadow;
|
||||
|
||||
public TranslateSettings(Context context) {
|
||||
super(context);
|
||||
setFocusable(false);
|
||||
|
||||
setOrientation(VERTICAL);
|
||||
|
||||
topShadow = Theme.getThemedDrawable(context, R.drawable.greydivider_bottom, Theme.key_windowBackgroundGrayShadow);
|
||||
bottomShadow = Theme.getThemedDrawable(context, R.drawable.greydivider_top, Theme.key_windowBackgroundGrayShadow);
|
||||
|
||||
preferences = MessagesController.getMainSettings(currentAccount);
|
||||
|
||||
header = new HeaderCell(context);
|
||||
header.setFocusable(true);
|
||||
header.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite));
|
||||
header.setText(LocaleController.getString("TranslateMessages", R.string.TranslateMessages));
|
||||
header.setContentDescription(LocaleController.getString("TranslateMessages", R.string.TranslateMessages));
|
||||
addView(header, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT));
|
||||
|
||||
final boolean value = getValue();
|
||||
|
||||
showButtonCheck = new TextCheckCell(context);
|
||||
showButtonCheck.setBackground(Theme.createSelectorWithBackgroundDrawable(Theme.getColor(Theme.key_windowBackgroundWhite), Theme.getColor(Theme.key_listSelector)));
|
||||
showButtonCheck.setTextAndCheck(
|
||||
LocaleController.getString("ShowTranslateButton", R.string.ShowTranslateButton),
|
||||
getContextValue(),
|
||||
true
|
||||
);
|
||||
showButtonCheck.setOnClickListener(e -> {
|
||||
getMessagesController().getTranslateController().setContextTranslateEnabled(!getContextValue());
|
||||
NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.updateSearchSettings);
|
||||
update();
|
||||
});
|
||||
addView(showButtonCheck, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT));
|
||||
|
||||
showChatButtonCheck = new TextCheckCell(context);
|
||||
showChatButtonCheck.setBackground(Theme.createSelectorWithBackgroundDrawable(Theme.getColor(Theme.key_windowBackgroundWhite), Theme.getColor(Theme.key_listSelector)));
|
||||
showChatButtonCheck.setTextAndCheck(
|
||||
LocaleController.getString("ShowTranslateChatButton", R.string.ShowTranslateChatButton),
|
||||
getChatValue(),
|
||||
value
|
||||
);
|
||||
showChatButtonCheck.setOnClickListener(e -> {
|
||||
if (!getUserConfig().isPremium()) {
|
||||
showDialog(new PremiumFeatureBottomSheet(LanguageSelectActivity.this, PremiumPreviewFragment.PREMIUM_FEATURE_TRANSLATIONS, false));
|
||||
return;
|
||||
}
|
||||
MessagesController.getMainSettings(currentAccount).edit().putBoolean("translate_chat_button", !getChatValue()).apply();
|
||||
NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.updateSearchSettings);
|
||||
update();
|
||||
});
|
||||
showChatButtonCheck.setCheckBoxIcon(!getUserConfig().isPremium() ? R.drawable.permission_locked : 0);
|
||||
addView(showChatButtonCheck, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT));
|
||||
|
||||
doNotTranslateCell = new TextSettingsCell(context);
|
||||
doNotTranslateCell.setBackground(Theme.createSelectorWithBackgroundDrawable(Theme.getColor(Theme.key_windowBackgroundWhite), Theme.getColor(Theme.key_listSelector)));
|
||||
doNotTranslateCell.setOnClickListener(e -> {
|
||||
presentFragment(new RestrictedLanguagesSelectActivity());
|
||||
update();
|
||||
});
|
||||
doNotTranslateCell.setClickable(value && LanguageDetector.hasSupport());
|
||||
doNotTranslateCell.setAlpha(value && LanguageDetector.hasSupport() ? 1f : 0f);
|
||||
addView(doNotTranslateCell, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT));
|
||||
|
||||
info = new TextInfoPrivacyCell(context);
|
||||
info.setTopPadding(11);
|
||||
info.setBottomPadding(16);
|
||||
info.setFocusable(true);
|
||||
info.setText(LocaleController.getString("TranslateMessagesInfo1", R.string.TranslateMessagesInfo1));
|
||||
info.setContentDescription(LocaleController.getString("TranslateMessagesInfo1", R.string.TranslateMessagesInfo1));
|
||||
addView(info, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT));
|
||||
|
||||
info2 = new TextInfoPrivacyCell(context);
|
||||
info2.setTopPadding(0);
|
||||
info2.setBottomPadding(16);
|
||||
info2.setFocusable(true);
|
||||
info2.setText(LocaleController.getString("TranslateMessagesInfo2", R.string.TranslateMessagesInfo2));
|
||||
info2.setContentDescription(LocaleController.getString("TranslateMessagesInfo2", R.string.TranslateMessagesInfo2));
|
||||
info2.setAlpha(value ? 0f : 1f);
|
||||
addView(info2, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT));
|
||||
|
||||
// header2 = new HeaderCell(context);
|
||||
// header2.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite));
|
||||
// header2.setText(LocaleController.getString("Language", R.string.Language));
|
||||
// header2.setTranslationY(-Math.max(doNotTranslateCell.getHeight(), info2.getHeight()));
|
||||
// addView(header2, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.BOTTOM));
|
||||
|
||||
// setLayoutParams(new RecyclerView.LayoutParams(LayoutHelper.MATCH_PARENT, height()));
|
||||
updateHeight();
|
||||
update();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void dispatchDraw(Canvas canvas) {
|
||||
super.dispatchDraw(canvas);
|
||||
|
||||
float topShadowY = Math.max(showChatButtonCheck.getY() + showChatButtonCheck.getHeight(), doNotTranslateCell.getY() + doNotTranslateCell.getHeight() * doNotTranslateCell.getAlpha());
|
||||
topShadow.setBounds(0, (int) topShadowY, getWidth(), (int) (topShadowY + AndroidUtilities.dp(12)));
|
||||
topShadow.draw(canvas);
|
||||
|
||||
float bottomShadowY = getHeight();
|
||||
bottomShadow.setBounds(0, (int) (bottomShadowY - AndroidUtilities.dp(12)), getWidth(), (int) bottomShadowY);
|
||||
bottomShadow.draw(canvas);
|
||||
}
|
||||
|
||||
public void updateTranslations() {
|
||||
header.setText(LocaleController.getString("TranslateMessages", R.string.TranslateMessages));
|
||||
showButtonCheck.setTextAndCheck(
|
||||
LocaleController.getString("ShowTranslateButton", R.string.ShowTranslateButton), getContextValue(), true
|
||||
);
|
||||
showChatButtonCheck.setTextAndCheck(
|
||||
LocaleController.getString("ShowTranslateChatButton", R.string.ShowTranslateChatButton), getChatValue(), getValue()
|
||||
);
|
||||
showChatButtonCheck.setCheckBoxIcon(!getUserConfig().isPremium() ? R.drawable.permission_locked : 0);
|
||||
showButtonCheck.updateRTL();
|
||||
doNotTranslateCell.updateRTL();
|
||||
info.setText(LocaleController.getString("TranslateMessagesInfo1", R.string.TranslateMessagesInfo1));
|
||||
info.getTextView().setGravity(LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT);
|
||||
info2.setText(LocaleController.getString("TranslateMessagesInfo2", R.string.TranslateMessagesInfo2));
|
||||
info2.getTextView().setGravity(LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT);
|
||||
update();
|
||||
updateHeight();
|
||||
}
|
||||
|
||||
private boolean getValue() {
|
||||
return getContextValue() || getChatValue();
|
||||
}
|
||||
|
||||
public void update() {
|
||||
boolean value = getValue() && LanguageDetector.hasSupport();
|
||||
|
||||
showButtonCheck.setChecked(getContextValue());
|
||||
showChatButtonCheck.setChecked(getChatValue());
|
||||
|
||||
if (doNotTranslateCellAnimation != null) {
|
||||
doNotTranslateCellAnimation.cancel();
|
||||
}
|
||||
|
||||
showChatButtonCheck.setDivider(value);
|
||||
HashSet<String> langCodes = RestrictedLanguagesSelectActivity.getRestrictedLanguages();
|
||||
final String doNotTranslateCellName = LocaleController.getString("DoNotTranslate", R.string.DoNotTranslate);
|
||||
String doNotTranslateCellValue = null;
|
||||
try {
|
||||
if (langCodes.size() == 1) {
|
||||
doNotTranslateCellValue = TranslateAlert2.capitalFirst(TranslateAlert2.languageName(langCodes.iterator().next()));
|
||||
} else {
|
||||
Iterator<String> iterator = langCodes.iterator();
|
||||
boolean first = true;
|
||||
StringBuilder string = new StringBuilder();
|
||||
while (iterator.hasNext()) {
|
||||
String lang = iterator.next();
|
||||
if (!first) {
|
||||
string.append(", ");
|
||||
}
|
||||
string.append(TranslateAlert2.capitalFirst(TranslateAlert2.languageName(lang)));
|
||||
first = false;
|
||||
}
|
||||
doNotTranslateCellValue = string.toString();
|
||||
if (doNotTranslateCell.getValueTextView().getPaint().measureText(doNotTranslateCellValue) >
|
||||
Math.min((AndroidUtilities.displaySize.x - AndroidUtilities.dp(34)) / 2f, AndroidUtilities.displaySize.x - AndroidUtilities.dp(21 * 4) - doNotTranslateCell.getTextView().getPaint().measureText(doNotTranslateCellName))) {
|
||||
doNotTranslateCellValue = null;
|
||||
}
|
||||
}
|
||||
} catch (Exception ignore) {}
|
||||
if (doNotTranslateCellValue == null)
|
||||
doNotTranslateCellValue = String.format(LocaleController.getPluralString("Languages", langCodes.size()), langCodes.size());
|
||||
doNotTranslateCell.setTextAndValue(doNotTranslateCellName, doNotTranslateCellValue, false, false);
|
||||
doNotTranslateCell.setClickable(value);
|
||||
|
||||
info2.setVisibility(View.VISIBLE);
|
||||
doNotTranslateCellAnimation = ValueAnimator.ofFloat(doNotTranslateCell.getAlpha(), value ? 1f : 0f);
|
||||
doNotTranslateCellAnimation.setInterpolator(CubicBezierInterpolator.DEFAULT);
|
||||
doNotTranslateCellAnimation.addUpdateListener(a -> {
|
||||
float t = (float) a.getAnimatedValue();
|
||||
doNotTranslateCell.setAlpha(t);
|
||||
doNotTranslateCell.setTranslationY(-AndroidUtilities.dp(8) * (1f - t));
|
||||
info.setTranslationY(-doNotTranslateCell.getHeight() * (1f - t));
|
||||
t = 1f;
|
||||
info2.setAlpha(1f - t);
|
||||
info2.setTranslationY(-doNotTranslateCell.getHeight() * (1f - t));
|
||||
|
||||
translateSettingsBackgroundHeight = header.getMeasuredHeight() + showButtonCheck.getMeasuredHeight() + (int) (doNotTranslateCell.getAlpha() * doNotTranslateCell.getMeasuredHeight());
|
||||
invalidate();
|
||||
});
|
||||
doNotTranslateCellAnimation.addListener(new AnimatorListenerAdapter() {
|
||||
@Override
|
||||
public void onAnimationEnd(Animator animation) {
|
||||
super.onAnimationEnd(animation);
|
||||
if (doNotTranslateCell.getAlpha() > .5) {
|
||||
info2.setVisibility(View.GONE);
|
||||
} else {
|
||||
info2.setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
||||
translateSettingsBackgroundHeight = header.getMeasuredHeight() + showButtonCheck.getMeasuredHeight() + (int) (doNotTranslateCell.getAlpha() * doNotTranslateCell.getMeasuredHeight());
|
||||
invalidate();
|
||||
}
|
||||
});
|
||||
doNotTranslateCellAnimation.setDuration((long) (Math.abs(doNotTranslateCell.getAlpha() - (value ? 1f : 0f)) * 200));
|
||||
doNotTranslateCellAnimation.start();
|
||||
// updateHeight();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onConfigurationChanged(Configuration newConfig) {
|
||||
super.onConfigurationChanged(newConfig);
|
||||
updateHeight();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onLayout(boolean changed, int l, int t, int r, int b) {
|
||||
updateHeight();
|
||||
super.onLayout(changed, l, t, r, b);
|
||||
}
|
||||
|
||||
void updateHeight() {
|
||||
header.measure(MeasureSpec.makeMeasureSpec(AndroidUtilities.displaySize.x, MeasureSpec.EXACTLY), MeasureSpec.UNSPECIFIED);
|
||||
showButtonCheck.measure(MeasureSpec.makeMeasureSpec(AndroidUtilities.displaySize.x, MeasureSpec.EXACTLY), MeasureSpec.UNSPECIFIED);
|
||||
showChatButtonCheck.measure(MeasureSpec.makeMeasureSpec(AndroidUtilities.displaySize.x, MeasureSpec.EXACTLY), MeasureSpec.UNSPECIFIED);
|
||||
doNotTranslateCell.measure(MeasureSpec.makeMeasureSpec(AndroidUtilities.displaySize.x, MeasureSpec.EXACTLY), MeasureSpec.UNSPECIFIED);
|
||||
info.measure(MeasureSpec.makeMeasureSpec(AndroidUtilities.displaySize.x, MeasureSpec.EXACTLY), MeasureSpec.UNSPECIFIED);
|
||||
info2.measure(MeasureSpec.makeMeasureSpec(AndroidUtilities.displaySize.x, MeasureSpec.EXACTLY), MeasureSpec.UNSPECIFIED);
|
||||
|
||||
int newHeight = searching ? 0 : height();
|
||||
if (getLayoutParams() == null) {
|
||||
setLayoutParams(new RecyclerView.LayoutParams(LayoutHelper.MATCH_PARENT, newHeight));
|
||||
} else if (getLayoutParams().height != newHeight) {
|
||||
RecyclerView.LayoutParams lp = (RecyclerView.LayoutParams) getLayoutParams();
|
||||
lp.height = newHeight;
|
||||
setLayoutParams(lp);
|
||||
}
|
||||
invalidate();
|
||||
}
|
||||
|
||||
int height() {
|
||||
return Math.max(AndroidUtilities.dp(40), header.getMeasuredHeight()) +
|
||||
Math.max(AndroidUtilities.dp(50), showButtonCheck.getMeasuredHeight()) +
|
||||
Math.max(AndroidUtilities.dp(50), showChatButtonCheck.getMeasuredHeight()) +
|
||||
Math.max(Math.max(AndroidUtilities.dp(50), doNotTranslateCell.getMeasuredHeight()), (info2.getMeasuredHeight() <= 0 ? AndroidUtilities.dp(51) : info2.getMeasuredHeight())) +
|
||||
(info.getMeasuredHeight() <= 0 ? AndroidUtilities.dp(62) : info.getMeasuredHeight());/* + header2.getHeight()*/
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
||||
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
|
||||
updateHeight();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onAttachedToWindow() {
|
||||
super.onAttachedToWindow();
|
||||
update();
|
||||
updateHeight();
|
||||
}
|
||||
}
|
||||
|
||||
private boolean getContextValue() {
|
||||
return getMessagesController().getTranslateController().isContextTranslateEnabled();
|
||||
}
|
||||
|
@ -854,6 +570,13 @@ public class LanguageSelectActivity extends BaseFragment implements Notification
|
|||
return new RecyclerListView.Holder(view);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewAttachedToWindow(@NonNull RecyclerView.ViewHolder holder) {
|
||||
if (holder.itemView instanceof TextRadioCell) {
|
||||
((TextRadioCell) holder.itemView).updateRTL();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
|
||||
switch (holder.getItemViewType()) {
|
||||
|
@ -862,6 +585,7 @@ public class LanguageSelectActivity extends BaseFragment implements Notification
|
|||
position -= (7 - (!(getChatValue() || getContextValue()) ? 1 : 0) - (getMessagesController().premiumLocked ? 1 : 0));
|
||||
}
|
||||
TextRadioCell textSettingsCell = (TextRadioCell) holder.itemView;
|
||||
textSettingsCell.updateRTL();
|
||||
LocaleController.LocaleInfo localeInfo = null;
|
||||
boolean last;
|
||||
if (search) {
|
||||
|
@ -904,6 +628,7 @@ public class LanguageSelectActivity extends BaseFragment implements Notification
|
|||
}
|
||||
case VIEW_TYPE_SETTINGS: {
|
||||
TextSettingsCell settingsCell = (TextSettingsCell) holder.itemView;
|
||||
settingsCell.updateRTL();
|
||||
HashSet<String> langCodes = RestrictedLanguagesSelectActivity.getRestrictedLanguages();
|
||||
final String doNotTranslateCellName = LocaleController.getString("DoNotTranslate", R.string.DoNotTranslate);
|
||||
String doNotTranslateCellValue = null;
|
||||
|
@ -920,8 +645,11 @@ public class LanguageSelectActivity extends BaseFragment implements Notification
|
|||
if (!first) {
|
||||
string.append(", ");
|
||||
}
|
||||
string.append(TranslateAlert2.capitalFirst(TranslateAlert2.languageName(lang, accusative)));
|
||||
first = false;
|
||||
String langName = TranslateAlert2.capitalFirst(TranslateAlert2.languageName(lang, accusative));
|
||||
if (langName != null) {
|
||||
string.append(langName);
|
||||
first = false;
|
||||
}
|
||||
}
|
||||
doNotTranslateCellValue = string.toString();
|
||||
if (settingsCell.getValueTextView().getPaint().measureText(doNotTranslateCellValue) > Math.min((AndroidUtilities.displaySize.x - AndroidUtilities.dp(34)) / 2f, AndroidUtilities.displaySize.x - AndroidUtilities.dp(21 * 4) - settingsCell.getTextView().getPaint().measureText(doNotTranslateCellName))) {
|
||||
|
@ -937,6 +665,7 @@ public class LanguageSelectActivity extends BaseFragment implements Notification
|
|||
}
|
||||
case VIEW_TYPE_SWITCH: {
|
||||
TextCheckCell cell = (TextCheckCell) holder.itemView;
|
||||
cell.updateRTL();
|
||||
if (position == 1) {
|
||||
cell.setTextAndCheck(LocaleController.getString("ShowTranslateButton", R.string.ShowTranslateButton), getContextValue(), true);
|
||||
} else if (position == 2) {
|
||||
|
@ -947,6 +676,7 @@ public class LanguageSelectActivity extends BaseFragment implements Notification
|
|||
}
|
||||
case VIEW_TYPE_INFO: {
|
||||
TextInfoPrivacyCell infoCell = (TextInfoPrivacyCell) holder.itemView;
|
||||
infoCell.updateRTL();
|
||||
if (position == (getContextValue() || getChatValue() ? 4 : 3)) {
|
||||
infoCell.setText(LocaleController.getString("TranslateMessagesInfo1", R.string.TranslateMessagesInfo1));
|
||||
infoCell.setBackground(Theme.getThemedDrawable(mContext, R.drawable.greydivider_bottom, Theme.key_windowBackgroundGrayShadow));
|
||||
|
|
|
@ -50,7 +50,6 @@ import android.text.TextPaint;
|
|||
import android.text.TextUtils;
|
||||
import android.text.style.ClickableSpan;
|
||||
import android.util.Base64;
|
||||
import android.util.Log;
|
||||
import android.util.SparseArray;
|
||||
import android.util.SparseIntArray;
|
||||
import android.util.TypedValue;
|
||||
|
@ -88,11 +87,11 @@ import com.google.firebase.appindexing.Action;
|
|||
import com.google.firebase.appindexing.FirebaseUserActions;
|
||||
import com.google.firebase.appindexing.builders.AssistActionBuilder;
|
||||
|
||||
import org.telegram.messenger.BackupAgent;
|
||||
import org.telegram.PhoneFormat.PhoneFormat;
|
||||
import org.telegram.messenger.AccountInstance;
|
||||
import org.telegram.messenger.AndroidUtilities;
|
||||
import org.telegram.messenger.ApplicationLoader;
|
||||
import org.telegram.messenger.BackupAgent;
|
||||
import org.telegram.messenger.BotWebViewVibrationEffect;
|
||||
import org.telegram.messenger.BuildVars;
|
||||
import org.telegram.messenger.ChatObject;
|
||||
|
@ -112,6 +111,7 @@ import org.telegram.messenger.MessageObject;
|
|||
import org.telegram.messenger.MessagesController;
|
||||
import org.telegram.messenger.MessagesStorage;
|
||||
import org.telegram.messenger.NotificationCenter;
|
||||
import org.telegram.messenger.NotificationsController;
|
||||
import org.telegram.messenger.PushListenerController;
|
||||
import org.telegram.messenger.R;
|
||||
import org.telegram.messenger.SendMessagesHelper;
|
||||
|
@ -1564,11 +1564,21 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati
|
|||
rightActionBarLayout.getView().setVisibility(View.VISIBLE);
|
||||
}
|
||||
NotificationCenter.getGlobalInstance().postNotificationName(NotificationCenter.passcodeDismissed, view);
|
||||
try {
|
||||
NotificationsController.getInstance(UserConfig.selectedAccount).showNotifications();
|
||||
} catch (Exception e) {
|
||||
FileLog.e(e);
|
||||
}
|
||||
};
|
||||
passcodeView.setDelegate(delegate);
|
||||
for (PasscodeView overlay : overlayPasscodeViews) {
|
||||
overlay.setDelegate(delegate);
|
||||
}
|
||||
try {
|
||||
NotificationsController.getInstance(UserConfig.selectedAccount).showNotifications();
|
||||
} catch (Exception e) {
|
||||
FileLog.e(e);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean allowShowFingerprintDialog(PasscodeView passcodeView) {
|
||||
|
@ -2774,7 +2784,7 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati
|
|||
} else {
|
||||
ArrayList<MessagesStorage.TopicKey> dids = new ArrayList<>();
|
||||
dids.add(MessagesStorage.TopicKey.of(dialogId, 0));
|
||||
didSelectDialogs(null, dids, null, false);
|
||||
didSelectDialogs(null, dids, null, false, null);
|
||||
}
|
||||
} else if (open_settings != 0) {
|
||||
BaseFragment fragment;
|
||||
|
@ -3505,7 +3515,7 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati
|
|||
args.putBoolean("allowBots", chooserTargets.contains("bots"));
|
||||
|
||||
dialogsActivity = new DialogsActivity(args);
|
||||
dialogsActivity.setDelegate((fragment, dids, message1, param) -> {
|
||||
dialogsActivity.setDelegate((fragment, dids, message1, param, topicsFragment) -> {
|
||||
long did = dids.get(0).dialogId;
|
||||
|
||||
Bundle args1 = new Bundle();
|
||||
|
@ -3615,7 +3625,7 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati
|
|||
args.putString("selectAlertString", LocaleController.getString("SendGameToText", R.string.SendGameToText));
|
||||
args.putString("selectAlertStringGroup", LocaleController.getString("SendGameToGroupText", R.string.SendGameToGroupText));
|
||||
DialogsActivity fragment = new DialogsActivity(args);
|
||||
fragment.setDelegate((fragment1, dids, message1, param) -> {
|
||||
fragment.setDelegate((fragment1, dids, message1, param, topicsFragment) -> {
|
||||
long did = dids.get(0).dialogId;
|
||||
TLRPC.TL_inputMediaGame inputMediaGame = new TLRPC.TL_inputMediaGame();
|
||||
inputMediaGame.id = new TLRPC.TL_inputGameShortName();
|
||||
|
@ -3684,7 +3694,7 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati
|
|||
final String botHash = TextUtils.isEmpty(botChat) ? (TextUtils.isEmpty(botChannel) ? null : botChannel) : botChat;
|
||||
// args.putString("addToGroupAlertString", LocaleController.formatString("AddToTheGroupAlertText", R.string.AddToTheGroupAlertText, UserObject.getUserName(user), "%1$s"));
|
||||
DialogsActivity fragment = new DialogsActivity(args);
|
||||
fragment.setDelegate((fragment12, dids, message1, param) -> {
|
||||
fragment.setDelegate((fragment12, dids, message1, param, topicsFragment) -> {
|
||||
long did = dids.get(0).dialogId;
|
||||
|
||||
TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-did);
|
||||
|
@ -4163,7 +4173,7 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati
|
|||
args.putBoolean("onlySelect", true);
|
||||
args.putInt("dialogsType", DialogsActivity.DIALOGS_TYPE_FORWARD);
|
||||
DialogsActivity fragment = new DialogsActivity(args);
|
||||
fragment.setDelegate((fragment13, dids, m, param) -> {
|
||||
fragment.setDelegate((fragment13, dids, m, param, topicsFragment) -> {
|
||||
long did = dids.get(0).dialogId;
|
||||
Bundle args13 = new Bundle();
|
||||
args13.putBoolean("scrollToTopOnResume", true);
|
||||
|
@ -4921,7 +4931,7 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean didSelectDialogs(DialogsActivity dialogsFragment, ArrayList<MessagesStorage.TopicKey> dids, CharSequence message, boolean param) {
|
||||
public boolean didSelectDialogs(DialogsActivity dialogsFragment, ArrayList<MessagesStorage.TopicKey> dids, CharSequence message, boolean param, TopicsFragment topicsFragment) {
|
||||
final int account = dialogsFragment != null ? dialogsFragment.getCurrentAccount() : currentAccount;
|
||||
|
||||
if (exportingChatUri != null) {
|
||||
|
@ -5016,7 +5026,12 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati
|
|||
}
|
||||
}
|
||||
|
||||
if (topicsFragment != null) {
|
||||
topicsFragment.removeSelfFromStack();
|
||||
}
|
||||
boolean presentedFragmentWithRemoveLast = false;
|
||||
if (contactsToSend != null && contactsToSend.size() == 1 && !mainFragmentsStack.isEmpty()) {
|
||||
presentedFragmentWithRemoveLast = true;
|
||||
PhonebookShareAlert alert = new PhonebookShareAlert(mainFragmentsStack.get(mainFragmentsStack.size() - 1), null, null, contactsToSendUri, null, null, null);
|
||||
alert.setDelegate((user, notify2, scheduleDate) -> {
|
||||
if (fragment != null) {
|
||||
|
@ -5025,7 +5040,17 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati
|
|||
AccountInstance accountInstance = AccountInstance.getInstance(UserConfig.selectedAccount);
|
||||
for (int i = 0; i < dids.size(); i++) {
|
||||
long did = dids.get(i).dialogId;
|
||||
SendMessagesHelper.getInstance(account).sendMessage(user, did, null, null, null, null, notify2, scheduleDate);
|
||||
int topicId = dids.get(i).topicId;
|
||||
MessageObject replyToMsg = null;
|
||||
if (topicId != 0) {
|
||||
TLRPC.TL_forumTopic topic = accountInstance.getMessagesController().getTopicsController().findTopic(-did, topicId);
|
||||
if (topic != null && topic.topicStartMessage != null) {
|
||||
replyToMsg = new MessageObject(accountInstance.getCurrentAccount(), topic.topicStartMessage, false, false);
|
||||
replyToMsg.isTopicMainMessage = true;
|
||||
}
|
||||
}
|
||||
|
||||
SendMessagesHelper.getInstance(account).sendMessage(user, did, replyToMsg, replyToMsg, null, null, notify2, scheduleDate);
|
||||
if (!TextUtils.isEmpty(message)) {
|
||||
SendMessagesHelper.prepareSendingText(accountInstance, message.toString(), did, notify, 0);
|
||||
}
|
||||
|
@ -5044,12 +5069,14 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati
|
|||
TLRPC.TL_forumTopic topic = accountInstance.getMessagesController().getTopicsController().findTopic(-did, topicId);
|
||||
if (topic != null && topic.topicStartMessage != null) {
|
||||
replyToMsg = new MessageObject(accountInstance.getCurrentAccount(), topic.topicStartMessage, false, false);
|
||||
replyToMsg.isTopicMainMessage = true;
|
||||
}
|
||||
}
|
||||
boolean photosEditorOpened = false, videoEditorOpened = false;
|
||||
if (fragment != null) {
|
||||
boolean withoutAnimation = dialogsFragment == null || (videoPath != null || (photoPathsArray != null && photoPathsArray.size() > 0));
|
||||
actionBarLayout.presentFragment(fragment, dialogsFragment != null, withoutAnimation, true, false);
|
||||
presentedFragmentWithRemoveLast = dialogsFragment != null;
|
||||
if (videoPath != null) {
|
||||
fragment.openVideoEditor(videoPath, sendingText);
|
||||
videoEditorOpened = true;
|
||||
|
@ -5083,7 +5110,7 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati
|
|||
captionToSend = sendingText;
|
||||
sendingText = null;
|
||||
}
|
||||
SendMessagesHelper.prepareSendingDocuments(accountInstance, documentsPathsArray, documentsOriginalPathsArray, documentsUrisArray, captionToSend, documentsMimeType, did, null, null, null, null, notify, 0);
|
||||
SendMessagesHelper.prepareSendingDocuments(accountInstance, documentsPathsArray, documentsOriginalPathsArray, documentsUrisArray, captionToSend, documentsMimeType, did, replyToMsg, replyToMsg, null, null, notify, 0);
|
||||
}
|
||||
if (sendingText != null) {
|
||||
SendMessagesHelper.prepareSendingText(accountInstance, sendingText, did, topicId, notify, 0);
|
||||
|
@ -5100,7 +5127,9 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati
|
|||
}
|
||||
}
|
||||
if (dialogsFragment != null && fragment == null) {
|
||||
dialogsFragment.finishFragment();
|
||||
if (!presentedFragmentWithRemoveLast) {
|
||||
dialogsFragment.finishFragment();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -6497,6 +6526,11 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati
|
|||
FileLog.d("lock app");
|
||||
}
|
||||
showPasscodeActivity(true, false, -1, -1, null, null);
|
||||
try {
|
||||
NotificationsController.getInstance(UserConfig.selectedAccount).showNotifications();
|
||||
} catch (Exception e) {
|
||||
FileLog.e(e);
|
||||
}
|
||||
} else {
|
||||
if (BuildVars.LOGS_ENABLED) {
|
||||
FileLog.d("didn't pass lock check");
|
||||
|
|
|
@ -2435,7 +2435,7 @@ public class LocationActivity extends BaseFragment implements NotificationCenter
|
|||
@Override
|
||||
public void didReceivedNotification(int id, int account, Object... args) {
|
||||
if (id == NotificationCenter.closeChats) {
|
||||
removeSelfFromStack();
|
||||
removeSelfFromStack(true);
|
||||
} else if (id == NotificationCenter.locationPermissionGranted) {
|
||||
locationDenied = false;
|
||||
if (adapter != null) {
|
||||
|
|
|
@ -404,7 +404,7 @@ public class NotificationsCustomSettingsActivity extends BaseFragment implements
|
|||
args.putInt("dialogsType", DialogsActivity.DIALOGS_TYPE_USERS_ONLY);
|
||||
}
|
||||
DialogsActivity activity = new DialogsActivity(args);
|
||||
activity.setDelegate((fragment, dids, message, param) -> {
|
||||
activity.setDelegate((fragment, dids, message, param, topicsFragment) -> {
|
||||
Bundle args2 = new Bundle();
|
||||
args2.putLong("dialog_id", dids.get(0).dialogId);
|
||||
args2.putBoolean("exception", true);
|
||||
|
|
|
@ -612,7 +612,7 @@ public class PhotoAlbumPickerActivity extends BaseFragment implements Notificati
|
|||
loading = false;
|
||||
}
|
||||
} else if (id == NotificationCenter.closeChats) {
|
||||
removeSelfFromStack();
|
||||
removeSelfFromStack(true);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1291,7 +1291,7 @@ public class PhotoPickerActivity extends BaseFragment implements NotificationCen
|
|||
@Override
|
||||
public void didReceivedNotification(int id, int account, Object... args) {
|
||||
if (id == NotificationCenter.closeChats) {
|
||||
removeSelfFromStack();
|
||||
removeSelfFromStack(true);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -67,7 +67,6 @@ import android.transition.TransitionManager;
|
|||
import android.transition.TransitionSet;
|
||||
import android.transition.TransitionValues;
|
||||
import android.util.FloatProperty;
|
||||
import android.util.Log;
|
||||
import android.util.Property;
|
||||
import android.util.Range;
|
||||
import android.util.SparseArray;
|
||||
|
@ -198,7 +197,6 @@ import org.telegram.ui.Components.CombinedDrawable;
|
|||
import org.telegram.ui.Components.Crop.CropTransform;
|
||||
import org.telegram.ui.Components.Crop.CropView;
|
||||
import org.telegram.ui.Components.CubicBezierInterpolator;
|
||||
import org.telegram.ui.Components.EmojiPacksAlert;
|
||||
import org.telegram.ui.Components.FadingTextViewLayout;
|
||||
import org.telegram.ui.Components.FilterShaders;
|
||||
import org.telegram.ui.Components.FloatSeekBarAccessibilityDelegate;
|
||||
|
@ -4369,7 +4367,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
|
|||
final ArrayList<MessageObject> fmessages = new ArrayList<>();
|
||||
fmessages.add(currentMessageObject);
|
||||
final ChatActivity parentChatActivityFinal = parentChatActivity;
|
||||
fragment.setDelegate((fragment1, dids, message, param) -> {
|
||||
fragment.setDelegate((fragment1, dids, message, param, topicsFragment) -> {
|
||||
if (dids.size() > 1 || dids.get(0).dialogId == UserConfig.getInstance(currentAccount).getClientUserId() || message != null) {
|
||||
for (int a = 0; a < dids.size(); a++) {
|
||||
long did = dids.get(a).dialogId;
|
||||
|
@ -15431,20 +15429,27 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
|
|||
progress = progress + (1f - progress) * clippingImageProgress;
|
||||
}
|
||||
float scale = 1f + (1f - Utilities.clamp(progress, 1, 0)) * ZOOM_SCALE;
|
||||
if (SharedConfig.getDevicePerformanceClass() != SharedConfig.PERFORMANCE_CLASS_HIGH || SharedConfig.getLiteMode().enabled()) {
|
||||
scale = 1f;
|
||||
}
|
||||
View view = parentFragment.getFragmentView();
|
||||
view.setPivotX(view.getWidth() / 2f);
|
||||
view.setPivotY(view.getHeight() / 2f);
|
||||
view.setScaleX(scale);
|
||||
view.setScaleY(scale);
|
||||
|
||||
if (parentAlert != null) {
|
||||
view = parentAlert.getContainer();
|
||||
if (view.getScaleX() != scale || view.getScaleY() != scale) {
|
||||
view.setPivotX(view.getWidth() / 2f);
|
||||
view.setPivotY(view.getHeight() / 2f);
|
||||
view.setScaleX(scale);
|
||||
view.setScaleY(scale);
|
||||
}
|
||||
|
||||
if (parentAlert != null) {
|
||||
view = parentAlert.getContainer();
|
||||
if (view.getScaleX() != scale || view.getScaleY() != scale) {
|
||||
view.setPivotX(view.getWidth() / 2f);
|
||||
view.setPivotY(view.getHeight() / 2f);
|
||||
view.setScaleX(scale);
|
||||
view.setScaleY(scale);
|
||||
}
|
||||
}
|
||||
|
||||
if (animationInProgress == 1 || animationInProgress == 2 || animationInProgress == 3 || pipAnimationInProgress) {
|
||||
containerView.invalidate();
|
||||
}
|
||||
|
|
|
@ -1905,7 +1905,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
|
|||
args.putBoolean("closeFragment", false);
|
||||
// args.putString("addToGroupAlertString", LocaleController.formatString("AddToTheGroupAlertText", R.string.AddToTheGroupAlertText, UserObject.getUserName(user), "%1$s"));
|
||||
DialogsActivity fragment = new DialogsActivity(args);
|
||||
fragment.setDelegate((fragment1, dids, message, param) -> {
|
||||
fragment.setDelegate((fragment1, dids, message, param, topicsFragment) -> {
|
||||
long did = dids.get(0).dialogId;
|
||||
|
||||
TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-did);
|
||||
|
@ -6041,7 +6041,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
|
|||
updateTtlIcon();
|
||||
}
|
||||
} else if (id == NotificationCenter.closeChats) {
|
||||
removeSelfFromStack();
|
||||
removeSelfFromStack(true);
|
||||
} else if (id == NotificationCenter.botInfoDidLoad) {
|
||||
TLRPC.BotInfo info = (TLRPC.BotInfo) args[0];
|
||||
if (info.user_id == userId) {
|
||||
|
@ -8023,7 +8023,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean didSelectDialogs(DialogsActivity fragment, ArrayList<MessagesStorage.TopicKey> dids, CharSequence message, boolean param) {
|
||||
public boolean didSelectDialogs(DialogsActivity fragment, ArrayList<MessagesStorage.TopicKey> dids, CharSequence message, boolean param, TopicsFragment topicsFragment) {
|
||||
long did = dids.get(0).dialogId;
|
||||
Bundle args = new Bundle();
|
||||
args.putBoolean("scrollToTopOnResume", true);
|
||||
|
|
|
@ -1265,7 +1265,7 @@ public class QrActivity extends BaseFragment {
|
|||
super.onDetachedFromWindow();
|
||||
if (loadingMatrix != null) {
|
||||
loadingMatrix.stop();
|
||||
loadingMatrix.recycle();
|
||||
loadingMatrix.recycle(false);
|
||||
loadingMatrix = null;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -179,7 +179,7 @@ public class SaveToGallerySettingsActivity extends BaseFragment {
|
|||
}
|
||||
args.putBoolean("allowGlobalSearch", false);
|
||||
DialogsActivity activity = new DialogsActivity(args);
|
||||
activity.setDelegate((fragment, dids, message, param) -> {
|
||||
activity.setDelegate((fragment, dids, message, param, topicsFragment) -> {
|
||||
Bundle args2 = new Bundle();
|
||||
args2.putLong("dialog_id", dids.get(0).dialogId);
|
||||
args2.putInt("type", type);
|
||||
|
|
|
@ -1808,7 +1808,7 @@ public class SelectAnimatedEmojiDialog extends FrameLayout implements Notificati
|
|||
}
|
||||
imageView.setDrawable(drawable);
|
||||
|
||||
if (!UserConfig.getInstance(currentAccount).isPremium()) {
|
||||
if (!UserConfig.getInstance(currentAccount).isPremium() && type != TYPE_AVATAR_CONSTRUCTOR && type != TYPE_TOPIC_ICON) {
|
||||
if (imageView.premiumLockIconView == null) {
|
||||
imageView.premiumLockIconView = new PremiumLockIconView(getContext(), PremiumLockIconView.TYPE_STICKERS_PREMIUM_LOCKED);
|
||||
imageView.addView(imageView.premiumLockIconView, LayoutHelper.createFrame(12, 12, Gravity.RIGHT | Gravity.BOTTOM));
|
||||
|
@ -2122,7 +2122,7 @@ public class SelectAnimatedEmojiDialog extends FrameLayout implements Notificati
|
|||
}
|
||||
imageView.setDrawable(drawable);
|
||||
|
||||
if (!UserConfig.getInstance(currentAccount).isPremium()) {
|
||||
if (!UserConfig.getInstance(currentAccount).isPremium() && type != TYPE_AVATAR_CONSTRUCTOR && type != TYPE_TOPIC_ICON) {
|
||||
if (imageView.premiumLockIconView == null) {
|
||||
imageView.premiumLockIconView = new PremiumLockIconView(getContext(), PremiumLockIconView.TYPE_STICKERS_PREMIUM_LOCKED);
|
||||
imageView.addView(imageView.premiumLockIconView, LayoutHelper.createFrame(12, 12, Gravity.RIGHT | Gravity.BOTTOM));
|
||||
|
|
|
@ -827,9 +827,8 @@ public class TopicsFragment extends BaseFragment implements NotificationCenter.N
|
|||
onTopicSelectedListener.onTopicSelected(topic);
|
||||
}
|
||||
if (dialogsActivity != null) {
|
||||
dialogsActivity.didSelectResult(-chatId, topic.id, true, false);
|
||||
dialogsActivity.didSelectResult(-chatId, topic.id, true, false, this);
|
||||
}
|
||||
removeFragmentOnTransitionEnd = true;
|
||||
return;
|
||||
}
|
||||
if (selectedTopics.size() > 0) {
|
||||
|
@ -1394,6 +1393,11 @@ public class TopicsFragment extends BaseFragment implements NotificationCenter.N
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean allowFinishFragmentInsteadOfRemoveFromStack() {
|
||||
return false;
|
||||
}
|
||||
|
||||
private void updateTopView() {
|
||||
float translation = 0;
|
||||
if (fragmentContextView != null) {
|
||||
|
@ -2634,7 +2638,7 @@ public class TopicsFragment extends BaseFragment implements NotificationCenter.N
|
|||
} else if (id == NotificationCenter.chatSwithcedToForum) {
|
||||
|
||||
} else if (id == NotificationCenter.closeChats) {
|
||||
removeSelfFromStack();
|
||||
removeSelfFromStack(true);
|
||||
}
|
||||
if (id == NotificationCenter.openedChatChanged) {
|
||||
if (getParentActivity() == null || !(inPreviewMode && AndroidUtilities.isTablet())) {
|
||||
|
|
|
@ -234,7 +234,7 @@ public class TwoStepVerificationSetupActivity extends BaseFragment {
|
|||
}
|
||||
if (animationDrawables != null) {
|
||||
for (int a = 0; a < animationDrawables.length; a++) {
|
||||
animationDrawables[a].recycle();
|
||||
animationDrawables[a].recycle(false);
|
||||
}
|
||||
animationDrawables = null;
|
||||
}
|
||||
|
|
|
@ -566,7 +566,7 @@ public class WallpapersListActivity extends BaseFragment implements Notification
|
|||
args.putBoolean("onlySelect", true);
|
||||
args.putInt("dialogsType", DialogsActivity.DIALOGS_TYPE_FORWARD);
|
||||
DialogsActivity fragment = new DialogsActivity(args);
|
||||
fragment.setDelegate((fragment1, dids, message, param) -> {
|
||||
fragment.setDelegate((fragment1, dids, message, param, topicsFragment) -> {
|
||||
StringBuilder fmessage = new StringBuilder();
|
||||
for (int b = 0; b < selectedWallPapers.size(); b++) {
|
||||
Object object = selectedWallPapers.valueAt(b);
|
||||
|
|
|
@ -6239,6 +6239,7 @@
|
|||
<string name="TranslateToButtonOther">Translate to %s</string>
|
||||
<string name="ShowOriginalButton">Show Original</string>
|
||||
<string name="AddedToDoNotTranslate">**%s** is added to the Do Not Translate list.</string>
|
||||
<string name="AddedToDoNotTranslateOther">**%s** is added to the Do Not Translate list.</string>
|
||||
<string name="TranslationBarHiddenForChannel">Translation bar is now hidden for this channel.</string>
|
||||
<string name="TranslationBarHiddenForGroup">Translation bar is now hidden for this group.</string>
|
||||
<string name="TranslationBarHiddenForChat">Translation bar is now hidden for this chat.</string>
|
||||
|
|
|
@ -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_NAME=9.4.1
|
||||
APP_VERSION_CODE=3102
|
||||
APP_VERSION_NAME=9.4.2
|
||||
APP_VERSION_CODE=3106
|
||||
APP_PACKAGE=org.telegram.messenger
|
||||
RELEASE_KEY_PASSWORD=android
|
||||
RELEASE_KEY_ALIAS=androidkey
|
||||
|
|
Loading…
Reference in a new issue