From 2dceb75262c1af3f540ad7cd110048ceae770bdf Mon Sep 17 00:00:00 2001 From: wowlikon Date: Thu, 1 Jan 2026 18:32:53 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=B0=D1=82=D1=87=D0=B5=D0=B9?= =?UTF-8?q?=20=D0=BD=D0=B0=20beta=209,=20=D0=B8=D1=81=D0=BF=D1=80=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20welcome,=20=D0=B4=D0=BE?= =?UTF-8?q?=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BC=D0=BF=D0=B0=D0=BA=D1=82=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D1=8E=20=D0=BF=D0=BE=20=D1=83=D0=BC=D0=BE=D0=BB?= =?UTF-8?q?=D1=87=D0=B0=D0=BD=D0=B8=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- configs/welcome.json | 11 ++-- patches/disable_ad.py | 2 +- patches/replace_navbar.py | 31 ++++++++++- patches/settings_urls.py | 20 ++++---- patches/welcome.py | 51 +++++++++++++++++-- .../com/swiftsoft/about/$2.smali | 20 ++++---- .../com/swiftsoft/about/$4.smali | 2 +- utils/smali_parser.py | 10 ++++ 8 files changed, 117 insertions(+), 30 deletions(-) diff --git a/configs/welcome.json b/configs/welcome.json index 2985cb8..0dde126 100644 --- a/configs/welcome.json +++ b/configs/welcome.json @@ -1,9 +1,14 @@ { "enabled": true, "title": "Anixarty", + "title_color": "#FF252525", + "title_bg_color": "#FFCFF04D", + "body_bg_color": "#FF252525", "description": "Описание", - "link_text": "МЫ В TELEGRAM", - "link_url": "https://t.me/http_teapod", + "description_color": "#FFFFFFFF", "skip_text": "Пропустить", - "title_bg_color": "#FFFFFF" + "skip_color": "#FFFFFFFF", + "link_text": "МЫ В TELEGRAM", + "link_color": "#FFCFF04D", + "link_url": "https://t.me/http_teapod" } \ No newline at end of file diff --git a/patches/disable_ad.py b/patches/disable_ad.py index 8549607..d6a1dd5 100644 --- a/patches/disable_ad.py +++ b/patches/disable_ad.py @@ -21,7 +21,7 @@ class Patch(PatchTemplate): priority: int = Field(frozen=True, exclude=True, default=0) def apply(self, base: Dict[str, Any]) -> bool: - path = "./decompiled/smali_classes2/com/swiftsoft/anixartd/Prefs.smali" + path = "./decompiled/smali_classes3/com/swiftsoft/anixartd/Prefs.smali" replacement = [ f"\t{line}\n" for line in textwrap.dedent( diff --git a/patches/replace_navbar.py b/patches/replace_navbar.py index fca5b5f..7cd2a72 100644 --- a/patches/replace_navbar.py +++ b/patches/replace_navbar.py @@ -16,10 +16,11 @@ from pydantic import Field from tqdm import tqdm from utils.config import PatchTemplate - +from utils.smali_parser import get_smali_lines, save_smali_lines, find_smali_line class Patch(PatchTemplate): priority: int = Field(frozen=True, exclude=True, default=0) + default_compact: bool = Field(True, description="Компактный вид по умолчанию") items: List[str] = Field( ["home", "discover", "feed", "bookmarks", "profile"], description="Список элементов в панели навигации", @@ -64,4 +65,32 @@ class Patch(PatchTemplate): tree.write(file_path, pretty_print=True, xml_declaration=True, encoding="utf-8") + # Изменение компактного вида + if self.default_compact: + main_file_path = "./decompiled/smali_classes3/com/swiftsoft/anixartd/ui/activity/MainActivity.smali" + main_lines = get_smali_lines(main_file_path) + + preference_file_path = "./decompiled/smali_classes3/com/swiftsoft/anixartd/ui/fragment/main/preference/AppearancePreferenceFragment.smali" + preference_lines = get_smali_lines(preference_file_path) + + main_const = find_smali_line(main_lines, "BOTTOM_NAVIGATION_COMPACT")[-1] + preference_const = find_smali_line(preference_lines, "BOTTOM_NAVIGATION_COMPACT")[-1] + + main_invoke = find_smali_line(main_lines, "Landroid/content/SharedPreferences;->getBoolean(Ljava/lang/String;Z)Z")[0] + preference_invoke = find_smali_line(preference_lines, "Landroid/content/SharedPreferences;->getBoolean(Ljava/lang/String;Z)Z")[0] + + main_value = set(find_smali_line(main_lines, "const/4 v7, 0x0")) + preference_value = set(find_smali_line(preference_lines, "const/4 v7, 0x0")) + + main_target_line = main_value & set(range(main_const, main_invoke)) + preference_tartget_line = preference_value & set(range(preference_const, preference_invoke)) + + assert len(main_target_line) == 1 and len(preference_tartget_line) == 1 + + main_lines[main_target_line.pop()] = "const/4 v7, 0x1" + preference_lines[preference_tartget_line.pop()] = "const/4 v7, 0x1" + + save_smali_lines(main_file_path, main_lines) + save_smali_lines(preference_file_path, preference_lines) + return True diff --git a/patches/settings_urls.py b/patches/settings_urls.py index 90c23cb..5f32a05 100644 --- a/patches/settings_urls.py +++ b/patches/settings_urls.py @@ -34,6 +34,13 @@ from utils.public import insert_after_public # Config DEFAULT_MENU = { "Мы в социальных сетях": [ + { + "title": "Мы в Telegram", + "description": "Подпишитесь на канал, чтобы быть в курсе последних новостей.", + "url": "https://t.me/http_teapod", + "icon": "@drawable/ic_custom_telegram", + "icon_space_reserved": "false", + }, { "title": "wowlikon", "description": "Разработчик", @@ -48,19 +55,12 @@ DEFAULT_MENU = { "icon": "@drawable/ic_custom_telegram", "icon_space_reserved": "false", }, - { - "title": "Мы в Telegram", - "description": "Подпишитесь на канал, чтобы быть в курсе последних новостей.", - "url": "https://t.me/http_teapod", - "icon": "@drawable/ic_custom_telegram", - "icon_space_reserved": "false", - }, ], "Прочее": [ { "title": "Помочь проекту", "description": "Вы можете помочь нам с идеями, написанием кода или тестированием.", - "url": "https://git.wowlikon.tech/anixart-mod", + "url": "https://git.0x174.su/anixart-mod", "icon": "@drawable/ic_custom_crown", "icon_space_reserved": "false", } @@ -122,8 +122,8 @@ class Patch(PatchTemplate): # Добавление суффикса версии filepaths = [ - "./decompiled/smali_classes2/com/swiftsoft/anixartd/ui/activity/UpdateActivity.smali", - "./decompiled/smali_classes2/com/swiftsoft/anixartd/ui/fragment/main/preference/MainPreferenceFragment.smali", + "./decompiled/smali_classes3/com/swiftsoft/anixartd/ui/activity/UpdateActivity.smali", + "./decompiled/smali_classes3/com/swiftsoft/anixartd/ui/fragment/main/preference/MainPreferenceFragment.smali", ] for filepath in filepaths: content = "" diff --git a/patches/welcome.py b/patches/welcome.py index ff9edf3..42d4204 100644 --- a/patches/welcome.py +++ b/patches/welcome.py @@ -15,6 +15,7 @@ __author__ = "wowlikon " __version__ = "1.0.0" import shutil from typing import Any, Dict +from urllib import parse from pydantic import Field @@ -25,23 +26,38 @@ from utils.smali_parser import (find_and_replace_smali_line, get_smali_lines, class Patch(PatchTemplate): priority: int = Field(frozen=True, exclude=True, default=0) + title: str = Field("Anixarty", description="Заголовок") + title_color: str = Field("#FF252525", description="Цвет заголовка") + + title_bg_color: str = Field("#FFCFF04D", description="Цвет фона заголовка") + body_bg_color: str = Field("#FF252525", description="Цвет фона окна") + description: str = Field("Описание", description="Описание") + description_color: str = Field("#FFFFFFFF", description="Цвет описания") + + skip_text: str = Field("Пропустить", description="Текст кнопки пропустить") + skip_color: str = Field("#FFFFFFFF", description="Цвет кнопки пропустить") + link_text: str = Field("МЫ В TELEGRAM", description="Текст ссылки") + link_color: str = Field("#FFCFF04D", description="Цвет ссылки") link_url: str = Field("https://t.me/http_teapod", description="Ссылка") - skip_text: str = Field("Пропустить", description="Текст кнопки пропуска") - title_bg_color: str = Field("#FFFFFF", description="Цвет фона заголовка") + + def encode_text(self, text: str) -> str: + return '+'.join([parse.quote(i) for i in text.split(' ')]) def apply(self, base: Dict[str, Any]) -> bool: - file_path = "./decompiled/smali_classes2/com/swiftsoft/anixartd/ui/activity/MainActivity.smali" # Добавление ресурсов окна первого входа shutil.copy("./resources/avatar.png", "./decompiled/assets/avatar.png") shutil.copy( "./resources/OpenSans-Regular.ttf", "./decompiled/assets/OpenSans-Regular.ttf", ) - shutil.copytree("./resources/smali_classes4/", "./decompiled/smali_classes4/") + for subdir in ["about/", "authorization/"]: + shutil.copytree("./resources/smali_classes4/com/swiftsoft/"+subdir, "./decompiled/smali_classes4/com/swiftsoft/"+subdir) + # Привязка к первому запуску + file_path = "./decompiled/smali_classes3/com/swiftsoft/anixartd/ui/activity/MainActivity.smali" method = "invoke-super {p0}, Lmoxy/MvpAppCompatActivity;->onResume()V" lines = get_smali_lines(file_path) lines = find_and_replace_smali_line( @@ -52,4 +68,31 @@ class Patch(PatchTemplate): ) save_smali_lines(file_path, lines) + # Замена ссылки + file_path = "./decompiled/smali_classes4/com/swiftsoft/about/$4.smali" + lines = get_smali_lines(file_path) + lines = find_and_replace_smali_line( + lines, + "const-string v0, \"https://example.com\"", + 'const-string v0, "' + self.link_url + '"', + ) + save_smali_lines(file_path, lines) + + # Настройка всплывающго окна + file_path = "./decompiled/smali_classes4/com/swiftsoft/about/$2.smali" + lines = get_smali_lines(file_path) + for replacement in [ + ('const-string v5, "#FF252525" # Title color', f'const-string v5, "{self.title_color}"'), + ('const-string v7, "#FFFFFFFF" # Description color', f'const-string v7, "{self.description_color}"'), + ('const-string v8, "#FFCFF04D" # Link color', f'const-string v8, "{self.link_color}"'), + ('const-string v9, "#FFFFFFFF" # Skip color', f'const-string v9, "{self.skip_color}"'), + ('const-string v5, "#FF252525" # Body background', f'const-string v5, "{self.body_bg_color}"'), + ('const-string v10, "#FFCFF04D" # Title background', f'const-string v10, "{self.title_bg_color}"'), + ('const-string v12, "Title"', f'const-string v12, "{self.encode_text(self.title)}"'), + ('const-string v11, "Description"', f'const-string v11, "{self.encode_text(self.description)}"'), + ('const-string v12, "URL"', f'const-string v12, "{self.link_text.encode('unicode-escape').decode()}"'), + ('const-string v12, "Skip"', f'const-string v12, "{self.skip_text.encode('unicode-escape').decode()}"') + ]: lines = find_and_replace_smali_line(lines, *replacement) + save_smali_lines(file_path, lines) + return True diff --git a/resources/smali_classes4/com/swiftsoft/about/$2.smali b/resources/smali_classes4/com/swiftsoft/about/$2.smali index 88ae044..9e2f073 100644 --- a/resources/smali_classes4/com/swiftsoft/about/$2.smali +++ b/resources/smali_classes4/com/swiftsoft/about/$2.smali @@ -95,28 +95,28 @@ move-result-object v2 - const-string v5, "#FF252525" + const-string v5, "#FF252525" # Title color .line 43 invoke-static {v5}, Landroid/graphics/Color;->parseColor(Ljava/lang/String;)I move-result v6 - const-string v7, "#FFFFFFFF" + const-string v7, "#FFFFFFFF" # Description color .line 44 invoke-static {v7}, Landroid/graphics/Color;->parseColor(Ljava/lang/String;)I move-result v7 - const-string v8, "#FFCFF04D" + const-string v8, "#FFCFF04D" # Link color .line 45 invoke-static {v8}, Landroid/graphics/Color;->parseColor(Ljava/lang/String;)I move-result v8 - const-string v9, "#FFFFFFFF" + const-string v9, "#FFFFFFFF" # Skip color .line 46 invoke-static {v9}, Landroid/graphics/Color;->parseColor(Ljava/lang/String;)I @@ -124,13 +124,13 @@ move-result v9 .line 47 - const-string v5, "#FF252525" + const-string v5, "#FF252525" # Body background invoke-static {v5}, Landroid/graphics/Color;->parseColor(Ljava/lang/String;)I move-result v5 - const-string v10, "#FFCFF04D" + const-string v10, "#FFCFF04D" # Title background .line 48 invoke-static {v10}, Landroid/graphics/Color;->parseColor(Ljava/lang/String;)I @@ -177,7 +177,7 @@ invoke-direct {v11, v0, v12}, Landroid/app/AlertDialog$Builder;->(Landroid/content/Context;I)V - const-string v12, "wowlikon+ID" + const-string v12, "Title" .line 67 invoke-virtual {v11, v12}, Landroid/app/AlertDialog$Builder;->setTitle(Ljava/lang/CharSequence;)Landroid/app/AlertDialog$Builder; @@ -189,7 +189,7 @@ move-result-object v3 - const-string v11, "%D0%9C%D0%BE%D0%B4+%D1%81%D0%B4%D0%B5%D0%BB%D0%B0%D0%BD+wowlikon+%D1%81+%D0%BD%D0%BE%D0%B2%D1%8B%D1%8B%D0%BC%D0%B8+%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F%D0%BC%D0%B8%21%0A%0A%D0%A1%D0%B4%D0%B5%D0%BB%D0%B0%D0%BD%D0%BE+%D1%81+%E2%9D%A4%EF%B8%8F+%D0%BE%D1%82+swiftsoft" + const-string v11, "Description" .line 69 invoke-virtual {v3, v11}, Landroid/app/AlertDialog$Builder;->setMessage(Ljava/lang/CharSequence;)Landroid/app/AlertDialog$Builder; @@ -200,7 +200,7 @@ invoke-direct {v11}, Lcom/swiftsoft/about/$4;->()V - const-string v12, "\u041c\u044b \u0432 Telegram" + const-string v12, "URL" .line 70 invoke-virtual {v3, v12, v11}, Landroid/app/AlertDialog$Builder;->setPositiveButton(Ljava/lang/CharSequence;Landroid/content/DialogInterface$OnClickListener;)Landroid/app/AlertDialog$Builder; @@ -211,7 +211,7 @@ invoke-direct {v11}, Lcom/swiftsoft/about/$3;->()V - const-string v12, "\u041f\u043e\u043d\u044f\u0442\u043d\u043e" + const-string v12, "Skip" .line 71 invoke-virtual {v3, v12, v11}, Landroid/app/AlertDialog$Builder;->setNeutralButton(Ljava/lang/CharSequence;Landroid/content/DialogInterface$OnClickListener;)Landroid/app/AlertDialog$Builder; diff --git a/resources/smali_classes4/com/swiftsoft/about/$4.smali b/resources/smali_classes4/com/swiftsoft/about/$4.smali index 86f2af5..b5284c4 100644 --- a/resources/smali_classes4/com/swiftsoft/about/$4.smali +++ b/resources/smali_classes4/com/swiftsoft/about/$4.smali @@ -32,7 +32,7 @@ new-instance p2, Landroid/content/Intent; - const-string v0, "https://t.me/wowlikon" + const-string v0, "https://example.com" invoke-static {v0}, Landroid/net/Uri;->parse(Ljava/lang/String;)Landroid/net/Uri; diff --git a/utils/smali_parser.py b/utils/smali_parser.py index 8778d69..e2f2041 100644 --- a/utils/smali_parser.py +++ b/utils/smali_parser.py @@ -64,6 +64,16 @@ def find_and_replace_smali_line( return lines +def find_smali_line( + lines: list[str], search: str +) -> list[int]: + result = [] + for index, line in enumerate(lines): + if line.find(search) >= 0: + result.append(index) + return result + + def float_to_hex(f): b = struct.pack(">f", f) return b.hex()