Wednesday, July 20, 2011

Smart Ring Control for Android

Smart Ring Control is setting your phone ring volume depending on its position.  You can set different ring volume levels for when the phone is horizontal with the screen up, when the phone is horizontal with the screen down (on the table), and when the phone is vertical (in your pocked, handbag, etc.).

The app uses the accelerometer sensor of the phone to recognize if the phone is horizontal or vertical. The Pro (paid) version also recognizes if the phone is horizontal with the screen up or the screen down.

This ring volume control application is similar in function to PocketMode for iPhone and the Pocket Mode option of the latest HTC phones. But it uses the accelerometer sensor instead of the proximity sensor (which PocketMode uses).

You can set the Pro version  so when ring volume is changed (via volume rocker buttons), it pops up and allows you to adjust the ring volume for each phone position. Or you can lock the ring volume and not allow the volume rocker buttons change it by accident. Please  note that some third party applications may also change the ring volume (some camera applications tend to control the shutter volume when taking pictures), hence the triggering the Smart Ring Control application popup window.

Additionally, you can set the phone to be muted for a period of time from within the application. For example, when you go to a movie, you can set the phone to be muted for 2 hours, and it will enter silent mode for 2 hours. Right after you finish watching the movie, the phone ring volume will be automatically restored to the previous settings. Or you can go to sleep and turn off the ringer until the morning when you wake up.

Below are screenshots of the application windows, and description of each of the control options it offers.

The Basic tab

1. Slider to set the volume when the phone is horizontal with the screen up.*
2. Slider to set the volume when the phone is horizontal with the screen down.*
3. Slider to set the volume when the phone is vertical.
* - The free version has one slider only - for when the phone is horizontal, regardless of screen up or down.

4. This button mutes the phone for the time specified next to the button.
5. This clock specifies for how long the phone will be muted.
6. This button mutes the phone permanently, until you un-mute the phone.
7. This slider sets the time the phone will be muted. By dragging it left or right you increase or decrease the time the phone will be muted. The free version can mute the phone for up to 8 hours, while the Pro version can mute the phone for up to 12 hours.
8. The "-" and "+" buttons are used for fine tuning of the time the phone will be muted.


The Advanced tab

1. This button is used to close the application.
2. Vibrate when phone is horizontal with the screen-up.*
3. Vibrate when phone is horizontal with the screen-down.*
4. Vibrate when phone is vertical.
5. Vibrate when muted. Please note that this checkbox is for only when muting the phone via this app! If you mute the phone via the volume rocker or power buttons, it will vibrate or not depending on your preference in the sound settings section (system settings>sound).
6. Show or hide the timed mute controls on the home screen.
7. Keep selected to have the the app automatically start on phone boot. This way you won't have to start the application manually when restarting your phone.
8. This drop down defines how to treat the volume rocker buttons clicks. For example, you can lock them so you won't accidentally change the ring volume when handling your phone. Or you can set the volume rocker buttons to adjust the horizontal ring volume. This way you can always use the volume rocker buttons to adjust the ring volume when your phone is on your desk and it'll still ring loud enough when in your pocket so you can hear it.

* - The free version has one option only  - for when the phone is horizontal, regardless of screen up or down.

Below options are available in the Pro (paid) version only:
9. Detect Phone Position - this defines when the phone position should be detected. Options are on incoming call/message, or on every 5 seconds or 1/5/15 minutes. Checking the position on regular intervals may help with some phones that cannot determine the position instantly. They usually change the ring volume after the phone started ringing, which is annoying. By setting to check the position on regular intervals, you will ensure that when the phone starts ringing, there are no surprises.
10. Quiet ring on pickup - as the name suggests, this option lowers the ring volume once the phone is picked up from a table or desk. Or in other words, when the phone starts ringing, it monitors if the orientation is changed from horizontal to vertical and if there is such change - lowers the ring volume.
11. Use this option to detect when the phone is in your bag or pocket and force the phone to ring using the vertical ring volume level. Sometimes the phone is horizontal when in your bag, so you may not hear it. Use this option to make it ring louder even if it's horizontal in your bag. This option overrides option #14, as they are contradictory. This option also means that your phone will always detect proximity when your phone is with the screen down. So do not use this option if you  want to have different ring volume for when the phone is with the screen down.
12. Select this option if you want the SMS notifications volume to behave like the ring volume. I.e. - to change the SMS notifications volume depending on the phone position.
13. Run the service in the foreground. This will ensure the service is not killed by Android. This is available for Android version 2.0 and above. If a service is not running in foreground mode, Anbdroid may kill it if other applications consume too much of the phone memory. By running the Smart Ring Control service in foreground, you ensure your phone will always control its volume based on its position. Additionally, if the application is not running in foreground, Android would suspend it more when the phone is on standby, and as result there will be slight delay from the moment the phone starts ringing, till the moment the volume is adjusted. The application may even not function properly on some phones if it's not running in foreground. So whenever you have problems - try running the application in foreground. There is a slight drawback for this however - you will always see the Smart Ring Control icon in your notification bar. Some may not like this, and if they are sure their phone is never low on memory, they can use this option to disable the foreground mode.
14. Set volume to lowest when the phone is unlocked. Some may find it useless to ring loud the phone when its unlocked. If the phone is unlocked it usually means that you hold it in your hands and can hear it pretty well.
15. Lower volume immediately when set horizontal while ringing. This option allows you to lower the ring volume by setting your phone horizontal within 5 seconds since it started ringing. For example you are holding the phone in your hand, and it starts ringing unexpectedly. You can lower the volume immediately by positioning the phone horizontal.
16. Lock application orientation to portrait mode.
17. Open this application with volume rocker buttons. Be aware that some applications change the phone  volume (like camera applications turning off the phone sound so the shutter sound is not heard). These applications will trigger the Smart Ring Control application, and bring it into focus. This is because the only way Smart Ring Control can determine if the volume rocker buttons are pressed is by monitoring the volume changes. Unfortunately, Android does not provide a way for developers to determine if the volume rocker buttons are pressed.

