Sunday, November 21, 2010

Droid X Multi-touch Keyboard for Samsung Galaxy S

The Droid X has a good keyboard that supports multi-touch. If you try to just install it on the Samsung Galaxy S phones (I’ve only tested the Vibrant), the keys are barley readable. The font size is very small.

device1before[1]

I have modified the original Droid X keyboard to specify a font size that can be seen on the Galaxy S phones.

device1[1] device3[1] device2[1]

While that was fine and worked great, I didn’t really like the light color of the keyboard. So I also created a version that is skinned to look like the stock Samsung Galaxy S Keyboard.

device4[1] device5[1] device6

I’ve also added alternate character selections to the “QWERTY” row. The characters are the Numeric row of a standard keyboard.

q1

Download from XDA Thread

Monday, October 18, 2010

The $1 Phone Dock

I was at the flea-market this weekend just looking for some deals on junk. I was skimming across a table and spotted this little gem.

2010-10-18 07.33.04 2010-10-18 07.33.13

This is a business card stand. my Samsung Galaxy S (Vibrant) fits perfectly both horizontally and vertically. The angle it sits is perfect for viewing video on the device.

There was only one on the table, I wanted at least 2 of them, so I could have one for work and at home. The best part, it was $1.

Friday, October 8, 2010

Stuck at Vibrant Screen after Update

I was stuck at the Vibrant screen after applying the official OTA update from T-Mobile the other day on my Samsung Vibrant. Most people were saying it was because of not running the Stock firmware, but I did not have any real “mods” to the OS, except for a GPS fix. I have also heard people that are running full, non-rooted, Stock firmware phones and still having the same issue.

I wanted to post the steps I took to fix my problem. Your results may vary, and I am in no way, shape or form, responsible for any problems that you may have because you read this and did what worked for me. I am just posting it because it worked for me, and others.

  1. Download ODIN3 1.0
  2. Download 512 PIT
  3. Download JFD tar
    • Note that all 3 of those are from the same thread. It also wouldn't hurt for your to read that post too.
  4. Open Odin, plug in your phone, then put it into download mode.
    • To expand on this because a lot of people were asking "how to put in download mode". The easiest way I found to actually do it, if you can can connect via ADB is to do the following:

      # reboot download

      If you can't get that to work, try how i mention below (phone off, battery out, hold vol+ & vol-), or try searching these forums for "vibrant download mode" you will find other things that "work" for people
  5. load the PIT file in appropriate area.
  6. load the .tar file in the PDA area.
  7. DO NOT check 're-partition'.
  8. Click start, let it finish.
    • At this point ODIN failed on me. and I got the "mobile-!-pc" image.
  9. Now, pull your battery and unplug USB
  10. I also took out the SIM and sdcard at this point.
  11. bring the phone to download mode again
    1. plug the USB back in (the phone should be off)
    2. Hold down vol+ & vol-
    3. Put battery back in
    4. press power
  12. re-run ODIN as mentioned above

Once ODIN completed successfully, it rebooted in to the Stock build. i let it do all that. then I shut it off, put the sdcard and SIM back in and booted in to recovery and restored from my Nandroid and I was back to the way it was right before I applied the update.

Friday, September 17, 2010

Resident Evil Inspired Windows 7 theme

This is a dynamic theme that uses my Picasa gallery for the images. The wallpaper is something I threw together while I was bored the other day. It is the eye of Milla Jovovich from the the first movie.

Here are some samples of the wallpaper. There are 11 total, some with and some without the Umbrella logo in the eye.

residentevil-hazel[1] residentevil-hazel-logo[1] residentevil-blue[1] residentevil-red[1]

Download the Windows 7 Theme

Thursday, September 2, 2010

Please vote for Droid Explorer

voteVoting has begun for the Community Coding Contest 2010. Please go support Droid Explorer and cast your vote for it today. There is approximately $20,719 USD worth of prizes that can be won. So please vote and have your friends vote and their friends too.

The voting “booth” is on the main page, on the right hand side of the page. Check the checkbox for Droid Explorer and then click the “Vote” button.

The other entry is just a short code snippet that is about 15 lines of code, counting whitespace. Droid Explorer is over 170,000 lines and used by thousands of people. Droid Explorer should have no problem winning this contest, and with your support it can.

Friday, August 27, 2010

Closing an activity by touching outside

I have been working on an application that I want to close an Activity when the user touches outside the activity. Like how you can set the setCanceledOnTouchOutside(boolean cancel) in the android.app.Dialog. The activity I want to close is themed like a dialog so there is an area around the activity that is not “active”.

I was able to achieve the desired effect by overriding the activity’s onTouchEvent(MotionEvent event). This method is called when a screen touch event is not handled by any views.

@Override
public boolean onTouchEvent ( MotionEvent event ) {
// I only care if the event is an UP action
if ( event.getAction () == MotionEvent.ACTION_UP ) {
// create a rect for storing the window rect
Rect r = new Rect ( 0, 0, 0, 0 );
// retrieve the windows rect
this.getWindow ().getDecorView ().getHitRect ( r );
// check if the event position is inside the window rect
boolean intersects = r.contains ( (int) event.getX (), (int) event.getY () );
// if the event is not inside then we can close the activity
if ( !intersects ) {
// close the activity
this.finish ();
// notify that we consumed this event
return true;
}
}
// let the system handle the event
return super.onTouchEvent ( event );
}

Now with that code in place, if the user touches anywhere outside of the dialog style activity, it will close.


Monday, August 23, 2010

SMS Backup

screenshot SMS Backup was always one of the first applications I had to install on my device if I had to wipe it clean. SMS Backup is released under the Apache License, Version 2.0 and developed by Christoph Studer. Development has pretty much been stale on this application for the past year.

That is where SMS Backup+ comes in. It is an improved version of SMS Backup, also released under the Apache License, Version 2.0 and developed by Jan Berkel. Some of the main differences are:

  • XOAuth support – Uses XOAuth to authenticate with Gmail, instead of you supplying your username and password
  • Faster – Does not base64 encode the emails before transferring
  • IMAP support – Doesn’t just work with Gmail (but defaults to Gmail), it works with any IMAP server
  • Restore – You can transfer sms messages back from email to the device.
  • MMS Not Yet Supported, but planned

This is one of the applications I like to place in the Ron Popeil category, because you can “set it, and forget it”.

You can install from the Android Market for free:

Sunday, August 22, 2010

Droid Explorer 0.8.7.2

explorer A new release of Droid Explorer was published early today. It fixes the big issue with the server not being able to start. It also has some little fixes that wont even be noticed by most people. For example the extended glass area now doesn’t cause the window to move in an unexpected ways.

I will now be starting to work heavily on the 0.9.x branch. This will open Droid Explorer to many more devices beyond the rooted with busybox devices.

If you have any issues with 0.8.7.2 please report them on the droid explorer project issue tracker so they can be addressed.

Downloads

Application DroidExplorer.0.8.7.2.x86.Setup – 14974K
Application DroidExplorer.0.8.7.2.x64.Setup – 15142K
Application DroidExplorer.0.8.7.2.x86.Standalone – 32911K
Application DroidExplorer.0.8.7.2.x64.Standalone - 33078K

Wednesday, August 18, 2010

Droid Explorer in the top 10!

logo-home

