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']]