view src/uk/ac/qmul/eecs/ccmi/accessibility/AccessibleSpinner.java @ 0:e0ee6ac3a45f

first import
author Fiore Martin <fiore@eecs.qmul.ac.uk>
date Thu, 13 Dec 2012 20:00:21 +0000
parents
children 66b3a838feca
line wrap: on
line source
/*  
 CCmI Diagram Editor for Android 
  
 Copyright (C) 2012  Queen Mary University of London (http://ccmi.eecs.qmul.ac.uk/)

 This program is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.

 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
package uk.ac.qmul.eecs.ccmi.accessibility;

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.Spinner;

/**
 * 
 * The accessible spinner is designed to be accessible without looking at the display. A click on 
 * the spinner will not open a selection menu but will just switch the selected item, giving proper audio
 * feedback of the performed action.
 *
 */
public class AccessibleSpinner extends Spinner {
	private AccessibilityService service;
	
	public AccessibleSpinner(Context context) {
		super(context);
	}

	public AccessibleSpinner(Context context, AttributeSet attrs) {
		super(context, attrs);
	}

	public AccessibleSpinner(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
	}
	
	public void setAccessibilityService(AccessibilityService service){
		this.service = service;
	}
	
	public AccessibilityService getAccessibilityService(){
		return service;
	}
	
	/**
	 * Touching the spinner doesn't open a selection menu but just switches to the next item. The name of the next 
	 * item is also uttered by the Android text-to-speech synthesizer.
	 * 
	 * @param evt The motion event to be dispatched.
	 */
	@Override
	public boolean dispatchTouchEvent(MotionEvent evt){
		if(evt.getAction() == MotionEvent.ACTION_UP){
			setSelection((getSelectedItemPosition()+1) % getCount());
			if(service != null){
				service.speak(getSelectedItem().toString());
			}
		}
		
		return true;
	}

}