Merge pull request #70 from Skrilltrax/use-databinding

Update app to use databinding at more places
This commit is contained in:
Tornike Khintibidze 2020-07-04 17:52:03 +04:00 committed by GitHub
commit ef0863649b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 231 additions and 266 deletions

View File

@ -13,7 +13,6 @@ import androidx.navigation.NavDestination
import androidx.navigation.findNavController
import androidx.navigation.ui.AppBarConfiguration
import androidx.navigation.ui.setupWithNavController
import com.google.android.material.appbar.MaterialToolbar
import com.vanced.manager.R
import com.vanced.manager.core.Main
import com.vanced.manager.databinding.ActivityMainBinding
@ -24,36 +23,9 @@ import com.vanced.manager.utils.ThemeHelper.setFinalTheme
class MainActivity : Main() {
private var isParent = true
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
setFinalTheme(this)
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
binding.lifecycleOwner = this
val toolbar: MaterialToolbar = findViewById(R.id.home_toolbar)
setSupportActionBar(toolbar)
val navHost = findNavController(R.id.bottom_nav_host)
val appBarConfiguration = AppBarConfiguration(navHost.graph)
toolbar.setupWithNavController(navHost, appBarConfiguration)
navHost.addOnDestinationChangedListener{_, currFrag: NavDestination, _ ->
isParent = when (currFrag.id) {
R.id.home_fragment -> true
else -> false
}
setDisplayHomeAsUpEnabled(!isParent)
}
registerReceivers()
}
private val navHost by lazy { findNavController(R.id.bottom_nav_host) }
private val localBroadcastManager by lazy { LocalBroadcastManager.getInstance(this) }
private val broadcastReceiver: BroadcastReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
@ -74,9 +46,26 @@ class MainActivity : Main() {
}
}
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)
val appBarConfiguration = AppBarConfiguration(navHost.graph)
homeToolbar.setupWithNavController(navHost, appBarConfiguration)
}
navHost.addOnDestinationChangedListener { _, currFrag: NavDestination, _ ->
setDisplayHomeAsUpEnabled(currFrag.id == R.id.home_fragment)
}
}
override fun onPause() {
super.onPause()
LocalBroadcastManager.getInstance(this).unregisterReceiver(broadcastReceiver)
localBroadcastManager.unregisterReceiver(broadcastReceiver)
}
override fun onResume() {
@ -100,7 +89,7 @@ class MainActivity : Main() {
navHost.navigate(R.id.action_settingsFragment)
return true
}
R.id.dev_settings -> {
R.id.dev_settings -> {
navHost.navigate(R.id.toDevSettingsFragment)
return true
}
@ -110,11 +99,8 @@ class MainActivity : Main() {
}
private fun setDisplayHomeAsUpEnabled(isNeeded: Boolean) {
val toolbar: MaterialToolbar = findViewById(R.id.home_toolbar)
when {
isNeeded -> toolbar.setNavigationIcon(R.drawable.ic_keyboard_backspace_black_24dp)
else -> toolbar.navigationIcon = null
}
binding.homeToolbar.navigationIcon = if (isNeeded) getDrawable(R.drawable.ic_keyboard_backspace_black_24dp) else null
}
private fun registerReceivers() {
@ -123,7 +109,7 @@ class MainActivity : Main() {
intentFilter.addAction(INSTALL_FAILED)
intentFilter.addAction(APP_UNINSTALLED)
intentFilter.addAction(APP_NOT_UNINSTALLED)
LocalBroadcastManager.getInstance(this).registerReceiver(broadcastReceiver, intentFilter)
localBroadcastManager.registerReceiver(broadcastReceiver, intentFilter)
}
@ -134,9 +120,9 @@ class MainActivity : Main() {
}
companion object {
const val INSTALL_COMPLETED = "Installation completed"
const val INSTALL_FAILED = "it just failed idk"
const val APP_UNINSTALLED = "App uninstalled"
const val APP_NOT_UNINSTALLED = "App not uninstalled"
const val INSTALL_COMPLETED = "install_completed"
const val INSTALL_FAILED = "install_failed"
const val APP_UNINSTALLED = "app_uninstalled"
const val APP_NOT_UNINSTALLED = "app_not_installed"
}
}

View File

@ -19,7 +19,7 @@ class AboutFragment : About() {
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
activity?.title = getString(R.string.title_about)
requireActivity().title = getString(R.string.title_about)
binding = DataBindingUtil.inflate(inflater, R.layout.fragment_about, container, false)
return binding.root
}

View File

@ -7,50 +7,41 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button
import android.widget.TextView
import androidx.core.content.edit
import androidx.databinding.DataBindingUtil
import androidx.fragment.app.DialogFragment
import com.vanced.manager.R
import com.vanced.manager.databinding.FragmentChosenPreferencesBinding
class ChosenPreferenceDialogFragment : DialogFragment() {
private lateinit var binding: FragmentChosenPreferencesBinding
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
if (dialog != null && dialog?.window != null) {
dialog?.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
}
return inflater.inflate(R.layout.fragment_chosen_preferences, container, false)
dialog?.window?.apply { setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) }
binding = DataBindingUtil.inflate(inflater, R.layout.fragment_chosen_preferences, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val closebtn = view.findViewById<Button>(R.id.chosen_prefs_close)
val resetbtn = view.findViewById<Button>(R.id.chosen_prefs_reset)
val themetxt = view.findViewById<TextView>(R.id.chosen_theme)
val langtxt = view.findViewById<TextView>(R.id.chosen_lang)
val prefs = requireActivity().getSharedPreferences("installPrefs", Context.MODE_PRIVATE)
val prefs = activity?.getSharedPreferences("installPrefs", Context.MODE_PRIVATE)
binding.chosenTheme.text = requireActivity().getString(R.string.chosen_theme, prefs.getString("theme", "dark"))
binding.chosenLang.text = requireActivity().getString(R.string.chosen_lang, prefs.getString("lang", "en"))
themetxt.text = activity?.getString(R.string.chosen_theme, prefs?.getString("theme", "dark"))
langtxt.text = activity?.getString(R.string.chosen_lang, prefs?.getString("lang", "en"))
closebtn.setOnClickListener { dismiss() }
resetbtn.setOnClickListener {
prefs?.edit()?.putString("theme", "dark")?.apply()
prefs?.edit()?.putString("lang", "en")?.apply()
prefs?.edit()?.putBoolean("valuesModified", false)?.apply()
binding.chosenPrefsClose.setOnClickListener { dismiss() }
binding.chosenPrefsReset.setOnClickListener {
prefs.edit {
putString("theme", "dark")
putString("lang", "en")
putBoolean("valuesModified", false)
}
dismiss()
}
}
}

View File

@ -6,20 +6,13 @@ import android.graphics.Color
import android.os.Bundle
import android.view.*
import android.view.animation.AccelerateDecelerateInterpolator
import android.widget.ImageButton
import android.widget.ProgressBar
import android.widget.Toast
import androidx.databinding.DataBindingUtil
import androidx.fragment.app.viewModels
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import androidx.preference.PreferenceManager.getDefaultSharedPreferences
import androidx.viewpager2.widget.ViewPager2
import com.google.android.material.button.MaterialButton
import com.google.android.material.card.MaterialCardView
import com.google.android.material.tabs.TabLayout
import com.google.android.material.tabs.TabLayoutMediator
import com.vanced.manager.R
import com.vanced.manager.adapter.SectionPageAdapter
import com.vanced.manager.adapter.SectionPageRootAdapter
import com.vanced.manager.core.fragments.Home
import com.vanced.manager.databinding.FragmentHomeBinding
@ -29,12 +22,14 @@ class HomeFragment : Home() {
private lateinit var binding: FragmentHomeBinding
private var isExpanded: Boolean = false
private val viewModel: HomeViewModel by viewModels()
private val localBroadcastManager by lazy { LocalBroadcastManager.getInstance(requireActivity()) }
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
activity?.title = getString(R.string.title_home)
requireActivity().title = getString(R.string.title_home)
setHasOptionsMenu(true)
binding = DataBindingUtil.inflate(inflater, R.layout.fragment_home, container, false)
return binding.root
@ -42,8 +37,6 @@ class HomeFragment : Home() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val viewModel: HomeViewModel by viewModels()
binding.viewModel = viewModel
val variantPref = getDefaultSharedPreferences(activity).getString("vanced_variant", "nonroot")
@ -58,61 +51,55 @@ class HomeFragment : Home() {
}
}
view.findViewById<ImageButton>(R.id.changelog_button).setOnClickListener {
binding.includeChangelogsLayout.changelogButton.setOnClickListener {
cardExpandCollapse()
}
view.findViewById<MaterialCardView>(R.id.vanced_card).setOnLongClickListener{
val clip = activity?.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
clip.setPrimaryClip(ClipData.newPlainText("vanced", viewModel.vancedInstalledVersion.value))
binding.includeVancedLayout.vancedCard.setOnLongClickListener {
val clip = requireActivity().getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
clip.setPrimaryClip(ClipData.newPlainText("vanced", this.viewModel.vancedInstalledVersion.value))
versionToast("Vanced")
true
}
view.findViewById<MaterialCardView>(R.id.microg_card).setOnLongClickListener{
val clip = activity?.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
binding.includeMicrogLayout.microgCard.setOnLongClickListener {
val clip = requireActivity().getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
clip.setPrimaryClip(ClipData.newPlainText("microg", viewModel.microgInstalledVersion.value))
versionToast("MicroG")
true
}
}
private fun versionToast(name: String)
{
private fun versionToast(name: String) {
Toast.makeText(activity, getString(R.string.version_toast, name), Toast.LENGTH_LONG).show()
}
private fun cardExpandCollapse() {
val viewPagerContainer = view?.findViewById<ViewPager2>(R.id.viewpager)
val tabLayoutContainer = view?.findViewById<TabLayout>(R.id.tablayout)
val arrow = view?.findViewById<ImageButton>(R.id.changelog_button)
if (isExpanded) {
viewPagerContainer?.visibility = View.GONE
tabLayoutContainer?.visibility = View.GONE
isExpanded = false
arrow?.animate()?.rotation(0F)?.interpolator = AccelerateDecelerateInterpolator()
} else {
viewPagerContainer?.visibility = View.VISIBLE
tabLayoutContainer?.visibility = View.VISIBLE
isExpanded = true
arrow?.animate()?.rotation(180F)?.interpolator = AccelerateDecelerateInterpolator()
with(binding.includeChangelogsLayout) {
viewpager.visibility = if (isExpanded) View.GONE else View.VISIBLE
tablayout.visibility = if (isExpanded) View.GONE else View.VISIBLE
changelogButton.animate().apply {
rotation(if (isExpanded) 0F else 180F)
interpolator = AccelerateDecelerateInterpolator()
}
isExpanded = !isExpanded
}
}
override fun onPause() {
localBroadcastManager.unregisterReceiver(broadcastReceiver)
super.onPause()
activity?.let { LocalBroadcastManager.getInstance(it).unregisterReceiver(broadcastReceiver) }
}
private val broadcastReceiver: BroadcastReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
when (intent.action) {
MICROG_DOWNLOADED -> {
view?.findViewById<ProgressBar>(R.id.microg_installing)?.visibility = View.VISIBLE
binding.includeMicrogLayout.microgInstalling.visibility = View.VISIBLE
//activity?.let { installApp(it, it.filesDir.path + "/microg.apk", "com.mgoogle.android.gms") }
}
VANCED_DOWNLOADED -> {
view?.findViewById<ProgressBar>(R.id.vanced_installing)?.visibility = View.VISIBLE
binding.includeVancedLayout.vancedInstalling.visibility = View.VISIBLE
}
}
}
@ -122,59 +109,53 @@ class HomeFragment : Home() {
val intentFilter = IntentFilter()
intentFilter.addAction(VANCED_DOWNLOADED)
intentFilter.addAction(MICROG_DOWNLOADED)
activity?.let {
LocalBroadcastManager.getInstance(it).registerReceiver(broadcastReceiver, intentFilter)
}
localBroadcastManager.registerReceiver(broadcastReceiver, intentFilter)
}
private fun attachNonrootChangelog() {
val sectionPageAdapter = SectionPageAdapter(this)
val tabLayout = view?.findViewById(R.id.tablayout) as TabLayout
val viewPager = view?.findViewById(R.id.viewpager) as ViewPager2
viewPager.adapter = sectionPageAdapter
TabLayoutMediator(tabLayout, viewPager) { tab, position ->
when (position) {
0 -> tab.text = "Vanced"
1 -> tab.text = "MicroG"
2 -> tab.text = "Manager"
}
}.attach()
val sectionPageRootAdapter = SectionPageRootAdapter(this)
with(binding.includeChangelogsLayout) {
viewpager.adapter = sectionPageRootAdapter
TabLayoutMediator(tablayout, viewpager) { tab, position ->
when (position) {
0 -> tab.text = "Vanced"
1 -> tab.text = "MicroG"
2 -> tab.text = "Manager"
}
}.attach()
}
}
private fun attachRootChangelog() {
val sectionPageRootAdapter = SectionPageRootAdapter(this)
val tabLayout = view?.findViewById(R.id.tablayout) as TabLayout
val viewPager = view?.findViewById(R.id.viewpager) as ViewPager2
viewPager.adapter = sectionPageRootAdapter
TabLayoutMediator(tabLayout, viewPager) { tab, position ->
when (position) {
0 -> tab.text = "Vanced"
1 -> tab.text = "Manager"
}
}.attach()
with(binding.includeChangelogsLayout) {
viewpager.adapter = sectionPageRootAdapter
TabLayoutMediator(tablayout, viewpager) { tab, position ->
when (position) {
0 -> tab.text = "Vanced"
1 -> tab.text = "Manager"
}
}.attach()
}
}
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
inflater.inflate(R.menu.toolbar_menu, menu)
super .onCreateOptionsMenu(menu, inflater)
super.onCreateOptionsMenu(menu, inflater)
}
private fun disableVancedButton() {
val vancedinstallbtn = view?.findViewById<MaterialButton>(R.id.vanced_installbtn)
vancedinstallbtn?.isEnabled = false
vancedinstallbtn?.backgroundTintList = ColorStateList.valueOf(Color.DKGRAY)
vancedinstallbtn?.setTextColor(ColorStateList.valueOf(Color.GRAY))
vancedinstallbtn?.icon = null
binding.includeVancedLayout.vancedInstallbtn.apply {
icon = null
isEnabled = false
backgroundTintList = ColorStateList.valueOf(Color.DKGRAY)
setTextColor(ColorStateList.valueOf(Color.GRAY))
}
}
companion object {
const val VANCED_DOWNLOADED = "Vanced downloaded"
const val MICROG_DOWNLOADED = "MicroG downloaded"
const val VANCED_DOWNLOADED = "vanced_downloaded"
const val MICROG_DOWNLOADED = "microg_downloaded"
}
}

View File

@ -78,7 +78,7 @@ class SettingsFragment : PreferenceFragmentCompat() {
if (devSettings) {
inflater.inflate(R.menu.dev_settings_menu, menu)
}
super .onCreateOptionsMenu(menu, inflater)
super.onCreateOptionsMenu(menu, inflater)
}
}

View File

@ -1,65 +1,68 @@
<?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.card.MaterialCardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
style="@style/MaterialCard"
android:layout_width="wrap_content"
android:layout_gravity="center"
app:contentPaddingTop="0dp"
app:contentPaddingBottom="0dp"
app:contentPaddingRight="6dp"
app:contentPaddingLeft="6dp"
tools:context=".ui.fragments.UpdateCheckFragment">
<layout>
<LinearLayout
<com.google.android.material.card.MaterialCardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
style="@style/MaterialCard"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
style="@style/CardTitle"
android:layout_gravity="center"
android:text="@string/chosen_install_values"
android:textAlignment="center"
android:fontFamily="@font/exo_semibold" />
<TextView
android:id="@+id/chosen_theme"
style="@style/AppVer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="" />
<TextView
android:id="@+id/chosen_lang"
style="@style/AppVer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="" />
android:layout_gravity="center"
app:contentPaddingBottom="0dp"
app:contentPaddingLeft="6dp"
app:contentPaddingRight="6dp"
app:contentPaddingTop="0dp"
tools:context=".ui.fragments.UpdateCheckFragment">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center">
android:orientation="vertical">
<com.google.android.material.button.MaterialButton
android:id="@+id/chosen_prefs_close"
style="@style/Widget.MaterialComponents.Button.OutlinedButton"
<TextView
style="@style/CardTitle"
android:layout_gravity="center"
android:fontFamily="@font/exo_semibold"
android:text="@string/chosen_install_values"
android:textAlignment="center" />
<TextView
android:id="@+id/chosen_theme"
style="@style/AppVer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="4dp"
android:text="@string/close"
android:textAllCaps="false"/>
android:text="" />
<com.google.android.material.button.MaterialButton
android:id="@+id/chosen_prefs_reset"
style="@style/ButtonStyle"
android:layout_marginStart="4dp"
android:text="@string/reset" />
<TextView
android:id="@+id/chosen_lang"
style="@style/AppVer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center">
<com.google.android.material.button.MaterialButton
android:id="@+id/chosen_prefs_close"
style="@style/Widget.MaterialComponents.Button.OutlinedButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="4dp"
android:text="@string/close"
android:textAllCaps="false" />
<com.google.android.material.button.MaterialButton
android:id="@+id/chosen_prefs_reset"
style="@style/ButtonStyle"
android:layout_marginStart="4dp"
android:text="@string/reset" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
</com.google.android.material.card.MaterialCardView>
</layout>

View File

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<layout
xmlns:android="http://schemas.android.com/apk/res/android"
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:bind="http://schemas.android.com/apk/res-auto">
<data>
@ -16,8 +15,8 @@
<com.vanced.manager.ui.core.SlidingNestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true"
android:animateLayoutChanges="true"
android:fillViewport="true"
android:scrollbars="none">
<LinearLayout
@ -30,8 +29,8 @@
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="25dp"
android:layout_marginStart="25dp"
android:layout_marginEnd="25dp"
android:orientation="horizontal">
<FrameLayout
@ -40,22 +39,22 @@
android:layout_alignParentStart="true">
<com.google.android.material.button.MaterialButton
style="@style/Widget.MaterialComponents.Button.OutlinedButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/Widget.MaterialComponents.Button.OutlinedButton"
bind:strokeWidth="2dp"
bind:strokeColor="?colorPrimary"
android:textAllCaps="false"
android:text="@string/nonroot"
android:visibility="@{viewModel.nonrootModeSelected ? View.VISIBLE : View.GONE}"/>
android:textAllCaps="false"
android:visibility="@{viewModel.nonrootModeSelected ? View.VISIBLE : View.GONE}"
bind:strokeColor="?colorPrimary"
bind:strokeWidth="2dp" />
<com.google.android.material.button.MaterialButton
android:id="@+id/nonroot_switch"
style="@style/ButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/ButtonStyle"
android:text="@string/nonroot"
android:visibility="@{viewModel.nonrootModeSelected ? View.GONE : View.VISIBLE}"/>
android:visibility="@{viewModel.nonrootModeSelected ? View.GONE : View.VISIBLE}" />
</FrameLayout>
@ -65,37 +64,39 @@
android:layout_alignParentEnd="true">
<com.google.android.material.button.MaterialButton
style="@style/Widget.MaterialComponents.Button.OutlinedButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/Widget.MaterialComponents.Button.OutlinedButton"
bind:strokeWidth="2dp"
bind:strokeColor="?colorPrimary"
android:textAllCaps="false"
android:text="@string/root"
android:visibility="@{viewModel.nonrootModeSelected ? View.GONE : View.VISIBLE}"/>
android:textAllCaps="false"
android:visibility="@{viewModel.nonrootModeSelected ? View.GONE : View.VISIBLE}"
bind:strokeColor="?colorPrimary"
bind:strokeWidth="2dp" />
<com.google.android.material.button.MaterialButton
android:id="@+id/root_switch"
style="@style/ButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/ButtonStyle"
android:text="@string/root"
android:visibility="@{viewModel.nonrootModeSelected ? View.VISIBLE : View.GONE}"/>
android:visibility="@{viewModel.nonrootModeSelected ? View.VISIBLE : View.GONE}" />
</FrameLayout>
</RelativeLayout>
<include
android:id="@+id/include_vanced_layout"
layout="@layout/include_vanced"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/stdp"
android:layout_marginTop="@dimen/stdp"
android:layout_marginEnd="@dimen/stdp"
bind:viewModel="@{viewModel}"/>
bind:viewModel="@{viewModel}" />
<include
android:id="@+id/include_microg_layout"
layout="@layout/include_microg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -106,6 +107,7 @@
bind:viewModel="@{viewModel}" />
<include
android:id="@+id/include_changelogs_layout"
layout="@layout/include_changelogs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -120,7 +122,7 @@
android:layout_marginStart="@dimen/stdp"
android:layout_marginTop="@dimen/stdp"
android:layout_marginEnd="@dimen/stdp"
bind:viewModel="@{viewModel}"/>
bind:viewModel="@{viewModel}" />
</LinearLayout>

View File

@ -1,58 +1,60 @@
<?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.card.MaterialCardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/changelog_card"
style="@style/MaterialCard">
<layout>
<com.google.android.material.card.MaterialCardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/changelog_card"
style="@style/MaterialCard">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="1dp"
android:layout_marginEnd="1dp"
android:animateLayoutChanges="true"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
style="@style/CardTitle"
android:text="@string/changelogs"
android:layout_alignParentStart="true"/>
<ImageButton
android:id="@+id/changelog_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/arrow_down"
android:layout_alignParentEnd="true"
android:background="@android:color/transparent" />
</RelativeLayout>
<com.google.android.material.tabs.TabLayout
android:id="@+id/tablayout"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?colorSurfaceVariant"
app:tabIndicatorColor="?colorPrimary"
app:tabSelectedTextColor="?colorPrimary"
app:tabTextColor="?colorPrimary"
app:layout_constraintTop_toBottomOf="parent"
android:visibility="gone"
tools:visibility="visible"/>
android:layout_marginStart="1dp"
android:layout_marginEnd="1dp"
android:animateLayoutChanges="true"
android:orientation="vertical">
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:visibility="gone"
tools:visibility="visible"/>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
</LinearLayout>
<TextView
android:id="@+id/title_changelogs"
style="@style/CardTitle"
android:layout_alignParentStart="true"
android:text="@string/changelogs" />
</com.google.android.material.card.MaterialCardView>
<ImageButton
android:id="@+id/changelog_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:background="@android:color/transparent"
android:src="@drawable/arrow_down" />
</RelativeLayout>
<com.google.android.material.tabs.TabLayout
android:id="@+id/tablayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?colorSurfaceVariant"
android:visibility="gone"
app:layout_constraintTop_toBottomOf="parent"
app:tabIndicatorColor="?colorPrimary"
app:tabSelectedTextColor="?colorPrimary"
app:tabTextColor="?colorPrimary"
tools:visibility="visible" />
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:visibility="gone"
tools:visibility="visible" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
</layout>