diff --git a/common/build.gradle b/common/build.gradle index 529360f0..6acbf10c 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -2,6 +2,8 @@ apply plugin: 'com.android.library' apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' +String versionString = new File("versionfile").text.trim() + android { compileSdkVersion rootProject.ext.compileSdkVersion buildToolsVersion rootProject.ext.buildToolsVersion @@ -10,7 +12,7 @@ android { minSdkVersion rootProject.ext.minSDK targetSdkVersion rootProject.ext.targetSDK versionCode 1 - versionName '2.0.0' + versionName versionString javaCompileOptions { annotationProcessorOptions { diff --git a/common/src/main/java/de/nicidienase/chaosflix/common/ChaosflixDatabase.kt b/common/src/main/java/de/nicidienase/chaosflix/common/ChaosflixDatabase.kt index e1269eb1..0ad95c87 100644 --- a/common/src/main/java/de/nicidienase/chaosflix/common/ChaosflixDatabase.kt +++ b/common/src/main/java/de/nicidienase/chaosflix/common/ChaosflixDatabase.kt @@ -2,9 +2,11 @@ package de.nicidienase.chaosflix.common import android.arch.persistence.db.SupportSQLiteDatabase import android.arch.persistence.room.Database +import android.arch.persistence.room.Room import android.arch.persistence.room.RoomDatabase import android.arch.persistence.room.TypeConverters import android.arch.persistence.room.migration.Migration +import android.content.Context import de.nicidienase.chaosflix.common.mediadata.entities.Converters import de.nicidienase.chaosflix.common.mediadata.entities.recording.persistence.ConferenceDao import de.nicidienase.chaosflix.common.mediadata.entities.recording.persistence.ConferenceGroup @@ -47,7 +49,16 @@ abstract class ChaosflixDatabase : RoomDatabase() { abstract fun watchlistItemDao(): WatchlistItemDao abstract fun offlineEventDao(): OfflineEventDao - companion object { + companion object : SingletonHolder({ + Room.databaseBuilder( + it.applicationContext, + ChaosflixDatabase::class.java, "mediaccc.de") + .addMigrations( + ChaosflixDatabase.migration_5_6) + .fallbackToDestructiveMigrationFrom(1, 2, 3, 4) + .build() + }) { + val migration_2_3 = object : Migration(2, 3) { override fun migrate(database: SupportSQLiteDatabase) { database.execSQL("CREATE TABLE `offline_event` (" + diff --git a/common/src/main/java/de/nicidienase/chaosflix/common/DatabaseFactory.kt b/common/src/main/java/de/nicidienase/chaosflix/common/DatabaseFactory.kt deleted file mode 100644 index 44cc2447..00000000 --- a/common/src/main/java/de/nicidienase/chaosflix/common/DatabaseFactory.kt +++ /dev/null @@ -1,17 +0,0 @@ -package de.nicidienase.chaosflix.common - -import android.arch.persistence.room.Room -import android.content.Context - -class DatabaseFactory private constructor() { - - companion object : SingletonHolder({ - Room.databaseBuilder( - it.applicationContext, - ChaosflixDatabase::class.java, "mediaccc.de") - .addMigrations( - ChaosflixDatabase.migration_5_6) - .fallbackToDestructiveMigrationFrom(1, 2, 3, 4) - .build() - }) -} \ No newline at end of file diff --git a/common/src/main/java/de/nicidienase/chaosflix/common/mediadata/network/ApiFactory.kt b/common/src/main/java/de/nicidienase/chaosflix/common/mediadata/network/ApiFactory.kt index 10ae02bf..f7f1cd82 100644 --- a/common/src/main/java/de/nicidienase/chaosflix/common/mediadata/network/ApiFactory.kt +++ b/common/src/main/java/de/nicidienase/chaosflix/common/mediadata/network/ApiFactory.kt @@ -1,22 +1,27 @@ package de.nicidienase.chaosflix.common.mediadata.network import android.content.res.Resources +import android.os.Build import com.google.gson.Gson import de.nicidienase.chaosflix.BuildConfig import de.nicidienase.chaosflix.R +import de.nicidienase.chaosflix.common.SingletonHolder +import okhttp3.Interceptor import okhttp3.OkHttpClient import retrofit2.Retrofit import retrofit2.converter.gson.GsonConverterFactory import java.util.concurrent.TimeUnit -class ApiFactory(val res: Resources) { +class ApiFactory private constructor(val res: Resources) { - val gsonConverterFactory by lazy { GsonConverterFactory.create(Gson()) } + private val chaosflixUserAgent: String by lazy { buildUserAgent() } + private val gsonConverterFactory: GsonConverterFactory by lazy { GsonConverterFactory.create(Gson()) } val client: OkHttpClient by lazy { OkHttpClient.Builder() .connectTimeout(60, TimeUnit.SECONDS) .readTimeout(60, TimeUnit.SECONDS) + .addInterceptor(useragentInterceptor) .build() } @@ -35,4 +40,21 @@ class ApiFactory(val res: Resources) { .addConverterFactory(gsonConverterFactory) .build() .create(StreamingService::class.java) } + + private val useragentInterceptor: Interceptor = Interceptor {chain -> + val requestWithUseragent = chain.request().newBuilder() + .header("User-Agent", chaosflixUserAgent) + .build() + return@Interceptor chain.proceed(requestWithUseragent) + } + + private fun buildUserAgent(): String { + val versionName = BuildConfig.VERSION_NAME + val device = "${Build.BRAND} ${Build.MODEL}" + val osVersion = "Android/${Build.VERSION.RELEASE}" + + return "chaosflix/$versionName $osVersion ($device)" + } + + companion object: SingletonHolder(::ApiFactory) } \ No newline at end of file diff --git a/common/src/main/java/de/nicidienase/chaosflix/common/mediadata/sync/DownloadJobService.kt b/common/src/main/java/de/nicidienase/chaosflix/common/mediadata/sync/DownloadJobService.kt index 6b1594e0..834e378e 100644 --- a/common/src/main/java/de/nicidienase/chaosflix/common/mediadata/sync/DownloadJobService.kt +++ b/common/src/main/java/de/nicidienase/chaosflix/common/mediadata/sync/DownloadJobService.kt @@ -2,7 +2,7 @@ package de.nicidienase.chaosflix.common.mediadata.sync import android.content.Intent import android.support.v4.app.JobIntentService -import de.nicidienase.chaosflix.common.DatabaseFactory +import de.nicidienase.chaosflix.common.ChaosflixDatabase import de.nicidienase.chaosflix.common.mediadata.entities.recording.persistence.Conference import de.nicidienase.chaosflix.common.mediadata.entities.recording.persistence.Event import de.nicidienase.chaosflix.common.mediadata.network.ApiFactory @@ -11,8 +11,8 @@ class DownloadJobService : JobIntentService() { override fun onHandleWork(intent: Intent) { val downloader = Downloader( - ApiFactory(resources).recordingApi, - DatabaseFactory.getInstance(applicationContext)) + ApiFactory.getInstance(resources).recordingApi, + ChaosflixDatabase.getInstance(applicationContext)) val entityType: String? = intent.getStringExtra(ENTITY_KEY) if (entityType != null) { diff --git a/common/src/main/java/de/nicidienase/chaosflix/common/viewmodel/ViewModelFactory.kt b/common/src/main/java/de/nicidienase/chaosflix/common/viewmodel/ViewModelFactory.kt index 435edf28..5ce686e4 100644 --- a/common/src/main/java/de/nicidienase/chaosflix/common/viewmodel/ViewModelFactory.kt +++ b/common/src/main/java/de/nicidienase/chaosflix/common/viewmodel/ViewModelFactory.kt @@ -5,7 +5,7 @@ import android.arch.lifecycle.ViewModelProvider import android.content.Context import android.os.Environment import android.preference.PreferenceManager -import de.nicidienase.chaosflix.common.DatabaseFactory +import de.nicidienase.chaosflix.common.ChaosflixDatabase import de.nicidienase.chaosflix.common.OfflineItemManager import de.nicidienase.chaosflix.common.PreferencesManager import de.nicidienase.chaosflix.common.ResourcesFacade @@ -14,9 +14,9 @@ import de.nicidienase.chaosflix.common.mediadata.sync.Downloader class ViewModelFactory(context: Context) : ViewModelProvider.Factory { - private val apiFactory = ApiFactory(context.resources) + private val apiFactory = ApiFactory.getInstance(context.resources) - private val database by lazy { DatabaseFactory.getInstance(context) } + private val database by lazy { ChaosflixDatabase.getInstance(context) } private val recordingApi = apiFactory.recordingApi private val streamingApi = apiFactory.streamingApi private val preferencesManager =