1 // Copyright 2018 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 package org.chromium.components.search_engines;
5 
6 import org.chromium.base.annotations.CalledByNative;
7 import org.chromium.base.annotations.NativeMethods;
8 
9 import java.util.Locale;
10 
11 /**
12  * Represents object of a search engine. It only caches the native pointer of TemplateURL object
13  * from native side. Any class uses this need to register a {@link TemplateUrlServiceObserver} on
14  * {@link TemplatUrlService} to listen the native changes in case the native pointer is destroyed.
15  */
16 public class TemplateUrl {
17     private final long mTemplateUrlPtr;
18 
19     @CalledByNative
create(long templateUrlPtr)20     private static TemplateUrl create(long templateUrlPtr) {
21         return new TemplateUrl(templateUrlPtr);
22     }
23 
TemplateUrl(long templateUrlPtr)24     protected TemplateUrl(long templateUrlPtr) {
25         mTemplateUrlPtr = templateUrlPtr;
26     }
27 
28     /**
29      * @return The name of the search engine.
30      */
getShortName()31     public String getShortName() {
32         return TemplateUrlJni.get().getShortName(mTemplateUrlPtr);
33     }
34 
35     /**
36      * @return The prepopulated id of the search engine. For predefined engines, this field is a
37      *         non-zero, for custom search engines, it will return 0.
38      */
getPrepopulatedId()39     public int getPrepopulatedId() {
40         return TemplateUrlJni.get().getPrepopulatedId(mTemplateUrlPtr);
41     }
42 
43     /**
44      * @return Whether a search engine is prepopulated or created by policy.
45      */
getIsPrepopulated()46     public boolean getIsPrepopulated() {
47         return TemplateUrlJni.get().isPrepopulatedOrCreatedByPolicy(mTemplateUrlPtr);
48     }
49 
50     /**
51      * @return The keyword of the search engine.
52      */
getKeyword()53     public String getKeyword() {
54         return TemplateUrlJni.get().getKeyword(mTemplateUrlPtr);
55     }
56 
57     /**
58      * @return The last time used this search engine. If a search engine hasn't been used, it will
59      *         return 0.
60      */
getLastVisitedTime()61     public long getLastVisitedTime() {
62         return TemplateUrlJni.get().getLastVisitedTime(mTemplateUrlPtr);
63     }
64 
65     /**
66      * @return The template URL of the search engine. The format can be looked up in
67      *         prepopulated_engines.json.
68      */
getURL()69     public String getURL() {
70         return TemplateUrlJni.get().getURL(mTemplateUrlPtr);
71     }
72 
73     @Override
equals(Object other)74     public boolean equals(Object other) {
75         if (!(other instanceof TemplateUrl)) return false;
76         TemplateUrl otherTemplateUrl = (TemplateUrl) other;
77         return mTemplateUrlPtr == otherTemplateUrl.mTemplateUrlPtr;
78     }
79 
80     @Override
toString()81     public String toString() {
82         return String.format(Locale.US,
83                 "TemplateURL -- keyword: %s, short name: %s, "
84                         + "prepopulated: %b",
85                 getKeyword(), getShortName(), getIsPrepopulated());
86     }
87 
88     @NativeMethods
89     public interface Natives {
getShortName(long templateUrlPtr)90         String getShortName(long templateUrlPtr);
getKeyword(long templateUrlPtr)91         String getKeyword(long templateUrlPtr);
isPrepopulatedOrCreatedByPolicy(long templateUrlPtr)92         boolean isPrepopulatedOrCreatedByPolicy(long templateUrlPtr);
getLastVisitedTime(long templateUrlPtr)93         long getLastVisitedTime(long templateUrlPtr);
getPrepopulatedId(long templateUrlPtr)94         int getPrepopulatedId(long templateUrlPtr);
getURL(long templateUrlPtr)95         String getURL(long templateUrlPtr);
96     }
97 }
98