Skip to content
This repository has been archived by the owner on Jun 3, 2021. It is now read-only.

Commit

Permalink
[WEEX][Weex-Android] Supported Multi Android Screen Device Size Auto …
Browse files Browse the repository at this point in the history
…Render When Device Size Changed (#2447)

* [WEEX][Weex-Android] Supported Multi Android Screen Device Size Auto Render When Device Size Changed

* [WEEX][Weex-Android] Supported Multi Android Screen Device Size Auto Render When Device Size Changed

* [WEEX][Weex-Android] Supported Multi Android Screen Device Size Auto Render When Device Size Changed

* [WEEX][Weex-Android] Supported Multi Android Screen Device Size Auto Render When Device Size Changed

* [WEEX][Weex-Android] Supported Multi Android Screen Device Size Auto Render When Device Size Changed

* [WEEX][Weex-Android]  Wson Emoji  Problem Fix

* [WEEX][Weex-Android]  Wson Emoji  Problem Fix

* [WEEX][Weex-Android]  Wson Emoji  Problem Fix

* [WEEX][Weex-Heron] Daily Build Package For App

* [WEEX][Weex-Android]  Update Edit Config Params

* [WEEX][Weex-Android]  UPDATE Application Context

* [WEEX][Weex-Android]  Add Switch To Control Screen Size

* [WEEX][Weex-Heron] Package On Taobao App

* [WEEX][Weex-Heron] Add Supported For Multi Screen Render Supported  In WeexCore

* [WEEX][Weex-Heron] Add Supported For Multi Screen Render Supported  In WeexCore

* [WEEX][Weex-Heron] Add Supported For Multi Screen Render Supported  In WeexCore

* [WEEX][Weex-Android] Add Supported For Multi Screen Render Supported  In WeexCore

* [WEEX][Weex-Android] Add Supported For Multi Screen Render Supported  In WeexCore

* [WEEX][Weex-Android] Add Supported For Multi Screen Render Supported  In WeexCore

* [WEEX][Weex-Android] Add Supported For Multi Screen Render Supported  In WeexCore
  • Loading branch information
gubaojian authored and YorkShen committed May 16, 2019
1 parent 9602c43 commit b54cce6
Show file tree
Hide file tree
Showing 51 changed files with 620 additions and 60 deletions.
14 changes: 12 additions & 2 deletions android/sdk/src/main/java/com/taobao/weex/WXEnvironment.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,7 @@
import android.os.Environment;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import com.taobao.weex.BuildConfig;
import com.taobao.weex.adapter.IWXJscProcessManager;

import com.taobao.weex.common.WXConfig;
import com.taobao.weex.utils.FontDO;
import com.taobao.weex.utils.LogLevel;
Expand All @@ -37,6 +36,8 @@
import com.taobao.weex.utils.WXLogUtils;
import com.taobao.weex.utils.WXSoInstallMgrSdk;
import com.taobao.weex.utils.WXUtils;
import com.taobao.weex.utils.WXViewUtils;

import dalvik.system.PathClassLoader;
import java.io.BufferedReader;
import java.io.File;
Expand Down Expand Up @@ -80,6 +81,14 @@ public class WXEnvironment {
public static final String SETTING_EXCLUDE_X86SUPPORT = "env_exclude_x86";

public static boolean SETTING_FORCE_VERTICAL_SCREEN = false;

/**
* auto adjust device width for when screen size change.
* */
public static boolean AUTO_ADJUST_ENV_DEVICE_WIDTH = true;

public static boolean AUTO_UPDATE_APPLICATION_SCREEN_SIZE = true;

/**
* Debug model
*/
Expand Down Expand Up @@ -171,6 +180,7 @@ public static Map<String, String> getConfig() {
addCustomOptions(WXConfig.debugMode, "true");
}
addCustomOptions(WXConfig.scale, Float.toString(sApplication.getResources().getDisplayMetrics().density));
addCustomOptions(WXConfig.androidStatusBarHeight, Float.toString(WXViewUtils.getStatusBarHeight(sApplication)));
}catch (NullPointerException e){
//There is little chance of NullPointerException as sApplication may be null.
WXLogUtils.e("WXEnvironment scale Exception: ", e);
Expand Down
53 changes: 49 additions & 4 deletions android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
Original file line number Diff line number Diff line change
Expand Up @@ -55,9 +55,11 @@
import com.taobao.weex.bridge.SimpleJSCallback;
import com.taobao.weex.bridge.WXBridgeManager;
import com.taobao.weex.bridge.WXModuleManager;
import com.taobao.weex.bridge.WXParams;
import com.taobao.weex.common.Constants;
import com.taobao.weex.common.Destroyable;
import com.taobao.weex.common.OnWXScrollListener;
import com.taobao.weex.common.WXConfig;
import com.taobao.weex.common.WXErrorCode;
import com.taobao.weex.common.WXModule;
import com.taobao.weex.common.WXPerformance;
Expand Down Expand Up @@ -190,6 +192,13 @@ public class WXSDKInstance implements IWXActivityStateListener,View.OnLayoutChan

private WXSDKInstance mParentInstance;

/**
* Default Width And Viewport is 750,
* when screen width change, we adjust viewport to adapter screen change
* */
private boolean mAutoAdjustDeviceWidth = WXEnvironment.AUTO_ADJUST_ENV_DEVICE_WIDTH;


public List<String> getLayerOverFlowListeners() {
return mLayerOverFlowListeners;
}
Expand Down Expand Up @@ -401,8 +410,23 @@ public void setUseScroller(boolean use) {

public void setInstanceViewPortWidth(int instanceViewPortWidth) {
this.mInstanceViewPortWidth = instanceViewPortWidth;
this.mAutoAdjustDeviceWidth = false;
}

public void setAutoAdjustDeviceWidth(boolean autoAdjustViewPort){
this.mAutoAdjustDeviceWidth = autoAdjustViewPort;
}

public boolean isAutoAdjustDeviceWidth(){
return mAutoAdjustDeviceWidth;
}

private void setDeviceDisplay(float deviceWith, float deviceHeight, float scale){
WXBridgeManager.getInstance().setDeviceDisplay(getInstanceId(), deviceWith, deviceHeight, scale);
}



public int getInstanceViewPortWidth(){
return mInstanceViewPortWidth;
}
Expand Down Expand Up @@ -708,13 +732,34 @@ private void renderInternal(String pageName,
return;
}



mWXPerformance.JSTemplateSize = template.length() / 1024f;
mApmForInstance.addStats(WXInstanceApm.KEY_PAGE_STATS_BUNDLE_SIZE,mWXPerformance.JSTemplateSize);

mRenderStartTime = System.currentTimeMillis();

WXSDKManager.getInstance().setCrashInfo(WXEnvironment.WEEX_CURRENT_KEY,pageName);

WXSDKManager.getInstance().setCrashInfo(WXEnvironment.WEEX_CURRENT_KEY,pageName);;
if(mAutoAdjustDeviceWidth){
if(WXEnvironment.AUTO_UPDATE_APPLICATION_SCREEN_SIZE) {
WXViewUtils.updateApplicationScreen(mContext);
}
WXParams params = WXBridgeManager.getInstance().getInitParams();
if(params != null && !TextUtils.equals(params.getDeviceWidth(), String.valueOf(WXViewUtils.getScreenWidth(mContext)))){
params.setDeviceWidth(String.valueOf(WXViewUtils.getScreenWidth(mContext)));
params.setDeviceHeight(String.valueOf(WXViewUtils.getScreenHeight(mContext)));
float density = WXEnvironment.sApplication.getResources().getDisplayMetrics().density;
WXEnvironment.addCustomOptions(WXConfig.scale, Float.toString(density));
String statusBarHeight = null;
if(WXViewUtils.getStatusBarHeight(mContext) > 0 ){
statusBarHeight = String.valueOf(WXViewUtils.getStatusBarHeight(mContext));
}
WXBridgeManager.getInstance().updateInitDeviceParams(params.getDeviceWidth(),
params.getDeviceHeight(),
Float.toString(density), statusBarHeight);
setDeviceDisplay(WXViewUtils.getScreenWidth(mContext),
WXViewUtils.getScreenHeight(mContext),
WXViewUtils.getScreenDensity(mContext));
}
}
WXSDKManager.getInstance().createInstance(this, template, renderOptions, jsonInitData);
mRendered = true;

Expand Down
18 changes: 18 additions & 0 deletions android/sdk/src/main/java/com/taobao/weex/bridge/WXBridge.java
Original file line number Diff line number Diff line change
Expand Up @@ -108,10 +108,17 @@ public class WXBridge implements IWXBridge {

private native void nativeMarkDirty(String instanceId, String ref, boolean dirty);

private native void nativeSetDeviceDisplay(String instanceId, float width, float height, float scale);

private native void nativeRegisterCoreEnv(String key, String value);

private native void nativeResetWXBridge(Object bridge, String className);

/**
* Update Init Framework Params
* */
private native void nativeUpdateInitFrameworkParams(String key, String value, String desc);

/**
* update global config,
* @param config params
Expand All @@ -120,6 +127,12 @@ public class WXBridge implements IWXBridge {

public static final boolean MULTIPROCESS = true;


@Override
public void updateInitFrameworkParams(String key, String value, String desc){
nativeUpdateInitFrameworkParams(key, value, desc);
}

@Override
public int initFramework(String framework, WXParams params) {
return nativeInitFramework(framework, params);
Expand Down Expand Up @@ -702,6 +715,11 @@ public void markDirty(String instanceId, String ref, boolean dirty) {
nativeMarkDirty(instanceId, ref, dirty);
}

@Override
public void setDeviceDisplay(String instanceId, float width, float height, float scale) {
nativeSetDeviceDisplay(instanceId, width, height, scale);
}

@Override
public void setStyleHeight(String instanceId, String ref, float value) {
nativeSetStyleHeight(instanceId, ref, value);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3189,6 +3189,49 @@ public long[] getRenderFinishTime(String instanceId) {
return new long[]{0, 0, 0};
}

public void setDeviceDisplay(final String instanceId, final float deviceWidth, final float deviceHeight, final float scale) {
post(new Runnable() {
@Override
public void run() {
mWXBridge.setDeviceDisplay(instanceId, deviceWidth, deviceHeight, scale);
}
});
}

public void updateInitDeviceParams(final String width, final String height, final String density, final String statusHeight){
if(!isJSFrameworkInit()){
return;
}
post(new Runnable() {
@Override
public void run() {
mWXBridge.updateInitFrameworkParams(WXConfig.deviceWidth, width, WXConfig.deviceWidth);
}
});
post(new Runnable() {
@Override
public void run() {
mWXBridge.updateInitFrameworkParams(WXConfig.deviceHeight, height, WXConfig.deviceHeight);
}
});

post(new Runnable() {
@Override
public void run() {
mWXBridge.updateInitFrameworkParams(WXConfig.scale, density, WXConfig.scale);
}
});

if(statusHeight != null){
post(new Runnable() {
@Override
public void run() {
mWXBridge.updateInitFrameworkParams(WXConfig.androidStatusBarHeight, statusHeight, WXConfig.androidStatusBarHeight);
}
});
}
}

public void setMargin(String instanceId, String ref, CSSShorthand.EDGE edge, float value) {
if (isSkipFrameworkInit(instanceId) || isJSFrameworkInit()) {
mWXBridge.setMargin(instanceId, ref, edge, value);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,13 @@ public interface IWXBridge extends IWXObject {
*/
int initFrameworkEnv(String framework, WXParams params, String cacheDir, boolean pieSupport);


/**
* Update InitFramework Params
* */
void updateInitFrameworkParams(String key, String value, String desc);


void refreshInstance(String instanceId, String namespace, String function, WXJSObject[] args);

/**
Expand Down Expand Up @@ -188,6 +195,8 @@ int callUpdateAttrs(String instanceId, String ref,

void markDirty(String instanceId, String ref, boolean dirty);

void setDeviceDisplay(String instanceId, float width, float height, float scale);

void registerCoreEnv(String key, String value);

void reportNativeInitStatus(String statusCode, String errorMsg);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,10 @@ public interface WXConfig {
String scale = "scale";
String layoutDirection = "layoutDirection";
String debugMode = "debugMode";
String androidStatusBarHeight = "androidStatusBarHeight";
String deviceHeight = "deviceHeight";
String deviceWidth = "deviceWidth";



}
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ private static float transferWx(String stringWithWXPostfix, int viewport) {
temp = stringWithWXPostfix.substring(0, stringWithWXPostfix.indexOf("wx"));
}
Float f = Float.parseFloat(temp);
float density = Float.parseFloat(WXEnvironment.getConfig().get(WXConfig.scale));
float density = WXEnvironment.sApplication.getResources().getDisplayMetrics().density;
return density * f * viewport / WXViewUtils.getScreenWidth();
}

Expand Down
23 changes: 23 additions & 0 deletions android/sdk/src/main/java/com/taobao/weex/utils/WXViewUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
import android.support.annotation.IntDef;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
Expand Down Expand Up @@ -156,6 +157,17 @@ public static float getScreenDensity(Context ctx){
return Constants.Value.DENSITY;
}

public static void updateApplicationScreen(Context context){
DisplayMetrics metrics = context.getResources().getDisplayMetrics();
DisplayMetrics displayMetrics =WXEnvironment.sApplication.getResources().getDisplayMetrics();
displayMetrics.heightPixels = metrics.heightPixels;
displayMetrics.widthPixels = metrics.widthPixels;
displayMetrics.density = metrics.density;
displayMetrics.densityDpi = metrics.densityDpi;
displayMetrics.scaledDensity = metrics.scaledDensity;
displayMetrics.xdpi = metrics.xdpi;
}

public static int getScreenWidth(Context ctx) {
if(ctx!=null){
Resources res = ctx.getResources();
Expand All @@ -173,6 +185,17 @@ public static int getScreenWidth(Context ctx) {
}


public static int getStatusBarHeight(Context context){
Resources resources = context.getResources();
int resourceId = resources.getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
int statusBarHeight = resources.getDimensionPixelSize(resourceId);
return statusBarHeight;
}
return -1;
}


@Deprecated
public static int getScreenHeight() {
return getScreenHeight(WXEnvironment.sApplication);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -551,6 +551,30 @@ int ScriptSideInMultiProcess::UpdateGlobalConfig(const char *config) {
}
return true;
}

int ScriptSideInMultiProcess::UpdateInitFrameworkParams(const std::string &key,
const std::string &value,
const std::string &desc) {

try {
if(sender_ == nullptr) {
LOGE("UpdateGlobalConfig sender is null");
return false;
}
std::unique_ptr<IPCSerializer> serializer(createIPCSerializer());
serializer->setMsg(static_cast<uint32_t>(IPCJSMsg::UpdateInitFrameworkParams));
serializer->add(key.data(), key.length());
serializer->add(value.data(), value.length());
serializer->add(desc.data(), desc.length());
std::unique_ptr<IPCBuffer> buffer = serializer->finish();
std::unique_ptr<IPCResult> result = sender_->send(buffer.get());
} catch (IPCException &e) {
LOGE("%s", e.msg());
}
return true;

}

} // namespace script
} // namespace bridge
} // namespace WeexCore
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,10 @@ class ScriptSideInMultiProcess : public ScriptBridge::ScriptSide {

int UpdateGlobalConfig(const char *config) override;

ScriptSideInMultiProcess();
int UpdateInitFrameworkParams(const std::string& key, const std::string& value, const std::string& desc) override;


ScriptSideInMultiProcess();

virtual ~ScriptSideInMultiProcess();

Expand Down
10 changes: 10 additions & 0 deletions weex_core/Source/android/bridge/script/script_side_in_multi_so.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,16 @@ int ScriptSideInMultiSo::UpdateGlobalConfig(const char *config) {
}
return script_side_functions_->funcUpdateGlobalConfig(config);
}

int ScriptSideInMultiSo::UpdateInitFrameworkParams(const std::string &key, const std::string &value,
const std::string &desc) {
if(script_side_functions_ == nullptr) {
LOGE("ScriptSideInMultiSo::UpdateInitFrameworkParams script_side_functions_ is null");
return false;
}
return script_side_functions_->funcUpdateInitFrameworkParams(key, value, desc);
}

} // namespace script
} // namespace bridge
} // namespace WeexCore
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,10 @@ class ScriptSideInMultiSo : public ScriptBridge::ScriptSide {

int UpdateGlobalConfig(const char *config) override;

ScriptSideInMultiSo();
int UpdateInitFrameworkParams(const std::string& key, const std::string& value, const std::string& desc)override;


ScriptSideInMultiSo();

virtual ~ScriptSideInMultiSo();

Expand Down
1 change: 1 addition & 0 deletions weex_core/Source/android/jsengine/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,7 @@ set(${WEEXJSSERVER_NAME}_SOURCES
task/impl/exe_js_task.cpp
task/impl/take_heap_snapshot.cpp
task/impl/native_timer_task.cpp
task/impl/update_init_framework_params_task.cpp
task/weex_task.cpp
task/weex_task_queue.cpp
task/timer_task.cpp
Expand Down
Loading

0 comments on commit b54cce6

Please sign in to comment.