HTC Salsa the best Android phone for social networking!

last week HTC announced another new phone, HTC Salsa. it's a candy bar type Android phone and has HTC native look. but this phone has couple of specifications. first thing is it has a dedicated key for facebook. also according to it's features, this phone might be bit cheaper than Desire S and similar phones. HTC Salsa has a 3.4 inch capacitive touchscreen and has very nice design. it available in two colors, silver and white.
HTC Salsa runs with Android 2.3 Gingerbird OS. it also comes with the latest version of HTC sense UI. HTC Salsa has 600MHz processor and a 512MB RAM. the internal memory is 512MB and it supports up to 32GB memory cards. the main camera of this phone is 512MB and it supports geo tagging and face detection features. also the camera comes with a LED flash. HTC Salsa also has a secondary camera at the front. it supports 3G video calling.
this phone comes with the latest version of bluetooth. it also has wi-fi and a 7.2MBP/s HSDPA modem. since this phone has Android 2.3, it has Google's SNS technology.

Heading for GDC

[This post is by Chris Pruett, who writes regularly about games here, and is obviously pretty cranked about this conference. — Tim Bray]

Android will descend in force upon the Game Developers Conference in San Francisco this week; we’re offering a full day packed with sessions covering everything you need to know to build games on Android.

From 10 AM to 5 PM on Tuesday the 1st, North Hall Room 121 will be ground zero for Android Developer Day, with five engineering-focused sessions on everything from compatibility to native audio and graphics. Here's a quick overview; there’s more on the Game Developer Conference site:

  • Building Aggressively Compatible Android Games — Chris Pruett

  • C++ On Android Just Got Better: The New NDK — Daniel Galpin and Ian Ni-Lewis

  • OpenGL ES 2.0 on Android: Building Google Body — Nico Weber

  • Android Native Audio — Glenn Kasten and Jean-Michel Trivi

  • Evading Pirates and Stopping Vampires Using License Server, In App Billing, and AppEngine — Daniel Galpin and Trevor Johns

Our crack team of engineers and advocates spend their nights devising new ways to bring high-end game content to Android, and a full day of sessions just wasn't enough to appease them. So in addition, you can find incisive Android insight in other tracks:

Finally, you can visit us in the Google booth on the GDC Expo floor; stop by, fondle the latest devices, and check out the awesome games that are already running on them. We're foaming at the mouth with excitement about the Game Developers Conference next week, and you should be too.

Hope to see you there!

What comparisons between Taser and Stun Gun Mobile Phones?

What comparisons between Taser and Stun Gun Mobile Phones?
There is an interesting video released out on BLUtube about the potential understanding of a forensic component occurring within the use of Taser. The component relates to Taser discharge, as opposed to the actual result impacting on the target-human body.


BLUtube is powered by PoliceOne.com
The observations in the video nonetheless

Download Game UFO 2012 for Nokia 5800, X6, N97, N8, 5235, 5230 and 5530

A mysterious organization suggested a former mercenary an absurd at first glance mission: to assemble a team of fighters to kill aliens in one of the remotest villages, who would have thought that agreeing to the terms of the mysterious Organization intermediary - Smith, he played a key role in the fate of mankind.

UFO 2012 is a Java game for Symbian^3 mobiles such as Nokia N8 and Symbian S605th touch screen mobiles such as Nokia X6, N97, N97 Mini, 5530 XpressMusic, 5800 XpressMusic, 5230, 5233 and 5235. The village has been under close attention of Aliens. However, as you already know, UFOs observations have become more frequent throughout the world recently.

According to rumor, something incredible is happening now in this village. I am going there to see everything with my own eyes.. Get ready. Learn Alien technology and earn achievements for getting access to the new types of weapons. UFO 2012 game is developed by Axetta and published by DaSuppaPublisher.

UFO 2012 is available in two languages: English and PYCCKNÑ. Get the version 1.2.35 of this game from the following download link.

Game UFO 2012 for Nokia 5800 XpressMusic and N97 (1004 KB)
Related Posts:

Download Game Shikari Shambu Swingcredible for Nokia 5800, X6, N97 and N8

Shikari Shambu: Swingcredible is a cool Java game for Symbian^3 mobiles such as Nokia N8 and Symbian S60v5 touch screen mobiles such as Nokia 5800 XpressMusic, N97, N97 Mini, X6, 5233, 5235, 5230 and 5530 XpressMusic. The name of this game sounds a typical Indian name but game is truly a world class. The game offers wonderful graphics and easy to use touch controls.

Tap to jump off the rope and try to land on the center of the tower to score a perfect landing and maximum points. There are two game modes: Campaign and Arcade. In Campaign mode cross 8 towers to pass the level. In Arcade mode score as many points as possible. Collect 20 stars to win an extra life.

The game is not as simple as it looks. There are many obstacles in your way to win a level. Red stone will block player's swing thrice. Player will skid if he lands on oil. Player will lose a life if he lands on fire. Shikari Shambu: Swingcredible is developed by Synqua Games.

To maintain the perception of a courageous hunter, Shikari Shambu has agreed to help rescue the wulaku tribe's scared animal that has wandered off into the wilderness. The path is filled with treacherous elements and swinging from tower to tower is the only way to get there. Not only is his reputation at stake, but it's the wulaku tribal custom of shaving off the moustache on a failed mission. And the journey begins for Shambu..

This game is available in multiple languages. The version 1.0.0 of this cool game is available to download.

Game Shikari Shambu Swingcredible for Nokia 5800 XpressMusic and N97 (492 KB)
Related Posts:

Download Game Deer Hunter 4 African Safari for Nokia 5800, N8, N97 and X6

Deer Hunter African Safari lets you experience an African Safari adventure from the safety of your mobile phone. Travel from the deserts of Namibia, the savannah of Tanzania and the South African bushlands to Cameroon rainforests and Ethiopian mountains.

Bag the famed African animals: Lion, Buffalo, Kudu, and even the mighty Rhinoceros! Use varied weapons and equipment to track and bag your prey. Progress through your difficulty levels and five varied locations to complete the game, purchase items to assist you during hunting, and unlock the most valued achievements.

