Skip to content

Commit

Permalink
Merge branch 'main' into 4.0-migration-guide
Browse files Browse the repository at this point in the history
  • Loading branch information
wzieba committed Feb 1, 2024
2 parents c394a8d + ca04c4f commit 5d4db28
Show file tree
Hide file tree
Showing 21 changed files with 572 additions and 301 deletions.
37 changes: 37 additions & 0 deletions .github/workflows/generate-docs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
name: Generate and publish documentation

on:
release:
types: [ released ]
workflow_dispatch:

# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
contents: read
pages: write
id-token: write

jobs:
deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: set up JDK
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
- name: Generate API documentation
run: ./gradlew dokkaHtml
- name: Setup Pages
uses: actions/configure-pages@v4
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
path: 'parsely/build/dokka/html'
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
1 change: 0 additions & 1 deletion .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ jobs:
with:
java-version: '17'
distribution: 'temurin'
cache: gradle
- name: Build library
run: ./gradlew :parsely:assembleDebug
- name: Publish to Maven Central Repository
Expand Down
42 changes: 37 additions & 5 deletions .github/workflows/readme.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,10 @@ jobs:
with:
java-version: '17'
distribution: 'temurin'
cache: gradle
- name: Setup Gradle
uses: gradle/gradle-build-action@v2
- name: Validate binary compatibility
run: ./gradlew apiCheck
- name: Build library
run: ./gradlew :parsely:assembleDebug
- name: Build example app
Expand Down Expand Up @@ -44,7 +47,7 @@ jobs:
name: artifact
path: ~/.m2/repository/com/parsely/parsely/*
functional-tests:
runs-on: macos-latest
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
Expand All @@ -54,9 +57,37 @@ jobs:
with:
java-version: '17'
distribution: 'temurin'
cache: gradle
- name: Setup Gradle
uses: gradle/gradle-build-action@v2
- name: Enable KVM group perms
run: |
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
sudo udevadm control --reload-rules
sudo udevadm trigger --name-match=kvm
- name: AVD cache
uses: actions/cache@v3
id: avd-cache
with:
path: |
~/.android/avd/*
~/.android/adb*
key: avd
- name: Create AVD and generate snapshot for caching
if: steps.avd-cache.outputs.cache-hit != 'true'
uses: reactivecircus/android-emulator-runner@v2
with:
working-directory: .
api-level: 31
profile: Nexus 6
arch: x86_64
force-avd-creation: false
avd-name: macOS-avd-x86_64-31
emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
disable-animations: true
disk-size: 4096M
script: echo "Generated AVD snapshot for caching."
- name: Functional Tests
uses: reactivecircus/android-emulator-runner@v2.28.0
uses: reactivecircus/android-emulator-runner@v2
with:
working-directory: .
api-level: 31
Expand All @@ -66,7 +97,8 @@ jobs:
avd-name: macOS-avd-x86_64-31
emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
disable-animations: true
script: ./gradlew :parsely:connectedDebugAndroidTest
disk-size: 4096M
script: adb uninstall "com.parsely.parselyandroid.test"; ./gradlew :parsely:connectedDebugAndroidTest
- name: Publish build artifacts
uses: actions/upload-artifact@v3
if: always()
Expand Down
3 changes: 0 additions & 3 deletions .github/workflows/submit-gradle-dependencies.yml
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
name: Submit dependencies to GitHub Dependency Graph
on:
push:
branches:
- main
- release/*
permissions:
contents: write
jobs:
Expand Down
5 changes: 3 additions & 2 deletions example/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,13 @@ plugins {
}

android {
compileSdkVersion 33
compileSdk 34
namespace = "com.example"

defaultConfig {
applicationId "com.parsely.example.parselyexample"
minSdkVersion 21
targetSdkVersion 33
targetSdkVersion 34
versionCode 1
versionName "1.0"
}
Expand Down
58 changes: 58 additions & 0 deletions example/src/main/java/com/example/InternalDebugOnlyData.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package com.example;

import com.parsely.parselyandroid.ParselyTrackerInternal;

import org.jetbrains.annotations.Nullable;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
* The InternalDebugOnlyData class is designed to provide access to internal data for debugging
* purposes through reflection. The methods within this class are intended for internal use only
* and should *not* be utilized within the SDK user's code.
* @noinspection KotlinInternalInJava
*/
class InternalDebugOnlyData {
private final ParselyTrackerInternal parselyTracker;

InternalDebugOnlyData(ParselyTrackerInternal parselyTracker) {
this.parselyTracker = parselyTracker;
}

boolean engagementIsActive() {
return (boolean) invokePrivateMethod("engagementIsActive");
}

@Nullable
Double getEngagementInterval() {
return (Double) invokePrivateMethod("getEngagementInterval");
}

@Nullable
Double getVideoEngagementInterval() {
return (Double) invokePrivateMethod("getVideoEngagementInterval");
}

long getFlushInterval() {
return (long) invokePrivateMethod("getFlushInterval");
}

boolean videoIsActive() {
return (boolean) invokePrivateMethod("videoIsActive");
}

boolean flushTimerIsActive() {
return (boolean) invokePrivateMethod("flushTimerIsActive");
}

private Object invokePrivateMethod(String methodName) {
try {
Method method = ParselyTrackerInternal.class.getDeclaredMethod(methodName);
method.setAccessible(true);
return method.invoke(parselyTracker);
} catch (IllegalAccessException | NoSuchMethodException | InvocationTargetException e) {
throw new RuntimeException(e);
}
}
}
47 changes: 28 additions & 19 deletions example/src/main/java/com/example/MainActivity.java
Original file line number Diff line number Diff line change
@@ -1,31 +1,38 @@
package com.example;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.TextView;

