Commit 8e7bf78e authored by Shakti Sahu's avatar Shakti Sahu Committed by Commit Bot

Video Tutorials : Added Tutorial class and its conversion methods

Bug: 1116106
Change-Id: Ia8a5ab2d0fbbcb40e2df88161b7897783e80567d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2354797
Commit-Queue: Shakti Sahu <shaktisahu@chromium.org>
Reviewed-by: default avatarHesen Zhang <hesen@chromium.org>
Cr-Commit-Position: refs/heads/master@{#800356}
parent 6e1761bc
...@@ -41,6 +41,8 @@ source_set("public") { ...@@ -41,6 +41,8 @@ source_set("public") {
if (is_android) { if (is_android) {
sources += [ sources += [
"android/tutorial_conversion_bridge.cc",
"android/tutorial_conversion_bridge.h",
"android/video_tutorial_service_bridge.cc", "android/video_tutorial_service_bridge.cc",
"android/video_tutorial_service_bridge.h", "android/video_tutorial_service_bridge.h",
] ]
...@@ -68,6 +70,7 @@ if (is_android) { ...@@ -68,6 +70,7 @@ if (is_android) {
sources = [ sources = [
"android/java/src/org/chromium/chrome/browser/video_tutorials/Tutorial.java", "android/java/src/org/chromium/chrome/browser/video_tutorials/Tutorial.java",
"android/java/src/org/chromium/chrome/browser/video_tutorials/VideoTutorialService.java", "android/java/src/org/chromium/chrome/browser/video_tutorials/VideoTutorialService.java",
"android/java/src/org/chromium/chrome/browser/video_tutorials/bridges/TutorialConversionBridge.java",
"android/java/src/org/chromium/chrome/browser/video_tutorials/bridges/VideoTutorialServiceBridge.java", "android/java/src/org/chromium/chrome/browser/video_tutorials/bridges/VideoTutorialServiceBridge.java",
] ]
...@@ -78,13 +81,24 @@ if (is_android) { ...@@ -78,13 +81,24 @@ if (is_android) {
"//third_party/android_deps:androidx_annotation_annotation_java", "//third_party/android_deps:androidx_annotation_annotation_java",
] ]
srcjar_deps = [ ":jni_enums" ]
annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ] annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ]
} }
generate_jni("jni_headers") { generate_jni("jni_headers") {
visibility = [ ":*" ] visibility = [ ":*" ]
sources = [ "android/java/src/org/chromium/chrome/browser/video_tutorials/bridges/VideoTutorialServiceBridge.java" ] sources = [
"android/java/src/org/chromium/chrome/browser/video_tutorials/bridges/TutorialConversionBridge.java",
"android/java/src/org/chromium/chrome/browser/video_tutorials/bridges/VideoTutorialServiceBridge.java",
]
}
java_cpp_enum("jni_enums") {
visibility = [ "*" ]
sources = [ "tutorial.h" ]
} }
} }
......
...@@ -10,10 +10,26 @@ import org.chromium.components.browser_ui.widget.image_tiles.ImageTile; ...@@ -10,10 +10,26 @@ import org.chromium.components.browser_ui.widget.image_tiles.ImageTile;
* Class encapsulating data needed to show a video tutorial on the UI. * Class encapsulating data needed to show a video tutorial on the UI.
*/ */
public class Tutorial extends ImageTile { public class Tutorial extends ImageTile {
// TODO(shaktisahu): Add video tutorial specific fields. public final @FeatureType int featureType;
public final String videoUrl;
public final String posterUrl;
public final String captionUrl;
public final String shareUrl;
public final int videoLength;
/** Constructor */ /** Constructor */
public Tutorial(String id, String displayTitle, String accessibilityText) { public Tutorial(@FeatureType int featureType, String title, String videoUrl, String posterUrl,
super(id, displayTitle, accessibilityText); String captionUrl, String shareUrl, int videoLength) {
super(createIdFromFeatureType(featureType), title, title);
this.featureType = featureType;
this.videoUrl = videoUrl;
this.posterUrl = posterUrl;
this.captionUrl = captionUrl;
this.shareUrl = shareUrl;
this.videoLength = videoLength;
}
private static String createIdFromFeatureType(int featureType) {
return String.valueOf(featureType);
} }
} }
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.video_tutorials.bridges;
import androidx.annotation.Nullable;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace;
import org.chromium.chrome.browser.video_tutorials.Tutorial;
import java.util.ArrayList;
import java.util.List;
/**
* Helper class to provide conversion methods between C++ and Java for video tutorials.
*/
@JNINamespace("video_tutorials")
public class TutorialConversionBridge {
@CalledByNative
private static List<Tutorial> createList() {
return new ArrayList<>();
}
@CalledByNative
private static Tutorial createTutorialAndMaybeAddToList(@Nullable List<Tutorial> list,
int featureType, String title, String videoUrl, String posterUrl, String captionUrl,
String shareUrl, int videoLength) {
Tutorial tutorial = new Tutorial(
featureType, title, videoUrl, posterUrl, captionUrl, shareUrl, videoLength);
if (list != null) list.add(tutorial);
return tutorial;
}
}
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/video_tutorials/android/tutorial_conversion_bridge.h"
#include <memory>
#include <string>
#include "base/android/jni_array.h"
#include "base/android/jni_string.h"
#include "chrome/browser/video_tutorials/jni_headers/TutorialConversionBridge_jni.h"
namespace video_tutorials {
using base::android::ConvertUTF8ToJavaString;
using base::android::ToJavaArrayOfStrings;
ScopedJavaLocalRef<jobject> CreateJavaTutorialAndMaybeAddToList(
JNIEnv* env,
ScopedJavaLocalRef<jobject> jlist,
const Tutorial& tutorial) {
return Java_TutorialConversionBridge_createTutorialAndMaybeAddToList(
env, jlist, static_cast<int>(tutorial.feature),
ConvertUTF8ToJavaString(env, tutorial.title),
ConvertUTF8ToJavaString(env, tutorial.video_url.spec()),
ConvertUTF8ToJavaString(env, tutorial.poster_url.spec()),
ConvertUTF8ToJavaString(env, tutorial.caption_url.spec()),
ConvertUTF8ToJavaString(env, tutorial.share_url.spec()),
tutorial.video_length);
}
ScopedJavaLocalRef<jobject> TutorialConversionBridge::CreateJavaTutorials(
JNIEnv* env,
const std::vector<Tutorial>& tutorials) {
ScopedJavaLocalRef<jobject> jlist =
Java_TutorialConversionBridge_createList(env);
for (const auto& tutorial : tutorials)
CreateJavaTutorialAndMaybeAddToList(env, jlist, tutorial);
return jlist;
}
} // namespace video_tutorials
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_VIDEO_TUTORIALS_ANDROID_TUTORIAL_CONVERSION_BRIDGE_H_
#define CHROME_BROWSER_VIDEO_TUTORIALS_ANDROID_TUTORIAL_CONVERSION_BRIDGE_H_
#include <vector>
#include "base/android/jni_android.h"
#include "chrome/browser/video_tutorials/tutorial.h"
using base::android::ScopedJavaLocalRef;
namespace video_tutorials {
// Helper class providing video tutorial conversion utility methods between C++
// and Java.
class TutorialConversionBridge {
public:
static ScopedJavaLocalRef<jobject> CreateJavaTutorials(
JNIEnv* env,
const std::vector<Tutorial>& tutorials);
};
} // namespace video_tutorials
#endif // CHROME_BROWSER_VIDEO_TUTORIALS_ANDROID_TUTORIAL_CONVERSION_BRIDGE_H_
...@@ -12,6 +12,8 @@ namespace video_tutorials { ...@@ -12,6 +12,8 @@ namespace video_tutorials {
// Please align this enum with // Please align this enum with
// chrome/browser/video_tutorials/proto/video_tutorials.proto. // chrome/browser/video_tutorials/proto/video_tutorials.proto.
// A Java counterpart will be generated for this enum.
// GENERATED_JAVA_ENUM_PACKAGE: org.chromium.chrome.browser.video_tutorials
enum class FeatureType { enum class FeatureType {
kTest = -1, kTest = -1,
kInvalid = 0, kInvalid = 0,
......
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