Showing posts with label Android. Show all posts
Showing posts with label Android. Show all posts

Sunday, September 27, 2015

Using google blobstore through android client

Recently I have been working on an Android project that required me to store some images into cloud. Upon reading through google documentation, I learnt that the best place to store dynamic images is Google BlobService. Unfortunately for me it required some iterations to figure out how to use this service. So I thought I would document it here for the help of others.

It is important to understand how the BlobService workflow works. Following is the typical workflow of a blobservice.


  • The client first creates an upload URL where the image would be uploaded. Since it is hard (not possible) to do a decent authentication scheme around blobservice, I decided to use a appengine endpoint to create the upload URL for me. The code for appengine endpoint implementation is very simple.

    @ApiMethod(name = "getUploadURL")
    public UploadURL getUploadURL() {

        BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
        return new UploadURL(blobstoreService.createUploadUrl("/_ah/uploads"));
    }
The arugument to createUploadUrl is the suffix that would be added to your appengine base URL. We need to understand that the actual  image upload is unauthenticated, i.e. anybody who has the URL can upload the image but the endpoint itself is authenticated and hence nobody would know the URL to upload anything except authenticated users. 
  • Now that we have the URL, the first thing that we need to do is to convert the image into a byte array that we can upload. I have created following utility function to do just that. Basically I don't want to store full sized images, I have created this function that takes a Bitmap and scales the image and converts it to a byte array. The images is scaled with actual aspect ratio with the width fixed at maximum PRODUCT_IMAGE_WIDTH.
    public static byte[] getByteArrayFromBitmap(Bitmap bitmap, boolean scale) {

        Bitmap scaledBitmap = bitmap;
        if (scale) {
            scaledBitmap = scale(bitmap);
        }
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        scaledBitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
        return stream.toByteArray();
    }
    public static  Bitmap scale (Bitmap source){
        int w = source.getWidth();
        double factor = 1.0;
        if (w > PRODUCT_IMAGE_WIDTH) {
            factor = ((double)w) / ((double)PRODUCT_IMAGE_WIDTH);
        }
        else {

        }

        int dw = new Double((((double)factor) * ((double)(source.getWidth())))).intValue();
        int dh = new Double((((double)factor) * ((double)(source.getHeight())))).intValue();
        return Bitmap.createScaledBitmap(source, dw, dh, false);
    }
  • Now that we have the image as a byte array, we upload the image from the client using this URL. Since google has removed the old HTTPClient, I had to figure out how to use OkHTTP which seems to be the new HTTP client that needs to be used. It was really not very hard to do this, it is just that documentation around OKHttp is very sparse and it takes some trial and error to make this work. We set a response header so that the client can receive the cloud key that is generated by the blob service. We need to know this key to retrieve the image later.
            String uploadURL = api.getUploadURL().execute().getUrl();
            OkHttpClient httpClient = new OkHttpClient();
            String filename = UUID.randomUUID().toString() + ".png";
            RequestBody body = new MultipartBuilder("image-part-name")
                    .type(MultipartBuilder.FORM)
                    .addFormDataPart("file", filename,          

            RequestBody.create(MediaType.parse("image/png"), imageByteArray))
                    .build();
            Request request = new Request.Builder().url(uploadURL).post(body).build();
            Response response = httpClient.newCall(request).execute();
            String cloudKey = response.header("X-MyApplication-Blob-Cloud-key");
            // We can store this cloud key in cloud store entity with the other data related to 
            // image so that we can retrieve it later.
  • Let's look at the implementation of blobservice. We basically need to create a servlet to handle the upload request. The doPost of the servlet should handle the upload. WIth some trial and error, I figured out that the blobservice API looks for a multipart payload with image byte array and header with the name "file". You can also provide the bytearray type, otherwise it decodes it with the filename extension that you provide as part of the value.
    @Override
    public void doPost(HttpServletRequest req, HttpServletResponse res)
            throws ServletException, IOException {

        Map> blobs = blobstoreService.getUploads(req);
        List blobKeys = blobs.get("file");
        if (blobKeys == null || blobKeys.isEmpty()) {
        } else {
            res.setHeader("X-MyApplication-Blob-Cloud-key", blobKeys.get(0).getKeyString());
        }
    }
  • Retrieving the image is also very simple. You need another servlet to do that. In my case I have a servlet with a GET method which returns the image.
    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse res)
            throws IOException {

        BlobKey blobKey = new BlobKey(req.getParameter("blob-key"));
        blobstoreService.serve(blobKey, res);
    }
