├── app
├── .gitignore
├── src
│ ├── main
│ │ ├── res
│ │ │ ├── resources.properties
│ │ │ ├── values-bn
│ │ │ │ └── strings.xml
│ │ │ ├── values-bs
│ │ │ │ └── strings.xml
│ │ │ ├── values-cy
│ │ │ │ └── strings.xml
│ │ │ ├── values-pa
│ │ │ │ └── strings.xml
│ │ │ ├── drawable
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── call_draggable_background.xml
│ │ │ │ ├── tab_indicator.xml
│ │ │ │ ├── ic_minus_vector.xml
│ │ │ │ ├── ic_hashtag.xml
│ │ │ │ ├── button_dialpad_background.xml
│ │ │ │ ├── pulsing_background.xml
│ │ │ │ ├── ic_sim_vector.xml
│ │ │ │ ├── ic_transparent.xml
│ │ │ │ ├── call_draggable_background_stroke.xml
│ │ │ │ ├── ripple_all_corners_12dp.xml
│ │ │ │ ├── ripple_all_corners_8dp.xml
│ │ │ │ ├── ic_backspace_x.xml
│ │ │ │ ├── ic_theme_black.xml
│ │ │ │ ├── ripple_left_corners_8dp.xml
│ │ │ │ ├── ripple_right_corners_8dp.xml
│ │ │ │ ├── button_dialpad.xml
│ │ │ │ ├── button_dialpad_press.xml
│ │ │ │ ├── ic_sim_one.xml
│ │ │ │ ├── ic_phone_down_red_vector.xml
│ │ │ │ ├── ic_phone_down_vector.xml
│ │ │ │ ├── ic_asterisk.xml
│ │ │ │ ├── pulsing_background_ripple.xml
│ │ │ │ ├── ic_phone_green_vector.xml
│ │ │ │ ├── shortcut_dialpad.xml
│ │ │ │ ├── ic_call_merge_vector.xml
│ │ │ │ ├── button_background_11dp.xml
│ │ │ │ ├── button_rounded_8dp.xml
│ │ │ │ ├── ic_sim_two.xml
│ │ │ │ ├── ic_person_rounded_scaled.xml
│ │ │ │ ├── ic_pause_vector.xml
│ │ │ │ ├── ic_call_end.xml
│ │ │ │ ├── ic_theme.xml
│ │ │ │ ├── ic_phone_one_vector.xml
│ │ │ │ ├── ic_voicemail.xml
│ │ │ │ ├── ic_bold_italic.xml
│ │ │ │ ├── ic_messages.xml
│ │ │ │ ├── ic_backspace.xml
│ │ │ │ ├── placeholder_voicemail.xml
│ │ │ │ ├── ic_call_split_vector.xml
│ │ │ │ ├── button_rounded.xml
│ │ │ │ ├── ic_slider.xml
│ │ │ │ ├── ic_add_call_vector.xml
│ │ │ │ ├── ic_bold.xml
│ │ │ │ ├── ic_clock_filled_scaled.xml
│ │ │ │ ├── tab_background.xml
│ │ │ │ ├── ic_star_vector_scaled.xml
│ │ │ │ ├── ic_call_swap_vector.xml
│ │ │ │ ├── ic_hd.xml
│ │ │ │ ├── ic_call_missed_vector.xml
│ │ │ │ ├── ic_volume_down_vector.xml
│ │ │ │ ├── ic_telegram_vector.xml
│ │ │ │ ├── ic_italic.xml
│ │ │ │ ├── ic_pause_crossed_vector.xml
│ │ │ │ ├── ic_microphone_off_vector.xml
│ │ │ │ ├── ic_call_made_vector.xml
│ │ │ │ ├── ic_restore_vector.xml
│ │ │ │ ├── ic_call_received_vector.xml
│ │ │ │ ├── ic_call_accept.xml
│ │ │ │ ├── ic_run.xml
│ │ │ │ ├── ic_show_block.xml
│ │ │ │ ├── ic_slider_outline.xml
│ │ │ │ ├── ic_change.xml
│ │ │ │ ├── ic_restart.xml
│ │ │ │ ├── ic_person_rounded_outline.xml
│ │ │ │ ├── ic_bluetooth_audio_vector.xml
│ │ │ │ ├── ic_note.xml
│ │ │ │ ├── ic_volume_up_vector.xml
│ │ │ │ ├── ic_threema_vector.xml
│ │ │ │ ├── ic_contact_photo.xml
│ │ │ │ ├── ic_whatsapp_vector.xml
│ │ │ │ ├── ic_slider_vertical.xml
│ │ │ │ ├── ic_info.xml
│ │ │ │ ├── ic_wallpaper.xml
│ │ │ │ ├── ic_phone_two_vector.xml
│ │ │ │ ├── ic_contact_blur.xml
│ │ │ │ ├── ic_answer_buttons.xml
│ │ │ │ ├── ic_signal_vector.xml
│ │ │ │ └── ic_call_button_bottom.xml
│ │ │ ├── mipmap-hdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_five.png
│ │ │ │ ├── ic_launcher_four.png
│ │ │ │ ├── ic_launcher_nine.png
│ │ │ │ ├── ic_launcher_one.png
│ │ │ │ ├── ic_launcher_six.png
│ │ │ │ ├── ic_launcher_ten.png
│ │ │ │ ├── ic_launcher_two.png
│ │ │ │ ├── ic_launcher_eight.png
│ │ │ │ ├── ic_launcher_eleven.png
│ │ │ │ ├── ic_launcher_seven.png
│ │ │ │ ├── ic_launcher_three.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ ├── ic_launcher_foreground.png
│ │ │ │ ├── ic_launcher_monochrome.png
│ │ │ │ ├── ic_launcher_six_background.png
│ │ │ │ ├── ic_launcher_ten_background.png
│ │ │ │ ├── ic_launcher_two_background.png
│ │ │ │ ├── ic_launcher_two_foreground.png
│ │ │ │ ├── ic_launcher_two_monochrome.png
│ │ │ │ ├── ic_launcher_eight_background.png
│ │ │ │ ├── ic_launcher_eleven_background.png
│ │ │ │ ├── ic_launcher_five_background.png
│ │ │ │ ├── ic_launcher_four_background.png
│ │ │ │ ├── ic_launcher_nine_background.png
│ │ │ │ ├── ic_launcher_seven_background.png
│ │ │ │ └── ic_launcher_three_background.png
│ │ │ ├── mipmap-mdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_five.png
│ │ │ │ ├── ic_launcher_four.png
│ │ │ │ ├── ic_launcher_nine.png
│ │ │ │ ├── ic_launcher_one.png
│ │ │ │ ├── ic_launcher_six.png
│ │ │ │ ├── ic_launcher_ten.png
│ │ │ │ ├── ic_launcher_two.png
│ │ │ │ ├── ic_launcher_eight.png
│ │ │ │ ├── ic_launcher_eleven.png
│ │ │ │ ├── ic_launcher_seven.png
│ │ │ │ ├── ic_launcher_three.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ ├── ic_launcher_foreground.png
│ │ │ │ ├── ic_launcher_monochrome.png
│ │ │ │ ├── ic_launcher_six_background.png
│ │ │ │ ├── ic_launcher_ten_background.png
│ │ │ │ ├── ic_launcher_two_background.png
│ │ │ │ ├── ic_launcher_two_foreground.png
│ │ │ │ ├── ic_launcher_two_monochrome.png
│ │ │ │ ├── ic_launcher_eight_background.png
│ │ │ │ ├── ic_launcher_eleven_background.png
│ │ │ │ ├── ic_launcher_five_background.png
│ │ │ │ ├── ic_launcher_four_background.png
│ │ │ │ ├── ic_launcher_nine_background.png
│ │ │ │ ├── ic_launcher_seven_background.png
│ │ │ │ └── ic_launcher_three_background.png
│ │ │ ├── mipmap-xhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_one.png
│ │ │ │ ├── ic_launcher_six.png
│ │ │ │ ├── ic_launcher_ten.png
│ │ │ │ ├── ic_launcher_two.png
│ │ │ │ ├── ic_launcher_eight.png
│ │ │ │ ├── ic_launcher_eleven.png
│ │ │ │ ├── ic_launcher_five.png
│ │ │ │ ├── ic_launcher_four.png
│ │ │ │ ├── ic_launcher_nine.png
│ │ │ │ ├── ic_launcher_seven.png
│ │ │ │ ├── ic_launcher_three.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ ├── ic_launcher_foreground.png
│ │ │ │ ├── ic_launcher_monochrome.png
│ │ │ │ ├── ic_launcher_eight_background.png
│ │ │ │ ├── ic_launcher_five_background.png
│ │ │ │ ├── ic_launcher_four_background.png
│ │ │ │ ├── ic_launcher_nine_background.png
│ │ │ │ ├── ic_launcher_seven_background.png
│ │ │ │ ├── ic_launcher_six_background.png
│ │ │ │ ├── ic_launcher_ten_background.png
│ │ │ │ ├── ic_launcher_three_background.png
│ │ │ │ ├── ic_launcher_two_background.png
│ │ │ │ ├── ic_launcher_two_foreground.png
│ │ │ │ ├── ic_launcher_two_monochrome.png
│ │ │ │ └── ic_launcher_eleven_background.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_eight.png
│ │ │ │ ├── ic_launcher_five.png
│ │ │ │ ├── ic_launcher_four.png
│ │ │ │ ├── ic_launcher_nine.png
│ │ │ │ ├── ic_launcher_one.png
│ │ │ │ ├── ic_launcher_seven.png
│ │ │ │ ├── ic_launcher_six.png
│ │ │ │ ├── ic_launcher_ten.png
│ │ │ │ ├── ic_launcher_three.png
│ │ │ │ ├── ic_launcher_two.png
│ │ │ │ ├── ic_launcher_eleven.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ ├── ic_launcher_foreground.png
│ │ │ │ ├── ic_launcher_monochrome.png
│ │ │ │ ├── ic_launcher_five_background.png
│ │ │ │ ├── ic_launcher_four_background.png
│ │ │ │ ├── ic_launcher_nine_background.png
│ │ │ │ ├── ic_launcher_six_background.png
│ │ │ │ ├── ic_launcher_ten_background.png
│ │ │ │ ├── ic_launcher_two_background.png
│ │ │ │ ├── ic_launcher_two_foreground.png
│ │ │ │ ├── ic_launcher_two_monochrome.png
│ │ │ │ ├── ic_launcher_eight_background.png
│ │ │ │ ├── ic_launcher_eleven_background.png
│ │ │ │ ├── ic_launcher_seven_background.png
│ │ │ │ └── ic_launcher_three_background.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_five.png
│ │ │ │ ├── ic_launcher_four.png
│ │ │ │ ├── ic_launcher_nine.png
│ │ │ │ ├── ic_launcher_one.png
│ │ │ │ ├── ic_launcher_six.png
│ │ │ │ ├── ic_launcher_ten.png
│ │ │ │ ├── ic_launcher_two.png
│ │ │ │ ├── ic_launcher_eight.png
│ │ │ │ ├── ic_launcher_eleven.png
│ │ │ │ ├── ic_launcher_seven.png
│ │ │ │ ├── ic_launcher_three.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ ├── ic_launcher_foreground.png
│ │ │ │ ├── ic_launcher_monochrome.png
│ │ │ │ ├── ic_launcher_six_background.png
│ │ │ │ ├── ic_launcher_ten_background.png
│ │ │ │ ├── ic_launcher_two_background.png
│ │ │ │ ├── ic_launcher_two_foreground.png
│ │ │ │ ├── ic_launcher_two_monochrome.png
│ │ │ │ ├── ic_launcher_eight_background.png
│ │ │ │ ├── ic_launcher_five_background.png
│ │ │ │ ├── ic_launcher_four_background.png
│ │ │ │ ├── ic_launcher_nine_background.png
│ │ │ │ ├── ic_launcher_seven_background.png
│ │ │ │ ├── ic_launcher_three_background.png
│ │ │ │ └── ic_launcher_eleven_background.png
│ │ │ ├── values-az
│ │ │ │ └── strings.xml
│ │ │ ├── values-mk
│ │ │ │ └── strings.xml
│ │ │ ├── values-night
│ │ │ │ └── colors.xml
│ │ │ ├── values
│ │ │ │ ├── integers.xml
│ │ │ │ ├── bools.xml
│ │ │ │ ├── colors.xml
│ │ │ │ └── styles.xml
│ │ │ ├── values-sw720dp
│ │ │ │ └── dimens.xml
│ │ │ ├── values-land
│ │ │ │ └── dimens.xml
│ │ │ ├── values-sw600dp
│ │ │ │ └── dimens.xml
│ │ │ ├── layout
│ │ │ │ ├── dialog_choose_social.xml
│ │ │ │ ├── fragment_contacts.xml
│ │ │ │ ├── fragment_favorites.xml
│ │ │ │ ├── item_recents_date.xml
│ │ │ │ ├── layout_simple_recycler_view.xml
│ │ │ │ ├── dialog_filter_contact_sources.xml
│ │ │ │ ├── item_speed_dial.xml
│ │ │ │ ├── dialog_show_grouped_calls.xml
│ │ │ │ ├── item_filter_contact_source.xml
│ │ │ │ ├── item_choose_social.xml
│ │ │ │ ├── dialog_export_call_history.xml
│ │ │ │ ├── dialog_add_speed_dial.xml
│ │ │ │ ├── dialog_change_text.xml
│ │ │ │ ├── activity_conference.xml
│ │ │ │ ├── timer_notification.xml
│ │ │ │ ├── dialog_select_sim.xml
│ │ │ │ └── dialog_manage_visible_tabs.xml
│ │ │ ├── mipmap-anydpi-v26
│ │ │ │ ├── ic_launcher.xml
│ │ │ │ ├── ic_launcher_one.xml
│ │ │ │ ├── ic_launcher_five.xml
│ │ │ │ ├── ic_launcher_four.xml
│ │ │ │ ├── ic_launcher_nine.xml
│ │ │ │ ├── ic_launcher_six.xml
│ │ │ │ ├── ic_launcher_ten.xml
│ │ │ │ ├── ic_launcher_eight.xml
│ │ │ │ ├── ic_launcher_eleven.xml
│ │ │ │ ├── ic_launcher_seven.xml
│ │ │ │ ├── ic_launcher_three.xml
│ │ │ │ └── ic_launcher_two.xml
│ │ │ ├── menu
│ │ │ │ ├── menu_call_history_item_options.xml
│ │ │ │ ├── menu_settings.xml
│ │ │ │ ├── menu_call_history.xml
│ │ │ │ ├── menu_dialpad.xml
│ │ │ │ ├── menu_recent_item_options.xml
│ │ │ │ └── menu.xml
│ │ │ ├── values-sw340dp-notlong
│ │ │ │ └── dimens.xml
│ │ │ ├── values-pa-rPK
│ │ │ │ └── strings.xml
│ │ │ ├── values-sw240dp
│ │ │ │ └── dimens.xml
│ │ │ ├── values-lv
│ │ │ │ └── strings.xml
│ │ │ └── raw
│ │ │ │ └── t9languages.json
│ │ └── kotlin
│ │ │ └── com
│ │ │ └── goodwy
│ │ │ └── dialer
│ │ │ ├── models
│ │ │ ├── StateWrapper.kt
│ │ │ ├── CallerNote.kt
│ │ │ ├── SIMAccount.kt
│ │ │ ├── Events.kt
│ │ │ ├── CallContact.kt
│ │ │ ├── PhoneAccountHandleModel.kt
│ │ │ ├── CallLogItem.kt
│ │ │ ├── SpeedDial.kt
│ │ │ ├── TimerState.kt
│ │ │ ├── TimerEvent.kt
│ │ │ ├── AudioRoute.kt
│ │ │ ├── Timer.kt
│ │ │ └── RecentCall.kt
│ │ │ ├── interfaces
│ │ │ ├── RemoveSpeedDialListener.kt
│ │ │ ├── RefreshItemsListener.kt
│ │ │ └── TimerDao.kt
│ │ │ ├── helpers
│ │ │ ├── CameraTorchListener.kt
│ │ │ ├── UriUtils.kt
│ │ │ ├── CallerNotesHelper.kt
│ │ │ ├── TimerHelper.kt
│ │ │ ├── Converters.kt
│ │ │ └── CallContactAvatarHelper.kt
│ │ │ ├── extensions
│ │ │ ├── View.kt
│ │ │ ├── Long.kt
│ │ │ ├── RecyclerView.kt
│ │ │ ├── FastScrollerView.kt
│ │ │ ├── EditText.kt
│ │ │ ├── SharedPreferences.kt
│ │ │ ├── String.kt
│ │ │ └── Call.kt
│ │ │ ├── activities
│ │ │ ├── SplashActivity.kt
│ │ │ ├── SimpleActivity.kt
│ │ │ ├── ConferenceActivity.kt
│ │ │ └── NotificationActivity.kt
│ │ │ ├── dialogs
│ │ │ ├── ExportCallHistoryDialog.kt
│ │ │ ├── ShowGroupedCallsDialog.kt
│ │ │ ├── AddSpeedDialDialog.kt
│ │ │ ├── ChooseSocialDialog.kt
│ │ │ └── ManageVisibleTabsDialog.kt
│ │ │ ├── receivers
│ │ │ └── TimerReceiver.kt
│ │ │ └── adapters
│ │ │ └── ViewPagerAdapter.kt
│ ├── debug
│ │ └── res
│ │ │ └── values
│ │ │ └── strings.xml
│ └── gplay
│ │ └── AndroidManifest.xml
└── proguard-rules.pro
├── fastlane
└── metadata
│ └── android
│ └── en-US
│ ├── title.txt
│ ├── images
│ ├── icon.png
│ └── phoneScreenshots
│ │ ├── 1.png
│ │ ├── 2.png
│ │ ├── 3.png
│ │ ├── 4.png
│ │ ├── 5.png
│ │ ├── 6.png
│ │ ├── 7.png
│ │ └── 8.png
│ ├── short_description.txt
│ └── full_description.txt
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── .gitignore
├── .editorconfig
├── settings.gradle.kts
├── README.md
└── gradle.properties
/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 | /foss
3 | /gplay
4 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/title.txt:
--------------------------------------------------------------------------------
1 | Right Dialer
--------------------------------------------------------------------------------
/app/src/main/res/resources.properties:
--------------------------------------------------------------------------------
1 | unqualifiedResLocale=en-US
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-bn/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-bs/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-cy/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-pa/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/drawable/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/fastlane/metadata/android/en-US/images/icon.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_five.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_five.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_four.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_four.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_nine.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_nine.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_one.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_one.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_six.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_six.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_ten.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_ten.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_two.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_two.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_five.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_five.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_four.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_four.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_nine.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_nine.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_one.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_one.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_six.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_six.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_ten.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_ten.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_two.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_two.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_one.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_one.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_six.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_six.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_ten.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_ten.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_two.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_two.png
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/goodwy/dialer/models/StateWrapper.kt:
--------------------------------------------------------------------------------
1 | package com.goodwy.dialer.models
2 |
3 | data class StateWrapper(val state: TimerState)
4 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_eight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_eight.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_eleven.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_eleven.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_seven.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_seven.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_three.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_three.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_eight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_eight.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_eleven.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_eleven.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_seven.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_seven.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_three.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_three.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_eight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_eight.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_eleven.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_eleven.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_five.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_five.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_four.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_four.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_nine.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_nine.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_seven.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_seven.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_three.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_three.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_eight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_eight.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_five.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_five.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_four.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_four.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_nine.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_nine.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_one.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_one.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_seven.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_seven.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_six.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_six.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_ten.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_ten.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_three.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_three.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_two.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_two.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_five.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_five.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_four.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_four.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_nine.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_nine.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_one.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_one.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_six.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_six.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_ten.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_ten.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_two.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_two.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_eleven.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_eleven.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_eight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_eight.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_eleven.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_eleven.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_seven.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_seven.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_three.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_three.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_monochrome.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_monochrome.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_monochrome.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_monochrome.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_monochrome.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_monochrome.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_monochrome.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_monochrome.png
--------------------------------------------------------------------------------
/app/src/main/res/values-az/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Zəng paneli
4 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_six_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_six_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_ten_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_ten_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_two_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_two_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_two_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_two_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_two_monochrome.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_two_monochrome.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_six_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_six_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_ten_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_ten_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_two_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_two_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_two_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_two_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_two_monochrome.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_two_monochrome.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_monochrome.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_monochrome.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_eight_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_eight_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_eleven_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_eleven_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_five_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_five_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_four_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_four_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_nine_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_nine_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_seven_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_seven_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_three_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_three_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_eight_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_eight_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_eleven_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_eleven_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_five_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_five_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_four_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_four_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_nine_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_nine_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_seven_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_seven_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_three_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_three_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_eight_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_eight_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_five_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_five_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_four_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_four_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_nine_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_nine_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_seven_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_seven_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_six_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_six_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_ten_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_ten_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_three_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_three_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_two_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_two_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_two_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_two_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_two_monochrome.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_two_monochrome.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_five_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_five_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_four_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_four_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_nine_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_nine_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_six_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_six_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_ten_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_ten_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_two_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_two_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_two_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_two_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_two_monochrome.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_two_monochrome.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_six_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_six_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_ten_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_ten_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_two_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_two_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_two_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_two_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_two_monochrome.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_two_monochrome.png
--------------------------------------------------------------------------------
/app/src/main/res/values-mk/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Телефон
4 |
5 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/1.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/2.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/3.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/4.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/5.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/6.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/7.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/8.png
--------------------------------------------------------------------------------
/app/src/debug/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Phone_debug
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_eleven_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_eleven_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_eight_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_eight_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_eleven_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_eleven_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_seven_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_seven_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_three_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_three_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_eight_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_eight_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_five_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_five_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_four_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_four_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_nine_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_nine_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_seven_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_seven_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_three_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_three_background.png
--------------------------------------------------------------------------------
/app/src/main/res/values-night/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | @color/white
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_eleven_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Goodwy/Dialer/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_eleven_background.png
--------------------------------------------------------------------------------
/app/src/main/res/values/integers.xml:
--------------------------------------------------------------------------------
1 |
2 | 2
3 | 65536
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/values-sw720dp/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 228dp
5 |
6 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | *.aab
3 | .gradle
4 | /local.properties
5 | /.idea/
6 | .DS_Store
7 | /build
8 | /captures
9 | keystore.jks
10 | keystore.properties
11 | fastlane/report.xml
12 | .kotlin/
13 |
--------------------------------------------------------------------------------
/app/src/main/res/values/bools.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | false
4 | true
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/goodwy/dialer/interfaces/RemoveSpeedDialListener.kt:
--------------------------------------------------------------------------------
1 | package com.goodwy.dialer.interfaces
2 |
3 | interface RemoveSpeedDialListener {
4 | fun removeSpeedDial(ids: ArrayList)
5 | }
6 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/goodwy/dialer/models/CallerNote.kt:
--------------------------------------------------------------------------------
1 | package com.goodwy.dialer.models
2 |
3 | data class CallerNote(
4 | var id: String,
5 | var note: String,
6 | val creationDate: Long
7 | )
8 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/goodwy/dialer/helpers/CameraTorchListener.kt:
--------------------------------------------------------------------------------
1 | package com.goodwy.dialer.helpers
2 |
3 | interface CameraTorchListener {
4 | fun onTorchEnabled(isEnabled:Boolean)
5 |
6 | fun onTorchUnavailable()
7 | }
8 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/goodwy/dialer/interfaces/RefreshItemsListener.kt:
--------------------------------------------------------------------------------
1 | package com.goodwy.dialer.interfaces
2 |
3 | interface RefreshItemsListener {
4 | fun refreshItems(invalidate: Boolean = false, needUpdate: Boolean = false, callback: (() -> Unit)? = null)
5 | }
6 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/short_description.txt:
--------------------------------------------------------------------------------
1 | The Dialer app is a built-in phone application, which manages your call history and contacts. It provides quick access to making calls and sending text messages through the application interface, including popular messengers.
--------------------------------------------------------------------------------
/app/src/gplay/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/values-land/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 63dp
5 |
6 |
7 | 328dp
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/values-sw600dp/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 22dp
5 |
6 |
7 | 168dp
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/call_draggable_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/tab_indicator.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
4 | networkTimeout=10000
5 | validateDistributionUrl=true
6 | zipStorePath=wrapper/dists
7 | zipStoreBase=GRADLE_USER_HOME
8 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/goodwy/dialer/models/SIMAccount.kt:
--------------------------------------------------------------------------------
1 | package com.goodwy.dialer.models
2 |
3 | import android.telecom.PhoneAccountHandle
4 |
5 | data class SIMAccount(
6 | val id: Int,
7 | val handle: PhoneAccountHandle,
8 | val label: String,
9 | val phoneNumber: String,
10 | val color: Int,
11 | )
12 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/goodwy/dialer/models/Events.kt:
--------------------------------------------------------------------------------
1 | package com.goodwy.dialer.models
2 |
3 | sealed class Events {
4 | data object RefreshCallLog : Events()
5 |
6 | class StateChanged(val isEnabled: Boolean)
7 |
8 | class CameraUnavailable
9 |
10 | class StopStroboscope
11 |
12 | class StopSOS
13 | }
14 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/dialog_choose_social.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/goodwy/dialer/extensions/View.kt:
--------------------------------------------------------------------------------
1 | package com.goodwy.dialer.extensions
2 |
3 | import android.graphics.Rect
4 | import android.view.View
5 |
6 | val View.boundingBox
7 | get() = Rect().also { getGlobalVisibleRect(it) }
8 |
9 | fun View.setWidth(size: Int) {
10 | val lp = layoutParams
11 | lp.width = size
12 | layoutParams = lp
13 | }
14 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_one.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_minus_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_five.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_four.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_nine.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_six.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_ten.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_eight.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_eleven.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_seven.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_three.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_two.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_hashtag.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/button_dialpad_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/pulsing_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
8 |
9 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_sim_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/goodwy/dialer/models/CallContact.kt:
--------------------------------------------------------------------------------
1 | package com.goodwy.dialer.models
2 |
3 | // a simpler Contact model containing just info needed at the call screen
4 | data class CallContact(
5 | var name: String,
6 | var photoUri: String,
7 | var number: String,
8 | var numberLabel: String,
9 | var description: String,
10 | var isABusinessCall: Boolean = false,
11 | var isVoiceMail: Boolean = false
12 | )
13 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_call_history_item_options.xml:
--------------------------------------------------------------------------------
1 |
2 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #33FFFFFF
4 | #FF67CE67
5 | #FFEB5545
6 | #FF5E5CE6
7 | #FF454545
8 | @color/dark_grey
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_transparent.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_contacts.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_favorites.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/call_draggable_background_stroke.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ripple_all_corners_12dp.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ripple_all_corners_8dp.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/goodwy/dialer/activities/SplashActivity.kt:
--------------------------------------------------------------------------------
1 | package com.goodwy.dialer.activities
2 |
3 | import android.annotation.SuppressLint
4 | import android.content.Intent
5 | import com.goodwy.commons.activities.BaseSplashActivity
6 |
7 | @SuppressLint("CustomSplashScreen")
8 | class SplashActivity : BaseSplashActivity() {
9 | override fun initActivity() {
10 | startActivity(Intent(this, MainActivity::class.java))
11 | finish()
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/goodwy/dialer/models/PhoneAccountHandleModel.kt:
--------------------------------------------------------------------------------
1 | package com.goodwy.dialer.models
2 |
3 | import android.content.ComponentName
4 | import android.telecom.PhoneAccountHandle
5 |
6 | data class PhoneAccountHandleModel(
7 | val packageName: String,
8 | val className: String,
9 | val id: String
10 | ) {
11 | fun toPhoneAccountHandle(): PhoneAccountHandle {
12 | return PhoneAccountHandle(
13 | ComponentName(packageName, className), id
14 | )
15 | }
16 | }
17 |
18 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_backspace_x.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_theme_black.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ripple_left_corners_8dp.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
5 |
6 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | # EditorConfig
2 | # http://EditorConfig.org
3 |
4 | # top-most EditorConfig file
5 | root = true
6 |
7 | # LF end-of-line, insert an empty new line and UTF-8
8 | [*]
9 | end_of_line = lf
10 | insert_final_newline = true
11 | charset = utf-8
12 | indent_style = space
13 | indent_size = 4
14 | continuation_indent_size = 4
15 | max_line_length = 160
16 |
17 | [*.xml]
18 | continuation_indent_size = 4
19 |
20 | [*.kt]
21 | ij_kotlin_name_count_to_use_star_import = 5
22 | ij_kotlin_name_count_to_use_star_import_for_members = 5
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ripple_right_corners_8dp.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
5 |
6 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/goodwy/dialer/extensions/Long.kt:
--------------------------------------------------------------------------------
1 | package com.goodwy.dialer.extensions
2 |
3 | import com.goodwy.commons.extensions.getFormattedDuration
4 | import com.goodwy.commons.extensions.toDayCodeGregorian
5 | import kotlin.math.roundToInt
6 |
7 | fun Long.getDayCode(): String {
8 | return toDayCodeGregorian("yyyy-MM-dd") // format helps with sorting in call log
9 | }
10 | fun Long.getFormattedDuration(forceShowHours: Boolean = false): String {
11 | return this.div(1000F).roundToInt().getFormattedDuration(forceShowHours)
12 | }
13 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/goodwy/dialer/extensions/RecyclerView.kt:
--------------------------------------------------------------------------------
1 | package com.goodwy.dialer.extensions
2 |
3 | import androidx.recyclerview.widget.RecyclerView
4 |
5 | fun RecyclerView.runAfterAnimations(callback: () -> Unit) {
6 | if (isComputingLayout) {
7 | post { runAfterAnimations(callback) }
8 | return
9 | }
10 |
11 | val animator = itemAnimator
12 | if (animator == null) {
13 | post(callback)
14 | } else {
15 | animator.isRunning {
16 | post(callback)
17 | }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_recents_date.xml:
--------------------------------------------------------------------------------
1 |
2 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_settings.xml:
--------------------------------------------------------------------------------
1 |
2 |
14 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/button_dialpad.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/settings.gradle.kts:
--------------------------------------------------------------------------------
1 | rootProject.name = "Dialer"
2 | pluginManagement {
3 | repositories {
4 | gradlePluginPortal()
5 | google()
6 | mavenCentral()
7 | }
8 | }
9 | dependencyResolutionManagement {
10 | repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
11 | repositories {
12 | google()
13 | mavenCentral()
14 | maven { setUrl("https://artifactory-external.vkpartner.ru/artifactory/maven") }
15 | maven { setUrl("https://jitpack.io") }
16 | mavenLocal()
17 | }
18 | }
19 | include(":app")
20 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/button_dialpad_press.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_sim_one.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/layout_simple_recycler_view.xml:
--------------------------------------------------------------------------------
1 |
11 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/goodwy/dialer/models/CallLogItem.kt:
--------------------------------------------------------------------------------
1 | package com.goodwy.dialer.models
2 |
3 | import java.io.Serializable
4 | import com.goodwy.commons.helpers.DAY_SECONDS
5 |
6 | @kotlinx.serialization.Serializable
7 | sealed class CallLogItem : Serializable {
8 | data class Date(
9 | val timestamp: Long,
10 | val dayCode: String,
11 | ) : CallLogItem()
12 |
13 | fun getItemId(): Int {
14 | return when (this) {
15 | is Date -> -(timestamp / (DAY_SECONDS * 1000L)).toInt()
16 | is RecentCall -> id
17 | }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_phone_down_red_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_phone_down_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/dialog_filter_contact_sources.xml:
--------------------------------------------------------------------------------
1 |
2 |
11 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Right Dialer
2 |
3 |
4 | The Dialer app is a built-in phone application on Android devices, which manages your call history and contacts.
5 | It provides quick access to making calls and sending text messages through the application interface,
6 | including popular messengers (Whatsapp, Telegram, Signal, Viber, and Threema).
7 |
8 | [Google Play](https://play.google.com/store/apps/details?id=com.goodwy.dialer)
9 |
10 | Based on [Simple Dialer](https://github.com/SimpleMobileTools/Simple-Dialer).
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_asterisk.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/pulsing_background_ripple.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
6 |
7 |
9 |
10 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_phone_green_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/shortcut_dialpad.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
5 |
6 |
7 |
8 |
9 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/app/src/main/res/values-sw340dp-notlong/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 0.05
5 | 0.48
6 | 0.90
7 | 400dp
8 |
9 |
10 | 0dp
11 | 8dp
12 | 380dp
13 | 480dp
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_call_merge_vector.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/button_background_11dp.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 | -
5 |
6 |
-
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/button_rounded_8dp.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
5 |
-
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_sim_two.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/goodwy/dialer/models/SpeedDial.kt:
--------------------------------------------------------------------------------
1 | package com.goodwy.dialer.models
2 |
3 | import android.content.Context
4 | import com.goodwy.commons.extensions.getPhoneNumberTypeText
5 |
6 | data class SpeedDial(
7 | val id: Int,
8 | var number: String,
9 | var displayName: String,
10 | var type: Int? = null,
11 | var label: String? = null
12 | ) {
13 | fun isValid() = number.trim().isNotEmpty()
14 |
15 | fun getName(context: Context) = if (type != null && label != null) {
16 | "$displayName - ${context.getPhoneNumberTypeText(type!!, label!!)}"
17 | } else {
18 | displayName
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_person_rounded_scaled.xml:
--------------------------------------------------------------------------------
1 |
3 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_pause_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_call_end.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
5 |
6 |
7 |
8 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_theme.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/values-pa-rPK/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | سیٹنگاں وچ ایہہ اَیپ مول فون چاہدی
4 | تہاڈے فونبوک پہنچ نہیں سکے
5 | کوئی پچھلیا کالاں نہیں لبھیاں
6 | کال دی تریخ ہٹاؤ
7 | فون کیبورڈ
8 | ایسٹرسک
9 | ہیشٹیگ
10 | کال دا نمبر
11 | فون دائک
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_phone_one_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_voicemail.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/goodwy/dialer/models/TimerState.kt:
--------------------------------------------------------------------------------
1 | package com.goodwy.dialer.models
2 |
3 | import androidx.annotation.Keep
4 |
5 | @Keep
6 | @kotlinx.serialization.Serializable
7 | sealed class TimerState {
8 | @Keep
9 | @kotlinx.serialization.Serializable
10 | object Idle : TimerState()
11 |
12 | @Keep
13 | @kotlinx.serialization.Serializable
14 | data class Running(val duration: Long, val tick: Long) : TimerState()
15 |
16 | @Keep
17 | @kotlinx.serialization.Serializable
18 | data class Paused(val duration: Long, val tick: Long) : TimerState()
19 |
20 | @Keep
21 | @kotlinx.serialization.Serializable
22 | object Finished : TimerState()
23 | }
24 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_bold_italic.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/full_description.txt:
--------------------------------------------------------------------------------
1 | Introducing the all-new Right Dialer app! Take your calling experience to the next level with our highly customizable interface.
2 |
3 | Personalize your device to match your unique style. With a wide range of themes and color options, you can truly make your calling experience your own.
4 |
5 | Key features:
6 |
7 | - Free and No annoying ads or interruptions
8 | - Enhanced security for your privacy
9 | - Intuitive and user-friendly interface
10 | - Integration with popular messengers
11 | - Call blocking and speed dialing
12 | - Dual sim card support
13 |
14 | Download Right Dialer now and customize your calling experience like never before!
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_messages.xml:
--------------------------------------------------------------------------------
1 |
6 |
11 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_backspace.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/placeholder_voicemail.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
5 |
6 |
7 |
8 |
9 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_call_split_vector.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_speed_dial.xml:
--------------------------------------------------------------------------------
1 |
2 |
16 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/goodwy/dialer/extensions/FastScrollerView.kt:
--------------------------------------------------------------------------------
1 | package com.goodwy.dialer.extensions
2 |
3 | import androidx.recyclerview.widget.RecyclerView
4 | import com.reddit.indicatorfastscroll.FastScrollItemIndicator
5 | import com.reddit.indicatorfastscroll.FastScrollerView
6 | import com.goodwy.commons.models.contacts.Contact
7 |
8 | fun FastScrollerView.setupWithContacts(
9 | recyclerView: RecyclerView,
10 | contacts: List,
11 | ) = setupWithRecyclerView(recyclerView, { position ->
12 | val initialLetter = try {
13 | contacts[position].getFirstLetter()
14 | } catch (_: IndexOutOfBoundsException) {
15 | ""
16 | }
17 |
18 | FastScrollItemIndicator.Text(initialLetter)
19 | })
20 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/button_rounded.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
5 |
7 |
9 |
10 |
11 | -
12 |
13 |
17 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/goodwy/dialer/models/TimerEvent.kt:
--------------------------------------------------------------------------------
1 | package com.goodwy.dialer.models
2 |
3 | import com.goodwy.dialer.helpers.INVALID_TIMER_ID
4 |
5 | sealed class TimerEvent(open val timerId: Int) {
6 | data class Delete(override val timerId: Int) : TimerEvent(timerId)
7 | data class Reset(override val timerId: Int) : TimerEvent(timerId)
8 | data class Start(override val timerId: Int, val duration: Long) : TimerEvent(timerId)
9 | data class Pause(override val timerId: Int, val duration: Long) : TimerEvent(timerId)
10 | data class Finish(override val timerId: Int, val duration: Long) : TimerEvent(timerId)
11 | data class Restart(override val timerId: Int) : TimerEvent(timerId)
12 | object Refresh : TimerEvent(INVALID_TIMER_ID)
13 | }
14 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_slider.xml:
--------------------------------------------------------------------------------
1 |
9 |
11 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_add_call_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_bold.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_clock_filled_scaled.xml:
--------------------------------------------------------------------------------
1 |
6 |
11 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/tab_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
9 |
14 |
15 |
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_star_vector_scaled.xml:
--------------------------------------------------------------------------------
1 |
6 |
11 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_call_swap_vector.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_hd.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_call_missed_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/goodwy/dialer/interfaces/TimerDao.kt:
--------------------------------------------------------------------------------
1 | package com.goodwy.dialer.interfaces
2 |
3 | import androidx.room.*
4 | import com.goodwy.dialer.models.Timer
5 |
6 | @Dao
7 | interface TimerDao {
8 |
9 | @Query("SELECT * FROM timers ORDER BY createdAt ASC")
10 | fun getTimers(): List
11 |
12 | @Query("SELECT * FROM timers WHERE id=:id")
13 | fun getTimer(id: Int): Timer?
14 |
15 | @Query("SELECT * FROM timers WHERE seconds=:seconds AND label=:label")
16 | fun findTimers(seconds: Int, label: String): List
17 |
18 | @Insert(onConflict = OnConflictStrategy.REPLACE)
19 | fun insertOrUpdateTimer(timer: Timer): Long
20 |
21 | @Query("DELETE FROM timers WHERE id=:id")
22 | fun deleteTimer(id: Int)
23 |
24 | @Delete
25 | fun deleteTimers(list: List)
26 | }
27 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/dialog_show_grouped_calls.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_volume_down_vector.xml:
--------------------------------------------------------------------------------
1 |
3 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_telegram_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_italic.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/values-sw240dp/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 94dp
4 | 72dp
5 | 72dp
6 |
7 |
8 | 30dp
9 |
10 |
11 | 62dp
12 | 0.05
13 | 0.48
14 | 0.95
15 | 170dp
16 | 300dp
17 |
18 |
19 | 0dp
20 | 8dp
21 |
22 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_pause_crossed_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_microphone_off_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_call_made_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_restore_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_call_received_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/goodwy/dialer/activities/SimpleActivity.kt:
--------------------------------------------------------------------------------
1 | package com.goodwy.dialer.activities
2 |
3 | import com.goodwy.commons.activities.BaseSimpleActivity
4 | import com.goodwy.dialer.R
5 |
6 | open class SimpleActivity : BaseSimpleActivity() {
7 | override fun getAppIconIDs() = arrayListOf(
8 | R.mipmap.ic_launcher,
9 | R.mipmap.ic_launcher_one,
10 | R.mipmap.ic_launcher_two,
11 | R.mipmap.ic_launcher_three,
12 | R.mipmap.ic_launcher_four,
13 | R.mipmap.ic_launcher_five,
14 | R.mipmap.ic_launcher_six,
15 | R.mipmap.ic_launcher_seven,
16 | R.mipmap.ic_launcher_eight,
17 | R.mipmap.ic_launcher_nine,
18 | R.mipmap.ic_launcher_ten,
19 | R.mipmap.ic_launcher_eleven
20 | )
21 |
22 | override fun getAppLauncherName() = getString(R.string.app_launcher_name)
23 |
24 | override fun getRepositoryName() = "Dialer"
25 | }
26 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_call_accept.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
5 |
-
6 |
7 |
8 |
9 |
10 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_run.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_show_block.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_slider_outline.xml:
--------------------------------------------------------------------------------
1 |
9 |
11 |
15 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_filter_contact_source.xml:
--------------------------------------------------------------------------------
1 |
2 |
11 |
12 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_change.xml:
--------------------------------------------------------------------------------
1 |
6 |
10 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_restart.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/goodwy/dialer/extensions/EditText.kt:
--------------------------------------------------------------------------------
1 | package com.goodwy.dialer.extensions
2 |
3 | import android.view.KeyEvent
4 | import android.widget.EditText
5 |
6 | fun EditText.addCharacter(char: Char) {
7 | dispatchKeyEvent(getKeyEvent(getCharKeyCode(char)))
8 | }
9 |
10 | fun EditText.getKeyEvent(keyCode: Int) = KeyEvent(0, 0, KeyEvent.ACTION_DOWN, keyCode, 0)
11 |
12 | private fun getCharKeyCode(char: Char) = when (char) {
13 | '0' -> KeyEvent.KEYCODE_0
14 | '1' -> KeyEvent.KEYCODE_1
15 | '2' -> KeyEvent.KEYCODE_2
16 | '3' -> KeyEvent.KEYCODE_3
17 | '4' -> KeyEvent.KEYCODE_4
18 | '5' -> KeyEvent.KEYCODE_5
19 | '6' -> KeyEvent.KEYCODE_6
20 | '7' -> KeyEvent.KEYCODE_7
21 | '8' -> KeyEvent.KEYCODE_8
22 | '9' -> KeyEvent.KEYCODE_9
23 | '*' -> KeyEvent.KEYCODE_STAR
24 | ',' -> KeyEvent.KEYCODE_NUMPAD_COMMA
25 | '+' -> KeyEvent.KEYCODE_PLUS
26 | ';' -> KeyEvent.KEYCODE_SEMICOLON
27 | else -> KeyEvent.KEYCODE_POUND
28 | }
29 |
30 | fun EditText.disableKeyboard() {
31 | showSoftInputOnFocus = false
32 | }
33 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_person_rounded_outline.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
14 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_bluetooth_audio_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/goodwy/dialer/models/AudioRoute.kt:
--------------------------------------------------------------------------------
1 | package com.goodwy.dialer.models
2 |
3 | import android.telecom.CallAudioState
4 | import androidx.annotation.DrawableRes
5 | import androidx.annotation.StringRes
6 | import com.goodwy.dialer.R
7 |
8 | enum class AudioRoute(val route: Int, @StringRes val stringRes: Int, @DrawableRes val iconRes: Int) {
9 | SPEAKER(CallAudioState.ROUTE_SPEAKER, R.string.audio_route_speaker, R.drawable.ic_volume_up_vector), //Speaker
10 | EARPIECE(CallAudioState.ROUTE_EARPIECE, R.string.audio_route_earpiece_g, R.drawable.ic_phone_device), //Phone
11 | BLUETOOTH(CallAudioState.ROUTE_BLUETOOTH, R.string.audio_route_bluetooth, R.drawable.ic_bluetooth_audio_vector),
12 | WIRED_HEADSET(CallAudioState.ROUTE_WIRED_HEADSET, R.string.audio_route_wired_headset, R.drawable.ic_headset_wired), //Wired headphones
13 | WIRED_OR_EARPIECE(CallAudioState.ROUTE_WIRED_OR_EARPIECE, R.string.audio_route_wired_or_earpiece, R.drawable.ic_volume_down_vector); //Phone or Wired headphones
14 |
15 | companion object {
16 | fun fromRoute(route: Int?) = entries.firstOrNull { it.route == route }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/goodwy/dialer/models/Timer.kt:
--------------------------------------------------------------------------------
1 | package com.goodwy.dialer.models
2 |
3 | import androidx.annotation.Keep
4 | import androidx.room.Entity
5 | import androidx.room.PrimaryKey
6 |
7 | @Entity(tableName = "timers")
8 | @Keep
9 | @kotlinx.serialization.Serializable
10 | data class Timer(
11 | @PrimaryKey(autoGenerate = true) var id: Int?,
12 | var seconds: Int,
13 | val state: TimerState,
14 | var vibrate: Boolean,
15 | var soundUri: String,
16 | var soundTitle: String,
17 | var title: String,
18 | var label: String,
19 | var description: String,
20 | var createdAt: Long,
21 | var channelId: String? = null,
22 | var oneShot: Boolean = false
23 | )
24 |
25 | @Keep
26 | data class ObfuscatedTimer(
27 | var a: Int?,
28 | var b: Int,
29 | // We ignore timer state and will just use idle
30 | val c: Map,
31 | var d: Boolean,
32 | var e: String,
33 | var f: String,
34 | var g: String,
35 | var h: String,
36 | var i: String,
37 | var j: Long,
38 | var k: String? = null,
39 | var l: Boolean = false
40 | ) {
41 | fun toTimer() = Timer(a, b, TimerState.Idle, d, e, f, g, h, i, j, k, l)
42 | }
43 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/goodwy/dialer/extensions/SharedPreferences.kt:
--------------------------------------------------------------------------------
1 | package com.goodwy.dialer.extensions
2 |
3 | import android.content.SharedPreferences
4 | import android.telecom.PhoneAccountHandle
5 | import com.google.gson.Gson
6 | import com.google.gson.JsonSyntaxException
7 | import com.goodwy.dialer.models.PhoneAccountHandleModel
8 |
9 | fun SharedPreferences.Editor.putPhoneAccountHandle(
10 | key: String,
11 | parcelable: PhoneAccountHandle
12 | ): SharedPreferences.Editor {
13 | val componentName = parcelable.componentName
14 | val myPhoneAccountHandleModel = PhoneAccountHandleModel(
15 | componentName.packageName, componentName.className, parcelable.id
16 | )
17 | val json = Gson().toJson(myPhoneAccountHandleModel)
18 | return putString(key, json)
19 | }
20 |
21 | inline fun SharedPreferences.getPhoneAccountHandleModel(
22 | key: String,
23 | default: T
24 | ): T {
25 | val json = getString(key, null)
26 | return try {
27 | if (json != null) {
28 | Gson().fromJson(json, T::class.java)
29 | } else {
30 | default
31 | }
32 | } catch (_: JsonSyntaxException) {
33 | default
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_note.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
9 |
10 |
14 |
15 |
19 |
20 |
24 |
25 |
29 |
30 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_volume_up_vector.xml:
--------------------------------------------------------------------------------
1 |
3 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_threema_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_contact_photo.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/goodwy/dialer/extensions/String.kt:
--------------------------------------------------------------------------------
1 | package com.goodwy.dialer.extensions
2 |
3 | import com.google.i18n.phonenumbers.NumberParseException
4 | import com.google.i18n.phonenumbers.PhoneNumberUtil
5 | import com.google.i18n.phonenumbers.geocoding.PhoneNumberOfflineGeocoder
6 | import java.util.*
7 |
8 | fun String.getCountryByNumber(): String {
9 | return try {
10 | val locale = Locale.getDefault()
11 | val countryCode = locale.country
12 | val phoneUtil = PhoneNumberUtil.getInstance()
13 | val geocoder = PhoneNumberOfflineGeocoder.getInstance()
14 | val numberParse = phoneUtil.parse(this, countryCode)
15 | geocoder.getDescriptionForNumber(numberParse, Locale.getDefault())
16 | } catch (_: NumberParseException) {
17 | ""
18 | }
19 | }
20 |
21 | // remove the pluses, spaces and hyphens.
22 | fun String.numberForNotes() = replace("\\s".toRegex(), "")
23 | .replace("\\+".toRegex(), "")
24 | .replace("\\(".toRegex(), "")
25 | .replace("\\)".toRegex(), "")
26 | .replace("-".toRegex(), "")
27 |
28 | fun String.removeNumberFormatting() = replace("\\s".toRegex(), "")
29 | .replace("\\(".toRegex(), "")
30 | .replace("\\)".toRegex(), "")
31 | .replace("-".toRegex(), "")
32 | .replace("\\*".toRegex(), "")
33 | .replace("#".toRegex(), "")
34 |
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | # Project-wide Gradle settings.
2 | # IDE (e.g. Android Studio) users:
3 | # Gradle settings configured through the IDE *will override*
4 | # any settings specified in this file.
5 | # For more details on how to configure your build environment visit
6 | # http://www.gradle.org/docs/current/userguide/build_environment.html
7 | # Specifies the JVM arguments used for the daemon process.
8 | # The setting is particularly useful for tweaking memory settings.
9 | org.gradle.jvmargs=-Xmx4g
10 | # When configured, Gradle will run in incubating parallel mode.
11 | # This option should only be used with decoupled projects. More details, visit
12 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
13 | # org.gradle.parallel=true
14 | # AndroidX package structure to make it clearer which packages are bundled with the
15 | # Android operating system, and which are packaged with your app's APK
16 | # https://developer.android.com/topic/libraries/support-library/androidx-rn
17 | android.useAndroidX=true
18 | # Automatically convert third-party libraries to use AndroidX
19 | android.enableJetifier=true
20 | android.nonTransitiveRClass=false
21 | # Kotlin code style for this project: "official" or "obsolete":
22 | kotlin.code.style=official
23 | # Versioning
24 | VERSION_NAME=8.0.4
25 | VERSION_CODE=804
26 | APP_ID=com.goodwy.dialer
27 |
--------------------------------------------------------------------------------
/app/src/main/res/values-lv/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Zvana stāvoklis (augsts svarīgums)
4 | Zvana stāvoklis
5 | Tālrunis
6 | Lūgums padarīt šo lietotni par noklusējuma tālruņa lietotni
7 | Lūgums atļaut attēlošanu virs citām lietotnēm, lai nodrošinātu uzticamu darbību
8 | Nevarēja piekļūt kontaktpersonām
9 | Nav atrasts neviens iepriekšējs zvans
10 | Nevarēja piekļūt zvanu vēsturei
11 | Pieprasīt piekļuvi
12 | Vai tiešām izņemt no zvanu vēstures atlasītos vienumus?
13 | Vai tiešām izņemt visu no zvanu vēstures?
14 | Rādīt apkopotus zvanus
15 | Notīrīt zvanu vēsturi
16 | Rādīt informāciju par zvanu
17 | Ciparnīca
18 |
19 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_whatsapp_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_slider_vertical.xml:
--------------------------------------------------------------------------------
1 |
9 |
11 |
14 |
15 |
17 |
20 |
21 |
23 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_call_history.xml:
--------------------------------------------------------------------------------
1 |
2 |
39 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_info.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
13 |
14 |
15 |
18 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_choose_social.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
18 |
19 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/app/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Keep `Companion` object fields of serializable classes.
2 | # This avoids serializer lookup through `getDeclaredClasses` as done for named companion objects.
3 | -if @kotlinx.serialization.Serializable class **
4 | -keepclassmembers class <1> {
5 | static <1>$Companion Companion;
6 | }
7 |
8 | # Keep `serializer()` on companion objects (both default and named) of serializable classes.
9 | -if @kotlinx.serialization.Serializable class ** {
10 | static **$* *;
11 | }
12 | -keepclassmembers class <2>$<3> {
13 | kotlinx.serialization.KSerializer serializer(...);
14 | }
15 |
16 | # Keep `INSTANCE.serializer()` of serializable objects.
17 | -if @kotlinx.serialization.Serializable class ** {
18 | public static ** INSTANCE;
19 | }
20 | -keepclassmembers class <1> {
21 | public static <1> INSTANCE;
22 | kotlinx.serialization.KSerializer serializer(...);
23 | }
24 |
25 | # EventBus
26 | -keepattributes *Annotation*
27 | -keepclassmembers class ** {
28 | @org.greenrobot.eventbus.Subscribe ;
29 | }
30 | -keep enum org.greenrobot.eventbus.ThreadMode { *; }
31 |
32 | #Goodwy
33 | -dontwarn org.bouncycastle.jsse.BCSSLParameters
34 | -dontwarn org.bouncycastle.jsse.BCSSLSocket
35 | -dontwarn org.bouncycastle.jsse.provider.BouncyCastleJsseProvider
36 | -dontwarn org.conscrypt.Conscrypt$Version
37 | -dontwarn org.conscrypt.Conscrypt
38 | -dontwarn org.conscrypt.ConscryptHostnameVerifier
39 | -dontwarn org.openjsse.javax.net.ssl.SSLParameters
40 | -dontwarn org.openjsse.javax.net.ssl.SSLSocket
41 | -dontwarn org.openjsse.net.ssl.OpenJSSE
42 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/goodwy/dialer/dialogs/ExportCallHistoryDialog.kt:
--------------------------------------------------------------------------------
1 | package com.goodwy.dialer.dialogs
2 |
3 | import androidx.appcompat.app.AlertDialog
4 | import com.goodwy.commons.extensions.*
5 | import com.goodwy.dialer.R
6 | import com.goodwy.dialer.activities.SimpleActivity
7 | import com.goodwy.dialer.databinding.DialogExportCallHistoryBinding
8 |
9 | class ExportCallHistoryDialog(val activity: SimpleActivity, callback: (filename: String) -> Unit) {
10 |
11 | init {
12 | val binding = DialogExportCallHistoryBinding.inflate(activity.layoutInflater).apply {
13 | exportCallHistoryFilename.setText("call_history_${getCurrentFormattedDateTime()}")
14 | }
15 |
16 | activity.getAlertDialogBuilder().setPositiveButton(R.string.ok, null).setNegativeButton(R.string.cancel, null).apply {
17 | activity.setupDialogStuff(binding.root, this, R.string.export_call_history) { alertDialog ->
18 | alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener {
19 |
20 | val filename = binding.exportCallHistoryFilename.value
21 | when {
22 | filename.isEmpty() -> activity.toast(R.string.empty_name)
23 | filename.isAValidFilename() -> {
24 | callback(filename)
25 | alertDialog.dismiss()
26 | }
27 |
28 | else -> activity.toast(R.string.invalid_name)
29 | }
30 | }
31 | }
32 | }
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/dialog_export_call_history.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
13 |
14 |
22 |
23 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/app/src/main/res/raw/t9languages.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "lang": "uk",
4 | "letters": [
5 | "АБВГҐ",
6 | "ДЕЄЖЗ",
7 | "ИІЇЙКЛ",
8 | "МНОП",
9 | "РСТУ",
10 | "ФХЦЧ",
11 | "ШЩ",
12 | "ЬЮЯ"
13 | ]
14 | },
15 | {
16 | "lang": "be",
17 | "letters": [
18 | "АБВГҐ",
19 | "ДЕЁЖЗ",
20 | "ІЙКЛ",
21 | "МНОП",
22 | "РСТУЎ",
23 | "ФХЦЧ",
24 | "ШЫ",
25 | "ЬЭЮЯ"
26 | ]
27 | },
28 | {
29 | "lang": "ru",
30 | "letters": [
31 | "АБВГ",
32 | "ДЕЁЖЗ",
33 | "ИЙКЛ",
34 | "МНОП",
35 | "РСТУ",
36 | "ФХЦЧ",
37 | "ШЩЪЫ",
38 | "ЬЭЮЯ"
39 | ]
40 | },
41 | {
42 | "lang": "el",
43 | "letters": [
44 | "ΑΒΓ",
45 | "ΔΕΖ",
46 | "ΗΘΙ",
47 | "ΚΛΜ",
48 | "ΝΞΟ",
49 | "ΠΡΣ",
50 | "ΤΥΦ",
51 | "ΧΨΩ"
52 | ]
53 | },
54 | {
55 | "lang": "ar",
56 | "letters": [
57 | "ب\u200Aت\u200Aث\u200Aة",
58 | "ا\u200Aأ\u200Aإ\u200Aآ\u200Aء\u200Aؤ\u200Aئ",
59 | "س\u200Aش\u200Aص\u200Aض",
60 | "د\u200Aذ\u200Aر\u200Aز",
61 | "ج\u200Aح\u200Aخ",
62 | "ن\u200Aه\u200Aو\u200Aي\u200Aى",
63 | "ف\u200Aق\u200Aك\u200Aل\u200Aم",
64 | "ط\u200Aظ\u200Aع\u200Aغ"
65 | ]
66 | }
67 | ]
68 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/goodwy/dialer/extensions/Call.kt:
--------------------------------------------------------------------------------
1 | package com.goodwy.dialer.extensions
2 |
3 | import android.telecom.Call
4 | import android.telecom.Call.STATE_CONNECTING
5 | import android.telecom.Call.STATE_DIALING
6 | import android.telecom.Call.STATE_SELECT_PHONE_ACCOUNT
7 | import com.goodwy.commons.helpers.isQPlus
8 | import com.goodwy.commons.helpers.isSPlus
9 |
10 | private val OUTGOING_CALL_STATES = arrayOf(STATE_CONNECTING, STATE_DIALING, STATE_SELECT_PHONE_ACCOUNT)
11 |
12 | @Suppress("DEPRECATION")
13 | fun Call?.getStateCompat(): Int {
14 | return when {
15 | this == null -> Call.STATE_DISCONNECTED
16 | isSPlus() -> details.state
17 | else -> state
18 | }
19 | }
20 |
21 | fun Call?.getCallDuration(): Int {
22 | return if (this != null) {
23 | val connectTimeMillis = details.connectTimeMillis
24 | if (connectTimeMillis == 0L) {
25 | return 0
26 | }
27 | ((System.currentTimeMillis() - connectTimeMillis) / 1000).toInt()
28 | } else {
29 | 0
30 | }
31 | }
32 |
33 | fun Call.isOutgoing(): Boolean {
34 | return if (isQPlus()) {
35 | details.callDirection == Call.Details.DIRECTION_OUTGOING
36 | } else {
37 | OUTGOING_CALL_STATES.contains(getStateCompat())
38 | }
39 | }
40 |
41 | fun Call.hasCapability(capability: Int): Boolean = (details.callCapabilities and capability) != 0
42 |
43 | fun Call?.isConference(): Boolean = this?.details?.hasProperty(Call.Details.PROPERTY_CONFERENCE) == true
44 |
45 | fun Call?.isHD(): Boolean = this?.details?.hasProperty(Call.Details.PROPERTY_HIGH_DEF_AUDIO) == true
46 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/dialog_add_speed_dial.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
21 |
23 |
24 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/goodwy/dialer/dialogs/ShowGroupedCallsDialog.kt:
--------------------------------------------------------------------------------
1 | package com.goodwy.dialer.dialogs
2 |
3 | import androidx.appcompat.app.AlertDialog
4 | import com.goodwy.commons.activities.BaseSimpleActivity
5 | import com.goodwy.commons.extensions.getAlertDialogBuilder
6 | import com.goodwy.commons.extensions.setupDialogStuff
7 | import com.goodwy.commons.extensions.viewBinding
8 | import com.goodwy.dialer.activities.SimpleActivity
9 | import com.goodwy.dialer.adapters.RecentCallsAdapter
10 | import com.goodwy.dialer.databinding.DialogShowGroupedCallsBinding
11 | import com.goodwy.dialer.models.RecentCall
12 |
13 | class ShowGroupedCallsDialog(val activity: BaseSimpleActivity, recentCalls: List) {
14 | private var dialog: AlertDialog? = null
15 | private val binding by activity.viewBinding(DialogShowGroupedCallsBinding::inflate)
16 |
17 | init {
18 | activity.runOnUiThread {
19 | RecentCallsAdapter(
20 | activity = activity as SimpleActivity,
21 | recyclerView = binding.selectGroupedCallsList,
22 | refreshItemsListener = null,
23 | showOverflowMenu = false,
24 | itemClick = {}
25 | ).apply {
26 | binding.selectGroupedCallsList.adapter = this
27 | updateItems(recentCalls)
28 | }
29 | }
30 |
31 | activity.getAlertDialogBuilder()
32 | .apply {
33 | activity.setupDialogStuff(binding.root, this) { alertDialog ->
34 | dialog = alertDialog
35 | }
36 | }
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/goodwy/dialer/helpers/UriUtils.kt:
--------------------------------------------------------------------------------
1 | package com.goodwy.dialer.helpers
2 |
3 | import android.net.Uri
4 | import android.provider.ContactsContract
5 | import androidx.core.net.toUri
6 |
7 | /**
8 | * Utility methods for dealing with URIs.
9 | */
10 | object UriUtils {
11 | private const val LOOKUP_URI_ENCODED = "encoded"
12 |
13 | /**
14 | * Checks whether two URI are equal, taking care of the case where either is null.
15 | */
16 | fun areEqual(uri1: Uri?, uri2: Uri?): Boolean {
17 | if (uri1 == null && uri2 == null) {
18 | return true
19 | }
20 | if (uri1 == null || uri2 == null) {
21 | return false
22 | }
23 | return uri1 == uri2
24 | }
25 |
26 | /**
27 | * Parses a string into a URI and returns null if the given string is null.
28 | */
29 | fun parseUriOrNull(uriString: String?): Uri? {
30 | if (uriString == null) {
31 | return null
32 | }
33 | return uriString.toUri()
34 | }
35 |
36 | /**
37 | * Converts a URI into a string, returns null if the given URI is null.
38 | */
39 | fun uriToString(uri: Uri?): String? {
40 | return uri?.toString()
41 | }
42 |
43 | /**
44 | * @return `uri` as-is if the authority is of contacts provider. Otherwise or `uri` is
45 | * null, return null otherwise
46 | */
47 | fun nullForNonContactsUri(uri: Uri?): Uri? {
48 | if (uri == null) {
49 | return null
50 | }
51 | return if (ContactsContract.AUTHORITY == uri.authority) uri else null
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_wallpaper.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/goodwy/dialer/receivers/TimerReceiver.kt:
--------------------------------------------------------------------------------
1 | package com.goodwy.dialer.receivers
2 |
3 | import android.content.BroadcastReceiver
4 | import android.content.Context
5 | import android.content.Intent
6 | import com.goodwy.dialer.extensions.hideTimerNotification
7 | import com.goodwy.dialer.extensions.timerHelper
8 | import com.goodwy.dialer.helpers.INVALID_TIMER_ID
9 | import com.goodwy.dialer.helpers.TIMER_HIDE
10 | import com.goodwy.dialer.helpers.TIMER_ID
11 | import com.goodwy.dialer.helpers.TIMER_RESTART
12 | import com.goodwy.dialer.models.TimerEvent
13 | import org.greenrobot.eventbus.EventBus
14 | import java.util.concurrent.TimeUnit
15 |
16 | class TimerReceiver : BroadcastReceiver() {
17 | override fun onReceive(context: Context, intent: Intent) {
18 | val timerId = intent.getIntExtra(TIMER_ID, INVALID_TIMER_ID)
19 |
20 | when (intent.action) {
21 | TIMER_HIDE -> {
22 | context.hideTimerNotification(timerId)
23 | EventBus.getDefault().post(TimerEvent.Reset(timerId))
24 | }
25 | TIMER_RESTART -> {
26 | EventBus.getDefault().post(TimerEvent.Restart(timerId))
27 | }
28 | else -> { // Start a new
29 | context.hideTimerNotification(timerId)
30 | EventBus.getDefault().post(TimerEvent.Reset(timerId))
31 | context.timerHelper.getTimer(timerId) { timer ->
32 | EventBus.getDefault().post(TimerEvent.Start(timer.id!!, TimeUnit.SECONDS.toMillis(timer.seconds.toLong())))
33 | }
34 | }
35 | }
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/dialog_change_text.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
15 |
16 |
24 |
25 |
26 |
27 |
38 |
39 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_phone_two_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_dialpad.xml:
--------------------------------------------------------------------------------
1 |
2 |
44 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/goodwy/dialer/activities/ConferenceActivity.kt:
--------------------------------------------------------------------------------
1 | package com.goodwy.dialer.activities
2 |
3 | import android.content.Intent
4 | import android.os.Bundle
5 | import com.goodwy.commons.extensions.viewBinding
6 | import com.goodwy.commons.helpers.NavigationIcon
7 | import com.goodwy.dialer.adapters.ConferenceCallsAdapter
8 | import com.goodwy.dialer.databinding.ActivityConferenceBinding
9 | import com.goodwy.dialer.helpers.CallManager
10 | import com.goodwy.dialer.helpers.NoCall
11 | import com.goodwy.dialer.helpers.SHOW_RECENT_CALLS_ON_DIALPAD
12 |
13 | class ConferenceActivity : SimpleActivity() {
14 | private val binding by viewBinding(ActivityConferenceBinding::inflate)
15 |
16 | override fun onCreate(savedInstanceState: Bundle?) {
17 | super.onCreate(savedInstanceState)
18 | setContentView(binding.root)
19 | binding.apply {
20 | setupEdgeToEdge(padBottomSystem = listOf(conferenceList))
21 | setupMaterialScrollListener(conferenceList, conferenceAppbar)
22 | conferenceList.adapter = ConferenceCallsAdapter(this@ConferenceActivity, conferenceList, ArrayList(CallManager.getConferenceCalls())) {}
23 | }
24 | }
25 |
26 | override fun onResume() {
27 | super.onResume()
28 | setupTopAppBar(binding.conferenceAppbar, NavigationIcon.Arrow)
29 | }
30 |
31 | override fun onBackPressedCompat(): Boolean {
32 | return when (CallManager.getPhoneState()) {
33 | NoCall -> {
34 | finishAndRemoveTask()
35 | true
36 | }
37 | else -> {
38 | startActivity(Intent(this, CallActivity::class.java))
39 | true
40 | }
41 | }
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/goodwy/dialer/helpers/CallerNotesHelper.kt:
--------------------------------------------------------------------------------
1 | package com.goodwy.dialer.helpers
2 |
3 | import android.content.Context
4 | import com.goodwy.dialer.extensions.config
5 | import com.goodwy.dialer.extensions.numberForNotes
6 | import com.goodwy.dialer.models.CallerNote
7 | import com.google.gson.Gson
8 | import java.util.Calendar
9 | import java.util.Locale
10 |
11 | class CallerNotesHelper(val context: Context) {
12 |
13 | fun addCallerNotes(number: String, note: String, callerNote: CallerNote?, callback: () -> Unit = {}) {
14 | val date = Calendar.getInstance(Locale.ENGLISH).timeInMillis
15 | val mCallerNotes = context.config.parseCallerNotes()
16 | mCallerNotes.remove(callerNote)
17 | mCallerNotes.add(CallerNote(number.numberForNotes(), note, date))
18 | context.config.callerNotes = Gson().toJson(mCallerNotes)
19 | callback.invoke()
20 | }
21 |
22 | fun deleteCallerNotes(callerNote: CallerNote?, callback: () -> Unit = {}) {
23 | val mCallerNotes = context.config.parseCallerNotes()
24 | mCallerNotes.remove(callerNote)
25 | context.config.callerNotes = Gson().toJson(mCallerNotes)
26 | callback.invoke()
27 | }
28 |
29 | fun removeCallerNotes(allRecentsNumber: List) {
30 | val mCallerNotes = context.config.parseCallerNotes()
31 | val newList = mCallerNotes.filter { allRecentsNumber.contains(it.id.numberForNotes()) }
32 | if (mCallerNotes != newList) context.config.callerNotes = Gson().toJson(newList)
33 | }
34 |
35 | fun getCallerNotes(number: String?): CallerNote? {
36 | val mCallerNotes = context.config.parseCallerNotes()
37 | return mCallerNotes.firstOrNull {it.id.numberForNotes() == number?.numberForNotes()}
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_recent_item_options.xml:
--------------------------------------------------------------------------------
1 |
2 |
49 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/goodwy/dialer/helpers/TimerHelper.kt:
--------------------------------------------------------------------------------
1 | package com.goodwy.dialer.helpers
2 |
3 | import android.content.Context
4 | import com.goodwy.dialer.extensions.timerDb
5 | import com.goodwy.dialer.models.Timer
6 | import com.goodwy.commons.helpers.ensureBackgroundThread
7 |
8 | class TimerHelper(val context: Context) {
9 | private val timerDao = context.timerDb
10 |
11 | fun getTimers(callback: (timers: List) -> Unit) {
12 | ensureBackgroundThread {
13 | callback.invoke(timerDao.getTimers())
14 | }
15 | }
16 |
17 | fun getTimer(timerId: Int, callback: (timer: Timer) -> Unit) {
18 | ensureBackgroundThread {
19 | callback.invoke(timerDao.getTimer(timerId)!!)
20 | }
21 | }
22 |
23 | // fun tryGetTimer(timerId: Int, callback: (timer: Timer?) -> Unit) {
24 | // ensureBackgroundThread {
25 | // callback.invoke(timerDao.getTimer(timerId))
26 | // }
27 | // }
28 | //
29 | // fun findTimers(seconds: Int, label: String, callback: (timers: List) -> Unit) {
30 | // ensureBackgroundThread {
31 | // callback.invoke(timerDao.findTimers(seconds, label))
32 | // }
33 | // }
34 |
35 | fun insertOrUpdateTimer(timer: Timer, callback: (id: Long) -> Unit = {}) {
36 | ensureBackgroundThread {
37 | val id = timerDao.insertOrUpdateTimer(timer)
38 | callback.invoke(id)
39 | }
40 | }
41 |
42 | fun deleteTimer(id: Int, callback: () -> Unit = {}) {
43 | ensureBackgroundThread {
44 | timerDao.deleteTimer(id)
45 | callback.invoke()
46 | }
47 | }
48 |
49 | // fun deleteTimers(timers: List, callback: () -> Unit = {}) {
50 | // ensureBackgroundThread {
51 | // timerDao.deleteTimers(timers)
52 | // callback.invoke()
53 | // }
54 | // }
55 | }
56 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_conference.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
13 |
14 |
20 |
21 |
22 |
28 |
29 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/goodwy/dialer/helpers/Converters.kt:
--------------------------------------------------------------------------------
1 | package com.goodwy.dialer.helpers
2 |
3 | import androidx.room.TypeConverter
4 | import com.goodwy.dialer.extensions.RuntimeTypeAdapterFactory
5 | import com.goodwy.dialer.models.StateWrapper
6 | import com.goodwy.dialer.models.TimerState
7 | import com.google.gson.Gson
8 | import com.google.gson.GsonBuilder
9 | import com.google.gson.TypeAdapterFactory
10 | import com.google.gson.reflect.TypeToken
11 |
12 | class Converters {
13 | private val gson = Gson()
14 | private val stringType = object : TypeToken>() {}.type
15 |
16 | fun jsonToStringList(value: String) = gson.fromJson>(value, stringType)
17 |
18 | fun stringListToJson(list: ArrayList) = gson.toJson(list)
19 |
20 | //timer
21 | val timerStates = valueOf()
22 | .registerSubtype(TimerState.Idle::class.java)
23 | .registerSubtype(TimerState.Running::class.java)
24 | .registerSubtype(TimerState.Paused::class.java)
25 | .registerSubtype(TimerState.Finished::class.java)
26 |
27 | inline fun valueOf(): RuntimeTypeAdapterFactory = RuntimeTypeAdapterFactory.of(T::class.java)
28 |
29 | fun GsonBuilder.registerTypes(vararg types: TypeAdapterFactory) = apply {
30 | types.forEach { registerTypeAdapterFactory(it) }
31 | }
32 |
33 | val gsonTimer: Gson = GsonBuilder().registerTypes(timerStates).create()
34 |
35 | @TypeConverter
36 | fun jsonToTimerState(value: String?): TimerState {
37 | if (value.isNullOrEmpty()) return TimerState.Idle
38 | return try {
39 | gsonTimer.fromJson(value, StateWrapper::class.java).state
40 | } catch (_: Exception) {
41 | TimerState.Idle
42 | }
43 | }
44 |
45 | @TypeConverter
46 | fun timerStateToJson(state: TimerState) = gsonTimer.toJson(StateWrapper(state))
47 | }
48 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/goodwy/dialer/models/RecentCall.kt:
--------------------------------------------------------------------------------
1 | package com.goodwy.dialer.models
2 |
3 | import android.telephony.PhoneNumberUtils
4 | import com.goodwy.commons.extensions.normalizePhoneNumber
5 | import com.goodwy.dialer.extensions.getDayCode
6 | import com.google.gson.annotations.SerializedName
7 | import java.io.Serializable
8 |
9 | /**
10 | * Used at displaying recent calls.
11 | * For contacts with multiple numbers specify the number and type
12 | */
13 | @kotlinx.serialization.Serializable
14 | data class RecentCall(
15 | var id: Int,
16 | var phoneNumber: String,
17 | var name: String,
18 | var nickname: String = "",
19 | var company: String = "",
20 | var jobPosition: String = "",
21 | var photoUri: String,
22 | val startTS: Long,
23 | var duration: Int,
24 | var type: Int,
25 | val simID: Int,
26 | val simColor: Int,
27 | var specificNumber: String,
28 | var specificType: String,
29 | val isUnknownNumber: Boolean,
30 | @SerializedName("title") val groupedCalls: MutableList? = null,
31 | var contactID: Int? = null,
32 | var features: Int? = null,
33 | val isVoiceMail: Boolean,
34 | var blockReason: Int? = 0,
35 | ) : CallLogItem(), Serializable {
36 | val dayCode = startTS.getDayCode()
37 |
38 | fun doesContainPhoneNumber(text: String): Boolean {
39 | return if (text.toLongOrNull() != null) {
40 | val normalizedText = text.normalizePhoneNumber()
41 | PhoneNumberUtils.compare(phoneNumber.normalizePhoneNumber(), normalizedText) ||
42 | phoneNumber.contains(text) ||
43 | phoneNumber.normalizePhoneNumber().contains(normalizedText) ||
44 | phoneNumber.contains(normalizedText)
45 | } else {
46 | false
47 | }
48 | }
49 |
50 | fun isABusinessCall() = name.contains(company) && company.isNotEmpty()
51 | }
52 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/timer_notification.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
19 |
20 |
31 |
32 |
42 |
43 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/goodwy/dialer/dialogs/AddSpeedDialDialog.kt:
--------------------------------------------------------------------------------
1 | package com.goodwy.dialer.dialogs
2 |
3 | import android.app.Activity
4 | import android.content.DialogInterface.BUTTON_POSITIVE
5 | import androidx.appcompat.app.AlertDialog
6 | import com.goodwy.commons.extensions.getAlertDialogBuilder
7 | import com.goodwy.commons.extensions.setupDialogStuff
8 | import com.goodwy.commons.extensions.showKeyboard
9 | import com.goodwy.dialer.R
10 | import com.goodwy.dialer.databinding.DialogAddSpeedDialBinding
11 | import com.goodwy.dialer.models.SpeedDial
12 |
13 | class AddSpeedDialDialog(
14 | private val activity: Activity,
15 | private val speedDial: SpeedDial,
16 | private val callback: (name: String) -> Unit,
17 | ) {
18 | private var dialog: AlertDialog? = null
19 |
20 | init {
21 | val binding = DialogAddSpeedDialBinding.inflate(activity.layoutInflater).apply {
22 | addSpeedDialEditText.apply {
23 | setText(speedDial.number)
24 | hint = speedDial.number
25 | }
26 | }
27 |
28 | activity.getAlertDialogBuilder()
29 | .setPositiveButton(com.goodwy.commons.R.string.ok, null)
30 | .setNegativeButton(com.goodwy.commons.R.string.cancel, null)
31 | .apply {
32 | activity.setupDialogStuff(binding.root, this, R.string.speed_dial) { alertDialog ->
33 | dialog = alertDialog
34 | alertDialog.showKeyboard(binding.addSpeedDialEditText)
35 | alertDialog.getButton(BUTTON_POSITIVE).apply {
36 | setOnClickListener {
37 | val newTitle = binding.addSpeedDialEditText.text.toString()
38 | callback(newTitle)
39 | alertDialog.dismiss()
40 | }
41 | }
42 | }
43 | }
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/dialog_select_sim.xml:
--------------------------------------------------------------------------------
1 |
2 |
10 |
11 |
19 |
20 |
25 |
26 |
29 |
30 |
36 |
37 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/dialog_manage_visible_tabs.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
16 |
17 |
24 |
25 |
32 |
33 |
40 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_contact_blur.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/goodwy/dialer/helpers/CallContactAvatarHelper.kt:
--------------------------------------------------------------------------------
1 | package com.goodwy.dialer.helpers
2 |
3 | import android.content.Context
4 | import android.graphics.*
5 | import android.provider.MediaStore
6 | import android.util.Size
7 | import com.goodwy.commons.helpers.isQPlus
8 | import com.goodwy.dialer.R
9 | import androidx.core.net.toUri
10 | import androidx.core.graphics.createBitmap
11 |
12 | class CallContactAvatarHelper(private val context: Context) {
13 | fun getCallContactAvatar(photoUri: String?, round: Boolean = true): Bitmap? {
14 | var bitmap: Bitmap? = null
15 | if (photoUri?.isNotEmpty() == true) {
16 | val photoUriParse = photoUri.toUri()
17 | try {
18 | val contentResolver = context.contentResolver
19 | bitmap = if (isQPlus()) {
20 | val tmbSize = context.resources.getDimension(R.dimen.list_avatar_size).toInt()
21 | contentResolver.loadThumbnail(photoUriParse, Size(tmbSize, tmbSize), null)
22 | } else {
23 | MediaStore.Images.Media.getBitmap(contentResolver, photoUriParse)
24 | }
25 | bitmap = if (round) getCircularBitmap(bitmap!!) else bitmap
26 | } catch (_: Exception) {
27 | return null
28 | }
29 | }
30 | return bitmap
31 | }
32 |
33 | fun getCircularBitmap(bitmap: Bitmap): Bitmap {
34 | val output = createBitmap(bitmap.width, bitmap.width)
35 | val canvas = Canvas(output)
36 | val paint = Paint()
37 | val rect = Rect(0, 0, bitmap.width, bitmap.height)
38 | val radius = bitmap.width / 2.toFloat()
39 |
40 | paint.isAntiAlias = true
41 | canvas.drawARGB(0, 0, 0, 0)
42 | canvas.drawCircle(radius, radius, radius, paint)
43 | paint.xfermode = PorterDuffXfermode(PorterDuff.Mode.SRC_IN)
44 | canvas.drawBitmap(bitmap, rect, rect, paint)
45 | return output
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_answer_buttons.xml:
--------------------------------------------------------------------------------
1 |
6 |
12 |
16 |
17 |
22 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/goodwy/dialer/adapters/ViewPagerAdapter.kt:
--------------------------------------------------------------------------------
1 | package com.goodwy.dialer.adapters
2 |
3 | import android.view.View
4 | import android.view.ViewGroup
5 | import androidx.viewpager.widget.PagerAdapter
6 | import com.goodwy.commons.helpers.TAB_CALL_HISTORY
7 | import com.goodwy.commons.helpers.TAB_CONTACTS
8 | import com.goodwy.commons.helpers.TAB_FAVORITES
9 | import com.goodwy.dialer.R
10 | import com.goodwy.dialer.activities.SimpleActivity
11 | import com.goodwy.dialer.extensions.config
12 | import com.goodwy.dialer.fragments.MyViewPagerFragment
13 | import com.goodwy.dialer.helpers.tabsList
14 |
15 | class ViewPagerAdapter(val activity: SimpleActivity) : PagerAdapter() {
16 |
17 | override fun instantiateItem(container: ViewGroup, position: Int): Any {
18 | val layout = getFragment(position)
19 | val view = activity.layoutInflater.inflate(layout, container, false)
20 | container.addView(view)
21 |
22 | (view as MyViewPagerFragment<*>).apply {
23 | setupFragment(activity)
24 | }
25 |
26 | return view
27 | }
28 |
29 | override fun destroyItem(container: ViewGroup, position: Int, item: Any) {
30 | container.removeView(item as View)
31 | }
32 |
33 | override fun getCount() = tabsList.filter { it and activity.config.showTabs != 0 }.size
34 |
35 | override fun isViewFromObject(view: View, item: Any) = view == item
36 |
37 | private fun getFragment(position: Int): Int {
38 | val showTabs = activity.config.showTabs
39 | val fragments = arrayListOf()
40 | if (showTabs and TAB_FAVORITES > 0) {
41 | fragments.add(R.layout.fragment_favorites)
42 | }
43 |
44 | if (showTabs and TAB_CALL_HISTORY > 0) {
45 | fragments.add(R.layout.fragment_recents)
46 | }
47 |
48 | if (showTabs and TAB_CONTACTS > 0) {
49 | fragments.add(R.layout.fragment_contacts)
50 | }
51 |
52 | return if (position < fragments.size) fragments[position] else fragments.last()
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/goodwy/dialer/dialogs/ChooseSocialDialog.kt:
--------------------------------------------------------------------------------
1 | package com.goodwy.dialer.dialogs
2 |
3 | import android.app.Activity
4 | import android.view.ViewGroup
5 | import android.widget.RadioGroup
6 | import androidx.appcompat.app.AlertDialog
7 | import com.goodwy.commons.extensions.beGone
8 | import com.goodwy.commons.extensions.getAlertDialogBuilder
9 | import com.goodwy.commons.extensions.setupDialogStuff
10 | import com.goodwy.dialer.extensions.getPackageDrawable
11 | import com.goodwy.dialer.databinding.DialogChooseSocialBinding
12 | import com.goodwy.dialer.databinding.ItemChooseSocialBinding
13 | import com.goodwy.commons.models.contacts.SocialAction
14 |
15 | class ChooseSocialDialog(val activity: Activity, actions: ArrayList, val callback: (action: SocialAction) -> Unit) {
16 | private lateinit var dialog: AlertDialog
17 |
18 | init {
19 | val binding = DialogChooseSocialBinding.inflate(activity.layoutInflater)
20 | actions.sortBy { it.type }
21 | actions.forEach { action ->
22 | val item = ItemChooseSocialBinding.inflate(activity.layoutInflater).apply {
23 | itemSocialLabel.text = action.label
24 | root.setOnClickListener {
25 | callback(action)
26 | dialog.dismiss()
27 | }
28 |
29 | val drawable = activity.getPackageDrawable(action.packageName)
30 | if (drawable == null) {
31 | itemSocialImage.beGone()
32 | } else {
33 | itemSocialImage.setImageDrawable(drawable)
34 | }
35 | }
36 |
37 | binding.dialogChooseSocial.addView(item.root, RadioGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT))
38 | }
39 |
40 | val builder = activity.getAlertDialogBuilder()
41 |
42 | builder.apply {
43 | activity.setupDialogStuff(binding.root, this) { alertDialog ->
44 | dialog = alertDialog
45 | }
46 | }
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_signal_vector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/goodwy/dialer/dialogs/ManageVisibleTabsDialog.kt:
--------------------------------------------------------------------------------
1 | package com.goodwy.dialer.dialogs
2 |
3 | import com.goodwy.commons.activities.BaseSimpleActivity
4 | import com.goodwy.commons.extensions.getAlertDialogBuilder
5 | import com.goodwy.commons.extensions.setupDialogStuff
6 | import com.goodwy.commons.extensions.viewBinding
7 | import com.goodwy.commons.helpers.TAB_CALL_HISTORY
8 | import com.goodwy.commons.helpers.TAB_CONTACTS
9 | import com.goodwy.commons.helpers.TAB_FAVORITES
10 | import com.goodwy.commons.views.MyAppCompatCheckbox
11 | import com.goodwy.dialer.R
12 | import com.goodwy.dialer.databinding.DialogManageVisibleTabsBinding
13 | import com.goodwy.dialer.extensions.config
14 | import com.goodwy.dialer.helpers.ALL_TABS_MASK
15 |
16 | class ManageVisibleTabsDialog(val activity: BaseSimpleActivity) {
17 | private val binding by activity.viewBinding(DialogManageVisibleTabsBinding::inflate)
18 | private val tabs = LinkedHashMap()
19 |
20 | init {
21 | tabs.apply {
22 | put(TAB_FAVORITES, R.id.manage_visible_tabs_favorites)
23 | put(TAB_CALL_HISTORY, R.id.manage_visible_tabs_call_history)
24 | put(TAB_CONTACTS, R.id.manage_visible_tabs_contacts)
25 | }
26 |
27 | val showTabs = activity.config.showTabs
28 | for ((key, value) in tabs) {
29 | binding.root.findViewById(value).isChecked = showTabs and key != 0
30 | }
31 |
32 | activity.getAlertDialogBuilder()
33 | .setPositiveButton(R.string.ok) { dialog, which -> dialogConfirmed() }
34 | .setNegativeButton(R.string.cancel, null)
35 | .apply {
36 | activity.setupDialogStuff(binding.root, this, R.string.manage_shown_tabs)
37 | }
38 | }
39 |
40 | private fun dialogConfirmed() {
41 | var result = 0
42 | for ((key, value) in tabs) {
43 | if (binding.root.findViewById(value).isChecked) {
44 | result += key
45 | }
46 | }
47 |
48 | if (result == 0) {
49 | result = ALL_TABS_MASK
50 | }
51 |
52 | activity.config.showTabs = result
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_call_button_bottom.xml:
--------------------------------------------------------------------------------
1 |
6 |
12 |
16 |
21 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu.xml:
--------------------------------------------------------------------------------
1 |
2 |
58 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/goodwy/dialer/activities/NotificationActivity.kt:
--------------------------------------------------------------------------------
1 | package com.goodwy.dialer.activities
2 |
3 | import android.annotation.SuppressLint
4 | import android.content.Intent
5 | import android.net.Uri
6 | import android.os.Bundle
7 | import com.goodwy.commons.extensions.launchActivityIntent
8 | import com.goodwy.commons.extensions.notificationManager
9 | import com.goodwy.commons.helpers.CURRENT_PHONE_NUMBER
10 | import com.goodwy.commons.helpers.IS_RIGHT_APP
11 | import com.goodwy.dialer.BuildConfig
12 | import com.goodwy.dialer.helpers.MISSED_CALL_BACK
13 | import com.goodwy.dialer.helpers.MISSED_CALL_MESSAGE
14 | import com.goodwy.dialer.receivers.MissedCallReceiver.Companion.clearMissedCallCount
15 |
16 | //Empty activation to remove missed call notifications when you press to call or send a message
17 | //https://stackoverflow.com/questions/18261969/clicking-android-notification-actions-does-not-close-notification-drawer?noredirect=1&lq=1
18 | class NotificationActivity : SimpleActivity() {
19 | @SuppressLint("MissingPermission")
20 | override fun onCreate(savedInstanceState: Bundle?) {
21 | super.onCreate(savedInstanceState)
22 |
23 | val phoneNumber = intent.extras?.getString(CURRENT_PHONE_NUMBER) ?: return
24 |
25 | // When answering a call or message, we clear the counter for that number.
26 | phoneNumber.let {
27 | clearMissedCallCount(it)
28 | notificationManager.cancel(it.hashCode())
29 | // updateUnreadCountAndGroup(this)
30 | }
31 |
32 | when (intent.action) {
33 | MISSED_CALL_BACK -> phoneNumber.let {
34 | Intent(Intent.ACTION_CALL).apply {
35 | data = Uri.fromParts("tel", it, null)
36 | putExtra(IS_RIGHT_APP, BuildConfig.RIGHT_APP_KEY)
37 | flags = Intent.FLAG_ACTIVITY_NEW_TASK
38 | launchActivityIntent(this)
39 | }
40 | }
41 |
42 | MISSED_CALL_MESSAGE -> phoneNumber.let {
43 | Intent(Intent.ACTION_VIEW).apply {
44 | data = Uri.fromParts("smsto", it, null)
45 | flags = Intent.FLAG_ACTIVITY_NEW_TASK
46 | launchActivityIntent(this)
47 | }
48 | }
49 | }
50 |
51 | finish()
52 | }
53 | }
54 |
--------------------------------------------------------------------------------