Home | History | Annotate | Download | only in android_scripting
      1 /*
      2  * Copyright (C) 2016 Google Inc.
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
      5  * use this file except in compliance with the License. You may obtain a copy of
      6  * the License at
      7  *
      8  * http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
     12  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
     13  * License for the specific language governing permissions and limitations under
     14  * the License.
     15  */
     16 
     17 package com.googlecode.android_scripting;
     18 
     19 import android.app.PendingIntent;
     20 import android.content.ComponentName;
     21 import android.content.Context;
     22 import android.content.Intent;
     23 import android.os.Parcelable;
     24 
     25 import com.googlecode.android_scripting.interpreter.Interpreter;
     26 
     27 import java.io.File;
     28 
     29 public class IntentBuilders {
     30   /** An arbitrary value that is used to identify pending intents for executing scripts. */
     31   private static final int EXECUTE_SCRIPT_REQUEST_CODE = 0x12f412a;
     32 
     33   private IntentBuilders() {
     34     // Utility class.
     35   }
     36 
     37   public static Intent buildTriggerServiceIntent() {
     38     Intent intent = new Intent();
     39     intent.setComponent(Constants.TRIGGER_SERVICE_COMPONENT_NAME);
     40     return intent;
     41   }
     42 
     43   /**
     44    * Builds an intent that will launch a script in the background.
     45    *
     46    * @param script
     47    *          the script to launch
     48    * @return the intent that will launch the script
     49    */
     50   public static Intent buildStartInBackgroundIntent(File script) {
     51     final ComponentName componentName = Constants.SL4A_SERVICE_LAUNCHER_COMPONENT_NAME;
     52     Intent intent = new Intent();
     53     intent.setComponent(componentName);
     54     intent.setAction(Constants.ACTION_LAUNCH_BACKGROUND_SCRIPT);
     55     intent.putExtra(Constants.EXTRA_SCRIPT_PATH, script.getAbsolutePath());
     56     return intent;
     57   }
     58 
     59   /**
     60    * Builds an intent that launches a script in a terminal.
     61    *
     62    * @param script
     63    *          the script to launch
     64    * @return the intent that will launch the script
     65    */
     66   public static Intent buildStartInTerminalIntent(File script) {
     67     final ComponentName componentName = Constants.SL4A_SERVICE_LAUNCHER_COMPONENT_NAME;
     68     Intent intent = new Intent();
     69     intent.setComponent(componentName);
     70     intent.setAction(Constants.ACTION_LAUNCH_FOREGROUND_SCRIPT);
     71     intent.putExtra(Constants.EXTRA_SCRIPT_PATH, script.getAbsolutePath());
     72     return intent;
     73   }
     74 
     75   /**
     76    * Builds an intent that launches an interpreter.
     77    *
     78    * @param interpreterName
     79    *          the interpreter to launch
     80    * @return the intent that will launch the interpreter
     81    */
     82   public static Intent buildStartInterpreterIntent(String interpreterName) {
     83     final ComponentName componentName = Constants.SL4A_SERVICE_LAUNCHER_COMPONENT_NAME;
     84     Intent intent = new Intent();
     85     intent.setComponent(componentName);
     86     intent.setAction(Constants.ACTION_LAUNCH_INTERPRETER);
     87     intent.putExtra(Constants.EXTRA_INTERPRETER_NAME, interpreterName);
     88     return intent;
     89   }
     90 
     91   /**
     92    * Builds an intent that creates a shortcut to launch the provided interpreter.
     93    *
     94    * @param interpreter
     95    *          the interpreter to link to
     96    * @param iconResource
     97    *          the icon resource to associate with the shortcut
     98    * @return the intent that will create the shortcut
     99    */
    100   public static Intent buildInterpreterShortcutIntent(Interpreter interpreter,
    101       Parcelable iconResource) {
    102     Intent intent = new Intent();
    103     intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT,
    104         buildStartInterpreterIntent(interpreter.getName()));
    105     intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, interpreter.getNiceName());
    106     intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconResource);
    107     return intent;
    108   }
    109 
    110   /**
    111    * Builds an intent that creates a shortcut to launch the provided script in the background.
    112    *
    113    * @param script
    114    *          the script to link to
    115    * @param iconResource
    116    *          the icon resource to associate with the shortcut
    117    * @return the intent that will create the shortcut
    118    */
    119   public static Intent buildBackgroundShortcutIntent(File script, Parcelable iconResource) {
    120     Intent intent = new Intent();
    121     intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, buildStartInBackgroundIntent(script));
    122     intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, script.getName());
    123     intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconResource);
    124     return intent;
    125   }
    126 
    127   /**
    128    * Builds an intent that creates a shortcut to launch the provided script in a terminal.
    129    *
    130    * @param script
    131    *          the script to link to
    132    * @param iconResource
    133    *          the icon resource to associate with the shortcut
    134    * @return the intent that will create the shortcut
    135    */
    136   public static Intent buildTerminalShortcutIntent(File script, Parcelable iconResource) {
    137     Intent intent = new Intent();
    138     intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, buildStartInTerminalIntent(script));
    139     intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, script.getName());
    140     intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconResource);
    141     return intent;
    142   }
    143 
    144   /**
    145    * Creates a pending intent that can be used to start the trigger service.
    146    *
    147    * @param context
    148    *          the context under whose authority to launch the intent
    149    *
    150    * @return {@link PendingIntent} object for running the trigger service
    151    */
    152   public static PendingIntent buildTriggerServicePendingIntent(Context context) {
    153     final Intent intent = buildTriggerServiceIntent();
    154     return PendingIntent.getService(context, EXECUTE_SCRIPT_REQUEST_CODE, intent,
    155         PendingIntent.FLAG_UPDATE_CURRENT);
    156   }
    157 }
    158