There are two game modes: Safari and Quick Hunt. Safari mode allows you to hunt over a series of hunting days in each country available, starting from Namibia. This mode is used to unlock new locations and difficulty levels. To beat the Safari, you must achieve a target score for each day. You are limited to 5 trophies per hunting day, and finding the best animals and using weapons that bring good bonuses is the key to success.
Quick Hunt is a short one-day hunt that can take place in any unlocked location. You can choose any of the currently available difficulty levels.

Every hunt begins on the GPS map. Tap the map to move the cursor and search for animal tracks. Follow the tracks you uncover to find out where the Animal is currently grazing. Deer Hunter 4 African Safari game is developed by Glu Mobile. The game is available with multiple languages support. It's a Java game designed to works with Symbian S60v5 mobiles such as Nokia 5800 XpressMusic, N97, N97 Mini, X6, 5230, 5233, 5235, 5530 XpressMusic and Symbian^3 mobiles such as Nokia N8. Get the version 1.0 of this game from the following link.

Game Deer Hunter 4 African Safari for Nokia 5800 XpressMusic and N97 (876 KB)
Related Posts:

Download Game Worms 2011 Armageddon for Nokia 5800, N97, X6 and 5530

Worms 2011 Armageddon is a Java game for Symbian S605th touch screen mobiles such as Nokia 5800 XpressMusic, N97, N97 Mini, X6, 5230, 5233, 5235 and 5530 XpressMusic. World's most popular worms are back! 2011 is occured, a new worm war, take a part in this battle, blow up moving worms or kick them with the help of beat.

There are 3 game modes: Campaign, Quick Play and Custom Game. Complete achievements to unlock unique customizations. Try them out in Custom game mode. Deathmatch - Last team standing wins. Instant Kill - Don't try to run, Don't try to hide because all the damage is lethal.

B 'N' G - Infinite Bazookas and Grenades. Restricted set of other weapons. Shopper - Create and dropped in each turn. Go shop for weapons. Brawling Brats - Defeat your opponent using Melee weapons. God- All the Worms are immortals. Except when in water.

Worms 2011 Armageddon game is developed and published by Electronic Arts Inc. The game offers excellent graphics and sound and will not let you be bored! This game works only in landscape mode. Get the version 4.1.49 of this game.

Game Worms 2011 Armageddon for Nokia 5800 XpressMusic and N97 (791 KB)
Related Posts:

Quick Takes: Nokia's culture, RIM's interface, and living in the paradigm of engineers

This post is an experiment.  I sometimes run across information that I think is worth sharing, but that doesn't fit into my usual publishing tools.  Generally it'll be something too complicated to tweet, but too simple for one of my usual long blog posts.  I've decided to try compiling those tidbits into an occasional post, which I call "Quick Takes."

Please let me know if you find this useful.

This time I want to talk about the aftermath of the Nokia-Microsoft deal, Android on BlackBerry, wireless insecurity, and WikiLeaks as a model for the future of human society.


More aftershocks from the Nokia-Microsoft deal

In the flood of commentary about Nokia's deal with Microsoft, I ran across three items with interesting perspectives on the deal.  They helped me understand how much work Nokia still needs to do.  If you're interested in the deal, or just in organizational change, I think they're worth checking out...

The engineering-driven culture.
  Adam Greenfield, a former Nokia employee, discussed Nokia's culture and explained how it produces wonderful mobile phone devices but poor user experiences (link).  The key sentence:
The value-engineering mindset that’s so crucial to profitability as a commodity trader is fatal as a purveyor of experiences.

When I've written in the past that Nokia needs to learn how to do real product management, this is what I was trying to say.

This is how it feels to have an alliance dumped on you.  Meanwhile, if you want to get a sense of how corporate alliances get built, check out Engadget's interview with Aaron Woodman of Microsoft (link).  Aaron is a Microsoft spokesman and a key player in the Windows Phone team, so you might expect him to know chapter and verse about the plans for the alliance with Nokia.  But he doesn't, and you can feel his discomfort as Engadget tries to pin him down on some details:

Q:  There will be no preferential treatment given to Nokia in terms of the level of customization that they can apply to their devices. Is that correct, or no?
A: So it's an interesting question -- you say, like, preferential treatment, so say more about that. Is that like oh, they can modify...

