From fe51b71c5440125e7123b9c2137f53d78d4f9dd9 Mon Sep 17 00:00:00 2001 From: Mygod Date: Mon, 9 Nov 2015 13:45:55 +0800 Subject: [PATCH 1/8] Update Chinese translations --- src/main/res/values-zh/strings.xml | 13 +++++++++---- src/main/res/values/configs.xml | 6 +++--- src/main/res/values/strings.xml | 10 ++++------ 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/src/main/res/values-zh/strings.xml b/src/main/res/values-zh/strings.xml index 795ba45f..a25703b2 100755 --- a/src/main/res/values-zh/strings.xml +++ b/src/main/res/values-zh/strings.xml @@ -2,10 +2,9 @@ 影梭 - shadowsocks 服务器设置 配置文件 - 配置文件名称 + 切换其他配置文件 服务器 远程服务器的地址 远程端口 @@ -41,7 +40,7 @@ 正在关闭…… 后台服务启动失败:%s 关闭 - 本地端口号应大于1024 + 本地端口号应大于 1024 端口号不能为空 代理服务器地址不能为空 连接 @@ -65,7 +64,7 @@ 由远程服务器转发 UDP 协议的数据包 一次性认证 - 启用一次性认证(实验性) + 启用一次性认证(实验性) IPv6 路由 向远程服务器转发 IPv6 流量 @@ -90,5 +89,11 @@ 已删除 撤销 + 全局设置 + 其他 + NAT 模式(不推荐) + 从 VPN 模式切换为 NAT 模式 + NAT 模式需要 ROOT 权限 + 配置文件名称 diff --git a/src/main/res/values/configs.xml b/src/main/res/values/configs.xml index 8f1227e0..22624791 100644 --- a/src/main/res/values/configs.xml +++ b/src/main/res/values/configs.xml @@ -1,7 +1,7 @@ - ".cn",".07073.com",".10010.com",".100ye.com",".114la.com",".115.com",".120ask.com",".126.com",".126.net",".1616.net",".163.com",".17173.com",".1778.com",".178.com",".17u.com",".19lou.com",".1o26.com",".1ting.com",".21cn.com",".2345.com",".265.com",".265g.com",".28.com",".28tui.com",".2hua.com",".2mdn.net",".315che.com",".3366.com",".360buy.com",".360buyimg.com",".360doc.com",".36kr.com",".39.net",".3dmgame.com",".4399.com",".4738.com",".500wan.com",".51.com",".51.la",".5173.com",".51auto.com",".51buy.com",".51cto.com",".51fanli.com",".51job.com",".52kmh.com",".52pk.net",".52tlbb.com",".53kf.com",".55bbs.com",".55tuan.com",".56.com",".58.com",".591hx.com",".5d6d.net",".61.com",".70e.com",".777wyx.com",".778669.com",".7c.com",".7k7k.com",".88db.com",".91.com",".99bill.com",".akamaitechnologies.com",".akamaitech.net",".akamai.net",".a135.net",".abang.com",".abchina.com",".ad1111.com",".admin5.com",".adnxs.com",".adobe.com",".adroll.com",".ads8.com",".adsame.com",".adsonar.com",".adtechus.com",".aibang.com",".aifang.com",".aili.com",".aipai.com",".aizhan.com",".ali213.net",".alibaba.com",".alicdn.com",".aliexpress.com",".alimama.com",".alipay.com",".alipayobjects.com",".alisoft.com",".alivv.com",".aliyun.com",".allyes.com",".amazon.com",".anjuke.com",".anzhi.com",".aol.com",".apple.com",".arpg2.com",".atdmt.com",".b2b168.com",".babytree.com",".baidu.com",".baidupcs.com",".baihe.com",".baixing.com",".bankcomm.com",".baomihua.com",".bdimg.com",".bdstatic.com",".bendibao.com",".betrad.com",".bilibili.tv",".bing.com",".bitauto.com",.blogchina.com",".blueidea.com",".bluekai.com",".booksky.org",".cachefly.net",".caixin.com",".ccb.com",".ccidnet.com",".cctv.com",".china.com",".chinabyte.com",".chinahr.com",".chinanews.com",".chinaunix.net",".chinaw3.com",".chinaz.com",".chuangelm.com",".ci123.com",".cmbchina.com",".cnbeta.com",".cnblogs.com",".cncn.com",".cnhubei.com",".cnki.net",".cnmo.com",".cnxad.com",".cnzz.com",".cocoren.com",".compete.com",".comsenz.com",".coo8.com",".cqnews.net",".crsky.com",".csdn.net",".ct10000.com",".ctrip.com",".dangdang.com",".daqi.com",".dayoo.com",".dbank.com",".ddmap.com",".dedecms.com",".dh818.com",".diandian.com",".dianping.com",".discuz.net",".doc88.com",".docin.com",".donews.com",".dospy.com",".douban.com",".douban.fm",".doubleclick.com",".doubleclick.net",".duba.net",".duote.com",".duowan.com",".dzwww.com",".eastday.com",".eastmoney.com",".ebay.com",".elong.com",".ename.net",".etao.com",".exam8.com",".eye.rs",".fantong.com",".fastcdn.com",".fblife.com",".fengniao.com",".fenzhi.com",".flickr.com",".fobshanghai.com",".ftuan.com",".funshion.com",".fx120.net",".game3737.com",".gamersky.com",".gamestlbb.com",".gamesville.com",".ganji.com",".gfan.com",".gongchang.com",".google-analytics.com",".gougou.com",".gtimg.com",".hao123.com",".haodf.com",".harrenmedianetwork.com",".hc360.com",".hefei.cc",".hf365.com",".hiapk.com",".hichina.com",".homeinns.com",".hotsales.net",".house365.com",".huaban.com",".huanqiu.com",".hudong.com",".hupu.com",".iask.com",".iciba.com",".icson.com",".ifeng.com",".iloveyouxi.com",".im286.com",".imanhua.com",".cctvpic.com",".imrworldwide.com",".invitemedia.com",".ip138.com",".ipinyou.com",".iqilu.com",".iqiyi.com",".irs01.com",".irs01.net",".it168.com",".iteye.com",".iyaya.com",".jb51.net",".jiathis.com",".jiayuan.com",".jing.fm",".jinti.com",".jqw.com",".jumei.com",".jxedt.com",".jysq.net",".kaixin001.com",".kandian.com",".kdnet.net",".kimiss.com",".ku6.com",".ku6cdn.com",".ku6img.com",".kuaidi100.com",".kugou.com",".l99.com",".lady8844.com",".lafaso.com",".lashou.com",".legolas-media.com",".lehecai.com",".leho.com",".letv.com",".liebiao.com",".lietou.com",".linezing.com",".linkedin.com",".live.com",".longhoo.net",".lusongsong.com",".lxdns.com",".lycos.com",".lygo.com",".m18.com",".m1905.com",".made-in-china.com",".makepolo.com",".mangocity.com",".manzuo.com",".mapbar.com",".mathtag.com",".mediaplex.com",".mediav.com",".meilele.com",".meilishuo.com",".meishichina.com",".meituan.com",".meizu.com",".miaozhen.com",".microsoft.com",".miercn.com",".mlt01.com",".mmstat.com",".mnwan.com",".mogujie.com",".mookie1.com",".moonbasa.com",".mop.com",".mosso.com",".mplife.com",".msn.com",".mtime.com",".mumayi.com",".mydrivers.com",".net114.com",".netease.com",".newsmth.net",".nipic.com",".nowec.com",".nuomi.com",".oadz.com",".oeeee.com",".onetad.com",".onlinedown.net",".onlylady.com",".oschina.net",".otwan.com",".paipai.com",".paypal.com",".pchome.net",".pcpop.com",".pengyou.com",".php100.com",".phpwind.net",".pingan.com",".pixlr.com",".pp.cc",".ppstream.com",".pptv.com",".pubmatic.com",".q150.com",".qianlong.com",".qidian.com",".qingdaonews.com",".qire123.com",".qiushibaike.com",".qiyou.com",".qjy168.com",".qq.com",".qq937.com",".qstatic.com",".quantserve.com",".qunar.com",".readnovel.com",".renren.com",".rtbidder.net",".scanscout.com",".scorecardresearch.com",".sdo.com",".seowhy.com",".serving-sys.com",".sf-express.com",".shangdu.com",".sina.com",".sinahk.net",".sinajs.com",".smzdm.com",".snyu.com",".sodu.org",".sogou.com",".sohu.com",".soku.com",".sootoo.com",".soso.com",".soufun.com",".sourceforge.net",".staticsdo.com",".stockstar.com",".sttlbb.com",".suning.com",".szhome.com",".sznews.com",".tangdou.com",".tanx.com",".tao123.com",".taobao.com",".taobaocdn.com",".tbcache.com",".tdimg.com",".tenpay.com",".tgbus.com",".theplanet.com",".thethirdmedia.com",".tiancity.com",".tianji.com",".tiao8.info",".tiexue.net",".titan24.com",".tmall.com",".tom.com",".toocle.com",".tremormedia.com",".tuan800.com",".tudou.com",".tudouui.com",".tui18.com",".tuniu.com",".twcczhu.com",".u17.com",".ucjoy.com",".ulink.cc",".uniontoufang.com",".up2c.com",".uuu9.com",".uuzu.com",".vancl.com",".verycd.com",".vipshop.com",".vizu.com",".vjia.com",".weibo.com",".weiphone.com",".west263.com",".whlongda.com",".wrating.com",".wumii.com",".xiami.com",".xiaomi.com",".xiazaiba.com",".xici.net",".xinhuanet.com",".xinnet.com",".xitek.com",".xiu.com",".xunlei.com",".xyxy.net",".yaolan.com",".yesky.com",".yieldmanager.com",".yihaodian.com",".yingjiesheng.com",".yinyuetai.com",".yiqifa.com",".ykimg.com",".ynet.com",".yoka.com",".yolk7.com",".youboy.com",".youdao.com",".yougou.com",".youku.com",".youshang.com",".yupoo.com",".yxlady.com",".yyets.com",".zhaodao123.com",".zhaopin.com",".zhenai.com",".zhibo8.cc",".zhihu.com",".zhubajie.com",".zongheng.com",".zoosnet.net",".zqgame.com",".ztgame.com",".zx915.com",".miui.com",".mi-idc.com",".qhimg.com",".wandoujia.com" + ".cn",".07073.com",".10010.com",".100ye.com",".114la.com",".115.com",".120ask.com",".126.com",".126.net",".1616.net",".163.com",".17173.com",".1778.com",".178.com",".17u.com",".19lou.com",".1o26.com",".1ting.com",".21cn.com",".2345.com",".265.com",".265g.com",".28.com",".28tui.com",".2hua.com",".2mdn.net",".315che.com",".3366.com",".360buy.com",".360buyimg.com",".360doc.com",".36kr.com",".39.net",".3dmgame.com",".4399.com",".4738.com",".500wan.com",".51.com",".51.la",".5173.com",".51auto.com",".51buy.com",".51cto.com",".51fanli.com",".51job.com",".52kmh.com",".52pk.net",".52tlbb.com",".53kf.com",".55bbs.com",".55tuan.com",".56.com",".58.com",".591hx.com",".5d6d.net",".61.com",".70e.com",".777wyx.com",".778669.com",".7c.com",".7k7k.com",".88db.com",".91.com",".99bill.com",".akamaitechnologies.com",".akamaitech.net",".akamai.net",".a135.net",".abang.com",".abchina.com",".ad1111.com",".admin5.com",".adnxs.com",".adobe.com",".adroll.com",".ads8.com",".adsame.com",".adsonar.com",".adtechus.com",".aibang.com",".aifang.com",".aili.com",".aipai.com",".aizhan.com",".ali213.net",".alibaba.com",".alicdn.com",".aliexpress.com",".alimama.com",".alipay.com",".alipayobjects.com",".alisoft.com",".alivv.com",".aliyun.com",".allyes.com",".amazon.com",".anjuke.com",".anzhi.com",".aol.com",".apple.com",".arpg2.com",".atdmt.com",".b2b168.com",".babytree.com",".baidu.com",".baidupcs.com",".baihe.com",".baixing.com",".bankcomm.com",".baomihua.com",".bdimg.com",".bdstatic.com",".bendibao.com",".betrad.com",".bilibili.tv",".bing.com",".bitauto.com",.blogchina.com",".blueidea.com",".bluekai.com",".booksky.org",".cachefly.net",".caixin.com",".ccb.com",".ccidnet.com",".cctv.com",".china.com",".chinabyte.com",".chinahr.com",".chinanews.com",".chinaunix.net",".chinaw3.com",".chinaz.com",".chuangelm.com",".ci123.com",".cmbchina.com",".cnbeta.com",".cnblogs.com",".cncn.com",".cnhubei.com",".cnki.net",".cnmo.com",".cnxad.com",".cnzz.com",".cocoren.com",".compete.com",".comsenz.com",".coo8.com",".cqnews.net",".crsky.com",".csdn.net",".ct10000.com",".ctrip.com",".dangdang.com",".daqi.com",".dayoo.com",".dbank.com",".ddmap.com",".dedecms.com",".dh818.com",".diandian.com",".dianping.com",".discuz.net",".doc88.com",".docin.com",".donews.com",".dospy.com",".douban.com",".douban.fm",".doubleclick.com",".doubleclick.net",".duba.net",".duote.com",".duowan.com",".dzwww.com",".eastday.com",".eastmoney.com",".ebay.com",".elong.com",".ename.net",".etao.com",".exam8.com",".eye.rs",".fantong.com",".fastcdn.com",".fblife.com",".fengniao.com",".fenzhi.com",".flickr.com",".fobshanghai.com",".ftuan.com",".funshion.com",".fx120.net",".game3737.com",".gamersky.com",".gamestlbb.com",".gamesville.com",".ganji.com",".gfan.com",".gongchang.com",".google-analytics.com",".gougou.com",".gtimg.com",".hao123.com",".haodf.com",".harrenmedianetwork.com",".hc360.com",".hefei.cc",".hf365.com",".hiapk.com",".hichina.com",".homeinns.com",".hotsales.net",".house365.com",".huaban.com",".huanqiu.com",".hudong.com",".hupu.com",".iask.com",".iciba.com",".icson.com",".ifeng.com",".iloveyouxi.com",".im286.com",".imanhua.com",".cctvpic.com",".imrworldwide.com",".invitemedia.com",".ip138.com",".ipinyou.com",".iqilu.com",".iqiyi.com",".irs01.com",".irs01.net",".it168.com",".iteye.com",".iyaya.com",".jb51.net",".jiathis.com",".jiayuan.com",".jing.fm",".jinti.com",".jqw.com",".jumei.com",".jxedt.com",".jysq.net",".kaixin001.com",".kandian.com",".kdnet.net",".kimiss.com",".ku6.com",".ku6cdn.com",".ku6img.com",".kuaidi100.com",".kugou.com",".l99.com",".lady8844.com",".lafaso.com",".lashou.com",".legolas-media.com",".lehecai.com",".leho.com",".letv.com",".liebiao.com",".lietou.com",".linezing.com",".linkedin.com",".live.com",".longhoo.net",".lusongsong.com",".lxdns.com",".lycos.com",".lygo.com",".m18.com",".m1905.com",".made-in-china.com",".makepolo.com",".mangocity.com",".manzuo.com",".mapbar.com",".mathtag.com",".mediaplex.com",".mediav.com",".meilele.com",".meilishuo.com",".meishichina.com",".meituan.com",".meizu.com",".miaozhen.com",".microsoft.com",".miercn.com",".mlt01.com",".mmstat.com",".mnwan.com",".mogujie.com",".mookie1.com",".moonbasa.com",".mop.com",".mosso.com",".mplife.com",".msn.com",".mtime.com",".mumayi.com",".mydrivers.com",".net114.com",".netease.com",".newsmth.net",".nipic.com",".nowec.com",".nuomi.com",".oadz.com",".oeeee.com",".onetad.com",".onlinedown.net",".onlylady.com",".oschina.net",".otwan.com",".paipai.com",".paypal.com",".pchome.net",".pcpop.com",".pengyou.com",".php100.com",".phpwind.net",".pingan.com",".pixlr.com",".pp.cc",".ppstream.com",".pptv.com",".pubmatic.com",".q150.com",".qianlong.com",".qidian.com",".qingdaonews.com",".qire123.com",".qiushibaike.com",".qiyou.com",".qjy168.com",".qq.com",".qq937.com",".qstatic.com",".quantserve.com",".qunar.com",".readnovel.com",".renren.com",".rtbidder.net",".scanscout.com",".scorecardresearch.com",".sdo.com",".seowhy.com",".serving-sys.com",".sf-express.com",".shangdu.com",".sina.com",".sinahk.net",".sinajs.com",".smzdm.com",".snyu.com",".sodu.org",".sogou.com",".sohu.com",".soku.com",".sootoo.com",".soso.com",".soufun.com",".sourceforge.net",".staticsdo.com",".stockstar.com",".sttlbb.com",".suning.com",".szhome.com",".sznews.com",".tangdou.com",".tanx.com",".tao123.com",".taobao.com",".taobaocdn.com",".tbcache.com",".tdimg.com",".tenpay.com",".tgbus.com",".theplanet.com",".thethirdmedia.com",".tiancity.com",".tianji.com",".tiao8.info",".tiexue.net",".titan24.com",".tmall.com",".tom.com",".toocle.com",".tremormedia.com",".tuan800.com",".tudou.com",".tudouui.com",".tui18.com",".tuniu.com",".twcczhu.com",".u17.com",".ucjoy.com",".ulink.cc",".uniontoufang.com",".up2c.com",".uuu9.com",".uuzu.com",".vancl.com",".verycd.com",".vipshop.com",".vizu.com",".vjia.com",".weibo.com",".weiphone.com",".west263.com",".whlongda.com",".wrating.com",".wumii.com",".xiami.com",".xiaomi.com",".xiazaiba.com",".xici.net",".xinhuanet.com",".xinnet.com",".xitek.com",".xiu.com",".xunlei.com",".xyxy.net",".yaolan.com",".yesky.com",".yieldmanager.com",".yihaodian.com",".yingjiesheng.com",".yinyuetai.com",".yiqifa.com",".ykimg.com",".ynet.com",".yoka.com",".yolk7.com",".youboy.com",".youdao.com",".yougou.com",".youku.com",".youshang.com",".yupoo.com",".yxlady.com",".yyets.com",".zhaodao123.com",".zhaopin.com",".zhenai.com",".zhibo8.cc",".zhihu.com",".zhubajie.com",".zongheng.com",".zoosnet.net",".zqgame.com",".ztgame.com",".zx915.com",".miui.com",".mi-idc.com",".qhimg.com",".wandoujia.com" - 0.0.0.0/8,1.0.0.0/15,1.2.0.0/16,1.4.0.0/14,1.9.0.0/16,1.10.0.0/15,1.16.0.0/13,1.32.0.0/13,1.40.0.0/14,1.44.0.0/16,1.46.0.0/15,1.52.0.0/14,1.64.0.0/14,1.72.0.0/13,1.96.0.0/12,1.112.0.0/14,1.120.0.0/13,1.128.0.0/11,1.160.0.0/12,1.176.0.0/14,1.186.0.0/15,1.200.0.0/15,1.208.0.0/12,1.224.0.0/11,2.0.0.0/7,4.0.0.0/6,8.0.0.0/6,12.0.0.0/7,14.0.0.0/12,14.32.0.0/11,14.64.0.0/11,14.96.0.0/14,14.100.0.0/15,14.102.0.0/16,14.128.0.0/15,14.132.0.0/15,14.136.0.0/13,14.160.0.0/11,14.192.0.0/14,14.198.0.0/15,14.200.0.0/14,14.206.0.0/15,14.224.0.0/11,15.0.0.0/8,16.0.0.0/5,24.0.0.0/7,26.0.0.0/8,27.0.0.0/13,27.32.0.0/14,27.48.0.0/12,27.64.0.0/11,27.96.0.0/14,27.100.0.0/15,27.102.0.0/16,27.104.0.0/13,27.112.0.0/12,27.130.0.0/15,27.132.0.0/14,27.136.0.0/13,27.145.0.0/16,27.146.0.0/15,27.160.0.0/12,27.176.0.0/13,27.228.0.0/14,27.232.0.0/13,27.240.0.0/12,28.0.0.0/6,32.0.0.0/6,36.0.0.0/16,36.2.0.0/15,36.8.0.0/13,36.37.0.0/16,36.38.0.0/15,36.50.0.0/16,36.52.0.0/14,36.64.0.0/11,36.224.0.0/12,36.240.0.0/13,36.252.0.0/15,36.255.0.0/16,37.0.0.0/8,38.0.0.0/8,39.0.0.0/10,39.96.0.0/11,39.192.0.0/10,40.0.0.0/7,42.0.0.0/14,42.8.0.0/13,42.16.0.0/12,42.32.0.0/12,42.60.0.0/15,42.62.0.0/16,42.64.0.0/12,42.82.0.0/15,42.96.0.0/16,42.98.0.0/15,42.104.0.0/13,42.112.0.0/13,42.123.0.0/16,42.124.0.0/14,42.144.0.0/13,42.152.0.0/14,42.156.0.0/16,42.187.0.0/16,42.188.0.0/14,42.200.0.0/15,42.241.0.0/16,43.0.0.0/8,44.0.0.0/6,48.0.0.0/8,49.0.0.0/14,49.8.0.0/13,49.16.0.0/12,49.32.0.0/12,49.48.0.0/15,49.50.0.0/16,49.56.0.0/13,49.96.0.0/12,49.124.0.0/14,49.128.0.0/13,49.136.0.0/14,49.142.0.0/15,49.144.0.0/13,49.156.0.0/14,49.160.0.0/11,49.192.0.0/12,49.212.0.0/14,49.216.0.0/14,49.224.0.0/13,49.236.0.0/14,49.240.0.0/12,50.0.0.0/7,52.0.0.0/7,54.0.0.0/9,54.128.0.0/10,54.192.0.0/12,54.208.0.0/13,54.216.0.0/14,54.220.0.0/15,54.224.0.0/11,55.0.0.0/8,56.0.0.0/7,58.0.0.0/13,58.8.0.0/14,58.12.0.0/15,58.26.0.0/15,58.28.0.0/15,58.64.0.0/15,58.68.0.0/14,58.72.0.0/13,58.80.0.0/15,58.82.0.0/16,58.84.0.0/14,58.88.0.0/13,58.96.0.0/14,58.102.0.0/15,58.104.0.0/13,58.112.0.0/14,58.120.0.0/13,58.136.0.0/13,58.145.0.0/16,58.146.0.0/15,58.148.0.0/14,58.152.0.0/15,58.156.0.0/14,58.160.0.0/11,58.224.0.0/12,59.0.0.0/11,59.84.0.0/14,59.88.0.0/13,59.96.0.0/13,59.104.0.0/15,59.106.0.0/16,59.112.0.0/12,59.128.0.0/12,59.144.0.0/13,59.152.0.0/15,59.154.0.0/16,59.156.0.0/14,59.160.0.0/13,59.168.0.0/14,59.176.0.0/12,60.32.0.0/12,60.48.0.0/14,60.52.0.0/15,60.54.0.0/16,60.56.0.0/14,60.60.0.0/15,60.62.0.0/16,60.64.0.0/10,60.128.0.0/11,60.192.0.0/15,60.196.0.0/14,60.224.0.0/13,60.234.0.0/16,60.236.0.0/14,60.240.0.0/14,60.244.0.0/15,60.246.0.0/16,60.248.0.0/14,60.253.0.0/16,60.254.0.0/16,61.0.0.0/11,61.32.0.0/12,61.56.0.0/13,61.64.0.0/10,61.192.0.0/11,61.224.0.0/13,61.238.0.0/15,61.244.0.0/14,61.248.0.0/13,62.0.0.0/7,64.0.0.0/3,96.0.0.0/6,100.0.0.0/8,101.0.0.0/14,101.8.0.0/13,101.50.0.0/15,101.53.0.0/16,101.55.0.0/16,101.56.0.0/13,101.78.0.0/15,101.96.0.0/13,101.108.0.0/14,101.112.0.0/13,101.127.0.0/16,101.128.0.0/16,101.136.0.0/13,101.160.0.0/11,101.202.0.0/15,101.208.0.0/12,101.234.0.0/15,101.250.0.0/15,101.255.0.0/16,102.0.0.0/7,104.0.0.0/7,106.0.0.0/15,106.10.0.0/16,106.51.0.0/16,106.64.0.0/13,106.72.0.0/15,106.76.0.0/14,106.96.0.0/13,106.104.0.0/14,106.128.0.0/10,106.192.0.0/11,106.240.0.0/12,107.0.0.0/8,108.0.0.0/7,110.0.0.0/14,110.4.0.0/15,110.8.0.0/13,110.20.0.0/14,110.24.0.0/13,110.32.0.0/13,110.44.0.0/14,110.49.0.0/16,110.50.0.0/16,110.54.0.0/15,110.66.0.0/15,110.68.0.0/14,110.74.0.0/16,110.76.0.0/14,110.92.0.0/15,110.128.0.0/12,110.144.0.0/13,110.158.0.0/15,110.160.0.0/14,110.164.0.0/15,110.168.0.0/13,110.224.0.0/14,110.232.0.0/14,110.238.0.0/15,111.64.0.0/15,111.67.0.0/16,111.68.0.0/14,111.80.0.0/14,111.84.0.0/16,111.86.0.0/15,111.88.0.0/13,111.96.0.0/12,111.118.0.0/15,111.125.0.0/16,111.168.0.0/15,111.171.0.0/16,111.184.0.0/15,111.188.0.0/14,111.216.0.0/14,111.220.0.0/15,111.223.0.0/16,111.232.0.0/13,111.240.0.0/12,112.68.0.0/14,112.72.0.0/16,112.76.0.0/14,112.104.0.0/14,112.108.0.0/15,112.110.0.0/16,112.118.0.0/15,112.120.0.0/15,112.133.0.0/16,112.134.0.0/15,112.136.0.0/13,112.144.0.0/12,112.160.0.0/11,112.196.0.0/14,112.200.0.0/13,112.208.0.0/12,113.10.0.0/15,113.19.0.0/16,113.20.0.0/14,113.28.0.0/15,113.30.0.0/16,113.32.0.0/13,113.40.0.0/14,113.52.0.0/15,113.59.0.0/16,113.60.0.0/15,113.130.0.0/15,113.144.0.0/12,113.160.0.0/11,113.192.0.0/15,113.196.0.0/14,113.203.0.0/16,113.208.0.0/16,113.210.0.0/15,113.212.0.0/15,113.216.0.0/15,113.252.0.0/14,114.0.0.0/12,114.16.0.0/13,114.24.0.0/14,114.29.0.0/16,114.30.0.0/15,114.32.0.0/12,114.48.0.0/14,114.52.0.0/15,114.56.0.0/14,114.69.0.0/16,114.70.0.0/15,114.72.0.0/13,114.108.0.0/14,114.120.0.0/13,114.128.0.0/14,114.133.0.0/16,114.134.0.0/16,114.136.0.0/15,114.140.0.0/14,114.144.0.0/12,114.160.0.0/11,114.192.0.0/14,114.198.0.0/15,114.200.0.0/13,115.0.0.0/12,115.16.0.0/13,115.30.0.0/15,115.36.0.0/14,115.40.0.0/14,115.64.0.0/11,115.96.0.0/14,115.108.0.0/14,115.112.0.0/13,115.124.0.0/14,115.128.0.0/12,115.144.0.0/14,115.160.0.0/13,115.176.0.0/14,115.184.0.0/14,115.188.0.0/15,115.240.0.0/12,116.0.0.0/16,116.12.0.0/16,116.14.0.0/15,116.32.0.0/12,116.48.0.0/14,116.58.0.0/15,116.64.0.0/14,116.68.0.0/16,116.70.0.0/15,116.72.0.0/14,116.80.0.0/14,116.84.0.0/16,116.86.0.0/15,116.88.0.0/14,116.92.0.0/15,116.94.0.0/16,116.96.0.0/12,116.118.0.0/15,116.120.0.0/13,116.193.0.0/16,116.197.0.0/16,116.199.0.0/16,116.200.0.0/14,116.206.0.0/16,116.212.0.0/15,116.214.0.0/16,116.220.0.0/14,116.240.0.0/15,116.250.0.0/15,116.254.0.0/15,117.0.0.0/13,117.16.0.0/14,117.20.0.0/16,117.46.0.0/15,117.52.0.0/14,117.56.0.0/16,117.58.0.0/16,117.74.0.0/16,117.96.0.0/14,117.102.0.0/15,117.104.0.0/15,117.108.0.0/14,117.120.0.0/14,117.192.0.0/10,118.0.0.0/12,118.16.0.0/13,118.27.0.0/16,118.32.0.0/11,118.67.0.0/16,118.68.0.0/14,118.82.0.0/15,118.86.0.0/15,118.88.0.0/16,118.90.0.0/15,118.92.0.0/14,118.96.0.0/12,118.127.0.0/16,118.128.0.0/14,118.136.0.0/13,118.148.0.0/14,118.152.0.0/13,118.160.0.0/12,118.176.0.0/15,118.179.0.0/16,118.185.0.0/16,118.189.0.0/16,118.200.0.0/15,118.208.0.0/14,118.214.0.0/15,118.216.0.0/13,118.231.0.0/16,118.232.0.0/14,118.236.0.0/15,118.238.0.0/16,118.240.0.0/15,118.243.0.0/16,119.2.0.0/16,119.9.0.0/16,119.10.0.0/15,119.12.0.0/14,119.17.0.0/16,119.18.0.0/16,119.24.0.0/14,119.30.0.0/15,119.40.0.0/16,119.42.0.0/15,119.46.0.0/15,119.56.0.0/16,119.59.0.0/16,119.63.0.0/16,119.64.0.0/13,119.72.0.0/14,119.76.0.0/15,119.81.0.0/16,119.82.0.0/15,119.92.0.0/14,119.104.0.0/14,119.110.0.0/15,119.148.0.0/14,119.152.0.0/13,119.160.0.0/15,119.168.0.0/13,119.192.0.0/11,119.224.0.0/13,119.234.0.0/15,119.236.0.0/14,119.240.0.0/13,119.252.0.0/16,120.16.0.0/13,120.28.0.0/15,120.50.0.0/15,120.56.0.0/13,120.72.0.0/14,120.88.0.0/15,120.93.0.0/16,120.96.0.0/11,120.136.0.0/13,120.144.0.0/12,120.160.0.0/11,121.0.0.0/14,121.6.0.0/15,121.44.0.0/15,121.46.0.0/16,121.50.0.0/16,121.52.0.0/14,121.58.0.0/16,121.64.0.0/14,121.72.0.0/14,121.78.0.0/15,121.80.0.0/13,121.88.0.0/16,121.90.0.0/15,121.92.0.0/14,121.96.0.0/11,121.128.0.0/10,121.200.0.0/16,121.202.0.0/15,121.208.0.0/12,121.240.0.0/13,121.252.0.0/15,121.254.0.0/16,122.0.0.0/14,122.11.0.0/16,122.15.0.0/16,122.16.0.0/12,122.32.0.0/12,122.49.0.0/16,122.50.0.0/16,122.52.0.0/14,122.56.0.0/13,122.98.0.0/15,122.100.0.0/14,122.104.0.0/13,122.116.0.0/15,122.118.0.0/16,122.120.0.0/13,122.128.0.0/13,122.144.0.0/13,122.152.0.0/14,122.160.0.0/12,122.176.0.0/13,122.184.0.0/14,122.196.0.0/15,122.199.0.0/16,122.200.0.0/14,122.208.0.0/12,122.248.0.0/13,123.0.0.0/14,123.16.0.0/12,123.32.0.0/12,123.48.0.0/14,123.63.0.0/16,123.98.0.0/15,123.100.0.0/16,123.102.0.0/15,123.104.0.0/13,123.136.0.0/16,123.140.0.0/14,123.176.0.0/16,123.192.0.0/14,123.198.0.0/15,123.200.0.0/14,123.204.0.0/15,123.208.0.0/12,123.224.0.0/13,123.236.0.0/14,123.240.0.0/14,123.248.0.0/16,123.250.0.0/15,123.252.0.0/16,123.254.0.0/15,124.0.0.0/13,124.8.0.0/14,124.12.0.0/15,124.18.0.0/15,124.24.0.0/14,124.28.0.0/15,124.30.0.0/16,124.32.0.0/13,124.40.0.0/15,124.43.0.0/16,124.44.0.0/14,124.48.0.0/12,124.66.0.0/16,124.80.0.0/13,124.96.0.0/12,124.120.0.0/14,124.124.0.0/15,124.136.0.0/13,124.144.0.0/14,124.148.0.0/15,124.150.0.0/16,124.153.0.0/16,124.154.0.0/15,124.157.0.0/16,124.158.0.0/15,124.168.0.0/14,124.176.0.0/12,124.194.0.0/15,124.197.0.0/16,124.198.0.0/15,124.208.0.0/13,124.216.0.0/14,124.240.0.0/15,124.243.0.0/16,124.244.0.0/14,124.248.0.0/16,124.252.0.0/14,125.0.0.0/11,125.48.0.0/12,125.99.0.0/16,125.100.0.0/14,125.128.0.0/11,125.160.0.0/13,125.168.0.0/16,125.170.0.0/16,125.172.0.0/14,125.176.0.0/12,125.192.0.0/12,125.208.0.0/15,125.212.0.0/14,125.224.0.0/11,126.0.0.0/7,128.0.0.0/6,132.0.0.0/7,134.0.0.0/9,134.128.0.0/10,134.192.0.0/14,134.197.0.0/16,134.198.0.0/15,134.200.0.0/13,134.208.0.0/12,134.224.0.0/11,135.0.0.0/8,136.0.0.0/7,138.0.0.0/8,139.0.0.0/13,139.8.0.0/16,139.10.0.0/15,139.12.0.0/14,139.16.0.0/12,139.32.0.0/11,139.64.0.0/10,139.128.0.0/16,139.130.0.0/15,139.132.0.0/14,139.136.0.0/13,139.144.0.0/14,139.149.0.0/16,139.150.0.0/15,139.152.0.0/15,139.154.0.0/16,139.156.0.0/15,139.158.0.0/16,139.160.0.0/13,139.168.0.0/15,139.171.0.0/16,139.172.0.0/14,139.177.0.0/16,139.178.0.0/15,140.64.0.0/13,140.72.0.0/15,140.74.0.0/16,140.76.0.0/14,140.80.0.0/12,140.96.0.0/11,140.128.0.0/13,140.136.0.0/14,140.140.0.0/15,140.142.0.0/16,140.144.0.0/12,140.160.0.0/11,140.192.0.0/13,140.200.0.0/14,140.204.0.0/16,140.208.0.0/15,140.211.0.0/16,140.212.0.0/14,140.216.0.0/13,140.225.0.0/16,140.226.0.0/15,140.228.0.0/14,140.232.0.0/14,140.236.0.0/16,140.238.0.0/15,140.241.0.0/16,140.242.0.0/16,140.244.0.0/15,140.247.0.0/16,140.248.0.0/16,140.251.0.0/16,140.252.0.0/15,140.254.0.0/16,141.0.0.0/8,142.0.0.0/7,144.1.0.0/16,144.2.0.0/15,144.4.0.0/15,144.6.0.0/16,144.8.0.0/14,144.13.0.0/16,144.14.0.0/15,144.16.0.0/12,144.32.0.0/12,144.48.0.0/14,144.53.0.0/16,144.54.0.0/15,144.56.0.0/13,144.64.0.0/11,144.96.0.0/12,144.112.0.0/13,144.120.0.0/15,144.122.0.0/16,144.124.0.0/14,144.128.0.0/10,144.192.0.0/11,144.224.0.0/12,144.240.0.0/13,144.248.0.0/14,144.252.0.0/15,144.254.0.0/16,145.0.0.0/8,146.0.0.0/7,148.0.0.0/7,150.1.0.0/16,150.2.0.0/15,150.4.0.0/14,150.8.0.0/13,150.16.0.0/12,150.32.0.0/11,150.64.0.0/11,150.96.0.0/12,150.112.0.0/15,150.114.0.0/16,150.116.0.0/14,150.120.0.0/16,150.123.0.0/16,150.124.0.0/14,150.128.0.0/13,150.136.0.0/15,150.140.0.0/14,150.144.0.0/12,150.160.0.0/11,150.192.0.0/12,150.208.0.0/13,150.216.0.0/14,150.220.0.0/15,150.222.0.0/16,150.224.0.0/12,150.240.0.0/13,150.248.0.0/14,150.252.0.0/15,150.254.0.0/16,151.0.0.0/8,152.0.0.0/8,153.1.0.0/16,153.2.0.0/16,153.4.0.0/14,153.8.0.0/13,153.16.0.0/12,153.32.0.0/15,153.38.0.0/15,153.40.0.0/13,153.48.0.0/12,153.64.0.0/11,153.96.0.0/15,153.98.0.0/16,153.100.0.0/16,153.102.0.0/15,153.104.0.0/13,153.112.0.0/14,153.116.0.0/15,153.120.0.0/13,153.128.0.0/9,154.0.0.0/7,156.0.0.0/8,157.1.0.0/16,157.2.0.0/15,157.4.0.0/14,157.8.0.0/13,157.16.0.0/15,157.19.0.0/16,157.20.0.0/14,157.24.0.0/13,157.32.0.0/12,157.48.0.0/13,157.56.0.0/14,157.60.0.0/16,157.62.0.0/15,157.64.0.0/11,157.96.0.0/12,157.112.0.0/13,157.120.0.0/15,157.123.0.0/16,157.124.0.0/14,157.128.0.0/12,157.144.0.0/14,157.149.0.0/16,157.150.0.0/15,157.152.0.0/14,157.157.0.0/16,157.158.0.0/15,157.160.0.0/11,157.192.0.0/11,157.224.0.0/12,157.240.0.0/13,157.248.0.0/14,157.252.0.0/15,157.254.0.0/16,158.0.0.0/8,159.0.0.0/9,159.128.0.0/10,159.192.0.0/11,159.224.0.0/15,159.227.0.0/16,159.228.0.0/14,159.232.0.0/13,159.240.0.0/12,160.0.0.0/8,161.0.0.0/9,161.128.0.0/10,161.192.0.0/13,161.200.0.0/14,161.204.0.0/15,161.206.0.0/16,161.208.0.0/12,161.224.0.0/11,162.0.0.0/10,162.64.0.0/11,162.96.0.0/13,162.104.0.0/16,162.106.0.0/15,162.108.0.0/14,162.112.0.0/12,162.128.0.0/9,163.1.0.0/16,163.2.0.0/15,163.4.0.0/14,163.8.0.0/13,163.16.0.0/12,163.32.0.0/11,163.64.0.0/11,163.96.0.0/12,163.112.0.0/13,163.120.0.0/14,163.124.0.0/16,163.126.0.0/15,163.128.0.0/13,163.136.0.0/14,163.140.0.0/15,163.143.0.0/16,163.144.0.0/12,163.160.0.0/12,163.176.0.0/16,163.178.0.0/16,163.180.0.0/14,163.184.0.0/13,163.192.0.0/13,163.200.0.0/14,163.205.0.0/16,163.206.0.0/15,163.208.0.0/12,163.224.0.0/11,164.0.0.0/7,166.0.0.0/10,166.64.0.0/11,166.96.0.0/13,166.104.0.0/14,166.108.0.0/15,166.110.0.0/16,166.112.0.0/12,166.128.0.0/9,167.0.0.0/9,167.128.0.0/13,167.136.0.0/15,167.138.0.0/16,167.140.0.0/14,167.144.0.0/12,167.160.0.0/11,167.192.0.0/10,168.0.0.0/9,168.128.0.0/11,168.161.0.0/16,168.162.0.0/15,168.164.0.0/14,168.168.0.0/13,168.176.0.0/12,168.192.0.0/10,169.0.0.0/8,170.0.0.0/8,171.0.0.0/13,171.16.0.0/12,171.32.0.0/15,171.48.0.0/12,171.64.0.0/12,171.96.0.0/13,171.128.0.0/10,171.192.0.0/12,171.224.0.0/11,172.0.0.0/7,174.0.0.0/8,175.28.0.0/15,175.32.0.0/13,175.40.0.0/15,175.45.0.0/16,175.96.0.0/14,175.100.0.0/15,175.103.0.0/16,175.104.0.0/13,175.112.0.0/12,175.128.0.0/12,175.144.0.0/15,175.156.0.0/14,175.176.0.0/15,175.179.0.0/16,175.180.0.0/14,175.184.0.0/16,175.192.0.0/10,176.0.0.0/6,180.0.0.0/10,180.64.0.0/13,180.72.0.0/14,180.80.0.0/14,180.87.0.0/16,180.92.0.0/14,180.128.0.0/15,180.131.0.0/16,180.132.0.0/14,180.144.0.0/13,180.176.0.0/13,180.188.0.0/14,180.192.0.0/13,180.200.0.0/16,180.204.0.0/14,180.210.0.0/15,180.214.0.0/15,180.216.0.0/14,180.220.0.0/15,180.222.0.0/16,180.224.0.0/11,181.0.0.0/8,182.0.0.0/11,182.48.0.0/16,182.50.0.0/16,182.52.0.0/14,182.56.0.0/14,182.60.0.0/16,182.62.0.0/15,182.64.0.0/12,182.93.0.0/16,182.94.0.0/15,182.152.0.0/14,182.156.0.0/16,182.158.0.0/15,182.160.0.0/13,182.168.0.0/14,182.172.0.0/15,182.176.0.0/12,182.192.0.0/13,182.208.0.0/12,182.224.0.0/13,182.232.0.0/14,182.236.0.0/15,182.239.0.0/16,182.248.0.0/14,182.252.0.0/15,182.255.0.0/16,183.72.0.0/13,183.80.0.0/14,183.86.0.0/15,183.88.0.0/14,183.96.0.0/11,183.171.0.0/16,183.176.0.0/13,184.0.0.0/5,192.0.0.0/5,200.0.0.0/7,202.0.0.0/10,202.64.0.0/11,202.122.0.0/15,202.124.0.0/14,202.128.0.0/10,202.208.0.0/12,202.224.0.0/11,203.0.0.0/10,203.64.0.0/12,203.80.0.0/13,203.88.0.0/14,203.92.0.0/16,203.94.0.0/15,203.96.0.0/11,203.128.0.0/9,204.0.0.0/6,208.0.0.0/7,210.0.0.0/13,210.8.0.0/14,210.14.0.0/15,210.16.0.0/14,210.20.0.0/16,210.23.0.0/16,210.24.0.0/16,210.48.0.0/15,210.50.0.0/16,210.54.0.0/15,210.56.0.0/13,210.64.0.0/13,210.79.0.0/16,210.80.0.0/15,210.84.0.0/14,210.88.0.0/13,210.96.0.0/11,210.128.0.0/9,211.0.0.0/10,211.72.0.0/13,211.104.0.0/13,211.112.0.0/12,211.128.0.0/13,211.168.0.0/13,211.176.0.0/12,211.192.0.0/10,212.0.0.0/6,216.0.0.0/7,218.32.0.0/12,218.48.0.0/13,218.100.0.0/14,218.110.0.0/15,218.112.0.0/12,218.128.0.0/10,218.208.0.0/12,218.224.0.0/12,218.248.0.0/16,218.250.0.0/15,218.252.0.0/14,219.0.0.0/10,219.64.0.0/13,219.73.0.0/16,219.74.0.0/15,219.76.0.0/14,219.80.0.0/15,219.83.0.0/16,219.84.0.0/14,219.88.0.0/13,219.96.0.0/11,219.160.0.0/11,219.192.0.0/12,219.208.0.0/13,219.240.0.0/15,219.248.0.0/13,220.0.0.0/10,220.64.0.0/11,220.96.0.0/12,220.116.0.0/14,220.120.0.0/13,220.128.0.0/12,220.144.0.0/13,220.152.0.0/15,220.156.0.0/14,220.208.0.0/12,220.224.0.0/13,220.232.0.0/15,220.235.0.0/16,220.236.0.0/14,220.240.0.0/15,220.244.0.0/14,220.253.0.0/16,220.254.0.0/15,221.0.0.0/8,221.240.0.0/12,222.0.0.0/8,223.0.0.0/8 - ".google.com",".twitter.com",".facebook.com",".youtube.com",".googlevideo.com",".googleusercontent.com",".appspot.com",".ggpht.com",".gstatic.com",".googleapis.com",".blogspot.com",".edgecastcdn.net",".twimg.com",".akamai.net",".fbcdn.net",".1e100.net",".amazonaws.com",".cloudfront.net",".wp.com",".wordpress.com",".googlecode.com",".gmail.com",".google-analytics.com",".youtube-nocookie.com",".ytimg.com",".blogger.com",".t.co",".bitly.com",".tinypic.com",".yfrog.com",".dropbox.com",".t66y.com",".sourceforge.net" + 0.0.0.0/8,1.0.0.0/15,1.2.0.0/16,1.4.0.0/14,1.9.0.0/16,1.10.0.0/15,1.16.0.0/13,1.32.0.0/13,1.40.0.0/14,1.44.0.0/16,1.46.0.0/15,1.52.0.0/14,1.64.0.0/14,1.72.0.0/13,1.96.0.0/12,1.112.0.0/14,1.120.0.0/13,1.128.0.0/11,1.160.0.0/12,1.176.0.0/14,1.186.0.0/15,1.200.0.0/15,1.208.0.0/12,1.224.0.0/11,2.0.0.0/7,4.0.0.0/6,8.0.0.0/6,12.0.0.0/7,14.0.0.0/12,14.32.0.0/11,14.64.0.0/11,14.96.0.0/14,14.100.0.0/15,14.102.0.0/16,14.128.0.0/15,14.132.0.0/15,14.136.0.0/13,14.160.0.0/11,14.192.0.0/14,14.198.0.0/15,14.200.0.0/14,14.206.0.0/15,14.224.0.0/11,15.0.0.0/8,16.0.0.0/5,24.0.0.0/7,26.0.0.0/8,27.0.0.0/13,27.32.0.0/14,27.48.0.0/12,27.64.0.0/11,27.96.0.0/14,27.100.0.0/15,27.102.0.0/16,27.104.0.0/13,27.112.0.0/12,27.130.0.0/15,27.132.0.0/14,27.136.0.0/13,27.145.0.0/16,27.146.0.0/15,27.160.0.0/12,27.176.0.0/13,27.228.0.0/14,27.232.0.0/13,27.240.0.0/12,28.0.0.0/6,32.0.0.0/6,36.0.0.0/16,36.2.0.0/15,36.8.0.0/13,36.37.0.0/16,36.38.0.0/15,36.50.0.0/16,36.52.0.0/14,36.64.0.0/11,36.224.0.0/12,36.240.0.0/13,36.252.0.0/15,36.255.0.0/16,37.0.0.0/8,38.0.0.0/8,39.0.0.0/10,39.96.0.0/11,39.192.0.0/10,40.0.0.0/7,42.0.0.0/14,42.8.0.0/13,42.16.0.0/12,42.32.0.0/12,42.60.0.0/15,42.62.0.0/16,42.64.0.0/12,42.82.0.0/15,42.96.0.0/16,42.98.0.0/15,42.104.0.0/13,42.112.0.0/13,42.123.0.0/16,42.124.0.0/14,42.144.0.0/13,42.152.0.0/14,42.156.0.0/16,42.187.0.0/16,42.188.0.0/14,42.200.0.0/15,42.241.0.0/16,43.0.0.0/8,44.0.0.0/6,48.0.0.0/8,49.0.0.0/14,49.8.0.0/13,49.16.0.0/12,49.32.0.0/12,49.48.0.0/15,49.50.0.0/16,49.56.0.0/13,49.96.0.0/12,49.124.0.0/14,49.128.0.0/13,49.136.0.0/14,49.142.0.0/15,49.144.0.0/13,49.156.0.0/14,49.160.0.0/11,49.192.0.0/12,49.212.0.0/14,49.216.0.0/14,49.224.0.0/13,49.236.0.0/14,49.240.0.0/12,50.0.0.0/7,52.0.0.0/7,54.0.0.0/9,54.128.0.0/10,54.192.0.0/12,54.208.0.0/13,54.216.0.0/14,54.220.0.0/15,54.224.0.0/11,55.0.0.0/8,56.0.0.0/7,58.0.0.0/13,58.8.0.0/14,58.12.0.0/15,58.26.0.0/15,58.28.0.0/15,58.64.0.0/15,58.68.0.0/14,58.72.0.0/13,58.80.0.0/15,58.82.0.0/16,58.84.0.0/14,58.88.0.0/13,58.96.0.0/14,58.102.0.0/15,58.104.0.0/13,58.112.0.0/14,58.120.0.0/13,58.136.0.0/13,58.145.0.0/16,58.146.0.0/15,58.148.0.0/14,58.152.0.0/15,58.156.0.0/14,58.160.0.0/11,58.224.0.0/12,59.0.0.0/11,59.84.0.0/14,59.88.0.0/13,59.96.0.0/13,59.104.0.0/15,59.106.0.0/16,59.112.0.0/12,59.128.0.0/12,59.144.0.0/13,59.152.0.0/15,59.154.0.0/16,59.156.0.0/14,59.160.0.0/13,59.168.0.0/14,59.176.0.0/12,60.32.0.0/12,60.48.0.0/14,60.52.0.0/15,60.54.0.0/16,60.56.0.0/14,60.60.0.0/15,60.62.0.0/16,60.64.0.0/10,60.128.0.0/11,60.192.0.0/15,60.196.0.0/14,60.224.0.0/13,60.234.0.0/16,60.236.0.0/14,60.240.0.0/14,60.244.0.0/15,60.246.0.0/16,60.248.0.0/14,60.253.0.0/16,60.254.0.0/16,61.0.0.0/11,61.32.0.0/12,61.56.0.0/13,61.64.0.0/10,61.192.0.0/11,61.224.0.0/13,61.238.0.0/15,61.244.0.0/14,61.248.0.0/13,62.0.0.0/7,64.0.0.0/3,96.0.0.0/6,100.0.0.0/8,101.0.0.0/14,101.8.0.0/13,101.50.0.0/15,101.53.0.0/16,101.55.0.0/16,101.56.0.0/13,101.78.0.0/15,101.96.0.0/13,101.108.0.0/14,101.112.0.0/13,101.127.0.0/16,101.128.0.0/16,101.136.0.0/13,101.160.0.0/11,101.202.0.0/15,101.208.0.0/12,101.234.0.0/15,101.250.0.0/15,101.255.0.0/16,102.0.0.0/7,104.0.0.0/7,106.0.0.0/15,106.10.0.0/16,106.51.0.0/16,106.64.0.0/13,106.72.0.0/15,106.76.0.0/14,106.96.0.0/13,106.104.0.0/14,106.128.0.0/10,106.192.0.0/11,106.240.0.0/12,107.0.0.0/8,108.0.0.0/7,110.0.0.0/14,110.4.0.0/15,110.8.0.0/13,110.20.0.0/14,110.24.0.0/13,110.32.0.0/13,110.44.0.0/14,110.49.0.0/16,110.50.0.0/16,110.54.0.0/15,110.66.0.0/15,110.68.0.0/14,110.74.0.0/16,110.76.0.0/14,110.92.0.0/15,110.128.0.0/12,110.144.0.0/13,110.158.0.0/15,110.160.0.0/14,110.164.0.0/15,110.168.0.0/13,110.224.0.0/14,110.232.0.0/14,110.238.0.0/15,111.64.0.0/15,111.67.0.0/16,111.68.0.0/14,111.80.0.0/14,111.84.0.0/16,111.86.0.0/15,111.88.0.0/13,111.96.0.0/12,111.118.0.0/15,111.125.0.0/16,111.168.0.0/15,111.171.0.0/16,111.184.0.0/15,111.188.0.0/14,111.216.0.0/14,111.220.0.0/15,111.223.0.0/16,111.232.0.0/13,111.240.0.0/12,112.68.0.0/14,112.72.0.0/16,112.76.0.0/14,112.104.0.0/14,112.108.0.0/15,112.110.0.0/16,112.118.0.0/15,112.120.0.0/15,112.133.0.0/16,112.134.0.0/15,112.136.0.0/13,112.144.0.0/12,112.160.0.0/11,112.196.0.0/14,112.200.0.0/13,112.208.0.0/12,113.10.0.0/15,113.19.0.0/16,113.20.0.0/14,113.28.0.0/15,113.30.0.0/16,113.32.0.0/13,113.40.0.0/14,113.52.0.0/15,113.59.0.0/16,113.60.0.0/15,113.130.0.0/15,113.144.0.0/12,113.160.0.0/11,113.192.0.0/15,113.196.0.0/14,113.203.0.0/16,113.208.0.0/16,113.210.0.0/15,113.212.0.0/15,113.216.0.0/15,113.252.0.0/14,114.0.0.0/12,114.16.0.0/13,114.24.0.0/14,114.29.0.0/16,114.30.0.0/15,114.32.0.0/12,114.48.0.0/14,114.52.0.0/15,114.56.0.0/14,114.69.0.0/16,114.70.0.0/15,114.72.0.0/13,114.108.0.0/14,114.120.0.0/13,114.128.0.0/14,114.133.0.0/16,114.134.0.0/16,114.136.0.0/15,114.140.0.0/14,114.144.0.0/12,114.160.0.0/11,114.192.0.0/14,114.198.0.0/15,114.200.0.0/13,115.0.0.0/12,115.16.0.0/13,115.30.0.0/15,115.36.0.0/14,115.40.0.0/14,115.64.0.0/11,115.96.0.0/14,115.108.0.0/14,115.112.0.0/13,115.124.0.0/14,115.128.0.0/12,115.144.0.0/14,115.160.0.0/13,115.176.0.0/14,115.184.0.0/14,115.188.0.0/15,115.240.0.0/12,116.0.0.0/16,116.12.0.0/16,116.14.0.0/15,116.32.0.0/12,116.48.0.0/14,116.58.0.0/15,116.64.0.0/14,116.68.0.0/16,116.70.0.0/15,116.72.0.0/14,116.80.0.0/14,116.84.0.0/16,116.86.0.0/15,116.88.0.0/14,116.92.0.0/15,116.94.0.0/16,116.96.0.0/12,116.118.0.0/15,116.120.0.0/13,116.193.0.0/16,116.197.0.0/16,116.199.0.0/16,116.200.0.0/14,116.206.0.0/16,116.212.0.0/15,116.214.0.0/16,116.220.0.0/14,116.240.0.0/15,116.250.0.0/15,116.254.0.0/15,117.0.0.0/13,117.16.0.0/14,117.20.0.0/16,117.46.0.0/15,117.52.0.0/14,117.56.0.0/16,117.58.0.0/16,117.74.0.0/16,117.96.0.0/14,117.102.0.0/15,117.104.0.0/15,117.108.0.0/14,117.120.0.0/14,117.192.0.0/10,118.0.0.0/12,118.16.0.0/13,118.27.0.0/16,118.32.0.0/11,118.67.0.0/16,118.68.0.0/14,118.82.0.0/15,118.86.0.0/15,118.88.0.0/16,118.90.0.0/15,118.92.0.0/14,118.96.0.0/12,118.127.0.0/16,118.128.0.0/14,118.136.0.0/13,118.148.0.0/14,118.152.0.0/13,118.160.0.0/12,118.176.0.0/15,118.179.0.0/16,118.185.0.0/16,118.189.0.0/16,118.200.0.0/15,118.208.0.0/14,118.214.0.0/15,118.216.0.0/13,118.231.0.0/16,118.232.0.0/14,118.236.0.0/15,118.238.0.0/16,118.240.0.0/15,118.243.0.0/16,119.2.0.0/16,119.9.0.0/16,119.10.0.0/15,119.12.0.0/14,119.17.0.0/16,119.18.0.0/16,119.24.0.0/14,119.30.0.0/15,119.40.0.0/16,119.42.0.0/15,119.46.0.0/15,119.56.0.0/16,119.59.0.0/16,119.63.0.0/16,119.64.0.0/13,119.72.0.0/14,119.76.0.0/15,119.81.0.0/16,119.82.0.0/15,119.92.0.0/14,119.104.0.0/14,119.110.0.0/15,119.148.0.0/14,119.152.0.0/13,119.160.0.0/15,119.168.0.0/13,119.192.0.0/11,119.224.0.0/13,119.234.0.0/15,119.236.0.0/14,119.240.0.0/13,119.252.0.0/16,120.16.0.0/13,120.28.0.0/15,120.50.0.0/15,120.56.0.0/13,120.72.0.0/14,120.88.0.0/15,120.93.0.0/16,120.96.0.0/11,120.136.0.0/13,120.144.0.0/12,120.160.0.0/11,121.0.0.0/14,121.6.0.0/15,121.44.0.0/15,121.46.0.0/16,121.50.0.0/16,121.52.0.0/14,121.58.0.0/16,121.64.0.0/14,121.72.0.0/14,121.78.0.0/15,121.80.0.0/13,121.88.0.0/16,121.90.0.0/15,121.92.0.0/14,121.96.0.0/11,121.128.0.0/10,121.200.0.0/16,121.202.0.0/15,121.208.0.0/12,121.240.0.0/13,121.252.0.0/15,121.254.0.0/16,122.0.0.0/14,122.11.0.0/16,122.15.0.0/16,122.16.0.0/12,122.32.0.0/12,122.49.0.0/16,122.50.0.0/16,122.52.0.0/14,122.56.0.0/13,122.98.0.0/15,122.100.0.0/14,122.104.0.0/13,122.116.0.0/15,122.118.0.0/16,122.120.0.0/13,122.128.0.0/13,122.144.0.0/13,122.152.0.0/14,122.160.0.0/12,122.176.0.0/13,122.184.0.0/14,122.196.0.0/15,122.199.0.0/16,122.200.0.0/14,122.208.0.0/12,122.248.0.0/13,123.0.0.0/14,123.16.0.0/12,123.32.0.0/12,123.48.0.0/14,123.63.0.0/16,123.98.0.0/15,123.100.0.0/16,123.102.0.0/15,123.104.0.0/13,123.136.0.0/16,123.140.0.0/14,123.176.0.0/16,123.192.0.0/14,123.198.0.0/15,123.200.0.0/14,123.204.0.0/15,123.208.0.0/12,123.224.0.0/13,123.236.0.0/14,123.240.0.0/14,123.248.0.0/16,123.250.0.0/15,123.252.0.0/16,123.254.0.0/15,124.0.0.0/13,124.8.0.0/14,124.12.0.0/15,124.18.0.0/15,124.24.0.0/14,124.28.0.0/15,124.30.0.0/16,124.32.0.0/13,124.40.0.0/15,124.43.0.0/16,124.44.0.0/14,124.48.0.0/12,124.66.0.0/16,124.80.0.0/13,124.96.0.0/12,124.120.0.0/14,124.124.0.0/15,124.136.0.0/13,124.144.0.0/14,124.148.0.0/15,124.150.0.0/16,124.153.0.0/16,124.154.0.0/15,124.157.0.0/16,124.158.0.0/15,124.168.0.0/14,124.176.0.0/12,124.194.0.0/15,124.197.0.0/16,124.198.0.0/15,124.208.0.0/13,124.216.0.0/14,124.240.0.0/15,124.243.0.0/16,124.244.0.0/14,124.248.0.0/16,124.252.0.0/14,125.0.0.0/11,125.48.0.0/12,125.99.0.0/16,125.100.0.0/14,125.128.0.0/11,125.160.0.0/13,125.168.0.0/16,125.170.0.0/16,125.172.0.0/14,125.176.0.0/12,125.192.0.0/12,125.208.0.0/15,125.212.0.0/14,125.224.0.0/11,126.0.0.0/7,128.0.0.0/6,132.0.0.0/7,134.0.0.0/9,134.128.0.0/10,134.192.0.0/14,134.197.0.0/16,134.198.0.0/15,134.200.0.0/13,134.208.0.0/12,134.224.0.0/11,135.0.0.0/8,136.0.0.0/7,138.0.0.0/8,139.0.0.0/13,139.8.0.0/16,139.10.0.0/15,139.12.0.0/14,139.16.0.0/12,139.32.0.0/11,139.64.0.0/10,139.128.0.0/16,139.130.0.0/15,139.132.0.0/14,139.136.0.0/13,139.144.0.0/14,139.149.0.0/16,139.150.0.0/15,139.152.0.0/15,139.154.0.0/16,139.156.0.0/15,139.158.0.0/16,139.160.0.0/13,139.168.0.0/15,139.171.0.0/16,139.172.0.0/14,139.177.0.0/16,139.178.0.0/15,140.64.0.0/13,140.72.0.0/15,140.74.0.0/16,140.76.0.0/14,140.80.0.0/12,140.96.0.0/11,140.128.0.0/13,140.136.0.0/14,140.140.0.0/15,140.142.0.0/16,140.144.0.0/12,140.160.0.0/11,140.192.0.0/13,140.200.0.0/14,140.204.0.0/16,140.208.0.0/15,140.211.0.0/16,140.212.0.0/14,140.216.0.0/13,140.225.0.0/16,140.226.0.0/15,140.228.0.0/14,140.232.0.0/14,140.236.0.0/16,140.238.0.0/15,140.241.0.0/16,140.242.0.0/16,140.244.0.0/15,140.247.0.0/16,140.248.0.0/16,140.251.0.0/16,140.252.0.0/15,140.254.0.0/16,141.0.0.0/8,142.0.0.0/7,144.1.0.0/16,144.2.0.0/15,144.4.0.0/15,144.6.0.0/16,144.8.0.0/14,144.13.0.0/16,144.14.0.0/15,144.16.0.0/12,144.32.0.0/12,144.48.0.0/14,144.53.0.0/16,144.54.0.0/15,144.56.0.0/13,144.64.0.0/11,144.96.0.0/12,144.112.0.0/13,144.120.0.0/15,144.122.0.0/16,144.124.0.0/14,144.128.0.0/10,144.192.0.0/11,144.224.0.0/12,144.240.0.0/13,144.248.0.0/14,144.252.0.0/15,144.254.0.0/16,145.0.0.0/8,146.0.0.0/7,148.0.0.0/7,150.1.0.0/16,150.2.0.0/15,150.4.0.0/14,150.8.0.0/13,150.16.0.0/12,150.32.0.0/11,150.64.0.0/11,150.96.0.0/12,150.112.0.0/15,150.114.0.0/16,150.116.0.0/14,150.120.0.0/16,150.123.0.0/16,150.124.0.0/14,150.128.0.0/13,150.136.0.0/15,150.140.0.0/14,150.144.0.0/12,150.160.0.0/11,150.192.0.0/12,150.208.0.0/13,150.216.0.0/14,150.220.0.0/15,150.222.0.0/16,150.224.0.0/12,150.240.0.0/13,150.248.0.0/14,150.252.0.0/15,150.254.0.0/16,151.0.0.0/8,152.0.0.0/8,153.1.0.0/16,153.2.0.0/16,153.4.0.0/14,153.8.0.0/13,153.16.0.0/12,153.32.0.0/15,153.38.0.0/15,153.40.0.0/13,153.48.0.0/12,153.64.0.0/11,153.96.0.0/15,153.98.0.0/16,153.100.0.0/16,153.102.0.0/15,153.104.0.0/13,153.112.0.0/14,153.116.0.0/15,153.120.0.0/13,153.128.0.0/9,154.0.0.0/7,156.0.0.0/8,157.1.0.0/16,157.2.0.0/15,157.4.0.0/14,157.8.0.0/13,157.16.0.0/15,157.19.0.0/16,157.20.0.0/14,157.24.0.0/13,157.32.0.0/12,157.48.0.0/13,157.56.0.0/14,157.60.0.0/16,157.62.0.0/15,157.64.0.0/11,157.96.0.0/12,157.112.0.0/13,157.120.0.0/15,157.123.0.0/16,157.124.0.0/14,157.128.0.0/12,157.144.0.0/14,157.149.0.0/16,157.150.0.0/15,157.152.0.0/14,157.157.0.0/16,157.158.0.0/15,157.160.0.0/11,157.192.0.0/11,157.224.0.0/12,157.240.0.0/13,157.248.0.0/14,157.252.0.0/15,157.254.0.0/16,158.0.0.0/8,159.0.0.0/9,159.128.0.0/10,159.192.0.0/11,159.224.0.0/15,159.227.0.0/16,159.228.0.0/14,159.232.0.0/13,159.240.0.0/12,160.0.0.0/8,161.0.0.0/9,161.128.0.0/10,161.192.0.0/13,161.200.0.0/14,161.204.0.0/15,161.206.0.0/16,161.208.0.0/12,161.224.0.0/11,162.0.0.0/10,162.64.0.0/11,162.96.0.0/13,162.104.0.0/16,162.106.0.0/15,162.108.0.0/14,162.112.0.0/12,162.128.0.0/9,163.1.0.0/16,163.2.0.0/15,163.4.0.0/14,163.8.0.0/13,163.16.0.0/12,163.32.0.0/11,163.64.0.0/11,163.96.0.0/12,163.112.0.0/13,163.120.0.0/14,163.124.0.0/16,163.126.0.0/15,163.128.0.0/13,163.136.0.0/14,163.140.0.0/15,163.143.0.0/16,163.144.0.0/12,163.160.0.0/12,163.176.0.0/16,163.178.0.0/16,163.180.0.0/14,163.184.0.0/13,163.192.0.0/13,163.200.0.0/14,163.205.0.0/16,163.206.0.0/15,163.208.0.0/12,163.224.0.0/11,164.0.0.0/7,166.0.0.0/10,166.64.0.0/11,166.96.0.0/13,166.104.0.0/14,166.108.0.0/15,166.110.0.0/16,166.112.0.0/12,166.128.0.0/9,167.0.0.0/9,167.128.0.0/13,167.136.0.0/15,167.138.0.0/16,167.140.0.0/14,167.144.0.0/12,167.160.0.0/11,167.192.0.0/10,168.0.0.0/9,168.128.0.0/11,168.161.0.0/16,168.162.0.0/15,168.164.0.0/14,168.168.0.0/13,168.176.0.0/12,168.192.0.0/10,169.0.0.0/8,170.0.0.0/8,171.0.0.0/13,171.16.0.0/12,171.32.0.0/15,171.48.0.0/12,171.64.0.0/12,171.96.0.0/13,171.128.0.0/10,171.192.0.0/12,171.224.0.0/11,172.0.0.0/7,174.0.0.0/8,175.28.0.0/15,175.32.0.0/13,175.40.0.0/15,175.45.0.0/16,175.96.0.0/14,175.100.0.0/15,175.103.0.0/16,175.104.0.0/13,175.112.0.0/12,175.128.0.0/12,175.144.0.0/15,175.156.0.0/14,175.176.0.0/15,175.179.0.0/16,175.180.0.0/14,175.184.0.0/16,175.192.0.0/10,176.0.0.0/6,180.0.0.0/10,180.64.0.0/13,180.72.0.0/14,180.80.0.0/14,180.87.0.0/16,180.92.0.0/14,180.128.0.0/15,180.131.0.0/16,180.132.0.0/14,180.144.0.0/13,180.176.0.0/13,180.188.0.0/14,180.192.0.0/13,180.200.0.0/16,180.204.0.0/14,180.210.0.0/15,180.214.0.0/15,180.216.0.0/14,180.220.0.0/15,180.222.0.0/16,180.224.0.0/11,181.0.0.0/8,182.0.0.0/11,182.48.0.0/16,182.50.0.0/16,182.52.0.0/14,182.56.0.0/14,182.60.0.0/16,182.62.0.0/15,182.64.0.0/12,182.93.0.0/16,182.94.0.0/15,182.152.0.0/14,182.156.0.0/16,182.158.0.0/15,182.160.0.0/13,182.168.0.0/14,182.172.0.0/15,182.176.0.0/12,182.192.0.0/13,182.208.0.0/12,182.224.0.0/13,182.232.0.0/14,182.236.0.0/15,182.239.0.0/16,182.248.0.0/14,182.252.0.0/15,182.255.0.0/16,183.72.0.0/13,183.80.0.0/14,183.86.0.0/15,183.88.0.0/14,183.96.0.0/11,183.171.0.0/16,183.176.0.0/13,184.0.0.0/5,192.0.0.0/5,200.0.0.0/7,202.0.0.0/10,202.64.0.0/11,202.122.0.0/15,202.124.0.0/14,202.128.0.0/10,202.208.0.0/12,202.224.0.0/11,203.0.0.0/10,203.64.0.0/12,203.80.0.0/13,203.88.0.0/14,203.92.0.0/16,203.94.0.0/15,203.96.0.0/11,203.128.0.0/9,204.0.0.0/6,208.0.0.0/7,210.0.0.0/13,210.8.0.0/14,210.14.0.0/15,210.16.0.0/14,210.20.0.0/16,210.23.0.0/16,210.24.0.0/16,210.48.0.0/15,210.50.0.0/16,210.54.0.0/15,210.56.0.0/13,210.64.0.0/13,210.79.0.0/16,210.80.0.0/15,210.84.0.0/14,210.88.0.0/13,210.96.0.0/11,210.128.0.0/9,211.0.0.0/10,211.72.0.0/13,211.104.0.0/13,211.112.0.0/12,211.128.0.0/13,211.168.0.0/13,211.176.0.0/12,211.192.0.0/10,212.0.0.0/6,216.0.0.0/7,218.32.0.0/12,218.48.0.0/13,218.100.0.0/14,218.110.0.0/15,218.112.0.0/12,218.128.0.0/10,218.208.0.0/12,218.224.0.0/12,218.248.0.0/16,218.250.0.0/15,218.252.0.0/14,219.0.0.0/10,219.64.0.0/13,219.73.0.0/16,219.74.0.0/15,219.76.0.0/14,219.80.0.0/15,219.83.0.0/16,219.84.0.0/14,219.88.0.0/13,219.96.0.0/11,219.160.0.0/11,219.192.0.0/12,219.208.0.0/13,219.240.0.0/15,219.248.0.0/13,220.0.0.0/10,220.64.0.0/11,220.96.0.0/12,220.116.0.0/14,220.120.0.0/13,220.128.0.0/12,220.144.0.0/13,220.152.0.0/15,220.156.0.0/14,220.208.0.0/12,220.224.0.0/13,220.232.0.0/15,220.235.0.0/16,220.236.0.0/14,220.240.0.0/15,220.244.0.0/14,220.253.0.0/16,220.254.0.0/15,221.0.0.0/8,221.240.0.0/12,222.0.0.0/8,223.0.0.0/8 + ".google.com",".twitter.com",".facebook.com",".youtube.com",".googlevideo.com",".googleusercontent.com",".appspot.com",".ggpht.com",".gstatic.com",".googleapis.com",".blogspot.com",".edgecastcdn.net",".twimg.com",".akamai.net",".fbcdn.net",".1e100.net",".amazonaws.com",".cloudfront.net",".wp.com",".wordpress.com",".googlecode.com",".gmail.com",".google-analytics.com",".youtube-nocookie.com",".ytimg.com",".blogger.com",".t.co",".bitly.com",".tinypic.com",".yfrog.com",".dropbox.com",".t66y.com",".sourceforge.net" diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 9f5f6450..2c1f2aba 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -2,7 +2,7 @@ Shadowsocks - shadowsocks + shadowsocks Global Settings @@ -10,8 +10,8 @@ Profile Switch to another profile NAT mode (deprecated) - Use NAT mode instead of VPN mode. - NAT mode is disabled without root. + Use NAT mode instead of VPN mode + NAT mode is disabled without root Server Settings @@ -71,8 +71,6 @@ Initializing… Resetting… Loading… - Yes - No Remove this profile "%s"? @@ -84,7 +82,7 @@ Shadowsocks %s QR Code Flush DNS cache - Require ROOT permission + Requires ROOT permission Flushing Add Profile Export to Clipboard From fb6d2df3ac62c87cfc70b24ef8014fcb95906573 Mon Sep 17 00:00:00 2001 From: Mygod Date: Mon, 9 Nov 2015 13:47:23 +0800 Subject: [PATCH 2/8] Fix PROXY_PREFS --- src/main/scala/com/github/shadowsocks/Shadowsocks.scala | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/scala/com/github/shadowsocks/Shadowsocks.scala b/src/main/scala/com/github/shadowsocks/Shadowsocks.scala index 26602118..5f07d5ea 100644 --- a/src/main/scala/com/github/shadowsocks/Shadowsocks.scala +++ b/src/main/scala/com/github/shadowsocks/Shadowsocks.scala @@ -96,8 +96,9 @@ object Shadowsocks { val REQUEST_CONNECT = 1 val PREFS_NAME = "Shadowsocks" - val PROXY_PREFS = Array(Key.profileName, Key.proxy, Key.remotePort, Key.localPort, Key.sitekey, Key.encMethod) - val FEATURE_PREFS = Array(Key.route, Key.isGlobalProxy, Key.proxyedApps, Key.isUdpDns, Key.isAuth, Key.isIpv6) + val PROXY_PREFS = Array(Key.profileName, Key.proxy, Key.remotePort, Key.localPort, Key.sitekey, Key.encMethod, + Key.isAuth) + val FEATURE_PREFS = Array(Key.route, Key.isGlobalProxy, Key.proxyedApps, Key.isUdpDns, Key.isIpv6) val EXECUTABLES = Array(Executable.PDNSD, Executable.REDSOCKS, Executable.SS_TUNNEL, Executable.SS_LOCAL, Executable.TUN2SOCKS) From 7c61df584b18a6096bcb59131d7ccbc840968b55 Mon Sep 17 00:00:00 2001 From: Mygod Date: Mon, 9 Nov 2015 13:54:42 +0800 Subject: [PATCH 3/8] Fix NatSwitchPreference --- .../preferences/NatSwitchPreference.scala | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/main/scala/com/github/shadowsocks/preferences/NatSwitchPreference.scala b/src/main/scala/com/github/shadowsocks/preferences/NatSwitchPreference.scala index 2bd38d27..0d9e34ba 100644 --- a/src/main/scala/com/github/shadowsocks/preferences/NatSwitchPreference.scala +++ b/src/main/scala/com/github/shadowsocks/preferences/NatSwitchPreference.scala @@ -14,14 +14,13 @@ final class NatSwitchPreference(context: Context, attrs: AttributeSet) extends S private var disabled = false override def isEnabled = super.isEnabled && !disabled + override def setEnabled(b: Boolean) = super.setEnabled(b && !disabled) - override def onGetDefaultValue(a: TypedArray, index: Int) = { - val result = ShadowsocksApplication.isVpnEnabled - if (!ShadowsocksApplication.isRoot) { - disabled = true - setEnabled(false) - setSummary(R.string.nat_summary_no_root) - } - result.asInstanceOf[AnyRef] + if (!ShadowsocksApplication.isRoot) { + disabled = true + setEnabled(false) + setSummary(R.string.nat_summary_no_root) } + + override def onGetDefaultValue(a: TypedArray, index: Int) = ShadowsocksApplication.isVpnEnabled.asInstanceOf[AnyRef] } From 5f0b1a50b2d362170813d626bf9391a8bf4e3470 Mon Sep 17 00:00:00 2001 From: Mygod Date: Mon, 9 Nov 2015 17:29:10 +0800 Subject: [PATCH 4/8] Add NumberPickerPreference --- src/main/res/values-zh/strings.xml | 6 +- src/main/res/values/attrs.xml | 6 +- src/main/res/values/strings.xml | 6 +- src/main/res/xml/pref_all.xml | 14 +++-- .../com/github/shadowsocks/Shadowsocks.scala | 40 ++++--------- .../shadowsocks/database/ProfileManager.scala | 18 ++---- .../preferences/DropDownPreference.scala | 1 - .../preferences/NumberPickerPreference.scala | 56 +++++++++++++++++++ .../preferences/SummaryPreference.scala | 1 - .../shadowsocks/utils/ConfigUtils.scala | 14 +---- 10 files changed, 89 insertions(+), 73 deletions(-) create mode 100644 src/main/scala/com/github/shadowsocks/preferences/NumberPickerPreference.scala diff --git a/src/main/res/values-zh/strings.xml b/src/main/res/values-zh/strings.xml index 08aba74f..e405acba 100755 --- a/src/main/res/values-zh/strings.xml +++ b/src/main/res/values-zh/strings.xml @@ -11,9 +11,9 @@ 服务器 远程服务器的地址 远程端口 - 远程服务器的端口号 + %d(远程服务器的端口号) 本地端口 - 本地客户端的端口号 + %d(本地客户端的端口号) 密码 远程服务器的密码 加密方法 @@ -43,8 +43,6 @@ 正在关闭…… 后台服务启动失败:%s 关闭 - 本地端口号应大于 1024 - 端口号不能为空 代理服务器地址不能为空 连接 正在初始化…… diff --git a/src/main/res/values/attrs.xml b/src/main/res/values/attrs.xml index ca0adbc5..85c250f1 100644 --- a/src/main/res/values/attrs.xml +++ b/src/main/res/values/attrs.xml @@ -7,4 +7,8 @@ - \ No newline at end of file + + + + + diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index c5d37579..e4c16cdc 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -19,9 +19,9 @@ Server Hostname or IP of the remote server Remote Port - Port number of the remote server + %d (port number of the remote server) Local Port - Port number of the local server + %d (port number of the local server) Password Password of the remote server Encrypt Method @@ -64,8 +64,6 @@ Close - The local port number should be greater than 1024 - Port should not be empty Proxy should not be empty Connect Initializing… diff --git a/src/main/res/xml/pref_all.xml b/src/main/res/xml/pref_all.xml index c08688de..f2a6af85 100644 --- a/src/main/res/xml/pref_all.xml +++ b/src/main/res/xml/pref_all.xml @@ -26,17 +26,19 @@ android:key="proxy" android:summary="@string/proxy_summary" android:title="@string/proxy"/> - - - Snackbar.make(getWindow.getDecorView.findViewById(android.R.id.content), R.string.port_alert, - Snackbar.LENGTH_LONG).show - return false - } - true - } - /** Called when connect button is clicked. */ def serviceStart() { bgService.start(ConfigUtils.load(ShadowsocksApplication.settings)) diff --git a/src/main/scala/com/github/shadowsocks/database/ProfileManager.scala b/src/main/scala/com/github/shadowsocks/database/ProfileManager.scala index 08ea17d3..c9e9d099 100644 --- a/src/main/scala/com/github/shadowsocks/database/ProfileManager.scala +++ b/src/main/scala/com/github/shadowsocks/database/ProfileManager.scala @@ -128,8 +128,8 @@ class ProfileManager(settings: SharedPreferences, dbHelper: DBHelper) { edit.putString(Key.proxy, profile.host) edit.putString(Key.sitekey, profile.password) edit.putString(Key.encMethod, profile.method) - edit.putString(Key.remotePort, profile.remotePort.toString) - edit.putString(Key.localPort, profile.localPort.toString) + edit.putInt(Key.remotePort, profile.remotePort) + edit.putInt(Key.localPort, profile.localPort) edit.putString(Key.proxied, profile.individual) edit.putInt(Key.profileId, profile.id) edit.putString(Key.route, profile.route) @@ -155,18 +155,8 @@ class ProfileManager(settings: SharedPreferences, dbHelper: DBHelper) { profile.password = settings.getString(Key.sitekey, "default") profile.method = settings.getString(Key.encMethod, "table") profile.route = settings.getString(Key.route, "all") - profile.remotePort = try { - Integer.valueOf(settings.getString(Key.remotePort, "1984")) - } catch { - case ex: NumberFormatException => - 1984 - } - profile.localPort = try { - Integer.valueOf(settings.getString(Key.localPort, "1984")) - } catch { - case ex: NumberFormatException => - 1984 - } + profile.remotePort = settings.getInt(Key.remotePort, 1984) + profile.localPort = settings.getInt(Key.localPort, 1984) profile.individual = settings.getString(Key.proxied, "") profile diff --git a/src/main/scala/com/github/shadowsocks/preferences/DropDownPreference.scala b/src/main/scala/com/github/shadowsocks/preferences/DropDownPreference.scala index 142e384a..c42891f3 100644 --- a/src/main/scala/com/github/shadowsocks/preferences/DropDownPreference.scala +++ b/src/main/scala/com/github/shadowsocks/preferences/DropDownPreference.scala @@ -14,7 +14,6 @@ import android.widget.{AdapterView, ArrayAdapter} import com.github.shadowsocks.R /** - * Based on: https://github.com/Mygod/mygod-lib-android/blob/683c41cb86d10e99ab0f457d41a218c6915fccc8/lib/src/main/scala/tk/mygod/preference/DropDownPreference.scala * @author Mygod */ final class DropDownPreference(private val mContext: Context, attrs: AttributeSet = null) diff --git a/src/main/scala/com/github/shadowsocks/preferences/NumberPickerPreference.scala b/src/main/scala/com/github/shadowsocks/preferences/NumberPickerPreference.scala new file mode 100644 index 00000000..9fa2d7aa --- /dev/null +++ b/src/main/scala/com/github/shadowsocks/preferences/NumberPickerPreference.scala @@ -0,0 +1,56 @@ +package com.github.shadowsocks.preferences + +import android.content.Context +import android.content.res.TypedArray +import android.preference.DialogPreference +import android.util.AttributeSet +import android.view.ViewGroup +import android.widget.NumberPicker +import com.github.shadowsocks.R + +/** + * @author Mygod + */ +final class NumberPickerPreference(context: Context, attrs: AttributeSet = null) + extends DialogPreference(context, attrs) with SummaryPreference { + private val picker = new NumberPicker(context) + private var value: Int = _ + + { + val a: TypedArray = context.obtainStyledAttributes(attrs, R.styleable.NumberPickerPreference) + setMin(a.getInt(R.styleable.NumberPickerPreference_min, 0)) + setMax(a.getInt(R.styleable.NumberPickerPreference_max, Int.MaxValue - 1)) + a.recycle + } + initSummary(context, attrs) + + def getValue = value + def getMin = if (picker == null) 0 else picker.getMinValue + def getMax = picker.getMaxValue + def setValue(i: Int) { + if (i == getValue || !callChangeListener(i)) return + picker.setValue(i) + value = picker.getValue + persistInt(value) + notifyChanged + } + def setMin(value: Int) = picker.setMinValue(value) + def setMax(value: Int) = picker.setMaxValue(value) + + override protected def onCreateDialogView = { + val parent = picker.getParent.asInstanceOf[ViewGroup] + if (parent != null) parent.removeView(picker) + picker + } + override protected def onDialogClosed(positiveResult: Boolean) { + picker.clearFocus // commit changes + super.onDialogClosed(positiveResult) // forward compatibility + if (positiveResult) setValue(picker.getValue) else picker.setValue(value) + } + override protected def onGetDefaultValue(a: TypedArray, index: Int) = a.getInt(index, getMin).asInstanceOf[AnyRef] + override protected def onSetInitialValue(restorePersistedValue: Boolean, defaultValue: Any) { + val default = defaultValue.asInstanceOf[Int] + setValue(if (restorePersistedValue) getPersistedInt(default) else default) + } + protected def getSummaryValue: AnyRef = getValue.asInstanceOf[AnyRef] +} diff --git a/src/main/scala/com/github/shadowsocks/preferences/SummaryPreference.scala b/src/main/scala/com/github/shadowsocks/preferences/SummaryPreference.scala index 56523494..15e59970 100644 --- a/src/main/scala/com/github/shadowsocks/preferences/SummaryPreference.scala +++ b/src/main/scala/com/github/shadowsocks/preferences/SummaryPreference.scala @@ -7,7 +7,6 @@ import com.github.shadowsocks.R /** * Make your preference support %s in summary. Override getSummaryValue to customize what to put in. - * Based on: https://github.com/Mygod/mygod-lib-android/blob/eb20c57a0da70bb5dbc27104002f20fb1eb31d76/lib/src/main/scala/tk/mygod/preference/SummaryPreference.scala * @author Mygod */ trait SummaryPreference extends Preference { diff --git a/src/main/scala/com/github/shadowsocks/utils/ConfigUtils.scala b/src/main/scala/com/github/shadowsocks/utils/ConfigUtils.scala index 774c355b..cf2bcf65 100644 --- a/src/main/scala/com/github/shadowsocks/utils/ConfigUtils.scala +++ b/src/main/scala/com/github/shadowsocks/utils/ConfigUtils.scala @@ -261,18 +261,8 @@ object ConfigUtils { val encMethod = settings.getString(Key.encMethod, "table") val route = settings.getString(Key.route, "all") - val remotePort: Int = try { - settings.getString(Key.remotePort, "1984").toInt - } catch { - case ex: NumberFormatException => - 1984 - } - val localPort: Int = try { - settings.getString(Key.localPort, "1984").toInt - } catch { - case ex: NumberFormatException => - 1984 - } + val remotePort = settings.getInt(Key.remotePort, 1984) + val localPort = settings.getInt(Key.localPort, 1984) val proxiedAppString = settings.getString(Key.proxied, "") new Config(isGlobalProxy, isGFWList, isBypassApps, isTrafficStat, isUdpDns, isAuth, isIpv6, profileName, proxy, From bf9b3f4fdea31521397bfb23f61775175cb33ab5 Mon Sep 17 00:00:00 2001 From: Mygod Date: Mon, 9 Nov 2015 17:42:02 +0800 Subject: [PATCH 5/8] Hide root summary if rooted --- src/main/res/values-zh/strings.xml | 2 +- src/main/res/values/strings.xml | 2 +- src/main/res/xml/pref_all.xml | 3 +-- .../shadowsocks/ShadowsocksSettings.scala | 8 ++++++-- .../com/github/shadowsocks/utils/Utils.scala | 19 ++++--------------- 5 files changed, 13 insertions(+), 21 deletions(-) diff --git a/src/main/res/values-zh/strings.xml b/src/main/res/values-zh/strings.xml index e405acba..02bd0674 100755 --- a/src/main/res/values-zh/strings.xml +++ b/src/main/res/values-zh/strings.xml @@ -56,7 +56,7 @@ 关于 影梭(shadowsocks)%s 刷新 DNS 缓存 - 需要 ROOT 权限 + 需要 ROOT 权限 刷新中…… 二维码 添加配置文件 diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index e4c16cdc..cd88ddf2 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -80,7 +80,7 @@ Shadowsocks %s QR Code Flush DNS cache - Requires ROOT permission + Requires ROOT permission Flushing Add Profile Export to Clipboard diff --git a/src/main/res/xml/pref_all.xml b/src/main/res/xml/pref_all.xml index f2a6af85..aa33012e 100644 --- a/src/main/res/xml/pref_all.xml +++ b/src/main/res/xml/pref_all.xml @@ -104,8 +104,7 @@ android:summary="@string/nat_summary"/> - + diff --git a/src/main/scala/com/github/shadowsocks/ShadowsocksSettings.scala b/src/main/scala/com/github/shadowsocks/ShadowsocksSettings.scala index e7f9dfd6..79de4e4b 100644 --- a/src/main/scala/com/github/shadowsocks/ShadowsocksSettings.scala +++ b/src/main/scala/com/github/shadowsocks/ShadowsocksSettings.scala @@ -5,7 +5,7 @@ import java.util.Locale import android.app.AlertDialog import android.content.{DialogInterface, Intent} import android.net.Uri -import android.os.Bundle +import android.os.{Build, Bundle} import android.preference.{Preference, PreferenceFragment} import android.webkit.{WebViewClient, WebView} import com.github.shadowsocks.utils.Key @@ -30,7 +30,11 @@ class ShadowsocksSettings extends PreferenceFragment { true }) - findPreference("flush_dnscache").setOnPreferenceClickListener((preference: Preference) => { + val flush = findPreference("flush_dnscache") + if (Build.VERSION.SDK_INT >= 17 && !ShadowsocksApplication.isRoot) { + flush.setEnabled(false) + flush.setSummary(R.string.flush_dnscache_summary_disabled) + } else flush.setOnPreferenceClickListener((preference: Preference) => { ShadowsocksApplication.track(Shadowsocks.TAG, "flush_dnscache") activity.flushDnsCache() true diff --git a/src/main/scala/com/github/shadowsocks/utils/Utils.scala b/src/main/scala/com/github/shadowsocks/utils/Utils.scala index f2d5c981..1f1dceaf 100644 --- a/src/main/scala/com/github/shadowsocks/utils/Utils.scala +++ b/src/main/scala/com/github/shadowsocks/utils/Utils.scala @@ -55,7 +55,7 @@ import android.util.{DisplayMetrics, Base64, Log} import android.view.View.MeasureSpec import android.view.{Gravity, View, Window} import android.widget.Toast -import com.github.shadowsocks.BuildConfig +import com.github.shadowsocks.{ShadowsocksApplication, BuildConfig} import org.xbill.DNS._ @@ -155,24 +155,13 @@ object Utils { // Blocked > 3 seconds def toggleAirplaneMode(context: Context) { - if (Build.VERSION.SDK_INT >= 17) { - toggleAboveApiLevel17() - } else { + if (ShadowsocksApplication.isRoot) { + Console.runRootCommand(Array("ndc resolver flushdefaultif", "ndc resolver flushif wlan0")) + } else if (Build.VERSION.SDK_INT < 17) { toggleBelowApiLevel17(context) } } - private def toggleAboveApiLevel17() { - // Android 4.2 and above - - Console.runRootCommand(Array("ndc resolver flushdefaultif", "ndc resolver flushif wlan0")) - - //Utils.runRootCommand("settings put global airplane_mode_on 1\n" - // + "am broadcast -a android.intent.action.AIRPLANE_MODE --ez state true\n" - // + "settings put global airplane_mode_on 0\n" - // + "am broadcast -a android.intent.action.AIRPLANE_MODE --ez state false\n") - } - //noinspection ScalaDeprecation private def toggleBelowApiLevel17(context: Context) { // Android 4.2 below From 58c16704a15133d0bb0f1a8d0d3dcbbee45957fa Mon Sep 17 00:00:00 2001 From: Mygod Date: Mon, 9 Nov 2015 18:44:12 +0800 Subject: [PATCH 6/8] No more restarting AppManager after importing --- .../com/github/shadowsocks/AppManager.scala | 29 ++++++++++--------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/src/main/scala/com/github/shadowsocks/AppManager.scala b/src/main/scala/com/github/shadowsocks/AppManager.scala index 4ad4bfe6..5be1ff5e 100644 --- a/src/main/scala/com/github/shadowsocks/AppManager.scala +++ b/src/main/scala/com/github/shadowsocks/AppManager.scala @@ -104,11 +104,12 @@ class AppManager extends AppCompatActivity with OnCheckedChangeListener with OnC implicit def anyrefarray_tools[T <: AnyRef](a: Array[T]): ObjectArrayTools[T] = new ObjectArrayTools(a) - var apps: Array[ProxiedApp] = null - var appListView: ListView = null - var overlay: TextView = null - var adapter: ListAdapter = null - var appsLoaded: Boolean = false + var apps: Array[ProxiedApp] = _ + var appListView: ListView = _ + var loadingView: View = _ + var overlay: TextView = _ + var adapter: ListAdapter = _ + @volatile var appsLoading: Boolean = _ def loadApps(context: Context): Array[ProxiedApp] = { val proxiedAppString = ShadowsocksApplication.settings.getString(Key.proxied, "") @@ -133,6 +134,7 @@ class AppManager extends AppCompatActivity with OnCheckedChangeListener with OnC } def loadApps() { + appsLoading = true apps = loadApps(this).sortWith((a, b) => { if (a == null || b == null || a.name == null || b.name == null) { true @@ -173,7 +175,6 @@ class AppManager extends AppCompatActivity with OnCheckedChangeListener with OnC convertView } } - appsLoaded = true } /** Called an application is check/unchecked */ @@ -230,9 +231,9 @@ class AppManager extends AppCompatActivity with OnCheckedChangeListener with OnC prefs.edit.putString(Key.proxied, apps).apply() Toast.makeText(this, R.string.action_import_msg, Toast.LENGTH_SHORT).show() // Restart activity - val intent = getIntent - finish() - startActivity(intent) + appListView.setVisibility(View.GONE) + loadingView.setVisibility(View.VISIBLE) + if (appsLoading) appsLoading = false else loadAppsAsync() return true } } @@ -272,6 +273,7 @@ class AppManager extends AppCompatActivity with OnCheckedChangeListener with OnC ShadowsocksApplication.settings.edit().putBoolean(Key.isBypassApps, checked).apply()) bypassSwitch.setChecked(ShadowsocksApplication.settings.getBoolean(Key.isBypassApps, false)) + loadingView = findViewById(R.id.loading) appListView = findViewById(R.id.applistview).asInstanceOf[ListView] appListView.setOnScrollListener(new AbsListView.OnScrollListener { var visible = false @@ -294,15 +296,16 @@ class AppManager extends AppCompatActivity with OnCheckedChangeListener with OnC } } }) + loadAppsAsync() } - protected override def onResume() { - super.onResume() + def loadAppsAsync() { Future { - if (!appsLoaded) loadApps() + while (!appsLoading) loadApps() + appsLoading = false handler.post(() => { appListView.setAdapter(adapter) - Utils.crossFade(AppManager.this, findViewById(R.id.loading), appListView) + Utils.crossFade(AppManager.this, loadingView, appListView) }) } } From b05adbdd434ce7c8cb3cc95c1bf96fed418b30df Mon Sep 17 00:00:00 2001 From: Mygod Date: Mon, 9 Nov 2015 20:32:22 +0800 Subject: [PATCH 7/8] Remove redundant Global Proxy --- src/main/AndroidManifest.xml | 12 +--- .../com/github/shadowsocks/aidl/Config.java | 20 ++---- src/main/res/layout/layout_apps.xml | 70 ++++++++++++------- src/main/res/layout/layout_apps_item.xml | 2 +- src/main/res/values-zh/strings.xml | 4 +- src/main/res/values/strings.xml | 4 +- src/main/res/xml/pref_all.xml | 14 +--- .../com/github/shadowsocks/AppManager.scala | 8 ++- .../com/github/shadowsocks/Shadowsocks.scala | 17 +++-- .../shadowsocks/ShadowsocksNatService.scala | 4 +- .../shadowsocks/ShadowsocksSettings.scala | 15 +++- .../shadowsocks/ShadowsocksVpnService.scala | 2 +- .../shadowsocks/database/DBHelper.scala | 28 +++++--- .../github/shadowsocks/database/Profile.scala | 20 +----- .../shadowsocks/database/ProfileManager.scala | 8 +-- .../shadowsocks/utils/ConfigUtils.scala | 13 ++-- .../github/shadowsocks/utils/Constants.scala | 5 +- 17 files changed, 122 insertions(+), 124 deletions(-) diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml index c5ac5989..14c0bb78 100644 --- a/src/main/AndroidManifest.xml +++ b/src/main/AndroidManifest.xml @@ -64,7 +64,7 @@ @@ -75,14 +75,8 @@ - - - - - + android:label="@string/proxied_apps" + android:parentActivityName=".Shadowsocks"/> - - + + + + + + + - + + + android:layout_marginRight="8dp"/> diff --git a/src/main/res/values-zh/strings.xml b/src/main/res/values-zh/strings.xml index 02bd0674..da320a87 100755 --- a/src/main/res/values-zh/strings.xml +++ b/src/main/res/values-zh/strings.xml @@ -25,11 +25,9 @@ 国内路由 绕过所有位于中国的网站 路由 - 全局代理 - 设置系统代理 分应用代理 为应用程序分别设置代理 - 分应用代理 + 开 绕行模式 启用该选项,以使所选应用程序的流量不经过代理 自动连接 diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index cd88ddf2..597957e6 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -40,11 +40,9 @@ Bypass all sites located in China Route - Global Proxy - Set up system-wide proxy Per-App Proxy Set proxy for selected apps - Per-App Proxy + On Bypass Mode Enable this option to bypass selected apps Auto Connect diff --git a/src/main/res/xml/pref_all.xml b/src/main/res/xml/pref_all.xml index aa33012e..8382cabc 100644 --- a/src/main/res/xml/pref_all.xml +++ b/src/main/res/xml/pref_all.xml @@ -77,18 +77,10 @@ android:summary="@string/ipv6_summary" android:title="@string/ipv6"/> - - - + android:title="@string/proxied_apps"/> { val intent = getParentActivityIntent @@ -268,6 +268,12 @@ class AppManager extends AppCompatActivity with OnCheckedChangeListener with OnC WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE, PixelFormat.TRANSLUCENT)) + findViewById(R.id.onSwitch).asInstanceOf[Switch] + .setOnCheckedChangeListener((button: CompoundButton, checked: Boolean) => { + ShadowsocksApplication.settings.edit().putBoolean(Key.isProxyApps, checked).apply() + finish() + }) + val bypassSwitch = findViewById(R.id.bypassSwitch).asInstanceOf[Switch] bypassSwitch.setOnCheckedChangeListener((button: CompoundButton, checked: Boolean) => ShadowsocksApplication.settings.edit().putBoolean(Key.isBypassApps, checked).apply()) diff --git a/src/main/scala/com/github/shadowsocks/Shadowsocks.scala b/src/main/scala/com/github/shadowsocks/Shadowsocks.scala index 7e9abe41..3989c9cf 100644 --- a/src/main/scala/com/github/shadowsocks/Shadowsocks.scala +++ b/src/main/scala/com/github/shadowsocks/Shadowsocks.scala @@ -60,7 +60,7 @@ import android.widget._ import com.github.jorgecastilloprz.FABProgressCircle import com.github.shadowsocks.aidl.{IShadowsocksService, IShadowsocksServiceCallback} import com.github.shadowsocks.database._ -import com.github.shadowsocks.preferences.{DropDownPreference, PasswordEditTextPreference, SummaryEditTextPreference} +import com.github.shadowsocks.preferences.{NumberPickerPreference, DropDownPreference, PasswordEditTextPreference, SummaryEditTextPreference} import com.github.shadowsocks.utils._ import com.google.android.gms.ads.{AdRequest, AdSize, AdView} @@ -98,7 +98,7 @@ object Shadowsocks { val PREFS_NAME = "Shadowsocks" val PROXY_PREFS = Array(Key.profileName, Key.proxy, Key.remotePort, Key.localPort, Key.sitekey, Key.encMethod, Key.isAuth) - val FEATURE_PREFS = Array(Key.route, Key.isGlobalProxy, Key.proxyedApps, Key.isUdpDns, Key.isIpv6) + val FEATURE_PREFS = Array(Key.route, Key.isProxyApps, Key.isUdpDns, Key.isIpv6) val EXECUTABLES = Array(Executable.PDNSD, Executable.REDSOCKS, Executable.SS_TUNNEL, Executable.SS_LOCAL, Executable.TUN2SOCKS) @@ -112,6 +112,10 @@ object Shadowsocks { pref.asInstanceOf[PasswordEditTextPreference].setText(value) } + def updateNumberPickerPreference(pref: Preference, value: Int): Unit = { + pref.asInstanceOf[NumberPickerPreference].setValue(value) + } + def updateSummaryEditTextPreference(pref: Preference, value: String) { pref.setSummary(value) pref.asInstanceOf[SummaryEditTextPreference].setText(value) @@ -125,12 +129,12 @@ object Shadowsocks { name match { case Key.profileName => updateSummaryEditTextPreference(pref, profile.name) case Key.proxy => updateSummaryEditTextPreference(pref, profile.host) - case Key.remotePort => updateSummaryEditTextPreference(pref, profile.remotePort.toString) - case Key.localPort => updateSummaryEditTextPreference(pref, profile.localPort.toString) + case Key.remotePort => updateNumberPickerPreference(pref, profile.remotePort) + case Key.localPort => updateNumberPickerPreference(pref, profile.localPort) case Key.sitekey => updatePasswordEditTextPreference(pref, profile.password) case Key.encMethod => updateDropDownPreference(pref, profile.method) case Key.route => updateDropDownPreference(pref, profile.route) - case Key.isGlobalProxy => updateSwitchPreference(pref, profile.global) + case Key.isProxyApps => updateSwitchPreference(pref, profile.proxyApps) case Key.isUdpDns => updateSwitchPreference(pref, profile.udpdns) case Key.isAuth => updateSwitchPreference(pref, profile.auth) case Key.isIpv6 => updateSwitchPreference(pref, profile.ipv6) @@ -501,8 +505,7 @@ class Shadowsocks for (name <- Shadowsocks.FEATURE_PREFS) { val pref = preferences.findPreference(name) if (pref != null) { - if (Seq(Key.isGlobalProxy, Key.proxyedApps) - .contains(name)) { + if (name == Key.isProxyApps) { pref.setEnabled(enabled && (Utils.isLollipopOrAbove || !ShadowsocksApplication.isVpnEnabled)) } else { pref.setEnabled(enabled) diff --git a/src/main/scala/com/github/shadowsocks/ShadowsocksNatService.scala b/src/main/scala/com/github/shadowsocks/ShadowsocksNatService.scala index 1ea60a5f..54fdfa3d 100644 --- a/src/main/scala/com/github/shadowsocks/ShadowsocksNatService.scala +++ b/src/main/scala/com/github/shadowsocks/ShadowsocksNatService.scala @@ -390,10 +390,10 @@ class ShadowsocksNatService extends Service with BaseService { init_sb.append(Utils.getIptables + " -t nat -A OUTPUT -p udp --dport 53 -j DNAT --to-destination 127.0.0.1:" + 8153) - if (config.isGlobalProxy || config.isBypassApps) { + if (!config.isProxyApps || config.isBypassApps) { http_sb.append(Utils.getIptables + CMD_IPTABLES_DNAT_ADD_SOCKS) } - if (!config.isGlobalProxy) { + if (config.isProxyApps) { if (apps == null || apps.length <= 0) { apps = AppManager.getProxiedApps(this, config.proxiedAppString) } diff --git a/src/main/scala/com/github/shadowsocks/ShadowsocksSettings.scala b/src/main/scala/com/github/shadowsocks/ShadowsocksSettings.scala index 79de4e4b..82a3f0d4 100644 --- a/src/main/scala/com/github/shadowsocks/ShadowsocksSettings.scala +++ b/src/main/scala/com/github/shadowsocks/ShadowsocksSettings.scala @@ -6,7 +6,7 @@ import android.app.AlertDialog import android.content.{DialogInterface, Intent} import android.net.Uri import android.os.{Build, Bundle} -import android.preference.{Preference, PreferenceFragment} +import android.preference.{SwitchPreference, Preference, PreferenceFragment} import android.webkit.{WebViewClient, WebView} import com.github.shadowsocks.utils.Key @@ -14,10 +14,18 @@ import com.github.shadowsocks.utils.Key class ShadowsocksSettings extends PreferenceFragment { private lazy val activity = getActivity.asInstanceOf[Shadowsocks] + private var isProxyApps: SwitchPreference = _ + override def onCreate(savedInstanceState: Bundle) { super.onCreate(savedInstanceState) addPreferencesFromResource(R.xml.pref_all) + isProxyApps = findPreference(Key.isProxyApps).asInstanceOf[SwitchPreference] + isProxyApps.setOnPreferenceChangeListener((preference: Preference, newValue: Any) => { + startActivity(new Intent(activity, classOf[AppManager])) + newValue.asInstanceOf[Boolean] // keep it ON + }) + findPreference(Key.isNAT).setOnPreferenceChangeListener((preference: Preference, newValue: Any) => if (ShadowsocksApplication.isRoot) activity.handler.post(() => { activity.deattachService() @@ -62,4 +70,9 @@ class ShadowsocksSettings extends PreferenceFragment { true }) } + + override def onResume = { + super.onResume + isProxyApps.setChecked(ShadowsocksApplication.settings.getBoolean(Key.isProxyApps, false)) // update + } } diff --git a/src/main/scala/com/github/shadowsocks/ShadowsocksVpnService.scala b/src/main/scala/com/github/shadowsocks/ShadowsocksVpnService.scala index ba14253f..0b454a62 100644 --- a/src/main/scala/com/github/shadowsocks/ShadowsocksVpnService.scala +++ b/src/main/scala/com/github/shadowsocks/ShadowsocksVpnService.scala @@ -394,7 +394,7 @@ class ShadowsocksVpnService extends VpnService with BaseService { if (Utils.isLollipopOrAbove) { - if (!config.isGlobalProxy) { + if (config.isProxyApps) { val apps = AppManager.getProxiedApps(this, config.proxiedAppString) val pkgSet: mutable.HashSet[String] = new mutable.HashSet[String] for (app <- apps) { diff --git a/src/main/scala/com/github/shadowsocks/database/DBHelper.scala b/src/main/scala/com/github/shadowsocks/database/DBHelper.scala index b3e39670..d2ed5a4c 100644 --- a/src/main/scala/com/github/shadowsocks/database/DBHelper.scala +++ b/src/main/scala/com/github/shadowsocks/database/DBHelper.scala @@ -39,19 +39,19 @@ package com.github.shadowsocks.database -import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper import android.content.Context import android.database.sqlite.SQLiteDatabase +import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper +import com.j256.ormlite.dao.Dao import com.j256.ormlite.support.ConnectionSource import com.j256.ormlite.table.TableUtils -import com.j256.ormlite.dao.Dao object DBHelper { val PROFILE = "profile.db" } class DBHelper(val context: Context) - extends OrmLiteSqliteOpenHelper(context, DBHelper.PROFILE, null, 11) { + extends OrmLiteSqliteOpenHelper(context, DBHelper.PROFILE, null, 12) { lazy val profileDao: Dao[Profile, Int] = getDao(classOf[Profile]) @@ -63,21 +63,31 @@ class DBHelper(val context: Context) newVersion: Int) { if (oldVersion != newVersion) { if (oldVersion < 7) { - profileDao.executeRaw("DROP TABLE IF EXISTS 'profile';") + profileDao.executeRawNoArgs("DROP TABLE IF EXISTS 'profile';") onCreate(database, connectionSource) } else { if (oldVersion < 8) { - profileDao.executeRaw("ALTER TABLE `profile` ADD COLUMN udpdns SMALLINT;") - profileDao.executeRaw("ALTER TABLE `profile` ADD COLUMN route VARCHAR;") + profileDao.executeRawNoArgs("ALTER TABLE `profile` ADD COLUMN udpdns SMALLINT;") + profileDao.executeRawNoArgs("ALTER TABLE `profile` ADD COLUMN route VARCHAR;") } if (oldVersion < 9) { - profileDao.executeRaw("ALTER TABLE `profile` ADD COLUMN route VARCHAR;") + profileDao.executeRawNoArgs("ALTER TABLE `profile` ADD COLUMN route VARCHAR;") } if (oldVersion < 10) { - profileDao.executeRaw("ALTER TABLE `profile` ADD COLUMN auth SMALLINT;") + profileDao.executeRawNoArgs("ALTER TABLE `profile` ADD COLUMN auth SMALLINT;") } if (oldVersion < 11) { - profileDao.executeRaw("ALTER TABLE `profile` ADD COLUMN ipv6 SMALLINT;") + profileDao.executeRawNoArgs("ALTER TABLE `profile` ADD COLUMN ipv6 SMALLINT;") + } + if (oldVersion < 12) { + profileDao.executeRawNoArgs("ALTER TABLE `profile` RENAME TO `tmp`;") + onCreate(database, connectionSource) + profileDao.executeRawNoArgs( + "INSERT INTO `profile`(id, name, host, localPort, remotePort, password, method, route, proxyApps, bypass," + + " udpdns, auth, ipv6, individual) " + + "SELECT id, name, host, localPort, remotePort, password, method, route, 1 - global, bypass, udpdns, auth," + + " ipv6, individual FROM `tmp`;") + profileDao.executeRawNoArgs("DROP TABLE `tmp`;") } } } diff --git a/src/main/scala/com/github/shadowsocks/database/Profile.scala b/src/main/scala/com/github/shadowsocks/database/Profile.scala index 19d48932..8be48264 100644 --- a/src/main/scala/com/github/shadowsocks/database/Profile.scala +++ b/src/main/scala/com/github/shadowsocks/database/Profile.scala @@ -63,30 +63,15 @@ class Profile { @DatabaseField var method: String = "rc4" - @DatabaseField - var date: String = "" - @DatabaseField var route: String = "all" @DatabaseField - var upload: Int = 0 - - @DatabaseField - var download: Int = 0 - - @DatabaseField - var chnroute: Boolean = true - - @DatabaseField - var global: Boolean = true + var proxyApps: Boolean = false @DatabaseField var bypass: Boolean = false - @DatabaseField - var traffic: Boolean = false - @DatabaseField var udpdns: Boolean = false @@ -98,7 +83,4 @@ class Profile { @DatabaseField(dataType = DataType.LONG_STRING) var individual: String = "" - - @DatabaseField(dataType = DataType.LONG_STRING) - var description: String = "" } diff --git a/src/main/scala/com/github/shadowsocks/database/ProfileManager.scala b/src/main/scala/com/github/shadowsocks/database/ProfileManager.scala index c9e9d099..24da9121 100644 --- a/src/main/scala/com/github/shadowsocks/database/ProfileManager.scala +++ b/src/main/scala/com/github/shadowsocks/database/ProfileManager.scala @@ -117,10 +117,8 @@ class ProfileManager(settings: SharedPreferences, dbHelper: DBHelper) { } val edit = settings.edit() - edit.putBoolean(Key.isGlobalProxy, profile.global) - edit.putBoolean(Key.isGFWList, profile.chnroute) + edit.putBoolean(Key.isProxyApps, profile.proxyApps) edit.putBoolean(Key.isBypassApps, profile.bypass) - edit.putBoolean(Key.isTrafficStat, profile.traffic) edit.putBoolean(Key.isUdpDns, profile.udpdns) edit.putBoolean(Key.isAuth, profile.auth) edit.putBoolean(Key.isIpv6, profile.ipv6) @@ -143,10 +141,8 @@ class ProfileManager(settings: SharedPreferences, dbHelper: DBHelper) { profile.id = settings.getInt(Key.profileId, -1) - profile.global = settings.getBoolean(Key.isGlobalProxy, false) - profile.chnroute = settings.getBoolean(Key.isGFWList, false) + profile.proxyApps = settings.getBoolean(Key.isProxyApps, false) profile.bypass = settings.getBoolean(Key.isBypassApps, false) - profile.traffic = settings.getBoolean(Key.isTrafficStat, false) profile.udpdns = settings.getBoolean(Key.isUdpDns, false) profile.auth = settings.getBoolean(Key.isAuth, false) profile.ipv6 = settings.getBoolean(Key.isIpv6, false) diff --git a/src/main/scala/com/github/shadowsocks/utils/ConfigUtils.scala b/src/main/scala/com/github/shadowsocks/utils/ConfigUtils.scala index cf2bcf65..73dc5db0 100644 --- a/src/main/scala/com/github/shadowsocks/utils/ConfigUtils.scala +++ b/src/main/scala/com/github/shadowsocks/utils/ConfigUtils.scala @@ -241,16 +241,13 @@ object ConfigUtils { val password = proxy(2).trim val method = proxy(3).trim - new Config(config.isGlobalProxy, config.isGFWList, config.isBypassApps, config.isTrafficStat, - config.isUdpDns, config.isAuth, config.isIpv6, config.profileName, host, password, method, config.proxiedAppString, config.route, port, - config.localPort) + new Config(config.isProxyApps, config.isBypassApps, config.isUdpDns, config.isAuth, config.isIpv6, + config.profileName, host, password, method, config.proxiedAppString, config.route, port, config.localPort) } def load(settings: SharedPreferences): Config = { - val isGlobalProxy = settings.getBoolean(Key.isGlobalProxy, false) - val isGFWList = settings.getBoolean(Key.isGFWList, false) + val isProxyApps = settings.getBoolean(Key.isProxyApps, false) val isBypassApps = settings.getBoolean(Key.isBypassApps, false) - val isTrafficStat = settings.getBoolean(Key.isTrafficStat, false) val isUdpDns = settings.getBoolean(Key.isUdpDns, false) val isAuth = settings.getBoolean(Key.isAuth, false) val isIpv6 = settings.getBoolean(Key.isIpv6, false) @@ -265,7 +262,7 @@ object ConfigUtils { val localPort = settings.getInt(Key.localPort, 1984) val proxiedAppString = settings.getString(Key.proxied, "") - new Config(isGlobalProxy, isGFWList, isBypassApps, isTrafficStat, isUdpDns, isAuth, isIpv6, profileName, proxy, - sitekey, encMethod, proxiedAppString, route, remotePort, localPort) + new Config(isProxyApps, isBypassApps, isUdpDns, isAuth, isIpv6, profileName, proxy, sitekey, encMethod, + proxiedAppString, route, remotePort, localPort) } } diff --git a/src/main/scala/com/github/shadowsocks/utils/Constants.scala b/src/main/scala/com/github/shadowsocks/utils/Constants.scala index a2c6a860..07b645fd 100644 --- a/src/main/scala/com/github/shadowsocks/utils/Constants.scala +++ b/src/main/scala/com/github/shadowsocks/utils/Constants.scala @@ -67,16 +67,13 @@ object Key { val profiles = "profiles" val isNAT = "isNAT" - val proxyedApps = "proxyedApps" val route = "route" val isRunning = "isRunning" val isAutoConnect = "isAutoConnect" - val isGlobalProxy = "isGlobalProxy" - val isGFWList = "isGFWList" + val isProxyApps = "isProxyApps" val isBypassApps = "isBypassApps" - val isTrafficStat = "isTrafficStat" val isUdpDns = "isUdpDns" val isAuth= "isAuth" val isIpv6= "isIpv6" From 63bc4a57f7c2f7fff8e390a70c67ca8ee2df8b17 Mon Sep 17 00:00:00 2001 From: Mygod Date: Mon, 9 Nov 2015 20:54:34 +0800 Subject: [PATCH 8/8] Refine layout for AppManager --- src/main/res/layout/layout_apps.xml | 8 +++--- src/main/res/layout/layout_apps_item.xml | 26 +++++++++---------- .../com/github/shadowsocks/AppManager.scala | 5 ++-- 3 files changed, 19 insertions(+), 20 deletions(-) diff --git a/src/main/res/layout/layout_apps.xml b/src/main/res/layout/layout_apps.xml index 5d41fd7e..25a98750 100644 --- a/src/main/res/layout/layout_apps.xml +++ b/src/main/res/layout/layout_apps.xml @@ -9,8 +9,8 @@ @@ -41,7 +41,7 @@ android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" - android:padding="3dp" + android:padding="4dp" android:gravity="center_vertical" android:textSize="18sp" android:text="@string/bypass_apps"/> diff --git a/src/main/res/layout/layout_apps_item.xml b/src/main/res/layout/layout_apps_item.xml index 5a97f2cc..69f14991 100644 --- a/src/main/res/layout/layout_apps_item.xml +++ b/src/main/res/layout/layout_apps_item.xml @@ -1,34 +1,34 @@ - - - + android:background="?android:attr/selectableItemBackground"> + android:paddingLeft="8dp" + android:paddingRight="8dp" + android:paddingTop="2dp" + android:paddingBottom="2dp"/> + android:ellipsize="end" + android:textSize="18sp"/> - - + diff --git a/src/main/scala/com/github/shadowsocks/AppManager.scala b/src/main/scala/com/github/shadowsocks/AppManager.scala index af617847..3d5da43d 100644 --- a/src/main/scala/com/github/shadowsocks/AppManager.scala +++ b/src/main/scala/com/github/shadowsocks/AppManager.scala @@ -156,8 +156,7 @@ class AppManager extends AppCompatActivity with OnCheckedChangeListener with OnC val switch = convertView.findViewById(R.id.itemcheck).asInstanceOf[Switch] val text = convertView.findViewById(R.id.itemtext).asInstanceOf[TextView] entry = new ListEntry(switch, text, icon) - entry.text.setOnClickListener(AppManager.this) - entry.text.setOnClickListener(AppManager.this) + convertView.setOnClickListener(AppManager.this) convertView.setTag(entry) entry.switch.setOnCheckedChangeListener(AppManager.this) } else { @@ -187,7 +186,7 @@ class AppManager extends AppCompatActivity with OnCheckedChangeListener with OnC } def onClick(v: View) { - val switch = v.getTag.asInstanceOf[Switch] + val switch = v.getTag.asInstanceOf[ListEntry].switch val app: ProxiedApp = switch.getTag.asInstanceOf[ProxiedApp] if (app != null) { app.proxied = !app.proxied