Skip to content

Commit

Permalink
Merge with master
Browse files Browse the repository at this point in the history
  • Loading branch information
winfoozmnayef committed Nov 8, 2018
2 parents ad1938a + 8bbc5da commit 7716b0c
Show file tree
Hide file tree
Showing 8 changed files with 200 additions and 25 deletions.
27 changes: 16 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,12 @@ A light-weight android library that can be quickly integrated into any app to us
- Support multiple analytical tools e.g(Firebase, Fabric, Mixpanel).
- Annotations based.
- 100% reflection free.
# Contributing:
If you'd like to contribute, please take a look at the [`Contributing`](https://github.com/Winfooz/WinAnalytics/wiki/Contributing) page on the Wiki.
# Example WinAnalytics:

**Application class**
```
```kotlin
@AnalyticsConfiguration(
AnalyticsClient(type = AnalyticsTypes.FIREBASE, enabled=false),
AnalyticsClient(type = AnalyticsTypes.FABRIC),
Expand All @@ -30,10 +32,8 @@ class MyApplication : Application() {
}
```

# Example WinAnalytics:

**Model class**
```Java
```kotlin
data class User(
@Analytics(
Event("Login"),
Expand Down Expand Up @@ -70,7 +70,7 @@ data class Address(
```

**MainActivity**
```
```kotlin
private fun onHelloWorldClicked(view: View) {
Analytics.getInstance(applicationContext).userAnalytics.loginEvent(user)
}
Expand All @@ -79,7 +79,7 @@ private fun onHelloWorldClicked(view: View) {
# Example analytics from more than a place:

**MainActivity**
```
```kotlin
@AnalyticsEmbedded
var user: User? = null

Expand All @@ -98,15 +98,20 @@ protected void onCreate(Bundle savedInstanceState) {
# Download

```groovy
repositories {
maven {
url "https://dl.bintray.com/mnayef95/WinAnalytics"
}
}
dependencies {
implementation 'com.winfooz.winanalytics:annotations:1.0.0-beta'
implementation 'com.winfooz.winanalytics:winanalytics:1.0.0-beta'
kapt 'com.winfooz.winanalytics:compiler:1.0.0-beta'
implementation 'com.winfooz.winanalytics:winanalytics:1.0.3-beta'
kapt 'com.winfooz.winanalytics:compiler:1.0.3-beta'
}
```

# Support annotations
```
```kotlin
@Analytics()
@AnalyticsConfiguration()
@AnalyticsEmbedded()
Expand Down
172 changes: 172 additions & 0 deletions WinAnalyticsCodeStyle.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
<code_scheme name="Default" version="173">
<option name="RIGHT_MARGIN" value="100" />
<AndroidXmlCodeStyleSettings>
<option name="USE_CUSTOM_SETTINGS" value="true" />
</AndroidXmlCodeStyleSettings>
<JavaCodeStyleSettings>
<option name="CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND" value="99" />
<option name="NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND" value="99" />
<option name="PACKAGES_TO_USE_IMPORT_ON_DEMAND">
<value />
</option>
<option name="IMPORT_LAYOUT_TABLE">
<value>
<package name="android" withSubpackages="true" static="false" />
<emptyLine />
<package name="com" withSubpackages="true" static="false" />
<emptyLine />
<package name="junit" withSubpackages="true" static="false" />
<emptyLine />
<package name="net" withSubpackages="true" static="false" />
<emptyLine />
<package name="org" withSubpackages="true" static="false" />
<emptyLine />
<package name="java" withSubpackages="true" static="false" />
<emptyLine />
<package name="javax" withSubpackages="true" static="false" />
<emptyLine />
<package name="" withSubpackages="true" static="false" />
<emptyLine />
<package name="" withSubpackages="true" static="true" />
<emptyLine />
</value>
</option>
</JavaCodeStyleSettings>
<MarkdownNavigatorCodeStyleSettings>
<option name="RIGHT_MARGIN" value="72" />
</MarkdownNavigatorCodeStyleSettings>
<Objective-C-extensions>
<file>
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Import" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Macro" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Typedef" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Enum" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Constant" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Global" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Struct" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="FunctionPredecl" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Function" />
</file>
<class>
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Property" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Synthesize" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="InitMethod" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="StaticMethod" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="InstanceMethod" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="DeallocMethod" />
</class>
<extensions>
<pair source="cpp" header="h" fileNamingConvention="NONE" />
<pair source="c" header="h" fileNamingConvention="NONE" />
</extensions>
</Objective-C-extensions>
<XML>
<option name="XML_KEEP_LINE_BREAKS" value="false" />
<option name="XML_ALIGN_ATTRIBUTES" value="false" />
<option name="XML_SPACE_INSIDE_EMPTY_TAG" value="true" />
</XML>
<codeStyleSettings language="XML">
<option name="FORCE_REARRANGE_MODE" value="1" />
<indentOptions>
<option name="CONTINUATION_INDENT_SIZE" value="4" />
</indentOptions>
<arrangement>
<rules>
<section>
<rule>
<match>
<AND>
<NAME>xmlns:android</NAME>
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>xmlns:.*</NAME>
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:id</NAME>
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:name</NAME>
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>name</NAME>
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>style</NAME>
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
<order>ANDROID_ATTRIBUTE_ORDER</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_NAMESPACE>.*</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
</rules>
</arrangement>
</codeStyleSettings>
</code_scheme>
4 changes: 0 additions & 4 deletions annotations/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,4 @@ plugins {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.0"
}
apply from: rootProject.file('deploy.gradle')
6 changes: 1 addition & 5 deletions compiler/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,9 @@ sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])

implementation project(':annotations')

// Code generation library for kotlin.
implementation 'com.squareup:kotlinpoet:0.7.0'

implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.0"
implementation 'com.squareup:kotlinpoet:0.6.0'
}
apply from: rootProject.file('deploy.gradle')
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,8 @@ class AnalyticsType(
private val constructorBuilder: FunSpec.Builder by lazy {
val funSpec = FunSpec.constructorBuilder()
funSpec.addModifiers(KModifier.PUBLIC)
funSpec.addParameter(ParameterSpec.builder("val context", CONTEXT, KModifier.PRIVATE).build())
funSpec.addParameter(ParameterSpec.builder("context", CONTEXT, KModifier.PRIVATE).build())
typBuilder.addProperty(PropertySpec.builder("context", CONTEXT, KModifier.PRIVATE).initializer("context").build())
addPram(configuration.firebaseEnabled, funSpec, FIREBASE_PREFIX, FIREBASE_ANALYTICS)
addPram(configuration.fabricEnabled, funSpec, FABRIC_PREFIX, FABRIC_ANALYTICS)
addPram(configuration.mixPanelEnabled, funSpec, MIXPANEL_PREFIX, MIXPANEL_ANALYTICS)
Expand Down Expand Up @@ -125,7 +126,8 @@ class AnalyticsType(
*/
private fun addPram(add: Boolean, funSpec: FunSpec.Builder, name: String, className: ClassName) {
if (add) {
funSpec.addParameter("val ${name.toLowerCase()}", className, KModifier.PRIVATE)
typBuilder.addProperty(PropertySpec.builder(name.toLowerCase(), className, KModifier.PRIVATE).initializer(name.toLowerCase()).build())
funSpec.addParameter(name.toLowerCase(), className, KModifier.PRIVATE)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ class ConfigurationType(private val processingEnv: ProcessingEnvironment,
private val constructorBuilder: FunSpec.Builder = FunSpec.constructorBuilder()
.addModifiers(KModifier.PRIVATE)
.addParameter(ParameterSpec.builder(
"val context",
"context",
CONTEXT,
KModifier.PRIVATE
).build())
Expand All @@ -70,6 +70,7 @@ class ConfigurationType(private val processingEnv: ProcessingEnvironment,
* For generate Analytics class with singleton pattern
*/
override fun build() {
typBuilder.addProperty(PropertySpec.builder("context", CONTEXT, KModifier.PRIVATE).initializer("context").build())
typBuilder.primaryConstructor(constructorBuilder.build())
typBuilder.addType(singletonHolder.build())
val file = FileSpec.builder(pkg, configuration.className)
Expand Down
5 changes: 3 additions & 2 deletions sample/src/main/java/com/winfooz/winanalytics/sample/Str.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
package com.winfooz.winanalytics.sample;

import com.winfooz.winanalytics.annotations.Analytics;
import com.winfooz.winanalytics.annotations.Event;

public class Str {

@Analytics({})
@Analytics({@Event("Mohamed")})
private boolean mMohamed;

public boolean getMohamed() {
public boolean getMMohamed() {
return false;
}
}
2 changes: 2 additions & 0 deletions winanalytics/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ android {
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.0"

implementation project(':annotations')

implementation 'com.google.firebase:firebase-core:16.0.4'
implementation "com.mixpanel.android:mixpanel-android:5.4.1"
implementation('com.crashlytics.sdk.android:crashlytics:2.9.5@aar') {
Expand Down

0 comments on commit 7716b0c

Please sign in to comment.