blob: 7df985f676b07dcd3e317d30f71911aeb70e31ed [file] [log] [blame]
Romain Guy89f0e502009-07-09 19:05:32 -07001/*
2 * Copyright (C) 2009 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.gesture.builder;
18
19import android.app.Activity;
20import android.os.Bundle;
21import android.os.Environment;
22import android.view.View;
23import android.view.MotionEvent;
24import android.gesture.GestureOverlayView;
25import android.gesture.Gesture;
26import android.gesture.GestureLibrary;
27import android.widget.TextView;
28import android.widget.Toast;
29
30import java.io.File;
31
32public class CreateGestureActivity extends Activity {
33 private static final float LENGTH_THRESHOLD = 120.0f;
34
35 private Gesture mGesture;
36 private View mDoneButton;
37
38 @Override
39 protected void onCreate(Bundle savedInstanceState) {
40 super.onCreate(savedInstanceState);
41
42 setContentView(R.layout.create_gesture);
43
44 mDoneButton = findViewById(R.id.done);
45
46 GestureOverlayView overlay = (GestureOverlayView) findViewById(R.id.gestures_overlay);
47 overlay.addOnGestureListener(new GesturesProcessor());
48 }
49
50 @Override
51 protected void onSaveInstanceState(Bundle outState) {
52 super.onSaveInstanceState(outState);
53
54 if (mGesture != null) {
55 outState.putParcelable("gesture", mGesture);
56 }
57 }
58
59 @Override
60 protected void onRestoreInstanceState(Bundle savedInstanceState) {
61 super.onRestoreInstanceState(savedInstanceState);
62
63 mGesture = savedInstanceState.getParcelable("gesture");
64 if (mGesture != null) {
65 final GestureOverlayView overlay =
66 (GestureOverlayView) findViewById(R.id.gestures_overlay);
67 overlay.post(new Runnable() {
68 public void run() {
69 overlay.setGesture(mGesture);
70 }
71 });
72
73 mDoneButton.setEnabled(true);
74 }
75 }
76
77 @SuppressWarnings({"UnusedDeclaration"})
78 public void addGesture(View v) {
79 if (mGesture != null) {
80 final TextView input = (TextView) findViewById(R.id.gesture_name);
81 final CharSequence name = input.getText();
82 if (name.length() == 0) {
83 input.setError(getString(R.string.error_missing_name));
84 return;
85 }
86
87 final GestureLibrary store = GestureBuilderActivity.getStore();
88 store.addGesture(name.toString(), mGesture);
89 store.save();
90
91 setResult(RESULT_OK);
92
93 final String path = new File(Environment.getExternalStorageDirectory(),
94 "gestures").getAbsolutePath();
95 Toast.makeText(this, getString(R.string.save_success, path), Toast.LENGTH_LONG).show();
96 } else {
97 setResult(RESULT_CANCELED);
98 }
99
100 finish();
101
102 }
103
104 @SuppressWarnings({"UnusedDeclaration"})
105 public void cancelGesture(View v) {
106 setResult(RESULT_CANCELED);
107 finish();
108 }
109
110 private class GesturesProcessor implements GestureOverlayView.OnGestureListener {
111 public void onGestureStarted(GestureOverlayView overlay, MotionEvent event) {
112 mDoneButton.setEnabled(false);
113 mGesture = null;
114 }
115
116 public void onGesture(GestureOverlayView overlay, MotionEvent event) {
117 }
118
119 public void onGestureEnded(GestureOverlayView overlay, MotionEvent event) {
120 mGesture = overlay.getGesture();
121 if (mGesture.getLength() < LENGTH_THRESHOLD) {
122 overlay.clear(false);
123 }
124 mDoneButton.setEnabled(true);
125 }
126
127 public void onGestureCancelled(GestureOverlayView overlay, MotionEvent event) {
128 }
129 }
130}