Skip to content

Commit 17d0220

Browse files
committed
Remove unnecessary properties / move SharedElementCallback to anonymous object
1 parent dfe03a6 commit 17d0220

9 files changed

Lines changed: 74 additions & 61 deletions

File tree

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

Lines changed: 22 additions & 27 deletions
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

Lines changed: 21 additions & 24 deletions
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

Lines changed: 3 additions & 1 deletion
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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,9 @@ class SearchSessionsFragment : Fragment(), Injectable, TabLayoutItem {
7777
val sharedElement = Pair(
7878
v.findViewById<View>(R.id.speaker_summary),
7979
sessionItem.session.id)
80-
navigationController.navigateToSessionDetailActivity(sessionItem.session, sharedElement)
80+
navigationController.navigateToSessionDetailActivity(
81+
sessionItem.session,
82+
sharedElement)
8183
})
8284
}
8385
binding.searchSessionRecycler.apply {

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

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ import io.github.droidkaigi.confsched2018.model.Session
2222
import io.github.droidkaigi.confsched2018.presentation.NavigationController
2323
import io.github.droidkaigi.confsched2018.presentation.Result
2424
import io.github.droidkaigi.confsched2018.presentation.common.view.TabLayoutItem
25-
import io.github.droidkaigi.confsched2018.presentation.sessions.item.DateSessionsSection
2625
import io.github.droidkaigi.confsched2018.presentation.sessions.SessionsFragment.CurrentSessionScroller
26+
import io.github.droidkaigi.confsched2018.presentation.sessions.item.DateSessionsSection
2727
import io.github.droidkaigi.confsched2018.presentation.sessions.item.SpeechSessionItem
2828
import io.github.droidkaigi.confsched2018.util.ProgressTimeLatch
2929
import io.github.droidkaigi.confsched2018.util.SessionAlarm
@@ -106,13 +106,10 @@ class AllSessionsFragment : Fragment(), Injectable, CurrentSessionScroller, TabL
106106
binding.sessionsRecycler.scrollToPosition(currentSessionPosition)
107107
}
108108

109-
<<<<<<< HEAD
110109
override fun scrollToTop() {
111110
binding.sessionsRecycler.smoothScrollToPosition(0)
112111
}
113112

114-
=======
115-
>>>>>>> Set Shared element on other sessions fragments
116113
private fun setupRecyclerView() {
117114
val groupAdapter = GroupAdapter<ViewHolder>().apply {
118115
add(sessionsSection)
@@ -121,7 +118,9 @@ class AllSessionsFragment : Fragment(), Injectable, CurrentSessionScroller, TabL
121118
val sharedElement = Pair(
122119
v.findViewById<View>(R.id.speaker_summary),
123120
sessionItem.session.id)
124-
navigationController.navigateToSessionDetailActivity(sessionItem.session, sharedElement)
121+
navigationController.navigateToSessionDetailActivity(
122+
sessionItem.session,
123+
sharedElement)
125124
})
126125
}
127126
binding.sessionsRecycler.apply {

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,9 @@ class RoomSessionsFragment : Fragment(), Injectable, CurrentSessionScroller, Tab
126126
val sharedElement = Pair(
127127
v.findViewById<View>(R.id.speaker_summary),
128128
sessionItem.session.id)
129-
navigationController.navigateToSessionDetailActivity(sessionItem.session, sharedElement)
129+
navigationController.navigateToSessionDetailActivity(
130+
sessionItem.session,
131+
sharedElement)
130132
})
131133
}
132134
binding.sessionsRecycler.apply {

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

Lines changed: 3 additions & 1 deletion
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

Lines changed: 3 additions & 1 deletion
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

Lines changed: 12 additions & 0 deletions
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)