I've found myself driving quite a bit recently, and I often use the default android car dock. I've tried other dock apps with more features, but when driving, just the basic functions provided by the android app are usually the best. The problem I've encountered is that even though the car dock buttons are enormous, I still have to look at the phone to find the button location on the screen and accurately press it. I figured that if a dock were created that assigned functions to directions instead of buttons, the user could simply swipe across the screen to select something without ever looking at the phone. I have been testing this app on my daily commute for about 2 months now, and I think I have reasonably achieved my goal of creating a simple car dock that keeps the user's eyes on the road instead of promoting distracted driving.
The Car Dock has a few issues that may cause problems for some users:
- Media Screen Buttons: The media buttons act as though your phone has hardware play, next, etc buttons, allowing you to use your own media players. More than one media app may try to respond to these buttons. Current workaround: try to use media app settings to control response to hardware media buttons or uninstall apps.
- Compass Showing Wrong Heading When GPS is Disabled: When the GPS is disabled, the app will try to align the compass heading using the device's magnetic compass sensor. This sensor may indicate the wrong direction if not calibrated in the phone location settings. It can also be confused by metal and electronic fields in the car. If this annoys you, disable the compass in the settings.
I'm glad I was able to provide a useful utility to those it worked for, but with limited time and increasing updates to android breaking the app, I've decided to stop considering future updates to Status Bar Settings.
For those (like me) who still want the functionality of buttons in the notifications, I've found widgetsoid can be configured to provide the same functionality. This app is more powerful and configurable than the one I wrote (and, quite frankly, it looks better) - it just takes a little while to set it up to display in the notification bar. As far as I know, widgetsoid is also compatible with more platforms than my status bar settings app.
In order to configure widgetsoid to show up in the notification bar, open the general settings (by opening the app through the launcher) and go to the Notification tab.
Uncheck the Open popup option. This should allow the buttons to work as mine was designed to.
Go to a home screen and add a widgetsoid widget. The "Switcher" layouts are the ones that include just toggle buttons. As far as I can tell, it is also the only widget you can place in the notifications bar.
Once you select a widget layout, the widget settings will open. Add the buttons you want to the widget (different categories of buttons are grouped by the tabs at the bottom).
Select the advanced tab and check the boxes labeled "Notification" and "Widget Invisible" to move the widget entirely to the notification bar (where settings belong)! Selecting "Notification" will prompt a profile name. Anything works here.
Select the Apply tab.
This should allow the app to place the toggle buttons in the notification bar. If you want to change the appearance, buttons, etc for the widget, simply open the general settings, select the widgets tab and then select the widget you want to change. Just remember to use the Apply tab to save any changes.
If it turns out that future android releases break widgetsoid and no other utilities take its place, I may try to revive this project. Hopefully future versions of android will make it easier for users to access their settings, but this is not the trend.
Although I don't foresee myself with a great deal of time in the upcoming months to devote to improving this app, I would like to make some updates to the status bar settings:
New Icons - many have complained that the visual design of the app is bad. They are right. I made the icons the wrong size, so they appear fuzzy when viewed. I plan to update the current icons to a higher-res version, that will hopefully make the app look more polished.
New Themes - in the last update, I finished the internal configuration to make all of the icons fully changeable, so that any condition can be remapped to different resources. If anyone would like to contribute artwork or inspiration for different icon designs, I could incorporate these with just a few lines of code.
Long Press Actions - I want to be able to do this for buttons that have settings menus associated with them, so that long pressing the GPS button would bring up the location settings. This has two problems associated with it. (1) I can't seem to assign a long-press action to a notification because it has no persistent activity related to it - if someone knows how to do this and can explain it to me, that would be awesome. (2) The settings window may open behind the notification, and the result of the action may not be apparent to the user.
Changing the Order of Buttons - This is difficult, and the way I've written the app so far, would need to be revised. I think it is possible, but would likely take more time than I have available.
Adding more Functions / Custom Actions - Adding more functions is not very difficult, what makes me hesitant to do this is that I would then need to design icons for these new buttons and add update code, meaning that every button would require many lines of code added. This would not be hard in most cases, just time consuming. As far as custom functions, that is a bit beyond my capability at this time. This is another update where I would need considerable time to research and test solutions.
This project started out as a whim when I was looking at the dev guide covering the notification system. Having never used the notifications, I built a test program and kept going from there.
The app is pretty simple, with few options. Most of the function of the app is based off of an open source project that created Dazzle widgets:
These guys are much better with android than I, and it was only through studying their code that I was able to toggle the data connection and update the screen brightness.
Working out of the notification status bar brings a few challenges to this project, one of which shows up in the way the app closes. The initial release of the app suffered from force closes, where a task manager or memory shortage would remove the program from memory, erase some of the global variables, and when the app recognized this condition, it would close to avoid crashing. I chose this option initially, because I thought some users may want to close the app from a task manager to free up memory. This led to unintentional closing, however, so the system was redesigned. Now, the app runs on startup (in the background) and then closes itself if the user has deselected the run on startup option. Once the app is started by the user, a few receivers that listen for system changes run in the background (along with the notification) and if their supporting services are terminated, they will be restarted at the earliest convenience. Due to this, there is no easy way to remove the app from memory if required, so, I added the force close button to the settings view.
This release of Settings Widget represents a major overhaul of the entire widget. Over winter break, I had an opportunity to review the code and tried to figure out why the 1.01 update did not solve the null pointer error. I eventually realized that I had made a fundamental mistake by making the services sticky, but not considering the consequences of this decision. The null error arose when a widget service was stopped to make room for other services, then restarted without an intent. Once I discovered this mistake, I found that I could make several changes oriented around the way services were called that would make the widget more memory-efficient.
The 1.1 release should prevent the null pointer error by never making any services sticky. It reduces the number of redundant services and allows the services to eliminate themselves from memory when no longer needed (usually less than a second after it is called in the first place), which should reduce the memory footprint and resources required by the widget. By consolidating some services, I was also able to make the widget respond more effectively to general system updates, such as screen reorientations. Recognizing such updates more reliably should stop the widget from becoming unresponsive in some instances by ensuring that all associations are maintained when the widget is redrawn. This also makes the widget much more compatible with more systems and launcher replacements (I am currently running v1.1 on GoLauncher, on which v1.01 was unresponsive).
It is unfortunate that the widget required so much work at such a basic level, but I believe this new update resolves all the issues that caused unreliability and I will be able to use the lessons learned on future apps. If any further errors are discovered, please report them and I will try to resolve the issues.
This app is designed to help pilots/student pilots learn, practice, and review the 60 to 1 rule calculations that are used to provide quick approximations for many important inflight computations. This application walks through the computations by leaving spaces where the user can enter data. The answers are computed upon pressing the calculate button on each page. Long pages may have multiple calculate buttons between different calculation methods or steps for convenience.
Included calculations in version 1.0:
Crosswind - Provides headwind and crosswind components of wind conditions entered
Descent by Distance - Determine angle of descent and VVI
Drift - Calculates the drift correction angle that will be required based on crosswind and TAS
Lead Turns - Prevent overshooting radial and arc intercepts by calculating the lead turn
Timing Correction - Two methods to determine required speed change to meet a time on target
VDP - Allows user to determine an appropriate visual descent point from an MDA based on height above touchdown and desired descent angle
This update is intended to address the crashes experienced in 1.0. This update should allow the widget to fail more gracefully by handling the error, but does not increase the functionality of the widget. If an error is encountered that is addressed by this update, the user should receive a message rather than a complete widget failure. As previously mentioned, this is a side project and works on the Droid 2 (the primary development platform), and still functions fine for me, so unless I can easily determine the source of the error, another update is not expected.
For information regarding the operation of the widget, please reference System Widget 1.0
. The operation of this update is identical, it merely adds some extra error-catching capability.
There is a null pointer exception affecting about 2% of users. This error is very consistent, and is always encountered at the part of the code that handles button presses. I didn't intend to do much bug fixing in this project, but due to the consistency of the bug, it may be an easy fix. At this point, there is nothing immediately apparent in the code that would cause the problem, so I think it may be a phone issue. As previously stated, this project has only limited testing and it is difficult to fix a bug if I cannot replicate the situation that causes the problem.
If you encounter this problem, please submit a bug report and the model of phone you are using so that I can try to fix this issue.
After very limited testing, it appears that Settings Widget works just fine on the Droid Incredible. The auto-brightness and sound mode buttons operate as expected on this phone, and the data button links to the sync settings, which will allow the user to disable background data and auto-sync. Unfortunately, this is not the correct page for fully enabling or disabling the data connection, limiting the usefulness of this button. This discontinuity is due to the fact that the Motorola based phones have moved the data connection settings into the sync menu page.
System Widget is in the market now. This widget was a side project mostly coded on the weekends, and the code reflects that. This is my first contribution to the market, but as a side project, I don't expect to improve this widget as long as it continues to work for me. It has been tested pretty thoroughly on the Motorola Droid2, but fully functioning compatibility with other devices is unlikely. That being said, feel free to try it out if you are looking for a widget to change settings.
This widget provides an interface to change some useful settings and display the status of the system data connection, ringer mode, and auto screen brightness. Unlike the Power Control Widget that is preloaded on most android phones, this widget automatically updates when a system setting is changed (with the exception of brightness control since the system does not appear to broadcast that change in state). Due to android's permission systems, the data button does not actually change any settings on its own. Instead, it opens the system data settings menu (or is likely to just break if using a non-Motorola phone).
| || Data Settings:|
Data connection is disabled
Data connection is enabled, but background data is disabled
Data connection and background data enabled
| || Ringer Mode:|
Vibrate only mode
Ringer on (vibrate depending on your settings in the sounds settings menu)
| || Auto Screen Brightness:|
Auto screen brightness off, screen brightness below 30 (out of 255) - dim
Auto screen brightness off, screen brightness above 30 (out of 255) - bright
Auto screen brightness enabled
*Pressing auto screen brightness only toggles the auto brightness on and off, the brightness must be set through the display settings menu