From bd83bd5643d33c3faae7aea7ea3f90f6441144be Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 6 Apr 2018 20:58:22 +0200 Subject: [PATCH] more improvements related to using the app without the Contacts permission --- .../activities/EditContactActivity.kt | 22 +------ .../contacts/activities/MainActivity.kt | 14 ++--- .../activities/ViewContactActivity.kt | 14 +---- .../contacts/helpers/ContactsHelper.kt | 59 +++++++++++-------- 4 files changed, 44 insertions(+), 65 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/activities/EditContactActivity.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/activities/EditContactActivity.kt index 71c74a5a..9e7fe652 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/activities/EditContactActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/activities/EditContactActivity.kt @@ -16,8 +16,6 @@ import android.widget.ImageView import android.widget.TextView import com.simplemobiletools.commons.dialogs.RadioGroupDialog import com.simplemobiletools.commons.extensions.* -import com.simplemobiletools.commons.helpers.PERMISSION_READ_CONTACTS -import com.simplemobiletools.commons.helpers.PERMISSION_WRITE_CONTACTS import com.simplemobiletools.commons.models.RadioItem import com.simplemobiletools.contacts.R import com.simplemobiletools.contacts.dialogs.SelectGroupsDialog @@ -58,22 +56,7 @@ class EditContactActivity : ContactActivity() { super.onCreate(savedInstanceState) setContentView(R.layout.activity_edit_contact) supportActionBar?.setHomeAsUpIndicator(R.drawable.ic_cross) - - handlePermission(PERMISSION_READ_CONTACTS) { - if (it) { - handlePermission(PERMISSION_WRITE_CONTACTS) { - if (it) { - initContact() - } else { - toast(R.string.no_contacts_permission) - finish() - } - } - } else { - toast(R.string.no_contacts_permission) - finish() - } - } + initContact() } override fun onCreateOptionsMenu(menu: Menu): Boolean { @@ -378,7 +361,8 @@ class EditContactActivity : ContactActivity() { private fun setupNewContact() { window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE) supportActionBar?.title = resources.getString(R.string.new_contact) - contact = Contact(0, "", "", "", "", ArrayList(), ArrayList(), ArrayList(), ArrayList(), config.lastUsedContactSource, 0, 0, "", null, "", ArrayList()) + val contactSource = if (hasContactPermissions()) config.lastUsedContactSource else SMT_PRIVATE + contact = Contact(0, "", "", "", "", ArrayList(), ArrayList(), ArrayList(), ArrayList(), contactSource, 0, 0, "", null, "", ArrayList()) contact_source.text = getPublicContactSource(contact!!.source) contact_source.setOnClickListener { showContactSourcePicker(contact!!.source) { diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/activities/MainActivity.kt index c79686bf..f9467b4e 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/activities/MainActivity.kt @@ -36,9 +36,9 @@ import kotlinx.android.synthetic.main.fragment_groups.* import java.io.FileOutputStream class MainActivity : SimpleActivity(), RefreshContactsListener { - private var isFirstResume = true private var isSearchOpen = false private var searchMenuItem: MenuItem? = null + private var werePermissionsHandled = false private var storedTextColor = 0 private var storedBackgroundColor = 0 @@ -57,6 +57,7 @@ class MainActivity : SimpleActivity(), RefreshContactsListener { dbHelper handlePermission(PERMISSION_READ_CONTACTS) { + werePermissionsHandled = true if (it) { handlePermission(PERMISSION_WRITE_CONTACTS) { storeLocalAccountData() @@ -115,7 +116,7 @@ class MainActivity : SimpleActivity(), RefreshContactsListener { favorites_fragment?.startNameWithSurnameChanged(configStartNameWithSurname) } - if (!isFirstResume) { + if (werePermissionsHandled) { if (viewpager.adapter == null) { initFragments() } @@ -125,10 +126,6 @@ class MainActivity : SimpleActivity(), RefreshContactsListener { } refreshContacts(ALL_TABS_MASK) } - - if (hasPermission(PERMISSION_WRITE_CONTACTS)) { - isFirstResume = false - } } override fun onPause() { @@ -388,7 +385,10 @@ class MainActivity : SimpleActivity(), RefreshContactsListener { } private fun launchAbout() { - val faqItems = arrayListOf(FAQItem(R.string.faq_2_title_commons, R.string.faq_2_text_commons)) + val faqItems = arrayListOf( + FAQItem(R.string.faq_2_title_commons, R.string.faq_2_text_commons) + ) + startAboutActivity(R.string.app_name, LICENSE_MULTISELECT or LICENSE_JODA or LICENSE_GLIDE or LICENSE_GSON or LICENSE_STETHO, BuildConfig.VERSION_NAME, faqItems) } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/activities/ViewContactActivity.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/activities/ViewContactActivity.kt index d9c17a46..4d43567f 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/activities/ViewContactActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/activities/ViewContactActivity.kt @@ -9,7 +9,6 @@ import android.view.MenuItem import android.view.WindowManager import android.widget.RelativeLayout import com.simplemobiletools.commons.extensions.* -import com.simplemobiletools.commons.helpers.PERMISSION_READ_CONTACTS import com.simplemobiletools.contacts.R import com.simplemobiletools.contacts.extensions.* import com.simplemobiletools.contacts.helpers.CONTACT_ID @@ -30,7 +29,7 @@ class ViewContactActivity : ContactActivity() { override fun onResume() { super.onResume() - tryInitContact() + initContact() } override fun onCreateOptionsMenu(menu: Menu): Boolean { @@ -48,17 +47,6 @@ class ViewContactActivity : ContactActivity() { return true } - private fun tryInitContact() { - handlePermission(PERMISSION_READ_CONTACTS) { - if (it) { - initContact() - } else { - toast(R.string.no_contacts_permission) - finish() - } - } - } - private fun initContact() { var wasLookupKeyUsed = false var contactId = intent.getIntExtra(CONTACT_ID, 0) diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/ContactsHelper.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/ContactsHelper.kt index 3d3b73d3..0f427818 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/ContactsHelper.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/ContactsHelper.kt @@ -25,8 +25,8 @@ import com.simplemobiletools.contacts.models.* class ContactsHelper(val activity: BaseSimpleActivity) { fun getContacts(callback: (ArrayList) -> Unit) { - val contacts = SparseArray() Thread { + val contacts = SparseArray() getDeviceContacts(contacts) activity.dbHelper.getContacts(activity).forEach { @@ -519,37 +519,44 @@ class ContactsHelper(val activity: BaseSimpleActivity) { } fun getContactSources(callback: (ArrayList) -> Unit) { - val sources = LinkedHashSet() Thread { - val uri = ContactsContract.RawContacts.CONTENT_URI - val projection = arrayOf(ContactsContract.RawContacts.ACCOUNT_NAME, ContactsContract.RawContacts.ACCOUNT_TYPE) - - var cursor: Cursor? = null - try { - cursor = activity.contentResolver.query(uri, projection, null, null, null) - if (cursor?.moveToFirst() == true) { - do { - val name = cursor.getStringValue(ContactsContract.RawContacts.ACCOUNT_NAME) ?: continue - val type = cursor.getStringValue(ContactsContract.RawContacts.ACCOUNT_TYPE) ?: continue - val contactSource = ContactSource(name, type) - sources.add(contactSource) - } while (cursor.moveToNext()) - } - } catch (e: Exception) { - activity.showErrorToast(e) - } finally { - cursor?.close() - } - - if (sources.isEmpty() && activity.config.localAccountName.isEmpty() && activity.config.localAccountType.isEmpty()) { - sources.add(ContactSource("", "")) - } - + val sources = LinkedHashSet() + getDeviceContactSources(sources) sources.add(ContactSource(activity.getString(R.string.phone_storage_hidden), SMT_PRIVATE)) callback(ArrayList(sources)) }.start() } + private fun getDeviceContactSources(sources: LinkedHashSet) { + if (!activity.hasContactPermissions()) { + return + } + + val uri = ContactsContract.RawContacts.CONTENT_URI + val projection = arrayOf(ContactsContract.RawContacts.ACCOUNT_NAME, ContactsContract.RawContacts.ACCOUNT_TYPE) + + var cursor: Cursor? = null + try { + cursor = activity.contentResolver.query(uri, projection, null, null, null) + if (cursor?.moveToFirst() == true) { + do { + val name = cursor.getStringValue(ContactsContract.RawContacts.ACCOUNT_NAME) ?: continue + val type = cursor.getStringValue(ContactsContract.RawContacts.ACCOUNT_TYPE) ?: continue + val contactSource = ContactSource(name, type) + sources.add(contactSource) + } while (cursor.moveToNext()) + } + } catch (e: Exception) { + activity.showErrorToast(e) + } finally { + cursor?.close() + } + + if (sources.isEmpty() && activity.config.localAccountName.isEmpty() && activity.config.localAccountType.isEmpty()) { + sources.add(ContactSource("", "")) + } + } + private fun getContactSourceType(accountName: String): String { if (accountName.isEmpty()) { return ""