Skip to content

Commit f32fcec

Browse files
committed
Merge branch 'release/2.3.0'
2 parents 812cc64 + 1ce8d1d commit f32fcec

File tree

16 files changed

+131
-94
lines changed

16 files changed

+131
-94
lines changed

app/build.gradle

Lines changed: 18 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -10,24 +10,24 @@ apply plugin: 'com.google.gms.oss.licenses.plugin'
1010

1111
ext {
1212
archComponentsVersion = "1.0.0"
13+
archComponentsLifecycleVersion = "1.1.0"
1314
assertjVersion = "3.8.0"
14-
c3mediaVersion = "2.0.0-SNAPSHOT"
15-
crashlyticsVersion = "2.6.8"
16-
daggerVersion = "2.11"
17-
exoplayerVersion = "r2.5.3"
18-
glideVersion = "3.8.0"
15+
c3mediaVersion = "1.1.0"
16+
crashlyticsVersion = "2.9.0"
17+
daggerVersion = "2.14.1"
18+
exoplayerVersion = "2.7.0"
19+
glideVersion = "4.6.1"
1920
gsonVersion = "2.8.2"
20-
paperParcelVersion = "2.0.4"
2121
playServicesVersion = "11.4.0"
22-
rxAndroidVersion = "2.0.1"
23-
rxBindingVersion = "2.0.0"
24-
rxJavaVersion = "2.1.4"
25-
rxKotlinVersion = "2.1.0"
22+
rxAndroidVersion = "2.0.2"
23+
rxBindingVersion = "2.1.1"
24+
rxJavaVersion = "2.1.10"
25+
rxKotlinVersion = "2.2.0"
2626
supportLibVersion = "27.0.2"
27-
timberVersion = "4.5.1"
27+
timberVersion = "4.6.1"
2828

2929
// Test dependencies
30-
kluentVersion = "1.29"
30+
kluentVersion = "1.34"
3131
junitVersion = "4.12"
3232
runnerVersion = '1.0.1'
3333
rulesVersion = '1.0.1'
@@ -41,8 +41,8 @@ android {
4141
applicationId "de.stefanmedack.ccctv"
4242
minSdkVersion 21
4343
targetSdkVersion 27
44-
versionCode 11
45-
versionName "2.2.0"
44+
versionCode 12
45+
versionName "2.3.0"
4646
resConfigs "en", "de"
4747
multiDexEnabled true
4848
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
@@ -110,9 +110,9 @@ dependencies {
110110
implementation "com.android.support:leanback-v17:$supportLibVersion"
111111

112112
// Architecture Components - View Model (+ Lifecycles, LiveData)
113-
implementation "android.arch.lifecycle:runtime:$archComponentsVersion"
114-
implementation "android.arch.lifecycle:extensions:$archComponentsVersion"
115-
kapt "android.arch.lifecycle:compiler:$archComponentsVersion"
113+
implementation "android.arch.lifecycle:runtime:$archComponentsLifecycleVersion"
114+
implementation "android.arch.lifecycle:extensions:$archComponentsLifecycleVersion"
115+
kapt "android.arch.lifecycle:compiler:$archComponentsLifecycleVersion"
116116

117117
// Architecture Components - Room
118118
implementation "android.arch.persistence.room:runtime:$archComponentsVersion"
@@ -127,9 +127,7 @@ dependencies {
127127
kapt "com.google.dagger:dagger-compiler:$daggerVersion"
128128

129129
// c3media library
130-
implementation "com.github.stefanmedack:c3media-base:adds_eventLastReleasedAt-SNAPSHOT"
131-
// TODO change c3media-base to latest release, when it is stable again
132-
// implementation "info.metadude.kotlin.library.c3media:c3media-rx-java-2:$c3mediaVersion"
130+
implementation "info.metadude.kotlin.library.c3media:c3media-rx-java-2:$c3mediaVersion"
133131
// c3media streaming
134132
implementation "com.github.johnjohndoe:Brockman:1886e90a92029ceba978e3326202383c63ed8efd"
135133

@@ -155,11 +153,6 @@ dependencies {
155153
transitive = true
156154
}
157155

158-
// Paper Parcel
159-
implementation "nz.bradcampbell:paperparcel:$paperParcelVersion"
160-
implementation "nz.bradcampbell:paperparcel-kotlin:$paperParcelVersion" // Optional
161-
kapt "nz.bradcampbell:paperparcel-compiler:$paperParcelVersion"
162-
163156
// Gson
164157
implementation "com.google.code.gson:gson:$gsonVersion"
165158

@@ -173,9 +166,6 @@ dependencies {
173166
// Android Instrumented Test
174167
androidTestImplementation "com.android.support.test:runner:$runnerVersion"
175168

176-
// Arch Component
177-
androidTestImplementation "android.arch.core:core-testing:$archComponentsVersion"
178-
179169
}
180170

181171
static def getFormattedDate() {

app/src/main/java/de/stefanmedack/ccctv/C3TVApp.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class C3TVApp : DaggerApplication() {
2727
}
2828

2929
private class CrashlyticsTree : Timber.Tree() {
30-
override fun log(priority: Int, tag: String?, message: String?, t: Throwable?) {
30+
override fun log(priority: Int, tag: String?, message: String, t: Throwable?) {
3131
if (priority < Log.WARN) {
3232
return
3333
}

app/src/main/java/de/stefanmedack/ccctv/repository/EventRepository.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import de.stefanmedack.ccctv.util.applySchedulers
77
import info.metadude.kotlin.library.c3media.RxC3MediaService
88
import io.reactivex.Flowable
99
import io.reactivex.Single
10+
import io.reactivex.rxkotlin.toFlowable
1011
import javax.inject.Inject
1112
import javax.inject.Singleton
1213
import info.metadude.kotlin.library.c3media.models.Event as EventRemote
@@ -23,8 +24,10 @@ class EventRepository @Inject constructor(
2324
.map { it.toEntity(-1)!! }
2425
).toFlowable()
2526

26-
fun getEvents(ids: List<Int>): Flowable<List<Event>> = eventDao.getEvents(ids)
27-
.applySchedulers()
27+
fun getEvents(ids: List<Int>): Flowable<List<Event>> = ids.toFlowable()
28+
.flatMap { getEvent(it) }
29+
.toList()
30+
.toFlowable()
2831

2932
// TODO change to Resource<Single<EventRemote>>
3033
fun getEventWithRecordings(id: Int): Single<EventRemote> = mediaService.getEvent(id)

app/src/main/java/de/stefanmedack/ccctv/ui/cards/ConferenceCardPresenter.kt

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import android.support.v4.content.ContextCompat
66
import android.support.v7.view.ContextThemeWrapper
77
import android.view.ViewGroup
88
import com.bumptech.glide.Glide
9+
import com.bumptech.glide.request.RequestOptions
910
import de.stefanmedack.ccctv.R
1011
import de.stefanmedack.ccctv.persistence.entities.Conference
1112
import kotlin.properties.Delegates
@@ -34,13 +35,18 @@ class ConferenceCardPresenter : Presenter() {
3435

3536
override fun onBindViewHolder(viewHolder: Presenter.ViewHolder, item: Any) {
3637
if (item is Conference) {
38+
val width = viewHolder.view.resources.getDimensionPixelSize(R.dimen.grid_card_width)
39+
val height = viewHolder.view.resources.getDimensionPixelSize(R.dimen.grid_card_height)
3740
(viewHolder.view as ImageCardView).let {
3841
it.titleText = item.title
3942
it.contentText = item.acronym
40-
Glide.with(viewHolder.view.context)
43+
Glide.with(viewHolder.view)
4144
.load(item.logoUrl)
42-
.fitCenter() // TODO check why fitCenter does not work
43-
.error(R.drawable.voctocat)
45+
.apply(RequestOptions()
46+
.error(R.drawable.voctocat)
47+
.override(width, height)
48+
.centerInside()
49+
)
4450
.into(it.mainImageView)
4551
}
4652
}

app/src/main/java/de/stefanmedack/ccctv/ui/cards/EventCardPresenter.kt

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import android.support.v4.content.ContextCompat
66
import android.support.v7.view.ContextThemeWrapper
77
import android.view.ViewGroup
88
import com.bumptech.glide.Glide
9+
import com.bumptech.glide.request.RequestOptions
910
import de.stefanmedack.ccctv.R
1011
import de.stefanmedack.ccctv.persistence.entities.Event
1112
import de.stefanmedack.ccctv.util.stripHtml
@@ -38,10 +39,12 @@ class EventCardPresenter : Presenter() {
3839
(viewHolder.view as ImageCardView).let {
3940
it.titleText = item.title.stripHtml()
4041
it.contentText = item.description.stripHtml()
41-
Glide.with(viewHolder.view.context)
42+
Glide.with(viewHolder.view)
4243
.load(item.thumbUrl)
43-
.centerCrop()
44-
.error(R.drawable.voctocat)
44+
.apply(RequestOptions()
45+
.error(R.drawable.voctocat)
46+
.centerCrop()
47+
)
4548
.into(it.mainImageView)
4649
}
4750
}

app/src/main/java/de/stefanmedack/ccctv/ui/cards/StreamCardPresenter.kt

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import android.support.v4.content.ContextCompat
66
import android.support.v7.view.ContextThemeWrapper
77
import android.view.ViewGroup
88
import com.bumptech.glide.Glide
9+
import com.bumptech.glide.request.RequestOptions
910
import de.stefanmedack.ccctv.R
1011
import info.metadude.java.library.brockman.models.Stream
1112
import kotlin.properties.Delegates
@@ -37,10 +38,12 @@ class StreamCardPresenter(val thumbPictureUrl: String) : Presenter() {
3738
(viewHolder.view as ImageCardView).let {
3839
it.titleText = item.display
3940
it.contentText = item.slug
40-
Glide.with(viewHolder.view.context)
41+
Glide.with(viewHolder.view)
4142
.load(thumbPictureUrl)
42-
.centerCrop()
43-
.error(R.drawable.voctocat)
43+
.apply(RequestOptions()
44+
.error(R.drawable.voctocat)
45+
.centerCrop()
46+
)
4447
.into(it.mainImageView)
4548
}
4649
}

app/src/main/java/de/stefanmedack/ccctv/ui/detail/DetailFragment.kt

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package de.stefanmedack.ccctv.ui.detail
33
import android.arch.lifecycle.ViewModelProvider
44
import android.arch.lifecycle.ViewModelProviders
55
import android.content.Context
6+
import android.graphics.drawable.Drawable
67
import android.os.Build
78
import android.os.Bundle
89
import android.support.v17.leanback.app.DetailsSupportFragment
@@ -13,9 +14,9 @@ import android.view.KeyEvent
1314
import android.view.View
1415
import android.widget.Toast
1516
import com.bumptech.glide.Glide
16-
import com.bumptech.glide.load.resource.drawable.GlideDrawable
17-
import com.bumptech.glide.request.animation.GlideAnimation
17+
import com.bumptech.glide.request.RequestOptions
1818
import com.bumptech.glide.request.target.SimpleTarget
19+
import com.bumptech.glide.request.transition.Transition
1920
import dagger.android.support.AndroidSupportInjection
2021
import de.stefanmedack.ccctv.R
2122
import de.stefanmedack.ccctv.persistence.entities.Event
@@ -113,15 +114,14 @@ class DetailFragment : DetailsSupportFragment() {
113114
private fun showPoster(context: Context, detailsOverview: DetailsOverviewRow) {
114115
detailsOverview.imageDrawable = ContextCompat.getDrawable(context, R.drawable.voctocat)
115116

116-
Glide.with(activity)
117+
Glide.with(this)
117118
.load(arguments?.getString(EVENT_PICTURE))
118-
.centerCrop()
119-
.error(R.drawable.voctocat)
120-
.into<SimpleTarget<GlideDrawable>>(object : SimpleTarget<GlideDrawable>(
121-
resources.getDimensionPixelSize(R.dimen.event_card_width),
122-
resources.getDimensionPixelSize(R.dimen.event_card_height)) {
123-
override fun onResourceReady(resource: GlideDrawable,
124-
glideAnimation: GlideAnimation<in GlideDrawable>) {
119+
.apply(RequestOptions()
120+
.error(R.drawable.voctocat)
121+
.centerCrop()
122+
)
123+
.into(object : SimpleTarget<Drawable>() {
124+
override fun onResourceReady(resource: Drawable, transition: Transition<in Drawable>?) {
125125
detailsOverview.imageDrawable = resource
126126
}
127127
})

app/src/main/java/de/stefanmedack/ccctv/ui/detail/DetailViewModel.kt

Lines changed: 11 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import de.stefanmedack.ccctv.persistence.entities.Event
55
import de.stefanmedack.ccctv.repository.EventRepository
66
import de.stefanmedack.ccctv.ui.detail.uiModels.DetailUiModel
77
import de.stefanmedack.ccctv.ui.detail.uiModels.SpeakerUiModel
8+
import de.stefanmedack.ccctv.util.getRelatedEventIdsWeighted
89
import io.reactivex.Flowable
910
import io.reactivex.Single
1011
import javax.inject.Inject
@@ -22,26 +23,16 @@ class DetailViewModel @Inject constructor(
2223
}
2324

2425
val detailUi: Flowable<DetailUiModel>
25-
get() =
26-
repository.getEvent(eventId).map { event ->
27-
DetailUiModel(
28-
event = event,
29-
speaker = event.persons.map { SpeakerUiModel(it) },
30-
related = listOf()
31-
)
32-
}
33-
// TODO fix parsing of related events
34-
// repository.getEvent(eventId)
35-
// .flatMap { event: Event ->
36-
// getRelatedEvents(/*detailUiModel.event.metadata?.related ?: */listOf())
37-
// .map {
38-
// DetailUiModel(
39-
// event = event,
40-
// speaker = event.persons.map { SpeakerUiModel(it) },
41-
// related = it
42-
// )
43-
// }
44-
// }
26+
get() = repository.getEvent(eventId)
27+
.flatMap { event: Event ->
28+
getRelatedEvents(event.getRelatedEventIdsWeighted()).map {
29+
DetailUiModel(
30+
event = event,
31+
speaker = event.persons.map { SpeakerUiModel(it) },
32+
related = it
33+
)
34+
}
35+
}
4536

4637
private fun getRelatedEvents(relatedIds: List<Int>): Flowable<List<Event>> = repository
4738
.getEvents(relatedIds)

app/src/main/java/de/stefanmedack/ccctv/ui/detail/playback/BaseExoPlayerAdapter.kt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -228,11 +228,15 @@ open class BaseExoPlayerAdapter(private val context: Context) : PlayerAdapter(),
228228

229229
override fun onLoadingChanged(isLoading: Boolean) {}
230230

231-
override fun onPositionDiscontinuity() {}
231+
override fun onPositionDiscontinuity(reason: Int) {}
232232

233-
override fun onTimelineChanged(timeline: Timeline?, manifest: Any?) {}
233+
override fun onTimelineChanged(timeline: Timeline?, manifest: Any?, reason: Int) {}
234234

235235
override fun onPlaybackParametersChanged(playbackParameters: PlaybackParameters?) {}
236236

237237
override fun onRepeatModeChanged(repeatMode: Int) {}
238+
239+
override fun onSeekProcessed() {}
240+
241+
override fun onShuffleModeEnabledChanged(shuffleModeEnabled: Boolean) {}
238242
}

app/src/main/java/de/stefanmedack/ccctv/ui/events/EventsFragment.kt

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,11 @@ import android.util.DisplayMetrics
1414
import android.view.View
1515
import android.widget.Toast
1616
import com.bumptech.glide.Glide
17-
import com.bumptech.glide.request.animation.GlideAnimation
17+
import com.bumptech.glide.request.RequestOptions
1818
import com.bumptech.glide.request.target.SimpleTarget
19+
import com.bumptech.glide.request.transition.Transition
1920
import dagger.android.support.AndroidSupportInjection
21+
import de.stefanmedack.ccctv.R
2022
import de.stefanmedack.ccctv.model.Resource
2123
import de.stefanmedack.ccctv.persistence.entities.Event
2224
import de.stefanmedack.ccctv.ui.cards.EventCardPresenter
@@ -113,13 +115,15 @@ class EventsFragment : VerticalGridSupportFragment() {
113115

114116
val logoUrl = arguments?.getString(CONFERENCE_LOGO_URL)
115117
if (logoUrl != null) {
116-
Glide.with(activityContext)
117-
.load(logoUrl)
118+
Glide.with(this)
118119
.asBitmap()
119-
.override(width, height)
120-
.fitCenter()
121-
.into<SimpleTarget<Bitmap>>(object : SimpleTarget<Bitmap>(width, height) {
122-
override fun onResourceReady(resource: Bitmap, glideAnimation: GlideAnimation<in Bitmap>) {
120+
.load(logoUrl)
121+
.apply(RequestOptions()
122+
.error(R.drawable.voctocat)
123+
.centerCrop()
124+
)
125+
.into(object : SimpleTarget<Bitmap>(width, height) {
126+
override fun onResourceReady(resource: Bitmap, transition: Transition<in Bitmap>?) {
123127
backgroundManager?.setBitmap(darkenBitMap(resource))
124128
}
125129
})

0 commit comments

Comments
 (0)