Merge branch 'master' into two_oh_one

Conflicts:
	AffdexMe/app/src/main/java/com/affectiva/affdexme/DrawingView.java
	AffdexMe/app/src/main/java/com/affectiva/affdexme/MainActivity.java
	AffdexMe/app/src/main/res/drawable/camera_button_selector.xml
	AffdexMe/app/src/main/res/drawable/settings_button_selector.xml
This commit is contained in:
Abdelrahman Mahmoud 2015-10-01 21:12:00 -04:00
commit 11408d5a70
22 changed files with 70 additions and 64 deletions

8
.gitignore vendored
View file

@ -25,11 +25,3 @@ proguard/
# Log Files # Log Files
*.log *.log
#Affectiva SDK files
AffdexMe/app/libs/*
AffdexMe/app/src/main/jniLibs/*
AffdexMe/app/src/main/assets/Affdex

View file

@ -5,7 +5,7 @@
<GradleProjectSettings> <GradleProjectSettings>
<option name="distributionType" value="LOCAL" /> <option name="distributionType" value="LOCAL" />
<option name="externalProjectPath" value="$PROJECT_DIR$" /> <option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="gradleHome" value="C:\Program Files\Android\Android Studio\gradle\gradle-2.4" /> <option name="gradleHome" value="$APPLICATION_HOME_DIR$/gradle/gradle-2.2.1" />
<option name="gradleJvm" value="1.7" /> <option name="gradleJvm" value="1.7" />
<option name="modules"> <option name="modules">
<set> <set>

View file

@ -12,12 +12,10 @@
<option name="SELECTED_TEST_ARTIFACT" value="_android_test_" /> <option name="SELECTED_TEST_ARTIFACT" value="_android_test_" />
<option name="ASSEMBLE_TASK_NAME" value="assembleDebug" /> <option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
<option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" /> <option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" />
<option name="SOURCE_GEN_TASK_NAME" value="generateDebugSources" />
<option name="ASSEMBLE_TEST_TASK_NAME" value="assembleDebugAndroidTest" /> <option name="ASSEMBLE_TEST_TASK_NAME" value="assembleDebugAndroidTest" />
<option name="COMPILE_JAVA_TEST_TASK_NAME" value="compileDebugAndroidTestSources" /> <option name="COMPILE_JAVA_TEST_TASK_NAME" value="compileDebugAndroidTestSources" />
<afterSyncTasks> <option name="TEST_SOURCE_GEN_TASK_NAME" value="generateDebugAndroidTestSources" />
<task>generateDebugAndroidTestSources</task>
<task>generateDebugSources</task>
</afterSyncTasks>
<option name="ALLOW_USER_CONFIGURATION" value="false" /> <option name="ALLOW_USER_CONFIGURATION" value="false" />
<option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" /> <option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" />
<option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" /> <option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" />
@ -86,11 +84,13 @@
<excludeFolder url="file://$MODULE_DIR$/build/outputs" /> <excludeFolder url="file://$MODULE_DIR$/build/outputs" />
<excludeFolder url="file://$MODULE_DIR$/build/tmp" /> <excludeFolder url="file://$MODULE_DIR$/build/tmp" />
</content> </content>
<orderEntry type="jdk" jdkName="Android API 22 Platform (1)" jdkType="Android SDK" /> <orderEntry type="jdk" jdkName="Android API 22 Platform" jdkType="Android SDK" />
<orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" exported="" name="dagger-1.2.2" level="project" /> <orderEntry type="library" exported="" name="dagger-1.2.2" level="project" />
<orderEntry type="library" exported="" name="Affdex-sdk" level="project" />
<orderEntry type="library" exported="" name="javax.inject-1" level="project" /> <orderEntry type="library" exported="" name="javax.inject-1" level="project" />
<orderEntry type="library" exported="" name="Affdex-sdk" level="project" />
<orderEntry type="library" exported="" name="gson-2.3" level="project" />
<orderEntry type="library" exported="" name="Affdex-sdk-javadoc" level="project" /> <orderEntry type="library" exported="" name="Affdex-sdk-javadoc" level="project" />
<orderEntry type="library" exported="" name="flurry-analytics-4.1.0" level="project" />
</component> </component>
</module> </module>

View file

@ -8,8 +8,8 @@ android {
applicationId "com.affectiva.affdexme" applicationId "com.affectiva.affdexme"
minSdkVersion 16 minSdkVersion 16
targetSdkVersion 22 targetSdkVersion 22
versionCode 18 versionCode 14
versionName "2.0.18b" versionName "2.0.0"
} }
buildTypes { buildTypes {
release { release {
@ -20,9 +20,19 @@ android {
} }
dependencies { dependencies {
//gson is necessary for the license to be parsed
compile 'com.google.code.gson:gson:2.3'
//include the Affdex SDK jars //include the Affdex SDK jars
compile files('libs/Affdex-sdk.jar') compile files('libs/Affdex-sdk.jar')
compile files('libs/Affdex-sdk-javadoc.jar') compile files('libs/Affdex-sdk-javadoc.jar')
compile files('libs/dagger-1.2.2.jar') compile files('libs/dagger-1.2.2.jar')
compile files('libs/flurry-analytics-4.1.0.jar')
compile files('libs/javax.inject-1.jar') compile files('libs/javax.inject-1.jar')
//although the use of the CameraDetector class in this project does not require it, you may have to include
//the following dependencies if you use other features of the Affdex SDK
//compile 'com.android.support:support-v4:22.2.0'
//compile 'com.google.android.gms:play-services:7.5.0'
} }

View file

@ -12,8 +12,6 @@
#prevent proguard from warning us about not including the GooglePlay dependency #prevent proguard from warning us about not including the GooglePlay dependency
-dontwarn ** -dontwarn **
-keepattributes Exceptions,InnerClasses,Signature,Deprecated, SourceFile,LineNumberTable,*Annotation*,EnclosingMethod
#keep all classes (otherwise Proguard may remove classes that use reflection, injection, Gson, etc...) #keep all classes (otherwise Proguard may remove classes that use reflection, injection, Gson, etc...)
-keep class sun.** -keep class sun.**
-keepclassmembers class sun.** {*;} -keepclassmembers class sun.** {*;}
@ -27,20 +25,19 @@
#keep certain class members (otherwise Proguard would strip the members of these classes) #keep certain class members (otherwise Proguard would strip the members of these classes)
-keep class com.** -keep class com.**
-keepclassmembers class !com.affectiva.affdexme.MainActivity,!com.affectiva.android.affdex.sdk.detector.Detector {*;} -keepclassmembers class com.affectiva.android.affdex.sdk.detector.A* { *; }
-keepclassmembers class com.affectiva.android.affdex.sdk.detector.Detector { -keepclassmembers class com.affectiva.android.affdex.sdk.detector.B* { *; }
public void setDetect**; -keepclassmembers class com.affectiva.android.affdex.sdk.detector.I* { *; }
} -keepclassmembers class com.affectiva.android.affdex.sdk.detector.L* { *; }
-keepclassmembers class com.affectiva.android.affdex.sdk.Frame { *; }
# Dagger
-dontwarn dagger.internal.codegen.** -keepclassmembers class com.affectiva.affdexme.DrawingView {*;}
-keepclassmembers,allowobfuscation class * { -keepclassmembers class com.affectiva.affdexme.MetricView {*;}
@javax.inject.* *; -keepclassmembers class com.affectiva.affdexme.GradientMetricView {*;}
@dagger.* *;
<init>(); -keepclassmembers class * {
} @javax.inject.* *;
-keep class dagger.* { *; } @dagger.* *;
-keep class javax.inject.* { *; } <init>();
-keep class * extends dagger.internal.Binding }
-keep class * extends dagger.internal.ModuleAdapter
-keep class * extends dagger.internal.StaticInjection

View file

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.affectiva.affdexme" > package="com.affectiva.affdexme" >
<uses-sdk <uses-sdk
android:minSdkVersion="16" android:minSdkVersion="16"
android:targetSdkVersion="22" /> android:targetSdkVersion="22" />
@ -32,7 +32,7 @@
</activity> </activity>
<activity <activity
android:name=".SettingsActivity" android:name=".SettingsActivity"
android:parentActivityName="com.affectiva.affdexme.MainActivity" android:parentActivityName=".MainActivity"
android:theme="@style/EditPreferencesTheme"> android:theme="@style/EditPreferencesTheme">
<meta-data <meta-data
android:name="android.support.PARENT_ACTIVITY" android:name="android.support.PARENT_ACTIVITY"

View file

@ -325,7 +325,7 @@ public class DrawingView extends SurfaceView implements SurfaceHolder.Callback {
drawingThread = new DrawingThread(surfaceHolder, drawingViewConfig); drawingThread = new DrawingThread(surfaceHolder, drawingViewConfig);
} }
public void setTypeface(Typeface face) { public void setTypeface(Typeface face) {
drawingViewConfig.textPaint.setTypeface(face); drawingViewConfig.textPaint.setTypeface(face);
drawingViewConfig.textBorderPaint.setTypeface(face); drawingViewConfig.textBorderPaint.setTypeface(face);

View file

@ -9,6 +9,7 @@ import android.os.Bundle;
import android.os.SystemClock; import android.os.SystemClock;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
import android.util.Log; import android.util.Log;
import android.util.DisplayMetrics;
import android.view.KeyEvent; import android.view.KeyEvent;
import android.view.MotionEvent; import android.view.MotionEvent;
import android.view.SurfaceView; import android.view.SurfaceView;
@ -242,8 +243,9 @@ public class MainActivity extends Activity
* that view will be painted with what the camera sees. * that view will be painted with what the camera sees.
*/ */
detector = new CameraDetector(this, cameraType, cameraView); detector = new CameraDetector(this, cameraType, cameraView);
//TODO: this method SHOULD NOT be included in sample code release (customer should enter their own license file);
// NOTE: uncomment the line below and replace "YourLicenseFile" with your license file, which should be stored in /assets/Affdex/ // NOTE: uncomment the line below and replace "YourLicenseFile" with your license file, which should be stored in /assets/Affdex/
//detector.setLicensePath("YourLicenseFile"); detector.setLicensePath("YourLicenseFile");
detector.setImageListener(this); detector.setImageListener(this);
detector.setFaceListener(this); detector.setFaceListener(this);
detector.setOnCameraEventListener(this); detector.setOnCameraEventListener(this);
@ -258,7 +260,6 @@ public class MainActivity extends Activity
restoreApplicationSettings(); restoreApplicationSettings();
setMenuVisible(true); setMenuVisible(true);
isMenuShowingForFirstTime = true; isMenuShowingForFirstTime = true;
mainWindowResumedTasks();
} }
/* /*
@ -337,6 +338,23 @@ public class MainActivity extends Activity
numberOfFrames = 0; numberOfFrames = 0;
} }
/**
* We want to start the camera as late as possible, so it does not freeze the application before it has been visually resumed.
* We thus post a runnable that will take care of starting the camera.
* We also reset variables used to calculate the Processed Frames Per Second.
*/
@Override
public void onWindowFocusChanged(boolean hasFocus) {
if (hasFocus && isFrontFacingCameraDetected) {
cameraView.post(new Runnable() {
@Override
public void run() {
mainWindowResumedTasks();
}
});
}
}
void mainWindowResumedTasks() { void mainWindowResumedTasks() {
startDetector(); startDetector();
@ -345,7 +363,6 @@ public class MainActivity extends Activity
progressBarLayout.setVisibility(View.GONE); progressBarLayout.setVisibility(View.GONE);
} }
resetFPSCalculations(); resetFPSCalculations();
cameraView.postDelayed(new Runnable() { cameraView.postDelayed(new Runnable() {
@Override @Override
public void run() { public void run() {
@ -423,7 +440,7 @@ public class MainActivity extends Activity
* If the user has selected to have facial tracking dots or measurements drawn, we use face.getFacePoints() to send those points * If the user has selected to have facial tracking dots or measurements drawn, we use face.getFacePoints() to send those points
* to our drawing thread and also inform the thread what the valence score was, as that will determine the color * to our drawing thread and also inform the thread what the valence score was, as that will determine the color
* of the bounding box. * of the bounding box.
*/ */
if (drawingView.getDrawPointsEnabled() || drawingView.getDrawMeasurementsEnabled()) { if (drawingView.getDrawPointsEnabled() || drawingView.getDrawMeasurementsEnabled()) {
drawingView.setMetrics(face.measurements.orientation.getRoll(), face.measurements.orientation.getYaw(), face.measurements.orientation.getPitch(), face.measurements.getInterocularDistance(), face.emotions.getValence()); drawingView.setMetrics(face.measurements.orientation.getRoll(), face.measurements.orientation.getYaw(), face.measurements.orientation.getPitch(), face.measurements.getInterocularDistance(), face.emotions.getValence());
drawingView.updatePoints(face.getFacePoints(),mirrorPoints); drawingView.updatePoints(face.getFacePoints(),mirrorPoints);
@ -577,7 +594,7 @@ public class MainActivity extends Activity
startActivity(new Intent(this, SettingsActivity.class)); startActivity(new Intent(this, SettingsActivity.class));
} }
/* onCameraStarted event not available until SDK 2.02 /* onCameraStarted is a feature of SDK 2.02, commenting out for 2.01
@Override @Override
public void onCameraStarted(boolean b, Throwable throwable) { public void onCameraStarted(boolean b, Throwable throwable) {
if (throwable != null) { if (throwable != null) {
@ -594,13 +611,16 @@ public class MainActivity extends Activity
cameraPreviewWidth = cameraWidth; cameraPreviewWidth = cameraWidth;
cameraPreviewHeight = cameraHeight; cameraPreviewHeight = cameraHeight;
} }
drawingView.setThickness((int)(cameraWidth/100f)); drawingView.setThickness((int)(cameraPreviewWidth/100f));
mainLayout.post(new Runnable() { mainLayout.post(new Runnable() {
@Override @Override
public void run() { public void run() {
int layoutWidth = mainLayout.getWidth(); //Get the screen width and height, and calculate the new app width/height based on the surfaceview aspect ratio.
int layoutHeight = mainLayout.getHeight(); DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int layoutWidth = displaymetrics.widthPixels;
int layoutHeight = displaymetrics.heightPixels;
if (cameraPreviewWidth == 0 || cameraPreviewHeight == 0 || layoutWidth == 0 || layoutHeight == 0) if (cameraPreviewWidth == 0 || cameraPreviewHeight == 0 || layoutWidth == 0 || layoutHeight == 0)
return; return;

View file

@ -8,7 +8,7 @@ import android.graphics.Paint;
import android.graphics.Typeface; import android.graphics.Typeface;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.view.View; import android.view.View;
import java.lang.Math;
import java.lang.reflect.Method; import java.lang.reflect.Method;
/** /**

View file

@ -20,10 +20,10 @@ import android.widget.Button;
import android.widget.GridLayout; import android.widget.GridLayout;
import android.widget.TextView; import android.widget.TextView;
import static com.affectiva.affdexme.MainActivity.NUM_METRICS_DISPLAYED;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import static com.affectiva.affdexme.MainActivity.NUM_METRICS_DISPLAYED;
/** /**
* A fragment to display a graphical menu which allows the user to select which metrics to display. * A fragment to display a graphical menu which allows the user to select which metrics to display.
* *

View file

@ -1,12 +1,9 @@
package com.affectiva.affdexme; package com.affectiva.affdexme;
import android.app.Activity; import android.app.Activity;
import android.content.ContentResolver;
import android.content.Context;
import android.content.res.Resources; import android.content.res.Resources;
import android.graphics.Color; import android.graphics.Color;
import android.net.Uri; import android.net.Uri;
import android.util.TypedValue;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.TextureView; import android.view.TextureView;
import android.view.View; import android.view.View;

View file

@ -1,7 +1,5 @@
package com.affectiva.affdexme; package com.affectiva.affdexme;
import java.lang.StringBuilder;
/** /**
* A class containing: * A class containing:
* -enumerations representing the Emotion and Expressions featured in the Affectiva SDK. * -enumerations representing the Emotion and Expressions featured in the Affectiva SDK.

View file

@ -5,7 +5,6 @@ import android.graphics.drawable.ColorDrawable;
import android.os.Bundle; import android.os.Bundle;
import android.preference.PreferenceActivity; import android.preference.PreferenceActivity;
import android.preference.PreferenceFragment; import android.preference.PreferenceFragment;
import android.R.id.*;
import android.view.MenuItem; import android.view.MenuItem;
import java.util.List; import java.util.List;

View file

@ -3,9 +3,6 @@ package com.affectiva.errorreporting;
import android.app.Application; import android.app.Application;
import android.content.Intent; import android.content.Intent;
/**
* Created by Alan on 8/21/2015.
*/
public class CustomApplication extends Application { public class CustomApplication extends Application {
static volatile boolean wasErrorActivityStarted = false; static volatile boolean wasErrorActivityStarted = false;

View file

@ -1,7 +1,6 @@
package com.affectiva.errorreporting; package com.affectiva.errorreporting;
import android.app.Activity; import android.app.Activity;
import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.view.View; import android.view.View;
@ -13,9 +12,6 @@ import com.affectiva.affdexme.R;
import java.text.DateFormat; import java.text.DateFormat;
import java.util.Date; import java.util.Date;
/**
* Created by Alan on 8/21/2015.
*/
public class ErrorReporter extends Activity implements View.OnClickListener { public class ErrorReporter extends Activity implements View.OnClickListener {
String errorMessage; String errorMessage;

View file

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

View file

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

View file

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

View file

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/settings_button_pressed_1"/> <item android:state_pressed="true" android:drawable="@drawable/settings_button_pressed"/>
<item android:drawable="@drawable/settings_button" /> <item android:drawable="@drawable/settings_button" />
</selector> </selector>

0
AffdexMe/gradlew vendored Normal file → Executable file
View file