Skip to content

Commit

Permalink
Add firebase analytics
Browse files Browse the repository at this point in the history
  • Loading branch information
iamoscarliang committed Nov 10, 2024
1 parent eebee47 commit 8787e54
Show file tree
Hide file tree
Showing 71 changed files with 593 additions and 23 deletions.
2 changes: 2 additions & 0 deletions .idea/gradle.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -54,14 +54,17 @@ dependencies {
implementation(project(":core:common"))
implementation(project(":core:network"))
implementation(project(":core:player"))
implementation(project(":core:analytics"))

implementation libs.androidx.appcompat
implementation libs.androidx.constraintlayout
implementation libs.androidx.media3.exoplayer
implementation libs.androidx.media3.session
implementation libs.androidx.navigation.fragment
implementation libs.androidx.navigation.ui
implementation platform(libs.firebase.bom)
implementation libs.firebase.firestore
implementation libs.firebase.analytics
implementation libs.firebase.auth
implementation libs.dagger.core
implementation libs.dagger.android.core
Expand Down
3 changes: 2 additions & 1 deletion app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,10 @@
package="com.oscarliang.spotifyclone">

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<application
android:name=".SpotifyApp"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import androidx.lifecycle.ViewModelProvider;

import com.oscarliang.spotifyclone.core.analytics.di.AnalyticsModule;
import com.oscarliang.spotifyclone.core.auth.di.AuthModule;
import com.oscarliang.spotifyclone.core.common.scheduler.di.SchedulerModule;
import com.oscarliang.spotifyclone.core.data.di.DataModule;
Expand All @@ -21,6 +22,7 @@
DataModule.class,
DatabaseModule.class,
NetworkModule.class,
AnalyticsModule.class,
ViewModelModule.class,
SchedulerModule.class
})
Expand Down
1 change: 1 addition & 0 deletions core/analytics/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/build
19 changes: 19 additions & 0 deletions core/analytics/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
plugins {
alias(libs.plugins.android.library)
}

android {
namespace 'com.oscarliang.spotifyclone.core.analytics'
compileSdk 34
defaultConfig {
minSdk 21
}
}

dependencies {
implementation platform(libs.firebase.bom)
implementation libs.firebase.analytics
implementation libs.dagger.core

annotationProcessor libs.dagger.compiler
}
2 changes: 2 additions & 0 deletions core/analytics/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest />
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.oscarliang.spotifyclone.core.analytics;

public class AnalyticsEvent {

public static final String SCREEN_VIEW = "screen_view";
public static final String MUSIC_PLAY = "music_play";

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.oscarliang.spotifyclone.core.analytics;

import java.util.List;

public interface AnalyticsLogger {

void logEvent(String event, List<AnalyticsParam> params);

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package com.oscarliang.spotifyclone.core.analytics;

import androidx.annotation.NonNull;

import java.util.Objects;

public class AnalyticsParam {

public static final String SCREEN_NAME = "screen_name";
public static final String MUSIC_ID = "music_id";
public static final String MUSIC_TITLE = "music_title";

public String key;
public String value;

public AnalyticsParam(String key, String value) {
this.key = key;
this.value = value;
}

@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
AnalyticsParam param = (AnalyticsParam) o;
return Objects.equals(key, param.key)
&& Objects.equals(value, param.value);
}

@Override
public int hashCode() {
return Objects.hash(key, value);
}

@NonNull
@Override
public String toString() {
return "AnalyticsParam{" +
"key='" + key + '\'' +
", value='" + value + '\'' +
'}';
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.oscarliang.spotifyclone.core.analytics;

import android.os.Bundle;

import com.google.firebase.analytics.FirebaseAnalytics;

import java.util.List;

import javax.inject.Inject;

public class FirebaseAnalyticsLogger implements AnalyticsLogger {

private final FirebaseAnalytics analytics;

@Inject
public FirebaseAnalyticsLogger(FirebaseAnalytics analytics) {
this.analytics = analytics;
}

@Override
public void logEvent(String event, List<AnalyticsParam> params) {
Bundle bundle = new Bundle();
for (AnalyticsParam param : params) {
bundle.putString(param.key, param.value);
}
analytics.logEvent(event, bundle);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.oscarliang.spotifyclone.core.analytics;

import java.util.List;

import javax.inject.Inject;

public class NoOpAnalyticsLogger implements AnalyticsLogger {

@Inject
public NoOpAnalyticsLogger() {
}

@Override
public void logEvent(String event, List<AnalyticsParam> params) {
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.oscarliang.spotifyclone.core.analytics;

import android.util.Log;

import java.util.List;

import javax.inject.Inject;

public class StubAnalyticsLogger implements AnalyticsLogger {

@Inject
public StubAnalyticsLogger() {
}

@Override
public void logEvent(String event, List<AnalyticsParam> params) {
Log.d(
"StubAnalyticsLogger",
"Analytics event: " + event + ", params: " + params.toString()
);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.oscarliang.spotifyclone.core.analytics.di;

import com.oscarliang.spotifyclone.core.analytics.AnalyticsLogger;
import com.oscarliang.spotifyclone.core.analytics.FirebaseAnalyticsLogger;

import javax.inject.Singleton;

import dagger.Binds;
import dagger.Module;

@Module(includes = FirebaseModule.class)
public abstract class AnalyticsModule {

@Singleton
@Binds
public abstract AnalyticsLogger bindAnalyticsLogger(
FirebaseAnalyticsLogger analyticsLogger
);

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.oscarliang.spotifyclone.core.analytics.di;

import android.annotation.SuppressLint;
import android.app.Application;

import com.google.firebase.analytics.FirebaseAnalytics;

import javax.inject.Singleton;

import dagger.Module;
import dagger.Provides;

@Module
public class FirebaseModule {

@SuppressLint("MissingPermission")
@Singleton
@Provides
public FirebaseAnalytics provideFirebaseAnalytics(
Application application
) {
return FirebaseAnalytics.getInstance(application);
}

}
1 change: 1 addition & 0 deletions core/auth/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ android {
}

dependencies {
implementation platform(libs.firebase.bom)
implementation libs.firebase.auth
implementation libs.dagger.core
implementation libs.rxjava
Expand Down
1 change: 1 addition & 0 deletions core/data/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ dependencies {
implementation(project(":core:model"))
implementation(project(":core:testing"))

implementation platform(libs.firebase.bom)
implementation libs.firebase.firestore
implementation libs.dagger.core
implementation libs.rxjava
Expand Down
1 change: 1 addition & 0 deletions core/network/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ android {
}

dependencies {
implementation platform(libs.firebase.bom)
implementation libs.firebase.firestore
implementation libs.dagger.core
implementation libs.rxjava
Expand Down
1 change: 1 addition & 0 deletions core/player/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ android {

dependencies {
implementation(project(":core:model"))
implementation(project(":core:analytics"))

implementation libs.androidx.appcompat
implementation libs.androidx.media3.exoplayer
Expand Down
Loading

0 comments on commit 8787e54

Please sign in to comment.