Commit b068d2b8 authored by Shakti Sahu's avatar Shakti Sahu Committed by Commit Bot

ThinWebView : Set background color

Currently ThinWebView background is set to white from the cc::Layer.
This causes a white flash in the video player. This CL adds the ability
to set a background color

Bug: 1151187
Change-Id: I32bcee040d1662a04477feb6b8ac6dc92f652a54
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2552222Reviewed-by: default avatarDavid Trainor <dtrainor@chromium.org>
Commit-Queue: Shakti Sahu <shaktisahu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#830078}
parent 729dbbbd
......@@ -5,6 +5,7 @@
package org.chromium.chrome.browser.video_tutorials.player;
import android.content.Context;
import android.graphics.Color;
import android.util.Pair;
import android.view.View;
......@@ -99,7 +100,9 @@ public class VideoPlayerCoordinatorImpl implements VideoPlayerCoordinator {
mMediaSessionObserver = new PlaybackStateObserver(
MediaSession.fromWebContents(mWebContents), () -> { return mMediator; });
ThinWebView thinWebView = ThinWebViewFactory.create(mContext, new ThinWebViewConstraints());
ThinWebViewConstraints constraints = new ThinWebViewConstraints();
constraints.backgroundColor = Color.BLACK;
ThinWebView thinWebView = ThinWebViewFactory.create(mContext, constraints);
thinWebView.attachWebContents(mWebContents, webContentView, mWebContentsDelegate);
return thinWebView;
}
......
......@@ -13,6 +13,7 @@
#include "components/thin_webview/internal/jni_headers/CompositorViewImpl_jni.h"
#include "content/public/browser/android/compositor.h"
#include "third_party/skia/include/core/SkColor.h"
#include "ui/android/color_helpers.h"
#include "ui/android/window_android.h"
using base::android::JavaParamRef;
......@@ -24,14 +25,14 @@ namespace {
const int kPixelFormatUnknown = 0;
} // namespace
jlong JNI_CompositorViewImpl_Init(
JNIEnv* env,
const JavaParamRef<jobject>& obj,
const JavaParamRef<jobject>& jwindow_android) {
jlong JNI_CompositorViewImpl_Init(JNIEnv* env,
const JavaParamRef<jobject>& obj,
const JavaParamRef<jobject>& jwindow_android,
jint java_background_color) {
ui::WindowAndroid* window_android =
ui::WindowAndroid::FromJavaWindowAndroid(jwindow_android);
auto compositor_view =
std::make_unique<CompositorViewImpl>(env, obj, window_android);
auto compositor_view = std::make_unique<CompositorViewImpl>(
env, obj, window_android, java_background_color);
return reinterpret_cast<intptr_t>(compositor_view.release());
}
......@@ -48,13 +49,16 @@ CompositorView* CompositorView::FromJavaObject(
CompositorViewImpl::CompositorViewImpl(JNIEnv* env,
jobject obj,
ui::WindowAndroid* window_android)
ui::WindowAndroid* window_android,
int64_t java_background_color)
: obj_(env, obj),
root_layer_(cc::SolidColorLayer::Create()),
current_surface_format_(kPixelFormatUnknown) {
compositor_.reset(content::Compositor::Create(this, window_android));
root_layer_->SetIsDrawable(true);
root_layer_->SetBackgroundColor(SK_ColorWHITE);
base::Optional<SkColor> background_color =
ui::JavaColorToOptionalSkColor(java_background_color);
root_layer_->SetBackgroundColor(background_color.value());
}
CompositorViewImpl::~CompositorViewImpl() = default;
......
......@@ -35,7 +35,8 @@ class CompositorViewImpl : public CompositorView,
public:
CompositorViewImpl(JNIEnv* env,
jobject obj,
ui::WindowAndroid* window_android);
ui::WindowAndroid* window_android,
int64_t java_background_color);
~CompositorViewImpl() override;
void Destroy(JNIEnv* env, const base::android::JavaParamRef<jobject>& object);
......
......@@ -45,8 +45,8 @@ public class CompositorViewImpl implements CompositorView {
mContext = context;
mViewConstraints = constraints.clone();
mView = useSurfaceView() ? createSurfaceView() : createTextureView();
mNativeCompositorViewImpl =
CompositorViewImplJni.get().init(CompositorViewImpl.this, windowAndroid);
mNativeCompositorViewImpl = CompositorViewImplJni.get().init(
CompositorViewImpl.this, windowAndroid, constraints.backgroundColor);
}
@Override
......@@ -168,7 +168,7 @@ public class CompositorViewImpl implements CompositorView {
@NativeMethods
interface Natives {
long init(CompositorViewImpl caller, WindowAndroid windowAndroid);
long init(CompositorViewImpl caller, WindowAndroid windowAndroid, int backgroundColor);
void destroy(long nativeCompositorViewImpl, CompositorViewImpl caller);
void surfaceCreated(long nativeCompositorViewImpl, CompositorViewImpl caller);
void surfaceDestroyed(long nativeCompositorViewImpl, CompositorViewImpl caller);
......
......@@ -4,6 +4,8 @@
package org.chromium.components.thinwebview;
import android.graphics.Color;
/** Various constraints associated with the thin webview based on the usage. */
public class ThinWebViewConstraints implements Cloneable {
/**
......@@ -11,10 +13,16 @@ public class ThinWebViewConstraints implements Cloneable {
*/
public boolean supportsOpacity;
/**
* Background color of this view.
*/
public int backgroundColor = Color.WHITE;
@Override
public ThinWebViewConstraints clone() {
ThinWebViewConstraints clone = new ThinWebViewConstraints();
clone.supportsOpacity = supportsOpacity;
clone.backgroundColor = backgroundColor;
return clone;
}
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment