From bf2cc09307e404a8d6de0bfd77e1e8366e1a0497 Mon Sep 17 00:00:00 2001 From: Fil Date: Sun, 17 Dec 2017 12:59:08 +0100 Subject: new version v0.6 - new features plus code cleanup * NEW: introduced static IP/gateway settings per network. * NEW: added OpenVPN support via interaction with de.blinkt.openvpn * completed french translation by Nicola Spanti. * improved stability by changing dhcpcd options. * better shell command handling, with direct output reading. * better network storage, based on JSON instead of TSV. * cleaned up engine's code. * clean up xml styling files * replaced all string litterals with @string resoruces --- CHANGELOG | 11 + TODO | 6 +- app/AndroidManifest.xml | 15 +- .../de/blinkt/openvpn/api/IOpenVPNAPIService.java | 545 +++++++++++++++++++++ .../blinkt/openvpn/api/IOpenVPNStatusCallback.java | 107 ++++ app/gen/fil/libre/repwifiapp/R.java | 335 +++++++++---- app/res/drawable/fil_logo.png | Bin 0 -> 21529 bytes app/res/layout/activity_credits.xml | 36 +- app/res/layout/activity_ipv4_settings.xml | 126 +++++ app/res/layout/activity_long_task.xml | 1 + app/res/layout/activity_network_details.xml | 27 +- app/res/layout/activity_vpn_settings.xml | 55 +++ app/res/menu/activity_ipv4_settings.xml | 9 + app/res/menu/activity_main.xml | 10 +- app/res/menu/activity_vpn_settings.xml | 9 + app/res/values-fr/strings.xml | 106 +++- .../values-fr/strings_activity_input_password.xml | 29 +- app/res/values-fr/strings_activity_settings.xml | 56 +-- app/res/values/strings.xml | 81 ++- app/res/values/strings_activity_input_password.xml | 11 +- app/res/values/strings_activity_settings.xml | 43 -- app/res/values/styles.xml | 2 +- app/res/xml/debug_settings.xml | 9 +- app/res/xml/general_settings.xml | 26 +- app/res/xml/settings_headers.xml | 8 +- app/src/de/blinkt/openvpn/api/APIVpnProfile.aidl | 3 + app/src/de/blinkt/openvpn/api/APIVpnProfile.java | 61 +++ app/src/de/blinkt/openvpn/api/DO_NOT_RENAME | 1 + .../de/blinkt/openvpn/api/IOpenVPNAPIService.aidl | 66 +++ .../blinkt/openvpn/api/IOpenVPNStatusCallback.aidl | 13 + app/src/fil/libre/repwifiapp/ActivityLauncher.java | 46 +- app/src/fil/libre/repwifiapp/Commons.java | 134 +++-- .../libre/repwifiapp/RepWifiIntentReceiver.java | 3 - .../activities/InputPasswordActivity.java | 4 +- .../repwifiapp/activities/InputSsidActivity.java | 4 +- .../activities/Ipv4SettingsActivity.java | 181 +++++++ .../repwifiapp/activities/LongTaskActivity.java | 37 +- .../libre/repwifiapp/activities/MainActivity.java | 67 ++- .../repwifiapp/activities/MenuEnabledActivity.java | 88 +++- .../activities/NetworkDetailsActivity.java | 20 +- .../activities/SelectNetworkActivity.java | 10 +- .../repwifiapp/activities/SettingsActivity.java | 43 +- .../repwifiapp/activities/ShowStatusActivity.java | 183 ++++++- .../repwifiapp/activities/VpnSettingsActivity.java | 201 ++++++++ .../libre/repwifiapp/helpers/AccessPointInfo.java | 173 ++++++- .../libre/repwifiapp/helpers/ConnectionStatus.java | 8 +- .../fil/libre/repwifiapp/helpers/DhcpSettings.java | 205 ++++++++ app/src/fil/libre/repwifiapp/helpers/Engine.java | 415 ++-------------- .../fil/libre/repwifiapp/helpers/Engine6p0.java | 249 +++------- app/src/fil/libre/repwifiapp/helpers/IEngine.java | 8 - .../libre/repwifiapp/helpers/NetworkManager.java | 170 +++++-- .../libre/repwifiapp/helpers/OpenVpnManager.java | 237 +++++++++ .../fil/libre/repwifiapp/helpers/RootCommand.java | 68 ++- .../fil/libre/repwifiapp/helpers/ShellCommand.java | 23 +- app/src/fil/libre/repwifiapp/helpers/Utils.java | 231 +++++++-- app/src/fil/libre/repwifiapp/helpers/WpaCli.java | 263 ++++++++++ .../libre/repwifiapp/helpers/WpaSupplicant.java | 65 +++ 57 files changed, 3819 insertions(+), 1124 deletions(-) create mode 100644 app/gen/de/blinkt/openvpn/api/IOpenVPNAPIService.java create mode 100644 app/gen/de/blinkt/openvpn/api/IOpenVPNStatusCallback.java create mode 100644 app/res/drawable/fil_logo.png create mode 100644 app/res/layout/activity_ipv4_settings.xml create mode 100644 app/res/layout/activity_vpn_settings.xml create mode 100644 app/res/menu/activity_ipv4_settings.xml create mode 100644 app/res/menu/activity_vpn_settings.xml create mode 100644 app/src/de/blinkt/openvpn/api/APIVpnProfile.aidl create mode 100644 app/src/de/blinkt/openvpn/api/APIVpnProfile.java create mode 100644 app/src/de/blinkt/openvpn/api/DO_NOT_RENAME create mode 100644 app/src/de/blinkt/openvpn/api/IOpenVPNAPIService.aidl create mode 100644 app/src/de/blinkt/openvpn/api/IOpenVPNStatusCallback.aidl create mode 100644 app/src/fil/libre/repwifiapp/activities/Ipv4SettingsActivity.java create mode 100644 app/src/fil/libre/repwifiapp/activities/VpnSettingsActivity.java create mode 100644 app/src/fil/libre/repwifiapp/helpers/DhcpSettings.java create mode 100644 app/src/fil/libre/repwifiapp/helpers/OpenVpnManager.java create mode 100644 app/src/fil/libre/repwifiapp/helpers/WpaCli.java create mode 100644 app/src/fil/libre/repwifiapp/helpers/WpaSupplicant.java diff --git a/CHANGELOG b/CHANGELOG index 8d1eaf6..a1b22b7 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,14 @@ +## [v0.6] - 2017-12-17 +* NEW: introduced static IP/gateway settings per network. +* NEW: added OpenVPN support via interaction with de.blinkt.openvpn +* NEW: french translation by Nicola Spanti. +* improved stability by changing dhcpcd options. +* better shell command handling, with direct output reading. +* better network storage, based on JSON instead of TSV. +* cleaned up engine's code. +* clean up xml styling files +* replaced all string litterals with @string resoruces + ## [v0.5] - 2017-08-25 * removed dependency on prebuilt android-support-v4.jar. * introduced support for hidden networks. diff --git a/TODO b/TODO index be6a7c9..9d2e86f 100644 --- a/TODO +++ b/TODO @@ -1,9 +1,5 @@ TODO -as of 2017-08-25 +as of 2017-12-17 -*) clean up engine's code *) turn backend engine into a service *) introduce support for EAP authentication (if possible at all) -*) publish on fdroid -*) clean up xml styling files -*) replace all string litterals with @string resoruces diff --git a/app/AndroidManifest.xml b/app/AndroidManifest.xml index 891cca9..c20db8a 100644 --- a/app/AndroidManifest.xml +++ b/app/AndroidManifest.xml @@ -1,8 +1,8 @@ + android:versionCode="4" + android:versionName="0.6" > @@ -87,6 +87,15 @@ android:name="fil.libre.repwifiapp.activities.InputSsidActivity" android:label="@string/title_activity_input_ssid" > + + + + + \ No newline at end of file diff --git a/app/gen/de/blinkt/openvpn/api/IOpenVPNAPIService.java b/app/gen/de/blinkt/openvpn/api/IOpenVPNAPIService.java new file mode 100644 index 0000000..7f11034 --- /dev/null +++ b/app/gen/de/blinkt/openvpn/api/IOpenVPNAPIService.java @@ -0,0 +1,545 @@ +/* + * This file is auto-generated. DO NOT MODIFY. + * Original file: /home/fil/workspace/RepWifiApp/src/de/blinkt/openvpn/api/IOpenVPNAPIService.aidl + */ +package de.blinkt.openvpn.api; +public interface IOpenVPNAPIService extends android.os.IInterface +{ +/** Local-side IPC implementation stub class. */ +public static abstract class Stub extends android.os.Binder implements de.blinkt.openvpn.api.IOpenVPNAPIService +{ +private static final java.lang.String DESCRIPTOR = "de.blinkt.openvpn.api.IOpenVPNAPIService"; +/** Construct the stub at attach it to the interface. */ +public Stub() +{ +this.attachInterface(this, DESCRIPTOR); +} +/** + * Cast an IBinder object into an de.blinkt.openvpn.api.IOpenVPNAPIService interface, + * generating a proxy if needed. + */ +public static de.blinkt.openvpn.api.IOpenVPNAPIService asInterface(android.os.IBinder obj) +{ +if ((obj==null)) { +return null; +} +android.os.IInterface iin = obj.queryLocalInterface(DESCRIPTOR); +if (((iin!=null)&&(iin instanceof de.blinkt.openvpn.api.IOpenVPNAPIService))) { +return ((de.blinkt.openvpn.api.IOpenVPNAPIService)iin); +} +return new de.blinkt.openvpn.api.IOpenVPNAPIService.Stub.Proxy(obj); +} +@Override public android.os.IBinder asBinder() +{ +return this; +} +@Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException +{ +switch (code) +{ +case INTERFACE_TRANSACTION: +{ +reply.writeString(DESCRIPTOR); +return true; +} +case TRANSACTION_getProfiles: +{ +data.enforceInterface(DESCRIPTOR); +java.util.List _result = this.getProfiles(); +reply.writeNoException(); +reply.writeTypedList(_result); +return true; +} +case TRANSACTION_startProfile: +{ +data.enforceInterface(DESCRIPTOR); +java.lang.String _arg0; +_arg0 = data.readString(); +this.startProfile(_arg0); +reply.writeNoException(); +return true; +} +case TRANSACTION_addVPNProfile: +{ +data.enforceInterface(DESCRIPTOR); +java.lang.String _arg0; +_arg0 = data.readString(); +java.lang.String _arg1; +_arg1 = data.readString(); +boolean _result = this.addVPNProfile(_arg0, _arg1); +reply.writeNoException(); +reply.writeInt(((_result)?(1):(0))); +return true; +} +case TRANSACTION_startVPN: +{ +data.enforceInterface(DESCRIPTOR); +java.lang.String _arg0; +_arg0 = data.readString(); +this.startVPN(_arg0); +reply.writeNoException(); +return true; +} +case TRANSACTION_prepare: +{ +data.enforceInterface(DESCRIPTOR); +java.lang.String _arg0; +_arg0 = data.readString(); +android.content.Intent _result = this.prepare(_arg0); +reply.writeNoException(); +if ((_result!=null)) { +reply.writeInt(1); +_result.writeToParcel(reply, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE); +} +else { +reply.writeInt(0); +} +return true; +} +case TRANSACTION_prepareVPNService: +{ +data.enforceInterface(DESCRIPTOR); +android.content.Intent _result = this.prepareVPNService(); +reply.writeNoException(); +if ((_result!=null)) { +reply.writeInt(1); +_result.writeToParcel(reply, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE); +} +else { +reply.writeInt(0); +} +return true; +} +case TRANSACTION_disconnect: +{ +data.enforceInterface(DESCRIPTOR); +this.disconnect(); +reply.writeNoException(); +return true; +} +case TRANSACTION_pause: +{ +data.enforceInterface(DESCRIPTOR); +this.pause(); +reply.writeNoException(); +return true; +} +case TRANSACTION_resume: +{ +data.enforceInterface(DESCRIPTOR); +this.resume(); +reply.writeNoException(); +return true; +} +case TRANSACTION_registerStatusCallback: +{ +data.enforceInterface(DESCRIPTOR); +de.blinkt.openvpn.api.IOpenVPNStatusCallback _arg0; +_arg0 = de.blinkt.openvpn.api.IOpenVPNStatusCallback.Stub.asInterface(data.readStrongBinder()); +this.registerStatusCallback(_arg0); +reply.writeNoException(); +return true; +} +case TRANSACTION_unregisterStatusCallback: +{ +data.enforceInterface(DESCRIPTOR); +de.blinkt.openvpn.api.IOpenVPNStatusCallback _arg0; +_arg0 = de.blinkt.openvpn.api.IOpenVPNStatusCallback.Stub.asInterface(data.readStrongBinder()); +this.unregisterStatusCallback(_arg0); +reply.writeNoException(); +return true; +} +case TRANSACTION_removeProfile: +{ +data.enforceInterface(DESCRIPTOR); +java.lang.String _arg0; +_arg0 = data.readString(); +this.removeProfile(_arg0); +reply.writeNoException(); +return true; +} +case TRANSACTION_protectSocket: +{ +data.enforceInterface(DESCRIPTOR); +android.os.ParcelFileDescriptor _arg0; +if ((0!=data.readInt())) { +_arg0 = android.os.ParcelFileDescriptor.CREATOR.createFromParcel(data); +} +else { +_arg0 = null; +} +boolean _result = this.protectSocket(_arg0); +reply.writeNoException(); +reply.writeInt(((_result)?(1):(0))); +return true; +} +case TRANSACTION_addNewVPNProfile: +{ +data.enforceInterface(DESCRIPTOR); +java.lang.String _arg0; +_arg0 = data.readString(); +boolean _arg1; +_arg1 = (0!=data.readInt()); +java.lang.String _arg2; +_arg2 = data.readString(); +de.blinkt.openvpn.api.APIVpnProfile _result = this.addNewVPNProfile(_arg0, _arg1, _arg2); +reply.writeNoException(); +if ((_result!=null)) { +reply.writeInt(1); +_result.writeToParcel(reply, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE); +} +else { +reply.writeInt(0); +} +return true; +} +} +return super.onTransact(code, data, reply, flags); +} +private static class Proxy implements de.blinkt.openvpn.api.IOpenVPNAPIService +{ +private android.os.IBinder mRemote; +Proxy(android.os.IBinder remote) +{ +mRemote = remote; +} +@Override public android.os.IBinder asBinder() +{ +return mRemote; +} +public java.lang.String getInterfaceDescriptor() +{ +return DESCRIPTOR; +} +@Override public java.util.List getProfiles() throws android.os.RemoteException +{ +android.os.Parcel _data = android.os.Parcel.obtain(); +android.os.Parcel _reply = android.os.Parcel.obtain(); +java.util.List _result; +try { +_data.writeInterfaceToken(DESCRIPTOR); +mRemote.transact(Stub.TRANSACTION_getProfiles, _data, _reply, 0); +_reply.readException(); +_result = _reply.createTypedArrayList(de.blinkt.openvpn.api.APIVpnProfile.CREATOR); +} +finally { +_reply.recycle(); +_data.recycle(); +} +return _result; +} +@Override public void startProfile(java.lang.String profileUUID) throws android.os.RemoteException +{ +android.os.Parcel _data = android.os.Parcel.obtain(); +android.os.Parcel _reply = android.os.Parcel.obtain(); +try { +_data.writeInterfaceToken(DESCRIPTOR); +_data.writeString(profileUUID); +mRemote.transact(Stub.TRANSACTION_startProfile, _data, _reply, 0); +_reply.readException(); +} +finally { +_reply.recycle(); +_data.recycle(); +} +} +/** Use a profile with all certificates etc. embedded, + * old version which does not return the UUID of the addded profile, see + * below for a version that return the UUID on add */ +@Override public boolean addVPNProfile(java.lang.String name, java.lang.String config) throws android.os.RemoteException +{ +android.os.Parcel _data = android.os.Parcel.obtain(); +android.os.Parcel _reply = android.os.Parcel.obtain(); +boolean _result; +try { +_data.writeInterfaceToken(DESCRIPTOR); +_data.writeString(name); +_data.writeString(config); +mRemote.transact(Stub.TRANSACTION_addVPNProfile, _data, _reply, 0); +_reply.readException(); +_result = (0!=_reply.readInt()); +} +finally { +_reply.recycle(); +_data.recycle(); +} +return _result; +} +/** start a profile using a config as inline string. Make sure that all needed data is inlined, + * e.g., using ... or ... + * See the OpenVPN manual page for more on inlining files */ +@Override public void startVPN(java.lang.String inlineconfig) throws android.os.RemoteException +{ +android.os.Parcel _data = android.os.Parcel.obtain(); +android.os.Parcel _reply = android.os.Parcel.obtain(); +try { +_data.writeInterfaceToken(DESCRIPTOR); +_data.writeString(inlineconfig); +mRemote.transact(Stub.TRANSACTION_startVPN, _data, _reply, 0); +_reply.readException(); +} +finally { +_reply.recycle(); +_data.recycle(); +} +} +/** This permission framework is used to avoid confused deputy style attack to the VPN + * calling this will give null if the app is allowed to use the external API and an Intent + * that can be launched to request permissions otherwise */ +@Override public android.content.Intent prepare(java.lang.String packagename) throws android.os.RemoteException +{ +android.os.Parcel _data = android.os.Parcel.obtain(); +android.os.Parcel _reply = android.os.Parcel.obtain(); +android.content.Intent _result; +try { +_data.writeInterfaceToken(DESCRIPTOR); +_data.writeString(packagename); +mRemote.transact(Stub.TRANSACTION_prepare, _data, _reply, 0); +_reply.readException(); +if ((0!=_reply.readInt())) { +_result = android.content.Intent.CREATOR.createFromParcel(_reply); +} +else { +_result = null; +} +} +finally { +_reply.recycle(); +_data.recycle(); +} +return _result; +} +/** Used to trigger to the Android VPN permission dialog (VPNService.prepare()) in advance, + * if this return null OpenVPN for ANdroid already has the permissions otherwise you can start the returned Intent + * to let OpenVPN for Android request the permission */ +@Override public android.content.Intent prepareVPNService() throws android.os.RemoteException +{ +android.os.Parcel _data = android.os.Parcel.obtain(); +android.os.Parcel _reply = android.os.Parcel.obtain(); +android.content.Intent _result; +try { +_data.writeInterfaceToken(DESCRIPTOR); +mRemote.transact(Stub.TRANSACTION_prepareVPNService, _data, _reply, 0); +_reply.readException(); +if ((0!=_reply.readInt())) { +_result = android.content.Intent.CREATOR.createFromParcel(_reply); +} +else { +_result = null; +} +} +finally { +_reply.recycle(); +_data.recycle(); +} +return _result; +} +/* Disconnect the VPN */ +@Override public void disconnect() throws android.os.RemoteException +{ +android.os.Parcel _data = android.os.Parcel.obtain(); +android.os.Parcel _reply = android.os.Parcel.obtain(); +try { +_data.writeInterfaceToken(DESCRIPTOR); +mRemote.transact(Stub.TRANSACTION_disconnect, _data, _reply, 0); +_reply.readException(); +} +finally { +_reply.recycle(); +_data.recycle(); +} +} +/* Pause the VPN (same as using the pause feature in the notifcation bar) */ +@Override public void pause() throws android.os.RemoteException +{ +android.os.Parcel _data = android.os.Parcel.obtain(); +android.os.Parcel _reply = android.os.Parcel.obtain(); +try { +_data.writeInterfaceToken(DESCRIPTOR); +mRemote.transact(Stub.TRANSACTION_pause, _data, _reply, 0); +_reply.readException(); +} +finally { +_reply.recycle(); +_data.recycle(); +} +} +/* Resume the VPN (same as using the pause feature in the notifcation bar) */ +@Override public void resume() throws android.os.RemoteException +{ +android.os.Parcel _data = android.os.Parcel.obtain(); +android.os.Parcel _reply = android.os.Parcel.obtain(); +try { +_data.writeInterfaceToken(DESCRIPTOR); +mRemote.transact(Stub.TRANSACTION_resume, _data, _reply, 0); +_reply.readException(); +} +finally { +_reply.recycle(); +_data.recycle(); +} +} +/** + * Registers to receive OpenVPN Status Updates + */ +@Override public void registerStatusCallback(de.blinkt.openvpn.api.IOpenVPNStatusCallback cb) throws android.os.RemoteException +{ +android.os.Parcel _data = android.os.Parcel.obtain(); +android.os.Parcel _reply = android.os.Parcel.obtain(); +try { +_data.writeInterfaceToken(DESCRIPTOR); +_data.writeStrongBinder((((cb!=null))?(cb.asBinder()):(null))); +mRemote.transact(Stub.TRANSACTION_registerStatusCallback, _data, _reply, 0); +_reply.readException(); +} +finally { +_reply.recycle(); +_data.recycle(); +} +} +/** + * Remove a previously registered callback interface. + */ +@Override public void unregisterStatusCallback(de.blinkt.openvpn.api.IOpenVPNStatusCallback cb) throws android.os.RemoteException +{ +android.os.Parcel _data = android.os.Parcel.obtain(); +android.os.Parcel _reply = android.os.Parcel.obtain(); +try { +_data.writeInterfaceToken(DESCRIPTOR); +_data.writeStrongBinder((((cb!=null))?(cb.asBinder()):(null))); +mRemote.transact(Stub.TRANSACTION_unregisterStatusCallback, _data, _reply, 0); +_reply.readException(); +} +finally { +_reply.recycle(); +_data.recycle(); +} +} +/** Remove a profile by UUID */ +@Override public void removeProfile(java.lang.String profileUUID) throws android.os.RemoteException +{ +android.os.Parcel _data = android.os.Parcel.obtain(); +android.os.Parcel _reply = android.os.Parcel.obtain(); +try { +_data.writeInterfaceToken(DESCRIPTOR); +_data.writeString(profileUUID); +mRemote.transact(Stub.TRANSACTION_removeProfile, _data, _reply, 0); +_reply.readException(); +} +finally { +_reply.recycle(); +_data.recycle(); +} +} +/** Request a socket to be protected as a VPN socket would be. Useful for creating + * a helper socket for an app controlling OpenVPN + * Before calling this function you should make sure OpenVPN for Android may actually + * this function by checking if prepareVPNService returns null; */ +@Override public boolean protectSocket(android.os.ParcelFileDescriptor fd) throws android.os.RemoteException +{ +android.os.Parcel _data = android.os.Parcel.obtain(); +android.os.Parcel _reply = android.os.Parcel.obtain(); +boolean _result; +try { +_data.writeInterfaceToken(DESCRIPTOR); +if ((fd!=null)) { +_data.writeInt(1); +fd.writeToParcel(_data, 0); +} +else { +_data.writeInt(0); +} +mRemote.transact(Stub.TRANSACTION_protectSocket, _data, _reply, 0); +_reply.readException(); +_result = (0!=_reply.readInt()); +} +finally { +_reply.recycle(); +_data.recycle(); +} +return _result; +} +/** Use a profile with all certificates etc. embedded */ +@Override public de.blinkt.openvpn.api.APIVpnProfile addNewVPNProfile(java.lang.String name, boolean userEditable, java.lang.String config) throws android.os.RemoteException +{ +android.os.Parcel _data = android.os.Parcel.obtain(); +android.os.Parcel _reply = android.os.Parcel.obtain(); +de.blinkt.openvpn.api.APIVpnProfile _result; +try { +_data.writeInterfaceToken(DESCRIPTOR); +_data.writeString(name); +_data.writeInt(((userEditable)?(1):(0))); +_data.writeString(config); +mRemote.transact(Stub.TRANSACTION_addNewVPNProfile, _data, _reply, 0); +_reply.readException(); +if ((0!=_reply.readInt())) { +_result = de.blinkt.openvpn.api.APIVpnProfile.CREATOR.createFromParcel(_reply); +} +else { +_result = null; +} +} +finally { +_reply.recycle(); +_data.recycle(); +} +return _result; +} +} +static final int TRANSACTION_getProfiles = (android.os.IBinder.FIRST_CALL_TRANSACTION + 0); +static final int TRANSACTION_startProfile = (android.os.IBinder.FIRST_CALL_TRANSACTION + 1); +static final int TRANSACTION_addVPNProfile = (android.os.IBinder.FIRST_CALL_TRANSACTION + 2); +static final int TRANSACTION_startVPN = (android.os.IBinder.FIRST_CALL_TRANSACTION + 3); +static final int TRANSACTION_prepare = (android.os.IBinder.FIRST_CALL_TRANSACTION + 4); +static final int TRANSACTION_prepareVPNService = (android.os.IBinder.FIRST_CALL_TRANSACTION + 5); +static final int TRANSACTION_disconnect = (android.os.IBinder.FIRST_CALL_TRANSACTION + 6); +static final int TRANSACTION_pause = (android.os.IBinder.FIRST_CALL_TRANSACTION + 7); +static final int TRANSACTION_resume = (android.os.IBinder.FIRST_CALL_TRANSACTION + 8); +static final int TRANSACTION_registerStatusCallback = (android.os.IBinder.FIRST_CALL_TRANSACTION + 9); +static final int TRANSACTION_unregisterStatusCallback = (android.os.IBinder.FIRST_CALL_TRANSACTION + 10); +static final int TRANSACTION_removeProfile = (android.os.IBinder.FIRST_CALL_TRANSACTION + 11); +static final int TRANSACTION_protectSocket = (android.os.IBinder.FIRST_CALL_TRANSACTION + 12); +static final int TRANSACTION_addNewVPNProfile = (android.os.IBinder.FIRST_CALL_TRANSACTION + 13); +} +public java.util.List getProfiles() throws android.os.RemoteException; +public void startProfile(java.lang.String profileUUID) throws android.os.RemoteException; +/** Use a profile with all certificates etc. embedded, + * old version which does not return the UUID of the addded profile, see + * below for a version that return the UUID on add */ +public boolean addVPNProfile(java.lang.String name, java.lang.String config) throws android.os.RemoteException; +/** start a profile using a config as inline string. Make sure that all needed data is inlined, + * e.g., using ... or ... + * See the OpenVPN manual page for more on inlining files */ +public void startVPN(java.lang.String inlineconfig) throws android.os.RemoteException; +/** This permission framework is used to avoid confused deputy style attack to the VPN + * calling this will give null if the app is allowed to use the external API and an Intent + * that can be launched to request permissions otherwise */ +public android.content.Intent prepare(java.lang.String packagename) throws android.os.RemoteException; +/** Used to trigger to the Android VPN permission dialog (VPNService.prepare()) in advance, + * if this return null OpenVPN for ANdroid already has the permissions otherwise you can start the returned Intent + * to let OpenVPN for Android request the permission */ +public android.content.Intent prepareVPNService() throws android.os.RemoteException; +/* Disconnect the VPN */ +public void disconnect() throws android.os.RemoteException; +/* Pause the VPN (same as using the pause feature in the notifcation bar) */ +public void pause() throws android.os.RemoteException; +/* Resume the VPN (same as using the pause feature in the notifcation bar) */ +public void resume() throws android.os.RemoteException; +/** + * Registers to receive OpenVPN Status Updates + */ +public void registerStatusCallback(de.blinkt.openvpn.api.IOpenVPNStatusCallback cb) throws android.os.RemoteException; +/** + * Remove a previously registered callback interface. + */ +public void unregisterStatusCallback(de.blinkt.openvpn.api.IOpenVPNStatusCallback cb) throws android.os.RemoteException; +/** Remove a profile by UUID */ +public void removeProfile(java.lang.String profileUUID) throws android.os.RemoteException; +/** Request a socket to be protected as a VPN socket would be. Useful for creating + * a helper socket for an app controlling OpenVPN + * Before calling this function you should make sure OpenVPN for Android may actually + * this function by checking if prepareVPNService returns null; */ +public boolean protectSocket(android.os.ParcelFileDescriptor fd) throws android.os.RemoteException; +/** Use a profile with all certificates etc. embedded */ +public de.blinkt.openvpn.api.APIVpnProfile addNewVPNProfile(java.lang.String name, boolean userEditable, java.lang.String config) throws android.os.RemoteException; +} diff --git a/app/gen/de/blinkt/openvpn/api/IOpenVPNStatusCallback.java b/app/gen/de/blinkt/openvpn/api/IOpenVPNStatusCallback.java new file mode 100644 index 0000000..fde3f75 --- /dev/null +++ b/app/gen/de/blinkt/openvpn/api/IOpenVPNStatusCallback.java @@ -0,0 +1,107 @@ +/* + * This file is auto-generated. DO NOT MODIFY. + * Original file: /home/fil/workspace/RepWifiApp/src/de/blinkt/openvpn/api/IOpenVPNStatusCallback.aidl + */ +package de.blinkt.openvpn.api; +/** + * Example of a callback interface used by IRemoteService to send + * synchronous notifications back to its clients. Note that this is a + * one-way interface so the server does not block waiting for the client. + */ +public interface IOpenVPNStatusCallback extends android.os.IInterface +{ +/** Local-side IPC implementation stub class. */ +public static abstract class Stub extends android.os.Binder implements de.blinkt.openvpn.api.IOpenVPNStatusCallback +{ +private static final java.lang.String DESCRIPTOR = "de.blinkt.openvpn.api.IOpenVPNStatusCallback"; +/** Construct the stub at attach it to the interface. */ +public Stub() +{ +this.attachInterface(this, DESCRIPTOR); +} +/** + * Cast an IBinder object into an de.blinkt.openvpn.api.IOpenVPNStatusCallback interface, + * generating a proxy if needed. + */ +public static de.blinkt.openvpn.api.IOpenVPNStatusCallback asInterface(android.os.IBinder obj) +{ +if ((obj==null)) { +return null; +} +android.os.IInterface iin = obj.queryLocalInterface(DESCRIPTOR); +if (((iin!=null)&&(iin instanceof de.blinkt.openvpn.api.IOpenVPNStatusCallback))) { +return ((de.blinkt.openvpn.api.IOpenVPNStatusCallback)iin); +} +return new de.blinkt.openvpn.api.IOpenVPNStatusCallback.Stub.Proxy(obj); +} +@Override public android.os.IBinder asBinder() +{ +return this; +} +@Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException +{ +switch (code) +{ +case INTERFACE_TRANSACTION: +{ +reply.writeString(DESCRIPTOR); +return true; +} +case TRANSACTION_newStatus: +{ +data.enforceInterface(DESCRIPTOR); +java.lang.String _arg0; +_arg0 = data.readString(); +java.lang.String _arg1; +_arg1 = data.readString(); +java.lang.String _arg2; +_arg2 = data.readString(); +java.lang.String _arg3; +_arg3 = data.readString(); +this.newStatus(_arg0, _arg1, _arg2, _arg3); +return true; +} +} +return super.onTransact(code, data, reply, flags); +} +private static class Proxy implements de.blinkt.openvpn.api.IOpenVPNStatusCallback +{ +private android.os.IBinder mRemote; +Proxy(android.os.IBinder remote) +{ +mRemote = remote; +} +@Override public android.os.IBinder asBinder() +{ +return mRemote; +} +public java.lang.String getInterfaceDescriptor() +{ +return DESCRIPTOR; +} +/** + * Called when the service has a new status for you. + */ +@Override public void newStatus(java.lang.String uuid, java.lang.String state, java.lang.String message, java.lang.String level) throws android.os.RemoteException +{ +android.os.Parcel _data = android.os.Parcel.obtain(); +try { +_data.writeInterfaceToken(DESCRIPTOR); +_data.writeString(uuid); +_data.writeString(state); +_data.writeString(message); +_data.writeString(level); +mRemote.transact(Stub.TRANSACTION_newStatus, _data, null, android.os.IBinder.FLAG_ONEWAY); +} +finally { +_data.recycle(); +} +} +} +static final int TRANSACTION_newStatus = (android.os.IBinder.FIRST_CALL_TRANSACTION + 0); +} +/** + * Called when the service has a new status for you. + */ +public void newStatus(java.lang.String uuid, java.lang.String state, java.lang.String message, java.lang.String level) throws android.os.RemoteException; +} diff --git a/app/gen/fil/libre/repwifiapp/R.java b/app/gen/fil/libre/repwifiapp/R.java index 581ff29..4874e0a 100644 --- a/app/gen/fil/libre/repwifiapp/R.java +++ b/app/gen/fil/libre/repwifiapp/R.java @@ -11,10 +11,6 @@ public final class R { public static final class array { public static final int debug_priority=0x7f050001; public static final int debug_priority_names=0x7f050000; - public static final int pref_example_list_titles=0x7f050002; - public static final int pref_example_list_values=0x7f050003; - public static final int pref_sync_frequency_titles=0x7f050004; - public static final int pref_sync_frequency_values=0x7f050005; } public static final class attr { } @@ -33,83 +29,123 @@ public final class R { public static final int checkmark=0x7f020002; public static final int checkmark_frame=0x7f020003; public static final int divider_shape=0x7f020004; - public static final int ic_launcher_bis=0x7f020005; - public static final int ic_stat_discon=0x7f020006; - public static final int ic_stat_repwifi=0x7f020007; - public static final int radio_button=0x7f020008; - public static final int radio_frame=0x7f020009; - public static final int repwifi_button=0x7f02000a; - public static final int repwifi_checkbox=0x7f02000b; - public static final int repwifi_progbar=0x7f02000c; - public static final int repwifi_radiobutton=0x7f02000d; - public static final int rw_prog_0=0x7f02000e; - public static final int rw_prog_1=0x7f02000f; - public static final int rw_prog_2=0x7f020010; - public static final int rw_prog_3=0x7f020011; + public static final int fil_logo=0x7f020005; + public static final int ic_launcher_bis=0x7f020006; + public static final int ic_stat_discon=0x7f020007; + public static final int ic_stat_repwifi=0x7f020008; + public static final int radio_button=0x7f020009; + public static final int radio_frame=0x7f02000a; + public static final int repwifi_button=0x7f02000b; + public static final int repwifi_checkbox=0x7f02000c; + public static final int repwifi_progbar=0x7f02000d; + public static final int repwifi_radiobutton=0x7f02000e; + public static final int rw_prog_0=0x7f02000f; + public static final int rw_prog_1=0x7f020010; + public static final int rw_prog_2=0x7f020011; + public static final int rw_prog_3=0x7f020012; } public static final class id { - public static final int btn_back=0x7f0a001d; - public static final int btn_delete=0x7f0a0015; - public static final int btn_disconnect=0x7f0a001c; - public static final int btn_hidden_ssid=0x7f0a0010; - public static final int btn_manage_nets=0x7f0a0011; - public static final int btn_next_hidden_ssid=0x7f0a000a; - public static final int btn_rescan=0x7f0a0018; - public static final int btn_scan=0x7f0a000f; - public static final int btn_select_hidden_ssid=0x7f0a0006; - public static final int chk_show_pass=0x7f0a0004; - public static final int chk_show_pass_details=0x7f0a0014; - public static final int img_logo=0x7f0a0012; - public static final int layout=0x7f0a000b; - public static final int layout_selnets=0x7f0a0016; - public static final int line=0x7f0a0007; - public static final int login_form=0x7f0a0001; - public static final int menu_config=0x7f0a0025; - public static final int menu_credits=0x7f0a0026; - public static final int menu_settings=0x7f0a0024; - public static final int pref_autoconnect=0x7f0a0021; - public static final int pref_autostart=0x7f0a0023; - public static final int pref_debug_prio=0x7f0a001e; - public static final int pref_dns1=0x7f0a001f; - public static final int pref_dns2=0x7f0a0020; - public static final int pref_progbar=0x7f0a0022; - public static final int progbar=0x7f0a000c; - public static final int scrollview=0x7f0a0019; - public static final int sign_in_button=0x7f0a0005; - public static final int table_networks=0x7f0a001a; - public static final int txt_credits=0x7f0a0000; - public static final int txt_insert_pass=0x7f0a0002; - public static final int txt_insert_ssid=0x7f0a0008; - public static final int txt_main=0x7f0a000e; - public static final int txt_msg=0x7f0a000d; - public static final int txt_net_details=0x7f0a0013; - public static final int txt_password=0x7f0a0003; - public static final int txt_selnets=0x7f0a0017; - public static final int txt_ssid=0x7f0a0009; - public static final int txt_status=0x7f0a001b; + public static final int btn_back=0x7f0a0016; + public static final int btn_delete=0x7f0a0023; + public static final int btn_disconnect=0x7f0a002a; + public static final int btn_hidden_ssid=0x7f0a001c; + public static final int btn_ip_settings=0x7f0a0021; + public static final int btn_manage_nets=0x7f0a001d; + public static final int btn_next_hidden_ssid=0x7f0a000c; + public static final int btn_rescan=0x7f0a0026; + public static final int btn_save_ip_settings=0x7f0a0015; + public static final int btn_save_vpn_settings=0x7f0a002d; + public static final int btn_scan=0x7f0a001b; + public static final int btn_select_hidden_ssid=0x7f0a0008; + public static final int btn_vpn_settings=0x7f0a0022; + public static final int chk_show_pass=0x7f0a0006; + public static final int chk_show_pass_details=0x7f0a0020; + public static final int chk_use_dhcp=0x7f0a000e; + public static final int img_logo=0x7f0a001e; + public static final int img_logo_fil=0x7f0a0001; + public static final int layout=0x7f0a0017; + public static final int layout_selnets=0x7f0a0024; + public static final int lbl_gateway=0x7f0a0013; + public static final int lbl_ip_settings=0x7f0a000d; + public static final int lbl_netmask=0x7f0a0011; + public static final int lbl_static_ip=0x7f0a000f; + public static final int lbl_vpn_settings=0x7f0a002b; + public static final int line=0x7f0a0009; + public static final int login_form=0x7f0a0003; + public static final int menu_btn_closeapp=0x7f0a0035; + public static final int menu_config=0x7f0a0036; + public static final int menu_credits=0x7f0a0037; + public static final int menu_settings=0x7f0a0034; + public static final int pref_autoconnect=0x7f0a0031; + public static final int pref_autostart=0x7f0a0033; + public static final int pref_debug_prio=0x7f0a002e; + public static final int pref_dns1=0x7f0a002f; + public static final int pref_dns2=0x7f0a0030; + public static final int pref_progbar=0x7f0a0032; + public static final int progbar=0x7f0a0018; + public static final int scrollview=0x7f0a0027; + public static final int sign_in_button=0x7f0a0007; + public static final int spin_vpn_profile=0x7f0a002c; + public static final int table_networks=0x7f0a0028; + public static final int txt_credits=0x7f0a0002; + public static final int txt_credits_title=0x7f0a0000; + public static final int txt_gateway=0x7f0a0014; + public static final int txt_insert_pass=0x7f0a0004; + public static final int txt_insert_ssid=0x7f0a000a; + public static final int txt_main=0x7f0a001a; + public static final int txt_msg=0x7f0a0019; + public static final int txt_net_details=0x7f0a001f; + public static final int txt_netmask=0x7f0a0012; + public static final int txt_password=0x7f0a0005; + public static final int txt_selnets=0x7f0a0025; + public static final int txt_ssid=0x7f0a000b; + public static final int txt_static_ip=0x7f0a0010; + public static final int txt_status=0x7f0a0029; } public static final class layout { public static final int activity_credits=0x7f030000; public static final int activity_input_password=0x7f030001; public static final int activity_input_ssid=0x7f030002; - public static final int activity_long_task=0x7f030003; - public static final int activity_main=0x7f030004; - public static final int activity_network_details=0x7f030005; - public static final int activity_select_network=0x7f030006; - public static final int activity_settings=0x7f030007; - public static final int activity_show_status=0x7f030008; + public static final int activity_ipv4_settings=0x7f030003; + public static final int activity_long_task=0x7f030004; + public static final int activity_main=0x7f030005; + public static final int activity_network_details=0x7f030006; + public static final int activity_select_network=0x7f030007; + public static final int activity_settings=0x7f030008; + public static final int activity_show_status=0x7f030009; + public static final int activity_vpn_settings=0x7f03000a; } public static final class menu { public static final int activity_input_ssid=0x7f090000; - public static final int activity_main=0x7f090001; + public static final int activity_ipv4_settings=0x7f090001; + public static final int activity_main=0x7f090002; + public static final int activity_vpn_settings=0x7f090003; } public static final class string { - public static final int action_sign_in_register=0x7f07002a; - public static final int action_sign_in_short=0x7f07002b; + /** + This file is part of RepWifiApp. + RepWifiApp is Copyright 2017 Filippo "Fil" Bergamo + French translation is Copyright (C) 2017 Nicola Spanti + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . + + */ public static final int app_name=0x7f070000; public static final int back_main=0x7f07000b; - public static final int button_text_next=0x7f070005; - public static final int confirm_kill_backend=0x7f070025; + public static final int button_text_next=0x7f070006; + public static final int confirm_exit_app=0x7f070025; + public static final int confirm_kill_backend=0x7f070026; public static final int confirm_reset_settings=0x7f070024; public static final int connect_hidden=0x7f07001c; public static final int credit_text=0x7f070013; @@ -117,66 +153,149 @@ public final class R { public static final int disconnect=0x7f07000c; public static final int dns1_default=0x7f070021; public static final int dns2_default=0x7f070022; - public static final int error_field_required=0x7f070031; - public static final int error_incorrect_password=0x7f070030; - public static final int error_invalid_email=0x7f07002e; - public static final int error_invalid_password=0x7f07002f; public static final int force_disconnect=0x7f07000d; - public static final int hello_world=0x7f070009; + public static final int hello_world=0x7f070070; public static final int input_ssid=0x7f07001d; - public static final int insert_nets_password=0x7f070006; - public static final int login_progress_signing_in=0x7f07002d; + public static final int insert_nets_password=0x7f070007; public static final int manage_networks=0x7f070011; + public static final int menu_closeapp=0x7f070002; public static final int menu_config=0x7f070014; public static final int menu_credits=0x7f070001; - public static final int menu_forgot_password=0x7f07002c; public static final int menu_settings=0x7f07001f; + public static final int msg_autoconnect_error=0x7f070037; + public static final int msg_checking_status=0x7f070030; public static final int msg_confirm_delete_network=0x7f070016; + public static final int msg_connect_fail=0x7f070034; + public static final int msg_connected_to=0x7f070041; + public static final int msg_connecting_to=0x7f07002d; + public static final int msg_disconnect_fail=0x7f070044; + public static final int msg_disconnected=0x7f070043; + public static final int msg_error_ip_format=0x7f070040; public static final int msg_interface_not_found=0x7f070015; + public static final int msg_invalid_gateway=0x7f070066; + public static final int msg_invalid_ip=0x7f070064; + public static final int msg_invalid_netmask=0x7f070065; + public static final int msg_log_save_fail=0x7f07003f; + public static final int msg_log_saved=0x7f07003e; + public static final int msg_netinfo_delete_fail=0x7f070036; + public static final int msg_netinfo_deleted=0x7f070035; + public static final int msg_network_list_fail=0x7f07003a; + public static final int msg_network_name_empty=0x7f07002c; + public static final int msg_network_save_fail=0x7f070033; + public static final int msg_network_saved=0x7f070032; + public static final int msg_no_network=0x7f07003b; + public static final int msg_no_saved_network=0x7f070046; + public static final int msg_os_unsupported=0x7f070048; + public static final int msg_password_empty=0x7f07002a; + public static final int msg_please_wait=0x7f070031; public static final int msg_root_denied=0x7f07001b; public static final int msg_root_disabled=0x7f07001a; + public static final int msg_scanning_for_nets=0x7f07002f; + public static final int msg_select_network_connect=0x7f07003c; + public static final int msg_select_network_manage=0x7f07003d; + public static final int msg_touch_open=0x7f070047; + public static final int msg_vpn_connect_error=0x7f07006e; + public static final int msg_vpn_disconnect=0x7f070068; + public static final int msg_vpn_disconnect_error=0x7f070067; + public static final int msg_vpn_launched=0x7f070069; + public static final int msg_vpn_no_permission=0x7f07006d; + public static final int msg_vpn_no_profile=0x7f070073; + public static final int msg_vpn_wrong_profile=0x7f07006a; public static final int no=0x7f070018; - public static final int pref_default_display_name=0x7f070037; - public static final int pref_description_social_recommendations=0x7f070035; - /** Example settings for Data & Sync - */ - public static final int pref_header_data_sync=0x7f070039; - /** Strings related to Settings - Example General settings - */ - public static final int pref_header_general=0x7f070033; - /** Example settings for Notifications - */ - public static final int pref_header_notifications=0x7f07003c; - public static final int pref_ringtone_silent=0x7f07003f; - public static final int pref_title_add_friends_to_messages=0x7f070038; - public static final int pref_title_display_name=0x7f070036; - public static final int pref_title_new_message_notifications=0x7f07003d; - public static final int pref_title_ringtone=0x7f07003e; - public static final int pref_title_social_recommendations=0x7f070034; - public static final int pref_title_sync_frequency=0x7f07003a; - public static final int pref_title_system_sync_settings=0x7f07003b; - public static final int pref_title_vibrate=0x7f070040; - /** Strings related to login - */ - public static final int prompt_email=0x7f070028; - public static final int prompt_password=0x7f070029; public static final int receiver_description=0x7f070023; - public static final int rescan=0x7f070004; + public static final int rescan=0x7f070005; public static final int retry=0x7f070019; - public static final int scan_networks=0x7f070002; + public static final int scan_networks=0x7f070003; public static final int select_saved_net=0x7f070020; - public static final int show_password=0x7f070007; - public static final int summary_kill_backend=0x7f070026; - public static final int title_activity_connect=0x7f070008; + public static final int show_password=0x7f070008; + public static final int summary_advanced_settings=0x7f07005a; + public static final int summary_autoconnect=0x7f070051; + public static final int summary_dns1=0x7f07004e; + public static final int summary_dns2=0x7f07004f; + public static final int summary_general_settings=0x7f07005b; + public static final int summary_kill_backend=0x7f070027; + public static final int summary_progbar=0x7f070053; + public static final int summary_restore_default=0x7f070057; + public static final int summary_start_at_boot=0x7f070055; + public static final int summary_vpn_settings=0x7f070072; + public static final int text_gateway=0x7f070060; + public static final int text_ip_address=0x7f070042; + public static final int text_ipv4_settings=0x7f07005d; + public static final int text_netinfo_last_used=0x7f070038; + public static final int text_password=0x7f070039; + public static final int text_presented_by=0x7f070028; + public static final int text_static_ip=0x7f07005e; + public static final int text_status=0x7f070045; + public static final int text_subnet_mask=0x7f07005f; + public static final int text_use_dhcp=0x7f07005c; + public static final int text_vpn_package_missing=0x7f07006c; + public static final int title_activity_connect=0x7f070009; public static final int title_activity_credits=0x7f070012; - public static final int title_activity_input_password=0x7f070027; + /** + This file is part of RepWifiApp. + RepWifiApp is Copyright 2017 Filippo "Fil" Bergamo + French translation is Copyright (C) 2017 Nicola Spanti + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . + + */ + public static final int title_activity_input_password=0x7f070074; public static final int title_activity_input_ssid=0x7f07001e; + public static final int title_activity_ipv4_settings=0x7f070061; public static final int title_activity_long_task=0x7f07000e; public static final int title_activity_manage_networks=0x7f07000f; - public static final int title_activity_select_network=0x7f070003; - public static final int title_activity_settings=0x7f070032; + public static final int title_activity_select_network=0x7f070004; + /** + This file is part of RepWifiApp. + RepWifiApp is Copyright 2017 Filippo "Fil" Bergamo + French translation is Copyright (C) 2017 Nicola Spanti + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . + + */ + public static final int title_activity_settings=0x7f070075; public static final int title_activity_show_status=0x7f07000a; + public static final int title_activity_vpn_settings=0x7f07006f; + public static final int title_advanced_settings=0x7f070058; + public static final int title_autoconnect=0x7f070050; + public static final int title_dns_1=0x7f07004c; + public static final int title_dns_2=0x7f07004d; + public static final int title_dump_logs=0x7f07004a; + public static final int title_general_settings=0x7f070059; + public static final int title_input_password=0x7f070029; + public static final int title_input_ssid=0x7f07002b; + public static final int title_log_prio=0x7f070049; + public static final int title_progbar=0x7f070052; + public static final int title_reset_backend=0x7f07004b; + public static final int title_restore_default=0x7f070056; + public static final int title_scanning=0x7f07002e; + public static final int title_start_at_boot=0x7f070054; + public static final int title_vpn_settings=0x7f07006b; + public static final int txt_back=0x7f070063; + public static final int txt_save=0x7f070071; + public static final int txt_save_ip_settings=0x7f070062; public static final int yes=0x7f070017; } public static final class style { diff --git a/app/res/drawable/fil_logo.png b/app/res/drawable/fil_logo.png new file mode 100644 index 0000000..d862888 Binary files /dev/null and b/app/res/drawable/fil_logo.png differ diff --git a/app/res/layout/activity_credits.xml b/app/res/layout/activity_credits.xml index 04280d4..d114ce1 100644 --- a/app/res/layout/activity_credits.xml +++ b/app/res/layout/activity_credits.xml @@ -1,16 +1,44 @@ - + android:background="@color/black" + android:padding="15dp" > + + + + + - \ No newline at end of file + \ No newline at end of file diff --git a/app/res/layout/activity_ipv4_settings.xml b/app/res/layout/activity_ipv4_settings.xml new file mode 100644 index 0000000..5c0887c --- /dev/null +++ b/app/res/layout/activity_ipv4_settings.xml @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + +