From 44c79407e3cb561cb077b5b964d4c3e09d5d2185 Mon Sep 17 00:00:00 2001 From: Tamim Hossain <132823494+codewithtamim@users.noreply.github.com> Date: Thu, 11 Dec 2025 13:56:56 +0600 Subject: [PATCH 1/9] feature: discreet app icon --- core/src/main/AndroidManifest.xml | 59 ++++- .../wireguard/android/config/Interface.java | 2 +- .../core/common/appicon/AppIconManager.kt | 97 ++++++++ .../core/common/dagger/ActivityComponent.java | 3 + .../ivpn/core/common/nightmode/NightMode.kt | 9 +- .../common/nightmode/OledModeController.kt | 171 +++++++++++++ .../prefs/EncryptedSettingsPreference.kt | 10 + .../net/ivpn/core/common/prefs/Settings.kt | 6 + .../ConnectionShortcutsActivity.java | 2 + .../main/java/net/ivpn/core/ui/theme/Color.kt | 25 +- .../main/java/net/ivpn/core/ui/theme/Theme.kt | 30 ++- .../java/net/ivpn/core/v2/MainActivity.kt | 8 + .../ivpn/core/v2/account/LogOutFragment.kt | 12 + .../ivpn/core/v2/appicon/AppIconFragment.kt | 140 +++++++++++ .../ivpn/core/v2/connect/ConnectFragment.kt | 3 + .../createSession/CreateSessionFragment.java | 12 + .../net/ivpn/core/v2/dialog/DialogBuilder.kt | 106 +++++++- .../net/ivpn/core/v2/dialog/DialogBuilderK.kt | 17 +- .../ivpn/core/v2/protocol/ProtocolFragment.kt | 20 ++ .../v2/serverlist/ServerListTabFragment.kt | 3 + .../all/AllServersRecyclerViewAdapter.kt | 3 + .../v2/serverlist/all/ServerListFragment.kt | 3 + .../FavouriteServerListRecyclerViewAdapter.kt | 3 + .../favourite/FavouriteServersListFragment.kt | 3 + .../ivpn/core/v2/settings/SettingsFragment.kt | 13 +- .../splittunneling/SplitTunnelingFragment.kt | 7 + .../SplitTunnelingRecyclerViewAdapter.kt | 3 + .../v2/timepicker/TimePickerActivity.java | 2 + .../core/v2/viewmodel/AppIconViewModel.kt | 59 +++++ .../core/v2/viewmodel/ProtocolViewModel.java | 51 ++++ .../core/vpn/local/PermissionActivity.java | 2 + .../ivpn/core/vpn/wireguard/ConfigManager.kt | 7 + .../ic_launcher_notes_foreground.xml | 44 ++++ .../ic_launcher_notes_monochrome.xml | 33 +++ .../ic_launcher_weather_foreground.xml | 47 ++++ .../ic_launcher_weather_monochrome.xml | 37 +++ .../ic_launcher_calculator_background.xml | 25 ++ .../ic_launcher_calculator_foreground.xml | 38 +++ .../ic_launcher_calculator_monochrome.xml | 38 +++ .../drawable/ic_launcher_notes_background.xml | 25 ++ .../ic_launcher_weather_background.xml | 25 ++ core/src/main/res/layout/content_app_icon.xml | 235 ++++++++++++++++++ core/src/main/res/layout/dialog_mtu.xml | 96 +++++++ .../main/res/layout/dialogue_night_mode.xml | 13 + .../src/main/res/layout/fragment_app_icon.xml | 35 +++ .../protocol_wireguard_section_settings.xml | 71 ++++++ .../res/layout/settings_section_interface.xml | 21 ++ .../ic_launcher_calculator.xml | 24 ++ .../ic_launcher_calculator_round.xml | 24 ++ .../mipmap-anydpi-v26/ic_launcher_notes.xml | 24 ++ .../ic_launcher_notes_round.xml | 24 ++ .../mipmap-anydpi-v26/ic_launcher_weather.xml | 24 ++ .../ic_launcher_weather_round.xml | 24 ++ .../mipmap-hdpi/ic_launcher_calculator.webp | Bin 0 -> 1106 bytes .../ic_launcher_calculator_round.webp | Bin 0 -> 2414 bytes .../res/mipmap-hdpi/ic_launcher_notes.webp | Bin 0 -> 1390 bytes .../mipmap-hdpi/ic_launcher_notes_round.webp | Bin 0 -> 3420 bytes .../res/mipmap-hdpi/ic_launcher_weather.webp | Bin 0 -> 2114 bytes .../ic_launcher_weather_round.webp | Bin 0 -> 4198 bytes .../mipmap-mdpi/ic_launcher_calculator.webp | Bin 0 -> 846 bytes .../ic_launcher_calculator_round.webp | Bin 0 -> 1660 bytes .../res/mipmap-mdpi/ic_launcher_notes.webp | Bin 0 -> 1092 bytes .../mipmap-mdpi/ic_launcher_notes_round.webp | Bin 0 -> 2074 bytes .../res/mipmap-mdpi/ic_launcher_weather.webp | Bin 0 -> 1618 bytes .../ic_launcher_weather_round.webp | Bin 0 -> 2754 bytes .../mipmap-xhdpi/ic_launcher_calculator.webp | Bin 0 -> 1324 bytes .../ic_launcher_calculator_round.webp | Bin 0 -> 3406 bytes .../res/mipmap-xhdpi/ic_launcher_notes.webp | Bin 0 -> 1908 bytes .../mipmap-xhdpi/ic_launcher_notes_round.webp | Bin 0 -> 4696 bytes .../res/mipmap-xhdpi/ic_launcher_weather.webp | Bin 0 -> 2842 bytes .../ic_launcher_weather_round.webp | Bin 0 -> 5602 bytes .../mipmap-xxhdpi/ic_launcher_calculator.webp | Bin 0 -> 1978 bytes .../ic_launcher_calculator_round.webp | Bin 0 -> 5354 bytes .../res/mipmap-xxhdpi/ic_launcher_notes.webp | Bin 0 -> 2506 bytes .../ic_launcher_notes_round.webp | Bin 0 -> 7094 bytes .../mipmap-xxhdpi/ic_launcher_weather.webp | Bin 0 -> 3848 bytes .../ic_launcher_weather_round.webp | Bin 0 -> 8174 bytes .../ic_launcher_calculator.webp | Bin 0 -> 2530 bytes .../ic_launcher_calculator_round.webp | Bin 0 -> 7470 bytes .../res/mipmap-xxxhdpi/ic_launcher_notes.webp | Bin 0 -> 4098 bytes .../ic_launcher_notes_round.webp | Bin 0 -> 9678 bytes .../mipmap-xxxhdpi/ic_launcher_weather.webp | Bin 0 -> 5026 bytes .../ic_launcher_weather_round.webp | Bin 0 -> 11048 bytes core/src/main/res/navigation/nav_graph.xml | 7 + core/src/main/res/values/colors.xml | 5 + core/src/main/res/values/strings.xml | 24 ++ core/src/main/res/values/styles.xml | 47 ++++ .../ivpn/client/billing/BillingActivity.java | 2 + 88 files changed, 1869 insertions(+), 34 deletions(-) create mode 100644 core/src/main/java/net/ivpn/core/common/appicon/AppIconManager.kt create mode 100644 core/src/main/java/net/ivpn/core/common/nightmode/OledModeController.kt create mode 100644 core/src/main/java/net/ivpn/core/v2/appicon/AppIconFragment.kt create mode 100644 core/src/main/java/net/ivpn/core/v2/viewmodel/AppIconViewModel.kt create mode 100644 core/src/main/res/drawable-v24/ic_launcher_notes_foreground.xml create mode 100644 core/src/main/res/drawable-v24/ic_launcher_notes_monochrome.xml create mode 100644 core/src/main/res/drawable-v24/ic_launcher_weather_foreground.xml create mode 100644 core/src/main/res/drawable-v24/ic_launcher_weather_monochrome.xml create mode 100644 core/src/main/res/drawable/ic_launcher_calculator_background.xml create mode 100644 core/src/main/res/drawable/ic_launcher_calculator_foreground.xml create mode 100644 core/src/main/res/drawable/ic_launcher_calculator_monochrome.xml create mode 100644 core/src/main/res/drawable/ic_launcher_notes_background.xml create mode 100644 core/src/main/res/drawable/ic_launcher_weather_background.xml create mode 100644 core/src/main/res/layout/content_app_icon.xml create mode 100644 core/src/main/res/layout/dialog_mtu.xml create mode 100644 core/src/main/res/layout/fragment_app_icon.xml create mode 100644 core/src/main/res/mipmap-anydpi-v26/ic_launcher_calculator.xml create mode 100644 core/src/main/res/mipmap-anydpi-v26/ic_launcher_calculator_round.xml create mode 100644 core/src/main/res/mipmap-anydpi-v26/ic_launcher_notes.xml create mode 100644 core/src/main/res/mipmap-anydpi-v26/ic_launcher_notes_round.xml create mode 100644 core/src/main/res/mipmap-anydpi-v26/ic_launcher_weather.xml create mode 100644 core/src/main/res/mipmap-anydpi-v26/ic_launcher_weather_round.xml create mode 100644 core/src/main/res/mipmap-hdpi/ic_launcher_calculator.webp create mode 100644 core/src/main/res/mipmap-hdpi/ic_launcher_calculator_round.webp create mode 100644 core/src/main/res/mipmap-hdpi/ic_launcher_notes.webp create mode 100644 core/src/main/res/mipmap-hdpi/ic_launcher_notes_round.webp create mode 100644 core/src/main/res/mipmap-hdpi/ic_launcher_weather.webp create mode 100644 core/src/main/res/mipmap-hdpi/ic_launcher_weather_round.webp create mode 100644 core/src/main/res/mipmap-mdpi/ic_launcher_calculator.webp create mode 100644 core/src/main/res/mipmap-mdpi/ic_launcher_calculator_round.webp create mode 100644 core/src/main/res/mipmap-mdpi/ic_launcher_notes.webp create mode 100644 core/src/main/res/mipmap-mdpi/ic_launcher_notes_round.webp create mode 100644 core/src/main/res/mipmap-mdpi/ic_launcher_weather.webp create mode 100644 core/src/main/res/mipmap-mdpi/ic_launcher_weather_round.webp create mode 100644 core/src/main/res/mipmap-xhdpi/ic_launcher_calculator.webp create mode 100644 core/src/main/res/mipmap-xhdpi/ic_launcher_calculator_round.webp create mode 100644 core/src/main/res/mipmap-xhdpi/ic_launcher_notes.webp create mode 100644 core/src/main/res/mipmap-xhdpi/ic_launcher_notes_round.webp create mode 100644 core/src/main/res/mipmap-xhdpi/ic_launcher_weather.webp create mode 100644 core/src/main/res/mipmap-xhdpi/ic_launcher_weather_round.webp create mode 100644 core/src/main/res/mipmap-xxhdpi/ic_launcher_calculator.webp create mode 100644 core/src/main/res/mipmap-xxhdpi/ic_launcher_calculator_round.webp create mode 100644 core/src/main/res/mipmap-xxhdpi/ic_launcher_notes.webp create mode 100644 core/src/main/res/mipmap-xxhdpi/ic_launcher_notes_round.webp create mode 100644 core/src/main/res/mipmap-xxhdpi/ic_launcher_weather.webp create mode 100644 core/src/main/res/mipmap-xxhdpi/ic_launcher_weather_round.webp create mode 100644 core/src/main/res/mipmap-xxxhdpi/ic_launcher_calculator.webp create mode 100644 core/src/main/res/mipmap-xxxhdpi/ic_launcher_calculator_round.webp create mode 100644 core/src/main/res/mipmap-xxxhdpi/ic_launcher_notes.webp create mode 100644 core/src/main/res/mipmap-xxxhdpi/ic_launcher_notes_round.webp create mode 100644 core/src/main/res/mipmap-xxxhdpi/ic_launcher_weather.webp create mode 100644 core/src/main/res/mipmap-xxxhdpi/ic_launcher_weather_round.webp diff --git a/core/src/main/AndroidManifest.xml b/core/src/main/AndroidManifest.xml index 2eaf9be63..2b1e9fc4f 100644 --- a/core/src/main/AndroidManifest.xml +++ b/core/src/main/AndroidManifest.xml @@ -61,21 +61,68 @@ - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . +*/ + +import android.content.ComponentName +import android.content.Context +import android.content.pm.PackageManager +import androidx.annotation.DrawableRes +import androidx.annotation.StringRes +import net.ivpn.core.R +import net.ivpn.core.common.dagger.ApplicationScope +import javax.inject.Inject + +private const val ACTIVITY_ALIAS_PREFIX = "net.ivpn.client" + +@ApplicationScope +class AppIconManager @Inject constructor( + private val context: Context +) { + + private var currentIcon: CustomAppIconData? = null + + fun setNewAppIcon(desiredAppIcon: CustomAppIconData) { + val currentIconData = getCurrentIconData() + + // Disable current icon + context.packageManager.setComponentEnabledSetting( + currentIconData.getComponentName(context), + PackageManager.COMPONENT_ENABLED_STATE_DISABLED, + PackageManager.DONT_KILL_APP + ) + + // Enable new icon + context.packageManager.setComponentEnabledSetting( + desiredAppIcon.getComponentName(context), + PackageManager.COMPONENT_ENABLED_STATE_ENABLED, + PackageManager.DONT_KILL_APP + ) + + currentIcon = desiredAppIcon + } + + fun getCurrentIconData(): CustomAppIconData { + currentIcon?.let { return it } + + val activeIcon = CustomAppIconData.entries.firstOrNull { + context.packageManager.getComponentEnabledSetting(it.getComponentName(context)) == + PackageManager.COMPONENT_ENABLED_STATE_ENABLED + } + + currentIcon = activeIcon ?: CustomAppIconData.DEFAULT + return currentIcon!! + } +} + +enum class CustomAppIconData( + private val componentName: String, + @DrawableRes val iconPreviewResId: Int, + @StringRes val labelResId: Int, + val category: IconCategory +) { + DEFAULT(".MainActivity", R.mipmap.ic_launcher, R.string.app_icon_name_default, IconCategory.IVPN), + WEATHER(".MainActivityWeather", R.mipmap.ic_launcher_weather, R.string.app_icon_name_weather, IconCategory.Discreet), + NOTES(".MainActivityNotes", R.mipmap.ic_launcher_notes, R.string.app_icon_name_notes, IconCategory.Discreet), + CALCULATOR(".MainActivityCalculator", R.mipmap.ic_launcher_calculator, R.string.app_icon_name_calculator, IconCategory.Discreet); + + fun getComponentName(context: Context): ComponentName { + val applicationContext = context.applicationContext + return ComponentName(applicationContext, ACTIVITY_ALIAS_PREFIX + componentName) + } + + enum class IconCategory { + IVPN, + Discreet + } +} + diff --git a/core/src/main/java/net/ivpn/core/common/dagger/ActivityComponent.java b/core/src/main/java/net/ivpn/core/common/dagger/ActivityComponent.java index 47c73966b..bd902e513 100644 --- a/core/src/main/java/net/ivpn/core/common/dagger/ActivityComponent.java +++ b/core/src/main/java/net/ivpn/core/common/dagger/ActivityComponent.java @@ -29,6 +29,7 @@ import net.ivpn.core.v2.account.AccountFragment; import net.ivpn.core.v2.account.LogOutFragment; import net.ivpn.core.v2.alwaysonvpn.AlwaysOnVPNFragment; +import net.ivpn.core.v2.appicon.AppIconFragment; import net.ivpn.core.v2.antitracker.AntiTrackerFragment; import net.ivpn.core.v2.antitracker.AntiTrackerListFragment; import net.ivpn.core.v2.captcha.CaptchaFragment; @@ -156,6 +157,8 @@ interface Factory { void inject(KillSwitchFragment fragment); + void inject(AppIconFragment fragment); + void inject(MockLocationFragment fragment); void inject(MockLocationStep1Fragment fragment); diff --git a/core/src/main/java/net/ivpn/core/common/nightmode/NightMode.kt b/core/src/main/java/net/ivpn/core/common/nightmode/NightMode.kt index 06875bbc7..c5cca41a3 100644 --- a/core/src/main/java/net/ivpn/core/common/nightmode/NightMode.kt +++ b/core/src/main/java/net/ivpn/core/common/nightmode/NightMode.kt @@ -28,17 +28,20 @@ import net.ivpn.core.R enum class NightMode(val id: Int, val systemId: Int, val stringId: Int) { LIGHT(R.id.light_mode, AppCompatDelegate.MODE_NIGHT_NO, R.string.settings_color_theme_light), DARK(R.id.dark_mode, AppCompatDelegate.MODE_NIGHT_YES, R.string.settings_color_theme_dark), + AMOLED_BLACK(R.id.amoled_black_mode, AppCompatDelegate.MODE_NIGHT_YES, R.string.settings_color_theme_amoled_black), SYSTEM_DEFAULT(R.id.system_default_mode, AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM, R.string.settings_color_theme_system_default), BY_BATTERY_SAVER(R.id.set_by_battery_mode, AppCompatDelegate.MODE_NIGHT_AUTO_BATTERY, R.string.settings_color_theme_system_by_battery); + val isOledBlack: Boolean + get() = this == AMOLED_BLACK + companion object { - fun getById(id: Int) : NightMode { - for (mode in values()) { + fun getById(id: Int): NightMode { + for (mode in entries) { if (mode.id == id) { return mode } } - return LIGHT } } diff --git a/core/src/main/java/net/ivpn/core/common/nightmode/OledModeController.kt b/core/src/main/java/net/ivpn/core/common/nightmode/OledModeController.kt new file mode 100644 index 000000000..bb0949623 --- /dev/null +++ b/core/src/main/java/net/ivpn/core/common/nightmode/OledModeController.kt @@ -0,0 +1,171 @@ +package net.ivpn.core.common.nightmode + +/* + IVPN Android app + https://github.com/ivpn/android-app + + Created by Tamim Hossain. + Copyright (c) 2025 IVPN Limited. + + This file is part of the IVPN Android app. + + The IVPN Android app 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 3 of the License, or (at your option) any later version. + + The IVPN Android app 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 the IVPN Android app. If not, see . +*/ + +import android.app.Activity +import android.content.res.ColorStateList +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.graphics.drawable.GradientDrawable +import android.graphics.drawable.LayerDrawable +import android.os.Build +import android.view.View +import android.view.ViewGroup +import android.view.Window +import androidx.appcompat.widget.Toolbar +import androidx.cardview.widget.CardView +import com.google.android.material.appbar.AppBarLayout +import com.google.android.material.floatingactionbutton.FloatingActionButton +import com.google.android.material.tabs.TabLayout +import net.ivpn.core.IVPNApplication +import net.ivpn.core.R + +object OledModeController { + + const val OLED_BLACK = Color.BLACK + const val OLED_CARD = 0xFF0A0A0A.toInt() + const val OLED_HANDLE = 0xFF666666.toInt() + + private val darkGrayColors = setOf( + 0xFF202020.toInt(), + 0xFF1C1C1C.toInt(), + 0xFF1C1C1E.toInt(), + 0xFF121212.toInt(), + 0xFF323232.toInt(), + 0xFF383838.toInt(), + 0xFF292929.toInt(), + 0xFF181818.toInt(), + 0xFF343332.toInt(), + 0xFF060606.toInt() + ) + + private val handleColor = 0xFF49494B.toInt() + + fun applyOledTheme(activity: Activity) { + if (isOledModeEnabled()) { + activity.setTheme(R.style.AppTheme_OLED) + } + } + + fun applyOledColors(window: Window, rootView: View?) { + if (!isOledModeEnabled()) return + + window.statusBarColor = OLED_BLACK + window.navigationBarColor = OLED_BLACK + window.decorView.setBackgroundColor(OLED_BLACK) + rootView?.let { applyOledToViewTree(it) } + } + + fun applyOledToViewTree(view: View) { + if (!isOledModeEnabled()) return + + val background = view.background?.mutate() + when (background) { + is ColorDrawable -> { + if (background.color in darkGrayColors) { + view.setBackgroundColor(OLED_BLACK) + } + } + is GradientDrawable -> { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + background.color?.defaultColor?.let { gradientColor -> + when (gradientColor) { + handleColor -> background.setColor(OLED_HANDLE) + in darkGrayColors -> background.setColor(OLED_BLACK) + } + } + } + } + is LayerDrawable -> { + for (i in 0 until background.numberOfLayers) { + val layer = background.getDrawable(i)?.mutate() + if (layer is GradientDrawable && Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + layer.color?.defaultColor?.let { layerColor -> + when (layerColor) { + handleColor -> layer.setColor(OLED_HANDLE) + in darkGrayColors -> layer.setColor(OLED_BLACK) + } + } + } + } + } + } + + if (view is CardView) { + val cardColor = view.cardBackgroundColor.defaultColor + if (cardColor in darkGrayColors) { + view.setCardBackgroundColor(OLED_CARD) + } + } + + if (view is FloatingActionButton) { + val fabColor = view.backgroundTintList?.defaultColor ?: 0 + if (fabColor in darkGrayColors) { + view.backgroundTintList = ColorStateList.valueOf(OLED_CARD) + } + } + + if (view is Toolbar) { + view.setBackgroundColor(OLED_BLACK) + } + + if (view is AppBarLayout) { + view.setBackgroundColor(OLED_BLACK) + } + + if (view is TabLayout) { + view.setBackgroundColor(OLED_BLACK) + } + + view.backgroundTintList?.let { tintList -> + val tintColor = tintList.defaultColor + if (tintColor in darkGrayColors) { + view.backgroundTintList = ColorStateList.valueOf(OLED_CARD) + } + } + + if (view is ViewGroup) { + for (i in 0 until view.childCount) { + applyOledToViewTree(view.getChildAt(i)) + } + } + } + + fun getBackgroundColor(): Int { + return if (isOledModeEnabled()) OLED_BLACK else 0 + } + + fun getCardColor(): Int { + return if (isOledModeEnabled()) OLED_CARD else 0 + } + + fun isOledModeEnabled(): Boolean { + return try { + val settings = IVPNApplication.appComponent.provideSettings() + settings?.nightMode?.isOledBlack == true + } catch (e: Exception) { + false + } + } +} + diff --git a/core/src/main/java/net/ivpn/core/common/prefs/EncryptedSettingsPreference.kt b/core/src/main/java/net/ivpn/core/common/prefs/EncryptedSettingsPreference.kt index 6ff545711..6c7c982d8 100644 --- a/core/src/main/java/net/ivpn/core/common/prefs/EncryptedSettingsPreference.kt +++ b/core/src/main/java/net/ivpn/core/common/prefs/EncryptedSettingsPreference.kt @@ -79,6 +79,7 @@ class EncryptedSettingsPreference @Inject constructor(val preference: Preference private const val LAST_USED_IP = "LAST_USED_IP" private const val ANTITRACKER_LIST = "ANTITRACKER_LIST" private const val ANTITRACKER_DNS = "ANTITRACKER_DNS" + private const val WIREGUARD_MTU = "WIREGUARD_MTU" } private val sharedPreferences: SharedPreferences = preference.settingsPreference @@ -517,6 +518,15 @@ class EncryptedSettingsPreference @Inject constructor(val preference: Preference return sharedPreferences.getString(ANTITRACKER_DNS, "") } + var wireGuardMtu: Int + get() { + return sharedPreferences.getInt(WIREGUARD_MTU, 0) + } + set(value) { + sharedPreferences.edit { + putInt(WIREGUARD_MTU, value) + } + } private fun putIsMigrated(isMigrated: Boolean) { sharedPreferences.edit { diff --git a/core/src/main/java/net/ivpn/core/common/prefs/Settings.kt b/core/src/main/java/net/ivpn/core/common/prefs/Settings.kt index c60d27244..4b4997126 100644 --- a/core/src/main/java/net/ivpn/core/common/prefs/Settings.kt +++ b/core/src/main/java/net/ivpn/core/common/prefs/Settings.kt @@ -366,6 +366,12 @@ class Settings @Inject constructor( settingsPreference.putRegenerationPeriod(value) } + var wireGuardMtu: Int + get() = settingsPreference.wireGuardMtu + set(value) { + settingsPreference.wireGuardMtu = value + } + fun generateWireGuardKeys(): Keypair { return Keypair() } diff --git a/core/src/main/java/net/ivpn/core/common/shortcuts/ConnectionShortcutsActivity.java b/core/src/main/java/net/ivpn/core/common/shortcuts/ConnectionShortcutsActivity.java index 16505ec5e..c3d255045 100644 --- a/core/src/main/java/net/ivpn/core/common/shortcuts/ConnectionShortcutsActivity.java +++ b/core/src/main/java/net/ivpn/core/common/shortcuts/ConnectionShortcutsActivity.java @@ -33,6 +33,7 @@ import androidx.appcompat.app.AppCompatActivity; import net.ivpn.core.IVPNApplication; +import net.ivpn.core.common.nightmode.OledModeController; import net.ivpn.core.v2.dialog.DialogBuilder; import net.ivpn.core.v2.dialog.Dialogs; @@ -54,6 +55,7 @@ public class ConnectionShortcutsActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { + OledModeController.INSTANCE.applyOledTheme(this); LOGGER.info("ConnectionShortcutsActivity onCreate"); IVPNApplication.appComponent.provideActivityComponent().create().inject(this); super.onCreate(savedInstanceState); diff --git a/core/src/main/java/net/ivpn/core/ui/theme/Color.kt b/core/src/main/java/net/ivpn/core/ui/theme/Color.kt index 76300728b..97d474394 100644 --- a/core/src/main/java/net/ivpn/core/ui/theme/Color.kt +++ b/core/src/main/java/net/ivpn/core/ui/theme/Color.kt @@ -5,6 +5,9 @@ import androidx.compose.runtime.staticCompositionLocalOf import androidx.compose.ui.graphics.Color val colorPrimary = Color(0xFF398FE6) +val oledBackground = Color(0xFF000000) +val oledSurface = Color(0xFF000000) +val oledCard = Color(0xFF0A0A0A) @Immutable data class CustomColors( @@ -12,7 +15,9 @@ data class CustomColors( val textFieldBackground: Color = Color.Unspecified, val textFieldText: Color = Color.Unspecified, val textFieldPlaceholder: Color = Color.Unspecified, - val secondaryLabel: Color = Color.Unspecified + val secondaryLabel: Color = Color.Unspecified, + val background: Color = Color.Unspecified, + val surface: Color = Color.Unspecified ) val LocalColors = staticCompositionLocalOf { @@ -24,7 +29,9 @@ val CustomLightColorPalette = CustomColors( textFieldBackground = Color(0x54D3DFE6), textFieldText = Color(0xFF2A394B), textFieldPlaceholder = Color(0x802A394B), - secondaryLabel = Color(0x80000000) + secondaryLabel = Color(0x80000000), + background = Color(0xFFF5F9FC), + surface = Color(0xFFFFFFFF) ) val CustomDarkColorPalette = CustomColors( @@ -32,5 +39,17 @@ val CustomDarkColorPalette = CustomColors( textFieldBackground = Color(0xFF1C1C1E), textFieldText = Color(0xFFFFFFFF), textFieldPlaceholder = Color(0x80FFFFFF), - secondaryLabel = Color(0x80FFFFFF) + secondaryLabel = Color(0x80FFFFFF), + background = Color(0xFF121212), + surface = Color(0xFF202020) +) + +val CustomOledColorPalette = CustomColors( + textFieldLabel = Color(0xFFFFFFFF), + textFieldBackground = Color(0xFF0A0A0A), + textFieldText = Color(0xFFFFFFFF), + textFieldPlaceholder = Color(0x80FFFFFF), + secondaryLabel = Color(0x80FFFFFF), + background = oledBackground, + surface = oledSurface ) diff --git a/core/src/main/java/net/ivpn/core/ui/theme/Theme.kt b/core/src/main/java/net/ivpn/core/ui/theme/Theme.kt index 252da2fc5..55b70a1d1 100644 --- a/core/src/main/java/net/ivpn/core/ui/theme/Theme.kt +++ b/core/src/main/java/net/ivpn/core/ui/theme/Theme.kt @@ -6,26 +6,42 @@ import androidx.compose.material.darkColors import androidx.compose.material.lightColors import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider +import net.ivpn.core.common.nightmode.OledModeController private val DarkColorPalette = darkColors( primary = colorPrimary, secondary = colorPrimary ) +private val OledColorPalette = darkColors( + primary = colorPrimary, + secondary = colorPrimary, + background = oledBackground, + surface = oledSurface +) + private val LightColorPalette = lightColors( primary = colorPrimary, secondary = colorPrimary ) @Composable -fun AppTheme(darkTheme: Boolean = isSystemInDarkTheme(), content: @Composable() () -> Unit) { - val colors = - if (darkTheme) DarkColorPalette - else LightColorPalette +fun AppTheme( + darkTheme: Boolean = isSystemInDarkTheme(), + oledTheme: Boolean = OledModeController.isOledModeEnabled(), + content: @Composable() () -> Unit +) { + val colors = when { + oledTheme -> OledColorPalette + darkTheme -> DarkColorPalette + else -> LightColorPalette + } - val customColors = - if (darkTheme) CustomDarkColorPalette - else CustomLightColorPalette + val customColors = when { + oledTheme -> CustomOledColorPalette + darkTheme -> CustomDarkColorPalette + else -> CustomLightColorPalette + } CompositionLocalProvider( LocalColors provides customColors diff --git a/core/src/main/java/net/ivpn/core/v2/MainActivity.kt b/core/src/main/java/net/ivpn/core/v2/MainActivity.kt index ebe021966..ceb757aef 100644 --- a/core/src/main/java/net/ivpn/core/v2/MainActivity.kt +++ b/core/src/main/java/net/ivpn/core/v2/MainActivity.kt @@ -34,12 +34,15 @@ import androidx.navigation.findNavController import net.ivpn.core.IVPNApplication import net.ivpn.core.R import net.ivpn.core.common.extension.setContentSecure +import net.ivpn.core.common.nightmode.OledModeController class MainActivity : AppCompatActivity(), NavController.OnDestinationChangedListener { override fun onCreate(savedInstanceState: Bundle?) { + OledModeController.applyOledTheme(this) super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) + OledModeController.applyOledColors(window, findViewById(android.R.id.content)) } override fun onPostCreate(savedInstanceState: Bundle?) { @@ -57,6 +60,11 @@ class MainActivity : AppCompatActivity(), NavController.OnDestinationChangedList override fun onDestinationChanged(controller: NavController, destination: NavDestination, arguments: Bundle?) { currentFocus?.hideKeyboard() + findViewById(R.id.nav_host_fragment)?.post { + findViewById(R.id.nav_host_fragment)?.let { + OledModeController.applyOledToViewTree(it) + } + } } private fun View.hideKeyboard() { diff --git a/core/src/main/java/net/ivpn/core/v2/account/LogOutFragment.kt b/core/src/main/java/net/ivpn/core/v2/account/LogOutFragment.kt index efe013014..760f21a3f 100644 --- a/core/src/main/java/net/ivpn/core/v2/account/LogOutFragment.kt +++ b/core/src/main/java/net/ivpn/core/v2/account/LogOutFragment.kt @@ -33,6 +33,7 @@ import androidx.navigation.fragment.NavHostFragment import com.google.android.material.bottomsheet.BottomSheetDialogFragment import net.ivpn.core.IVPNApplication import net.ivpn.core.R +import net.ivpn.core.common.nightmode.OledModeController import net.ivpn.core.databinding.FragmentLogoutBottomSheetBinding import net.ivpn.core.v2.viewmodel.AccountViewModel import javax.inject.Inject @@ -44,6 +45,14 @@ class LogOutFragment : BottomSheetDialogFragment() { @Inject lateinit var account: AccountViewModel + override fun getTheme(): Int { + return if (OledModeController.isOledModeEnabled()) { + R.style.AppTheme_BottomSheet_OLED + } else { + super.getTheme() + } + } + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -58,6 +67,9 @@ class LogOutFragment : BottomSheetDialogFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) IVPNApplication.appComponent.provideActivityComponent().create().inject(this) + if (OledModeController.isOledModeEnabled()) { + binding.bottomSheet.setBackgroundColor(requireContext().getColor(R.color.oled_background)) + } init() } diff --git a/core/src/main/java/net/ivpn/core/v2/appicon/AppIconFragment.kt b/core/src/main/java/net/ivpn/core/v2/appicon/AppIconFragment.kt new file mode 100644 index 000000000..9ea1d6d4f --- /dev/null +++ b/core/src/main/java/net/ivpn/core/v2/appicon/AppIconFragment.kt @@ -0,0 +1,140 @@ +package net.ivpn.core.v2.appicon + +/* + IVPN Android app + https://github.com/ivpn/android-app + + Created by Tamim Hossain. + Copyright (c) 2025 IVPN Limited. + + This file is part of the IVPN Android app. + + The IVPN Android app 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 3 of the License, or (at your option) any later version. + + The IVPN Android app 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 the IVPN Android app. If not, see . +*/ + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.appcompat.app.AlertDialog +import androidx.databinding.DataBindingUtil +import androidx.fragment.app.Fragment +import androidx.navigation.fragment.findNavController +import androidx.navigation.ui.AppBarConfiguration +import androidx.navigation.ui.setupWithNavController +import net.ivpn.core.IVPNApplication +import net.ivpn.core.R +import net.ivpn.core.common.appicon.CustomAppIconData +import net.ivpn.core.common.nightmode.OledModeController +import net.ivpn.core.databinding.FragmentAppIconBinding +import net.ivpn.core.v2.MainActivity +import net.ivpn.core.v2.viewmodel.AppIconViewModel +import javax.inject.Inject + +class AppIconFragment : Fragment() { + + private lateinit var binding: FragmentAppIconBinding + + @Inject + lateinit var viewModel: AppIconViewModel + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + binding = DataBindingUtil.inflate(inflater, R.layout.fragment_app_icon, container, false) + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + IVPNApplication.appComponent.provideActivityComponent().create().inject(this) + initToolbar() + initViews() + } + + override fun onResume() { + super.onResume() + viewModel.onResume() + updateRadioButtons() + } + + override fun onStart() { + super.onStart() + activity?.let { + if (it is MainActivity) { + it.setContentSecure(false) + } + } + } + + private fun initToolbar() { + val navController = findNavController() + val appBarConfiguration = AppBarConfiguration(navController.graph) + binding.toolbar.setupWithNavController(navController, appBarConfiguration) + } + + private fun initViews() { + binding.contentLayout.viewModel = viewModel + + binding.contentLayout.iconDefault.setOnClickListener { + showConfirmationDialog(CustomAppIconData.DEFAULT) + } + + binding.contentLayout.iconWeather.setOnClickListener { + showConfirmationDialog(CustomAppIconData.WEATHER) + } + + binding.contentLayout.iconNotes.setOnClickListener { + showConfirmationDialog(CustomAppIconData.NOTES) + } + + binding.contentLayout.iconCalculator.setOnClickListener { + showConfirmationDialog(CustomAppIconData.CALCULATOR) + } + } + + private fun showConfirmationDialog(icon: CustomAppIconData) { + if (viewModel.isSelected(icon)) { + return + } + + AlertDialog.Builder(requireContext(), getDialogStyle()) + .setTitle(R.string.app_icon_change_title) + .setMessage(R.string.app_icon_change_message) + .setPositiveButton(R.string.app_icon_change_confirm) { _, _ -> + viewModel.selectIcon(icon) + updateRadioButtons() + } + .setNegativeButton(R.string.dialog_cancel, null) + .show() + } + + private fun updateRadioButtons() { + val currentIcon = viewModel.currentIcon.get() + binding.contentLayout.radioDefault.isChecked = currentIcon == CustomAppIconData.DEFAULT + binding.contentLayout.radioWeather.isChecked = currentIcon == CustomAppIconData.WEATHER + binding.contentLayout.radioNotes.isChecked = currentIcon == CustomAppIconData.NOTES + binding.contentLayout.radioCalculator.isChecked = currentIcon == CustomAppIconData.CALCULATOR + } + + private fun getDialogStyle(): Int { + return if (OledModeController.isOledModeEnabled()) { + R.style.AppTheme_AlertDialog_OLED + } else { + R.style.AppTheme_AlertDialog + } + } +} + diff --git a/core/src/main/java/net/ivpn/core/v2/connect/ConnectFragment.kt b/core/src/main/java/net/ivpn/core/v2/connect/ConnectFragment.kt index d717d44c9..90781a826 100644 --- a/core/src/main/java/net/ivpn/core/v2/connect/ConnectFragment.kt +++ b/core/src/main/java/net/ivpn/core/v2/connect/ConnectFragment.kt @@ -71,6 +71,7 @@ import net.ivpn.core.v2.map.model.Location import net.ivpn.core.v2.network.NetworkViewModel import net.ivpn.core.v2.signup.SignUpController import net.ivpn.core.v2.viewmodel.* +import net.ivpn.core.common.nightmode.OledModeController import net.ivpn.core.vpn.ServiceConstants import org.slf4j.LoggerFactory import javax.inject.Inject @@ -143,6 +144,7 @@ class ConnectFragment : Fragment(), MultiHopViewModel.MultiHopNavigator, LOGGER.info("On view created") IVPNApplication.appComponent.provideActivityComponent().create().inject(this) initViews() + view.post { OledModeController.applyOledToViewTree(view) } // Support variable bottom navigation height (Gesture, 2-Button, 3-Button) for Android 35+ ViewCompat.setOnApplyWindowInsetsListener(view) { _, insets -> @@ -176,6 +178,7 @@ class ConnectFragment : Fragment(), MultiHopViewModel.MultiHopNavigator, account.updateSessionStatus() checkLocationPermission() applySlidingPanelSide() + view?.let { OledModeController.applyOledToViewTree(it) } } override fun onStart() { diff --git a/core/src/main/java/net/ivpn/core/v2/connect/createSession/CreateSessionFragment.java b/core/src/main/java/net/ivpn/core/v2/connect/createSession/CreateSessionFragment.java index d1b452a78..7a54b5b82 100644 --- a/core/src/main/java/net/ivpn/core/v2/connect/createSession/CreateSessionFragment.java +++ b/core/src/main/java/net/ivpn/core/v2/connect/createSession/CreateSessionFragment.java @@ -38,6 +38,7 @@ import com.google.android.material.bottomsheet.BottomSheetDialogFragment; import net.ivpn.core.R; +import net.ivpn.core.common.nightmode.OledModeController; import net.ivpn.core.databinding.BottomSheetBinding; import net.ivpn.core.databinding.BottomSheetDmProBinding; import net.ivpn.core.databinding.BottomSheetLegacyStandardBinding; @@ -60,6 +61,14 @@ public CreateSessionFragment(SessionErrorResponse error) { this.error = error; } + @Override + public int getTheme() { + if (OledModeController.INSTANCE.isOledModeEnabled()) { + return R.style.AppTheme_BottomSheet_OLED; + } + return super.getTheme(); + } + @Override public void onAttach(@NonNull Context context) { super.onAttach(context); @@ -112,6 +121,9 @@ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup c @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); + if (OledModeController.INSTANCE.isOledModeEnabled()) { + view.setBackgroundColor(requireContext().getColor(R.color.oled_background)); + } init(); } diff --git a/core/src/main/java/net/ivpn/core/v2/dialog/DialogBuilder.kt b/core/src/main/java/net/ivpn/core/v2/dialog/DialogBuilder.kt index 656315f0a..15c4f3c10 100644 --- a/core/src/main/java/net/ivpn/core/v2/dialog/DialogBuilder.kt +++ b/core/src/main/java/net/ivpn/core/v2/dialog/DialogBuilder.kt @@ -47,17 +47,27 @@ import net.ivpn.core.common.InputFilterMinMax import net.ivpn.core.common.extension.setContentSecure import net.ivpn.core.common.utils.DateUtil import net.ivpn.core.databinding.DialogCustomDnsBinding +import net.ivpn.core.databinding.DialogMtuBinding import net.ivpn.core.v2.customdns.OnDNSChangedListener import net.ivpn.core.v2.protocol.dialog.WireGuardDetailsDialogListener import net.ivpn.core.v2.protocol.dialog.WireGuardInfo import net.ivpn.core.v2.timepicker.OnDelayOptionSelected import net.ivpn.core.v2.timepicker.PauseDelay +import net.ivpn.core.common.nightmode.OledModeController import org.slf4j.LoggerFactory import java.util.* object DialogBuilder { private val LOGGER = LoggerFactory.getLogger(DialogBuilder::class.java) + private fun getDialogStyle(): Int { + return if (OledModeController.isOledModeEnabled()) { + R.style.AppTheme_AlertDialog_OLED + } else { + R.style.AlertDialog + } + } + @JvmStatic fun createOptionDialog( context: Context?, dialogAttr: Dialogs, @@ -67,7 +77,7 @@ object DialogBuilder { if (context == null) { return } - val builder = MaterialAlertDialogBuilder(context, R.style.AlertDialog) + val builder = MaterialAlertDialogBuilder(context, getDialogStyle()) builder.setTitle(context.getString(dialogAttr.titleId)) builder.setMessage(context.getString(dialogAttr.messageId)) if (dialogAttr.positiveBtnId != -1) { @@ -94,7 +104,7 @@ object DialogBuilder { if (context == null || dialogAttr == null) { return } - val builder = MaterialAlertDialogBuilder(context, R.style.AlertDialog) + val builder = MaterialAlertDialogBuilder(context, getDialogStyle()) builder.setTitle(context.getString(dialogAttr.titleId)) builder.setMessage(context.getString(dialogAttr.messageId)) builder.setNegativeButton(context.getString(dialogAttr.negativeBtnId), null) @@ -116,7 +126,7 @@ object DialogBuilder { if (context == null) { return } - val builder = MaterialAlertDialogBuilder(context, R.style.AlertDialog) + val builder = MaterialAlertDialogBuilder(context, getDialogStyle()) builder.setTitle(title) builder.setMessage(msg) builder.setNegativeButton(context.getString(R.string.dialogs_ok), null) @@ -141,7 +151,7 @@ object DialogBuilder { if (context == null) { return } - val builder = AlertDialog.Builder(context, R.style.AlertDialog) + val builder = AlertDialog.Builder(context, getDialogStyle()) builder.setTitle(title) builder.setMessage(msg) builder.setOnCancelListener(cancelListener) @@ -173,7 +183,7 @@ object DialogBuilder { if (context == null) { return null } - val builder = AlertDialog.Builder(context, R.style.AlertDialog) + val builder = AlertDialog.Builder(context, getDialogStyle()) builder.setTitle(context.getString(dialogAttr.titleId)) builder.setMessage(context.getString(dialogAttr.messageId)) @@ -215,7 +225,7 @@ object DialogBuilder { if (context == null) { return } - val builder = AlertDialog.Builder(context, R.style.AlertDialog) + val builder = AlertDialog.Builder(context, getDialogStyle()) val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater val dialogView = inflater.inflate(R.layout.dialog_predefined_time_picker, null) val delayMap: MutableMap = HashMap() @@ -258,7 +268,7 @@ object DialogBuilder { if (context == null) { return } - val builder = AlertDialog.Builder(context, R.style.AlertDialog) + val builder = AlertDialog.Builder(context, getDialogStyle()) val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater val dialogView = inflater.inflate(R.layout.dialog_custom_time_picker, null) val pauseTime = LongArray(1) @@ -299,9 +309,12 @@ object DialogBuilder { if (context == null) { return } - val builder = AlertDialog.Builder(context, R.style.AlertDialog) + val builder = AlertDialog.Builder(context, getDialogStyle()) val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater val dialogView = inflater.inflate(R.layout.dialog_wireguard_details, null) + if (OledModeController.isOledModeEnabled()) { + dialogView.setBackgroundColor(context.getColor(R.color.oled_background)) + } builder.setView(dialogView) val alertDialog = builder.create() (dialogView.findViewById(R.id.wg_public_key) as TextView).text = info.publicKey @@ -339,7 +352,7 @@ object DialogBuilder { if (context == null) { return } - val builder = AlertDialog.Builder(context, R.style.AlertDialog) + val builder = AlertDialog.Builder(context, getDialogStyle()) val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater val viewModel = IVPNApplication.appComponent.provideActivityComponent().create().dialogueViewModel @@ -350,6 +363,9 @@ object DialogBuilder { ) binding.viewmodel = viewModel val dialogView = binding.root + if (OledModeController.isOledModeEnabled()) { + dialogView.setBackgroundColor(context.getColor(R.color.oled_background)) + } builder.setView(dialogView) val alertDialog = builder.create() binding.firstValue.filters = arrayOf(InputFilterMinMax(0, 255)) @@ -379,4 +395,76 @@ object DialogBuilder { exception.printStackTrace() } } + + @JvmStatic + fun createMtuDialog( + context: Context?, + currentMtu: String, + onMtuSaved: (String) -> Unit, + onMtuError: () -> Unit + ) { + LOGGER.info("Create MTU dialog") + if (context == null) { + return + } + val builder = AlertDialog.Builder(context, getDialogStyle()) + val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater + val binding: DialogMtuBinding = DataBindingUtil.inflate( + inflater, + R.layout.dialog_mtu, null, false + ) + binding.mtuValue = currentMtu + val dialogView = binding.root + if (OledModeController.isOledModeEnabled()) { + dialogView.setBackgroundColor(context.getColor(R.color.oled_background)) + binding.mtuInput.setHintTextColor(context.getColor(R.color.oled_hint_text)) + } + builder.setView(dialogView) + val alertDialog = builder.create() + + binding.mtuInput.setOnEditorActionListener { _, actionId, _ -> + if (actionId == EditorInfo.IME_ACTION_DONE) { + val mtuString = binding.mtuInput.text?.toString() ?: "" + if (isValidMtu(mtuString)) { + onMtuSaved(mtuString) + alertDialog.dismiss() + } else { + onMtuError() + } + } + false + } + + dialogView.findViewById(R.id.apply_action).setOnClickListener { + val mtuString = binding.mtuInput.text?.toString() ?: "" + if (isValidMtu(mtuString)) { + onMtuSaved(mtuString) + alertDialog.dismiss() + } else { + onMtuError() + } + } + dialogView.findViewById(R.id.cancel_action).setOnClickListener { alertDialog.dismiss() } + + if ((context as Activity).isFinishing) { + return + } + try { + alertDialog.show() + } catch (exception: Exception) { + exception.printStackTrace() + } + } + + private fun isValidMtu(mtuString: String): Boolean { + if (mtuString.isEmpty()) { + return true // Empty means use default + } + return try { + val mtu = mtuString.toInt() + mtu == 0 || (mtu in 576..65535) + } catch (e: NumberFormatException) { + false + } + } } \ No newline at end of file diff --git a/core/src/main/java/net/ivpn/core/v2/dialog/DialogBuilderK.kt b/core/src/main/java/net/ivpn/core/v2/dialog/DialogBuilderK.kt index ec6bbb6e7..9b29dda56 100644 --- a/core/src/main/java/net/ivpn/core/v2/dialog/DialogBuilderK.kt +++ b/core/src/main/java/net/ivpn/core/v2/dialog/DialogBuilderK.kt @@ -36,12 +36,21 @@ import net.ivpn.core.databinding.DialogueNightModeBinding import net.ivpn.core.v2.network.dialog.NetworkChangeDialogViewModel import net.ivpn.core.v2.viewmodel.ColorThemeViewModel import net.ivpn.core.v2.viewmodel.ServerListFilterViewModel +import net.ivpn.core.common.nightmode.OledModeController object DialogBuilderK { + private fun getDialogStyle(): Int { + return if (OledModeController.isOledModeEnabled()) { + R.style.AppTheme_AlertDialog_OLED + } else { + R.style.AppTheme_AlertDialog + } + } + fun openDarkModeDialogue(context: Context, listener: OnNightModeChangedListener, colorThemeViewModel: ColorThemeViewModel) { val builder: AlertDialog.Builder = - AlertDialog.Builder(context, R.style.AppTheme_AlertDialog) + AlertDialog.Builder(context, getDialogStyle()) val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater @@ -75,7 +84,7 @@ object DialogBuilderK { listener: ServerListFilterViewModel.OnFilterChangedListener, filterViewModel: ServerListFilterViewModel) { val builder: AlertDialog.Builder = - AlertDialog.Builder(context, R.style.AppTheme_AlertDialog) + AlertDialog.Builder(context, getDialogStyle()) val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater @@ -104,7 +113,7 @@ object DialogBuilderK { fun openChangeNetworkStatusDialogue(context: Context, dialogViewModel: NetworkChangeDialogViewModel) { val builder: AlertDialog.Builder = - AlertDialog.Builder(context, R.style.AppTheme_AlertDialog) + AlertDialog.Builder(context, getDialogStyle()) val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater @@ -133,7 +142,7 @@ object DialogBuilderK { fun openChangeDefaultNetworkStatusDialogue(context: Context, dialogViewModel: NetworkChangeDialogViewModel) { val builder: AlertDialog.Builder = - AlertDialog.Builder(context, R.style.AppTheme_AlertDialog) + AlertDialog.Builder(context, getDialogStyle()) val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater diff --git a/core/src/main/java/net/ivpn/core/v2/protocol/ProtocolFragment.kt b/core/src/main/java/net/ivpn/core/v2/protocol/ProtocolFragment.kt index 573f6bf21..9a2e8dca4 100644 --- a/core/src/main/java/net/ivpn/core/v2/protocol/ProtocolFragment.kt +++ b/core/src/main/java/net/ivpn/core/v2/protocol/ProtocolFragment.kt @@ -107,6 +107,9 @@ class ProtocolFragment : Fragment(), ProtocolNavigator { binding.contentLayout.wgProtocolSettings.wireguardDetails.setOnClickListener { openWireGuardDetails() } + binding.contentLayout.wgProtocolSettings.wireguardMtu.setOnClickListener { + openMtuDialog() + } binding.contentLayout.protocolSelection.comparisonText.movementMethod = LinkMovementMethod.getInstance() } @@ -127,6 +130,23 @@ class ProtocolFragment : Fragment(), ProtocolNavigator { navigate(action) } + private fun openMtuDialog() { + DialogBuilder.createMtuDialog( + context, + viewModel.getMtuDisplayValue(), + onMtuSaved = { mtuString -> + viewModel.saveMtu(mtuString) + }, + onMtuError = { + DialogBuilder.createFullCustomNotificationDialog( + context, + getString(R.string.dialogs_error), + getString(R.string.protocol_wg_mtu_error) + ) + } + ) + } + override fun notifyUser(msgId: Int, actionId: Int, listener: View.OnClickListener?) { SnackbarUtil.show(binding.coordinator, msgId, actionId, listener) } diff --git a/core/src/main/java/net/ivpn/core/v2/serverlist/ServerListTabFragment.kt b/core/src/main/java/net/ivpn/core/v2/serverlist/ServerListTabFragment.kt index 5e4fe0cca..e264bc301 100644 --- a/core/src/main/java/net/ivpn/core/v2/serverlist/ServerListTabFragment.kt +++ b/core/src/main/java/net/ivpn/core/v2/serverlist/ServerListTabFragment.kt @@ -41,6 +41,7 @@ import net.ivpn.core.rest.data.model.ServerType import net.ivpn.core.databinding.FragmentTabsServerListBinding import net.ivpn.core.v2.viewmodel.ServersListCommonViewModel import net.ivpn.core.v2.MainActivity +import net.ivpn.core.common.nightmode.OledModeController import net.ivpn.core.v2.dialog.DialogBuilderK import net.ivpn.core.v2.serverlist.dialog.Filters import net.ivpn.core.v2.viewmodel.ServerListFilterViewModel @@ -79,6 +80,7 @@ class ServerListTabFragment : Fragment(), ServerListFilterViewModel.OnFilterChan IVPNApplication.appComponent.provideActivityComponent().create().inject(this) initViews() initToolbar() + view.post { OledModeController.applyOledToViewTree(view) } // Support variable bottom navigation height (Gesture, 2-Button, 3-Button) for Android 35+ ViewCompat.setOnApplyWindowInsetsListener(view) { _, insets -> @@ -97,6 +99,7 @@ class ServerListTabFragment : Fragment(), ServerListFilterViewModel.OnFilterChan super.onResume() LOGGER.info("onResume") filterViewModel.onResume() + view?.let { OledModeController.applyOledToViewTree(it) } } override fun onStart() { diff --git a/core/src/main/java/net/ivpn/core/v2/serverlist/all/AllServersRecyclerViewAdapter.kt b/core/src/main/java/net/ivpn/core/v2/serverlist/all/AllServersRecyclerViewAdapter.kt index 277ef6d8a..290a9372a 100644 --- a/core/src/main/java/net/ivpn/core/v2/serverlist/all/AllServersRecyclerViewAdapter.kt +++ b/core/src/main/java/net/ivpn/core/v2/serverlist/all/AllServersRecyclerViewAdapter.kt @@ -48,6 +48,7 @@ import net.ivpn.core.v2.serverlist.items.ConnectionOption import net.ivpn.core.v2.serverlist.items.FastestServerItem import net.ivpn.core.v2.serverlist.items.RandomServerItem import net.ivpn.core.v2.serverlist.items.SearchServerItem +import net.ivpn.core.common.nightmode.OledModeController import org.slf4j.LoggerFactory import java.util.* import javax.inject.Inject @@ -154,6 +155,8 @@ class AllServersRecyclerViewAdapter( } else if (holder is SearchViewHolder) { searchBinding = holder.binding } + // Apply OLED colors to recycled/new items + OledModeController.applyOledToViewTree(holder.itemView) } private fun setPing(binding: ServerItemBinding, server: Server) { diff --git a/core/src/main/java/net/ivpn/core/v2/serverlist/all/ServerListFragment.kt b/core/src/main/java/net/ivpn/core/v2/serverlist/all/ServerListFragment.kt index f963d4874..681f681e3 100644 --- a/core/src/main/java/net/ivpn/core/v2/serverlist/all/ServerListFragment.kt +++ b/core/src/main/java/net/ivpn/core/v2/serverlist/all/ServerListFragment.kt @@ -48,6 +48,7 @@ import net.ivpn.core.v2.viewmodel.ConnectionViewModel import net.ivpn.core.v2.viewmodel.IPv6ViewModel import net.ivpn.core.v2.viewmodel.ServerListFilterViewModel import net.ivpn.core.v2.viewmodel.ServerListViewModel +import net.ivpn.core.common.nightmode.OledModeController import org.slf4j.LoggerFactory import javax.inject.Inject @@ -99,6 +100,7 @@ class ServerListFragment : Fragment(), init() viewmodel.start(serverType) binding.lifecycleOwner = this + view.post { OledModeController.applyOledToViewTree(view) } val pingObserver = Observer> { map -> (binding.recyclerView.adapter as ServerBasedRecyclerViewAdapter).setPings(map) @@ -110,6 +112,7 @@ class ServerListFragment : Fragment(), override fun onResume() { super.onResume() viewmodel.navigators.add(this) + view?.let { OledModeController.applyOledToViewTree(it) } } override fun onPause() { diff --git a/core/src/main/java/net/ivpn/core/v2/serverlist/favourite/FavouriteServerListRecyclerViewAdapter.kt b/core/src/main/java/net/ivpn/core/v2/serverlist/favourite/FavouriteServerListRecyclerViewAdapter.kt index 66a293029..9fa801c29 100644 --- a/core/src/main/java/net/ivpn/core/v2/serverlist/favourite/FavouriteServerListRecyclerViewAdapter.kt +++ b/core/src/main/java/net/ivpn/core/v2/serverlist/favourite/FavouriteServerListRecyclerViewAdapter.kt @@ -44,6 +44,7 @@ import net.ivpn.core.v2.serverlist.dialog.Filters import net.ivpn.core.v2.serverlist.holders.HolderListener import net.ivpn.core.v2.serverlist.holders.ServerViewHolder import net.ivpn.core.v2.serverlist.items.ConnectionOption +import net.ivpn.core.common.nightmode.OledModeController import java.util.* import java.util.concurrent.ConcurrentHashMap import javax.inject.Inject @@ -108,6 +109,8 @@ class FavouriteServerListRecyclerViewAdapter( setPing(holder.binding, server) holder.bind(server, forbiddenServer, isIPv6BadgeEnabled, filter) } + // Apply OLED colors to recycled/new items + OledModeController.applyOledToViewTree(holder.itemView) } private fun setPing(binding: ServerItemBinding, server: Server) { diff --git a/core/src/main/java/net/ivpn/core/v2/serverlist/favourite/FavouriteServersListFragment.kt b/core/src/main/java/net/ivpn/core/v2/serverlist/favourite/FavouriteServersListFragment.kt index eb1c3bd67..ba2745f4d 100644 --- a/core/src/main/java/net/ivpn/core/v2/serverlist/favourite/FavouriteServersListFragment.kt +++ b/core/src/main/java/net/ivpn/core/v2/serverlist/favourite/FavouriteServersListFragment.kt @@ -48,6 +48,7 @@ import net.ivpn.core.v2.viewmodel.ConnectionViewModel import net.ivpn.core.v2.viewmodel.IPv6ViewModel import net.ivpn.core.v2.viewmodel.ServerListFilterViewModel import net.ivpn.core.v2.viewmodel.ServerListViewModel +import net.ivpn.core.common.nightmode.OledModeController import org.slf4j.LoggerFactory import javax.inject.Inject @@ -106,6 +107,7 @@ class FavouriteServersListFragment : Fragment(), ServerListViewModel.ServerListN init(view) viewmodel.start(serverType) binding.lifecycleOwner = this + view.post { OledModeController.applyOledToViewTree(view) } val pingObserver = Observer> { map -> (binding.recyclerView.adapter as ServerBasedRecyclerViewAdapter).setPings(map) @@ -117,6 +119,7 @@ class FavouriteServersListFragment : Fragment(), ServerListViewModel.ServerListN override fun onResume() { super.onResume() viewmodel.navigators.add(this) + view?.let { OledModeController.applyOledToViewTree(it) } } override fun onPause() { diff --git a/core/src/main/java/net/ivpn/core/v2/settings/SettingsFragment.kt b/core/src/main/java/net/ivpn/core/v2/settings/SettingsFragment.kt index 7cef8e1c9..542a29e55 100644 --- a/core/src/main/java/net/ivpn/core/v2/settings/SettingsFragment.kt +++ b/core/src/main/java/net/ivpn/core/v2/settings/SettingsFragment.kt @@ -44,6 +44,7 @@ import net.ivpn.core.common.billing.addfunds.Plan import net.ivpn.core.common.extension.findNavControllerSafely import net.ivpn.core.common.extension.navigate import net.ivpn.core.common.nightmode.NightMode +import net.ivpn.core.common.nightmode.OledModeController import net.ivpn.core.common.nightmode.OnNightModeChangedListener import net.ivpn.core.rest.data.model.ServerType import net.ivpn.core.common.utils.ToastUtil @@ -118,6 +119,7 @@ class SettingsFragment : Fragment(), OnNightModeChangedListener, ColorThemeViewM super.onViewCreated(view, savedInstanceState) IVPNApplication.appComponent.provideActivityComponent().create().inject(this) initViews() + view.post { OledModeController.applyOledToViewTree(view) } } override fun onResume() { @@ -129,6 +131,7 @@ class SettingsFragment : Fragment(), OnNightModeChangedListener, ColorThemeViewM alwaysOnVPN.onResume() logging.onResume() colorTheme.onResume() + view?.let { OledModeController.applyOledToViewTree(it) } } override fun onStart() { @@ -186,6 +189,9 @@ class SettingsFragment : Fragment(), OnNightModeChangedListener, ColorThemeViewM binding.contentLayout.sectionInterface.colorThemeLayout.setOnClickListener { openColorThemeDialogue() } + binding.contentLayout.sectionInterface.appIconLayout.setOnClickListener { + openAppIconScreen() + } binding.contentLayout.sectionConnectivity.splitTunnelingLayout.setOnClickListener { if (!account.authenticated.get()) { openLoginScreen() @@ -418,6 +424,11 @@ class SettingsFragment : Fragment(), OnNightModeChangedListener, ColorThemeViewM DialogBuilderK.openDarkModeDialogue(requireContext(), this, colorTheme) } + private fun openAppIconScreen() { + val action = SettingsFragmentDirections.actionSettingsFragmentToAppIconFragment() + navigate(action) + } + private fun openSplitTunnelingScreen() { val action = SettingsFragmentDirections.actionSettingsFragmentToSplitTunnelingFragment() navigate(action) @@ -526,7 +537,7 @@ class SettingsFragment : Fragment(), OnNightModeChangedListener, ColorThemeViewM return } AppCompatDelegate.setDefaultNightMode(mode.systemId) - println("$mode was selected") + activity?.recreate() } override fun onNightModeCancelClicked() { diff --git a/core/src/main/java/net/ivpn/core/v2/splittunneling/SplitTunnelingFragment.kt b/core/src/main/java/net/ivpn/core/v2/splittunneling/SplitTunnelingFragment.kt index eeb85116b..0a62a7b2b 100644 --- a/core/src/main/java/net/ivpn/core/v2/splittunneling/SplitTunnelingFragment.kt +++ b/core/src/main/java/net/ivpn/core/v2/splittunneling/SplitTunnelingFragment.kt @@ -37,6 +37,7 @@ import net.ivpn.core.R import net.ivpn.core.databinding.FragmentSplitTunnelingBinding import net.ivpn.core.v2.viewmodel.SplitTunnelingViewModel import net.ivpn.core.v2.MainActivity +import net.ivpn.core.common.nightmode.OledModeController import javax.inject.Inject class SplitTunnelingFragment : Fragment() { @@ -64,6 +65,12 @@ class SplitTunnelingFragment : Fragment() { super.onViewCreated(view, savedInstanceState) initToolbar() init() + view.post { OledModeController.applyOledToViewTree(view) } + } + + override fun onResume() { + super.onResume() + view?.let { OledModeController.applyOledToViewTree(it) } } override fun onStart() { diff --git a/core/src/main/java/net/ivpn/core/v2/splittunneling/SplitTunnelingRecyclerViewAdapter.kt b/core/src/main/java/net/ivpn/core/v2/splittunneling/SplitTunnelingRecyclerViewAdapter.kt index f5319091a..6f4f9d688 100644 --- a/core/src/main/java/net/ivpn/core/v2/splittunneling/SplitTunnelingRecyclerViewAdapter.kt +++ b/core/src/main/java/net/ivpn/core/v2/splittunneling/SplitTunnelingRecyclerViewAdapter.kt @@ -35,6 +35,7 @@ import net.ivpn.core.v2.splittunneling.holder.AppsSearchViewHolder import net.ivpn.core.v2.splittunneling.items.ApplicationItem import net.ivpn.core.v2.splittunneling.items.SearchItem import net.ivpn.core.v2.splittunneling.items.SplitTunnelingItem +import net.ivpn.core.common.nightmode.OledModeController import java.util.* import javax.inject.Inject @@ -87,6 +88,8 @@ class SplitTunnelingRecyclerViewAdapter @Inject internal constructor() } else if (holder is AppsSearchViewHolder) { searchBinding = holder.binding } + + OledModeController.applyOledToViewTree(holder.itemView) } override fun getItemCount(): Int { diff --git a/core/src/main/java/net/ivpn/core/v2/timepicker/TimePickerActivity.java b/core/src/main/java/net/ivpn/core/v2/timepicker/TimePickerActivity.java index e3cf67aa4..0388de98c 100644 --- a/core/src/main/java/net/ivpn/core/v2/timepicker/TimePickerActivity.java +++ b/core/src/main/java/net/ivpn/core/v2/timepicker/TimePickerActivity.java @@ -27,6 +27,7 @@ import androidx.appcompat.app.AppCompatActivity; import net.ivpn.core.IVPNApplication; +import net.ivpn.core.common.nightmode.OledModeController; import net.ivpn.core.v2.dialog.DialogBuilder; import net.ivpn.core.vpn.controller.VpnBehaviorController; @@ -43,6 +44,7 @@ public class TimePickerActivity extends AppCompatActivity implements OnDelayOpti @Override protected void onCreate(@Nullable Bundle savedInstanceState) { + OledModeController.INSTANCE.applyOledTheme(this); IVPNApplication.appComponent.provideActivityComponent().create().inject(this); super.onCreate(savedInstanceState); showPredefinedTimePickerDialog(); diff --git a/core/src/main/java/net/ivpn/core/v2/viewmodel/AppIconViewModel.kt b/core/src/main/java/net/ivpn/core/v2/viewmodel/AppIconViewModel.kt new file mode 100644 index 000000000..52ba6d3b2 --- /dev/null +++ b/core/src/main/java/net/ivpn/core/v2/viewmodel/AppIconViewModel.kt @@ -0,0 +1,59 @@ +package net.ivpn.core.v2.viewmodel + +/* + IVPN Android app + https://github.com/ivpn/android-app + + Created by Tamim Hossain. + Copyright (c) 2025 IVPN Limited. + + This file is part of the IVPN Android app. + + The IVPN Android app 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 3 of the License, or (at your option) any later version. + + The IVPN Android app 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 the IVPN Android app. If not, see . +*/ + +import androidx.databinding.ObservableField +import net.ivpn.core.common.appicon.AppIconManager +import net.ivpn.core.common.appicon.CustomAppIconData +import net.ivpn.core.common.dagger.ApplicationScope +import javax.inject.Inject + +@ApplicationScope +class AppIconViewModel @Inject constructor( + private val appIconManager: AppIconManager +) { + + val currentIcon = ObservableField() + + val ivpnIcons: List = CustomAppIconData.entries + .filter { it.category == CustomAppIconData.IconCategory.IVPN } + + val discreetIcons: List = CustomAppIconData.entries + .filter { it.category == CustomAppIconData.IconCategory.Discreet } + + fun onResume() { + currentIcon.set(appIconManager.getCurrentIconData()) + } + + fun selectIcon(icon: CustomAppIconData) { + if (currentIcon.get() != icon) { + appIconManager.setNewAppIcon(icon) + currentIcon.set(icon) + } + } + + fun isSelected(icon: CustomAppIconData): Boolean { + return currentIcon.get() == icon + } +} + diff --git a/core/src/main/java/net/ivpn/core/v2/viewmodel/ProtocolViewModel.java b/core/src/main/java/net/ivpn/core/v2/viewmodel/ProtocolViewModel.java index d9d92c172..eff8aba0b 100644 --- a/core/src/main/java/net/ivpn/core/v2/viewmodel/ProtocolViewModel.java +++ b/core/src/main/java/net/ivpn/core/v2/viewmodel/ProtocolViewModel.java @@ -79,6 +79,10 @@ public class ProtocolViewModel { public ObservableField wgInfo = new ObservableField<>(); public ObservableField obfuscationType = new ObservableField<>(); + public ObservableField wireGuardMtu = new ObservableField<>(); + + private static final int MTU_LOWER_BOUND = 576; + private static final int MTU_UPPER_BOUND = 65535; private ProtocolNavigator navigator; private String wireGuardPublicKey; @@ -186,6 +190,18 @@ private List getAvailablePortsForCurrentObfuscationType() { return false; }; + @SuppressLint("ClickableViewAccessibility") + public View.OnTouchListener mtuTouchListener = (view, motionEvent) -> { + if (isVpnActive()) { + if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) { + navigator.notifyUser(R.string.snackbar_to_change_mtu_disconnect_first, + R.string.snackbar_disconnect_first, null); + } + return true; + } + return false; + }; + @Inject ProtocolViewModel(Context context, Settings settings, WireGuardKeyController keyController, ProtocolController protocolController, VpnBehaviorController vpnBehaviorController, @@ -212,6 +228,9 @@ private void init() { obfuscationType.set(settings.getObfuscationType()); + int mtu = settings.getWireGuardMtu(); + wireGuardMtu.set(mtu > 0 ? String.valueOf(mtu) : ""); + wgInfo.set(getWireGuardInfo()); multiHop.set(multiHopController); } @@ -293,6 +312,38 @@ void setPort(Port port) { } } + public boolean isValidMtu(String mtuString) { + if (mtuString == null || mtuString.isEmpty()) { + // empty is valid that means use default + return true; + } + try { + int mtu = Integer.parseInt(mtuString); + return mtu == 0 || (mtu >= MTU_LOWER_BOUND && mtu <= MTU_UPPER_BOUND); + } catch (NumberFormatException e) { + return false; + } + } + + public void saveMtu(String mtuString) { + LOGGER.info(TAG, "Save MTU: " + mtuString); + int mtu = 0; + if (mtuString != null && !mtuString.isEmpty()) { + try { + mtu = Integer.parseInt(mtuString); + } catch (NumberFormatException e) { + mtu = 0; + } + } + settings.setWireGuardMtu(mtu); + wireGuardMtu.set(mtu > 0 ? String.valueOf(mtu) : ""); + } + + public String getMtuDisplayValue() { + int mtu = settings.getWireGuardMtu(); + return mtu > 0 ? String.valueOf(mtu) : ""; + } + private void onGeneratingError(String error, Throwable throwable) { LOGGER.error(TAG, "On generating error: " + error, throwable); dataLoading.set(false); diff --git a/core/src/main/java/net/ivpn/core/vpn/local/PermissionActivity.java b/core/src/main/java/net/ivpn/core/vpn/local/PermissionActivity.java index 605e4d6a3..bc6e9a78a 100644 --- a/core/src/main/java/net/ivpn/core/vpn/local/PermissionActivity.java +++ b/core/src/main/java/net/ivpn/core/vpn/local/PermissionActivity.java @@ -32,6 +32,7 @@ import android.util.Log; import net.ivpn.core.IVPNApplication; +import net.ivpn.core.common.nightmode.OledModeController; import net.ivpn.core.v2.dialog.DialogBuilder; import net.ivpn.core.v2.dialog.Dialogs; import net.ivpn.core.vpn.controller.VpnBehaviorController; @@ -51,6 +52,7 @@ public class PermissionActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { + OledModeController.INSTANCE.applyOledTheme(this); IVPNApplication.appComponent.provideActivityComponent().create().inject(this); LOGGER.info("onCreate"); super.onCreate(savedInstanceState); diff --git a/core/src/main/java/net/ivpn/core/vpn/wireguard/ConfigManager.kt b/core/src/main/java/net/ivpn/core/vpn/wireguard/ConfigManager.kt index a1f5aad71..7ff470b05 100644 --- a/core/src/main/java/net/ivpn/core/vpn/wireguard/ConfigManager.kt +++ b/core/src/main/java/net/ivpn/core/vpn/wireguard/ConfigManager.kt @@ -244,6 +244,13 @@ class ConfigManager @Inject constructor( val dnsString = getDNS(hosts[0]) config.getInterface().setDnsString(dnsString) + // set only if configured + val mtu = settings.wireGuardMtu + if (mtu > 0) { + config.getInterface().setMtu(mtu) + LOGGER.info("Using custom MTU: $mtu") + } + val endpoint = if (v2rayController.isV2RayEnabled()) { v2rayController.getLocalProxyEndpoint() } else { diff --git a/core/src/main/res/drawable-v24/ic_launcher_notes_foreground.xml b/core/src/main/res/drawable-v24/ic_launcher_notes_foreground.xml new file mode 100644 index 000000000..8dad1610b --- /dev/null +++ b/core/src/main/res/drawable-v24/ic_launcher_notes_foreground.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + diff --git a/core/src/main/res/drawable-v24/ic_launcher_notes_monochrome.xml b/core/src/main/res/drawable-v24/ic_launcher_notes_monochrome.xml new file mode 100644 index 000000000..bc3f4b27e --- /dev/null +++ b/core/src/main/res/drawable-v24/ic_launcher_notes_monochrome.xml @@ -0,0 +1,33 @@ + + + + + + + diff --git a/core/src/main/res/drawable-v24/ic_launcher_weather_foreground.xml b/core/src/main/res/drawable-v24/ic_launcher_weather_foreground.xml new file mode 100644 index 000000000..c6a366b3d --- /dev/null +++ b/core/src/main/res/drawable-v24/ic_launcher_weather_foreground.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + diff --git a/core/src/main/res/drawable-v24/ic_launcher_weather_monochrome.xml b/core/src/main/res/drawable-v24/ic_launcher_weather_monochrome.xml new file mode 100644 index 000000000..b507e12c5 --- /dev/null +++ b/core/src/main/res/drawable-v24/ic_launcher_weather_monochrome.xml @@ -0,0 +1,37 @@ + + + + + + + + diff --git a/core/src/main/res/drawable/ic_launcher_calculator_background.xml b/core/src/main/res/drawable/ic_launcher_calculator_background.xml new file mode 100644 index 000000000..b44c83dc1 --- /dev/null +++ b/core/src/main/res/drawable/ic_launcher_calculator_background.xml @@ -0,0 +1,25 @@ + + + + \ No newline at end of file diff --git a/core/src/main/res/drawable/ic_launcher_calculator_foreground.xml b/core/src/main/res/drawable/ic_launcher_calculator_foreground.xml new file mode 100644 index 000000000..ce196cf4c --- /dev/null +++ b/core/src/main/res/drawable/ic_launcher_calculator_foreground.xml @@ -0,0 +1,38 @@ + + + + + + + + diff --git a/core/src/main/res/drawable/ic_launcher_calculator_monochrome.xml b/core/src/main/res/drawable/ic_launcher_calculator_monochrome.xml new file mode 100644 index 000000000..7e78dec7f --- /dev/null +++ b/core/src/main/res/drawable/ic_launcher_calculator_monochrome.xml @@ -0,0 +1,38 @@ + + + + + + + + diff --git a/core/src/main/res/drawable/ic_launcher_notes_background.xml b/core/src/main/res/drawable/ic_launcher_notes_background.xml new file mode 100644 index 000000000..78ade5923 --- /dev/null +++ b/core/src/main/res/drawable/ic_launcher_notes_background.xml @@ -0,0 +1,25 @@ + + + + \ No newline at end of file diff --git a/core/src/main/res/drawable/ic_launcher_weather_background.xml b/core/src/main/res/drawable/ic_launcher_weather_background.xml new file mode 100644 index 000000000..44fd28ddb --- /dev/null +++ b/core/src/main/res/drawable/ic_launcher_weather_background.xml @@ -0,0 +1,25 @@ + + + + \ No newline at end of file diff --git a/core/src/main/res/layout/content_app_icon.xml b/core/src/main/res/layout/content_app_icon.xml new file mode 100644 index 000000000..e8940f9e0 --- /dev/null +++ b/core/src/main/res/layout/content_app_icon.xml @@ -0,0 +1,235 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/core/src/main/res/layout/dialog_mtu.xml b/core/src/main/res/layout/dialog_mtu.xml new file mode 100644 index 000000000..a61839faa --- /dev/null +++ b/core/src/main/res/layout/dialog_mtu.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/core/src/main/res/layout/dialogue_night_mode.xml b/core/src/main/res/layout/dialogue_night_mode.xml index 8a315e79b..9e2eadf08 100644 --- a/core/src/main/res/layout/dialogue_night_mode.xml +++ b/core/src/main/res/layout/dialogue_night_mode.xml @@ -63,6 +63,19 @@ app:buttonTint="@color/dialogue_button" tools:ignore="RtlSymmetry" /> + + + + + + + + + + + + + + + + + diff --git a/core/src/main/res/layout/protocol_wireguard_section_settings.xml b/core/src/main/res/layout/protocol_wireguard_section_settings.xml index e74878ca7..2d456c6c3 100644 --- a/core/src/main/res/layout/protocol_wireguard_section_settings.xml +++ b/core/src/main/res/layout/protocol_wireguard_section_settings.xml @@ -206,6 +206,77 @@ android:textColor="@color/protocol_text_color" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/src/main/res/mipmap-anydpi-v26/ic_launcher_calculator.xml b/core/src/main/res/mipmap-anydpi-v26/ic_launcher_calculator.xml new file mode 100644 index 000000000..6e833ea58 --- /dev/null +++ b/core/src/main/res/mipmap-anydpi-v26/ic_launcher_calculator.xml @@ -0,0 +1,24 @@ + + + + + + + \ No newline at end of file diff --git a/core/src/main/res/mipmap-anydpi-v26/ic_launcher_calculator_round.xml b/core/src/main/res/mipmap-anydpi-v26/ic_launcher_calculator_round.xml new file mode 100644 index 000000000..6e833ea58 --- /dev/null +++ b/core/src/main/res/mipmap-anydpi-v26/ic_launcher_calculator_round.xml @@ -0,0 +1,24 @@ + + + + + + + \ No newline at end of file diff --git a/core/src/main/res/mipmap-anydpi-v26/ic_launcher_notes.xml b/core/src/main/res/mipmap-anydpi-v26/ic_launcher_notes.xml new file mode 100644 index 000000000..fc8c1fbe3 --- /dev/null +++ b/core/src/main/res/mipmap-anydpi-v26/ic_launcher_notes.xml @@ -0,0 +1,24 @@ + + + + + + + \ No newline at end of file diff --git a/core/src/main/res/mipmap-anydpi-v26/ic_launcher_notes_round.xml b/core/src/main/res/mipmap-anydpi-v26/ic_launcher_notes_round.xml new file mode 100644 index 000000000..fc8c1fbe3 --- /dev/null +++ b/core/src/main/res/mipmap-anydpi-v26/ic_launcher_notes_round.xml @@ -0,0 +1,24 @@ + + + + + + + \ No newline at end of file diff --git a/core/src/main/res/mipmap-anydpi-v26/ic_launcher_weather.xml b/core/src/main/res/mipmap-anydpi-v26/ic_launcher_weather.xml new file mode 100644 index 000000000..fad38f57f --- /dev/null +++ b/core/src/main/res/mipmap-anydpi-v26/ic_launcher_weather.xml @@ -0,0 +1,24 @@ + + + + + + + \ No newline at end of file diff --git a/core/src/main/res/mipmap-anydpi-v26/ic_launcher_weather_round.xml b/core/src/main/res/mipmap-anydpi-v26/ic_launcher_weather_round.xml new file mode 100644 index 000000000..fad38f57f --- /dev/null +++ b/core/src/main/res/mipmap-anydpi-v26/ic_launcher_weather_round.xml @@ -0,0 +1,24 @@ + + + + + + + \ No newline at end of file diff --git a/core/src/main/res/mipmap-hdpi/ic_launcher_calculator.webp b/core/src/main/res/mipmap-hdpi/ic_launcher_calculator.webp new file mode 100644 index 0000000000000000000000000000000000000000..9a051fb50f1d378171c3d425a69fba39055ceff8 GIT binary patch literal 1106 zcmV-Y1g-m0Nk&FW1ONb6MM6+kP&iCI1ONapN5ByfR|h$gBt=rx&~tgUUm+Rpt~=vM z2+5ITyH=FvJ=9L)82%ffRxtBUL5?KJwNf)*pY;EL{|?~=N3GfIf?M0RYGt1H-Mxw* zeIl)eGJa2l3`%hKF5DfC+O!QAr_9M400kO-s%3R4QnmEeX%FtuwiKqQkuNMZUL+*hP*SP0pW z2!wtO?HY20WHOi_gX9Vla!uJVWkVnd{hCOU$(1A!3Z#Dz7rV-Ix11l}uMg|T{pz6C z=DXE;F>9Jbl#2OowK1NH)#2#HVJhd_72*s9$qdCf3&Yue!}QCS|EJuoi?r4+7aqM8h6-FzJHpyp2uj?zCzU%qwIrw@WA>Ft@K`SYH4 zF*LuV=7%6bkfd;?=AR}hCIuuZRvw%_9vh&(-1WkEF879fNcvym=86+NW|bA0D&sbV#@y9*ppXPd}Ab$0y03=<2f72SDgYX|iQ^+{H0 zFhl+Ti;j-D3{zD)Ii3Oe{p_8x8IZ4%Wgr8PJ82OEFhQ2ocD*>e)V4c7)Np1#IZl$O zS&Vy8Ge?LWVKOmAm!vrp9A|=ax_x73gnbX}QEfc27eVbX%~9cT|!|(`@EA zr@KWKCpTEg%yZkSWQ<_|W;UF{0A#CVAIE^1S$g_p)zEkzn^sK+(#Epv_DUHUbrST# zakZ*jlydg}phmOj4>5iRi8C0`p#?fb+(Ee zRE3P4B71F$SnV4{Ht1H13KSW$!o4m}h?{p!BhsoM8Jm6GLU^#s3A%js^79Xn-rvvj Yr;7;i?c?_!($mLpnp0gA)c&Ue0L?58&;S4c literal 0 HcmV?d00001 diff --git a/core/src/main/res/mipmap-hdpi/ic_launcher_calculator_round.webp b/core/src/main/res/mipmap-hdpi/ic_launcher_calculator_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..9191dbecaec23404d256c64cf5831b8c76cf56cf GIT binary patch literal 2414 zcmV-!36b_vNk&Fy2><|BMM6+kP&iCl2><{uN5Byf^#+2rZR7BVz3rzE5fdQ4(L_70 zE{j=trgi=QA<6kgw{sQSwr$(im2KO$FKyd4##*bV3(Ge!C)L&esjAKk_(lI{)~K@? zobwNty{L1R|BlsRZMNd1W@A*es`ajewvi+`?$nO75bgkci0&Xqk|Zf|{nY|dFut(& z*%=Zf$u@24UF+GlZQHhO+qT~nzHQsa6rODxXP;)^wvnP_=3wa<-T*hYZPiWRC}uM= zGcz+YGuvX7@&9}GNxudUGewlTgP(ewYvvj|aK!8wa%9`8RZV~ESKJA~9cIqRUEoNP zq)7VzvzD2UCDNH8BKq&ZZ6rlXmU;IYbYDQd=E5*@VX8DujG$&NtX$X*5_Bxbj0nEv zW5`l3yjtGntD+&?^w_g6I^jEG4Dd@MVlCt(eB^1AbyLposx~FJO{tD#owfU4T${hY z-%GkQ6qg{Pvtpr2Aq=m4A*Y~@ zN}0P289?lxjcBiQk9M1F!$VYTRxdnLEY*g@Bs)sggOzsP0*t({Fi55T4V4Lxf+!6Y zj$@2zD)l zTG=Y)Gz^L~UDS?%s>3T5Zoo6V+QNV?k#5-{!A2R(XqC2?dKZ!m31@+qsGDJ{K9)j3 z)Fx?^3(vwN$pDi{_C&8YNgIMnj$9~XTc@IqzItAsTqYEuG&Y!HCFL15EL^TqOtZiW zypz1tt5s;IQn-aO^~`arUe)FL!5@uBY}Oe3ULCu!P?ifa?-1M=s2?@;a0NiU|USlH*ptKa%xQrw^7lnptkla z;mEA@)zL;}pplWNToYObI$S}-&>-A}k}{outbz%M%C}!y?*9TwG$k0*@VDypCiQU* zoAt1rS$cOsDE{wl{{czULb5bIUtWd(4_GF>EN2(rp?tj29)0d0S{?7Yv@;_x zj{cIL7fcR@w;zG}P^EC*40a5?9{~2bgfVIWR+I9$ViNf~9Nm1R3lJ|kl*EC``^t>1 zh*srVCU(4TQ28R){`>?R9`EwQS>|TgDq-`^L*(y>MZwj{IQj*SOq$h&Fa($;A`S(l zGW3#EvBY`GSiiJ~YZg)Q%L_`zdtbj@7S|_Y-p%Ww;m!meNHs{CsYZF7B3m1^RkDG+m zj0SyR^IS(sjH924wHMgg#SdX2ymyC7=Hbgvh5Zk-JAm*Ggip*6OEUh&uejZcLY(X7 z3=h?o?7!1XZ`t?zn6C+J(#!IW?+wBR6++RxRAF1<+YLpvo5KT?6Z4tcdIz$})W;?B zLMQ*ONP9e?ZcVSNpMc7v7{*XQ;y@At0&AuPI31IpmrlliZJu4&fsBt&hJ)d*4N5@cDQz*hq3O_}`yKcjbaq6p=E?hp)D*!Wu`v&Yb2+MU^ca%h2~* zBS0eVTu1=Ax77O%`6T9lQ(rG!2c2cpbl0bYRHe6w`(B@sP95< zb`f$2F{TvRh9W>?EhJqHxXU9AXzxo!W)Yq*6pX^_$$RWZjlC2yS`rap&W%j%?a5DW zd-PRIZnMR|5KSR|_0C~A9@^KRt}vESDrV^Hm0N~s|Ntl5wp50%=0*<|<}Ovk0Xzuy*1 z6)F~T3SxnW$vRXjlrG$##mjg%tWinrf&UhuVHV7V#MCGO8h}yZIETl^lYcy8=UpD( z*#6#?@rSgWs;!LLb6-!?^4%G4bN)R3yTK2D<*$Hd)47l+KtlzX6T_PunO>1b&6rc1Q@aTVb26-33&6vZ`QSKH0Gi{5hm}M00000 literal 0 HcmV?d00001 diff --git a/core/src/main/res/mipmap-hdpi/ic_launcher_notes.webp b/core/src/main/res/mipmap-hdpi/ic_launcher_notes.webp new file mode 100644 index 0000000000000000000000000000000000000000..5df0b4bc6c2c73d08ff2ff200fa315cd99b94bf9 GIT binary patch literal 1390 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 literal 0 HcmV?d00001 diff --git a/core/src/main/res/mipmap-hdpi/ic_launcher_weather.webp b/core/src/main/res/mipmap-hdpi/ic_launcher_weather.webp new file mode 100644 index 0000000000000000000000000000000000000000..b80eb52b6e307e01788ce5d34fb657c451a0736d GIT binary patch literal 2114 zcmV-I2)*}GNk&FG2mkA0qlc0gc?{ zV5z`R0sPd@U>-0|KxvZO!fkEaO0;oeDxm+0TtgoVCxjjpMv@G5$v@DaI|Sf1wry2e z-`#)sKOVY-4E>kGP(lAE05P~P&Hta@P=X%7F8}~LyuupJ_^fe1;|zLwq~1&PP5io8 zsz?DKRmT)HoaVU-pa)X_xJZ4wdCKb@&!zaq17HmWZQDo=f7shS5F%m%d~DKIvfW$c zz5T7un1;3)1dM=zP%{MU9ZG5~bpTp9l=0+y==ZVyhm{Xauz!82SX6OU z+qSCAb8&}u#JRK~26rC4B z|38kqOGWKmH}z1uSMDBn`(7mZB*O(f3)gW28aa?{o3^z!?!8CZvu)e9^=;eEeq`Io zY}>YN`#JVF8MT@S!$1N5 zJ@@B$Y>JTgUIbF`rQfey8)d2}ibO;aL+Vf_lInP0PL~S_W-wjl*M*@F0>(_wj4(Aj zx(NPYMgY@unh-Dg?>M0)z!V~+V|DeZUc_pGAE??%KuFBV=Vw#TW$E=HiU)=y7F67K z+?>z{CPCm1qY@XP6)6#bg~>?>7==Vx)aIqm!yu?R4Ec(AmSvI2y@(_XsBsj+AY`Y# z_iz_uY|b;|H)wv~`FU6{3SmMQU1d67lwD{AYk!mGV8dYYB`~9WtmR!@7^M*Fx+Dcm z`H{ujCFuxDnW)*6yDzAfhrB+4jsc)u4olSRSa=uu0b-W+QQ4dSBRIrVkb+WwF{26u zOe&Pkl?&m*x68b~vnokSHjUjJRWP@-z14$i)x=@lQav-6Z@i1O0~4T{rBr4%jMyAa z$W9*gdJGV56k*^*>_ceBQvd%nKThu--H&_Bg;3Z!@NwuY7$}}={rbWX9V}z%9|)7m z-qsJ((e1tS>69mkQz-PrcU4#g05GFpzm%`iel~)*v1gMY{*+En?Y6r8g#Z+2ADh9_ zM~xMR{saNEu8(XnKQP%Mg%yPm$*A95suxFCj6*y8JME8<5Lz$+ej4J#`EM0qP& z%AJl`wf?jzLm-u;6^{7f01^xQZ~c9H>-@_H*LP9`jzMAJ!!QXIr8&<#PbSwdNo9pi zfCY`c$j&fCA=t*xO1-`WmEIV{zHMUd2~WEE+|%YWmRtPDF8u?3rP*D>*xrw5!qgbNHYfU#rzfl>@Pym zfW|k@PE7OHcL4BxnxA*(xCwy3*7d(jAEAd4+U=*%;n~=iQ?;JEhbX;%_u|f*&i|i7 zRv?IKe!;mg0H}SMr~a|b1mdO?2&h6rVy{+V?c=9&^LE9TZ-MMA;(S4TYPQ~FS zsW(IeCB5dqXZl}s>VFg9$0B)%(z^D)b!MGRqQSs8QV4@`W83|WE%$Kj=zUpx4`?62 zaf~0WtOvxkw`-D&BfEJ0+6_VIxqIUExw*T!rRstgvPnTqh7u&fCaqm`4#K7ec5Ln- z_VnV!<}PVrAtS#r3?Njq3$DE&!CiC?(B1=gX?Y-7sey$atyqVmrpCS9EQ0`mrLbsH6CkDVl0vl11TZN-<0>2+ z;o&hvj(9c+Gq$jSruz$rF9n1l=d7xDJsAdYlM=z91D=`2}0UCRxaKt*xA57l<;?B2XA{UegE)f#Y zKq&uHda%O@6scl{&@cy30H?~8|4sdUkzg7e86TBGzWu7&oqYGVO@nNcD271)QFu)WeQ%SWxpnLF(IFnvW;Fpf&W__jzra3Ri92p0q`gOFaQ7m literal 0 HcmV?d00001 diff --git a/core/src/main/res/mipmap-hdpi/ic_launcher_weather_round.webp b/core/src/main/res/mipmap-hdpi/ic_launcher_weather_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..965fb4f44b990d6346efb20cdf4ca2b5f0c7dae5 GIT binary patch literal 4198 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 Ye=Eq<{`iOU@{PlANN8KWz&MBu2}1guCjbBd literal 0 HcmV?d00001 diff --git a/core/src/main/res/mipmap-mdpi/ic_launcher_calculator_round.webp b/core/src/main/res/mipmap-mdpi/ic_launcher_calculator_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..ed4e1a08f63e48e534c9f841dd1a44e6f1321b03 GIT binary patch literal 1660 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 E0Nl9ki2wiq literal 0 HcmV?d00001 diff --git a/core/src/main/res/mipmap-mdpi/ic_launcher_weather.webp b/core/src/main/res/mipmap-mdpi/ic_launcher_weather.webp new file mode 100644 index 0000000000000000000000000000000000000000..33839218daef80a1bcc2b2eb1066a808e784d90a GIT binary patch literal 1618 zcmV-Y2Cey0Nk&FW1^@t8MM6+kP&iCJ1^@srFTe{B3AAn721L7A|3BOw5z+rRaBEYs zx6iuJf>9*dPWtC?LJR&?pn!8m0XopOZ5yWT|7R8%bpq4awxirEa*vAK6AGYzjidw= zRWMBdgTf6U2m~G<4&WyraiovdSEKR$uVlwo*vlAj&MwV;ue|^k0CcR-(6Mb>k>uPT z8Ijn`%pQn+jiTmL(@~czmc`_;#Z1MCLH`-?-_MR*tNklzX7I$U@Wd=FIkc@EdvsrX ze{4Ic>}qV=MyJkJoNhXHwrx*m+eYl~{lDjZ=+?HiY^&yZK4Xx%6#yZThGaD0A)yuE zZjDfZySqDN8o9&0pFGcjTidp3WuEg5cZZBN9dhl+qCcp_-Qk`I00fVbM~-G^<7iRZ zk@D>LNk!(=D+Tyt=^suB^_35xvHkV;d@ZOqZjn_|K%)KY_dLJ!S^3tO(cQybSi#5m6&sfgo9)9<3DUZ+3zAVh-3C8%nm7(2QMmT@K z(FIaTKsYBH2KMjW^WNhfK+QlDHfD)SPk#M4yTzORW@G^C3OHF34I~8M=*_!7CjgHd z3&kZC7w|RKV0sf40Fzk7_%ANe4HxSOBbW?pCZSOn0TW?>ai9~oAO;|uD3bG~iQqhq z3jC!&^4fVT2qa_t(aM=BcL(DC(~M)m9}E;!W1=BA!EvL+z8!1k5r5b7Ti3I;V+^uN zJv0gd$yji(s3d6UF9BnLF&Ym+I<9>#6u_ZS&nR}+9>M49wh|i(zrhCKpcw!WJTgJR zC}A|)D-RldPVenZc{?P-Sa#MOkavXFw(nGtY-X`(Opi6ZzGI(ridBRb?X>tft^}b0 zP6HJNkHfp$l5Gzp1W|lpJ^muu$Y9f?jwmi9{}Ciu6dDhW7Kv)|jqYvM%`S`+7LJC6 zV+6sWkxi?xh?4m@{vC!NNPY#eY@Sair%3C0_h_(OQ4bJ2K%7vxbT+ISO{afa++TdT zW?E|I1xQF*6Z+4>(&eI6Oea4qUJS#pP&W(|S`6xd-mNm$FR5w~1>M89VeU{@-V*4Y zN;Fyq0-rE}O?BIa@lfyI@0#D=BM4pr@DQ8myK-{1dj6QvRN9%@tw+Qkx_k`6RgW*h z_|OCmwR=3%8F*Jc@e2h(Rg{Bp<3l6S;35v6c#$S>XywpbR*t^}NDhX%69}m`RBRU} zLh&pBKSAMG8O5HWv^l9TV75NJ^q$4W1YNC~bU|nIRW9or6J43u z5gRZBr40pHmPxv|`K^_2Lv|0})6j zADXPWdUwS^2!OEUe}hFul2xYAC>A;!L0s3rxn==L_B(m#TGQ=-K?v=MsWYR2P6UO~ z%Q2xQ{g~O6D5%#N~|Lo*l;UN>ov zyEmSZejVN7vDFZPP=R@5o=8Oy6O<+>OOhlC-6VPfR6lThG0DlkMKDx0(F1ivb zGnVoP&=pXUK`=rC>!#fO?|Qz7TUQnM9Mtr!7}@D8Jc2b38$P*K(kBMGDYInj`Td>U z(P`XDz>i}ZnbU|k;9I=e_kIj|^y@L?(y>qhL@A#Kh)6~Ee}U@NV_oeU&;cY>K>vAj z@8kB4LuaextTAAS%uyV*8X$pzKK=hQ>vdNFqdx;m<3X(Y2i%-z*&iRo^!^kUBz*yG Q3LD#-m>;EW!@cCO65W&lx&QzG literal 0 HcmV?d00001 diff --git a/core/src/main/res/mipmap-mdpi/ic_launcher_weather_round.webp b/core/src/main/res/mipmap-mdpi/ic_launcher_weather_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..d8a115c81b500f3c29b78679573599b7022c17c1 GIT binary patch literal 2754 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 i$ZoK`5qKf=KqNEAr~biUL~6!o0ArAy literal 0 HcmV?d00001 diff --git a/core/src/main/res/mipmap-xhdpi/ic_launcher_calculator_round.webp b/core/src/main/res/mipmap-xhdpi/ic_launcher_calculator_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..47c0ff6b704c85ba6778f84c12f943ee05db30aa GIT binary patch literal 3406 zcmV-U4YBf4Nk&FS4FCXFMM6+kP&iCF4FCWyU%(d-6^DYhZ6t?3?Cl;15itSoLv3qC zbmXDSZ*XU$a%>*3J^%k9>(Tcnwr$(Coh#=mSGJA2lx^F#&BwMmjZ?{ga4IuB-E)3D zmFsV;^Q+``Vmq05D#kBb&snP%!K`Bbs@FDq%~@}+?T$6I*7UPxJnK_&QViR+jU1w! zdmOfHBT4MP-+O1rl11CLDMzDhGfpA4ZL4kDwr$(CZGXkKZ5v(nvK=^*)Hpq0mR-0^ z@E7FD|8LsPd)u~c+qP}ne2jC}TK{#|eSurvV3nEl*Ihc>ot@Tp(()nFt=R4}c>z^- zvfIq<|V6>{eOC| zUubtbtUq=vjEL#bWo%?7$hJ#v_vHF5w>-J(JYX5X)w$8E1D|l$fkLDS!XZ(N2*% z8>0A#{V}H@N>pCwHjhTMNgYG7-Cl2$5?1t1#su2~kT6Ch+fsYLnNT{agZ@sLr#)N= zDuFbHzZK^@w=AlQEQ?i{AGr|V?ise%MJTmo9*R<(6b-SeZc1Uq7|UQT22Wf`{O?pp z{hd`@$qOOOP_oe$=bL)g=MZJjk7=M~;5;craozVu^(88mPAHVlBL`D~mmb^2EpoZJ zN@t}|BG6W)aPY%Z@Jmt=RSSjL7jUsVik@iBh@GgXN}yUnIjTiRS%*+gCqr$c9R5%7 z4kZ@+&ciAd^0;Gg_W+Mj28C3$1jk!3R1XS4rj0o$=YA4Y4MOH@&rrEQ6%tC%N>|;I z7-KAuxik!rM0-l|2rfb(ni^T0{v!~_`iFcA{&UnPirOoH91hbAJ?>OaqvWtRD8kxS zqh6FipQEg~h3|k@EUe?s381jCGy>CiW{xoEF}ShenJkwRqVxPHW7SL(M>kk*P&Q zr0FYyq@8W7AcPv_*~>A*iK$E(X5~E6nvwd;r@BThQ24$Gky9%CCdfM2)(UKBoST!E z03{suujlYmidD}Hsv+rg4+1?6oK_|kp!Q}2TA3GB<3zsZI4=~x3EL^jBu+^$H&5|# zWus&8cyt<^T#C6)Vd#Fn0dj@8>@5l7E%8s~Lj}?f7`kyQ)XF$=wYg*3e)V>sRjoAg z*cuc?lR!DID-9y{?X8CYmndb}m*@#2wEm@txK|6C+<5LDABp61|l(&Y=l@)j~Ggi76wcZ9B7~oV6XuOYU=) znXnJxSLrJqg^SE$5=8XjN`>X@kZCJM9Y8Io+ujw2z0%_Q&`H2%9=V!5258~1uO&dQ zWIxEms5|23&_95UDKAc+a4T0f4NBrPukt%W>{Rp3*%PDiRArFD3#w)SOdZ?D%xHva zrbaMg@FHm)1$zbNg4hVv6|5Ai?s0K770mDNC{}N1H?Sv4ZpnQhZ zz1pE14b_hFu9`m4MjrHzYqJ%^6)QV%(y2fkr=VA~w}0B(->_YczkURk8#G7qn?z|= zLkyb$zs&k66#{0An&!TbnDcFi?{S;|A*}D)Lf*X z`44(rwfP^7(&+d#Q964Ml)ITnE`6Q>yqm&^mg6WJ}Y$=<0pe68m`8!arJz-K7-##yN#kzU^*tmJBgBomU>3!P% zjVOsb-Rq;kz6zvkU;@rp{Di*-$jU2C8>xbW0w{MmN}xneq5|E=>D7P4_4+8??Ap;+ zPKK_o9Kh&nk3pX%g#n22={nP(w+a$UK~Sk0A}Gh~N9o&V;Wz66&rALZxT0PAghi0biN{e&gCACV{ExpliE@QG z?Eax&bWlx$!vI8mJbX)63p2=3HSt7C$o(3Q!Plv_9v&fY?H?wp;&cKJFkZ|~R}n07 zw70+Qe#aE_AuN4elxG)AA z|J@UO2ekxH8$}FgmRqmio~cPTM1KopLB<`1%>CwS9|6ri*~1`CZ?FMnD|qBhrBDcI z(O6m>Z-+whRP(@lpv{!XFFJFn? zq-V}vs8XuKZLbF+7%&b%Z3`J-UNdgXw4`!{hb`Uy2|Qf3uwbRuglGIlfa+id(z{te z1-LB6&nIx92v-kWgWo=P{s8WPYWAHh4JOXEiULprPIK|1Sb>LhNN$K1Da>fE0q5-w zJ1a|rjAoG;M@^wq`St%?sq|tIE@^M3n_K_K=iE_%s##?Ic~A=*K~e`Qz-}lOt!$NL z3tlH-?^VlN)gUYd>|Xg5Uz9=Ag`i2y0h^}rpJUz?DpV~bgwhi;+<3w*P?&i>G)3U4 zPplK6FSCdUz-a~(z~b(aXT$QVxI}>^gd&Ixk?o8G|Hjg%Wcb;1ch;3VM;s(16JR!l zqJA`hZQXcJIhR&X^Ap$)l7^en_nrI!FH=}8&6CcR9XGn2r5=HGRWV;8N-0+Xd`!w~IfHyCn|cqjL}*Evq5A{paQJ!ZimQ8 z?fmj8xac{ICoG`|YdiG`)^)eD3@gET#X^z7Rg>6-wu!#`M@^u5!|jS@WR2{d>qpT% z>K`3d9iGG6+S&AWm8vOHC|~dtIOhqe^vQTUZW!Kn$;<@j+6O*tewP8&z9$l+TZ0W zYjw)kUJZHFl6SRl`iLCX@QUSE)?)fQd!9|I)5Ec5lLN1M$&ZeI;#UB602blX0Stiq zhSTl>w1D+X?ye5!>TvsPV+6KIL>F#C4~#whc5IA*&wk@2cLVlsc=uhWHHhpF`zznK zu7;Vt|IT$FY7*s@O=5mLpvn3XVEu+uPd)VwKgx2Cf8v$rer@OdvrRuM2twz7dgo8> k(=gIo&h_e+$UdLk`P1jC#)2f|m?l7pWP25fn5IK6hJLJ>kN^Mx literal 0 HcmV?d00001 diff --git a/core/src/main/res/mipmap-xhdpi/ic_launcher_notes.webp b/core/src/main/res/mipmap-xhdpi/ic_launcher_notes.webp new file mode 100644 index 0000000000000000000000000000000000000000..bfc7357ab6fd02e4679f4d11a47a724572797c43 GIT binary patch literal 1908 zcmV-)2aEVpNk&F&2LJ$9MM6+kP&iCr2LJ#sU%(d-O_*uhMyd9-{0UDjhKT-80JA(u zX?dOkz6G+l_<5mJOV=W?F4#1Zi0HpnZ-U!I zk|ZfvdHuI9IQbQip*Z?K0d(H_2UZ9~e|gbX|0Du2MvM^&LP3H^Jz*RP0OW_rG&zC* z2r_X@BG+7BDgaLeneF8NlYW$8}Z96%(mghZKd*++(_X{hzwQZ}~GWWUf|MA$p3yq10 zD8kG5i-5lb=)lRHjLbcA|L&1cZQJrT*YhRmn0XTFVDr)GArCVV6IIbO17w z+qP+2eeHeD`?eJsC14F+_$%Tc|J8-0Kq!z3KqmeH1o(f| zpX_`(0Oev4y%wsm<2+=rQcJ!q-Dx%Fy|a51&^SjnV@!Uy#V*!~#6- z{jd`5t=M_4g4T1q_m}PXq4gllll&K{$cPLmTd}0K80h@y)32Ub1|M!ZeJgtcYH#1J zBAGXu8jC8ADhmZ^hyP~1^8LCA)?Iw`cCLRabf4ce#LA#lK~g1yJj`0BB(M6k-n(nV z68H(J4jczK=7{Oam{p20LWxYE+ZQ8g&F6l8{noky9@HnWc@hsTFNg0IEy&1o1rnj6A2Gn)r+Q8aE3jF^Kf_#B%0ocl6SjS zCfsqiagjPSgN1kz9E{Y@RVaVpt#Anr&Cm#m0wBh=B+7)-cZ9Lk>k4&929VxL03TC*-KH2~VA>`K^03{YBE)1_HmI43(2qn}AzMcgz z1pj!{i4YN-9|aUxl(-Bc?B1XI;^|9123N0~z+*XC!8QRU55<#O7!iHajW19m-8}mZgs6Oa} z4tCJ}Q`1{W=7JF1MY}-7I}&z4mxW~OngIb)&A6{z;XmxS`U=97r^O;jOa!*RCbsZ} zFY?a!DTRnhpP&grWwtLx1r2|I2?ZL-Wz7-)qi*(vAJxkh6%c3~j0FD|AlOcsoE_@t z=E!hz^I64wXh;ObUMfQqId|4c2}exRLWw3K6e7HC96h;28R|n{Qz%pvp#=LnN5mFR zXb$~P?d4y@4@FhN5|Y(D2}EV4BI<&aXqLn%3@O*;WT_5tfUT^SCoF>YEhvc~B!qMo z6IH>&a4_1as{+57wxHSa8dg>-WDnffOoiH*dU#^R8q9|j%Cl_=cR8!;Gy!Uv3WtaH zF(38dczuR=IeT)Nas)+Cs0a_0F0U)t1vjp0QBlk0=Ic-aN+PDC0VdFFq`RnHFa<&- zG(BvnX(Os;P;f95{5yy_K}Dsy8dS1HcoIXw);!N(8WX>cX)=fn*(lnc~_J zpEQ4>i-t_&pyuSUn5j|#VIBFbk4|kg`vJpDPm}QGiL)aK1IWWl2m<(P8mbfpa*@Ak zo6%?m0R?h5X>lcB$*Xd0V=9THklxkPFV4JGIkb*&(5%8};bZKgVF* zexjo{3|lq5dMl3NY}C3=2DQxPG`_q2YY2?l|Jaz_{XSFgXQ^8kr2@%OqO6g&q_Kk6 z-^q4l#s#ZCqwcu+sPTLq`rWfjLt)rA55}k8p6AN)7oM+t({HUBwW1i26j6*Aj?r#i z%@1pq+C8p9&xL+Xj*|q`3&F uU|{inL#Nk%*CLoAF_dDI?zq@&`sy$IhZYI|-UCPw=>-ZD=%IlBlMDdGX_Jxw literal 0 HcmV?d00001 diff --git a/core/src/main/res/mipmap-xhdpi/ic_launcher_notes_round.webp b/core/src/main/res/mipmap-xhdpi/ic_launcher_notes_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..7aea64d3b4e04ef23f6185350df143e240b46806 GIT binary patch literal 4696 zcmV-e5~uA_Nk&Fc5&!^KMM6+kP&iCO5&!@%U%(d-)rNw$ZI~qdS?^$ohzS5xY*j&r zvijns#U4EP`GV|9YwJx?wzhw9+bC(f&9-n4Jze6y*AQlAW+qdaA{% z+R^X->93xy&2~5$ryy8Naa1y#6G&|ZQH7y3jPmRDu5YXR7P5fgf`;PK{HqZIi?cs-Df&- z+eVT^_o-*eJD^$HcE;)cH)S)<$DrEAsQup20^ZuT(_c)Fzo`ZeB1ux@@Y&#>9){;P z@U9|BvXrxq4gTI6(^Y+U-~a)5f@IsaY3Kjgw#|-Yr0AqCMgxqZ(FB+6lx*8N=iJ4} zZ5v1CX(g>z`2nAy zF(@+EJR3GlSN<|?6;jp8vTfT*Y?15hfzMPqnE(UvM()L|SkQ%%W!u`?Hm8&9c$#VS zInw`qzsSFtEi25-%nW8{v~-->v(s5dJgofeMnHUZIXildtq0rrNF916*W=*Dhz<02%V zL-I2uzpY#Uef=}u?)}<#f92*K5jRt>bD4GOiF2idM6Kiw25>V#KLUt^B#A&#G0mhI zfQ_BiiF2jQx^gGB(1;{H;gVY!QYHd$8vrEWOh67Kp#sYBags>F@=V#TJN3 zMPy{;o!LfNlBDTPTe!pdkZw`bvcxP9Lx|ysL4|B1wcskteJ3#vW>f5mZ@3>WQU}i! z-=%_1h=XbS(w?a6BZ5N{Y2r>7s-o@Av`MnIv0*qc&pM*-43hva6fbmMh)U~!X&j|~ z43PRMG>?+U?f8M5NkjDO&HfwlaP~}8f*x&yi-$lry zVjq&pas(SI(M!&~3{E0$f{L)vb`1m3C{k2A2LpC?XGMi}n|ukLRnmyS<}BTOb&^Rx zgSw1^3f5bSPLZaHMev=;Y`i*QTet#HT`o4MQG2ad!6|Sm?p38`k@Xg$RidDr$RO%L zhB1wZSy#reNW3`0M7os&w}Km^ugYkI);WT0bTXhfUYpNkjGr@U|_R z*9zMffEo-D!YkHvj=^Rp13CqU%80-_n^{pVT9-Eg6nmudS0lsL9H;Z_G}wjN4QfFu zYrVjVj8qdjCuozChzowb1Ij#8Sdz0`;r>-tohX>m?f9u#bh3 z{Xz{3o#n9J2i*nz1y-tvbb-!fMws#t(Yknm3U>M^GFQ%?JlX?x#jF89fC*lql{zBn z1|nmde8}k(SP8R`#`wHRS?=G4Xt5d~XFJ5@4=dJ4TvHH@30TGl=9!GWpYZ< zh8X&F4!fXn$s^1ex2G;*jwH-f zQs;1}Av5mdJgPEg-#Q%&Py))pwCW8|)gs(`Tw0D-D#xDzHnF0#V1HC|%0{?<%*d+T z&|Q-J)P*eIM5R(M0)n&3F+Sig(5%W+*f0#j-eH9z0B>_{RdLD^{$HCLx>Hu=Mhz#R z+`Dz?vLc|u+T z1*RvViWi!cVv-_FQWCWS*dztZS|=JSYG+035I(x*AQpLCZ1;~Vks1+jFm0@1IMU_= z=*c2FYSb3Jw!)w-08!Jj*5QQ-1sJsotqKUpYG(mPNr|N;z*NaF%cvE-R$6l3`K+`Q} z_D}IjRIBZKy-{>VMHXOS$=c&8FALCMG(ueIKE3vQkO5FU7M5=pE9#8>nPpHS*&rC; zTO%9FjYbfQ{O=DI$F&&nn|4`sosmMFRrFfqb%4*(;%&fH?RCIE1}jKKT=eZ~qXExg zbKI(wH!k zfJ4w*xSP>s0ctNo?UW;Bxd0FVsB`(Jnwd+g16*+?Ij-@7%8O8Y0pJcae?Q~O9AHyB zLF0``cFOLeegWXFvAis{)f+}dkSZ-xH;URz;{P%aY_3T24hya(3^tXQgr<>%(uJ%| zyPGP?i3NadN7fjwZUj{$sJ)SQ*qli?cL$cEX$;aj;Ew=dFfP3*_gM_-f|NL z>o*k(;M$nA#-<#E;BwT zYGV>WpaJYpyqwigHuiH?srLZQK5q!~&#Nxb{L?B+$gulKbua{~;8=qT8s>g&~1Xvw1`FEtkoH!IA%?r5{FyV=(rQ&*05vr?WxO0k0MBEeS53sAA1ymATGZ?qtQ=QXhT&E?n~Q4voBejz=FcZKXO=C}o?d{I zV`94u=3*>V3WghvX50>3-HFpexzMslh@o(LbaQpi`DKzzH=z@Yu16?4vv|8IVMvwLe!bZsLxp(EZt+_s^b{Fq-SN-orF306l-PrskI zN)M2N#i_;OiLz&Udj5}>65D!~L(?`?Ubva_IGyf+e9CU@wAGJ82cOLw$GpF~ zD8c~hxM|N1$apu|9v5+p;>w#rdGVzm96)z-@9h1jzt2s!?i%MXU4fDys?z;W=mvO1IU^oPh( z$bvk(3aHkGQLHzQ4ocXGAIhf(kP4{1$=0&G75r=N3gl8&6GN$ttI~4W&I8o(4dv6r z6Si{qpZ5HKjAs1S`$Dg`FanQnH_lvP_!P>)=1giM}GH+ z0V-{c6e7+6OGPIS(5Uob4tATLzQ|)O;~MnzYTA-$z{)r6*FiCT*F#B^-5)v_ITjS3f*IJDf`E zeHJeV)`>4~&v04}P`!URXthvhH!hWiuR94X0$LZlk$T2SI@g}QP+Ie<>{h>U(55J_ zBi}ww0wENj0i3-D({w;(K%M!&?+-t7>(lin5@r(S2xt*|Dyb(N{4JnmRK}$HW4Are z`E`HnFHO&OQ^Jt|D!|r#IEr=%rWI{NH8bV)|E+EF)6-*q__+!6vy7=kO#M%>XVLYG zfR@aFjENoKs2_he%`eWUy#Bw{)*+Zy^gOb$ojGX*aKH5a_w-}iP|d&c;oaUY^7!gV z9KWxD_%M@piMUJ6x656?R03uqCZK%J-J!Akb)X}0{N6#IUcda|{l0Ce<{v+;6)53S z)D5t;9TDykPRj$T0_u#M_PTsitnS?CE6?GqnDn~=>NE)t05<$%j+`OcZH7eqhrJ3-`OToo zE7AVk`7*t}eP8@^>=qO8P~titN$tU7jeBW?%s{-jjS`b^JhNdd0y1{ zL_UU!Y6f+iLF379&%IxY_UC?8EN`7_vWqM0 zM*hZq<-zt->Fus_{@ea@?$?1^^7pUG-DmeLb5m1(u+la1=b7xnH~He$m*V|7li!|u zyC|SmQ+emXB+XaBBFFJ`01M!H&^!Ff=pOVc0xAKj0crv2G=qB0pkYI|aMEVjwAXp^ z({u0HuXlYtSN+|>Y3l~z8lVoK*3CP7#)JELZc3ai3Qz%h9>Cdwp1<309P2&!O79td zmn#QUEN!}Z6HvXV=w?%?x7_V7%gN3I=)6_#GH_J`?Ae|8^0uE4Xg4O*eK?AindKps a-t2~Ii|?`$r92PN+jL$80sq#>gJ6QHr_ zu%n9#CISX|fGEB~g(SovhrLIdEZ9c2t>grF^h=-w`Y*#Jbaz6sFEub|+engk_xR)d z@1jG%w2>r7eg2WR=rlnb-2Cx}@bH5;z51`PZQDlKtNjCD1_r^5T|h+uD`w0%^&C=P z`eOU5R)Q_I?yGOAZT(wFhY^6Gn>6({J%j`iIA%*NQ?M&ed6J-8(=2Aea>wsbzk<}Z zqj_-HzpeER`zS#NMu}kjKtLk|kcNV`ZKRk#?E4QvL`*fBCA6Yj!wQalFGWSbA zIVt#i6yO6PSfHlEL&gMZ7=KTG;cmILZL8Wc_x%lbcX}XY{3+gsRzM37l4%1J;0_TH zq@?Z+pWh?L*0y7>uIGKfH@0o3OPdL>%tV|{BXA~R+g6XG%C^t73+X@=Lo8@-RIOh4 zi#$iI4eM|ezTDn7Sn#^~sJn54OJ9ImNg;{^8db9B|s8d(lSH3z_78@a+S-o*ee_&U}=Ow zr!mBQ!Sd};3EbtMz=b!FgYO?DOtK+#f~6Cj#QqqAV9%@bzfcI|yZ?-`N-ZHiw49kS z3#Dl!!^TpS5~rkcGZhB42_u1}6kMTO7>a}tn2HohWiC(=NQwgucCdgH388`iP&OoJ zC8FL^HW)Au83Z_B2tpA;(?Nevq(KBu(lt@zu$oujQT-jl^wFsY5Hz-ZCc-fLb$Ie2 z$QfcysszJ|0Ftg{yns=+ox#o^szIbiPgm^ zU;<$pE(qmYiJ82dR${cBHPkl%7-6U}mmiN7sZ?wQ8qM=$Ti#ANGm6W~wblB{WK*^c zlK@&p22(!iv3d4R*krWq{k5jIxT~uI3hPJOG-UwAXX%9I*BF#Cvwg!V*TzcTz4~7n zi;;fPW%ELD#~nhjesrgEZjl+gx);dCDYIb|0E(Z*V{LtnA&4Jqr3sx*^DjdP>CE@2 zBSHXSt+3KkoYhs?plDX>+ri$Ewg6D+Ebi0#6<968nl0I)j$u@QO!Zfk!0wDYp@A`U z0nM@mt+H(yVFRF3G;ji~~Rh5h{S% zE${Y>mf7~5aM!({b+^nVUC{cG#Vz-Ugpi>g*3aH}VT95b#S2L~mW|Xu`gmK;2c3dy za}fpU^?A21TH>(om1hhcP%dGmuDJ7PX=*o?svbX-jgth;lXE5!kr(AHt9c($4Tnz9 zbvOGVJ+@_epp{!V?#tyYo98MgQyfKc-mUA}70&yzNkO3Ihq5KR`HX48@-a4hrGPkO&9tY-iM;__nYvSrzg za_zzr8CmRmH~XGJE_SJ0!={{#=OwIcTT;4jKCt5$1Nwy|oND7%nyjeLM!KVteVvuD z_jT3SBMO|))p4Kq$r#c(7CdGNCq{KTSF?i!R$K4_lBo&WMZgqikzQn$C~=>?coacT zSLcTh`>68c1!aR1%FYb5YKp>|Wc-BvTKu%aRfhUC8&9mT1pt8N)4XR-8b4qr=sK5z z;UED8L9RF=$+WYDBs_wWR$2JrV_9n)01&ifN}|3clp|69|fAZ5@Kpj*T zggNiZ4u|^M*HIWuPtKNL_D4sbwjlr@9X4dEv}h3}ZWvZxu2ZxrG3mj&+OZubH3xD7 zOd-f|a0K?^;sMjCG{1 zf*i|#U){U*GuQtD0C@h1C+!A35Kf==Yl`#BZCzzrfwp12MPaTx$JW9Zec$^T8Tm(uafn4i9Ju3NeI@ z{H|A+e6yxswV4h88MI;7bw6vTt9E8-sRVI6mlCO2M6&<@L^ODJkFEE=J_D!@+DTUI z0BAo-`w=3(41iFquz?VxA*-CQ4cz+gcFxNd_XF?}vwqiAj~Qeir?wmG9cXSBn2ikh z07fC!G-Dn4&8fR@PTu*9f9tkfE_a;lwc5r9N+4|U!c=uw82dFx2EUsGHLcdtqOZ5I zU*^hRK(r96(>fn5MEWHwE_m_i%BdgP$=>Z)b8)u`9;}y}V;^PGF9Hy*u!tb2^jm)O zEikm~T)O#T_GUNUcZu~*H=4I%VTnl?@(0kuVF2O$-C!XCfUZ>sjFrz#bw-75H@j+x*`Z zbc*Q~e*`FygJFK2SB4?R7^QBaji-cX2;^V3c|jSt!8ZWxV1@NinB@%>(zXW^#(7o- z8j@<}g*0{M4Mg!}S#WOMJjal!Zo)q6)Xl}~fc&dw}I{kvI@3zXNTltMMo zUAI$0!4!VQ?}{9d8A)*$EcuXB!(H9$lc0wpm8sSp%0x7VXj0WRr3@rX!|R%_AZ&hd zqjvGV<$X~}zCEIhwCGMmCHYsmI$(2MLkq%!M~5?3JUB8#=Q3oJr!i7=CBe1Sr%9>x z{>oXtdD2aC|Mop|#X{1?2Ny?%jJZZG|0%;jM+&6WWloFj=F{b}cui9`;qw2yJ#)n! zaXNPGgHzQ*ySl@-kis|Kw;~bZPhHxgAwe}g{_WxAeFSY16*S zV*i=q7$C~Iw!oqjft2}P^7hE9hu3r*3K!dwyu;W3iUk7u-m5r>f83WJpI@&}-tKRn zy*uB1%@P;=zoc)4KdyTJp}D(PZEmTdlGVh8(sM|KZy_vC}V7rIk@6Y$2K%zGwfXoS!FaoX_{09S= ssj7nzGtTa~krtdF=n@&4I{0BupZFXW&4L=XO%Isf_?ZCMUi+^U0MDg$k^lez literal 0 HcmV?d00001 diff --git a/core/src/main/res/mipmap-xhdpi/ic_launcher_weather_round.webp b/core/src/main/res/mipmap-xhdpi/ic_launcher_weather_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..46897cd236b41e856311e9387f1b77f3a17503a9 GIT binary patch literal 5602 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 MGWH%pd?%$i0PiH@fdBvi literal 0 HcmV?d00001 diff --git a/core/src/main/res/mipmap-xxhdpi/ic_launcher_calculator_round.webp b/core/src/main/res/mipmap-xxhdpi/ic_launcher_calculator_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..beced9702c189c759c50c2433af62c547bb00d08 GIT binary patch literal 5354 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 I3Y{wg0OjLQTmS$7 literal 0 HcmV?d00001 diff --git a/core/src/main/res/mipmap-xxhdpi/ic_launcher_notes.webp b/core/src/main/res/mipmap-xxhdpi/ic_launcher_notes.webp new file mode 100644 index 0000000000000000000000000000000000000000..5581723a39667870b6fb4a1313d048492796192d GIT binary patch literal 2506 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 literal 0 HcmV?d00001 diff --git a/core/src/main/res/mipmap-xxhdpi/ic_launcher_weather.webp b/core/src/main/res/mipmap-xxhdpi/ic_launcher_weather.webp new file mode 100644 index 0000000000000000000000000000000000000000..abbad770e90efeaa3ece3cb7514aa74110a3ebbd GIT binary patch literal 3848 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 literal 0 HcmV?d00001 diff --git a/core/src/main/res/mipmap-xxxhdpi/ic_launcher_calculator_round.webp b/core/src/main/res/mipmap-xxxhdpi/ic_launcher_calculator_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..f1e0c469317937c86152d8f473dbb9e2e4866042 GIT binary patch literal 7470 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 literal 0 HcmV?d00001 diff --git a/core/src/main/res/mipmap-xxxhdpi/ic_launcher_notes.webp b/core/src/main/res/mipmap-xxxhdpi/ic_launcher_notes.webp new file mode 100644 index 0000000000000000000000000000000000000000..5fcfc35ab3daac13cbd55b823a7a56ac28726874 GIT binary patch literal 4098 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 Ai2wiq literal 0 HcmV?d00001 diff --git a/core/src/main/res/mipmap-xxxhdpi/ic_launcher_notes_round.webp b/core/src/main/res/mipmap-xxxhdpi/ic_launcher_notes_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..a0e89a21c09a275758723896691f10777f762a07 GIT binary patch literal 9678 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 literal 0 HcmV?d00001 diff --git a/core/src/main/res/navigation/nav_graph.xml b/core/src/main/res/navigation/nav_graph.xml index bf4b1d927..2f5208ef9 100644 --- a/core/src/main/res/navigation/nav_graph.xml +++ b/core/src/main/res/navigation/nav_graph.xml @@ -76,6 +76,9 @@ + + \ No newline at end of file diff --git a/core/src/main/res/values/colors.xml b/core/src/main/res/values/colors.xml index e08729bcb..6011aa18c 100644 --- a/core/src/main/res/values/colors.xml +++ b/core/src/main/res/values/colors.xml @@ -206,4 +206,9 @@ #E0E5EA #2AD489 + #000000 + #000000 + #0A0A0A + #80FFFFFF + diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml index afa6acbb1..94672771c 100644 --- a/core/src/main/res/values/strings.xml +++ b/core/src/main/res/values/strings.xml @@ -42,6 +42,7 @@ Privacy policy VERSION Color theme + App icon Enable logging Multi-hop connection Multi-hop same provider restriction @@ -88,6 +89,7 @@ To use split tunneling, please disconnect first To change protocol, please disconnect first To change port please disconnect first + To change MTU please disconnect first To change Multi-hop settings please disconnect first Multi-hop is not available for WireGuard right now Connection to server blocked, reconnecting on a different port. Please wait until connection is established. @@ -111,6 +113,7 @@ Light Dark + AMOLED Black System default By battery @@ -456,6 +459,7 @@ Color Theme Light Dark + AMOLED Black System default Set by Battery Saver. Dark mode is used when the system\'s Battery Saver feature is enabled. Otherwise - Light mode. @@ -535,6 +539,13 @@ Disabled Quantum Resistance: Indicates whether your current WireGuard VPN connection is using additional protection measures against potential future quantum computer attacks.\n\nWhen Enabled, a Pre-shared key has been securely exchanged between your device and the server using post-quantum Key Encapsulation Mechanism (KEM) algorithms. If Disabled, the current VPN connection, while secure under today\'s standards, does not include this extra layer of quantum resistance. + MTU + Configure MTU + Valid range [576 - 65535]. Please note that changing this value may affect the proper functioning of the VPN tunnel. + 576 - 65535 + Leave blank to use default value + Expected value: [576 - 65535] + We recommend the WireGuard protocol for its speed, security and connection reliability. For more information visit our protocol comparison web page. Connect @@ -660,4 +671,17 @@ V2Ray (VMESS/QUIC) V2Ray (VMESS/TCP) VPN obfuscation is a technique that masks VPN traffic to make it appear like standard internet traffic, helping to evade detection and bypass internet restrictions or censorship. + + + Default + Weather + Notes + Calculator + Customize how the IVPN app appears on your device. Discreet icons can help disguise the presence of a VPN app on your phone. + Discreet app icon + Using a discreet icon changes the app name on the home screen to match the icon. + Change app icon? + This will cause the IVPN app to close. To restart IVPN, just tap your new app icon. + Change + Cancel diff --git a/core/src/main/res/values/styles.xml b/core/src/main/res/values/styles.xml index 4dcde9b1b..d60ff5971 100644 --- a/core/src/main/res/values/styles.xml +++ b/core/src/main/res/values/styles.xml @@ -291,4 +291,51 @@ true 14sp + + + + + + + + + + + + + + diff --git a/store/src/main/java/net/ivpn/client/billing/BillingActivity.java b/store/src/main/java/net/ivpn/client/billing/BillingActivity.java index 3d79df4e1..c12a78e90 100644 --- a/store/src/main/java/net/ivpn/client/billing/BillingActivity.java +++ b/store/src/main/java/net/ivpn/client/billing/BillingActivity.java @@ -32,6 +32,7 @@ import net.ivpn.client.R; import net.ivpn.client.StoreIVPNApplication; import net.ivpn.client.databinding.ActivityBillingBinding; +import net.ivpn.core.common.nightmode.OledModeController; import net.ivpn.core.v2.dialog.DialogBuilder; import org.slf4j.Logger; @@ -49,6 +50,7 @@ public class BillingActivity extends AppCompatActivity implements BillingNavigat @Override protected void onCreate(@Nullable Bundle savedInstanceState) { + OledModeController.INSTANCE.applyOledTheme(this); super.onCreate(savedInstanceState); LOGGER.info("onCreate"); StoreIVPNApplication.instance.billingComponent.inject(this); From 70f9ed88a44a7bfe1b8f94d90fb61339713154ea Mon Sep 17 00:00:00 2001 From: Tamim Hossain <132823494+codewithtamim@users.noreply.github.com> Date: Thu, 11 Dec 2025 14:00:21 +0600 Subject: [PATCH 2/9] feature: wireguard mtu config --- .../wireguard/android/config/Interface.java | 2 +- .../ivpn/core/common/nightmode/NightMode.kt | 9 +- .../common/nightmode/OledModeController.kt | 172 ++++++++++++++++++ .../prefs/EncryptedSettingsPreference.kt | 10 + .../net/ivpn/core/common/prefs/Settings.kt | 6 + .../ConnectionShortcutsActivity.java | 2 + .../main/java/net/ivpn/core/ui/theme/Color.kt | 25 ++- .../main/java/net/ivpn/core/ui/theme/Theme.kt | 30 ++- .../java/net/ivpn/core/v2/MainActivity.kt | 8 + .../ivpn/core/v2/account/LogOutFragment.kt | 9 + .../ivpn/core/v2/connect/ConnectFragment.kt | 3 + .../createSession/CreateSessionFragment.java | 9 + .../net/ivpn/core/v2/dialog/DialogBuilder.kt | 106 ++++++++++- .../net/ivpn/core/v2/dialog/DialogBuilderK.kt | 17 +- .../ivpn/core/v2/protocol/ProtocolFragment.kt | 20 ++ .../v2/serverlist/ServerListTabFragment.kt | 3 + .../all/AllServersRecyclerViewAdapter.kt | 3 + .../v2/serverlist/all/ServerListFragment.kt | 3 + .../FavouriteServerListRecyclerViewAdapter.kt | 3 + .../favourite/FavouriteServersListFragment.kt | 3 + .../ivpn/core/v2/settings/SettingsFragment.kt | 5 +- .../splittunneling/SplitTunnelingFragment.kt | 7 + .../SplitTunnelingRecyclerViewAdapter.kt | 3 + .../v2/timepicker/TimePickerActivity.java | 2 + .../core/v2/viewmodel/ProtocolViewModel.java | 51 ++++++ .../core/vpn/local/PermissionActivity.java | 2 + .../ivpn/core/vpn/wireguard/ConfigManager.kt | 7 + core/src/main/res/layout/dialog_mtu.xml | 96 ++++++++++ .../main/res/layout/dialogue_night_mode.xml | 13 ++ .../protocol_wireguard_section_settings.xml | 71 ++++++++ core/src/main/res/values/colors.xml | 5 + core/src/main/res/values/strings.xml | 10 + core/src/main/res/values/styles.xml | 47 +++++ .../ivpn/client/billing/BillingActivity.java | 2 + 34 files changed, 736 insertions(+), 28 deletions(-) create mode 100644 core/src/main/java/net/ivpn/core/common/nightmode/OledModeController.kt create mode 100644 core/src/main/res/layout/dialog_mtu.xml diff --git a/core/src/main/java/com/wireguard/android/config/Interface.java b/core/src/main/java/com/wireguard/android/config/Interface.java index c5be102e8..3460e205f 100644 --- a/core/src/main/java/com/wireguard/android/config/Interface.java +++ b/core/src/main/java/com/wireguard/android/config/Interface.java @@ -222,7 +222,7 @@ private void setListenPortString(@Nullable final String port) { setListenPort(0); } - private void setMtu(final int mtu) { + public void setMtu(final int mtu) { this.mtu = mtu; } diff --git a/core/src/main/java/net/ivpn/core/common/nightmode/NightMode.kt b/core/src/main/java/net/ivpn/core/common/nightmode/NightMode.kt index 06875bbc7..c5cca41a3 100644 --- a/core/src/main/java/net/ivpn/core/common/nightmode/NightMode.kt +++ b/core/src/main/java/net/ivpn/core/common/nightmode/NightMode.kt @@ -28,17 +28,20 @@ import net.ivpn.core.R enum class NightMode(val id: Int, val systemId: Int, val stringId: Int) { LIGHT(R.id.light_mode, AppCompatDelegate.MODE_NIGHT_NO, R.string.settings_color_theme_light), DARK(R.id.dark_mode, AppCompatDelegate.MODE_NIGHT_YES, R.string.settings_color_theme_dark), + AMOLED_BLACK(R.id.amoled_black_mode, AppCompatDelegate.MODE_NIGHT_YES, R.string.settings_color_theme_amoled_black), SYSTEM_DEFAULT(R.id.system_default_mode, AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM, R.string.settings_color_theme_system_default), BY_BATTERY_SAVER(R.id.set_by_battery_mode, AppCompatDelegate.MODE_NIGHT_AUTO_BATTERY, R.string.settings_color_theme_system_by_battery); + val isOledBlack: Boolean + get() = this == AMOLED_BLACK + companion object { - fun getById(id: Int) : NightMode { - for (mode in values()) { + fun getById(id: Int): NightMode { + for (mode in entries) { if (mode.id == id) { return mode } } - return LIGHT } } diff --git a/core/src/main/java/net/ivpn/core/common/nightmode/OledModeController.kt b/core/src/main/java/net/ivpn/core/common/nightmode/OledModeController.kt new file mode 100644 index 000000000..cc355797f --- /dev/null +++ b/core/src/main/java/net/ivpn/core/common/nightmode/OledModeController.kt @@ -0,0 +1,172 @@ +package net.ivpn.core.common.nightmode + +/* + IVPN Android app + https://github.com/ivpn/android-app + + Created by Tamim Hossain. + Copyright (c) 2025 IVPN Limited. + + This file is part of the IVPN Android app. + + The IVPN Android app 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 3 of the License, or (at your option) any later version. + + The IVPN Android app 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 the IVPN Android app. If not, see . +*/ + +import android.app.Activity +import android.content.res.ColorStateList +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.graphics.drawable.GradientDrawable +import android.graphics.drawable.LayerDrawable +import android.os.Build +import android.view.View +import android.view.ViewGroup +import android.view.Window +import androidx.appcompat.widget.Toolbar +import androidx.cardview.widget.CardView +import com.google.android.material.appbar.AppBarLayout +import com.google.android.material.floatingactionbutton.FloatingActionButton +import com.google.android.material.tabs.TabLayout +import net.ivpn.core.IVPNApplication +import net.ivpn.core.R + +object OledModeController { + + const val OLED_BLACK = Color.BLACK + const val OLED_CARD = 0xFF0A0A0A.toInt() + const val OLED_HANDLE = 0xFF666666.toInt() + + private val darkGrayColors = setOf( + 0xFF202020.toInt(), + 0xFF1C1C1C.toInt(), + 0xFF1C1C1E.toInt(), + 0xFF121212.toInt(), + 0xFF323232.toInt(), + 0xFF383838.toInt(), + 0xFF292929.toInt(), + 0xFF181818.toInt(), + 0xFF343332.toInt(), + 0xFF060606.toInt() + ) + + private val handleColor = 0xFF49494B.toInt() + + @JvmStatic + fun applyOledTheme(activity: Activity) { + if (isOledModeEnabled()) { + activity.setTheme(R.style.AppTheme_OLED) + } + } + + fun applyOledColors(window: Window, rootView: View?) { + if (!isOledModeEnabled()) return + + window.statusBarColor = OLED_BLACK + window.navigationBarColor = OLED_BLACK + window.decorView.setBackgroundColor(OLED_BLACK) + rootView?.let { applyOledToViewTree(it) } + } + + fun applyOledToViewTree(view: View) { + if (!isOledModeEnabled()) return + + val background = view.background?.mutate() + when (background) { + is ColorDrawable -> { + if (background.color in darkGrayColors) { + view.setBackgroundColor(OLED_BLACK) + } + } + is GradientDrawable -> { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + background.color?.defaultColor?.let { gradientColor -> + when (gradientColor) { + handleColor -> background.setColor(OLED_HANDLE) + in darkGrayColors -> background.setColor(OLED_BLACK) + } + } + } + } + is LayerDrawable -> { + for (i in 0 until background.numberOfLayers) { + val layer = background.getDrawable(i)?.mutate() + if (layer is GradientDrawable && Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + layer.color?.defaultColor?.let { layerColor -> + when (layerColor) { + handleColor -> layer.setColor(OLED_HANDLE) + in darkGrayColors -> layer.setColor(OLED_BLACK) + } + } + } + } + } + } + + if (view is CardView) { + val cardColor = view.cardBackgroundColor.defaultColor + if (cardColor in darkGrayColors) { + view.setCardBackgroundColor(OLED_CARD) + } + } + + if (view is FloatingActionButton) { + val fabColor = view.backgroundTintList?.defaultColor ?: 0 + if (fabColor in darkGrayColors) { + view.backgroundTintList = ColorStateList.valueOf(OLED_CARD) + } + } + + if (view is Toolbar) { + view.setBackgroundColor(OLED_BLACK) + } + + if (view is AppBarLayout) { + view.setBackgroundColor(OLED_BLACK) + } + + if (view is TabLayout) { + view.setBackgroundColor(OLED_BLACK) + } + + view.backgroundTintList?.let { tintList -> + val tintColor = tintList.defaultColor + if (tintColor in darkGrayColors) { + view.backgroundTintList = ColorStateList.valueOf(OLED_CARD) + } + } + + if (view is ViewGroup) { + for (i in 0 until view.childCount) { + applyOledToViewTree(view.getChildAt(i)) + } + } + } + + fun getBackgroundColor(): Int { + return if (isOledModeEnabled()) OLED_BLACK else 0 + } + + fun getCardColor(): Int { + return if (isOledModeEnabled()) OLED_CARD else 0 + } + + fun isOledModeEnabled(): Boolean { + return try { + val settings = IVPNApplication.appComponent.provideSettings() + settings?.nightMode?.isOledBlack == true + } catch (e: Exception) { + false + } + } +} + diff --git a/core/src/main/java/net/ivpn/core/common/prefs/EncryptedSettingsPreference.kt b/core/src/main/java/net/ivpn/core/common/prefs/EncryptedSettingsPreference.kt index 6ff545711..6c7c982d8 100644 --- a/core/src/main/java/net/ivpn/core/common/prefs/EncryptedSettingsPreference.kt +++ b/core/src/main/java/net/ivpn/core/common/prefs/EncryptedSettingsPreference.kt @@ -79,6 +79,7 @@ class EncryptedSettingsPreference @Inject constructor(val preference: Preference private const val LAST_USED_IP = "LAST_USED_IP" private const val ANTITRACKER_LIST = "ANTITRACKER_LIST" private const val ANTITRACKER_DNS = "ANTITRACKER_DNS" + private const val WIREGUARD_MTU = "WIREGUARD_MTU" } private val sharedPreferences: SharedPreferences = preference.settingsPreference @@ -517,6 +518,15 @@ class EncryptedSettingsPreference @Inject constructor(val preference: Preference return sharedPreferences.getString(ANTITRACKER_DNS, "") } + var wireGuardMtu: Int + get() { + return sharedPreferences.getInt(WIREGUARD_MTU, 0) + } + set(value) { + sharedPreferences.edit { + putInt(WIREGUARD_MTU, value) + } + } private fun putIsMigrated(isMigrated: Boolean) { sharedPreferences.edit { diff --git a/core/src/main/java/net/ivpn/core/common/prefs/Settings.kt b/core/src/main/java/net/ivpn/core/common/prefs/Settings.kt index c60d27244..4b4997126 100644 --- a/core/src/main/java/net/ivpn/core/common/prefs/Settings.kt +++ b/core/src/main/java/net/ivpn/core/common/prefs/Settings.kt @@ -366,6 +366,12 @@ class Settings @Inject constructor( settingsPreference.putRegenerationPeriod(value) } + var wireGuardMtu: Int + get() = settingsPreference.wireGuardMtu + set(value) { + settingsPreference.wireGuardMtu = value + } + fun generateWireGuardKeys(): Keypair { return Keypair() } diff --git a/core/src/main/java/net/ivpn/core/common/shortcuts/ConnectionShortcutsActivity.java b/core/src/main/java/net/ivpn/core/common/shortcuts/ConnectionShortcutsActivity.java index 16505ec5e..bd4e0d141 100644 --- a/core/src/main/java/net/ivpn/core/common/shortcuts/ConnectionShortcutsActivity.java +++ b/core/src/main/java/net/ivpn/core/common/shortcuts/ConnectionShortcutsActivity.java @@ -33,6 +33,7 @@ import androidx.appcompat.app.AppCompatActivity; import net.ivpn.core.IVPNApplication; +import net.ivpn.core.common.nightmode.OledModeController; import net.ivpn.core.v2.dialog.DialogBuilder; import net.ivpn.core.v2.dialog.Dialogs; @@ -54,6 +55,7 @@ public class ConnectionShortcutsActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { + OledModeController.applyOledTheme(this); LOGGER.info("ConnectionShortcutsActivity onCreate"); IVPNApplication.appComponent.provideActivityComponent().create().inject(this); super.onCreate(savedInstanceState); diff --git a/core/src/main/java/net/ivpn/core/ui/theme/Color.kt b/core/src/main/java/net/ivpn/core/ui/theme/Color.kt index 76300728b..97d474394 100644 --- a/core/src/main/java/net/ivpn/core/ui/theme/Color.kt +++ b/core/src/main/java/net/ivpn/core/ui/theme/Color.kt @@ -5,6 +5,9 @@ import androidx.compose.runtime.staticCompositionLocalOf import androidx.compose.ui.graphics.Color val colorPrimary = Color(0xFF398FE6) +val oledBackground = Color(0xFF000000) +val oledSurface = Color(0xFF000000) +val oledCard = Color(0xFF0A0A0A) @Immutable data class CustomColors( @@ -12,7 +15,9 @@ data class CustomColors( val textFieldBackground: Color = Color.Unspecified, val textFieldText: Color = Color.Unspecified, val textFieldPlaceholder: Color = Color.Unspecified, - val secondaryLabel: Color = Color.Unspecified + val secondaryLabel: Color = Color.Unspecified, + val background: Color = Color.Unspecified, + val surface: Color = Color.Unspecified ) val LocalColors = staticCompositionLocalOf { @@ -24,7 +29,9 @@ val CustomLightColorPalette = CustomColors( textFieldBackground = Color(0x54D3DFE6), textFieldText = Color(0xFF2A394B), textFieldPlaceholder = Color(0x802A394B), - secondaryLabel = Color(0x80000000) + secondaryLabel = Color(0x80000000), + background = Color(0xFFF5F9FC), + surface = Color(0xFFFFFFFF) ) val CustomDarkColorPalette = CustomColors( @@ -32,5 +39,17 @@ val CustomDarkColorPalette = CustomColors( textFieldBackground = Color(0xFF1C1C1E), textFieldText = Color(0xFFFFFFFF), textFieldPlaceholder = Color(0x80FFFFFF), - secondaryLabel = Color(0x80FFFFFF) + secondaryLabel = Color(0x80FFFFFF), + background = Color(0xFF121212), + surface = Color(0xFF202020) +) + +val CustomOledColorPalette = CustomColors( + textFieldLabel = Color(0xFFFFFFFF), + textFieldBackground = Color(0xFF0A0A0A), + textFieldText = Color(0xFFFFFFFF), + textFieldPlaceholder = Color(0x80FFFFFF), + secondaryLabel = Color(0x80FFFFFF), + background = oledBackground, + surface = oledSurface ) diff --git a/core/src/main/java/net/ivpn/core/ui/theme/Theme.kt b/core/src/main/java/net/ivpn/core/ui/theme/Theme.kt index 252da2fc5..55b70a1d1 100644 --- a/core/src/main/java/net/ivpn/core/ui/theme/Theme.kt +++ b/core/src/main/java/net/ivpn/core/ui/theme/Theme.kt @@ -6,26 +6,42 @@ import androidx.compose.material.darkColors import androidx.compose.material.lightColors import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider +import net.ivpn.core.common.nightmode.OledModeController private val DarkColorPalette = darkColors( primary = colorPrimary, secondary = colorPrimary ) +private val OledColorPalette = darkColors( + primary = colorPrimary, + secondary = colorPrimary, + background = oledBackground, + surface = oledSurface +) + private val LightColorPalette = lightColors( primary = colorPrimary, secondary = colorPrimary ) @Composable -fun AppTheme(darkTheme: Boolean = isSystemInDarkTheme(), content: @Composable() () -> Unit) { - val colors = - if (darkTheme) DarkColorPalette - else LightColorPalette +fun AppTheme( + darkTheme: Boolean = isSystemInDarkTheme(), + oledTheme: Boolean = OledModeController.isOledModeEnabled(), + content: @Composable() () -> Unit +) { + val colors = when { + oledTheme -> OledColorPalette + darkTheme -> DarkColorPalette + else -> LightColorPalette + } - val customColors = - if (darkTheme) CustomDarkColorPalette - else CustomLightColorPalette + val customColors = when { + oledTheme -> CustomOledColorPalette + darkTheme -> CustomDarkColorPalette + else -> CustomLightColorPalette + } CompositionLocalProvider( LocalColors provides customColors diff --git a/core/src/main/java/net/ivpn/core/v2/MainActivity.kt b/core/src/main/java/net/ivpn/core/v2/MainActivity.kt index ebe021966..ceb757aef 100644 --- a/core/src/main/java/net/ivpn/core/v2/MainActivity.kt +++ b/core/src/main/java/net/ivpn/core/v2/MainActivity.kt @@ -34,12 +34,15 @@ import androidx.navigation.findNavController import net.ivpn.core.IVPNApplication import net.ivpn.core.R import net.ivpn.core.common.extension.setContentSecure +import net.ivpn.core.common.nightmode.OledModeController class MainActivity : AppCompatActivity(), NavController.OnDestinationChangedListener { override fun onCreate(savedInstanceState: Bundle?) { + OledModeController.applyOledTheme(this) super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) + OledModeController.applyOledColors(window, findViewById(android.R.id.content)) } override fun onPostCreate(savedInstanceState: Bundle?) { @@ -57,6 +60,11 @@ class MainActivity : AppCompatActivity(), NavController.OnDestinationChangedList override fun onDestinationChanged(controller: NavController, destination: NavDestination, arguments: Bundle?) { currentFocus?.hideKeyboard() + findViewById(R.id.nav_host_fragment)?.post { + findViewById(R.id.nav_host_fragment)?.let { + OledModeController.applyOledToViewTree(it) + } + } } private fun View.hideKeyboard() { diff --git a/core/src/main/java/net/ivpn/core/v2/account/LogOutFragment.kt b/core/src/main/java/net/ivpn/core/v2/account/LogOutFragment.kt index efe013014..b93175ca6 100644 --- a/core/src/main/java/net/ivpn/core/v2/account/LogOutFragment.kt +++ b/core/src/main/java/net/ivpn/core/v2/account/LogOutFragment.kt @@ -33,6 +33,7 @@ import androidx.navigation.fragment.NavHostFragment import com.google.android.material.bottomsheet.BottomSheetDialogFragment import net.ivpn.core.IVPNApplication import net.ivpn.core.R +import net.ivpn.core.common.nightmode.OledModeController import net.ivpn.core.databinding.FragmentLogoutBottomSheetBinding import net.ivpn.core.v2.viewmodel.AccountViewModel import javax.inject.Inject @@ -44,6 +45,14 @@ class LogOutFragment : BottomSheetDialogFragment() { @Inject lateinit var account: AccountViewModel + override fun getTheme(): Int { + return if (OledModeController.isOledModeEnabled()) { + R.style.AppTheme_BottomSheet_OLED + } else { + super.getTheme() + } + } + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, diff --git a/core/src/main/java/net/ivpn/core/v2/connect/ConnectFragment.kt b/core/src/main/java/net/ivpn/core/v2/connect/ConnectFragment.kt index d717d44c9..90781a826 100644 --- a/core/src/main/java/net/ivpn/core/v2/connect/ConnectFragment.kt +++ b/core/src/main/java/net/ivpn/core/v2/connect/ConnectFragment.kt @@ -71,6 +71,7 @@ import net.ivpn.core.v2.map.model.Location import net.ivpn.core.v2.network.NetworkViewModel import net.ivpn.core.v2.signup.SignUpController import net.ivpn.core.v2.viewmodel.* +import net.ivpn.core.common.nightmode.OledModeController import net.ivpn.core.vpn.ServiceConstants import org.slf4j.LoggerFactory import javax.inject.Inject @@ -143,6 +144,7 @@ class ConnectFragment : Fragment(), MultiHopViewModel.MultiHopNavigator, LOGGER.info("On view created") IVPNApplication.appComponent.provideActivityComponent().create().inject(this) initViews() + view.post { OledModeController.applyOledToViewTree(view) } // Support variable bottom navigation height (Gesture, 2-Button, 3-Button) for Android 35+ ViewCompat.setOnApplyWindowInsetsListener(view) { _, insets -> @@ -176,6 +178,7 @@ class ConnectFragment : Fragment(), MultiHopViewModel.MultiHopNavigator, account.updateSessionStatus() checkLocationPermission() applySlidingPanelSide() + view?.let { OledModeController.applyOledToViewTree(it) } } override fun onStart() { diff --git a/core/src/main/java/net/ivpn/core/v2/connect/createSession/CreateSessionFragment.java b/core/src/main/java/net/ivpn/core/v2/connect/createSession/CreateSessionFragment.java index d1b452a78..db377e891 100644 --- a/core/src/main/java/net/ivpn/core/v2/connect/createSession/CreateSessionFragment.java +++ b/core/src/main/java/net/ivpn/core/v2/connect/createSession/CreateSessionFragment.java @@ -38,6 +38,7 @@ import com.google.android.material.bottomsheet.BottomSheetDialogFragment; import net.ivpn.core.R; +import net.ivpn.core.common.nightmode.OledModeController; import net.ivpn.core.databinding.BottomSheetBinding; import net.ivpn.core.databinding.BottomSheetDmProBinding; import net.ivpn.core.databinding.BottomSheetLegacyStandardBinding; @@ -60,6 +61,14 @@ public CreateSessionFragment(SessionErrorResponse error) { this.error = error; } + @Override + public int getTheme() { + if (OledModeController.INSTANCE.isOledModeEnabled()) { + return R.style.AppTheme_BottomSheet_OLED; + } + return super.getTheme(); + } + @Override public void onAttach(@NonNull Context context) { super.onAttach(context); diff --git a/core/src/main/java/net/ivpn/core/v2/dialog/DialogBuilder.kt b/core/src/main/java/net/ivpn/core/v2/dialog/DialogBuilder.kt index 656315f0a..15c4f3c10 100644 --- a/core/src/main/java/net/ivpn/core/v2/dialog/DialogBuilder.kt +++ b/core/src/main/java/net/ivpn/core/v2/dialog/DialogBuilder.kt @@ -47,17 +47,27 @@ import net.ivpn.core.common.InputFilterMinMax import net.ivpn.core.common.extension.setContentSecure import net.ivpn.core.common.utils.DateUtil import net.ivpn.core.databinding.DialogCustomDnsBinding +import net.ivpn.core.databinding.DialogMtuBinding import net.ivpn.core.v2.customdns.OnDNSChangedListener import net.ivpn.core.v2.protocol.dialog.WireGuardDetailsDialogListener import net.ivpn.core.v2.protocol.dialog.WireGuardInfo import net.ivpn.core.v2.timepicker.OnDelayOptionSelected import net.ivpn.core.v2.timepicker.PauseDelay +import net.ivpn.core.common.nightmode.OledModeController import org.slf4j.LoggerFactory import java.util.* object DialogBuilder { private val LOGGER = LoggerFactory.getLogger(DialogBuilder::class.java) + private fun getDialogStyle(): Int { + return if (OledModeController.isOledModeEnabled()) { + R.style.AppTheme_AlertDialog_OLED + } else { + R.style.AlertDialog + } + } + @JvmStatic fun createOptionDialog( context: Context?, dialogAttr: Dialogs, @@ -67,7 +77,7 @@ object DialogBuilder { if (context == null) { return } - val builder = MaterialAlertDialogBuilder(context, R.style.AlertDialog) + val builder = MaterialAlertDialogBuilder(context, getDialogStyle()) builder.setTitle(context.getString(dialogAttr.titleId)) builder.setMessage(context.getString(dialogAttr.messageId)) if (dialogAttr.positiveBtnId != -1) { @@ -94,7 +104,7 @@ object DialogBuilder { if (context == null || dialogAttr == null) { return } - val builder = MaterialAlertDialogBuilder(context, R.style.AlertDialog) + val builder = MaterialAlertDialogBuilder(context, getDialogStyle()) builder.setTitle(context.getString(dialogAttr.titleId)) builder.setMessage(context.getString(dialogAttr.messageId)) builder.setNegativeButton(context.getString(dialogAttr.negativeBtnId), null) @@ -116,7 +126,7 @@ object DialogBuilder { if (context == null) { return } - val builder = MaterialAlertDialogBuilder(context, R.style.AlertDialog) + val builder = MaterialAlertDialogBuilder(context, getDialogStyle()) builder.setTitle(title) builder.setMessage(msg) builder.setNegativeButton(context.getString(R.string.dialogs_ok), null) @@ -141,7 +151,7 @@ object DialogBuilder { if (context == null) { return } - val builder = AlertDialog.Builder(context, R.style.AlertDialog) + val builder = AlertDialog.Builder(context, getDialogStyle()) builder.setTitle(title) builder.setMessage(msg) builder.setOnCancelListener(cancelListener) @@ -173,7 +183,7 @@ object DialogBuilder { if (context == null) { return null } - val builder = AlertDialog.Builder(context, R.style.AlertDialog) + val builder = AlertDialog.Builder(context, getDialogStyle()) builder.setTitle(context.getString(dialogAttr.titleId)) builder.setMessage(context.getString(dialogAttr.messageId)) @@ -215,7 +225,7 @@ object DialogBuilder { if (context == null) { return } - val builder = AlertDialog.Builder(context, R.style.AlertDialog) + val builder = AlertDialog.Builder(context, getDialogStyle()) val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater val dialogView = inflater.inflate(R.layout.dialog_predefined_time_picker, null) val delayMap: MutableMap = HashMap() @@ -258,7 +268,7 @@ object DialogBuilder { if (context == null) { return } - val builder = AlertDialog.Builder(context, R.style.AlertDialog) + val builder = AlertDialog.Builder(context, getDialogStyle()) val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater val dialogView = inflater.inflate(R.layout.dialog_custom_time_picker, null) val pauseTime = LongArray(1) @@ -299,9 +309,12 @@ object DialogBuilder { if (context == null) { return } - val builder = AlertDialog.Builder(context, R.style.AlertDialog) + val builder = AlertDialog.Builder(context, getDialogStyle()) val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater val dialogView = inflater.inflate(R.layout.dialog_wireguard_details, null) + if (OledModeController.isOledModeEnabled()) { + dialogView.setBackgroundColor(context.getColor(R.color.oled_background)) + } builder.setView(dialogView) val alertDialog = builder.create() (dialogView.findViewById(R.id.wg_public_key) as TextView).text = info.publicKey @@ -339,7 +352,7 @@ object DialogBuilder { if (context == null) { return } - val builder = AlertDialog.Builder(context, R.style.AlertDialog) + val builder = AlertDialog.Builder(context, getDialogStyle()) val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater val viewModel = IVPNApplication.appComponent.provideActivityComponent().create().dialogueViewModel @@ -350,6 +363,9 @@ object DialogBuilder { ) binding.viewmodel = viewModel val dialogView = binding.root + if (OledModeController.isOledModeEnabled()) { + dialogView.setBackgroundColor(context.getColor(R.color.oled_background)) + } builder.setView(dialogView) val alertDialog = builder.create() binding.firstValue.filters = arrayOf(InputFilterMinMax(0, 255)) @@ -379,4 +395,76 @@ object DialogBuilder { exception.printStackTrace() } } + + @JvmStatic + fun createMtuDialog( + context: Context?, + currentMtu: String, + onMtuSaved: (String) -> Unit, + onMtuError: () -> Unit + ) { + LOGGER.info("Create MTU dialog") + if (context == null) { + return + } + val builder = AlertDialog.Builder(context, getDialogStyle()) + val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater + val binding: DialogMtuBinding = DataBindingUtil.inflate( + inflater, + R.layout.dialog_mtu, null, false + ) + binding.mtuValue = currentMtu + val dialogView = binding.root + if (OledModeController.isOledModeEnabled()) { + dialogView.setBackgroundColor(context.getColor(R.color.oled_background)) + binding.mtuInput.setHintTextColor(context.getColor(R.color.oled_hint_text)) + } + builder.setView(dialogView) + val alertDialog = builder.create() + + binding.mtuInput.setOnEditorActionListener { _, actionId, _ -> + if (actionId == EditorInfo.IME_ACTION_DONE) { + val mtuString = binding.mtuInput.text?.toString() ?: "" + if (isValidMtu(mtuString)) { + onMtuSaved(mtuString) + alertDialog.dismiss() + } else { + onMtuError() + } + } + false + } + + dialogView.findViewById(R.id.apply_action).setOnClickListener { + val mtuString = binding.mtuInput.text?.toString() ?: "" + if (isValidMtu(mtuString)) { + onMtuSaved(mtuString) + alertDialog.dismiss() + } else { + onMtuError() + } + } + dialogView.findViewById(R.id.cancel_action).setOnClickListener { alertDialog.dismiss() } + + if ((context as Activity).isFinishing) { + return + } + try { + alertDialog.show() + } catch (exception: Exception) { + exception.printStackTrace() + } + } + + private fun isValidMtu(mtuString: String): Boolean { + if (mtuString.isEmpty()) { + return true // Empty means use default + } + return try { + val mtu = mtuString.toInt() + mtu == 0 || (mtu in 576..65535) + } catch (e: NumberFormatException) { + false + } + } } \ No newline at end of file diff --git a/core/src/main/java/net/ivpn/core/v2/dialog/DialogBuilderK.kt b/core/src/main/java/net/ivpn/core/v2/dialog/DialogBuilderK.kt index ec6bbb6e7..9b29dda56 100644 --- a/core/src/main/java/net/ivpn/core/v2/dialog/DialogBuilderK.kt +++ b/core/src/main/java/net/ivpn/core/v2/dialog/DialogBuilderK.kt @@ -36,12 +36,21 @@ import net.ivpn.core.databinding.DialogueNightModeBinding import net.ivpn.core.v2.network.dialog.NetworkChangeDialogViewModel import net.ivpn.core.v2.viewmodel.ColorThemeViewModel import net.ivpn.core.v2.viewmodel.ServerListFilterViewModel +import net.ivpn.core.common.nightmode.OledModeController object DialogBuilderK { + private fun getDialogStyle(): Int { + return if (OledModeController.isOledModeEnabled()) { + R.style.AppTheme_AlertDialog_OLED + } else { + R.style.AppTheme_AlertDialog + } + } + fun openDarkModeDialogue(context: Context, listener: OnNightModeChangedListener, colorThemeViewModel: ColorThemeViewModel) { val builder: AlertDialog.Builder = - AlertDialog.Builder(context, R.style.AppTheme_AlertDialog) + AlertDialog.Builder(context, getDialogStyle()) val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater @@ -75,7 +84,7 @@ object DialogBuilderK { listener: ServerListFilterViewModel.OnFilterChangedListener, filterViewModel: ServerListFilterViewModel) { val builder: AlertDialog.Builder = - AlertDialog.Builder(context, R.style.AppTheme_AlertDialog) + AlertDialog.Builder(context, getDialogStyle()) val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater @@ -104,7 +113,7 @@ object DialogBuilderK { fun openChangeNetworkStatusDialogue(context: Context, dialogViewModel: NetworkChangeDialogViewModel) { val builder: AlertDialog.Builder = - AlertDialog.Builder(context, R.style.AppTheme_AlertDialog) + AlertDialog.Builder(context, getDialogStyle()) val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater @@ -133,7 +142,7 @@ object DialogBuilderK { fun openChangeDefaultNetworkStatusDialogue(context: Context, dialogViewModel: NetworkChangeDialogViewModel) { val builder: AlertDialog.Builder = - AlertDialog.Builder(context, R.style.AppTheme_AlertDialog) + AlertDialog.Builder(context, getDialogStyle()) val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater diff --git a/core/src/main/java/net/ivpn/core/v2/protocol/ProtocolFragment.kt b/core/src/main/java/net/ivpn/core/v2/protocol/ProtocolFragment.kt index 573f6bf21..9a2e8dca4 100644 --- a/core/src/main/java/net/ivpn/core/v2/protocol/ProtocolFragment.kt +++ b/core/src/main/java/net/ivpn/core/v2/protocol/ProtocolFragment.kt @@ -107,6 +107,9 @@ class ProtocolFragment : Fragment(), ProtocolNavigator { binding.contentLayout.wgProtocolSettings.wireguardDetails.setOnClickListener { openWireGuardDetails() } + binding.contentLayout.wgProtocolSettings.wireguardMtu.setOnClickListener { + openMtuDialog() + } binding.contentLayout.protocolSelection.comparisonText.movementMethod = LinkMovementMethod.getInstance() } @@ -127,6 +130,23 @@ class ProtocolFragment : Fragment(), ProtocolNavigator { navigate(action) } + private fun openMtuDialog() { + DialogBuilder.createMtuDialog( + context, + viewModel.getMtuDisplayValue(), + onMtuSaved = { mtuString -> + viewModel.saveMtu(mtuString) + }, + onMtuError = { + DialogBuilder.createFullCustomNotificationDialog( + context, + getString(R.string.dialogs_error), + getString(R.string.protocol_wg_mtu_error) + ) + } + ) + } + override fun notifyUser(msgId: Int, actionId: Int, listener: View.OnClickListener?) { SnackbarUtil.show(binding.coordinator, msgId, actionId, listener) } diff --git a/core/src/main/java/net/ivpn/core/v2/serverlist/ServerListTabFragment.kt b/core/src/main/java/net/ivpn/core/v2/serverlist/ServerListTabFragment.kt index 5e4fe0cca..e264bc301 100644 --- a/core/src/main/java/net/ivpn/core/v2/serverlist/ServerListTabFragment.kt +++ b/core/src/main/java/net/ivpn/core/v2/serverlist/ServerListTabFragment.kt @@ -41,6 +41,7 @@ import net.ivpn.core.rest.data.model.ServerType import net.ivpn.core.databinding.FragmentTabsServerListBinding import net.ivpn.core.v2.viewmodel.ServersListCommonViewModel import net.ivpn.core.v2.MainActivity +import net.ivpn.core.common.nightmode.OledModeController import net.ivpn.core.v2.dialog.DialogBuilderK import net.ivpn.core.v2.serverlist.dialog.Filters import net.ivpn.core.v2.viewmodel.ServerListFilterViewModel @@ -79,6 +80,7 @@ class ServerListTabFragment : Fragment(), ServerListFilterViewModel.OnFilterChan IVPNApplication.appComponent.provideActivityComponent().create().inject(this) initViews() initToolbar() + view.post { OledModeController.applyOledToViewTree(view) } // Support variable bottom navigation height (Gesture, 2-Button, 3-Button) for Android 35+ ViewCompat.setOnApplyWindowInsetsListener(view) { _, insets -> @@ -97,6 +99,7 @@ class ServerListTabFragment : Fragment(), ServerListFilterViewModel.OnFilterChan super.onResume() LOGGER.info("onResume") filterViewModel.onResume() + view?.let { OledModeController.applyOledToViewTree(it) } } override fun onStart() { diff --git a/core/src/main/java/net/ivpn/core/v2/serverlist/all/AllServersRecyclerViewAdapter.kt b/core/src/main/java/net/ivpn/core/v2/serverlist/all/AllServersRecyclerViewAdapter.kt index 277ef6d8a..290a9372a 100644 --- a/core/src/main/java/net/ivpn/core/v2/serverlist/all/AllServersRecyclerViewAdapter.kt +++ b/core/src/main/java/net/ivpn/core/v2/serverlist/all/AllServersRecyclerViewAdapter.kt @@ -48,6 +48,7 @@ import net.ivpn.core.v2.serverlist.items.ConnectionOption import net.ivpn.core.v2.serverlist.items.FastestServerItem import net.ivpn.core.v2.serverlist.items.RandomServerItem import net.ivpn.core.v2.serverlist.items.SearchServerItem +import net.ivpn.core.common.nightmode.OledModeController import org.slf4j.LoggerFactory import java.util.* import javax.inject.Inject @@ -154,6 +155,8 @@ class AllServersRecyclerViewAdapter( } else if (holder is SearchViewHolder) { searchBinding = holder.binding } + // Apply OLED colors to recycled/new items + OledModeController.applyOledToViewTree(holder.itemView) } private fun setPing(binding: ServerItemBinding, server: Server) { diff --git a/core/src/main/java/net/ivpn/core/v2/serverlist/all/ServerListFragment.kt b/core/src/main/java/net/ivpn/core/v2/serverlist/all/ServerListFragment.kt index f963d4874..681f681e3 100644 --- a/core/src/main/java/net/ivpn/core/v2/serverlist/all/ServerListFragment.kt +++ b/core/src/main/java/net/ivpn/core/v2/serverlist/all/ServerListFragment.kt @@ -48,6 +48,7 @@ import net.ivpn.core.v2.viewmodel.ConnectionViewModel import net.ivpn.core.v2.viewmodel.IPv6ViewModel import net.ivpn.core.v2.viewmodel.ServerListFilterViewModel import net.ivpn.core.v2.viewmodel.ServerListViewModel +import net.ivpn.core.common.nightmode.OledModeController import org.slf4j.LoggerFactory import javax.inject.Inject @@ -99,6 +100,7 @@ class ServerListFragment : Fragment(), init() viewmodel.start(serverType) binding.lifecycleOwner = this + view.post { OledModeController.applyOledToViewTree(view) } val pingObserver = Observer> { map -> (binding.recyclerView.adapter as ServerBasedRecyclerViewAdapter).setPings(map) @@ -110,6 +112,7 @@ class ServerListFragment : Fragment(), override fun onResume() { super.onResume() viewmodel.navigators.add(this) + view?.let { OledModeController.applyOledToViewTree(it) } } override fun onPause() { diff --git a/core/src/main/java/net/ivpn/core/v2/serverlist/favourite/FavouriteServerListRecyclerViewAdapter.kt b/core/src/main/java/net/ivpn/core/v2/serverlist/favourite/FavouriteServerListRecyclerViewAdapter.kt index 66a293029..9fa801c29 100644 --- a/core/src/main/java/net/ivpn/core/v2/serverlist/favourite/FavouriteServerListRecyclerViewAdapter.kt +++ b/core/src/main/java/net/ivpn/core/v2/serverlist/favourite/FavouriteServerListRecyclerViewAdapter.kt @@ -44,6 +44,7 @@ import net.ivpn.core.v2.serverlist.dialog.Filters import net.ivpn.core.v2.serverlist.holders.HolderListener import net.ivpn.core.v2.serverlist.holders.ServerViewHolder import net.ivpn.core.v2.serverlist.items.ConnectionOption +import net.ivpn.core.common.nightmode.OledModeController import java.util.* import java.util.concurrent.ConcurrentHashMap import javax.inject.Inject @@ -108,6 +109,8 @@ class FavouriteServerListRecyclerViewAdapter( setPing(holder.binding, server) holder.bind(server, forbiddenServer, isIPv6BadgeEnabled, filter) } + // Apply OLED colors to recycled/new items + OledModeController.applyOledToViewTree(holder.itemView) } private fun setPing(binding: ServerItemBinding, server: Server) { diff --git a/core/src/main/java/net/ivpn/core/v2/serverlist/favourite/FavouriteServersListFragment.kt b/core/src/main/java/net/ivpn/core/v2/serverlist/favourite/FavouriteServersListFragment.kt index eb1c3bd67..ba2745f4d 100644 --- a/core/src/main/java/net/ivpn/core/v2/serverlist/favourite/FavouriteServersListFragment.kt +++ b/core/src/main/java/net/ivpn/core/v2/serverlist/favourite/FavouriteServersListFragment.kt @@ -48,6 +48,7 @@ import net.ivpn.core.v2.viewmodel.ConnectionViewModel import net.ivpn.core.v2.viewmodel.IPv6ViewModel import net.ivpn.core.v2.viewmodel.ServerListFilterViewModel import net.ivpn.core.v2.viewmodel.ServerListViewModel +import net.ivpn.core.common.nightmode.OledModeController import org.slf4j.LoggerFactory import javax.inject.Inject @@ -106,6 +107,7 @@ class FavouriteServersListFragment : Fragment(), ServerListViewModel.ServerListN init(view) viewmodel.start(serverType) binding.lifecycleOwner = this + view.post { OledModeController.applyOledToViewTree(view) } val pingObserver = Observer> { map -> (binding.recyclerView.adapter as ServerBasedRecyclerViewAdapter).setPings(map) @@ -117,6 +119,7 @@ class FavouriteServersListFragment : Fragment(), ServerListViewModel.ServerListN override fun onResume() { super.onResume() viewmodel.navigators.add(this) + view?.let { OledModeController.applyOledToViewTree(it) } } override fun onPause() { diff --git a/core/src/main/java/net/ivpn/core/v2/settings/SettingsFragment.kt b/core/src/main/java/net/ivpn/core/v2/settings/SettingsFragment.kt index 7cef8e1c9..c5850421f 100644 --- a/core/src/main/java/net/ivpn/core/v2/settings/SettingsFragment.kt +++ b/core/src/main/java/net/ivpn/core/v2/settings/SettingsFragment.kt @@ -44,6 +44,7 @@ import net.ivpn.core.common.billing.addfunds.Plan import net.ivpn.core.common.extension.findNavControllerSafely import net.ivpn.core.common.extension.navigate import net.ivpn.core.common.nightmode.NightMode +import net.ivpn.core.common.nightmode.OledModeController import net.ivpn.core.common.nightmode.OnNightModeChangedListener import net.ivpn.core.rest.data.model.ServerType import net.ivpn.core.common.utils.ToastUtil @@ -118,6 +119,7 @@ class SettingsFragment : Fragment(), OnNightModeChangedListener, ColorThemeViewM super.onViewCreated(view, savedInstanceState) IVPNApplication.appComponent.provideActivityComponent().create().inject(this) initViews() + view.post { OledModeController.applyOledToViewTree(view) } } override fun onResume() { @@ -129,6 +131,7 @@ class SettingsFragment : Fragment(), OnNightModeChangedListener, ColorThemeViewM alwaysOnVPN.onResume() logging.onResume() colorTheme.onResume() + view?.let { OledModeController.applyOledToViewTree(it) } } override fun onStart() { @@ -526,7 +529,7 @@ class SettingsFragment : Fragment(), OnNightModeChangedListener, ColorThemeViewM return } AppCompatDelegate.setDefaultNightMode(mode.systemId) - println("$mode was selected") + activity?.recreate() } override fun onNightModeCancelClicked() { diff --git a/core/src/main/java/net/ivpn/core/v2/splittunneling/SplitTunnelingFragment.kt b/core/src/main/java/net/ivpn/core/v2/splittunneling/SplitTunnelingFragment.kt index eeb85116b..0a62a7b2b 100644 --- a/core/src/main/java/net/ivpn/core/v2/splittunneling/SplitTunnelingFragment.kt +++ b/core/src/main/java/net/ivpn/core/v2/splittunneling/SplitTunnelingFragment.kt @@ -37,6 +37,7 @@ import net.ivpn.core.R import net.ivpn.core.databinding.FragmentSplitTunnelingBinding import net.ivpn.core.v2.viewmodel.SplitTunnelingViewModel import net.ivpn.core.v2.MainActivity +import net.ivpn.core.common.nightmode.OledModeController import javax.inject.Inject class SplitTunnelingFragment : Fragment() { @@ -64,6 +65,12 @@ class SplitTunnelingFragment : Fragment() { super.onViewCreated(view, savedInstanceState) initToolbar() init() + view.post { OledModeController.applyOledToViewTree(view) } + } + + override fun onResume() { + super.onResume() + view?.let { OledModeController.applyOledToViewTree(it) } } override fun onStart() { diff --git a/core/src/main/java/net/ivpn/core/v2/splittunneling/SplitTunnelingRecyclerViewAdapter.kt b/core/src/main/java/net/ivpn/core/v2/splittunneling/SplitTunnelingRecyclerViewAdapter.kt index f5319091a..6f4f9d688 100644 --- a/core/src/main/java/net/ivpn/core/v2/splittunneling/SplitTunnelingRecyclerViewAdapter.kt +++ b/core/src/main/java/net/ivpn/core/v2/splittunneling/SplitTunnelingRecyclerViewAdapter.kt @@ -35,6 +35,7 @@ import net.ivpn.core.v2.splittunneling.holder.AppsSearchViewHolder import net.ivpn.core.v2.splittunneling.items.ApplicationItem import net.ivpn.core.v2.splittunneling.items.SearchItem import net.ivpn.core.v2.splittunneling.items.SplitTunnelingItem +import net.ivpn.core.common.nightmode.OledModeController import java.util.* import javax.inject.Inject @@ -87,6 +88,8 @@ class SplitTunnelingRecyclerViewAdapter @Inject internal constructor() } else if (holder is AppsSearchViewHolder) { searchBinding = holder.binding } + + OledModeController.applyOledToViewTree(holder.itemView) } override fun getItemCount(): Int { diff --git a/core/src/main/java/net/ivpn/core/v2/timepicker/TimePickerActivity.java b/core/src/main/java/net/ivpn/core/v2/timepicker/TimePickerActivity.java index e3cf67aa4..47be01b97 100644 --- a/core/src/main/java/net/ivpn/core/v2/timepicker/TimePickerActivity.java +++ b/core/src/main/java/net/ivpn/core/v2/timepicker/TimePickerActivity.java @@ -27,6 +27,7 @@ import androidx.appcompat.app.AppCompatActivity; import net.ivpn.core.IVPNApplication; +import net.ivpn.core.common.nightmode.OledModeController; import net.ivpn.core.v2.dialog.DialogBuilder; import net.ivpn.core.vpn.controller.VpnBehaviorController; @@ -43,6 +44,7 @@ public class TimePickerActivity extends AppCompatActivity implements OnDelayOpti @Override protected void onCreate(@Nullable Bundle savedInstanceState) { + OledModeController.applyOledTheme(this); IVPNApplication.appComponent.provideActivityComponent().create().inject(this); super.onCreate(savedInstanceState); showPredefinedTimePickerDialog(); diff --git a/core/src/main/java/net/ivpn/core/v2/viewmodel/ProtocolViewModel.java b/core/src/main/java/net/ivpn/core/v2/viewmodel/ProtocolViewModel.java index d9d92c172..eff8aba0b 100644 --- a/core/src/main/java/net/ivpn/core/v2/viewmodel/ProtocolViewModel.java +++ b/core/src/main/java/net/ivpn/core/v2/viewmodel/ProtocolViewModel.java @@ -79,6 +79,10 @@ public class ProtocolViewModel { public ObservableField wgInfo = new ObservableField<>(); public ObservableField obfuscationType = new ObservableField<>(); + public ObservableField wireGuardMtu = new ObservableField<>(); + + private static final int MTU_LOWER_BOUND = 576; + private static final int MTU_UPPER_BOUND = 65535; private ProtocolNavigator navigator; private String wireGuardPublicKey; @@ -186,6 +190,18 @@ private List getAvailablePortsForCurrentObfuscationType() { return false; }; + @SuppressLint("ClickableViewAccessibility") + public View.OnTouchListener mtuTouchListener = (view, motionEvent) -> { + if (isVpnActive()) { + if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) { + navigator.notifyUser(R.string.snackbar_to_change_mtu_disconnect_first, + R.string.snackbar_disconnect_first, null); + } + return true; + } + return false; + }; + @Inject ProtocolViewModel(Context context, Settings settings, WireGuardKeyController keyController, ProtocolController protocolController, VpnBehaviorController vpnBehaviorController, @@ -212,6 +228,9 @@ private void init() { obfuscationType.set(settings.getObfuscationType()); + int mtu = settings.getWireGuardMtu(); + wireGuardMtu.set(mtu > 0 ? String.valueOf(mtu) : ""); + wgInfo.set(getWireGuardInfo()); multiHop.set(multiHopController); } @@ -293,6 +312,38 @@ void setPort(Port port) { } } + public boolean isValidMtu(String mtuString) { + if (mtuString == null || mtuString.isEmpty()) { + // empty is valid that means use default + return true; + } + try { + int mtu = Integer.parseInt(mtuString); + return mtu == 0 || (mtu >= MTU_LOWER_BOUND && mtu <= MTU_UPPER_BOUND); + } catch (NumberFormatException e) { + return false; + } + } + + public void saveMtu(String mtuString) { + LOGGER.info(TAG, "Save MTU: " + mtuString); + int mtu = 0; + if (mtuString != null && !mtuString.isEmpty()) { + try { + mtu = Integer.parseInt(mtuString); + } catch (NumberFormatException e) { + mtu = 0; + } + } + settings.setWireGuardMtu(mtu); + wireGuardMtu.set(mtu > 0 ? String.valueOf(mtu) : ""); + } + + public String getMtuDisplayValue() { + int mtu = settings.getWireGuardMtu(); + return mtu > 0 ? String.valueOf(mtu) : ""; + } + private void onGeneratingError(String error, Throwable throwable) { LOGGER.error(TAG, "On generating error: " + error, throwable); dataLoading.set(false); diff --git a/core/src/main/java/net/ivpn/core/vpn/local/PermissionActivity.java b/core/src/main/java/net/ivpn/core/vpn/local/PermissionActivity.java index 605e4d6a3..9a12de04e 100644 --- a/core/src/main/java/net/ivpn/core/vpn/local/PermissionActivity.java +++ b/core/src/main/java/net/ivpn/core/vpn/local/PermissionActivity.java @@ -32,6 +32,7 @@ import android.util.Log; import net.ivpn.core.IVPNApplication; +import net.ivpn.core.common.nightmode.OledModeController; import net.ivpn.core.v2.dialog.DialogBuilder; import net.ivpn.core.v2.dialog.Dialogs; import net.ivpn.core.vpn.controller.VpnBehaviorController; @@ -51,6 +52,7 @@ public class PermissionActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { + OledModeController.applyOledTheme(this); IVPNApplication.appComponent.provideActivityComponent().create().inject(this); LOGGER.info("onCreate"); super.onCreate(savedInstanceState); diff --git a/core/src/main/java/net/ivpn/core/vpn/wireguard/ConfigManager.kt b/core/src/main/java/net/ivpn/core/vpn/wireguard/ConfigManager.kt index a1f5aad71..7ff470b05 100644 --- a/core/src/main/java/net/ivpn/core/vpn/wireguard/ConfigManager.kt +++ b/core/src/main/java/net/ivpn/core/vpn/wireguard/ConfigManager.kt @@ -244,6 +244,13 @@ class ConfigManager @Inject constructor( val dnsString = getDNS(hosts[0]) config.getInterface().setDnsString(dnsString) + // set only if configured + val mtu = settings.wireGuardMtu + if (mtu > 0) { + config.getInterface().setMtu(mtu) + LOGGER.info("Using custom MTU: $mtu") + } + val endpoint = if (v2rayController.isV2RayEnabled()) { v2rayController.getLocalProxyEndpoint() } else { diff --git a/core/src/main/res/layout/dialog_mtu.xml b/core/src/main/res/layout/dialog_mtu.xml new file mode 100644 index 000000000..a61839faa --- /dev/null +++ b/core/src/main/res/layout/dialog_mtu.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/core/src/main/res/layout/dialogue_night_mode.xml b/core/src/main/res/layout/dialogue_night_mode.xml index 8a315e79b..9e2eadf08 100644 --- a/core/src/main/res/layout/dialogue_night_mode.xml +++ b/core/src/main/res/layout/dialogue_night_mode.xml @@ -63,6 +63,19 @@ app:buttonTint="@color/dialogue_button" tools:ignore="RtlSymmetry" /> + + + + + + + + + + + + + + + + + + + + + #E0E5EA #2AD489 + #000000 + #000000 + #0A0A0A + #80FFFFFF + diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml index afa6acbb1..a27ea94af 100644 --- a/core/src/main/res/values/strings.xml +++ b/core/src/main/res/values/strings.xml @@ -88,6 +88,7 @@ To use split tunneling, please disconnect first To change protocol, please disconnect first To change port please disconnect first + To change MTU please disconnect first To change Multi-hop settings please disconnect first Multi-hop is not available for WireGuard right now Connection to server blocked, reconnecting on a different port. Please wait until connection is established. @@ -111,6 +112,7 @@ Light Dark + AMOLED Black System default By battery @@ -456,6 +458,7 @@ Color Theme Light Dark + AMOLED Black System default Set by Battery Saver. Dark mode is used when the system\'s Battery Saver feature is enabled. Otherwise - Light mode. @@ -535,6 +538,13 @@ Disabled Quantum Resistance: Indicates whether your current WireGuard VPN connection is using additional protection measures against potential future quantum computer attacks.\n\nWhen Enabled, a Pre-shared key has been securely exchanged between your device and the server using post-quantum Key Encapsulation Mechanism (KEM) algorithms. If Disabled, the current VPN connection, while secure under today\'s standards, does not include this extra layer of quantum resistance. + MTU + Configure MTU + Valid range [576 - 65535]. Please note that changing this value may affect the proper functioning of the VPN tunnel. + 576 - 65535 + Leave blank to use default value + Expected value: [576 - 65535] + We recommend the WireGuard protocol for its speed, security and connection reliability. For more information visit our protocol comparison web page. Connect diff --git a/core/src/main/res/values/styles.xml b/core/src/main/res/values/styles.xml index 4dcde9b1b..d60ff5971 100644 --- a/core/src/main/res/values/styles.xml +++ b/core/src/main/res/values/styles.xml @@ -291,4 +291,51 @@ true 14sp + + + + + + + + + + + + + + diff --git a/store/src/main/java/net/ivpn/client/billing/BillingActivity.java b/store/src/main/java/net/ivpn/client/billing/BillingActivity.java index 3d79df4e1..5ebe5cbab 100644 --- a/store/src/main/java/net/ivpn/client/billing/BillingActivity.java +++ b/store/src/main/java/net/ivpn/client/billing/BillingActivity.java @@ -32,6 +32,7 @@ import net.ivpn.client.R; import net.ivpn.client.StoreIVPNApplication; import net.ivpn.client.databinding.ActivityBillingBinding; +import net.ivpn.core.common.nightmode.OledModeController; import net.ivpn.core.v2.dialog.DialogBuilder; import org.slf4j.Logger; @@ -49,6 +50,7 @@ public class BillingActivity extends AppCompatActivity implements BillingNavigat @Override protected void onCreate(@Nullable Bundle savedInstanceState) { + OledModeController.applyOledTheme(this); super.onCreate(savedInstanceState); LOGGER.info("onCreate"); StoreIVPNApplication.instance.billingComponent.inject(this); From 80fd62f84c9499e72b99374df2e1391e36cbe6e1 Mon Sep 17 00:00:00 2001 From: Tamim Hossain <132823494+codewithtamim@users.noreply.github.com> Date: Thu, 11 Dec 2025 14:09:38 +0600 Subject: [PATCH 3/9] feature: oled pure black dark mode --- .../wireguard/android/config/Interface.java | 2 +- .../ivpn/core/common/nightmode/NightMode.kt | 9 +- .../common/nightmode/OledModeController.kt | 171 ++++++++++++++++++ .../prefs/EncryptedSettingsPreference.kt | 10 + .../net/ivpn/core/common/prefs/Settings.kt | 6 + .../ConnectionShortcutsActivity.java | 2 + .../main/java/net/ivpn/core/ui/theme/Color.kt | 25 ++- .../main/java/net/ivpn/core/ui/theme/Theme.kt | 30 ++- .../java/net/ivpn/core/v2/MainActivity.kt | 8 + .../ivpn/core/v2/account/LogOutFragment.kt | 12 ++ .../ivpn/core/v2/connect/ConnectFragment.kt | 3 + .../createSession/CreateSessionFragment.java | 12 ++ .../net/ivpn/core/v2/dialog/DialogBuilder.kt | 106 ++++++++++- .../net/ivpn/core/v2/dialog/DialogBuilderK.kt | 17 +- .../ivpn/core/v2/protocol/ProtocolFragment.kt | 20 ++ .../v2/serverlist/ServerListTabFragment.kt | 3 + .../all/AllServersRecyclerViewAdapter.kt | 3 + .../v2/serverlist/all/ServerListFragment.kt | 3 + .../FavouriteServerListRecyclerViewAdapter.kt | 3 + .../favourite/FavouriteServersListFragment.kt | 3 + .../ivpn/core/v2/settings/SettingsFragment.kt | 5 +- .../splittunneling/SplitTunnelingFragment.kt | 7 + .../SplitTunnelingRecyclerViewAdapter.kt | 3 + .../v2/timepicker/TimePickerActivity.java | 2 + .../core/v2/viewmodel/ProtocolViewModel.java | 51 ++++++ .../core/vpn/local/PermissionActivity.java | 2 + .../ivpn/core/vpn/wireguard/ConfigManager.kt | 7 + core/src/main/res/layout/dialog_mtu.xml | 96 ++++++++++ .../main/res/layout/dialogue_night_mode.xml | 13 ++ .../protocol_wireguard_section_settings.xml | 71 ++++++++ core/src/main/res/values/colors.xml | 5 + core/src/main/res/values/strings.xml | 10 + core/src/main/res/values/styles.xml | 47 +++++ .../ivpn/client/billing/BillingActivity.java | 2 + 34 files changed, 741 insertions(+), 28 deletions(-) create mode 100644 core/src/main/java/net/ivpn/core/common/nightmode/OledModeController.kt create mode 100644 core/src/main/res/layout/dialog_mtu.xml diff --git a/core/src/main/java/com/wireguard/android/config/Interface.java b/core/src/main/java/com/wireguard/android/config/Interface.java index c5be102e8..3460e205f 100644 --- a/core/src/main/java/com/wireguard/android/config/Interface.java +++ b/core/src/main/java/com/wireguard/android/config/Interface.java @@ -222,7 +222,7 @@ private void setListenPortString(@Nullable final String port) { setListenPort(0); } - private void setMtu(final int mtu) { + public void setMtu(final int mtu) { this.mtu = mtu; } diff --git a/core/src/main/java/net/ivpn/core/common/nightmode/NightMode.kt b/core/src/main/java/net/ivpn/core/common/nightmode/NightMode.kt index 06875bbc7..c5cca41a3 100644 --- a/core/src/main/java/net/ivpn/core/common/nightmode/NightMode.kt +++ b/core/src/main/java/net/ivpn/core/common/nightmode/NightMode.kt @@ -28,17 +28,20 @@ import net.ivpn.core.R enum class NightMode(val id: Int, val systemId: Int, val stringId: Int) { LIGHT(R.id.light_mode, AppCompatDelegate.MODE_NIGHT_NO, R.string.settings_color_theme_light), DARK(R.id.dark_mode, AppCompatDelegate.MODE_NIGHT_YES, R.string.settings_color_theme_dark), + AMOLED_BLACK(R.id.amoled_black_mode, AppCompatDelegate.MODE_NIGHT_YES, R.string.settings_color_theme_amoled_black), SYSTEM_DEFAULT(R.id.system_default_mode, AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM, R.string.settings_color_theme_system_default), BY_BATTERY_SAVER(R.id.set_by_battery_mode, AppCompatDelegate.MODE_NIGHT_AUTO_BATTERY, R.string.settings_color_theme_system_by_battery); + val isOledBlack: Boolean + get() = this == AMOLED_BLACK + companion object { - fun getById(id: Int) : NightMode { - for (mode in values()) { + fun getById(id: Int): NightMode { + for (mode in entries) { if (mode.id == id) { return mode } } - return LIGHT } } diff --git a/core/src/main/java/net/ivpn/core/common/nightmode/OledModeController.kt b/core/src/main/java/net/ivpn/core/common/nightmode/OledModeController.kt new file mode 100644 index 000000000..f1b77a634 --- /dev/null +++ b/core/src/main/java/net/ivpn/core/common/nightmode/OledModeController.kt @@ -0,0 +1,171 @@ +package net.ivpn.core.common.nightmode + +/* + IVPN Android app + https://github.com/ivpn/android-app + + Created by Tamim Hossain. + Copyright (c) 2024 IVPN Limited. + + This file is part of the IVPN Android app. + + The IVPN Android app 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 3 of the License, or (at your option) any later version. + + The IVPN Android app 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 the IVPN Android app. If not, see . +*/ + +import android.app.Activity +import android.content.res.ColorStateList +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.graphics.drawable.GradientDrawable +import android.graphics.drawable.LayerDrawable +import android.os.Build +import android.view.View +import android.view.ViewGroup +import android.view.Window +import androidx.appcompat.widget.Toolbar +import androidx.cardview.widget.CardView +import com.google.android.material.appbar.AppBarLayout +import com.google.android.material.floatingactionbutton.FloatingActionButton +import com.google.android.material.tabs.TabLayout +import net.ivpn.core.IVPNApplication +import net.ivpn.core.R + +object OledModeController { + + const val OLED_BLACK = Color.BLACK + const val OLED_CARD = 0xFF0A0A0A.toInt() + const val OLED_HANDLE = 0xFF666666.toInt() + + private val darkGrayColors = setOf( + 0xFF202020.toInt(), + 0xFF1C1C1C.toInt(), + 0xFF1C1C1E.toInt(), + 0xFF121212.toInt(), + 0xFF323232.toInt(), + 0xFF383838.toInt(), + 0xFF292929.toInt(), + 0xFF181818.toInt(), + 0xFF343332.toInt(), + 0xFF060606.toInt() + ) + + private val handleColor = 0xFF49494B.toInt() + + fun applyOledTheme(activity: Activity) { + if (isOledModeEnabled()) { + activity.setTheme(R.style.AppTheme_OLED) + } + } + + fun applyOledColors(window: Window, rootView: View?) { + if (!isOledModeEnabled()) return + + window.statusBarColor = OLED_BLACK + window.navigationBarColor = OLED_BLACK + window.decorView.setBackgroundColor(OLED_BLACK) + rootView?.let { applyOledToViewTree(it) } + } + + fun applyOledToViewTree(view: View) { + if (!isOledModeEnabled()) return + + val background = view.background?.mutate() + when (background) { + is ColorDrawable -> { + if (background.color in darkGrayColors) { + view.setBackgroundColor(OLED_BLACK) + } + } + is GradientDrawable -> { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + background.color?.defaultColor?.let { gradientColor -> + when (gradientColor) { + handleColor -> background.setColor(OLED_HANDLE) + in darkGrayColors -> background.setColor(OLED_BLACK) + } + } + } + } + is LayerDrawable -> { + for (i in 0 until background.numberOfLayers) { + val layer = background.getDrawable(i)?.mutate() + if (layer is GradientDrawable && Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + layer.color?.defaultColor?.let { layerColor -> + when (layerColor) { + handleColor -> layer.setColor(OLED_HANDLE) + in darkGrayColors -> layer.setColor(OLED_BLACK) + } + } + } + } + } + } + + if (view is CardView) { + val cardColor = view.cardBackgroundColor.defaultColor + if (cardColor in darkGrayColors) { + view.setCardBackgroundColor(OLED_CARD) + } + } + + if (view is FloatingActionButton) { + val fabColor = view.backgroundTintList?.defaultColor ?: 0 + if (fabColor in darkGrayColors) { + view.backgroundTintList = ColorStateList.valueOf(OLED_CARD) + } + } + + if (view is Toolbar) { + view.setBackgroundColor(OLED_BLACK) + } + + if (view is AppBarLayout) { + view.setBackgroundColor(OLED_BLACK) + } + + if (view is TabLayout) { + view.setBackgroundColor(OLED_BLACK) + } + + view.backgroundTintList?.let { tintList -> + val tintColor = tintList.defaultColor + if (tintColor in darkGrayColors) { + view.backgroundTintList = ColorStateList.valueOf(OLED_CARD) + } + } + + if (view is ViewGroup) { + for (i in 0 until view.childCount) { + applyOledToViewTree(view.getChildAt(i)) + } + } + } + + fun getBackgroundColor(): Int { + return if (isOledModeEnabled()) OLED_BLACK else 0 + } + + fun getCardColor(): Int { + return if (isOledModeEnabled()) OLED_CARD else 0 + } + + fun isOledModeEnabled(): Boolean { + return try { + val settings = IVPNApplication.appComponent.provideSettings() + settings?.nightMode?.isOledBlack == true + } catch (e: Exception) { + false + } + } +} + diff --git a/core/src/main/java/net/ivpn/core/common/prefs/EncryptedSettingsPreference.kt b/core/src/main/java/net/ivpn/core/common/prefs/EncryptedSettingsPreference.kt index 6ff545711..6c7c982d8 100644 --- a/core/src/main/java/net/ivpn/core/common/prefs/EncryptedSettingsPreference.kt +++ b/core/src/main/java/net/ivpn/core/common/prefs/EncryptedSettingsPreference.kt @@ -79,6 +79,7 @@ class EncryptedSettingsPreference @Inject constructor(val preference: Preference private const val LAST_USED_IP = "LAST_USED_IP" private const val ANTITRACKER_LIST = "ANTITRACKER_LIST" private const val ANTITRACKER_DNS = "ANTITRACKER_DNS" + private const val WIREGUARD_MTU = "WIREGUARD_MTU" } private val sharedPreferences: SharedPreferences = preference.settingsPreference @@ -517,6 +518,15 @@ class EncryptedSettingsPreference @Inject constructor(val preference: Preference return sharedPreferences.getString(ANTITRACKER_DNS, "") } + var wireGuardMtu: Int + get() { + return sharedPreferences.getInt(WIREGUARD_MTU, 0) + } + set(value) { + sharedPreferences.edit { + putInt(WIREGUARD_MTU, value) + } + } private fun putIsMigrated(isMigrated: Boolean) { sharedPreferences.edit { diff --git a/core/src/main/java/net/ivpn/core/common/prefs/Settings.kt b/core/src/main/java/net/ivpn/core/common/prefs/Settings.kt index c60d27244..4b4997126 100644 --- a/core/src/main/java/net/ivpn/core/common/prefs/Settings.kt +++ b/core/src/main/java/net/ivpn/core/common/prefs/Settings.kt @@ -366,6 +366,12 @@ class Settings @Inject constructor( settingsPreference.putRegenerationPeriod(value) } + var wireGuardMtu: Int + get() = settingsPreference.wireGuardMtu + set(value) { + settingsPreference.wireGuardMtu = value + } + fun generateWireGuardKeys(): Keypair { return Keypair() } diff --git a/core/src/main/java/net/ivpn/core/common/shortcuts/ConnectionShortcutsActivity.java b/core/src/main/java/net/ivpn/core/common/shortcuts/ConnectionShortcutsActivity.java index 16505ec5e..c3d255045 100644 --- a/core/src/main/java/net/ivpn/core/common/shortcuts/ConnectionShortcutsActivity.java +++ b/core/src/main/java/net/ivpn/core/common/shortcuts/ConnectionShortcutsActivity.java @@ -33,6 +33,7 @@ import androidx.appcompat.app.AppCompatActivity; import net.ivpn.core.IVPNApplication; +import net.ivpn.core.common.nightmode.OledModeController; import net.ivpn.core.v2.dialog.DialogBuilder; import net.ivpn.core.v2.dialog.Dialogs; @@ -54,6 +55,7 @@ public class ConnectionShortcutsActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { + OledModeController.INSTANCE.applyOledTheme(this); LOGGER.info("ConnectionShortcutsActivity onCreate"); IVPNApplication.appComponent.provideActivityComponent().create().inject(this); super.onCreate(savedInstanceState); diff --git a/core/src/main/java/net/ivpn/core/ui/theme/Color.kt b/core/src/main/java/net/ivpn/core/ui/theme/Color.kt index 76300728b..97d474394 100644 --- a/core/src/main/java/net/ivpn/core/ui/theme/Color.kt +++ b/core/src/main/java/net/ivpn/core/ui/theme/Color.kt @@ -5,6 +5,9 @@ import androidx.compose.runtime.staticCompositionLocalOf import androidx.compose.ui.graphics.Color val colorPrimary = Color(0xFF398FE6) +val oledBackground = Color(0xFF000000) +val oledSurface = Color(0xFF000000) +val oledCard = Color(0xFF0A0A0A) @Immutable data class CustomColors( @@ -12,7 +15,9 @@ data class CustomColors( val textFieldBackground: Color = Color.Unspecified, val textFieldText: Color = Color.Unspecified, val textFieldPlaceholder: Color = Color.Unspecified, - val secondaryLabel: Color = Color.Unspecified + val secondaryLabel: Color = Color.Unspecified, + val background: Color = Color.Unspecified, + val surface: Color = Color.Unspecified ) val LocalColors = staticCompositionLocalOf { @@ -24,7 +29,9 @@ val CustomLightColorPalette = CustomColors( textFieldBackground = Color(0x54D3DFE6), textFieldText = Color(0xFF2A394B), textFieldPlaceholder = Color(0x802A394B), - secondaryLabel = Color(0x80000000) + secondaryLabel = Color(0x80000000), + background = Color(0xFFF5F9FC), + surface = Color(0xFFFFFFFF) ) val CustomDarkColorPalette = CustomColors( @@ -32,5 +39,17 @@ val CustomDarkColorPalette = CustomColors( textFieldBackground = Color(0xFF1C1C1E), textFieldText = Color(0xFFFFFFFF), textFieldPlaceholder = Color(0x80FFFFFF), - secondaryLabel = Color(0x80FFFFFF) + secondaryLabel = Color(0x80FFFFFF), + background = Color(0xFF121212), + surface = Color(0xFF202020) +) + +val CustomOledColorPalette = CustomColors( + textFieldLabel = Color(0xFFFFFFFF), + textFieldBackground = Color(0xFF0A0A0A), + textFieldText = Color(0xFFFFFFFF), + textFieldPlaceholder = Color(0x80FFFFFF), + secondaryLabel = Color(0x80FFFFFF), + background = oledBackground, + surface = oledSurface ) diff --git a/core/src/main/java/net/ivpn/core/ui/theme/Theme.kt b/core/src/main/java/net/ivpn/core/ui/theme/Theme.kt index 252da2fc5..55b70a1d1 100644 --- a/core/src/main/java/net/ivpn/core/ui/theme/Theme.kt +++ b/core/src/main/java/net/ivpn/core/ui/theme/Theme.kt @@ -6,26 +6,42 @@ import androidx.compose.material.darkColors import androidx.compose.material.lightColors import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider +import net.ivpn.core.common.nightmode.OledModeController private val DarkColorPalette = darkColors( primary = colorPrimary, secondary = colorPrimary ) +private val OledColorPalette = darkColors( + primary = colorPrimary, + secondary = colorPrimary, + background = oledBackground, + surface = oledSurface +) + private val LightColorPalette = lightColors( primary = colorPrimary, secondary = colorPrimary ) @Composable -fun AppTheme(darkTheme: Boolean = isSystemInDarkTheme(), content: @Composable() () -> Unit) { - val colors = - if (darkTheme) DarkColorPalette - else LightColorPalette +fun AppTheme( + darkTheme: Boolean = isSystemInDarkTheme(), + oledTheme: Boolean = OledModeController.isOledModeEnabled(), + content: @Composable() () -> Unit +) { + val colors = when { + oledTheme -> OledColorPalette + darkTheme -> DarkColorPalette + else -> LightColorPalette + } - val customColors = - if (darkTheme) CustomDarkColorPalette - else CustomLightColorPalette + val customColors = when { + oledTheme -> CustomOledColorPalette + darkTheme -> CustomDarkColorPalette + else -> CustomLightColorPalette + } CompositionLocalProvider( LocalColors provides customColors diff --git a/core/src/main/java/net/ivpn/core/v2/MainActivity.kt b/core/src/main/java/net/ivpn/core/v2/MainActivity.kt index ebe021966..ceb757aef 100644 --- a/core/src/main/java/net/ivpn/core/v2/MainActivity.kt +++ b/core/src/main/java/net/ivpn/core/v2/MainActivity.kt @@ -34,12 +34,15 @@ import androidx.navigation.findNavController import net.ivpn.core.IVPNApplication import net.ivpn.core.R import net.ivpn.core.common.extension.setContentSecure +import net.ivpn.core.common.nightmode.OledModeController class MainActivity : AppCompatActivity(), NavController.OnDestinationChangedListener { override fun onCreate(savedInstanceState: Bundle?) { + OledModeController.applyOledTheme(this) super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) + OledModeController.applyOledColors(window, findViewById(android.R.id.content)) } override fun onPostCreate(savedInstanceState: Bundle?) { @@ -57,6 +60,11 @@ class MainActivity : AppCompatActivity(), NavController.OnDestinationChangedList override fun onDestinationChanged(controller: NavController, destination: NavDestination, arguments: Bundle?) { currentFocus?.hideKeyboard() + findViewById(R.id.nav_host_fragment)?.post { + findViewById(R.id.nav_host_fragment)?.let { + OledModeController.applyOledToViewTree(it) + } + } } private fun View.hideKeyboard() { diff --git a/core/src/main/java/net/ivpn/core/v2/account/LogOutFragment.kt b/core/src/main/java/net/ivpn/core/v2/account/LogOutFragment.kt index efe013014..760f21a3f 100644 --- a/core/src/main/java/net/ivpn/core/v2/account/LogOutFragment.kt +++ b/core/src/main/java/net/ivpn/core/v2/account/LogOutFragment.kt @@ -33,6 +33,7 @@ import androidx.navigation.fragment.NavHostFragment import com.google.android.material.bottomsheet.BottomSheetDialogFragment import net.ivpn.core.IVPNApplication import net.ivpn.core.R +import net.ivpn.core.common.nightmode.OledModeController import net.ivpn.core.databinding.FragmentLogoutBottomSheetBinding import net.ivpn.core.v2.viewmodel.AccountViewModel import javax.inject.Inject @@ -44,6 +45,14 @@ class LogOutFragment : BottomSheetDialogFragment() { @Inject lateinit var account: AccountViewModel + override fun getTheme(): Int { + return if (OledModeController.isOledModeEnabled()) { + R.style.AppTheme_BottomSheet_OLED + } else { + super.getTheme() + } + } + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -58,6 +67,9 @@ class LogOutFragment : BottomSheetDialogFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) IVPNApplication.appComponent.provideActivityComponent().create().inject(this) + if (OledModeController.isOledModeEnabled()) { + binding.bottomSheet.setBackgroundColor(requireContext().getColor(R.color.oled_background)) + } init() } diff --git a/core/src/main/java/net/ivpn/core/v2/connect/ConnectFragment.kt b/core/src/main/java/net/ivpn/core/v2/connect/ConnectFragment.kt index d717d44c9..90781a826 100644 --- a/core/src/main/java/net/ivpn/core/v2/connect/ConnectFragment.kt +++ b/core/src/main/java/net/ivpn/core/v2/connect/ConnectFragment.kt @@ -71,6 +71,7 @@ import net.ivpn.core.v2.map.model.Location import net.ivpn.core.v2.network.NetworkViewModel import net.ivpn.core.v2.signup.SignUpController import net.ivpn.core.v2.viewmodel.* +import net.ivpn.core.common.nightmode.OledModeController import net.ivpn.core.vpn.ServiceConstants import org.slf4j.LoggerFactory import javax.inject.Inject @@ -143,6 +144,7 @@ class ConnectFragment : Fragment(), MultiHopViewModel.MultiHopNavigator, LOGGER.info("On view created") IVPNApplication.appComponent.provideActivityComponent().create().inject(this) initViews() + view.post { OledModeController.applyOledToViewTree(view) } // Support variable bottom navigation height (Gesture, 2-Button, 3-Button) for Android 35+ ViewCompat.setOnApplyWindowInsetsListener(view) { _, insets -> @@ -176,6 +178,7 @@ class ConnectFragment : Fragment(), MultiHopViewModel.MultiHopNavigator, account.updateSessionStatus() checkLocationPermission() applySlidingPanelSide() + view?.let { OledModeController.applyOledToViewTree(it) } } override fun onStart() { diff --git a/core/src/main/java/net/ivpn/core/v2/connect/createSession/CreateSessionFragment.java b/core/src/main/java/net/ivpn/core/v2/connect/createSession/CreateSessionFragment.java index d1b452a78..7a54b5b82 100644 --- a/core/src/main/java/net/ivpn/core/v2/connect/createSession/CreateSessionFragment.java +++ b/core/src/main/java/net/ivpn/core/v2/connect/createSession/CreateSessionFragment.java @@ -38,6 +38,7 @@ import com.google.android.material.bottomsheet.BottomSheetDialogFragment; import net.ivpn.core.R; +import net.ivpn.core.common.nightmode.OledModeController; import net.ivpn.core.databinding.BottomSheetBinding; import net.ivpn.core.databinding.BottomSheetDmProBinding; import net.ivpn.core.databinding.BottomSheetLegacyStandardBinding; @@ -60,6 +61,14 @@ public CreateSessionFragment(SessionErrorResponse error) { this.error = error; } + @Override + public int getTheme() { + if (OledModeController.INSTANCE.isOledModeEnabled()) { + return R.style.AppTheme_BottomSheet_OLED; + } + return super.getTheme(); + } + @Override public void onAttach(@NonNull Context context) { super.onAttach(context); @@ -112,6 +121,9 @@ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup c @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); + if (OledModeController.INSTANCE.isOledModeEnabled()) { + view.setBackgroundColor(requireContext().getColor(R.color.oled_background)); + } init(); } diff --git a/core/src/main/java/net/ivpn/core/v2/dialog/DialogBuilder.kt b/core/src/main/java/net/ivpn/core/v2/dialog/DialogBuilder.kt index 656315f0a..15c4f3c10 100644 --- a/core/src/main/java/net/ivpn/core/v2/dialog/DialogBuilder.kt +++ b/core/src/main/java/net/ivpn/core/v2/dialog/DialogBuilder.kt @@ -47,17 +47,27 @@ import net.ivpn.core.common.InputFilterMinMax import net.ivpn.core.common.extension.setContentSecure import net.ivpn.core.common.utils.DateUtil import net.ivpn.core.databinding.DialogCustomDnsBinding +import net.ivpn.core.databinding.DialogMtuBinding import net.ivpn.core.v2.customdns.OnDNSChangedListener import net.ivpn.core.v2.protocol.dialog.WireGuardDetailsDialogListener import net.ivpn.core.v2.protocol.dialog.WireGuardInfo import net.ivpn.core.v2.timepicker.OnDelayOptionSelected import net.ivpn.core.v2.timepicker.PauseDelay +import net.ivpn.core.common.nightmode.OledModeController import org.slf4j.LoggerFactory import java.util.* object DialogBuilder { private val LOGGER = LoggerFactory.getLogger(DialogBuilder::class.java) + private fun getDialogStyle(): Int { + return if (OledModeController.isOledModeEnabled()) { + R.style.AppTheme_AlertDialog_OLED + } else { + R.style.AlertDialog + } + } + @JvmStatic fun createOptionDialog( context: Context?, dialogAttr: Dialogs, @@ -67,7 +77,7 @@ object DialogBuilder { if (context == null) { return } - val builder = MaterialAlertDialogBuilder(context, R.style.AlertDialog) + val builder = MaterialAlertDialogBuilder(context, getDialogStyle()) builder.setTitle(context.getString(dialogAttr.titleId)) builder.setMessage(context.getString(dialogAttr.messageId)) if (dialogAttr.positiveBtnId != -1) { @@ -94,7 +104,7 @@ object DialogBuilder { if (context == null || dialogAttr == null) { return } - val builder = MaterialAlertDialogBuilder(context, R.style.AlertDialog) + val builder = MaterialAlertDialogBuilder(context, getDialogStyle()) builder.setTitle(context.getString(dialogAttr.titleId)) builder.setMessage(context.getString(dialogAttr.messageId)) builder.setNegativeButton(context.getString(dialogAttr.negativeBtnId), null) @@ -116,7 +126,7 @@ object DialogBuilder { if (context == null) { return } - val builder = MaterialAlertDialogBuilder(context, R.style.AlertDialog) + val builder = MaterialAlertDialogBuilder(context, getDialogStyle()) builder.setTitle(title) builder.setMessage(msg) builder.setNegativeButton(context.getString(R.string.dialogs_ok), null) @@ -141,7 +151,7 @@ object DialogBuilder { if (context == null) { return } - val builder = AlertDialog.Builder(context, R.style.AlertDialog) + val builder = AlertDialog.Builder(context, getDialogStyle()) builder.setTitle(title) builder.setMessage(msg) builder.setOnCancelListener(cancelListener) @@ -173,7 +183,7 @@ object DialogBuilder { if (context == null) { return null } - val builder = AlertDialog.Builder(context, R.style.AlertDialog) + val builder = AlertDialog.Builder(context, getDialogStyle()) builder.setTitle(context.getString(dialogAttr.titleId)) builder.setMessage(context.getString(dialogAttr.messageId)) @@ -215,7 +225,7 @@ object DialogBuilder { if (context == null) { return } - val builder = AlertDialog.Builder(context, R.style.AlertDialog) + val builder = AlertDialog.Builder(context, getDialogStyle()) val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater val dialogView = inflater.inflate(R.layout.dialog_predefined_time_picker, null) val delayMap: MutableMap = HashMap() @@ -258,7 +268,7 @@ object DialogBuilder { if (context == null) { return } - val builder = AlertDialog.Builder(context, R.style.AlertDialog) + val builder = AlertDialog.Builder(context, getDialogStyle()) val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater val dialogView = inflater.inflate(R.layout.dialog_custom_time_picker, null) val pauseTime = LongArray(1) @@ -299,9 +309,12 @@ object DialogBuilder { if (context == null) { return } - val builder = AlertDialog.Builder(context, R.style.AlertDialog) + val builder = AlertDialog.Builder(context, getDialogStyle()) val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater val dialogView = inflater.inflate(R.layout.dialog_wireguard_details, null) + if (OledModeController.isOledModeEnabled()) { + dialogView.setBackgroundColor(context.getColor(R.color.oled_background)) + } builder.setView(dialogView) val alertDialog = builder.create() (dialogView.findViewById(R.id.wg_public_key) as TextView).text = info.publicKey @@ -339,7 +352,7 @@ object DialogBuilder { if (context == null) { return } - val builder = AlertDialog.Builder(context, R.style.AlertDialog) + val builder = AlertDialog.Builder(context, getDialogStyle()) val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater val viewModel = IVPNApplication.appComponent.provideActivityComponent().create().dialogueViewModel @@ -350,6 +363,9 @@ object DialogBuilder { ) binding.viewmodel = viewModel val dialogView = binding.root + if (OledModeController.isOledModeEnabled()) { + dialogView.setBackgroundColor(context.getColor(R.color.oled_background)) + } builder.setView(dialogView) val alertDialog = builder.create() binding.firstValue.filters = arrayOf(InputFilterMinMax(0, 255)) @@ -379,4 +395,76 @@ object DialogBuilder { exception.printStackTrace() } } + + @JvmStatic + fun createMtuDialog( + context: Context?, + currentMtu: String, + onMtuSaved: (String) -> Unit, + onMtuError: () -> Unit + ) { + LOGGER.info("Create MTU dialog") + if (context == null) { + return + } + val builder = AlertDialog.Builder(context, getDialogStyle()) + val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater + val binding: DialogMtuBinding = DataBindingUtil.inflate( + inflater, + R.layout.dialog_mtu, null, false + ) + binding.mtuValue = currentMtu + val dialogView = binding.root + if (OledModeController.isOledModeEnabled()) { + dialogView.setBackgroundColor(context.getColor(R.color.oled_background)) + binding.mtuInput.setHintTextColor(context.getColor(R.color.oled_hint_text)) + } + builder.setView(dialogView) + val alertDialog = builder.create() + + binding.mtuInput.setOnEditorActionListener { _, actionId, _ -> + if (actionId == EditorInfo.IME_ACTION_DONE) { + val mtuString = binding.mtuInput.text?.toString() ?: "" + if (isValidMtu(mtuString)) { + onMtuSaved(mtuString) + alertDialog.dismiss() + } else { + onMtuError() + } + } + false + } + + dialogView.findViewById(R.id.apply_action).setOnClickListener { + val mtuString = binding.mtuInput.text?.toString() ?: "" + if (isValidMtu(mtuString)) { + onMtuSaved(mtuString) + alertDialog.dismiss() + } else { + onMtuError() + } + } + dialogView.findViewById(R.id.cancel_action).setOnClickListener { alertDialog.dismiss() } + + if ((context as Activity).isFinishing) { + return + } + try { + alertDialog.show() + } catch (exception: Exception) { + exception.printStackTrace() + } + } + + private fun isValidMtu(mtuString: String): Boolean { + if (mtuString.isEmpty()) { + return true // Empty means use default + } + return try { + val mtu = mtuString.toInt() + mtu == 0 || (mtu in 576..65535) + } catch (e: NumberFormatException) { + false + } + } } \ No newline at end of file diff --git a/core/src/main/java/net/ivpn/core/v2/dialog/DialogBuilderK.kt b/core/src/main/java/net/ivpn/core/v2/dialog/DialogBuilderK.kt index ec6bbb6e7..9b29dda56 100644 --- a/core/src/main/java/net/ivpn/core/v2/dialog/DialogBuilderK.kt +++ b/core/src/main/java/net/ivpn/core/v2/dialog/DialogBuilderK.kt @@ -36,12 +36,21 @@ import net.ivpn.core.databinding.DialogueNightModeBinding import net.ivpn.core.v2.network.dialog.NetworkChangeDialogViewModel import net.ivpn.core.v2.viewmodel.ColorThemeViewModel import net.ivpn.core.v2.viewmodel.ServerListFilterViewModel +import net.ivpn.core.common.nightmode.OledModeController object DialogBuilderK { + private fun getDialogStyle(): Int { + return if (OledModeController.isOledModeEnabled()) { + R.style.AppTheme_AlertDialog_OLED + } else { + R.style.AppTheme_AlertDialog + } + } + fun openDarkModeDialogue(context: Context, listener: OnNightModeChangedListener, colorThemeViewModel: ColorThemeViewModel) { val builder: AlertDialog.Builder = - AlertDialog.Builder(context, R.style.AppTheme_AlertDialog) + AlertDialog.Builder(context, getDialogStyle()) val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater @@ -75,7 +84,7 @@ object DialogBuilderK { listener: ServerListFilterViewModel.OnFilterChangedListener, filterViewModel: ServerListFilterViewModel) { val builder: AlertDialog.Builder = - AlertDialog.Builder(context, R.style.AppTheme_AlertDialog) + AlertDialog.Builder(context, getDialogStyle()) val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater @@ -104,7 +113,7 @@ object DialogBuilderK { fun openChangeNetworkStatusDialogue(context: Context, dialogViewModel: NetworkChangeDialogViewModel) { val builder: AlertDialog.Builder = - AlertDialog.Builder(context, R.style.AppTheme_AlertDialog) + AlertDialog.Builder(context, getDialogStyle()) val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater @@ -133,7 +142,7 @@ object DialogBuilderK { fun openChangeDefaultNetworkStatusDialogue(context: Context, dialogViewModel: NetworkChangeDialogViewModel) { val builder: AlertDialog.Builder = - AlertDialog.Builder(context, R.style.AppTheme_AlertDialog) + AlertDialog.Builder(context, getDialogStyle()) val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater diff --git a/core/src/main/java/net/ivpn/core/v2/protocol/ProtocolFragment.kt b/core/src/main/java/net/ivpn/core/v2/protocol/ProtocolFragment.kt index 573f6bf21..9a2e8dca4 100644 --- a/core/src/main/java/net/ivpn/core/v2/protocol/ProtocolFragment.kt +++ b/core/src/main/java/net/ivpn/core/v2/protocol/ProtocolFragment.kt @@ -107,6 +107,9 @@ class ProtocolFragment : Fragment(), ProtocolNavigator { binding.contentLayout.wgProtocolSettings.wireguardDetails.setOnClickListener { openWireGuardDetails() } + binding.contentLayout.wgProtocolSettings.wireguardMtu.setOnClickListener { + openMtuDialog() + } binding.contentLayout.protocolSelection.comparisonText.movementMethod = LinkMovementMethod.getInstance() } @@ -127,6 +130,23 @@ class ProtocolFragment : Fragment(), ProtocolNavigator { navigate(action) } + private fun openMtuDialog() { + DialogBuilder.createMtuDialog( + context, + viewModel.getMtuDisplayValue(), + onMtuSaved = { mtuString -> + viewModel.saveMtu(mtuString) + }, + onMtuError = { + DialogBuilder.createFullCustomNotificationDialog( + context, + getString(R.string.dialogs_error), + getString(R.string.protocol_wg_mtu_error) + ) + } + ) + } + override fun notifyUser(msgId: Int, actionId: Int, listener: View.OnClickListener?) { SnackbarUtil.show(binding.coordinator, msgId, actionId, listener) } diff --git a/core/src/main/java/net/ivpn/core/v2/serverlist/ServerListTabFragment.kt b/core/src/main/java/net/ivpn/core/v2/serverlist/ServerListTabFragment.kt index 5e4fe0cca..e264bc301 100644 --- a/core/src/main/java/net/ivpn/core/v2/serverlist/ServerListTabFragment.kt +++ b/core/src/main/java/net/ivpn/core/v2/serverlist/ServerListTabFragment.kt @@ -41,6 +41,7 @@ import net.ivpn.core.rest.data.model.ServerType import net.ivpn.core.databinding.FragmentTabsServerListBinding import net.ivpn.core.v2.viewmodel.ServersListCommonViewModel import net.ivpn.core.v2.MainActivity +import net.ivpn.core.common.nightmode.OledModeController import net.ivpn.core.v2.dialog.DialogBuilderK import net.ivpn.core.v2.serverlist.dialog.Filters import net.ivpn.core.v2.viewmodel.ServerListFilterViewModel @@ -79,6 +80,7 @@ class ServerListTabFragment : Fragment(), ServerListFilterViewModel.OnFilterChan IVPNApplication.appComponent.provideActivityComponent().create().inject(this) initViews() initToolbar() + view.post { OledModeController.applyOledToViewTree(view) } // Support variable bottom navigation height (Gesture, 2-Button, 3-Button) for Android 35+ ViewCompat.setOnApplyWindowInsetsListener(view) { _, insets -> @@ -97,6 +99,7 @@ class ServerListTabFragment : Fragment(), ServerListFilterViewModel.OnFilterChan super.onResume() LOGGER.info("onResume") filterViewModel.onResume() + view?.let { OledModeController.applyOledToViewTree(it) } } override fun onStart() { diff --git a/core/src/main/java/net/ivpn/core/v2/serverlist/all/AllServersRecyclerViewAdapter.kt b/core/src/main/java/net/ivpn/core/v2/serverlist/all/AllServersRecyclerViewAdapter.kt index 277ef6d8a..290a9372a 100644 --- a/core/src/main/java/net/ivpn/core/v2/serverlist/all/AllServersRecyclerViewAdapter.kt +++ b/core/src/main/java/net/ivpn/core/v2/serverlist/all/AllServersRecyclerViewAdapter.kt @@ -48,6 +48,7 @@ import net.ivpn.core.v2.serverlist.items.ConnectionOption import net.ivpn.core.v2.serverlist.items.FastestServerItem import net.ivpn.core.v2.serverlist.items.RandomServerItem import net.ivpn.core.v2.serverlist.items.SearchServerItem +import net.ivpn.core.common.nightmode.OledModeController import org.slf4j.LoggerFactory import java.util.* import javax.inject.Inject @@ -154,6 +155,8 @@ class AllServersRecyclerViewAdapter( } else if (holder is SearchViewHolder) { searchBinding = holder.binding } + // Apply OLED colors to recycled/new items + OledModeController.applyOledToViewTree(holder.itemView) } private fun setPing(binding: ServerItemBinding, server: Server) { diff --git a/core/src/main/java/net/ivpn/core/v2/serverlist/all/ServerListFragment.kt b/core/src/main/java/net/ivpn/core/v2/serverlist/all/ServerListFragment.kt index f963d4874..681f681e3 100644 --- a/core/src/main/java/net/ivpn/core/v2/serverlist/all/ServerListFragment.kt +++ b/core/src/main/java/net/ivpn/core/v2/serverlist/all/ServerListFragment.kt @@ -48,6 +48,7 @@ import net.ivpn.core.v2.viewmodel.ConnectionViewModel import net.ivpn.core.v2.viewmodel.IPv6ViewModel import net.ivpn.core.v2.viewmodel.ServerListFilterViewModel import net.ivpn.core.v2.viewmodel.ServerListViewModel +import net.ivpn.core.common.nightmode.OledModeController import org.slf4j.LoggerFactory import javax.inject.Inject @@ -99,6 +100,7 @@ class ServerListFragment : Fragment(), init() viewmodel.start(serverType) binding.lifecycleOwner = this + view.post { OledModeController.applyOledToViewTree(view) } val pingObserver = Observer> { map -> (binding.recyclerView.adapter as ServerBasedRecyclerViewAdapter).setPings(map) @@ -110,6 +112,7 @@ class ServerListFragment : Fragment(), override fun onResume() { super.onResume() viewmodel.navigators.add(this) + view?.let { OledModeController.applyOledToViewTree(it) } } override fun onPause() { diff --git a/core/src/main/java/net/ivpn/core/v2/serverlist/favourite/FavouriteServerListRecyclerViewAdapter.kt b/core/src/main/java/net/ivpn/core/v2/serverlist/favourite/FavouriteServerListRecyclerViewAdapter.kt index 66a293029..9fa801c29 100644 --- a/core/src/main/java/net/ivpn/core/v2/serverlist/favourite/FavouriteServerListRecyclerViewAdapter.kt +++ b/core/src/main/java/net/ivpn/core/v2/serverlist/favourite/FavouriteServerListRecyclerViewAdapter.kt @@ -44,6 +44,7 @@ import net.ivpn.core.v2.serverlist.dialog.Filters import net.ivpn.core.v2.serverlist.holders.HolderListener import net.ivpn.core.v2.serverlist.holders.ServerViewHolder import net.ivpn.core.v2.serverlist.items.ConnectionOption +import net.ivpn.core.common.nightmode.OledModeController import java.util.* import java.util.concurrent.ConcurrentHashMap import javax.inject.Inject @@ -108,6 +109,8 @@ class FavouriteServerListRecyclerViewAdapter( setPing(holder.binding, server) holder.bind(server, forbiddenServer, isIPv6BadgeEnabled, filter) } + // Apply OLED colors to recycled/new items + OledModeController.applyOledToViewTree(holder.itemView) } private fun setPing(binding: ServerItemBinding, server: Server) { diff --git a/core/src/main/java/net/ivpn/core/v2/serverlist/favourite/FavouriteServersListFragment.kt b/core/src/main/java/net/ivpn/core/v2/serverlist/favourite/FavouriteServersListFragment.kt index eb1c3bd67..ba2745f4d 100644 --- a/core/src/main/java/net/ivpn/core/v2/serverlist/favourite/FavouriteServersListFragment.kt +++ b/core/src/main/java/net/ivpn/core/v2/serverlist/favourite/FavouriteServersListFragment.kt @@ -48,6 +48,7 @@ import net.ivpn.core.v2.viewmodel.ConnectionViewModel import net.ivpn.core.v2.viewmodel.IPv6ViewModel import net.ivpn.core.v2.viewmodel.ServerListFilterViewModel import net.ivpn.core.v2.viewmodel.ServerListViewModel +import net.ivpn.core.common.nightmode.OledModeController import org.slf4j.LoggerFactory import javax.inject.Inject @@ -106,6 +107,7 @@ class FavouriteServersListFragment : Fragment(), ServerListViewModel.ServerListN init(view) viewmodel.start(serverType) binding.lifecycleOwner = this + view.post { OledModeController.applyOledToViewTree(view) } val pingObserver = Observer> { map -> (binding.recyclerView.adapter as ServerBasedRecyclerViewAdapter).setPings(map) @@ -117,6 +119,7 @@ class FavouriteServersListFragment : Fragment(), ServerListViewModel.ServerListN override fun onResume() { super.onResume() viewmodel.navigators.add(this) + view?.let { OledModeController.applyOledToViewTree(it) } } override fun onPause() { diff --git a/core/src/main/java/net/ivpn/core/v2/settings/SettingsFragment.kt b/core/src/main/java/net/ivpn/core/v2/settings/SettingsFragment.kt index 7cef8e1c9..c5850421f 100644 --- a/core/src/main/java/net/ivpn/core/v2/settings/SettingsFragment.kt +++ b/core/src/main/java/net/ivpn/core/v2/settings/SettingsFragment.kt @@ -44,6 +44,7 @@ import net.ivpn.core.common.billing.addfunds.Plan import net.ivpn.core.common.extension.findNavControllerSafely import net.ivpn.core.common.extension.navigate import net.ivpn.core.common.nightmode.NightMode +import net.ivpn.core.common.nightmode.OledModeController import net.ivpn.core.common.nightmode.OnNightModeChangedListener import net.ivpn.core.rest.data.model.ServerType import net.ivpn.core.common.utils.ToastUtil @@ -118,6 +119,7 @@ class SettingsFragment : Fragment(), OnNightModeChangedListener, ColorThemeViewM super.onViewCreated(view, savedInstanceState) IVPNApplication.appComponent.provideActivityComponent().create().inject(this) initViews() + view.post { OledModeController.applyOledToViewTree(view) } } override fun onResume() { @@ -129,6 +131,7 @@ class SettingsFragment : Fragment(), OnNightModeChangedListener, ColorThemeViewM alwaysOnVPN.onResume() logging.onResume() colorTheme.onResume() + view?.let { OledModeController.applyOledToViewTree(it) } } override fun onStart() { @@ -526,7 +529,7 @@ class SettingsFragment : Fragment(), OnNightModeChangedListener, ColorThemeViewM return } AppCompatDelegate.setDefaultNightMode(mode.systemId) - println("$mode was selected") + activity?.recreate() } override fun onNightModeCancelClicked() { diff --git a/core/src/main/java/net/ivpn/core/v2/splittunneling/SplitTunnelingFragment.kt b/core/src/main/java/net/ivpn/core/v2/splittunneling/SplitTunnelingFragment.kt index eeb85116b..0a62a7b2b 100644 --- a/core/src/main/java/net/ivpn/core/v2/splittunneling/SplitTunnelingFragment.kt +++ b/core/src/main/java/net/ivpn/core/v2/splittunneling/SplitTunnelingFragment.kt @@ -37,6 +37,7 @@ import net.ivpn.core.R import net.ivpn.core.databinding.FragmentSplitTunnelingBinding import net.ivpn.core.v2.viewmodel.SplitTunnelingViewModel import net.ivpn.core.v2.MainActivity +import net.ivpn.core.common.nightmode.OledModeController import javax.inject.Inject class SplitTunnelingFragment : Fragment() { @@ -64,6 +65,12 @@ class SplitTunnelingFragment : Fragment() { super.onViewCreated(view, savedInstanceState) initToolbar() init() + view.post { OledModeController.applyOledToViewTree(view) } + } + + override fun onResume() { + super.onResume() + view?.let { OledModeController.applyOledToViewTree(it) } } override fun onStart() { diff --git a/core/src/main/java/net/ivpn/core/v2/splittunneling/SplitTunnelingRecyclerViewAdapter.kt b/core/src/main/java/net/ivpn/core/v2/splittunneling/SplitTunnelingRecyclerViewAdapter.kt index f5319091a..6f4f9d688 100644 --- a/core/src/main/java/net/ivpn/core/v2/splittunneling/SplitTunnelingRecyclerViewAdapter.kt +++ b/core/src/main/java/net/ivpn/core/v2/splittunneling/SplitTunnelingRecyclerViewAdapter.kt @@ -35,6 +35,7 @@ import net.ivpn.core.v2.splittunneling.holder.AppsSearchViewHolder import net.ivpn.core.v2.splittunneling.items.ApplicationItem import net.ivpn.core.v2.splittunneling.items.SearchItem import net.ivpn.core.v2.splittunneling.items.SplitTunnelingItem +import net.ivpn.core.common.nightmode.OledModeController import java.util.* import javax.inject.Inject @@ -87,6 +88,8 @@ class SplitTunnelingRecyclerViewAdapter @Inject internal constructor() } else if (holder is AppsSearchViewHolder) { searchBinding = holder.binding } + + OledModeController.applyOledToViewTree(holder.itemView) } override fun getItemCount(): Int { diff --git a/core/src/main/java/net/ivpn/core/v2/timepicker/TimePickerActivity.java b/core/src/main/java/net/ivpn/core/v2/timepicker/TimePickerActivity.java index e3cf67aa4..0388de98c 100644 --- a/core/src/main/java/net/ivpn/core/v2/timepicker/TimePickerActivity.java +++ b/core/src/main/java/net/ivpn/core/v2/timepicker/TimePickerActivity.java @@ -27,6 +27,7 @@ import androidx.appcompat.app.AppCompatActivity; import net.ivpn.core.IVPNApplication; +import net.ivpn.core.common.nightmode.OledModeController; import net.ivpn.core.v2.dialog.DialogBuilder; import net.ivpn.core.vpn.controller.VpnBehaviorController; @@ -43,6 +44,7 @@ public class TimePickerActivity extends AppCompatActivity implements OnDelayOpti @Override protected void onCreate(@Nullable Bundle savedInstanceState) { + OledModeController.INSTANCE.applyOledTheme(this); IVPNApplication.appComponent.provideActivityComponent().create().inject(this); super.onCreate(savedInstanceState); showPredefinedTimePickerDialog(); diff --git a/core/src/main/java/net/ivpn/core/v2/viewmodel/ProtocolViewModel.java b/core/src/main/java/net/ivpn/core/v2/viewmodel/ProtocolViewModel.java index d9d92c172..eff8aba0b 100644 --- a/core/src/main/java/net/ivpn/core/v2/viewmodel/ProtocolViewModel.java +++ b/core/src/main/java/net/ivpn/core/v2/viewmodel/ProtocolViewModel.java @@ -79,6 +79,10 @@ public class ProtocolViewModel { public ObservableField wgInfo = new ObservableField<>(); public ObservableField obfuscationType = new ObservableField<>(); + public ObservableField wireGuardMtu = new ObservableField<>(); + + private static final int MTU_LOWER_BOUND = 576; + private static final int MTU_UPPER_BOUND = 65535; private ProtocolNavigator navigator; private String wireGuardPublicKey; @@ -186,6 +190,18 @@ private List getAvailablePortsForCurrentObfuscationType() { return false; }; + @SuppressLint("ClickableViewAccessibility") + public View.OnTouchListener mtuTouchListener = (view, motionEvent) -> { + if (isVpnActive()) { + if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) { + navigator.notifyUser(R.string.snackbar_to_change_mtu_disconnect_first, + R.string.snackbar_disconnect_first, null); + } + return true; + } + return false; + }; + @Inject ProtocolViewModel(Context context, Settings settings, WireGuardKeyController keyController, ProtocolController protocolController, VpnBehaviorController vpnBehaviorController, @@ -212,6 +228,9 @@ private void init() { obfuscationType.set(settings.getObfuscationType()); + int mtu = settings.getWireGuardMtu(); + wireGuardMtu.set(mtu > 0 ? String.valueOf(mtu) : ""); + wgInfo.set(getWireGuardInfo()); multiHop.set(multiHopController); } @@ -293,6 +312,38 @@ void setPort(Port port) { } } + public boolean isValidMtu(String mtuString) { + if (mtuString == null || mtuString.isEmpty()) { + // empty is valid that means use default + return true; + } + try { + int mtu = Integer.parseInt(mtuString); + return mtu == 0 || (mtu >= MTU_LOWER_BOUND && mtu <= MTU_UPPER_BOUND); + } catch (NumberFormatException e) { + return false; + } + } + + public void saveMtu(String mtuString) { + LOGGER.info(TAG, "Save MTU: " + mtuString); + int mtu = 0; + if (mtuString != null && !mtuString.isEmpty()) { + try { + mtu = Integer.parseInt(mtuString); + } catch (NumberFormatException e) { + mtu = 0; + } + } + settings.setWireGuardMtu(mtu); + wireGuardMtu.set(mtu > 0 ? String.valueOf(mtu) : ""); + } + + public String getMtuDisplayValue() { + int mtu = settings.getWireGuardMtu(); + return mtu > 0 ? String.valueOf(mtu) : ""; + } + private void onGeneratingError(String error, Throwable throwable) { LOGGER.error(TAG, "On generating error: " + error, throwable); dataLoading.set(false); diff --git a/core/src/main/java/net/ivpn/core/vpn/local/PermissionActivity.java b/core/src/main/java/net/ivpn/core/vpn/local/PermissionActivity.java index 605e4d6a3..bc6e9a78a 100644 --- a/core/src/main/java/net/ivpn/core/vpn/local/PermissionActivity.java +++ b/core/src/main/java/net/ivpn/core/vpn/local/PermissionActivity.java @@ -32,6 +32,7 @@ import android.util.Log; import net.ivpn.core.IVPNApplication; +import net.ivpn.core.common.nightmode.OledModeController; import net.ivpn.core.v2.dialog.DialogBuilder; import net.ivpn.core.v2.dialog.Dialogs; import net.ivpn.core.vpn.controller.VpnBehaviorController; @@ -51,6 +52,7 @@ public class PermissionActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { + OledModeController.INSTANCE.applyOledTheme(this); IVPNApplication.appComponent.provideActivityComponent().create().inject(this); LOGGER.info("onCreate"); super.onCreate(savedInstanceState); diff --git a/core/src/main/java/net/ivpn/core/vpn/wireguard/ConfigManager.kt b/core/src/main/java/net/ivpn/core/vpn/wireguard/ConfigManager.kt index a1f5aad71..7ff470b05 100644 --- a/core/src/main/java/net/ivpn/core/vpn/wireguard/ConfigManager.kt +++ b/core/src/main/java/net/ivpn/core/vpn/wireguard/ConfigManager.kt @@ -244,6 +244,13 @@ class ConfigManager @Inject constructor( val dnsString = getDNS(hosts[0]) config.getInterface().setDnsString(dnsString) + // set only if configured + val mtu = settings.wireGuardMtu + if (mtu > 0) { + config.getInterface().setMtu(mtu) + LOGGER.info("Using custom MTU: $mtu") + } + val endpoint = if (v2rayController.isV2RayEnabled()) { v2rayController.getLocalProxyEndpoint() } else { diff --git a/core/src/main/res/layout/dialog_mtu.xml b/core/src/main/res/layout/dialog_mtu.xml new file mode 100644 index 000000000..a61839faa --- /dev/null +++ b/core/src/main/res/layout/dialog_mtu.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/core/src/main/res/layout/dialogue_night_mode.xml b/core/src/main/res/layout/dialogue_night_mode.xml index 8a315e79b..9e2eadf08 100644 --- a/core/src/main/res/layout/dialogue_night_mode.xml +++ b/core/src/main/res/layout/dialogue_night_mode.xml @@ -63,6 +63,19 @@ app:buttonTint="@color/dialogue_button" tools:ignore="RtlSymmetry" /> + + + + + + + + + + + + + + + + + + + + + #E0E5EA #2AD489 + #000000 + #000000 + #0A0A0A + #80FFFFFF + diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml index afa6acbb1..a27ea94af 100644 --- a/core/src/main/res/values/strings.xml +++ b/core/src/main/res/values/strings.xml @@ -88,6 +88,7 @@ To use split tunneling, please disconnect first To change protocol, please disconnect first To change port please disconnect first + To change MTU please disconnect first To change Multi-hop settings please disconnect first Multi-hop is not available for WireGuard right now Connection to server blocked, reconnecting on a different port. Please wait until connection is established. @@ -111,6 +112,7 @@ Light Dark + AMOLED Black System default By battery @@ -456,6 +458,7 @@ Color Theme Light Dark + AMOLED Black System default Set by Battery Saver. Dark mode is used when the system\'s Battery Saver feature is enabled. Otherwise - Light mode. @@ -535,6 +538,13 @@ Disabled Quantum Resistance: Indicates whether your current WireGuard VPN connection is using additional protection measures against potential future quantum computer attacks.\n\nWhen Enabled, a Pre-shared key has been securely exchanged between your device and the server using post-quantum Key Encapsulation Mechanism (KEM) algorithms. If Disabled, the current VPN connection, while secure under today\'s standards, does not include this extra layer of quantum resistance. + MTU + Configure MTU + Valid range [576 - 65535]. Please note that changing this value may affect the proper functioning of the VPN tunnel. + 576 - 65535 + Leave blank to use default value + Expected value: [576 - 65535] + We recommend the WireGuard protocol for its speed, security and connection reliability. For more information visit our protocol comparison web page. Connect diff --git a/core/src/main/res/values/styles.xml b/core/src/main/res/values/styles.xml index 4dcde9b1b..d60ff5971 100644 --- a/core/src/main/res/values/styles.xml +++ b/core/src/main/res/values/styles.xml @@ -291,4 +291,51 @@ true 14sp + + + + + + + + + + + + + + diff --git a/store/src/main/java/net/ivpn/client/billing/BillingActivity.java b/store/src/main/java/net/ivpn/client/billing/BillingActivity.java index 3d79df4e1..c12a78e90 100644 --- a/store/src/main/java/net/ivpn/client/billing/BillingActivity.java +++ b/store/src/main/java/net/ivpn/client/billing/BillingActivity.java @@ -32,6 +32,7 @@ import net.ivpn.client.R; import net.ivpn.client.StoreIVPNApplication; import net.ivpn.client.databinding.ActivityBillingBinding; +import net.ivpn.core.common.nightmode.OledModeController; import net.ivpn.core.v2.dialog.DialogBuilder; import org.slf4j.Logger; @@ -49,6 +50,7 @@ public class BillingActivity extends AppCompatActivity implements BillingNavigat @Override protected void onCreate(@Nullable Bundle savedInstanceState) { + OledModeController.INSTANCE.applyOledTheme(this); super.onCreate(savedInstanceState); LOGGER.info("onCreate"); StoreIVPNApplication.instance.billingComponent.inject(this); From f9afb6fe9dc49b7e4b237394288d2925402a38c3 Mon Sep 17 00:00:00 2001 From: Tamim Hossain <132823494+codewithtamim@users.noreply.github.com> Date: Thu, 11 Dec 2025 18:17:47 +0600 Subject: [PATCH 4/9] chore(ui): Move MTU Settings inside Wireguard Details Like iOS App --- .../ivpn/core/v2/protocol/ProtocolFragment.kt | 20 ----- .../wireguard/WireGuardDetailsFragment.kt | 20 +++++ .../res/layout/content_wireguard_details.xml | 78 ++++++++++++++++++- .../protocol_wireguard_section_settings.xml | 71 ----------------- 4 files changed, 97 insertions(+), 92 deletions(-) diff --git a/core/src/main/java/net/ivpn/core/v2/protocol/ProtocolFragment.kt b/core/src/main/java/net/ivpn/core/v2/protocol/ProtocolFragment.kt index 9a2e8dca4..573f6bf21 100644 --- a/core/src/main/java/net/ivpn/core/v2/protocol/ProtocolFragment.kt +++ b/core/src/main/java/net/ivpn/core/v2/protocol/ProtocolFragment.kt @@ -107,9 +107,6 @@ class ProtocolFragment : Fragment(), ProtocolNavigator { binding.contentLayout.wgProtocolSettings.wireguardDetails.setOnClickListener { openWireGuardDetails() } - binding.contentLayout.wgProtocolSettings.wireguardMtu.setOnClickListener { - openMtuDialog() - } binding.contentLayout.protocolSelection.comparisonText.movementMethod = LinkMovementMethod.getInstance() } @@ -130,23 +127,6 @@ class ProtocolFragment : Fragment(), ProtocolNavigator { navigate(action) } - private fun openMtuDialog() { - DialogBuilder.createMtuDialog( - context, - viewModel.getMtuDisplayValue(), - onMtuSaved = { mtuString -> - viewModel.saveMtu(mtuString) - }, - onMtuError = { - DialogBuilder.createFullCustomNotificationDialog( - context, - getString(R.string.dialogs_error), - getString(R.string.protocol_wg_mtu_error) - ) - } - ) - } - override fun notifyUser(msgId: Int, actionId: Int, listener: View.OnClickListener?) { SnackbarUtil.show(binding.coordinator, msgId, actionId, listener) } diff --git a/core/src/main/java/net/ivpn/core/v2/protocol/wireguard/WireGuardDetailsFragment.kt b/core/src/main/java/net/ivpn/core/v2/protocol/wireguard/WireGuardDetailsFragment.kt index 65569e41e..c30b455ae 100644 --- a/core/src/main/java/net/ivpn/core/v2/protocol/wireguard/WireGuardDetailsFragment.kt +++ b/core/src/main/java/net/ivpn/core/v2/protocol/wireguard/WireGuardDetailsFragment.kt @@ -99,6 +99,9 @@ class WireGuardDetailsFragment: Fragment(), ProtocolNavigator { binding.contentLayout.regenerate.setOnClickListener { reGenerateKeys() } + binding.contentLayout.wireguardMtu.setOnClickListener { + openMtuDialog() + } } private fun initToolbar() { @@ -125,6 +128,23 @@ class WireGuardDetailsFragment: Fragment(), ProtocolNavigator { ToastUtil.toast(R.string.protocol_wg_ip_address_copied) } + private fun openMtuDialog() { + DialogBuilder.createMtuDialog( + context, + viewModel.getMtuDisplayValue(), + onMtuSaved = { mtuString -> + viewModel.saveMtu(mtuString) + }, + onMtuError = { + DialogBuilder.createFullCustomNotificationDialog( + context, + getString(R.string.dialogs_error), + getString(R.string.protocol_wg_mtu_error) + ) + } + ) + } + private fun openQuantumResistanceInfo() { DialogBuilder.createNotificationDialog(context, Dialogs.WG_QUANTUM_RESISTANCE_INFO) } diff --git a/core/src/main/res/layout/content_wireguard_details.xml b/core/src/main/res/layout/content_wireguard_details.xml index b7a35ed32..18ee744c2 100644 --- a/core/src/main/res/layout/content_wireguard_details.xml +++ b/core/src/main/res/layout/content_wireguard_details.xml @@ -30,7 +30,8 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" - android:paddingTop="?attr/actionBarSize"> + android:paddingTop="?attr/actionBarSize" + android:paddingBottom="80dp"> + + + + + + + + + + + + + + + + + + + + + + diff --git a/core/src/main/res/layout/protocol_wireguard_section_settings.xml b/core/src/main/res/layout/protocol_wireguard_section_settings.xml index 2d456c6c3..e74878ca7 100644 --- a/core/src/main/res/layout/protocol_wireguard_section_settings.xml +++ b/core/src/main/res/layout/protocol_wireguard_section_settings.xml @@ -206,77 +206,6 @@ android:textColor="@color/protocol_text_color" /> - - - - - - - - - - - - - - - - - - - Date: Thu, 11 Dec 2025 18:46:29 +0600 Subject: [PATCH 5/9] chore(ui) : Fix Change DNS Section Pure Black Theme --- .../core/v2/customdns/CustomDNSFragment.kt | 46 +++++++++++++++++++ .../core/v2/network/NetworkCommonFragment.kt | 2 + .../v2/network/NetworkRecyclerViewAdapter.kt | 2 + .../v2/network/saved/SavedNetworksFragment.kt | 2 + .../scanned/ScannedNetworksFragment.kt | 2 + .../favourite/FavouriteServersListFragment.kt | 7 +++ core/src/main/res/values/strings.xml | 4 +- 7 files changed, 63 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/net/ivpn/core/v2/customdns/CustomDNSFragment.kt b/core/src/main/java/net/ivpn/core/v2/customdns/CustomDNSFragment.kt index 149bd115c..76b41e3f1 100644 --- a/core/src/main/java/net/ivpn/core/v2/customdns/CustomDNSFragment.kt +++ b/core/src/main/java/net/ivpn/core/v2/customdns/CustomDNSFragment.kt @@ -26,6 +26,7 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.view.ViewTreeObserver import androidx.databinding.DataBindingUtil import androidx.fragment.app.Fragment import androidx.navigation.fragment.findNavController @@ -34,6 +35,7 @@ import androidx.navigation.ui.setupWithNavController import net.ivpn.core.IVPNApplication import net.ivpn.core.R import net.ivpn.core.databinding.FragmentCustomDnsBinding +import net.ivpn.core.common.nightmode.OledModeController import net.ivpn.core.v2.dialog.DialogBuilder import net.ivpn.core.v2.MainActivity import org.slf4j.LoggerFactory @@ -50,6 +52,8 @@ class CustomDNSFragment : Fragment() { @Inject lateinit var viewModel: CustomDNSViewModel + private var oledLayoutListener: ViewTreeObserver.OnGlobalLayoutListener? = null + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -64,6 +68,19 @@ class CustomDNSFragment : Fragment() { IVPNApplication.appComponent.provideActivityComponent().create().inject(this) initViews() initToolbar() + view.post { OledModeController.applyOledToViewTree(view) } + registerOledEnforcer(view) + } + + override fun onResume() { + super.onResume() + applyOledIfNeeded() + binding.root.post { applyOledIfNeeded() } + } + + override fun onDestroyView() { + super.onDestroyView() + unregisterOledEnforcer() } override fun onStart() { @@ -83,6 +100,35 @@ class CustomDNSFragment : Fragment() { } } + private fun applyOledIfNeeded() { + if (!OledModeController.isOledModeEnabled()) return + if (!isAdded) return + val context = context ?: return + val oledColor = context.getColor(R.color.oled_background) + binding.root.setBackgroundColor(oledColor) + binding.coordinator.setBackgroundColor(oledColor) + binding.contentLayout.root.setBackgroundColor(oledColor) + OledModeController.applyOledToViewTree(binding.root) + } + + private fun registerOledEnforcer(view: View) { + if (!OledModeController.isOledModeEnabled()) return + if (oledLayoutListener != null) return + if (!view.viewTreeObserver.isAlive) return + oledLayoutListener = ViewTreeObserver.OnGlobalLayoutListener { applyOledIfNeeded() } + view.viewTreeObserver.addOnGlobalLayoutListener(oledLayoutListener) + } + + private fun unregisterOledEnforcer() { + oledLayoutListener?.let { listener -> + val v = view + if (v != null && v.viewTreeObserver.isAlive) { + v.viewTreeObserver.removeOnGlobalLayoutListener(listener) + } + } + oledLayoutListener = null + } + fun changeDNS() { DialogBuilder.createCustomDNSDialogue(context) { dns: String? -> viewModel.setDnsAs(dns) } } diff --git a/core/src/main/java/net/ivpn/core/v2/network/NetworkCommonFragment.kt b/core/src/main/java/net/ivpn/core/v2/network/NetworkCommonFragment.kt index 7e0eeafb0..0b23af4fe 100644 --- a/core/src/main/java/net/ivpn/core/v2/network/NetworkCommonFragment.kt +++ b/core/src/main/java/net/ivpn/core/v2/network/NetworkCommonFragment.kt @@ -44,6 +44,7 @@ import androidx.navigation.ui.setupWithNavController import net.ivpn.core.IVPNApplication import net.ivpn.core.R import net.ivpn.core.databinding.FragmentNetworkBinding +import net.ivpn.core.common.nightmode.OledModeController import net.ivpn.core.v2.dialog.DialogBuilder import net.ivpn.core.v2.dialog.Dialogs import net.ivpn.core.v2.MainActivity @@ -81,6 +82,7 @@ class NetworkCommonFragment : Fragment(), NetworkNavigator { IVPNApplication.appComponent.provideActivityComponent().create().inject(this) initViews() initToolbar() + view.post { OledModeController.applyOledToViewTree(view) } } @Deprecated("Deprecated in Java") diff --git a/core/src/main/java/net/ivpn/core/v2/network/NetworkRecyclerViewAdapter.kt b/core/src/main/java/net/ivpn/core/v2/network/NetworkRecyclerViewAdapter.kt index 9e900081b..007f18143 100644 --- a/core/src/main/java/net/ivpn/core/v2/network/NetworkRecyclerViewAdapter.kt +++ b/core/src/main/java/net/ivpn/core/v2/network/NetworkRecyclerViewAdapter.kt @@ -29,6 +29,7 @@ import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.RecyclerView import net.ivpn.core.IVPNApplication import net.ivpn.core.databinding.ViewWifiItemBinding +import net.ivpn.core.common.nightmode.OledModeController import net.ivpn.core.v2.dialog.DialogBuilderK.openChangeNetworkStatusDialogue import net.ivpn.core.v2.network.dialog.NetworkChangeDialogViewModel import net.ivpn.core.vpn.model.NetworkState @@ -121,6 +122,7 @@ class NetworkRecyclerViewAdapter(context: Context?) : RecyclerView.Adapter(R.id.empty_view)?.setBackgroundColor(oledBackground) + } } @Deprecated("Deprecated in Java") diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml index a27ea94af..f4e4cf4e2 100644 --- a/core/src/main/res/values/strings.xml +++ b/core/src/main/res/values/strings.xml @@ -112,7 +112,7 @@ Light Dark - AMOLED Black + Pure Black System default By battery @@ -458,7 +458,7 @@ Color Theme Light Dark - AMOLED Black + Pure Black System default Set by Battery Saver. Dark mode is used when the system\'s Battery Saver feature is enabled. Otherwise - Light mode. From c384475b152946607933231edb683b1575aa1fe8 Mon Sep 17 00:00:00 2001 From: Tamim Hossain <132823494+codewithtamim@users.noreply.github.com> Date: Thu, 11 Dec 2025 18:57:17 +0600 Subject: [PATCH 6/9] chore(ui) : remove wireguard MTU from protocol fragment --- .../ivpn/core/v2/protocol/ProtocolFragment.kt | 21 +----- .../protocol_wireguard_section_settings.xml | 71 ------------------- 2 files changed, 2 insertions(+), 90 deletions(-) diff --git a/core/src/main/java/net/ivpn/core/v2/protocol/ProtocolFragment.kt b/core/src/main/java/net/ivpn/core/v2/protocol/ProtocolFragment.kt index 9a2e8dca4..c9238b582 100644 --- a/core/src/main/java/net/ivpn/core/v2/protocol/ProtocolFragment.kt +++ b/core/src/main/java/net/ivpn/core/v2/protocol/ProtocolFragment.kt @@ -107,9 +107,7 @@ class ProtocolFragment : Fragment(), ProtocolNavigator { binding.contentLayout.wgProtocolSettings.wireguardDetails.setOnClickListener { openWireGuardDetails() } - binding.contentLayout.wgProtocolSettings.wireguardMtu.setOnClickListener { - openMtuDialog() - } + binding.contentLayout.protocolSelection.comparisonText.movementMethod = LinkMovementMethod.getInstance() } @@ -130,22 +128,7 @@ class ProtocolFragment : Fragment(), ProtocolNavigator { navigate(action) } - private fun openMtuDialog() { - DialogBuilder.createMtuDialog( - context, - viewModel.getMtuDisplayValue(), - onMtuSaved = { mtuString -> - viewModel.saveMtu(mtuString) - }, - onMtuError = { - DialogBuilder.createFullCustomNotificationDialog( - context, - getString(R.string.dialogs_error), - getString(R.string.protocol_wg_mtu_error) - ) - } - ) - } + override fun notifyUser(msgId: Int, actionId: Int, listener: View.OnClickListener?) { SnackbarUtil.show(binding.coordinator, msgId, actionId, listener) diff --git a/core/src/main/res/layout/protocol_wireguard_section_settings.xml b/core/src/main/res/layout/protocol_wireguard_section_settings.xml index 2d456c6c3..e74878ca7 100644 --- a/core/src/main/res/layout/protocol_wireguard_section_settings.xml +++ b/core/src/main/res/layout/protocol_wireguard_section_settings.xml @@ -206,77 +206,6 @@ android:textColor="@color/protocol_text_color" /> - - - - - - - - - - - - - - - - - - - Date: Sun, 14 Dec 2025 07:33:59 +0600 Subject: [PATCH 7/9] chore(ui): remove WireGuard MTU from protocol settings, keep only in WireGuard details --- .../ivpn/core/v2/protocol/ProtocolFragment.kt | 20 ------ .../protocol_wireguard_section_settings.xml | 71 ------------------- 2 files changed, 91 deletions(-) diff --git a/core/src/main/java/net/ivpn/core/v2/protocol/ProtocolFragment.kt b/core/src/main/java/net/ivpn/core/v2/protocol/ProtocolFragment.kt index 9a2e8dca4..573f6bf21 100644 --- a/core/src/main/java/net/ivpn/core/v2/protocol/ProtocolFragment.kt +++ b/core/src/main/java/net/ivpn/core/v2/protocol/ProtocolFragment.kt @@ -107,9 +107,6 @@ class ProtocolFragment : Fragment(), ProtocolNavigator { binding.contentLayout.wgProtocolSettings.wireguardDetails.setOnClickListener { openWireGuardDetails() } - binding.contentLayout.wgProtocolSettings.wireguardMtu.setOnClickListener { - openMtuDialog() - } binding.contentLayout.protocolSelection.comparisonText.movementMethod = LinkMovementMethod.getInstance() } @@ -130,23 +127,6 @@ class ProtocolFragment : Fragment(), ProtocolNavigator { navigate(action) } - private fun openMtuDialog() { - DialogBuilder.createMtuDialog( - context, - viewModel.getMtuDisplayValue(), - onMtuSaved = { mtuString -> - viewModel.saveMtu(mtuString) - }, - onMtuError = { - DialogBuilder.createFullCustomNotificationDialog( - context, - getString(R.string.dialogs_error), - getString(R.string.protocol_wg_mtu_error) - ) - } - ) - } - override fun notifyUser(msgId: Int, actionId: Int, listener: View.OnClickListener?) { SnackbarUtil.show(binding.coordinator, msgId, actionId, listener) } diff --git a/core/src/main/res/layout/protocol_wireguard_section_settings.xml b/core/src/main/res/layout/protocol_wireguard_section_settings.xml index 2d456c6c3..e74878ca7 100644 --- a/core/src/main/res/layout/protocol_wireguard_section_settings.xml +++ b/core/src/main/res/layout/protocol_wireguard_section_settings.xml @@ -206,77 +206,6 @@ android:textColor="@color/protocol_text_color" /> - - - - - - - - - - - - - - - - - - - Date: Sun, 14 Dec 2025 07:39:11 +0600 Subject: [PATCH 8/9] chore(ui): change AMOLED Black to Pure Black --- core/src/main/res/values/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml index a27ea94af..f4e4cf4e2 100644 --- a/core/src/main/res/values/strings.xml +++ b/core/src/main/res/values/strings.xml @@ -112,7 +112,7 @@ Light Dark - AMOLED Black + Pure Black System default By battery @@ -458,7 +458,7 @@ Color Theme Light Dark - AMOLED Black + Pure Black System default Set by Battery Saver. Dark mode is used when the system\'s Battery Saver feature is enabled. Otherwise - Light mode. From 7e2584943b772b4c727f45674fbe2088b79f887f Mon Sep 17 00:00:00 2001 From: Tamim Hossain <132823494+codewithtamim@users.noreply.github.com> Date: Sat, 27 Dec 2025 22:56:44 +0600 Subject: [PATCH 9/9] Rename Notes discreet icon to Alarm Clock --- core/src/main/AndroidManifest.xml | 6 +- .../ic_launcher_alarm_clock-playstore.png | Bin 0 -> 23301 bytes .../main/ic_launcher_calculator-playstore.png | Bin 0 -> 9148 bytes core/src/main/ic_launcher_notes-playstore.png | Bin 0 -> 23301 bytes .../main/ic_launcher_weather-playstore.png | Bin 0 -> 11145 bytes .../core/common/appicon/AppIconManager.kt | 2 +- .../ivpn/core/v2/appicon/AppIconFragment.kt | 6 +- ...=> ic_launcher_alarm_clock_monochrome.xml} | 0 .../ic_launcher_notes_foreground.xml | 44 -------- .../ic_launcher_weather_foreground.xml | 47 --------- .../ic_launcher_alarm_clock_background.xml | 74 +++++++++++++ .../ic_launcher_alarm_clock_foreground.xml | 34 ++++++ .../ic_launcher_calculator_background.xml | 99 +++++++++++++----- .../ic_launcher_calculator_foreground.xml | 60 +++++------ .../drawable/ic_launcher_notes_background.xml | 25 ----- .../drawable/ic_launcher_notes_foreground.xml | 34 ++++++ .../ic_launcher_weather_background.xml | 99 +++++++++++++----- .../ic_launcher_weather_foreground.xml | 25 +++++ core/src/main/res/layout/content_app_icon.xml | 12 +-- .../ic_launcher_alarm_clock.xml | 5 + .../ic_launcher_alarm_clock_round.xml | 5 + .../ic_launcher_calculator.xml | 19 ---- .../ic_launcher_calculator_round.xml | 19 ---- .../mipmap-anydpi-v26/ic_launcher_notes.xml | 24 ----- .../ic_launcher_notes_round.xml | 24 ----- .../mipmap-anydpi-v26/ic_launcher_weather.xml | 19 ---- .../ic_launcher_weather_round.xml | 19 ---- .../mipmap-hdpi/ic_launcher_alarm_clock.webp | Bin 0 -> 1814 bytes .../ic_launcher_alarm_clock_round.webp | Bin 0 -> 3492 bytes .../mipmap-hdpi/ic_launcher_calculator.webp | Bin 1106 -> 1128 bytes .../ic_launcher_calculator_round.webp | Bin 2414 -> 2374 bytes .../res/mipmap-hdpi/ic_launcher_notes.webp | Bin 1390 -> 0 bytes .../mipmap-hdpi/ic_launcher_notes_round.webp | Bin 3420 -> 0 bytes .../res/mipmap-hdpi/ic_launcher_weather.webp | Bin 2114 -> 1126 bytes .../ic_launcher_weather_round.webp | Bin 4198 -> 2728 bytes .../mipmap-mdpi/ic_launcher_alarm_clock.webp | Bin 0 -> 1110 bytes .../ic_launcher_alarm_clock_round.webp | Bin 0 -> 2304 bytes .../mipmap-mdpi/ic_launcher_calculator.webp | Bin 846 -> 924 bytes .../ic_launcher_calculator_round.webp | Bin 1660 -> 1580 bytes .../res/mipmap-mdpi/ic_launcher_notes.webp | Bin 1092 -> 0 bytes .../mipmap-mdpi/ic_launcher_notes_round.webp | Bin 2074 -> 0 bytes .../res/mipmap-mdpi/ic_launcher_weather.webp | Bin 1618 -> 862 bytes .../ic_launcher_weather_round.webp | Bin 2754 -> 1788 bytes .../mipmap-xhdpi/ic_launcher_alarm_clock.webp | Bin 0 -> 2336 bytes .../ic_launcher_alarm_clock_round.webp | Bin 0 -> 4886 bytes .../mipmap-xhdpi/ic_launcher_calculator.webp | Bin 1324 -> 1226 bytes .../ic_launcher_calculator_round.webp | Bin 3406 -> 3192 bytes .../res/mipmap-xhdpi/ic_launcher_notes.webp | Bin 1908 -> 0 bytes .../mipmap-xhdpi/ic_launcher_notes_round.webp | Bin 4696 -> 0 bytes .../res/mipmap-xhdpi/ic_launcher_weather.webp | Bin 2842 -> 1522 bytes .../ic_launcher_weather_round.webp | Bin 5602 -> 3834 bytes .../ic_launcher_alarm_clock.webp | Bin 0 -> 3562 bytes .../ic_launcher_alarm_clock_round.webp | Bin 0 -> 7558 bytes .../mipmap-xxhdpi/ic_launcher_calculator.webp | Bin 1978 -> 1672 bytes .../ic_launcher_calculator_round.webp | Bin 5354 -> 4662 bytes .../res/mipmap-xxhdpi/ic_launcher_notes.webp | Bin 2506 -> 0 bytes .../ic_launcher_notes_round.webp | Bin 7094 -> 0 bytes .../mipmap-xxhdpi/ic_launcher_weather.webp | Bin 3848 -> 2180 bytes .../ic_launcher_weather_round.webp | Bin 8174 -> 5776 bytes .../ic_launcher_alarm_clock.webp | Bin 0 -> 4602 bytes .../ic_launcher_alarm_clock_round.webp | Bin 0 -> 10460 bytes .../ic_launcher_calculator.webp | Bin 2530 -> 1954 bytes .../ic_launcher_calculator_round.webp | Bin 7470 -> 6614 bytes .../res/mipmap-xxxhdpi/ic_launcher_notes.webp | Bin 4098 -> 0 bytes .../ic_launcher_notes_round.webp | Bin 9678 -> 0 bytes .../mipmap-xxxhdpi/ic_launcher_weather.webp | Bin 5026 -> 2988 bytes .../ic_launcher_weather_round.webp | Bin 11048 -> 8184 bytes core/src/main/res/values/strings.xml | 2 +- 68 files changed, 369 insertions(+), 334 deletions(-) create mode 100644 core/src/main/ic_launcher_alarm_clock-playstore.png create mode 100644 core/src/main/ic_launcher_calculator-playstore.png create mode 100644 core/src/main/ic_launcher_notes-playstore.png create mode 100644 core/src/main/ic_launcher_weather-playstore.png rename core/src/main/res/drawable-v24/{ic_launcher_notes_monochrome.xml => ic_launcher_alarm_clock_monochrome.xml} (100%) delete mode 100644 core/src/main/res/drawable-v24/ic_launcher_notes_foreground.xml delete mode 100644 core/src/main/res/drawable-v24/ic_launcher_weather_foreground.xml create mode 100644 core/src/main/res/drawable/ic_launcher_alarm_clock_background.xml create mode 100644 core/src/main/res/drawable/ic_launcher_alarm_clock_foreground.xml delete mode 100644 core/src/main/res/drawable/ic_launcher_notes_background.xml create mode 100644 core/src/main/res/drawable/ic_launcher_notes_foreground.xml create mode 100644 core/src/main/res/drawable/ic_launcher_weather_foreground.xml create mode 100644 core/src/main/res/mipmap-anydpi-v26/ic_launcher_alarm_clock.xml create mode 100644 core/src/main/res/mipmap-anydpi-v26/ic_launcher_alarm_clock_round.xml delete mode 100644 core/src/main/res/mipmap-anydpi-v26/ic_launcher_notes.xml delete mode 100644 core/src/main/res/mipmap-anydpi-v26/ic_launcher_notes_round.xml create mode 100644 core/src/main/res/mipmap-hdpi/ic_launcher_alarm_clock.webp create mode 100644 core/src/main/res/mipmap-hdpi/ic_launcher_alarm_clock_round.webp delete mode 100644 core/src/main/res/mipmap-hdpi/ic_launcher_notes.webp delete mode 100644 core/src/main/res/mipmap-hdpi/ic_launcher_notes_round.webp create mode 100644 core/src/main/res/mipmap-mdpi/ic_launcher_alarm_clock.webp create mode 100644 core/src/main/res/mipmap-mdpi/ic_launcher_alarm_clock_round.webp delete mode 100644 core/src/main/res/mipmap-mdpi/ic_launcher_notes.webp delete mode 100644 core/src/main/res/mipmap-mdpi/ic_launcher_notes_round.webp create mode 100644 core/src/main/res/mipmap-xhdpi/ic_launcher_alarm_clock.webp create mode 100644 core/src/main/res/mipmap-xhdpi/ic_launcher_alarm_clock_round.webp delete mode 100644 core/src/main/res/mipmap-xhdpi/ic_launcher_notes.webp delete mode 100644 core/src/main/res/mipmap-xhdpi/ic_launcher_notes_round.webp create mode 100644 core/src/main/res/mipmap-xxhdpi/ic_launcher_alarm_clock.webp create mode 100644 core/src/main/res/mipmap-xxhdpi/ic_launcher_alarm_clock_round.webp delete mode 100644 core/src/main/res/mipmap-xxhdpi/ic_launcher_notes.webp delete mode 100644 core/src/main/res/mipmap-xxhdpi/ic_launcher_notes_round.webp create mode 100644 core/src/main/res/mipmap-xxxhdpi/ic_launcher_alarm_clock.webp create mode 100644 core/src/main/res/mipmap-xxxhdpi/ic_launcher_alarm_clock_round.webp delete mode 100644 core/src/main/res/mipmap-xxxhdpi/ic_launcher_notes.webp delete mode 100644 core/src/main/res/mipmap-xxxhdpi/ic_launcher_notes_round.webp diff --git a/core/src/main/AndroidManifest.xml b/core/src/main/AndroidManifest.xml index 2b1e9fc4f..0cf099462 100644 --- a/core/src/main/AndroidManifest.xml +++ b/core/src/main/AndroidManifest.xml @@ -98,10 +98,10 @@ diff --git a/core/src/main/ic_launcher_alarm_clock-playstore.png b/core/src/main/ic_launcher_alarm_clock-playstore.png new file mode 100644 index 0000000000000000000000000000000000000000..7bbaeed52e5e0be8c2eda30be63ec49f8e411639 GIT binary patch literal 23301 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 boibc}c)g0%&E5>yTSK(f_0=#cHo^Y`5HUwB literal 0 HcmV?d00001 diff --git a/core/src/main/ic_launcher_calculator-playstore.png b/core/src/main/ic_launcher_calculator-playstore.png new file mode 100644 index 0000000000000000000000000000000000000000..7f5e623a22410534560c42e588a975f10e5f1097 GIT binary patch literal 9148 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 Fe**aClllMv literal 0 HcmV?d00001 diff --git a/core/src/main/ic_launcher_notes-playstore.png b/core/src/main/ic_launcher_notes-playstore.png new file mode 100644 index 0000000000000000000000000000000000000000..7bbaeed52e5e0be8c2eda30be63ec49f8e411639 GIT binary patch literal 23301 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 boibc}c)g0%&E5>yTSK(f_0=#cHo^Y`5HUwB literal 0 HcmV?d00001 diff --git a/core/src/main/ic_launcher_weather-playstore.png b/core/src/main/ic_launcher_weather-playstore.png new file mode 100644 index 0000000000000000000000000000000000000000..a16c75e5e33955a72ca2b093986beac029810678 GIT binary patch literal 11145 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

=S@Ns9rLS5A+20dQ%w5 z9USPuNq4MhoR;=O_0L&S164VKm%*iJl_Kp{OvwZ}@a=Y!2ZE=+=_(klxQc<&C?kz34<;c%{ zoaoL|0t)%EwX_46Itgm(FlO00!ELbco?u-ru>lIXGIg5sbF9r&7OXu`7|B;)$a*nO zANTWe765pyzbPuPwYDU@i>?e*(}XcgyBp1aWaX|+&<+M3^!;cEPq(`mXO)rVX_Nr) zm*$~!3a7r_v7jyc@eW@%8_7t_kw4gEXWO!vMqx4~sYr-9d+`;Uc8@qQzsK0M`|}1v zEL%8xAjn$=5VyYRz=QX2h}qJ9>cY))6^PP1Y3p-&=*>nKbsa^6{@8X|6ri68ri?Il zilcEGT570)2sn5&o6U+vn_u-%m#urs`X-ffz7&a%(ySXvaFhX*xTyGt^(wXcK+M~% z7g|24EP(ppKbt`s)Su&f^$HInLG-p&)Weza4{b&C`#GQCWgNX|g85LGm+rd8cfsk# zRb44jfU{kP2Eok!VDV@+P3DYG8OD6yB^{q|f6{jNSBua0A6V_wb6Y6pzOCNO&exIJ zx#KmoUsBHKdEs4HPb4@@Sc(=k1P7$k3=JNnfX~+-OwvE*R%Fi5lMD&&6GPVNC`^l# z)02$SAV;E-I_K$E80NhM4cge+2ppdltkG#jff?-JOW&pTIY!T7@>*+KfVt|!p5!Cb zeWJbYcCPoWXYZvGQ=fsC+KA76_gC*t7Iq*j9xb0KRpOyyw4_~Hve2SmF z=~)`|3jo82|06>KMakQoD?h1Qh+D2}nCp|bX%wf9B%TQ=eMfloVLfQ|IM_txrfyQZ zc&3iD0Q4~pC|a2fJX33D%b0*J$G9TSRj~`4rvLZ<3ID5s|0@lwpQG(x4*A@vMpOde OM^jDjZk3A7>;D0w{_^|) literal 0 HcmV?d00001 diff --git a/core/src/main/java/net/ivpn/core/common/appicon/AppIconManager.kt b/core/src/main/java/net/ivpn/core/common/appicon/AppIconManager.kt index bee676b22..edf9bf5cc 100644 --- a/core/src/main/java/net/ivpn/core/common/appicon/AppIconManager.kt +++ b/core/src/main/java/net/ivpn/core/common/appicon/AppIconManager.kt @@ -81,7 +81,7 @@ enum class CustomAppIconData( ) { DEFAULT(".MainActivity", R.mipmap.ic_launcher, R.string.app_icon_name_default, IconCategory.IVPN), WEATHER(".MainActivityWeather", R.mipmap.ic_launcher_weather, R.string.app_icon_name_weather, IconCategory.Discreet), - NOTES(".MainActivityNotes", R.mipmap.ic_launcher_notes, R.string.app_icon_name_notes, IconCategory.Discreet), + ALARM_CLOCK(".MainActivityAlarmClock", R.mipmap.ic_launcher_alarm_clock, R.string.app_icon_name_alarm_clock, IconCategory.Discreet), CALCULATOR(".MainActivityCalculator", R.mipmap.ic_launcher_calculator, R.string.app_icon_name_calculator, IconCategory.Discreet); fun getComponentName(context: Context): ComponentName { diff --git a/core/src/main/java/net/ivpn/core/v2/appicon/AppIconFragment.kt b/core/src/main/java/net/ivpn/core/v2/appicon/AppIconFragment.kt index 9ea1d6d4f..683c2b8e1 100644 --- a/core/src/main/java/net/ivpn/core/v2/appicon/AppIconFragment.kt +++ b/core/src/main/java/net/ivpn/core/v2/appicon/AppIconFragment.kt @@ -96,8 +96,8 @@ class AppIconFragment : Fragment() { showConfirmationDialog(CustomAppIconData.WEATHER) } - binding.contentLayout.iconNotes.setOnClickListener { - showConfirmationDialog(CustomAppIconData.NOTES) + binding.contentLayout.iconAlarmClock.setOnClickListener { + showConfirmationDialog(CustomAppIconData.ALARM_CLOCK) } binding.contentLayout.iconCalculator.setOnClickListener { @@ -125,7 +125,7 @@ class AppIconFragment : Fragment() { val currentIcon = viewModel.currentIcon.get() binding.contentLayout.radioDefault.isChecked = currentIcon == CustomAppIconData.DEFAULT binding.contentLayout.radioWeather.isChecked = currentIcon == CustomAppIconData.WEATHER - binding.contentLayout.radioNotes.isChecked = currentIcon == CustomAppIconData.NOTES + binding.contentLayout.radioAlarmClock.isChecked = currentIcon == CustomAppIconData.ALARM_CLOCK binding.contentLayout.radioCalculator.isChecked = currentIcon == CustomAppIconData.CALCULATOR } diff --git a/core/src/main/res/drawable-v24/ic_launcher_notes_monochrome.xml b/core/src/main/res/drawable-v24/ic_launcher_alarm_clock_monochrome.xml similarity index 100% rename from core/src/main/res/drawable-v24/ic_launcher_notes_monochrome.xml rename to core/src/main/res/drawable-v24/ic_launcher_alarm_clock_monochrome.xml diff --git a/core/src/main/res/drawable-v24/ic_launcher_notes_foreground.xml b/core/src/main/res/drawable-v24/ic_launcher_notes_foreground.xml deleted file mode 100644 index 8dad1610b..000000000 --- a/core/src/main/res/drawable-v24/ic_launcher_notes_foreground.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - diff --git a/core/src/main/res/drawable-v24/ic_launcher_weather_foreground.xml b/core/src/main/res/drawable-v24/ic_launcher_weather_foreground.xml deleted file mode 100644 index c6a366b3d..000000000 --- a/core/src/main/res/drawable-v24/ic_launcher_weather_foreground.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - diff --git a/core/src/main/res/drawable/ic_launcher_alarm_clock_background.xml b/core/src/main/res/drawable/ic_launcher_alarm_clock_background.xml new file mode 100644 index 000000000..ca3826a46 --- /dev/null +++ b/core/src/main/res/drawable/ic_launcher_alarm_clock_background.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/core/src/main/res/drawable/ic_launcher_alarm_clock_foreground.xml b/core/src/main/res/drawable/ic_launcher_alarm_clock_foreground.xml new file mode 100644 index 000000000..d0ae495c3 --- /dev/null +++ b/core/src/main/res/drawable/ic_launcher_alarm_clock_foreground.xml @@ -0,0 +1,34 @@ + + + + + + + + + diff --git a/core/src/main/res/drawable/ic_launcher_calculator_background.xml b/core/src/main/res/drawable/ic_launcher_calculator_background.xml index b44c83dc1..ca3826a46 100644 --- a/core/src/main/res/drawable/ic_launcher_calculator_background.xml +++ b/core/src/main/res/drawable/ic_launcher_calculator_background.xml @@ -1,25 +1,74 @@ - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/core/src/main/res/drawable/ic_launcher_calculator_foreground.xml b/core/src/main/res/drawable/ic_launcher_calculator_foreground.xml index ce196cf4c..024605169 100644 --- a/core/src/main/res/drawable/ic_launcher_calculator_foreground.xml +++ b/core/src/main/res/drawable/ic_launcher_calculator_foreground.xml @@ -1,38 +1,38 @@ - - + android:viewportWidth="612" + android:viewportHeight="612"> + + android:pathData="M0,0h612v612h-612z" + android:fillColor="#FEFEFE"/> + android:pathData="M306,127H426C459.14,127 486,153.86 486,187V307H306V127Z" + android:fillColor="#E5E2E1"/> + android:pathData="M126,187C126,153.86 152.86,127 186,127H306V307H126V187Z" + android:fillColor="#ECECEA"/> + + + + + + diff --git a/core/src/main/res/drawable/ic_launcher_notes_background.xml b/core/src/main/res/drawable/ic_launcher_notes_background.xml deleted file mode 100644 index 78ade5923..000000000 --- a/core/src/main/res/drawable/ic_launcher_notes_background.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - \ No newline at end of file diff --git a/core/src/main/res/drawable/ic_launcher_notes_foreground.xml b/core/src/main/res/drawable/ic_launcher_notes_foreground.xml new file mode 100644 index 000000000..d0ae495c3 --- /dev/null +++ b/core/src/main/res/drawable/ic_launcher_notes_foreground.xml @@ -0,0 +1,34 @@ + + + + + + + + + diff --git a/core/src/main/res/drawable/ic_launcher_weather_background.xml b/core/src/main/res/drawable/ic_launcher_weather_background.xml index 44fd28ddb..ca3826a46 100644 --- a/core/src/main/res/drawable/ic_launcher_weather_background.xml +++ b/core/src/main/res/drawable/ic_launcher_weather_background.xml @@ -1,25 +1,74 @@ - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/core/src/main/res/drawable/ic_launcher_weather_foreground.xml b/core/src/main/res/drawable/ic_launcher_weather_foreground.xml new file mode 100644 index 000000000..83348fb77 --- /dev/null +++ b/core/src/main/res/drawable/ic_launcher_weather_foreground.xml @@ -0,0 +1,25 @@ + + + + + + + + diff --git a/core/src/main/res/layout/content_app_icon.xml b/core/src/main/res/layout/content_app_icon.xml index e8940f9e0..ee91fff06 100644 --- a/core/src/main/res/layout/content_app_icon.xml +++ b/core/src/main/res/layout/content_app_icon.xml @@ -158,9 +158,9 @@ android:focusable="false" /> - + + android:src="@mipmap/ic_launcher_alarm_clock" + android:contentDescription="@string/app_icon_name_alarm_clock" /> + android:text="@string/app_icon_name_alarm_clock" /> + + + + \ No newline at end of file diff --git a/core/src/main/res/mipmap-anydpi-v26/ic_launcher_alarm_clock_round.xml b/core/src/main/res/mipmap-anydpi-v26/ic_launcher_alarm_clock_round.xml new file mode 100644 index 000000000..8ebd583b1 --- /dev/null +++ b/core/src/main/res/mipmap-anydpi-v26/ic_launcher_alarm_clock_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/core/src/main/res/mipmap-anydpi-v26/ic_launcher_calculator.xml b/core/src/main/res/mipmap-anydpi-v26/ic_launcher_calculator.xml index 6e833ea58..9065b3790 100644 --- a/core/src/main/res/mipmap-anydpi-v26/ic_launcher_calculator.xml +++ b/core/src/main/res/mipmap-anydpi-v26/ic_launcher_calculator.xml @@ -1,24 +1,5 @@ - - \ No newline at end of file diff --git a/core/src/main/res/mipmap-anydpi-v26/ic_launcher_calculator_round.xml b/core/src/main/res/mipmap-anydpi-v26/ic_launcher_calculator_round.xml index 6e833ea58..9065b3790 100644 --- a/core/src/main/res/mipmap-anydpi-v26/ic_launcher_calculator_round.xml +++ b/core/src/main/res/mipmap-anydpi-v26/ic_launcher_calculator_round.xml @@ -1,24 +1,5 @@ - - \ No newline at end of file diff --git a/core/src/main/res/mipmap-anydpi-v26/ic_launcher_notes.xml b/core/src/main/res/mipmap-anydpi-v26/ic_launcher_notes.xml deleted file mode 100644 index fc8c1fbe3..000000000 --- a/core/src/main/res/mipmap-anydpi-v26/ic_launcher_notes.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/core/src/main/res/mipmap-anydpi-v26/ic_launcher_notes_round.xml b/core/src/main/res/mipmap-anydpi-v26/ic_launcher_notes_round.xml deleted file mode 100644 index fc8c1fbe3..000000000 --- a/core/src/main/res/mipmap-anydpi-v26/ic_launcher_notes_round.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/core/src/main/res/mipmap-anydpi-v26/ic_launcher_weather.xml b/core/src/main/res/mipmap-anydpi-v26/ic_launcher_weather.xml index fad38f57f..d4300281b 100644 --- a/core/src/main/res/mipmap-anydpi-v26/ic_launcher_weather.xml +++ b/core/src/main/res/mipmap-anydpi-v26/ic_launcher_weather.xml @@ -1,24 +1,5 @@ - - \ No newline at end of file diff --git a/core/src/main/res/mipmap-anydpi-v26/ic_launcher_weather_round.xml b/core/src/main/res/mipmap-anydpi-v26/ic_launcher_weather_round.xml index fad38f57f..d4300281b 100644 --- a/core/src/main/res/mipmap-anydpi-v26/ic_launcher_weather_round.xml +++ b/core/src/main/res/mipmap-anydpi-v26/ic_launcher_weather_round.xml @@ -1,24 +1,5 @@ - - \ No newline at end of file diff --git a/core/src/main/res/mipmap-hdpi/ic_launcher_alarm_clock.webp b/core/src/main/res/mipmap-hdpi/ic_launcher_alarm_clock.webp new file mode 100644 index 0000000000000000000000000000000000000000..75bdd596845b781ae76bd7558bbe7df0b75b8b01 GIT binary patch literal 1814 zcmV+x2kH1yNk&Ev2LJ$9MM6+kP&iBh2LJ#sN5ByfHPO-j|FrF_8{4*R+qP}nwr$(C zoom~+XTiPKTKm6FP_Ee44AwMaoztGoAkVF0ba_&K?vpOhE>k+0f$>l6l=c9O(l%TB zw70xfPM12V>Hh`;!15 zO0sRb+WBrj`c|`Yn=W!&E$%I@kyqH zA4Bqqdns=UAZY%tW-~LPpHH8)eG00QwYb;~Hp9`PsfBMGuZ zM{lY-Gxnh#OM_%i@`!>g;nkVy6hJuIVVoG{W-EY*um9B$?J!S`<9|zUv_w73GvoLd z$*sCnU&yerJYBf3;wV*orAYdS^mD(wiKThrf_{2bVRTlh8|$c)_0i*|W(`Y^q)IRi ztM%F9I;v%rxsgKY>{DU7uNeid13V0T^$LL7lfM6Vn>2c?=d|3^y7aED`D zHXCC4w3J`e;TvvkF~1sO_>99AVK0}IL5@hNb`92 zl0Jg=O9f0OI*a(j9c9|3saRvrc1lf=<_Lg-aCHCxkF}j^{H7MQvg`s1fqFvS6ie$i z4zh%7x4rfx*c!^POH+u}3`?mZHvx7TW~rIE}DBn&&&n-pFcALo`0pNzoMQ3cbD9LO<(R9#DOUWRe%Fs(s*$qlGTUnnWho7Z=jaY5_pS9)q-rHT0$F?V0NY!jo(YNE090kBzh!*w%ZEb z1lgw&jXj@(dSYEdC2?9)8%T!|KC*h_KX@+8<@usyv%$4ekl94aE5Me>)nQGL3eBVsQXly=uiPu}xF?64J}~Tb)9XDLdU%Mu({g?RS=IH`V^m~? zd?MBEn|NhBF;iEK>l=$Lk|>draoOy0Y6@*4)fMWV4O3;JuCWoi_3#kut&%!$+zWQ|U$+E;aa$qo~1mIT&hqK}M0k zcaM70So$W_i*^~ZHl04qC`yhyhTsp1aM`w|WV;dS@JL-9R*G3;o$!}KB-v7W!D-#L zEPZ-t88-RE?$Gt3(d2ZZQi9onivn&jb%D0nMex8?Qn;i_Fv@f&fwo}D7gdG? zvo4wLTgGGXz(~`{GGM%P$tNqpYQ>tpCgP`u$DCFZu+ao!bmY*}qlxro`_R6EJ~sXJ!%vqyfBcc>z46#A{cAQ4jleFJ5yoM&BFqW5HJ-kFta^}G^ETc;-vEh} zWJRbi{)?*=Qnk2BRe$^gjmB@M8*nky@UolD@3KgZvOH}MIlPi7fdMXAHSJmRwCW`u zd%W#&#{V8u)WbM6j(-u~Xo(76APGl}X<%k*2bCU15d!R@=r z$iub%@2Ef3h?-P{2q=J%0%(Lj+;_|OW&`rIW;u#41<>B)e^af=U=AsOe1oYzp7Th* zVqKbzEaByfrF1iI#dm$NIeV`kB*Lb8^`H?~08Irj8lZ(YCLV^zsaX3ox#$;Dif);< zDOkTudoSJNDiff0Vz!);wF}SpA30&eTG39J8WcdFdi0YDpsoNq3ZSb1dcu2mM+H!; z3d7W!re@XuR3p{=UgRtKzbTjhe^X6cRlkPSZ5><1>628yK*wYqeCiLTuHG~tb6!*? E0M-6_VE_OC literal 0 HcmV?d00001 diff --git a/core/src/main/res/mipmap-hdpi/ic_launcher_alarm_clock_round.webp b/core/src/main/res/mipmap-hdpi/ic_launcher_alarm_clock_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..cfb6e811e4509ed2d303b20489540accea1f76d6 GIT binary patch literal 3492 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 S|1ZSzKL5Rq&j~hz*i#A(Prh3K literal 0 HcmV?d00001 diff --git a/core/src/main/res/mipmap-hdpi/ic_launcher_calculator.webp b/core/src/main/res/mipmap-hdpi/ic_launcher_calculator.webp index 9a051fb50f1d378171c3d425a69fba39055ceff8..f06eb4768ba37eac9481c2288dd1bc58d487984c 100644 GIT binary patch literal 1128 zcmV-u1eg0#Nk&Fs1ONb6MM6+kP&iCf1ONapN5Byf_Xa7lZP&`$FaDf7U;sHd!x;u( z$S~h~7QqDMNRnJt)w^g7SI)SGgP4OKd^uBaBguBH%n|>ir3o%XK>h~FKmr=>Jp;G4 zZPm)$U-8VV;73RybU+7W#8g4p~7At0btAWHRJORuF`7eDb$!wS zl0+pDAlvQPoq9MedTAJ0cshX8Gzhs_rFm(*D=T_uqej08s%|Js-E*{r%mDpBfF#kY9zgEzj|=mx|L;0$ z+_wAs^>qC+FAue>jgbFz-%fq>RKs zk}?7b87T?V<|reL%d+gxBxzi?BxI%}JpH{Z)oO|0zgypY|5gow2xUuEj&f8DRqw5O z^siX{@M8tlYHR=h6e>{ls2+~z_Mh-lgpUjnxHRt!+1 zlypKlgesbYX`Gra49ji-BqB9kC|04vXqL`jS!oVh8{TYqGAe8QyUrw|e|{}SB@xbB zp*nu%x{*|J|9hd5`JcBy2ELhCz>8gwPW}21_{I$r#Uf{gB~InR8v2(*d*Q5{L;Euv zR^Qj}Km6i8%JLXzBi^FDDub1gnbqYBmn%scW^|sKKXQ<&s*DHtS<3(XC>1)3jh7A| ze|IH$#{KKTZ$(07^ckE<(tX0HeBkp|;C0Psbgd~dhuj%*56rbC8(p^QqlS*YcmwVF z1={YI(AM69Hukxro)}k`p)I`v?Gxu{2yXOQr!;8eDjoI4xO@-o?j_pi?d=$}H8*LW zx7SvnEx%gjA;B_aCcy|rV2i;PrD-H}<$L=!dghXBq4&MEfMh$p@5dP=Gfm+UG_bJNR`E1Wh^yDi zXgQohvOe3#RW#sw>3(uyy9UwV#kQSw!rfxPcicPR`=sfUr&TqDFkO-s%3R4QnmEeX%FtuwiKqQkuNMZUL+*hP*SP0pW z2!wtO?HY20WHOi_gX9Vla!uJVWkVnd{hCOU$(1A!3Z#Dz7rV-Ix11l}uMg|T{pz6C z=DXE;F>9Jbl#2OowK1NH)#2#HVJhd_72*s9$qdCf3&Yue!}QCS|EJuoi?r4+7aqM8h6-FzJHpyp2uj?zCzU%qwIrw@WA>Ft@K`SYH4 zF*LuV=7%6bkfd;?=AR}hCIuuZRvw%_9vh&(-1WkEF879fNcvym=86+NW|bA0D&sbV#@y9*ppXPd}Ab$0y03=<2f72SDgYX|iQ^+{H0 zFhl+Ti;j-D3{zD)Ii3Oe{p_8x8IZ4%Wgr8PJ82OEFhQ2ocD*>e)V4c7)Np1#IZl$O zS&Vy8Ge?LWVKOmAm!vrp9A|=ax_x73gnbX}QEfc27eVbX%~9cT|!|(`@EA zr@KWKCpTEg%yZkSWQ<_|W;UF{0A#CVAIE^1S$g_p)zEkzn^sK+(#Epv_DUHUbrST# zakZ*jlydg}phmOj4>5iRi8C0`p#?fb+(Ee zRE3P4B71F$SnV4{Ht1H13KSW$!o4m}h?{p!BhsoM8Jm6GLU^#s3A%js^79Xn-rvvj Yr;7;i?c?_!($mLpnp0gA)c&Ue0L?58&;S4c diff --git a/core/src/main/res/mipmap-hdpi/ic_launcher_calculator_round.webp b/core/src/main/res/mipmap-hdpi/ic_launcher_calculator_round.webp index 9191dbecaec23404d256c64cf5831b8c76cf56cf..61a7fc8f764431e07e751ffa54c2e39db0f10a31 100644 GIT binary patch literal 2374 zcmV-M3Ay%CNk&FK2><|BMM6+kP&iC72><{uN5Byf6^DYhZ6t?3?Cl;15itS2Hqnk# zQz&Itt|@QZen@tH(e|uj+qP}nwrz81+qP}nwvTWT}c-so3tIR&la(#r&O)?T&3$*cGdwr$(CjVai+ZB60Xwz2oE34j}0+cKqZ zcgQSq*Ua7B-F@ACaS8u@-|yqEU{lDu9$dM!|k}|WZ ztMpfBnR!WAR&u=HC}cslfy1)AJ;(F&js%F)q~Z$! z@bqW7!civ6XhSjxYC|wc!-hvu6hjSAsvye0-F^;0$R`O6fM*!TM-F5RPyx(391RBncwFKE9)BCJ zWMpVYmj_X{@%k+AxWEHEoj5Y&pn(!Jg2<8)NoVjljYkKDu{+B_lxPrbG-P5NXioBg zjafQUlq^LC(lHl2PVoT47#%4}n6eNBDVP8rCuk5!r=5|aq^TT1!|ZeeO;iYY{8%z% ziV~-CCNifY5JKV@Udcfe{u{-ZP!k~3v1*l2qYiQYEMO2*@|K{8;n5+AEpiZr$58{& z0Ajf+vJxxQ5sn44(HsGDu?sYZd=O3oOC1_QV;CKJzyl^zhdBZU2N|fFoYvrTEQ>a4Z^v^0!3j9l7q0~nPP*2cY4M-)M=0)wPxccXaXTfN~nzzGcmy%zqah~B?VQ?p za0t!3ZES25Du{Y#1CELi7#yUauyZ0I4j>+qGMohk#fV5hv34_o#WUF+tJNwah{YZ+ z+;0%zGYO+Hk>E8tIsl(49n!Fy1uE*`;6M&`XPys03*2%iG<^2SEMo#&Pr(tt1`zK} z&rOt$cWCCV!%Kl$GjQMQ13pkpf)>V4=Uo4Lq{=HM^Ej5AFrA3K6% zRGqOhfOIh*6k3eTk{YkTNCv@dSMYCdw#{wE7Ajx~LIhagYwWXU-pq0H(K2;={;8Lkg+Yh3NQ#CtsZr zp>i-M1y$0<8wUW11plPGL@I^U+HxJ9^Kd}~wI<>NAs`U|KqI*0vjtUgA;keuM6k$=FaY}wm;}Qvj$qVA`^*%fL3A?1^$(+nA(exQ_r%%3K$wJ} znYoEnR7@l?!c7cN`z4bToZs8w0+BE}4|iA`1bqi|!KCA5MGT?9&e#vIVE;lfcsNJ} zZ8PhDL?LJfix4q8pOH#n9lqs^H|!9iI3Yg?kqbh!i3H!SnZ2m22;elNR2PN)9h}qN zawZt}F#li|%Rx%$fW=qzh!Gvsk4=c0hUZpLNUxzsJk9nD+Q%F}I&ZQp0uBy@c10Zw zN==n)LkdiCq*k8fbhZ)SKX$4<2UXQF{EGI`9f9_-A0C`znSn(JteZJv8(w78SAyNc z_78|?EtM8}=j_8R;DEyfr7V02Ehgvv@i7AHCXK|(gRIu3fBRTRM2n^Q_|f=GX!#dG zaSUE01m;E8*+|8p07gN|7?Q;>Zx-gs0={{7&+qNG6-x`1}&}3pNm>`m9vf#?=3x0r7R= zM~LZ!6)BK96_O^^=SH^8T0-n0ekb^=CxDR9Ih&Iq^%zSkR#4xo6SiMh6@h+mCP6Km zz!lqP)m&8KE|xT`UF2D*YJ;^amO+pgoa?QKU_xTuOqq_fMc-7VpuV~F6r|O{^u3q# zg0sDq5k!bjLhmv8kOp)c&9SbEjnP*hnNLaR^VND@aK67{{0Y&7PQ7w^b}F{kV`5zq z8>4SM8x=ipj?nq%o&4ZRe@VFc5lLuM0b@tzRdUFt2UKUN0iA*6N91++j9cuFrTpMx zf?g`Ygg8RS7Fa$O-w$0>=a2z4R!pqQAQslQK6K3%SotI&ZnrO|h_&Xg*vy(RurOBwg=$Sdlo1UcGN9J*#T>R;GLYG(9%vu({n}Vdh1!I*> z;5USr4+!l}&x!6i(fju@8B-zSA2ol^iC&wZe(ndie-rbd7o_hk3iGe6iX|);A_$SU suldziYu^JUP&+7*l1J~h9HUIzs literal 2414 zcmV-!36b_vNk&Fy2><|BMM6+kP&iCl2><{uN5Byf^#+2rZR7BVz3rzE5fdQ4(L_70 zE{j=trgi=QA<6kgw{sQSwr$(im2KO$FKyd4##*bV3(Ge!C)L&esjAKk_(lI{)~K@? zobwNty{L1R|BlsRZMNd1W@A*es`ajewvi+`?$nO75bgkci0&Xqk|Zf|{nY|dFut(& z*%=Zf$u@24UF+GlZQHhO+qT~nzHQsa6rODxXP;)^wvnP_=3wa<-T*hYZPiWRC}uM= zGcz+YGuvX7@&9}GNxudUGewlTgP(ewYvvj|aK!8wa%9`8RZV~ESKJA~9cIqRUEoNP zq)7VzvzD2UCDNH8BKq&ZZ6rlXmU;IYbYDQd=E5*@VX8DujG$&NtX$X*5_Bxbj0nEv zW5`l3yjtGntD+&?^w_g6I^jEG4Dd@MVlCt(eB^1AbyLposx~FJO{tD#owfU4T${hY z-%GkQ6qg{Pvtpr2Aq=m4A*Y~@ zN}0P289?lxjcBiQk9M1F!$VYTRxdnLEY*g@Bs)sggOzsP0*t({Fi55T4V4Lxf+!6Y zj$@2zD)l zTG=Y)Gz^L~UDS?%s>3T5Zoo6V+QNV?k#5-{!A2R(XqC2?dKZ!m31@+qsGDJ{K9)j3 z)Fx?^3(vwN$pDi{_C&8YNgIMnj$9~XTc@IqzItAsTqYEuG&Y!HCFL15EL^TqOtZiW zypz1tt5s;IQn-aO^~`arUe)FL!5@uBY}Oe3ULCu!P?ifa?-1M=s2?@;a0NiU|USlH*ptKa%xQrw^7lnptkla z;mEA@)zL;}pplWNToYObI$S}-&>-A}k}{outbz%M%C}!y?*9TwG$k0*@VDypCiQU* zoAt1rS$cOsDE{wl{{czULb5bIUtWd(4_GF>EN2(rp?tj29)0d0S{?7Yv@;_x zj{cIL7fcR@w;zG}P^EC*40a5?9{~2bgfVIWR+I9$ViNf~9Nm1R3lJ|kl*EC``^t>1 zh*srVCU(4TQ28R){`>?R9`EwQS>|TgDq-`^L*(y>MZwj{IQj*SOq$h&Fa($;A`S(l zGW3#EvBY`GSiiJ~YZg)Q%L_`zdtbj@7S|_Y-p%Ww;m!meNHs{CsYZF7B3m1^RkDG+m zj0SyR^IS(sjH924wHMgg#SdX2ymyC7=Hbgvh5Zk-JAm*Ggip*6OEUh&uejZcLY(X7 z3=h?o?7!1XZ`t?zn6C+J(#!IW?+wBR6++RxRAF1<+YLpvo5KT?6Z4tcdIz$})W;?B zLMQ*ONP9e?ZcVSNpMc7v7{*XQ;y@At0&AuPI31IpmrlliZJu4&fsBt&hJ)d*4N5@cDQz*hq3O_}`yKcjbaq6p=E?hp)D*!Wu`v&Yb2+MU^ca%h2~* zBS0eVTu1=Ax77O%`6T9lQ(rG!2c2cpbl0bYRHe6w`(B@sP95< zb`f$2F{TvRh9W>?EhJqHxXU9AXzxo!W)Yq*6pX^_$$RWZjlC2yS`rap&W%j%?a5DW zd-PRIZnMR|5KSR|_0C~A9@^KRt}vESDrV^Hm0N~s|Ntl5wp50%=0*<|<}Ovk0Xzuy*1 z6)F~T3SxnW$vRXjlrG$##mjg%tWinrf&UhuVHV7V#MCGO8h}yZIETl^lYcy8=UpD( z*#6#?@rSgWs;!LLb6-!?^4%G4bN)R3yTK2D<*$Hd)47l+KtlzX6T_PunO>1b&6rc1Q@aTVb26-33&6vZ`QSKH0Gi{5hm}M00000 diff --git a/core/src/main/res/mipmap-hdpi/ic_launcher_notes.webp b/core/src/main/res/mipmap-hdpi/ic_launcher_notes.webp deleted file mode 100644 index 5df0b4bc6c2c73d08ff2ff200fa315cd99b94bf9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1390 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 diff --git a/core/src/main/res/mipmap-hdpi/ic_launcher_weather.webp b/core/src/main/res/mipmap-hdpi/ic_launcher_weather.webp index b80eb52b6e307e01788ce5d34fb657c451a0736d..e443d122da9a80fe54f32ade358cdd961562427d 100644 GIT binary patch literal 1126 zcmV-s1eyC%Nk&Fq1ONb6MM6+kP&iCd1ONapN5Byfj|Zo=ZP&`$=cVp<9)ymrE%J&3tnK2{*!XarQaF=Ii!>w&w zwKC89?%v1$sRIpoRkY=ySMiD5IRStG0RjYQgBl1BAV2{cpb7$%<=Y<1KLraED5M)q zBTY1b$&fS{A7ta3Mp(2reYQDQ_3=mv15K3lLo=8bFc^%2Qz&r+3Y0j75(;w*b8H;N z`M*VpK!F+h*z|Vg@B6@O;gmUa=l{-}tKM~9i#b)U!4c-%P+*F;!h$0>0tH7g$HplX zTmuu7I3*faSfD@wi2zds2xSz%P#F^Z!UkoS3?>_?7clfazF_jF#6U&&Rkg5>7cpw&DB3=lMrI4&LYg>6M#&b#{2` z`g7C&;XU{xq8WrdgNbP6rSkq!b$sg5j2A{_}3AW>b?K%zR*L4c6`Q__$G zf!d%JAuS>4AdtlREZdtTK|>Pj6Y4>dSf5ZESsx`0Bm!ALpt__Zi8PR)50<`0V0l0i z1QH+sd49QVFItwKt5sg~`Jw!c$IE_yX??F_xoat~_qKm{y8F5>y}TSH?l|Oc+h)qm z#!e=#gIbH)sh!$xY}U5jrnYSbwQbvOH~+$7=FB(MkB56A`tQJPBt>$T;TXT5`Tx$x zXi=d|yaLLbBXRIkWR$?=cC22ze$6`21e>Ii2SMDtA(c;okKZ_qF!+e#CO(--{3v_T z2gfL`;*(RDls0sw#)xG%hL!Z}sS=+3Xq6EqYl=Od<9Jrmg&91-Sazn9OkiggULjTn zJR5exmhrz+LeGwo9l8u)u6NsJ4Qo}aQ9q(ZrzDCCveAo;Y-F&mZmT}*UbpdW>KU*# z=?}dUwe!ryOSV(nqTAIr5NbRSRP^abzR03GWwa!6>m)#j?)o9?f=X5-so4Wg?lXk1 zXgSi*63pI*h*a@P1QC6K47!fUh3N3=bO(Cf9)HC_aCrm1u0XHbYlutXBrq%69&%Em zN>wdJ^=>eZz2qdYNU>63r7K%%&P*-mWJwq`@ln>o(>xh_^=|zVCKF2JreU%=hNOhklg&ADn>tJ+Qst#=ZO8yL~l( z$3Oq~+h6DRw#s1T_cW26nIz-b{a>3#GKt;)$9W|4)$~jjGSh}H<$vM$IJi#EN|PBR z3Uk~YBn_?=PM>Fw93p_1J!0-Br{x-aAKko{jF*ktgjo}wbIjZ3H sK|^5o-o?Yy3p|_b{7w>yefj$ByQv?FMJoLjD5hkQ*KkT=koX^!2p+d5$p8QV literal 2114 zcmV-I2)*}GNk&FG2mkA0qlc0gc?{ zV5z`R0sPd@U>-0|KxvZO!fkEaO0;oeDxm+0TtgoVCxjjpMv@G5$v@DaI|Sf1wry2e z-`#)sKOVY-4E>kGP(lAE05P~P&Hta@P=X%7F8}~LyuupJ_^fe1;|zLwq~1&PP5io8 zsz?DKRmT)HoaVU-pa)X_xJZ4wdCKb@&!zaq17HmWZQDo=f7shS5F%m%d~DKIvfW$c zz5T7un1;3)1dM=zP%{MU9ZG5~bpTp9l=0+y==ZVyhm{Xauz!82SX6OU z+qSCAb8&}u#JRK~26rC4B z|38kqOGWKmH}z1uSMDBn`(7mZB*O(f3)gW28aa?{o3^z!?!8CZvu)e9^=;eEeq`Io zY}>YN`#JVF8MT@S!$1N5 zJ@@B$Y>JTgUIbF`rQfey8)d2}ibO;aL+Vf_lInP0PL~S_W-wjl*M*@F0>(_wj4(Aj zx(NPYMgY@unh-Dg?>M0)z!V~+V|DeZUc_pGAE??%KuFBV=Vw#TW$E=HiU)=y7F67K z+?>z{CPCm1qY@XP6)6#bg~>?>7==Vx)aIqm!yu?R4Ec(AmSvI2y@(_XsBsj+AY`Y# z_iz_uY|b;|H)wv~`FU6{3SmMQU1d67lwD{AYk!mGV8dYYB`~9WtmR!@7^M*Fx+Dcm z`H{ujCFuxDnW)*6yDzAfhrB+4jsc)u4olSRSa=uu0b-W+QQ4dSBRIrVkb+WwF{26u zOe&Pkl?&m*x68b~vnokSHjUjJRWP@-z14$i)x=@lQav-6Z@i1O0~4T{rBr4%jMyAa z$W9*gdJGV56k*^*>_ceBQvd%nKThu--H&_Bg;3Z!@NwuY7$}}={rbWX9V}z%9|)7m z-qsJ((e1tS>69mkQz-PrcU4#g05GFpzm%`iel~)*v1gMY{*+En?Y6r8g#Z+2ADh9_ zM~xMR{saNEu8(XnKQP%Mg%yPm$*A95suxFCj6*y8JME8<5Lz$+ej4J#`EM0qP& z%AJl`wf?jzLm-u;6^{7f01^xQZ~c9H>-@_H*LP9`jzMAJ!!QXIr8&<#PbSwdNo9pi zfCY`c$j&fCA=t*xO1-`WmEIV{zHMUd2~WEE+|%YWmRtPDF8u?3rP*D>*xrw5!qgbNHYfU#rzfl>@Pym zfW|k@PE7OHcL4BxnxA*(xCwy3*7d(jAEAd4+U=*%;n~=iQ?;JEhbX;%_u|f*&i|i7 zRv?IKe!;mg0H}SMr~a|b1mdO?2&h6rVy{+V?c=9&^LE9TZ-MMA;(S4TYPQ~FS zsW(IeCB5dqXZl}s>VFg9$0B)%(z^D)b!MGRqQSs8QV4@`W83|WE%$Kj=zUpx4`?62 zaf~0WtOvxkw`-D&BfEJ0+6_VIxqIUExw*T!rRstgvPnTqh7u&fCaqm`4#K7ec5Ln- z_VnV!<}PVrAtS#r3?Njq3$DE&!CiC?(B1=gX?Y-7sey$atyqVmrpCS9EQ0`mrLbsH6CkDVl0vl11TZN-<0>2+ z;o&hvj(9c+Gq$jSruz$rF9n1l=d7xDJsAdYlM=z91D=`2}0UCRxaKt*xA57l<;?B2XA{UegE)f#Y zKq&uHda%O@6scl{&@cy30H?~8|4sdUkzg7e86TBGzWu7&oqYGVO@nNcD271)QFu)WeQ%SWxpnLF(IFnvW;Fpf&W__jzra3Ri92p0q`gOFaQ7m diff --git a/core/src/main/res/mipmap-hdpi/ic_launcher_weather_round.webp b/core/src/main/res/mipmap-hdpi/ic_launcher_weather_round.webp index 965fb4f44b990d6346efb20cdf4ca2b5f0c7dae5..56f0a569ea6142feb11ecb11f10426efe78b6403 100644 GIT binary patch literal 2728 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 literal 4198 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 literal 0 HcmV?d00001 diff --git a/core/src/main/res/mipmap-mdpi/ic_launcher_alarm_clock_round.webp b/core/src/main/res/mipmap-mdpi/ic_launcher_alarm_clock_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..a77cea837d25f87411921aa534adc3d173bd2216 GIT binary patch literal 2304 zcmV+b3IFy|Nk&Ha2mkZJ3xp?HvjcF#*l+iB`JV zwk@`mzlmcVXalDN_fv%C?zy|WySux)<0Hq4m|)iYYwZr+5buEWWaPSth$h31rnpD$ zgeSzA4v;3kkWiyt1DO+Zk!c7G=tO9=|7%AKQo^9C0^Bd{@ZQHc7ZzpdT(v9zP&a>b9He=f?TgB9!)Zt3DZQ82C zXWMpUBeQMW%4~js?HAkDb$%2-+t_DMfZY85*Ew-_t#Fsh-QC^Y-QC^Yy<>%VO5EKY z?#Uwg-#^)b)+##MWP-H#3WxMmR#8*(e39~&za@lNK#u04AW#0<>Ob z0^GIa(&9cwsIQC-fRsDt200Kl^8^WDzo)wXThw(W!<+r}T{w_G{_ z2-=twV!SlA_){ZJhvn%not}djHprs}c^u|#nN!}rl?}F(lEp(g5@un?ge?H57ujy! zDR)cKur4}McV;xx&6cb@eR22=&TC&k0YKOxGngX)sUMuFi?(&sn{I}h8S;L7+TB}h zDFJte#y}wk8iS)BT%w66mq;`7ss(U*MD+UO4ulf|1C0S&OrDxW;F4wrn)ol3xKm{+ zk!nM5C6EwQ0-zsMqnrLIRW<)p2s2aZ7Tr_>Bm|KFXy!qeq(>q3B++3qhk*nx8!$C= zXWTiC1q=V+jwv5M0|*Q>#^C^}c<2nrvD`7)ag&U|ag;?YndAfk+&|y|*&~0#u@cZ- zsdnAnG3aw;?L|pyOQ{)CXM5;Bl_`#6Co*_S>vtxtO<7vef4G}Enqq+)4cz^stKER1cSv)h4Ps14bDmOD`cUzUv@HlMUBOtWvZFDFTRyoRYVu zR$?*9aGga@8#k1xmy9$r@rYlk=JqIpr$h(kLuQQ^0F>3c=mRz)Rd9LG?gOm}12 zbniY?g$)QCBqP&JB?9VhH#ZslkP5#w7n=s#MLXP)0)6D@dF_vh%@U4dY(C`ddCsK6 zH}$rgrz&1();?Q+=!C;0a6u;d5HKc%0Ef!lCTTLfNti-a`=1ZTL2-`HfOdqOf^Jm0vzM2ziA^%E-?Ez#slu zh8Y_lz}XTbj(5zV<1tXfQ`kHuGLyR51P_q?HnNYMaQaJFzq|RaM*(}Ph{08w8#Rwm z!qWB!0QxIWs5BQME%Z}90Qi%jbWr3xGSLXeSFVSOfKfN`mrPf^3@@FIO=*vjY5{?O zmSQ!_&KhQ2wS0{bUa21_>u$w7OT_a%HMBw0S4qYqXE?>va$D_I#D_HtMr$Q}%xfuDEN+_`jd=!$D_;6@+Nf8M=UI3^ zqd28!xUsMsZfu(=Vwzaa#rq{ZppEPQe93re3@yu=vm$w+R0~`YN&zT3l16+MHecu5 z5MBY-1b<`LuXUa$UYPdIAFrd6I|^73?A2+5(K$bTp@s?;ZwTq2vk}jme2E#3@b^qM@`0nF$OY^nIIUDYjWR< zIZ)1zn;GcqZ?j5|s0mI2*Dqye)b6WeTN?&aMgRUfc|SGR)5M*NsSyY)7*Ow5Cf(tv zY5@UO%ZJHoQ~4PN))i)0vf8jR0~jD7dXOyGxh?f430N8^q%!ju1BPQ-Z{d>7CXiqv zZ!30I-egWVKRl!jm(RJ_v4S08z+yu0tc3l2CX3zYhex;W8UvP*qrq#Sv7HQ9jcEPF z6ko=MCRX}C53ZwS2CR2ZBaegsqMZzwzqnrRH$`P^aIrEGRK4G%pY!I?2;LdUJjs9t0}k!#M#sWP=%2~= zH48|vJi_Saba}YG`G(`OX literal 0 HcmV?d00001 diff --git a/core/src/main/res/mipmap-mdpi/ic_launcher_calculator.webp b/core/src/main/res/mipmap-mdpi/ic_launcher_calculator.webp index e603edf64f72fbda6aa12e37f33df2b3d8e98c19..f18d42a858cfa4477dbe23870fff5cd42428c134 100644 GIT binary patch literal 924 zcmV;N17rMBNk&GL0{{S5MM6+kP&iD70{{RoFTe{Brv*8(ZPm)!=L_!4C}!kA9OSBT z5QXb~_pCJF*0!yxTIbw{OXS29KnL_eJJk4F@XY1jyEok0wpAHw&vSdFwaKw4OW`DdeJo-KXCnvUP!A3CUG z`lo-aDye9NsCyV{#q6O2L!_aj6|Gp>H0qzxrcwXt*vsAU`mw)`vW{yQk}X-t)i`6o z#yU(Dt|uB_0}&&%S=(d_Q@zixofm1ZdG) zCz_4i3keAJ4+5qK8*c^)^<{Q)J}e*z!AYOj6U0ti3)RR!4y`tSSnHY*+Jr|kMaR;` zAV^?Ro{6d0%vAj<5FpuP2$1rnxNwuIiYkY)NL3q*D2LL$tsG+qdd*7l!kZX}^8KA0 z-Ba~ob<=YPcg^%uy51k9yuAvfMb z=3Zb_LLy!M6S}AA5!*Odw{Om$&}#FSW+O*F_-OH-@_uochFdO=BfWhPn1L}5T-o=g y^N)wQ&z?(Ay3Bd>)7e7kq^rlb-@kzA-wjtUg6#6u%^e&{3*lz}0uIRz2>}4d>d-s@ literal 846 zcmV-U1F`&4Nk&FS0{{S5MM6+kP&iCF0{{RoFTe{BcLgi5ZCBAck0c-m|04Lp426Ll z?%fM!OhAfk+qKf?kw%Q84m6<=KRC$Y-Mb(}lI^OR^Bz$_^zQ*3Xh1-QAMV+K69@o; z=x}#dCc-e$!ZVP7AVl)f-QisbCTXhe7ytx75JW%#1VIRt%mw%d|Cje?p`9aT{ws46 z*pUSh20@7c{=kVL#IAr0z&ry+E`XC+GLl6BRG2sI(!MIeA1>br(AgHrlx76x#K zKUN_nXCg02pip2EOePaafDDkqB#}%xiCPc(vKM2PL~3jBtVnNsLwz?>b|gVr0e#NF zWXcYbl&!vozG7@u0olj-9%hFrJ51T_^Z&1{MiTztL^4SP$wcToNRlZ#OjFzH`fisT zjww)6fBUD?_vm7N)KqRbsy`gl@B8mRJb&&wR7xo*gISrC^78WX1}VBfj7)8Qy}h01 zLQs>AFNxJuZFaMEdb_@vf!pVMlbzt<_1v|{HhBB|gxc+`kr@o~w{0`!X5wVMdk{O- z)<*24wr$())JB?GNzH%q%$e)V*X-}_7tw!4ZreDbFmu{o{~$7@qC(@K7lI%t1l=JB zgdQkkGO>}@ zOWxebX$u(eFM_8;iwq9=y(H4`>Ydu#QAYYNo$a=K*=nZG?UZrO$a&8H-*^5l)pS!; zBz9HDDgINj8P~;f^*@-iuqqah85WP#+|LaORrdFLbEnT_qrh_>{K(e)m~#uhe)((| Ye=Eq<{`iOU@{PlANN8KWz&MBu2}1guCjbBd diff --git a/core/src/main/res/mipmap-mdpi/ic_launcher_calculator_round.webp b/core/src/main/res/mipmap-mdpi/ic_launcher_calculator_round.webp index ed4e1a08f63e48e534c9f841dd1a44e6f1321b03..2fdcec7679d7fbb65d5d73085d94d94c4960c0ab 100644 GIT binary patch delta 1575 zcmV+?2H5%h46FojI59IbGcz+YzVGwoi-;WE zI^6{uymbr5#w(!AAffvwpj;D?PyyK@p}QMNaulhhmNftW(6V`GGBbmT5F1HSB$fXj z9y2pObXTQ;v~Bzg*#(@-`^W^qGA{)0P{XGd21F{tZ9u|O0^l_3 zfBaLR@=rFt8_;f@W*}i90ccFPBt5d#lSFHo0urV|U>(YtuAsTnu>=i+K*EFrC`_Iy z9s8&&ENA*tI7R|GO|Gs3SODe#=A?q263hqy=o?TKU`@FWmHkXL^|ABU@~P8;DrFzuualn5Y`}8s}W^pe-Wip z>}w}X*1{;YxL06NWO1*O(LoTB=Cb!7(oxLES>=ragC;SzXx33oQ!z-zD#~@DnJnAl zTJ((8KoG%tU^#C?@I-X@6k{o6u15yluoPMxn{PDJDA8;m{>!Qj@or)ot&KsD4u9Q5 zYVmj!OPM7V&gkUi-onWayo_;dxQ7E);rQCRsFW~sSG zDd+008gMZHfy*sm{1(@W3mB$?c|JD%xxVUfhy>)e?pOw=Ao*D z3BV96<}3rz6od>7@C^EW7K`@9C>r9mju#4y+K3#FyLa!_F^Jsm%HZWg?A$&iH)BN1U(9O_ z0?|K<(qL%K<$$D7EyFUke~XKY6gMI^8;C20#BZ+%Ns~Bc=pqgA`yd*wY4Dx__tmRc zx!tv)>xbC2y?ZQE;n%~j2HMm1y8uEI#(EJfsr(Z#DcDo%UNy|l z)*zsF-DxQDVTTZaV5s$@{XHGt1EvLgAE05A1zdwPBq01$# zdZ~aPQ!3+%F#%mUIHGGtM=h(Hg|`9fawX7~v9CD@hE6FchQ%<}pKL-^;II8bul)sp zI#`1AV=J>1lw*W2f61^fgLVn>#W?As6OZ!NU z7x4Vjd*u4Q@4NKgw+ne5#qmGSe{e1iyPY^gongvwElXTOx(2Z|0pWBMbGcf`{rl%; zpqPj-x%F#?+kbDzt3o1zAqO!qL+8KOZpeX85h98b89(*o4X^!oXHtZSaQfy}dvvP} ZoqU_2$^2h)H delta 1655 zcmV--28j8r4EzicQb|TebOrzbS4BclR!}%hXOR&af5*1AHFxt)!ZZeE7=lY21luJu zw9HHuGcz-W;WA1x&47N=^$4C+{02Hkr89it0YuAfma24r`-Pb<)$W1{c4k{E6>|o_ zNyn^k6i#Jy*tTsT=P2jy{vEb$8%W%L;=B8g1xElt(@kvKcBb0xX4|&4**t*lUcpAt zc8})Tf7X8!Ah))y<#GCEW->D~Gcz+YGuvH!@B8(u1T95|Q-YZ~P;4w?c(PGs&L%YD zzy9;gSFO^3U*P*ig@J-AJYmBrPf&I{IWvI1C!aIzbTp+?4Ap;ml!uvEX z!NoR4ToGUNFm^)wkg-m3p)G>_2qk7xfBhYXKMX$}kQ@`cxS3g~YFA@2^-(oH*u#L! zkyr=>R)X-6NIYexTK^WXjGCs{S24m`DyL8}xtinv);qT?o@z({9ugra&Bj|8R#MN^ zo)c_l43;xlfss^9u=XJUZ!sgAy%!XCfJDs6F>Pj;EY&&C)r#<8kY!{B$nRV`f9DiI zLI8?H+a>vizQ2**GqMW)3%H^&uvbda!EX;#e(b}KPrqdot3vP{}H^f1}YTgg;rZ<_Nfhw`13#emjtP%B?6gu2SYG8yO@% zvQ7vT&>K>GIrIxWY#v*#YS4jk2$Sk+ZHlbxrhhVE97=_UwJAD}UC{wUP>1kpF13{j zPAiN+k3UIbT?e%lDvIv5i9*4MsGEjAN}wF{xN-!wo>5JymQ$7k(v0n`e<_FOtkZYb zb}YVFjxJY8H~@i-sH0F~%NWbF{k8W01MS8EYrAo1*!`XZg20Q+L=dnN)c;4!tZq{e zE}V1N^JigSAbc`;mI$;o-kvhU*Y z?en>|Y;)%z1GBX`QJ^19e{UNO+TxZ}&ulXjZC|O=P6oi9$)DZRAJ#pSUk52*4yQ)c zOI>_10h9niI=Xh)WhPP>IBFLdwV$jNm@dz%eS!)B`TtO>`NXmqmQdZSaQLC>(N;z{ z+}&Eu0Na;ertPl%9Qv?F9)EUX{ptmxg0iHnbI z-{w1EGn5f%L9~sre^C3$dO(5$=u;!wcTJbFZZ2p7=3f%DKGyfhj}qe`vXq)At!8kw z)i7$|<)UQ&IKIgirPY%=?p<1^e!S7#3$aY86e;2>$o*UY^?wfpEeRa0s zE$j9pR4*r(E31+*qt4zl-*lDww}P?4?wjU&)7x1kvaY=QQ-m&hgCXdIzT znrepw+Nr7h|ZPQud#- zUt4z%^cMFJU3h{^XiE{*+S-QM+6#~mzAc+_;8C2A5`^x(|A$Rm_TBKj^pL`0{}Eu$cz!2AB*@QRwDb8hjQs*30|11} BCq4iG diff --git a/core/src/main/res/mipmap-mdpi/ic_launcher_notes.webp b/core/src/main/res/mipmap-mdpi/ic_launcher_notes.webp deleted file mode 100644 index f7ce450587d9d4517e6a78b32a58e380ad39003e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1092 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 E0Nl9ki2wiq diff --git a/core/src/main/res/mipmap-mdpi/ic_launcher_weather.webp b/core/src/main/res/mipmap-mdpi/ic_launcher_weather.webp index 33839218daef80a1bcc2b2eb1066a808e784d90a..98a2fe35bfda4977bcd8593c41e39692eb01af8f 100644 GIT binary patch literal 862 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 Q3LD#-m>;EW!@cCO65W&lx&QzG diff --git a/core/src/main/res/mipmap-mdpi/ic_launcher_weather_round.webp b/core/src/main/res/mipmap-mdpi/ic_launcher_weather_round.webp index d8a115c81b500f3c29b78679573599b7022c17c1..a68531042428d162bce6bb4468327a6877311b3a 100644 GIT binary patch literal 1788 zcmVU!)}e zpCVbw8@zV}TfTT}yMnvh%H0JU!QCBtyyU@(1Iz`ulXZ1=^$mV#;g*Hl0eXj2yg9&2 z+}*Vz-V%pqO|att?(SWK!}H$(aM|XHh$pyj46~7(Y)0pvCvXx6$=Wu<&bNshtii?- zGUOth44w2S8rrsP+qToXs`{(?W&;IRvTf7Wy=U)z?z3$(vXR-gZDlq;!1ntE8`nAG zXB+3N34oJr+gisw3SnkuW@ct)ZvSNaA^9!*5_-izO^|})AR_AE=qPIF-i_PW${F*G znW1jmcKmsNwrx)Nw`SX3R#ftqmTY@}!kTR)SKG$@9tTtb01R1weD)=~*{rtpkZil1 z#_J6R(zfw$WCF(JePjZV^&S-0{Ry=Dwv)$^@$qGkYvj0uqUtG(beCUiSIpey*k5|j zNk~_5E@B11_U|&AEO9tf4tZn~3K!kDz{2@VnDc}whEM>7I8C7rt1@BWQzq-6!1<{>5N=HntkpGf-CG_>##! z0Kf)Q!H}02(m@O;RB;!WkbY)z_v-WK7T=6ksD^m<+^MN#h~vCEe%Qi&85A^7%eT!$ zE>{NC1Yu2SL~|z95KokPBU!w?*1D$U9~~oK{?==&uX_iXa7SNz4@0{@fspd;Y@;`Z zGPw$**7+IRf}bhqmnsG3o#OuIuHH=x|2vlO{% zL3V;Wn>6am%w5@)_&@R*t;rLZZo;OP|0Yu=3&__%?hr8?Z6n9@4i{x|_dHVmZilIN z1UkspujW-`C~+gB4ZMwIiCe^gtls4m`o4k34!%_FrI`Q%cq#gsS9Jh(_N0iA`zupS z77q|`YfpRu8mK=F3&7j^SoA2eAzPag(#bwmxiUy_*G5j)1ds!l&ELRDJ%fO3N~1_` zfdK*;+)&F0tD0?_zs&s!gt1z^>aZ8u1Vi?eF?u3-N(iKln5csOIzUw*N>0NX03_uA`E3wpW z;c!EMY#}r~B4A%Cw}Spk<`O_qm@~y_&rb>fVhAwb&YPGCfE)=_A49a}5pK5R5|th- zlL=%HfKRxYE2#i0^fH0cpz=diCs(t7%pEkRk;6wRzdwDHW#qSWMc}Oj=&fRM=;~;w zCyZ9}z+?ksUnpeMy<{N)7HipFf6F9jp^oswU&Hd&8As|&h>HU3lgPUMb3UmQPSv7V-mf)hQ%!bPWckM81k3p1=vk)U@S%dW+7?Jt}!Wa zXTRSQ>m7eCe;KlkTM47j=&C4ZQu&|93osSn+Fp9xm|DBat!-`Mod4jCzOHumd;i9n z+jvoI>XKh>ZR@bJ1i1bG^0y^43OS5bQGm|>&&_Qj)TgzSh&ECqzj|}w+~@wkx~O90 eSbyn`Mwd($U3^)9rU327Pk*`iz_KqjvIYPZyme*( literal 2754 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 G;>D#zeR}Kw literal 0 HcmV?d00001 diff --git a/core/src/main/res/mipmap-xhdpi/ic_launcher_alarm_clock_round.webp b/core/src/main/res/mipmap-xhdpi/ic_launcher_alarm_clock_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..c0be2afb1f14cede6d1884bb898f90e78db513c2 GIT binary patch literal 4886 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 IwsAEC04NN9x&QzG literal 0 HcmV?d00001 diff --git a/core/src/main/res/mipmap-xhdpi/ic_launcher_calculator.webp b/core/src/main/res/mipmap-xhdpi/ic_launcher_calculator.webp index 82d0907717a7d7cf8baab0385467511f681bf946..e121135d26490bbb3109fa10141543b87a4db657 100644 GIT binary patch literal 1226 zcmV;*1U36oNk&G(1ONb6MM6+kP&iDr1ONapU%(d-m4<@0ZKRk#?Cl;15itSf*nbGx zty{}|`@hM}qmpZFn<6RyT`cYras>{tL&_nxkerO%C3eYNG7H%Vcb9RuGQ4a4s%WCW zds^rkW6(%aq?%oi_(2cS;9doc+D4LO>Vv1*?fL7#v2E?x^YXXtKenwhD-$qAla(@k z>Qu>SY*n_+Y}@v0MJK(qF7`gD^W2J^ zDoB!So3_qAYn{F3KcQ#aw%_|~J@g#5k)%kQe};F@%*@|CUHxa|wv8j|I@|j`fqJZ| zd6XKXn;_Q>g?3~`&S_H^B864t6lIE1!~ORIqFDEONf8pvNR}nnk|)VyV6-@xq@f~2 zPIFe&N%kZN;9x_cV6RGp*665AM6e%nz8F88Uke($u)@Jz;yRMVs530s!dPXVdmILF@7IE^8yVKMGqVEZi4`|@L z*d)X2DLMx@K;5CyD&KiIP8XnXfWAVrRlf6jh#o-q2{33u6Yz*Nw0h7KBZC@Hv}7$A z3tk@Jz3=$is0OAmsECXu40TYIPjmt^ey(^zH!`6vG8Rl>C1Jp*V8QjJq67Gvkg;?x z3G_?=c>}5k_!{CLvY|GU7Lv|jDmk#=R!YN?n*gc-J`x%r6>7vSleS9yK|Uo!!0gBV7uAgGutJPXK9JkMc-Ml#(BvkaZ%E=Lv~Y^+~N{Q)5?Mj z5cdY#%XG2*sqz1o*7$o{hwBy@l0IGWRe~<%E?4rFw7a*RldVYce#ci&V83oO{@?go z!N&%!^UC=4Ed$?+^95Yt?eW=wHhiwYq;1abKW6gZVEm~AkG4L!ed!@ICj2(!3LiRf z9G6DH)q#A>?!Qnos0P_WEw)+&%hX$9nR`p$VqgA#T|NKJ|KG14g$1v&m=f57O>U&7%Oll6ajhi~g4hpR&J#Z2#gKOMYjcR=vX__src|FjHO zSpb43vE&W#ZKLBo$8AVCKXHdYzG$KLCVxfLTTis93|`WfrG7dduS{-ahf_j5c=fcuFs@w2C31VhQmHAV^~e zIG2-2fu>pXZ)12D6FV6C&~`+L?M`hWqf@g{vhQco!Y03@MfsQ>@~ literal 1324 zcmV+{1=IRcNk&E_1pok7MM6+kP&iB%1pojqU%(d-wT6PWZJ3ll?X!a*A|?P7xz$_N zJRjv~+qPEGw+q~@q<1y|oo&Ej3s$+7?oQ>D?(XhR1ZH-S^8e?`U!Cd;8XR)Xak&__ zZ5uX5x$UN~ZQF+bUz|?Cv90ZRwf@+)ZChnlCSZ&vD`ooBsglvys%+!>zG~dIjl^DS z=lnp{w(V)#{BLGvW^OnsGc$9?U=06@*|Mxg-_eeyF_ylJif|)IQf$kL?x~)~3?gV` z#rw?aiw`-HBt??`V(spWNd@L(zKH0*1GkYB$vI~1**Bn$l>|xx4Iul!q}L-8^m^(f zFo+V^TO{01_17q6_VfOT_(A($`~yRng1G9U_F~<{x<1P4zf*(}xb67%+RiXdI)em3446qs0Gff8JqMoLkDT)Pree?CNFyZa}O0YO3 ziX>1t2%fK|%GIyJi2us^bkm@qoqW%t9g|7!o?bfp# zuaO*p>b9*+wUbAw;{#CS0Cb0AXR4h%3!DIe)^(()`O1MCF04oqwP|~C-pUdjRkcD& zgXjibnL^5sh}aNh1yur!2} zp!B~Rt(v2*1Q##WsfE=UcUfNnH&3uYv8`|J+BG;Pn+G-MR53Et8S~>sEn3uULfxK&TPB-d78PgeA|Ja8_the zaPSLiZuEXnndXKx`+_7cea|Zv-j`*x05!Lz*$2Z}=jZJ8{8R7}k|iw@5dm%d^J4Y! zV)af>8~uFbxGpzDQxia5_m5mnOl_`f!!rkZyGT(-_OMbV{Ov~FTRVAB)%rNtI&z;N zO?8+!omgr^=SBv8-ca4-8khUPNrtUnG${M-c^Nh-kt^vNmT6bSXr)ju2E)W7Cv zpUS-n$pMrYJgYUoF3|Y;dB3SY*}Zf1qkWEO8ASk~=71vyAhA#YaR%wBS{@ZB-wY56 zjthp?Dv`WB1}cCc8Gs3d18BmCHl#YTW-I=6yC=^nLwg7CG&drE0ti0volpW=zzCRRr@lSe?BA4wTO)u4 i$ZoK`5qKf=KqNEAr~biUL~6!o0ArAy diff --git a/core/src/main/res/mipmap-xhdpi/ic_launcher_calculator_round.webp b/core/src/main/res/mipmap-xhdpi/ic_launcher_calculator_round.webp index 47c0ff6b704c85ba6778f84c12f943ee05db30aa..8aff2e7f141d10db294ab3d2eae7abec635dee70 100644 GIT binary patch literal 3192 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 literal 3406 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 diff --git a/core/src/main/res/mipmap-xhdpi/ic_launcher_notes.webp b/core/src/main/res/mipmap-xhdpi/ic_launcher_notes.webp deleted file mode 100644 index bfc7357ab6fd02e4679f4d11a47a724572797c43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1908 zcmV-)2aEVpNk&F&2LJ$9MM6+kP&iCr2LJ#sU%(d-O_*uhMyd9-{0UDjhKT-80JA(u zX?dOkz6G+l_<5mJOV=W?F4#1Zi0HpnZ-U!I zk|ZfvdHuI9IQbQip*Z?K0d(H_2UZ9~e|gbX|0Du2MvM^&LP3H^Jz*RP0OW_rG&zC* z2r_X@BG+7BDgaLeneF8NlYW$8}Z96%(mghZKd*++(_X{hzwQZ}~GWWUf|MA$p3yq10 zD8kG5i-5lb=)lRHjLbcA|L&1cZQJrT*YhRmn0XTFVDr)GArCVV6IIbO17w z+qP+2eeHeD`?eJsC14F+_$%Tc|J8-0Kq!z3KqmeH1o(f| zpX_`(0Oev4y%wsm<2+=rQcJ!q-Dx%Fy|a51&^SjnV@!Uy#V*!~#6- z{jd`5t=M_4g4T1q_m}PXq4gllll&K{$cPLmTd}0K80h@y)32Ub1|M!ZeJgtcYH#1J zBAGXu8jC8ADhmZ^hyP~1^8LCA)?Iw`cCLRabf4ce#LA#lK~g1yJj`0BB(M6k-n(nV z68H(J4jczK=7{Oam{p20LWxYE+ZQ8g&F6l8{noky9@HnWc@hsTFNg0IEy&1o1rnj6A2Gn)r+Q8aE3jF^Kf_#B%0ocl6SjS zCfsqiagjPSgN1kz9E{Y@RVaVpt#Anr&Cm#m0wBh=B+7)-cZ9Lk>k4&929VxL03TC*-KH2~VA>`K^03{YBE)1_HmI43(2qn}AzMcgz z1pj!{i4YN-9|aUxl(-Bc?B1XI;^|9123N0~z+*XC!8QRU55<#O7!iHajW19m-8}mZgs6Oa} z4tCJ}Q`1{W=7JF1MY}-7I}&z4mxW~OngIb)&A6{z;XmxS`U=97r^O;jOa!*RCbsZ} zFY?a!DTRnhpP&grWwtLx1r2|I2?ZL-Wz7-)qi*(vAJxkh6%c3~j0FD|AlOcsoE_@t z=E!hz^I64wXh;ObUMfQqId|4c2}exRLWw3K6e7HC96h;28R|n{Qz%pvp#=LnN5mFR zXb$~P?d4y@4@FhN5|Y(D2}EV4BI<&aXqLn%3@O*;WT_5tfUT^SCoF>YEhvc~B!qMo z6IH>&a4_1as{+57wxHSa8dg>-WDnffOoiH*dU#^R8q9|j%Cl_=cR8!;Gy!Uv3WtaH zF(38dczuR=IeT)Nas)+Cs0a_0F0U)t1vjp0QBlk0=Ic-aN+PDC0VdFFq`RnHFa<&- zG(BvnX(Os;P;f95{5yy_K}Dsy8dS1HcoIXw);!N(8WX>cX)=fn*(lnc~_J zpEQ4>i-t_&pyuSUn5j|#VIBFbk4|kg`vJpDPm}QGiL)aK1IWWl2m<(P8mbfpa*@Ak zo6%?m0R?h5X>lcB$*Xd0V=9THklxkPFV4JGIkb*&(5%8};bZKgVF* zexjo{3|lq5dMl3NY}C3=2DQxPG`_q2YY2?l|Jaz_{XSFgXQ^8kr2@%OqO6g&q_Kk6 z-^q4l#s#ZCqwcu+sPTLq`rWfjLt)rA55}k8p6AN)7oM+t({HUBwW1i26j6*Aj?r#i z%@1pq+C8p9&xL+Xj*|q`3&F uU|{inL#Nk%*CLoAF_dDI?zq@&`sy$IhZYI|-UCPw=>-ZD=%IlBlMDdGX_Jxw diff --git a/core/src/main/res/mipmap-xhdpi/ic_launcher_notes_round.webp b/core/src/main/res/mipmap-xhdpi/ic_launcher_notes_round.webp deleted file mode 100644 index 7aea64d3b4e04ef23f6185350df143e240b46806..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4696 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 diff --git a/core/src/main/res/mipmap-xhdpi/ic_launcher_weather_round.webp b/core/src/main/res/mipmap-xhdpi/ic_launcher_weather_round.webp index 46897cd236b41e856311e9387f1b77f3a17503a9..ea7480dce49b2e5b6f118b8c3ae354d0e99011d1 100644 GIT binary patch literal 3834 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 literal 0 HcmV?d00001 diff --git a/core/src/main/res/mipmap-xxhdpi/ic_launcher_alarm_clock_round.webp b/core/src/main/res/mipmap-xxhdpi/ic_launcher_alarm_clock_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..636692579ebfae561c938b94069a6eabac9db1d8 GIT binary patch literal 7558 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 literal 0 HcmV?d00001 diff --git a/core/src/main/res/mipmap-xxhdpi/ic_launcher_calculator.webp b/core/src/main/res/mipmap-xxhdpi/ic_launcher_calculator.webp index cb14a36fb3c2fabbff06a20f6e82ee4788f41ee1..e088e5a1048d1ab241b5aa53673487ac3acec372 100644 GIT binary patch literal 1672 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 MGWH%pd?%$i0PiH@fdBvi diff --git a/core/src/main/res/mipmap-xxhdpi/ic_launcher_calculator_round.webp b/core/src/main/res/mipmap-xxhdpi/ic_launcher_calculator_round.webp index beced9702c189c759c50c2433af62c547bb00d08..c7ddc0efc369a228808f9b8f6d9faabbd0ac8662 100644 GIT binary patch literal 4662 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 I3Y{wg0OjLQTmS$7 diff --git a/core/src/main/res/mipmap-xxhdpi/ic_launcher_notes.webp b/core/src/main/res/mipmap-xxhdpi/ic_launcher_notes.webp deleted file mode 100644 index 5581723a39667870b6fb4a1313d048492796192d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2506 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 diff --git a/core/src/main/res/mipmap-xxhdpi/ic_launcher_weather.webp b/core/src/main/res/mipmap-xxhdpi/ic_launcher_weather.webp index abbad770e90efeaa3ece3cb7514aa74110a3ebbd..0250393fded467053fcdd61ae9019367b5f80c4e 100644 GIT binary patch literal 2180 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 Glwtt5WHYe< literal 3848 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 z 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 O5)?9F5)=|ex@%d;?hN4o literal 8174 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 literal 0 HcmV?d00001 diff --git a/core/src/main/res/mipmap-xxxhdpi/ic_launcher_alarm_clock_round.webp b/core/src/main/res/mipmap-xxxhdpi/ic_launcher_alarm_clock_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..7cdb3b33208ceb54399ce21de439c265ce003b39 GIT binary patch literal 10460 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 literal 2530 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 diff --git a/core/src/main/res/mipmap-xxxhdpi/ic_launcher_calculator_round.webp b/core/src/main/res/mipmap-xxxhdpi/ic_launcher_calculator_round.webp index f1e0c469317937c86152d8f473dbb9e2e4866042..843c5a8c251b539d507273eab49711a47776ded0 100644 GIT binary patch literal 6614 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 U3RQ?E2VE(Y9F*wwI2jWG0PtIhP5=M^ literal 7470 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 diff --git a/core/src/main/res/mipmap-xxxhdpi/ic_launcher_notes.webp b/core/src/main/res/mipmap-xxxhdpi/ic_launcher_notes.webp deleted file mode 100644 index 5fcfc35ab3daac13cbd55b823a7a56ac28726874..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4098 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 Ai2wiq diff --git a/core/src/main/res/mipmap-xxxhdpi/ic_launcher_notes_round.webp b/core/src/main/res/mipmap-xxxhdpi/ic_launcher_notes_round.webp deleted file mode 100644 index a0e89a21c09a275758723896691f10777f762a07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9678 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 literal 5026 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 literal 11048 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 diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml index f8aec39b5..fd20abf25 100644 --- a/core/src/main/res/values/strings.xml +++ b/core/src/main/res/values/strings.xml @@ -675,7 +675,7 @@ Default Weather - Notes + Alarm Clock Calculator Customize how the IVPN app appears on your device. Discreet icons can help disguise the presence of a VPN app on your phone. Discreet app icon