As we can see, it is quite easy to build a work flow where the image is stored with blobservice and other metadata is stored with google cloud store with cloud key. The image can be retrieved based on the other metadata and lookup from cloud store.

Saturday, December 14, 2013

Security concern: NDTV android app


 The latest release of NDTV Android app is asking for full access to your calendar. Given that it is an app from a news site, what's the point of asking for complete access to your calendar on the phone. What do they expect to do with your calendar. I am not going to install this upgrade.

Friday, May 17, 2013

Apps that I use


Here is a list of applications that I have downloaded from Android Market and use them.

  • Adobe Reader -- For reading PDF documents.
  • Amazon Kindle -- eBooks from Amazon
  • Audible -- Audio books
  • Google Authenticator -- Two factor authentication for Google services
  • Barcode Scanner -- Really essential app, can use the camera to scan any barcode. This app is also used by many other apps for that functionality.
  • Booking.com -- App for hotel reservation and keeping track of your reservations
  • Bubble -- A surface level testing application
  • CallTrack -- Records your calls to Google Calendar
  • Calorie Counter -- A client for weight losers' social network http://www.fatsecret.com
  • CamScanner -- Very useful app for creating PDFs out of whiteboard discussions and using the camera as an scanner.
  • Cardio Trainer -- Can record your running sessions along with a google map
  • Citibank India -- Citibank online banking app
  • Cleartrip -- Mobile app for cleartrip.com
  • Compass -- A regular direction compass, has analog and digital settings. Pretty useful
  • Concur -- Keeping track of reservations
  • ConvertPad -- Fantastic Unit conversion app
  • Currents -- App for creating magazines (like flipboard). Currently used as a replacement for Reader
  • CWT To Go -- My company's travel agent is CWT, so I use this to keep track for official travels
  • Dictionary -- Mobile app for dictionary.com
  • doubleTwist -- Alternate music player, mostly used for a very good podcast search service
  • Drive -- App for google drive
  • Epocrates -- To make sure that the doctor is not messing up with you
  • Facebook for Android -- What would be life without facebook
  • File Commander -- To access the storage in the phone directly
  • Finance -- Client for Google Finance
  • Flipboard
  • Goggles -- Nifty app that can decipher things based on their pictures, Just point the camera and it would tell you what it is.
  • Google+
  • HDFC Bank -- Very Nice app for online banking
  • IMDb -- All about movies
  • L:IC Mobile -- Keeping track of your policies
  • Linked In
  • Lookout -- Security service
  • Voice -- Client for google Voice. I have it but can't use it in India
  • Layar -- Augmented Reality app, overlays stuff on google map. Pretty cool
  • Listen -- Podcast finder
  • Locale -- Very nifty app to change the settings of your phone based on time or your location.
  • My Tracks -- Records your movements. Very useful to share directions with others.
  • My Backup -- Backups all the user data on SD card. Useful when changing phones.
  • Places Directory -- Another cool app from Google, nice to find places around you.
  • QuickOffice -- Official version integrates very well with Google Drive
  • Seesmic -- A twitter client
  • Shazam -- Can decipher song details by listening to it.
  • Skype
  • SMS Backup+ -- Backups all your SMS messages to your gmail account under a specified Label.
  • Twitter -- Client for twitter
  • Unit Converter -- Converts pretty much any unit to any other unit
  • Ustream Broadcaster -- Broadcast yourself. Pretty good
  • Voice Recorder -- Record voice
  • Yahoo Mail -- That yahoo email account that I never use
