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
|
package org.linphone.activities.main.dialer.fragments
|
||||||
|
|
||||||
import android.app.AlertDialog
|
import android.app.AlertDialog
|
||||||
|
import android.app.Dialog
|
||||||
import android.content.ClipData
|
import android.content.ClipData
|
||||||
import android.content.ClipboardManager
|
import android.content.ClipboardManager
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import android.content.Intent
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
|
@ -32,15 +34,18 @@ import androidx.fragment.app.Fragment
|
||||||
import androidx.lifecycle.Observer
|
import androidx.lifecycle.Observer
|
||||||
import androidx.lifecycle.ViewModelProvider
|
import androidx.lifecycle.ViewModelProvider
|
||||||
import androidx.navigation.fragment.findNavController
|
import androidx.navigation.fragment.findNavController
|
||||||
|
import org.linphone.BuildConfig
|
||||||
import org.linphone.LinphoneApplication.Companion.coreContext
|
import org.linphone.LinphoneApplication.Companion.coreContext
|
||||||
import org.linphone.LinphoneApplication.Companion.corePreferences
|
import org.linphone.LinphoneApplication.Companion.corePreferences
|
||||||
import org.linphone.R
|
import org.linphone.R
|
||||||
import org.linphone.activities.main.MainActivity
|
import org.linphone.activities.main.MainActivity
|
||||||
import org.linphone.activities.main.dialer.viewmodels.DialerViewModel
|
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.activities.main.viewmodels.SharedMainViewModel
|
||||||
import org.linphone.core.tools.Log
|
import org.linphone.core.tools.Log
|
||||||
import org.linphone.databinding.DialerFragmentBinding
|
import org.linphone.databinding.DialerFragmentBinding
|
||||||
import org.linphone.utils.AppUtils
|
import org.linphone.utils.AppUtils
|
||||||
|
import org.linphone.utils.DialogUtils
|
||||||
|
|
||||||
class DialerFragment : Fragment() {
|
class DialerFragment : Fragment() {
|
||||||
private lateinit var binding: DialerFragmentBinding
|
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}")
|
Log.i("[Dialer] Pending call transfer mode = ${sharedViewModel.pendingCallTransfer}")
|
||||||
viewModel.transferVisibility.value = sharedViewModel.pendingCallTransfer
|
viewModel.transferVisibility.value = sharedViewModel.pendingCallTransfer
|
||||||
|
|
||||||
|
checkForUpdate()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
|
@ -176,4 +189,36 @@ class DialerFragment : Fragment() {
|
||||||
}
|
}
|
||||||
alertDialog.show()
|
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.activities.main.dialer.NumpadDigitListener
|
||||||
import org.linphone.core.*
|
import org.linphone.core.*
|
||||||
import org.linphone.core.tools.Log
|
import org.linphone.core.tools.Log
|
||||||
|
import org.linphone.utils.Event
|
||||||
import org.linphone.utils.LogsUploadViewModel
|
import org.linphone.utils.LogsUploadViewModel
|
||||||
|
|
||||||
class DialerViewModel : LogsUploadViewModel() {
|
class DialerViewModel : LogsUploadViewModel() {
|
||||||
|
@ -41,6 +42,10 @@ class DialerViewModel : LogsUploadViewModel() {
|
||||||
|
|
||||||
val autoInitiateVideoCalls = MutableLiveData<Boolean>()
|
val autoInitiateVideoCalls = MutableLiveData<Boolean>()
|
||||||
|
|
||||||
|
val updateAvailableEvent: MutableLiveData<Event<String>> by lazy {
|
||||||
|
MutableLiveData<Event<String>>()
|
||||||
|
}
|
||||||
|
|
||||||
private var addressWaitingNetworkToBeCalled: String? = null
|
private var addressWaitingNetworkToBeCalled: String? = null
|
||||||
private var timeAtWitchWeTriedToCall: Long = 0
|
private var timeAtWitchWeTriedToCall: Long = 0
|
||||||
|
|
||||||
|
@ -94,6 +99,20 @@ class DialerViewModel : LogsUploadViewModel() {
|
||||||
timeAtWitchWeTriedToCall = 0
|
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 {
|
init {
|
||||||
|
|
|
@ -198,6 +198,12 @@ class CorePreferences constructor(private val context: Context) {
|
||||||
config.setString("app", "voice_mail", value)
|
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 */
|
/* Read only application settings previously in non_localizable_custom */
|
||||||
|
|
||||||
val defaultDomain: String
|
val defaultDomain: String
|
||||||
|
@ -227,6 +233,12 @@ class CorePreferences constructor(private val context: Context) {
|
||||||
val contactOrganizationVisible: Boolean
|
val contactOrganizationVisible: Boolean
|
||||||
get() = config.getBool("app", "display_contact_organization", true)
|
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
|
private val darkModeAllowed: Boolean
|
||||||
get() = config.getBool("app", "dark_mode_allowed", true)
|
get() = config.getBool("app", "dark_mode_allowed", true)
|
||||||
|
|
||||||
|
|
|
@ -57,7 +57,7 @@
|
||||||
|
|
||||||
<CheckBox
|
<CheckBox
|
||||||
android:onClick="@{() -> selectionListViewModel.onToggleSelect(position)}"
|
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:checked="@{selectionListViewModel.selectedItems.contains(position)}"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
|
|
|
@ -559,6 +559,7 @@
|
||||||
<item quantity="one">@string/dialog_default_delete_one</item>
|
<item quantity="one">@string/dialog_default_delete_one</item>
|
||||||
<item quantity="other">@string/dialog_default_delete_many</item>
|
<item quantity="other">@string/dialog_default_delete_many</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
|
<string name="dialog_update_available">An update is available</string>
|
||||||
|
|
||||||
<!-- Content description -->
|
<!-- Content description -->
|
||||||
<string name="content_description_add_sip_address_field">Add a SIP address field</string>
|
<string name="content_description_add_sip_address_field">Add a SIP address field</string>
|
||||||
|
|
Loading…
Reference in a new issue