Skip to content

Commit f0b84f5

Browse files
committed
Remove unnecessary properties / move SharedElementCallback to anonymous object
1 parent a87e33d commit f0b84f5

File tree

9 files changed

+73
-57
lines changed

9 files changed

+73
-57
lines changed

app/src/main/java/io/github/droidkaigi/confsched2018/presentation/detail/SessionDetailActivity.kt

+22-27
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,6 @@ class SessionDetailActivity :
4040
@Inject lateinit var viewModelFactory: ViewModelProvider.Factory
4141
@Inject lateinit var drawerMenu: DrawerMenu
4242

43-
private var backPressed = false
44-
4543
private val binding: ActivitySessionDetailBinding by lazy {
4644
DataBindingUtil
4745
.setContentView<ActivitySessionDetailBinding>(
@@ -62,23 +60,6 @@ class SessionDetailActivity :
6260
intent.getStringExtra(EXTRA_SESSION_ID)
6361
}
6462

65-
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
66-
private val sharedElementCallback = object : SharedElementCallback() {
67-
override fun onMapSharedElements(
68-
names: MutableList<String>?,
69-
sharedElements: MutableMap<String, View>?) {
70-
super.onMapSharedElements(names, sharedElements)
71-
72-
if (backPressed) {
73-
val currentFragment = pagerAdapter.findFragmentByPosition(
74-
binding.detailSessionsPager,
75-
binding.detailSessionsPager.currentItem)
76-
sharedElements?.clear()
77-
currentFragment.hideButton()
78-
}
79-
}
80-
}
81-
8263
override fun onCreate(savedInstanceState: Bundle?) {
8364
super.onCreate(savedInstanceState)
8465
supportPostponeEnterTransition()
@@ -93,9 +74,8 @@ class SessionDetailActivity :
9374
sessions = result.data
9475
bindSessions(sessions)
9576
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
96-
setEnterSharedElementCallback(sharedElementCallback)
77+
removeSharedElements()
9778
}
98-
9979
}
10080
is Result.Failure -> {
10181
Timber.e(result.e)
@@ -121,11 +101,26 @@ class SessionDetailActivity :
121101
}
122102
}
123103

104+
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
105+
private fun removeSharedElements() {
106+
setEnterSharedElementCallback(object : SharedElementCallback() {
107+
override fun onMapSharedElements(
108+
names: MutableList<String>?,
109+
sharedElements: MutableMap<String, View>?) {
110+
super.onMapSharedElements(names, sharedElements)
111+
112+
val currentFragment = pagerAdapter.findFragmentByPosition(
113+
binding.detailSessionsPager,
114+
binding.detailSessionsPager.currentItem)
115+
sharedElements?.clear()
116+
currentFragment.hideButton()
117+
}
118+
})
119+
}
124120

125121
override fun supportFragmentInjector(): AndroidInjector<Fragment> = dispatchingAndroidInjector
126122

127123
override fun onBackPressed() {
128-
backPressed = true
129124
if (drawerMenu.closeDrawerIfNeeded()) {
130125
super.onBackPressed()
131126
}
@@ -158,7 +153,6 @@ class SessionDetailActivity :
158153
fun findFragmentByPosition(viewPager: ViewPager, position: Int): SessionDetailFragment {
159154
return instantiateItem(viewPager, position) as SessionDetailFragment
160155
}
161-
162156
}
163157

164158
companion object {
@@ -170,9 +164,11 @@ class SessionDetailActivity :
170164
}
171165

172166
fun start(activity: Activity, session: Session, sharedElement: Pair<View, String>) {
173-
val options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, sharedElement)
174-
activity.startActivity(createIntent(activity, session.id, sharedElement),
175-
options.toBundle())
167+
val options = ActivityOptionsCompat.makeSceneTransitionAnimation(
168+
activity,
169+
sharedElement)
170+
val intent = createIntent(activity, session.id, sharedElement)
171+
activity.startActivity(intent, options.toBundle())
176172
}
177173

178174
fun createIntent(context: Context, sessionId: String): Intent {
@@ -189,6 +185,5 @@ class SessionDetailActivity :
189185
putExtra(EXTRA_TRANSITION_NAME, sharedElement.second)
190186
}
191187
}
192-
193188
}
194189
}

app/src/main/java/io/github/droidkaigi/confsched2018/presentation/detail/SessionDetailFragment.kt

+21-24
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.github.droidkaigi.confsched2018.presentation.detail
22

