diff --git a/chooloolib/src/main/java/com/chooloo/www/chooloolib/adapter/PhonesAdapter.kt b/chooloolib/src/main/java/com/chooloo/www/chooloolib/adapter/PhonesAdapter.kt index 033a2257d..f55099950 100644 --- a/chooloolib/src/main/java/com/chooloo/www/chooloolib/adapter/PhonesAdapter.kt +++ b/chooloolib/src/main/java/com/chooloo/www/chooloolib/adapter/PhonesAdapter.kt @@ -3,26 +3,28 @@ package com.chooloo.www.chooloolib.adapter import android.provider.ContactsContract.CommonDataKinds.Phone import com.chooloo.www.chooloolib.R import com.chooloo.www.chooloolib.interactor.animation.AnimationsInteractor -import com.chooloo.www.chooloolib.interactor.string.StringsInteractor import com.chooloo.www.chooloolib.model.ListData import com.chooloo.www.chooloolib.model.PhoneAccount import com.chooloo.www.chooloolib.ui.widgets.listitem.ListItem import javax.inject.Inject class PhonesAdapter @Inject constructor( - animationsInteractor: AnimationsInteractor, - private val strings: StringsInteractor -) : ListAdapter(animationsInteractor) { + animations: AnimationsInteractor +) : ListAdapter(animations) { override fun onBindListItem(listItem: ListItem, item: PhoneAccount) { listItem.apply { + background = null imageVisibility = false titleText = item.number + isLeftButtonVisible = true isRightButtonVisible = true captionText = Phone.getTypeLabel(resources, item.type, item.label).toString() setTitleBold(true) - setBackground(null) setRightButtonDrawable(R.drawable.round_call_20) + setLeftButtonTintColor(R.color.green_foreground) + setLeftButtonDrawable(R.drawable.round_whatsapp_20) + setLeftButtonBackgroundTintColor(R.color.green_background) } } diff --git a/chooloolib/src/main/java/com/chooloo/www/chooloolib/interactor/navigation/NavigationsInteractor.kt b/chooloolib/src/main/java/com/chooloo/www/chooloolib/interactor/navigation/NavigationsInteractor.kt index 4b06883bb..2bbf176d8 100644 --- a/chooloolib/src/main/java/com/chooloo/www/chooloolib/interactor/navigation/NavigationsInteractor.kt +++ b/chooloolib/src/main/java/com/chooloo/www/chooloolib/interactor/navigation/NavigationsInteractor.kt @@ -14,6 +14,7 @@ interface NavigationsInteractor : BaseInteractor fun manageBlockedNumber() fun goToLauncherActivity() fun sendSMS(number: String?) + fun openWhatsapp(number: String?) fun addContact(number: String) fun viewContact(contactId: Long) fun editContact(contactId: Long) diff --git a/chooloolib/src/main/java/com/chooloo/www/chooloolib/interactor/navigation/NavigationsInteractorImpl.kt b/chooloolib/src/main/java/com/chooloo/www/chooloolib/interactor/navigation/NavigationsInteractorImpl.kt index 445a8a425..b50e4c597 100644 --- a/chooloolib/src/main/java/com/chooloo/www/chooloolib/interactor/navigation/NavigationsInteractorImpl.kt +++ b/chooloolib/src/main/java/com/chooloo/www/chooloolib/interactor/navigation/NavigationsInteractorImpl.kt @@ -93,6 +93,14 @@ class NavigationsInteractorImpl @Inject constructor( ) } + override fun openWhatsapp(number: String?) { + context.startActivity( + Intent(ACTION_VIEW) + .setData(Uri.parse("http://api.whatsapp.com/send?phone=$number")) + .addFlags(FLAG_ACTIVITY_NEW_TASK) + ) + } + override fun addContact(number: String) { context.startActivity( Intent(ACTION_INSERT) diff --git a/chooloolib/src/main/java/com/chooloo/www/chooloolib/ui/briefcontact/BriefContactFragment.kt b/chooloolib/src/main/java/com/chooloo/www/chooloolib/ui/briefcontact/BriefContactFragment.kt index fd1e9f8b6..528c61ff2 100644 --- a/chooloolib/src/main/java/com/chooloo/www/chooloolib/ui/briefcontact/BriefContactFragment.kt +++ b/chooloolib/src/main/java/com/chooloo/www/chooloolib/ui/briefcontact/BriefContactFragment.kt @@ -9,6 +9,7 @@ import com.chooloo.www.chooloolib.di.factory.fragment.FragmentFactory import com.chooloo.www.chooloolib.interactor.call.CallNavigationsInteractor import com.chooloo.www.chooloolib.interactor.dialog.DialogsInteractor import com.chooloo.www.chooloolib.interactor.permission.PermissionsInteractor +import com.chooloo.www.chooloolib.interactor.prompt.PromptsInteractor import com.chooloo.www.chooloolib.ui.base.BaseFragment import dagger.hilt.android.AndroidEntryPoint import javax.inject.Inject @@ -21,15 +22,16 @@ open class BriefContactFragment @Inject constructor() : BaseFragment + ev.ifNew?.let { prompts.showFragment(fragmentFactory.getRecentsFragment(it)) } + } onContactId(args.getLong(ARG_CONTACT_ID)) } childFragmentManager .beginTransaction() - .replace(binding.contactPhonesFragmentContainer.id, phonesFragment) + .replace(binding.briefContactPhonesFragmentContainer.id, phonesFragment) .commitNow() } diff --git a/chooloolib/src/main/java/com/chooloo/www/chooloolib/ui/briefcontact/BriefContactViewState.kt b/chooloolib/src/main/java/com/chooloo/www/chooloolib/ui/briefcontact/BriefContactViewState.kt index a5c798231..d77a8a8ef 100644 --- a/chooloolib/src/main/java/com/chooloo/www/chooloolib/ui/briefcontact/BriefContactViewState.kt +++ b/chooloolib/src/main/java/com/chooloo/www/chooloolib/ui/briefcontact/BriefContactViewState.kt @@ -30,7 +30,8 @@ class BriefContactViewState @Inject constructor( val callEvent = DataLiveEvent() val confirmContactDeleteEvent = LiveEvent() - + val showHistoryEvent = DataLiveEvent() + private var contact: ContactAccount? = null @@ -79,6 +80,10 @@ class BriefContactViewState @Inject constructor( } } + fun onActionHistory() { + contact?.name?.let { showHistoryEvent.call(it) } + } + fun onActionStar(isActivate: Boolean) { contactId.value?.let { contacts.toggleContactFavorite(it, !isActivate) } isStarIconActivated.value = !isActivate diff --git a/chooloolib/src/main/java/com/chooloo/www/chooloolib/ui/phones/PhonesViewState.kt b/chooloolib/src/main/java/com/chooloo/www/chooloolib/ui/phones/PhonesViewState.kt index 1722d9e50..539f38e85 100644 --- a/chooloolib/src/main/java/com/chooloo/www/chooloolib/ui/phones/PhonesViewState.kt +++ b/chooloolib/src/main/java/com/chooloo/www/chooloolib/ui/phones/PhonesViewState.kt @@ -7,6 +7,7 @@ import android.content.ClipboardManager import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import com.chooloo.www.chooloolib.R +import com.chooloo.www.chooloolib.interactor.navigation.NavigationsInteractor import com.chooloo.www.chooloolib.interactor.permission.PermissionsInteractor import com.chooloo.www.chooloolib.livedata.contentprovider.PhonesProviderLiveData import com.chooloo.www.chooloolib.model.PhoneAccount @@ -18,6 +19,7 @@ import javax.inject.Inject @HiltViewModel class PhonesViewState @Inject constructor( + private val navigations: NavigationsInteractor, private val permissions: PermissionsInteractor, private val phonesRepository: PhonesRepository, private val clipboardManager: ClipboardManager @@ -52,6 +54,11 @@ class PhonesViewState @Inject constructor( }) } + override fun onItemLeftClick(item: PhoneAccount) { + super.onItemLeftClick(item) + navigations.openWhatsapp(item.number) + } + override fun onItemLongClick(item: PhoneAccount) { clipboardManager.setPrimaryClip( ClipData.newPlainText("Copied number", item.number) diff --git a/chooloolib/src/main/java/com/chooloo/www/chooloolib/ui/recent/RecentFragment.kt b/chooloolib/src/main/java/com/chooloo/www/chooloolib/ui/recent/RecentFragment.kt index 638e9dd60..5d81506ea 100644 --- a/chooloolib/src/main/java/com/chooloo/www/chooloolib/ui/recent/RecentFragment.kt +++ b/chooloolib/src/main/java/com/chooloo/www/chooloolib/ui/recent/RecentFragment.kt @@ -38,6 +38,10 @@ class RecentFragment @Inject constructor() : BaseFragment() { viewState.onActionCall() } + recentButtonBlock.setOnClickListener { + viewState.onActionBlock(!viewState.isBlockButtonActivated.value!!) + } + recentButtonDelete.setOnClickListener { viewState.onActionDelete() } @@ -46,6 +50,10 @@ class RecentFragment @Inject constructor() : BaseFragment() { viewState.onActionOpenContact() } + recentButtonWhatsapp.setOnClickListener { + viewState.onActionOpenWhatsapp() + } + recentButtonAddContact.setOnClickListener { viewState.onActionAddContact() } @@ -53,10 +61,6 @@ class RecentFragment @Inject constructor() : BaseFragment() { recentButtonShowHistory.setOnClickListener { viewState.onActionShowHistory() } - - recentButtonBlock.setOnClickListener { - viewState.onActionBlock(!viewState.isBlockButtonActivated.value!!) - } } viewState.apply { diff --git a/chooloolib/src/main/java/com/chooloo/www/chooloolib/ui/recent/RecentViewState.kt b/chooloolib/src/main/java/com/chooloo/www/chooloolib/ui/recent/RecentViewState.kt index ec7957a05..76ee81330 100644 --- a/chooloolib/src/main/java/com/chooloo/www/chooloolib/ui/recent/RecentViewState.kt +++ b/chooloolib/src/main/java/com/chooloo/www/chooloolib/ui/recent/RecentViewState.kt @@ -109,6 +109,10 @@ class RecentViewState @Inject constructor( _recent?.let { showHistoryEvent.call(it.number) } } + fun onActionOpenWhatsapp() { + navigations.openWhatsapp(_recent?.number) + } + fun onActionBlock(isBlock: Boolean) { permissions.runWithDefaultDialer(R.string.error_not_default_dialer_blocked) { _recent?.number?.let { diff --git a/chooloolib/src/main/res/drawable/round_whatsapp_20.xml b/chooloolib/src/main/res/drawable/round_whatsapp_20.xml new file mode 100644 index 000000000..f1fe23367 --- /dev/null +++ b/chooloolib/src/main/res/drawable/round_whatsapp_20.xml @@ -0,0 +1,10 @@ + + + diff --git a/chooloolib/src/main/res/drawable/round_whatsapp_24.xml b/chooloolib/src/main/res/drawable/round_whatsapp_24.xml new file mode 100644 index 000000000..82a2a5d01 --- /dev/null +++ b/chooloolib/src/main/res/drawable/round_whatsapp_24.xml @@ -0,0 +1,10 @@ + + + diff --git a/chooloolib/src/main/res/layout/brief_contact.xml b/chooloolib/src/main/res/layout/brief_contact.xml index 286d28b73..7620caa11 100644 --- a/chooloolib/src/main/res/layout/brief_contact.xml +++ b/chooloolib/src/main/res/layout/brief_contact.xml @@ -58,7 +58,7 @@ app:layout_constraintTop_toBottomOf="@id/brief_contact_text_name" /> + + + + + app:layout_constraintTop_toBottomOf="@id/brief_contact_button_history" /> diff --git a/chooloolib/src/main/res/layout/recent.xml b/chooloolib/src/main/res/layout/recent.xml index 3b7b60fd2..b98861708 100644 --- a/chooloolib/src/main/res/layout/recent.xml +++ b/chooloolib/src/main/res/layout/recent.xml @@ -163,16 +163,30 @@ + + + app:layout_constraintTop_toBottomOf="@id/recent_button_whatsapp" /> diff --git a/chooloolib/src/main/res/values/strings.xml b/chooloolib/src/main/res/values/strings.xml index d67e63916..3c6104de8 100644 --- a/chooloolib/src/main/res/values/strings.xml +++ b/chooloolib/src/main/res/values/strings.xml @@ -26,6 +26,7 @@ Answer Hangup Show History + Open WhatsApp Block Number Unblock Number Choose audio route diff --git a/kontacts/src/main/java/com/chooloo/www/kontacts/ui/contact/ContactFragment.kt b/kontacts/src/main/java/com/chooloo/www/kontacts/ui/contact/ContactFragment.kt index f4eb6e30f..de9e4d12a 100644 --- a/kontacts/src/main/java/com/chooloo/www/kontacts/ui/contact/ContactFragment.kt +++ b/kontacts/src/main/java/com/chooloo/www/kontacts/ui/contact/ContactFragment.kt @@ -4,6 +4,7 @@ import android.os.Bundle import androidx.fragment.app.activityViewModels import com.chooloo.www.chooloolib.di.factory.fragment.FragmentFactory import com.chooloo.www.chooloolib.interactor.call.CallNavigationsInteractor +import com.chooloo.www.chooloolib.interactor.prompt.PromptsInteractor import com.chooloo.www.chooloolib.ui.base.BaseFragment import com.chooloo.www.chooloolib.ui.phones.PhonesFragment import com.chooloo.www.kontacts.databinding.ContactBinding @@ -18,6 +19,7 @@ class ContactFragment : BaseFragment() { private val binding by lazy { ContactBinding.inflate(layoutInflater) } private val phonesFragment by lazy { fragmentFactory.getPhonesFragment() } + @Inject lateinit var prompts: PromptsInteractor @Inject lateinit var fragmentFactory: FragmentFactory @Inject lateinit var callNavigations: CallNavigationsInteractor @@ -39,6 +41,12 @@ class ContactFragment : BaseFragment() { contactImage.observe(this@ContactFragment) { binding.contactImage.setImageURI(it) } + + showHistoryEvent.observe(this@ContactFragment) { + it.ifNew?.let { + prompts.showFragment(fragmentFactory.getRecentsFragment(it)) + } + } } binding.apply { @@ -46,6 +54,8 @@ class ContactFragment : BaseFragment() { contactButtonCall.setOnClickListener { viewState.onCallClick() } contactButtonEdit.setOnClickListener { viewState.onEditClick() } contactButtonDelete.setOnClickListener { viewState.onDeleteClick() } + contactButtonHistory.setOnClickListener { viewState.onHistoryClick() } + contactButtonWhatsapp.setOnClickListener { viewState.onWhatsappClick() } } arguments?.getLong(ARG_CONTACT_ID)?.let { viewState.onContactId(it) } diff --git a/kontacts/src/main/java/com/chooloo/www/kontacts/ui/contact/ContactViewState.kt b/kontacts/src/main/java/com/chooloo/www/kontacts/ui/contact/ContactViewState.kt index d4e1e34ed..fd80258d1 100644 --- a/kontacts/src/main/java/com/chooloo/www/kontacts/ui/contact/ContactViewState.kt +++ b/kontacts/src/main/java/com/chooloo/www/kontacts/ui/contact/ContactViewState.kt @@ -23,6 +23,7 @@ class ContactViewState @Inject constructor( val contactImage = MutableLiveData() val contactName = MutableLiveData() var isFavorite = MutableLiveData() + val showHistoryEvent = DataLiveEvent() private var contact: ContactAccount? = null @@ -55,6 +56,14 @@ class ContactViewState @Inject constructor( fun onEditClick() { } + fun onHistoryClick() { + contact?.name?.let { showHistoryEvent.call(it) } + } + + fun onWhatsappClick() { + + } + fun onDeleteClick() { contact?.let { contacts.deleteContact(it.id) diff --git a/kontacts/src/main/res/layout/contact.xml b/kontacts/src/main/res/layout/contact.xml index 0801a1e7d..86c97d515 100644 --- a/kontacts/src/main/res/layout/contact.xml +++ b/kontacts/src/main/res/layout/contact.xml @@ -31,50 +31,76 @@ android:layout_width="@dimen/icon_button_size_normal" android:layout_height="@dimen/icon_button_size_normal" android:layout_marginTop="@dimen/default_spacing_big" - app:layout_constraintEnd_toStartOf="@id/contact_button_edit" + app:layout_constraintEnd_toStartOf="@id/brief_contact_button_edit" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/contact_name" android:src="@drawable/round_call_24" app:size="normal" /> + + + + diff --git a/kontacts/src/main/res/xml/contact_scene.xml b/kontacts/src/main/res/xml/contact_scene.xml index f863636c4..ecd43a84c 100644 --- a/kontacts/src/main/res/xml/contact_scene.xml +++ b/kontacts/src/main/res/xml/contact_scene.xml @@ -24,31 +24,31 @@ android:layout_width="@dimen/icon_button_size_normal" android:layout_height="@dimen/icon_button_size_normal" android:layout_marginTop="@dimen/default_spacing_big" - app:layout_constraintEnd_toStartOf="@id/contact_button_edit" + app:layout_constraintEnd_toStartOf="@id/brief_contact_button_edit" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/contact_name" />