Hi Folks.
I've been using CyanogenMod11 for a few weeks now, and i was very happy when i realised that it has WhisperPush (TextSecure) integrated. However, a few questions came up when i started using it.
1. There seems to be no way of finding out whether or not my Messages are encrypted or not (when using the standard SMS App). Additionally, there seems to be no was of finding out if Messages were sent as SMS or as an online Message. I chatted with a friend of mine, who is using Textsecure with Android (not CM), and he told me that we were chatting via online messages, while i couldn't see a difference to normal SMS.
I would like to see if my messages are encrypted, and whether im communicating via sms or via data connection. I would like to know that before i send my Message, because otherwise, i might send important data via an unencrypted connection. Is there any way to do that, or will this feature be implemented in future versions? Is this even possible, to show a certain symbol when using my normal SMS app oder Google Hangouts or whatever?
2. As i can't find out if my Messages are encrypted or not, i also can't find out for which applications whisperpush is used. I read that it works with sms apps and with google hangouts, but could i theoretically just use any App with it? Could i, for example, chat encrypted with any Jabber client via whisperpush? (I know that i can also use OTR with Jabber, but it would be very convenient to just use all my apps and have them automatically encrypted by whisperpush).
Thanks for answers =)
Gasp0de
Problem:
Occasional text messages are not "received". Just as a rough number, I'd say over 90% of SMS sent to me, I get. But I have been able to narrow down the problem with the missing ones.
I only noticed the issue because while at home or when I have headphones in, I have tasker set up to announce the name of the sender of a new SMS to me. Once in a while, it would say the name, but I wouldn't get a new text notification sound nor would I get a new message in any messaging app.
Phone info:
Nexus5
Android 4.4.4 rooted
Stock rom, kernel, etc.
Carrier is T-Mobile
Messaging apps used (not at the same time) are Hangouts, Smitten SMS, Google Messenger
Useful information:
1. This is NOT an iMessage issue. Missing messages have come from both android and apple phones. The last time this happened was today from a S5.
2. This is NOT a carrier issue. The message is received by the OS.
3. This is NOT an app issue. The message is not picked up by stock messaging app or any others.
4. This is NOT a formatting/encoding issue. I have people resend the message (copy/paste) and the resend always goes through and is shown in the messaging app.
5. This is NOT a group messaging issue. These are one on one conversations.
6. The missing message does NOT show up in /data/data/com.android.providers.telephony/databases/mmssms.db.
7. If I set up Tasker to log all incoming SMS, it IS able to log the missing message AS IT IS RECEIVED BY THE OS.
My theory:
Tasker can catch these missing messages, but the mmssms.db won't see them. So that tells me that somewhere between the phone getting the message and the phone logging it to the mmssms.db to be read by messaging apps, there is a failure. I do not know Android well enough to precisely say where this failure is happening. Because Tasker isn't logging them as they hit the DB but prior to that.
If someone more knowledgeable with how the android os handles SMS wants to chime in here, that would be great.
Anyone else experiencing the same? Any additional ideas here?
I am experiencing the same issue and searching to find a solution.
Android 4.4.4
Motorola Moto G
Cricket is my carrier
Did you ever find a solution? Thanks!
This module enables the use of other SMS apps to send and receive messages through Google Voice. When this module is activated, any SMS messages sent will be rerouted through Google Voice, and any messages that are received by the Google Voice app will be displayed in SMS apps.
Setup:
Download the APK and install.
Open the app, enable it, and select the account you want to use.
Open Xposed, activate the module, then soft reboot.
You will get a notification to sign in to authorizing the app to access your account. Tap the notification, then tap allow. For some reason the notification is not dismissed automatically; you can dismiss it manually.
If the module does not work at this point, try soft-rebooting again.
Known issues:
This module will only work with the old Google Voice app, version 0.4.7.10 or lower. If you already updated to a newer version, you must uninstall it and sideload the old version. You can find the latest working version here. Once you've downgraded, open the Play Store and set the app not to auto-update, so you won't run into the same issue later. This is fixed as of v3.1.2.
When I had the default SMS app is set to the AOSP Messaging app (com.android.mms, not to be confused with Google Messenger), the module would not work for outgoing messages. On one device, incoming messages did not work either. I was using version 5.1.1-720affab4e. I'm still not sure what causes it.
On my S3 test device, I sometimes experienced a crash of the system process on boot. This did not seem to affect the functionality of the module.
There is a known issue with Xposed reading SharedPreferences in certain situations, due to file permissions issues. With this module, this would cause that disabling the module from within its own settings would not help, and the only option would be to deactivate the module from inside Xposed Settings and soft-rebooting. I added some code to work around this, however it's possible that it could still occur. This is fixed (hopefully) as of v3.1.2.
Old issues:
Many of the old bugs present in the original XVoice+ are still in this version. These include:
Emojis may cause issues. (This issue should be fixed for incoming messages as of v3.2.0).
There is no support for MMS
Occasionally, messages may show up with the wrong timestamp, there may be duplicate messages, or there may be a delay before the messages appear.
Google Voice 5.0+
As mentioned above, the module will not work with the new updates to Google Voice. This is because they completely rewrote the code for the app, which would require XVoice++ to be rewritten as well to properly hook it. This is further complicated by the fact that Google obfuscated the code, making it much harder to figure out what is going on. Additionally, it is probable that with every update the code will be obfuscated diferently, requiring XVoice++ to be patched every time to support the new update. Since the whole point of this module is to replace the functionality of the Google Voice app, and it is functional with the old version, I will not be working on supporting the new versions of the app at this time. This is fixed as of v3.1.2.
Devices tested on:
Verizon LG G3 (vs985) running a custom build of CM 12.1
Sprint Samsung Galaxy S3 (d2spr) running CM 13.0 (11/17/2016 nightly) without phone service
Acknowledgements:
Koush
CM team
@runnirr
@B2OJustin
@iHelp101
Jake Hamby (a former engineer at Google, who helped maintain the internal SMS processing code for Android) for providing a lot of information about PDU structure and processing, and patiently answering my questions.
Xposed Repo
XDA:DevDB Information
XVoice++, Xposed for all devices (see above for details)
Contributors
BehindTheMath, @runnirr, @B2OJustin, @iHelp101
Source Code: https://github.com/BehindTheMath/XVoicePlus
Xposed Package Name: io.behindthemath.xvoiceplus
Version Information
Status: Stable
Current Stable Version: 3.2.1
Stable Release Date: 2017-05-08
Created 2017-02-15
Last Updated 2017-05-08
Reserved
Reserved
Nice to see something happening with this. I more or less abandoned it after switching over to Hangouts. What are your plans for it though? I'd probably consider hooking into Hangouts for any future development.
Edit: Btw, this latest source has also been tested and confirmed working on Nexus 7 stock (without cell service) and at least one other phone with a touchwiz based rom + smart watch (Don't recall which kind). Though rom updates may or may not have changed that since then.
B2OJustin said:
Nice to see something happening with this. I more or less abandoned it after switching over to Hangouts. What are your plans for it though? I'd probably consider hooking into Hangouts for any future development.
Edit: Btw, this latest source has also been tested and confirmed working on Nexus 7 stock (without cell service) and at least one other phone with a touchwiz based rom + smart watch (Don't recall which kind). Though rom updates may or may not have changed that since then.
Click to expand...
Click to collapse
Thank you for the feedback.
Truthfully, in my humble opinion, this app is mature. You guys have done a fantastic job of taking Voice+ and adapting it to a new platform. I only needed to fix the issues caused by new or changed Android internal code. Unless someone has a specific feature request, I think it's ready for a stable release.
That being said, there are a few things I would like to look into at some point in the future. The main one is the viability of supporting the new GV app. I never liked Hangouts. It was slow when it was first released, and it's still slow and buggy. 90% of my contacts use Whatsapp, and the GV app along with XVoice+ helped me with the handful that still use SMS. The only reason I still have Hangouts installed is to manage multiple accounts, and for VoIP calls. Now that the new GV app supports the former, and it looks like the latter is coming at some point, I would love to have XVoice++ support it so I could get rid of Hangouts entirely.
I am happy to see you figured out what I was unable to. In terms of Google Voice 5.0 you could in theory hook GCM messages directly. The class is "com.google.android.gms.gcm.GcmReceiver". You would use the same onRecieve hook already in the module. I have never seen GMS code obfuscated, so you likely would not have to worry about it. Even if a GCM message for some reason is not a text message the module would be able to filter it out (It checks the Intent contents).
iHelp101 said:
I am happy to see you figured out what I was unable to. In terms of Google Voice 5.0 you could in theory hook GCM messages directly. The class is "com.google.android.gms.gcm.GcmReceiver". You would use the same onRecieve hook already in the module. I have never seen GMS code obfuscated, so you likely would not have to worry about it. Even if a GCM message for some reason is not a text message the module would be able to filter it out (It checks the Intent contents).
Click to expand...
Click to collapse
That's an interesting approach. I'll have to look into it when I have time.
THANK YOU!
OP first of all thanks for doing this!
Second I have a question, I'm still running CM11, because I use Voice+, the original utility that XVoice+ was based on. I have updated my google voice app to the latest version and Voice+ still works, I'm not sure how. You might consider looking at the source code for Voice+ and see if the type of hooks it uses are possible with xposed.
Again thanks for what you have already done.
KnightTim said:
OP first of all thanks for doing this!
Second I have a question, I'm still running CM11, because I use Voice+, the original utility that XVoice+ was based on. I have updated my google voice app to the latest version and Voice+ still works, I'm not sure how. You might consider looking at the source code for Voice+ and see if the type of hooks it uses are possible with xposed.
Again thanks for what you have already done.
Click to expand...
Click to collapse
Voice+ works for you for incoming messages too?
Edit: I looked through the source for Voice+. They listened for the notification from the GV app, and then canceled it, which meant you had the notification flash for a second before being intercepted by Voice+. One of the benefits of XVoice+ was that you could disable the notifications completely in the GV app, and XVoice+ would intercept the message anyway.
iHelp101 said:
I am happy to see you figured out what I was unable to. In terms of Google Voice 5.0 you could in theory hook GCM messages directly. The class is "com.google.android.gms.gcm.GcmReceiver". You would use the same onRecieve hook already in the module. I have never seen GMS code obfuscated, so you likely would not have to worry about it. Even if a GCM message for some reason is not a text message the module would be able to filter it out (It checks the Intent contents).
Click to expand...
Click to collapse
I looked at the GV 5.0 code some more. I couldn't figure out how to hook com.google.android.gms.gcm.GcmReceiver, but I was able to hook the com.google.android.apps.voice.backends.gcm.GcmListenerService, which is the entry point for the message in the GV app. It appears to be very easy to intercept the messages from there. The issue is, since GV 5.0 added support for multiple GV accounts, there's no easy way to tell which account the message is for. The GCM message comes with a user_hash field, but it's just a hash, and I can't find a list of corresponding accounts in SQLite or in SharedPrefs. I presume it's decoded somewhere in the app, however, the only code that references it is obfuscated. It would technically be possible to implement a setup routine which would send a test message and grab the user_hash for that message, but that's a bit inelegant.
BehindTheMath said:
I looked at the GV 5.0 code some more. I couldn't figure out how to hook com.google.android.gms.gcm.GcmReceiver, but I was able to hook the com.google.android.apps.voice.backends.gcm.GcmListenerService, which is the entry point for the message in the GV app. It appears to be very easy to intercept the messages from there. The issue is, since GV 5.0 added support for multiple GV accounts, there's no easy way to tell which account the message is for. The GCM message comes with a user_hash field, but it's just a hash, and I can't find a list of corresponding accounts in SQLite or in SharedPrefs. I presume it's decoded somewhere in the app, however, the only code that references it is obfuscated. It would technically be possible to implement a setup routine which would send a test message and grab the user_hash for that message, but that's a bit inelegant.
Click to expand...
Click to collapse
Interesting, it is a nice discovery to have been made. Google has gone extremely with obfuscation recently. I also didn't realize they added multi-account support. My bad for giving any false.
iHelp101 said:
Interesting, it is a nice discovery to have been made. Google has gone extremely with obfuscation recently. I also didn't realize they added multi-account support. My bad for giving any false.
Click to expand...
Click to collapse
No, I think your idea is the best option for supporting GV 5.0. We just need to figure out how to identify the accounts. I'm going to try to dig through the code some more.
It has been a while since I've played with Xposed but when I get a little extra time I'll see what I can come up with. Figuring out exactly what to hook has always been the troublesome part though. If it turns out you do need to make use of the account hashes, I'd suggest looking lower in the callstack rather than higher. ie; Find the source of the hashes instead of the final target. You can then map those to usernames as soon as they're generated.
v3.1.2
I've released a new version, v3.1.2. The primary new feature in this version is support for Google Voice 5.0+.
I spent some more time poking through the GV sources, and I found that the list of accounts and corresponding user_hashes are stored in a Base64-encoded field in SharedPreferences called "registered_accounts". I added some code to decode the list and check the incoming message against user_hash of the account we want.
I also released the module on the XPosed Repo, so now it can be installed through the Xposed Installer.
Unfortunately, I lost the password to the signing key. I created a new key, but this means you will need to uninstall the old version before installing the new one.
New user. Tested on Voice 5.0+. Works flawless so far! This is excellent!
I have no idea why Google decided to NOT allow the Voice 5.0+ to be default SMS app.......but this module works around that issue AND allows me to use my fav texting app in its place. Thank you!
Could you explain the Sync settings a bit more. I just want to understand better. For example, why did you include those settings in the app Are there battery/data implications to using them? What is the downside to disabling all the sync settings?
Stupifier said:
New user. Tested on Voice 5.0+. Works flawless so far! This is excellent!
I have no idea why Google decided to NOT allow the Voice 5.0+ to be default SMS app.......but this module works around that issue AND allows me to use my fav texting app in its place. Thank you!
Could you explain the Sync settings a bit more. I just want to understand better. For example, why did you include those settings in the app Are there battery/data implications to using them? What is the downside to disabling all the sync settings?
Click to expand...
Click to collapse
When you send a message through XVoice++, XVoice++ doesn't put that message in the SMS database, the SMS app does. So if you send a message from another source, for example, the GV app or webapp, that message would not show up in your SMS app. Sync checks the master message list on GV's server to see if your device is missing any messages, and if it is, it sticks them into your SMS history.
It also has the benefit of catching any incoming messages that might have been missed. XVoice++ isn't perfect, and once in a while it won't catch an incoming message, sometimes because the GV app was sleeping (although I suspect this issue might be eliminated with GV 5.0+, since they switched to GCM). Enabling Sync will force XVoice++ to manually check if there are any new messages.
I personally have always had all the Sync options enabled, and the interval set to 15 minutes, and I haven't seen any issues. You can try it for yourself and monitor it. I don't think there's any reason it should impact battery or data usage, since it's just a quick request to GV's server. When I look the logs, it never takes more than a few seconds.
BehindTheMath said:
When you send a message through XVoice++, XVoice++ doesn't put that message in the SMS database, the SMS app does. So if you send a message from another source, for example, the GV app or webapp, that message would not show up in your SMS app. Sync checks the master message list on GV's server to see if your device is missing any messages, and if it is, it sticks them into your SMS history.
It also has the benefit of catching any incoming messages that might have been missed. XVoice++ isn't perfect, and once in a while it won't catch an incoming message, sometimes because the GV app was sleeping (although I suspect this issue might be eliminated with GV 5.0+, since they switched to GCM). Enabling Sync will force XVoice++ to manually check if there are any new messages.
I personally have always had all the Sync options enabled, and the interval set to 15 minutes, and I haven't seen any issues. You can try it for yourself and monitor it. I don't think there's any reason it should impact battery or data usage, since it's just a quick request to GV's server. When I look the logs, it never takes more than a few seconds.
Click to expand...
Click to collapse
Thank you for this explanation. So now I'd like to test how well these sync features work. if I understand correctly, I could test this by simply sending a text using GV app directly.....Then open my SMS app and check to see if my SMS app actually shows this newly sent message. The Sync features directly affect how and when SMS app grabs new Incoming/Outgoing GV messages. Am I understanding correctly?
Stupifier said:
Thank you for this explanation. So now I'd like to test how well these sync features work. if I understand correctly, I could test this by simply sending a text using GV app directly.....Then open my SMS app and check to see if my SMS app actually shows this newly sent message. The Sync features directly affect how and when SMS app grabs new Incoming/Outgoing GV messages. Am I understanding correctly?
Click to expand...
Click to collapse
Correct, besides for when you sent an outgoing SMS from the device itself, since then the SMS app stores it right away.
I'm so happy to see this working! Great job :victory:
one bug I've noticed, it seems to choke on accented characters. try sending " õœôöø ", for me it force closes both Voice and my SMS app