Droid Explorer is, as of the time I am writing this, the #9 most downloaded project on CodePlex. I think this is awesome and want to thank everyone that is using Droid Explorer.

I have been hard at work fixing the issue with the Droid Explorer Service. This is the service that identifies when a device is connected to the PC and shows the device in Explorer. I will have the fix in place by the end of the week and published.

I have also been working the Droid Explorer branch that will become the 0.9.x release. This will be the first version that will support non-rooted devices. The only requirement is that the device can be seen via ADB. All functionality may not be initially available to non-rooted devices, especially in the first versions of the 0.9.x releases. I will be refactoring more and more of the code to stop using custom communication via adb.exe and use the same communication methods that the DDMS uses. This will be accomplished by using MAD Bee.

I am also shooting for an update mechanism being built in to Droid Explorer in the 0.9.x releases. It is going to be a framework that will use an Atom feed to get available updates. It will allow multiple update locations, to allow plugins to specify their own update feed source. Updates can define requirements, minimum/maximum version, and how to “install” the updates. But that is a bit off from being incorporated, it may not make it in until a few releases in to the 0.9.x releases.

Tuesday, August 10, 2010

Notepad2 Theme

xmlfileI love Notepad2. It is the “basic” text editor that should ship in Windows. It is one of the first things I download on a new system, I replace notepad with it, then I add the context menu to open any file in notepad2. I have recently moved to a dark color theme for all my text editors and base them all off the Coding Instinct Visual Studio color scheme. Here is a settings file for Notepad2 that is based on the Coding Instinct Visual Studio color scheme.

I have changed all the supported languages in the configuration, but I have not tested them all. Some may not be 100% correct, or there may be a color that just doesn’t look right on the dark background.

To import the theme follow the following steps:

  • Download the theme file
  • Open Notepad2
  • Press Ctrl+F12, or click View –> Customize Schemes
  • Click on Import
  • Select the downloaded theme file

Fixed link to the download. Seems like skydrive changed the link on me.

Twimager 1.0.25

screenshot Minor update to Twimager was released today. This update fixes issues with Twimager showing as a viewer for other types of images that were not supported. It also adds support for some other types of images, like ones on the device that you open with an application like Astro, for example. Also support for MMS images was added. Now you can click on the image in your MMS message and open the image right in twimager.

As always, Twimager is available for $0.99 on the Android Market, or you can get the limited version for free.

Monday, August 9, 2010

Windows 7 Skin TLB Command Line

shI have been a huge fan of True Launch Bar for years. I do not have anything to do with the product, nor do I get anything in return for “plugging” it. I use it a lot less now with Windows 7, but I still use it to put a command line right in the task bar. TLB is a highly customizable taskbar replacement for Quick Launch.

 

 

screenshotTLB offers a wide assortment of plug-ins, plus an SDK for developers. You can get TLB right now for $13.93, that is 30% off the normal price, and well worth it.

Now that you know what TLB is, I have created a simple little skin for the Command Line plug-in that gives it a Windows 7 look. Download the skin, then extract it to the “<TrueLaunchBarInstall>\plugins\cmdline\skins” directory.

Download Skin

Now if it were possible to update existing skins on the website. I want to lighten or even remove the dark border around the border so it looks better on lighter backgrounds. The zip file for the skin contains the skin image, but also contains the Paint.NET file so you can remove it if you wanted to.

Friday, August 6, 2010

Twimager 1.0.24 Released

twimagerA new release of Twimager is available on the market for purchase. This release adds full support for image caching, whether its the “thumb” view or the full size, zoomable image. Thumbnail images are now also loaded for the “thumb” view, for sites that support them.

The cache uses the external storage device, if available, and it can be cleared in the Preferences.

The preference screen was also slightly changed. The sections are now grouped together.

 [chart[1][2].png]

Thursday, August 5, 2010

Droid Explorer Download Stats

Droid Explorer has been increasing in popularity of the past year. Total downloads passing 85,000, page views at about 340,000 and since the projects first release in August ‘09.

downloads-graph 

The “Drop Off” is for a time span that CodePlex has not yet calculated the data.

The latest release has had over 1,600 downloads in about 3 days. Droid Explorer, in the last 7 days (based on when CodePlex does their counts), has had 4,440 downloads. This puts Droid Explorer in the #14 spot for most downloaded projects on CodePlex. About 300 away from the “patterns & practices – Enterprise Library”, and 600 from ASP.NET projects, like ASP.NET MVC.

Droid Explorer 0.8.7.1

htc-evo-4g I released a minor update to Droid Explorer the other day that addressed the following:

  • .NET 3.5 SP1 Check removed. This caused issues on Windows 7, even though it ships with .NET 3.5 SP1
  • Added icon for the EVO – thanks to sanjsrik for identifying the device for me
  • Added some debugging messages to the Shell Console so I can get some info from you Droid/Milestone users on what’s not working.
  • Application data is now cached, so they load WAY faster. The first time it still loads normally, but after that, zoom!

32 bit Web Installer
64 bit Web Installer

32 bit Full Installer
64 bit Full Installer

As always, the latest release is available @ the Droid Explorer CodePlex page.

Thursday, July 22, 2010

Droid Explorer in the top 20

Droid Explorer has had over 3000 downloads in the last 7 days. This is enough to put it in the top 20 most downloaded this week on CodePlex out of the 16,518 projects hosted there. Finally getting more downloads then projects like Facebook Developer Toolkit, IronPython and BlogEngine.Net.

 de-top-20

Managed Android Debug Bridge has a new logo, and is now known as Mad Bee. Someone mentioned it to me, I liked the idea and went with it.

madb-logo-codeplex

Wednesday, July 14, 2010

Twimager 1.0.18 Released

chart[1] I uploaded a minor update to Twimager and Twimager Lite today. It addresses the issue that was reported that Twimager no longer works in Android 2.2 (Froyo). The only other change is in the Preferences screen. I added a small description on how Twimager works, since I have seen some negative comments in the Market stating that the app “Does except display application information”.

The application is now available on the Market for $0.99 or the Lite version for Free. Use scan the QR Code to the right for a direct link to the application on the Market.

Tuesday, July 13, 2010

Droid Explorer 0.8.7.0

usesdk A new version of Droid Explorer was put up for download late last night. This version was initially just a maintenance release and consisted of more code refactoring. But it has since turned in to an actual release since some of the newly added features could be somewhat buggy.

One of the changes, code wise, is that all projects have been upgraded to Visual Studio 2010. Along with that, the WiX installer project now uses WiX 3.5.

I fixed the bug where files would no longer open on your system when double clicked. This may not have been an issue with all ROMs, but with CyanogenMod, it was. It seemed that 95% of the files on the system are marked as  “Executable” in CyanogenMod now.

selectpathThe biggest change is that you can now specify that you want to use an existing Android SDK, instead of having Droid Explorer download a trimmed down version of the SDK. This is really more for the advanced setup, and if you don’t have the SDK already setup, it is best you let Droid Explorer set it up for you.

Once you select that you want to use your existing SDK, during the install, you will be prompted for the path of the SDK. If the installer is unable to find the necessary components in the selected directory, you will be prompted with a message stating that it is not a valid SDK directory. Make sure you are selecting the root of your Android SDK.

Downloads

Wednesday, July 7, 2010

Boot Animation Preview 1.5 Released

createanimationA new version of the Boot Animation Preview tool is available for download.

