diff --git a/app/build.gradle b/app/build.gradle
index c3465c8..db60bd8 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -5,14 +5,14 @@ apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android {
- compileSdkVersion 28
+ compileSdkVersion 29
defaultConfig {
applicationId "com.adlerosn.brasilfurfest"
minSdkVersion 21
- targetSdkVersion 28
+ targetSdkVersion 29
versionCode 22
versionName "2019.6.4.1"
- testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
@@ -26,17 +26,17 @@ android {
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
testImplementation 'junit:junit:4.12'
- androidTestImplementation 'com.android.support.test:runner:1.0.2'
- androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
+ androidTestImplementation 'androidx.test.ext:junit:1.1.1'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.31"
implementation "org.jetbrains.kotlin:kotlin-reflect:1.3.31"
- implementation "com.android.support:animated-vector-drawable:28.0.0"
- implementation "com.android.support:appcompat-v7:28.0.0"
- implementation "com.android.support:design:28.0.0"
- implementation "com.android.support:support-v4:28.0.0"
- implementation "com.android.support:support-compat:28.0.0"
- implementation "com.android.support:support-media-compat:28.0.0"
- implementation 'com.android.support.constraint:constraint-layout:1.1.3'
+ implementation 'androidx.vectordrawable:vectordrawable-animated:1.0.0'
+ implementation 'androidx.appcompat:appcompat:1.0.2'
+ implementation 'com.google.android.material:material:1.0.0'
+ implementation 'androidx.legacy:legacy-support-v4:1.0.0'
+ implementation 'androidx.core:core:1.0.2'
+ implementation 'androidx.media:media:1.0.1'
+ implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'org.jetbrains.anko:anko-commons:0.10.5'
implementation 'com.google.code.gson:gson:2.8.5'
implementation 'com.brandongogetap:stickyheaders:0.5.1'
diff --git a/app/src/androidTest/java/com/adlerosn/brasilfurfest/ExampleInstrumentedTest.kt b/app/src/androidTest/java/com/adlerosn/brasilfurfest/ExampleInstrumentedTest.kt
index 1ccf5fa..03697c5 100644
--- a/app/src/androidTest/java/com/adlerosn/brasilfurfest/ExampleInstrumentedTest.kt
+++ b/app/src/androidTest/java/com/adlerosn/brasilfurfest/ExampleInstrumentedTest.kt
@@ -1,7 +1,7 @@
package com.adlerosn.brasilfurfest
-import android.support.test.InstrumentationRegistry
-import android.support.test.runner.AndroidJUnit4
+import androidx.test.platform.app.InstrumentationRegistry
+import androidx.test.ext.junit.runners.AndroidJUnit4
import org.junit.Test
import org.junit.runner.RunWith
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 9075607..6502392 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -34,21 +34,86 @@
+ android:pathPrefix="/app" />
+
+
+
+
+
+
+
+ android:pathPrefix="/app" />
+
+
+
+
+
+
+
+ android:pathPrefix="/app" />
+
+
+
+
+
+
+
+ android:pathPrefix="/app" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/java/com/adlerosn/brasilfurfest/SplashActivity.kt b/app/src/main/java/com/adlerosn/brasilfurfest/SplashActivity.kt
index c2e3979..18800ae 100644
--- a/app/src/main/java/com/adlerosn/brasilfurfest/SplashActivity.kt
+++ b/app/src/main/java/com/adlerosn/brasilfurfest/SplashActivity.kt
@@ -2,7 +2,7 @@ package com.adlerosn.brasilfurfest
import android.content.Intent
import android.os.Bundle
-import android.support.v7.app.AppCompatActivity
+import androidx.appcompat.app.AppCompatActivity
import android.view.View
import android.view.WindowManager
import com.adlerosn.brasilfurfest.helper.*
diff --git a/app/src/main/java/com/adlerosn/brasilfurfest/developer/DeveloperActivity.kt b/app/src/main/java/com/adlerosn/brasilfurfest/developer/DeveloperActivity.kt
index cbd27a7..da24844 100644
--- a/app/src/main/java/com/adlerosn/brasilfurfest/developer/DeveloperActivity.kt
+++ b/app/src/main/java/com/adlerosn/brasilfurfest/developer/DeveloperActivity.kt
@@ -3,7 +3,7 @@ package com.adlerosn.brasilfurfest.developer
import android.content.Intent
import android.graphics.drawable.Drawable
import android.os.Bundle
-import android.support.v7.app.AppCompatActivity
+import androidx.appcompat.app.AppCompatActivity
import com.adlerosn.brasilfurfest.R
import com.adlerosn.brasilfurfest.helper.KnownAssets
import com.adlerosn.brasilfurfest.legal.SoftwareLicensesActivity
diff --git a/app/src/main/java/com/adlerosn/brasilfurfest/helper/ContextGetColorCompat.kt b/app/src/main/java/com/adlerosn/brasilfurfest/helper/ContextGetColorCompat.kt
index 3c11872..62829ad 100644
--- a/app/src/main/java/com/adlerosn/brasilfurfest/helper/ContextGetColorCompat.kt
+++ b/app/src/main/java/com/adlerosn/brasilfurfest/helper/ContextGetColorCompat.kt
@@ -1,7 +1,7 @@
package com.adlerosn.brasilfurfest.helper
import android.content.Context
-import android.support.annotation.ColorRes
-import android.support.v4.content.ContextCompat
+import androidx.annotation.ColorRes
+import androidx.core.content.ContextCompat
fun Context.getColorCompat(@ColorRes colorId: Int) = ContextCompat.getColor(this, colorId)
\ No newline at end of file
diff --git a/app/src/main/java/com/adlerosn/brasilfurfest/helper/ListDiffCallback.kt b/app/src/main/java/com/adlerosn/brasilfurfest/helper/ListDiffCallback.kt
index bd6d0b9..797aaa2 100644
--- a/app/src/main/java/com/adlerosn/brasilfurfest/helper/ListDiffCallback.kt
+++ b/app/src/main/java/com/adlerosn/brasilfurfest/helper/ListDiffCallback.kt
@@ -1,6 +1,6 @@
package com.adlerosn.brasilfurfest.helper
-import android.support.v7.util.DiffUtil
+import androidx.recyclerview.widget.DiffUtil
class ListDiffCallback(private val old: List, private val new: List) : DiffUtil.Callback() {
override fun getOldListSize(): Int = old.size
diff --git a/app/src/main/java/com/adlerosn/brasilfurfest/helper/NotificationBuilderCompat.kt b/app/src/main/java/com/adlerosn/brasilfurfest/helper/NotificationBuilderCompat.kt
index c3f6531..634f22b 100644
--- a/app/src/main/java/com/adlerosn/brasilfurfest/helper/NotificationBuilderCompat.kt
+++ b/app/src/main/java/com/adlerosn/brasilfurfest/helper/NotificationBuilderCompat.kt
@@ -4,8 +4,8 @@ import android.app.NotificationChannel
import android.app.NotificationManager
import android.content.Context
import android.os.Build
-import android.support.annotation.StringRes
-import android.support.v4.app.NotificationCompat
+import androidx.annotation.StringRes
+import androidx.core.app.NotificationCompat
inline fun KClass.notificationBuilderCompat(@StringRes notificationChannelString: Int, important: Boolean): NotificationCompat.Builder =
getNotificationChannelBuilder(this, KClass::class.java.simpleName, notificationChannelString, important)
diff --git a/app/src/main/java/com/adlerosn/brasilfurfest/helper/PeekAndPop.kt b/app/src/main/java/com/adlerosn/brasilfurfest/helper/PeekAndPop.kt
index fd9cc37..b48ee20 100644
--- a/app/src/main/java/com/adlerosn/brasilfurfest/helper/PeekAndPop.kt
+++ b/app/src/main/java/com/adlerosn/brasilfurfest/helper/PeekAndPop.kt
@@ -3,9 +3,9 @@ package com.adlerosn.brasilfurfest.helper
import android.app.Activity
import android.graphics.Point
import android.graphics.Rect
-import android.support.annotation.IdRes
-import android.support.annotation.LayoutRes
-import android.support.v7.app.AlertDialog
+import androidx.annotation.IdRes
+import androidx.annotation.LayoutRes
+import androidx.appcompat.app.AlertDialog
import android.util.DisplayMetrics
import android.util.Log
import android.view.GestureDetector
diff --git a/app/src/main/java/com/adlerosn/brasilfurfest/helper/bindPeekAndPop.kt b/app/src/main/java/com/adlerosn/brasilfurfest/helper/bindPeekAndPop.kt
index 5b7f14f..7a6e370 100644
--- a/app/src/main/java/com/adlerosn/brasilfurfest/helper/bindPeekAndPop.kt
+++ b/app/src/main/java/com/adlerosn/brasilfurfest/helper/bindPeekAndPop.kt
@@ -1,7 +1,7 @@
package com.adlerosn.brasilfurfest.helper
import android.app.Activity
-import android.support.v4.content.ContextCompat
+import androidx.core.content.ContextCompat
import android.view.Gravity
import android.view.View
import android.view.ViewGroup
diff --git a/app/src/main/java/com/adlerosn/brasilfurfest/helper/bindTabAndContainer.kt b/app/src/main/java/com/adlerosn/brasilfurfest/helper/bindTabAndContainer.kt
index 1c53747..5137a5e 100644
--- a/app/src/main/java/com/adlerosn/brasilfurfest/helper/bindTabAndContainer.kt
+++ b/app/src/main/java/com/adlerosn/brasilfurfest/helper/bindTabAndContainer.kt
@@ -1,7 +1,7 @@
package com.adlerosn.brasilfurfest.helper
-import android.support.design.widget.TabLayout
-import android.support.v4.view.ViewPager
+import com.google.android.material.tabs.TabLayout
+import androidx.viewpager.widget.ViewPager
fun TabLayout.fullSetup(viewPager: ViewPager){
this.setupWithViewPager(viewPager)
diff --git a/app/src/main/java/com/adlerosn/brasilfurfest/legal/SoftwareLicensesActivity.kt b/app/src/main/java/com/adlerosn/brasilfurfest/legal/SoftwareLicensesActivity.kt
index b9cba19..294c211 100644
--- a/app/src/main/java/com/adlerosn/brasilfurfest/legal/SoftwareLicensesActivity.kt
+++ b/app/src/main/java/com/adlerosn/brasilfurfest/legal/SoftwareLicensesActivity.kt
@@ -1,8 +1,8 @@
package com.adlerosn.brasilfurfest.legal
import android.os.Bundle
-import android.support.v7.app.AppCompatActivity
-import android.support.v7.widget.LinearLayoutManager
+import androidx.appcompat.app.AppCompatActivity
+import androidx.recyclerview.widget.LinearLayoutManager
import com.adlerosn.brasilfurfest.R
import kotlinx.android.synthetic.main.activity_software_licenses.*
diff --git a/app/src/main/java/com/adlerosn/brasilfurfest/legal/SoftwareLicensesAdapter.kt b/app/src/main/java/com/adlerosn/brasilfurfest/legal/SoftwareLicensesAdapter.kt
index 7599aae..932e699 100644
--- a/app/src/main/java/com/adlerosn/brasilfurfest/legal/SoftwareLicensesAdapter.kt
+++ b/app/src/main/java/com/adlerosn/brasilfurfest/legal/SoftwareLicensesAdapter.kt
@@ -1,6 +1,6 @@
package com.adlerosn.brasilfurfest.legal
-import android.support.v7.widget.RecyclerView
+import androidx.recyclerview.widget.RecyclerView
import android.view.ViewGroup
import com.adlerosn.brasilfurfest.R
import com.adlerosn.brasilfurfest.helper.inflate
diff --git a/app/src/main/java/com/adlerosn/brasilfurfest/notification/NotificationFirer.kt b/app/src/main/java/com/adlerosn/brasilfurfest/notification/NotificationFirer.kt
index 50b8a1a..f707a41 100644
--- a/app/src/main/java/com/adlerosn/brasilfurfest/notification/NotificationFirer.kt
+++ b/app/src/main/java/com/adlerosn/brasilfurfest/notification/NotificationFirer.kt
@@ -4,11 +4,13 @@ import android.app.Notification
import android.app.PendingIntent
import android.content.Context
import android.content.Intent
-import android.support.v4.app.NotificationCompat
-import android.support.v4.app.NotificationManagerCompat
+import android.net.Uri
+import androidx.core.app.NotificationCompat
+import androidx.core.app.NotificationManagerCompat
import android.util.Log
import com.adlerosn.brasilfurfest.R
import com.adlerosn.brasilfurfest.helper.notificationBuilderCompat
+import com.adlerosn.brasilfurfest.helper.runtimeLanguage
import com.adlerosn.brasilfurfest.schedule.EventActivity
import com.adlerosn.brasilfurfest.schedule.managers.ScheduleManagerGetter
import java.io.PrintWriter
@@ -68,6 +70,46 @@ class NotificationFirer {
val s = writer.toString()
Log.e(NotificationFirer::class.java.simpleName, s)
}
+ ///////////////////////
+ try {
+ val notificationManager = NotificationManagerCompat.from(context)
+ val scheduleManager = ScheduleManagerGetter[context]
+ val announcements = scheduleManager.unreadAnnouncements
+ scheduleManager.setAnnouncementsRead()
+ announcements.forEach { announcement ->
+ val title = announcement.title[context.runtimeLanguage]
+ val body = announcement.body[context.runtimeLanguage]
+ val link = announcement.link?.get(context.runtimeLanguage)
+ val nt = context.notificationBuilderCompat(R.string.announcementsNotificationChannel, true)
+ .setDefaults(Notification.DEFAULT_ALL)
+ .setSmallIcon(R.drawable.ic_notificacao)
+ .setContentTitle(title)
+ .setContentText(body)
+ .let { builder ->
+ if(link==null)
+ builder
+ else
+ builder.setContentIntent(
+ PendingIntent.getActivity(
+ context,
+ announcement.uuid.hashCode(),
+ Intent(Intent.ACTION_VIEW, Uri.parse(link)),
+ 0
+ )
+ )
+ }
+ .setPriority(NotificationCompat.PRIORITY_HIGH)
+ notificationManager.notify(
+ 1, nt.build()
+ )
+
+ }
+ } catch (e: Throwable) {
+ val writer = StringWriter()
+ e.printStackTrace(PrintWriter(writer))
+ val s = writer.toString()
+ Log.e(NotificationFirer::class.java.simpleName, s)
+ }
}
// fun firePing(context: Context){
diff --git a/app/src/main/java/com/adlerosn/brasilfurfest/notification/ScheduleUpdaterJobService.kt b/app/src/main/java/com/adlerosn/brasilfurfest/notification/ScheduleUpdaterJobService.kt
index 6c728da..d30fbcc 100644
--- a/app/src/main/java/com/adlerosn/brasilfurfest/notification/ScheduleUpdaterJobService.kt
+++ b/app/src/main/java/com/adlerosn/brasilfurfest/notification/ScheduleUpdaterJobService.kt
@@ -2,14 +2,23 @@ package com.adlerosn.brasilfurfest.notification
import android.app.job.JobParameters
import android.app.job.JobService
+import com.adlerosn.brasilfurfest.schedule.managers.FullUpdateCheckerCancellable
class ScheduleUpdaterJobService: JobService() {
+ private lateinit var fucc: FullUpdateCheckerCancellable
+
override fun onStartJob(jobParameters: JobParameters): Boolean {
- jobFinished(jobParameters, true)
- return false
+ fucc = FullUpdateCheckerCancellable(baseContext)
+ fucc.run {
+ NotificationFirer().fire(baseContext)
+ jobFinished(jobParameters, true)
+ }
+ return true
}
override fun onStopJob(jobParameters: JobParameters): Boolean {
+ fucc.stop()
+ jobFinished(jobParameters, true)
return true
}
diff --git a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/EventActivity.kt b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/EventActivity.kt
index 19b6e00..c246532 100644
--- a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/EventActivity.kt
+++ b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/EventActivity.kt
@@ -10,9 +10,9 @@ import android.graphics.Color
import android.net.Uri
import android.os.Bundle
import android.provider.CalendarContract
-import android.support.design.widget.Snackbar
-import android.support.v7.app.AlertDialog
-import android.support.v7.app.AppCompatActivity
+import com.google.android.material.snackbar.Snackbar
+import androidx.appcompat.app.AlertDialog
+import androidx.appcompat.app.AppCompatActivity
import android.text.Spannable
import android.text.SpannableStringBuilder
import android.view.View
@@ -219,7 +219,7 @@ class EventActivity : AppCompatActivity() {
view.btnLink.setOnClickListener {
val clipboardManager = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
val clipData = ClipData.newPlainText("Room party link", link)
- clipboardManager.primaryClip = clipData
+ clipboardManager.setPrimaryClip(clipData)
startActivity(Intent.createChooser(Intent(Intent.ACTION_SEND).apply { type="text/plain"; putExtra(Intent.EXTRA_TEXT, link) }, null))
dialog.dismiss()
}
diff --git a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/FavoritesActivity.kt b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/FavoritesActivity.kt
index d6f5fbe..1ee5461 100644
--- a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/FavoritesActivity.kt
+++ b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/FavoritesActivity.kt
@@ -1,9 +1,9 @@
package com.adlerosn.brasilfurfest.schedule
import android.graphics.Color
-import android.support.v7.app.AppCompatActivity
+import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
-import android.support.v7.widget.LinearLayoutManager
+import androidx.recyclerview.widget.LinearLayoutManager
import android.view.WindowManager
import com.adlerosn.brasilfurfest.R
import com.adlerosn.brasilfurfest.helper.*
diff --git a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/QRCodeViewerActivity.kt b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/QRCodeViewerActivity.kt
index 4df3773..c4c18ea 100644
--- a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/QRCodeViewerActivity.kt
+++ b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/QRCodeViewerActivity.kt
@@ -2,7 +2,7 @@ package com.adlerosn.brasilfurfest.schedule
import android.graphics.Point
import android.os.Bundle
-import android.support.v7.app.AppCompatActivity
+import androidx.appcompat.app.AppCompatActivity
import android.view.WindowManager
import androidmads.library.qrgenearator.QRGContents
import androidmads.library.qrgenearator.QRGEncoder
diff --git a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/RoomPartyPreviewerActivity.kt b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/RoomPartyPreviewerActivity.kt
index 7966013..1bf1587 100644
--- a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/RoomPartyPreviewerActivity.kt
+++ b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/RoomPartyPreviewerActivity.kt
@@ -3,7 +3,7 @@ package com.adlerosn.brasilfurfest.schedule
import android.content.Intent
import android.net.Uri
import android.os.Bundle
-import android.support.v7.app.AppCompatActivity
+import androidx.appcompat.app.AppCompatActivity
import com.adlerosn.brasilfurfest.MainActivity
import com.adlerosn.brasilfurfest.R
import com.adlerosn.brasilfurfest.schedule.abstractDataTypes.managed.AttendeeConFavorite
diff --git a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/ScheduleActivity.kt b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/ScheduleActivity.kt
index 92b48ff..0a3d8d1 100644
--- a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/ScheduleActivity.kt
+++ b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/ScheduleActivity.kt
@@ -5,9 +5,9 @@ import android.content.DialogInterface
import android.content.Intent
import android.net.Uri
import android.os.Bundle
-import android.support.design.widget.Snackbar
-import android.support.v4.app.FragmentPagerAdapter
-import android.support.v7.app.AppCompatActivity
+import com.google.android.material.snackbar.Snackbar
+import androidx.fragment.app.FragmentPagerAdapter
+import androidx.appcompat.app.AppCompatActivity
import android.view.Menu
import android.view.MenuItem
import com.adlerosn.brasilfurfest.R
diff --git a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/SearchFilterActivity.kt b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/SearchFilterActivity.kt
index 344f854..920dda3 100644
--- a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/SearchFilterActivity.kt
+++ b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/SearchFilterActivity.kt
@@ -1,10 +1,10 @@
package com.adlerosn.brasilfurfest.schedule
import android.os.Bundle
-import android.support.annotation.StringRes
-import android.support.v7.app.AlertDialog
-import android.support.v7.app.AppCompatActivity
-import android.support.v7.widget.LinearLayoutManager
+import androidx.annotation.StringRes
+import androidx.appcompat.app.AlertDialog
+import androidx.appcompat.app.AppCompatActivity
+import androidx.recyclerview.widget.LinearLayoutManager
import android.text.Editable
import android.text.TextWatcher
import com.adlerosn.brasilfurfest.R
diff --git a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/abstractDataTypes/convention/Announcement.kt b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/abstractDataTypes/convention/Announcement.kt
new file mode 100644
index 0000000..ba842a4
--- /dev/null
+++ b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/abstractDataTypes/convention/Announcement.kt
@@ -0,0 +1,14 @@
+package com.adlerosn.brasilfurfest.schedule.abstractDataTypes.convention
+
+import com.adlerosn.brasilfurfest.helper.Language
+import java.io.Serializable
+import java.util.*
+
+class Announcement(
+ val uuid: String,
+ val title: Map,
+ val body: Map,
+ val link: Map?,
+ val created: GregorianCalendar,
+ val modified: GregorianCalendar
+) : Serializable
diff --git a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/abstractDataTypes/convention/ConventionSeries.kt b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/abstractDataTypes/convention/ConventionSeries.kt
index d5c838e..ed57fab 100644
--- a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/abstractDataTypes/convention/ConventionSeries.kt
+++ b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/abstractDataTypes/convention/ConventionSeries.kt
@@ -14,7 +14,8 @@ class ConventionSeries(
val statute: Map,
val defaultBanner: Map,
val banners: List,
- val updateFrequency: Double
+ val updateFrequency: Double,
+ val announcements: List
) : Serializable {
val allImages get() =
editions.flatMap { it.allImages } + banners.map { it.banner } + listOf(defaultBanner)
diff --git a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/abstractDataTypes/convention/SocialMedia.kt b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/abstractDataTypes/convention/SocialMedia.kt
index b64afd1..57d2cb1 100644
--- a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/abstractDataTypes/convention/SocialMedia.kt
+++ b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/abstractDataTypes/convention/SocialMedia.kt
@@ -1,6 +1,6 @@
package com.adlerosn.brasilfurfest.schedule.abstractDataTypes.convention
-import android.support.annotation.DrawableRes
+import androidx.annotation.DrawableRes
import com.adlerosn.brasilfurfest.helper.Language
import java.io.Serializable
diff --git a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/adapters/ConventionRulesAdapter.kt b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/adapters/ConventionRulesAdapter.kt
index 7f27f7c..118a632 100644
--- a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/adapters/ConventionRulesAdapter.kt
+++ b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/adapters/ConventionRulesAdapter.kt
@@ -1,7 +1,7 @@
package com.adlerosn.brasilfurfest.schedule.adapters
import android.content.Context
-import android.support.v4.content.ContextCompat
+import androidx.core.content.ContextCompat
import android.view.View
import android.view.ViewGroup
import com.adlerosn.brasilfurfest.R
diff --git a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/adapters/ConventionSocialMediasAdapter.kt b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/adapters/ConventionSocialMediasAdapter.kt
index 9ea2ba1..3fd370d 100644
--- a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/adapters/ConventionSocialMediasAdapter.kt
+++ b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/adapters/ConventionSocialMediasAdapter.kt
@@ -3,7 +3,7 @@ package com.adlerosn.brasilfurfest.schedule.adapters
import android.content.Intent
import android.content.res.ColorStateList
import android.net.Uri
-import android.support.v7.widget.RecyclerView
+import androidx.recyclerview.widget.RecyclerView
import android.view.ViewGroup
import com.adlerosn.brasilfurfest.R
import com.adlerosn.brasilfurfest.helper.layoutInflater
diff --git a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/adapters/DayHourEventsAdapter.kt b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/adapters/DayHourEventsAdapter.kt
index 16d33d6..8b42857 100644
--- a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/adapters/DayHourEventsAdapter.kt
+++ b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/adapters/DayHourEventsAdapter.kt
@@ -2,8 +2,8 @@ package com.adlerosn.brasilfurfest.schedule.adapters
import android.app.Activity
import android.content.Intent
-import android.support.v7.app.AlertDialog
-import android.support.v7.util.DiffUtil
+import androidx.appcompat.app.AlertDialog
+import androidx.recyclerview.widget.DiffUtil
import android.view.View
import android.view.ViewGroup
import com.adlerosn.brasilfurfest.R
diff --git a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/adapters/DaysPagerAdapter.kt b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/adapters/DaysPagerAdapter.kt
index 02f7067..ef6e2e6 100644
--- a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/adapters/DaysPagerAdapter.kt
+++ b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/adapters/DaysPagerAdapter.kt
@@ -1,8 +1,8 @@
package com.adlerosn.brasilfurfest.schedule.adapters
-import android.support.v4.app.Fragment
-import android.support.v4.app.FragmentManager
-import android.support.v4.app.FragmentPagerAdapter
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentManager
+import androidx.fragment.app.FragmentPagerAdapter
import com.adlerosn.brasilfurfest.R
import com.adlerosn.brasilfurfest.helper.*
import com.adlerosn.brasilfurfest.schedule.managers.ScheduleManager
diff --git a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/adapters/FavoritesAdapter.kt b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/adapters/FavoritesAdapter.kt
index 51ac5d1..8cee1da 100644
--- a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/adapters/FavoritesAdapter.kt
+++ b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/adapters/FavoritesAdapter.kt
@@ -2,7 +2,7 @@ package com.adlerosn.brasilfurfest.schedule.adapters
import android.app.Activity
import android.content.Intent
-import android.support.v7.util.DiffUtil
+import androidx.recyclerview.widget.DiffUtil
import android.view.View
import android.view.ViewGroup
import com.adlerosn.brasilfurfest.R
diff --git a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/adapters/FilterCriteriaRecyclerViewAdapter.kt b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/adapters/FilterCriteriaRecyclerViewAdapter.kt
index 1d67537..b15e0a1 100644
--- a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/adapters/FilterCriteriaRecyclerViewAdapter.kt
+++ b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/adapters/FilterCriteriaRecyclerViewAdapter.kt
@@ -1,7 +1,7 @@
package com.adlerosn.brasilfurfest.schedule.adapters
import android.content.res.ColorStateList
-import android.support.v7.util.DiffUtil
+import androidx.recyclerview.widget.DiffUtil
import android.view.ViewGroup
import com.adlerosn.brasilfurfest.R
import com.adlerosn.brasilfurfest.helper.*
diff --git a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/adapters/PeekableEventRecyclerViewAdapter.kt b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/adapters/PeekableEventRecyclerViewAdapter.kt
index b96a050..aac4f32 100644
--- a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/adapters/PeekableEventRecyclerViewAdapter.kt
+++ b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/adapters/PeekableEventRecyclerViewAdapter.kt
@@ -4,9 +4,9 @@ import android.app.Activity
import android.content.Intent
import android.content.res.ColorStateList
import android.graphics.Paint
-import android.support.design.widget.Snackbar
-import android.support.v4.content.ContextCompat
-import android.support.v7.util.DiffUtil
+import com.google.android.material.snackbar.Snackbar
+import androidx.core.content.ContextCompat
+import androidx.recyclerview.widget.DiffUtil
import android.view.View
import android.view.ViewGroup
import com.adlerosn.brasilfurfest.R
diff --git a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/adapters/RecyclerViewAdapter.kt b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/adapters/RecyclerViewAdapter.kt
index 785affa..b7e958f 100644
--- a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/adapters/RecyclerViewAdapter.kt
+++ b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/adapters/RecyclerViewAdapter.kt
@@ -1,6 +1,6 @@
package com.adlerosn.brasilfurfest.schedule.adapters
-import android.support.v7.widget.RecyclerView
+import androidx.recyclerview.widget.RecyclerView
import com.adlerosn.brasilfurfest.schedule.viewHolders.RecyclerViewHolder
abstract class RecyclerViewAdapter: RecyclerView.Adapter()
\ No newline at end of file
diff --git a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/fragments/ConventionDayFragment.kt b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/fragments/ConventionDayFragment.kt
index 6ff570a..47edc8e 100644
--- a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/fragments/ConventionDayFragment.kt
+++ b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/fragments/ConventionDayFragment.kt
@@ -1,8 +1,8 @@
package com.adlerosn.brasilfurfest.schedule.fragments
import android.os.Bundle
-import android.support.v4.app.Fragment
-import android.support.v7.widget.LinearLayoutManager
+import androidx.fragment.app.Fragment
+import androidx.recyclerview.widget.LinearLayoutManager
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
diff --git a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/fragments/ConventionRulesFragment.kt b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/fragments/ConventionRulesFragment.kt
index 326261b..fd6f09d 100644
--- a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/fragments/ConventionRulesFragment.kt
+++ b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/fragments/ConventionRulesFragment.kt
@@ -1,8 +1,8 @@
package com.adlerosn.brasilfurfest.schedule.fragments
import android.os.Bundle
-import android.support.v4.app.Fragment
-import android.support.v7.widget.LinearLayoutManager
+import androidx.fragment.app.Fragment
+import androidx.recyclerview.widget.LinearLayoutManager
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
diff --git a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/fragments/ConventionSocialMediasFragment.kt b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/fragments/ConventionSocialMediasFragment.kt
index 4287b42..9e948f8 100644
--- a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/fragments/ConventionSocialMediasFragment.kt
+++ b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/fragments/ConventionSocialMediasFragment.kt
@@ -1,8 +1,8 @@
package com.adlerosn.brasilfurfest.schedule.fragments
import android.os.Bundle
-import android.support.v4.app.Fragment
-import android.support.v7.widget.LinearLayoutManager
+import androidx.fragment.app.Fragment
+import androidx.recyclerview.widget.LinearLayoutManager
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
diff --git a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/fragments/ConventionSummaryFragment.kt b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/fragments/ConventionSummaryFragment.kt
index b889ffb..58f4c17 100644
--- a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/fragments/ConventionSummaryFragment.kt
+++ b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/fragments/ConventionSummaryFragment.kt
@@ -6,7 +6,7 @@ import android.content.DialogInterface
import android.content.Intent
import android.net.Uri
import android.os.Bundle
-import android.support.v4.app.Fragment
+import androidx.fragment.app.Fragment
import android.util.Log
import android.view.LayoutInflater
import android.view.View
diff --git a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/managers/AbstractRemoteAssets.kt b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/managers/AbstractRemoteAssets.kt
new file mode 100644
index 0000000..259d3ba
--- /dev/null
+++ b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/managers/AbstractRemoteAssets.kt
@@ -0,0 +1,7 @@
+package com.adlerosn.brasilfurfest.schedule.managers
+
+abstract class AbstractRemoteAssets(server: String, project: String) : RemoteAssetsInterface {
+ override val json = "$server/api/conventions/$project/minified.json"
+ override val media = "$server/"
+ override val attending = "$server/api/conventions/$project/choices"
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/managers/CacheManager.kt b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/managers/CacheManager.kt
index b4d3fa1..8310782 100644
--- a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/managers/CacheManager.kt
+++ b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/managers/CacheManager.kt
@@ -1,6 +1,7 @@
package com.adlerosn.brasilfurfest.schedule.managers
import android.content.Context
+import java.io.File
import java.io.InputStream
import java.io.Serializable
@@ -15,12 +16,12 @@ abstract class CacheManager : Serializable {
abstract val files: Set
abstract fun startMonitoringNeededFiles()
abstract fun removeNotNeededFiles(): Int
- abstract fun setupScheduleManagerUpdater(sm: ScheduleManager)
+ abstract fun getFileFor(asset: String): File
companion object {
operator fun invoke(context: Context) =
if(RemoteAssets.onlineApp) {
- if (RemoteAssets.selfUpdate)
+ if (RemoteAssets.preloaded)
OnlinePreloadedCacheManager(context)
else
OnlineCacheManager(context)
diff --git a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/managers/ConventionJsonReader.kt b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/managers/ConventionJsonReader.kt
index e8b0cd8..1efe6d7 100644
--- a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/managers/ConventionJsonReader.kt
+++ b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/managers/ConventionJsonReader.kt
@@ -1,6 +1,6 @@
package com.adlerosn.brasilfurfest.schedule.managers
-import android.support.annotation.DrawableRes
+import androidx.annotation.DrawableRes
import com.adlerosn.brasilfurfest.R
import com.adlerosn.brasilfurfest.helper.*
import com.adlerosn.brasilfurfest.schedule.abstractDataTypes.GregorianCalendarRange
@@ -34,6 +34,7 @@ object ConventionJsonReader {
val banners = mutableMapOf()
val maps = mutableMapOf()
val registrationLinks = mutableMapOf()
+ val announcements = mutableMapOf()
}
fun readFromFile(file: String) =
@@ -45,6 +46,9 @@ object ConventionJsonReader {
fun readFromInputStream(inputStream: InputStream): ConventionSeries =
readFromJson(inputStream.bufferedReader(Charsets.UTF_8).readText())
+ fun readFromByteArray(byteArray: ByteArray): ConventionSeries =
+ readFromInputStream(byteArray.inputStream())
+
fun readFromJson(json: String) =
readFromJson(JSONObject(json))
@@ -64,6 +68,7 @@ object ConventionJsonReader {
val featured = uuidHashResolver.conventions[jsonObject.getString("featured")] ?: uuidHashResolver.conventions.values.first()
val defaultBanner = parseLanguageImage(jsonObject.getJSONObject("default_banner"), uuidHashResolver)!!
val banners = parseBanners(jsonObject.getJSONArray("banners"), uuidHashResolver)
+ val announcements = parseAnnouncements(jsonObject.getJSONArray("announcements"), uuidHashResolver)
return ConventionSeries(
name,
featured,
@@ -74,12 +79,37 @@ object ConventionJsonReader {
statute,
defaultBanner,
banners,
- 1.0/6
+ 1.0/6,
+ announcements
).apply {
uuidHashResolver.conventionSeries[uuid] = this
}
}
+ private fun parseAnnouncements(jsonArray: JSONArray, uuidHashResolver: ConventionJsonReader.UuidHashResolver): List =
+ jsonArray.asSequence().map { parseAnnouncement(it, uuidHashResolver) }.toList()
+
+ private fun parseAnnouncement(jsonObject: JSONObject, uuidHashResolver: UuidHashResolver): Announcement {
+ val uuid = jsonObject.getString("uuid")
+ val previouslyKnown = uuidHashResolver.announcements[uuid]
+ if (previouslyKnown != null) return previouslyKnown
+ val title = parseLanguageString(jsonObject.getJSONObject("title"), uuidHashResolver)
+ val body = parseLanguageString(jsonObject.getJSONObject("body"), uuidHashResolver)
+ val link = parseLanguageString(jsonObject.getJSONObject("link"), uuidHashResolver)
+ val created = parseGregCal(jsonObject.getJSONObject("created"))
+ val modified = parseGregCal(jsonObject.getJSONObject("modified"))
+ return Announcement(
+ uuid,
+ title,
+ body,
+ link,
+ created,
+ modified
+ ).apply {
+ uuidHashResolver.announcements[uuid] = this
+ }
+ }
+
private fun parseBanners(jsonArray: JSONArray, uuidHashResolver: UuidHashResolver) =
jsonArray.asSequence().map { parseBanner(it, uuidHashResolver) }.toList()
diff --git a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/managers/FullUpdateCheckerCancellable.kt b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/managers/FullUpdateCheckerCancellable.kt
new file mode 100644
index 0000000..9f2073d
--- /dev/null
+++ b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/managers/FullUpdateCheckerCancellable.kt
@@ -0,0 +1,55 @@
+package com.adlerosn.brasilfurfest.schedule.managers
+
+import android.content.Context
+import com.adlerosn.brasilfurfest.helper.lastPathPart
+import java.util.concurrent.Future
+
+class FullUpdateCheckerCancellable(context: Context) {
+ private val uc = UpdateChecker(context)
+ private val promises: MutableList> = mutableListOf()
+ private val processedImages: MutableList = mutableListOf()
+
+ fun run(onCompletedCallback: (Boolean)->Any? = {}){
+ promises.add(uc.downloadBaseJsonWithWatcher { downloadState: UpdateChecker.DownloadState, bytes: ByteArray?, _: Throwable? ->
+ when(downloadState){
+ UpdateChecker.DownloadState.ERROR -> {
+ onCompletedCallback(false)
+ }
+ UpdateChecker.DownloadState.SUCCESS -> {
+ val conventionSeries = ConventionJsonReader.readFromByteArray(bytes!!)
+ val allImages = conventionSeries.allImages.flatMap { it.values }.distinct()
+ allImages.forEach { image: String ->
+ if(uc.cacheManager[image.lastPathPart()] != null){
+ synchronized(::processedImages){
+ processedImages.add(image)
+ if(processedImages.size >= allImages.size)
+ onCompletedCallback(true)
+ }
+ } else {
+ val url = RemoteAssets.media+image
+ promises.add(uc.downloadWithWatcher(url) { ds: UpdateChecker.DownloadState, _: ByteArray?, _: Throwable? ->
+ when(ds){
+ UpdateChecker.DownloadState.SUCCESS, UpdateChecker.DownloadState.ERROR -> {
+ synchronized(::processedImages){
+ processedImages.add(image)
+ if(processedImages.size >= allImages.size)
+ onCompletedCallback(true)
+ }
+ }
+ else -> {}
+ }
+ })
+ }
+ }
+ }
+ else -> null
+ }
+ })
+ }
+
+ fun stop(){
+ promises.forEach { it.cancel(true) }
+ promises.clear()
+ processedImages.clear()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/managers/OfflineCacheManager.kt b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/managers/OfflineCacheManager.kt
index 5770f56..2cf87bd 100644
--- a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/managers/OfflineCacheManager.kt
+++ b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/managers/OfflineCacheManager.kt
@@ -1,12 +1,17 @@
package com.adlerosn.brasilfurfest.schedule.managers
import android.content.Context
+import android.content.res.Resources
+import com.adlerosn.brasilfurfest.helper.joinFile
+import com.adlerosn.brasilfurfest.helper.lastPathPart
import com.adlerosn.brasilfurfest.helper.nullFun
+import java.io.File
import java.io.InputStream
import java.lang.Exception
class OfflineCacheManager(context: Context): CacheManager() {
private val assets = context.assets
+ private val cacheDir = context.cacheDir
override val goesOnline = false
override val preloaded = false
override fun getStamp(file: String): String? = get(file)?.second
@@ -19,5 +24,15 @@ class OfflineCacheManager(context: Context): CacheManager() {
override fun startMonitoringNeededFiles() = nullFun()
override fun removeNotNeededFiles() = 0
override val files get() = (assets.list("out") ?: arrayOf()).toSet()
- override fun setupScheduleManagerUpdater(sm: ScheduleManager) = nullFun()
+ override fun getFileFor(asset: String): File {
+ val cachedFile = cacheDir.joinFile(asset.lastPathPart())
+ if(!cachedFile.exists()){
+ val assetDescriptor = get(asset.lastPathPart())
+ if (assetDescriptor == null)
+ throw Resources.NotFoundException("Unavailable asset: $asset")
+ else
+ cachedFile.writeBytes(assetDescriptor.first.readBytes())
+ }
+ return cachedFile
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/managers/OnlineCacheManager.kt b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/managers/OnlineCacheManager.kt
index a0dd466..a36e461 100644
--- a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/managers/OnlineCacheManager.kt
+++ b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/managers/OnlineCacheManager.kt
@@ -1,14 +1,14 @@
package com.adlerosn.brasilfurfest.schedule.managers
import android.content.Context
+import android.content.res.Resources
import com.adlerosn.brasilfurfest.helper.joinFile
import com.adlerosn.brasilfurfest.helper.lastPathPart
-import com.adlerosn.brasilfurfest.helper.nullFun
import java.io.File
import java.io.InputStream
class OnlineCacheManager(context: Context): CacheManager() {
- private val cacheLocation = File(context.filesDir, "cache_data")
+ internal val cacheLocation = File(context.filesDir, "cache_data")
.also {
if (!it.isDirectory) {
it.mkdirs()
@@ -64,16 +64,16 @@ class OnlineCacheManager(context: Context): CacheManager() {
}
override fun sanitize(): Int{
- val datas = cacheLocation.listFiles().toList().map { it.absolutePath.lastPathPart() }
- val stmps = cacheStamps.listFiles().toList().map { it.absolutePath.lastPathPart() }
+ val datas = (cacheLocation.listFiles() ?: arrayOf()).toList().map { it.absolutePath.lastPathPart() }
+ val stmps = (cacheStamps.listFiles() ?: arrayOf()).toList().map { it.absolutePath.lastPathPart() }
val unreliableEntries = (datas-stmps) + (stmps-datas)
return unreliableEntries.map { delete(it) }.size
}
override val files: Set
get() {
- val datas = cacheLocation.listFiles().toList().map { it.absolutePath.lastPathPart() }
- val stmps = cacheStamps.listFiles().toList().map { it.absolutePath.lastPathPart() }
+ val datas = (cacheLocation.listFiles() ?: arrayOf()).toList().map { it.absolutePath.lastPathPart() }
+ val stmps = (cacheStamps.listFiles() ?: arrayOf()).toList().map { it.absolutePath.lastPathPart() }
return datas.intersect(stmps)
}
@@ -87,5 +87,10 @@ class OnlineCacheManager(context: Context): CacheManager() {
return notNeeded.map { delete(it) }.size
}
- override fun setupScheduleManagerUpdater(sm: ScheduleManager) = nullFun()
+ override fun getFileFor(asset: String): File {
+ val retFile = cacheLocation.joinFile(asset.lastPathPart())
+ if(!retFile.exists())
+ throw Resources.NotFoundException("Unavailable asset: $asset")
+ return retFile
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/managers/OnlinePreloadedCacheManager.kt b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/managers/OnlinePreloadedCacheManager.kt
index f7fdad1..09659d1 100644
--- a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/managers/OnlinePreloadedCacheManager.kt
+++ b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/managers/OnlinePreloadedCacheManager.kt
@@ -1,10 +1,11 @@
package com.adlerosn.brasilfurfest.schedule.managers
-import android.app.AlarmManager
import android.content.Context
-import android.support.v4.app.AlarmManagerCompat
+import android.content.res.Resources
+import com.adlerosn.brasilfurfest.helper.joinFile
import com.adlerosn.brasilfurfest.helper.lastPathPart
import com.adlerosn.brasilfurfest.helper.nullFun
+import java.io.File
class OnlinePreloadedCacheManager(context: Context): CacheManager() {
private val offCacheMan = OfflineCacheManager(context)
@@ -12,7 +13,7 @@ class OnlinePreloadedCacheManager(context: Context): CacheManager() {
override val goesOnline = true
override val preloaded = true
- private var updateScheduleManagerNow: ()->Any? = nullFun
+ private var updateScheduleManagerNow: () -> Any? = nullFun
override fun getStamp(file: String) = onCacheMan.getStamp(file) ?: offCacheMan.getStamp(file)
override fun get(file: String) = onCacheMan[file] ?: offCacheMan[file]
@@ -20,31 +21,26 @@ class OnlinePreloadedCacheManager(context: Context): CacheManager() {
val prevHash = get(file)?.second
val currHash = requestResult.second
onCacheMan[file] = requestResult
- if (file.lastPathPart() == RemoteAssets.json.lastPathPart() && currHash!=prevHash)
+ if (file.lastPathPart() == RemoteAssets.json.lastPathPart() && currHash != prevHash)
updateScheduleManagerNow()
}
+
override fun delete(file: String) = listOf(onCacheMan.delete(file), offCacheMan.delete(file)).any { it }
- override fun sanitize() = onCacheMan.sanitize()+offCacheMan.sanitize()
- override val files get() = onCacheMan.files+offCacheMan.files
+ override fun sanitize() = onCacheMan.sanitize() + offCacheMan.sanitize()
+ override val files get() = onCacheMan.files + offCacheMan.files
override fun startMonitoringNeededFiles() = onCacheMan.startMonitoringNeededFiles()
override fun removeNotNeededFiles() = onCacheMan.removeNotNeededFiles()
- override fun setupScheduleManagerUpdater(sm: ScheduleManager) {
-// AlarmManagerCompat.setExactAndAllowWhileIdle(
-// sm.alarmManager,
-// AlarmManager.RTC_WAKEUP,
-// System.currentTimeMillis()+500L,
-// pendingIntent
-// )
-// sm.conventionSeriesUpdateHandler.removeCallbacksAndMessages(null)
-// (object : Runnable { override fun run() {
-// updateScheduleManagerNow = { sm.updateConventionSeries() }
-// sm.conventionSeriesUpdateHandler.postAtTime(this, System.currentTimeMillis()+500L)
-// sm.conventionSeriesUpdateHandler.postDelayed(this, 500L) //(max(sm.conventionSeries.updateFrequency, .5)*60*1000).roundToLong()
-// println("asjdbaoebfsabefasjebgolsbrgoisbeogibsoeigboiwsbgoibewsogb")
-// println("asjdbaoebfsabefasjebgolsbrgoisbeogibsoeigboiwsbgoibassogb")
-// println("asjdbaoebfsabefasjebgolsbrgoisbeogibsoeigboiwsbgodsbwsogb")
-// println("asjdbaoebfsabefasjebgolsbrgoisbeogibsoeigboiwsbgdfaedfegb")
-// } }).apply { run() }
+ override fun getFileFor(asset: String): File {
+ val retFile = onCacheMan.cacheLocation.joinFile(asset.lastPathPart())
+ if (!retFile.exists()) {
+ val assetDescriptor = get(asset.lastPathPart())
+ if (assetDescriptor == null)
+ throw Resources.NotFoundException("Unavailable asset: $asset")
+ else
+ set(asset.lastPathPart(), Pair(assetDescriptor.first.readBytes(), UNIX_TIMESTAMP_START))
+ }
+ println(retFile)
+ return retFile
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/managers/RemoteAssets.kt b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/managers/RemoteAssets.kt
index 71901df..f584f42 100644
--- a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/managers/RemoteAssets.kt
+++ b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/managers/RemoteAssets.kt
@@ -1,8 +1,9 @@
package com.adlerosn.brasilfurfest.schedule.managers
-object RemoteAssets: RemoteAssetsInterface {
- override val json = "https://bff-ws.adlerneves.com/api/conventions/bff/minified.json"
- override val media = "https://bff-ws.adlerneves.com/"
- override val onlineApp = false
- override val selfUpdate = false
+object RemoteAssets: AbstractRemoteAssets(
+ "https://events.furmeet.app",
+ "bff"
+) {
+ override val onlineApp = true
+ override val preloaded = true
}
\ No newline at end of file
diff --git a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/managers/RemoteAssetsInterface.kt b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/managers/RemoteAssetsInterface.kt
index bb8273a..e03f2a7 100644
--- a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/managers/RemoteAssetsInterface.kt
+++ b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/managers/RemoteAssetsInterface.kt
@@ -3,6 +3,7 @@ package com.adlerosn.brasilfurfest.schedule.managers
interface RemoteAssetsInterface {
val json: String
val media: String
+ val attending: String
val onlineApp: Boolean
- val selfUpdate: Boolean
+ val preloaded: Boolean
}
\ No newline at end of file
diff --git a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/managers/ScheduleManager.kt b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/managers/ScheduleManager.kt
index 3ea4237..110a129 100644
--- a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/managers/ScheduleManager.kt
+++ b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/managers/ScheduleManager.kt
@@ -1,14 +1,13 @@
package com.adlerosn.brasilfurfest.schedule.managers
-import android.app.AlarmManager
import android.content.Context
import android.os.FileObserver
-import android.os.Handler
-import android.os.Looper
import android.util.Log
import com.adlerosn.brasilfurfest.helper.*
import com.adlerosn.brasilfurfest.helper.observables.Observable
import com.adlerosn.brasilfurfest.helper.observables.Observer
+import com.adlerosn.brasilfurfest.notification.NotificationFirer
+import com.adlerosn.brasilfurfest.schedule.abstractDataTypes.convention.Announcement
import com.adlerosn.brasilfurfest.schedule.abstractDataTypes.convention.Convention
import com.adlerosn.brasilfurfest.schedule.abstractDataTypes.convention.ConventionSeries
import com.adlerosn.brasilfurfest.schedule.abstractDataTypes.convention.Event
@@ -16,7 +15,6 @@ import com.adlerosn.brasilfurfest.schedule.abstractDataTypes.managed.AttendeeCon
import com.adlerosn.brasilfurfest.schedule.abstractDataTypes.managed.AttendeeConsFavorites
import com.google.gson.GsonBuilder
import org.jetbrains.anko.doAsync
-import org.jetbrains.anko.uiThread
import java.io.File
import java.io.Serializable
import java.util.*
@@ -24,15 +22,20 @@ import java.util.*
class ScheduleManager(context: Context) : UncomplicatedObservable(), Observer, Any?>, Serializable {
override fun update(observable: Observable, args: Any?) = onAttendeeIntentionsChanged()
- val cacheManager = CacheManager(context).also { it.setupScheduleManagerUpdater(this) }
+ private val uniqueIdentifierFile = File(context.filesDir, "rduid.txt")
+ val uniqueIdentifier: String
+
+ val cacheManager = CacheManager(context)
private val cachedChoices = File(context.filesDir, "schedule_choices.json")
private val cachedChoicesCanonicalPath = cachedChoices.canonicalPath
- private inner class InnerFileObserver(path: String, private val scheduleManager: ScheduleManager) : FixedFileObserver(path){
+ private val fireNotificationsClosure = { NotificationFirer().fire(context) }
+
+ private inner class InnerFileObserver(path: String, private val closure: ()->Any?) : FixedFileObserver(path){
override fun onEvent(event: Int, path: String) {
val mask = FileObserver.CLOSE_WRITE
if ((event and mask) != 0) {
- scheduleManager.notifyDiskChanges()
+ closure()
}
}
}
@@ -54,7 +57,8 @@ class ScheduleManager(context: Context) : UncomplicatedObservable(), Obser
notifyObservers()
}
- private var fileObserver: InnerFileObserver
+ private val fileObserver: InnerFileObserver
+ private val scheduleObserver: InnerFileObserver
fun updateConventionSeries() =
cacheManager[RemoteAssets.json.lastPathPart()]!!.first
@@ -77,33 +81,62 @@ class ScheduleManager(context: Context) : UncomplicatedObservable(), Obser
//.setExclusionStrategies(ObservableFieldsExclusionStrategy())
.registerTypeAdapter(Convention::class.java, ConventionInstanceCreator(convention))
.create()
- val nextNotificationTime: Long get(){
- val early: Long = convention.notificationFireMinutesBefore*60*1000.toLong()
- val now = conventionTime
- val thisRange = now.dayRange.split(convention.splitDayIn).first { conventionTime in it }
- val diff = thisRange.finish.timeInMillis - thisRange.start.timeInMillis
- val nextEnd = thisRange.start.timeInMillis+(1*diff)
- val nextNextEnd = thisRange.start.timeInMillis+(2*diff)
- val earlyNextEnd = nextEnd-early
- val earlyNextNextEnd = nextNextEnd-early
- return if(now.timeInMillis < earlyNextEnd) earlyNextEnd else earlyNextNextEnd
- }
-
- val alarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
- fun onConventionSeriesHasPendingUpdates(){ doAsync { uiThread { updateConventionSeries() } } }
+// val nextNotificationTime: Long get(){
+// val early: Long = convention.notificationFireMinutesBefore*60*1000.toLong()
+// val now = conventionTime
+// val thisRange = now.dayRange.split(convention.splitDayIn).first { conventionTime in it }
+// val diff = thisRange.finish.timeInMillis - thisRange.start.timeInMillis
+// val nextEnd = thisRange.start.timeInMillis+(1*diff)
+// val nextNextEnd = thisRange.start.timeInMillis+(2*diff)
+// val earlyNextEnd = nextEnd-early
+// val earlyNextNextEnd = nextNextEnd-early
+// return if(now.timeInMillis < earlyNextEnd) earlyNextEnd else earlyNextNextEnd
+// }
init {
loadFromDisk()
if(!cachedChoices.exists())
saveToDisk(false)
- fileObserver = InnerFileObserver(cachedChoicesCanonicalPath, this)
- fileObserver.startWatching()
+ uniqueIdentifier = initUniqueIdentifierFile()
+ fileObserver = (InnerFileObserver(cachedChoicesCanonicalPath) {notifyDiskChanges()}).apply { startWatching() }
+ scheduleObserver = (InnerFileObserver(cacheManager.getFileFor(RemoteAssets.json).absolutePath) {notifyScheduleChanged()}).apply { startWatching() }
+ }
+
+ private fun notifyScheduleChanged() {
+ conventionSeries = updateConventionSeries()
+ setChanged()
+ notifyObservers()
+ fireNotificationsClosure()
+ }
+
+ private val readAnnouncementsFile = File(context.filesDir, "announcements_read.txt")
+ val unreadAnnouncements: List get() {
+ if(!readAnnouncementsFile.exists())
+ return listOf()
+ val readAnnouncementUUIDs = readAnnouncementsFile.readLines()
+ return conventionSeries.announcements.filter { it.uuid !in readAnnouncementUUIDs }
+ }
+ fun setAnnouncementsRead() {
+ readAnnouncementsFile.writeText(
+ conventionSeries.announcements.map {
+ it.uuid
+ }.joinToString(separator = "\n")
+ )
+ }
+
+
+ private fun initUniqueIdentifierFile(): String{
+ if(!uniqueIdentifierFile.exists())
+ uniqueIdentifierFile.writeText(UUID.randomUUID().toString())
+ return uniqueIdentifierFile.readText()
}
private fun readObject(ois: java.io.ObjectInputStream){
ois.defaultReadObject()
fileObserver.stopWatching()
fileObserver.startWatching()
+ scheduleObserver.stopWatching()
+ scheduleObserver.startWatching()
loadFromDisk()
}
diff --git a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/managers/UpdateChecker.kt b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/managers/UpdateChecker.kt
index 2d745c0..393e157 100644
--- a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/managers/UpdateChecker.kt
+++ b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/managers/UpdateChecker.kt
@@ -13,7 +13,7 @@ import java.net.URL
class UpdateChecker(context: Context): Serializable {
val cacheManager = CacheManager(context).also { it.startMonitoringNeededFiles() }
- private val baseJsonFileName = RemoteAssets.json.split('/').last()
+ private val baseJsonFileName = RemoteAssets.json.lastPathPart()
val hasBaseJsonCached get() = baseJsonFileName.let {
cacheManager.getStamp(it) != null
}
@@ -21,8 +21,8 @@ class UpdateChecker(context: Context): Serializable {
fun downloadBaseJsonWithWatcher(watcher: (DownloadState, ByteArray?, Throwable?)->Any?) =
downloadWithWatcher(RemoteAssets.json, watcher)
- fun downloadWithWatcher(httpThingToFetch: String, watcher: (DownloadState, ByteArray?, Throwable?)->Any?){
- if(cacheManager.goesOnline) {
+ fun downloadWithWatcher(httpThingToFetch: String, watcher: (DownloadState, ByteArray?, Throwable?)->Any?) =
+ if(cacheManager.goesOnline)
doAsync {
try {
val url = URL(httpThingToFetch)
@@ -67,14 +67,12 @@ class UpdateChecker(context: Context): Serializable {
uiThread { watcher(DownloadState.ERROR, null, t) }
}
}
- } else {
+ else
doAsync { uiThread {
watcher(DownloadState.CONNECTING, null, null)
watcher(DownloadState.CACHE_HIT, null, null)
watcher(DownloadState.SUCCESS, cacheManager[httpThingToFetch.lastPathPart()]!!.first.readBytes(), null)
} }
- }
- }
enum class DownloadState{
CONNECTING,
diff --git a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/viewHolders/RecyclerViewHolder.kt b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/viewHolders/RecyclerViewHolder.kt
index d26ff35..887333e 100644
--- a/app/src/main/java/com/adlerosn/brasilfurfest/schedule/viewHolders/RecyclerViewHolder.kt
+++ b/app/src/main/java/com/adlerosn/brasilfurfest/schedule/viewHolders/RecyclerViewHolder.kt
@@ -1,6 +1,6 @@
package com.adlerosn.brasilfurfest.schedule.viewHolders
-import android.support.v7.widget.RecyclerView
+import androidx.recyclerview.widget.RecyclerView
import android.view.View
open class RecyclerViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)
\ No newline at end of file
diff --git a/app/src/main/java/com/adlerosn/brasilfurfest/updater/silent/UpdaterBackgroundService.kt b/app/src/main/java/com/adlerosn/brasilfurfest/updater/silent/UpdaterBackgroundService.kt
deleted file mode 100644
index c150d60..0000000
--- a/app/src/main/java/com/adlerosn/brasilfurfest/updater/silent/UpdaterBackgroundService.kt
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.adlerosn.brasilfurfest.updater.silent
-
-import android.content.Intent
-import android.os.IBinder
-import com.adlerosn.brasilfurfest.updater.startup.UpdaterService
-import java.util.*
-
-class UpdaterBackgroundService : UpdaterService() {
- val timer = Timer()
-
- override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {
- return super.onStartCommand(intent, flags, startId)
- }
-
- override fun onBind(intent: Intent): IBinder {
- return super.onBind(intent)
- }
-
- override fun onUnbind(intent: Intent): Boolean {
- return super.onUnbind(intent)
- }
-}
diff --git a/app/src/main/java/com/adlerosn/brasilfurfest/updater/startup/UpdaterActivity.kt b/app/src/main/java/com/adlerosn/brasilfurfest/updater/startup/UpdaterActivity.kt
index 5e6981a..d5b2a29 100644
--- a/app/src/main/java/com/adlerosn/brasilfurfest/updater/startup/UpdaterActivity.kt
+++ b/app/src/main/java/com/adlerosn/brasilfurfest/updater/startup/UpdaterActivity.kt
@@ -3,7 +3,7 @@ package com.adlerosn.brasilfurfest.updater.startup
import android.content.Context
import android.content.Intent
import android.os.Bundle
-import android.support.v7.app.AppCompatActivity
+import androidx.appcompat.app.AppCompatActivity
import android.view.Menu
import android.view.MenuItem
import android.view.View
@@ -32,7 +32,7 @@ class UpdaterActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- if(RemoteAssets.onlineApp.not() or RemoteAssets.selfUpdate){
+ if(RemoteAssets.onlineApp.not() or RemoteAssets.preloaded){
launchSplash()
return
}
diff --git a/app/src/main/res/layout/activity_asset_image_viewer.xml b/app/src/main/res/layout/activity_asset_image_viewer.xml
index c4ef4c7..26efeec 100644
--- a/app/src/main/res/layout/activity_asset_image_viewer.xml
+++ b/app/src/main/res/layout/activity_asset_image_viewer.xml
@@ -1,5 +1,5 @@
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_countdown.xml b/app/src/main/res/layout/activity_countdown.xml
index ca1c522..52c3524 100644
--- a/app/src/main/res/layout/activity_countdown.xml
+++ b/app/src/main/res/layout/activity_countdown.xml
@@ -1,5 +1,5 @@
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_developer.xml b/app/src/main/res/layout/activity_developer.xml
index 4513252..dba7cb7 100644
--- a/app/src/main/res/layout/activity_developer.xml
+++ b/app/src/main/res/layout/activity_developer.xml
@@ -1,5 +1,5 @@
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_event.xml b/app/src/main/res/layout/activity_event.xml
index 86a8bb7..35349b3 100644
--- a/app/src/main/res/layout/activity_event.xml
+++ b/app/src/main/res/layout/activity_event.xml
@@ -1,5 +1,5 @@
-
-
-
-
-
-
+
+
-
-
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_event_content.xml b/app/src/main/res/layout/activity_event_content.xml
index f54e677..d5284a5 100644
--- a/app/src/main/res/layout/activity_event_content.xml
+++ b/app/src/main/res/layout/activity_event_content.xml
@@ -1,5 +1,5 @@
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_event_content_keypair.xml b/app/src/main/res/layout/activity_event_content_keypair.xml
index dd67fd1..c1eb379 100644
--- a/app/src/main/res/layout/activity_event_content_keypair.xml
+++ b/app/src/main/res/layout/activity_event_content_keypair.xml
@@ -1,5 +1,5 @@
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_event_share.xml b/app/src/main/res/layout/activity_event_share.xml
index 753c6c7..a0e3e22 100644
--- a/app/src/main/res/layout/activity_event_share.xml
+++ b/app/src/main/res/layout/activity_event_share.xml
@@ -1,5 +1,5 @@
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_favorites.xml b/app/src/main/res/layout/activity_favorites.xml
index 0f1d1a9..91014a1 100644
--- a/app/src/main/res/layout/activity_favorites.xml
+++ b/app/src/main/res/layout/activity_favorites.xml
@@ -1,18 +1,18 @@
-
-
-
-
-
-
+
+
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_favorites_item.xml b/app/src/main/res/layout/activity_favorites_item.xml
index 5b90a5f..22ec553 100644
--- a/app/src/main/res/layout/activity_favorites_item.xml
+++ b/app/src/main/res/layout/activity_favorites_item.xml
@@ -1,5 +1,5 @@
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 5dd2444..0b15a20 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -1,9 +1,9 @@
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_room_party_previewer.xml b/app/src/main/res/layout/activity_room_party_previewer.xml
index 6558c18..45edfc7 100644
--- a/app/src/main/res/layout/activity_room_party_previewer.xml
+++ b/app/src/main/res/layout/activity_room_party_previewer.xml
@@ -1,9 +1,9 @@
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_schedule.xml b/app/src/main/res/layout/activity_schedule.xml
index 3392c9b..edd8814 100644
--- a/app/src/main/res/layout/activity_schedule.xml
+++ b/app/src/main/res/layout/activity_schedule.xml
@@ -1,5 +1,5 @@
-
-
-
-
+
-
-
-
-
-
-
+
+
-
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_search_filter.xml b/app/src/main/res/layout/activity_search_filter.xml
index 1f60f26..ed2c0c1 100644
--- a/app/src/main/res/layout/activity_search_filter.xml
+++ b/app/src/main/res/layout/activity_search_filter.xml
@@ -1,5 +1,5 @@
-
-
-
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_search_filter_circle.xml b/app/src/main/res/layout/activity_search_filter_circle.xml
index 472e9b1..8607cfa 100644
--- a/app/src/main/res/layout/activity_search_filter_circle.xml
+++ b/app/src/main/res/layout/activity_search_filter_circle.xml
@@ -1,5 +1,5 @@
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_search_filter_criteria_add.xml b/app/src/main/res/layout/activity_search_filter_criteria_add.xml
index a53044e..0fc7936 100644
--- a/app/src/main/res/layout/activity_search_filter_criteria_add.xml
+++ b/app/src/main/res/layout/activity_search_filter_criteria_add.xml
@@ -1,5 +1,5 @@
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_search_filter_criteria_item.xml b/app/src/main/res/layout/activity_search_filter_criteria_item.xml
index f9e7141..c5b6b78 100644
--- a/app/src/main/res/layout/activity_search_filter_criteria_item.xml
+++ b/app/src/main/res/layout/activity_search_filter_criteria_item.xml
@@ -1,5 +1,5 @@
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_search_filter_criteria_itemdialog.xml b/app/src/main/res/layout/activity_search_filter_criteria_itemdialog.xml
index 56bc75c..1ceacdd 100644
--- a/app/src/main/res/layout/activity_search_filter_criteria_itemdialog.xml
+++ b/app/src/main/res/layout/activity_search_filter_criteria_itemdialog.xml
@@ -1,5 +1,5 @@
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_search_filter_item.xml b/app/src/main/res/layout/activity_search_filter_item.xml
index 9dc80c3..011af48 100644
--- a/app/src/main/res/layout/activity_search_filter_item.xml
+++ b/app/src/main/res/layout/activity_search_filter_item.xml
@@ -1,5 +1,5 @@
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_software_licenses.xml b/app/src/main/res/layout/activity_software_licenses.xml
index f0cde24..03164ce 100644
--- a/app/src/main/res/layout/activity_software_licenses.xml
+++ b/app/src/main/res/layout/activity_software_licenses.xml
@@ -1,13 +1,13 @@
-
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_software_licenses_item.xml b/app/src/main/res/layout/activity_software_licenses_item.xml
index 6f07941..aadf2fb 100644
--- a/app/src/main/res/layout/activity_software_licenses_item.xml
+++ b/app/src/main/res/layout/activity_software_licenses_item.xml
@@ -1,5 +1,5 @@
-
@@ -25,4 +25,4 @@
android:textSize="12sp"
android:text="TextView" />
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_splash.xml b/app/src/main/res/layout/activity_splash.xml
index 0ce7acc..1339b3f 100644
--- a/app/src/main/res/layout/activity_splash.xml
+++ b/app/src/main/res/layout/activity_splash.xml
@@ -1,5 +1,5 @@
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_updater.xml b/app/src/main/res/layout/activity_updater.xml
index ae3057a..0095e13 100644
--- a/app/src/main/res/layout/activity_updater.xml
+++ b/app/src/main/res/layout/activity_updater.xml
@@ -1,5 +1,5 @@
-
-
-
-
+
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/dialogview_schedule_registration_tier.xml b/app/src/main/res/layout/dialogview_schedule_registration_tier.xml
index 59fdfaa..b088a0b 100644
--- a/app/src/main/res/layout/dialogview_schedule_registration_tier.xml
+++ b/app/src/main/res/layout/dialogview_schedule_registration_tier.xml
@@ -1,5 +1,5 @@
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/dialogview_schedule_registration_tiers.xml b/app/src/main/res/layout/dialogview_schedule_registration_tiers.xml
index c73ea8e..871b20c 100644
--- a/app/src/main/res/layout/dialogview_schedule_registration_tiers.xml
+++ b/app/src/main/res/layout/dialogview_schedule_registration_tiers.xml
@@ -1,5 +1,5 @@
-
@@ -18,4 +18,4 @@
android:layout_height="wrap_content"
android:orientation="vertical" />
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_rules_item.xml b/app/src/main/res/layout/fragment_rules_item.xml
index 48364ed..ae925e2 100644
--- a/app/src/main/res/layout/fragment_rules_item.xml
+++ b/app/src/main/res/layout/fragment_rules_item.xml
@@ -1,5 +1,5 @@
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_rules_list.xml b/app/src/main/res/layout/fragment_rules_list.xml
index 44e4fd5..c99e8a4 100644
--- a/app/src/main/res/layout/fragment_rules_list.xml
+++ b/app/src/main/res/layout/fragment_rules_list.xml
@@ -1,12 +1,12 @@
-
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_schedule_day.xml b/app/src/main/res/layout/fragment_schedule_day.xml
index 1fccd0b..5339404 100644
--- a/app/src/main/res/layout/fragment_schedule_day.xml
+++ b/app/src/main/res/layout/fragment_schedule_day.xml
@@ -1,12 +1,12 @@
-
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_schedule_summary.xml b/app/src/main/res/layout/fragment_schedule_summary.xml
index d8ee4ef..1892718 100644
--- a/app/src/main/res/layout/fragment_schedule_summary.xml
+++ b/app/src/main/res/layout/fragment_schedule_summary.xml
@@ -1,5 +1,5 @@
-
-
-
+
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_schedule_summary_countdown.xml b/app/src/main/res/layout/fragment_schedule_summary_countdown.xml
index 59a64e2..9115b5b 100644
--- a/app/src/main/res/layout/fragment_schedule_summary_countdown.xml
+++ b/app/src/main/res/layout/fragment_schedule_summary_countdown.xml
@@ -1,5 +1,5 @@
-
@@ -55,4 +55,4 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_schedule_summary_eventitem.xml b/app/src/main/res/layout/fragment_schedule_summary_eventitem.xml
index 54851e0..f46f97b 100644
--- a/app/src/main/res/layout/fragment_schedule_summary_eventitem.xml
+++ b/app/src/main/res/layout/fragment_schedule_summary_eventitem.xml
@@ -1,5 +1,5 @@
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_schedule_summary_r621violation.xml b/app/src/main/res/layout/fragment_schedule_summary_r621violation.xml
index 4d91eec..22e87d8 100644
--- a/app/src/main/res/layout/fragment_schedule_summary_r621violation.xml
+++ b/app/src/main/res/layout/fragment_schedule_summary_r621violation.xml
@@ -1,5 +1,5 @@
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_socialmedia_item.xml b/app/src/main/res/layout/fragment_socialmedia_item.xml
index b4c277d..8246bac 100644
--- a/app/src/main/res/layout/fragment_socialmedia_item.xml
+++ b/app/src/main/res/layout/fragment_socialmedia_item.xml
@@ -1,5 +1,5 @@
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_socialmedia_list.xml b/app/src/main/res/layout/fragment_socialmedia_list.xml
index 82feaca..338d546 100644
--- a/app/src/main/res/layout/fragment_socialmedia_list.xml
+++ b/app/src/main/res/layout/fragment_socialmedia_list.xml
@@ -1,5 +1,5 @@
-
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/listitem_schedule_eventlist.xml b/app/src/main/res/layout/listitem_schedule_eventlist.xml
index eee9c6b..bebfd77 100644
--- a/app/src/main/res/layout/listitem_schedule_eventlist.xml
+++ b/app/src/main/res/layout/listitem_schedule_eventlist.xml
@@ -1,5 +1,5 @@
-
@@ -8,4 +8,4 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" />
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/listitem_schedule_eventlist_subitem_header.xml b/app/src/main/res/layout/listitem_schedule_eventlist_subitem_header.xml
index 26f7bbc..b690230 100644
--- a/app/src/main/res/layout/listitem_schedule_eventlist_subitem_header.xml
+++ b/app/src/main/res/layout/listitem_schedule_eventlist_subitem_header.xml
@@ -1,5 +1,5 @@
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/listitem_schedule_eventlist_subitem_item.xml b/app/src/main/res/layout/listitem_schedule_eventlist_subitem_item.xml
index 72326b6..4825fc4 100644
--- a/app/src/main/res/layout/listitem_schedule_eventlist_subitem_item.xml
+++ b/app/src/main/res/layout/listitem_schedule_eventlist_subitem_item.xml
@@ -1,5 +1,5 @@
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/oldpart_schedule_day.xml b/app/src/main/res/layout/oldpart_schedule_day.xml
index fa53fb5..4b77fee 100644
--- a/app/src/main/res/layout/oldpart_schedule_day.xml
+++ b/app/src/main/res/layout/oldpart_schedule_day.xml
@@ -1,5 +1,5 @@
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/oldpart_schedule_edition.xml b/app/src/main/res/layout/oldpart_schedule_edition.xml
index 484255e..f7fd7ee 100644
--- a/app/src/main/res/layout/oldpart_schedule_edition.xml
+++ b/app/src/main/res/layout/oldpart_schedule_edition.xml
@@ -1,5 +1,5 @@
-
@@ -8,4 +8,4 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" />
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/oldpart_schedule_eventcard.xml b/app/src/main/res/layout/oldpart_schedule_eventcard.xml
index 409b1c5..e3de814 100644
--- a/app/src/main/res/layout/oldpart_schedule_eventcard.xml
+++ b/app/src/main/res/layout/oldpart_schedule_eventcard.xml
@@ -1,5 +1,5 @@
-
@@ -68,4 +68,4 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/oldpart_schedule_eventlistitem.xml b/app/src/main/res/layout/oldpart_schedule_eventlistitem.xml
index be389b1..e21738d 100644
--- a/app/src/main/res/layout/oldpart_schedule_eventlistitem.xml
+++ b/app/src/main/res/layout/oldpart_schedule_eventlistitem.xml
@@ -1,5 +1,5 @@
-
@@ -60,4 +60,4 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/oldpart_schedule_hour.xml b/app/src/main/res/layout/oldpart_schedule_hour.xml
index d469cc7..412222f 100644
--- a/app/src/main/res/layout/oldpart_schedule_hour.xml
+++ b/app/src/main/res/layout/oldpart_schedule_hour.xml
@@ -1,5 +1,5 @@
-
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/oldpart_schedule_hour_intention.xml b/app/src/main/res/layout/oldpart_schedule_hour_intention.xml
index 371b8bf..4af4c9b 100644
--- a/app/src/main/res/layout/oldpart_schedule_hour_intention.xml
+++ b/app/src/main/res/layout/oldpart_schedule_hour_intention.xml
@@ -1,5 +1,5 @@
-
@@ -50,4 +50,4 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/peek_event_item.xml b/app/src/main/res/layout/peek_event_item.xml
index 7371d99..a495783 100644
--- a/app/src/main/res/layout/peek_event_item.xml
+++ b/app/src/main/res/layout/peek_event_item.xml
@@ -1,5 +1,5 @@
-
-
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 8753011..26a8159 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -80,6 +80,7 @@
Software licenses
Developer
Default Channel
+ Announcements Channel
This app was lazily brought to you by:
Adler Neves
Mobile and web developer
diff --git a/build.gradle b/build.gradle
index 1beabe2..67daaa9 100644
--- a/build.gradle
+++ b/build.gradle
@@ -10,7 +10,7 @@ buildscript {
maven { url 'https://oss.jfrog.org/artifactory/oss-snapshot-local' }
}
dependencies {
- classpath 'com.android.tools.build:gradle:3.5.0-beta03'
+ classpath 'com.android.tools.build:gradle:3.5.0-beta04'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
// NOTE: Do not place your application dependencies here; they belong
diff --git a/gradle.properties b/gradle.properties
index ba9bcd7..06275ea 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -11,4 +11,6 @@
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
#Tue May 07 18:24:42 BRT 2019
+android.enableJetifier=true
+android.useAndroidX=true
org.gradle.jvmargs=-Xmx2048M -Dkotlin.daemon.jvm.options\="-Xmx2048M"
diff --git a/webstandaloneprep/.gitignore b/webstandaloneprep/.gitignore
index 6a3b016..870870f 100644
--- a/webstandaloneprep/.gitignore
+++ b/webstandaloneprep/.gitignore
@@ -1,2 +1,4 @@
out/**
out
+__pycache__
+__pycache__/**
diff --git a/webstandaloneprep/config.py b/webstandaloneprep/config.py
new file mode 100644
index 0000000..c6328f3
--- /dev/null
+++ b/webstandaloneprep/config.py
@@ -0,0 +1,4 @@
+#!/usr/bin/env python3
+# -*- encoding: utf-8 -*-
+
+project = 'bff'
diff --git a/webstandaloneprep/main.py b/webstandaloneprep/main.py
index 6a6f7dc..f1527e8 100755
--- a/webstandaloneprep/main.py
+++ b/webstandaloneprep/main.py
@@ -1,5 +1,7 @@
#!/usr/bin/env python3
+# -*- encoding: utf-8 -*-
+from config import project
import os
os.system("rm -rf out")
@@ -13,12 +15,12 @@ import re
mediafinder = re.compile(r'''"/media/([^"]*)"''')
def check_image(file):
- os.system("wget -N https://bff-ws.adlerneves.com/media/{0} -O out/{0}".format(file))
+ os.system("wget -N https://events.furmeet.app/media/{0} -O out/{0}".format(file))
def download_json(dataurl):
return json.loads(urllib.request.urlopen(dataurl).read())
-minified = download_json("https://bff-ws.adlerneves.com/api/conventions/bff/minified.json")
+minified = download_json("https://events.furmeet.app/api/conventions/{0}/minified.json".format(project))
minified['editions'] = [edition for edition in minified['editions'] if edition['uuid']==minified['featured']]