diff options
author | Wei Hua <whua@google.com> | 2012-08-29 19:14:33 -0700 |
---|---|---|
committer | Wei Hua <whua@google.com> | 2012-08-30 10:06:33 -0700 |
commit | 828043fd24533ff38eeef18322e0db2a611bfd5f (patch) | |
tree | 44e458e3a6cd2138483234db9d8234be00f4a336 | |
parent | 78a66d98346a69f65e9d38bb0c96a5418c007197 (diff) | |
download | ml-828043fd24533ff38eeef18322e0db2a611bfd5f.tar.gz |
Added fake time feature
Change-Id: Ia5b59f94be730cb322c2aeacf117970a23e7af78
4 files changed, 160 insertions, 9 deletions
diff --git a/bordeaux/service/src/android/bordeaux/services/AggregatorManager.java b/bordeaux/service/src/android/bordeaux/services/AggregatorManager.java index c314ee7c0..87b79258c 100644 --- a/bordeaux/service/src/android/bordeaux/services/AggregatorManager.java +++ b/bordeaux/service/src/android/bordeaux/services/AggregatorManager.java @@ -34,6 +34,8 @@ class AggregatorManager extends IAggregatorManager.Stub { private static AggregatorManager mManager = null; private String mFakeLocation = null; + private String mFakeTimeOfDay = null; + private String mFakeDayOfWeek = null; private AggregatorManager() { sFeatureMap = new HashMap<String, Aggregator>(); @@ -75,10 +77,23 @@ class AggregatorManager extends IAggregatorManager.Stub { LocationStatsAggregator agg = (LocationStatsAggregator) mAggregators.get(LocationStatsAggregator.class.getName()); if (agg == null) return new ArrayList<String> (); - ArrayList<String> clusters = new ArrayList<String>(); return agg.getClusterNames(); } + public List<String> getTimeOfDayValues() { + TimeStatsAggregator agg = (TimeStatsAggregator) + mAggregators.get(TimeStatsAggregator.class.getName()); + if (agg == null) return new ArrayList<String>(); + return agg.getTimeOfDayValues(); + } + + public List<String> getDayOfWeekValues() { + TimeStatsAggregator agg = (TimeStatsAggregator) + mAggregators.get(TimeStatsAggregator.class.getName()); + if (agg == null) return new ArrayList<String>(); + return agg.getDayOfWeekValues(); + } + // Set an empty string "" to disable the fake location public boolean setFakeLocation(String location) { LocationStatsAggregator agg = (LocationStatsAggregator) @@ -89,12 +104,36 @@ class AggregatorManager extends IAggregatorManager.Stub { return true; } + // Set an empty string "" to disable the fake time of day + public boolean setFakeTimeOfDay(String time_of_day) { + TimeStatsAggregator agg = (TimeStatsAggregator) + mAggregators.get(TimeStatsAggregator.class.getName()); + if (agg == null) return false; + agg.setFakeTimeOfDay(time_of_day); + mFakeTimeOfDay = time_of_day; + return true; + } + + // Set an empty string "" to disable the fake day of week + public boolean setFakeDayOfWeek(String day_of_week) { + TimeStatsAggregator agg = (TimeStatsAggregator) + mAggregators.get(TimeStatsAggregator.class.getName()); + if (agg == null) return false; + agg.setFakeDayOfWeek(day_of_week); + mFakeDayOfWeek = day_of_week; + return true; + } + // Get the current mode, if fake mode return true public boolean getFakeMode() { boolean fakeMode = false; // checking any features that are in the fake mode if (mFakeLocation != null && mFakeLocation.length() != 0) fakeMode = true; + if (mFakeTimeOfDay != null && mFakeTimeOfDay.length() != 0) + fakeMode = true; + if (mFakeDayOfWeek != null && mFakeDayOfWeek.length() != 0) + fakeMode = true; return fakeMode; } // End of IAggregatorManger interface diff --git a/bordeaux/service/src/android/bordeaux/services/BordeauxAggregatorManager.java b/bordeaux/service/src/android/bordeaux/services/BordeauxAggregatorManager.java index 659e84799..7a01233ab 100644 --- a/bordeaux/service/src/android/bordeaux/services/BordeauxAggregatorManager.java +++ b/bordeaux/service/src/android/bordeaux/services/BordeauxAggregatorManager.java @@ -72,6 +72,28 @@ public class BordeauxAggregatorManager { } } + public List<String> getTimeOfDayValues() { + if (!retrieveAggregatorManager()) + throw new RuntimeException(AggregatorManager_NOTAVAILABLE); + try { + return mAggregatorManager.getTimeOfDayValues(); + } catch (RemoteException e) { + Log.e(TAG,"Error getting time of day values"); + throw new RuntimeException(AggregatorManager_NOTAVAILABLE); + } + } + + public List<String> getDayOfWeekValues() { + if (!retrieveAggregatorManager()) + throw new RuntimeException(AggregatorManager_NOTAVAILABLE); + try { + return mAggregatorManager.getDayOfWeekValues(); + } catch (RemoteException e) { + Log.e(TAG,"Error getting day of week values"); + throw new RuntimeException(AggregatorManager_NOTAVAILABLE); + } + } + public boolean setFakeLocation(final String name) { if (!retrieveAggregatorManager()) throw new RuntimeException(AggregatorManager_NOTAVAILABLE); @@ -83,6 +105,28 @@ public class BordeauxAggregatorManager { } } + public boolean setFakeTimeOfDay(final String time_of_day) { + if (!retrieveAggregatorManager()) + throw new RuntimeException(AggregatorManager_NOTAVAILABLE); + try { + return mAggregatorManager.setFakeTimeOfDay(time_of_day); + } catch (RemoteException e) { + Log.e(TAG,"Error setting fake time of day:" + time_of_day); + throw new RuntimeException(AggregatorManager_NOTAVAILABLE); + } + } + + public boolean setFakeDayOfWeek(final String day_of_week) { + if (!retrieveAggregatorManager()) + throw new RuntimeException(AggregatorManager_NOTAVAILABLE); + try { + return mAggregatorManager.setFakeDayOfWeek(day_of_week); + } catch (RemoteException e) { + Log.e(TAG,"Error setting fake day of week:" + day_of_week); + throw new RuntimeException(AggregatorManager_NOTAVAILABLE); + } + } + public boolean getFakeMode() { if (!retrieveAggregatorManager()) throw new RuntimeException(AggregatorManager_NOTAVAILABLE); diff --git a/bordeaux/service/src/android/bordeaux/services/IAggregatorManager.aidl b/bordeaux/service/src/android/bordeaux/services/IAggregatorManager.aidl index 1b2f06797..06afb401f 100644 --- a/bordeaux/service/src/android/bordeaux/services/IAggregatorManager.aidl +++ b/bordeaux/service/src/android/bordeaux/services/IAggregatorManager.aidl @@ -24,7 +24,15 @@ interface IAggregatorManager { // TODO: remove the following interfaces in production // they are only used for demo purpose List<String> getLocationClusters(); + List<String> getTimeOfDayValues(); + List<String> getDayOfWeekValues(); // use "" to disable the fake location boolean setFakeLocation(in String cluster); + // use "" to disable the fake time + boolean setFakeTimeOfDay(in String time_of_day); + // use "" to disable the fake day + boolean setFakeDayOfWeek(in String day_of_week); + // return whether the service is in fake mode + // it's in fake mode, if any of the location, time and day is fake boolean getFakeMode(); } diff --git a/bordeaux/service/src/android/bordeaux/services/TimeStatsAggregator.java b/bordeaux/service/src/android/bordeaux/services/TimeStatsAggregator.java index 2b94cd44b..a3e123c74 100644 --- a/bordeaux/service/src/android/bordeaux/services/TimeStatsAggregator.java +++ b/bordeaux/service/src/android/bordeaux/services/TimeStatsAggregator.java @@ -19,7 +19,9 @@ package android.bordeaux.services; import android.text.format.Time; import android.util.Log; +import java.util.Arrays; import java.util.HashMap; +import java.util.List; import java.util.Map; // import java.util.Date; @@ -52,6 +54,17 @@ public class TimeStatsAggregator extends Aggregator { static final String DAYTIME = "Daytime"; static final String NIGHTTIME = "Nighttime"; + static String mFakeTimeOfDay = null; + static String mFakeDayOfWeek = null; + + static final String[] TIME_OF_DAY_VALUES = + {MORNING, NOON, AFTERNOON, EVENING, NIGHT, LATENIGHT}; + + static final String[] DAY_OF_WEEK_VALUES = + {SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY}; + + static final String[] DAYTIME_VALUES = {MORNING, NOON, AFTERNOON, EVENING}; + public String[] getListOfFeatures(){ String [] list = new String[4]; list[0] = TIME_OF_WEEK; @@ -123,17 +136,64 @@ public class TimeStatsAggregator extends Aggregator { Time time = new Time(); time.set(utcTime); - features.put(DAY_OF_WEEK, getDayOfWeek(time.weekDay)); - features.put(PERIOD_OF_DAY, getPeriodOfDay(time.hour)); - features.put(TIME_OF_DAY, getTimeOfDay(time.hour)); + if (mFakeTimeOfDay != null && mFakeTimeOfDay.length() != 0) { + List<String> day_list = Arrays.asList(DAYTIME_VALUES); - if (time.weekDay == Time.SUNDAY || time.weekDay == Time.SATURDAY || - (time.weekDay == Time.FRIDAY && - features.get(PERIOD_OF_DAY).equals(NIGHTTIME))) { - features.put(TIME_OF_WEEK, WEEKEND); + if (day_list.contains(mFakeTimeOfDay)) { + features.put(PERIOD_OF_DAY, DAYTIME); + } else { + features.put(PERIOD_OF_DAY, NIGHTTIME); + } + features.put(TIME_OF_DAY, mFakeTimeOfDay); } else { - features.put(TIME_OF_WEEK, WEEKDAY); + features.put(PERIOD_OF_DAY, getPeriodOfDay(time.hour)); + features.put(TIME_OF_DAY, getTimeOfDay(time.hour)); } + + if (mFakeDayOfWeek != null && mFakeDayOfWeek.length() != 0) { + features.put(DAY_OF_WEEK, mFakeDayOfWeek); + if (mFakeDayOfWeek.equals(SUNDAY) || + mFakeDayOfWeek.equals(SATURDAY) || + mFakeDayOfWeek.equals(FRIDAY) && + features.get(PERIOD_OF_DAY).equals(NIGHTTIME)) { + features.put(TIME_OF_WEEK, WEEKEND); + } else { + features.put(TIME_OF_WEEK, WEEKDAY); + } + } + else { + features.put(DAY_OF_WEEK, getDayOfWeek(time.weekDay)); + if (time.weekDay == Time.SUNDAY || time.weekDay == Time.SATURDAY || + (time.weekDay == Time.FRIDAY && + features.get(PERIOD_OF_DAY).equals(NIGHTTIME))) { + features.put(TIME_OF_WEEK, WEEKEND); + } else { + features.put(TIME_OF_WEEK, WEEKDAY); + } + } + return features; } + + // get all possible time_of_day values + public static List<String> getTimeOfDayValues() { + return Arrays.asList(TIME_OF_DAY_VALUES); + } + + // get all possible day values + public static List<String> getDayOfWeekValues() { + return Arrays.asList(DAY_OF_WEEK_VALUES); + } + + // set the fake time of day + // set to "" to disable the fake time + public static void setFakeTimeOfDay(String time_of_day) { + mFakeTimeOfDay = time_of_day; + } + + // set the fake day of week + // set to "" to disable the fake day + public static void setFakeDayOfWeek(String day_of_week) { + mFakeDayOfWeek = day_of_week; + } } |