The reality is that a big corporate alliance is created from the top down.  Senior management negotiates the broad outlines, and then announces the deal (because it's material to both companies and has to be announced to prevent insider trading).  Then the mid-level employees have to painstakingly work out what the agreement actually means.  I believe that's happening as you read this, and that process will probably continue for some months.  Meanwhile, Aaron can't answer most of Engadget's questions because the answers don't yet exist.  I give him a lot of credit for not trying to make up something to make himself sound better.

Anyway, if you see some vagueness from Microsoft and Nokia in the next few months, don't be alarmed.  It's how these things are done.

When is an installed base not an installed base?  I've been delighted to watch the rise of Horace Dediu, a former Nokia employee who has built himself a huge online following through very cogent analysis of Apple, and now the overall mobile market.  Although I usually find myself agreeing with everything he says, I thought he was a bit off base in some recent commentary about Nokia (link).

Dediu plotted the installed base of every mobile platform, and pointed out that Symbian has a far larger installed base than any other mobile platform.  He said Nokia has decided to throw away that installed base:

The disposal of such a large installed base must count among the largest divestitures in technology history and, when coupled with the adoption of the least-tested alternative as a replacement, elevates platform risk-taking to a new level. It may seem bold, but there is a fine line between courage and recklessness.

If all of those Symbian users understood that Symbian was their OS, had purchased applications for it, and felt that Symbian added value to their devices, then Nokia would indeed be taking a huge risk.  But virtually the only people who were even aware of Symbian were the people reading and writing blogs about the mobile industry.

Try this -- go look at a typical Nokia Symbian phone.  What is the brand you see on it?  Start the software, launch some apps.  Do you see the word "Symbian" displayed prominently?

Have you ever seen an ad for Symbian?  A billboard perhaps, or a big glossy ad on the back cover of the Economist?

Maybe a teensy little text ad inside the Economist?  Anything?

Indeed not.  Because Nokia didn't want the name Symbian to be prominent.  Heck, it didn't even let Symbian create its own user interface, let alone advertise its brand.  Nokia made Symbian into anonymous plumbing, because Nokia wanted Nokia to be the brand that users bought.  And considering how things worked out, that was something the company did right.

When I was at Palm and we surveyed mobile phone users, we asked Symbian users what OS was on their phones.  Most of them had no idea.  Among the minority who said they knew what their OS was, more of them thought it was Windows than knew it was Symbian.

Let me say that again, more Symbian users thought they were using Windows than knew they were using Symbian.  I guarantee that hasn't changed in the years since we did our surveys.

So, if Nokia executes its marketing properly, it should be able to flip most Symbian users to Windows Phone easily.  Just grin, tell them it's the cool new Nokia smartphone, and move on.  In that vein, the riskiest thing Nokia has done in the past couple of weeks is play up its deal with Microsoft.  It would have been better to play it down, so Nokia customers wouldn't get a message of disruption.

But I doubt most of them are listening anyway.

If there's anything reckless in the Nokia-Microsoft deal, it's the huge number of things that both companies need to execute very well in order to make it work.  But I think there's nothing reckless about the basic idea of ditching Symbian.


Android apps on BlackBerry?

There have been persistent rumors that RIM is trying to get software that will let its PlayBook tablet run Android apps (link).  Now there's some evidence that they may be looking to do the same on BlackBerry phones as well (link).  This seems like a reasonable thing to do, but I'm astounded that they're only working on it now.  The time to plan the app platform for your tablet is when you're creating the software for it, about a year before it ships.  It's not the sort of thing you dink around with a couple of months before shipment.  And you especially don't tell the public about it right before the hardware launches -- all that does is undercut any chance you had of getting native app development on your platform.


Wireless isn't secure (duh)

This isn't news if you've been paying attention.  For years the security companies have been telling us that wireless networks (especially wifi) can easily be snooped.  I'm not sure why the wireless insecurity story has never gotten much traction outside the beltway.  Maybe we weren't using enough web apps to care, or maybe no one listens to the security companies because they're presumed to be alarmists who just want to charge you $49.95 a year for something that'll make your computer run slow.

Anyway, it seems to me that the story is now popping up all over the place.  In December the Wall Street Journal ran a series on the information collected by mobile apps (link), this week The New York Times ran a story on the third party tools available to hack wifi hotspots (link), and a professor at Rice University posted on the types of data his class could sniff from his Android phone (link).  A surprising find -- two apps unrelated to location services were broadcasting his GPS location.

Why is this significant?  The mobile operators plan to offload traffic to wifi to reduce network congestion.  If those networks turn out to be insecure, the operators might be blamed for security breaches that result.  Or if more wifi networks are restricted due to security fears, the operators might find it harder to do that offloading in the first place.  Bottom line -- it is risky to depend on someone else's infrastructure as part of your core product.


WikiLeaks: Human society as designed by an open source engineer

O'Reilly ran a fascinating review of Inside WikiLeaks, a new book describing how WikiLeaks operates (link).  It reminded me of some thoughts I had after I heard a talk by Ward Cunningham, one of the creators of the wiki (link).

Most of the social structures in the world today were designed by two groups of people, religious leaders and lawyers.  The religious leaders gave us governments based on moral codes and hierarchies; the lawyers gave us governments based on laws, property, and checks and balances.  In both cases, the people creating the system built into it their own worldviews, their own assumptions about human nature.  The assumptions were so fundamental that I think they didn't even realize they were using them; they just baked them into the system.

Wikipedia, WikiLeaks, and movements like them are profoundly new because they attempt to structure society around the social assumptions of a third group of people: engineers.  And not just any engineers, but open source engineers.  That culture believes in the rationality of human beings and the existence of absolute truth.  It assumes that if the same information were available to everyone we'd be able to settle all disputes through logical discourse.  And it is intensely hostile to authority structures, because by definition they're assumed to get in the way of free discussion.

WikiLeaks is an attempt by that culture to restructure society.  I know that sounds crazy, but here's a quote from the book:

In the world we dreamed of, there would be no more bosses or hierarchies, and no one could achieve power by withholding from the others the knowledge needed to act as an equal player.

If you want to see this idea taken to its logical extreme, check out the short story "The Ungoverned" by science fiction author Vernor Vinge (it's online here).  I'm not saying that's the world we're headed for, but I think we'd all be foolish to assume that WikiLeaks will be the last attempt at open source social engineering.

I think it's actually just the beginning.

Animation in Honeycomb


[This post is by Chet Haase, an Android engineer who specializes in graphics and animation, and who occasionally posts videos and articles on these topics on his CodeDependent blog at graphics-geek.blogspot.com. — Tim Bray]

One of the new features ushered in with the Honeycomb release is a new animation system, a set of APIs in a whole new package (android.animation) that makes animating objects and properties much easier than it was before.

"But wait!" you blurt out, nearly projecting a mouthful of coffee onto your keyboard while reading this article, "Isn't there already an animation system in Android?"

Animation Prior to Honeycomb

Indeed, Android already has animation capabilities: there are several classes and lots of great functionality in the android.view.animation package. For example, you can move, scale, rotate, and fade Views and combine multiple animations together in an AnimationSet object to coordinate them. You can specify animations in a LayoutAnimationController to get automatically staggered animation start times as a container lays out its child views. And you can use one of the many Interpolator implementations like AccelerateInterpolator and Bounce to get natural, nonlinear timing behavior.

But there are a couple of major pieces of functionality lacking in the previous system.

For one thing, you can animate Views... and that's it. To a great extent, that's okay. The GUI objects in Android are, after all, Views. So as long as you want to move a Button, or a TextView, or a LinearLayout, or any other GUI object, the animations have you covered. But what if you have some custom drawing in your view that you'd like to animate, like the position of a Drawable, or the translucency of its background color? Then you're on your own, because the previous animation system only understands how to manipulate View objects.

The previous animations also have a limited scope: you can move, rotate, scale, and fade a View... and that's it. What about animating the background color of a View? Again, you're on your own, because the previous animations had a hard-coded set of things they were able to do, and you could not make them do anything else.

Finally, the previous animations changed the visual appearance of the target objects... but they didn't actually change the objects themselves. You may have run into this problem. Let's say you want to move a Button from one side of the screen to the other. You can use a TranslateAnimation to do so, and the button will happily glide along to the other side of the screen. And when the animation is done, it will gladly snap back into its original location. So you find the setFillAfter(true) method on Animation and try it again. This time the button stays in place at the location to which it was animated. And you can verify that by clicking on it - Hey! How come the button isn't clicking? The problem is that the animation changes where the button is drawn, but not where the button physically exists within the container. If you want to click on the button, you'll have to click the location that it used to live in. Or, as a more effective solution (and one just a tad more useful to your users), you'll have to write your code to actually change the location of the button in the layout when the animation finishes.

It is for these reasons, among others, that we decided to offer a new animation system in Honeycomb, one built on the idea of "property animation."

Property Animation in Honeycomb

The new animation system in Honeycomb is not specific to Views, is not limited to specific properties on objects, and is not just a visual animation system. Instead, it is a system that is all about animating values over time, and assigning those values to target objects and properties - any target objects and properties. So you can move a View or fade it in. And you can move a Drawable inside a View. And you can animate the background color of a Drawable. In fact, you can animate the values of any data structure; you just tell the animation system how long to run for, how to evaluate between values of a custom type, and what values to animate between, and the system handles the details of calculating the animated values and setting them on the target object.

Since the system is actually changing properties on target objects, the objects themselves are changed, not simply their appearance. So that button you move is actually moved, not just drawn in a different place. You can even click it in its animated location. Go ahead and click it; I dare you.

I'll walk briefly through some of the main classes at work in the new system, showing some sample code when appropriate. But for a more detailed view of how things work, check out the API Demos in the SDK for the new animations. There are many small applications written for the new Animations category (at the top of the list of demos in the application, right before the word App. I like working on animation because it usually comes first in the alphabet).

In fact, here's a quick video showing some of the animation code at work. The video starts off on the home screen of the device, where you can see some of the animation system at work in the transitions between screens. Then the video shows a sampling of some of the API Demos applications, to show the various kinds of things that the new animation system can do. This video was taken straight from the screen of a Honeycomb device, so this is what you should see on your system, once you install API Demos from the SDK.

Animator

Animator is the superclass of the new animation classes, and has some of the common attributes and functionality of the subclasses. The subclasses are ValueAnimator, which is the core timing engine of the system and which we'll see in the next section, and AnimatorSet, which is used to choreograph multiple animators together into a single animation. You do not use Animator directly, but some of the methods and properties of the subclasses are exposed at this superclass level, like the duration, startDelay and listener functionality.

The listeners tend to be important, because sometimes you want to key some action off of the end of an animation, such as removing a view after an animation fading it out is done. To listen for animator lifecycle events, implement the AnimatorListener interface and add your listener to the Animator in question. For example, to perform an action when the animator ends, you could do this:

    anim.addListener(new Animator.AnimatorListener() {
public void onAnimationStart(Animator animation) {}
public void onAnimationEnd(Animator animation) {
// do something when the animation is done
}
public void onAnimationCancel(Animator animation) {}
public void onAnimationRepeat(Animator animation) {}
});

As a convenience, there is an adapter class, AnimatorListenerAdapter, that stubs out these methods so that you only need to override the one(s) that you care about:


anim.addListener(new AnimatorListenerAdapter() {
public void onAnimationEnd(Animator animation) {
// do something when the animation is done
}
});

ValueAnimator

ValueAnimator is the main workhorse of the entire system. It runs the internal timing loop that causes all of a process's animations to calculate and set values and has all of the core functionality that allows it to do this, including the timing details of each animation, information about whether an animation repeats, listeners that receive update events, and the capability of evaluating different types of values (see TypeEvaluator for more on this). There are two pieces to animating properties: calculating the animated values and setting those values on the object and property in question. ValueAnimator takes care of the first part; calculating the values. The ObjectAnimator class, which we'll see next, is responsible for setting those values on target objects.

Most of the time, you will want to use ObjectAnimator, because it makes the whole process of animating values on target objects much easier. But sometimes you may want to use ValueAnimator directly. For example, the object you want to animate may not expose setter functions necessary for the property animation system to work. Or perhaps you want to run a single animation and set several properties from that one animated value. Or maybe you just want a simple timing mechanism. Whatever the case, using ValueAnimator is easy; you just set it up with the animation properties and values that you want and start it. For example, to animate values between 0 and 1 over a half-second, you could do this:

    ValueAnimator anim = ValueAnimator.ofFloat(0f, 1f);
anim.setDuration(500);
anim.start();

But animations are a bit like the tree in the forest philosophy question ("If a tree falls in the forest and nobody is there to hear it, does it make a sound?"). If you don't actually do anything with the values, does the animation run? Unlike the tree question, this one has an answer: of course it runs. But if you're not doing anything with the values, it might as well not be running. If you started it, chances are you want to do something with the values that it calculates along the way. So you add a listener to it, to listen for updates at each frame. And when you get the callback, you call getAnimatedValue(), which returns an Object, to find out what the current value is.

    anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
public void onAnimationUpdate(ValueAnimator animation) {
Float value = (Float) animation.getAnimatedValue();
// do something with value...
}
});

