Skip to content
This repository has been archived by the owner on Mar 27, 2020. It is now read-only.

Commit

Permalink
configuring default 7 click behavior. #178
Browse files Browse the repository at this point in the history
  • Loading branch information
niccs committed Jan 18, 2016
1 parent 157cbee commit 703aa83
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 47 deletions.
6 changes: 4 additions & 2 deletions app/src/main/java/org/iilab/pb/common/AppConstants.java
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ public class AppConstants {
public static final String DELIMITER_COMMA=",";

// public static final int INITIAL_CLICKS_MAX_TIME_LIMIT = 6000;
public static final String DEFAULT_INITIAL_CLICKS_ALERT_TRIGGER = "5";
public static final String DEFAULT_INITIAL_CLICKS_ALERT_TRIGGER = "7";

public static final String PAGE_TYPE_SIMPLE = "simple";
public static final String PAGE_TYPE_WARNING = "warning";
Expand All @@ -113,7 +113,7 @@ public class AppConstants {

public static final String DEFAULT_HAPTIC_FEEDBACK_PATTERN_CONTINUSLY = "1";
public static final String HAPTIC_FEEDBACK_PATTERN_VIBRATE_EVERY_SECOND = "2";
public static final String DEFAULT_ALARM_SENDING_CONFIRMATION_PATTERN_LONG = "1";
public static final String ALARM_SENDING_CONFIRMATION_PATTERN_LONG = "1";
public static final String ALARM_SENDING_CONFIRMATION_PATTERN_REPEATED_SHORT = "2";
public static final String ALARM_SENDING_CONFIRMATION_PATTERN_THREESHORT_PAUSE_THREESHORT = "3";
// Three short - Three long - Three short
Expand All @@ -122,6 +122,8 @@ public class AppConstants {
public static final String DEFAULT_ALARM_NOT_CONFIRMED_NONE = "1";
public static final String ALARM_NOT_CONFIRMED_THREE_FAST = "2";
public static final String DEFAULT_INITIAL_TIME_FOR_ALARM_TRIGGER = "6";
// mode 0= no confirmation click, mode 1= 1 confirmation click
public static final String DEFAULT_NO_CONFIRMATION_CLICK_MODE = "0";

public static final int VIBRATION_DURATION_SHORT = 400;
public static final int VIBRATION_PAUSE_SHORT = 200;
Expand Down
41 changes: 22 additions & 19 deletions app/src/main/java/org/iilab/pb/common/ApplicationSettings.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,20 @@
import android.content.SharedPreferences;
import android.location.Location;
import android.preference.PreferenceManager;
import android.util.Log;

import com.google.gson.Gson;

import org.iilab.pb.R;

import static org.iilab.pb.common.AppConstants.ALARM_SENDING_CONFIRMATION_PATTERN_NONE;
import static org.iilab.pb.common.AppConstants.DEFAULT_ALARM_INTERVAL;
import static org.iilab.pb.common.AppConstants.DEFAULT_ALARM_NOT_CONFIRMED_NONE;
import static org.iilab.pb.common.AppConstants.DEFAULT_ALARM_SENDING_CONFIRMATION_PATTERN_LONG;
import static org.iilab.pb.common.AppConstants.DEFAULT_HAPTIC_FEEDBACK_DURATION;
import static org.iilab.pb.common.AppConstants.DEFAULT_HAPTIC_FEEDBACK_PATTERN_CONTINUSLY;
import static org.iilab.pb.common.AppConstants.DEFAULT_INITIAL_CLICKS_ALERT_TRIGGER;
import static org.iilab.pb.common.AppConstants.DEFAULT_INITIAL_TIME_FOR_ALARM_TRIGGER;
import static org.iilab.pb.common.AppConstants.DEFAULT_NO_CONFIRMATION_CLICK_MODE;
import static org.iilab.pb.common.AppConstants.WIZARD_FLAG_HOME_NOT_CONFIGURED;


Expand All @@ -39,6 +42,7 @@ public class ApplicationSettings extends Application {
public static final String IS_FIRST_MSG_SENT = "is_first_msg_sent";
public static final String SUPPORTED_LANGUAGES = "SUPPORTED_LANGUAGES";
public static final String DB_LOADED_LANGUAGES = "DB_LOADED_LANGUAGES";
public static final String ALARM_CONFIRMATION_MODE= "ALARM_CONFIRMATION_MODE";


//TODO for testing vibrations--remove during release
Expand All @@ -60,15 +64,6 @@ public static boolean isFirstRun(Context context) {
return sharedPreferences(context).getBoolean(FIRST_RUN, true);
}


// public static void setRestartedSetup(Context context, boolean isRestartedSetup) {
// saveBoolean(context, RESTARTED_SETUP, isRestartedSetup);
// }
//
// public static boolean isRestartedSetup(Context context) {
// return sharedPreferences(context).getBoolean(RESTARTED_SETUP, false);
// }

public static void setLocalDataInsertion(Context context, boolean flag) {
saveBoolean(context, HARDCODE_INSERT, flag);
}
Expand All @@ -77,14 +72,6 @@ public static boolean getLocalDataInsertion(Context context) {
return sharedPreferences(context).getBoolean(HARDCODE_INSERT, false);
}

// public static long getLastRunTimeInMillis(Context context) {
// return sharedPreferences(context).getLong(LAST_RUN, -1);
// }
//
// public static void setLastRunTimeInMillis(Context context, Long time) {
// saveLong(context, LAST_RUN, time);
// }

public static void savePassword(Context context, String password) {
saveString(context, PASS_CODE, password);
}
Expand Down Expand Up @@ -238,8 +225,13 @@ public static String getHapticFeedbackVibrationPattern(Context context) {
public static String getConfirmationWaitVibrationDuration(Context context) {
return sharedPreferences(context).getString(context.getString(R.string.confirmationWaitTimeKey), DEFAULT_HAPTIC_FEEDBACK_DURATION);
}

// public static void setConfirmationFeedbackVibrationPattern(Context context) {
// ALARM_SENDING_CONFIRMATION_PATTERN_NONE
// return sharedPreferences(context).getString(context.getString(R.string.alertSendingConfirmationVibrationKey), ALARM_SENDING_CONFIRMATION_PATTERN_LONG);
// }
public static String getConfirmationFeedbackVibrationPattern(Context context) {
return sharedPreferences(context).getString(context.getString(R.string.alertSendingConfirmationVibrationKey), DEFAULT_ALARM_SENDING_CONFIRMATION_PATTERN_LONG);
return sharedPreferences(context).getString(context.getString(R.string.alertSendingConfirmationVibrationKey), ALARM_SENDING_CONFIRMATION_PATTERN_NONE);
}

public static String getAlarmNotConfirmedPattern(Context context) {
Expand All @@ -248,6 +240,17 @@ public static String getAlarmNotConfirmedPattern(Context context) {
public static String getInitialClicksMaxTimeLimit(Context context) {
return sharedPreferences(context).getString(context.getString(R.string.initialTimeKey), DEFAULT_INITIAL_TIME_FOR_ALARM_TRIGGER);
}

public static void setAlarmConfirmationMode(Context context, String alarmConfirmationMode) {
saveString(context, ALARM_CONFIRMATION_MODE, alarmConfirmationMode);
}

public static boolean isConfirmationClickRequired(Context context) {
String alarmConfirmationMode = sharedPreferences(context).getString(ALARM_CONFIRMATION_MODE, DEFAULT_NO_CONFIRMATION_CLICK_MODE);
Log.d("Nixxx",alarmConfirmationMode);
return (DEFAULT_NO_CONFIRMATION_CLICK_MODE.equals(alarmConfirmationMode) ? false : true);
}

public static String getShortVibration(Context context) {
return sharedPreferences(context).getString(VIBRATION_DURATION_SHORT, "400");
}
Expand Down
60 changes: 34 additions & 26 deletions app/src/main/java/org/iilab/pb/trigger/MultiClickEvent.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,19 @@

import com.google.gson.Gson;

import org.iilab.pb.common.ApplicationSettings;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import static org.iilab.pb.common.AppConstants.*;
import static org.iilab.pb.common.AppConstants.ALARM_NOT_CONFIRMED_THREE_FAST;
import static org.iilab.pb.common.AppConstants.ONE_SECOND;
import static org.iilab.pb.common.ApplicationSettings.getAlarmNotConfirmedPattern;
import static org.iilab.pb.common.ApplicationSettings.getConfirmationWaitVibrationDuration;
import static org.iilab.pb.common.ApplicationSettings.getInitialClicksForAlertTrigger;
import static org.iilab.pb.common.ApplicationSettings.getInitialClicksMaxTimeLimit;
import static org.iilab.pb.common.ApplicationSettings.isConfirmationClickRequired;

public class MultiClickEvent {
//This is the guard time
Expand Down Expand Up @@ -54,32 +58,36 @@ public Context getContext() {
}

public void registerClick(Long timeWhenButtonClicked) {
if (waitForConfirmation) {
long confirmationDuration = timeWhenButtonClicked - hapticFeedbackVibrationStartTime;

int hapticFeedbackVibrationDuration = ONE_SECOND * Integer.parseInt(ApplicationSettings.getConfirmationWaitVibrationDuration(mContext));

boolean isConfirmationClickedBeforeVibrationEnded = confirmationDuration <= hapticFeedbackVibrationDuration;
boolean isConfirmationClickedWithinTimeLimit = (hapticFeedbackVibrationDuration + MAX_TIME_INTERVAL_FOR_CONFIRMATION) >= confirmationDuration;
if (waitForConfirmation ) {
if(isConfirmationClickRequired(mContext)) {
long confirmationDuration = timeWhenButtonClicked - hapticFeedbackVibrationStartTime;
int hapticFeedbackVibrationDuration = ONE_SECOND * Integer.parseInt(getConfirmationWaitVibrationDuration(mContext));
boolean isConfirmationClickedBeforeVibrationEnded = confirmationDuration <= hapticFeedbackVibrationDuration;
boolean isConfirmationClickedWithinTimeLimit = (hapticFeedbackVibrationDuration + MAX_TIME_INTERVAL_FOR_CONFIRMATION) >= confirmationDuration;

if (isConfirmationClickedBeforeVibrationEnded) {
Log.d(TAG, "isConfirmationClickedBeforeVibrationEnded");
skipClick = true;
return;
}
if (!isConfirmationClickedBeforeVibrationEnded && isConfirmationClickedWithinTimeLimit) {
Log.d(TAG, "!isConfirmationClickedBeforeVibrationEnded && isConfirmationClickedWithinTimeLimit");
isActivated = true;
waitForConfirmation = false;
return;
}
if (!isConfirmationClickedWithinTimeLimit) {
Log.d(TAG, "!isConfirmationClickedWithinTimeLimit");
resetClickCount(timeWhenButtonClicked);

if (isConfirmationClickedBeforeVibrationEnded) {
Log.d(TAG, "isConfirmationClickedBeforeVibrationEnded");
skipClick = true;
alarmNotConfirmedOnTime();
}
return;
}
if (!isConfirmationClickedBeforeVibrationEnded && isConfirmationClickedWithinTimeLimit) {
Log.d(TAG, "!isConfirmationClickedBeforeVibrationEnded && isConfirmationClickedWithinTimeLimit");
}else{
isActivated = true;
waitForConfirmation = false;
return;
}
if (!isConfirmationClickedWithinTimeLimit) {
Log.d(TAG, "!isConfirmationClickedWithinTimeLimit");
resetClickCount(timeWhenButtonClicked);

alarmNotConfirmedOnTime();
}
return;
}

if (isFirstClick() || notWithinLimit(timeWhenButtonClicked) || !isPowerClickBecauseOfUser()) {
Expand All @@ -90,7 +98,7 @@ public void registerClick(Long timeWhenButtonClicked) {
clickCount++;
Log.d(TAG, "MultiClickEvent clickCount = " + clickCount + " " + mContext);
eventLog.put(Integer.toString(clickCount) + " click", new Date(timeWhenButtonClicked).toString());
if (clickCount >= Integer.parseInt(ApplicationSettings.getInitialClicksForAlertTrigger(mContext))) {
if (clickCount >= Integer.parseInt(getInitialClicksForAlertTrigger(mContext))) {
waitForConfirmation = true;
eventLog.put("Waiting for confirmation", new Date(timeWhenButtonClicked).toString());
hapticFeedbackVibrationStartTime = timeWhenButtonClicked;
Expand All @@ -100,7 +108,7 @@ public void registerClick(Long timeWhenButtonClicked) {
}

private void alarmNotConfirmedOnTime(){
String alarmNotConfirmedPattern=ApplicationSettings.getAlarmNotConfirmedPattern(mContext);
String alarmNotConfirmedPattern=getAlarmNotConfirmedPattern(mContext);
Log.d(TAG ,"Alarm not confirmed on time pattern 1-None, 2- three short "+alarmNotConfirmedPattern);
if(ALARM_NOT_CONFIRMED_THREE_FAST.equals(alarmNotConfirmedPattern)){
//vibrate three times fast
Expand Down Expand Up @@ -147,7 +155,7 @@ private boolean isPowerClickBecauseOfUser() {
}

private boolean notWithinLimit(long current) {
int initialClicksMaxTimeLimit = ONE_SECOND * Integer.parseInt(ApplicationSettings.getInitialClicksMaxTimeLimit(mContext));
int initialClicksMaxTimeLimit = ONE_SECOND * Integer.parseInt(getInitialClicksMaxTimeLimit(mContext));
boolean isInitialClicksWithInLimit = (current - firstEventTime) > initialClicksMaxTimeLimit;
Log.d(TAG, "Initial clicks max time limit is "+initialClicksMaxTimeLimit);
Log.d(TAG, "Initial clicks done with in assigned time limit? "+isInitialClicksWithInLimit);
Expand Down

0 comments on commit 703aa83

Please sign in to comment.