Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
## 1.0.5 - 2017-09-11

- Convert to Kotlin library.

## 1.0.4 - 2017-09-11

- Minor tweaks.
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ A simple utility class that allows you to track when your Android application ha

```groovy

compile 'com.miguelgaeta.android-backgrounded:backgrounded:1.0.4'
compile 'com.miguelgaeta.android-backgrounded:backgrounded:1.0.5'

```

Expand Down
17 changes: 10 additions & 7 deletions app/build.gradle
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'

android {
compileSdkVersion 26
buildToolsVersion '25.0.0'
compileSdkVersion rootProject.ext.target_sdk_version
buildToolsVersion rootProject.ext.build_tools_version

defaultConfig {
applicationId "com.miguelgaeta.android_backgrounded"
minSdkVersion 14
targetSdkVersion 26
versionCode 1
versionName "1.0"

minSdkVersion rootProject.ext.min_sdk_version
targetSdkVersion rootProject.ext.target_sdk_version
}
buildTypes {
release {
Expand All @@ -22,10 +22,13 @@ android {
dependencies {

//noinspection GradleDynamicVersion
compile 'com.android.support:appcompat-v7:26+'
compile "com.android.support:appcompat-v7:$target_sdk_version+"

//noinspection GradleDynamicVersion
compile 'io.reactivex:rxjava:1.+'

//noinspection GradleDynamicVersion
compile 'org.jetbrains.kotlin:kotlin-stdlib-jre7:1.+'

compile project(':backgrounded')
}
29 changes: 0 additions & 29 deletions app/src/main/java/com/miguelgaeta/AppActivity.java

This file was deleted.

24 changes: 24 additions & 0 deletions app/src/main/java/com/miguelgaeta/AppActivity.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.miguelgaeta

import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import android.util.Log
import com.miguelgaeta.backgrounded.Backgrounded

class AppActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

Backgrounded.init(application)
Backgrounded.get().subscribe { backgrounded -> Log.e("Test", "Backgrounded status: " + backgrounded) }

Log.e("Test", "Currently backgrounded: " + Backgrounded.isBackgrounded())
}

override fun onDestroy() {
super.onDestroy()

Backgrounded.destroy(application)
}
}
12 changes: 8 additions & 4 deletions backgrounded/build.gradle
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'

android {
compileSdkVersion 26
buildToolsVersion '25.0.0'
compileSdkVersion rootProject.ext.target_sdk_version
buildToolsVersion rootProject.ext.build_tools_version

defaultConfig {
minSdkVersion 14
targetSdkVersion 26
minSdkVersion rootProject.ext.min_sdk_version
targetSdkVersion rootProject.ext.target_sdk_version
}

buildTypes {
Expand All @@ -21,6 +22,9 @@ dependencies {

//noinspection GradleDynamicVersion
provided 'io.reactivex:rxjava:1.+'

//noinspection GradleDynamicVersion
provided "org.jetbrains.kotlin:kotlin-stdlib-jre7:1.+"
}

apply from: '../build.release-aar.gradle'

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
package com.miguelgaeta.backgrounded

import android.app.Activity
import android.app.Application
import android.os.Bundle
import android.util.Log
import rx.Observable
import rx.Subscription
import rx.subjects.BehaviorSubject
import rx.subjects.SerializedSubject
import java.util.concurrent.TimeUnit

/**
* Utility class that uses [Application.ActivityLifecycleCallbacks] to heuristically
* track whether or not the current application is in the foreground or background.
*/
object Backgrounded {

private val lifecycle: Lifecycle = Lifecycle()

@JvmStatic fun init(application: Application?) {
application?.registerActivityLifecycleCallbacks(lifecycle)
}

@JvmStatic fun destroy(application: Application?) {
application?.unregisterActivityLifecycleCallbacks(lifecycle)
}

@JvmStatic fun get(): Observable<Boolean> =
lifecycle.emitter.distinctUntilChanged()

@JvmStatic fun isBackgrounded(): Boolean =
lifecycle.emitter.toBlocking().mostRecent(true).iterator().next()

private class Lifecycle internal constructor() : Application.ActivityLifecycleCallbacks {

internal val emitter = SerializedSubject(BehaviorSubject.create<Boolean>())
internal var subscription: Subscription? = null

init {
checkBackgrounded(DELAY_SHORT)
}

override fun onActivityCreated(activity: Activity, bundle: Bundle) {
}

override fun onActivityStarted(activity: Activity) {
}

override fun onActivityResumed(activity: Activity) {
subscription?.unsubscribe()

emitter.onNext(false)
}

override fun onActivityPaused(activity: Activity) {
checkBackgrounded(DELAY)
}

override fun onActivityStopped(activity: Activity) {
}

override fun onActivitySaveInstanceState(activity: Activity, bundle: Bundle) {
}

override fun onActivityDestroyed(activity: Activity) {
}

private fun checkBackgrounded(delay: Long) {
subscription = Observable
.just(true)
.delay(delay, TimeUnit.MILLISECONDS)
.subscribe(emitter::onNext) { Log.e(TAG, TAG_ERROR) }
}

companion object {

private val DELAY = 2000L
private val DELAY_SHORT = 500L

private val TAG = "Backgrounded"
private val TAG_ERROR = "Subscription error in backgrounded delay."
}
}
}
10 changes: 9 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
@@ -1,9 +1,17 @@
buildscript {
ext.kotlin_version = '1.1.51'
ext.build_tools_version = '26.0.1'
ext.gradle_tools_version = '2.3.3'
ext.min_sdk_version = 14
ext.target_sdk_version = 26

repositories {
jcenter()
}

dependencies {
classpath 'com.android.tools.build:gradle:2.3.3'
classpath "com.android.tools.build:gradle:$gradle_tools_version"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}

Expand Down
Loading