Let me know you any of you people out there use any other app that you find useful. I can try that out.

Wednesday, September 5, 2012

Google Navigation for India

Just checked, Google has enabled voice navigation for India. I will check it out today and post a detailed review. But this is simply great news.

Tuesday, November 15, 2011

Save battery and secure your Android Device

The best combination of applications for your android phone are Lookout and Juice Defender. The biggest pet peeve for most of the android (and even iPhone) phones is that the battery does not really last a day if you are regularly using the phone whole day for emails, google maps and other stuff.
Juice Defender disables data connectivity and re-enables it after certain interval to save battery and can increase the life of the battery by 2-3 times.
Lookout Security app is a much because it acts as a virtual guard and can help you to locate the phone if it is really lost. The problem is that if you are running this app with Juice Defender, then you data is disabled and you can not locate the phone.
This is where a hidden feature in Juice Defender comes really handy. There is a feature to define a password that you can send to your phone and Juice Defender would disable itself.
With the combination of these two applications, you can save battery as well as secure your android device.

Friday, November 11, 2011

Moto Razr Android XT910 -- a review

Finally got the latest Moto Razr Android XT910  from expansys.com UK. Here are my first impressions. I still believe that apart from Apple and Nokia, Motorola has the best mechanical design of its devices and that tradition continues with Moto Razr. The phone looks sleek, really thin.

The camera definitely is an improvement over Atrix.
The video camera also produces decent quality stuff.

Swype IME is bundled with the phone which is definitely better than the standard IME available with the android OS.

The Blur software in the phone seem to have been toned down but still exists. I actually like some of the stuff provided as part of Blur. For example the Favorite Contacts widget is a great tool for keeping few of the favorite people on the home screen.

The phone has the battery compartment sealed (like iPhone) and SIM and SD cards have to be inserted to the side of the phone. Also the phone only accepts micro SIM cards, so one has to either get a micro SIM card or make one by cutting their SIM cards.

On measuring the performance using Quadrant Standard Edition, the phone returns a benchmark figure of 2608 which is almost twice the figure returned by Nexus One 2.2+.

The phone has Smart Actions application which looks very similar to Locale application that has existed in the Android market for quite some time.

The screen is pretty good, although it has same resolution as Atrix but the physical size is higher, which makes it easier to use but little harder to carry. People with smaller hands may find it difficult to hold in their palms.
Here is the details that Android System Info application returned.