3+
import android.annotation.TargetApi
34
import android.arch.lifecycle.ViewModelProvider
45
import android.arch.lifecycle.ViewModelProviders
56
import android.graphics.drawable.Animatable
@@ -11,16 +12,15 @@ import android.text.TextUtils
1112
import android.view.LayoutInflater
1213
import android.view.View
1314
import android.view.ViewGroup
14-
import android.view.ViewTreeObserver
1515
import io.github.droidkaigi.confsched2018.R
1616
import io.github.droidkaigi.confsched2018.databinding.FragmentSessionDetailBinding
1717
import io.github.droidkaigi.confsched2018.di.Injectable
1818
import io.github.droidkaigi.confsched2018.model.Level
1919
import io.github.droidkaigi.confsched2018.model.Session
2020
import io.github.droidkaigi.confsched2018.presentation.NavigationController
2121
import io.github.droidkaigi.confsched2018.presentation.Result
22-
import io.github.droidkaigi.confsched2018.presentation.common.view.SpeakersSummaryLayout
2322
import io.github.droidkaigi.confsched2018.util.SessionAlarm
23+
import io.github.droidkaigi.confsched2018.util.ext.addOnetimeOnPreDrawListener
2424
import io.github.droidkaigi.confsched2018.util.ext.context
2525
import io.github.droidkaigi.confsched2018.util.ext.drawable
2626
import io.github.droidkaigi.confsched2018.util.ext.observe
@@ -39,9 +39,6 @@ class SessionDetailFragment : Fragment(), Injectable {
3939
ViewModelProviders.of(activity!!, viewModelFactory).get(SessionDetailViewModel::class.java)
4040
}
4141

42-
val speakerSummary: SpeakersSummaryLayout
43-
get() = binding.speakerSummary
44-
4542
override fun onCreateView(
4643
inflater: LayoutInflater,
4744
container: ViewGroup?,
@@ -84,25 +81,15 @@ class SessionDetailFragment : Fragment(), Injectable {
8481

8582
binding.toolbar.setNavigationOnClickListener { activity?.finish() }
8683

87-
binding.speakerSummary.viewTreeObserver.addOnPreDrawListener(
88-
object : ViewTreeObserver.OnPreDrawListener {
89-
override fun onPreDraw(): Boolean {
90-
binding.speakerSummary.viewTreeObserver.removeOnPreDrawListener(this)
91-
92-
val firstSessionId = (activity as? SessionDetailActivity)?.firstSessionId
93-
?: return true
94-
val transitionName = arguments!!.getString(EXTRA_TRANSITION_NAME)
95-
if (!TextUtils.isEmpty(arguments!!.getString(EXTRA_TRANSITION_NAME))
96-
&& firstSessionId == transitionName
97-
&& Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
98-
ViewCompat.setTransitionName(
99-
view.findViewById<View>(R.id.speaker_summary),
100-
transitionName)
101-
activity?.supportStartPostponedEnterTransition()
102-
}
103-
return true
104-
}
105-
})
84+
val firstSessionId = (activity as? SessionDetailActivity)?.firstSessionId ?: return
85+
val transitionName = arguments!!.getString(EXTRA_TRANSITION_NAME)
86+
87+
if (!TextUtils.isEmpty(transitionName)
88+
&& firstSessionId == transitionName
89+
&& Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
90+
initViewTransitions(view)
91+
}
92+
10693
}
10794

10895
private fun bindSession(session: Session.SpeechSession) {
@@ -142,6 +129,16 @@ class SessionDetailFragment : Fragment(), Injectable {
142129
binding.fab.visibility = View.INVISIBLE
143130
}
144131

132+
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
133+
private fun initViewTransitions(view: View) {
134+
binding.speakerSummary.addOnetimeOnPreDrawListener {
135+
ViewCompat.setTransitionName(
136+
view.findViewById<View>(R.id.speaker_summary),
137+
arguments!!.getString(EXTRA_TRANSITION_NAME))
138+
activity?.supportStartPostponedEnterTransition()
139+
}
140+
}
141+
145142
interface OnClickBottomAreaListener {
146143
fun onClickPrevSession()
147144
fun onClickNextSession()

app/src/main/java/io/github/droidkaigi/confsched2018/presentation/favorite/FavoriteSessionsFragment.kt

+3-1
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,9 @@ class FavoriteSessionsFragment : Fragment(), Injectable {
9797
val sharedElement = Pair(
9898
v.findViewById<View>(R.id.speaker_summary),
9999
sessionItem.session.id)
100-
navigationController.navigateToSessionDetailActivity(sessionItem.session, sharedElement)
100+
navigationController.navigateToSessionDetailActivity(
101+
sessionItem.session,
102+
sharedElement)
101103
})
102104
}
103105
binding.sessionsRecycler.apply {

app/src/main/java/io/github/droidkaigi/confsched2018/presentation/search/SearchSessionsFragment.kt

+3-1
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,9 @@ class SearchSessionsFragment : Fragment(), Injectable {
7676
val sharedElement = Pair(
7777
v.findViewById<View>(R.id.speaker_summary),
7878
sessionItem.session.id)
79-
navigationController.navigateToSessionDetailActivity(sessionItem.session, sharedElement)
79+
navigationController.navigateToSessionDetailActivity(
80+
sessionItem.session,
81+
sharedElement)
8082
})
8183
}
8284
binding.searchSessionRecycler.apply {

app/src/main/java/io/github/droidkaigi/confsched2018/presentation/sessions/AllSessionsFragment.kt

+3-1
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,9 @@ class AllSessionsFragment : Fragment(), Injectable, CurrentSessionScroller {
113113
val sharedElement = Pair(
114114
v.findViewById<View>(R.id.speaker_summary),
115115
sessionItem.session.id)
116-
navigationController.navigateToSessionDetailActivity(sessionItem.session, sharedElement)
116+
navigationController.navigateToSessionDetailActivity(
117+
sessionItem.session,
118+
sharedElement)
117119
})
118120
}
119121
binding.sessionsRecycler.apply {

app/src/main/java/io/github/droidkaigi/confsched2018/presentation/sessions/RoomSessionsFragment.kt

+3-1
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,9 @@ class RoomSessionsFragment : Fragment(), Injectable, CurrentSessionScroller {
121121
val sharedElement = Pair(
122122
v.findViewById<View>(R.id.speaker_summary),
123123
sessionItem.session.id)
124-
navigationController.navigateToSessionDetailActivity(sessionItem.session, sharedElement)
124+
navigationController.navigateToSessionDetailActivity(
125+
sessionItem.session,
126+
sharedElement)
125127
})
126128
}
127129
binding.sessionsRecycler.apply {

app/src/main/java/io/github/droidkaigi/confsched2018/presentation/speaker/SpeakerDetailFragment.kt

+3-1
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,9 @@ class SpeakerDetailFragment : Fragment(), Injectable {
220220
val sharedElement = Pair(
221221
v.findViewById<View>(R.id.speaker_summary),
222222
sessionItem.session.id)
223-
navigationController.navigateToSessionDetailActivity(sessionItem.session, sharedElement)
223+
navigationController.navigateToSessionDetailActivity(
224+
sessionItem.session,
225+
sharedElement)
224226
})
225227
}
226228
val linearLayoutManager = LinearLayoutManager(context)