Of course, you don't necessarily always want to animate float values. Maybe you need to animate something that's an integer instead:

    ValueAnimator anim = ValueAnimator.ofInt(0, 100);

or in XML:

    <animator xmlns:android="http://schemas.android.com/apk/res/android"
android:valueFrom="0"
android:valueTo="100"
android:valueType="intType"/>

In fact, maybe you need to animate something entirely different, like a Point, or a Rect, or some custom data structure of your own. The only types that the animation system understands by default are float and int, but that doesn't mean that you're stuck with those two types. You can to use the Object version of the factory method, along with a TypeEvaluator (explained later), to tell the system how to calculate animated values for this unknown type:

    Point p0 = new Point(0, 0);
Point p1 = new Point(100, 200);
ValueAnimator anim = ValueAnimator.ofObject(pointEvaluator, p0, p1);

There are other animation attributes that you can set on a ValueAnimator besides duration, including:

  • setStartDelay(long): This property controls how long the animation waits after a call to start() before it starts playing.
  • setRepeatCount(int) and setRepeatMode(int): These functions control how many times the animation repeats and whether it repeats in a loop or reverses direction each time.
  • setInterpolator(TimeInterpolator): This object controls the timing behavior of the animation. By default, animations accelerate into and decelerate out of the motion, but you can change that behavior by setting a different interpolator. This function acts just like the one of the same name in the previous Animation class; it's just that the type of the parameter (TimeInterpolator) is different from that of the previous version (Interpolator). But the TimeInterpolator interface is just a super-interface of the existing Interpolator interface in the android.view.animation package, so you can use any of the existing Interpolator implementations, like Bounce, as arguments to this function on ValueAnimator.

