Wifi tethering without root above Oreo works again.
This commit is contained in:
parent
f22e4854ee
commit
21ee06e9b1
@ -1,5 +1,6 @@
|
|||||||
package com.jens.automation2;
|
package com.jens.automation2;
|
||||||
|
|
||||||
|
import android.Manifest;
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.annotation.TargetApi;
|
import android.annotation.TargetApi;
|
||||||
import android.app.PendingIntent;
|
import android.app.PendingIntent;
|
||||||
@ -179,6 +180,7 @@ public class Actions
|
|||||||
}
|
}
|
||||||
return currentlyEnabled;
|
return currentlyEnabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Boolean setWifiTethering(Context context, Boolean desiredState, boolean toggleActionIfPossible)
|
public static Boolean setWifiTethering(Context context, Boolean desiredState, boolean toggleActionIfPossible)
|
||||||
{
|
{
|
||||||
Miscellaneous.logEvent("i", "WifiTethering", "Changing WifiTethering to " + String.valueOf(desiredState), 4);
|
Miscellaneous.logEvent("i", "WifiTethering", "Changing WifiTethering to " + String.valueOf(desiredState), 4);
|
||||||
@ -839,8 +841,13 @@ public class Actions
|
|||||||
@SuppressLint("NewApi")
|
@SuppressLint("NewApi")
|
||||||
public static boolean setAirplaneMode(boolean desiredState, boolean toggleActionIfPossible)
|
public static boolean setAirplaneMode(boolean desiredState, boolean toggleActionIfPossible)
|
||||||
{
|
{
|
||||||
// Beginning from SDK Version 17 this may not work anymore.
|
/*
|
||||||
// Setting airplane_mode_on has moved from android.provider.Settings.System to android.provider.Settings.Global, value is unchanged.
|
Beginning from SDK Version 17 this may not work anymore.
|
||||||
|
Setting airplane_mode_on has moved from android.provider.Settings.System to android.provider.Settings.Global, value is unchanged.
|
||||||
|
|
||||||
|
https://stackoverflow.com/questions/22349928/permission-denial-not-allowed-to-send-broadcast-android-intent-action-airplane
|
||||||
|
https://stackoverflow.com/questions/7066427/turn-off-airplane-mode-in-android
|
||||||
|
*/
|
||||||
|
|
||||||
boolean returnValue = false;
|
boolean returnValue = false;
|
||||||
|
|
||||||
@ -866,9 +873,15 @@ public class Actions
|
|||||||
if (desiredState)
|
if (desiredState)
|
||||||
desiredValueInt = 1;
|
desiredValueInt = 1;
|
||||||
|
|
||||||
if(Build.VERSION.SDK_INT < 17)
|
if (Build.VERSION.SDK_INT < 17 || ActivityPermissions.havePermission(Manifest.permission.WRITE_SECURE_SETTINGS, context))
|
||||||
{
|
{
|
||||||
returnValue = android.provider.Settings.System.putInt(context.getContentResolver(), android.provider.Settings.System.AIRPLANE_MODE_ON, desiredValueInt);
|
//returnValue = android.provider.Settings.System.putInt(context.getContentResolver(), android.provider.Settings.System.AIRPLANE_MODE_ON, desiredValueInt);
|
||||||
|
|
||||||
|
returnValue = android.provider.Settings.System.putInt(context.getContentResolver(), android.provider.Settings.Global.AIRPLANE_MODE_ON, desiredValueInt);
|
||||||
|
|
||||||
|
// Intent airplaneIntent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
|
||||||
|
// airplaneIntent.putExtra("state", desiredState);
|
||||||
|
// context.sendBroadcast(airplaneIntent);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -883,7 +896,6 @@ public class Actions
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
||||||
String[] commands = new String[]
|
String[] commands = new String[]
|
||||||
{
|
{
|
||||||
"settings put global airplane_mode_on 0",
|
"settings put global airplane_mode_on 0",
|
||||||
@ -1074,6 +1086,7 @@ public class Actions
|
|||||||
/**
|
/**
|
||||||
* Turns data on and off.
|
* Turns data on and off.
|
||||||
* Requires root permissions from lollipop on.
|
* Requires root permissions from lollipop on.
|
||||||
|
*
|
||||||
* @param toggleActionIfPossible
|
* @param toggleActionIfPossible
|
||||||
*/
|
*/
|
||||||
public static boolean setDataConnection(boolean desiredState, boolean toggleActionIfPossible)
|
public static boolean setDataConnection(boolean desiredState, boolean toggleActionIfPossible)
|
||||||
@ -1311,4 +1324,16 @@ public class Actions
|
|||||||
int actualBrightnessValue = (int) ((float) brightnessValue / 100.0 * 255.0);
|
int actualBrightnessValue = (int) ((float) brightnessValue / 100.0 * 255.0);
|
||||||
android.provider.Settings.System.putInt(context.getContentResolver(), android.provider.Settings.System.SCREEN_BRIGHTNESS, actualBrightnessValue);
|
android.provider.Settings.System.putInt(context.getContentResolver(), android.provider.Settings.System.SCREEN_BRIGHTNESS, actualBrightnessValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isAirplaneModeOn(Context context)
|
||||||
|
{
|
||||||
|
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1)
|
||||||
|
{
|
||||||
|
return android.provider.Settings.System.getInt(context.getContentResolver(), android.provider.Settings.System.AIRPLANE_MODE_ON, 0) != 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return android.provider.Settings.Global.getInt(context.getContentResolver(), android.provider.Settings.Global.AIRPLANE_MODE_ON, 0) != 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
@ -36,7 +36,7 @@ public class ActivityManageActionSendTextMessage extends Activity
|
|||||||
protected void onCreate(Bundle savedInstanceState)
|
protected void onCreate(Bundle savedInstanceState)
|
||||||
{
|
{
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
this.setContentView(R.layout.send_textmessage_editor);
|
this.setContentView(R.layout.activity_manage_action_send_textmessage);
|
||||||
|
|
||||||
etSendTextMessage = (EditText)findViewById(R.id.etSendTextMessage);
|
etSendTextMessage = (EditText)findViewById(R.id.etSendTextMessage);
|
||||||
etPhoneNumber = (EditText)findViewById(R.id.etPhoneNumber);
|
etPhoneNumber = (EditText)findViewById(R.id.etPhoneNumber);
|
||||||
|
@ -24,7 +24,7 @@ public class ActivityManageActionSpeakText extends Activity
|
|||||||
protected void onCreate(Bundle savedInstanceState)
|
protected void onCreate(Bundle savedInstanceState)
|
||||||
{
|
{
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
this.setContentView(R.layout.speak_text_editor);
|
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.bSaveTriggerUrl);
|
||||||
|
@ -39,7 +39,7 @@ public class ActivityManageActionTriggerUrl extends Activity
|
|||||||
protected void onCreate(Bundle savedInstanceState)
|
protected void onCreate(Bundle savedInstanceState)
|
||||||
{
|
{
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
this.setContentView(R.layout.activity_manage_action_url_editor);
|
this.setContentView(R.layout.activity_manage_action_trigger_url);
|
||||||
|
|
||||||
etTriggerUrl = (EditText)findViewById(R.id.etTriggerUrl);
|
etTriggerUrl = (EditText)findViewById(R.id.etTriggerUrl);
|
||||||
etTriggerUrlUsername = (EditText)findViewById(R.id.etTriggerUrlUsername);
|
etTriggerUrlUsername = (EditText)findViewById(R.id.etTriggerUrlUsername);
|
||||||
|
@ -1483,13 +1483,13 @@ public class ActivityManageRule extends Activity
|
|||||||
}
|
}
|
||||||
else if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.setAirplaneMode.toString()))
|
else if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.setAirplaneMode.toString()))
|
||||||
{
|
{
|
||||||
if(Build.VERSION.SDK_INT >= 17)
|
|
||||||
{
|
|
||||||
Toast.makeText(context, getResources().getString(R.string.airplaneModeSdk17Warning), Toast.LENGTH_LONG).show();
|
|
||||||
Miscellaneous.messageBox(getResources().getString(R.string.airplaneMode), getResources().getString(R.string.rootExplanation), ActivityManageRule.this).show();
|
|
||||||
}
|
|
||||||
newAction.setAction(Action_Enum.setAirplaneMode);
|
newAction.setAction(Action_Enum.setAirplaneMode);
|
||||||
getActionParameter1Dialog(ActivityManageRule.this).show();
|
getActionParameter1Dialog(ActivityManageRule.this).show();
|
||||||
|
if(Build.VERSION.SDK_INT >= 17)
|
||||||
|
{
|
||||||
|
// Toast.makeText(context, getResources().getString(R.string.airplaneModeSdk17Warning), Toast.LENGTH_LONG).show();
|
||||||
|
Miscellaneous.messageBox(getResources().getString(R.string.airplaneMode), getResources().getString(R.string.rootExplanation), ActivityManageRule.this).show();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.setDataConnection.toString()))
|
else if(Action.getActionTypesAsArray()[which].toString().equals(Action_Enum.setDataConnection.toString()))
|
||||||
{
|
{
|
||||||
|
@ -2,17 +2,24 @@
|
|||||||
<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:text="@string/urlToTriggerExplanation"
|
||||||
|
android:layout_marginBottom="@dimen/default_margin"/>
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/tvRuleTitle"
|
android:id="@+id/tvRuleTitle"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:textStyle="bold"
|
||||||
android:text="@string/urlToTrigger" />
|
android:text="@string/urlToTrigger" />
|
||||||
|
|
||||||
<EditText
|
<EditText
|
@ -621,4 +621,5 @@
|
|||||||
<string name="loadWifiList">WLAN Liste laden</string>
|
<string name="loadWifiList">WLAN Liste laden</string>
|
||||||
<string name="noKnownWifis">Es gibt keine bekannten WLANs auf Ihrem Gerät.</string>
|
<string name="noKnownWifis">Es gibt keine bekannten WLANs auf Ihrem Gerät.</string>
|
||||||
<string name="needLocationPermForWifiList">Die Liste von WLANs auf Ihrem Gerät könnte verwendet werden, um zu ermitteln, an welchen Orten Sie waren. Deshalb ist die Positions-Berechtigung nötig, um die Liste dieser WLANs zu laden. Wenn Sie eines aus der Liste auswählen möchten, müssen Sie diese Berechtigung gewähren. Wenn nicht, können Sie immer noch eines manuell eingeben.</string>
|
<string name="needLocationPermForWifiList">Die Liste von WLANs auf Ihrem Gerät könnte verwendet werden, um zu ermitteln, an welchen Orten Sie waren. Deshalb ist die Positions-Berechtigung nötig, um die Liste dieser WLANs zu laden. Wenn Sie eines aus der Liste auswählen möchten, müssen Sie diese Berechtigung gewähren. Wenn nicht, können Sie immer noch eines manuell eingeben.</string>
|
||||||
|
<string name="urlToTriggerExplanation">Diese Funktion öffnet NICHT den Browser, sondern löst die HTTP Anfrage im Hintergrund aus. Sie können das z.B. benutzen, um Befehle an Ihre Heimautomatisierung zu schicken.</string>
|
||||||
</resources>
|
</resources>
|
@ -408,4 +408,6 @@ Incluya las paréntecis en su texto.\n\n[uniqueid] - el número único de su dis
|
|||||||
<string name="any">algun</string>
|
<string name="any">algun</string>
|
||||||
<string name="incoming">recibidiendo</string>
|
<string name="incoming">recibidiendo</string>
|
||||||
<string name="outgoing">saliendo</string>
|
<string name="outgoing">saliendo</string>
|
||||||
|
<string name="urlToTriggerExplanation">Esa función NO abre el browser, pero provoca el URL en el segundo plano. Per ejemplo puede usarlo a enviar ordenes a su automatización de casa.</string>
|
||||||
|
<string name="noKnownWifis">No hay wifis conociendos en su disparador.</string>
|
||||||
</resources>
|
</resources>
|
@ -70,7 +70,7 @@
|
|||||||
<string name="end">End</string>
|
<string name="end">End</string>
|
||||||
<string name="save">Save</string>
|
<string name="save">Save</string>
|
||||||
<string name="urlToTrigger">URL to trigger:</string>
|
<string name="urlToTrigger">URL to trigger:</string>
|
||||||
<string name="urlLegend">Variables: You can use the following variables. Upon triggering they will be replaced with the corresponding value on your device. Include the brackets in your text. [uniqueid] - Your device\'s unique id [serialnr] - Your device\'s serial number [latitude] - Your device\'s latitude [longitude] - Your device\'s longitude [phonenr] - Number of last incoming or outgoing call [d] - Day of the month, 2 digits with leading zeros [m] - Numeric representation of a month, with leading zeros [Y] - A full numeric representation of a year, 4 digits [h] - 12-hour format of an hour with leading zeros [H] - 24-hour format of an hour with leading zeros [i] - Minutes with leading zeros [s] - Seconds, with leading zeros [ms] - milliseconds [notificationTitle] - title of last notification [notificationText] - text of last notification</string>
|
<string name="urlLegend">Variables:\nYou can use the following variables. Upon triggering they will be replaced with the corresponding value on your device. Include the brackets in your text.\n\n[uniqueid] - Your device\'s unique id\n[serialnr] - Your device\'s serial number\n[latitude] - Your device\'s latitude\n[longitude] - Your device\'s longitude\n[phonenr] - Number of last incoming or outgoing call\n[d] - Day of the month, 2 digits with leading zeros\n[m] - Numeric representation of a month, with leading zeros\n[Y] - A full numeric representation of a year, 4 digits\n[h] - 12-hour format of an hour with leading zeros\n[H] - 24-hour format of an hour with leading zeros\n[i] - Minutes with leading zeros\n[s] - Seconds, with leading zeros\n[ms] - milliseconds\n[notificationTitle] - title of last notification\n[notificationText] - text of last notification</string>
|
||||||
<string name="wifi">wifi</string>
|
<string name="wifi">wifi</string>
|
||||||
<string name="activating">Activating</string>
|
<string name="activating">Activating</string>
|
||||||
<string name="deactivating">Deactivating</string>
|
<string name="deactivating">Deactivating</string>
|
||||||
@ -674,4 +674,5 @@
|
|||||||
<string name="loadWifiList">Load wifi list</string>
|
<string name="loadWifiList">Load wifi list</string>
|
||||||
<string name="needLocationPermForWifiList">The list of wifis your device has been connected to could be used to determine which places you have been to. That\'s why the location permission is required to load the list of wifis. If you want to be able to pick one from the list you need to grant that permission. If not you can still enter your wifi name manually.</string>
|
<string name="needLocationPermForWifiList">The list of wifis your device has been connected to could be used to determine which places you have been to. That\'s why the location permission is required to load the list of wifis. If you want to be able to pick one from the list you need to grant that permission. If not you can still enter your wifi name manually.</string>
|
||||||
<string name="noKnownWifis">There are no known wifis on your device.</string>
|
<string name="noKnownWifis">There are no known wifis on your device.</string>
|
||||||
|
<string name="urlToTriggerExplanation">This feature does NOT open a browser, but triggers a URL in the background. You can use this e.g. to send commands to your home automation.</string>
|
||||||
</resources>
|
</resources>
|
3
fastlane/metadata/android/en-US/changelogs/105.txt
Normal file
3
fastlane/metadata/android/en-US/changelogs/105.txt
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
* Activate wifi tethering doesn't require root anymore
|
||||||
|
* Italian translation updated
|
||||||
|
* Spanish translation updated
|
Loading…
Reference in New Issue
Block a user