Merge branch 'master' into stringlate-fr-8852
@ -1,6 +1,15 @@
|
||||
Changelog
|
||||
==========
|
||||
|
||||
Version 4.5.0 *(2018-09-28)*
|
||||
----------------------------
|
||||
|
||||
* Added a simple dialpad
|
||||
* Do not allow creating contacts under Signal or Telegram contact source
|
||||
* Allow copying phone numbers into clipboard by long pressing them on the View screen
|
||||
* Properly handle intents adding numbers to existing contacts
|
||||
* Many other smaller improvements and bugfixes
|
||||
|
||||
Version 4.4.0 *(2018-09-04)*
|
||||
----------------------------
|
||||
|
||||
|
@ -4,14 +4,14 @@ apply plugin: 'kotlin-android-extensions'
|
||||
|
||||
android {
|
||||
compileSdkVersion 28
|
||||
buildToolsVersion "28.0.2"
|
||||
buildToolsVersion "28.0.3"
|
||||
|
||||
defaultConfig {
|
||||
applicationId "com.simplemobiletools.contacts"
|
||||
minSdkVersion 16
|
||||
targetSdkVersion 28
|
||||
versionCode 31
|
||||
versionName "4.4.0"
|
||||
versionCode 32
|
||||
versionName "4.5.0"
|
||||
setProperty("archivesBaseName", "contacts")
|
||||
}
|
||||
|
||||
@ -41,7 +41,7 @@ android {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation 'com.simplemobiletools:commons:4.7.3'
|
||||
implementation 'com.simplemobiletools:commons:4.8.0'
|
||||
implementation 'joda-time:joda-time:2.9.9'
|
||||
implementation 'com.facebook.stetho:stetho:1.5.0'
|
||||
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
|
||||
|
@ -118,15 +118,6 @@
|
||||
android:name=".activities.EditContactActivity"
|
||||
android:parentActivityName=".activities.MainActivity">
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.INSERT_OR_EDIT"/>
|
||||
<category android:name="android.intent.category.DEFAULT"/>
|
||||
|
||||
<data android:mimeType="vnd.android.cursor.item/person"/>
|
||||
<data android:mimeType="vnd.android.cursor.item/contact"/>
|
||||
<data android:mimeType="vnd.android.cursor.item/raw_contact"/>
|
||||
</intent-filter>
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.EDIT"/>
|
||||
<category android:name="android.intent.category.DEFAULT"/>
|
||||
@ -163,6 +154,20 @@
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
<activity
|
||||
android:name=".activities.InsertOrEditContactActivity"
|
||||
android:parentActivityName=".activities.MainActivity">
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.INSERT_OR_EDIT"/>
|
||||
<category android:name="android.intent.category.DEFAULT"/>
|
||||
|
||||
<data android:mimeType="vnd.android.cursor.item/person"/>
|
||||
<data android:mimeType="vnd.android.cursor.item/contact"/>
|
||||
<data android:mimeType="vnd.android.cursor.item/raw_contact"/>
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
<activity
|
||||
android:name="com.simplemobiletools.commons.activities.AboutActivity"
|
||||
android:label="@string/about"
|
||||
@ -183,6 +188,11 @@
|
||||
android:label="@string/frequently_asked_questions"
|
||||
android:parentActivityName="com.simplemobiletools.commons.activities.AboutActivity"/>
|
||||
|
||||
<activity
|
||||
android:name=".activities.DialpadActivity"
|
||||
android:label="@string/dialpad"
|
||||
android:parentActivityName=".activities.MainActivity"/>
|
||||
|
||||
<provider
|
||||
android:name="android.support.v4.content.FileProvider"
|
||||
android:authorities="${applicationId}.provider"
|
||||
|
@ -0,0 +1,169 @@
|
||||
package com.simplemobiletools.contacts.activities
|
||||
|
||||
import android.annotation.TargetApi
|
||||
import android.content.Intent
|
||||
import android.graphics.Color
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.text.InputType
|
||||
import android.view.KeyEvent
|
||||
import android.view.Menu
|
||||
import android.view.MenuItem
|
||||
import android.view.View
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
import com.simplemobiletools.commons.helpers.isLollipopPlus
|
||||
import com.simplemobiletools.contacts.R
|
||||
import com.simplemobiletools.contacts.adapters.ContactsAdapter
|
||||
import com.simplemobiletools.contacts.dialogs.CallConfirmationDialog
|
||||
import com.simplemobiletools.contacts.extensions.afterTextChanged
|
||||
import com.simplemobiletools.contacts.extensions.callContact
|
||||
import com.simplemobiletools.contacts.extensions.config
|
||||
import com.simplemobiletools.contacts.extensions.startCallIntent
|
||||
import com.simplemobiletools.contacts.helpers.ContactsHelper
|
||||
import com.simplemobiletools.contacts.helpers.KEY_PHONE
|
||||
import com.simplemobiletools.contacts.helpers.LOCATION_DIALPAD
|
||||
import com.simplemobiletools.contacts.models.Contact
|
||||
import kotlinx.android.synthetic.main.activity_dialpad.*
|
||||
|
||||
class DialpadActivity : SimpleActivity() {
|
||||
var contacts = ArrayList<Contact>()
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_dialpad)
|
||||
|
||||
dialpad_0_holder.setOnClickListener { dialpadPressed("0", it) }
|
||||
dialpad_1.setOnClickListener { dialpadPressed("1", it) }
|
||||
dialpad_2.setOnClickListener { dialpadPressed("2", it) }
|
||||
dialpad_3.setOnClickListener { dialpadPressed("3", it) }
|
||||
dialpad_4.setOnClickListener { dialpadPressed("4", it) }
|
||||
dialpad_5.setOnClickListener { dialpadPressed("5", it) }
|
||||
dialpad_6.setOnClickListener { dialpadPressed("6", it) }
|
||||
dialpad_7.setOnClickListener { dialpadPressed("7", it) }
|
||||
dialpad_8.setOnClickListener { dialpadPressed("8", it) }
|
||||
dialpad_9.setOnClickListener { dialpadPressed("9", it) }
|
||||
dialpad_0_holder.setOnLongClickListener { dialpadPressed("+", null); true }
|
||||
dialpad_asterisk.setOnClickListener { dialpadPressed("*", it) }
|
||||
dialpad_hashtag.setOnClickListener { dialpadPressed("#", it) }
|
||||
dialpad_clear_char.setOnClickListener { clearChar(it) }
|
||||
dialpad_clear_char.setOnLongClickListener { clearInput(); true }
|
||||
dialpad_call_button.setOnClickListener { initCall() }
|
||||
dialpad_input.afterTextChanged { dialpadValueChanged(it) }
|
||||
ContactsHelper(this).getContacts { gotContacts(it) }
|
||||
disableKeyboardPopping()
|
||||
|
||||
val callIcon = resources.getColoredDrawableWithColor(R.drawable.ic_phone_big, if (isBlackAndWhiteTheme()) Color.BLACK else Color.WHITE)
|
||||
dialpad_call_button.setImageDrawable(callIcon)
|
||||
dialpad_call_button.background.applyColorFilter(getAdjustedPrimaryColor())
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
updateTextColors(dialpad_holder)
|
||||
dialpad_clear_char.applyColorFilter(config.textColor)
|
||||
}
|
||||
|
||||
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
||||
menuInflater.inflate(R.menu.menu_dialpad, menu)
|
||||
return true
|
||||
}
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||
when (item.itemId) {
|
||||
R.id.add_number_to_contact -> addNumberToContact()
|
||||
else -> return super.onOptionsItemSelected(item)
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
private fun addNumberToContact() {
|
||||
Intent().apply {
|
||||
action = Intent.ACTION_INSERT_OR_EDIT
|
||||
type = "vnd.android.cursor.item/contact"
|
||||
putExtra(KEY_PHONE, dialpad_input.value)
|
||||
if (resolveActivity(packageManager) != null) {
|
||||
startActivity(this)
|
||||
} else {
|
||||
toast(R.string.no_app_found)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun dialpadPressed(char: String, view: View?) {
|
||||
dialpad_input.dispatchKeyEvent(getKeyEvent(getCharKeyCode(char)))
|
||||
view?.performHapticFeedback()
|
||||
}
|
||||
|
||||
private fun clearChar(view: View) {
|
||||
dialpad_input.dispatchKeyEvent(getKeyEvent(KeyEvent.KEYCODE_DEL))
|
||||
view.performHapticFeedback()
|
||||
}
|
||||
|
||||
private fun clearInput() {
|
||||
dialpad_input.setText("")
|
||||
}
|
||||
|
||||
private fun getKeyEvent(keyCode: Int) = KeyEvent(0, 0, KeyEvent.ACTION_DOWN, keyCode, 0)
|
||||
|
||||
private fun getCharKeyCode(char: String) = when (char) {
|
||||
"0" -> KeyEvent.KEYCODE_0
|
||||
"1" -> KeyEvent.KEYCODE_1
|
||||
"2" -> KeyEvent.KEYCODE_2
|
||||
"3" -> KeyEvent.KEYCODE_3
|
||||
"4" -> KeyEvent.KEYCODE_4
|
||||
"5" -> KeyEvent.KEYCODE_5
|
||||
"6" -> KeyEvent.KEYCODE_6
|
||||
"7" -> KeyEvent.KEYCODE_7
|
||||
"8" -> KeyEvent.KEYCODE_8
|
||||
"9" -> KeyEvent.KEYCODE_9
|
||||
"*" -> KeyEvent.KEYCODE_STAR
|
||||
"+" -> KeyEvent.KEYCODE_PLUS
|
||||
else -> KeyEvent.KEYCODE_POUND
|
||||
}
|
||||
|
||||
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
|
||||
private fun disableKeyboardPopping() {
|
||||
if (isLollipopPlus()) {
|
||||
dialpad_input.showSoftInputOnFocus = false
|
||||
} else {
|
||||
dialpad_input.inputType = InputType.TYPE_NULL
|
||||
}
|
||||
}
|
||||
|
||||
private fun gotContacts(newContacts: ArrayList<Contact>) {
|
||||
contacts = newContacts
|
||||
Contact.sorting = config.sorting
|
||||
Contact.startWithSurname = config.startNameWithSurname
|
||||
contacts.sort()
|
||||
}
|
||||
|
||||
private fun dialpadValueChanged(text: String) {
|
||||
(dialpad_list.adapter as? ContactsAdapter)?.finishActMode()
|
||||
val filtered = contacts.filter { it.doesContainPhoneNumber(text) } as ArrayList<Contact>
|
||||
|
||||
ContactsAdapter(this, filtered, null, LOCATION_DIALPAD, null, dialpad_list, dialpad_fastscroller, text) {
|
||||
callContact(it as Contact)
|
||||
}.apply {
|
||||
addVerticalDividers(true)
|
||||
dialpad_list.adapter = this
|
||||
}
|
||||
|
||||
dialpad_fastscroller.setScrollToY(0)
|
||||
dialpad_fastscroller.setViews(dialpad_list) {
|
||||
val item = (dialpad_list.adapter as ContactsAdapter).contactItems.getOrNull(it)
|
||||
dialpad_fastscroller.updateBubbleText(item?.getBubbleText() ?: "")
|
||||
}
|
||||
}
|
||||
|
||||
private fun initCall() {
|
||||
val number = dialpad_input.value
|
||||
if (number.isNotEmpty()) {
|
||||
if (config.showCallConfirmation) {
|
||||
CallConfirmationDialog(this, number) {
|
||||
startCallIntent(number)
|
||||
}
|
||||
} else {
|
||||
startCallIntent(number)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,5 +1,6 @@
|
||||
package com.simplemobiletools.contacts.activities
|
||||
|
||||
import android.app.Activity
|
||||
import android.app.DatePickerDialog
|
||||
import android.content.ClipData
|
||||
import android.content.ContentValues
|
||||
@ -13,6 +14,7 @@ import android.view.Menu
|
||||
import android.view.MenuItem
|
||||
import android.view.ViewGroup
|
||||
import android.view.WindowManager
|
||||
import android.widget.EditText
|
||||
import android.widget.ImageView
|
||||
import android.widget.TextView
|
||||
import com.simplemobiletools.commons.dialogs.RadioGroupDialog
|
||||
@ -50,6 +52,8 @@ class EditContactActivity : ContactActivity() {
|
||||
private var lastPhotoIntentUri: Uri? = null
|
||||
private var isSaving = false
|
||||
private var isThirdPartyIntent = false
|
||||
private var highlightLastPhoneNumber = false
|
||||
private var numberViewToColor: EditText? = null
|
||||
private var originalContactSource = ""
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
@ -58,7 +62,7 @@ class EditContactActivity : ContactActivity() {
|
||||
supportActionBar?.setHomeAsUpIndicator(R.drawable.ic_cross)
|
||||
|
||||
val action = intent.action
|
||||
isThirdPartyIntent = action == Intent.ACTION_EDIT || action == Intent.ACTION_INSERT_OR_EDIT || action == Intent.ACTION_INSERT
|
||||
isThirdPartyIntent = action == Intent.ACTION_EDIT || action == Intent.ACTION_INSERT || action == ADD_NEW_CONTACT_NUMBER
|
||||
val isFromSimpleContacts = intent.getBooleanExtra(IS_FROM_SIMPLE_CONTACTS, false)
|
||||
if (isThirdPartyIntent && !isFromSimpleContacts) {
|
||||
handlePermission(PERMISSION_READ_CONTACTS) {
|
||||
@ -119,7 +123,7 @@ class EditContactActivity : ContactActivity() {
|
||||
private fun initContact() {
|
||||
var contactId = intent.getIntExtra(CONTACT_ID, 0)
|
||||
val action = intent.action
|
||||
if (contactId == 0 && action == Intent.ACTION_EDIT) {
|
||||
if (contactId == 0 && (action == Intent.ACTION_EDIT || action == ADD_NEW_CONTACT_NUMBER)) {
|
||||
val data = intent.data
|
||||
if (data != null) {
|
||||
val rawId = if (data.path.contains("lookup")) {
|
||||
@ -149,11 +153,20 @@ class EditContactActivity : ContactActivity() {
|
||||
setupEditContact()
|
||||
}
|
||||
|
||||
if (contact!!.id == 0 && intent.extras?.containsKey(KEY_PHONE) == true && (action == Intent.ACTION_INSERT_OR_EDIT || action == Intent.ACTION_INSERT)) {
|
||||
val phoneNumber = intent.extras.get(KEY_PHONE)?.toString() ?: ""
|
||||
contact!!.phoneNumbers.add(PhoneNumber(phoneNumber, DEFAULT_PHONE_NUMBER_TYPE, ""))
|
||||
if ((contact!!.id == 0 && intent.extras != null && intent.extras.containsKey(KEY_PHONE) && action == Intent.ACTION_INSERT) || action == ADD_NEW_CONTACT_NUMBER) {
|
||||
val phone = intent.extras.get(KEY_PHONE)
|
||||
if (phone != null) {
|
||||
val phoneNumber = phone.toString()
|
||||
contact!!.phoneNumbers.add(PhoneNumber(phoneNumber, DEFAULT_PHONE_NUMBER_TYPE, ""))
|
||||
if (phoneNumber.isNotEmpty() && action == ADD_NEW_CONTACT_NUMBER) {
|
||||
highlightLastPhoneNumber = true
|
||||
}
|
||||
}
|
||||
|
||||
contact!!.firstName = intent.extras.get(KEY_NAME)?.toString() ?: ""
|
||||
val firstName = intent.extras.get(KEY_NAME)
|
||||
if (firstName != null) {
|
||||
contact!!.firstName = firstName.toString()
|
||||
}
|
||||
|
||||
val data = intent.extras.getParcelableArrayList<ContentValues>("data")
|
||||
if (data != null) {
|
||||
@ -230,6 +243,7 @@ class EditContactActivity : ContactActivity() {
|
||||
}
|
||||
|
||||
updateTextColors(contact_scrollview)
|
||||
numberViewToColor?.setTextColor(getAdjustedPrimaryColor())
|
||||
wasActivityInitialized = true
|
||||
invalidateOptionsMenu()
|
||||
}
|
||||
@ -373,6 +387,9 @@ class EditContactActivity : ContactActivity() {
|
||||
numberHolder!!.apply {
|
||||
contact_number.setText(number.value)
|
||||
setupPhoneNumberTypePicker(contact_number_type, number.type, number.label)
|
||||
if (highlightLastPhoneNumber && index == contact!!.phoneNumbers.size - 1) {
|
||||
numberViewToColor = contact_number
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -938,6 +955,7 @@ class EditContactActivity : ContactActivity() {
|
||||
contact!!.source = originalContactSource
|
||||
ContactsHelper(this).deleteContact(contact!!)
|
||||
}
|
||||
setResult(Activity.RESULT_OK)
|
||||
finish()
|
||||
} else {
|
||||
toast(R.string.unknown_error_occurred)
|
||||
@ -947,6 +965,7 @@ class EditContactActivity : ContactActivity() {
|
||||
private fun updateContact(photoUpdateStatus: Int) {
|
||||
isSaving = true
|
||||
if (ContactsHelper(this@EditContactActivity).updateContact(contact!!, photoUpdateStatus)) {
|
||||
setResult(Activity.RESULT_OK)
|
||||
finish()
|
||||
} else {
|
||||
toast(R.string.unknown_error_occurred)
|
||||
|
@ -0,0 +1,90 @@
|
||||
package com.simplemobiletools.contacts.activities
|
||||
|
||||
import android.app.Activity
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import android.provider.ContactsContract
|
||||
import com.simplemobiletools.commons.extensions.getAdjustedPrimaryColor
|
||||
import com.simplemobiletools.commons.extensions.getColoredDrawableWithColor
|
||||
import com.simplemobiletools.commons.extensions.toast
|
||||
import com.simplemobiletools.commons.extensions.updateTextColors
|
||||
import com.simplemobiletools.commons.helpers.PERMISSION_READ_CONTACTS
|
||||
import com.simplemobiletools.contacts.R
|
||||
import com.simplemobiletools.contacts.adapters.ContactsAdapter
|
||||
import com.simplemobiletools.contacts.extensions.config
|
||||
import com.simplemobiletools.contacts.extensions.getContactPublicUri
|
||||
import com.simplemobiletools.contacts.helpers.ADD_NEW_CONTACT_NUMBER
|
||||
import com.simplemobiletools.contacts.helpers.ContactsHelper
|
||||
import com.simplemobiletools.contacts.helpers.KEY_PHONE
|
||||
import com.simplemobiletools.contacts.helpers.LOCATION_INSERT_OR_EDIT
|
||||
import com.simplemobiletools.contacts.models.Contact
|
||||
import kotlinx.android.synthetic.main.activity_insert_edit_contact.*
|
||||
|
||||
class InsertOrEditContactActivity : SimpleActivity() {
|
||||
private val START_INSERT_ACTIVITY = 1
|
||||
private val START_EDIT_ACTIVITY = 2
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_insert_edit_contact)
|
||||
title = getString(R.string.select_contact)
|
||||
setupViews()
|
||||
|
||||
handlePermission(PERMISSION_READ_CONTACTS) {
|
||||
// we do not really care about the permission request result. Even if it was denied, load private contacts
|
||||
ContactsHelper(this).getContacts {
|
||||
gotContacts(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupViews() {
|
||||
updateTextColors(insert_edit_contact_holder)
|
||||
new_contact_tmb.setImageDrawable(resources.getColoredDrawableWithColor(R.drawable.ic_new_contact, config.textColor))
|
||||
new_contact_holder.setOnClickListener {
|
||||
Intent().apply {
|
||||
action = Intent.ACTION_INSERT
|
||||
data = ContactsContract.Contacts.CONTENT_URI
|
||||
putExtra(KEY_PHONE, intent.getStringExtra(KEY_PHONE))
|
||||
if (resolveActivity(packageManager) != null) {
|
||||
startActivityForResult(this, START_INSERT_ACTIVITY)
|
||||
} else {
|
||||
toast(R.string.no_app_found)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
existing_contact_label.setTextColor(getAdjustedPrimaryColor())
|
||||
}
|
||||
|
||||
private fun gotContacts(contacts: ArrayList<Contact>) {
|
||||
Contact.sorting = config.sorting
|
||||
Contact.startWithSurname = config.startNameWithSurname
|
||||
contacts.sort()
|
||||
|
||||
ContactsAdapter(this, contacts, null, LOCATION_INSERT_OR_EDIT, null, existing_contact_list, existing_contact_fastscroller) {
|
||||
Intent(applicationContext, EditContactActivity::class.java).apply {
|
||||
data = getContactPublicUri(it as Contact)
|
||||
action = ADD_NEW_CONTACT_NUMBER
|
||||
putExtra(KEY_PHONE, intent.getStringExtra(KEY_PHONE))
|
||||
startActivityForResult(this, START_EDIT_ACTIVITY)
|
||||
}
|
||||
}.apply {
|
||||
addVerticalDividers(true)
|
||||
existing_contact_list.adapter = this
|
||||
}
|
||||
|
||||
existing_contact_fastscroller.setScrollToY(0)
|
||||
existing_contact_fastscroller.setViews(existing_contact_list) {
|
||||
val item = (existing_contact_list.adapter as ContactsAdapter).contactItems.getOrNull(it)
|
||||
existing_contact_fastscroller.updateBubbleText(item?.getBubbleText() ?: "")
|
||||
}
|
||||
}
|
||||
|
||||
override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?) {
|
||||
super.onActivityResult(requestCode, resultCode, resultData)
|
||||
if (resultCode == Activity.RESULT_OK) {
|
||||
finish()
|
||||
}
|
||||
}
|
||||
}
|
@ -3,6 +3,7 @@ package com.simplemobiletools.contacts.activities
|
||||
import android.app.SearchManager
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.graphics.Color
|
||||
import android.graphics.drawable.ColorDrawable
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.net.Uri
|
||||
@ -163,6 +164,10 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
|
||||
}
|
||||
}
|
||||
isFirstResume = false
|
||||
|
||||
val dialpadIcon = resources.getColoredDrawableWithColor(R.drawable.ic_dialpad, if (isBlackAndWhiteTheme()) Color.BLACK else Color.WHITE)
|
||||
main_dialpad_button.setImageDrawable(dialpadIcon)
|
||||
main_dialpad_button.background.applyColorFilter(getAdjustedPrimaryColor())
|
||||
}
|
||||
|
||||
override fun onPause() {
|
||||
@ -369,6 +374,11 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
|
||||
}
|
||||
|
||||
main_tabs_holder.beVisibleIf(skippedTabs < 3)
|
||||
|
||||
main_dialpad_button.setOnClickListener {
|
||||
val intent = Intent(applicationContext, DialpadActivity::class.java)
|
||||
startActivity(intent)
|
||||
}
|
||||
}
|
||||
|
||||
private fun getTabIcon(position: Int): Drawable {
|
||||
@ -540,6 +550,7 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
|
||||
add(Release(27, R.string.release_27))
|
||||
add(Release(29, R.string.release_29))
|
||||
add(Release(31, R.string.release_31))
|
||||
add(Release(32, R.string.release_32))
|
||||
checkWhatsNew(this, BuildConfig.VERSION_CODE)
|
||||
}
|
||||
}
|
||||
|
@ -235,6 +235,12 @@ class ViewContactActivity : ContactActivity() {
|
||||
startCallIntent(phoneNumber.value)
|
||||
}
|
||||
}
|
||||
|
||||
setOnLongClickListener {
|
||||
copyToClipboard(phoneNumber.value)
|
||||
toast(R.string.value_copied_to_clipboard)
|
||||
true
|
||||
}
|
||||
}
|
||||
}
|
||||
contact_numbers_image.beVisible()
|
||||
|
@ -29,12 +29,12 @@ import java.util.*
|
||||
|
||||
class ContactsAdapter(activity: SimpleActivity, var contactItems: ArrayList<Contact>, private val refreshListener: RefreshContactsListener?,
|
||||
private val location: Int, private val removeListener: RemoveFromGroupListener?, recyclerView: MyRecyclerView,
|
||||
fastScroller: FastScroller, itemClick: (Any) -> Unit) :
|
||||
fastScroller: FastScroller, highlightText: String = "", itemClick: (Any) -> Unit) :
|
||||
MyRecyclerViewAdapter(activity, recyclerView, fastScroller, itemClick) {
|
||||
|
||||
private lateinit var contactDrawable: Drawable
|
||||
private var config = activity.config
|
||||
private var textToHighlight = ""
|
||||
private var textToHighlight = highlightText
|
||||
|
||||
var adjustedPrimaryColor = activity.getAdjustedPrimaryColor()
|
||||
var startNameWithSurname: Boolean
|
||||
@ -63,6 +63,8 @@ class ContactsAdapter(activity: SimpleActivity, var contactItems: ArrayList<Cont
|
||||
findItem(R.id.cab_send_sms_to_contacts).isVisible = location == LOCATION_CONTACTS_TAB || location == LOCATION_FAVORITES_TAB || location == LOCATION_GROUP_CONTACTS
|
||||
findItem(R.id.cab_send_email_to_contacts).isVisible = location == LOCATION_CONTACTS_TAB || location == LOCATION_FAVORITES_TAB || location == LOCATION_GROUP_CONTACTS
|
||||
findItem(R.id.cab_delete).isVisible = location == LOCATION_CONTACTS_TAB || location == LOCATION_GROUP_CONTACTS
|
||||
findItem(R.id.cab_select_all).isVisible = location != LOCATION_DIALPAD
|
||||
findItem(R.id.cab_share).isVisible = location != LOCATION_DIALPAD
|
||||
|
||||
if (location == LOCATION_GROUP_CONTACTS) {
|
||||
findItem(R.id.cab_remove).title = activity.getString(R.string.remove_from_group)
|
||||
@ -105,7 +107,8 @@ class ContactsAdapter(activity: SimpleActivity, var contactItems: ArrayList<Cont
|
||||
|
||||
override fun onBindViewHolder(holder: MyRecyclerViewAdapter.ViewHolder, position: Int) {
|
||||
val contact = contactItems[position]
|
||||
val view = holder.bindView(contact, true, true) { itemView, layoutPosition ->
|
||||
val allowLongClick = location != LOCATION_INSERT_OR_EDIT
|
||||
val view = holder.bindView(contact, true, allowLongClick) { itemView, layoutPosition ->
|
||||
setupView(itemView, contact)
|
||||
}
|
||||
bindViewHolder(holder, position, view)
|
||||
@ -260,7 +263,13 @@ class ContactsAdapter(activity: SimpleActivity, var contactItems: ArrayList<Cont
|
||||
contact_name.setPadding(if (showContactThumbnails) smallPadding else bigPadding, smallPadding, smallPadding, 0)
|
||||
|
||||
if (contact_number != null) {
|
||||
val numberText = contact.phoneNumbers.firstOrNull()?.value ?: ""
|
||||
val phoneNumberToUse = if (textToHighlight.isEmpty()) {
|
||||
contact.phoneNumbers.firstOrNull()
|
||||
} else {
|
||||
contact.phoneNumbers.firstOrNull { it.value.contains(textToHighlight) } ?: contact.phoneNumbers.firstOrNull()
|
||||
}
|
||||
|
||||
val numberText = phoneNumberToUse?.value ?: ""
|
||||
contact_number.text = if (textToHighlight.isEmpty()) numberText else numberText.highlightTextPart(textToHighlight, adjustedPrimaryColor)
|
||||
contact_number.setTextColor(textColor)
|
||||
contact_number.setPadding(if (showContactThumbnails) smallPadding else bigPadding, 0, smallPadding, 0)
|
||||
|
@ -62,8 +62,13 @@ fun SimpleActivity.startCall(contact: Contact) {
|
||||
|
||||
fun SimpleActivity.showContactSourcePicker(currentSource: String, callback: (newSource: String) -> Unit) {
|
||||
ContactsHelper(this).getContactSources {
|
||||
val ignoredTypes = arrayListOf(
|
||||
"org.thoughtcrime.securesms", // Signal
|
||||
"org.telegram.messenger" // Telegram
|
||||
)
|
||||
|
||||
val items = ArrayList<RadioItem>()
|
||||
val sources = it.map { it.name }
|
||||
val sources = it.filter { !ignoredTypes.contains(it.type) }.map { it.name }
|
||||
var currentSourceIndex = -1
|
||||
sources.forEachIndexed { index, account ->
|
||||
var publicAccount = account
|
||||
@ -203,14 +208,16 @@ fun Activity.getVisibleContactSources(): ArrayList<String> {
|
||||
|
||||
fun SimpleActivity.contactClicked(contact: Contact) {
|
||||
when (config.onContactClick) {
|
||||
ON_CLICK_CALL_CONTACT -> {
|
||||
if (contact.phoneNumbers.isNotEmpty()) {
|
||||
tryStartCall(contact)
|
||||
} else {
|
||||
toast(R.string.no_phone_number_found)
|
||||
}
|
||||
}
|
||||
ON_CLICK_CALL_CONTACT -> callContact(contact)
|
||||
ON_CLICK_VIEW_CONTACT -> viewContact(contact)
|
||||
ON_CLICK_EDIT_CONTACT -> editContact(contact)
|
||||
}
|
||||
}
|
||||
|
||||
fun SimpleActivity.callContact(contact: Contact) {
|
||||
if (contact.phoneNumbers.isNotEmpty()) {
|
||||
tryStartCall(contact)
|
||||
} else {
|
||||
toast(R.string.no_phone_number_found)
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,13 @@
|
||||
package com.simplemobiletools.contacts.extensions
|
||||
|
||||
import android.text.Editable
|
||||
import android.text.TextWatcher
|
||||
import android.widget.EditText
|
||||
|
||||
fun EditText.afterTextChanged(callback: (String) -> Unit) = addTextChangedListener(object : TextWatcher {
|
||||
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
|
||||
|
||||
override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {}
|
||||
|
||||
override fun afterTextChanged(text: Editable) = callback(text.toString())
|
||||
})
|
@ -2,6 +2,7 @@ package com.simplemobiletools.contacts.extensions
|
||||
|
||||
import android.widget.TextView
|
||||
import com.simplemobiletools.commons.helpers.getDateFormats
|
||||
import com.simplemobiletools.contacts.helpers.PHONE_NUMBER_PATTERN
|
||||
import org.joda.time.DateTime
|
||||
import org.joda.time.format.DateTimeFormat
|
||||
import java.text.DateFormat
|
||||
@ -32,3 +33,5 @@ fun String.getDateTimeFromDateString(viewToUpdate: TextView? = null): DateTime {
|
||||
}
|
||||
return date
|
||||
}
|
||||
|
||||
fun String.applyRegexFiltering() = replace(PHONE_NUMBER_PATTERN.toRegex(), "")
|
||||
|
@ -241,7 +241,7 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet)
|
||||
val filtered = contactsIgnoringSearch.filter {
|
||||
getProperText(it.getFullName(), shouldNormalize).contains(text, true) ||
|
||||
getProperText(it.nickname, shouldNormalize).contains(text, true) ||
|
||||
it.phoneNumbers.any { it.value.contains(text, true) } ||
|
||||
it.doesContainPhoneNumber(text) ||
|
||||
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) } ||
|
||||
|
@ -10,10 +10,10 @@ import com.simplemobiletools.commons.helpers.PERMISSION_READ_CALL_LOG
|
||||
import com.simplemobiletools.commons.helpers.PERMISSION_WRITE_CALL_LOG
|
||||
import com.simplemobiletools.contacts.activities.EditContactActivity
|
||||
import com.simplemobiletools.contacts.adapters.RecentCallsAdapter
|
||||
import com.simplemobiletools.contacts.extensions.applyRegexFiltering
|
||||
import com.simplemobiletools.contacts.extensions.contactClicked
|
||||
import com.simplemobiletools.contacts.helpers.IS_FROM_SIMPLE_CONTACTS
|
||||
import com.simplemobiletools.contacts.helpers.KEY_PHONE
|
||||
import com.simplemobiletools.contacts.helpers.PHONE_NUMBER_PATTERN
|
||||
import com.simplemobiletools.contacts.helpers.RECENTS_TAB_MASK
|
||||
import com.simplemobiletools.contacts.models.Contact
|
||||
import com.simplemobiletools.contacts.models.RecentCall
|
||||
@ -44,10 +44,10 @@ class RecentsFragment(context: Context, attributeSet: AttributeSet) : MyViewPage
|
||||
val currAdapter = fragment_list.adapter
|
||||
if (currAdapter == null) {
|
||||
RecentCallsAdapter(activity!!, recentCalls, activity, fragment_list, fragment_fastscroller) {
|
||||
val recentCall = (it as RecentCall).number.replace(PHONE_NUMBER_PATTERN.toRegex(), "")
|
||||
val recentCall = (it as RecentCall).number.applyRegexFiltering()
|
||||
var selectedContact: Contact? = null
|
||||
for (contact in allContacts) {
|
||||
if (contact.phoneNumbers.any { it.value.replace(PHONE_NUMBER_PATTERN.toRegex(), "") == recentCall }) {
|
||||
if (contact.phoneNumbers.any { it.value.applyRegexFiltering() == recentCall }) {
|
||||
selectedContact = contact
|
||||
break
|
||||
}
|
||||
|
@ -21,8 +21,9 @@ const val SMT_PRIVATE = "smt_private" // used at the contact source of local c
|
||||
const val IS_PRIVATE = "is_private"
|
||||
const val GROUP = "group"
|
||||
const val FIRST_GROUP_ID = 10000
|
||||
const val PHONE_NUMBER_PATTERN = "\\D+"
|
||||
const val PHONE_NUMBER_PATTERN = "[^0-9#*+]"
|
||||
const val IS_FROM_SIMPLE_CONTACTS = "is_from_simple_contacts"
|
||||
const val ADD_NEW_CONTACT_NUMBER = "add_new_contact_number"
|
||||
|
||||
// extras used at third party intents
|
||||
const val KEY_PHONE = "phone"
|
||||
@ -33,6 +34,8 @@ const val LOCATION_FAVORITES_TAB = 1
|
||||
const val LOCATION_RECENTS_TAB = 2
|
||||
const val LOCATION_GROUPS_TAB = 3
|
||||
const val LOCATION_GROUP_CONTACTS = 4
|
||||
const val LOCATION_DIALPAD = 5
|
||||
const val LOCATION_INSERT_OR_EDIT = 6
|
||||
|
||||
const val CONTACTS_TAB_MASK = 1
|
||||
const val FAVORITES_TAB_MASK = 2
|
||||
|
@ -166,7 +166,7 @@ class ContactsHelper(val activity: Activity) {
|
||||
if (filterDuplicates) {
|
||||
// remove all spaces, dashes etc from numbers for easier comparing, used only at list views
|
||||
numbers.forEach {
|
||||
numbers.mapTo(contacts[key].cleanPhoneNumbers) { PhoneNumber(it.value.replace(PHONE_NUMBER_PATTERN.toRegex(), ""), 0, "") }
|
||||
numbers.mapTo(contacts[key].cleanPhoneNumbers) { PhoneNumber(it.value.applyRegexFiltering(), 0, "") }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -16,6 +16,7 @@ import com.simplemobiletools.commons.extensions.getBlobValue
|
||||
import com.simplemobiletools.commons.extensions.getIntValue
|
||||
import com.simplemobiletools.commons.extensions.getLongValue
|
||||
import com.simplemobiletools.commons.extensions.getStringValue
|
||||
import com.simplemobiletools.contacts.extensions.applyRegexFiltering
|
||||
import com.simplemobiletools.contacts.extensions.config
|
||||
import com.simplemobiletools.contacts.extensions.getByteArray
|
||||
import com.simplemobiletools.contacts.extensions.getPhotoThumbnailSize
|
||||
@ -349,7 +350,7 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
|
||||
|
||||
val cleanPhoneNumbers = ArrayList<PhoneNumber>()
|
||||
if (filterDuplicates) {
|
||||
phoneNumbers.mapTo(cleanPhoneNumbers) { PhoneNumber(it.value.replace(PHONE_NUMBER_PATTERN.toRegex(), ""), 0, "") }
|
||||
phoneNumbers.mapTo(cleanPhoneNumbers) { PhoneNumber(it.value.applyRegexFiltering(), 0, "") }
|
||||
}
|
||||
|
||||
val contact = Contact(id, prefix, firstName, middleName, surname, suffix, nickname, "", phoneNumbers, emails, addresses,
|
||||
|
@ -138,6 +138,11 @@ class VcfImporter(val activity: SimpleActivity) {
|
||||
val contact = Contact(0, prefix, firstName, middleName, surname, suffix, nickname, photoUri, phoneNumbers, emails, addresses, events,
|
||||
targetContactSource, starred, contactId, thumbnailUri, photo, notes, groups, organization, websites, cleanPhoneNumbers, IMs)
|
||||
|
||||
// if there is no N and ORG fields at the given contact, only FN, treat it as an organization
|
||||
if (contact.getFullName().isEmpty() && contact.organization.isEmpty() && ezContact.formattedName.value.isNotEmpty()) {
|
||||
contact.organization.company = ezContact.formattedName.value
|
||||
}
|
||||
|
||||
if (ContactsHelper(activity).insertContact(contact)) {
|
||||
contactsImported++
|
||||
}
|
||||
|
@ -5,6 +5,7 @@ import com.simplemobiletools.commons.extensions.normalizeString
|
||||
import com.simplemobiletools.commons.helpers.SORT_BY_FIRST_NAME
|
||||
import com.simplemobiletools.commons.helpers.SORT_BY_MIDDLE_NAME
|
||||
import com.simplemobiletools.commons.helpers.SORT_DESCENDING
|
||||
import com.simplemobiletools.contacts.extensions.applyRegexFiltering
|
||||
|
||||
data class Contact(val id: Int, var prefix: String, var firstName: String, var middleName: String, var surname: String, var suffix: String, var nickname: String,
|
||||
var photoUri: String, var phoneNumbers: ArrayList<PhoneNumber>, var emails: ArrayList<Email>, var addresses: ArrayList<Address>,
|
||||
@ -104,4 +105,22 @@ data class Contact(val id: Int, var prefix: String, var firstName: String, var m
|
||||
}
|
||||
|
||||
fun getHashToCompare() = getStringToCompare().hashCode()
|
||||
|
||||
// do a more advanced phone number check here, compare numbers and and search query with dashes, spaces and everything but numbers removed
|
||||
fun doesContainPhoneNumber(text: String): Boolean {
|
||||
if (text.isNotEmpty()) {
|
||||
if (phoneNumbers.any { it.value.contains(text) } || cleanPhoneNumbers.any { it.value.contains(text) }) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
val filteredNumber = text.applyRegexFiltering()
|
||||
if (filteredNumber.isNotEmpty()) {
|
||||
if (phoneNumbers.any { it.value.contains(filteredNumber) } || cleanPhoneNumbers.any { it.value.contains(filteredNumber) }) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
BIN
app/src/main/res/drawable-hdpi/ic_clear_char.png
Normal file
After Width: | Height: | Size: 437 B |
BIN
app/src/main/res/drawable-hdpi/ic_dialpad.png
Normal file
After Width: | Height: | Size: 186 B |
BIN
app/src/main/res/drawable-hdpi/ic_new_contact.png
Normal file
After Width: | Height: | Size: 269 B |
BIN
app/src/main/res/drawable-xhdpi/ic_clear_char.png
Normal file
After Width: | Height: | Size: 524 B |
BIN
app/src/main/res/drawable-xhdpi/ic_dialpad.png
Normal file
After Width: | Height: | Size: 184 B |
BIN
app/src/main/res/drawable-xhdpi/ic_new_contact.png
Normal file
After Width: | Height: | Size: 322 B |
BIN
app/src/main/res/drawable-xxhdpi/ic_clear_char.png
Normal file
After Width: | Height: | Size: 732 B |
BIN
app/src/main/res/drawable-xxhdpi/ic_dialpad.png
Normal file
After Width: | Height: | Size: 250 B |
BIN
app/src/main/res/drawable-xxhdpi/ic_new_contact.png
Normal file
After Width: | Height: | Size: 421 B |
BIN
app/src/main/res/drawable-xxxhdpi/ic_clear_char.png
Normal file
After Width: | Height: | Size: 919 B |
BIN
app/src/main/res/drawable-xxxhdpi/ic_dialpad.png
Normal file
After Width: | Height: | Size: 336 B |
BIN
app/src/main/res/drawable-xxxhdpi/ic_new_contact.png
Normal file
After Width: | Height: | Size: 578 B |
246
app/src/main/res/layout/activity_dialpad.xml
Normal file
@ -0,0 +1,246 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<android.support.constraint.ConstraintLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:id="@+id/dialpad_holder"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:focusableInTouchMode="true">
|
||||
|
||||
<com.simplemobiletools.commons.views.MyRecyclerView
|
||||
android:id="@+id/dialpad_list"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:clipToPadding="false"
|
||||
android:scrollbars="none"
|
||||
app:layoutManager="com.simplemobiletools.commons.views.MyLinearLayoutManager"
|
||||
app:layout_constraintBottom_toTopOf="@+id/dialpad_input"
|
||||
app:layout_constraintTop_toTopOf="parent"/>
|
||||
|
||||
<com.simplemobiletools.commons.views.FastScroller
|
||||
android:id="@+id/dialpad_fastscroller"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="0dp"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:layout_alignParentRight="true"
|
||||
android:paddingStart="@dimen/normal_margin"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/dialpad_list"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toTopOf="@+id/dialpad_list">
|
||||
|
||||
<include layout="@layout/fastscroller_handle_vertical"/>
|
||||
|
||||
</com.simplemobiletools.commons.views.FastScroller>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/dialpad_divider"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:background="@drawable/divider"
|
||||
app:layout_constraintBottom_toTopOf="@+id/dialpad_input"/>
|
||||
|
||||
<com.simplemobiletools.commons.views.MyEditText
|
||||
android:id="@+id/dialpad_input"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/activity_margin"
|
||||
android:gravity="center"
|
||||
android:inputType="phone"
|
||||
android:textCursorDrawable="@null"
|
||||
android:textSize="@dimen/dialpad_text_size"
|
||||
app:layout_constraintBottom_toTopOf="@+id/dialpad_2"
|
||||
app:layout_constraintEnd_toStartOf="@+id/dialpad_clear_char"
|
||||
app:layout_constraintStart_toStartOf="parent"/>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/dialpad_clear_char"
|
||||
style="@style/MyBorderlessBackgroundStyle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="0dp"
|
||||
android:layout_marginRight="@dimen/activity_margin"
|
||||
android:paddingLeft="@dimen/activity_margin"
|
||||
android:paddingRight="@dimen/activity_margin"
|
||||
android:src="@drawable/ic_clear_char"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/dialpad_input"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toTopOf="@+id/dialpad_input"/>
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/dialpad_1"
|
||||
style="@style/DialpadNumberStyle"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/activity_margin"
|
||||
android:text="1"
|
||||
app:layout_constraintBottom_toTopOf="@+id/dialpad_4"
|
||||
app:layout_constraintEnd_toStartOf="@+id/dialpad_2"
|
||||
app:layout_constraintHorizontal_bias="0.5"
|
||||
app:layout_constraintStart_toStartOf="parent"/>
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/dialpad_2"
|
||||
style="@style/DialpadNumberStyle"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="2"
|
||||
app:layout_constraintBottom_toTopOf="@+id/dialpad_5"
|
||||
app:layout_constraintEnd_toStartOf="@+id/dialpad_3"
|
||||
app:layout_constraintHorizontal_bias="0.5"
|
||||
app:layout_constraintStart_toEndOf="@+id/dialpad_1"/>
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/dialpad_3"
|
||||
style="@style/DialpadNumberStyle"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginRight="@dimen/activity_margin"
|
||||
android:text="3"
|
||||
app:layout_constraintBottom_toTopOf="@+id/dialpad_6"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintHorizontal_bias="0.5"
|
||||
app:layout_constraintStart_toEndOf="@+id/dialpad_2"/>
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/dialpad_4"
|
||||
style="@style/DialpadNumberStyle"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/activity_margin"
|
||||
android:text="4"
|
||||
app:layout_constraintBottom_toTopOf="@+id/dialpad_7"
|
||||
app:layout_constraintEnd_toStartOf="@+id/dialpad_5"
|
||||
app:layout_constraintHorizontal_bias="0.5"
|
||||
app:layout_constraintStart_toStartOf="parent"/>
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/dialpad_5"
|
||||
style="@style/DialpadNumberStyle"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="5"
|
||||
app:layout_constraintBottom_toTopOf="@+id/dialpad_8"
|
||||
app:layout_constraintEnd_toStartOf="@+id/dialpad_6"
|
||||
app:layout_constraintHorizontal_bias="0.5"
|
||||
app:layout_constraintStart_toEndOf="@+id/dialpad_4"/>
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/dialpad_6"
|
||||
style="@style/DialpadNumberStyle"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginRight="@dimen/activity_margin"
|
||||
android:text="6"
|
||||
app:layout_constraintBottom_toTopOf="@+id/dialpad_9"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintHorizontal_bias="0.5"
|
||||
app:layout_constraintStart_toEndOf="@+id/dialpad_5"/>
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/dialpad_7"
|
||||
style="@style/DialpadNumberStyle"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/activity_margin"
|
||||
android:text="7"
|
||||
app:layout_constraintBottom_toTopOf="@+id/dialpad_asterisk"
|
||||
app:layout_constraintEnd_toStartOf="@+id/dialpad_8"
|
||||
app:layout_constraintHorizontal_bias="0.5"
|
||||
app:layout_constraintStart_toStartOf="parent"/>
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/dialpad_8"
|
||||
style="@style/DialpadNumberStyle"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="8"
|
||||
app:layout_constraintBottom_toTopOf="@+id/dialpad_0_holder"
|
||||
app:layout_constraintEnd_toStartOf="@+id/dialpad_9"
|
||||
app:layout_constraintHorizontal_bias="0.5"
|
||||
app:layout_constraintStart_toEndOf="@+id/dialpad_7"/>
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/dialpad_9"
|
||||
style="@style/DialpadNumberStyle"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginRight="@dimen/activity_margin"
|
||||
android:text="9"
|
||||
app:layout_constraintBottom_toTopOf="@+id/dialpad_hashtag"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintHorizontal_bias="0.5"
|
||||
app:layout_constraintStart_toEndOf="@+id/dialpad_8"/>
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/dialpad_asterisk"
|
||||
style="@style/DialpadNumberStyle"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/activity_margin"
|
||||
android:text="*"
|
||||
app:layout_constraintBottom_toTopOf="@+id/dialpad_call_button"
|
||||
app:layout_constraintEnd_toStartOf="@+id/dialpad_0_holder"
|
||||
app:layout_constraintHorizontal_bias="0.5"
|
||||
app:layout_constraintStart_toStartOf="parent"/>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/dialpad_0_holder"
|
||||
style="@style/MyBorderlessBackgroundStyle"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintBottom_toTopOf="@+id/dialpad_call_button"
|
||||
app:layout_constraintEnd_toStartOf="@+id/dialpad_hashtag"
|
||||
app:layout_constraintHorizontal_bias="0.5"
|
||||
app:layout_constraintStart_toEndOf="@+id/dialpad_asterisk">
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/dialpad_0"
|
||||
style="@style/DialpadNumberStyle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:text="0"/>
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/dialpad_plus"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignTop="@+id/dialpad_0"
|
||||
android:layout_alignBottom="@+id/dialpad_0"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:layout_toRightOf="@+id/dialpad_0"
|
||||
android:gravity="center"
|
||||
android:paddingLeft="@dimen/small_margin"
|
||||
android:paddingTop="@dimen/small_margin"
|
||||
android:text="+"
|
||||
android:textSize="@dimen/actionbar_text_size"/>
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/dialpad_hashtag"
|
||||
style="@style/DialpadNumberStyle"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginRight="@dimen/activity_margin"
|
||||
android:text="#"
|
||||
app:layout_constraintBottom_toTopOf="@+id/dialpad_call_button"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintHorizontal_bias="0.5"
|
||||
app:layout_constraintStart_toEndOf="@+id/dialpad_0_holder"/>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/dialpad_call_button"
|
||||
android:layout_width="@dimen/dialpad_button_size"
|
||||
android:layout_height="@dimen/dialpad_button_size"
|
||||
android:layout_marginBottom="@dimen/activity_margin"
|
||||
android:background="@drawable/circle_background"
|
||||
android:elevation="@dimen/medium_margin"
|
||||
android:padding="@dimen/normal_margin"
|
||||
android:src="@drawable/ic_phone_big"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"/>
|
||||
|
||||
</android.support.constraint.ConstraintLayout>
|
72
app/src/main/res/layout/activity_insert_edit_contact.xml
Normal file
@ -0,0 +1,72 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:id="@+id/insert_edit_contact_holder"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/new_contact_holder"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:paddingRight="@dimen/activity_margin">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/new_contact_tmb"
|
||||
android:layout_width="@dimen/normal_icon_size"
|
||||
android:layout_height="@dimen/normal_icon_size"
|
||||
android:layout_alignTop="@+id/new_contact_name"
|
||||
android:layout_alignBottom="@+id/new_contact_name"
|
||||
android:padding="@dimen/medium_margin"
|
||||
android:src="@drawable/ic_new_contact"/>
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/new_contact_name"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/create_new_contact_height"
|
||||
android:layout_toRightOf="@+id/new_contact_tmb"
|
||||
android:ellipsize="end"
|
||||
android:gravity="center_vertical"
|
||||
android:maxLines="1"
|
||||
android:text="@string/create_new_contact"
|
||||
android:textSize="@dimen/big_text_size"/>
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
<com.simplemobiletools.commons.views.MyTextView
|
||||
android:id="@+id/existing_contact_label"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/new_contact_holder"
|
||||
android:layout_marginStart="@dimen/bigger_margin"
|
||||
android:layout_marginLeft="@dimen/bigger_margin"
|
||||
android:layout_marginBottom="@dimen/activity_margin"
|
||||
android:text="@string/add_to_existing_contact"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="@dimen/smaller_text_size"/>
|
||||
|
||||
<com.simplemobiletools.commons.views.MyRecyclerView
|
||||
android:id="@+id/existing_contact_list"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_below="@+id/existing_contact_label"
|
||||
android:clipToPadding="false"
|
||||
android:scrollbars="none"
|
||||
app:layoutManager="com.simplemobiletools.commons.views.MyLinearLayoutManager"/>
|
||||
|
||||
<com.simplemobiletools.commons.views.FastScroller
|
||||
android:id="@+id/existing_contact_fastscroller"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_below="@+id/existing_contact_label"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:layout_alignParentRight="true"
|
||||
android:paddingStart="@dimen/normal_margin"
|
||||
android:paddingLeft="@dimen/normal_margin">
|
||||
|
||||
<include layout="@layout/fastscroller_handle_vertical"/>
|
||||
|
||||
</com.simplemobiletools.commons.views.FastScroller>
|
||||
</RelativeLayout>
|
@ -22,4 +22,16 @@
|
||||
android:layout_height="match_parent"
|
||||
android:layout_below="@+id/main_tabs_holder"/>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/main_dialpad_button"
|
||||
android:layout_width="@dimen/dialpad_button_size"
|
||||
android:layout_height="@dimen/dialpad_button_size"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:layout_marginBottom="@dimen/activity_margin"
|
||||
android:background="@drawable/circle_background"
|
||||
android:elevation="@dimen/medium_margin"
|
||||
android:padding="@dimen/activity_margin"
|
||||
android:src="@drawable/ic_dialpad"/>
|
||||
|
||||
</RelativeLayout>
|
||||
|
@ -13,13 +13,14 @@
|
||||
<RelativeLayout
|
||||
android:id="@+id/contact_holder"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/contact_item_height"
|
||||
android:layout_height="@dimen/contact_item_with_number_height"
|
||||
android:paddingTop="@dimen/tiny_margin"
|
||||
android:paddingRight="@dimen/activity_margin">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/contact_tmb"
|
||||
android:layout_width="@dimen/normal_icon_size"
|
||||
android:layout_height="@dimen/normal_icon_size"
|
||||
android:layout_height="match_parent"
|
||||
android:padding="@dimen/medium_margin"
|
||||
android:src="@drawable/ic_person"/>
|
||||
|
||||
@ -31,15 +32,15 @@
|
||||
android:layout_toRightOf="@+id/contact_tmb"
|
||||
android:ellipsize="end"
|
||||
android:maxLines="1"
|
||||
android:textSize="@dimen/bigger_text_size"
|
||||
android:textSize="@dimen/big_text_size"
|
||||
tools:text="John Doe"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/contact_number"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignLeft="@+id/contact_name"
|
||||
android:layout_below="@+id/contact_name"
|
||||
android:layout_alignLeft="@+id/contact_name"
|
||||
android:layout_toRightOf="@+id/contact_tmb"
|
||||
android:maxLines="1"
|
||||
android:textSize="@dimen/bigger_text_size"
|
||||
|
@ -14,16 +14,16 @@
|
||||
<android.support.constraint.ConstraintLayout
|
||||
android:id="@+id/recent_call_holder"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/contact_item_height"
|
||||
android:gravity="center_vertical"
|
||||
android:layout_height="@dimen/contact_item_with_number_height"
|
||||
android:paddingLeft="@dimen/activity_margin"
|
||||
android:paddingRight="@dimen/activity_margin">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/recent_call_name"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_height="0dp"
|
||||
android:ellipsize="end"
|
||||
android:gravity="center_vertical"
|
||||
android:maxLines="1"
|
||||
android:paddingRight="@dimen/activity_margin"
|
||||
android:textSize="@dimen/big_text_size"
|
||||
@ -39,6 +39,7 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/recent_call_name"
|
||||
android:maxLines="1"
|
||||
android:paddingBottom="@dimen/tiny_margin"
|
||||
android:textSize="@dimen/bigger_text_size"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toStartOf="@+id/recent_call_date_time"
|
||||
|
9
app/src/main/res/menu/menu_dialpad.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
<item
|
||||
android:id="@+id/add_number_to_contact"
|
||||
android:icon="@drawable/ic_plus"
|
||||
android:title="@string/add_number_to_contact"
|
||||
app:showAsAction="ifRoom"/>
|
||||
</menu>
|
@ -15,6 +15,8 @@
|
||||
<string name="send_email_to_group">Grupa e-poçt göndər</string>
|
||||
<string name="call_person">%s şəxsinə zng et</string>
|
||||
<string name="request_the_required_permissions">Lazım olan icazələri istə</string>
|
||||
<string name="create_new_contact">Create new contact</string>
|
||||
<string name="add_to_existing_contact">Add to an existing contact</string>
|
||||
|
||||
<string name="new_contact">Yeni kontakt</string>
|
||||
<string name="edit_contact">Redaktə et</string>
|
||||
@ -95,6 +97,10 @@
|
||||
<string name="include_contact_sources">Kontakt köklərini daxil et</string>
|
||||
<string name="filename_without_vcf">Fayl adı (.vcf olmadan)</string>
|
||||
|
||||
<!-- Dialpad -->
|
||||
<string name="dialpad">Dialpad</string>
|
||||
<string name="add_number_to_contact">Add number to contact</string>
|
||||
|
||||
<!-- Visible fields -->
|
||||
<string name="select_fields_to_show">Göstərmək üçün sahəni seç</string>
|
||||
<string name="prefix">Ön şəkilçi</string>
|
||||
|
@ -15,6 +15,8 @@
|
||||
<string name="send_email_to_group">Sende E-Mail an Gruppe</string>
|
||||
<string name="call_person">%s anrufen</string>
|
||||
<string name="request_the_required_permissions">Benötigte Berechtigungen anfordern</string>
|
||||
<string name="create_new_contact">Create new contact</string>
|
||||
<string name="add_to_existing_contact">Add to an existing contact</string>
|
||||
|
||||
<string name="new_contact">Neuer Kontakt</string>
|
||||
<string name="edit_contact">Kontakt bearbeiten</string>
|
||||
@ -95,6 +97,10 @@
|
||||
<string name="include_contact_sources">Kontaktquellen einschließen</string>
|
||||
<string name="filename_without_vcf">Dateiname (ohne .vcf)</string>
|
||||
|
||||
<!-- Dialpad -->
|
||||
<string name="dialpad">Dialpad</string>
|
||||
<string name="add_number_to_contact">Add number to contact</string>
|
||||
|
||||
<!-- Visible fields -->
|
||||
<string name="select_fields_to_show">Sichtbare Felder auswählen</string>
|
||||
<string name="prefix">Titel</string>
|
||||
|
@ -15,6 +15,8 @@
|
||||
<string name="send_email_to_group">Αποστολή email σε ομάδες</string>
|
||||
<string name="call_person">Κλήση %s</string>
|
||||
<string name="request_the_required_permissions">Ζητούνται τα απαιτούμενα δικαιώματα</string>
|
||||
<string name="create_new_contact">Create new contact</string>
|
||||
<string name="add_to_existing_contact">Add to an existing contact</string>
|
||||
|
||||
<string name="new_contact">Νέα επαφή</string>
|
||||
<string name="edit_contact">Επεξεργασία επαφής</string>
|
||||
@ -95,6 +97,10 @@
|
||||
<string name="include_contact_sources">Συμπερίληψη πηγών επαφών</string>
|
||||
<string name="filename_without_vcf">Όνομα αρχείου (χωρίς .vcf)</string>
|
||||
|
||||
<!-- Dialpad -->
|
||||
<string name="dialpad">Dialpad</string>
|
||||
<string name="add_number_to_contact">Add number to contact</string>
|
||||
|
||||
<!-- Visible fields -->
|
||||
<string name="select_fields_to_show">Επιλογή εμφάνισης πεδίων</string>
|
||||
<string name="prefix">Πρόθεμα</string>
|
||||
|
@ -123,7 +123,15 @@
|
||||
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
||||
<!-- Short description has to have less than 80 chars -->
|
||||
<string name="app_short_description">Une appli de contacts pour gérer vos contacts sans pubs.</string>
|
||||
<string name="app_long_description">Une appli simple pour créer et gérer vos contacts depuis n\'importe quelle source. Les contacts peuvent être stockés sur votre appareil mais aussi synchronisés via Google ou d\'autres comptes. Vous pouvez afficher vos contacts favoris dans une liste séparée. Vous pouvez l\'utiliser pour gérer les e-mail et événements de vos contacts. Elle permet de trier/filter via de multiples paramètres, et même afficher le surnom en premier. Aucune publicité ni de permission inutile. Elle est entièrement open source et vous permet de personnaliser les couleurs. Cette application fait parti d\'un groupe d\'applications. Vous pouvez trouver le reste des applis sur https://www.simplemobiletools.com</string>
|
||||
<string name="app_long_description">
|
||||
Une appli simple pour créer et gérer vos contacts depuis n\'importe quelle source. Les contacts peuvent être stockés sur votre appareil mais aussi synchronisés via Google ou d\'autres comptes. Vous pouvez afficher vos contacts favoris dans une liste séparée.
|
||||
|
||||
Vous pouvez l\'utiliser pour gérer les e-mail et événements de vos contacts. Elle permet de trier/filter via de multiples paramètres, et même afficher le surnom en premier.
|
||||
|
||||
Aucune publicité ni de permission inutile. Elle est entièrement open source et vous permet de personnaliser les couleurs.
|
||||
|
||||
Cette application fait parti d\'un groupe d\'applications. Vous pouvez trouver le reste des applis sur https://www.simplemobiletools.com
|
||||
</string>
|
||||
|
||||
<!--
|
||||
Haven't found some strings? There's more at
|
||||
|
@ -15,6 +15,8 @@
|
||||
<string name="send_email_to_group">Pošalji e-poštu grupi</string>
|
||||
<string name="call_person">Nazovi %s</string>
|
||||
<string name="request_the_required_permissions">Zatraži potrebna dopuštenja</string>
|
||||
<string name="create_new_contact">Create new contact</string>
|
||||
<string name="add_to_existing_contact">Add to an existing contact</string>
|
||||
|
||||
<string name="new_contact">Novi kontakt</string>
|
||||
<string name="edit_contact">Uredi kontakt</string>
|
||||
@ -95,6 +97,10 @@
|
||||
<string name="include_contact_sources">Uključi izvore kontakta</string>
|
||||
<string name="filename_without_vcf">Naziv datoteke (bez .vcf)</string>
|
||||
|
||||
<!-- Dialpad -->
|
||||
<string name="dialpad">Dialpad</string>
|
||||
<string name="add_number_to_contact">Add number to contact</string>
|
||||
|
||||
<!-- Visible fields -->
|
||||
<string name="select_fields_to_show">Odaberi polja za prikaz</string>
|
||||
<string name="prefix">Prefiks</string>
|
||||
|
140
app/src/main/res/values-it/strings.xml
Normal file
@ -0,0 +1,140 @@
|
||||
<resources>
|
||||
<string name="app_name">Simple Contacts</string>
|
||||
<string name="app_launcher_name">Contatti</string>
|
||||
<string name="address">Indirizzo</string>
|
||||
<string name="inserting">Inserimento in corso…</string>
|
||||
<string name="updating">Aggiornamento in corso…</string>
|
||||
<string name="phone_storage">Memoria del telefono</string>
|
||||
<string name="phone_storage_hidden">Memoria del telfono (non visibile alle altre applicazioni)</string>
|
||||
<string name="company">Compagnia</string>
|
||||
<string name="job_position">Posizione lavorativa</string>
|
||||
<string name="website">Sito web</string>
|
||||
<string name="send_sms_to_contacts">Invia un SMS ai contatti</string>
|
||||
<string name="send_email_to_contacts">Invia un\'email ai contatti</string>
|
||||
<string name="send_sms_to_group">Invia un SMS al gruppo</string>
|
||||
<string name="send_email_to_group">Invia un\'email al gruppo</string>
|
||||
<string name="call_person">Chiama %s</string>
|
||||
<string name="request_the_required_permissions">Richiedi le permissioni necessarie</string>
|
||||
<string name="create_new_contact">Crea un nuovo contatto</string>
|
||||
<string name="add_to_existing_contact">Aggiungi ad un contatto esistente</string>
|
||||
|
||||
<string name="new_contact">Nuovo contatto</string>
|
||||
<string name="edit_contact">Modifica contatto</string>
|
||||
<string name="select_contact">Seleziona contatto</string>
|
||||
<string name="select_contacts">Seleziona contatti</string>
|
||||
<string name="first_name">Nome</string>
|
||||
<string name="middle_name">Secondo nome</string>
|
||||
<string name="surname">Cognome</string>
|
||||
<string name="nickname">Soprannome</string>
|
||||
|
||||
<!-- Groups -->
|
||||
<string name="no_groups">Nessun gruppo</string>
|
||||
<string name="create_new_group">Crea un nuovo gruppo</string>
|
||||
<string name="remove_from_group">Rimuovi dal gruppo</string>
|
||||
<string name="no_group_participants">Questo gruppo è vuoto</string>
|
||||
<string name="add_contacts">Aggiungi contatti</string>
|
||||
<string name="no_group_created">Non ci sono gruppi con contatti nel dispositivo</string>
|
||||
<string name="create_group">Crea gruppo</string>
|
||||
<string name="add_to_group">Aggiungi al gruppo</string>
|
||||
<string name="create_group_under_account">Crea un gruppo con un account</string>
|
||||
|
||||
<!-- Photo -->
|
||||
<string name="take_photo">Scatta un foto</string>
|
||||
<string name="choose_photo">Scegli una foto</string>
|
||||
<string name="remove_photo">Rimuovi foto</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="start_name_with_surname">Prima il nome poi il cognome</string>
|
||||
<string name="show_phone_numbers">Mostra i numeri di telefono nella schermata principale</string>
|
||||
<string name="show_contact_thumbnails">Mostra le anteprime dei contatti</string>
|
||||
<string name="on_contact_click">Al click sul contatto</string>
|
||||
<string name="call_contact">Chiama contatto</string>
|
||||
<string name="view_contact">Visualizza i dettagli del contatto</string>
|
||||
<string name="manage_shown_contact_fields">Gestisci i campi mostrati</string>
|
||||
<string name="filter_duplicates">Prova a filetrare i contatti duplicati</string>
|
||||
<string name="manage_shown_tabs">Gestisci le schede mostrate</string>
|
||||
<string name="contacts">Contatti</string>
|
||||
<string name="favorites">Preferiti</string>
|
||||
<string name="recent_calls">Chiamate recenti</string>
|
||||
<string name="show_call_confirmation_dialog">Mostra un dialogo di conferma prima di iniziare una chiamata</string>
|
||||
|
||||
<!-- Emails -->
|
||||
<string name="email">Email</string>
|
||||
<string name="home">Casa</string>
|
||||
<string name="work">Lavoro</string>
|
||||
<string name="other">Altro</string>
|
||||
|
||||
<!-- Phone numbers -->
|
||||
<string name="number">Numero</string>
|
||||
<string name="mobile">Cellulare</string>
|
||||
<string name="main_number">Principale</string>
|
||||
<string name="work_fax">Fax di lavoro</string>
|
||||
<string name="home_fax">Fax di casa</string>
|
||||
<string name="pager">Cercapersone</string>
|
||||
<string name="no_phone_number_found">Non è stato trovato alcun numero di telefono</string>
|
||||
|
||||
<!-- Events -->
|
||||
<string name="birthday">Compleanno</string>
|
||||
<string name="anniversary">Anniversario</string>
|
||||
|
||||
<!-- Favorites -->
|
||||
<string name="no_favorites">Sembra che ancora non si ha nessun contatto preferito.</string>
|
||||
<string name="add_favorites">Aggiungi preferito</string>
|
||||
<string name="add_to_favorites">Aggiungi ai preferiti</string>
|
||||
<string name="remove_from_favorites">Rimuovi dai preferiti</string>
|
||||
<string name="must_be_at_edit">Devi stare nella schermata di modifica per modificare un contatto</string>
|
||||
|
||||
<!-- Search -->
|
||||
<string name="search_contacts">Cerca contatti</string>
|
||||
<string name="search_favorites">Cerca preferiti</string>
|
||||
|
||||
<!-- Export / Import -->
|
||||
<string name="import_contacts">Importa contatti</string>
|
||||
<string name="export_contacts">Esporta contatti</string>
|
||||
<string name="import_contacts_from_vcf">Importa contatti da un file .vcf</string>
|
||||
<string name="export_contacts_to_vcf">Esporta contatti in un file .vcf</string>
|
||||
<string name="target_contact_source">Individua la provenienza del contatto</string>
|
||||
<string name="include_contact_sources">Includi la provenienza del contatto</string>
|
||||
<string name="filename_without_vcf">Nome del file (senza .vcf)</string>
|
||||
|
||||
<!-- Dialpad -->
|
||||
<string name="dialpad">Tastiera</string>
|
||||
<string name="add_number_to_contact">Aggiungi numero ai contatti</string>
|
||||
|
||||
<!-- Visible fields -->
|
||||
<string name="select_fields_to_show">Seleziona i campi da mostrare</string>
|
||||
<string name="prefix">Prefisso</string>
|
||||
<string name="suffix">Suffisso</string>
|
||||
<string name="phone_numbers">Numeri di telefono</string>
|
||||
<string name="emails">Email</string>
|
||||
<string name="addresses">Indirizzi</string>
|
||||
<string name="events">Eventi (compleanni, anniversari)</string>
|
||||
<string name="notes">Note</string>
|
||||
<string name="organization">Organizazione</string>
|
||||
<string name="websites">Siti web</string>
|
||||
<string name="groups">Gruppi</string>
|
||||
<string name="contact_source">Provenienza del contatto</string>
|
||||
<string name="instant_messaging">Messaggistica istantanea (IM)</string>
|
||||
|
||||
<!-- FAQ -->
|
||||
<string name="faq_1_title">Voglio cambiare i campi visibili ai contatti. Come posso fare?</string>
|
||||
<string name="faq_1_text">Puoi farlo andando in Impostazioni -> Gestisci i campi mostrati. Qui puoi selezionare i campi che saranno visibili. Alcuni sono anche disabilitati in maniera predefinita, quindi potresti trovare qualche nuovo campo.</string>
|
||||
|
||||
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
||||
<!-- Short description has to have less than 80 chars -->
|
||||
<string name="app_short_description">Un\'applicazioni contatti per gestire i propri contatti senza pubblicità.</string>
|
||||
<string name="app_long_description">
|
||||
Una semplice applicazione per creare o gestire i propri contatti da qualsiasi provenienza. I contatti saranno salvati solamente nel dispositivo, ma possono essere sincronizzati con Google, o con altri servizi. Si possono visualizzare i contatti preferiti in una list separata.
|
||||
|
||||
Si può utilizzare l\'applicazione anche per gestire le email e gli eventi. Può ordinare e filtrare per parametri multipli, ed opzionalmente visualizzare il cognome come nome
|
||||
|
||||
Non contiene pubblicità nè chiede permessi non necessari. È completamente open source ed offre colori personalizzabili.
|
||||
|
||||
Quest\'app fa parte di una serie più grande. Puoi trovare le altre su https://www.simplemobiletools.com
|
||||
</string>
|
||||
|
||||
<!--
|
||||
Haven't found some strings? There's more at
|
||||
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
|
||||
-->
|
||||
</resources>
|
@ -15,6 +15,8 @@
|
||||
<string name="send_email_to_group">グループにメールを送信</string>
|
||||
<string name="call_person">Call %s</string>
|
||||
<string name="request_the_required_permissions">Request the required permissions</string>
|
||||
<string name="create_new_contact">新しい連絡先を作成</string>
|
||||
<string name="add_to_existing_contact">既存の連絡先に追加</string>
|
||||
|
||||
<string name="new_contact">新しい連絡先</string>
|
||||
<string name="edit_contact">連絡先を編集</string>
|
||||
@ -95,6 +97,10 @@
|
||||
<string name="include_contact_sources">Include contact sources</string>
|
||||
<string name="filename_without_vcf">ファイル名 (.vcfを含めない)</string>
|
||||
|
||||
<!-- Dialpad -->
|
||||
<string name="dialpad">ダイヤルパッド</string>
|
||||
<string name="add_number_to_contact">連絡先に番号を追加</string>
|
||||
|
||||
<!-- Visible fields -->
|
||||
<string name="select_fields_to_show">表示する項目を選択</string>
|
||||
<string name="prefix">敬称(名前の前)</string>
|
||||
|
@ -15,6 +15,8 @@
|
||||
<string name="send_email_to_group">Send email to group</string>
|
||||
<string name="call_person">Call %s</string>
|
||||
<string name="request_the_required_permissions">Request the required permissions</string>
|
||||
<string name="create_new_contact">Create new contact</string>
|
||||
<string name="add_to_existing_contact">Add to an existing contact</string>
|
||||
|
||||
<string name="new_contact">새로운 연락처</string>
|
||||
<string name="edit_contact">연락처 수정</string>
|
||||
@ -95,6 +97,10 @@
|
||||
<string name="include_contact_sources">가져오기 대상</string>
|
||||
<string name="filename_without_vcf">파일이름 (.vcf 확장자 생략)</string>
|
||||
|
||||
<!-- Dialpad -->
|
||||
<string name="dialpad">Dialpad</string>
|
||||
<string name="add_number_to_contact">Add number to contact</string>
|
||||
|
||||
<!-- Visible fields -->
|
||||
<string name="select_fields_to_show">Select fields to show</string>
|
||||
<string name="prefix">Prefix</string>
|
||||
|
@ -15,6 +15,8 @@
|
||||
<string name="send_email_to_group">Send email to group</string>
|
||||
<string name="call_person">Call %s</string>
|
||||
<string name="request_the_required_permissions">Request the required permissions</string>
|
||||
<string name="create_new_contact">Create new contact</string>
|
||||
<string name="add_to_existing_contact">Add to an existing contact</string>
|
||||
|
||||
<string name="new_contact">Naujas kontaktas</string>
|
||||
<string name="edit_contact">Redaguoti kontaktą</string>
|
||||
@ -95,6 +97,10 @@
|
||||
<string name="include_contact_sources">Įtraukti kontaktų šaltinius</string>
|
||||
<string name="filename_without_vcf">Bylos vardas (be .vcf)</string>
|
||||
|
||||
<!-- Dialpad -->
|
||||
<string name="dialpad">Dialpad</string>
|
||||
<string name="add_number_to_contact">Add number to contact</string>
|
||||
|
||||
<!-- Visible fields -->
|
||||
<string name="select_fields_to_show">Pasirinkti rodomus laukelius</string>
|
||||
<string name="prefix">Priešdėlis</string>
|
||||
|
@ -15,6 +15,8 @@
|
||||
<string name="send_email_to_group">Enviar e-mail para o grupo</string>
|
||||
<string name="call_person">Ligar a %s</string>
|
||||
<string name="request_the_required_permissions">Pedir a permissão necessária</string>
|
||||
<string name="create_new_contact">Create new contact</string>
|
||||
<string name="add_to_existing_contact">Add to an existing contact</string>
|
||||
|
||||
<string name="new_contact">Novo contacto</string>
|
||||
<string name="edit_contact">Editar contacto</string>
|
||||
@ -95,6 +97,10 @@
|
||||
<string name="include_contact_sources">Incluir fontes dos contactos</string>
|
||||
<string name="filename_without_vcf">Nome do ficheiro (sem .vcf)</string>
|
||||
|
||||
<!-- Dialpad -->
|
||||
<string name="dialpad">Dialpad</string>
|
||||
<string name="add_number_to_contact">Add number to contact</string>
|
||||
|
||||
<!-- Visible fields -->
|
||||
<string name="select_fields_to_show">Selecione os campos a mostrar</string>
|
||||
<string name="prefix">Prefixo</string>
|
||||
|
@ -15,6 +15,8 @@
|
||||
<string name="send_email_to_group">Отправить письмо группе</string>
|
||||
<string name="call_person">Вызов %s</string>
|
||||
<string name="request_the_required_permissions">Запрос необходимых разрешений</string>
|
||||
<string name="create_new_contact">Создать новый контакт</string>
|
||||
<string name="add_to_existing_contact">Добавить к существующему контакту</string>
|
||||
|
||||
<string name="new_contact">Новый контакт</string>
|
||||
<string name="edit_contact">Редактировать контакт</string>
|
||||
@ -34,7 +36,7 @@
|
||||
<string name="no_group_created">На устройстве нет групп контактов</string>
|
||||
<string name="create_group">Создать группу</string>
|
||||
<string name="add_to_group">Добавить в группу</string>
|
||||
<string name="create_group_under_account">Создать группу под учётной записью</string>
|
||||
<string name="create_group_under_account">Создать группу в учётной записи</string>
|
||||
|
||||
<!-- Photo -->
|
||||
<string name="take_photo">Снять фото</string>
|
||||
@ -89,12 +91,16 @@
|
||||
<!-- Export / Import -->
|
||||
<string name="import_contacts">Импортировать контакты</string>
|
||||
<string name="export_contacts">Экспортировать контакты</string>
|
||||
<string name="import_contacts_from_vcf">Импортировать контакты из vcf-файла</string>
|
||||
<string name="export_contacts_to_vcf">Экспортировать контакты в vcf-файл</string>
|
||||
<string name="import_contacts_from_vcf">Импортировать из vcf-файла</string>
|
||||
<string name="export_contacts_to_vcf">Экспортировать в vcf-файл</string>
|
||||
<string name="target_contact_source">Назначенный к обновлению источник контактов</string>
|
||||
<string name="include_contact_sources">Включить источники контактов</string>
|
||||
<string name="filename_without_vcf">Имя файла (без .vcf)</string>
|
||||
|
||||
<!-- Dialpad -->
|
||||
<string name="dialpad">Набор номера</string>
|
||||
<string name="add_number_to_contact">Добавить номер к контакту</string>
|
||||
|
||||
<!-- Visible fields -->
|
||||
<string name="select_fields_to_show">Выберите отображаемые поля</string>
|
||||
<string name="prefix">Префикс</string>
|
||||
|
@ -15,6 +15,8 @@
|
||||
<string name="send_email_to_group">Poslať skupine email</string>
|
||||
<string name="call_person">Zavolať %s</string>
|
||||
<string name="request_the_required_permissions">Vyžiadať potrebné oprávnenia</string>
|
||||
<string name="create_new_contact">Vytvoriť nový kontakt</string>
|
||||
<string name="add_to_existing_contact">Pridať k existujúcemu kontaktu</string>
|
||||
|
||||
<string name="new_contact">Nový kontakt</string>
|
||||
<string name="edit_contact">Upraviť kontakt</string>
|
||||
@ -95,6 +97,10 @@
|
||||
<string name="include_contact_sources">Zahrnúť zdroje kontaktov</string>
|
||||
<string name="filename_without_vcf">Názov súboru (bez .vcf)</string>
|
||||
|
||||
<!-- Dialpad -->
|
||||
<string name="dialpad">Číselník</string>
|
||||
<string name="add_number_to_contact">Pridať číslo kontaktu</string>
|
||||
|
||||
<!-- Visible fields -->
|
||||
<string name="select_fields_to_show">Zvoľte polia na zobrazenie</string>
|
||||
<string name="prefix">Titul pred menom</string>
|
||||
|
@ -15,6 +15,8 @@
|
||||
<string name="send_email_to_group">Skicka e-post till grupp</string>
|
||||
<string name="call_person">Ring %s</string>
|
||||
<string name="request_the_required_permissions">Begär de behörigheter som krävs</string>
|
||||
<string name="create_new_contact">Create new contact</string>
|
||||
<string name="add_to_existing_contact">Add to an existing contact</string>
|
||||
|
||||
<string name="new_contact">Ny kontakt</string>
|
||||
<string name="edit_contact">Redigera kontakt</string>
|
||||
@ -95,6 +97,10 @@
|
||||
<string name="include_contact_sources">Inkludera kontaktkällor</string>
|
||||
<string name="filename_without_vcf">Filnamn (utan .vcf)</string>
|
||||
|
||||
<!-- Dialpad -->
|
||||
<string name="dialpad">Dialpad</string>
|
||||
<string name="add_number_to_contact">Add number to contact</string>
|
||||
|
||||
<!-- Visible fields -->
|
||||
<string name="select_fields_to_show">Välj vilka fält som ska visas</string>
|
||||
<string name="prefix">Prefix</string>
|
||||
|
@ -15,6 +15,8 @@
|
||||
<string name="send_email_to_group">Gruba e-posta gönder</string>
|
||||
<string name="call_person">Call %s</string>
|
||||
<string name="request_the_required_permissions">Request the required permissions</string>
|
||||
<string name="create_new_contact">Create new contact</string>
|
||||
<string name="add_to_existing_contact">Add to an existing contact</string>
|
||||
|
||||
<string name="new_contact">Yeni kişi</string>
|
||||
<string name="edit_contact">Kişiyi düzenle</string>
|
||||
@ -95,6 +97,10 @@
|
||||
<string name="include_contact_sources">Kişi kaynaklarını dahil et</string>
|
||||
<string name="filename_without_vcf">Dosya adı (.vcf olmadan)</string>
|
||||
|
||||
<!-- Dialpad -->
|
||||
<string name="dialpad">Dialpad</string>
|
||||
<string name="add_number_to_contact">Add number to contact</string>
|
||||
|
||||
<!-- Visible fields -->
|
||||
<string name="select_fields_to_show">Görüntülenecek alanları seç</string>
|
||||
<string name="prefix">Önek</string>
|
||||
|
7
app/src/main/res/values-v21/styles.xml
Normal file
@ -0,0 +1,7 @@
|
||||
<resources>
|
||||
|
||||
<style name="DialpadNumberStyle" parent="DialpadNumberStyle.Base">
|
||||
<item name="android:background">?attr/selectableItemBackgroundBorderless</item>
|
||||
</style>
|
||||
|
||||
</resources>
|
@ -15,6 +15,8 @@
|
||||
<string name="send_email_to_group">發送電子郵件給群組</string>
|
||||
<string name="call_person">打電話給 %s</string>
|
||||
<string name="request_the_required_permissions">請求必要的權限</string>
|
||||
<string name="create_new_contact">建立新聯絡人</string>
|
||||
<string name="add_to_existing_contact">添加至已存在的聯絡人</string>
|
||||
|
||||
<string name="new_contact">新聯絡人</string>
|
||||
<string name="edit_contact">編輯聯絡人</string>
|
||||
@ -23,7 +25,7 @@
|
||||
<string name="first_name">名字</string>
|
||||
<string name="middle_name">中間名</string>
|
||||
<string name="surname">姓氏</string>
|
||||
<string name="nickname">Nickname</string>
|
||||
<string name="nickname">暱稱</string>
|
||||
|
||||
<!-- Groups -->
|
||||
<string name="no_groups">沒有群組</string>
|
||||
@ -95,6 +97,10 @@
|
||||
<string name="include_contact_sources">包含聯絡人來源</string>
|
||||
<string name="filename_without_vcf">檔案名稱 (不含.vcf)</string>
|
||||
|
||||
<!-- Dialpad -->
|
||||
<string name="dialpad">撥號畫面</string>
|
||||
<string name="add_number_to_contact">添加號碼至通訊錄</string>
|
||||
|
||||
<!-- Visible fields -->
|
||||
<string name="select_fields_to_show">選擇要顯示的欄位</string>
|
||||
<string name="prefix">前缀</string>
|
||||
@ -108,7 +114,7 @@
|
||||
<string name="websites">網站</string>
|
||||
<string name="groups">群組</string>
|
||||
<string name="contact_source">聯絡人來源</string>
|
||||
<string name="instant_messaging">Instant messaging (IM)</string>
|
||||
<string name="instant_messaging">即時通訊 (IM)</string>
|
||||
|
||||
<!-- FAQ -->
|
||||
<string name="faq_1_title">我想要更改在通訊錄會看到哪些欄位。我能這麼做嗎?</string>
|
||||
|
@ -4,4 +4,8 @@
|
||||
<dimen name="contact_actions_size">45dp</dimen>
|
||||
<dimen name="contact_icons_size">40dp</dimen>
|
||||
<dimen name="contact_item_height">52dp</dimen>
|
||||
<dimen name="contact_item_with_number_height">56dp</dimen>
|
||||
<dimen name="create_new_contact_height">68dp</dimen>
|
||||
<dimen name="dialpad_button_size">60dp</dimen>
|
||||
<dimen name="dialpad_text_size">34sp</dimen>
|
||||
</resources>
|
||||
|
@ -12,6 +12,7 @@
|
||||
<string name="jabber">Jabber</string>
|
||||
|
||||
<!-- Release notes -->
|
||||
<string name="release_32">Added a simple dialpad, dialer will come soon</string>
|
||||
<string name="release_31">
|
||||
Added an optional IM field\n
|
||||
Added support for custom phone number/email/address types
|
||||
|
@ -15,6 +15,8 @@
|
||||
<string name="send_email_to_group">Send email to group</string>
|
||||
<string name="call_person">Call %s</string>
|
||||
<string name="request_the_required_permissions">Request the required permissions</string>
|
||||
<string name="create_new_contact">Create new contact</string>
|
||||
<string name="add_to_existing_contact">Add to an existing contact</string>
|
||||
|
||||
<string name="new_contact">New contact</string>
|
||||
<string name="edit_contact">Edit contact</string>
|
||||
@ -95,6 +97,10 @@
|
||||
<string name="include_contact_sources">Include contact sources</string>
|
||||
<string name="filename_without_vcf">Filename (without .vcf)</string>
|
||||
|
||||
<!-- Dialpad -->
|
||||
<string name="dialpad">Dialpad</string>
|
||||
<string name="add_number_to_contact">Add number to contact</string>
|
||||
|
||||
<!-- Visible fields -->
|
||||
<string name="select_fields_to_show">Select fields to show</string>
|
||||
<string name="prefix">Prefix</string>
|
||||
|
@ -2,4 +2,15 @@
|
||||
|
||||
<style name="AppTheme" parent="AppTheme.Base"/>
|
||||
|
||||
<style name="DialpadNumberStyle.Base">
|
||||
<item name="android:gravity">center</item>
|
||||
<item name="android:paddingBottom">@dimen/medium_margin</item>
|
||||
<item name="android:paddingTop">@dimen/normal_margin</item>
|
||||
<item name="android:textSize">@dimen/dialpad_text_size</item>
|
||||
</style>
|
||||
|
||||
<style name="DialpadNumberStyle" parent="DialpadNumberStyle.Base">
|
||||
<item name="android:background">?attr/selectableItemBackground</item>
|
||||
</style>
|
||||
|
||||
</resources>
|
||||
|
@ -1,7 +1,7 @@
|
||||
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
||||
|
||||
buildscript {
|
||||
ext.kotlin_version = '1.2.61'
|
||||
ext.kotlin_version = '1.2.71'
|
||||
|
||||
repositories {
|
||||
google()
|
||||
@ -9,7 +9,7 @@ buildscript {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:3.1.4'
|
||||
classpath 'com.android.tools.build:gradle:3.2.0'
|
||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||
|
||||
// NOTE: Do not place your application dependencies here; they belong
|
||||
|
4
gradle/wrapper/gradle-wrapper.properties
vendored
@ -1,6 +1,6 @@
|
||||
#Sun Dec 10 10:08:39 CET 2017
|
||||
#Tue Sep 25 13:09:34 CEST 2018
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-4.4.1-all.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip
|
||||
|