OSBrowser UserAgent : Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; XT910 Build/6.5.1-73_SPU-9) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
BuildInfosAndroid version : 2.3.5Release Codename : RELAPI LEVEL : 10CPU ABI : armeabi-v7aManufacturer : motorolaBootloader : unknownCPU ABI2 : armeabiHardware : mapphone_cdmaRadio : unknownBoard : spyderBrand : MOTODevice : umts_spyderDisplay : 6.5.1-73_SPU-9Fingerprint : MOTO/XT910_RTGB/umts_spyder:2.3.5/6.5.1-73_SPU-9/1319876225:user/release-keysModel : XT910Product : XT910_RTGBTags : release-keys
BatteryDischarging...Level : 60 %Technology : Li-ionTemperature : 32.0 °C (89.6°F)Voltage : 3892 mV
MemoryDownload Cache Max: 708MB/ Free: 692MBdata Max: 3.74GB/ Free: 3.29GBExternal storage Max: 8.00GB/ Free: 7.99GBTotal RAM: 0.91GBFree RAM: 196MBThreshold RAM: 46.00MB
Low Memory Killer LevelsFOREGROUND_APP:__ 12.00MBVISIBLE_APP:_________ 18.00MBSECONDARY_SERVER: 28.12MBHIDDEN_APP:________ 46.00MBCONTENT_PROVIDER: 68.00MBEMPTY_APP:__________ 82.03MB
CPUProcessor ARMv7 Processor rev 3 (v7l)processor 0BogoMIPS 43581.82Features swp half thumb fastmult vfp edsp thumbee neon vfpv3CPU implementer 0x41CPU architecture 7CPU variant 0x1CPU part 0xc09CPU revision 3Hardware mapphone_CDMARevision 0000Serial 0000000000000000Freqency range: 300.0 -> 1200.0MHzCurrent Frequency: 1200.0MHzFrequency Stats (time):- 300.0 MHz 63.77% (3124603)- 600.0 MHz 7.74% (379481)- 800.0 MHz 7.37% (361167)- 1000.0 MHz 7.91% (387678)- 1200.0 MHz 13.2% (646818)
CameraAntibanding: autoColor Effect: noneExposure Compensation: 0Exposure Compensation Step: 0.1Flash Mode: offFocus Mode: autoFocal Length: 4.6Horizontal View Angle: 62.1Jpeg Quality: 95Jpeg Thumbnail Quality: 60Jpeg Thumbnail Size: 240x320Max Exposure Compensation: 30Max Zoom: 15Min Exposure Compensation: -30Picture Format: JPEGPicture Size: 2448x3264Preview Format: NV21Preview Framerate: 30Preview Size: 480x640Supported Antibanding: - off- auto- 50hz- 60hzSupported Color Effects: - none- negative- solarize- sepia- mono- natural- vivid- colourswap- blackwhite- whiteboard- blackboard- aqua- posterize- red-tint- green-tint- blue-tintSupported Flash Modes: - off- on- auto- torchSupported Focus Modes: - fixed- auto- infinity- macro- continuous- continuous-video- extended- portrait- touch- face-prioritySupported Jpeg Thumbnail Sizes:- 0x0- 96x96- 144x176- 144x352- 384x512- 240x320- 120x200- 120x160Supported Picture Formats: - JPEG- YUY2- NV21- RGB_565Supported Picture Sizes: - 240x320- 480x640- 960x1280- 1200x1600- 1536x2048- 1458x2592- 1936x2592- 1840x3264- 2448x3264Supported Preview Formats: - YUY2- NV21- RGB_565Supported Preview Frame Rates: - 30- 25- 24- 20- 15- 10Supported Preview Sizes: - 96x128- 120x160- 144x176- 160x240- 288x352- 240x320- 480x640- 576x768- 480x720- 576x720- 480x800- 480x864- 720x1280- 1080x1920Supported Scene Modes: - auto- macro- action- portrait- landscape- night-portrait- sunset- steadyphotoSupported White Balance: - auto- daylight- cloudy-daylight- shade- tungsten- fluorescent- incandescent- horizon- face-priority- sunset- twilight- warm-fluorescent- sun- cloudy- flash- night-normalWhite Balance: autoVertical View Angle: 48.2Zoom: 0Zoom Ratios: - 100- 115- 132- 152- 174- 200- 230- 264- 303- 348- 400- 459- 528- 606- 696- 800Smooth Zoom Supported: trueZoom Supported: true
ScreenResolution: 540 x 960Refresh Rate: 68.0X factor for DIP: 1.5Density: 240 dpiPixel per inch X: 258.79245 dpi Y: 256.67368 dpi
OpenGLOpenGL Version supported : 2.0OpenGL Version supported : OpenGL ES-CM 1.1 build 1.7.17.4958Vendor : Imagination TechnologiesRenderer : PowerVR SGX 540Extensions : GL_OES_byte_coordinates GL_OES_fixed_point GL_OES_single_precision GL_OES_matrix_get GL_OES_read_format GL_OES_compressed_paletted_texture GL_OES_point_sprite GL_OES_point_size_array GL_OES_matrix_palette GL_OES_draw_texture GL_OES_query_matrix GL_OES_texture_env_crossbar GL_OES_texture_mirrored_repeat GL_OES_texture_cube_map GL_OES_blend_subtract GL_OES_blend_func_separate GL_OES_blend_equation_separate GL_OES_stencil_wrap GL_OES_extended_matrix_palette GL_OES_framebuffer_object GL_OES_rgb8_rgba8 GL_OES_depth24 GL_OES_stencil8 GL_OES_compressed_ETC1_RGB8_texture GL_OES_mapbuffer GL_OES_EGL_image GL_EXT_multi_draw_arrays GL_OES_required_internalformat GL_IMG_read_format GL_IMG_texture_compression_pvrtc GL_IMG_texture_format_BGRA8888 GL_EXT_texture_format_BGRA8888 GL_IMG_texture_stream GL_OES_egl_sync GL_IMG_vertex_array_object
SensorsLIS3DH 3-axis Accelerometer: 0.25 mA by ST MicroAK8975 3-axis Magnetic field sensor: 6.8 mA by Asahi KaseiAK8975 Orientation sensor: 7.05 mA by Asahi KaseiCT405 Proximity sensor: 3.0 mA by TAOSCT405 Light sensor: 0.175 mA by TAOSGravity Sensor: 0.25 mA by Google Inc.Linear Acceleration Sensor: 0.25 mA by Google Inc.Rotation Vector Sensor: 7.05 mA by Google Inc.
Featuresandroid.hardware.wifiandroid.hardware.location.networkandroid.hardware.telephonyandroid.hardware.locationandroid.hardware.touchscreen.multitouchandroid.hardware.sensor.compassandroid.hardware.cameraandroid.hardware.touchscreen.multitouch.distinctandroid.hardware.bluetoothandroid.hardware.sensor.proximityandroid.hardware.sensor.lightandroid.hardware.microphoneandroid.hardware.location.gpsandroid.hardware.camera.autofocusandroid.hardware.telephony.gsmandroid.hardware.telephony.cdmaandroid.hardware.camera.frontandroid.software.live_wallpaperandroid.hardware.sensor.accelerometerandroid.hardware.touchscreenandroid.hardware.camera.flashglEsVers=2.0
JavaPropertiesjava.vendor.url: http://www.android.com/java.class.path: .java.class.version: 46.0os.version: 2.6.35.7-ge439ab5java.vendor: The Android Projectuser.dir: /user.timezone: nullpath.separator: :os.name: Linuxos.arch: armv7lline.separator: file.separator: /user.name: java.version: 0java.home: /system


