Merge pull request #5 from HabitRPG/hafiz/settings-updates

Settings Project board fixes/updates
This commit is contained in:
Phillip Thelen 2022-06-30 09:37:47 +02:00 committed by GitHub
commit 8d4ab949e0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 189 additions and 32 deletions

View file

@ -1,8 +1,10 @@
package com.habitrpg.wearos.habitica.ui.activities package com.habitrpg.wearos.habitica.ui.activities
import android.app.AlertDialog import android.app.Dialog
import android.content.Intent import android.content.Intent
import android.content.pm.PackageManager
import android.os.Bundle import android.os.Bundle
import android.widget.Button
import androidx.activity.viewModels import androidx.activity.viewModels
import androidx.wear.widget.WearableLinearLayoutManager import androidx.wear.widget.WearableLinearLayoutManager
import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.R
@ -13,6 +15,7 @@ import com.habitrpg.wearos.habitica.ui.viewmodels.SettingsViewModel
import com.habitrpg.wearos.habitica.util.HabiticaScrollingLayoutCallback import com.habitrpg.wearos.habitica.util.HabiticaScrollingLayoutCallback
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint @AndroidEntryPoint
class SettingsActivity: BaseActivity<ActivitySettingsBinding, SettingsViewModel>() { class SettingsActivity: BaseActivity<ActivitySettingsBinding, SettingsViewModel>() {
override val viewModel: SettingsViewModel by viewModels() override val viewModel: SettingsViewModel by viewModels()
@ -73,19 +76,57 @@ class SettingsActivity: BaseActivity<ActivitySettingsBinding, SettingsViewModel>
null null
) { ) {
showLogoutConfirmation() showLogoutConfirmation()
},
SettingsItem(
"spacer",
getString(R.string.settings),
SettingsItem.Types.SPACER,
null
) {
},
SettingsItem(
"footer",
getString(R.string.version_info, versionName, versionCode),
SettingsItem.Types.FOOTER,
null
){
} }
) )
} }
private fun showLogoutConfirmation() { private val versionName: String by lazy {
AlertDialog.Builder(this) try {
.setTitle(R.string.are_you_sure) @Suppress("DEPRECATION")
.setPositiveButton(R.string.logout) { alert, _ -> packageManager?.getPackageInfo(packageName ?: "", 0)?.versionName ?: ""
logout() } catch (e: PackageManager.NameNotFoundException) {
alert.dismiss() ""
} }
.setPositiveButton(R.string.action_cancel) { alert, _ ->
alert.dismiss()
}.show()
} }
private val versionCode: Int by lazy {
try {
@Suppress("DEPRECATION")
packageManager?.getPackageInfo(packageName ?: "", 0)?.versionCode ?: 0
} catch (e: PackageManager.NameNotFoundException) {
0
}
}
private fun showLogoutConfirmation() {
val logoutDialog = Dialog(this)
val myLayout = layoutInflater.inflate(R.layout.logout_layout, null)
val positiveButton: Button = myLayout.findViewById(R.id.logout_button)
positiveButton.setOnClickListener {
logout()
logoutDialog.dismiss()
}
val negativeButton: Button = myLayout.findViewById(R.id.cancel_button)
negativeButton.setOnClickListener {
logoutDialog.dismiss()
}
logoutDialog.setContentView(myLayout)
logoutDialog.show()
}
} }

View file

