Skip to content
This repository was archived by the owner on Feb 17, 2020. It is now read-only.

Commit 76182ca

Browse files
authored
Merge pull request #524 from squanchy-dev/keep_position_on_rotation
delete the show current talk feature to allow the saving and restoring of the current tab / position
2 parents 0e21ec9 + f60f0fa commit 76182ca

5 files changed

Lines changed: 7 additions & 125 deletions

File tree

app/src/main/java/net/squanchy/schedule/SchedulePageView.kt

Lines changed: 5 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,6 @@ class SchedulePageView @JvmOverloads constructor(
5353
tabstrip.setupWithViewPager(viewpager)
5454
hackToApplyTypefaces(tabstrip)
5555

56-
viewpager.adapter = viewPagerAdapter
57-
58-
tabstrip.addOnTabSelectedListener(TrackingOnTabSelectedListener(analytics, viewPagerAdapter))
59-
6056
setupToolbar()
6157
}
6258

@@ -87,7 +83,7 @@ class SchedulePageView @JvmOverloads constructor(
8783
service.schedule()
8884
.observeOn(AndroidSchedulers.mainThread())
8985
.subscribe(
90-
{ updateWith(it, { event -> onEventClicked(event) }) },
86+
{ updateWith(it, ::onEventClicked) },
9187
{ Timber.e(it) }
9288
)
9389
)
@@ -135,42 +131,11 @@ class SchedulePageView @JvmOverloads constructor(
135131
tabstrip.visibility = VISIBLE
136132
emptyView.visibility = GONE
137133

138-
val initialEventForPage = schedule.pages.map { schedule.findNextEventForPage(it, currentTime) }.toTypedArray()
139-
viewPagerAdapter.updateWith(schedule.pages, initialEventForPage, onEventClicked)
140-
141-
val todayPageIndex = schedule.findTodayIndexOrDefault(currentTime)
142-
viewpager.setCurrentItem(todayPageIndex, false)
143-
144-
tabstrip.addOnTabSelectedListener(ScrollingOnTabSelectedListener(schedule, viewPagerAdapter, currentTime))
145-
progressbar.visibility = View.GONE
146-
}
147-
148-
private interface OnTabSelectedListener : TabLayout.OnTabSelectedListener {
149-
150-
override fun onTabReselected(tab: TabLayout.Tab) {}
151-
override fun onTabUnselected(tab: TabLayout.Tab) {}
152-
override fun onTabSelected(tab: TabLayout.Tab) {}
153-
}
154-
155-
private class ScrollingOnTabSelectedListener(
156-
private val schedule: Schedule,
157-
private val viewPagerAdapter: ScheduleViewPagerAdapter,
158-
private val currentTime: CurrentTime
159-
) : OnTabSelectedListener {
160-
161-
override fun onTabReselected(tab: TabLayout.Tab) {
162-
val page = schedule.pages[tab.position]
163-
schedule.findNextEventForPage(page, currentTime)?.let { viewPagerAdapter.refresh(tab.position, it) }
134+
viewPagerAdapter.updateWith(schedule.pages, onEventClicked)
135+
if (viewpager.adapter == null) {
136+
viewpager.adapter = viewPagerAdapter
164137
}
165-
}
166138

167-
private class TrackingOnTabSelectedListener(
168-
private val analytics: Analytics,
169-
private val viewPagerAdapter: ScheduleViewPagerAdapter
170-
) : OnTabSelectedListener {
171-
172-
override fun onTabSelected(tab: TabLayout.Tab) {
173-
analytics.trackItemSelected(ContentType.SCHEDULE_DAY, viewPagerAdapter.getPageDayId(tab.position))
174-
}
139+
progressbar.visibility = View.GONE
175140
}
176141
}
Lines changed: 0 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,9 @@
11
package net.squanchy.schedule.domain.view
22

3-
import net.squanchy.support.system.CurrentTime
43
import org.joda.time.DateTimeZone
54

6-
private const val NOT_FOUND_INDEX = -1
7-
private const val FIRST_PAGE_INDEX = 0
8-
9-
private const val CURRENT_SLOT_THRESHOLD = .6f
10-
115
data class Schedule(val pages: List<SchedulePage>, val timeZone: DateTimeZone) {
126

137
val isEmpty: Boolean
148
get() = pages.all { it.events.isEmpty() }
15-
16-
fun findTodayIndexOrDefault(currentTime: CurrentTime): Int {
17-
val now = currentTime.currentDateTime().withZone(timeZone)
18-
return pages
19-
.indexOfFirst { page ->
20-
page.date.isEqual(now.toLocalDate())
21-
}
22-
.let {
23-
when (it) {
24-
NOT_FOUND_INDEX -> FIRST_PAGE_INDEX
25-
else -> it
26-
}
27-
}
28-
}
29-
30-
fun findNextEventForPage(page: SchedulePage, currentTime: CurrentTime) =
31-
page.events
32-
.firstOrNull { event ->
33-
val startDateTime = event.startTime.toDateTime().withZone(event.timeZone)
34-
val currentDateTime = currentTime.currentDateTime().toDateTime().withZone(event.timeZone)
35-
val endDateTime = event.endTime.toDateTime().withZone(event.timeZone)
36-
37-
if (currentDateTime.isAfter(endDateTime)) {
38-
false
39-
} else {
40-
val duration = endDateTime.millis - startDateTime.millis
41-
val offset = currentDateTime.millis - startDateTime.millis
42-
43-
offset.toFloat() / duration < CURRENT_SLOT_THRESHOLD
44-
}
45-
}
469
}

