From bdf8060cd6580e3fe05263e87dda4c93a1aec8d2 Mon Sep 17 00:00:00 2001 From: dxjia Date: Wed, 17 Jun 2015 17:01:49 +0800 Subject: [PATCH 01/54] add message format when create message from pdu Signed-off-by: dxjia --- .../me/drakeet/inmessage/service/SMSBroadcastReceiver.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/me/drakeet/inmessage/service/SMSBroadcastReceiver.java b/app/src/main/java/me/drakeet/inmessage/service/SMSBroadcastReceiver.java index d4003f3..5a03684 100755 --- a/app/src/main/java/me/drakeet/inmessage/service/SMSBroadcastReceiver.java +++ b/app/src/main/java/me/drakeet/inmessage/service/SMSBroadcastReceiver.java @@ -28,9 +28,10 @@ public class SMSBroadcastReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { //从Intent中接受信息 Object[] pdus = (Object[]) intent.getExtras().get("pdus"); + String format = intent.getStringExtra("format"); for (Object p : pdus) { byte[] sms = (byte[]) p; - SmsMessage message = SmsMessage.createFromPdu(sms); + SmsMessage message = (format != null) ? SmsMessage.createFromPdu(sms, format) : SmsMessage.createFromPdu(sms); //获取短信内容 final String content = message.getMessageBody(); //获取发送时间 From 45891784753d78f58f8b7a39fedd9859b5d6ec78 Mon Sep 17 00:00:00 2001 From: drakeet Date: Thu, 18 Jun 2015 10:52:53 +0800 Subject: [PATCH 02/54] =?UTF-8?q?=E6=94=BE=E5=BC=83=20createFromPdu(pdu,?= =?UTF-8?q?=20format)=20=E6=96=B9=E6=B3=95=E3=80=82=E3=80=82=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 6 +- .../service/SMSBroadcastReceiver.java | 79 +++++++++---------- 2 files changed, 42 insertions(+), 43 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index d41f8f6..7a78a98 100755 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,9 +11,9 @@ android { defaultConfig { applicationId "me.drakeet.inmessage" minSdkVersion 15 - targetSdkVersion 21 - versionCode 4 - versionName "1.0" + targetSdkVersion 22 + versionCode 5 + versionName "1.0.1" } sourceSets { main { diff --git a/app/src/main/java/me/drakeet/inmessage/service/SMSBroadcastReceiver.java b/app/src/main/java/me/drakeet/inmessage/service/SMSBroadcastReceiver.java index 5a03684..8c65687 100755 --- a/app/src/main/java/me/drakeet/inmessage/service/SMSBroadcastReceiver.java +++ b/app/src/main/java/me/drakeet/inmessage/service/SMSBroadcastReceiver.java @@ -28,10 +28,9 @@ public class SMSBroadcastReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { //从Intent中接受信息 Object[] pdus = (Object[]) intent.getExtras().get("pdus"); - String format = intent.getStringExtra("format"); for (Object p : pdus) { byte[] sms = (byte[]) p; - SmsMessage message = (format != null) ? SmsMessage.createFromPdu(sms, format) : SmsMessage.createFromPdu(sms); + SmsMessage message = SmsMessage.createFromPdu(sms); //获取短信内容 final String content = message.getMessageBody(); //获取发送时间 @@ -46,44 +45,44 @@ public void onReceive(Context context, Intent intent) { } this.abortBroadcast(); mHandler = new WeakHandler(); - mHandler.postDelayed(new Runnable() { - @Override - public void run() { - Message smsMessage = new Message(); - smsMessage.setContent(content); - smsMessage.setSender(sender); - smsMessage.setDate(date); - String company = StringUtils.getContentInBracket(content, sender); - if (company != null) { - smsMessage.setCompanyName(company); - } - smsMessage.setIsMessage(true); - //格式化短信日期提示 - SimpleDateFormat sfd = new SimpleDateFormat("MM-dd hh:mm"); - String time = sfd.format(date); - //获得短信的各项内容 - String date_mms = time; - smsMessage.setReceiveDate(date_mms); - smsMessage.setReadStatus(0); - smsMessage.setFromSmsDB(1); - String captchas = StringUtils.tryToGetCaptchas(content); - if(!captchas.equals("")) { - smsMessage.setCaptchas(captchas); - } - String resultContent = StringUtils.getResultText(smsMessage, false); - if(resultContent != null) { - smsMessage.setResultContent(resultContent); - } - if(!VersionUtils.IS_MORE_THAN_LOLLIPOP) { - smsMessage.save(); - } - BusProvider.getInstance().register(this); - BusProvider.getInstance().post(new ReceiveMessageEvent(smsMessage)); - BusProvider.getInstance().unregister(this); - //终止广播 - } - }, 358 - ); + mHandler.postDelayed( + new Runnable() { + @Override + public void run() { + Message smsMessage = new Message(); + smsMessage.setContent(content); + smsMessage.setSender(sender); + smsMessage.setDate(date); + String company = StringUtils.getContentInBracket(content, sender); + if (company != null) { + smsMessage.setCompanyName(company); + } + smsMessage.setIsMessage(true); + //格式化短信日期提示 + SimpleDateFormat sfd = new SimpleDateFormat("MM-dd hh:mm"); + //获得短信的各项内容 + String date_mms = sfd.format(date); + smsMessage.setReceiveDate(date_mms); + smsMessage.setReadStatus(0); + smsMessage.setFromSmsDB(1); + String captchas = StringUtils.tryToGetCaptchas(content); + if (!captchas.equals("")) { + smsMessage.setCaptchas(captchas); + } + String resultContent = StringUtils.getResultText(smsMessage, false); + if (resultContent != null) { + smsMessage.setResultContent(resultContent); + } + if (!VersionUtils.IS_MORE_THAN_LOLLIPOP) { + smsMessage.save(); + } + BusProvider.getInstance().register(this); + BusProvider.getInstance().post(new ReceiveMessageEvent(smsMessage)); + BusProvider.getInstance().unregister(this); + //终止广播 + } + }, 358 + ) } } } From ccb7791c3d1c3784e2d70462bc1ede5c2d331b9b Mon Sep 17 00:00:00 2001 From: drakeet Date: Thu, 18 Jun 2015 10:59:15 +0800 Subject: [PATCH 03/54] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E6=A0=8F=E9=A2=9C=E8=89=B2=E4=B8=BA=20Toolbar=20=E9=A2=9C?= =?UTF-8?q?=E8=89=B2=E5=8A=A0=E6=B7=B1=E8=89=B2=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/me/drakeet/inmessage/service/SMSBroadcastReceiver.java | 2 +- app/src/main/res/values/colors.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/me/drakeet/inmessage/service/SMSBroadcastReceiver.java b/app/src/main/java/me/drakeet/inmessage/service/SMSBroadcastReceiver.java index 8c65687..829e705 100755 --- a/app/src/main/java/me/drakeet/inmessage/service/SMSBroadcastReceiver.java +++ b/app/src/main/java/me/drakeet/inmessage/service/SMSBroadcastReceiver.java @@ -82,7 +82,7 @@ public void run() { //终止广播 } }, 358 - ) + ); } } } diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index bddf7b5..2faa71d 100755 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -3,7 +3,7 @@ #00bcd4 @color/actionbar_background - #ff2b4d90 + #008196 #00778d #ffffff From d05f029a596df0538f534dd74740be09ff83595b Mon Sep 17 00:00:00 2001 From: drakeet Date: Thu, 18 Jun 2015 11:04:14 +0800 Subject: [PATCH 04/54] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E6=A0=8F=E9=A2=9C=E8=89=B2=E4=B8=BA=20Toolbar=20=E9=A2=9C?= =?UTF-8?q?=E8=89=B2=E5=8A=A0=E6=B7=B1=E8=89=B2=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- screenshots/s2.png | Bin 129241 -> 126287 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/screenshots/s2.png b/screenshots/s2.png index efa55a4298ed6698cf85fd8d0cec4dfbddb6a766..16380186012706ea923a559df04cac60b8c06a6d 100755 GIT binary patch literal 126287 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

G!y7dc}4^;K0j7qI7U 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%0AXp0BV))tpxf4&FH3~GKx~M)@onqaJ+-wD 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

~!JA1u;qC1QF#)-l_dO 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%0DooWUq939Qp~}5-(B-fw4U+@wzl0@ezHk_3_3j5 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

