Compare commits

...

5 Commits

Author SHA1 Message Date
Greyson Parrelli
f44b9b1680 Bump version to 6.40.5 2023-11-17 14:19:08 -05:00
Greyson Parrelli
a1ba051407 Add additional logging around apk updates. 2023-11-17 14:19:08 -05:00
Greyson Parrelli
0ef39afaef Fix potential bug with the in-app updater. 2023-11-17 14:10:06 -05:00
Greyson Parrelli
9360db176b Install prompt notification should dismiss failures and vice-versa. 2023-11-17 14:09:48 -05:00
Greyson Parrelli
cd8c75bc78 Fix issues with some japanese numbers being detected as shortcodes. 2023-11-17 13:55:20 -05:00
6 changed files with 45 additions and 13 deletions

View File

@@ -34,14 +34,14 @@ ktlint {
} }
def canonicalVersionCode = 1361 def canonicalVersionCode = 1361
def canonicalVersionName = "6.40.4" def canonicalVersionName = "6.40.5"
def postFixSize = 100 def postFixSize = 100
def abiPostFix = ['universal' : 0, def abiPostFix = ['universal' : 5,
'armeabi-v7a' : 1, 'armeabi-v7a' : 6,
'arm64-v8a' : 2, 'arm64-v8a' : 7,
'x86' : 3, 'x86' : 8,
'x86_64' : 4] 'x86_64' : 9]
def keystores = [ 'debug' : loadKeystoreProperties('keystore.debug.properties') ] def keystores = [ 'debug' : loadKeystoreProperties('keystore.debug.properties') ]

View File

