feat: settings to recycler view

This commit is contained in:
aayush262 2024-04-15 22:04:15 +05:30
parent 108285021e
commit 820a09b28f
5 changed files with 246 additions and 511 deletions

View file

@ -0,0 +1,10 @@
package ani.dantotsu.settings
import android.app.Activity
data class Settings(
val name : String,
val icon : Int,
val desc: String,
val activity: Class<out Activity>
)

View file

@ -1,12 +1,6 @@
package ani.dantotsu.settings package ani.dantotsu.settings
import android.app.AlarmManager
import android.app.AlertDialog
import android.content.Context
import android.content.Intent
import android.graphics.drawable.Animatable import android.graphics.drawable.Animatable
import android.net.Uri
import android.os.Build
import android.os.Build.BRAND import android.os.Build.BRAND
import android.os.Build.DEVICE import android.os.Build.DEVICE
import android.os.Build.SUPPORTED_ABIS import android.os.Build.SUPPORTED_ABIS
@ -14,232 +8,204 @@ import android.os.Build.VERSION.CODENAME
import android.os.Build.VERSION.RELEASE import android.os.Build.VERSION.RELEASE
import android.os.Build.VERSION.SDK_INT import android.os.Build.VERSION.SDK_INT
import android.os.Bundle import android.os.Bundle
import android.view.HapticFeedbackConstants
import android.view.KeyEvent
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.view.inputmethod.EditorInfo
import android.widget.ArrayAdapter
import android.widget.EditText
import android.widget.TextView import android.widget.TextView
import androidx.activity.OnBackPressedCallback import androidx.activity.OnBackPressedCallback
import androidx.activity.result.contract.ActivityResultContracts
import androidx.annotation.OptIn
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.isVisible
import androidx.core.view.updateLayoutParams import androidx.core.view.updateLayoutParams
import androidx.documentfile.provider.DocumentFile
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.media3.common.util.UnstableApi import androidx.recyclerview.widget.LinearLayoutManager
import ani.dantotsu.BuildConfig import ani.dantotsu.BuildConfig
import ani.dantotsu.R import ani.dantotsu.R
import ani.dantotsu.connections.anilist.api.NotificationType
import ani.dantotsu.copyToClipboard import ani.dantotsu.copyToClipboard
import ani.dantotsu.databinding.ActivitySettingsAnimeBinding
import ani.dantotsu.databinding.ActivitySettingsBinding import ani.dantotsu.databinding.ActivitySettingsBinding
import ani.dantotsu.databinding.ActivitySettingsCommonBinding
import ani.dantotsu.databinding.ActivitySettingsExtensionsBinding
import ani.dantotsu.databinding.ActivitySettingsMangaBinding
import ani.dantotsu.databinding.ActivitySettingsNotificationsBinding
import ani.dantotsu.databinding.ActivitySettingsThemeBinding
import ani.dantotsu.databinding.ItemRepositoryBinding
import ani.dantotsu.download.DownloadsManager
import ani.dantotsu.initActivity import ani.dantotsu.initActivity
import ani.dantotsu.media.MediaType
import ani.dantotsu.navBarHeight import ani.dantotsu.navBarHeight
import ani.dantotsu.notifications.TaskScheduler
import ani.dantotsu.notifications.anilist.AnilistNotificationWorker
import ani.dantotsu.notifications.comment.CommentNotificationWorker
import ani.dantotsu.notifications.subscription.SubscriptionNotificationWorker.Companion.checkIntervals
import ani.dantotsu.openLinkInBrowser import ani.dantotsu.openLinkInBrowser
import ani.dantotsu.openLinkInYouTube import ani.dantotsu.openLinkInYouTube
import ani.dantotsu.openSettings
import ani.dantotsu.others.AppUpdater import ani.dantotsu.others.AppUpdater
import ani.dantotsu.others.CustomBottomDialog import ani.dantotsu.others.CustomBottomDialog
import ani.dantotsu.pop import ani.dantotsu.pop
import ani.dantotsu.reloadActivity
import ani.dantotsu.restartApp
import ani.dantotsu.savePrefsToDownloads
import ani.dantotsu.setSafeOnClickListener import ani.dantotsu.setSafeOnClickListener
import ani.dantotsu.settings.saving.PrefManager
import ani.dantotsu.settings.saving.PrefName
import ani.dantotsu.settings.saving.internal.Location
import ani.dantotsu.settings.saving.internal.PreferenceKeystore
import ani.dantotsu.settings.saving.internal.PreferencePackager
import ani.dantotsu.snackString import ani.dantotsu.snackString
import ani.dantotsu.startMainActivity import ani.dantotsu.startMainActivity
import ani.dantotsu.statusBarHeight import ani.dantotsu.statusBarHeight
import ani.dantotsu.themes.ThemeManager import ani.dantotsu.themes.ThemeManager
import ani.dantotsu.toast import ani.dantotsu.toast
import ani.dantotsu.util.LauncherWrapper
import ani.dantotsu.util.Logger
import ani.dantotsu.util.StoragePermissions.Companion.downloadsPermission
import com.google.android.material.textfield.TextInputEditText
import eltos.simpledialogfragment.SimpleDialog
import eltos.simpledialogfragment.SimpleDialog.OnDialogResultListener.BUTTON_POSITIVE
import eltos.simpledialogfragment.color.SimpleColorDialog
import eu.kanade.domain.base.BasePreferences
import eu.kanade.tachiyomi.extension.anime.AnimeExtensionManager
import eu.kanade.tachiyomi.extension.manga.MangaExtensionManager
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.DelicateCoroutinesApi
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
import uy.kohesive.injekt.injectLazy
import kotlin.random.Random import kotlin.random.Random
class SettingsActivity : AppCompatActivity(), SimpleDialog.OnDialogResultListener { class SettingsActivity : AppCompatActivity() {
private val restartMainActivity = object : OnBackPressedCallback(false) { private val restartMainActivity = object : OnBackPressedCallback(false) {
override fun handleOnBackPressed() = startMainActivity(this@SettingsActivity) override fun handleOnBackPressed() = startMainActivity(this@SettingsActivity)
} }
lateinit var binding: ActivitySettingsBinding lateinit var binding: ActivitySettingsBinding
private var cursedCounter = 0 private var cursedCounter = 0
@OptIn(UnstableApi::class)
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
ThemeManager(this).applyTheme() ThemeManager(this).applyTheme()
initActivity(this)
binding = ActivitySettingsBinding.inflate(layoutInflater) binding = ActivitySettingsBinding.inflate(layoutInflater)
setContentView(binding.root) setContentView(binding.root)
initActivity(this) val context = this
binding.settingsVersion.text = getString(R.string.version_current, BuildConfig.VERSION_NAME)
binding.settingsVersion.setOnLongClickListener {
copyToClipboard(getDeviceInfo(), false)
toast(getString(R.string.copied_device_info))
return@setOnLongClickListener true
}
binding.settingsContainer.updateLayoutParams<ViewGroup.MarginLayoutParams> {
topMargin = statusBarHeight
bottomMargin = navBarHeight
}
onBackPressedDispatcher.addCallback(this, restartMainActivity)
binding.settingsBack.setOnClickListener {
onBackPressedDispatcher.onBackPressed()
}
binding.apply { binding.apply {
settingsAbout.setOnClickListener { settingsVersion.apply {
startActivity(Intent(this@SettingsActivity, SettingsAboutActivity::class.java)) text = getString(R.string.version_current, BuildConfig.VERSION_NAME)
}
settingsAccount.setOnClickListener {
startActivity(Intent(this@SettingsActivity, SettingsAccountActivity::class.java))
}
settingsAnime.setOnClickListener {
startActivity(Intent(this@SettingsActivity, SettingsAnimeActivity::class.java))
}
settingsManga.setOnClickListener {
startActivity(Intent(this@SettingsActivity, SettingsMangaActivity::class.java))
}
settingsCommon.setOnClickListener {
startActivity(Intent(this@SettingsActivity, SettingsCommonActivity::class.java))
}
settingsExtension.setOnClickListener {
startActivity(Intent(this@SettingsActivity, SettingsExtensionsActivity::class.java))
}
settingsNotification.setOnClickListener {
startActivity(Intent(this@SettingsActivity, SettingsNotificationActivity::class.java))
}
settingsTheme.setOnClickListener {
startActivity(Intent(this@SettingsActivity, SettingsThemeActivity::class.java))
}
}
if (!BuildConfig.FLAVOR.contains("fdroid")) { settingsVersion.setOnLongClickListener {
binding.settingsLogo.setOnLongClickListener { copyToClipboard(getDeviceInfo(), false)
lifecycleScope.launch(Dispatchers.IO) { toast(getString(R.string.copied_device_info))
AppUpdater.check(this@SettingsActivity, true) return@setOnLongClickListener true
} }
true
} }
} settingsContainer.updateLayoutParams<ViewGroup.MarginLayoutParams> {
topMargin = statusBarHeight
bottomMargin = navBarHeight
}
binding.settingBuyMeCoffee.setOnClickListener { onBackPressedDispatcher.addCallback(context, restartMainActivity)
settingsBack.setOnClickListener {
onBackPressedDispatcher.onBackPressed()
}
val settings = arrayListOf(
Settings(
getString(R.string.accounts),
R.drawable.ic_round_person_24,
getString(R.string.accounts_desc),
SettingsAccountActivity::class.java
),
Settings(
getString(R.string.theme),
R.drawable.ic_palette,
getString(R.string.theme_desc),
SettingsThemeActivity::class.java
),
Settings(
getString(R.string.common),
R.drawable.ic_lightbulb_24,
getString(R.string.common_desc),
SettingsCommonActivity::class.java
),
Settings(
getString(R.string.anime),
R.drawable.ic_round_movie_filter_24,
getString(R.string.anime_desc),
SettingsAnimeActivity::class.java
),
Settings(
getString(R.string.manga),
R.drawable.ic_round_import_contacts_24,
getString(R.string.manga_desc),
SettingsMangaActivity::class.java
),
Settings(
getString(R.string.extensions),
R.drawable.ic_extension,
getString(R.string.extensions_desc),
SettingsExtensionsActivity::class.java
),
Settings(
getString(R.string.notifications),
R.drawable.ic_round_notifications_none_24,
getString(R.string.notifications_desc),
SettingsNotificationActivity::class.java
),
Settings(
getString(R.string.about),
R.drawable.ic_round_info_24,
getString(R.string.about_desc),
SettingsAboutActivity::class.java
),
)
settingsRecyclerView.apply {
layoutManager = LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)
adapter = SettingsAdapter(settings)
setHasFixedSize(true)
}
if (!BuildConfig.FLAVOR.contains("fdroid")) {
settingsLogo.setOnLongClickListener {
lifecycleScope.launch(Dispatchers.IO) {
AppUpdater.check(this@SettingsActivity, true)
}
true
}
}
settingBuyMeCoffee.setOnClickListener {
lifecycleScope.launch {
it.pop()
}
openLinkInBrowser(getString(R.string.coffee))
}
lifecycleScope.launch { lifecycleScope.launch {
it.pop() settingBuyMeCoffee.pop()
}
openLinkInBrowser(getString(R.string.coffee))
}
lifecycleScope.launch {
binding.settingBuyMeCoffee.pop()
}
binding.loginDiscord.setOnClickListener {
openLinkInBrowser(getString(R.string.discord))
}
binding.loginGithub.setOnClickListener {
openLinkInBrowser(getString(R.string.github))
}
binding.loginTelegram.setOnClickListener {
openLinkInBrowser(getString(R.string.telegram))
}
(binding.settingsLogo.drawable as Animatable).start()
val array = resources.getStringArray(R.array.tips)
binding.settingsLogo.setSafeOnClickListener {
cursedCounter++
(binding.settingsLogo.drawable as Animatable).start()
if (cursedCounter % 7 == 0) {
toast(R.string.you_cursed)
openLinkInYouTube(getString(R.string.cursed_yt))
//PrefManager.setVal(PrefName.ImageUrl, !PrefManager.getVal(PrefName.ImageUrl, false))
} else {
snackString(array[(Math.random() * array.size).toInt()], this)
} }
} loginDiscord.setOnClickListener {
openLinkInBrowser(getString(R.string.discord))
}
loginGithub.setOnClickListener {
openLinkInBrowser(getString(R.string.github))
}
loginTelegram.setOnClickListener {
openLinkInBrowser(getString(R.string.telegram))
}
lifecycleScope.launch(Dispatchers.IO) {
delay(2000)
runOnUiThread {
if (Random.nextInt(0, 100) > 69) {
CustomBottomDialog.newInstance().apply {
title = this@SettingsActivity.getString(R.string.enjoying_app)
addView(TextView(this@SettingsActivity).apply {
text = context.getString(R.string.consider_donating)
})
setNegativeButton(this@SettingsActivity.getString(R.string.no_moners)) { (settingsLogo.drawable as Animatable).start()
snackString(R.string.you_be_rich) val array = resources.getStringArray(R.array.tips)
dismiss()
settingsLogo.setSafeOnClickListener {
cursedCounter++
(settingsLogo.drawable as Animatable).start()
if (cursedCounter % 7 == 0) {
toast(R.string.you_cursed)
openLinkInYouTube(getString(R.string.cursed_yt))
//PrefManager.setVal(PrefName.ImageUrl, !PrefManager.getVal(PrefName.ImageUrl, false))
} else {
snackString(array[(Math.random() * array.size).toInt()], context)
}
}
lifecycleScope.launch(Dispatchers.IO) {
delay(2000)
runOnUiThread {
if (Random.nextInt(0, 100) > 69) {
CustomBottomDialog.newInstance().apply {
title = this@SettingsActivity.getString(R.string.enjoying_app)
addView(TextView(this@SettingsActivity).apply {
text = context.getString(R.string.consider_donating)
})
setNegativeButton(this@SettingsActivity.getString(R.string.no_moners)) {
snackString(R.string.you_be_rich)
dismiss()
}
setPositiveButton(this@SettingsActivity.getString(R.string.donate)) {
settingBuyMeCoffee.performClick()
dismiss()
}
show(supportFragmentManager, "dialog")
} }
setPositiveButton(this@SettingsActivity.getString(R.string.donate)) {
binding.settingBuyMeCoffee.performClick()
dismiss()
}
show(supportFragmentManager, "dialog")
} }
} }
} }
} }
} }
override fun onResult(dialogTag: String, which: Int, extras: Bundle): Boolean {
if (which == BUTTON_POSITIVE) {
if (dialogTag == "colorPicker") {
val color = extras.getInt(SimpleColorDialog.COLOR)
PrefManager.setVal(PrefName.CustomThemeInt, color)
Logger.log("Custom Theme: $color")
}
}
return true
}
companion object { companion object {
fun getDeviceInfo(): String { fun getDeviceInfo(): String {
return """ return """

View file

@ -0,0 +1,44 @@
package ani.dantotsu.settings
import android.content.Intent
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.RecyclerView
import ani.dantotsu.databinding.ItemSettingsBinding
import ani.dantotsu.setAnimation
class SettingsAdapter(private val settings: ArrayList<Settings>) : RecyclerView.Adapter<SettingsAdapter.SettingsViewHolder>(){
inner class SettingsViewHolder(val binding: ItemSettingsBinding) :
RecyclerView.ViewHolder(binding.root) {
init {
itemView.setOnClickListener {
ContextCompat.startActivity(
binding.root.context, Intent(binding.root.context, settings[bindingAdapterPosition].activity),
null
)
}
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SettingsViewHolder {
return SettingsViewHolder(
ItemSettingsBinding.inflate(
LayoutInflater.from(parent.context),
parent,
false
)
)
}
override fun onBindViewHolder(holder: SettingsViewHolder, position: Int) {
val b = holder.binding
setAnimation(b.root.context, b.root)
val settings = settings[position]
b.settingsTitle.text = settings.name
b.settingsDesc.text = settings.desc
b.settingsIcon.setImageDrawable(ContextCompat.getDrawable(b.root.context, settings.icon))
}
override fun getItemCount(): Int = settings.size
}

View file

@ -66,6 +66,7 @@
</LinearLayout> </LinearLayout>
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
@ -75,345 +76,14 @@
android:orientation="vertical" android:orientation="vertical"
tools:ignore="ContentDescription"> tools:ignore="ContentDescription">
<!--account--> <ani.dantotsu.FadingEdgeRecyclerView
android:id="@+id/settingsRecyclerView"
<LinearLayout
android:id="@+id/settingsAccount"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="24dp" android:nestedScrollingEnabled="true"
android:gravity="center_vertical|start" android:requiresFadingEdge="vertical"
android:orientation="horizontal"> tools:itemCount="5"
tools:listitem="@layout/item_settings" />
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_margin="24dp"
app:srcCompat="@drawable/ic_round_person_24"
app:tint="?attr/colorPrimary" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="44sp"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/poppins_bold"
android:text="@string/accounts"
android:textColor="?attr/colorOnSurface"
android:textSize="18sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:alpha="0.66"
android:fontFamily="@font/poppins_semi_bold"
android:text="@string/accounts_desc"
android:textColor="?attr/colorOnSurfaceVariant" />
</LinearLayout>
</LinearLayout>
<!--theme-->
<LinearLayout
android:id="@+id/settingsTheme"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:gravity="center_vertical|start"
android:orientation="horizontal">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_margin="24dp"
app:srcCompat="@drawable/ic_palette"
app:tint="?attr/colorPrimary" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="44sp"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/poppins_bold"
android:text="@string/theme"
android:textColor="?attr/colorOnSurface"
android:textSize="18sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:alpha="0.66"
android:fontFamily="@font/poppins_semi_bold"
android:text="@string/theme_desc"
android:textColor="?attr/colorOnSurfaceVariant" />
</LinearLayout>
</LinearLayout>
<!--extentions-->
<LinearLayout
android:id="@+id/settingsExtension"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:gravity="center_vertical|start"
android:orientation="horizontal">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_margin="24dp"
android:scaleX="0.92"
android:scaleY="0.92"
app:srcCompat="@drawable/ic_extension"
app:tint="?attr/colorPrimary" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="44sp"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/poppins_bold"
android:text="@string/extensions"
android:textColor="?attr/colorOnSurface"
android:textSize="18sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:alpha="0.66"
android:fontFamily="@font/poppins_semi_bold"
android:text="@string/extensions_desc"
android:textColor="?attr/colorOnSurfaceVariant" />
</LinearLayout>
</LinearLayout>
<!--Common-->
<LinearLayout
android:id="@+id/settingsCommon"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:gravity="center_vertical|start"
android:orientation="horizontal">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_margin="24dp"
app:srcCompat="@drawable/ic_lightbulb_24"
app:tint="?attr/colorPrimary" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="44sp"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/poppins_bold"
android:text="@string/common"
android:textColor="?attr/colorOnSurface"
android:textSize="18sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:alpha="0.66"
android:fontFamily="@font/poppins_semi_bold"
android:text="@string/common_desc"
android:textColor="?attr/colorOnSurfaceVariant" />
</LinearLayout>
</LinearLayout>
<!--Notification-->
<LinearLayout
android:id="@+id/settingsNotification"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:gravity="center_vertical|start"
android:orientation="horizontal">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_margin="24dp"
app:srcCompat="@drawable/ic_round_notifications_none_24"
app:tint="?attr/colorPrimary" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="44sp"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/poppins_bold"
android:text="@string/notifications"
android:textColor="?attr/colorOnSurface"
android:textSize="18sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:alpha="0.66"
android:fontFamily="@font/poppins_semi_bold"
android:text="@string/notifications_desc"
android:textColor="?attr/colorOnSurfaceVariant" />
</LinearLayout>
</LinearLayout>
<!--Anime-->
<LinearLayout
android:id="@+id/settingsAnime"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:gravity="center_vertical|start"
android:orientation="horizontal">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_margin="24dp"
app:srcCompat="@drawable/ic_round_movie_filter_24"
app:tint="?attr/colorPrimary" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="44sp"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/poppins_bold"
android:text="@string/anime"
android:textColor="?attr/colorOnSurface"
android:textSize="18sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:alpha="0.66"
android:fontFamily="@font/poppins_semi_bold"
android:text="@string/anime_desc"
android:textColor="?attr/colorOnSurfaceVariant" />
</LinearLayout>
</LinearLayout>
<!--Manga-->
<LinearLayout
android:id="@+id/settingsManga"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:gravity="center_vertical|start"
android:orientation="horizontal">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_margin="24dp"
app:srcCompat="@drawable/ic_round_import_contacts_24"
app:tint="?attr/colorPrimary" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="44sp"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/poppins_bold"
android:text="@string/manga"
android:textColor="?attr/colorOnSurface"
android:textSize="18sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:alpha="0.66"
android:fontFamily="@font/poppins_semi_bold"
android:text="@string/manga_desc"
android:textColor="?attr/colorOnSurfaceVariant" />
</LinearLayout>
</LinearLayout>
<!--about-->
<LinearLayout
android:id="@+id/settingsAbout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:gravity="center_vertical|start"
android:orientation="horizontal">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_margin="24dp"
app:srcCompat="@drawable/ic_round_info_24"
app:tint="?attr/colorPrimary" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="44sp"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/poppins_bold"
android:text="@string/about"
android:textColor="?attr/colorOnSurface"
android:textSize="18sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:alpha="0.66"
android:fontFamily="@font/poppins_semi_bold"
android:text="@string/about_desc"
android:textColor="?attr/colorOnSurfaceVariant" />
</LinearLayout>
</LinearLayout>
<TextView <TextView
android:layout_width="match_parent" android:layout_width="match_parent"

View file

@ -0,0 +1,45 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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/settingsLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:orientation="horizontal">
<ImageView
android:id="@+id/settingsIcon"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_margin="24dp"
app:srcCompat="@drawable/ic_circle_add"
app:tint="?attr/colorPrimary"
tools:ignore="ContentDescription" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="44sp"
android:orientation="vertical">
<TextView
android:id="@+id/settingsTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/poppins_bold"
android:text="@string/name"
android:textColor="?attr/colorOnSurface"
android:textSize="18sp" />
<TextView
android:id="@+id/settingsDesc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:alpha="0.66"
android:fontFamily="@font/poppins_semi_bold"
android:text="@string/slogan"
android:textColor="?attr/colorOnSurfaceVariant" />
</LinearLayout>
</LinearLayout>