move set home capsule feature to settings screen

This commit is contained in:
Jonathan Fisher 2020-11-11 15:22:33 +00:00
parent ab6635af69
commit 8e15f09a0c
6 changed files with 69 additions and 21 deletions

View File

@ -3,6 +3,7 @@ package oppen.ariane.ui
import android.content.ActivityNotFoundException import android.content.ActivityNotFoundException
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.SharedPreferences
import android.media.MediaPlayer import android.media.MediaPlayer
import android.net.Uri import android.net.Uri
import android.os.Build import android.os.Build
@ -12,6 +13,7 @@ import androidx.activity.viewModels
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.databinding.DataBindingUtil import androidx.databinding.DataBindingUtil
import androidx.preference.PreferenceManager
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import com.google.android.material.snackbar.Snackbar import com.google.android.material.snackbar.Snackbar
import oppen.ariane.Ariane import oppen.ariane.Ariane
@ -97,11 +99,8 @@ class GemActivity : AppCompatActivity() {
history = HistoryInterface.default(this) history = HistoryInterface.default(this)
val prefs = getSharedPreferences("oppen.tva.ui.dialogs.set_home", Context.MODE_PRIVATE)
val home = prefs.getString("home", Ariane.DEFAULT_HOME_CAPSULE)
model.initialise( model.initialise(
home = home ?: Ariane.DEFAULT_HOME_CAPSULE, home = PreferenceManager.getDefaultSharedPreferences(this).getString("home_capsule", Ariane.DEFAULT_HOME_CAPSULE) ?: Ariane.DEFAULT_HOME_CAPSULE,
gemini = Datasource.factory(this), gemini = Datasource.factory(this),
bookmarks = BookmarksDatasource.getDefault(applicationContext) bookmarks = BookmarksDatasource.getDefault(applicationContext)
){ state -> ){ state ->
@ -205,11 +204,6 @@ class GemActivity : AppCompatActivity() {
model.request(historyAddress) model.request(historyAddress)
} }
R.id.overflow_menu_about -> AboutDialog.show(this) R.id.overflow_menu_about -> AboutDialog.show(this)
R.id.overflow_menu_set_home -> {
SetHomeDialog.show(this, binding.addressEdit.text.toString()) {
showAlert("Home capsule updated")
}
}
R.id.overflow_menu_settings -> { R.id.overflow_menu_settings -> {
startActivity(Intent(this, SettingsActivity::class.java)) startActivity(Intent(this, SettingsActivity::class.java))
} }
@ -218,8 +212,7 @@ class GemActivity : AppCompatActivity() {
} }
binding.home.setOnClickListener { binding.home.setOnClickListener {
val prefs = getSharedPreferences("oppen.tva.ui.dialogs.set_home", Context.MODE_PRIVATE) val home = PreferenceManager.getDefaultSharedPreferences(this).getString("home_capsule", Ariane.DEFAULT_HOME_CAPSULE)
val home = prefs.getString("home", Ariane.DEFAULT_HOME_CAPSULE)
model.request(home!!) model.request(home!!)
} }

View File

@ -35,7 +35,7 @@ class BookmarksDialog(
//None as yet //None as yet
view.bookmarks_toolbar.inflateMenu(R.menu.add_bookmarks) view.bookmarks_toolbar.inflateMenu(R.menu.add_bookmarks)
view.bookmarks_toolbar.setOnMenuItemClickListener {menuItem -> view.bookmarks_toolbar.setOnMenuItemClickListener {_ ->
true true
} }

View File

@ -1,16 +1,22 @@
package oppen.ariane.ui.settings package oppen.ariane.ui.settings
import android.os.Bundle import android.os.Bundle
import androidx.preference.Preference import android.text.InputType
import androidx.preference.PreferenceCategory import android.text.Spannable
import androidx.preference.PreferenceFragmentCompat import android.text.SpannableString
import androidx.preference.SwitchPreferenceCompat import android.text.style.ForegroundColorSpan
import android.view.inputmethod.EditorInfo
import android.widget.EditText
import androidx.core.content.ContextCompat
import androidx.preference.*
import oppen.ariane.Ariane
import java.security.SecureRandom import java.security.SecureRandom
import java.util.* import java.util.*
import javax.net.ssl.SSLContext import javax.net.ssl.SSLContext
import javax.net.ssl.SSLSocket import javax.net.ssl.SSLSocket
import javax.net.ssl.SSLSocketFactory import javax.net.ssl.SSLSocketFactory
class SettingsFragment: PreferenceFragmentCompat(), Preference.OnPreferenceChangeListener { class SettingsFragment: PreferenceFragmentCompat(), Preference.OnPreferenceChangeListener {
lateinit var protocols: Array<String> lateinit var protocols: Array<String>
@ -19,6 +25,38 @@ class SettingsFragment: PreferenceFragmentCompat(), Preference.OnPreferenceChang
val context = preferenceManager.context val context = preferenceManager.context
val screen = preferenceManager.createPreferenceScreen(context) val screen = preferenceManager.createPreferenceScreen(context)
/**
* Ariane App Settings
*/
val appCategory = PreferenceCategory(context)
appCategory.key = "app_category"
appCategory.title = "Configure Ariane"
screen.addPreference(appCategory)
//Home
val homePreference = EditTextPreference(context)
homePreference.title = "Home Capsule"
homePreference.key = "home_capsule"
val homecapsule = preferenceManager.sharedPreferences.getString(
"home_capsule",
Ariane.DEFAULT_HOME_CAPSULE
)
homePreference.summary = homecapsule
homePreference.positiveButtonText = getThemedSpan("Update")
homePreference.negativeButtonText = getThemedSpan("Cancel")
homePreference.title = getThemedSpan("Home Capsule")
homePreference.setOnPreferenceChangeListener { _, newValue ->
homePreference.summary = newValue.toString()
true
}
homePreference.setOnBindEditTextListener{ editText ->
editText.imeOptions = EditorInfo.IME_ACTION_DONE
editText.setSelection(editText.text.toString().length)//Set caret position to end
}
appCategory.addPreference(homePreference)
/** /**
* TLS Settings * TLS Settings
*/ */
@ -71,7 +109,9 @@ class SettingsFragment: PreferenceFragmentCompat(), Preference.OnPreferenceChang
protocols.forEach { protocol -> protocols.forEach { protocol ->
val tlsSwitchKey = "tls_${protocol.toLowerCase(Locale.getDefault())}" val tlsSwitchKey = "tls_${protocol.toLowerCase(Locale.getDefault())}"
if (tlsSwitchKey != key) { if (tlsSwitchKey != key) {
val otherTLSSwitch = preferenceScreen.findPreference<SwitchPreferenceCompat>(tlsSwitchKey) val otherTLSSwitch = preferenceScreen.findPreference<SwitchPreferenceCompat>(
tlsSwitchKey
)
otherTLSSwitch?.isChecked = false otherTLSSwitch?.isChecked = false
} }
} }
@ -100,4 +140,21 @@ class SettingsFragment: PreferenceFragmentCompat(), Preference.OnPreferenceChang
protocol protocol
).apply() ).apply()
} }
/**
* Unfortunately it doesn't look like EditTextPreference supports Day/Night theme
* or else is otherwise broken. Use Spannable to set a suitable text colour for the dialog buttons
*/
private fun getThemedSpan(text: String): Spannable{
val textSpan = SpannableString(text)
textSpan.setSpan(
ForegroundColorSpan(
ContextCompat.getColor(
requireContext(),
oppen.ariane.R.color.themed_text
)
), 0, text.length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
)
return textSpan
}
} }

