package com.brian.floersch.uim.AssemblerV1.events; import android.view.View; import android.widget.SeekBar; import com.brian.floersch.uim.IuimEvents; import java.util.ArrayList; import java.util.HashMap; /** * Global event handler class used for handling all view related events */ public class GlobalEventHandler implements View.OnClickListener, SeekBar.OnSeekBarChangeListener, View.OnLongClickListener { private IuimEvents mEventHandler; private HashMap<String, String[]> mPackager; private View mRootView; /** * Constructs a new GloblaEventHandler class instance * * @param eventHandler the UIM event handler * @param root the root view */ public GlobalEventHandler(IuimEvents eventHandler, View root) { mEventHandler = eventHandler; mPackager = new HashMap<>(); mRootView = root; } /** * Adds a package of views to the event * * @param key String view id * @param packaged string Array of view ids */ public void addEventPackage(String key, String[] packaged) { mPackager.put(key, packaged); } /** * Assembles the view package for an event * * @param id the String view id * @return the collection of views in the package */ private ArrayList<Packaged> resolvePackage(String id) { if (mPackager.containsKey(id)) { ArrayList<Packaged> views = new ArrayList<>(); String[] eventPackage = mPackager.get(id); for (String s : eventPackage) { View v = mRootView.findViewById(s.hashCode()); views.add(new Packaged(s, v)); } return views; } return null; } @Override public void onClick(View v) { String id = (String) v.getTag(); Event e = new Event(id, v, resolvePackage(id), Event.Type.ON_CLICK); mEventHandler.onEvent(e); } @Override public boolean onLongClick(View v) { String id = (String) v.getTag(); Event e = new Event(id, v, resolvePackage(id), Event.Type.ON_LONG_CLICK); mEventHandler.onEvent(e); return true; } @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { String id = (String) seekBar.getTag(); Event e = new Event(id, seekBar, resolvePackage(id), Event.Type.ON_STOP_TRACKING_TOUCH); mEventHandler.onEvent(e); } }