O!sghqw1K#Ki^g&(qh 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 CT#Eq! From 461e6169afa52427d2b2ed2e2990b813d0064206 Mon Sep 17 00:00:00 2001 From: shengkun <444341703@qq.com> Date: Thu, 18 Jun 2015 11:12:18 +0800 Subject: [PATCH 05/54] =?UTF-8?q?=E6=8F=90=E9=AB=98=E8=AF=86=E5=88=AB?= =?UTF-8?q?=E9=AA=8C=E8=AF=81=E7=A0=81=E5=87=86=E7=A1=AE=E5=BA=A6=E3=80=82?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=88=B7=E6=96=B0=E6=97=B6=E7=82=B9=E5=87=BB?= =?UTF-8?q?item=E5=B4=A9=E6=BA=83bug.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../me/drakeet/inmessage/MainActivity.java | 6 +- .../constant/StaticObjectInterface.java | 2 +- .../service/SMSBroadcastReceiver.java | 2 +- .../drakeet/inmessage/utils/StringUtils.java | 77 ++++++++++++------- 4 files changed, 54 insertions(+), 33 deletions(-) diff --git a/app/src/main/java/me/drakeet/inmessage/MainActivity.java b/app/src/main/java/me/drakeet/inmessage/MainActivity.java index a401b5b..2d84d2b 100755 --- a/app/src/main/java/me/drakeet/inmessage/MainActivity.java +++ b/app/src/main/java/me/drakeet/inmessage/MainActivity.java @@ -112,8 +112,10 @@ private void setAdapter() { new OnItemClickListener() { @Override public void onItemClick(View view, int position) { - if (mMessages.get(position).getIsMessage()) { - showDetailSMS(mMessages.get(position)); + if(!mIsRefreshing) { + if (mMessages.get(position).getIsMessage()) { + showDetailSMS(mMessages.get(position)); + } } } } diff --git a/app/src/main/java/me/drakeet/inmessage/constant/StaticObjectInterface.java b/app/src/main/java/me/drakeet/inmessage/constant/StaticObjectInterface.java index ea689fc..f43530c 100644 --- a/app/src/main/java/me/drakeet/inmessage/constant/StaticObjectInterface.java +++ b/app/src/main/java/me/drakeet/inmessage/constant/StaticObjectInterface.java @@ -5,6 +5,6 @@ */ public interface StaticObjectInterface { - String[] CPATCHAS_KEYWORD = {"激活码", "动态码", "校验码", "验证码"}; + String[] CPATCHAS_KEYWORD = {"激活码", "动态码", "校验码", "验证码", "驗證碼", "激活碼", "動態碼", "校驗碼"}; String ACTION_CLICK = "me.drakeet.inmessage.intent.action.NotificationClick"; } diff --git a/app/src/main/java/me/drakeet/inmessage/service/SMSBroadcastReceiver.java b/app/src/main/java/me/drakeet/inmessage/service/SMSBroadcastReceiver.java index 8c65687..829e705 100755 --- a/app/src/main/java/me/drakeet/inmessage/service/SMSBroadcastReceiver.java +++ b/app/src/main/java/me/drakeet/inmessage/service/SMSBroadcastReceiver.java @@ -82,7 +82,7 @@ public void run() { //终止广播 } }, 358 - ) + ); } } } diff --git a/app/src/main/java/me/drakeet/inmessage/utils/StringUtils.java b/app/src/main/java/me/drakeet/inmessage/utils/StringUtils.java index 720fd54..ced8b20 100755 --- a/app/src/main/java/me/drakeet/inmessage/utils/StringUtils.java +++ b/app/src/main/java/me/drakeet/inmessage/utils/StringUtils.java @@ -9,7 +9,7 @@ /** * Created by Administrator on 2014/12/24 0024. */ -public class StringUtils implements StaticObjectInterface{ +public class StringUtils implements StaticObjectInterface { private StringUtils() { } @@ -40,7 +40,7 @@ public static String getContentInBracket(String str, String address) { Pattern pattern = Pattern.compile("\\【(.*?)\\】"); Matcher matcher = pattern.matcher(str); while (matcher.find()) { - if(matcher.group(1) != null && matcher.group(1).length() < 10) { + if (matcher.group(1) != null && matcher.group(1).length() < 10) { return analyseSpecialCompany(matcher.group(1), str, address); } @@ -48,7 +48,7 @@ public static String getContentInBracket(String str, String address) { Pattern pattern1 = Pattern.compile("\\[(.*?)\\]"); Matcher matcher1 = pattern1.matcher(str); while (matcher1.find()) { - if(matcher1.group(1) != null && matcher1.group(1).length() < 10) { + if (matcher1.group(1) != null && matcher1.group(1).length() < 10) { return analyseSpecialCompany(matcher1.group(1), str, address); } @@ -56,7 +56,7 @@ public static String getContentInBracket(String str, String address) { Pattern pattern2 = Pattern.compile("\\((.*?)\\)"); Matcher matcher2 = pattern2.matcher(str); while (matcher2.find()) { - if(matcher2.group(1) != null && matcher2.group(1).length() < 10) { + if (matcher2.group(1) != null && matcher2.group(1).length() < 10) { return analyseSpecialCompany(matcher2.group(1), str, address); } @@ -66,23 +66,22 @@ public static String getContentInBracket(String str, String address) { private static String analyseSpecialCompany(String company, String content, String address) { String companyName = company; - if(company.equals("掌淘科技")) { - int index = content.indexOf("的验证码"); - companyName = content.substring(0, index); - companyName = companyName.replaceAll("【掌淘科技】", "").trim(); - } - else { - if(content.contains("贝壳单词的验证码")) { + if (company.equals("掌淘科技")) { + int index = content.indexOf("的验证码"); + companyName = content.substring(0, index); + companyName = companyName.replaceAll("【掌淘科技】", "").trim(); + } else { + if (content.contains("贝壳单词的验证码")) { companyName = "贝壳单词"; } } - if(address.equals("10010")) { + if (address.equals("10010")) { companyName = "中国联通"; } - if(address.equals("10086")) { + if (address.equals("10086")) { companyName = "中国移动"; } - if(address.equals("10000")) { + if (address.equals("10000")) { companyName = "中国电信"; } return companyName; @@ -99,39 +98,59 @@ public static String tryToGetCaptchas(String str) { Matcher m = continuousNumberPattern.matcher(str); while (m.find()) { if (m.group().length() > 3 && m.group().length() < 8 && !m.group().contains(".")) { - return m.group(); + if(isNearToKeyWord(m.group(), str)) { + return m.group(); + } } } return ""; } + public static boolean isNearToKeyWord(String currentStr, String content) { + int startPosition = 0; + int endPosition = content.length() - 1; + if (content.indexOf(currentStr) > 10) { + startPosition = content.indexOf(currentStr) - 10; + } + if (content.indexOf(currentStr) + 10 < content.length() - 1) { + endPosition = content.indexOf(currentStr) + 10; + } + Boolean isNearToKeyWord = false; + for (int i = 0; i < CPATCHAS_KEYWORD.length; i++) { + if (content.substring(startPosition, endPosition).contains(CPATCHAS_KEYWORD[i])) { + isNearToKeyWord = true; + break; + } + } + return isNearToKeyWord; + } + public static boolean isCaptchasMessage(String content) { - Boolean isCaptchasMessage = false; - for(int i = 0;i < CPATCHAS_KEYWORD.length;i++) { - if(content.contains(CPATCHAS_KEYWORD[i])) { - isCaptchasMessage = true; - break; - } - } - return isCaptchasMessage; + Boolean isCaptchasMessage = false; + for (int i = 0; i < CPATCHAS_KEYWORD.length; i++) { + if (content.contains(CPATCHAS_KEYWORD[i])) { + isCaptchasMessage = true; + break; + } + } + return isCaptchasMessage; } /** * 根据短信获取描述文字 + * * @return */ public static String getResultText(Message message, Boolean isNotificationText) { String resultStr = ""; - if(message.getCompanyName() != null && !isNotificationText) { + if (message.getCompanyName() != null && !isNotificationText) { resultStr += "来自" + message.getCompanyName() + "的验证码:"; - } - else { + } else { resultStr += "当前验证码为:"; } - if(message.getCaptchas() != null) { + if (message.getCaptchas() != null) { resultStr += message.getCaptchas(); - } - else { + } else { resultStr += "点击查看详情."; } return resultStr; From 387ab3b58665bd86afe518322634be91c4ab3ac6 Mon Sep 17 00:00:00 2001 From: drakeet Date: Thu, 18 Jun 2015 21:06:41 +0800 Subject: [PATCH 06/54] =?UTF-8?q?=E4=BF=AE=E6=94=B9=20OverflowButton=20?= =?UTF-8?q?=E5=8F=98=E4=B8=BA=E7=99=BD=E8=89=B2=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/layout/activity_about.xml | 2 +- app/src/main/res/layout/view_toolbar.xml | 7 +++---- app/src/main/res/values/themes.xml | 7 ++++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/app/src/main/res/layout/activity_about.xml b/app/src/main/res/layout/activity_about.xml index 0b77d71..b7b5271 100644 --- a/app/src/main/res/layout/activity_about.xml +++ b/app/src/main/res/layout/activity_about.xml @@ -301,6 +301,6 @@ android:layout_height="wrap_content" android:background="@color/transparent" app:navigationIcon="@mipmap/ic_arrow_back_white_24dp" - android:theme="@style/ActionBarPopupThemeOverlay"/> + android:theme="@style/ToolbarTheme"/> diff --git a/app/src/main/res/layout/view_toolbar.xml b/app/src/main/res/layout/view_toolbar.xml index 31e57d9..60bd941 100755 --- a/app/src/main/res/layout/view_toolbar.xml +++ b/app/src/main/res/layout/view_toolbar.xml @@ -1,10 +1,9 @@ + android:theme="@style/ToolbarTheme" + android:elevation="3px"/> diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 34c10e0..6cf63ed 100755 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -15,7 +15,8 @@ - - + \ No newline at end of file From d4cef306f5205656837fb74bc73eba2838204af6 Mon Sep 17 00:00:00 2001 From: drakeet Date: Thu, 18 Jun 2015 21:08:07 +0800 Subject: [PATCH 07/54] =?UTF-8?q?=E4=BF=AE=E6=94=B9=20=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E5=8F=B7=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 7a78a98..e37f207 100755 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,8 +12,8 @@ android { applicationId "me.drakeet.inmessage" minSdkVersion 15 targetSdkVersion 22 - versionCode 5 - versionName "1.0.1" + versionCode 6 + versionName "1.0.2" } sourceSets { main { From e92ba28bfa39c0d95664debb0f535221bc6f3522 Mon Sep 17 00:00:00 2001 From: drakeet Date: Fri, 19 Jun 2015 12:26:25 +0800 Subject: [PATCH 08/54] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E4=B8=80=E4=BA=9B?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E9=A3=8E=E6=A0=BC=E5=92=8C=E5=91=BD=E5=90=8D?= =?UTF-8?q?=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 2 +- .../me/drakeet/inmessage/MainActivity.java | 30 ++++------- .../inmessage/adapter/MainMessageAdapter.java | 2 +- .../service/SMSBroadcastReceiver.java | 5 +- .../inmessage/utils/ClipboardUtils.java | 6 +-- .../me/drakeet/inmessage/utils/SmsUtils.java | 53 +++++++++---------- .../me/drakeet/inmessage/utils/TaskUtils.java | 1 + .../me/drakeet/inmessage/utils/TimeUtils.java | 2 +- .../drakeet/inmessage/utils/ToastUtils.java | 16 ------ .../widget/MultiSwipeRefreshLayout.java | 5 +- 10 files changed, 46 insertions(+), 76 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index e37f207..ab0b971 100755 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,7 +12,7 @@ android { applicationId "me.drakeet.inmessage" minSdkVersion 15 targetSdkVersion 22 - versionCode 6 + versionCode 7 versionName "1.0.2" } sourceSets { diff --git a/app/src/main/java/me/drakeet/inmessage/MainActivity.java b/app/src/main/java/me/drakeet/inmessage/MainActivity.java index 2d84d2b..16eba8a 100755 --- a/app/src/main/java/me/drakeet/inmessage/MainActivity.java +++ b/app/src/main/java/me/drakeet/inmessage/MainActivity.java @@ -177,10 +177,8 @@ public void deleteAll() { private void showConfirmDialog() { AlertDialog alertDialog = new AlertDialog.Builder(this). setTitle("清空验证码短信?") - . - setMessage(getString(R.string.str_clear_messages_hint)) - . - setPositiveButton( + .setMessage(getString(R.string.str_clear_messages_hint)) + .setPositiveButton( "确定", new DialogInterface.OnClickListener() { @Override @@ -191,8 +189,7 @@ public void onClick( } } ) - . - setNegativeButton( + .setNegativeButton( "取消", new DialogInterface.OnClickListener() { @Override @@ -218,8 +215,7 @@ private void showDeleteDialog() { "正在删除验证码短信..." ) .setView(addLayout) - . - setNegativeButton( + .setNegativeButton( "停止", new DialogInterface.OnClickListener() { @Override @@ -256,10 +252,8 @@ public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { private void showBussinessDialog() { final AlertDialog alertDialog = new AlertDialog.Builder(this). setTitle(getString(R.string.str_check_bussiness_hint)) - . - setMessage(getString(R.string.str_doing_hint)) - . - setPositiveButton( + .setMessage(getString(R.string.str_doing_hint)) + .setPositiveButton( "确定", new DialogInterface.OnClickListener() { @Override @@ -269,8 +263,7 @@ public void onClick( } } ) - . - create(); + .create(); alertDialog.setCanceledOnTouchOutside(false); alertDialog.show(); TaskUtils.executeAsyncTask( @@ -333,10 +326,8 @@ private Boolean isExist(String company, List companys) { private void showDetailSMS(Message message) { AlertDialog alertDialog = new AlertDialog.Builder(this). setTitle(message.getSender()) - . - setMessage(message.getContent()) - . - setPositiveButton( + .setMessage(message.getContent()) + .setPositiveButton( "确定", new DialogInterface.OnClickListener() { @Override @@ -346,8 +337,7 @@ public void onClick( } } ) - . - create(); + .create(); alertDialog.setCanceledOnTouchOutside(false); alertDialog.show(); } diff --git a/app/src/main/java/me/drakeet/inmessage/adapter/MainMessageAdapter.java b/app/src/main/java/me/drakeet/inmessage/adapter/MainMessageAdapter.java index 57633f8..186ff6f 100755 --- a/app/src/main/java/me/drakeet/inmessage/adapter/MainMessageAdapter.java +++ b/app/src/main/java/me/drakeet/inmessage/adapter/MainMessageAdapter.java @@ -129,7 +129,7 @@ private void getAvatar(final String phoneNumber, final ImageView imageView, fina new AsyncTask() { @Override protected Bitmap doInBackground(Object... params) { - Bitmap bitmap = mSmsUtils.get_people_image(phoneNumber); + Bitmap bitmap = mSmsUtils.getPeopleImage(phoneNumber); return bitmap; } diff --git a/app/src/main/java/me/drakeet/inmessage/service/SMSBroadcastReceiver.java b/app/src/main/java/me/drakeet/inmessage/service/SMSBroadcastReceiver.java index 829e705..f79d19c 100755 --- a/app/src/main/java/me/drakeet/inmessage/service/SMSBroadcastReceiver.java +++ b/app/src/main/java/me/drakeet/inmessage/service/SMSBroadcastReceiver.java @@ -59,9 +59,9 @@ public void run() { } smsMessage.setIsMessage(true); //格式化短信日期提示 - SimpleDateFormat sfd = new SimpleDateFormat("MM-dd hh:mm"); + SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd hh:mm"); //获得短信的各项内容 - String date_mms = sfd.format(date); + String date_mms = dateFormat.format(date); smsMessage.setReceiveDate(date_mms); smsMessage.setReadStatus(0); smsMessage.setFromSmsDB(1); @@ -79,7 +79,6 @@ public void run() { BusProvider.getInstance().register(this); BusProvider.getInstance().post(new ReceiveMessageEvent(smsMessage)); BusProvider.getInstance().unregister(this); - //终止广播 } }, 358 ); diff --git a/app/src/main/java/me/drakeet/inmessage/utils/ClipboardUtils.java b/app/src/main/java/me/drakeet/inmessage/utils/ClipboardUtils.java index 08acec3..3d6034c 100755 --- a/app/src/main/java/me/drakeet/inmessage/utils/ClipboardUtils.java +++ b/app/src/main/java/me/drakeet/inmessage/utils/ClipboardUtils.java @@ -11,8 +11,8 @@ public class ClipboardUtils { public static void putTextIntoClipboard(Context context, String text) { // 得到剪贴板管理器 - ClipboardManager cmb = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); - ClipData clip = ClipData.newPlainText("copy text", text); - cmb.setPrimaryClip(clip); + ClipboardManager clipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); + ClipData clipData = ClipData.newPlainText("copy text", text); + clipboardManager.setPrimaryClip(clipData); } } diff --git a/app/src/main/java/me/drakeet/inmessage/utils/SmsUtils.java b/app/src/main/java/me/drakeet/inmessage/utils/SmsUtils.java index 972a231..bc7fbf4 100755 --- a/app/src/main/java/me/drakeet/inmessage/utils/SmsUtils.java +++ b/app/src/main/java/me/drakeet/inmessage/utils/SmsUtils.java @@ -39,29 +39,26 @@ public SmsUtils(final Context context) { "date", "type", "thread_id"}; public List getAllCaptchMessages() { - List dateGroupS = new ArrayList<>(); - ContentResolver cr = mContext.getContentResolver(); - Cursor cursor = cr.query(ALL_MESSAGE_URI, ALL_THREADS_PROJECTION, + List dateGroups = new ArrayList<>(); + ContentResolver contentResolver = mContext.getContentResolver(); + Cursor cursor = contentResolver.query(ALL_MESSAGE_URI, ALL_THREADS_PROJECTION, null, null, "date desc"); List smsMessages = new ArrayList<>(); - int i = 0; while ((cursor.moveToNext())) { - i += 1; - int index_Body = cursor.getColumnIndex("body"); - int index_Address = cursor.getColumnIndex("address"); - int index_ThreadId = cursor.getColumnIndex("thread_id"); - String strbody = cursor.getString(index_Body); - String strAddress = cursor.getString(index_Address); + int indexBody = cursor.getColumnIndex("body"); + int indexAddress = cursor.getColumnIndex("address"); + int indexThreadId = cursor.getColumnIndex("thread_id"); + String strbody = cursor.getString(indexBody); + String strAddress = cursor.getString(indexAddress); if (!StringUtils.isPersonalMoblieNO(strAddress) && StringUtils.isCaptchasMessage(strbody) && !StringUtils.tryToGetCaptchas(strbody).equals("")) { int date = cursor.getColumnIndex("date"); //格式化短信日期提示 - SimpleDateFormat sfd = new SimpleDateFormat("MM-dd hh:mm"); - Date date_format = new Date(Long.parseLong(cursor.getString(date))); - long thread_id = cursor.getLong(index_ThreadId); + SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd hh:mm"); + Date formatDate = new Date(Long.parseLong(cursor.getString(date))); + long threadId = cursor.getLong(indexThreadId); - String time = sfd.format(date_format); //获得短信的各项内容 - String date_mms = time; + String dateMms = dateFormat.format(formatDate); Message message = new Message(); String company = StringUtils.getContentInBracket(strbody, strAddress); if (company != null) { @@ -71,15 +68,15 @@ public List getAllCaptchMessages() { if(!captchas.equals("")) { message.setCaptchas(captchas); } - int index_Id = cursor.getColumnIndex("_id"); - String smsId = cursor.getString(index_Id); + int columnIndex = cursor.getColumnIndex("_id"); + String smsId = cursor.getString(columnIndex); message.setIsMessage(true); - message.setDate(date_format); + message.setDate(formatDate); message.setSender(strAddress); - message.setThreadId(thread_id); + message.setThreadId(threadId); message.setContent(strbody); message.setSmsId(smsId); - message.setReceiveDate(date_mms); + message.setReceiveDate(dateMms); String resultContent = StringUtils.getResultText(message, false); if(resultContent != null) { message.setResultContent(resultContent); @@ -111,15 +108,15 @@ public List getAllCaptchMessages() { List unionMessages = new ArrayList<>(); for(Message message: smsMessages) { String group = TimeUtils.getInstance().getDateGroup(message.getDate()); - if (dateGroupS.size() == 0) { - dateGroupS.add(group); + if (dateGroups.size() == 0) { + dateGroups.add(group); Message dateMessage = new Message(); dateMessage.setReceiveDate(group); dateMessage.setIsMessage(false); unionMessages.add(dateMessage); } else { - if (!group.equals(dateGroupS.get(dateGroupS.size() - 1))) { - dateGroupS.add(group); + if (!group.equals(dateGroups.get(dateGroups.size() - 1))) { + dateGroups.add(group); Message dateMessage = new Message(); dateMessage.setReceiveDate(group); dateMessage.setIsMessage(false); @@ -141,8 +138,7 @@ public List getAllCaptchMessages() { * */ public int deleteSms(String smsId) { final Uri SMS_URI = Uri.parse("content://sms/"); - int result = mContext.getContentResolver().delete(SMS_URI,"_id=?",new String[]{smsId}); - return result; + return mContext.getContentResolver().delete(SMS_URI,"_id=?",new String[]{smsId}); } public String getContactNameFromPhoneBook(String phoneNum) { @@ -169,7 +165,7 @@ public String getContactNameFromPhoneBook(String phoneNum) { } // 根据号码获得联系人头像 - public Bitmap get_people_image(String x_number) { + public Bitmap getPeopleImage(String x_number) { // 获得Uri Uri uriNumber2Contacts = Uri.parse("content://com.android.contacts/" @@ -193,8 +189,7 @@ public Bitmap get_people_image(String x_number) { // 打开头像图片的InputStream InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(mContext.getContentResolver(), uri); // 从InputStream获得bitmap - Bitmap bmp_head = BitmapFactory.decodeStream(input); - return bmp_head; + return BitmapFactory.decodeStream(input); } cursorCantacts.close(); return null; diff --git a/app/src/main/java/me/drakeet/inmessage/utils/TaskUtils.java b/app/src/main/java/me/drakeet/inmessage/utils/TaskUtils.java index 6ff8256..87356b8 100755 --- a/app/src/main/java/me/drakeet/inmessage/utils/TaskUtils.java +++ b/app/src/main/java/me/drakeet/inmessage/utils/TaskUtils.java @@ -8,6 +8,7 @@ */ public class TaskUtils { + @SafeVarargs public static void executeAsyncTask( AsyncTask task, Params... params) { if (Build.VERSION.SDK_INT >= 11) { diff --git a/app/src/main/java/me/drakeet/inmessage/utils/TimeUtils.java b/app/src/main/java/me/drakeet/inmessage/utils/TimeUtils.java index 87a5a2d..02204ad 100755 --- a/app/src/main/java/me/drakeet/inmessage/utils/TimeUtils.java +++ b/app/src/main/java/me/drakeet/inmessage/utils/TimeUtils.java @@ -60,7 +60,7 @@ public static long getTimesMorning() { cal.set(Calendar.SECOND, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.MILLISECOND, 0); - return (long) (cal.getTimeInMillis()); + return cal.getTimeInMillis(); } public static Date getDateFromTimestamp(long longTime) { diff --git a/app/src/main/java/me/drakeet/inmessage/utils/ToastUtils.java b/app/src/main/java/me/drakeet/inmessage/utils/ToastUtils.java index 74e6870..d84706c 100755 --- a/app/src/main/java/me/drakeet/inmessage/utils/ToastUtils.java +++ b/app/src/main/java/me/drakeet/inmessage/utils/ToastUtils.java @@ -1,7 +1,6 @@ package me.drakeet.inmessage.utils; import android.content.Context; -import android.os.AsyncTask; import android.widget.Toast; import me.drakeet.inmessage.App; @@ -36,21 +35,6 @@ public static void showLong(int resId) { Toast.makeText(App.getContext(), resId, Toast.LENGTH_LONG).show(); } - public static void showToast(final String text) { - TaskUtils.executeAsyncTask(new AsyncTask() { - @Override - protected Object doInBackground(Object... params) { - return null; - } - - @Override - protected void onPostExecute(Object o) { - super.onPostExecute(o); - showShort(text); - } - }); - } - public static void showLong(String message) { Toast.makeText(App.getContext(), message, Toast.LENGTH_LONG).show(); } diff --git a/app/src/main/java/me/drakeet/inmessage/widget/MultiSwipeRefreshLayout.java b/app/src/main/java/me/drakeet/inmessage/widget/MultiSwipeRefreshLayout.java index 9af9e63..5e852c0 100755 --- a/app/src/main/java/me/drakeet/inmessage/widget/MultiSwipeRefreshLayout.java +++ b/app/src/main/java/me/drakeet/inmessage/widget/MultiSwipeRefreshLayout.java @@ -28,6 +28,7 @@ * Created by drakeet on 1/3/15. */ public class MultiSwipeRefreshLayout extends SwipeRefreshLayout { + private CanChildScrollUpCallback mCanChildScrollUpCallback; private Drawable mForegroundDrawable; @@ -61,8 +62,8 @@ public void setCanChildScrollUpCallback(CanChildScrollUpCallback canChildScrollU mCanChildScrollUpCallback = canChildScrollUpCallback; } - public static interface CanChildScrollUpCallback { - public boolean canSwipeRefreshChildScrollUp(); + public interface CanChildScrollUpCallback { + boolean canSwipeRefreshChildScrollUp(); } @Override From bc40eed16fcf712c0d8a2bb8b540baf27e8d2705 Mon Sep 17 00:00:00 2001 From: drakeet Date: Fri, 19 Jun 2015 12:38:15 +0800 Subject: [PATCH 09/54] =?UTF-8?q?=E5=9C=A8=E5=85=B3=E4=BA=8E=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E5=A2=9E=E5=8A=A0=E8=87=AA=E5=8A=A8=E8=AF=BB=E5=8F=96?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E5=8F=B7=E5=8A=9F=E8=83=BD=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/me/drakeet/inmessage/AboutActivity.java | 12 ++++++++++++ app/src/main/res/layout/activity_about.xml | 15 ++++++++------- app/src/main/res/values/strings.xml | 8 +++++++- 3 files changed, 27 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/me/drakeet/inmessage/AboutActivity.java b/app/src/main/java/me/drakeet/inmessage/AboutActivity.java index a86594f..228f084 100644 --- a/app/src/main/java/me/drakeet/inmessage/AboutActivity.java +++ b/app/src/main/java/me/drakeet/inmessage/AboutActivity.java @@ -7,6 +7,7 @@ import android.view.Menu; import android.view.MenuItem; import android.view.View; +import android.widget.TextView; import com.github.ksoichiro.android.observablescrollview.ObservableScrollView; import com.github.ksoichiro.android.observablescrollview.ObservableScrollViewCallbacks; @@ -16,12 +17,17 @@ import butterknife.ButterKnife; import butterknife.InjectView; +/** + * Created by drakeet on 15/6/5. + */ public class AboutActivity extends AppCompatActivity { @InjectView(R.id.toolbar) Toolbar mToolbar; @InjectView(R.id.sv_about) ObservableScrollView mScrollView; + @InjectView(R.id.tv_version) + TextView mVersionTextView; @Override protected void onCreate(Bundle savedInstanceState) { @@ -29,6 +35,8 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_about); ButterKnife.inject(this); + setUpVersionName(); + final int headerHeight = getResources().getDimensionPixelSize(R.dimen.about_header_height); mToolbar.setTitle(""); setSupportActionBar(mToolbar); @@ -66,6 +74,10 @@ public void onUpOrCancelMotionEvent(ScrollState scrollState) { ); } + private void setUpVersionName() { + mVersionTextView.setText("Version " + BuildConfig.VERSION_NAME); + } + @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_about, menu); diff --git a/app/src/main/res/layout/activity_about.xml b/app/src/main/res/layout/activity_about.xml index b7b5271..9915ec6 100644 --- a/app/src/main/res/layout/activity_about.xml +++ b/app/src/main/res/layout/activity_about.xml @@ -20,15 +20,16 @@ @@ -52,7 +53,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="12dp" - android:text="介绍与帮助" + android:text="@string/introduce_and_help" android:textColor="@color/md_grey_600"/> @@ -151,7 +152,7 @@ android:layout_height="wrap_content" android:layout_marginBottom="12dp" android:layout_marginTop="12dp" - android:text="开源协议" + android:text="@string/open_source_lis" android:textColor="@color/md_grey_600"/> Settings 关于 @string/about - 验证码助手,是由原「贝壳单词」团队开发的一款新的开源轻App.\n\n它可以在手机接收到验证码短信的时候,自动浮现验证码,并自动复制验证码到用户的剪切板。当用户接收到短信验证码,只要长按验证码的输入框,粘贴验证码即可。\n\n除此之外,还可以让用户批量删除无用验证码短信,帮助用户反向推理出绑定了哪些业务(换号必备啊有木有)。\n\n我们做得非常轻,也秉承了一贯的好设计和用户友好,在闲时它不会自启动、不会偷跑流量、不会占用任何内存(不信或担忧的话欢迎查看源代码~)。\n\n开放源代码地址:https://github.com/drakeet/SmsCodeHelper\n\n我们开源,我们做好设计,我们不乱使用权限,只求你如果喜欢,可以分享给你的朋友们,好东西需要分享才能让其健康成长,每一次分享都是我们的动力,非常感谢! + 验证码助手,是由原「贝壳单词」团队开发的一款新的开源轻App.\n\n它可以在手机接收到验证码短信的时候,自动浮现验证码,并自动复制验证码到用户的剪切板。当用户接收到短信验证码,只要长按验证码的输入框,粘贴验证码即可。\n\n除此之外,还可以让用户批量删除无用验证码短信,帮助用户反向推理出绑定了哪些业务(换号必备啊有木有)。\n\n我们做得非常轻,也秉承了一贯的好设计和用户友好,在闲时它不会自启动、不会偷跑流量、不会占用任何内存(不信或担忧的话欢迎查看源代码~)。\n\n开放源代码地址:https://github.com/drakeet/SmsCodeHelper\n\n我们开源,做好设计,不乱使用权限,只求你如果喜欢,可以分享给你的朋友们,好东西需要分享才能让其健康成长,每一次分享都是我们的动力,非常感谢! 分享给朋友(谢谢QAQ) 反向推理绑定业务 发现了一款非常美观易用的「验证码助手」轻App,开源的,可以在验证码短信来临的时,自动识别验证码,悬浮并且自动复制到剪切板,不用记忆不用输入,只要长按粘贴即可输入验证码。推荐~:http://fir.im/codehelper @@ -16,4 +16,10 @@ 识别到验证码:%s,并已复制到剪贴板,长按你的输入框即可粘贴验证码 当前验证码:%s(点击可复制) 删除的会话Id为: + 验证码助手 - 不用记数字不用输入完成验证 + 开发人员 + 开发者 + + 开源协议 + 介绍与帮助 From 2f19eca3550ef0fca4fc22f0fb2a2a79731c10ea Mon Sep 17 00:00:00 2001 From: drakeet Date: Fri, 19 Jun 2015 12:48:09 +0800 Subject: [PATCH 10/54] =?UTF-8?q?=E4=BF=AE=E6=94=B9=20=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E5=8F=B7=E5=92=8C=20README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- app/build.gradle | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 04fcf26..20885a9 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ #源代码在GPLv3协议下发布 -###我们开源,我们做好设计,我们不乱使用权限,只求你如果喜欢,可以分享给你的朋友们,好东西需要分享才能让其健康成长,每一次分享都是我们的动力,非常感谢! +###我们开源,做好设计,不乱使用权限,只求你如果喜欢,可以分享给你的朋友们,好东西需要分享才能让其健康成长,每一次分享都是我们的动力,非常感谢! #下载 diff --git a/app/build.gradle b/app/build.gradle index ab0b971..3768161 100755 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,8 +12,8 @@ android { applicationId "me.drakeet.inmessage" minSdkVersion 15 targetSdkVersion 22 - versionCode 7 - versionName "1.0.2" + versionCode 8 + versionName "1.0.3" } sourceSets { main { From b6c7415effe9b17108b13d4f6f20f870a6a95590 Mon Sep 17 00:00:00 2001 From: drakeet Date: Fri, 19 Jun 2015 16:17:33 +0800 Subject: [PATCH 11/54] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20English=20=E5=92=8C?= =?UTF-8?q?=20=E7=B9=81=E4=BD=93=E8=AF=AD=E8=A8=80=E6=94=AF=E6=8C=81?= =?UTF-8?q?=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 44 ++++++++++--------- app/src/main/res/values-zh-rCN/strings.xml | 21 +++++++++ .../main/res/values-zh-rCN/strings_time.xml | 14 ++++++ app/src/main/res/values-zh-rTW/strings.xml | 21 +++++++++ .../main/res/values-zh-rTW/strings_time.xml | 14 ++++++ app/src/main/res/values/strings.xml | 42 ++++++++---------- app/src/main/res/values/strings_time.xml | 21 +++++---- 7 files changed, 122 insertions(+), 55 deletions(-) create mode 100755 app/src/main/res/values-zh-rCN/strings.xml create mode 100755 app/src/main/res/values-zh-rCN/strings_time.xml create mode 100755 app/src/main/res/values-zh-rTW/strings.xml create mode 100755 app/src/main/res/values-zh-rTW/strings_time.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 757ec6d..c697333 100755 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,15 +1,15 @@ - + - - - + + + - + @@ -18,21 +18,21 @@ android:allowBackup="true" android:icon="@mipmap/ic_incode" android:label="@string/app_name" - android:theme="@style/MaterialTheme" > + android:theme="@style/MaterialTheme"> + android:label="@string/app_name"> - + - + - - -   - + + +    + @@ -41,15 +41,17 @@ - - - + + + - - + + diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml new file mode 100755 index 0000000..2a5dd7b --- /dev/null +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -0,0 +1,21 @@ + + 验证码助手 + 关于 + 验证码助手,是由原「贝壳单词」团队开发的一款新的开源轻App.\n\n它可以在手机接收到验证码短信的时候,自动浮现验证码,并自动复制验证码到用户的剪切板。当用户接收到短信验证码,只要长按验证码的输入框,粘贴验证码即可。\n\n除此之外,还可以让用户批量删除无用验证码短信,帮助用户反向推理出绑定了哪些业务(换号必备啊有木有)。\n\n我们做得非常轻,也秉承了一贯的好设计和用户友好,在闲时它不会自启动、不会偷跑流量、不会占用任何内存(不信或担忧的话欢迎查看源代码~)。\n\n开放源代码地址:https://github.com/drakeet/SmsCodeHelper\n\n我们开源,做好设计,不乱使用权限,只求你如果喜欢,可以分享给你的朋友们,好东西需要分享才能让其健康成长,每一次分享都是我们的动力,非常感谢! + 分享给朋友(谢谢QAQ) + 反向推理绑定业务 + 发现了一款非常美观易用的「验证码助手」轻App,开源的,可以在验证码短信来临的时,自动识别验证码,悬浮并且自动复制到剪切板,不用记忆不用输入,只要长按粘贴即可输入验证码。推荐~:http://fir.im/codehelper + 暂未识别绑定任何业务! + 识别中,请稍等 + 反向推理出的绑定业务详情 v0.1 + 操作后将会把短信收件箱中所有的验证码短信清空,但是我们还是会为你保存验证码记录(就算清空我们也还是能够帮你反向推理出绑定的业务)。请仔细检查并确认操作! + Android 5.0 以上暂不支持清空验证码短信! + 识别到验证码:%s,并已复制到剪贴板,长按你的输入框即可粘贴验证码 + 当前验证码:%s(点击可复制) + 验证码助手 - 不用记数字不用输入完成验证 + 开发人员 + 开发者 + + 开源协议 + 介绍与帮助 + diff --git a/app/src/main/res/values-zh-rCN/strings_time.xml b/app/src/main/res/values-zh-rCN/strings_time.xml new file mode 100755 index 0000000..75b8c73 --- /dev/null +++ b/app/src/main/res/values-zh-rCN/strings_time.xml @@ -0,0 +1,14 @@ + + + + 刚刚 + 分钟以前 + 小时以前 + 天以前 + 本月 + 今年 + 今天 + 昨天 + 前天 + 本周 + \ No newline at end of file diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml new file mode 100755 index 0000000..4a2c808 --- /dev/null +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -0,0 +1,21 @@ + + 驗證碼助手 + 關於 + 驗證碼助手,是由原「貝殼單詞」團隊開發的一款新的開源輕App.\n\n它可以在手機接收到驗證碼短信的時候,自動浮現驗證碼,並自動複製驗證碼到用戶的剪切板。當用戶接收到短信驗證碼,只要長按驗證碼的輸入框,粘貼驗證碼即可。 \n\n除此之外,還可以讓用戶批量刪除無用驗證碼短信,幫助用戶反向推理出綁定了哪些業務(換號必備啊有木有)。 \n\n我們做得非常輕,也秉承了一貫的好設計和用戶友好,在閒時它不會自啟動、不會偷跑​​流量、不會佔用任何內存(不信或擔憂的話歡迎查看源代碼~)。 \n\n開放源代碼地址:https://github.com/drakeet/SmsCodeHelper\n\n我們開源,做好設計,不亂使用權限,只求你如果喜歡,可以分享給你的朋友們,好東西需要分享才能讓其健康成長,每一次分享都是我們的動力,非常感謝! + 分享給朋友(謝謝QAQ) + 反向推理綁定業務 + 發現了一款非常美觀易用的「驗證碼助手」輕App,開源的,可以在驗證碼短信來臨的時,自動識別驗證碼,懸浮並且自動複製到剪切板,不用記憶不用輸入,只要長按粘貼即可輸入驗證碼。推薦~:http://fir.im/codehelper + 暫未識別綁定任何業務! + 識別中,請稍等 + 反向推理出的綁定業務詳情 v0.1 + 操作後將會把短信收件箱中所有的驗證碼短信清空,但是我們還是會為你保存驗證碼記錄(就算清空我們也還是能夠幫你反向推理出綁定的業務)。請仔細檢查並確認操作! + Android 5.0 以上暫不支持清空驗證碼短信! + 識別到驗證碼:%s,並已復製到剪貼板,長按你的輸入框即可粘貼驗證碼 + 當前驗證碼:%s(點擊可複制) + 驗證碼助手- 不用記數字不用輸入完成驗證 + 開發人員 + 開發者 + + 開源協議 + 介紹與幫助 + diff --git a/app/src/main/res/values-zh-rTW/strings_time.xml b/app/src/main/res/values-zh-rTW/strings_time.xml new file mode 100755 index 0000000..a08e9f1 --- /dev/null +++ b/app/src/main/res/values-zh-rTW/strings_time.xml @@ -0,0 +1,14 @@ + + + + 剛剛 + 分鐘以前 + 小時以前 + 天以前 + 本月 + 今年 + 今天 + 昨天 + 前天 + 本週 + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2c6c86f..4529ae8 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,25 +1,21 @@ - 验证码助手 - Hello world! - Settings - 关于 - @string/about - 验证码助手,是由原「贝壳单词」团队开发的一款新的开源轻App.\n\n它可以在手机接收到验证码短信的时候,自动浮现验证码,并自动复制验证码到用户的剪切板。当用户接收到短信验证码,只要长按验证码的输入框,粘贴验证码即可。\n\n除此之外,还可以让用户批量删除无用验证码短信,帮助用户反向推理出绑定了哪些业务(换号必备啊有木有)。\n\n我们做得非常轻,也秉承了一贯的好设计和用户友好,在闲时它不会自启动、不会偷跑流量、不会占用任何内存(不信或担忧的话欢迎查看源代码~)。\n\n开放源代码地址:https://github.com/drakeet/SmsCodeHelper\n\n我们开源,做好设计,不乱使用权限,只求你如果喜欢,可以分享给你的朋友们,好东西需要分享才能让其健康成长,每一次分享都是我们的动力,非常感谢! - 分享给朋友(谢谢QAQ) - 反向推理绑定业务 - 发现了一款非常美观易用的「验证码助手」轻App,开源的,可以在验证码短信来临的时,自动识别验证码,悬浮并且自动复制到剪切板,不用记忆不用输入,只要长按粘贴即可输入验证码。推荐~:http://fir.im/codehelper - 暂未识别绑定任何业务! - 识别中,请稍等 - 反向推理出的绑定业务详情 v0.1 - 操作后将会把短信收件箱中所有的验证码短信清空,但是我们还是会为你保存验证码记录(就算清空我们也还是能够帮你反向推理出绑定的业务)。请仔细检查并确认操作! - Android 5.0 以上暂不支持清空验证码短信! - 识别到验证码:%s,并已复制到剪贴板,长按你的输入框即可粘贴验证码 - 当前验证码:%s(点击可复制) - 删除的会话Id为: - 验证码助手 - 不用记数字不用输入完成验证 - 开发人员 - 开发者 - - 开源协议 - 介绍与帮助 + SmsCodeHelper + About + SmsCodeHelper, is a new open source of light App.\n\nIt can automatically emerge verification code when your phone receives a text message contains a verification code. And automatically copy the code to the user's clipboard. When the user receives the message verification code, just long press the EditText to paste the verification code.\n\nIn addition, it can also allow users to bulk delete unwanted SMS verification code; It can also help users Backward inference out what the business is bound (for a new phone number, it is useful).\n\nIt is very light, but also adhering to the usual good design and user-friendly, since it does not start at leisure, will not take up any memory (unbelievers or concern, welcome to view the source code) .\n\nOpen source address: https: //github.com/drakeet/SmsCodeHelper\n\nWe open source, good design, not indiscriminately use rights. Just hope if you like it, you can share with your friends, because good things need to share with others in order to let it grow, every share is our power, thanks! + Share to Friends (thank you) + Backward inference of bundled services + Found a very beautiful and easy to use app: "SmsCodeHelper" (verification code helper), light, open source, it can automatically copy the code to the user's clipboard, when the user receives the message verification code. Material Design and open source: http://fir.im/codehelper (or Google Play "SmsCodeHelper") + Temporarily did not find any business is bound. + Being recognized, please wait... + Backward inference of bundled services + All messages contain verification code will be deleted, but we will still save you records (for Backward inference). Please double-check and confirm the operation! + Android 5.0+ does not support emptied verification code text message temporarily. + Verification code: %s, and has been copied to the clipboard, press your input box to paste the code. + Current verification code:%s (Click to copy) + SmsCodeHelper - Convenient for Verification code + Developers + Developer + + Open source licenses + Introduction and help diff --git a/app/src/main/res/values/strings_time.xml b/app/src/main/res/values/strings_time.xml index 95b49fa..0bff79e 100755 --- a/app/src/main/res/values/strings_time.xml +++ b/app/src/main/res/values/strings_time.xml @@ -1,15 +1,14 @@ - 刚刚 - 分钟以前 - 小时以前 - 天以前 - 本月 - 今年 - 今天 - 今天 - 昨天 - 前天 - 本周 + Just now + minute(s) ago + hour(s) ago + day(s) ago + This month + This year + Today + Yesterday + The day after yesterday + This week \ No newline at end of file From 26188971cc3726d1b70e1202025137382e4fa902 Mon Sep 17 00:00:00 2001 From: drakeet Date: Fri, 19 Jun 2015 16:25:29 +0800 Subject: [PATCH 12/54] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20English=20=E5=92=8C?= =?UTF-8?q?=20=E7=B9=81=E4=BD=93=E8=AF=AD=E8=A8=80=E6=94=AF=E6=8C=81?= =?UTF-8?q?=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/values/strings.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4529ae8..59b181b 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,12 +1,12 @@ SmsCodeHelper About - SmsCodeHelper, is a new open source of light App.\n\nIt can automatically emerge verification code when your phone receives a text message contains a verification code. And automatically copy the code to the user's clipboard. When the user receives the message verification code, just long press the EditText to paste the verification code.\n\nIn addition, it can also allow users to bulk delete unwanted SMS verification code; It can also help users Backward inference out what the business is bound (for a new phone number, it is useful).\n\nIt is very light, but also adhering to the usual good design and user-friendly, since it does not start at leisure, will not take up any memory (unbelievers or concern, welcome to view the source code) .\n\nOpen source address: https: //github.com/drakeet/SmsCodeHelper\n\nWe open source, good design, not indiscriminately use rights. Just hope if you like it, you can share with your friends, because good things need to share with others in order to let it grow, every share is our power, thanks! + SmsCodeHelper, is a new open source of light App.\n\nIt can automatically emerge verification code when your phone receives a text message contains a verification code. And automatically copy the code to the user\'s clipboard. When the user receives the message verification code, just long press the EditText to paste the verification code.\n\nIn addition, it can also allow users to bulk delete unwanted SMS verification code; It can also help users Backward inference out what the business is bound (for a new phone number, it is useful).\n\nIt is very light, but also adhering to the usual good design and user-friendly, since it does not start at leisure, will not take up any memory (unbelievers or concern, welcome to view the source code) .\n\nOpen source address: https: //github.com/drakeet/SmsCodeHelper\n\nWe open source, good design, not indiscriminately use rights. Just hope if you like it, you can share with your friends, because good things need to share with others in order to let it grow, every share is our power, thanks! Share to Friends (thank you) Backward inference of bundled services - Found a very beautiful and easy to use app: "SmsCodeHelper" (verification code helper), light, open source, it can automatically copy the code to the user's clipboard, when the user receives the message verification code. Material Design and open source: http://fir.im/codehelper (or Google Play "SmsCodeHelper") + Found a very beautiful and easy to use app: SmsCodeHelper (verification code helper), light, open source, it can automatically copy the code to the user\'s clipboard, when the user receives the message verification code. Material Design and open source: http://fir.im/codehelper (or Google Play: SmsCodeHelper) Temporarily did not find any business is bound. - Being recognized, please wait... + Being recognized, please wait. Backward inference of bundled services All messages contain verification code will be deleted, but we will still save you records (for Backward inference). Please double-check and confirm the operation! Android 5.0+ does not support emptied verification code text message temporarily. From 0c8781c84168c5fe0d52e3330c125ed8883b7f88 Mon Sep 17 00:00:00 2001 From: drakeet Date: Fri, 19 Jun 2015 16:43:59 +0800 Subject: [PATCH 13/54] =?UTF-8?q?=E5=AE=8C=E5=96=84=20English=20=E5=92=8C?= =?UTF-8?q?=20=E7=B9=81=E4=BD=93=E8=AF=AD=E8=A8=80=E6=94=AF=E6=8C=81?= =?UTF-8?q?=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../me/drakeet/inmessage/MainActivity.java | 155 +++++++++--------- app/src/main/res/layout/activity_about.xml | 1 + app/src/main/res/values-zh-rCN/strings.xml | 8 + app/src/main/res/values-zh-rTW/strings.xml | 8 + app/src/main/res/values/strings.xml | 10 +- 5 files changed, 101 insertions(+), 81 deletions(-) diff --git a/app/src/main/java/me/drakeet/inmessage/MainActivity.java b/app/src/main/java/me/drakeet/inmessage/MainActivity.java index 16eba8a..111b3be 100755 --- a/app/src/main/java/me/drakeet/inmessage/MainActivity.java +++ b/app/src/main/java/me/drakeet/inmessage/MainActivity.java @@ -112,7 +112,7 @@ private void setAdapter() { new OnItemClickListener() { @Override public void onItemClick(View view, int position) { - if(!mIsRefreshing) { + if (!mIsRefreshing) { if (mMessages.get(position).getIsMessage()) { showDetailSMS(mMessages.get(position)); } @@ -168,39 +168,37 @@ private int getMessageCount() { @OnClick(R.id.fab_delete_all) public void deleteAll() { if (VersionUtils.IS_MORE_THAN_LOLLIPOP) { - ToastUtils.showShort("Android 5.0 以上暂不支持清空验证码短信!"); + ToastUtils.showShort(R.string.str_version_morethan_five); } else { showConfirmDialog(); } } private void showConfirmDialog() { - AlertDialog alertDialog = new AlertDialog.Builder(this). - setTitle("清空验证码短信?") - .setMessage(getString(R.string.str_clear_messages_hint)) - .setPositiveButton( - "确定", - new DialogInterface.OnClickListener() { - @Override - public void onClick( - DialogInterface dialog, - int which) { - showDeleteDialog(); - } - } - ) - .setNegativeButton( - "取消", - new DialogInterface.OnClickListener() { - @Override - public void onClick( - DialogInterface dialog, - int which) { - - } - } - ) - .create(); + AlertDialog alertDialog = new AlertDialog.Builder(this).setTitle(getString(R.string.empty_verification_code)) + .setMessage(getString(R.string.str_clear_messages_hint)) + .setPositiveButton( + android.R.string.ok, + new DialogInterface.OnClickListener() { + @Override + public void onClick( + DialogInterface dialog, + int which) { + showDeleteDialog(); + } + } + ) + .setNegativeButton( + android.R.string.cancel, + new DialogInterface.OnClickListener() { + @Override + public void onClick( + DialogInterface dialog, + int which) { + + } + } + ).create(); alertDialog.setCanceledOnTouchOutside(false); alertDialog.show(); } @@ -210,23 +208,22 @@ private void showDeleteDialog() { LayoutInflater layoutInflater = LayoutInflater.from(MainActivity.this); View addLayout = layoutInflater.inflate(R.layout.view_delete_messages, null); mNumberProgressBar = (NumberProgressBar) addLayout.findViewById(R.id.number_progress_bar); - AlertDialog deleteDialog = new AlertDialog.Builder(MainActivity.this). - setTitle( - "正在删除验证码短信..." - ) - .setView(addLayout) - .setNegativeButton( - "停止", - new DialogInterface.OnClickListener() { - @Override - public void onClick( - DialogInterface dialog, - int which) { - mStopDelete = true; - } - } - ) - .create(); + AlertDialog deleteDialog = new AlertDialog.Builder(MainActivity.this).setTitle( + getString(R.string.deleting_verification_code) + ) + .setView(addLayout) + .setNegativeButton( + android.R.string.cancel, + new DialogInterface.OnClickListener() { + @Override + public void onClick( + DialogInterface dialog, + int which) { + mStopDelete = true; + } + } + ) + .create(); deleteDialog.setCanceledOnTouchOutside(false); deleteDialog.setOnKeyListener( new DialogInterface.OnKeyListener() { @@ -250,20 +247,19 @@ public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { private void showBussinessDialog() { - final AlertDialog alertDialog = new AlertDialog.Builder(this). - setTitle(getString(R.string.str_check_bussiness_hint)) - .setMessage(getString(R.string.str_doing_hint)) - .setPositiveButton( - "确定", - new DialogInterface.OnClickListener() { - @Override - public void onClick( - DialogInterface dialog, - int which) { - } - } - ) - .create(); + final AlertDialog alertDialog = new AlertDialog.Builder(this).setTitle(getString(R.string.str_check_bussiness_hint)) + .setMessage(getString(R.string.str_doing_hint)) + .setPositiveButton( + android.R.string.ok, + new DialogInterface.OnClickListener() { + @Override + public void onClick( + DialogInterface dialog, + int which) { + } + } + ) + .create(); alertDialog.setCanceledOnTouchOutside(false); alertDialog.show(); TaskUtils.executeAsyncTask( @@ -324,20 +320,19 @@ private Boolean isExist(String company, List companys) { } private void showDetailSMS(Message message) { - AlertDialog alertDialog = new AlertDialog.Builder(this). - setTitle(message.getSender()) - .setMessage(message.getContent()) - .setPositiveButton( - "确定", - new DialogInterface.OnClickListener() { - @Override - public void onClick( - DialogInterface dialog, - int which) { - } - } - ) - .create(); + AlertDialog alertDialog = new AlertDialog.Builder(this).setTitle(message.getSender()) + .setMessage(message.getContent()) + .setPositiveButton( + android.R.string.ok, + new DialogInterface.OnClickListener() { + @Override + public void onClick( + DialogInterface dialog, + int which) { + } + } + ) + .create(); alertDialog.setCanceledOnTouchOutside(false); alertDialog.show(); } @@ -374,7 +369,7 @@ protected String doInBackground(Object... params) { protected void onPostExecute(String o) { super.onPostExecute(o); deleteDialog.dismiss(); - ToastUtils.showShort("成功删除" + o + "条验证码短信!"); + ToastUtils.showShort(String.format(getString(R.string.successfully_delete_verification_code_numbers), o)); getAllMessage(); } @@ -420,14 +415,14 @@ public boolean onCreateOptionsMenu(Menu menu) { final MenuItem switchItem = menu.findItem(R.id.menu_show_result); MenuItemCompat.setActionView(switchItem, R.layout.view_switchcompat); final SwitchCompat switchCompat = (SwitchCompat) switchItem.getActionView() - .findViewById(R.id.switchCompat); + .findViewById(R.id.switchCompat); switchCompat.setOnCheckedChangeListener( new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (mIsRefreshing) { switchCompat.setChecked(!isChecked); - ToastUtils.showShort("加载中请勿改变开关状态!"); + ToastUtils.showShort(getString(R.string.do_not_change_the_switch)); } else { SharedPreferences sharedPreferences = getSharedPreferences( "userinfo", Context.MODE_PRIVATE @@ -438,9 +433,9 @@ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { mMainMessageAdapter.setShowResult(isChecked); mMainMessageAdapter.notifyDataSetChanged(); if (isChecked) - ToastUtils.showShort("开启验证码内容显示简化"); + ToastUtils.showShort(getString(R.string.open_simplified)); else - ToastUtils.showShort("关闭验证码内容显示简化"); + ToastUtils.showShort(getString(R.string.close_simplified)); } } } @@ -473,7 +468,7 @@ public boolean onOptionsItemSelected(MenuItem item) { if (!mIsRefreshing) { showBussinessDialog(); } else { - ToastUtils.showShort("加载中请勿操作!"); + ToastUtils.showShort(getString(R.string.do_not_operate_in_load)); } } return super.onOptionsItemSelected(item); @@ -485,7 +480,7 @@ public boolean onOptionsItemSelected(MenuItem item) { public void onClickShare() { Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("text/plain"); - intent.putExtra(Intent.EXTRA_SUBJECT, "分享"); + intent.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.share_just)); intent.putExtra(Intent.EXTRA_TEXT, getString(R.string.share_text)); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(Intent.createChooser(intent, getTitle())); diff --git a/app/src/main/res/layout/activity_about.xml b/app/src/main/res/layout/activity_about.xml index 9915ec6..4e33a69 100644 --- a/app/src/main/res/layout/activity_about.xml +++ b/app/src/main/res/layout/activity_about.xml @@ -20,6 +20,7 @@ diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 2a5dd7b..ebb6e64 100755 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -18,4 +18,12 @@ 开源协议 介绍与帮助 + 清空验证码短信? + 删除验证码短信中… + 成功删除%s条验证码短信 + 加载中请勿改变开关状态! + 开启验证码内容显示简化 + 关闭验证码内容显示简化 + 加载中请勿操作! + 分享 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 4a2c808..9d1ff4b 100755 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -18,4 +18,12 @@ 開源協議 介紹與幫助 + 清空驗證碼簡訊? + 删除驗證碼簡訊中… + 成功删除%s條驗證碼簡訊 + 加载中请勿改变开关状态! + 开启验证码内容显示简化 + 关闭验证码内容显示简化 + 加载中请勿操作! + 分享 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 59b181b..8905a31 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -12,10 +12,18 @@ Android 5.0+ does not support emptied verification code text message temporarily. Verification code: %s, and has been copied to the clipboard, press your input box to paste the code. Current verification code:%s (Click to copy) - SmsCodeHelper - Convenient for Verification code + SmsCodeHelper \n- Convenient for Verification code Developers Developer Open source licenses Introduction and help + Empty verification code SMS? + Deleting verification code SMS... + Successfully delete %s verification code sms! + Do not change the switch state in the load! + Opened simplified + Closed simplified + Do not operate in load! + Share From 0f0dbba9dcbbbe94c65e05c22e0af710bd732091 Mon Sep 17 00:00:00 2001 From: drakeet Date: Fri, 19 Jun 2015 16:45:06 +0800 Subject: [PATCH 14/54] =?UTF-8?q?=E5=AE=8C=E5=96=84=20English=20=E5=92=8C?= =?UTF-8?q?=20=E7=B9=81=E4=BD=93=E8=AF=AD=E8=A8=80=E6=94=AF=E6=8C=81?= =?UTF-8?q?=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8905a31..ac31262 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,7 +1,7 @@ SmsCodeHelper About - SmsCodeHelper, is a new open source of light App.\n\nIt can automatically emerge verification code when your phone receives a text message contains a verification code. And automatically copy the code to the user\'s clipboard. When the user receives the message verification code, just long press the EditText to paste the verification code.\n\nIn addition, it can also allow users to bulk delete unwanted SMS verification code; It can also help users Backward inference out what the business is bound (for a new phone number, it is useful).\n\nIt is very light, but also adhering to the usual good design and user-friendly, since it does not start at leisure, will not take up any memory (unbelievers or concern, welcome to view the source code) .\n\nOpen source address: https: //github.com/drakeet/SmsCodeHelper\n\nWe open source, good design, not indiscriminately use rights. Just hope if you like it, you can share with your friends, because good things need to share with others in order to let it grow, every share is our power, thanks! + SmsCodeHelper, is a new open source and light App.\n\nIt can automatically emerge verification code when your phone receives a text message contains a verification code. And automatically copy the code to the user\'s clipboard. When the user receives the message verification code, just long press the EditText to paste the verification code.\n\nIn addition, it can also allow users to bulk delete unwanted SMS verification code; It can also help users Backward inference out what the business is bound (for a new phone number, it is useful).\n\nIt is very light, but also adhering to the usual good design and user-friendly, since it does not start at leisure, will not take up any memory (unbelievers or concern, welcome to view the source code) .\n\nOpen source address: https: //github.com/drakeet/SmsCodeHelper\n\nWe open source, good design, not indiscriminately use rights. Just hope if you like it, you can share with your friends, because good things need to share with others in order to let it grow, every share is our power, thanks! Share to Friends (thank you) Backward inference of bundled services Found a very beautiful and easy to use app: SmsCodeHelper (verification code helper), light, open source, it can automatically copy the code to the user\'s clipboard, when the user receives the message verification code. Material Design and open source: http://fir.im/codehelper (or Google Play: SmsCodeHelper) From d90631545206c1105d3769fa95b0c1154f6536d5 Mon Sep 17 00:00:00 2001 From: drakeet Date: Fri, 19 Jun 2015 16:47:35 +0800 Subject: [PATCH 15/54] add autoLink --- app/src/main/res/layout/activity_about.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/layout/activity_about.xml b/app/src/main/res/layout/activity_about.xml index 4e33a69..f6f50b0 100644 --- a/app/src/main/res/layout/activity_about.xml +++ b/app/src/main/res/layout/activity_about.xml @@ -68,6 +68,7 @@ android:layout_margin="16dp" android:text="@string/introduce" android:textColor="@color/md_grey_800" + android:autoLink="web" android:textSize="14sp"/> From 2db635137157852505c769910706112b069dd75e Mon Sep 17 00:00:00 2001 From: drakeet Date: Fri, 19 Jun 2015 16:53:52 +0800 Subject: [PATCH 16/54] support English Read me --- README.md | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 20885a9..e327f4c 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -#验证码助手 +#验证码助手 SmsCodeHelper 是由原「[贝壳单词](http://www.beikedanci.com)」团队开发的一款新的开源轻App. @@ -16,12 +16,24 @@ screenshot screenshot -#源代码在GPLv3协议下发布 +#源代码在 GPLv3 协议下发布 ###我们开源,做好设计,不乱使用权限,只求你如果喜欢,可以分享给你的朋友们,好东西需要分享才能让其健康成长,每一次分享都是我们的动力,非常感谢! -#下载 +#下载 Download Google Play:https://play.google.com/store/apps/details?id=me.drakeet.inmessage -Fir:http://fir.im/codehelper \ No newline at end of file +Fir:http://fir.im/codehelper + +#English introduction +SmsCodeHelper, is a new open source and light App. + +It can automatically emerge verification code when your phone receives a text message contains a verification code. And automatically copy the code to the user's clipboard. When the user receives the message verification code, just long press the EditText to paste the verification code. + +In addition, it can also allow users to bulk delete unwanted SMS verification code; It can also help users Backward inference out what the business is bound (for a new phone number, it is useful). + +It is very light, but also adhering to the usual good design and user-friendly, since it does not start at leisure, will not take up any memory (unbelievers or concern, welcome to view the source code) . + + +We open source, good design, not indiscriminately use rights. Just hope if you like it, you can share with your friends, because good things need to share with others in order to let it grow, every share is our power, thanks! From 9329a2d47c9d38354e86e2baa400766e3e5b8270 Mon Sep 17 00:00:00 2001 From: shengkun <444341703@qq.com> Date: Fri, 19 Jun 2015 17:08:26 +0800 Subject: [PATCH 17/54] =?UTF-8?q?=E6=8F=90=E9=AB=98=E9=AA=8C=E8=AF=81?= =?UTF-8?q?=E5=87=86=E7=A1=AE=E5=BA=A6=EF=BC=8C=E7=AE=80=E5=8D=95=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E8=8B=B1=E6=96=87=E7=9F=AD=E4=BF=A1=E9=AA=8C=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../constant/StaticObjectInterface.java | 5 +- .../service/SMSBroadcastReceiver.java | 97 ++++++++++--------- .../me/drakeet/inmessage/utils/SmsUtils.java | 69 +++++++------ .../drakeet/inmessage/utils/StringUtils.java | 68 ++++++++++++- build.gradle | 2 +- 5 files changed, 162 insertions(+), 79 deletions(-) diff --git a/app/src/main/java/me/drakeet/inmessage/constant/StaticObjectInterface.java b/app/src/main/java/me/drakeet/inmessage/constant/StaticObjectInterface.java index f43530c..e6cedd4 100644 --- a/app/src/main/java/me/drakeet/inmessage/constant/StaticObjectInterface.java +++ b/app/src/main/java/me/drakeet/inmessage/constant/StaticObjectInterface.java @@ -5,6 +5,9 @@ */ public interface StaticObjectInterface { - String[] CPATCHAS_KEYWORD = {"激活码", "动态码", "校验码", "验证码", "驗證碼", "激活碼", "動態碼", "校驗碼"}; + String[] CPATCHAS_KEYWORD = {"激活码", "动态码", "校验码", "验证码", "确认码", "检验码", "验证代码", "激活代码", + "校验代码", "动态代码", "检验代码", "确认代码", "驗證碼", "激活碼", "動態碼", "校驗碼", "檢驗碼", "驗證代碼", + "激活代碼", "校驗代碼", "確認代碼", "動態代碼", "檢驗代碼"}; + String[] CPATCHAS_KEYWORD_EN = {"CODE"}; String ACTION_CLICK = "me.drakeet.inmessage.intent.action.NotificationClick"; } diff --git a/app/src/main/java/me/drakeet/inmessage/service/SMSBroadcastReceiver.java b/app/src/main/java/me/drakeet/inmessage/service/SMSBroadcastReceiver.java index f79d19c..911a94d 100755 --- a/app/src/main/java/me/drakeet/inmessage/service/SMSBroadcastReceiver.java +++ b/app/src/main/java/me/drakeet/inmessage/service/SMSBroadcastReceiver.java @@ -36,52 +36,61 @@ public void onReceive(Context context, Intent intent) { //获取发送时间 final Date date = new Date(message.getTimestampMillis()); final String sender = message.getOriginatingAddress(); - if (!StringUtils.isPersonalMoblieNO(sender) && StringUtils.isCaptchasMessage(content) && !StringUtils - .tryToGetCaptchas(content) - .equals("")) { - if (!DiscernCaptchasService.isAlive) { - mServiceIntent = new Intent(context, DiscernCaptchasService.class); - context.startService(mServiceIntent); + + if (!StringUtils.isPersonalMoblieNO(sender)) { + boolean isCpatchasMessage = false; + if (!StringUtils.isContainsChinese(content)) { + if (StringUtils.isCaptchasMessageEn(content) && !StringUtils.tryToGetCaptchasEn(content).equals("")) { + isCpatchasMessage = true; + } + } else if (StringUtils.isCaptchasMessage(content) && !StringUtils.tryToGetCaptchas(content).equals("")) { + isCpatchasMessage = true; } - this.abortBroadcast(); - mHandler = new WeakHandler(); - mHandler.postDelayed( - new Runnable() { - @Override - public void run() { - Message smsMessage = new Message(); - smsMessage.setContent(content); - smsMessage.setSender(sender); - smsMessage.setDate(date); - String company = StringUtils.getContentInBracket(content, sender); - if (company != null) { - smsMessage.setCompanyName(company); - } - smsMessage.setIsMessage(true); - //格式化短信日期提示 - SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd hh:mm"); - //获得短信的各项内容 - String date_mms = dateFormat.format(date); - smsMessage.setReceiveDate(date_mms); - smsMessage.setReadStatus(0); - smsMessage.setFromSmsDB(1); - String captchas = StringUtils.tryToGetCaptchas(content); - if (!captchas.equals("")) { - smsMessage.setCaptchas(captchas); - } - String resultContent = StringUtils.getResultText(smsMessage, false); - if (resultContent != null) { - smsMessage.setResultContent(resultContent); + if (isCpatchasMessage) { + if (!DiscernCaptchasService.isAlive) { + mServiceIntent = new Intent(context, DiscernCaptchasService.class); + context.startService(mServiceIntent); + } + this.abortBroadcast(); + mHandler = new WeakHandler(); + mHandler.postDelayed( + new Runnable() { + @Override + public void run() { + Message smsMessage = new Message(); + smsMessage.setContent(content); + smsMessage.setSender(sender); + smsMessage.setDate(date); + String company = StringUtils.getContentInBracket(content, sender); + if (company != null) { + smsMessage.setCompanyName(company); + } + smsMessage.setIsMessage(true); + //格式化短信日期提示 + SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd hh:mm"); + //获得短信的各项内容 + String date_mms = dateFormat.format(date); + smsMessage.setReceiveDate(date_mms); + smsMessage.setReadStatus(0); + smsMessage.setFromSmsDB(1); + String captchas = StringUtils.tryToGetCaptchas(content); + if (!captchas.equals("")) { + smsMessage.setCaptchas(captchas); + } + String resultContent = StringUtils.getResultText(smsMessage, false); + if (resultContent != null) { + smsMessage.setResultContent(resultContent); + } + if (!VersionUtils.IS_MORE_THAN_LOLLIPOP) { + smsMessage.save(); + } + BusProvider.getInstance().register(this); + BusProvider.getInstance().post(new ReceiveMessageEvent(smsMessage)); + BusProvider.getInstance().unregister(this); } - if (!VersionUtils.IS_MORE_THAN_LOLLIPOP) { - smsMessage.save(); - } - BusProvider.getInstance().register(this); - BusProvider.getInstance().post(new ReceiveMessageEvent(smsMessage)); - BusProvider.getInstance().unregister(this); - } - }, 358 - ); + }, 358 + ); + } } } } diff --git a/app/src/main/java/me/drakeet/inmessage/utils/SmsUtils.java b/app/src/main/java/me/drakeet/inmessage/utils/SmsUtils.java index bc7fbf4..87401c7 100755 --- a/app/src/main/java/me/drakeet/inmessage/utils/SmsUtils.java +++ b/app/src/main/java/me/drakeet/inmessage/utils/SmsUtils.java @@ -50,38 +50,49 @@ public List getAllCaptchMessages() { int indexThreadId = cursor.getColumnIndex("thread_id"); String strbody = cursor.getString(indexBody); String strAddress = cursor.getString(indexAddress); - if (!StringUtils.isPersonalMoblieNO(strAddress) && StringUtils.isCaptchasMessage(strbody) && !StringUtils.tryToGetCaptchas(strbody).equals("")) { - int date = cursor.getColumnIndex("date"); - //格式化短信日期提示 - SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd hh:mm"); - Date formatDate = new Date(Long.parseLong(cursor.getString(date))); - long threadId = cursor.getLong(indexThreadId); - - //获得短信的各项内容 - String dateMms = dateFormat.format(formatDate); - Message message = new Message(); - String company = StringUtils.getContentInBracket(strbody, strAddress); - if (company != null) { - message.setCompanyName(company); + if (!StringUtils.isPersonalMoblieNO(strAddress)) { + boolean isCpatchasMessage = false; + if(!StringUtils.isContainsChinese(strbody)) { + if(StringUtils.isCaptchasMessageEn(strbody) && !StringUtils.tryToGetCaptchasEn(strbody).equals("")) { + isCpatchasMessage = true; + } } - String captchas = StringUtils.tryToGetCaptchas(strbody); - if(!captchas.equals("")) { - message.setCaptchas(captchas); + else if(StringUtils.isCaptchasMessage(strbody) && !StringUtils.tryToGetCaptchas(strbody).equals("")) { + isCpatchasMessage = true; } - int columnIndex = cursor.getColumnIndex("_id"); - String smsId = cursor.getString(columnIndex); - message.setIsMessage(true); - message.setDate(formatDate); - message.setSender(strAddress); - message.setThreadId(threadId); - message.setContent(strbody); - message.setSmsId(smsId); - message.setReceiveDate(dateMms); - String resultContent = StringUtils.getResultText(message, false); - if(resultContent != null) { - message.setResultContent(resultContent); + if(isCpatchasMessage) { + int date = cursor.getColumnIndex("date"); + //格式化短信日期提示 + SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd hh:mm"); + Date formatDate = new Date(Long.parseLong(cursor.getString(date))); + long threadId = cursor.getLong(indexThreadId); + + //获得短信的各项内容 + String dateMms = dateFormat.format(formatDate); + Message message = new Message(); + String company = StringUtils.getContentInBracket(strbody, strAddress); + if (company != null) { + message.setCompanyName(company); + } + String captchas = StringUtils.tryToGetCaptchas(strbody); + if (!captchas.equals("")) { + message.setCaptchas(captchas); + } + int columnIndex = cursor.getColumnIndex("_id"); + String smsId = cursor.getString(columnIndex); + message.setIsMessage(true); + message.setDate(formatDate); + message.setSender(strAddress); + message.setThreadId(threadId); + message.setContent(strbody); + message.setSmsId(smsId); + message.setReceiveDate(dateMms); + String resultContent = StringUtils.getResultText(message, false); + if (resultContent != null) { + message.setResultContent(resultContent); + } + smsMessages.add(message); } - smsMessages.add(message); } } diff --git a/app/src/main/java/me/drakeet/inmessage/utils/StringUtils.java b/app/src/main/java/me/drakeet/inmessage/utils/StringUtils.java index ced8b20..d87a73c 100755 --- a/app/src/main/java/me/drakeet/inmessage/utils/StringUtils.java +++ b/app/src/main/java/me/drakeet/inmessage/utils/StringUtils.java @@ -87,6 +87,23 @@ private static String analyseSpecialCompany(String company, String content, Stri return companyName; } + /** + * 判断字符串中时否包含中文 + * + * @param str + * @return + */ + public static boolean isContainsChinese(String str) { + String regEx = "[\u4e00-\u9fa5]"; + Pattern pat = Pattern.compile(regEx); + Matcher matcher = pat.matcher(str); + boolean flg = false; + if (matcher.find()) { + flg = true; + } + return flg || str.contains("【") || str.contains("】") || str.contains("。"); + } + public static boolean isPersonalMoblieNO(String mobiles) { Pattern p = Pattern.compile("^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$"); Matcher m = p.matcher(mobiles); @@ -106,14 +123,46 @@ public static String tryToGetCaptchas(String str) { return ""; } + public static String tryToGetCaptchasEn(String str) { + Pattern continuousNumberPattern = Pattern.compile("[0-9\\.]+"); + Matcher m = continuousNumberPattern.matcher(str); + while (m.find()) { + if (m.group().length() > 3 && m.group().length() < 8 && !m.group().contains(".")) { + if(isNearToKeyWordEn(m.group(), str)) { + return m.group(); + } + } + } + return ""; + } + + public static boolean isNearToKeyWordEn(String currentStr, String content) { + int startPosition = 0; + int endPosition = content.length() - 1; + if (content.indexOf(currentStr) > 12) { + startPosition = content.indexOf(currentStr) - 12; + } + if (content.indexOf(currentStr) + currentStr.length() + 12 < content.length() - 1) { + endPosition = content.indexOf(currentStr) + currentStr.length() + 12; + } + Boolean isNearToKeyWord = false; + for (int i = 0; i < CPATCHAS_KEYWORD_EN.length; i++) { + if (content.substring(startPosition, endPosition).contains(CPATCHAS_KEYWORD_EN[i])) { + isNearToKeyWord = true; + break; + } + } + return isNearToKeyWord; + } + public static boolean isNearToKeyWord(String currentStr, String content) { int startPosition = 0; int endPosition = content.length() - 1; - if (content.indexOf(currentStr) > 10) { - startPosition = content.indexOf(currentStr) - 10; + if (content.indexOf(currentStr) > 12) { + startPosition = content.indexOf(currentStr) - 12; } - if (content.indexOf(currentStr) + 10 < content.length() - 1) { - endPosition = content.indexOf(currentStr) + 10; + if (content.indexOf(currentStr) + currentStr.length() + 12 < content.length() - 1) { + endPosition = content.indexOf(currentStr) + currentStr.length() + 12; } Boolean isNearToKeyWord = false; for (int i = 0; i < CPATCHAS_KEYWORD.length; i++) { @@ -136,6 +185,17 @@ public static boolean isCaptchasMessage(String content) { return isCaptchasMessage; } + public static boolean isCaptchasMessageEn(String content) { + Boolean isCaptchasMessage = false; + for (int i = 0; i < CPATCHAS_KEYWORD_EN.length; i++) { + if (content.contains(CPATCHAS_KEYWORD_EN[i])) { + isCaptchasMessage = true; + break; + } + } + return isCaptchasMessage; + } + /** * 根据短信获取描述文字 * diff --git a/build.gradle b/build.gradle index d3ff69d..9405f3f 100755 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:1.1.0' + classpath 'com.android.tools.build:gradle:1.2.3' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files From 5c78328215871c4334ce311a28ce32cbe01aa684 Mon Sep 17 00:00:00 2001 From: drakeet Date: Fri, 19 Jun 2015 17:18:26 +0800 Subject: [PATCH 18/54] support English code sms --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 3768161..a994d44 100755 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,8 +12,8 @@ android { applicationId "me.drakeet.inmessage" minSdkVersion 15 targetSdkVersion 22 - versionCode 8 - versionName "1.0.3" + versionCode 10 + versionName "1.0.6" } sourceSets { main { From 386a77033d15e2a0a79f08172b3626d38f00cd71 Mon Sep 17 00:00:00 2001 From: shengkun <444341703@qq.com> Date: Fri, 19 Jun 2015 17:23:39 +0800 Subject: [PATCH 19/54] =?UTF-8?q?=E6=8F=90=E9=AB=98=E9=AA=8C=E8=AF=81?= =?UTF-8?q?=E5=87=86=E7=A1=AE=E5=BA=A6=EF=BC=8C=E7=AE=80=E5=8D=95=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E8=8B=B1=E6=96=87=E7=9F=AD=E4=BF=A1=E9=AA=8C=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../me/drakeet/inmessage/constant/StaticObjectInterface.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/me/drakeet/inmessage/constant/StaticObjectInterface.java b/app/src/main/java/me/drakeet/inmessage/constant/StaticObjectInterface.java index e6cedd4..eb67359 100644 --- a/app/src/main/java/me/drakeet/inmessage/constant/StaticObjectInterface.java +++ b/app/src/main/java/me/drakeet/inmessage/constant/StaticObjectInterface.java @@ -8,6 +8,6 @@ public interface StaticObjectInterface { String[] CPATCHAS_KEYWORD = {"激活码", "动态码", "校验码", "验证码", "确认码", "检验码", "验证代码", "激活代码", "校验代码", "动态代码", "检验代码", "确认代码", "驗證碼", "激活碼", "動態碼", "校驗碼", "檢驗碼", "驗證代碼", "激活代碼", "校驗代碼", "確認代碼", "動態代碼", "檢驗代碼"}; - String[] CPATCHAS_KEYWORD_EN = {"CODE"}; + String[] CPATCHAS_KEYWORD_EN = {"CODE", "code"}; String ACTION_CLICK = "me.drakeet.inmessage.intent.action.NotificationClick"; } From a26986b8ca1cddada701ad30ce75645b5d1c14c7 Mon Sep 17 00:00:00 2001 From: shengkun <444341703@qq.com> Date: Fri, 19 Jun 2015 17:42:41 +0800 Subject: [PATCH 20/54] =?UTF-8?q?=E6=8F=90=E9=AB=98=E9=AA=8C=E8=AF=81?= =?UTF-8?q?=E5=87=86=E7=A1=AE=E5=BA=A6=EF=BC=8C=E7=AE=80=E5=8D=95=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E8=8B=B1=E6=96=87=E7=9F=AD=E4=BF=A1=E9=AA=8C=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../me/drakeet/inmessage/constant/StaticObjectInterface.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/me/drakeet/inmessage/constant/StaticObjectInterface.java b/app/src/main/java/me/drakeet/inmessage/constant/StaticObjectInterface.java index eb67359..6887c7a 100644 --- a/app/src/main/java/me/drakeet/inmessage/constant/StaticObjectInterface.java +++ b/app/src/main/java/me/drakeet/inmessage/constant/StaticObjectInterface.java @@ -6,7 +6,7 @@ public interface StaticObjectInterface { String[] CPATCHAS_KEYWORD = {"激活码", "动态码", "校验码", "验证码", "确认码", "检验码", "验证代码", "激活代码", - "校验代码", "动态代码", "检验代码", "确认代码", "驗證碼", "激活碼", "動態碼", "校驗碼", "檢驗碼", "驗證代碼", + "校验代码", "动态代码", "检验代码", "确认代码", "短信口令", "动态密码", "交易码", "驗證碼", "激活碼", "動態碼", "校驗碼", "檢驗碼", "驗證代碼", "激活代碼", "校驗代碼", "確認代碼", "動態代碼", "檢驗代碼"}; String[] CPATCHAS_KEYWORD_EN = {"CODE", "code"}; String ACTION_CLICK = "me.drakeet.inmessage.intent.action.NotificationClick"; From 312f69669c6571e9e9d17e56c2a33a2111cd909b Mon Sep 17 00:00:00 2001 From: drakeet Date: Tue, 23 Jun 2015 11:08:57 +0800 Subject: [PATCH 21/54] fix start crash; --- app/build.gradle | 9 +++++---- app/src/main/res/layout/activity_main.xml | 3 +-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index a994d44..327bacd 100755 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,8 +12,8 @@ android { applicationId "me.drakeet.inmessage" minSdkVersion 15 targetSdkVersion 22 - versionCode 10 - versionName "1.0.6" + versionCode 20 + versionName "1.2.0" } sourceSets { main { @@ -57,8 +57,8 @@ android { buildConfigField "boolean", "LOG_DEBUG", "false" debuggable false - minifyEnabled true - shrinkResources true + minifyEnabled false + shrinkResources false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' signingConfig signingConfigs.app1 @@ -123,4 +123,5 @@ dependencies { compile 'com.jakewharton:butterknife:6.0.0' compile 'com.badoo.mobile:android-weak-handler:1.0' compile 'com.umeng.analytics:analytics:latest.integration'// Umeng 统计 + } diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 8a2e66e..a7cf4a4 100755 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -6,8 +6,7 @@ tools:context=".MainActivity"> + layout="@layout/view_toolbar"/> Date: Fri, 26 Jun 2015 21:25:36 +0800 Subject: [PATCH 22/54] =?UTF-8?q?=E5=88=97=E8=A1=A8=E9=A1=B9=E8=A7=A6?= =?UTF-8?q?=E6=91=B8=E4=BD=BF=E7=94=A8=E6=B0=B4=E6=B3=A2=E7=BA=B9=E6=95=88?= =?UTF-8?q?=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/drawable/bg_listview_item.xml | 9 --------- app/src/main/res/layout/item_message.xml | 3 ++- app/src/main/res/values/colors.xml | 3 +-- 3 files changed, 3 insertions(+), 12 deletions(-) delete mode 100644 app/src/main/res/drawable/bg_listview_item.xml diff --git a/app/src/main/res/drawable/bg_listview_item.xml b/app/src/main/res/drawable/bg_listview_item.xml deleted file mode 100644 index c54a281..0000000 --- a/app/src/main/res/drawable/bg_listview_item.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_message.xml b/app/src/main/res/layout/item_message.xml index 5837e54..45d505e 100755 --- a/app/src/main/res/layout/item_message.xml +++ b/app/src/main/res/layout/item_message.xml @@ -4,7 +4,7 @@ android:id="@+id/item_message" android:orientation="vertical" android:elevation="3px" - android:background="@drawable/bg_listview_item" + android:background="@color/message_bg_color" android:layout_width="match_parent" android:layout_height="wrap_content"> @@ -12,6 +12,7 @@ android:paddingTop="12dp" android:paddingBottom="12dp" android:paddingRight="16dp" + android:background="?selectableItemBackground" android:layout_width="match_parent" android:layout_height="wrap_content"> diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 2faa71d..4d3a46e 100755 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -24,7 +24,6 @@ #f57c00 #e0e0e0 #cfdbdc - #216b74ff #e91e63 #00b0ff @color/theme_primary @@ -33,4 +32,4 @@ #f1f1f1 #00000000 - \ No newline at end of file + From adf4a9a6731863c9be5bd348a3d7b45f6d3dc5cc Mon Sep 17 00:00:00 2001 From: XiNGRZ Date: Sat, 27 Jun 2015 12:49:58 +0800 Subject: [PATCH 23/54] =?UTF-8?q?=E7=B2=BE=E7=AE=80=20Layout=20=E5=B1=82?= =?UTF-8?q?=E6=AC=A1=EF=BC=8C=E6=B8=85=E7=90=86=20#8=20=E6=8F=90=E5=88=B0?= =?UTF-8?q?=E7=9A=84=E8=8B=A5=E5=B9=B2=20Lint=20warning?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../me/drakeet/inmessage/MainActivity.java | 2 + .../inmessage/adapter/MainMessageAdapter.java | 35 +----- .../widget/SeparatorItemDecoration.java | 79 +++++++++++++ app/src/main/res/drawable/shadow.xml | 12 ++ app/src/main/res/layout/activity_about.xml | 109 ++++++++++-------- app/src/main/res/layout/activity_main.xml | 80 ++++++------- app/src/main/res/layout/item_message.xml | 78 ++++++------- app/src/main/res/layout/line.xml | 6 - app/src/main/res/layout/view_separation.xml | 53 ++------- app/src/main/res/layout/view_switchcompat.xml | 17 ++- app/src/main/res/layout/view_toolbar.xml | 7 +- app/src/main/res/mipmap-xhdpi/shadow.png | Bin 226 -> 0 bytes app/src/main/res/values/colors.xml | 2 +- 13 files changed, 258 insertions(+), 222 deletions(-) create mode 100644 app/src/main/java/me/drakeet/inmessage/widget/SeparatorItemDecoration.java create mode 100644 app/src/main/res/drawable/shadow.xml delete mode 100755 app/src/main/res/layout/line.xml delete mode 100644 app/src/main/res/mipmap-xhdpi/shadow.png diff --git a/app/src/main/java/me/drakeet/inmessage/MainActivity.java b/app/src/main/java/me/drakeet/inmessage/MainActivity.java index 111b3be..5316ca4 100755 --- a/app/src/main/java/me/drakeet/inmessage/MainActivity.java +++ b/app/src/main/java/me/drakeet/inmessage/MainActivity.java @@ -42,6 +42,7 @@ import me.drakeet.inmessage.utils.TaskUtils; import me.drakeet.inmessage.utils.ToastUtils; import me.drakeet.inmessage.utils.VersionUtils; +import me.drakeet.inmessage.widget.SeparatorItemDecoration; public class MainActivity extends SwipeRefreshBaseActivity { @@ -94,6 +95,7 @@ private void initRecyclerView() { LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); mRecyclerView.setLayoutManager(linearLayoutManager); + mRecyclerView.addItemDecoration(new SeparatorItemDecoration(this)); mRecyclerView.setOnTouchListener( new View.OnTouchListener() { @Override diff --git a/app/src/main/java/me/drakeet/inmessage/adapter/MainMessageAdapter.java b/app/src/main/java/me/drakeet/inmessage/adapter/MainMessageAdapter.java index 186ff6f..4a4cfcc 100755 --- a/app/src/main/java/me/drakeet/inmessage/adapter/MainMessageAdapter.java +++ b/app/src/main/java/me/drakeet/inmessage/adapter/MainMessageAdapter.java @@ -7,8 +7,8 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.FrameLayout; import android.widget.ImageView; -import android.widget.LinearLayout; import android.widget.TextView; import java.util.List; @@ -18,7 +18,6 @@ import me.drakeet.inmessage.model.Message; import me.drakeet.inmessage.utils.SmsUtils; import me.drakeet.inmessage.utils.TaskUtils; -import me.drakeet.inmessage.utils.VersionUtils; /** * Created by shengkun on 15/6/5. @@ -51,7 +50,6 @@ public MainMessageAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int vi View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_separation, parent, false); viewHolder = new ViewHolder(v); viewHolder.dateTv = (TextView) v.findViewById(R.id.date_message_tv); - viewHolder.shadow = v.findViewById(R.id.ig_shadow); } if (viewType == ITEM_TYPE.ITEM_TYPE_MESSAGE.ordinal()) { View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_message, parent, false); @@ -60,7 +58,7 @@ public MainMessageAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int vi viewHolder.contentTv = (TextView) v.findViewById(R.id.content_message_tv); viewHolder.avatarTv = (TextView) v.findViewById(R.id.avatar_tv); viewHolder.dateTv = (TextView) v.findViewById(R.id.message_date_tv); - viewHolder.itemLl = (LinearLayout) v.findViewById(R.id.item_message); + viewHolder.itemLl = (FrameLayout) v.findViewById(R.id.item_message); } return viewHolder; } @@ -110,11 +108,6 @@ public void onClick(View v) { } else { holder.dateTv.setText(mList.get(position).getReceiveDate()); - if(needShowShadow(position)) { - holder.shadow.setVisibility(View.VISIBLE); - } else { - holder.shadow.setVisibility(View.GONE); - } } } @@ -167,19 +160,6 @@ protected void onPostExecute(String s) { }); } - private Boolean needShowShadow(int position) { - if (VersionUtils.IS_MORE_THAN_LOLLIPOP) { - return false; - } - if(position == 0) { - return false; - } - else if(mList.get(position - 1).getIsMessage()) { - return true; - } - return false; - } - @Override public int getItemViewType(int position) { return mList.get(position).getIsMessage() ? ITEM_TYPE.ITEM_TYPE_MESSAGE.ordinal() : ITEM_TYPE.ITEM_TYPE_DATE.ordinal(); @@ -194,22 +174,15 @@ public ViewHolder(View itemView) { TextView contentTv; TextView avatarTv; TextView dateTv; - View shadow; - LinearLayout itemLl; + FrameLayout itemLl; } public void setOnItemClickListener(OnItemClickListener listener) { this.listener = listener; } - - public void setShowResult(Boolean showResult) { + public void setShowResult(boolean showResult) { this.mShowResult = showResult; } - - @Override - public void onViewRecycled(MainMessageAdapter.ViewHolder holder) { - super.onViewRecycled(holder); - } } diff --git a/app/src/main/java/me/drakeet/inmessage/widget/SeparatorItemDecoration.java b/app/src/main/java/me/drakeet/inmessage/widget/SeparatorItemDecoration.java new file mode 100644 index 0000000..a10e707 --- /dev/null +++ b/app/src/main/java/me/drakeet/inmessage/widget/SeparatorItemDecoration.java @@ -0,0 +1,79 @@ +package me.drakeet.inmessage.widget; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.drawable.Drawable; +import android.support.v7.widget.RecyclerView; +import android.view.View; + +import me.drakeet.inmessage.R; +import me.drakeet.inmessage.adapter.MainMessageAdapter; +import me.drakeet.inmessage.utils.VersionUtils; + +public class SeparatorItemDecoration extends RecyclerView.ItemDecoration { + + private static final int DIVIDER_SIZE_PX = 1; + + private final Paint mDivider; + + private final Drawable mShadow; + + public SeparatorItemDecoration(Context context) { + mDivider = new Paint(); + mDivider.setColor(context.getResources().getColor(R.color.line_gray)); + mDivider.setStyle(Paint.Style.STROKE); + mDivider.setStrokeWidth(DIVIDER_SIZE_PX); + + mShadow = context.getResources().getDrawable(R.drawable.shadow); + } + + @Override + public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) { + int childCount = parent.getChildCount(); + for (int i = 0; i < childCount; i++) { + View child = parent.getChildAt(i); + + if (shouldDrawDivider(parent, i, childCount)) { + c.drawLine(0, child.getBottom(), c.getWidth(), child.getBottom(), mDivider); + } + + if (shouldDrawShadow(parent, i)) { + mShadow.setBounds(0, child.getTop(), c.getWidth(), child.getTop() + mShadow.getIntrinsicHeight()); + mShadow.draw(c); + } + } + } + + private MainMessageAdapter.ITEM_TYPE getItemType(View child, RecyclerView parent) { + int adapterPosition = parent.getChildAdapterPosition(child); + int itemType = parent.getAdapter().getItemViewType(adapterPosition); + return MainMessageAdapter.ITEM_TYPE.values()[itemType]; + } + + private boolean shouldDrawDivider(RecyclerView parent, int i, int childCount) { + View child = parent.getChildAt(i); + + // 对于 Lollipop 以上,因为 message item 有 elevation,不绘制 date item 底下的分割线 + if (VersionUtils.IS_MORE_THAN_LOLLIPOP && getItemType(child, parent) + == MainMessageAdapter.ITEM_TYPE.ITEM_TYPE_DATE) { + return false; + } + + // 总是不绘制 date item 上一个 message item 底下的分割线,因为有 elevation 或假阴影 + if (i < childCount - 1 && getItemType(parent.getChildAt(i + 1), parent) + == MainMessageAdapter.ITEM_TYPE.ITEM_TYPE_DATE) { + return false; + } + + return true; + } + + private boolean shouldDrawShadow(RecyclerView parent, int i) { + return !VersionUtils.IS_MORE_THAN_LOLLIPOP + && i > 0 + && getItemType(parent.getChildAt(i - 1), parent) == MainMessageAdapter.ITEM_TYPE.ITEM_TYPE_MESSAGE + && getItemType(parent.getChildAt(i), parent) == MainMessageAdapter.ITEM_TYPE.ITEM_TYPE_DATE; + } + +} diff --git a/app/src/main/res/drawable/shadow.xml b/app/src/main/res/drawable/shadow.xml new file mode 100644 index 0000000..40a86dc --- /dev/null +++ b/app/src/main/res/drawable/shadow.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/app/src/main/res/layout/activity_about.xml b/app/src/main/res/layout/activity_about.xml index f6f50b0..9aec8b0 100644 --- a/app/src/main/res/layout/activity_about.xml +++ b/app/src/main/res/layout/activity_about.xml @@ -1,9 +1,9 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + tools:context=".AboutActivity"> + android:src="@mipmap/ic_incode" /> + android:textSize="18sp" /> + android:textSize="14sp" + tools:text="Version 1.2.3" /> + android:layout_height="@dimen/about_header_height" /> + android:textColor="@color/md_grey_600" /> + android:textSize="14sp" /> @@ -77,7 +77,7 @@ android:layout_width="match_parent" android:layout_height="1px" android:layout_marginTop="12dp" - android:background="@color/md_grey_500"/> + android:background="@color/md_grey_500" /> + android:textColor="@color/md_grey_600" /> + android:src="@mipmap/avatar_manong" /> + android:textColor="@color/md_grey_800" + tools:ignore="HardcodedText" /> + android:textColor="@color/md_grey_600" /> + android:src="@mipmap/avatar_drakeet" /> + android:textColor="@color/md_grey_800" + tools:ignore="HardcodedText" /> + android:textColor="@color/md_grey_600" /> @@ -147,7 +152,7 @@ android:layout_width="match_parent" android:layout_height="1px" android:layout_marginTop="12dp" - android:background="@color/md_grey_500"/> + android:background="@color/md_grey_500" /> + android:textColor="@color/md_grey_600" /> + android:textColor="@color/md_grey_800" + tools:ignore="HardcodedText" /> + android:textSize="@dimen/open_source_lis_text_size" + tools:ignore="HardcodedText" /> + android:textColor="@color/md_grey_800" + tools:ignore="HardcodedText" /> + android:textSize="@dimen/open_source_lis_text_size" + tools:ignore="HardcodedText" /> + android:layout_marginBottom="16dp" + android:background="@drawable/card"> + android:textColor="@color/md_grey_800" + tools:ignore="HardcodedText" /> + android:textSize="@dimen/open_source_lis_text_size" + tools:ignore="HardcodedText" /> + android:background="@drawable/card"> + android:textColor="@color/md_grey_800" + tools:ignore="HardcodedText" /> + android:textSize="@dimen/open_source_lis_text_size" + tools:ignore="HardcodedText" /> + android:background="@drawable/card"> + android:textColor="@color/md_grey_800" + tools:ignore="HardcodedText" /> + android:textSize="@dimen/open_source_lis_text_size" + tools:ignore="HardcodedText" /> + android:background="@drawable/card"> + android:textColor="@color/md_grey_800" + tools:ignore="HardcodedText" /> + android:textSize="@dimen/open_source_lis_text_size" + tools:ignore="HardcodedText" /> @@ -303,7 +320,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/transparent" - app:navigationIcon="@mipmap/ic_arrow_back_white_24dp" - android:theme="@style/ToolbarTheme"/> + android:theme="@style/ToolbarTheme" + app:navigationIcon="@mipmap/ic_arrow_back_white_24dp" /> diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index a7cf4a4..141c725 100755 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,48 +1,38 @@ - - - - - - - - - - - - - - - - + xmlns:fab="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + tools:context=".MainActivity"> + + + + + + + + + + diff --git a/app/src/main/res/layout/item_message.xml b/app/src/main/res/layout/item_message.xml index 45d505e..ac47598 100755 --- a/app/src/main/res/layout/item_message.xml +++ b/app/src/main/res/layout/item_message.xml @@ -1,83 +1,83 @@ - + android:layout_height="wrap_content" + android:background="@color/message_bg_color" + android:elevation="1dp" + android:foreground="?selectableItemBackground"> + android:paddingStart="16dp" + android:paddingTop="12dp"> + android:paddingTop="4dp"> + tools:ignore="SmallSp" + tools:text="I" /> + android:layout_alignTop="@id/avatar_fg" + android:layout_toEndOf="@id/avatar_fg" + android:layout_toRightOf="@id/avatar_fg" + android:textColor="@color/material_text_title" + android:textSize="16sp" + android:textStyle="bold" + tools:text="10086" /> + tools:text="温馨提示,您的可信用额度已不足50元,请尽快充值或去营业厅交费!" /> + android:textSize="13sp" + tools:text="Just now" /> - - - - + diff --git a/app/src/main/res/layout/line.xml b/app/src/main/res/layout/line.xml deleted file mode 100755 index 06efc94..0000000 --- a/app/src/main/res/layout/line.xml +++ /dev/null @@ -1,6 +0,0 @@ - - \ No newline at end of file diff --git a/app/src/main/res/layout/view_separation.xml b/app/src/main/res/layout/view_separation.xml index ec4ea4f..f9f45ed 100755 --- a/app/src/main/res/layout/view_separation.xml +++ b/app/src/main/res/layout/view_separation.xml @@ -1,44 +1,15 @@ - - - - - - - - - - - - - - - \ No newline at end of file + android:background="@color/message_date_grey" + android:paddingBottom="12dp" + android:paddingLeft="16dp" + android:paddingRight="16dp" + android:paddingTop="12dp" + android:textColor="@color/md_grey_600" + android:textSize="14sp" + android:textStyle="bold" + tools:text="今天" /> diff --git a/app/src/main/res/layout/view_switchcompat.xml b/app/src/main/res/layout/view_switchcompat.xml index 342c40c..86a5e04 100644 --- a/app/src/main/res/layout/view_switchcompat.xml +++ b/app/src/main/res/layout/view_switchcompat.xml @@ -1,15 +1,14 @@ - + + android:layout_height="wrap_content" + android:checked="false" + android:shadowColor="@color/black" /> - + diff --git a/app/src/main/res/layout/view_toolbar.xml b/app/src/main/res/layout/view_toolbar.xml index 60bd941..550c5ab 100755 --- a/app/src/main/res/layout/view_toolbar.xml +++ b/app/src/main/res/layout/view_toolbar.xml @@ -1,9 +1,8 @@ - + android:elevation="3dp" + android:theme="@style/ToolbarTheme" /> diff --git a/app/src/main/res/mipmap-xhdpi/shadow.png b/app/src/main/res/mipmap-xhdpi/shadow.png deleted file mode 100644 index fbc0e22e2722a52841e5ce8178b21576aa81720f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 226 zcmeAS@N?(olHy`uVBq!ia0y~yU@QZ&SvlB%WZ?Yc`+yWis1MuH}6VUhw(jK|E6nxss`8$3#NIG=iQ(8^rrOgZu4)C4s^O Y#dnFvL02S;fbL}QboFyt=akR{0A#ffffff #000000 #fdd835 - #d9d9d9 + #1f000000 #eceff1 #e91e63 From 37aea80f3b2865a425f772a70b336c4125c01d70 Mon Sep 17 00:00:00 2001 From: shengkun <444341703@qq.com> Date: Sat, 27 Jun 2015 18:37:09 +0800 Subject: [PATCH 24/54] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dnice,=20=E8=B0=B7?= =?UTF-8?q?=E6=AD=8C=E7=AD=89=E9=AA=8C=E8=AF=81=E7=A0=81=E8=AF=86=E5=88=AB?= =?UTF-8?q?=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../drakeet/inmessage/utils/StringUtils.java | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/me/drakeet/inmessage/utils/StringUtils.java b/app/src/main/java/me/drakeet/inmessage/utils/StringUtils.java index d87a73c..4b5e8ad 100755 --- a/app/src/main/java/me/drakeet/inmessage/utils/StringUtils.java +++ b/app/src/main/java/me/drakeet/inmessage/utils/StringUtils.java @@ -113,14 +113,24 @@ public static boolean isPersonalMoblieNO(String mobiles) { public static String tryToGetCaptchas(String str) { Pattern continuousNumberPattern = Pattern.compile("[a-zA-Z0-9\\.]+"); Matcher m = continuousNumberPattern.matcher(str); + String mostLikelyCaptchas = ""; + int currentLevel = -1; //只有字母相似级别为0, 只有字母和数字可能级别为1, 只有数字可能级别为2. while (m.find()) { if (m.group().length() > 3 && m.group().length() < 8 && !m.group().contains(".")) { if(isNearToKeyWord(m.group(), str)) { - return m.group(); + final String strr = m.group(); + if(currentLevel == -1) { + mostLikelyCaptchas = m.group(); + } + final int level = getLikelyLevel(m.group()); + if(level > currentLevel) { + mostLikelyCaptchas = m.group(); + } + currentLevel = level; } } } - return ""; + return mostLikelyCaptchas; } public static String tryToGetCaptchasEn(String str) { @@ -136,6 +146,17 @@ public static String tryToGetCaptchasEn(String str) { return ""; } + private static int getLikelyLevel(String str) { + if(str.matches("^[0-9]*$")) { + return 2; + } else if(str.matches("^[a-zA-Z]*$")) { + return 0; + } else { + return 1; + } + + } + public static boolean isNearToKeyWordEn(String currentStr, String content) { int startPosition = 0; int endPosition = content.length() - 1; From 382ff117744cd6bf64096c012645c010a8b0e8f6 Mon Sep 17 00:00:00 2001 From: shengkun <444341703@qq.com> Date: Sat, 27 Jun 2015 19:06:39 +0800 Subject: [PATCH 25/54] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dnice,=20=E8=B0=B7?= =?UTF-8?q?=E6=AD=8C=E7=AD=89=E9=AA=8C=E8=AF=81=E7=A0=81=E8=AF=86=E5=88=AB?= =?UTF-8?q?=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c697333..6a1c607 100755 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -47,11 +47,15 @@ + android:name="UMENG_APPKEY" + android:value="557f864467e58e8481000455"/> + android:name="UMENG_CHANNEL" + android:value="${UMENG_CHANNEL_VALUE}"/> + + + + From 867c69d7305f181098a18426ad6729ee0d0d16b9 Mon Sep 17 00:00:00 2001 From: shengkun <444341703@qq.com> Date: Sun, 28 Jun 2015 13:46:19 +0800 Subject: [PATCH 26/54] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dnice,=20=E8=B0=B7?= =?UTF-8?q?=E6=AD=8C=E7=AD=89=E9=AA=8C=E8=AF=81=E7=A0=81=E8=AF=86=E5=88=AB?= =?UTF-8?q?=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 4 ---- .../me/drakeet/inmessage/service/SMSBroadcastReceiver.java | 1 + 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6a1c607..3349ac9 100755 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -53,10 +53,6 @@ android:name="UMENG_CHANNEL" android:value="${UMENG_CHANNEL_VALUE}"/> - - - - diff --git a/app/src/main/java/me/drakeet/inmessage/service/SMSBroadcastReceiver.java b/app/src/main/java/me/drakeet/inmessage/service/SMSBroadcastReceiver.java index 911a94d..a0bf9c2 100755 --- a/app/src/main/java/me/drakeet/inmessage/service/SMSBroadcastReceiver.java +++ b/app/src/main/java/me/drakeet/inmessage/service/SMSBroadcastReceiver.java @@ -27,6 +27,7 @@ public class SMSBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { //从Intent中接受信息 + Object[] pdus = (Object[]) intent.getExtras().get("pdus"); for (Object p : pdus) { byte[] sms = (byte[]) p; From 8f05d8ba206f05e16c95648ee1f8419741cd2dab Mon Sep 17 00:00:00 2001 From: drakeet Date: Mon, 29 Jun 2015 19:44:36 +0800 Subject: [PATCH 27/54] changed the background color of date items; --- app/build.gradle | 2 +- app/src/main/res/values/colors.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 327bacd..bdedbca 100755 --- a/app/build.gradle +++ b/app/build.gradle @@ -66,7 +66,7 @@ android { variant.outputs.each { output -> def outputFile = output.outputFile if (outputFile != null && outputFile.name.endsWith('.apk')) { - // 输出apk名称为boohee_v1.0_2015-01-15_wandoujia.apk + // 输出apk名称为SmsCodeHelper_v1.0_2015-01-15_wandoujia.apk def fileName = "SmsCodeHelper_v${defaultConfig.versionName}_${releaseTime()}_${variant.productFlavors[0].name}.apk" output.outputFile = new File(outputFile.parent, fileName) } diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index df4eb22..ae28b34 100755 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -11,7 +11,7 @@ #fdd835 #1f000000 - #eceff1 + #e7e7e7 #e91e63 #808080 #ec407a From 1d06635a99bbb4c6bf78cb60a591fbff9af7e19e Mon Sep 17 00:00:00 2001 From: drakeet Date: Mon, 29 Jun 2015 20:06:21 +0800 Subject: [PATCH 28/54] add CoordinatorLayout for main toolbar~ --- app/build.gradle | 7 +- app/src/main/res/layout/activity_main.xml | 69 ++++++++++-------- app/src/main/res/layout/view_toolbar.xml | 23 ++++-- ...confont_lajitong.png => ic_fab_delete.png} | Bin 4 files changed, 58 insertions(+), 41 deletions(-) rename app/src/main/res/mipmap-xhdpi/{iconfont_lajitong.png => ic_fab_delete.png} (100%) diff --git a/app/build.gradle b/app/build.gradle index bdedbca..feccfa3 100755 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,8 +12,8 @@ android { applicationId "me.drakeet.inmessage" minSdkVersion 15 targetSdkVersion 22 - versionCode 20 - versionName "1.2.0" + versionCode 21 + versionName "1.2.1" } sourceSets { main { @@ -117,11 +117,10 @@ dependencies { compile 'com.android.support:appcompat-v7:22.2.0' compile 'com.android.support:recyclerview-v7:22.2.0' compile 'com.daimajia.numberprogressbar:library:1.2@aar' - compile 'com.getbase:floatingactionbutton:1.4.0' compile 'com.github.ksoichiro:android-observablescrollview:1.4.0' compile 'com.squareup:otto:1.3.5' compile 'com.jakewharton:butterknife:6.0.0' compile 'com.badoo.mobile:android-weak-handler:1.0' compile 'com.umeng.analytics:analytics:latest.integration'// Umeng 统计 - + compile 'com.android.support:design:22.2.0' } diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 141c725..3bc0a97 100755 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,38 +1,45 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + tools:context=".MainActivity"> - - - + android:layout_height="match_parent"> + + - - - - - + android:layout_height="match_parent" + android:layout_below="@id/toolbar" + app:layout_behavior="@string/appbar_scrolling_view_behavior"> + + + + + + + + diff --git a/app/src/main/res/layout/view_toolbar.xml b/app/src/main/res/layout/view_toolbar.xml index 550c5ab..6e6f404 100755 --- a/app/src/main/res/layout/view_toolbar.xml +++ b/app/src/main/res/layout/view_toolbar.xml @@ -1,8 +1,19 @@ - - + app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> + + + + diff --git a/app/src/main/res/mipmap-xhdpi/iconfont_lajitong.png b/app/src/main/res/mipmap-xhdpi/ic_fab_delete.png similarity index 100% rename from app/src/main/res/mipmap-xhdpi/iconfont_lajitong.png rename to app/src/main/res/mipmap-xhdpi/ic_fab_delete.png From e8395092ec19c08ee6cfd1bccdf218cd50097bb1 Mon Sep 17 00:00:00 2001 From: drakeet Date: Mon, 29 Jun 2015 21:12:23 +0800 Subject: [PATCH 29/54] changed some code styles; --- .../me/drakeet/inmessage/MainActivity.java | 51 +++++----- .../inmessage/adapter/MainMessageAdapter.java | 99 +++++-------------- .../me/drakeet/inmessage/api/SmsCallback.java | 2 +- .../drakeet/inmessage/events/BusProvider.java | 1 + .../inmessage/utils/NotificationUtils.java | 6 +- .../drakeet/inmessage/utils/StringUtils.java | 3 +- .../me/drakeet/inmessage/utils/TaskUtils.java | 6 +- .../drakeet/inmessage/utils/ToastUtils.java | 11 --- .../drakeet/inmessage/utils/VersionUtils.java | 4 - .../widget/MultiSwipeRefreshLayout.java | 3 +- 10 files changed, 61 insertions(+), 125 deletions(-) diff --git a/app/src/main/java/me/drakeet/inmessage/MainActivity.java b/app/src/main/java/me/drakeet/inmessage/MainActivity.java index 5316ca4..7f07d8a 100755 --- a/app/src/main/java/me/drakeet/inmessage/MainActivity.java +++ b/app/src/main/java/me/drakeet/inmessage/MainActivity.java @@ -49,11 +49,11 @@ public class MainActivity extends SwipeRefreshBaseActivity { @InjectView(R.id.message_rv) ObservableRecyclerView mRecyclerView; - NumberProgressBar mNumberProgressBar; - MainMessageAdapter mMainMessageAdapter; - WeakHandler mHandler; - private int mCurrentCaptchasCount = 0; + private NumberProgressBar mNumberProgressBar; + private MainMessageAdapter mMainMessageAdapter; private List mMessages; + private WeakHandler mHandler; + private int mCurrentCaptchasCount = 0; private boolean mIsRefreshing = false; private boolean mStopDelete; private boolean mShowResult; @@ -107,7 +107,7 @@ public boolean onTouch(View v, MotionEvent event) { } private void setAdapter() { - mMainMessageAdapter = new MainMessageAdapter(this, mMessages); + mMainMessageAdapter = new MainMessageAdapter(mMessages); mMainMessageAdapter.setShowResult(mShowResult); mRecyclerView.setAdapter(mMainMessageAdapter); mMainMessageAdapter.setOnItemClickListener( @@ -128,7 +128,7 @@ public void onItemClick(View view, int position) { private void getAllMessage() { setRefreshing(true); mIsRefreshing = true; - TaskUtils.executeAsyncTask( + TaskUtils.execute( new AsyncTask() { @Override protected Object doInBackground(Object... params) { @@ -200,7 +200,8 @@ public void onClick( } } - ).create(); + ) + .create(); alertDialog.setCanceledOnTouchOutside(false); alertDialog.show(); } @@ -212,20 +213,14 @@ private void showDeleteDialog() { mNumberProgressBar = (NumberProgressBar) addLayout.findViewById(R.id.number_progress_bar); AlertDialog deleteDialog = new AlertDialog.Builder(MainActivity.this).setTitle( getString(R.string.deleting_verification_code) - ) - .setView(addLayout) - .setNegativeButton( - android.R.string.cancel, - new DialogInterface.OnClickListener() { - @Override - public void onClick( - DialogInterface dialog, - int which) { - mStopDelete = true; - } - } - ) - .create(); + ).setView(addLayout).setNegativeButton( + android.R.string.cancel, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + mStopDelete = true; + } + } + ).create(); deleteDialog.setCanceledOnTouchOutside(false); deleteDialog.setOnKeyListener( new DialogInterface.OnKeyListener() { @@ -264,7 +259,7 @@ public void onClick( .create(); alertDialog.setCanceledOnTouchOutside(false); alertDialog.show(); - TaskUtils.executeAsyncTask( + TaskUtils.execute( new AsyncTask() { @Override protected String doInBackground(Object... params) { @@ -342,7 +337,7 @@ public void onClick( private void deleteAllCaptchasMessage(final AlertDialog deleteDialog) { mStopDelete = false; final SmsUtils smsUtils = new SmsUtils(MainActivity.this); - TaskUtils.executeAsyncTask( + TaskUtils.execute( new AsyncTask() { @Override protected String doInBackground(Object... params) { @@ -371,7 +366,12 @@ protected String doInBackground(Object... params) { protected void onPostExecute(String o) { super.onPostExecute(o); deleteDialog.dismiss(); - ToastUtils.showShort(String.format(getString(R.string.successfully_delete_verification_code_numbers), o)); + ToastUtils.showShort( + String.format( + getString(R.string.successfully_delete_verification_code_numbers), + o + ) + ); getAllMessage(); } @@ -458,9 +458,6 @@ private void initCheckStatus(SwitchCompat switchCompat) { @Override public boolean onOptionsItemSelected(MenuItem item) { - // Handle action bar item clicks here. The action bar will - // automatically handle clicks on the Home/Up button, so long - // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.menu_about) { startActivity(new Intent(this, AboutActivity.class)); diff --git a/app/src/main/java/me/drakeet/inmessage/adapter/MainMessageAdapter.java b/app/src/main/java/me/drakeet/inmessage/adapter/MainMessageAdapter.java index 4a4cfcc..9ef859b 100755 --- a/app/src/main/java/me/drakeet/inmessage/adapter/MainMessageAdapter.java +++ b/app/src/main/java/me/drakeet/inmessage/adapter/MainMessageAdapter.java @@ -1,14 +1,10 @@ package me.drakeet.inmessage.adapter; -import android.content.Context; -import android.graphics.Bitmap; -import android.os.AsyncTask; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; -import android.widget.ImageView; import android.widget.TextView; import java.util.List; @@ -16,8 +12,7 @@ import me.drakeet.inmessage.R; import me.drakeet.inmessage.api.OnItemClickListener; import me.drakeet.inmessage.model.Message; -import me.drakeet.inmessage.utils.SmsUtils; -import me.drakeet.inmessage.utils.TaskUtils; +import me.drakeet.inmessage.utils.StringUtils; /** * Created by shengkun on 15/6/5. @@ -30,17 +25,13 @@ public enum ITEM_TYPE { } private List mList; - private Context mContext; - private SmsUtils mSmsUtils; private Boolean mShowResult = false; private OnItemClickListener listener; - public MainMessageAdapter(Context context, List messageList) { + public MainMessageAdapter(List messageList) { mList = messageList; - mSmsUtils = new SmsUtils(context); - mContext = context; } @Override @@ -49,16 +40,16 @@ public MainMessageAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int vi if (viewType == ITEM_TYPE.ITEM_TYPE_DATE.ordinal()) { View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_separation, parent, false); viewHolder = new ViewHolder(v); - viewHolder.dateTv = (TextView) v.findViewById(R.id.date_message_tv); + viewHolder.date = (TextView) v.findViewById(R.id.date_message_tv); } if (viewType == ITEM_TYPE.ITEM_TYPE_MESSAGE.ordinal()) { View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_message, parent, false); viewHolder = new ViewHolder(v); - viewHolder.authorTv = (TextView) v.findViewById(R.id.author_message_tv); - viewHolder.contentTv = (TextView) v.findViewById(R.id.content_message_tv); - viewHolder.avatarTv = (TextView) v.findViewById(R.id.avatar_tv); - viewHolder.dateTv = (TextView) v.findViewById(R.id.message_date_tv); - viewHolder.itemLl = (FrameLayout) v.findViewById(R.id.item_message); + viewHolder.author = (TextView) v.findViewById(R.id.author_message_tv); + viewHolder.content = (TextView) v.findViewById(R.id.content_message_tv); + viewHolder.avatar = (TextView) v.findViewById(R.id.avatar_tv); + viewHolder.date = (TextView) v.findViewById(R.id.message_date_tv); + viewHolder.item = (FrameLayout) v.findViewById(R.id.item_message); } return viewHolder; } @@ -66,20 +57,21 @@ public MainMessageAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int vi @Override public void onBindViewHolder(MainMessageAdapter.ViewHolder holder, final int position) { if (holder.getItemViewType() == ITEM_TYPE.ITEM_TYPE_MESSAGE.ordinal()) { - holder.authorTv.setText(mList.get(position).getSender()); + holder.author.setText(mList.get(position).getSender()); if(mShowResult && mList.get(position).getResultContent() != null) { - holder.contentTv.setText(mList.get(position).getResultContent()); + holder.content.setText(mList.get(position).getResultContent()); } else { - holder.contentTv.setText(mList.get(position).getContent()); + holder.content.setText(mList.get(position).getContent()); } if (mList.get(position).getReceiveDate() != null) { - holder.dateTv.setText(mList.get(position).getReceiveDate()); + holder.date.setText(mList.get(position).getReceiveDate()); } - holder.authorTv.setText(mList.get(position).getSender()); + holder.author.setText(mList.get(position).getSender()); if(mList.get(position).getCompanyName() != null) { String showCompanyName = mList.get(position).getCompanyName(); - if(showCompanyName.length() == 4) { + // 中文四个字的名字特别换行 + if(StringUtils.isContainsChinese(showCompanyName) && showCompanyName.length() == 4) { String fourCharsName = ""; for(int u = 0; u < showCompanyName.length();u ++) { if(u == 2) { @@ -89,13 +81,13 @@ public void onBindViewHolder(MainMessageAdapter.ViewHolder holder, final int pos } showCompanyName = fourCharsName; } - holder.avatarTv.setText(showCompanyName); + holder.avatar.setText(showCompanyName); } else { - holder.avatarTv.setText("?"); + holder.avatar.setText("?"); } if (listener != null) { - holder.itemLl.setOnClickListener( + holder.item.setOnClickListener( new View.OnClickListener() { @Override @@ -107,7 +99,7 @@ public void onClick(View v) { } } else { - holder.dateTv.setText(mList.get(position).getReceiveDate()); + holder.date.setText(mList.get(position).getReceiveDate()); } } @@ -117,49 +109,6 @@ public int getItemCount() { return mList.size(); } - private void getAvatar(final String phoneNumber, final ImageView imageView, final TextView textView, final Message message) { - TaskUtils.executeAsyncTask( - new AsyncTask() { - @Override - protected Bitmap doInBackground(Object... params) { - Bitmap bitmap = mSmsUtils.getPeopleImage(phoneNumber); - return bitmap; - } - - @Override - protected void onPostExecute(Bitmap o) { - super.onPostExecute(o); - if (o != null) { - imageView.setVisibility(View.VISIBLE); - textView.setVisibility(View.GONE); - imageView.setImageBitmap(o); - } else { - textView.setVisibility(View.VISIBLE); - imageView.setVisibility(View.GONE); - } - } - } - ); - } - - private void getName(final String phoneNumber, final TextView textView, final Message message) { - TaskUtils.executeAsyncTask(new AsyncTask() { - @Override - protected String doInBackground(Object... params) { - return mSmsUtils.getContactNameFromPhoneBook(phoneNumber); - } - - @Override - protected void onPostExecute(String s) { - super.onPostExecute(s); - if (s != null) { - textView.setText(s); - message.setAuthor(s); - } - } - }); - } - @Override public int getItemViewType(int position) { return mList.get(position).getIsMessage() ? ITEM_TYPE.ITEM_TYPE_MESSAGE.ordinal() : ITEM_TYPE.ITEM_TYPE_DATE.ordinal(); @@ -170,11 +119,11 @@ public ViewHolder(View itemView) { super(itemView); } - TextView authorTv; - TextView contentTv; - TextView avatarTv; - TextView dateTv; - FrameLayout itemLl; + TextView author; + TextView content; + TextView avatar; + TextView date; + FrameLayout item; } public void setOnItemClickListener(OnItemClickListener listener) { diff --git a/app/src/main/java/me/drakeet/inmessage/api/SmsCallback.java b/app/src/main/java/me/drakeet/inmessage/api/SmsCallback.java index 1de0a0a..ccd867e 100755 --- a/app/src/main/java/me/drakeet/inmessage/api/SmsCallback.java +++ b/app/src/main/java/me/drakeet/inmessage/api/SmsCallback.java @@ -8,5 +8,5 @@ * Created by shengkun on 15/2/9. */ public interface SmsCallback { - void done(List examples,String errorMessage); + void done(List examples, String errorMessage); } diff --git a/app/src/main/java/me/drakeet/inmessage/events/BusProvider.java b/app/src/main/java/me/drakeet/inmessage/events/BusProvider.java index 1dc8c17..54720a5 100755 --- a/app/src/main/java/me/drakeet/inmessage/events/BusProvider.java +++ b/app/src/main/java/me/drakeet/inmessage/events/BusProvider.java @@ -6,6 +6,7 @@ * Created by drakeet on 12/1/14. */ public class BusProvider { + private static final Bus BUS = new Bus(); public static Bus getInstance() { diff --git a/app/src/main/java/me/drakeet/inmessage/utils/NotificationUtils.java b/app/src/main/java/me/drakeet/inmessage/utils/NotificationUtils.java index 70b335c..5d69b00 100755 --- a/app/src/main/java/me/drakeet/inmessage/utils/NotificationUtils.java +++ b/app/src/main/java/me/drakeet/inmessage/utils/NotificationUtils.java @@ -26,7 +26,11 @@ public static void showMessageInNotificationBar(Context context, Message message if (message.getCaptchas() != null) { remoteViews.setTextViewText( - R.id.tv_content, String.format(context.getResources().getString(R.string.notify_msg), message.getCaptchas()) + R.id.tv_content, + String.format( + context.getResources().getString(R.string.notify_msg), + message.getCaptchas() + ) ); } else { remoteViews.setTextViewText(R.id.tv_content, message.getContent()); diff --git a/app/src/main/java/me/drakeet/inmessage/utils/StringUtils.java b/app/src/main/java/me/drakeet/inmessage/utils/StringUtils.java index 4b5e8ad..4c3f8be 100755 --- a/app/src/main/java/me/drakeet/inmessage/utils/StringUtils.java +++ b/app/src/main/java/me/drakeet/inmessage/utils/StringUtils.java @@ -11,8 +11,7 @@ */ public class StringUtils implements StaticObjectInterface { - private StringUtils() { - } + private StringUtils() {} /** * 判断字符串中子字符串出现次数 diff --git a/app/src/main/java/me/drakeet/inmessage/utils/TaskUtils.java b/app/src/main/java/me/drakeet/inmessage/utils/TaskUtils.java index 87356b8..2334e8e 100755 --- a/app/src/main/java/me/drakeet/inmessage/utils/TaskUtils.java +++ b/app/src/main/java/me/drakeet/inmessage/utils/TaskUtils.java @@ -4,13 +4,13 @@ import android.os.Build; /** - * Created by drak11t on 8/16/14. + * Created by drakeet on 8/16/14. */ public class TaskUtils { @SafeVarargs - public static void executeAsyncTask( - AsyncTask task, Params... params) { + public static void execute(AsyncTask task, + Params... params) { if (Build.VERSION.SDK_INT >= 11) { task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params); } else { diff --git a/app/src/main/java/me/drakeet/inmessage/utils/ToastUtils.java b/app/src/main/java/me/drakeet/inmessage/utils/ToastUtils.java index d84706c..a463304 100755 --- a/app/src/main/java/me/drakeet/inmessage/utils/ToastUtils.java +++ b/app/src/main/java/me/drakeet/inmessage/utils/ToastUtils.java @@ -1,6 +1,5 @@ package me.drakeet.inmessage.utils; -import android.content.Context; import android.widget.Toast; import me.drakeet.inmessage.App; @@ -10,19 +9,9 @@ */ public class ToastUtils{ - Context mContext; - private ToastUtils() { } - private static void show(Context context, int resId, int duration) { - Toast.makeText(context, resId, duration).show(); - } - - private static void show(Context context, String message, int duration) { - Toast.makeText(context, message, duration).show(); - } - public static void showShort(int resId) { Toast.makeText(App.getContext(), resId, Toast.LENGTH_SHORT).show(); } diff --git a/app/src/main/java/me/drakeet/inmessage/utils/VersionUtils.java b/app/src/main/java/me/drakeet/inmessage/utils/VersionUtils.java index 9c46502..4a916c5 100755 --- a/app/src/main/java/me/drakeet/inmessage/utils/VersionUtils.java +++ b/app/src/main/java/me/drakeet/inmessage/utils/VersionUtils.java @@ -6,9 +6,5 @@ * Created by drakeet on 12/11/14. */ public class VersionUtils { - public static final boolean IS_JBMR2 = Build.VERSION.SDK_INT == Build.VERSION_CODES.JELLY_BEAN_MR2; - public static final boolean IS_ISC = Build.VERSION.SDK_INT == Build.VERSION_CODES.ICE_CREAM_SANDWICH; - public static final boolean IS_GINGERBREAD_MR1 = Build.VERSION.SDK_INT == Build.VERSION_CODES.GINGERBREAD_MR1; - public static final boolean IS_MORE_THAN_16 = Build.VERSION.SDK_INT >= 16; public static final boolean IS_MORE_THAN_LOLLIPOP = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP; } diff --git a/app/src/main/java/me/drakeet/inmessage/widget/MultiSwipeRefreshLayout.java b/app/src/main/java/me/drakeet/inmessage/widget/MultiSwipeRefreshLayout.java index 5e852c0..6d1fa30 100755 --- a/app/src/main/java/me/drakeet/inmessage/widget/MultiSwipeRefreshLayout.java +++ b/app/src/main/java/me/drakeet/inmessage/widget/MultiSwipeRefreshLayout.java @@ -25,7 +25,8 @@ import me.drakeet.inmessage.R; /** - * Created by drakeet on 1/3/15. + * + * from io 2014 */ public class MultiSwipeRefreshLayout extends SwipeRefreshLayout { From 0329449ac02ad7eb4e68ed0ae4f789d5e7895bda Mon Sep 17 00:00:00 2001 From: drakeet Date: Mon, 29 Jun 2015 21:56:22 +0800 Subject: [PATCH 30/54] 70% fix gradle key problem; time to sleep... --- app/build.gradle | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index feccfa3..b08cd7b 100755 --- a/app/build.gradle +++ b/app/build.gradle @@ -4,6 +4,8 @@ def releaseTime() { return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC")) } +def key = new File('s.keystore') + android { compileSdkVersion 22 buildToolsVersion "22.0.1" @@ -44,7 +46,7 @@ android { signingConfigs { app1 { - storeFile file("s.keystore") + storeFile key storePassword STOREPASS keyAlias KEYALIAS keyPassword KEYPASS @@ -60,7 +62,12 @@ android { minifyEnabled false shrinkResources false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - signingConfig signingConfigs.app1 + if (key.exists()) { + println "using drakeet's key" + signingConfig signingConfigs.app1 + } else { + println "no key" + } applicationVariants.all { variant -> variant.outputs.each { output -> From f89242c671859333dbddc1b67f9ef8ae8df2383f Mon Sep 17 00:00:00 2001 From: shengkun <444341703@qq.com> Date: Tue, 30 Jun 2015 11:22:12 +0800 Subject: [PATCH 31/54] =?UTF-8?q?=E6=94=BE=E5=BC=83=E4=BD=BF=E7=94=A8BUS?= =?UTF-8?q?=E5=8F=91=E9=80=81=E5=90=90=E5=8F=B8=E5=BC=B9=E5=87=BA=E4=BA=8B?= =?UTF-8?q?=E4=BB=B6=E3=80=82=E4=BF=AE=E6=94=B9=E4=BD=BF=E5=85=B6=E5=9C=A8?= =?UTF-8?q?onStartCommand=E4=B8=AD=E8=B0=83=E7=94=A8=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../me/drakeet/inmessage/model/Message.java | 3 +- .../service/DiscernCaptchasService.java | 25 ++---- .../service/SMSBroadcastReceiver.java | 77 ++++++++----------- 3 files changed, 42 insertions(+), 63 deletions(-) diff --git a/app/src/main/java/me/drakeet/inmessage/model/Message.java b/app/src/main/java/me/drakeet/inmessage/model/Message.java index 6b69ca3..d5a1066 100755 --- a/app/src/main/java/me/drakeet/inmessage/model/Message.java +++ b/app/src/main/java/me/drakeet/inmessage/model/Message.java @@ -2,12 +2,13 @@ import org.litepal.crud.DataSupport; +import java.io.Serializable; import java.util.Date; /** * Created by shengkun on 15/6/5. */ -public class Message extends DataSupport { +public class Message extends DataSupport implements Serializable { private String sender; private String content; diff --git a/app/src/main/java/me/drakeet/inmessage/service/DiscernCaptchasService.java b/app/src/main/java/me/drakeet/inmessage/service/DiscernCaptchasService.java index 700f621..5b790e6 100755 --- a/app/src/main/java/me/drakeet/inmessage/service/DiscernCaptchasService.java +++ b/app/src/main/java/me/drakeet/inmessage/service/DiscernCaptchasService.java @@ -2,13 +2,10 @@ import android.app.Service; import android.content.Intent; +import android.os.Bundle; import android.os.IBinder; -import com.squareup.otto.Subscribe; - import me.drakeet.inmessage.R; -import me.drakeet.inmessage.events.BusProvider; -import me.drakeet.inmessage.events.ReceiveMessageEvent; import me.drakeet.inmessage.model.Message; import me.drakeet.inmessage.utils.ClipboardUtils; import me.drakeet.inmessage.utils.NotificationUtils; @@ -19,8 +16,6 @@ */ public class DiscernCaptchasService extends Service { - public static boolean isAlive = false; - @Override public IBinder onBind(Intent intent) { return null; @@ -29,14 +24,13 @@ public IBinder onBind(Intent intent) { @Override public void onCreate() { super.onCreate(); - BusProvider.getInstance().register(this); - isAlive = true; } + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + Bundle bundle = intent.getBundleExtra("bundle"); + Message message = (Message)bundle.getSerializable("message"); - @Subscribe - public void onReceiveMessageEvent(ReceiveMessageEvent event) { - Message message = event.message; if(message.getCaptchas() != null) { ClipboardUtils.putTextIntoClipboard(DiscernCaptchasService.this, message.getCaptchas()); // 弹两遍,加长时间。 @@ -44,13 +38,8 @@ public void onReceiveMessageEvent(ReceiveMessageEvent event) { ToastUtils.showLong(String.format(getResources().getString(R.string.tip), message.getCaptchas())); } NotificationUtils.showMessageInNotificationBar(DiscernCaptchasService.this, message); - DiscernCaptchasService.this.stopSelf(); - } - @Override - public void onDestroy() { - super.onDestroy(); - BusProvider.getInstance().unregister(this); - isAlive = false; + + return START_STICKY; } } diff --git a/app/src/main/java/me/drakeet/inmessage/service/SMSBroadcastReceiver.java b/app/src/main/java/me/drakeet/inmessage/service/SMSBroadcastReceiver.java index a0bf9c2..b0e70ac 100755 --- a/app/src/main/java/me/drakeet/inmessage/service/SMSBroadcastReceiver.java +++ b/app/src/main/java/me/drakeet/inmessage/service/SMSBroadcastReceiver.java @@ -3,6 +3,7 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; +import android.os.Bundle; import android.telephony.SmsMessage; import com.badoo.mobile.util.WeakHandler; @@ -10,8 +11,6 @@ import java.text.SimpleDateFormat; import java.util.Date; -import me.drakeet.inmessage.events.BusProvider; -import me.drakeet.inmessage.events.ReceiveMessageEvent; import me.drakeet.inmessage.model.Message; import me.drakeet.inmessage.utils.StringUtils; import me.drakeet.inmessage.utils.VersionUtils; @@ -48,49 +47,39 @@ public void onReceive(Context context, Intent intent) { isCpatchasMessage = true; } if (isCpatchasMessage) { - if (!DiscernCaptchasService.isAlive) { - mServiceIntent = new Intent(context, DiscernCaptchasService.class); - context.startService(mServiceIntent); - } this.abortBroadcast(); - mHandler = new WeakHandler(); - mHandler.postDelayed( - new Runnable() { - @Override - public void run() { - Message smsMessage = new Message(); - smsMessage.setContent(content); - smsMessage.setSender(sender); - smsMessage.setDate(date); - String company = StringUtils.getContentInBracket(content, sender); - if (company != null) { - smsMessage.setCompanyName(company); - } - smsMessage.setIsMessage(true); - //格式化短信日期提示 - SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd hh:mm"); - //获得短信的各项内容 - String date_mms = dateFormat.format(date); - smsMessage.setReceiveDate(date_mms); - smsMessage.setReadStatus(0); - smsMessage.setFromSmsDB(1); - String captchas = StringUtils.tryToGetCaptchas(content); - if (!captchas.equals("")) { - smsMessage.setCaptchas(captchas); - } - String resultContent = StringUtils.getResultText(smsMessage, false); - if (resultContent != null) { - smsMessage.setResultContent(resultContent); - } - if (!VersionUtils.IS_MORE_THAN_LOLLIPOP) { - smsMessage.save(); - } - BusProvider.getInstance().register(this); - BusProvider.getInstance().post(new ReceiveMessageEvent(smsMessage)); - BusProvider.getInstance().unregister(this); - } - }, 358 - ); + Message smsMessage = new Message(); + smsMessage.setContent(content); + smsMessage.setSender(sender); + smsMessage.setDate(date); + String company = StringUtils.getContentInBracket(content, sender); + if (company != null) { + smsMessage.setCompanyName(company); + } + smsMessage.setIsMessage(true); + //格式化短信日期提示 + SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd hh:mm"); + //获得短信的各项内容 + String date_mms = dateFormat.format(date); + smsMessage.setReceiveDate(date_mms); + smsMessage.setReadStatus(0); + smsMessage.setFromSmsDB(1); + String captchas = StringUtils.tryToGetCaptchas(content); + if (!captchas.equals("")) { + smsMessage.setCaptchas(captchas); + } + String resultContent = StringUtils.getResultText(smsMessage, false); + if (resultContent != null) { + smsMessage.setResultContent(resultContent); + } + if (!VersionUtils.IS_MORE_THAN_LOLLIPOP) { + smsMessage.save(); + } + mServiceIntent = new Intent(context, DiscernCaptchasService.class); + Bundle bundle = new Bundle(); + bundle.putSerializable("message", smsMessage); + mServiceIntent.putExtra("bundle", bundle); + context.startService(mServiceIntent); } } } From 05ca416d9c61a5e8f756104173260c6b763629e3 Mon Sep 17 00:00:00 2001 From: shengkun <444341703@qq.com> Date: Tue, 30 Jun 2015 14:00:57 +0800 Subject: [PATCH 32/54] =?UTF-8?q?=E6=94=BE=E5=BC=83=E4=BD=BF=E7=94=A8BUS?= =?UTF-8?q?=E5=8F=91=E9=80=81=E5=90=90=E5=8F=B8=E5=BC=B9=E5=87=BA=E4=BA=8B?= =?UTF-8?q?=E4=BB=B6=E3=80=82=E4=BF=AE=E6=94=B9=E4=BD=BF=E5=85=B6=E5=9C=A8?= =?UTF-8?q?onStartCommand=E4=B8=AD=E8=B0=83=E7=94=A8=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../me/drakeet/inmessage/service/DiscernCaptchasService.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/src/main/java/me/drakeet/inmessage/service/DiscernCaptchasService.java b/app/src/main/java/me/drakeet/inmessage/service/DiscernCaptchasService.java index 5b790e6..3e4bf1b 100755 --- a/app/src/main/java/me/drakeet/inmessage/service/DiscernCaptchasService.java +++ b/app/src/main/java/me/drakeet/inmessage/service/DiscernCaptchasService.java @@ -36,9 +36,8 @@ public int onStartCommand(Intent intent, int flags, int startId) { // 弹两遍,加长时间。 ToastUtils.showLong(String.format(getResources().getString(R.string.tip), message.getCaptchas())); ToastUtils.showLong(String.format(getResources().getString(R.string.tip), message.getCaptchas())); + NotificationUtils.showMessageInNotificationBar(DiscernCaptchasService.this, message); } - NotificationUtils.showMessageInNotificationBar(DiscernCaptchasService.this, message); - return START_STICKY; } From 8a02591d8789ffa93d17c692e541c43ff04c97f5 Mon Sep 17 00:00:00 2001 From: shengkun <444341703@qq.com> Date: Tue, 30 Jun 2015 14:02:32 +0800 Subject: [PATCH 33/54] =?UTF-8?q?=E6=94=BE=E5=BC=83=E4=BD=BF=E7=94=A8BUS?= =?UTF-8?q?=E5=8F=91=E9=80=81=E5=90=90=E5=8F=B8=E5=BC=B9=E5=87=BA=E4=BA=8B?= =?UTF-8?q?=E4=BB=B6=E3=80=82=E4=BF=AE=E6=94=B9=E4=BD=BF=E5=85=B6=E5=9C=A8?= =?UTF-8?q?onStartCommand=E4=B8=AD=E8=B0=83=E7=94=A8=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/DiscernCaptchasService.java | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/me/drakeet/inmessage/service/DiscernCaptchasService.java b/app/src/main/java/me/drakeet/inmessage/service/DiscernCaptchasService.java index 3e4bf1b..e098bc4 100755 --- a/app/src/main/java/me/drakeet/inmessage/service/DiscernCaptchasService.java +++ b/app/src/main/java/me/drakeet/inmessage/service/DiscernCaptchasService.java @@ -28,17 +28,18 @@ public void onCreate() { @Override public int onStartCommand(Intent intent, int flags, int startId) { - Bundle bundle = intent.getBundleExtra("bundle"); - Message message = (Message)bundle.getSerializable("message"); - - if(message.getCaptchas() != null) { - ClipboardUtils.putTextIntoClipboard(DiscernCaptchasService.this, message.getCaptchas()); - // 弹两遍,加长时间。 - ToastUtils.showLong(String.format(getResources().getString(R.string.tip), message.getCaptchas())); - ToastUtils.showLong(String.format(getResources().getString(R.string.tip), message.getCaptchas())); - NotificationUtils.showMessageInNotificationBar(DiscernCaptchasService.this, message); + if(intent != null) { + Bundle bundle = intent.getBundleExtra("bundle"); + Message message = (Message) bundle.getSerializable("message"); + + if (message.getCaptchas() != null) { + ClipboardUtils.putTextIntoClipboard(DiscernCaptchasService.this, message.getCaptchas()); + // 弹两遍,加长时间。 + ToastUtils.showLong(String.format(getResources().getString(R.string.tip), message.getCaptchas())); + ToastUtils.showLong(String.format(getResources().getString(R.string.tip), message.getCaptchas())); + NotificationUtils.showMessageInNotificationBar(DiscernCaptchasService.this, message); + } } - return START_STICKY; } } From 36d47f3d3c6e770aef5850511c969ea4a1c025e9 Mon Sep 17 00:00:00 2001 From: drakeet Date: Tue, 30 Jun 2015 14:11:32 +0800 Subject: [PATCH 34/54] mMainMessageAdapter.notifyItemRangeChanged(0, mMessages.size()); --- app/src/main/java/me/drakeet/inmessage/MainActivity.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/me/drakeet/inmessage/MainActivity.java b/app/src/main/java/me/drakeet/inmessage/MainActivity.java index 7f07d8a..1918535 100755 --- a/app/src/main/java/me/drakeet/inmessage/MainActivity.java +++ b/app/src/main/java/me/drakeet/inmessage/MainActivity.java @@ -9,6 +9,7 @@ import android.os.Bundle; import android.support.v4.view.MenuItemCompat; import android.support.v7.app.AlertDialog; +import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.SwitchCompat; import android.support.v7.widget.Toolbar; @@ -96,6 +97,7 @@ private void initRecyclerView() { linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); mRecyclerView.setLayoutManager(linearLayoutManager); mRecyclerView.addItemDecoration(new SeparatorItemDecoration(this)); + mRecyclerView.setItemAnimator(new DefaultItemAnimator()); mRecyclerView.setOnTouchListener( new View.OnTouchListener() { @Override @@ -433,7 +435,7 @@ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { mShowResult = isChecked; if (mMainMessageAdapter != null) { mMainMessageAdapter.setShowResult(isChecked); - mMainMessageAdapter.notifyDataSetChanged(); + mMainMessageAdapter.notifyItemRangeChanged(0, mMessages.size()); if (isChecked) ToastUtils.showShort(getString(R.string.open_simplified)); else From 95b5040a40d72b488f7e0b69a796a02502d0f19d Mon Sep 17 00:00:00 2001 From: shengkun <444341703@qq.com> Date: Tue, 30 Jun 2015 14:26:59 +0800 Subject: [PATCH 35/54] =?UTF-8?q?=E6=94=BE=E5=BC=83=E4=BD=BF=E7=94=A8BUS?= =?UTF-8?q?=E5=8F=91=E9=80=81=E5=90=90=E5=8F=B8=E5=BC=B9=E5=87=BA=E4=BA=8B?= =?UTF-8?q?=E4=BB=B6=E3=80=82=E4=BF=AE=E6=94=B9=E4=BD=BF=E5=85=B6=E5=9C=A8?= =?UTF-8?q?onStartCommand=E4=B8=AD=E8=B0=83=E7=94=A8=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../me/drakeet/inmessage/utils/StringUtils.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/me/drakeet/inmessage/utils/StringUtils.java b/app/src/main/java/me/drakeet/inmessage/utils/StringUtils.java index 4c3f8be..ffba9a5 100755 --- a/app/src/main/java/me/drakeet/inmessage/utils/StringUtils.java +++ b/app/src/main/java/me/drakeet/inmessage/utils/StringUtils.java @@ -104,9 +104,17 @@ public static boolean isContainsChinese(String str) { } public static boolean isPersonalMoblieNO(String mobiles) { - Pattern p = Pattern.compile("^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$"); - Matcher m = p.matcher(mobiles); - return m.matches(); + if(mobiles != null) { + Pattern p = Pattern.compile("^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$"); + Matcher m = p.matcher(mobiles); + if (m == null) { + return false; + } + else { + return m.matches(); + } + } + return false; } public static String tryToGetCaptchas(String str) { From 0358038c53bba4a64809bfe637e6e5521314c2a6 Mon Sep 17 00:00:00 2001 From: drakeet Date: Tue, 30 Jun 2015 14:27:24 +0800 Subject: [PATCH 36/54] project.hasProperty('STOREPASS') ? STOREPASS : '' --- app/build.gradle | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index b08cd7b..3f97913 100755 --- a/app/build.gradle +++ b/app/build.gradle @@ -14,8 +14,8 @@ android { applicationId "me.drakeet.inmessage" minSdkVersion 15 targetSdkVersion 22 - versionCode 21 - versionName "1.2.1" + versionCode 22 + versionName "1.2.2" } sourceSets { main { @@ -47,9 +47,9 @@ android { signingConfigs { app1 { storeFile key - storePassword STOREPASS - keyAlias KEYALIAS - keyPassword KEYPASS + storePassword project.hasProperty('STOREPASS') ? STOREPASS : '' + keyAlias project.hasProperty('KEYALIAS') ? KEYALIAS : '' + keyPassword project.hasProperty('KEYPASS') ? KEYPASS : '' } } From 7f403c38e0642787a5ea5f7b579eb363185817be Mon Sep 17 00:00:00 2001 From: drakeet Date: Tue, 30 Jun 2015 21:53:56 +0800 Subject: [PATCH 37/54] small fix; --- app/build.gradle | 6 +++--- app/src/main/java/me/drakeet/inmessage/MainActivity.java | 2 -- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 3f97913..346a61a 100755 --- a/app/build.gradle +++ b/app/build.gradle @@ -4,7 +4,7 @@ def releaseTime() { return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC")) } -def key = new File('s.keystore') +def key = file('s.keystore') android { compileSdkVersion 22 @@ -14,8 +14,8 @@ android { applicationId "me.drakeet.inmessage" minSdkVersion 15 targetSdkVersion 22 - versionCode 22 - versionName "1.2.2" + versionCode 23 + versionName "1.2.3" } sourceSets { main { diff --git a/app/src/main/java/me/drakeet/inmessage/MainActivity.java b/app/src/main/java/me/drakeet/inmessage/MainActivity.java index 1918535..749ac21 100755 --- a/app/src/main/java/me/drakeet/inmessage/MainActivity.java +++ b/app/src/main/java/me/drakeet/inmessage/MainActivity.java @@ -69,9 +69,7 @@ protected void onCreate(Bundle savedInstanceState) { mShowResult = false; setupActionBar(); initRecyclerView(); - MobclickAgent.updateOnlineConfig(this); - checkFirstTimeUse(); } From 62b91a1c4a8864fd90dde70e6bbff06e3a96ef19 Mon Sep 17 00:00:00 2001 From: shengkun <444341703@qq.com> Date: Wed, 1 Jul 2015 11:31:09 +0800 Subject: [PATCH 38/54] =?UTF-8?q?=E8=BF=90=E8=A1=8C=E6=97=B6=EF=BC=8C?= =?UTF-8?q?=E7=A9=BA=E5=80=BC=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../me/drakeet/inmessage/MainActivity.java | 102 +++++++++--------- 1 file changed, 52 insertions(+), 50 deletions(-) diff --git a/app/src/main/java/me/drakeet/inmessage/MainActivity.java b/app/src/main/java/me/drakeet/inmessage/MainActivity.java index 749ac21..e0d1355 100755 --- a/app/src/main/java/me/drakeet/inmessage/MainActivity.java +++ b/app/src/main/java/me/drakeet/inmessage/MainActivity.java @@ -148,7 +148,9 @@ protected Object doInBackground(Object... params) { @Override protected void onPostExecute(Object o) { super.onPostExecute(o); - setAdapter(); + if (mMessages != null && mMessages.size() != 0) { + setAdapter(); + } setRefreshing(false); mIsRefreshing = false; } @@ -178,30 +180,30 @@ public void deleteAll() { private void showConfirmDialog() { AlertDialog alertDialog = new AlertDialog.Builder(this).setTitle(getString(R.string.empty_verification_code)) - .setMessage(getString(R.string.str_clear_messages_hint)) - .setPositiveButton( - android.R.string.ok, - new DialogInterface.OnClickListener() { - @Override - public void onClick( - DialogInterface dialog, - int which) { - showDeleteDialog(); - } - } - ) - .setNegativeButton( - android.R.string.cancel, - new DialogInterface.OnClickListener() { - @Override - public void onClick( - DialogInterface dialog, - int which) { - - } - } - ) - .create(); + .setMessage(getString(R.string.str_clear_messages_hint)) + .setPositiveButton( + android.R.string.ok, + new DialogInterface.OnClickListener() { + @Override + public void onClick( + DialogInterface dialog, + int which) { + showDeleteDialog(); + } + } + ) + .setNegativeButton( + android.R.string.cancel, + new DialogInterface.OnClickListener() { + @Override + public void onClick( + DialogInterface dialog, + int which) { + + } + } + ) + .create(); alertDialog.setCanceledOnTouchOutside(false); alertDialog.show(); } @@ -245,18 +247,18 @@ public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { private void showBussinessDialog() { final AlertDialog alertDialog = new AlertDialog.Builder(this).setTitle(getString(R.string.str_check_bussiness_hint)) - .setMessage(getString(R.string.str_doing_hint)) - .setPositiveButton( - android.R.string.ok, - new DialogInterface.OnClickListener() { - @Override - public void onClick( - DialogInterface dialog, - int which) { - } - } - ) - .create(); + .setMessage(getString(R.string.str_doing_hint)) + .setPositiveButton( + android.R.string.ok, + new DialogInterface.OnClickListener() { + @Override + public void onClick( + DialogInterface dialog, + int which) { + } + } + ) + .create(); alertDialog.setCanceledOnTouchOutside(false); alertDialog.show(); TaskUtils.execute( @@ -318,18 +320,18 @@ private Boolean isExist(String company, List companys) { private void showDetailSMS(Message message) { AlertDialog alertDialog = new AlertDialog.Builder(this).setTitle(message.getSender()) - .setMessage(message.getContent()) - .setPositiveButton( - android.R.string.ok, - new DialogInterface.OnClickListener() { - @Override - public void onClick( - DialogInterface dialog, - int which) { - } - } - ) - .create(); + .setMessage(message.getContent()) + .setPositiveButton( + android.R.string.ok, + new DialogInterface.OnClickListener() { + @Override + public void onClick( + DialogInterface dialog, + int which) { + } + } + ) + .create(); alertDialog.setCanceledOnTouchOutside(false); alertDialog.show(); } @@ -417,7 +419,7 @@ public boolean onCreateOptionsMenu(Menu menu) { final MenuItem switchItem = menu.findItem(R.id.menu_show_result); MenuItemCompat.setActionView(switchItem, R.layout.view_switchcompat); final SwitchCompat switchCompat = (SwitchCompat) switchItem.getActionView() - .findViewById(R.id.switchCompat); + .findViewById(R.id.switchCompat); switchCompat.setOnCheckedChangeListener( new CompoundButton.OnCheckedChangeListener() { @Override From 02abe17c44f51f76c7de55407cc47ee7fb94219e Mon Sep 17 00:00:00 2001 From: drakeet Date: Wed, 1 Jul 2015 12:09:06 +0800 Subject: [PATCH 39/54] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E5=BF=AB=E9=80=9F?= =?UTF-8?q?=E6=BB=9A=E5=8A=A8=E4=B8=8B=E6=8B=89=E5=B8=A6=E6=9D=A5=E7=9A=84?= =?UTF-8?q?=E8=B6=8A=E7=95=8C=E5=BC=82=E5=B8=B8=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../me/drakeet/inmessage/MainActivity.java | 29 +++++-------------- .../inmessage/adapter/MainMessageAdapter.java | 1 + .../ui/SwipeRefreshBaseActivity.java | 2 -- 3 files changed, 9 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/me/drakeet/inmessage/MainActivity.java b/app/src/main/java/me/drakeet/inmessage/MainActivity.java index e0d1355..8f70b6e 100755 --- a/app/src/main/java/me/drakeet/inmessage/MainActivity.java +++ b/app/src/main/java/me/drakeet/inmessage/MainActivity.java @@ -124,7 +124,6 @@ public void onItemClick(View view, int position) { ); } - private void getAllMessage() { setRefreshing(true); mIsRefreshing = true; @@ -182,23 +181,17 @@ private void showConfirmDialog() { AlertDialog alertDialog = new AlertDialog.Builder(this).setTitle(getString(R.string.empty_verification_code)) .setMessage(getString(R.string.str_clear_messages_hint)) .setPositiveButton( - android.R.string.ok, - new DialogInterface.OnClickListener() { + android.R.string.ok, new DialogInterface.OnClickListener() { @Override - public void onClick( - DialogInterface dialog, - int which) { + public void onClick(DialogInterface dialog, int which) { showDeleteDialog(); } } ) .setNegativeButton( - android.R.string.cancel, - new DialogInterface.OnClickListener() { + android.R.string.cancel, new DialogInterface.OnClickListener() { @Override - public void onClick( - DialogInterface dialog, - int which) { + public void onClick(DialogInterface dialog, int which) { } } @@ -249,12 +242,9 @@ private void showBussinessDialog() { final AlertDialog alertDialog = new AlertDialog.Builder(this).setTitle(getString(R.string.str_check_bussiness_hint)) .setMessage(getString(R.string.str_doing_hint)) .setPositiveButton( - android.R.string.ok, - new DialogInterface.OnClickListener() { + android.R.string.ok, new DialogInterface.OnClickListener() { @Override - public void onClick( - DialogInterface dialog, - int which) { + public void onClick(DialogInterface dialog, int which) { } } ) @@ -322,12 +312,9 @@ private void showDetailSMS(Message message) { AlertDialog alertDialog = new AlertDialog.Builder(this).setTitle(message.getSender()) .setMessage(message.getContent()) .setPositiveButton( - android.R.string.ok, - new DialogInterface.OnClickListener() { + android.R.string.ok, new DialogInterface.OnClickListener() { @Override - public void onClick( - DialogInterface dialog, - int which) { + public void onClick(DialogInterface dialog, int which) { } } ) diff --git a/app/src/main/java/me/drakeet/inmessage/adapter/MainMessageAdapter.java b/app/src/main/java/me/drakeet/inmessage/adapter/MainMessageAdapter.java index 9ef859b..2afe16b 100755 --- a/app/src/main/java/me/drakeet/inmessage/adapter/MainMessageAdapter.java +++ b/app/src/main/java/me/drakeet/inmessage/adapter/MainMessageAdapter.java @@ -111,6 +111,7 @@ public int getItemCount() { @Override public int getItemViewType(int position) { + if (mList.size() == 0) return ITEM_TYPE.ITEM_TYPE_DATE.ordinal(); // 解决快速滚动下拉带来的越界异常 return mList.get(position).getIsMessage() ? ITEM_TYPE.ITEM_TYPE_MESSAGE.ordinal() : ITEM_TYPE.ITEM_TYPE_DATE.ordinal(); } diff --git a/app/src/main/java/me/drakeet/inmessage/ui/SwipeRefreshBaseActivity.java b/app/src/main/java/me/drakeet/inmessage/ui/SwipeRefreshBaseActivity.java index 7165c0a..f12e42b 100755 --- a/app/src/main/java/me/drakeet/inmessage/ui/SwipeRefreshBaseActivity.java +++ b/app/src/main/java/me/drakeet/inmessage/ui/SwipeRefreshBaseActivity.java @@ -41,8 +41,6 @@ public void onRefresh() { public void requestDataRefresh() {} - ; - public void setRefreshing(boolean refreshing) { if (mSwipeRefreshLayout == null) { return; From 79c5b58b3cfc315f909a2431f7dd8e9a6608157a Mon Sep 17 00:00:00 2001 From: shengkun <444341703@qq.com> Date: Thu, 2 Jul 2015 16:14:59 +0800 Subject: [PATCH 40/54] =?UTF-8?q?=E4=BC=98=E5=85=88=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E6=98=A8=E5=A4=A9=EF=BC=8C=E5=89=8D=E5=A4=A9=EF=BC=8C=E6=9C=AC?= =?UTF-8?q?=E5=91=A8=EF=BC=8C=E6=9C=AC=E6=9C=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../me/drakeet/inmessage/utils/TimeUtils.java | 32 ++++++++----------- 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/me/drakeet/inmessage/utils/TimeUtils.java b/app/src/main/java/me/drakeet/inmessage/utils/TimeUtils.java index 02204ad..0e50269 100755 --- a/app/src/main/java/me/drakeet/inmessage/utils/TimeUtils.java +++ b/app/src/main/java/me/drakeet/inmessage/utils/TimeUtils.java @@ -222,30 +222,26 @@ public String getDateGroup(Date date) { return TODAY; } - if(isSameYear(nowCalendar, cal)) { + if(isSameWeek(nowCalendar, cal)) { + if (isYesterDay(nowCalendar, cal)) { + return YESTERDAY; + } else if (isTheDayBeforeYesterday(nowCalendar, cal)) { + return THE_DAY_BEFORE_YESTERDAY; + } else { + return WEEK; + } + } else { if(isSameMonth(nowCalendar, cal)) { - if(isSameWeek(nowCalendar, cal)) { - if (isYesterDay(nowCalendar, cal)) { - return YESTERDAY; - } else if (isTheDayBeforeYesterday(nowCalendar, cal)) { - return THE_DAY_BEFORE_YESTERDAY; - } else { - return WEEK; - } - } - else { - return MONTH; - } + return MONTH; } - else { + else if(isSameYear(nowCalendar, cal)) { int month = cal.get(Calendar.MONTH) + 1; return month + "月"; + } else { + int month = cal.get(Calendar.MONTH) + 1; + return cal.get(Calendar.YEAR) + "年" + month + "月"; } } - else { - int month = cal.get(Calendar.MONTH) + 1; - return cal.get(Calendar.YEAR) + "年" + month + "月"; - } } From 919c8e32e0252a98d3d7b14af98e82c8335fc4f6 Mon Sep 17 00:00:00 2001 From: drakeet Date: Sat, 4 Jul 2015 19:47:04 +0800 Subject: [PATCH 41/54] small fixes; --- app/build.gradle | 4 ++-- app/src/main/res/drawable/shadow.xml | 2 +- app/src/main/res/layout/activity_main.xml | 2 +- app/src/main/res/layout/item_message.xml | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 346a61a..92c7afb 100755 --- a/app/build.gradle +++ b/app/build.gradle @@ -14,8 +14,8 @@ android { applicationId "me.drakeet.inmessage" minSdkVersion 15 targetSdkVersion 22 - versionCode 23 - versionName "1.2.3" + versionCode 27 + versionName "1.2.7" } sourceSets { main { diff --git a/app/src/main/res/drawable/shadow.xml b/app/src/main/res/drawable/shadow.xml index 40a86dc..a7c366e 100644 --- a/app/src/main/res/drawable/shadow.xml +++ b/app/src/main/res/drawable/shadow.xml @@ -7,6 +7,6 @@ android:endColor="#20000000" android:startColor="#00000000" /> - + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 3bc0a97..3898b13 100755 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -30,7 +30,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="right|bottom" - android:layout_marginBottom="24dp" + android:layout_marginBottom="18dp" android:layout_marginRight="16dp" android:clickable="true" android:onClick="onFab" diff --git a/app/src/main/res/layout/item_message.xml b/app/src/main/res/layout/item_message.xml index ac47598..bb044af 100755 --- a/app/src/main/res/layout/item_message.xml +++ b/app/src/main/res/layout/item_message.xml @@ -5,7 +5,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/message_bg_color" - android:elevation="1dp" + android:elevation="2dp" android:foreground="?selectableItemBackground"> Date: Tue, 14 Jul 2015 17:00:02 +0800 Subject: [PATCH 42/54] CollapsingToolbarLayout for About Activity; --- app/build.gradle | 6 - .../me/drakeet/inmessage/AboutActivity.java | 46 ++--- .../me/drakeet/inmessage/MainActivity.java | 4 +- app/src/main/res/layout/activity_about.xml | 173 ++++++++---------- app/src/main/res/layout/activity_main.xml | 2 +- .../mipmap-xhdpi/ic_arrow_back_white_24dp.png | Bin 336 -> 0 bytes app/src/main/res/values/styles.xml | 5 + 7 files changed, 102 insertions(+), 134 deletions(-) delete mode 100755 app/src/main/res/mipmap-xhdpi/ic_arrow_back_white_24dp.png diff --git a/app/build.gradle b/app/build.gradle index 92c7afb..c37dc9e 100755 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,11 +17,6 @@ android { versionCode 27 versionName "1.2.7" } - sourceSets { - main { - jniLibs.srcDirs = ['libs'] - } - } packagingOptions { exclude 'META-INF/DEPENDENCIES.txt' @@ -124,7 +119,6 @@ dependencies { compile 'com.android.support:appcompat-v7:22.2.0' compile 'com.android.support:recyclerview-v7:22.2.0' compile 'com.daimajia.numberprogressbar:library:1.2@aar' - compile 'com.github.ksoichiro:android-observablescrollview:1.4.0' compile 'com.squareup:otto:1.3.5' compile 'com.jakewharton:butterknife:6.0.0' compile 'com.badoo.mobile:android-weak-handler:1.0' diff --git a/app/src/main/java/me/drakeet/inmessage/AboutActivity.java b/app/src/main/java/me/drakeet/inmessage/AboutActivity.java index 228f084..a749a8b 100644 --- a/app/src/main/java/me/drakeet/inmessage/AboutActivity.java +++ b/app/src/main/java/me/drakeet/inmessage/AboutActivity.java @@ -2,6 +2,7 @@ import android.content.Intent; import android.os.Bundle; +import android.support.design.widget.CollapsingToolbarLayout; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.Menu; @@ -9,9 +10,6 @@ import android.view.View; import android.widget.TextView; -import com.github.ksoichiro.android.observablescrollview.ObservableScrollView; -import com.github.ksoichiro.android.observablescrollview.ObservableScrollViewCallbacks; -import com.github.ksoichiro.android.observablescrollview.ScrollState; import com.umeng.analytics.MobclickAgent; import butterknife.ButterKnife; @@ -24,10 +22,10 @@ public class AboutActivity extends AppCompatActivity { @InjectView(R.id.toolbar) Toolbar mToolbar; - @InjectView(R.id.sv_about) - ObservableScrollView mScrollView; @InjectView(R.id.tv_version) TextView mVersionTextView; + @InjectView(R.id.collapsing_toolbar) + CollapsingToolbarLayout mCollapsingToolbarLayout; @Override protected void onCreate(Bundle savedInstanceState) { @@ -37,9 +35,10 @@ protected void onCreate(Bundle savedInstanceState) { setUpVersionName(); - final int headerHeight = getResources().getDimensionPixelSize(R.dimen.about_header_height); - mToolbar.setTitle(""); + mCollapsingToolbarLayout.setTitle(getString(R.string.about)); + setSupportActionBar(mToolbar); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); mToolbar.setNavigationOnClickListener( new View.OnClickListener() { @Override @@ -49,29 +48,6 @@ public void onClick(View v) { } ); - mScrollView.setScrollViewCallbacks( - new ObservableScrollViewCallbacks() { - @Override - public void onScrollChanged(int scrollY, boolean firstScroll, - boolean dragging) { - if (scrollY > headerHeight + 192) { - mScrollView.setBackgroundColor(getResources().getColor(R.color.background)); - } else { - mScrollView.setBackgroundColor(getResources().getColor(R.color.transparent)); - } - } - - @Override - public void onDownMotionEvent() { - - } - - @Override - public void onUpOrCancelMotionEvent(ScrollState scrollState) { - - } - } - ); } private void setUpVersionName() { @@ -86,9 +62,13 @@ public boolean onCreateOptionsMenu(Menu menu) { @Override public boolean onOptionsItemSelected(MenuItem item) { - int id = item.getItemId(); - if (id == R.id.menu_share) { - onClickShare(); + switch (item.getItemId()) { + case android.R.id.home: + finish(); + return true; + case R.id.menu_share: + onClickShare(); + return true; } return super.onOptionsItemSelected(item); } diff --git a/app/src/main/java/me/drakeet/inmessage/MainActivity.java b/app/src/main/java/me/drakeet/inmessage/MainActivity.java index 8f70b6e..b08bb68 100755 --- a/app/src/main/java/me/drakeet/inmessage/MainActivity.java +++ b/app/src/main/java/me/drakeet/inmessage/MainActivity.java @@ -11,6 +11,7 @@ import android.support.v7.app.AlertDialog; import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; import android.support.v7.widget.SwitchCompat; import android.support.v7.widget.Toolbar; import android.view.KeyEvent; @@ -23,7 +24,6 @@ import com.badoo.mobile.util.WeakHandler; import com.daimajia.numberprogressbar.NumberProgressBar; -import com.github.ksoichiro.android.observablescrollview.ObservableRecyclerView; import com.umeng.analytics.MobclickAgent; import org.litepal.crud.DataSupport; @@ -48,7 +48,7 @@ public class MainActivity extends SwipeRefreshBaseActivity { @InjectView(R.id.message_rv) - ObservableRecyclerView mRecyclerView; + RecyclerView mRecyclerView; private NumberProgressBar mNumberProgressBar; private MainMessageAdapter mMainMessageAdapter; diff --git a/app/src/main/res/layout/activity_about.xml b/app/src/main/res/layout/activity_about.xml index 9aec8b0..065d721 100644 --- a/app/src/main/res/layout/activity_about.xml +++ b/app/src/main/res/layout/activity_about.xml @@ -1,44 +1,70 @@ - + android:background="@color/background"> - + android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> - + - - - - - - + + + + + + + + + + + + + + + + android:layout_height="match_parent" + app:layout_behavior="@string/appbar_scrolling_view_behavior"> - - + android:textColor="@color/md_grey_600"/> + android:textSize="14sp"/> @@ -77,7 +99,7 @@ android:layout_width="match_parent" android:layout_height="1px" android:layout_marginTop="12dp" - android:background="@color/md_grey_500" /> + android:background="@color/md_grey_500"/> + android:textColor="@color/md_grey_600"/> + android:src="@mipmap/avatar_manong"/> + tools:ignore="HardcodedText"/> + android:textColor="@color/md_grey_600"/> + android:src="@mipmap/avatar_drakeet"/> + tools:ignore="HardcodedText"/> + android:textColor="@color/md_grey_600"/> @@ -152,7 +174,7 @@ android:layout_width="match_parent" android:layout_height="1px" android:layout_marginTop="12dp" - android:background="@color/md_grey_500" /> + android:background="@color/md_grey_500"/> + android:textColor="@color/md_grey_600"/> + tools:ignore="HardcodedText"/> + tools:ignore="HardcodedText"/> + tools:ignore="HardcodedText"/> + tools:ignore="HardcodedText"/> + tools:ignore="HardcodedText"/> + tools:ignore="HardcodedText"/> + tools:ignore="HardcodedText"/> + tools:ignore="HardcodedText"/> + tools:ignore="HardcodedText"/> - - - - - - - + tools:ignore="HardcodedText"/> - - - + - + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 3898b13..f59d122 100755 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -18,7 +18,7 @@ android:layout_below="@id/toolbar" app:layout_behavior="@string/appbar_scrolling_view_behavior"> - diff --git a/app/src/main/res/mipmap-xhdpi/ic_arrow_back_white_24dp.png b/app/src/main/res/mipmap-xhdpi/ic_arrow_back_white_24dp.png deleted file mode 100755 index addbfc886115c892c3e634d5589866d29f35210b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 336 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA0wn)(8}a}tg=CK)Uj~LMH3o);76yi2K%s^g z3=E|}g|8AA7_4S6Fo+k-*%fF5lweBoc6VX;-`;;_Kaj^+;1OBOz`!jG!i)^F=12eq zPk6dGhD02Gd)=0+*+HP~q5p}ydnQg$3(R4%j5tx~RCQg6QSi##{5pk}$PKmgo$g4^ zZn|+iTv_IUs^X@em>9by`luS6`%@DkgPvW!b zfjRbUGN0TVyzAr(PQ7Q$`+5>pwyY_k-Ol$zHn(Snn10uVwSBVhCZ2xJn*8KfoWT=$KPJwC abT&1XX2zgueSe^z7(8A5T-G@yGywn16dp + + + From 0cfd9f4495aa042e3793e98a14eac093649b13bd Mon Sep 17 00:00:00 2001 From: drakeet Date: Wed, 15 Jul 2015 13:34:25 +0800 Subject: [PATCH 43/54] fix on back press Activity enterAnim scale small bug(on 5.0-); --- app/build.gradle | 4 +-- app/src/main/AndroidManifest.xml | 1 + .../me/drakeet/inmessage/AboutActivity.java | 4 +-- app/src/main/res/layout/activity_about.xml | 25 ------------------- 4 files changed, 5 insertions(+), 29 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index c37dc9e..ce1602f 100755 --- a/app/build.gradle +++ b/app/build.gradle @@ -14,8 +14,8 @@ android { applicationId "me.drakeet.inmessage" minSdkVersion 15 targetSdkVersion 22 - versionCode 27 - versionName "1.2.7" + versionCode 28 + versionName "1.2.8" } packagingOptions { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 3349ac9..04e3a88 100755 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,6 +21,7 @@ android:theme="@style/MaterialTheme"> diff --git a/app/src/main/java/me/drakeet/inmessage/AboutActivity.java b/app/src/main/java/me/drakeet/inmessage/AboutActivity.java index a749a8b..c553dee 100644 --- a/app/src/main/java/me/drakeet/inmessage/AboutActivity.java +++ b/app/src/main/java/me/drakeet/inmessage/AboutActivity.java @@ -35,7 +35,7 @@ protected void onCreate(Bundle savedInstanceState) { setUpVersionName(); - mCollapsingToolbarLayout.setTitle(getString(R.string.about)); + mCollapsingToolbarLayout.setTitle(getString(R.string.app_name)); setSupportActionBar(mToolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); @@ -64,7 +64,7 @@ public boolean onCreateOptionsMenu(Menu menu) { public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: - finish(); + this.finish(); return true; case R.id.menu_share: onClickShare(); diff --git a/app/src/main/res/layout/activity_about.xml b/app/src/main/res/layout/activity_about.xml index 065d721..6acb8a7 100644 --- a/app/src/main/res/layout/activity_about.xml +++ b/app/src/main/res/layout/activity_about.xml @@ -284,31 +284,6 @@ tools:ignore="HardcodedText"/> - - - - - - - From 5c7b2008d1a515d9402ca56223c2df6b5f772f9a Mon Sep 17 00:00:00 2001 From: drakeet Date: Fri, 24 Jul 2015 12:27:52 +0800 Subject: [PATCH 44/54] change support libraries to 22.2.1; --- app/build.gradle | 10 +++++----- app/proguard-rules.pro | 9 +++------ app/src/main/res/layout/activity_about.xml | 5 +++-- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index ce1602f..26e9a18 100755 --- a/app/build.gradle +++ b/app/build.gradle @@ -14,8 +14,8 @@ android { applicationId "me.drakeet.inmessage" minSdkVersion 15 targetSdkVersion 22 - versionCode 28 - versionName "1.2.8" + versionCode 31 + versionName "1.3.1" } packagingOptions { @@ -116,12 +116,12 @@ android { dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) - compile 'com.android.support:appcompat-v7:22.2.0' - compile 'com.android.support:recyclerview-v7:22.2.0' + compile 'com.android.support:appcompat-v7:22.2.1' + compile 'com.android.support:recyclerview-v7:22.2.1' + compile 'com.android.support:design:22.2.1' compile 'com.daimajia.numberprogressbar:library:1.2@aar' compile 'com.squareup:otto:1.3.5' compile 'com.jakewharton:butterknife:6.0.0' compile 'com.badoo.mobile:android-weak-handler:1.0' compile 'com.umeng.analytics:analytics:latest.integration'// Umeng 统计 - compile 'com.android.support:design:22.2.0' } diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 9b41c64..64460bf 100755 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -58,12 +58,9 @@ -keep public class * extends android.os.Binder # Keep the support library --keep class android.support.v4.** { *; } --keep interface android.support.v4.** { *; } +-keep class android.support.** { *; } +-keep interface android.support.** { *; } -# Keep the support library --keep class android.support.v7.** { *; } --keep interface android.support.v7.** { *; } ## GSON 2.2.4 specific rules ## @@ -167,7 +164,7 @@ native ; } --keep class me.drakeet.inmessage.model.** { *;} +-keep class me.drakeet.inmessage.** { *;} -keep class cn.smssdk.** { *;} -keepclasseswithmembernames class * { diff --git a/app/src/main/res/layout/activity_about.xml b/app/src/main/res/layout/activity_about.xml index 6acb8a7..965de25 100644 --- a/app/src/main/res/layout/activity_about.xml +++ b/app/src/main/res/layout/activity_about.xml @@ -69,7 +69,7 @@ From db73c0a91c38103c3f75c2257f34af6809957b42 Mon Sep 17 00:00:00 2001 From: drakeet Date: Mon, 17 Aug 2015 16:28:06 +0800 Subject: [PATCH 45/54] Fix about Activity scroll crash exception. --- .../me/drakeet/inmessage/constant/StaticObjectInterface.java | 2 +- app/src/main/res/menu/menu_about.xml | 2 +- app/src/main/res/values/styles.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/me/drakeet/inmessage/constant/StaticObjectInterface.java b/app/src/main/java/me/drakeet/inmessage/constant/StaticObjectInterface.java index 6887c7a..773f3be 100644 --- a/app/src/main/java/me/drakeet/inmessage/constant/StaticObjectInterface.java +++ b/app/src/main/java/me/drakeet/inmessage/constant/StaticObjectInterface.java @@ -7,7 +7,7 @@ public interface StaticObjectInterface { String[] CPATCHAS_KEYWORD = {"激活码", "动态码", "校验码", "验证码", "确认码", "检验码", "验证代码", "激活代码", "校验代码", "动态代码", "检验代码", "确认代码", "短信口令", "动态密码", "交易码", "驗證碼", "激活碼", "動態碼", "校驗碼", "檢驗碼", "驗證代碼", - "激活代碼", "校驗代碼", "確認代碼", "動態代碼", "檢驗代碼"}; + "激活代碼", "校驗代碼", "確認代碼", "動態代碼", "檢驗代碼", "上网密码"}; String[] CPATCHAS_KEYWORD_EN = {"CODE", "code"}; String ACTION_CLICK = "me.drakeet.inmessage.intent.action.NotificationClick"; } diff --git a/app/src/main/res/menu/menu_about.xml b/app/src/main/res/menu/menu_about.xml index e47a8af..2ccfda2 100644 --- a/app/src/main/res/menu/menu_about.xml +++ b/app/src/main/res/menu/menu_about.xml @@ -1,7 +1,7 @@

