/*
*
* Copyright (c) Microsoft. All rights reserved.
* Licensed under the MIT license.
*
* Project Oxford: http://ProjectOxford.ai
*
* Project Oxford Mimicker Alarm Github:
* https://github.com/Microsoft/ProjectOxford-Apps-MimickerAlarm
*
* Copyright (c) Microsoft Corporation
* All rights reserved.
*
* MIT License:
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED ""AS IS"", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
*/
package com.microsoft.mimickeralarm.utilities;
import com.microsoft.projectoxford.emotion.contract.RecognizeResult;
import com.microsoft.projectoxford.vision.contract.AnalyzeResult;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Loggable {
public String Name;
JSONObject Properties;
public void putProp(String property, Object value) {
try {
Properties.put(property, value);
}
catch (JSONException ex) {
Logger.trackException(ex);
}
}
public void putJSON(JSONObject json) {
try {
Iterator<?> keys = json.keys();
while( keys.hasNext() ) {
String key = (String)keys.next();
Properties.put(key, json.get(key));
}
}
catch (JSONException ex) {
Logger.trackException(ex);
}
}
public void putVision(AnalyzeResult result) {
try {
Properties.put("Color Dominants", result.color.dominantColors);
Properties.put("Color Dominant FG", result.color.dominantColorForeground);
Properties.put("Color Dominant BG", result.color.dominantColorBackground);
Properties.put("Color Accent", result.color.accentColor);
}
catch (JSONException ex) {
Logger.trackException(ex);
}
}
public void putEmotions(List<RecognizeResult> results) {
try {
ArrayList<Double> scores = new ArrayList<>();
for (int i = 0; i < results.size(); i++) {
scores.add(results.get(i).scores.anger);
}
Properties.put("Emotion Anger", new JSONArray(scores));
for (int i = 0; i < results.size(); i++) {
scores.set(i, results.get(i).scores.contempt);
}
Properties.put("Emotion Contempt", new JSONArray(scores));
for (int i = 0; i < results.size(); i++) {
scores.set(i, results.get(i).scores.disgust);
}
Properties.put("Emotion Disgust", new JSONArray(scores));
for (int i = 0; i < results.size(); i++) {
scores.set(i, results.get(i).scores.fear);
}
Properties.put("Emotion Fear", new JSONArray(scores));
for (int i = 0; i < results.size(); i++) {
scores.set(i, results.get(i).scores.happiness);
}
Properties.put("Emotion Happiness", new JSONArray(scores));
for (int i = 0; i < results.size(); i++) {
scores.set(i, results.get(i).scores.neutral);
}
Properties.put("Emotion Neutral", new JSONArray(scores));
for (int i = 0; i < results.size(); i++) {
scores.set(i, results.get(i).scores.sadness);
}
Properties.put("Emotion Sadness", new JSONArray(scores));
for (int i = 0; i < results.size(); i++) {
scores.set(i, results.get(i).scores.surprise);
}
Properties.put("Emotion Surprise", new JSONArray(scores));
}
catch (JSONException ex) {
Logger.trackException(ex);
}
}
public interface Key {
String APP_ALARM_RINGING = "An alarm rang";
String APP_EXCEPTION = "Exception caught";
String APP_ERROR = "Error occurred";
String APP_API_VISION = "Calling Vision API";
String APP_API_EMOTION = "Calling Emotion API";
String APP_API_SPEECH = "Calling Speech API";
String ACTION_ALARM_SNOOZE = "Snoozed an alarm";
String ACTION_ALARM_DISMISS = "Dismissed an alarm";
String ACTION_ALARM_EDIT = "Editing an alarm";
String ACTION_ALARM_CREATE = "Creating a new alarm";
String ACTION_ALARM_SAVE = "Saving changes to an alarm";
String ACTION_ALARM_SAVE_DISCARD = "Discarding changes to an alarm";
String ACTION_ALARM_DELETE = "Deleting an alarm";
String ACTION_GAME_COLOR = "Played a color finder game";
String ACTION_GAME_COLOR_FAIL = "Failed a color finder game";
String ACTION_GAME_COLOR_TIMEOUT = "Timed out on a color finder game";
String ACTION_GAME_COLOR_SUCCESS = "Finished a color finder game";
String ACTION_GAME_TWISTER = "Played a tongue twister game";
String ACTION_GAME_TWISTER_FAIL = "Failed a tongue twister game";
String ACTION_GAME_TWISTER_TIMEOUT = "Timed out on a tongue twister game";
String ACTION_GAME_TWISTER_SUCCESS = "Finished a tongue twister game";
String ACTION_GAME_EMOTION = "Played an emotion game";
String ACTION_GAME_EMOTION_FAIL = "Failed an emotion game";
String ACTION_GAME_EMOTION_TIMEOUT = "Timed out on an emotion game";
String ACTION_GAME_EMOTION_SUCCESS = "Finished an emotion game";
String ACTION_GAME_NONETWORK = "Played an no network game";
String ACTION_GAME_NONETWORK_TIMEOUT = "Timed out on an no network game";
String ACTION_GAME_NONETWORK_SUCCESS = "Finished an no network game";
String ACTION_ONBOARDING = "Started onboarding";
String ACTION_ONBOARDING_SKIP = "Skipped onboarding";
String ACTION_ONBOARDING_TOS_ACCEPT = "Accepted ToS";
String ACTION_ONBOARDING_TOS_DECLINE = "Declined ToS";
String ACTION_LEARN_MORE = "Reading Learn More";
String ACTION_SHARE = "Sharing";
String PROP_QUESTION = "Question";
String PROP_DIFF = "Difference";
}
public static class UserAction extends Loggable {
public UserAction (String name) {
Name = name;
Properties = new JSONObject();
try {
Properties.put("Type", "User Action");
}
catch (JSONException jsonEx) {
}
}
}
public static class AppAction extends Loggable {
public AppAction (String name) {
Name = name;
Properties = new JSONObject();
try {
Properties.put("Type", "App Action");
}
catch (JSONException jsonEx) {
}
}
}
public static class AppException extends Loggable {
public AppException (String name, Exception ex) {
Name = name;
Properties = new JSONObject();
try {
Properties.put("Type", "Exception");
Properties.put("Message", ex);
Properties.put("Detailed Message", ex.getMessage());
}
catch (JSONException jsonEx) {
}
}
}
public static class AppError extends Loggable {
public AppError (String name, String error) {
Name = name;
Properties = new JSONObject();
try {
Properties.put("Type", "Error");
Properties.put("Message", error);
}
catch (JSONException jsonEx) {
}
}
}
}