View File

@ -29,10 +29,6 @@
android:icon="@drawable/vector_link"/> android:icon="@drawable/vector_link"/>
</group> </group>
<group android:id="@+id/other" > <group android:id="@+id/other" >
<item
android:id="@+id/overflow_menu_set_home"
android:title="@string/set_home"
android:icon="@drawable/vector_set_home"/>
<item <item
android:id="@+id/overflow_menu_settings" android:id="@+id/overflow_menu_settings"
android:title="@string/settings" android:title="@string/settings"

View File

@ -9,6 +9,7 @@
<color name="address_background">#2e2e2e</color> <color name="address_background">#2e2e2e</color>
<color name="vibrant_stroke">#ffffff</color> <color name="vibrant_stroke">#ffffff</color>
<color name="themed_text">#ffffff</color>
<color name="header_background">#1d1d1d</color> <color name="header_background">#1d1d1d</color>
<color name="stroke">#d2d2d2</color> <color name="stroke">#d2d2d2</color>
</resources> </resources>

View File

@ -9,6 +9,7 @@
<color name="address_background">#dfdfdf</color> <color name="address_background">#dfdfdf</color>
<color name="vibrant_stroke">#000000</color> <color name="vibrant_stroke">#000000</color>
<color name="themed_text">#000000</color>
<color name="header_background">#eeeeee</color> <color name="header_background">#eeeeee</color>
<color name="stroke">#0d0d0d</color> <color name="stroke">#0d0d0d</color>
</resources> </resources>