@@ -15,6 +15,7 @@ import org.signal.core.util.StreamUtil
import org.signal.core.util.getDownloadManager import org.signal.core.util.getDownloadManager
import org.signal.core.util.logging.Log import org.signal.core.util.logging.Log
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies import org.thoughtcrime.securesms.dependencies.ApplicationDependencies
import org.thoughtcrime.securesms.jobs.ApkUpdateJob
import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.keyvalue.SignalStore
import org.thoughtcrime.securesms.util.Environment import org.thoughtcrime.securesms.util.Environment
import org.thoughtcrime.securesms.util.FileUtils import org.thoughtcrime.securesms.util.FileUtils
@@ -38,7 +39,9 @@ object ApkUpdateInstaller {
*/ */
fun installOrPromptForInstall(context: Context, downloadId: Long, userInitiated: Boolean) { fun installOrPromptForInstall(context: Context, downloadId: Long, userInitiated: Boolean) {
if (downloadId != SignalStore.apkUpdate().downloadId) { if (downloadId != SignalStore.apkUpdate().downloadId) {
Log.w(TAG, "DownloadId doesn't match the one we're waiting for! We likely have newer data. Ignoring.") Log.w(TAG, "DownloadId doesn't match the one we're waiting for (current: $downloadId, expected: ${SignalStore.apkUpdate().downloadId})! We likely have newer data. Ignoring.")
ApkUpdateNotifications.dismissInstallPrompt(context)
ApplicationDependencies.getJobManager().add(ApkUpdateJob())
return return
} }

View File

@@ -30,6 +30,9 @@ object ApkUpdateNotifications {
*/ */
@SuppressLint("LaunchActivityFromNotification") @SuppressLint("LaunchActivityFromNotification")
fun showInstallPrompt(context: Context, downloadId: Long) { fun showInstallPrompt(context: Context, downloadId: Long) {
Log.d(TAG, "Showing install prompt. DownloadId: $downloadId")
ServiceUtil.getNotificationManager(context).cancel(NotificationIds.APK_UPDATE_FAILED_INSTALL)
val pendingIntent = PendingIntent.getBroadcast( val pendingIntent = PendingIntent.getBroadcast(
context, context,
1, 1,
@@ -37,7 +40,7 @@ object ApkUpdateNotifications {
action = ApkUpdateNotificationReceiver.ACTION_INITIATE_INSTALL action = ApkUpdateNotificationReceiver.ACTION_INITIATE_INSTALL
putExtra(ApkUpdateNotificationReceiver.EXTRA_DOWNLOAD_ID, downloadId) putExtra(ApkUpdateNotificationReceiver.EXTRA_DOWNLOAD_ID, downloadId)
}, },
PendingIntentFlags.immutable() PendingIntentFlags.updateCurrent()
) )
val notification = NotificationCompat.Builder(context, NotificationChannels.getInstance().APP_UPDATES) val notification = NotificationCompat.Builder(context, NotificationChannels.getInstance().APP_UPDATES)
@@ -52,7 +55,15 @@ object ApkUpdateNotifications {
ServiceUtil.getNotificationManager(context).notify(NotificationIds.APK_UPDATE_PROMPT_INSTALL, notification) ServiceUtil.getNotificationManager(context).notify(NotificationIds.APK_UPDATE_PROMPT_INSTALL, notification)
} }
fun dismissInstallPrompt(context: Context) {
Log.d(TAG, "Dismissing install prompt.")
ServiceUtil.getNotificationManager(context).cancel(NotificationIds.APK_UPDATE_PROMPT_INSTALL)
}
fun showInstallFailed(context: Context, reason: FailureReason) { fun showInstallFailed(context: Context, reason: FailureReason) {
Log.d(TAG, "Showing failed notification. Reason: $reason")
ServiceUtil.getNotificationManager(context).cancel(NotificationIds.APK_UPDATE_PROMPT_INSTALL)
val pendingIntent = PendingIntent.getActivity( val pendingIntent = PendingIntent.getActivity(
context, context,
0, 0,

View File

@@ -36,9 +36,13 @@ class ApkUpdatePackageInstallerReceiver : BroadcastReceiver() {
when (statusCode) { when (statusCode) {
PackageInstaller.STATUS_SUCCESS -> { PackageInstaller.STATUS_SUCCESS -> {
Log.i(TAG, "Update installed successfully!") if (SignalStore.apkUpdate().lastApkUploadTime != SignalStore.apkUpdate().pendingApkUploadTime) {
SignalStore.apkUpdate().lastApkUploadTime = SignalStore.apkUpdate().pendingApkUploadTime Log.i(TAG, "Update installed successfully! Updating our lastApkUploadTime to ${SignalStore.apkUpdate().pendingApkUploadTime}")
ApkUpdateNotifications.showAutoUpdateSuccess(context) SignalStore.apkUpdate().lastApkUploadTime = SignalStore.apkUpdate().pendingApkUploadTime
ApkUpdateNotifications.showAutoUpdateSuccess(context)
} else {
Log.i(TAG, "Spurious 'success' notification?")
}
} }
PackageInstaller.STATUS_PENDING_USER_ACTION -> handlePendingUserAction(context, userInitiated, intent!!) PackageInstaller.STATUS_PENDING_USER_ACTION -> handlePendingUserAction(context, userInitiated, intent!!)
PackageInstaller.STATUS_FAILURE_ABORTED -> ApkUpdateNotifications.showInstallFailed(context, FailureReason.ABORTED) PackageInstaller.STATUS_FAILURE_ABORTED -> ApkUpdateNotifications.showInstallFailed(context, FailureReason.ABORTED)

View File

@@ -5,8 +5,12 @@
package org.thoughtcrime.securesms.keyvalue package org.thoughtcrime.securesms.keyvalue
import org.signal.core.util.logging.Log
internal class ApkUpdateValues(store: KeyValueStore) : SignalStoreValues(store) { internal class ApkUpdateValues(store: KeyValueStore) : SignalStoreValues(store) {
companion object { companion object {
private val TAG = Log.tag(ApkUpdateValues::class.java)
private const val DOWNLOAD_ID = "apk_update.download_id" private const val DOWNLOAD_ID = "apk_update.download_id"
private const val DIGEST = "apk_update.digest" private const val DIGEST = "apk_update.digest"
private const val AUTO_UPDATE = "apk_update.auto_update" private const val AUTO_UPDATE = "apk_update.auto_update"
@@ -24,12 +28,19 @@ internal class ApkUpdateValues(store: KeyValueStore) : SignalStoreValues(store)
var lastSuccessfulCheck: Long by longValue(LAST_SUCCESSFUL_CHECK, 0) var lastSuccessfulCheck: Long by longValue(LAST_SUCCESSFUL_CHECK, 0)
/** The upload of the last APK we installed */ /** The upload of the last APK we installed */
var lastApkUploadTime: Long by longValue(LAST_APK_UPLOAD_TIME, 0) var lastApkUploadTime: Long
get() = getLong(LAST_APK_UPLOAD_TIME, 0)
set(value) {
Log.d(TAG, "Setting lastApkUploadTime to $value")
store.beginWrite().putLong(LAST_APK_UPLOAD_TIME, value).commit()
}
/** The upload time of the APK we're trying to install */ /** The upload time of the APK we're trying to install */
val pendingApkUploadTime: Long by longValue(PENDING_APK_UPLOAD_TIME, 0) val pendingApkUploadTime: Long by longValue(PENDING_APK_UPLOAD_TIME, 0)
fun setDownloadAttributes(id: Long, digest: ByteArray?, apkUploadTime: Long) { fun setDownloadAttributes(id: Long, digest: ByteArray?, apkUploadTime: Long) {
Log.d(TAG, "Saving download attributes. id: $id, apkUploadTime: $apkUploadTime")
store store
.beginWrite() .beginWrite()
.putLong(DOWNLOAD_ID, id) .putLong(DOWNLOAD_ID, id)
@@ -39,6 +50,8 @@ internal class ApkUpdateValues(store: KeyValueStore) : SignalStoreValues(store)
} }
fun clearDownloadAttributes() { fun clearDownloadAttributes() {
Log.d(TAG, "Clearing download attributes.")
store store
.beginWrite() .beginWrite()
.putLong(DOWNLOAD_ID, -1) .putLong(DOWNLOAD_ID, -1)

View File

@@ -127,6 +127,7 @@ public class PhoneNumberFormatter {
} }
if (isShortCode(bareNumber, localCountryCode)) { if (isShortCode(bareNumber, localCountryCode)) {
Log.i(TAG, "Shortcode detected.");
return bareNumber; return bareNumber;
} }
@@ -165,7 +166,7 @@ public class PhoneNumberFormatter {
private boolean isShortCode(@NonNull String bareNumber, String localCountryCode) { private boolean isShortCode(@NonNull String bareNumber, String localCountryCode) {
try { try {
Phonenumber.PhoneNumber parsedNumber = phoneNumberUtil.parse(bareNumber, localCountryCode); Phonenumber.PhoneNumber parsedNumber = phoneNumberUtil.parse(bareNumber, localCountryCode);
return ShortNumberInfo.getInstance().isPossibleShortNumberForRegion(parsedNumber, localCountryCode); return ShortNumberInfo.getInstance().isValidShortNumberForRegion(parsedNumber, localCountryCode);
} catch (NumberParseException e) { } catch (NumberParseException e) {
return false; return false;
} }