1 /*
2  * Copyright (C) 2017 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of 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,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under 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 
IntentBuilders()33   private IntentBuilders() {
34     // Utility class.
35   }
36 
buildTriggerServiceIntent()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    */
buildStartInBackgroundIntent(File script)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    */
buildStartInTerminalIntent(File script)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    */
buildStartInterpreterIntent(String interpreterName)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    */
buildInterpreterShortcutIntent(Interpreter interpreter, Parcelable iconResource)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    */
buildBackgroundShortcutIntent(File script, Parcelable iconResource)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    */
buildTerminalShortcutIntent(File script, Parcelable iconResource)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    */
buildTriggerServicePendingIntent(Context context)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