diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml deleted file mode 100644 index 0ad5124063..0000000000 --- a/.github/FUNDING.yml +++ /dev/null @@ -1,2 +0,0 @@ -patreon: qwq233 -custom: https://afdian.com/@gao_cai_sheng diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 79735962d7..8ff88aeacc 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -6,7 +6,7 @@ body: - type: markdown attributes: value: | - Thanks for reporting bug to Nullgram + Thanks for reporting bug to Nnngram For further processing please fill in blanks. - type: textarea attributes: @@ -43,7 +43,7 @@ body: required: true - type: input attributes: - label: Nullgram Version + label: Nnngram Version placeholder: vX.X.X.XXXXXXX validations: required: true @@ -52,7 +52,7 @@ body: attributes: label: Version requirement options: - - label: I am using latest debug CI version of Nullgram and enable verbose log/我正在使用最新 CI 调试版本且启用详细日志 + - label: I am using latest debug CI version of Nnngram and enable verbose log/我正在使用最新 CI 调试版本且启用详细日志 required: true - type: textarea id: logs diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 2aed96a8d5..83eac5a917 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,7 +1,7 @@ blank_issues_enabled: false contact_links: - name: channel - url: https://t.me/NullgramClient + url: https://t.me/nagram_channel about: Our Telegram Channel - name: smart-question url: http://www.catb.org/~esr/faqs/smart-questions.html diff --git a/.github/Privacy-Policy.md b/.github/Privacy-Policy.md index 1fa12f0bdc..b88cddf9c3 100644 --- a/.github/Privacy-Policy.md +++ b/.github/Privacy-Policy.md @@ -1 +1 @@ -> Nullgram will not share any user data or device information with anyone. It is based on the official Telegram, so in order to learn more about it, please check [Telegram Privacy Policy](https://telegram.org/privacy) +> Nnngram will not share any user data or device information with anyone. It is based on the official Telegram, so in order to learn more about it, please check [Telegram Privacy Policy](https://telegram.org/privacy) diff --git a/.github/dependabot.yml b/.github/dependabot.yml deleted file mode 100644 index 7f283b1cf3..0000000000 --- a/.github/dependabot.yml +++ /dev/null @@ -1,6 +0,0 @@ -version: 2 -updates: - - package-ecosystem: "gradle" - directory: "/" - schedule: - interval: "daily" \ No newline at end of file diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0033301907..f7916712df 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -3,19 +3,20 @@ name: Build CI on: push: branches: - - master + - main paths-ignore: - '**.md' - '**.txt' - '.github/**' - '!.github/workflows/**' - "TMessagesProj/src/main/res/values**/**" + - '.gitignore' workflow_dispatch: jobs: build: name: Gradle Build - if: ${{ github.event_name != 'pull_request' && success() && github.ref == 'refs/heads/master' }} + if: ${{ github.event_name != 'pull_request' && success() && github.ref == 'refs/heads/main' }} runs-on: ubuntu-latest env: CCACHE_COMPILERCHECK: "%compiler% -dumpmachine; %compiler% -dumpversion" @@ -33,6 +34,9 @@ jobs: uses: jwlawson/actions-setup-cmake@v1.12 with: cmake-version: '3.22.1' + - name: Get short SHA + run: | + echo "SHA7=$(echo ${GITHUB_SHA} | cut -c1-7)" >> $GITHUB_ENV - name: Setup Java uses: actions/setup-java@v3 with: @@ -67,123 +71,67 @@ jobs: sudo rm -rf /usr/local/share/chromium sudo rm -rf /usr/local/lib/node_modules df -h - + sudo apt-get install bison gcc make curl ninja-build -y echo "y" | sdkmanager --install "ndk;27.0.12077973" --sdk_root=${ANDROID_SDK_ROOT} &> /dev/null echo "sdk.dir=${ANDROID_HOME}" >> local.properties - name: Debug Build run: | echo -e "RELEASE_KEY_PASSWORD=${{ secrets.RELEASE_KEY_PASSWORD }}\nRELEASE_KEY_ALIAS=${{ secrets.RELEASE_KEY_ALIAS }}\nRELEASE_STORE_PASSWORD=${{ secrets.RELEASE_STORE_PASSWORD }}">>local.properties - cat > service_account_credentials.json << EOF - ${{ secrets.ANDROID_PUBLISHER_CREDENTIALS }}" - EOF - mkdir TMessagesProj/config/ - echo ${{ secrets.KEYSTORE }} | base64 -d > TMessagesProj/config/release.keystore - echo ${{ secrets.GOOGLE_SERVICES_JSON }} | base64 -d > TMessagesProj/google-services.json + mkdir -p TMessagesProj/config/ + echo "${{ secrets.KEYSTORE }}" | base64 -d > TMessagesProj/config/release.keystore + echo "${{ secrets.GOOGLE_SERVICES_JSON }}" | base64 -d > TMessagesProj/google-services.json ./gradlew :TMessagesProj:assembleRelease :TMessagesProj:uploadCrashlyticsSymbolFileRelease echo "APK_FILE=$(find TMessagesProj/build/outputs/apk -name '*arm64*.apk')" >> $GITHUB_ENV - echo "APK_FILE_ARMV7=$(find TMessagesProj/build/outputs/apk -name '*arm32*.apk')" >> $GITHUB_ENV - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@master name: Upload apk (arm64-v8a) with: - name: Nullgram-arm64-v8a + name: Nnngram-arm64-v8a-${{ env.SHA7 }} path: ${{ env.APK_FILE }} - - uses: actions/upload-artifact@v3 - name: Upload apk (armeabi-v7a) - with: - name: Nullgram-armeabi-v7a - path: ${{ env.APK_FILE_ARMV7 }} + - name: Upload mapping - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@master with: name: mapping path: TMessagesProj/build/outputs/mapping - - play-build: - name: Gradle Build (play store) - runs-on: ubuntu-latest - # if: ${{ github.event_name != 'pull_request' && success() && github.ref == 'refs/heads/master' }} - if: false - env: - CCACHE_COMPILERCHECK: "%compiler% -dumpmachine; %compiler% -dumpversion" - CCACHE_NOHASHDIR: "true" - CCACHE_MAXSIZE: "5G" - CCACHE_HARDLINK: "true" - steps: - - uses: actions/checkout@v2 - with: - fetch-depth: 0 - - name: Check out submodules + - name: Debug Build (Telegram) run: | - git -c submodule."libs/rust".update=none submodule update --init --recursive - - name: Setup cmake - uses: jwlawson/actions-setup-cmake@v1.12 - with: - cmake-version: '3.22.1' - - name: Setup Java - uses: actions/setup-java@v3 + echo -e "RELEASE_KEY_PASSWORD=${{ secrets.RELEASE_KEY_PASSWORD }}\nRELEASE_KEY_ALIAS=${{ secrets.RELEASE_KEY_ALIAS }}\nRELEASE_STORE_PASSWORD=${{ secrets.RELEASE_STORE_PASSWORD }}">>local.properties + mkdir -p TMessagesProj/config/ + echo "${{ secrets.KEYSTORE }}" | base64 -d > TMessagesProj/config/release.keystore + echo "${{ secrets.GOOGLE_SERVICES_JSON }}" | base64 -d > TMessagesProj/google-services.json + sed -i 's@xyz.nextalone.nnngram@org.telegram.messenger@' TMessagesProj/build.gradle.kts + sed -i 's@xyz.nextalone.nnngram@org.telegram.messenger@' TMessagesProj/google-services.json + ./gradlew TMessagesProj:assembleRelease + find TMessagesProj/build/outputs/apk -name '*arm64*.apk' -exec mv {} TMessagesProj/build/outputs/apk/Nnngram-arm64-v8a-${{ env.SHA7 }}-Telegram.apk \; + echo "APK_FILE=$(find TMessagesProj/build/outputs/apk -name '*arm64*.apk')" >> $GITHUB_ENV + + - uses: actions/upload-artifact@master + name: Upload apk (arm64-v8a) (Telegram) with: - distribution: 'temurin' - java-version: '17' - cache: 'gradle' - - name: Setup Gradle - uses: gradle/gradle-build-action@v2.4.2 - - name: Set up ccache - uses: hendrikmuhs/ccache-action@v1.2 + name: Nnngram-arm64-v8a-${{ env.SHA7 }}-Telegram + path: ${{ env.APK_FILE }} + + - name: Upload mapping + uses: actions/upload-artifact@master with: - key: ccache - restore-keys: ccache - - name: Setup Android SDK Tools - uses: android-actions/setup-android@v2 - - name: Prepare Environment - run: | - echo "Removing large packages" - sudo apt-get remove -y '^dotnet-.*' aspnetcore-targeting-pack-6.0 aspnetcore-targeting-pack-7.0 - sudo apt-get remove -y '^llvm-.*' - sudo apt-get remove -y 'php.*' - sudo apt-get remove -y '^mongodb-.*' - sudo apt-get remove -y '^mysql-.*' - sudo apt-get remove -y azure-cli google-chrome-stable firefox powershell mono-devel libgl1-mesa-dri - sudo apt-get autoremove -y - sudo apt-get clean - echo "Removing large directories" - sudo rm -rf /usr/share/dotnet/ - sudo rm -rf /usr/local/graalvm/ - sudo rm -rf /usr/local/.ghcup/ - sudo rm -rf /usr/local/share/powershell - sudo rm -rf /usr/local/share/chromium - sudo rm -rf /usr/local/lib/node_modules - df -h - - sudo apt-get install bison gcc make curl ninja-build -y - echo "y" | sdkmanager --install "ndk;27.0.12077973" --sdk_root=${ANDROID_SDK_ROOT} &> /dev/null - echo "sdk.dir=${ANDROID_HOME}" >> local.properties + name: mapping-Telegram + path: TMessagesProj/build/outputs/mapping - - name: Debug Build - run: | - echo -e "RELEASE_KEY_PASSWORD=${{ secrets.RELEASE_KEY_PASSWORD }}\nRELEASE_KEY_ALIAS=${{ secrets.RELEASE_KEY_ALIAS }}\nRELEASE_STORE_PASSWORD=${{ secrets.RELEASE_STORE_PASSWORD }}">>local.properties - cat > service_account_credentials.json << EOF - ${{ secrets.ANDROID_PUBLISHER_CREDENTIALS }}" - EOF - mkdir TMessagesProj/config/ - echo ${{ secrets.KEYSTORE }} | base64 -d > TMessagesProj/config/release.keystore - echo ${{ secrets.GOOGLE_SERVICES_JSON }} | base64 -d > TMessagesProj/google-services.json - ./gradlew :TMessagesProj:publishPlayBundle - upload: name: Upload Release - if: ${{ github.event_name != 'pull_request' && success() && github.ref == 'refs/heads/master' }} + if: ${{ github.event_name != 'pull_request' && success() && github.ref == 'refs/heads/main' }} runs-on: ubuntu-latest needs: - build - telegram-bot-api steps: - name: Donwload Artifacts - uses: actions/download-artifact@v3 + uses: actions/download-artifact@master with: path: artifacts - name: Download Telegram Bot API Binary @@ -195,6 +143,7 @@ jobs: - name: find apk run: | mkdir apks + find artifacts -name "*Telegram.apk" -exec rm {} \; find artifacts -name "*.apk" -exec cp {} apks \; echo "APK_FILE_UPLOAD=$(find apks -name '*arm64*.apk')" >> $GITHUB_ENV - name: Get Apk Info @@ -207,12 +156,13 @@ jobs: run: | chmod +x telegram-bot-api-binary ./telegram-bot-api-binary --api-id=21724 --api-hash=3e0cb5efcd52300aec5994fdfc5bdc16 --local 2>&1 > /dev/null & - curl https://raw.githubusercontent.com/qwq233/qwq233/master/uploadCI.py -o uploadCI.py + curl https://raw.githubusercontent.com/PreviousAlone/ActionScript/main/uploadCI.py -o uploadCI.py python uploadCI.py env: + CHAT_ID: ${{ secrets.TELEGRAM_CHATID }} TELEGRAM_TOKEN: ${{ secrets.TELEGRAM_TOKEN }} - VERSION_CODE: ${{steps.apk.outputs.versionCode}} - VERSION_NAME: ${{steps.apk.outputs.versionNum}} + VERSION_CODE: ${{ steps.apk.outputs.versionCode }} + VERSION_NAME: ${{ steps.apk.outputs.versionNum }} COMMIT_MESSAGE: ${{ github.event.head_commit.message }} telegram-bot-api: @@ -220,14 +170,14 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Clone Telegram Bot API run: | git clone --recursive https://github.com/tdlib/telegram-bot-api.git git status telegram-bot-api >> telegram-bot-api-status - name: Cache Bot API Binary id: cache-bot-api - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: telegram-bot-api-binary key: CI-telegram-bot-api-${{ hashFiles('telegram-bot-api-status') }} diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 68c41b4c85..d4e22d0b3e 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -3,7 +3,7 @@ name: Build CI (Pull Request) on: pull_request: branches: - - master + - main paths-ignore: - '**.md' - '**.txt' diff --git a/.gitignore b/.gitignore index cf3aa0fbf2..169ae3b826 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,9 @@ local.properties service_account_credentials.json Tools/Utils.java test.py +.project +.settings +.classpath +History.md +apks +dprint.json diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml deleted file mode 100644 index ba1e544b3c..0000000000 --- a/.idea/codeStyles/Project.xml +++ /dev/null @@ -1,539 +0,0 @@ - - - - - \ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml deleted file mode 100644 index 79ee123c2b..0000000000 --- a/.idea/codeStyles/codeStyleConfig.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/copyright/Default.xml b/.idea/copyright/Default.xml deleted file mode 100644 index 0d4432414a..0000000000 --- a/.idea/copyright/Default.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml deleted file mode 100644 index b8a2842cd8..0000000000 --- a/.idea/copyright/profiles_settings.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/README.md b/README.md index c6c66ca48b..a7da3fa8ca 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,9 @@ -# Nullgram +![](https://socialify.git.ci/PreviousAlone/Nnngram/image?description=1&forks=1&issues=1&name=1&owner=1&pulls=1&stargazers=1&theme=Dark) -[![Telegram](https://img.shields.io/static/v1?label=Telegram&message=@NullgramClient&color=0088cc)](https://t.me/NullgramClient) [![CI build](https://github.com/qwq233/Nullgram/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/qwq233/Nullgram/actions/workflows/ci.yml/) [![Crowdin](https://badges.crowdin.net/nullgram/localized.svg)](https://crowdin.com/project/nullgram) +# Nagram-reborn based on Nullgram +[![Telegram](https://img.shields.io/static/v1?label=Telegram&message=@Nnngram&color=0088cc)](https://t.me/Nnngram) + +## What is Nullgram [中文](README_CN.md) [日本語](README_JA.md) @@ -13,6 +16,7 @@ In the name of Nullgram, the purpose is to express that there is no such bad thi ## How to Contribute ### I want to add new feature + Great! Make sure you fully understand [the Development Document](./docs/CONTRIBUTING.md). @@ -21,21 +25,22 @@ If you haven't read it.**THEN GO READ IT.** Then just create a new pull request and I should be review in a couple of days. ### I've encountered a bug! + First, make sure you have the latest version installed (check the channel, Play store versions usually have a delay). Then, if the issue appears in the official Telegram client too, please submit it to the officials, (be careful not to show Nullgram in the description and screenshots, the official developers doesn't like us!). Then, please detail your issue (ENGLISH ONLY), create an issue or submit it to our group with #bug. -Make sure using the issue template and writing the detailed version number I DO NOT KNOW WTF IS *I HAVE BEEN USING THE LATEST VERSION* +Make sure using the issue template and writing the detailed version number I DO NOT KNOW WTF IS _I HAVE BEEN USING THE LATEST VERSION_ -If you experience a crash, you can use logcat to catch the log (TAG: `Nullgram` ). +If you experience a crash, you can use logcat to catch the log (TAG: `Nnngram` ). ### Compilation Guide You will require Android NDK rev. 21 and Android SDK 14 -1. Download the Telegram source code from https://github.com/qwq233/Nullgram +1. Download the Telegram source code from https://github.com/PreviousAlone/Nnngram 2. Download the ccache from [here](https://ccache.dev/) and make sure it is in your `PATH`. 3. Replace release.keystore in TMessagesProj/config with your own one. 4. Fill out RELEASE_KEY_PASSWORD, RELEASE_KEY_ALIAS, RELEASE_STORE_PASSWORD in gradle.properties to access your release.keystore @@ -45,18 +50,17 @@ You will require Android NDK rev. 21 and Android SDK 14 ## Sponsor -Thanks to Jetbrains for allocating free open-source licences for IDEs and CloudFlare for OSS sponsorship +Thanks to Jetbrains for allocating free open-source licences for IDEs. [](https://jb.gg/OpenSource) -[](https://www.cloudflare.com/) [^1]: https://telegra.ph/%E6%9C%89%E5%85%B3-Nekogram-Lite-%E7%9A%84%E6%95%85%E4%BA%8B-04-09 -[^2]:https://sm.ms/image/FAKi3mx6XwqlvRj +[^2]: https://sm.ms/image/FAKi3mx6XwqlvRj -[^3]:https://t.me/NekogramX/418 +[^3]: https://t.me/NekogramX/418 -[^4]:https://t.me/zuragram/392 +[^4]: https://t.me/zuragram/392 -[^5]:https://t.me/sayingArchive/15428 +[^5]: https://t.me/sayingArchive/15428 diff --git a/README_CN.md b/README_CN.md index c4e8d37e53..071d5afabe 100644 --- a/README_CN.md +++ b/README_CN.md @@ -1,6 +1,7 @@ -# Nullgram +![](https://socialify.git.ci/PreviousAlone/Nnngram/image?description=1&forks=1&issues=1&name=1&owner=1&pulls=1&stargazers=1&theme=Dark) -[![Telegram](https://img.shields.io/static/v1?label=Telegram&message=@NullgramClient&color=0088cc)](https://t.me/NullgramClient) [![CI build](https://github.com/qwq233/Nullgram/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/qwq233/Nullgram/actions/workflows/ci.yml/) [![Crowdin](https://badges.crowdin.net/nullgram/localized.svg)](https://crowdin.com/project/nullgram) +# Nagram-reborn 基于 Nullgram +[![Telegram](https://img.shields.io/static/v1?label=Telegram&message=@Nnngram&color=0088cc)](https://t.me/Nnngram) [English](README.md) [日本語](README_JA.md) @@ -22,7 +23,7 @@ Null的意思是*未初始化、未定义或者不存在*。以Nullgram为名, ### 我发现了个BUG! -首先,确认你已经安装了最新版本的Nullgram。 +首先,确认你已经安装了最新版本的Nnngram。 然后,确认这个Bug是否也出现在官方Telegram端。如果也出现,那就把这个Bug提交给官方。 @@ -30,7 +31,7 @@ Null的意思是*未初始化、未定义或者不存在*。以Nullgram为名, 务必使用Issue Template。写详细版本号,**我不知道什么是*最新版本***。 -你可以用logcat抓取日志。(TAG: `Nullgram` ) +你可以用logcat抓取日志。(TAG: `Nnngram` ) [^1]: https://telegra.ph/%E6%9C%89%E5%85%B3-Nekogram-Lite-%E7%9A%84%E6%95%85%E4%BA%8B-04-09 diff --git a/README_JA.md b/README_JA.md index eac1c2c640..c56a308607 100644 --- a/README_JA.md +++ b/README_JA.md @@ -1,6 +1,9 @@ -# Nullgram +![](https://socialify.git.ci/PreviousAlone/Nnngram/image?description=1&forks=1&issues=1&name=1&owner=1&pulls=1&stargazers=1&theme=Dark) -[![Telegram](https://img.shields.io/static/v1?label=Telegram&message=@NullgramClient&color=0088cc)](https://t.me/NullgramClient) [![CI build](https://github.com/qwq233/Nullgram/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/qwq233/Nullgram/actions/workflows/ci.yml/) [![Crowdin](https://badges.crowdin.net/nullgram/localized.svg)](https://crowdin.com/project/nullgram) +# Nullgramベースで生まれ変わったNagram +[![Telegram](https://img.shields.io/static/v1?label=Telegram&message=@Nnngram&color=0088cc)](https://t.me/Nnngram) + +## Nullgramって何ですか [English](README.md) [中文](README_CN.md) @@ -31,13 +34,13 @@ Nullgramの名前には、悪意のある物は存在しないことを表す意 Issueテンプレートを使用して詳細なバージョン番号を入力してください。**私は最新のバージョンを使用していますが、あなたが使用しているバージョンはわかりません。** -クラッシュが発生した場合は、logcatを使用してログを取得することができます(タグ:`Nullgram`)。 +クラッシュが発生した場合は、logcatを使用してログを取得することができます(タグ:`Nnngram`)。 ### コンパイルガイド Android NDK rev.21とAndroid SDK 14が必要です。 -1. Telegramのソースコードを https://github.com/qwq233/Nullgram からダウンロードしてください。 +1. Telegramのソースコードを[https://github.com/PreviousAlone/Nnngram](https://github.com/PreviousAlone/Nnngram)からダウンロードしてください。 2. [こちら](https://ccache.dev/)からccacheをダウンロードして`PATH`にあることを確認してください。 3. TMessagesProj/configのrelease.keystoreを自分のものに置換してください。 4. gradle.properties内のRELEASE_KEY_PASSWORD、RELEASE_KEY_ALIAS、RELEASE_STORE_PASSWORDでrelease.keystoreにアクセスします。 @@ -46,10 +49,9 @@ Android NDK rev.21とAndroid SDK 14が必要です。 ## スポンサー -IDEに無料のオープンソースライセンスを割り当ててくれたJetbrainsとOSSのスポンサーになって頂いたCloudFlareに感謝をします。 +IDEに無料のオープンソースライセンスを割り当ててくれたJetbrainsに感謝をします。 [](https://jb.gg/OpenSource) -[](https://www.cloudflare.com/) [^1]: https://telegra.ph/%E6%9C%89%E5%85%B3-Nekogram-Lite-%E7%9A%84%E6%95%85%E4%BA%8B-04-09 diff --git a/TMessagesProj/build.gradle.kts b/TMessagesProj/build.gradle.kts index 951c5e2344..7879793732 100644 --- a/TMessagesProj/build.gradle.kts +++ b/TMessagesProj/build.gradle.kts @@ -45,23 +45,7 @@ configurations { } } -var serviceAccountCredentialsFile = File(rootProject.projectDir, "service_account_credentials.json") -val abiName = mapOf("armeabi-v7a" to "arm32", "arm64-v8a" to "arm64") - -if (serviceAccountCredentialsFile.isFile) { - setupPlay(Version.isStable) - play.serviceAccountCredentials.set(serviceAccountCredentialsFile) -} else if (System.getenv().containsKey("ANDROID_PUBLISHER_CREDENTIALS")) { - setupPlay(Version.isStable) -} - -fun setupPlay(stable: Boolean) { - val targetTrace = if (stable) "production" else "beta" - play { - track.set(targetTrace) - defaultToAppBundles.set(true) - } -} +val abiName = mapOf("arm64-v8a" to "arm64") cargo { module = "../libs/rust" @@ -114,13 +98,16 @@ dependencies { implementation(libs.ktor.client.contentNegotiation) implementation(libs.ktor.serialization.json) + implementation(libs.ffmpeg) + implementation(libs.lottie) + implementation(project(":libs:tcp2ws")) implementation(project(":libs:pangu")) ksp(project(":libs:ksp")) } android { - defaultConfig.applicationId = "top.qwq2333.nullgram" + defaultConfig.applicationId = "xyz.nextalone.nnngram" namespace = "org.telegram.messenger" sourceSets.getByName("main") { @@ -179,10 +166,6 @@ android { isDebuggable = true isJniDebuggable = true } - - create("play") { - initWith(getByName("release")) - } } buildFeatures { @@ -210,26 +193,25 @@ android { abi { isEnable = true reset() - include("armeabi-v7a", "arm64-v8a") + //noinspection ChromeOsAbiSupport + include("arm64-v8a") } } - androidComponents { - onVariants { variant -> - variant.buildConfigFields.put("isPlay", BuildConfigField("boolean", variant.name.lowercase() == "play", null)) - } - } +// androidComponents { +// onVariants { variant -> +// variant.buildConfigFields.put("isPlay", BuildConfigField("boolean", variant.name.lowercase() == "play", null)) +// } +// } applicationVariants.all { outputs.all { val abi = this.filters.find { it.filterType == FilterConfiguration.FilterType.ABI.name }?.identifier val output = this as? com.android.build.gradle.internal.api.BaseVariantOutputImpl - val outputFileName = "Nullgram-${defaultConfig.versionName}-${abiName[abi]}.apk" + val outputFileName = "Nnngram-${defaultConfig.versionName}-${abiName[abi]}.apk" output?.outputFileName = outputFileName } } - - } kotlin { diff --git a/TMessagesProj/icons/CREDITS.txt b/TMessagesProj/icons/CREDITS.txt deleted file mode 100644 index 5c76e690f6..0000000000 --- a/TMessagesProj/icons/CREDITS.txt +++ /dev/null @@ -1,10 +0,0 @@ - icon_1: https://twitter.com/TorinoAqua/status/1500774004344467461 - icon_2: https://twitter.com/nolma7/status/1501211141351305219 - icon_3: https://twitter.com/Nishina_hima/status/1501211397711175693 - icon_5: https://twitter.com/omu3retu/status/1502222606287605761 - icon_6: https://twitter.com/muninshiki/status/1445651719539478536 - icon_7: https://twitter.com/kasu1923/status/1445693353023053825 - icon_10: https://twitter.com/tnm_tyny/status/1442764062404734978 - icon_11: https://twitter.com/S2_DSA/status/1443459843025608708 - icon_12: https://twitter.com/ririkocafe/status/1444836713197543424 - icon_13: https://twitter.com/Man_SU_11/status/1501852999773085698 diff --git a/TMessagesProj/icons/anime/icon-0.png b/TMessagesProj/icons/anime/icon-0.png deleted file mode 100644 index b59cd1ba49..0000000000 Binary files a/TMessagesProj/icons/anime/icon-0.png and /dev/null differ diff --git a/TMessagesProj/icons/anime/icon-1.png b/TMessagesProj/icons/anime/icon-1.png deleted file mode 100644 index 50609c165c..0000000000 Binary files a/TMessagesProj/icons/anime/icon-1.png and /dev/null differ diff --git a/TMessagesProj/icons/anime/icon-10.png b/TMessagesProj/icons/anime/icon-10.png deleted file mode 100644 index 0d89c41b5a..0000000000 Binary files a/TMessagesProj/icons/anime/icon-10.png and /dev/null differ diff --git a/TMessagesProj/icons/anime/icon-11.png b/TMessagesProj/icons/anime/icon-11.png deleted file mode 100644 index c9ff231ebd..0000000000 Binary files a/TMessagesProj/icons/anime/icon-11.png and /dev/null differ diff --git a/TMessagesProj/icons/anime/icon-12.png b/TMessagesProj/icons/anime/icon-12.png deleted file mode 100644 index ca8eb4f8e5..0000000000 Binary files a/TMessagesProj/icons/anime/icon-12.png and /dev/null differ diff --git a/TMessagesProj/icons/anime/icon-13.png b/TMessagesProj/icons/anime/icon-13.png deleted file mode 100644 index 36b9895823..0000000000 Binary files a/TMessagesProj/icons/anime/icon-13.png and /dev/null differ diff --git a/TMessagesProj/icons/anime/icon-14.png b/TMessagesProj/icons/anime/icon-14.png deleted file mode 100644 index 80693d9cb4..0000000000 Binary files a/TMessagesProj/icons/anime/icon-14.png and /dev/null differ diff --git a/TMessagesProj/icons/anime/icon-2.png b/TMessagesProj/icons/anime/icon-2.png deleted file mode 100644 index d2bfc67997..0000000000 Binary files a/TMessagesProj/icons/anime/icon-2.png and /dev/null differ diff --git a/TMessagesProj/icons/anime/icon-3.png b/TMessagesProj/icons/anime/icon-3.png deleted file mode 100644 index 93dbce89a2..0000000000 Binary files a/TMessagesProj/icons/anime/icon-3.png and /dev/null differ diff --git a/TMessagesProj/icons/anime/icon-5.png b/TMessagesProj/icons/anime/icon-5.png deleted file mode 100644 index d38b2f2694..0000000000 Binary files a/TMessagesProj/icons/anime/icon-5.png and /dev/null differ diff --git a/TMessagesProj/icons/anime/icon-6.png b/TMessagesProj/icons/anime/icon-6.png deleted file mode 100644 index c23694407e..0000000000 Binary files a/TMessagesProj/icons/anime/icon-6.png and /dev/null differ diff --git a/TMessagesProj/icons/anime/icon-7.png b/TMessagesProj/icons/anime/icon-7.png deleted file mode 100644 index 0d5aff48c1..0000000000 Binary files a/TMessagesProj/icons/anime/icon-7.png and /dev/null differ diff --git a/TMessagesProj/icons/anime/icon-9.png b/TMessagesProj/icons/anime/icon-9.png deleted file mode 100644 index b2c270ec3c..0000000000 Binary files a/TMessagesProj/icons/anime/icon-9.png and /dev/null differ diff --git a/TMessagesProj/icons/anime/icon.png b/TMessagesProj/icons/anime/icon.png deleted file mode 100644 index 932073b9a5..0000000000 Binary files a/TMessagesProj/icons/anime/icon.png and /dev/null differ diff --git a/TMessagesProj/jni/jni.c b/TMessagesProj/jni/jni.c index 2e87c7ac88..905a2e08c2 100644 --- a/TMessagesProj/jni/jni.c +++ b/TMessagesProj/jni/jni.c @@ -28,10 +28,6 @@ jint JNI_OnLoad(JavaVM *vm, void *reserved) { return -1; } - if (!checkSignature(verify_signature(vm))) { - return JNI_ERR; - } - if (imageOnJNILoad(vm, env) != JNI_TRUE) { return -1; } @@ -57,7 +53,7 @@ JNIEXPORT void Java_org_telegram_messenger_Utilities_aesIgeEncryption(JNIEnv *en jbyte *what = (*env)->GetDirectBufferAddress(env, buffer) + offset; unsigned char *keyBuff = (unsigned char *)(*env)->GetByteArrayElements(env, key, NULL); unsigned char *ivBuff = (unsigned char *)(*env)->GetByteArrayElements(env, iv, NULL); - + AES_KEY akey; if (!encrypt) { AES_set_decrypt_key(keyBuff, 32 * 8, &akey); diff --git a/TMessagesProj/proguard-rules.pro b/TMessagesProj/proguard-rules.pro index 59fd1f53c7..d3bb3b053c 100644 --- a/TMessagesProj/proguard-rules.pro +++ b/TMessagesProj/proguard-rules.pro @@ -127,11 +127,11 @@ public (); } -keep class * extends org.telegram.ui.Components.UItem$UItemFactory { public (...); } --keepclassmembernames class top.qwq2333.nullgram.activity.DatacenterActivity$DatacenterCell { ; } --keepclassmembernames class top.qwq2333.nullgram.activity.DatacenterActivity$DatacenterHeaderCell { ; } --keepclassmembernames class top.qwq2333.nullgram.activity.MessageDetailActivity$TextDetailSimpleCell { ; } --keepclassmembernames class top.qwq2333.nullgram.activity.PasscodeSettingActivity$AccountCell { ; } --keepclassmembernames class top.qwq2333.nullgram.activity.ChatSettingActivity$StickerSizeCell { ; } +-keepclassmembernames class xyz.nextalone.nnngram.activity.DatacenterActivity$DatacenterCell { ; } +-keepclassmembernames class xyz.nextalone.nnngram.activity.DatacenterActivity$DatacenterHeaderCell { ; } +-keepclassmembernames class xyz.nextalone.nnngram.activity.MessageDetailActivity$TextDetailSimpleCell { ; } +-keepclassmembernames class xyz.nextalone.nnngram.activity.PasscodeSettingActivity$AccountCell { ; } +-keepclassmembernames class xyz.nextalone.nnngram.activity.ChatSettingActivity$StickerSizeCell { ; } -keepclassmembernames class androidx.core.widget.NestedScrollView { private android.widget.OverScroller mScroller; @@ -150,7 +150,7 @@ public static *** d(...); } --assumenosideeffects class top.qwq2333.nullgram.utils.Log { +-assumenosideeffects class xyz.nextalone.nnngram.utils.Log { public static *** d(...); } @@ -183,7 +183,7 @@ kotlinx.serialization.KSerializer serializer(...); } --keep class top.qwq2333.nullgram.utils.Log { +-keep class xyz.nextalone.nnngram.utils.Log { public static *** nativeLog(...); } diff --git a/TMessagesProj/src/main/AndroidManifest.xml b/TMessagesProj/src/main/AndroidManifest.xml index 5234955bfd..dd83eab877 100644 --- a/TMessagesProj/src/main/AndroidManifest.xml +++ b/TMessagesProj/src/main/AndroidManifest.xml @@ -130,8 +130,8 @@ android:restoreAnyVersion="true" android:backupAgent=".BackupAgent" android:hardwareAccelerated="@bool/useHardwareAcceleration" - android:icon="@mipmap/ic_launcher" - android:roundIcon="@mipmap/ic_launcher" + android:icon="@mipmap/ic_launcher_nagram" + android:roundIcon="@mipmap/ic_launcher_nagram_round" android:largeHeap="true" android:label="@string/NullgramName" android:theme="@style/Theme.TMessages.Start" @@ -162,10 +162,10 @@ @@ -179,10 +179,10 @@ @@ -196,10 +196,10 @@ @@ -213,10 +213,10 @@ @@ -230,26 +230,10 @@ - - - - - - - - - - @@ -330,7 +314,7 @@ - + @@ -378,7 +362,7 @@ android:stateNotNeeded="true" android:theme="@style/Theme.TMessages.Transparent" android:exported="true"> - + @@ -391,7 +375,7 @@ android:hardwareAccelerated="@bool/useHardwareAcceleration" android:exported="true" android:windowSoftInputMode="adjustPan"> - + @@ -402,7 +386,7 @@ android:hardwareAccelerated="@bool/useHardwareAcceleration" android:exported="true" android:windowSoftInputMode="adjustPan"> - + @@ -412,7 +396,7 @@ android:hardwareAccelerated="@bool/useHardwareAcceleration" android:exported="true" android:windowSoftInputMode="adjustPan"> - + @@ -506,15 +490,15 @@ e - + - + - + @@ -762,6 +746,10 @@ e + + diff --git a/TMessagesProj/src/main/assets/spotify_embed.html b/TMessagesProj/src/main/assets/spotify_embed.html new file mode 100644 index 0000000000..1df6e439c1 --- /dev/null +++ b/TMessagesProj/src/main/assets/spotify_embed.html @@ -0,0 +1,28 @@ + + + + + + +
+ +
+ + \ No newline at end of file diff --git a/TMessagesProj/src/main/java/androidx/recyclerview/widget/ItemTouchHelper.java b/TMessagesProj/src/main/java/androidx/recyclerview/widget/ItemTouchHelper.java index eeef34034e..ef5c5977a7 100644 --- a/TMessagesProj/src/main/java/androidx/recyclerview/widget/ItemTouchHelper.java +++ b/TMessagesProj/src/main/java/androidx/recyclerview/widget/ItemTouchHelper.java @@ -40,11 +40,12 @@ import androidx.recyclerview.widget.RecyclerView.ViewHolder; import org.telegram.messenger.AndroidUtilities; +import org.telegram.ui.Cells.DialogCell; import java.util.ArrayList; import java.util.List; -import top.qwq2333.gen.Config; +import xyz.nextalone.gen.Config; /** * This is a utility class to add swipe to dismiss and drag & drop support to RecyclerView. @@ -1256,6 +1257,11 @@ public boolean isIdle() { } public int checkHorizontalSwipe(ViewHolder viewHolder, int flags) { + if (viewHolder != null && viewHolder.itemView instanceof DialogCell) { + if (((DialogCell) viewHolder.itemView).getCurrentDialogFolderId() == 0 && Config.doNotUnarchiveBySwipe) { + return 0; + } + } if ((flags & (LEFT | RIGHT)) != 0) { final int dirFlag = mDx > 0 ? RIGHT : LEFT; if (mVelocityTracker != null && mActivePointerId > -1) { diff --git a/TMessagesProj/src/main/java/androidx/recyclerview/widget/RecyclerView.java b/TMessagesProj/src/main/java/androidx/recyclerview/widget/RecyclerView.java index 8bb7eba379..d65a26fba9 100644 --- a/TMessagesProj/src/main/java/androidx/recyclerview/widget/RecyclerView.java +++ b/TMessagesProj/src/main/java/androidx/recyclerview/widget/RecyclerView.java @@ -97,10 +97,10 @@ import java.util.Collections; import java.util.List; -import top.qwq2333.gen.Config; -import top.qwq2333.nullgram.config.ConfigManager; -import top.qwq2333.nullgram.utils.Defines; -import top.qwq2333.nullgram.utils.VibrationUtils; +import xyz.nextalone.gen.Config; +import xyz.nextalone.nnngram.config.ConfigManager; +import xyz.nextalone.nnngram.utils.Defines; +import xyz.nextalone.nnngram.utils.VibrationUtils; /** * A flexible view for providing a limited window into a large data set. diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/AccountInstance.java b/TMessagesProj/src/main/java/org/telegram/messenger/AccountInstance.java index 3d10e4aadb..2d989cd72c 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/AccountInstance.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/AccountInstance.java @@ -5,9 +5,9 @@ import org.telegram.tgnet.ConnectionsManager; import org.telegram.ui.Components.Paint.PersistColorPalette; -import top.qwq2333.nullgram.config.CloudStorage; -import top.qwq2333.nullgram.helpers.ConnectionsHelper; -import top.qwq2333.nullgram.utils.MessageUtils; +import xyz.nextalone.nnngram.config.CloudStorage; +import xyz.nextalone.nnngram.helpers.ConnectionsHelper; +import xyz.nextalone.nnngram.utils.MessageUtils; public class AccountInstance { diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/AndroidUtilities.java b/TMessagesProj/src/main/java/org/telegram/messenger/AndroidUtilities.java index edadaf6ae2..98fd05462d 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/AndroidUtilities.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/AndroidUtilities.java @@ -224,9 +224,10 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -import top.qwq2333.gen.Config; -import top.qwq2333.nullgram.utils.AlertUtil; -import top.qwq2333.nullgram.utils.AnalyticsUtils; +import xyz.nextalone.gen.Config; +import xyz.nextalone.nnngram.utils.AlertUtil; +import xyz.nextalone.nnngram.utils.AnalyticsUtils; +import xyz.nextalone.nnngram.utils.TypefaceUtils; public class AndroidUtilities { public final static int LIGHT_STATUS_BAR_OVERLAY = 0x0f000000, DARK_STATUS_BAR_OVERLAY = 0x33000000; @@ -2248,17 +2249,43 @@ public static Typeface getTypeface(String assetPath) { if (!typefaceCache.containsKey(assetPath)) { try { Typeface t; - if (Build.VERSION.SDK_INT >= 26) { - Typeface.Builder builder = new Typeface.Builder(ApplicationLoader.applicationContext.getAssets(), assetPath); - if (assetPath.contains("medium")) { - builder.setWeight(700); - } - if (assetPath.contains("italic")) { - builder.setItalic(true); - } - t = builder.build(); - } else { - t = Typeface.createFromAsset(ApplicationLoader.applicationContext.getAssets(), assetPath); + switch (assetPath) { + case TYPEFACE_ROBOTO_MEDIUM: + if (TypefaceUtils.isMediumWeightSupported()) { + t = Typeface.create("sans-serif-medium", Typeface.NORMAL); + } else { + t = Typeface.create("sans-serif", Typeface.BOLD); + } + break; + case "fonts/ritalic.ttf": + t = Typeface.create("sans-serif", Typeface.ITALIC); + break; + case TYPEFACE_ROBOTO_MEDIUM_ITALIC: + if (TypefaceUtils.isMediumWeightSupported()) { + t = Typeface.create("sans-serif-medium", Typeface.ITALIC); + } else { + t = Typeface.create("sans-serif", Typeface.BOLD_ITALIC); + } + break; + case TYPEFACE_ROBOTO_MONO: + t = Typeface.MONOSPACE; + break; + case "fonts/rcondensedbold.ttf": + t = Typeface.create("sans-serif-condensed", Typeface.BOLD); + break; + default: + if (Build.VERSION.SDK_INT >= 26) { + Typeface.Builder builder = new Typeface.Builder(ApplicationLoader.applicationContext.getAssets(), assetPath); + if (assetPath.contains("medium")) { + builder.setWeight(700); + } + if (assetPath.contains("italic")) { + builder.setItalic(true); + } + t = builder.build(); + } else { + t = Typeface.createFromAsset(ApplicationLoader.applicationContext.getAssets(), assetPath); + } } typefaceCache.put(assetPath, t); } catch (Exception e) { @@ -4016,10 +4043,10 @@ public static void openDocument(MessageObject message, Activity activity, BaseFr // intent.setDataAndType(Uri.fromFile(f), realMimeType != null ? realMimeType : "text/plain"); //} if (realMimeType != null) { - if (BuildConfig.isPlay && realMimeType.equals("application/vnd.android.package-archive")) { - AlertUtil.showSimpleAlert(activity, LocaleController.getString("InstallProhibitedPlay", R.string.InstallProhibitedPlay)); - return; - } +// if (BuildConfig.isPlay && realMimeType.equals("application/vnd.android.package-archive")) { +// AlertUtil.showSimpleAlert(activity, LocaleController.getString("InstallProhibitedPlay", R.string.InstallProhibitedPlay)); +// return; +// } try { activity.startActivityForResult(intent, 500); } catch (Exception e) { @@ -4076,10 +4103,10 @@ public static boolean openForView(File f, String fileName, String mimeType, fina } } } - if (BuildConfig.isPlay && realMimeType != null && realMimeType.equals("application/vnd.android.package-archive")) { - AlertUtil.showSimpleAlert(activity, LocaleController.getString("InstallProhibitedPlay", R.string.InstallProhibitedPlay)); - return true; - } +// if (BuildConfig.isPlay && realMimeType != null && realMimeType.equals("application/vnd.android.package-archive")) { +// AlertUtil.showSimpleAlert(activity, LocaleController.getString("InstallProhibitedPlay", R.string.InstallProhibitedPlay)); +// return true; +// } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && realMimeType != null && realMimeType.equals("application/vnd.android.package-archive") && !ApplicationLoader.applicationContext.getPackageManager().canRequestPackageInstalls()) { AlertsCreator.createApkRestrictedDialog(activity, resourcesProvider).show(); return true; diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/ApplicationLoader.java b/TMessagesProj/src/main/java/org/telegram/messenger/ApplicationLoader.java index ce4c4bcaf0..962ca90f13 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/ApplicationLoader.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/ApplicationLoader.java @@ -67,8 +67,8 @@ import java.util.ArrayList; import java.util.concurrent.CountDownLatch; -import top.qwq2333.nullgram.CrashListener; -import top.qwq2333.nullgram.utils.AnalyticsUtils; +import xyz.nextalone.nnngram.CrashListener; +import xyz.nextalone.nnngram.utils.AnalyticsUtils; public class ApplicationLoader extends Application { @@ -178,7 +178,7 @@ public static File getFilesDirFixed() { } catch (Exception e) { FileLog.e(e); } - return new File("/data/data/top.qwq2333.nullgram/files"); + return new File("/data/data/xyz.nextalone.nnngram/files"); } public static void postInitApplication() { @@ -322,7 +322,7 @@ public void onActivityStarted(Activity activity) { applicationHandler = new Handler(applicationContext.getMainLooper()); - org.osmdroid.config.Configuration.getInstance().setUserAgentValue("Nullgram" + BuildConfig.VERSION_NAME); + org.osmdroid.config.Configuration.getInstance().setUserAgentValue("Nnngram" + BuildConfig.VERSION_NAME); org.osmdroid.config.Configuration.getInstance().setOsmdroidBasePath(new File(ApplicationLoader.applicationContext.getCacheDir(), "osmdroid")); diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/BaseController.java b/TMessagesProj/src/main/java/org/telegram/messenger/BaseController.java index 776f3edfff..b7fd9a0c8a 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/BaseController.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/BaseController.java @@ -3,8 +3,8 @@ import org.telegram.tgnet.ConnectionsManager; import org.telegram.ui.Components.Paint.PersistColorPalette; -import top.qwq2333.nullgram.config.CloudStorage; -import top.qwq2333.nullgram.helpers.ConnectionsHelper; +import xyz.nextalone.nnngram.config.CloudStorage; +import xyz.nextalone.nnngram.helpers.ConnectionsHelper; public class BaseController { diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/BuildVars.java b/TMessagesProj/src/main/java/org/telegram/messenger/BuildVars.java index 9758e2fac0..7ad49e52c6 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/BuildVars.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/BuildVars.java @@ -26,27 +26,27 @@ public class BuildVars { public static final boolean DEBUG_VERSION = true; - public static boolean DEBUG_PRIVATE_VERSION = false; + public static boolean DEBUG_PRIVATE_VERSION = true; public static boolean CHECK_UPDATES = true; public static boolean LOGS_ENABLED = true; public static boolean USE_CLOUD_STRINGS = true; public static boolean NO_SCOPED_STORAGE = Build.VERSION.SDK_INT <= 29; public static final int BUILD_VERSION = 5511; public static final String BUILD_VERSION_STRING = "11.5.3"; - public static final int APP_ID = 19797609; - public static final String APP_HASH = "e8f1567dbbf38944a1391c4d23c34b60"; + public static final int APP_ID = 25184524; + public static final String APP_HASH = "0cda2e05621028b7d3836504dad86b9c"; public static final String APPCENTER_HASH = "PLACEHOLDER"; public static String SAFETYNET_KEY = ""; public static String SMS_HASH = "O2P2z+/jBpJ"; - public static final String PLAYSTORE_APP_URL = "https://play.google.com/store/apps/details?id=top.qwq2333.nullgram"; + public static final String PLAYSTORE_APP_URL = ""; public static String HUAWEI_STORE_URL = ""; public static String GOOGLE_AUTH_CLIENT_ID = "760348033671-81kmi3pi84p11ub8hp9a1funsv0rn2p9.apps.googleusercontent.com"; // 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 = BuildConfig.isPlay; + public static boolean IS_BILLING_UNAVAILABLE = false; static { if (ApplicationLoader.applicationContext != null) { diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/ContactsController.java b/TMessagesProj/src/main/java/org/telegram/messenger/ContactsController.java index 023a99cae0..b46d19020e 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/ContactsController.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/ContactsController.java @@ -60,7 +60,8 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -import top.qwq2333.nullgram.helpers.PasscodeHelper; +import xyz.nextalone.nnngram.helpers.PasscodeHelper; +import xyz.nextalone.nnngram.utils.StringUtils; public class ContactsController extends BaseController { @@ -397,7 +398,7 @@ public void checkAppAccount() { Utilities.globalQueue.postRunnable(() -> { AccountManager am = AccountManager.get(ApplicationLoader.applicationContext); try { - Account[] accounts = am.getAccountsByType("top.qwq2333.nullgram"); + Account[] accounts = am.getAccountsByType("xyz.nextalone.nnngram"); for (int a = 0; a < accounts.length; a++) { Account acc = accounts[a]; boolean found = false; @@ -429,7 +430,7 @@ public void checkAppAccount() { readContacts(); if (systemAccount == null) { try { - systemAccount = new Account("" + getUserConfig().getClientUserId(), "top.qwq2333.nullgram"); + systemAccount = new Account("" + getUserConfig().getClientUserId(), "xyz.nextalone.nnngram"); am.addAccountExplicitly(systemAccount, "", null); } catch (Exception ignore) { @@ -443,7 +444,7 @@ public void deleteUnknownAppAccounts() { try { systemAccount = null; AccountManager am = AccountManager.get(ApplicationLoader.applicationContext); - Account[] accounts = am.getAccountsByType("top.qwq2333.nullgram"); + Account[] accounts = am.getAccountsByType("xyz.nextalone.nnngram"); for (int a = 0; a < accounts.length; a++) { Account acc = accounts[a]; boolean found = false; @@ -519,7 +520,7 @@ public void deleteAllContacts(final Runnable runnable) { AndroidUtilities.runOnUIThread(() -> { AccountManager am = AccountManager.get(ApplicationLoader.applicationContext); try { - Account[] accounts = am.getAccountsByType("top.qwq2333.nullgram"); + Account[] accounts = am.getAccountsByType("xyz.nextalone.nnngram"); systemAccount = null; for (int a = 0; a < accounts.length; a++) { Account acc = accounts[a]; @@ -537,7 +538,7 @@ public void deleteAllContacts(final Runnable runnable) { } try { - systemAccount = new Account("" + getUserConfig().getClientUserId(), "top.qwq2333.nullgram"); + systemAccount = new Account("" + getUserConfig().getClientUserId(), "xyz.nextalone.nnngram"); am.addAccountExplicitly(systemAccount, "", null); } catch (Exception ignore) { @@ -2304,7 +2305,7 @@ private void applyContactToPhoneBook(ArrayList query, builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI); builder.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, rawContactId); - builder.withValue(ContactsContract.Data.MIMETYPE, "vnd.android.cursor.item/vnd.top.qwq2333.nullgram.android.profile"); + builder.withValue(ContactsContract.Data.MIMETYPE, "vnd.android.cursor.item/vnd.xyz.nextalone.nnngram.android.profile"); builder.withValue(ContactsContract.Data.DATA1, user.id); builder.withValue(ContactsContract.Data.DATA2, "Telegram Profile"); builder.withValue(ContactsContract.Data.DATA3, LocaleController.formatString("ContactShortcutMessage", R.string.ContactShortcutMessage, phoneOrName)); @@ -2313,7 +2314,7 @@ private void applyContactToPhoneBook(ArrayList query, builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI); builder.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, rawContactId); - builder.withValue(ContactsContract.Data.MIMETYPE, "vnd.android.cursor.item/vnd.top.qwq2333.nullgram.android.call"); + builder.withValue(ContactsContract.Data.MIMETYPE, "vnd.android.cursor.item/vnd.xyz.nextalone.nnngram.android.call"); builder.withValue(ContactsContract.Data.DATA1, user.id); builder.withValue(ContactsContract.Data.DATA2, "Telegram Voice Call"); builder.withValue(ContactsContract.Data.DATA3, LocaleController.formatString("ContactShortcutVoiceCall", R.string.ContactShortcutVoiceCall, phoneOrName)); @@ -2322,7 +2323,7 @@ private void applyContactToPhoneBook(ArrayList query, builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI); builder.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, rawContactId); - builder.withValue(ContactsContract.Data.MIMETYPE, "vnd.android.cursor.item/vnd.top.qwq2333.nullgram.android.call.video"); + builder.withValue(ContactsContract.Data.MIMETYPE, "vnd.android.cursor.item/vnd.xyz.nextalone.nnngram.android.call.video"); builder.withValue(ContactsContract.Data.DATA1, user.id); builder.withValue(ContactsContract.Data.DATA2, "Telegram Video Call"); builder.withValue(ContactsContract.Data.DATA3, LocaleController.formatString("ContactShortcutVideoCall", R.string.ContactShortcutVideoCall, phoneOrName)); @@ -3077,7 +3078,7 @@ public static String formatName(String firstName, String lastName, int maxLength result.append(firstName); } } - return result.toString(); + return StringUtils.zalgoFilter(result.toString()); } private class PhoneBookContact { diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/Emoji.java b/TMessagesProj/src/main/java/org/telegram/messenger/Emoji.java index 73d69fae9c..e80dbc6913 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/Emoji.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/Emoji.java @@ -51,8 +51,8 @@ import java.util.Locale; import java.util.Objects; -import top.qwq2333.gen.Config; -import top.qwq2333.nullgram.utils.Utils; +import xyz.nextalone.gen.Config; +import xyz.nextalone.nnngram.utils.Utils; public class Emoji { diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/FileLoadOperation.java b/TMessagesProj/src/main/java/org/telegram/messenger/FileLoadOperation.java index 17af649510..9ad6d97dc3 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/FileLoadOperation.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/FileLoadOperation.java @@ -41,9 +41,9 @@ import java.util.zip.GZIPInputStream; import java.util.zip.ZipException; -import top.qwq2333.gen.Config; -import top.qwq2333.nullgram.config.ConfigManager; -import top.qwq2333.nullgram.utils.Defines; +import xyz.nextalone.gen.Config; +import xyz.nextalone.nnngram.config.ConfigManager; +import xyz.nextalone.nnngram.utils.Defines; public class FileLoadOperation { diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/FileLog.java b/TMessagesProj/src/main/java/org/telegram/messenger/FileLog.java index 20f8f31a56..9eeabb84c9 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/FileLog.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/FileLog.java @@ -17,7 +17,7 @@ import java.io.File; import java.io.OutputStreamWriter; -import top.qwq2333.nullgram.utils.Log; +import xyz.nextalone.nnngram.utils.Log; /** * @deprecated use {@link Log} instead diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/FileUploadOperation.java b/TMessagesProj/src/main/java/org/telegram/messenger/FileUploadOperation.java index 19156ad02f..5c70ad68b4 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/FileUploadOperation.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/FileUploadOperation.java @@ -25,7 +25,7 @@ import java.lang.reflect.Method; import java.util.ArrayList; -import top.qwq2333.gen.Config; +import xyz.nextalone.gen.Config; public class FileUploadOperation { diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/FilesMigrationService.java b/TMessagesProj/src/main/java/org/telegram/messenger/FilesMigrationService.java index f3e66be098..50dded041e 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/FilesMigrationService.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/FilesMigrationService.java @@ -204,7 +204,7 @@ public static void checkBottomSheet(BaseFragment fragment) { } } } - File oldDirectory = new File(path, "Nullgram"); + File oldDirectory = new File(path, "Nnngram"); hasOldFolder = oldDirectory.exists(); } if (hasOldFolder) { diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/FingerprintController.java b/TMessagesProj/src/main/java/org/telegram/messenger/FingerprintController.java index ac56341e6a..76680f4e39 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/FingerprintController.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/FingerprintController.java @@ -110,7 +110,10 @@ public static void checkKeyReady(boolean notifyCheckFingerprint) { public static boolean isKeyReady() { try { - return getKeyStore().containsAlias(KEY_ALIAS); + var ks = getKeyStore(); + if (ks != null) { + return ks.containsAlias(KEY_ALIAS); + } } catch (KeyStoreException e) { FileLog.e(e); } diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/FlagSecureReason.java b/TMessagesProj/src/main/java/org/telegram/messenger/FlagSecureReason.java index 6a163a909f..85ffad2e9b 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/FlagSecureReason.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/FlagSecureReason.java @@ -5,7 +5,7 @@ import java.util.HashMap; -import top.qwq2333.gen.Config; +import xyz.nextalone.gen.Config; public class FlagSecureReason { diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/ImageLoader.java b/TMessagesProj/src/main/java/org/telegram/messenger/ImageLoader.java index 228de41bd0..e74afa54fc 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/ImageLoader.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/ImageLoader.java @@ -2463,14 +2463,14 @@ public SparseArray createMediaPaths() { try { if (ApplicationLoader.applicationContext.getExternalMediaDirs().length > 0) { publicMediaDir = getPublicStorageDir(); - publicMediaDir = new File(publicMediaDir, "Nullgram"); + publicMediaDir = new File(publicMediaDir, "Nnngram"); publicMediaDir.mkdirs(); } } catch (Exception e) { FileLog.e(e); } newPath = ApplicationLoader.applicationContext.getExternalFilesDir(null); - telegramPath = new File(newPath, "Nullgram"); + telegramPath = new File(newPath, "Nnngram"); } else { boolean isSdCard = !TextUtils.isEmpty(SharedConfig.storageCacheDir) && path.getAbsolutePath().startsWith(SharedConfig.storageCacheDir); if (!isSdCard) { @@ -2479,7 +2479,7 @@ public SparseArray createMediaPaths() { path = ApplicationLoader.applicationContext.getExternalFilesDir(null); } } - telegramPath = new File(path, "Nullgram"); + telegramPath = new File(path, "Nnngram"); } telegramPath.mkdirs(); @@ -2489,7 +2489,7 @@ public SparseArray createMediaPaths() { File dir = dirs.get(a); if (dir != null && !TextUtils.isEmpty(SharedConfig.storageCacheDir) && dir.getAbsolutePath().startsWith(SharedConfig.storageCacheDir)) { path = dir; - telegramPath = new File(path, "Nullgram"); + telegramPath = new File(path, "Nnngram"); telegramPath.mkdirs(); break; } @@ -2498,7 +2498,7 @@ public SparseArray createMediaPaths() { if (telegramPath.isDirectory()) { try { - File imagePath = new File(telegramPath, "Nullgram Images"); + File imagePath = new File(telegramPath, "Nnngram Images"); imagePath.mkdir(); if (imagePath.isDirectory() && canMoveFiles(cachePath, imagePath, FileLoader.MEDIA_DIR_IMAGE)) { mediaDirs.put(FileLoader.MEDIA_DIR_IMAGE, imagePath); @@ -2511,7 +2511,7 @@ public SparseArray createMediaPaths() { } try { - File videoPath = new File(telegramPath, "Nullgram Video"); + File videoPath = new File(telegramPath, "Nnngram Video"); videoPath.mkdir(); if (videoPath.isDirectory() && canMoveFiles(cachePath, videoPath, FileLoader.MEDIA_DIR_VIDEO)) { mediaDirs.put(FileLoader.MEDIA_DIR_VIDEO, videoPath); @@ -2524,7 +2524,7 @@ public SparseArray createMediaPaths() { } try { - File audioPath = new File(telegramPath, "Nullgram Audio"); + File audioPath = new File(telegramPath, "Nnngram Audio"); audioPath.mkdir(); if (audioPath.isDirectory() && canMoveFiles(cachePath, audioPath, FileLoader.MEDIA_DIR_AUDIO)) { AndroidUtilities.createEmptyFile(new File(audioPath, ".nomedia")); @@ -2538,7 +2538,7 @@ public SparseArray createMediaPaths() { } try { - File documentPath = new File(telegramPath, "Nullgram Documents"); + File documentPath = new File(telegramPath, "Nnngram Documents"); documentPath.mkdir(); if (documentPath.isDirectory() && canMoveFiles(cachePath, documentPath, FileLoader.MEDIA_DIR_DOCUMENT)) { AndroidUtilities.createEmptyFile(new File(documentPath, ".nomedia")); @@ -2552,7 +2552,7 @@ public SparseArray createMediaPaths() { } try { - File normalNamesPath = new File(telegramPath, "Nullgram Files"); + File normalNamesPath = new File(telegramPath, "Nnngram Files"); normalNamesPath.mkdir(); if (normalNamesPath.isDirectory() && canMoveFiles(cachePath, normalNamesPath, FileLoader.MEDIA_DIR_FILES)) { AndroidUtilities.createEmptyFile(new File(normalNamesPath, ".nomedia")); @@ -2581,7 +2581,7 @@ public SparseArray createMediaPaths() { } if (publicMediaDir != null && publicMediaDir.isDirectory()) { try { - File imagePath = new File(publicMediaDir, "Nullgram Images"); + File imagePath = new File(publicMediaDir, "Nnngram Images"); imagePath.mkdir(); if (imagePath.isDirectory() && canMoveFiles(cachePath, imagePath, FileLoader.MEDIA_DIR_IMAGE)) { mediaDirs.put(FileLoader.MEDIA_DIR_IMAGE_PUBLIC, imagePath); @@ -2594,7 +2594,7 @@ public SparseArray createMediaPaths() { } try { - File videoPath = new File(publicMediaDir, "Nullgram Video"); + File videoPath = new File(publicMediaDir, "Nnngram Video"); videoPath.mkdir(); if (videoPath.isDirectory() && canMoveFiles(cachePath, videoPath, FileLoader.MEDIA_DIR_VIDEO)) { mediaDirs.put(FileLoader.MEDIA_DIR_VIDEO_PUBLIC, videoPath); @@ -2832,11 +2832,13 @@ public void cancelLoadingForImageReceiver(final ImageReceiver imageReceiver, fin } WebInstantView.cancelLoadPhoto(imageReceiver); ArrayList runnables = imageReceiver.getLoadingOperations(); - if (!runnables.isEmpty()) { - for (int i = 0; i < runnables.size(); i++) { - imageLoadQueue.cancelRunnable(runnables.get(i)); + synchronized (runnables) { + if (!runnables.isEmpty()) { + for (int i = 0; i < runnables.size(); i++) { + imageLoadQueue.cancelRunnable(runnables.get(i)); + } + runnables.clear(); } - runnables.clear(); } imageReceiver.addLoadingImageRunnable(null); imageLoadQueue.postRunnable(() -> { diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/LocaleController.java b/TMessagesProj/src/main/java/org/telegram/messenger/LocaleController.java index b750c1352f..a22dc4db14 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/LocaleController.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/LocaleController.java @@ -57,8 +57,8 @@ import java.util.Locale; import java.util.TimeZone; -import top.qwq2333.gen.Config; -import top.qwq2333.nullgram.utils.Log; +import xyz.nextalone.gen.Config; +import xyz.nextalone.nnngram.utils.Log; public class LocaleController { @@ -1431,7 +1431,7 @@ private String getStringInternal(String key, String fallback, int fallbackRes, i return ApplicationLoader.applicationContext.getString(R.string.NullgramName); } case "TelegramFeaturesUrl": - return "t.me/NullgramClient"; + return "t.me/nagram_group"; case "UnsupportedMedia": return ApplicationLoader.applicationContext.getString(R.string.UnsupportedMediaNullgram); default: @@ -1462,10 +1462,14 @@ private String getStringInternal(String key, String fallback, int fallbackRes, i value = "LOC_ERR:" + key; } - if (value.contains("Telegram")) - value = value.replace("Telegram", "Nullgram"); +// if (value.contains("Telegram")) +// value = value.replace("Telegram", "Nnngram"); if (value.contains("TELEOFFICIAL")) value = value.replace("TELEOFFICIAL", "Telegram"); + if (value.contains("NullgramClient")) + value = value.replace("NullgramClient", "nagram_group"); + if (value.contains("Nullgram")) + value = value.replace("Nullgram", "Nnngram"); return value; } @@ -1663,12 +1667,15 @@ public static String formatString(String key, String fallback, int res, int fall } } - if (value.contains("Telegram")) { - value = value.replace("Telegram", "Nullgram"); - } +// if (value.contains("Telegram")) { +// value = value.replace("Telegram", "Nullgram"); +// } if (value.contains("TELEOFFICIAL")) { value = value.replace("TELEOFFICIAL", "Telegram"); } + if (value.contains("Nullgram")) { + value = value.replace("Nullgram", "Nnngram"); + } if (getInstance().currentLocale != null) { return String.format(getInstance().currentLocale, value, args); diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/MediaController.java b/TMessagesProj/src/main/java/org/telegram/messenger/MediaController.java index 07348d391b..5e37d41caf 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/MediaController.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/MediaController.java @@ -125,12 +125,12 @@ import java.util.concurrent.CountDownLatch; import kotlin.Unit; -import top.qwq2333.gen.Config; -import top.qwq2333.nullgram.CallStateListener; -import top.qwq2333.nullgram.SaveToDownloadReceiver; -import top.qwq2333.nullgram.utils.AudioUtils; -import top.qwq2333.nullgram.utils.Log; -import top.qwq2333.nullgram.utils.PermissionUtils; +import xyz.nextalone.gen.Config; +import xyz.nextalone.nnngram.CallStateListener; +import xyz.nextalone.nnngram.SaveToDownloadReceiver; +import xyz.nextalone.nnngram.utils.AudioUtils; +import xyz.nextalone.nnngram.utils.Log; +import xyz.nextalone.nnngram.utils.PermissionUtils; public class MediaController implements AudioManager.OnAudioFocusChangeListener, NotificationCenter.NotificationCenterDelegate, SensorEventListener { @@ -4529,7 +4529,7 @@ SaveToDownloadReceiver. makeNotification(context,notificationId,messageObjects.s break; } if (!sourceFile.exists()) { - sourceFile = FileLoader.getInstance(currentAccount.getCurrentAccount()).getPathToAttach(message.messageOwner, true); + sourceFile = FileLoader.getInstance(currentAccount.getCurrentAccount()).getPathToMessage(message.messageOwner); FileLog.d("saving file: correcting path from " + path + " to " + (sourceFile == null ? null : sourceFile.getAbsolutePath())); } if (sourceFile != null && sourceFile.exists()) { @@ -4790,11 +4790,11 @@ public static void saveFile(String fullPath, Context context, final int type, fi } else { File destFile; if (type == 0) { - destFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "Nullgram"); + destFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "Nnngram"); destFile.mkdirs(); destFile = new File(destFile, AndroidUtilities.generateFileName(0, FileLoader.getFileExtension(sourceFile))); } else if (type == 1) { - destFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES), "Nullgram"); + destFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES), "Nnngram"); destFile.mkdirs(); destFile = new File(destFile, AndroidUtilities.generateFileName(1, FileLoader.getFileExtension(sourceFile))); } else { @@ -4804,7 +4804,7 @@ public static void saveFile(String fullPath, Context context, final int type, fi } else { dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC); } - dir = new File(dir, "Nullgram"); + dir = new File(dir, "Nnngram"); dir.mkdirs(); destFile = new File(dir, name); if (destFile.exists()) { @@ -4909,7 +4909,7 @@ private static Uri saveFileInternal(int type, File sourceFile, String filename) filename = AndroidUtilities.generateFileName(0, extension); } uriToInsert = MediaStore.Images.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY); - File dirDest = new File(Environment.DIRECTORY_PICTURES, "Nullgram"); + File dirDest = new File(Environment.DIRECTORY_PICTURES, "Nnngram"); contentValues.put(MediaStore.MediaColumns.RELATIVE_PATH, dirDest + File.separator); contentValues.put(MediaStore.Images.Media.DISPLAY_NAME, filename); contentValues.put(MediaStore.Images.Media.MIME_TYPE, mimeType); @@ -4917,7 +4917,7 @@ private static Uri saveFileInternal(int type, File sourceFile, String filename) if (filename == null) { filename = AndroidUtilities.generateFileName(1, extension); } - File dirDest = new File(Environment.DIRECTORY_MOVIES, "Nullgram"); + File dirDest = new File(Environment.DIRECTORY_MOVIES, "Nnngram"); contentValues.put(MediaStore.MediaColumns.RELATIVE_PATH, dirDest + File.separator); uriToInsert = MediaStore.Video.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY); contentValues.put(MediaStore.Video.Media.DISPLAY_NAME, filename); @@ -4925,7 +4925,7 @@ private static Uri saveFileInternal(int type, File sourceFile, String filename) if (filename == null) { filename = sourceFile.getName(); } - File dirDest = new File(Environment.DIRECTORY_DOWNLOADS, "Nullgram"); + File dirDest = new File(Environment.DIRECTORY_DOWNLOADS, "Nnngram"); contentValues.put(MediaStore.MediaColumns.RELATIVE_PATH, dirDest + File.separator); uriToInsert = MediaStore.Downloads.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY); contentValues.put(MediaStore.Downloads.DISPLAY_NAME, filename); @@ -4933,7 +4933,7 @@ private static Uri saveFileInternal(int type, File sourceFile, String filename) if (filename == null) { filename = sourceFile.getName(); } - File dirDest = new File(Environment.DIRECTORY_MUSIC, "Nullgram"); + File dirDest = new File(Environment.DIRECTORY_MUSIC, "Nnngram"); contentValues.put(MediaStore.MediaColumns.RELATIVE_PATH, dirDest + File.separator); uriToInsert = MediaStore.Audio.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY); contentValues.put(MediaStore.Audio.Media.DISPLAY_NAME, filename); diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/MediaDataController.java b/TMessagesProj/src/main/java/org/telegram/messenger/MediaDataController.java index 44df25470f..22ee95e781 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/MediaDataController.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/MediaDataController.java @@ -111,8 +111,8 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -import top.qwq2333.gen.Config; -import top.qwq2333.nullgram.helpers.EntitiesHelper; +import xyz.nextalone.gen.Config; +import xyz.nextalone.nnngram.helpers.EntitiesHelper; @SuppressWarnings("unchecked") public class MediaDataController extends BaseController { @@ -3686,7 +3686,11 @@ public boolean isMessageFound(int messageId, boolean mergeDialog) { } public void searchMessagesInChat(String query, long dialogId, long mergeDialogId, int guid, int direction, long replyMessageId, TLRPC.User user, TLRPC.Chat chat, ReactionsLayoutInBubble.VisibleReaction reaction, TLRPC.MessagesFilter filter) { - searchMessagesInChat(query, dialogId, mergeDialogId, guid, direction, replyMessageId, false, user, chat, true, reaction, filter); + searchMessagesInChat(query, dialogId, mergeDialogId, guid, direction, replyMessageId, false, user, chat, true, reaction, filter, false); + } + + public void searchMessagesInChat(String query, long dialogId, long mergeDialogId, int guid, int direction, long replyMessageId, TLRPC.User user, TLRPC.Chat chat, ReactionsLayoutInBubble.VisibleReaction reaction, TLRPC.MessagesFilter filter, boolean firstSearch) { + searchMessagesInChat(query, dialogId, mergeDialogId, guid, direction, replyMessageId, false, user, chat, true, reaction, filter, firstSearch); } public void jumpToSearchedMessage(int guid, int index) { @@ -3720,8 +3724,20 @@ public boolean searchEndReached() { return messagesSearchEndReached[0] && lastMergeDialogId == 0 && messagesSearchEndReached[1] || (loadingSearchLocal || loadedPredirectedSearchLocal); } + public void setCurrentMessage(int index) { + lastReturnedNum = index; + } + + public void setCurrentMaxMessage() { + lastReturnedNum = searchResultMessages.size() - 1; + } + public void loadMoreSearchMessages(boolean fromList) { - if (loadingMoreSearchMessages || reqId != 0 || messagesSearchEndReached[0] && lastMergeDialogId == 0 && messagesSearchEndReached[1]) { + loadMoreSearchMessages(fromList, false); + } + + public void loadMoreSearchMessages(boolean fromList, boolean force) { + if (!force && (loadingMoreSearchMessages || reqId != 0 || messagesSearchEndReached[0] && lastMergeDialogId == 0 && messagesSearchEndReached[1])) { return; } int temp = lastReturnedNum; @@ -3735,8 +3751,12 @@ public boolean isSearchLoading() { return reqId != 0; } + public void searchMessagesInChat(String query, long dialogId, long mergeDialogId, int guid, int direction, long replyMessageId, boolean internal, TLRPC.User user, TLRPC.Chat chat, boolean jumpToMessage, ReactionsLayoutInBubble.VisibleReaction reaction, TLRPC.MessagesFilter filter) { + searchMessagesInChat(query, dialogId, mergeDialogId, guid, direction, replyMessageId, internal, user, chat, jumpToMessage, reaction, filter, false); + } + public void searchMessagesInChat(String query, long dialogId, long mergeDialogId, int guid, int direction, long replyMessageId, boolean internal, TLRPC.User user, TLRPC.Chat chat, - boolean jumpToMessage, ReactionsLayoutInBubble.VisibleReaction reaction, TLRPC.MessagesFilter filter) { + boolean jumpToMessage, ReactionsLayoutInBubble.VisibleReaction reaction, TLRPC.MessagesFilter filter, boolean firstSearch) { int max_id = 0; long queryWithDialog = dialogId; boolean firstQuery = !internal; @@ -3854,11 +3874,11 @@ public void searchMessagesInChat(String query, long dialogId, long mergeDialogId TLRPC.messages_Messages res = (TLRPC.messages_Messages) response; messagesSearchEndReached[1] = res.messages.isEmpty(); messagesSearchCount[1] = res instanceof TLRPC.TL_messages_messagesSlice ? res.count : res.messages.size(); - searchMessagesInChat(req.q, dialogId, mergeDialogId, guid, direction, replyMessageId, true, user, chat, jumpToMessage, reaction, filter); + searchMessagesInChat(req.q, dialogId, mergeDialogId, guid, direction, replyMessageId, true, user, chat, jumpToMessage, reaction, filter, firstSearch); } else { messagesSearchEndReached[1] = true; messagesSearchCount[1] = 0; - searchMessagesInChat(req.q, dialogId, mergeDialogId, guid, direction, replyMessageId, true, user, chat, jumpToMessage, reaction, filter); + searchMessagesInChat(req.q, dialogId, mergeDialogId, guid, direction, replyMessageId, true, user, chat, jumpToMessage, reaction, filter, firstSearch); } } }), ConnectionsManager.RequestFlagFailOnServerErrors); @@ -4002,7 +4022,7 @@ public void searchMessagesInChat(String query, long dialogId, long mergeDialogId lastReturnedNum = searchResultMessages.size() - 1; } MessageObject messageObject = searchResultMessages.get(lastReturnedNum); - getNotificationCenter().postNotificationName(NotificationCenter.chatSearchResultsAvailable, guid, messageObject.getId(), getMask(), messageObject.getDialogId(), lastReturnedNum, getSearchCount(), jumpToMessage); + getNotificationCenter().postNotificationName(NotificationCenter.chatSearchResultsAvailable, guid, messageObject.getId(), getMask(), messageObject.getDialogId(), lastReturnedNum, getSearchCount(), jumpToMessage, firstSearch, filter); } else if (isSaved) { getNotificationCenter().postNotificationName(NotificationCenter.chatSearchResultsAvailable, guid, 0, getMask(), dialogId, lastReturnedNum, getSearchCount(), false); } @@ -8318,7 +8338,7 @@ public void checkAllMedia(boolean force) { loadFeaturedDate[0] = 0; loadFeaturedDate[1] = 0; } - loadRecents(MediaDataController.TYPE_FAVE, false, true, false); + loadRecents(MediaDataController.TYPE_FAVE, false, false, true); loadRecents(MediaDataController.TYPE_GREETINGS, false, true, false); loadRecents(MediaDataController.TYPE_PREMIUM_STICKERS, false, false, true); checkFeaturedStickers(); diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/MessageObject.java b/TMessagesProj/src/main/java/org/telegram/messenger/MessageObject.java index bd309fc913..d71fe6d066 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/MessageObject.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/MessageObject.java @@ -116,8 +116,8 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -import top.qwq2333.gen.Config; -import top.qwq2333.nullgram.utils.StringUtils; +import xyz.nextalone.gen.Config; +import xyz.nextalone.nnngram.utils.StringUtils; public class MessageObject { @@ -5163,6 +5163,8 @@ private void updateMessageText(AbstractMap users, AbstractMap< if (messageText == null) { messageText = ""; + } else { + messageText = StringUtils.zalgoFilter(messageText); } } diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/MessagesController.java b/TMessagesProj/src/main/java/org/telegram/messenger/MessagesController.java index a1842cda4e..38ffc30d04 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/MessagesController.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/MessagesController.java @@ -127,7 +127,7 @@ import java.util.concurrent.CountDownLatch; import java.util.stream.Collectors; -import top.qwq2333.gen.Config; +import xyz.nextalone.gen.Config; public class MessagesController extends BaseController implements NotificationCenter.NotificationCenterDelegate { @@ -20254,7 +20254,7 @@ public String getRestrictionReason(ArrayList reasons) { TLRPC.RestrictionReason reason = reasons.get(a); if (ignoreRestrictionReasons != null && ignoreRestrictionReasons.contains(reason.reason)) continue; if ("sensitive".equals(reason.reason)) continue; - if ("all".equals(reason.platform) || ("android".equals(reason.platform) && BuildConfig.isPlay)) { + if ("all".equals(reason.platform)) { return reason.text; } } @@ -20268,7 +20268,7 @@ public boolean isSensitive(ArrayList reasons) { for (int a = 0, N = reasons.size(); a < N; a++) { TLRPC.RestrictionReason reason = reasons.get(a); if (ignoreRestrictionReasons != null && ignoreRestrictionReasons.contains(reason.reason)) continue; - if ("all".equals(reason.platform) || ("android".equals(reason.platform) && BuildConfig.isPlay)) { + if ("all".equals(reason.platform)) { if ("sensitive".equals(reason.reason)) return true; } } diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/MessagesStorage.java b/TMessagesProj/src/main/java/org/telegram/messenger/MessagesStorage.java index 62276e6513..ac4f01a0e8 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/MessagesStorage.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/MessagesStorage.java @@ -75,7 +75,7 @@ import java.util.concurrent.atomic.AtomicReference; import java.util.function.Consumer; -import top.qwq2333.gen.Config; +import xyz.nextalone.gen.Config; public class MessagesStorage extends BaseController { diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/NotificationsController.java b/TMessagesProj/src/main/java/org/telegram/messenger/NotificationsController.java index bb55408317..c8ca8365ab 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/NotificationsController.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/NotificationsController.java @@ -103,8 +103,8 @@ import java.util.concurrent.CountDownLatch; import java.util.function.Consumer; -import top.qwq2333.gen.Config; -import top.qwq2333.nullgram.helpers.PasscodeHelper; +import xyz.nextalone.gen.Config; +import xyz.nextalone.nnngram.helpers.PasscodeHelper; public class NotificationsController extends BaseController { @@ -3439,7 +3439,7 @@ private String createNotificationShortcut(NotificationCompat.Builder builder, lo } else { icon = IconCompat.createWithResource(ApplicationLoader.applicationContext, R.drawable.book_group); } - if (supportsBubble) { + if (!Config.disableNotificationBubble && supportsBubble) { NotificationCompat.BubbleMetadata.Builder bubbleBuilder = new NotificationCompat.BubbleMetadata.Builder( PendingIntent.getActivity(ApplicationLoader.applicationContext, 0, intent, PendingIntent.FLAG_MUTABLE | PendingIntent.FLAG_UPDATE_CURRENT), @@ -4368,7 +4368,7 @@ private void showOrUpdateNotification(boolean notifyAboutLast) { PendingIntent contentIntent = PendingIntent.getActivity(ApplicationLoader.applicationContext, 0, intent, PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_ONE_SHOT); mBuilder.setContentTitle(name) - .setSmallIcon(R.drawable.notification) + .setSmallIcon(R.drawable.na_notification) .setAutoCancel(true) .setNumber(total_unread_count) .setContentIntent(contentIntent) @@ -5336,7 +5336,7 @@ void call() { NotificationCompat.Builder builder = new NotificationCompat.Builder(ApplicationLoader.applicationContext) .setContentTitle(name) - .setSmallIcon(R.drawable.notification) + .setSmallIcon(R.drawable.na_notification) .setContentText(text.toString()) .setAutoCancel(true) .setNumber(dialogKey.story ? storyPushMessages.size() : messageObjects.size()) diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/SendMessagesHelper.java b/TMessagesProj/src/main/java/org/telegram/messenger/SendMessagesHelper.java index 2f7eb44554..f145407938 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/SendMessagesHelper.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/SendMessagesHelper.java @@ -113,8 +113,8 @@ import java.util.zip.ZipInputStream; import kotlin.Pair; -import top.qwq2333.gen.Config; -import top.qwq2333.nullgram.utils.StringUtils; +import xyz.nextalone.gen.Config; +import xyz.nextalone.nnngram.utils.StringUtils; public class SendMessagesHelper extends BaseController implements NotificationCenter.NotificationCenterDelegate { @@ -8762,6 +8762,10 @@ public static void prepareSendingMedia(AccountInstance accountInstance, ArrayLis } } } else { + if (Config.sendMp4DocumentAsVideo) { + info.isVideo = info.path.endsWith("mp4"); + info.doNotCompress = info.isVideo; + } if (info.isVideo || info.videoEditedInfo != null) { Bitmap thumb = null; String thumbKey = null; diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/SharedConfig.java b/TMessagesProj/src/main/java/org/telegram/messenger/SharedConfig.java index c8fad0ff5f..cf2dd7d99a 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/SharedConfig.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/SharedConfig.java @@ -63,12 +63,12 @@ import java.util.List; import java.util.Locale; -import top.qwq2333.gen.Config; -import top.qwq2333.nullgram.helpers.WebSocketHelper; -import top.qwq2333.nullgram.utils.AlertUtil; -import top.qwq2333.nullgram.utils.Defines; -import top.qwq2333.nullgram.utils.Log; -import top.qwq2333.nullgram.utils.StringUtils; +import xyz.nextalone.gen.Config; +import xyz.nextalone.nnngram.helpers.WebSocketHelper; +import xyz.nextalone.nnngram.utils.AlertUtil; +import xyz.nextalone.nnngram.utils.Defines; +import xyz.nextalone.nnngram.utils.Log; +import xyz.nextalone.nnngram.utils.StringUtils; public class SharedConfig { /** @@ -302,8 +302,8 @@ private static boolean isWhitelisted(MediaCodecInfo codecInfo) { public static boolean raiseToListen = true; public static boolean nextMediaTap = true; public static boolean recordViaSco = false; - public static boolean customTabs = true; - public static boolean inappBrowser = true; + public static boolean customTabs = false; + public static boolean inappBrowser = false; public static boolean adaptableColorInBrowser = true; public static boolean onlyLocalInstantView = false; public static boolean directShare = true; @@ -859,7 +859,7 @@ public static void loadConfig() { raiseToSpeak = preferences.getBoolean("raise_to_speak", false); nextMediaTap = preferences.getBoolean("next_media_on_tap", true); recordViaSco = preferences.getBoolean("record_via_sco", false); - customTabs = preferences.getBoolean("custom_tabs", true); + customTabs = preferences.getBoolean("custom_tabs", false); inappBrowser = preferences.getBoolean("inapp_browser", false); adaptableColorInBrowser = preferences.getBoolean("adaptableBrowser", false); onlyLocalInstantView = preferences.getBoolean("onlyLocalInstantView", BuildVars.DEBUG_PRIVATE_VERSION); @@ -1805,10 +1805,10 @@ public static void deleteProxy(ProxyInfo proxyInfo) { public static void checkSaveToGalleryFiles() { Utilities.globalQueue.postRunnable(() -> { try { - File telegramPath = new File(Environment.getExternalStorageDirectory(), "Nullgram"); - File imagePath = new File(telegramPath, "Nullgram Images"); + File telegramPath = new File(Environment.getExternalStorageDirectory(), "Nnngram"); + File imagePath = new File(telegramPath, "Nnngram Images"); imagePath.mkdir(); - File videoPath = new File(telegramPath, "Nullgram Video"); + File videoPath = new File(telegramPath, "Nnngram Video"); videoPath.mkdir(); if (!BuildVars.NO_SCOPED_STORAGE) { diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/TranslateController.java b/TMessagesProj/src/main/java/org/telegram/messenger/TranslateController.java index 44b344ea6a..8ed088eafb 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/TranslateController.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/TranslateController.java @@ -50,7 +50,7 @@ import java.util.Set; import kotlin.Unit; -import top.qwq2333.nullgram.helpers.TranslateHelper; +import xyz.nextalone.nnngram.helpers.TranslateHelper; public class TranslateController extends BaseController { diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/UserConfig.java b/TMessagesProj/src/main/java/org/telegram/messenger/UserConfig.java index be575cfd05..7aac13adfc 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/UserConfig.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/UserConfig.java @@ -30,8 +30,8 @@ import java.util.Arrays; -import top.qwq2333.nullgram.helpers.PasscodeHelper; -import top.qwq2333.nullgram.utils.AnalyticsUtils; +import xyz.nextalone.nnngram.helpers.PasscodeHelper; +import xyz.nextalone.nnngram.utils.AnalyticsUtils; public class UserConfig extends BaseController { diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/UserObject.java b/TMessagesProj/src/main/java/org/telegram/messenger/UserObject.java index 4d67f897bb..2180b07a9b 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/UserObject.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/UserObject.java @@ -26,6 +26,8 @@ import org.telegram.PhoneFormat.PhoneFormat; import org.telegram.tgnet.TLRPC; +import xyz.nextalone.nnngram.utils.StringUtils; + public class UserObject { public static final long REPLY_BOT = 1271266957L; @@ -123,7 +125,7 @@ public static String getFirstName(TLRPC.User user, boolean allowShort) { } else if (!allowShort && name.length() <= 2) { return ContactsController.formatName(user.first_name, user.last_name); } - return !TextUtils.isEmpty(name) ? name : LocaleController.getString(R.string.HiddenName); + return !TextUtils.isEmpty(name) ? StringUtils.zalgoFilter(name) : LocaleController.getString(R.string.HiddenName); } public static String getForcedFirstName(TLRPC.User user) { @@ -141,7 +143,7 @@ public static String getForcedFirstName(TLRPC.User user) { if (index >= 0) { name = name.substring(0, index); } - return name; + return StringUtils.zalgoFilter(name); } public static boolean hasPhoto(TLRPC.User user) { diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/camera/CameraView.java b/TMessagesProj/src/main/java/org/telegram/messenger/camera/CameraView.java index 29ef2772dc..30c669ca41 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/camera/CameraView.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/camera/CameraView.java @@ -106,7 +106,7 @@ import javax.microedition.khronos.egl.EGLDisplay; import javax.microedition.khronos.egl.EGLSurface; -import top.qwq2333.gen.Config; +import xyz.nextalone.gen.Config; @SuppressLint("NewApi") public class CameraView extends FrameLayout implements TextureView.SurfaceTextureListener, CameraController.ICameraView, CameraController.ErrorCallback { diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/voip/VoIPPreNotificationService.java b/TMessagesProj/src/main/java/org/telegram/messenger/voip/VoIPPreNotificationService.java index e92e5af4ac..6fc4273b77 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/voip/VoIPPreNotificationService.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/voip/VoIPPreNotificationService.java @@ -357,7 +357,11 @@ private static void startRinging(Context context, int account, long user_id) { } else if (vibrate == 3) { duration *= 2; } - vibrator.vibrate(new long[]{0, duration, 500}, 0); + AudioAttributes audioAttributes = new AudioAttributes.Builder() + .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION) + .setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE) + .build(); + vibrator.vibrate(new long[]{0, duration, 500}, 0, audioAttributes); } } } diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/voip/VoIPService.java b/TMessagesProj/src/main/java/org/telegram/messenger/voip/VoIPService.java index 1fc9980c10..30d4333179 100755 --- a/TMessagesProj/src/main/java/org/telegram/messenger/voip/VoIPService.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/voip/VoIPService.java @@ -152,7 +152,7 @@ import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; -import top.qwq2333.nullgram.utils.PermissionUtils; +import xyz.nextalone.nnngram.utils.PermissionUtils; @SuppressLint("NewApi") public class VoIPService extends Service implements SensorEventListener, AudioManager.OnAudioFocusChangeListener, VoIPController.ConnectionStateListener, NotificationCenter.NotificationCenterDelegate, VoIPServiceState { @@ -3148,7 +3148,11 @@ private void startRingtoneAndVibration(long chatID) { } else if (vibrate == 3) { duration *= 2; } - vibrator.vibrate(new long[]{0, duration, 500}, 0); + AudioAttributes audioAttributes = new AudioAttributes.Builder() + .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION) + .setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE) + .build(); + vibrator.vibrate(new long[]{0, duration, 500}, 0, audioAttributes); } } } diff --git a/TMessagesProj/src/main/java/org/telegram/tgnet/ConnectionsManager.java b/TMessagesProj/src/main/java/org/telegram/tgnet/ConnectionsManager.java index 1b5c682276..04862cfd59 100644 --- a/TMessagesProj/src/main/java/org/telegram/tgnet/ConnectionsManager.java +++ b/TMessagesProj/src/main/java/org/telegram/tgnet/ConnectionsManager.java @@ -89,11 +89,11 @@ import javax.net.ssl.SSLException; -import top.qwq2333.gen.Config; -import top.qwq2333.nullgram.helpers.WebSocketHelper; -import top.qwq2333.nullgram.utils.DatabaseUtils; -import top.qwq2333.nullgram.utils.Log; -import top.qwq2333.nullgram.utils.Utils; +import xyz.nextalone.gen.Config; +import xyz.nextalone.nnngram.helpers.WebSocketHelper; +import xyz.nextalone.nnngram.utils.DatabaseUtils; +import xyz.nextalone.nnngram.utils.Log; +import xyz.nextalone.nnngram.utils.Utils; @SuppressWarnings("JavaJniMissingFunction") public class ConnectionsManager extends BaseController { diff --git a/TMessagesProj/src/main/java/org/telegram/tgnet/TLRPC.java b/TMessagesProj/src/main/java/org/telegram/tgnet/TLRPC.java index 63fef7518b..4f8f801668 100644 --- a/TMessagesProj/src/main/java/org/telegram/tgnet/TLRPC.java +++ b/TMessagesProj/src/main/java/org/telegram/tgnet/TLRPC.java @@ -50,7 +50,7 @@ import java.util.ArrayList; import java.util.HashMap; -import top.qwq2333.nullgram.utils.Defines; +import xyz.nextalone.nnngram.utils.Defines; @SuppressWarnings("unchecked") public class TLRPC { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBar.java b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBar.java index 5597195da6..664458aa97 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBar.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBar.java @@ -77,7 +77,7 @@ import java.util.ArrayList; -import top.qwq2333.gen.Config; +import xyz.nextalone.gen.Config; public class ActionBar extends FrameLayout { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBarLayout.java b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBarLayout.java index 5f9a149681..4e9fd4c755 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBarLayout.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBarLayout.java @@ -87,8 +87,9 @@ import java.util.Collections; import java.util.List; -import top.qwq2333.gen.Config; -import top.qwq2333.nullgram.utils.VibrationUtils; +import xyz.nextalone.gen.Config; +import xyz.nextalone.nnngram.utils.VibrationUtils; +import xyz.nextalone.nnngram.utils.VibrationUtils; public class ActionBarLayout extends FrameLayout implements INavigationLayout, FloatingDebugProvider { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBarMenuItem.java b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBarMenuItem.java index 22ef12daab..f835b97ab6 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBarMenuItem.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBarMenuItem.java @@ -331,7 +331,7 @@ public boolean onTouchEvent(MotionEvent event) { View child = popupLayout.getItemAt(a); child.getHitRect(rect); Object tag = child.getTag(); - if (tag instanceof Integer && (Integer) tag < 100) { + if (tag instanceof Integer) { if (!rect.contains((int) x, (int) y)) { child.setPressed(false); child.setSelected(false); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/AlertDialog.java b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/AlertDialog.java index e614b1e498..c5695a1b58 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/AlertDialog.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/AlertDialog.java @@ -810,6 +810,8 @@ protected boolean drawChild(Canvas canvas, View child, long drawingTime) { lineProgressViewPercent.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); containerView.addView(lineProgressViewPercent, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.TOP, 23, 4, 23, 24)); updateLineProgressTextView(); + backgroundColor = getThemedColor(Theme.key_dialog_inlineProgressBackground); + containerView.setBackgroundDrawable(Theme.createRoundRectDrawable(AndroidUtilities.dp(18), backgroundColor)); } else if (progressViewStyle == ALERT_TYPE_SPINNER) { setCanceledOnTouchOutside(false); setCancelable(false); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BaseFragment.java b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BaseFragment.java index fdf7e13e8f..a57f79b4e3 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BaseFragment.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BaseFragment.java @@ -71,11 +71,11 @@ import java.util.ArrayList; -import top.qwq2333.gen.Config; -import top.qwq2333.nullgram.config.CloudStorage; -import top.qwq2333.nullgram.helpers.ConnectionsHelper; -import top.qwq2333.nullgram.utils.MessageUtils; -import top.qwq2333.nullgram.utils.VibrationUtils; +import xyz.nextalone.gen.Config; +import xyz.nextalone.nnngram.config.CloudStorage; +import xyz.nextalone.nnngram.helpers.ConnectionsHelper; +import xyz.nextalone.nnngram.utils.MessageUtils; +import xyz.nextalone.nnngram.utils.VibrationUtils; public abstract class BaseFragment { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/DrawerLayoutContainer.java b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/DrawerLayoutContainer.java index 718d025004..5ecd922d3d 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/DrawerLayoutContainer.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/DrawerLayoutContainer.java @@ -55,7 +55,7 @@ import org.telegram.messenger.R; import org.telegram.messenger.Utilities; -import top.qwq2333.nullgram.utils.Log; +import xyz.nextalone.nnngram.utils.Log; public class DrawerLayoutContainer extends FrameLayout { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/Theme.java b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/Theme.java index 03638dacc2..dfce86abcb 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/Theme.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/Theme.java @@ -161,7 +161,7 @@ import java.util.Objects; import java.util.concurrent.CountDownLatch; -import top.qwq2333.nullgram.helpers.MonetHelper; +import xyz.nextalone.nnngram.helpers.MonetHelper; public class Theme { @@ -2523,7 +2523,8 @@ public boolean isDark() { } public boolean isLight() { - return pathToFile == null && !isDark(); +// return pathToFile == null && !isDark(); // don't use pathToFile to determine light theme + return !isDark(); } public String getKey() { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Adapters/DrawerLayoutAdapter.java b/TMessagesProj/src/main/java/org/telegram/ui/Adapters/DrawerLayoutAdapter.java index 8608b6ede2..c5241806ef 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Adapters/DrawerLayoutAdapter.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Adapters/DrawerLayoutAdapter.java @@ -49,7 +49,8 @@ import java.util.ArrayList; import java.util.Collections; -import top.qwq2333.nullgram.helpers.PasscodeHelper; +import xyz.nextalone.gen.Config; +import xyz.nextalone.nnngram.helpers.PasscodeHelper; public class DrawerLayoutAdapter extends RecyclerListView.SelectionAdapter { @@ -315,20 +316,20 @@ private void resetItems() { } UserConfig me = UserConfig.getInstance(UserConfig.selectedAccount); boolean showDivider = false; - items.add(new Item(16, LocaleController.getString(R.string.MyProfile), R.drawable.left_status_profile)); - if (me != null && me.isPremium()) { - if (me.getEmojiStatus() != null) { + if (Config.showProfileMyStories) { + items.add(new Item(16, LocaleController.getString(R.string.MyProfile), R.drawable.left_status_profile)); + showDivider = true; + } + if (Config.showChangeEmojiStatus) { + if (me != null && me.isPremium()) { + if (me.getEmojiStatus() != null) { items.add(new Item(15, LocaleController.getString(R.string.ChangeEmojiStatus), R.drawable.msg_status_edit)); - } else { + } else { items.add(new Item(15, LocaleController.getString(R.string.SetEmojiStatus), R.drawable.msg_status_set)); + } + showDivider = true; } - showDivider = true; } -// if (MessagesController.getInstance(UserConfig.selectedAccount).storiesEnabled()) { -// items.add(new Item(17, LocaleController.getString(R.string.ProfileStories), R.drawable.msg_menu_stories)); -// showDivider = true; -// } - showDivider = true; if (ApplicationLoader.applicationLoaderInstance != null) { if (ApplicationLoader.applicationLoaderInstance.extendDrawer(items)) { showDivider = true; @@ -347,16 +348,30 @@ private void resetItems() { if (showDivider) { items.add(null); // divider } - items.add(new Item(2, LocaleController.getString(R.string.NewGroup), newGroupIcon)); - //items.add(new Item(3, LocaleController.getString(R.string.NewSecretChat), newSecretIcon)); - //items.add(new Item(4, LocaleController.getString(R.string.NewChannel), newChannelIcon)); - items.add(new Item(6, LocaleController.getString(R.string.Contacts), contactsIcon)); - items.add(new Item(10, LocaleController.getString(R.string.Calls), callsIcon)); - items.add(new Item(11, LocaleController.getString(R.string.SavedMessages), savedIcon)); + if (Config.showNewGroup) { + items.add(new Item(2, LocaleController.getString(R.string.NewGroup), newGroupIcon)); + } + //items.add(new Item(3, LocaleController.getString("NewSecretChat", R.string.NewSecretChat), newSecretIcon)); + //items.add(new Item(4, LocaleController.getString("NewChannel", R.string.NewChannel), newChannelIcon)); + if (Config.showContacts) { + items.add(new Item(6, LocaleController.getString(R.string.Contacts), contactsIcon)); + } + if (Config.showCalls) { + items.add(new Item(10, LocaleController.getString(R.string.Calls), callsIcon)); + } +// if (Config.showPeopleNearby && hasGps) { +// items.add(new Item(12, LocaleController.getString(R.string.PeopleNearby), peopleNearbyIcon)); +// } + if (Config.showSavedMessages) { + items.add(new Item(11, LocaleController.getString(R.string.SavedMessages), savedIcon)); + } + if (Config.showArchivedChats) { + items.add(new Item(18, LocaleController.getString(R.string.ArchivedChats), R.drawable.msg_archive)); + } items.add(new Item(8, LocaleController.getString(R.string.Settings), settingsIcon)); - items.add(null); // divider - items.add(new Item(7, LocaleController.getString(R.string.InviteFriends), inviteIcon)); - items.add(new Item(13, LocaleController.getString(R.string.TelegramFeatures), helpIcon)); +// items.add(null); // divider +// items.add(new Item(7, LocaleController.getString(R.string.InviteFriends), inviteIcon)); +// items.add(new Item(13, LocaleController.getString(R.string.TelegramFeatures), helpIcon)); } public boolean click(View view, int position) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ArticleViewer.java b/TMessagesProj/src/main/java/org/telegram/ui/ArticleViewer.java index 5425fcd3f1..d05efd8966 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ArticleViewer.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ArticleViewer.java @@ -234,7 +234,7 @@ import java.util.List; import java.util.Locale; -import top.qwq2333.gen.Config; +import xyz.nextalone.gen.Config; public class ArticleViewer implements NotificationCenter.NotificationCenterDelegate { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/AvatarPreviewer.java b/TMessagesProj/src/main/java/org/telegram/ui/AvatarPreviewer.java index ae37eb6437..4d4f9b9aa9 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/AvatarPreviewer.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/AvatarPreviewer.java @@ -55,7 +55,7 @@ import java.util.Collections; import java.util.Objects; -import top.qwq2333.gen.Config; +import xyz.nextalone.gen.Config; public class AvatarPreviewer { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/BasePermissionsActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/BasePermissionsActivity.java index 5b549431d2..ffd4f64c0b 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/BasePermissionsActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/BasePermissionsActivity.java @@ -21,7 +21,7 @@ import org.telegram.ui.ActionBar.Theme; import org.telegram.ui.Components.AlertsCreator; -import top.qwq2333.nullgram.utils.PermissionUtils; +import xyz.nextalone.nnngram.utils.PermissionUtils; public class BasePermissionsActivity extends FragmentActivity { public final static int REQUEST_CODE_GEOLOCATION = 2, diff --git a/TMessagesProj/src/main/java/org/telegram/ui/BubbleActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/BubbleActivity.java index 7d0d00bf25..50e8fd8e7f 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/BubbleActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/BubbleActivity.java @@ -36,7 +36,7 @@ import java.util.ArrayList; -import top.qwq2333.gen.Config; +import xyz.nextalone.gen.Config; public class BubbleActivity extends BasePermissionsActivity implements INavigationLayout.INavigationLayoutDelegate { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/CalendarActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/CalendarActivity.java index 883189a157..c97669bcec 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/CalendarActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/CalendarActivity.java @@ -69,7 +69,7 @@ import java.util.ArrayList; import java.util.Calendar; -import top.qwq2333.gen.Config; +import xyz.nextalone.gen.Config; public class CalendarActivity extends BaseFragment implements NotificationCenter.NotificationCenterDelegate { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/CameraScanActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/CameraScanActivity.java index c382cf9d91..7d6098205e 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/CameraScanActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/CameraScanActivity.java @@ -83,8 +83,8 @@ import java.util.ArrayList; import java.util.HashMap; -import top.qwq2333.nullgram.helpers.QrHelper; -import top.qwq2333.nullgram.utils.PermissionUtils; +import xyz.nextalone.nnngram.helpers.QrHelper; +import xyz.nextalone.nnngram.utils.PermissionUtils; public class CameraScanActivity extends BaseFragment { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/BaseCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/BaseCell.java index 3a651cf9e4..90442a0588 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/BaseCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/BaseCell.java @@ -33,7 +33,7 @@ import android.view.ViewConfiguration; import android.view.ViewGroup; -import top.qwq2333.gen.Config; +import xyz.nextalone.gen.Config; import androidx.annotation.NonNull; import androidx.annotation.Nullable; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatMessageCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatMessageCell.java index a69d60f4d3..6b5687ffa3 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatMessageCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatMessageCell.java @@ -241,12 +241,13 @@ import java.util.Stack; import java.util.concurrent.atomic.AtomicReference; -import top.qwq2333.gen.Config; -import top.qwq2333.nullgram.config.ConfigManager; -import top.qwq2333.nullgram.utils.Defines; -import top.qwq2333.nullgram.utils.Log; -import top.qwq2333.nullgram.utils.StringUtils; -import top.qwq2333.nullgram.utils.Utils; +import xyz.nextalone.gen.Config; +import xyz.nextalone.nnngram.config.ConfigManager; +import xyz.nextalone.nnngram.utils.Defines; +import xyz.nextalone.nnngram.utils.Log; +import xyz.nextalone.nnngram.utils.NeteaseEmbed; +import xyz.nextalone.nnngram.utils.StringUtils; +import xyz.nextalone.nnngram.utils.Utils; public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate, ImageReceiver.ImageReceiverDelegate, DownloadController.FileDownloadProgressListener, TextSelectionHelper.SelectableView, NotificationCenter.NotificationCenterDelegate { private final static int TIME_APPEAR_MS = 200; @@ -1747,6 +1748,52 @@ public Theme.ResourcesProvider getResourcesProvider() { return resourcesProvider; } + public void drawStatusWithImage(Canvas canvas, ImageReceiver imageReceiver, int radius) { + String formatUserStatus = currentUser != null ? LocaleController.formatUserStatus(this.currentAccount, currentUser) : ""; + if (!Config.showOnlineStatus || currentUser == null || currentUser.bot) { + imageReceiver.draw(canvas); + return; + } + int diff = -60 * 60 - 1; + if (Config.showOnlineStatus) { + if (currentUser != null && currentUser.status != null) { + diff = currentUser.status.expires - ConnectionsManager.getInstance(currentAccount).getCurrentTime(); + } + if (diff < -60 * 60) { + imageReceiver.draw(canvas); + return; + } + } else if (!formatUserStatus.equals(LocaleController.getString("Online", R.string.Online))) { + imageReceiver.draw(canvas); + return; + } + int x = Math.round(imageReceiver.getImageX2()); + int y = Math.round(imageReceiver.getImageY2()); + int circleRadius = radius - AndroidUtilities.dp(2.25f); + int spaceLeft = radius - circleRadius; + int xCenterRegion = x - spaceLeft; + int yCenterRegion = y - spaceLeft; + int colorOnline = diff > 0 + ? Theme.getColor(Theme.key_chats_onlineCircle) + : diff > -15 * 60 + ? android.graphics.Color.argb(255, 234, 234, 30) + : diff > -30 * 60 + ? android.graphics.Color.argb(255, 234, 132, 30) + : diff > -60 * 60 + ? android.graphics.Color.argb(255, 234, 30, 30) + : 0; + Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); + paint.setColor(colorOnline); + canvas.save(); + Path p = new Path(); + p.addCircle(x - radius, y - radius, radius, Path.Direction.CW); + p.toggleInverseFillType(); + canvas.clipPath(p); + imageReceiver.draw(canvas); + canvas.restore(); + canvas.drawCircle(xCenterRegion - circleRadius, yCenterRegion - circleRadius, circleRadius, paint); + } + private void createPollUI() { if (pollAvatarImages != null) { return; @@ -5736,7 +5783,7 @@ private void setMessageContent(MessageObject messageObject, MessageObject.Groupe drawSideButton = checkNeedDrawShareButton(messageObject) ? 2 : 0; } else if (messageObject.searchType == ChatActivity.SEARCH_MY_MESSAGES) { drawSideButton = 0; - } else if (MessagesController.getInstance(currentAccount).isChatNoForwards(messageObject.getChatId()) || (messageObject.messageOwner != null && messageObject.messageOwner.noforwards)) { + } else if (!Config.ignoreChatStrict && (MessagesController.getInstance(currentAccount).isChatNoForwards(messageObject.getChatId()) || (messageObject.messageOwner != null && messageObject.messageOwner.noforwards))) { drawSideButton = 0; } else { drawSideButton = !isRepliesChat && checkNeedDrawShareButton(messageObject) ? 1 : 0; @@ -6135,6 +6182,7 @@ private void setMessageContent(MessageObject messageObject, MessageObject.Groupe drawInstantView = hasLinkPreview && webpage.cached_page != null; String siteName = hasLinkPreview ? webpage.site_name : null; + NeteaseEmbed.fixWebPage(webpage); hasEmbed = hasLinkPreview && !TextUtils.isEmpty(webpage.embed_url) && !messageObject.isGif() && !"instagram".equalsIgnoreCase(siteName); boolean slideshow = false; String webpageType = webpage != null ? webpage.type : null; @@ -8820,6 +8868,10 @@ private void setMessageContent(MessageObject messageObject, MessageObject.Groupe } } } + if (messageObject.type == MessageObject.TYPE_GIF) { + w = w * Config.getGifSize() / 100; + h = h * Config.getGifSize() / 100; + } if (w == 0 || h == 0) { w = h = AndroidUtilities.dp(150); @@ -9212,7 +9264,7 @@ private void setMessageContent(MessageObject messageObject, MessageObject.Groupe photoImage.setOrientation(currentMessageObject.sendPreviewEntry.orientation, currentMessageObject.sendPreviewEntry.invert, true); photoImage.setImage(ImageLocation.getForPath("thumb://" + currentMessageObject.sendPreviewEntry.imageId + ":" + currentMessageObject.sendPreviewEntry.path), null, null, null, null, null, currentMessageObject.sendPreviewEntry.thumb, 0, null, messageObject, 0); } - + } } else if (autoPlayingMedia) { photoImage.setAllowStartAnimation(true); @@ -9598,7 +9650,7 @@ private void setMessageContent(MessageObject messageObject, MessageObject.Groupe botButtonsByPosition.clear(); botButtonsLayout = null; } - if (!messageObject.isRestrictedMessage && !messageObject.isRepostPreview && (currentPosition == null || currentMessagesGroup != null && currentMessagesGroup.isDocuments && currentPosition.last) && (messageObject.messageOwner.reply_markup instanceof TLRPC.TL_replyInlineMarkup) && !messageObject.hasExtendedMedia()) { + if (!isBlockedUserMessage() && !messageObject.isRestrictedMessage && !messageObject.isRepostPreview && (currentPosition == null || currentMessagesGroup != null && currentMessagesGroup.isDocuments && currentPosition.last) && (messageObject.messageOwner.reply_markup instanceof TLRPC.TL_replyInlineMarkup) && !messageObject.hasExtendedMedia()) { int rows; if (messageObject.messageOwner.reply_markup instanceof TLRPC.TL_replyInlineMarkup) { @@ -16049,6 +16101,9 @@ private void measureTime(MessageObject messageObject) { timeString = LocaleController.getInstance().getFormatterDay().format((long) (messageObject.messageOwner.date) * 1000); } } + if (currentMessageObject.translated) { + timeString = LocaleController.getString("TranslateMessage", R.string.TranslateMessage) + " " + timeString; + } if (Config.showMessageID && currentMessageObject.messageOwner != null && currentMessageObject.isSent() && messageObject.messageOwner.id >= 0) { timeString = timeString + " | " + messageObject.messageOwner.id; } @@ -16361,7 +16416,7 @@ private void setMessageObjectInternal(MessageObject messageObject) { && currentChat != null && currentMessageObject.isSenderChannel()) { if (Config.channelAlias) { String aliasName = ConfigManager.getStringOrDefault(Defines.channelAliasPrefix - + currentMessageObject.messageOwner.from_id.channel_id, null); + + currentMessageObject.messageOwner.from_id.channel_id, ""); String nickname = null; if (Config.linkedUser @@ -16853,7 +16908,7 @@ protected void onClick() { } else if (messageObject.replyMessageObject == null && messageObject.messageOwner.reply_to != null && messageObject.messageOwner.reply_to.reply_from != null) { name = messageObject.getReplyQuoteNameWithIcon(); } else if (messageObject.replyMessageObject != null) { - if (drawForwardedName) { + if (drawForwardedName && messageObject.getForwardedName() != null) { name = AndroidUtilities.removeDiacritics(messageObject.replyMessageObject.getForwardedName()); } @@ -24580,7 +24635,7 @@ public boolean animateChange() { changed = true; } } - + if (mediaOffsetY != lastMediaOffsetY) { animateFromMediaOffsetY = lastMediaOffsetY; animateMediaOffsetY = true; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/DialogCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/DialogCell.java index 60888f8695..707d9e1aaa 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/DialogCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/DialogCell.java @@ -138,8 +138,9 @@ import java.util.Objects; import java.util.Stack; -import top.qwq2333.gen.Config; -import top.qwq2333.nullgram.utils.MessageUtils; +import xyz.nextalone.gen.Config; +import xyz.nextalone.nnngram.utils.MessageUtils; +import xyz.nextalone.nnngram.utils.StringUtils; public class DialogCell extends BaseCell implements StoriesListPlaceProvider.AvatarOverlaysView { @@ -692,6 +693,10 @@ private void checkOnline() { } } boolean isOnline = isOnline(); + if (Config.showOnlineStatus && !isOnline && user != null && !user.self && user.status != null) { + final int diff = user.status.expires - ConnectionsManager.getInstance(currentAccount).getCurrentTime(); + isOnline = diff > -60 * 60; + } onlineProgress = isOnline ? 1.0f : 0.0f; } @@ -968,7 +973,7 @@ private CharSequence formatArchivedDialogNames() { } String title; if (currentChat != null) { - title = currentChat.title.replace('\n', ' '); + title = StringUtils.zalgoFilter(currentChat.title.replace('\n', ' ')); } else if (currentUser != null) { if (UserObject.isDeleted(currentUser)) { title = LocaleController.getString(R.string.HiddenName); @@ -1961,7 +1966,8 @@ public void buildLayout() { } } } - + if (topicIconInName == null) + nameString = StringUtils.zalgoFilter(nameString); int timeWidth; if (drawTime) { timeWidth = (int) Math.ceil(Theme.dialogs_timePaint.measureText(timeString)); @@ -4421,7 +4427,26 @@ public boolean drawAvatarOverlays(Canvas canvas) { if (user != null && !MessagesController.isSupportUser(user) && !user.bot) { boolean isOnline = isOnline(); wasDrawnOnline = isOnline; + int colorOnline = 0; + if (Config.showOnlineStatus && !user.self && user.status != null) { + final int diff = user.status.expires - ConnectionsManager.getInstance(currentAccount).getCurrentTime(); + colorOnline = diff > 0 + ? Theme.getColor(Theme.key_chats_onlineCircle) + : diff > -15 * 60 + ? android.graphics.Color.argb(255, 234, 234, 30) + : diff > -30 * 60 + ? android.graphics.Color.argb(255, 234, 132, 30) + : diff > -60 * 60 + ? android.graphics.Color.argb(255, 234, 30, 30) + : 0; + if (colorOnline != 0) { + isOnline = true; + } + } if (isOnline || onlineProgress != 0) { + if (onlineProgress != 0 && colorOnline == 0) { + colorOnline = Theme.getColor(Theme.key_chats_onlineCircle, resourcesProvider); + } int top = (int) (storyParams.originalAvatarRect.bottom - dp(useForceThreeLines || SharedConfig.useThreeLinesLayout ? 6 : 8)); int left; if (LocaleController.isRTL) { @@ -4432,7 +4457,7 @@ public boolean drawAvatarOverlays(Canvas canvas) { Theme.dialogs_onlineCirclePaint.setColor(Theme.getColor(Theme.key_windowBackgroundWhite, resourcesProvider)); canvas.drawCircle(left, top, dp(7) * onlineProgress, Theme.dialogs_onlineCirclePaint); - Theme.dialogs_onlineCirclePaint.setColor(Theme.getColor(Theme.key_chats_onlineCircle, resourcesProvider)); + Theme.dialogs_onlineCirclePaint.setColor(colorOnline); canvas.drawCircle(left, top, dp(5) * onlineProgress, Theme.dialogs_onlineCirclePaint); if (isOnline) { if (onlineProgress < 1.0f) { @@ -5254,7 +5279,7 @@ public SpannableStringBuilder getMessageStringFormatted(int messageFormatType, S } } else if (captionMessage != null && captionMessage.caption != null) { MessageObject message = captionMessage; - CharSequence mess = message.caption.toString(); + CharSequence mess = StringUtils.zalgoFilter(message.caption.toString()); String emoji; if (!needEmoji) { emoji = ""; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/DrawerProfileCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/DrawerProfileCell.java index 4a9dce8dc6..12be7f6a64 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/DrawerProfileCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/DrawerProfileCell.java @@ -74,8 +74,8 @@ import java.util.ArrayList; -import top.qwq2333.gen.Config; -import top.qwq2333.nullgram.utils.Log; +import xyz.nextalone.gen.Config; +import xyz.nextalone.nnngram.utils.Log; public class DrawerProfileCell extends FrameLayout implements NotificationCenter.NotificationCenterDelegate { @@ -790,7 +790,8 @@ public void setUser(TLRPC.User user, boolean accounts) { } else if (!TextUtils.isEmpty(user.username)) { phoneTextView.setText("@" + user.username); } else { - phoneTextView.setText(LocaleController.getString("MobileHidden", R.string.MobileHidden)); +// phoneTextView.setText(LocaleController.getString("MobileHidden", R.string.MobileHidden)); + phoneTextView.setVisibility(GONE); } AvatarDrawable avatarDrawable = new AvatarDrawable(user); avatarDrawable.setColor(Theme.getColor(Theme.key_avatar_backgroundInProfileBlue)); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/ProfileChannelCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/ProfileChannelCell.java index 0da6b4bda2..b9584f5e40 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/ProfileChannelCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/ProfileChannelCell.java @@ -35,6 +35,7 @@ import org.telegram.SQLite.SQLiteCursor; import org.telegram.messenger.AndroidUtilities; +import org.telegram.messenger.ChatObject; import org.telegram.messenger.DialogObject; import org.telegram.messenger.FileLog; import org.telegram.messenger.LocaleController; @@ -384,6 +385,127 @@ public void fetch(long channel_id, int message_id) { }); } + public void fetchChannelMsg(TLRPC.ChatFull chatFull) { + if (chatFull == null || chatFull.linked_chat_id == 0) { + searchId++; + loaded = true; + messageObject = null; + done(false); + return; + } + fetchChannelMsg(chatFull.linked_chat_id); + } + + public void fetchChannelMsg(long channel_id) { + if (loaded || loading) { + if (this.channel_id != channel_id) { + loaded = false; + messageObject = null; + } else { + return; + } + } + final int thisSearchId = ++this.searchId; + loading = true; + + this.channel_id = channel_id; + this.message_id = 0; + + final long selfId = UserConfig.getInstance(currentAccount).getClientUserId(); + MessagesStorage storage = MessagesStorage.getInstance(currentAccount); + storage.getStorageQueue().postRunnable(() -> { + TLRPC.Message message = null; + ArrayList users = new ArrayList<>(); + ArrayList chats = new ArrayList<>(); + SQLiteCursor cursor = null; + try { + if (message_id <= 0) { + cursor = storage.getDatabase().queryFinalized("SELECT data, mid FROM messages_v2 WHERE uid = ? ORDER BY mid DESC LIMTI 1", -channel_id); + } else { + cursor = storage.getDatabase().queryFinalized("SELECT data, mid FROM messages_v2 WHERE uid = ? AND mid = ? LIMIT 1", -channel_id, message_id); + } + ArrayList usersToLoad = new ArrayList<>(); + ArrayList chatsToLoad = new ArrayList<>(); + if (cursor.next()) { + NativeByteBuffer data = cursor.byteBufferValue(0); + if (data != null) { + message = TLRPC.Message.TLdeserialize(data, data.readInt32(false), false); + message.readAttachPath(data, selfId); + data.reuse(); + message.id = cursor.intValue(1); + message.dialog_id = -channel_id; + MessagesStorage.addUsersAndChatsFromMessage(message, usersToLoad, chatsToLoad, null); + } + } + cursor.dispose(); + + if (message != null) { + + if (!usersToLoad.isEmpty()) { + storage.getUsersInternal(usersToLoad, users); + } + if (!chatsToLoad.isEmpty()) { + storage.getChatsInternal(TextUtils.join(",", chatsToLoad), chats); + } + } + } catch (Exception e) { + FileLog.e(e); + } finally { + if (cursor != null) { + cursor.dispose(); + } + } + final TLRPC.Message finalMessage = message; + AndroidUtilities.runOnUIThread(() -> { + if (thisSearchId != searchId) return; + MessageObject messageObject1 = null; + if (finalMessage != null) { + messageObject1 = new MessageObject(currentAccount, finalMessage, true, true); + } + + if (messageObject1 != null) { + this.messageObject = messageObject1; + done(false); + return; + } + + TLRPC.TL_messages_search req = new TLRPC.TL_messages_search(); + req.limit = 3; + req.offset_id = 0; + req.filter = new TLRPC.TL_inputMessagesFilterEmpty(); + req.q = ""; + req.peer = MessagesController.getInstance(currentAccount).getInputPeer(-channel_id); + ConnectionsManager.getInstance(currentAccount).sendRequest(req, (response, err) -> AndroidUtilities.runOnUIThread(() -> { + if (response instanceof TLRPC.messages_Messages) { + TLRPC.messages_Messages res = (TLRPC.messages_Messages) response; + MessagesController.getInstance(currentAccount).putUsers(res.users, false); + MessagesController.getInstance(currentAccount).putChats(res.chats, false); + storage.putUsersAndChats(res.users, res.chats, true, true); + storage.putMessages(res, -channel_id, -1, 0, false, 0, 0); + + if (thisSearchId != searchId) return; + + TLRPC.Message message1 = null; + for (TLRPC.Message m : res.messages) { + if (!(m instanceof TLRPC.TL_messageEmpty)) { + message1 = m; + break; + } + } + if (message1 != null) { + message_id = message1.id; + this.messageObject = new MessageObject(currentAccount, message1, true, true); + done(false); + } + } else { + if (thisSearchId != searchId) return; + done(true); + } + })); + }); + }); + } + private ArrayList callbacks = new ArrayList<>(); public void subscribe(Runnable callback) { if (loaded) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/ProfileSearchCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/ProfileSearchCell.java index 71245722a0..cf39b27706 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/ProfileSearchCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/ProfileSearchCell.java @@ -72,6 +72,8 @@ import java.util.Locale; +import xyz.nextalone.nnngram.utils.StringUtils; + public class ProfileSearchCell extends BaseCell implements NotificationCenter.NotificationCenterDelegate, Theme.Colorable { private CharSequence currentName; @@ -755,6 +757,7 @@ public void update(int mask) { } else { newName = chat.title; } + newName = StringUtils.zalgoFilter(newName); if (!newName.equals(lastName)) { continueUpdate = true; } @@ -782,6 +785,7 @@ public void update(int mask) { lastName = chat.title; } + lastName = StringUtils.zalgoFilter(lastName); lastAvatar = photo; if (getMeasuredWidth() != 0 || getMeasuredHeight() != 0) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/SharedLinkCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/SharedLinkCell.java index 399ee90afe..a5cb4eef50 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/SharedLinkCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/SharedLinkCell.java @@ -59,9 +59,9 @@ import java.util.Stack; import java.util.concurrent.atomic.AtomicReference; -import top.qwq2333.gen.Config; -import top.qwq2333.nullgram.config.ConfigManager; -import top.qwq2333.nullgram.utils.Defines; +import xyz.nextalone.gen.Config; +import xyz.nextalone.nnngram.config.ConfigManager; +import xyz.nextalone.nnngram.utils.Defines; public class SharedLinkCell extends FrameLayout { private final static int SPOILER_TYPE_LINK = 0, diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/TextCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/TextCell.java index 2b2db6603e..5298878adc 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/TextCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/TextCell.java @@ -594,12 +594,7 @@ public void setTextAndValueAndIcon(CharSequence text, CharSequence value, boolea } public static CharSequence applyNewSpan(CharSequence str) { - SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(str); - spannableStringBuilder.append(" d"); - FilterCreateActivity.NewSpan span = new FilterCreateActivity.NewSpan(10); - span.setColor(Theme.getColor(Theme.key_premiumGradient1)); - spannableStringBuilder.setSpan(span, spannableStringBuilder.length() - 1, spannableStringBuilder.length(), 0); - return spannableStringBuilder; + return str; } public void setColorfulIcon(int color, int resId) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/TextSelectionHelper.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/TextSelectionHelper.java index 603d399f8f..1dff5954bd 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/TextSelectionHelper.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/TextSelectionHelper.java @@ -82,8 +82,12 @@ import org.telegram.ui.Components.RecyclerListView; import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; -import top.qwq2333.nullgram.helpers.TranslateHelper; +import xyz.nextalone.gen.Config; +import xyz.nextalone.nnngram.helpers.HyperOsHelper; +import xyz.nextalone.nnngram.helpers.TranslateHelper; public abstract class TextSelectionHelper { @@ -1418,20 +1422,44 @@ public void invalidate() { } private static final int TRANSLATE = 3; + private static final int BLOCK = 4; + private static final Map menus = new HashMap<>(); + private int getMenuIndex(int id, int defaultIndex) { + if (menus.containsKey(id)) { + Integer index = menus.get(id); + if (index != null) { + return index; + } + } + return defaultIndex; + } + private ActionMode.Callback createActionCallback() { final ActionMode.Callback callback = new ActionMode.Callback() { @Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { - menu.add(Menu.NONE, android.R.id.copy, 0, android.R.string.copy); - menu.add(Menu.NONE, R.id.menu_quote, 1, LocaleController.getString(R.string.Quote)); - menu.add(Menu.NONE, android.R.id.selectAll, 2, android.R.string.selectAll); - menu.add(Menu.NONE, TRANSLATE, 3, LocaleController.getString(R.string.TranslateMessage)); + menus.clear(); + int index = 0; + if (HyperOsHelper.INSTANCE.isHyperAiAvailable(textSelectionOverlay.getContext())) { + menus.put(R.id.hyperos_ai, index); + menu.add(Menu.NONE, R.id.hyperos_ai, index++, "AI"); + } + menus.put(android.R.id.copy, index); + menu.add(Menu.NONE, android.R.id.copy, index++, android.R.string.copy); + menus.put(R.id.menu_quote, index); + menu.add(Menu.NONE, R.id.menu_quote, index++, LocaleController.getString(R.string.Quote)); + menus.put(android.R.id.selectAll, index); + menu.add(Menu.NONE, android.R.id.selectAll, index++, android.R.string.selectAll); + menus.put(TRANSLATE, index); + menu.add(Menu.NONE, TRANSLATE, index++, LocaleController.getString(R.string.TranslateMessage)); + menus.put(BLOCK, index); + menu.add(Menu.NONE, BLOCK, index, LocaleController.getString(R.string.block)); return true; } @Override public boolean onPrepareActionMode(ActionMode mode, Menu menu) { - menu.getItem(1).setVisible(canShowQuote()); + menu.getItem(getMenuIndex(R.id.menu_quote, 0)).setVisible(canShowQuote()); MenuItem copyItem = menu.findItem(android.R.id.copy); if (copyItem != null) { copyItem.setVisible(canCopy()); @@ -1439,11 +1467,11 @@ public boolean onPrepareActionMode(ActionMode mode, Menu menu) { if (selectedView != null) { CharSequence charSequence = getText(selectedView, false); if (!canCopy()) { - menu.getItem(2).setVisible(false); + menu.getItem(getMenuIndex(android.R.id.selectAll, 2)).setVisible(false); } else if (multiselect || selectionStart <= 0 && selectionEnd >= charSequence.length() - 1) { - menu.getItem(2).setVisible(false); + menu.getItem(getMenuIndex(android.R.id.selectAll, 2)).setVisible(false); } else { - menu.getItem(2).setVisible(true); + menu.getItem(getMenuIndex(android.R.id.selectAll, 2)).setVisible(true); } } if (onTranslateListener != null && LanguageDetector.hasSupport() && getSelectedText() != null) { @@ -1465,7 +1493,7 @@ public boolean onPrepareActionMode(ActionMode mode, Menu menu) { private String translateFromLanguage = null; private void updateTranslateButton(Menu menu) { - menu.getItem(3).setVisible(!LanguageDetector.hasSupport() || translateFromLanguage != null && !TranslateHelper.isLanguageRestricted(translateFromLanguage)); + menu.getItem(getMenuIndex(TRANSLATE, 3)).setVisible(!LanguageDetector.hasSupport() || translateFromLanguage == null || !TranslateHelper.isLanguageRestricted(translateFromLanguage)); } @Override @@ -1502,6 +1530,26 @@ public boolean onActionItemClicked(ActionMode mode, MenuItem item) { quoteText(); hideActions(); return true; + } else if (itemId == BLOCK) { + CharSequence str = getSelectedText(); + if (str == null) { + return true; + } + String currentFilteredMessages = Config.getMessageFilter(); + currentFilteredMessages = currentFilteredMessages + (currentFilteredMessages.isEmpty() ? "" : "|") + str.toString(); + Config.setMessageFilter(currentFilteredMessages); + hideActions(); + clear(true); + return true; + } else if (itemId == R.id.hyperos_ai) { + CharSequence str = getSelectedText(); + if (str == null) { + return true; + } + HyperOsHelper.INSTANCE.startHyperOsAiService(textSelectionOverlay, str.toString()); + hideActions(); + clear(true); + return true; } else { clear(); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ChannelAdminLogActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ChannelAdminLogActivity.java index 3f863863dd..2505c4df20 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ChannelAdminLogActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ChannelAdminLogActivity.java @@ -164,7 +164,7 @@ import java.util.HashMap; import java.util.HashSet; -import top.qwq2333.gen.Config; +import xyz.nextalone.gen.Config; public class ChannelAdminLogActivity extends BaseFragment implements NotificationCenter.NotificationCenterDelegate { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java index 731325c9bf..82992d5f7a 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java @@ -404,20 +404,24 @@ import java.util.stream.Collectors; import kotlin.Unit; -import top.qwq2333.gen.Config; -import top.qwq2333.nullgram.activity.MessageDetailActivity; -import top.qwq2333.nullgram.config.ConfigManager; -import top.qwq2333.nullgram.config.DialogConfig; -import top.qwq2333.nullgram.config.ForwardContext; -import top.qwq2333.nullgram.helpers.QrHelper; -import top.qwq2333.nullgram.helpers.TranslateHelper; -import top.qwq2333.nullgram.helpers.TranslateHelper.Status; -import top.qwq2333.nullgram.translate.LanguageDetectorTimeout; -import top.qwq2333.nullgram.ui.TranslatorSettingsPopupWrapper; -import top.qwq2333.nullgram.utils.Defines; -import top.qwq2333.nullgram.utils.Log; -import top.qwq2333.nullgram.utils.MessageUtils; -import top.qwq2333.nullgram.utils.PermissionUtils; +import xyz.nextalone.gen.Config; +import xyz.nextalone.nnngram.activity.MessageDetailActivity; +import xyz.nextalone.nnngram.config.ConfigManager; +import xyz.nextalone.nnngram.config.DialogConfig; +import xyz.nextalone.nnngram.config.ForwardContext; +import xyz.nextalone.nnngram.helpers.MessageHelper; +import xyz.nextalone.nnngram.helpers.QrHelper; +import xyz.nextalone.nnngram.helpers.TranslateHelper; +import xyz.nextalone.nnngram.helpers.TranslateHelper.Status; +import xyz.nextalone.nnngram.translate.LanguageDetectorTimeout; +import xyz.nextalone.nnngram.ui.TranslatorSettingsPopupWrapper; +import xyz.nextalone.nnngram.ui.sortList.items.TextStyleItems; +import xyz.nextalone.nnngram.utils.Defines; +import xyz.nextalone.nnngram.utils.Log; +import xyz.nextalone.nnngram.utils.MessageUtils; +import xyz.nextalone.nnngram.utils.PermissionUtils; +import xyz.nextalone.nnngram.utils.StringUtils; +import xyz.nextalone.nnngram.utils.WordUtils; @SuppressWarnings("unchecked") public class ChatActivity extends BaseFragment implements NotificationCenter.NotificationCenterDelegate, DialogsActivity.DialogsActivityDelegate, LocationActivity.LocationActivityDelegate, ChatAttachAlertDocumentLayout.DocumentSelectActivityDelegate, ChatActivityInterface, FloatingDebugProvider, ForwardContext, InstantCameraView.Delegate { @@ -914,6 +918,7 @@ public boolean isReport() { private int last_message_id = 0; private long mergeDialogId; private boolean sentBotStart; + private int lastSearchedMessageId = 0; private long startMessageAppearTransitionMs; private List messageSkeletons = new ArrayList<>(); @@ -1211,6 +1216,8 @@ public void run() { private final static int OPTION_SAVE_MESSAGE = 93; private final static int OPTION_REPEAT = 94; private final static int OPTION_NOQUOTE_FORWARD = 95; + private final static int OPTION_REPEAT_AS_COPY = 96; + private final static int OPTION_REVERSE = 97; private final static int OPTION_ABOUT_REVENUE_SHARING_ADS = 33; private final static int OPTION_REPORT_AD = 34; private final static int OPTION_REMOVE_ADS = 35; @@ -1218,6 +1225,7 @@ public void run() { private final static int OPTION_EDIT_SCHEDULE_TIME = 102; private final static int OPTION_SPEED_PROMO = 103; private final static int OPTION_OPEN_PROFILE = 104; + private final static int OPTION_SHARE_PHOTO = 105; private final static int OPTION_FACT_CHECK = 106; private final static int OPTION_EDIT_PRICE = 107; @@ -1623,6 +1631,8 @@ public void sendButtonPressed(int index, VideoEditedInfo videoEditedInfo, boolea private final static int search = 40; + private final static int merge_message = 200; + private final static int topic_close = 60; private final static int open_forum = 61; @@ -1634,7 +1644,7 @@ public void sendButtonPressed(int index, VideoEditedInfo videoEditedInfo, boolea private final static int share_business_link = 66; private final static int rename_business_link = 67; private final static int delete_business_link = 68; - + private final static int share = 69; private final static int id_chat_compose_panel = 1000; @@ -1893,10 +1903,12 @@ public boolean hasDoubleTap(View view, int position) { } break; case Defines.doubleTabReply: + case Defines.doubleTabReverse: return message.getId() > 0 && allowChatActions; case Defines.doubleTabSaveMessages: return !message.isSponsored() && chatMode != MODE_SCHEDULED && (!message.needDrawBluredPreview() || message.hasExtendedMediaPreview()) && !message.isLiveLocation() && message.type != MessageObject.TYPE_PHONE_CALL && !noforwards && message.type != MessageObject.TYPE_GIFT_PREMIUM && !UserObject.isUserSelf(currentUser); case Defines.doubleTabRepeat: + case Defines.doubleTabRepeatAsCopy: return allowChatActions && (!(isThreadChat() && !isTopic) && !noforwards || getMessageUtils().getMessageForRepeat(message, messageGroup) != null) && !message.isSponsored() && chatMode != MODE_SCHEDULED && (!message.needDrawBluredPreview() || message.hasExtendedMediaPreview()) && !message.isLiveLocation() && message.type != MessageObject.TYPE_PHONE_CALL && message.type != MessageObject.TYPE_GIFT_PREMIUM && !UserObject.isUserSelf(currentUser); case Defines.doubleTabEdit: return allowEdit; @@ -1977,6 +1989,12 @@ public void onDoubleTap(View view, int position, float x, float y) { case Defines.doubleTabRepeat: processSelectedOption(OPTION_REPEAT); break; + case Defines.doubleTabRepeatAsCopy: + processSelectedOption(OPTION_REPEAT_AS_COPY); + break; + case Defines.doubleTabReverse: + processSelectedOption(OPTION_REVERSE); + break; case Defines.doubleTabEdit: processSelectedOption(OPTION_EDIT); break; @@ -3655,6 +3673,70 @@ public void onItemClick(final int id) { undoView.showWithAction(0, UndoView.ACTION_TEXT_COPIED, null); } clearSelectionMode(); + } else if (id == merge_message) { + StringBuilder str = new StringBuilder(); + ArrayList toDeleteMessagesIds = new ArrayList<>(); + MessageObject toEdit = null; + ArrayList entities; + entities = new ArrayList<>(); + for (int a = 1; a >= 0; a--) { + ArrayList ids = new ArrayList<>(); + for (int b = 0; b < selectedMessagesIds[a].size(); b++) { + ids.add(selectedMessagesIds[a].keyAt(b)); + } + if (currentEncryptedChat == null) { + Collections.sort(ids); + } else { + ids.sort(Collections.reverseOrder()); + } + for (int b = 0; b < ids.size(); b++) { + + Integer messageId = ids.get(b); + MessageObject messageObject = selectedMessagesIds[a].get(messageId); + if (messageObject.isDocument() || messageObject.isSticker() || messageObject.isPhoto()){ + continue; + } + if (str.length() != 0) { + str.append(" "); + } + if (messageObject.messageOwner.entities != null && !messageObject.messageOwner.entities.isEmpty()) { + for (TLRPC.MessageEntity entity : messageObject.messageOwner.entities) { + if (entity instanceof TLRPC.TL_messageEntityMentionName) { + TLRPC.TL_inputMessageEntityMentionName mention = new TLRPC.TL_inputMessageEntityMentionName(); + mention.length = entity.length; + mention.offset = str.length() + entity.offset; + mention.user_id = getMessagesController().getInputUser(((TLRPC.TL_messageEntityMentionName) entity).user_id); + entities.add(mention); + } else { + entity.offset += str.length(); + entities.add(entity); + } + } + } + str.append(messageObject.messageText); + if (messageObject.getSenderId() == UserConfig.getInstance(currentAccount).getClientUserId()) { + if (b == 0) { + toEdit = messageObject; + } else { + toDeleteMessagesIds.add(messageId); + } + } + } + } + if (str.length() != 0 && toEdit != null) { + if (toEdit.canEditMessage(currentChat)) { + toEdit.editingMessage = str; + toEdit.editingMessageEntities = entities; + SendMessagesHelper.getInstance(currentAccount).editMessage(toEdit, null, null, null, null, null, false, toEdit.hasMediaSpoilers(), null); + } else { + MessageObject replyTo = toEdit.replyMessageObject; + toDeleteMessagesIds.add(toEdit.getId()); + SendMessagesHelper.getInstance(currentAccount) + .sendMessage(SendMessagesHelper.SendMessageParams.of(str.toString(), dialog_id, replyTo, getThreadMessage(), null, false, entities, null, null, true, 0, null, false)); + } + MessagesController.getInstance(currentAccount).deleteMessages(toDeleteMessagesIds, null, null, dialog_id, 0, true, 0); + } + clearSelectionMode(); } else if (id == delete) { if (getParentActivity() == null) { return; @@ -5999,7 +6081,7 @@ public boolean drawChild(Canvas canvas, View child, long drawingTime) { if (updateVisibility) { imageReceiver.setVisible(true, false); } - imageReceiver.draw(canvas); + cell.drawStatusWithImage(canvas, imageReceiver, AndroidUtilities.dp(7)); canvas.restore(); if (!replaceAnimation && child.getTranslationY() != 0) { @@ -6424,6 +6506,9 @@ public void onScrollStateChanged(RecyclerView recyclerView, int newState) { wasManualScroll = true; scrollingChatListView = true; } else if (newState == RecyclerView.SCROLL_STATE_DRAGGING) { + if (Config.hideKeyboardWhenScrolling) { + AndroidUtilities.hideKeyboard(getParentActivity().getCurrentFocus()); + } pollHintCell = null; wasManualScroll = true; scrollingFloatingDate = true; @@ -8473,6 +8558,8 @@ protected float getTopOffset() { getNotificationCenter().postNotificationName(NotificationCenter.peerSettingsDidLoad, dialog_id); } } + if (Config.autoMuteAfterJoiningChannel) + getNotificationsController().muteDialog(dialog_id, getTopicId(), true); } else { toggleMute(true); } @@ -8806,8 +8893,9 @@ protected boolean setFilter(ReactionsLayoutInBubble.VisibleReaction reaction) { updateSearchUpDownButtonVisibility(true); updatePagedownButtonVisibility(true); searchingQuery = searchItem.getSearchField().getText().toString(); + lastSearchedMessageId = 0; getMediaDataController().searchMessagesInChat(searchingQuery, dialog_id, mergeDialogId, classGuid, 0, threadMessageId, false, searchingUserMessages, searchingChatMessages, - !TextUtils.isEmpty(searchingQuery) || searchingReaction != null, searchingReaction, searchingType); + !TextUtils.isEmpty(searchingQuery) || searchingReaction != null, searchingReaction, searchingType, true); AndroidUtilities.hideKeyboard(searchItem.getSearchField()); return true; } @@ -8911,7 +8999,7 @@ private void showBotMessageHint(ChatMessageCell cell, boolean byClick) { botMessageHint.show(); }); } - + private void hideHints() { if (savedMessagesTagHint != null && savedMessagesTagHint.shown()) { savedMessagesTagHint.hide(); @@ -9792,6 +9880,8 @@ private void createActionMode() { actionModeViews.add(actionMode.addItemWithWidth(tag_message, R.drawable.menu_tag_edit, AndroidUtilities.dp(54), LocaleController.getString(R.string.AccDescrTagMessage))); } actionModeViews.add(actionMode.addItemWithWidth(star, R.drawable.msg_fave, AndroidUtilities.dp(54), LocaleController.getString(R.string.AddToFavorites))); + if (Config.mergeMessage) + actionModeViews.add(actionMode.addItemWithWidth(merge_message, R.drawable.msg_replace, AndroidUtilities.dp(54), LocaleController.getString("MergeMessage", R.string.MergeMessage))); actionModeViews.add(actionMode.addItemWithWidth(copy, R.drawable.msg_copy, AndroidUtilities.dp(54), LocaleController.getString(R.string.Copy))); if (!isSavedMessages && getDialogId() != UserObject.VERIFY) { actionModeViews.add(actionMode.addItemWithWidth(forward, R.drawable.msg_forward, AndroidUtilities.dp(54), LocaleController.getString(R.string.Forward))); @@ -9802,6 +9892,8 @@ private void createActionMode() { } else { actionModeViews.add(actionMode.addItemWithWidth(edit, R.drawable.msg_edit, AndroidUtilities.dp(54), LocaleController.getString(R.string.Edit))); actionModeViews.add(actionMode.addItemWithWidth(star, R.drawable.msg_fave, AndroidUtilities.dp(54), LocaleController.getString(R.string.AddToFavorites))); + if (Config.mergeMessage) + actionModeViews.add(actionMode.addItemWithWidth(merge_message, R.drawable.msg_replace, AndroidUtilities.dp(54), LocaleController.getString("MergeMessage", R.string.MergeMessage))); actionModeViews.add(actionMode.addItemWithWidth(copy, R.drawable.msg_copy, AndroidUtilities.dp(54), LocaleController.getString(R.string.Copy))); actionModeViews.add(actionMode.addItemWithWidth(delete, R.drawable.msg_delete, AndroidUtilities.dp(54), LocaleController.getString(R.string.Delete))); } @@ -9811,6 +9903,8 @@ private void createActionMode() { actionMode.setItemVisibility(delete, cantDeleteMessagesCount == 0 ? View.VISIBLE : View.GONE); actionMode.setItemVisibility(tag_message, getUserConfig().isPremium() ? View.VISIBLE : View.GONE); actionMode.setItemVisibility(share, View.GONE); + if (Config.mergeMessage) + actionMode.getItem(merge_message).setVisibility(selectedMessagesIds[0].size() + selectedMessagesIds[1].size() != 0 ? View.VISIBLE : View.GONE); } private void hideTagSelector() { @@ -10159,7 +10253,9 @@ public void run(int param) { updateSearchUpDownButtonVisibility(true); updatePagedownButtonVisibility(true); searchingQuery = searchItem.getSearchField().getText().toString(); - getMediaDataController().searchMessagesInChat(searchingQuery, dialog_id, mergeDialogId, classGuid, 0, threadMessageId, searchingUserMessages, searchingChatMessages, searchingReaction, searchingType); + lastSearchedMessageId = 0; + getMediaDataController().searchMessagesInChat(searchingQuery, dialog_id, mergeDialogId, classGuid, 0, threadMessageId, searchingUserMessages, searchingChatMessages, + searchingReaction, searchingType, true); }); if (searchingType == filter.second) { filterPopup.putCheck(); @@ -10288,7 +10384,7 @@ private void dimBehindView(float value, boolean blur, boolean hidePagedownButton } scrimProgressDirection = true; animators.add(scrimPaintAlphaAnimator = ValueAnimator.ofFloat(0, value)); - + if (blur) { AndroidUtilities.makeGlobalBlurBitmap(bitmap -> { scrimBlurBitmap = bitmap; @@ -10387,39 +10483,72 @@ private void checkEditTextItemMenu() { } ActionBarMenuItem item = editTextItem.createView(); - item.addSubItem(text_spoiler, LocaleController.getString(R.string.Spoiler)); - if (chatMode == 0) { - item.addSubItem(text_quote, LocaleController.getString(R.string.Quote)); - } - SpannableStringBuilder stringBuilder = new SpannableStringBuilder(LocaleController.getString(R.string.Bold)); - stringBuilder.setSpan(new TypefaceSpan(AndroidUtilities.bold()), 0, stringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); - item.addSubItem(text_bold, stringBuilder); - stringBuilder = new SpannableStringBuilder(LocaleController.getString(R.string.Italic)); - stringBuilder.setSpan(new TypefaceSpan(AndroidUtilities.getTypeface("fonts/ritalic.ttf")), 0, stringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); - item.addSubItem(text_italic, stringBuilder); - stringBuilder = new SpannableStringBuilder(LocaleController.getString(R.string.Mono)); - stringBuilder.setSpan(new TypefaceSpan(Typeface.MONOSPACE), 0, stringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); - item.addSubItem(text_mono, stringBuilder); - stringBuilder = new SpannableStringBuilder(LocaleController.getString("MonoCode", R.string.MonoCode)); - stringBuilder.setSpan(new TypefaceSpan(Typeface.MONOSPACE), 0, stringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); - item.addSubItem(text_code, stringBuilder); - if (currentEncryptedChat == null || AndroidUtilities.getPeerLayerVersion(currentEncryptedChat.layer) >= 101) { - stringBuilder = new SpannableStringBuilder(LocaleController.getString(R.string.Strike)); - TextStyleSpan.TextStyleRun run = new TextStyleSpan.TextStyleRun(); - run.flags |= TextStyleSpan.FLAG_STYLE_STRIKE; - stringBuilder.setSpan(new TextStyleSpan(run), 0, stringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); - item.addSubItem(text_strike, stringBuilder); - - stringBuilder = new SpannableStringBuilder(LocaleController.getString(R.string.Underline)); - run = new TextStyleSpan.TextStyleRun(); - run.flags |= TextStyleSpan.FLAG_STYLE_UNDERLINE; - stringBuilder.setSpan(new TextStyleSpan(run), 0, stringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); - item.addSubItem(text_underline, stringBuilder); - } - item.addSubItem(text_link, LocaleController.getString(R.string.CreateLink)); - item.addSubItem(text_mention, LocaleController.getString(R.string.CreateMention)); - item.addSubItem(text_regular, LocaleController.getString(R.string.Regular)); - + SpannableStringBuilder stringBuilder; + TextStyleSpan.TextStyleRun run; + List enabledOrder = TextStyleItems.INSTANCE.getEnabledOrder(); + for (int i : enabledOrder) { + switch (i) { + case 0: + if (chatMode == 0) { + item.addSubItem(text_quote, LocaleController.getString(R.string.Quote)); + } + break; + case 1: + item.addSubItem(text_spoiler, LocaleController.getString(R.string.Spoiler)); + break; + case 2: + stringBuilder = new SpannableStringBuilder(LocaleController.getString(R.string.Bold)); + run = new TextStyleSpan.TextStyleRun(); + run.flags |= TextStyleSpan.FLAG_STYLE_BOLD; + stringBuilder.setSpan(new TypefaceSpan(AndroidUtilities.bold()), 0, stringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + item.addSubItem(text_bold, stringBuilder); + break; + case 3: + stringBuilder = new SpannableStringBuilder(LocaleController.getString(R.string.Italic)); + run = new TextStyleSpan.TextStyleRun(); + run.flags |= TextStyleSpan.FLAG_STYLE_ITALIC; + stringBuilder.setSpan(new TextStyleSpan(run), 0, stringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + item.addSubItem(text_italic, stringBuilder); + break; + case 4: + stringBuilder = new SpannableStringBuilder(LocaleController.getString(R.string.MonoCode)); + stringBuilder.setSpan(new TypefaceSpan(Typeface.MONOSPACE), 0, stringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + item.addSubItem(text_code, stringBuilder); + break; + case 5: + stringBuilder = new SpannableStringBuilder(LocaleController.getString(R.string.Mono)); + stringBuilder.setSpan(new TypefaceSpan(Typeface.MONOSPACE), 0, stringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + item.addSubItem(text_mono, stringBuilder); + break; + case 6: + if (currentEncryptedChat == null || AndroidUtilities.getPeerLayerVersion(currentEncryptedChat.layer) >= 101) { + stringBuilder = new SpannableStringBuilder(LocaleController.getString(R.string.Strike)); + run = new TextStyleSpan.TextStyleRun(); + run.flags |= TextStyleSpan.FLAG_STYLE_STRIKE; + stringBuilder.setSpan(new TextStyleSpan(run), 0, stringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + item.addSubItem(text_strike, stringBuilder); + } + break; + case 7: + if (currentEncryptedChat == null || AndroidUtilities.getPeerLayerVersion(currentEncryptedChat.layer) >= 101) { + stringBuilder = new SpannableStringBuilder(LocaleController.getString(R.string.Underline)); + run = new TextStyleSpan.TextStyleRun(); + run.flags |= TextStyleSpan.FLAG_STYLE_UNDERLINE; + stringBuilder.setSpan(new TextStyleSpan(run), 0, stringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + item.addSubItem(text_underline, stringBuilder); + } + break; + case 8: + item.addSubItem(text_link, LocaleController.getString(R.string.CreateLink)); + break; + case 9: + item.addSubItem(text_mention, LocaleController.getString(R.string.CreateMention)); + break; + case 10: + item.addSubItem(text_regular, LocaleController.getString(R.string.Regular)); + break; + } + } filledEditTextItemMenu = true; } @@ -10818,8 +10947,8 @@ private void searchUserMessages(TLRPC.User user, TLRPC.Chat chat) { mentionContainer.getAdapter().searchUsernameOrHashtag(null, 0, null, false, true); searchItem.setSearchFieldHint(null); searchItem.clearSearchText(); - getMediaDataController().searchMessagesInChat(searchingQuery = "", dialog_id, mergeDialogId, classGuid, 0, threadMessageId, searchingUserMessages, searchingChatMessages, searchingReaction, - searchingType); + lastSearchedMessageId = 0; + getMediaDataController().searchMessagesInChat(searchingQuery = "", dialog_id, mergeDialogId, classGuid, 0, threadMessageId, searchingUserMessages, searchingChatMessages, searchingReaction, searchingType); } private void updateTranslateItemVisibility() { @@ -14375,6 +14504,7 @@ public void showFieldPanel(boolean show, MessageObject messageObjectToReply, Mes } nameText = AndroidUtilities.replaceCharSequence("%s", LocaleController.getString(R.string.ReplyTo), name == null ? "" : name); } + nameText = StringUtils.zalgoFilter(nameText); nameText = Emoji.replaceEmoji(nameText, replyNameTextView.getPaint().getFontMetricsInt(), false); replyNameTextView.setText(nameText); replyIconImageView.setContentDescription(LocaleController.getString(R.string.AccDescrReplying)); @@ -18197,7 +18327,7 @@ private void addToSelectedMessages(MessageObject messageObject, boolean outside, if (!messageObject.canDeleteMessage(chatMode == MODE_SCHEDULED, currentChat)) { cantDeleteMessagesCount--; } - boolean noforwards = getMessagesController().isChatNoForwards(currentChat); + boolean noforwards = !Config.ignoreChatStrict && getMessagesController().isChatNoForwards(currentChat); if (chatMode == MODE_SCHEDULED || !messageObject.canForwardMessage() || noforwards) { cantForwardMessagesCount--; } else { @@ -18234,7 +18364,7 @@ private void addToSelectedMessages(MessageObject messageObject, boolean outside, if (!messageObject.canDeleteMessage(chatMode == MODE_SCHEDULED, currentChat)) { cantDeleteMessagesCount++; } - boolean noforwards = getMessagesController().isChatNoForwards(currentChat); + boolean noforwards = !Config.ignoreChatStrict && getMessagesController().isChatNoForwards(currentChat); if (chatMode == MODE_SCHEDULED || !messageObject.canForwardMessage() || noforwards) { cantForwardMessagesCount++; } else { @@ -18267,6 +18397,7 @@ private void addToSelectedMessages(MessageObject messageObject, boolean outside, ActionBarMenuItem saveItem = actionBar.createActionMode().getItem(save_to); ActionBarMenuItem copyItem = actionBar.createActionMode().getItem(copy); ActionBarMenuItem starItem = actionBar.createActionMode().getItem(star); + ActionBarMenuItem mergeMessageItem = actionBar.createActionMode().getItem(merge_message); ActionBarMenuItem editItem = actionBar.createActionMode().getItem(edit); ActionBarMenuItem forwardItem = actionBar.createActionMode().getItem(forward); ActionBarMenuItem forwardNoQuoteItem = actionBar.createActionMode().getItem(OPTION_NOQUOTE_FORWARD); @@ -18275,7 +18406,7 @@ private void addToSelectedMessages(MessageObject messageObject, boolean outside, ActionBarMenuItem shareItem = actionBar.createActionMode().getItem(share); createBottomMessagesActionButtons(); - boolean noforwards = getMessagesController().isChatNoForwards(currentChat) || hasSelectedNoforwardsMessage(); + boolean noforwards = !Config.ignoreChatStrict && (getMessagesController().isChatNoForwards(currentChat) || hasSelectedNoforwardsMessage()); if (prevCantForwardCount == 0 && cantForwardMessagesCount != 0 || prevCantForwardCount != 0 && cantForwardMessagesCount == 0) { forwardButtonAnimation = new AnimatorSet(); ArrayList animators = new ArrayList<>(); @@ -18365,6 +18496,9 @@ public void onAnimationEnd(Animator animation) { if (deleteItem != null) { deleteItem.setVisibility(cantDeleteMessagesCount == 0 ? View.VISIBLE : View.GONE); } + if (mergeMessageItem != null) { + mergeMessageItem.setVisibility(selectedMessagesIds[0].size() + selectedMessagesIds[1].size() != 0 ? View.VISIBLE : View.GONE); + } hasUnfavedSelected = false; for (int a = 0; a < 2; a++) { for (int b = 0; b < selectedMessagesCanStarIds[a].size(); b++) { @@ -22440,6 +22574,50 @@ public void didReceivedNotification(int id, int account, final Object... args) { updateSearchButtons((Integer) args[2], (Integer) args[4], (Integer) args[5]); if (jumpToMessage) { int messageId = (Integer) args[1]; + int mask = (Integer) args[2]; + int num = (Integer) args[4]; + boolean firstSearch = args.length > 7 && (boolean) args[7]; + if (Config.searchInPlace && firstSearch) { + int currentMessageId = getFirstVisibleMessage(); + if (currentMessageId != 0) { + ArrayList foundMessageObjects = getMediaDataController().getFoundMessageObjects(); + List foundMessageIds = new ArrayList<>(); + for (MessageObject message: foundMessageObjects) { + foundMessageIds.add(message.getId()); + } + Collections.sort(foundMessageIds); + int minFoundMessageId = Collections.min(foundMessageIds); + if (minFoundMessageId > currentMessageId && lastSearchedMessageId != minFoundMessageId) { + lastSearchedMessageId = minFoundMessageId; + Runnable loop = () -> { + getMediaDataController().setCurrentMaxMessage(); + getMediaDataController().searchMessagesInChat(null, dialog_id, mergeDialogId, classGuid, 1, threadMessageId, searchingUserMessages, + searchingChatMessages, searchingReaction, searchingType, firstSearch); + }; + if (Looper.myLooper() == Looper.getMainLooper()) { + new Thread(loop).start(); + } else { + loop.run(); + } + return; + } + int maxFoundMessageId = Collections.max(foundMessageIds); + if (currentMessageId < maxFoundMessageId) { + int insertionPoint = Collections.binarySearch(foundMessageIds, currentMessageId); + int nextLargerIndex = (insertionPoint < 0) ? Math.max(-(insertionPoint + 1) - 1, 0) : insertionPoint; + if (nextLargerIndex < foundMessageIds.size()) { + Integer nextLargerMessageId = foundMessageIds.get(nextLargerIndex); + if (Math.abs(nextLargerMessageId) < Math.abs(messageId)) { + mask = mask | 2; + } + messageId = nextLargerMessageId; + nextLargerIndex = foundMessageIds.size() - nextLargerIndex - 1; + getMediaDataController().setCurrentMessage(nextLargerIndex); + num = nextLargerIndex; + } + } + } + } long did = (Long) args[3]; if (searchingReaction != null && searchingFiltered) { if (chatAdapter.isFiltered) { @@ -22459,6 +22637,7 @@ public void didReceivedNotification(int id, int account, final Object... args) { setFilterMessages(false); updateVisibleRows(); } + updateSearchButtons(mask, num, (Integer) args[5]); onSearchLoadingUpdate(false); } else if (searchingReaction != null) { if (chatAdapter.isFiltered) { @@ -25894,38 +26073,69 @@ public static void fillActionModeMenu(Menu menu, TLRPC.EncryptedChat encryptedCh menu.removeItem(android.R.id.shareText); } int order = 6; - if (chat) { - menu.add(R.id.menu_groupbolditalic, R.id.menu_quote, order++, LocaleController.getString(R.string.Quote)); - } - menu.add(R.id.menu_groupbolditalic, R.id.menu_spoiler, order++, LocaleController.getString(R.string.Spoiler)); - - SpannableStringBuilder stringBuilder = new SpannableStringBuilder(LocaleController.getString(R.string.Bold)); - stringBuilder.setSpan(new TypefaceSpan(AndroidUtilities.bold()), 0, stringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); - menu.add(R.id.menu_groupbolditalic, R.id.menu_bold, order++, stringBuilder); - stringBuilder = new SpannableStringBuilder(LocaleController.getString(R.string.Italic)); - stringBuilder.setSpan(new TypefaceSpan(AndroidUtilities.getTypeface("fonts/ritalic.ttf")), 0, stringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); - menu.add(R.id.menu_groupbolditalic, R.id.menu_italic, order++, stringBuilder); - stringBuilder = new SpannableStringBuilder(LocaleController.getString(R.string.Mono)); - stringBuilder.setSpan(new TypefaceSpan(Typeface.MONOSPACE), 0, stringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); - menu.add(R.id.menu_groupbolditalic, R.id.menu_mono, order++, stringBuilder); - stringBuilder = new SpannableStringBuilder(LocaleController.getString("MonoCode", R.string.MonoCode)); - stringBuilder.setSpan(new TypefaceSpan(Typeface.MONOSPACE), 0, stringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); - menu.add(R.id.menu_groupbolditalic, R.id.menu_code, order++, stringBuilder); - if (encryptedChat == null || AndroidUtilities.getPeerLayerVersion(encryptedChat.layer) >= 101) { - stringBuilder = new SpannableStringBuilder(LocaleController.getString(R.string.Strike)); - TextStyleSpan.TextStyleRun run = new TextStyleSpan.TextStyleRun(); - run.flags |= TextStyleSpan.FLAG_STYLE_STRIKE; - stringBuilder.setSpan(new TextStyleSpan(run), 0, stringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); - menu.add(R.id.menu_groupbolditalic, R.id.menu_strike, order++, stringBuilder); - stringBuilder = new SpannableStringBuilder(LocaleController.getString(R.string.Underline)); - run = new TextStyleSpan.TextStyleRun(); - run.flags |= TextStyleSpan.FLAG_STYLE_UNDERLINE; - stringBuilder.setSpan(new TextStyleSpan(run), 0, stringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); - menu.add(R.id.menu_groupbolditalic, R.id.menu_underline, order++, stringBuilder); - } - menu.add(R.id.menu_groupbolditalic, R.id.menu_link, order++, LocaleController.getString(R.string.CreateLink)); - menu.add(R.id.menu_groupbolditalic, R.id.menu_mention, order++, LocaleController.getString(R.string.CreateMention)); - menu.add(R.id.menu_groupbolditalic, R.id.menu_regular, order++, LocaleController.getString(R.string.Regular)); + + SpannableStringBuilder stringBuilder; + TextStyleSpan.TextStyleRun run; + List enabledOrder = TextStyleItems.INSTANCE.getEnabledOrder(); + for (int i : enabledOrder) { + switch (i) { + case 0: + if (chat) { + menu.add(R.id.menu_groupbolditalic, R.id.menu_quote, order++, LocaleController.getString(R.string.Quote)); + } + break; + case 1: + menu.add(R.id.menu_groupbolditalic, R.id.menu_spoiler, order++, LocaleController.getString(R.string.Spoiler)); + break; + case 2: + stringBuilder = new SpannableStringBuilder(LocaleController.getString(R.string.Bold)); + stringBuilder.setSpan(new TypefaceSpan(AndroidUtilities.bold()), 0, stringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + menu.add(R.id.menu_groupbolditalic, R.id.menu_bold, order++, stringBuilder); + break; + case 3: + stringBuilder = new SpannableStringBuilder(LocaleController.getString(R.string.Italic)); + stringBuilder.setSpan(new TypefaceSpan(AndroidUtilities.getTypeface("fonts/ritalic.ttf")), 0, stringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + menu.add(R.id.menu_groupbolditalic, R.id.menu_italic, order++, stringBuilder); + break; + case 4: + stringBuilder = new SpannableStringBuilder(LocaleController.getString(R.string.MonoCode)); + stringBuilder.setSpan(new TypefaceSpan(Typeface.MONOSPACE), 0, stringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + menu.add(R.id.menu_groupbolditalic, R.id.menu_code, order++, stringBuilder); + break; + case 5: + stringBuilder = new SpannableStringBuilder(LocaleController.getString(R.string.Mono)); + stringBuilder.setSpan(new TypefaceSpan(Typeface.MONOSPACE), 0, stringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + menu.add(R.id.menu_groupbolditalic, R.id.menu_mono, order++, stringBuilder); + break; + case 6: + if (encryptedChat == null || AndroidUtilities.getPeerLayerVersion(encryptedChat.layer) >= 101) { + stringBuilder = new SpannableStringBuilder(LocaleController.getString(R.string.Strike)); + run = new TextStyleSpan.TextStyleRun(); + run.flags |= TextStyleSpan.FLAG_STYLE_STRIKE; + stringBuilder.setSpan(new TextStyleSpan(run), 0, stringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + menu.add(R.id.menu_groupbolditalic, R.id.menu_strike, order++, stringBuilder); + break; + } + case 7: + if (encryptedChat == null || AndroidUtilities.getPeerLayerVersion(encryptedChat.layer) >= 101) { + stringBuilder = new SpannableStringBuilder(LocaleController.getString(R.string.Underline)); + run = new TextStyleSpan.TextStyleRun(); + run.flags |= TextStyleSpan.FLAG_STYLE_UNDERLINE; + stringBuilder.setSpan(new TextStyleSpan(run), 0, stringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + menu.add(R.id.menu_groupbolditalic, R.id.menu_underline, order++, stringBuilder); + } + break; + case 8: + menu.add(R.id.menu_groupbolditalic, R.id.menu_link, order++, LocaleController.getString(R.string.CreateLink)); + break; + case 9: + menu.add(R.id.menu_groupbolditalic, R.id.menu_mention, order++, LocaleController.getString(R.string.CreateMention)); + break; + case 10: + menu.add(R.id.menu_groupbolditalic, R.id.menu_regular, order++, LocaleController.getString(R.string.Regular)); + break; + } + } } private void updateScheduledInterface(boolean animated) { @@ -26032,6 +26242,10 @@ private void updateBottomOverlay() { bottomOverlayChatText.setText(LocaleController.getString(R.string.ChannelUnmute), true); bottomOverlayChatText.setEnabled(true); } + if (Config.disableChannelMuteButton) { + bottomOverlayChatText.setText("", false); + bottomOverlayChatText.setEnabled(false); + } showBottomOverlayProgress(false, bottomOverlayProgress.getTag() != null); } else if (forumTopic != null && forumTopic.closed) { if (!ChatObject.canManageTopic(currentAccount, currentChat, forumTopic)) { @@ -26246,7 +26460,7 @@ public void onAnimationEnd(Animator animation) { bottomOverlayChat.setVisibility(View.VISIBLE); chatActivityEnterView.setVisibility(View.INVISIBLE); } else if (chatMode == MODE_PINNED || - currentChat != null && ((ChatObject.isNotInChat(currentChat) || !ChatObject.canWriteToChat(currentChat)) && (currentChat.join_to_send || !isThreadChat() || ChatObject.isForum(currentChat)) || forumTopic != null && forumTopic.closed && !ChatObject.canManageTopic(currentAccount, currentChat, forumTopic) || shouldDisplaySwipeToLeftToReplyInForum()) || + currentChat != null && (((ChatObject.isNotInChat(currentChat) || !ChatObject.canWriteToChat(currentChat)) && !canSendMsgInCommentGroupWithoutJoin()) && (currentChat.join_to_send || !isThreadChat() || ChatObject.isForum(currentChat)) || forumTopic != null && forumTopic.closed && !ChatObject.canManageTopic(currentAccount, currentChat, forumTopic) || shouldDisplaySwipeToLeftToReplyInForum()) || currentUser != null && (UserObject.isDeleted(currentUser) || userBlocked || UserObject.isReplyUser(currentUser))) { if (chatActivityEnterView.isEditingMessage()) { chatActivityEnterView.setVisibility(View.VISIBLE); @@ -26915,7 +27129,7 @@ public void onAnimationCancel(Animator animation) { if (user != null) { nameTextView.setText(ContactsController.formatName(user.first_name, user.last_name)); } else if (chat != null) { - nameTextView.setText(chat.title); + nameTextView.setText(StringUtils.zalgoFilter(chat.title)); } } else { if (pinnedMessageObject.isInvoice() && @@ -29194,7 +29408,8 @@ private boolean createMenu(View v, boolean single, boolean listView, float x, fl allowPin = false; } allowPin = allowPin && message.getId() > 0 && (message.messageOwner.action == null || message.messageOwner.action instanceof TLRPC.TL_messageActionEmpty) && !message.isExpiredStory() && message.type != MessageObject.TYPE_STORY_MENTION; - boolean noforwards = getMessagesController().isChatNoForwards(currentChat) || message.messageOwner.noforwards || getDialogId() == UserObject.VERIFY; + boolean noforwardsOriginal = getMessagesController().isChatNoForwards(currentChat) || message.messageOwner.noforwards || getDialogId() == UserObject.VERIFY; + boolean noforwards = !Config.ignoreChatStrict && noforwardsOriginal; boolean noforwardsOrPaidMedia = noforwards || message.type == MessageObject.TYPE_PAID_MEDIA; boolean allowUnpin = message.getDialogId() != mergeDialogId && allowPin && (pinnedMessageObjects.containsKey(message.getId()) || groupedMessages != null && !groupedMessages.messages.isEmpty() && pinnedMessageObjects.containsKey(groupedMessages.messages.get(0).getId())) && !message.isExpiredStory(); boolean allowEdit = message.canEditMessage(currentChat) && !chatActivityEnterView.hasAudioToSend() && message.getDialogId() != mergeDialogId && message.type != MessageObject.TYPE_STORY; @@ -29543,6 +29758,9 @@ public void setAutoDeleteHistory(int time, int action) { items.add(LocaleController.getString(R.string.SaveToGallery)); options.add(OPTION_SAVE_TO_GALLERY); icons.add(R.drawable.msg_gallery); + items.add(LocaleController.getString("ShareFile", R.string.ShareFile)); + options.add(OPTION_SHARE_PHOTO); + icons.add(R.drawable.msg_shareout); } } } @@ -29582,12 +29800,23 @@ public void setAutoDeleteHistory(int time, int action) { options.add(OPTION_SHARE); icons.add(R.drawable.msg_shareout); } + if (ConfigManager.getBooleanOrFalse(Defines.showDeleteDownloadFiles)) { + items.add(LocaleController.getString("DeleteDownloadedFile", + R.string.DeleteDownloadedFile)); + options.add(OPTION_DELETE_DOWNLOADED_FILE); + icons.add(R.drawable.msg_clear); + } } else if (type == 7) { if (selectedObject.isMask()) { items.add(LocaleController.getString(R.string.AddToMasks)); options.add(OPTION_ADD_TO_STICKERS_OR_MASKS); icons.add(R.drawable.msg_sticker); } else { +// if (!selectedObject.isAnimatedSticker()) { + items.add(LocaleController.getString(R.string.SaveToGallery)); + options.add(OPTION_SAVE_STICKER_TO_GALLERY); + icons.add(R.drawable.msg_gallery); +// } items.add(LocaleController.getString(R.string.AddToStickers)); options.add(OPTION_ADD_TO_STICKERS_OR_MASKS); icons.add(R.drawable.msg_sticker); @@ -29624,12 +29853,11 @@ public void setAutoDeleteHistory(int time, int action) { icons.add(R.drawable.msg_callback); } } else if (type == 9) { - if (!selectedObject.isAnimatedSticker()) { - items.add(LocaleController.getString("SaveToGallery", - R.string.SaveToGallery)); +// if (!selectedObject.isAnimatedSticker()) { + items.add(LocaleController.getString(R.string.SaveToGallery)); options.add(OPTION_SAVE_STICKER_TO_GALLERY); icons.add(R.drawable.msg_gallery); - } +// } TLRPC.Document document = selectedObject.getDocument(); if (!getMediaDataController().isStickerInFavorites(document)) { if (getMediaDataController().canAddStickerToFavorites()) { @@ -29652,7 +29880,7 @@ public void setAutoDeleteHistory(int time, int action) { icons.add(R.drawable.msg_forward); if (Config.showNoQuoteForward && !UserObject.isUserSelf(currentUser)) { items.add(LocaleController.getString("NoQuoteForward", R.string.NoQuoteForward)); - options.add(95); + options.add(OPTION_NOQUOTE_FORWARD); icons.add(R.drawable.msg_noquote_forward); } if (Config.showSaveMessages && !UserObject.isUserSelf(currentUser)) { @@ -29674,17 +29902,37 @@ public void setAutoDeleteHistory(int time, int action) { } } } + if (Config.showRepeatAsCopy) { + if (!selectedObject.isSponsored() && chatMode != MODE_SCHEDULED && (!selectedObject.needDrawBluredPreview() || selectedObject.hasExtendedMediaPreview()) && + !selectedObject.isLiveLocation() && selectedObject.type != MessageObject.TYPE_PHONE_CALL && + selectedObject.type != MessageObject.TYPE_GIFT_PREMIUM) { + boolean allowRepeat = allowChatActions && (!(isThreadChat() && !isTopic) || getMessageUtils().getMessageForRepeat(selectedObject, + selectedObjectGroup) != null); + if (allowRepeat) { + items.add(LocaleController.getString("RepeatAsCopy", R.string.RepeatAsCopy)); + options.add(OPTION_REPEAT_AS_COPY); + icons.add(R.drawable.msg_repeat); + } + } + } + if (Config.showReverse) { + if (allowChatActions) { + items.add(LocaleController.getString("Reverse", R.string.Reverse)); + options.add(OPTION_REVERSE); + icons.add(R.drawable.msg_reset); + } + } if (Config.customQuickMessageEnabled) { if (allowChatActions) { items.add(ConfigManager.getStringOrDefault(Defines.customQuickMessageDisplayName, "NULL")); options.add(Defines.customQuickMessageRow); - icons.add(R.drawable.msg_fave); + icons.add(R.drawable.msg_prpr); } } if (Config.showViewHistory) { boolean allowViewHistory = currentChat != null && chatMode == 0 && !currentChat.broadcast && !(threadMessageObjects != null && threadMessageObjects.contains(message)); if (allowViewHistory) { - items.add(LocaleController.getString("ViewUserHistory", R.string.ViewHistory)); + items.add(LocaleController.getString("ViewHistory", R.string.ViewHistory)); options.add(OPTION_VIEW_HISTORY); icons.add(R.drawable.msg_recent); } @@ -29822,6 +30070,7 @@ public void setAutoDeleteHistory(int time, int action) { icons.add(R.drawable.msg_gallery); items.add(LocaleController.getString("ShareFile", R.string.ShareFile)); options.add(OPTION_SHARE); +// options.add(OPTION_SHARE_PHOTO); // fixme: crash on share photo icons.add(R.drawable.msg_shareout); if (ConfigManager.getBooleanOrFalse(Defines.showCopyPhoto)) { items.add(LocaleController.getString("CopyPhoto", R.string.CopyPhoto)); @@ -29906,17 +30155,21 @@ public void setAutoDeleteHistory(int time, int action) { Rect rect = new Rect(); List availableReacts = getMediaDataController().getEnabledReactionsList(); - boolean isReactionsViewAvailable = !isSecretChat() && !isInScheduleMode() && currentUser == null && primaryMessage.hasReactions() && (!ChatObject.isChannel(currentChat) || currentChat.megagroup) && !availableReacts.isEmpty() && primaryMessage.messageOwner.reactions.can_see_list && !primaryMessage.isSecretMedia(); + boolean isReactionsViewAvailable = Config.showReactions && !isSecretChat() && !isInScheduleMode() && currentUser == null && primaryMessage.hasReactions() && (!ChatObject.isChannel(currentChat) || currentChat.megagroup) && !availableReacts.isEmpty() && primaryMessage.messageOwner.reactions.can_see_list && !primaryMessage.isSecretMedia(); boolean isReactionsAvailable; - if (message.isForwardedChannelPost()) { - TLRPC.ChatFull chatInfo = getMessagesController().getChatFull(-message.getFromChatId()); - if (chatInfo == null) { - isReactionsAvailable = true; - } else { + if (Config.showReactions) { + if (message.isForwardedChannelPost()) { + TLRPC.ChatFull chatInfo = getMessagesController().getChatFull(-message.getFromChatId()); + if (chatInfo == null) { + isReactionsAvailable = true; + } else { isReactionsAvailable = !isSecretChat() && chatMode != MODE_QUICK_REPLIES && !isInScheduleMode() && primaryMessage.isReactionsAvailable() && (chatInfo != null && (!(chatInfo.available_reactions instanceof TLRPC.TL_chatReactionsNone) || chatInfo.paid_reactions_available)) && !availableReacts.isEmpty(); + } + } else { + isReactionsAvailable = !message.isSecretMedia() && chatMode != MODE_QUICK_REPLIES && !isSecretChat() && !isInScheduleMode() && primaryMessage.isReactionsAvailable() && (chatInfo != null && (!(chatInfo.available_reactions instanceof TLRPC.TL_chatReactionsNone) || chatInfo.paid_reactions_available) || (chatInfo == null && !ChatObject.isChannel(currentChat)) || currentUser != null) && !availableReacts.isEmpty(); } } else { - isReactionsAvailable = !message.isSecretMedia() && chatMode != MODE_QUICK_REPLIES && !isSecretChat() && !isInScheduleMode() && primaryMessage.isReactionsAvailable() && (chatInfo != null && (!(chatInfo.available_reactions instanceof TLRPC.TL_chatReactionsNone) || chatInfo.paid_reactions_available) || (chatInfo == null && !ChatObject.isChannel(currentChat)) || currentUser != null) && !availableReacts.isEmpty(); + isReactionsAvailable = false; } boolean showMessageSeen = !isReactionsViewAvailable && !isInScheduleMode() && currentChat != null && message.isOutOwner() && message.isSent() && !message.isEditing() && !message.isSending() && !message.isSendError() && !message.isContentUnread() && !message.isUnread() && (ConnectionsManager.getInstance(currentAccount).getCurrentTime() - message.messageOwner.date < getMessagesController().chatReadMarkExpirePeriod) && (ChatObject.isMegagroup(currentChat) || !ChatObject.isChannel(currentChat)) && chatInfo != null && chatInfo.participants_count <= getMessagesController().chatReadMarkSizeThreshold && !(message.messageOwner.action instanceof TLRPC.TL_messageActionChatJoinedByRequest) && (v instanceof ChatMessageCell); boolean showPrivateMessageSeen = !isReactionsViewAvailable && currentChat == null && currentEncryptedChat == null && (currentUser != null && !UserObject.isUserSelf(currentUser) && !UserObject.isReplyUser(currentUser) && !UserObject.isAnonymous(currentUser) && !currentUser.bot && !UserObject.isService(currentUser.id)) && (userInfo == null || !userInfo.read_dates_private) && !isInScheduleMode() && message.isOutOwner() && message.isSent() && !message.isEditing() && !message.isSending() && !message.isSendError() && !message.isContentUnread() && !message.isUnread() && (ConnectionsManager.getInstance(currentAccount).getCurrentTime() - message.messageOwner.date < getMessagesController().pmReadDateExpirePeriod) && !(message.messageOwner.action instanceof TLRPC.TL_messageActionChatJoinedByRequest) && (v instanceof ChatMessageCell); @@ -30236,9 +30489,11 @@ public void onClick(View view) { } if (SharedConfig.messageSeenHintCount > 0 && contentView.getKeyboardHeight() < AndroidUtilities.dp(20)) { - messageSeenPrivacyBulletin = BulletinFactory.of(Bulletin.BulletinWindow.make(getContext()), themeDelegate).createErrorBulletin(AndroidUtilities.replaceTags(LocaleController.getString(R.string.MessageSeenTooltipMessage))); - messageSeenPrivacyBulletin.setDuration(4000); - messageSeenPrivacyBulletin.show(); + if (Config.hideMessageSeenTooltip) { + messageSeenPrivacyBulletin = BulletinFactory.of(Bulletin.BulletinWindow.make(getContext()), themeDelegate).createErrorBulletin(AndroidUtilities.replaceTags(LocaleController.getString(R.string.MessageSeenTooltipMessage))); + messageSeenPrivacyBulletin.setDuration(4000); + messageSeenPrivacyBulletin.show(); + } SharedConfig.updateMessageSeenHintCount(SharedConfig.messageSeenHintCount - 1); } @@ -30596,6 +30851,13 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { } processSelectedOption(options.get(i)); }); + cell.setOnLongClickListener(v2 -> { + if (selectedObject == null || i >= options.size()) { + return false; + } + processLongClickSelectedOption(options.get(i)); + return true; + }); if (option == OPTION_TRANSLATE) { // "Translate" button MessageObject messageObject = getMessageUtils().getMessageForTranslate(selectedObject, selectedObjectGroup); @@ -31850,7 +32112,7 @@ private void processSelectedOption(int option) { } case OPTION_FORWARD: case OPTION_NOQUOTE_FORWARD: { - setForwardParams(option == 95); + setForwardParams(option == OPTION_NOQUOTE_FORWARD); forwardingMessage = selectedObject; forwardingMessageGroup = selectedObjectGroup; Bundle args = new Bundle(); @@ -32007,6 +32269,37 @@ private void processSelectedOption(int option) { } break; } + case OPTION_SHARE_PHOTO: { + String path = selectedObject.messageOwner.attachPath; + if (path != null && path.length() > 0) { + File temp = new File(path); + if (!temp.exists()) { + path = null; + } + } + if (path == null || path.length() == 0) { + path = getFileLoader().getPathToMessage(selectedObject.messageOwner).toString(); + } + Intent intent = new Intent(Intent.ACTION_SEND); + intent.setType(selectedObject.isVideo() ? "video/mp4" : "image/jpeg"); + File f = new File(path); + if (Build.VERSION.SDK_INT >= 24) { + try { + intent.putExtra(Intent.EXTRA_STREAM, FileProvider.getUriForFile(getParentActivity(), ApplicationLoader.getApplicationId() + ".provider", f)); + intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + } catch (Exception ignore) { + intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(f)); + } + } else { + intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(f)); + } + try { + getParentActivity().startActivityForResult(Intent.createChooser(intent, LocaleController.getString("ShareFile", R.string.ShareFile)), 500); + } catch (Throwable ignore) { + + } + break; + } case OPTION_SAVE_TO_GALLERY2: { String path = selectedObject.messageOwner.attachPath; if (path != null && path.length() > 0) { @@ -32523,17 +32816,7 @@ public void run(Uri arg) { break; } case OPTION_SAVE_MESSAGE: { - ArrayList messages = new ArrayList<>(); - if (selectedObjectGroup != null) { - messages.addAll(selectedObjectGroup.messages); - } else { - messages.add(selectedObject); - } - forwardMessages(messages, false, false, true, 0, getUserConfig().getClientUserId()); - createUndoView(); - if (undoView != null) { - undoView.showWithAction(getUserConfig().getClientUserId(), UndoView.ACTION_FWD_MESSAGES, messages.size()); - } + processSaveMessage(); break; } case OPTION_QR: { @@ -32547,6 +32830,19 @@ public void run(Uri arg) { processRepeatMessage(); break; } + case OPTION_REPEAT_AS_COPY: { + if (checkSlowMode(chatActivityEnterView.getSendButton())) { + return; + } + processRepeatMessage(true); + break; + } + case OPTION_REVERSE: + if (checkSlowMode(chatActivityEnterView.getSendButton())) { + return; + } + processReverseMessage(false); + break; case Defines.customQuickMessageRow: { if (checkSlowMode(chatActivityEnterView.getSendButton())) { return; @@ -32692,6 +32988,87 @@ private void hideAds() { } } + private void processSaveMessage() { + ArrayList messages = new ArrayList<>(); + boolean noforwards = getMessagesController().isChatNoForwards(currentChat) || selectedObject.messageOwner.noforwards; + if (selectedObjectGroup != null) { + messages.addAll(selectedObjectGroup.messages); + } else { + messages.add(selectedObject); + } + if (noforwards) { + // todo send message link along + for (MessageObject message : messages) { + String path = message.messageOwner.attachPath; + if (path != null && !path.isEmpty()) { + File temp = new File(path); + if (!temp.exists()) { + path = null; + } + } + if (path == null || path.isEmpty()) { + path = getFileLoader().getPathToMessage(message.messageOwner).toString(); + } + ArrayList media = new ArrayList<>(); + SendMessagesHelper.SendingMediaInfo info = new SendMessagesHelper.SendingMediaInfo(); + info.path = path; + info.thumbPath = null; + info.videoEditedInfo = null; + info.isVideo = path.endsWith(".mp4"); + info.caption = null; + info.entities = null; + info.masks = null; + info.ttl = 0; + media.add(info); + SendMessagesHelper.prepareSendingMedia(getAccountInstance(), media, getUserConfig().getClientUserId(), null, null, null, null, true, true, null, false, 0, 0, false, null, quickReplyShortcut, getQuickReplyId(), 0, false); + } + BulletinFactory.of(ChatActivity.this).showForwardedBulletinWithTag(getUserConfig().getClientUserId(), messages.size()); + } else { + forwardMessages(messages, false, false, true, 0, getUserConfig().getClientUserId()); + createUndoView(); + if (undoView != null) { + undoView.showWithAction(getUserConfig().getClientUserId(), UndoView.ACTION_FWD_MESSAGES, messages.size()); + } + } + } + + private void processLongClickSelectedOption(int option) { + if (selectedObject == null || getParentActivity() == null) { + return; + } + switch (option) { + case OPTION_FORWARD -> { + setForwardParams(true); + forwardingMessage = selectedObject; + forwardingMessageGroup = selectedObjectGroup; + Bundle args = new Bundle(); + args.putBoolean("onlySelect", true); + args.putInt("dialogsType", DialogsActivity.DIALOGS_TYPE_FORWARD); + args.putInt("messagesCount", forwardingMessageGroup == null ? 1 : forwardingMessageGroup.messages.size()); + args.putInt("hasPoll", forwardingMessage.isPoll() ? (forwardingMessage.isPublicPoll() ? 2 : 1) : 0); + args.putBoolean("hasInvoice", forwardingMessage.isInvoice()); + args.putBoolean("canSelectTopics", true); + DialogsActivity fragment = new DialogsActivity(args); + fragment.setDelegate(this); + presentFragment(fragment); + } + case OPTION_REPEAT -> { + if (checkSlowMode(chatActivityEnterView.getSendButton())) { + return; + } + processRepeatMessage(false, true); + } + case OPTION_REVERSE -> { + processReverseMessage(true); + } + default -> processSelectedOption(option); + } + selectedObject = null; + selectedObjectGroup = null; + selectedObjectToEditCaption = null; + closeMenu(); + } + @Override public boolean didSelectDialogs(DialogsActivity fragment, ArrayList dids, CharSequence message, boolean param, boolean notify, int scheduleDate, TopicsFragment topicsFragment) { if ((messagePreviewParams == null && (!fragment.isQuote || replyingMessageObject == null) || fragment.isQuote && replyingMessageObject == null) && forwardingMessage == null && selectedMessagesIds[0].size() == 0 && selectedMessagesIds[1].size() == 0) { @@ -33312,7 +33689,7 @@ public void openSearchWithText(String text) { updateBottomOverlay(); } if ((threadMessageId == 0 || isTopic || chatMode == MODE_SAVED) && !UserObject.isReplyUser(currentUser)) { - openSearchKeyboard = text == null; + openSearchKeyboard = text == null || text.isEmpty(); if (searchItem != null) { searchItem.openSearch(openSearchKeyboard); } @@ -33320,8 +33697,8 @@ public void openSearchWithText(String text) { if (searchItem != null) { searchItem.setSearchFieldText(text, false); } - getMediaDataController().searchMessagesInChat(searchingQuery = (text == null ? "" : text), dialog_id, mergeDialogId, classGuid, 0, threadMessageId, false, searchingUserMessages, - searchingChatMessages, !TextUtils.isEmpty(text), searchingReaction, searchingType); + lastSearchedMessageId = 0; + getMediaDataController().searchMessagesInChat(searchingQuery = (text == null ? "" : text), dialog_id, mergeDialogId, classGuid, 0, threadMessageId, false, searchingUserMessages, searchingChatMessages, !TextUtils.isEmpty(text), searchingReaction, searchingType, true); updatePinnedMessageView(true); } @@ -36527,7 +36904,8 @@ public void onSearchPressed(EditText editText) { hashtagSearchTabs.tabs.scrollToTab(defaultSearchPage, defaultSearchPage); } - getMediaDataController().searchMessagesInChat(searchingQuery, dialog_id, mergeDialogId, classGuid, 0, threadMessageId, searchingUserMessages, searchingChatMessages, searchingReaction, searchingType); + lastSearchedMessageId = 0; + getMediaDataController().searchMessagesInChat(searchingQuery, dialog_id, mergeDialogId, classGuid, 0, threadMessageId, searchingUserMessages, searchingChatMessages, searchingReaction, searchingType, true); } @Override @@ -38155,7 +38533,7 @@ public void didPressReplyMessage(ChatMessageCell cell, int id, float x, float y, if (did < 0) { chat = getMessagesController().getChat(-did); } - if (did == Long.MAX_VALUE) { + if (did == Long.MAX_VALUE || did != dialog_id && chat != null && (chat.left || chat.kicked)) { if (messageObject != null && messageObject.messageOwner != null && messageObject.messageOwner.reply_to != null && !TextUtils.isEmpty(messageObject.messageOwner.reply_to.quote_text) && messageObject.replyTextEllipsized && !messageObject.replyTextRevealed && !messageObject.shouldDrawWithoutBackground()) { messageObject.replyTextRevealed = true; updateMessageAnimated(messageObject, true); @@ -41064,23 +41442,50 @@ protected boolean hideKeyboardOnShow() { return super.hideKeyboardOnShow(); } - public boolean processRepeatMessage() { - if ((isThreadChat() && !isTopic) || getMessagesController().isChatNoForwards(currentChat) || selectedObject.messageOwner.noforwards) { + public boolean processRepeatMessage(){ + return processRepeatMessage(false, false); + } + + public boolean processRepeatMessage(boolean asCopy) { + return processRepeatMessage(asCopy, false); + } + + public boolean processRepeatMessage(boolean asCopy, boolean longClick) { + if (asCopy || longClick || (isThreadChat() && !isTopic) || getMessagesController().isChatNoForwards(currentChat) || selectedObject.messageOwner.noforwards) { var messageObject = getMessageUtils().getMessageForRepeat(selectedObject, selectedObjectGroup); if (messageObject != null) { + var replyToMsg = longClick ? messageObject.replyMessageObject : threadMessageObject; if (messageObject.isAnyKindOfSticker() && !messageObject.isAnimatedEmojiStickers() && !messageObject.isAnimatedEmoji() && !messageObject.isDice()) { Object parent = getMediaDataController().getStickerSetById(MediaDataController.getStickerSetId(selectedObject.getDocument())); getSendMessagesHelper().sendSticker( - selectedObject.getDocument(), null, dialog_id, threadMessageObject, + selectedObject.getDocument(), null, dialog_id, replyToMsg, threadMessageObject, null, replyingQuote, null, true, 0, false, parent, quickReplyShortcut, getQuickReplyId()); return true; } else { - var message = messageObject.messageOwner.message; + String message; + ArrayList origin_entities; + if (messageObject.translated) { + if (messageObject.originalMessage instanceof String) { + message = (String) messageObject.originalMessage; + origin_entities = messageObject.messageOwner.entities; + } else if (messageObject.originalMessage instanceof Pair) { + Pair> pair = + (Pair>) messageObject.originalMessage; + message = pair.first; + origin_entities = pair.second; + } else { + message = messageObject.messageOwner.message; + origin_entities = messageObject.messageOwner.entities; + } + } else { + message = messageObject.messageOwner.message; + origin_entities = messageObject.messageOwner.entities; + } if (!TextUtils.isEmpty(message)) { ArrayList entities; - if (messageObject.messageOwner.entities != null && !messageObject.messageOwner.entities.isEmpty()) { + if (origin_entities != null && !origin_entities.isEmpty()) { entities = new ArrayList<>(); - for (TLRPC.MessageEntity entity : messageObject.messageOwner.entities) { + for (TLRPC.MessageEntity entity : origin_entities) { if (entity instanceof TLRPC.TL_messageEntityMentionName) { TLRPC.TL_inputMessageEntityMentionName mention = new TLRPC.TL_inputMessageEntityMentionName(); mention.length = entity.length; @@ -41094,7 +41499,7 @@ public boolean processRepeatMessage() { } else { entities = null; } - getSendMessagesHelper().sendMessage(SendMessageParams.of(message, dialog_id, threadMessageObject, threadMessageObject, null, false, entities, null, null, true, 0, null, false)); + getSendMessagesHelper().sendMessage(SendMessageParams.of(message, dialog_id, replyToMsg, threadMessageObject, null, false, entities, null, null, true, 0, null, false)); return true; } } @@ -41111,6 +41516,43 @@ public boolean processRepeatMessage() { return false; } + public boolean processReverseMessage(boolean longClick) { + var messageObject = getMessageUtils().getMessageForRepeat(selectedObject, selectedObjectGroup); + if (messageObject != null) { + var replyToMsg = longClick ? messageObject : threadMessageObject; + if (!messageObject.isAnyKindOfSticker() || messageObject.isAnimatedEmojiStickers() || messageObject.isAnimatedEmoji() || messageObject.isDice()) { + var message = messageObject.messageOwner.message; + if (!TextUtils.isEmpty(message)) { + message = WordUtils.INSTANCE.replaceAntonyms(message); + ArrayList entities; + if (messageObject.messageOwner.entities != null && !messageObject.messageOwner.entities.isEmpty()) { + entities = new ArrayList<>(); + for (TLRPC.MessageEntity entity : messageObject.messageOwner.entities) { + if (entity instanceof TLRPC.TL_messageEntityMentionName) { + TLRPC.TL_inputMessageEntityMentionName mention = new TLRPC.TL_inputMessageEntityMentionName(); + mention.length = entity.length; + mention.offset = entity.offset; + mention.user_id = getMessagesController().getInputUser(((TLRPC.TL_messageEntityMentionName) entity).user_id); + entities.add(mention); + } else { + entities.add(entity); + } + } + } else { + entities = null; + } + getSendMessagesHelper().sendMessage(SendMessageParams.of( + message, dialog_id, replyToMsg, + threadMessageObject, null, false, entities, + null, null, true, 0, null, false)); + return true; + } + return false; + } + } + return false; + } + @Override public ArrayList getForwardingMessages() { ArrayList fmessages = new ArrayList<>(); @@ -41198,7 +41640,7 @@ public void updateClip(int[] clip) { clip[1] = chatListView.getMeasuredHeight() - (chatListView.getPaddingBottom() - AndroidUtilities.dp(3)); } } - + private void updateVisibleWallpaperActions() { if (chatListView != null && chatAdapter != null) { for (int i = 0; i < chatListView.getChildCount(); ++i) { @@ -41908,6 +42350,15 @@ public boolean dispatchTouchEvent(MotionEvent event) { } + private int getFirstVisibleMessage() { + return MessageHelper.INSTANCE.getFirstVisibleMessage(chatLayoutManager, chatListView, chatAdapter, messages); + } + + private boolean canSendMsgInCommentGroupWithoutJoin() { + return currentChat != null && currentChat.megagroup && chatInfo != null && chatInfo.linked_chat_id != 0 + && !currentChat.join_to_send && !currentChat.min; + } + private void checkHashtagStories(boolean instant) { if (searchType != SEARCH_PUBLIC_POSTS) return; if (messagesSearchAdapter == null) return; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ChatUsersActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ChatUsersActivity.java index 07a6b3bd08..43a82c61ad 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ChatUsersActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ChatUsersActivity.java @@ -100,7 +100,7 @@ import java.util.Locale; import java.util.concurrent.atomic.AtomicInteger; -import top.qwq2333.nullgram.utils.Log; +import xyz.nextalone.nnngram.utils.Log; public class ChatUsersActivity extends BaseFragment implements NotificationCenter.NotificationCenterDelegate { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/AlertsCreator.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/AlertsCreator.java index 74c37cbf10..f2384accbe 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/AlertsCreator.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/AlertsCreator.java @@ -149,7 +149,7 @@ import java.util.concurrent.atomic.AtomicBoolean; import java.util.stream.Collectors; -import top.qwq2333.nullgram.helpers.PasscodeHelper; +import xyz.nextalone.nnngram.helpers.PasscodeHelper; public class AlertsCreator { public final static int PERMISSIONS_REQUEST_TOP_ICON_SIZE = 72; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/AudioPlayerAlert.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/AudioPlayerAlert.java index 9311ed526a..675badb8cb 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/AudioPlayerAlert.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/AudioPlayerAlert.java @@ -106,6 +106,8 @@ import java.util.ArrayList; import java.util.List; +import xyz.nextalone.gen.Config; + public class AudioPlayerAlert extends BottomSheet implements NotificationCenter.NotificationCenterDelegate, DownloadController.FileDownloadProgressListener { private ActionBar actionBar; @@ -2020,11 +2022,12 @@ private void updateTitle(boolean shutdown) { optionsButton.setVisibility(View.VISIBLE); } final long dialogId = messageObject.getDialogId(); - final boolean noforwards = ( + final boolean noforwards = !Config.ignoreChatStrict && ( dialogId < 0 && MessagesController.getInstance(currentAccount).isChatNoForwards(-dialogId) || MessagesController.getInstance(currentAccount).isChatNoForwards(messageObject.getChatId()) || messageObject.messageOwner.noforwards ); + optionsButton.showSubItem(5); if (noforwards) { optionsButton.hideSubItem(1); optionsButton.hideSubItem(2); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/BlockingUpdateView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/BlockingUpdateView.java index 823c6533c4..062bf62382 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/BlockingUpdateView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/BlockingUpdateView.java @@ -40,8 +40,8 @@ import java.util.Locale; import kotlin.Unit; -import top.qwq2333.nullgram.utils.APKUtils; -import top.qwq2333.nullgram.utils.UpdateUtils; +import xyz.nextalone.nnngram.utils.APKUtils; +import xyz.nextalone.nnngram.utils.UpdateUtils; public class BlockingUpdateView extends FrameLayout implements NotificationCenter.NotificationCenterDelegate { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatActivityEnterView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatActivityEnterView.java index 5ecb2544e9..31e77dbd7f 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatActivityEnterView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatActivityEnterView.java @@ -78,6 +78,7 @@ import android.util.Property; import android.util.TypedValue; import android.view.ActionMode; +import android.view.DragEvent; import android.view.Gravity; import android.view.HapticFeedbackConstants; import android.view.KeyEvent; @@ -101,6 +102,7 @@ import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; +import android.widget.Toast; import androidx.annotation.Keep; import androidx.annotation.NonNull; @@ -202,8 +204,8 @@ import java.util.List; import java.util.Locale; -import top.qwq2333.gen.Config; -import top.qwq2333.nullgram.utils.PermissionUtils; +import xyz.nextalone.gen.Config; +import xyz.nextalone.nnngram.utils.PermissionUtils; public class ChatActivityEnterView extends BlurredFrameLayout implements NotificationCenter.NotificationCenterDelegate, SizeNotifierFrameLayout.SizeNotifierFrameLayoutDelegate, StickersAlert.StickersAlertDelegate, SuggestEmojiView.AnchorViewDelegate { @@ -885,6 +887,9 @@ public void run() { private Runnable recordAudioVideoRunnable = new Runnable() { @Override public void run() { + if (Config.hideQuickSendMediaBottom) { + return; + } if (delegate == null || parentActivity == null) { return; } @@ -2894,7 +2899,10 @@ public boolean onTouchEvent(MotionEvent motionEvent) { } }; audioVideoButtonContainer.setSoundEffectsEnabled(false); - sendButtonContainer.addView(audioVideoButtonContainer, LayoutHelper.createFrame(48, 48)); + if (!Config.hideQuickSendMediaBottom) + sendButtonContainer.addView(audioVideoButtonContainer, LayoutHelper.createFrame(48, 48)); + else + audioVideoButtonContainer.setVisibility(GONE); audioVideoButtonContainer.setFocusable(true); audioVideoButtonContainer.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES); @@ -3123,13 +3131,22 @@ public boolean shouldDrawBackground() { return shouldDrawBackground; } }; - sendButton.setVisibility(INVISIBLE); + if (Config.hideQuickSendMediaBottom) + sendButton.setVisibility(VISIBLE); + else + sendButton.setVisibility(INVISIBLE); int color = getThemedColor(Theme.key_chat_messagePanelSend); sendButton.setContentDescription(getString("Send", R.string.Send)); sendButton.setSoundEffectsEnabled(false); - sendButton.setScaleX(0.1f); - sendButton.setScaleY(0.1f); - sendButton.setAlpha(0.0f); + if (Config.hideQuickSendMediaBottom) { + sendButton.setScaleX(1.0f); + sendButton.setScaleY(1.0f); + sendButton.setAlpha(1.0f); + } else { + sendButton.setScaleX(0.1f); + sendButton.setScaleY(0.1f); + sendButton.setAlpha(0.0f); + } if (Build.VERSION.SDK_INT >= 21) { sendButton.setBackground(Theme.createSelectorDrawable(ColorUtils.setAlphaComponent(color, 24), 1)); } @@ -4333,7 +4350,7 @@ public void dismiss() { if (sendWhenOnlineButton != null) { TLRPC.User user = parentFragment == null ? null : parentFragment.getCurrentUser(); - if (user != null && !user.bot && !(user.status instanceof TLRPC.TL_userStatusEmpty) && !(user.status instanceof TLRPC.TL_userStatusOnline) && !(user.status instanceof TLRPC.TL_userStatusRecently) && !(user.status instanceof TLRPC.TL_userStatusLastMonth) && !(user.status instanceof TLRPC.TL_userStatusLastWeek)) { + if (messageEditText != null && !TextUtils.isEmpty(messageEditText.getText()) && user != null && !user.bot && !(user.status instanceof TLRPC.TL_userStatusEmpty) && !(user.status instanceof TLRPC.TL_userStatusOnline) && !(user.status instanceof TLRPC.TL_userStatusRecently) && !(user.status instanceof TLRPC.TL_userStatusLastMonth) && !(user.status instanceof TLRPC.TL_userStatusLastWeek)) { sendWhenOnlineButton.setVisibility(VISIBLE); } else { sendWhenOnlineButton.setVisibility(GONE); @@ -4535,7 +4552,7 @@ public void didSelectDate(boolean notify, int scheduleDate) { options.setupSelectors(); if (sendWhenOnlineButton != null) { TLRPC.User user = parentFragment == null ? null : parentFragment.getCurrentUser(); - if (user != null && !user.bot && !(user.status instanceof TLRPC.TL_userStatusEmpty) && !(user.status instanceof TLRPC.TL_userStatusOnline) && !(user.status instanceof TLRPC.TL_userStatusRecently) && !(user.status instanceof TLRPC.TL_userStatusLastMonth) && !(user.status instanceof TLRPC.TL_userStatusLastWeek)) { + if (messageEditText != null && !TextUtils.isEmpty(messageEditText.getText()) && user != null && !user.bot && !(user.status instanceof TLRPC.TL_userStatusEmpty) && !(user.status instanceof TLRPC.TL_userStatusOnline) && !(user.status instanceof TLRPC.TL_userStatusRecently) && !(user.status instanceof TLRPC.TL_userStatusLastMonth) && !(user.status instanceof TLRPC.TL_userStatusLastWeek)) { sendWhenOnlineButton.setVisibility(VISIBLE); } else { sendWhenOnlineButton.setVisibility(GONE); @@ -4883,7 +4900,26 @@ public boolean onTextContextMenuItem(int id) { return super.onTextContextMenuItem(id); } + @Override + public boolean onDragEvent(DragEvent event) { + if (event.getAction() == DragEvent.ACTION_DROP) { + ClipData clipData = event.getClipData(); + if (clipData != null && LaunchActivity.instance != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + LaunchActivity.instance.requestDragAndDropPermissions(event); + if (clipData.getItemCount() == 1 && (clipData.getDescription().hasMimeType("image/*") || clipData.getDescription().hasMimeType("video/mp4")) && !isEditingBusinessLink()) { + editPhoto(clipData.getItemAt(0).getUri(), clipData.getDescription().getMimeType(0)); + return true; + } else if (clipData.getItemCount() > 1) { + Toast.makeText(getContext(), "Don't drag more than 1 file at a time", Toast.LENGTH_SHORT).show(); + return true; + } + } + } + return super.onDragEvent(event); + } + private void editPhoto(Uri uri, String mime) { + boolean isVideo = mime.contains("video"); final File file = AndroidUtilities.generatePicturePath(parentFragment != null && parentFragment.isSecretChat(), MimeTypeMap.getSingleton().getExtensionFromMimeType(mime)); Utilities.globalQueue.postRunnable(() -> { try { @@ -4897,7 +4933,7 @@ private void editPhoto(Uri uri, String mime) { } in.close(); fos.close(); - MediaController.PhotoEntry photoEntry = new MediaController.PhotoEntry(0, -1, 0, file.getAbsolutePath(), 0, false, 0, 0, 0); + MediaController.PhotoEntry photoEntry = new MediaController.PhotoEntry(0, -1, 0, file.getAbsolutePath(), 0, isVideo, 0, 0, 0); ArrayList entries = new ArrayList<>(); entries.add(photoEntry); AndroidUtilities.runOnUIThread(() -> { @@ -7185,7 +7221,7 @@ public void onAnimationCancel(Animator animation) { Theme.setSelectorDrawableColor(sendButton.getBackground(), Color.argb(24, Color.red(color), Color.green(color), Color.blue(color)), true); } - if (audioVideoButtonContainer.getVisibility() == VISIBLE || slowModeButton.getVisibility() == VISIBLE || showBotButton || showSendButton) { + if (audioVideoButtonContainer.getVisibility() == VISIBLE || (Config.hideQuickSendMediaBottom && sendButton.getVisibility() == VISIBLE) || slowModeButton.getVisibility() == VISIBLE || showBotButton || showSendButton) { if (animated) { if (runningAnimationType == 1 && caption == null || runningAnimationType == 3 && caption != null) { return; @@ -7613,15 +7649,21 @@ public void onAnimationCancel(Animator animation) { delegate.onAttachButtonShow(); } } - - audioVideoButtonContainer.setVisibility(VISIBLE); + if (Config.hideQuickSendMediaBottom) { + sendButton.setVisibility(VISIBLE); + }else { + audioVideoButtonContainer.setVisibility(VISIBLE); + } runningAnimation = new AnimatorSet(); runningAnimationType = 2; ArrayList animators = new ArrayList<>(); + if (Config.hideQuickSendMediaBottom) { + animators.add(ObjectAnimator.ofFloat(sendButton, View.SCALE_X, 1.0f)); + animators.add(ObjectAnimator.ofFloat(sendButton, View.SCALE_Y, 1.0f)); + } animators.add(ObjectAnimator.ofFloat(audioVideoButtonContainer, View.SCALE_X, 1.0f)); animators.add(ObjectAnimator.ofFloat(audioVideoButtonContainer, View.SCALE_Y, 1.0f)); - float alpha = 1.0f; TLRPC.Chat chat = parentFragment == null ? null : parentFragment.getCurrentChat(); TLRPC.UserFull userFull = parentFragment == null ? userInfo : parentFragment.getCurrentUserInfo(); @@ -7631,6 +7673,8 @@ public void onAnimationCancel(Animator animation) { alpha = userFull.voice_messages_forbidden ? 0.5f : 1.0f; } + if (Config.hideQuickSendMediaBottom) + animators.add(ObjectAnimator.ofFloat(sendButton, View.ALPHA, alpha)); animators.add(ObjectAnimator.ofFloat(audioVideoButtonContainer, View.ALPHA, alpha)); if (cancelBotButton.getVisibility() == VISIBLE) { animators.add(ObjectAnimator.ofFloat(cancelBotButton, View.SCALE_X, 0.1f)); @@ -7645,9 +7689,11 @@ public void onAnimationCancel(Animator animation) { animators.add(ObjectAnimator.ofFloat(slowModeButton, View.SCALE_Y, 0.1f)); animators.add(ObjectAnimator.ofFloat(slowModeButton, View.ALPHA, 0.0f)); } else { - animators.add(ObjectAnimator.ofFloat(sendButton, View.SCALE_X, 0.1f)); - animators.add(ObjectAnimator.ofFloat(sendButton, View.SCALE_Y, 0.1f)); - animators.add(ObjectAnimator.ofFloat(sendButton, View.ALPHA, 0.0f)); + if (!Config.hideQuickSendMediaBottom) { + animators.add(ObjectAnimator.ofFloat(sendButton, View.SCALE_X, 0.1f)); + animators.add(ObjectAnimator.ofFloat(sendButton, View.SCALE_Y, 0.1f)); + animators.add(ObjectAnimator.ofFloat(sendButton, View.ALPHA, 0.0f)); + } } runningAnimation.playTogether(animators); @@ -7660,8 +7706,12 @@ public void onAnimationEnd(Animator animation) { runningAnimation = null; runningAnimationType = 0; - if (audioVideoButtonContainer != null) { - audioVideoButtonContainer.setVisibility(VISIBLE); + if (Config.hideQuickSendMediaBottom) { + sendButton.setVisibility(VISIBLE); + } else { + if (audioVideoButtonContainer != null) { + audioVideoButtonContainer.setVisibility(VISIBLE); + } } } } @@ -7679,10 +7729,17 @@ public void onAnimationCancel(Animator animation) { slowModeButton.setScaleY(0.1f); slowModeButton.setAlpha(0.0f); setSlowModeButtonVisible(false); - sendButton.setScaleX(0.1f); - sendButton.setScaleY(0.1f); - sendButton.setAlpha(0.0f); - sendButton.setVisibility(GONE); + if (!Config.hideQuickSendMediaBottom) { + sendButton.setScaleX(0.1f); + sendButton.setScaleY(0.1f); + sendButton.setAlpha(0.0f); + sendButton.setVisibility(GONE); + } else { + sendButton.setScaleX(1.0f); + sendButton.setScaleY(1.0f); + sendButton.setAlpha(1.0f); + sendButton.setVisibility(VISIBLE); + } cancelBotButton.setScaleX(0.1f); cancelBotButton.setScaleY(0.1f); cancelBotButton.setAlpha(0.0f); @@ -7693,13 +7750,17 @@ public void onAnimationCancel(Animator animation) { expandStickersButton.setAlpha(0.0f); expandStickersButton.setVisibility(GONE); } - audioVideoButtonContainer.setScaleX(1.0f); - audioVideoButtonContainer.setScaleY(1.0f); - audioVideoButtonContainer.setAlpha(1.0f); - audioVideoButtonContainer.setVisibility(VISIBLE); + if (!Config.hideQuickSendMediaBottom) { + audioVideoButtonContainer.setScaleX(1.0f); + audioVideoButtonContainer.setScaleY(1.0f); + audioVideoButtonContainer.setAlpha(1.0f); + audioVideoButtonContainer.setVisibility(VISIBLE); + } if (attachLayout != null) { if (getVisibility() == VISIBLE) { - delegate.onAttachButtonShow(); + if (delegate != null) { + delegate.onAttachButtonShow(); + } } attachLayoutAlpha = 1.0f; updateAttachLayoutParams(); @@ -9005,10 +9066,17 @@ R.raw.position_above, getString(R.string.CaptionBelow), audioVideoButtonContainer.setAlpha(0.0f); audioVideoButtonContainer.setVisibility(GONE); } else { - sendButton.setScaleX(0.1f); - sendButton.setScaleY(0.1f); - sendButton.setAlpha(0.0f); - sendButton.setVisibility(GONE); + if (Config.hideQuickSendMediaBottom) { + sendButton.setScaleX(1.0f); + sendButton.setScaleY(1.0f); + sendButton.setAlpha(1.0f); + sendButton.setVisibility(VISIBLE); + } else { + sendButton.setScaleX(0.1f); + sendButton.setScaleY(0.1f); + sendButton.setAlpha(0.0f); + sendButton.setVisibility(GONE); + } slowModeButton.setScaleX(0.1f); slowModeButton.setScaleY(0.1f); slowModeButton.setAlpha(0.0f); @@ -9017,10 +9085,12 @@ R.raw.position_above, getString(R.string.CaptionBelow), attachLayoutAlpha = 1.0f; updateAttachLayoutParams(); attachLayout.setVisibility(VISIBLE); - audioVideoButtonContainer.setScaleX(1.0f); - audioVideoButtonContainer.setScaleY(1.0f); - audioVideoButtonContainer.setAlpha(1.0f); - audioVideoButtonContainer.setVisibility(VISIBLE); + if (!Config.hideQuickSendMediaBottom) { + audioVideoButtonContainer.setScaleX(1.0f); + audioVideoButtonContainer.setScaleY(1.0f); + audioVideoButtonContainer.setAlpha(1.0f); + audioVideoButtonContainer.setVisibility(VISIBLE); + } } createScheduledButton(); if (scheduledButton != null && scheduledButton.getTag() != null) { @@ -9151,7 +9221,7 @@ public ImageView getAttachButton() { } public View getSendButton() { - return sendButton.getVisibility() == VISIBLE ? sendButton : audioVideoButtonContainer; + return sendButton.getVisibility() == VISIBLE || Config.hideQuickSendMediaBottom ? sendButton : audioVideoButtonContainer; } public View getAudioVideoButtonContainer() { @@ -9561,7 +9631,9 @@ public void updateSendAsButton(boolean animated) { !isEditingMessage() && !isRecordingAudioVideo() && (recordedAudioPanel == null || recordedAudioPanel.getVisibility() != View.VISIBLE) && (!ChatObject.isChannelAndNotMegaGroup(chat) || ChatObject.canSendAsPeers(chat)); if (isVisible) { - createSenderSelectView(); + if (!Config.hideSendAsButton) { + createSenderSelectView(); + } } if (defPeer != null) { if (defPeer.channel_id != 0) { @@ -9620,8 +9692,10 @@ public void updateSendAsButton(boolean animated) { @Override public void onAnimationStart(Animator animation) { if (isVisible) { - createSenderSelectView(); - senderSelectView.setVisibility(VISIBLE); + if (!Config.hideSendAsButton) { + createSenderSelectView(); + senderSelectView.setVisibility(VISIBLE); + } } float tx = 0; if (senderSelectView != null) { @@ -9654,7 +9728,9 @@ public void onAnimationEnd(Animator animation) { public void onAnimationCancel(Animator animation) { float tx = 0; if (isVisible) { - createSenderSelectView(); + if (!Config.hideSendAsButton) { + createSenderSelectView(); + } } if (senderSelectView != null) { senderSelectView.setVisibility(isVisible ? VISIBLE : GONE); @@ -9674,7 +9750,9 @@ public void onAnimationCancel(Animator animation) { } } else { if (isVisible) { - createSenderSelectView(); + if (!Config.hideSendAsButton) { + createSenderSelectView(); + } } if (senderSelectView != null) { senderSelectView.setVisibility(isVisible ? VISIBLE : GONE); @@ -9727,7 +9805,7 @@ private void updateBotButton(boolean animated) { botButton.setContentDescription(getString("AccDescrBotKeyboard", R.string.AccDescrBotKeyboard)); } } else { - if (!canShowBotsMenu) { + if (!canShowBotsMenu && !Config.hideInputFieldBotButton) { createBotButton(); botButtonDrawable.setIcon(R.drawable.input_bot1, true); botButton.setContentDescription(getString("AccDescrBotCommands", R.string.AccDescrBotCommands)); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAttachAlert.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAttachAlert.java index 1c55df4f01..a2ced12672 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAttachAlert.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAttachAlert.java @@ -154,8 +154,8 @@ import java.util.Locale; import java.util.Objects; -import top.qwq2333.gen.Config; -import top.qwq2333.nullgram.utils.PermissionUtils; +import xyz.nextalone.gen.Config; +import xyz.nextalone.nnngram.utils.PermissionUtils; public class ChatAttachAlert extends BottomSheet implements NotificationCenter.NotificationCenterDelegate, BottomSheet.BottomSheetDelegateInterface { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAttachAlertPhotoLayout.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAttachAlertPhotoLayout.java index 1dd7970a94..ac5883536b 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAttachAlertPhotoLayout.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAttachAlertPhotoLayout.java @@ -125,9 +125,9 @@ import java.util.List; import java.util.Map; -import top.qwq2333.gen.Config; -import top.qwq2333.nullgram.utils.Log; -import top.qwq2333.nullgram.utils.PermissionUtils; +import xyz.nextalone.gen.Config; +import xyz.nextalone.nnngram.utils.Log; +import xyz.nextalone.nnngram.utils.PermissionUtils; public class ChatAttachAlertPhotoLayout extends ChatAttachAlert.AttachAlertLayout implements NotificationCenter.NotificationCenterDelegate { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAvatarContainer.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAvatarContainer.java index 8171002222..e3071cf5e0 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAvatarContainer.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAvatarContainer.java @@ -72,7 +72,8 @@ import java.util.concurrent.atomic.AtomicReference; -import top.qwq2333.gen.Config; +import xyz.nextalone.gen.Config; +import xyz.nextalone.nnngram.utils.StringUtils; public class ChatAvatarContainer extends FrameLayout implements NotificationCenter.NotificationCenterDelegate { @@ -584,6 +585,7 @@ public void openProfile(boolean byAvatar, boolean fromChatAnimation, boolean rem } ProfileActivity fragment = new ProfileActivity(args, sharedMediaPreloader); fragment.setChatInfo(parentFragment.getCurrentChatInfo()); + fragment.setChatInfoChannelMsg(parentFragment.profileChannelMessageFetcher); if (fromChatAnimation) { fragment.setPlayProfileAnimation(byAvatar ? 2 : 1); } @@ -830,6 +832,7 @@ public void setTitle(CharSequence value) { public void setTitle(CharSequence value, boolean scam, boolean fake, boolean verified, boolean premium, TLRPC.EmojiStatus emojiStatus, boolean animated) { if (value != null) { + value = StringUtils.zalgoFilter(value); value = Emoji.replaceEmoji(value, titleTextView.getPaint().getFontMetricsInt(), AndroidUtilities.dp(24), false); } titleTextView.setText(value); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/EditTextBoldCursor.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/EditTextBoldCursor.java index 6d34d0c304..50bb07b3c6 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/EditTextBoldCursor.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/EditTextBoldCursor.java @@ -80,7 +80,8 @@ import java.util.ArrayList; import java.util.List; -import top.qwq2333.gen.Config; +import xyz.nextalone.gen.Config; +import xyz.nextalone.nnngram.helpers.HyperOsHelper; public class EditTextBoldCursor extends EditTextEffects { @@ -230,7 +231,7 @@ public void setShowDisableMarkdown(boolean show) { showDisableMarkdown = show; } - + public void setHintText2(CharSequence text, boolean animated) { if (hintAnimatedDrawable2 != null) { hintAnimatedDrawable2.setText(text, !LocaleController.isRTL && animated); @@ -1220,6 +1221,7 @@ public ActionMode startActionMode(ActionMode.Callback callback) { callback.onCreateActionMode(floatingActionMode, floatingActionMode.getMenu()); extendActionMode(floatingActionMode, floatingActionMode.getMenu()); addUndoRedo(floatingActionMode.getMenu()); + addHyperOsAi(floatingActionMode.getMenu()); floatingActionMode.invalidate(); getViewTreeObserver().addOnPreDrawListener(floatingToolbarPreDrawListener); invalidate(); @@ -1243,16 +1245,33 @@ private void addUndoRedo(Menu menu) { } } + private void addHyperOsAi(Menu menu) { + // Check if is HyperOS + if (!HyperOsHelper.INSTANCE.isHyperAiAvailable(getContext())) { + return; + } + + // Add AI menu item if it doesn't already exist + if (menu.findItem(R.id.hyperos_ai) == null) { + menu.add(Menu.NONE, R.id.hyperos_ai, 0, "AI") + .setAlphabeticShortcut('s') + .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); + } + } + @Override public boolean onTextContextMenuItem(int id) { if (id == R.id.menu_markdown) { disableMarkdown = !disableMarkdown; floatingActionMode.finish(); return true; + } else if (id == R.id.hyperos_ai) { + HyperOsHelper.INSTANCE.startHyperOsAiService(this); + return true; } return super.onTextContextMenuItem(id); } - + private boolean shouldShowQuoteButton() { if (!hasSelection() || getSelectionStart() < 0 || getSelectionEnd() < 0 || getSelectionStart() == getSelectionEnd()) { return false; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/EditTextCaption.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/EditTextCaption.java index d1c49e9fe2..0b1579daae 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/EditTextCaption.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/EditTextCaption.java @@ -58,6 +58,8 @@ import java.util.List; +import xyz.nextalone.nnngram.ui.sortList.items.TextStyleItems; + public class EditTextCaption extends EditTextBoldCursor { private static final int ACCESSIBILITY_ACTION_SHARE = 0x10000000; @@ -866,16 +868,10 @@ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) { } } if (hasSelection()) { - infoCompat.addAction(new AccessibilityNodeInfoCompat.AccessibilityActionCompat(R.id.menu_spoiler, LocaleController.getString("Spoiler", R.string.Spoiler))); - infoCompat.addAction(new AccessibilityNodeInfoCompat.AccessibilityActionCompat(R.id.menu_bold, LocaleController.getString("Bold", R.string.Bold))); - infoCompat.addAction(new AccessibilityNodeInfoCompat.AccessibilityActionCompat(R.id.menu_italic, LocaleController.getString("Italic", R.string.Italic))); - infoCompat.addAction(new AccessibilityNodeInfoCompat.AccessibilityActionCompat(R.id.menu_mono, LocaleController.getString("Mono", R.string.Mono))); - infoCompat.addAction(new AccessibilityNodeInfoCompat.AccessibilityActionCompat(R.id.menu_code, LocaleController.getString("MonoCode", R.string.MonoCode))); - infoCompat.addAction(new AccessibilityNodeInfoCompat.AccessibilityActionCompat(R.id.menu_strike, LocaleController.getString("Strike", R.string.Strike))); - infoCompat.addAction(new AccessibilityNodeInfoCompat.AccessibilityActionCompat(R.id.menu_underline, LocaleController.getString("Underline", R.string.Underline))); - infoCompat.addAction(new AccessibilityNodeInfoCompat.AccessibilityActionCompat(R.id.menu_mention, LocaleController.getString("CreateMention", R.string.CreateMention))); - infoCompat.addAction(new AccessibilityNodeInfoCompat.AccessibilityActionCompat(R.id.menu_link, LocaleController.getString("CreateLink", R.string.CreateLink))); - infoCompat.addAction(new AccessibilityNodeInfoCompat.AccessibilityActionCompat(R.id.menu_regular, LocaleController.getString("Regular", R.string.Regular))); + List enabledOrder = TextStyleItems.INSTANCE.getEnabledOrder(); + for (int i : enabledOrder) { + infoCompat.addAction(new AccessibilityNodeInfoCompat.AccessibilityActionCompat(TextStyleItems.INSTANCE.getItemIds()[i], TextStyleItems.INSTANCE.getItemNames()[i])); + } } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/EditTextEffects.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/EditTextEffects.java index 1e88d92341..5feabc714b 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/EditTextEffects.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/EditTextEffects.java @@ -85,7 +85,9 @@ public class EditTextEffects extends EditText { public EditTextEffects(Context context) { super(context); - + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM) { + setLocalePreferredLineHeightForMinimumUsed(false); + } if (Looper.getMainLooper().getThread() == Thread.currentThread()) { clickDetector = new SpoilersClickDetector(this, spoilers, this::onSpoilerClicked); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/EmbedBottomSheet.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/EmbedBottomSheet.java index f2ee9aef9e..52bd431e41 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/EmbedBottomSheet.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/EmbedBottomSheet.java @@ -68,6 +68,8 @@ import org.telegram.ui.LaunchActivity; import org.telegram.ui.PhotoViewer; +import java.io.ByteArrayOutputStream; +import java.io.InputStream; import java.util.HashMap; import java.util.Locale; @@ -87,6 +89,7 @@ public class EmbedBottomSheet extends BottomSheet { private FrameLayout containerLayout; private ImageView pipButton; private boolean isYouTube; + private boolean isSpotify; private int[] position = new int[2]; @@ -264,6 +267,10 @@ private EmbedBottomSheet(Context context, String title, String description, Stri width = AndroidUtilities.displaySize.x; height = AndroidUtilities.displaySize.y / 2; } + isSpotify = WebPlayerView.isSpotify(embedUrl); + if (isSpotify) { + height -= 200; + } fullscreenVideoContainer = new FrameLayout(context); fullscreenVideoContainer.setKeepScreenOn(true); @@ -781,7 +788,13 @@ public ViewGroup getTextureViewContainer() { return; } boolean animated = false; - if (PipVideoOverlay.show(inAppOnly, parentActivity, webView, width, height)) { + int newWidth = width; + int newHeight = height; + if (isSpotify) { + newWidth = 600; + newHeight = 200; + } + if (PipVideoOverlay.show(inAppOnly, parentActivity, webView, newWidth, newHeight)) { PipVideoOverlay.setParentSheet(EmbedBottomSheet.this); } @@ -909,6 +922,7 @@ public void onOpenAnimationEnd() { args.put("Referer", "messenger.telegram.org"); try { String currentYoutubeId = videoView.getYoutubeId(); + boolean isSpotify = WebPlayerView.isSpotify(embedUrl); if (currentYoutubeId != null) { progressBarBlackBackground.setVisibility(View.VISIBLE); isYouTube = true; @@ -939,6 +953,17 @@ public void onOpenAnimationEnd() { } } webView.loadDataWithBaseURL("https://messenger.telegram.org/", String.format(Locale.US, youtubeFrame, currentYoutubeId, seekToTime), "text/html", "UTF-8", "https://youtube.com"); + } else if (isSpotify) { + InputStream in = getContext().getAssets().open("spotify_embed.html"); + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + byte[] buffer = new byte[10240]; + int c; + while ((c = in.read(buffer)) != -1) { + bos.write(buffer, 0, c); + } + bos.close(); + in.close(); + webView.loadDataWithBaseURL("https://messenger.telegram.org/", String.format(Locale.US, bos.toString("UTF-8"), embedUrl), "text/html", "UTF-8", "https://open.spotify.com"); } else { webView.loadUrl(embedUrl, args); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/EmojiPacksAlert.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/EmojiPacksAlert.java index d40aac138e..240cb05b96 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/EmojiPacksAlert.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/EmojiPacksAlert.java @@ -1532,6 +1532,25 @@ protected void onSend(androidx.collection.LongSparseArray dids, in } catch (Exception e) { FileLog.e(e); } + } else if (id == menu_user_profile) { + // Na: open sticker's admin user profile or copy admin userId + long userId = stickerSet.set.id >> 32; + if ((stickerSet.set.id >> 24 & 0xff) != 0) { + userId += 0x100000000L; + } + if (fragment != null) { + TLRPC.User user = fragment.getMessagesController().getUser(userId); + if (user != null) { + MessagesController.getInstance(currentAccount).openChatOrProfileWith(user, null, fragment, 0, false); + return; + } + } + try { + AndroidUtilities.addToClipboard("" + userId); + BulletinFactory.of((FrameLayout) containerView, resourcesProvider).createCopyLinkBulletin().show(); + } catch (Exception e) { + FileLog.e(e); + } } } @@ -1608,6 +1627,8 @@ public void updatePressedProgress() { } } + private final int menu_user_profile = 105; + private class EmojiPackHeader extends FrameLayout { public LinkSpanDrawable.LinksTextView titleView; @@ -1747,6 +1768,7 @@ public EmojiPackHeader(Context context, boolean single) { addView(optionsButton, LayoutHelper.createFrame(40, 40, Gravity.TOP | Gravity.RIGHT, 0, 5, 5 - backgroundPaddingLeft / AndroidUtilities.density, 0)); optionsButton.addSubItem(1, R.drawable.msg_share, LocaleController.getString(R.string.StickersShare)); optionsButton.addSubItem(2, R.drawable.msg_link, LocaleController.getString(R.string.CopyLink)); + optionsButton.addSubItem(menu_user_profile, R.drawable.msg_openprofile, LocaleController.getString(R.string.ChannelAdmin)); optionsButton.setOnClickListener(v -> optionsButton.toggleSubMenu()); optionsButton.setDelegate(EmojiPacksAlert.this::onSubItemClick); optionsButton.setContentDescription(LocaleController.getString(R.string.AccDescrMoreOptions)); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/EmojiView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/EmojiView.java index db2eb8b3ce..66ea29b0bd 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/EmojiView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/EmojiView.java @@ -155,7 +155,7 @@ import java.util.Map; import java.util.Objects; -import top.qwq2333.gen.Config; +import xyz.nextalone.gen.Config; @SuppressLint("SoonBlockedPrivateApi") public class EmojiView extends FrameLayout implements @@ -6676,9 +6676,9 @@ private void updateItems() { packStartPosition.put(key = "fav", totalItems); } else if (a == -2) { documents = recentStickers; - if (!documents.isEmpty() && !StickersAlert.DISABLE_STICKER_EDITOR) { - isAddedStickerBtnSet = true; - } +// if (!documents.isEmpty() && !StickersAlert.DISABLE_STICKER_EDITOR) { +// isAddedStickerBtnSet = true; +// } packStartPosition.put(key = "recent", totalItems); } else if (a == -1) { continue; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/FilterTabsView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/FilterTabsView.java index ea6eea264c..6a4877dc4c 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/FilterTabsView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/FilterTabsView.java @@ -71,9 +71,9 @@ import java.util.ArrayList; -import top.qwq2333.gen.Config; -import top.qwq2333.nullgram.helpers.FolderIconHelper; -import top.qwq2333.nullgram.utils.Defines; +import xyz.nextalone.gen.Config; +import xyz.nextalone.nnngram.helpers.FolderIconHelper; +import xyz.nextalone.nnngram.utils.Defines; public class FilterTabsView extends FrameLayout { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/ImageUpdater.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/ImageUpdater.java index a30d1ae55a..8fd17b4be5 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/ImageUpdater.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/ImageUpdater.java @@ -63,7 +63,7 @@ import java.util.ArrayList; import java.util.HashMap; -import top.qwq2333.nullgram.utils.PermissionUtils; +import xyz.nextalone.nnngram.utils.PermissionUtils; public class ImageUpdater implements NotificationCenter.NotificationCenterDelegate, PhotoCropActivity.PhotoEditActivityDelegate { private final static int ID_TAKE_PHOTO = 0, diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/PasscodeView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/PasscodeView.java index 306cd24255..7815c5734e 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/PasscodeView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/PasscodeView.java @@ -97,7 +97,7 @@ import java.util.List; import java.util.concurrent.Executor; -import top.qwq2333.nullgram.helpers.PasscodeHelper; +import xyz.nextalone.nnngram.helpers.PasscodeHelper; public class PasscodeView extends FrameLayout implements NotificationCenter.NotificationCenterDelegate { private final static float BACKGROUND_SPRING_STIFFNESS = 300f; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/SearchViewPager.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/SearchViewPager.java index 9eb4d828a5..0dcb05bd8b 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/SearchViewPager.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/SearchViewPager.java @@ -79,8 +79,8 @@ import java.util.Iterator; import java.util.Set; -import top.qwq2333.nullgram.config.ConfigManager; -import top.qwq2333.nullgram.utils.Defines; +import xyz.nextalone.nnngram.config.ConfigManager; +import xyz.nextalone.nnngram.utils.Defines; public class SearchViewPager extends ViewPagerFixed implements FilteredSearchView.UiCallback, NotificationCenter.NotificationCenterDelegate { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/SenderSelectPopup.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/SenderSelectPopup.java index b17e8eb309..babbcafaec 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/SenderSelectPopup.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/SenderSelectPopup.java @@ -71,7 +71,7 @@ import java.util.Arrays; import java.util.List; -import top.qwq2333.gen.Config; +import xyz.nextalone.gen.Config; public class SenderSelectPopup extends ActionBarPopupWindow { public final static float SPRING_STIFFNESS = 750f; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/ShareAlert.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/ShareAlert.java index a9dcba7855..e3190a50cd 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/ShareAlert.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/ShareAlert.java @@ -130,8 +130,8 @@ import java.util.Map; import java.util.concurrent.atomic.AtomicReference; -import top.qwq2333.nullgram.config.ForwardContext; -import top.qwq2333.nullgram.ui.SendOptionsMenuLayout; +import xyz.nextalone.nnngram.config.ForwardContext; +import xyz.nextalone.nnngram.ui.SendOptionsMenuLayout; public class ShareAlert extends BottomSheet implements NotificationCenter.NotificationCenterDelegate { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/SharedMediaLayout.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/SharedMediaLayout.java index afb56960d3..4ff360e2b9 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/SharedMediaLayout.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/SharedMediaLayout.java @@ -167,8 +167,9 @@ import java.util.HashSet; import java.util.Objects; -import top.qwq2333.nullgram.config.ConfigManager; -import top.qwq2333.nullgram.utils.Defines; +import xyz.nextalone.gen.Config; +import xyz.nextalone.nnngram.config.ConfigManager; +import xyz.nextalone.nnngram.utils.Defines; @SuppressWarnings("unchecked") public class SharedMediaLayout extends FrameLayout implements NotificationCenter.NotificationCenterDelegate, DialogCell.DialogCellDelegate { @@ -3252,7 +3253,7 @@ private void updateForwardItem() { if (forwardItem == null) { return; } - boolean noforwards = profileActivity.getMessagesController().isChatNoForwards(-dialog_id) || hasNoforwardsMessage(); + boolean noforwards = !Config.ignoreChatStrict && (profileActivity.getMessagesController().isChatNoForwards(-dialog_id) || hasNoforwardsMessage()); forwardItem.setAlpha(noforwards ? 0.5f : 1f); if (forwardNoQuoteItem != null) forwardNoQuoteItem.setAlpha(noforwards ? 0.5f : 1f); if (noforwards && forwardItem.getBackground() != null) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/StickersAlert.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/StickersAlert.java index 030a4522fc..ef1bf2427e 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/StickersAlert.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/StickersAlert.java @@ -120,7 +120,7 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -import top.qwq2333.nullgram.helpers.StickerHelper; +import xyz.nextalone.nnngram.helpers.StickerHelper; public class StickersAlert extends BottomSheet implements NotificationCenter.NotificationCenterDelegate { @@ -176,6 +176,8 @@ public interface StickersAlertCustomButtonDelegate { public boolean probablyEmojis; private boolean isEditModeEnabled; + private final int menu_user_profile = 105; + public TLRPC.TL_messages_stickerSet stickerSet; private TLRPC.Document selectedSticker; private SendMessagesHelper.ImportingSticker selectedStickerPath; @@ -1131,6 +1133,7 @@ public void requestLayout() { optionsButton.addSubItem(1, R.drawable.msg_share, LocaleController.getString("StickersShare", R.string.StickersShare)); optionsButton.addSubItem(2, R.drawable.msg_link, LocaleController.getString("CopyLink", R.string.CopyLink)); optionsButton.addSubItem(3, R.drawable.media_download, LocaleController.getString("Save", R.string.Save)); + optionsButton.addSubItem(menu_user_profile, R.drawable.msg_openprofile, LocaleController.getString("ChannelAdmin", R.string.ChannelAdmin)); optionsButton.setOnClickListener(v -> { checkOptions(); @@ -1433,6 +1436,25 @@ protected void onSend(LongSparseArray dids, int count, TLRPC.TL_fo dismiss(); MediaDataController.getInstance(currentAccount).toggleStickerSet(getContext(), stickerSet, 1, parentFragment, false, false); }); + } else if (id == menu_user_profile) { + // Na: open sticker's admin user profile or copy admin userId + long userId = stickerSet.set.id >> 32; + if ((stickerSet.set.id >> 24 & 0xff) != 0) { + userId += 0x100000000L; + } + if (parentFragment != null) { + TLRPC.User user = parentFragment.getMessagesController().getUser(userId); + if (user != null) { + MessagesController.getInstance(currentAccount).openChatOrProfileWith(user, null, parentFragment, 0, false); + return; + } + } + try { + AndroidUtilities.addToClipboard("" + userId); + BulletinFactory.of((FrameLayout) containerView, resourcesProvider).createCopyLinkBulletin().show(); + } catch (Exception e) { + FileLog.e(e); + } } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/TextStyleSpan.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/TextStyleSpan.java index a6447b7c35..230cfde4af 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/TextStyleSpan.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/TextStyleSpan.java @@ -17,6 +17,8 @@ import org.telegram.tgnet.TLRPC; import org.telegram.ui.ActionBar.Theme; +import xyz.nextalone.nnngram.utils.TypefaceUtils; + public class TextStyleSpan extends MetricAffectingSpan { private int textSize; @@ -78,7 +80,7 @@ public void applyStyle(TextPaint p) { public Typeface getTypeface() { if ((flags & FLAG_STYLE_MONO) != 0 || (flags & FLAG_STYLE_CODE) != 0) { return Typeface.MONOSPACE; - } else if ((flags & FLAG_STYLE_BOLD) != 0 && (flags & FLAG_STYLE_ITALIC) != 0) { + } else if ((flags & FLAG_STYLE_BOLD) != 0 && (flags & FLAG_STYLE_ITALIC) != 0 && TypefaceUtils.isMediumWeightSupported() && TypefaceUtils.isItalicSupported()) { return AndroidUtilities.getTypeface("fonts/rmediumitalic.ttf"); } else if ((flags & FLAG_STYLE_BOLD) != 0) { return AndroidUtilities.bold(); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/TranslateAlert.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/TranslateAlert.java index 8c5fa654a4..14255dc685 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/TranslateAlert.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/TranslateAlert.java @@ -89,8 +89,8 @@ import java.util.Locale; import kotlin.Unit; -import top.qwq2333.gen.Config; -import top.qwq2333.nullgram.helpers.TranslateHelper; +import xyz.nextalone.gen.Config; +import xyz.nextalone.nnngram.helpers.TranslateHelper; public class TranslateAlert extends Dialog { @@ -273,7 +273,7 @@ public TranslateAlert(BaseFragment fragment, Context context, int currentAccount this.onLinkPress = onLinkPress; this.noforwards = noforwards; this.fragment = fragment; - this.fromLanguage = /*fromLanguage != null && fromLanguage.equals("und") ? "auto" : */fromLanguage; + this.fromLanguage = fromLanguage == null || fromLanguage.equals("und") ? "auto" : fromLanguage; this.toLanguage = toLanguage; this.text = text; this.textBlocks = new ArrayList<>(); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/UndoView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/UndoView.java index 002616d6e4..be5dab3a26 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/UndoView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/UndoView.java @@ -61,9 +61,9 @@ import java.util.ArrayList; -import top.qwq2333.gen.Config; -import top.qwq2333.nullgram.config.ConfigManager; -import top.qwq2333.nullgram.utils.Defines; +import xyz.nextalone.gen.Config; +import xyz.nextalone.nnngram.config.ConfigManager; +import xyz.nextalone.nnngram.utils.Defines; @SuppressWarnings("FieldCanBeLocal") @Deprecated // use Bulletin instead diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/UpdateAppAlertDialog.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/UpdateAppAlertDialog.java index 8618bad3c4..a6efefd31f 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/UpdateAppAlertDialog.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/UpdateAppAlertDialog.java @@ -35,7 +35,7 @@ import org.telegram.ui.ActionBar.Theme; import org.telegram.ui.Stories.recorder.ButtonWithCounterView; -import top.qwq2333.nullgram.ui.TextViewEffects; +import xyz.nextalone.nnngram.ui.TextViewEffects; public class UpdateAppAlertDialog extends BottomSheet { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/UpdateLayout.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/UpdateLayout.java index 2f9c275895..35b8bdfd19 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/UpdateLayout.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/UpdateLayout.java @@ -32,7 +32,7 @@ import java.io.File; import java.util.ArrayList; -import top.qwq2333.nullgram.utils.APKUtils; +import xyz.nextalone.nnngram.utils.APKUtils; public class UpdateLayout extends IUpdateLayout { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/VideoPlayer.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/VideoPlayer.java index bf5205b758..b582d38b1d 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/VideoPlayer.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/VideoPlayer.java @@ -32,6 +32,7 @@ import android.view.SurfaceView; import android.view.TextureView; import android.view.ViewGroup; +import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -1701,6 +1702,7 @@ public void onPlayerError(PlaybackException error) { } } } else { + Toast.makeText(ApplicationLoader.applicationContext, error.getErrorCodeName(), Toast.LENGTH_LONG).show(); delegate.onError(this, error); } }); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/WallpaperUpdater.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/WallpaperUpdater.java index 54048c6111..f9f2a70735 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/WallpaperUpdater.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/WallpaperUpdater.java @@ -35,7 +35,7 @@ import java.io.FileOutputStream; import java.util.ArrayList; -import top.qwq2333.nullgram.utils.PermissionUtils; +import xyz.nextalone.nnngram.utils.PermissionUtils; public class WallpaperUpdater { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/WebPlayerView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/WebPlayerView.java index bfc33facd9..80cc03cbfd 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/WebPlayerView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/WebPlayerView.java @@ -2098,6 +2098,13 @@ public static String getYouTubeVideoId(String url) { return id; } + public static boolean isSpotify(String url) { + if (url != null && url.startsWith("https://embed.spotify.com/")) { + return true; + } + return false; + } + public boolean canHandleUrl(String url) { if (url != null) { if (url.endsWith(".mp4")) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/spoilers/SpoilersTextView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/spoilers/SpoilersTextView.java index 87ebcd6853..7a02e6e6e9 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/spoilers/SpoilersTextView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/spoilers/SpoilersTextView.java @@ -25,9 +25,9 @@ import java.util.List; import java.util.Stack; -import top.qwq2333.gen.Config; -import top.qwq2333.nullgram.config.ConfigManager; -import top.qwq2333.nullgram.utils.Defines; +import xyz.nextalone.gen.Config; +import xyz.nextalone.nnngram.config.ConfigManager; +import xyz.nextalone.nnngram.utils.Defines; public class SpoilersTextView extends TextView implements TextSelectionHelper.SimpleSelectabeleView { private SpoilersClickDetector clickDetector; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ContactAddActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ContactAddActivity.java index bf6517488b..b651d4c0af 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ContactAddActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ContactAddActivity.java @@ -66,7 +66,7 @@ import java.io.File; import java.util.ArrayList; -import top.qwq2333.gen.Config; +import xyz.nextalone.gen.Config; public class ContactAddActivity extends BaseFragment implements NotificationCenter.NotificationCenterDelegate, ImageUpdater.ImageUpdaterDelegate { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ContentPreviewViewer.java b/TMessagesProj/src/main/java/org/telegram/ui/ContentPreviewViewer.java index b375c09c2f..63bcffe435 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ContentPreviewViewer.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ContentPreviewViewer.java @@ -107,7 +107,7 @@ import java.util.ArrayList; import java.util.List; -import top.qwq2333.gen.Config; +import xyz.nextalone.gen.Config; public class ContentPreviewViewer { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/DialogsActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/DialogsActivity.java index 59f6ce8788..fe06eb8ddd 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/DialogsActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/DialogsActivity.java @@ -264,14 +264,14 @@ import java.util.List; import java.util.concurrent.ConcurrentHashMap; -import top.qwq2333.gen.Config; -import top.qwq2333.nullgram.config.ForwardContext; -import top.qwq2333.nullgram.helpers.PasscodeHelper; -import top.qwq2333.nullgram.helpers.QrHelper; -import top.qwq2333.nullgram.ui.AppLinkVerifyBottomSheet; -import top.qwq2333.nullgram.ui.SendOptionsMenuLayout; -import top.qwq2333.nullgram.utils.APKUtils; -import top.qwq2333.nullgram.utils.Defines; +import xyz.nextalone.gen.Config; +import xyz.nextalone.nnngram.config.ForwardContext; +import xyz.nextalone.nnngram.helpers.PasscodeHelper; +import xyz.nextalone.nnngram.helpers.QrHelper; +import xyz.nextalone.nnngram.ui.AppLinkVerifyBottomSheet; +import xyz.nextalone.nnngram.ui.SendOptionsMenuLayout; +import xyz.nextalone.nnngram.utils.APKUtils; +import xyz.nextalone.nnngram.utils.Defines; public class DialogsActivity extends BaseFragment implements NotificationCenter.NotificationCenterDelegate, FloatingDebugProvider { @@ -2082,9 +2082,9 @@ protected void onMeasure(int widthSpec, int heightSpec) { RecyclerView.ViewHolder holder = parentPage.listView.findViewHolderForAdapterPosition(pos); if (holder != null) { int top = holder.itemView.getTop(); - if (parentPage.dialogsType == DIALOGS_TYPE_DEFAULT && hasHiddenArchive() && parentPage.archivePullViewState == ARCHIVE_ITEM_STATE_HIDDEN) { - pos = Math.max(1, pos); - } +// if (parentPage.dialogsType == DIALOGS_TYPE_DEFAULT && hasHiddenArchive() && parentPage.archivePullViewState == ARCHIVE_ITEM_STATE_HIDDEN) { +// pos = Math.max(1, pos); +// } ignoreLayout = true; parentPage.layoutManager.scrollToPositionWithOffset(pos, (int) (top - lastListPadding + scrollAdditionalOffset + parentPage.pageAdditionalOffset)); ignoreLayout = false; @@ -3321,11 +3321,7 @@ public boolean canToggleSearch() { } else { statusDrawable = new AnimatedEmojiDrawable.SwapAnimatedEmojiDrawable(null, dp(26)); statusDrawable.center = true; - if (BuildVars.DEBUG_VERSION) { - actionBar.setTitle(LocaleController.getString("AppNameBeta", R.string.AppNameBeta), statusDrawable); - } else { - actionBar.setTitle(LocaleController.getString("AppName", R.string.AppName), statusDrawable); - } + actionBar.setTitle(actionBarDefaultTitle = Config.getCustomTitle(), statusDrawable); updateStatus(UserConfig.getInstance(currentAccount).getCurrentUser(), false); } if (folderId == 0) { @@ -3494,6 +3490,9 @@ public int getTabCounter(int tabId) { if (initialDialogsType == DIALOGS_TYPE_FORWARD) { return 0; } + if (Config.ignoreFolderUnreadCount) { + return 0; + } if (tabId == filterTabsView.getDefaultTabId()) { return getMessagesStorage().getMainUnreadCount(); } @@ -3594,7 +3593,7 @@ public boolean didSelectTab(FilterTabsView.TabView tabView, boolean selected) { .add(R.drawable.msg_edit, defaultTab ? LocaleController.getString(R.string.FilterEditAll) : LocaleController.getString(R.string.FilterEdit), () -> { presentFragment(defaultTab ? new FiltersSetupActivity() : new FilterCreateActivity(dialogFilter)); }) - .addIf(dialogFilter != null && !dialogs.isEmpty(), muteAll ? R.drawable.msg_mute : R.drawable.msg_unmute, muteAll ? LocaleController.getString(R.string.FilterMuteAll) : LocaleController.getString(R.string.FilterUnmuteAll), () -> { + .addIf(!Config.hideFilterMuteAll && dialogFilter != null && !dialogs.isEmpty(), muteAll ? R.drawable.msg_mute : R.drawable.msg_unmute, muteAll ? LocaleController.getString(R.string.FilterMuteAll) : LocaleController.getString(R.string.FilterUnmuteAll), () -> { int count = 0; for (int i = 0; i < dialogs.size(); ++i) { TLRPC.Dialog dialog = dialogs.get(i); @@ -5375,7 +5374,7 @@ public void openAnimationFinished(boolean backward) { if (!hasStories) { DialogsActivity.this.setScrollY(0); } - if (!hasFragment()) { + if (!hasFragment() && hasStories) { invalidateScrollY = true; fixScrollYAfterArchiveOpened = true; if (fragmentView != null) { @@ -6906,6 +6905,9 @@ public int getTopOffset(int tag) { updateVisibleRows(0, false); updateProxyButton(false, true); updateStoriesVisibility(false); + if (Config.hideDialogsFloatingButton) { + hideFloatingButton(true); + } checkSuggestClearDatabase(); if (filterTabsView != null && viewPages[0] != null && viewPages[0].dialogsAdapter != null) { int dialogsType = viewPages[0].dialogsAdapter.getDialogsType(); @@ -8620,7 +8622,7 @@ private void updateFloatingButtonOffset() { } } - public boolean storiesEnabled = true; + public boolean storiesEnabled = !Config.hideStories; private void updateStoriesPosting() { final boolean storiesEnabled = getMessagesController().storiesEnabled(); if (this.storiesEnabled != storiesEnabled) { @@ -9949,6 +9951,10 @@ private void updateProxyButton(boolean animated, boolean force) { if (proxyDrawable == null || doneItem != null && doneItem.getVisibility() == View.VISIBLE) { return; } + if (Config.hideProxyEntryInTitle) { + proxyItem.setVisibility(View.GONE); + return; + } boolean showDownloads = false; for (int i = 0; i < getDownloadController().downloadingFiles.size(); i++) { if (getFileLoader().isLoadingFile(getDownloadController().downloadingFiles.get(i).getFileName())) { @@ -11053,6 +11059,9 @@ public void onAnimationEnd(Animator animation) { } private void hideFloatingButton(boolean hide) { + if (Config.hideDialogsFloatingButton) { + hide = true; + } if (rightSlidingDialogContainer.hasFragment()) { hide = true; } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/DocumentSelectActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/DocumentSelectActivity.java index d48f7f6c7e..e6ce9bc200 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/DocumentSelectActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/DocumentSelectActivity.java @@ -94,8 +94,8 @@ import java.util.HashSet; import java.util.StringTokenizer; -import top.qwq2333.gen.Config; -import top.qwq2333.nullgram.utils.Log; +import xyz.nextalone.gen.Config; +import xyz.nextalone.nnngram.utils.Log; public class DocumentSelectActivity extends BaseFragment { @@ -1459,7 +1459,7 @@ private void listRoots() { try { File newPath = ApplicationLoader.applicationContext.getExternalFilesDir(null); - File telegramPath = new File(newPath, "Nullgram"); + File telegramPath = new File(newPath, "Nnngram"); if (telegramPath.exists()) { fs = new ListItem(); fs.title = "Telegram"; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ExternalActionActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ExternalActionActivity.java index 73652e0f46..b80fcdb99b 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ExternalActionActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ExternalActionActivity.java @@ -48,7 +48,7 @@ import java.util.ArrayList; -import top.qwq2333.gen.Config; +import xyz.nextalone.gen.Config; public class ExternalActionActivity extends Activity implements INavigationLayout.INavigationLayoutDelegate { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/FilterCreateActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/FilterCreateActivity.java index 261bf319a7..675f33d0a4 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/FilterCreateActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/FilterCreateActivity.java @@ -116,8 +116,8 @@ import java.util.ArrayList; import java.util.Collections; -import top.qwq2333.nullgram.helpers.FolderIconHelper; -import top.qwq2333.nullgram.ui.IconSelector; +import xyz.nextalone.nnngram.helpers.FolderIconHelper; +import xyz.nextalone.nnngram.ui.IconSelector; public class FilterCreateActivity extends BaseFragment { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/FiltersSetupActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/FiltersSetupActivity.java index 8f92f1d76b..76da5d1466 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/FiltersSetupActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/FiltersSetupActivity.java @@ -86,7 +86,7 @@ import java.util.ArrayList; -import top.qwq2333.nullgram.helpers.FolderIconHelper; +import xyz.nextalone.nnngram.helpers.FolderIconHelper; public class FiltersSetupActivity extends BaseFragment implements NotificationCenter.NotificationCenterDelegate { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/LanguageSelectActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/LanguageSelectActivity.java index da5d45aa0a..8ec59e2b63 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/LanguageSelectActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/LanguageSelectActivity.java @@ -58,7 +58,8 @@ import java.util.HashSet; import java.util.Timer; -import top.qwq2333.nullgram.activity.GeneralSettingActivity; +import xyz.nextalone.nnngram.activity.GeneralSettingActivity; + public class LanguageSelectActivity extends BaseFragment implements NotificationCenter.NotificationCenterDelegate { @@ -641,7 +642,7 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { case VIEW_TYPE_SETTINGS: { TextSettingsCell settingsCell = (TextSettingsCell) holder.itemView; settingsCell.updateRTL(); - settingsCell.setText(LocaleController.getString("NullSettings", R.string.NullSettings), false); + settingsCell.setText(LocaleController.getString("NnngramName", R.string.NullgramName), false); /*HashSet langCodes = RestrictedLanguagesSelectActivity.getRestrictedLanguages(); final String doNotTranslateCellName = LocaleController.getString("DoNotTranslate", R.string.DoNotTranslate); String doNotTranslateCellValue = null; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/LaunchActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/LaunchActivity.java index 0325eb31bd..2d3203d0e1 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/LaunchActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/LaunchActivity.java @@ -231,14 +231,14 @@ import java.util.zip.ZipInputStream; import kotlin.Unit; -import top.qwq2333.gen.Config; -import top.qwq2333.nullgram.config.ConfigManager; -import top.qwq2333.nullgram.helpers.MonetHelper; -import top.qwq2333.nullgram.helpers.SettingsHelper; -import top.qwq2333.nullgram.utils.Defines; -import top.qwq2333.nullgram.utils.Log; -import top.qwq2333.nullgram.utils.UpdateUtils; -import top.qwq2333.nullgram.utils.Utils; +import xyz.nextalone.gen.Config; +import xyz.nextalone.nnngram.config.ConfigManager; +import xyz.nextalone.nnngram.helpers.MonetHelper; +import xyz.nextalone.nnngram.helpers.SettingsHelper; +import xyz.nextalone.nnngram.utils.Defines; +import xyz.nextalone.nnngram.utils.Log; +import xyz.nextalone.nnngram.utils.UpdateUtils; +import xyz.nextalone.nnngram.utils.Utils; public class LaunchActivity extends BasePermissionsActivity implements INavigationLayout.INavigationLayoutDelegate, NotificationCenter.NotificationCenterDelegate, DialogsActivity.DialogsActivityDelegate { public final static String EXTRA_FORCE_NOT_INTERNAL_APPS = "force_not_internal_apps"; @@ -678,6 +678,12 @@ public boolean drawChild(Canvas canvas, View child, long drawingTime) { args.putLong("dialog_id", UserConfig.getInstance(currentAccount).getClientUserId()); args.putInt("type", MediaActivity.TYPE_STORIES); presentFragment(new MediaActivity(args, null)); + } else if (id == 18) { + Bundle args = new Bundle(); + args.putInt("folderId", 1); + args.putBoolean("onlySelect", false); + drawerLayoutContainer.closeDrawer(true); + presentFragment(new DialogsActivity(args)); } } }); @@ -2296,7 +2302,7 @@ private boolean handleIntent(Intent intent, boolean isNew, boolean restore, bool text = data.getQueryParameter("text"); } else if (path.startsWith("addstickers/")) { sticker = path.replace("addstickers/", ""); - } else if (path.startsWith("nullsetting/")) { + } else if (path.startsWith("nnnsettings/")) { SettingsHelper.processDeepLink(data, fragment -> { AndroidUtilities.runOnUIThread(() -> presentFragment(fragment, false, false)); if (AndroidUtilities.isTablet()) { @@ -2803,7 +2809,7 @@ private boolean handleIntent(Intent intent, boolean isNew, boolean restore, bool } else if ((url.startsWith("tg:calllog") || url.startsWith("tg://calllog"))) { showCallLog = true; } else if (url.startsWith("tg:null") || url.startsWith("tg://null")) { - url = url.replace("tg:null", "tg://t.me/nullsetting").replace("tg://null", "tg://t.me/nullsetting"); + url = url.replace("tg:null", "tg://t.me/nnnsettings").replace("tg://null", "tg://t.me/nnnsettings"); data = Uri.parse(url); SettingsHelper.processDeepLink(data, fragment -> { AndroidUtilities.runOnUIThread(() -> presentFragment(fragment, false, false)); @@ -5747,9 +5753,11 @@ public void checkAppUpdate(boolean force) { if (res != null) { Log.d("checkUpdate: res is not null"); if (SharedConfig.pendingAppUpdate != null && SharedConfig.pendingAppUpdate.version.equals(res.version)) { + Log.d("checkUpdate: same version"); return; } if (SharedConfig.setNewAppVersionAvailable(res)) { + Log.d("checkUpdate: new version available: " + res.version); if (res.can_not_skip) { showUpdateActivity(accountNum, res, false); } else { @@ -5762,11 +5770,11 @@ public void checkAppUpdate(boolean force) { Log.d("checkUpdate: res is null"); if (force) { if (!error) { - if (!BuildConfig.isPlay) { +// if (!BuildConfig.isPlay) { showBulletin(factory -> factory.createErrorBulletin(LocaleController.getString("VersionUpdateNoUpdate", R.string.VersionUpdateNoUpdate))); - } else { - showBulletin(factory -> factory.createSimpleBulletin(R.raw.chats_infotip, LocaleController.getString("NoUpdateAvailablePlay", R.string.NoUpdateAvailablePlay), LocaleController.getString("NoUpdateAvailablePlayDelay", R.string.NoUpdateAvailablePlayDelay))); - } +// } else { +// showBulletin(factory -> factory.createSimpleBulletin(R.raw.chats_infotip, LocaleController.getString("NoUpdateAvailablePlay", R.string.NoUpdateAvailablePlay), LocaleController.getString("NoUpdateAvailablePlayDelay", R.string.NoUpdateAvailablePlayDelay))); +// } } else { AlertsCreator.createSimpleAlert(this, LocaleController.getString("ErrorOccurred", R.string.ErrorOccurred) + "\n" + error).show(); } @@ -6052,7 +6060,7 @@ public boolean didSelectDialogs(DialogsActivity dialogsFragment, ArrayList 0 && !photosEditorOpened) { if (sendingText != null && sendingText.length() <= 1024 && photoPathsArray.size() == 1) { photoPathsArray.get(0).caption = sendingText; sendingText = null; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/LauncherIconController.java b/TMessagesProj/src/main/java/org/telegram/ui/LauncherIconController.java index b994681a7d..cce7028af0 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/LauncherIconController.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/LauncherIconController.java @@ -34,13 +34,13 @@ public static void setIcon(LauncherIcon icon) { } public enum LauncherIcon { - DEFAULT("DefaultIcon", R.color.ic_launcher_background, R.drawable.ic_launcher_foreground, R.string.AppIconDefault), + DEFAULT("DefaultIcon", R.mipmap.icon_background_nagram, R.mipmap.icon_foreground_nagram, R.string.AppIconDefault), OFFICIAL("OFFICIAL", R.drawable.icon_background_sa, R.mipmap.icon_foreground_sa, R.string.Official), - ICON1("ICON1", R.drawable.icon_1, R.drawable.icon_1, R.string.icon_1), - ICON2("ICON2", R.drawable.icon_2, R.drawable.icon_2, R.string.icon_2), - ICON3("ICON3", R.drawable.icon_3, R.drawable.icon_3, R.string.icon_3), - ICON4("ICON4", R.drawable.icon_4, R.drawable.icon_4, R.string.icon_4), - ICON5("ICON5", R.drawable.icon_5, R.drawable.icon_5, R.string.icon_5); + GOOGLE("GoogleIcon", R.mipmap.icon_background_google, R.mipmap.icon_foreground_google, R.string.AppIconGoogle), + COLORFUL("ColorfulIcon", R.mipmap.icon_background_colorful, R.mipmap.icon_foreground_colorful, R.string.AppIconColorful), + DARKGREEN("DarkGreenIcon", R.mipmap.icon_background_darkgreen, R.mipmap.icon_foreground_darkgreen, R.string.AppIconDarkGreen), + NEON("NeonIcon", R.mipmap.icon_background_neon, R.mipmap.icon_foreground_neon, R.string.AppIconNeon), + NOX("PremiumIcon", R.drawable.icon_3_background_sa, R.mipmap.icon_3_foreground_sa, R.string.AppIconPremium); public final String key; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/LoginActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/LoginActivity.java index 218f57b175..23db6bcf74 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/LoginActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/LoginActivity.java @@ -190,17 +190,17 @@ import java.util.concurrent.atomic.AtomicReference; import kotlin.Unit; -import top.qwq2333.gen.Config; -import top.qwq2333.nullgram.InlinesKt; -import top.qwq2333.nullgram.config.ConfigManager; -import top.qwq2333.nullgram.helpers.PasscodeHelper; -import top.qwq2333.nullgram.ui.BottomBuilder; -import top.qwq2333.nullgram.ui.EditTextAutoFill; -import top.qwq2333.nullgram.ui.QrView; -import top.qwq2333.nullgram.utils.AlertUtil; -import top.qwq2333.nullgram.utils.Defines; -import top.qwq2333.nullgram.utils.Log; -import top.qwq2333.nullgram.utils.StringUtils; +import xyz.nextalone.gen.Config; +import xyz.nextalone.nnngram.InlinesKt; +import xyz.nextalone.nnngram.config.ConfigManager; +import xyz.nextalone.nnngram.helpers.PasscodeHelper; +import xyz.nextalone.nnngram.ui.BottomBuilder; +import xyz.nextalone.nnngram.ui.EditTextAutoFill; +import xyz.nextalone.nnngram.ui.QrView; +import xyz.nextalone.nnngram.utils.AlertUtil; +import xyz.nextalone.nnngram.utils.Defines; +import xyz.nextalone.nnngram.utils.Log; +import xyz.nextalone.nnngram.utils.StringUtils; @SuppressLint("HardwareIds") public class LoginActivity extends BaseFragment implements NotificationCenter.NotificationCenterDelegate { @@ -1323,10 +1323,10 @@ public static void needShowInvalidAlert(BaseFragment fragment, String phoneNumbe mailer.putExtra(Intent.EXTRA_EMAIL, new String[]{banned ? "recover@telegram.org" : "login@stel.com"}); if (banned) { mailer.putExtra(Intent.EXTRA_SUBJECT, "Banned phone number: " + phoneNumber); - mailer.putExtra(Intent.EXTRA_TEXT, "I'm trying to use my mobile phone number: " + phoneNumber + "\nBut Nullgram says it's banned. Please help.\n\nApp version: " + version + "\nOS version: SDK " + Build.VERSION.SDK_INT + "\nDevice Name: " + Build.MANUFACTURER + Build.MODEL + "\nLocale: " + Locale.getDefault()); + mailer.putExtra(Intent.EXTRA_TEXT, "I'm trying to use my mobile phone number: " + phoneNumber + "\nBut Nnngram says it's banned. Please help.\n\nApp version: " + version + "\nOS version: SDK " + Build.VERSION.SDK_INT + "\nDevice Name: " + Build.MANUFACTURER + Build.MODEL + "\nLocale: " + Locale.getDefault()); } else { mailer.putExtra(Intent.EXTRA_SUBJECT, "Invalid phone number: " + phoneNumber); - mailer.putExtra(Intent.EXTRA_TEXT, "I'm trying to use my mobile phone number: " + phoneNumber + "\nBut Nullgram says it's invalid. Please help.\n\nApp version: " + version + "\nOS version: SDK " + Build.VERSION.SDK_INT + "\nDevice Name: " + Build.MANUFACTURER + Build.MODEL + "\nLocale: " + Locale.getDefault()); + mailer.putExtra(Intent.EXTRA_TEXT, "I'm trying to use my mobile phone number: " + phoneNumber + "\nBut Nnngram says it's invalid. Please help.\n\nApp version: " + version + "\nOS version: SDK " + Build.VERSION.SDK_INT + "\nDevice Name: " + Build.MANUFACTURER + Build.MODEL + "\nLocale: " + Locale.getDefault()); } fragment.getParentActivity().startActivity(Intent.createChooser(mailer, "Send email...")); } catch (Exception e) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/PasscodeActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/PasscodeActivity.java index 11323fc94c..9df6e1cb96 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/PasscodeActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/PasscodeActivity.java @@ -93,7 +93,7 @@ import java.util.ArrayList; import java.util.concurrent.atomic.AtomicBoolean; -import top.qwq2333.nullgram.helpers.PasscodeHelper; +import xyz.nextalone.nnngram.helpers.PasscodeHelper; public class PasscodeActivity extends BaseFragment implements NotificationCenter.NotificationCenterDelegate { public final static int TYPE_MANAGE_CODE_SETTINGS = 0, diff --git a/TMessagesProj/src/main/java/org/telegram/ui/PhotoAlbumPickerActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/PhotoAlbumPickerActivity.java index a7bcf41a36..6f6d952711 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/PhotoAlbumPickerActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/PhotoAlbumPickerActivity.java @@ -73,9 +73,9 @@ import java.util.ArrayList; import java.util.HashMap; -import top.qwq2333.gen.Config; -import top.qwq2333.nullgram.config.ConfigManager; -import top.qwq2333.nullgram.utils.Defines; +import xyz.nextalone.gen.Config; +import xyz.nextalone.nnngram.config.ConfigManager; +import xyz.nextalone.nnngram.utils.Defines; public class PhotoAlbumPickerActivity extends BaseFragment implements NotificationCenter.NotificationCenterDelegate { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/PhotoPickerActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/PhotoPickerActivity.java index c7c9d3941e..09e31fe5e0 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/PhotoPickerActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/PhotoPickerActivity.java @@ -100,9 +100,9 @@ import java.util.ArrayList; import java.util.HashMap; -import top.qwq2333.gen.Config; -import top.qwq2333.nullgram.config.ConfigManager; -import top.qwq2333.nullgram.utils.Defines; +import xyz.nextalone.gen.Config; +import xyz.nextalone.nnngram.config.ConfigManager; +import xyz.nextalone.nnngram.utils.Defines; public class PhotoPickerActivity extends BaseFragment implements NotificationCenter.NotificationCenterDelegate { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/PhotoViewer.java b/TMessagesProj/src/main/java/org/telegram/ui/PhotoViewer.java index e89b787988..db20e86ba3 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/PhotoViewer.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/PhotoViewer.java @@ -310,11 +310,13 @@ import java.util.Objects; import kotlin.Unit; -import top.qwq2333.gen.Config; -import top.qwq2333.nullgram.helpers.QrHelper; -import top.qwq2333.nullgram.helpers.TranslateHelper; -import top.qwq2333.nullgram.utils.Log; -import top.qwq2333.nullgram.utils.MessageUtils; +import xyz.nextalone.gen.Config; +import xyz.nextalone.nnngram.config.ConfigManager; +import xyz.nextalone.nnngram.helpers.QrHelper; +import xyz.nextalone.nnngram.helpers.TranslateHelper; +import xyz.nextalone.nnngram.utils.Defines; +import xyz.nextalone.nnngram.utils.Log; +import xyz.nextalone.nnngram.utils.MessageUtils; @SuppressLint("WrongConstant") @SuppressWarnings("unchecked") @@ -847,6 +849,7 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { private ActionBarMenuItem shareItem; private ActionBarMenuSubItem qrItem; private ActionBarMenuSubItem translateItem; + private ActionBarMenuSubItem copyItem; private AlertDialog progressDialog; private LinearLayout itemsLayout; private SpeedButtonsLayout chooseSpeedLayout; @@ -2073,6 +2076,9 @@ public interface PageBlocksAdapter { private final static int gallery_menu_paint = 18; private final static int gallery_menu_qr = 84; private final static int gallery_menu_translate = 91; + private final static int gallery_menu_save_messages = 92; + private final static int gallery_menu_copy_photo = 93; + private final static int gallery_menu_reply = 21; private final static int gallery_menu_loop = 22; @@ -5553,6 +5559,42 @@ public void dismiss() { videoPlayer.setLooping(playerLooping); } loopItem.setEnabledByColor(playerLooping, 0xFFFFFFFF, 0xFF73B4EC); + } else if (id == gallery_menu_save_messages) { + boolean noforwards = currentMessageObject != null && (MessagesController.getInstance(currentAccount).isChatNoForwards(currentMessageObject.getChatId()) || (currentMessageObject.messageOwner != null && currentMessageObject.messageOwner.noforwards) || currentMessageObject.hasRevealedExtendedMedia()); + if (noforwards){ + String path = currentMessageObject.messageOwner.attachPath; + if (path != null && !path.isEmpty()) { + File temp = new File(path); + if (!temp.exists()) { + path = null; + } + } + if (path == null || path.isEmpty()) { + path = parentChatActivity.getFileLoader().getPathToMessage(currentMessageObject.messageOwner).toString(); + } + ArrayList media = new ArrayList<>(); + SendMessagesHelper.SendingMediaInfo info = new SendMessagesHelper.SendingMediaInfo(); + info.path = path; + info.thumbPath = null; + info.videoEditedInfo = null; + info.isVideo = path.endsWith(".mp4"); + info.caption = null; + info.entities = null; + info.masks = null; + info.ttl = 0; + media.add(info); + SendMessagesHelper.prepareSendingMedia(parentChatActivity.getAccountInstance(), media, parentChatActivity.getUserConfig().getClientUserId(), null, null, null, null, true, true, null, false, 0, 0, false, null, parentChatActivity.quickReplyShortcut, parentChatActivity.getQuickReplyId(), 0, false); + BulletinFactory.of(fragment).showForwardedBulletinWithTag(parentChatActivity.getUserConfig().getClientUserId(), 1); + } else { + var accountInstance = AccountInstance.getInstance(currentAccount); + accountInstance.getSendMessagesHelper().sendMessage(new ArrayList<>(Collections.singletonList(currentMessageObject)), accountInstance.getUserConfig().getClientUserId(), false, false, true, 0); + } + } else if (id == gallery_menu_copy_photo) { + MessageUtils.getInstance(currentAccount).addMessageToClipboard(currentMessageObject, () -> { + if (BulletinFactory.canShowBulletin(parentFragment)) { + BulletinFactory.of(parentFragment).createCopyBulletin(LocaleController.getString("PhotoCopied", R.string.PhotoCopied)).show(); + } + }); } } @@ -5675,6 +5717,8 @@ public boolean canOpenMenu() { menuItem.addSubItem(gallery_menu_masks2, R.drawable.msg_sticker, getString("ShowStickers", R.string.ShowStickers)).setColors(0xfffafafa, 0xfffafafa); //menuItem.addSubItem(gallery_menu_edit_avatar, R.drawable.photo_paint, LocaleController.getString("EditPhoto", R.string.EditPhoto)).setColors(0xfffafafa, 0xfffafafa); menuItem.addSubItem(gallery_menu_set_as_main, R.drawable.msg_openprofile, LocaleController.getString("SetAsMain", R.string.SetAsMain)).setColors(0xfffafafa, 0xfffafafa); + menuItem.addSubItem(gallery_menu_save_messages, R.drawable.msg_saved, LocaleController.getString("SaveMessages", R.string.saveMessages)).setColors(0xfffafafa, 0xfffafafa); + menuItem.addSubItem(gallery_menu_copy_photo, R.drawable.msg_copy, LocaleController.getString("CopyPhoto", R.string.CopyPhoto)).setColors(0xfffafafa, 0xfffafafa); menuItem.addSubItem(gallery_menu_delete, R.drawable.msg_delete, LocaleController.getString("Delete", R.string.Delete)).setColors(0xfffafafa, 0xfffafafa); menuItem.addSubItem(gallery_menu_cancel_loading, R.drawable.msg_cancel, LocaleController.getString("StopDownload", R.string.StopDownload)).setColors(0xfffafafa, 0xfffafafa); translateItem = menuItem.addSubItem(gallery_menu_translate, R.drawable.msg_translate, LocaleController.getString("TranslateMessage", R.string.TranslateMessage)); @@ -5809,7 +5853,7 @@ public boolean forceAll() { fullscreenButton[a].setContentDescription(getString("AccSwitchToFullscreen", R.string.AccSwitchToFullscreen)); fullscreenButton[a].setScaleType(ImageView.ScaleType.CENTER); fullscreenButton[a].setBackground(Theme.createSelectorDrawable(Theme.ACTION_BAR_WHITE_SELECTOR_COLOR)); - fullscreenButton[a].setVisibility(View.INVISIBLE); + fullscreenButton[a].setVisibility(View.GONE); fullscreenButton[a].setAlpha(1.0f); containerView.addView(fullscreenButton[a], LayoutHelper.createFrame(48, 48)); fullscreenButton[a].setOnClickListener(v -> { @@ -8908,7 +8952,11 @@ private void onUserLeaveHint() { } else { pipVideoOverlayAnimateFlag = false; - switchToPip(false); + if (!Config.disableAutoPip) { + switchToPip(false); + } else { + videoPlayer.pause(); + } } } @@ -9738,7 +9786,7 @@ private void preparePlayer(ArrayList videoUrises, Uri uri, } checkFullscreenButton(); - if (orientationEventListener == null) { + if (orientationEventListener == null && !Config.disableGravityDetectionInVideo) { orientationEventListener = new OrientationEventListener(ApplicationLoader.applicationContext) { @Override public void onOrientationChanged(int orientation) { @@ -10071,7 +10119,7 @@ public void onSurfaceTextureUpdated(SurfaceTexture surfaceTexture) { public void checkFullscreenButton() { if (imagesArr.isEmpty() || currentMessageObject != null && currentMessageObject.isSponsored()) { for (int b = 0; b < 3; b++) { - fullscreenButton[b].setVisibility(View.INVISIBLE); + fullscreenButton[b].setVisibility(View.GONE); } return; } @@ -10083,12 +10131,12 @@ public void checkFullscreenButton() { index -= 1; } if (index < 0 || index >= imagesArr.size()) { - fullscreenButton[b].setVisibility(View.INVISIBLE); + fullscreenButton[b].setVisibility(View.GONE); continue; } MessageObject messageObject = imagesArr.get(index); if (!messageObject.isVideo() && !messageObject.isYouTubeVideo()) { - fullscreenButton[b].setVisibility(View.INVISIBLE); + fullscreenButton[b].setVisibility(View.GONE); continue; } boolean isYouTube = messageObject.isYouTubeVideo() && currentMessageObject != null && currentMessageObject.getId() == messageObject.getId(); @@ -10117,8 +10165,8 @@ public void checkFullscreenButton() { FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) fullscreenButton[b].getLayoutParams(); layoutParams.topMargin = (containerView.getMeasuredHeight() + height) / 2 - dp(48); } else { - if (fullscreenButton[b].getVisibility() != View.INVISIBLE) { - fullscreenButton[b].setVisibility(View.INVISIBLE); + if (fullscreenButton[b].getVisibility() != View.GONE) { + fullscreenButton[b].setVisibility(View.GONE); } } @@ -13194,7 +13242,7 @@ private void onPhotoShow(final MessageObject messageObject, final TLRPC.FileLoca } setMenuItemIcon(false, true); - boolean noforwards = messageObject != null && (MessagesController.getInstance(currentAccount).isChatNoForwards(messageObject.getChatId()) || (messageObject.messageOwner != null && messageObject.messageOwner.noforwards) || messageObject.hasRevealedExtendedMedia()); + boolean noforwards = !Config.ignoreChatStrict && messageObject != null && (MessagesController.getInstance(currentAccount).isChatNoForwards(messageObject.getChatId()) || (messageObject.messageOwner != null && messageObject.messageOwner.noforwards) || messageObject.hasRevealedExtendedMedia()); if (messageObject != null && messages == null) { if (messageObject.messageOwner != null && MessageObject.getMedia(messageObject.messageOwner) instanceof TLRPC.TL_messageMediaWebPage && MessageObject.getMedia(messageObject.messageOwner).webpage != null) { TLRPC.WebPage webPage = MessageObject.getMedia(messageObject.messageOwner).webpage; @@ -13522,7 +13570,7 @@ private void onPhotoShow(final MessageObject messageObject, final TLRPC.FileLoca NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.dialogPhotosUpdate, dialogPhotos); } } - if (currentMessageObject != null && currentMessageObject.isVideo() || currentBotInlineResult != null && (currentBotInlineResult.type.equals("video") || MessageObject.isVideoDocument(currentBotInlineResult.document)) || (pageBlocksAdapter != null && (pageBlocksAdapter.isVideo(index) || pageBlocksAdapter.isHardwarePlayer(index))) || (sendPhotoType == SELECT_TYPE_NO_SELECT && ((MediaController.PhotoEntry)imagesArrLocals.get(index)).isVideo)) { + if (currentMessageObject != null && (currentMessageObject.isVideo() || currentMessageObject.isGif()) || currentBotInlineResult != null && (currentBotInlineResult.type.equals("video") || MessageObject.isVideoDocument(currentBotInlineResult.document)) || (pageBlocksAdapter != null && (pageBlocksAdapter.isVideo(index) || pageBlocksAdapter.isHardwarePlayer(index))) || (sendPhotoType == SELECT_TYPE_NO_SELECT && ((MediaController.PhotoEntry)imagesArrLocals.get(index)).isVideo)) { playerAutoStarted = true; onActionClick(false); } else if (!imagesArrLocals.isEmpty()) { @@ -13596,7 +13644,7 @@ private void setIsAboutToSwitchToIndex(int index, boolean init, boolean animated } newMessageObject = imagesArr.get(switchingToIndex); newMessageObject.updateTranslation(); - isVideo = newMessageObject.isVideo(); + isVideo = newMessageObject.isVideo() || newMessageObject.isGif(); title = FilteredSearchView.createFromInfoString(newMessageObject, opennedFromMedia && !openedFromProfile, 0); CharSequence subtitle = null; @@ -13606,7 +13654,7 @@ private void setIsAboutToSwitchToIndex(int index, boolean init, boolean animated actionBarContainer.setSubtitle(subtitle, animated); boolean isInvoice = newMessageObject.isInvoice(); - boolean noforwards = MessagesController.getInstance(currentAccount).isChatNoForwards(newMessageObject.getChatId()) || (newMessageObject.messageOwner != null && newMessageObject.messageOwner.noforwards) || newMessageObject.hasRevealedExtendedMedia(); + boolean noforwards = !Config.ignoreChatStrict && (MessagesController.getInstance(currentAccount).isChatNoForwards(newMessageObject.getChatId()) || (newMessageObject.messageOwner != null && newMessageObject.messageOwner.noforwards) || newMessageObject.hasRevealedExtendedMedia()); if (isVideo) { bottomLayout.setVisibility(View.VISIBLE); bottomLayout.setTag(1); @@ -13713,6 +13761,7 @@ private void setIsAboutToSwitchToIndex(int index, boolean init, boolean animated galleryButton.setVisibility(View.GONE); galleryGap.setVisibility(View.GONE); menuItem.hideSubItem(gallery_menu_share); + menuItem.hideSubItem(gallery_menu_save_messages); setItemVisible(editItem, false, animated); if (!newMessageObject.canDeleteMessage(parentChatActivity != null && parentChatActivity.isInScheduleMode(), null)) { menuItem.hideSubItem(gallery_menu_delete); @@ -13820,6 +13869,8 @@ private void setIsAboutToSwitchToIndex(int index, boolean init, boolean animated if (DialogObject.isEncryptedDialog(currentDialogId) && !isEmbedVideo || noforwards) { setItemVisible(sendItem, false, false); } + menuItem.showSubItem(gallery_menu_save); + menuItem.showSubItem(gallery_menu_save_messages); if (isEmbedVideo || newMessageObject.messageOwner.ttl != 0 && newMessageObject.messageOwner.ttl < 60 * 60 || noforwards) { allowShare = false; galleryButton.setVisibility(View.GONE); @@ -13841,6 +13892,7 @@ private void setIsAboutToSwitchToIndex(int index, boolean init, boolean animated galleryButton.setVisibility(View.GONE); galleryGap.setVisibility(View.GONE); menuItem.hideSubItem(gallery_menu_translate); + menuItem.showSubItem(gallery_menu_save_messages); if (countView != null) { countView.updateShow(secureDocuments.size() > 1, true); countView.set(switchingToIndex + 1, secureDocuments.size()); @@ -13905,12 +13957,13 @@ private void setIsAboutToSwitchToIndex(int index, boolean init, boolean animated } else if (isEvent) { title = getString("AttachPhoto", R.string.AttachPhoto); } - boolean noforwards = avatarsDialogId != 0 && MessagesController.getInstance(currentAccount).isChatNoForwards(-avatarsDialogId); + boolean noforwards = !Config.ignoreChatStrict && avatarsDialogId != 0 && MessagesController.getInstance(currentAccount).isChatNoForwards(-avatarsDialogId); menuItem.showSubItem(gallery_menu_save); galleryButton.setVisibility(View.VISIBLE); galleryGap.setVisibility(View.VISIBLE); - + + menuItem.showSubItem(gallery_menu_save_messages); allowShare = !noforwards; menuItem.showSubItem(gallery_menu_share); menuItem.checkHideMenuItem(); @@ -14138,7 +14191,7 @@ private void setIsAboutToSwitchToIndex(int index, boolean init, boolean animated if (switchingToIndex < 0 || switchingToIndex >= size) { return; } - allowShare = !MessagesController.getInstance(currentAccount).isChatNoForwards(-currentDialogId) && (currentMessageObject == null || !currentMessageObject.hasRevealedExtendedMedia()); + allowShare = Config.ignoreChatStrict || !MessagesController.getInstance(currentAccount).isChatNoForwards(-currentDialogId) && (currentMessageObject == null || !currentMessageObject.hasRevealedExtendedMedia()); TLRPC.PageBlock pageBlock = pageBlocksAdapter.get(switchingToIndex); caption = pageBlocksAdapter.getCaption(switchingToIndex); isVideo = pageBlocksAdapter.isVideo(switchingToIndex); @@ -14171,6 +14224,8 @@ private void setIsAboutToSwitchToIndex(int index, boolean init, boolean animated if (currentAnimation != null || (!pageBlocksAdapter.isVideo(index) && pageBlocksAdapter.isHardwarePlayer(index))) { galleryButton.setVisibility(View.GONE); galleryGap.setVisibility(View.GONE); + menuItem.hideSubItem(gallery_menu_save); + menuItem.hideSubItem(gallery_menu_save_messages); if (allowShare) { menuItem.showSubItem(gallery_menu_savegif); } else { @@ -14188,6 +14243,8 @@ private void setIsAboutToSwitchToIndex(int index, boolean init, boolean animated } galleryButton.setVisibility(View.VISIBLE); galleryGap.setVisibility(View.VISIBLE); + menuItem.showSubItem(gallery_menu_save); + menuItem.showSubItem(gallery_menu_save_messages); menuItem.hideSubItem(gallery_menu_savegif); menuItem.checkHideMenuItem(); } @@ -14573,6 +14630,8 @@ private void setImageIndex(int index, boolean init, boolean animateCaption) { AndroidUtilities.cancelRunOnUIThread(hideActionBarRunnable); } if (sharedMediaType == MediaDataController.MEDIA_FILE) { + menuItem.showSubItem(gallery_menu_save); + menuItem.showSubItem(gallery_menu_save_messages); if (canZoom = newMessageObject.canPreviewDocument()) { galleryButton.setVisibility(View.VISIBLE); galleryGap.setVisibility(View.VISIBLE); @@ -19255,7 +19314,7 @@ private void onActionClick(boolean download) { public boolean onDown(MotionEvent e) { if (!doubleTap && checkImageView.getVisibility() != View.VISIBLE && !drawPressedDrawable[0] && !drawPressedDrawable[1]) { float x = e.getX(); - int side = Math.min(135, containerView.getMeasuredWidth() / 8); + int side = Config.disablePhotoSideAction ? 0 : Math.min(135, containerView.getMeasuredWidth() / 8); if (x < side) { if (leftImage.hasImageSet()) { drawPressedDrawable[0] = true; @@ -19275,7 +19334,7 @@ public boolean onDown(MotionEvent e) { public boolean canDoubleTap(MotionEvent e) { if (checkImageView.getVisibility() != View.VISIBLE && !drawPressedDrawable[0] && !drawPressedDrawable[1]) { float x = e.getX(); - int side = Math.min(135, containerView.getMeasuredWidth() / 8); + int side = Config.disablePhotoSideAction ? 0 : Math.min(135, containerView.getMeasuredWidth() / 8); if (x < side || x > containerView.getMeasuredWidth() - side) { return currentMessageObject == null || (currentMessageObject.isVideo() || photoViewerWebView != null && photoViewerWebView.isControllable()) && (SystemClock.elapsedRealtime() - lastPhotoSetTime) >= 500 && canDoubleTapSeekVideo(e); } @@ -19378,7 +19437,7 @@ public boolean onSingleTapConfirmed(MotionEvent e) { float y = e.getY(); if (checkImageView.getVisibility() != View.VISIBLE) { if (SharedConfig.nextMediaTap && sendPhotoType != SELECT_TYPE_STICKER && y > ActionBar.getCurrentActionBarHeight() + AndroidUtilities.statusBarHeight + dp(40)) { - int side = Math.min(135, containerView.getMeasuredWidth() / 8); + int side = ConfigManager.getBooleanOrFalse(Defines.disablePhotoSideAction) ? 0 : Math.min(135, containerView.getMeasuredWidth() / 8); if (x < side) { if (leftImage.hasImageSet()) { switchToNextIndex(-1, true); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ProfileActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ProfileActivity.java index a1a93903a5..8a7d9f9c10 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ProfileActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ProfileActivity.java @@ -322,20 +322,20 @@ import java.util.zip.ZipOutputStream; import kotlin.Unit; -import top.qwq2333.gen.Config; -import top.qwq2333.nullgram.InlinesKt; -import top.qwq2333.nullgram.activity.MainSettingActivity; -import top.qwq2333.nullgram.config.ConfigManager; -import top.qwq2333.nullgram.helpers.TranslateHelper; -import top.qwq2333.nullgram.translate.LanguageDetectorTimeout; -import top.qwq2333.nullgram.ui.AutoTranslatePopupWrapper; -import top.qwq2333.nullgram.ui.BottomBuilder; -import top.qwq2333.nullgram.ui.SimpleTextViewSwitcher; -import top.qwq2333.nullgram.utils.AlertUtil; -import top.qwq2333.nullgram.utils.Defines; -import top.qwq2333.nullgram.utils.Log; -import top.qwq2333.nullgram.utils.StringUtils; -import top.qwq2333.nullgram.utils.Utils; +import xyz.nextalone.gen.Config; +import xyz.nextalone.nnngram.InlinesKt; +import xyz.nextalone.nnngram.activity.MainSettingActivity; +import xyz.nextalone.nnngram.config.ConfigManager; +import xyz.nextalone.nnngram.helpers.TranslateHelper; +import xyz.nextalone.nnngram.translate.LanguageDetectorTimeout; +import xyz.nextalone.nnngram.ui.AutoTranslatePopupWrapper; +import xyz.nextalone.nnngram.ui.BottomBuilder; +import xyz.nextalone.nnngram.ui.SimpleTextViewSwitcher; +import xyz.nextalone.nnngram.utils.AlertUtil; +import xyz.nextalone.nnngram.utils.Defines; +import xyz.nextalone.nnngram.utils.Log; +import xyz.nextalone.nnngram.utils.StringUtils; +import xyz.nextalone.nnngram.utils.Utils; public class ProfileActivity extends BaseFragment implements NotificationCenter.NotificationCenterDelegate, DialogsActivity.DialogsActivityDelegate, SharedMediaLayout.SharedMediaPreloaderDelegate, ImageUpdater.ImageUpdaterDelegate, SharedMediaLayout.Delegate { private final static int PHONE_OPTION_CALL = 0, @@ -429,6 +429,7 @@ public void setAlpha(int a) { private ActionBarMenuItem animatingItem; private ActionBarMenuItem callItem; private ActionBarMenuItem videoCallItem; + private ActionBarMenuItem eventLogItem; private ActionBarMenuItem editItem; private ActionBarMenuItem otherItem; private ActionBarMenuItem searchItem; @@ -1647,6 +1648,11 @@ public PagerIndicatorView(Context context) { videoCallItem.setScaleY(1f - value); videoCallItem.setAlpha(1f - value); } + if (canSearchMembers) { + eventLogItem.setScaleX(1f - value); + eventLogItem.setScaleY(1f - value); + eventLogItem.setAlpha(1f - value); + } setScaleX(value); setScaleY(value); setAlpha(value); @@ -1668,6 +1674,9 @@ public void onAnimationEnd(Animator animation) { if (videoCallItemVisible) { videoCallItem.setVisibility(GONE); } + if (canSearchMembers) { + eventLogItem.setVisibility(GONE); + } } else { setVisibility(GONE); } @@ -1688,6 +1697,9 @@ public void onAnimationStart(Animator animation) { if (videoCallItemVisible) { videoCallItem.setVisibility(VISIBLE); } + if (canSearchMembers) { + eventLogItem.setVisibility(VISIBLE); + } setVisibility(VISIBLE); updateStoriesViewBounds(false); } @@ -2424,7 +2436,7 @@ public void didChangeOwner(TLRPC.User user) { } else { AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity(), resourcesProvider); builder.setTitle(LocaleController.getString(R.string.AddBot)); - String chatName = chat == null ? "" : chat.title; + String chatName = chat == null ? "" : StringUtils.zalgoFilter(chat.title); builder.setMessage(AndroidUtilities.replaceTags(formatString("AddMembersAlertNamesText", R.string.AddMembersAlertNamesText, UserObject.getUserName(user), chatName))); builder.setNegativeButton(LocaleController.getString(R.string.Cancel), null); builder.setPositiveButton(LocaleController.getString(R.string.AddBot), (di, i) -> { @@ -3363,6 +3375,7 @@ protected void onSearchStateChanged(boolean expanded) { callItem.setVisibility(expanded || !callItemVisible ? GONE : INVISIBLE); videoCallItem.setVisibility(expanded || !videoCallItemVisible ? GONE : INVISIBLE); editItem.setVisibility(expanded || !editItemVisible ? GONE : INVISIBLE); + eventLogItem.setVisibility(expanded || !canSearchMembers ? GONE : INVISIBLE); otherItem.setVisibility(expanded ? GONE : INVISIBLE); if (qrItem != null) { qrItem.setVisibility(expanded ? GONE : INVISIBLE); @@ -3518,6 +3531,8 @@ public void onTextChanged(EditText editText) { callItem = menu.addItem(call_item, R.drawable.ic_call); callItem.setContentDescription(LocaleController.getString(R.string.Call)); } + eventLogItem = menu.addItem(event_log, R.drawable.msg_log); + eventLogItem.setContentDescription(LocaleController.getString("EventLog", R.string.EventLog)); if (myProfile) { editItem = menu.addItem(edit_profile, R.drawable.group_edit_profile); editItem.setContentDescription(LocaleController.getString(R.string.Edit)); @@ -4148,7 +4163,7 @@ public void openExceptions() { Log.refreshLog(); return Unit.INSTANCE; }); - builder.addItem(LocaleController.getString("DebugSendLastLogs", R.string.DebugSendLastLogs), R.drawable.msg_shareout, (it) -> { + builder.addItem(LocaleController.getString("DebugSendLastLogs", R.string.DebugSendLastLogs), R.drawable.msg_share, (it) -> { Log.shareLog(getContext()); return Unit.INSTANCE; }); @@ -4168,19 +4183,19 @@ public void openExceptions() { currentUpdateChannel = Defines.stableChannel; currentChannel += LocaleController.getString("AutoCheckUpdateStable", R.string.AutoCheckUpdateStable); break; - case Defines.ciChannel: - currentUpdateChannel = Defines.ciChannel; - currentChannel += LocaleController.getString("AutoCheckUpdatePreview", R.string.AutoCheckUpdatePreview); - break; +// case Defines.ciChannel: +// currentUpdateChannel = Defines.ciChannel; +// currentChannel += LocaleController.getString("AutoCheckUpdatePreview", R.string.AutoCheckUpdatePreview); +// break; default: - if (BuildConfig.VERSION_NAME.contains("preview")) { - currentUpdateChannel = Defines.ciChannel; - currentChannel += LocaleController.getString("AutoCheckUpdatePreview", R.string.AutoCheckUpdatePreview); - - } else { - currentUpdateChannel = Defines.stableChannel; - currentChannel += LocaleController.getString("AutoCheckUpdateStable", R.string.AutoCheckUpdateStable); - } +// if (BuildConfig.VERSION_NAME.contains("preview")) { +// currentUpdateChannel = Defines.ciChannel; +// currentChannel += LocaleController.getString("AutoCheckUpdatePreview", R.string.AutoCheckUpdatePreview); +// +// } else { + currentUpdateChannel = Defines.stableChannel; + currentChannel += LocaleController.getString("AutoCheckUpdateStable", R.string.AutoCheckUpdateStable); +// } } builder.addItem(LocaleController.getString("AutoCheckUpdateSwitch", R.string.AutoCheckUpdateSwitch) + currentChannel, R.drawable.baseline_system_update_24, (it) -> { @@ -4196,11 +4211,11 @@ public void openExceptions() { switchBuilder.doRadioCheck(radioButtonCell); return Unit.INSTANCE; }); - switchBuilder.addRadioItem(LocaleController.getString("AutoCheckUpdatePreview", R.string.AutoCheckUpdatePreview), currentUpdateChannel == Defines.ciChannel, (radioButtonCell) -> { - ConfigManager.putInt(Defines.updateChannel, Defines.ciChannel); - switchBuilder.doRadioCheck(radioButtonCell); - return Unit.INSTANCE; - }); +// switchBuilder.addRadioItem(LocaleController.getString("AutoCheckUpdatePreview", R.string.AutoCheckUpdatePreview), currentUpdateChannel == Defines.ciChannel, (radioButtonCell) -> { +// ConfigManager.putInt(Defines.updateChannel, Defines.ciChannel); +// switchBuilder.doRadioCheck(radioButtonCell); +// return Unit.INSTANCE; +// }); showDialog(switchBuilder.create()); return Unit.INSTANCE; }); @@ -4256,6 +4271,10 @@ public void openExceptions() { } else if (position == bizLocationRow) { openLocation(false); } else if (position == channelRow) { + if (chatInfo != null) { + openDiscussion(); + return; + } if (userInfo == null) return; Bundle args = new Bundle(); args.putLong("chat_id", userInfo.personal_channel_id); @@ -5095,14 +5114,14 @@ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) { if (a == 1) { nameTextView[a].setScrollNonFitText(true); nameTextView[a].setOnLongClickListener(v -> { - AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity()); - builder.setItems(new CharSequence[]{LocaleController.getString("Copy", R.string.Copy)}, (dialogInterface, i) -> { - if (i == 0) { - AndroidUtilities.addToClipboard(((SimpleTextView) v).getText()); - BulletinFactory.of(this).createCopyBulletin(LocaleController.formatString("TextCopied", R.string.TextCopied)).show(); - } - }); - showDialog(builder.create()); +// AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity()); +// builder.setItems(new CharSequence[]{LocaleController.getString("Copy", R.string.Copy)}, (dialogInterface, i) -> { +// if (i == 0) { + AndroidUtilities.addToClipboard(((SimpleTextView) v).getText()); + BulletinFactory.of(this).createCopyBulletin(LocaleController.formatString("TextCopied", R.string.TextCopied)).show(); +// } +// }); +// showDialog(builder.create()); return false; }); nameTextView[a].setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO); @@ -7044,6 +7063,7 @@ public void setValue(ActionBar object, float value) { callItem.setIconColor(peerColor != null ? Color.WHITE : getThemedColor(Theme.key_actionBarDefaultIcon)); videoCallItem.setIconColor(peerColor != null ? Color.WHITE : getThemedColor(Theme.key_actionBarDefaultIcon)); editItem.setIconColor(peerColor != null ? Color.WHITE : getThemedColor(Theme.key_actionBarDefaultIcon)); + eventLogItem.setIconColor(peerColor != null ? Color.WHITE : getThemedColor(Theme.key_actionBarDefaultIcon)); if (verifiedDrawable[0] != null) { color1 = getThemedColor(Theme.key_profile_verifiedBackground); @@ -7115,6 +7135,9 @@ private void setMediaHeaderVisible(boolean visible) { if (editItemVisible) { editItem.setVisibility(View.VISIBLE); } + if (canSearchMembers) { + eventLogItem.setVisibility(View.VISIBLE); + } otherItem.setVisibility(View.VISIBLE); if (mediaOptionsItem != null) { mediaOptionsItem.setVisibility(View.GONE); @@ -7146,10 +7169,12 @@ private void setMediaHeaderVisible(boolean visible) { animators.add(ObjectAnimator.ofFloat(videoCallItem, View.ALPHA, visible ? 0.0f : 1.0f)); animators.add(ObjectAnimator.ofFloat(otherItem, View.ALPHA, visible ? 0.0f : 1.0f)); animators.add(ObjectAnimator.ofFloat(editItem, View.ALPHA, visible ? 0.0f : 1.0f)); + animators.add(ObjectAnimator.ofFloat(eventLogItem, View.ALPHA, visible ? 0.0f : 1.0f)); animators.add(ObjectAnimator.ofFloat(callItem, View.TRANSLATION_Y, visible ? -AndroidUtilities.dp(10) : 0.0f)); animators.add(ObjectAnimator.ofFloat(videoCallItem, View.TRANSLATION_Y, visible ? -AndroidUtilities.dp(10) : 0.0f)); animators.add(ObjectAnimator.ofFloat(otherItem, View.TRANSLATION_Y, visible ? -AndroidUtilities.dp(10) : 0.0f)); - animators.add(ObjectAnimator.ofFloat(editItem, View.TRANSLATION_Y, visible ? -AndroidUtilities.dp(10) : 0.0f)); + animators.add(ObjectAnimator.ofFloat(editItem, View.ALPHA, visible ? 0.0f : 1.0f)); + animators.add(ObjectAnimator.ofFloat(eventLogItem, View.TRANSLATION_Y, visible ? -AndroidUtilities.dp(10) : 0.0f)); animators.add(ObjectAnimator.ofFloat(mediaSearchItem, View.ALPHA, visible ? 1.0f : 0.0f)); animators.add(ObjectAnimator.ofFloat(mediaSearchItem, View.TRANSLATION_Y, visible ? 0.0f : AndroidUtilities.dp(10))); animators.add(ObjectAnimator.ofFloat(sharedMediaLayout.photoVideoOptionsItem, View.ALPHA, visible ? 1.0f : 0.0f)); @@ -7184,6 +7209,9 @@ public void onAnimationEnd(Animator animation) { if (editItemVisible) { editItem.setVisibility(View.GONE); } + if (canSearchMembers) { + eventLogItem.setVisibility(View.GONE); + } otherItem.setVisibility(View.GONE); } else { if (sharedMediaLayout.isSearchItemVisible()) { @@ -8122,6 +8150,11 @@ public void didReceivedNotification(int id, int account, final Object... args) { if (sharedMediaLayout != null) { sharedMediaLayout.setChatInfo(chatInfo); } + if (profileChannelMessageFetcher == null && !isSettings()) { + profileChannelMessageFetcher = new ProfileChannelCell.ChannelMessageFetcher(currentAccount); + profileChannelMessageFetcher.subscribe(() -> updateListAnimated(false)); + profileChannelMessageFetcher.fetchChannelMsg(chatInfo); + } } } else if (id == NotificationCenter.closeChats) { removeSelfFromStack(true); @@ -8764,6 +8797,9 @@ public AnimatorSet onCustomTransitionAnimation(final boolean isOpen, final Runna editItem.setAlpha(0.0f); animators.add(ObjectAnimator.ofFloat(editItem, View.ALPHA, 1.0f)); } + if (canSearchMembers) { + eventLogItem.setAlpha(0.0f); + animators.add(ObjectAnimator.ofFloat(eventLogItem, View.ALPHA, 1.0f)); } if (ttlIconView.getTag() != null) { ttlIconView.setAlpha(0f); animators.add(ObjectAnimator.ofFloat(ttlIconView, View.ALPHA, 1.0f)); @@ -8847,6 +8883,10 @@ public AnimatorSet onCustomTransitionAnimation(final boolean isOpen, final Runna editItem.setAlpha(1.0f); animators.add(ObjectAnimator.ofFloat(editItem, View.ALPHA, 0.0f)); } + if (canSearchMembers) { + eventLogItem.setAlpha(1.0f); + animators.add(ObjectAnimator.ofFloat(eventLogItem, View.ALPHA, 0.0f)); + } if (ttlIconView != null) { animators.add(ObjectAnimator.ofFloat(ttlIconView, View.ALPHA, ttlIconView.getAlpha(), 0.0f)); } @@ -8975,6 +9015,17 @@ private void updateOnlineCount(boolean notify) { } } + public void setChatInfoChannelMsg(ProfileChannelCell.ChannelMessageFetcher channelMessageFetcher) { + if (profileChannelMessageFetcher == null) { + profileChannelMessageFetcher = channelMessageFetcher; + } + if (profileChannelMessageFetcher == null) { + profileChannelMessageFetcher = new ProfileChannelCell.ChannelMessageFetcher(currentAccount); + } + profileChannelMessageFetcher.subscribe(() -> updateListAnimated(false)); + profileChannelMessageFetcher.fetchChannelMsg(chatInfo); + } + public void setChatInfo(TLRPC.ChatFull value) { chatInfo = value; if (chatInfo != null && chatInfo.migrated_from_chat_id != 0 && mergeDialogId == 0) { @@ -9444,6 +9495,14 @@ private void updateRowsIds() { sharedMediaRow = rowCount++; } } else if (chatId != 0) { + if (chatInfo != null && chatInfo.linked_chat_id != 0 && (profileChannelMessageFetcher == null || !profileChannelMessageFetcher.loaded || profileChannelMessageFetcher.messageObject != null)) { + TLRPC.Chat channel = getMessagesController().getChat(chatInfo.linked_chat_id); + if (channel != null && (ChatObject.isPublic(channel) || !ChatObject.isNotInChat(channel)) && ChatObject.isChannelAndNotMegaGroup(channel)) { + channelRow = rowCount++; + channelDividerRow = rowCount++; + } + } + if (chatInfo != null && (!TextUtils.isEmpty(chatInfo.about) || chatInfo.location instanceof TLRPC.TL_channelLocation) || ChatObject.isPublic(currentChat) || !currentChat.restriction_reason.isEmpty()) { if (LocaleController.isRTL && ChatObject.isChannel(currentChat) && chatInfo != null && !currentChat.megagroup && chatInfo.linked_chat_id != 0) { emptyRow = rowCount++; @@ -10115,7 +10174,7 @@ private void updateProfileData(boolean reload) { title = Emoji.replaceEmoji(title, nameTextView[a].getPaint().getFontMetricsInt(), AndroidUtilities.dp(24), false); } catch (Exception ignore) { } - if (nameTextView[a].setText(title)) { + if (nameTextView[a].setText(StringUtils.zalgoFilter(title))) { changed = true; } } else if (chat.title != null) { @@ -10124,7 +10183,7 @@ private void updateProfileData(boolean reload) { title = Emoji.replaceEmoji(title, nameTextView[a].getPaint().getFontMetricsInt(), AndroidUtilities.dp(24), false); } catch (Exception ignore) { } - if (nameTextView[a].setText(title)) { + if (nameTextView[a].setText(StringUtils.zalgoFilter(title))) { changed = true; } } @@ -10637,6 +10696,19 @@ private void createActionBarMenu(boolean animated) { editItem.setVisibility(View.GONE); } } + if (canSearchMembers) { + if (eventLogItem.getVisibility() != View.VISIBLE) { + eventLogItem.setVisibility(View.VISIBLE); + if (animated) { + eventLogItem.setAlpha(0); + eventLogItem.animate().alpha(1f).setDuration(150).start(); + } + } + } else { + if (eventLogItem.getVisibility() != View.GONE) { + eventLogItem.setVisibility(View.GONE); + } + } } if (avatarsViewPagerIndicatorView != null) { if (avatarsViewPagerIndicatorView.isIndicatorFullyVisible()) { @@ -10655,6 +10727,11 @@ private void createActionBarMenu(boolean animated) { videoCallItem.animate().cancel(); videoCallItem.setAlpha(1f); } + if (canSearchMembers) { + eventLogItem.setVisibility(View.GONE); + eventLogItem.animate().cancel(); + eventLogItem.setAlpha(1f); + } } } if (sharedMediaLayout != null) { @@ -11803,10 +11880,16 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { } else if (position == numberRow) { TLRPC.User user = UserConfig.getInstance(currentAccount).getCurrentUser(); String value; - if (user != null && user.phone != null && user.phone.length() != 0) { - value = PhoneFormat.getInstance().format("+" + user.phone); - } else { + if (!Config.hidePhone) { + if (user != null && user.phone != null && !user.phone.isEmpty()) { + value = PhoneFormat.getInstance().format("+" + user.phone); + } else { value = LocaleController.getString(R.string.NumberUnknown); + } + } else if (!TextUtils.isEmpty(user.username)) { + value = "@" + user.username; + } else { + value = "@???"; } detailCell.setTextAndValue(value, LocaleController.getString(R.string.TapToChangePhone), true); detailCell.setContentDescriptionValueFirst(false); @@ -11866,18 +11949,18 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if (position == userInfoRow) { TLRPC.User user = userInfo.user != null ? userInfo.user : getMessagesController().getUser(userInfo.id); boolean addlinks = isBot || (user != null && user.premium && userInfo.about != null); - aboutLinkCell.setTextAndValue(userInfo.about, LocaleController.getString(R.string.UserBio), addlinks); + aboutLinkCell.setTextAndValue(StringUtils.zalgoFilter(userInfo.about), LocaleController.getString(R.string.UserBio), addlinks); } else if (position == channelInfoRow) { String text = chatInfo.about; while (text.contains("\n\n\n")) { text = text.replace("\n\n\n", "\n\n"); } - aboutLinkCell.setText(text, true); + aboutLinkCell.setText(StringUtils.zalgoFilter(text), true); } else if (position == bioRow) { String value; if (userInfo == null || !TextUtils.isEmpty(userInfo.about)) { value = userInfo == null ? LocaleController.getString(R.string.Loading) : userInfo.about; - aboutLinkCell.setTextAndValue(value, LocaleController.getString(R.string.UserBio), getUserConfig().isPremium()); + aboutLinkCell.setTextAndValue(StringUtils.zalgoFilter(value), LocaleController.getString(R.string.UserBio), getUserConfig().isPremium()); currentBio = userInfo != null ? userInfo.about : null; } else { aboutLinkCell.setTextAndValue(LocaleController.getString(R.string.UserBio), LocaleController.getString(R.string.UserBioDetail), false); @@ -12017,7 +12100,7 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { textCell.setText(LocaleController.getString(R.string.ReportUserLocation), false); textCell.setColors(-1, Theme.key_text_RedRegular); } else if (position == nullRow) { - textCell.setTextAndIcon(LocaleController.getString("NullSettings", R.string.NullSettings), R.drawable.msg_settings, false); + textCell.setTextAndIcon(LocaleController.getString("NnnSettings", R.string.NullgramName), R.drawable.msg_settings, false); } else if (position == languageRow) { textCell.setTextAndValueAndIcon(LocaleController.getString(R.string.Language), LocaleController.getCurrentLanguageName(), false, R.drawable.msg2_language, false); textCell.setImageLeft(23); @@ -12277,10 +12360,17 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { hoursCell.set(userInfo != null ? userInfo.business_work_hours : null, hoursExpanded, hoursShownMine, notificationsDividerRow < 0 && !myProfile || bizLocationRow >= 0); break; case VIEW_TYPE_CHANNEL: - ((ProfileChannelCell) holder.itemView).set( - getMessagesController().getChat(userInfo.personal_channel_id), - profileChannelMessageFetcher != null ? profileChannelMessageFetcher.messageObject : null - ); + if (userInfo != null) { + ((ProfileChannelCell) holder.itemView).set( + getMessagesController().getChat(userInfo.personal_channel_id), + profileChannelMessageFetcher != null ? profileChannelMessageFetcher.messageObject : null + ); + } else if (chatInfo != null) { + ((ProfileChannelCell) holder.itemView).set( + getMessagesController().getChat(chatInfo.linked_chat_id), + profileChannelMessageFetcher != null ? profileChannelMessageFetcher.messageObject : null + ); + } break; case VIEW_TYPE_BOT_APP: diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ProxyListActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ProxyListActivity.java index 7859a0529f..5a37dd41fe 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ProxyListActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ProxyListActivity.java @@ -69,8 +69,8 @@ import java.util.Collections; import java.util.List; -import top.qwq2333.nullgram.activity.WsSettingsActivity; -import top.qwq2333.nullgram.helpers.WebSocketHelper; +import xyz.nextalone.nnngram.activity.WsSettingsActivity; +import xyz.nextalone.nnngram.helpers.WebSocketHelper; public class ProxyListActivity extends BaseFragment implements NotificationCenter.NotificationCenterDelegate { private final static boolean IS_PROXY_ROTATION_AVAILABLE = true; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/PeerStoriesView.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/PeerStoriesView.java index 04074518c0..80cc17cb4d 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stories/PeerStoriesView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/PeerStoriesView.java @@ -209,7 +209,7 @@ import java.util.Objects; import java.util.concurrent.CountDownLatch; -import top.qwq2333.gen.Config; +import xyz.nextalone.gen.Config; public class PeerStoriesView extends SizeNotifierFrameLayout implements NotificationCenter.NotificationCenterDelegate { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoriesController.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoriesController.java index 98966f8e0c..fb1290c843 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoriesController.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/StoriesController.java @@ -102,7 +102,7 @@ import java.util.SortedSet; import java.util.TreeSet; -import top.qwq2333.gen.Config; +import xyz.nextalone.gen.Config; public class StoriesController { @@ -268,6 +268,9 @@ public boolean hasStories(long dialogId) { if (isLastUploadingFailed(dialogId)) { return true; } + if (Config.hideStories) { + return false; + } TL_stories.PeerStories stories = allStoriesMap.get(dialogId); if (stories == null) { stories = getStoriesFromFullPeer(dialogId); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/StoryRecorder.java b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/StoryRecorder.java index 097eaf31f6..3f92d53cf1 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/StoryRecorder.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Stories/recorder/StoryRecorder.java @@ -184,7 +184,7 @@ import java.util.Arrays; import java.util.List; -import top.qwq2333.nullgram.utils.PermissionUtils; +import xyz.nextalone.nnngram.utils.PermissionUtils; public class StoryRecorder implements NotificationCenter.NotificationCenterDelegate { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/TextMessageEnterTransition.java b/TMessagesProj/src/main/java/org/telegram/ui/TextMessageEnterTransition.java index 868bbc48b2..09f41a94bb 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/TextMessageEnterTransition.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/TextMessageEnterTransition.java @@ -68,7 +68,7 @@ import org.telegram.ui.Components.ReplyMessageLine; import org.telegram.ui.Components.spoilers.SpoilerEffect; -import top.qwq2333.gen.Config; +import xyz.nextalone.gen.Config; public class TextMessageEnterTransition implements MessageEnterTransitionContainer.Transition { float fromRadius; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/TopicsFragment.java b/TMessagesProj/src/main/java/org/telegram/ui/TopicsFragment.java index 9db4fb59f2..3f9f3ac677 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/TopicsFragment.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/TopicsFragment.java @@ -1476,6 +1476,7 @@ private void openProfile(boolean byAvatar) { args.putLong("chat_id", chatId); ProfileActivity fragment = new ProfileActivity(args, avatarContainer.getSharedMediaPreloader()); fragment.setChatInfo(chatFull); + fragment.setChatInfoChannelMsg(fragment.profileChannelMessageFetcher); fragment.setPlayProfileAnimation(fragmentView.getMeasuredHeight() > fragmentView.getMeasuredWidth() && avatarContainer.getAvatarImageView().getImageReceiver().hasImageLoaded() && byAvatar ? 2 : 1); presentFragment(fragment); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/VoIPFragment.java b/TMessagesProj/src/main/java/org/telegram/ui/VoIPFragment.java index b6cde591af..e45f0f098e 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/VoIPFragment.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/VoIPFragment.java @@ -130,7 +130,7 @@ import java.util.ArrayList; import java.util.List; -import top.qwq2333.nullgram.utils.PermissionUtils; +import xyz.nextalone.nnngram.utils.PermissionUtils; public class VoIPFragment implements VoIPService.StateListener, NotificationCenter.NotificationCenterDelegate { diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/Annotations.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/Annotations.kt similarity index 98% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/Annotations.kt rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/Annotations.kt index be5f8114ca..e40d4a5b55 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/Annotations.kt +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/Annotations.kt @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram +package xyz.nextalone.nnngram /** * The field's Int getter and setter with this annotation will be generated in the `Config` class. diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/Inlines.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/Inlines.kt similarity index 97% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/Inlines.kt rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/Inlines.kt index e2553c84a4..bb7dbfafe1 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/Inlines.kt +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/Inlines.kt @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram +package xyz.nextalone.nnngram import android.view.View import android.widget.LinearLayout @@ -28,7 +28,7 @@ import org.telegram.messenger.AccountInstance import org.telegram.messenger.UserConfig import org.telegram.tgnet.TLRPC import org.telegram.ui.Components.LayoutHelper -import top.qwq2333.nullgram.utils.Log +import xyz.nextalone.nnngram.utils.Log import java.net.URLEncoder fun String.encodeUrl(): String = URLEncoder.encode(this, "UTF-8") diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/Listeners.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/Listeners.kt similarity index 94% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/Listeners.kt rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/Listeners.kt index 4ebffe77bd..de58b0125c 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/Listeners.kt +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/Listeners.kt @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram +package xyz.nextalone.nnngram import android.annotation.SuppressLint import android.app.PendingIntent @@ -35,14 +35,14 @@ import org.telegram.messenger.KeepAliveJob import org.telegram.messenger.LocaleController import org.telegram.messenger.NotificationsController import org.telegram.messenger.R -import top.qwq2333.nullgram.utils.Log +import xyz.nextalone.nnngram.utils.Log @RequiresApi(Build.VERSION_CODES.S) abstract class CallStateListener : TelephonyCallback(), TelephonyCallback.CallStateListener { abstract override fun onCallStateChanged(state: Int) } -class NullgramPushService : NotificationListenerService() { +class NnngramPushService : NotificationListenerService() { override fun onCreate() { super.onCreate() @@ -55,8 +55,8 @@ class NullgramPushService : NotificationListenerService() { class SaveToDownloadReceiver : BroadcastReceiver() { companion object { const val TAG = "MediaController" - private const val ACTION_CANCEL = "top.qwq2333.nullgram.SAVE_TO_DOWNLOAD_CANCEL" - private const val EXTRA_ID = "top.qwq2333.nullgram.NOTIFICATION_ID" + private const val ACTION_CANCEL = "xyz.nextalone.nnngram.SAVE_TO_DOWNLOAD_CANCEL" + private const val EXTRA_ID = "xyz.nextalone.nnngram.NOTIFICATION_ID" val notifications = hashMapOf Unit>>() private val notificationManager by lazy { diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/Typedef.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/Typedef.kt similarity index 97% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/Typedef.kt rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/Typedef.kt index c854d2e5ea..1d0d4488ab 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/Typedef.kt +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/Typedef.kt @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram +package xyz.nextalone.nnngram /** * 8 bit unsigned integer diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/UI.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/UI.kt similarity index 94% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/UI.kt rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/UI.kt index da2affe2bf..9f7ccb6a9f 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/UI.kt +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/UI.kt @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram +package xyz.nextalone.nnngram import android.content.Context import android.util.TypedValue @@ -32,8 +32,8 @@ import org.telegram.ui.ActionBar.Theme import org.telegram.ui.Cells.ShadowSectionCell import org.telegram.ui.Components.EditTextBoldCursor import org.telegram.ui.Components.LayoutHelper -import top.qwq2333.gen.Config -import top.qwq2333.nullgram.activity.ChatSettingActivity +import xyz.nextalone.gen.Config +import xyz.nextalone.nnngram.activity.ChatSettingActivity import java.util.regex.Pattern fun ChatSettingActivity.createMessageFilterSetter(context: Context, resourcesProvider: Theme.ResourcesProvider? = null) { @@ -89,9 +89,9 @@ fun ChatSettingActivity.createMessageFilterSetter(context: Context, resourcesPro setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null) setPositiveButton(LocaleController.getString("Save", R.string.Save)) { _, _ -> runCatching { - if (!editText.text.isNullOrEmpty()) Pattern.compile(editText.text.toString()) + if (!editText.text.isNullOrEmpty()) Pattern.compile(editText.text.toString().trim { it == '|' }) }.onSuccess { - Config.messageFilter = editText.text.toString() + Config.messageFilter = editText.text.toString().trim { it == '|' } }.onFailure { Toast.makeText(context, LocaleController.getString("InvalidPattern", R.string.InvalidPattern), Toast.LENGTH_SHORT).show() } diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/activity/BaseActivity.java b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/activity/BaseActivity.java similarity index 99% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/activity/BaseActivity.java rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/activity/BaseActivity.java index 2fb2fae178..3bb0b55425 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/activity/BaseActivity.java +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/activity/BaseActivity.java @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.activity; +package xyz.nextalone.nnngram.activity; import android.annotation.SuppressLint; import android.content.Context; @@ -86,6 +86,7 @@ public abstract class BaseActivity extends BaseFragment { public static final int TYPE_RADIO = 10; public static final int TYPE_ACCOUNT = 11; public static final int TYPE_STICKER_SIZE = 12; + public static final int TYPE_GIF_SIZE = 13; protected HashMap rowMap = new HashMap<>(20); protected HashMap rowMapReverse = new HashMap<>(20); @@ -166,7 +167,7 @@ public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { if (key != null && holder != null && listAdapter.isEnabled(holder) && rowMapReverse.containsKey(position)) { showDialog(new AlertDialog.Builder(context).setItems(new CharSequence[]{LocaleController.getString("CopyLink", R.string.CopyLink)}, (dialogInterface, i) -> { AndroidUtilities.addToClipboard( - String.format(Locale.getDefault(), "https://%s/nullsetting/%s?r=%s", getMessagesController().linkPrefix, getKey(), rowMapReverse.get(position))); + String.format(Locale.getDefault(), "https://%s/nnnsettings/%s?r=%s", getMessagesController().linkPrefix, getKey(), rowMapReverse.get(position))); BulletinFactory.of(BaseActivity.this).createCopyLinkBulletin().show(); }).create()); return true; diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/activity/ChatSettingActivity.java b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/activity/ChatSettingActivity.java similarity index 73% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/activity/ChatSettingActivity.java rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/activity/ChatSettingActivity.java index e357a3b819..260858a1d1 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/activity/ChatSettingActivity.java +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/activity/ChatSettingActivity.java @@ -17,13 +17,14 @@ * */ -package top.qwq2333.nullgram.activity; +package xyz.nextalone.nnngram.activity; -import static top.qwq2333.nullgram.UIKt.createMessageFilterSetter; +import static xyz.nextalone.nnngram.UIKt.createMessageFilterSetter; import android.animation.ValueAnimator; import android.annotation.SuppressLint; import android.content.Context; +import android.content.DialogInterface; import android.content.Intent; import android.graphics.Canvas; import android.graphics.Paint; @@ -41,6 +42,8 @@ import android.widget.LinearLayout; import androidx.annotation.NonNull; +import androidx.recyclerview.widget.ItemTouchHelper; +import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import com.jakewharton.processphoenix.ProcessPhoenix; @@ -70,31 +73,38 @@ import java.util.ArrayList; -import top.qwq2333.gen.Config; -import top.qwq2333.nullgram.InlinesKt; -import top.qwq2333.nullgram.config.ConfigManager; -import top.qwq2333.nullgram.helpers.EntitiesHelper; -import top.qwq2333.nullgram.ui.PopupBuilder; -import top.qwq2333.nullgram.ui.StickerSizePreviewMessagesCell; -import top.qwq2333.nullgram.utils.AlertUtil; -import top.qwq2333.nullgram.utils.Defines; -import top.qwq2333.nullgram.utils.StringUtils; +import xyz.nextalone.gen.Config; +import xyz.nextalone.nnngram.InlinesKt; +import xyz.nextalone.nnngram.config.ConfigManager; +import xyz.nextalone.nnngram.helpers.EntitiesHelper; +import xyz.nextalone.nnngram.ui.PopupBuilder; +import xyz.nextalone.nnngram.ui.StickerSizePreviewMessagesCell; +import xyz.nextalone.nnngram.ui.sortList.ItemTouchHelperCallback; +import xyz.nextalone.nnngram.ui.sortList.SortListAdapter; +import xyz.nextalone.nnngram.ui.sortList.TextStyleListAdapter; +import xyz.nextalone.nnngram.utils.AlertUtil; +import xyz.nextalone.nnngram.utils.Defines; +import xyz.nextalone.nnngram.utils.StringUtils; @SuppressLint("NotifyDataSetChanged") public class ChatSettingActivity extends BaseActivity { private ActionBarMenuItem resetItem; private StickerSizeCell stickerSizeCell; + private GifSizeCell gifSizeCell; private int stickerSizeHeaderRow; private int stickerSizeRow; private int stickerSize2Row; + private int gifSizeHeaderRow; + private int gifSizeRow; private int chatRow; private int ignoreBlockedUserMessagesRow; private int hideGroupStickerRow; private int disablePremiumStickerRow; private int messageMenuRow; + private int textStyleSettingsRow; private int allowScreenshotOnNoForwardChatRow; private int labelChannelUserRow; private int displaySpoilerDirectlyRow; @@ -103,6 +113,7 @@ public class ChatSettingActivity extends BaseActivity { private int disableTrendingStickerRow; private int disablePreviewVideoSoundShortcutRow; private int quickToggleAnonymous; + private int hideSendAsButtonRow; private int customDoubleClickTapRow; private int confirmToSendMediaMessagesRow; private int maxRecentStickerRow; @@ -119,6 +130,21 @@ public class ChatSettingActivity extends BaseActivity { private int hideTitleRow; private int messageFiltersRow; private int sendLargePhotoRow; + private int doNotUnarchiveBySwipeRow; + private int hideInputFieldBotButtonRow; + private int hideMessageSeenTooltipRow; + private int disableNotificationBubbleRow; + private int showOnlineStatusRow; + private int disablePhotoSideActionRow; + private int mergeMessageRow; + private int filterZalgoRow; + private int hideKeyboardWhenScrollingRow; + private int searchInPlaceRow; + private int disableChannelMuteButtonRow; + private int disableAutoPipRow; + private int sendMp4DocumentAsVideoRow; + private int disableGravityDetectionInVideoRow; + private int autoMuteAfterJoiningChannelRow; private int chat2Row; private int markdownRow; @@ -163,6 +189,7 @@ public View createView(Context context) { animator.addUpdateListener(valueAnimator -> { ConfigManager.putFloat(Defines.stickerSize, (Float) valueAnimator.getAnimatedValue()); stickerSizeCell.invalidate(); + gifSizeCell.invalidate(); }); animator.start(); }); @@ -198,6 +225,8 @@ protected void onItemClick(View view, int position, float x, float y) { } } else if (position == messageMenuRow) { showMessageMenuAlert(); + } else if (position == textStyleSettingsRow) { + showTextStyleSettingsAlert(); } else if (position == allowScreenshotOnNoForwardChatRow) { Config.toggleAllowScreenshotOnNoForwardChat(); if (view instanceof TextCheckCell) { @@ -248,6 +277,10 @@ protected void onItemClick(View view, int position, float x, float y) { types.add(Defines.doubleTabSaveMessages); arrayList.add(LocaleController.getString("Repeat", R.string.Repeat)); types.add(Defines.doubleTabRepeat); + arrayList.add(LocaleController.getString("RepeatAsCopy", R.string.RepeatAsCopy)); + types.add(Defines.doubleTabRepeatAsCopy); + arrayList.add(LocaleController.getString("Reverse", R.string.Reverse)); + types.add(Defines.doubleTabReverse); arrayList.add(LocaleController.getString("TranslateMessage", R.string.TranslateMessage)); types.add(Defines.doubleTabTranslate); PopupBuilder.show(arrayList, LocaleController.getString("customDoubleTap", R.string.customDoubleTap), types.indexOf(Config.getDoubleTab()), getParentActivity(), view, i -> { @@ -329,9 +362,14 @@ protected void onItemClick(View view, int position, float x, float y) { ProcessPhoenix.triggerRebirth(getContext(), new Intent(getContext(), LaunchActivity.class)); }); restart.show(); + } else if (position == hideSendAsButtonRow) { + Config.toggleHideSendAsButton(); + if (view instanceof TextCheckCell) { + ((TextCheckCell) view).setChecked(Config.hideSendAsButton); + } } else if (position == markdownParserRow) { ArrayList arrayList = new ArrayList<>(); - arrayList.add("Nullgram"); + arrayList.add("Nnngram"); arrayList.add("Telegram"); boolean oldParser = Config.newMarkdownParser; PopupBuilder.show(arrayList, LocaleController.getString("MarkdownParser", R.string.MarkdownParser), Config.newMarkdownParser ? 0 : 1, getParentActivity(), view, i -> { @@ -371,6 +409,81 @@ protected void onItemClick(View view, int position, float x, float y) { if (view instanceof TextCheckCell) { ((TextCheckCell) view).setChecked(Config.sendLargePhoto); } + } else if (position == doNotUnarchiveBySwipeRow) { + Config.toggleDoNotUnarchiveBySwipe(); + if (view instanceof TextCheckCell) { + ((TextCheckCell) view).setChecked(Config.doNotUnarchiveBySwipe); + } + } else if (position == hideInputFieldBotButtonRow) { + Config.toggleHideInputFieldBotButton(); + if (view instanceof TextCheckCell) { + ((TextCheckCell) view).setChecked(Config.hideInputFieldBotButton); + } + } else if (position == hideMessageSeenTooltipRow) { + Config.toggleHideMessageSeenTooltip(); + if (view instanceof TextCheckCell) { + ((TextCheckCell) view).setChecked(Config.hideMessageSeenTooltip); + } + } else if (position == disableNotificationBubbleRow) { + Config.toggleDisableNotificationBubble(); + if (view instanceof TextCheckCell) { + ((TextCheckCell) view).setChecked(Config.disableNotificationBubble); + } + } else if (position == showOnlineStatusRow) { + Config.toggleShowOnlineStatus(); + if (view instanceof TextCheckCell) { + ((TextCheckCell) view).setChecked(Config.showOnlineStatus); + } + } else if (position == disablePhotoSideActionRow) { + Config.toggleDisablePhotoSideAction(); + if (view instanceof TextCheckCell) { + ((TextCheckCell) view).setChecked(Config.disablePhotoSideAction); + } + } else if (position == mergeMessageRow) { + Config.toggleMergeMessage(); + if (view instanceof TextCheckCell) { + ((TextCheckCell) view).setChecked(Config.mergeMessage); + } + } else if (position == filterZalgoRow) { + Config.toggleFilterZalgo(); + if (view instanceof TextCheckCell) { + ((TextCheckCell) view).setChecked(Config.filterZalgo); + } + } else if (position == hideKeyboardWhenScrollingRow) { + Config.toggleHideKeyboardWhenScrolling(); + if (view instanceof TextCheckCell) { + ((TextCheckCell) view).setChecked(Config.hideKeyboardWhenScrolling); + } + } else if (position == searchInPlaceRow) { + Config.toggleSearchInPlace(); + if (view instanceof TextCheckCell) { + ((TextCheckCell) view).setChecked(Config.searchInPlace); + } + } else if (position == disableChannelMuteButtonRow) { + Config.toggleDisableChannelMuteButton(); + if (view instanceof TextCheckCell) { + ((TextCheckCell) view).setChecked(Config.disableChannelMuteButton); + } + } else if (position == disableAutoPipRow) { + Config.toggleDisableAutoPip(); + if (view instanceof TextCheckCell) { + ((TextCheckCell) view).setChecked(Config.disableAutoPip); + } + } else if (position == sendMp4DocumentAsVideoRow) { + Config.toggleSendMp4DocumentAsVideo(); + if (view instanceof TextCheckCell) { + ((TextCheckCell) view).setChecked(Config.sendMp4DocumentAsVideo); + } + } else if (position == disableGravityDetectionInVideoRow) { + Config.toggleDisableGravityDetectionInVideo(); + if (view instanceof TextCheckCell) { + ((TextCheckCell) view).setChecked(Config.disableGravityDetectionInVideo); + } + } else if (position == autoMuteAfterJoiningChannelRow) { + Config.toggleAutoMuteAfterJoiningChannel(); + if (view instanceof TextCheckCell) { + ((TextCheckCell) view).setChecked(Config.autoMuteAfterJoiningChannel); + } } } @@ -392,12 +505,14 @@ protected void updateRows() { stickerSizeHeaderRow = addRow(); stickerSizeRow = addRow("stickerSize"); stickerSize2Row = addRow(); - + gifSizeHeaderRow = addRow(); + gifSizeRow = addRow("gifSize"); chatRow = addRow(); ignoreBlockedUserMessagesRow = addRow("ignoreBlockedUserMessages"); hideGroupStickerRow = addRow("hideGroupSticker"); disablePremiumStickerRow = addRow("disablePremiumSticker"); messageMenuRow = addRow(); + textStyleSettingsRow = addRow("textStyleSettings"); if (Config.showHiddenSettings) { allowScreenshotOnNoForwardChatRow = addRow("allowScreenshotOnNoForwardChat"); } @@ -416,6 +531,7 @@ protected void updateRows() { hideTimeForStickerRow = addRow("hideTimeForSticker"); showMessageIDRow = addRow("showMessageID"); quickToggleAnonymous = addRow("quickToggleAnonymous"); + hideSendAsButtonRow = addRow("hideSendAsButton"); hideQuickSendMediaBottomRow = addRow("hideQuickSendMediaBottom"); customQuickMessageRow = addRow("customQuickMessage"); scrollableChatPreviewRow = addRow("scrollableChatPreview"); @@ -424,6 +540,21 @@ protected void updateRows() { hideTitleRow = addRow("showHideTitle"); messageFiltersRow = addRow("messageFilters"); sendLargePhotoRow = addRow("sendLargePhoto"); + doNotUnarchiveBySwipeRow = addRow("doNotUnarchiveBySwipe"); + hideInputFieldBotButtonRow = addRow("hideInputFieldBotButton"); + hideMessageSeenTooltipRow = addRow("hideMessageSeenTooltip"); + disableNotificationBubbleRow = addRow("disableNotificationBubble"); + showOnlineStatusRow = addRow("showOnlineStatus"); + disablePhotoSideActionRow = addRow("disablePhotoSideAction"); + mergeMessageRow = addRow("mergeMessage"); + filterZalgoRow = addRow("filterZalgo"); + hideKeyboardWhenScrollingRow = addRow("hideKeyboardWhenScrolling"); + searchInPlaceRow = addRow("searchInPlace"); + disableChannelMuteButtonRow = addRow("disableChannelMuteButton"); + disableAutoPipRow = addRow("disableAutoPip"); + sendMp4DocumentAsVideoRow = addRow("sendMp4DocumentAsVideo"); + disableGravityDetectionInVideoRow = addRow("disableGravityDetectionInVideo"); + autoMuteAfterJoiningChannelRow = addRow("autoMuteAfterJoiningChannel"); chat2Row = addRow(); markdownRow = addRow(); @@ -464,8 +595,15 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position, boole if (position == stickerSizeRow) { textCell.setTextAndValue(LocaleController.getString("StickerSize", R.string.StickerSize), String.valueOf(Math.round(ConfigManager.getFloatOrDefault(Defines.stickerSize, 14.0f))), payload, true); + } else if (position == gifSizeHeaderRow) { + textCell.setTextAndValue(LocaleController.getString("gifSize", R.string.gifSize), + String.valueOf(ConfigManager.getIntOrDefault(Defines.gifSize, 150)), payload, true); + } else if (position == chatRow) { + textCell.setText(LocaleController.getString("Chat", R.string.Chat), false); } else if (position == messageMenuRow) { textCell.setText(LocaleController.getString("MessageMenu", R.string.MessageMenu), false); + } else if (position == textStyleSettingsRow) { + textCell.setText(LocaleController.getString("TextStyleSettings", R.string.TextStyleSettings), false); } else if (position == maxRecentStickerRow) { textCell.setTextAndValue(LocaleController.getString("maxRecentSticker", R.string.maxRecentSticker), String.valueOf(Config.getMaxRecentSticker()), payload, true); } else if (position == customDoubleClickTapRow) { @@ -489,6 +627,12 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position, boole case Defines.doubleTabRepeat: value = LocaleController.getString("Repeat", R.string.Repeat); break; + case Defines.doubleTabRepeatAsCopy: + value = LocaleController.getString("RepeatAsCopy", R.string.RepeatAsCopy); + break; + case Defines.doubleTabReverse: + value = LocaleController.getString("Reverse", R.string.Reverse); + break; case Defines.doubleTabTranslate: value = LocaleController.getString("TranslateMessage", R.string.TranslateMessage); break; @@ -499,7 +643,7 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position, boole } else if (position == customQuickMessageRow) { textCell.setText(LocaleController.getString("setCustomQuickMessage", R.string.setCustomQuickMessage), true); } else if (position == markdownParserRow) { - textCell.setTextAndValue(LocaleController.getString("MarkdownParser", R.string.MarkdownParser), Config.newMarkdownParser ? "Nullgram" : "Telegram", payload, + textCell.setTextAndValue(LocaleController.getString("MarkdownParser", R.string.MarkdownParser), Config.newMarkdownParser ? "Nnngram" : "Telegram", payload, position + 1 != markdown2Row); } else if (position == messageFiltersRow) { textCell.setText(LocaleController.getString("MessageFilter", R.string.MessageFilter), payload); @@ -553,6 +697,8 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position, boole textCell.setTextAndValueAndCheck(LocaleController.getString("disablePreviewVideoSoundShortcut", R.string.disablePreviewVideoSoundShortcut), LocaleController.getString("disablePreviewVideoSoundShortcutNotice", R.string.disablePreviewVideoSoundShortcutNotice), Config.disablePreviewVideoSoundShortcut, true, true); } else if (position == quickToggleAnonymous) { textCell.setTextAndValueAndCheck(LocaleController.getString("quickToggleAnonymous", R.string.quickToggleAnonymous), LocaleController.getString("quickToggleAnonymousNotice", R.string.quickToggleAnonymousNotice), Config.quickToggleAnonymous, true, true); + } else if (position == hideSendAsButtonRow) { + textCell.setTextAndCheck(LocaleController.getString("hideSendAsButton", R.string.hideSendAsButton), Config.hideSendAsButton, true); } else if (position == disableStickersAutoReorderRow) { textCell.setTextAndCheck(LocaleController.getString("disableStickersAutoReorder", R.string.disableStickersAutoReorder), Config.disableStickersAutoReorder, true); @@ -564,6 +710,36 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position, boole textCell.setTextAndCheck(LocaleController.getString("showHideTitle", R.string.showHideTitle), Config.showHideTitle, true); } else if (position == sendLargePhotoRow) { textCell.setTextAndCheck(LocaleController.getString("sendLargePhoto", R.string.sendLargePhoto), Config.sendLargePhoto, true); + } else if (position == doNotUnarchiveBySwipeRow) { + textCell.setTextAndCheck(LocaleController.getString("doNotUnarchiveBySwipe", R.string.doNotUnarchiveBySwipe), Config.doNotUnarchiveBySwipe, true); + } else if (position == hideInputFieldBotButtonRow) { + textCell.setTextAndCheck(LocaleController.getString("hideInputFieldBotButton", R.string.hideInputFieldBotButton), Config.hideInputFieldBotButton, true); + } else if (position == hideMessageSeenTooltipRow) { + textCell.setTextAndCheck(LocaleController.getString("hideMessageSeenTooltip", R.string.hideMessageSeenTooltip), Config.hideMessageSeenTooltip, true); + } else if (position == disableNotificationBubbleRow) { + textCell.setTextAndCheck(LocaleController.getString("disableNotificationBubble", R.string.disableNotificationBubble), Config.disableNotificationBubble, true); + } else if (position == showOnlineStatusRow) { + textCell.setTextAndCheck(LocaleController.getString("showOnlineStatus", R.string.showOnlineStatus), Config.showOnlineStatus, true); + } else if (position == disablePhotoSideActionRow) { + textCell.setTextAndCheck(LocaleController.getString("disablePhotoSideAction", R.string.disablePhotoSideAction), Config.disablePhotoSideAction, true); + } else if (position == mergeMessageRow) { + textCell.setTextAndCheck(LocaleController.getString("MergeMessage", R.string.MergeMessage), Config.mergeMessage, true); + } else if (position == filterZalgoRow) { + textCell.setTextAndCheck(LocaleController.getString("filterZalgo", R.string.filterZalgo), Config.filterZalgo, true); + } else if (position == hideKeyboardWhenScrollingRow) { + textCell.setTextAndCheck(LocaleController.getString("hideKeyboardWhenScrolling", R.string.hideKeyboardWhenScrolling), Config.hideKeyboardWhenScrolling, true); + } else if (position == searchInPlaceRow) { + textCell.setTextAndCheck(LocaleController.getString("searchInPlace", R.string.searchInPlace), Config.searchInPlace, true); + } else if (position == disableChannelMuteButtonRow) { + textCell.setTextAndCheck(LocaleController.getString("disableChannelMuteButton", R.string.disableChannelMuteButton), Config.disableChannelMuteButton, true); + } else if (position == disableAutoPipRow) { + textCell.setTextAndCheck(LocaleController.getString("disableAutoPip", R.string.disableAutoPip), Config.disableAutoPip, true); + } else if (position == sendMp4DocumentAsVideoRow) { + textCell.setTextAndCheck(LocaleController.getString("sendMp4DocumentAsVideo", R.string.sendMp4DocumentAsVideo), Config.sendMp4DocumentAsVideo, true); + } else if (position == disableGravityDetectionInVideoRow) { + textCell.setTextAndCheck(LocaleController.getString("disableGravityDetectionInVideo", R.string.disableGravityDetectionInVideo), Config.disableGravityDetectionInVideo, true); + } else if (position == autoMuteAfterJoiningChannelRow) { + textCell.setTextAndCheck(LocaleController.getString(R.string.autoMuteAfterJoiningChannel), Config.autoMuteAfterJoiningChannel, true); } break; } @@ -573,6 +749,8 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position, boole headerCell.setText(LocaleController.getString("Chat", R.string.Chat)); } else if (position == stickerSizeHeaderRow) { headerCell.setText(LocaleController.getString("StickerSize", R.string.StickerSize)); + } else if (position == gifSizeHeaderRow) { + headerCell.setText(LocaleController.getString("gifSize", R.string.gifSize)); } else if (position == markdownRow) { headerCell.setText(LocaleController.getString("Markdown", R.string.Markdown)); } @@ -637,8 +815,12 @@ public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int view = stickerSizeCell = new StickerSizeCell(mContext); view.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); break; + case TYPE_GIF_SIZE: + view = gifSizeCell = new GifSizeCell(mContext); + view.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); + break; } - //noinspection ConstantConditions + // noinspection ConstantConditions view.setLayoutParams(new RecyclerView.LayoutParams(RecyclerView.LayoutParams.MATCH_PARENT, RecyclerView.LayoutParams.WRAP_CONTENT)); return new RecyclerListView.Holder(view); } @@ -648,12 +830,14 @@ public int getItemViewType(int position) { if (position == chat2Row || position == stickerSize2Row) { return TYPE_SHADOW; } else if (position == messageMenuRow || position == customDoubleClickTapRow || position == maxRecentStickerRow || position == customQuickMessageRow || position == markdownParserRow - || position == messageFiltersRow) { + || position == messageFiltersRow || position == textStyleSettingsRow) { return TYPE_SETTINGS; - } else if (position == chatRow || position == stickerSizeHeaderRow || position == markdownRow) { + } else if (position == chatRow || position == stickerSizeHeaderRow || position == markdownRow || position == gifSizeHeaderRow) { return TYPE_HEADER; } else if (position == stickerSizeRow) { return TYPE_STICKER_SIZE; + } else if (position == gifSizeRow) { + return TYPE_GIF_SIZE; } else if ((position > chatRow && position < chat2Row) || (position > markdownRow && position < markdown2Row) || (position > stickerSizeRow && position < stickerSize2Row)) { return TYPE_CHECK; } else if (position == markdown2Row) { @@ -678,7 +862,7 @@ private void showMessageMenuAlert() { linearLayoutInviteContainer.setOrientation(LinearLayout.VERTICAL); linearLayout.addView(linearLayoutInviteContainer, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT)); - int count = 8; + int count = 9 + 2; for (int a = 0; a < count; a++) { TextCheckCell textCell = new TextCheckCell(context); switch (a) { @@ -699,18 +883,30 @@ private void showMessageMenuAlert() { break; } case 4: { + textCell.setTextAndCheck(LocaleController.getString("RepeatAsCopy", R.string.RepeatAsCopy), Config.showRepeatAsCopy, false); + break; + } + case 4 + 1: { + textCell.setTextAndCheck(LocaleController.getString("Reverse", R.string.Reverse), Config.showReverse, false); + break; + } + case 4 + 1 + 1: { textCell.setTextAndCheck(LocaleController.getString("ViewHistory", R.string.ViewHistory), Config.showViewHistory, false); break; } - case 5: { + case 5+ 1 + 1: { textCell.setTextAndCheck(LocaleController.getString("MessageDetails", R.string.MessageDetails), Config.showMessagesDetail, false); break; } - case 6: { + case 6+ 1 + 1: { textCell.setTextAndCheck(LocaleController.getString("CopyPhoto", R.string.CopyPhoto), Config.showCopyPhoto, false); break; } - case 7: { + case 7+ 1 + 1: { + textCell.setTextAndCheck(LocaleController.getString("Reactions", R.string.Reactions), Config.showReactions, false); + break; + } + case 8+ 1 + 1: { textCell.setTextAndCheck(LocaleController.getString("ReportChat", R.string.ReportChat), Config.showReport, false); } } @@ -741,23 +937,38 @@ private void showMessageMenuAlert() { break; } case 4: { + Config.toggleShowRepeatAsCopy(); + textCell.setChecked(Config.showRepeatAsCopy); + break; + } + case 4+ 1: { + Config.toggleShowReverse(); + textCell.setChecked(Config.showReverse); + break; + } + case 4 + 1 + 1: { Config.toggleShowViewHistory(); textCell.setChecked(Config.showViewHistory); break; } - case 5: { + case 5 + 1 + 1: { Config.toggleShowMessagesDetail(); textCell.setChecked(Config.showMessagesDetail); break; } - case 6: { + case 6 + 1 + 1: { Config.toggleShowCopyPhoto(); textCell.setChecked(Config.showCopyPhoto); break; } - case 7: { + case 7 + 1 + 1: { + Config.toggleShowReactions(); + textCell.setChecked(Config.showReactions); + break; + } + case 8 + 1 + 1: { Config.toggleShowReport(); - textCell.setChecked(Config.showRepeat); + textCell.setChecked(Config.showReport); break; } } @@ -768,6 +979,28 @@ private void showMessageMenuAlert() { showDialog(builder.create()); } + private void showTextStyleSettingsAlert() { + AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity()); + builder.setTitle(LocaleController.getString("TextStyleSettings", R.string.TextStyleSettings)); + + RecyclerView recyclerView = new RecyclerView(getParentActivity()); + recyclerView.setLayoutManager(new LinearLayoutManager(getParentActivity())); + recyclerView.setPadding(AndroidUtilities.dp(16), 0, AndroidUtilities.dp(16), 0); + + SortListAdapter adapter = new TextStyleListAdapter(); + recyclerView.setAdapter(adapter); + + ItemTouchHelperCallback itemTouchHelperCallback = new ItemTouchHelperCallback(adapter); + ItemTouchHelper itemTouchHelper = new ItemTouchHelper(itemTouchHelperCallback); + itemTouchHelper.attachToRecyclerView(recyclerView); + + builder.setNeutralButton(LocaleController.getString("Default", R.string.Default), (dialog, which) -> adapter.reset()); + + builder.setPositiveButton(LocaleController.getString("OK", R.string.OK), null); + builder.setView(recyclerView); + showDialog(builder.create()); + } + @SuppressLint("SetTextI18n") private void setMaxRecentSticker(View view, int pos) { AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity()); @@ -803,7 +1036,7 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { AlertUtil.showToast(LocaleController.getString("notANumber", R.string.notANumber)); } else { final int targetNum = Integer.parseInt(editText.getText().toString().trim()); - if (targetNum > 150 || targetNum < 20) + if (targetNum > 200 || targetNum < 20) AlertUtil.showToast(LocaleController.getString("numberInvalid", R.string.numberInvalid)); else Config.setMaxRecentSticker(Integer.parseInt(editText.getText().toString())); @@ -891,7 +1124,7 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { builder.setPositiveButton(LocaleController.getString("OK", R.string.OK), (dialogInterface, i) -> { - if (StringUtils.isBlank(setDisplayNameEditText.getText().toString()) || StringUtils.isBlank(setMessageEditText.getText().toString())) { + if (StringUtils.isBlank(setDisplayNameEditText.getText().toString())|| StringUtils.isBlank(setMessageEditText.getText().toString())) { AlertUtil.showToast(LocaleController.getString("emptyInput", R.string.emptyInput)); } else { ConfigManager.putString(Defines.customQuickMessageDisplayName, setDisplayNameEditText.getText().toString()); @@ -985,7 +1218,7 @@ public void onSeekBarPressed(boolean pressed) { @Override protected void onDraw(Canvas canvas) { textPaint.setColor(Theme.getColor(Theme.key_windowBackgroundWhiteValueText)); - canvas.drawText(String.valueOf(Math.round(ConfigManager.getFloatOrDefault(Defines.stickerSize, 14.0f))), getMeasuredWidth() - AndroidUtilities.dp(39), AndroidUtilities.dp(28), textPaint); + canvas.drawText(String.valueOf(Math.round(ConfigManager.getFloatOrDefault(Defines.stickerSize, 14.0f))), getMeasuredWidth()- AndroidUtilities.dp(39), AndroidUtilities.dp(28), textPaint); } @Override @@ -993,7 +1226,7 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); int width = MeasureSpec.getSize(widthMeasureSpec); if (lastWidth != width) { - sizeBar.setProgress((ConfigManager.getFloatOrDefault(Defines.stickerSize, 14.0f) - startStickerSize) / (float) (endStickerSize - startStickerSize)); + sizeBar.setProgress((ConfigManager.getFloatOrDefault(Defines.stickerSize, 14.0f) - startStickerSize)/ (float) (endStickerSize - startStickerSize)); lastWidth = width; } } @@ -1023,5 +1256,81 @@ public boolean performAccessibilityAction(int action, Bundle arguments) { return super.performAccessibilityAction(action, arguments) || sizeBar.getSeekBarAccessibilityDelegate().performAccessibilityActionInternal(this, action, arguments); } } - + + public class GifSizeCell extends FrameLayout { + + private final SeekBarView sizeBar; + private final int startGifSize = 50; + private final int endGifSize = 100; + + private final TextPaint textPaint; + private int lastWidth; + + public GifSizeCell(Context context) { + super(context); + + setWillNotDraw(false); + + textPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG); + textPaint.setTextSize(AndroidUtilities.dp(16)); + + sizeBar = new SeekBarView(context); + sizeBar.setReportChanges(true); + sizeBar.setDelegate(new SeekBarView.SeekBarViewDelegate() { + @Override + public void onSeekBarDrag(boolean stop, float progress) { + sizeBar.getSeekBarAccessibilityDelegate().postAccessibilityEventRunnable(GifSizeCell.this); + ConfigManager.putInt(Defines.gifSize, (int) (startGifSize + (endGifSize - startGifSize) * progress)); + GifSizeCell.this.invalidate(); + } + + @Override + public void onSeekBarPressed(boolean pressed) { + + } + }); + sizeBar.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_NO); + addView(sizeBar, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 38, Gravity.LEFT | Gravity.TOP, 9, 5, 43, 11)); + } + + @Override + protected void onDraw(Canvas canvas) { + textPaint.setColor(Theme.getColor(Theme.key_windowBackgroundWhiteValueText)); + canvas.drawText(ConfigManager.getIntOrDefault(Defines.gifSize, 100) + "%", getMeasuredWidth() - AndroidUtilities.dp(45), AndroidUtilities.dp(28), textPaint); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + int width = MeasureSpec.getSize(widthMeasureSpec); + if (lastWidth != width) { + sizeBar.setProgress((ConfigManager.getIntOrDefault(Defines.gifSize, 100) - startGifSize) / (float) (endGifSize - startGifSize)); + lastWidth = width; + } + } + + @Override + public void invalidate() { + super.invalidate(); + lastWidth = -1; + sizeBar.invalidate(); + } + + @Override + public void onInitializeAccessibilityEvent(AccessibilityEvent event) { + super.onInitializeAccessibilityEvent(event); + sizeBar.getSeekBarAccessibilityDelegate().onInitializeAccessibilityEvent(this, event); + } + + @Override + public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) { + super.onInitializeAccessibilityNodeInfo(info); + sizeBar.getSeekBarAccessibilityDelegate().onInitializeAccessibilityNodeInfoInternal(this, info); + } + + @Override + public boolean performAccessibilityAction(int action, Bundle arguments) { + return super.performAccessibilityAction(action, arguments) || sizeBar.getSeekBarAccessibilityDelegate().performAccessibilityActionInternal(this, action, arguments); + } + } } diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/activity/DatacenterActivity.java b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/activity/DatacenterActivity.java similarity index 99% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/activity/DatacenterActivity.java rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/activity/DatacenterActivity.java index 0c9d65d3f3..4f0eca5d7d 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/activity/DatacenterActivity.java +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/activity/DatacenterActivity.java @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.activity; +package xyz.nextalone.nnngram.activity; import android.content.Context; import android.graphics.Canvas; @@ -59,7 +59,7 @@ import java.util.Locale; -import top.qwq2333.nullgram.utils.MessageUtils; +import xyz.nextalone.nnngram.utils.MessageUtils; public class DatacenterActivity extends BaseActivity implements NotificationCenter.NotificationCenterDelegate { private final int dcToHighlight; diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/activity/ExperimentSettingActivity.java b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/activity/ExperimentSettingActivity.java similarity index 93% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/activity/ExperimentSettingActivity.java rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/activity/ExperimentSettingActivity.java index 470039fa0e..8b89fb9c40 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/activity/ExperimentSettingActivity.java +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/activity/ExperimentSettingActivity.java @@ -17,7 +17,9 @@ * */ -package top.qwq2333.nullgram.activity; +package xyz.nextalone.nnngram.activity; + +import static org.telegram.messenger.AndroidUtilities.getSystemProperty; import android.annotation.SuppressLint; import android.content.Context; @@ -41,11 +43,11 @@ import java.util.ArrayList; -import top.qwq2333.gen.Config; -import top.qwq2333.nullgram.config.ConfigManager; -import top.qwq2333.nullgram.ui.PopupBuilder; -import top.qwq2333.nullgram.utils.Defines; -import top.qwq2333.nullgram.utils.Log; +import xyz.nextalone.gen.Config; +import xyz.nextalone.nnngram.config.ConfigManager; +import xyz.nextalone.nnngram.ui.PopupBuilder; +import xyz.nextalone.nnngram.utils.Defines; +import xyz.nextalone.nnngram.utils.Log; @SuppressLint("NotifyDataSetChanged") public class ExperimentSettingActivity extends BaseActivity { @@ -64,6 +66,7 @@ public class ExperimentSettingActivity extends BaseActivity { private int linkedUserRow; private int overrideChannelAliasRow; private int showRPCErrorRow; + private int enableXiaomiHyperAiRow; private int specialRow; private int special2Row; @@ -78,6 +81,7 @@ public class ExperimentSettingActivity extends BaseActivity { private int hidePremiumStickerAnimRow; private int fastSpeedUploadRow; private int modifyDownloadSpeedRow; + private int ignoreChatStrictRow; private int premium2Row; private int alwaysSendWithoutSoundRow; @@ -213,6 +217,16 @@ protected void onItemClick(View view, int position, float x, float y) { if (view instanceof TextCheckCell) { ((TextCheckCell) view).setChecked(Config.storyStealthMode); } + } else if (position == ignoreChatStrictRow) { + Config.toggleIgnoreChatStrict(); + if (view instanceof TextCheckCell) { + ((TextCheckCell) view).setChecked(Config.ignoreChatStrict); + } + } else if (position == enableXiaomiHyperAiRow) { + Config.toggleEnableXiaomiHyperAi(); + if (view instanceof TextCheckCell) { + ((TextCheckCell) view).setChecked(Config.enableXiaomiHyperAi); + } } } @@ -246,6 +260,9 @@ protected void updateRows() { } var user = UserConfig.getInstance(currentAccount).getCurrentUser(); showRPCErrorRow = user != null && user.developer() ? addRow("showRPCError") : -1; + if (getSystemProperty("ro.mi.os.version.name") != null) { + enableXiaomiHyperAiRow = addRow("enableXiaomiHyperAi"); + } experiment2Row = addRow(); if (Config.showHiddenSettings) { @@ -270,6 +287,7 @@ protected void updateRows() { fastSpeedUploadRow = addRow("fastSpeedUpload"); modifyDownloadSpeedRow = addRow("modifyDownloadSpeed"); premium2Row = addRow(); + ignoreChatStrictRow = addRow("ignoreChatStrict"); } if (listAdapter != null) { @@ -382,6 +400,10 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position, boole true); } else if (position == enablePanguOnReceivingRow) { textCell.setTextAndCheck(LocaleController.getString("enablePanguOnReceiving", R.string.enablePanguOnReceiving), Config.enablePanguOnReceiving, true); + } else if (position == ignoreChatStrictRow) { + textCell.setTextAndCheck("", Config.ignoreChatStrict, true); + } else if (position == enableXiaomiHyperAiRow) { + textCell.setTextAndCheck(LocaleController.getString(R.string.enableXiaomiHyperAi), Config.enableXiaomiHyperAi, true); } break; } diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/activity/GeneralSettingActivity.java b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/activity/GeneralSettingActivity.java similarity index 73% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/activity/GeneralSettingActivity.java rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/activity/GeneralSettingActivity.java index a9ca543f02..66db02b0f1 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/activity/GeneralSettingActivity.java +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/activity/GeneralSettingActivity.java @@ -17,24 +17,32 @@ * */ -package top.qwq2333.nullgram.activity; +package xyz.nextalone.nnngram.activity; import android.annotation.SuppressLint; import android.content.Context; import android.text.TextUtils; import android.transition.TransitionManager; +import android.util.TypedValue; +import android.view.Gravity; import android.view.View; import android.view.ViewGroup; +import android.view.inputmethod.EditorInfo; +import android.widget.FrameLayout; +import android.widget.LinearLayout; import androidx.annotation.NonNull; import androidx.core.text.HtmlCompat; import androidx.core.util.Pair; import androidx.recyclerview.widget.RecyclerView; +import org.telegram.messenger.AndroidUtilities; import org.telegram.messenger.LanguageDetector; import org.telegram.messenger.LocaleController; import org.telegram.messenger.NotificationCenter; import org.telegram.messenger.R; +import org.telegram.messenger.UserConfig; +import org.telegram.ui.ActionBar.AlertDialog; import org.telegram.ui.ActionBar.DrawerLayoutContainer; import org.telegram.ui.ActionBar.Theme; import org.telegram.ui.Cells.HeaderCell; @@ -45,20 +53,22 @@ import org.telegram.ui.Cells.TextInfoPrivacyCell; import org.telegram.ui.Cells.TextSettingsCell; import org.telegram.ui.Components.BulletinFactory; +import org.telegram.ui.Components.EditTextBoldCursor; +import org.telegram.ui.Components.LayoutHelper; import org.telegram.ui.Components.RecyclerListView; import java.util.ArrayList; import java.util.Locale; import kotlin.Unit; -import top.qwq2333.gen.Config; -import top.qwq2333.nullgram.config.ConfigManager; -import top.qwq2333.nullgram.helpers.TranslateHelper; -import top.qwq2333.nullgram.helpers.TranslateHelper.ProviderType; -import top.qwq2333.nullgram.translate.providers.DeepLTranslator; -import top.qwq2333.nullgram.ui.DrawerProfilePreviewCell; -import top.qwq2333.nullgram.ui.PopupBuilder; -import top.qwq2333.nullgram.utils.Defines; +import xyz.nextalone.gen.Config; +import xyz.nextalone.nnngram.config.ConfigManager; +import xyz.nextalone.nnngram.helpers.TranslateHelper; +import xyz.nextalone.nnngram.helpers.TranslateHelper.ProviderType; +import xyz.nextalone.nnngram.translate.providers.DeepLTranslator; +import xyz.nextalone.nnngram.ui.DrawerProfilePreviewCell; +import xyz.nextalone.nnngram.ui.PopupBuilder; +import xyz.nextalone.nnngram.utils.Defines; @SuppressLint("NotifyDataSetChanged") public class GeneralSettingActivity extends BaseActivity { @@ -73,11 +83,14 @@ public class GeneralSettingActivity extends BaseActivity { private int avatarBackgroundDarkenRow; private int largeAvatarAsBackgroundRow; private int hidePhoneRow; + private int drawerListRow; + private int hideDialogsFloatingButtonRow; private int drawer2Row; private int translatorRow; private int showOriginalRow; private int deepLFormalityRow; + private int deepLxApiRow; private int translatorTypeRow; private int translationProviderRow; private int translationTargetRow; @@ -85,7 +98,7 @@ public class GeneralSettingActivity extends BaseActivity { private int autoTranslateRow; private int translator2Row; - + private int customTitleRow; private int showBotAPIRow; private int showExactNumberRow; private int showExactTimeRow; @@ -98,7 +111,9 @@ public class GeneralSettingActivity extends BaseActivity { private int ignoreMutedCountRow; private int disableSharePhoneWithContactByDefaultRow; private int ignoreUserSpecifiedReplyColorRow; - + private int ignoreFolderUnreadCountRow; + private int hideProxyEntryInTitleRow; + private int hideFilterMuteAllRow; private int devicesRow; private int useSystemEmojiRow; @@ -127,7 +142,11 @@ protected String getActionBarTitle() { @Override protected void onItemClick(View view, int position, float x, float y) { - if (position == showBotAPIRow) { + if (position == customTitleRow) { + setCustomTitle(view, position); + listAdapter.notifyItemChanged(position, PARTIAL); + } + else if (position == showBotAPIRow) { Config.toggleShowBotAPIID(); if (view instanceof TextCheckCell) { ((TextCheckCell) view).setChecked(Config.showBotAPIID); @@ -140,6 +159,8 @@ protected void onItemClick(View view, int position, float x, float y) { parentLayout.rebuildAllFragmentViews(false, false); getNotificationCenter().postNotificationName(NotificationCenter.mainUserInfoChanged); listAdapter.notifyItemChanged(drawerRow, PARTIAL); + } else if (position == drawerListRow) { + showDrawerListAlert(); } else if (position == avatarAsDrawerBackgroundRow) { Config.toggleAvatarAsDrawerBackground(); if (view instanceof TextCheckCell) { @@ -266,7 +287,11 @@ protected void onItemClick(View view, int position, float x, float y) { if (view instanceof TextCheckCell) { ((TextCheckCell) view).setChecked(Config.ignoreUserSpecifiedReplyColor); } - + } else if (position == ignoreFolderUnreadCountRow) { + Config.toggleIgnoreFolderUnreadCount(); + if (view instanceof TextCheckCell) { + ((TextCheckCell) view).setChecked(Config.ignoreFolderUnreadCount); + } } else if (position == autoDisableBuiltInProxyRow) { Config.toggleAutoDisableBuiltInProxy(); if (view instanceof TextCheckCell) { @@ -282,11 +307,26 @@ protected void onItemClick(View view, int position, float x, float y) { listAdapter.notifyItemChanged(translationTargetRow, PARTIAL); } if (!oldProvider.equals(TranslateHelper.getCurrentProviderType())) { - if (oldProvider.equals(ProviderType.DeepLTranslator)) { + boolean wasDeepLTranslator = oldProvider.equals(ProviderType.DeepLTranslator); + boolean isDeepLTranslator = TranslateHelper.getCurrentProviderType().equals(ProviderType.DeepLTranslator); + boolean wasDeepLxTranslator = oldProvider.equals(ProviderType.DeepLxTranslator); + boolean isDeepLxTranslator = TranslateHelper.getCurrentProviderType().equals(ProviderType.DeepLxTranslator); + + if (wasDeepLTranslator && !isDeepLxTranslator) { listAdapter.notifyItemRemoved(deepLFormalityRow); - updateRows(); - } else if (TranslateHelper.getCurrentProviderType().equals(ProviderType.DeepLTranslator)) { - updateRows(); + } else if (wasDeepLxTranslator) { + listAdapter.notifyItemRemoved(deepLxApiRow); + if (!isDeepLxTranslator) { + listAdapter.notifyItemRemoved(deepLFormalityRow); + } + } + + updateRows(); + + if (isDeepLTranslator) { + listAdapter.notifyItemInserted(deepLFormalityRow); + } else if (isDeepLxTranslator) { + listAdapter.notifyItemInserted(deepLxApiRow); listAdapter.notifyItemInserted(deepLFormalityRow); } } @@ -314,6 +354,22 @@ protected void onItemClick(View view, int position, float x, float y) { ConfigManager.putInt(Defines.deepLFormality, types.get(i)); listAdapter.notifyItemChanged(deepLFormalityRow, PARTIAL); }); + } else if (position == deepLxApiRow) { + EditTextBoldCursor editText = new EditTextBoldCursor(getParentActivity()); + editText.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); + editText.setHint("DeepLx API Url"); // todo: string resource + editText.setImeOptions(EditorInfo.IME_ACTION_DONE); + editText.setText(Config.getDeepLxApi()); + FrameLayout frameLayout = new FrameLayout(getParentActivity()); + frameLayout.addView(editText, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.TOP, 16, 0, 16, 0)); + AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity()); + builder.setTitle("DeepLx API Url"); // todo: string resource + builder.setView(frameLayout); + builder.setPositiveButton(LocaleController.getString("Save", R.string.Save), (dialogInterface, i) -> { + Config.setDeepLxApi(editText.getText().toString()); + }); + builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); + builder.show(); } else if (position == translatorTypeRow) { var oldType = TranslateHelper.getCurrentStatus(); TranslateHelper.showTranslatorTypeSelector(getParentActivity(), view, () -> { @@ -365,8 +421,22 @@ protected void onItemClick(View view, int position, float x, float y) { if (view instanceof TextCheckCell) { ((TextCheckCell) view).setChecked(Config.hideStories); } + } else if (position == hideFilterMuteAllRow) { + Config.toggleHideFilterMuteAll(); + if (view instanceof TextCheckCell) { + ((TextCheckCell) view).setChecked(Config.hideFilterMuteAll); + } + } else if (position == hideDialogsFloatingButtonRow) { + Config.toggleHideDialogsFloatingButton(); + if (view instanceof TextCheckCell) { + ((TextCheckCell) view).setChecked(Config.hideDialogsFloatingButton); + } + } else if (position == hideProxyEntryInTitleRow) { + Config.toggleHideProxyEntryInTitle(); + if (view instanceof TextCheckCell) { + ((TextCheckCell) view).setChecked(Config.hideProxyEntryInTitle); + } } - } @Override @@ -394,6 +464,8 @@ protected void updateRows() { largeAvatarAsBackgroundRow = -1; } hidePhoneRow = addRow("hidePhone"); + drawerListRow = addRow("drawerList"); + hideDialogsFloatingButtonRow = addRow("hideDialogsFloatingButton"); drawer2Row = addRow(); translatorRow = addRow(); @@ -401,7 +473,8 @@ protected void updateRows() { if (TranslateHelper.getCurrentStatus() != TranslateHelper.Status.External) { showOriginalRow = TranslateHelper.getCurrentStatus() == TranslateHelper.Status.InMessage ? addRow("showOriginal") : -1; translationProviderRow = addRow("translationProvider"); - deepLFormalityRow = TranslateHelper.getCurrentProviderType().equals(ProviderType.DeepLTranslator) ? addRow("deepLFormality") : -1; + deepLxApiRow = TranslateHelper.getCurrentProviderType().equals(ProviderType.DeepLxTranslator) ? addRow("deepLxApi") : -1; + deepLFormalityRow = (TranslateHelper.getCurrentProviderType().equals(ProviderType.DeepLTranslator) || TranslateHelper.getCurrentProviderType().equals(ProviderType.DeepLxTranslator)) ? addRow("deepLFormality") : -1; translationTargetRow = addRow("translationTarget"); doNotTranslateRow = addRow("doNotTranslate"); autoTranslateRow = addRow("autoTranslate"); @@ -417,6 +490,7 @@ protected void updateRows() { generalRow = addRow(); + customTitleRow = addRow("customTitle"); showBotAPIRow = addRow("showBotAPI"); showExactNumberRow = addRow("showExactNumber"); showExactTimeRow = addRow("showExactTime"); @@ -429,6 +503,9 @@ protected void updateRows() { disableSharePhoneWithContactByDefaultRow = addRow("disableSharePhoneWithContactByDefault"); ignoreUserSpecifiedReplyColorRow = addRow("ignoreUserSpecifiedReplyColor"); tabsTitleTypeRow = addRow("tabsTitleType"); + ignoreFolderUnreadCountRow = addRow("ignoreFolderUnreadCount"); + hideFilterMuteAllRow = addRow("hideFilterMuteAll"); + hideProxyEntryInTitleRow = addRow(); general2Row = addRow(); devicesRow = addRow(); @@ -564,6 +641,16 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position, boole value = LocaleController.formatPluralString("Languages", langCodes.size()); } textCell.setTextAndValue(LocaleController.getString("DoNotTranslate", R.string.DoNotTranslate), value, payload, true); + } else if (position == customTitleRow) { + textCell.setTextAndValue(LocaleController.getString("customTitle", R.string.customTitle), Config.getCustomTitle(), payload, true); + } else if (position == drawerListRow) { + textCell.setText(LocaleController.getString("drawerList", R.string.drawerList), false); + } else if (position == deepLxApiRow) { + String value = Config.getDeepLxApi(); + if (value.length() > 25) { + value = value.substring(0, 25) + "..."; + } + textCell.setTextAndValue(LocaleController.getString(R.string.DeepLxApi), value, payload, true); } break; } @@ -622,6 +709,14 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position, boole textCell.setTextAndCheck(LocaleController.getString("TranslatorShowOriginal", R.string.TranslatorShowOriginal), TranslateHelper.getShowOriginal(), true); } else if (position == hideStoriesRow) { textCell.setTextAndCheck(LocaleController.getString("HideStories", R.string.HideStories), Config.hideStories, true); + } else if (position == ignoreFolderUnreadCountRow) { + textCell.setTextAndCheck(LocaleController.getString("ignoreFolderUnreadCount", R.string.ignoreFolderUnreadCount), Config.ignoreFolderUnreadCount, true); + } else if (position == hideFilterMuteAllRow) { + textCell.setTextAndCheck(LocaleController.getString("hideFilterMuteAll", R.string.hideFilterMuteAll), Config.hideFilterMuteAll, true); + } else if (position == hideDialogsFloatingButtonRow) { + textCell.setTextAndCheck(LocaleController.getString("hideDialogsFloatingButton", R.string.hideDialogsFloatingButton), Config.hideDialogsFloatingButton, true); + } else if (position == hideProxyEntryInTitleRow) { + textCell.setTextAndCheck(LocaleController.getString(R.string.hideProxyEntryInTitle), Config.hideProxyEntryInTitle, true); } break; } @@ -711,7 +806,8 @@ public int getItemViewType(int position) { if (position == general2Row || position == drawer2Row || position == translator2Row || position == devices2Row || position == stories2Row) { return 1; } else if (position == tabsTitleTypeRow || position == translationProviderRow || position == deepLFormalityRow || position == translationTargetRow || - position == translatorTypeRow || position == doNotTranslateRow || position == overrideDevicePerformanceRow) { + position == translatorTypeRow || position == doNotTranslateRow || position == overrideDevicePerformanceRow || position == customTitleRow || + position == drawerListRow || position == deepLxApiRow) { return 2; } else if (position == generalRow || position == translatorRow || position == devicesRow || position == storiesRow) { return 4; @@ -738,4 +834,136 @@ private ArrayList getRestrictedLanguages() { } return langCodes; } + + private void setCustomTitle(View view, int pos) { + AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity()); + builder.setTitle(LocaleController.getString("setCustomTitle", R.string.setCustomTitle)); + + final EditTextBoldCursor editText = new EditTextBoldCursor(getParentActivity()) { + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(64), MeasureSpec.EXACTLY)); + } + }; + editText.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 18); + editText.setTextColor(getThemedColor(Theme.key_dialogTextBlack)); + editText.setHintText(LocaleController.getString("AppName", R.string.AppName)); + editText.setText(Config.getCustomTitle()); + editText.setHeaderHintColor(getThemedColor(Theme.key_windowBackgroundWhiteBlueHeader)); + editText.setSingleLine(true); + editText.setFocusable(true); + editText.setTransformHintToHeader(true); + editText.setLineColors(getThemedColor(Theme.key_windowBackgroundWhiteInputField), getThemedColor(Theme.key_windowBackgroundWhiteInputFieldActivated), getThemedColor(Theme.key_text_RedRegular)); + editText.setImeOptions(EditorInfo.IME_ACTION_DONE); + editText.setBackgroundDrawable(null); + editText.requestFocus(); + editText.setPadding(0, 0, 0, 0); + builder.setView(editText); + + builder.setPositiveButton(LocaleController.getString("OK", R.string.OK), (dialogInterface, i) -> { + if (editText.getText().toString().trim().isEmpty()) { + Config.setCustomTitle(LocaleController.getString("AppName", R.string.AppName)); + } else { + Config.setCustomTitle(editText.getText().toString().trim()); + } + listAdapter.notifyItemChanged(pos, PARTIAL); + }); + builder.setNeutralButton(LocaleController.getString("Default", R.string.Default), (dialogInterface, i) -> { + Config.setCustomTitle(LocaleController.getString("AppName", R.string.AppName)); + listAdapter.notifyItemChanged(pos, PARTIAL); + }); + builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); + builder.show().setOnShowListener(dialog -> { + editText.requestFocus(); + AndroidUtilities.showKeyboard(editText); + }); + ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) editText.getLayoutParams(); + if (layoutParams != null) { + if (layoutParams instanceof FrameLayout.LayoutParams) { + ((FrameLayout.LayoutParams) layoutParams).gravity = Gravity.CENTER_HORIZONTAL; + } + layoutParams.rightMargin = layoutParams.leftMargin = AndroidUtilities.dp(24); + layoutParams.height = AndroidUtilities.dp(36); + editText.setLayoutParams(layoutParams); + } + editText.setSelection(0, editText.getText().length()); + } + + private void showDrawerListAlert() { + if (getParentActivity() == null) { + return; + } + Context context = getParentActivity(); + AlertDialog.Builder builder = new AlertDialog.Builder(context); + builder.setTitle(LocaleController.getString("drawerList", R.string.drawerList)); + + LinearLayout linearLayout = new LinearLayout(context); + linearLayout.setOrientation(LinearLayout.VERTICAL); + + LinearLayout linearLayoutInviteContainer = new LinearLayout(context); + linearLayoutInviteContainer.setOrientation(LinearLayout.VERTICAL); + linearLayout.addView(linearLayoutInviteContainer, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT)); + + boolean isPremium = UserConfig.getInstance(UserConfig.selectedAccount).isPremium(); + int count = isPremium ? 8 : 6; + for (int a = 0; a < count; a++) { + if (a == 3) { + continue; + } + TextCheckCell textCell = new TextCheckCell(context); + switch (a) { + case 0 -> textCell.setTextAndCheck(LocaleController.getString("NewGroup", R.string.NewGroup), Config.showNewGroup, false); + case 1 -> textCell.setTextAndCheck(LocaleController.getString("Contacts", R.string.Contacts), Config.showContacts, false); + case 2 -> textCell.setTextAndCheck(LocaleController.getString("Calls", R.string.Calls), Config.showCalls, false); +// case 3 -> textCell.setTextAndCheck(LocaleController.getString("PeopleNearby", R.string.PeopleNearby), Config.showPeopleNearby, false); + case 4 -> textCell.setTextAndCheck(LocaleController.getString("SavedMessages", R.string.SavedMessages), Config.showSavedMessages, false); + case 5 -> textCell.setTextAndCheck(LocaleController.getString("ArchivedChats", R.string.ArchivedChats), Config.showArchivedChats, false); + case 6 -> textCell.setTextAndCheck(LocaleController.getString("ChangeEmojiStatus", R.string.ChangeEmojiStatus), Config.showChangeEmojiStatus, false); + case 7 -> textCell.setTextAndCheck(LocaleController.getString("MyProfile", R.string.MyProfile), Config.showProfileMyStories, false); + } + textCell.setTag(a); + textCell.setBackground(Theme.getSelectorDrawable(false)); + linearLayoutInviteContainer.addView(textCell, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT)); + textCell.setOnClickListener(v2 -> { + Integer tag = (Integer) v2.getTag(); + switch (tag) { + case 0 -> { + Config.toggleShowNewGroup(); + textCell.setChecked(Config.showNewGroup); + } + case 1 -> { + Config.toggleShowContacts(); + textCell.setChecked(Config.showContacts); + } + case 2 -> { + Config.toggleShowCalls(); + textCell.setChecked(Config.showCalls); + } + case 3 -> { + Config.toggleShowPeopleNearby(); + textCell.setChecked(Config.showPeopleNearby); + } + case 4 -> { + Config.toggleShowSavedMessages(); + textCell.setChecked(Config.showSavedMessages); + } + case 5 -> { + Config.toggleShowArchivedChats(); + textCell.setChecked(Config.showArchivedChats); + } + case 6 -> { + Config.toggleShowChangeEmojiStatus(); + textCell.setChecked(Config.showChangeEmojiStatus); + } + case 7 -> { + Config.toggleShowProfileMyStories(); + textCell.setChecked(Config.showProfileMyStories); + } + } + }); + } + builder.setPositiveButton(LocaleController.getString("OK", R.string.OK), null); + builder.setView(linearLayout); + showDialog(builder.create()); + } } diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/activity/LanguageSelectActivity.java b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/activity/LanguageSelectActivity.java similarity index 99% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/activity/LanguageSelectActivity.java rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/activity/LanguageSelectActivity.java index cc262ef815..54bced402b 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/activity/LanguageSelectActivity.java +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/activity/LanguageSelectActivity.java @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.activity; +package xyz.nextalone.nnngram.activity; import android.annotation.SuppressLint; import android.content.Context; @@ -51,7 +51,7 @@ import java.util.List; import java.util.Locale; -import top.qwq2333.nullgram.helpers.TranslateHelper; +import xyz.nextalone.nnngram.helpers.TranslateHelper; public class LanguageSelectActivity extends BaseActivity { diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/activity/LicenseActivity.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/activity/LicenseActivity.kt similarity index 98% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/activity/LicenseActivity.kt rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/activity/LicenseActivity.kt index 2d525ca230..00222bae09 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/activity/LicenseActivity.kt +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/activity/LicenseActivity.kt @@ -16,7 +16,7 @@ * If not, see * */ -package top.qwq2333.nullgram.activity +package xyz.nextalone.nnngram.activity import android.content.Context import android.text.method.ScrollingMovementMethod @@ -45,8 +45,8 @@ import org.telegram.ui.Components.LayoutHelper import org.telegram.ui.Components.RecyclerListView import org.telegram.ui.Components.RecyclerListView.SelectionAdapter import org.telegram.ui.Components.SizeNotifierFrameLayout -import top.qwq2333.nullgram.createLinear -import top.qwq2333.nullgram.utils.Log +import xyz.nextalone.nnngram.createLinear +import xyz.nextalone.nnngram.utils.Log class LicenseActivity : BaseFragment() { private var listView: ListView? = null diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/activity/MainSettingActivity.java b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/activity/MainSettingActivity.java similarity index 95% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/activity/MainSettingActivity.java rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/activity/MainSettingActivity.java index 51583e0f64..9317f051ef 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/activity/MainSettingActivity.java +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/activity/MainSettingActivity.java @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.activity; +package xyz.nextalone.nnngram.activity; import android.annotation.SuppressLint; import android.content.Context; @@ -54,14 +54,14 @@ import java.io.File; import java.util.ArrayList; -import top.qwq2333.gen.Config; -import top.qwq2333.nullgram.config.ConfigManager; -import top.qwq2333.nullgram.helpers.PasscodeHelper; -import top.qwq2333.nullgram.utils.AlertUtil; -import top.qwq2333.nullgram.utils.FileUtils; -import top.qwq2333.nullgram.utils.Log; -import top.qwq2333.nullgram.utils.PermissionUtils; -import top.qwq2333.nullgram.utils.ShareUtil; +import xyz.nextalone.gen.Config; +import xyz.nextalone.nnngram.config.ConfigManager; +import xyz.nextalone.nnngram.helpers.PasscodeHelper; +import xyz.nextalone.nnngram.utils.AlertUtil; +import xyz.nextalone.nnngram.utils.FileUtils; +import xyz.nextalone.nnngram.utils.Log; +import xyz.nextalone.nnngram.utils.PermissionUtils; +import xyz.nextalone.nnngram.utils.ShareUtil; @SuppressLint("NotifyDataSetChanged") public class MainSettingActivity extends BaseActivity { @@ -111,9 +111,9 @@ protected void onItemClick(View view, int position, float x, float y) { } else if (position == channelRow) { MessagesController.getInstance(currentAccount).openByUserName(LocaleController.getString("OfficialChannelName", R.string.OfficialChannelName), this, 1); } else if (position == websiteRow) { - Browser.openUrl(getParentActivity(), "https://qwq2333.top"); + Browser.openUrl(getParentActivity(), "https://nextalone.xyz"); } else if (position == sourceCodeRow) { - Browser.openUrl(getParentActivity(), "https://github.com/qwq233/Nullgram"); + Browser.openUrl(getParentActivity(), "https://github.com/PreviousAlone/nnngram"); } else if (position == licenseRow) { presentFragment(new LicenseActivity()); } else if (position == updateRow) { @@ -277,7 +277,7 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if (position == channelRow) { textCell.setTextAndValue(LocaleController.getString("OfficialChannel", R.string.OfficialChannel), "@" + LocaleController.getString("OfficialChannelName", R.string.OfficialChannelName), true); } else if (position == websiteRow) { - textCell.setTextAndValue(LocaleController.getString("OfficialSite", R.string.OfficialSite), "qwq2333.top", true); + textCell.setTextAndValue(LocaleController.getString("OfficialSite", R.string.OfficialSite), "nextalone.xyz", true); } else if (position == sourceCodeRow) { textCell.setTextAndValue(LocaleController.getString("ViewSourceCode", R.string.ViewSourceCode), "GitHub", true); } else if (position == licenseRow) { @@ -324,7 +324,7 @@ public int getItemViewType(int position) { private void backupSettings() { try { - File cacheFile = new File(ApplicationLoader.applicationContext.getCacheDir(), DateFormat.format("yyyyMMdd", System.currentTimeMillis()) + "-nullgram-settings.json"); + File cacheFile = new File(ApplicationLoader.applicationContext.getCacheDir(), DateFormat.format("yyyyMMdd", System.currentTimeMillis()) + "-nnngram-settings.json"); FileUtils.writeUtf8String(ConfigManager.exportConfigurationToJson(), cacheFile); ShareUtil.shareFile(getParentActivity(), cacheFile); } catch (JSONException e) { diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/activity/MessageDetailActivity.java b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/activity/MessageDetailActivity.java similarity index 99% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/activity/MessageDetailActivity.java rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/activity/MessageDetailActivity.java index 4ab54ed0c4..3be9149ea3 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/activity/MessageDetailActivity.java +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/activity/MessageDetailActivity.java @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.activity; +package xyz.nextalone.nnngram.activity; import android.annotation.SuppressLint; import android.content.Context; @@ -67,9 +67,9 @@ import java.util.Locale; import kotlin.Unit; -import top.qwq2333.nullgram.ui.TextViewEffects; -import top.qwq2333.nullgram.utils.MessageUtils; -import top.qwq2333.nullgram.utils.Utils; +import xyz.nextalone.nnngram.ui.TextViewEffects; +import xyz.nextalone.nnngram.utils.MessageUtils; +import xyz.nextalone.nnngram.utils.Utils; @SuppressLint({"RtlHardcoded", "NotifyDataSetChanged"}) public class MessageDetailActivity extends BaseActivity implements NotificationCenter.NotificationCenterDelegate { diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/activity/PasscodeSettingActivity.java b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/activity/PasscodeSettingActivity.java similarity index 99% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/activity/PasscodeSettingActivity.java rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/activity/PasscodeSettingActivity.java index 466aeea71d..8e5e65f1f7 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/activity/PasscodeSettingActivity.java +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/activity/PasscodeSettingActivity.java @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.activity; +package xyz.nextalone.nnngram.activity; import android.app.Dialog; import android.content.ClipData; @@ -67,7 +67,7 @@ import java.util.ArrayList; import java.util.Locale; -import top.qwq2333.nullgram.helpers.PasscodeHelper; +import xyz.nextalone.nnngram.helpers.PasscodeHelper; public class PasscodeSettingActivity extends BaseActivity { @@ -310,7 +310,7 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { } else if (position == panicCode2Row) { cell.setText(LocaleController.getString(R.string.PasscodePanicCodeAbout)); } else if (position == showInSettings2Row) { - var link = String.format(Locale.ENGLISH, "https://t.me/nullsettings/%s", PasscodeHelper.getSettingsKey()); + var link = String.format(Locale.ENGLISH, "https://t.me/nnnsettings/%s", PasscodeHelper.getSettingsKey()); var stringBuilder = new SpannableStringBuilder(AndroidUtilities.replaceTags(LocaleController.getString(R.string.PasscodeShowInSettingsAbout))); stringBuilder.append("\n").append(link); stringBuilder.setSpan(new URLSpanNoUnderline(null) { diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/activity/WsSettingsActivity.java b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/activity/WsSettingsActivity.java similarity index 97% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/activity/WsSettingsActivity.java rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/activity/WsSettingsActivity.java index 1f5d6f4b71..e0230aaa7a 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/activity/WsSettingsActivity.java +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/activity/WsSettingsActivity.java @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.activity; +package xyz.nextalone.nnngram.activity; import android.content.Context; import android.util.TypedValue; @@ -45,11 +45,11 @@ import org.telegram.ui.Components.EditTextBoldCursor; import org.telegram.ui.Components.LayoutHelper; -import top.qwq2333.gen.Config; -import top.qwq2333.nullgram.helpers.WebSocketHelper; -import top.qwq2333.nullgram.helpers.WebSocketHelper.WsProvider; -import top.qwq2333.nullgram.ui.PopupBuilder; -import top.qwq2333.nullgram.utils.Log; +import xyz.nextalone.gen.Config; +import xyz.nextalone.nnngram.helpers.WebSocketHelper; +import xyz.nextalone.nnngram.helpers.WebSocketHelper.WsProvider; +import xyz.nextalone.nnngram.ui.PopupBuilder; +import xyz.nextalone.nnngram.utils.Log; public class WsSettingsActivity extends BaseActivity { diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/config/CloudStorage.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/config/CloudStorage.kt similarity index 97% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/config/CloudStorage.kt rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/config/CloudStorage.kt index 68c6a0bcd9..48931d6b77 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/config/CloudStorage.kt +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/config/CloudStorage.kt @@ -19,7 +19,7 @@ @file:Suppress("EnumEntryName") -package top.qwq2333.nullgram.config +package xyz.nextalone.nnngram.config import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -29,7 +29,7 @@ import kotlinx.serialization.json.Json import org.telegram.messenger.AccountInstance import org.telegram.messenger.UserConfig import org.telegram.tgnet.TLRPC -import top.qwq2333.nullgram.utils.Log +import xyz.nextalone.nnngram.utils.Log import java.util.concurrent.CompletableFuture class CloudStorage(instance: Int) : AccountInstance(instance) { diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/config/ConfigManager.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/config/ConfigManager.kt similarity index 99% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/config/ConfigManager.kt rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/config/ConfigManager.kt index c544366f10..e546c349e3 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/config/ConfigManager.kt +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/config/ConfigManager.kt @@ -16,7 +16,7 @@ * If not, see * */ -package top.qwq2333.nullgram.config +package xyz.nextalone.nnngram.config import android.annotation.SuppressLint import android.app.Activity @@ -25,7 +25,7 @@ import com.google.gson.JsonPrimitive import org.json.JSONException import org.json.JSONObject import org.telegram.messenger.ApplicationLoader -import top.qwq2333.nullgram.utils.Log +import xyz.nextalone.nnngram.utils.Log import java.util.function.Function object ConfigManager { diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/config/DialogConfig.java b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/config/DialogConfig.java similarity index 95% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/config/DialogConfig.java rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/config/DialogConfig.java index 0279e4d81a..1f50c1ae6e 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/config/DialogConfig.java +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/config/DialogConfig.java @@ -17,14 +17,14 @@ * */ -package top.qwq2333.nullgram.config; +package xyz.nextalone.nnngram.config; import android.content.Context; import android.content.SharedPreferences; import org.telegram.messenger.ApplicationLoader; -import top.qwq2333.nullgram.helpers.TranslateHelper; +import xyz.nextalone.nnngram.helpers.TranslateHelper; public class DialogConfig { private static final SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("dialogconfig", Context.MODE_PRIVATE); diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/config/ForwardContext.java b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/config/ForwardContext.java similarity index 97% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/config/ForwardContext.java rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/config/ForwardContext.java index d68109bcf2..be3780a313 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/config/ForwardContext.java +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/config/ForwardContext.java @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.config; +package xyz.nextalone.nnngram.config; import org.telegram.messenger.MessageObject; diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/helpers/ConnectionsHelper.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/helpers/ConnectionsHelper.kt similarity index 98% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/helpers/ConnectionsHelper.kt rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/helpers/ConnectionsHelper.kt index d84b01dc52..4da87218af 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/helpers/ConnectionsHelper.kt +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/helpers/ConnectionsHelper.kt @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.helpers +package xyz.nextalone.nnngram.helpers import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/helpers/EntitiesHelper.java b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/helpers/EntitiesHelper.java similarity index 61% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/helpers/EntitiesHelper.java rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/helpers/EntitiesHelper.java index d1618efa8b..ced8bd7ea4 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/helpers/EntitiesHelper.java +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/helpers/EntitiesHelper.java @@ -17,24 +17,23 @@ * */ -package top.qwq2333.nullgram.helpers; +package xyz.nextalone.nnngram.helpers; import android.text.Spannable; import android.text.SpannableStringBuilder; import android.text.Spanned; import android.text.TextUtils; -import org.telegram.messenger.CodeHighlighting; import org.telegram.messenger.LinkifyPort; import org.telegram.messenger.MediaDataController; +import org.telegram.tgnet.TLRPC; import org.telegram.ui.Components.TextStyleSpan; import org.telegram.ui.Components.URLSpanReplacement; import java.util.ArrayList; import java.util.regex.Pattern; -import top.qwq2333.gen.Config; - +import xyz.nextalone.gen.Config; public class EntitiesHelper { private static final Pattern[] PATTERNS = new Pattern[]{ @@ -79,47 +78,39 @@ public static void parseMarkdown(CharSequence[] message, boolean allowStrike) { continue find; } } - var codeHighlightingSpans = spannable.getSpans(start, end, CodeHighlighting.Span.class); - for (var codeHighlightingSpan : codeHighlightingSpans) { - int spanStart = spannable.getSpanStart(codeHighlightingSpan); - int spanEnd = spannable.getSpanEnd(codeHighlightingSpan); - if (spanStart < start + length || spanEnd > end - length) { - continue find; - } - } var destination = new SpannableStringBuilder(spannable.subSequence(m.start(i == 0 ? 2 : 1), m.end(i == 0 ? 2 : 1))); - if (destination.length() > 0) { - if (i == 0) { - if (destination.charAt(destination.length() - 1) == '\n') { - destination = (SpannableStringBuilder) destination.subSequence(0, destination.length() - 1); - } - destination.setSpan(new CodeHighlighting.Span(true, 0, null, m.group(1), destination.toString()), 0, destination.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); - } else if (i < 8) { - var run = new TextStyleSpan.TextStyleRun(); - switch (i) { - case 1: - case 2: - case 3: - run.flags |= TextStyleSpan.FLAG_STYLE_MONO; - break; - case 4: - run.flags |= TextStyleSpan.FLAG_STYLE_BOLD; - break; - case 5: - run.flags |= TextStyleSpan.FLAG_STYLE_ITALIC; - break; - case 6: - run.flags |= TextStyleSpan.FLAG_STYLE_STRIKE; - break; - case 7: - run.flags |= TextStyleSpan.FLAG_STYLE_SPOILER; - break; - } - MediaDataController.addStyleToText(new TextStyleSpan(run), 0, destination.length(), destination, true); - } else { - destination.setSpan(new URLSpanReplacement(m.group(2)), 0, destination.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + if (i < 8) { + var run = new TextStyleSpan.TextStyleRun(); + switch (i) { + case 0: + case 1: + case 2: + case 3: + run.flags |= TextStyleSpan.FLAG_STYLE_MONO; + if (i != 3) { + run.start = start; + run.end = end; + run.urlEntity = new TLRPC.TL_messageEntityPre(); + run.urlEntity.language = i == 0 ? m.group(1) : ""; + } + break; + case 4: + run.flags |= TextStyleSpan.FLAG_STYLE_BOLD; + break; + case 5: + run.flags |= TextStyleSpan.FLAG_STYLE_ITALIC; + break; + case 6: + run.flags |= TextStyleSpan.FLAG_STYLE_STRIKE; + break; + case 7: + run.flags |= TextStyleSpan.FLAG_STYLE_SPOILER; + break; } + MediaDataController.addStyleToText(new TextStyleSpan(run), 0, destination.length(), destination, true); + } else { + destination.setSpan(new URLSpanReplacement(m.group(2)), 0, destination.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } sources.add(m.group(0)); destinations.add(destination); diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/helpers/FolderIconHelper.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/helpers/FolderIconHelper.kt similarity index 98% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/helpers/FolderIconHelper.kt rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/helpers/FolderIconHelper.kt index 70cabba118..096de9b006 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/helpers/FolderIconHelper.kt +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/helpers/FolderIconHelper.kt @@ -17,15 +17,15 @@ * */ -package top.qwq2333.nullgram.helpers +package xyz.nextalone.nnngram.helpers import androidx.core.util.Pair import org.telegram.messenger.AndroidUtilities import org.telegram.messenger.LocaleController import org.telegram.messenger.MessagesController import org.telegram.messenger.R -import top.qwq2333.nullgram.config.ConfigManager -import top.qwq2333.nullgram.utils.Defines +import xyz.nextalone.nnngram.config.ConfigManager +import xyz.nextalone.nnngram.utils.Defines object FolderIconHelper { val folderIcons = linkedMapOf() diff --git a/TMessagesProj/src/main/java/xyz/nextalone/nnngram/helpers/HyperOsHelper.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/helpers/HyperOsHelper.kt new file mode 100644 index 0000000000..9b472e2482 --- /dev/null +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/helpers/HyperOsHelper.kt @@ -0,0 +1,109 @@ +package xyz.nextalone.nnngram.helpers + +import android.app.Activity +import android.content.ComponentName +import android.content.Context +import android.content.Intent +import android.content.pm.PackageManager +import android.graphics.Rect +import android.view.View +import android.widget.EditText +import org.telegram.messenger.AndroidUtilities +import xyz.nextalone.gen.Config +import xyz.nextalone.nnngram.utils.Log.e + +object HyperOsHelper { + private var IS_HYPEROS: Boolean = + AndroidUtilities.getSystemProperty("ro.mi.os.version.name") != null + private const val HYPEROS_NOTES_PKG: String = "com.miui.notes" + private const val HYPEROS_AI_SERVICE: String = "com.miui.notes.ai.AiTextWidgetService" + + + fun isHyperAiAvailable(context: Context): Boolean { + // Check if is HyperOS + if (!IS_HYPEROS || !Config.enableXiaomiHyperAi) { + return false + } + + val packageManager: PackageManager = context.packageManager ?: return false + + try { + // Retrieve package information for HyperOS Notes + val packageInfo = packageManager.getPackageInfo(HYPEROS_NOTES_PKG, 0) + + if (packageInfo.versionCode < 1100) { + return false + } + } catch (e: PackageManager.NameNotFoundException) { + // Package not found, exit gracefully + return false + } + return true + } + + @JvmOverloads + fun startHyperOsAiService(view: View, text: String = "") { + try { + val currentPackage: String = view.context.packageName + val serviceIntent = Intent() + + // Pass the package name + serviceIntent.putExtra("packageName", currentPackage) + + // Handle selection logic + var selectedText = "" + if (view is EditText) { + if (view.hasSelection()) { + val selectionStart: Int = view.selectionStart + val selectionEnd: Int = view.selectionEnd + if (selectionStart != selectionEnd) { + selectedText = + view.getText().subSequence(selectionStart, selectionEnd).toString() + } + } + } else { + selectedText = text + } + serviceIntent.putExtra("selectedText", selectedText) + + // Store original view bounds + serviceIntent.putExtra("originalViewLeft", view.left) + serviceIntent.putExtra("originalViewTop", view.top) + serviceIntent.putExtra("originalViewRight", view.right) + serviceIntent.putExtra("originalViewBottom", view.bottom) + serviceIntent.putExtra("originalViewName", javaClass.name) + serviceIntent.putExtra("isEditor", true) + + // Get the active screen location + val screenCoordinates = IntArray(2) + val focusedRect = Rect() + view.getLocationOnScreen(screenCoordinates) + view.getFocusedRect(focusedRect) + focusedRect.offset(screenCoordinates[0], screenCoordinates[1]) + + val currentActivity = view.context as Activity? + if (currentActivity != null) { + val windowFrame = Rect() + currentActivity.window.decorView.getWindowVisibleDisplayFrame(windowFrame) + + // Putting the visible window bounds into the Intent + serviceIntent.putExtra("left", windowFrame.left) + serviceIntent.putExtra("top", windowFrame.top) + serviceIntent.putExtra("right", windowFrame.right) + serviceIntent.putExtra("bottom", windowFrame.bottom) + serviceIntent.putExtra("taskId", currentActivity.taskId) + } + + // Prepare and start the service + serviceIntent.setComponent( + ComponentName( + HYPEROS_NOTES_PKG, + HYPEROS_AI_SERVICE + ) + ) + view.context.startForegroundService(serviceIntent) + } catch (e: Exception) { + e("Failed to start HyperOS AI service", e) + } + } +} diff --git a/TMessagesProj/src/main/java/xyz/nextalone/nnngram/helpers/MessageHelper.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/helpers/MessageHelper.kt new file mode 100644 index 0000000000..926ac8bca3 --- /dev/null +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/helpers/MessageHelper.kt @@ -0,0 +1,87 @@ +package xyz.nextalone.nnngram.helpers + +import androidx.recyclerview.widget.GridLayoutManagerFixed +import org.telegram.messenger.MessageObject +import org.telegram.ui.Cells.ChatActionCell +import org.telegram.ui.Cells.ChatMessageCell +import org.telegram.ui.ChatActivity +import org.telegram.ui.Components.RecyclerListView + +object MessageHelper { + + fun getFirstVisibleMessage( + chatLayoutManager: GridLayoutManagerFixed, + chatListView: RecyclerListView, + chatAdapter: ChatActivity.ChatActivityAdapter, + messages: MutableList + ): Int { + var messageId = + 0 + val position: Int = + chatLayoutManager.findFirstVisibleItemPosition() + if (position != 0) { + var holder = + chatListView.findViewHolderForAdapterPosition( + position + ) + if (holder != null) { + var mid = + 0 + if (holder.itemView is ChatMessageCell) { + mid = + (holder.itemView as ChatMessageCell).messageObject.id + } else if (holder.itemView is ChatActionCell) { + mid = + (holder.itemView as ChatActionCell).messageObject.id + } + if (mid == 0) { + holder = + chatListView.findViewHolderForAdapterPosition( + position + 1 + ) + } + var ignore = + false + var count = + 0 + for (a in position - 1 downTo chatAdapter.messagesStartRow) { + val num: Int = + a - chatAdapter.messagesStartRow + if (num < 0 || num >= messages.size) { + continue + } + val messageObject: MessageObject = + messages.get( + num + ) + if (messageObject.id == 0) { + continue + } + if ((!messageObject.isOut || messageObject.messageOwner.from_scheduled) && messageObject.isUnread) { + ignore = + true + messageId = + 0 + } + if (count > 2) { + break + } + count++ + } + if (holder != null && !ignore) { + if (holder.itemView is ChatMessageCell) { + messageId = + (holder.itemView as ChatMessageCell).messageObject.id + } else if (holder.itemView is ChatActionCell) { + messageId = + (holder.itemView as ChatActionCell).messageObject.id + } else { + messageId = + 0 + } + } + } + } + return messageId + } +} diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/helpers/MonetHelper.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/helpers/MonetHelper.kt similarity index 98% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/helpers/MonetHelper.kt rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/helpers/MonetHelper.kt index d4c492196d..3a1d91b49f 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/helpers/MonetHelper.kt +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/helpers/MonetHelper.kt @@ -16,7 +16,7 @@ * If not, see * */ -package top.qwq2333.nullgram.helpers +package xyz.nextalone.nnngram.helpers import android.R import android.content.BroadcastReceiver @@ -28,7 +28,7 @@ import android.os.PatternMatcher import androidx.annotation.RequiresApi import org.telegram.messenger.ApplicationLoader import org.telegram.ui.ActionBar.Theme -import top.qwq2333.nullgram.utils.Log +import xyz.nextalone.nnngram.utils.Log @RequiresApi(api = Build.VERSION_CODES.S) object MonetHelper { diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/helpers/PasscodeHelper.java b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/helpers/PasscodeHelper.java similarity index 97% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/helpers/PasscodeHelper.java rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/helpers/PasscodeHelper.java index a72dbf5cbe..9a5e98625f 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/helpers/PasscodeHelper.java +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/helpers/PasscodeHelper.java @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.helpers; +package xyz.nextalone.nnngram.helpers; import android.app.Activity; import android.content.SharedPreferences; @@ -31,8 +31,8 @@ import java.util.Objects; -import top.qwq2333.nullgram.utils.Log; -import top.qwq2333.nullgram.utils.Utils; +import xyz.nextalone.nnngram.utils.Log; +import xyz.nextalone.nnngram.utils.Utils; public class PasscodeHelper { private static final SharedPreferences preferences = diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/helpers/QrHelper.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/helpers/QrHelper.kt similarity index 99% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/helpers/QrHelper.kt rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/helpers/QrHelper.kt index dc98928f9c..224ca2ea7d 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/helpers/QrHelper.kt +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/helpers/QrHelper.kt @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.helpers +package xyz.nextalone.nnngram.helpers import android.content.DialogInterface import android.content.Intent @@ -59,7 +59,7 @@ import org.telegram.ui.Components.Bulletin import org.telegram.ui.Components.BulletinFactory import org.telegram.ui.Components.LayoutHelper import org.telegram.ui.Components.LinkSpanDrawable.LinksTextView -import top.qwq2333.nullgram.utils.Log +import xyz.nextalone.nnngram.utils.Log object QrHelper { @JvmStatic diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/helpers/SettingsHelper.java b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/helpers/SettingsHelper.java similarity index 83% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/helpers/SettingsHelper.java rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/helpers/SettingsHelper.java index 781c070649..b563f39580 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/helpers/SettingsHelper.java +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/helpers/SettingsHelper.java @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.helpers; +package xyz.nextalone.nnngram.helpers; import android.net.Uri; import android.text.TextUtils; @@ -25,12 +25,12 @@ import org.telegram.messenger.AndroidUtilities; import org.telegram.ui.ActionBar.BaseFragment; -import top.qwq2333.nullgram.activity.BaseActivity; -import top.qwq2333.nullgram.activity.ChatSettingActivity; -import top.qwq2333.nullgram.activity.ExperimentSettingActivity; -import top.qwq2333.nullgram.activity.GeneralSettingActivity; -import top.qwq2333.nullgram.activity.MainSettingActivity; -import top.qwq2333.nullgram.activity.PasscodeSettingActivity; +import xyz.nextalone.nnngram.activity.BaseActivity; +import xyz.nextalone.nnngram.activity.ChatSettingActivity; +import xyz.nextalone.nnngram.activity.ExperimentSettingActivity; +import xyz.nextalone.nnngram.activity.GeneralSettingActivity; +import xyz.nextalone.nnngram.activity.MainSettingActivity; +import xyz.nextalone.nnngram.activity.PasscodeSettingActivity; public class SettingsHelper { @@ -40,7 +40,7 @@ public static void processDeepLink(Uri uri, Callback callback, Runnable unknown) return; } var segments = uri.getPathSegments(); - if (segments.isEmpty() || segments.size() > 2 || !"nullsetting".equals(segments.get(0))) { + if (segments.isEmpty() || segments.size() > 2 || !"nnnsettings".equals(segments.get(0))) { unknown.run(); return; } diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/helpers/StickerHelper.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/helpers/StickerHelper.kt similarity index 98% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/helpers/StickerHelper.kt rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/helpers/StickerHelper.kt index 80fa58a6d0..697571b194 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/helpers/StickerHelper.kt +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/helpers/StickerHelper.kt @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.helpers +package xyz.nextalone.nnngram.helpers import android.content.Context import android.content.Intent @@ -38,7 +38,7 @@ import org.telegram.messenger.UserConfig import org.telegram.tgnet.TLRPC import org.telegram.tgnet.TLRPC.InputStickerSet import org.telegram.ui.ActionBar.AlertDialog -import top.qwq2333.nullgram.utils.Log +import xyz.nextalone.nnngram.utils.Log import java.io.File import java.io.FileOutputStream import java.text.SimpleDateFormat diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/helpers/TranslateHelper.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/helpers/TranslateHelper.kt similarity index 93% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/helpers/TranslateHelper.kt rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/helpers/TranslateHelper.kt index a597703b6c..1a2880fc77 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/helpers/TranslateHelper.kt +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/helpers/TranslateHelper.kt @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.helpers +package xyz.nextalone.nnngram.helpers import android.annotation.SuppressLint import android.content.ActivityNotFoundException @@ -41,21 +41,22 @@ import org.telegram.ui.ActionBar.BaseFragment import org.telegram.ui.ActionBar.Theme.ResourcesProvider import org.telegram.ui.Components.BulletinFactory import org.telegram.ui.Components.TranslateAlert -import top.qwq2333.gen.Config -import top.qwq2333.nullgram.activity.LanguageSelectActivity -import top.qwq2333.nullgram.config.ConfigManager -import top.qwq2333.nullgram.translate.BaseTranslator -import top.qwq2333.nullgram.translate.providers.BaiduTranslator -import top.qwq2333.nullgram.translate.providers.DeepLTranslator -import top.qwq2333.nullgram.translate.providers.GoogleTranslator -import top.qwq2333.nullgram.translate.providers.LingoTranslator -import top.qwq2333.nullgram.translate.providers.MicrosoftTranslator -import top.qwq2333.nullgram.translate.providers.TelegramTranslator -import top.qwq2333.nullgram.translate.providers.TranSmartTranslator -import top.qwq2333.nullgram.translate.providers.YandexTranslator -import top.qwq2333.nullgram.ui.PopupBuilder -import top.qwq2333.nullgram.utils.Defines -import top.qwq2333.nullgram.utils.Log +import xyz.nextalone.gen.Config +import xyz.nextalone.nnngram.activity.LanguageSelectActivity +import xyz.nextalone.nnngram.config.ConfigManager +import xyz.nextalone.nnngram.translate.BaseTranslator +import xyz.nextalone.nnngram.translate.providers.BaiduTranslator +import xyz.nextalone.nnngram.translate.providers.DeepLTranslator +import xyz.nextalone.nnngram.translate.providers.DeepLxTranslator +import xyz.nextalone.nnngram.translate.providers.GoogleTranslator +import xyz.nextalone.nnngram.translate.providers.LingoTranslator +import xyz.nextalone.nnngram.translate.providers.MicrosoftTranslator +import xyz.nextalone.nnngram.translate.providers.TelegramTranslator +import xyz.nextalone.nnngram.translate.providers.TranSmartTranslator +import xyz.nextalone.nnngram.translate.providers.YandexTranslator +import xyz.nextalone.nnngram.ui.PopupBuilder +import xyz.nextalone.nnngram.utils.Defines +import xyz.nextalone.nnngram.utils.Log import java.util.Locale object TranslateHelper { @@ -101,6 +102,7 @@ object TranslateHelper { YandexTranslator(6), DeepLTranslator(7), TranSmartTranslator(8), + DeepLxTranslator(9), } @JvmStatic @@ -110,6 +112,7 @@ object TranslateHelper { ProviderType.TelegramTranslator.num -> ProviderType.TelegramTranslator ProviderType.MicrosoftTranslator.num -> ProviderType.MicrosoftTranslator ProviderType.DeepLTranslator.num -> ProviderType.DeepLTranslator + ProviderType.DeepLxTranslator.num -> ProviderType.DeepLxTranslator ProviderType.LingoTranslator.num -> ProviderType.LingoTranslator ProviderType.BaiduTranslator.num -> ProviderType.BaiduTranslator ProviderType.TranSmartTranslator.num -> ProviderType.TranSmartTranslator @@ -130,6 +133,7 @@ object TranslateHelper { ProviderType.LingoTranslator -> LingoTranslator ProviderType.BaiduTranslator -> BaiduTranslator ProviderType.TranSmartTranslator -> TranSmartTranslator + ProviderType.DeepLxTranslator -> DeepLxTranslator } @JvmStatic @@ -142,6 +146,7 @@ object TranslateHelper { ProviderType.LingoTranslator -> LingoTranslator ProviderType.BaiduTranslator -> BaiduTranslator ProviderType.TranSmartTranslator -> TranSmartTranslator + ProviderType.DeepLxTranslator -> DeepLxTranslator } @JvmStatic @@ -252,6 +257,8 @@ object TranslateHelper { types.add(ProviderType.BaiduTranslator) names.add(LocaleController.getString("ProviderTranSmartTranslate", R.string.ProviderTranSmartTranslate)) types.add(ProviderType.TranSmartTranslator) + names.add(LocaleController.getString("ProviderDeepLxTranslate", R.string.ProviderDeepLXTranslate)) + types.add(ProviderType.DeepLxTranslator) return Pair(names, types) } diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/helpers/WebSocketHelper.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/helpers/WebSocketHelper.kt similarity index 93% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/helpers/WebSocketHelper.kt rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/helpers/WebSocketHelper.kt index 9a2bb27082..befbec5e9a 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/helpers/WebSocketHelper.kt +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/helpers/WebSocketHelper.kt @@ -16,17 +16,17 @@ * If not, see * */ -package top.qwq2333.nullgram.helpers +package xyz.nextalone.nnngram.helpers import androidx.core.util.Pair import org.tcp2ws.tcp2wsServer import org.telegram.messenger.BuildConfig import org.telegram.messenger.LocaleController import org.telegram.messenger.R -import top.qwq2333.gen.Config -import top.qwq2333.nullgram.config.ConfigManager -import top.qwq2333.nullgram.utils.Defines -import top.qwq2333.nullgram.utils.Log +import xyz.nextalone.gen.Config +import xyz.nextalone.nnngram.config.ConfigManager +import xyz.nextalone.nnngram.utils.Defines +import xyz.nextalone.nnngram.utils.Log import java.net.ServerSocket object WebSocketHelper { @@ -36,7 +36,7 @@ object WebSocketHelper { private var tcp2wsStarted = false private var tcp2wsServer: tcp2wsServer? = null - private val userAgent = "Nullgram ${BuildConfig.VERSION_NAME} (${BuildConfig.VERSION_CODE})" + private val userAgent = "Nnngram ${BuildConfig.VERSION_NAME} (${BuildConfig.VERSION_CODE})" private val connHash = "381d52f35f552e10ad1701445dba9cd14acb7e43" enum class WsProvider(val num: Int, var host: String) { diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/remote/BaseController.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/remote/BaseController.kt similarity index 97% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/remote/BaseController.kt rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/remote/BaseController.kt index ad30027c9b..660b4f71f7 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/remote/BaseController.kt +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/remote/BaseController.kt @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.remote +package xyz.nextalone.nnngram.remote import io.ktor.client.HttpClient import io.ktor.client.engine.okhttp.OkHttp diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/remote/NicegramController.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/remote/NicegramController.kt similarity index 98% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/remote/NicegramController.kt rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/remote/NicegramController.kt index 4a4817df4e..e14114fc2d 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/remote/NicegramController.kt +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/remote/NicegramController.kt @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.remote +package xyz.nextalone.nnngram.remote import androidx.collection.LruCache import io.ktor.client.call.body @@ -40,7 +40,7 @@ import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor import kotlinx.serialization.descriptors.SerialDescriptor import kotlinx.serialization.encoding.Decoder import kotlinx.serialization.encoding.Encoder -import top.qwq2333.nullgram.utils.Log +import xyz.nextalone.nnngram.utils.Log object NicegramController : BaseController() { override val baseUrl = "https://restore-access.indream.app" diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/translate/BaseTranslator.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/translate/BaseTranslator.kt similarity index 98% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/translate/BaseTranslator.kt rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/translate/BaseTranslator.kt index 43350a3695..2235cbd198 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/translate/BaseTranslator.kt +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/translate/BaseTranslator.kt @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.translate +package xyz.nextalone.nnngram.translate import android.text.TextUtils import android.util.Pair @@ -35,8 +35,8 @@ import kotlinx.serialization.json.Json import org.telegram.messenger.LocaleController import org.telegram.messenger.R import org.telegram.tgnet.TLRPC -import top.qwq2333.nullgram.helpers.TranslateHelper -import top.qwq2333.nullgram.utils.Log +import xyz.nextalone.nnngram.helpers.TranslateHelper +import xyz.nextalone.nnngram.utils.Log abstract class BaseTranslator { /** diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/translate/LanguageDetectorTimeout.java b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/translate/LanguageDetectorTimeout.java similarity index 98% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/translate/LanguageDetectorTimeout.java rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/translate/LanguageDetectorTimeout.java index 8929911cb8..47ea593bda 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/translate/LanguageDetectorTimeout.java +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/translate/LanguageDetectorTimeout.java @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.translate; +package xyz.nextalone.nnngram.translate; import android.view.View; diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/translate/providers/BaiduTranslator.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/translate/providers/BaiduTranslator.kt similarity index 97% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/translate/providers/BaiduTranslator.kt rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/translate/providers/BaiduTranslator.kt index fa3eb8ca7e..872636385b 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/translate/providers/BaiduTranslator.kt +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/translate/providers/BaiduTranslator.kt @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.translate.providers +package xyz.nextalone.nnngram.translate.providers import android.text.TextUtils import io.ktor.client.request.post @@ -28,8 +28,8 @@ import io.ktor.http.contentType import io.ktor.http.userAgent import org.json.JSONObject import org.telegram.messenger.Utilities -import top.qwq2333.nullgram.encodeUrl -import top.qwq2333.nullgram.translate.BaseTranslator +import xyz.nextalone.nnngram.encodeUrl +import xyz.nextalone.nnngram.translate.BaseTranslator import java.util.Locale import java.util.UUID diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/translate/providers/DeepLTranslator.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/translate/providers/DeepLTranslator.kt similarity index 96% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/translate/providers/DeepLTranslator.kt rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/translate/providers/DeepLTranslator.kt index 7a39b37d27..eb44d59715 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/translate/providers/DeepLTranslator.kt +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/translate/providers/DeepLTranslator.kt @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.translate.providers +package xyz.nextalone.nnngram.translate.providers import android.text.TextUtils import io.ktor.client.request.header @@ -29,10 +29,10 @@ import io.ktor.http.HttpStatusCode import io.ktor.http.contentType import org.json.JSONArray import org.json.JSONObject -import top.qwq2333.nullgram.config.ConfigManager -import top.qwq2333.nullgram.translate.BaseTranslator -import top.qwq2333.nullgram.utils.Defines -import top.qwq2333.nullgram.utils.Log +import xyz.nextalone.nnngram.config.ConfigManager +import xyz.nextalone.nnngram.translate.BaseTranslator +import xyz.nextalone.nnngram.utils.Defines +import xyz.nextalone.nnngram.utils.Log import java.io.IOException import java.util.Locale import java.util.UUID diff --git a/TMessagesProj/src/main/java/xyz/nextalone/nnngram/translate/providers/DeepLxranslator.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/translate/providers/DeepLxranslator.kt new file mode 100644 index 0000000000..890b85d19d --- /dev/null +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/translate/providers/DeepLxranslator.kt @@ -0,0 +1,147 @@ +/* + * Copyright (C) 2019-2023 qwq233 + * https://github.com/qwq233/Nullgram + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this software. + * If not, see + * + */ + +package xyz.nextalone.nnngram.translate.providers + +import android.text.TextUtils +import io.ktor.client.request.post +import io.ktor.client.request.setBody +import io.ktor.client.statement.bodyAsText +import io.ktor.http.ContentType +import io.ktor.http.HttpStatusCode +import io.ktor.http.contentType +import org.json.JSONObject +import xyz.nextalone.gen.Config +import xyz.nextalone.nnngram.config.ConfigManager +import xyz.nextalone.nnngram.translate.BaseTranslator +import xyz.nextalone.nnngram.utils.Defines +import xyz.nextalone.nnngram.utils.Log +import java.io.IOException +import java.util.Locale +import java.util.UUID +import java.util.regex.Matcher +import java.util.regex.Pattern + +/** + * @author NextAlone + * @date 2024/11/04 01:14 + * + */ +object DeepLxTranslator : BaseTranslator() { + + private val targetLanguages = listOf( + "bg", "cs", "da", "de", "el", "en-GB", "en-US", "en", "es", "et", + "fi", "fr", "hu", "id", "it", "ja", "lt", "lv", "nl", "pl", "pt-BR", + "pt-PT", "pt", "ro", "ru", "sk", "sl", "sv", "tr", "uk", "zh" + ) + + override fun getTargetLanguages(): List = targetLanguages + + override fun convertLanguageCode(language: String, country: String?): String { + val languageLowerCase: String = language.lowercase(Locale.getDefault()) + val code: String = if (!TextUtils.isEmpty(country)) { + val countryUpperCase: String = country!!.uppercase(Locale.getDefault()) + if (targetLanguages.contains("$languageLowerCase-$countryUpperCase")) { + "$languageLowerCase-$countryUpperCase" + } else { + languageLowerCase + } + } else { + languageLowerCase + } + return code + } + + override suspend fun translateText(text: String, from: String, to: String): RequestResult { + Log.d("text: $text") + Log.d("from: $from") + Log.d("to: $to") + if (from == to) { + return RequestResult(from, text) + } + if (Config.deepLxApi.isEmpty()) { + throw IOException("DeepLx API or token is empty") + } + + client.post(Config.deepLxApi) { + contentType(ContentType.Application.Json) +// header("Referer", "https://www.deepl.com/") +// header("User-Agent", "DeepL/1.8(52) Android 13 (Pixel 5;aarch64)") +// header("Client-Id", uuid) +// header("x-instance", uuid) +// header("x-app-os-name", "Android") +// header("x-app-os-version", "13") +// header("x-app-version", "1.8") +// header("x-app-build", "52") +// header("x-app-device", "Pixel 5") +// header("x-app-instance-id", uuid) + setBody(getRequestBody(text, from, to)) + }.let { + when (it.status) { + HttpStatusCode.OK -> { + val jsonObject = JSONObject(it.bodyAsText()) + if (jsonObject.has("error")) { + throw IOException(jsonObject.getString("message")) + } + return RequestResult( + jsonObject.getString("source_lang"), + jsonObject.getString("data") + ) + } + + else -> { + Log.w(it.bodyAsText()) + return RequestResult(from, null, it.status) + } + } + } + } + + const val FORMALITY_DEFAULT = 0 + const val FORMALITY_MORE = 1 + const val FORMALITY_LESS = 2 + + + private fun getRequestBody(text: String, from: String, to: String): String { + var iCounter = 1 + val iMatcher: Matcher = Pattern.compile("[i]").matcher(text) + while (iMatcher.find()) { + iCounter++ + } + val params = JSONObject().apply { + put("text", text) + put("split_sentences", 1) + put("source_lang", from) + put("target_lang", to) + put("preserve_formatting", true) + put("formality", getFormalityString()) + } + + return params.toString() + } + + private fun getFormalityString(): String? { + return when (ConfigManager.getIntOrDefault(Defines.deepLFormality, -1)) { + FORMALITY_DEFAULT -> "default" + FORMALITY_MORE -> "more" + FORMALITY_LESS -> "less" + else -> "default" + } + } +} diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/translate/providers/GoogleTranslator.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/translate/providers/GoogleTranslator.kt similarity index 96% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/translate/providers/GoogleTranslator.kt rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/translate/providers/GoogleTranslator.kt index 1a26b3ef25..7e09faa233 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/translate/providers/GoogleTranslator.kt +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/translate/providers/GoogleTranslator.kt @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.translate.providers +package xyz.nextalone.nnngram.translate.providers import android.text.TextUtils import io.ktor.client.request.get @@ -25,9 +25,9 @@ import io.ktor.client.statement.bodyAsText import io.ktor.http.HttpStatusCode import io.ktor.http.userAgent import org.json.JSONObject -import top.qwq2333.nullgram.encodeUrl -import top.qwq2333.nullgram.translate.BaseTranslator -import top.qwq2333.nullgram.utils.Log +import xyz.nextalone.nnngram.encodeUrl +import xyz.nextalone.nnngram.translate.BaseTranslator +import xyz.nextalone.nnngram.utils.Log import java.util.Locale object GoogleTranslator : BaseTranslator() { diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/translate/providers/LingoTranslator.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/translate/providers/LingoTranslator.kt similarity index 94% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/translate/providers/LingoTranslator.kt rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/translate/providers/LingoTranslator.kt index 263b3b3e26..c50a7fc21b 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/translate/providers/LingoTranslator.kt +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/translate/providers/LingoTranslator.kt @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.translate.providers +package xyz.nextalone.nnngram.translate.providers import io.ktor.client.call.body import io.ktor.client.request.header @@ -28,8 +28,8 @@ import io.ktor.http.ContentType import io.ktor.http.HttpStatusCode import io.ktor.http.contentType import kotlinx.serialization.Serializable -import top.qwq2333.nullgram.translate.BaseTranslator -import top.qwq2333.nullgram.utils.Log +import xyz.nextalone.nnngram.translate.BaseTranslator +import xyz.nextalone.nnngram.utils.Log object LingoTranslator : BaseTranslator() { diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/translate/providers/MicrosoftTranslator.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/translate/providers/MicrosoftTranslator.kt similarity index 97% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/translate/providers/MicrosoftTranslator.kt rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/translate/providers/MicrosoftTranslator.kt index 7ad13035fb..4cc6178a09 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/translate/providers/MicrosoftTranslator.kt +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/translate/providers/MicrosoftTranslator.kt @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.translate.providers +package xyz.nextalone.nnngram.translate.providers import android.text.TextUtils import android.util.Base64 @@ -32,9 +32,9 @@ import kotlinx.serialization.Serializable import kotlinx.serialization.encodeToString import kotlinx.serialization.json.Json import org.json.JSONArray -import top.qwq2333.nullgram.encodeUrl -import top.qwq2333.nullgram.translate.BaseTranslator -import top.qwq2333.nullgram.utils.Log +import xyz.nextalone.nnngram.encodeUrl +import xyz.nextalone.nnngram.translate.BaseTranslator +import xyz.nextalone.nnngram.utils.Log import java.io.IOException import java.text.SimpleDateFormat import java.util.Calendar diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/translate/providers/TelegramTranslator.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/translate/providers/TelegramTranslator.kt similarity index 96% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/translate/providers/TelegramTranslator.kt rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/translate/providers/TelegramTranslator.kt index 6031280a7d..26d56d9ecf 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/translate/providers/TelegramTranslator.kt +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/translate/providers/TelegramTranslator.kt @@ -17,16 +17,16 @@ * */ -package top.qwq2333.nullgram.translate.providers +package xyz.nextalone.nnngram.translate.providers import io.ktor.http.HttpStatusCode import org.telegram.messenger.UserConfig import org.telegram.tgnet.ConnectionsManager import org.telegram.tgnet.TLObject import org.telegram.tgnet.TLRPC -import top.qwq2333.nullgram.translate.BaseTranslator import java.util.concurrent.CountDownLatch import java.util.concurrent.atomic.AtomicReference +import xyz.nextalone.nnngram.translate.BaseTranslator object TelegramTranslator : BaseTranslator() { override suspend fun translateText(text: String, from: String, to: String): RequestResult { diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/translate/providers/TranSmartTranslator.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/translate/providers/TranSmartTranslator.kt similarity index 96% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/translate/providers/TranSmartTranslator.kt rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/translate/providers/TranSmartTranslator.kt index dc7ca1a617..e018c141ba 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/translate/providers/TranSmartTranslator.kt +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/translate/providers/TranSmartTranslator.kt @@ -19,7 +19,7 @@ @file:Suppress("PropertyName") -package top.qwq2333.nullgram.translate.providers +package xyz.nextalone.nnngram.translate.providers import io.ktor.client.call.body import io.ktor.client.request.post @@ -29,8 +29,8 @@ import io.ktor.http.ContentType import io.ktor.http.HttpStatusCode import io.ktor.http.contentType import kotlinx.serialization.Serializable -import top.qwq2333.nullgram.translate.BaseTranslator -import top.qwq2333.nullgram.utils.Log +import xyz.nextalone.nnngram.translate.BaseTranslator +import xyz.nextalone.nnngram.utils.Log import java.util.Date import java.util.UUID diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/translate/providers/YandexTranslator.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/translate/providers/YandexTranslator.kt similarity index 94% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/translate/providers/YandexTranslator.kt rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/translate/providers/YandexTranslator.kt index 8bc6cba8cc..4dfbddcb59 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/translate/providers/YandexTranslator.kt +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/translate/providers/YandexTranslator.kt @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.translate.providers +package xyz.nextalone.nnngram.translate.providers import io.ktor.client.request.header import io.ktor.client.request.post @@ -27,9 +27,9 @@ import io.ktor.http.ContentType import io.ktor.http.HttpStatusCode import io.ktor.http.contentType import org.json.JSONObject -import top.qwq2333.nullgram.encodeUrl -import top.qwq2333.nullgram.translate.BaseTranslator -import top.qwq2333.nullgram.utils.Log +import xyz.nextalone.nnngram.encodeUrl +import xyz.nextalone.nnngram.translate.BaseTranslator +import xyz.nextalone.nnngram.utils.Log import java.io.IOException import java.util.UUID diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/AppLinkVerifyBottomSheet.java b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/AppLinkVerifyBottomSheet.java similarity index 99% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/AppLinkVerifyBottomSheet.java rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/AppLinkVerifyBottomSheet.java index b7ae571b29..8c8f8945d2 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/AppLinkVerifyBottomSheet.java +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/AppLinkVerifyBottomSheet.java @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.ui; +package xyz.nextalone.nnngram.ui; import android.content.Context; import android.content.Intent; @@ -50,7 +50,7 @@ import java.util.Map; -import top.qwq2333.gen.Config; +import xyz.nextalone.gen.Config; @RequiresApi(api = Build.VERSION_CODES.S) public class AppLinkVerifyBottomSheet extends BottomSheet { diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/AutoTranslatePopupWrapper.java b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/AutoTranslatePopupWrapper.java similarity index 98% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/AutoTranslatePopupWrapper.java rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/AutoTranslatePopupWrapper.java index 4bd5856d77..11be699bb3 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/AutoTranslatePopupWrapper.java +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/AutoTranslatePopupWrapper.java @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.ui; +package xyz.nextalone.nnngram.ui; import android.content.Context; import android.util.TypedValue; @@ -38,7 +38,7 @@ import org.telegram.ui.Components.LayoutHelper; import org.telegram.ui.Components.PopupSwipeBackLayout; -import top.qwq2333.nullgram.config.DialogConfig; +import xyz.nextalone.nnngram.config.DialogConfig; public class AutoTranslatePopupWrapper { diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/BottomBuilder.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/BottomBuilder.kt similarity index 99% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/BottomBuilder.kt rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/BottomBuilder.kt index 69dfd9b2a3..0114bb1a33 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/BottomBuilder.kt +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/BottomBuilder.kt @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.ui +package xyz.nextalone.nnngram.ui import android.content.Context import android.text.TextUtils diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/DrawerProfilePreviewCell.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/DrawerProfilePreviewCell.kt similarity index 98% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/DrawerProfilePreviewCell.kt rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/DrawerProfilePreviewCell.kt index a76972248e..087532905e 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/DrawerProfilePreviewCell.kt +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/DrawerProfilePreviewCell.kt @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.ui +package xyz.nextalone.nnngram.ui import android.annotation.SuppressLint import android.content.Context diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/EditTextAutoFill.java b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/EditTextAutoFill.java similarity index 97% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/EditTextAutoFill.java rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/EditTextAutoFill.java index 64e0e7202c..e8652a910d 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/EditTextAutoFill.java +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/EditTextAutoFill.java @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.ui; +package xyz.nextalone.nnngram.ui; import android.annotation.TargetApi; import android.content.Context; diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/IconSelector.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/IconSelector.kt similarity index 97% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/IconSelector.kt rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/IconSelector.kt index 01b89c1a8e..2e55f8d094 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/IconSelector.kt +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/IconSelector.kt @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.ui +package xyz.nextalone.nnngram.ui import android.content.Context import android.graphics.PorterDuff @@ -33,7 +33,7 @@ import org.telegram.ui.ActionBar.Theme import org.telegram.ui.Components.ExtendedGridLayoutManager import org.telegram.ui.Components.RecyclerListView import org.telegram.ui.Components.RecyclerListView.SelectionAdapter -import top.qwq2333.nullgram.helpers.FolderIconHelper +import xyz.nextalone.nnngram.helpers.FolderIconHelper object IconSelector { @JvmStatic diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/PopupBuilder.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/PopupBuilder.kt similarity index 96% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/PopupBuilder.kt rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/PopupBuilder.kt index 91815fed0e..5d2a382b5b 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/PopupBuilder.kt +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/PopupBuilder.kt @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.ui +package xyz.nextalone.nnngram.ui import android.content.Context import android.view.View @@ -28,8 +28,8 @@ import org.telegram.messenger.R import org.telegram.ui.ActionBar.AlertDialog import org.telegram.ui.ActionBar.Theme import org.telegram.ui.Cells.RadioColorCell -import top.qwq2333.nullgram.ui.simplemenu.SimpleMenuPopupWindow -import top.qwq2333.nullgram.utils.Log +import xyz.nextalone.nnngram.ui.simplemenu.SimpleMenuPopupWindow +import xyz.nextalone.nnngram.utils.Log object PopupBuilder { private var mPopupWindow: SimpleMenuPopupWindow? = null diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/QrView.java b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/QrView.java similarity index 99% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/QrView.java rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/QrView.java index bbb88eb089..78e96378b1 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/QrView.java +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/QrView.java @@ -1,4 +1,4 @@ -package top.qwq2333.nullgram.ui; +package xyz.nextalone.nnngram.ui; import android.content.Context; import android.graphics.Bitmap; diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/SendOptionsMenuLayout.java b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/SendOptionsMenuLayout.java similarity index 99% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/SendOptionsMenuLayout.java rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/SendOptionsMenuLayout.java index 66e01ddccb..acdf1b53a2 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/SendOptionsMenuLayout.java +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/SendOptionsMenuLayout.java @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.ui; +package xyz.nextalone.nnngram.ui; import android.annotation.SuppressLint; import android.content.Context; @@ -42,7 +42,7 @@ import org.telegram.ui.Components.AlertsCreator; import org.telegram.ui.Components.LayoutHelper; -import top.qwq2333.nullgram.config.ForwardContext; +import xyz.nextalone.nnngram.config.ForwardContext; @SuppressLint({"ClickableViewAccessibility", "ViewConstructor"}) public class SendOptionsMenuLayout extends LinearLayout { diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/SimpleTextViewSwitcher.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/SimpleTextViewSwitcher.kt similarity index 98% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/SimpleTextViewSwitcher.kt rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/SimpleTextViewSwitcher.kt index 84d5227e07..4bf9b9a5d1 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/SimpleTextViewSwitcher.kt +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/SimpleTextViewSwitcher.kt @@ -16,7 +16,7 @@ * If not, see * */ -package top.qwq2333.nullgram.ui +package xyz.nextalone.nnngram.ui import android.content.Context import android.graphics.Paint diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/StickerSizePreviewMessagesCell.java b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/StickerSizePreviewMessagesCell.java similarity index 99% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/StickerSizePreviewMessagesCell.java rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/StickerSizePreviewMessagesCell.java index 84cbf61390..c28852a25d 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/StickerSizePreviewMessagesCell.java +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/StickerSizePreviewMessagesCell.java @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.ui; +package xyz.nextalone.nnngram.ui; import android.annotation.SuppressLint; @@ -107,7 +107,7 @@ public StickerSizePreviewMessagesCell(Context context, INavigationLayout layout, message.out = false; message.peer_id = new TLRPC.TL_peerUser(); message.peer_id.user_id = 1; - messageObjects[0].customReplyName = "FiveYellowMice"; + messageObjects[0].customReplyName = "NextAlone"; messageObjects[0].replyMessageObject = new MessageObject(UserConfig.selectedAccount, message, true, false); message = new TLRPC.TL_message(); diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/TextViewEffects.java b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/TextViewEffects.java similarity index 99% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/TextViewEffects.java rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/TextViewEffects.java index 07b234c23d..aae23c7ab2 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/TextViewEffects.java +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/TextViewEffects.java @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.ui; +package xyz.nextalone.nnngram.ui; import android.content.Context; import android.graphics.Canvas; diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/TranslatorSettingsPopupWrapper.java b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/TranslatorSettingsPopupWrapper.java similarity index 98% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/TranslatorSettingsPopupWrapper.java rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/TranslatorSettingsPopupWrapper.java index eaae4d966f..ba552c3a40 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/TranslatorSettingsPopupWrapper.java +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/TranslatorSettingsPopupWrapper.java @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.ui; +package xyz.nextalone.nnngram.ui; import android.view.View; import android.widget.FrameLayout; @@ -32,7 +32,7 @@ import org.telegram.ui.Components.PopupSwipeBackLayout; import kotlin.Unit; -import top.qwq2333.nullgram.helpers.TranslateHelper; +import xyz.nextalone.nnngram.helpers.TranslateHelper; public class TranslatorSettingsPopupWrapper { diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/simplemenu/CustomBoundsDrawable.java b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/simplemenu/CustomBoundsDrawable.java similarity index 97% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/simplemenu/CustomBoundsDrawable.java rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/simplemenu/CustomBoundsDrawable.java index 04c38f79b4..09e17cb513 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/simplemenu/CustomBoundsDrawable.java +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/simplemenu/CustomBoundsDrawable.java @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.ui.simplemenu; +package xyz.nextalone.nnngram.ui.simplemenu; import android.graphics.Rect; import android.graphics.drawable.Drawable; diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/simplemenu/DrawableWrapper.java b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/simplemenu/DrawableWrapper.java similarity index 99% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/simplemenu/DrawableWrapper.java rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/simplemenu/DrawableWrapper.java index 96721db75c..08e699ed95 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/simplemenu/DrawableWrapper.java +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/simplemenu/DrawableWrapper.java @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.ui.simplemenu; +package xyz.nextalone.nnngram.ui.simplemenu; import android.content.res.ColorStateList; import android.graphics.Canvas; diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/simplemenu/ForegroundCheckTextView.java b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/simplemenu/ForegroundCheckTextView.java similarity index 99% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/simplemenu/ForegroundCheckTextView.java rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/simplemenu/ForegroundCheckTextView.java index dd99f2d1d4..ea76c6382b 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/simplemenu/ForegroundCheckTextView.java +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/simplemenu/ForegroundCheckTextView.java @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.ui.simplemenu; +package xyz.nextalone.nnngram.ui.simplemenu; import android.annotation.TargetApi; import android.content.Context; diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/simplemenu/PropertyHolder.java b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/simplemenu/PropertyHolder.java similarity index 97% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/simplemenu/PropertyHolder.java rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/simplemenu/PropertyHolder.java index 904dea5ee5..95bb552278 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/simplemenu/PropertyHolder.java +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/simplemenu/PropertyHolder.java @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.ui.simplemenu; +package xyz.nextalone.nnngram.ui.simplemenu; import android.graphics.Rect; import android.os.Build; diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/simplemenu/RectEvaluator.java b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/simplemenu/RectEvaluator.java similarity index 97% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/simplemenu/RectEvaluator.java rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/simplemenu/RectEvaluator.java index d936ba78fc..a234368ce2 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/simplemenu/RectEvaluator.java +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/simplemenu/RectEvaluator.java @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.ui.simplemenu; +package xyz.nextalone.nnngram.ui.simplemenu; import android.animation.TypeEvaluator; import android.annotation.SuppressLint; diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/simplemenu/SimpleMenuAnimation.java b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/simplemenu/SimpleMenuAnimation.java similarity index 99% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/simplemenu/SimpleMenuAnimation.java rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/simplemenu/SimpleMenuAnimation.java index aa0e84b894..c4974894f5 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/simplemenu/SimpleMenuAnimation.java +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/simplemenu/SimpleMenuAnimation.java @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.ui.simplemenu; +package xyz.nextalone.nnngram.ui.simplemenu; import android.animation.Animator; import android.animation.AnimatorSet; diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/simplemenu/SimpleMenuBoundsProperty.java b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/simplemenu/SimpleMenuBoundsProperty.java similarity index 97% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/simplemenu/SimpleMenuBoundsProperty.java rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/simplemenu/SimpleMenuBoundsProperty.java index 3c91d922c5..4822721974 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/simplemenu/SimpleMenuBoundsProperty.java +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/simplemenu/SimpleMenuBoundsProperty.java @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.ui.simplemenu; +package xyz.nextalone.nnngram.ui.simplemenu; import android.graphics.Rect; import android.os.Build; diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/simplemenu/SimpleMenuItem.java b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/simplemenu/SimpleMenuItem.java similarity index 97% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/simplemenu/SimpleMenuItem.java rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/simplemenu/SimpleMenuItem.java index f0a5f55ab6..5b1de97e57 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/simplemenu/SimpleMenuItem.java +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/simplemenu/SimpleMenuItem.java @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.ui.simplemenu; +package xyz.nextalone.nnngram.ui.simplemenu; import android.content.Context; import android.graphics.Canvas; diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/simplemenu/SimpleMenuListAdapter.java b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/simplemenu/SimpleMenuListAdapter.java similarity index 91% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/simplemenu/SimpleMenuListAdapter.java rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/simplemenu/SimpleMenuListAdapter.java index c3b73b488e..98e16a3805 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/simplemenu/SimpleMenuListAdapter.java +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/simplemenu/SimpleMenuListAdapter.java @@ -17,10 +17,10 @@ * */ -package top.qwq2333.nullgram.ui.simplemenu; +package xyz.nextalone.nnngram.ui.simplemenu; -import static top.qwq2333.nullgram.ui.simplemenu.SimpleMenuPopupWindow.DIALOG; -import static top.qwq2333.nullgram.ui.simplemenu.SimpleMenuPopupWindow.HORIZONTAL; +import static xyz.nextalone.nnngram.ui.simplemenu.SimpleMenuPopupWindow.DIALOG; +import static xyz.nextalone.nnngram.ui.simplemenu.SimpleMenuPopupWindow.HORIZONTAL; import android.os.Build; import android.view.View; diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/simplemenu/SimpleMenuPopupWindow.java b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/simplemenu/SimpleMenuPopupWindow.java similarity index 99% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/simplemenu/SimpleMenuPopupWindow.java rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/simplemenu/SimpleMenuPopupWindow.java index e9b8ae86fb..9a503535d0 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/ui/simplemenu/SimpleMenuPopupWindow.java +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/simplemenu/SimpleMenuPopupWindow.java @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.ui.simplemenu; +package xyz.nextalone.nnngram.ui.simplemenu; import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT; diff --git a/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/sortList/ItemTouchHelperAdapter.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/sortList/ItemTouchHelperAdapter.kt new file mode 100644 index 0000000000..71831447b6 --- /dev/null +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/sortList/ItemTouchHelperAdapter.kt @@ -0,0 +1,5 @@ +package xyz.nextalone.nnngram.ui.sortList + +interface ItemTouchHelperAdapter { + fun onItemMoved(fromPosition: Int, toPosition: Int) +} diff --git a/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/sortList/ItemTouchHelperCallback.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/sortList/ItemTouchHelperCallback.kt new file mode 100644 index 0000000000..a04f423d15 --- /dev/null +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/sortList/ItemTouchHelperCallback.kt @@ -0,0 +1,32 @@ +package xyz.nextalone.nnngram.ui.sortList + +import androidx.recyclerview.widget.ItemTouchHelper +import androidx.recyclerview.widget.RecyclerView + +class ItemTouchHelperCallback(private val adapter: ItemTouchHelperAdapter) : + ItemTouchHelper.Callback() { + + override fun isLongPressDragEnabled(): Boolean { + return true + } + + override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) { + } + + override fun getMovementFlags( + recyclerView: RecyclerView, + viewHolder: RecyclerView.ViewHolder + ): Int { + val dragFlags = ItemTouchHelper.UP or ItemTouchHelper.DOWN + return makeMovementFlags(dragFlags, 0) + } + + override fun onMove( + recyclerView: RecyclerView, + source: RecyclerView.ViewHolder, + target: RecyclerView.ViewHolder + ): Boolean { + adapter.onItemMoved(source.adapterPosition, target.adapterPosition) + return true + } +} diff --git a/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/sortList/SortListAdapter.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/sortList/SortListAdapter.kt new file mode 100644 index 0000000000..64576f51e3 --- /dev/null +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/sortList/SortListAdapter.kt @@ -0,0 +1,76 @@ +package xyz.nextalone.nnngram.ui.sortList + +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +import org.telegram.ui.ActionBar.Theme +import org.telegram.ui.Cells.TextCheckCell +import xyz.nextalone.nnngram.config.ConfigManager +import xyz.nextalone.nnngram.config.ConfigManager.getBooleanOrFalse +import xyz.nextalone.nnngram.config.ConfigManager.toggleBoolean +import xyz.nextalone.nnngram.ui.sortList.items.TextStyleItems +import java.util.Collections + + +abstract class SortListAdapter( + private val itemDefines: Array, + private val itemNames: Array, + private val define: String +) : RecyclerView.Adapter(), ItemTouchHelperAdapter { + private var originToAdjusted: MutableList = (itemDefines.indices).toMutableList() + + init { + val savedOrder = ConfigManager.getStringOrDefault(define, "") + if (savedOrder?.isNotEmpty() == true) { + val savedOrderList = savedOrder.split(",").map { it.toInt() } + for (i in itemDefines.indices) { + originToAdjusted[i] = savedOrderList[i] + } + } + } + + + override fun onItemMoved(fromPosition: Int, toPosition: Int) { + if (fromPosition < toPosition) { + for (i in fromPosition until toPosition) { + Collections.swap(originToAdjusted, i, i + 1) + } + } else { + for (i in fromPosition downTo toPosition + 1) { + Collections.swap(originToAdjusted, i, i - 1) + } + } + ConfigManager.putString(define, originToAdjusted.joinToString(",")) + notifyItemMoved(fromPosition, toPosition) + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { + val textCheckCell = TextCheckCell(parent.context) + textCheckCell.background = Theme.getSelectorDrawable(false) + return object : RecyclerView.ViewHolder(textCheckCell) {} + } + + override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { + val textCheckCell = holder.itemView as TextCheckCell + + val itemIndex = originToAdjusted[position] + + textCheckCell.setTextAndCheck(itemNames[itemIndex], getBooleanOrFalse(itemDefines[itemIndex]), false) + textCheckCell.setOnClickListener { + toggleBoolean(itemDefines[itemIndex]) + textCheckCell.isChecked = getBooleanOrFalse(itemDefines[itemIndex]) + } + } + + override fun getItemCount(): Int = itemDefines.size + + fun reset() { + originToAdjusted = (itemDefines.indices).toMutableList() + ConfigManager.putString(define, originToAdjusted.joinToString(",")) + for (i in itemDefines.indices) { + ConfigManager.putBoolean(itemDefines[i], true) + } + notifyDataSetChanged() + } +} + +class TextStyleListAdapter : SortListAdapter(TextStyleItems.itemDefines, TextStyleItems.itemNames, TextStyleItems.define) diff --git a/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/sortList/items/SortListItems.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/sortList/items/SortListItems.kt new file mode 100644 index 0000000000..6dc546db6c --- /dev/null +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/sortList/items/SortListItems.kt @@ -0,0 +1,45 @@ +package xyz.nextalone.nnngram.ui.sortList.items + +import xyz.nextalone.nnngram.config.ConfigManager + +abstract class SortListItems { + abstract val itemDefines: Array + abstract val itemNames: Array + abstract val define: String + abstract val itemDefaultConfig: Boolean + + private fun getSavedOrder(): MutableList { + val originToAdjusted: MutableList = (TextStyleItems.itemDefines.indices).toMutableList() + val savedOrder = ConfigManager.getStringOrDefault(TextStyleItems.define, "") + if (savedOrder?.isNotEmpty() == true) { + val savedOrderList = savedOrder.split(",").map { it.toInt() } + for (i in 0 until TextStyleItems.itemDefines.size) { + originToAdjusted[i] = savedOrderList[i] + } + } + return originToAdjusted + } + + + private fun getEnabledIndices(): MutableList { + val enabledIndices = mutableListOf() + for (i in TextStyleItems.itemDefines.indices) { + if (ConfigManager.getBooleanOrDefault(TextStyleItems.itemDefines[i], itemDefaultConfig)) { + enabledIndices.add(i) + } + } + return enabledIndices + } + + fun getEnabledOrder(): MutableList { + val enabledIndices = getEnabledIndices() + val savedOrder = getSavedOrder() + val enabledOrder = mutableListOf() + for (i in savedOrder) { + if (enabledIndices.contains(i)) { + enabledOrder.add(i) + } + } + return enabledOrder + } +} diff --git a/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/sortList/items/TextStyleItems.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/sortList/items/TextStyleItems.kt new file mode 100644 index 0000000000..91ecbfd241 --- /dev/null +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/ui/sortList/items/TextStyleItems.kt @@ -0,0 +1,41 @@ +package xyz.nextalone.nnngram.ui.sortList.items + +import org.telegram.messenger.LocaleController +import org.telegram.messenger.R +import xyz.nextalone.nnngram.utils.Defines + +object TextStyleItems : SortListItems() { + override val itemDefines = arrayOf( + Defines.showTextQuote, + Defines.showTextSpoiler, + Defines.showTextBold, + Defines.showTextItalic, + Defines.showTextMonoCode, + Defines.showTextMono, + Defines.showTextStrike, + Defines.showTextUnderline, + Defines.showTextCreateMention, + Defines.showTextCreateLink, + Defines.showTextRegular, + ) + override var itemNames = arrayOf( + LocaleController.getString("Quote", R.string.Quote), + LocaleController.getString("Spoiler", R.string.Spoiler), + LocaleController.getString("Bold", R.string.Bold), + LocaleController.getString("Italic", R.string.Italic), + LocaleController.getString("MonoCode", R.string.MonoCode), + LocaleController.getString("Mono", R.string.Mono), + LocaleController.getString("Strike", R.string.Strike), + LocaleController.getString("Underline", R.string.Underline), + LocaleController.getString("CreateMention", R.string.CreateMention), + LocaleController.getString("CreateLink", R.string.CreateLink), + LocaleController.getString("Regular", R.string.Regular), + ) + + val itemIds = arrayOf( + R.id.menu_quote, R.id.menu_spoiler, R.id.menu_bold, R.id.menu_italic, R.id.menu_code, R.id.menu_mono, R.id.menu_strike, R.id.menu_underline, R.id.menu_mention, R.id.menu_link, R.id.menu_regular, + ) + + override var define = Defines.textStyleSettings + override val itemDefaultConfig: Boolean = true +} diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/APKUtils.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/APKUtils.kt similarity index 99% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/APKUtils.kt rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/APKUtils.kt index 3c0686157a..83d1207cd8 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/APKUtils.kt +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/APKUtils.kt @@ -16,7 +16,7 @@ * If not, see * */ -package top.qwq2333.nullgram.utils +package xyz.nextalone.nnngram.utils import android.Manifest import android.annotation.SuppressLint @@ -57,7 +57,7 @@ import org.telegram.ui.Components.BulletinFactory import org.telegram.ui.Components.LayoutHelper import org.telegram.ui.Components.RLottieImageView import org.telegram.ui.LaunchActivity -import top.qwq2333.nullgram.addView +import xyz.nextalone.nnngram.addView import java.io.File import java.io.FileInputStream import java.io.IOException diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/AlertUtil.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/AlertUtil.kt similarity index 97% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/AlertUtil.kt rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/AlertUtil.kt index 5a24979ef3..2434c8001f 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/AlertUtil.kt +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/AlertUtil.kt @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.utils +package xyz.nextalone.nnngram.utils import android.content.Context import android.widget.Toast @@ -26,7 +26,7 @@ import org.telegram.messenger.LocaleController import org.telegram.messenger.R import org.telegram.tgnet.TLRPC import org.telegram.ui.ActionBar.AlertDialog -import top.qwq2333.nullgram.ui.BottomBuilder +import xyz.nextalone.nnngram.ui.BottomBuilder object AlertUtil { diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/AnalyticsUtils.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/AnalyticsUtils.kt similarity index 98% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/AnalyticsUtils.kt rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/AnalyticsUtils.kt index 4af961120b..5cc0b18f8d 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/AnalyticsUtils.kt +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/AnalyticsUtils.kt @@ -16,7 +16,7 @@ * If not, see * */ -package top.qwq2333.nullgram.utils +package xyz.nextalone.nnngram.utils import android.app.Application import android.util.Base64 diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/AudioUtils.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/AudioUtils.kt similarity index 97% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/AudioUtils.kt rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/AudioUtils.kt index 96621ed318..361f8e8208 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/AudioUtils.kt +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/AudioUtils.kt @@ -17,13 +17,14 @@ * */ -package top.qwq2333.nullgram.utils +package xyz.nextalone.nnngram.utils import android.media.AudioRecord import android.media.audiofx.AcousticEchoCanceler import android.media.audiofx.AutomaticGainControl import android.media.audiofx.NoiseSuppressor -import top.qwq2333.gen.Config + +import xyz.nextalone.gen.Config object AudioUtils { private var automaticGainControl: AutomaticGainControl? = null diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/DatabaseUtils.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/DatabaseUtils.kt similarity index 99% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/DatabaseUtils.kt rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/DatabaseUtils.kt index 9caa0206f0..58fc84b58e 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/DatabaseUtils.kt +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/DatabaseUtils.kt @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.utils +package xyz.nextalone.nnngram.utils import org.telegram.tgnet.TLObject diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/Defines.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/Defines.kt similarity index 72% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/Defines.kt rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/Defines.kt index 520a15113d..95c77bc641 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/Defines.kt +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/Defines.kt @@ -16,12 +16,12 @@ * If not, see * */ -package top.qwq2333.nullgram.utils +package xyz.nextalone.nnngram.utils import org.telegram.messenger.BuildVars -import top.qwq2333.nullgram.BooleanConfig -import top.qwq2333.nullgram.IntConfig -import top.qwq2333.nullgram.StringConfig +import xyz.nextalone.nnngram.BooleanConfig +import xyz.nextalone.nnngram.IntConfig +import xyz.nextalone.nnngram.StringConfig /** * ConfigManager用到的Key都塞这 统一管理比较方便些 @@ -130,8 +130,11 @@ object Defines { @BooleanConfig const val showSaveMessages = "showSaveMessages" @BooleanConfig(true) const val showViewHistory = "showViewHistory" @BooleanConfig(true) const val showRepeat = "showRepeat" + @BooleanConfig const val showRepeatAsCopy = "showRepeatAsCopy" + @BooleanConfig const val showReverse = "showReverse" @BooleanConfig const val showCopyPhoto = "showCopyPhoto" @BooleanConfig(true) const val showReport = "showReport" + @BooleanConfig(true) const val showReactions = "showReactions" // custom double tap @IntConfig(doubleTabReaction) @@ -141,15 +144,17 @@ object Defines { const val doubleTabReply = 2 const val doubleTabSaveMessages = 3 const val doubleTabRepeat = 4 - const val doubleTabEdit = 5 - const val doubleTabTranslate = 6 + const val doubleTabRepeatAsCopy = 5 + const val doubleTabEdit = 6 + const val doubleTabTranslate = 7 + const val doubleTabReverse = 8 // Auto Update const val lastCheckUpdateTime = "lastCheckUpdateTime" const val updateChannel = "updateChannel" const val stableChannel = 1 const val disableAutoUpdate = 0 - const val ciChannel = 2 +// const val ciChannel = 2 const val updateChannelSkip = "updateChannelSkip" // Tab Menu @@ -175,6 +180,8 @@ object Defines { @BooleanConfig const val showOriginal = "showOriginal" const val translatorProvider = "translatorProvider" const val deepLFormality = "deepLFormality" + @StringConfig("") const val deepLxApi = "deepLxApi" + const val deepLxPreserveFormatting = "deepLxPreserveFormatting" const val translatorStatus = "translatorStatus" const val targetLanguage = "targetLanguage" const val restrictedLanguages = "restrictedLanguagesFix" @@ -189,9 +196,60 @@ object Defines { 1645976613, // Update Channel 1714986438, // CI Channel 1477185964, // Discussion Group - 1068402676 // Kitsune + 1068402676, // Kitsune + 784901712, // NextAlone + 457896977 // Queally rw ) + @BooleanConfig const val doNotUnarchiveBySwipe = "doNotUnarchiveBySwipe" + @BooleanConfig const val hideInputFieldBotButton = "hideInputFieldBotButton" + @BooleanConfig const val hideMessageSeenTooltip = "hideMessageSeenTooltip" + @BooleanConfig const val disableNotificationBubble = "disableNotificationBubble" + @BooleanConfig const val showOnlineStatus = "showOnlineStatus" + @BooleanConfig const val disablePhotoSideAction = "disablePhotoSideAction" + @BooleanConfig const val mergeMessage = "mergeMessage" + @BooleanConfig const val filterZalgo = "filterZalgo" + @BooleanConfig const val ignoreFolderUnreadCount = "ignoreFolderUnreadCount" + @BooleanConfig const val ignoreChatStrict = "ignoreChatStrict" + @StringConfig("Nnngram") const val customTitle = "customTitle" + @StringConfig("") const val textStyleSettings = "textStyleSettings" + @BooleanConfig const val hideSendAsButton = "hideSendAsButton" + @BooleanConfig const val hideFilterMuteAll = "hideFilterMuteAll" + @BooleanConfig const val hideKeyboardWhenScrolling = "hideKeyboardWhenScrolling" + @BooleanConfig const val searchInPlace = "searchInPlace" + @IntConfig(100) const val gifSize = "gifSize" + @BooleanConfig const val hideDialogsFloatingButton = "hideDialogsFloatingButton" + @BooleanConfig const val disableChannelMuteButton = "disableChannelMuteButton" + @BooleanConfig const val disableAutoPip = "disableAutoPip" + @BooleanConfig const val sendMp4DocumentAsVideo = "sendMp4DocumentAsVideo" + @BooleanConfig const val disableGravityDetectionInVideo = "disableGravityDetectionInVideo" + @BooleanConfig const val hideProxyEntryInTitle = "hideProxyEntryInTitle" + @BooleanConfig const val autoMuteAfterJoiningChannel = "autoMuteAfterJoinChannel" + + // Drawer List + @BooleanConfig(true) const val showNewGroup = "showNewGroup" + @BooleanConfig(true) const val showContacts = "showContacts" + @BooleanConfig(true) const val showCalls = "showCalls" + @BooleanConfig(true) const val showPeopleNearby = "showPeopleNearby" + @BooleanConfig(true) const val showSavedMessages = "showSavedMessages" + @BooleanConfig const val showArchivedChats = "showArchivedChats" + @BooleanConfig(true) const val showChangeEmojiStatus = "showChangeEmojiStatus" + @BooleanConfig(true) const val showProfileMyStories = "showProfileMyStories" + + // Text Style + @BooleanConfig(true) const val showTextSpoiler = "showTextSpoiler" + @BooleanConfig(true) const val showTextBold = "showTextBold" + @BooleanConfig(true) const val showTextItalic = "showTextItalic" + @BooleanConfig(true) const val showTextMono = "showTextMono" + @BooleanConfig(true) const val showTextStrike = "showTextStrike" + @BooleanConfig(true) const val showTextUnderline = "showTextUnderline" + @BooleanConfig(true) const val showTextCreateMention = "showTextCreateMention" + @BooleanConfig(true) const val showTextCreateLink = "showTextCreateLink" + @BooleanConfig(true) const val showTextRegular = "showTextRegular" + @BooleanConfig(true) const val showTextQuote = "showTextQuote" + @BooleanConfig(true) const val showTextMonoCode = "showTextMonoCode" + @BooleanConfig(false) const val enableXiaomiHyperAi = "enableXiaomiHyperAi" + /** * 数组中元素未找到的下标,值为-1 */ diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/FileUtils.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/FileUtils.kt similarity index 98% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/FileUtils.kt rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/FileUtils.kt index 4867fba20e..066e40f139 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/FileUtils.kt +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/FileUtils.kt @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.utils +package xyz.nextalone.nnngram.utils import java.io.File import java.io.InputStream diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/Log.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/Log.kt similarity index 98% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/Log.kt rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/Log.kt index f2d4871fc2..340232ac82 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/Log.kt +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/Log.kt @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.utils +package xyz.nextalone.nnngram.utils import android.content.Context import android.os.Build @@ -37,7 +37,7 @@ import java.util.Date import java.util.Locale object Log { - const val TAG = "Nullgram" + const val TAG = "Nnngram" private val logFile: File by lazy { File(AndroidUtilities.getLogsDir(), "log-${SimpleDateFormat("yyyy-MM-dd", Locale.US).format(Date())}.txt").also { f -> if (!f.exists()) { @@ -53,7 +53,7 @@ object Log { appendText("Device: ${Build.MODEL}\n") appendText("Manufacturer: ${Build.MANUFACTURER}\n") appendText("OS: ${Build.VERSION.SDK_INT}\n") - appendText("isPlay: ${BuildConfig.isPlay}\n") +// appendText("isPlay: ${BuildConfig.isPlay}\n") appendText("ABI: ${Utils.abi}\n") for (i in 0 until UserConfig.MAX_ACCOUNT_COUNT) { UserConfig.getInstance(i)?.let { diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/MessageUtils.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/MessageUtils.kt similarity index 87% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/MessageUtils.kt rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/MessageUtils.kt index f06e81e043..3f7276a503 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/MessageUtils.kt +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/MessageUtils.kt @@ -16,7 +16,7 @@ * If not, see * */ -package top.qwq2333.nullgram.utils +package xyz.nextalone.nnngram.utils import android.annotation.SuppressLint import android.app.Activity @@ -28,6 +28,7 @@ import android.content.Context import android.content.DialogInterface import android.graphics.Bitmap import android.graphics.BitmapFactory +import android.graphics.Canvas import android.net.Uri import android.text.TextUtils import android.util.Base64 @@ -41,7 +42,14 @@ import android.view.inputmethod.EditorInfo import android.widget.FrameLayout import android.widget.TextView import android.widget.TimePicker +import android.widget.Toast import androidx.core.content.FileProvider +import com.airbnb.lottie.LottieComposition +import com.airbnb.lottie.LottieCompositionFactory +import com.airbnb.lottie.LottieDrawable +import com.airbnb.lottie.LottieResult +import com.arthenica.mobileffmpeg.Config.RETURN_CODE_SUCCESS +import com.arthenica.mobileffmpeg.FFmpeg import com.google.zxing.EncodeHintType import com.google.zxing.qrcode.QRCodeWriter import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel @@ -90,10 +98,11 @@ import org.telegram.ui.Components.EditTextBoldCursor import org.telegram.ui.Components.Forum.ForumUtilities import org.telegram.ui.Components.LayoutHelper import org.telegram.ui.Components.TranscribeButton -import top.qwq2333.nullgram.helpers.QrHelper -import top.qwq2333.nullgram.helpers.QrHelper.readQr -import top.qwq2333.nullgram.tryOrLog +import xyz.nextalone.nnngram.helpers.QrHelper +import xyz.nextalone.nnngram.helpers.QrHelper.readQr +import xyz.nextalone.nnngram.tryOrLog import java.io.File +import java.io.FileInputStream import java.io.FileOutputStream import java.nio.ByteBuffer import java.nio.charset.StandardCharsets @@ -417,7 +426,7 @@ class MessageUtils(num: Int) : BaseController(num) { } fun saveStickerToGallery(activity: Activity, messageObject: MessageObject, callback: Utilities.Callback) { - saveStickerToGallery(activity, getPathToMessage(messageObject), messageObject.isVideoSticker, callback) + saveStickerToGallery(activity, getPathToMessage(messageObject), messageObject.isVideoSticker, messageObject.isAnimatedSticker, callback) } fun addMessageToClipboard(selectedObject: MessageObject, callback: Runnable) { @@ -867,14 +876,94 @@ class MessageUtils(num: Int) : BaseController(num) { if (!temp.exists()) { return } - saveStickerToGallery(activity, path, MessageObject.isVideoSticker(document), callback) + saveStickerToGallery(activity, path, MessageObject.isVideoSticker(document), MessageObject.isAnimatedStickerDocument(document), callback) } - private fun saveStickerToGallery(activity: Activity, path: String?, video: Boolean, callback: Utilities.Callback) { + private fun saveStickerToGallery(activity: Activity, path: String?, video: Boolean, animated: Boolean, callback: Utilities.Callback) { Utilities.globalQueue.postRunnable { tryOrLog { if (video) { - MediaController.saveFile(path, activity, 1, null, null, callback) + val outputPath = + path!!.replace(".webm", ".gif") + if (File(outputPath).exists()) { + File(outputPath).delete() + } + val cmd = arrayOf("-y", "-vcodec", "libvpx-vp9", "-i", path, "-lavfi", "split[v],palettegen,[v]paletteuse", outputPath) + FFmpeg.executeAsync(cmd) { executionId, returnCode -> + if (returnCode == RETURN_CODE_SUCCESS) { + MediaController.saveFile(outputPath, activity, 0, null, null, callback) + } else { + Log.e("FFmpeg", "Failed to convert to GIF: $returnCode, file: $path") + Toast.makeText(activity, "Failed to convert to GIF, Use Mp4", Toast.LENGTH_SHORT).show() + com.arthenica.mobileffmpeg.Config.printLastCommandOutput(android.util.Log.ERROR) + MediaController.saveFile(path, activity, 1, null, null, callback) + } + } + } else if (animated) { + CoroutineScope(Dispatchers.IO).launch { + val outputPath = path!!.replace(".tgs", ".gif") + if (File(outputPath).exists()) { + File(outputPath).delete() + } + + val result: LottieResult = LottieCompositionFactory.fromJsonInputStreamSync( + FileInputStream(File(path)), path) + val composition: LottieComposition? = result.value + + composition?.let { comp -> + val lottieDrawable = LottieDrawable().apply { this.composition = comp } + + lottieDrawable.setBounds(0, 0, comp.bounds.width(), comp.bounds.height()) + + val tempDir = File(activity.cacheDir, "temp_${System.currentTimeMillis()}") + if (!tempDir.exists()) { + tempDir.mkdirs() + } + + for (i in comp.startFrame.toInt() until comp.endFrame.toInt()) { + lottieDrawable.frame = i + + val bitmap = Bitmap.createBitmap(comp.bounds.width(), comp.bounds.height(), Bitmap.Config.ARGB_8888) + val canvas = Canvas(bitmap) + lottieDrawable.draw(canvas) + + val file = File(tempDir, "$i.png") + FileOutputStream(file).use { fos -> + bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos) + } + } + val generatePaletteCommand = arrayOf( + "-i", "${tempDir.absolutePath}/%d.png", + "-vf", "palettegen=stats_mode=diff", + "-y", "${tempDir.absolutePath}/palette.png" + ) + val createGifCommand = arrayOf( + "-framerate", "60", + "-i", "${tempDir.absolutePath}/%d.png", + "-i", "${tempDir.absolutePath}/palette.png", + "-filter_complex", "[0:v]scale=320:-1:flags=lanczos[v];[v][1:v]paletteuse=dither=none:diff_mode=rectangle", + "-y", outputPath + ) + FFmpeg.executeAsync(generatePaletteCommand) { executionId, returnCode -> + if (returnCode == RETURN_CODE_SUCCESS) { + FFmpeg.executeAsync(createGifCommand) { executionId, returnCode -> + if (returnCode == RETURN_CODE_SUCCESS) { + MediaController.saveFile(outputPath, activity, 0, null, null, callback) + } else { + Log.e("FFmpeg", "Failed to convert to GIF: $returnCode, file: $path") + Toast.makeText(activity, "Failed to convert to GIF, Use tgs", Toast.LENGTH_SHORT).show() + com.arthenica.mobileffmpeg.Config.printLastCommandOutput(android.util.Log.ERROR) + } + tempDir.deleteRecursively() + } + } else { + Log.e("FFmpeg", "Failed to convert to GIF: $returnCode, file: $path") + Toast.makeText(activity, "Failed to convert to GIF, Use tgs", Toast.LENGTH_SHORT).show() + com.arthenica.mobileffmpeg.Config.printLastCommandOutput(android.util.Log.ERROR) + } + } + } + } } else { val image = BitmapFactory.decodeFile(path) if (image != null) { diff --git a/TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/NeteaseEmbed.java b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/NeteaseEmbed.java new file mode 100644 index 0000000000..128844a4ce --- /dev/null +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/NeteaseEmbed.java @@ -0,0 +1,52 @@ +package xyz.nextalone.nnngram.utils; + +import org.telegram.tgnet.TLRPC; + +public class NeteaseEmbed { + + public static boolean isNeteaseWebPage(String url) { + return url != null && url.startsWith("music.163.com/"); + } + + public static String getNeteaseAlbumId(String url) { + if (url.contains("album")) { + return url.replace("music.163.com/album?id=", ""); + } + return null; + } + + public static String getNeteaseAlbumEmbed(String id) { + return "https://music.163.com/outchain/player?type=1&auto=1&id=" + id; + } + + public static String getNeteaseSongId(String url) { + if (url.contains("song")) { + return url.replace("music.163.com/song?id=", ""); + } + return null; + } + + public static String getNeteaseSongEmbed(String id) { + return "https://music.163.com/outchain/player?type=2&auto=1&id=" + id; + } + + public static void fixWebPage(TLRPC.WebPage webpage) { + if (webpage == null || !isNeteaseWebPage(webpage.display_url)) { + return; + } + String albumId = getNeteaseAlbumId(webpage.display_url); + String songId = getNeteaseSongId(webpage.display_url); + if (albumId != null) { + webpage.embed_url = getNeteaseAlbumEmbed(albumId); + webpage.embed_type = "iframe"; + webpage.embed_width = 300; + webpage.embed_height = 380; + } + if (songId != null) { + webpage.embed_url = getNeteaseSongEmbed(songId); + webpage.embed_type = "iframe"; + webpage.embed_width = 300; + webpage.embed_height = 380; + } + } +} diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/PermissionUtils.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/PermissionUtils.kt similarity index 99% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/PermissionUtils.kt rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/PermissionUtils.kt index d8bffae169..830b6edf56 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/PermissionUtils.kt +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/PermissionUtils.kt @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.utils +package xyz.nextalone.nnngram.utils import android.Manifest import android.app.Activity diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/PrivacyUtils.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/PrivacyUtils.kt similarity index 99% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/PrivacyUtils.kt rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/PrivacyUtils.kt index 44bc6048ff..b5ae17ac56 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/PrivacyUtils.kt +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/PrivacyUtils.kt @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.utils +package xyz.nextalone.nnngram.utils import android.content.Context import android.content.DialogInterface diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/ShareUtil.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/ShareUtil.kt similarity index 98% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/ShareUtil.kt rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/ShareUtil.kt index 27203841ec..395e0cb5e2 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/ShareUtil.kt +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/ShareUtil.kt @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.utils +package xyz.nextalone.nnngram.utils import android.content.Context import android.content.Intent diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/StringUtils.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/StringUtils.kt similarity index 90% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/StringUtils.kt rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/StringUtils.kt index c8386be92c..a589c06fec 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/StringUtils.kt +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/StringUtils.kt @@ -16,11 +16,12 @@ * If not, see * */ -package top.qwq2333.nullgram.utils +package xyz.nextalone.nnngram.utils +import kotlin.math.ceil import org.telegram.tgnet.TLRPC import ws.vinta.pangu.Pangu -import kotlin.math.ceil +import xyz.nextalone.gen.Config object StringUtils { private val pangu = Pangu() @@ -151,4 +152,20 @@ object StringUtils { return Pair(panguText, entities) } + + @JvmStatic + fun zalgoFilter(text: CharSequence?): CharSequence { + return if (text == null) { + "" + } else if (Config.filterZalgo && text.matches(".*\\p{Mn}{4}.*".toRegex())) { + text.replace("(?i)([aeiouy]̈)|[̀-ͯ҉]".toRegex(), "").replace("\\p{Mn}".toRegex(), "") + } else { + text + } + } + + @JvmStatic + fun zalgoFilter(text: String): String { + return zalgoFilter(text as CharSequence).toString() + } } diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/TypefaceUtils.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/TypefaceUtils.kt similarity index 98% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/TypefaceUtils.kt rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/TypefaceUtils.kt index 8ab97b523a..fb8b8cb1ff 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/TypefaceUtils.kt +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/TypefaceUtils.kt @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.utils +package xyz.nextalone.nnngram.utils import android.graphics.Bitmap import android.graphics.Canvas diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/UpdateUtils.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/UpdateUtils.kt similarity index 91% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/UpdateUtils.kt rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/UpdateUtils.kt index 1ff8957804..d038bed6c3 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/UpdateUtils.kt +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/UpdateUtils.kt @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.utils +package xyz.nextalone.nnngram.utils import android.content.Context import android.util.Base64 @@ -38,13 +38,13 @@ import org.telegram.tgnet.TLObject import org.telegram.tgnet.TLRPC import org.telegram.tgnet.TLRPC.Chat import org.telegram.ui.ActionBar.AlertDialog -import top.qwq2333.nullgram.cacheUsersAndChats -import top.qwq2333.nullgram.config.ConfigManager +import xyz.nextalone.nnngram.cacheUsersAndChats +import xyz.nextalone.nnngram.config.ConfigManager import java.util.Arrays object UpdateUtils { - private const val channelUsername = "NullgramClient" + private const val channelUsername = "Nnngram" private val originalChannelUsername = String(Base64.decode("TnVsbGdyYW1DbGllbnQK", Base64.DEFAULT)) @@ -150,22 +150,18 @@ object UpdateUtils { } private const val maxReadCount = 50 - private const val stableMetadataChannelID: Long = 1514826137 - private const val stableMetadataChannelName = "NullgramMetaData" - private const val previewMetadataChannelID: Long = 1524514483 - private const val previewMetadataChannelName = "PreviewMetaData" - private const val stableChannelAPKsID: Long = 1645976613 - private const val stableChannelAPKsName = "NullgramAPKs" - private const val previewChannelAPKsID: Long = 1714986438 - private const val previewChannelAPKsName = "NullgramCI" +// private const val stableMetadataChannelID: Long = 1514826137 +// private const val stableMetadataChannelName = "NullgramMetaData" + private const val previewMetadataChannelID: Long = 2135305446 + private const val previewMetadataChannelName = "NnngramMetaData" +// private const val stableChannelAPKsID: Long = 1645976613 +// private const val stableChannelAPKsName = "NullgramAPKs" + private const val previewChannelAPKsID: Long = 1848519901 + private const val previewChannelAPKsName = "Nnngram" @JvmStatic fun retrieveUpdateMetadata(callback: (UpdateMetadata?, Boolean) -> Unit) { - val (metadataChannelID, metadataChannelName) = when (ConfigManager.getIntOrDefault(Defines.updateChannel, -1)) { - Defines.stableChannel -> stableMetadataChannelID to stableMetadataChannelName - Defines.ciChannel -> previewMetadataChannelID to previewMetadataChannelName - else -> if (BuildConfig.VERSION_NAME.contains("preview")) previewMetadataChannelID to previewMetadataChannelName else stableMetadataChannelID to stableMetadataChannelName - } + val (metadataChannelID, metadataChannelName) = previewMetadataChannelID to previewMetadataChannelName val localVersionCode = BuildConfig.VERSION_CODE val accountInstance = AccountInstance.getInstance(UserConfig.selectedAccount) TLRPC.TL_messages_getHistory().apply { @@ -277,13 +273,8 @@ object UpdateUtils { @JvmStatic fun checkUpdate(callback: (TLRPC.TL_help_appUpdate?, Boolean) -> Unit) { - if (BuildConfig.isPlay) return if (!UserConfig.getInstance(UserConfig.selectedAccount).isClientActivated) return - val (apksChannelID, apksChannelName) = when (ConfigManager.getIntOrDefault(Defines.updateChannel, -1)) { - Defines.stableChannel -> stableChannelAPKsID to stableChannelAPKsName - Defines.ciChannel -> previewChannelAPKsID to previewChannelAPKsName - else -> if (BuildConfig.VERSION_NAME.contains("preview")) previewChannelAPKsID to previewChannelAPKsName else stableChannelAPKsID to stableChannelAPKsName - } + val (apksChannelID, apksChannelName) = previewChannelAPKsID to previewChannelAPKsName val accountInstance = AccountInstance.getInstance(UserConfig.selectedAccount) retrieveUpdateMetadata { metadata, error -> if (metadata == null) { @@ -321,7 +312,6 @@ object UpdateUtils { can_not_skip = metadata.canNotSkip flags = flags or 2 } - if (metadata.updateLog != null) { update.text = metadata.updateLog update.entities = metadata.updateLogEntities diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/Utils.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/Utils.kt similarity index 95% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/Utils.kt rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/Utils.kt index aee8258eab..de7e1596ec 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/Utils.kt +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/Utils.kt @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.utils +package xyz.nextalone.nnngram.utils import android.content.Context import android.graphics.Canvas @@ -42,9 +42,9 @@ import org.telegram.ui.ActionBar.ActionBarPopupWindow.ActionBarPopupWindowLayout import org.telegram.ui.ActionBar.BaseFragment import org.telegram.ui.Components.AlertsCreator import org.telegram.ui.Components.BulletinFactory -import top.qwq2333.gen.Config -import top.qwq2333.nullgram.activity.DatacenterActivity -import top.qwq2333.nullgram.remote.NicegramController +import xyz.nextalone.gen.Config +import xyz.nextalone.nnngram.activity.DatacenterActivity +import xyz.nextalone.nnngram.remote.NicegramController import java.io.BufferedReader import java.io.File import java.io.FileReader @@ -56,14 +56,18 @@ import java.util.zip.ZipFile object Utils { - @JvmStatic - fun showForwardDate(obj: MessageObject, orig: CharSequence): String = if (Config.dateOfForwardedMsg && - obj.messageOwner.fwd_from.date.toLong() != 0L - ) { - "$orig • ${LocaleController.formatDate(obj.messageOwner.fwd_from.date.toLong())}" - } else { - orig.toString() + fun showForwardDate(obj: MessageObject, orig: CharSequence): String { + val date: Long = obj.messageOwner.fwd_from.date.toLong() + val day: String = LocaleController.formatDate(date) + val time: String = LocaleController.getInstance().formatterDay.format(date * 1000) + return if (!Config.dateOfForwardedMsg || date == 0L) { + orig.toString() + } else { + if (day == time) { + "$orig · $day" + } else "$orig · $day $time" + } } @JvmStatic diff --git a/TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/VibrationUtils.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/VibrationUtils.kt similarity index 96% rename from TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/VibrationUtils.kt rename to TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/VibrationUtils.kt index b1a93793ca..88073062e2 100644 --- a/TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/VibrationUtils.kt +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/VibrationUtils.kt @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram.utils +package xyz.nextalone.nnngram.utils import android.content.Context import android.os.Build @@ -27,7 +27,7 @@ import android.view.View import android.view.ViewGroup import androidx.core.view.children import org.telegram.messenger.ApplicationLoader -import top.qwq2333.gen.Config +import xyz.nextalone.gen.Config object VibrationUtils { lateinit var vibrator: Vibrator diff --git a/TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/WordUtils.kt b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/WordUtils.kt new file mode 100644 index 0000000000..6d2b0e59b6 --- /dev/null +++ b/TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/WordUtils.kt @@ -0,0 +1,35 @@ +package xyz.nextalone.nnngram.utils + + +object WordUtils { + + + private val nounMap: MutableMap = mutableMapOf("你" to "我", "您" to "咱", "他" to "怹", "她" to "怹", "它" to "怹") + private fun generateBimap(map: MutableMap): MutableMap { + val keys = map.keys.toMutableList() + val values = map.values.toMutableList() + val result = mutableMapOf() + for (i in keys.indices) { + result[values[i]] = keys[i] + } + return result + } + + init { + nounMap.putAll(generateBimap(nounMap)) + } + + fun replaceAntonyms(string: String?): String { + if (string == null) return "" + var result = string + // 因为是双向映射,所以要避免被替换两次 + nounMap.onEachIndexed { index, entry -> + result = result?.split(entry.key)?.joinToString("_noun_$index") + } + nounMap.onEachIndexed { index, entry -> + result = result?.split("_noun_$index")?.joinToString(entry.value) + } + + return result.toString() + } +} diff --git a/TMessagesProj/src/main/res/drawable-hdpi/msg_forward.png b/TMessagesProj/src/main/res/drawable-hdpi/msg_forward.png index da97d847d1..0fa803631f 100644 Binary files a/TMessagesProj/src/main/res/drawable-hdpi/msg_forward.png and b/TMessagesProj/src/main/res/drawable-hdpi/msg_forward.png differ diff --git a/TMessagesProj/src/main/res/drawable-hdpi/msg_noquote_forward.png b/TMessagesProj/src/main/res/drawable-hdpi/msg_noquote_forward.png new file mode 100644 index 0000000000..5ace7ef561 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-hdpi/msg_noquote_forward.png differ diff --git a/TMessagesProj/src/main/res/drawable-hdpi/msg_prpr.png b/TMessagesProj/src/main/res/drawable-hdpi/msg_prpr.png new file mode 100644 index 0000000000..5240bfe02a Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-hdpi/msg_prpr.png differ diff --git a/TMessagesProj/src/main/res/drawable-hdpi/na_notification.png b/TMessagesProj/src/main/res/drawable-hdpi/na_notification.png new file mode 100644 index 0000000000..7b820226ae Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-hdpi/na_notification.png differ diff --git a/TMessagesProj/src/main/res/drawable-mdpi/msg_forward.png b/TMessagesProj/src/main/res/drawable-mdpi/msg_forward.png index 8bee3f6a17..f98cecc73d 100644 Binary files a/TMessagesProj/src/main/res/drawable-mdpi/msg_forward.png and b/TMessagesProj/src/main/res/drawable-mdpi/msg_forward.png differ diff --git a/TMessagesProj/src/main/res/drawable-mdpi/msg_noquote_forward.png b/TMessagesProj/src/main/res/drawable-mdpi/msg_noquote_forward.png new file mode 100644 index 0000000000..b89bc49834 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-mdpi/msg_noquote_forward.png differ diff --git a/TMessagesProj/src/main/res/drawable-mdpi/msg_prpr.png b/TMessagesProj/src/main/res/drawable-mdpi/msg_prpr.png new file mode 100644 index 0000000000..305401c3a3 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-mdpi/msg_prpr.png differ diff --git a/TMessagesProj/src/main/res/drawable-v24/ic_launcher_nagram_colorful_foreground.xml b/TMessagesProj/src/main/res/drawable-v24/ic_launcher_nagram_colorful_foreground.xml new file mode 100644 index 0000000000..e9ea100842 --- /dev/null +++ b/TMessagesProj/src/main/res/drawable-v24/ic_launcher_nagram_colorful_foreground.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/TMessagesProj/src/main/res/drawable-v24/ic_launcher_nagram_foreground.xml b/TMessagesProj/src/main/res/drawable-v24/ic_launcher_nagram_foreground.xml new file mode 100644 index 0000000000..55a3123073 --- /dev/null +++ b/TMessagesProj/src/main/res/drawable-v24/ic_launcher_nagram_foreground.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/TMessagesProj/src/main/res/drawable-v24/ic_launcher_nagram_neon_background.xml b/TMessagesProj/src/main/res/drawable-v24/ic_launcher_nagram_neon_background.xml new file mode 100644 index 0000000000..cfe41ea63f --- /dev/null +++ b/TMessagesProj/src/main/res/drawable-v24/ic_launcher_nagram_neon_background.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/msg_forward.png b/TMessagesProj/src/main/res/drawable-xhdpi/msg_forward.png index a972ccf028..263383d366 100644 Binary files a/TMessagesProj/src/main/res/drawable-xhdpi/msg_forward.png and b/TMessagesProj/src/main/res/drawable-xhdpi/msg_forward.png differ diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/msg_noquote_forward.png b/TMessagesProj/src/main/res/drawable-xhdpi/msg_noquote_forward.png new file mode 100644 index 0000000000..d8bb1c54b0 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xhdpi/msg_noquote_forward.png differ diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/msg_prpr.png b/TMessagesProj/src/main/res/drawable-xhdpi/msg_prpr.png new file mode 100644 index 0000000000..5da86416e9 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xhdpi/msg_prpr.png differ diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/na_notification.png b/TMessagesProj/src/main/res/drawable-xhdpi/na_notification.png new file mode 100644 index 0000000000..098e99d8b5 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xhdpi/na_notification.png differ diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/msg_forward.png b/TMessagesProj/src/main/res/drawable-xxhdpi/msg_forward.png index 29b9ba8c69..d85710bf84 100644 Binary files a/TMessagesProj/src/main/res/drawable-xxhdpi/msg_forward.png and b/TMessagesProj/src/main/res/drawable-xxhdpi/msg_forward.png differ diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/msg_noquote_forward.png b/TMessagesProj/src/main/res/drawable-xxhdpi/msg_noquote_forward.png new file mode 100644 index 0000000000..fe592c16d2 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xxhdpi/msg_noquote_forward.png differ diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/msg_prpr.png b/TMessagesProj/src/main/res/drawable-xxhdpi/msg_prpr.png new file mode 100644 index 0000000000..212eef1e66 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xxhdpi/msg_prpr.png differ diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/na_notification.png b/TMessagesProj/src/main/res/drawable-xxhdpi/na_notification.png new file mode 100644 index 0000000000..80779e352c Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xxhdpi/na_notification.png differ diff --git a/TMessagesProj/src/main/res/drawable/ic_launcher_nagram_colorful_background.xml b/TMessagesProj/src/main/res/drawable/ic_launcher_nagram_colorful_background.xml new file mode 100644 index 0000000000..34519460a1 --- /dev/null +++ b/TMessagesProj/src/main/res/drawable/ic_launcher_nagram_colorful_background.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/TMessagesProj/src/main/res/drawable/ic_launcher_nagram_darkgreen_background.xml b/TMessagesProj/src/main/res/drawable/ic_launcher_nagram_darkgreen_background.xml new file mode 100644 index 0000000000..1c76a689bb --- /dev/null +++ b/TMessagesProj/src/main/res/drawable/ic_launcher_nagram_darkgreen_background.xml @@ -0,0 +1,17 @@ + + + + + + + \ No newline at end of file diff --git a/TMessagesProj/src/main/res/drawable/ic_launcher_nagram_darkgreen_foreground.xml b/TMessagesProj/src/main/res/drawable/ic_launcher_nagram_darkgreen_foreground.xml new file mode 100644 index 0000000000..c836cec44e --- /dev/null +++ b/TMessagesProj/src/main/res/drawable/ic_launcher_nagram_darkgreen_foreground.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/TMessagesProj/src/main/res/drawable/ic_launcher_nagram_google_background.xml b/TMessagesProj/src/main/res/drawable/ic_launcher_nagram_google_background.xml new file mode 100644 index 0000000000..34519460a1 --- /dev/null +++ b/TMessagesProj/src/main/res/drawable/ic_launcher_nagram_google_background.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/TMessagesProj/src/main/res/drawable/ic_launcher_nagram_google_foreground.xml b/TMessagesProj/src/main/res/drawable/ic_launcher_nagram_google_foreground.xml new file mode 100644 index 0000000000..940daeb231 --- /dev/null +++ b/TMessagesProj/src/main/res/drawable/ic_launcher_nagram_google_foreground.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/TMessagesProj/src/main/res/drawable/ic_launcher_nagram_neon_foreground.xml b/TMessagesProj/src/main/res/drawable/ic_launcher_nagram_neon_foreground.xml new file mode 100644 index 0000000000..089d6deb49 --- /dev/null +++ b/TMessagesProj/src/main/res/drawable/ic_launcher_nagram_neon_foreground.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/TMessagesProj/src/main/res/drawable/icon_3_background.xml b/TMessagesProj/src/main/res/drawable/icon_3_background.xml new file mode 100644 index 0000000000..d00445b9dc --- /dev/null +++ b/TMessagesProj/src/main/res/drawable/icon_3_background.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/TMessagesProj/src/main/res/drawable/icon_3_background_round.xml b/TMessagesProj/src/main/res/drawable/icon_3_background_round.xml new file mode 100644 index 0000000000..3e2c38cff4 --- /dev/null +++ b/TMessagesProj/src/main/res/drawable/icon_3_background_round.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/TMessagesProj/src/main/res/drawable/msg_noquote_forward.xml b/TMessagesProj/src/main/res/drawable/msg_noquote_forward.xml deleted file mode 100644 index fe47813277..0000000000 --- a/TMessagesProj/src/main/res/drawable/msg_noquote_forward.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - diff --git a/TMessagesProj/src/main/res/drawable/na_splash_320.xml b/TMessagesProj/src/main/res/drawable/na_splash_320.xml new file mode 100644 index 0000000000..defe31ab43 --- /dev/null +++ b/TMessagesProj/src/main/res/drawable/na_splash_320.xml @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/TMessagesProj/src/main/res/drawable/sticker.webp b/TMessagesProj/src/main/res/drawable/sticker.webp index 71b32b307c..dc5842d82e 100644 Binary files a/TMessagesProj/src/main/res/drawable/sticker.webp and b/TMessagesProj/src/main/res/drawable/sticker.webp differ diff --git a/TMessagesProj/src/main/res/mipmap-anydpi-v26/ic_launcher_icon_1.xml b/TMessagesProj/src/main/res/mipmap-anydpi-v26/ic_launcher_icon_1.xml deleted file mode 100644 index eafbb891ff..0000000000 --- a/TMessagesProj/src/main/res/mipmap-anydpi-v26/ic_launcher_icon_1.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/TMessagesProj/src/main/res/mipmap-anydpi-v26/ic_launcher_icon_2.xml b/TMessagesProj/src/main/res/mipmap-anydpi-v26/ic_launcher_icon_2.xml deleted file mode 100644 index 53b9bd7e7d..0000000000 --- a/TMessagesProj/src/main/res/mipmap-anydpi-v26/ic_launcher_icon_2.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/TMessagesProj/src/main/res/mipmap-anydpi-v26/ic_launcher_icon_3.xml b/TMessagesProj/src/main/res/mipmap-anydpi-v26/ic_launcher_icon_3.xml deleted file mode 100644 index ffd6b5b066..0000000000 --- a/TMessagesProj/src/main/res/mipmap-anydpi-v26/ic_launcher_icon_3.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/TMessagesProj/src/main/res/mipmap-anydpi-v26/ic_launcher_icon_4.xml b/TMessagesProj/src/main/res/mipmap-anydpi-v26/ic_launcher_icon_4.xml deleted file mode 100644 index 55464b6ae0..0000000000 --- a/TMessagesProj/src/main/res/mipmap-anydpi-v26/ic_launcher_icon_4.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/TMessagesProj/src/main/res/mipmap-anydpi-v26/ic_launcher_icon_5.xml b/TMessagesProj/src/main/res/mipmap-anydpi-v26/ic_launcher_icon_5.xml deleted file mode 100644 index 63a66aedbf..0000000000 --- a/TMessagesProj/src/main/res/mipmap-anydpi-v26/ic_launcher_icon_5.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/TMessagesProj/src/main/res/mipmap-anydpi-v26/ic_launcher_nagram.xml b/TMessagesProj/src/main/res/mipmap-anydpi-v26/ic_launcher_nagram.xml new file mode 100644 index 0000000000..df19006528 --- /dev/null +++ b/TMessagesProj/src/main/res/mipmap-anydpi-v26/ic_launcher_nagram.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/TMessagesProj/src/main/res/mipmap-anydpi-v26/ic_launcher_nagram_colorful.xml b/TMessagesProj/src/main/res/mipmap-anydpi-v26/ic_launcher_nagram_colorful.xml new file mode 100644 index 0000000000..3eeaed2b92 --- /dev/null +++ b/TMessagesProj/src/main/res/mipmap-anydpi-v26/ic_launcher_nagram_colorful.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/TMessagesProj/src/main/res/mipmap-anydpi-v26/ic_launcher_nagram_colorful_round.xml b/TMessagesProj/src/main/res/mipmap-anydpi-v26/ic_launcher_nagram_colorful_round.xml new file mode 100644 index 0000000000..3eeaed2b92 --- /dev/null +++ b/TMessagesProj/src/main/res/mipmap-anydpi-v26/ic_launcher_nagram_colorful_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/TMessagesProj/src/main/res/mipmap-anydpi-v26/ic_launcher_nagram_darkgreen.xml b/TMessagesProj/src/main/res/mipmap-anydpi-v26/ic_launcher_nagram_darkgreen.xml new file mode 100644 index 0000000000..1f88dcdb98 --- /dev/null +++ b/TMessagesProj/src/main/res/mipmap-anydpi-v26/ic_launcher_nagram_darkgreen.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/TMessagesProj/src/main/res/mipmap-anydpi-v26/ic_launcher_nagram_darkgreen_round.xml b/TMessagesProj/src/main/res/mipmap-anydpi-v26/ic_launcher_nagram_darkgreen_round.xml new file mode 100644 index 0000000000..1f88dcdb98 --- /dev/null +++ b/TMessagesProj/src/main/res/mipmap-anydpi-v26/ic_launcher_nagram_darkgreen_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/TMessagesProj/src/main/res/mipmap-anydpi-v26/ic_launcher_nagram_google.xml b/TMessagesProj/src/main/res/mipmap-anydpi-v26/ic_launcher_nagram_google.xml new file mode 100644 index 0000000000..d484e149e3 --- /dev/null +++ b/TMessagesProj/src/main/res/mipmap-anydpi-v26/ic_launcher_nagram_google.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/TMessagesProj/src/main/res/mipmap-anydpi-v26/ic_launcher_nagram_google_round.xml b/TMessagesProj/src/main/res/mipmap-anydpi-v26/ic_launcher_nagram_google_round.xml new file mode 100644 index 0000000000..d484e149e3 --- /dev/null +++ b/TMessagesProj/src/main/res/mipmap-anydpi-v26/ic_launcher_nagram_google_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/TMessagesProj/src/main/res/mipmap-anydpi-v26/ic_launcher_nagram_neon.xml b/TMessagesProj/src/main/res/mipmap-anydpi-v26/ic_launcher_nagram_neon.xml new file mode 100644 index 0000000000..13ab982184 --- /dev/null +++ b/TMessagesProj/src/main/res/mipmap-anydpi-v26/ic_launcher_nagram_neon.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/TMessagesProj/src/main/res/mipmap-anydpi-v26/ic_launcher_nagram_neon_round.xml b/TMessagesProj/src/main/res/mipmap-anydpi-v26/ic_launcher_nagram_neon_round.xml new file mode 100644 index 0000000000..13ab982184 --- /dev/null +++ b/TMessagesProj/src/main/res/mipmap-anydpi-v26/ic_launcher_nagram_neon_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/TMessagesProj/src/main/res/mipmap-anydpi-v26/ic_launcher_nagram_round.xml b/TMessagesProj/src/main/res/mipmap-anydpi-v26/ic_launcher_nagram_round.xml new file mode 100644 index 0000000000..df19006528 --- /dev/null +++ b/TMessagesProj/src/main/res/mipmap-anydpi-v26/ic_launcher_nagram_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/TMessagesProj/src/main/res/mipmap-anydpi-v26/icon_3_launcher.xml b/TMessagesProj/src/main/res/mipmap-anydpi-v26/icon_3_launcher.xml new file mode 100644 index 0000000000..1e6219cb3d --- /dev/null +++ b/TMessagesProj/src/main/res/mipmap-anydpi-v26/icon_3_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/TMessagesProj/src/main/res/mipmap-anydpi-v26/icon_3_launcher_round.xml b/TMessagesProj/src/main/res/mipmap-anydpi-v26/icon_3_launcher_round.xml new file mode 100644 index 0000000000..1b1050a687 --- /dev/null +++ b/TMessagesProj/src/main/res/mipmap-anydpi-v26/icon_3_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/TMessagesProj/src/main/res/mipmap-anydpi-v26/icon_3_launcher_sa.xml b/TMessagesProj/src/main/res/mipmap-anydpi-v26/icon_3_launcher_sa.xml new file mode 100644 index 0000000000..2c880e7841 --- /dev/null +++ b/TMessagesProj/src/main/res/mipmap-anydpi-v26/icon_3_launcher_sa.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/TMessagesProj/src/main/res/mipmap-hdpi/ic_launcher_nagram_colorful.png b/TMessagesProj/src/main/res/mipmap-hdpi/ic_launcher_nagram_colorful.png new file mode 100644 index 0000000000..20ba8f43ad Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-hdpi/ic_launcher_nagram_colorful.png differ diff --git a/TMessagesProj/src/main/res/mipmap-hdpi/ic_launcher_nagram_colorful_round.png b/TMessagesProj/src/main/res/mipmap-hdpi/ic_launcher_nagram_colorful_round.png new file mode 100644 index 0000000000..3b04a5162e Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-hdpi/ic_launcher_nagram_colorful_round.png differ diff --git a/TMessagesProj/src/main/res/mipmap-hdpi/ic_launcher_nagram_darkgreen.png b/TMessagesProj/src/main/res/mipmap-hdpi/ic_launcher_nagram_darkgreen.png new file mode 100644 index 0000000000..e7ab6e8249 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-hdpi/ic_launcher_nagram_darkgreen.png differ diff --git a/TMessagesProj/src/main/res/mipmap-hdpi/ic_launcher_nagram_darkgreen_round.png b/TMessagesProj/src/main/res/mipmap-hdpi/ic_launcher_nagram_darkgreen_round.png new file mode 100644 index 0000000000..6b445ac5a5 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-hdpi/ic_launcher_nagram_darkgreen_round.png differ diff --git a/TMessagesProj/src/main/res/mipmap-hdpi/ic_launcher_nagram_google.png b/TMessagesProj/src/main/res/mipmap-hdpi/ic_launcher_nagram_google.png new file mode 100644 index 0000000000..b1b3b93d63 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-hdpi/ic_launcher_nagram_google.png differ diff --git a/TMessagesProj/src/main/res/mipmap-hdpi/ic_launcher_nagram_google_round.png b/TMessagesProj/src/main/res/mipmap-hdpi/ic_launcher_nagram_google_round.png new file mode 100644 index 0000000000..cb9906a83c Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-hdpi/ic_launcher_nagram_google_round.png differ diff --git a/TMessagesProj/src/main/res/mipmap-hdpi/ic_launcher_nagram_neon.png b/TMessagesProj/src/main/res/mipmap-hdpi/ic_launcher_nagram_neon.png new file mode 100644 index 0000000000..84880af4f9 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-hdpi/ic_launcher_nagram_neon.png differ diff --git a/TMessagesProj/src/main/res/mipmap-hdpi/ic_launcher_nagram_neon_round.png b/TMessagesProj/src/main/res/mipmap-hdpi/ic_launcher_nagram_neon_round.png new file mode 100644 index 0000000000..2216633550 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-hdpi/ic_launcher_nagram_neon_round.png differ diff --git a/TMessagesProj/src/main/res/mipmap-hdpi/icon_3_foreground.png b/TMessagesProj/src/main/res/mipmap-hdpi/icon_3_foreground.png new file mode 100644 index 0000000000..bbd11247c4 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-hdpi/icon_3_foreground.png differ diff --git a/TMessagesProj/src/main/res/mipmap-hdpi/icon_3_foreground_round.png b/TMessagesProj/src/main/res/mipmap-hdpi/icon_3_foreground_round.png new file mode 100644 index 0000000000..4b14e52648 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-hdpi/icon_3_foreground_round.png differ diff --git a/TMessagesProj/src/main/res/mipmap-hdpi/icon_3_foreground_sa.png b/TMessagesProj/src/main/res/mipmap-hdpi/icon_3_foreground_sa.png new file mode 100644 index 0000000000..2474f0e303 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-hdpi/icon_3_foreground_sa.png differ diff --git a/TMessagesProj/src/main/res/mipmap-hdpi/icon_3_launcher.png b/TMessagesProj/src/main/res/mipmap-hdpi/icon_3_launcher.png new file mode 100644 index 0000000000..b8b31b914c Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-hdpi/icon_3_launcher.png differ diff --git a/TMessagesProj/src/main/res/mipmap-hdpi/icon_3_launcher_round.png b/TMessagesProj/src/main/res/mipmap-hdpi/icon_3_launcher_round.png new file mode 100644 index 0000000000..faeb4eeef6 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-hdpi/icon_3_launcher_round.png differ diff --git a/TMessagesProj/src/main/res/mipmap-hdpi/icon_3_launcher_sa.png b/TMessagesProj/src/main/res/mipmap-hdpi/icon_3_launcher_sa.png new file mode 100644 index 0000000000..60f76574e0 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-hdpi/icon_3_launcher_sa.png differ diff --git a/TMessagesProj/src/main/res/mipmap-hdpi/icon_background_colorful.png b/TMessagesProj/src/main/res/mipmap-hdpi/icon_background_colorful.png new file mode 100644 index 0000000000..568d86eed9 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-hdpi/icon_background_colorful.png differ diff --git a/TMessagesProj/src/main/res/mipmap-hdpi/icon_background_darkgreen.png b/TMessagesProj/src/main/res/mipmap-hdpi/icon_background_darkgreen.png new file mode 100644 index 0000000000..1a7fd339c7 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-hdpi/icon_background_darkgreen.png differ diff --git a/TMessagesProj/src/main/res/mipmap-hdpi/icon_background_google.png b/TMessagesProj/src/main/res/mipmap-hdpi/icon_background_google.png new file mode 100644 index 0000000000..568d86eed9 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-hdpi/icon_background_google.png differ diff --git a/TMessagesProj/src/main/res/mipmap-hdpi/icon_background_nagram.png b/TMessagesProj/src/main/res/mipmap-hdpi/icon_background_nagram.png new file mode 100644 index 0000000000..568d86eed9 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-hdpi/icon_background_nagram.png differ diff --git a/TMessagesProj/src/main/res/mipmap-hdpi/icon_background_neon.png b/TMessagesProj/src/main/res/mipmap-hdpi/icon_background_neon.png new file mode 100644 index 0000000000..b9a8fc94a5 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-hdpi/icon_background_neon.png differ diff --git a/TMessagesProj/src/main/res/mipmap-hdpi/icon_foreground_colorful.png b/TMessagesProj/src/main/res/mipmap-hdpi/icon_foreground_colorful.png new file mode 100644 index 0000000000..ae28f29009 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-hdpi/icon_foreground_colorful.png differ diff --git a/TMessagesProj/src/main/res/mipmap-hdpi/icon_foreground_darkgreen.png b/TMessagesProj/src/main/res/mipmap-hdpi/icon_foreground_darkgreen.png new file mode 100644 index 0000000000..301e9b4836 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-hdpi/icon_foreground_darkgreen.png differ diff --git a/TMessagesProj/src/main/res/mipmap-hdpi/icon_foreground_google.png b/TMessagesProj/src/main/res/mipmap-hdpi/icon_foreground_google.png new file mode 100644 index 0000000000..88149330c6 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-hdpi/icon_foreground_google.png differ diff --git a/TMessagesProj/src/main/res/mipmap-hdpi/icon_foreground_nagram.png b/TMessagesProj/src/main/res/mipmap-hdpi/icon_foreground_nagram.png new file mode 100644 index 0000000000..3e61a4923f Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-hdpi/icon_foreground_nagram.png differ diff --git a/TMessagesProj/src/main/res/mipmap-hdpi/icon_foreground_neon.png b/TMessagesProj/src/main/res/mipmap-hdpi/icon_foreground_neon.png new file mode 100644 index 0000000000..7ed6cff91e Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-hdpi/icon_foreground_neon.png differ diff --git a/TMessagesProj/src/main/res/mipmap-mdpi/ic_launcher_nagram_colorful.png b/TMessagesProj/src/main/res/mipmap-mdpi/ic_launcher_nagram_colorful.png new file mode 100644 index 0000000000..977dc54d40 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-mdpi/ic_launcher_nagram_colorful.png differ diff --git a/TMessagesProj/src/main/res/mipmap-mdpi/ic_launcher_nagram_colorful_round.png b/TMessagesProj/src/main/res/mipmap-mdpi/ic_launcher_nagram_colorful_round.png new file mode 100644 index 0000000000..c22940e96c Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-mdpi/ic_launcher_nagram_colorful_round.png differ diff --git a/TMessagesProj/src/main/res/mipmap-mdpi/ic_launcher_nagram_darkgreen.png b/TMessagesProj/src/main/res/mipmap-mdpi/ic_launcher_nagram_darkgreen.png new file mode 100644 index 0000000000..cb2840b11a Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-mdpi/ic_launcher_nagram_darkgreen.png differ diff --git a/TMessagesProj/src/main/res/mipmap-mdpi/ic_launcher_nagram_darkgreen_round.png b/TMessagesProj/src/main/res/mipmap-mdpi/ic_launcher_nagram_darkgreen_round.png new file mode 100644 index 0000000000..9e3d668d07 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-mdpi/ic_launcher_nagram_darkgreen_round.png differ diff --git a/TMessagesProj/src/main/res/mipmap-mdpi/ic_launcher_nagram_google.png b/TMessagesProj/src/main/res/mipmap-mdpi/ic_launcher_nagram_google.png new file mode 100644 index 0000000000..62b4f6c02c Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-mdpi/ic_launcher_nagram_google.png differ diff --git a/TMessagesProj/src/main/res/mipmap-mdpi/ic_launcher_nagram_google_round.png b/TMessagesProj/src/main/res/mipmap-mdpi/ic_launcher_nagram_google_round.png new file mode 100644 index 0000000000..3e0393d0ee Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-mdpi/ic_launcher_nagram_google_round.png differ diff --git a/TMessagesProj/src/main/res/mipmap-mdpi/ic_launcher_nagram_neon.png b/TMessagesProj/src/main/res/mipmap-mdpi/ic_launcher_nagram_neon.png new file mode 100644 index 0000000000..fe44841fd3 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-mdpi/ic_launcher_nagram_neon.png differ diff --git a/TMessagesProj/src/main/res/mipmap-mdpi/ic_launcher_nagram_neon_round.png b/TMessagesProj/src/main/res/mipmap-mdpi/ic_launcher_nagram_neon_round.png new file mode 100644 index 0000000000..dc656fc9b4 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-mdpi/ic_launcher_nagram_neon_round.png differ diff --git a/TMessagesProj/src/main/res/mipmap-mdpi/icon_3_foreground.png b/TMessagesProj/src/main/res/mipmap-mdpi/icon_3_foreground.png new file mode 100644 index 0000000000..7f722ba4c8 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-mdpi/icon_3_foreground.png differ diff --git a/TMessagesProj/src/main/res/mipmap-mdpi/icon_3_foreground_round.png b/TMessagesProj/src/main/res/mipmap-mdpi/icon_3_foreground_round.png new file mode 100644 index 0000000000..f98bec433d Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-mdpi/icon_3_foreground_round.png differ diff --git a/TMessagesProj/src/main/res/mipmap-mdpi/icon_3_foreground_sa.png b/TMessagesProj/src/main/res/mipmap-mdpi/icon_3_foreground_sa.png new file mode 100644 index 0000000000..1b57c5af79 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-mdpi/icon_3_foreground_sa.png differ diff --git a/TMessagesProj/src/main/res/mipmap-mdpi/icon_3_launcher.png b/TMessagesProj/src/main/res/mipmap-mdpi/icon_3_launcher.png new file mode 100644 index 0000000000..bd81646e18 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-mdpi/icon_3_launcher.png differ diff --git a/TMessagesProj/src/main/res/mipmap-mdpi/icon_3_launcher_round.png b/TMessagesProj/src/main/res/mipmap-mdpi/icon_3_launcher_round.png new file mode 100644 index 0000000000..13511cb4c2 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-mdpi/icon_3_launcher_round.png differ diff --git a/TMessagesProj/src/main/res/mipmap-mdpi/icon_3_launcher_sa.png b/TMessagesProj/src/main/res/mipmap-mdpi/icon_3_launcher_sa.png new file mode 100644 index 0000000000..ea53f5819e Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-mdpi/icon_3_launcher_sa.png differ diff --git a/TMessagesProj/src/main/res/mipmap-mdpi/icon_background_colorful.png b/TMessagesProj/src/main/res/mipmap-mdpi/icon_background_colorful.png new file mode 100644 index 0000000000..7749da77d9 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-mdpi/icon_background_colorful.png differ diff --git a/TMessagesProj/src/main/res/mipmap-mdpi/icon_background_darkgreen.png b/TMessagesProj/src/main/res/mipmap-mdpi/icon_background_darkgreen.png new file mode 100644 index 0000000000..77c0c4d246 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-mdpi/icon_background_darkgreen.png differ diff --git a/TMessagesProj/src/main/res/mipmap-mdpi/icon_background_google.png b/TMessagesProj/src/main/res/mipmap-mdpi/icon_background_google.png new file mode 100644 index 0000000000..7749da77d9 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-mdpi/icon_background_google.png differ diff --git a/TMessagesProj/src/main/res/mipmap-mdpi/icon_background_nagram.png b/TMessagesProj/src/main/res/mipmap-mdpi/icon_background_nagram.png new file mode 100644 index 0000000000..7749da77d9 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-mdpi/icon_background_nagram.png differ diff --git a/TMessagesProj/src/main/res/mipmap-mdpi/icon_background_neon.png b/TMessagesProj/src/main/res/mipmap-mdpi/icon_background_neon.png new file mode 100644 index 0000000000..910527a50e Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-mdpi/icon_background_neon.png differ diff --git a/TMessagesProj/src/main/res/mipmap-mdpi/icon_foreground_colorful.png b/TMessagesProj/src/main/res/mipmap-mdpi/icon_foreground_colorful.png new file mode 100644 index 0000000000..f40b2f1b7f Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-mdpi/icon_foreground_colorful.png differ diff --git a/TMessagesProj/src/main/res/mipmap-mdpi/icon_foreground_darkgreen.png b/TMessagesProj/src/main/res/mipmap-mdpi/icon_foreground_darkgreen.png new file mode 100644 index 0000000000..28ada74c9c Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-mdpi/icon_foreground_darkgreen.png differ diff --git a/TMessagesProj/src/main/res/mipmap-mdpi/icon_foreground_google.png b/TMessagesProj/src/main/res/mipmap-mdpi/icon_foreground_google.png new file mode 100644 index 0000000000..98ae58cd4d Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-mdpi/icon_foreground_google.png differ diff --git a/TMessagesProj/src/main/res/mipmap-mdpi/icon_foreground_nagram.png b/TMessagesProj/src/main/res/mipmap-mdpi/icon_foreground_nagram.png new file mode 100644 index 0000000000..5c0b2a8aea Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-mdpi/icon_foreground_nagram.png differ diff --git a/TMessagesProj/src/main/res/mipmap-mdpi/icon_foreground_neon.png b/TMessagesProj/src/main/res/mipmap-mdpi/icon_foreground_neon.png new file mode 100644 index 0000000000..4f5bf037a1 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-mdpi/icon_foreground_neon.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xhdpi/ic_launcher_nagram_colorful.png b/TMessagesProj/src/main/res/mipmap-xhdpi/ic_launcher_nagram_colorful.png new file mode 100644 index 0000000000..2caef4eda6 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xhdpi/ic_launcher_nagram_colorful.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xhdpi/ic_launcher_nagram_colorful_round.png b/TMessagesProj/src/main/res/mipmap-xhdpi/ic_launcher_nagram_colorful_round.png new file mode 100644 index 0000000000..f86aa870e4 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xhdpi/ic_launcher_nagram_colorful_round.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xhdpi/ic_launcher_nagram_darkgreen.png b/TMessagesProj/src/main/res/mipmap-xhdpi/ic_launcher_nagram_darkgreen.png new file mode 100644 index 0000000000..31ea6a735c Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xhdpi/ic_launcher_nagram_darkgreen.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xhdpi/ic_launcher_nagram_darkgreen_round.png b/TMessagesProj/src/main/res/mipmap-xhdpi/ic_launcher_nagram_darkgreen_round.png new file mode 100644 index 0000000000..b03402c84f Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xhdpi/ic_launcher_nagram_darkgreen_round.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xhdpi/ic_launcher_nagram_google.png b/TMessagesProj/src/main/res/mipmap-xhdpi/ic_launcher_nagram_google.png new file mode 100644 index 0000000000..a29dc7bfed Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xhdpi/ic_launcher_nagram_google.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xhdpi/ic_launcher_nagram_google_round.png b/TMessagesProj/src/main/res/mipmap-xhdpi/ic_launcher_nagram_google_round.png new file mode 100644 index 0000000000..ee45f5bcc1 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xhdpi/ic_launcher_nagram_google_round.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xhdpi/ic_launcher_nagram_neon.png b/TMessagesProj/src/main/res/mipmap-xhdpi/ic_launcher_nagram_neon.png new file mode 100644 index 0000000000..3b9ab7a9d4 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xhdpi/ic_launcher_nagram_neon.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xhdpi/ic_launcher_nagram_neon_round.png b/TMessagesProj/src/main/res/mipmap-xhdpi/ic_launcher_nagram_neon_round.png new file mode 100644 index 0000000000..1eb07df95e Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xhdpi/ic_launcher_nagram_neon_round.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xhdpi/icon_3_foreground.png b/TMessagesProj/src/main/res/mipmap-xhdpi/icon_3_foreground.png new file mode 100644 index 0000000000..820f495ef8 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xhdpi/icon_3_foreground.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xhdpi/icon_3_foreground_round.png b/TMessagesProj/src/main/res/mipmap-xhdpi/icon_3_foreground_round.png new file mode 100644 index 0000000000..3cc064a3f2 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xhdpi/icon_3_foreground_round.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xhdpi/icon_3_foreground_sa.png b/TMessagesProj/src/main/res/mipmap-xhdpi/icon_3_foreground_sa.png new file mode 100644 index 0000000000..15ae585dae Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xhdpi/icon_3_foreground_sa.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xhdpi/icon_3_launcher.png b/TMessagesProj/src/main/res/mipmap-xhdpi/icon_3_launcher.png new file mode 100644 index 0000000000..9113f1b611 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xhdpi/icon_3_launcher.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xhdpi/icon_3_launcher_round.png b/TMessagesProj/src/main/res/mipmap-xhdpi/icon_3_launcher_round.png new file mode 100644 index 0000000000..ea6701760c Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xhdpi/icon_3_launcher_round.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xhdpi/icon_3_launcher_sa.png b/TMessagesProj/src/main/res/mipmap-xhdpi/icon_3_launcher_sa.png new file mode 100644 index 0000000000..18fba2e996 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xhdpi/icon_3_launcher_sa.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xhdpi/icon_background_colorful.png b/TMessagesProj/src/main/res/mipmap-xhdpi/icon_background_colorful.png new file mode 100644 index 0000000000..a5ce28d222 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xhdpi/icon_background_colorful.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xhdpi/icon_background_darkgreen.png b/TMessagesProj/src/main/res/mipmap-xhdpi/icon_background_darkgreen.png new file mode 100644 index 0000000000..a86812b322 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xhdpi/icon_background_darkgreen.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xhdpi/icon_background_google.png b/TMessagesProj/src/main/res/mipmap-xhdpi/icon_background_google.png new file mode 100644 index 0000000000..a5ce28d222 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xhdpi/icon_background_google.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xhdpi/icon_background_nagram.png b/TMessagesProj/src/main/res/mipmap-xhdpi/icon_background_nagram.png new file mode 100644 index 0000000000..a5ce28d222 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xhdpi/icon_background_nagram.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xhdpi/icon_background_neon.png b/TMessagesProj/src/main/res/mipmap-xhdpi/icon_background_neon.png new file mode 100644 index 0000000000..7dca3125a0 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xhdpi/icon_background_neon.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xhdpi/icon_foreground_colorful.png b/TMessagesProj/src/main/res/mipmap-xhdpi/icon_foreground_colorful.png new file mode 100644 index 0000000000..6e8c9bf614 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xhdpi/icon_foreground_colorful.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xhdpi/icon_foreground_darkgreen.png b/TMessagesProj/src/main/res/mipmap-xhdpi/icon_foreground_darkgreen.png new file mode 100644 index 0000000000..d6c7ecd2ca Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xhdpi/icon_foreground_darkgreen.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xhdpi/icon_foreground_google.png b/TMessagesProj/src/main/res/mipmap-xhdpi/icon_foreground_google.png new file mode 100644 index 0000000000..9de8d602d8 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xhdpi/icon_foreground_google.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xhdpi/icon_foreground_nagram.png b/TMessagesProj/src/main/res/mipmap-xhdpi/icon_foreground_nagram.png new file mode 100644 index 0000000000..33d21934cf Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xhdpi/icon_foreground_nagram.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xhdpi/icon_foreground_neon.png b/TMessagesProj/src/main/res/mipmap-xhdpi/icon_foreground_neon.png new file mode 100644 index 0000000000..db13f10669 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xhdpi/icon_foreground_neon.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxhdpi/ic_launcher_nagram_colorful.png b/TMessagesProj/src/main/res/mipmap-xxhdpi/ic_launcher_nagram_colorful.png new file mode 100644 index 0000000000..6e5f783ddc Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxhdpi/ic_launcher_nagram_colorful.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxhdpi/ic_launcher_nagram_colorful_round.png b/TMessagesProj/src/main/res/mipmap-xxhdpi/ic_launcher_nagram_colorful_round.png new file mode 100644 index 0000000000..f728794536 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxhdpi/ic_launcher_nagram_colorful_round.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxhdpi/ic_launcher_nagram_darkgreen.png b/TMessagesProj/src/main/res/mipmap-xxhdpi/ic_launcher_nagram_darkgreen.png new file mode 100644 index 0000000000..205989e046 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxhdpi/ic_launcher_nagram_darkgreen.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxhdpi/ic_launcher_nagram_darkgreen_round.png b/TMessagesProj/src/main/res/mipmap-xxhdpi/ic_launcher_nagram_darkgreen_round.png new file mode 100644 index 0000000000..e81d5eb074 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxhdpi/ic_launcher_nagram_darkgreen_round.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxhdpi/ic_launcher_nagram_google.png b/TMessagesProj/src/main/res/mipmap-xxhdpi/ic_launcher_nagram_google.png new file mode 100644 index 0000000000..572b5f316c Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxhdpi/ic_launcher_nagram_google.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxhdpi/ic_launcher_nagram_google_round.png b/TMessagesProj/src/main/res/mipmap-xxhdpi/ic_launcher_nagram_google_round.png new file mode 100644 index 0000000000..e3ff6d5c90 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxhdpi/ic_launcher_nagram_google_round.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxhdpi/ic_launcher_nagram_neon.png b/TMessagesProj/src/main/res/mipmap-xxhdpi/ic_launcher_nagram_neon.png new file mode 100644 index 0000000000..220bc7b1ff Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxhdpi/ic_launcher_nagram_neon.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxhdpi/ic_launcher_nagram_neon_round.png b/TMessagesProj/src/main/res/mipmap-xxhdpi/ic_launcher_nagram_neon_round.png new file mode 100644 index 0000000000..8a751c5195 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxhdpi/ic_launcher_nagram_neon_round.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_3_foreground.png b/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_3_foreground.png new file mode 100644 index 0000000000..7a00e52048 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_3_foreground.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_3_foreground_round.png b/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_3_foreground_round.png new file mode 100644 index 0000000000..478eae3eeb Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_3_foreground_round.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_3_foreground_sa.png b/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_3_foreground_sa.png new file mode 100644 index 0000000000..6af96e1627 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_3_foreground_sa.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_3_launcher.png b/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_3_launcher.png new file mode 100644 index 0000000000..033000f85f Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_3_launcher.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_3_launcher_round.png b/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_3_launcher_round.png new file mode 100644 index 0000000000..05510c72c2 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_3_launcher_round.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_3_launcher_sa.png b/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_3_launcher_sa.png new file mode 100644 index 0000000000..941db6791d Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_3_launcher_sa.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_background_colorful.png b/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_background_colorful.png new file mode 100644 index 0000000000..997c19c208 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_background_colorful.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_background_darkgreen.png b/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_background_darkgreen.png new file mode 100644 index 0000000000..4c3ba6e63a Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_background_darkgreen.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_background_google.png b/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_background_google.png new file mode 100644 index 0000000000..997c19c208 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_background_google.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_background_nagram.png b/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_background_nagram.png new file mode 100644 index 0000000000..997c19c208 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_background_nagram.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_background_neon.png b/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_background_neon.png new file mode 100644 index 0000000000..79d72d7265 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_background_neon.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_foreground_colorful.png b/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_foreground_colorful.png new file mode 100644 index 0000000000..a5699d3769 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_foreground_colorful.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_foreground_darkgreen.png b/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_foreground_darkgreen.png new file mode 100644 index 0000000000..89052bf6eb Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_foreground_darkgreen.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_foreground_google.png b/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_foreground_google.png new file mode 100644 index 0000000000..de13ceaccc Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_foreground_google.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_foreground_nagram.png b/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_foreground_nagram.png new file mode 100644 index 0000000000..b5c1aca266 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_foreground_nagram.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_foreground_neon.png b/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_foreground_neon.png new file mode 100644 index 0000000000..1825f17529 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_foreground_neon.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxxhdpi/ic_launcher_nagram_colorful.png b/TMessagesProj/src/main/res/mipmap-xxxhdpi/ic_launcher_nagram_colorful.png new file mode 100644 index 0000000000..51d31513cc Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxxhdpi/ic_launcher_nagram_colorful.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxxhdpi/ic_launcher_nagram_colorful_round.png b/TMessagesProj/src/main/res/mipmap-xxxhdpi/ic_launcher_nagram_colorful_round.png new file mode 100644 index 0000000000..5566d339b8 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxxhdpi/ic_launcher_nagram_colorful_round.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxxhdpi/ic_launcher_nagram_darkgreen.png b/TMessagesProj/src/main/res/mipmap-xxxhdpi/ic_launcher_nagram_darkgreen.png new file mode 100644 index 0000000000..fcc0b5aef3 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxxhdpi/ic_launcher_nagram_darkgreen.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxxhdpi/ic_launcher_nagram_darkgreen_round.png b/TMessagesProj/src/main/res/mipmap-xxxhdpi/ic_launcher_nagram_darkgreen_round.png new file mode 100644 index 0000000000..7d8b2af03c Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxxhdpi/ic_launcher_nagram_darkgreen_round.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxxhdpi/ic_launcher_nagram_google.png b/TMessagesProj/src/main/res/mipmap-xxxhdpi/ic_launcher_nagram_google.png new file mode 100644 index 0000000000..e956b2ef66 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxxhdpi/ic_launcher_nagram_google.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxxhdpi/ic_launcher_nagram_google_round.png b/TMessagesProj/src/main/res/mipmap-xxxhdpi/ic_launcher_nagram_google_round.png new file mode 100644 index 0000000000..e54e90022a Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxxhdpi/ic_launcher_nagram_google_round.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxxhdpi/ic_launcher_nagram_neon.png b/TMessagesProj/src/main/res/mipmap-xxxhdpi/ic_launcher_nagram_neon.png new file mode 100644 index 0000000000..46e75081e6 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxxhdpi/ic_launcher_nagram_neon.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxxhdpi/ic_launcher_nagram_neon_round.png b/TMessagesProj/src/main/res/mipmap-xxxhdpi/ic_launcher_nagram_neon_round.png new file mode 100644 index 0000000000..7e5a04086b Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxxhdpi/ic_launcher_nagram_neon_round.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_3_foreground.png b/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_3_foreground.png new file mode 100644 index 0000000000..a94b0236b2 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_3_foreground.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_3_foreground_round.png b/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_3_foreground_round.png new file mode 100644 index 0000000000..8ab407167b Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_3_foreground_round.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_3_foreground_sa.png b/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_3_foreground_sa.png new file mode 100644 index 0000000000..1d898cce6b Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_3_foreground_sa.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_3_launcher.png b/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_3_launcher.png new file mode 100644 index 0000000000..4c6da9fbc7 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_3_launcher.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_3_launcher_round.png b/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_3_launcher_round.png new file mode 100644 index 0000000000..31e00d73ed Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_3_launcher_round.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_3_launcher_sa.png b/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_3_launcher_sa.png new file mode 100644 index 0000000000..470554ba08 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_3_launcher_sa.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_background_colorful.png b/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_background_colorful.png new file mode 100644 index 0000000000..a89e588354 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_background_colorful.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_background_darkgreen.png b/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_background_darkgreen.png new file mode 100644 index 0000000000..d04999d5b1 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_background_darkgreen.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_background_google.png b/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_background_google.png new file mode 100644 index 0000000000..a89e588354 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_background_google.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_background_nagram.png b/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_background_nagram.png new file mode 100644 index 0000000000..a89e588354 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_background_nagram.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_background_neon.png b/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_background_neon.png new file mode 100644 index 0000000000..920620f745 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_background_neon.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_foreground_colorful.png b/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_foreground_colorful.png new file mode 100644 index 0000000000..a455054b62 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_foreground_colorful.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_foreground_darkgreen.png b/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_foreground_darkgreen.png new file mode 100644 index 0000000000..bda95e513b Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_foreground_darkgreen.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_foreground_google.png b/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_foreground_google.png new file mode 100644 index 0000000000..e1254bf969 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_foreground_google.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_foreground_nagram.png b/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_foreground_nagram.png new file mode 100644 index 0000000000..37d5c79396 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_foreground_nagram.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_foreground_neon.png b/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_foreground_neon.png new file mode 100644 index 0000000000..523641f559 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_foreground_neon.png differ diff --git a/TMessagesProj/src/main/res/values-ar/strings_nullgram.xml b/TMessagesProj/src/main/res/values-ar/strings_nullgram.xml index 9f3b6ea99d..32b70aeb1c 100644 --- a/TMessagesProj/src/main/res/values-ar/strings_nullgram.xml +++ b/TMessagesProj/src/main/res/values-ar/strings_nullgram.xml @@ -161,7 +161,7 @@ الأمر تعيين رسالة سريعة مخصصة لا يمكنك إدخال أي شيء هنا - 20 و 150<]]> + 20 و 200<]]> يجب عليك إدخال رقم! يجب عليك إدخال سلسلة! إرسال كـ رد diff --git a/TMessagesProj/src/main/res/values-cs/strings_nullgram.xml b/TMessagesProj/src/main/res/values-cs/strings_nullgram.xml index 0d57aad7dd..78e65e5ac3 100644 --- a/TMessagesProj/src/main/res/values-cs/strings_nullgram.xml +++ b/TMessagesProj/src/main/res/values-cs/strings_nullgram.xml @@ -159,7 +159,7 @@ Command Set Custom Quick Message You can\'t input nothing here - 20 and 150<]]> + 20 and 200<]]> You must input a number! You must input a string! Send As Reply diff --git a/TMessagesProj/src/main/res/values-da/strings_nullgram.xml b/TMessagesProj/src/main/res/values-da/strings_nullgram.xml index 9bdee966e6..c9265a8e0a 100644 --- a/TMessagesProj/src/main/res/values-da/strings_nullgram.xml +++ b/TMessagesProj/src/main/res/values-da/strings_nullgram.xml @@ -159,7 +159,7 @@ Command Set Custom Quick Message You can\'t input nothing here - 20 and 150<]]> + 20 and 200<]]> You must input a number! You must input a string! Send As Reply diff --git a/TMessagesProj/src/main/res/values-de/strings_nullgram.xml b/TMessagesProj/src/main/res/values-de/strings_nullgram.xml index 526a6b24cc..d9dc316296 100644 --- a/TMessagesProj/src/main/res/values-de/strings_nullgram.xml +++ b/TMessagesProj/src/main/res/values-de/strings_nullgram.xml @@ -159,7 +159,7 @@ Command Set Custom Quick Message You can\'t input nothing here - 20 and 150<]]> + 20 and 200<]]> You must input a number! You must input a string! Send As Reply diff --git a/TMessagesProj/src/main/res/values-el/strings_nullgram.xml b/TMessagesProj/src/main/res/values-el/strings_nullgram.xml index 9bdee966e6..c9265a8e0a 100644 --- a/TMessagesProj/src/main/res/values-el/strings_nullgram.xml +++ b/TMessagesProj/src/main/res/values-el/strings_nullgram.xml @@ -159,7 +159,7 @@ Command Set Custom Quick Message You can\'t input nothing here - 20 and 150<]]> + 20 and 200<]]> You must input a number! You must input a string! Send As Reply diff --git a/TMessagesProj/src/main/res/values-es/strings_nullgram.xml b/TMessagesProj/src/main/res/values-es/strings_nullgram.xml index 02cd8fb857..1fd5831343 100644 --- a/TMessagesProj/src/main/res/values-es/strings_nullgram.xml +++ b/TMessagesProj/src/main/res/values-es/strings_nullgram.xml @@ -159,7 +159,7 @@ Orden Definir mensaje rápido personalizado No puedes escribir nada aquí - 20 y 150<]]> + 20 y 200<]]> ¡Debes introducir un número! ¡Debes introducir una cadena! Enviar como respuesta diff --git a/TMessagesProj/src/main/res/values-fa/strings_nullgram.xml b/TMessagesProj/src/main/res/values-fa/strings_nullgram.xml index 1689adb154..5c44f14480 100644 --- a/TMessagesProj/src/main/res/values-fa/strings_nullgram.xml +++ b/TMessagesProj/src/main/res/values-fa/strings_nullgram.xml @@ -159,7 +159,7 @@ Command Set Custom Quick Message You can\'t input nothing here - 20 and 150<]]> + 20 and 200<]]> You must input a number! You must input a string! Send As Reply diff --git a/TMessagesProj/src/main/res/values-fr/strings_nullgram.xml b/TMessagesProj/src/main/res/values-fr/strings_nullgram.xml index 9bdee966e6..c9265a8e0a 100644 --- a/TMessagesProj/src/main/res/values-fr/strings_nullgram.xml +++ b/TMessagesProj/src/main/res/values-fr/strings_nullgram.xml @@ -159,7 +159,7 @@ Command Set Custom Quick Message You can\'t input nothing here - 20 and 150<]]> + 20 and 200<]]> You must input a number! You must input a string! Send As Reply diff --git a/TMessagesProj/src/main/res/values-id/strings_nullgram.xml b/TMessagesProj/src/main/res/values-id/strings_nullgram.xml index e29713d89a..b506e97779 100644 --- a/TMessagesProj/src/main/res/values-id/strings_nullgram.xml +++ b/TMessagesProj/src/main/res/values-id/strings_nullgram.xml @@ -159,7 +159,7 @@ Perintah Atur Pesan Kirim Cepat Kustom Anda tidak boleh mengosongkan masukan disini - 20 dan <150]]> + 20 dan <200]]> Anda harus masukkan sebuah angka! Anda harus masukkan sebuah string! Kirim Sebagai Balasan diff --git a/TMessagesProj/src/main/res/values-it/strings_nullgram.xml b/TMessagesProj/src/main/res/values-it/strings_nullgram.xml index 289172d2e5..ed2e3d50fb 100644 --- a/TMessagesProj/src/main/res/values-it/strings_nullgram.xml +++ b/TMessagesProj/src/main/res/values-it/strings_nullgram.xml @@ -159,7 +159,7 @@ Comando Imposta messaggio rapido custom Non puoi inserire nulla qui - + Devi inserire un numero! Devi inserire una stringa! Invia come risposta diff --git a/TMessagesProj/src/main/res/values-ja/strings_nullgram.xml b/TMessagesProj/src/main/res/values-ja/strings_nullgram.xml index c2d41f15ad..56aa726be4 100644 --- a/TMessagesProj/src/main/res/values-ja/strings_nullgram.xml +++ b/TMessagesProj/src/main/res/values-ja/strings_nullgram.xml @@ -18,15 +18,15 @@ ~ --> - Nullgramプッシュサービス - Nullgramの設定 + Nnngramプッシュサービス + Nnngramの設定 公式チャンネル チャット 実験的 公式サイト ソースコードを表示 カテゴリー - Nullgramについて + Nnngramについて 更新はありません。 新しいバージョンが利用可能です。 リリースバリアントを自動でチェックしましたが一致しませんでした。\nGitHubから手動でダウンロードしてください。 @@ -43,7 +43,7 @@ 無効なアクセストークン QRでログイン QRコードを別のデバイスでスキャンしてログイン。 - Nullgram %1$s\nBased on TELEOFFICIAL %2$s + Nnngram %1$s\nBased on TELEOFFICIAL %2$s 制限の理由 Bot API IDを表示 グループステッカーパックを非表示 @@ -61,6 +61,8 @@ HH:mm:ss キャッシュを削除 繰り返す + コピーとして繰り返す + 反転 メッセージを保存 履歴を見る 送信者なしで転送 @@ -86,7 +88,7 @@ 自動更新 安定版 プレビュー (不安定) - Nullgramの更新 + Nnngramの更新 更新はありません 今後は表示しない アプリの更新について @@ -103,7 +105,7 @@ あなたの電話番号が誰でも見られる状態であることを検出しました。これにより、政府管理のハッカーがあなたの本当の身元を特定する可能性があります。OFFに設定してください! 「電話番号による検索を許可」をOFFに未設定であることを検出しました。これにより、政府管理のハッカーがあなたの本当の身元を特定する可能性があります。OFFに設定してください! 電話番号を非表示 - Android 12以降では、Nullgramでt.meのリンクを開くには、検証済みリンクにリンクを手動で追加する必要があります。 + Android 12以降では、Nnngramでt.meのリンクを開くには、検証済みリンクにリンクを手動で追加する必要があります。 アプリのリンクが確認されていません 正確な数値を表示 次のチャンネルへのジャンプを無効化 @@ -130,8 +132,8 @@ リアクションの返信を無視 未読のリアクションを自動的に既読にします。\nTELEOFFICIALサーバーで管理しているため、通知は表示されたままになります。 ステッカーのサイズ - にゃ - おぉ、かわいい女の子だ! + アニメグッズを買ってきて欲しい。 + おぉ、キュートな男の子だ! ステッカーのサイズをリセット 元に戻す やり直し @@ -159,7 +161,7 @@ コマンド カスタムクイックメッセージを設定 ここには何も入力できません - + 番号を入力する必要があります! 文字列を入力する必要があります! 返信として送信 @@ -180,7 +182,7 @@ パスコード 不明な設定 最初にパスコードを有効化する必要があります。 - Nullgramの設定で表示 + Nnngramの設定で表示 非表示にすると **リンクのみ** でこのページを開くことができます: パスコードを設定する パスコードを変更 @@ -230,7 +232,7 @@ 連絡先の追加時に電話番号を共有しない ステッカーの再読込みを無効化 内蔵のプロキシを自動で無効化 - NullgramがVPNのONを検出すると、内蔵のプロキシを自動的にOFFにします。 + NnngramがVPNのONを検出すると、内蔵のプロキシを自動的にOFFにします。 Cloudflare経由でWebSocketを介して TELEOFFICIALに接続をします。\n提供: Nullgram 提供: Nekogram X 自分でも簡単に導入できます! @@ -326,8 +328,8 @@ コード コードを作成 言語 - このメッセージはお使いのバージョンのNullgramではサポートされていません。表示するにはアプリを更新してください: -https://t.me/NullgramClient + このメッセージはお使いのバージョンのNnngramではサポートされていません。表示するにはアプリを更新してください: +https://t.me/Nnngram ユーザーが設定した返信の色を無視 タイトルを表示 タイトルを非表示 @@ -347,4 +349,44 @@ https://t.me/NullgramClient 無効なパターン 大きな写真を送信 詳細 + 今後確認しない + ファイルが見つかりません + ファイル情報がありません + 最近のファイルを検索 + ファイルは%1$s件を超えてはいけません + 状態を表示 + 現在のフォルダに**%1$s**の結果はありません。 + Google + Colorful + Dark Green + Neon + スワイプでアーカイブを解除しない + 入力フィールドのボットボタンを非表示 + メッセージの既読ツールチップを非表示 + 通知バブルを無効化 + オンライン状態を表示 + 写真のサイドアクションを無効化 + メッセージを統合 + 「Zalgo」シンボルをフィルター + フォルダ内の未読数を無視 + カスタムタイトル + カスタムタイトルを設定 + ドロワーリスト + テキストスタイル + 送信ボタンを非表示 + フィルターですべてミュートを非表示 + スクロール時にキーボードを非表示 + その場で検索 + GIFのサイズ + ブロック + ダイアログフローティングボタンを非表示 + チャンネルのミュートボタンを非表示 + PIPの自動表示を無効化 + MP4ドキュメントを動画として送信 + 動画の重力検出を無効化する + タイトル内のプロキシエントリを非表示 + チャンネル参加後に自動でミュート + 編集でXiaomi HyperAIを有効化 + DeepLX翻訳 + DeepLX API diff --git a/TMessagesProj/src/main/res/values-ko/strings_nullgram.xml b/TMessagesProj/src/main/res/values-ko/strings_nullgram.xml index 9bdee966e6..c9265a8e0a 100644 --- a/TMessagesProj/src/main/res/values-ko/strings_nullgram.xml +++ b/TMessagesProj/src/main/res/values-ko/strings_nullgram.xml @@ -159,7 +159,7 @@ Command Set Custom Quick Message You can\'t input nothing here - 20 and 150<]]> + 20 and 200<]]> You must input a number! You must input a string! Send As Reply diff --git a/TMessagesProj/src/main/res/values-night/styles.xml b/TMessagesProj/src/main/res/values-night/styles.xml index e5a85d925b..b69f3b0e96 100644 --- a/TMessagesProj/src/main/res/values-night/styles.xml +++ b/TMessagesProj/src/main/res/values-night/styles.xml @@ -22,7 +22,7 @@ #232d3a #000000 false - @drawable/tg_splash_320 + @drawable/na_splash_320 @integer/splash_screen_duration #1f2732 diff --git a/TMessagesProj/src/main/res/values-nl/strings_nullgram.xml b/TMessagesProj/src/main/res/values-nl/strings_nullgram.xml index 9bdee966e6..c9265a8e0a 100644 --- a/TMessagesProj/src/main/res/values-nl/strings_nullgram.xml +++ b/TMessagesProj/src/main/res/values-nl/strings_nullgram.xml @@ -159,7 +159,7 @@ Command Set Custom Quick Message You can\'t input nothing here - 20 and 150<]]> + 20 and 200<]]> You must input a number! You must input a string! Send As Reply diff --git a/TMessagesProj/src/main/res/values-pl/strings_nullgram.xml b/TMessagesProj/src/main/res/values-pl/strings_nullgram.xml index a2f08cd332..1df6f3c62f 100644 --- a/TMessagesProj/src/main/res/values-pl/strings_nullgram.xml +++ b/TMessagesProj/src/main/res/values-pl/strings_nullgram.xml @@ -159,7 +159,7 @@ Command Set Custom Quick Message You can\'t input nothing here - 20 and 150<]]> + 20 and 200<]]> You must input a number! You must input a string! Send As Reply diff --git a/TMessagesProj/src/main/res/values-pt/strings_nullgram.xml b/TMessagesProj/src/main/res/values-pt/strings_nullgram.xml index 9bdee966e6..c9265a8e0a 100644 --- a/TMessagesProj/src/main/res/values-pt/strings_nullgram.xml +++ b/TMessagesProj/src/main/res/values-pt/strings_nullgram.xml @@ -159,7 +159,7 @@ Command Set Custom Quick Message You can\'t input nothing here - 20 and 150<]]> + 20 and 200<]]> You must input a number! You must input a string! Send As Reply diff --git a/TMessagesProj/src/main/res/values-ru/strings_nullgram.xml b/TMessagesProj/src/main/res/values-ru/strings_nullgram.xml index 876e959e15..7a1cd92813 100644 --- a/TMessagesProj/src/main/res/values-ru/strings_nullgram.xml +++ b/TMessagesProj/src/main/res/values-ru/strings_nullgram.xml @@ -160,7 +160,7 @@ Команда Настройка быстрых сообщений Здесь ничего не введено - 20 и 150<]]> + 20 и 200<]]> Ты должен ввести число! Вы должны ввести текст! Отправить как ответ на предыдущее письмо diff --git a/TMessagesProj/src/main/res/values-tr/strings_nullgram.xml b/TMessagesProj/src/main/res/values-tr/strings_nullgram.xml index ccc058b0e8..92025bcbf4 100644 --- a/TMessagesProj/src/main/res/values-tr/strings_nullgram.xml +++ b/TMessagesProj/src/main/res/values-tr/strings_nullgram.xml @@ -159,7 +159,7 @@ Komut Özel Hızlı Mesaj Ayarla Buraya hiçbir şey giremezsiniz - 20 ve 150< olmalıdır 20 den büyük 150 den küçük]]> + 20 ve 200< olmalıdır 20 den büyük 200 den küçük]]> Bir sayı girmelisiniz! Bir dize girmelisiniz! Bir Yanıt Olarak diff --git a/TMessagesProj/src/main/res/values-uk/strings_nullgram.xml b/TMessagesProj/src/main/res/values-uk/strings_nullgram.xml index 04641d8d73..58b432d22c 100644 --- a/TMessagesProj/src/main/res/values-uk/strings_nullgram.xml +++ b/TMessagesProj/src/main/res/values-uk/strings_nullgram.xml @@ -159,7 +159,7 @@ Command Set Custom Quick Message You can\'t input nothing here - 20 and 150<]]> + 20 and 200<]]> You must input a number! You must input a string! Send As Reply diff --git a/TMessagesProj/src/main/res/values-uz/strings_nullgram.xml b/TMessagesProj/src/main/res/values-uz/strings_nullgram.xml index 39ae1ca6ce..eb9f8d1e8f 100644 --- a/TMessagesProj/src/main/res/values-uz/strings_nullgram.xml +++ b/TMessagesProj/src/main/res/values-uz/strings_nullgram.xml @@ -159,7 +159,7 @@ Command Set Custom Quick Message You can\'t input nothing here - 20 and 150<]]> + 20 and 200<]]> You must input a number! You must input a string! Send As Reply diff --git a/TMessagesProj/src/main/res/values-v31/styles.xml b/TMessagesProj/src/main/res/values-v31/styles.xml index acec6de2c4..7afcf13440 100644 --- a/TMessagesProj/src/main/res/values-v31/styles.xml +++ b/TMessagesProj/src/main/res/values-v31/styles.xml @@ -28,7 +28,7 @@ #000000 @style/MyTextViewStyle false - @drawable/tg_splash_320 + @drawable/na_splash_320 @integer/splash_screen_duration ?android:windowBackground diff --git a/TMessagesProj/src/main/res/values-zh-rTW/strings_nullgram.xml b/TMessagesProj/src/main/res/values-zh-rTW/strings_nullgram.xml index dd342e80af..acc2178839 100644 --- a/TMessagesProj/src/main/res/values-zh-rTW/strings_nullgram.xml +++ b/TMessagesProj/src/main/res/values-zh-rTW/strings_nullgram.xml @@ -61,6 +61,8 @@ HH:mm:ss 刪除已下載的文件 復讀 + 無引用復讀 + 反轉 儲存訊息 查閱歷史記錄 無引用轉發 @@ -88,10 +90,10 @@ 預覽版(不穩定) 更新 Nullgram 無更新 - 不再提醒 - 關於應用程式更新 - 要關注我們的公告和更新頻道嗎? - 切換發佈頻道 + 不再提示 + 關於應用更新 + 關注我們的公告和更新頻道? + 切換髮行通道 備份設定 匯入設定 重新啟動應用程式以生效 @@ -130,8 +132,8 @@ 忽略反應提示 它會自動將未讀的回應提及設為已讀。\n並且同步到其他裝置。\n通知仍將顯示,因為這由 TELEOFFICIAL 伺服器控制。 貼圖大小 - 幫我找一些動漫相關的東西。 - 哇,好可愛的女孩! + 給我一些很不錯的東西。 + wow, 是可愛的男孩子 重置貼紙大小 撤銷 重做 @@ -159,7 +161,7 @@ 命令 設定自訂快速訊息 這裡不能輸入空值 - + 你必須輸入一個數字! 你必須輸入一個字串! 以回覆方式發送 @@ -169,39 +171,39 @@ 檢查 TELEOFFICIAL 的**資料中心**狀態。 您所有的訊息已刪除 設定連結使用者 - 輸入使用者 ID 或機器人 ID - 無法找到用戶 - 链接的用户 - 將使用者連結至頻道。\n它將在連結的頻道個人資料顯示連結的使用者 - 連結使用者 - 覆寫頻道別名 - 如果設定了連結的使用者,它將覆寫頻道別名。 - 在聊天中標示連結的使用者 - 密碼 + 輸入使用者 ID 或 Bot ID + 找不到該使用者 + 關聯的使用者 + 將使用者與頻道關聯。\n它將在關聯的頻道頁面中顯示被關聯的使用者 + 關聯使用者 + 覆蓋頻道別名 + 如果已設定關聯使用者,將會覆蓋頻道別名。 + 標記群組中關聯的使用者 + 密碼鎖 未知設定 您必須先啟用密碼鎖 - 在 Nullgram 設定中顯示 - 隱藏後,您**僅能**透過連結開啟設定: - 設定密碼 - 更改密碼 - 移除密碼 - 隱藏帳號 - 使用緊急碼登出 - 為每個帳戶設定不同的密碼,並透過輸入相應的密碼切換它們。 - 緊急碼 - 設定緊急碼 - 更改緊急碼 - 禁用發送狀態類型 - 關閉緊急碼 - 您確定要關閉緊急碼嗎? - 您確定要移除此帳戶的密碼嗎? - 若發生問題,使用緊急碼登出帳戶。 - 複製照片 - 複製相片 - 隱藏高級貼圖動畫 - 高級 - 加快上傳速度 - 顯示轉發時的分頁 + 在Nullgram設定中檢視 + 隱藏後,您**僅**可以透過連結開啟設定: + 設定密碼鎖 + 更改密碼鎖 + 移除密碼鎖 + 隱藏賬戶 + 使用恢復程式碼登出 + 為每個賬戶設定不同的密碼,然後透過輸入相應的密碼來切換。 + 緊急程式碼 + 設定緊急程式碼 + 更改緊急程式碼 + 禁用傳送狀態資訊 + 關閉緊急程式碼 + 您確定要關閉緊急程式碼嗎? + 您確定要移除此賬戶的密碼鎖嗎? + 如果出現錯誤,請使用緊急程式碼登出賬戶。 + 圖片已複製 + 複製圖片 + 隱藏會員貼圖動畫 + 會員 + 更快的上傳速度 + 轉發時顯示標籤 顯示在標籤頁 圖示由TELEOFFICIAL雲端同步。 標題 @@ -233,12 +235,12 @@ 當 Nullgram 偵測到您開啟 VPN 時,將自動關閉內建代理 透過 Cloudflare 以 WebSocket 連接至 TELEOFFICIAL。\n由 Nullgram 提供 由 Nekogram X 提供 - 您也可以輕鬆自行部署! - 使用自訂網域透過 Cloudflare 連接到 TELEOFFICIAL。 + 您也可以自己輕鬆部署! + 使用自定義域名透過 WebSocket 通過 Cloudflare 連線到 TELEOFFICIAL。 啟用 TLS 本地代理 - 啟用 DoH (DNS over HTTPS) - 供應商 + 啟用 DoH + 提供者 內建公共代理 切換伺服器 正在安裝更新… @@ -346,4 +348,26 @@ 無效的匹配模式 傳送大尺寸照片 詳細資料 + + 繽紛 + 深翠 + 霓虹 + 禁用滑動取消歸檔 + 隱藏輸入框機器人按鈕 + 隱藏訊息已讀提示 + 禁用通知氣泡 + 顯示線上狀態 + 禁用點按切換圖片 + 合併訊息 + 過濾 \"Zalgo\" 符號 + 忽略資料夾標籤上的未讀計數 + 自定义标题 + 设置自定义标题 + 側邊欄列表 + 文本样式 + 隐藏发送者按钮 + 隱藏文件夾中的\"全部取消靜音\" + 滑動時隱藏鍵盤 + 在当前位置中开始搜索 + DeepLX 翻譯 diff --git a/TMessagesProj/src/main/res/values-zh/strings_nullgram.xml b/TMessagesProj/src/main/res/values-zh/strings_nullgram.xml index 8a435e1edd..9ddcd0cfd7 100644 --- a/TMessagesProj/src/main/res/values-zh/strings_nullgram.xml +++ b/TMessagesProj/src/main/res/values-zh/strings_nullgram.xml @@ -61,6 +61,8 @@ HH:mm:ss 删除已缓存的文件 复读 + 无引用复读 + 反转 保存信息 查看历史记录 无引用转发 @@ -77,7 +79,7 @@ 创建等宽文字 语言代码 感谢prismjs和Nekogram - 创建mention + 创建提及 名称 频道别名 要求“标记Channel用户”启用 @@ -131,7 +133,7 @@ 它将自动将未读反应提及设置为已读。\n它还将同步到其他设备。\n通知仍将被显示,因为它由 TELEOFFICIAL 服务器控制。 贴纸大小 给我一些很不错的东西。 - wow 真可爱 + wow 是可爱的男孩子 重置贴纸大小 撤消 重做 @@ -159,7 +161,7 @@ 命令 设置自定义快速消息 您不能在此输入空白内容 - 20 和 150<]]> + 20 和 200<]]> 您必须输入一个数字 您必须输入合法的字符 作为回复发送 @@ -346,4 +348,36 @@ Invalid Pattern Send large photo Details + + 缤纷 + 深翠 + 霓虹 + 禁用滑动取消归档 + 隐藏输入框机器人按钮 + 隐藏消息已读提示 + 禁用通知气泡 + 显示在线状态 + 禁用点按切换图片 + 合并消息 + 过滤 \"Zalgo\" 符号 + 忽略文件夹标签上的未读计数 + 自定义标题 + 设置自定义标题 + 侧边栏列表 + 文本样式 + 隐藏发送者按钮 + 隐藏文件夹中的\"全部取消静音\" + 滑动时隐藏键盘 + 从当前位置中开始搜索 + GIF 大小 + 屏蔽 + 禁用主页浮动按钮 + 禁用频道静音按钮 + 禁用自动画中画 + 以视频格式发送 MP4 文件 + 禁用视频重力检测 + 隐藏标题代理入口 + 加入频道后自动静音 + 在输入框中显示小米澎湃AI + DeepLX 翻译 diff --git a/TMessagesProj/src/main/res/values/ic_launcher_nagram_background.xml b/TMessagesProj/src/main/res/values/ic_launcher_nagram_background.xml new file mode 100644 index 0000000000..583a1e80f8 --- /dev/null +++ b/TMessagesProj/src/main/res/values/ic_launcher_nagram_background.xml @@ -0,0 +1,4 @@ + + + #FFFFFF + \ No newline at end of file diff --git a/TMessagesProj/src/main/res/values/ids.xml b/TMessagesProj/src/main/res/values/ids.xml index a14bae4357..d76b134795 100644 --- a/TMessagesProj/src/main/res/values/ids.xml +++ b/TMessagesProj/src/main/res/values/ids.xml @@ -79,4 +79,5 @@ + diff --git a/TMessagesProj/src/main/res/values/strings.xml b/TMessagesProj/src/main/res/values/strings.xml index 830610c376..220b04a794 100644 --- a/TMessagesProj/src/main/res/values/strings.xml +++ b/TMessagesProj/src/main/res/values/strings.xml @@ -1,7 +1,7 @@ - Telegram - Telegram Beta + Nnngram + Nnngram Beta English English English diff --git a/TMessagesProj/src/main/res/values/strings_nullgram.xml b/TMessagesProj/src/main/res/values/strings_nullgram.xml index 19963fa299..9634692254 100644 --- a/TMessagesProj/src/main/res/values/strings_nullgram.xml +++ b/TMessagesProj/src/main/res/values/strings_nullgram.xml @@ -19,9 +19,9 @@ --> - Nullgram - Nullgram Push Service - Nullgram Settings + Nnngram + Nnngram Push Service + Nnngram Settings Official Channel Chat Experiment @@ -64,6 +64,8 @@ HH:mm:ss Delete downloaded file Repeat + Repeat as copy + Reverse Save Messages View history NoQuote forward @@ -135,7 +137,7 @@ It will auto set unread reaction mentions as read.\nIt will also sync to other devices.\nNotification will be still shown because it\'s controlled by TELEOFFICIAL Server. Sticker Size get me some anime stuff pls. - wow cute girl! + wow cute boy! Reset Sticker Size Undo Redo @@ -163,7 +165,7 @@ Command Set Custom Quick Message You can\'t input nothing here - 20 and 150<]]> + 20 and 200<]]> You must input a number! You must input a string! Send As Reply @@ -348,9 +350,9 @@ Saving %1$d files to Download Saving %1$d files to Download Saving %1$d files to Download - Invalid Pattern - Send large photo - Details + Invalid Pattern + Send large photo + Details Don\'t ask again No files found No file\'s info @@ -358,4 +360,38 @@ File must not exceed %1$s View stats No results for **%1$s** in the current folder. + + Google + Colorful + Dark Green + Neon + Do not unarchive by swipe + Hide input field bot button + Hide message seen tooltip + Disable notification bubble + Show online status + Disable photo side action + Merge message + Filter \"Zalgo\" symbols + Ignore folder unread count + Custom title + Set custom title + Drawer list + Text style + Hide send as button + Hide filter mute all + Hide keyboard when scrolling + Search in place + GIF size + Block + Hide dialogs floating button + Disable channel mute button + Disable auto PIP + Send MP4 document as video + Disable gravity detection in video + Hide proxy entry in title + Auto mute after joining channel + Enable Xiaomi HyperAI in editor + DeepLX Translate + DeepLX API diff --git a/build.gradle.kts b/build.gradle.kts index 705ab34ce2..033c208138 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -38,16 +38,12 @@ tasks.register("clean").configure { val apiCode by extra(93) val verCode = Common.getBuildVersionCode(rootProject) -val verName = if (Version.isStable) { - "v" + Version.officialVersionName + "-" + (Common.getGitHeadRefsSuffix(rootProject)) -} else { - "v" + Version.officialVersionName + "-preview-" + (Common.getGitHeadRefsSuffix(rootProject)) -} +val verName = "v" + Version.officialVersionName + "-" + (Common.getGitHeadRefsSuffix(rootProject)) val androidTargetSdkVersion by extra(35) val androidMinSdkVersion by extra(27) val androidCompileSdkVersion by extra(35) -val androidBuildToolsVersion by extra("34.0.0") +val androidBuildToolsVersion = Version.findBuildToolsVersion() val androidCompileNdkVersion = "27.0.12077973" fun Project.configureBaseExtension() { diff --git a/buildSrc/src/main/kotlin/Common.kt b/buildSrc/src/main/kotlin/Common.kt index 4ed59e73f7..fac034734d 100644 --- a/buildSrc/src/main/kotlin/Common.kt +++ b/buildSrc/src/main/kotlin/Common.kt @@ -32,39 +32,8 @@ object Common { @JvmStatic fun getBuildVersionCode(project: Project): Int { - // .git/HEAD描述当前目录所指向的分支信息,内容示例:"ref: refs/heads/master\n" - val headFile = File(project.rootProject.projectDir, ".git" + File.separator + "HEAD") - if (headFile.exists()) { - var commitHash: String - val strings = headFile.readText(Charsets.UTF_8).split(" ") - if (strings.size > 1) { - val refFilePath = ".git" + File.separator + strings[1]; - // 根据HEAD读取当前指向的hash值,路径示例为:".git/refs/heads/master" - val refFile = File(project.rootProject.projectDir, refFilePath.replace("\n", "").replace("\r", "")); - // 索引文件内容为hash值+"\n", - commitHash = refFile.readText(Charsets.UTF_8) - } else { - commitHash = strings[0] - } - commitHash = commitHash.trim() - val repo = FileRepository(project.rootProject.file(".git")) - val refId = repo.resolve(commitHash) - val iterator = Git(repo).log().add(refId).call().iterator() - var commitCount = 0 - while (iterator.hasNext()) { - commitCount++ - iterator.next() - } - repo.close() - println("commit Count: $commitCount") - val targetVersionCode = commitCount + 1645200000 - println("target versionCode: $targetVersionCode") - return targetVersionCode - } else { - println("WARN: .git/HEAD does NOT exist") - return 1 - } + val currentTimestamp = (System.currentTimeMillis() / 1000L).toInt() + println("currentVersionCode: $currentTimestamp") + return currentTimestamp } - - } diff --git a/buildSrc/src/main/kotlin/Version.kt b/buildSrc/src/main/kotlin/Version.kt index d7c0fd84de..12b668e95b 100644 --- a/buildSrc/src/main/kotlin/Version.kt +++ b/buildSrc/src/main/kotlin/Version.kt @@ -17,9 +17,34 @@ * */ +import java.io.File +import java.util.Properties import org.gradle.api.JavaVersion object Version { + fun findBuildToolsVersion(): String { + val defaultBuildToolsVersion = "33.0.0" + return File(System.getenv("ANDROID_HOME"), "build-tools").listFiles()?.filter { it.isDirectory }?.maxOfOrNull { it.name }?.also { println("Using build tools version $it") } + ?: defaultBuildToolsVersion + } + + fun findNdkVersion(): String { + val defaultNdkVersion = "23.2.8568313" + val ndkBundle = File(System.getenv("ANDROID_HOME"), "ndk-bundle") + if (ndkBundle.exists()) { + val sourceProperties = File(ndkBundle, "source.properties") + if (sourceProperties.exists()) { + val properties = Properties() + sourceProperties.inputStream().use { + properties.load(it) + } + return properties.getProperty("Pkg.Revision").also { if (it != null) println("Using ndk version $it") } + ?: defaultNdkVersion + } + } + return File(System.getenv("ANDROID_HOME"), "ndk").listFiles()?.filter { it.isDirectory }?.maxOfOrNull { it.name }.also { if (it != null) println("Using ndk version $it") } + ?: defaultNdkVersion + } @JvmStatic val java = JavaVersion.VERSION_17 diff --git a/crowdin.yml b/crowdin.yml index 4ed1ca9da9..e96d54a92c 100644 --- a/crowdin.yml +++ b/crowdin.yml @@ -1,5 +1,5 @@ files: - - source: /TMessagesProj/src/main/res/values/strings_nullgram.xml + - source: /TMessagesProj/src/main/res/values/strings_nnngram.xml ignore: - /TMessagesProj/src/main/res/values-v* translation: /TMessagesProj/src/main/res/values-%two_letters_code%/%original_file_name% diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index 4913f6f386..94f30834ad 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -21,11 +21,11 @@ 2. Encode in UTF-8, with LF as the end of line sequence. 3. Config Key should be defined - in [Defines.kt](../TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/Defines.java). + in [Defines.kt](../TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/Defines.kt). 4. Variable naming adopts camelcase. -5. DO NOT USE FileLog. Use [Log](../TMessagesProj/src/main/java/top/qwq2333/nullgram/utils/Log.kt) +5. DO NOT USE FileLog. Use [Log](../TMessagesProj/src/main/java/xyz/nextalone/nnngram/utils/Log.kt) instead. 6. Indent with 4 spaces. diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 790c7aaf94..8300403295 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -22,6 +22,7 @@ kotlinxCoroutinesAndroid = "1.9.0" kotlinxSerializationJson = "1.7.3" ktor = "3.0.1" languageId = "17.0.6" +lottie = "6.4.1" osmdroidAndroid = "6.1.20" playServicesLocation = "21.3.0" playServicesVision = "20.1.3" @@ -53,6 +54,7 @@ ksp = { module = "com.google.devtools.ksp:symbol-processing-api", version.ref = kotlinx-coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android", version.ref = "kotlinxCoroutinesAndroid" } kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinxSerializationJson" } language-id = { module = "com.google.mlkit:language-id", version.ref = "languageId" } +lottie = { module = "com.airbnb.android:lottie", version.ref = "lottie" } osmdroid-android = { module = "org.osmdroid:osmdroid-android", version.ref = "osmdroidAndroid" } play-services-location = { module = "com.google.android.gms:play-services-location", version.ref = "playServicesLocation" } play-services-vision = { module = "com.google.android.gms:play-services-vision", version.ref = "playServicesVision" } @@ -70,6 +72,7 @@ ktor-client-okhttp = { module = "io.ktor:ktor-client-okhttp", version.ref = "kto ktor-client-encoding = { module = "io.ktor:ktor-client-encoding", version.ref = "ktor" } ktor-client-contentNegotiation = { module = "io.ktor:ktor-client-content-negotiation", version.ref = "ktor" } ktor-serialization-json = { module = "io.ktor:ktor-serialization-kotlinx-json-jvm", version.ref = "ktor" } +ffmpeg = { module = "com.arthenica:mobile-ffmpeg-video", version = "4.4.LTS" } [plugins] aboutlibraries = { id = "com.mikepenz.aboutlibraries.plugin" , version.ref = "aboutlibraries" } diff --git a/libs/ksp/src/main/kotlin/top/qwq2333/nullgram/ConfigSwitch.kt b/libs/ksp/src/main/kotlin/xyz/nextalone/nnngram/ConfigSwitch.kt similarity index 94% rename from libs/ksp/src/main/kotlin/top/qwq2333/nullgram/ConfigSwitch.kt rename to libs/ksp/src/main/kotlin/xyz/nextalone/nnngram/ConfigSwitch.kt index 0eb3f0375f..c6ae97ca35 100644 --- a/libs/ksp/src/main/kotlin/top/qwq2333/nullgram/ConfigSwitch.kt +++ b/libs/ksp/src/main/kotlin/xyz/nextalone/nnngram/ConfigSwitch.kt @@ -17,7 +17,7 @@ * */ -package top.qwq2333.nullgram +package xyz.nextalone.nnngram import com.google.devtools.ksp.processing.CodeGenerator import com.google.devtools.ksp.processing.Dependencies @@ -42,11 +42,11 @@ class ConfigSwitchGenerator( private var finished = false override fun process(resolver: Resolver): List { val objectBuilder = TypeSpec.objectBuilder("Config") - val configManager = ClassName("top.qwq2333.nullgram.config", "ConfigManager") - val defines = ClassName("top.qwq2333.nullgram.utils", "Defines") + val configManager = ClassName("xyz.nextalone.nnngram.config", "ConfigManager") + val defines = ClassName("xyz.nextalone.nnngram.utils", "Defines") val dependencies = mutableListOf() - resolver.getSymbolsWithAnnotation("top.qwq2333.nullgram.BooleanConfig") + resolver.getSymbolsWithAnnotation("xyz.nextalone.nnngram.BooleanConfig") .filterIsInstance() .toList() .let { @@ -88,7 +88,7 @@ class ConfigSwitchGenerator( } } - resolver.getSymbolsWithAnnotation("top.qwq2333.nullgram.IntConfig") + resolver.getSymbolsWithAnnotation("xyz.nextalone.nnngram.IntConfig") .filterIsInstance() .toList() .let { @@ -127,7 +127,7 @@ class ConfigSwitchGenerator( } } - resolver.getSymbolsWithAnnotation("top.qwq2333.nullgram.StringConfig") + resolver.getSymbolsWithAnnotation("xyz.nextalone.nnngram.StringConfig") .filterIsInstance() .toList() .let { @@ -166,7 +166,7 @@ class ConfigSwitchGenerator( } } - if (!finished) FileSpec.builder("top.qwq2333.gen", "Config") + if (!finished) FileSpec.builder("xyz.nextalone.gen", "Config") .addType(objectBuilder.build()) .build() .writeTo(codeGenerator, Dependencies(true, *dependencies.toTypedArray())) diff --git a/libs/ksp/src/main/resources/META-INF/services/com.google.devtools.ksp.processing.SymbolProcessorProvider b/libs/ksp/src/main/resources/META-INF/services/com.google.devtools.ksp.processing.SymbolProcessorProvider index a1fa9f1d11..8ce09ba18f 100644 --- a/libs/ksp/src/main/resources/META-INF/services/com.google.devtools.ksp.processing.SymbolProcessorProvider +++ b/libs/ksp/src/main/resources/META-INF/services/com.google.devtools.ksp.processing.SymbolProcessorProvider @@ -17,4 +17,4 @@ # # -top.qwq2333.nullgram.ConfigSwitchProvider +xyz.nextalone.nnngram.ConfigSwitchProvider diff --git a/libs/pangu/src/main/java/ws/vinta/pangu/Pangu.kt b/libs/pangu/src/main/java/ws/vinta/pangu/Pangu.kt index 8d1cfbf1fe..c798685b7c 100644 --- a/libs/pangu/src/main/java/ws/vinta/pangu/Pangu.kt +++ b/libs/pangu/src/main/java/ws/vinta/pangu/Pangu.kt @@ -24,6 +24,12 @@ import java.util.regex.Pattern */ class Pangu { companion object { + + /** + * The space character. + */ + private const val SPACE = " " + /* * Some capturing group patterns for convenience. * @@ -138,37 +144,37 @@ class Pangu { // CJK and quotes val cqMatcher = CJK_QUOTE.matcher(text) - text = cqMatcher.replaceAll("$1 $2") + text = cqMatcher.replaceAll("$1$SPACE$2") val qcMatcher = QUOTE_CJK.matcher(text) - text = qcMatcher.replaceAll("$1 $2") + text = qcMatcher.replaceAll("$1$SPACE$2") val fixQuoteMatcher = FIX_QUOTE.matcher(text) text = fixQuoteMatcher.replaceAll("$1$3$5") // CJK and brackets val oldText = text val cbcMatcher = CJK_BRACKET_CJK.matcher(text) - val newText = cbcMatcher.replaceAll("$1 $2 $4") + val newText = cbcMatcher.replaceAll("$1$SPACE$2$SPACE$4") text = newText if (oldText == newText) { val cbMatcher = CJK_BRACKET.matcher(text) - text = cbMatcher.replaceAll("$1 $2") + text = cbMatcher.replaceAll("$1$SPACE$2") val bcMatcher = BRACKET_CJK.matcher(text) - text = bcMatcher.replaceAll("$1 $2") + text = bcMatcher.replaceAll("$1$SPACE$2") } val fixBracketMatcher = FIX_BRACKET.matcher(text) text = fixBracketMatcher.replaceAll("$1$3$5") // CJK and hash val chMatcher = CJK_HASH.matcher(text) - text = chMatcher.replaceAll("$1 $2") + text = chMatcher.replaceAll("$1$SPACE$2") val hcMatcher = HASH_CJK.matcher(text) - text = hcMatcher.replaceAll("$1 $3") + text = hcMatcher.replaceAll("$1$SPACE$3") // CJK and ANS val caMatcher = CJK_ANS.matcher(text) - text = caMatcher.replaceAll("$1 $2") + text = caMatcher.replaceAll("$1$SPACE$2") val acMatcher = ANS_CJK.matcher(text) - text = acMatcher.replaceAll("$1 $2") + text = acMatcher.replaceAll("$1$SPACE$2") return text } diff --git a/settings.gradle.kts b/settings.gradle.kts index 38511b7fea..62c147df9b 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -51,7 +51,7 @@ develocity { } } -rootProject.name = "Nullgram" +rootProject.name = "Nnngram" include( ":TMessagesProj", ":libs:tcp2ws",