Tuesday, March 15, 2011

Motorola Milestone Software Update FroYo

Finally Motorola has made FroYo upgrade available for some countries. I have a phone that was bought in UK and I could upgrade the software. You can see the 3G hotspot and apps2SD and other features that were part of FroYo.

The software update is not available for OTA but you need to download Motorola Software Update utility from here.

Once you have the software and a Windows machine, you can connect the phone using USB cable and after that it is self explanatory.

Tuesday, January 12, 2010

Ripping movies to watch on Milestone

Here are the instructions to watch movies by converting them from DVD to a format so that they are optimized for Motorola Milestone. These would also work well for a Droid phone.
  • Install Handbrake Software, make sure to install the CLI
  • Install VLC software, Handbrake will not be able to decrypt DVDs without this software and will give error.
  • I use both of these on a Linux machine but both these software are also available for windows and one can easily figure out how to work these from respective websites. 
Once this setup is done, just insert the DVD and run following command line.
HandBrakeCLI -e x264  -q 20.0 -a 1 -E faac -B 128 -6 dpl2 -R 48 -D 0.0 -f mp4 -X 854 -Y 480 -m -x cabac=0:ref=2:me=umh:bframes=0:subme=6:8x8dct=0:trellis=0 -i -o MovieName.m4v --longest

If the DVD has multiple titles then above command will pull out the longest title. Otherwise one can use --title option for getting specific title. This command scales the movie to correct format for Milestone/Droid.

Wednesday, December 16, 2009

Application Review: App to QR

qrcode
Another small and useful app in the android market. This application can give the searchable URL for any application installed on your phone or generate a QR Code that you can use to share via the camera with another friend. I have found it extremely useful. Use the QR Code on the right to go to this application.

Application Review : Ringdroid