Changes

  • Minor fixes to the animation algorithm
  • Now Requires .NET 4.0
  • Able to create animations from a directory containing 1 or more “parts”

Download

Tuesday, July 6, 2010

Boot Animation Preview 1.4

bapBoot Animation Preview is a tool that allows you to preview a boot animation on your PC without having to install it on the device and reboot just to see it. It also has the ability to create an animation GIF image from the animation to be used on a website or forum for showing the visitors a preview of the animation. If ADB is in the system path, then it can also apply the image to the attached device.

I’ve uploaded a new version of the Boot Animation Preview this morning. It fixes an issue of not loading boot animations that use Jpeg’s. This is the only change in the release.

The application requires Microsoft .NET Framework 3.5 SP1 be installed on the machine. It also requires ADB be in the Path environment variable if you want to set the boot animation to a connected Android device.

Download

Monday, July 5, 2010

Droid Explorer in Community Coding Contest 2010

imageDroid Explorer is the first entry submitted to the Community Coding Contest 2010. Projects can enter until September 1st, 2010 and the winners have a chance to win prizes totaling over $18,000. I will need your help when voting commences September 2nd 2010, as the winner is selected by the number of votes it receives from the actual community.

This contest is put together by Chris Pietschmann. He is the contest coordinator and an Microsoft MVP on the Windows Live Platform. Chris donated 1 Visual Studio Ultimate with MSDN Subscription, valued at $11,899USD, which he received from Microsoft to give out to the community. If you would like to donate additional prizes to the contest and be a sponsor, you can contact them.

Friday, July 2, 2010

Twimager 1.0.17 Released

An update to Twimager went up on the market yesterday. This release was minor changes from 1.0.16 and 1.0.17.

Changes:

  • Fixed issue with TweetPhoto zoom view loading an blank screen
  • Fixed ow.ly support being lost between 1.0.15 & 1.0.16
  • Fixed force close when saving the image while in zoom view

The new version is available on the Android market.

Friday, June 25, 2010

Device Information Extras

madb-xunitMy goal for Managed Android Debug Bridge is not just to port the functionality from DDMS/ADB, but to make it useful to developers.

The original Device in ddms has a dictionary for mount points, but it only has the 3 hard coded m ount points. So if a rooted device, with busybox is connected, then it will pull all the mount points on the system.

 

 

 

This gives some information like this:

rootfs			/			rootfs	ro
tmpfs /dev tmpfs rw
devpts /dev/pts devpts rw
proc /proc proc rw
sysfs /sys sysfs rw
tmpfs /sqlite_stmt_journals tmpfs rw
none /dev/cpuctl cgroup rw
/dev/block/mtdblock3 /system yaffs2 ro
/dev/block/mtdblock5 /data yaffs2 rw
/dev/block/mtdblock4 /cache yaffs2 rw
/dev/block/mmcblk0p2 /sd-ext ext2 rw
/dev/block/vold/179:1 /sdcard vfat rw

Notice how the /system mount is read-only. That is because I also have a method to set the mount point ReadWrite/ReadOnly. Again, this will really only be useful for rooted devices, but it also gives the ability to check what the current “access” of the mount is as well. So Droid Explorer can check if the mount is read-only before doing a file operation, like a delete or create, and it can change the mount to read-write if needed (and if it is "enabled" by the user).


MADB also can transfer files better then regular adb. The ddms library does not handle symlinks, but MADB does. So if you try to copy a symlink, it will resolve it and copy over the original, but still name it what the symlink is.


Pulling multiple files from the device can also easily allow developers to show the total progress for the transfer. For the unit tests, I created a simple ISyncProgressMonitor that writes how many bytes were transferred, out of the total bytes, plus how many bytes are remaining. Here is a sample output, with some data trimmed for space, of a pull of /system/app


Starting Transfer
Syncing /system/app/BugReport.apk
Transfered 23669 of 13334850 - 13311181 remaining
Syncing /system/app/EnhancedGoogleSearchProvider.apk
Transfered 89205 of 13334850 - 13245645 remaining
Transfered 154741 of 13334850 - 13180109 remaining
Transfered 220277 of 13334850 - 13114573 remaining
Transfered 274775 of 13334850 - 13060075 remaining
...
Syncing /system/app/Street.apk
Transfered 10224322 of 13334850 - 3110528 remaining
Transfered 10264332 of 13334850 - 3070518 remaining
Syncing /system/app/Talk.apk
Transfered 10329868 of 13334850 - 3004982 remaining
Transfered 10395404 of 13334850 - 2939446 remaining
Transfered 10460940 of 13334850 - 2873910 remaining
Transfered 10526476 of 13334850 - 2808374 remaining
Transfered 10592012 of 13334850 - 2742838 remaining
Transfered 10657548 of 13334850 - 2677302 remaining
Transfered 10717042 of 13334850 - 2617808 remaining
...
Syncing /system/app/YouTube.apk
Transfered 12817565 of 13334850 - 517285 remaining
Transfered 12883101 of 13334850 - 451749 remaining
Transfered 12948637 of 13334850 - 386213 remaining
Transfered 13014173 of 13334850 - 320677 remaining
Transfered 13079709 of 13334850 - 255141 remaining
Transfered 13145245 of 13334850 - 189605 remaining
Transfered 13210781 of 13334850 - 124069 remaining
Transfered 13276317 of 13334850 - 58533 remaining
Transfered 13334850 of 13334850 - 0 remaining

Thursday, June 24, 2010

Working with the SyncService

I have gotten a few more key parts of the Managed Android Debug Bridge done. The SyncService has some important methods completed. I have been able to successfully pull a single file from a device, and push a single file to a device. Still not working is the ability to push and pull multiple files, but that is next.

Even though this is a port of the DDMS library, I have taken it upon myself to make some needed changes to some components. For example, when pulling a file, here is the original ddmslib code:

public SyncResult pullFile(String remoteFilepath, String localFilename, ISyncProgressMonitor monitor) {
monitor.start(0);
//TODO: use the {@link FileListingService} to get the file size.

SyncResult result = doPullFile(remoteFilepath, localFilename, monitor);
monitor.stop();
return result;
}


Notice the “TODO”, this means that when this method is used to pull a file, there is no “notifications” to the ISyncProgressMonitor since the total bytes is set to 0 in the monitor.start. I took the 5 minutes to actually write the method in the FileListingService that can take a string path, and find the FileEntry object, or it will throw a FileNotFoundException. Once we have the FileEntry, we can determine how much data is going to be transfered. Here is the same method, but in MADB.



public SyncResult PullFile ( String remoteFilepath, String localFilename, ISyncProgressMonitor monitor ) {
if ( monitor == null ) {
throw new ArgumentNullException ( "monitor", "Monitor cannot be null" );
}

long totalWork = 0;
try {
FileListingService fls = new FileListingService ( this.Device );
FileEntry remoteFileEntry = fls.FindEntry ( remoteFilepath );
totalWork = remoteFileEntry.Size;
} catch ( FileNotFoundException ffe ) {
Console.WriteLine ( ffe.ToString ( ) );
Log.w ( "ddms", ffe );
}
monitor.Start ( totalWork );

SyncResult result = DoPullFile ( remoteFilepath, localFilename, monitor );

monitor.Stop ( );
return result;
}


If it fails to find the FileEntry, then it continues on just like the original does. Here is the FindFileEntry method in the FileListingService.