ObjectAnimator

ObjectAnimator is probably the main class that you will use in the new animation system. You use it to construct animations with the timing and values that ValueAnimator takes, and also give it a target object and property name to animate. It then quietly animates the value and sets those animated values on the specified object/property. For example, to fade out some object myObject, we could animate the alpha property like this:

    ObjectAnimator.ofFloat(myObject, "alpha", 0f).start();

Note, in this example, a special feature that you can use to make your animations more succinct; you can tell it the value to animate to, and it will use the current value of the property as the starting value. In this case, the animation will start from whatever value alpha has now and will end up at 0.

You could create the same thing in an XML resource as follows:

    <objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:valueTo="0"
android:propertyName="alpha"/>

Note, in the XML version, that you cannot set the target object; this must be done in code after the resource is loaded:

    ObjectAnimator anim = AnimatorInflator.loadAnimator(context, resID);
anim.setTarget(myObject);
anim.start();

There is a hidden assumption here about properties and getter/setter functions that you have to understand before using ObjectAnimator: you must have a public "set" function on your object that corresponds to the property name and takes the appropriate type. Also, if you use only one value, as in the example above, your are asking the animation system to derive the starting value from the object, so you must also have a public "get" function which returns the appropriate type. For example, the class of myObject in the code above must have these two public functions in order for the animation to succeed:

    public void setAlpha(float value);
public float getAlpha();

So by passing in a target object of some type and the name of some property foo supposedly on that object, you are implicitly declaring a contract that that object has at least a setFoo() function and possibly also a getFoo() function, both of which handle the type used in the animation declaration. If all of this is true, then the animation will be able to find those setter/getter functions on the object and set values during the animation. If the functions do not exist, then the animation will fail at runtime, since it will be unable to locate the functions it needs. (Note to users of ProGuard, or other code-stripping utilities: If your setter/getter functions are not used anywhere else in the code, make sure you tell the utility to leave the functions there, because otherwise they may get stripped out. The binding during animation creation is very loose and these utilities have no way of knowing that these functions will be required at runtime.)

View properties

The observant reader, or at least the ones that have not yet browsed on to some other article, may have pinpointed a flaw in the system thus far. If the new animation framework revolves around animating properties, and if animations will be used to animate, to a large extent, View objects, then how can they be used against the View class, which exposes none of its properties through set/get functions?

Excellent question: you get to advance to the bonus round and keep reading.

The way it works is that we added new properties to the View class in Honeycomb. The old animation system transformed and faded View objects by just changing the way that they were drawn. This was actually functionality handled in the container of each View, because the View itself had no transform properties to manipulate. But now it does: we've added several properties to View to make it possible to animate Views directly, allowing you to not only transform the way a View looks, but to transform its actual location and orientation. Here are the new properties in View that you can set, get and animate directly:

  • translationX and translationY: These properties control where the View is located as a delta from its left and top coordinates which are set by its layout container. You can run a move animation on a button by animating these, like this: ObjectAnimator.ofFloat(view, "translationX", 0f, 100f);.
  • rotation, rotationX, and rotationY: These properties control the rotation in 2D (rotation) and 3D around the pivot point.
  • scaleX and scaleY: These properties control the 2D scaling of a View around its pivot point.
  • pivotX and pivotY: These properties control the location of the pivot point, around which the rotation and scaling transforms occur. By default, the pivot point is centered at the center of the object.
  • x and y: These are simple utility properties to describe the final location of the View in its container, as a sum of the left/top and translationX/translationY values.
  • alpha: This is my personal favorite property. No longer is it necessary to fade out an object by changing a value on its transform (a process which just didn't seem right). Instead, there is an actual alpha value on the View itself. This value is 1 (opaque) by default, with a value of 0 representing full transparency (i.e., it won't be visible). To fade a View out, you can do this: ObjectAnimator.ofFloat(view, "alpha", 0f);

Note that all of the "properties" described above are actually available in the form of set/get functions (e.g., setRotation() and getRotation() for the rotation property). This makes them both possible to access from the animation system and (probably more importantly) likely to do the right thing when changed. That is, you don't want to scale an object and have it just sit there because the system didn't know that it needed to redraw the object in its new orientation; each of the setter functions takes care to run the appropriate invalidation step to make the rendering work correctly.

AnimatorSet

This class, like the previous AnimationSet, exists to make it easier to choreograph multiple animations. Suppose you want several animations running in tandem, like you want to fade out several views, then slide in other ones while fading them in. You could do all of this with separate animations and either manually starting the animations at the right times or with startDelays set on the various delayed animations. Or you could use AnimatorSet to do all of that for you. AnimatorSet allows you to animations that play together, playTogether(Animator...), animations that play one after the other, playSequentially(Animator...), or you can organically build up a set of animations that play together, sequentially, or with specified delays by calling the functions in the AnimatorSet.Builder class, with(), before(), and after(). For example, to fade out v1 and then slide in v2 while fading it, you could do something like this:

    ObjectAnimator fadeOut = ObjectAnimator.ofFloat(v1, "alpha", 0f);
ObjectAnimator mover = ObjectAnimator.ofFloat(v2, "translationX", -500f, 0f);
ObjectAnimator fadeIn = ObjectAnimator.ofFloat(v2, "alpha", 0f, 1f);
AnimatorSet animSet = new AnimatorSet().play(mover).with(fadeIn).after(fadeOut);;
animSet.start();

Like ValueAnimator and ObjectAnimator, you can create AnimatorSet objects in XML resources as well.

