53 lines
1.9 KiB
Kotlin
53 lines
1.9 KiB
Kotlin
package org.schabi.newpipe.util
|
|
|
|
import android.content.pm.PackageManager
|
|
import androidx.core.content.pm.PackageInfoCompat
|
|
import org.schabi.newpipe.App
|
|
import org.schabi.newpipe.error.ErrorInfo
|
|
import org.schabi.newpipe.error.ErrorUtil.Companion.createNotification
|
|
import org.schabi.newpipe.error.UserAction
|
|
import java.time.Instant
|
|
import java.time.ZonedDateTime
|
|
import java.time.format.DateTimeFormatter
|
|
|
|
object ReleaseVersionUtil {
|
|
// Public key of the certificate that is used in NewPipe release versions
|
|
private const val RELEASE_CERT_PUBLIC_KEY_SHA256 =
|
|
"cb84069bd68116bafae5ee4ee5b08a567aa6d898404e7cb12f9e756df5cf5cab"
|
|
|
|
@OptIn(ExperimentalStdlibApi::class)
|
|
val isReleaseApk by lazy {
|
|
@Suppress("NewApi")
|
|
val certificates = mapOf(
|
|
RELEASE_CERT_PUBLIC_KEY_SHA256.hexToByteArray() to PackageManager.CERT_INPUT_SHA256
|
|
)
|
|
val app = App.getApp()
|
|
try {
|
|
PackageInfoCompat.hasSignatures(app.packageManager, app.packageName, certificates, false)
|
|
} catch (e: PackageManager.NameNotFoundException) {
|
|
createNotification(
|
|
app, ErrorInfo(e, UserAction.CHECK_FOR_NEW_APP_VERSION, "Could not find package info")
|
|
)
|
|
false
|
|
}
|
|
}
|
|
|
|
fun isLastUpdateCheckExpired(expiry: Long): Boolean {
|
|
return Instant.ofEpochSecond(expiry) < Instant.now()
|
|
}
|
|
|
|
/**
|
|
* Coerce expiry date time in between 6 hours and 72 hours from now
|
|
*
|
|
* @return Epoch second of expiry date time
|
|
*/
|
|
fun coerceUpdateCheckExpiry(expiryString: String?): Long {
|
|
val nowPlus6Hours = ZonedDateTime.now().plusHours(6)
|
|
val expiry = expiryString?.let {
|
|
ZonedDateTime.from(DateTimeFormatter.RFC_1123_DATE_TIME.parse(it))
|
|
.coerceIn(nowPlus6Hours, nowPlus6Hours.plusHours(66))
|
|
} ?: nowPlus6Hours
|
|
return expiry.toEpochSecond()
|
|
}
|
|
}
|