Created wrapper layer so gestures don't crash on Android 1.5

pull/14/head
Tim Su 14 years ago
parent 9d2c0a8564
commit 5c07e7f9bc

@ -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<Prediction> 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);
}
}
}
}

@ -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 <tim@todoroo.com>
*
*/
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);
}
}

@ -0,0 +1,99 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- See the file "LICENSE" for the full license governing this code. -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/taskListParent"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/background_gradient"
android:orientation="vertical">
<!-- Header -->
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="horizontal"
android:background="@drawable/edit_header">
<!-- Back Button -->
<ImageView android:id="@+id/back"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="1"
android:src="@drawable/tango_previous"
android:paddingLeft="5dip"
android:paddingRight="8dip"/>
<!-- List Label -->
<TextView android:id="@+id/listLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="100"
android:singleLine="true"
android:paddingTop="6dip"
android:paddingRight="50dip"
style="@style/TextAppearance.TLA_Header"/>
</LinearLayout>
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="100">
<!-- No Tasks label -->
<TextView android:id="@android:id/empty"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:visibility="gone"
android:text="@string/TLA_no_items"
style="@style/TextAppearance.TLA_NoItems"/>
<!-- Task List -->
<ListView android:id="@android:id/list"
android:scrollbars="vertical"
android:cacheColorHint="#00000000"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
</FrameLayout>
<!-- Footer -->
<LinearLayout
android:id="@+id/taskListFooter"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="horizontal">
<!-- Quick Add Button -->
<ImageButton android:id="@+id/quickAddButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:visibility="gone"
android:src="@drawable/tango_add"
android:scaleType="fitCenter"/>
<!-- Quick Add Task -->
<EditText android:id="@+id/quickAddText"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="100"
android:hint="@string/TLA_quick_add_hint"
android:singleLine="true"
android:autoText="true"
android:capitalize="sentences"/>
<!-- Extended Add Button -->
<ImageButton android:id="@+id/extendedAddButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:src="@drawable/tango_edit"
android:scaleType="fitCenter"/>
</LinearLayout>
</LinearLayout>

@ -1,6 +1,5 @@
package com.todoroo.astrid.activity; package com.todoroo.astrid.activity;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map.Entry; import java.util.Map.Entry;
@ -16,12 +15,6 @@ import android.content.IntentFilter;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo; import android.content.pm.ResolveInfo;
import android.database.Cursor; 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.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.text.Editable; 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.DateUtilities;
import com.todoroo.andlib.utility.DialogUtilities; import com.todoroo.andlib.utility.DialogUtilities;
import com.todoroo.andlib.utility.Pair; 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;
import com.todoroo.astrid.adapter.TaskAdapter.ViewHolder; import com.todoroo.astrid.adapter.TaskAdapter.ViewHolder;
import com.todoroo.astrid.api.AstridApiConstants; import com.todoroo.astrid.api.AstridApiConstants;
@ -88,7 +83,7 @@ import com.todoroo.astrid.utility.Flags;
* @author Tim Su <tim@todoroo.com> * @author Tim Su <tim@todoroo.com>
* *
*/ */
public class TaskListActivity extends ListActivity implements OnScrollListener, OnGesturePerformedListener { public class TaskListActivity extends ListActivity implements OnScrollListener, GestureInterface {
// --- activities // --- activities
@ -143,7 +138,6 @@ public class TaskListActivity extends ListActivity implements OnScrollListener,
ImageButton quickAddButton; ImageButton quickAddButton;
EditText quickAddBox; EditText quickAddBox;
Filter filter; Filter filter;
private GestureLibrary mLibrary;
/* ====================================================================== /* ======================================================================
* ======================================================= initialization * ======================================================= initialization
@ -160,7 +154,10 @@ public class TaskListActivity extends ListActivity implements OnScrollListener,
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
new StartupService().onStartupApplication(this); 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(); Bundle extras = getIntent().getExtras();
if(extras != null && extras.containsKey(TOKEN_FILTER)) { if(extras != null && extras.containsKey(TOKEN_FILTER)) {
@ -338,10 +335,10 @@ public class TaskListActivity extends ListActivity implements OnScrollListener,
}); });
// gestures // gestures
mLibrary = GestureLibraries.fromRawResource(this, R.raw.gestures); try {
if(mLibrary.load()) { GestureService.registerGestureDetector(this, R.id.gestures, R.raw.gestures, this);
GestureOverlayView gestures = (GestureOverlayView) findViewById(R.id.gestures); } catch (VerifyError e) {
gestures.addOnGesturePerformedListener(this); // failed check, no gestures :P
} }
} }
@ -773,21 +770,12 @@ public class TaskListActivity extends ListActivity implements OnScrollListener,
@SuppressWarnings("nls") @SuppressWarnings("nls")
@Override @Override
public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) { public void gesturePerformed(String gesture) {
ArrayList<Prediction> predictions = mLibrary.recognize(gesture); if("nav_filters".equals(gesture)) {
Intent intent = new Intent(TaskListActivity.this,
// We want at least one prediction FilterListActivity.class);
if (predictions.size() > 0) { startActivity(intent);
Prediction prediction = predictions.get(0); finish();
// 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();
}
}
} }
} }

@ -2,16 +2,16 @@ package com.todoroo.astrid.service;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.StringTokenizer;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.StringTokenizer;
import android.content.Context; import android.content.Context;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor; import android.content.SharedPreferences.Editor;
import android.database.Cursor; import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log; 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.AbstractModel;
import com.todoroo.andlib.data.GenericDao; import com.todoroo.andlib.data.GenericDao;
import com.todoroo.andlib.data.Property; import com.todoroo.andlib.data.Property;
import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.data.Property.PropertyVisitor; import com.todoroo.andlib.data.Property.PropertyVisitor;
import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.service.Autowired; import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.ContextManager; import com.todoroo.andlib.service.ContextManager;
import com.todoroo.andlib.service.DependencyInjectionService; import com.todoroo.andlib.service.DependencyInjectionService;

Loading…
Cancel
Save