Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / chrome / android / java / src / org / chromium / chrome / browser / LogoBridge.java
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 package org.chromium.chrome.browser;
6
7 import android.graphics.Bitmap;
8
9 import org.chromium.base.CalledByNative;
10 import org.chromium.chrome.browser.profiles.Profile;
11
12 /**
13  * Provides access to the search provider's logo via the C++ LogoService.
14  */
15 public class LogoBridge {
16
17     /**
18      * A logo for a search provider (e.g. the Yahoo! logo or Google doodle).
19      */
20     public static class Logo {
21         /**
22          * The logo image. Non-null.
23          */
24         public final Bitmap image;
25
26         /**
27          * The URL to navigate to when the user clicks on the logo. May be null.
28          */
29         public final String onClickUrl;
30
31         /**
32          * The accessibility text describing the logo. May be null.
33          */
34         public final String altText;
35
36         public Logo(Bitmap image, String onClickUrl, String altText) {
37             this.image = image;
38             this.onClickUrl = onClickUrl;
39             this.altText = altText;
40         }
41     }
42
43     /**
44      * Observer for receiving the logo when it's available.
45      */
46     public interface LogoObserver {
47         /**
48          * Called when the cached or fresh logo is available. This may be called up to two times,
49          * once with the cached logo and once with a freshly downloaded logo.
50          *
51          * @param logo The search provider's logo.
52          * @param fromCache Whether the logo was loaded from the cache.
53          */
54         @CalledByNative("LogoObserver")
55         public void onLogoAvailable(Logo logo, boolean fromCache);
56     }
57
58     private long mNativeLogoBridge;
59
60     /**
61      * Creates a LogoBridge for getting the logo of the default search provider.
62      *
63      * @param profile Profile of the tab that will show the logo.
64      */
65     public LogoBridge(Profile profile) {
66         mNativeLogoBridge = nativeInit(profile);
67     }
68
69     /**
70      * Cleans up the C++ side of this class. After calling this, LogoObservers passed to
71      * getCurrentLogo() will no longer receive updates.
72      */
73     public void destroy() {
74         assert mNativeLogoBridge != 0;
75         nativeDestroy(mNativeLogoBridge);
76         mNativeLogoBridge = 0;
77     }
78
79     /**
80      * Gets the current logo for the default search provider.
81      *
82      * @param logoObserver The observer to receive the cached and/or fresh logos when they're
83      *                     available. logoObserver.onLogoAvailable() may be called synchronously if
84      *                     the cached logo is already available.
85      */
86     public void getCurrentLogo(LogoObserver logoObserver) {
87         nativeGetCurrentLogo(mNativeLogoBridge, logoObserver);
88     }
89
90     @Override
91     protected void finalize() {
92         // Ensure that destroy() was called.
93         assert mNativeLogoBridge == 0;
94     }
95
96     @CalledByNative
97     private static Logo createLogo(Bitmap image, String onClickUrl, String altText) {
98         return new Logo(image, onClickUrl, altText);
99     }
100
101     private native long nativeInit(Profile profile);
102     private native void nativeGetCurrentLogo(long nativeLogoBridge, LogoObserver logoObserver);
103     private native void nativeDestroy(long nativeLogoBridge);
104 }