public FileEntry FindFileEntry ( String path ) {
String[] entriesString = path.Split ( new char[] { LinuxPath.DirectorySeparatorChar }, StringSplitOptions.RemoveEmptyEntries );
FileEntry current = this.Root;
foreach ( var pathItem in entriesString ) {
FileEntry[] entries = GetChildren ( current, true, null );
foreach ( var e in entries ) {
if ( String.Compare ( e.Name, pathItem, false ) == 0 ) {
current = e;
continue;
}
}
}
if ( String.Compare ( current.FullPath, path, false ) == 0 ) {
Console.WriteLine ( "returning: {0}", current.FullPath );
return current;
} else {
throw new FileNotFoundException ( String.Format ( "Unable to locate {0}", path ) );
}
}


Another thing that I thought should be modified was the Regex used for the FileListingService. In the original version, it only supports the stock Android ls command. I have modified it to support the stock ls, plus it supports busybox ls as well. This was a selfish act, since it helps me closer to my goal of not requiring busybox in order for Droid Explorer to work.

Wednesday, June 23, 2010

MADB FileListingService

mad-hatter-hatThe Managed Android Debug Bridge is coming along. I did some work on the FileListingService, but messed up the checkin and its now missing some files in the project. This will be fixed tomorrow. The FileListingService is the component that is responsible for ADB request that require file information. At the core, it executes an “ls –l” on the device and parses the return data for the information.

I have made some modifications to the Regex used to parse the return data so that both stock “ls” and “busybox ls” are supported. This means that Droid Explorer will be able to perform some operations on non-rooted devices once MADB is integrated in. The good news is, Droid Explorer + MADB will also be able to detect if busybox is installed on the device. It will also be able to display more detailed information, even more then ADB, when pushing or pulling a file to / from the device.

MADB gives more information to developers when executing remote commands when the file does not exist, or even if an “ls” is attempted on a directory does not exist. It does so by throwing a FileNotFoundException. Otherwise, the specified IShellOutputReceiver will be the way developers will know what is happening in the remote command.

Monday, June 21, 2010

Managed Android Debug Bridge

I have been slowly working on a side project of Droid Explorer called Managed Android Debug Bridge (MADB) and I finally have checked in some code that actually compiles.

MADB is a port of the ddms java library that the ddms uses. This allows communication with the ADB server via TCP and gives more flexibility to developers then calling the adb binary directly. For starters, MADB can request the FrameBuffer, which is what is used to get a screenshot of the device. This is different then pulling /dev/graphics/fb0 because:

  1. that requires root and MADB doesn’t
  2. fb0 contains 2+ frames of data and MADB only gets 1
  3. MADB is faster since its less data to transfer
  4. MADB returns the device screen resolution, ARGB length & offset & bpp. fb0 has none of that information

I have a very small portion of it implemented. Currently, I have the GetFrameBuffer, ExecuteRemoteCommand, Reboot & GetDevices implemented. I’ve actually gone a little further with ExecuteRemoteCommand then the original library, as it checks for the error message that would be displayed if the binary was not found and the method throws a FileNotFoundException instead of just handing the data off to the IShellOutputReceiver.

The goal of MADB is to mimic the functionality that is available via the ddms library and make it available to .NET projects. This project will also be used in Droid Explorer once it has the needed functionality that Droid Explorer requires.

Saturday, June 19, 2010

Issue with Visual Studio 2010 and dark color themes

I have recently moved to a dark color theme for all my code editors. It is much easier on the eyes. But I recently came across an issue that I can’t figure out how to correct and was hoping that someone will have an answer.
When the method info box pops up this is what it looks like
vs2010dark
Now obviously this is not very useful as you can only read “void” and even that is hard to read. I either need to be able to change the background color of the popup window or the color of the text that is displayed in there.
If anyone is interested, the color theme I am using is based on “Coding Instinct” found on StudioStyles.
Here is my modified version, just has some tweaks that were not in it when I started using it, like the line numbers background was white and when you hover a collapsible block it was white, things like that.

Update:
Seems this problem is caused by Visual Studio 2010 Pro Power Tools. It enables the code highlighting in the to the parameter help. Email your congressman to see if we can get a way to fix or disable this.
 
Update 2:
This can be fixed. In the Options->Environment->Fonts and Colors set Signature Help Tooltip Background to a darker color of your choice.

New version of Droid Explorer – 0.8.6.0

screenshot

A new build of Droid Explorer is available for download

There are a lot of fixes / changes to this build, here is a list of them

  • fixed missing file in the standalone installer
  • added check for minimum .net framework version in to bootstrapper (v3.5sp1)
  • increased the service start/stop timeout in the bootstrapper from 30 seconds to 60 seconds
  • removed initial strings from download panel labels of bootstrapper
  • htc desire / bravo icon added for attached devices - thanks to beadza for identifying the device
  • added ability to only install the SDK Tools by running install with /sdk switch
  • sdk install mode checks if DE is installed, if not, it switches to full install mode
  • bart plugin now also checks the sd-ext mount point for the license.
  • added the sd-ext app paths as valid application paths
  • added sd-ext app paths to the application backup plugin
  • removed anda.pk plugin as the site is dead.
  • screencast plugin changed to pull the jnlp file directly from the trunk of the project. If there is an error, it falls back to a "local" file
  • fixed issues with spaces in folder names
  • motorola backflip icon added for attached devices - thanks to zibiza for identifying the device
  • new screenshot app that handles all resolutions. Uses new methods to get the framebuffer data
  • adjusted the RGB565 class to better handle other devices for screenshots
  • started to implement communicating with adb over TCP like ddms does. – This will wind up being part of the Managed Android Debug Bridge.
  • acer liquid icon added for attached devices - thanks to fyodor0218 for identifying the device
  • started working on the ability to use existing sdk (not yet an option, but soon)

One of the biggest changes is the communicating with adb over TCP. I started to port the code that the ddmslib uses to directly communicate with adb. This is done over a TCP socket. The current reason for this was specifically for the screenshot plugin. Previous versions only took screenshots of devices that had a screen resolution of 320x480. It, like all the other screenshot applications for android pulled the data from the framebuffer located at /dev/graphics/fb0. The problem with pulling this file with adb pull /dev/graphics/fb0 ./fb0 is the framebuffer contains 2+ frames of data because android implements double buffering. So to display 1 image, applications pull down data for 2+ images. This takes some time to perform, not to mention the time it takes to then render the image from the data. Also a problem is you have to know the screen resolution of the device your reading the buffer for, otherwise you will end up with a garbled image.

Using the TCP method eliminates these problems. First, it only sends one frame of data, so we are not pulling extra, unused bytes, so it speeds up the transfer time. It also sends back the screen resolution of the image, plus other information like the bpp, argb lengths and offsets.

My plan is to move everything that Droid Explorer uses the adb.exe commands for over to TCP eventually. The SDK is still required to be on the machine, but it gives more control to Droid Explorer, and in this case, speeds things up.

Birth of the blog

I have not blogged in a long time, since I took down my old website that had my blog on it about a year ago. I will now use blogger as my blog host as I do not feel like maintaining the software to blog.

I am an Application/Web Developer at UPS in Bedford Park, IL for my day job. In the evenings I am an Android enthusiast, and write applications for the Android platform, Web, and Windows.

