Skip to content

Commit 199906f

Browse files
committed
4.0.0
1 parent 1618674 commit 199906f

File tree

177 files changed

+2227
-4156
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

177 files changed

+2227
-4156
lines changed

app/build.gradle

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ android {
1616
applicationId "com.goodwy.contacts"
1717
minSdkVersion 23
1818
targetSdkVersion 33
19-
versionCode 310
20-
versionName "3.1.0"
19+
versionCode 400
20+
versionName "4.0.0"
2121
setProperty("archivesBaseName", "contacts")
2222
buildConfigField("String", "GOOGLE_PLAY_LICENSING_KEY", "\"${getProperty(getProperties('local.properties'), 'GOOGLE_PLAY_LICENSE_KEY')}\"")
2323
buildConfigField("String", "PRODUCT_ID_X1", "\"${getProperty(getProperties('local.properties'), 'PRODUCT_ID_X1')}\"")
@@ -86,11 +86,12 @@ dependencies {
8686
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
8787
implementation 'com.anjlab.android.iab.v3:library:2.0.3'
8888
implementation 'me.grantland:autofittextview:0.2.1'
89+
implementation 'com.mikhaellopez:rxanimation:2.1.0'
8990
implementation 'com.github.Liverm0r:BehavioRule:1.0.1'
9091

91-
kapt "androidx.room:room-compiler:2.4.3"
92-
implementation "androidx.room:room-runtime:2.4.3"
93-
annotationProcessor "androidx.room:room-compiler:2.4.3"
92+
kapt "androidx.room:room-compiler:2.5.0"
93+
implementation "androidx.room:room-runtime:2.5.0"
94+
annotationProcessor "androidx.room:room-compiler:2.5.0"
9495

9596
implementation 'com.andrognito.patternlockview:patternlockview:1.0.0'
9697
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
@@ -101,12 +102,13 @@ dependencies {
101102
implementation "androidx.biometric:biometric-ktx:1.2.0-alpha04"
102103
implementation 'com.anjlab.android.iab.v3:library:2.0.3'
103104

104-
implementation 'joda-time:joda-time:2.10.13'
105-
api 'com.github.tibbi:RecyclerView-FastScroller:2a56457fef'
106-
api 'androidx.core:core-ktx:1.6.0'
107-
api 'com.google.android.material:material:1.8.0-alpha01'
108-
api 'com.google.code.gson:gson:2.8.8'
109-
api 'com.duolingo.open:rtl-viewpager:1.0.3'
105+
implementation 'joda-time:joda-time:2.11.0'
106+
api "com.github.goodwy:RecyclerView-FastScroller:cd067e83e4"
107+
//api 'com.github.tibbi:RecyclerView-FastScroller:2a56457fef'
108+
api 'androidx.core:core-ktx:1.8.0'
109+
api 'com.google.android.material:material:1.8.0'
110+
api 'com.google.code.gson:gson:2.9.1'
111+
api 'com.duolingo.open:rtl-viewpager:2.0.0'
110112

111113
api 'com.github.bumptech.glide:glide:4.13.2'
112114
annotationProcessor 'com.github.bumptech.glide:compiler:4.13.2'

app/libs/commons-debug.aar

562 KB
Binary file not shown.

app/src/main/AndroidManifest.xml

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,12 @@
2222
<queries>
2323
<package android:name="com.goodwy.dialer.debug" />
2424
<package android:name="com.goodwy.dialer" />
25+
<package android:name="com.goodwy.contacts.debug" />
26+
<package android:name="com.goodwy.contacts" />
27+
<package android:name="com.goodwy.contacts.debug" />
28+
<package android:name="com.goodwy.contacts" />
29+
<package android:name="com.goodwy.smsmessenger.debug" />
30+
<package android:name="com.goodwy.smsmessenger" />
2531
</queries>
2632

2733
<uses-feature
@@ -45,6 +51,7 @@
4551

4652
<activity
4753
android:name=".activities.MainActivity"
54+
android:configChanges="orientation"
4855
android:exported="true">
4956

5057
<intent-filter>
@@ -60,6 +67,7 @@
6067

6168
<activity
6269
android:name=".activities.SettingsActivity"
70+
android:configChanges="orientation"
6371
android:exported="true"
6472
android:label="@string/settings"
6573
android:parentActivityName=".activities.MainActivity">
@@ -72,11 +80,13 @@
7280

7381
<activity
7482
android:name=".activities.GroupContactsActivity"
83+
android:configChanges="orientation"
7584
android:exported="false"
7685
android:parentActivityName=".activities.MainActivity" />
7786

7887
<activity
7988
android:name=".activities.ViewContactActivity"
89+
android:configChanges="orientation"
8090
android:exported="true"
8191
android:label="@string/details"
8292
android:parentActivityName=".activities.MainActivity"
@@ -113,6 +123,7 @@
113123

114124
<activity
115125
android:name=".activities.EditContactActivity"
126+
android:configChanges="orientation"
116127
android:exported="true"
117128
android:parentActivityName=".activities.MainActivity"
118129
android:theme="@style/TranslucentTheme">
@@ -155,17 +166,10 @@
155166

156167
<activity
157168
android:name=".activities.InsertOrEditContactActivity"
169+
android:configChanges="orientation"
158170
android:exported="true"
159171
android:label="@string/select_contact">
160172

161-
<meta-data
162-
android:name="android.app.default_searchable"
163-
android:resource="@xml/searchable" />
164-
165-
<intent-filter>
166-
<action android:name="android.intent.action.SEARCH" />
167-
</intent-filter>
168-
169173
<intent-filter>
170174
<action android:name="android.intent.action.INSERT_OR_EDIT" />
171175
<category android:name="android.intent.category.DEFAULT" />
@@ -195,18 +199,21 @@
195199

196200
<activity
197201
android:name="com.goodwy.commons.activities.PurchaseActivity"
202+
android:configChanges="orientation"
198203
android:exported="false"
199204
android:label=""
200205
android:parentActivityName=".activities.MainActivity" />
201206

202207
<activity
203208
android:name="com.goodwy.commons.activities.AboutActivity"
209+
android:configChanges="orientation"
204210
android:exported="false"
205211
android:label="@string/about"
206212
android:parentActivityName=".activities.MainActivity" />
207213

208214
<activity
209215
android:name="com.goodwy.commons.activities.CustomizationActivity"
216+
android:configChanges="orientation"
210217
android:exported="false"
211218
android:label="@string/customize_colors"
212219
android:parentActivityName=".activities.SettingsActivity" />

app/src/main/kotlin/com/goodwy/contacts/App.kt

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import android.app.Application
44
import com.anjlab.android.iab.v3.BillingProcessor
55
import com.anjlab.android.iab.v3.PurchaseInfo
66
import com.goodwy.commons.extensions.checkUseEnglish
7+
import com.goodwy.commons.extensions.isPackageInstalled
78
import com.goodwy.commons.extensions.toast
89

910
class App : Application() {
@@ -39,10 +40,18 @@ class App : Application() {
3940
companion object {
4041
private var instance: App? = null
4142

43+
fun isPlayStoreInstalled(): Boolean {
44+
return instance!!.isPackageInstalled("com.android.vending")
45+
|| instance!!.isPackageInstalled("com.google.market")
46+
}
47+
4248
fun isProVersion(): Boolean {
43-
return instance!!.billingProcessor.isPurchased(BuildConfig.PRODUCT_ID_X1)
44-
|| instance!!.billingProcessor.isPurchased(BuildConfig.PRODUCT_ID_X2)
45-
|| instance!!.billingProcessor.isPurchased(BuildConfig.PRODUCT_ID_X3)
49+
return if (isPlayStoreInstalled()) {
50+
(instance!!.billingProcessor.isPurchased(BuildConfig.PRODUCT_ID_X1)
51+
|| instance!!.billingProcessor.isPurchased(BuildConfig.PRODUCT_ID_X2)
52+
|| instance!!.billingProcessor.isPurchased(BuildConfig.PRODUCT_ID_X3))
53+
} else
54+
false
4655
}
4756
}
4857
}

app/src/main/kotlin/com/goodwy/contacts/activities/ContactActivity.kt

Lines changed: 92 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import android.net.Uri
1313
import android.provider.ContactsContract.CommonDataKinds.*
1414
import android.widget.ImageView
1515
import android.widget.TextView
16+
import androidx.appcompat.content.res.AppCompatResources
1617
import com.bumptech.glide.Glide
1718
import com.bumptech.glide.load.DataSource
1819
import com.bumptech.glide.load.engine.DiskCacheStrategy
@@ -22,15 +23,18 @@ import com.bumptech.glide.request.RequestListener
2223
import com.bumptech.glide.request.RequestOptions
2324
import com.bumptech.glide.request.target.Target
2425
import com.goodwy.commons.dialogs.ConfirmationDialog
26+
import com.goodwy.commons.dialogs.NewAppDialog
2527
import com.goodwy.commons.dialogs.RadioGroupDialog
2628
import com.goodwy.commons.extensions.*
29+
import com.goodwy.commons.helpers.ContactsHelper
2730
import com.goodwy.commons.helpers.SimpleContactsHelper
2831
import com.goodwy.commons.helpers.letterBackgroundColors
2932
import com.goodwy.commons.models.RadioItem
3033
import com.goodwy.contacts.R
3134
import com.goodwy.contacts.extensions.shareContacts
32-
import com.goodwy.contacts.helpers.ContactsHelper
33-
import com.goodwy.contacts.models.Contact
35+
import com.goodwy.commons.models.contacts.Contact
36+
import com.goodwy.commons.models.contacts.ContactRelation
37+
import com.goodwy.contacts.extensions.config
3438

3539
abstract class ContactActivity : SimpleActivity() {
3640
protected val PICK_RINGTONE_INTENT_ID = 1500
@@ -124,6 +128,19 @@ abstract class ContactActivity : SimpleActivity() {
124128
shareContacts(arrayListOf(contact))
125129
}
126130

131+
fun trySendSMSRecommendation() {
132+
val simpleSmsMessenger = "com.goodwy.smsmessenger"
133+
val simpleSmsMessengerDebug = "com.goodwy.smsmessenger.debug"
134+
if ((0..config.appRecommendationDialogCount).random() == 2 && (!isPackageInstalled(simpleSmsMessenger) && !isPackageInstalled(simpleSmsMessengerDebug))) {
135+
NewAppDialog(this, simpleSmsMessenger, getString(R.string.recommendation_dialog_messages_g), getString(R.string.right_sms_messenger),
136+
AppCompatResources.getDrawable(this, R.mipmap.ic_sms_messenger)) {
137+
trySendSMS()
138+
}
139+
} else {
140+
trySendSMS()
141+
}
142+
}
143+
127144
fun trySendSMS() {
128145
val numbers = contact!!.phoneNumbers
129146
if (numbers.size == 1) {
@@ -176,6 +193,79 @@ abstract class ContactActivity : SimpleActivity() {
176193
}
177194
}
178195

196+
fun getRelationTypeText(type: Int, label: String): String {
197+
return if (type == BaseTypes.TYPE_CUSTOM) {
198+
label
199+
} else {
200+
getString(
201+
when (type) {
202+
// Relation.TYPE_CUSTOM -> R.string.custom
203+
Relation.TYPE_ASSISTANT -> R.string.relation_assistant_g
204+
Relation.TYPE_BROTHER -> R.string.relation_brother_g
205+
Relation.TYPE_CHILD -> R.string.relation_child_g
206+
Relation.TYPE_DOMESTIC_PARTNER -> R.string.relation_domestic_partner_g
207+
Relation.TYPE_FATHER -> R.string.relation_father_g
208+
Relation.TYPE_FRIEND -> R.string.relation_friend_g
209+
Relation.TYPE_MANAGER -> R.string.relation_manager_g
210+
Relation.TYPE_MOTHER -> R.string.relation_mother_g
211+
Relation.TYPE_PARENT -> R.string.relation_parent_g
212+
Relation.TYPE_PARTNER -> R.string.relation_partner_g
213+
Relation.TYPE_REFERRED_BY -> R.string.relation_referred_by_g
214+
Relation.TYPE_RELATIVE -> R.string.relation_relative_g
215+
Relation.TYPE_SISTER -> R.string.relation_sister_g
216+
Relation.TYPE_SPOUSE -> R.string.relation_spouse_g
217+
218+
// Relation types defined in vCard 4.0
219+
ContactRelation.TYPE_CONTACT -> R.string.relation_contact_g
220+
ContactRelation.TYPE_ACQUAINTANCE -> R.string.relation_acquaintance_g
221+
// ContactRelation.TYPE_FRIEND -> R.string.relation_friend
222+
ContactRelation.TYPE_MET -> R.string.relation_met_g
223+
ContactRelation.TYPE_CO_WORKER -> R.string.relation_co_worker_g
224+
ContactRelation.TYPE_COLLEAGUE -> R.string.relation_colleague_g
225+
ContactRelation.TYPE_CO_RESIDENT -> R.string.relation_co_resident_g
226+
ContactRelation.TYPE_NEIGHBOR -> R.string.relation_neighbor_g
227+
// ContactRelation.TYPE_CHILD -> R.string.relation_child
228+
// ContactRelation.TYPE_PARENT -> R.string.relation_parent
229+
ContactRelation.TYPE_SIBLING -> R.string.relation_sibling_g
230+
// ContactRelation.TYPE_SPOUSE -> R.string.relation_spouse
231+
ContactRelation.TYPE_KIN -> R.string.relation_kin_g
232+
ContactRelation.TYPE_MUSE -> R.string.relation_muse_g
233+
ContactRelation.TYPE_CRUSH -> R.string.relation_crush_g
234+
ContactRelation.TYPE_DATE -> R.string.relation_date_g
235+
ContactRelation.TYPE_SWEETHEART -> R.string.relation_sweetheart_g
236+
ContactRelation.TYPE_ME -> R.string.relation_me_g
237+
ContactRelation.TYPE_AGENT -> R.string.relation_agent_g
238+
ContactRelation.TYPE_EMERGENCY -> R.string.relation_emergency_g
239+
240+
ContactRelation.TYPE_SUPERIOR -> R.string.relation_superior_g
241+
ContactRelation.TYPE_SUBORDINATE -> R.string.relation_subordinate_g
242+
ContactRelation.TYPE_HUSBAND -> R.string.relation_husband_g
243+
ContactRelation.TYPE_WIFE -> R.string.relation_wife_g
244+
ContactRelation.TYPE_SON -> R.string.relation_son_g
245+
ContactRelation.TYPE_DAUGHTER -> R.string.relation_daughter_g
246+
ContactRelation.TYPE_GRANDPARENT -> R.string.relation_grandparent_g
247+
ContactRelation.TYPE_GRANDFATHER -> R.string.relation_grandfather_g
248+
ContactRelation.TYPE_GRANDMOTHER -> R.string.relation_grandmother_g
249+
ContactRelation.TYPE_GRANDCHILD -> R.string.relation_grandchild_g
250+
ContactRelation.TYPE_GRANDSON -> R.string.relation_grandson_g
251+
ContactRelation.TYPE_GRANDDAUGHTER -> R.string.relation_granddaughter_g
252+
ContactRelation.TYPE_UNCLE -> R.string.relation_uncle_g
253+
ContactRelation.TYPE_AUNT -> R.string.relation_aunt_g
254+
ContactRelation.TYPE_NEPHEW -> R.string.relation_nephew_g
255+
ContactRelation.TYPE_NIECE -> R.string.relation_niece_g
256+
ContactRelation.TYPE_FATHER_IN_LAW -> R.string.relation_father_in_law_g
257+
ContactRelation.TYPE_MOTHER_IN_LAW -> R.string.relation_mother_in_law_g
258+
ContactRelation.TYPE_SON_IN_LAW -> R.string.relation_son_in_law_g
259+
ContactRelation.TYPE_DAUGHTER_IN_LAW -> R.string.relation_daughter_in_law_g
260+
ContactRelation.TYPE_BROTHER_IN_LAW -> R.string.relation_brother_in_law_g
261+
ContactRelation.TYPE_SISTER_IN_LAW -> R.string.relation_sister_in_law_g
262+
263+
else -> R.string.other
264+
}
265+
)
266+
}
267+
}
268+
179269
fun getAddressTypeText(type: Int, label: String): String {
180270
return if (type == BaseTypes.TYPE_CUSTOM) {
181271
label

0 commit comments

Comments
 (0)