Skip to content

Commit 99c8db2

Browse files
committed
AppNotifier 1.2.1 (release 1)
* Fix issues with notifications being generated for apps that weren't actually updated
1 parent 59a1c42 commit 99c8db2

File tree

4 files changed

+40
-14
lines changed

4 files changed

+40
-14
lines changed

app/build.gradle

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ apply plugin: 'kotlin-kapt'
66
ext {
77
coroutines_version = "1.3.3"
88
room_version = "2.2.3"
9-
dagger_version = "2.25.4"
9+
dagger_version = "2.26"
1010
}
1111

1212
repositories {
@@ -22,8 +22,8 @@ android {
2222

2323
minSdkVersion 21
2424
targetSdkVersion 29
25-
versionCode 6
26-
versionName "1.2"
25+
versionCode 7
26+
versionName "1.2.1"
2727

2828
resConfigs "en", "fr", "de", "sv"
2929
vectorDrawables.generatedDensities = []
@@ -80,7 +80,6 @@ dependencies {
8080
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutines_version"
8181

8282
implementation 'androidx.appcompat:appcompat:1.1.0'
83-
implementation "androidx.core:core-ktx:1.1.0"
8483
implementation 'androidx.preference:preference-ktx:1.1.0'
8584
implementation "androidx.room:room-runtime:$room_version"
8685
implementation "androidx.room:room-rxjava2:$room_version"

app/src/main/java/com/farmerbb/appnotifier/AppNotifierService.kt

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,31 +17,37 @@ package com.farmerbb.appnotifier
1717

1818
import android.app.PendingIntent
1919
import android.app.Service
20-
import android.content.BroadcastReceiver
21-
import android.content.Context
22-
import android.content.Intent
23-
import android.content.IntentFilter
20+
import android.content.*
2421
import android.os.Build
2522
import android.provider.Settings
2623
import androidx.core.app.NotificationCompat
2724
import androidx.core.content.ContextCompat
25+
import androidx.core.content.pm.PackageInfoCompat
2826
import com.farmerbb.appnotifier.room.AppUpdateDAO
2927
import javax.inject.Inject
3028

3129
class AppNotifierService: Service() {
3230

3331
@Inject lateinit var controller: NotificationController
3432
@Inject lateinit var dao: AppUpdateDAO
33+
@Inject lateinit var pref: SharedPreferences
3534

3635
init {
3736
AppNotifierApplication.component.inject(this)
3837
}
3938

39+
private val packages = mutableMapOf<String, Long>()
40+
4041
private val packageAddedReceiver = object: BroadcastReceiver() {
4142
override fun onReceive(context: Context, intent: Intent) {
4243
val packageName = intent.dataString?.removePrefix("package:").orEmpty()
4344

4445
getPackageInfoSafely(packageName, dao)?.let {
46+
val versionCode = PackageInfoCompat.getLongVersionCode(it)
47+
if(versionCode <= packages[packageName] ?: 0) return@let
48+
49+
packages[packageName] = versionCode
50+
4551
if(intent.getBooleanExtra(Intent.EXTRA_REPLACING, false))
4652
controller.handleAppUpdateNotification(it)
4753
else
@@ -55,11 +61,21 @@ class AppNotifierService: Service() {
5561
if(intent.getBooleanExtra(Intent.EXTRA_REPLACING, false)) return
5662

5763
val packageName = intent.dataString?.removePrefix("package:").orEmpty()
64+
packages.remove(packageName)
5865
controller.cancelAppInstallNotification(packageName)
5966
}
6067
}
6168

6269
override fun onCreate() {
70+
val packageInfo = packageManager.getInstalledPackages(0)
71+
for(info in packageInfo) {
72+
val versionCode = PackageInfoCompat.getLongVersionCode(info)
73+
packages[info.packageName] = versionCode
74+
75+
if(info.packageName == BuildConfig.APPLICATION_ID)
76+
pref.edit().putLong("version_code", versionCode).apply()
77+
}
78+
6379
registerReceiver(packageAddedReceiver, IntentFilter(Intent.ACTION_PACKAGE_ADDED).apply {
6480
addDataScheme("package")
6581
})

app/src/main/java/com/farmerbb/appnotifier/Utils.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ import android.content.Context
2424
import android.content.Intent
2525
import android.content.pm.PackageInfo
2626
import android.content.pm.PackageManager
27+
import android.net.Uri
2728
import android.os.Build
28-
import androidx.core.net.toUri
2929
import androidx.fragment.app.Fragment
3030
import androidx.preference.PreferenceManager
3131
import com.farmerbb.appnotifier.room.AppUpdateDAO
@@ -64,7 +64,7 @@ fun Context.isPlayStoreInstalled() = try {
6464
}
6565

6666
fun getPlayStoreLaunchIntent(packageName: String) = Intent(Intent.ACTION_VIEW).apply {
67-
data = "https://play.google.com/store/apps/details?id=$packageName".toUri()
67+
data = Uri.parse("https://play.google.com/store/apps/details?id=$packageName")
6868
}
6969

7070
fun Context.startActivitySafely(intent: Intent) {

app/src/main/java/com/farmerbb/appnotifier/receivers/PackageUpgradeReceiver.kt

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ package com.farmerbb.appnotifier.receivers
1818
import android.content.BroadcastReceiver
1919
import android.content.Context
2020
import android.content.Intent
21+
import android.content.SharedPreferences
22+
import androidx.core.content.pm.PackageInfoCompat
2123
import com.farmerbb.appnotifier.*
2224
import com.farmerbb.appnotifier.room.AppUpdateDAO
2325
import javax.inject.Inject
@@ -26,6 +28,7 @@ class PackageUpgradeReceiver: BroadcastReceiver() {
2628

2729
@Inject lateinit var controller: NotificationController
2830
@Inject lateinit var dao: AppUpdateDAO
31+
@Inject lateinit var pref: SharedPreferences
2932

3033
init {
3134
AppNotifierApplication.component.inject(this)
@@ -35,14 +38,22 @@ class PackageUpgradeReceiver: BroadcastReceiver() {
3538
if(intent.action != Intent.ACTION_MY_PACKAGE_REPLACED) return
3639

3740
context.apply {
38-
initAppNotifierService()
41+
var handled = false
3942

4043
getPackageInfoSafely(BuildConfig.APPLICATION_ID, dao)?.let {
41-
controller.apply {
42-
handleAppUpdateNotification(it)
43-
replayAppInstalls()
44+
val versionCode = PackageInfoCompat.getLongVersionCode(it)
45+
if(versionCode > pref.getLong("version_code", 0)) {
46+
controller.handleAppUpdateNotification(it)
47+
handled = true
4448
}
4549
}
50+
51+
initAppNotifierService()
52+
53+
controller.apply {
54+
if(!handled) replayAppUpdates()
55+
replayAppInstalls()
56+
}
4657
}
4758
}
4859
}

0 commit comments

Comments
 (0)