TypeEvaluator

I wanted to talk about just one more thing, and then I'll leave you alone to explore the code and play with the API demos. The last class I wanted to mention is TypeEvaluator. You may not use this class directly for most of your animations, but you should that it's there in case you need it. As I said earlier, the system knows how to animate float and int values, but otherwise it needs some help knowing how to interpolate between the values you give it. For example, if you want to animate between the Point values in one of the examples above, how is the system supposed to know how to interpolate the values between the start and end points? Here's the answer: you tell it how to interpolate, using TypeEvaluator.

TypeEvaluator is a simple interface that you implement that the system calls on each frame to help it calculate an animated value. It takes a floating point value which represents the current elapsed fraction of the animation and the start and end values that you supplied when you created the animation and it returns the interpolated value between those two values at that fraction. For example, here's the built-in FloatEvaluator class used to calculate animated floating point values:

    public class FloatEvaluator implements TypeEvaluator {
public Object evaluate(float fraction, Object startValue, Object endValue) {
float startFloat = ((Number) startValue).floatValue();
return startFloat + fraction * (((Number) endValue).floatValue() - startFloat);
}
}

But how does it work with a more complex type? For an example of that, here is an implementation of an evaluator for the Point class, from our earlier example:

    public class PointEvaluator implements TypeEvaluator {
public Object evaluate(float fraction, Object startValue, Object endValue) {
Point startPoint = (Point) startValue;
Point endPoint = (Point) endValue;
return new Point(startPoint.x + fraction * (endPoint.x - startPoint.x),
startPoint.y + fraction * (endPoint.y - startPoint.y));
}
}

Basically, this evaluator (and probably any evaluator you would write) is just doing a simple linear interpolation between two values. In this case, each 'value' consists of two sub-values, so it is linearly interpolating between each of those.

You tell the animation system to use your evaluator by either calling the setEvaluator() method on ValueAnimator or by supplying it as an argument in the Object version of the factory method. To continue our earlier example animating Point values, you could use our new PointEvaluator class above to complete that code:

    Point p0 = new Point(0, 0);
Point p1 = new Point(100, 200);
ValueAnimator anim = ValueAnimator.ofObject(new PointEvaluator(), p0, p1);

One of the ways that you might use this interface is through the ArgbEvaluator implementation, which is included in the Android SDK. If you animate a color property, you will probably either use this evaluator automatically (which is the case if you create an animator in an XML resource and supply colors as values) or you can set it manually on the animator as described in the previous section.

But Wait, There's More!

There's so much more to the new animation system that I haven't gotten to. There's the repetition functionality, the listeners for animation lifecycle events, the ability to supply multiple values to the factory methods to get animations between more than just two endpoints, the ability to use the Keyframe class to specify a more complex time/value sequence, the use of PropertyValuesHolder to specify multiple properties to animate in parallel, the LayoutTransition class for automating simple layout animations, and so many other things. But I really have to stop writing soon and get back to working on the code. I'll try to post more articles in the future on some of these items, but also keep an eye on my blog at graphics-geek.blogspot.com for upcoming articles, tutorials, and videos on this and related topics. Until then, check out the API demos, read the overview of Property Animation posted with the 3.0 SDK, dive into the code, and just play with it.

Best Practices for Honeycomb and Tablets

The first tablets running Android 3.0 (“Honeycomb”) will be hitting the streets on Thursday Feb. 24th, and we’ve just posted the full SDK release. We encourage you to test your applications on the new platform, using a tablet-size AVD.

Developers who’ve followed the Android Framework’s guidelines and best practices will find their apps work well on Android 3.0. This purpose of this post is to provide reminders of and links to those best practices.

Moving Toward Honeycomb

There’s a comprehensive discussion of how to work with the new release in Optimizing Apps for Android 3.0. The discussion includes the use of the emulator; most developers, who don’t have an Android tablet yet, should use it to test and update their apps for Honeycomb.

While your existing apps should work well, developers also have the option to improve their apps’ look and feel on Android 3.0 by using Honeycomb features; for example, see The Android 3.0 Fragments API. We’ll have more on that in this space, but in the meantime we recommend reading Strategies for Honeycomb and Backwards Compatibility for advice on adding Honeycomb polish to existing apps.

Specifying Features

There have been reports of apps not showing up in Android Market on tablets. Usually, this is because your application manifest has something like this:

<uses-feature android:name="android.hardware.telephony" />

Many of the tablet devices aren’t phones, and thus Android Market assumes the app is not compatible. See the documentation of <uses-feature>. However, such an app’s use of the telephony APIs might well be optional, in which case it should be available on tablets. There’s a discussion of how to accomplish this in Future-Proofing Your App and The Five Steps to Future Hardware Happiness.

Rotation

The new environment is different from what we’re used to in two respects. First, you can hold the devices with any of the four sides up and Honeycomb manages the rotation properly. In previous versions, often only two of the four orientations were supported, and there are apps out there that relied on this in ways that will break them on Honeycomb. If you want to stay out of rotation trouble, One Screen Turn Deserves Another covers the issues.

The second big difference doesn’t have anything to do with software; it’s that a lot of people are going to hold these things horizontal (in “landscape mode”) nearly all the time. We’ve seen a few apps that have a buggy assumption that they’re starting out in portrait mode, and others that lock certain screens into portrait or landscape but really shouldn’t.

A Note for Game Developers

A tablet can probably provide a better game experience for your users than any handset can. Bigger is better. It’s going to cost you a little more work than developers of business apps, because quite likely you’ll want to rework your graphical assets for the big screen.

There’s another issue that’s important to game developers: Texture Formats. Read about this in Game Development for Android: A Quick Primer, in the section labeled “Step Three: Carefully Design the Best Game Ever”.

We've also added a convenient way to filter applications in Android Market based on the texture formats they support; see the documentation of <supports-gl-texture> for more details.

Happy Coding

Once you’ve held one of the new tablets in your hands, you’ll want to have your app not just running on it (which it probably already does), but expanding minds on the expanded screen. Have fun!

The Info Pad Creeps Closer

It's hard to believe that it's been four years since I first wrote about the idea of an info pad.  I thought for sure we'd have one by now, but to my immense frustration it's still not here.  We're gradually getting closer, though, so I think this would be a good time to revisit the idea.

