blob: 20a81e41283e2a4116faffda67d30356ee085185 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
package ca.allanwang.kau.ui.activities
import android.os.Build
import android.os.Bundle
import android.support.annotation.RequiresApi
import android.support.design.widget.AppBarLayout
import android.support.design.widget.CoordinatorLayout
import android.support.design.widget.FloatingActionButton
import android.support.v7.app.AppCompatActivity
import android.support.v7.widget.RecyclerView
import android.support.v7.widget.Toolbar
import android.transition.TransitionInflater
import ca.allanwang.kau.ui.R
import ca.allanwang.kau.ui.widgets.ElasticDragDismissFrameLayout
import ca.allanwang.kau.utils.bindView
/**
* Created by Allan Wang on 2017-07-17.
*
* A generic activity comprised of an ElasticDragDismissFrameLayout, CoordinatorLayout, Toolbar, RecyclerView, and Fab
* [ca.allanwang.kau.ui.widgets.ElasticDragDismissFrameLayout]
* [android.support.v7.widget.RecyclerView]
*
* The recyclerview defaults to a linearlayoutmanager, and the adapter is automatically bounded
*
* The exit animation is set to slide out, but the entrance must be defined yourself
*/
@RequiresApi(Build.VERSION_CODES.LOLLIPOP)
abstract class ElasticRecyclerActivity : AppCompatActivity() {
val appBar: AppBarLayout by bindView(R.id.kau_appbar)
val toolbar: Toolbar by bindView(R.id.kau_toolbar)
val coordinator: CoordinatorLayout by bindView(R.id.kau_coordinator)
val draggableFrame: ElasticDragDismissFrameLayout by bindView(R.id.kau_draggable)
val recycler: RecyclerView by bindView(R.id.kau_recycler)
val fab: FloatingActionButton by bindView(R.id.kau_fab)
val configs = Configs()
class Configs {
var exitTransitionBottom = R.transition.kau_exit_slide_bottom
var exitTransitionTop = R.transition.kau_exit_slide_top
}
override final fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.kau_elastic_recycler_activity)
setSupportActionBar(toolbar)
if (!onCreate(savedInstanceState, configs)) return
draggableFrame.addListener(object : ElasticDragDismissFrameLayout.SystemChromeFader(this) {
override fun onDragDismissed() {
window.returnTransition = TransitionInflater.from(this@ElasticRecyclerActivity)
.inflateTransition(if (draggableFrame.translationY > 0) configs.exitTransitionBottom else configs.exitTransitionTop)
recycler.stopScroll()
finishAfterTransition()
}
})
}
/**
* The replacement method for the original [onCreate]
* The configurations are passed and can be customized here
* Returns true (default) if we wish to continue with the remaining optional setup
* Return false if we wish to skip this (usually if we have more complez requirements)
*/
abstract fun onCreate(savedInstanceState: Bundle?, configs: Configs): Boolean
/**
* Receive actions when the a click event is received outside of the coordinator
*/
fun setOutsideTapListener(listener: () -> Unit) {
draggableFrame.setOnClickListener { listener() }
}
}
|