Added check for update available feature
This commit is contained in:
parent
0e20fff7e3
commit
2076d6c492
5 changed files with 78 additions and 1 deletions
|
@ -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()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<Boolean>()
|
||||
|
||||
val updateAvailableEvent: MutableLiveData<Event<String>> by lazy {
|
||||
MutableLiveData<Event<String>>()
|
||||
}
|
||||
|
||||
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 {
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -57,7 +57,7 @@
|
|||
|
||||
<CheckBox
|
||||
android:onClick="@{() -> selectionListViewModel.onToggleSelect(position)}"
|
||||
android:visibility="@{selectionListViewModel.isEditionEnabled ? View.VISIBLE : View.GONE}"
|
||||
android:visibility="@{selectionListViewModel.isEditionEnabled ? View.VISIBLE : View.GONE, default=gone}"
|
||||
android:checked="@{selectionListViewModel.selectedItems.contains(position)}"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
|
|
|
@ -559,6 +559,7 @@
|
|||
<item quantity="one">@string/dialog_default_delete_one</item>
|
||||
<item quantity="other">@string/dialog_default_delete_many</item>
|
||||
</plurals>
|
||||
<string name="dialog_update_available">An update is available</string>
|
||||
|
||||
<!-- Content description -->
|
||||
<string name="content_description_add_sip_address_field">Add a SIP address field</string>
|
||||
|
|
Loading…
Reference in a new issue