/* * Copyright (C) 2017 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.googlecode.android_scripting; import android.app.PendingIntent; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.os.Parcelable; import com.googlecode.android_scripting.interpreter.Interpreter; import java.io.File; public class IntentBuilders { /** An arbitrary value that is used to identify pending intents for executing scripts. */ private static final int EXECUTE_SCRIPT_REQUEST_CODE = 0x12f412a; private IntentBuilders() { // Utility class. } public static Intent buildTriggerServiceIntent() { Intent intent = new Intent(); intent.setComponent(Constants.TRIGGER_SERVICE_COMPONENT_NAME); return intent; } /** * Builds an intent that will launch a script in the background. * * @param script * the script to launch * @return the intent that will launch the script */ public static Intent buildStartInBackgroundIntent(File script) { final ComponentName componentName = Constants.SL4A_SERVICE_LAUNCHER_COMPONENT_NAME; Intent intent = new Intent(); intent.setComponent(componentName); intent.setAction(Constants.ACTION_LAUNCH_BACKGROUND_SCRIPT); intent.putExtra(Constants.EXTRA_SCRIPT_PATH, script.getAbsolutePath()); return intent; } /** * Builds an intent that launches a script in a terminal. * * @param script * the script to launch * @return the intent that will launch the script */ public static Intent buildStartInTerminalIntent(File script) { final ComponentName componentName = Constants.SL4A_SERVICE_LAUNCHER_COMPONENT_NAME; Intent intent = new Intent(); intent.setComponent(componentName); intent.setAction(Constants.ACTION_LAUNCH_FOREGROUND_SCRIPT); intent.putExtra(Constants.EXTRA_SCRIPT_PATH, script.getAbsolutePath()); return intent; } /** * Builds an intent that launches an interpreter. * * @param interpreterName * the interpreter to launch * @return the intent that will launch the interpreter */ public static Intent buildStartInterpreterIntent(String interpreterName) { final ComponentName componentName = Constants.SL4A_SERVICE_LAUNCHER_COMPONENT_NAME; Intent intent = new Intent(); intent.setComponent(componentName); intent.setAction(Constants.ACTION_LAUNCH_INTERPRETER); intent.putExtra(Constants.EXTRA_INTERPRETER_NAME, interpreterName); return intent; } /** * Builds an intent that creates a shortcut to launch the provided interpreter. * * @param interpreter * the interpreter to link to * @param iconResource * the icon resource to associate with the shortcut * @return the intent that will create the shortcut */ public static Intent buildInterpreterShortcutIntent(Interpreter interpreter, Parcelable iconResource) { Intent intent = new Intent(); intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, buildStartInterpreterIntent(interpreter.getName())); intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, interpreter.getNiceName()); intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconResource); return intent; } /** * Builds an intent that creates a shortcut to launch the provided script in the background. * * @param script * the script to link to * @param iconResource * the icon resource to associate with the shortcut * @return the intent that will create the shortcut */ public static Intent buildBackgroundShortcutIntent(File script, Parcelable iconResource) { Intent intent = new Intent(); intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, buildStartInBackgroundIntent(script)); intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, script.getName()); intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconResource); return intent; } /** * Builds an intent that creates a shortcut to launch the provided script in a terminal. * * @param script * the script to link to * @param iconResource * the icon resource to associate with the shortcut * @return the intent that will create the shortcut */ public static Intent buildTerminalShortcutIntent(File script, Parcelable iconResource) { Intent intent = new Intent(); intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, buildStartInTerminalIntent(script)); intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, script.getName()); intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconResource); return intent; } /** * Creates a pending intent that can be used to start the trigger service. * * @param context * the context under whose authority to launch the intent * * @return {@link PendingIntent} object for running the trigger service */ public static PendingIntent buildTriggerServicePendingIntent(Context context) { final Intent intent = buildTriggerServiceIntent(); return PendingIntent.getService(context, EXECUTE_SCRIPT_REQUEST_CODE, intent, PendingIntent.FLAG_UPDATE_CURRENT); } }