@ -3,16 +3,18 @@ package com.habitrpg.wearos.habitica.ui.adapters
import android.content.res.ColorStateList import android.content.res.ColorStateList
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.RadioButton import android.widget.Switch
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.databinding.RowFooterBinding
import com.habitrpg.android.habitica.databinding.RowHeaderBinding import com.habitrpg.android.habitica.databinding.RowHeaderBinding
import com.habitrpg.android.habitica.databinding.RowSettingsBinding import com.habitrpg.android.habitica.databinding.RowSettingsBinding
import com.habitrpg.android.habitica.databinding.RowSpacerBinding import com.habitrpg.android.habitica.databinding.RowSpacerBinding
import com.habitrpg.common.habitica.extensions.dpToPx import com.habitrpg.common.habitica.extensions.dpToPx
import com.habitrpg.common.habitica.extensions.layoutInflater import com.habitrpg.common.habitica.extensions.layoutInflater
import com.habitrpg.wearos.habitica.ui.viewHolders.BindableViewHolder import com.habitrpg.wearos.habitica.ui.viewHolders.BindableViewHolder
import com.habitrpg.wearos.habitica.ui.viewHolders.FooterViewHolder
import com.habitrpg.wearos.habitica.ui.viewHolders.HeaderViewHolder import com.habitrpg.wearos.habitica.ui.viewHolders.HeaderViewHolder
import com.habitrpg.wearos.habitica.ui.viewHolders.SpacerViewHolder import com.habitrpg.wearos.habitica.ui.viewHolders.SpacerViewHolder
@ -23,22 +25,28 @@ class SettingsAdapter: RecyclerView.Adapter<RecyclerView.ViewHolder>() {
notifyDataSetChanged() notifyDataSetChanged()
} }
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
if (viewType == 0) { return when (viewType) {
return HeaderViewHolder(RowHeaderBinding.inflate(parent.context.layoutInflater, parent, false).root) 0 -> { HeaderViewHolder(RowHeaderBinding.inflate(parent.context.layoutInflater, parent, false).root) }
} else if (viewType == 1) { 1 -> { FooterViewHolder(RowFooterBinding.inflate(parent.context.layoutInflater, parent, false).root) }
return SpacerViewHolder(RowSpacerBinding.inflate(parent.context.layoutInflater, parent, false).root) 2 -> { SpacerViewHolder(RowSpacerBinding.inflate(parent.context.layoutInflater, parent, false).root) }
} else { else -> { SettingsViewHolder(RowSettingsBinding.inflate(parent.context.layoutInflater, parent, false).root) }
return SettingsViewHolder(RowSettingsBinding.inflate(parent.context.layoutInflater, parent, false).root)
} }
} }
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
if (holder is SettingsViewHolder) { when (holder) {
holder.bind(data[position]) is SettingsViewHolder -> {
} else if (holder is HeaderViewHolder) { holder.bind(data[position])
holder.bind(data[position].title) }
} else if (holder is SpacerViewHolder) { is HeaderViewHolder -> {
holder.bind(16.dpToPx(holder.itemView.context)) holder.bind(data[position].title)
}
is FooterViewHolder -> {
holder.bind(data[position].title)
}
is SpacerViewHolder -> {
holder.bind(16.dpToPx(holder.itemView.context))
}
} }
} }
@ -48,8 +56,9 @@ class SettingsAdapter: RecyclerView.Adapter<RecyclerView.ViewHolder>() {
val item = data[position] val item = data[position]
return when (item.type) { return when (item.type) {
SettingsItem.Types.HEADER -> 0 SettingsItem.Types.HEADER -> 0
SettingsItem.Types.SPACER -> 1 SettingsItem.Types.FOOTER -> 1
else -> 2 SettingsItem.Types.SPACER -> 2
else -> 3
} }
} }
} }
@ -72,11 +81,12 @@ class SettingsViewHolder(itemView: View) : BindableViewHolder<SettingsItem>(item
} }
if (data.type == SettingsItem.Types.TOGGLE) { if (data.type == SettingsItem.Types.TOGGLE) {
val radio = RadioButton(itemView.context) val switch = Switch(itemView.context)
radio.isChecked = data.value as? Boolean == true switch.isChecked = data.value as? Boolean == true
radio.isEnabled = false switch.isClickable = false
widget = radio switch.showText = false
binding.row.addView(radio) widget = switch
binding.row.addView(switch)
if (data.value as? Boolean == true) { if (data.value as? Boolean == true) {
binding.row.backgroundTintList = ColorStateList.valueOf(ContextCompat.getColor(itemView.context, R.color.watch_purple_100)) binding.row.backgroundTintList = ColorStateList.valueOf(ContextCompat.getColor(itemView.context, R.color.watch_purple_100))
@ -105,6 +115,7 @@ data class SettingsItem(
DESTRUCTIVE_BUTTON, DESTRUCTIVE_BUTTON,
SPACER, SPACER,
TOGGLE, TOGGLE,
HEADER HEADER,
FOOTER
} }
} }

View file

@ -0,0 +1,12 @@
package com.habitrpg.wearos.habitica.ui.viewHolders
import android.view.View
import com.habitrpg.android.habitica.databinding.RowFooterBinding
class FooterViewHolder(itemView: View): BindableViewHolder<String>(itemView) {
private val binding = RowFooterBinding.bind(itemView)
override fun bind(data: String) {
binding.textView.text = data
}
}

View file

@ -1,12 +1,17 @@
package com.habitrpg.wearos.habitica.ui.viewHolders package com.habitrpg.wearos.habitica.ui.viewHolders
import android.view.View import android.view.View
import androidx.core.content.ContextCompat
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.databinding.RowHeaderBinding import com.habitrpg.android.habitica.databinding.RowHeaderBinding
class HeaderViewHolder(itemView: View): BindableViewHolder<String>(itemView) { class HeaderViewHolder(itemView: View): BindableViewHolder<String>(itemView) {
private val binding = RowHeaderBinding.bind(itemView) private val binding = RowHeaderBinding.bind(itemView)
override fun bind(data: String) { override fun bind(data: String) {
if (data == itemView.context.resources.getString(R.string.settings)) {
binding.textView.setTextColor(ContextCompat.getColor(itemView.context, R.color.white))
}
binding.textView.text = data binding.textView.text = data
} }
} }

View file

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="16dp"
android:height="16dp"
android:viewportWidth="16"
android:viewportHeight="16">
<path
android:pathData="M2.3249,15.85L0.2,13.675L5.8499,8L0.2,2.3L2.3249,0.125L7.9999,5.825L13.675,0.125L15.8,2.3L10.15,8L15.8,13.675L13.675,15.85L7.9999,10.15L2.3249,15.85Z"
android:fillColor="#ffffff"/>
</vector>

View file

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="22dp"
android:height="20dp"
android:viewportWidth="22"
android:viewportHeight="20">
<path
android:pathData="M3.8,19.8C2.95,19.8 2.225,19.5043 1.625,18.913C1.025,18.321 0.725,17.5917 0.725,16.725V3.275C0.725,2.4083 1.025,1.679 1.625,1.087C2.225,0.4957 2.95,0.2 3.8,0.2H11.025V3.275H3.8V16.725H11.025V19.8H3.8ZM14.975,16.325L12.775,14.125L15.375,11.525H7.6V8.45H15.375L12.775,5.85L14.975,3.675L21.275,10L14.975,16.325Z"
android:fillColor="#ffffff"/>
</vector>

View file

@ -0,0 +1,42 @@
<?xml version="1.0" encoding="utf-8"?>
<com.habitrpg.wearos.habitica.ui.views.HabiticaScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/description_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:textSize="18sp"
android:text="@string/log_out_of_habitica"
android:fontFamily="sans-serif-medium"
android:textColor="@color/white"
android:layout_marginBottom="18dp"/>
<Button
android:id="@+id/logout_button"
style="@style/ChipButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/spacing_small"
android:drawableStart="@drawable/logout"
android:text="@string/logout" />
<Button
android:id="@+id/cancel_button"
style="@style/ChipButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawableStart="@drawable/cancel"
android:text="@string/action_cancel" />
</LinearLayout>
</com.habitrpg.wearos.habitica.ui.views.HabiticaScrollView>

View file

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="45dp">
<ImageView
android:layout_width="25dp"
android:layout_height="25dp"
android:layout_above="@id/text_view"
android:layout_centerHorizontal="true"
android:layout_marginBottom="2dp"
android:src="@mipmap/ic_launcher" />
<TextView
android:id="@+id/text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:fontFamily="sans-serif"
android:textColor="@color/watch_purple_200"
android:textSize="12sp"
tools:text="Footer Text" />
</RelativeLayout>

View file

@ -29,5 +29,7 @@
<string name="save">Save</string> <string name="save">Save</string>
<string name="sync_data">Sync Data</string> <string name="sync_data">Sync Data</string>
<string name="hide_task_rewards">Hide task rewards</string> <string name="hide_task_rewards">Hide task rewards</string>
<string name="version_info">Version %1$s (%2$d)</string>
<string name="log_out_of_habitica">Log out of Habitica?</string>
<string name="no_tasks">Create a %s to add to this list</string> <string name="no_tasks">Create a %s to add to this list</string>
</resources> </resources>