Search code examples
androidkotlinaws-amplifymobile-developmentaws-pinpoint

How to create an event in AWS pinpoint which can be triggered by OnClick event in Android Kotlin


I am trying to implement AWS Pinpoint in my project for mobile-analytics purposes, when I am trying to create an event in AWS Pinpoint that will be triggered on OnClickListerner. Following is the code snippet. Whenever I am trying to create an event in OnClickListener, that particular event is not recognized, please help me out regarding how it is done.

inviteButton.setOnClickListener {
                    val tinyDb = TinyDB(App.ctx)

                    val userDetails = tinyDb.getCurrentUserCachedDetails()
                    val userAttributesMap = userDetails.attributes.attributes
                    val username =
                            userAttributesMap[SettingsFragment.KEY_FIRST_NAME] + " " + userAttributesMap[SettingsFragment.KEY_LAST_NAME]
                    val project = ProjectRepository(ProjectDao()).getProjectById(projectCode)
                    val bitmap =
                            BitmapFactory.decodeResource(resources, R.drawable.project_invite)
                    val mutableBitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true)
                    val canvas = Canvas(mutableBitmap)
                    val scale = resources.displayMetrics.density
                    val paint = Paint(Paint.ANTI_ALIAS_FLAG).apply {
                        color = Color.BLACK
                        textSize = 100 * scale
                    }
                    canvas.drawText(
                            projectCode.toString(),
                            400.toFloat() * scale,
                            440.toFloat() * scale,
                            paint
                    )

                    val originalFile = File(App.ctx.externalMediaDirs[0], "project_invite.png")
                    originalFile.createNewFile()
                    val originalFileBos = ByteArrayOutputStream()
                    mutableBitmap.compress(Bitmap.CompressFormat.PNG, 0, originalFileBos)
                    val originalFileByteArray = originalFileBos.toByteArray()
                    val originalFileFos = FileOutputStream(originalFile)
                    originalFileFos.write(originalFileByteArray)
                    originalFileFos.flush()
                    originalFileFos.close()

                    val defaultSmsApp = Telephony.Sms.getDefaultSmsPackage(App.ctx)

                    val intent = Intent(Intent.ACTION_SEND)
                    intent.putExtra(
                            Intent.EXTRA_STREAM,
                            FileProvider.getUriForFile(
                                    App.ctx,
                                    "${App.ctx.packageName}.fileprovider",
                                    originalFile
                            )
                    )
                    intent.putExtra(Intent.EXTRA_TEXT, message)
                    intent.putExtra("sms_body", message)
                    intent.type = "image/png"
                    defaultSmsApp?.let {
                        intent.`package` = it
                        try {
                            activity?.startActivity(intent)
                        } catch (e: ActivityNotFoundException) {
                            e { e }
                            toastError("Unable to open SMS app.")
                        }
                    } ?: toastError("No default SMS app found.")


                    val Email = tinyDb.getString(getString(R.string.logged_in_user))
                    val event = AnalyticsEvent.builder()
                            .name("invites")
                            .addProperty("email", Email)
                            .build()

                    log { "Invite event"+ event }
                    Amplify.Analytics.recordEvent(event)
                    log { "Invite here 11"+ Amplify.Analytics.recordEvent(event) }

                }

Solution

  • inviteButton.setOnClickListener {
                        val tinyDb = TinyDB(App.ctx)
    
                        val userDetails = tinyDb.getCurrentUserCachedDetails()
                        val userAttributesMap = userDetails.attributes.attributes
                        val username =
                                userAttributesMap[SettingsFragment.KEY_FIRST_NAME] + " " + userAttributesMap[SettingsFragment.KEY_LAST_NAME]
    
     val Email = tinyDb.getString(getString(R.string.logged_in_user))
                        val event = AnalyticsEvent.builder()
                                .name("invites")
                                .addProperty("email", Email)
                                .build()
    
                        log { "Invite event"+ event }
                        Amplify.Analytics.recordEvent(event)
                        log { "Invite here 11"+ Amplify.Analytics.recordEvent(event) }
                        val project = ProjectRepository(ProjectDao()).getProjectById(projectCode)
                        val bitmap =
                                BitmapFactory.decodeResource(resources, R.drawable.project_invite)
                        val mutableBitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true)
                        val canvas = Canvas(mutableBitmap)
                        val scale = resources.displayMetrics.density
                        val paint = Paint(Paint.ANTI_ALIAS_FLAG).apply {
                            color = Color.BLACK
                            textSize = 100 * scale
                        }
                        canvas.drawText(
                                projectCode.toString(),
                                400.toFloat() * scale,
                                440.toFloat() * scale,
                                paint
                        )
    
                        val originalFile = File(App.ctx.externalMediaDirs[0], "project_invite.png")
                        originalFile.createNewFile()
                        val originalFileBos = ByteArrayOutputStream()
                        mutableBitmap.compress(Bitmap.CompressFormat.PNG, 0, originalFileBos)
                        val originalFileByteArray = originalFileBos.toByteArray()
                        val originalFileFos = FileOutputStream(originalFile)
                        originalFileFos.write(originalFileByteArray)
                        originalFileFos.flush()
                        originalFileFos.close()
    
                        val defaultSmsApp = Telephony.Sms.getDefaultSmsPackage(App.ctx)
    
                        val intent = Intent(Intent.ACTION_SEND)
                        intent.putExtra(
                                Intent.EXTRA_STREAM,
                                FileProvider.getUriForFile(
                                        App.ctx,
                                        "${App.ctx.packageName}.fileprovider",
                                        originalFile
                                )
                        )
                        intent.putExtra(Intent.EXTRA_TEXT, message)
                        intent.putExtra("sms_body", message)
                        intent.type = "image/png"
                        defaultSmsApp?.let {
                            intent.`package` = it
                            try {
                                activity?.startActivity(intent)
                            } catch (e: ActivityNotFoundException) {
                                e { e }
                                toastError("Unable to open SMS app.")
                            }
                        } ?: toastError("No default SMS app found.")
                    }