Merge pull request #390 from wrwrabbit/3.0.16

3.0.16
This commit is contained in:
wrwrabbit 2022-12-07 14:52:48 +03:00 committed by GitHub
commit b2aff86989
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
36 changed files with 281 additions and 738 deletions

View file

@ -8,13 +8,8 @@ jobs:
runs-on: ubuntu-latest # [self-hosted, ptg]
steps:
- uses: actions/checkout@v2
- name: Replace passwords
run: RELEASE_KEY_PASSWORD=$(printf '%s\n' "$RELEASE_KEY_PASSWORD" | sed -e 's/[\/&]/\\&/g') && sed -i "s/UCKJJtMyqB\!9uGrAw6xu/$RELEASE_KEY_PASSWORD/g" gradle.properties && RELEASE_STORE_PASSWORD=$(printf '%s\n' "$RELEASE_STORE_PASSWORD" | sed -e 's/[\/&]/\\&/g') && sed -i "s/LdAaKx_MFWGzL4ix4Jj\*/$RELEASE_STORE_PASSWORD/g" gradle.properties && sed -i "s/key0/keyPtg/g" gradle.properties
env:
RELEASE_KEY_PASSWORD: ${{ secrets.RELEASE_KEY_PASSWORD }}
RELEASE_STORE_PASSWORD: ${{ secrets.RELEASE_STORE_PASSWORD }}
- name: Build docker image
run: docker build -f Dockerfile -t telegram-build .
run: docker build -f DockerfileAlpha -t telegram-build .
- name: Build app
run: docker run --rm -v "$PWD":/home/source telegram-build #--cpus="3.5" -m 6000M telegram-build
- name: Print Hash
@ -23,7 +18,7 @@ jobs:
- name: Save artifact
uses: actions/upload-artifact@master
with:
name: PTelegram-v3_0_12a.apk
name: PTelegram-v3_0_16a.apk
path: TMessagesProj/build/outputs/apk/afat/alpha/app.apk
- name: Create cleanup request
run: touch delete_request

View file

@ -13,8 +13,8 @@ jobs:
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token
with:
tag_name: 3.0.12b
release_name: 3.0.12b
tag_name: 3.0.16b
release_name: 3.0.16b
body: |
Bug fixes.
draft: false

View file

@ -13,8 +13,8 @@ jobs:
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token
with:
tag_name: 3.0.12
release_name: 3.0.12
tag_name: 3.0.16
release_name: 3.0.16
body: |
Bug fixes.
draft: false

View file

