Skip to content

Commit

Permalink
Merge pull request #28 from Winfooz/mhamdan/analytics-class-name/2018…
Browse files Browse the repository at this point in the history
…-11-08

Mhamdan/analytics class name/2018 11 08
  • Loading branch information
winfoozmnayef authored Nov 8, 2018
2 parents 8bbc5da + 7716b0c commit db0edfb
Show file tree
Hide file tree
Showing 10 changed files with 24 additions and 20 deletions.
2 changes: 1 addition & 1 deletion annotations/gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@ POM_DESCRIPTION=Annotations for use in your project
POM_BINTRAY_NAME=com.winfooz.winanalytics:annotations
POM_ARTIFACT_ID=annotations
POM_PACKAGING=jar
POM_VERSION=1.0.4-beta
POM_VERSION=1.0.5-beta
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@ package com.winfooz.winanalytics.annotations
*/
@Target(AnnotationTarget.CLASS)
@Retention(AnnotationRetention.RUNTIME)
annotation class AnalyticsConfiguration(vararg val value: AnalyticsClient)
annotation class AnalyticsConfiguration(val className: String, vararg val value: AnalyticsClient)
2 changes: 1 addition & 1 deletion compiler/gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@ POM_DESCRIPTION=For proccess annotations and generate code
POM_BINTRAY_NAME=com.winfooz.winanalytics:compiler
POM_ARTIFACT_ID=compiler
POM_PACKAGING=jar
POM_VERSION=1.0.4-beta
POM_VERSION=1.0.5-beta
Original file line number Diff line number Diff line change
Expand Up @@ -64,12 +64,13 @@ object BindingFactory {
/**
* This method for generate enabled clients with lazy initialization inside Analytics class
*
* @param typeSpec the [ConfigurationType].
* @param type For read configuration values by [AnalyticsConfiguration] annotation.
* @param configurationData For set configuration data bases on [configurationData] values.
*/
fun bindAnalyticsConfiguration(typeSpec: TypeSpec.Builder, type: Annotation, configurationData: Configuration) {
fun bindAnalyticsConfiguration(type: Annotation, configurationData: Configuration): TypeSpec.Builder {
val configuration = type as AnalyticsConfiguration
configurationData.className = configuration.className
val typeSpec = TypeSpec.classBuilder(configuration.className)
configuration.value.forEach {
when (it.type) {
FIREBASE -> {
Expand All @@ -93,6 +94,7 @@ object BindingFactory {
}
}
}
return typeSpec
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,5 @@ const val FABRIC_PREFIX = "Fabric"
const val MIXPANEL_PREFIX = "Mixpanel"

const val ANALYTICS_CLASS_NAME_SUFIX = "_Analytics"
const val CLASS_NAME = "Analytics"

const val KAPT_KOTLIN_GENERATED_OPTION_NAME = "kapt.kotlin.generated"
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import com.winfooz.winanalytics.annotations.AnalyticsConfiguration
*
* @see AnalyticsConfiguration
*/
data class Configuration(var firebaseEnabled: Boolean = false, var fabricEnabled: Boolean = false,
data class Configuration(var className: String = "", var firebaseEnabled: Boolean = false, var fabricEnabled: Boolean = false,
var mixPanelEnabled: Boolean = false, var mixpanelKey: String = "") {

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,19 +24,21 @@ class ConfigurationType(private val processingEnv: ProcessingEnvironment,
/**
* Type builder for current analytics class
*/
private val typBuilder: TypeSpec.Builder = TypeSpec.classBuilder(CLASS_NAME)
private lateinit var typBuilder: TypeSpec.Builder

/**
* For generate companion object that extends SingletonHolder class for implement
* singleton pattern with context parameter
*/
private val singletonHolder: TypeSpec.Builder = TypeSpec.companionObjectBuilder()
.superclass(ParameterizedTypeName.get(
SINGLETON_HOLDER,
ClassName(pkg, CLASS_NAME),
CONTEXT
))
.addSuperclassConstructorParameter("::$CLASS_NAME")
private val singletonHolder: TypeSpec.Builder by lazy {
TypeSpec.companionObjectBuilder()
.superclass(ParameterizedTypeName.get(
SINGLETON_HOLDER,
ClassName(pkg, configuration.className),
CONTEXT
))
.addSuperclassConstructorParameter("::${configuration.className}")
}


/**
Expand All @@ -54,7 +56,7 @@ class ConfigurationType(private val processingEnv: ProcessingEnvironment,
* For add supported clients objects with lazy initialization and generate clients keys
*/
override fun addStatement(data: FieldData) {
BindingFactory.bindAnalyticsConfiguration(typBuilder, data.type, configuration)
typBuilder = BindingFactory.bindAnalyticsConfiguration( data.type, configuration)
}

/**
Expand All @@ -71,9 +73,9 @@ class ConfigurationType(private val processingEnv: ProcessingEnvironment,
typBuilder.addProperty(PropertySpec.builder("context", CONTEXT, KModifier.PRIVATE).initializer("context").build())
typBuilder.primaryConstructor(constructorBuilder.build())
typBuilder.addType(singletonHolder.build())
val file = FileSpec.builder(pkg, CLASS_NAME)
val file = FileSpec.builder(pkg, configuration.className)
file.addType(typBuilder.build())
val kaptKotlinGeneratedDir = processingEnv.options[KAPT_KOTLIN_GENERATED_OPTION_NAME]
file.build().writeTo(File(kaptKotlinGeneratedDir, CLASS_NAME))
file.build().writeTo(File(kaptKotlinGeneratedDir, configuration.className))
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,6 @@ class MainActivity : AppCompatActivity() {
}

private fun onHelloWorldClicked(view: View) {
Analytics.getInstance(applicationContext).mainActivityAnalytics.loginEvent(this)
Example.getInstance(applicationContext).mainActivityAnalytics.loginEvent(this)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import com.winfooz.winanalytics.annotations.AnalyticsConfiguration
import io.fabric.sdk.android.Fabric

@AnalyticsConfiguration(
"Example",
AnalyticsClient(type = AnalyticsTypes.FIREBASE),
AnalyticsClient(type = AnalyticsTypes.FABRIC),
AnalyticsClient(key = "mixpanelToken", type = AnalyticsTypes.MIXPANEL)
Expand Down
2 changes: 1 addition & 1 deletion winanalytics/gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@ POM_DESCRIPTION=For log analytics to firebase,fabric,mixpanel etc...
POM_BINTRAY_NAME=com.winfooz.winanalytics:winanalytics
POM_ARTIFACT_ID=winanalytics
POM_PACKAGING=jar
POM_VERSION=1.0.4-beta
POM_VERSION=1.0.5-beta

0 comments on commit db0edfb

Please sign in to comment.