As I explained in my original post on the subject (link), the info pad is a small tablet computer designed not for consuming content but for managing the information needs of a knowledge worker.  It's a business tool, not an entertainment device.  It has a stylus, so you can take notes and sketch on it, but it also acts as an extended memory, letting you access your old files, messages, contacts, and other important documents.

Mike Rohde drew a picture that captured the idea well (link):



For people who work with huge amounts of information, the info pad is a Holy Grail device.  It's the extended memory that captures what you're doing during the day, and lets you easily recall anything you need to know, whenever you need it. 

We studied the info pad idea when I worked at Palm.  There was a big audience for it, very distinct from the people who buy mobile devices for entertainment or communication.   Unfortunately, Palm got into financial trouble before we could do anything about it.  Since then I've tried twice to pull together a startup to build one.  The result was always the same: many people loved the idea (I can't tell you how many venture capitalists wanted to be beta testers).  But no one wanted to fund it, because hardware startups are viewed as incredibly high risk in Silicon Valley.  I was told to go to the big hardware companies and convince them to build it, but when I tried they were all focused on copying each other rather than creating anything new.

So I settled back and waited, figuring someone would eventually build it.  And I waited.  And waited. 

I'm still waiting today.


Signs of hope

Lately we've started to see some devices that raise my hopes.  The info pad isn't here yet, but I wonder if we're starting to see the first hints of it on the horizon.

The first is the Boogie Board, a tablet device that's literally a replacement for a dry-erase board.  It has a touch-sensitive monochrome screen, so you can write on it with a stylus, finger, or any other object.  Like a dry-erase board, you can't save pages or do much of anything else with them.  So it's not even close to an info pad.  But it currently sells for just $40 on Amazon, showing that basic tablet technologies can get to extremely low prices (link). 