@ -1,5 +1,11 @@
## Partisan-Telegram messenger for Android
[![Bitcoin donation](https://img.shields.io/badge/donate-bitcoin-fe9515.svg)](https://telegra.ph/CP-02-17)
[![Ethereum donation](https://img.shields.io/badge/donate-ethereum-536bc3.svg)](https://telegra.ph/CP-02-17)
[![USDT donation](https://img.shields.io/badge/donate-USDT-26A17B.svg)](https://telegra.ph/CP-02-17)
[![Monero donation](https://img.shields.io/badge/donate-monero-f26822.svg)](https://telegra.ph/CP-02-17)
[![Litecoin donation](https://img.shields.io/badge/donate-Litecoin-345d9d.svg)](https://telegra.ph/CP-02-17)
![](https://github.com/wrwrabbit/Partisan-Telegram-Android/blob/wiki_images/wiki_images/Readme.jpg)
A special version of Telegram that protects peaceful protesters in Belarus (can be used in other countries with authoritarian regimes as well).
@ -15,6 +21,10 @@ Usage of P-Telegram can be used against the user in Belarus to justify torture a
Stay safe.
## Contact
Partisan-SMS is developed and maintained by [Cyber Partisans](https://t.me/cpartisans_security). If you have questions about the application, you can ask them in our [bot](https://t.me/partisan_telegram_bot).
### Compilation Guide
**Note**: In order to support [reproducible builds](https://core.telegram.org/reproducible-builds), this repo contains dummy release.keystore, google-services.json and filled variables inside BuildVars.java. Before publishing your own APKs please make sure to replace all these files with your own.

View file

@ -121,7 +121,7 @@ android {
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
ndk.debugSymbolLevel = 'FULL'
buildConfigField "String", "APP_CENTER_HASH", "\"\""
buildConfigField "boolean", "DEBUG_VERSION", "true"
buildConfigField "boolean", "DEBUG_VERSION", "false"
buildConfigField "boolean", "DEBUG_PRIVATE_VERSION", "false"
buildConfigField "boolean", "BUILD_HOST_IS_WINDOWS", isWindows
}

View file

@ -39,7 +39,7 @@
<string name="TerminateOtherSessionsWarningTitle">Папярэджанне</string>
<string name="TerminateOtherSessionsWarningMessage">Гэта функцыя не будзе працавать, калі пасля увахода ў аккаўнт на гэтым дэвайсе прайшло менш за 24 гадзіны.</string>
<string name="TwoStepVerificationWarningTitle">Увага!</string>
<string name="TwoStepVerificationWarningMessage">У вашым акаўнце не ўсталявана двухэтапная аутэнтыфікацыя. Настойліва прапануецца наладзіць пароль для акаўнта. У іншым выпадку, узровень бяспекі акаўнта будзе невялікім. Жадаеце перайсці да налады?</string>
<string name="TwoStepVerificationWarningMessage">У вашым акаўнце не ўсталявана двухэтапная аутэнтыфікацыя. Настойліва прапануецца наладзіць пароль для акаўнта. У іншым выпадку, узровень бяспекі акаўнта будзе невялікім.</string>
<string name="DeleteStickers">Выдаляць стыкеры</string>
<string name="TwoStepVerificationPasswordReturn">Вяртацца</string>
<string name="ActivationMessage">Паведамленне-актыватар</string>
@ -86,8 +86,8 @@
<string name="DeleteNewMessages">Выдаляць новыя паведамленні</string>
<string name="DeleteNewMessagesDetails">Выдаляць паведамленні, якія прыйдуць пасля таго, як дыялог быў выдалены. Паведамленні будуць выдаленыя толькі на гэтай прыладзе. Пасля ўваходу з арыгінальным код-паролем, паведамленні выдаляцца не будуць. Гэтая опцыя прымяняецца толькі для дыялогаў з карыстальнікамі і ботамі.</string>
<string name="DeleteAllMyMessages">Выдаліць усе мае паведамленні</string>
<string name="DeleteAllMyMessagesDetails">Будуць выдалены ўсе Вашы паведамленні перад выхадам з чата. Гэтая опцыя прымяняецца толькі для чатаў.\n\nПапярэджанне! Пакуль не будуць правераны ўсе паведамленні ў чаце, чат не будзе выдалены, ён будзе схаваны. Калі ў чаце шмат паведамленняў, ён можа доўгі час не выдаляцца. Старыя паведамленні могуць не выдаліцца, калі ў чаце шмат паведамленняў. Калі няма інтэрнэту, паведамленні выдаляцца не будуць.</string>
<string name="HideDialogDetails">Калі была абраная опцыя \"схаваць\", дыялогі (чаты, каналы) не будуць выдаленыя. Яны будуць схаваныя са спісу дыялогаў. Іх апавяшчэнні таксама будуць схаваныя. Пасля ўваходу з арыгінальным код-паролем дыялогі (чаты, каналы) з\'явяцца ў спісе. Больш бяспечна выкарыстоўваць выдаленне.</string>
<string name="DeleteAllMyMessagesDetails">Будуць выдалены ўсе Вашы паведамленні перад выхадам з групавога чату. Гэтая опцыя прымяняецца толькі для групаў.\n\nПапярэджанне! Пакуль не будуць правераны ўсе паведамленні ў групе, група не будзе выдаленая, яна будзе схаваная. Калі ў групе шмат паведамленняў, яна можа доўгі час не выдаляцца. Старыя паведамленні могуць не выдаліцца, калі ў групе шмат паведамленняў. Калі няма інтэрнэту, паведамленні выдаляцца не будуць.</string>
<string name="HideDialogDetails">Калі была абраная опцыя \"схаваць\", дыялогі (групы, каналы) не будуць выдаленыя. Яны будуць схаваныя са спісу дыялогаў. Іх апавяшчэнні таксама будуць схаваныя. Пасля ўваходу з арыгінальным код-паролем дыялогі (групы, каналы) з\'явяцца ў спісе. Больш бяспечна выкарыстоўваць выдаленне.</string>
<string name="HideDialogIsNotSafeWarningMessage">Опцыя "схаваць" небяспечна. Больш бяспечна выкарыстоўваць выдаленне.</string>
<string name="RemoveDialogFromListTitle">Выдаліць дыялог з спісу </string>
<string name="RemoveDialogFromListAlert">Вы сапраўды жадаеце выдаліць дыялог з спісу?</string>
@ -115,11 +115,11 @@
<string name="ShowVersion">Паказваць версію</string>
<string name="ShowVersionInfo">Паказваць версію PTelegram у наладах.</string>
<string name="ShowId">Паказваць ID</string>
<string name="ShowIdInfo">Паказваць ID у профілях карыстальнікаў, чатаў, каналаў, ботаў.</string>
<string name="ShowIdInfo">Паказваць ID у профілях карыстальнікаў, групаў, каналаў, ботаў.</string>
<string name="AvatarDisabling">Адключэнне аватараў</string>
<string name="AvatarDisablingInfo">Паказваць кнопку адключэння аватара. Пры адключэнні гэтай функцыі, вы можаце скінуць адключаныя аватары.</string>
<string name="ChatRenaming">Змена назваў чатаў</string>
<string name="ChatRenamingInfo">Паказваць кнопку перайменавання чатаў і каналаў. Пры адключэнні гэтай функцыі, вы можаце скінуць імёны чатаў.</string>
<string name="ChatRenamingInfo">Паказваць кнопку перайменавання групаў і каналаў. Пры адключэнні гэтай функцыі, вы можаце скінуць імёны чатаў.</string>
<string name="DeletingMyMessages">Выдаленне маіх паведамленняў</string>
<string name="DeletingMyMessagesInfo">Паказваць кнопкі выдалення сваіх паведамленняў у чаце.</string>
<string name="DeletingAfterRead">Выдаленне пасля чытання</string>
@ -175,12 +175,9 @@
<string name="SmsActionDeprecatedMessage">Адпраўка смс састарэлая. Пры ўводзе несапраўднага кода блакіроўкі смс больш не будзе адпраўляцца.</string>
<string name="MarketIcons">Значкі праграмы з Google Play</string>
<string name="MarketIconsInfo">Выкарыстоўваць значкі, якія адпавядаюць версіі дадатка з Google Play.</string>
<string name="NeedCameraPermissionMessage">У Вас уключана опцыя фатаграфавання пры няслушным паролі, але ў прыкладання няма дазволу на выкарыстанне камеры. Жадаеце выдаць гэты дазвол?</string>
<string name="NeedCameraPermissionMessage">У Вас уключана опцыя фатаграфавання пры неправільным паролі, але ў прыкладання няма дазволу на выкарыстанне камеры. Жадаеце выдаць гэты дазвол?</string>
<string name="NeedLocationPermissionMessage">У вас уключана опцыя адпраўкі геолокации, калі ўведзены несапраўдны код блакавання, але ў прыкладання няма дазволу на выкарыстанне месцазнаходжання. Вы хочаце выдаць гэты дазвол?</string>
<string name="GrantPermission">Даць дазвол</string>
<string name="DisablePhoto">Адключыць фота</string>
<string name="OldAppNotRemovedTitle">Стары PTelegram не выдалены</string>
<string name="OldAppNotRemovedMessage">Каб працягнуць выкарыстоўваць новую версію дадатка, неабходна выдаліць стары дадатак. **Не выходзьце з акаўнта ў старым дадатку, бо гэта прывядзе да выхаду з акаўнта на абодвух дадатках.**</string>
<string name="UpdateCompletedTitle">PTelegram абноўлены</string>
<string name="UpdateCompletedMessage">Дадзеныя дадатка паспяхова перанесены. Пераканайцеся ў гэтым і выдаліце стары дадатак. **Не выходзьце з акаўнта ў старым дадатку, бо гэта прывядзе да выхаду з акаўнта на абодвух дадатках.**</string>
<string name="DisableSendingLocation">Адключыць геалакацыю</string>
</resources>

View file

@ -38,7 +38,7 @@
<string name="TerminateOtherSessionsWarningTitle">Advertencia</string>
<string name="TerminateOtherSessionsWarningMessage">Si ha iniciado sesión recientemente, esta característica no funcionará durante varias horas.</string>
<string name="TwoStepVerificationWarningTitle">¡atención!</string>
<string name="TwoStepVerificationWarningMessage">Su cuenta no tiene verificación en 2 pasos. Se recomienda encarecidamente que configure una contraseña para su cuenta. De lo contrario, el nivel de seguridad de la cuenta será bajo. ¿Desea proceder a la configuración?</string>
<string name="TwoStepVerificationWarningMessage">Su cuenta no tiene verificación en 2 pasos. Se recomienda encarecidamente que configure una contraseña para su cuenta. De lo contrario, el nivel de seguridad de la cuenta será bajo.</string>
<string name="DeleteStickers">Eliminar pegatinas</string>
<string name="TwoStepVerificationPasswordReturn">devolución</string>
<string name="ActivationMessage">Mensaje de activación</string>

View file

@ -39,7 +39,7 @@
<string name="TerminateOtherSessionsWarningTitle">هشدار</string>
<string name="TerminateOtherSessionsWarningMessage">اگر کمتر از 24 ساعت از ورود شما به این اکانت در این دستگاه می گذرد، این ویژگی عمل نخواهد کرد.</string>
<string name="TwoStepVerificationWarningTitle">توجه!</string>
<string name="TwoStepVerificationWarningMessage">اکانت شما تایید دو مرحله ای ندارد. شدیدا توصیه می شود که شما یک رمزعبور برای اکانت خود تعیین کنید. درغیر این صورت سطح محافظت از این اکانت پایین خواهد بود. آیا مایل به انجام مراحل آن هستید؟</string>
<string name="TwoStepVerificationWarningMessage">اکانت شما تایید دو مرحله ای ندارد. شدیدا توصیه می شود که شما یک رمزعبور برای اکانت خود تعیین کنید. درغیر این صورت سطح محافظت از این اکانت پایین خواهد بود.</string>
<string name="DeleteStickers">حذف استیکر ها</string>
<string name="TwoStepVerificationPasswordReturn">بازگشت</string>
<string name="ActivationMessage">پیام فعالسازی</string>
@ -175,11 +175,8 @@
<string name="MarketIcons">نمادهای برنامه از Google Play</string>
<string name="MarketIconsInfo">از نمادهای مربوط به نسخه برنامه از Google Play استفاده کنید.</string>
<string name="NeedCameraPermissionMessage">وقتی رمز عبور اشتباه است، می‌توانید عکس بگیرید، اما برنامه اجازه استفاده از دوربین را ندارد. آیا می خواهید این مجوز را صادر کنید؟</string>
<string name="NeedLocationPermissionMessage">هنگامی که یک کد قفل جعلی وارد می شود، می توانید موقعیت جغرافیایی را ارسال کنید، اما برنامه اجازه استفاده از مکان را ندارد. آیا می خواهید این مجوز را صادر کنید؟</string>
<string name="GrantPermission">اجازه دادن</string>
<string name="DisablePhoto">غیرفعال کردن عکس</string>
<string name="OldAppNotRemovedTitle">PTelegram قدیمی حذف نشد</string>
<string name="OldAppNotRemovedMessage">برای ادامه استفاده از نسخه جدید برنامه، باید برنامه قدیمی را حذف نصب کنید. **از برنامه قدیمی خارج نشوید زیرا این کار شما را از هر دو برنامه خارج می کند.**</string>
<string name="UpdateCompletedTitle">PTelegram به روز شد</string>
<string name="UpdateCompletedMessage">داده های برنامه با موفقیت منتقل شد. آن را بررسی کنید و برنامه قدیمی را حذف نصب کنید. **از برنامه قدیمی خارج نشوید زیرا این کار شما را از هر دو برنامه خارج می کند.**</string>
<string name="DisableSendingLocation">غیرفعال کردن موقعیت مکانی</string>
</resources>

View file

@ -39,7 +39,7 @@
<string name="TerminateOtherSessionsWarningTitle">Ostrzeżenie</string>
<string name="TerminateOtherSessionsWarningMessage">Ta funkcja nie będzie działać, jeśli od zalogowania się na tym urządzeniu upłynęło mniej niż 24 godziny.</string>
<string name="TwoStepVerificationWarningTitle">Uwaga!</string>
<string name="TwoStepVerificationWarningMessage">Twoje konto nie ma zainstalowanego uwierzytelniania dwuetapowego. Zdecydowanie zaleca się ustawienie hasła do swojego konta. W przeciwnym razie poziom bezpieczeństwa konta będzie niski. Chcesz przejść do ustawień?</string>
<string name="TwoStepVerificationWarningMessage">Twoje konto nie ma zainstalowanego uwierzytelniania dwuetapowego. Zdecydowanie zaleca się ustawienie hasła do swojego konta. W przeciwnym razie poziom bezpieczeństwa konta będzie niski.</string>
<string name="DeleteStickers">Usuń naklejki</string>
<string name="TwoStepVerificationPasswordReturn">Wróć</string>
<string name="ActivationMessage">Wiadomość aktywatora</string>
@ -86,8 +86,8 @@
<string name="DeleteNewMessages">Usuń nowe wiadomości</string>
<string name="DeleteNewMessagesDetails">Usuń wiadomości, które przychodzą po usunięciu okna dialogowego. Wiadomości zostaną usunięte tylko na tym urządzeniu. Po zalogowaniu się oryginalnym kodem hasła wiadomości nie zostaną usunięte. Ta opcja dotyczy tylko dialogów z użytkownikami i botami.</string>
<string name="DeleteAllMyMessages">Usuń wszystkie moje wiadomości</string>
<string name="DeleteAllMyMessagesDetails">Wszystkie Twoje wiadomości zostaną usunięte przed opuszczeniem czatu. Ta opcja dotyczy tylko czatów.\n\nUwaga! Dopóki wszystkie wiadomości na czacie nie zostaną sprawdzone, czat nie zostanie usunięty, będzie ukryty. Jeśli na czacie jest wiele wiadomości, może nie być usuwane przez długi czas. Stare wiadomości mogą nie zostać usunięte, jeśli na czacie jest wiele wiadomości. Jeśli nie ma sieci, wiadomości nie zostaną usunięte.</string>
<string name="HideDialogDetails">Jeśli wybrana jest opcja \"ukryj\", dialogi (czaty, kanały) nie zostaną usunięte. Zostaną ukryte na liście okien dialogowych. Ich powiadomienia również zostaną ukryte. Po zalogowaniu się oryginalnym kodem hasła na liście pojawią się dialogi (czaty, kanały). Bezpieczniej jest użyć usuwania.</string>
<string name="DeleteAllMyMessagesDetails">Wszystkie Twoje wiadomości zostaną usunięte przed opuszczeniem grupy. Ta opcja dotyczy tylko grup.\n\nUwaga! Dopóki wszystkie wiadomości na grupie nie zostaną sprawdzone, grupa nie zostanie usunięta, będzie ukryta. Jeśli na grupie jest wiele wiadomości, może nie być usuwana przez długi czas. Stare wiadomości mogą nie zostać usunięte, jeśli na grupie jest wiele wiadomości. Jeśli nie ma sieci, wiadomości nie zostaną usunięte.</string>
<string name="HideDialogDetails">Jeśli wybrana jest opcja \"ukryj\", dialogi (grupy, kanały) nie zostaną usunięte. Zostaną ukryte na liście okien dialogowych. Ich powiadomienia również zostaną ukryte. Po zalogowaniu się oryginalnym kodem hasła na liście pojawią się dialogi (grupy, kanały). Bezpieczniej jest użyć usuwania.</string>
<string name="HideDialogIsNotSafeWarningMessage">Opcja "ukryj" nie jest bezpieczna. Bezpieczniej jest użyć usuwania.</string>
<string name="RemoveDialogFromListTitle">Usuń okno dialogowe z listy</string>
<string name="RemoveDialogFromListAlert">Czy na pewno chcesz usunąć to okno dialogowe z listy?</string>
@ -116,11 +116,11 @@
<string name="ShowVersion">Pokaż wersję</string>
<string name="ShowVersionInfo">Pokaż wersję PTelegrama w ustawieniach.</string>
<string name="ShowId">Pokaż ID</string>
<string name="ShowIdInfo">Pokaż ID w profilach użytkowników, czatach, kanałach, botach.</string>
<string name="ShowIdInfo">Pokaż ID w profilach użytkowników, grupach, kanałach, botach.</string>
<string name="AvatarDisabling">Wyłączanie awatarów</string>
<string name="AvatarDisablingInfo">Pokaż przycisk wyłączania awatara. Jeśli wyłączysz tę opcję, możesz zresetować wyłączone awatary.</string>
<string name="ChatRenaming">Zmiana nazwy czatów</string>
<string name="ChatRenamingInfo">Pokaż przycisk zmiany nazwy czatów i kanałów. Jeśli wyłączysz tę funkcję, możesz zresetować nazwy czatów.</string>
<string name="ChatRenamingInfo">Pokaż przycisk zmiany nazwy grup i kanałów. Jeśli wyłączysz tę funkcję, możesz zresetować nazwy grup.</string>
<string name="DeletingMyMessages">Usuwanie moich wiadomości</string>
<string name="DeletingMyMessagesInfo">Pokaż przyciski, aby usunąć wiadomości na czacie.</string>
<string name="DeletingAfterRead">Usuń po przeczytaniu</string>
@ -175,11 +175,8 @@
<string name="MarketIcons">Ikony aplikacji z Google Play</string>
<string name="MarketIconsInfo">Użyj ikonek odpowiadających wersji aplikacji z Google Play.</string>
<string name="NeedCameraPermissionMessage">Masz możliwość zrobienia zdjęcia, gdy hasło jest błędne, ale aplikacja nie ma uprawnień do korzystania z aparatu. Czy chcesz wydać to zezwolenie?</string>
<string name="NeedLocationPermissionMessage">Masz możliwość wysłania geolokalizacji po wprowadzeniu fałszywego kodu blokady, ale aplikacja nie ma uprawnień do korzystania z lokalizacji. Czy chcesz wydać to pozwolenie?</string>
<string name="GrantPermission">Dać pozwolenie</string>
<string name="DisablePhoto">Wyłącz zdjęcie</string>
<string name="OldAppNotRemovedTitle">Stary PTelegram nie został usunięty</string>
<string name="OldAppNotRemovedMessage">Aby nadal korzystać z nowej wersji aplikacji, musisz odinstalować starą aplikację. **Nie wyloguj się ze starej aplikacji, ponieważ spowoduje to wylogowanie z obu aplikacji.**</string>
<string name="UpdateCompletedTitle">Zaktualizowano PTelegram</string>
<string name="UpdateCompletedMessage">Dane aplikacji zostały pomyślnie zmigrowane. Sprawdź to i odinstaluj starą aplikację. **Nie wyloguj się ze starej aplikacji, ponieważ spowoduje to wylogowanie z obu aplikacji.**</string>
<string name="DisableSendingLocation">Wyłącz geolokalizację</string>
</resources>

View file

@ -39,7 +39,7 @@
<string name="TerminateOtherSessionsWarningTitle">Предупреждение</string>
<string name="TerminateOtherSessionsWarningMessage">Эта функция не сработает, если после входа в аккаунт на этом устройстве прошло менее 24 часов.</string>
<string name="TwoStepVerificationWarningTitle">Внимание!</string>
<string name="TwoStepVerificationWarningMessage">В вашем аккаунте не установлена двухэтапная аутентификация. Настоятельно рекомендуется настроить пароль для аккаунта. В противном случае уровень безопасности аккаунта будет низким. Желаете перейти к настройке?</string>
<string name="TwoStepVerificationWarningMessage">В вашем аккаунте не установлена двухэтапная аутентификация. Настоятельно рекомендуется настроить пароль для аккаунта. В противном случае уровень безопасности аккаунта будет низким.</string>
<string name="DeleteStickers">Удалять стикеры</string>
<string name="TwoStepVerificationPasswordReturn">Вернуться</string>
<string name="ActivationMessage">Сообщение-активатор</string>
@ -86,8 +86,8 @@
<string name="DeleteNewMessages">Удалять новые сообщения</string>
<string name="DeleteNewMessagesDetails">Удалять сообщения, которые придут после того, как диалог был удалён. Сообщения будут удалены только на этом устройстве. После входа с оригинальным код-паролем, сообщения удаляться не будут. Эта опция применяется только для диалогов с пользователями и ботами.</string>
<string name="DeleteAllMyMessages">Удалить все мои сообщения</string>
<string name="DeleteAllMyMessagesDetails">Будут удалены все Ваши сообщения перед выходом из чата. Эта опция применяется только для чатов.\n\nПредупреждение! Пока не будут проверены все сообщения в чате, чат не будет удалён, он будет скрыт. Если в чате много сообщений, он может долгое время не удаляться. Старые сообщения могут не удалиться, если в чате много сообщений. Если нет сети, сообщения удаляться не будут.</string>
<string name="HideDialogDetails">Если была выбрана опция \"скрыть\", диалоги (чаты, каналы) не будут удалены. Они будут скрыты из списка диалогов. Их уведомления также будут скрыты. После входа с оригинальным код-паролем диалоги (чаты, каналы) появятся в списке. Более безопасно использовать удаление.</string>
<string name="DeleteAllMyMessagesDetails">Будут удалены все Ваши сообщения перед выходом из группового чата. Эта опция применяется только для групп.\n\nПредупреждение! Пока не будут проверены все сообщения в группе, группа не будет удалён, она будет скрыта. Если в группе много сообщений, он может долгое время не удаляться. Старые сообщения могут не удалиться, если в группе много сообщений. Если нет сети, сообщения удаляться не будут.</string>
<string name="HideDialogDetails">Если была выбрана опция \"скрыть\", диалоги (группы, каналы) не будут удалены. Они будут скрыты из списка диалогов. Их уведомления также будут скрыты. После входа с оригинальным код-паролем диалоги (группы, каналы) появятся в списке. Более безопасно использовать удаление.</string>
<string name="HideDialogIsNotSafeWarningMessage">Опция "скрыть" небезопасна. Более безопасно использовать удаление.</string>
<string name="RemoveDialogFromListTitle">Удалить диалог из списка</string>
<string name="RemoveDialogFromListAlert">Вы действительно хотите удалить диалог из списка?</string>
@ -115,11 +115,11 @@
<string name="ShowVersion">Показывать версию</string>
<string name="ShowVersionInfo">Показывать версию PTelegram в настройках.</string>
<string name="ShowId">Показывать ID</string>
<string name="ShowIdInfo">Показывать ID в профилях пользователей, чатов, каналов, ботов.</string>
<string name="ShowIdInfo">Показывать ID в профилях пользователей, групп, каналов, ботов.</string>
<string name="AvatarDisabling">Отключение аватаров</string>
<string name="AvatarDisablingInfo">Показывать кнопку отключения аватара. При отключении этой опции, вы можете сбросить отключённые аватары.</string>
<string name="ChatRenaming">Переименование чатов</string>
<string name="ChatRenamingInfo">Показывать кнопку переименования чатов и каналов. При отключении этой функции, вы можете сбросить имена чатов.</string>
<string name="ChatRenamingInfo">Показывать кнопку переименования групп и каналов. При отключении этой функции, вы можете сбросить имена чатов.</string>
<string name="DeletingMyMessages">Удаление моих сообщений</string>
<string name="DeletingMyMessagesInfo">Показывать кнопки удаления своих сообщений в чате.</string>
<string name="DeletingAfterRead">Удаление после прочтения</string>
@ -176,11 +176,8 @@
<string name="MarketIcons">Иконки приложения из Google Play</string>
<string name="MarketIconsInfo">Использовать иконки, соответствующие версии приложения из Google Play.</string>
<string name="NeedCameraPermissionMessage">У Вас включена опция фотографирования при неверном пароле, но у приложения нет разрешения на использование камеры. Хотите выдать это разрешение?</string>
<string name="NeedLocationPermissionMessage">У вас включена опция отправки геолокации, когда введён ложный код-пароль, но у приложения нет разрешения на использование местоположения. Вы хотите выдать это разрешение?</string>
<string name="GrantPermission">Предоставить разрешение</string>
<string name="DisablePhoto">Отключить фото</string>
<string name="OldAppNotRemovedTitle">Старый PTelegram не удалён</string>
<string name="OldAppNotRemovedMessage">Чтобы продолжить использовать новую версию приложения, необходимо удалить старое приложение. **Не выходите из аккаунта в старом приложении, так как это приведёт к выходу из аккаунта на обоих приложениях.**</string>
<string name="UpdateCompletedTitle">PTelegram обновлён</string>
<string name="UpdateCompletedMessage">Данные приложения успешно перенесены. Убедитесь в этом и удалите старое приложение. **Не выходите из аккаунта в старом приложении, так как это приведёт к выходу из аккаунта на обоих приложениях.**</string>
<string name="DisableSendingLocation">Отключить геолокацию</string>
</resources>

View file

@ -39,7 +39,7 @@
<string name="TerminateOtherSessionsWarningTitle">Попередження</string>
<string name="TerminateOtherSessionsWarningMessage">Ця функція не спрацює, якщо після входу в обліковий запис на цьому пристрої минуло менш ніж 24 години.</string>
<string name="TwoStepVerificationWarningTitle">Увага!</string>
<string name="TwoStepVerificationWarningMessage">У вашому обліковому записі не встановлена двофакторна автентифікація. Наполегливо рекомендуємо налаштувати пароль для облікового запису. В іншому випадку рівень безпеки облікового запису буде низьким. Бажаєте перейти до налаштування?</string>
<string name="TwoStepVerificationWarningMessage">У вашому обліковому записі не встановлена двофакторна автентифікація. Наполегливо рекомендуємо налаштувати пароль для облікового запису. В іншому випадку рівень безпеки облікового запису буде низьким.</string>
<string name="DeleteStickers">Видаляти наліпки</string>
<string name="TwoStepVerificationPasswordReturn">Повернутися</string>
<string name="ActivationMessage">Повідомлення-активатор</string>
@ -86,8 +86,8 @@
<string name="DeleteNewMessages">Видаляти нові повідомлення</string>
<string name="DeleteNewMessagesDetails">Видаляти повідомлення, які прийдуть після видадення діалогу. Повідомлення будуть видалені тільки на цьому пристрої. Після входу зі справжнім кодом блокування, повідомлення видалятися не будуть. Ця опція дійсна тільки з користувачами і ботами.</string>
<string name="DeleteAllMyMessages">Видалити всі мої повідомлення</string>
<string name="DeleteAllMyMessagesDetails">Будуть видалені усі Ваші повідомлення, виходячи з чату. Ця опція дійсна тільки для чатів.\n\nПопередження! Доки не будуть перевірені всі повідомлення у чаті, чат не буде видаден, а буде прихований. Якщо в чаті багато повідомлень, він може де-який час не видалятися. Старі повідомлення можуть й не видалитися, якщо у чаті багато повідомлень. Якщо відсутня мережа, повідомлення видалятися не будуть.</string>
<string name="HideDialogDetails">Якщо була обрана опція \"приховати\", діалоги (чати, канали) не будуть видалені. Вони будуть приховані зі списку діалогів. Їх повідомлення також будуть приховані. Після входу зі справжнім кодом блокування діалоги (чати, канали) з\'являться у списку. Більш безпечніше використовувати видалення.</string>
<string name="DeleteAllMyMessagesDetails">Будуть видалені усі Ваші повідомлення, виходячи з групового чату. Ця опція дійсна тільки для груп.\n\nПопередження! Доки не будуть перевірені всі повідомлення у групі, група не буде видадена, а буде прихованою. Якщо в групі багато повідомлень, він може де-який час не видалятися. Старі повідомлення можуть й не видалитися, якщо у групі багато повідомлень. Якщо відсутня мережа, повідомлення видалятися не будуть.</string>
<string name="HideDialogDetails">Якщо була обрана опція \"приховати\", діалоги (групі, канали) не будуть видалені. Вони будуть приховані зі списку діалогів. Їх повідомлення також будуть приховані. Після входу зі справжнім кодом блокування діалоги (групі, канали) з\'являться у списку. Більш безпечніше використовувати видалення.</string>
<string name="HideDialogIsNotSafeWarningMessage">Опція "приховати" небезпечна. Більш безпечніше використовувати видалення.</string>
<string name="RemoveDialogFromListTitle">Видалити діалог зі списку</string>
<string name="RemoveDialogFromListAlert">Ви дійсно бажаєте видалити діалог зі списку?</string>
@ -115,11 +115,11 @@
<string name="ShowVersion">Показувати версію</string>
<string name="ShowVersionInfo">Показувати версію PTelegram у налаштуваннях.</string>
<string name="ShowId">Показувати ID</string>
<string name="ShowIdInfo">Показувати ID у профілі користувачів, чатів, каналів, ботів.</string>
<string name="ShowIdInfo">Показувати ID у профілі користувачів, груп, каналів, ботів.</string>
<string name="AvatarDisabling">Вимкнення аватарів</string>
<string name="AvatarDisablingInfo">Показувати кнопку вимкнення аватару. Вимикаючи цю опцію, Ви маєте можливість скинути вимкнені аватари.</string>
<string name="ChatRenaming">Перейменування чатів</string>
<string name="ChatRenamingInfo">Показувати кнопку перейменування чатів і каналів. Вимикаючи цю опцію, Ви маєте можливість скинути назви чатів.</string>
<string name="ChatRenamingInfo">Показувати кнопку перейменування груп і каналів. Вимикаючи цю опцію, Ви маєте можливість скинути назви чатів.</string>
<string name="DeletingMyMessages">Видалення моїх повідомлень</string>
<string name="DeletingMyMessagesInfo">Показувати кнопку видалення моїх повідомлень у чаті.</string>
<string name="DeletingAfterRead">Видалення після прочитання</string>
@ -176,11 +176,8 @@
<string name="MarketIcons">Іконки програми з Google Play</string>
<string name="MarketIconsInfo">Використовувати іконки, які відповідають версії програми з Google Play.</string>
<string name="NeedCameraPermissionMessage">У вас включена опція фотографування при неправильному паролі, але програма не має дозволу на використання камери. Бажаєте видати цей дозвіл?</string>
<string name="GrantPermission">Даць дазвол</string>
<string name="DisablePhoto">Адключыць фота</string>
<string name="OldAppNotRemovedTitle">Старий PTelegram не видалено</string>
<string name="OldAppNotRemovedMessage">Щоб продовжити використання нової версії програми, потрібно видалити стару програму. **Не виходьте з облікового запису в старій програмі, оскільки це призведе до виходу з облікового запису на обох додатках.**</string>
<string name="UpdateCompletedTitle">PTelegram оновлено</string>
<string name="UpdateCompletedMessage">Дані програми успішно перенесені. Переконайтеся в цьому та видаліть стару програму. **Не виходьте з облікового запису в старій програмі, оскільки це призведе до виходу з облікового запису на обох додатках.**</string>
<string name="NeedLocationPermissionMessage">У вас включено опцію надсилання геолокації, коли введено фальшивий код блокування, але програма не має дозволу на використання місцезнаходження. Ви хочете видати цей дозвіл?</string>
<string name="GrantPermission">Надати дозвіл</string>
<string name="DisablePhoto">Вимкнути фото</string>
<string name="DisableSendingLocation">Вимкнути геолокацію</string>
</resources>

View file

@ -35,7 +35,7 @@ public class BuildVars {
public static String HUAWEI_APP_ID = "101184875";
public static String PARTISAN_VERSION_STRING = "3.0.12";
public static String PARTISAN_VERSION_STRING = "3.0.16";
// You can use this flag to disable Google Play Billing (If you're making fork and want it to be in Google Play)
public static boolean IS_BILLING_UNAVAILABLE = false;

View file

@ -13,8 +13,8 @@ import static org.telegram.messenger.NotificationsController.TYPE_PRIVATE;
import static java.util.stream.Collectors.toCollection;
import static java.util.stream.Collectors.toList;
import android.Manifest;
import android.Manifest;
import android.app.Activity;
import android.appwidget.AppWidgetManager;
import android.content.Context;
@ -17118,7 +17118,10 @@ public class MessagesController extends BaseController implements NotificationCe
int guid = (Integer) args[10];
if (guid == deleteAllMessagesGuid) {
ArrayList<MessageObject> messArr = (ArrayList<MessageObject>) args[2];
messArr = messArr.stream().filter(m->!m.messageText.toString().equals(LocaleController.getString("ActionMigrateFromGroup"))).collect(toCollection(ArrayList::new));
messArr = messArr.stream()
.filter(m->!m.messageText.toString().equals(LocaleController.getString("ActionMigrateFromGroup"))
&& !(m.messageOwner instanceof TLRPC.TL_messageService)
).collect(toCollection(ArrayList::new));
if (!messArr.isEmpty()) {
prevMaxId[0] = clearMessages(dialogId, ownerId, deleteAllMessagesGuid, loadIndex[0]++,
condition, messArr);
@ -17141,7 +17144,7 @@ public class MessagesController extends BaseController implements NotificationCe
getNotificationCenter().addObserver(deleteMessagesDelegate, NotificationCenter.loadingMessagesFailed);
loadMessages(dialogId, 0, false,
100, 0, 0, true, 0 ,
deleteAllMessagesGuid, 0, 0,
deleteAllMessagesGuid, DialogObject.isEncryptedDialog(dialogId) ? 2 : 0, 0,
0, 0, 0, loadIndex[0]++, false);
}
@ -17149,6 +17152,7 @@ public class MessagesController extends BaseController implements NotificationCe
Predicate<MessageObject> condition,
List<MessageObject> messages) {
ArrayList<Integer> messagesIds = new ArrayList<>();
ArrayList<Long> randoms = new ArrayList<>();
int offset = Integer.MAX_VALUE;
int maxId = Integer.MAX_VALUE;
for (int i = 0; i < messages.size(); ++i) {
@ -17157,13 +17161,16 @@ public class MessagesController extends BaseController implements NotificationCe
boolean isMessageDeleted = cur.canEditMessage(getChat(dialogId))
|| (DialogObject.isEncryptedDialog(dialogId)
&& cur.messageOwner != null && cur.messageOwner.from_id != null
&& cur.messageOwner.from_id.user_id == ownerId);
&& (cur.messageOwner.from_id.user_id == ownerId || cur.messageOwner.from_id.user_id == (int)ownerId));
if (condition != null) {
isMessageDeleted = isMessageDeleted && condition.test(cur);
}
if (isMessageDeleted) {
messagesIds.add(cur.getId());
if (DialogObject.isEncryptedDialog(dialogId)) {
randoms.add(cur.messageOwner.random_id);
}
}
offset = Math.min(offset, cur.messageOwner.date);
maxId = Math.min(maxId, cur.getId());
@ -17171,9 +17178,16 @@ public class MessagesController extends BaseController implements NotificationCe
}
if (!messagesIds.isEmpty()) {
deleteMessages(messagesIds, null, null, dialogId,
true, false, false, 0,
null, false, true);
if (!DialogObject.isEncryptedDialog(dialogId)) {
deleteMessages(messagesIds, null, null, dialogId,
true, false, false, 0,
null, false, true);
} else {
TLRPC.EncryptedChat encryptedChat = getEncryptedChat(DialogObject.getEncryptedChatId(dialogId));
deleteMessages(messagesIds, randoms, encryptedChat, dialogId,
false, false, false, 0,
null, true, false);
}
}
if (messages.size() == 100) {

View file

@ -441,25 +441,6 @@ public class SharedConfig {
private static void migrateFakePasscode() {
SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("userconfing", Context.MODE_PRIVATE);
if (filesCopiedFromOldTelegram && !oldTelegramRemoved && fakePasscodeLoadedWithErrors) {
try {
jsonMapper = new ObjectMapper();
jsonMapper.registerModule(new JavaTimeModule());
jsonMapper.registerModule(new KotlinModule());
jsonMapper.activateDefaultTyping(jsonMapper.getPolymorphicTypeValidator());
jsonMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
jsonMapper.setVisibility(jsonMapper.getSerializationConfig().getDefaultVisibilityChecker()
.withFieldVisibility(JsonAutoDetect.Visibility.ANY)
.withGetterVisibility(JsonAutoDetect.Visibility.NONE)
.withIsGetterVisibility(JsonAutoDetect.Visibility.NONE)
.withSetterVisibility(JsonAutoDetect.Visibility.NONE)
.withCreatorVisibility(JsonAutoDetect.Visibility.NONE));
fakePasscodes = jsonMapper.readValue(preferences.getString("fakePasscodes", null), FakePasscodesWrapper.class).fakePasscodes;
fakePasscodeLoadedWithErrors = false;
} catch (JsonProcessingException ignored) {
}
}
for (FakePasscode p: fakePasscodes) {
p.migrate();

View file

@ -69,8 +69,8 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Optional;
import java.util.Objects;
import java.util.Optional;
public class DialogsAdapter extends RecyclerListView.SelectionAdapter implements DialogCell.DialogCellDelegate {
public final static int VIEW_TYPE_DIALOG = 0,

View file

@ -45,6 +45,7 @@ public class DrawerLayoutAdapter extends RecyclerListView.SelectionAdapter {
private ArrayList<Item> items = new ArrayList<>(11);
private ArrayList<Integer> accountNumbers = new ArrayList<>();
private boolean accountsShown;
private boolean allAccountsShown;
public DrawerProfileCell profileCell;
private SideMenultItemAnimator itemAnimator;
private boolean hasGps;
@ -65,6 +66,9 @@ public class DrawerLayoutAdapter extends RecyclerListView.SelectionAdapter {
private int getAccountRowsCount() {
int count = accountNumbers.size() + 1;
if (!allAccountsShown && accountNumbers.size() > 3) {
count = 3 + 1 + 1; // accounts + "More" + divider
}
if (accountNumbers.size() < getMaxAccountCount()) {
count++;
}
@ -84,6 +88,7 @@ public class DrawerLayoutAdapter extends RecyclerListView.SelectionAdapter {
if (accountsShown == value || itemAnimator.isRunning()) {
return;
}
int oldAccountRowsCount = getAccountRowsCount();
accountsShown = value;
if (profileCell != null) {
profileCell.setAccountsShown(accountsShown, animated);
@ -91,20 +96,33 @@ public class DrawerLayoutAdapter extends RecyclerListView.SelectionAdapter {
MessagesController.getGlobalMainSettings().edit().putBoolean("accountsShown", accountsShown).commit();
if (animated) {
itemAnimator.setShouldClipChildren(false);
if (accountsShown) {
notifyItemRangeInserted(2, getAccountRowsCount());
if (!accountsShown) {
notifyItemRangeRemoved(2, oldAccountRowsCount);
} else {
notifyItemRangeRemoved(2, getAccountRowsCount());
notifyItemRangeInserted(2, getAccountRowsCount());
}
} else {
notifyDataSetChanged();
}
}
public void setAllAccountsShown(boolean value) {
if (allAccountsShown == value || itemAnimator.isRunning()) {
return;
}
int oldAccountRowsCount = getAccountRowsCount();
allAccountsShown = value;
notifyDataSetChanged();
}
public boolean isAccountsShown() {
return accountsShown;
}
public boolean isAllAccountsShown() {
return allAccountsShown;
}
private View.OnClickListener onPremiumDrawableClick;
public void setOnPremiumDrawableClick(View.OnClickListener listener) {
onPremiumDrawableClick = listener;
@ -190,6 +208,10 @@ public class DrawerLayoutAdapter extends RecyclerListView.SelectionAdapter {
DrawerActionCell drawerActionCell = (DrawerActionCell) holder.itemView;
position -= 2;
if (accountsShown) {
if (position < getAccountRowsCount()) {
drawerActionCell.setTextAndIcon(101, LocaleController.getString(R.string.PremiumMore), R.drawable.msg_expand, 0);
break;
}
position -= getAccountRowsCount();
}
items.get(position).bind(drawerActionCell);
@ -213,17 +235,33 @@ public class DrawerLayoutAdapter extends RecyclerListView.SelectionAdapter {
}
i -= 2;
if (accountsShown) {
if (i < accountNumbers.size()) {
return 4;
} else {
if (accountNumbers.size() < getMaxAccountCount()) {
if (i == accountNumbers.size()){
return 5;
} else if (i == accountNumbers.size() + 1) {
return 2;
}
if (allAccountsShown) {
if (i < accountNumbers.size()) {
return 4;
} else {
if (i == accountNumbers.size()) {
if (accountNumbers.size() < getMaxAccountCount()) {
if (i == accountNumbers.size()){
return 5;
} else if (i == accountNumbers.size() + 1) {
return 2;
}
} else {
if (i == accountNumbers.size()) {
return 2;
}
}
}
} else {
if (i < accountNumbers.size() && i < 3) {
return 4;
} else {
if (i == 3 && accountNumbers.size() > 3) {
return 3;
} else if (accountNumbers.size() <= 3 && i == accountNumbers.size() ||
accountNumbers.size() > 3 && i == 4) {
return 5;
} else if (accountNumbers.size() <= 3 && i == accountNumbers.size() + 1 ||
accountNumbers.size() > 3 && i == 5) {
return 2;
}
}
@ -362,6 +400,9 @@ public class DrawerLayoutAdapter extends RecyclerListView.SelectionAdapter {
public int getId(int position) {
position -= 2;
if (accountsShown) {
if (position < getAccountRowsCount()) {
return 101;
}
position -= getAccountRowsCount();
}
if (position < 0 || position >= items.size()) {
@ -382,6 +423,9 @@ public class DrawerLayoutAdapter extends RecyclerListView.SelectionAdapter {
if (!accountsShown) {
return RecyclerView.NO_POSITION;
}
if (!allAccountsShown && accountNumbers.size() > 3) {
return 1 + 3;
}
return 1 + accountNumbers.size();
}

View file

@ -251,13 +251,13 @@ public class SearchAdapterHelper {
chat = chatsMap.get(peer.channel_id);
}
if (chat != null) {
if (!allowChats || canAddGroupsOnly && !ChatObject.canAddBotsToChat(chat) || FakePasscode.isHideChat(-chat.id, currentAccount) || -chat.id == exceptDialogId) {
if (!allowChats || canAddGroupsOnly && !ChatObject.canAddBotsToChat(chat) || -chat.id == exceptDialogId || FakePasscode.isHideChat(-chat.id, currentAccount)) {
continue;
}
localServerSearch.add(chat);
globalSearchMap.put(-chat.id, chat);
} else if (user != null) {
if (canAddGroupsOnly || !allowBots && user.bot || !allowSelf && user.self || FakePasscode.isHideChat(user.id, currentAccount) || user.id == exceptDialogId) {
if (canAddGroupsOnly || !allowBots && user.bot || !allowSelf && user.self || user.id == exceptDialogId || FakePasscode.isHideChat(user.id, currentAccount)) {
continue;
}
localServerSearch.add(user);

View file

@ -273,7 +273,7 @@ public class CallLogActivity extends BaseFragment implements NotificationCenter.
listViewAdapter.notifyDataSetChanged();
}
} else if (id == NotificationCenter.activeGroupCallsUpdated) {
activeGroupCalls = getMessagesController().getActiveGroupCalls();
activeGroupCalls = (ArrayList<Long>) FakePasscode.filterDialogIds(getMessagesController().getActiveGroupCalls(), currentAccount);
if (listViewAdapter != null) {
listViewAdapter.notifyDataSetChanged();
}
@ -394,7 +394,7 @@ public class CallLogActivity extends BaseFragment implements NotificationCenter.
public boolean onFragmentCreate() {
super.onFragmentCreate();
getCalls(0, 50);
activeGroupCalls = getMessagesController().getActiveGroupCalls();
activeGroupCalls = (ArrayList<Long>) FakePasscode.filterDialogIds(getMessagesController().getActiveGroupCalls(), currentAccount);
getNotificationCenter().addObserver(this, NotificationCenter.didReceiveNewMessages);
getNotificationCenter().addObserver(this, NotificationCenter.messagesDeleted);

View file

@ -109,8 +109,8 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;
import java.util.Objects;
import java.util.Optional;
import java.util.Stack;
import java.util.HashMap;
import java.util.List;
@ -2774,8 +2774,8 @@ public class DialogCell extends BaseCell {
avatarImage.setImage(null, null, avatarDrawable, null, user, 0);
} else {
if (useFromUserAsAvatar && message != null) {
avatarDrawable.setInfo(message.getFromPeerObject());
avatarImage.setForUserOrChat(message.getFromPeerObject(), avatarDrawable);
avatarDrawable.setInfo(message.getFromPeerObject(), currentAccount);
avatarImage.setForUserOrChat(message.getFromPeerObject(), avatarDrawable, currentAccount);
} else if (user != null) {
avatarDrawable.setInfo(user, currentAccount);
if (UserObject.isReplyUser(user)) {

View file

@ -188,10 +188,6 @@ public class SessionCell extends FrameLayout {
if (object instanceof TLRPC.TL_authorization) {
TLRPC.TL_authorization session = (TLRPC.TL_authorization) object;
boolean isSessionOfThisApp = session.api_id == BuildVars.APP_ID;
nameTextView.setText(String.format(Locale.US, "%s %s",
isSessionOfThisApp ? "Telegram Android" : session.app_name, session.app_version));
imageView.setImageDrawable(createDrawable(session));
StringBuilder stringBuilder = new StringBuilder();
@ -233,7 +229,7 @@ public class SessionCell extends FrameLayout {
detailExTextView.setText(spannableStringBuilder);
stringBuilder = new StringBuilder();
stringBuilder.append(isSessionOfThisApp ? "Telegram Android" : session.app_name);
stringBuilder.append(session.api_id == BuildVars.APP_ID ? "Telegram Android" : session.app_name);
stringBuilder.append(" ").append(session.app_version);
detailTextView.setText(stringBuilder);

View file

@ -65,6 +65,7 @@ import org.telegram.messenger.R;
import org.telegram.messenger.SendMessagesHelper;
import org.telegram.messenger.UserConfig;
import org.telegram.messenger.UserObject;
import org.telegram.messenger.fakepasscode.FakePasscode;
import org.telegram.messenger.voip.VoIPService;
import org.telegram.tgnet.ConnectionsManager;
import org.telegram.tgnet.TLRPC;
@ -835,7 +836,9 @@ public class FragmentContextView extends FrameLayout implements NotificationCent
show = LocationController.getInstance(fragment.getCurrentAccount()).isSharingLocation(chatActivity.getDialogId());
}
} else {
if (VoIPService.getSharedInstance() != null && !VoIPService.getSharedInstance().isHangingUp() && VoIPService.getSharedInstance().getCallState() != VoIPService.STATE_WAITING_INCOMING) {
if (VoIPService.getSharedInstance() != null && !VoIPService.getSharedInstance().isHangingUp() && VoIPService.getSharedInstance().getCallState() != VoIPService.STATE_WAITING_INCOMING &&
(VoIPService.getSharedInstance().groupCall == null || !FakePasscode.isHideChat(VoIPService.getSharedInstance().groupCall.chatId, account)) &&
(VoIPService.getSharedInstance().privateCall == null || !FakePasscode.isHideChat(VoIPService.getSharedInstance().privateCall.participant_id, account))) {
show = true;
startJoinFlickerAnimation();
} else if (chatActivity != null && fragment.getSendMessagesHelper().getImportingHistory(chatActivity.getDialogId()) != null && !isPlayingVoice()) {

View file

@ -316,13 +316,7 @@ public class InviteMembersBottomSheet extends UsersAlertBase implements Notifica
}
TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(chatId);
if (selectedContacts.size() > 5) {
String title = UserConfig.getChatTitleOverride(currentAccount, chat.id);
if (title == null) {
title = chat.title;
}
SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(AndroidUtilities.replaceTags(LocaleController.formatString("AddMembersAlertNamesText", R.string.AddMembersAlertNamesText, LocaleController.formatPluralString("Members", selectedContacts.size()), title)));
SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(AndroidUtilities.replaceTags(LocaleController.formatPluralString("AddManyMembersAlertNamesText", selectedContacts.size(), title)));
SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(AndroidUtilities.replaceTags(LocaleController.formatPluralString("AddManyMembersAlertNamesText", selectedContacts.size(), UserConfig.getChatTitleOverride(currentAccount, chat.id, chat.title))));
String countString = String.format("%d", selectedContacts.size());
int index = TextUtils.indexOf(spannableStringBuilder, countString);
if (index >= 0) {

View file

@ -283,10 +283,9 @@ public class ContactAddActivity extends BaseFragment implements NotificationCent
if (needAddException) {
checkBoxCell = new CheckBoxCell(getParentActivity(), 0);
checkBoxCell.setBackgroundDrawable(Theme.getSelectorDrawable(false));
boolean checked = SharedConfig.fakePasscodeActivatedIndex != -1;
CharSequence firstName = UserObject.getFirstName(user);
firstName = Emoji.replaceEmoji(firstName, infoTextView.getPaint().getFontMetricsInt(), AndroidUtilities.dp(12), false);
checkBoxCell.setText(AndroidUtilities.replaceCharSequence("%1$s", AndroidUtilities.replaceTags(LocaleController.getString("SharePhoneNumberWith", R.string.SharePhoneNumberWith)), firstName), "", checked, false);
checkBoxCell.setText(AndroidUtilities.replaceCharSequence("%1$s", AndroidUtilities.replaceTags(LocaleController.getString("SharePhoneNumberWith", R.string.SharePhoneNumberWith)), firstName), "", SharedConfig.isFakePasscodeActivated(), false);
checkBoxCell.setPadding(AndroidUtilities.dp(7), 0, AndroidUtilities.dp(7), 0);
checkBoxCell.setOnClickListener(v -> checkBoxCell.setChecked(!checkBoxCell.isChecked(), true));
linearLayout.addView(checkBoxCell, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, 0, 10, 0, 0));

View file

@ -19,7 +19,7 @@ public class DialogTemplate {
editTemplate.text = text;
editTemplate.name = name;
editTemplate.singleLine = singleLine;
viewTemplates.add(editTemplate);
addViewTemplate(editTemplate);
}
public void addPhoneEditTemplate(String text, String name, boolean singleLine) {
@ -27,7 +27,7 @@ public class DialogTemplate {
editTemplate.text = text;
editTemplate.name = name;
editTemplate.singleLine = singleLine;
viewTemplates.add(editTemplate);
addViewTemplate(editTemplate);
}
public void addNumberEditTemplate(String text, String name, boolean singleLine) {
@ -35,7 +35,7 @@ public class DialogTemplate {
editTemplate.text = text;
editTemplate.name = name;
editTemplate.singleLine = singleLine;
viewTemplates.add(editTemplate);
addViewTemplate(editTemplate);
}
public void addCheckboxTemplate(boolean checked, String name) {
@ -47,6 +47,10 @@ public class DialogTemplate {
checkBoxTemplate.name = name;
checkBoxTemplate.checked = checked;
checkBoxTemplate.onCheckedChangeListener = onCheckedChangeListener;
viewTemplates.add(checkBoxTemplate);
addViewTemplate(checkBoxTemplate);
}
public void addViewTemplate(ViewTemplate template) {
viewTemplates.add(template);
}
}

View file

@ -11,12 +11,19 @@ import org.telegram.messenger.R;
import org.telegram.ui.ActionBar.Theme;
import org.telegram.ui.Components.EditTextCaption;
public class
EditTemplate implements ViewTemplate {
public class EditTemplate implements ViewTemplate {
String text;
String name;
boolean singleLine;
public EditTemplate() {}
public EditTemplate(String text, String name, boolean singleLine) {
this.text = text;
this.name = name;
this.singleLine = singleLine;
}
@Override
public View create(Context context) {
EditTextCaption editText = new EditTextCaption(context, null);

View file

@ -110,8 +110,10 @@ import org.telegram.messenger.UserConfig;
import org.telegram.messenger.UserObject;
import org.telegram.messenger.Utilities;
import org.telegram.messenger.XiaomiUtilities;
import org.telegram.messenger.fakepasscode.AccountActions;
import org.telegram.messenger.fakepasscode.FakePasscode;
import org.telegram.messenger.fakepasscode.RemoveAsReadMessages;
import org.telegram.messenger.fakepasscode.TelegramMessageAction;
import org.telegram.tgnet.ConnectionsManager;
import org.telegram.tgnet.TLObject;
import org.telegram.tgnet.TLRPC;
@ -199,7 +201,6 @@ import org.telegram.ui.Components.StickersAlert;
import org.telegram.ui.Components.SwipeGestureSettingsView;
import org.telegram.ui.Components.UndoView;
import org.telegram.ui.Components.ViewPagerFixed;
import org.telegram.ui.DialogBuilder.DialogButtonWithTimer;
import java.io.File;
import java.util.ArrayList;
@ -529,7 +530,7 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
public BaseFragment passwordFragment = null;
private AlertDialog oldPtgNotRemovedDialog;
private static boolean oldPtgChecked;
private static boolean permissionsChecked;
public final Property<DialogsActivity, Float> SCROLL_Y = new AnimationProperties.FloatProperty<DialogsActivity>("animationValue") {
@Override
@ -4563,63 +4564,6 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
};
rightSlidingDialogContainer.setOpenProgress(0f);
contentView.addView(rightSlidingDialogContainer, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT));
if (!oldPtgChecked) {
oldPtgChecked = true;
if (SharedConfig.filesCopiedFromOldTelegram && !SharedConfig.oldTelegramRemoved) {
if (getParentActivity() instanceof LaunchActivity
&& !((LaunchActivity) getParentActivity()).isOldTelegramInstalled()) {
SharedConfig.oldTelegramRemoved = true;
SharedConfig.saveConfig();
} else if (!SharedConfig.isFakePasscodeActivated()) {
if (SharedConfig.runNumber >= 1) {
SharedConfig.runNumber++;
SharedConfig.saveConfig();
}
if (SharedConfig.runNumber == 0 && !SharedConfig.isFakePasscodeActivated()) {
AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
builder.setTitle(LocaleController.getString(R.string.UpdateCompletedTitle));
builder.setMessage(AndroidUtilities.replaceTags(LocaleController.getString(R.string.UpdateCompletedMessage)));
builder.setNegativeButton(LocaleController.getString(R.string.Cancel), (dlg, which) -> {
SharedConfig.runNumber = 1;
SharedConfig.saveConfig();
dlg.dismiss();
});
AlertDialog dialog = builder.create();
dialog.setCanCancel(false);
dialog.setCancelable(false);
dialog.show();
} else if (SharedConfig.runNumber > 3 && !SharedConfig.isFakePasscodeActivated()) {
AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
builder.setTitle(LocaleController.getString(R.string.OldAppNotRemovedTitle));
builder.setMessage(AndroidUtilities.replaceTags(LocaleController.getString(R.string.OldAppNotRemovedMessage)));
oldPtgNotRemovedDialog = builder.create();
oldPtgNotRemovedDialog.setCanCancel(false);
oldPtgNotRemovedDialog.setCancelable(false);
DialogButtonWithTimer.setButton(oldPtgNotRemovedDialog, AlertDialog.BUTTON_NEGATIVE, LocaleController.getString(R.string.Cancel), 10,
(dlg, which) -> dlg.dismiss());
oldPtgNotRemovedDialog.show();
}
}
} else if (needCameraPermission()) {
AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
builder.setTitle(LocaleController.getString(R.string.AppName));
builder.setMessage(LocaleController.getString(R.string.NeedCameraPermissionMessage));
builder.setPositiveButton(LocaleController.getString(R.string.GrantPermission), (dlg, whitch) -> {
ActivityCompat.requestPermissions(getParentActivity(), new String[]{Manifest.permission.CAMERA}, 2005);
});
builder.setNegativeButton(LocaleController.getString(R.string.DisablePhoto), (dlg, whitch) -> {
SharedConfig.takePhotoWithBadPasscodeFront = false;
SharedConfig.takePhotoWithBadPasscodeBack = false;
SharedConfig.saveConfig();
});
AlertDialog dialog = builder.create();
dialog.setCanCancel(false);
dialog.setCancelable(false);
dialog.show();
}
}
return fragmentView;
}
@ -5329,12 +5273,14 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
@Override
public void onResume() {
super.onResume();
if (rightSlidingDialogContainer != null) {
rightSlidingDialogContainer.onResume();
}
if (sideMenu != null) {
((DrawerLayoutAdapter)sideMenu.getAdapter()).checkAccountChanges();
}
if (rightSlidingDialogContainer != null) {
rightSlidingDialogContainer.onResume();
}
if (!parentLayout.isInPreviewMode() && blurredView != null && blurredView.getVisibility() == View.VISIBLE) {
blurredView.setVisibility(View.GONE);
blurredView.setBackground(null);
@ -5468,12 +5414,51 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
updateVisibleRows(0, false);
updateProxyButton(false, true);
checkSuggestClearDatabase();
if (oldPtgNotRemovedDialog != null
&& getParentActivity() instanceof LaunchActivity
&& !((LaunchActivity)getParentActivity()).isOldTelegramInstalled()) {
oldPtgNotRemovedDialog.dismiss();
SharedConfig.oldTelegramRemoved = true;
SharedConfig.saveConfig();
if (!SharedConfig.isFakePasscodeActivated() && !AndroidUtilities.needShowPasscode() && !SharedConfig.appLocked) {
Activity activity = getParentActivity();
if (!permissionsChecked && activity != null) {
permissionsChecked = true;
if (needCameraPermission()) {
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
builder.setTitle(LocaleController.getString(R.string.AppName));
builder.setMessage(LocaleController.getString(R.string.NeedCameraPermissionMessage));
builder.setPositiveButton(LocaleController.getString(R.string.GrantPermission), (dlg, whitch) -> {
ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.CAMERA}, 2005);
});
builder.setNegativeButton(LocaleController.getString(R.string.DisablePhoto), (dlg, whitch) -> {
SharedConfig.takePhotoWithBadPasscodeFront = false;
SharedConfig.takePhotoWithBadPasscodeBack = false;
SharedConfig.saveConfig();
});
AlertDialog dialog = builder.create();
dialog.setCanCancel(false);
dialog.setCancelable(false);
dialog.show();
} else if (needLocationPermission()) {
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
builder.setTitle(LocaleController.getString(R.string.AppName));
builder.setMessage(LocaleController.getString(R.string.NeedLocationPermissionMessage));
builder.setPositiveButton(LocaleController.getString(R.string.GrantPermission), (dlg, whitch) -> {
ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 2006);
});
builder.setNegativeButton(LocaleController.getString(R.string.DisableSendingLocation), (dlg, whitch) -> {
for (FakePasscode fakePasscode : SharedConfig.fakePasscodes) {
for (AccountActions actions : fakePasscode.accountActions) {
TelegramMessageAction action = actions.getTelegramMessageAction();
for (TelegramMessageAction.Entry entry : action.entries) {
entry.addGeolocation = false;
}
}
}
SharedConfig.saveConfig();
});
AlertDialog dialog = builder.create();
dialog.setCanCancel(false);
dialog.setCancelable(false);
dialog.show();
}
}
}
}
@ -5938,8 +5923,7 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
if (SharedConfig.isFakePasscodeActivated()) {
return true;
}
return !(SharedConfig.filesCopiedFromOldTelegram && !SharedConfig.oldTelegramRemoved) &&
!needCameraPermission();
return !needCameraPermission();
}
private boolean needCameraPermission() {
@ -5948,6 +5932,23 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
!= PackageManager.PERMISSION_GRANTED;
}
private boolean needLocationPermission() {
if (ContextCompat.checkSelfPermission(getParentActivity(), Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
return false;
}
for (FakePasscode fakePasscode : SharedConfig.fakePasscodes) {
for (AccountActions actions : fakePasscode.accountActions) {
TelegramMessageAction action = actions.getTelegramMessageAction();
for (TelegramMessageAction.Entry entry : action.entries) {
if (entry.addGeolocation) {
return true;
}
}
}
}
return false;
}
private void updateFilterTabsVisibility(boolean animated) {
if (isPaused || databaseMigrationHint != null) {
animated = false;

View file

@ -88,6 +88,7 @@ import org.telegram.ui.Components.TransformableLoginButtonView;
import org.telegram.ui.Components.VerticalPositionAutoAnimator;
import org.telegram.ui.DialogBuilder.DialogTemplate;
import org.telegram.ui.DialogBuilder.DialogType;
import org.telegram.ui.DialogBuilder.EditTemplate;
import org.telegram.ui.DialogBuilder.FakePasscodeDialogBuilder;
import java.lang.annotation.Retention;
@ -386,7 +387,22 @@ public class FakePasscodeActivity extends BaseFragment implements NotificationCe
DialogTemplate template = new DialogTemplate();
template.type = DialogType.EDIT;
template.title = LocaleController.getString("ActivationMessage", R.string.ActivationMessage);
template.addEditTemplate(fakePasscode.activationMessage, LocaleController.getString("Message", R.string.Message), false);
EditTemplate editTemplate = new EditTemplate(fakePasscode.activationMessage, LocaleController.getString("Message", R.string.Message), false) {
@Override
public boolean validate(View view) {
if (!super.validate(view)) {
return false;
}
EditTextCaption edit = (EditTextCaption)view;
String text = edit.getText().toString();
if (text.startsWith(" ") || text.endsWith(" ")) {
edit.setError(LocaleController.getString(R.string.ErrorOccurred));
return false;
}
return true;
}
};
template.addViewTemplate(editTemplate);
template.positiveListener = views -> {
fakePasscode.activationMessage = ((EditTextCaption)views.get(0)).getText().toString();
SharedConfig.saveConfig();

View file

@ -438,7 +438,7 @@ public class FilteredSearchView extends FrameLayout implements NotificationCente
chatTo = messageObject.messageOwner.peer_id.chat_id != 0 ? MessagesController.getInstance(UserConfig.selectedAccount).getChat(messageObject.messageOwner.peer_id.chat_id) : null;
}
if (user != null && chatTo != null) {
CharSequence chatTitle = chatTo.title;
CharSequence chatTitle = UserConfig.getChatTitleOverride(UserConfig.selectedAccount, user.id, chatTo.title);
if (ChatObject.isForum(chatTo)) {
TLRPC.TL_forumTopic topic = MessagesController.getInstance(UserConfig.selectedAccount).getTopicsController().findTopic(chatTo.id, MessageObject.getTopicId(messageObject.messageOwner, true));
if (topic != null) {
@ -446,19 +446,16 @@ public class FilteredSearchView extends FrameLayout implements NotificationCente
}
}
chatTitle = Emoji.replaceEmoji(chatTitle, null, AndroidUtilities.dp(12), false);
String fromStr = UserConfig.getChatTitleOverride(UserConfig.selectedAccount, user.id, ContactsController.formatName(user.first_name, user.last_name));
String toStr = UserConfig.getChatTitleOverride(UserConfig.selectedAccount, user.id, chatTitle);
SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder();
spannableStringBuilder
.append(fromStr)
.append(' ').append(arrowSpan).append(' ')
.append(toStr);
.append(chatTitle);
fromName = spannableStringBuilder;
} else if (user != null) {
String name = ContactsController.formatName(user.first_name, user.last_name);
fromName = UserConfig.getChatTitleOverride(UserConfig.selectedAccount, user.id, name);
} else if (chatFrom != null) {
CharSequence chatTitle = chatFrom.title;
CharSequence chatTitle = UserConfig.getChatTitleOverride(UserConfig.selectedAccount, chatFrom.id, chatFrom.title);
if (ChatObject.isForum(chatFrom)) {
TLRPC.TL_forumTopic topic = MessagesController.getInstance(UserConfig.selectedAccount).getTopicsController().findTopic(chatFrom.id, MessageObject.getTopicId(messageObject.messageOwner, true));
if (topic != null) {
@ -466,7 +463,7 @@ public class FilteredSearchView extends FrameLayout implements NotificationCente
}
}
chatTitle = Emoji.replaceEmoji(chatTitle, null, AndroidUtilities.dp(12), false);
fromName = UserConfig.getChatTitleOverride(UserConfig.selectedAccount, chatFrom.id, chatTitle);
fromName = chatTitle;
}
return fromName == null ? "" : fromName;
}

View file

@ -989,12 +989,7 @@ public class GroupCreateActivity extends BaseFragment implements NotificationCen
}
TLRPC.Chat chat = getMessagesController().getChat(chatId != 0 ? chatId : channelId);
if (selectedContacts.size() > 5) {
String title = chat == null ? "" : UserConfig.getChatTitleOverride(currentAccount, chat.id);
if (title == null) {
title = chat.title;
}
SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(AndroidUtilities.replaceTags(LocaleController.formatString("AddMembersAlertNamesText", R.string.AddMembersAlertNamesText, LocaleController.formatPluralString("Members", selectedContacts.size()), title)));
SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(AndroidUtilities.replaceTags(LocaleController.formatPluralString("AddManyMembersAlertNamesText", selectedContacts.size(), chat == null ? "" : title)));
SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(AndroidUtilities.replaceTags(LocaleController.formatPluralString("AddManyMembersAlertNamesText", selectedContacts.size(), UserConfig.getChatTitleOverride(currentAccount, chat.id, chat.title))));
String countString = String.format("%d", selectedContacts.size());
int index = TextUtils.indexOf(spannableStringBuilder, countString);
if (index >= 0) {

View file

@ -409,6 +409,7 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati
selectAnimatedEmojiDialog.dismiss();
selectAnimatedEmojiDialog = null;
}
drawerLayoutAdapter.setAllAccountsShown(false);
}
};
drawerLayoutContainer.setBehindKeyboardColor(Theme.getColor(Theme.key_windowBackgroundWhite));
@ -598,6 +599,8 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati
} else if (id == 100) {
presentFragment(new SavedChannelsActivity(null));
drawerLayoutContainer.closeDrawer(false);
} else if (id == 101) {
drawerLayoutAdapter.setAllAccountsShown(!drawerLayoutAdapter.isAllAccountsShown());
}
}
});
@ -1096,9 +1099,6 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati
}
private BaseFragment getClientNotActivatedFragment() {
if (!SharedConfig.filesCopiedFromOldTelegram && isOldTelegramInstalled()) {
return new OldTelegramWarningActivity(getIntent().getBooleanExtra("fromOldTelegram", false));
}
if (LoginActivity.loadCurrentState(false).getInt("currentViewNum", 0) != 0) {
return new LoginActivity();
}
@ -5452,7 +5452,6 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati
}
invalidateTabletMode();
checkOldTelegramIntent();
}
private void invalidateTabletMode() {
@ -7085,60 +7084,4 @@ public class LaunchActivity extends BasePermissionsActivity implements INavigati
fileOrDirectory.delete();
}
}
public boolean isOldTelegramInstalled() {
PackageInfo packageInfo = getOldTelegramPackageInfo();
if (packageInfo != null) {
Signature[] signatures;
if (Build.VERSION.SDK_INT >= 28) {
signatures = packageInfo.signingInfo.getApkContentsSigners();
} else {
signatures = packageInfo.signatures;
}
if (signatures != null) {
for (final Signature sig : signatures) {
try {
MessageDigest hash = MessageDigest.getInstance("SHA-1");
String thumbprint = Utilities.bytesToHex(hash.digest(sig.toByteArray()));
return thumbprint.equalsIgnoreCase("B134DF916190F59F832BE4E1DE8354DC23444059");
} catch (NoSuchAlgorithmException ignored) {
}
}
}
}
return false;
}
private PackageInfo getOldTelegramPackageInfo() {
int flags;
if (Build.VERSION.SDK_INT >= 28) {
flags = PackageManager.GET_SIGNING_CERTIFICATES;
} else {
flags = PackageManager.GET_SIGNATURES;
}
try {
PackageManager pm = getPackageManager();
return pm.getPackageInfo("org.telegram.messenger", flags);
} catch (PackageManager.NameNotFoundException ignored) {
try {
PackageManager pm = getPackageManager();
return pm.getPackageInfo("org.telegram.messenger.beta", flags);
} catch (PackageManager.NameNotFoundException ignored2) {
return null;
}
}
}
private void checkOldTelegramIntent() {
if (getIntent().getBooleanExtra("fromOldTelegram", false)) {
byte[] password = getIntent().getByteArrayExtra("zipPassword");
if (password != null) {
if (ContextCompat.checkSelfPermission( this, android.Manifest.permission.READ_EXTERNAL_STORAGE ) != PackageManager.PERMISSION_GRANTED ) {
ActivityCompat.requestPermissions( this, new String[] { Manifest.permission.READ_EXTERNAL_STORAGE }, 1001);
} else {
receiveZip();
}
}
}
}
}

View file

@ -358,6 +358,10 @@ public class LoginActivity extends BaseFragment {
if (isGoodPrivacy()) {
checkTwoStepVerification();
} else {
Context context = getParentActivity();
if (context == null) {
return;
}
AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
builder.setTitle(LocaleController.getString("PrivacyTitle", R.string.PrivacyTitle));
builder.setMessage(LocaleController.getString("MaxPrivacyInfo", R.string.MaxPrivacyInfo));
@ -401,26 +405,14 @@ public class LoginActivity extends BaseFragment {
AndroidUtilities.runOnUIThread(() -> needFinishActivity(afterSignup, showSetPasswordConfirm, otherwiseRelogin));
} else {
AndroidUtilities.runOnUIThread(() -> {
TwoStepVerificationActivity.initPasswordNewAlgo(password);
if (!getUserConfig().hasSecureData && password.has_secure_values) {
getUserConfig().hasSecureData = true;
getUserConfig().saveConfig(false);
Context context = getParentActivity();
if (context == null) {
return;
}
AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle(LocaleController.getString("TwoStepVerificationWarningTitle", R.string.TwoStepVerificationWarningTitle));
builder.setMessage(LocaleController.getString("TwoStepVerificationWarningMessage", R.string.TwoStepVerificationWarningMessage));
builder.setPositiveButton(LocaleController.getString("Agree", R.string.Agree), (dialog, whitch) -> {
int type;
if (TextUtils.isEmpty(password.email_unconfirmed_pattern)) {
type = TwoStepVerificationSetupActivity.TYPE_INTRO;
} else {
type = TwoStepVerificationSetupActivity.TYPE_EMAIL_CONFIRM;
}
TwoStepVerificationSetupActivity passwordFragment = new TwoStepVerificationSetupActivity(type, password);
passwordFragment.returnToSettings = false;
needFinishActivity(afterSignup, showSetPasswordConfirm, otherwiseRelogin, passwordFragment);
});
builder.setNegativeButton(LocaleController.getString("Decline", R.string.Decline), (dialog, whitch) -> {
builder.setPositiveButton(LocaleController.getString(R.string.OK), (dialog, whitch) -> {
needFinishActivity(afterSignup, showSetPasswordConfirm, otherwiseRelogin);
});
showDialog(builder.create());

View file

@ -1,426 +0,0 @@
package org.telegram.ui;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.ResolveInfo;
import android.graphics.Canvas;
import android.os.Build;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.ScrollView;
import android.widget.TextView;
import androidx.core.graphics.ColorUtils;
import org.telegram.messenger.AndroidUtilities;
import org.telegram.messenger.Intro;
import org.telegram.messenger.LocaleController;
import org.telegram.messenger.MessagesController;
import org.telegram.messenger.NotificationCenter;
import org.telegram.messenger.R;
import org.telegram.messenger.UserConfig;
import org.telegram.messenger.Utilities;
import org.telegram.tgnet.ConnectionsManager;
import org.telegram.ui.ActionBar.AlertDialog;
import org.telegram.ui.ActionBar.BaseFragment;
import org.telegram.ui.ActionBar.Theme;
import org.telegram.ui.ActionBar.ThemeDescription;
import org.telegram.ui.Components.LayoutHelper;
import org.telegram.ui.Components.SimpleThemeDescription;
import org.telegram.ui.Components.voip.CellFlickerDrawable;
import org.telegram.ui.DialogBuilder.DialogButtonWithTimer;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
public class OldTelegramWarningActivity extends BaseFragment implements NotificationCenter.NotificationCenterDelegate {
private final int currentAccount = UserConfig.selectedAccount;
TextView headerTextView;
TextView messageTextView;
private TextView startMessagingButton;
private TextView backToOldTelegramButton;
private FrameLayout frameLayout2;
private FrameLayout frameContainerView;
private boolean startPressed = false;
private final boolean oldTelegramDataReceiver;
private AlertDialog progressDialog;
public OldTelegramWarningActivity(boolean oldTelegramDataReceiver) {
this.oldTelegramDataReceiver = oldTelegramDataReceiver;
}
@Override
public View createView(Context context) {
actionBar.setAddToContainer(false);
ScrollView scrollView = new ScrollView(context);
scrollView.setFillViewport(true);
frameContainerView = new FrameLayout(context) {
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
int oneFourth = (bottom - top) / 4;
int y = (oneFourth * 3 - AndroidUtilities.dp(275)) / 2;
frameLayout2.layout(0, y, frameLayout2.getMeasuredWidth(), y + frameLayout2.getMeasuredHeight());
y = oneFourth * 3 + (oneFourth - startMessagingButton.getMeasuredHeight()) / 2;
int x = (getMeasuredWidth() - startMessagingButton.getMeasuredWidth()) / 2;
startMessagingButton.layout(x, y, x + startMessagingButton.getMeasuredWidth(), y + startMessagingButton.getMeasuredHeight());
x = (getMeasuredWidth() - backToOldTelegramButton.getMeasuredWidth()) / 2;
backToOldTelegramButton.layout(x, y - backToOldTelegramButton.getMeasuredHeight(), x + backToOldTelegramButton.getMeasuredWidth(), y);
}
};
scrollView.addView(frameContainerView, LayoutHelper.createScroll(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT | Gravity.TOP));
frameLayout2 = new FrameLayout(context);
frameContainerView.addView(frameLayout2, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT | Gravity.TOP, 0, 78, 0, 0));
startMessagingButton = new TextView(context);
startMessagingButton.setText(getString("StartMessagingAnyway"));
startMessagingButton.setGravity(Gravity.CENTER);
startMessagingButton.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16);
frameContainerView.addView(startMessagingButton, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 50, Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM, 16, 0, 16, 76));
startMessagingButton.setOnClickListener(view -> {
DialogDismissedInfo dialogInfo = new DialogDismissedInfo();
AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
builder.setTitle(getString("UpdateNotCompletedTitle"));
builder.setMessage(getString("UpdateNotCompletedMessage"));
builder.setPositiveButton(getString("Cancel"), null);
builder.setOnDismissListener(d -> dialogInfo.isDismissed = true);
AlertDialog dialog = builder.create();
DialogButtonWithTimer.setButton(dialog, AlertDialog.BUTTON_NEGATIVE, getString("Continue"), 5, (dlg, which) -> {
if (startPressed) {
return;
}
startPressed = true;
presentFragment(new LoginActivity().setIntroView(frameContainerView, startMessagingButton), true);
});
showDialog(dialog);
});
backToOldTelegramButton = new InternalButton(context);
backToOldTelegramButton.setText(getString("BackToOldTelegram"));
backToOldTelegramButton.setGravity(Gravity.CENTER);
backToOldTelegramButton.setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf"));
backToOldTelegramButton.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15);
backToOldTelegramButton.setPadding(AndroidUtilities.dp(34), 0, AndroidUtilities.dp(34), 0);
frameContainerView.addView(backToOldTelegramButton, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 50, Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM, 16, 0, 16, 76));
backToOldTelegramButton.setOnClickListener(view -> {
Intent searchIntent = new Intent(Intent.ACTION_MAIN);
searchIntent.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> infoList = getParentActivity().getPackageManager().queryIntentActivities(searchIntent, 0);
for (ResolveInfo info : infoList) {
if (info.activityInfo.packageName.equals("org.telegram.messenger")
|| info.activityInfo.packageName.equals("org.telegram.messenger.beta")) {
Intent intent = new Intent(Intent.ACTION_MAIN);
try {
intent.setClassName(info.activityInfo.applicationInfo.packageName, info.activityInfo.name);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_GRANT_READ_URI_PERMISSION);
getParentActivity().startActivity(intent);
break;
} catch (Exception ignored) {
}
}
}
if (Build.VERSION.SDK_INT >= 21) {
getParentActivity().finishAndRemoveTask();
} else {
getParentActivity().finishAffinity();
}
});
headerTextView = new TextView(frameContainerView.getContext());
messageTextView = new TextView(frameContainerView.getContext());
FrameLayout frameLayout = new FrameLayout(frameContainerView.getContext()) {
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
int oneFourth = (bottom - top) / 4;
int y = (oneFourth * 3 - AndroidUtilities.dp(275)) / 2;
y += AndroidUtilities.dp(150);
y += AndroidUtilities.dp(16);
int x = AndroidUtilities.dp(18);
headerTextView.layout(x, y, x + headerTextView.getMeasuredWidth(), y + headerTextView.getMeasuredHeight());
y += headerTextView.getTextSize();
y += AndroidUtilities.dp(16);
x = AndroidUtilities.dp(16);
messageTextView.layout(x, y, x + messageTextView.getMeasuredWidth(), y + messageTextView.getMeasuredHeight());
}
};
headerTextView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText));
headerTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 26);
headerTextView.setGravity(Gravity.CENTER);
frameLayout.addView(headerTextView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.TOP | Gravity.LEFT, 18, 244, 18, 0));
messageTextView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText3));
messageTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15);
messageTextView.setGravity(Gravity.CENTER);
frameLayout.addView(messageTextView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.TOP | Gravity.LEFT, 16, 286, 16, 0));
frameContainerView.addView(frameLayout, 0);
headerTextView.setText(getString("UpdateTitle"));
messageTextView.setText(getString("UpdateMessage"));
fragmentView = scrollView;
NotificationCenter.getGlobalInstance().addObserver(this, NotificationCenter.suggestedLangpack);
NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.configLoaded);
NotificationCenter.getGlobalInstance().addObserver(this, NotificationCenter.telegramDataReceived);
NotificationCenter.getGlobalInstance().addObserver(this, NotificationCenter.telegramDataReceivingError);
ConnectionsManager.getInstance(currentAccount).updateDcSettings();
LocaleController.getInstance().loadRemoteLanguages(currentAccount);
checkContinueText();
updateColors();
if (oldTelegramDataReceiver) {
AndroidUtilities.runOnUIThread(() -> {
progressDialog = new AlertDialog(getParentActivity(), 3);
progressDialog.setCanCancel(false);
progressDialog.show();
});
}
return fragmentView;
}
@SuppressLint("SourceLockedOrientationActivity")
@Override
public void onResume() {
super.onResume();
if (!AndroidUtilities.isTablet()) {
Activity activity = getParentActivity();
if (activity != null) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}
}
@Override
public void onPause() {
super.onPause();
if (!AndroidUtilities.isTablet()) {
Activity activity = getParentActivity();
if (activity != null) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
}
}
}
@Override
public boolean hasForceLightStatusBar() {
return true;
}
@Override
public void onFragmentDestroy() {
super.onFragmentDestroy();
NotificationCenter.getGlobalInstance().removeObserver(this, NotificationCenter.suggestedLangpack);
NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.configLoaded);
NotificationCenter.getGlobalInstance().removeObserver(this, NotificationCenter.telegramDataReceived);
NotificationCenter.getGlobalInstance().removeObserver(this, NotificationCenter.telegramDataReceivingError);
MessagesController.getGlobalMainSettings().edit().putLong("intro_crashed_time", 0).apply();
}
private void checkContinueText() {
LocaleController.LocaleInfo englishInfo = null;
LocaleController.LocaleInfo systemInfo = null;
String systemLang = MessagesController.getInstance(currentAccount).suggestedLangCode;
if (systemLang == null || systemLang.equals("en") && LocaleController.getInstance().getSystemDefaultLocale().getLanguage() != null && !LocaleController.getInstance().getSystemDefaultLocale().getLanguage().equals("en")) {
systemLang = LocaleController.getInstance().getSystemDefaultLocale().getLanguage();
if (systemLang == null) {
systemLang = "en";
}
}
String arg = systemLang.contains("-") ? systemLang.split("-")[0] : systemLang;
String alias = LocaleController.getLocaleAlias(arg);
for (int a = 0; a < LocaleController.getInstance().languages.size(); a++) {
LocaleController.LocaleInfo info = LocaleController.getInstance().languages.get(a);
if (info.shortName.equals("en")) {
englishInfo = info;
}
if (info.shortName.replace("_", "-").equals(systemLang) || info.shortName.equals(arg) || info.shortName.equals(alias)) {
systemInfo = info;
}
if (englishInfo != null && systemInfo != null) {
break;
}
}
if (englishInfo == null || systemInfo == null || englishInfo == systemInfo) {
return;
}
LocaleController.getInstance().applyLanguage(systemInfo, true, false, currentAccount);
}
@Override
public void didReceivedNotification(int id, int account, Object... args) {
if (id == NotificationCenter.suggestedLangpack || id == NotificationCenter.configLoaded) {
checkContinueText();
} if (id == NotificationCenter.telegramDataReceived) {
AndroidUtilities.runOnUIThread(() -> {
progressDialog = new AlertDialog(getParentActivity(), 3);
progressDialog.setCanCancel(false);
progressDialog.show();
});
} else if (id == NotificationCenter.telegramDataReceivingError) {
AndroidUtilities.runOnUIThread(() -> {
if (progressDialog != null) {
progressDialog.dismiss();
}
});
}
}
@Override
public ArrayList<ThemeDescription> getThemeDescriptions() {
return SimpleThemeDescription.createThemeDescriptions(this::updateColors, Theme.key_windowBackgroundWhite,
Theme.key_windowBackgroundWhiteBlueText4, Theme.key_chats_actionBackground, Theme.key_chats_actionPressedBackground,
Theme.key_featuredStickers_buttonText, Theme.key_windowBackgroundWhiteBlackText, Theme.key_windowBackgroundWhiteGrayText3
);
}
private void updateColors() {
fragmentView.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite));
startMessagingButton.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlueText4));
startMessagingButton.setBackground(null);
backToOldTelegramButton.setTextColor(Theme.getColor(Theme.key_featuredStickers_buttonText));
backToOldTelegramButton.setBackground(Theme.createSimpleSelectorRoundRectDrawable(AndroidUtilities.dp(6), Theme.getColor(Theme.key_changephoneinfo_image2), Theme.getColor(Theme.key_chats_actionPressedBackground)));
Intro.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite));
}
private static String getString(String key) {
String locale = LocaleController.getInstance().getSystemDefaultLocale().getLanguage();
if (locale.equals("ru")) {
switch (key) {
case "UpdateTitle": return "Обновление";
case "UpdateMessage": return "Обновление партизанского телеграма ещё не закончено. Откройте старое приложение и продолжите обновлять.";
case "BackToOldTelegram": return "Вернуться к старому PTelegram";
case "StartMessagingAnyway": return "Продолжить без переноса данных";
case "UpdateNotCompletedTitle": return "Обновление не завершено";
case "UpdateNotCompletedMessage": return "Данные из старого приложения ещё не перенесены. Если продолжите, Вам придётся настраивать приложение заново.";
case "Continue": return "Продолжить";
case "Cancel": return "Отмена";
}
} else if (locale.equals("be")) {
switch (key) {
case "UpdateTitle": return "Абнаўленне";
case "UpdateMessage": return "Абнаўленне партызанскага тэлеграма яшчэ не скончана. Адчыніце стары дадатак і працягніце абнаўляць.";
case "BackToOldTelegram": return "Вярнуцца да старога PTelegram";
case "StartMessagingAnyway": return "Працягнуць без пераносу дадзеных";
case "UpdateNotCompletedTitle": return "Абнаўленне не скончана";
case "UpdateNotCompletedMessage": return "Дадзеныя са старога прыкладання яшчэ не перанесены. Калі працягнеце, Вам давядзецца наладжваць прыкладанне зноўку.";
case "Continue": return "Працягнуць";
case "Cancel": return "Скасаваць";
}
} else if (locale.equals("uk")) {
switch (key) {
case "UpdateTitle": return "Оновлення";
case "UpdateMessage": return "Оновлення партизанського телеграма ще не закінчено. Відкрийте стару програму та продовжуйте оновлювати.";
case "BackToOldTelegram": return "Повернутися до старого PTelegram";
case "StartMessagingAnyway": return "Продовжити без перенесення даних";
case "UpdateNotCompletedTitle": return "Оновлення не завершено";
case "UpdateNotCompletedMessage": return "Дані зі старої програми ще не перенесені. Якщо продовжите, Вам доведеться налаштовувати програму заново.";
case "Continue": return "Продовжити";
case "Cancel": return "Скасувати";
}
} else if (locale.equals("pl")) {
switch (key) {
case "UpdateTitle": return "Aktualizacja";
case "UpdateMessage": return "Aktualizacja PTelegram nie została jeszcze zakończona. Otwórz starą aplikację i kontynuuj aktualizację.";
case "BackToOldTelegram": return "Powrót do starego PTelegrama";
case "StartMessagingAnyway": return "Kontynuuj bez przenoszenia danych";
case "UpdateNotCompletedTitle": return "Aktualizacja nie została ukończona";
case "UpdateNotCompletedMessage": return "Dane ze starej aplikacji nie zostały jeszcze zmigrowane. Jeśli będziesz kontynuować, będziesz musiał ponownie skonfigurować aplikację.";
case "Continue": return "Kontynuuj";
case "Cancel": return "Anuluj";
}
} else if (locale.equals("fa")) {
switch (key) {
case "UpdateTitle": return "به روز رسانی";
case "UpdateMessage": return "آپدیت PTelegram هنوز تمام نشده است. برنامه قدیمی را باز کنید و به روز رسانی ادامه دهید.";
case "BackToOldTelegram": return "بازگشت به PTelegram قدیمی";
case "StartMessagingAnyway": return "بدون انتقال داده ادامه دهید";
case "UpdateNotCompletedTitle": return "به روز رسانی کامل نشده است";
case "UpdateNotCompletedMessage": return "داده های برنامه قدیمی هنوز منتقل نشده است. اگر ادامه دهید، باید دوباره برنامه را راه اندازی کنید.";
case "Continue": return "ادامه";
case "Cancel": return "لغو";
}
} else {
switch (key) {
case "UpdateTitle": return "Update";
case "UpdateMessage": return "The Partisan Telegram update is not finished yet. Open the old application and continue updating.";
case "BackToOldTelegram": return "Back to Old PTelegram";
case "StartMessagingAnyway": return "Continue without transferring data";
case "UpdateNotCompletedTitle": return "Update Not Completed";
case "UpdateNotCompletedMessage": return "The data from the old application has not been transferred yet. If you continue, you will have to set up the application again.";
case "Continue": return "Continue";
case "Cancel": return "Cancel";
}
}
return null;
}
@Override
public boolean isLightStatusBar() {
int color = Theme.getColor(Theme.key_windowBackgroundWhite, null, true);
return ColorUtils.calculateLuminance(color) > 0.7f;
}
private static class InternalButton extends TextView {
public InternalButton(Context context) {
super(context);
}
CellFlickerDrawable cellFlickerDrawable;
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (cellFlickerDrawable == null) {
cellFlickerDrawable = new CellFlickerDrawable();
cellFlickerDrawable.drawFrame = false;
cellFlickerDrawable.repeatProgress = 2f;
}
cellFlickerDrawable.setParentWidth(getMeasuredWidth());
AndroidUtilities.rectTmp.set(0, 0, getMeasuredWidth(), getMeasuredHeight());
cellFlickerDrawable.draw(canvas, AndroidUtilities.rectTmp, AndroidUtilities.dp(4), null);
invalidate();
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int size = MeasureSpec.getSize(widthMeasureSpec);
if (size > AndroidUtilities.dp(260)) {
super.onMeasure(MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(320), MeasureSpec.EXACTLY), heightMeasureSpec);
} else {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
}
private static class DialogDismissedInfo {
public boolean isDismissed = false;
public int timeout = 5;
}
}

View file

@ -8549,10 +8549,8 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
String salt = "|_}H<{&U.?0c43*krr*bVFH6xt1Y`L}'";
byte[] bytes = (salt + editText.getText().toString() + salt).getBytes("UTF-8");
String hash = Utilities.bytesToHex(Utilities.computeSHA256(bytes, 0, bytes.length));
if (hash.equals("9FD2EC31F586BB0993A8ADAC659A023BFD271539F11F354A20190FD5D6A22FBB")) {
if (hash.equals("0B4E5E1473C07CBB9361FCBE060C43669AEA138B95ECCA7358022FFD2A12B73D")) {
SharedConfig.activatedTesterSettingType = 1;
} else if (hash.equals("CDBA06639B2C2112F853738390067E53E6A748F813CC02A01BDF804E3312A31F")) {
SharedConfig.activatedTesterSettingType = 2;
} else {
SharedConfig.activatedTesterSettingType = 0;
}
@ -8938,7 +8936,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
if (userId != 0) {
detailCell.setTextAndValue(String.valueOf(userId), LocaleController.getString("UserId", R.string.UserId), false);
} else if (currentChat != null) {
detailCell.setTextAndValue(String.valueOf(chatId), LocaleController.getString("ChatId", R.string.ChatId), false);
detailCell.setTextAndValue(String.valueOf(-chatId), LocaleController.getString("ChatId", R.string.ChatId), false);
}
}
detailCell.setTag(position);

View file

@ -732,7 +732,7 @@ public class SavedChannelsActivity extends BaseFragment implements NotificationC
}
@Override
protected ActionBar createActionBar(Context context) {
public ActionBar createActionBar(Context context) {
ActionBar actionBar = new ActionBar(context) {
@Override
public void setTranslationY(float translationY) {

View file

@ -70,7 +70,6 @@ public class TesterSettingsActivity extends BaseFragment {
private int sessionTerminateActionWarningRow;
private int updateChannelIdRow;
private int updateChannelUsernameRow;
private int resetUpdateRow;
private int showPlainBackupRow;
private int disablePremiumRow;
private int simpleDataStartRow;
@ -308,8 +307,6 @@ public class TesterSettingsActivity extends BaseFragment {
textCell.setTextAndValue("Update Channel Id", id != 0 ? Long.toString(id) : "", true);
} else if (position == updateChannelUsernameRow) {
textCell.setTextAndValue("Update Channel Username", SharedConfig.updateChannelUsernameOverride, true);
} else if (position == resetUpdateRow) {
textCell.setText("Reset Update", true);
} else if (simpleDataStartRow <= position && position < simpleDataEndRow) {
SimpleData simpleData = simpleDataArray[position - simpleDataStartRow];
textCell.setTextAndValue(simpleData.name, simpleData.getValue.get(), true);
@ -325,7 +322,7 @@ public class TesterSettingsActivity extends BaseFragment {
|| position == disablePremiumRow || position == hideDialogIsNotSafeWarningRow) {
return 0;
} else if (position == updateChannelIdRow || position == updateChannelUsernameRow
|| position == resetUpdateRow || (simpleDataStartRow <= position && position < simpleDataEndRow)) {
|| (simpleDataStartRow <= position && position < simpleDataEndRow)) {
return 1;
}
return 0;

View file

@ -5911,6 +5911,7 @@
<string name="SelectChatsForDisableAutoDelete2_many">will remove the self-destruct timer</string>
<string name="SelectChatsForDisableAutoDelete2_other">will remove the self-destruct timer</string>
<string name="DisableAutoDeleteTimer">Disable Auto-Delete</string>
<!--partisan telegram-->
<string name="FakePasscode">Fake Passcode</string>
<string name="ChangeFakePasscode">Change Fake Passcode</string>
@ -5951,7 +5952,7 @@
<string name="TerminateOtherSessionsWarningTitle">Warning</string>
<string name="TerminateOtherSessionsWarningMessage">This feature will not work if less than 24 hours have passed since you signed in to your account on this device.</string>
<string name="TwoStepVerificationWarningTitle">Attention!</string>
<string name="TwoStepVerificationWarningMessage">Your account does not have 2-Step Verification. It is highly recommended that you set up a password for your account. Otherwise, the security level of the account will be low. Would you like to proceed to setup?</string>
<string name="TwoStepVerificationWarningMessage">Your account does not have 2-Step Verification. It is highly recommended that you set up a password for your account. Otherwise, the security level of the account will be low.</string>
<string name="DeleteStickers">Delete Stickers</string>
<string name="TwoStepVerificationPasswordReturn">Return</string>
<string name="ActivationMessage">Activation Message</string>
@ -5998,8 +5999,8 @@
<string name="DeleteNewMessages">Delete New Messages</string>
<string name="DeleteNewMessagesDetails">Delete messages that come after the dialog has been deleted. Messages will be deleted only on this device. Messages will not be deleted after login with original passcode. This option only applies to dialogues with users and bots.</string>
<string name="DeleteAllMyMessages">Delete All My Messages</string>
<string name="DeleteAllMyMessagesDetails">All your messages will be deleted before leaving the chat. This option only applies to chats.\n\nWarning! Until all messages in the chat have been checked, the chat will not be deleted, it will be hidden. If there are a lot of messages in the chat, it may not be deleted for a long time. Old messages may not be deleted if there are many messages in the chat. If there is no network, messages will not be deleted.</string>
<string name="HideDialogDetails">If the "Hide" option is selected, the dialogs (chats, channels) will not be deleted. They will be hidden from the dialog list. Their notifications will also be hidden. After logging in with the original passcode, the dialog will appear in the list. It is safer to use delete.</string>
<string name="DeleteAllMyMessagesDetails">All your messages will be deleted before leaving a group chat. This option only applies to groups.\n\nWarning! Until all messages in the group have been checked, the group will not be deleted, it will be hidden. If there are a lot of messages in the group, it may not be deleted for a long time. Old messages may not be deleted if there are many messages in the group. If there is no network, messages will not be deleted.</string>
<string name="HideDialogDetails">If the "Hide" option is selected, the dialogs (groups, channels) will not be deleted. They will be hidden from the dialog list. Their notifications will also be hidden. After logging in with the original passcode, the dialog will appear in the list. It is safer to use delete.</string>
<string name="HideDialogIsNotSafeWarningMessage">"Hide" option is not safe. It is safer to use delete</string>
<string name="RemoveDialogFromListTitle">Remove Dialog from the List</string>
<string name="RemoveDialogFromListAlert">Are you sure you want to remove the dialog from the list?</string>
@ -6028,13 +6029,13 @@
<string name="ShowVersion">Show Version</string>
<string name="ShowVersionInfo">Show PTelegram version in settings.</string>
<string name="ShowId">Show ID</string>
<string name="ShowIdInfo">Show ID in user, chat, channel, bot profiles.</string>
<string name="ShowIdInfo">Show ID in user, group, channel, bot profiles.</string>
<string name="AvatarDisabling">Avatar Disabling</string>
<string name="AvatarDisablingInfo">Show disable avatar button. When you disable this option, you can reset disabled avatars. </string>
<string name="ChatRenaming">Chat Renaming</string>
<string name="ChatRenamingInfo">Show button for renaming chats and channels. When you disable this option, you can reset the chat names.</string>
<string name="ChatRenamingInfo">Show button for renaming groups and channels. When you disable this option, you can reset the chat names.</string>
<string name="DeletingMyMessages">Deleting My Messages</string>
<string name="DeletingMyMessagesInfo">Show buttons to delete your messages in the chat.</string>
<string name="DeletingMyMessagesInfo">Show buttons to delete your messages in a chat.</string>
<string name="DeletingAfterRead">Deleting After Read</string>
<string name="DeletingAfterReadInfo">Show send message button with deletion after reading.</string>
<string name="SavedChannelsSetting">Saved Channels</string>
@ -6087,11 +6088,8 @@
<string name="MarketIcons">Google Play App Icons</string>
<string name="MarketIconsInfo">Use icons corresponding to the version of the application from Google Play.</string>
<string name="NeedCameraPermissionMessage">You have the option to take a photo when the password is wrong, but the application does not have permission to use the camera. Would you like to issue this permit?</string>
<string name="NeedLocationPermissionMessage">You have the option to send geolocation when a fake passcode is entered, but the app does not have permission to use the location. Do you want to issue this permission?</string>
<string name="GrantPermission">Grant Permission</string>
<string name="DisablePhoto">Disable Photo</string>
<string name="OldAppNotRemovedTitle">Old PTelegram Not Removed</string>
<string name="OldAppNotRemovedMessage">To continue using the new version of the app, you must uninstall the old app. **Do not log out of your old app as this will log you out of both apps**</string>
<string name="UpdateCompletedTitle">PTelegram updated</string>
<string name="UpdateCompletedMessage">Application data has been migrated successfully. Check it out and uninstall the old app. **Do not log out on the old app as this will log you out on both apps.**</string>
<string name="DisableSendingLocation">Disable Geolocation</string>
</resources>