WARNING:  You should disable any setting/application that changes the ring volume. For example some phones have an option/application that gradually increases the ringer volume. If this option is not turned off, you'll experience for example high ring volume, then lowered by the option, and then gradually increasing the ringer volume.  

FAQ

Q: Can you make an option for turning off the icon on running apps from the status bar?
A: Unfortunately, the app just won't work if the icon is not there. Read on to see why. The nature of the Smart Ring Control application is that it must monitor the incoming calls at all times, so it can adjust the ring volume properly. To ensure that Android won't kill the application when low on resources, Google requires that icon and notification to be visible to the user. I guess it's made this way for security reasons - to have the user know when an app is always running.

Q: Why does SmartRingControl want access to my PHONE CALLS  and MESSAGES?
A: In order for the application to preserve the battery, the accelerometer sensor is activated only when there is incoming call or SMS is received. It determines the phone position in a fraction of the second, and adjusts the ringer volume according to the settings, and turns off the accelerometer sensor.

Q: Why does SmartRingControl want to PREVENT DEVICE FROM SLEEPING?
A: Some phones do not allow using the accelerometer sensor when the device is sleeping. Therefore SmartRingControl wakes the device while the accelerometer sensor is used, and releases the wake lock after it finishes with the readings. It usually takes less than a second, so it should not affect your battery.

Q: Why does SmartRingControl want to modify/delete USB storage content?
A: The application only uses this permission to store configuration data.

Q: Why does the phone start ringing with lower volume, and then increases the volume after a fraction of the second?
A: Since the application is designed not to drain your battery, it takes some milliseconds before the accelerometer sensor can be activated and the phone position detected. The application is designed to always set the phone ring volume to the lowest possible value when not ringing, so there is no chance that when the phone rings, the first couple of milliseconds it rings at the loudest possible level.

Q: Why there is around 3 seconds delay between my phone receiving a call and starting to ring?
A: This is related to the way Android handle services, and happens only if one of the volume sliders is set to 0. If you run the application service in the foreground, there will be no delay. But apparently if a service is not in the foreground, Android suspends it more than the other services, and it takes some time before it can be activated and the ring volume adjusted according to the phone position.

Q: How can I save the settings I make?
A: You don't need to save the settings. They are automatically saved each time you make a change.

Q: My phone starts ringing loud, and then lowers the ring volume. Why does it do that?
A: Some phones have an option/application that gradually increases the ringer volume. If this option is not turned off, you'll experience for high ring volume, then lowered by the option, and then gradually increasing the ringer volume. You should disable any setting/application that changes the ring volume.

Sunday, June 19, 2011

Pro edition changelog

2012-09-14 v.0.7.3 Some layout changes, improvements for vibration changes, fix for Samsung phones (Samsung phones will always start ring quiet and then increase the ring volume), speedier response for Samsung phones.

2012-06-19 v.0.7.2 Fixed a problem with the option to open the app when the volume rocker buttons are pressed.

2012-06-03 v.0.7.1 - ICS mute issue fix.