qrcodeHere is an application that is available on android market for quite some time. I just never tried it primarily because my ADP1 just ran out of space for installing additional application. The application is called Ringdroid. The application can read any MP3 stored on your phone or you can record any sound and then it allows you to define the boundaries of what you want to set as ring tone.

Works pretty well and I found it useful. Use the QR Code on the right to jump to this application in the market.

Tuesday, December 15, 2009

Facebook App for Android

Finally after long time, a Facebook app for Android is in market. Since the benchmark app for Facebook on mobile devices seems to be one on iPhone, I thought let me compare how the current Android App stands up against iPhone App. Please note that I do not have a iPhone but a iPod Touch so my comparison is between those two.

Category
Android App
iPhone/iPod Touch
Main Screen
Six main icons, New Feed, Friends, Photos, Take Photo, Profile, Notifications
Nine main icons, News Feed, Friends, Photos, Profile, Inbox, Chat, Requests, Events, photos, Notes
News Feed
New Feed screens look very similar. iPhone has a + button to add comments while Android has long touch. iPhone also has a large Rolodex like menu which essentially maps to facebook menu where you can choose a filter for your feed.
Profile
Profile screen is almost identical in both the apps with tabs for wall, info and photos being on top on Android and on bottom in iPhone. Also relationship status on iPhone is better with the photo of the spouse being shown with the name while Android app just says that "Married". Android app also does not show the IM addresses while iPhone app shows them.
Photos is very similar with iPhone app having an additional album for Profile photos which Android app does not have.
Friends
Friends screen is very similar in both with Facebook app sorted on last name while android app sorted on first name. Also the first character selection on iPhone on the right hand side of screen is pretty useful to directly jump to a person whose name starts with a specific character.
Notifications
Screens are very similar but surprisingly Android app does not allow one to click on a name and go to his profile. Also number of notifications in Android app seems to be much less compared to what is there on iPhone. For example I could not find notifications related to people commenting on my status in Android app while these are there on iPhone client.
Photos
Very similar screens, similar functionality.
Events
Android does not this option at all
iPhone client allow you to have a look at events.
Inbox
Android does not this option at all
iPhone client shows the messages in the Inbox and lets you reply to them.
Chat
Android does not this option at all
You can chat with online friends.
Requests
Android does not this option at all
You can see pending requests and respond to them.
To sum it up, even though Android client is far improved compared to the last version, it still lags too much compared to iPhone client. Many features are really very important omissions. If I had any say in prioritizing these, I would put them in following order.
  1. Chat -- very important, many people are only available for chat on Facebook and can't get them on google talk
  2. Friend requests -- Very important option, since currently the best solution is to click on the email received and go to web browser and then accept/reject the request.
  3. Inbox/Event
  4. Catch up to other features that I have listed in the table above.

Motorola Milestone, Apps that I use

Here is a list of applications that I have downloaded from Android Market and use them.

  • Barcode Scanner -- Really essential app, can use the camera to scan any barcode. This app is also used by many other apps for that functionality.
  • Bubble -- A surface level testing application
  • Calorie Counter -- A client for weight losers' social network http://www.fatsecret.com
  • Cardio Trainer -- Can record your running sessions along with a google map
  • Compass -- A regular direction compass, has analog and digital settings. Pretty useful
  • Documents to Go -- Office compatible document reader and editing capability
  • Facebook for Android -- What would be life without facebook
  • Finance -- Client for Google Finance
  • Fring -- IM client for many systems, supports skype
  • Goggles -- Nifty app that can decipher things based on their pictures, Just point the camera and it would tell you what it is.
  • Voice -- Client for google Voice. I have it but can't use it in India
  • Layar -- Augmented Reality app, overlays stuff on google map. Pretty cool
  • Listen -- Podcast finder
  • Locale -- Very nifty app to change the settings of your phone based on time or your location.
  • My Tracks -- Records your movements. Very useful to share directions with others.
  • My Backup -- Backups all the user data on SD card. Useful when changing phones.
  • Places Directory -- Another cool app from Google, nice to find places around you.
  • Seesmic -- A twitter client
  • Shazam -- Can decipher song details by listening to it.
  • ShopSavvy -- Retail app, not very useful for India but apparently very popular in Japan
  • SMS Backup -- Backups all your SMS messages to your gmail account under a specified Label.
  • Toggle Wifi -- Does what it says, I place it as a shortcut on home screen to control WiFi
  • TouchDown -- Exchange App, I prefer it over what is already on the phone
  • Twidroid -- Client for twitter, I prefer it over seesmic
  • Unit Converter -- Converts pretty much any unit to any other unit
  • Ustream Broadcaster -- Broadcast yourself. Pretty good
  • Voice Recorder -- Record voice
