package com.vanced.manager.ui import android.content.Context import android.content.Intent import android.os.Bundle import android.util.Log import android.view.MenuItem import androidx.appcompat.app.AppCompatActivity import androidx.core.content.ContextCompat import androidx.databinding.DataBindingUtil import androidx.navigation.NavDestination import androidx.navigation.findNavController import androidx.navigation.ui.AppBarConfiguration import androidx.navigation.ui.setupWithNavController import androidx.preference.PreferenceManager.getDefaultSharedPreferences import com.crowdin.platform.Crowdin import com.crowdin.platform.LoadingStateListener import com.google.firebase.messaging.FirebaseMessaging import com.vanced.manager.R import com.vanced.manager.databinding.ActivityMainBinding import com.vanced.manager.ui.dialogs.DialogContainer import com.vanced.manager.ui.fragments.HomeFragmentDirections import com.vanced.manager.ui.fragments.SettingsFragmentDirections import com.vanced.manager.ui.fragments.UpdateCheckFragment import com.vanced.manager.utils.AppUtils.installing import com.vanced.manager.utils.InternetTools import com.vanced.manager.utils.LanguageContextWrapper import com.vanced.manager.utils.PackageHelper import com.vanced.manager.utils.ThemeHelper.setFinalTheme import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch class MainActivity : AppCompatActivity() { lateinit var binding: ActivityMainBinding private val navHost by lazy { findNavController(R.id.nav_host) } private val loadingObserver = object : LoadingStateListener { val tag = "VMLocalisation" override fun onDataChanged() { Log.d(tag, "Loaded data") } override fun onFailure(throwable: Throwable) { Log.d(tag, "Failed to load data") } } override fun onCreate(savedInstanceState: Bundle?) { setFinalTheme(this) super.onCreate(savedInstanceState) binding = DataBindingUtil.setContentView(this, R.layout.activity_main) with(binding) { lifecycleOwner = this@MainActivity setSupportActionBar(homeToolbar) homeToolbar.setupWithNavController(this@MainActivity.navHost, AppBarConfiguration(this@MainActivity.navHost.graph)) } navHost.addOnDestinationChangedListener { _, currFrag: NavDestination, _ -> setDisplayHomeAsUpEnabled(currFrag.id != R.id.home_fragment) } initDialogs() } override fun onBackPressed() { if (!navHost.popBackStack()) finish() } private fun setDisplayHomeAsUpEnabled(isNeeded: Boolean) { binding.homeToolbar.navigationIcon = if (isNeeded) ContextCompat.getDrawable(this, R.drawable.ic_keyboard_backspace_black_24dp) else null } override fun onPause() { super.onPause() Crowdin.unregisterDataLoadingObserver(loadingObserver) } override fun onResume() { setFinalTheme(this) super.onResume() Crowdin.registerDataLoadingObserver(loadingObserver) } override fun onOptionsItemSelected(item: MenuItem): Boolean { if (installing.value!!) return false when (item.itemId) { android.R.id.home -> { onBackPressedDispatcher.onBackPressed() return true } R.id.toolbar_about -> { navHost.navigate(HomeFragmentDirections.toAboutFragment()) return true } R.id.toolbar_settings -> { navHost.navigate(HomeFragmentDirections.toSettingsFragment()) return true } R.id.dev_settings -> { navHost.navigate(SettingsFragmentDirections.toDevSettingsFragment()) return true } else -> super.onOptionsItemSelected(item) } return false } override fun attachBaseContext(newBase: Context) { super.attachBaseContext(LanguageContextWrapper.wrap(newBase)) } private fun initDialogs() { val prefs = getDefaultSharedPreferences(this) val variant = prefs.getString("vanced_variant", "nonroot") prefs.getBoolean("show_root_dialog", true) when { prefs.getBoolean("firstStart", true) -> { DialogContainer.showSecurityDialog(this) with(FirebaseMessaging.getInstance()) { subscribeToTopic("Vanced-Update") subscribeToTopic("MicroG-Update") } } !prefs.getBoolean("statement", true) -> DialogContainer.statementFalse(this) variant == "root" -> { if (PackageHelper.getPackageVersionName( "com.google.android.youtube", packageManager ) == "14.21.54") DialogContainer.basicDialog( getString(R.string.hold_on), getString(R.string.magisk_vanced), this ) } } checkUpdates() } private fun checkUpdates() { CoroutineScope(Dispatchers.Main).launch { if (InternetTools.isUpdateAvailable()) { UpdateCheckFragment().show(supportFragmentManager, "UpdateCheck") } } } }