What should you expect from this blog? Honestly, it will depend on my mood, schedule and where the stars are aligned. I could post a detailed post on a new android application I released, it could be a short post about a new build of Droid Explorer, or I could post how pissed I am that my sd-card stopped working.

How often will I post? When ever I have something I think is worth posting. I could post 30 times in one day, but not post again for 2 months.

Do I always ask myself questions and then answer them? No, now move on…

Droid X Multi-touch Keyboard for Samsung Galaxy S

The Droid X has a good keyboard that supports multi-touch. If you try to just install it on the Samsung Galaxy S phones (I’ve only tested the Vibrant), the keys are barley readable. The font size is very small.

device1before[1]

I have modified the original Droid X keyboard to specify a font size that can be seen on the Galaxy S phones.

device1[1] device3[1] device2[1]

While that was fine and worked great, I didn’t really like the light color of the keyboard. So I also created a version that is skinned to look like the stock Samsung Galaxy S Keyboard.

device4[1] device5[1] device6

I’ve also added alternate character selections to the “QWERTY” row. The characters are the Numeric row of a standard keyboard.

q1

Download from XDA Thread

The $1 Phone Dock

I was at the flea-market this weekend just looking for some deals on junk. I was skimming across a table and spotted this little gem.

2010-10-18 07.33.04 2010-10-18 07.33.13

This is a business card stand. my Samsung Galaxy S (Vibrant) fits perfectly both horizontally and vertically. The angle it sits is perfect for viewing video on the device.

There was only one on the table, I wanted at least 2 of them, so I could have one for work and at home. The best part, it was $1.

Stuck at Vibrant Screen after Update

I was stuck at the Vibrant screen after applying the official OTA update from T-Mobile the other day on my Samsung Vibrant. Most people were saying it was because of not running the Stock firmware, but I did not have any real “mods” to the OS, except for a GPS fix. I have also heard people that are running full, non-rooted, Stock firmware phones and still having the same issue.

I wanted to post the steps I took to fix my problem. Your results may vary, and I am in no way, shape or form, responsible for any problems that you may have because you read this and did what worked for me. I am just posting it because it worked for me, and others.

  1. Download ODIN3 1.0
  2. Download 512 PIT
  3. Download JFD tar
    • Note that all 3 of those are from the same thread. It also wouldn't hurt for your to read that post too.
  4. Open Odin, plug in your phone, then put it into download mode.
    • To expand on this because a lot of people were asking "how to put in download mode". The easiest way I found to actually do it, if you can can connect via ADB is to do the following:

      # reboot download

      If you can't get that to work, try how i mention below (phone off, battery out, hold vol+ & vol-), or try searching these forums for "vibrant download mode" you will find other things that "work" for people
  5. load the PIT file in appropriate area.
  6. load the .tar file in the PDA area.
  7. DO NOT check 're-partition'.
  8. Click start, let it finish.
    • At this point ODIN failed on me. and I got the "mobile-!-pc" image.
  9. Now, pull your battery and unplug USB
  10. I also took out the SIM and sdcard at this point.
  11. bring the phone to download mode again
    1. plug the USB back in (the phone should be off)
    2. Hold down vol+ & vol-
    3. Put battery back in
    4. press power
  12. re-run ODIN as mentioned above

Once ODIN completed successfully, it rebooted in to the Stock build. i let it do all that. then I shut it off, put the sdcard and SIM back in and booted in to recovery and restored from my Nandroid and I was back to the way it was right before I applied the update.

Resident Evil Inspired Windows 7 theme

This is a dynamic theme that uses my Picasa gallery for the images. The wallpaper is something I threw together while I was bored the other day. It is the eye of Milla Jovovich from the the first movie.

Here are some samples of the wallpaper. There are 11 total, some with and some without the Umbrella logo in the eye.

residentevil-hazel[1] residentevil-hazel-logo[1] residentevil-blue[1] residentevil-red[1]

Download the Windows 7 Theme

Please vote for Droid Explorer

voteVoting has begun for the Community Coding Contest 2010. Please go support Droid Explorer and cast your vote for it today. There is approximately $20,719 USD worth of prizes that can be won. So please vote and have your friends vote and their friends too.

The voting “booth” is on the main page, on the right hand side of the page. Check the checkbox for Droid Explorer and then click the “Vote” button.

The other entry is just a short code snippet that is about 15 lines of code, counting whitespace. Droid Explorer is over 170,000 lines and used by thousands of people. Droid Explorer should have no problem winning this contest, and with your support it can.

Closing an activity by touching outside

I have been working on an application that I want to close an Activity when the user touches outside the activity. Like how you can set the setCanceledOnTouchOutside(boolean cancel) in the android.app.Dialog. The activity I want to close is themed like a dialog so there is an area around the activity that is not “active”.

I was able to achieve the desired effect by overriding the activity’s onTouchEvent(MotionEvent event). This method is called when a screen touch event is not handled by any views.

@Override
public boolean onTouchEvent ( MotionEvent event ) {
// I only care if the event is an UP action
if ( event.getAction () == MotionEvent.ACTION_UP ) {
// create a rect for storing the window rect
Rect r = new Rect ( 0, 0, 0, 0 );
// retrieve the windows rect
this.getWindow ().getDecorView ().getHitRect ( r );
// check if the event position is inside the window rect
boolean intersects = r.contains ( (int) event.getX (), (int) event.getY () );
// if the event is not inside then we can close the activity
if ( !intersects ) {
// close the activity
this.finish ();
// notify that we consumed this event
return true;
}
}
// let the system handle the event
return super.onTouchEvent ( event );
}

Now with that code in place, if the user touches anywhere outside of the dialog style activity, it will close.


SMS Backup

screenshot SMS Backup was always one of the first applications I had to install on my device if I had to wipe it clean. SMS Backup is released under the Apache License, Version 2.0 and developed by Christoph Studer. Development has pretty much been stale on this application for the past year.

That is where SMS Backup+ comes in. It is an improved version of SMS Backup, also released under the Apache License, Version 2.0 and developed by Jan Berkel. Some of the main differences are:

  • XOAuth support – Uses XOAuth to authenticate with Gmail, instead of you supplying your username and password
  • Faster – Does not base64 encode the emails before transferring
  • IMAP support – Doesn’t just work with Gmail (but defaults to Gmail), it works with any IMAP server
  • Restore – You can transfer sms messages back from email to the device.
  • MMS Not Yet Supported, but planned

This is one of the applications I like to place in the Ron Popeil category, because you can “set it, and forget it”.

You can install from the Android Market for free:

Droid Explorer 0.8.7.2

explorer A new release of Droid Explorer was published early today. It fixes the big issue with the server not being able to start. It also has some little fixes that wont even be noticed by most people. For example the extended glass area now doesn’t cause the window to move in an unexpected ways.

I will now be starting to work heavily on the 0.9.x branch. This will open Droid Explorer to many more devices beyond the rooted with busybox devices.

If you have any issues with 0.8.7.2 please report them on the droid explorer project issue tracker so they can be addressed.

Downloads

Application DroidExplorer.0.8.7.2.x86.Setup – 14974K
Application DroidExplorer.0.8.7.2.x64.Setup – 15142K
Application DroidExplorer.0.8.7.2.x86.Standalone – 32911K
Application DroidExplorer.0.8.7.2.x64.Standalone - 33078K

