blob: d93d38f8957c68383ad530057a0d6aaf9e8a10a7 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package com.alibaba.weex.extend;
import android.app.Application;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import com.taobao.weex.IWXActivityStateListener;
import com.taobao.weex.WXSDKInstance;
import com.taobao.weex.WXSDKManager;
import com.taobao.weex.adapter.IWXDebugAdapter;
import com.taobao.weex.utils.WXLogUtils;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
/**
* Created by lixinke on 16/6/15.
*/
public class PlayDebugAdapter implements IWXDebugAdapter {
public static final String SHOW_3D_LAYER = "show_3d_layer";
private Map<String, String> options;
@Override
public void initDebug(final Application application) {
WXSDKManager.getInstance().postOnUiThread(new Runnable() {
@Override
public void run() {
try {
Class cls = Class.forName("com.taobao.weex.WXPrettyFish");
Method m = cls.getMethod("init", new Class[]{Application.class});
m.invoke(cls, new Object[]{application});
} catch (Exception e) {
WXLogUtils.d("weex", "WXPrettyFish not found!");
}
putDebugOptions(SHOW_3D_LAYER, "true");
}
}, 0);
}
@Override
public View wrapContainer(WXSDKInstance instance, View wxView) {
try {
Class scalpelClas = Class.forName("com.taobao.weex.scalpel.ScalpelFrameLayout");
Constructor constructor = scalpelClas.getConstructor(new Class[]{Context.class});
ViewGroup container = (ViewGroup) constructor.newInstance(wxView.getContext());
if (container != null) {
container.addView(wxView);
Class cls = Class.forName("com.taobao.weex.WXDebugTool");
Method m = cls.getMethod("updateScapleView", new Class[]{Object.class});
m.invoke(null, new Object[]{container});
instance.registerActivityStateListener(new DebugActivityState(wxView));
return container;
}
} catch (Exception e) {
}
return wxView;
}
@Override
public void putDebugOptions(String key, String value) {
if (options == null) {
options = new HashMap<>();
}
options.put(key, value);
}
@Override
public String getDebugOptions(String key) {
if (options != null) {
return options.get(key);
}
return null;
}
static class DebugActivityState implements IWXActivityStateListener {
private View mWXView;
public DebugActivityState(View wxView) {
mWXView = wxView;
}
@Override
public void onActivityCreate() {
}
@Override
public void onActivityStart() {
}
@Override
public void onActivityPause() {
try {
Class cls = Class.forName("com.taobao.weex.WXDebugTool");
Method m = cls.getMethod("updateScapleView", new Class[]{Object.class});
m.invoke(null, new Object[]{});
} catch (Exception e){
}
}
@Override
public void onActivityResume() {
if (mWXView != null && mWXView.getParent()!=null && mWXView.getParent().getClass().getName().equals("com.taobao.weex.scalpel.ScalpelFrameLayout")) {
try {
Class cls = Class.forName("com.taobao.weex.WXDebugTool");
Method m = cls.getMethod("updateScapleView", new Class[]{Object.class});
m.invoke(null, new Object[]{mWXView.getParent()});
} catch (Exception e) {
e.printStackTrace();
}
}
}
@Override
public void onActivityStop() {
}
@Override
public void onActivityDestroy() {
}
@Override
public boolean onActivityBack() {
return false;
}
}
}