Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 898a7120 authored by Mohammed Althaf T's avatar Mohammed Althaf T 😊
Browse files

clear cookie if the app is updated

parent aa9221bd
Loading
Loading
Loading
Loading
Loading
+25 −0
Original line number Diff line number Diff line
@@ -10,12 +10,15 @@ import android.content.ContentUris
import android.content.Context
import android.content.Intent
import android.content.SyncResult
import android.content.pm.PackageManager
import android.net.Uri
import android.os.RemoteException
import android.provider.CalendarContract
import android.provider.ContactsContract
import androidx.core.app.NotificationCompat
import androidx.core.app.NotificationManagerCompat
import androidx.core.content.edit
import androidx.preference.PreferenceManager
import at.bitfire.dav4jvm.*
import at.bitfire.dav4jvm.exception.*
import at.bitfire.dav4jvm.property.GetCTag
@@ -179,6 +182,19 @@ abstract class SyncManager<ResourceType: LocalResource<*>, out CollectionType: L
     * Call performSync with default retry values
     */
    fun performSync() {
        val prefs = PreferenceManager.getDefaultSharedPreferences(context)
        val currentVersion = getCurrentVersionCode(context)
        val savedVersion = prefs.getInt("LAST_VERSION_CODE", 0)
        if (savedVersion != currentVersion) {
            Logger.log.warning("App has been updated! Previous: $savedVersion, Current: $currentVersion")
            prefs.edit {
                putInt("LAST_VERSION_CODE", currentVersion)
            }
            // Clear cookie since the app is updated.
            accountSettings.clearCookie()
            return
        }

        val credentials = accountSettings.credentials()
        if (credentials.passwordNeedsUpdate) {
            val exception = UnauthorizedException(context.getString(R.string.sync_error_authentication_failed))
@@ -195,6 +211,15 @@ abstract class SyncManager<ResourceType: LocalResource<*>, out CollectionType: L
        refreshAuthTokenAndSync(authState)
    }

    private fun getCurrentVersionCode(context: Context): Int {
        return try {
            val packageInfo = context.packageManager.getPackageInfo(context.packageName, 0)
            packageInfo.versionCode
        } catch (e: PackageManager.NameNotFoundException) {
            0
        }
    }

    private fun refreshAuthTokenAndSync(authState: AuthState) {
        val tokenRequest = authState.createTokenRefreshRequest()
        val clientSecretString = accountSettings.credentials().clientSecret