Droid Explorer in the top 10!

logo-home

Droid Explorer is, as of the time I am writing this, the #9 most downloaded project on CodePlex. I think this is awesome and want to thank everyone that is using Droid Explorer.

I have been hard at work fixing the issue with the Droid Explorer Service. This is the service that identifies when a device is connected to the PC and shows the device in Explorer. I will have the fix in place by the end of the week and published.

I have also been working the Droid Explorer branch that will become the 0.9.x release. This will be the first version that will support non-rooted devices. The only requirement is that the device can be seen via ADB. All functionality may not be initially available to non-rooted devices, especially in the first versions of the 0.9.x releases. I will be refactoring more and more of the code to stop using custom communication via adb.exe and use the same communication methods that the DDMS uses. This will be accomplished by using MAD Bee.

I am also shooting for an update mechanism being built in to Droid Explorer in the 0.9.x releases. It is going to be a framework that will use an Atom feed to get available updates. It will allow multiple update locations, to allow plugins to specify their own update feed source. Updates can define requirements, minimum/maximum version, and how to “install” the updates. But that is a bit off from being incorporated, it may not make it in until a few releases in to the 0.9.x releases.

Notepad2 Theme

xmlfileI love Notepad2. It is the “basic” text editor that should ship in Windows. It is one of the first things I download on a new system, I replace notepad with it, then I add the context menu to open any file in notepad2. I have recently moved to a dark color theme for all my text editors and base them all off the Coding Instinct Visual Studio color scheme. Here is a settings file for Notepad2 that is based on the Coding Instinct Visual Studio color scheme.

I have changed all the supported languages in the configuration, but I have not tested them all. Some may not be 100% correct, or there may be a color that just doesn’t look right on the dark background.

To import the theme follow the following steps:

  • Download the theme file
  • Open Notepad2
  • Press Ctrl+F12, or click View –> Customize Schemes
  • Click on Import
  • Select the downloaded theme file

Fixed link to the download. Seems like skydrive changed the link on me.

Twimager 1.0.25

screenshot Minor update to Twimager was released today. This update fixes issues with Twimager showing as a viewer for other types of images that were not supported. It also adds support for some other types of images, like ones on the device that you open with an application like Astro, for example. Also support for MMS images was added. Now you can click on the image in your MMS message and open the image right in twimager.

As always, Twimager is available for $0.99 on the Android Market, or you can get the limited version for free.

Windows 7 Skin TLB Command Line

shI have been a huge fan of True Launch Bar for years. I do not have anything to do with the product, nor do I get anything in return for “plugging” it. I use it a lot less now with Windows 7, but I still use it to put a command line right in the task bar. TLB is a highly customizable taskbar replacement for Quick Launch.

 

 

screenshotTLB offers a wide assortment of plug-ins, plus an SDK for developers. You can get TLB right now for $13.93, that is 30% off the normal price, and well worth it.

Now that you know what TLB is, I have created a simple little skin for the Command Line plug-in that gives it a Windows 7 look. Download the skin, then extract it to the “<TrueLaunchBarInstall>\plugins\cmdline\skins” directory.

Download Skin

Now if it were possible to update existing skins on the website. I want to lighten or even remove the dark border around the border so it looks better on lighter backgrounds. The zip file for the skin contains the skin image, but also contains the Paint.NET file so you can remove it if you wanted to.

Twimager 1.0.24 Released

twimagerA new release of Twimager is available on the market for purchase. This release adds full support for image caching, whether its the “thumb” view or the full size, zoomable image. Thumbnail images are now also loaded for the “thumb” view, for sites that support them.

The cache uses the external storage device, if available, and it can be cleared in the Preferences.

The preference screen was also slightly changed. The sections are now grouped together.

 [chart[1][2].png]

Droid Explorer Download Stats

Droid Explorer has been increasing in popularity of the past year. Total downloads passing 85,000, page views at about 340,000 and since the projects first release in August ‘09.

downloads-graph 

The “Drop Off” is for a time span that CodePlex has not yet calculated the data.

The latest release has had over 1,600 downloads in about 3 days. Droid Explorer, in the last 7 days (based on when CodePlex does their counts), has had 4,440 downloads. This puts Droid Explorer in the #14 spot for most downloaded projects on CodePlex. About 300 away from the “patterns & practices – Enterprise Library”, and 600 from ASP.NET projects, like ASP.NET MVC.

Droid Explorer 0.8.7.1

htc-evo-4g I released a minor update to Droid Explorer the other day that addressed the following:

  • .NET 3.5 SP1 Check removed. This caused issues on Windows 7, even though it ships with .NET 3.5 SP1
  • Added icon for the EVO – thanks to sanjsrik for identifying the device for me
  • Added some debugging messages to the Shell Console so I can get some info from you Droid/Milestone users on what’s not working.
  • Application data is now cached, so they load WAY faster. The first time it still loads normally, but after that, zoom!

32 bit Web Installer
64 bit Web Installer

32 bit Full Installer
64 bit Full Installer

As always, the latest release is available @ the Droid Explorer CodePlex page.

Droid Explorer in the top 20

Droid Explorer has had over 3000 downloads in the last 7 days. This is enough to put it in the top 20 most downloaded this week on CodePlex out of the 16,518 projects hosted there. Finally getting more downloads then projects like Facebook Developer Toolkit, IronPython and BlogEngine.Net.

 de-top-20

Managed Android Debug Bridge has a new logo, and is now known as Mad Bee. Someone mentioned it to me, I liked the idea and went with it.

madb-logo-codeplex

Twimager 1.0.18 Released

chart[1] I uploaded a minor update to Twimager and Twimager Lite today. It addresses the issue that was reported that Twimager no longer works in Android 2.2 (Froyo). The only other change is in the Preferences screen. I added a small description on how Twimager works, since I have seen some negative comments in the Market stating that the app “Does except display application information”.

The application is now available on the Market for $0.99 or the Lite version for Free. Use scan the QR Code to the right for a direct link to the application on the Market.

Droid Explorer 0.8.7.0

usesdk A new version of Droid Explorer was put up for download late last night. This version was initially just a maintenance release and consisted of more code refactoring. But it has since turned in to an actual release since some of the newly added features could be somewhat buggy.

One of the changes, code wise, is that all projects have been upgraded to Visual Studio 2010. Along with that, the WiX installer project now uses WiX 3.5.

I fixed the bug where files would no longer open on your system when double clicked. This may not have been an issue with all ROMs, but with CyanogenMod, it was. It seemed that 95% of the files on the system are marked as  “Executable” in CyanogenMod now.

selectpathThe biggest change is that you can now specify that you want to use an existing Android SDK, instead of having Droid Explorer download a trimmed down version of the SDK. This is really more for the advanced setup, and if you don’t have the SDK already setup, it is best you let Droid Explorer set it up for you.

Once you select that you want to use your existing SDK, during the install, you will be prompted for the path of the SDK. If the installer is unable to find the necessary components in the selected directory, you will be prompted with a message stating that it is not a valid SDK directory. Make sure you are selecting the root of your Android SDK.

Downloads

Boot Animation Preview 1.5 Released

createanimationA new version of the Boot Animation Preview tool is available for download.

Changes

  • Minor fixes to the animation algorithm
  • Now Requires .NET 4.0
  • Able to create animations from a directory containing 1 or more “parts”

