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

@ -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;

Loading…
Cancel
Save