Let me know you any of you people out there use any other app that you find useful. I can try that out.

Tuesday, December 8, 2009

Installing Google Maps 3.3 on ADP1

Recently Google pushed Google Maps 3.3 to Android market. But due to a signature mismatch, you can not install it directly from market. It would give you signature mismatch error. If you are owing a ADP1, you should not have problems with getting your hands dirty. Here are the instructions that you can use to install new version of Maps.

Connect your ADP1 to your PC using the USB flashing cable and them perform following steps. Login into the phone using following steps.

  1. $ adb shell
  2. $ su
Now erase the old instance of Maps.
1) Mount /system read/write; as root on the phone:
    mount -o remount,rw /dev/block/mtdblock3 /system

2) erase the standard system Maps.apk; as root on the phone:
    rm /system/app/Maps.apk

3) uninstall the Maps data; on your computer:
    adb uninstall com.google.android.apps.maps

4) Optional; You probably want to mount /system read-only again; as root on the phone:
    mount -o remount,ro /dev/block/mtdblock3 /system

5) You can install Google Maps from the Market as normal now.
As usual, standards disclaimers apply. Thanks to  Zinx at Google Forums for this post.

Monday, May 11, 2009

ADP 1.5 Cupcake release

Finally HTC has provided the official software update named cupcake and labelled 1.5. and it is available here.

Hope that helps.
Interesting things to look for are calendar widget, auto rotate feature and most anticipated feature on screen keyboard.

Earthquake -- Widget Review

Recently I downloaded earthquake widget on my ADP phone with cupcake build. Very cool widget? It is surprising to know how many earthquakes happen everyday. The package can be downloaded from market and has an application and one widget. Search for Earthquake in market.

Wednesday, March 11, 2009

Official ADP1 1.1 firmware

I had earlier posted about the software update for my ADP1 device, it seems that was not the official software update. That supposedly contained the software that was provided as part of holiday gift phones that were given to Google employees.

Finally HTC has provided the official software update and it is available here. Please go through the page and the software upgrade should be easy. One things that I faced was that I had setup the USB device into mass storage mode, one needs to set in debug mode. Select Settings->Applications->Development->USB Debugging. This option should be enabled and then the phone will be visible to adb and fastboot.

Another issue that has cropped up with this software upgrade is the fact that to start with Google Latitude is disabled. It seems it is just a software option and can be very easily enabled by using instructions here.
1) Connect your Rooted G1 to your PC via USB and run 'adb shell' (or use the G1 Terminal App no the phone)
2) su
3) cd /data/data/com.android.providers.settings/databases
4) sqlite3 settings.db
5) .dump gservices (to see all your current settings and check if maps_enable_friend_finder already exists)
6) INSERT INTO "gservices" (name,value) VALUES('maps_enable_friend_finder','1');
7) .quit
8) exit

Now the Join Latitude button will be shown in Maps again, no need for a reboot.

If it doesn't appear make sure you have the values
<boolean name="FF_SHOWN" value="true" />
<boolean name="SHOW_MY_FRIENDS" value="true" />

in the file /data/data/com.google.android.apps.maps/shared_prefs/com.google.android.maps.MapsActivity.xml

Hope that helps.

Friday, February 20, 2009

SMS Backup: Application review

