diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/MainActivity.kt index 8ad84e5c..be34c253 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/MainActivity.kt @@ -35,6 +35,7 @@ import com.simplemobiletools.contacts.pro.dialogs.ImportContactsDialog import com.simplemobiletools.contacts.pro.extensions.config import com.simplemobiletools.contacts.pro.extensions.getTempFile import com.simplemobiletools.contacts.pro.extensions.handleGenericContactClick +import com.simplemobiletools.contacts.pro.fragments.FavoritesFragment import com.simplemobiletools.contacts.pro.fragments.MyViewPagerFragment import com.simplemobiletools.contacts.pro.helpers.ALL_TABS_MASK import com.simplemobiletools.contacts.pro.helpers.ContactsHelper @@ -185,8 +186,9 @@ class MainActivity : SimpleActivity(), RefreshContactsListener { } override fun onOptionsItemSelected(item: MenuItem): Boolean { + when (item.itemId) { - R.id.sort -> showSortingDialog() + R.id.sort -> showSortingDialog(showCustomSorting = getCurrentFragment() is FavoritesFragment) R.id.filter -> showFilterDialog() R.id.dialpad -> launchDialpad() R.id.import_contacts -> tryImportContacts() @@ -410,8 +412,8 @@ class MainActivity : SimpleActivity(), RefreshContactsListener { } } - private fun showSortingDialog() { - ChangeSortingDialog(this) { + private fun showSortingDialog(showCustomSorting: Boolean) { + ChangeSortingDialog(this, showCustomSorting) { refreshContacts(TAB_CONTACTS or TAB_FAVORITES) } } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/adapters/ContactsAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/adapters/ContactsAdapter.kt index 656d6eb0..f148e47a 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/adapters/ContactsAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/adapters/ContactsAdapter.kt @@ -450,7 +450,8 @@ class ContactsAdapter( override fun onChange(position: Int) = contactItems.getOrNull(position)?.getBubbleText() ?: "" override fun onRowMoved(fromPosition: Int, toPosition: Int) { - activity.config.sorting = SORT_BY_CUSTOM + activity.config.isCustomOrderSelected = true + if (fromPosition < toPosition) { for (i in fromPosition until toPosition) { Collections.swap(contactItems, i, i + 1) @@ -460,6 +461,7 @@ class ContactsAdapter( Collections.swap(contactItems, i, i - 1) } } + notifyItemMoved(fromPosition, toPosition) } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/dialogs/ChangeSortingDialog.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/dialogs/ChangeSortingDialog.kt index c6b0035a..e4cbde6c 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/dialogs/ChangeSortingDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/dialogs/ChangeSortingDialog.kt @@ -9,7 +9,7 @@ import com.simplemobiletools.contacts.pro.R import com.simplemobiletools.contacts.pro.extensions.config import kotlinx.android.synthetic.main.dialog_change_sorting.view.* -class ChangeSortingDialog(val activity: BaseSimpleActivity, private val callback: () -> Unit) { +class ChangeSortingDialog(val activity: BaseSimpleActivity, private val showCustomSorting: Boolean = false, private val callback: () -> Unit) { private var currSorting = 0 private var config = activity.config private var view = activity.layoutInflater.inflate(R.layout.dialog_change_sorting, null) @@ -22,7 +22,16 @@ class ChangeSortingDialog(val activity: BaseSimpleActivity, private val callback activity.setupDialogStuff(view, this, R.string.sort_by) } - currSorting = config.sorting + currSorting = if (showCustomSorting) { + if (config.isCustomOrderSelected) { + SORT_BY_CUSTOM + } else { + config.sorting + } + } else { + config.sorting + } + setupSortRadio() setupOrderRadio() } @@ -44,6 +53,11 @@ class ChangeSortingDialog(val activity: BaseSimpleActivity, private val callback else -> sortingRadio.sorting_dialog_radio_date_created } sortBtn.isChecked = true + + if (showCustomSorting) { + sortingRadio.sorting_dialog_radio_custom.isChecked = config.isCustomOrderSelected + } + view.sorting_dialog_radio_custom.beGoneIf(!showCustomSorting) } private fun setupOrderRadio() { @@ -71,7 +85,17 @@ class ChangeSortingDialog(val activity: BaseSimpleActivity, private val callback sorting = sorting or SORT_DESCENDING } - config.sorting = sorting + if (showCustomSorting) { + if (sorting == SORT_BY_CUSTOM) { + config.isCustomOrderSelected = true + } else { + config.isCustomOrderSelected = false + config.sorting = sorting + } + } else { + config.sorting = sorting + } + callback() } } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/fragments/MyViewPagerFragment.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/fragments/MyViewPagerFragment.kt index 5bcc0aa6..12703321 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/fragments/MyViewPagerFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/fragments/MyViewPagerFragment.kt @@ -128,7 +128,7 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet) this is FavoritesFragment -> { val favorites = contacts.filter { it.starred == 1 } as ArrayList - if (activity!!.config.sorting == SORT_BY_CUSTOM) { + if (activity!!.config.isCustomOrderSelected) { sortByCustomOrder(favorites) } else { favorites diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/Config.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/Config.kt index ef11b261..4c584f9c 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/Config.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/Config.kt @@ -70,4 +70,8 @@ class Config(context: Context) : BaseConfig(context) { var favoritesContactsOrder: String get() = prefs.getString(FAVORITES_CONTACTS_ORDER, "")!! set(order) = prefs.edit().putString(FAVORITES_CONTACTS_ORDER, order).apply() + + var isCustomOrderSelected: Boolean + get() = prefs.getBoolean(FAVORITES_CUSTOM_ORDER_SELECTED, false) + set(selected) = prefs.edit().putBoolean(FAVORITES_CUSTOM_ORDER_SELECTED, selected).apply() } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/Constants.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/Constants.kt index d345ad93..ef821611 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/Constants.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/Constants.kt @@ -23,6 +23,7 @@ const val WAS_LOCAL_ACCOUNT_INITIALIZED = "was_local_account_initialized" const val SHOW_PRIVATE_CONTACTS = "show_private_contacts" const val MERGE_DUPLICATE_CONTACTS = "merge_duplicate_contacts" const val FAVORITES_CONTACTS_ORDER = "favorites_contacts_order" +const val FAVORITES_CUSTOM_ORDER_SELECTED = "favorites_custom_order_selected" const val SMT_PRIVATE = "smt_private" // used at the contact source of local contacts hidden from other apps const val GROUP = "group"