srctree

Robin Linden parent c114b46d da1c80f3
Manually set up a preference fragment

Hopefully temporary until I work out how to add a toolbar to aPreferenceScreen.

inlinesplit
atox/build.gradle.kts added: 86, removed: 51, total 35
@@ -48,7 +48,6 @@ dependencies {
 
implementation(Libraries.appcompat)
implementation(Libraries.constraintlayout)
implementation(Libraries.preference)
 
implementation(Libraries.material)
implementation(Libraries.ktxCoroutinesCore)
 
atox/src/main/kotlin/ui/settings/SettingsFragment.kt added: 86, removed: 51, total 35
@@ -1,39 +1,41 @@
package ltd.evilcorp.atox.ui.settings
 
import android.content.SharedPreferences
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import androidx.preference.PreferenceFragmentCompat
import androidx.preference.PreferenceManager
import androidx.lifecycle.Observer
import kotlinx.android.synthetic.main.settings_fragment.*
import kotlinx.android.synthetic.main.settings_fragment.view.*
import ltd.evilcorp.atox.R
import ltd.evilcorp.atox.vmFactory
 
class SettingsFragment : PreferenceFragmentCompat(),
SharedPreferences.OnSharedPreferenceChangeListener {
 
class SettingsFragment : Fragment() {
private val vm: SettingsViewModel by viewModels { vmFactory }
 
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) =
setPreferencesFromResource(R.xml.preferences, rootKey)
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View = inflater.inflate(R.layout.settings_fragment, container, false).apply {
toolbar.apply {
setNavigationIcon(R.drawable.back)
setNavigationOnClickListener {
activity?.onBackPressed()
}
}
 
override fun onResume() {
super.onResume()
PreferenceManager.getDefaultSharedPreferences(requireContext())
.registerOnSharedPreferenceChangeListener(this)
vm.user.observe(viewLifecycleOwner, Observer { user ->
name.setText(user.name)
statusMessage.setText(user.statusMessage)
})
}
 
override fun onPause() {
super.onPause()
PreferenceManager.getDefaultSharedPreferences(requireContext())
.unregisterOnSharedPreferenceChangeListener(this)
}
 
override fun onSharedPreferenceChanged(preferences: SharedPreferences, key: String) {
when (key) {
"name" -> vm.setName(
preferences.getString(key, null) ?: getString(R.string.name_default)
)
"status_message" -> vm.setStatusMessage(preferences.getString(key, null) ?: "")
}
vm.setName(name.text.toString())
vm.setStatusMessage(statusMessage.text.toString())
}
}
 
atox/src/main/kotlin/ui/settings/SettingsViewModel.kt added: 86, removed: 51, total 35
@@ -1,12 +1,20 @@
package ltd.evilcorp.atox.ui.settings
 
import androidx.lifecycle.LiveData
import androidx.lifecycle.ViewModel
import ltd.evilcorp.core.vo.User
import ltd.evilcorp.domain.feature.UserManager
import ltd.evilcorp.domain.tox.Tox
import javax.inject.Inject
 
class SettingsViewModel @Inject constructor(
private val userManager: UserManager
private val userManager: UserManager,
private val tox: Tox
) : ViewModel() {
private val publicKey by lazy { tox.publicKey }
 
val user: LiveData<User> by lazy { userManager.get(publicKey) }
 
fun setName(name: String) = userManager.setName(name)
fun setStatusMessage(message: String) = userManager.setStatusMessage(message)
}
 
filename was Deleted added: 86, removed: 51, total 35
@@ -0,0 +1,43 @@
<?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"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<androidx.appcompat.widget.Toolbar android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimary"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:title="@string/settings"/>
 
<TextView android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:text="@string/pref_heading_user"
android:textSize="18sp"/>
 
<com.google.android.material.textfield.TextInputLayout android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp">
<com.google.android.material.textfield.TextInputEditText android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/name"/>
</com.google.android.material.textfield.TextInputLayout>
 
<com.google.android.material.textfield.TextInputLayout android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp">
<com.google.android.material.textfield.TextInputEditText android:id="@+id/statusMessage"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/status_message"/>
</com.google.android.material.textfield.TextInputLayout>
</LinearLayout>
 
atox/src/main/res/values/strings.xml added: 86, removed: 51, total 35
@@ -61,4 +61,5 @@
<string name="atox_offline">Offline</string>
<string name="atox_connected_with_tcp">Connected (TCP)</string>
<string name="atox_connected_with_udp">Connected (UDP)</string>
<string name="pref_heading_user">User</string>
</resources>
 
ev/null added: 86, removed: 51, total 35
@@ -1,9 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto">
<EditTextPreference app:key="name"
app:title="@string/name"
app:useSimpleSummaryProvider="true"/>
<EditTextPreference app:key="status_message"
app:title="@string/status_message"
app:useSimpleSummaryProvider="true"/>
</PreferenceScreen>
 
domain/build.gradle.kts added: 86, removed: 51, total 35
@@ -48,8 +48,6 @@ dependencies {
 
implementation(Libraries.ktxCoroutinesCore)
 
implementation(Libraries.preference)
 
// For tox4j
// TODO(robinlinden): Fix tox4j build so we can update the scala dependencies
// noinspection GradleDependency
 
domain/src/main/kotlin/feature/UserManager.kt added: 86, removed: 51, total 35
@@ -1,7 +1,5 @@
package ltd.evilcorp.domain.feature
 
import android.content.Context
import androidx.preference.PreferenceManager
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
@@ -12,7 +10,6 @@ import ltd.evilcorp.domain.tox.Tox
import javax.inject.Inject
 
class UserManager @Inject constructor(
private val context: Context,
private val userRepository: UserRepository,
private val tox: Tox
) : CoroutineScope by GlobalScope {
@@ -34,10 +31,6 @@ class UserManager @Inject constructor(
userRepository.update(user)
}
 
PreferenceManager.getDefaultSharedPreferences(context).edit()
.putString("name", name)
.putString("status_message", statusMessage).apply()
 
userRepository.update(user)
}