Here is an interesting useful application that I got after I asked a question on android developers group. I had almost started developing this application that would backup the SMS messages on the device to the GMail account.

Essentially the application is called SMS Backup, one can search this application with this string in android market. Once downloaded and installed you need to setup your google account in the application and make sure that google account is IMAP enabled.

After this simple setup, your SMS messages would be backed up to the GMail account under a label SMS. This also can be changed from the application settings.

Currently it seems that the restore functionality is missing. I would have liked to have that functionality as well.

I would still recommend this application to everybody.

Tuesday, February 17, 2009

My Tracks: Application Review

Finally an application that I was long looking for. I used to use sportstrack application on my N95 to log my GPS tracks and use the logging data for photo tagging. There did not seem to be any equivalent application on the Android.

The application My Tracks solves these problems, one can start the application and it will log all the GPS information. I find the application simple. At the end of the track recording the application would upload the track to google maps and google docs. One can use the data for any purpose after that.

The application also provides option to log statistics while the upload of the track and one has access to this data also on the google. The application can run in background and in limited use that I have done with it, did not seem to overburden the battery.

The application has features of exporting maps via KML files or GPX files which comes handy since I use gpicsync for photo synchronization. The only strange things is that these options are buried under "Share with friends" option. I can live with that.

I would recommend this application to pretty much everybody.

Thursday, February 12, 2009

RC33 equivalent upgrade for ADP1

T-mobile in US has just pushed RC33 upgrade for G1 devices, now the RC33 equivalent upgrade for ADP1 has been made available. One can download from following places.

http://andblogs.net/downloads/signed-holiday_devphone-ota-130444-debug.55489994.zip

https://android.clients.google.com/updates/signed-holiday_devphone-ota-130444-debug.55489994.zip

The installation procedure is very simple, download the zip file above to your desktop. Then connect your ADP1 to your PC and mount its SD card as a removable drive on your PC. To do this, just connect the phone using the USB cable and then click on the "USB connected" notification, from there you can click on the mount button to mount the SD card to PC.

Now the phone's SD card is visible on your PC. After that copy the above ZIP file to the SD card and rename it to update.zip.

Now disconnect the phone from PC and shutdown by pressing the power button. Once shutdown completely, press home and power button simultaneously. Keep home key pressed when you release power button. You will see a triangle with a exclaimation sign on the screen. Press Alt-L and you will see a text menu.

Now press Alt-S to apply the update to the phone. You will see following messages.
Installing from sdcard...

Finding update package...

Opening update package...

Verifying update package...

Formatting BOOT...

Extracting radio image...

Formatting SYSTEM...

Copying files...

Writing BOOT:...

Installation complete.

Press Home+Back to reboot

On pressing Home+Back the phone displays
Writing Radio image...

If you encounter an error with following text in it
assert getprop(”ro.bootloader”) == “0.95.0000″

Then you need to download a nocheck image which can be downloaded from below location.

http://andblogs.net/downloads/signed-holiday_nochecks_devphone-ota-130444-debug.55489994.zip

After that you may see the image of an integrated circuit with an arrow and then the phone with power up with the familiar android logo. Once the phone powers up, you are upgraded to the RC33 equivalent version. To verify the upgrade, go to settings, About Phone and check the build number, it will show holiday_devphone-userdebug 1.1 UNLOCKED 130444 test-keys.  Another sign of the fact that the phone is updated is a new menu item called System updates in the About phone menu.

So, go ahead, upgrade and have fun. I have just done this and I will post if I see any thing significant or intereating.

Thursday, January 22, 2009

Locale: Application review

The cool thing about android is the number of interesting applications that are available from Market they may be simple but do interesting things. Here is one such application that I downloaded and installed recently.

Locale is an application that can customize your phone based on your location, time and many other parameters. For example you can automatically send out a tweet when you are at a certain location. You can change the screen brightness, ringer and other stuff.

From what I have seen till now, I like this one. Let me give it a try for couple of more weeks before I pass judgement on it.