Download

Boot Animation Preview 1.4

bapBoot Animation Preview is a tool that allows you to preview a boot animation on your PC without having to install it on the device and reboot just to see it. It also has the ability to create an animation GIF image from the animation to be used on a website or forum for showing the visitors a preview of the animation. If ADB is in the system path, then it can also apply the image to the attached device.

I’ve uploaded a new version of the Boot Animation Preview this morning. It fixes an issue of not loading boot animations that use Jpeg’s. This is the only change in the release.

The application requires Microsoft .NET Framework 3.5 SP1 be installed on the machine. It also requires ADB be in the Path environment variable if you want to set the boot animation to a connected Android device.

Download

Droid Explorer in Community Coding Contest 2010

imageDroid Explorer is the first entry submitted to the Community Coding Contest 2010. Projects can enter until September 1st, 2010 and the winners have a chance to win prizes totaling over $18,000. I will need your help when voting commences September 2nd 2010, as the winner is selected by the number of votes it receives from the actual community.

This contest is put together by Chris Pietschmann. He is the contest coordinator and an Microsoft MVP on the Windows Live Platform. Chris donated 1 Visual Studio Ultimate with MSDN Subscription, valued at $11,899USD, which he received from Microsoft to give out to the community. If you would like to donate additional prizes to the contest and be a sponsor, you can contact them.

Twimager 1.0.17 Released

An update to Twimager went up on the market yesterday. This release was minor changes from 1.0.16 and 1.0.17.

Changes:

  • Fixed issue with TweetPhoto zoom view loading an blank screen
  • Fixed ow.ly support being lost between 1.0.15 & 1.0.16
  • Fixed force close when saving the image while in zoom view

The new version is available on the Android market.

Device Information Extras

madb-xunitMy goal for Managed Android Debug Bridge is not just to port the functionality from DDMS/ADB, but to make it useful to developers.

The original Device in ddms has a dictionary for mount points, but it only has the 3 hard coded m ount points. So if a rooted device, with busybox is connected, then it will pull all the mount points on the system.

 

 

 

This gives some information like this:

rootfs			/			rootfs	ro
tmpfs /dev tmpfs rw
devpts /dev/pts devpts rw
proc /proc proc rw
sysfs /sys sysfs rw
tmpfs /sqlite_stmt_journals tmpfs rw
none /dev/cpuctl cgroup rw
/dev/block/mtdblock3 /system yaffs2 ro
/dev/block/mtdblock5 /data yaffs2 rw
/dev/block/mtdblock4 /cache yaffs2 rw
/dev/block/mmcblk0p2 /sd-ext ext2 rw
/dev/block/vold/179:1 /sdcard vfat rw

Notice how the /system mount is read-only. That is because I also have a method to set the mount point ReadWrite/ReadOnly. Again, this will really only be useful for rooted devices, but it also gives the ability to check what the current “access” of the mount is as well. So Droid Explorer can check if the mount is read-only before doing a file operation, like a delete or create, and it can change the mount to read-write if needed (and if it is "enabled" by the user).


MADB also can transfer files better then regular adb. The ddms library does not handle symlinks, but MADB does. So if you try to copy a symlink, it will resolve it and copy over the original, but still name it what the symlink is.


Pulling multiple files from the device can also easily allow developers to show the total progress for the transfer. For the unit tests, I created a simple ISyncProgressMonitor that writes how many bytes were transferred, out of the total bytes, plus how many bytes are remaining. Here is a sample output, with some data trimmed for space, of a pull of /system/app


Starting Transfer
Syncing /system/app/BugReport.apk
Transfered 23669 of 13334850 - 13311181 remaining
Syncing /system/app/EnhancedGoogleSearchProvider.apk
Transfered 89205 of 13334850 - 13245645 remaining
Transfered 154741 of 13334850 - 13180109 remaining
Transfered 220277 of 13334850 - 13114573 remaining
Transfered 274775 of 13334850 - 13060075 remaining
...
Syncing /system/app/Street.apk
Transfered 10224322 of 13334850 - 3110528 remaining
Transfered 10264332 of 13334850 - 3070518 remaining
Syncing /system/app/Talk.apk
Transfered 10329868 of 13334850 - 3004982 remaining
Transfered 10395404 of 13334850 - 2939446 remaining
Transfered 10460940 of 13334850 - 2873910 remaining
Transfered 10526476 of 13334850 - 2808374 remaining
Transfered 10592012 of 13334850 - 2742838 remaining
Transfered 10657548 of 13334850 - 2677302 remaining
Transfered 10717042 of 13334850 - 2617808 remaining
...
Syncing /system/app/YouTube.apk
Transfered 12817565 of 13334850 - 517285 remaining
Transfered 12883101 of 13334850 - 451749 remaining
Transfered 12948637 of 13334850 - 386213 remaining
Transfered 13014173 of 13334850 - 320677 remaining
Transfered 13079709 of 13334850 - 255141 remaining
Transfered 13145245 of 13334850 - 189605 remaining
Transfered 13210781 of 13334850 - 124069 remaining
Transfered 13276317 of 13334850 - 58533 remaining
Transfered 13334850 of 13334850 - 0 remaining

Working with the SyncService

I have gotten a few more key parts of the Managed Android Debug Bridge done. The SyncService has some important methods completed. I have been able to successfully pull a single file from a device, and push a single file to a device. Still not working is the ability to push and pull multiple files, but that is next.

Even though this is a port of the DDMS library, I have taken it upon myself to make some needed changes to some components. For example, when pulling a file, here is the original ddmslib code:

public SyncResult pullFile(String remoteFilepath, String localFilename, ISyncProgressMonitor monitor) {
monitor.start(0);
//TODO: use the {@link FileListingService} to get the file size.

SyncResult result = doPullFile(remoteFilepath, localFilename, monitor);
monitor.stop();
return result;
}


Notice the “TODO”, this means that when this method is used to pull a file, there is no “notifications” to the ISyncProgressMonitor since the total bytes is set to 0 in the monitor.start. I took the 5 minutes to actually write the method in the FileListingService that can take a string path, and find the FileEntry object, or it will throw a FileNotFoundException. Once we have the FileEntry, we can determine how much data is going to be transfered. Here is the same method, but in MADB.



public SyncResult PullFile ( String remoteFilepath, String localFilename, ISyncProgressMonitor monitor ) {
if ( monitor == null ) {
throw new ArgumentNullException ( "monitor", "Monitor cannot be null" );
}

long totalWork = 0;
try {
FileListingService fls = new FileListingService ( this.Device );
FileEntry remoteFileEntry = fls.FindEntry ( remoteFilepath );
totalWork = remoteFileEntry.Size;
} catch ( FileNotFoundException ffe ) {
Console.WriteLine ( ffe.ToString ( ) );
Log.w ( "ddms", ffe );
}
monitor.Start ( totalWork );

SyncResult result = DoPullFile ( remoteFilepath, localFilename, monitor );

monitor.Stop ( );
return result;
}


If it fails to find the FileEntry, then it continues on just like the original does. Here is the FindFileEntry method in the FileListingService.



