package org.develnext.jphp.android.ext;
import android.view.View;
import android.view.ViewGroup;
import android.widget.*;
import org.develnext.jphp.android.ext.bind.ActivityMemoryOperation;
import org.develnext.jphp.android.ext.classes.WrapAndroid;
import org.develnext.jphp.android.ext.classes.WrapR;
import org.develnext.jphp.android.ext.classes.app.WrapActivity;
import org.develnext.jphp.android.ext.classes.app.WrapBootstrapActivity;
import org.develnext.jphp.android.ext.classes.text.WrapInputType;
import org.develnext.jphp.android.ext.classes.view.WrapView;
import org.develnext.jphp.android.ext.classes.view.WrapViewGroup;
import org.develnext.jphp.android.ext.classes.widget.*;
import org.develnext.jphp.android.ext.event.ClickEventProvider;
import org.develnext.jphp.android.ext.event.LongClickEventProvider;
import php.runtime.env.CompileScope;
import php.runtime.env.Environment;
import php.runtime.ext.support.Extension;
import php.runtime.invoke.Invoker;
import java.util.HashMap;
import java.util.Map;
public class AndroidExtension extends Extension {
public final static String NAMESPACE = "php\\android\\";
public final static Map<String, EventProvider> eventProviders = new HashMap<String, EventProvider>();
@Override
public Status getStatus() {
return Status.EXPERIMENTAL;
}
@Override
public void onRegister(CompileScope scope) {
registerMemoryOperation(ActivityMemoryOperation.class);
registerClass(scope, WrapR.class);
registerWrapperClass(scope, View.class, WrapView.class);
registerWrapperClass(scope, ViewGroup.class, WrapViewGroup.class);
registerWrapperClass(scope, FrameLayout.class, WrapFrameLayout.class);
registerWrapperClass(scope, LinearLayout.class, WrapLinearLayout.class);
registerWrapperClass(scope, RelativeLayout.class, WrapRelativeLayout.class);
registerWrapperClass(scope, TextView.class, WrapTextView.class);
registerWrapperClass(scope, Button.class, WrapButton.class);
registerWrapperClass(scope, EditText.class, WrapEditText.class);
registerWrapperClass(scope, ImageView.class, WrapImageView.class);
registerClass(scope, WrapInputType.class);
registerClass(scope, WrapActivity.class);
registerClass(scope, WrapBootstrapActivity.class);
registerWrapperClass(scope, Toast.class, WrapToast.class);
registerClass(scope, WrapAndroid.class);
// events
registerEventProvider(new ClickEventProvider());
registerEventProvider(new LongClickEventProvider());
}
@Override
public void onLoad(Environment env) {
}
public static void registerEventProvider(EventProvider eventProvider) {
eventProviders.put(eventProvider.getCode().toLowerCase(), eventProvider);
}
public static void bindEvent(Environment env, View view, String event, final Invoker invoker) {
EventProvider provider = eventProviders.get(event.toLowerCase());
if (provider != null) {
provider.bind(env, view, invoker);
}
}
public static void unbindEvent(Environment env, View view, String event) {
EventProvider provider = eventProviders.get(event.toLowerCase());
if (provider != null) {
provider.unbind(env, view);
}
}
public static void triggerEvent(Environment env, View view, String event) {
EventProvider provider = eventProviders.get(event.toLowerCase());
if (provider != null) {
provider.trigger(env, view);
}
}
}