Replaced recurring background fetch with Firebase solution including broadcast function

This commit is contained in:
Deniz Düzgören
2019-08-12 13:10:05 +02:00
parent eb758ed077
commit 29e03a4179
8 changed files with 98 additions and 64 deletions
@@ -0,0 +1,11 @@
package com.denizd.substitutionplan
import com.google.firebase.messaging.FirebaseMessagingService
import com.google.firebase.messaging.RemoteMessage
class FBNotificationService : FirebaseMessagingService() {
override fun onMessageReceived(p0: RemoteMessage?) {
DataFetcher(true, true, true, this, application, null).execute()
}
}
@@ -9,8 +9,10 @@ import android.content.SharedPreferences
import android.os.Build
import android.os.Bundle
import android.preference.PreferenceManager
import android.util.Log
import android.view.*
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.app.AppCompatDelegate
@@ -22,6 +24,8 @@ import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.appbar.AppBarLayout
import com.google.android.material.bottomnavigation.BottomNavigationView
import com.google.android.material.snackbar.Snackbar
import com.google.firebase.FirebaseApp
import com.google.firebase.messaging.FirebaseMessaging
import com.jaredrummler.android.device.DeviceName
import java.lang.IllegalArgumentException
import java.util.*
@@ -51,6 +55,15 @@ class Main : AppCompatActivity(R.layout.app_bar_main) {
edit.putInt("launchDev", prefs.getInt("launchDev", 0) + 1)
edit.apply()
FirebaseApp.initializeApp(context)
if (prefs.getBoolean("notif", true)) {
FirebaseMessaging.getInstance().subscribeToTopic("substitutions-android")
} else {
FirebaseMessaging.getInstance().unsubscribeFromTopic("substitutions-android")
}
FirebaseMessaging.getInstance().subscribeToTopic("substitutions-broadcast")
val appbarlayout = findViewById<AppBarLayout>(R.id.appbarlayout)
val toolbarTxt = findViewById<TextView>(R.id.toolbarTxt)
val bottomNav = findViewById<BottomNavigationView>(R.id.bottom_nav)
@@ -209,10 +222,6 @@ class Main : AppCompatActivity(R.layout.app_bar_main) {
}
}
}
if (prefs.getBoolean("notif", true)) {
notificationJob()
}
}
}
@@ -240,15 +249,4 @@ class Main : AppCompatActivity(R.layout.app_bar_main) {
supportFragmentManager.beginTransaction().replace(R.id.fragment_container, fragment).setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN).commit()
return true
}
private fun notificationJob() {
val componentName = ComponentName(this, NotificationService::class.java)
val info = JobInfo.Builder(42, componentName)
.setRequiresCharging(false)
.setPersisted(true)
.setPeriodic(900000)
.build()
val scheduler = getSystemService(JOB_SCHEDULER_SERVICE) as JobScheduler
scheduler.schedule(info)
}
}
@@ -1,44 +0,0 @@
package com.denizd.substitutionplan
import android.app.job.JobParameters
import android.app.job.JobService
import android.content.Context
import android.net.ConnectivityManager
import android.preference.PreferenceManager
class NotificationService : JobService() {
private var jobCancelled = false
private val context = this
override fun onStartJob(params: JobParameters): Boolean {
doBackgroundWork(params)
return true
}
override fun onStopJob(params: JobParameters?): Boolean {
jobCancelled = true
return true
}
private fun doBackgroundWork(params: JobParameters) {
val prefs = PreferenceManager.getDefaultSharedPreferences(context)
val edit = prefs.edit()
val connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val networkStatus = connectivityManager.activeNetworkInfo
Thread(Runnable {
if (!prefs.getBoolean("notif", false) || jobCancelled || networkStatus == null) {
jobFinished(params, false)
return@Runnable
} else {
edit.putInt("notificationTestNumberDev", prefs.getInt("notificationTestNumberDev", 0) + 1).apply()
try {
DataFetcher(true, true, true, context, application, null).execute()
} catch (ignored: Exception) {}
jobFinished(params, false)
}
}).start()
}
}
@@ -24,6 +24,7 @@ import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.bottomnavigation.BottomNavigationView
import com.google.android.material.button.MaterialButton
import com.google.android.material.textfield.TextInputEditText
import com.google.firebase.messaging.FirebaseMessaging
import com.jaredrummler.android.device.DeviceName
import kotlin.collections.ArrayList
@@ -231,6 +232,11 @@ class SettingsFragment : Fragment(R.layout.content_settings), View.OnClickListen
}
R.id.switchNotifications -> {
edit.putBoolean("notif", isChecked)
if (isChecked) {
FirebaseMessaging.getInstance().subscribeToTopic("substitutions-android")
} else {
FirebaseMessaging.getInstance().unsubscribeFromTopic("substitutions-android")
}
}
R.id.switchDefaultPlan -> {
edit.putBoolean("defaultPersonalised", isChecked)