Add date windowing to exchange search
b/11027351
Change-Id: Ifc767d4403a27e7c961251dac475a68e189328a4
diff --git a/src/com/android/exchange/adapter/Search.java b/src/com/android/exchange/adapter/Search.java
index 7577c69..d4c9bcd 100644
--- a/src/com/android/exchange/adapter/Search.java
+++ b/src/com/android/exchange/adapter/Search.java
@@ -40,7 +40,11 @@
import java.io.IOException;
import java.io.InputStream;
+import java.text.SimpleDateFormat;
import java.util.ArrayList;
+import java.util.Date;
+import java.util.Locale;
+import java.util.TimeZone;
/**
* Implementation of server-side search for EAS using the EmailService API
@@ -52,6 +56,14 @@
// The largest number of results we'll ask for per server request
private static final int MAX_SEARCH_RESULTS = 100;
+ // TODO: move this somewhere more unified
+ // Time format documented at http://msdn.microsoft.com/en-us/library/ee201818(v=exchg.80).aspx
+ private static final SimpleDateFormat DATE_FORMAT;
+ static {
+ DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.S'Z'", Locale.US);
+ DATE_FORMAT.setTimeZone(TimeZone.getTimeZone("UTC"));
+ }
+
public static int searchMessages(Context context, long accountId, SearchParams searchParams,
long destMailboxId) {
// Sanity check for arguments
@@ -93,6 +105,20 @@
}
s.data(Tags.SEARCH_FREE_TEXT, filter);
+
+ // Add the date window if appropriate
+ if (searchParams.mStartDate != null) {
+ s.start(Tags.SEARCH_GREATER_THAN);
+ s.tag(Tags.EMAIL_DATE_RECEIVED);
+ s.data(Tags.SEARCH_VALUE, DATE_FORMAT.format(searchParams.mStartDate));
+ s.end(); // SEARCH_GREATER_THAN
+ }
+ if (searchParams.mEndDate != null) {
+ s.start(Tags.SEARCH_LESS_THAN);
+ s.tag(Tags.EMAIL_DATE_RECEIVED);
+ s.data(Tags.SEARCH_VALUE, DATE_FORMAT.format(searchParams.mEndDate));
+ s.end(); // SEARCH_LESS_THAN
+ }
s.end().end(); // SEARCH_AND, SEARCH_QUERY
s.start(Tags.SEARCH_OPTIONS);
if (offset == 0) {