19f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li/* 2f04335f899f2cce69f843692a3cb9cec229683c2tturney * Copyright (C) 2017 The Android Open Source Project 39f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li * 4f04335f899f2cce69f843692a3cb9cec229683c2tturney * Licensed under the Apache License, Version 2.0 (the "License"); 5f04335f899f2cce69f843692a3cb9cec229683c2tturney * you may not use this file except in compliance with the License. 6f04335f899f2cce69f843692a3cb9cec229683c2tturney * You may obtain a copy of the License at 79f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li * 8f04335f899f2cce69f843692a3cb9cec229683c2tturney * http://www.apache.org/licenses/LICENSE-2.0 99f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li * 109f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li * Unless required by applicable law or agreed to in writing, software 11f04335f899f2cce69f843692a3cb9cec229683c2tturney * distributed under the License is distributed on an "AS IS" BASIS, 12f04335f899f2cce69f843692a3cb9cec229683c2tturney * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f04335f899f2cce69f843692a3cb9cec229683c2tturney * See the License for the specific language governing permissions and 14f04335f899f2cce69f843692a3cb9cec229683c2tturney * limitations under the License. 159f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li */ 169f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li 179f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Lipackage com.googlecode.android_scripting; 189f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li 199f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Liimport android.content.Context; 209f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li 219f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Liimport java.net.MalformedURLException; 229f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Liimport java.net.URL; 239f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Liimport java.util.ArrayList; 249f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Liimport java.util.Collections; 259f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Liimport java.util.HashMap; 269f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Liimport java.util.List; 279f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Liimport java.util.Map; 289f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li 299f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Lipublic class FeaturedInterpreters { 309f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li private static final Map<String, FeaturedInterpreter> mNameMap = 319f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li new HashMap<String, FeaturedInterpreter>(); 329f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li private static final Map<String, FeaturedInterpreter> mExtensionMap = 339f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li new HashMap<String, FeaturedInterpreter>(); 349f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li 359f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li static { 369f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li try { 379f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li FeaturedInterpreter interpreters[] = 389f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li { 399f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li new FeaturedInterpreter("BeanShell 2.0b4", ".bsh", 409f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li "http://android-scripting.googlecode.com/files/beanshell_for_android_r2.apk"), 419f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li new FeaturedInterpreter("JRuby", ".rb", 429f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li "https://github.com/downloads/ruboto/sl4a_jruby_interpreter/JRubyForAndroid_r2dev.apk"), 439f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li new FeaturedInterpreter("Lua 5.1.4", ".lua", 449f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li "http://android-scripting.googlecode.com/files/lua_for_android_r1.apk"), 459f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li new FeaturedInterpreter("Perl 5.10.1", ".pl", 469f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li "http://android-scripting.googlecode.com/files/perl_for_android_r1.apk"), 479f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li new FeaturedInterpreter("Python 2.6.2", ".py", 489f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li "http://python-for-android.googlecode.com/files/PythonForAndroid_r5.apk"), 499f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li new FeaturedInterpreter("Rhino 1.7R2", ".js", 509f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li "http://android-scripting.googlecode.com/files/rhino_for_android_r2.apk"), 519f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li new FeaturedInterpreter("PHP 5.3.3", ".php", 529f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li "http://php-for-android.googlecode.com/files/phpforandroid_r1.apk") }; 539f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li for (FeaturedInterpreter interpreter : interpreters) { 549f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li mNameMap.put(interpreter.mmName, interpreter); 559f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li mExtensionMap.put(interpreter.mmExtension, interpreter); 569f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li } 579f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li } catch (MalformedURLException e) { 589f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li Log.e(e); 599f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li } 609f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li } 619f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li 629f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li public static List<String> getList() { 639f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li ArrayList<String> list = new ArrayList<String>(mNameMap.keySet()); 649f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li Collections.sort(list); 659f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li return list; 669f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li } 679f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li 689f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li public static URL getUrlForName(String name) { 699f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li if (!mNameMap.containsKey(name)) { 709f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li return null; 719f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li } 729f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li return mNameMap.get(name).mmUrl; 739f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li } 749f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li 759f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li public static String getInterpreterNameForScript(String fileName) { 769f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li String extension = getExtension(fileName); 779f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li if (extension == null || !mExtensionMap.containsKey(extension)) { 789f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li return null; 799f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li } 809f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li return mExtensionMap.get(extension).mmName; 819f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li } 829f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li 839f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li public static boolean isSupported(String fileName) { 849f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li String extension = getExtension(fileName); 859f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li return (extension != null) && (mExtensionMap.containsKey(extension)); 869f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li } 879f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li 889f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li public static int getInterpreterIcon(Context context, String key) { 899f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li String packageName = context.getPackageName(); 909f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li String name = "_icon"; 919f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li if (key.contains(".")) { 929f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li name = key.substring(key.lastIndexOf('.') + 1) + name; 939f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li } else { 949f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li name = key + name; 959f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li } 969f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li return context.getResources().getIdentifier(name, "drawable", packageName); 979f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li } 989f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li 999f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li private static String getExtension(String fileName) { 1009f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li int dotIndex = fileName.lastIndexOf('.'); 1019f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li if (dotIndex == -1) { 1029f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li return null; 1039f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li } 1049f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li return fileName.substring(dotIndex); 1059f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li } 1069f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li 1079f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li private static class FeaturedInterpreter { 1089f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li private final String mmName; 1099f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li private final String mmExtension; 1109f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li private final URL mmUrl; 1119f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li 1129f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li private FeaturedInterpreter(String name, String extension, String url) 1139f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li throws MalformedURLException { 1149f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li mmName = name; 1159f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li mmExtension = extension; 1169f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li mmUrl = new URL(url); 1179f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li } 1189f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li } 1199f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li 1209f32db87b486c93a0ea71eb1781ee45676b8bf8bXin Li} 121