package org.itsnat.droid.impl.browser; import android.view.View; import android.widget.TextView; import org.itsnat.droid.impl.browser.serveritsnat.evtlistadapter.ClickEventListenerViewAdapter; import org.itsnat.droid.impl.browser.serveritsnat.evtlistadapter.FocusEventListenerViewAdapter; import org.itsnat.droid.impl.browser.serveritsnat.evtlistadapter.KeyEventListenerViewAdapter; import org.itsnat.droid.impl.browser.serveritsnat.evtlistadapter.TextChangeEventListenerViewAdapter; import org.itsnat.droid.impl.browser.serveritsnat.evtlistadapter.TouchEventListenerViewAdapter; import org.itsnat.droid.impl.xmlinflated.layout.InflatedXMLLayoutPageImpl; /** * Created by jmarranz on 11/08/14. */ public class ItsNatViewNotNullImpl extends ItsNatViewImpl { protected View view; protected ClickEventListenerViewAdapter clickEvtListenerViewAdapter; protected TouchEventListenerViewAdapter touchEvtListenerViewAdapter; protected KeyEventListenerViewAdapter keyEvtListenerViewAdapter; protected FocusEventListenerViewAdapter focusEvtListenerViewAdapter; protected TextChangeEventListenerViewAdapter textChangeEvtListenerViewAdapter; public ItsNatViewNotNullImpl(ItsNatDocImpl itsNatDoc, View view) { super(itsNatDoc); this.view = view; } public InflatedXMLLayoutPageImpl getInflatedXMLLayoutPageImpl() { return itsNatDoc.getPageImpl().getInflatedXMLLayoutPageImpl(); } public View getView() { return view; } public String getXMLId() { return getInflatedXMLLayoutPageImpl().getXMLId(view); } public void setXMLId(String id) { getInflatedXMLLayoutPageImpl().setXMLId(id, view); } public ClickEventListenerViewAdapter getClickEventListenerViewAdapter() { if (clickEvtListenerViewAdapter == null) this.clickEvtListenerViewAdapter = new ClickEventListenerViewAdapter(this); return clickEvtListenerViewAdapter; } public TouchEventListenerViewAdapter getTouchEventListenerViewAdapter() { if (touchEvtListenerViewAdapter == null) this.touchEvtListenerViewAdapter = new TouchEventListenerViewAdapter(this); return touchEvtListenerViewAdapter; } public KeyEventListenerViewAdapter getKeyEventListenerViewAdapter() { if (keyEvtListenerViewAdapter == null) this.keyEvtListenerViewAdapter = new KeyEventListenerViewAdapter(this); return keyEvtListenerViewAdapter; } public FocusEventListenerViewAdapter getFocusEventListenerViewAdapter() { if (focusEvtListenerViewAdapter == null) this.focusEvtListenerViewAdapter = new FocusEventListenerViewAdapter(this); return focusEvtListenerViewAdapter; } public TextChangeEventListenerViewAdapter getTextChangeEventListenerViewAdapter() { // Como el listener nativo se puede registrar muchas veces nosotros tenemos que hacerlo UNA sola vez y necesitamos detectarlo return textChangeEvtListenerViewAdapter; } public void setTextChangeEventListenerViewAdapter(TextChangeEventListenerViewAdapter textChangeEvtListenerViewAdapter) { this.textChangeEvtListenerViewAdapter = textChangeEvtListenerViewAdapter; } public void setOnClickListener(View.OnClickListener l) { ClickEventListenerViewAdapter evtListenerViewAdapter = getClickEventListenerViewAdapter(); view.setOnClickListener(evtListenerViewAdapter); evtListenerViewAdapter.setOnClickListener(l); } public void setOnTouchListener(View.OnTouchListener l) { TouchEventListenerViewAdapter evtListenerViewAdapter = getTouchEventListenerViewAdapter(); view.setOnTouchListener(evtListenerViewAdapter); evtListenerViewAdapter.setOnTouchListener(l); } public void setOnKeyListener(View.OnKeyListener l) { KeyEventListenerViewAdapter evtListenerViewAdapter = getKeyEventListenerViewAdapter(); view.setOnKeyListener(evtListenerViewAdapter); evtListenerViewAdapter.setOnKeyListener(l); } public void setOnFocusChangeListener(View.OnFocusChangeListener l) { FocusEventListenerViewAdapter evtListenerViewAdapter = getFocusEventListenerViewAdapter(); view.setOnFocusChangeListener(evtListenerViewAdapter); evtListenerViewAdapter.setOnFocusChangeListener(l); } public void registerEventListenerViewAdapter(String type) { if (type.equals("click")) { // No sabemos si ha sido registrado ya antes el ClickEventListenerViewAdapter en este view, pero da igual puede llamarse todas las veces que se quiera ClickEventListenerViewAdapter evtListAdapter = getClickEventListenerViewAdapter(); view.setOnClickListener(evtListAdapter); } else if (type.equals("change")) { // Como el listener nativo se puede registrar muchas veces nosotros tenemos que hacerlo UNA sola vez y necesitamos detectarlo // por ello evtListAdapter puede ser null TextChangeEventListenerViewAdapter evtListAdapter = getTextChangeEventListenerViewAdapter(); if (evtListAdapter == null) { evtListAdapter = new TextChangeEventListenerViewAdapter(this); setTextChangeEventListenerViewAdapter(evtListAdapter); // El change está pensado para el componente EditText pero el método addTextChangedListener está a nivel de TextView, por si acaso ((TextView) view).addTextChangedListener(evtListAdapter); // Sólo registramos una vez } } else if (type.equals("focus") || type.equals("blur")) { FocusEventListenerViewAdapter evtListAdapter = getFocusEventListenerViewAdapter(); view.setOnFocusChangeListener(evtListAdapter); } else if (type.startsWith("key")) { KeyEventListenerViewAdapter evtListAdapter = getKeyEventListenerViewAdapter(); view.setOnKeyListener(evtListAdapter); } else if (type.startsWith("touch")) { TouchEventListenerViewAdapter evtListAdapter = getTouchEventListenerViewAdapter(); view.setOnTouchListener(evtListAdapter); } // Es posible que sea un load, unload etc, no damos error, simplemente no tiene ViewAdapter } }