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