diff options
| author | Arne Schwabe <arne@rfc2549.org> | 2016-01-07 15:29:37 +0100 | 
|---|---|---|
| committer | Arne Schwabe <arne@rfc2549.org> | 2016-01-07 15:29:37 +0100 | 
| commit | a3354eb8ca16240ae869e8a86611528c6ab651d3 (patch) | |
| tree | e8c41d6376f714fb2cb60227b8743e46f54e0001 | |
| parent | 7dc3bb722082ffd3b8d8e375c5dd98f981aa0022 (diff) | |
Show VPN Status in profile list, tweak Status reporting
7 files changed, 97 insertions, 43 deletions
diff --git a/main/src/main/java/de/blinkt/openvpn/core/ConfigParser.java b/main/src/main/java/de/blinkt/openvpn/core/ConfigParser.java index 0438022b..5b8cb2dd 100644 --- a/main/src/main/java/de/blinkt/openvpn/core/ConfigParser.java +++ b/main/src/main/java/de/blinkt/openvpn/core/ConfigParser.java @@ -398,7 +398,7 @@ public class ConfigParser {              np.mCustomRoutesv6 = customIPv6Routes;          } -         +          Vector<String> routeNoPull = getOption("route-nopull", 1, 1);          np.mRoutenopull=true; diff --git a/main/src/main/java/de/blinkt/openvpn/core/OpenVPNService.java b/main/src/main/java/de/blinkt/openvpn/core/OpenVPNService.java index f0c788ee..cbe92460 100644 --- a/main/src/main/java/de/blinkt/openvpn/core/OpenVPNService.java +++ b/main/src/main/java/de/blinkt/openvpn/core/OpenVPNService.java @@ -860,7 +860,7 @@ public class OpenVPNService extends VpnService implements StateListener, Callbac              // CONNECTED              // Does not work :(              String msg = getString(resid); -            showNotification(msg + " " + VpnStatus.getCleanLogMessage(level, logmessage), +            showNotification(VpnStatus.getLastCleanLogMessage(this),                      msg, lowpriority, 0, level);          } diff --git a/main/src/main/java/de/blinkt/openvpn/core/VPNLaunchHelper.java b/main/src/main/java/de/blinkt/openvpn/core/VPNLaunchHelper.java index 72f21ce3..73a1c3f0 100644 --- a/main/src/main/java/de/blinkt/openvpn/core/VPNLaunchHelper.java +++ b/main/src/main/java/de/blinkt/openvpn/core/VPNLaunchHelper.java @@ -126,12 +126,13 @@ public class VPNLaunchHelper {  	public static void startOpenVpn(VpnProfile startprofile, Context context) { -		if(writeMiniVPN(context)==null) { +        VpnStatus.logInfo(R.string.building_configration); +        VpnStatus.updateStateString("VPN_GENERATE_CONFIG", "", R.string.building_configration, VpnStatus.ConnectionStatus.LEVEL_START); +        if(writeMiniVPN(context)==null) {  			VpnStatus.logError("Error writing minivpn binary");  			return;  		} -		VpnStatus.logInfo(R.string.building_configration);  		Intent startVPN = startprofile.prepareStartService(context);  		if(startVPN!=null) diff --git a/main/src/main/java/de/blinkt/openvpn/core/VpnStatus.java b/main/src/main/java/de/blinkt/openvpn/core/VpnStatus.java index 1f866ab7..c0f958c4 100644 --- a/main/src/main/java/de/blinkt/openvpn/core/VpnStatus.java +++ b/main/src/main/java/de/blinkt/openvpn/core/VpnStatus.java @@ -73,10 +73,12 @@ public class VpnStatus {      private static final int MAXLOGENTRIES = 1000; -    public static String getCleanLogMessage(ConnectionStatus level, String logMessage) { -        switch (level) { + +    public static String getLastCleanLogMessage(Context c) { +        String message = mLaststatemsg; +        switch (mLastLevel) {              case LEVEL_CONNECTED: -                String[] parts = logMessage.split(","); +                String[] parts = mLaststatemsg.split(",");                  /*                     (a) the integer unix date/time,                     (b) the state name, @@ -90,14 +92,21 @@ public class VpnStatus {                     5 (h) optional local port, and                     6 (i) optional TUN/TAP local IPv6 address.  */ -                    // Return only the assigned IP addresses in the UI -                if (parts.length < 7) -                    return logMessage; -                return String.format(Locale.US, "%s %s", parts[1], parts[6]); -            default: -                return logMessage; +                // Return only the assigned IP addresses in the UI +                if (parts.length >= 7) +                    message = String.format(Locale.US, "%s %s", parts[1], parts[6]); +                break;          } +        String prefix = c.getString(mLastStateresid) + ":"; +        String status = mLaststate; +        if (status.equals("NOPROCESS")) +            prefix = ""; +        if (mLastStateresid == R.string.unknown_state) +            prefix += status; + +        return prefix + message; +      }      public enum ConnectionStatus { @@ -107,9 +116,10 @@ public class VpnStatus {          LEVEL_CONNECTING_NO_SERVER_REPLY_YET,          LEVEL_NONETWORK,          LEVEL_NOTCONNECTED, +        LEVEL_START,          LEVEL_AUTH_FAILED,          LEVEL_WAITING_FOR_USER_INPUT, -        UNKNOWN_LEVEL +        UNKNOWN_LEVEL;      }      public enum LogLevel { diff --git a/main/src/main/java/de/blinkt/openvpn/fragments/LogFragment.java b/main/src/main/java/de/blinkt/openvpn/fragments/LogFragment.java index fb6f8371..d197efd9 100644 --- a/main/src/main/java/de/blinkt/openvpn/fragments/LogFragment.java +++ b/main/src/main/java/de/blinkt/openvpn/fragments/LogFragment.java @@ -650,20 +650,15 @@ public class LogFragment extends ListFragment implements StateListener, SeekBar.      @Override      public void updateState(final String status, final String logMessage, final int resId, final ConnectionStatus level) {          if (isAdded()) { -            final String cleanLogMessage = VpnStatus.getCleanLogMessage(level, logMessage); +            final String cleanLogMessage = VpnStatus.getLastCleanLogMessage(getActivity());              getActivity().runOnUiThread(new Runnable() {                  @Override                  public void run() {                      if (isAdded()) { -                        String prefix = getString(resId) + ":"; -                        if (status.equals("BYTECOUNT") || status.equals("NOPROCESS")) -                            prefix = ""; -                        if (resId == R.string.unknown_state) -                            prefix += status;                          if (mSpeedView != null) { -                            mSpeedView.setText(prefix + cleanLogMessage); +                            mSpeedView.setText(cleanLogMessage);                          }                          if (mConnectStatus != null)                              mConnectStatus.setText(getString(resId)); diff --git a/main/src/main/java/de/blinkt/openvpn/fragments/VPNProfileList.java b/main/src/main/java/de/blinkt/openvpn/fragments/VPNProfileList.java index cf712e7c..0b161615 100644 --- a/main/src/main/java/de/blinkt/openvpn/fragments/VPNProfileList.java +++ b/main/src/main/java/de/blinkt/openvpn/fragments/VPNProfileList.java @@ -31,12 +31,14 @@ import de.blinkt.openvpn.activities.ConfigConverter;  import de.blinkt.openvpn.activities.FileSelect;  import de.blinkt.openvpn.activities.VPNPreferences;  import de.blinkt.openvpn.core.ProfileManager; +import de.blinkt.openvpn.core.VpnStatus;  import java.util.Collection;  import java.util.Comparator;  import java.util.TreeSet; -public class VPNProfileList extends ListFragment implements OnClickListener { + +public class VPNProfileList extends ListFragment implements OnClickListener, VpnStatus.StateListener {      public final static int RESULT_VPN_DELETED = Activity.RESULT_FIRST_USER;      public final static int RESULT_VPN_DUPLICATE = Activity.RESULT_FIRST_USER + 1; @@ -49,6 +51,18 @@ public class VPNProfileList extends ListFragment implements OnClickListener {      private static final int FILE_PICKER_RESULT_KITKAT = 392;      private static final int MENU_IMPORT_PROFILE = Menu.FIRST + 1; +    private String mLastStatusMessage; + +    @Override +    public void updateState(String state, String logmessage, final int localizedResId, VpnStatus.ConnectionStatus level) { +        getActivity().runOnUiThread(new Runnable() { +            @Override +            public void run() { +                mLastStatusMessage = getString(localizedResId); +                mArrayadapter.notifyDataSetChanged(); +            } +        }); +    }      class VPNArrayAdapter extends ArrayAdapter<VpnProfile> { @@ -62,11 +76,12 @@ public class VPNProfileList extends ListFragment implements OnClickListener {          public View getView(final int position, View convertView, ViewGroup parent) {              View v = super.getView(position, convertView, parent); +            final VpnProfile profile = (VpnProfile) getListAdapter().getItem(position); +              View titleview = v.findViewById(R.id.vpn_list_item_left);              titleview.setOnClickListener(new OnClickListener() {                  @Override                  public void onClick(View v) { -                    VpnProfile profile = (VpnProfile) getListAdapter().getItem(position);                      startVPN(profile);                  }              }); @@ -76,12 +91,21 @@ public class VPNProfileList extends ListFragment implements OnClickListener {                  @Override                  public void onClick(View v) { -                    VpnProfile editProfile = (VpnProfile) getListAdapter().getItem(position); -                    editVPN(editProfile); +                    editVPN(profile);                  }              }); +            TextView subtitle = (TextView) v.findViewById(R.id.vpn_item_subtitle); +            if (ProfileManager.getLastConnectedVpn() == profile) { +                subtitle.setText(mLastStatusMessage); +                subtitle.setVisibility(View.VISIBLE); +            } else { +                subtitle.setText(""); +                subtitle.setVisibility(View.GONE); +            } + +              return v;          }      } @@ -123,6 +147,18 @@ public class VPNProfileList extends ListFragment implements OnClickListener {      @Override +    public void onResume() { +        super.onResume(); +        VpnStatus.addStateListener(this); +    } + +    @Override +    public void onPause() { +        super.onPause(); +        VpnStatus.removeStateListener(this); +    } + +    @Override      public View onCreateView(LayoutInflater inflater, ViewGroup container,                               Bundle savedInstanceState) {          View v = inflater.inflate(R.layout.vpn_profile_list, container, false); diff --git a/main/src/main/res/layout/vpn_list_item.xml b/main/src/main/res/layout/vpn_list_item.xml index c385166c..5f2e8d0b 100644 --- a/main/src/main/res/layout/vpn_list_item.xml +++ b/main/src/main/res/layout/vpn_list_item.xml @@ -1,5 +1,4 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- +<?xml version="1.0" encoding="utf-8"?><!--       Copyright (C) 2011 The Android Open Source Project       Licensed under the Apache License, Version 2.0 (the "License"); @@ -16,38 +15,49 @@  -->  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" -              xmlns:tools="http://schemas.android.com/tools" -              android:layout_width="match_parent" +    xmlns:tools="http://schemas.android.com/tools" +    android:layout_width="match_parent"      android:layout_height="wrap_content" +    android:focusable="false"      android:gravity="center_vertical" -    android:minHeight="?android:attr/listPreferredItemHeight" -    android:focusable="false"> +    android:minHeight="?android:attr/listPreferredItemHeight">      <LinearLayout          android:id="@+id/vpn_list_item_left" -        android:layout_width="0dp"          android:layout_height="match_parent" -        android:layout_weight="1" +        android:layout_width="wrap_content"          android:background="?android:attr/selectableItemBackground" -        android:gravity="center_vertical" -        android:focusable="true"> +        android:focusable="true" +        android:layout_weight="1" +        android:gravity="center_vertical">          <LinearLayout              android:id="@android:id/widget_frame"              android:layout_width="wrap_content"              android:layout_height="match_parent"              android:gravity="center_vertical" -            android:orientation="vertical" /> +            android:orientation="vertical"> -               <TextView +            <TextView                  android:id="@+id/vpn_item_title" -                tools:text="Vpn Name"                  android:layout_width="wrap_content"                  android:layout_height="wrap_content"                  android:ellipsize="marquee"                  android:fadingEdge="horizontal"                  android:singleLine="true" -                android:textAppearance="?android:attr/textAppearanceMedium" /> +                android:textAppearance="?android:attr/textAppearanceMedium" +                tools:text="Vpn Name" /> + +            <TextView +                android:id="@+id/vpn_item_subtitle" +                android:layout_width="wrap_content" +                android:layout_height="wrap_content" +                android:ellipsize="marquee" +                android:fadingEdge="horizontal" +                android:singleLine="true" +                android:textAppearance="?android:attr/textAppearanceSmall" +                tools:text="Not connected!" /> +        </LinearLayout>      </LinearLayout> @@ -55,9 +65,9 @@          android:layout_width="2dip"          android:layout_height="match_parent"          android:layout_marginBottom="5dip" -        android:focusable="false"          android:layout_marginTop="5dip" -        android:background="@android:drawable/divider_horizontal_dark" /> +        android:background="@android:drawable/divider_horizontal_dark" +        android:focusable="false" />      <ImageView          android:id="@+id/quickedit_settings" @@ -66,9 +76,11 @@          android:layout_gravity="center"          android:background="?android:attr/selectableItemBackground"          android:contentDescription="@string/configure_the_vpn" +        android:focusable="true" +        android:paddingEnd="?android:attr/scrollbarSize"          android:paddingLeft="15dip"          android:paddingRight="?android:attr/scrollbarSize" -        android:src="@drawable/vpn_item_edit" -        android:focusable="true"/> +        android:paddingStart="15dip" +        android:src="@drawable/vpn_item_edit" />  </LinearLayout>
\ No newline at end of file  | 
