diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/AppIconsSelectorCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/AppIconsSelectorCell.java index 489425c0..c49ad8ed 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/AppIconsSelectorCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/AppIconsSelectorCell.java @@ -45,7 +45,7 @@ import org.telegram.ui.LauncherIconController; import org.telegram.ui.PremiumPreviewFragment; import tw.nekomimi.nekogram.helpers.SponsorHelper; -import tw.nekomimi.nekogram.settings.NekoDonateActivity; +import tw.nekomimi.nekogram.settings.FoxPremiumActivity; import java.util.ArrayList; import java.util.Arrays; @@ -113,7 +113,7 @@ public class AppIconsSelectorCell extends RecyclerListView implements Notificati IconHolderView holderView = (IconHolderView) view; LauncherIconController.LauncherIcon icon = availableIcons.get(position); if (icon.premium && !SponsorHelper.isCurrentUserSponsor()) { - fragment.presentFragment(new NekoDonateActivity()); + fragment.presentFragment(new FoxPremiumActivity()); return; } diff --git a/TMessagesProj/src/main/java/tw/nekomimi/nekogram/settings/FoxPremiumActivity.java b/TMessagesProj/src/main/java/tw/nekomimi/nekogram/settings/FoxPremiumActivity.java new file mode 100644 index 00000000..98eb96ad --- /dev/null +++ b/TMessagesProj/src/main/java/tw/nekomimi/nekogram/settings/FoxPremiumActivity.java @@ -0,0 +1,126 @@ +package tw.nekomimi.nekogram.settings; + +import android.content.Context; +import android.view.Gravity; +import android.view.View; +import android.widget.FrameLayout; +import android.widget.TextView; + +import org.telegram.messenger.AndroidUtilities; +import org.telegram.messenger.ApplicationLoader; +import org.telegram.messenger.LocaleController; +import org.telegram.messenger.R; +import org.telegram.messenger.UserConfig; +import org.telegram.ui.ActionBar.Theme; +import org.telegram.ui.Components.AnimatedFileDrawable; +import org.telegram.ui.Components.BackupImageView; +import org.telegram.ui.Components.LayoutHelper; +import org.telegram.ui.Components.UItem; +import org.telegram.ui.Components.UniversalAdapter; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.util.ArrayList; + +public class FoxPremiumActivity extends BaseNekoSettingsActivity { + + private final int serversRow = rowId++; + private final int sponsorRow = rowId++; + private final int iconsRow = rowId++; + private final int buttonRow = rowId++; + + private FrameLayout topView; + private BackupImageView stickerView; + private AnimatedFileDrawable stickerDrawable; + + @Override + public View createView(Context context) { + topView = new FrameLayout(context); + + stickerView = new BackupImageView(context); + topView.addView(stickerView, LayoutHelper.createFrame(130, 130, Gravity.CENTER_HORIZONTAL | Gravity.TOP, 0, 16, 0, 0)); + + var titleView = new TextView(context); + titleView.setTextSize(android.util.TypedValue.COMPLEX_UNIT_DIP, 22); + titleView.setTypeface(AndroidUtilities.bold()); + titleView.setGravity(Gravity.CENTER); + titleView.setText(LocaleController.getString(R.string.FoxPremiumTitle)); + titleView.setTextColor(getThemedColor(Theme.key_windowBackgroundWhiteBlackText)); + topView.addView(titleView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_HORIZONTAL | Gravity.TOP, 16, 158, 16, 0)); + + var subtitleView = new TextView(context); + subtitleView.setTextSize(android.util.TypedValue.COMPLEX_UNIT_DIP, 14); + subtitleView.setGravity(Gravity.CENTER); + subtitleView.setText(LocaleController.getString(R.string.FoxPremiumSubtitle)); + subtitleView.setTextColor(getThemedColor(Theme.key_windowBackgroundWhiteGrayText)); + topView.addView(subtitleView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_HORIZONTAL | Gravity.TOP, 24, 192, 24, 0)); + + var fragmentView = super.createView(context); + loadSticker(); + return fragmentView; + } + + private void loadSticker() { + try { + File cacheFile = new File(AndroidUtilities.getCacheDir(), "foxi_premium.webm"); + if (!cacheFile.exists() || cacheFile.length() == 0) { + try (InputStream in = ApplicationLoader.applicationContext.getResources().openRawResource(R.raw.foxi_premium); + FileOutputStream out = new FileOutputStream(cacheFile)) { + byte[] buffer = new byte[16 * 1024]; + int len; + while ((len = in.read(buffer)) > 0) { + out.write(buffer, 0, len); + } + } + } + stickerDrawable = new AnimatedFileDrawable(cacheFile, true, 0, 0, null, null, null, 0, UserConfig.selectedAccount, true, 260, 260, null); + stickerView.setImageDrawable(stickerDrawable); + stickerView.getImageReceiver().setAutoRepeat(1); + stickerDrawable.start(); + stickerView.setOnClickListener(v -> { + if (stickerDrawable != null) { + stickerDrawable.start(); + } + }); + } catch (Throwable ignore) { + } + } + + @Override + protected boolean needActionBarPadding() { + return false; + } + + @Override + protected void fillItems(ArrayList items, UniversalAdapter adapter) { + items.add(UItem.asCustomShadow(topView, 240)); + items.add(UItem.asButtonSubtext(serversRow, R.drawable.msg2_devices, LocaleController.getString(R.string.FoxPremiumFeatureServersTitle), LocaleController.getString(R.string.FoxPremiumFeatureServersAbout))); + items.add(UItem.asButtonSubtext(sponsorRow, R.drawable.msg_input_like, LocaleController.getString(R.string.FoxPremiumFeatureSponsorTitle), LocaleController.getString(R.string.FoxPremiumFeatureSponsorAbout))); + items.add(UItem.asButtonSubtext(iconsRow, R.drawable.msg_emoji_smiles, LocaleController.getString(R.string.FoxPremiumFeatureIconsTitle), LocaleController.getString(R.string.FoxPremiumFeatureIconsAbout))); + items.add(UItem.asShadow(null)); + items.add(UItem.asButton(buttonRow, R.drawable.msg_input_like, LocaleController.getString(R.string.FoxPremiumButton))); + items.add(UItem.asShadow(null)); + } + + @Override + protected void onItemClick(UItem item, View view, int position, float x, float y) { + if (item.id == buttonRow) { + presentFragment(new NekoDonateActivity()); + } + } + + @Override + protected String getActionBarTitle() { + return LocaleController.getString(R.string.FoxPremiumTitle); + } + + @Override + public void onFragmentDestroy() { + super.onFragmentDestroy(); + if (stickerDrawable != null) { + stickerDrawable.recycle(); + stickerDrawable = null; + } + } +} diff --git a/TMessagesProj/src/main/res/raw/foxi_premium.webm b/TMessagesProj/src/main/res/raw/foxi_premium.webm new file mode 100644 index 00000000..404d5bac Binary files /dev/null and b/TMessagesProj/src/main/res/raw/foxi_premium.webm differ diff --git a/TMessagesProj/src/main/res/values-ru/strings_neko.xml b/TMessagesProj/src/main/res/values-ru/strings_neko.xml index b0072a35..d65cf9e8 100644 --- a/TMessagesProj/src/main/res/values-ru/strings_neko.xml +++ b/TMessagesProj/src/main/res/values-ru/strings_neko.xml @@ -325,6 +325,15 @@ Настройки специальных возможностей Спонсор GhostCloud + FoxiGram Premium + Поддержите проект и откройте эксклюзивные возможности + Больше LTE и Wi-Fi серверов + Доступ к дополнительным быстрым LTE и Wi-Fi серверам + Сердечко спонсора + Значок сердечка рядом с вашим именем в чатах + Эксклюзивные иконки приложения + Иконки приложения Premium, Космос и Облако + Поддержать FoxiGram Эта отметка выдана за поддержание проекта на 444+ рублей. Поддержать проект Оформите GhostCloud через нашего бота diff --git a/TMessagesProj/src/main/res/values/strings_neko.xml b/TMessagesProj/src/main/res/values/strings_neko.xml index f2e37924..47272ba1 100644 --- a/TMessagesProj/src/main/res/values/strings_neko.xml +++ b/TMessagesProj/src/main/res/values/strings_neko.xml @@ -155,6 +155,15 @@ FoxiGram %1$s\nBased on Telegram %2$s\nDesigned by %3$s Installing update... Sponsor GhostCloud + FoxiGram Premium + Support the project and unlock exclusive perks + More LTE and Wi-Fi servers + Get access to additional fast LTE and Wi-Fi servers + Sponsor heart + A heart badge next to your name in chats + Exclusive app icons + Premium, Space and Cloud app icons + Support FoxiGram This badge is granted for supporting the project with 444+ rubles. Support the project Subscribe to GhostCloud via our bot