A step up from Boogie Board is NoteSlate (link).  It's a tablet note-taker that works a lot like a piece of paper.  Like Boogie Board, it has a monochrome screen (no grays) and you write on it with a stylus.  Unlike Boogie Board, you'll supposedly be able to save pages, and share them with others via wifi.  The online illustrations of the NoteSlate prototype look nice, although text on its monochrome screen looks a bit blocky (I'd be a lot happier with smaller pixels and grayscale, so you could do some subtle anti-aliasing of lines).



This closeup shows the graininess of the writing in the mockup device.  The right software, and a better screen, can fix those jaggies.

The price will supposedly be $99, although that model may not include wifi.  It's hard to tell exactly what NoteSlate will do because it's not shipping yet, the developer is located in the Czech Republic, and the company's website is written in broken English.  Here's a sample:
Sorry if we were not able to response sooner all the great emails. When we have been preparing year ago all this, about bit weird NoteSlate device, we hoped this kind of exciting story becomes real, real product. We are going to make this thing real, also thanks to you, to produce open-source NoteSlate device and create unique NotesLate handwritten network. For 99$.

You don't have to speak good English to create a great product.  But the fact that the company can't afford to get an English native speaker to edit its website implies that it has very few resources.  That will make it hard to finish the product, let alone get it into retail distribution.  I'm amazed that such a small, early-stage company has managed to get so much press coverage.  Some websites even speculate that the product may be a hoax (link).  I was able to find an interview in Czech with the product's designer, Martin Hasek, and he gives some more details on the plans.  You can read Google's translation here.

NoteSlate has been nominated for an Index award, a design competition based in Denmark.  The online nomination gives more details on the product (link).  Reading between the lines, it looks like Martin is a designer who cooked up the NoteSlate idea.  He's apparently working with Albumteam, a Czech company that sells an electronic photo viewing tablet (link).  And there was a hint that the manufacturing might be done by another Czech company, Jablotron (link).  At this point I'm struggling to interpret auto-translated Czech blog posts, which is not a great way to get information, but that tells you how difficult it is to find hard details on NoteSlate.  (If anyone reads Czech and can give a better translation, please post a comment.)

The bottom line, I think, is that NoteSlate may be real, or may be caught in limbo.  When I was trying to get the info pad idea funded, I toyed with the idea of announcing it, getting people excited, and then using the excitement to get someone to fund it.  That felt too much like a pyramid scheme to me, but it's a possible approach.


High hopes for the Flyer.  There are several other upcoming tablet devices that bear watching, including the mySpark education tablet (link), and the Kno dual-screen device (link).  It's very hard to tell if any of these will actually ship.  But the device that has me the most excited is one that I know exists: the HTC Flyer, a new Android-based tablet computer previewed earlier this month.  The Flyer is a seven-inch Android tablet, very similar in looks to the tablets coming from Samsung and Motorola.  But there's one crucial difference: the Flyer comes with a stylus.

That sounds like a simple change, but actually it's a profound difference.  The iPad and most Android tablets can't tell the difference between a stylus and a finger.  If you try to write on them with a stylus, the screen will also sense the places where your hand touches the screen, and you'll end up with multitouch confusion.  HTC has paid extra for a touch sensor that can distinguish between the stylus and your hand.  Touch it with the stylus and you'll get ink on screen; touch it with your fingers and you can swipe, pinch, or do anything else you'd expect from a touch tablet.

HTC has also added a note-taking application to the tablet, so you can write on the screen during a meeting and save your notes to Evernote.  You can also record sound during a meeting, in a process that reminds me of the LiveScribe pen.

None of this is completely new -- Microsoft has been pushing Tablet PC systems for note-taking for the better part of a decade.  But they were extremely expensive, complex, heavy, and had very short battery life.  If you want an example, check out Asus' new $999 tablet PC, the EP121 (link).  In contrast, the Flyer looks to be the first product that marries the good ergonomics and usability of an Android tablet with reasonable note-taking.

What's missing.  Unfortunately, the Flyer has several very significant drawbacks.  The first and most significant is its price.  There have been several reports that the Flyer will see for about 700 euros in Europe, which is about $950 in the US (link).  That's an outrageous price.  When we studied the info pad idea in the US and Europe, the top price most people were willing to pay was about $499, and the demand sweet spot was $299.  At $950, the Flyer is going to be compared to full-function notebook computers, and it won't come off well in those comparisons.  Next to a notebook, it has very little memory, no keyboard, and few apps.  The price makes it an interesting curiosity for technophiles, not a mainstream product.

Maybe HTC is hoping for a big mobile operator subsidy that will make the Flyer more affordable.  Or maybe it's planning to strip out some features.  The announced version of the Flyer has a 3G cellular radio built into it, which increases its cost.  HTC says a WiFi version will come out later.  That might cut as much as $100 from the parts cost, which could translate to a couple of hundred dollars retail.  But still that would leave the device at $750, which is vastly too expensive.

I am also worried about the marketing of the Flyer.  HTC is positioning it as an ideal device for gaming, browsing, productivity, communication, and just about anything else except making espresso (link).  The message reminds me a lot of the old Palm LifeDrive (link), and we know how that worked out (link).

It's very easy for tech companies to fall into this sort of kitchen sink marketing, because they don't want to give up any possible customers.  But the messages tend to cancel each other out -- if the device is great for gaming and music, it sounds inappropriate for business productivity, and vice versa.  This also leads to bad design decisions.  If you build in graphics acceleration, 3D, HDMI video, dual cameras, and a stylus, the device gets too expensive for any single use.


Would your boss reimburse you for buying this?

It doesn't help that HTC has a clear case of iPad envy.  Their website even echoes some of Apple's iPad language:

Apple:  "A magical and revolutionary product."
HTC:  "HTC Flyer's magic pen transforms anything...Work or play, it's magic for the whole family."

The trouble is that Apple's already cornered the market on people who want a magical tablet experience.  HTC needs to play counterpoint to that, not imitate it.


Where the heck is Baby Bear when we need him?

I feel like Goldilocks.  Papa Bear (Tablet PC and Flyer) is too expensive and too loaded with features.  Mama Bear (Boogie Board and NoteSlate) is too limited.  What I want -- what's required to kick off the info pad revolution -- is a product in the middle on both price and features, optimized just for managing information.  At its current price, the Flyer is destined to sell very poorly.  When that happens, I hope HTC won't cancel the product.  Instead, it should strip out the 3G and the entertainment features, focusing it into a business tool that could sell for less than the magic $499 price point.  If Flyer doesn't survive, maybe NoteSlate or one of the other note-taking tablets will make it to market. I can always hope.

Once we get the right hardware, all we'd need would be the right software to make the info pad a reality.

We don't have the info pad yet, but we're getting closer. I am cautiously hopeful that I won't have to write this post again in another four years.

Final Android 3.0 Platform and Updated SDK Tools


We are pleased to announce that the full SDK for Android 3.0 is now available to developers. The APIs are final, and you can now develop apps targeting this new platform and publish them to Android Market. The new API level is 11.

For an overview of the new user and developer features, see the Android 3.0 Platform Highlights.

Together with the new platform, we are releasing updates to our SDK Tools (r10) and ADT Plugin for Eclipse (10.0.0). Key features include:

  • UI Builder improvements in the ADT Plugin:
    • New Palette with categories and rendering previews. (details)
    • More accurate rendering of layouts to more faithfully reflect how the layout will look on devices, including rendering status and title bars to more accurately reflect screen space actually available to applications.
    • Selection-sensitive action bars to manipulate View properties.
    • Zoom improvements (fit to view, persistent scale, keyboard access) (details).
    • Improved support for <merge> layouts, as well as layouts with gesture overlays.
  • Traceview integration for easier profiling from ADT. (details)
  • Tools for using the Renderscript graphics engine: the SDK tools now compiles .rs files into Java Programming Language files and native bytecode.

To get started developing or testing applications on Android 3.0, visit the Android Developers site for information about the Android 3.0 platform, the SDK Tools, and the ADT Plugin.

Mobile Phone Chip Off

Mobile Phone Chip Off
If you have produced or know of a mobile phone chip off video showing methods and techniques for removing ICs/memory from various makes/models of mobile handsets then email (trewmte@gmail.com) your youtube link and then it can be added to the thread 'Mobile Phone Chip Off'.



UPDATED:

Thank you Paul for this N70 video


Nathan, thanks for the SonyEricsson W850 video


Download Application Student Dictionary for Nokia 5800, N97, X6 and 5530

Student Dictionary is a Java based handy dictionary application compatible to works with Symbian S60v5 touch screen mobiles such as Nokia N97, N97 Mini, X6, 5230, 5233, 5235, 5530 XpressMusic and 5800 XpressMusic. The application though does not provide any great interface but might be useful.

The application provides you following features -
  • Find - You can find any word and its meaning in dictionary.
  • Clear - You can clear the currently selected word.
  • BookMark - You can bookmark your findings.
  • Themes - The application lets you choose from several themes such as Blue, Orange, Pink and Green. So you can customize the application based on your color preference.
  • Font - You can change the font size. You have choice of small, medium and large font sizes.
The application though is good but need little more refinement in terms of UI and usability. You can give it a try. The version 5.0 of Student Dictioanry application is available to download from the following link.

Note: Make sure you off the on-screen keyboard before launching this application on your mobile to open it in full screen.

Application Student Dictionary for Nokia 5800 XpressMusic and N97 (861 KB)
Related Posts:

Download Application Drummer for Nokia 5800, N97, X6, 5230 and 5530

Here is another cool application called Drummer from Impetus Infotech. Ever wanted to play the drums? This is the closest you can get without buying a real kit. Drummer is a fun app for drummer & non drummer alike. Electrify all your friends with your chops,or fine tune a beat while away from your kit.

Record your own music & Play later, listen demo clip, get these all in handy and attractive interface. Go & exploit the multi touch feature with faster response with Drummer. Experience amazing sound effects & realistic visual effects while playing. Begin musical fun on your phone.

The application works in landscape mode to let you utilize the big screen. It works with Nokia 5800 XpressMusic, N97, N97 Mini, X6, 5230, 5233, 5235 and 5530 XpressMusic. Like iPiano this app too looks great. You can try it on your mobile as its a free app. Get the version 1.0.0 of this cool app now.

Application Drummer for Nokia 5800 XpressMusic and N97 (607 KB)
Related Posts: