From 5c07e7f9bc02140eea09e54fb2b146f341e36ce5 Mon Sep 17 00:00:00 2001 From: Tim Su Date: Mon, 9 Aug 2010 15:10:48 -0700 Subject: [PATCH] Created wrapper layer so gestures don't crash on Android 1.5 --- .../andlib/widget/Api4GestureDetector.java | 42 ++++++++ .../todoroo/andlib/widget/GestureService.java | 38 +++++++ astrid/res/layout/task_list_activity_api3.xml | 99 +++++++++++++++++++ .../astrid/activity/TaskListActivity.java | 46 ++++----- .../service/Astrid2To3UpgradeHelper.java | 6 +- 5 files changed, 199 insertions(+), 32 deletions(-) create mode 100644 astrid/common-src/com/todoroo/andlib/widget/Api4GestureDetector.java create mode 100644 astrid/common-src/com/todoroo/andlib/widget/GestureService.java create mode 100644 astrid/res/layout/task_list_activity_api3.xml diff --git a/astrid/common-src/com/todoroo/andlib/widget/Api4GestureDetector.java b/astrid/common-src/com/todoroo/andlib/widget/Api4GestureDetector.java new file mode 100644 index 000000000..957f81772 --- /dev/null +++ b/astrid/common-src/com/todoroo/andlib/widget/Api4GestureDetector.java @@ -0,0 +1,42 @@ +package com.todoroo.andlib.widget; + +import java.util.ArrayList; + +import android.app.Activity; +import android.gesture.Gesture; +import android.gesture.GestureLibraries; +import android.gesture.GestureLibrary; +import android.gesture.GestureOverlayView; +import android.gesture.Prediction; +import android.gesture.GestureOverlayView.OnGesturePerformedListener; + +import com.todoroo.andlib.widget.GestureService.GestureInterface; + +public class Api4GestureDetector implements OnGesturePerformedListener { + private final GestureLibrary mLibrary; + private final GestureInterface listener; + + public Api4GestureDetector(Activity activity, int view, int gestureLibrary, GestureInterface listener) { + this.listener = listener; + mLibrary = GestureLibraries.fromRawResource(activity, gestureLibrary); + + if(mLibrary.load()) { + GestureOverlayView gestures = (GestureOverlayView) activity.findViewById(view); + gestures.addOnGesturePerformedListener(this); + } + } + + @Override + public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) { + ArrayList predictions = mLibrary.recognize(gesture); + + // We want at least one prediction + if (predictions.size() > 0) { + Prediction prediction = predictions.get(0); + // We want at least some confidence in the result + if (prediction.score > 1.0) { + listener.gesturePerformed(prediction.name); + } + } + } +} \ No newline at end of file diff --git a/astrid/common-src/com/todoroo/andlib/widget/GestureService.java b/astrid/common-src/com/todoroo/andlib/widget/GestureService.java new file mode 100644 index 000000000..128ee2b5e --- /dev/null +++ b/astrid/common-src/com/todoroo/andlib/widget/GestureService.java @@ -0,0 +1,38 @@ +package com.todoroo.andlib.widget; + + +import android.app.Activity; + +import com.todoroo.andlib.utility.AndroidUtilities; + + + + +/** + * All API versions-friendly gesture detector. On SDK < 4, nothing happens + * @author Tim Su + * + */ +public class GestureService { + + public interface GestureInterface { + public void gesturePerformed(String gesture); + } + + /** + * Register gesture detector. If android SDK version is not correct, + * a {@link VerifyError} will be throw. Catch this explicitly. + * + * @param activity + * @param view + * @param gestureLibrary + * @param listener + * @throws VerifyError + */ + public static void registerGestureDetector(Activity activity, int view, + int gestureLibrary, GestureInterface listener) throws VerifyError { + if(AndroidUtilities.getSdkVersion() > 3) + new Api4GestureDetector(activity, view, gestureLibrary, listener); + } + +} diff --git a/astrid/res/layout/task_list_activity_api3.xml b/astrid/res/layout/task_list_activity_api3.xml new file mode 100644 index 000000000..eab765101 --- /dev/null +++ b/astrid/res/layout/task_list_activity_api3.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java b/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java index 6a814abd4..6dc153272 100644 --- a/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java +++ b/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java @@ -1,6 +1,5 @@ package com.todoroo.astrid.activity; -import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map.Entry; @@ -16,12 +15,6 @@ import android.content.IntentFilter; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.database.Cursor; -import android.gesture.Gesture; -import android.gesture.GestureLibraries; -import android.gesture.GestureLibrary; -import android.gesture.GestureOverlayView; -import android.gesture.GestureOverlayView.OnGesturePerformedListener; -import android.gesture.Prediction; import android.net.Uri; import android.os.Bundle; import android.text.Editable; @@ -58,6 +51,8 @@ import com.todoroo.andlib.utility.AndroidUtilities; import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.andlib.utility.DialogUtilities; import com.todoroo.andlib.utility.Pair; +import com.todoroo.andlib.widget.GestureService; +import com.todoroo.andlib.widget.GestureService.GestureInterface; import com.todoroo.astrid.adapter.TaskAdapter; import com.todoroo.astrid.adapter.TaskAdapter.ViewHolder; import com.todoroo.astrid.api.AstridApiConstants; @@ -88,7 +83,7 @@ import com.todoroo.astrid.utility.Flags; * @author Tim Su * */ -public class TaskListActivity extends ListActivity implements OnScrollListener, OnGesturePerformedListener { +public class TaskListActivity extends ListActivity implements OnScrollListener, GestureInterface { // --- activities @@ -143,7 +138,6 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, ImageButton quickAddButton; EditText quickAddBox; Filter filter; - private GestureLibrary mLibrary; /* ====================================================================== * ======================================================= initialization @@ -160,7 +154,10 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, super.onCreate(savedInstanceState); new StartupService().onStartupApplication(this); - setContentView(R.layout.task_list_activity); + if(AndroidUtilities.getSdkVersion() > 3) + setContentView(R.layout.task_list_activity); + else + setContentView(R.layout.task_list_activity_api3); Bundle extras = getIntent().getExtras(); if(extras != null && extras.containsKey(TOKEN_FILTER)) { @@ -338,10 +335,10 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, }); // gestures - mLibrary = GestureLibraries.fromRawResource(this, R.raw.gestures); - if(mLibrary.load()) { - GestureOverlayView gestures = (GestureOverlayView) findViewById(R.id.gestures); - gestures.addOnGesturePerformedListener(this); + try { + GestureService.registerGestureDetector(this, R.id.gestures, R.raw.gestures, this); + } catch (VerifyError e) { + // failed check, no gestures :P } } @@ -773,21 +770,12 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, @SuppressWarnings("nls") @Override - public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) { - ArrayList predictions = mLibrary.recognize(gesture); - - // We want at least one prediction - if (predictions.size() > 0) { - Prediction prediction = predictions.get(0); - // We want at least some confidence in the result - if (prediction.score > 1.0) { - if("nav_filters".equals(prediction.name)) { - Intent intent = new Intent(TaskListActivity.this, - FilterListActivity.class); - startActivity(intent); - finish(); - } - } + public void gesturePerformed(String gesture) { + if("nav_filters".equals(gesture)) { + Intent intent = new Intent(TaskListActivity.this, + FilterListActivity.class); + startActivity(intent); + finish(); } } diff --git a/astrid/src/com/todoroo/astrid/service/Astrid2To3UpgradeHelper.java b/astrid/src/com/todoroo/astrid/service/Astrid2To3UpgradeHelper.java index 199f94af7..a35875cae 100644 --- a/astrid/src/com/todoroo/astrid/service/Astrid2To3UpgradeHelper.java +++ b/astrid/src/com/todoroo/astrid/service/Astrid2To3UpgradeHelper.java @@ -2,16 +2,16 @@ package com.todoroo.astrid.service; import java.util.Date; import java.util.HashMap; -import java.util.StringTokenizer; import java.util.Map.Entry; +import java.util.StringTokenizer; import android.content.Context; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteOpenHelper; import android.database.sqlite.SQLiteDatabase.CursorFactory; +import android.database.sqlite.SQLiteOpenHelper; import android.text.TextUtils; import android.util.Log; @@ -21,8 +21,8 @@ import com.timsu.astrid.utilities.LegacyTasksXmlExporter; import com.todoroo.andlib.data.AbstractModel; import com.todoroo.andlib.data.GenericDao; import com.todoroo.andlib.data.Property; -import com.todoroo.andlib.data.TodorooCursor; import com.todoroo.andlib.data.Property.PropertyVisitor; +import com.todoroo.andlib.data.TodorooCursor; import com.todoroo.andlib.service.Autowired; import com.todoroo.andlib.service.ContextManager; import com.todoroo.andlib.service.DependencyInjectionService;