xref: /aosp_15_r20/external/libtextclassifier/native/utils/intents/jni-lua.h (revision 993b0882672172b81d12fad7a7ac0c3e5c824a12)
1*993b0882SAndroid Build Coastguard Worker /*
2*993b0882SAndroid Build Coastguard Worker  * Copyright (C) 2018 The Android Open Source Project
3*993b0882SAndroid Build Coastguard Worker  *
4*993b0882SAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*993b0882SAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*993b0882SAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*993b0882SAndroid Build Coastguard Worker  *
8*993b0882SAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*993b0882SAndroid Build Coastguard Worker  *
10*993b0882SAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*993b0882SAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*993b0882SAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*993b0882SAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*993b0882SAndroid Build Coastguard Worker  * limitations under the License.
15*993b0882SAndroid Build Coastguard Worker  */
16*993b0882SAndroid Build Coastguard Worker 
17*993b0882SAndroid Build Coastguard Worker #ifndef LIBTEXTCLASSIFIER_UTILS_INTENTS_JNI_LUA_H_
18*993b0882SAndroid Build Coastguard Worker #define LIBTEXTCLASSIFIER_UTILS_INTENTS_JNI_LUA_H_
19*993b0882SAndroid Build Coastguard Worker 
20*993b0882SAndroid Build Coastguard Worker #include <map>
21*993b0882SAndroid Build Coastguard Worker #include <vector>
22*993b0882SAndroid Build Coastguard Worker 
23*993b0882SAndroid Build Coastguard Worker #include "utils/base/statusor.h"
24*993b0882SAndroid Build Coastguard Worker #include "utils/i18n/locale.h"
25*993b0882SAndroid Build Coastguard Worker #include "utils/intents/remote-action-template.h"
26*993b0882SAndroid Build Coastguard Worker #include "utils/java/jni-base.h"
27*993b0882SAndroid Build Coastguard Worker #include "utils/java/jni-cache.h"
28*993b0882SAndroid Build Coastguard Worker #include "utils/lua-utils.h"
29*993b0882SAndroid Build Coastguard Worker #include "utils/resources.h"
30*993b0882SAndroid Build Coastguard Worker #include "utils/strings/stringpiece.h"
31*993b0882SAndroid Build Coastguard Worker #include "utils/variant.h"
32*993b0882SAndroid Build Coastguard Worker 
33*993b0882SAndroid Build Coastguard Worker namespace libtextclassifier3 {
34*993b0882SAndroid Build Coastguard Worker 
35*993b0882SAndroid Build Coastguard Worker // An Android specific Lua environment with JNI backed callbacks.
36*993b0882SAndroid Build Coastguard Worker class JniLuaEnvironment : public LuaEnvironment {
37*993b0882SAndroid Build Coastguard Worker  public:
38*993b0882SAndroid Build Coastguard Worker   JniLuaEnvironment(const Resources& resources, const JniCache* jni_cache,
39*993b0882SAndroid Build Coastguard Worker                     const jobject context,
40*993b0882SAndroid Build Coastguard Worker                     const std::vector<Locale>& device_locales);
41*993b0882SAndroid Build Coastguard Worker   // Environment setup.
42*993b0882SAndroid Build Coastguard Worker   bool Initialize();
43*993b0882SAndroid Build Coastguard Worker 
44*993b0882SAndroid Build Coastguard Worker   // Runs an intent generator snippet.
45*993b0882SAndroid Build Coastguard Worker   bool RunIntentGenerator(const std::string& generator_snippet,
46*993b0882SAndroid Build Coastguard Worker                           std::vector<RemoteActionTemplate>* remote_actions);
47*993b0882SAndroid Build Coastguard Worker 
48*993b0882SAndroid Build Coastguard Worker  protected:
49*993b0882SAndroid Build Coastguard Worker   virtual void SetupExternalHook();
50*993b0882SAndroid Build Coastguard Worker   bool PreallocateConstantJniStrings();
51*993b0882SAndroid Build Coastguard Worker 
52*993b0882SAndroid Build Coastguard Worker   int HandleExternalCallback();
53*993b0882SAndroid Build Coastguard Worker   int HandleAndroidCallback();
54*993b0882SAndroid Build Coastguard Worker   int HandleUserRestrictionsCallback();
55*993b0882SAndroid Build Coastguard Worker   int HandleUrlEncode();
56*993b0882SAndroid Build Coastguard Worker   int HandleUrlSchema();
57*993b0882SAndroid Build Coastguard Worker   int HandleHash();
58*993b0882SAndroid Build Coastguard Worker   int HandleFormat();
59*993b0882SAndroid Build Coastguard Worker   int HandleAndroidStringResources();
60*993b0882SAndroid Build Coastguard Worker   int HandleUrlHost();
61*993b0882SAndroid Build Coastguard Worker 
62*993b0882SAndroid Build Coastguard Worker   // Checks and retrieves string resources from the model.
63*993b0882SAndroid Build Coastguard Worker   bool LookupModelStringResource() const;
64*993b0882SAndroid Build Coastguard Worker 
65*993b0882SAndroid Build Coastguard Worker   // Reads and create a RemoteAction result from Lua.
66*993b0882SAndroid Build Coastguard Worker   RemoteActionTemplate ReadRemoteActionTemplateResult() const;
67*993b0882SAndroid Build Coastguard Worker 
68*993b0882SAndroid Build Coastguard Worker   // Reads the extras from the Lua result.
69*993b0882SAndroid Build Coastguard Worker   std::map<std::string, Variant> ReadExtras() const;
70*993b0882SAndroid Build Coastguard Worker 
71*993b0882SAndroid Build Coastguard Worker   // Retrieves user manager if not previously done.
72*993b0882SAndroid Build Coastguard Worker   bool RetrieveUserManager();
73*993b0882SAndroid Build Coastguard Worker 
74*993b0882SAndroid Build Coastguard Worker   // Retrieves system resources if not previously done.
75*993b0882SAndroid Build Coastguard Worker   bool RetrieveSystemResources();
76*993b0882SAndroid Build Coastguard Worker 
77*993b0882SAndroid Build Coastguard Worker   // Parse the url string by using Uri.parse from Java.
78*993b0882SAndroid Build Coastguard Worker   StatusOr<ScopedLocalRef<jobject>> ParseUri(StringPiece url) const;
79*993b0882SAndroid Build Coastguard Worker 
80*993b0882SAndroid Build Coastguard Worker   // Read remote action templates from lua generator.
81*993b0882SAndroid Build Coastguard Worker   int ReadRemoteActionTemplates(std::vector<RemoteActionTemplate>* result);
82*993b0882SAndroid Build Coastguard Worker 
83*993b0882SAndroid Build Coastguard Worker   const Resources& resources_;
84*993b0882SAndroid Build Coastguard Worker   JNIEnv* jenv_;
85*993b0882SAndroid Build Coastguard Worker   const JniCache* jni_cache_;
86*993b0882SAndroid Build Coastguard Worker   const jobject context_;
87*993b0882SAndroid Build Coastguard Worker   std::vector<Locale> device_locales_;
88*993b0882SAndroid Build Coastguard Worker 
89*993b0882SAndroid Build Coastguard Worker   ScopedGlobalRef<jobject> usermanager_;
90*993b0882SAndroid Build Coastguard Worker   // Whether we previously attempted to retrieve the UserManager before.
91*993b0882SAndroid Build Coastguard Worker   bool usermanager_retrieved_;
92*993b0882SAndroid Build Coastguard Worker 
93*993b0882SAndroid Build Coastguard Worker   ScopedGlobalRef<jobject> system_resources_;
94*993b0882SAndroid Build Coastguard Worker   // Whether we previously attempted to retrieve the system resources.
95*993b0882SAndroid Build Coastguard Worker   bool system_resources_resources_retrieved_;
96*993b0882SAndroid Build Coastguard Worker 
97*993b0882SAndroid Build Coastguard Worker   // Cached JNI references for Java strings `string` and `android`.
98*993b0882SAndroid Build Coastguard Worker   ScopedGlobalRef<jstring> string_;
99*993b0882SAndroid Build Coastguard Worker   ScopedGlobalRef<jstring> android_;
100*993b0882SAndroid Build Coastguard Worker };
101*993b0882SAndroid Build Coastguard Worker 
102*993b0882SAndroid Build Coastguard Worker }  // namespace libtextclassifier3
103*993b0882SAndroid Build Coastguard Worker 
104*993b0882SAndroid Build Coastguard Worker #endif  // LIBTEXTCLASSIFIER_UTILS_INTENTS_JNI_LUA_H_
105