Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
302 changes: 157 additions & 145 deletions core/shell/android/lynx_template_render_android.cc

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions platform/android/api/lynx_android.api
Original file line number Diff line number Diff line change
Expand Up @@ -5023,6 +5023,7 @@ public class abstract com::lynx::tasm::behavior::LynxContext : com.lynx.tasm.beh
public Map com.lynx.tasm.behavior.LynxContext.getContextData();
public int com.lynx.tasm.behavior.LynxContext.getInstanceId();
public void com.lynx.tasm.behavior.LynxContext.setInstanceId(int instanceId);
public void com.lynx.tasm.behavior.LynxContext.setInstanceId(int instanceId, boolean syncFrameRecorderCallback);
public void com.lynx.tasm.behavior.LynxContext.setInPreLoad(boolean preload);
public void com.lynx.tasm.behavior.LynxContext.setEnableImageResourceHint(boolean enable);
public boolean com.lynx.tasm.behavior.LynxContext.getEnableImageResourceHint();
Expand Down Expand Up @@ -7761,6 +7762,7 @@ public class com::lynx::tasm::LynxViewBuilder : LynxBaseConfigurator< LynxViewBu
public LynxViewBuilder com.lynx.tasm.LynxViewBuilder.setUri(@Nullable Uri uri);
public Uri com.lynx.tasm.LynxViewBuilder.getUri();
public LynxViewBuilder com.lynx.tasm.LynxViewBuilder.insertLynxViewConfig(String key, String value);
public LynxViewBuilder com.lynx.tasm.LynxViewBuilder.setEnableNativeLifecycleOptimization(boolean enable);
public LynxViewBuilder com.lynx.tasm.LynxViewBuilder.setLynxViewGroup(ILynxViewGroup group);
public LynxGroup com.lynx.tasm.LynxViewBuilder.getLynxGroup();
public LynxViewBuilder com.lynx.tasm.LynxViewBuilder.setLynxModuleExtraData(Object data);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
package com.lynx.tasm.behavior;

import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;

import android.content.Context;
Expand All @@ -16,17 +17,19 @@

public class LynxContextTest {
private LynxContext mContext;
private Context mAndroidContext;
private DisplayMetrics mDisplayMetrics;

@Before
public void setUp() throws Exception {
Context context =
mAndroidContext =
InstrumentationRegistry.getInstrumentation().getTargetContext().getApplicationContext();
DisplayMetricsHolder.updateOrInitDisplayMetrics(context, 3.0f);
DisplayMetrics displayMetrics = new DisplayMetrics();
displayMetrics.widthPixels = 1080;
displayMetrics.heightPixels = 1920;
displayMetrics.density = 3.0f;
mContext = new LynxContext(context, displayMetrics) {
DisplayMetricsHolder.updateOrInitDisplayMetrics(mAndroidContext, 3.0f);
mDisplayMetrics = new DisplayMetrics();
mDisplayMetrics.widthPixels = 1080;
mDisplayMetrics.heightPixels = 1920;
mDisplayMetrics.density = 3.0f;
mContext = new LynxContext(mAndroidContext, mDisplayMetrics) {
@Override
public void handleException(Exception e) {}
};
Expand All @@ -48,4 +51,14 @@ public void markFallbackProcess() {
mContext.markFallbackProcess(false);
assertFalse(mContext.isFallbackProcess());
}

@Test
public void takeScreenMetricsOwnership() {
LynxContext context = new LynxContext(mAndroidContext, mDisplayMetrics, true) {
@Override
public void handleException(Exception e) {}
};

assertSame(mDisplayMetrics, context.getScreenMetrics());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
// Copyright 2026 The Lynx Authors. All rights reserved.
// Licensed under the Apache License Version 2.0 that can be found in the
// LICENSE file in the root directory of this source tree.
package com.lynx.tasm.utils;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;

import android.content.Context;
import android.util.DisplayMetrics;
import androidx.test.platform.app.InstrumentationRegistry;
import org.junit.Test;

public class DisplayMetricsHolderTest {
@Test
public void getScreenDisplayMetricsReturnsIsolatedSnapshot() {
Context context =
InstrumentationRegistry.getInstrumentation().getTargetContext().getApplicationContext();
float resourcesDensity = context.getResources().getDisplayMetrics().density;
DisplayMetricsHolder.updateOrInitDisplayMetrics(context, 3.0f);
DisplayMetrics snapshot = DisplayMetricsHolder.getScreenDisplayMetrics();

assertNotNull(snapshot);
assertEquals(3.0f, snapshot.density, 0);
assertEquals(resourcesDensity, context.getResources().getDisplayMetrics().density, 0);
int globalWidth = snapshot.widthPixels;
snapshot.widthPixels = globalWidth + 1;

DisplayMetrics globalMetrics = DisplayMetricsHolder.getScreenDisplayMetrics();
assertNotNull(globalMetrics);
assertEquals(globalWidth, globalMetrics.widthPixels);
}
}
Loading
Loading