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

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

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
4c63e7b
[WEEX][Weex-Android] Supported Multi Android Screen Device Size Auto …
Mar 25, 2019
e4c212c
[WEEX][Weex-Android] Supported Multi Android Screen Device Size Auto …
Mar 25, 2019
be5f0ad
[WEEX][Weex-Android] Supported Multi Android Screen Device Size Auto …
Mar 25, 2019
33b7383
[WEEX][Weex-Android] Supported Multi Android Screen Device Size Auto …
Mar 26, 2019
9797289
[WEEX][Weex-Android] Supported Multi Android Screen Device Size Auto …
Mar 26, 2019
68e5082
Merge remote-tracking branch 'gubaojian-weex/20190325_device_width_au…
Apr 23, 2019
13fd113
[WEEX][Weex-Android] Wson Emoji Problem Fix
Apr 23, 2019
dce837a
[WEEX][Weex-Android] Wson Emoji Problem Fix
Apr 23, 2019
6bfc0b7
[WEEX][Weex-Android] Wson Emoji Problem Fix
Apr 23, 2019
5e1a7bb
[WEEX][Weex-Heron] Daily Build Package For App
Apr 23, 2019
fd675ac
[WEEX][Weex-Android] Update Edit Config Params
Apr 24, 2019
6b1aec3
[WEEX][Weex-Android] UPDATE Application Context
Apr 25, 2019
481cd36
[WEEX][Weex-Android] Add Switch To Control Screen Size
Apr 25, 2019
fd5180c
[WEEX][Weex-Heron] Package On Taobao App
May 8, 2019
1e871f8
[WEEX][Weex-Heron] Add Supported For Multi Screen Render Supported I…
May 9, 2019
ffc684e
[WEEX][Weex-Heron] Add Supported For Multi Screen Render Supported I…
May 9, 2019
b4e8ed5
[WEEX][Weex-Heron] Add Supported For Multi Screen Render Supported I…
May 9, 2019
150d446
Merge remote-tracking branch 'WeexApache/master' into develop_device_…
May 16, 2019
6a512b5
[WEEX][Weex-Android] Add Supported For Multi Screen Render Supported …
May 16, 2019
632a6ec
[WEEX][Weex-Android] Add Supported For Multi Screen Render Supported …
May 16, 2019
5dc1011
[WEEX][Weex-Android] Add Supported For Multi Screen Render Supported …
May 16, 2019
1ba3b9f
[WEEX][Weex-Android] Add Supported For Multi Screen Render Supported …
May 16, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
14 changes: 12 additions & 2 deletions android/sdk/src/main/java/com/taobao/weex/WXEnvironment.java
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
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
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
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
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
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";



}
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
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
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
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
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
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
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