public FileEntry FindFileEntry ( String path ) {
String[] entriesString = path.Split ( new char[] { LinuxPath.DirectorySeparatorChar }, StringSplitOptions.RemoveEmptyEntries );
FileEntry current = this.Root;
foreach ( var pathItem in entriesString ) {
FileEntry[] entries = GetChildren ( current, true, null );
foreach ( var e in entries ) {
if ( String.Compare ( e.Name, pathItem, false ) == 0 ) {
current = e;
continue;
}
}
}
if ( String.Compare ( current.FullPath, path, false ) == 0 ) {
Console.WriteLine ( "returning: {0}", current.FullPath );
return current;
} else {
throw new FileNotFoundException ( String.Format ( "Unable to locate {0}", path ) );
}
}


Another thing that I thought should be modified was the Regex used for the FileListingService. In the original version, it only supports the stock Android ls command. I have modified it to support the stock ls, plus it supports busybox ls as well. This was a selfish act, since it helps me closer to my goal of not requiring busybox in order for Droid Explorer to work.

MADB FileListingService

mad-hatter-hatThe Managed Android Debug Bridge is coming along. I did some work on the FileListingService, but messed up the checkin and its now missing some files in the project. This will be fixed tomorrow. The FileListingService is the component that is responsible for ADB request that require file information. At the core, it executes an “ls –l” on the device and parses the return data for the information.

I have made some modifications to the Regex used to parse the return data so that both stock “ls” and “busybox ls” are supported. This means that Droid Explorer will be able to perform some operations on non-rooted devices once MADB is integrated in. The good news is, Droid Explorer + MADB will also be able to detect if busybox is installed on the device. It will also be able to display more detailed information, even more then ADB, when pushing or pulling a file to / from the device.

MADB gives more information to developers when executing remote commands when the file does not exist, or even if an “ls” is attempted on a directory does not exist. It does so by throwing a FileNotFoundException. Otherwise, the specified IShellOutputReceiver will be the way developers will know what is happening in the remote command.

Managed Android Debug Bridge

I have been slowly working on a side project of Droid Explorer called Managed Android Debug Bridge (MADB) and I finally have checked in some code that actually compiles.

MADB is a port of the ddms java library that the ddms uses. This allows communication with the ADB server via TCP and gives more flexibility to developers then calling the adb binary directly. For starters, MADB can request the FrameBuffer, which is what is used to get a screenshot of the device. This is different then pulling /dev/graphics/fb0 because:

  1. that requires root and MADB doesn’t
  2. fb0 contains 2+ frames of data and MADB only gets 1
  3. MADB is faster since its less data to transfer
  4. MADB returns the device screen resolution, ARGB length & offset & bpp. fb0 has none of that information

I have a very small portion of it implemented. Currently, I have the GetFrameBuffer, ExecuteRemoteCommand, Reboot & GetDevices implemented. I’ve actually gone a little further with ExecuteRemoteCommand then the original library, as it checks for the error message that would be displayed if the binary was not found and the method throws a FileNotFoundException instead of just handing the data off to the IShellOutputReceiver.

The goal of MADB is to mimic the functionality that is available via the ddms library and make it available to .NET projects. This project will also be used in Droid Explorer once it has the needed functionality that Droid Explorer requires.

Issue with Visual Studio 2010 and dark color themes

I have recently moved to a dark color theme for all my code editors. It is much easier on the eyes. But I recently came across an issue that I can’t figure out how to correct and was hoping that someone will have an answer.
When the method info box pops up this is what it looks like
vs2010dark
Now obviously this is not very useful as you can only read “void” and even that is hard to read. I either need to be able to change the background color of the popup window or the color of the text that is displayed in there.
If anyone is interested, the color theme I am using is based on “Coding Instinct” found on StudioStyles.
Here is my modified version, just has some tweaks that were not in it when I started using it, like the line numbers background was white and when you hover a collapsible block it was white, things like that.

Update:
Seems this problem is caused by Visual Studio 2010 Pro Power Tools. It enables the code highlighting in the to the parameter help. Email your congressman to see if we can get a way to fix or disable this.
 
Update 2:
This can be fixed. In the Options->Environment->Fonts and Colors set Signature Help Tooltip Background to a darker color of your choice.

New version of Droid Explorer – 0.8.6.0

screenshot

A new build of Droid Explorer is available for download

There are a lot of fixes / changes to this build, here is a list of them

  • fixed missing file in the standalone installer
  • added check for minimum .net framework version in to bootstrapper (v3.5sp1)
  • increased the service start/stop timeout in the bootstrapper from 30 seconds to 60 seconds
  • removed initial strings from download panel labels of bootstrapper
  • htc desire / bravo icon added for attached devices - thanks to beadza for identifying the device
  • added ability to only install the SDK Tools by running install with /sdk switch
  • sdk install mode checks if DE is installed, if not, it switches to full install mode
  • bart plugin now also checks the sd-ext mount point for the license.
  • added the sd-ext app paths as valid application paths
  • added sd-ext app paths to the application backup plugin
  • removed anda.pk plugin as the site is dead.
  • screencast plugin changed to pull the jnlp file directly from the trunk of the project. If there is an error, it falls back to a "local" file
  • fixed issues with spaces in folder names
  • motorola backflip icon added for attached devices - thanks to zibiza for identifying the device
  • new screenshot app that handles all resolutions. Uses new methods to get the framebuffer data
  • adjusted the RGB565 class to better handle other devices for screenshots
  • started to implement communicating with adb over TCP like ddms does. – This will wind up being part of the Managed Android Debug Bridge.
  • acer liquid icon added for attached devices - thanks to fyodor0218 for identifying the device
  • started working on the ability to use existing sdk (not yet an option, but soon)

One of the biggest changes is the communicating with adb over TCP. I started to port the code that the ddmslib uses to directly communicate with adb. This is done over a TCP socket. The current reason for this was specifically for the screenshot plugin. Previous versions only took screenshots of devices that had a screen resolution of 320x480. It, like all the other screenshot applications for android pulled the data from the framebuffer located at /dev/graphics/fb0. The problem with pulling this file with adb pull /dev/graphics/fb0 ./fb0 is the framebuffer contains 2+ frames of data because android implements double buffering. So to display 1 image, applications pull down data for 2+ images. This takes some time to perform, not to mention the time it takes to then render the image from the data. Also a problem is you have to know the screen resolution of the device your reading the buffer for, otherwise you will end up with a garbled image.

Using the TCP method eliminates these problems. First, it only sends one frame of data, so we are not pulling extra, unused bytes, so it speeds up the transfer time. It also sends back the screen resolution of the image, plus other information like the bpp, argb lengths and offsets.

My plan is to move everything that Droid Explorer uses the adb.exe commands for over to TCP eventually. The SDK is still required to be on the machine, but it gives more control to Droid Explorer, and in this case, speeds things up.

Birth of the blog

I have not blogged in a long time, since I took down my old website that had my blog on it about a year ago. I will now use blogger as my blog host as I do not feel like maintaining the software to blog.

I am an Application/Web Developer at UPS in Bedford Park, IL for my day job. In the evenings I am an Android enthusiast, and write applications for the Android platform, Web, and Windows.

What should you expect from this blog? Honestly, it will depend on my mood, schedule and where the stars are aligned. I could post a detailed post on a new android application I released, it could be a short post about a new build of Droid Explorer, or I could post how pissed I am that my sd-card stopped working.

How often will I post? When ever I have something I think is worth posting. I could post 30 times in one day, but not post again for 2 months.

Do I always ask myself questions and then answer them? No, now move on…