2012-06-03 v.0.7
- speedier position detection (which helps with some phones that won't change the vibration on/off after the phone starts ringing)
- fixed proximity sensor feature that didn't work for some Motorola phones.
- improved algorithm for accelerometer data filtering (filters spikes in accelerometer data due to walking, running, etc)
- added a new feature that allows you to select when to check for the phone position (on incoming call/message, or on every X seconds/minutes)

2012-04-08 v.0.6.1 - Fixed a bug on ICS(when volume rocker is locked) where even though the phone is muted, it will start ringing when someone is calling. Also a workaround is made for ICS not showing vibrate icon when the phone is put in vibrate only mode (at least for ICS 4.0.3 on Nexus S). A bugfix that addresses devices that fail to wake up the accelerometer sensor instantly. Now the first couple of accelerometer sensor readings are averaged, as to be more certain what the phone position is.

2012-01-13 v.0.6.1 - some Android 4.0 (Ice Cream Sandwich) bugfixes. Changed logging mechanism.

2011-10-08 v.0.6 - Added "Rate this app" button. Fixed a bug that caused changes in ring volume level after mute and then unmute. Fixed another bug that caused the status bar to say "Ring volume is based on phone position", even though the phone is in silent mode.

2011-09-17 v.0.5 - Added option to adjust or not SMS notifications volume. Added support for proximity sensor (to force non-leveled ring volume when in pocket or bag).

2011-09-13 v.0.4.1 - Added quiet ring on pickup option. Fixed notification error.

2011-09-05 v.0.4 - Added option should the app start on boot up or not. Timed mute controls are hidden by default with option to show them on the basic tab. Added drop down to define how to use the volume rocker buttons. Options are to lock the volume rocker buttons, or adjust the various ring volume sliders.

2011-08-20 v.0.3.2 - Fixed a bug that lowered the ring volume couple of seconds after the ringing started. Fixed a bug where some settings would not save.

2011-08-14 v.0.3.1 - Fixed a bug where vibration was on, even though it was turned off. It appears Android would not turn the vibration off if the phone started ringing with vibration on.

2011-08-01 v.0.3 - Added "Feedback" and "Help" menu options. Fixed a bug causing crash on old 1.5 and 1.6 Android devices. Mute time slider increased from 8 to 12 hours.

2011-07-30 v.0.1.2 - Fixed a bug where service crashed if the application was not resident in memory. Some default values changed.

Free edition changelog

2012-10-06 v.0.6 - Major new release. Integrated low pass filter for normalizing accelerometer readings. Optimized for faster response times so there won't be any delay between phone ringing and volume adjustment. Applied the new holo theme if you use Android 4+. Changed logging mechanism.

2012-03-19 v.0.5.5 - Fixed a bug on ICS(when volume rocker is locked) where even though the phone is muted, it will start ringing when someone is calling. Also a workaround is made for ICS not showing vibrate icon when the phone is put in vibrate only mode (at least for ICS 4.0.3 on Nexus S). It will now show the proper icon when mute or vibrate is selected. Improvements were made for detecting the phone position. Now the first couple of accelerometer sensor readings are averaged, as to be more certain what the phone position is.

2012-02-27 v.0.5.4 - A bugfix that addresses devices that fail to wake up the accelerometer sensor instantly.

2012-02-06 v.0.5.3 - Bugfixes related to Google Analytics code.

2012-01-17 v.0.5.2 - Some Android 4.0 (Ice Cream Sandwich) bugfixes. Changed logging mechanism. Added Google Analytics code.

2011-12-27 v.0.5.1 - Added bootup support for Android 4.0 (Ice Cream Sandwich). This means that the app will automatically start on phone restart if you select the "Auto start on boot up" option (so you won't forget to start it).

2011-10-08 v.0.5 - Added "Rate this app" button. Fixed a bug that caused changes in ring volume level after mute and then unmute.

2011-09-13 v.0.4.1 - Fixed notification error. Added uninstall button, with survey about uninstall reasons.

2011-09-05 v.0.4 - Added option should the app start on boot up or not. Timed mute controls are hidden by default with option to show them on the basic tab. Added drop down to define how to use the volume rocker buttons. Options are to lock the volume rocker buttons, adjust the leveled ring volume or adjust the non-leveled ring volume.

2011-08-20 v.0.3.2 - Fixed a bug that lowered the ring volume couple of seconds after the ringing started. Fixed a bug where some settings would not save.

2011-08-14 v.0.3.1 - Fixed a bug where vibration was on, even though it was turned off. It appears Android would not turn the vibration off if the phone started ringing with vibration on.

2011-08-01 v.0.3 - Added "Feedback" and "Help" menu options. Fixed a bug causing crash on old 1.5 and 1.6 Android devices.

2011-07-30 v.0.2.3 - Fixed a bug where application stayed on top of the lock screen

2011-07-30 v.0.2.2 - Fixed a NullPointerException bug

2011-07-30 v.0.2.1 - Fixed a bug where service crashed if the application was not resident in memory. Some default values changed.

2011-07-29 v.0.2 - Added button to the Pro version. Pro version is now live in the Android Market

2011-07-26 v.0.1.1 - Added support for small screens (240x320 pixels), and requiring accelerometer sensor.