mirror of
https://github.com/afollestad/nock-nock.git
synced 2025-04-20 19:45:17 +00:00
Manage 'app is open' state from the Application class
This commit is contained in:
parent
eeaa68dbe2
commit
999502802a
6 changed files with 87 additions and 13 deletions
|
@ -8,7 +8,7 @@
|
|||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
|
||||
|
||||
<application
|
||||
android:name=".App"
|
||||
android:name=".NockNockApp"
|
||||
android:allowBackup="true"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:label="@string/app_name"
|
||||
|
|
38
app/src/main/java/com/afollestad/nocknock/AppExt.kt
Normal file
38
app/src/main/java/com/afollestad/nocknock/AppExt.kt
Normal file
|
@ -0,0 +1,38 @@
|
|||
/*
|
||||
* Licensed under Apache-2.0
|
||||
*
|
||||
* Designed and developed by Aidan Follestad (@afollestad)
|
||||
*/
|
||||
package com.afollestad.nocknock
|
||||
|
||||
import android.app.Activity
|
||||
import android.app.Application
|
||||
import android.app.Application.ActivityLifecycleCallbacks
|
||||
import android.os.Bundle
|
||||
|
||||
typealias ActivityLifeChange = (activity: Activity, resumed: Boolean) -> Unit
|
||||
|
||||
/** @author Aidan Follestad (afollestad) */
|
||||
fun Application.onActivityLifeChange(cb: ActivityLifeChange) {
|
||||
registerActivityLifecycleCallbacks(object : ActivityLifecycleCallbacks {
|
||||
override fun onActivitySaveInstanceState(
|
||||
activity: Activity?,
|
||||
outState: Bundle?
|
||||
) = Unit
|
||||
|
||||
override fun onActivityPaused(activity: Activity) = cb(activity, false)
|
||||
|
||||
override fun onActivityResumed(activity: Activity) = cb(activity, true)
|
||||
|
||||
override fun onActivityStarted(activity: Activity) = Unit
|
||||
|
||||
override fun onActivityDestroyed(activity: Activity) = Unit
|
||||
|
||||
override fun onActivityStopped(activity: Activity) = Unit
|
||||
|
||||
override fun onActivityCreated(
|
||||
activity: Activity?,
|
||||
savedInstanceState: Bundle?
|
||||
) = Unit
|
||||
})
|
||||
}
|
|
@ -6,23 +6,35 @@
|
|||
package com.afollestad.nocknock
|
||||
|
||||
import android.app.Application
|
||||
import android.app.NotificationManager
|
||||
import android.app.job.JobScheduler
|
||||
import android.content.Context
|
||||
import android.util.Log
|
||||
import com.afollestad.nocknock.di.AppComponent
|
||||
import com.afollestad.nocknock.di.DaggerAppComponent
|
||||
import com.afollestad.nocknock.engine.statuscheck.BootReceiver
|
||||
import com.afollestad.nocknock.engine.statuscheck.CheckStatusJob
|
||||
import com.afollestad.nocknock.notifications.NockNotificationManager
|
||||
import com.afollestad.nocknock.ui.AddSiteActivity
|
||||
import com.afollestad.nocknock.ui.MainActivity
|
||||
import com.afollestad.nocknock.ui.ViewSiteActivity
|
||||
import com.afollestad.nocknock.utilities.Injector
|
||||
import com.afollestad.nocknock.utilities.ext.systemService
|
||||
import okhttp3.OkHttpClient
|
||||
import javax.inject.Inject
|
||||
|
||||
/** @author Aidan Follestad (afollestad) */
|
||||
class App : Application(), Injector {
|
||||
class NockNockApp : Application(), Injector {
|
||||
|
||||
lateinit var appComponent: AppComponent
|
||||
companion object {
|
||||
private fun log(message: String) {
|
||||
if (BuildConfig.DEBUG) {
|
||||
Log.d("NockNockApp", message)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private lateinit var appComponent: AppComponent
|
||||
@Inject lateinit var nockNotificationManager: NockNotificationManager
|
||||
|
||||
private var resumedActivities: Int = 0
|
||||
|
||||
override fun onCreate() {
|
||||
super.onCreate()
|
||||
|
@ -36,15 +48,26 @@ class App : Application(), Injector {
|
|||
chain.proceed(request)
|
||||
}
|
||||
.build()
|
||||
val jobScheduler = getSystemService(Context.JOB_SCHEDULER_SERVICE) as JobScheduler
|
||||
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
|
||||
|
||||
appComponent = DaggerAppComponent.builder()
|
||||
.application(this)
|
||||
.okHttpClient(okHttpClient)
|
||||
.jobScheduler(jobScheduler)
|
||||
.notificationManager(notificationManager)
|
||||
.jobScheduler(systemService(JOB_SCHEDULER_SERVICE))
|
||||
.notificationManager(systemService(NOTIFICATION_SERVICE))
|
||||
.build()
|
||||
appComponent.inject(this)
|
||||
|
||||
onActivityLifeChange { activity, resumed ->
|
||||
if (resumed) {
|
||||
resumedActivities++
|
||||
log("Activity resumed: $activity, resumedActivities = $resumedActivities")
|
||||
} else {
|
||||
resumedActivities--
|
||||
log("Activity paused: $activity, resumedActivities = $resumedActivities")
|
||||
}
|
||||
check(resumedActivities >= 0) { "resumedActivities can't go below 0." }
|
||||
nockNotificationManager.setIsAppOpen(resumedActivities > 0)
|
||||
}
|
||||
}
|
||||
|
||||
override fun injectInto(target: Any) = when (target) {
|
|
@ -8,6 +8,7 @@ package com.afollestad.nocknock.di
|
|||
import android.app.Application
|
||||
import android.app.NotificationManager
|
||||
import android.app.job.JobScheduler
|
||||
import com.afollestad.nocknock.NockNockApp
|
||||
import com.afollestad.nocknock.engine.EngineModule
|
||||
import com.afollestad.nocknock.engine.statuscheck.BootReceiver
|
||||
import com.afollestad.nocknock.engine.statuscheck.CheckStatusJob
|
||||
|
@ -33,6 +34,8 @@ import javax.inject.Singleton
|
|||
)
|
||||
interface AppComponent {
|
||||
|
||||
fun inject(app: NockNockApp)
|
||||
|
||||
fun inject(activity: MainActivity)
|
||||
|
||||
fun inject(activity: ViewSiteActivity)
|
||||
|
|
|
@ -127,8 +127,6 @@ class MainActivity : AppCompatActivity(), View.OnClickListener {
|
|||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
notificationManager.setIsAppOpen(true)
|
||||
|
||||
val filter = IntentFilter().apply {
|
||||
addAction(ACTION_STATUS_UPDATE)
|
||||
}
|
||||
|
@ -139,7 +137,6 @@ class MainActivity : AppCompatActivity(), View.OnClickListener {
|
|||
|
||||
override fun onPause() {
|
||||
super.onPause()
|
||||
notificationManager.setIsAppOpen(false)
|
||||
safeUnregisterReceiver(intentReceiver)
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
/*
|
||||
* Licensed under Apache-2.0
|
||||
*
|
||||
* Designed and developed by Aidan Follestad (@afollestad)
|
||||
*/
|
||||
package com.afollestad.nocknock.utilities.ext
|
||||
|
||||
import android.content.Context
|
||||
|
||||
/** @author Aidan Follestad (afollestad) */
|
||||
inline fun <reified T> Context.systemService(name: String): T {
|
||||
return getSystemService(name) as T
|
||||
}
|
Loading…
Add table
Reference in a new issue