run executable
This commit is contained in:
parent
592abe5b0d
commit
7167f0c03d
@ -166,6 +166,7 @@
|
|||||||
<activity android:name=".ActivityManageActionVibrate" />
|
<activity android:name=".ActivityManageActionVibrate" />
|
||||||
<activity android:name=".ActivityManageActionControlMedia" />
|
<activity android:name=".ActivityManageActionControlMedia" />
|
||||||
<activity android:name=".ActivityManageActionSendBroadcast" />
|
<activity android:name=".ActivityManageActionSendBroadcast" />
|
||||||
|
<activity android:name=".ActivityManageActionRunExecutable" />
|
||||||
<activity
|
<activity
|
||||||
android:name=".ActivityMainTabLayout"
|
android:name=".ActivityMainTabLayout"
|
||||||
android:launchMode="singleTask">
|
android:launchMode="singleTask">
|
||||||
|
@ -164,6 +164,7 @@
|
|||||||
<activity android:name=".ActivityManageActionVibrate" />
|
<activity android:name=".ActivityManageActionVibrate" />
|
||||||
<activity android:name=".ActivityManageActionControlMedia" />
|
<activity android:name=".ActivityManageActionControlMedia" />
|
||||||
<activity android:name=".ActivityManageActionSendBroadcast" />
|
<activity android:name=".ActivityManageActionSendBroadcast" />
|
||||||
|
<activity android:name=".ActivityManageActionRunExecutable" />
|
||||||
<activity
|
<activity
|
||||||
android:name=".ActivityMainTabLayout"
|
android:name=".ActivityMainTabLayout"
|
||||||
android:launchMode="singleTask">
|
android:launchMode="singleTask">
|
||||||
|
@ -151,6 +151,7 @@
|
|||||||
<activity android:name=".ActivityManageActionVibrate" />
|
<activity android:name=".ActivityManageActionVibrate" />
|
||||||
<activity android:name=".ActivityManageActionControlMedia" />
|
<activity android:name=".ActivityManageActionControlMedia" />
|
||||||
<activity android:name=".ActivityManageActionSendBroadcast" />
|
<activity android:name=".ActivityManageActionSendBroadcast" />
|
||||||
|
<activity android:name=".ActivityManageActionRunExecutable" />
|
||||||
<activity
|
<activity
|
||||||
android:name=".ActivityMainTabLayout"
|
android:name=".ActivityMainTabLayout"
|
||||||
android:launchMode="singleTask">
|
android:launchMode="singleTask">
|
||||||
|
@ -52,6 +52,7 @@ public class Action
|
|||||||
createNotification,
|
createNotification,
|
||||||
closeNotification,
|
closeNotification,
|
||||||
sendBroadcast,
|
sendBroadcast,
|
||||||
|
runExecutable,
|
||||||
sendTextMessage;
|
sendTextMessage;
|
||||||
|
|
||||||
public String getFullName(Context context)
|
public String getFullName(Context context)
|
||||||
@ -124,6 +125,8 @@ public class Action
|
|||||||
return context.getResources().getString(R.string.closeNotifications);
|
return context.getResources().getString(R.string.closeNotifications);
|
||||||
case sendBroadcast:
|
case sendBroadcast:
|
||||||
return context.getResources().getString(R.string.sendBroadcast);
|
return context.getResources().getString(R.string.sendBroadcast);
|
||||||
|
case runExecutable:
|
||||||
|
return context.getResources().getString(R.string.runExecutable);
|
||||||
default:
|
default:
|
||||||
return "Unknown";
|
return "Unknown";
|
||||||
}
|
}
|
||||||
@ -267,6 +270,9 @@ public class Action
|
|||||||
case sendBroadcast:
|
case sendBroadcast:
|
||||||
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.sendBroadcast));
|
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.sendBroadcast));
|
||||||
break;
|
break;
|
||||||
|
case runExecutable:
|
||||||
|
returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.runExecutable));
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
returnString.append(action.toString());
|
returnString.append(action.toString());
|
||||||
}
|
}
|
||||||
@ -545,6 +551,9 @@ public class Action
|
|||||||
case sendBroadcast:
|
case sendBroadcast:
|
||||||
Actions.sendBroadcast(context, this.getParameter2());
|
Actions.sendBroadcast(context, this.getParameter2());
|
||||||
break;
|
break;
|
||||||
|
case runExecutable:
|
||||||
|
Actions.runExecutable(context, this.getParameter1(), this.getParameter2());
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
Miscellaneous.logEvent("w", "Action", context.getResources().getString(R.string.unknownActionSpecified), 3);
|
Miscellaneous.logEvent("w", "Action", context.getResources().getString(R.string.unknownActionSpecified), 3);
|
||||||
break;
|
break;
|
||||||
|
@ -1907,4 +1907,9 @@ public class Actions
|
|||||||
return android.provider.Settings.Global.getInt(context.getContentResolver(), android.provider.Settings.Global.AIRPLANE_MODE_ON, 0) != 0;
|
return android.provider.Settings.Global.getInt(context.getContentResolver(), android.provider.Settings.Global.AIRPLANE_MODE_ON, 0) != 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean runExecutable(Context context, boolean runAsRoot, String pathAndParams)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
@ -0,0 +1,114 @@
|
|||||||
|
package com.jens.automation2;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.net.Uri;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.view.View;
|
||||||
|
import android.widget.Button;
|
||||||
|
import android.widget.CheckBox;
|
||||||
|
import android.widget.EditText;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
public class ActivityManageActionRunExecutable extends Activity
|
||||||
|
{
|
||||||
|
final static int PICKFILE_RESULT_CODE = 4711;
|
||||||
|
|
||||||
|
CheckBox chkRunExecAsRoot;
|
||||||
|
EditText etRunExecutablePath, etRunExecutableParameters;
|
||||||
|
Button bChooseExecutable, bSaveActionRunExec;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(@Nullable Bundle savedInstanceState)
|
||||||
|
{
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
setContentView(R.layout.activity_manage_action_run_executable);
|
||||||
|
|
||||||
|
chkRunExecAsRoot = (CheckBox)findViewById(R.id.chkRunExecAsRoot);
|
||||||
|
etRunExecutablePath = (EditText) findViewById(R.id.etRunExecutablePath);
|
||||||
|
etRunExecutableParameters = (EditText) findViewById(R.id.etRunExecutableParameters);
|
||||||
|
bChooseExecutable = (Button) findViewById(R.id.bChooseExecutable);
|
||||||
|
bSaveActionRunExec = (Button) findViewById(R.id.bSaveActionRunExec);
|
||||||
|
|
||||||
|
bChooseExecutable.setOnClickListener(new View.OnClickListener()
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public void onClick(View v)
|
||||||
|
{
|
||||||
|
//Need to check for storage permissions
|
||||||
|
Intent chooseFile = new Intent(Intent.ACTION_GET_CONTENT);
|
||||||
|
chooseFile.setType("*/*");
|
||||||
|
chooseFile = Intent.createChooser(chooseFile, getResources().getString(R.string.selectSoundFile));
|
||||||
|
startActivityForResult(chooseFile, PICKFILE_RESULT_CODE);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
bSaveActionRunExec.setOnClickListener(new View.OnClickListener()
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public void onClick(View view)
|
||||||
|
{
|
||||||
|
saveExecSettings();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void saveExecSettings()
|
||||||
|
{
|
||||||
|
if(etRunExecutablePath.getText().toString() == null || etRunExecutablePath.getText().toString().length() == 0)
|
||||||
|
{
|
||||||
|
Toast.makeText(ActivityManageActionRunExecutable.this, getResources().getString(R.string.selectValidExecutable), Toast.LENGTH_LONG).show();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
File executableFile = new File(etRunExecutablePath.getText().toString());
|
||||||
|
if(!executableFile.exists())
|
||||||
|
{
|
||||||
|
Toast.makeText(ActivityManageActionRunExecutable.this, getResources().getString(R.string.fileDoesNotExist), Toast.LENGTH_LONG).show();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(!chkRunExecAsRoot.isChecked() && !executableFile.canExecute())
|
||||||
|
{
|
||||||
|
Toast.makeText(ActivityManageActionRunExecutable.this, getResources().getString(R.string.fileNotExecutable), Toast.LENGTH_LONG).show();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Intent returnData = new Intent();
|
||||||
|
returnData.putExtra("actionParameter1", chkRunExecAsRoot.isChecked());
|
||||||
|
|
||||||
|
if(etRunExecutableParameters.getText() != null && !StringUtils.isEmpty(etRunExecutableParameters.getText().toString()))
|
||||||
|
returnData.putExtra("actionParameter2", etRunExecutablePath.getText().toString() + Action.actionParameter2Split + etRunExecutableParameters.getText().toString());
|
||||||
|
else
|
||||||
|
returnData.putExtra("actionParameter2", etRunExecutablePath.getText().toString());
|
||||||
|
|
||||||
|
setResult(RESULT_OK, returnData);
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onActivityResult(int requestCode, int resultCode, Intent data)
|
||||||
|
{
|
||||||
|
super.onActivityResult(requestCode, resultCode, data);
|
||||||
|
|
||||||
|
if(resultCode == RESULT_OK)
|
||||||
|
{
|
||||||
|
if(requestCode == PICKFILE_RESULT_CODE)
|
||||||
|
{
|
||||||
|
Uri fileUri = data.getData();
|
||||||
|
String filePath = CompensateCrappyAndroidPaths.getPath(ActivityManageActionRunExecutable.this, fileUri);
|
||||||
|
etRunExecutablePath.setText(filePath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -15,8 +15,6 @@ public class ActivityManageActionSpeakText extends Activity
|
|||||||
private Button bSaveSpeakText;
|
private Button bSaveSpeakText;
|
||||||
private EditText etSpeakText;
|
private EditText etSpeakText;
|
||||||
|
|
||||||
// private String existingUrl = "";
|
|
||||||
|
|
||||||
public static boolean edit = false;
|
public static boolean edit = false;
|
||||||
public static Action resultingAction = null;
|
public static Action resultingAction = null;
|
||||||
|
|
||||||
@ -27,7 +25,7 @@ public class ActivityManageActionSpeakText extends Activity
|
|||||||
this.setContentView(R.layout.activity_manage_action_speak_text);
|
this.setContentView(R.layout.activity_manage_action_speak_text);
|
||||||
|
|
||||||
etSpeakText = (EditText)findViewById(R.id.etTextToSpeak);
|
etSpeakText = (EditText)findViewById(R.id.etTextToSpeak);
|
||||||
bSaveSpeakText = (Button)findViewById(R.id.bSaveTriggerUrl);
|
bSaveSpeakText = (Button)findViewById(R.id.bSaveSpeakText);
|
||||||
bSaveSpeakText.setOnClickListener(new OnClickListener()
|
bSaveSpeakText.setOnClickListener(new OnClickListener()
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
|
@ -47,7 +47,7 @@ public class ActivityManageActionTriggerUrl extends Activity
|
|||||||
chkTriggerUrlUseAuthentication = (CheckBox)findViewById(R.id.chkTriggerUrlUseAuthentication);
|
chkTriggerUrlUseAuthentication = (CheckBox)findViewById(R.id.chkTriggerUrlUseAuthentication);
|
||||||
lvTriggerUrlPostParameters = (ListView)findViewById(R.id.lvTriggerUrlPostParameters);
|
lvTriggerUrlPostParameters = (ListView)findViewById(R.id.lvTriggerUrlPostParameters);
|
||||||
tlTriggerUrlAuthentication = (TableLayout)findViewById(R.id.tlTriggerUrlAuthentication);
|
tlTriggerUrlAuthentication = (TableLayout)findViewById(R.id.tlTriggerUrlAuthentication);
|
||||||
bSaveTriggerUrl = (Button)findViewById(R.id.bSaveTriggerUrl);
|
bSaveTriggerUrl = (Button)findViewById(R.id.bSaveSpeakText);
|
||||||
bSaveTriggerUrl.setOnClickListener(new OnClickListener()
|
bSaveTriggerUrl.setOnClickListener(new OnClickListener()
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
|
@ -123,6 +123,8 @@ public class ActivityManageRule extends Activity
|
|||||||
final static int requestCodeTriggerBroadcastReceivedEdit = 810;
|
final static int requestCodeTriggerBroadcastReceivedEdit = 810;
|
||||||
final static int requestCodeActionSendBroadcastAdd = 811;
|
final static int requestCodeActionSendBroadcastAdd = 811;
|
||||||
final static int requestCodeActionSendBroadcastEdit = 812;
|
final static int requestCodeActionSendBroadcastEdit = 812;
|
||||||
|
final static int requestCodeActionRunExecutableAdd = 813;
|
||||||
|
final static int requestCodeActionRunExecutableEdit = 814;
|
||||||
|
|
||||||
public static ActivityManageRule getInstance()
|
public static ActivityManageRule getInstance()
|
||||||
{
|
{
|
||||||
@ -382,6 +384,12 @@ public class ActivityManageRule extends Activity
|
|||||||
activityEditSendBroadcastIntent.putExtra(intentNameActionParameter2, a.getParameter2());
|
activityEditSendBroadcastIntent.putExtra(intentNameActionParameter2, a.getParameter2());
|
||||||
startActivityForResult(activityEditSendBroadcastIntent, requestCodeActionSendBroadcastEdit);
|
startActivityForResult(activityEditSendBroadcastIntent, requestCodeActionSendBroadcastEdit);
|
||||||
break;
|
break;
|
||||||
|
case runExecutable:
|
||||||
|
Intent activityEditRunExecutableIntent = new Intent(ActivityManageRule.this, ActivityManageActionRunExecutable.class);
|
||||||
|
activityEditRunExecutableIntent.putExtra(intentNameActionParameter1, a.getParameter1());
|
||||||
|
activityEditRunExecutableIntent.putExtra(intentNameActionParameter2, a.getParameter2());
|
||||||
|
startActivityForResult(activityEditRunExecutableIntent, requestCodeActionRunExecutableEdit);
|
||||||
|
break;
|
||||||
case controlMediaPlayback:
|
case controlMediaPlayback:
|
||||||
Intent activityEditControlMediaIntent = new Intent(ActivityManageRule.this, ActivityManageActionControlMedia.class);
|
Intent activityEditControlMediaIntent = new Intent(ActivityManageRule.this, ActivityManageActionControlMedia.class);
|
||||||
activityEditControlMediaIntent.putExtra(ActivityManageRule.intentNameActionParameter2, a.getParameter2());
|
activityEditControlMediaIntent.putExtra(ActivityManageRule.intentNameActionParameter2, a.getParameter2());
|
||||||
@ -1489,6 +1497,17 @@ public class ActivityManageRule extends Activity
|
|||||||
this.refreshActionList();
|
this.refreshActionList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if(requestCode == requestCodeActionRunExecutableAdd)
|
||||||
|
{
|
||||||
|
if(resultCode == RESULT_OK)
|
||||||
|
{
|
||||||
|
newAction.setParentRule(ruleToEdit);
|
||||||
|
newAction.setParameter1(data.getBooleanExtra(intentNameActionParameter1, false));
|
||||||
|
newAction.setParameter2(data.getStringExtra(intentNameActionParameter2));
|
||||||
|
ruleToEdit.getActionSet().add(newAction);
|
||||||
|
this.refreshActionList();
|
||||||
|
}
|
||||||
|
}
|
||||||
else if(requestCode == requestCodeActionControlMediaAdd)
|
else if(requestCode == requestCodeActionControlMediaAdd)
|
||||||
{
|
{
|
||||||
if(resultCode == RESULT_OK)
|
if(resultCode == RESULT_OK)
|
||||||
@ -1547,6 +1566,21 @@ public class ActivityManageRule extends Activity
|
|||||||
this.refreshActionList();
|
this.refreshActionList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if(requestCode == requestCodeActionRunExecutableEdit)
|
||||||
|
{
|
||||||
|
if(resultCode == RESULT_OK)
|
||||||
|
{
|
||||||
|
ruleToEdit.getActionSet().get(editIndex).setParentRule(ruleToEdit);
|
||||||
|
|
||||||
|
if(data.hasExtra(intentNameActionParameter1) && data.hasExtra(intentNameActionParameter2))
|
||||||
|
{
|
||||||
|
ruleToEdit.getActionSet().get(editIndex).setParameter1(data.getBooleanExtra(intentNameActionParameter1, false));
|
||||||
|
ruleToEdit.getActionSet().get(editIndex).setParameter2(data.getStringExtra(intentNameActionParameter2));
|
||||||
|
}
|
||||||
|
|
||||||
|
this.refreshActionList();
|
||||||
|
}
|
||||||
|
}
|
||||||
else if(requestCode == requestCodeActionControlMediaEdit)
|
else if(requestCode == requestCodeActionControlMediaEdit)
|
||||||
{
|
{
|
||||||
if(resultCode == RESULT_OK)
|
if(resultCode == RESULT_OK)
|
||||||
@ -1759,6 +1793,8 @@ public class ActivityManageRule extends Activity
|
|||||||
items.add(new Item(typesLong[i].toString(), R.drawable.notification));
|
items.add(new Item(typesLong[i].toString(), R.drawable.notification));
|
||||||
else if(types[i].toString().equals(Action_Enum.sendBroadcast.toString()))
|
else if(types[i].toString().equals(Action_Enum.sendBroadcast.toString()))
|
||||||
items.add(new Item(typesLong[i].toString(), R.drawable.satellite));
|
items.add(new Item(typesLong[i].toString(), R.drawable.satellite));
|
||||||
|
else if(types[i].toString().equals(Action_Enum.runExecutable.toString()))
|
||||||
|
items.add(new Item(typesLong[i].toString(), R.drawable.script));
|
||||||
else if(types[i].toString().equals(Action_Enum.sendTextMessage.toString()))
|
else if(types[i].toString().equals(Action_Enum.sendTextMessage.toString()))
|
||||||
{
|
{
|
||||||
// if(ActivityPermissions.isPermissionDeclaratedInManifest(ActivityManageSpecificRule.this, "android.permission.SEND_SMS") && !Miscellaneous.isGooglePlayInstalled(ActivityManageSpecificRule.this))
|
// if(ActivityPermissions.isPermissionDeclaratedInManifest(ActivityManageSpecificRule.this, "android.permission.SEND_SMS") && !Miscellaneous.isGooglePlayInstalled(ActivityManageSpecificRule.this))
|
||||||
@ -1927,6 +1963,12 @@ public class ActivityManageRule extends Activity
|
|||||||
Intent intent = new Intent(ActivityManageRule.this, ActivityManageActionSendBroadcast.class);
|
Intent intent = new Intent(ActivityManageRule.this, ActivityManageActionSendBroadcast.class);
|
||||||
startActivityForResult(intent, requestCodeActionSendBroadcastAdd);
|
startActivityForResult(intent, requestCodeActionSendBroadcastAdd);
|
||||||
}
|
}
|
||||||
|
else if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.runExecutable.toString()))
|
||||||
|
{
|
||||||
|
newAction.setAction(Action_Enum.runExecutable);
|
||||||
|
Intent intent = new Intent(ActivityManageRule.this, ActivityManageActionRunExecutable.class);
|
||||||
|
startActivityForResult(intent, requestCodeActionRunExecutableAdd);
|
||||||
|
}
|
||||||
else if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.controlMediaPlayback.toString()))
|
else if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.controlMediaPlayback.toString()))
|
||||||
{
|
{
|
||||||
newAction.setAction(Action_Enum.controlMediaPlayback);
|
newAction.setAction(Action_Enum.controlMediaPlayback);
|
||||||
|
BIN
app/src/main/res/drawable/script.png
Normal file
BIN
app/src/main/res/drawable/script.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 679 B |
@ -0,0 +1,112 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_margin="@dimen/default_margin" >
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="vertical" >
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_span="2"
|
||||||
|
android:textSize="25dp"
|
||||||
|
android:textStyle="bold"
|
||||||
|
android:layout_marginBottom="@dimen/default_margin"
|
||||||
|
android:text="@string/runExecutable" />
|
||||||
|
|
||||||
|
<TableLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:stretchColumns="1"
|
||||||
|
android:shrinkColumns="1">
|
||||||
|
|
||||||
|
<TableRow>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/runAsRoot" />
|
||||||
|
|
||||||
|
<CheckBox
|
||||||
|
android:id="@+id/chkRunExecAsRoot"
|
||||||
|
android:layout_marginBottom="10dp"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content" >
|
||||||
|
|
||||||
|
</CheckBox>
|
||||||
|
|
||||||
|
</TableRow>
|
||||||
|
|
||||||
|
<TableRow>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/path" />
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/etRunExecutablePath"
|
||||||
|
android:layout_marginBottom="10dp"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:ems="10"
|
||||||
|
android:inputType="textUri" >
|
||||||
|
|
||||||
|
</EditText>
|
||||||
|
|
||||||
|
</TableRow>
|
||||||
|
|
||||||
|
<TableRow>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginRight="@dimen/default_margin"
|
||||||
|
android:text="@string/parameters" />
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/etRunExecutableParameters"
|
||||||
|
android:layout_marginBottom="10dp"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:ems="10"
|
||||||
|
android:inputType="text" >
|
||||||
|
|
||||||
|
</EditText>
|
||||||
|
|
||||||
|
</TableRow>
|
||||||
|
</TableLayout>
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/bChooseExecutable"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/chooseExecutable" />
|
||||||
|
|
||||||
|
<ScrollView
|
||||||
|
android:layout_marginTop="@dimen/default_margin"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tvLegend"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="0dip"
|
||||||
|
android:text="@string/urlLegend" />
|
||||||
|
|
||||||
|
</ScrollView>
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/bSaveActionRunExec"
|
||||||
|
android:layout_marginTop="15dp"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/save" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</ScrollView>
|
@ -2,13 +2,22 @@
|
|||||||
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_margin="10dp" >
|
android:layout_margin="@dimen/default_margin" >
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:orientation="vertical" >
|
android:orientation="vertical" >
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_span="2"
|
||||||
|
android:textSize="25dp"
|
||||||
|
android:textStyle="bold"
|
||||||
|
android:layout_marginBottom="@dimen/default_margin"
|
||||||
|
android:text="@string/actionSpeakText" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/tvRuleTitle"
|
android:id="@+id/tvRuleTitle"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
@ -40,7 +49,7 @@
|
|||||||
</ScrollView>
|
</ScrollView>
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
android:id="@+id/bSaveTriggerUrl"
|
android:id="@+id/bSaveSpeakText"
|
||||||
android:layout_marginTop="15dp"
|
android:layout_marginTop="15dp"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
@ -110,7 +110,7 @@
|
|||||||
</ScrollView>
|
</ScrollView>
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
android:id="@+id/bSaveTriggerUrl"
|
android:id="@+id/bSaveSpeakText"
|
||||||
android:layout_marginTop="15dp"
|
android:layout_marginTop="15dp"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
@ -820,4 +820,11 @@
|
|||||||
<string name="enterBroadcast">Enter a broadcast action.</string>
|
<string name="enterBroadcast">Enter a broadcast action.</string>
|
||||||
<string name="broadcastExplanation">This action allows to send a broadcast across the Android OS messaging system. This is not user-visible, but apps who listen for that specific broadcast can respond to it being sent.</string>
|
<string name="broadcastExplanation">This action allows to send a broadcast across the Android OS messaging system. This is not user-visible, but apps who listen for that specific broadcast can respond to it being sent.</string>
|
||||||
<string name="directionStringDoesNotContain">does not contain</string>
|
<string name="directionStringDoesNotContain">does not contain</string>
|
||||||
|
<string name="runExecutable">Run executable</string>
|
||||||
|
<string name="path">Path</string>
|
||||||
|
<string name="parameters">Parameters</string>
|
||||||
|
<string name="chooseExecutable">Choose executable</string>
|
||||||
|
<string name="runAsRoot">Run as root</string>
|
||||||
|
<string name="selectValidExecutable">Select a valid executable file.</string>
|
||||||
|
<string name="fileNotExecutable">The file is not executable.</string>
|
||||||
</resources>
|
</resources>
|
Loading…
Reference in New Issue
Block a user