diff --git a/app/src/main/java/com/vanced/manager/core/App.kt b/app/src/main/java/com/vanced/manager/core/App.kt index 7856cd23..39d56939 100644 --- a/app/src/main/java/com/vanced/manager/core/App.kt +++ b/app/src/main/java/com/vanced/manager/core/App.kt @@ -11,6 +11,7 @@ import com.vanced.manager.utils.InternetTools.baseUrl import com.vanced.manager.utils.JsonHelper.getJson import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.async import kotlinx.coroutines.launch open class App: Application() { @@ -21,20 +22,23 @@ open class App: Application() { var manager: JsonObject? = null override fun onCreate() { - loadJson() - super.onCreate() - PRDownloader.initialize(this) + CoroutineScope(Dispatchers.IO).launch { + loadJsonAsync().await() + super.onCreate() + PRDownloader.initialize(this@App) + + Crowdin.init(this@App, + CrowdinConfig.Builder() + .withDistributionHash("36c51aed3180a4f43073d28j4s6") + .withNetworkType(NetworkType.WIFI) + .build() + ) + } - Crowdin.init(this, - CrowdinConfig.Builder() - .withDistributionHash("36c51aed3180a4f43073d28j4s6") - .withNetworkType(NetworkType.WIFI) - .build() - ) } - fun loadJson() = CoroutineScope(Dispatchers.IO).launch { + fun loadJsonAsync() = CoroutineScope(Dispatchers.IO).async { val latest = getJson("$baseUrl/latest.json") vanced = latest.obj("vanced") music = latest.obj("music") diff --git a/app/src/main/java/com/vanced/manager/model/DataModel.kt b/app/src/main/java/com/vanced/manager/model/DataModel.kt index 2d58a5e6..2db9f0d1 100644 --- a/app/src/main/java/com/vanced/manager/model/DataModel.kt +++ b/app/src/main/java/com/vanced/manager/model/DataModel.kt @@ -12,7 +12,7 @@ import com.vanced.manager.R import com.vanced.manager.utils.PackageHelper.isPackageInstalled open class DataModel( - jsonObject: JsonObject?, + private val jsonObject: JsonObject?, variant: String = "nonroot", app: String, private val context: Context @@ -35,7 +35,7 @@ open class DataModel( val buttonIcon = ObservableField() val changelog = ObservableField() - init { + fun fetch() { isAppInstalled.set(isPackageInstalled(appPkg, context.packageManager)) versionName.set(jsonObject?.string("version")?.removeSuffix("-vanced") ?: context.getString(R.string.unavailable)) installedVersionName.set(getPkgVersionName(isAppInstalled.get(), appPkg)) @@ -45,6 +45,10 @@ open class DataModel( buttonIcon.set(compareIntDrawable(installedVersionCode.get(), versionCode.get())) changelog.set(jsonObject?.string("changelog") ?: context.getString(R.string.unavailable)) } + + init { + fetch() + } private fun getPkgVersionName(toCheck: Boolean, pkg: String): String { return if (toCheck) { diff --git a/app/src/main/java/com/vanced/manager/ui/MainActivity.kt b/app/src/main/java/com/vanced/manager/ui/MainActivity.kt index 64acaef4..b190c3f9 100644 --- a/app/src/main/java/com/vanced/manager/ui/MainActivity.kt +++ b/app/src/main/java/com/vanced/manager/ui/MainActivity.kt @@ -4,17 +4,19 @@ import android.content.Context import android.os.Bundle import android.util.Log import android.view.MenuItem +import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.databinding.DataBindingUtil +import androidx.navigation.fragment.NavHostFragment import androidx.preference.PreferenceManager.getDefaultSharedPreferences import com.crowdin.platform.Crowdin import com.crowdin.platform.LoadingStateListener import com.google.android.material.tabs.TabLayout import com.google.android.material.tabs.TabLayoutMediator import com.google.firebase.messaging.FirebaseMessaging +import com.topjohnwu.superuser.Shell import com.vanced.manager.R import com.vanced.manager.adapter.SectionVariantAdapter -import com.vanced.manager.core.App import com.vanced.manager.databinding.ActivityMainBinding import com.vanced.manager.ui.dialogs.DialogContainer import com.vanced.manager.ui.fragments.UpdateCheckFragment @@ -45,6 +47,12 @@ class MainActivity : AppCompatActivity() { private val tabListener = object : TabLayout.OnTabSelectedListener { override fun onTabSelected(tab: TabLayout.Tab) { + if (tab.position == 1 && !Shell.rootAccess()) { + tab.select(0) + Toast.makeText(this@MainActivity, getString(R.string.root_not_granted), Toast.LENGTH_SHORT).show() + return + } + getDefaultSharedPreferences(this@MainActivity).edit().putString("vanced_variant", when (tab.position) { 1 -> "root" @@ -104,6 +112,12 @@ class MainActivity : AppCompatActivity() { binding.mainTablayout.addOnTabSelectedListener(tabListener) } + override fun onBackPressed() { + super.onBackPressed() + val navHost = supportFragmentManager.findFragmentById(R.id.nav_host) as NavHostFragment + navHost.navController.popBackStack() + } + override fun onOptionsItemSelected(item: MenuItem): Boolean { if (installing) { return false @@ -131,10 +145,14 @@ class MainActivity : AppCompatActivity() { super.attachBaseContext(Crowdin.wrapContext(newBase)) } + fun TabLayout.Tab.select(position: Int) { + this.parent?.getTabAt(position)?.select() + } + private fun initDialogs() { val prefs = getDefaultSharedPreferences(this) val variant = prefs.getString("vanced_variant", "nonroot") - val showRootDialog = prefs.getBoolean("show_root_dialog", true) + prefs.getBoolean("show_root_dialog", true) when { prefs.getBoolean("firstStart", true) -> { diff --git a/app/src/main/java/com/vanced/manager/ui/fragments/HomeFragment.kt b/app/src/main/java/com/vanced/manager/ui/fragments/HomeFragment.kt index f7708228..48c917b3 100644 --- a/app/src/main/java/com/vanced/manager/ui/fragments/HomeFragment.kt +++ b/app/src/main/java/com/vanced/manager/ui/fragments/HomeFragment.kt @@ -153,6 +153,7 @@ open class HomeFragment : Fragment(), View.OnClickListener { private fun registerReceivers() { val intentFilter = IntentFilter() intentFilter.addAction(INSTALL_FAILED) + intentFilter.addAction(REFRESH_HOME) localBroadcastManager.registerReceiver(broadcastReceiver, intentFilter) } diff --git a/app/src/main/java/com/vanced/manager/ui/fragments/MainFragment.kt b/app/src/main/java/com/vanced/manager/ui/fragments/MainFragment.kt index 79f87b5a..dca5f541 100644 --- a/app/src/main/java/com/vanced/manager/ui/fragments/MainFragment.kt +++ b/app/src/main/java/com/vanced/manager/ui/fragments/MainFragment.kt @@ -67,6 +67,8 @@ class MainFragment : Fragment() { findViewById(R.id.home_toolbar).navigationIcon = if (isNeeded) ContextCompat.getDrawable(requireActivity(), R.drawable.ic_keyboard_backspace_black_24dp) else null } } + + override fun onOptionsItemSelected(item: MenuItem): Boolean { when (item.itemId) { diff --git a/app/src/main/java/com/vanced/manager/ui/viewmodels/HomeViewModel.kt b/app/src/main/java/com/vanced/manager/ui/viewmodels/HomeViewModel.kt index d15c0da9..0926b343 100644 --- a/app/src/main/java/com/vanced/manager/ui/viewmodels/HomeViewModel.kt +++ b/app/src/main/java/com/vanced/manager/ui/viewmodels/HomeViewModel.kt @@ -27,7 +27,6 @@ import com.vanced.manager.utils.PackageHelper.uninstallApk import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch -import okhttp3.internal.wait open class HomeViewModel(application: Application): AndroidViewModel(application) { @@ -47,13 +46,15 @@ open class HomeViewModel(application: Application): AndroidViewModel(application val navigateDestination : LiveData> = _navigateDestination - fun fetchData() { - CoroutineScope(Dispatchers.IO).launch { - fetching.set(true) - managerApp.loadJson() - Crowdin.forceUpdate(getApplication()) - fetching.set(false) - } + fun fetchData() = CoroutineScope(Dispatchers.IO).launch { + fetching.set(true) + managerApp.loadJsonAsync().await() + vanced.get()?.fetch() + music.get()?.fetch() + microg.get()?.fetch() + manager.get()?.fetch() + Crowdin.forceUpdate(getApplication()) + fetching.set(false) } //private val microgSnackbar = Snackbar.make(, R.string.no_microg, Snackbar.LENGTH_LONG).setAction(R.string.install) { downloadMicrog(getApplication()) } @@ -143,8 +144,9 @@ open class HomeViewModel(application: Application): AndroidViewModel(application init { fetching.set(true) - while (managerApp.manager == null) - this.wait() + //while (managerApp.manager == null) + //this.wait() + vanced.set(DataModel(managerApp.vanced, variant, "vanced", app)) microg.set(DataModel(managerApp.microg, app = "microg", context = app)) music.set(DataModel(managerApp.music, app = "music", context = app)) diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 2b59313e..40131168 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -21,7 +21,7 @@ android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:titleTextColor="?attr/toolbarIconColor" - android:background="@android:color/transparent"/> + android:background="?colorSurface"/>