summaryrefslogtreecommitdiff
path: root/src/us/minak/MinakView.java
blob: 3f9373eb12dc6ff1097033633406c85b1a064002 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package us.minak;

import android.content.Context;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.util.AttributeSet;
import android.support.v4.content.LocalBroadcastManager;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.BroadcastReceiver;

import java.util.*;

public class MinakView extends RelativeLayout {
	private final Context mContext;
	private OnCharacterEnteredListener mOnCharacterEnteredListener;

	private ShiftState mShiftState = ShiftState.OFF;
	private final Queue<Character> mSymbolsQueue = new LinkedList<Character>();

	private enum ShiftState {
		OFF, ON, CAPS_LOCK
	};

	public MinakView(Context context, AttributeSet attrs) {
		super(context, attrs);
		mContext = context;
		LocalBroadcastManager.getInstance(mContext).registerReceiver(mBroadcastReceiver,
				new IntentFilter(SymbolsActivity.INTENT_ACTION));
	}

	@Override
	protected void onFinishInflate() {
		DrawingSpaceView drawingSpaceView = (DrawingSpaceView) findViewById(R.id.drawing_space);
		drawingSpaceView.setOnGestureRecognizedListener(new OnGestureRecognizedListener() {
			@Override
			public void gestureRecognized(String character) {
				enterCharacter(character);
			}
		});
	}

	public void setOnCharacterEnteredListener(OnCharacterEnteredListener onCharacterEnteredListener) {
		mOnCharacterEnteredListener = onCharacterEnteredListener;
	}



	public Queue<Character> getSymbolsQueue() {
		return mSymbolsQueue;
	}

	/**
	 * Receiver for broadcasts coming from the symbols activity.
	 */
	private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
		@Override
		public void onReceive(Context context, Intent intent) {
			if (SymbolsActivity.INTENT_ACTION.equals(intent.getAction())) {
				mSymbolsQueue.add(intent.getCharExtra(SymbolsActivity.INTENT_EXTRA_NAME, '?'));
			}
		}
	};

	/**
	 * Listener handling pressing all buttons.
	 */

	/**
	 * Listener handling long pressing all buttons.
	 */


	/**
	 * Changes shift state to the next one (OFF -> ON -> CAPS LOCK).
	 */


	/**
	 * Passes the given character to the input service.
	 *
	 * @param character
	 *            The character to enter
	 */
	private void enterCharacter(String character) {
		switch (mShiftState) {
		case OFF:
			mOnCharacterEnteredListener.characterEntered(character);
			break;
		case ON:
			mOnCharacterEnteredListener.characterEntered(character.toUpperCase(Locale.ENGLISH));
			break;
		case CAPS_LOCK:
			mOnCharacterEnteredListener.characterEntered(character.toUpperCase(Locale.ENGLISH));
			break;
		default:
			throw new IllegalArgumentException();
		}
	}

}