Further actions for trigger url action
This commit is contained in:
@@ -8,6 +8,7 @@ import android.widget.Toast;
|
|||||||
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
|
import java.net.URLEncoder;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
@@ -689,8 +690,8 @@ public class Action
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
url = Miscellaneous.replaceVariablesInText(url, context);
|
url = Miscellaneous.replaceVariablesInText(url, context);
|
||||||
if(!StringUtils.isEmpty(params))
|
// if(!StringUtils.isEmpty(params))
|
||||||
params = Miscellaneous.replaceVariablesInText(params, context);
|
// params = URLEncoder.encode(Miscellaneous.replaceVariablesInText(params, context), "UTF-8");
|
||||||
|
|
||||||
Actions myAction = new Actions();
|
Actions myAction = new Actions();
|
||||||
|
|
||||||
@@ -745,7 +746,6 @@ public class Action
|
|||||||
httpParams.put(pieces[0], pieces[1]);
|
httpParams.put(pieces[0], pieces[1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
String response = httpErrorDefaultText;
|
String response = httpErrorDefaultText;
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import android.app.TabActivity;
|
|||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.res.Configuration;
|
import android.content.res.Configuration;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
|
import android.nfc.NfcAdapter;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.util.DisplayMetrics;
|
import android.util.DisplayMetrics;
|
||||||
import android.widget.TabHost;
|
import android.widget.TabHost;
|
||||||
@@ -61,22 +62,24 @@ public class ActivityMainTabLayout extends TabActivity
|
|||||||
tabHost.setCurrentTab(Settings.startScreen);
|
tabHost.setCurrentTab(Settings.startScreen);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onResume()
|
protected void onResume()
|
||||||
{
|
{
|
||||||
super.onResume();
|
super.onResume();
|
||||||
Miscellaneous.setDisplayLanguage(this);
|
Miscellaneous.setDisplayLanguage(this);
|
||||||
// Miscellaneous.logEvent("i", "NFC", "ActivityMainTabLayout.onResume().", 5);
|
// Miscellaneous.logEvent("i", "NFC", "ActivityMainTabLayout.onResume().", 5);
|
||||||
NfcReceiver.checkIntentForNFC(this, getIntent());
|
if(!(getIntent().getAction().isEmpty()) && getIntent().getAction().equals(NfcAdapter.ACTION_NDEF_DISCOVERED))
|
||||||
// NfcReceiver.checkIntentForNFC(this, new Intent(this.getApplicationContext(), this.getClass()));
|
{
|
||||||
|
NfcReceiver.checkIntentForNFC(this, getIntent());
|
||||||
|
moveTaskToBack(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onNewIntent(Intent intent)
|
protected void onNewIntent(Intent intent)
|
||||||
{
|
{
|
||||||
// Miscellaneous.logEvent("i", "NFC", "ActivityMainTabLayout.onNewIntent().", 5);
|
// Miscellaneous.logEvent("i", "NFC", "ActivityMainTabLayout.onNewIntent().", 5);
|
||||||
// setIntent(intent);
|
|
||||||
NfcReceiver.checkIntentForNFC(this, intent);
|
NfcReceiver.checkIntentForNFC(this, intent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -19,6 +19,7 @@ import android.widget.EditText;
|
|||||||
import android.widget.ListView;
|
import android.widget.ListView;
|
||||||
import android.widget.RadioButton;
|
import android.widget.RadioButton;
|
||||||
import android.widget.TableLayout;
|
import android.widget.TableLayout;
|
||||||
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
@@ -38,6 +39,7 @@ public class ActivityManageActionTriggerUrl extends Activity
|
|||||||
CheckBox chkTriggerUrlUseAuthentication;
|
CheckBox chkTriggerUrlUseAuthentication;
|
||||||
RadioButton rbTriggerUrlMethodGet, rbTriggerUrlMethodPost;
|
RadioButton rbTriggerUrlMethodGet, rbTriggerUrlMethodPost;
|
||||||
TableLayout tlTriggerUrlAuthentication;
|
TableLayout tlTriggerUrlAuthentication;
|
||||||
|
TextView tvHttpParameterExplanation;
|
||||||
ArrayAdapter<String> httpParametersAdapter;
|
ArrayAdapter<String> httpParametersAdapter;
|
||||||
|
|
||||||
private ArrayList<String> httpParamsList = new ArrayList<>();
|
private ArrayList<String> httpParamsList = new ArrayList<>();
|
||||||
@@ -67,6 +69,7 @@ public class ActivityManageActionTriggerUrl extends Activity
|
|||||||
etParameterName = (EditText) findViewById(R.id.etParameterName);
|
etParameterName = (EditText) findViewById(R.id.etParameterName);
|
||||||
etParameterValue = (EditText)findViewById(R.id.etParameterValue);
|
etParameterValue = (EditText)findViewById(R.id.etParameterValue);
|
||||||
bAddHttpParam = (Button)findViewById(R.id.bAddHttpParam);
|
bAddHttpParam = (Button)findViewById(R.id.bAddHttpParam);
|
||||||
|
tvHttpParameterExplanation = (TextView)findViewById(R.id.tvHttpParameterExplanation);
|
||||||
|
|
||||||
etParameterName.setEnabled(false);
|
etParameterName.setEnabled(false);
|
||||||
etParameterValue.setEnabled(false);
|
etParameterValue.setEnabled(false);
|
||||||
@@ -85,6 +88,8 @@ public class ActivityManageActionTriggerUrl extends Activity
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
tvHttpParameterExplanation.setText(String.format(getResources().getString(R.string.httpParametersExplanation), Miscellaneous.httpMainData, Miscellaneous.doNoEncodingString));
|
||||||
|
|
||||||
httpParametersAdapter = new ArrayAdapter<String>(this, R.layout.text_view_for_poi_listview_mediumtextsize, httpParamsList);
|
httpParametersAdapter = new ArrayAdapter<String>(this, R.layout.text_view_for_poi_listview_mediumtextsize, httpParamsList);
|
||||||
|
|
||||||
bSaveTriggerUrl.setOnClickListener(new OnClickListener()
|
bSaveTriggerUrl.setOnClickListener(new OnClickListener()
|
||||||
|
|||||||
@@ -128,10 +128,13 @@ public class Miscellaneous extends Service
|
|||||||
protected static String writeableFolderStringCache = null;
|
protected static String writeableFolderStringCache = null;
|
||||||
protected final static String http_error_string = "HTTP_ERROR";
|
protected final static String http_error_string = "HTTP_ERROR";
|
||||||
protected final static String last_trigger_url_result_string = "last_trigger_url_result";
|
protected final static String last_trigger_url_result_string = "last_trigger_url_result";
|
||||||
|
protected final static String httpMainData = "httpMainData";
|
||||||
|
protected final static String doNoEncodingString = "NoEncoding";
|
||||||
|
protected final static String httpEncoding = "UTF-8";
|
||||||
public static Context startupContext;
|
public static Context startupContext;
|
||||||
|
|
||||||
public static final String lineSeparator = System.getProperty("line.separator");
|
public static final String lineSeparator = System.getProperty("line.separator");
|
||||||
|
|
||||||
public static String downloadURL(String url, String username, String password, String method, Map<String, String> httpParams)
|
public static String downloadURL(String url, String username, String password, String method, Map<String, String> httpParams)
|
||||||
{
|
{
|
||||||
HttpClient httpclient = new DefaultHttpClient();
|
HttpClient httpclient = new DefaultHttpClient();
|
||||||
@@ -166,6 +169,7 @@ public class Miscellaneous extends Service
|
|||||||
if(httpParams.size() > 0)
|
if(httpParams.size() > 0)
|
||||||
{
|
{
|
||||||
connection.setRequestMethod("POST");
|
connection.setRequestMethod("POST");
|
||||||
|
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
|
||||||
connection.setDoInput(true);
|
connection.setDoInput(true);
|
||||||
connection.setDoOutput(true);
|
connection.setDoOutput(true);
|
||||||
|
|
||||||
@@ -175,8 +179,8 @@ public class Miscellaneous extends Service
|
|||||||
paramPairs.add(new BasicNameValuePair(key, httpParams.get(key)));
|
paramPairs.add(new BasicNameValuePair(key, httpParams.get(key)));
|
||||||
|
|
||||||
OutputStream os = connection.getOutputStream();
|
OutputStream os = connection.getOutputStream();
|
||||||
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));
|
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, httpEncoding));
|
||||||
writer.write(getQuery(paramPairs));
|
writer.write(getQuery(paramPairs, method));
|
||||||
writer.flush();
|
writer.flush();
|
||||||
writer.close();
|
writer.close();
|
||||||
}
|
}
|
||||||
@@ -206,21 +210,52 @@ public class Miscellaneous extends Service
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String getQuery(List<NameValuePair> params) throws UnsupportedEncodingException
|
private static String getQuery(List<NameValuePair> params, String method) throws UnsupportedEncodingException
|
||||||
{
|
{
|
||||||
StringBuilder result = new StringBuilder();
|
StringBuilder result = new StringBuilder();
|
||||||
|
|
||||||
boolean first = true;
|
boolean first = true;
|
||||||
|
|
||||||
for (NameValuePair pair : params)
|
for (NameValuePair pair : params)
|
||||||
{
|
{
|
||||||
if (first)
|
if (method.equals(ActivityManageActionTriggerUrl.methodGet))
|
||||||
first = false;
|
{
|
||||||
else
|
if (first)
|
||||||
result.append("&");
|
first = false;
|
||||||
|
else
|
||||||
|
result.append("&");
|
||||||
|
}
|
||||||
|
else if (pair.getName().startsWith(httpMainData))
|
||||||
|
continue; // if post and main data skip lookup run
|
||||||
|
|
||||||
|
result.append(pair.getName());
|
||||||
|
|
||||||
result.append(URLEncoder.encode(pair.getName(), "UTF-8"));
|
|
||||||
result.append("=");
|
result.append("=");
|
||||||
result.append(URLEncoder.encode(pair.getValue(), "UTF-8"));
|
|
||||||
|
if (pair.getName().endsWith(doNoEncodingString))
|
||||||
|
result.append(URLEncoder.encode(pair.getValue(), httpEncoding));
|
||||||
|
else
|
||||||
|
result.append(pair.getValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
If method is POST and there's a httpMainData field, we transfer
|
||||||
|
this one at the end without parameter name and equals sign.
|
||||||
|
*/
|
||||||
|
if (method.equals(ActivityManageActionTriggerUrl.methodPost))
|
||||||
|
{
|
||||||
|
for (NameValuePair pair : params)
|
||||||
|
{
|
||||||
|
if (pair.getName().startsWith(httpMainData))
|
||||||
|
{
|
||||||
|
if (pair.getName().endsWith(doNoEncodingString))
|
||||||
|
result.append(pair.getValue());
|
||||||
|
else
|
||||||
|
result.append(URLEncoder.encode(pair.getValue(), httpEncoding));
|
||||||
|
|
||||||
|
return result.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result.toString();
|
return result.toString();
|
||||||
@@ -819,7 +854,7 @@ public class Miscellaneous extends Service
|
|||||||
String notificationTitle = NotificationListener.getLastNotification().getTitle();
|
String notificationTitle = NotificationListener.getLastNotification().getTitle();
|
||||||
|
|
||||||
if (notificationTitle != null && notificationTitle.length() > 0)
|
if (notificationTitle != null && notificationTitle.length() > 0)
|
||||||
source = source.replace("[notificationTitle]", escapeStringForUrl(notificationTitle));
|
source = source.replace("[notificationTitle]", notificationTitle);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
source = source.replace("[notificationTitle]", "notificationTitle unknown");
|
source = source.replace("[notificationTitle]", "notificationTitle unknown");
|
||||||
|
|||||||
@@ -711,7 +711,7 @@ public class XmlFileInterface
|
|||||||
|
|
||||||
private static Rule readRule(XmlPullParser parser) throws XmlPullParserException, IOException
|
private static Rule readRule(XmlPullParser parser) throws XmlPullParserException, IOException
|
||||||
{
|
{
|
||||||
/* FILE EXAMPE:
|
/* FILE EXAMPLE:
|
||||||
* *****************
|
* *****************
|
||||||
* <Automation>
|
* <Automation>
|
||||||
* <PointOfInterestCollection>
|
* <PointOfInterestCollection>
|
||||||
@@ -1095,7 +1095,7 @@ public class XmlFileInterface
|
|||||||
|
|
||||||
private static Action readAction(XmlPullParser parser) throws IOException, XmlPullParserException
|
private static Action readAction(XmlPullParser parser) throws IOException, XmlPullParserException
|
||||||
{
|
{
|
||||||
/* FILE EXAMPE:
|
/* FILE EXAMPLE:
|
||||||
* *****************
|
* *****************
|
||||||
* <Automation>
|
* <Automation>
|
||||||
* <PointOfInterestCollection>
|
* <PointOfInterestCollection>
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ public class NfcReceiver
|
|||||||
{
|
{
|
||||||
Miscellaneous.logEvent("i", "NFC", "ACTION_NDEF_DISCOVERED", 4);
|
Miscellaneous.logEvent("i", "NFC", "ACTION_NDEF_DISCOVERED", 4);
|
||||||
|
|
||||||
getNfcAdapter(context);
|
getNfcAdapter(context);
|
||||||
|
|
||||||
if(nfcAdapter == null) // if it's still null the device doesn't support NFC
|
if(nfcAdapter == null) // if it's still null the device doesn't support NFC
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -140,6 +140,17 @@
|
|||||||
|
|
||||||
</TableRow>
|
</TableRow>
|
||||||
|
|
||||||
|
<TableRow>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tvHttpParameterExplanation"
|
||||||
|
android:layout_span="2"
|
||||||
|
android:layout_marginBottom="@dimen/default_margin"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content" />
|
||||||
|
|
||||||
|
</TableRow>
|
||||||
|
|
||||||
<TableRow
|
<TableRow
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content">
|
android:layout_height="wrap_content">
|
||||||
|
|||||||
@@ -977,4 +977,5 @@
|
|||||||
<string name="enterAvalue">Enter a value.</string>
|
<string name="enterAvalue">Enter a value.</string>
|
||||||
<string name="setSystemSettingCapital">Set system setting</string>
|
<string name="setSystemSettingCapital">Set system setting</string>
|
||||||
<string name="examplesWriteSecureSettings">I do not keep a list of possible settings. Please find those settings on your own. See <a href="https://developer.android.com/reference/android/provider/Settings.Secure">here</a> for some (incomplete) examples.</string>
|
<string name="examplesWriteSecureSettings">I do not keep a list of possible settings. Please find those settings on your own. See <a href="https://developer.android.com/reference/android/provider/Settings.Secure">here</a> for some (incomplete) examples.</string>
|
||||||
|
<string name="httpParametersExplanation">If any parameter name starts with %1$s while method is POST, it will not be transmitted like the other parameters (with key=value), but transferred as main data.\nIf the parameter ends with %2$s, no encoding will be performed.</string>
|
||||||
</resources>
|
</resources>
|
||||||
1
fastlane/metadata/android/en-US/changelogs/147.txt
Normal file
1
fastlane/metadata/android/en-US/changelogs/147.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
* Added: Added further options to the trigger url action.
|
||||||
@@ -64,8 +64,8 @@ Supported actions:
|
|||||||
* Change location setting
|
* Change location setting
|
||||||
* Send text message
|
* Send text message
|
||||||
|
|
||||||
It's quite hard to keep this app working across the many different hardwares as well as the many changes Android undergoes over the versions. I can test it in the emulator, but that cannot show all bugs.
|
It's quite hard to keep this app working across the many different devices as well as the many changes Android undergoes over the versions. I can test it in the emulator, but that cannot show all bugs.
|
||||||
So if a certain feature is not working on your device - let me know. Over the years I have fixed almost all bugs that have been reasonably reported to me. But for that I'm dependend on your input.
|
So if a certain feature is not working on your device - let me know. Over the years I have fixed almost all bugs that have been reasonably reported to me. But for that I'm dependent on your input.
|
||||||
|
|
||||||
If you have a problem and think about contacting me please
|
If you have a problem and think about contacting me please
|
||||||
- update to the latest version first and see if your problem persists there, too.
|
- update to the latest version first and see if your problem persists there, too.
|
||||||
|
|||||||
Reference in New Issue
Block a user