diff --git a/app/src/main/java/org/linphone/ui/assistant/adapter/CountryPickerAdapter.kt b/app/src/main/java/org/linphone/ui/assistant/adapter/CountryPickerAdapter.kt
deleted file mode 100644
index 7abbe6c9c..000000000
--- a/app/src/main/java/org/linphone/ui/assistant/adapter/CountryPickerAdapter.kt
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright (c) 2010-2020 Belledonne Communications SARL.
- *
- * This file is part of linphone-android
- * (see https://www.linphone.org).
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package org.linphone.ui.assistant.adapter
-
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import android.widget.BaseAdapter
-import android.widget.Filter
-import android.widget.Filterable
-import android.widget.TextView
-import kotlin.collections.ArrayList
-import org.linphone.R
-import org.linphone.core.DialPlan
-import org.linphone.core.Factory
-
-class CountryPickerAdapter : BaseAdapter(), Filterable {
- private var countries: ArrayList
-
- init {
- val dialPlans = Factory.instance().dialPlans
- countries = arrayListOf()
- countries.addAll(dialPlans)
- }
-
- override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
- val view: View = convertView ?: LayoutInflater.from(parent.context).inflate(
- R.layout.assistant_country_picker_cell,
- parent,
- false
- )
- val dialPlan: DialPlan = countries[position]
-
- val flag = view.findViewById(R.id.country_flag)
- flag.text = dialPlan.flag
-
- val name = view.findViewById(R.id.country_name)
- name.text = dialPlan.country
-
- val dialCode = view.findViewById(R.id.country_prefix)
- dialCode.text = String.format("(%s)", dialPlan.countryCallingCode)
-
- view.tag = dialPlan
- return view
- }
-
- override fun getItem(position: Int): DialPlan {
- return countries[position]
- }
-
- override fun getItemId(position: Int): Long {
- return position.toLong()
- }
-
- override fun getCount(): Int {
- return countries.size
- }
-
- override fun getFilter(): Filter {
- return object : Filter() {
- override fun performFiltering(constraint: CharSequence): FilterResults {
- val filteredCountries = arrayListOf()
- for (dialPlan in Factory.instance().dialPlans) {
- if (dialPlan.country.contains(constraint, ignoreCase = true) ||
- dialPlan.countryCallingCode.contains(constraint)
- ) {
- filteredCountries.add(dialPlan)
- }
- }
- val filterResults = FilterResults()
- filterResults.values = filteredCountries
- return filterResults
- }
-
- @Suppress("UNCHECKED_CAST")
- override fun publishResults(
- constraint: CharSequence,
- results: FilterResults
- ) {
- countries = results.values as ArrayList
- notifyDataSetChanged()
- }
- }
- }
-}
diff --git a/app/src/main/java/org/linphone/ui/assistant/fragment/CountryPickerFragment.kt b/app/src/main/java/org/linphone/ui/assistant/fragment/CountryPickerFragment.kt
deleted file mode 100644
index 5fdbf0319..000000000
--- a/app/src/main/java/org/linphone/ui/assistant/fragment/CountryPickerFragment.kt
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (c) 2010-2020 Belledonne Communications SARL.
- *
- * This file is part of linphone-android
- * (see https://www.linphone.org).
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package org.linphone.ui.assistant.fragment
-
-import android.os.Bundle
-import android.text.Editable
-import android.text.TextWatcher
-import android.view.*
-import androidx.annotation.UiThread
-import androidx.fragment.app.DialogFragment
-import org.linphone.R
-import org.linphone.core.DialPlan
-import org.linphone.databinding.AssistantCountryPickerFragmentBinding
-import org.linphone.ui.assistant.adapter.CountryPickerAdapter
-
-@UiThread
-class CountryPickerFragment : DialogFragment() {
- private var _binding: AssistantCountryPickerFragmentBinding? = null
- private val binding get() = _binding!!
- private lateinit var adapter: CountryPickerAdapter
-
- var listener: CountryPickedListener? = null
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- setStyle(STYLE_NO_TITLE, R.style.Theme_LinphoneDialog)
- }
-
- override fun onDestroyView() {
- super.onDestroyView()
- _binding = null
- }
-
- override fun onCreateView(
- inflater: LayoutInflater,
- container: ViewGroup?,
- savedInstanceState: Bundle?
- ): View {
- _binding = AssistantCountryPickerFragmentBinding.inflate(inflater, container, false)
-
- adapter = CountryPickerAdapter()
- binding.countryList.adapter = adapter
-
- binding.countryList.setOnItemClickListener { _, _, position, _ ->
- if (position >= 0 && position < adapter.count) {
- val dialPlan = adapter.getItem(position)
- listener?.onCountryClicked(dialPlan)
- }
- dismiss()
- }
-
- binding.searchCountry.addTextChangedListener(object : TextWatcher {
- override fun afterTextChanged(s: Editable?) {
- adapter.filter.filter(s)
- }
-
- override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { }
-
- override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { }
- })
-
- binding.setCancelClickListener {
- dismiss()
- }
-
- return binding.root
- }
-
- interface CountryPickedListener {
- fun onCountryClicked(dialPlan: DialPlan)
- }
-}
diff --git a/app/src/main/java/org/linphone/ui/assistant/fragment/RegisterFragment.kt b/app/src/main/java/org/linphone/ui/assistant/fragment/RegisterFragment.kt
index e843ea428..b713412f3 100644
--- a/app/src/main/java/org/linphone/ui/assistant/fragment/RegisterFragment.kt
+++ b/app/src/main/java/org/linphone/ui/assistant/fragment/RegisterFragment.kt
@@ -27,6 +27,8 @@ import android.text.TextWatcher
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import android.widget.AdapterView
+import android.widget.ArrayAdapter
import androidx.annotation.UiThread
import androidx.fragment.app.Fragment
import androidx.lifecycle.lifecycleScope
@@ -56,6 +58,19 @@ class RegisterFragment : Fragment() {
R.id.assistant_nav_graph
)
+ private val dropdownListener = object : AdapterView.OnItemSelectedListener {
+ override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
+ val dialPlan = viewModel.dialPlansList[position]
+ Log.i(
+ "$TAG Selected dialplan updated [+${dialPlan.countryCallingCode}] / [${dialPlan.country}]"
+ )
+ viewModel.selectedDialPlan.value = dialPlan
+ }
+
+ override fun onNothingSelected(parent: AdapterView<*>?) {
+ }
+ }
+
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
@@ -79,12 +94,6 @@ class RegisterFragment : Fragment() {
goBack()
}
- binding.setShowCountryPickerClickListener {
- val countryPickerFragment = CountryPickerFragment()
- countryPickerFragment.listener = viewModel
- countryPickerFragment.show(childFragmentManager, "CountryPicker")
- }
-
binding.setOpenSubscribeWebPageClickListener {
val url = getString(R.string.web_platform_register_email_url)
try {
@@ -148,9 +157,24 @@ class RegisterFragment : Fragment() {
}
coreContext.postOnCoreThread {
+ val adapter = ArrayAdapter(
+ requireContext(),
+ R.layout.drop_down_item,
+ viewModel.dialPlansLabelList
+ )
+ adapter.setDropDownViewResource(R.layout.assistant_country_picker_dropdown_cell)
+
val dialPlan = PhoneNumberUtils.getDeviceDialPlan(requireContext())
+ var default = 0
if (dialPlan != null) {
- viewModel.setDialPlan(dialPlan)
+ viewModel.selectedDialPlan.postValue(dialPlan)
+ default = viewModel.dialPlansList.indexOf(dialPlan)
+ }
+
+ coreContext.postOnMainThread {
+ binding.prefix.adapter = adapter
+ binding.prefix.setSelection(default)
+ binding.prefix.onItemSelectedListener = dropdownListener
}
}
}
diff --git a/app/src/main/java/org/linphone/ui/assistant/fragment/ThirdPartySipAccountLoginFragment.kt b/app/src/main/java/org/linphone/ui/assistant/fragment/ThirdPartySipAccountLoginFragment.kt
index 8bd26c1a3..06a5e5a36 100644
--- a/app/src/main/java/org/linphone/ui/assistant/fragment/ThirdPartySipAccountLoginFragment.kt
+++ b/app/src/main/java/org/linphone/ui/assistant/fragment/ThirdPartySipAccountLoginFragment.kt
@@ -84,7 +84,7 @@ class ThirdPartySipAccountLoginFragment : Fragment() {
R.layout.drop_down_item,
viewModel.availableTransports
)
- adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
+ adapter.setDropDownViewResource(R.layout.assistant_transport_dropdown_cell)
binding.transport.adapter = adapter
binding.transport.onItemSelectedListener = dropdownListener
binding.transport.setSelection(viewModel.availableTransports.size - 1)
diff --git a/app/src/main/java/org/linphone/ui/assistant/viewmodel/AccountCreationViewModel.kt b/app/src/main/java/org/linphone/ui/assistant/viewmodel/AccountCreationViewModel.kt
index 0724df8e9..4891be12a 100644
--- a/app/src/main/java/org/linphone/ui/assistant/viewmodel/AccountCreationViewModel.kt
+++ b/app/src/main/java/org/linphone/ui/assistant/viewmodel/AccountCreationViewModel.kt
@@ -42,12 +42,12 @@ import org.linphone.core.AccountCreatorListenerStub
import org.linphone.core.Core
import org.linphone.core.CoreListenerStub
import org.linphone.core.DialPlan
+import org.linphone.core.Factory
import org.linphone.core.tools.Log
-import org.linphone.ui.assistant.fragment.CountryPickerFragment
import org.linphone.utils.AppUtils
import org.linphone.utils.Event
-class AccountCreationViewModel @UiThread constructor() : ViewModel(), CountryPickerFragment.CountryPickedListener {
+class AccountCreationViewModel @UiThread constructor() : ViewModel() {
companion object {
private const val TAG = "[Account Creation ViewModel]"
}
@@ -64,9 +64,11 @@ class AccountCreationViewModel @UiThread constructor() : ViewModel(), CountryPic
val phoneNumberError = MutableLiveData()
- val selectedDialPlan = MutableLiveData()
+ val dialPlansLabelList = arrayListOf()
- val internationalPrefix = MutableLiveData()
+ val dialPlansList = arrayListOf()
+
+ val selectedDialPlan = MutableLiveData()
val showPassword = MutableLiveData()
@@ -272,6 +274,12 @@ class AccountCreationViewModel @UiThread constructor() : ViewModel(), CountryPic
operationInProgress.value = false
coreContext.postOnCoreThread { core ->
+ val dialPlans = Factory.instance().dialPlans.toList()
+ for (dialPlan in dialPlans) {
+ dialPlansList.add(dialPlan)
+ dialPlansLabelList.add("${dialPlan.flag} +${dialPlan.countryCallingCode}")
+ }
+
accountCreator = core.createAccountCreator(core.accountCreatorUrl)
accountCreator.addListener(accountCreatorListener)
core.addListener(coreListener)
@@ -293,18 +301,6 @@ class AccountCreationViewModel @UiThread constructor() : ViewModel(), CountryPic
}
}
- @UiThread
- override fun onCountryClicked(dialPlan: DialPlan) {
- coreContext.postOnCoreThread {
- setDialPlan(dialPlan)
- }
- }
-
- @WorkerThread
- fun setDialPlan(dialPlan: DialPlan) {
- internationalPrefix.postValue("${dialPlan.flag} +${dialPlan.countryCallingCode}")
- }
-
@UiThread
override fun onCleared() {
coreContext.postOnCoreThread { core ->
diff --git a/app/src/main/res/layout/assistant_country_picker_dropdown_cell.xml b/app/src/main/res/layout/assistant_country_picker_dropdown_cell.xml
new file mode 100644
index 000000000..737fff4e2
--- /dev/null
+++ b/app/src/main/res/layout/assistant_country_picker_dropdown_cell.xml
@@ -0,0 +1,11 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/assistant_register_fragment.xml b/app/src/main/res/layout/assistant_register_fragment.xml
index 6530c0e24..c23cc3cdf 100644
--- a/app/src/main/res/layout/assistant_register_fragment.xml
+++ b/app/src/main/res/layout/assistant_register_fragment.xml
@@ -12,9 +12,6 @@
-
@@ -136,7 +133,7 @@
android:id="@+id/phone_number"
android:layout_width="0dp"
android:layout_height="50dp"
- android:paddingStart="115dp"
+ android:paddingStart="120dp"
android:paddingEnd="20dp"
android:text="@={viewModel.phoneNumber, default=`6 01 02 03 04 05`}"
android:textSize="14sp"
@@ -151,14 +148,12 @@
app:layout_constraintStart_toStartOf="@id/username"
app:layout_constraintEnd_toEndOf="@id/username"/>
-
+
\ No newline at end of file