Skip to content

Commit 68ce89e

Browse files
authored
feat: Add in additional analytics event and UI polishing (#14)
1 parent 70be06d commit 68ce89e

File tree

14 files changed

+160
-58
lines changed

14 files changed

+160
-58
lines changed

core-sdk-samples/higgs-shop-sample-app/app/src/main/kotlin/com/mparticle/example/higgsshopsampleapp/activities/CheckoutActivity.kt

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.mparticle.example.higgsshopsampleapp.activities
22

33
import android.app.ActionBar
4+
import android.graphics.Typeface
45
import android.graphics.drawable.ColorDrawable
56
import android.os.Bundle
67
import android.util.Log
@@ -99,14 +100,19 @@ class CheckoutActivity : AppCompatActivity() {
99100
val snackbar = Snackbar.make(binding.root, getString(R.string.checkout_thanks), Snackbar.LENGTH_INDEFINITE)
100101
val layoutParams = ActionBar.LayoutParams(snackbar.view.layoutParams)
101102
snackbar.view.layoutParams = layoutParams
102-
snackbar.setBackgroundTint(getColor(R.color.blue_4079FE))
103-
snackbar.setTextColor(getColor(R.color.white))
104-
snackbar.view.setPadding(0, 10, 0, 0)
105-
(snackbar.view.findViewById<TextView>(R.id.snackbar_text))?.textAlignment = View.TEXT_ALIGNMENT_CENTER
106-
snackbar.view.setOnClickListener({
103+
snackbar.setBackgroundTint(getColor(R.color.white))
104+
snackbar.setTextColor(getColor(R.color.black))
105+
snackbar.setActionTextColor(getColor(R.color.blue_4079FE))
106+
snackbar.view.setPadding(20, 10, 20, 0)
107+
(snackbar.view.findViewById<TextView>(R.id.snackbar_text))?.textAlignment = View.TEXT_ALIGNMENT_TEXT_START
108+
val snackbarActionTextView =
109+
snackbar.view.findViewById<View>(com.google.android.material.R.id.snackbar_action) as TextView
110+
snackbarActionTextView.setAllCaps(false)
111+
snackbarActionTextView.setTypeface(snackbarActionTextView.getTypeface(), Typeface.BOLD);
112+
snackbar.setAction("Exit") {
107113
setResult(Constants.RESULT_CODE_PURCHASE)
108114
finish()
109-
})
115+
}
110116
snackbar.animationMode = BaseTransientBottomBar.ANIMATION_MODE_FADE
111117
snackbar.show()
112118
}

core-sdk-samples/higgs-shop-sample-app/app/src/main/kotlin/com/mparticle/example/higgsshopsampleapp/activities/LandingActivity.kt

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.mparticle.example.higgsshopsampleapp.activities
22

33
import android.app.ActionBar
44
import android.content.Intent
5+
import android.graphics.Typeface
56
import android.net.Uri
67
import android.os.Bundle
78
import android.view.View
@@ -14,6 +15,7 @@ import com.mparticle.MPEvent
1415
import com.mparticle.MParticle
1516
import com.mparticle.example.higgsshopsampleapp.BuildConfig
1617
import com.mparticle.example.higgsshopsampleapp.R
18+
import com.mparticle.example.higgsshopsampleapp.utils.Constants
1719

1820
class LandingActivity : AppCompatActivity() {
1921
override fun onCreate(savedInstanceState: Bundle?) {
@@ -55,12 +57,18 @@ class LandingActivity : AppCompatActivity() {
5557
tv?.maxLines = 5
5658
tv?.textAlignment = View.TEXT_ALIGNMENT_TEXT_START
5759

58-
snackbar.setBackgroundTint(getColor(R.color.blue_4079FE))
59-
snackbar.setTextColor(getColor(R.color.white))
60+
snackbar.setBackgroundTint(getColor(R.color.white))
61+
snackbar.setTextColor(getColor(R.color.black))
6062
snackbar.view.layoutParams = layoutParams
6163
snackbar.view.setPadding(0, 10, 0, 0)
64+
snackbar.setActionTextColor(getColor(R.color.blue_4079FE))
65+
66+
val snackbarActionTextView =
67+
snackbar.view.findViewById<View>(com.google.android.material.R.id.snackbar_action) as TextView
68+
snackbarActionTextView.setAllCaps(false)
69+
snackbarActionTextView.setTypeface(snackbarActionTextView.getTypeface(), Typeface.BOLD);
6270
snackbar.setAction("Go to docs") {
63-
val url = "https://docs.mparticle.com/developers/quickstart/senddata/#1-generate-your-api-key-1"
71+
val url = Constants.URL_DOCS_API_KEY
6472
val i = Intent(Intent.ACTION_VIEW)
6573
i.data = Uri.parse(url)
6674
startActivity(i)

core-sdk-samples/higgs-shop-sample-app/app/src/main/kotlin/com/mparticle/example/higgsshopsampleapp/activities/MainActivity.kt

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import androidx.navigation.ui.AppBarConfiguration
1010
import androidx.navigation.ui.setupActionBarWithNavController
1111
import androidx.navigation.ui.setupWithNavController
1212
import com.google.android.material.bottomnavigation.BottomNavigationView
13+
import com.mparticle.MPEvent
14+
import com.mparticle.MParticle
1315
import com.mparticle.example.higgsshopsampleapp.R
1416
import com.mparticle.example.higgsshopsampleapp.databinding.ActivityMainBinding
1517
import com.mparticle.example.higgsshopsampleapp.utils.Constants
@@ -39,19 +41,28 @@ class MainActivity : AppCompatActivity() {
3941
)
4042
setupActionBarWithNavController(navController, appBarConfiguration)
4143
bottomNavigation.setupWithNavController(navController)
42-
// bottomNavigation.setOnItemSelectedListener { item ->
43-
// val customAttributes: MutableMap<String, String> = HashMap()
44-
// when (item.itemId) {
45-
// R.id.navigation_shop -> customAttributes["destination"] = getString(R.string.nav_shop)
46-
// R.id.navigation_account -> customAttributes["destination"] = getString(R.string.nav_account)
47-
// R.id.navigation_cart -> customAttributes["destination"] = getString(R.string.nav_cart)
48-
// }
49-
// val event = MPEvent.Builder("Navbar Clicked", MParticle.EventType.Navigation)
50-
// .customAttributes(customAttributes)
51-
// .build()
52-
// MParticle.getInstance()?.logEvent(event)
53-
// true
54-
// }
44+
bottomNavigation.setOnItemSelectedListener { item ->
45+
val customAttributes: MutableMap<String, String> = HashMap()
46+
when (item.itemId) {
47+
R.id.navigation_shop -> {
48+
customAttributes["destination"] = getString(R.string.nav_shop)
49+
navController.navigate(R.id.navigation_shop)
50+
}
51+
R.id.navigation_account -> {
52+
customAttributes["destination"] = getString(R.string.nav_account)
53+
navController.navigate(R.id.navigation_account)
54+
}
55+
R.id.navigation_cart -> {
56+
customAttributes["destination"] = getString(R.string.nav_cart)
57+
navController.navigate(R.id.navigation_cart)
58+
}
59+
}
60+
val event = MPEvent.Builder("Navbar Clicked", MParticle.EventType.Navigation)
61+
.customAttributes(customAttributes)
62+
.build()
63+
MParticle.getInstance()?.logEvent(event)
64+
return@setOnItemSelectedListener true
65+
}
5566

5667
activityResultLaunch =
5768
registerForActivityResult(

core-sdk-samples/higgs-shop-sample-app/app/src/main/kotlin/com/mparticle/example/higgsshopsampleapp/activities/ProductDetailActivity.kt

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.mparticle.example.higgsshopsampleapp.activities
22

33
import android.app.ActionBar
4+
import android.content.Intent
5+
import android.graphics.Typeface
46
import android.graphics.drawable.ColorDrawable
57
import android.net.Uri
68
import android.os.Bundle
@@ -167,14 +169,19 @@ class ProductDetailActivity : AppCompatActivity() {
167169
val snackbar = Snackbar.make(binding.root, getString(R.string.detail_cta_added), Snackbar.LENGTH_LONG)
168170
val layoutParams = ActionBar.LayoutParams(snackbar.view.layoutParams)
169171
snackbar.view.layoutParams = layoutParams
170-
snackbar.setBackgroundTint(getColor(R.color.blue_4079FE))
171-
snackbar.setTextColor(getColor(R.color.white))
172-
snackbar.view.setPadding(0, 10, 0, 0)
173-
(snackbar.view.findViewById<TextView>(R.id.snackbar_text))?.textAlignment = View.TEXT_ALIGNMENT_CENTER
174-
snackbar.view.setOnClickListener({
172+
snackbar.setBackgroundTint(getColor(R.color.white))
173+
snackbar.setTextColor(getColor(R.color.black))
174+
snackbar.view.setPadding(20, 10, 20, 0)
175+
(snackbar.view.findViewById<TextView>(R.id.snackbar_text))?.textAlignment = View.TEXT_ALIGNMENT_TEXT_START
176+
snackbar.setActionTextColor(getColor(R.color.blue_4079FE))
177+
val snackbarActionTextView =
178+
snackbar.view.findViewById<View>(com.google.android.material.R.id.snackbar_action) as TextView
179+
snackbarActionTextView.setAllCaps(false)
180+
snackbarActionTextView.setTypeface(snackbarActionTextView.getTypeface(), Typeface.BOLD);
181+
snackbar.setAction(getString(R.string.detail_cta_cart)) {
175182
setResult(Constants.RESULT_CODE_CART_ADDED)
176183
finish()
177-
})
184+
}
178185
snackbar.animationMode = BaseTransientBottomBar.ANIMATION_MODE_FADE
179186
snackbar.show()
180187
}

core-sdk-samples/higgs-shop-sample-app/app/src/main/kotlin/com/mparticle/example/higgsshopsampleapp/adapters/ProductItemsAdapter.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ import android.widget.ImageView
99
import android.widget.TextView
1010
import androidx.recyclerview.widget.RecyclerView
1111
import com.bumptech.glide.Glide
12+
import com.mparticle.MParticle
13+
import com.mparticle.commerce.CommerceEvent
14+
import com.mparticle.commerce.Impression
1215
import com.mparticle.example.higgsshopsampleapp.R
1316
import com.mparticle.example.higgsshopsampleapp.repositories.network.models.Product
1417

@@ -42,6 +45,15 @@ class ProductItemsAdapter() :
4245
.override(343,264)
4346
.centerCrop()
4447
.into(viewHolder.ivImage)
48+
49+
val product = com.mparticle.commerce.Product.Builder(list[position].label,
50+
list[position].id.toString(), list[position].price.toDouble())
51+
.build()
52+
Impression("Products List", product).let {
53+
CommerceEvent.Builder(it).build()
54+
}.let {
55+
MParticle.getInstance()?.logEvent(it)
56+
}
4557
}
4658

4759
inner class ProductItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {

core-sdk-samples/higgs-shop-sample-app/app/src/main/kotlin/com/mparticle/example/higgsshopsampleapp/fragments/AccountFragment.kt

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import android.view.View
77
import android.view.ViewGroup
88
import android.widget.Button
99
import android.widget.TextView
10+
import androidx.core.content.ContextCompat.getColor
1011
import androidx.fragment.app.Fragment
1112
import androidx.lifecycle.ViewModelProvider
1213
import com.google.android.material.snackbar.BaseTransientBottomBar
@@ -40,24 +41,25 @@ class AccountFragment : Fragment() {
4041
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
4142
super.onViewCreated(view, savedInstanceState)
4243
MParticle.getInstance()?.logScreen("My Account")
43-
val btnCTA = activity?.findViewById(R.id.account_cta) as Button
4444

4545
accountViewModel.loggedInResponseLiveData.observe(
4646
viewLifecycleOwner,
4747
{ loggedIn ->
4848
when(loggedIn) {
4949
false -> {
50-
btnCTA.text = getString(R.string.account_cta_login)
51-
showIdentityAlert("Logout Successful")
50+
binding.accountCta.text = getString(R.string.account_cta_login)
51+
binding.accountLoginLayout.visibility = View.VISIBLE
52+
binding.accountLogoutLayout.visibility = View.GONE
5253
}
5354
true -> {
54-
btnCTA.text = getString(R.string.account_cta_logout)
55-
showIdentityAlert("Login Successful")
55+
binding.accountCta.text = getString(R.string.account_cta_logout)
56+
binding.accountLoginLayout.visibility = View.GONE
57+
binding.accountLogoutLayout.visibility = View.VISIBLE
5658
}
5759
}
5860
})
5961

60-
btnCTA.setOnClickListener {
62+
binding.accountCta.setOnClickListener {
6163
when(MParticle.getInstance()?.Identity()?.currentUser?.isLoggedIn) {
6264
false -> {
6365
//no user so login
@@ -67,12 +69,14 @@ class AccountFragment : Fragment() {
6769
.build()
6870
MParticle.getInstance()?.Identity()?.login(identityRequest)?.addSuccessListener {
6971
accountViewModel.login()
72+
showIdentityAlert("mParticle Login Call")
7073
}
7174
}
7275
true -> {
7376
//user exists in sample app so logout
7477
MParticle.getInstance()?.Identity()?.logout()?.addSuccessListener {
7578
accountViewModel.logout()
79+
showIdentityAlert("mParticle Logout Call")
7680
}
7781
}
7882
else -> {}
@@ -88,8 +92,9 @@ class AccountFragment : Fragment() {
8892
val tv = (snackbar.view.findViewById<TextView>(R.id.snackbar_text))
8993
tv?.textAlignment = View.TEXT_ALIGNMENT_CENTER
9094

91-
snackbar.setBackgroundTint(requireContext().getColor(R.color.blue_4079FE))
92-
snackbar.setTextColor(requireContext().getColor(R.color.white))
95+
snackbar.setBackgroundTint(requireContext().getColor(R.color.white))
96+
snackbar.setTextColor(requireContext().getColor(R.color.black))
97+
snackbar.setActionTextColor(getColor(requireContext().applicationContext, R.color.blue_4079FE))
9398
snackbar.view.layoutParams = layoutParams
9499
snackbar.view.setPadding(0, 10, 0, 0)
95100
snackbar.animationMode = BaseTransientBottomBar.ANIMATION_MODE_FADE

core-sdk-samples/higgs-shop-sample-app/app/src/main/kotlin/com/mparticle/example/higgsshopsampleapp/utils/Constants.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ object Constants {
66
const val CHECKOUT_SALES_TAX: String = "8.875" //Sales tax %
77
const val CHECKOUT_SHIPPING_COST: String = "15.0" //shipping cost %
88

9+
const val URL_DOCS_API_KEY: String = "https://docs.mparticle.com/developers/quickstart/senddata/#1-generate-your-api-key-1"
10+
911
const val RESULT_CODE_CART_ADDED: Int = 1001
1012
const val RESULT_CODE_PURCHASE: Int = 1002
1113
}

core-sdk-samples/higgs-shop-sample-app/app/src/main/kotlin/com/mparticle/example/higgsshopsampleapp/viewmodels/AccountViewModel.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,22 @@ package com.mparticle.example.higgsshopsampleapp.viewmodels
33
import androidx.lifecycle.MutableLiveData
44
import androidx.lifecycle.ViewModel
55
import androidx.lifecycle.viewModelScope
6+
import com.mparticle.MParticle
67
import kotlinx.coroutines.launch
78

89
class AccountViewModel : ViewModel() {
910
val loggedInResponseLiveData = MutableLiveData<Boolean>()
1011
private val TAG = "AccountViewModel"
1112

13+
init {
14+
MParticle.getInstance()?.Identity()?.currentUser.let {
15+
if(it?.isLoggedIn == true) {
16+
loggedInResponseLiveData.value = true
17+
} else {
18+
loggedInResponseLiveData.value = false
19+
}
20+
}
21+
}
1222
fun login() {
1323
viewModelScope.launch {
1424
//do some more stuff

core-sdk-samples/higgs-shop-sample-app/app/src/main/res/layout/activity_checkout.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,7 @@
302302
<LinearLayout
303303
android:orientation="horizontal"
304304
android:layout_gravity="center_horizontal"
305+
android:background="@color/gray_333333"
305306
android:layout_width="344dp"
306307
android:layout_height="48dp">
307308
<TextView

core-sdk-samples/higgs-shop-sample-app/app/src/main/res/layout/fragment_account.xml

Lines changed: 50 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -20,22 +20,56 @@
2020
android:fontFamily="@font/lato_regular"
2121
android:textSize="24sp"
2222
/>
23-
<com.google.android.material.textfield.TextInputLayout
24-
android:layout_gravity="center_horizontal"
25-
android:layout_width="342dp"
26-
android:layout_height="54dp"
27-
android:layout_marginTop="30dp"
28-
android:hint="@string/checkout_address"
29-
style="@style/Theme.mParticle.SampleApp.TextInputLayout"
30-
>
31-
<com.google.android.material.textfield.TextInputEditText
32-
style="@style/Theme.mParticle.SampleApp.TextInputEditText"
33-
android:textIsSelectable="false"
34-
android:enabled="false"
35-
android:text="@string/account_username"
36-
android:layout_width="match_parent"
37-
android:layout_height="wrap_content"/>
38-
</com.google.android.material.textfield.TextInputLayout>
23+
<LinearLayout
24+
android:id="@+id/account_login_layout"
25+
android:layout_width="342dp"
26+
android:layout_height="wrap_content"
27+
android:layout_gravity="center_horizontal"
28+
android:layout_marginTop="30dp">
29+
<com.google.android.material.textfield.TextInputLayout
30+
style="@style/Theme.mParticle.SampleApp.TextInputLayout"
31+
android:layout_width="342dp"
32+
android:layout_height="54dp"
33+
android:hint="@string/account_username_header">
34+
<com.google.android.material.textfield.TextInputEditText
35+
style="@style/Theme.mParticle.SampleApp.TextInputEditText"
36+
android:textIsSelectable="false"
37+
android:enabled="false"
38+
android:text="@string/account_username_value"
39+
android:layout_width="match_parent"
40+
android:layout_height="wrap_content"/>
41+
</com.google.android.material.textfield.TextInputLayout>
42+
</LinearLayout>
43+
<LinearLayout
44+
android:id="@+id/account_logout_layout"
45+
android:visibility="gone"
46+
android:orientation="vertical"
47+
android:layout_width="342dp"
48+
android:layout_height="wrap_content"
49+
android:layout_gravity="center_horizontal"
50+
android:layout_marginTop="30dp">
51+
<TextView
52+
android:layout_width="342dp"
53+
android:layout_height="24dp"
54+
android:text="@string/account_username_header2"
55+
android:gravity="center"
56+
android:textColor="@color/white"
57+
android:textStyle="bold"
58+
android:textSize="20sp"
59+
android:fontFamily="@font/lato_regular"
60+
/>
61+
<TextView
62+
android:layout_width="342dp"
63+
android:layout_height="34dp"
64+
android:gravity="center"
65+
android:paddingTop="10dp"
66+
android:textColor="@color/gray_999999"
67+
android:text="@string/account_username_value"
68+
android:textSize="16sp"
69+
android:fontFamily="@font/lato_regular"
70+
/>
71+
</LinearLayout>
72+
3973
<Button
4074
android:id="@+id/account_cta"
4175
android:theme="@style/Theme.mParticle.SampleApp.Button"

0 commit comments

Comments
 (0)