Feature: Preference
This commit is contained in:
@ -1,6 +1,7 @@
|
||||
package io.neoterm.preference
|
||||
|
||||
import android.content.Context
|
||||
import android.content.SharedPreferences
|
||||
import android.preference.PreferenceManager
|
||||
import io.neoterm.backend.TerminalSession
|
||||
import io.neoterm.services.NeoTermService
|
||||
@ -10,17 +11,66 @@ import io.neoterm.services.NeoTermService
|
||||
*/
|
||||
|
||||
object NeoTermPreference {
|
||||
var CURRENT_SESSION_KEY = "neoterm_current_session"
|
||||
const val KEY_FONT_SIZE = "neoterm_general_font_size"
|
||||
const val KEY_CURRENT_SESSION = "neoterm_service_current_session"
|
||||
|
||||
fun storeCurrentSession(context: Context, session: TerminalSession) {
|
||||
PreferenceManager.getDefaultSharedPreferences(context)
|
||||
.edit()
|
||||
.putString(NeoTermPreference.CURRENT_SESSION_KEY, session.mHandle)
|
||||
var preference: SharedPreferences? = null
|
||||
var context: Context? = null
|
||||
|
||||
fun init(context: Context) {
|
||||
this.context = context
|
||||
preference = PreferenceManager.getDefaultSharedPreferences(context)
|
||||
}
|
||||
|
||||
fun cleanup() {
|
||||
preference = null
|
||||
context = null
|
||||
}
|
||||
|
||||
fun store(key: Int, value: Any) {
|
||||
store(context!!.getString(key), value)
|
||||
}
|
||||
|
||||
fun store(key: String, value: Any) {
|
||||
when (value) {
|
||||
is Int -> preference!!.edit().putInt(key, value).apply()
|
||||
is String -> preference!!.edit().putString(key, value).apply()
|
||||
is Boolean -> preference!!.edit().putBoolean(key, value).apply()
|
||||
}
|
||||
}
|
||||
|
||||
fun loadInt(key: Int, defaultValue: Int): Int {
|
||||
return loadInt(context!!.getString(key), defaultValue)
|
||||
}
|
||||
|
||||
fun loadString(key: Int, defaultValue: String?): String {
|
||||
return loadString(context!!.getString(key), defaultValue)
|
||||
}
|
||||
|
||||
fun loadBoolean(key: Int, defaultValue: Boolean): Boolean {
|
||||
return loadBoolean(context!!.getString(key), defaultValue)
|
||||
}
|
||||
|
||||
fun loadInt(key: String, defaultValue: Int): Int {
|
||||
return preference!!.getInt(key, defaultValue)
|
||||
}
|
||||
|
||||
fun loadString(key: String, defaultValue: String?): String {
|
||||
return preference!!.getString(key, defaultValue)
|
||||
}
|
||||
|
||||
fun loadBoolean(key: String, defaultValue: Boolean): Boolean {
|
||||
return preference!!.getBoolean(key, defaultValue)
|
||||
}
|
||||
|
||||
fun storeCurrentSession(session: TerminalSession) {
|
||||
preference!!.edit()
|
||||
.putString(NeoTermPreference.KEY_CURRENT_SESSION, session.mHandle)
|
||||
.apply()
|
||||
}
|
||||
|
||||
fun getCurrentSession(termService: NeoTermService?): TerminalSession? {
|
||||
val sessionHandle = PreferenceManager.getDefaultSharedPreferences(termService!!).getString(CURRENT_SESSION_KEY, "")
|
||||
val sessionHandle = PreferenceManager.getDefaultSharedPreferences(termService!!).getString(KEY_CURRENT_SESSION, "")
|
||||
var i = 0
|
||||
val len = termService.sessions.size
|
||||
while (i < len) {
|
||||
|
25
app/src/main/java/io/neoterm/ui/AboutActivity.kt
Normal file
25
app/src/main/java/io/neoterm/ui/AboutActivity.kt
Normal file
@ -0,0 +1,25 @@
|
||||
package io.neoterm.ui
|
||||
|
||||
import android.os.Bundle
|
||||
import android.support.design.widget.FloatingActionButton
|
||||
import android.support.design.widget.Snackbar
|
||||
import android.support.v7.app.AppCompatActivity
|
||||
import android.support.v7.widget.Toolbar
|
||||
|
||||
import io.neoterm.R
|
||||
|
||||
class AboutActivity : AppCompatActivity() {
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_about)
|
||||
val toolbar = findViewById(R.id.about_toolbar) as Toolbar
|
||||
setSupportActionBar(toolbar)
|
||||
|
||||
val fab = findViewById(R.id.about_fab) as FloatingActionButton
|
||||
fab.setOnClickListener({ view ->
|
||||
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
|
||||
.setAction("Action", null).show()
|
||||
})
|
||||
}
|
||||
}
|
@ -12,6 +12,7 @@ import android.support.v7.app.AppCompatActivity
|
||||
import android.support.v7.widget.Toolbar
|
||||
import android.view.KeyEvent
|
||||
import android.view.View
|
||||
import android.view.WindowManager
|
||||
import android.widget.ImageButton
|
||||
import de.mrapp.android.tabswitcher.*
|
||||
import de.mrapp.android.tabswitcher.view.TabSwitcherButton
|
||||
@ -45,11 +46,20 @@ class NeoTermActivity : AppCompatActivity(), ServiceConnection {
|
||||
addNewSession(session)
|
||||
}
|
||||
switchToSession(getStoredCurrentSessionOrLast())
|
||||
} else {
|
||||
tabSwitcher.showSwitcher()
|
||||
addNewSession("NeoTerm #0", createRevealAnimation())
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
NeoTermPreference.init(this)
|
||||
if (NeoTermPreference.loadBoolean(R.string.key_ui_fullscreen, false)) {
|
||||
window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
|
||||
WindowManager.LayoutParams.FLAG_FULLSCREEN)
|
||||
}
|
||||
|
||||
setContentView(R.layout.tab_main)
|
||||
|
||||
tabSwitcher = findViewById(R.id.tab_switcher) as TabSwitcher
|
||||
@ -68,16 +78,16 @@ class NeoTermActivity : AppCompatActivity(), ServiceConnection {
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
tabSwitcher.addListener(object : TabSwitcherListener {
|
||||
private var tabSwitcherButtonInited = false
|
||||
private var tabSwitcherButtonInit = false
|
||||
|
||||
override fun onSwitcherShown(tabSwitcher: TabSwitcher) {
|
||||
if (tabSwitcherButtonInited) {
|
||||
if (tabSwitcherButtonInit) {
|
||||
return
|
||||
}
|
||||
|
||||
val menu = tabSwitcher.toolbarMenu
|
||||
if (menu != null) {
|
||||
tabSwitcherButtonInited = true
|
||||
tabSwitcherButtonInit = true
|
||||
val tabSwitcherButton = menu.findItem(R.id.toggle_tab_switcher_menu_item).actionView as TabSwitcherButton
|
||||
tabSwitcherButton.setOnClickListener {
|
||||
if (tabSwitcher.isSwitcherShown) {
|
||||
@ -94,7 +104,7 @@ class NeoTermActivity : AppCompatActivity(), ServiceConnection {
|
||||
|
||||
override fun onSelectionChanged(tabSwitcher: TabSwitcher, selectedTabIndex: Int, selectedTab: Tab?) {
|
||||
if (selectedTab is TermTab && selectedTab.termSession != null) {
|
||||
NeoTermPreference.storeCurrentSession(this@NeoTermActivity, selectedTab.termSession!!)
|
||||
NeoTermPreference.storeCurrentSession(selectedTab.termSession!!)
|
||||
}
|
||||
}
|
||||
|
||||
@ -125,6 +135,7 @@ class NeoTermActivity : AppCompatActivity(), ServiceConnection {
|
||||
termService = null
|
||||
}
|
||||
unbindService(this)
|
||||
NeoTermPreference.cleanup()
|
||||
}
|
||||
|
||||
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
|
||||
|
@ -3,7 +3,11 @@ package io.neoterm.view.tab
|
||||
import android.content.ClipData
|
||||
import android.content.ClipboardManager
|
||||
import android.content.Context
|
||||
import android.media.SoundPool
|
||||
import android.os.Vibrator
|
||||
import io.neoterm.R
|
||||
import io.neoterm.backend.TerminalSession
|
||||
import io.neoterm.preference.NeoTermPreference
|
||||
import io.neoterm.view.TerminalView
|
||||
|
||||
/**
|
||||
@ -13,6 +17,9 @@ class TermSessionChangedCallback : TerminalSession.SessionChangedCallback {
|
||||
var termView: TerminalView? = null
|
||||
var termTab: TermTab? = null
|
||||
|
||||
var bellId: Int = 0
|
||||
var soundPool: SoundPool? = null
|
||||
|
||||
override fun onTextChanged(changedSession: TerminalSession?) {
|
||||
termView?.onScreenUpdated()
|
||||
}
|
||||
@ -35,6 +42,22 @@ class TermSessionChangedCallback : TerminalSession.SessionChangedCallback {
|
||||
}
|
||||
|
||||
override fun onBell(session: TerminalSession?) {
|
||||
if (termView == null) {
|
||||
return
|
||||
}
|
||||
|
||||
if (NeoTermPreference.loadBoolean(R.string.key_general_bell, false)) {
|
||||
if (soundPool == null) {
|
||||
soundPool = SoundPool.Builder().setMaxStreams(1).build()
|
||||
bellId = soundPool!!.load(termView!!.context, R.raw.bell, 1)
|
||||
}
|
||||
soundPool?.play(bellId, 1f, 1f, 0, 0, 1f)
|
||||
}
|
||||
|
||||
if (NeoTermPreference.loadBoolean(R.string.key_general_vibrate, false)) {
|
||||
val vibrator = termView!!.context.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
|
||||
vibrator.vibrate(100)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onColorsChanged(session: TerminalSession?) {
|
||||
|
@ -10,9 +10,9 @@ import android.view.ViewGroup
|
||||
import de.mrapp.android.tabswitcher.Tab
|
||||
import de.mrapp.android.tabswitcher.TabSwitcher
|
||||
import de.mrapp.android.tabswitcher.TabSwitcherDecorator
|
||||
import io.neoterm.ui.NeoTermActivity
|
||||
import io.neoterm.R
|
||||
import io.neoterm.customize.color.builtin.MaterialColorScheme
|
||||
import io.neoterm.preference.NeoTermPreference
|
||||
import io.neoterm.ui.NeoTermActivity
|
||||
import io.neoterm.view.ExtraKeysView
|
||||
import io.neoterm.view.TerminalView
|
||||
|
||||
@ -59,7 +59,7 @@ class TermTabDecorator(val context: NeoTermActivity) : TabSwitcherDecorator() {
|
||||
if (view == null) {
|
||||
return
|
||||
}
|
||||
view.textSize = 30
|
||||
view.textSize = NeoTermPreference.loadInt(NeoTermPreference.KEY_FONT_SIZE, 30)
|
||||
view.setTypeface(Typeface.MONOSPACE)
|
||||
|
||||
if (tab is TermTab) {
|
||||
|
@ -5,7 +5,9 @@ import android.view.InputDevice
|
||||
import android.view.KeyEvent
|
||||
import android.view.MotionEvent
|
||||
import android.view.inputmethod.InputMethodManager
|
||||
import io.neoterm.R
|
||||
import io.neoterm.backend.TerminalSession
|
||||
import io.neoterm.preference.NeoTermPreference
|
||||
import io.neoterm.view.ExtraKeysView
|
||||
import io.neoterm.view.TerminalView
|
||||
import io.neoterm.view.TerminalViewClient
|
||||
@ -27,7 +29,9 @@ class TermViewClient(val context: Context) : TerminalViewClient {
|
||||
if (scale < 0.9f || scale > 1.1f) {
|
||||
val increase = scale > 1f
|
||||
val changedSize = (if (increase) 1 else -1) * 2
|
||||
termView!!.textSize = termView!!.textSize + changedSize
|
||||
val fontSize = termView!!.textSize + changedSize
|
||||
termView!!.textSize = fontSize
|
||||
NeoTermPreference.store(NeoTermPreference.KEY_FONT_SIZE, fontSize)
|
||||
return 1.0f
|
||||
}
|
||||
return scale
|
||||
@ -39,7 +43,7 @@ class TermViewClient(val context: Context) : TerminalViewClient {
|
||||
}
|
||||
|
||||
override fun shouldBackButtonBeMappedToEscape(): Boolean {
|
||||
return false
|
||||
return NeoTermPreference.loadBoolean(R.string.key_generaL_backspace_map_to_esc, false)
|
||||
}
|
||||
|
||||
override fun copyModeChanged(copyMode: Boolean) {
|
||||
|
Reference in New Issue
Block a user