+ tools:context="me.drakeet.meizhi.ui.AboutActivity"> - From 631d2d5bfb09d2e5b1ce4d4cedcff13e78565713 Mon Sep 17 00:00:00 2001 From: drakeet Date: Mon, 17 Aug 2015 16:35:13 +0800 Subject: [PATCH 46/54] Thumb. --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 26e9a18..49adf2d 100755 --- a/app/build.gradle +++ b/app/build.gradle @@ -14,8 +14,8 @@ android { applicationId "me.drakeet.inmessage" minSdkVersion 15 targetSdkVersion 22 - versionCode 31 - versionName "1.3.1" + versionCode 32 + versionName "1.3.2" } packagingOptions { From 95d1d2b48f41b783ee1d9b9acf22c02f85b1f834 Mon Sep 17 00:00:00 2001 From: drakeet Date: Wed, 19 Aug 2015 15:26:11 +0800 Subject: [PATCH 47/54] Remove seashell. --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index e327f4c..26344d1 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,6 @@ #验证码助手 SmsCodeHelper -是由原「[贝壳单词](http://www.beikedanci.com)」团队开发的一款新的开源轻App. - -它可以在手机接收到验证码短信的时候,自动浮现验证码,并自动复制验证码到用户的剪切板。当用户接收到短信验证码,只要长按验证码的输入框,粘贴验证码即可。 +在手机接收到验证码短信的时候,自动浮现验证码,并自动复制验证码到用户的剪切板。当用户接收到短信验证码,只要长按验证码的输入框,粘贴验证码即可。 除此之外,还可以让用户批量删除无用验证码短信,帮助用户反向推理出绑定了哪些业务(换号必备啊有木有)。 From b1943e97eed87fdea49ad327c173e6fb0da490e4 Mon Sep 17 00:00:00 2001 From: drakeet Date: Wed, 2 Sep 2015 21:20:29 +0800 Subject: [PATCH 48/54] Add about me in README.md --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index 26344d1..3503d99 100644 --- a/README.md +++ b/README.md @@ -35,3 +35,11 @@ It is very light, but also adhering to the usual good design and user-friendly, We open source, good design, not indiscriminately use rights. Just hope if you like it, you can share with your friends, because good things need to share with others in order to let it grow, every share is our power, thanks! + +## About me + +I am a student in China, I love reading pure literature, love Japanese culture and Hongkong music. At the same time, it is also very obsessed with writing code. If you have any questions or want to make friends with me, you can write to me: drakeet.me@gmail.com + +In addition, my blog: http://drakeet.me + +If you like my open source projects, you can follow me: https://github.com/drakeet From f7348df3cd3da333a56a591d9d3ad52d7e85adb4 Mon Sep 17 00:00:00 2001 From: drakeet Date: Wed, 2 Sep 2015 21:36:09 +0800 Subject: [PATCH 49/54] Update about me in README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3503d99..481454c 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ We open source, good design, not indiscriminately use rights. Just hope if you l ## About me -I am a student in China, I love reading pure literature, love Japanese culture and Hongkong music. At the same time, it is also very obsessed with writing code. If you have any questions or want to make friends with me, you can write to me: drakeet.me@gmail.com +I am a student in China, I love reading pure literature, love Japanese culture and Hongkong music. At the same time, I am also obsessed with writing code. If you have any questions or want to make friends with me, you can write to me: drakeet.me@gmail.com In addition, my blog: http://drakeet.me From d5a0f79aea1c6c40673d2b3207e581b808af0e62 Mon Sep 17 00:00:00 2001 From: chenjiayao Date: Sun, 11 Oct 2015 15:05:59 +0800 Subject: [PATCH 50/54] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E7=9F=AD=E4=BF=A1=E7=82=B9=E5=87=BB=E7=9F=AD=E4=BF=A1=E6=9D=A1?= =?UTF-8?q?=E7=9B=AE=E5=B4=A9=E6=BA=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/me/drakeet/inmessage/MainActivity.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/me/drakeet/inmessage/MainActivity.java b/app/src/main/java/me/drakeet/inmessage/MainActivity.java index b08bb68..6d10ad6 100755 --- a/app/src/main/java/me/drakeet/inmessage/MainActivity.java +++ b/app/src/main/java/me/drakeet/inmessage/MainActivity.java @@ -147,7 +147,11 @@ protected Object doInBackground(Object... params) { @Override protected void onPostExecute(Object o) { super.onPostExecute(o); - if (mMessages != null && mMessages.size() != 0) { + /* + && mMessages.size() != 0 应该去掉,即使没有验证码短信,也应该更新 + 不然用户从系统收件箱删除短信之后再回到应用点击会崩溃 + */ + if (mMessages != null) { setAdapter(); } setRefreshing(false); From d3dc35c11a44da05ba62df42dac513ed407bef17 Mon Sep 17 00:00:00 2001 From: chenjiayao Date: Sun, 11 Oct 2015 15:06:21 +0800 Subject: [PATCH 51/54] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=BA=E5=8F=AA?= =?UTF-8?q?=E8=AF=BB=E5=8F=96=E6=94=B6=E4=BB=B6=E7=AE=B1=E9=AA=8C=E8=AF=81?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../me/drakeet/inmessage/utils/SmsUtils.java | 36 ++++++++++--------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/me/drakeet/inmessage/utils/SmsUtils.java b/app/src/main/java/me/drakeet/inmessage/utils/SmsUtils.java index 87401c7..b32c7ac 100755 --- a/app/src/main/java/me/drakeet/inmessage/utils/SmsUtils.java +++ b/app/src/main/java/me/drakeet/inmessage/utils/SmsUtils.java @@ -8,6 +8,7 @@ import android.graphics.BitmapFactory; import android.net.Uri; import android.provider.ContactsContract; +import android.util.Log; import org.litepal.crud.DataSupport; @@ -30,7 +31,8 @@ public SmsUtils(final Context context) { mContext = context; } - public static final Uri MMSSMS_ALL_MESSAGE_URI = Uri.parse("content://sms/"); + //只检查收件箱的验证码信息 + public static final Uri MMSSMS_ALL_MESSAGE_URI = Uri.parse("content://sms/inbox"); public static final Uri ALL_MESSAGE_URI = MMSSMS_ALL_MESSAGE_URI.buildUpon(). appendQueryParameter("simple", "true").build(); @@ -52,15 +54,14 @@ public List getAllCaptchMessages() { String strAddress = cursor.getString(indexAddress); if (!StringUtils.isPersonalMoblieNO(strAddress)) { boolean isCpatchasMessage = false; - if(!StringUtils.isContainsChinese(strbody)) { - if(StringUtils.isCaptchasMessageEn(strbody) && !StringUtils.tryToGetCaptchasEn(strbody).equals("")) { + if (!StringUtils.isContainsChinese(strbody)) { + if (StringUtils.isCaptchasMessageEn(strbody) && !StringUtils.tryToGetCaptchasEn(strbody).equals("")) { isCpatchasMessage = true; } - } - else if(StringUtils.isCaptchasMessage(strbody) && !StringUtils.tryToGetCaptchas(strbody).equals("")) { + } else if (StringUtils.isCaptchasMessage(strbody) && !StringUtils.tryToGetCaptchas(strbody).equals("")) { isCpatchasMessage = true; } - if(isCpatchasMessage) { + if (isCpatchasMessage) { int date = cursor.getColumnIndex("date"); //格式化短信日期提示 SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd hh:mm"); @@ -91,24 +92,26 @@ else if(StringUtils.isCaptchasMessage(strbody) && !StringUtils.tryToGetCaptchas( if (resultContent != null) { message.setResultContent(resultContent); } + //检查收件箱地址把所有的验证码短信放到smsMessages smsMessages.add(message); } } } + List localMessages = DataSupport.where("readStatus = ?", "0").order("date asc").find(Message.class); - for(Message message:localMessages) { - if(message.getDate() != null) { + for (Message message : localMessages) { + if (message.getDate() != null) { message.setIsMessage(true); boolean find = false; - for(int u = 0; u< smsMessages.size();u ++ ) { - if(message.getDate().getTime() > smsMessages.get(u).getDate().getTime()) { + for (int u = 0; u < smsMessages.size(); u++) { + if (message.getDate().getTime() > smsMessages.get(u).getDate().getTime()) { smsMessages.add(u, message); find = true; break; } } - if(!find) { + if (!find) { smsMessages.add(message); } @@ -117,7 +120,7 @@ else if(StringUtils.isCaptchasMessage(strbody) && !StringUtils.tryToGetCaptchas( List unionMessages = new ArrayList<>(); - for(Message message: smsMessages) { + for (Message message : smsMessages) { String group = TimeUtils.getInstance().getDateGroup(message.getDate()); if (dateGroups.size() == 0) { dateGroups.add(group); @@ -134,22 +137,21 @@ else if(StringUtils.isCaptchasMessage(strbody) && !StringUtils.tryToGetCaptchas( unionMessages.add(dateMessage); } } + unionMessages.add(message); } - - + Log.i("TAG",unionMessages.size()+""); cursor.close(); return unionMessages; } /** * 删除手机短信 - * - * */ + */ public int deleteSms(String smsId) { final Uri SMS_URI = Uri.parse("content://sms/"); - return mContext.getContentResolver().delete(SMS_URI,"_id=?",new String[]{smsId}); + return mContext.getContentResolver().delete(SMS_URI, "_id=?", new String[]{smsId}); } public String getContactNameFromPhoneBook(String phoneNum) { From 91efce1ca816e7d39752cedbab8eb5cbc0aa01e9 Mon Sep 17 00:00:00 2001 From: chenjiayao Date: Sun, 11 Oct 2015 15:09:15 +0800 Subject: [PATCH 52/54] =?UTF-8?q?=E6=95=B4=E7=90=86=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/me/drakeet/inmessage/utils/SmsUtils.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/src/main/java/me/drakeet/inmessage/utils/SmsUtils.java b/app/src/main/java/me/drakeet/inmessage/utils/SmsUtils.java index b32c7ac..fb65084 100755 --- a/app/src/main/java/me/drakeet/inmessage/utils/SmsUtils.java +++ b/app/src/main/java/me/drakeet/inmessage/utils/SmsUtils.java @@ -8,7 +8,6 @@ import android.graphics.BitmapFactory; import android.net.Uri; import android.provider.ContactsContract; -import android.util.Log; import org.litepal.crud.DataSupport; @@ -141,7 +140,6 @@ public List getAllCaptchMessages() { unionMessages.add(message); } - Log.i("TAG",unionMessages.size()+""); cursor.close(); return unionMessages; } From a52104f3eff02e970005b086574ee11c52afcd6a Mon Sep 17 00:00:00 2001 From: drakeet Date: Mon, 12 Oct 2015 11:15:15 +0800 Subject: [PATCH 53/54] Merge codes and improve launcher icon. --- app/build.gradle | 4 ++-- app/src/main/assets/litepal.xml | 2 +- app/src/main/res/mipmap-hdpi/ic_incode.png | Bin 35877 -> 39188 bytes 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 49adf2d..2429687 100755 --- a/app/build.gradle +++ b/app/build.gradle @@ -14,8 +14,8 @@ android { applicationId "me.drakeet.inmessage" minSdkVersion 15 targetSdkVersion 22 - versionCode 32 - versionName "1.3.2" + versionCode 33 + versionName "1.3.3" } packagingOptions { diff --git a/app/src/main/assets/litepal.xml b/app/src/main/assets/litepal.xml index c6b6fdd..21b5e5b 100755 --- a/app/src/main/assets/litepal.xml +++ b/app/src/main/assets/litepal.xml @@ -1,7 +1,7 @@ - + diff --git a/app/src/main/res/mipmap-hdpi/ic_incode.png b/app/src/main/res/mipmap-hdpi/ic_incode.png index 80934ebb578e236d916d7c35245144973420e276..4ab520e92b5df88eb3e2b59f44a7f865d2191d77 100644 GIT binary patch delta 22568 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%0DPx24YO?t)e5%I_e` zre-!F3kBO&07z=9w;RA)44#2!2P}P`nRy=J+_JOtP(1d2yP%3n8*pFKE~N<>V43_P zpGTg(E9bRIHVL52l!vp4=o#>pvLb95A2ok6Ub|>BMl+*r60KwedW_j~rH_K&tAF#s zq(9!Kt89`um@d)k*GQSUGLU$-C;I!tbk}=JTPr!6n>Pip6oeJS=&&dmNG6Pq8r-l6 z!KT5ghbVQbUkQLr4>&JA@k^w<{?8<3k>l;DXkX1U)}?4PE_!R$T>N-e=ILtDly8Y2 zJP)5${y=AfQZ0kl3z_OhYk;$PX~B!a-Hs9eCZH1H--DR`1;2eaYhvmk5s&BpYMmh z;gyVXoiSg=VO(}@cq%+Rb#{iAgh4Tk%i;ML!5wdP!C>%m)PpEt*QqqT>b{Va%E#Uw zvaNQ%>T?$B-0H{eijSCfzEze0X++OMd@sF!0vx8S=MGD3sJaS*#>`ayi>6-#FL{%(NNFXH=k zDH=7BdBhfIs{Ahfz(PLkvJxY5n=|j0ta*|$?-qXd4nDl>CjRL@>lr8%-%`y;5{&%F z`ECO@CAT|pb^L;^lRN3+JI)Kwe`bdssP$W6Fu#>$b27U5u2=OWd+VCrV8iD|Ubxc_ zwtImA;cV!{1cbo?&pogktdjxpAvAl2-B2)NkIPEz%vO>!@fhuu%gJm2R@!e)ZU|3) zPkZyxa9iN^@7`o)E*g+K)}Wl}kQO3EP?eO$h#eFM$#1FEF%p0(Z{w^az53y3SS z0F;eSeHKQ2EI^2&Q>;oD9mEJky>qOKpl|!2l+SE$xb}uZyYnJQFrgACe%Sm~Z(YVx zRSiuvsa^OzaFhuG`Y@vn10=(_hJwmEjeytvhrwiP8%95P6!7*cD%go$o{1}YjL=+q zETQsB^(_dbV!wG2_$g?zx$58d2ZRiN##e<&|;`s#1qzac^`I~)qmcjD*jYwuw$BZ>Nc@uk!lLko;jP#8F delta 19565 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 Date: Mon, 12 Oct 2015 11:27:20 +0800 Subject: [PATCH 54/54] Update gradle version to 1.3.0. --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 9405f3f..1b7886d 100755 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:1.2.3' + classpath 'com.android.tools.build:gradle:1.3.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files