import com.parsely.parselyandroid.*;
import com.parsely.parselyandroid.ParselyTracker;
import com.parsely.parselyandroid.ParselyTrackerInternal;
import com.parsely.parselyandroid.ParselyVideoMetadata;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;

/**
* @noinspection KotlinInternalInJava
*/
public class MainActivity extends Activity {

private InternalDebugOnlyData internalDebugOnlyData;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

// initialize the Parsely tracker with your site id and the current Context
ParselyTracker.sharedInstance("example.com", 30, this, true);
ParselyTracker.init("example.com", 30, this, true);
internalDebugOnlyData = new InternalDebugOnlyData((ParselyTrackerInternal) ParselyTracker.sharedInstance());

final TextView intervalView = (TextView) findViewById(R.id.interval);

Expand All @@ -39,8 +46,8 @@ protected void onCreate(Bundle savedInstanceState) {
public void handleMessage(Message msg) {
TextView[] v = (TextView[]) msg.obj;
TextView iView = v[0];
if (ParselyTracker.sharedInstance().flushTimerIsActive()) {
iView.setText(String.format("Flush Interval: %d", ParselyTracker.sharedInstance().getFlushInterval()));
if (internalDebugOnlyData.flushTimerIsActive()) {
iView.setText(String.format("Flush Interval: %d", internalDebugOnlyData.getFlushInterval()));
} else {
iView.setText("Flush timer inactive");
}
Expand All @@ -62,23 +69,23 @@ public void run() {

private void updateEngagementStrings() {
StringBuilder eMsg = new StringBuilder("Engagement is ");
if (ParselyTracker.sharedInstance().engagementIsActive() == true) {
if (internalDebugOnlyData.engagementIsActive()) {
eMsg.append("active.");
} else {
eMsg.append("inactive.");
}
eMsg.append(String.format(" (interval: %.01fms)", ParselyTracker.sharedInstance().getEngagementInterval()));
eMsg.append(String.format(" (interval: %.01fms)", internalDebugOnlyData.getEngagementInterval()));

TextView eView = findViewById(R.id.et_interval);
eView.setText(eMsg.toString());

StringBuilder vMsg = new StringBuilder("Video is ");
if (ParselyTracker.sharedInstance().videoIsActive() == true) {
if (internalDebugOnlyData.videoIsActive()) {
vMsg.append("active.");
} else {
vMsg.append("inactive.");
}
vMsg.append(String.format(" (interval: %.01fms)", ParselyTracker.sharedInstance().getVideoEngagementInterval()));
vMsg.append(String.format(" (interval: %.01fms)", internalDebugOnlyData.getVideoEngagementInterval()));

TextView vView = findViewById(R.id.video_interval);
vView.setText(vMsg.toString());
Expand Down Expand Up @@ -117,13 +124,15 @@ public void trackPlay(View view) {
90
);
// NOTE: For videos embedded in an article, "url" should be the URL for that article.
ParselyTracker.sharedInstance().trackPlay("http://example.com/app-videos", null, metadata, null);
ParselyTracker.sharedInstance().trackPlay("http://example.com/app-videos", "", metadata, null);

}

public void trackPause(View view) {
ParselyTracker.sharedInstance().trackPause();
}

public void trackReset(View view) {ParselyTracker.sharedInstance().resetVideo(); }
public void trackReset(View view) {
ParselyTracker.sharedInstance().resetVideo();
}
}
3 changes: 0 additions & 3 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,5 @@ org.gradle.jvmargs=-XX:MaxMetaspaceSize=2g
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true

android.disableAutomaticComponentCreation=true
android.useAndroidX=true

android.experimental.lint.version=8.1.0

Binary file modified gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
4 changes: 3 additions & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Loading

0 comments on commit 5d4db28

Please sign in to comment.