diff --git a/V2rayNG/app/src/main/java/xyz/zarazaex/olc/ui/CheckUpdateActivity.kt b/V2rayNG/app/src/main/java/xyz/zarazaex/olc/ui/CheckUpdateActivity.kt index 6d48739c..0c2016a5 100644 --- a/V2rayNG/app/src/main/java/xyz/zarazaex/olc/ui/CheckUpdateActivity.kt +++ b/V2rayNG/app/src/main/java/xyz/zarazaex/olc/ui/CheckUpdateActivity.kt @@ -34,7 +34,8 @@ class CheckUpdateActivity : BaseActivity() { binding.checkPreRelease.setOnCheckedChangeListener { _, isChecked -> MmkvManager.encodeSettings(AppConfig.PREF_CHECK_UPDATE_PRE_RELEASE, isChecked) } - binding.checkPreRelease.isChecked = MmkvManager.decodeSettingsBool(AppConfig.PREF_CHECK_UPDATE_PRE_RELEASE, false) + binding.checkPreRelease.isChecked = true + MmkvManager.encodeSettings(AppConfig.PREF_CHECK_UPDATE_PRE_RELEASE, true) "v${BuildConfig.VERSION_NAME} (${V2RayNativeManager.getLibVersion()})".also { binding.tvVersion.text = it diff --git a/V2rayNG/app/src/main/java/xyz/zarazaex/olc/ui/MainActivity.kt b/V2rayNG/app/src/main/java/xyz/zarazaex/olc/ui/MainActivity.kt index 2e0f2ca2..f4b79ace 100644 --- a/V2rayNG/app/src/main/java/xyz/zarazaex/olc/ui/MainActivity.kt +++ b/V2rayNG/app/src/main/java/xyz/zarazaex/olc/ui/MainActivity.kt @@ -32,6 +32,7 @@ import xyz.zarazaex.olc.handler.AngConfigManager import xyz.zarazaex.olc.handler.MmkvManager import xyz.zarazaex.olc.handler.SettingsChangeManager import xyz.zarazaex.olc.handler.SettingsManager +import xyz.zarazaex.olc.handler.UpdateCheckerManager import xyz.zarazaex.olc.handler.V2RayServiceManager import xyz.zarazaex.olc.util.Utils import xyz.zarazaex.olc.viewmodel.MainViewModel @@ -72,12 +73,10 @@ class MainActivity : HelperBaseActivity(), NavigationView.OnNavigationItemSelect setContentView(binding.root) setupToolbar(binding.toolbar, false, getString(R.string.title_server)) - // setup viewpager and tablayout groupPagerAdapter = GroupPagerAdapter(this, emptyList()) binding.viewPager.adapter = groupPagerAdapter binding.viewPager.isUserInputEnabled = true - // setup navigation drawer val toggle = ActionBarDrawerToggle( this, binding.drawerLayout, binding.toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close ) @@ -85,7 +84,6 @@ class MainActivity : HelperBaseActivity(), NavigationView.OnNavigationItemSelect toggle.syncState() binding.navView.setNavigationItemSelectedListener(this) - // Bottom drawer buttons findViewById(R.id.drawer_settings)?.setOnClickListener { requestActivityLauncher.launch(Intent(this, SettingsActivity::class.java)) binding.drawerLayout.closeDrawer(androidx.core.view.GravityCompat.START) @@ -150,11 +148,12 @@ class MainActivity : HelperBaseActivity(), NavigationView.OnNavigationItemSelect setupGroupTab() setupViewModel() mainViewModel.reloadServerList() - // Automatically update subscriptions on launch importConfigViaSub() checkAndRequestPermission(PermissionType.POST_NOTIFICATIONS) { } + + checkForUpdatesOnStartup() } private fun setupViewModel() { @@ -646,6 +645,32 @@ class MainActivity : HelperBaseActivity(), NavigationView.OnNavigationItemSelect super.onDestroy() } + private fun checkForUpdatesOnStartup() { + lifecycleScope.launch { + try { + val result = UpdateCheckerManager.checkForUpdate(true) + if (result.hasUpdate) { + showUpdateAvailableDialog(result) + } + } catch (e: Exception) { + Log.e(AppConfig.TAG, "Failed to check for updates on startup: ${e.message}") + } + } + } + + private fun showUpdateAvailableDialog(result: xyz.zarazaex.olc.dto.CheckUpdateResult) { + AlertDialog.Builder(this) + .setTitle(getString(R.string.update_new_version_found, result.latestVersion)) + .setMessage(result.releaseNotes) + .setPositiveButton(R.string.update_now) { _, _ -> + result.downloadUrl?.let { + Utils.openUri(this, it) + } + } + .setNegativeButton(android.R.string.ok, null) + .show() + } + private fun activateEasterEgg() { if (isEasterEggActive) return isEasterEggActive = true