mirror of
https://gitlab.linphone.org/BC/public/linphone-android.git
synced 2026-01-19 04:28:08 +00:00
Show privacy policy & conditions accept dialog if not accepted yet when creating an account or logging in a third party one
This commit is contained in:
parent
6f416ab33f
commit
a7a22f39d2
8 changed files with 102 additions and 48 deletions
|
|
@ -20,7 +20,6 @@
|
|||
package org.linphone.core
|
||||
|
||||
import android.content.Context
|
||||
import android.content.SharedPreferences
|
||||
import androidx.annotation.AnyThread
|
||||
import androidx.annotation.UiThread
|
||||
import androidx.annotation.WorkerThread
|
||||
|
|
@ -42,25 +41,12 @@ class CorePreferences @UiThread constructor(private val context: Context) {
|
|||
_config = value
|
||||
}
|
||||
|
||||
@UiThread
|
||||
fun chatRoomMuted(id: String): Boolean {
|
||||
val sharedPreferences: SharedPreferences = coreContext.context.getSharedPreferences(
|
||||
"notifications",
|
||||
Context.MODE_PRIVATE
|
||||
)
|
||||
return sharedPreferences.getBoolean(id, false)
|
||||
}
|
||||
|
||||
@UiThread
|
||||
fun muteChatRoom(id: String, mute: Boolean) {
|
||||
val sharedPreferences: SharedPreferences = coreContext.context.getSharedPreferences(
|
||||
"notifications",
|
||||
Context.MODE_PRIVATE
|
||||
)
|
||||
val editor = sharedPreferences.edit()
|
||||
editor.putBoolean(id, mute)
|
||||
editor.apply()
|
||||
}
|
||||
@get:WorkerThread @set:WorkerThread
|
||||
var conditionsAndPrivacyPolicyAccepted: Boolean
|
||||
get() = config.getBool("app", "read_and_agree_terms_and_privacy", false)
|
||||
set(value) {
|
||||
config.setBool("app", "read_and_agree_terms_and_privacy", value)
|
||||
}
|
||||
|
||||
@get:WorkerThread @set:WorkerThread
|
||||
var publishPresence: Boolean
|
||||
|
|
|
|||
|
|
@ -38,7 +38,9 @@ import org.linphone.R
|
|||
import org.linphone.core.tools.Log
|
||||
import org.linphone.databinding.AssistantLoginFragmentBinding
|
||||
import org.linphone.ui.assistant.AssistantActivity
|
||||
import org.linphone.ui.assistant.model.AcceptConditionsAndPolicyDialogModel
|
||||
import org.linphone.ui.assistant.viewmodel.AccountLoginViewModel
|
||||
import org.linphone.utils.DialogUtils
|
||||
import org.linphone.utils.PhoneNumberUtils
|
||||
|
||||
@UiThread
|
||||
|
|
@ -73,8 +75,11 @@ class LoginFragment : Fragment() {
|
|||
}
|
||||
|
||||
binding.setRegisterClickListener {
|
||||
val action = LoginFragmentDirections.actionLoginFragmentToRegisterFragment()
|
||||
findNavController().navigate(action)
|
||||
if (viewModel.conditionsAndPrivacyPolicyAccepted) {
|
||||
goToRegisterFragment()
|
||||
} else {
|
||||
showAcceptConditionsAndPrivacyDialog(goToAccountCreate = true)
|
||||
}
|
||||
}
|
||||
|
||||
binding.setForgottenPasswordClickListener {
|
||||
|
|
@ -93,8 +98,11 @@ class LoginFragment : Fragment() {
|
|||
}
|
||||
|
||||
binding.setThirdPartySipAccountLoginClickListener {
|
||||
val action = LoginFragmentDirections.actionLoginFragmentToThirdPartySipAccountWarningFragment()
|
||||
findNavController().navigate(action)
|
||||
if (viewModel.conditionsAndPrivacyPolicyAccepted) {
|
||||
goToLoginThirdPartySipAccountFragment()
|
||||
} else {
|
||||
showAcceptConditionsAndPrivacyDialog(goToThirdPartySipAccountLogin = true)
|
||||
}
|
||||
}
|
||||
|
||||
viewModel.showPassword.observe(viewLifecycleOwner) {
|
||||
|
|
@ -142,4 +150,50 @@ class LoginFragment : Fragment() {
|
|||
private fun goBack() {
|
||||
requireActivity().finish()
|
||||
}
|
||||
|
||||
private fun goToRegisterFragment() {
|
||||
val action = LoginFragmentDirections.actionLoginFragmentToRegisterFragment()
|
||||
findNavController().navigate(action)
|
||||
}
|
||||
|
||||
private fun goToLoginThirdPartySipAccountFragment() {
|
||||
val action = LoginFragmentDirections.actionLoginFragmentToThirdPartySipAccountWarningFragment()
|
||||
findNavController().navigate(action)
|
||||
}
|
||||
|
||||
private fun showAcceptConditionsAndPrivacyDialog(
|
||||
goToAccountCreate: Boolean = false,
|
||||
goToThirdPartySipAccountLogin: Boolean = false
|
||||
) {
|
||||
val model = AcceptConditionsAndPolicyDialogModel()
|
||||
val dialog = DialogUtils.getAcceptConditionsAndPrivacyDialog(
|
||||
requireActivity(),
|
||||
model
|
||||
)
|
||||
|
||||
model.dismissEvent.observe(viewLifecycleOwner) {
|
||||
it.consume {
|
||||
dialog.dismiss()
|
||||
}
|
||||
}
|
||||
|
||||
model.conditionsAcceptedEvent.observe(viewLifecycleOwner) {
|
||||
it.consume {
|
||||
Log.i("$TAG Conditions & Privacy policy have been accepted")
|
||||
coreContext.postOnCoreThread {
|
||||
// TODO FIXME: uncomment
|
||||
// corePreferences.conditionsAndPrivacyPolicyAccepted = true
|
||||
}
|
||||
dialog.dismiss()
|
||||
|
||||
if (goToAccountCreate) {
|
||||
goToRegisterFragment()
|
||||
} else if (goToThirdPartySipAccountLogin) {
|
||||
goToLoginThirdPartySipAccountFragment()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dialog.show()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,20 +23,18 @@ import androidx.annotation.UiThread
|
|||
import androidx.lifecycle.MutableLiveData
|
||||
import org.linphone.utils.Event
|
||||
|
||||
class ConfirmConditionsAndPolicyDialogModel @UiThread constructor() {
|
||||
class AcceptConditionsAndPolicyDialogModel @UiThread constructor() {
|
||||
val dismissEvent = MutableLiveData<Event<Boolean>>()
|
||||
|
||||
val conditionsAcceptedEvent = MutableLiveData<Event<Boolean>>()
|
||||
|
||||
@UiThread
|
||||
fun dismiss() {
|
||||
dismissEvent.value = Event(true)
|
||||
}
|
||||
|
||||
fun denyConditions() {
|
||||
// TODO
|
||||
}
|
||||
|
||||
@UiThread
|
||||
fun acceptConditions() {
|
||||
// TODO
|
||||
conditionsAcceptedEvent.value = Event(true)
|
||||
}
|
||||
}
|
||||
|
|
@ -56,6 +56,8 @@ class AccountLoginViewModel @UiThread constructor() : ViewModel() {
|
|||
|
||||
val accountLoginErrorEvent = MutableLiveData<Event<String>>()
|
||||
|
||||
var conditionsAndPrivacyPolicyAccepted = false
|
||||
|
||||
private lateinit var newlyCreatedAuthInfo: AuthInfo
|
||||
private lateinit var newlyCreatedAccount: Account
|
||||
|
||||
|
|
@ -94,6 +96,10 @@ class AccountLoginViewModel @UiThread constructor() : ViewModel() {
|
|||
showPassword.value = false
|
||||
registrationInProgress.value = false
|
||||
|
||||
coreContext.postOnCoreThread {
|
||||
conditionsAndPrivacyPolicyAccepted = corePreferences.conditionsAndPrivacyPolicyAccepted
|
||||
}
|
||||
|
||||
loginEnabled.addSource(username) {
|
||||
loginEnabled.value = isLoginButtonEnabled()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,10 +26,8 @@ import android.view.View
|
|||
import android.view.ViewGroup
|
||||
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
|
||||
import org.linphone.LinphoneApplication.Companion.coreContext
|
||||
import org.linphone.LinphoneApplication.Companion.corePreferences
|
||||
import org.linphone.core.ChatRoom
|
||||
import org.linphone.databinding.ChatRoomMenuBinding
|
||||
import org.linphone.utils.LinphoneUtils
|
||||
|
||||
class ConversationMenuDialogFragment(
|
||||
private val chatRoom: ChatRoom,
|
||||
|
|
@ -57,27 +55,26 @@ class ConversationMenuDialogFragment(
|
|||
// TODO FIXME: use a viewmodel and use core thread
|
||||
val view = ChatRoomMenuBinding.inflate(layoutInflater)
|
||||
|
||||
val id = LinphoneUtils.getChatRoomId(chatRoom)
|
||||
view.isMuted = corePreferences.chatRoomMuted(id)
|
||||
view.isMuted = chatRoom.muted
|
||||
view.isRead = chatRoom.unreadMessagesCount == 0
|
||||
|
||||
view.setMarkAsReadClickListener {
|
||||
coreContext.postOnCoreThread { core ->
|
||||
coreContext.postOnCoreThread {
|
||||
chatRoom.markAsRead()
|
||||
}
|
||||
dismiss()
|
||||
}
|
||||
|
||||
view.setMuteClickListener {
|
||||
coreContext.postOnCoreThread { core ->
|
||||
corePreferences.muteChatRoom(id, true)
|
||||
coreContext.postOnCoreThread {
|
||||
chatRoom.muted = true
|
||||
}
|
||||
dismiss()
|
||||
}
|
||||
|
||||
view.setUnMuteClickListener {
|
||||
coreContext.postOnCoreThread { core ->
|
||||
corePreferences.muteChatRoom(id, false)
|
||||
coreContext.postOnCoreThread {
|
||||
chatRoom.muted = false
|
||||
}
|
||||
dismiss()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,7 +22,6 @@ package org.linphone.ui.main.conversations.data
|
|||
import androidx.lifecycle.MutableLiveData
|
||||
import java.lang.StringBuilder
|
||||
import org.linphone.LinphoneApplication.Companion.coreContext
|
||||
import org.linphone.LinphoneApplication.Companion.corePreferences
|
||||
import org.linphone.R
|
||||
import org.linphone.contacts.ContactData
|
||||
import org.linphone.core.*
|
||||
|
|
@ -121,7 +120,7 @@ class ChatRoomData(val chatRoom: ChatRoom) {
|
|||
isSecure.postValue(chatRoom.securityLevel == ChatRoom.SecurityLevel.Encrypted)
|
||||
isSecureVerified.postValue(chatRoom.securityLevel == ChatRoom.SecurityLevel.Safe)
|
||||
isEphemeral.postValue(chatRoom.isEphemeralEnabled)
|
||||
isMuted.postValue(areNotificationsMuted())
|
||||
isMuted.postValue(chatRoom.muted)
|
||||
}
|
||||
|
||||
fun onCleared() {
|
||||
|
|
@ -240,10 +239,6 @@ class ChatRoomData(val chatRoom: ChatRoom) {
|
|||
lastMessage.postValue(text)
|
||||
}
|
||||
}
|
||||
|
||||
private fun areNotificationsMuted(): Boolean {
|
||||
return corePreferences.chatRoomMuted(id)
|
||||
}
|
||||
}
|
||||
|
||||
abstract class ChatRoomDataListener {
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ import androidx.core.content.ContextCompat
|
|||
import androidx.databinding.DataBindingUtil
|
||||
import androidx.databinding.ViewDataBinding
|
||||
import org.linphone.R
|
||||
import org.linphone.databinding.DialogAssistantAcceptConditionsAndPolicyBinding
|
||||
import org.linphone.databinding.DialogAssistantCreateAccountConfirmPhoneNumberBinding
|
||||
import org.linphone.databinding.DialogCancelContactChangesBinding
|
||||
import org.linphone.databinding.DialogConfirmZrtpSasBinding
|
||||
|
|
@ -38,6 +39,7 @@ import org.linphone.databinding.DialogContactConfirmTrustCallBinding
|
|||
import org.linphone.databinding.DialogContactTrustProcessBinding
|
||||
import org.linphone.databinding.DialogPickNumberOrAddressBinding
|
||||
import org.linphone.databinding.DialogRemoveAllCallLogsBinding
|
||||
import org.linphone.ui.assistant.model.AcceptConditionsAndPolicyDialogModel
|
||||
import org.linphone.ui.assistant.model.ConfirmPhoneNumberDialogModel
|
||||
import org.linphone.ui.main.calls.model.ConfirmationDialogModel
|
||||
import org.linphone.ui.main.contacts.model.NumberOrAddressPickerDialogModel
|
||||
|
|
@ -46,6 +48,22 @@ import org.linphone.ui.voip.model.ZrtpSasConfirmationDialogModel
|
|||
|
||||
class DialogUtils {
|
||||
companion object {
|
||||
@UiThread
|
||||
fun getAcceptConditionsAndPrivacyDialog(
|
||||
context: Context,
|
||||
viewModel: AcceptConditionsAndPolicyDialogModel
|
||||
): Dialog {
|
||||
val binding: DialogAssistantAcceptConditionsAndPolicyBinding = DataBindingUtil.inflate(
|
||||
LayoutInflater.from(context),
|
||||
R.layout.dialog_assistant_accept_conditions_and_policy,
|
||||
null,
|
||||
false
|
||||
)
|
||||
binding.viewModel = viewModel
|
||||
|
||||
return getDialog(context, binding)
|
||||
}
|
||||
|
||||
@UiThread
|
||||
fun getAccountCreationPhoneNumberConfirmationDialog(
|
||||
context: Context,
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
<import type="android.view.View" />
|
||||
<variable
|
||||
name="viewModel"
|
||||
type="org.linphone.ui.assistant.model.ConfirmConditionsAndPolicyDialogModel" />
|
||||
type="org.linphone.ui.assistant.model.AcceptConditionsAndPolicyDialogModel" />
|
||||
</data>
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
|
|
@ -63,7 +63,7 @@
|
|||
android:layout_marginStart="15dp"
|
||||
android:layout_marginEnd="15dp"
|
||||
android:layout_marginTop="10dp"
|
||||
android:text="En continuant, vous acceptez ces conditions, notre politique de confidentialité et nos conditions d'utilisation."
|
||||
android:text="En continuant, vous notre politique de confidentialité et nos conditions d'utilisation."
|
||||
android:textSize="14sp"
|
||||
app:layout_constraintBottom_toTopOf="@id/cancel"
|
||||
app:layout_constraintStart_toStartOf="@id/dialog_background"
|
||||
|
|
@ -71,7 +71,7 @@
|
|||
app:layout_constraintTop_toBottomOf="@id/title" />
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:onClick="@{() -> viewModel.denyConditions()}"
|
||||
android:onClick="@{() -> viewModel.dismiss()}"
|
||||
style="@style/default_text_style_600"
|
||||
android:id="@+id/cancel"
|
||||
android:layout_width="0dp"
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue