diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d44ed02..c5bf6f0 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -39,6 +39,7 @@ android:name=".MainActivity" android:configChanges="screenSize|keyboardHidden|orientation" android:label="@string/app_name" + android:screenOrientation="landscape" android:theme="@style/MainActivityTheme"> diff --git a/app/src/main/ic_launcher-web.png b/app/src/main/ic_launcher-web.png new file mode 100644 index 0000000..1d5004a Binary files /dev/null and b/app/src/main/ic_launcher-web.png differ diff --git a/app/src/main/java/com/affectiva/affdexme/MainActivity.java b/app/src/main/java/com/affectiva/affdexme/MainActivity.java index d952ff2..f21db82 100644 --- a/app/src/main/java/com/affectiva/affdexme/MainActivity.java +++ b/app/src/main/java/com/affectiva/affdexme/MainActivity.java @@ -108,7 +108,7 @@ public class MainActivity extends AppCompatActivity private RelativeLayout metricViewLayout; private LinearLayout leftMetricsLayout; private LinearLayout rightMetricsLayout; - private MetricDisplay[] metricDisplays; + private TextView[] metricDisplays; private TextView[] metricNames; private TextView fpsName; private TextView fpsPct; @@ -129,6 +129,7 @@ public class MainActivity extends AppCompatActivity private boolean isFrontFacingCameraDetected = true; private boolean isBackFacingCameraDetected = true; private boolean multiFaceModeEnabled = false; + private TextView showFaceText; private MediaPlayer mp; @@ -356,8 +357,8 @@ public class MainActivity extends AppCompatActivity leftMetricsLayout = (LinearLayout) findViewById(R.id.left_metrics); rightMetricsLayout = (LinearLayout) findViewById(R.id.right_metrics); mainLayout = (RelativeLayout) findViewById(R.id.main_layout); - fpsPct = (TextView) findViewById(R.id.fps_value); - fpsName = (TextView) findViewById(R.id.fps_name); +// fpsPct = (TextView) findViewById(R.id.fps_value); +// fpsName = (TextView) findViewById(R.id.fps_name); cameraView = (SurfaceView) findViewById(R.id.camera_preview); drawingView = (DrawingView) findViewById(R.id.drawing_view); progressBar = (ProgressBar) findViewById(R.id.progress_bar); @@ -373,25 +374,26 @@ public class MainActivity extends AppCompatActivity metricNames[4] = (TextView) findViewById(R.id.metric_name_4); metricNames[5] = (TextView) findViewById(R.id.metric_name_5); metricNames[6] = (TextView) findViewById(R.id.metric_name_6); - metricDisplays = new MetricDisplay[NUM_METRICS_DISPLAYED]; - metricDisplays[0] = (MetricDisplay) findViewById(R.id.metric_pct_0); - metricDisplays[1] = (MetricDisplay) findViewById(R.id.metric_pct_1); - metricDisplays[2] = (MetricDisplay) findViewById(R.id.metric_pct_2); - metricDisplays[3] = (MetricDisplay) findViewById(R.id.metric_pct_3); - metricDisplays[4] = (MetricDisplay) findViewById(R.id.metric_pct_4); - metricDisplays[5] = (MetricDisplay) findViewById(R.id.metric_pct_5); - metricDisplays[6] = (MetricDisplay) findViewById(R.id.metric_pct_6); + metricDisplays = new TextView[NUM_METRICS_DISPLAYED]; + metricDisplays[0] = (TextView) findViewById(R.id.metric_pct_0); + metricDisplays[1] = (TextView) findViewById(R.id.metric_pct_1); + metricDisplays[2] = (TextView) findViewById(R.id.metric_pct_2); + metricDisplays[3] = (TextView) findViewById(R.id.metric_pct_3); + metricDisplays[4] = (TextView) findViewById(R.id.metric_pct_4); + metricDisplays[5] = (TextView) findViewById(R.id.metric_pct_5); + metricDisplays[6] = (TextView) findViewById(R.id.metric_pct_6); + showFaceText = (TextView) findViewById(R.id.no_face_found); //Load Application Font and set UI Elements to use it Typeface face = Typeface.createFromAsset(getAssets(), "fonts/Square.ttf"); - for (TextView textView : metricNames) { - textView.setTypeface(face); - } - for (MetricDisplay metricDisplay : metricDisplays) { - metricDisplay.setTypeface(face); - } - fpsPct.setTypeface(face); - fpsName.setTypeface(face); +// for (TextView textView : metricNames) { +// textView.setTypeface(face); +// } +// for (TextView metricDisplay : metricDisplays) { +// metricDisplay.setTypeface(face); +// } +// fpsPct.setTypeface(face); +// fpsName.setTypeface(face); drawingView.setTypeface(face); pleaseWaitTextView.setTypeface(face); @@ -515,18 +517,18 @@ public class MainActivity extends AppCompatActivity detector.setDetectAllEmotions(true); int i=0; - for(MetricsManager.Emotions emotion: MetricsManager.Emotions.values()) { - if(emotion.equals(MetricsManager.Emotions.ENGAGEMENT) || emotion.equals(MetricsManager.Emotions.VALENCE)) { - continue; - } - activateMetric(i, emotion); - i++; - } +// for(MetricsManager.Emotions emotion: MetricsManager.Emotions.values()) { +// if(emotion.equals(MetricsManager.Emotions.ENGAGEMENT) || emotion.equals(MetricsManager.Emotions.VALENCE)) { +// continue; +// } +// activateMetric(i, emotion); +// i++; +// } //if we are in multiface mode, we need to enable the detection of all emotions - if (multiFaceModeEnabled) { - detector.setDetectAllEmotions(true); - } +// if (multiFaceModeEnabled) { +// detector.setDetectAllEmotions(true); +// } } /** @@ -540,21 +542,21 @@ public class MainActivity extends AppCompatActivity Method getFaceScoreMethod = null; //The method that will be used to get a metric score try { - metricNames[index].setText(MetricsManager.getUpperCaseName(metric)); +// metricNames[index].setText(MetricsManager.getUpperCaseName(metric)); getFaceScoreMethod = Face.Emotions.class.getMethod("get" + MetricsManager.getCamelCase(metric)); //The MetricDisplay for Valence is unique; it shades it color depending on the metric value - if (metric == MetricsManager.Emotions.VALENCE) { - metricDisplays[index].setIsShadedMetricView(true); - } else { - metricDisplays[index].setIsShadedMetricView(false); - } +// if (metric == MetricsManager.Emotions.VALENCE) { +// metricDisplays[index].setIsShadedMetricView(true); +// } else { +// metricDisplays[index].setIsShadedMetricView(false); +// } } catch (NoSuchMethodException e) { Log.e(LOG_TAG, String.format("No such method while using reflection to generate methods for %s", metric.toString()), e); } - metricDisplays[index].setMetricToDisplay(metric, getFaceScoreMethod); +// metricDisplays[index].setMetricToDisplay(metric, getFaceScoreMethod); } /** @@ -617,7 +619,7 @@ public class MainActivity extends AppCompatActivity if (!isBackFacingCameraDetected && !isFrontFacingCameraDetected) return; //without any cameras detected, we cannot proceed - detector.setDetectValence(true); //this app will always detect valence + detector.setDetectValence(false); //this app will always detect valence if (!detector.isRunning()) { try { detector.start(); @@ -632,6 +634,8 @@ public class MainActivity extends AppCompatActivity leftMetricsLayout.animate().alpha(1); //make left and right metrics appear rightMetricsLayout.animate().alpha(1); + showFaceText.setVisibility(View.GONE); + resetFPSCalculations(); //Since the FPS may be different whether a face is being tracked or not, reset variables. if(mp != null && !mp.isPlaying()) { @@ -641,6 +645,7 @@ public class MainActivity extends AppCompatActivity @Override public void onFaceDetectionStopped() { + showFaceText.setVisibility(View.VISIBLE); performFaceDetectionStoppedTasks(); } @@ -670,10 +675,36 @@ public class MainActivity extends AppCompatActivity drawingView.invalidatePoints(); } else if (faces.size() == 1) { metricViewLayout.setVisibility(View.VISIBLE); - //update metrics with latest face information. The metrics are displayed on a MetricView, a custom view with a .setScore() method. - for (MetricDisplay metricDisplay : metricDisplays) { - updateMetricScore(metricDisplay, faces.get(0)); + int i = 0; + for (TextView metricDisplay : metricDisplays) { + float score = 0; + switch (i){ + case 4: + score = faces.get(0).emotions.getAnger(); + break; + case 5: + score = faces.get(0).emotions.getContempt(); + break; + case 6: + score = faces.get(0).emotions.getDisgust(); + break; + case 0: + score = faces.get(0).emotions.getFear(); + break; + case 1: + score = faces.get(0).emotions.getJoy(); + break; + case 2: + score = faces.get(0).emotions.getSadness(); + break; + case 3: + score = faces.get(0).emotions.getSurprise(); + break; + } + i++; + metricDisplay.setText(String.format(Locale.US, "%.0f%%", score)); +// updateMetricScore(metricDisplay, faces.get(0)); } /** @@ -828,13 +859,14 @@ public class MainActivity extends AppCompatActivity * before numberOfFrames overflows. */ void performFPSCalculations() { - numberOfFrames += 1; - long currentTime = SystemClock.elapsedRealtime(); - if (currentTime > timeToUpdate) { - float framesPerSecond = (numberOfFrames / (float) (currentTime - firstSystemTime)) * 1000f; - fpsPct.setText(String.format(" %.1f", framesPerSecond)); - timeToUpdate = currentTime + 1000L; - } + return; +// numberOfFrames += 1; +// long currentTime = SystemClock.elapsedRealtime(); +// if (currentTime > timeToUpdate) { +// float framesPerSecond = (numberOfFrames / (float) (currentTime - firstSystemTime)) * 1000f; +// fpsPct.setText(String.format(" %.1f", framesPerSecond)); +// timeToUpdate = currentTime + 1000L; +// } } /** @@ -915,14 +947,15 @@ public class MainActivity extends AppCompatActivity void setFPSVisible(boolean b) { - isFPSVisible = b; - if (b) { - fpsName.setVisibility(View.VISIBLE); - fpsPct.setVisibility(View.VISIBLE); - } else { - fpsName.setVisibility(View.INVISIBLE); - fpsPct.setVisibility(View.INVISIBLE); - } + return; +// isFPSVisible = b; +// if (b) { +// fpsName.setVisibility(View.VISIBLE); +// fpsPct.setVisibility(View.VISIBLE); +// } else { +// fpsName.setVisibility(View.INVISIBLE); +// fpsPct.setVisibility(View.INVISIBLE); +// } } @Override diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 5ec7eea..1f51792 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -31,7 +31,7 @@ diff --git a/app/src/main/res/layout/metric_layout.xml b/app/src/main/res/layout/metric_layout.xml index ea5d06b..a6bf7b1 100644 --- a/app/src/main/res/layout/metric_layout.xml +++ b/app/src/main/res/layout/metric_layout.xml @@ -1,8 +1,9 @@ - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png index 0936ec6..9c30734 100644 Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher.png and b/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png index 4c80cf2..8dc99c6 100644 Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher.png and b/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png index 968d6b2..959786b 100644 Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher.png and b/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index 1876605..d81b0d8 100644 Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000..0d4e7cf Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/app/src/main/res/values/metricStyleName.xml b/app/src/main/res/values/metricStyleName.xml index 5c0f512..cf80063 100644 --- a/app/src/main/res/values/metricStyleName.xml +++ b/app/src/main/res/values/metricStyleName.xml @@ -12,7 +12,7 @@ wrap_content center bold - @color/affectiva_orange + @color/white #000000 2 1 diff --git a/app/src/main/res/values/metricStylePct.xml b/app/src/main/res/values/metricStylePct.xml index 3397c22..58e2b98 100644 --- a/app/src/main/res/values/metricStylePct.xml +++ b/app/src/main/res/values/metricStylePct.xml @@ -11,7 +11,7 @@ fill_parent wrap_content center - @color/letter_gray + @color/white @dimen/pct_text_size @dimen/metric_view_bar_length