diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/CallActivity.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/CallActivity.kt index b172dd5c..7331de0f 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/CallActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/CallActivity.kt @@ -26,13 +26,12 @@ import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.helpers.* import com.simplemobiletools.commons.models.SimpleListItem import com.simplemobiletools.dialer.R +import com.simplemobiletools.dialer.databinding.ActivityCallBinding import com.simplemobiletools.dialer.dialogs.DynamicBottomSheetChooserDialog import com.simplemobiletools.dialer.extensions.* import com.simplemobiletools.dialer.helpers.* import com.simplemobiletools.dialer.models.AudioRoute import com.simplemobiletools.dialer.models.CallContact -import kotlinx.android.synthetic.main.activity_call.* -import kotlinx.android.synthetic.main.dialpad.* import kotlin.math.max import kotlin.math.min @@ -45,6 +44,8 @@ class CallActivity : SimpleActivity() { } } + private val binding by viewBinding(ActivityCallBinding::inflate) + private var isSpeakerOn = false private var isMicrophoneOff = false private var isCallEnded = false @@ -63,14 +64,14 @@ class CallActivity : SimpleActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.activity_call) + setContentView(binding.root) if (CallManager.getPhoneState() == NoCall) { finish() return } - updateTextColors(call_holder) + updateTextColors(binding.callHolder) initButtons() audioManager.mode = AudioManager.MODE_IN_CALL addLockScreenFlags() @@ -104,7 +105,7 @@ class CallActivity : SimpleActivity() { } override fun onBackPressed() { - if (dialpad_wrapper.isVisible()) { + if (binding.dialpadWrapper.isVisible()) { hideDialpad() return } else { @@ -117,119 +118,121 @@ class CallActivity : SimpleActivity() { } } - private fun initButtons() { + private fun initButtons() = binding.apply { if (config.disableSwipeToAnswer) { - call_draggable.beGone() - call_draggable_background.beGone() - call_left_arrow.beGone() - call_right_arrow.beGone() + callDraggable.beGone() + callDraggableBackground.beGone() + callLeftArrow.beGone() + callRightArrow.beGone() - call_decline.setOnClickListener { + callDecline.setOnClickListener { endCall() } - call_accept.setOnClickListener { + callAccept.setOnClickListener { acceptCall() } } else { handleSwipe() } - call_toggle_microphone.setOnClickListener { + callToggleMicrophone.setOnClickListener { toggleMicrophone() } - call_toggle_speaker.setOnClickListener { + callToggleSpeaker.setOnClickListener { changeCallAudioRoute() } - call_dialpad.setOnClickListener { + callDialpad.setOnClickListener { toggleDialpadVisibility() } - dialpad_close.setOnClickListener { + dialpadClose.setOnClickListener { hideDialpad() } - call_toggle_hold.setOnClickListener { + callToggleHold.setOnClickListener { toggleHold() } - call_add.setOnClickListener { + callAdd.setOnClickListener { Intent(applicationContext, DialpadActivity::class.java).apply { addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY) startActivity(this) } } - call_swap.setOnClickListener { + callSwap.setOnClickListener { CallManager.swap() } - call_merge.setOnClickListener { + callMerge.setOnClickListener { CallManager.merge() } - call_manage.setOnClickListener { - startActivity(Intent(this, ConferenceActivity::class.java)) + callManage.setOnClickListener { + startActivity(Intent(this@CallActivity, ConferenceActivity::class.java)) } - call_end.setOnClickListener { + callEnd.setOnClickListener { endCall() } - dialpad_0_holder.setOnClickListener { dialpadPressed('0') } - dialpad_1_holder.setOnClickListener { dialpadPressed('1') } - dialpad_2_holder.setOnClickListener { dialpadPressed('2') } - dialpad_3_holder.setOnClickListener { dialpadPressed('3') } - dialpad_4_holder.setOnClickListener { dialpadPressed('4') } - dialpad_5_holder.setOnClickListener { dialpadPressed('5') } - dialpad_6_holder.setOnClickListener { dialpadPressed('6') } - dialpad_7_holder.setOnClickListener { dialpadPressed('7') } - dialpad_8_holder.setOnClickListener { dialpadPressed('8') } - dialpad_9_holder.setOnClickListener { dialpadPressed('9') } + dialpadInclude.apply { + dialpad0Holder.setOnClickListener { dialpadPressed('0') } + dialpad1Holder.setOnClickListener { dialpadPressed('1') } + dialpad2Holder.setOnClickListener { dialpadPressed('2') } + dialpad3Holder.setOnClickListener { dialpadPressed('3') } + dialpad4Holder.setOnClickListener { dialpadPressed('4') } + dialpad5Holder.setOnClickListener { dialpadPressed('5') } + dialpad6Holder.setOnClickListener { dialpadPressed('6') } + dialpad7Holder.setOnClickListener { dialpadPressed('7') } + dialpad8Holder.setOnClickListener { dialpadPressed('8') } + dialpad9Holder.setOnClickListener { dialpadPressed('9') } - arrayOf( - dialpad_0_holder, - dialpad_1_holder, - dialpad_2_holder, - dialpad_3_holder, - dialpad_4_holder, - dialpad_5_holder, - dialpad_6_holder, - dialpad_7_holder, - dialpad_8_holder, - dialpad_9_holder, - dialpad_plus_holder, - dialpad_asterisk_holder, - dialpad_hashtag_holder - ).forEach { - it.background = ResourcesCompat.getDrawable(resources, R.drawable.pill_background, theme) - it.background?.alpha = LOWER_ALPHA_INT + arrayOf( + dialpad0Holder, + dialpad1Holder, + dialpad2Holder, + dialpad3Holder, + dialpad4Holder, + dialpad5Holder, + dialpad6Holder, + dialpad7Holder, + dialpad8Holder, + dialpad9Holder, + dialpadPlusHolder, + dialpadAsteriskHolder, + dialpadHashtagHolder + ).forEach { + it.background = ResourcesCompat.getDrawable(resources, R.drawable.pill_background, theme) + it.background?.alpha = LOWER_ALPHA_INT + } + + dialpad0Holder.setOnLongClickListener { dialpadPressed('+'); true } + dialpadAsteriskHolder.setOnClickListener { dialpadPressed('*') } + dialpadHashtagHolder.setOnClickListener { dialpadPressed('#') } } - dialpad_0_holder.setOnLongClickListener { dialpadPressed('+'); true } - dialpad_asterisk_holder.setOnClickListener { dialpadPressed('*') } - dialpad_hashtag_holder.setOnClickListener { dialpadPressed('#') } - - dialpad_wrapper.setBackgroundColor(getProperBackgroundColor()) - arrayOf(dialpad_close, call_sim_image).forEach { + dialpadWrapper.setBackgroundColor(getProperBackgroundColor()) + arrayOf(dialpadClose, callSimImage).forEach { it.applyColorFilter(getProperTextColor()) } val bgColor = getProperBackgroundColor() val inactiveColor = getInactiveButtonColor() arrayOf( - call_toggle_microphone, call_toggle_speaker, call_dialpad, - call_toggle_hold, call_add, call_swap, call_merge, call_manage + callToggleMicrophone, callToggleSpeaker, callDialpad, + callToggleHold, callAdd, callSwap, callMerge, callManage ).forEach { it.applyColorFilter(bgColor.getContrastColor()) it.background.applyColorFilter(inactiveColor) } arrayOf( - call_toggle_microphone, call_toggle_speaker, call_dialpad, - call_toggle_hold, call_add, call_swap, call_merge, call_manage + callToggleMicrophone, callToggleSpeaker, callDialpad, + callToggleHold, callAdd, callSwap, callMerge, callManage ).forEach { imageView -> imageView.setOnLongClickListener { if (!imageView.contentDescription.isNullOrEmpty()) { @@ -239,16 +242,16 @@ class CallActivity : SimpleActivity() { } } - call_sim_id.setTextColor(getProperTextColor().getContrastColor()) - dialpad_input.disableKeyboard() + callSimId.setTextColor(getProperTextColor().getContrastColor()) + dialpadInput.disableKeyboard() - dialpad_wrapper.onGlobalLayout { - dialpadHeight = dialpad_wrapper.height.toFloat() + dialpadWrapper.onGlobalLayout { + dialpadHeight = dialpadWrapper.height.toFloat() } } @SuppressLint("ClickableViewAccessibility") - private fun handleSwipe() { + private fun handleSwipe() = binding.apply { var minDragX = 0f var maxDragX = 0f var initialDraggableX = 0f @@ -262,84 +265,85 @@ class CallActivity : SimpleActivity() { var rightArrowTranslation = 0f val isRtl = isRTLLayout - call_accept.onGlobalLayout { + callAccept.onGlobalLayout { minDragX = if (isRtl) { - call_accept.left.toFloat() + callAccept.left.toFloat() } else { - call_decline.left.toFloat() + callDecline.left.toFloat() } maxDragX = if (isRtl) { - call_decline.left.toFloat() + callDecline.left.toFloat() } else { - call_accept.left.toFloat() + callAccept.left.toFloat() } - initialDraggableX = call_draggable.left.toFloat() - initialLeftArrowX = call_left_arrow.x - initialRightArrowX = call_right_arrow.x - initialLeftArrowScaleX = call_left_arrow.scaleX - initialLeftArrowScaleY = call_left_arrow.scaleY - initialRightArrowScaleX = call_right_arrow.scaleX - initialRightArrowScaleY = call_right_arrow.scaleY + initialDraggableX = callDraggable.left.toFloat() + initialLeftArrowX = callLeftArrow.x + initialRightArrowX = callRightArrow.x + initialLeftArrowScaleX = callLeftArrow.scaleX + initialLeftArrowScaleY = callLeftArrow.scaleY + initialRightArrowScaleX = callRightArrow.scaleX + initialRightArrowScaleY = callRightArrow.scaleY leftArrowTranslation = if (isRtl) { - call_accept.x + callAccept.x } else { - -call_decline.x + -callDecline.x } rightArrowTranslation = if (isRtl) { - -call_accept.x + -callAccept.x } else { - call_decline.x + callDecline.x } if (isRtl) { - call_left_arrow.setImageResource(R.drawable.ic_chevron_right_vector) - call_right_arrow.setImageResource(R.drawable.ic_chevron_left_vector) + callLeftArrow.setImageResource(R.drawable.ic_chevron_right_vector) + callRightArrow.setImageResource(R.drawable.ic_chevron_left_vector) } - call_left_arrow.applyColorFilter(getColor(R.color.md_red_400)) - call_right_arrow.applyColorFilter(getColor(R.color.md_green_400)) + callLeftArrow.applyColorFilter(getColor(R.color.md_red_400)) + callRightArrow.applyColorFilter(getColor(R.color.md_green_400)) - startArrowAnimation(call_left_arrow, initialLeftArrowX, initialLeftArrowScaleX, initialLeftArrowScaleY, leftArrowTranslation) - startArrowAnimation(call_right_arrow, initialRightArrowX, initialRightArrowScaleX, initialRightArrowScaleY, rightArrowTranslation) + startArrowAnimation(callLeftArrow, initialLeftArrowX, initialLeftArrowScaleX, initialLeftArrowScaleY, leftArrowTranslation) + startArrowAnimation(callRightArrow, initialRightArrowX, initialRightArrowScaleX, initialRightArrowScaleY, rightArrowTranslation) } - call_draggable.drawable.mutate().setTint(getProperTextColor()) - call_draggable_background.drawable.mutate().setTint(getProperTextColor()) + callDraggable.drawable.mutate().setTint(getProperTextColor()) + callDraggableBackground.drawable.mutate().setTint(getProperTextColor()) var lock = false - call_draggable.setOnTouchListener { _, event -> + callDraggable.setOnTouchListener { _, event -> when (event.action) { MotionEvent.ACTION_DOWN -> { dragDownX = event.x - call_draggable_background.animate().alpha(0f) + callDraggableBackground.animate().alpha(0f) stopAnimation = true - call_left_arrow.animate().alpha(0f) - call_right_arrow.animate().alpha(0f) + callLeftArrow.animate().alpha(0f) + callRightArrow.animate().alpha(0f) lock = false } + MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> { dragDownX = 0f - call_draggable.animate().x(initialDraggableX).withEndAction { - call_draggable_background.animate().alpha(0.2f) + callDraggable.animate().x(initialDraggableX).withEndAction { + callDraggableBackground.animate().alpha(0.2f) } - call_draggable.setImageDrawable(getDrawable(R.drawable.ic_phone_down_vector)) - call_draggable.drawable.mutate().setTint(getProperTextColor()) - call_left_arrow.animate().alpha(1f) - call_right_arrow.animate().alpha(1f) + callDraggable.setImageDrawable(getDrawable(R.drawable.ic_phone_down_vector)) + callDraggable.drawable.mutate().setTint(getProperTextColor()) + callLeftArrow.animate().alpha(1f) + callRightArrow.animate().alpha(1f) stopAnimation = false - startArrowAnimation(call_left_arrow, initialLeftArrowX, initialLeftArrowScaleX, initialLeftArrowScaleY, leftArrowTranslation) - startArrowAnimation(call_right_arrow, initialRightArrowX, initialRightArrowScaleX, initialRightArrowScaleY, rightArrowTranslation) + startArrowAnimation(callLeftArrow, initialLeftArrowX, initialLeftArrowScaleX, initialLeftArrowScaleY, leftArrowTranslation) + startArrowAnimation(callRightArrow, initialRightArrowX, initialRightArrowScaleX, initialRightArrowScaleY, rightArrowTranslation) } MotionEvent.ACTION_MOVE -> { - call_draggable.x = min(maxDragX, max(minDragX, event.rawX - dragDownX)) + callDraggable.x = min(maxDragX, max(minDragX, event.rawX - dragDownX)) when { - call_draggable.x >= maxDragX - 50f -> { + callDraggable.x >= maxDragX - 50f -> { if (!lock) { lock = true - call_draggable.performHapticFeedback() + callDraggable.performHapticFeedback() if (isRtl) { endCall() } else { @@ -347,10 +351,11 @@ class CallActivity : SimpleActivity() { } } } - call_draggable.x <= minDragX + 50f -> { + + callDraggable.x <= minDragX + 50f -> { if (!lock) { lock = true - call_draggable.performHapticFeedback() + callDraggable.performHapticFeedback() if (isRtl) { acceptCall() } else { @@ -358,23 +363,25 @@ class CallActivity : SimpleActivity() { } } } - call_draggable.x > initialDraggableX -> { + + callDraggable.x > initialDraggableX -> { lock = false val drawableRes = if (isRtl) { R.drawable.ic_phone_down_red_vector } else { R.drawable.ic_phone_green_vector } - call_draggable.setImageDrawable(getDrawable(drawableRes)) + callDraggable.setImageDrawable(getDrawable(drawableRes)) } - call_draggable.x <= initialDraggableX -> { + + callDraggable.x <= initialDraggableX -> { lock = false val drawableRes = if (isRtl) { R.drawable.ic_phone_green_vector } else { R.drawable.ic_phone_down_red_vector } - call_draggable.setImageDrawable(getDrawable(drawableRes)) + callDraggable.setImageDrawable(getDrawable(drawableRes)) } } } @@ -405,7 +412,7 @@ class CallActivity : SimpleActivity() { private fun dialpadPressed(char: Char) { CallManager.keypad(char) - dialpad_input.addCharacter(char) + binding.dialpadInput.addCharacter(char) } private fun changeCallAudioRoute() { @@ -449,7 +456,7 @@ class CallActivity : SimpleActivity() { isSpeakerOn = route == AudioRoute.SPEAKER val supportedAudioRoutes = CallManager.getSupportedAudioRoutes() - call_toggle_speaker.apply { + binding.callToggleSpeaker.apply { val bluetoothConnected = supportedAudioRoutes.contains(AudioRoute.BLUETOOTH) contentDescription = if (bluetoothConnected) { getString(R.string.choose_audio_route) @@ -463,7 +470,7 @@ class CallActivity : SimpleActivity() { setImageResource(route.iconRes) } } - toggleButtonColor(call_toggle_speaker, enabled = route != AudioRoute.EARPIECE && route != AudioRoute.WIRED_HEADSET) + toggleButtonColor(binding.callToggleSpeaker, enabled = route != AudioRoute.EARPIECE && route != AudioRoute.WIRED_HEADSET) createOrUpdateAudioRouteChooser(supportedAudioRoutes, create = false) if (isSpeakerOn) { @@ -482,20 +489,20 @@ class CallActivity : SimpleActivity() { } private fun updateMicrophoneButton() { - toggleButtonColor(call_toggle_microphone, isMicrophoneOff) - call_toggle_microphone.contentDescription = getString(if (isMicrophoneOff) R.string.turn_microphone_on else R.string.turn_microphone_off) + toggleButtonColor(binding.callToggleMicrophone, isMicrophoneOff) + binding.callToggleMicrophone.contentDescription = getString(if (isMicrophoneOff) R.string.turn_microphone_on else R.string.turn_microphone_off) } private fun toggleDialpadVisibility() { - if (dialpad_wrapper.isVisible()) hideDialpad() else showDialpad() + if (binding.dialpadWrapper.isVisible()) hideDialpad() else showDialpad() } private fun findVisibleViewsUnderDialpad(): Sequence> { - return ongoing_call_holder.children.filter { it.isVisible() }.map { view -> Pair(view, view.alpha) } + return binding.ongoingCallHolder.children.filter { it.isVisible() }.map { view -> Pair(view, view.alpha) } } private fun showDialpad() { - dialpad_wrapper.apply { + binding.dialpadWrapper.apply { translationY = dialpadHeight alpha = 0f animate() @@ -518,8 +525,8 @@ class CallActivity : SimpleActivity() { } private fun hideDialpad() { - dialpad_wrapper.animate() - .withEndAction { dialpad_wrapper.beGone() } + binding.dialpadWrapper.animate() + .withEndAction { binding.dialpadWrapper.beGone() } .setInterpolator(AccelerateDecelerateInterpolator()) .setDuration(200L) .alpha(0f) @@ -536,9 +543,9 @@ class CallActivity : SimpleActivity() { private fun toggleHold() { val isOnHold = CallManager.toggleHold() - toggleButtonColor(call_toggle_hold, isOnHold) - call_toggle_hold.contentDescription = getString(if (isOnHold) R.string.resume_call else R.string.hold_call) - hold_status_label.beVisibleIf(isOnHold) + toggleButtonColor(binding.callToggleHold, isOnHold) + binding.callToggleHold.contentDescription = getString(if (isOnHold) R.string.resume_call else R.string.hold_call) + binding.holdStatusLabel.beVisibleIf(isOnHold) } private fun updateOtherPersonsInfo(avatar: Bitmap?) { @@ -546,21 +553,23 @@ class CallActivity : SimpleActivity() { return } - caller_name_label.text = if (callContact!!.name.isNotEmpty()) callContact!!.name else getString(R.string.unknown_caller) - if (callContact!!.number.isNotEmpty() && callContact!!.number != callContact!!.name) { - caller_number.text = callContact!!.number + binding.apply { + callerNameLabel.text = if (callContact!!.name.isNotEmpty()) callContact!!.name else getString(R.string.unknown_caller) + if (callContact!!.number.isNotEmpty() && callContact!!.number != callContact!!.name) { + callerNumber.text = callContact!!.number - if (callContact!!.numberLabel.isNotEmpty()) { - caller_number.text = "${callContact!!.number} - ${callContact!!.numberLabel}" + if (callContact!!.numberLabel.isNotEmpty()) { + callerNumber.text = "${callContact!!.number} - ${callContact!!.numberLabel}" + } + } else { + callerNumber.beGone() } - } else { - caller_number.beGone() - } - if (avatar != null) { - caller_avatar.setImageBitmap(avatar) - } else { - caller_avatar.setImageDrawable(null) + if (avatar != null) { + callerAvatar.setImageBitmap(avatar) + } else { + callerAvatar.setImageDrawable(null) + } } } @@ -579,9 +588,11 @@ class CallActivity : SimpleActivity() { if (accounts.size > 1) { accounts.forEachIndexed { index, account -> if (account == CallManager.getPrimaryCall()?.details?.accountHandle) { - call_sim_id.text = "${index + 1}" - call_sim_id.beVisible() - call_sim_image.beVisible() + binding.apply { + callSimId.text = "${index + 1}" + callSimId.beVisible() + callSimImage.beVisible() + } val acceptDrawableId = when (index) { 0 -> R.drawable.ic_phone_one_vector @@ -592,7 +603,7 @@ class CallActivity : SimpleActivity() { val rippleBg = resources.getDrawable(R.drawable.ic_call_accept, theme) as RippleDrawable val layerDrawable = rippleBg.findDrawableByLayerId(R.id.accept_call_background_holder) as LayerDrawable layerDrawable.setDrawableByLayerId(R.id.accept_call_icon, getDrawable(acceptDrawableId)) - call_accept.setImageDrawable(rippleBg) + binding.callAccept.setImageDrawable(rippleBg) } } } @@ -616,13 +627,15 @@ class CallActivity : SimpleActivity() { else -> 0 } - if (statusTextId != 0) { - call_status_label.text = getString(statusTextId) - } + binding.apply { + if (statusTextId != 0) { + callStatusLabel.text = getString(statusTextId) + } - call_manage.beVisibleIf(call.hasCapability(Call.Details.CAPABILITY_MANAGE_CONFERENCE)) - setActionButtonEnabled(call_swap, state == Call.STATE_ACTIVE) - setActionButtonEnabled(call_merge, state == Call.STATE_ACTIVE) + callManage.beVisibleIf(call.hasCapability(Call.Details.CAPABILITY_MANAGE_CONFERENCE)) + setActionButtonEnabled(callSwap, state == Call.STATE_ACTIVE) + setActionButtonEnabled(callMerge, state == Call.STATE_ACTIVE) + } } private fun updateState() { @@ -633,8 +646,8 @@ class CallActivity : SimpleActivity() { val state = phoneState.call.getStateCompat() val isSingleCallActionsEnabled = (state == Call.STATE_ACTIVE || state == Call.STATE_DISCONNECTED || state == Call.STATE_DISCONNECTING || state == Call.STATE_HOLDING) - setActionButtonEnabled(call_toggle_hold, isSingleCallActionsEnabled) - setActionButtonEnabled(call_add, isSingleCallActionsEnabled) + setActionButtonEnabled(binding.callToggleHold, isSingleCallActionsEnabled) + setActionButtonEnabled(binding.callAdd, isSingleCallActionsEnabled) } else if (phoneState is TwoCalls) { updateCallState(phoneState.active) updateCallOnHoldState(phoneState.onHold) @@ -648,13 +661,15 @@ class CallActivity : SimpleActivity() { if (hasCallOnHold) { getCallContact(applicationContext, call) { contact -> runOnUiThread { - on_hold_caller_name.text = getContactNameOrNumber(contact) + binding.onHoldCallerName.text = getContactNameOrNumber(contact) } } } - on_hold_status_holder.beVisibleIf(hasCallOnHold) - controls_single_call.beVisibleIf(!hasCallOnHold) - controls_two_calls.beVisibleIf(hasCallOnHold) + binding.apply { + onHoldStatusHolder.beVisibleIf(hasCallOnHold) + controlsSingleCall.beVisibleIf(!hasCallOnHold) + controlsTwoCalls.beVisibleIf(hasCallOnHold) + } } private fun updateCallContactInfo(call: Call?) { @@ -677,18 +692,18 @@ class CallActivity : SimpleActivity() { private fun initOutgoingCallUI() { enableProximitySensor() - incoming_call_holder.beGone() - ongoing_call_holder.beVisible() + binding.incomingCallHolder.beGone() + binding.ongoingCallHolder.beVisible() } private fun callRinging() { - incoming_call_holder.beVisible() + binding.incomingCallHolder.beVisible() } private fun callStarted() { enableProximitySensor() - incoming_call_holder.beGone() - ongoing_call_holder.beVisible() + binding.incomingCallHolder.beGone() + binding.ongoingCallHolder.beVisible() callDurationHandler.removeCallbacks(updateCallDurationTask) callDurationHandler.post(updateCallDurationTask) } @@ -719,13 +734,13 @@ class CallActivity : SimpleActivity() { isCallEnded = true if (callDuration > 0) { runOnUiThread { - call_status_label.text = "${callDuration.getFormattedDuration()} (${getString(R.string.call_ended)})" + binding.callStatusLabel.text = "${callDuration.getFormattedDuration()} (${getString(R.string.call_ended)})" Handler().postDelayed({ finishAndRemoveTask() }, 3000) } } else { - call_status_label.text = getString(R.string.call_ended) + binding.callStatusLabel.text = getString(R.string.call_ended) finish() } } @@ -750,7 +765,7 @@ class CallActivity : SimpleActivity() { override fun run() { callDuration = CallManager.getPrimaryCall().getCallDuration() if (!isCallEnded) { - call_status_label.text = callDuration.getFormattedDuration() + binding.callStatusLabel.text = callDuration.getFormattedDuration() callDurationHandler.postDelayed(this, 1000) } } diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/ConferenceActivity.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/ConferenceActivity.kt index a4da2049..4de8a155 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/ConferenceActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/ConferenceActivity.kt @@ -1,25 +1,28 @@ package com.simplemobiletools.dialer.activities import android.os.Bundle +import com.simplemobiletools.commons.extensions.viewBinding import com.simplemobiletools.commons.helpers.NavigationIcon -import com.simplemobiletools.dialer.R import com.simplemobiletools.dialer.adapters.ConferenceCallsAdapter +import com.simplemobiletools.dialer.databinding.ActivityConferenceBinding import com.simplemobiletools.dialer.helpers.CallManager -import kotlinx.android.synthetic.main.activity_conference.* class ConferenceActivity : SimpleActivity() { + private val binding by viewBinding(ActivityConferenceBinding::inflate) override fun onCreate(savedInstanceState: Bundle?) { isMaterialActivity = true super.onCreate(savedInstanceState) - setContentView(R.layout.activity_conference) - updateMaterialActivityViews(conference_coordinator, conference_list, useTransparentNavigation = true, useTopSearchMenu = false) - setupMaterialScrollListener(conference_list, conference_toolbar) - conference_list.adapter = ConferenceCallsAdapter(this, conference_list, ArrayList(CallManager.getConferenceCalls())) {} + setContentView(binding.root) + binding.apply { + updateMaterialActivityViews(conferenceCoordinator, conferenceList, useTransparentNavigation = true, useTopSearchMenu = false) + setupMaterialScrollListener(conferenceList, conferenceToolbar) + conferenceList.adapter = ConferenceCallsAdapter(this@ConferenceActivity, conferenceList, ArrayList(CallManager.getConferenceCalls())) {} + } } override fun onResume() { super.onResume() - setupToolbar(conference_toolbar, NavigationIcon.Arrow) + setupToolbar(binding.conferenceToolbar, NavigationIcon.Arrow) } } diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/DialpadActivity.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/DialpadActivity.kt index 3ee302ae..f18bf27b 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/DialpadActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/DialpadActivity.kt @@ -26,17 +26,17 @@ import com.simplemobiletools.commons.helpers.* import com.simplemobiletools.commons.models.contacts.Contact import com.simplemobiletools.dialer.R import com.simplemobiletools.dialer.adapters.ContactsAdapter +import com.simplemobiletools.dialer.databinding.ActivityDialpadBinding import com.simplemobiletools.dialer.extensions.* import com.simplemobiletools.dialer.helpers.DIALPAD_TONE_LENGTH_MS import com.simplemobiletools.dialer.helpers.ToneGeneratorHelper import com.simplemobiletools.dialer.models.SpeedDial -import kotlinx.android.synthetic.main.activity_dialpad.* -import kotlinx.android.synthetic.main.activity_dialpad.dialpad_holder -import kotlinx.android.synthetic.main.dialpad.* import java.util.* import kotlin.math.roundToInt class DialpadActivity : SimpleActivity() { + private val binding by viewBinding(ActivityDialpadBinding::inflate) + private var allContacts = ArrayList() private var speedDialValues = ArrayList() private val russianCharsMap = HashMap() @@ -49,48 +49,53 @@ class DialpadActivity : SimpleActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.activity_dialpad) + setContentView(binding.root) hasRussianLocale = Locale.getDefault().language == "ru" - updateMaterialActivityViews(dialpad_coordinator, dialpad_holder, useTransparentNavigation = true, useTopSearchMenu = false) - setupMaterialScrollListener(dialpad_list, dialpad_toolbar) + binding.apply { + updateMaterialActivityViews(dialpadCoordinator, dialpadHolder, useTransparentNavigation = true, useTopSearchMenu = false) + setupMaterialScrollListener(dialpadList, dialpadToolbar) + } + updateNavigationBarColor(getProperBackgroundColor()) if (checkAppSideloading()) { return } - if (config.hideDialpadNumbers) { - dialpad_1_holder.isVisible = false - dialpad_2_holder.isVisible = false - dialpad_3_holder.isVisible = false - dialpad_4_holder.isVisible = false - dialpad_5_holder.isVisible = false - dialpad_6_holder.isVisible = false - dialpad_7_holder.isVisible = false - dialpad_8_holder.isVisible = false - dialpad_9_holder.isVisible = false - dialpad_plus_holder.isVisible = true - dialpad_0_holder.visibility = View.INVISIBLE - } + binding.dialpadWrapper.apply { + if (config.hideDialpadNumbers) { + dialpad1Holder.isVisible = false + dialpad2Holder.isVisible = false + dialpad3Holder.isVisible = false + dialpad4Holder.isVisible = false + dialpad5Holder.isVisible = false + dialpad6Holder.isVisible = false + dialpad7Holder.isVisible = false + dialpad8Holder.isVisible = false + dialpad9Holder.isVisible = false + dialpadPlusHolder.isVisible = true + dialpad0Holder.visibility = View.INVISIBLE + } - arrayOf( - dialpad_0_holder, - dialpad_1_holder, - dialpad_2_holder, - dialpad_3_holder, - dialpad_4_holder, - dialpad_5_holder, - dialpad_6_holder, - dialpad_7_holder, - dialpad_8_holder, - dialpad_9_holder, - dialpad_plus_holder, - dialpad_asterisk_holder, - dialpad_hashtag_holder - ).forEach { - it.background = ResourcesCompat.getDrawable(resources, R.drawable.pill_background, theme) - it.background?.alpha = LOWER_ALPHA_INT + arrayOf( + dialpad0Holder, + dialpad1Holder, + dialpad2Holder, + dialpad3Holder, + dialpad4Holder, + dialpad5Holder, + dialpad6Holder, + dialpad7Holder, + dialpad8Holder, + dialpad9Holder, + dialpadPlusHolder, + dialpadAsteriskHolder, + dialpadHashtagHolder + ).forEach { + it.background = ResourcesCompat.getDrawable(resources, R.drawable.pill_background, theme) + it.background?.alpha = LOWER_ALPHA_INT + } } setupOptionsMenu() @@ -99,46 +104,50 @@ class DialpadActivity : SimpleActivity() { toneGeneratorHelper = ToneGeneratorHelper(this, DIALPAD_TONE_LENGTH_MS) - if (hasRussianLocale) { - initRussianChars() - dialpad_2_letters.append("\nАБВГ") - dialpad_3_letters.append("\nДЕЁЖЗ") - dialpad_4_letters.append("\nИЙКЛ") - dialpad_5_letters.append("\nМНОП") - dialpad_6_letters.append("\nРСТУ") - dialpad_7_letters.append("\nФХЦЧ") - dialpad_8_letters.append("\nШЩЪЫ") - dialpad_9_letters.append("\nЬЭЮЯ") + binding.dialpadWrapper.apply { + if (hasRussianLocale) { + initRussianChars() + dialpad2Letters.append("\nАБВГ") + dialpad3Letters.append("\nДЕЁЖЗ") + dialpad4Letters.append("\nИЙКЛ") + dialpad5Letters.append("\nМНОП") + dialpad6Letters.append("\nРСТУ") + dialpad7Letters.append("\nФХЦЧ") + dialpad8Letters.append("\nШЩЪЫ") + dialpad9Letters.append("\nЬЭЮЯ") - val fontSize = resources.getDimension(R.dimen.small_text_size) - arrayOf( - dialpad_2_letters, dialpad_3_letters, dialpad_4_letters, dialpad_5_letters, dialpad_6_letters, dialpad_7_letters, dialpad_8_letters, - dialpad_9_letters - ).forEach { - it.setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize) + val fontSize = resources.getDimension(R.dimen.small_text_size) + arrayOf( + dialpad2Letters, dialpad3Letters, dialpad4Letters, dialpad5Letters, dialpad6Letters, dialpad7Letters, dialpad8Letters, + dialpad9Letters + ).forEach { + it.setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize) + } } + + setupCharClick(dialpad1Holder, '1') + setupCharClick(dialpad2Holder, '2') + setupCharClick(dialpad3Holder, '3') + setupCharClick(dialpad4Holder, '4') + setupCharClick(dialpad5Holder, '5') + setupCharClick(dialpad6Holder, '6') + setupCharClick(dialpad7Holder, '7') + setupCharClick(dialpad8Holder, '8') + setupCharClick(dialpad9Holder, '9') + setupCharClick(dialpad0Holder, '0') + setupCharClick(dialpadPlusHolder, '+', longClickable = false) + setupCharClick(dialpadAsteriskHolder, '*', longClickable = false) + setupCharClick(dialpadHashtagHolder, '#', longClickable = false) } - setupCharClick(dialpad_1_holder, '1') - setupCharClick(dialpad_2_holder, '2') - setupCharClick(dialpad_3_holder, '3') - setupCharClick(dialpad_4_holder, '4') - setupCharClick(dialpad_5_holder, '5') - setupCharClick(dialpad_6_holder, '6') - setupCharClick(dialpad_7_holder, '7') - setupCharClick(dialpad_8_holder, '8') - setupCharClick(dialpad_9_holder, '9') - setupCharClick(dialpad_0_holder, '0') - setupCharClick(dialpad_plus_holder, '+', longClickable = false) - setupCharClick(dialpad_asterisk_holder, '*', longClickable = false) - setupCharClick(dialpad_hashtag_holder, '#', longClickable = false) - - dialpad_clear_char.setOnClickListener { clearChar(it) } - dialpad_clear_char.setOnLongClickListener { clearInput(); true } - dialpad_call_button.setOnClickListener { initCall(dialpad_input.value, 0) } - dialpad_input.onTextChangeListener { dialpadValueChanged(it) } - dialpad_input.requestFocus() - dialpad_input.disableKeyboard() + binding.apply { + dialpadClearChar.setOnClickListener { clearChar(it) } + dialpadClearChar.setOnLongClickListener { clearInput(); true } + dialpadCallButton.setOnClickListener { initCall(dialpadInput.value, 0) } + dialpadInput.onTextChangeListener { dialpadValueChanged(it) } + dialpadInput.requestFocus() + dialpadInput.disableKeyboard() + } ContactsHelper(this).getContacts(showOnlyContactsWithNumbers = true) { allContacts -> gotContacts(allContacts) @@ -147,11 +156,13 @@ class DialpadActivity : SimpleActivity() { val properPrimaryColor = getProperPrimaryColor() val callIconId = if (areMultipleSIMsAvailable()) { val callIcon = resources.getColoredDrawableWithColor(R.drawable.ic_phone_two_vector, properPrimaryColor.getContrastColor()) - dialpad_call_two_button.setImageDrawable(callIcon) - dialpad_call_two_button.background.applyColorFilter(properPrimaryColor) - dialpad_call_two_button.beVisible() - dialpad_call_two_button.setOnClickListener { - initCall(dialpad_input.value, 1) + binding.apply { + dialpadCallTwoButton.setImageDrawable(callIcon) + dialpadCallTwoButton.background.applyColorFilter(properPrimaryColor) + dialpadCallTwoButton.beVisible() + dialpadCallTwoButton.setOnClickListener { + initCall(dialpadInput.value, 1) + } } R.drawable.ic_phone_one_vector @@ -159,27 +170,29 @@ class DialpadActivity : SimpleActivity() { R.drawable.ic_phone_vector } - val callIcon = resources.getColoredDrawableWithColor(callIconId, properPrimaryColor.getContrastColor()) - dialpad_call_button.setImageDrawable(callIcon) - dialpad_call_button.background.applyColorFilter(properPrimaryColor) + binding.apply { + val callIcon = resources.getColoredDrawableWithColor(callIconId, properPrimaryColor.getContrastColor()) + dialpadCallButton.setImageDrawable(callIcon) + dialpadCallButton.background.applyColorFilter(properPrimaryColor) - letter_fastscroller.textColor = getProperTextColor().getColorStateList() - letter_fastscroller.pressedTextColor = properPrimaryColor - letter_fastscroller_thumb.setupWithFastScroller(letter_fastscroller) - letter_fastscroller_thumb.textColor = properPrimaryColor.getContrastColor() - letter_fastscroller_thumb.thumbColor = properPrimaryColor.getColorStateList() + letterFastscroller.textColor = getProperTextColor().getColorStateList() + letterFastscroller.pressedTextColor = properPrimaryColor + letterFastscrollerThumb.setupWithFastScroller(letterFastscroller) + letterFastscrollerThumb.textColor = properPrimaryColor.getContrastColor() + letterFastscrollerThumb.thumbColor = properPrimaryColor.getColorStateList() + } } override fun onResume() { super.onResume() - updateTextColors(dialpad_holder) - dialpad_clear_char.applyColorFilter(getProperTextColor()) + updateTextColors(binding.dialpadHolder) + binding.dialpadClearChar.applyColorFilter(getProperTextColor()) updateNavigationBarColor(getProperBackgroundColor()) - setupToolbar(dialpad_toolbar, NavigationIcon.Arrow) + setupToolbar(binding.dialpadToolbar, NavigationIcon.Arrow) } private fun setupOptionsMenu() { - dialpad_toolbar.setOnMenuItemClickListener { menuItem -> + binding.dialpadToolbar.setOnMenuItemClickListener { menuItem -> when (menuItem.itemId) { R.id.add_number_to_contact -> addNumberToContact() else -> return@setOnMenuItemClickListener false @@ -191,8 +204,8 @@ class DialpadActivity : SimpleActivity() { private fun checkDialIntent(): Boolean { return if ((intent.action == Intent.ACTION_DIAL || intent.action == Intent.ACTION_VIEW) && intent.data != null && intent.dataString?.contains("tel:") == true) { val number = Uri.decode(intent.dataString).substringAfter("tel:") - dialpad_input.setText(number) - dialpad_input.setSelection(number.length) + binding.dialpadInput.setText(number) + binding.dialpadInput.setSelection(number.length) true } else { false @@ -203,23 +216,23 @@ class DialpadActivity : SimpleActivity() { Intent().apply { action = Intent.ACTION_INSERT_OR_EDIT type = "vnd.android.cursor.item/contact" - putExtra(KEY_PHONE, dialpad_input.value) + putExtra(KEY_PHONE, binding.dialpadInput.value) launchActivityIntent(this) } } private fun dialpadPressed(char: Char, view: View?) { - dialpad_input.addCharacter(char) + binding.dialpadInput.addCharacter(char) maybePerformDialpadHapticFeedback(view) } private fun clearChar(view: View) { - dialpad_input.dispatchKeyEvent(dialpad_input.getKeyEvent(KeyEvent.KEYCODE_DEL)) + binding.dialpadInput.dispatchKeyEvent(binding.dialpadInput.getKeyEvent(KeyEvent.KEYCODE_DEL)) maybePerformDialpadHapticFeedback(view) } private fun clearInput() { - dialpad_input.setText("") + binding.dialpadInput.setText("") } private fun gotContacts(newContacts: ArrayList) { @@ -232,7 +245,7 @@ class DialpadActivity : SimpleActivity() { } runOnUiThread { - if (!checkDialIntent() && dialpad_input.value.isEmpty()) { + if (!checkDialIntent() && binding.dialpadInput.value.isEmpty()) { dialpadValueChanged("") } } @@ -256,7 +269,7 @@ class DialpadActivity : SimpleActivity() { return } - (dialpad_list.adapter as? ContactsAdapter)?.finishActMode() + (binding.dialpadList.adapter as? ContactsAdapter)?.finishActMode() val filtered = allContacts.filter { var convertedName = PhoneNumberUtils.convertKeypadLettersToDigits(it.name.normalizeString()) @@ -275,7 +288,7 @@ class DialpadActivity : SimpleActivity() { !it.doesContainPhoneNumber(text) }).toMutableList() as ArrayList - letter_fastscroller.setupWithRecyclerView(dialpad_list, { position -> + binding.letterFastscroller.setupWithRecyclerView(binding.dialpadList, { position -> try { val name = filtered[position].getNameToDisplay() val character = if (name.isNotEmpty()) name.substring(0, 1) else "" @@ -288,7 +301,7 @@ class DialpadActivity : SimpleActivity() { ContactsAdapter( activity = this, contacts = filtered, - recyclerView = dialpad_list, + recyclerView = binding.dialpadList, highlightText = text ) { val contact = it as Contact @@ -300,21 +313,21 @@ class DialpadActivity : SimpleActivity() { startCallIntent(contact.getPrimaryNumber() ?: return@ContactsAdapter) } }.apply { - dialpad_list.adapter = this + binding.dialpadList.adapter = this } - dialpad_placeholder.beVisibleIf(filtered.isEmpty()) - dialpad_list.beVisibleIf(filtered.isNotEmpty()) + binding.dialpadPlaceholder.beVisibleIf(filtered.isEmpty()) + binding.dialpadList.beVisibleIf(filtered.isNotEmpty()) } override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?) { super.onActivityResult(requestCode, resultCode, resultData) if (requestCode == REQUEST_CODE_SET_DEFAULT_DIALER && isDefaultDialer()) { - dialpadValueChanged(dialpad_input.value) + dialpadValueChanged(binding.dialpadInput.value) } } - private fun initCall(number: String = dialpad_input.value, handleIndex: Int) { + private fun initCall(number: String = binding.dialpadInput.value, handleIndex: Int) { if (number.isNotEmpty()) { if (handleIndex != -1 && areMultipleSIMsAvailable()) { if (config.showCallConfirmation) { @@ -337,7 +350,7 @@ class DialpadActivity : SimpleActivity() { } private fun speedDial(id: Int): Boolean { - if (dialpad_input.value.length == 1) { + if (binding.dialpadInput.value.length == 1) { val speedDial = speedDialValues.firstOrNull { it.id == id } if (speedDial?.isValid() == true) { initCall(speedDial.number, -1) diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/MainActivity.kt index 0d9406a9..90528f2f 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/MainActivity.kt @@ -28,20 +28,21 @@ import com.simplemobiletools.commons.models.contacts.Contact import com.simplemobiletools.dialer.BuildConfig import com.simplemobiletools.dialer.R import com.simplemobiletools.dialer.adapters.ViewPagerAdapter +import com.simplemobiletools.dialer.databinding.ActivityMainBinding import com.simplemobiletools.dialer.dialogs.ChangeSortingDialog import com.simplemobiletools.dialer.dialogs.FilterContactSourcesDialog import com.simplemobiletools.dialer.extensions.config import com.simplemobiletools.dialer.extensions.launchCreateNewContactIntent +import com.simplemobiletools.dialer.fragments.ContactsFragment import com.simplemobiletools.dialer.fragments.FavoritesFragment import com.simplemobiletools.dialer.fragments.MyViewPagerFragment +import com.simplemobiletools.dialer.fragments.RecentsFragment import com.simplemobiletools.dialer.helpers.* -import kotlinx.android.synthetic.main.activity_main.* -import kotlinx.android.synthetic.main.fragment_contacts.* -import kotlinx.android.synthetic.main.fragment_favorites.* -import kotlinx.android.synthetic.main.fragment_recents.* import me.grantland.widget.AutofitHelper class MainActivity : SimpleActivity() { + private val binding by viewBinding(ActivityMainBinding::inflate) + private var launchedDialer = false private var storedShowTabs = 0 private var storedFontSize = 0 @@ -51,11 +52,11 @@ class MainActivity : SimpleActivity() { override fun onCreate(savedInstanceState: Bundle?) { isMaterialActivity = true super.onCreate(savedInstanceState) - setContentView(R.layout.activity_main) + setContentView(binding.root) appLaunched(BuildConfig.APPLICATION_ID) setupOptionsMenu() refreshMenuItems() - updateMaterialActivityViews(main_coordinator, main_holder, useTransparentNavigation = false, useTopSearchMenu = true) + updateMaterialActivityViews(binding.mainCoordinator, binding.mainHolder, useTransparentNavigation = false, useTopSearchMenu = true) launchedDialer = savedInstanceState?.getBoolean(OPEN_DIAL_PAD_AT_LAUNCH) ?: false @@ -63,7 +64,7 @@ class MainActivity : SimpleActivity() { checkContactPermissions() if (!config.wasOverlaySnackbarConfirmed && !Settings.canDrawOverlays(this)) { - val snackbar = Snackbar.make(main_holder, R.string.allow_displaying_over_other_apps, Snackbar.LENGTH_INDEFINITE).setAction(R.string.ok) { + val snackbar = Snackbar.make(binding.mainHolder, R.string.allow_displaying_over_other_apps, Snackbar.LENGTH_INDEFINITE).setAction(R.string.ok) { config.wasOverlaySnackbarConfirmed = true startActivity(Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION)) } @@ -102,9 +103,9 @@ class MainActivity : SimpleActivity() { updateMenuColors() val properPrimaryColor = getProperPrimaryColor() val dialpadIcon = resources.getColoredDrawableWithColor(R.drawable.ic_dialpad_vector, properPrimaryColor.getContrastColor()) - main_dialpad_button.setImageDrawable(dialpadIcon) + binding.mainDialpadButton.setImageDrawable(dialpadIcon) - updateTextColors(main_holder) + updateTextColors(binding.mainHolder) setupTabColors() getAllFragments().forEach { @@ -113,12 +114,12 @@ class MainActivity : SimpleActivity() { val configStartNameWithSurname = config.startNameWithSurname if (storedStartNameWithSurname != configStartNameWithSurname) { - contacts_fragment?.startNameWithSurnameChanged(configStartNameWithSurname) - favorites_fragment?.startNameWithSurnameChanged(configStartNameWithSurname) + getContactsFragment()?.startNameWithSurnameChanged(configStartNameWithSurname) + getFavoritesFragment()?.startNameWithSurnameChanged(configStartNameWithSurname) storedStartNameWithSurname = config.startNameWithSurname } - if (!main_menu.isSearchOpen) { + if (!binding.mainMenu.isSearchOpen) { refreshItems(true) } @@ -131,7 +132,7 @@ class MainActivity : SimpleActivity() { checkShortcuts() Handler().postDelayed({ - recents_fragment?.refreshItems() + getRecentsFragment()?.refreshItems() }, 2000) } @@ -139,7 +140,7 @@ class MainActivity : SimpleActivity() { super.onPause() storedShowTabs = config.showTabs storedStartNameWithSurname = config.startNameWithSurname - config.lastUsedViewPagerPage = view_pager.currentItem + config.lastUsedViewPagerPage = binding.viewPager.currentItem } override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?) { @@ -165,8 +166,8 @@ class MainActivity : SimpleActivity() { } override fun onBackPressed() { - if (main_menu.isSearchOpen) { - main_menu.closeSearch() + if (binding.mainMenu.isSearchOpen) { + binding.mainMenu.closeSearch() } else { super.onBackPressed() } @@ -174,45 +175,47 @@ class MainActivity : SimpleActivity() { private fun refreshMenuItems() { val currentFragment = getCurrentFragment() - main_menu.getToolbar().menu.apply { - findItem(R.id.clear_call_history).isVisible = currentFragment == recents_fragment - findItem(R.id.sort).isVisible = currentFragment != recents_fragment - findItem(R.id.create_new_contact).isVisible = currentFragment == contacts_fragment - findItem(R.id.change_view_type).isVisible = currentFragment == favorites_fragment - findItem(R.id.column_count).isVisible = currentFragment == favorites_fragment && config.viewType == VIEW_TYPE_GRID + binding.mainMenu.getToolbar().menu.apply { + findItem(R.id.clear_call_history).isVisible = currentFragment == getRecentsFragment() + findItem(R.id.sort).isVisible = currentFragment != getRecentsFragment() + findItem(R.id.create_new_contact).isVisible = currentFragment == getContactsFragment() + findItem(R.id.change_view_type).isVisible = currentFragment == getFavoritesFragment() + findItem(R.id.column_count).isVisible = currentFragment == getFavoritesFragment() && config.viewType == VIEW_TYPE_GRID findItem(R.id.more_apps_from_us).isVisible = !resources.getBoolean(R.bool.hide_google_relations) } } private fun setupOptionsMenu() { - main_menu.getToolbar().inflateMenu(R.menu.menu) - main_menu.toggleHideOnScroll(false) - main_menu.setupMenu() + binding.mainMenu.apply { + getToolbar().inflateMenu(R.menu.menu) + toggleHideOnScroll(false) + setupMenu() - main_menu.onSearchClosedListener = { - getAllFragments().forEach { - it?.onSearchQueryChanged("") + onSearchClosedListener = { + getAllFragments().forEach { + it?.onSearchQueryChanged("") + } } - } - main_menu.onSearchTextChangedListener = { text -> - getCurrentFragment()?.onSearchQueryChanged(text) - } - - main_menu.getToolbar().setOnMenuItemClickListener { menuItem -> - when (menuItem.itemId) { - R.id.clear_call_history -> clearCallHistory() - R.id.create_new_contact -> launchCreateNewContactIntent() - R.id.sort -> showSortingDialog(showCustomSorting = getCurrentFragment() is FavoritesFragment) - R.id.filter -> showFilterDialog() - R.id.more_apps_from_us -> launchMoreAppsFromUsIntent() - R.id.settings -> launchSettings() - R.id.change_view_type -> changeViewType() - R.id.column_count -> changeColumnCount() - R.id.about -> launchAbout() - else -> return@setOnMenuItemClickListener false + onSearchTextChangedListener = { text -> + getCurrentFragment()?.onSearchQueryChanged(text) + } + + getToolbar().setOnMenuItemClickListener { menuItem -> + when (menuItem.itemId) { + R.id.clear_call_history -> clearCallHistory() + R.id.create_new_contact -> launchCreateNewContactIntent() + R.id.sort -> showSortingDialog(showCustomSorting = getCurrentFragment() is FavoritesFragment) + R.id.filter -> showFilterDialog() + R.id.more_apps_from_us -> launchMoreAppsFromUsIntent() + R.id.settings -> launchSettings() + R.id.change_view_type -> changeViewType() + R.id.column_count -> changeColumnCount() + R.id.about -> launchAbout() + else -> return@setOnMenuItemClickListener false + } + return@setOnMenuItemClickListener true } - return@setOnMenuItemClickListener true } } @@ -227,7 +230,7 @@ class MainActivity : SimpleActivity() { val newColumnCount = it as Int if (currentColumnCount != newColumnCount) { config.contactsGridColumnCount = newColumnCount - favorites_fragment?.columnCountChanged() + getFavoritesFragment()?.columnCountChanged() } } } @@ -235,13 +238,13 @@ class MainActivity : SimpleActivity() { private fun changeViewType() { ChangeViewTypeDialog(this) { refreshMenuItems() - favorites_fragment?.refreshItems() + getFavoritesFragment()?.refreshItems() } } private fun updateMenuColors() { updateStatusbarColor(getProperBackgroundColor()) - main_menu.updateColors() + binding.mainMenu.updateColors() } private fun checkContactPermissions() { @@ -255,7 +258,7 @@ class MainActivity : SimpleActivity() { ConfirmationDialog(this, confirmationText) { RecentsHelper(this).removeAllRecentCalls(this) { runOnUiThread { - recents_fragment?.refreshItems() + getRecentsFragment()?.refreshItems() } } } @@ -293,20 +296,20 @@ class MainActivity : SimpleActivity() { } private fun setupTabColors() { - val activeView = main_tabs_holder.getTabAt(view_pager.currentItem)?.customView - updateBottomTabItemColors(activeView, true, getSelectedTabDrawableIds()[view_pager.currentItem]) + val activeView = binding.mainTabsHolder.getTabAt(binding.viewPager.currentItem)?.customView + updateBottomTabItemColors(activeView, true, getSelectedTabDrawableIds()[binding.viewPager.currentItem]) - getInactiveTabIndexes(view_pager.currentItem).forEach { index -> - val inactiveView = main_tabs_holder.getTabAt(index)?.customView + getInactiveTabIndexes(binding.viewPager.currentItem).forEach { index -> + val inactiveView = binding.mainTabsHolder.getTabAt(index)?.customView updateBottomTabItemColors(inactiveView, false, getDeselectedTabDrawableIds()[index]) } val bottomBarColor = getBottomNavigationBackgroundColor() - main_tabs_holder.setBackgroundColor(bottomBarColor) + binding.mainTabsHolder.setBackgroundColor(bottomBarColor) updateNavigationBarColor(bottomBarColor) } - private fun getInactiveTabIndexes(activeIndex: Int) = (0 until main_tabs_holder.tabCount).filter { it != activeIndex } + private fun getInactiveTabIndexes(activeIndex: Int) = (0 until binding.mainTabsHolder.tabCount).filter { it != activeIndex } private fun getSelectedTabDrawableIds(): List { val showTabs = config.showTabs @@ -347,14 +350,14 @@ class MainActivity : SimpleActivity() { } private fun initFragments() { - view_pager.offscreenPageLimit = 2 - view_pager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + binding.viewPager.offscreenPageLimit = 2 + binding.viewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { override fun onPageScrollStateChanged(state: Int) {} override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {} override fun onPageSelected(position: Int) { - main_tabs_holder.getTabAt(position)?.select() + binding.mainTabsHolder.getTabAt(position)?.select() getAllFragments().forEach { it?.finishActMode() } @@ -363,29 +366,29 @@ class MainActivity : SimpleActivity() { }) // selecting the proper tab sometimes glitches, add an extra selector to make sure we have it right - main_tabs_holder.onGlobalLayout { + binding.mainTabsHolder.onGlobalLayout { Handler().postDelayed({ var wantedTab = getDefaultTab() // open the Recents tab if we got here by clicking a missed call notification if (intent.action == Intent.ACTION_VIEW && config.showTabs and TAB_CALL_HISTORY > 0) { - wantedTab = main_tabs_holder.tabCount - 1 + wantedTab = binding.mainTabsHolder.tabCount - 1 ensureBackgroundThread { clearMissedCalls() } } - main_tabs_holder.getTabAt(wantedTab)?.select() + binding.mainTabsHolder.getTabAt(wantedTab)?.select() refreshMenuItems() }, 100L) } - main_dialpad_button.setOnClickListener { + binding.mainDialpadButton.setOnClickListener { launchDialpad() } - view_pager.onGlobalLayout { + binding.viewPager.onGlobalLayout { refreshMenuItems() } @@ -396,31 +399,31 @@ class MainActivity : SimpleActivity() { } private fun setupTabs() { - view_pager.adapter = null - main_tabs_holder.removeAllTabs() + binding.viewPager.adapter = null + binding.mainTabsHolder.removeAllTabs() tabsList.forEachIndexed { index, value -> if (config.showTabs and value != 0) { - main_tabs_holder.newTab().setCustomView(R.layout.bottom_tablayout_item).apply { + binding.mainTabsHolder.newTab().setCustomView(R.layout.bottom_tablayout_item).apply { customView?.findViewById(R.id.tab_item_icon)?.setImageDrawable(getTabIcon(index)) customView?.findViewById(R.id.tab_item_label)?.text = getTabLabel(index) AutofitHelper.create(customView?.findViewById(R.id.tab_item_label)) - main_tabs_holder.addTab(this) + binding.mainTabsHolder.addTab(this) } } } - main_tabs_holder.onTabSelectionChanged( + binding.mainTabsHolder.onTabSelectionChanged( tabUnselectedAction = { updateBottomTabItemColors(it.customView, false, getDeselectedTabDrawableIds()[it.position]) }, tabSelectedAction = { - main_menu.closeSearch() - view_pager.currentItem = it.position + binding.mainMenu.closeSearch() + binding.viewPager.currentItem = it.position updateBottomTabItemColors(it.customView, true, getSelectedTabDrawableIds()[it.position]) } ) - main_tabs_holder.beGoneIf(main_tabs_holder.tabCount == 1) + binding.mainTabsHolder.beGoneIf(binding.mainTabsHolder.tabCount == 1) storedShowTabs = config.showTabs storedStartNameWithSurname = config.startNameWithSurname } @@ -450,14 +453,16 @@ class MainActivity : SimpleActivity() { return } - if (view_pager.adapter == null) { - view_pager.adapter = ViewPagerAdapter(this) - view_pager.currentItem = if (openLastTab) config.lastUsedViewPagerPage else getDefaultTab() - view_pager.onGlobalLayout { + binding.apply { + if (viewPager.adapter == null) { + viewPager.adapter = ViewPagerAdapter(this@MainActivity) + viewPager.currentItem = if (openLastTab) config.lastUsedViewPagerPage else getDefaultTab() + viewPager.onGlobalLayout { + refreshFragments() + } + } else { refreshFragments() } - } else { - refreshFragments() } } @@ -468,36 +473,42 @@ class MainActivity : SimpleActivity() { } fun refreshFragments() { - contacts_fragment?.refreshItems() - favorites_fragment?.refreshItems() - recents_fragment?.refreshItems() + getContactsFragment()?.refreshItems() + getFavoritesFragment()?.refreshItems() + getRecentsFragment()?.refreshItems() } - private fun getAllFragments(): ArrayList { + private fun getAllFragments(): ArrayList?> { val showTabs = config.showTabs - val fragments = arrayListOf() + val fragments = arrayListOf?>() if (showTabs and TAB_CONTACTS > 0) { - fragments.add(contacts_fragment) + fragments.add(getContactsFragment()) } if (showTabs and TAB_FAVORITES > 0) { - fragments.add(favorites_fragment) + fragments.add(getFavoritesFragment()) } if (showTabs and TAB_CALL_HISTORY > 0) { - fragments.add(recents_fragment) + fragments.add(getRecentsFragment()) } return fragments } - private fun getCurrentFragment(): MyViewPagerFragment? = getAllFragments().getOrNull(view_pager.currentItem) + private fun getCurrentFragment(): MyViewPagerFragment<*>? = getAllFragments().getOrNull(binding.viewPager.currentItem) + + private fun getContactsFragment(): ContactsFragment? = findViewById(R.id.contacts_fragment) + + private fun getFavoritesFragment(): FavoritesFragment? = findViewById(R.id.favorites_fragment) + + private fun getRecentsFragment(): RecentsFragment? = findViewById(R.id.recents_fragment) private fun getDefaultTab(): Int { val showTabsMask = config.showTabs return when (config.defaultTab) { - TAB_LAST_USED -> if (config.lastUsedViewPagerPage < main_tabs_holder.tabCount) config.lastUsedViewPagerPage else 0 + TAB_LAST_USED -> if (config.lastUsedViewPagerPage < binding.mainTabsHolder.tabCount) config.lastUsedViewPagerPage else 0 TAB_CONTACTS -> 0 TAB_FAVORITES -> if (showTabsMask and TAB_CONTACTS > 0) 1 else 0 else -> { @@ -556,15 +567,15 @@ class MainActivity : SimpleActivity() { private fun showSortingDialog(showCustomSorting: Boolean) { ChangeSortingDialog(this, showCustomSorting) { - favorites_fragment?.refreshItems { - if (main_menu.isSearchOpen) { - getCurrentFragment()?.onSearchQueryChanged(main_menu.getCurrentQuery()) + getFavoritesFragment()?.refreshItems { + if (binding.mainMenu.isSearchOpen) { + getCurrentFragment()?.onSearchQueryChanged(binding.mainMenu.getCurrentQuery()) } } - contacts_fragment?.refreshItems { - if (main_menu.isSearchOpen) { - getCurrentFragment()?.onSearchQueryChanged(main_menu.getCurrentQuery()) + getContactsFragment()?.refreshItems { + if (binding.mainMenu.isSearchOpen) { + getCurrentFragment()?.onSearchQueryChanged(binding.mainMenu.getCurrentQuery()) } } } @@ -572,21 +583,21 @@ class MainActivity : SimpleActivity() { private fun showFilterDialog() { FilterContactSourcesDialog(this) { - favorites_fragment?.refreshItems { - if (main_menu.isSearchOpen) { - getCurrentFragment()?.onSearchQueryChanged(main_menu.getCurrentQuery()) + getFavoritesFragment()?.refreshItems { + if (binding.mainMenu.isSearchOpen) { + getCurrentFragment()?.onSearchQueryChanged(binding.mainMenu.getCurrentQuery()) } } - contacts_fragment?.refreshItems { - if (main_menu.isSearchOpen) { - getCurrentFragment()?.onSearchQueryChanged(main_menu.getCurrentQuery()) + getContactsFragment()?.refreshItems { + if (binding.mainMenu.isSearchOpen) { + getCurrentFragment()?.onSearchQueryChanged(binding.mainMenu.getCurrentQuery()) } } - recents_fragment?.refreshItems { - if (main_menu.isSearchOpen) { - getCurrentFragment()?.onSearchQueryChanged(main_menu.getCurrentQuery()) + getRecentsFragment()?.refreshItems { + if (binding.mainMenu.isSearchOpen) { + getCurrentFragment()?.onSearchQueryChanged(binding.mainMenu.getCurrentQuery()) } } } diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/ManageSpeedDialActivity.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/ManageSpeedDialActivity.kt index c4d5aefc..2e7959fc 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/ManageSpeedDialActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/ManageSpeedDialActivity.kt @@ -5,31 +5,36 @@ import com.google.gson.Gson import com.simplemobiletools.commons.dialogs.RadioGroupDialog import com.simplemobiletools.commons.extensions.getMyContactsCursor import com.simplemobiletools.commons.extensions.updateTextColors +import com.simplemobiletools.commons.extensions.viewBinding import com.simplemobiletools.commons.helpers.ContactsHelper import com.simplemobiletools.commons.helpers.MyContactsContentProvider import com.simplemobiletools.commons.helpers.NavigationIcon import com.simplemobiletools.commons.models.PhoneNumber import com.simplemobiletools.commons.models.RadioItem import com.simplemobiletools.commons.models.contacts.Contact -import com.simplemobiletools.dialer.R import com.simplemobiletools.dialer.adapters.SpeedDialAdapter +import com.simplemobiletools.dialer.databinding.ActivityManageSpeedDialBinding import com.simplemobiletools.dialer.dialogs.SelectContactDialog import com.simplemobiletools.dialer.extensions.config import com.simplemobiletools.dialer.interfaces.RemoveSpeedDialListener import com.simplemobiletools.dialer.models.SpeedDial -import kotlinx.android.synthetic.main.activity_manage_speed_dial.* class ManageSpeedDialActivity : SimpleActivity(), RemoveSpeedDialListener { + private val binding by viewBinding(ActivityManageSpeedDialBinding::inflate) + private var allContacts = mutableListOf() private var speedDialValues = mutableListOf() override fun onCreate(savedInstanceState: Bundle?) { isMaterialActivity = true super.onCreate(savedInstanceState) - setContentView(R.layout.activity_manage_speed_dial) + setContentView(binding.root) - updateMaterialActivityViews(manage_speed_dial_coordinator, manage_speed_dial_holder, useTransparentNavigation = true, useTopSearchMenu = false) - setupMaterialScrollListener(manage_speed_dial_scrollview, manage_speed_dial_toolbar) + binding.apply { + updateMaterialActivityViews(manageSpeedDialCoordinator, manageSpeedDialHolder, useTransparentNavigation = true, useTopSearchMenu = false) + setupMaterialScrollListener(manageSpeedDialScrollview, manageSpeedDialToolbar) + + } speedDialValues = config.getSpeedDialValues() updateAdapter() @@ -43,12 +48,12 @@ class ManageSpeedDialActivity : SimpleActivity(), RemoveSpeedDialListener { allContacts.sort() } - updateTextColors(manage_speed_dial_scrollview) + updateTextColors(binding.manageSpeedDialScrollview) } override fun onResume() { super.onResume() - setupToolbar(manage_speed_dial_toolbar, NavigationIcon.Arrow) + setupToolbar(binding.manageSpeedDialToolbar, NavigationIcon.Arrow) } override fun onStop() { @@ -57,7 +62,7 @@ class ManageSpeedDialActivity : SimpleActivity(), RemoveSpeedDialListener { } private fun updateAdapter() { - SpeedDialAdapter(this, speedDialValues, this, speed_dial_list) { + SpeedDialAdapter(this, speedDialValues, this, binding.speedDialList) { val clickedContact = it as SpeedDial if (allContacts.isEmpty()) { return@SpeedDialAdapter @@ -88,7 +93,7 @@ class ManageSpeedDialActivity : SimpleActivity(), RemoveSpeedDialListener { } }.apply { - speed_dial_list.adapter = this + binding.speedDialList.adapter = this } } diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/SettingsActivity.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/SettingsActivity.kt index db6cf531..cc130cc5 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/SettingsActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/SettingsActivity.kt @@ -15,23 +15,24 @@ import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.helpers.* import com.simplemobiletools.commons.models.RadioItem import com.simplemobiletools.dialer.R +import com.simplemobiletools.dialer.databinding.ActivitySettingsBinding import com.simplemobiletools.dialer.dialogs.ExportCallHistoryDialog import com.simplemobiletools.dialer.dialogs.ManageVisibleTabsDialog import com.simplemobiletools.dialer.extensions.config import com.simplemobiletools.dialer.helpers.RecentsHelper import com.simplemobiletools.dialer.models.RecentCall -import kotlinx.android.synthetic.main.activity_settings.* import kotlinx.serialization.SerializationException -import kotlinx.serialization.decodeFromString import kotlinx.serialization.encodeToString import kotlinx.serialization.json.Json import java.util.* import kotlin.system.exitProcess class SettingsActivity : SimpleActivity() { + companion object { + private const val CALL_HISTORY_FILE_TYPE = "application/json" + } - private val callHistoryFileType = "application/json" - + private val binding by viewBinding(ActivitySettingsBinding::inflate) private val getContent = registerForActivityResult(ActivityResultContracts.GetContent()) { uri -> if (uri != null) { toast(R.string.importing) @@ -39,7 +40,7 @@ class SettingsActivity : SimpleActivity() { } } - private val saveDocument = registerForActivityResult(ActivityResultContracts.CreateDocument(callHistoryFileType)) { uri -> + private val saveDocument = registerForActivityResult(ActivityResultContracts.CreateDocument(CALL_HISTORY_FILE_TYPE)) { uri -> if (uri != null) { toast(R.string.exporting) RecentsHelper(this).getRecentCalls(false, Int.MAX_VALUE) { recents -> @@ -51,15 +52,17 @@ class SettingsActivity : SimpleActivity() { override fun onCreate(savedInstanceState: Bundle?) { isMaterialActivity = true super.onCreate(savedInstanceState) - setContentView(R.layout.activity_settings) + setContentView(binding.root) - updateMaterialActivityViews(settings_coordinator, settings_holder, useTransparentNavigation = true, useTopSearchMenu = false) - setupMaterialScrollListener(settings_nested_scrollview, settings_toolbar) + binding.apply { + updateMaterialActivityViews(settingsCoordinator, settingsHolder, useTransparentNavigation = true, useTopSearchMenu = false) + setupMaterialScrollListener(settingsNestedScrollview, settingsToolbar) + } } override fun onResume() { super.onResume() - setupToolbar(settings_toolbar, NavigationIcon.Arrow) + setupToolbar(binding.settingsToolbar, NavigationIcon.Arrow) setupPurchaseThankYou() setupCustomizeColors() @@ -83,16 +86,18 @@ class SettingsActivity : SimpleActivity() { setupAlwaysShowFullscreen() setupCallsExport() setupCallsImport() - updateTextColors(settings_holder) + updateTextColors(binding.settingsHolder) - arrayOf( - settings_color_customization_section_label, - settings_general_settings_label, - settings_startup_label, - settings_calls_label, - settings_migration_section_label - ).forEach { - it.setTextColor(getProperPrimaryColor()) + binding.apply { + arrayOf( + settingsColorCustomizationSectionLabel, + settingsGeneralSettingsLabel, + settingsStartupLabel, + settingsCallsLabel, + settingsMigrationSectionLabel + ).forEach { + it.setTextColor(getProperPrimaryColor()) + } } } @@ -102,55 +107,61 @@ class SettingsActivity : SimpleActivity() { } private fun setupPurchaseThankYou() { - settings_purchase_thank_you_holder.beGoneIf(isOrWasThankYouInstalled()) - settings_purchase_thank_you_holder.setOnClickListener { + binding.settingsPurchaseThankYouHolder.beGoneIf(isOrWasThankYouInstalled()) + binding.settingsPurchaseThankYouHolder.setOnClickListener { launchPurchaseThankYouIntent() } } private fun setupCustomizeColors() { - settings_color_customization_label.text = getCustomizeColorsString() - settings_color_customization_holder.setOnClickListener { + binding.settingsColorCustomizationLabel.text = getCustomizeColorsString() + binding.settingsColorCustomizationHolder.setOnClickListener { handleCustomizeColorsClick() } } private fun setupUseEnglish() { - settings_use_english_holder.beVisibleIf((config.wasUseEnglishToggled || Locale.getDefault().language != "en") && !isTiramisuPlus()) - settings_use_english.isChecked = config.useEnglish - settings_use_english_holder.setOnClickListener { - settings_use_english.toggle() - config.useEnglish = settings_use_english.isChecked - exitProcess(0) + binding.apply { + settingsUseEnglishHolder.beVisibleIf((config.wasUseEnglishToggled || Locale.getDefault().language != "en") && !isTiramisuPlus()) + settingsUseEnglish.isChecked = config.useEnglish + settingsUseEnglishHolder.setOnClickListener { + settingsUseEnglish.toggle() + config.useEnglish = settingsUseEnglish.isChecked + exitProcess(0) + } } } private fun setupLanguage() { - settings_language.text = Locale.getDefault().displayLanguage - settings_language_holder.beVisibleIf(isTiramisuPlus()) - settings_language_holder.setOnClickListener { - launchChangeAppLanguageIntent() + binding.apply { + settingsLanguage.text = Locale.getDefault().displayLanguage + settingsLanguageHolder.beVisibleIf(isTiramisuPlus()) + settingsLanguageHolder.setOnClickListener { + launchChangeAppLanguageIntent() + } } } // support for device-wise blocking came on Android 7, rely only on that @TargetApi(Build.VERSION_CODES.N) private fun setupManageBlockedNumbers() { - settings_manage_blocked_numbers_label.text = addLockedLabelIfNeeded(R.string.manage_blocked_numbers) - settings_manage_blocked_numbers_holder.beVisibleIf(isNougatPlus()) - settings_manage_blocked_numbers_holder.setOnClickListener { - if (isOrWasThankYouInstalled()) { - Intent(this, ManageBlockedNumbersActivity::class.java).apply { - startActivity(this) + binding.apply { + settingsManageBlockedNumbersLabel.text = addLockedLabelIfNeeded(R.string.manage_blocked_numbers) + settingsManageBlockedNumbersHolder.beVisibleIf(isNougatPlus()) + settingsManageBlockedNumbersHolder.setOnClickListener { + if (isOrWasThankYouInstalled()) { + Intent(this@SettingsActivity, ManageBlockedNumbersActivity::class.java).apply { + startActivity(this) + } + } else { + FeatureLockedDialog(this@SettingsActivity) { } } - } else { - FeatureLockedDialog(this) { } } } } private fun setupManageSpeedDial() { - settings_manage_speed_dial_holder.setOnClickListener { + binding.settingsManageSpeedDialHolder.setOnClickListener { Intent(this, ManageSpeedDialActivity::class.java).apply { startActivity(this) } @@ -158,14 +169,14 @@ class SettingsActivity : SimpleActivity() { } private fun setupChangeDateTimeFormat() { - settings_change_date_time_format_holder.setOnClickListener { + binding.settingsChangeDateTimeFormatHolder.setOnClickListener { ChangeDateTimeFormatDialog(this) {} } } private fun setupFontSize() { - settings_font_size.text = getFontSizeText() - settings_font_size_holder.setOnClickListener { + binding.settingsFontSize.text = getFontSizeText() + binding.settingsFontSizeHolder.setOnClickListener { val items = arrayListOf( RadioItem(FONT_SIZE_SMALL, getString(R.string.small)), RadioItem(FONT_SIZE_MEDIUM, getString(R.string.medium)), @@ -175,20 +186,20 @@ class SettingsActivity : SimpleActivity() { RadioGroupDialog(this@SettingsActivity, items, config.fontSize) { config.fontSize = it as Int - settings_font_size.text = getFontSizeText() + binding.settingsFontSize.text = getFontSizeText() } } } private fun setupManageShownTabs() { - settings_manage_tabs_holder.setOnClickListener { + binding.settingsManageTabsHolder.setOnClickListener { ManageVisibleTabsDialog(this) } } private fun setupDefaultTab() { - settings_default_tab.text = getDefaultTabText() - settings_default_tab_holder.setOnClickListener { + binding.settingsDefaultTab.text = getDefaultTabText() + binding.settingsDefaultTabHolder.setOnClickListener { val items = arrayListOf( RadioItem(TAB_CONTACTS, getString(R.string.contacts_tab)), RadioItem(TAB_FAVORITES, getString(R.string.favorites_tab)), @@ -198,7 +209,7 @@ class SettingsActivity : SimpleActivity() { RadioGroupDialog(this@SettingsActivity, items, config.defaultTab) { config.defaultTab = it as Int - settings_default_tab.text = getDefaultTabText() + binding.settingsDefaultTab.text = getDefaultTabText() } } } @@ -213,87 +224,107 @@ class SettingsActivity : SimpleActivity() { ) private fun setupDialPadOpen() { - settings_open_dialpad_at_launch.isChecked = config.openDialPadAtLaunch - settings_open_dialpad_at_launch_holder.setOnClickListener { - settings_open_dialpad_at_launch.toggle() - config.openDialPadAtLaunch = settings_open_dialpad_at_launch.isChecked + binding.apply { + settingsOpenDialpadAtLaunch.isChecked = config.openDialPadAtLaunch + settingsOpenDialpadAtLaunchHolder.setOnClickListener { + settingsOpenDialpadAtLaunch.toggle() + config.openDialPadAtLaunch = settingsOpenDialpadAtLaunch.isChecked + } } } private fun setupGroupSubsequentCalls() { - settings_group_subsequent_calls.isChecked = config.groupSubsequentCalls - settings_group_subsequent_calls_holder.setOnClickListener { - settings_group_subsequent_calls.toggle() - config.groupSubsequentCalls = settings_group_subsequent_calls.isChecked + binding.apply { + settingsGroupSubsequentCalls.isChecked = config.groupSubsequentCalls + settingsGroupSubsequentCallsHolder.setOnClickListener { + settingsGroupSubsequentCalls.toggle() + config.groupSubsequentCalls = settingsGroupSubsequentCalls.isChecked + } } } private fun setupStartNameWithSurname() { - settings_start_name_with_surname.isChecked = config.startNameWithSurname - settings_start_name_with_surname_holder.setOnClickListener { - settings_start_name_with_surname.toggle() - config.startNameWithSurname = settings_start_name_with_surname.isChecked + binding.apply { + settingsStartNameWithSurname.isChecked = config.startNameWithSurname + settingsStartNameWithSurnameHolder.setOnClickListener { + settingsStartNameWithSurname.toggle() + config.startNameWithSurname = settingsStartNameWithSurname.isChecked + } } } private fun setupDialpadVibrations() { - settings_dialpad_vibration.isChecked = config.dialpadVibration - settings_dialpad_vibration_holder.setOnClickListener { - settings_dialpad_vibration.toggle() - config.dialpadVibration = settings_dialpad_vibration.isChecked + binding.apply { + settingsDialpadVibration.isChecked = config.dialpadVibration + settingsDialpadVibrationHolder.setOnClickListener { + settingsDialpadVibration.toggle() + config.dialpadVibration = settingsDialpadVibration.isChecked + } } } private fun setupDialpadNumbers() { - settings_hide_dialpad_numbers.isChecked = config.hideDialpadNumbers - settings_hide_dialpad_numbers_holder.setOnClickListener { - settings_hide_dialpad_numbers.toggle() - config.hideDialpadNumbers = settings_hide_dialpad_numbers.isChecked + binding.apply { + settingsHideDialpadNumbers.isChecked = config.hideDialpadNumbers + settingsHideDialpadNumbersHolder.setOnClickListener { + settingsHideDialpadNumbers.toggle() + config.hideDialpadNumbers = settingsHideDialpadNumbers.isChecked + } } } private fun setupDialpadBeeps() { - settings_dialpad_beeps.isChecked = config.dialpadBeeps - settings_dialpad_beeps_holder.setOnClickListener { - settings_dialpad_beeps.toggle() - config.dialpadBeeps = settings_dialpad_beeps.isChecked + binding.apply { + settingsDialpadBeeps.isChecked = config.dialpadBeeps + settingsDialpadBeepsHolder.setOnClickListener { + settingsDialpadBeeps.toggle() + config.dialpadBeeps = settingsDialpadBeeps.isChecked + } } } private fun setupShowCallConfirmation() { - settings_show_call_confirmation.isChecked = config.showCallConfirmation - settings_show_call_confirmation_holder.setOnClickListener { - settings_show_call_confirmation.toggle() - config.showCallConfirmation = settings_show_call_confirmation.isChecked + binding.apply { + settingsShowCallConfirmation.isChecked = config.showCallConfirmation + settingsShowCallConfirmationHolder.setOnClickListener { + settingsShowCallConfirmation.toggle() + config.showCallConfirmation = settingsShowCallConfirmation.isChecked + } } } private fun setupDisableProximitySensor() { - settings_disable_proximity_sensor.isChecked = config.disableProximitySensor - settings_disable_proximity_sensor_holder.setOnClickListener { - settings_disable_proximity_sensor.toggle() - config.disableProximitySensor = settings_disable_proximity_sensor.isChecked + binding.apply { + settingsDisableProximitySensor.isChecked = config.disableProximitySensor + settingsDisableProximitySensorHolder.setOnClickListener { + settingsDisableProximitySensor.toggle() + config.disableProximitySensor = settingsDisableProximitySensor.isChecked + } } } private fun setupDisableSwipeToAnswer() { - settings_disable_swipe_to_answer.isChecked = config.disableSwipeToAnswer - settings_disable_swipe_to_answer_holder.setOnClickListener { - settings_disable_swipe_to_answer.toggle() - config.disableSwipeToAnswer = settings_disable_swipe_to_answer.isChecked + binding.apply { + settingsDisableSwipeToAnswer.isChecked = config.disableSwipeToAnswer + settingsDisableSwipeToAnswerHolder.setOnClickListener { + settingsDisableSwipeToAnswer.toggle() + config.disableSwipeToAnswer = settingsDisableSwipeToAnswer.isChecked + } } } private fun setupAlwaysShowFullscreen() { - settings_always_show_fullscreen.isChecked = config.alwaysShowFullscreen - settings_always_show_fullscreen_holder.setOnClickListener { - settings_always_show_fullscreen.toggle() - config.alwaysShowFullscreen = settings_always_show_fullscreen.isChecked + binding.apply { + settingsAlwaysShowFullscreen.isChecked = config.alwaysShowFullscreen + settingsAlwaysShowFullscreenHolder.setOnClickListener { + settingsAlwaysShowFullscreen.toggle() + config.alwaysShowFullscreen = settingsAlwaysShowFullscreen.isChecked + } } } private fun setupCallsExport() { - settings_export_calls_holder.setOnClickListener { + binding.settingsExportCallsHolder.setOnClickListener { ExportCallHistoryDialog(this) { filename -> saveDocument.launch(filename) } @@ -301,8 +332,8 @@ class SettingsActivity : SimpleActivity() { } private fun setupCallsImport() { - settings_import_calls_holder.setOnClickListener { - getContent.launch(callHistoryFileType) + binding.settingsImportCallsHolder.setOnClickListener { + getContent.launch(CALL_HISTORY_FILE_TYPE) } }