app/src/main/java/net/squanchy/schedule/view/ScheduleDayPageView.kt

Lines changed: 1 addition & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package net.squanchy.schedule.view
22

33
import android.content.Context
44
import android.support.v7.widget.LinearLayoutManager
5-
import android.support.v7.widget.LinearSmoothScroller
65
import android.support.v7.widget.RecyclerView
76
import android.util.AttributeSet
87
import net.squanchy.R
@@ -21,7 +20,7 @@ class ScheduleDayPageView @JvmOverloads constructor(
2120
override fun onFinishInflate() {
2221
super.onFinishInflate()
2322

24-
val layoutManager = SnappingLinearLayoutManager(context)
23+
val layoutManager = LinearLayoutManager(context)
2524
setLayoutManager(layoutManager)
2625
adapter = EventsAdapter(context)
2726

@@ -35,31 +34,4 @@ class ScheduleDayPageView @JvmOverloads constructor(
3534
setAdapterIfNone(adapter)
3635
adapter.submitList(newData)
3736
}
38-
39-
private var userHasScrolled: Boolean = false
40-
41-
override fun onScrolled(dx: Int, dy: Int) {
42-
userHasScrolled = true
43-
super.onScrolled(dx, dy)
44-
}
45-
46-
fun autoscrollToEvent(eventPosition: Int, animate: Boolean) {
47-
if (userHasScrolled) return // TODO only do it if it's an actual autoscroll (i.e., not because user has tapped the tab)
48-
49-
when {
50-
animate -> smoothScrollToPosition(eventPosition)
51-
else -> scrollToPosition(eventPosition)
52-
}
53-
}
54-
55-
private class SnappingLinearLayoutManager(context: Context) : LinearLayoutManager(context) {
56-
57-
override fun smoothScrollToPosition(recyclerView: RecyclerView, state: RecyclerView.State?, position: Int) {
58-
val smoothScroller = object : LinearSmoothScroller(recyclerView.context) {
59-
override fun getVerticalSnapPreference() = SNAP_TO_START
60-
}
61-
smoothScroller.targetPosition = position
62-
startSmoothScroll(smoothScroller)
63-
}
64-
}
6537
}

app/src/main/java/net/squanchy/schedule/view/ScheduleViewPagerAdapter.kt

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,12 @@ class ScheduleViewPagerAdapter(context: Context) : ViewPagerAdapter<ScheduleDayP
1515
private lateinit var listener: (Event) -> Unit
1616

1717
private var pages = emptyList<SchedulePage>()
18-
private var initialEventForPage = emptyArray<Event?>()
19-
private var triggerScrollForPage = emptyArray<((Event) -> Unit)?>()
2018

2119
private val inflater = LayoutInflater.from(context)
2220

23-
fun updateWith(pages: List<SchedulePage>, initialEventForPage: Array<Event?>, listener: (Event) -> Unit) {
21+
fun updateWith(pages: List<SchedulePage>, listener: (Event) -> Unit) {
2422
this.pages = pages
25-
this.initialEventForPage = initialEventForPage
2623
this.listener = listener
27-
this.triggerScrollForPage = arrayOfNulls(pages.size)
2824
notifyDataSetChanged()
2925
}
3026

@@ -36,23 +32,14 @@ class ScheduleViewPagerAdapter(context: Context) : ViewPagerAdapter<ScheduleDayP
3632

3733
override fun bindView(view: ScheduleDayPageView, position: Int) {
3834
val events = pages[position].events
39-
val initialEvent = initialEventForPage[position]
40-
triggerScrollForPage[position] = { view.autoscrollToEvent(events.indexOf(it), true) }
4135
view.updateWith(events, listener)
42-
initialEvent?.let { view.autoscrollToEvent(events.indexOf(it), false) }
4336
}
4437

4538
override fun getPageTitle(position: Int): CharSequence? {
4639
val date = pages[position].date
4740
return date.toString(TITLE_FORMAT_TEMPLATE).toUpperCase(Locale.getDefault())
4841
}
4942

50-
fun getPageDayId(position: Int) = pages[position].dayId
51-
52-
fun refresh(page: Int, event: Event) {
53-
triggerScrollForPage[page]?.invoke(event)
54-
}
55-
5643
override fun isViewFromObject(view: View, anObject: Any) = view === anObject
5744

5845
companion object {

app/src/main/java/net/squanchy/search/SearchService.kt

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,4 @@ class SearchService(
7373
add(AlgoliaLogo)
7474
}
7575
}
76-
77-
fun speakers(): Observable<List<Speaker>> {
78-
return speakerRepository.speakers()
79-
.map { it.sortedBy(Speaker::name) }
80-
}
8176
}

0 commit comments

Comments
 (0)