From a2841483fcdeaab3213a86c9ab25bcce4637cfc4 Mon Sep 17 00:00:00 2001 From: Max Lv Date: Sun, 28 Apr 2013 10:04:07 +0800 Subject: [PATCH] refine UI --- AndroidManifest.xml | 4 +-- assets/fonts/Iceland.ttf | Bin 0 -> 47632 bytes pom.xml | 4 +-- res/layout/layout_switch.xml | 11 +++++++ res/values/strings.xml | 2 +- src/com/github/shadowsocks/Shadowsocks.java | 34 ++++++++++++++++++++ src/com/github/shadowsocks/Utils.java | 29 +++++++++++++++++ 7 files changed, 79 insertions(+), 5 deletions(-) create mode 100644 assets/fonts/Iceland.ttf diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 388b0a33..4c1302b1 100755 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -2,8 +2,8 @@ + android:versionCode="21" + android:versionName="1.3.9"> diff --git a/assets/fonts/Iceland.ttf b/assets/fonts/Iceland.ttf new file mode 100644 index 0000000000000000000000000000000000000000..df1938c29ed86f9a0b678b6ded65958d93799a0e GIT binary patch literal 47632 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 literal 0 HcmV?d00001 diff --git a/pom.xml b/pom.xml index 0818c3ab..19a74594 100755 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.github.shadowsocks shadowsocks - 1.3.8 + 1.3.9 apk Shadowsocks @@ -38,7 +38,7 @@ com.actionbarsherlock actionbarsherlock - 4.3.0 + 4.2.0 apklib diff --git a/res/layout/layout_switch.xml b/res/layout/layout_switch.xml index 973d96cb..01b97abe 100644 --- a/res/layout/layout_switch.xml +++ b/res/layout/layout_switch.xml @@ -4,6 +4,17 @@ android:layout_width="match_parent" android:layout_height="match_parent"> + + - Shadowsocks + shadowsocks Service Controller diff --git a/src/com/github/shadowsocks/Shadowsocks.java b/src/com/github/shadowsocks/Shadowsocks.java index 39f2ea0c..5189711c 100755 --- a/src/com/github/shadowsocks/Shadowsocks.java +++ b/src/com/github/shadowsocks/Shadowsocks.java @@ -40,6 +40,7 @@ package com.github.shadowsocks; import android.app.AlertDialog; import android.app.ProgressDialog; +import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; @@ -47,6 +48,7 @@ import android.content.SharedPreferences.Editor; import android.content.SharedPreferences.OnSharedPreferenceChangeListener; import android.content.pm.PackageManager.NameNotFoundException; import android.content.res.AssetManager; +import android.graphics.Typeface; import android.os.Bundle; import android.os.Handler; import android.os.Message; @@ -55,6 +57,7 @@ import android.util.Log; import android.view.KeyEvent; import android.widget.CompoundButton; import android.widget.RelativeLayout; +import android.widget.TextView; import android.widget.Toast; import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuItem; @@ -67,6 +70,7 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.util.Hashtable; public class Shadowsocks extends UnifiedSherlockPreferenceActivity implements CompoundButton.OnCheckedChangeListener, OnSharedPreferenceChangeListener { @@ -186,9 +190,16 @@ public class Shadowsocks extends UnifiedSherlockPreferenceActivity getSupportActionBar().setCustomView(switchLayout); getSupportActionBar().setDisplayShowTitleEnabled(false); getSupportActionBar().setDisplayShowCustomEnabled(true); + getSupportActionBar().setDisplayShowHomeEnabled(false); + switchButton = (Switch) switchLayout.findViewById(R.id.switchButton); + TextView title = (TextView) switchLayout.findViewById(R.id.title); + Typeface tf = Typefaces.get(this, "fonts/Iceland.ttf"); + if (tf != null) title.setTypeface(tf); + title.setText(R.string.app_name); + } @Override @@ -616,4 +627,27 @@ public class Shadowsocks extends UnifiedSherlockPreferenceActivity } } + public static class Typefaces { + private static final String TAG = "Typefaces"; + + private static final Hashtable cache = new Hashtable(); + + public static Typeface get(Context c, String assetPath) { + synchronized (cache) { + if (!cache.containsKey(assetPath)) { + try { + Typeface t = Typeface.createFromAsset(c.getAssets(), + assetPath); + cache.put(assetPath, t); + } catch (Exception e) { + Log.e(TAG, "Could not get typeface '" + assetPath + + "' because " + e.getMessage()); + return null; + } + } + return cache.get(assetPath); + } + } + } + } diff --git a/src/com/github/shadowsocks/Utils.java b/src/com/github/shadowsocks/Utils.java index 2ab89644..6d22d96f 100755 --- a/src/com/github/shadowsocks/Utils.java +++ b/src/com/github/shadowsocks/Utils.java @@ -45,9 +45,14 @@ import android.content.pm.PackageManager.NameNotFoundException; import android.graphics.drawable.Drawable; import android.os.Environment; import android.util.Log; +import org.apache.http.conn.util.InetAddressUtils; import java.io.*; +import java.net.InetAddress; +import java.net.NetworkInterface; import java.util.ArrayList; +import java.util.Collections; +import java.util.List; public class Utils { @@ -71,6 +76,30 @@ public class Utils { private static String iptables = null; private static String data_path = null; + /** + * Get IP address from first non-localhost interface + */ + public static boolean isIPv6Support() { + try { + List interfaces = Collections.list(NetworkInterface.getNetworkInterfaces()); + for (NetworkInterface intf : interfaces) { + List addrs = Collections.list(intf.getInetAddresses()); + for (InetAddress addr : addrs) { + if (!addr.isLoopbackAddress()) { + String sAddr = addr.getHostAddress().toUpperCase(); + boolean isIPv6 = InetAddressUtils.isIPv6Address(sAddr); + if (isIPv6) { + return true; + } + } + } + } + } catch (Exception ex) { + // Ignore + } // for now eat exceptions + return false; + } + public static String getABI() { String abi = getSystemProperty(ABI_PROP); if (abi != null) {