diff --git a/app/build.gradle b/app/build.gradle index 90fa5ce..abec51e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ android { applicationId "com.denizd.substitutionplan" minSdkVersion 21 targetSdkVersion 28 - versionCode 22 - versionName "2.1.5" + versionCode 23 + versionName "2.2.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { @@ -35,6 +35,8 @@ dependencies { implementation 'com.google.android.material:material:1.1.0-alpha09' implementation 'com.android.support:customtabs:28.0.0' + implementation 'com.google.firebase:firebase-messaging:19.0.1' + // implementation 'androidx.core:core-ktx:1.0.2' implementation 'com.jaredrummler:android-device-names:1.1.8' @@ -55,3 +57,5 @@ dependencies { repositories { mavenCentral() } + +apply plugin: 'com.google.gms.google-services' \ No newline at end of file diff --git a/app/google-services.json b/app/google-services.json new file mode 100644 index 0000000..d86698e --- /dev/null +++ b/app/google-services.json @@ -0,0 +1,47 @@ +{ + "project_info": { + "project_number": "90133755549", + "firebase_url": "https://avh-plan.firebaseio.com", + "project_id": "avh-plan", + "storage_bucket": "avh-plan.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:90133755549:android:8ac337c5a1500393", + "android_client_info": { + "package_name": "com.denizd.substitutionplan" + } + }, + "oauth_client": [ + { + "client_id": "90133755549-vs0k1khnuqc7efq2o1kfuikmoaam1j07.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyC0fZvAhNlKfZ9-iU3lZ0Te8C4s8cT9F38" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "90133755549-vs0k1khnuqc7efq2o1kfuikmoaam1j07.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "90133755549-74enm9fefgrj5v5009c11194qi71m09f.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "denizd.AvH-Plan" + } + } + ] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index dc0165c..1b3c1b5 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -37,9 +37,20 @@ + android:name=".FBNotificationService" + android:exported="false"> + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/denizd/substitutionplan/FBNotificationService.kt b/app/src/main/java/com/denizd/substitutionplan/FBNotificationService.kt new file mode 100644 index 0000000..01e895a --- /dev/null +++ b/app/src/main/java/com/denizd/substitutionplan/FBNotificationService.kt @@ -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() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/denizd/substitutionplan/Main.kt b/app/src/main/java/com/denizd/substitutionplan/Main.kt index a50f722..055ca03 100644 --- a/app/src/main/java/com/denizd/substitutionplan/Main.kt +++ b/app/src/main/java/com/denizd/substitutionplan/Main.kt @@ -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(R.id.appbarlayout) val toolbarTxt = findViewById(R.id.toolbarTxt) val bottomNav = findViewById(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) - } } \ No newline at end of file diff --git a/app/src/main/java/com/denizd/substitutionplan/NotificationService.kt b/app/src/main/java/com/denizd/substitutionplan/NotificationService.kt deleted file mode 100644 index a96f0ca..0000000 --- a/app/src/main/java/com/denizd/substitutionplan/NotificationService.kt +++ /dev/null @@ -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() - } -} \ No newline at end of file diff --git a/app/src/main/java/com/denizd/substitutionplan/SettingsFragment.kt b/app/src/main/java/com/denizd/substitutionplan/SettingsFragment.kt index b39f6c6..8d7c37c 100644 --- a/app/src/main/java/com/denizd/substitutionplan/SettingsFragment.kt +++ b/app/src/main/java/com/denizd/substitutionplan/SettingsFragment.kt @@ -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) diff --git a/build.gradle b/build.gradle index 9978661..6f8611f 100644 --- a/build.gradle +++ b/build.gradle @@ -10,6 +10,7 @@ buildscript { dependencies { classpath 'com.android.tools.build:gradle:3.5.0-beta02' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + classpath 'com.google.gms:google-services:4.3.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files