aboutsummaryrefslogtreecommitdiff
path: root/library
diff options
context:
space:
mode:
Diffstat (limited to 'library')
-rw-r--r--library/src/main/kotlin/ca/allanwang/kau/kpref/KPrefActivity.kt43
-rw-r--r--library/src/main/kotlin/ca/allanwang/kau/kpref/KPrefBinder.kt10
-rw-r--r--library/src/main/kotlin/ca/allanwang/kau/kpref/items/KPrefSubItems.kt2
-rw-r--r--library/src/main/kotlin/ca/allanwang/kau/views/TextSwitcherThemed.kt5
4 files changed, 27 insertions, 33 deletions
diff --git a/library/src/main/kotlin/ca/allanwang/kau/kpref/KPrefActivity.kt b/library/src/main/kotlin/ca/allanwang/kau/kpref/KPrefActivity.kt
index 9653029..e4be59b 100644
--- a/library/src/main/kotlin/ca/allanwang/kau/kpref/KPrefActivity.kt
+++ b/library/src/main/kotlin/ca/allanwang/kau/kpref/KPrefActivity.kt
@@ -39,11 +39,10 @@ abstract class KPrefActivity : AppCompatActivity(), KPrefActivityContract {
val toolbarTitle: TextSwitcherThemed by bindView(R.id.kau_toolbar_text)
val prefHolder: ViewAnimator by bindView(R.id.kau_holder)
private lateinit var globalOptions: GlobalOptions
- private val titles: LinkedList<Pair<Int, Int>> = LinkedList()
- private var index = -1
+ private val titleStack: Stack<Int> = Stack()
var animate: Boolean = true
val isRootPref: Boolean
- get() = index <= 0
+ get() = titleStack.size == 1
//we can't use the same animations for both views; otherwise the durations will sync
private val SLIDE_IN_LEFT_TITLE: Animation by lazy { AnimationUtils.loadAnimation(this, R.anim.kau_slide_in_left) }
@@ -79,13 +78,11 @@ abstract class KPrefActivity : AppCompatActivity(), KPrefActivityContract {
toolbarCanvas.set(resolveColor(R.attr.colorPrimary))
bgCanvas.set(resolveColor(android.R.attr.colorBackground))
prefHolder.animateFirstView = false
- titles.add(Pair(-1, R.string.kau_settings))
//setup prefs
val core = CoreAttributeBuilder()
val builder = kPrefCoreAttributes()
core.builder()
globalOptions = GlobalOptions(core, this)
- showNextPrefs(onCreateKPrefs(savedInstanceState))
with(toolbarTitle) {
setFactory {
TextView(this@KPrefActivity).apply {
@@ -96,19 +93,19 @@ abstract class KPrefActivity : AppCompatActivity(), KPrefActivityContract {
TextViewCompat.setTextAppearance(this, R.style.TextAppearance_AppCompat_Title)
}
}
- setCurrentText(string(R.string.kau_settings))
}
+ showNextPrefs(R.string.kau_settings, onCreateKPrefs(savedInstanceState))
}
override fun onPostCreate(savedInstanceState: Bundle?) {
super.onPostCreate(savedInstanceState)
}
- override fun showNextPrefs(builder: KPrefAdapterBuilder.() -> Unit) {
- index++
+ override fun showNextPrefs(@StringRes toolbarTitleRes: Int, builder: KPrefAdapterBuilder.() -> Unit) {
val rv = RecyclerView(this).apply {
layoutParams = FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT)
- titles.addFirst(Pair(index, setKPrefAdapter(globalOptions, builder)))
+ titleStack.push(toolbarTitleRes)
+ setKPrefAdapter(globalOptions, builder)
}
with(prefHolder) {
inAnimation = if (animate) SLIDE_IN_RIGHT_ITEMS else null
@@ -116,18 +113,16 @@ abstract class KPrefActivity : AppCompatActivity(), KPrefActivityContract {
addView(rv)
showNext()
}
- if (titles.first().second != -1) {
- with(toolbarTitle) {
- inAnimation = if (animate) SLIDE_IN_RIGHT_TITLE else null
- outAnimation = if (animate) SLIDE_OUT_LEFT_TITLE else null
- setText(string(titles.first().second))
- }
+ with(toolbarTitle) {
+ inAnimation = if (animate) SLIDE_IN_RIGHT_TITLE else null
+ outAnimation = if (animate) SLIDE_OUT_LEFT_TITLE else null
+ setText(string(titleStack.peek()))
}
}
override fun showPrevPrefs() {
- if (index <= 0) {
- KL.e("Cannot go back in KPrefActivity; already at index $index")
+ if (titleStack.size <= 1) {
+ KL.e("Cannot go back in KPrefActivity; already at index ${titleStack.size - 1}")
return
}
val current = prefHolder.currentView
@@ -137,15 +132,11 @@ abstract class KPrefActivity : AppCompatActivity(), KPrefActivityContract {
showPrevious()
removeView(current)
}
- index--
- titles.removeFirst()
- val nextTitle = string(titles.first { it.first <= index && it.second != -1 }.second)
- if (nextTitle != (toolbarTitle.currentView as TextView).text) {
- with(toolbarTitle) {
- inAnimation = if (animate) SLIDE_IN_LEFT_TITLE else null
- outAnimation = if (animate) SLIDE_OUT_RIGHT_TITLE else null
- setText(string(titles.first { it.first <= index && it.second != -1 }.second))
- }
+ titleStack.pop()
+ with(toolbarTitle) {
+ inAnimation = if (animate) SLIDE_IN_LEFT_TITLE else null
+ outAnimation = if (animate) SLIDE_OUT_RIGHT_TITLE else null
+ setText(string(titleStack.peek()))
}
}
diff --git a/library/src/main/kotlin/ca/allanwang/kau/kpref/KPrefBinder.kt b/library/src/main/kotlin/ca/allanwang/kau/kpref/KPrefBinder.kt
index a6ab8cd..564898a 100644
--- a/library/src/main/kotlin/ca/allanwang/kau/kpref/KPrefBinder.kt
+++ b/library/src/main/kotlin/ca/allanwang/kau/kpref/KPrefBinder.kt
@@ -15,9 +15,9 @@ import com.mikepenz.fastadapter.commons.adapters.FastItemAdapter
/**
* Base extension that will register the layout manager and adapter with the given items
- * Returns toolbar title res
+ * Returns FastAdapter
*/
-fun RecyclerView.setKPrefAdapter(globalOptions: GlobalOptions, builder: KPrefAdapterBuilder.() -> Unit): Int {
+fun RecyclerView.setKPrefAdapter(globalOptions: GlobalOptions, builder: KPrefAdapterBuilder.() -> Unit): FastItemAdapter<KPrefItemCore> {
layoutManager = LinearLayoutManager(context)
val adapter = FastItemAdapter<KPrefItemCore>()
adapter.withOnClickListener { v, _, item, _ -> item.onClick(v, v.findViewById(R.id.kau_pref_inner_content)) }
@@ -25,7 +25,7 @@ fun RecyclerView.setKPrefAdapter(globalOptions: GlobalOptions, builder: KPrefAda
builder.invoke(items)
adapter.add(items.list)
this.adapter = adapter
- return items.toolbarTitleRes
+ return adapter
}
/**
@@ -45,7 +45,7 @@ class CoreAttributeBuilder : CoreAttributeContract {
}
interface KPrefActivityContract {
- fun showNextPrefs(builder: KPrefAdapterBuilder.() -> Unit)
+ fun showNextPrefs(@StringRes toolbarTitleRes:Int, builder: KPrefAdapterBuilder.() -> Unit)
fun showPrevPrefs()
}
@@ -62,8 +62,6 @@ class GlobalOptions(core: CoreAttributeContract, activity: KPrefActivityContract
*/
class KPrefAdapterBuilder(internal val globalOptions: GlobalOptions) {
- var toolbarTitleRes: Int = -1
-
fun header(@StringRes title: Int)
= list.add(KPrefHeader(KPrefItemCore.CoreBuilder(globalOptions, title)))
diff --git a/library/src/main/kotlin/ca/allanwang/kau/kpref/items/KPrefSubItems.kt b/library/src/main/kotlin/ca/allanwang/kau/kpref/items/KPrefSubItems.kt
index c8a9fda..8614cb6 100644
--- a/library/src/main/kotlin/ca/allanwang/kau/kpref/items/KPrefSubItems.kt
+++ b/library/src/main/kotlin/ca/allanwang/kau/kpref/items/KPrefSubItems.kt
@@ -16,7 +16,7 @@ import ca.allanwang.kau.kpref.KPrefAdapterBuilder
class KPrefSubItems(val builder: KPrefSubItemsBuilder) : KPrefItemCore(builder) {
override fun onClick(itemView: View, innerContent: View?): Boolean {
- builder.globalOptions.showNextPrefs(builder.itemBuilder)
+ builder.globalOptions.showNextPrefs(builder.titleRes, builder.itemBuilder)
return true
}
diff --git a/library/src/main/kotlin/ca/allanwang/kau/views/TextSwitcherThemed.kt b/library/src/main/kotlin/ca/allanwang/kau/views/TextSwitcherThemed.kt
index c4de808..bef661e 100644
--- a/library/src/main/kotlin/ca/allanwang/kau/views/TextSwitcherThemed.kt
+++ b/library/src/main/kotlin/ca/allanwang/kau/views/TextSwitcherThemed.kt
@@ -19,4 +19,9 @@ class TextSwitcherThemed @JvmOverloads constructor(context: Context, attrs: Attr
(getChildAt(0) as TextView).setTextColor(value)
(getChildAt(1) as TextView).setTextColor(value)
}
+
+ override fun setText(text: CharSequence?) {
+ if ((currentView as TextView).text == text) return
+ super.setText(text)
+ }
} \ No newline at end of file