app/src/main/java/io/github/droidkaigi/confsched2018/presentation/topic/TopicDetailFragment.kt

+3-1
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,9 @@ class TopicDetailFragment : Fragment(), Injectable {
8484
val sharedElement = Pair(
8585
v.findViewById<View>(R.id.speaker_summary),
8686
sessionItem.session.id)
87-
navigationController.navigateToSessionDetailActivity(sessionItem.session, sharedElement)
87+
navigationController.navigateToSessionDetailActivity(
88+
sessionItem.session,
89+
sharedElement)
8890
}
8991
}
9092
val linearLayoutManager = LinearLayoutManager(context)

app/src/main/java/io/github/droidkaigi/confsched2018/util/ext/ViewExt.kt

+12
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package io.github.droidkaigi.confsched2018.util.ext
22

33
import android.os.Build
44
import android.view.View
5+
import android.view.ViewTreeObserver
56

67
fun View.setVisible(visible: Boolean) {
78
if (visible) {
@@ -23,6 +24,17 @@ fun View.isGone() = visibility == View.GONE
2324

2425
fun View.isVisible() = visibility == View.VISIBLE
2526

27+
fun View.addOnetimeOnPreDrawListener(listener: () -> Unit) {
28+
viewTreeObserver.addOnPreDrawListener(object : ViewTreeObserver.OnPreDrawListener {
29+
override fun onPreDraw(): Boolean {
30+
viewTreeObserver.removeOnPreDrawListener(this)
31+
listener.invoke()
32+
33+
return true
34+
}
35+
})
36+
}
37+
2638
var View.elevationForPostLollipop: Float
2739
get() = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
2840
elevation

0 commit comments

Comments
 (0)