Commit 2ad7944c authored by Shakti Sahu's avatar Shakti Sahu Committed by Commit Bot

Query Tiles : Added JNI conversion methods

This CL adds the JNI conversion methods for the query tiles.

Change-Id: Ie8bfedc262d26885b925d45c0530da08dc9b3511
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2117061
Commit-Queue: Shakti Sahu <shaktisahu@chromium.org>
Reviewed-by: default avatarXing Liu <xingliu@chromium.org>
Reviewed-by: default avatarHesen Zhang <hesen@chromium.org>
Cr-Commit-Position: refs/heads/master@{#753095}
parent b4dce26f
...@@ -29,7 +29,7 @@ source_set("public") { ...@@ -29,7 +29,7 @@ source_set("public") {
"tile_service.h", "tile_service.h",
] ]
deps = [] deps = [ "//ui/gfx" ]
public_deps = [ public_deps = [
"//base", "//base",
......
...@@ -4,8 +4,6 @@ ...@@ -4,8 +4,6 @@
package org.chromium.chrome.browser.query_tiles; package org.chromium.chrome.browser.query_tiles;
import androidx.annotation.VisibleForTesting;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
...@@ -30,8 +28,7 @@ public class Tile { ...@@ -30,8 +28,7 @@ public class Tile {
public final List<Tile> children; public final List<Tile> children;
/** Constructor. */ /** Constructor. */
@VisibleForTesting public Tile(String id, String displayTitle, String accessibilityText, String queryText,
Tile(String id, String displayTitle, String accessibilityText, String queryText,
List<Tile> children) { List<Tile> children) {
this.id = id; this.id = id;
this.displayTitle = displayTitle; this.displayTitle = displayTitle;
......
...@@ -6,6 +6,8 @@ package org.chromium.chrome.browser.query_tiles.bridges; ...@@ -6,6 +6,8 @@ package org.chromium.chrome.browser.query_tiles.bridges;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import androidx.annotation.Nullable;
import org.chromium.base.Callback; import org.chromium.base.Callback;
import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace; import org.chromium.base.annotations.JNINamespace;
...@@ -13,6 +15,7 @@ import org.chromium.base.annotations.NativeMethods; ...@@ -13,6 +15,7 @@ import org.chromium.base.annotations.NativeMethods;
import org.chromium.chrome.browser.query_tiles.Tile; import org.chromium.chrome.browser.query_tiles.Tile;
import org.chromium.chrome.browser.query_tiles.TileProvider; import org.chromium.chrome.browser.query_tiles.TileProvider;
import java.util.ArrayList;
import java.util.List; import java.util.List;
/** /**
...@@ -48,6 +51,19 @@ public class TileProviderBridge implements TileProvider { ...@@ -48,6 +51,19 @@ public class TileProviderBridge implements TileProvider {
TileProviderBridgeJni.get().getThumbnail(mNativeTileProviderBridge, this, id, callback); TileProviderBridgeJni.get().getThumbnail(mNativeTileProviderBridge, this, id, callback);
} }
@CalledByNative
private static List<Tile> createList() {
return new ArrayList<>();
}
@CalledByNative
private static Tile createTileAndMaybeAddToList(@Nullable List<Tile> list, String tileId,
String displayTitle, String accessibilityText, String queryText, List<Tile> children) {
Tile tile = new Tile(tileId, displayTitle, accessibilityText, queryText, children);
if (list != null) list.add(tile);
return tile;
}
@NativeMethods @NativeMethods
interface Natives { interface Natives {
void getQueryTiles(long nativeTileProviderBridge, TileProviderBridge caller, void getQueryTiles(long nativeTileProviderBridge, TileProviderBridge caller,
...@@ -55,4 +71,4 @@ public class TileProviderBridge implements TileProvider { ...@@ -55,4 +71,4 @@ public class TileProviderBridge implements TileProvider {
void getThumbnail(long nativeTileProviderBridge, TileProviderBridge caller, String id, void getThumbnail(long nativeTileProviderBridge, TileProviderBridge caller, String id,
Callback<Bitmap> callback); Callback<Bitmap> callback);
} }
} }
\ No newline at end of file
...@@ -4,14 +4,64 @@ ...@@ -4,14 +4,64 @@
#include "chrome/browser/upboarding/query_tiles/android/tile_provider_bridge.h" #include "chrome/browser/upboarding/query_tiles/android/tile_provider_bridge.h"
#include "base/android/callback_android.h"
#include "base/android/jni_string.h"
#include "chrome/browser/upboarding/query_tiles/jni_headers/TileProviderBridge_jni.h" #include "chrome/browser/upboarding/query_tiles/jni_headers/TileProviderBridge_jni.h"
#include "ui/gfx/android/java_bitmap.h"
#include "ui/gfx/image/image.h"
using base::android::AttachCurrentThread;
using base::android::ConvertJavaStringToUTF8;
using base::android::ConvertUTF8ToJavaString;
namespace upboarding { namespace upboarding {
namespace { namespace {
const char kTileProviderBridgeKey[] = "tile_provider_bridge"; const char kTileProviderBridgeKey[] = "tile_provider_bridge";
ScopedJavaLocalRef<jobject> createJavaTileAndMaybeAddToList(
JNIEnv* env,
ScopedJavaLocalRef<jobject> jlist,
QueryTileEntry* tile) {
ScopedJavaLocalRef<jobject> jchildren =
Java_TileProviderBridge_createList(env);
for (QueryTileEntry* subtile : tile->subtiles)
createJavaTileAndMaybeAddToList(env, jchildren, subtile);
return Java_TileProviderBridge_createTileAndMaybeAddToList(
env, jlist, ConvertUTF8ToJavaString(env, tile->id),
ConvertUTF8ToJavaString(env, tile->display_text),
ConvertUTF8ToJavaString(env, tile->accessibility_text),
ConvertUTF8ToJavaString(env, tile->query_text), jchildren);
}
ScopedJavaLocalRef<jobject> createJavaTiles(
JNIEnv* env,
const std::vector<QueryTileEntry*>& tiles) {
ScopedJavaLocalRef<jobject> jlist = Java_TileProviderBridge_createList(env);
for (QueryTileEntry* tile : tiles)
createJavaTileAndMaybeAddToList(env, jlist, tile);
return jlist;
}
void RunGetTilesCallback(const JavaRef<jobject>& j_callback,
const std::vector<QueryTileEntry*>& tiles) {
JNIEnv* env = AttachCurrentThread();
RunObjectCallbackAndroid(j_callback, createJavaTiles(env, tiles));
} }
void RunGeVisualsCallback(const JavaRef<jobject>& j_callback,
const gfx::Image& image) {
ScopedJavaLocalRef<jobject> j_bitmap =
gfx::ConvertToJavaBitmap(image.ToSkBitmap());
RunObjectCallbackAndroid(j_callback, j_bitmap);
}
} // namespace
// static // static
ScopedJavaLocalRef<jobject> TileProviderBridge::GetBridgeForTileService( ScopedJavaLocalRef<jobject> TileProviderBridge::GetBridgeForTileService(
TileService* tile_service) { TileService* tile_service) {
...@@ -44,11 +94,18 @@ TileProviderBridge::~TileProviderBridge() { ...@@ -44,11 +94,18 @@ TileProviderBridge::~TileProviderBridge() {
void TileProviderBridge::GetQueryTiles(JNIEnv* env, void TileProviderBridge::GetQueryTiles(JNIEnv* env,
const JavaParamRef<jobject>& jcaller, const JavaParamRef<jobject>& jcaller,
const JavaParamRef<jobject>& jcallback) { const JavaParamRef<jobject>& jcallback) {
tile_service_->GetQueryTiles(base::BindOnce(
&RunGetTilesCallback, ScopedJavaGlobalRef<jobject>(jcallback)));
} }
void TileProviderBridge::GetThumbnail(JNIEnv* env, void TileProviderBridge::GetThumbnail(JNIEnv* env,
const JavaParamRef<jobject>& jcaller, const JavaParamRef<jobject>& jcaller,
const JavaParamRef<jstring>& jid, const JavaParamRef<jstring>& jid,
const JavaParamRef<jobject>& jcallback) {} const JavaParamRef<jobject>& jcallback) {
std::string tile_id = ConvertJavaStringToUTF8(env, jid);
tile_service_->GetVisuals(
tile_id, base::BindOnce(&RunGeVisualsCallback,
ScopedJavaGlobalRef<jobject>(jcallback)));
}
} // namespace upboarding } // namespace upboarding
...@@ -26,6 +26,8 @@ source_set("internal") { ...@@ -26,6 +26,8 @@ source_set("internal") {
"store.h", "store.h",
"tile_info_fetcher.cc", "tile_info_fetcher.cc",
"tile_info_fetcher.h", "tile_info_fetcher.h",
"tile_service_impl.cc",
"tile_service_impl.h",
] ]
deps = [ deps = [
......
// 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/upboarding/query_tiles/internal/tile_service_impl.h"
#include "ui/gfx/image/image.h"
namespace upboarding {
TileServiceImpl::TileServiceImpl(image_fetcher::ImageFetcher* image_fetcher) {}
TileServiceImpl::~TileServiceImpl() = default;
void TileServiceImpl::GetQueryTiles(GetTilesCallback callback) {
NOTIMPLEMENTED();
}
void TileServiceImpl::GetVisuals(const std::string& tile_id,
VisualsCallback callback) {
NOTIMPLEMENTED();
}
} // namespace upboarding
// 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_UPBOARDING_QUERY_TILES_INTERNAL_TILE_SERVICE_IMPL_H_
#define CHROME_BROWSER_UPBOARDING_QUERY_TILES_INTERNAL_TILE_SERVICE_IMPL_H_
#include "base/memory/weak_ptr.h"
#include "chrome/browser/upboarding/query_tiles/tile_service.h"
#include "components/image_fetcher/core/image_fetcher.h"
namespace upboarding {
class TileServiceImpl : public TileService {
public:
explicit TileServiceImpl(image_fetcher::ImageFetcher* image_fetcher);
~TileServiceImpl() override;
// Disallow copy/assign.
TileServiceImpl(const TileServiceImpl& other) = delete;
TileServiceImpl& operator=(const TileServiceImpl& other) = delete;
private:
// TileService implementation.
void GetQueryTiles(GetTilesCallback callback) override;
void GetVisuals(const std::string& tile_id,
VisualsCallback callback) override;
base::WeakPtrFactory<TileServiceImpl> weak_ptr_factory_{this};
};
} // namespace upboarding
#endif // CHROME_BROWSER_UPBOARDING_QUERY_TILES_INTERNAL_TILE_SERVICE_IMPL_H_
...@@ -53,6 +53,9 @@ struct QueryTileEntry { ...@@ -53,6 +53,9 @@ struct QueryTileEntry {
// A set contains all ids of it's children tiles. // A set contains all ids of it's children tiles.
std::set<std::string> children; std::set<std::string> children;
// TODO(shaktisahu): Merge children into subtiles.
std::vector<QueryTileEntry*> subtiles;
}; };
} // namespace upboarding } // namespace upboarding
......
...@@ -5,20 +5,40 @@ ...@@ -5,20 +5,40 @@
#ifndef CHROME_BROWSER_UPBOARDING_QUERY_TILES_TILE_SERVICE_H_ #ifndef CHROME_BROWSER_UPBOARDING_QUERY_TILES_TILE_SERVICE_H_
#define CHROME_BROWSER_UPBOARDING_QUERY_TILES_TILE_SERVICE_H_ #define CHROME_BROWSER_UPBOARDING_QUERY_TILES_TILE_SERVICE_H_
#include "base/macros.h" #include <string>
#include <vector>
#include "base/callback.h"
#include "base/supports_user_data.h" #include "base/supports_user_data.h"
#include "chrome/browser/upboarding/query_tiles/query_tile_entry.h"
#include "components/keyed_service/core/keyed_service.h" #include "components/keyed_service/core/keyed_service.h"
namespace gfx {
class Image;
} // namespace gfx
namespace upboarding { namespace upboarding {
using GetTilesCallback =
base::OnceCallback<void(const std::vector<QueryTileEntry*>&)>;
using VisualsCallback = base::OnceCallback<void(const gfx::Image&)>;
// The central class on chrome client responsible for fetching, storing, // The central class on chrome client responsible for fetching, storing,
// managing, and displaying query tiles in chrome. // managing, and displaying query tiles in chrome.
class TileService : public KeyedService, public base::SupportsUserData { class TileService : public KeyedService, public base::SupportsUserData {
public: public:
// TODO(shaktisahu): Add methods. // Called to retrieve all the tiles.
virtual void GetQueryTiles(GetTilesCallback callback) = 0;
// Called to retrieve thumbnail for the given tile id.
virtual void GetVisuals(const std::string& tile_id,
VisualsCallback callback) = 0;
TileService() = default;
~TileService() override = default;
private: TileService(const TileService&) = delete;
DISALLOW_COPY_AND_ASSIGN(TileService); TileService& operator=(const TileService&) = delete;
}; };
} // namespace upboarding } // namespace upboarding
......
...@@ -4,14 +4,14 @@ ...@@ -4,14 +4,14 @@
#include "chrome/browser/upboarding/query_tiles/tile_service_factory_helper.h" #include "chrome/browser/upboarding/query_tiles/tile_service_factory_helper.h"
#include "chrome/browser/upboarding/query_tiles/internal/tile_service_impl.h"
#include "components/keyed_service/core/keyed_service.h" #include "components/keyed_service/core/keyed_service.h"
namespace upboarding { namespace upboarding {
std::unique_ptr<KeyedService> CreateTileService( std::unique_ptr<TileService> CreateTileService(
image_fetcher::ImageFetcher* image_fetcher) { image_fetcher::ImageFetcher* image_fetcher) {
// TODO(xingliu): Create TileServiceImpl here. return std::make_unique<TileServiceImpl>(image_fetcher);
return nullptr;
} }
} // namespace upboarding } // namespace upboarding
...@@ -11,11 +11,11 @@ namespace image_fetcher { ...@@ -11,11 +11,11 @@ namespace image_fetcher {
class ImageFetcher; class ImageFetcher;
} // namespace image_fetcher } // namespace image_fetcher
class KeyedService;
namespace upboarding { namespace upboarding {
std::unique_ptr<KeyedService> CreateTileService( class TileService;
std::unique_ptr<TileService> CreateTileService(
image_fetcher::ImageFetcher* image_fetcher); image_fetcher::ImageFetcher* image_fetcher);
} // namespace upboarding } // namespace upboarding
......
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