diff --git a/CHANGELOG.md b/CHANGELOG.md index f2071bb6..5927b6d0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,63 @@ Changelog ========== +Version 5.17.8 *(2023-04-19)* +---------------------------- + + * Avoid showing contacts without a phone number + * Fixed multiple contact handling related glitches + * Added some stability, translation and UX improvements + +Version 5.17.7 *(2023-04-12)* +---------------------------- + + * Added some stability, translation and UX improvements + +Version 5.17.6 *(2023-04-07)* +---------------------------- + + * Fixed number presses during call + * Added some stability, translation and UX improvements + +Version 5.17.5 *(2023-03-29)* +---------------------------- + + * Allow filtering contacts + * Fix displaying contacts, if name starts with surname + * Fixed some right-to-left layout glitches + * Added some stability, translation and UX improvements + +Version 5.17.4 *(2023-03-21)* +---------------------------- + + * Allow filtering contacts + * Fix displaying contacts, if name starts with surname + * Fixed some right-to-left layout glitches + * Added some stability, translation and UX improvements + +Version 5.17.3 *(2023-01-12)* +---------------------------- + + * Fixed a search glitch on some devices + +Version 5.17.2 *(2023-01-10)* +---------------------------- + + * Fixed a glitch with dialpad button not being visible on some devices + +Version 5.17.1 *(2023-01-04)* +---------------------------- + + * Added the new search bar at the top menu + +Version 5.17.0 *(2022-12-30)* +---------------------------- + + * Do not allow calling blocked numbers + * Allow hiding numbers on the dialpad + * Use Material You theme by default on Android 12+ + * Added some UI, translation and stability improvements + Version 5.16.0 *(2022-11-12)* ---------------------------- diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..0730468b --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,8 @@ +### Reporting +Before you report something, read the reporting rules [here](https://github.com/SimpleMobileTools/General-Discussion#how-do-i-suggest-an-improvement-ask-a-question-or-report-an-issue) please. + +### Contributing as a developer +Some instructions about code style and everything that has to be done to increase the change of your code getting accepted can be found at the [General Discussion](https://github.com/SimpleMobileTools/General-Discussion#contribution-rules-for-developers) section. + +### Contributing as a non developer +In case you just want to for example improve a translation, you can find the way of doing it [here](https://github.com/SimpleMobileTools/General-Discussion#how-can-i-suggest-an-edit-to-a-file). diff --git a/app/build.gradle b/app/build.gradle index f70ed88e..fadd4c20 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -15,8 +15,8 @@ android { applicationId "com.simplemobiletools.dialer" minSdkVersion 23 targetSdkVersion 33 - versionCode 46 - versionName "5.16.0" + versionCode 55 + versionName "5.17.8" setProperty("archivesBaseName", "dialer") } @@ -62,7 +62,7 @@ android { } dependencies { - implementation 'com.github.SimpleMobileTools:Simple-Commons:5b5a6b083f' + implementation 'com.github.SimpleMobileTools:Simple-Commons:ee2e127758' implementation 'com.github.tibbi:IndicatorFastScroll:4524cd0b61' implementation 'me.grantland:autofittextview:0.2.1' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 562addd4..39cf1951 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -8,6 +8,7 @@ + @@ -20,6 +21,7 @@ + @@ -116,6 +124,7 @@ android:exported="true" android:label="@string/dialpad" android:parentActivityName=".activities.MainActivity" + android:screenOrientation="portrait" android:windowSoftInputMode="stateHidden"> @@ -144,6 +153,7 @@ diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/CallActivity.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/CallActivity.kt index bc17fb76..c8d46677 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/CallActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/CallActivity.kt @@ -20,12 +20,10 @@ import android.view.WindowManager import android.view.animation.AccelerateDecelerateInterpolator import android.view.animation.OvershootInterpolator import android.widget.ImageView +import androidx.core.content.res.ResourcesCompat import androidx.core.view.children import com.simplemobiletools.commons.extensions.* -import com.simplemobiletools.commons.helpers.LOWER_ALPHA -import com.simplemobiletools.commons.helpers.MINUTE_SECONDS -import com.simplemobiletools.commons.helpers.isOreoMr1Plus -import com.simplemobiletools.commons.helpers.isOreoPlus +import com.simplemobiletools.commons.helpers.* import com.simplemobiletools.commons.models.SimpleListItem import com.simplemobiletools.dialer.R import com.simplemobiletools.dialer.dialogs.DynamicBottomSheetChooserDialog @@ -88,7 +86,7 @@ class CallActivity : SimpleActivity() { override fun onResume() { super.onResume() updateState() - updateNavigationBarColor(getBottomNavigationBackgroundColor()) + updateNavigationBarColor(getProperBackgroundColor()) } override fun onDestroy() { @@ -187,6 +185,25 @@ class CallActivity : SimpleActivity() { dialpad_8_holder.setOnClickListener { dialpadPressed('8') } dialpad_9_holder.setOnClickListener { dialpadPressed('9') } + arrayOf( + dialpad_0_holder, + dialpad_1_holder, + dialpad_2_holder, + dialpad_3_holder, + dialpad_4_holder, + dialpad_5_holder, + dialpad_6_holder, + dialpad_7_holder, + dialpad_8_holder, + dialpad_9_holder, + dialpad_plus_holder, + dialpad_asterisk_holder, + dialpad_hashtag_holder + ).forEach { + it.background = ResourcesCompat.getDrawable(resources, R.drawable.pill_background, theme) + it.background?.alpha = LOWER_ALPHA_INT + } + dialpad_0_holder.setOnLongClickListener { dialpadPressed('+'); true } dialpad_asterisk_holder.setOnClickListener { dialpadPressed('*') } dialpad_hashtag_holder.setOnClickListener { dialpadPressed('#') } @@ -383,7 +400,7 @@ class CallActivity : SimpleActivity() { } private fun dialpadPressed(char: Char) { - CallManager.keypad(this, char) + CallManager.keypad(char) dialpad_input.addCharacter(char) } diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/ConferenceActivity.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/ConferenceActivity.kt index 3114cd29..a4da2049 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/ConferenceActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/ConferenceActivity.kt @@ -10,10 +10,12 @@ import kotlinx.android.synthetic.main.activity_conference.* class ConferenceActivity : SimpleActivity() { override fun onCreate(savedInstanceState: Bundle?) { + isMaterialActivity = true super.onCreate(savedInstanceState) setContentView(R.layout.activity_conference) - - conference_calls_list.adapter = ConferenceCallsAdapter(this, conference_calls_list, ArrayList(CallManager.getConferenceCalls())) {} + updateMaterialActivityViews(conference_coordinator, conference_list, useTransparentNavigation = true, useTopSearchMenu = false) + setupMaterialScrollListener(conference_list, conference_toolbar) + conference_list.adapter = ConferenceCallsAdapter(this, conference_list, ArrayList(CallManager.getConferenceCalls())) {} } override fun onResume() { diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/DialerActivity.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/DialerActivity.kt index 69c2505b..3f7def96 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/DialerActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/DialerActivity.kt @@ -36,6 +36,12 @@ class DialerActivity : SimpleActivity() { @SuppressLint("MissingPermission") private fun initOutgoingCall() { try { + if (isNumberBlocked(callNumber.toString().replace("tel:", ""), getBlockedNumbers())) { + toast(R.string.calling_blocked_number) + finish() + return + } + getHandleToUse(intent, callNumber.toString()) { handle -> if (handle != null) { Bundle().apply { diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/DialpadActivity.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/DialpadActivity.kt index e92e1e54..3f89e74d 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/DialpadActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/DialpadActivity.kt @@ -17,10 +17,13 @@ import android.view.KeyEvent import android.view.MotionEvent import android.view.View import android.view.ViewConfiguration +import androidx.core.content.res.ResourcesCompat +import androidx.core.view.isVisible import com.reddit.indicatorfastscroll.FastScrollItemIndicator +import com.simplemobiletools.commons.dialogs.CallConfirmationDialog import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.helpers.* -import com.simplemobiletools.commons.models.SimpleContact +import com.simplemobiletools.commons.models.contacts.Contact import com.simplemobiletools.dialer.R import com.simplemobiletools.dialer.adapters.ContactsAdapter import com.simplemobiletools.dialer.extensions.* @@ -34,7 +37,7 @@ import java.util.* import kotlin.math.roundToInt class DialpadActivity : SimpleActivity() { - private var allContacts = ArrayList() + private var allContacts = ArrayList() private var speedDialValues = ArrayList() private val russianCharsMap = HashMap() private var hasRussianLocale = false @@ -49,10 +52,47 @@ class DialpadActivity : SimpleActivity() { setContentView(R.layout.activity_dialpad) hasRussianLocale = Locale.getDefault().language == "ru" + updateMaterialActivityViews(dialpad_coordinator, dialpad_holder, useTransparentNavigation = true, useTopSearchMenu = false) + setupMaterialScrollListener(dialpad_list, dialpad_toolbar) + updateNavigationBarColor(getProperBackgroundColor()) + if (checkAppSideloading()) { return } + if (config.hideDialpadNumbers) { + dialpad_1_holder.isVisible = false + dialpad_2_holder.isVisible = false + dialpad_3_holder.isVisible = false + dialpad_4_holder.isVisible = false + dialpad_5_holder.isVisible = false + dialpad_6_holder.isVisible = false + dialpad_7_holder.isVisible = false + dialpad_8_holder.isVisible = false + dialpad_9_holder.isVisible = false + dialpad_plus_holder.isVisible = true + dialpad_0_holder.visibility = View.INVISIBLE + } + + arrayOf( + dialpad_0_holder, + dialpad_1_holder, + dialpad_2_holder, + dialpad_3_holder, + dialpad_4_holder, + dialpad_5_holder, + dialpad_6_holder, + dialpad_7_holder, + dialpad_8_holder, + dialpad_9_holder, + dialpad_plus_holder, + dialpad_asterisk_holder, + dialpad_hashtag_holder + ).forEach { + it.background = ResourcesCompat.getDrawable(resources, R.drawable.pill_background, theme) + it.background?.alpha = LOWER_ALPHA_INT + } + setupOptionsMenu() speedDialValues = config.getSpeedDialValues() privateCursor = getMyContactsCursor(favoritesOnly = false, withPhoneNumbersOnly = true) @@ -89,6 +129,7 @@ class DialpadActivity : SimpleActivity() { setupCharClick(dialpad_8_holder, '8') setupCharClick(dialpad_9_holder, '9') setupCharClick(dialpad_0_holder, '0') + setupCharClick(dialpad_plus_holder, '+', longClickable = false) setupCharClick(dialpad_asterisk_holder, '*', longClickable = false) setupCharClick(dialpad_hashtag_holder, '#', longClickable = false) @@ -97,10 +138,13 @@ class DialpadActivity : SimpleActivity() { dialpad_call_button.setOnClickListener { initCall(dialpad_input.value, 0) } dialpad_input.onTextChangeListener { dialpadValueChanged(it) } dialpad_input.requestFocus() - - SimpleContactsHelper(this).getAvailableContacts(false) { gotContacts(it) } dialpad_input.disableKeyboard() + ContactsHelper(this).getContacts(showOnlyContactsWithNumbers = true) { allContacts -> + gotContacts(allContacts) + } + + val properPrimaryColor = getProperPrimaryColor() val callIconId = if (areMultipleSIMsAvailable()) { val callIcon = resources.getColoredDrawableWithColor(R.drawable.ic_phone_two_vector, properPrimaryColor.getContrastColor()) @@ -131,7 +175,7 @@ class DialpadActivity : SimpleActivity() { super.onResume() updateTextColors(dialpad_holder) dialpad_clear_char.applyColorFilter(getProperTextColor()) - updateNavigationBarColor(getBottomNavigationBackgroundColor()) + updateNavigationBarColor(getProperBackgroundColor()) setupToolbar(dialpad_toolbar, NavigationIcon.Arrow) } @@ -179,10 +223,10 @@ class DialpadActivity : SimpleActivity() { dialpad_input.setText("") } - private fun gotContacts(newContacts: ArrayList) { + private fun gotContacts(newContacts: ArrayList) { allContacts = newContacts - val privateContacts = MyContactsContentProvider.getSimpleContacts(this, privateCursor) + val privateContacts = MyContactsContentProvider.getContacts(this, privateCursor) if (privateContacts.isNotEmpty()) { allContacts.addAll(privateContacts) allContacts.sort() @@ -230,11 +274,11 @@ class DialpadActivity : SimpleActivity() { it.doesContainPhoneNumber(text) || (convertedName.contains(text, true)) }.sortedWith(compareBy { !it.doesContainPhoneNumber(text) - }).toMutableList() as ArrayList + }).toMutableList() as ArrayList letter_fastscroller.setupWithRecyclerView(dialpad_list, { position -> try { - val name = filtered[position].name + val name = filtered[position].getNameToDisplay() val character = if (name.isNotEmpty()) name.substring(0, 1) else "" FastScrollItemIndicator.Text(character.toUpperCase(Locale.getDefault())) } catch (e: Exception) { @@ -243,7 +287,14 @@ class DialpadActivity : SimpleActivity() { }) ContactsAdapter(this, filtered, dialpad_list, null, text) { - startCallIntent((it as SimpleContact).phoneNumbers.first().normalizedNumber) + val contact = it as Contact + if (config.showCallConfirmation) { + CallConfirmationDialog(this@DialpadActivity, contact.getNameToDisplay()) { + startCallIntent(contact.getPrimaryNumber() ?: return@CallConfirmationDialog) + } + } else { + startCallIntent(contact.getPrimaryNumber() ?: return@ContactsAdapter) + } }.apply { dialpad_list.adapter = this } @@ -262,9 +313,21 @@ class DialpadActivity : SimpleActivity() { private fun initCall(number: String = dialpad_input.value, handleIndex: Int) { if (number.isNotEmpty()) { if (handleIndex != -1 && areMultipleSIMsAvailable()) { - callContactWithSim(number, handleIndex == 0) + if (config.showCallConfirmation) { + CallConfirmationDialog(this, number) { + callContactWithSim(number, handleIndex == 0) + } + }else{ + callContactWithSim(number, handleIndex == 0) + } } else { - startCallIntent(number) + if (config.showCallConfirmation) { + CallConfirmationDialog(this, number) { + startCallIntent(number) + } + }else{ + startCallIntent(number) + } } } } diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/MainActivity.kt index 36a1ae3a..6cf2e169 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/MainActivity.kt @@ -2,8 +2,6 @@ package com.simplemobiletools.dialer.activities import android.annotation.SuppressLint import android.app.Activity -import android.app.SearchManager -import android.content.Context import android.content.Intent import android.content.pm.ShortcutInfo import android.content.res.Configuration @@ -13,24 +11,21 @@ import android.graphics.drawable.LayerDrawable import android.os.Bundle import android.os.Handler import android.provider.Settings -import android.view.Menu -import android.view.MenuItem import android.widget.ImageView import android.widget.TextView import android.widget.Toast -import androidx.appcompat.widget.SearchView -import androidx.core.view.MenuItemCompat import androidx.viewpager.widget.ViewPager import com.google.android.material.snackbar.Snackbar import com.simplemobiletools.commons.dialogs.ConfirmationDialog import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.helpers.* import com.simplemobiletools.commons.models.FAQItem -import com.simplemobiletools.commons.models.SimpleContact +import com.simplemobiletools.commons.models.contacts.Contact import com.simplemobiletools.dialer.BuildConfig import com.simplemobiletools.dialer.R import com.simplemobiletools.dialer.adapters.ViewPagerAdapter import com.simplemobiletools.dialer.dialogs.ChangeSortingDialog +import com.simplemobiletools.dialer.dialogs.FilterContactSourcesDialog import com.simplemobiletools.dialer.extensions.config import com.simplemobiletools.dialer.extensions.launchCreateNewContactIntent import com.simplemobiletools.dialer.fragments.FavoritesFragment @@ -45,19 +40,19 @@ import kotlinx.android.synthetic.main.fragment_recents.* import me.grantland.widget.AutofitHelper class MainActivity : SimpleActivity() { - private var isSearchOpen = false private var launchedDialer = false - private var mSearchMenuItem: MenuItem? = null private var storedShowTabs = 0 - private var searchQuery = "" - var cachedContacts = ArrayList() + private var storedStartNameWithSurname = false + var cachedContacts = ArrayList() override fun onCreate(savedInstanceState: Bundle?) { + isMaterialActivity = true super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) appLaunched(BuildConfig.APPLICATION_ID) setupOptionsMenu() refreshMenuItems() + updateMaterialActivityViews(main_coordinator, main_holder, useTransparentNavigation = false, useTopSearchMenu = true) launchedDialer = savedInstanceState?.getBoolean(OPEN_DIAL_PAD_AT_LAUNCH) ?: false @@ -90,28 +85,37 @@ class MainActivity : SimpleActivity() { } setupTabs() - SimpleContact.sorting = config.sorting + Contact.sorting = config.sorting } override fun onResume() { super.onResume() + if (storedShowTabs != config.showTabs) { + config.lastUsedViewPagerPage = 0 + System.exit(0) + return + } + + updateMenuColors() val properPrimaryColor = getProperPrimaryColor() val dialpadIcon = resources.getColoredDrawableWithColor(R.drawable.ic_dialpad_vector, properPrimaryColor.getContrastColor()) main_dialpad_button.setImageDrawable(dialpadIcon) - setupTabColors() - setupToolbar(main_toolbar, searchMenuItem = mSearchMenuItem) updateTextColors(main_holder) + setupTabColors() getAllFragments().forEach { it?.setupColors(getProperTextColor(), getProperPrimaryColor(), getProperPrimaryColor()) } - if (!isSearchOpen) { - if (storedShowTabs != config.showTabs) { - System.exit(0) - return - } + val configStartNameWithSurname = config.startNameWithSurname + if (storedStartNameWithSurname != configStartNameWithSurname) { + contacts_fragment?.startNameWithSurnameChanged(configStartNameWithSurname) + favorites_fragment?.startNameWithSurnameChanged(configStartNameWithSurname) + storedStartNameWithSurname = config.startNameWithSurname + } + + if (!main_menu.isSearchOpen) { refreshItems(true) } @@ -124,6 +128,7 @@ class MainActivity : SimpleActivity() { override fun onPause() { super.onPause() storedShowTabs = config.showTabs + storedStartNameWithSurname = config.startNameWithSurname config.lastUsedViewPagerPage = view_pager.currentItem } @@ -149,8 +154,8 @@ class MainActivity : SimpleActivity() { } override fun onBackPressed() { - if (isSearchOpen && mSearchMenuItem != null) { - mSearchMenuItem!!.collapseActionView() + if (main_menu.isSearchOpen) { + main_menu.closeSearch() } else { super.onBackPressed() } @@ -158,7 +163,7 @@ class MainActivity : SimpleActivity() { private fun refreshMenuItems() { val currentFragment = getCurrentFragment() - main_toolbar.menu.apply { + main_menu.getToolbar().menu.apply { findItem(R.id.clear_call_history).isVisible = currentFragment == recents_fragment findItem(R.id.sort).isVisible = currentFragment != recents_fragment findItem(R.id.create_new_contact).isVisible = currentFragment == contacts_fragment @@ -167,12 +172,26 @@ class MainActivity : SimpleActivity() { } private fun setupOptionsMenu() { - setupSearch(main_toolbar.menu) - main_toolbar.setOnMenuItemClickListener { menuItem -> + main_menu.getToolbar().inflateMenu(R.menu.menu) + main_menu.toggleHideOnScroll(false) + main_menu.setupMenu() + + main_menu.onSearchClosedListener = { + getAllFragments().forEach { + it?.onSearchQueryChanged("") + } + } + + main_menu.onSearchTextChangedListener = { text -> + getCurrentFragment()?.onSearchQueryChanged(text) + } + + main_menu.getToolbar().setOnMenuItemClickListener { menuItem -> when (menuItem.itemId) { R.id.clear_call_history -> clearCallHistory() R.id.create_new_contact -> launchCreateNewContactIntent() R.id.sort -> showSortingDialog(showCustomSorting = getCurrentFragment() is FavoritesFragment) + R.id.filter -> showFilterDialog() R.id.more_apps_from_us -> launchMoreAppsFromUsIntent() R.id.settings -> launchSettings() R.id.about -> launchAbout() @@ -182,53 +201,20 @@ class MainActivity : SimpleActivity() { } } + private fun updateMenuColors() { + updateStatusbarColor(getProperBackgroundColor()) + main_menu.updateColors() + } + private fun checkContactPermissions() { handlePermission(PERMISSION_READ_CONTACTS) { initFragments() } } - private fun setupSearch(menu: Menu) { - val searchManager = getSystemService(Context.SEARCH_SERVICE) as SearchManager - mSearchMenuItem = menu.findItem(R.id.search) - (mSearchMenuItem!!.actionView as SearchView).apply { - setSearchableInfo(searchManager.getSearchableInfo(componentName)) - isSubmitButtonEnabled = false - queryHint = getString(R.string.search) - setOnQueryTextListener(object : SearchView.OnQueryTextListener { - override fun onQueryTextSubmit(query: String) = false - - override fun onQueryTextChange(newText: String): Boolean { - if (isSearchOpen) { - searchQuery = newText - getCurrentFragment()?.onSearchQueryChanged(newText) - } - return true - } - }) - } - - MenuItemCompat.setOnActionExpandListener(mSearchMenuItem, object : MenuItemCompat.OnActionExpandListener { - override fun onMenuItemActionExpand(item: MenuItem?): Boolean { - isSearchOpen = true - main_dialpad_button.beGone() - return true - } - - override fun onMenuItemActionCollapse(item: MenuItem?): Boolean { - if (isSearchOpen) { - getCurrentFragment()?.onSearchClosed() - } - - isSearchOpen = false - main_dialpad_button.beVisible() - return true - } - }) - } - private fun clearCallHistory() { - ConfirmationDialog(this, "", R.string.clear_history_confirmation) { + val confirmationText = "${getString(R.string.remove_confirmation)}\n\n${getString(R.string.cannot_be_undone)}" + ConfirmationDialog(this, confirmationText) { RecentsHelper(this).removeAllRecentCalls(this) { runOnUiThread { recents_fragment?.refreshItems() @@ -270,11 +256,11 @@ class MainActivity : SimpleActivity() { private fun setupTabColors() { val activeView = main_tabs_holder.getTabAt(view_pager.currentItem)?.customView - updateBottomTabItemColors(activeView, true) + updateBottomTabItemColors(activeView, true, getSelectedTabDrawableIds()[view_pager.currentItem]) getInactiveTabIndexes(view_pager.currentItem).forEach { index -> val inactiveView = main_tabs_holder.getTabAt(index)?.customView - updateBottomTabItemColors(inactiveView, false) + updateBottomTabItemColors(inactiveView, false, getDeselectedTabDrawableIds()[index]) } val bottomBarColor = getBottomNavigationBackgroundColor() @@ -282,7 +268,45 @@ class MainActivity : SimpleActivity() { updateNavigationBarColor(bottomBarColor) } - private fun getInactiveTabIndexes(activeIndex: Int) = (0 until tabsList.size).filter { it != activeIndex } + private fun getInactiveTabIndexes(activeIndex: Int) = (0 until main_tabs_holder.tabCount).filter { it != activeIndex } + + private fun getSelectedTabDrawableIds(): ArrayList { + val showTabs = config.showTabs + val icons = ArrayList() + + if (showTabs and TAB_CONTACTS != 0) { + icons.add(R.drawable.ic_person_vector) + } + + if (showTabs and TAB_FAVORITES != 0) { + icons.add(R.drawable.ic_star_vector) + } + + if (showTabs and TAB_CALL_HISTORY != 0) { + icons.add(R.drawable.ic_clock_filled_vector) + } + + return icons + } + + private fun getDeselectedTabDrawableIds(): ArrayList { + val showTabs = config.showTabs + val icons = ArrayList() + + if (showTabs and TAB_CONTACTS != 0) { + icons.add(R.drawable.ic_person_outline_vector) + } + + if (showTabs and TAB_FAVORITES != 0) { + icons.add(R.drawable.ic_star_outline_vector) + } + + if (showTabs and TAB_CALL_HISTORY != 0) { + icons.add(R.drawable.ic_clock_vector) + } + + return icons + } private fun initFragments() { view_pager.offscreenPageLimit = 2 @@ -349,17 +373,18 @@ class MainActivity : SimpleActivity() { main_tabs_holder.onTabSelectionChanged( tabUnselectedAction = { - updateBottomTabItemColors(it.customView, false) + updateBottomTabItemColors(it.customView, false, getDeselectedTabDrawableIds()[it.position]) }, tabSelectedAction = { - closeSearch() + main_menu.closeSearch() view_pager.currentItem = it.position - updateBottomTabItemColors(it.customView, true) + updateBottomTabItemColors(it.customView, true, getSelectedTabDrawableIds()[it.position]) } ) main_tabs_holder.beGoneIf(main_tabs_holder.tabCount == 1) storedShowTabs = config.showTabs + storedStartNameWithSurname = config.startNameWithSurname } private fun getTabIcon(position: Int): Drawable { @@ -404,7 +429,7 @@ class MainActivity : SimpleActivity() { } } - private fun refreshFragments() { + fun refreshFragments() { contacts_fragment?.refreshItems() favorites_fragment?.refreshItems() recents_fragment?.refreshItems() @@ -471,13 +496,11 @@ class MainActivity : SimpleActivity() { } private fun launchSettings() { - closeSearch() hideKeyboard() startActivity(Intent(applicationContext, SettingsActivity::class.java)) } private fun launchAbout() { - closeSearch() val licenses = LICENSE_GLIDE or LICENSE_INDICATOR_FAST_SCROLL or LICENSE_AUTOFITTEXTVIEW val faqItems = arrayListOf( @@ -496,29 +519,40 @@ class MainActivity : SimpleActivity() { private fun showSortingDialog(showCustomSorting: Boolean) { ChangeSortingDialog(this, showCustomSorting) { favorites_fragment?.refreshItems { - if (isSearchOpen) { - getCurrentFragment()?.onSearchQueryChanged(searchQuery) + if (main_menu.isSearchOpen) { + getCurrentFragment()?.onSearchQueryChanged(main_menu.getCurrentQuery()) } } contacts_fragment?.refreshItems { - if (isSearchOpen) { - getCurrentFragment()?.onSearchQueryChanged(searchQuery) + if (main_menu.isSearchOpen) { + getCurrentFragment()?.onSearchQueryChanged(main_menu.getCurrentQuery()) } } } } - - private fun closeSearch() { - if (isSearchOpen) { - getAllFragments().forEach { - it?.onSearchQueryChanged("") + private fun showFilterDialog() { + FilterContactSourcesDialog(this) { + favorites_fragment?.refreshItems { + if (main_menu.isSearchOpen) { + getCurrentFragment()?.onSearchQueryChanged(main_menu.getCurrentQuery()) + } + } + + contacts_fragment?.refreshItems { + if (main_menu.isSearchOpen) { + getCurrentFragment()?.onSearchQueryChanged(main_menu.getCurrentQuery()) + } + } + + recents_fragment?.refreshItems{ + if (main_menu.isSearchOpen) { + getCurrentFragment()?.onSearchQueryChanged(main_menu.getCurrentQuery()) + } } - mSearchMenuItem?.collapseActionView() } } - - fun cacheContacts(contacts: List) { + fun cacheContacts(contacts: List) { try { cachedContacts.clear() cachedContacts.addAll(contacts) diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/ManageSpeedDialActivity.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/ManageSpeedDialActivity.kt index ab864cbf..8d1f5961 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/ManageSpeedDialActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/ManageSpeedDialActivity.kt @@ -3,9 +3,9 @@ package com.simplemobiletools.dialer.activities import android.os.Bundle import com.google.gson.Gson import com.simplemobiletools.commons.extensions.updateTextColors +import com.simplemobiletools.commons.helpers.ContactsHelper import com.simplemobiletools.commons.helpers.NavigationIcon -import com.simplemobiletools.commons.helpers.SimpleContactsHelper -import com.simplemobiletools.commons.models.SimpleContact +import com.simplemobiletools.commons.models.contacts.Contact import com.simplemobiletools.dialer.R import com.simplemobiletools.dialer.adapters.SpeedDialAdapter import com.simplemobiletools.dialer.dialogs.SelectContactDialog @@ -15,16 +15,20 @@ import com.simplemobiletools.dialer.models.SpeedDial import kotlinx.android.synthetic.main.activity_manage_speed_dial.* class ManageSpeedDialActivity : SimpleActivity(), RemoveSpeedDialListener { - private var allContacts = ArrayList() + private var allContacts = ArrayList() private var speedDialValues = ArrayList() override fun onCreate(savedInstanceState: Bundle?) { + isMaterialActivity = true super.onCreate(savedInstanceState) setContentView(R.layout.activity_manage_speed_dial) + updateMaterialActivityViews(manage_speed_dial_coordinator, manage_speed_dial_holder, useTransparentNavigation = true, useTopSearchMenu = false) + setupMaterialScrollListener(manage_speed_dial_scrollview, manage_speed_dial_toolbar) + speedDialValues = config.getSpeedDialValues() updateAdapter() - SimpleContactsHelper(this).getAvailableContacts(false) { contacts -> + ContactsHelper(this).getContacts(showOnlyContactsWithNumbers = true) { contacts -> allContacts = contacts } @@ -50,7 +54,7 @@ class ManageSpeedDialActivity : SimpleActivity(), RemoveSpeedDialListener { SelectContactDialog(this, allContacts) { selectedContact -> speedDialValues.first { it.id == clickedContact.id }.apply { - displayName = selectedContact.name + displayName = selectedContact.getNameToDisplay() number = selectedContact.phoneNumbers.first().normalizedNumber } updateAdapter() diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/SettingsActivity.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/SettingsActivity.kt index 7d6e339c..827ac53b 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/SettingsActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/SettingsActivity.kt @@ -20,9 +20,14 @@ import java.util.* import kotlin.system.exitProcess class SettingsActivity : SimpleActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + isMaterialActivity = true super.onCreate(savedInstanceState) setContentView(R.layout.activity_settings) + + updateMaterialActivityViews(settings_coordinator, settings_holder, useTransparentNavigation = true, useTopSearchMenu = false) + setupMaterialScrollListener(settings_nested_scrollview, settings_toolbar) } override fun onResume() { @@ -43,6 +48,7 @@ class SettingsActivity : SimpleActivity() { setupGroupSubsequentCalls() setupStartNameWithSurname() setupDialpadVibrations() + setupDialpadNumbers() setupDialpadBeeps() setupShowCallConfirmation() setupDisableProximitySensor() @@ -51,22 +57,13 @@ class SettingsActivity : SimpleActivity() { updateTextColors(settings_holder) arrayOf( - settings_color_customization_label, + settings_color_customization_section_label, settings_general_settings_label, settings_startup_label, settings_calls_label ).forEach { it.setTextColor(getProperPrimaryColor()) } - - arrayOf( - settings_color_customization_holder, - settings_general_settings_holder, - settings_startup_holder, - settings_calls_holder - ).forEach { - it.background.applyColorFilter(getProperBackgroundColor().getContrastColor()) - } } override fun onCreateOptionsMenu(menu: Menu): Boolean { @@ -76,21 +73,14 @@ class SettingsActivity : SimpleActivity() { private fun setupPurchaseThankYou() { settings_purchase_thank_you_holder.beGoneIf(isOrWasThankYouInstalled()) - - // make sure the corners at ripple fit the stroke rounded corners - if (settings_purchase_thank_you_holder.isGone()) { - settings_use_english_holder.background = resources.getDrawable(R.drawable.ripple_top_corners, theme) - settings_manage_blocked_numbers_holder.background = resources.getDrawable(R.drawable.ripple_top_corners, theme) - } - settings_purchase_thank_you_holder.setOnClickListener { launchPurchaseThankYouIntent() } } private fun setupCustomizeColors() { - settings_customize_colors_label.text = getCustomizeColorsString() - settings_customize_colors_holder.setOnClickListener { + settings_color_customization_label.text = getCustomizeColorsString() + settings_color_customization_holder.setOnClickListener { handleCustomizeColorsClick() } } @@ -108,11 +98,6 @@ class SettingsActivity : SimpleActivity() { private fun setupLanguage() { settings_language.text = Locale.getDefault().displayLanguage settings_language_holder.beVisibleIf(isTiramisuPlus()) - - if (settings_use_english_holder.isGone() && settings_language_holder.isGone() && settings_purchase_thank_you_holder.isGone()) { - settings_manage_blocked_numbers_holder.background = resources.getDrawable(R.drawable.ripple_top_corners, theme) - } - settings_language_holder.setOnClickListener { launchChangeAppLanguageIntent() } @@ -123,11 +108,6 @@ class SettingsActivity : SimpleActivity() { private fun setupManageBlockedNumbers() { settings_manage_blocked_numbers_label.text = addLockedLabelIfNeeded(R.string.manage_blocked_numbers) settings_manage_blocked_numbers_holder.beVisibleIf(isNougatPlus()) - - if (settings_use_english_holder.isGone() && settings_purchase_thank_you_holder.isGone() && settings_manage_blocked_numbers_holder.isGone()) { - settings_change_date_time_format_holder.background = resources.getDrawable(R.drawable.ripple_top_corners, theme) - } - settings_manage_blocked_numbers_holder.setOnClickListener { if (isOrWasThankYouInstalled()) { Intent(this, ManageBlockedNumbersActivity::class.java).apply { @@ -234,6 +214,14 @@ class SettingsActivity : SimpleActivity() { } } + private fun setupDialpadNumbers() { + settings_hide_dialpad_numbers.isChecked = config.hideDialpadNumbers + settings_hide_dialpad_numbers_holder.setOnClickListener { + settings_hide_dialpad_numbers.toggle() + config.hideDialpadNumbers = settings_hide_dialpad_numbers.isChecked + } + } + private fun setupDialpadBeeps() { settings_dialpad_beeps.isChecked = config.dialpadBeeps settings_dialpad_beeps_holder.setOnClickListener { diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/adapters/ContactsAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/adapters/ContactsAdapter.kt index 1383b3ae..c2ee834d 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/adapters/ContactsAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/adapters/ContactsAdapter.kt @@ -28,7 +28,7 @@ import com.simplemobiletools.commons.helpers.isOreoPlus import com.simplemobiletools.commons.interfaces.ItemMoveCallback import com.simplemobiletools.commons.interfaces.ItemTouchHelperContract import com.simplemobiletools.commons.interfaces.StartReorderDragListener -import com.simplemobiletools.commons.models.SimpleContact +import com.simplemobiletools.commons.models.contacts.Contact import com.simplemobiletools.commons.views.MyRecyclerView import com.simplemobiletools.dialer.R import com.simplemobiletools.dialer.activities.SimpleActivity @@ -41,7 +41,7 @@ import java.util.* class ContactsAdapter( activity: SimpleActivity, - var contacts: ArrayList, + var contacts: ArrayList, recyclerView: MyRecyclerView, val refreshItemsListener: RefreshItemsListener? = null, highlightText: String = "", @@ -135,9 +135,9 @@ class ContactsAdapter( override fun getItemCount() = contacts.size - fun updateItems(newItems: ArrayList, highlightText: String = "") { + fun updateItems(newItems: ArrayList, highlightText: String = "") { if (newItems.hashCode() != contacts.hashCode()) { - contacts = newItems.clone() as ArrayList + contacts = newItems.clone() as ArrayList textToHighlight = highlightText notifyDataSetChanged() finishActMode() @@ -184,7 +184,7 @@ class ContactsAdapter( val itemsCnt = selectedKeys.size val firstItem = getSelectedItems().firstOrNull() ?: return val items = if (itemsCnt == 1) { - "\"${firstItem.name}\"" + "\"${firstItem.getNameToDisplay()}\"" } else { resources.getQuantityString(R.plurals.delete_contacts, itemsCnt, itemsCnt) } @@ -221,12 +221,10 @@ class ContactsAdapter( } } - private fun getSelectedItems() = contacts.filter { selectedKeys.contains(it.rawId) } as ArrayList + private fun getSelectedItems() = contacts.filter { selectedKeys.contains(it.rawId) } as ArrayList private fun getSelectedPhoneNumber(): String? { - val numbers = getSelectedItems().firstOrNull()?.phoneNumbers - val primaryNumber = numbers?.firstOrNull { it.isPrimary } - return primaryNumber?.normalizedNumber ?: numbers?.firstOrNull()?.normalizedNumber + return getSelectedItems().firstOrNull()?.getPrimaryNumber() } private fun tryCreateShortcut() { @@ -242,16 +240,16 @@ class ContactsAdapter( val contact = contacts.firstOrNull { selectedKeys.contains(it.rawId) } ?: return val manager = activity.shortcutManager if (manager.isRequestPinShortcutSupported) { - SimpleContactsHelper(activity).getShortcutImage(contact.photoUri, contact.name) { image -> + SimpleContactsHelper(activity).getShortcutImage(contact.photoUri, contact.getNameToDisplay()) { image -> activity.runOnUiThread { activity.handlePermission(PERMISSION_CALL_PHONE) { hasPermission -> val action = if (hasPermission) Intent.ACTION_CALL else Intent.ACTION_DIAL val intent = Intent(action).apply { - data = Uri.fromParts("tel", contact.phoneNumbers.first().normalizedNumber, null) + data = Uri.fromParts("tel", getSelectedPhoneNumber(), null) } val shortcut = ShortcutInfo.Builder(activity, contact.hashCode().toString()) - .setShortLabel(contact.name) + .setShortLabel(contact.getNameToDisplay()) .setIcon(Icon.createWithBitmap(image)) .setIntent(intent) .build() @@ -270,18 +268,19 @@ class ContactsAdapter( } } - private fun setupView(view: View, contact: SimpleContact, holder: ViewHolder) { + private fun setupView(view: View, contact: Contact, holder: ViewHolder) { view.apply { findViewById(R.id.item_contact_frame).isSelected = selectedKeys.contains(contact.rawId) findViewById(R.id.item_contact_name).apply { setTextColor(textColor) setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize) - text = if (textToHighlight.isEmpty()) contact.name else { - if (contact.name.contains(textToHighlight, true)) { - contact.name.highlightTextPart(textToHighlight, properPrimaryColor) + val name = contact.getNameToDisplay() + text = if (textToHighlight.isEmpty()) name else { + if (name.contains(textToHighlight, true)) { + name.highlightTextPart(textToHighlight, properPrimaryColor) } else { - contact.name.highlightTextFromNumbers(textToHighlight, properPrimaryColor) + name.highlightTextFromNumbers(textToHighlight, properPrimaryColor) } } } @@ -306,7 +305,7 @@ class ContactsAdapter( } if (!activity.isDestroyed) { - SimpleContactsHelper(context).loadContactImage(contact.photoUri, findViewById(R.id.item_contact_image), contact.name) + SimpleContactsHelper(context).loadContactImage(contact.photoUri, findViewById(R.id.item_contact_image), contact.getNameToDisplay()) } } } diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/adapters/FilterContactSourcesAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/adapters/FilterContactSourcesAdapter.kt new file mode 100644 index 00000000..9a756857 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/adapters/FilterContactSourcesAdapter.kt @@ -0,0 +1,78 @@ +package com.simplemobiletools.dialer.adapters + +import android.view.View +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +import com.simplemobiletools.commons.extensions.getProperBackgroundColor +import com.simplemobiletools.commons.extensions.getProperPrimaryColor +import com.simplemobiletools.commons.extensions.getProperTextColor +import com.simplemobiletools.commons.helpers.SMT_PRIVATE +import com.simplemobiletools.commons.models.contacts.ContactSource +import com.simplemobiletools.dialer.R +import com.simplemobiletools.dialer.activities.SimpleActivity +import kotlinx.android.synthetic.main.item_filter_contact_source.view.* + +class FilterContactSourcesAdapter( + val activity: SimpleActivity, + private val contactSources: List, + private val displayContactSources: ArrayList +) : RecyclerView.Adapter() { + + private val selectedKeys = HashSet() + + init { + contactSources.forEachIndexed { index, contactSource -> + if (displayContactSources.contains(contactSource.name)) { + selectedKeys.add(contactSource.hashCode()) + } + + if (contactSource.type == SMT_PRIVATE && displayContactSources.contains(SMT_PRIVATE)) { + selectedKeys.add(contactSource.hashCode()) + } + } + } + + private fun toggleItemSelection(select: Boolean, contactSource: ContactSource, position: Int) { + if (select) { + selectedKeys.add(contactSource.hashCode()) + } else { + selectedKeys.remove(contactSource.hashCode()) + } + + notifyItemChanged(position) + } + + fun getSelectedContactSources() = contactSources.filter { selectedKeys.contains(it.hashCode()) } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { + val view = activity.layoutInflater.inflate(R.layout.item_filter_contact_source, parent, false) + return ViewHolder(view) + } + + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + val contactSource = contactSources[position] + holder.bindView(contactSource) + } + + override fun getItemCount() = contactSources.size + + inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) { + fun bindView(contactSource: ContactSource): View { + val isSelected = selectedKeys.contains(contactSource.hashCode()) + itemView.apply { + filter_contact_source_checkbox.isChecked = isSelected + filter_contact_source_checkbox.setColors(activity.getProperTextColor(), activity.getProperPrimaryColor(), activity.getProperBackgroundColor()) + val countText = if (contactSource.count >= 0) " (${contactSource.count})" else "" + val displayName = "${contactSource.publicName}$countText" + filter_contact_source_checkbox.text = displayName + filter_contact_source_holder.setOnClickListener { viewClicked(!isSelected, contactSource) } + } + + return itemView + } + + private fun viewClicked(select: Boolean, contactSource: ContactSource) { + toggleItemSelection(select, contactSource, adapterPosition) + } + } +} diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/adapters/RecentCallsAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/adapters/RecentCallsAdapter.kt index 66de686f..71c91dd9 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/adapters/RecentCallsAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/adapters/RecentCallsAdapter.kt @@ -14,7 +14,7 @@ import com.simplemobiletools.commons.dialogs.ConfirmationDialog import com.simplemobiletools.commons.dialogs.FeatureLockedDialog import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.helpers.* -import com.simplemobiletools.commons.models.SimpleContact +import com.simplemobiletools.commons.models.contacts.Contact import com.simplemobiletools.commons.views.MyRecyclerView import com.simplemobiletools.dialer.R import com.simplemobiletools.dialer.activities.MainActivity @@ -246,11 +246,11 @@ class RecentCallsAdapter( } } - private fun findContactByCall(recentCall: RecentCall): SimpleContact? { + private fun findContactByCall(recentCall: RecentCall): Contact? { return (activity as MainActivity).cachedContacts.find { it.name == recentCall.name && it.doesHavePhoneNumber(recentCall.phoneNumber) } } - private fun launchContactDetailsIntent(contact: SimpleContact?) { + private fun launchContactDetailsIntent(contact: Contact?) { if (contact != null) { activity.startContactDetailsIntent(contact) } @@ -275,13 +275,14 @@ class RecentCallsAdapter( private fun setupView(view: View, call: RecentCall) { view.apply { item_recents_holder.isSelected = selectedKeys.contains(call.id) - var nameToShow = SpannableString(call.name) + val name = findContactByCall(call)?.getNameToDisplay() ?: call.name + var nameToShow = SpannableString(name) if (call.specificType.isNotEmpty()) { - nameToShow = SpannableString("${call.name} - ${call.specificType}") + nameToShow = SpannableString("${name} - ${call.specificType}") // show specific number at "Show call details" dialog too if (refreshItemsListener == null) { - nameToShow = SpannableString("${call.name} - ${call.specificType}, ${call.specificNumber}") + nameToShow = SpannableString("${name} - ${call.specificType}, ${call.specificNumber}") } } diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/dialogs/ChangeSortingDialog.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/dialogs/ChangeSortingDialog.kt index ef309efb..db411f26 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/dialogs/ChangeSortingDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/dialogs/ChangeSortingDialog.kt @@ -1,24 +1,15 @@ package com.simplemobiletools.dialer.dialogs -import androidx.appcompat.app.AlertDialog import com.simplemobiletools.commons.activities.BaseSimpleActivity import com.simplemobiletools.commons.extensions.beGoneIf import com.simplemobiletools.commons.extensions.getAlertDialogBuilder import com.simplemobiletools.commons.extensions.setupDialogStuff -import com.simplemobiletools.commons.helpers.SORT_BY_CUSTOM -import com.simplemobiletools.commons.helpers.SORT_BY_DATE_CREATED -import com.simplemobiletools.commons.helpers.SORT_BY_FULL_NAME -import com.simplemobiletools.commons.helpers.SORT_DESCENDING -import com.simplemobiletools.commons.models.SimpleContact +import com.simplemobiletools.commons.helpers.* import com.simplemobiletools.dialer.R import com.simplemobiletools.dialer.extensions.config import kotlinx.android.synthetic.main.dialog_change_sorting.view.* -class ChangeSortingDialog( - val activity: BaseSimpleActivity, - private val showCustomSorting: Boolean = false, - private val callback: () -> Unit -) { +class ChangeSortingDialog(val activity: BaseSimpleActivity, private val showCustomSorting: Boolean = false, private val callback: () -> Unit) { private var currSorting = 0 private var config = activity.config private var view = activity.layoutInflater.inflate(R.layout.dialog_change_sorting, null) @@ -51,17 +42,18 @@ class ChangeSortingDialog( } val sortBtn = when { + currSorting and SORT_BY_FIRST_NAME != 0 -> sortingRadio.sorting_dialog_radio_first_name + currSorting and SORT_BY_MIDDLE_NAME != 0 -> sortingRadio.sorting_dialog_radio_middle_name + currSorting and SORT_BY_SURNAME != 0 -> sortingRadio.sorting_dialog_radio_surname currSorting and SORT_BY_FULL_NAME != 0 -> sortingRadio.sorting_dialog_radio_full_name currSorting and SORT_BY_CUSTOM != 0 -> sortingRadio.sorting_dialog_radio_custom else -> sortingRadio.sorting_dialog_radio_date_created } - sortBtn.isChecked = true if (showCustomSorting) { sortingRadio.sorting_dialog_radio_custom.isChecked = config.isCustomOrderSelected } - view.sorting_dialog_radio_custom.beGoneIf(!showCustomSorting) } @@ -78,6 +70,9 @@ class ChangeSortingDialog( private fun dialogConfirmed() { val sortingRadio = view.sorting_dialog_radio_sorting var sorting = when (sortingRadio.checkedRadioButtonId) { + R.id.sorting_dialog_radio_first_name -> SORT_BY_FIRST_NAME + R.id.sorting_dialog_radio_middle_name -> SORT_BY_MIDDLE_NAME + R.id.sorting_dialog_radio_surname -> SORT_BY_SURNAME R.id.sorting_dialog_radio_full_name -> SORT_BY_FULL_NAME R.id.sorting_dialog_radio_custom -> SORT_BY_CUSTOM else -> SORT_BY_DATE_CREATED @@ -98,7 +93,6 @@ class ChangeSortingDialog( config.sorting = sorting } - SimpleContact.sorting = sorting callback() } } diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/dialogs/FilterContactSourcesDialog.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/dialogs/FilterContactSourcesDialog.kt new file mode 100644 index 00000000..5ff44d7a --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/dialogs/FilterContactSourcesDialog.kt @@ -0,0 +1,91 @@ +package com.simplemobiletools.dialer.dialogs + +import androidx.appcompat.app.AlertDialog +import com.simplemobiletools.commons.extensions.getAlertDialogBuilder +import com.simplemobiletools.commons.extensions.getMyContactsCursor +import com.simplemobiletools.commons.extensions.setupDialogStuff +import com.simplemobiletools.commons.helpers.SMT_PRIVATE +import com.simplemobiletools.commons.extensions.getVisibleContactSources +import com.simplemobiletools.commons.helpers.ContactsHelper +import com.simplemobiletools.commons.helpers.MyContactsContentProvider +import com.simplemobiletools.commons.models.contacts.* +import com.simplemobiletools.dialer.R +import com.simplemobiletools.dialer.activities.SimpleActivity +import com.simplemobiletools.dialer.adapters.FilterContactSourcesAdapter +import com.simplemobiletools.dialer.extensions.config +import kotlinx.android.synthetic.main.dialog_filter_contact_sources.view.* + +class FilterContactSourcesDialog(val activity: SimpleActivity, private val callback: () -> Unit) { + private var dialog: AlertDialog? = null + private val view = activity.layoutInflater.inflate(R.layout.dialog_filter_contact_sources, null) + private var contactSources = ArrayList() + private var contacts = ArrayList() + private var isContactSourcesReady = false + private var isContactsReady = false + + init { + val contactHelper = ContactsHelper(activity) + contactHelper.getContactSources { contactSources -> + contactSources.mapTo(this@FilterContactSourcesDialog.contactSources) { it.copy() } + isContactSourcesReady = true + processDataIfReady() + } + + contactHelper.getContacts(getAll = true, showOnlyContactsWithNumbers = true) { + it.mapTo(contacts) { contact -> contact.copy() } + val privateCursor = activity.getMyContactsCursor(false, true) + val privateContacts = MyContactsContentProvider.getContacts(activity, privateCursor) + this.contacts.addAll(privateContacts) + isContactsReady = true + processDataIfReady() + } + } + + private fun processDataIfReady() { + if (!isContactSourcesReady) { + return + } + + val contactSourcesWithCount = ArrayList() + for (contactSource in contactSources) { + val count = if (isContactsReady) { + contacts.filter { it.source == contactSource.name }.count() + } else { + -1 + } + contactSourcesWithCount.add(contactSource.copy(count = count)) + } + + contactSources.clear() + contactSources.addAll(contactSourcesWithCount) + + activity.runOnUiThread { + val selectedSources = activity.getVisibleContactSources() + view.filter_contact_sources_list.adapter = FilterContactSourcesAdapter(activity, contactSourcesWithCount, selectedSources) + + if (dialog == null) { + activity.getAlertDialogBuilder() + .setPositiveButton(R.string.ok) { dialogInterface, i -> confirmContactSources() } + .setNegativeButton(R.string.cancel, null) + .apply { + activity.setupDialogStuff(view, this) { alertDialog -> + dialog = alertDialog + } + } + } + } + } + + private fun confirmContactSources() { + val selectedContactSources = (view.filter_contact_sources_list.adapter as FilterContactSourcesAdapter).getSelectedContactSources() + val ignoredContactSources = contactSources.filter { !selectedContactSources.contains(it) }.map { + if (it.type == SMT_PRIVATE) SMT_PRIVATE else it.getFullIdentifier() + }.toHashSet() + + if (activity.getVisibleContactSources() != ignoredContactSources) { + activity.config.ignoredContactSources = ignoredContactSources + callback() + } + dialog?.dismiss() + } +} diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/dialogs/SelectContactDialog.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/dialogs/SelectContactDialog.kt index 0e881471..104838fe 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/dialogs/SelectContactDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/dialogs/SelectContactDialog.kt @@ -3,14 +3,14 @@ package com.simplemobiletools.dialer.dialogs import androidx.appcompat.app.AlertDialog import com.reddit.indicatorfastscroll.FastScrollItemIndicator import com.simplemobiletools.commons.extensions.* -import com.simplemobiletools.commons.models.SimpleContact +import com.simplemobiletools.commons.models.contacts.Contact import com.simplemobiletools.dialer.R import com.simplemobiletools.dialer.activities.SimpleActivity import com.simplemobiletools.dialer.adapters.ContactsAdapter import kotlinx.android.synthetic.main.dialog_select_contact.view.* import java.util.* -class SelectContactDialog(val activity: SimpleActivity, contacts: ArrayList, val callback: (selectedContact: SimpleContact) -> Unit) { +class SelectContactDialog(val activity: SimpleActivity, contacts: ArrayList, val callback: (selectedContact: Contact) -> Unit) { private var dialog: AlertDialog? = null private var view = activity.layoutInflater.inflate(R.layout.dialog_select_contact, null) @@ -23,7 +23,7 @@ class SelectContactDialog(val activity: SimpleActivity, contacts: ArrayList try { - val name = contacts[position].name + val name = contacts[position].getNameToDisplay() val character = if (name.isNotEmpty()) name.substring(0, 1) else "" FastScrollItemIndicator.Text(character.toUpperCase(Locale.getDefault())) } catch (e: Exception) { @@ -32,7 +32,7 @@ class SelectContactDialog(val activity: SimpleActivity, contacts: ArrayList Unit) { +class SelectSIMDialog( + val activity: BaseSimpleActivity, + val phoneNumber: String, + onDismiss: () -> Unit = {}, + val callback: (handle: PhoneAccountHandle?) -> Unit +) { private var dialog: AlertDialog? = null private val view = activity.layoutInflater.inflate(R.layout.dialog_select_sim, null) @@ -42,6 +47,10 @@ class SelectSIMDialog(val activity: BaseSimpleActivity, val phoneNumber: String, dialog = alertDialog } } + + dialog?.setOnDismissListener { + onDismiss() + } } private fun selectedSIM(handle: PhoneAccountHandle) { diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/extensions/Activity.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/extensions/Activity.kt index e59a784b..479d5ed4 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/extensions/Activity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/extensions/Activity.kt @@ -11,7 +11,8 @@ import android.telecom.TelecomManager import com.simplemobiletools.commons.activities.BaseSimpleActivity import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.helpers.* -import com.simplemobiletools.commons.models.SimpleContact +import com.simplemobiletools.commons.models.contacts.Contact +import com.simplemobiletools.dialer.activities.DialerActivity import com.simplemobiletools.dialer.activities.SimpleActivity import com.simplemobiletools.dialer.dialogs.SelectSIMDialog @@ -42,7 +43,7 @@ fun BaseSimpleActivity.callContactWithSim(recipient: String, useMainSIM: Boolean } // handle private contacts differently, only Simple Contacts Pro can open them -fun Activity.startContactDetailsIntent(contact: SimpleContact) { +fun Activity.startContactDetailsIntent(contact: Contact) { val simpleContacts = "com.simplemobiletools.contacts.pro" val simpleContactsDebug = "com.simplemobiletools.contacts.pro.debug" if (contact.rawId > 1000000 && contact.contactId > 1000000 && contact.rawId == contact.contactId && @@ -81,7 +82,11 @@ fun SimpleActivity.getHandleToUse(intent: Intent?, phoneNumber: String, callback defaultHandle != null -> callback(defaultHandle) else -> { - SelectSIMDialog(this, phoneNumber) { handle -> + SelectSIMDialog(this, phoneNumber, onDismiss = { + if (this is DialerActivity) { + finish() + } + }) { handle -> callback(handle) } } diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/fragments/ContactsFragment.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/fragments/ContactsFragment.kt index f0a2bb9f..ffbd619a 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/fragments/ContactsFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/fragments/ContactsFragment.kt @@ -5,10 +5,8 @@ import android.util.AttributeSet import com.reddit.indicatorfastscroll.FastScrollItemIndicator import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter import com.simplemobiletools.commons.extensions.* -import com.simplemobiletools.commons.helpers.MyContactsContentProvider -import com.simplemobiletools.commons.helpers.PERMISSION_READ_CONTACTS -import com.simplemobiletools.commons.helpers.SimpleContactsHelper -import com.simplemobiletools.commons.models.SimpleContact +import com.simplemobiletools.commons.helpers.* +import com.simplemobiletools.commons.models.contacts.Contact import com.simplemobiletools.dialer.R import com.simplemobiletools.dialer.activities.MainActivity import com.simplemobiletools.dialer.activities.SimpleActivity @@ -20,7 +18,7 @@ import kotlinx.android.synthetic.main.fragment_letters_layout.view.* import java.util.* class ContactsFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerFragment(context, attributeSet), RefreshItemsListener { - private var allContacts = ArrayList() + private var allContacts = ArrayList() override fun setupFragment() { val placeholderResId = if (context.hasPermission(PERMISSION_READ_CONTACTS)) { @@ -64,15 +62,16 @@ class ContactsFragment(context: Context, attributeSet: AttributeSet) : MyViewPag override fun refreshItems(callback: (() -> Unit)?) { val privateCursor = context?.getMyContactsCursor(false, true) - SimpleContactsHelper(context).getAvailableContacts(false) { contacts -> + ContactsHelper(context).getContacts(showOnlyContactsWithNumbers = true) { contacts -> allContacts = contacts - val privateContacts = MyContactsContentProvider.getSimpleContacts(context, privateCursor) - if (privateContacts.isNotEmpty()) { - allContacts.addAll(privateContacts) - allContacts.sort() + if (SMT_PRIVATE !in context.baseConfig.ignoredContactSources) { + val privateContacts = MyContactsContentProvider.getContacts(context, privateCursor) + if (privateContacts.isNotEmpty()) { + allContacts.addAll(privateContacts) + allContacts.sort() + } } - (activity as MainActivity).cacheContacts(allContacts) activity?.runOnUiThread { @@ -82,7 +81,7 @@ class ContactsFragment(context: Context, attributeSet: AttributeSet) : MyViewPag } } - private fun gotContacts(contacts: ArrayList) { + private fun gotContacts(contacts: ArrayList) { setupLetterFastscroller(contacts) if (contacts.isEmpty()) { fragment_placeholder.beVisible() @@ -96,7 +95,7 @@ class ContactsFragment(context: Context, attributeSet: AttributeSet) : MyViewPag val currAdapter = fragment_list.adapter if (currAdapter == null) { ContactsAdapter(activity as SimpleActivity, contacts, fragment_list, this) { - val contact = it as SimpleContact + val contact = it as Contact activity?.startContactDetailsIntent(contact) }.apply { fragment_list.adapter = this @@ -111,10 +110,10 @@ class ContactsFragment(context: Context, attributeSet: AttributeSet) : MyViewPag } } - private fun setupLetterFastscroller(contacts: ArrayList) { + private fun setupLetterFastscroller(contacts: ArrayList) { letter_fastscroller.setupWithRecyclerView(fragment_list, { position -> try { - val name = contacts[position].name + val name = contacts[position].getNameToDisplay() val character = if (name.isNotEmpty()) name.substring(0, 1) else "" FastScrollItemIndicator.Text(character.toUpperCase(Locale.getDefault()).normalizeString()) } catch (e: Exception) { @@ -130,26 +129,37 @@ class ContactsFragment(context: Context, attributeSet: AttributeSet) : MyViewPag } override fun onSearchQueryChanged(text: String) { - val contacts = allContacts.filter { - it.doesContainPhoneNumber(text) || - it.name.contains(text, true) || - it.name.normalizeString().contains(text, true) || - it.name.contains(text.normalizeString(), true) - }.sortedByDescending { - it.name.startsWith(text, true) - }.toMutableList() as ArrayList + val shouldNormalize = text.normalizeString() == text + val filtered = allContacts.filter { + getProperText(it.getNameToDisplay(), shouldNormalize).contains(text, true) || + getProperText(it.nickname, shouldNormalize).contains(text, true) || + it.phoneNumbers.any { + text.normalizePhoneNumber().isNotEmpty() && it.normalizedNumber.contains(text.normalizePhoneNumber(), true) + } || + it.emails.any { it.value.contains(text, true) } || + it.addresses.any { getProperText(it.value, shouldNormalize).contains(text, true) } || + it.IMs.any { it.value.contains(text, true) } || + getProperText(it.notes, shouldNormalize).contains(text, true) || + getProperText(it.organization.company, shouldNormalize).contains(text, true) || + getProperText(it.organization.jobPosition, shouldNormalize).contains(text, true) || + it.websites.any { it.contains(text, true) } + } as ArrayList - fragment_placeholder.beVisibleIf(contacts.isEmpty()) - (fragment_list.adapter as? ContactsAdapter)?.updateItems(contacts, text) - setupLetterFastscroller(contacts) - } + filtered.sortBy { + val nameToDisplay = it.getNameToDisplay() + !getProperText(nameToDisplay, shouldNormalize).startsWith(text, true) && !nameToDisplay.contains(text, true) + } + fragment_placeholder.beVisibleIf(filtered.isEmpty()) + (fragment_list.adapter as? ContactsAdapter)?.updateItems(filtered, text) + setupLetterFastscroller(filtered) + } private fun requestReadContactsPermission() { activity?.handlePermission(PERMISSION_READ_CONTACTS) { if (it) { fragment_placeholder.text = context.getString(R.string.no_contacts_found) fragment_placeholder_2.text = context.getString(R.string.create_new_contact) - SimpleContactsHelper(context).getAvailableContacts(false) { contacts -> + ContactsHelper(context).getContacts(showOnlyContactsWithNumbers = true) { contacts -> activity?.runOnUiThread { gotContacts(contacts) } diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/fragments/FavoritesFragment.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/fragments/FavoritesFragment.kt index 8c6dc263..5336f857 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/fragments/FavoritesFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/fragments/FavoritesFragment.kt @@ -8,11 +8,12 @@ import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter import com.simplemobiletools.commons.dialogs.CallConfirmationDialog import com.simplemobiletools.commons.dialogs.RadioGroupDialog import com.simplemobiletools.commons.extensions.* +import com.simplemobiletools.commons.helpers.ContactsHelper import com.simplemobiletools.commons.helpers.MyContactsContentProvider import com.simplemobiletools.commons.helpers.PERMISSION_READ_CONTACTS -import com.simplemobiletools.commons.helpers.SimpleContactsHelper +import com.simplemobiletools.commons.helpers.SMT_PRIVATE import com.simplemobiletools.commons.models.RadioItem -import com.simplemobiletools.commons.models.SimpleContact +import com.simplemobiletools.commons.models.contacts.Contact import com.simplemobiletools.dialer.R import com.simplemobiletools.dialer.activities.SimpleActivity import com.simplemobiletools.dialer.adapters.ContactsAdapter @@ -23,7 +24,7 @@ import kotlinx.android.synthetic.main.fragment_letters_layout.view.* import java.util.* class FavoritesFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerFragment(context, attributeSet), RefreshItemsListener { - private var allContacts = ArrayList() + private var allContacts = ArrayList() override fun setupFragment() { val placeholderResId = if (context.hasPermission(PERMISSION_READ_CONTACTS)) { @@ -48,18 +49,25 @@ class FavoritesFragment(context: Context, attributeSet: AttributeSet) : MyViewPa } override fun refreshItems(callback: (() -> Unit)?) { - val privateCursor = context?.getMyContactsCursor(true, true) - SimpleContactsHelper(context).getAvailableContacts(true) { contacts -> + ContactsHelper(context).getContacts(showOnlyContactsWithNumbers = true) { contacts -> allContacts = contacts - val privateContacts = MyContactsContentProvider.getSimpleContacts(context, privateCursor) - if (privateContacts.isNotEmpty()) { - allContacts.addAll(privateContacts) - allContacts.sort() + if (SMT_PRIVATE !in context.baseConfig.ignoredContactSources) { + val privateCursor = context?.getMyContactsCursor(true, true) + val privateContacts = MyContactsContentProvider.getContacts(context, privateCursor).map { + it.copy(starred = 1) + } + if (privateContacts.isNotEmpty()) { + allContacts.addAll(privateContacts) + allContacts.sort() + } } + val favorites = contacts.filter { it.starred == 1 } as ArrayList - if (activity!!.config.isCustomOrderSelected) { - allContacts = sortByCustomOrder(allContacts) + allContacts = if (activity!!.config.isCustomOrderSelected) { + sortByCustomOrder(favorites) + } else { + favorites } activity?.runOnUiThread { @@ -69,7 +77,7 @@ class FavoritesFragment(context: Context, attributeSet: AttributeSet) : MyViewPa } } - private fun gotContacts(contacts: ArrayList) { + private fun gotContacts(contacts: ArrayList) { setupLetterFastscroller(contacts) if (contacts.isEmpty()) { fragment_placeholder.beVisible() @@ -89,11 +97,11 @@ class FavoritesFragment(context: Context, attributeSet: AttributeSet) : MyViewPa enableDrag = true, ) { if (context.config.showCallConfirmation) { - CallConfirmationDialog(activity as SimpleActivity, (it as SimpleContact).name) { + CallConfirmationDialog(activity as SimpleActivity, (it as Contact).getNameToDisplay()) { callContact(it) } } else { - callContact(it as SimpleContact) + callContact(it as Contact) } }.apply { fragment_list.adapter = this @@ -117,7 +125,7 @@ class FavoritesFragment(context: Context, attributeSet: AttributeSet) : MyViewPa } } - private fun sortByCustomOrder(favorites: List): ArrayList { + private fun sortByCustomOrder(favorites: List): ArrayList { val favoritesOrder = activity!!.config.favoritesContactsOrder if (favoritesOrder.isEmpty()) { @@ -131,7 +139,7 @@ class FavoritesFragment(context: Context, attributeSet: AttributeSet) : MyViewPa return ArrayList(sorted) } - private fun saveCustomOrderToPrefs(items: ArrayList) { + private fun saveCustomOrderToPrefs(items: ArrayList) { activity?.apply { val orderIds = items.map { it.contactId } val orderGsonString = Gson().toJson(orderIds) @@ -139,9 +147,11 @@ class FavoritesFragment(context: Context, attributeSet: AttributeSet) : MyViewPa } } - private fun callContact(simpleContact: SimpleContact) { + private fun callContact(simpleContact: Contact) { val phoneNumbers = simpleContact.phoneNumbers - if (phoneNumbers.size <= 1) { + if (phoneNumbers.isEmpty()) { + return + } else if (phoneNumbers.size <= 1) { activity?.launchCallIntent(phoneNumbers.first().normalizedNumber) } else { val primaryNumber = simpleContact.phoneNumbers.find { it.isPrimary } @@ -161,10 +171,10 @@ class FavoritesFragment(context: Context, attributeSet: AttributeSet) : MyViewPa } } - private fun setupLetterFastscroller(contacts: ArrayList) { + private fun setupLetterFastscroller(contacts: ArrayList) { letter_fastscroller.setupWithRecyclerView(fragment_list, { position -> try { - val name = contacts[position].name + val name = contacts[position].getNameToDisplay() val character = if (name.isNotEmpty()) name.substring(0, 1) else "" FastScrollItemIndicator.Text(character.toUpperCase(Locale.getDefault()).normalizeString()) } catch (e: Exception) { @@ -184,7 +194,7 @@ class FavoritesFragment(context: Context, attributeSet: AttributeSet) : MyViewPa it.name.contains(text, true) || it.doesContainPhoneNumber(text) }.sortedByDescending { it.name.startsWith(text, true) - }.toMutableList() as ArrayList + }.toMutableList() as ArrayList fragment_placeholder.beVisibleIf(contacts.isEmpty()) (fragment_list.adapter as? ContactsAdapter)?.updateItems(contacts, text) diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/fragments/MyViewPagerFragment.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/fragments/MyViewPagerFragment.kt index d18a0a0f..0a6f1e17 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/fragments/MyViewPagerFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/fragments/MyViewPagerFragment.kt @@ -6,7 +6,11 @@ import android.widget.RelativeLayout import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter import com.simplemobiletools.commons.extensions.getProperPrimaryColor import com.simplemobiletools.commons.extensions.getProperTextColor +import com.simplemobiletools.commons.helpers.SORT_BY_FIRST_NAME +import com.simplemobiletools.commons.helpers.SORT_BY_SURNAME +import com.simplemobiletools.dialer.activities.MainActivity import com.simplemobiletools.dialer.activities.SimpleActivity +import com.simplemobiletools.dialer.adapters.ContactsAdapter import com.simplemobiletools.dialer.extensions.config import com.simplemobiletools.dialer.helpers.Config import kotlinx.android.synthetic.main.fragment_letters_layout.view.* @@ -27,6 +31,15 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet) } } + fun startNameWithSurnameChanged(startNameWithSurname: Boolean) { + if (this !is RecentsFragment) { + (fragment_list.adapter as? ContactsAdapter)?.apply { + config.sorting = if (startNameWithSurname) SORT_BY_SURNAME else SORT_BY_FIRST_NAME + (this@MyViewPagerFragment.activity!! as MainActivity).refreshFragments() + } + } + } + fun finishActMode() { (fragment_list?.adapter as? MyRecyclerViewAdapter)?.finishActMode() (recents_list?.adapter as? MyRecyclerViewAdapter)?.finishActMode() diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/fragments/RecentsFragment.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/fragments/RecentsFragment.kt index e7c59c32..0a995e11 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/fragments/RecentsFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/fragments/RecentsFragment.kt @@ -4,9 +4,10 @@ import android.content.Context import android.util.AttributeSet import com.simplemobiletools.commons.dialogs.CallConfirmationDialog import com.simplemobiletools.commons.extensions.* +import com.simplemobiletools.commons.helpers.ContactsHelper import com.simplemobiletools.commons.helpers.MyContactsContentProvider import com.simplemobiletools.commons.helpers.PERMISSION_READ_CALL_LOG -import com.simplemobiletools.commons.helpers.SimpleContactsHelper +import com.simplemobiletools.commons.helpers.SMT_PRIVATE import com.simplemobiletools.dialer.R import com.simplemobiletools.dialer.activities.SimpleActivity import com.simplemobiletools.dialer.adapters.RecentCallsAdapter @@ -49,30 +50,38 @@ class RecentsFragment(context: Context, attributeSet: AttributeSet) : MyViewPage val privateCursor = context?.getMyContactsCursor(false, true) val groupSubsequentCalls = context?.config?.groupSubsequentCalls ?: false RecentsHelper(context).getRecentCalls(groupSubsequentCalls) { recents -> - SimpleContactsHelper(context).getAvailableContacts(false) { contacts -> - val privateContacts = MyContactsContentProvider.getSimpleContacts(context, privateCursor) + ContactsHelper(context).getContacts(showOnlyContactsWithNumbers = true) { contacts -> + val privateContacts = MyContactsContentProvider.getContacts(context, privateCursor) recents.filter { it.phoneNumber == it.name }.forEach { recent -> var wasNameFilled = false if (privateContacts.isNotEmpty()) { val privateContact = privateContacts.firstOrNull { it.doesContainPhoneNumber(recent.phoneNumber) } if (privateContact != null) { - recent.name = privateContact.name + recent.name = privateContact.getNameToDisplay() wasNameFilled = true } } if (!wasNameFilled) { - val contact = contacts.firstOrNull { it.phoneNumbers.first().normalizedNumber == recent.phoneNumber } + val contact = contacts.filter { it.phoneNumbers.isNotEmpty() }.firstOrNull { it.phoneNumbers.first().normalizedNumber == recent.phoneNumber } if (contact != null) { - recent.name = contact.name + recent.name = contact.getNameToDisplay() } } } - allRecentCalls = recents + + // hide private contacts from recent calls + if (SMT_PRIVATE in context.baseConfig.ignoredContactSources) { + allRecentCalls = recents.filterNot { recent -> + val privateNumbers = privateContacts.flatMap { it.phoneNumbers }.map { it.value } + recent.phoneNumber in privateNumbers + } as ArrayList + } + activity?.runOnUiThread { - gotRecents(recents) + gotRecents(allRecentCalls) } } } diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/helpers/CallContactHelper.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/helpers/CallContactHelper.kt index 9d0b4cb5..fbf1c3ea 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/helpers/CallContactHelper.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/helpers/CallContactHelper.kt @@ -5,8 +5,8 @@ import android.net.Uri import android.telecom.Call import com.simplemobiletools.commons.extensions.getMyContactsCursor import com.simplemobiletools.commons.extensions.getPhoneNumberTypeText +import com.simplemobiletools.commons.helpers.ContactsHelper import com.simplemobiletools.commons.helpers.MyContactsContentProvider -import com.simplemobiletools.commons.helpers.SimpleContactsHelper import com.simplemobiletools.commons.helpers.ensureBackgroundThread import com.simplemobiletools.dialer.R import com.simplemobiletools.dialer.extensions.isConference @@ -35,8 +35,8 @@ fun getCallContact(context: Context, call: Call?, callback: (CallContact) -> Uni val uri = Uri.decode(handle) if (uri.startsWith("tel:")) { val number = uri.substringAfter("tel:") - SimpleContactsHelper(context).getAvailableContacts(false) { contacts -> - val privateContacts = MyContactsContentProvider.getSimpleContacts(context, privateCursor) + ContactsHelper(context).getContacts(showOnlyContactsWithNumbers = true) { contacts -> + val privateContacts = MyContactsContentProvider.getContacts(context, privateCursor) if (privateContacts.isNotEmpty()) { contacts.addAll(privateContacts) } @@ -53,7 +53,7 @@ fun getCallContact(context: Context, call: Call?, callback: (CallContact) -> Uni callContact.number = number val contact = contacts.firstOrNull { it.doesHavePhoneNumber(number) } if (contact != null) { - callContact.name = contact.name + callContact.name = contact.getNameToDisplay() callContact.photoUri = contact.photoUri if (contact.phoneNumbers.size > 1) { diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/helpers/CallManager.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/helpers/CallManager.kt index 7840047f..641e9cf1 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/helpers/CallManager.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/helpers/CallManager.kt @@ -1,13 +1,11 @@ package com.simplemobiletools.dialer.helpers import android.annotation.SuppressLint -import android.content.Context import android.os.Handler import android.telecom.Call import android.telecom.CallAudioState import android.telecom.InCallService import android.telecom.VideoProfile -import com.simplemobiletools.dialer.extensions.config import com.simplemobiletools.dialer.extensions.getStateCompat import com.simplemobiletools.dialer.extensions.hasCapability import com.simplemobiletools.dialer.extensions.isConference @@ -156,9 +154,10 @@ class CallManager { fun reject() { if (call != null) { - if (getState() == Call.STATE_RINGING) { + val state = getState() + if (state == Call.STATE_RINGING) { call!!.reject(false, null) - } else { + } else if (state != Call.STATE_DISCONNECTED && state != Call.STATE_DISCONNECTING) { call!!.disconnect() } } @@ -201,15 +200,11 @@ class CallManager { fun getState() = getPrimaryCall()?.getStateCompat() - fun keypad(context: Context, char: Char) { - call?.playDtmfTone(char) - if (context.config.dialpadBeeps) { + fun keypad(char: Char) { + call?.playDtmfTone(char) Handler().postDelayed({ call?.stopDtmfTone() }, DIALPAD_TONE_LENGTH_MS) - } else { - call?.stopDtmfTone() - } } } } diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/helpers/Config.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/helpers/Config.kt index 351fbd4d..3b84c086 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/helpers/Config.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/helpers/Config.kt @@ -13,11 +13,6 @@ class Config(context: Context) : BaseConfig(context) { companion object { fun newInstance(context: Context) = Config(context) } - - var speedDial: String - get() = prefs.getString(SPEED_DIAL, "")!! - set(speedDial) = prefs.edit().putString(SPEED_DIAL, speedDial).apply() - fun getSpeedDialValues(): ArrayList { val speedDialType = object : TypeToken>() {}.type val speedDialValues = Gson().fromJson>(speedDial, speedDialType) ?: ArrayList(1) @@ -54,6 +49,9 @@ class Config(context: Context) : BaseConfig(context) { fun removeCustomSIM(number: String) { prefs.edit().remove(REMEMBER_SIM_PREFIX + number).apply() } + var showTabs: Int + get() = prefs.getInt(SHOW_TABS, ALL_TABS_MASK) + set(showTabs) = prefs.edit().putInt(SHOW_TABS, showTabs).apply() var groupSubsequentCalls: Boolean get() = prefs.getBoolean(GROUP_SUBSEQUENT_CALLS, true) @@ -71,18 +69,6 @@ class Config(context: Context) : BaseConfig(context) { get() = prefs.getBoolean(DISABLE_SWIPE_TO_ANSWER, false) set(disableSwipeToAnswer) = prefs.edit().putBoolean(DISABLE_SWIPE_TO_ANSWER, disableSwipeToAnswer).apply() - var showTabs: Int - get() = prefs.getInt(SHOW_TABS, ALL_TABS_MASK) - set(showTabs) = prefs.edit().putInt(SHOW_TABS, showTabs).apply() - - var favoritesContactsOrder: String - get() = prefs.getString(FAVORITES_CONTACTS_ORDER, "")!! - set(order) = prefs.edit().putString(FAVORITES_CONTACTS_ORDER, order).apply() - - var isCustomOrderSelected: Boolean - get() = prefs.getBoolean(FAVORITES_CUSTOM_ORDER_SELECTED, false) - set(selected) = prefs.edit().putBoolean(FAVORITES_CUSTOM_ORDER_SELECTED, selected).apply() - var wasOverlaySnackbarConfirmed: Boolean get() = prefs.getBoolean(WAS_OVERLAY_SNACKBAR_CONFIRMED, false) set(wasOverlaySnackbarConfirmed) = prefs.edit().putBoolean(WAS_OVERLAY_SNACKBAR_CONFIRMED, wasOverlaySnackbarConfirmed).apply() @@ -91,6 +77,10 @@ class Config(context: Context) : BaseConfig(context) { get() = prefs.getBoolean(DIALPAD_VIBRATION, true) set(dialpadVibration) = prefs.edit().putBoolean(DIALPAD_VIBRATION, dialpadVibration).apply() + var hideDialpadNumbers: Boolean + get() = prefs.getBoolean(HIDE_DIALPAD_NUMBERS, false) + set(hideDialpadNumbers) = prefs.edit().putBoolean(HIDE_DIALPAD_NUMBERS, hideDialpadNumbers).apply() + var dialpadBeeps: Boolean get() = prefs.getBoolean(DIALPAD_BEEPS, true) set(dialpadBeeps) = prefs.edit().putBoolean(DIALPAD_BEEPS, dialpadBeeps).apply() diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/helpers/Constants.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/helpers/Constants.kt index 7c970ed9..a1329979 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/helpers/Constants.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/helpers/Constants.kt @@ -17,6 +17,7 @@ const val FAVORITES_CUSTOM_ORDER_SELECTED = "favorites_custom_order_selected" const val WAS_OVERLAY_SNACKBAR_CONFIRMED = "was_overlay_snackbar_confirmed" const val DIALPAD_VIBRATION = "dialpad_vibration" const val DIALPAD_BEEPS = "dialpad_beeps" +const val HIDE_DIALPAD_NUMBERS = "hide_dialpad_numbers" const val ALWAYS_SHOW_FULLSCREEN = "always_show_fullscreen" const val ALL_TABS_MASK = TAB_CONTACTS or TAB_FAVORITES or TAB_CALL_HISTORY diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/helpers/RecentsHelper.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/helpers/RecentsHelper.kt index f6e2a347..1dd7d8ed 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/helpers/RecentsHelper.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/helpers/RecentsHelper.kt @@ -5,7 +5,7 @@ import android.content.Context import android.provider.CallLog.Calls import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.helpers.* -import com.simplemobiletools.commons.models.SimpleContact +import com.simplemobiletools.commons.models.contacts.Contact import com.simplemobiletools.dialer.R import com.simplemobiletools.dialer.activities.SimpleActivity import com.simplemobiletools.dialer.extensions.getAvailableSIMCardLabels @@ -24,8 +24,8 @@ class RecentsHelper(private val context: Context) { return@ensureBackgroundThread } - SimpleContactsHelper(context).getAvailableContacts(false) { contacts -> - val privateContacts = MyContactsContentProvider.getSimpleContacts(context, privateCursor) + ContactsHelper(context).getContacts(showOnlyContactsWithNumbers = true) { contacts -> + val privateContacts = MyContactsContentProvider.getContacts(context, privateCursor) if (privateContacts.isNotEmpty()) { contacts.addAll(privateContacts) } @@ -36,7 +36,8 @@ class RecentsHelper(private val context: Context) { } @SuppressLint("NewApi") - private fun getRecents(contacts: ArrayList, groupSubsequentCalls: Boolean, callback: (ArrayList) -> Unit) { + private fun getRecents(contacts: ArrayList, groupSubsequentCalls: Boolean, callback: (ArrayList) -> Unit) { + var recentCalls = ArrayList() var previousRecentCallFrom = "" var previousStartTS = 0 @@ -96,11 +97,11 @@ class RecentsHelper(private val context: Context) { } else { val normalizedNumber = number.normalizePhoneNumber() if (normalizedNumber!!.length >= COMPARABLE_PHONE_NUMBER_LENGTH) { - name = contacts.firstOrNull { contact -> + name = contacts.filter { it.phoneNumbers.isNotEmpty() }.firstOrNull { contact -> val curNumber = contact.phoneNumbers.first().normalizedNumber if (curNumber.length >= COMPARABLE_PHONE_NUMBER_LENGTH) { if (curNumber.substring(curNumber.length - COMPARABLE_PHONE_NUMBER_LENGTH) == normalizedNumber.substring(normalizedNumber.length - COMPARABLE_PHONE_NUMBER_LENGTH)) { - contactsNumbersMap[number] = contact.name + contactsNumbersMap[number] = contact.getNameToDisplay() return@firstOrNull true } } diff --git a/app/src/main/res/layout/activity_conference.xml b/app/src/main/res/layout/activity_conference.xml index f07b4385..d8e1f10c 100644 --- a/app/src/main/res/layout/activity_conference.xml +++ b/app/src/main/res/layout/activity_conference.xml @@ -6,29 +6,22 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - - - - + android:layout_height="?attr/actionBarSize" + android:background="@color/color_primary" + app:title="@string/conference" + app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" /> + android:layout_marginTop="?attr/actionBarSize"> - - - - - + android:layout_height="?attr/actionBarSize" + android:background="@color/color_primary" + app:menu="@menu/menu_dialpad" + app:title="@string/dialpad" + app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" /> + android:layout_marginTop="?attr/actionBarSize" + android:focusableInTouchMode="true"> - - - - - + android:layout_height="wrap_content" /> + android:layout_marginTop="?attr/actionBarSize" + android:fillViewport="true" + android:scrollbars="none"> - + android:layout_height="?attr/actionBarSize" + android:background="@color/color_primary" + app:title="@string/manage_speed_dial" + app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" /> - - - - - + android:layout_marginTop="?attr/actionBarSize" + android:fillViewport="true" + android:scrollbars="none"> - + diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml index 4c3df964..de1c60eb 100644 --- a/app/src/main/res/layout/activity_settings.xml +++ b/app/src/main/res/layout/activity_settings.xml @@ -6,29 +6,21 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - - - - + android:layout_height="?attr/actionBarSize" + android:background="@color/color_primary" + app:title="@string/settings" + app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" /> + android:scrollbars="none"> - + android:layout_height="wrap_content"> - + android:text="@string/customize_colors" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> - + - - + - + android:layout_height="wrap_content"> - + + + + + + + android:text="@string/use_english_language" /> - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + android:layout_below="@+id/settings_font_size_label" + tools:text="@string/medium" /> - + - + - + android:text="@string/start_name_with_surname" /> - + - + - - - + android:text="@string/hide_dialpad_numbers" /> - + - + - + android:text="@string/dialpad_vibrations" /> - + - + - + android:text="@string/dialpad_beeps" /> - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + android:layout_height="wrap_content"> - + + + + + + + + + android:layout_below="@+id/settings_default_tab_label" + tools:text="@string/last_used_tab" /> - + - + - + android:text="@string/open_dialpad_by_default" /> - + - - - - - - - - - - + - + android:layout_height="wrap_content"> - + android:text="@string/group_subsequent_calls" /> - + - + - + android:text="@string/show_call_confirmation_dialog" /> - + - + - + android:text="@string/disable_proximity_sensor" /> - + - + - + android:text="@string/disable_swipe_to_answer" /> - + - + - + android:text="@string/show_incoming_calls_full_screen" /> - - - - + diff --git a/app/src/main/res/layout/dialog_change_sorting.xml b/app/src/main/res/layout/dialog_change_sorting.xml index c1e1d493..2a073839 100644 --- a/app/src/main/res/layout/dialog_change_sorting.xml +++ b/app/src/main/res/layout/dialog_change_sorting.xml @@ -19,23 +19,54 @@ android:layout_height="wrap_content" android:layout_marginBottom="@dimen/medium_margin"> + + + + + + + diff --git a/app/src/main/res/layout/dialog_filter_contact_sources.xml b/app/src/main/res/layout/dialog_filter_contact_sources.xml new file mode 100644 index 00000000..19b4890e --- /dev/null +++ b/app/src/main/res/layout/dialog_filter_contact_sources.xml @@ -0,0 +1,10 @@ + + diff --git a/app/src/main/res/layout/dialpad.xml b/app/src/main/res/layout/dialpad.xml index 8db0614f..45a9e70b 100644 --- a/app/src/main/res/layout/dialpad.xml +++ b/app/src/main/res/layout/dialpad.xml @@ -8,15 +8,16 @@ android:layout_alignParentBottom="true" android:focusableInTouchMode="true" android:layoutDirection="ltr" + android:paddingStart="@dimen/medium_margin" android:paddingTop="@dimen/medium_margin" + android:paddingEnd="@dimen/medium_margin" tools:ignore="HardcodedText"> + + android:layout_below="@+id/dialpad_0" + android:layout_marginBottom="@dimen/small_margin" + android:text="+" /> + + + + + + + diff --git a/app/src/main/res/layout/item_filter_contact_source.xml b/app/src/main/res/layout/item_filter_contact_source.xml new file mode 100644 index 00000000..d4218d60 --- /dev/null +++ b/app/src/main/res/layout/item_filter_contact_source.xml @@ -0,0 +1,21 @@ + + + + + + diff --git a/app/src/main/res/layout/item_recent_call.xml b/app/src/main/res/layout/item_recent_call.xml index 3bfae1d6..aa4bee34 100644 --- a/app/src/main/res/layout/item_recent_call.xml +++ b/app/src/main/res/layout/item_recent_call.xml @@ -17,7 +17,7 @@ android:layout_width="@dimen/normal_icon_size" android:layout_height="@dimen/normal_icon_size" android:layout_centerVertical="true" - android:layout_marginStart="@dimen/small_margin" + android:layout_marginStart="@dimen/normal_margin" android:layout_marginEnd="@dimen/small_margin" android:padding="@dimen/small_margin" android:src="@drawable/ic_person_vector" @@ -34,6 +34,8 @@ android:ellipsize="end" android:maxLines="1" android:textSize="@dimen/bigger_text_size" + android:textDirection="locale" + android:textAlignment="viewStart" app:layout_constraintBottom_toTopOf="@id/item_recents_date_time" app:layout_constraintEnd_toStartOf="@+id/overflow_menu_icon" app:layout_constraintStart_toEndOf="@+id/item_recents_image" @@ -81,7 +83,6 @@ android:src="@drawable/ic_incoming_call_vector" app:layout_constraintBottom_toBottomOf="@+id/item_recents_date_time" app:layout_constraintDimensionRatio="1:1" - app:layout_constraintEnd_toStartOf="@id/item_recents_date_time" app:layout_constraintStart_toEndOf="@+id/item_recents_sim_image" app:layout_constraintTop_toTopOf="@+id/item_recents_date_time" /> diff --git a/app/src/main/res/menu/cab_contacts.xml b/app/src/main/res/menu/cab_contacts.xml index 7b8e9dd1..b7b31717 100644 --- a/app/src/main/res/menu/cab_contacts.xml +++ b/app/src/main/res/menu/cab_contacts.xml @@ -2,7 +2,7 @@ + tools:ignore="AppCompatResource,AlwaysShowAction"> + tools:ignore="AppCompatResource,AlwaysShowAction"> - + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + tools:ignore="AlwaysShowAction,AppCompatResource"> + - + app:showAsAction="always" /> + diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index d4a222b8..67555c98 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -1,80 +1,82 @@ - Simple Dialer - Dialer - Please make this app the default Phone app - Please allow displaying over other apps for reliable behaviour + الهاتف المبسط + الهاتف + الرجاء جعل هذا التطبيق هو تطبيق الهاتف الافتراضي + الرجاء السماح بالعرض فوق التطبيقات الأخرى للحصول على سلوك موثوق - Could not access your contacts + تعذر الوصول إلى جهات الاتصال - No previous calls have been found - Could not access the call history - Request access - Are you sure you want to remove the selected items from the Call History\? - Are you sure you want to remove everything from the Call History\? - Show grouped calls - Clear call history - Show call details + لاتوجد مكالمات سابقة + تعذر الوصول إلى سجل المكالمات + طلب الوصول + هل أنت متأكد من إزالة العناصر المحددة من سجل المكالمات؟ + هل أنت متأكد من إزالة كامل سجل المكالمات؟ + إظهار المكالمات المجمعة + محو سجل المكالمات + إظهار تفاصيل المكالمة - Dialpad - Asterisk - Hashtag - Call number - Enable beeps on dialpad button clicks - Enable vibrations on dialpad button clicks + لوحة الاتصال + نجمة + وسم + رقم الاتصال + تمكين الصفير عند نقر أزرار لوحة الاتصال + تمكين الاهتزازات عند نقر أزرار لوحة الاتصال - Dialer - Accept - Accept call - Decline - Decline call - Unknown Caller - Is Calling… - Dialing… - Call Ended - Call Ending - Ongoing Call - Select a SIM for this call - Always use this SIM for this number - Unset default SIM - Calls - Turn microphone on - Turn microphone off - Turn speaker on - Turn speaker off - Show dialpad - Hide dialpad - End call - Hold call - Resume call - On Hold - Swap calls - Merge calls - Split call - Add call - Manage conference call - Conference - Speaker - Earpiece - Bluetooth - Wired Headset - Wired or Earpiece - Choose audio route + الهاتف + قبول + قبول المكالمة + رفض + رفض المكالمة + متصل غير معروف + يتصل… + اتصال… + انتهت المكالمة + إنهاء المكالمة + مكالمة مستمرة + اختر شريحة لهذه المكالمة + استخدم هذه الشريحة دائما لهذا الرقم + إلغاء تعيين بطاقة SIM الافتراضية + المكالمات + تشغيل الميكروفون + إيقاف تشغيل الميكروفون + تشغيل مكبر الصوت + إيقاف تشغيل مكبر الصوت + إظهار لوحة الاتصال + إخفاء لوحة الاتصال + إنهاء المكالمة + تعليق المكالمة + استئناف المكالمة + قيد الانتظار + مبادلة المكالمات + دمج المكالمات + تقسيم المكالمة + إضافة مكالمة + إدارة المكالمة الجماعية + جماعة + مكبر الصوت + سماعة الأذن + بلوتوث + سماعة الرأس السلكية + سلكي أو سماعة أذن + اختر مسار الصوت + الرقم الذي تتصل به محظور - Speed dial - Manage speed dial - Click on a number to assign a contact to it. You can then quickly call the given contact by long pressing the given number at the dialer. + اتصال سريع + إدارة الاتصال السريع + انقر فوق رقم لتعيين جهة اتصال له. يمكنك بعد ذلك الاتصال بجهة الاتصال المحددة بسرعة عن طريق الضغط لفترة طويلة على الرقم المحدد في الهاتف. - Group subsequent calls with the same number at the call log - Open the dialpad by default when the app opens - Disable proximity sensor during calls - Replace swiping at responding to incoming calls with clicking - Always display incoming calls on full screen + تجميع المكالمات اللاحقة مع نفس الرقم في سجل المكالمات + افتح لوحة الاتصال افتراضيًا عند فتح التطبيق + تعطيل مستشعر القرب أثناء المكالمات + استبدل التمرير عند الرد على المكالمات الواردة بالنقر + عرض المكالمات الواردة دائما في وضع ملء الشاشة + اخفي ارقام لوحت المفاتيح - I hear incoming calls, but the screen doesn\'t turn on. What can I do? - Such issues can have many device and system specific reasons, hard to say in general. You should look around in your device settings and make sure that the app is allowed to pop up when in background and allow displaying over other apps. + أسمع مكالمات واردة، ولكن الشاشة لا تعمل. ماذا أفعل؟ + يمكن أن يكون لمثل هذه المشكلات العديد من الأسباب الخاصة بالجهاز والنظام ، والتي يصعب تحديدها بشكل عام. يجب أن تنظر حولك في إعدادات جهازك وتأكد من السماح للتطبيق بالظهور عندما يكون في الخلفية والسماح بالعرض فوق التطبيقات الأخرى. - + \ No newline at end of file diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml index d4a222b8..85331b8b 100644 --- a/app/src/main/res/values-az/strings.xml +++ b/app/src/main/res/values-az/strings.xml @@ -60,6 +60,7 @@ Wired Headset Wired or Earpiece Choose audio route + The number you are calling is blocked Speed dial Manage speed dial @@ -70,6 +71,8 @@ Disable proximity sensor during calls Replace swiping at responding to incoming calls with clicking Always display incoming calls on full screen + Hide dialpad numbers + I hear incoming calls, but the screen doesn\'t turn on. What can I do? Such issues can have many device and system specific reasons, hard to say in general. You should look around in your device settings and make sure that the app is allowed to pop up when in background and allow displaying over other apps. diff --git a/app/src/main/res/values-be/strings.xml b/app/src/main/res/values-be/strings.xml index 913e3bca..df099519 100644 --- a/app/src/main/res/values-be/strings.xml +++ b/app/src/main/res/values-be/strings.xml @@ -60,6 +60,7 @@ Wired Headset Wired or Earpiece Choose audio route + The number you are calling is blocked Хуткі набор Кіраванне хуткім наборам @@ -70,6 +71,8 @@ Адключаць датчык набліжэння падчас выклікаў Выкарыстоўваць націсканне замест перацягвання пры адказе на ўваходныя выклікі Заўсёды паказваць уваходныя выклікі ў поўнаэкранным рэжыме + Hide dialpad numbers + I hear incoming calls, but the screen doesn\'t turn on. What can I do? Such issues can have many device and system specific reasons, hard to say in general. You should look around in your device settings and make sure that the app is allowed to pop up when in background and allow displaying over other apps. diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index e4839346..1e403163 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -60,6 +60,7 @@ Wired Headset Wired or Earpiece Choose audio route + The number you are calling is blocked Бързо набиране Управление на бързото набиране @@ -70,6 +71,8 @@ Изключване на сензора за близост по време на обаждания Смяна на плъзгането с докосване при отговаряне на обаждания Always display incoming calls on full screen + Hide dialpad numbers + I hear incoming calls, but the screen doesn\'t turn on. What can I do? Such issues can have many device and system specific reasons, hard to say in general. You should look around in your device settings and make sure that the app is allowed to pop up when in background and allow displaying over other apps. diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index 82f34dbc..64e83b55 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -60,6 +60,7 @@ Auriculars amb cable Amb cable o auricular Trieu la sortida d\'àudio + El número al qual esteu trucant està bloquejat Marcatge ràpid Gestiona el marcatge ràpid @@ -70,6 +71,7 @@ Desactiva el sensor de proximitat durant les trucades Substitueix el lliscament en respondre a les trucades entrants per fer clic Mostra sempre les trucades entrants a pantalla completa + Oculta els números del teclat numèric Sento trucades entrants, però la pantalla no s\'encén. Què puc fer\? Aquests problemes poden tenir moltes raons específiques del dispositiu i del sistema, difícils de dir en general. Hauríeu de mirar per la configuració del dispositiu i assegurar-vos que l\'aplicació pugui aparèixer en segon pla i permetre que es mostri sobre altres aplicacions. diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 7349c267..07e55f34 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -60,6 +60,7 @@ Náhlavní souprava s kabelem Kabel nebo sluchátka Vybrat směrování zvuku + Číslo, které voláte, je blokované Rychlé vytáčení Spravovat rychlá vytáčení @@ -70,6 +71,7 @@ Vypnout senzor přiblížení během hovoru Nahradit přejetí prstem při odpovídání na příchozí hovory za klepnutí Vždy zobrazovat příchozí hovory na celou obrazovku + Skrýt čísla číselníku Slyším příchozí hovor, ale obrazovka se nezapne. Co mohu dělat\? Takové problémy mohou mít mnoho důvodů specifických pro zařízení a systém, takže je těžké říci něco obecně. Měli byste zkontrolovat nastavení zařízení a ujistit se, že se aplikace může otevřít, když běží na pozadí, a umožnit zobrazení přes jiné aplikace. diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 7edceaac..bfeee422 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -60,6 +60,7 @@ Wired Headset Wired or Earpiece Choose audio route + The number you are calling is blocked Hurtigopkald Administrér hurtigopkald @@ -70,6 +71,8 @@ Deaktivér nærhedssensor under opkald Erstat swipe ved besvarelse af indgående opkald med at klikke på Always display incoming calls on full screen + Hide dialpad numbers + I hear incoming calls, but the screen doesn\'t turn on. What can I do? Such issues can have many device and system specific reasons, hard to say in general. You should look around in your device settings and make sure that the app is allowed to pop up when in background and allow displaying over other apps. diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 25490fef..c3844611 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -10,9 +10,9 @@ Anrufliste ist leer Kein Zugriff auf Anrufliste Zugriff anfordern - Ausgewählte Anrufe definitiv aus der Anrufliste löschen\? - Sicher, dass die gesamte Anrufliste gelöscht werden soll\? - Gruppierte Anrufe zeigen + Sollen wirklich die ausgewählten Einträge aus der Anrufliste gelöscht werden\? + Soll wirklich die gesamte Anrufliste gelöscht werden\? + Gruppierte Anrufe anzeigen Anrufliste löschen Anrufdetails anzeigen @@ -35,7 +35,7 @@ Anruf beenden Aktueller Anruf Wähle die SIM-Karte für diesen Anruf aus - Für diese Nummer immer diese SIM-Karte benutzen + Für diese Nummer immer diese SIM-Karte verwenden Als Standard-SIM abwählen Anrufe Mikrofon einschalten @@ -59,7 +59,8 @@ Bluetooth Kabelgebundenes Headset Kabelgebunden oder über Kopfhörer - Audio-Ausgang wählen + Audioausgang wählen + Die angerufene Nummer ist gesperrt Kurzwahl Kurzwahlnummern verwalten @@ -70,6 +71,7 @@ Näherungssensor bei Anrufen deaktivieren Anrufe durch Klicken statt durch Streichen annehmen Eingehende Anrufe immer im Vollbildmodus anzeigen + Wähltastenfeld-Nummern ausblenden Ich höre eingehende Anrufe, aber der Bildschirm schaltet sich nicht ein. Was kann ich tun\? Eine allgemeine Antwort auf die Frage ist schwer, denn solche Probleme können viele geräte- und systemspezifische Gründe haben. Du solltest dich in den Einstellungen des Geräts umsehen und sicherstellen, dass die App im Hintergrund angezeigt werden darf und die Einblendung über anderen Apps erlaubt ist. diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index cb3663d7..85d3e1ac 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -60,6 +60,7 @@ Ενσύρματα κεφαλής Ενσύρματα ή ακουστικά Επιλογή διαδρομής ήχου + Ο αριθμός που καλείτε είναι αποκλεισμένος Ταχεία κλήση Διαχείριση ταχείας κλήσης @@ -70,6 +71,7 @@ Απενεργοποίηση του αισθητήρα εγγύτητας κατά τη διάρκεια κλήσεων Αντικατάσταση Σάρωσης με Κλικ στην απάντηση εισερχόμενων κλήσεων Να εμφανίζονται πάντα οι εισερχόμενες κλήσεις σε πλήρη οθόνη + Απόκρυψη αριθμών πληκτρολογίου Ακούω εισερχόμενες κλήσεις, αλλά η οθόνη δεν ανάβει. Τι μπορώ να κάνω; Τέτοια θέματα μπορεί να έχουν πολλούς λόγους που σχετίζονται με τη συσκευή και το σύστημα, και είναι δύσκολο να ειπωθούν γενικά. Θα πρέπει να ψάξετε στις ρυθμίσεις της συσκευής σας και να βεβαιωθείτε ότι η εφαρμογή επιτρέπεται να εμφανίζεται όταν βρίσκεται στο παρασκήνιο και να επιτρέπει την εμφάνισή της πάνω από άλλες εφαρμογές. @@ -77,4 +79,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - + \ No newline at end of file diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml index 2b75aade..7a673dc6 100644 --- a/app/src/main/res/values-eo/strings.xml +++ b/app/src/main/res/values-eo/strings.xml @@ -60,6 +60,7 @@ Wired Headset Wired or Earpiece Choose audio route + The number you are calling is blocked Speed dial Manage speed dial @@ -70,6 +71,8 @@ Disable proximity sensor during calls Replace swiping at responding to incoming calls with clicking Always display incoming calls on full screen + Hide dialpad numbers + I hear incoming calls, but the screen doesn\'t turn on. What can I do? Such issues can have many device and system specific reasons, hard to say in general. You should look around in your device settings and make sure that the app is allowed to pop up when in background and allow displaying over other apps. diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 02a21835..cb9a4c5e 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -60,6 +60,7 @@ Auricular con cable Auricular inalámbrico Elija la salida del audio + El número al que llamas está bloqueado Marcado rápido Administrar marcado rápido @@ -70,6 +71,7 @@ Deshabilitar el sensor de proximidad durante las llamadas Reemplazar deslizar para responder llamadas entrantes a pulsar Siempre mostrar llamadas entrantes en pantalla completa + Ocultar los números del teclado Escucho las llamadas entrantes, pero la pantalla no se enciende. ¿Qué puedo hacer\? Estos problemas pueden deberse a muchas razones específicas del dispositivo y del sistema, es difícil decirlo en general. Deberías mirar en la configuración de tu dispositivo y asegurarte de que la aplicación tiene permiso para aparecer cuando está en segundo plano y permitir la aplicación se muestre sobre otras aplicaciones. diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml index 6a5e5b1e..b254eccd 100644 --- a/app/src/main/res/values-et/strings.xml +++ b/app/src/main/res/values-et/strings.xml @@ -20,8 +20,8 @@ Tärn Teemaviide Helista numbrile - Helisignaalide lubamine valimisnupu klõpsamisel - Võimaldab vibratsiooni valimisnuppude klõpsamisel + Numbriklahvistiku nupu klõpsamisel esita helisignaali + Numbriklahvistiku nupu klõpsamisel värista telefoni Telefon Nõustu @@ -60,6 +60,7 @@ Juhtmega kõrvaklapid Juhtmega või kõrvasisesed kõrvaklapid Vali heliruuting + Sa üritad helistada blokeeritud numbrile Kiirvalimine Klõpsa numbrit ja seosta ta konkreetse telefoniraamatu kirjega. Hiljem saad samale numbrile pikalt vajutades alustada kõnet määratud telefoninumbrile. @@ -70,6 +71,7 @@ Kõnede ajaks lülita lähedusandur välja Kõnele vastamisel kasuta viipamise asemel klõpsimist Kuvage sissetulevad kõned alati täisekraanil + Peida numbriklahvistik Ma kuulen sissetulevaid kõnesid, kuid ekraan ei lülitu sisse. Mida ma saan teha\? Sellistel probleemidel võib olla palju seadme- ja süsteemispetsiifilisi põhjusi, raske öelda üldiselt. Peaksite oma seadme seadetes ringi vaatama ja veenduma, et rakendusel on lubatud taustal hüpata ja lubada kuvamist üle teiste rakenduste. diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index f0899183..d8a28194 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -1,29 +1,29 @@ - Yksinkertainen Numerovalitsin - Numerovalitsin - Aseta tämä sovellus oletukseksi puheluille - Hyväksy näkyminen muiden sovellusten päällä, jotta sovellus toimii luotettavasti + Yksinkertainen puhelin + Puhelin + Tää tästä oletussovellus puheluille + Salli näkyminen muiden sovellusten päällä, jotta sovellus toimii luotettavasti - Ei käyttöoikeutta yhteystietoihin + Yhteystietojen käyttöoikeutta ei ole - Ei puheluita - Ei käyttöoikeutta puheluhistoriaan + Aiempia puheluita ei löytynyt + Puheluhistorian käyttöoikeutta ei ole Pyydä käyttöoikeutta Haluatko varmasti poistaa valitut kohteet puheluhistoriasta\? - Haluatko varmasti tyhjentää koko puheluhistorian\? + Haluatko varmasti tyhjentää puheluhistorian täysin\? Näytä ryhmitetyt puhelut Tyhjennä puheluhistoria Näytä puhelun tiedot - Valintanäppäimistö - Asteriski - Risuaita + Numeronäppäimistö + Tähti + Ruutu Soita numeroon - Äänimerkkien ottaminen käyttöön valintanäppäimen napsautuksen yhteydessä - Ota värinät käyttöön valintanäppäimen napsautuksista + Piippaa numeronäppäimistön painalluksista + Värähdä numeronäppäimistön painalluksista - Numerovalitsin + Puhelin Hyväksy Vastaa puheluun Hylkää @@ -33,48 +33,50 @@ Soitetaan… Puhelu päättyi Puhelu päättyy - Lähtevä puhelu - Valitse SIM-kortti puhelulle - Käytä tälle numerolle aina tätä SIM-korttia - Poista oletus-SIM + Puhelu on käynnissä + Valitse puheluun käytettävä liittymä + Soita tähän numeroon aina tällä liittymällä + Poista oletusliittymän määritys Puhelut - Laita mikrofoni päälle - Laita mikrofoni pois päältä - Laita kaiutin päälle - Laita kaiutin pois päältä - Näytä valintanäppäimistö - Piilota valintanäppäimistö + Ota mikrofoni käyttöön + Poista mikrofoni käytöstä + Ota kaiutin käyttöön + Poista kaiutin käytöstä + Näytä numeronäppäimet + Piilota numeronäppäimet Lopeta puhelu Puhelu pitoon Palaa puheluun Pidossa - Vaihda puheluita + Vaihda puhelua Yhdistä puhelut Jaa puhelu Lisää puhelu - Hallinnoi puhelinneuvottelua - Neuvottelu - Speaker - Earpiece + Hallitse ryhmäpuhelua + Ryhmäpuhelu + Kaiutin + Kuuloke Bluetooth - Wired Headset - Wired or Earpiece - Choose audio route + Langallinen kuulokemikrofoni + Langallinen tai kuuloke + Vslitse äänen reitti + Soitettava numero on estetty Pikavalinta - Pikavalinnan asetukset - Paina numeroa asettaaksesi sille yhteystiedon. Yhteystiedolle soitetaan, kun painat numeroa pitkään numerovalitsimessa. + Hallitse pikavalintoja + Paina numeroa määrittääksesi siihen yhteystiedon. Voit soittaa yhteystiedolle painamalla puhelimen numeronäppäimistöä pitkään. - Ryhmitä saman numeron peräkkäiset puhelut puheluhistoriassa - Avaa numeronäppäimistö, kun sovellus avataan - Poista läheisyysanturi käytöstä puheluiden aikana + Ryhmittele samojen numeroiden puhelut puheluhistoriassa + Avaa sovellus numeronäppäimiin + Poista läheisyysanturi käytöstä puheluiden ajaksi Vastaa puheluihin painalluksella pyyhkäisyn sijaan Näytä saapuvat puhelut aina koko näytöllä + Piilota numeronäppäimet - Kuulen saapuvat puhelut, mutta näyttö ei käynnisty. Mitä voin tehdä\? - Tällaisiin ongelmiin voi olla monia laite- ja järjestelmäkohtaisia syitä, joita on vaikea sanoa yleisesti. Kannattaa tutkia laitteen asetuksia ja varmistaa, että sovelluksen on sallittu ponnahtaa esiin, kun se on taustalla, ja sallia sen näyttäminen muiden sovellusten yläpuolella. + Kuulen saapuvat puhelut, mutta näyttö on pimeänä. Mitä voin tehdä\? + Tällaisiin ongelmiin voi olla monia laite- ja järjestelmäkohtaisia syitä, joiden yleistäminen on hankalaa. Kannattaa tutkia laitteen asetuksia ja varmistaa, että sovelluksella on oikeus ponnahtaa esiin taustalta ja näkyä muiden sovellusten päällä. - + \ No newline at end of file diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index c03c6e74..49b87b28 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -54,12 +54,13 @@ Ajouter un appel Gérer une conférence téléphonique Conférence - Speaker - Earpiece + Haut-parleur + Écouteur Bluetooth - Wired Headset - Wired or Earpiece - Choose audio route + Casque filaire + Filaire ou écouteur + Choisir la sortie audio + Le numéro que vous appelez est bloqué Numérotation rapide Gérer la numérotation rapide @@ -70,6 +71,7 @@ Désactiver le capteur de proximité pendant les appels Remplacer le balayage pour répondre aux appels entrants par un clic Toujours afficher les appels entrants en plein écran + Masquer les numéros du clavier J\'entends les appels entrants, mais l\'écran ne s\'allume pas. Que puis-je faire \? Ces problèmes peuvent avoir de nombreuses raisons spécifiques à l\'appareil et au système, il est difficile d\'en parler en général. Vous devriez consulter les paramètres de votre appareil et vous assurer que l\'application est autorisée à apparaître en arrière-plan et à s\'afficher au-dessus des autres applications. @@ -77,4 +79,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - + \ No newline at end of file diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index 4b7219ff..8fcff92d 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -60,6 +60,7 @@ Auriculares con cable Auriculares sen fíos Escollela saida do audio + O número ao que estás chamando está bloqueado Marcación rápida Xestionar marcacións rápidas @@ -70,6 +71,7 @@ Desactivar sensor de proximidade durante as chamadas Substituír o xesto de desprazar por un click para responder Mostrar sempre as chamadas entrantes a pantalla enteira + Ocultalos números do teclado Escoito chamadas entrantes, pero a pantalla non se acende. Que podo facer\? Estes problemas poden ter moitas razóns específicas do dispositivo e do sistema, difíciles de dicir en xeral. Debes mirar ao teu redor na configuración do teu dispositivo e asegurarte de que a aplicación pode aparecer cando está en segundo plano e permitir que se vexa sobre outras aplicacións. diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index e1c0e0f8..22b7cb50 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -54,12 +54,13 @@ Dodaj poziv Upravljaj konferencijskim pozivima Konferencija - Speaker - Earpiece + Zvučnik + Slušalica Bluetooth - Wired Headset - Wired or Earpiece - Choose audio route + Analogna slušalica s mikrofonom + Analogno ili slušalica + Odaberi audio izlaz + Broj koji zoveš je blokiran Brzo biranje Upravljaj brzim biranjem @@ -70,6 +71,7 @@ Isključi senzor blizine tijekom poziva Zamijeni povlačenje prstom za odgovaranje na dolazne pozive pritiskom Uvijek prikaži dolazne pozive u cjeloekranskom prikazu + Sakrij brojeve tipkovnice telefona Čujem dolazne pozive, ali ekran se ne uključuje. Što mogu učiniti\? Takvi problemi mogu imati mnogo razloga specifičnih za uređaj i sustav, koje je teško reći općenito. Trebali biste pogledati uokolo u postavkama svog uređaja i provjeriti je li aplikaciji dopušteno iskakanje u pozadini i dopuštenje prikazivanja preko drugih aplikacija. diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 06d17f4b..a40e8bc4 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -54,12 +54,13 @@ Hívás hozzáadása Konferenciahívás kezelése Konferencia - Speaker - Earpiece + Hangszóró + Fülhallgató Bluetooth - Wired Headset - Wired or Earpiece - Choose audio route + Vezetékes fejhallgató + Vezetékes vagy vezeték nélküli fülhallgató + Válasszon hangkimenetet + A hívott szám blokkolva van Gyors tárcsázó Gyors tárcsázó kezelése @@ -70,6 +71,7 @@ Közelségérzékelő kikapcsolása a hívások során Csúsztatás kattintásra cserélése a bejövő hívásoknál Bejövő hívások megjelenítése mindig teljes képernyőn + Tárcsázószámok elrejtése Bejövő hívást hallok, de a képernyő nem kapcsol be. Mit tehetek\? Az ilyen problémáknak számos eszköz- és rendszerfüggő oka lehet, általánosságban nehéz megmondani. Nézzen körül az eszközbeállításokban, és győződjön meg róla, hogy az alkalmazás előbújhat-e a háttérből, és megjelenhet-e más alkalmazások felett. @@ -77,4 +79,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - + \ No newline at end of file diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index 7bbf0a12..8bf75f29 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -20,8 +20,8 @@ Bintang Pagar Nomor telepon - Enable beeps on dialpad button clicks - Enable vibrations on dialpad button clicks + Aktifkan suara ketika tombol papan ditekan + Aktifkan getaran ketika tombol papan ditekan Dialer Menerima @@ -45,21 +45,22 @@ Tampilkan dialpad Sembunyikan dialpad Akhiri panggilan - Hold call - Resume call - On Hold - Swap calls - Merge calls - Split call - Add call - Manage conference call - Conference + Jeda panggilan + Lanjutkan panggilan + Dijeda + Ubah panggilan + Gabungkan panggilan + Pisahkan panggilan + Tambahkan panggilan + Kelola panggilan konferensi + Konferensi Speaker - Earpiece + Earphone Bluetooth - Wired Headset - Wired or Earpiece - Choose audio route + Headset Kabel + Kabel atau Earphone + Pilih rute audio + Nomor yang Anda panggil diblokir Panggilan cepat Kelola panggilan cepat @@ -69,12 +70,13 @@ Buka dialpad secara default ketika aplikasi dibuka Nonaktifkan sensor kedekatan saat ada di panggilan Ganti menggesek saat menanggapi panggilan masuk dengan mengklik - Always display incoming calls on full screen + Selalu tampilkan panggilan masuk dengan layar penuh + Sembunyikan nomor tombol papan - I hear incoming calls, but the screen doesn\'t turn on. What can I do? - Such issues can have many device and system specific reasons, hard to say in general. You should look around in your device settings and make sure that the app is allowed to pop up when in background and allow displaying over other apps. + Saya mendengar panggilan masuk, tetapi layarnya tidak menyala\? Apa yang bisa saya lakukan\? + Beberapa masalah dapat memiliki alasan perangkat dan sistem spesifik, tidak mudah untuk diberi tahu secara umum. Anda seharusnya melihat dalam pengaturan perangkat Anda dan memastikan bahwa aplikasi diperbolehkan untuk muncul ketika dalam latar belakang dan memperbolehkan menampilkan di atas aplikasi lain. - + \ No newline at end of file diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 34191d84..5f250333 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -54,12 +54,13 @@ Aggiungi una chiamata Gestisci la teleconferenza Conferenza - Speaker - Earpiece + Altoparlante + Auricolare Bluetooth - Wired Headset - Wired or Earpiece - Choose audio route + Cuffia cablata + Cablato o auricolare + Scegli l\'uscita audio + Il numero che stai chiamando è bloccato Contatti veloci Gestisci i contatti veloci @@ -70,6 +71,7 @@ Disattiva il sensore di prossimità durante le chiamate Sostituisci lo scorrimento nel rispondere alle chiamate in arrivo con un clic Visualizza sempre le chiamate in arrivo a schermo intero + Nascondi i numeri del tastierino Sento le chiamate in arrivo, ma lo schermo non si accende. Cosa posso fare\? Tali problemi possono avere molte ragioni specifiche per il dispositivo e il sistema, è difficile identificarle in generale. Dovresti dare un\'occhiata alle impostazioni del dispositivo e assicurarti che l\'app sia autorizzata a comparire quando è in background e che permetta la visualizzazione sopra le altre app. @@ -77,4 +79,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - + \ No newline at end of file diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index 1c8c7bcd..b28701ec 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -60,6 +60,7 @@ Wired Headset Wired or Earpiece Choose audio route + The number you are calling is blocked חיוג מהיר נהל חיוג מהיר @@ -70,6 +71,8 @@ השבת את חיישן הקרבה במהלך שיחות החלף החלקה בתגובה לשיחות נכנסות בלחיצה Always display incoming calls on full screen + Hide dialpad numbers + I hear incoming calls, but the screen doesn\'t turn on. What can I do? Such issues can have many device and system specific reasons, hard to say in general. You should look around in your device settings and make sure that the app is allowed to pop up when in background and allow displaying over other apps. diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index a9ed6582..ecdb5be6 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -60,19 +60,21 @@ 有線ヘッドセット 有線またはイヤーピース 音声の出力先を選択 + その番号はブロックした番号です スピードダイヤル スピードダイヤルの管理 - 番号をクリックすると連絡先を割り当てることが出来ます。電話で指定された番号を長押しすると、指定された連絡先に素早く電話をかけることが出来ます。 + 番号をタップすると連絡先を割り当てることが出来ます。ダイヤルパッドで割り当てた番号を長押しすると、割り当てた連絡先に素早く電話をかけることが出来ます。 - 後続の通話をコールログの同じ番号でグループ化する + 発着信履歴で同じ番号による連続した通話をグループ化する アプリを開いたときにデフォルトでダイヤルパッドを開く 通話中に近接センサーを無効にする - 着信に応答する際のスワイプ操作をクリック操作に置き換える - 常に着信通知を全画面に表示する + 着信に応答する際のスワイプ操作をタップ操作に置き換える + 着信通知を常に全画面で表示する + ダイヤルパッドの番号を表示しない 着信音は聞こえるのですが、画面がつきません。どうしたらよいですか? - このような問題は、デバイスやシステム固有の理由が多く、一概には言えません。端末の設定を見て、アプリがバックグラウンドでポップアップすることを許可しているか、他のアプリの上に表示することを許可しているかを確認する必要があります。 + このような問題は、端末やシステム固有の理由が多く、一概には言えません。端末の設定を見て、アプリがバックグラウンドでポップアップすることを許可しているか、他のアプリの上に表示することを許可しているかを確認する必要があります。 Spartusis rinkimas Tvarkyti spartųjį rinkimą @@ -70,6 +71,8 @@ Skambučių metu išjungti artumo jutiklį Atsiliepiant į įeinančius skambučius perbraukimą pakeiskite paspaudimu Visada rodykite įeinančius skambučius per visą ekraną + Hide dialpad numbers + I hear incoming calls, but the screen doesn\'t turn on. What can I do? Such issues can have many device and system specific reasons, hard to say in general. You should look around in your device settings and make sure that the app is allowed to pop up when in background and allow displaying over other apps. diff --git a/app/src/main/res/values-ml/strings.xml b/app/src/main/res/values-ml/strings.xml index 7415d93c..b4e8ca64 100644 --- a/app/src/main/res/values-ml/strings.xml +++ b/app/src/main/res/values-ml/strings.xml @@ -60,6 +60,7 @@ വയർഡ് ഹെഡ്സെറ്റ് വയർഡ് അല്ലെങ്കിൽ ഇയർപീസ് ഓഡിയോ യാതാമാര്ഗം തിരഞ്ഞെടുക്കുക + The number you are calling is blocked സ്പീഡ് ഡയൽ സ്പീഡ് ഡയൽ നിയന്ത്രിക്കുക @@ -70,6 +71,7 @@ കോളുകൾക്കിടയിൽ പ്രോക്സിമിറ്റി സെൻസർ പ്രവർത്തനരഹിതമാക്കുക ഇൻകമിംഗ് കോളുകളോട് പ്രതികരിക്കുമ്പോൾ സ്വൈപ്പിംഗ് മാറ്റി പകരം ഇൻകമിംഗ് കോളിൽ ക്ലിക്ക് ചെയ്യുക എല്ലായ്‌പ്പോഴും ഇൻകമിംഗ് കോളുകൾ പൂർണ്ണ സ്‌ക്രീനിൽ പ്രദർശിപ്പിക്കുക + Hide dialpad numbers ഞാൻ ഇൻകമിംഗ് കോളുകൾ കേൾക്കുന്നു, പക്ഷേ സ്ക്രീൻ ഓണാക്കുന്നില്ല. എനിക്ക് എന്ത് ചെയ്യാൻ കഴിയും\? അത്തരം പ്രശ്നങ്ങൾക്ക് ഉപകരണത്തിനും സിസ്റ്റത്തിനും പ്രത്യേക കാരണങ്ങളുണ്ടാകാം, പൊതുവായി പറയാൻ പ്രയാസമാണ്. നിങ്ങളുടെ ഉപകരണ ക്രമീകരണങ്ങളിൽ നിങ്ങൾ ചുറ്റും നോക്കുകയും പശ്ചാത്തലത്തിലായിരിക്കുമ്പോൾ ആപ്പ് പോപ്പ് അപ്പ് ചെയ്യാൻ അനുവദിക്കുകയും മറ്റ് ആപ്പുകളിൽ പ്രദർശിപ്പിക്കാൻ അനുവദിക്കുകയും വേണം. @@ -77,4 +79,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - \ No newline at end of file + diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml index 8c366fb5..c82857f8 100644 --- a/app/src/main/res/values-nb-rNO/strings.xml +++ b/app/src/main/res/values-nb-rNO/strings.xml @@ -60,6 +60,7 @@ Wired Headset Wired or Earpiece Choose audio route + The number you are calling is blocked Hurtigvalg Administrer hurtigvalg @@ -70,6 +71,8 @@ Deaktiver nærhetssensor under samtaler Erstatt sveiping ved å svare på innkommende anrop med å klikke Always display incoming calls on full screen + Hide dialpad numbers + I hear incoming calls, but the screen doesn\'t turn on. What can I do? Such issues can have many device and system specific reasons, hard to say in general. You should look around in your device settings and make sure that the app is allowed to pop up when in background and allow displaying over other apps. diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 4b155778..2dd7101d 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -60,6 +60,7 @@ Bedrade koptelefoon Bedraad of via oordopje(s) Geluidsroute kiezen + Het gebelde nummer is geblokkeerd Snelkiesnummer Snelkiezen beheren @@ -70,6 +71,7 @@ Nabijheidssensor uitschakelen tijdens bellen Vervang vegen door klikken bij het aannemen van gesprekken Inkomende gesprekken altijd op volledig scherm tonen + Toetsenblokcijfers verbergen Ik hoor dat er een gesprek binnenkomt, maar het scherm gaat niet aan. Wat kan ik doen\? Dit soort problemen kan vele oorzaken hebben, specifiek voor bepaalde apparaten en software. Controleer in ieder geval of voor deze app in de systeeminstellingen \"Weergeven vóór andere apps\" is toegestaan en of bij meldingen voor inkomende gesprekken \"Weergeven op scherm\" is ingeschakeld. diff --git a/app/src/main/res/values-pa-rPK/strings.xml b/app/src/main/res/values-pa-rPK/strings.xml index 27137368..a1a88fdb 100644 --- a/app/src/main/res/values-pa-rPK/strings.xml +++ b/app/src/main/res/values-pa-rPK/strings.xml @@ -60,6 +60,7 @@ Wired Headset Wired or Earpiece Choose audio route + The number you are calling is blocked Speed dial Manage speed dial @@ -70,6 +71,8 @@ Disable proximity sensor during calls Replace swiping at responding to incoming calls with clicking Always display incoming calls on full screen + Hide dialpad numbers + I hear incoming calls, but the screen doesn\'t turn on. What can I do\? Such issues can have many device and system specific reasons, hard to say in general. You should look around in your device settings and make sure that the app is allowed to pop up when in background and allow displaying over other apps. diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 31ef924c..46ea68bf 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -60,6 +60,7 @@ Słuchawki przewodowe Słuchawka urządzenia lub przewodowa Wybierz urządzenie audio + Numer, na który dzwonisz, jest zablokowany Szybkie wybieranie Zarządzaj szybkim wybieraniem @@ -70,6 +71,7 @@ Wyłączaj czujnik zbliżeniowy podczas połączeń Zastąp naciśnięciem gest przesunięcia do odpowiadania na połączenia przychodzące Zawsze wyświetlaj połączenia przychodzące na pełnym ekranie + Ukryj cyfry panelu wybierania Słyszę połączenia przychodzące, ale ekran się nie włącza. Co mogę zrobić\? Takie problemy mogą mieć wiele przyczyn specyficznych dla urządzenia i systemu; ogólnie trudno powiedzieć. Powinieneś/powinnaś rozejrzeć się w ustawieniach swojego urządzenia i upewnić się, że aplikacja może pojawiać się, gdy jest w tle, i wyświetlać się nad innymi aplikacjami. diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index ed7079ff..684b8b6a 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -20,8 +20,8 @@ Asterisco Hashtag Numero de telefone - Enable beeps on dialpad button clicks - Enable vibrations on dialpad button clicks + Ativar sons do teclado + Ativar vibrações do teclado Discador Aceitar @@ -54,12 +54,13 @@ Adicionar chamada Gerenciar chamada em conferência Conferência - Speaker - Earpiece + Alto falante + Fone de ouvido Bluetooth - Wired Headset + Headset com fio Wired or Earpiece - Choose audio route + Escolha a rota de áudio + O número que você está ligando está bloqueado Ligação rápida Gerenciar ligações rápidas @@ -69,10 +70,11 @@ Mostrar o discador ao abrir o aplicativo Desativar sensor de proximidade durante as chamadas Clicar em vez de deslizar para responder chamadas - Always display incoming calls on full screen + Sempre exibir as chamadas recebidas em tela cheia + Ocultar números do teclado - I hear incoming calls, but the screen doesn\'t turn on. What can I do? - Such issues can have many device and system specific reasons, hard to say in general. You should look around in your device settings and make sure that the app is allowed to pop up when in background and allow displaying over other apps. + Ouço chamadas recebidas, mas a tela não liga. O que eu posso fazer? + Esses problemas podem ter muitos motivos específicos do dispositivo e do sistema, difíceis de dizer em geral. Você deve olhar em volta nas configurações do seu dispositivo e certificar-se de que o aplicativo pode aparecer quando estiver em segundo plano e permitir a exibição sobre outros aplicativos. - Não pude acessar seus contatos + Não foi possível aceder aos contactos Não existem chamadas anteriores - Não pude acessar o histórico de chamadas + Não foi possível aceder ao histórico de chamadas Pedir acesso - Tem certeza de que deseja remover os itens selecionados do Histórico de Chamadas\? - Tem certeza que quer remover tudo do Histórico de Chamadas\? + Tem certeza de que deseja remover os itens selecionados do histórico de chamadas\? + Tem a certeza de que pretende remover tudo do histórico de chamadas\? Mostrar chamadas em grupo Limpar registo de chamadas Mostrar detalhes da chamada - Teclado de discagem + Marcador Asterisco - hashtag - Ligar para o número - Enable beeps on dialpad button clicks - Enable vibrations on dialpad button clicks + \'Hashtag\' + Ligar + Ativar sons do teclado + Ativar vibração do teclado - Discador + Marcador Aceitar Aceitar chamada Recusar - Rejeitar chamada + Recusar chamada Desconhecido A chamar… A ligar… Chamada terminada A terminar chamada Chamada em curso - Selecione um SIM para esta chamada - Utilizar sempre este SIM para ligar para este número + Selecione o SIM para esta chamada + Utilizar sempre este SIM para ligar a este número Deixar de utilizar como SIM padrão Chamadas - Ligar o microfone - Desligar o microfone - Ligar alta-voz - Desligar alta-voz + Ligar microfone + Desligar microfone + Ligar alta voz + Desligar alta voz Mostrar marcador Ocultar marcador - Terminar a chamada + Terminar chamada Reter chamada Retomar chamada Em espera Troca de chamadas - Mesclar chamadas - Divisão de chamada + Unir chamadas + Separar chamadas Adicionar chamada - Gerenciar chamada de conferência + Gerir chamada de conferência Conferência - Speaker - Earpiece + Altifalante + Auricular Bluetooth - Wired Headset - Wired or Earpiece - Choose audio route + Auscultador de cabo + Cabo ou auricular + Escolha a rota de áudio + O número para o qual está a tentar ligar está bloqueado - Marcação rápida - Gerir marcações rápidas - Clique num número para atribuir um contacto à marcação rápida. Poderá assim, ligar diretamente ao contacto ao premir longamente a tecla de marcação rápida. + Ligação rápida + Gerir ligações rápidas + Clique num número para o atribuir a um contacto. Poderá assim, ligar diretamente ao contacto ao premir longamente a tecla de ligação rápida. Agrupar, no registo, as chamadas para o mesmo contacto - Mostrar Marcador por padrâo ao abrir a aplicação + Mostrar marcador ao abrir a aplicação Desativar sensor de proximidade durante as chamadas Clicar em vez de deslizar para atender - Always display incoming calls on full screen + Mostrar em ecrã completo as chamadas recebidas + Ocultar números no marcador - I hear incoming calls, but the screen doesn\'t turn on. What can I do? - Such issues can have many device and system specific reasons, hard to say in general. You should look around in your device settings and make sure that the app is allowed to pop up when in background and allow displaying over other apps. + Estou a ouvir som mas o ecrã não liga. O que posso fazer\? + Esses problemas podem ter muitos motivos específicos do dispositivo e do sistema, difíceis de dizer em geral. Aceda às definições do sistema e certifique-se de que concedeu as permissões necessárias tais como permitir exibição por cima das outras aplicações. - + \ No newline at end of file diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index ce97cf5d..462a11c9 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -60,6 +60,7 @@ Wired Headset Wired or Earpiece Choose audio route + The number you are calling is blocked Apelare rapidă Gestionați apelarea rapidă @@ -70,6 +71,8 @@ Dezactivați senzorul de proximitate în timpul apelurilor Înlocuiți glisarea pentru a răspunde la apelurile primite cu o singură apăsare Afișați întotdeauna apelurile primite pe întreg ecranul + Hide dialpad numbers + Aud apelurile primite, dar ecranul nu se aprinde. Ce pot face\? Aceste probleme pot avea multe motive specifice dispozitivului și sistemului, fiind greu de spus în general. Ar trebui să vă uitați în setările dispozitivului și să vă asigurați că aplicația este permisă să apară atunci când este în fundal și că permite afișarea peste alte aplicații. diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index f15e88be..b4356e7f 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -60,6 +60,7 @@ Проводная гарнитура Проводные или внутриканальные наушники Выберите аудиовыход + Набранный вами номер заблокирован Быстрый вызов Управление быстрым вызовом @@ -70,6 +71,7 @@ Отключать датчик приближения во время вызовов Использовать нажатие вместо перетаскивания при ответе на входящие вызовы Всегда отображать входящие вызовы на полный экран + Скрыть цифры на номеронабирателе Я слышу сигналы входящих вызовов, но экран не включается. Что можно сделать\? Такие проблемы могут иметь множество специфических для устройства и системы причин, о которых трудно говорить в общем. Следует проверить настройки устройства и убедиться, что приложению разрешено отображение всплывающих уведомлений в фоновом режиме и отображение поверх других приложений. diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index fbade352..60eee805 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -60,6 +60,7 @@ Káblové slúchadlo Káblové alebo slúchadlo Zvoľte audio výstup Choose audio route + Volané číslo máte zablokované Rýchle vytáčanie Spravovať rýchle vytáčanie @@ -70,6 +71,8 @@ Vypnúť počas hovorov senzor priblíženia Nahradiť potiahnutie prstom pri odpovedaní na prichádzajúce hovory kliknutím Stále zobraziť prichádzajúce hovory na celú obrazovku + Skryť čísla na číselníku + Počujem prichádzajúce hovory, obrazovka sa ale nezapne. Čo s tým? Takéto problémy majú často dôvody špecifické pre dané zariadenie alebo systém, ťažko teda dať všeobecné riešenie. Mali by ste sa poobzerať v nasteniach zariadenia a uistiť sa, že apka má povolenie na zobrazovanie sa z pozadia a na zobrazovanie sa nad ostatnými apkami. diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml index c41bdafa..00aafa72 100644 --- a/app/src/main/res/values-sl/strings.xml +++ b/app/src/main/res/values-sl/strings.xml @@ -60,6 +60,7 @@ Ožičene slušalke Ožičeno ali brezžično Izberi smer zvoka + The number you are calling is blocked Hitro klicanje Upravljanje hitrega klica @@ -70,6 +71,8 @@ Onemogoči senzor bližine med klici Pri odzivanju na dohodne klice zamenjajte poteg s prstom na odziv s klikanjem Dohodne klice vedno prikaži na celotnem zaslonu + Hide dialpad numbers + Slišim dohodne klice, vendar se zaslon ne vklopi. Kaj lahko storim\? Takšne težave imajo lahko veliko razlogov, ki so specifični za napravo in sistem, zato jih je na splošno težko opredeliti. Oglejte si nastavitve naprave in se prepričajte, da je aplikaciji dovoljeno, da se prikaže, ko je v ozadju, in da omogoča prikaz nad drugimi aplikacijami. diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index 9cec0325..bd40ac7a 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -60,6 +60,7 @@ Жичане слушалице Жичани или слушалица Изаберите аудио руту + The number you are calling is blocked Брзо бирање Управљајте брзим бирањем @@ -70,7 +71,9 @@ Онемогућите сензор близине током позива Замените превлачење при одговарању на долазне позиве кликом Увек прикажи долазне позиве преко целог екрана + Hide dialpad numbers + Чујем долазне позиве, али екран се не укључује. Шта могу да урадим\? Такви проблеми могу имати много специфичних разлога за уређај и систем, што је уопштено тешко рећи. Требало би да погледате около у подешавањима уређаја и уверите се да је апликацији дозвољено да искаче када је у позадини и да дозволи приказивање преко других апликација. - \ No newline at end of file + diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 415bc4df..a9109c41 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -2,7 +2,7 @@ Simpel telefon Telefon - Vänligen gör den här appen till standardtelefonapp + Gör den här appen till standardtelefonapp Tillåt visning över andra appar för att få ett tillförlitligt beteende Det gick inte att komma åt dina kontakter @@ -38,9 +38,9 @@ Använd alltid det här SIM-kortet för detta nummer Ta bort standard-SIM-kort Samtal - Sätt på mikrofonen + Slå på mikrofonen Stäng av mikrofonen - Sätt på högtalaren + Slå på högtalaren Stäng av högtalaren Visa knappsats Dölj knappsats @@ -54,12 +54,13 @@ Lägg till samtal Hantera konferenssamtal Konferens - Speaker - Earpiece + Högtalare + Lur Bluetooth - Wired Headset - Wired or Earpiece - Choose audio route + Kabelanslutet headset + Kabel eller lur + Välj ljudväg + Numret du ringer är blockerat Snabbuppringning Hantera snabbuppringning @@ -70,11 +71,12 @@ Inaktivera närhetssensor under samtal Ersätt svepning vid besvarande av inkommande samtal med tryckning Visa alltid inkommande samtal i helskärm + Dölj knappsatsens siffror - I hear incoming calls, but the screen doesn\'t turn on. What can I do? - Such issues can have many device and system specific reasons, hard to say in general. You should look around in your device settings and make sure that the app is allowed to pop up when in background and allow displaying over other apps. + Jag hör inkommande samtal men skärmen vaknar inte. Vad gör jag\? + Sådana problem kan bero specifikt på apparat eller ditt sytem, det är svårt att svara på generellt. Du bör kolla i dina inställningar och säkerställa att appen har behörighet att synas i förgrunden och tillåts att synas över andra appar. - + \ No newline at end of file diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml index d4a222b8..85331b8b 100644 --- a/app/src/main/res/values-th/strings.xml +++ b/app/src/main/res/values-th/strings.xml @@ -60,6 +60,7 @@ Wired Headset Wired or Earpiece Choose audio route + The number you are calling is blocked Speed dial Manage speed dial @@ -70,6 +71,8 @@ Disable proximity sensor during calls Replace swiping at responding to incoming calls with clicking Always display incoming calls on full screen + Hide dialpad numbers + I hear incoming calls, but the screen doesn\'t turn on. What can I do? Such issues can have many device and system specific reasons, hard to say in general. You should look around in your device settings and make sure that the app is allowed to pop up when in background and allow displaying over other apps. diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 3c78a0d9..2527ec53 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -60,6 +60,7 @@ Kablolu Kulaklık Kablolu veya Kulaklık Ses çıkışını seçin + Aradığınız numara engellendi Hızlı arama Hızlı aramayı yönet @@ -70,6 +71,7 @@ Aramalar sırasında yakınlık sensörünü devre dışı bırak Gelen aramalara yanıt vermek için kaydırmayı tıklamayla değiştir Gelen aramaları her zaman tam ekranda görüntüle + Tuş takımı numaralarını gizle Gelen aramaları duyuyorum ama ekran açılmıyor. Ne yapabilirim\? Bu tür sorunların aygıta ve sisteme özgü birçok nedeni olabilir, genel olarak söylemek zor. Aygıt ayarlarınıza bakmalı ve uygulamanın arka plandayken açılmasına ve diğer uygulamaların üzerinde görüntülenmesine izin verildiğinden emin olmalısınız. diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 5c4e7cb7..ff94ae09 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -3,7 +3,7 @@ Простий Телефон Телефон Будь ласка, зробіть цю програму типовою для телефонних викликів - Дозвольте відображення над іншими додатками для надійної роботи + Дозвольте відображення над іншими застосунками для надійної роботи Не вдалося отримати доступ до контактів @@ -20,8 +20,8 @@ Asterisk Хештег Номер виклику - Enable beeps on dialpad button clicks - Enable vibrations on dialpad button clicks + Увімкнути звукові сигнали при наборі номеру + Увімкнути вібрації при наборі номеру Телефон Прийняти @@ -54,27 +54,29 @@ Додати дзвінок Керувати конференц-викликом Конференц-виклик - Speaker - Earpiece + Динамік + Навушники Bluetooth - Wired Headset - Wired or Earpiece - Choose audio route + Провідна гарнітура + Провідний або навушник + Оберіть аудіовихід + Номер, на який ви телефонуєте, заблоковано Швидкий виклик Управління швидким викликом Натисніть на номер, щоб призначити йому контакт. Потім ви зможете швидко зателефонувати вказаному контакту, довго натискаючи вказаний номер на цифровій панелі. Групувати наступні дзвінки з тим самим номером у журналі викликів - За замовчуванням відкривати цифрову панель при запуску додатку + За замовчуванням відкривати цифрову панель при запуску застосунку Вимикати датник наближення під час викликів Замінити перетягування на натискання під час відповіді на вхідні виклики - Always display incoming calls on full screen + Завжди відображати вхідні дзвінки на весь екран + Приховати номери цифрової клавіатури - I hear incoming calls, but the screen doesn\'t turn on. What can I do? - Such issues can have many device and system specific reasons, hard to say in general. You should look around in your device settings and make sure that the app is allowed to pop up when in background and allow displaying over other apps. + Я чую вхідні дзвінки, але екран не вмикається. Що я можу зробити\? + Такі проблеми можуть мати багато специфічних для пристрою та системи причин, важко сказати в цілому. Вам слід подивитися в налаштуваннях свого пристрою та переконатися, що застосунку дозволено відображати у фоновому режимі та дозволяти відображення над іншими застосунками. - + \ No newline at end of file diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index ff14da56..a98fc1ba 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -60,6 +60,7 @@ 有线耳机 有线或听筒 选择音频线路 + 你呼叫的号码被屏蔽了 快速拨号 管理快速拨号 @@ -70,6 +71,7 @@ 在通话期间禁用接近传感器 用点击代替滑动来接听来电 始终全屏显示来电 + 隐藏拨号盘号码 我听到来电声音,但屏幕不亮。我该怎么办\? 这样的问题可能有很多设备和系统的具体原因,很难笼统地说。你应该查看你的设备设置,确保应用在后台时被允许弹出,并允许其显示在其他应用上方。 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 681e3eb4..83e9789b 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -60,6 +60,7 @@ Wired Headset Wired or Earpiece Choose audio route + The number you are calling is blocked Speed dial Manage speed dial @@ -70,6 +71,8 @@ Disable proximity sensor during calls Replace swiping at responding to incoming calls with clicking Always display incoming calls on full screen + Hide dialpad numbers + I hear incoming calls, but the screen doesn\'t turn on. What can I do? Such issues can have many device and system specific reasons, hard to say in general. You should look around in your device settings and make sure that the app is allowed to pop up when in background and allow displaying over other apps. diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 08b31931..3e74ff07 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -7,7 +7,10 @@ 40dp 120dp - 30sp 34sp 20sp + + + 28dp + 12dp diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 96b010d3..42db4841 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -64,6 +64,7 @@ Wired Headset Wired or Earpiece Choose audio route + The number you are calling is blocked Speed dial @@ -76,6 +77,7 @@ Disable proximity sensor during calls Replace swiping at responding to incoming calls with clicking Always display incoming calls on full screen + Hide dialpad numbers I hear incoming calls, but the screen doesn\'t turn on. What can I do? diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 8ff62af5..e5e257a8 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -2,14 +2,23 @@ + diff --git a/fastlane/metadata/android/ar/full_description.txt b/fastlane/metadata/android/ar/full_description.txt index 8b56cabb..8a2b059f 100644 --- a/fastlane/metadata/android/ar/full_description.txt +++ b/fastlane/metadata/android/ar/full_description.txt @@ -24,4 +24,4 @@ https://www.facebook.com/simplemobiletools https://www.reddit.com/r/SimpleMobileTools برقية: -https://t.me/SimpleMobileTools \ No newline at end of file +https://t.me/SimpleMobileTools diff --git a/fastlane/metadata/android/ar/short_description.txt b/fastlane/metadata/android/ar/short_description.txt index 44c64f45..6173e15e 100644 --- a/fastlane/metadata/android/ar/short_description.txt +++ b/fastlane/metadata/android/ar/short_description.txt @@ -1 +1 @@ -مدير مكالمات هاتفية مفيد مع دليل الهاتف وحظر الأرقام ودعم شرائح SIM المتعددة \ No newline at end of file +مدير مكالمات هاتفية مفيد مع دليل الهاتف وحظر الأرقام ودعم شرائح SIM المتعددة diff --git a/fastlane/metadata/android/ar/title.txt b/fastlane/metadata/android/ar/title.txt index 53a5bf9e..924491fb 100644 --- a/fastlane/metadata/android/ar/title.txt +++ b/fastlane/metadata/android/ar/title.txt @@ -1 +1 @@ -Simple Dialer \ No newline at end of file +Simple Dialer diff --git a/fastlane/metadata/android/ar/video.txt b/fastlane/metadata/android/ar/video.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/fastlane/metadata/android/ca/video.txt b/fastlane/metadata/android/ca/video.txt deleted file mode 100644 index 1a4baf53..00000000 --- a/fastlane/metadata/android/ca/video.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/fastlane/metadata/android/cs-CZ/video.txt b/fastlane/metadata/android/cs-CZ/video.txt deleted file mode 100644 index 8d1c8b69..00000000 --- a/fastlane/metadata/android/cs-CZ/video.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/fastlane/metadata/android/de-DE/video.txt b/fastlane/metadata/android/de-DE/video.txt deleted file mode 100644 index 8d1c8b69..00000000 --- a/fastlane/metadata/android/de-DE/video.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/fastlane/metadata/android/el-GR/video.txt b/fastlane/metadata/android/el-GR/video.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/fastlane/metadata/android/en-GB/video.txt b/fastlane/metadata/android/en-GB/video.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/fastlane/metadata/android/en-IN/video.txt b/fastlane/metadata/android/en-IN/video.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/fastlane/metadata/android/en-US/changelogs/47.txt b/fastlane/metadata/android/en-US/changelogs/47.txt new file mode 100644 index 00000000..64d09e47 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/47.txt @@ -0,0 +1,4 @@ + * Do not allow calling blocked numbers + * Allow hiding numbers on the dialpad + * Use Material You theme by default on Android 12+ + * Added some UI, translation and stability improvements diff --git a/fastlane/metadata/android/en-US/changelogs/48.txt b/fastlane/metadata/android/en-US/changelogs/48.txt new file mode 100644 index 00000000..26a629c9 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/48.txt @@ -0,0 +1 @@ + * Added the new search bar at the top menu diff --git a/fastlane/metadata/android/en-US/changelogs/49.txt b/fastlane/metadata/android/en-US/changelogs/49.txt new file mode 100644 index 00000000..03b4e4f8 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/49.txt @@ -0,0 +1 @@ + * Fixed a glitch with dialpad button not being visible on some devices diff --git a/fastlane/metadata/android/en-US/changelogs/50.txt b/fastlane/metadata/android/en-US/changelogs/50.txt new file mode 100644 index 00000000..2c9a8bf1 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/50.txt @@ -0,0 +1 @@ + * Fixed a search glitch on some devices diff --git a/fastlane/metadata/android/en-US/changelogs/51.txt b/fastlane/metadata/android/en-US/changelogs/51.txt new file mode 100644 index 00000000..42c42e2a --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/51.txt @@ -0,0 +1,4 @@ + * Allow filtering contacts + * Fix displaying contacts, if name starts with surname + * Fixed some right-to-left layout glitches + * Added some stability, translation and UX improvements diff --git a/fastlane/metadata/android/en-US/changelogs/52.txt b/fastlane/metadata/android/en-US/changelogs/52.txt new file mode 100644 index 00000000..42c42e2a --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/52.txt @@ -0,0 +1,4 @@ + * Allow filtering contacts + * Fix displaying contacts, if name starts with surname + * Fixed some right-to-left layout glitches + * Added some stability, translation and UX improvements diff --git a/fastlane/metadata/android/en-US/changelogs/53.txt b/fastlane/metadata/android/en-US/changelogs/53.txt new file mode 100644 index 00000000..11e4656d --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/53.txt @@ -0,0 +1,2 @@ + * Fixed number presses during call + * Added some stability, translation and UX improvements diff --git a/fastlane/metadata/android/en-US/changelogs/54.txt b/fastlane/metadata/android/en-US/changelogs/54.txt new file mode 100644 index 00000000..8304d88a --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/54.txt @@ -0,0 +1 @@ + * Added some stability, translation and UX improvements diff --git a/fastlane/metadata/android/en-US/changelogs/55.txt b/fastlane/metadata/android/en-US/changelogs/55.txt new file mode 100644 index 00000000..600bac56 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/55.txt @@ -0,0 +1,3 @@ + * Avoid showing contacts without a phone number + * Fixed multiple contact handling related glitches + * Added some stability, translation and UX improvements diff --git a/fastlane/metadata/android/en-US/video.txt b/fastlane/metadata/android/en-US/video.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/fastlane/metadata/android/es-ES/video.txt b/fastlane/metadata/android/es-ES/video.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/fastlane/metadata/android/es-US/video.txt b/fastlane/metadata/android/es-US/video.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/fastlane/metadata/android/et/short_description.txt b/fastlane/metadata/android/et/short_description.txt index ce594519..089a2a70 100644 --- a/fastlane/metadata/android/et/short_description.txt +++ b/fastlane/metadata/android/et/short_description.txt @@ -1 +1 @@ -Halda telefonikõnesid selle lihtsa telefoni valimise rakenduse telefoniraamatuga +Halda kõnesid selle lihtsa telefonirakenduse ja telefoniraamatu abil diff --git a/fastlane/metadata/android/et/title.txt b/fastlane/metadata/android/et/title.txt index f6c081d9..b8997b1c 100644 --- a/fastlane/metadata/android/et/title.txt +++ b/fastlane/metadata/android/et/title.txt @@ -1 +1 @@ -Lihtne dialerija +Lihtne telefon diff --git a/fastlane/metadata/android/fi-FI/title.txt b/fastlane/metadata/android/fi-FI/title.txt index 66bc9eb6..dca58ed1 100644 --- a/fastlane/metadata/android/fi-FI/title.txt +++ b/fastlane/metadata/android/fi-FI/title.txt @@ -1 +1 @@ -Yksinkertainen valitsin +Yksinkertainen puhelin diff --git a/fastlane/metadata/android/fr-FR/video.txt b/fastlane/metadata/android/fr-FR/video.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/fastlane/metadata/android/gl-ES/full_description.txt b/fastlane/metadata/android/gl-ES/full_description.txt index 02629e70..0c0ce307 100644 --- a/fastlane/metadata/android/gl-ES/full_description.txt +++ b/fastlane/metadata/android/gl-ES/full_description.txt @@ -1,18 +1,20 @@ -Un aplicativo para xestionar chamadas, independentemente do sitio no que estea. Posúe un rexistro de chamadas de acceso rápido. +Unha aplicación lixeira para xestionar as túas chamadas, esteas onde esteas. Vén cun rexistro de chamadas práctico para facilitar o inicio das chamadas. Agora podes marcar números facilmente usando este incrible teclado de marcación sen ningún problema, xa que este teclado de marcación ofrécelle diferentes cousas para facilitar a túa experiencia de chamada. Mantente conectado cos teus amigos e familiares mentres tes unha experiencia fluida nesta aplicación. Con números e letras máis grandes, agora é máis fácil para ti ver e marcar números. Con este teclado de marcación, podes acceder aos teus contactos e manter un rexistro de chamadas con facilidade. -Existe tamén un marcador que suxire contactos. +Tamén hai un teclado de marcación rápida ao teu servizo, con suxestións de contacto intelixentes. Tamén admite letras. Podes usar a busca rápida para atopar os teus contactos favoritos non só na lista de contactos, senón tamén no historial de chamadas. As entradas do rexistro de chamadas pódense eliminar unha por unha, pero tamén se poden eliminar todas á vez. -Pode bloquear números facilmente e evitar chamadas non desexadas. +Podes bloquear facilmente os números de teléfono para evitar chamadas entrantes non desexadas. Esta función está ausente na maioría das aplicacións presentes na tenda. Con esta función, podes escoller quen pode chamarte. Con esta función, a seguridade do usuario pódese manter facilmente bloqueando números que son inútiles ou ameazantes. Tamén pode bloquear as chamadas de contactos sen gardar. -Pode ligar números á marcación rápida, facendo que chamar aos contactos favoritos sexa moito máis rápido. +Grazas ás funcións de seguridade avanzadas desta aplicación, os números que escribas estarán perfectamente protexidos para que poidas gozar dunha experiencia sen problemas sen preocuparte de que os teus datos caian en mans equivocadas. Cada un dos teus números de teléfono está seguro contigo. -Para xestionar as suas chamadas, o aplicativo Teléfono tamén dá soporte aos contactos favoritos e permite crear atallos para os contactos na súa pantalla inicial. +A marcación rápida compatible fai que chamar aos teus contactos favoritos con este verdadeiro teléfono sexa unha brisa. Podes facer de calquera número de teléfono o teu favorito para poder marcalo rapidamente. Deste xeito, pode establecer contactos facilmente con persoas sen ter que buscar outros números. -Dispoñible cun deseño material e cun tema escuro que proporciona unha experiencia moi agradable. Non pide acesso a Internet o que lle confire privacidade, seguranza e estabilidade. +Para axudarche a xestionar as túas chamadas rapidamente, a aplicación de números de teléfono tamén admite os contactos favoritos e a creación de atallos de calquera contacto na pantalla de inicio. O seguimento dos rexistros de chamadas de diferentes números de teléfono tamén é un punto positivo desta aplicación. -Non posúe anuncios nin utiliza permisos innecesarios. É de código aberto e permite personalización de cores. +Vén con deseño de material e tema escuro por defecto, ofrece unha excelente experiencia de usuario para un uso sinxelo. A falta de acceso a Internet ofrécelle máis privacidade, seguridade e estabilidade que outras aplicacións. -Consulta a nosa páxina aqui: +Non contén anuncios nin permisos innecesarios. É totalmente de código aberto, ofrece cores personalizables. + +Consulte o conxunto completo de Simple Tools aquí: https://www.simplemobiletools.com Facebook: @@ -22,4 +24,4 @@ Reddit: https://www.reddit.com/r/SimpleMobileTools Telegram: -https://t.me/SimpleMobileTools \ No newline at end of file +https://t.me/SimpleMobileTools diff --git a/fastlane/metadata/android/gl-ES/short_description.txt b/fastlane/metadata/android/gl-ES/short_description.txt index 71e109e9..5a1f97f5 100644 --- a/fastlane/metadata/android/gl-ES/short_description.txt +++ b/fastlane/metadata/android/gl-ES/short_description.txt @@ -1 +1 @@ -Aplicativo para chamar e bloquear números, con soporte multi-SIM \ No newline at end of file +Aplicativo para chamar e bloquear números, con soporte multi-SIM diff --git a/fastlane/metadata/android/gl-ES/title.txt b/fastlane/metadata/android/gl-ES/title.txt index 4c9e8bfc..cb787667 100644 --- a/fastlane/metadata/android/gl-ES/title.txt +++ b/fastlane/metadata/android/gl-ES/title.txt @@ -1 +1 @@ -Simple Dialer: Chamadas \ No newline at end of file +Marcador Sinxelo diff --git a/fastlane/metadata/android/gl-ES/video.txt b/fastlane/metadata/android/gl-ES/video.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/fastlane/metadata/android/hi-IN/video.txt b/fastlane/metadata/android/hi-IN/video.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/fastlane/metadata/android/id/full_description.txt b/fastlane/metadata/android/id/full_description.txt index 60e3b7cd..2d2d7dfa 100644 --- a/fastlane/metadata/android/id/full_description.txt +++ b/fastlane/metadata/android/id/full_description.txt @@ -24,4 +24,4 @@ Reddit: https://www.reddit.com/r/SimpleMobileTools Telegram: -https://t.me/SimpleMobileTools \ No newline at end of file +https://t.me/SimpleMobileTools diff --git a/fastlane/metadata/android/id/short_description.txt b/fastlane/metadata/android/id/short_description.txt index cd956228..8797297c 100644 --- a/fastlane/metadata/android/id/short_description.txt +++ b/fastlane/metadata/android/id/short_description.txt @@ -1 +1 @@ -Pengelola panggilan praktis, fitur buku telepon, pemblokiran nomor & multi-SIM \ No newline at end of file +Pengelola panggilan praktis, fitur buku telepon, pemblokiran nomor & multi-SIM diff --git a/fastlane/metadata/android/id/title.txt b/fastlane/metadata/android/id/title.txt index e1c462ab..c6951153 100644 --- a/fastlane/metadata/android/id/title.txt +++ b/fastlane/metadata/android/id/title.txt @@ -1 +1 @@ -Pemanggil Simpel \ No newline at end of file +Pemanggil Simpel diff --git a/fastlane/metadata/android/id/video.txt b/fastlane/metadata/android/id/video.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/fastlane/metadata/android/iw-IL/video.txt b/fastlane/metadata/android/iw-IL/video.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/fastlane/metadata/android/ja-JP/video.txt b/fastlane/metadata/android/ja-JP/video.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/fastlane/metadata/android/ko-KR/video.txt b/fastlane/metadata/android/ko-KR/video.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/fastlane/metadata/android/nl-NL/video.txt b/fastlane/metadata/android/nl-NL/video.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/fastlane/metadata/android/no-NO/video.txt b/fastlane/metadata/android/no-NO/video.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/fastlane/metadata/android/pl-PL/video.txt b/fastlane/metadata/android/pl-PL/video.txt deleted file mode 100644 index 8d1c8b69..00000000 --- a/fastlane/metadata/android/pl-PL/video.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/fastlane/metadata/android/pt-BR/video.txt b/fastlane/metadata/android/pt-BR/video.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/fastlane/metadata/android/pt-PT/video.txt b/fastlane/metadata/android/pt-PT/video.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/fastlane/metadata/android/ru-RU/full_description.txt b/fastlane/metadata/android/ru-RU/full_description.txt index 6c5158f0..8c30c017 100644 --- a/fastlane/metadata/android/ru-RU/full_description.txt +++ b/fastlane/metadata/android/ru-RU/full_description.txt @@ -1,23 +1,23 @@ -Легкое приложение для обработки ваших звонков, где бы вы ни находились. Поставляется с удобным журналом вызовов для легкого инициирования звонков. Теперь вы можете легко набирать номера, используя эту удивительную панель набора номера без каких-либо проблем, так как эта панель набора дает вам различные вещи, чтобы облегчить ваш общий опыт при совершении звонка. Оставайтесь на связи со своими друзьями и семьей, наслаждаясь плавным использованием этого приложения. Благодаря большим цифрам и буквам теперь вам будет легче видеть и набирать номера. С помощью этой панели вы можете получить доступ к своим контактам и вести журнал вызовов с легкостью. +Лёгкое приложение для обработки ваших звонков, где бы вы ни находились. Поставляется с удобным журналом вызовов для легкого инициирования звонков. Теперь вы можете легко набирать номера, используя эту удивительную панель набора номера без каких-либо проблем, так как эта панель набора дает вам различные вещи, чтобы облегчить ваш общий опыт при совершении звонка. Оставайтесь на связи со своими друзьями и семьей, наслаждаясь плавным использованием этого приложения. Благодаря большим цифрам и буквам теперь вам будет легче видеть и набирать номера. С помощью этой панели вы можете получить доступ к своим контактам и вести журнал вызовов с легкостью. К вашим услугам также панель быстрого набора с интеллектуальными предложениями контактов. Она также поддерживает буквы. С помощью быстрого поиска можно найти любимые контакты не только в списке контактов, но и в журнале вызовов. Записи журнала вызовов можно удалять как по одной, так и сразу. -Вы можете легко заблокировать телефонные номера, чтобы избежать нежелательных входящих звонков. Эта функция отсутствует в большинстве приложений, представленных в магазине. Используя эту функцию, вы можете выбрать, кто может вам звонить. Эта функция позволяет легко поддерживать безопасность пользователя, блокируя бесполезные или угрожающие номера. Вы также можете блокировать звонки от несохраненных контактов. +Вы можете легко заблокировать телефонные номера, чтобы избежать нежелательных входящих звонков. Эта функция отсутствует в большинстве приложений, представленных в магазине. Используя эту функцию, вы можете выбрать, кто может вам звонить. Эта функция позволяет легко поддерживать безопасность пользователя, блокируя бесполезные или угрожающие номера. Вы также можете блокировать звонки от несохранённых контактов. Благодаря расширенным функциям безопасности этого приложения введенные вами числа надежно защищены, поэтому вы можете беспрепятственно работать, не беспокоясь о том, что ваши данные попадут в чужие руки. Каждый ваш номер телефона в безопасности с вами. Поддерживаемый быстрый набор позволяет легко вызывать любимые контакты с помощью этого настоящего телефона. Вы можете сделать любой телефонный номер любимым, чтобы быстро набирать его. Таким образом, вы сможете легко устанавливать контакты с людьми, не заглядывая вглубь других номеров. -Чтобы помочь вам быстро управлять своими звонками, приложение "Номер телефона" также поддерживает избранные контакты и создание ярлыков любого контакта на главном экране. Отслеживание журналов звонков для разных телефонных номеров также является плюсом этого приложения. +Чтобы помочь вам быстро управлять своими звонками, приложение "Простой телефон" также поддерживает избранные контакты и создание ярлыков любого контакта на главном экране. Отслеживание журналов звонков для разных телефонных номеров также является плюсом этого приложения. Он поставляется с материальным дизайном и темной темой по умолчанию, обеспечивая отличный пользовательский опыт для простоты использования. Отсутствие доступа в интернет обеспечивает большую конфиденциальность, безопасность и стабильность по сравнению с другими приложениями. Не содержит рекламы и ненужных разрешений. Является полностью открытым исходным кодом, предоставляет настраиваемые цвета. -Ознакомьтесь с полным набором Простых Инструментов здесь: +Ознакомьтесь с полным набором "Простых инструментов" здесь: https://www.simplemobiletools.com -Фейсбук: +Facebook: https://www.facebook.com/simplemobiletools Reddit: diff --git a/fastlane/metadata/android/ru-RU/title.txt b/fastlane/metadata/android/ru-RU/title.txt index 846ece36..9be0640c 100644 --- a/fastlane/metadata/android/ru-RU/title.txt +++ b/fastlane/metadata/android/ru-RU/title.txt @@ -1 +1 @@ -Простой номеронабиратель +Простой телефон diff --git a/fastlane/metadata/android/sk/video.txt b/fastlane/metadata/android/sk/video.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/fastlane/metadata/android/sl/video.txt b/fastlane/metadata/android/sl/video.txt deleted file mode 100644 index 8d1c8b69..00000000 --- a/fastlane/metadata/android/sl/video.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/fastlane/metadata/android/sv-SE/video.txt b/fastlane/metadata/android/sv-SE/video.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/fastlane/metadata/android/uk/full_description.txt b/fastlane/metadata/android/uk/full_description.txt index 9560ec38..7ca34a49 100644 --- a/fastlane/metadata/android/uk/full_description.txt +++ b/fastlane/metadata/android/uk/full_description.txt @@ -24,4 +24,4 @@ Reddit: https://www.reddit.com/r/SimpleMobileTools Телеграма: -https://t.me/SimpleMobileTools \ No newline at end of file +https://t.me/SimpleMobileTools diff --git a/fastlane/metadata/android/uk/short_description.txt b/fastlane/metadata/android/uk/short_description.txt index 25dca069..847fa0eb 100644 --- a/fastlane/metadata/android/uk/short_description.txt +++ b/fastlane/metadata/android/uk/short_description.txt @@ -1 +1 @@ -Керуйте телефонними дзвінками за допомогою цієї простої для набору номера \ No newline at end of file +Керуйте телефонними дзвінками за допомогою цієї простої для набору номера diff --git a/fastlane/metadata/android/uk/title.txt b/fastlane/metadata/android/uk/title.txt index 8649d054..58dc6dc6 100644 --- a/fastlane/metadata/android/uk/title.txt +++ b/fastlane/metadata/android/uk/title.txt @@ -1 +1 @@ -Простий набирач \ No newline at end of file +Простий набирач diff --git a/fastlane/metadata/android/uk/video.txt b/fastlane/metadata/android/uk/video.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/fastlane/metadata/android/zh-CN/video.txt b/fastlane/metadata/android/zh-CN/video.txt deleted file mode 100644 index e69de29b..00000000