From 2076d6c492fed6d02b100d92549fd380c0d792d0 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Wed, 24 Jun 2020 17:23:53 +0200 Subject: [PATCH] Added check for update available feature --- .../main/dialer/fragments/DialerFragment.kt | 45 +++++++++++++++++++ .../main/dialer/viewmodels/DialerViewModel.kt | 19 ++++++++ .../java/org/linphone/core/CorePreferences.kt | 12 +++++ app/src/main/res/layout/contact_list_cell.xml | 2 +- app/src/main/res/values/strings.xml | 1 + 5 files changed, 78 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/linphone/activities/main/dialer/fragments/DialerFragment.kt b/app/src/main/java/org/linphone/activities/main/dialer/fragments/DialerFragment.kt index 1fb3a54bb..1ec6ea04a 100644 --- a/app/src/main/java/org/linphone/activities/main/dialer/fragments/DialerFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/dialer/fragments/DialerFragment.kt @@ -20,9 +20,11 @@ package org.linphone.activities.main.dialer.fragments import android.app.AlertDialog +import android.app.Dialog import android.content.ClipData import android.content.ClipboardManager import android.content.Context +import android.content.Intent import android.net.Uri import android.os.Bundle import android.view.LayoutInflater @@ -32,15 +34,18 @@ import androidx.fragment.app.Fragment import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController +import org.linphone.BuildConfig import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.LinphoneApplication.Companion.corePreferences import org.linphone.R import org.linphone.activities.main.MainActivity import org.linphone.activities.main.dialer.viewmodels.DialerViewModel +import org.linphone.activities.main.viewmodels.DialogViewModel import org.linphone.activities.main.viewmodels.SharedMainViewModel import org.linphone.core.tools.Log import org.linphone.databinding.DialerFragmentBinding import org.linphone.utils.AppUtils +import org.linphone.utils.DialogUtils class DialerFragment : Fragment() { private lateinit var binding: DialerFragmentBinding @@ -139,8 +144,16 @@ class DialerFragment : Fragment() { } }) + viewModel.updateAvailableEvent.observe(viewLifecycleOwner, Observer { + it.consume { url -> + displayNewVersionAvailableDialog(url) + } + }) + Log.i("[Dialer] Pending call transfer mode = ${sharedViewModel.pendingCallTransfer}") viewModel.transferVisibility.value = sharedViewModel.pendingCallTransfer + + checkForUpdate() } override fun onResume() { @@ -176,4 +189,36 @@ class DialerFragment : Fragment() { } alertDialog.show() } + + private fun checkForUpdate() { + val url: String? = corePreferences.checkIfUpdateAvailableUrl + if (url != null && url.isNotEmpty()) { + val lastTimestamp: Int = corePreferences.lastUpdateAvailableCheckTimestamp + val currentTimeStamp = System.currentTimeMillis().toInt() + val interval: Int = corePreferences.checkUpdateAvailableInterval + if (lastTimestamp == 0 || currentTimeStamp - lastTimestamp >= interval) { + val currentVersion = BuildConfig.VERSION_NAME + Log.i("[Dialer] Checking for update using url [$url] and current version [$currentVersion]") + coreContext.core.checkForUpdate(currentVersion) + corePreferences.lastUpdateAvailableCheckTimestamp = currentTimeStamp + } + } + } + + private fun displayNewVersionAvailableDialog(url: String) { + val viewModel = DialogViewModel(getString(R.string.dialog_update_available)) + val dialog: Dialog = DialogUtils.getDialog(requireContext(), viewModel) + + viewModel.showCancelButton { + dialog.dismiss() + } + + viewModel.showOkButton({ + val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse(url)) + startActivity(browserIntent) + dialog.dismiss() + }, getString(R.string.dialog_ok)) + + dialog.show() + } } diff --git a/app/src/main/java/org/linphone/activities/main/dialer/viewmodels/DialerViewModel.kt b/app/src/main/java/org/linphone/activities/main/dialer/viewmodels/DialerViewModel.kt index a7a9f3b66..9d7526ca3 100644 --- a/app/src/main/java/org/linphone/activities/main/dialer/viewmodels/DialerViewModel.kt +++ b/app/src/main/java/org/linphone/activities/main/dialer/viewmodels/DialerViewModel.kt @@ -26,6 +26,7 @@ import org.linphone.LinphoneApplication.Companion.corePreferences import org.linphone.activities.main.dialer.NumpadDigitListener import org.linphone.core.* import org.linphone.core.tools.Log +import org.linphone.utils.Event import org.linphone.utils.LogsUploadViewModel class DialerViewModel : LogsUploadViewModel() { @@ -41,6 +42,10 @@ class DialerViewModel : LogsUploadViewModel() { val autoInitiateVideoCalls = MutableLiveData() + val updateAvailableEvent: MutableLiveData> by lazy { + MutableLiveData>() + } + private var addressWaitingNetworkToBeCalled: String? = null private var timeAtWitchWeTriedToCall: Long = 0 @@ -94,6 +99,20 @@ class DialerViewModel : LogsUploadViewModel() { timeAtWitchWeTriedToCall = 0 } } + + override fun onVersionUpdateCheckResultReceived( + core: Core, + result: VersionUpdateCheckResult, + version: String?, + url: String? + ) { + if (result == VersionUpdateCheckResult.NewVersionAvailable) { + Log.i("[Dialer] Update available, version [$version], url [$url]") + if (url != null && url.isNotEmpty()) { + updateAvailableEvent.value = Event(url) + } + } + } } init { diff --git a/app/src/main/java/org/linphone/core/CorePreferences.kt b/app/src/main/java/org/linphone/core/CorePreferences.kt index 09ef947e7..bba88a497 100644 --- a/app/src/main/java/org/linphone/core/CorePreferences.kt +++ b/app/src/main/java/org/linphone/core/CorePreferences.kt @@ -198,6 +198,12 @@ class CorePreferences constructor(private val context: Context) { config.setString("app", "voice_mail", value) } + var lastUpdateAvailableCheckTimestamp: Int + get() = config.getInt("app", "version_check_url_last_timestamp", 0) + set(value) { + config.setInt("app", "version_check_url_last_timestamp", value) + } + /* Read only application settings previously in non_localizable_custom */ val defaultDomain: String @@ -227,6 +233,12 @@ class CorePreferences constructor(private val context: Context) { val contactOrganizationVisible: Boolean get() = config.getBool("app", "display_contact_organization", true) + val checkIfUpdateAvailableUrl: String? + get() = config.getString("misc", "version_check_url_root", null) + + val checkUpdateAvailableInterval: Int + get() = config.getInt("app", "version_check_interval", 86400000) + private val darkModeAllowed: Boolean get() = config.getBool("app", "dark_mode_allowed", true) diff --git a/app/src/main/res/layout/contact_list_cell.xml b/app/src/main/res/layout/contact_list_cell.xml index 99966a006..1de16a5f9 100644 --- a/app/src/main/res/layout/contact_list_cell.xml +++ b/app/src/main/res/layout/contact_list_cell.xml @@ -57,7 +57,7 @@ @string/dialog_default_delete_one @string/dialog_default_delete_many + An update is available Add a SIP address field