Skip to content

Commit f97ca71

Browse files
author
dilipsuthar1997
committed
add analytics
1 parent f8629b9 commit f97ca71

13 files changed

Lines changed: 171 additions & 20 deletions

File tree

app/build.gradle

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
11
apply plugin: 'com.android.application'
22

33
apply plugin: 'kotlin-android'
4-
54
apply plugin: 'kotlin-android-extensions'
65
apply plugin: 'kotlin-kapt'
76

7+
apply plugin: 'com.android.application'
8+
89
android {
910
compileSdkVersion 29
1011
buildToolsVersion "29.0.2"
1112
defaultConfig {
1213
applicationId "com.techflow.materialcolor"
1314
minSdkVersion 22
1415
targetSdkVersion 29
15-
versionCode 30103
16-
versionName "3.0.103"
16+
versionCode 302
17+
versionName "3.0.2"
1718
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
1819
}
1920
buildTypes {
@@ -45,6 +46,8 @@ dependencies {
4546
implementation 'com.android.billingclient:billing:1.2' // In app purchase
4647
implementation 'androidx.browser:browser:1.0.0' // Chrome custom tab
4748
implementation 'com.google.android.play:core:1.6.3' // Play store core
49+
// Firebase
50+
implementation 'com.google.firebase:firebase-analytics:17.2.0'
4851

4952
testImplementation 'junit:junit:4.12'
5053
androidTestImplementation 'androidx.test:runner:1.2.0'
@@ -59,3 +62,4 @@ dependencies {
5962
implementation 'com.mikhaellopez:circularimageview:3.2.0' // Circle Image View
6063
implementation 'com.facebook.android:audience-network-sdk:5.+' // Facebook audience
6164
}
65+
apply plugin: 'com.google.gms.google-services'

app/google-services.json

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
{
2+
"project_info": {
3+
"project_number": "890699105865",
4+
"firebase_url": "https://materialcolor-2ca34.firebaseio.com",
5+
"project_id": "materialcolor-2ca34",
6+
"storage_bucket": "materialcolor-2ca34.appspot.com"
7+
},
8+
"client": [
9+
{
10+
"client_info": {
11+
"mobilesdk_app_id": "1:890699105865:android:0a4bcf20c0040bca6ce198",
12+
"android_client_info": {
13+
"package_name": "com.techflow.materialcolor"
14+
}
15+
},
16+
"oauth_client": [
17+
{
18+
"client_id": "890699105865-cj4985tk52deih1a180m3lrgg6k9fd4t.apps.googleusercontent.com",
19+
"client_type": 1,
20+
"android_info": {
21+
"package_name": "com.techflow.materialcolor",
22+
"certificate_hash": "59fb43fe97c948e7700e8dd1eaa9e2a4d52b8343"
23+
}
24+
},
25+
{
26+
"client_id": "890699105865-e03qr2e38mmcrs9dcoilv351smdfi6b9.apps.googleusercontent.com",
27+
"client_type": 3
28+
}
29+
],
30+
"api_key": [
31+
{
32+
"current_key": "AIzaSyDwdsFVVVwHgcW15jLxE3uLx-okNFvP8pc"
33+
}
34+
],
35+
"services": {
36+
"appinvite_service": {
37+
"other_platform_oauth_client": [
38+
{
39+
"client_id": "890699105865-e03qr2e38mmcrs9dcoilv351smdfi6b9.apps.googleusercontent.com",
40+
"client_type": 3
41+
}
42+
]
43+
}
44+
}
45+
}
46+
],
47+
"configuration_version": "1"
48+
}

app/src/main/AndroidManifest.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,13 @@
99
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
1010

1111
<application
12+
android:name=".MaterialColor"
1213
android:allowBackup="true"
1314
android:icon="@mipmap/ic_launcher"
1415
android:label="@string/app_name"
1516
android:roundIcon="@mipmap/ic_launcher"
1617
android:supportsRtl="true"
18+
android:largeHeap="true"
1719
android:theme="@style/MaterialColor.Base.Light">
1820
<activity android:name=".activity.ColorActivity"></activity>
1921
<activity android:name=".activity.CustomColorActivity"></activity>
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package com.techflow.materialcolor
2+
3+
import android.app.Application
4+
import com.techflow.materialcolor.utils.ThemeUtils
5+
6+
class MaterialColor : Application() {
7+
8+
enum class AdType {
9+
BANNER,
10+
INTERSTITIAL
11+
}
12+
13+
companion object {
14+
15+
private lateinit var instance: MaterialColor
16+
17+
// Firebase
18+
const val FIREBASE_EVENT_TAB_COLOR = "tab_color"
19+
const val FIREBASE_EVENT_TAB_GRADIENT = "tab_gradient"
20+
const val FIREBASE_EVENT_TAB_COLOR_PICKER = "tab_color_picker"
21+
const val FIREBASE_EVENT_TAB_SETTING = "tab_setting"
22+
const val FIREBASE_EVENT_REMOVE_ADS = "remove_ads"
23+
const val FIREBASE_EVENT_PALETTE_CREATOR = "palette_creator"
24+
const val FIREBASE_EVENT_ABOUT_ME = "about_me"
25+
const val FIREBASE_EVENT_READ_POLICY = "read_policy"
26+
27+
fun getInstance(): MaterialColor {
28+
return instance
29+
}
30+
31+
fun getAdId(adType: AdType): String {
32+
return when (adType) {
33+
AdType.BANNER -> BuildConfig.AUDIENCE_BANNER_ID
34+
AdType.INTERSTITIAL -> BuildConfig.AUDIENCE_INTERSTITIAL_ID
35+
}
36+
}
37+
}
38+
39+
override fun onCreate() {
40+
when(ThemeUtils.getTheme(this)) {
41+
ThemeUtils.LIGHT -> setTheme(R.style.MaterialColor_Base_Light)
42+
ThemeUtils.DARK -> setTheme(R.style.MaterialColor_Base_Dark)
43+
}
44+
super.onCreate()
45+
instance = this
46+
}
47+
48+
}

app/src/main/java/com/techflow/materialcolor/activity/HomeActivity.kt

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@ import com.google.android.play.core.install.InstallStateUpdatedListener
2020
import com.google.android.play.core.install.model.AppUpdateType
2121
import com.google.android.play.core.install.model.InstallStatus
2222
import com.google.android.play.core.install.model.UpdateAvailability
23-
import com.techflow.materialcolor.BuildConfig
23+
import com.google.firebase.analytics.FirebaseAnalytics
24+
import com.techflow.materialcolor.MaterialColor.AdType
25+
import com.techflow.materialcolor.MaterialColor
2426
import com.techflow.materialcolor.R
2527
import com.techflow.materialcolor.databinding.ActivityHomeBinding
2628
import com.techflow.materialcolor.fragment.ColorPickerFragment
@@ -80,10 +82,13 @@ class HomeActivity : BaseActivity() {
8082
private lateinit var colorPickerFragment: ColorPickerFragment
8183
private lateinit var settingFragment: SettingFragment
8284

85+
private lateinit var firebaseAnalytics: FirebaseAnalytics
86+
8387
override fun onCreate(savedInstanceState: Bundle?) {
8488
super.onCreate(savedInstanceState)
8589
binding = DataBindingUtil.setContentView(this, R.layout.activity_home)
8690
sharedPref = SharedPref.getInstance(this)
91+
firebaseAnalytics = FirebaseAnalytics.getInstance(this)
8792

8893
/*binding.rootLayout.systemUiVisibility =
8994
(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
@@ -120,8 +125,11 @@ class HomeActivity : BaseActivity() {
120125
}
121126

122127
override fun onOptionsItemSelected(item: MenuItem): Boolean {
123-
if (item.itemId == R.id.action_custom_code)
128+
if (item.itemId == R.id.action_custom_code) {
129+
firebaseAnalytics.logEvent(MaterialColor.FIREBASE_EVENT_PALETTE_CREATOR, null)
124130
startActivity(Intent(this, CustomColorActivity::class.java))
131+
return true
132+
}
125133
return super.onOptionsItemSelected(item)
126134
}
127135

@@ -162,18 +170,22 @@ class HomeActivity : BaseActivity() {
162170

163171
when(barItem.id) {
164172
R.id.nav_home -> {
173+
firebaseAnalytics.logEvent(MaterialColor.FIREBASE_EVENT_TAB_COLOR, null)
165174
displayFragment(homeFragment)
166175
supportActionBar?.title = "MaterialColor"
167176
}
168177
R.id.nav_gradient -> {
178+
firebaseAnalytics.logEvent(MaterialColor.FIREBASE_EVENT_TAB_GRADIENT, null)
169179
displayFragment(gradientFragment)
170180
supportActionBar?.title = "Gradients"
171181
}
172182
R.id.nav_color_picker -> {
183+
firebaseAnalytics.logEvent(MaterialColor.FIREBASE_EVENT_TAB_COLOR_PICKER, null)
173184
displayFragment(colorPickerFragment)
174185
supportActionBar?.title = "Color Picker"
175186
}
176187
R.id.nav_settings -> {
188+
firebaseAnalytics.logEvent(MaterialColor.FIREBASE_EVENT_TAB_SETTING, null)
177189
displayFragment(settingFragment)
178190
supportActionBar?.title = "Settings"
179191
}
@@ -205,7 +217,7 @@ class HomeActivity : BaseActivity() {
205217
}
206218

207219
private fun initAd() {
208-
interstitialAd = InterstitialAd(this, BuildConfig.AUDIENCE_INTERSTITIAL_ID)
220+
interstitialAd = InterstitialAd(this, MaterialColor.getAdId(AdType.INTERSTITIAL))
209221
if (Tools.hasNetwork(this))
210222
interstitialAd.loadAd()
211223

app/src/main/java/com/techflow/materialcolor/adapter/AdapterColor.kt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ import androidx.recyclerview.widget.RecyclerView
1212
import com.facebook.ads.*
1313
import com.getkeepsafe.taptargetview.TapTarget
1414
import com.getkeepsafe.taptargetview.TapTargetSequence
15-
import com.techflow.materialcolor.BuildConfig
15+
import com.techflow.materialcolor.MaterialColor.AdType
16+
import com.techflow.materialcolor.MaterialColor
1617
import com.techflow.materialcolor.R
1718
import com.techflow.materialcolor.model.Color
1819
import com.techflow.materialcolor.utils.Preferences
@@ -142,7 +143,7 @@ class AdapterColor(
142143
private val bannerContainer: LinearLayout = view.findViewById(R.id.banner_container)
143144

144145
fun loadAds(context: Context) {
145-
val adView = AdView(context, BuildConfig.AUDIENCE_BANNER_ID, AdSize.BANNER_HEIGHT_50)
146+
val adView = AdView(context, MaterialColor.getAdId(AdType.BANNER), AdSize.BANNER_HEIGHT_50)
146147
if (Tools.hasNetwork(context))
147148
adView.loadAd()
148149

@@ -158,7 +159,8 @@ class AdapterColor(
158159
}
159160

160161
override fun onError(p0: Ad?, p1: AdError?) {
161-
adView.loadAd()
162+
if (Tools.hasNetwork(context))
163+
adView.loadAd()
162164
}
163165

164166
override fun onLoggingImpression(p0: Ad?) {

app/src/main/java/com/techflow/materialcolor/adapter/AdapterGradient.kt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ import androidx.recyclerview.widget.RecyclerView
1616
import com.facebook.ads.*
1717
import com.getkeepsafe.taptargetview.TapTarget
1818
import com.getkeepsafe.taptargetview.TapTargetSequence
19-
import com.techflow.materialcolor.BuildConfig
19+
import com.techflow.materialcolor.MaterialColor.AdType
20+
import com.techflow.materialcolor.MaterialColor
2021
import com.techflow.materialcolor.R
2122
import com.techflow.materialcolor.model.Gradient
2223
import com.techflow.materialcolor.utils.AnimUtils
@@ -150,7 +151,7 @@ class AdapterGradient(
150151
private val bannerContainer: LinearLayout = view.findViewById(R.id.banner_container)
151152

152153
fun loadAds(context: Context) {
153-
val adView = AdView(context, BuildConfig.AUDIENCE_BANNER_ID, AdSize.BANNER_HEIGHT_50)
154+
val adView = AdView(context, MaterialColor.getAdId(AdType.BANNER), AdSize.BANNER_HEIGHT_50)
154155
if (Tools.hasNetwork(context))
155156
adView.loadAd()
156157

@@ -166,7 +167,8 @@ class AdapterGradient(
166167
}
167168

168169
override fun onError(p0: Ad?, p1: AdError?) {
169-
adView.loadAd()
170+
if (Tools.hasNetwork(context))
171+
adView.loadAd()
170172
}
171173

172174
override fun onLoggingImpression(p0: Ad?) {

app/src/main/java/com/techflow/materialcolor/fragment/ColorPickerFragment.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,15 @@ package com.techflow.materialcolor.fragment
22

33
import android.Manifest
44
import android.content.Intent
5+
import android.content.pm.PackageManager
56
import android.graphics.Bitmap
67
import android.graphics.drawable.BitmapDrawable
78
import android.os.Bundle
89
import androidx.fragment.app.Fragment
910
import android.view.LayoutInflater
1011
import android.view.View
1112
import android.view.ViewGroup
13+
import android.widget.Toast
1214
import androidx.core.app.ActivityCompat
1315
import androidx.databinding.DataBindingUtil
1416
import androidx.palette.graphics.Palette

app/src/main/java/com/techflow/materialcolor/fragment/SettingFragment.kt

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ import com.getkeepsafe.taptargetview.TapTarget
2222
import com.getkeepsafe.taptargetview.TapTargetView
2323
import com.google.android.material.button.MaterialButton
2424
import com.google.android.material.snackbar.Snackbar
25+
import com.google.firebase.analytics.FirebaseAnalytics
26+
import com.techflow.materialcolor.MaterialColor
2527

2628
import com.techflow.materialcolor.R
2729
import com.techflow.materialcolor.databinding.FragmentSettingBinding
@@ -39,6 +41,7 @@ class SettingFragment : Fragment(), View.OnClickListener {
3941
}
4042

4143
private lateinit var bind: FragmentSettingBinding
44+
private lateinit var firebaseAnalytics: FirebaseAnalytics
4245

4346
// Billing
4447
private var skuList: ArrayList<String> = ArrayList()
@@ -50,6 +53,7 @@ class SettingFragment : Fragment(), View.OnClickListener {
5053
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
5154
retainInstance = true
5255
bind = DataBindingUtil.inflate(inflater, R.layout.fragment_setting, container, false)
56+
firebaseAnalytics = FirebaseAnalytics.getInstance(context!!)
5357

5458
showTutorial()
5559

@@ -91,6 +95,7 @@ class SettingFragment : Fragment(), View.OnClickListener {
9195
when (view?.id) {
9296
R.id.btn_remove_ads -> {
9397
AnimUtils.bounceAnim(view)
98+
firebaseAnalytics.logEvent(MaterialColor.FIREBASE_EVENT_REMOVE_ADS, null)
9499
if (Tools.hasNetwork(context!!)) {
95100
Tools.visibleViews(bind.progressBar)
96101
Tools.inVisibleViews(bind.btnRemoveAds, type = Tools.GONE)
@@ -149,7 +154,10 @@ class SettingFragment : Fragment(), View.OnClickListener {
149154
R.id.btn_more_apps -> { openWebView("https://play.google.com/store/apps/dev?id=5025665333769403890") }
150155
R.id.btn_about_material_color -> { openWebView("https://material.io/design/color/the-color-system.html#color-theme-creation") }
151156
R.id.btn_material_tool -> { openWebView("https://material.io/tools/color/#!/?view.left=0&view.right=0") }
152-
R.id.btn_policy -> { openWebView("https://github.com/dilipsuthar1997/PrivacyPolicy/blob/master/MaterialColor%20Privacy%20Policy.md") }
157+
R.id.btn_policy -> {
158+
firebaseAnalytics.logEvent(MaterialColor.FIREBASE_EVENT_READ_POLICY, null)
159+
openWebView("https://github.com/dilipsuthar1997/PrivacyPolicy/blob/master/MaterialColor%20Privacy%20Policy.md")
160+
}
153161
}
154162
}
155163

@@ -162,11 +170,16 @@ class SettingFragment : Fragment(), View.OnClickListener {
162170
}
163171

164172
view.findViewById<MaterialButton>(R.id.btn_about_me).setOnClickListener {
173+
firebaseAnalytics.logEvent(MaterialColor.FIREBASE_EVENT_ABOUT_ME, null)
165174
openWebView("https://about.me/dilip.suthar")
166175
dialog.dismiss()
167176
}
168177
}
169178

179+
/** It will open URL link into chrome custom tab
180+
*
181+
* @param url a url link in a string format
182+
*/
170183
private fun openWebView(url: String) {
171184
val intent = Builder()
172185
.addDefaultShareMenuItem()
@@ -205,7 +218,7 @@ class SettingFragment : Fragment(), View.OnClickListener {
205218
private fun setupBillingClient() {
206219
Log.d(TAG, "setupBillingClient: called")
207220

208-
skuList.add("PRODUCT_ID")
221+
skuList.add("PRODUCT_ID") //TODO: Add in-app purchase product ID
209222

210223
// purchase listener
211224
billingClient = BillingClient.newBuilder(context!!).setListener { responseCode, purchases ->
@@ -220,7 +233,10 @@ class SettingFragment : Fragment(), View.OnClickListener {
220233
SharedPref.getInstance(context!!).saveData(Preferences.SHOW_AD, false)
221234
bind.btnRemoveAds.isEnabled = false
222235
Snackbar.make(bind.root, "You already purchased this. you don't see ads anymore, Restart app.", Snackbar.LENGTH_INDEFINITE)
223-
.setAction("OK") {}
236+
.setAction("RESTART") {
237+
Tools.restartApp(context!!)
238+
Toast.makeText(context, "Restarting app", Toast.LENGTH_SHORT).show()
239+
}
224240
.show()
225241
}
226242
}

app/src/main/java/com/techflow/materialcolor/helpers/PermissionHelper.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ import android.content.pm.PackageManager
66
import androidx.core.app.ActivityCompat
77

88
object PermissionHelper {
9-
private const val REQUEST_CODE = 201
9+
const val REQUEST_CODE = 201
1010

1111
fun permissionGranted(context: Context, permissions: Array<String>): Boolean {
12-
return permissions.all { permission ->
12+
return permissions.all { permission -> // Function extension method
1313
ActivityCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED
1414
}
1515
}

0 commit comments

Comments
 (0)