Planet Android Headlines

↑ Grab this Headline Animator

September 16, 2014

Use Facebook Pictures as a LWP with Facebook View

FBView

One of the best things that Android has always offered its users is the ability to tailor one’s device to look like pretty much anything we could conceive. Starting from the wide assortment of launchers available (both OEM and custom/community based) all the way to fonts, icons, and wallpapers, Android offers something for everyone. The world of live wallpapers has also seen the creativity of our devs by allowing us to interact with the background of our devices via visual effects all the way to letting our devices play a flawless game of Mario Bros all on its own. There are other LWPs that will allow you to make collages of your favorite photos, and even make them transition to new pictures for that “new phone” look every time you go Home.

And speaking of our picture stash, one of the undisputed, largest sources for pictures that we can think of in this day and age is undoubtedly Facebook. Family pictures, friends, and even memes—all can be found by simply logging into your account. And yes, you can download the pictures on your phone and use them as wallpaper. However, downloading picture after picture can be a somewhat tedious task, no matter how easy it is. If you are in this line of thought too, where you would like to use Facebook pictures as your wallpaper, then you definitely need to check out XDA Forum Member Solacetech‘s work.

FBView (Facebook View) is a LWP that will automatically use any and all pictures (at least the most recent ones) from your Facebook feed in order to create a collage of pictures with it. But wait (yell in Billy Mays’ voice), it gets better because the app is capable of updating your wallpaper’s pictures in predefined time intervals–all without your intervention. This way, you will never miss any of your friend’s jewels of wisdom despite being away from the Facebook app itself.

The app is still in its testing stages, and the dev is currently looking for feedback to make the app somewhat better. Do you have any ideas or maybe found a bug? Please report it to the thread and remember that logcats are your friends (as well as your dev’s friends also). You can find more information in Facebook View’s original thread.

The post Use Facebook Pictures as a LWP with Facebook View appeared first on xda-developers.

by egzthunder1 at September 16, 2014 06:30 AM

Share Your Thoughts Anonymously with A Minimalist Social Network

image

Nowadays, almost everyone has a second life on the Internet. Among the best tools available to keep your friends close are websites like Facebook or Twitter. Social networks are taking up a big part of our lives, and the situation will likely not change in the next few years.

All of these social networks have one thing in common: You are communicating with people that you know. There are moments in life when you want to share your thoughts and feelings anonymously, to a person at the opposite side of the world. While Facebook or Twitter don’t allow for that, there are tools like an app made by XDA Forum Member Appsent Minded that turn such a concept into reality.

The A Minimalist Social Network app displays only one message at time, without adding any further information. Everything is confidential, fast, and easy to use. You can share your thoughts about your life, things you love or hate, or simply say hi. Your message will be visible as long as the next person using the application will send a reply.

Are you feeling lonely or maybe you have something interesting to say? Share your thoughts by heading over to the A Minimalist Social Network app thread.

The post Share Your Thoughts Anonymously with A Minimalist Social Network appeared first on xda-developers.

by Tomek Kondrat at September 16, 2014 12:30 AM

September 15, 2014

Mines of Mars review. Light on story, heavy on mining

Mines of Mars is a side-scrolling RPG from Crescent Moon games. For those that aren't familiar with them, they also created the FPS called Neon Shadow, RPG RavenSword, and a slew of other games covering all sorts of genres. In my experience with their games, they don't slouch. So to little surprise, this pattern holds with Mines of Mars.

The premise of the game is simple: players assume the role of a miner on the planet Mars, who crash lands there at the start of the game. Being the sole survivor, you set out to begin mining for your employer. There's a bit of a mining town on the surface of Mars, comprised of refineries (for your raw material to be refined into something with monetary value), a station that refills health and fuel, along with another that refills all ammunition, an in-game arcade, and a shop where players are able to exchange your findings for upgrades in your firearms, by purchasing more and better ones, as well as upgrading mining equipment so players can press further into the planet where they're digging.

There's a panoply of equipment, all of which is there to enable you as the player to be a better miner or better defend one's self. Whether it's a better jet pack to return from ever increasing depths while consuming less fuel, or an improved helmet for better visibility, so you are able to see more of the surrounding materials, better boots to run faster, or even better pick-axes to dig faster, there's definite room for players to improve how they go about their business. Purchasing upgrades with your ore and gems unlocks the next in succession for that part; buying the shotgun unlocks the .357 revolver for purchase, upgrading to the bronze ax unlocks the cobalt one in order to dig faster, and so forth. There's a limit to how much the miner can "carry" during one trip, so the size of storage bins can be upgraded as well, requiring return trips to the surface when unloading is called for, to occur less often. As you progress through the game, you begin to unveil a mystery about the sentient life forms that are indigenous to the planet, and why they wish you to leave. While that's a compelling basis for a story, it wasn't fleshed out very well and culminated with an underwhelming ending. All of this is played in a two-dimensional fashion, a la Dig Dug (if you're familiar with that throwback game) only much more involved and on a MUCH larger scale.

In addition to the raw materials that are found beneath the surface, there are lifeforms that players encounter while mining on Mars. Some of them are hostile, others aren't. Some of them (serving the purposes of a "boss") are quite large and live in self-contained dungeons, and the miner is, upon defeating them, rewarded with a variety of things ranging from minerals and ore to upgrades that are otherwise unattainable. And should the miner die, he is simply cloned again, back on the surface. If the player had any mined materials in his or her possession, those are forfeited to help pay for the "cost" of cloning. The same penalty is applied to the miner should he run out of jet fuel and be unable to return to the surface which is akin to death, practically speaking. There's also something called the "Offering Pit", where players can offer portions of their refined accumulations in return for some obscure artifacts or chachkies. The more rare and greater the quantity, the better for chance you get an artifact instead of more raw materials.

The controls for the game are a fairly straightforward use of gestures with the horizontal movements controlling the direction in which the miner is digging or running/walking, swiping downward for digging down, and up for the jet pack, all controlled on the left-hand side. Firing weapons and jumping are controlled in similar fashion on the right-hand side. There are no virtual buttons or joysticks to speak of. The sound track is very low key. The simple and repetitive tunes play a very subdued role in the game. There are times when you hear the soundtrack, and times when it isn't played at all. While facing the boss monsters, there's a more upbeat tune that fits with the anticipated action. Given the level that the sound track is de-emphasized to, while not completely trivial, it seems to work all the same as it pops in and out of the player's experience.

On the whole, this game is fairly solid. It's lengthy and well balanced (though from what I read online, the minerals and ore needed tweaking in earlier versions a. It strikes me as having been fixed). If you're not looking for an involved story, or appreciate sandbox style games, this will be for you.

September 15, 2014 11:27 PM

Coming Soon: Revisit Monument Valley with New Levels

UsTwo Games has been hard at work on new levels for their monstrous hit Monument Valley. If you are not familiar with the fascinating aesthetically beautiful puzzler, then you should visit the Play Store and download it immediately. Knowing how to build anticipation for the newer levels, the studio added a single image to their Twitter page over the weekend and it certainly got everyone talking.

Monument Valley, aptly described by UsTwo Games, is "An illusory adventure of impossible architecture and forgiveness." The only complaint you really ever heard about the game was that it was too short for the price. At $3.99 with only ten levels, many gamers expected more. It is hard to put a price on a phenomenal experience, even if it lasts for an hour or less. If you have been eagerly anticipating more levels, you should not have to wait too long. The new levels are expected to arrive before the end of the year and will expand the architecture that the Silent Princess Ida will visit. It is our understanding that the new levels will be available through an in-app purchase. We have not been informed of the price for the download yet. However, the new levels are said to be comparable in length to the original game. Are you ready for more Monument Valley?

September 15, 2014 11:09 PM

Tutorial: Enhancing Android UI with Custom Views

Building custom view components is a necessary part of embracing creative UI design. This tutorial walks you through the process of building custom Views and ViewGroups on Android.

by Dave Smith at September 15, 2014 10:52 AM

September 10, 2014

Mutual Mobile took a bite out of TechCrunch Disrupt

TechCrunch Disrupt Sf 2014

From September 8th through the 10th, six of our brightest minds descended upon San Francisco’s annual TechCrunch Disrupt to help Clover shake up the grocery shopping experience. The Mutual Mobile team consisted of Android Director Ajay Pall, Visual Designer Ryan Considine, Android Engineers Justin Holmes, Chung-Yi Cho, Nainesh Desai, and the developer at the mic, Elliott Chenger. After many eye-straining hours of staring directly at their computer screens, the Mutual Mobile team emerged with an app they’re calling GrabBag.

Post_20140908_TCDisrupt_Group

As Elliott quickly demonstrated (in just over a minute), GrabBag is a time-saving app for the Clover platform that “helps ease the pain of getting groceries.” For those of you who have always wanted a personal shopper and/or chef, GrabBag creates grocery lists according to preferred recipes and the inventory available at Clover affiliated markets. Once you’ve picked the most delicious dish, decided the number of servings, and ruled out the ingredients you already have in your pantry, GrabBag will send your list to a store runner at a Clover-enabled grocer so he or she can gather your goods before you even get in your car.

Since everything from the planning to the payment takes place on your phone, all you’ll have to do is hop in your car and retrieve your goods. Or, if you live in Central Austin or Boston, you can call in a Favor and have someone pick them up for you. It’s a surefire way to disrupt the retail sector without disturbing your already-too-busy schedule.

Although the grand prize at this year’s event went to an app that’s fixated on getting you naked, the Mutual Mobile team did not come home empty handed. In addition to the slew of new contacts and employee applications, our fearless hackers returned with a ton of experience and invaluable insights.

Post_20140908_TCDisrupt_Hall

“TechCrunch Disrupt was HUGE,” recalls Chenger. “There were over a thousand people in attendance. It was pretty intimidating at first.” Despite the initial shock from the size and scope of TechCrunch Disrupt, the team leaned on the experience gained from our own hackathons and Design Studios to maintain their focus and get down to business.

“We knew the first thing we had to do was set up a fast, nimble process to ensure we weren’t wasting time on any individual task,” Elliott noted. “We only spent thirty minutes investigating each solution, encouraging us to spend more time looking forward than we did retracing our steps. If something was lagging, we’d scrap it and move on to the next item. We will definitely be using this methodology during our Austin hackathons from now on.”

Strong time-management wasn’t Team Mutual Mobile’s only vital asset. “Having a designer there was a lifesaver,” says Chenger. “We were probably one of only five teams that took the appearance of their app that seriously. Ryan was crucial to the overall story and flow of our final product. The judges gave us really high marks on the polish and professionalism of our app. We probably would’ve won the UI contest, but we didn’t realize you had to submit it separately. Rookie mistake.”

Post_20140908_TCDisrupt_Design

When asked if the team would be interested in partaking in next year’s Disrupt, Elliott was quick to say yes. “I think everyone would agree it was a great experience. It really challenged us to work faster and smarter, while giving us a lot of exposure to the rest of the tech industry. We should definitely take advantage of more opportunities like these down the road.”

Just because Team Mutual Mobile didn’t bring that 5,000 dollar check back to Austin, it doesn’t mean they’re giving up on this project. As Elliott said, “We hate wasting time in grocery stores,” and our TechCrunch Disrupt participants are still very interested in helping Clover make trips to the market as painless as possible (after they’ve caught up on some well-deserved sleep).

Post_20140908_TCDisrupt_Sleepy

The post Mutual Mobile took a bite out of TechCrunch Disrupt appeared first on Mutual Mobile.

by Mutual Mobile at September 10, 2014 09:00 PM

Conference Data Sync and GCM in the Google I/O App

By Bruno Oliveira, tech lead of the 2014 Google I/O mobile app

Keeping data in sync with the cloud is an important part of many applications, and the Google I/O App is no exception. To do this, we leverage the standard Android mechanism for this purpose: a Sync Adapter. Using a Sync Adapter has many benefits over using a more rudimentary mechanism such as setting up recurring alarms, because the system automatically handles the scheduling of Sync Adapters to optimize battery life.

We store the data in a local SQLite database. However, rather than having the whole application access that database directly, the application employs another standard Android mechanism to control and organize access to that data. This structure is, naturally, a Content Provider. Only the content provider's implementation has direct access to the SQLite database. All other parts of the app can only access data through the Content Resolver. This allows for a very flexible decoupling between the representation of the data in the database and the more abstract view of that data that is used throughout the app.

The I/O app maintains with two main kinds of data: conference data (sessions, speakers, rooms, etc) and user data (the user's personalized schedule). Conference data is kept up to date with a one-way sync from a set of JSON files stored in Google Cloud Storage, whereas user data goes through a two-way sync with a file stored in the user's Google Drive AppData folder.

Downloading Conference Data Efficiently

For a conference like Google I/O, conference data can be somewhat large. It consists of information about all the sessions, rooms, speakers, map locations, social hashtags, video library items and others. Downloading the whole data set repeatedly would be wasteful both in terms of battery and bandwidth, so we adopt a strategy to minimize the amount of data we download and process.

This strategy is separating the data into several different JSON files, and having them be referenced by a central master JSON file called the manifest file. The URL of the manifest file is the only URL that is hard-coded into the app (it is defined by the MANIFEST_URL constant in Config.java). Note that the I/O app uses Google Cloud Storage to store and serve these files, but any robust hosting service accessible via HTTP can be used for the same purpose.

The first part of the sync process is checking if the manifest file was changed since the app last downloaded it, and processing it only if it's newer. This logic is implemented by the fetchConfenceDataIfNewer method in RemoteConferenceDataFetcher.

public class RemoteConferenceDataFetcher {
    // (...)
    public String[] fetchConferenceDataIfNewer(String refTimestamp) throws IOException {
        BasicHttpClient httpClient = new BasicHttpClient();
        httpClient.setRequestLogger(mQuietLogger);
        // (...)

        // Only download if data is newer than refTimestamp
        if (!TextUtils.isEmpty(refTimestamp) && TimeUtils
            .isValidFormatForIfModifiedSinceHeader(refTimestamp)) {
                httpClient.addHeader("If-Modified-Since", refTimestamp);
            }
        }

        HttpResponse response = httpClient.get(mManifestUrl, null);
        int status = response.getStatus();
        if (status == HttpURLConnection.HTTP_OK) {
            // Data modified since we last checked -- process it!
        } else if (status == HttpURLConnection.HTTP_NOT_MODIFIED) {
            // data on the server is not newer than our data - no work to do!
            return null;
        } else {
            // (handle error)
        }
    }
    // (...)
}

Notice that we submit the HTTP If-Modified-Since header with our request, so that if the manifest hasn't changed since we last checked it, we will get an HTTP response code of HTTP_NOT_MODIFIED rather than HTTP_OK, we will react by skipping the download and parsing process. This means that unless the manifest has changed since we last saw it, the sync process is very economical: it consists only of a single HTTP request and a short response.

The manifest file's format is straightforward: it consists of references to other JSON files that contain the relevant pieces of the conference data:

{
  "format": "iosched-json-v1",
  "data_files": [
    "past_io_videolibrary_v5.json",
    "experts_v11.json",
    "hashtags_v8.json",
    "blocks_v10.json",
    "map_v11.json",
    "keynote_v10.json",
    "partners_v2.json",
    "session_data_v2.681.json"
  ]
}

The sync process then proceeds to process each of the listed data files in order. This part is also implemented to be as economical as possible: if we detect that we already have a cached version of a specific data file, we skip it entirely and use our local cache instead. This task is done by the processManifest method.

Then, each JSON file is parsed and the entities present in each one are accumulated in memory. At the end of this process, the data is written to the Content Provider.

Issuing Content Provider Operations Efficiently

The conference data sync needs to be efficient not only in the amount of data it downloads, but also in the amount of operations it performs on the database. This must be done as economically as possible, so this step is also optimized: instead of overwriting the whole database with the new data, the Sync Adapter attempts to preserve the existing entities and only update the ones that have changed. In our tests, this optimization step reduced the total sync time from 16 seconds to around 2 seconds on our test devices.

In order to accomplish this important third layer of optimization, the application needs to know, given an entity in memory and its version in the Content Provider, whether or not we need to issue content provider operations to update that entity. Comparing the entity in memory to the entity in the database field by field is one option, but is cumbersome and slow, since it would require us to read every field. Instead, we add a field to each entity called the import hashcode. The import hashcode is a weak hash value generated from its data. For example, here is how the import hashcode for a speaker is computed:

public class Speaker {
    public String id;
    public String publicPlusId;
    public String bio;
    public String name;
    public String company;
    public String plusoneUrl;
    public String thumbnailUrl;

    public String getImportHashcode() {
        StringBuilder sb = new StringBuilder();
        sb.append("id").append(id == null ? "" : id)
                .append("publicPlusId")
                .append(publicPlusId == null ? "" : publicPlusId)
                .append("bio")
                .append(bio == null ? "" : bio)
                .append("name")
                .append(name == null ? "" : name)
                .append("company")
                .append(company== null ? "" : company)
                .append("plusoneUrl")
                .append(plusoneUrl == null ? "" : plusoneUrl)
                .append("thumbnailUrl")
                .append(thumbnailUrl == null ? "" : thumbnailUrl);
        String result = sb.toString();
        return String.format(Locale.US, "%08x%08x", 
            result.hashCode(), result.length());
    }
}

Every time an entity is updated in the database, its import hashcode is saved with it as a database column. Later, when we have a candidate for an updated version of that entity, all we need to do is compute the import hashcode of the candidate and compare it to the import hashcode of the entity in the database. If they differ, then we issue Content Provider operations to update the entity in the database. If they are the same, we skip that entity. This incremental update logic can be seen, for example, in the makeContentProviderOperations method of the SpeakersHandler class:

public class SpeakersHandler extends JSONHandler {
    private HashMap mSpeakers = new HashMap();

    // (...)
    @Override
    public void makeContentProviderOperations(ArrayList list) {
        // (...)
        int updatedSpeakers = 0;
        for (Speaker speaker : mSpeakers.values()) {
            String hashCode = speaker.getImportHashcode();
            speakersToKeep.add(speaker.id);

            if (!isIncrementalUpdate || !speakerHashcodes.containsKey(speaker.id) ||
                    !speakerHashcodes.get(speaker.id).equals(hashCode)) {
                // speaker is new/updated, so issue content provider operations
                ++updatedSpeakers;
                boolean isNew = !isIncrementalUpdate || 
                    !speakerHashcodes.containsKey(speaker.id);
                buildSpeaker(isNew, speaker, list);
            }
        }

        // delete obsolete speakers
        int deletedSpeakers = 0;
        if (isIncrementalUpdate) {
            for (String speakerId : speakerHashcodes.keySet()) {
                if (!speakersToKeep.contains(speakerId)) {
                    buildDeleteOperation(speakerId, list);
                    ++deletedSpeakers;
                }
            }
        }
    }
}

The buildSpeaker and buildDeleteOperation methods (omitted here for brevity) simply build the Content Provider operations necessary to, respectively, insert/update a speaker or delete a speaker from the Content Provider. Notice that this approach means we only issue Content Provider operations to update a speaker if the import hashcode has changed. We also deal with obsolete speakers, that is, speakers that were in the database but were not referenced by the incoming data, and we issue delete operations for those speakers.

Making Sync Robust

The sync adapter in the I/O app is responsible for several tasks, amongst which are the remote conference data sync, the user schedule sync and also the user feedback sync. Failures can happen in any of them because of network conditions and other factors. However, a failure in one of the tasks should not impact the execution of the other tasks. This is why we structure the sync process as a series of independent tasks, each protected by a try/catch block, as can be seen in the performSync method of the SyncHelper class:

// remote sync consists of these operations, which we try one by one (and
// tolerate individual failures on each)
final int OP_REMOTE_SYNC = 0;
final int OP_USER_SCHEDULE_SYNC = 1;
final int OP_USER_FEEDBACK_SYNC = 2;

int[] opsToPerform = userDataOnly ?
        new int[] { OP_USER_SCHEDULE_SYNC } :
        new int[] { OP_REMOTE_SYNC, OP_USER_SCHEDULE_SYNC, OP_USER_FEEDBACK_SYNC};

for (int op : opsToPerform) {
    try {
        switch (op) {
            case OP_REMOTE_SYNC:
                dataChanged |= doRemoteSync();
                break;
            case OP_USER_SCHEDULE_SYNC:
                dataChanged |= doUserScheduleSync(account.name);
                break;
            case OP_USER_FEEDBACK_SYNC:
                doUserFeedbackSync();
                break;
        }
    } catch (AuthException ex) {
        // (... handle auth error...)
    } catch (Throwable throwable) {
        // (... handle other error...)

        // Let system know an exception happened:
        if (syncResult != null && syncResult.stats != null) {
            ++syncResult.stats.numIoExceptions;
        }
    }
}

When one particular part of the sync process fails, we let the system know about it by increasing syncResult.stats.numIoExceptions. This will cause the system to retry the sync at a later time, using exponential backoff.

When Should We Sync? Enter GCM.

It's very important for users to be able to get updates about conference data in a timely manner, especially during (and in the few days leading up to) Google I/O. A naïve way to solve this problem is simply making the app poll the server repeatedly for updates. Naturally, this causes problems with bandwidth and battery consumption.

To solve this problem in a more elegant way, we use GCM (Google Cloud Messaging). Whenever there is an update to the data on the server side, the server sends a GCM message to all registered devices. Upon receipt of this GCM message, the device performs a sync to download the new conference data. The GCMIntentService class handles the incoming GCM messages:

public class GCMIntentService extends GCMBaseIntentService {
    private static final String TAG = makeLogTag("GCM");

    private static final Map MESSAGE_RECEIVERS;
    static {
        // Known messages and their GCM message receivers
        Map  receivers = new HashMap();
        receivers.put("test", new TestCommand());
        receivers.put("announcement", new AnnouncementCommand());
        receivers.put("sync_schedule", new SyncCommand());
        receivers.put("sync_user", new SyncUserCommand());
        receivers.put("notification", new NotificationCommand());
        MESSAGE_RECEIVERS = Collections.unmodifiableMap(receivers);
    }

    // (...)

    @Override
    protected void onMessage(Context context, Intent intent) {
        String action = intent.getStringExtra("action");
        String extraData = intent.getStringExtra("extraData");
        LOGD(TAG, "Got GCM message, action=" + action + ", extraData=" + extraData);

        if (action == null) {
            LOGE(TAG, "Message received without command action");
            return;
        }

        action = action.toLowerCase();
        GCMCommand command = MESSAGE_RECEIVERS.get(action);
        if (command == null) {
            LOGE(TAG, "Unknown command received: " + action);
        } else {
            command.execute(this, action, extraData);
        }

    }
    // (...)
}

Notice that the onMessage method delivers the message to the appropriate handler depending on the GCM message's "action" field. If the action field is "sync_schedule", the application delivers the message to an instance of the SyncCommand class, which causes a sync to happen. Incidentally, notice that the implementation of the SyncCommand class allows the GCM message to specify a jitter parameter, which causes it to trigger a sync not immediately but at a random time in the future within the jitter interval. This spreads out the syncs evenly over a period of time rather than forcing all clients to sync simultaneously, and thus prevents a sudden peak in requests on the server side.

Syncing User Data

The I/O app allows the user to build their own personalized schedule by choosing which sessions they are interested in attending. This data must be shared across the user's Android devices, and also between the I/O website and Android. This means this data has to be stored in the cloud, in the user's Google account. We chose to use the Google Drive AppData folder for this task.

User data is synced to Google Drive by the doUserScheduleSync method of the SyncHelper class. If you dive into the source code, you will notice that this method essentially accesses the Google Drive AppData folder through the Google Drive HTTP API, then reconciles the set of sessions in the data with the set of sessions starred by the user on the device, and issues the necessary modifications to the cloud if there are locally updated sessions.

This means that if the user selects one session on their Android device and then selects another session on the I/O website, the result should be that both the Android device and the I/O website will show that both sessions are in the user's schedule.

Also, whenever the user adds or removes a session on the I/O website, the data on all their Android devices should be updated, and vice versa. To accomplish that, the I/O website sends our GCM server a notification every time the user makes a change to their schedule; the GCM server, in turn, sends a GCM message to all the devices owned by that user in order to cause them to sync their user data. The same mechanism works across the user's devices as well: when one device updates the data, it issues a GCM message to all other devices.

Conclusion

Serving fresh data is a key component of many Android apps. This article showed how the I/O app deals with the challenges of keeping the data up-to-date while minimizing network traffic and database changes, and also keeping this data in sync across different platforms and devices through the use of Google Cloud Storage, Google Drive and Google Cloud Messaging.

by Android Developers (noreply@blogger.com) at September 10, 2014 02:57 PM

September 08, 2014

Mutual Mobile Presents GrabBag at TechCrunch Disrupt SF 2014 Hackathon

Mutual Mobile, an emerging tech agency that builds breakthrough products for a more connected world, sent a team to TechCrunch Disrupt SF 2014 this past weekend to support Mutual Mobile client, Clover, as well as extend its recruitment arm to the Bay Area. Disrupt SF 2014 brought together over 130 dev teams to hack, code and build the next great mobile solution. The Mutual Mobile dev team presented a working prototype of its GrabBag applications to the Disrupt audience in less than 12 hours.

GrabBag, built on the Clover platform, is the first consumer-facing application built to integrate with point of sale (POS) terminals at grocery stores to ease the pain of grocery shopping. GrabBag, and GrabBag Runner, built as a customer service aid to grocery stores, curates recipes, builds grocery lists, sends lists to the store to ready purchases for pickup, and allows consumers to pay via their mobile phone.

“We love hacking, coding, tinkering – creating – and doing it in partnership with our client Clover at Disrupt made it that much cooler” said Elliott Chenger, Mobile Developer and Evangelist for Mutual Mobile.”If you like creating cool stuff like we do, drop us a line. We’re always on the lookout for great developer talent.”

Mutual Mobile is heavily invested in innovation, research and development, and prototype development. Internal (Blend Day) and external hackathon participation is an essential component to keeping Mutual Mobile developers on the cutting edge of what is possible, ensuring the prototypes presented to clients and prospective clients have the potential to unleash previously impossible value.

Mutual Mobile is currently looking to extend its Austin-based developer team. If you are interested in applying or learning more about openings, visit the Careers portion of their website for more information.

About Mutual Mobile

Mutual Mobile is an emerging tech agency that builds breakthrough products for a more connected world. By finding the sweet spot between technologies, people, and brands, Mutual Mobile unleashes previously impossible value. For more information, visit mutualmobile.com.

The post Mutual Mobile Presents GrabBag at TechCrunch Disrupt SF 2014 Hackathon appeared first on Mutual Mobile.

by Mutual Mobile at September 08, 2014 08:20 PM

September 07, 2014

How does Galaxy Tab 4 Nook tablet performs in Sun

The post How does Galaxy Tab 4 Nook tablet performs in Sun appeared first on galaxytabreview.

People love 7 inch tablets because they are so easy to transport around. You can easily through them in your backpack and use them while commuting or sitting outside in the sun.

In this test, you will find Samsung Galaxy Tab 4 Nook performs in direct sun.

As you can see in the video above it is hard to see any thing in the direct sunlight. The screen behaves like a mirror instead.

by Galaxy Tab Review at September 07, 2014 06:56 AM

Stock Deodexed Rooted ROM for Galaxy Tab 3 7.0 tablets

The post Stock Deodexed Rooted ROM for Galaxy Tab 3 7.0 tablets appeared first on galaxytabreview.

Folks at XDA have churned out a stock ROM that is deodexed and pre rooted. The developer has also pre installed Busybox and zipaligned it.

There is no bloatware on this ROM. While it is based on Samsung Galaxy Tab 3’s Italy T211XXBNH2 ROM, all languages including English are available to the user.

To get root privileges, install SuperSu from play store to get root access. Features of this galaxy tab 3 7.0 ROM:

-Deodexed
-Zipaligned
-Init d support
-Busybox

Stock Deodexed Rooted ROM for Galaxy Tab 3 7.0 tablets

You can download the ROM from here and it may take a while to finish flashing due to the compression.

by Galaxy Tab Review at September 07, 2014 06:35 AM

September 06, 2014

Camera shot on charger connection

Somebody came to me with an idea whether a cheap Android phone can be turned into an automatic camera. Some external sensor would send a signal to the phone and the phone would take a picture automatically. We started to discuss the possible connection of the external sensor and an interesting idea came up: the charger connection.

Android delivers an event whenever the charging power is connected or disconnected: can it be used to send a binary signal to an application in a very simple way, without fiddling with Bluetooth or USB?

Click here to download the example application.

You have to start the application once. Then whenever you connect the charger, it takes a picture. When the application is in the foreground, a preview is shown but as long as the application is active (not destroyed) it works from the background too.

Here are the experiences:

  • On my high-end device the application reacted quickly to charger connection, the reaction time from connecting the charger to the camera shot was less than a second. But when the application was tested on the very low-end Android target device, the picture was much less rosy: the delay increased to 3-4 seconds, effectively making the solution unusable.
  • In order for this application to work, it has to be started at least once manually. This pretty much kills all unattended use cases.
  • The shutter sound is almost impossible to remove. Update: on certain devices (Nexus 4 and Nexus 7 confirmed) there is no shutter sound in silent mode.
The takeaway for us was to reject the idea. But I share the example program anyway, maybe it can be useful for somebody.


by Gabor Paller (noreply@blogger.com) at September 06, 2014 10:08 AM

September 05, 2014

Material Design - Activity Transition Animations

One of the key features of the Google's new Material Design is introduction of more animations than we have seen before in the guidelines. Material Design is all about bringing tactile materials to our UIs. Things in real life move and interact with our touch in a certain way. With the new guidelines Google is bringing that familiar feeling and interaction to Android apps.

Read more from the Google's guidelines for animations here:
http://www.google.com/design/spec/animation/

Animations can be both one of the most powerful tools in your UI design and the most destructive. A well designed animation can be both helpful and delightful. A bad animation is annoying and counter productive.

Android L release and the Material Design guidelines are adding a lot of options to designers and developers for using animations in their apps. Personally, I'm willing to bet that we're going to see an explosion of animation exploitation. As with everything new people get over excited and tend to overuse the new (and flashy) techniques. This will most likely be met by disapproval from users and the animation will be stripped out from many apps. It will take time until we'll find the right way to use these new tools.


In this article I want to take a look at one of the most important types of animations in Android apps. Activity transitions.

In Android apps activities are construct that can often be seen as screens in design. More often than not an activity is a screen in an Android app. Users navigate in the app by moving from activity to activity (from screen to screen).

Until lately now, most apps use Android default transitions between activities. The default transition is usually a sliding animation of some sort (depending on device and Android version). Here's an example of an app using default activity transition.


The transition animation is simple and subtle but important. It indicates to the user that a new entry has been added to the user's back stack. A similar, but reversed, transition is played when user taps the back button.

The back button interaction is why I have been advising against overriding the default transitions without a good reason to do so. Android's back button interaction is already difficult to grasp and changing the subtle indicators might make users hesitate.

However, there is a downside to the default transition. User is now teleporting between completely detached screens even when the screen content is clearly related. In the above example the user is pressing an apartment image to get details of the that item. There is a disconnect. That is what Google is trying to fix with the set of new tools and guidelines for developers and designers.
In future Android apps should be a continuous experience and not a disconnected sequence of jumps from one screen to another.
There has been ways to make clearer connection between the content between activity boundaries already in the previous Android versions.

The Android launcher as well as the Google Now launcher already animate launched apps from the launch icon and the multitasking UI animates the selected app from the thumbnail.


All this was made possible by APIs that allowed developers to define the source view for launched activity. Some apps have been using that feature for some time already.

Let's take a look at Wally app. The app has a list of images and when user selects one of them the details activity is launched from the image.

This is still a form of teleporting between screens but the teleportation is more pleasant. User has better feel of continuum but it could still be much better.

(this video is slowed down to better show the animation effect)

Android L Activity Transitions

This is where the next level of Android activity transitions come in. The Android L release (preview) gives developers shortcuts to create extremely powerful transitions without having to spend a lot of time writing fragile and hacky code (as we had to do before when we wanted to achieve the same effect).

The keyword here is continuum. These activity transitions allow us to design apps where screens are connected to each other with hero elements. By hero elements I mean elements that are central to the content and are present on both screens.

Let's look at an example.

A common case in many, many apps is that there is a list of items and tapping one of them user moves to another page for more information about that item. Traditionally we have relied on having a clear title and images confirming users that they're seeing the correct item and tapped what they intended. This has worked well but it can improved.

What if we can have the main elements of the item on screen all the time and just rearrange the screen to show more information? That is exactly what the Material Design L transitions allow us to do.

Take a look at this video of a quick demo app to see how it looks in practice. The change in feeling of the app is massive. We're no longer teleporting to another screen but we're transitioning to a details screen without any confusion of what is happening.

It's worth noting that using text elements as hero views is not without problems if the text element size changes (as you can see in the video). Images are probably more suited for these transitions anyways.

(this video is slowed down to better show the animation effect)

Activity transition layout effects

The additional tools for activity transitions are not limited just to hero elements. Google added more tools to the developers' kit.  Developers can now define define how elements are removed and added to the screens. By default all components other than the hero elements fade away in the source activity and fade in in the target activity. This is what you can see in the previous video.

The default can be overridden (as is case with most things in Android). Changing the fading effect to an explode animation is a simple one line command in the source activity:
getWindow().setExitTransition(new Explode());

This is all that is needed to change the transition to look like this:

(this video is slowed down to better show the animation effect)

In this slowed down video it becomes very clear that there are a lot of disconnected movement on the screen. The components move out and in and the hero element movement gets obfuscated.

Human eye is very good in detecting movement but if every element on the screen is moving at once our brains won't automatically lock on to the key component. I would argue that using additional layout animations will hinder the benefits of the hero element transition.

Let's look at another example. This is from a pre-release version of the awesome Android Twitter client Talon. In this version they have gone overboard with the L-transitions and created a very destructive user experience. Before we move on I want to make absolutely clear that I'm not picking on the Talon team on trying these things. This is from a pre-release version and I'm sure they will be corrected in the final release!



Every transition is now distractive and there's no purpose for using them.

Use animations for a purpose! 

Like every tool when used incorrectly they can cause more harm than good. Animations are no exception. While the L-release is going to make it extremely easy for us to create all sort of animations, transitions etc I'd advise all of us to use caution when deciding to use them.

Make sure that every animation and every part of your transition has a purpose. Thinks about the implications to users. Use animations to help users figure out what is going on and be aware of how human eye reacts to movement.

The explosion transitions and other similar animations might look great in a tech demo to your customer but they will become tiresome in the long run for actual users. Be aware of the flashy demo effect. You can wow your customer by showing these in a meeting but you'll be giving bad advice to them. Be considerate and emphasise meaning in transitions!

Animations with purpose can make a huge difference in your app feel to the positive direction!

Technical implementation for hero elements

I don't usually write much about technical implementation in this blog but I'm making an exception this time as the official documentation is still fairly poor (will probably be better at the time of L-release). Here are few implementation tips to get similar transition working on your L-preview apps.

Style definitions
Enable transitions in your app style file in values-v21 folder. This is the style you're using throughout your app.

<style name="AppTheme" parent="android:Theme.Material.Light">
        <item name="android:windowContentTransitions">true</item>
        <item name="android:windowAllowEnterTransitionOverlap">true</item>
        <item name="android:windowAllowExitTransitionOverlap">true</item>
</style>

This can also be done in the Java code as explained in this SO question answer.

View names
Make sure you're using view names with your hero elements. The names must match in the source layout as well as in the target layout. You can use either the XML attribute to do that or do it in Java code:

mAvatar.setViewName("avatar");
mTextView.setViewName("title");


To launch the new activity add ActivityOptions object to the call to tell the system to run the transition.

ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(getActivity(),
Pair.create((View) mAvatar, "avatar"),
Pair.create((View) mTextView, "title"));

getActivity().startActivity(DetailsActivity.newIntent(getActivity(), this.id), options.toBundle());

Rest is handled automatically by the system!

Read more about L-animations from the Android documentation here: https://developer.android.com/preview/material/animations.html

Additional resources for animations


by Juhani Lehtimäki (noreply@blogger.com) at September 05, 2014 11:12 AM

September 03, 2014

The Busy Coder's Guide to Android Development Version 6.0 Released

Subscribers now have access to the latest release of The Busy Coder’s Guide to Android Development, known as Version 6.0, in all formats. Just log into your Warescription page and download away, or set up an account and subscribe!

This largely completes the Big Book Pivot of 2014, adding Android Studio coverage to all of the core chapters (including the tutorials) and some of the trails.

Along the way, this includes:

  • Adding build.gradle files for all projects

  • De-Sherlocking all projects, except those that are specifically demonstrating ActionBarSherlock

  • Removing the chapter on IntelliJ IDEA and replacing it with material more specific to Android Studio

This book update also:

  • Adds a chapter on the manifest merger process, with particular emphasis on Gradle for Android and how manifests from different sourcesets plus libraries combine to create the generated manifest for the app itself

  • Adds a number of small improvements to the core chapters, as part of a more thorough review of that material

  • Tweaks the tutorials, partly to deal with Android Studio issues, and other minor changes to improve the instructions

  • Various errata fixes

Updates should now return to their normal every-four-to-six-weeks cycle, emphasizing new APIs, tools, and the like. I am planning on three updates yet in 2014, with Version 6.1 due out in early October.

If you are not a subscriber, you may wish to learn what the Warescription has to offer. The book, plus a year’s updates and other Warescription benefits, costs $45 (credit card/debit card/PayPal) or its equivalent in Bitcoin.

by Mark Murphy at September 03, 2014 01:48 PM

HTC gives their users 100GB of Google Drive Storage

HTC gives their users 100GB of Google Drive Storage

Screen Shot 2014-09-02 at 10.30.12 PM

HTC has just given many of their handset owners 100GB of free Google Drive storage for two years. If you have a semi-current HTC phone, chances are good you’ve been given a boost to your cloud storage total.

This offer is a part of HTC Advantage, which encompasses many things. When you buy a HTC device, you already get cracked screen replacement, a promise to update the platform to the most current version of Android for two years from launch, excellent customer service and now a boost to your Google Drive storage. HTC seems to be supporting their customers like no other OEM can.

As far as eligible devices go, mostly everything current gets some bump. The M8 is the hottest new device, and as such it gets 100GB of Google Drive storage for two years. The two newest editions to the Desire series, the 816 and 610, both get 100GB for two years as well. HTC’s One Max gets the same 100GB treatment.

Another grouping of phones get a boost for +25GB of Google Drive storage as well. The classification of “certain 2013 models” that meet the requirement of “When upgrade to HTC Sense 5+ and Sense 6 becomes available” is fairly ambiguous. HTC has stated that the following models will receive the bonus:

  • HTC One (assuming M7)
  • HTC Butterfly S
  • HTC One Mini
  • HTC Desire 601

As far as I am concerned, it is crystal clear that HTC is offering as much as they can to every customer. There is no other OEM I’m aware of that offers this sort of experience to their customers. Most are happy to give you something with a purchase. To give Google Drive storage after you have already bought into their phone shows appreciation for your business and desire (no pun intended) to continue to keep you as such.

I’m interested to see how many end users actually care about an OEM who supports their products in this way. We, as enthusiasts, already know we care about continued support and bonuses for buying a phone we already decided on. The average end user may not even know these types of things exist.

For what it’s worth, I’ve been impressed with the M8 and continue to use it as my daily driver. Getting some bonus storage was a very nice surprise that I didn’t expect. For these reasons, when it comes time to pony up my dollars for a device, anything HTC brings to the table in the future will be something I’ll consider.

Do you agree or disagree with my feelings? Do you wish your OEM would provide you with a similar level of service, or are you happy with what you have? Shout it out in the comments, as it’s your opinion that matters more than mine.

Land of Droid -

by Scott Kenyon at September 03, 2014 03:01 AM

September 02, 2014

Android gas sensor application with Bluetooth Low Energy/RFDuino

I have always had a fascination with sensors linked up with mobile devices so it seemed just a good opportunity to try out the latest fashionable technology in the area, Bluetooth Low Energy in the context of a competition. SemiconductorStore.com announced the "We know RFDuino" competition for applications of the RFDuino module. RFDuino is an Arduino module with Bluetooth Low Energy (BLE) support. It is ideal to act as an interface between a sensor and a BLE-enabled mobile device like the Nexus 7.

Eventually I will publish the entire source code of this prototype application on this blog. But as this is a contest, I will wait until the contest ends (Sept. 30). Till then, watch the (very amateurish) video we have prepared about our sensor and the Android application. The entry with the most views wins the contest so if you like the concept, share the video with others! Thanks in advance. :-)


by Gabor Paller (noreply@blogger.com) at September 02, 2014 08:33 PM

The Beautiful Design Summer 2014 Collection on Google Play

Posted by Marco Paglia, Android Design Team

It’s that time again! Last summer, we published the first Beautiful Design collection on Google Play, and updated it in the winter with a fresh set of beautifully crafted apps.

Since then, developers have been hard at work updating their existing apps with new design ideas, and many new apps targeted to phones and tablets have launched on Google Play sporting exquisite detail in their UIs. Some apps are even starting to incorporate elements from material design, which is great to see. We’re on the lookout for even more material design concepts applied across the Google Play ecosystem!

Today, we're refreshing the Beautiful Design collection with our latest favorite specimens of delightful design from Google Play. As a reminder, the goal of this collection is to highlight beautiful apps with masterfully crafted design details such as beautiful presentation of photos, crisp and meaningful layout and typography, and delightful yet intuitive gestures and transitions.

The newly updated Beautiful Design Summer 2014 collection includes:

Flight Track 5, whose gorgeously detailed flight info, full of maps and interactive charts, stylishly keeps you in the know.

Oyster, a book-reading app whose clean, focused reading experience and delightful discovery makes it a joy to take your library with you, wherever you go.

Gogobot, an app whose bright colors and big images make exploring your next city delightful and fun.

Lumosity, Vivino, FIFA, Duolingo, SeriesGuide, Spotify, Runtastic, Yahoo News Digest… each with delightful design details.

Airbnb, a veteran of the collection from this past winter, remains as they continue to finesse their app.

If you’re an Android designer or developer, make sure to play with some of these apps to get a sense for the types of design details that can separate good apps from great ones. And remember to review the material design spec for ideas on how to design your next beautiful Android app!.


by Android Developers (noreply@blogger.com) at September 02, 2014 03:00 PM

Android In App Purchased Demo V3.

Hi all,

This demo shows how to do in app purchase for managed products in Android using Version 3 in-app Billing API.

Please Go through this before trying out this Demo

http://developer.android.com/google/play/billing/index.html

inapp

in app

in app

in app

These are the important steps in to remember for doing in app purchase.

1. You have to download the Google In App Billing Library from Google.

For that you have to open the Android SDK Manager and Look for “Google Play Billing Library”.

2. You have to make changes in the Android Manifest first.

Add this permission.

The above permission will detect that your app contains “In App Purchases” in Google Play Store.

3. Now add the .aidl file that you get while downloading the library from Google.

[You can find this library in the Sample Project at the end of this post].

4. Now let’s assume that we have done the coding part by giving a demo in_app item.

5. You can test the application in two ways either using STATIC RESPONSES from Google Play

OR real purchases with users but without using any money.

STATIC TESTING :

READ THIS LINK : http://developer.android.com/google/play/billing/billing_testing.html#billing-testing-static

REAL TESTING AFTER UPLOADING TO GOOGLE PLAY (IN ALPHA OR BETA MODE)

READ THIS LINK : http://developer.android.com/google/play/billing/billing_testing.html#testing-purchases.

NOTE : If you publish your application through Alpha or Beta mode, the users who are downloading from Google Play will not see it or get it. In that way Google ensures that it is not published before testing.

For REAL TESTING AFTER UPLOADING TO GOOGLE PLAY you must be adding some users as Test Users who can test this app that you have
You can add test users while you upload the apk with in app Billing in Alpha or Beta Mode.

For adding test users you can see a link in the APK page of the particular app in Alpha or Beta Mode.[This is usually a Google community or Groups]

For a user to be a Test account you have to go to Settings > Gmail accounts with testing access > add the Gmail account to test.

This means that these users can buy this in app Item without loosing any money in alpha or Beta Mode.

Important Note :

In Google In App Billing V3, all purchases are managed that means you can even consume managed products.

PRODUCTS ONCE CONSUMED WILL BE A AVAILABLE FOR PURCHASE AGAIN.

THAT MEANS IF YOU PURCHASE A MANAGED PRODUCT AND IF THE USER CONSUMES IT, THEN IT WILL BE AGAIN AVAILABLE FOR PURCHASE.

IF THE USER CONSUMES IT GOOGLE WILL REMOVE THAT PURCHASED ITEM FROM IT’S SEVER AND MARK IT AS ‘UN-OWNED’.

SO WHEN YOU QUERY THE PURCHASED ITEMS YOU WILL NOT BE GETTING THE PURCHASED ITEM.

SO IF YOU WANT THE USER TO PURCHASE THE ITEM ONLY ONCE AND AVAILABLE ALL THE TIME DON’T CONSUME IT

THAT MEANS YOU HAVE TO COMMENT OUT THIS CODE FROM THE SAMPLE CODE PROVIDED.

   	mHelper.consumeAsync(purchase, mConsumeFinishedListener);
   

That is you can directly write your code inside this if the purchase is sucessful

   if (purchase.getSku().equals(SKU_INAPPITEM)) {
   }
   

OK Done.

You can download the sample application from this link

Download

by James at September 02, 2014 09:42 AM

August 28, 2014

Harman/Kardon Onyx Studio Review

Harman/Kardon Onyx Studio Review

Introduction

I embarked on a quest to find the best multipurpose bluetooth speaker available. The criteria was it had to be somewhat portable, have decent battery life, and killer sound. As this speaker would be used for my home computer and all of the mobile devices in the house, it had to be top notch. After trying at least a dozen different bluetooth speakers, I settled on what I believe is the absolute best available: The Harman/Kardon Onyx Studio.

Build & Aesthetics

The Onyx Studio is composed of durable quality parts and has looks to kill. The front grille of the speaker is composed of hard plastic with what seems to be a million little holes to make a mesh. The plastic grille is covered with a premium fabric as you’d find in a high quality home speaker. A round frame encircles the enclosure which is covered in durable non-slip rubber. This coating feels very durable, and doubles as insurance the speaker won’t be shaking all over whatever surface you place it on. Weighing in at 280mm x 161mm x 260mm, this isn’t the smallest unit available, however the size is important to speaker sizes and configuration of this enclosure.

Around back is where one of the 3″ woofers lives (see video) in the center of the unit. There is a carry handle up on top and two feet project from the bottom. Each of the feet is shiny chrome plastic and is coated in a rubber on the bottom that feels exactly the same as the rubber on the outer ring. Connections for power and microUSB are also on the rear of the Onyx Studio.

All of this creates a visual and tactile feel that screams premium. There were no other big round speakers among the competition which gives the Onyx Studio a unique look. It looks great, feels great, and lives up to the Harman/Kardon brand in every possible way.

Operation

There are four buttons along the top rim of the Onyx Studio. Power obviously turns on and shuts off the unit. Two volume buttons (+ and -) change the volume directly on the speaker. There is also a bluetooth button which is mainly used to “unpair” from a connected device. The power and bluetooth buttons double as indicator lights for errors and operational notifications (bluetooth connection, low battery, etc.)

Connectivity

The Onyx Studio is designed to be used as a bluetooth speaker. As such, it lacks a 3.5mm jack for connectivity. This would seem to be a bad point, however I, and many other people simply have no need for it. Every device I would wish to use with my speaker all support Bluetooth. Charging is accomplished by a 19V 2A connector located on the back of the unit. A micro-USB is next to the charging port for service use.

Transducers

One of the two 3″ woofers is visible on the back of the unit. The other woofer is located inside the enclosure facing forward. Also inside are two 3/4″ tweeters producing the highs. The biggest feature of the Onyx Studio are the two passive radiators. They are responsible for producing deep lows.

All of the speakers are collectively rated as 4x15W totaling 60W with a 4ohm impedance. The frequency response is the standard 60Hz – 20kHz with a frequency range of 2402MHz – 2480MHz. A rating for maximum SPL (the highest output before damage will occur) is provided as 95dB @ 1m.

Audio Quality

This is the real meat and potatoes of this review. One can have a speaker that looks and feels great while suffering in quality of what it was made to do. This is simply not the case with the Onyx Studio. I listened to this speaker side by side with the Bose Soundlink II and there wasn’t even a real competition. The Harman/Kardon blew it away in almost every way.

This is easily the absolute loudest bluetooth speaker available. Ideally I was looking for something that filled a room with sound. Having that expectation the Bose offering managed to do that and perhaps a little more at top setting. The Onyx Studio filled my whole house with sound. Every room. I took it outside with me on a few occasions and the Harman/Kardon filled the outside with sound as well. If you don’t believe that, you can ask my local law enforcement.

Aside from sheer volume the overall quality of the audio produced is equally impressive. Lows are low, highs are highs. Mids are more than acceptable. I listened to all sorts of music such as Blues, Jazz, Hip-Hop, Dubstep and several other types of electronic music, classical, classic rock, metal and more. There was nothing to be disappointed in no matter what genre came on. I will say the Soundlink II was a bit better in the mids, but having deeper lows and crisper highs without distortion at any volume allows the Onyx Studio to outshine it’s biggest competitor.

This is the reason you should buy any speaker, and as such this category is weighted more heavily than any others in the review. Assuming having something more compact is not an absolute necessity, nothing beats the Onyx Studio. There is simply no better sounding bluetooth speaker on the market at all volumes.

Battery Life

The user’s manual and box both state the Harman/Kardon Onyx Studio is capable of 5 hours of battery life. From my examination, this is very accurate at most volumes. I did crank it to maximum volume for a longevity test and only got 4 to 4.5 hours out of the battery. At those volumes that shouldn’t be surprising. Overall I found the battery life to be sufficient for my needs, though some may see this as a shortcoming if the use-case dictates very long battery life.

Price

The MSRP on the Onyx Studio is $400 US. Coming in at $100 more than the Bose Soundlink II, it’s easily the most expensive speaker around. It really is a $400 speaker based on audio quality and volume and I would not feel poorly to pick it up at full price. It should be noted this enclosure is often 50% off on Amazon (on sale for $155.99 at the time of this writing) and Best Buy ($199.99 at current).

Conclusion

There is simply no better bluetooth speaker enclosure available on the market. Many folks will balk at the larger size and lower battery life available. When push comes to shove, if you want a good sound you need a bigger size. Further the louder it gets the faster the battery drains. Taking that into account and hearing what is produced these are fair factors.

If you need a compact speaker with 7+ hours of battery life, look elsewhere. The Onyx Studio is designed to provide amazing sound at very high volumes and that’s exactly what you get. If size and top-class battery life aren’t necessary it’s a no brainer. Go find this speaker on sale and buy it. I promise you will not be disappointed.

 

DSC00116 DSC00219 DSC00117 DSC00220

Land of Droid -

by Scott Kenyon at August 28, 2014 05:58 PM

August 26, 2014

Defending Against "Camera Peeking" Attacks

Yesterday, I blogged about a research paper describing various attacks. In yesterday’s post, I covered defending against another activity popping up and masquerading one of your critical activities.

Another attack outlined by the paper is easier for an attacker to use… but is also easier to defend against. The paper’s authors refer to it as the “camera peeking” attack.

A camera, as identified by an instance of android.hardware.Camera, can only be used by one app at a time. The attack is simple:

  • monitor for when an app that might use the camera for something important comes to the foreground

  • at that point, start watching for the Camera object to become unavailable

  • once the Camera is unavailable, then available again, grab the Camera and take a picture, in hopes that the camera is still pointing at the confidential information

The example cited by the paper’s authors is to watch for a banking app taking a photo of a check, to try to take another photo of the check to send to those who might use the information for various types of fraud.

Polling for camera availability is slow, simply because the primary way to see if the camera is available is to open() it, and that takes hundreds of milliseconds. The paper’s specific technique helped to minimize the polling, by knowing when the right activity was in the foreground and therefore the camera was probably already in use. Then, it would be a matter of polling until the camera is available again and taking a picture. Even without the paper’s specific attack techniques, this general attack is possible, and it would not surprise me if there are more efficient ways to see if the camera is in use.

On the other hand, the defense is simple: if your app is taking pictures, and those pictures may be of sensitive documents, ask the user to point the camera somewhere else before you release the Camera object. So long as you have exclusive control over the camera, nothing else can use it, including any attackers.

A sophisticated implementation of this might use image-recognition techniques to see, based upon preview frames plus the taken picture, if the camera is pointing somewhere else. For example, a banking app offering check-scanning might determine if the dominant color in the camera field significantly changes, as that would suggest that the camera is no longer pointed at a check, since checks are typically fairly monochromatic.

Or, just ask the user to point the camera somewhere else, then release the Camera object after some random number of seconds.

General-purpose camera apps might offer an “enhanced security” mode that does this sort of thing, but having that on by default might annoy the user trying to take pictures at the zoo, or at a sporting event. However, document-scanning apps might want to have this mode on by default, and check-scanning apps might simply always use this mode.

by Mark Murphy at August 26, 2014 09:52 PM

August 23, 2014

I hate missions! What’s in this update for me?

All is on track for the release of the tech mine expansion pack tomorrow. Even if you don’t play the missions, there are plenty of changes to look forward to in the update (these affect the whole game, not just the new levels):

  • much quicker level generation and startup
  • you can now check objectives when outside of the camp by tapping on the stars in the corner
  • subtle character animations added, such as blinking
  • the cracks created when digging have been redrawn and have more stages, so you get more feedback when digging tough ground
  • lots of sprites retouched or redrawn
  • added a small element of randomness to the digging, so it doesn’t always take the same number of hits for a particular ore
  • less memory usage, less battery usage, better performance
  • removed annoying bat poop sound
  • lifts arrive slightly faster
  • added more detail to the map screen
  • silenced the low health warning when on the surface
  • fixed restart logo sometimes appearing in wrong ratio
  • fixed character “running on the spot” when returning to the game
  • fixed the characters in a conversation sometimes disappearing rather than sliding in/out
  • fixed a bug where the map markers could appear in the wrong location
  • fixed the saving spinner hanging around when it shouldn’t when in the shop or camp
  • fixed progress on hidden objectives animating when it shouldn’t
  • fixed an odd fade effect when stepping up a block that causing colour wierdness

by Psym at August 23, 2014 10:36 AM

August 19, 2014

Better Code Review

Software peer review is essential on a modern development team. Learn how to keep your code healthy, and your people happy in this 15 minute talk from Forward JS.

by Max Walker at August 19, 2014 11:57 PM

August 18, 2014

Read This: Designer's Guide to DPI


Sebastien Gabriel from Google's UX team has written a comprehensive article about designing for different screen densities.

This article is worth reading if you're a designer and worth sharing to your designers if you're a developer. This post will help designers (even without Android understanding) to understand how to create assets supporting different screen densities.

Read the full article here:
http://sebastien-gabriel.com/designers-guide-to-dpi/home

by Juhani Lehtimäki (noreply@blogger.com) at August 18, 2014 09:24 AM

August 08, 2014

Tridroid Presentation: In-App Purchases for an Android Game

I gave a presentation on August 7 to my local Android developers' Meetup group, Tridroid. The presentation was on in-app purchases. The following topics were covered. ... In-App Purchases example: Trivial Drive ... Different revenue models for apps ... In-App Billing for Android ... What you should consider for in-app purchases ... How in-app purchases are handled in other apps (Angry Birds, Temple Run, Candy Crush Saga) ... In-app purchases in Double Star ... How many in-app items should you have? ... How do you call the player's attention to them? ... Pricing considerations ... How to implement In-App Billing ... TrivialDrive example app ... Adapting example to your own app ... Download. If you'd like to download the presentation, the link is in the full article. Continue reading

by Bill Lahti at August 08, 2014 11:47 AM

August 03, 2014

Further update on the new mission pack progress

Another season, another mission pack update…

Once again apologies for the continued delay of the new mission pack. I have been finding it hard to find free time to put into the game, but in the last 3 months a lot has been done and this is definitely the last sprint.

All missions are in place now, there is just some tidying up to do around the storyline, tweaking of difficulty, and the end cut-scene to implement. I am aiming for a release on the 23rd August.


by Psym at August 03, 2014 11:34 PM

August 02, 2014

Double Star Android Game – Beta Version

Double Star is a turn-based, single player, space war game for Android. The app is now available for prerelease testing on Android phones and tablets. If you join the Double Star Beta community on Google+, you will be able to install the app from the Google Play store. ... Storyline - Our world is under attack from an invading alien force. You want to join the fight. So you join StarFleet Academy to learn to command a starship. When training completes, you are given command of a very powerful starship. You must stop the invasion now. Multiple battles later, you stop the invaders. ... After the invasion is over, you learn that our world is safe, but the threat is still out there somewhere.Your mission then is to discover a path through the galaxy that takes you to the alien home world. You must destroy them and stop the threat once and for all. Continue reading

by Bill Lahti at August 02, 2014 03:29 PM

July 17, 2014

Freesat Android app launched

Freesat, the vague organisation behind those TV tuners that let you get satellite TV without paying Sky any money, now has an official Android app. On a basic level it’s an EPG to tell you what’s on over the next seven days, although viewers with one of the more recent Freetime set-top boxes can pair it with their tuners and use their phones and tablets as remote controls — also triggering recordings from afar.

freesat-android-app-1

freesat-android-app-2

It is therefore quite useful if you can get it to sync and work. Check out the Freesat app here.

by Gary_C at July 17, 2014 10:41 AM

July 05, 2014

July 04, 2014

The 1st SWIFT Compliant Ad Network – StartApp

Swift Apple’s Worldwide Developer Conference unveiled a new C-based programming language known as Swift. This application will be able to restructure the Mac OS and iOS app development process. Swift takes high level coding language, combines it with C and provides the flexibility of Python and Node.js to create a world of applications to the developers.

The iOS developers can now enjoy the benefits of memory management system which is automated in swift and syntax which is simplified to allow less room for error. The developers will also be able to provide far better quality apps which perform exceptionally as compared to the bug-prone and time consuming ones created by Objective-C.

The Swift, as the name suggests, will be able to help the developers make apps quickly and easily by using this development process. It is not just the developers but also the users who can feel the difference between apps built on Swift and Objective-C. The graphics are much better, the applications are smoother and not to mention the annoying bugs that plague the apps from Objective-C have also been eliminated. Consumers will be able to get access to much cheaper apps that are not only helpful but also readily available.

Swift has been gaining a lot of attention even though it is a new programming language because of being endorsed by Apple.  Apple is known for the quality of their products so the developers know they have a reliable language in their hands. They not only have a trustworthy product but also ready support available from the Apple Developer Team. The Swift experience will bring a paradigm shift in the Apple Development environment being moved from Objective-C to Swift.startapp

The one thing that propels Swift in the application development is bad experience of using Objective-C. The language is not only difficult and time consuming, but there are only just a handful of highly skilled developers that are able to use it. With the coming of Swift, more developers will be able to create good quality apps which can be distributed freely or at a low cost.

Even though Swift is a fairly new language which has not been tested extensively, it already has support from one of the best ad platforms – StartApp. The iOS software development kit is now compatible with StartApp which is an ad platform supporting Apple’s new language. The one thing that made it possible was that the integration of StartApp’s iOS SDK is very simple.

It comes with the same superior banner ads and full page interstitials that are the USPs of StartApp. You can also get the additional OfferWall which provides both 2D and 3D graphic options. All the ads, regardless of the type, are optimised to suit the iOS interface which enhances the user experience. The graphics are crisp and the distortion of image has been eliminated.  The ads are available in both landscape and portrait modes.

StartApp is the only ad network that has taken the Swift language under their wings. They are 100,000 partners strong and more than 1 billion SDK’s have been downloaded because of their relentless efforts at marketing and advertising. This definitely puts Swift in good hands, despite being newly born in the iOS developer sector.

The post The 1st SWIFT Compliant Ad Network – StartApp appeared first on Android Apps.

by Gigi Fenomen at July 04, 2014 12:51 PM

June 27, 2014

Google I/O 2014: Rehash

All of the videos have been posted from the various sessions I was in this year. Here they are, along with links to the slides.

What's new in Android

A presentation with +Dan Sandler that provides a quick overview of some of the larger features and new APIs in the L Developer Preview release and other new bits in the recent Androidosphere. There's also a really good deep-dive into Notifications, since Dan's the non-local expert on the subject.



Slides (PDF)


Material science

This session, presented with +Adam Powell, provides an overview of the engineering side of the Material design system. Many of the other sessions at Google I/O this year discussed the design side; this presentation covers the technical details of the APIs and the capabilities exposed by the framework for Android developers.



Slides (PDF)


Material witness

I was happy to be joined once again by former Android developer and UI Toolkit team lead +Romain Guy for this talk on some of the new Material design elements in the L Developer Preview release. The idea behind this talk was to go a bit deeper into using and explaining the new APIs, as well as explaining how some of the features, like realtime soft shadows, work.



For slides as well as demo code, check out Romain's blog at curious-creature.org.


Android fireside chat

This session, organized and moderated by +Reto Meier, I found to be more interesting than other such panels I've seen. Often, these things tend to have a lot of awkward silences as the panelists try to figure out the most interesting way of saying "No comment" since there's a general policy on Android of not talking about future development plans. This time, there was a lot of discussion around how and why some parts of the system work, which I enjoyed as an audience member that just happened to be sitting somewhat closer to the panel.

by Chet Haase (noreply@blogger.com) at June 27, 2014 05:08 PM

Google I/O 2014 Slides and Demo

Chet and I gave a talk entitled “Material Witness” at Google I/O today. I am happy to announce that the entire talk is now available on YouTube. I have also published the following resources:

Google I/O 2014 demo

by Romain Guy at June 27, 2014 06:39 AM

June 17, 2014

Moto Maker for Moto X hitting Germany on July 1st

After way too much time as a US-only exclusive and with the phone it pimps to the extreme already starting to show its age, Motorola’s finally ready to launch the Moto Maker customisation service for the Moto X in Europe.

According to Motorola Germany, the case modding service will launch exclusively for those who buy a phone through Phone House in the country. Phone House is the German wing of Carphone Warehouse, so here’s hoping CPW picks up the deal and launches the custom phone option here in the UK too.

moto-maker-uk

This could be the answer to the tricky “eccentric summer phone” problem we currently face. As long as it’s cheap.

Link via Androidsis.

by Gary_C at June 17, 2014 07:30 PM

June 04, 2014

Mobile Carrier Payments - Now Available via SlideME


SlideME & Fortumo









SlideME now supports the option for users to pay via Mobile carrier through our partnership with Fortumo. This is an important milestone for SlideME to bring such a payment option at the store level, as opposed to developers having to implement intruding commerce options within each of their apps. Unfortunately Mobile carrier payments, unlike traditional payment options, have different price points for each country. Such price points do not accommodate the exact set price of an app, nor is it fair to users for such an app price to be fixed to the carriers’ price points per country. This means the same app could be more expensive in one country than another. For this reason SlideME has implemented a feature where any overpayment is credited to the user’s SlideME Wallet balance, which can be used to purchase other apps (or in-app items if the app is using the recently released SlideME In-App-Payments SDK or supported Open In-App Billing).


“3rd party Android app stores are becoming increasingly popular and we are excited to work together with SlideME, one of the leaders in this space. By adding mobile payments to their apps published on SlideME, developers can now earn more revenue from almost 5 billion people who do not have or do not want to use a credit card. With carrier billing, they can now conveniently charge purchases directly to their phone bill”

- Gerri Kodres, SVP of Business Development and Carrier Relations, Fortumo


List of countries supported currently for Mobile Payments http://slideme.org/payment-methods/operator-billing-coverage New SlideME Market (SAM) ver 6 app was also released this May 2014. As always, you can download from http://slideme.org/sam.apk

read more

by SlideME at June 04, 2014 07:26 PM

June 02, 2014

May 18, 2014

April 29, 2014

The Android and iOS Rivalry – Cosmetic and Functional

Android and iOS Rivalry

Bias throws any hint of fair assessment out the window. Even with independent reviews in consideration, there’s the suspicion that not all ground has been covered, not enough to justify the verdict at the end of a review. This has been the challenge in comparisons, especially in consumer electronics. For the longest time, Sony and Nintendo were caught in a bitter console war, until Microsoft stepped into the picture and redefined the playing field. The same is true with the ongoing rivalry between Android and iOS, both with technical merits and lapses of their own. So how do you evaluate these without siding for the OS installed in your portable device? Many favor either without even giving the competition a chance to prove its worth.

Crash Test

The competing OS are only as good as their latest updates, even though many users consider earlier versions as comfort zones that will do, at least for the moment. The initial test is in the upgrade, if it fares better than its predecessors did. This is often calibrated with a crash test, maximizing use of the OS until it tanks or underperforms. The iOS 7.1 has improved over iOS 6 at a 1.7% crash rate, but this is still at a significant disadvantage to the Android Kitkat, with only 0.7% crashes (figures are based on activity logs from over a billion users).

Adoption and Upgrade Preferences

In a matter of preference, the Android and iOS camps are bitterly divided, but there’s an ongoing consensus against the Android Kitkat and its incompatibility with many third-party applications. This is understandable, though, given the plethora of Android apps available, both in their beta and final versions. An 85% adoption rate for the iOS, in comparison to Android’s 8%, is indicative of the reception for both OS, although subject to change.

android and ios

Seamless and Efficient Design

The iOS interface has been overhauled in favor of simplicity, to ensure efficient and convenient navigation. You can pull up a Control Center menu to tweak utilities and connection options, and you can always customize the icons and font to improve readability and navigation. Most of the improvements are cosmetic, but these serve the purpose of having an interface that’s more user-friendly.

In contrast, Android’s menus (settings and prompts) are still seamless and merged, allowing you to swipe towards each with ease. The home screen is still customizable, but there’s a sense that the entire setup is a bit clunky, if not strained. Android’s Kitkat offers better autocorrect functions, with several suggestions placed above the text field. iOS presents these with bubbles on top of words, but somewhat gets in the way of proper input.

Android and iOS Navigation

There’s nothing to complain about in terms of scrolling and zooming, the response is great for both the Android and iOS. There are features ported over from previous versions, though, such as the Android’s Apps Drawer and the iOS’s jump-to-top-of-page status bar. The highlight, copy, and paste commands still need tweaking, but don’t set back the improvements. You could say the changes were superficial instead of functional, but it’s a big leap just the same, and it’s possible these are market tests for compatibility, in preparation for the next wave of revolutionary devices set to roll out in the coming months.

Lionel Luigi Lopez is a business writer, entrepreneur and a musician. He is also an active blogger and marketing strategist. He runs a small business in Manila and still active in music.
Follow him on twitter @lionelluigi

The post The Android and iOS Rivalry – Cosmetic and Functional appeared first on Android Apps.

by Gigi Fenomen at April 29, 2014 02:37 AM

April 05, 2014

CyanogenMod Installer Removed from Google Play Store

Why do you hate me?

Why do you hate me?

A bit of news sure to disappoint fans of Cid, the CyanogenMod team recently took to their blog to explain the removal of the exceptionally popular “CyanogenMod Installer” from the Google Play Store. Despite being installed on more than 100,000 devices and maintaining a 4.2 star average rating, Google has decided this particular little blue guy isn’t up to snuff.

Cordial Ejection

It’s worth noting that Google didn’t pull the CM Installer from the Play Store, rather they contacted the team and asked that they voluntarily remove the application before Google themselves had to intervene.

This strikes us as a relatively classy way to tell somebody you don’t want them publishing their software in your marketplace, and it’s certainly a step up from the treatment most developers are given: your application get’s thrown out on its ass like the drunk guy who keeps making trouble.

When the CM team asked Google for clarification as to why they were being escorted out the door, they actually sent them a proper response rather than pointing them to the TOS with a canned message:

After reaching out to the Play team, their feedback was that though application itself is harmless, and not actually in violation of their Terms of Service, since it ‘encourages users to void their warranty’, it would not be allowed to remain in the store.

CM Blog

Looking Ahead

It’s hard to argue with Google’s point. While the CM installer is undoubtedly an excellent gateway to get new users in to the world of custom Android ROMs, there’s absolutely a concern about less knowledgeable users getting themselves into a bad situation with this type of software.

Of course, in the end, the Play Store is Google’s domain and they can do whatever the hell they please. It seems pretty unlikely that the CM Installer will be returning to the official Android ecosystem anytime soon, but the CM team says they’ll be looking into getting onto alternative Android repositories such as the ones offered by Amazon and Samsung, so those looking for a one-click installation of the world’s most popular community Android ROM hopefully won’t be out in the cold for too long.

by Tom Nardi at April 05, 2014 03:30 PM

Win a Free Android Game Console Courtesy of PlayMG!

Free Console???  Yep!

PlayMG, a company dedicated to Android game consoles and safety online, wants to give one lucky Powerbase reader a PlayMG Android game console.  What is a PlayMG?  Well, we spent some time with the device several months ago.  You can read our impressions here.

So, how do you win?  Easy! 

1.) Find us on Google+ or Facebook.  Share the post!

2.) Like us on Facebook or give us a +1 on Google Plus.

3.) Come back here and leave a comment stating why you should win a PlayMG game console!

That’s it!

The winner will be chosen on Nov. 26th, so make sure to keep checking back! 

 

mgspecs

PlayMG Specifications

Check out Olivia Holt and Kyrie Irving enjoying the PlayMG below.

 

Powerbase Review | PlayMG

Powerbase Interview | PlayMG’s Taylor Cavanah

 

 

by admin at April 05, 2014 03:30 PM

March 30, 2014

Maverick 2.6

Maverick 2.6 is just released with map tiles downloader. You can “paint” areas to download with one finger or select a rectangle block using multi-touch. Select on the left all zoom levels you want to download. Tap and hold to select at once all zoom levels up to the selected level.

Downloader

Download: Pro versionLite version

Related posts:

  1. MX Video Player: best AVI/MKV player for Android
  2. Neat Calendar Widget
  3. Adobe Flash Player 10.1 on Droid X

by Jeff at March 30, 2014 01:18 PM

February 28, 2014

Publishing an Android book in the vogella book series

Since a few months I’m working on an Android book based on the popular Android online tutorials from my website.

Selection_017

On thing I learned in the past about book writing is that the process is extremely painful. Creating a consistent and almost error free description is much more work than publishing a good online tutorial. Fortunately I already have a great team of reviewer for the book, so I have high hopes that this book will be of great quality.

I plan to release early access versions of the book via Kindle and Google Play. This release process should start soon.

I want to add every month a new chapter and people which purchases the early access version can update their books. This process will continue until I finish the electronic book. The final book will be available as paper book and as ebook.

by Lars Vogel at February 28, 2014 10:17 AM

February 24, 2014

The Galaxy S5

Photos of the galaxy S5 leaked today, and let me tell you, I am not very impressed as far as the visuals go. This is a link to an album someone leaked today. The device itself doesn't look very impressive. The bezels are bigger than the S4, although the screen is bigger. A 2800mah battery with a rumored 2K screen is going to be a battery killer. The LG G2, came out 6 months ago and has a bigger battery than that, come on Samsung. I fear Samsung is falling into the same boat as Apple. Small subtle improvements each year, knowing that people will buy it because its "The Galaxy S5". I don't want that. I want something I pull out of my pocket, and people say "wow what's that!!!" Not, oh you have a galaxy? We're entering a time where phone manufacturers are all trying to make the next new fad (watches, fitbits, glasses) and unfortunately I don't see this being one of them, even though it will be. comment below on what you think about the S5!

by Captain Clyde (noreply@blogger.com) at February 24, 2014 07:21 PM

SlideME announces In-App-Payments SDK, Payouts in bitcoins, and new payment methods


SlideME has several key announcements:  

  1. Availability of the SlideME In-App-Payments (IAP) SDK
  2. Developer Payouts in bitcoins
  3. Mobile billing with many more payment methods to come
  4. Users can earn virtual currency to pay for apps or purchase in-app-items
With the release of the SlideME IAP SDK, developers can monetize their freemium apps (i.e., free to download but include the option for users to purchase in-app-items) distributed via SlideME to the many Android Open Source Project (AOSP) based devices without Google Play Services. In-app purchases for users is seamless as they can continue to use our current or new payment options, including purchasing in-app items through their existing SlideME Wallet.


The sheer volume of non-Google Play enabled devices can no longer be ignored by app publishers as more device vendors are leveraging the AOSP, which does not include the closed-source apps and services like Google Play and Google Maps. Developers should have a distribution strategy for apps being distributed to these AOSP based devices .


Today at MWC, we’re seeing Nokia releasing the Nokia X device based on the AOSP, and therefore without Google Play. SlideME as of today is present on the Nokia X, and many other device manufacturers have preloaded SlideME as a respected alternative to Google Play.





Good news for developers today from SlideME.  Developers have the option to be paid out in Bitcoins or to their Coinbase Wallet instantly.


read more

by SlideME at February 24, 2014 05:21 PM

February 08, 2014

Grails based survey system, the android app

Some time back I wrote an article describing the roosearch system I developed using grails. This is the second part, the android client, please checkout the previous article otherwise this might not make much sense! After completing the grails component, I had a RESTful API available to me, and I just needed to build an […]

by James Elsey at February 08, 2014 09:56 AM

January 21, 2014

Dragging Images When Scaling Must Be Restricted

I recently retired, but I have one more little tip to blog about. While I have a few ideas for some apps, I doubt that I’ll have to do the kind of intensive problem solving required during my job. Therefore this might be the last post.

I was involved with a suite of clients for business intelligence. The primary clients were created with Adobe Flex and ran in the browser. They provided for creating and viewing reports. The iOS and Android clients provided for viewing reports. Thus features were implemented in the Flex product first, and we who supported the mobile clients had to cope with adding them. The feature relevant to this blog entry was the ability to specify numerous scaling options for images (e.g. photos) that could be incorporated into reports. Some of these scaling options had no natural analog to the Android scaling options for images.

To support the requirement for panning and zooming images I took full advantage of the PhotoView library provided by Chris Banes. This library was a great solution for all but two of the required scaling options. Our product allowed for two rather silly options of fitting an image to the width or to the height of the viewport that the report designer drew on screen. If the other dimension of the image was greater, then part of the image would be invisible. I had to provide support for letting the user drag the image around in the viewport so that all of it could be seen.

The PhotoView library would have handled this except for the fact that we needed to set the scale type on the ImageView class to MATRIX, and PhotoView does not allow that. With no natural analogous scaling type to our “fit width” and “fit height”, I had to create a new subclass of ImageView to handle just the images requiring those types. The ReportImageView class has some code for doing the scaling needed to fit height or fit width, but I am leaving that out here so as to concentrate on the drag support.

import uk.co.senab.photoview.VersionedGestureDetector;
public class ReportImageView extends ImageView implements VersionedGestureDetector.OnGestureListener {

private VersionedGestureDetector mScaleDragDetector;

 public ReportImageView (Context context, AttributeSet attrs){
    super(context, attrs);
    mScaleDragDetector = VersionedGestureDetector.newInstance(context, this);
  }

  @Override
  public void onDrag(float dx, float dy){
     Matrix matrix = getImageMatrix();
     Matrix copy = new Matrix(matrix);
     copy.postTranslate(dx, dy);
     setImageMatrix(copy);
  }
  @Override
  public void onFling(blah, blah...){
    //no op
  }
  @Override
  public void onScale(blah, blah...){
    //no op
  }
}

The salient features are 1) make a new VersionedGestureDetector using the class provided in the PhotoView library, 2) implement the onDrag() method of the OnGestureListener interface. In onDrag() make a new matrix and post-translate it to the coordinates supplied, then set that as the image matrix.

When the scale type is “fit width” the user can drag the image up and down if the height is greater than the width. When the scale type is “fit height” the user can drag the image left or right. If you get such oddball requirements for images, try this solution.


by Todd Folsom at January 21, 2014 08:48 PM

January 05, 2014

Yota Phone – The Android Smartphone From Russia With Two Screens

Yota Phone

Let’s start with the underlying hardware. Compared to some of the flagship and high-end Android devices launched in 2013, the Yota Phone is decidedly mid-range. The Dual-Core 1.7 GHz Krait CPU has the speed and capability to run Android comfortably, but the handset doesn’t stretch the specs in the current market. It’s nice to see it comes with 2 GB of RAM, and when it was announced at CES 2013 these were cutting-edge specs, but the Android world has moved on since then.

The handset comes in just one storage memory configuration (32 GB) and unfortunately there is no SD card expansion port. Given 16 GB feels a bit tight on Android handsets today, the 32 GB option should be good for the life of the handset, and with smart use of cloud based services for storage and streaming it should suffice for the majority of use cases.

Read More from here.
http://www.forbes.com/sites/ewanspence/2014/01/04/yota-phone-review-the-android-smartphone-from-russia-with-two-screens/

by James at January 05, 2014 05:13 PM

December 07, 2013

Robots! Part 2, the android client

Continuing on from my previous post, I’ve created an android client that I can use to send commands to my python server. Ultimately I want to be able to control the robot remotely, the best way to do this would be to control the robot from a tablet or a phone which communicates wirelessly with […]

by James Elsey at December 07, 2013 11:01 AM

November 15, 2013

Moving An Android View By Dragging It

Yes, here is another article about moving or dragging a view with a finger, but I think I can give a complete example in one place. Most of what I read while developing a movable component did not give a fully working result. I started with the article on making sense of multitouch at the Android developers’ blog. Then I had to go search at Stackoverflow. I give some of those references in the code comments.

I had a requirement to provide a magnifier view, or jeweler’s loupe, which would provide a magnified view of a graph as the user dragged the view over the graph. The magnifier would become visible on a long press and stay visible while the user dragged it over the graph. The frame of the magnifier would display the magnified contents as provided by a helper method (not described here). Here’s a rough example from my testing app.

magnifier example

magnifier example

It shows a small bitmap (unmagnified in this test) and some bogus tooltip values to the right of the image. When this magnifier is dragged over the image (i.e. a real graph), the magnified area will update as will the tooltip information.

Let’s look at the code. Here’s the touch listener for the magnifier. It requires that the magnifier (a RelativeLayout) be passed in on the constructor.

private class TouchListener implements View.OnTouchListener{
   public TouchListener(RelativeLayout frame) {
     super();
     this.frame = frame;
   }
private float aPosX;
private float aPosY;
private float aLastTouchX;
private float aLastTouchY;
private static final int INVALID_POINTER_ID = -1;

// The active pointer is the one currently moving our object.
private int mActivePointerId = INVALID_POINTER_ID;
private RelativeLayout frame =null;

public boolean onTouch(View view, MotionEvent event) {

switch (event.getAction() &amp; MotionEvent.ACTION_MASK) {
   case MotionEvent.ACTION_DOWN:
     //from http://android-developers.blogspot.com/2010/06/making-sense-of-multitouch.html
     Log.d(TAG, "action down");
     // Save the ID of this pointer
     mActivePointerId = event.getPointerId(0);
     final float x = event.getX(mActivePointerId);
     final float y = event.getY(mActivePointerId);
     // Remember where we started
     aLastTouchX = x;
     aLastTouchY = y;
//to prevent an initial jump of the magnifier, aposX and aPosY must
//have the values from the magnifier frame
     if (aPosX == 0){
         aPosX = frame.getX();
      }
      if (aPosY == 0){
          aPosY = frame.getY();
       }
    break;

    case MotionEvent.ACTION_UP:
      Log.d(TAG, "action up");
      reset();
    break;

    case MotionEvent.ACTION_POINTER_DOWN:
    break;

    case MotionEvent.ACTION_POINTER_UP:
      // Extract the index of the pointer that left the touch sensor
       final int pointerIndex = (event.getAction() &amp; MotionEvent.ACTION_POINTER_INDEX_MASK) &gt;&gt; MotionEvent.ACTION_POINTER_INDEX_SHIFT;
      final int pointerId = event.getPointerId(pointerIndex);
      if (pointerId == mActivePointerId) {
         // This was our active pointer going up. Choose a new
         // active pointer and adjust accordingly.
         final int newPointerIndex = pointerIndex == 0 ? 1 : 0;
          mActivePointerId = event.getPointerId(newPointerIndex);
       }
  break;
  case MotionEvent.ACTION_MOVE:

     // Find the index of the active pointer and fetch its position
     final int pointerIndexMove = event.findPointerIndex(mActivePointerId);
     Log.d(TAG, "action move");
     float xMove = event.getX(pointerIndexMove);
     float yMove = event.getY(pointerIndexMove);

//from http://android-developers.blogspot.com/2010/06/making-sense-of-multitouch.html
     // Calculate the distance moved
     final float dx = xMove - aLastTouchX;
     final float dy = yMove - aLastTouchY;

     if ( Math.abs(dx) &gt; mTouchSlop || Math.abs(dy) &gt; mTouchSlop){
        // Move the frame
        aPosX += dx;
        aPosY += dy;

// Remember this touch position for the next move event
//no! see http://stackoverflow.com/questions/17530589/jumping-imageview-while-dragging-getx-and-gety-values-are-jumping?rq=1 and
// last comment in http://stackoverflow.com/questions/16676097/android-getx-gety-interleaves-relative-absolute-coordinates?rq=1
//aLastTouchX = xMove;
//aLastTouchY = yMove;
Log.d(TAG, "we moved");

//in this area would be code for doing something with the magnified view as the frame moves.
       frame.setX(aPosX);
       frame.setY(aPosY);
    }
    break;

    case MotionEvent.ACTION_CANCEL: {
      mActivePointerId = INVALID_POINTER_ID;
    break;
   }
  }

    return true;
}

 private void reset(){
   aPosX = 0;
   aPosY = 0;
   aLastTouchX = 0;
   aLastTouchY = 0;
   frame.setVisibility(View.INVISIBLE);

  }
}

Here is the first important point. At line 29, we see that the magnifier will initially jump from the touch point because the touch event streams relative and absolute coordinates. Prevent this by setting the aPosX and aPosY fields to the initial X and Y coordinates of the frame.

Next, look at line 76 in the case for ACTION_MOVE. The multitouch example from the Android developers’ blog would have us remember the touch position. However that causes problems, as described in the citations from Stackoverflow, so don’t remember the last touch point. If the distance moved is greater than the touchSlop (line 71), just go ahead and move the frame (lines 85 and 86).

With these two modifications to the code shown in the multitouch example you should be able to happily drag a view around to your heart’s content.


by Todd Folsom at November 15, 2013 08:08 PM

October 25, 2013

MicroConf Europe

I don't envy conference organizers these days - most of what's being said can be read the next day, for free, on line, at your own pace, from the comfort of your own home, and without spending a bundle of time and money to sleep in a far away hotel.

Competing with that is not easy, but the guys at MicroConf managed to.  I would sum up the weekend by saying that it was a "very high bandwidth experience".  Every day, from breakfast until I turned in, I was chatting with people or listening to speakers during the conference itself.  That's aproximately  16 hours of being "on", and by the time I got home to Padova, I was exhausted!  But at the end of the day, I felt like it was worth it being there in person, because of all the interaction with other people.  The speakers' talks all ended up on line, more or less, but all the chatting and discussion and getting to know everyone is the human element that is tough to replicate on line, and one of the most important reasons to attend a conference in person.  Prague is also a beautiful city - I wish I had had more time there to check it out.

Here are some highlights and notes, in no particular order:

  • Rob Walling talked about actual, concrete numbers when discussing his current project's revenues.  There's a ton of handwavy stuff out there on the internet, but real numbers are tough to beat.  What makes it especially nice is that they also felt "real": they're good numbers, no doubt about it, but not stratospheric, science fiction numbers that leave you feeling like "ok, whatever, but that's not the planet I live on".  They're numbers that make you think "maybe, if things go well, I could do that too".
  • The number of "I'm from X, but live in Y" people at the conference was high.  Irish but live in Spain, American but live in Japan.  Or maybe just noticeable because I'm in that category myself.  There were people attending from the US, Europe, Japan, South Africa, and even Australia.  Impressive!
  • Almost all of the speakers had very specific, concrete advice that I can and will apply to LiberWriter, time permitting.  I read, and have read, a lot of business books.  Most of them are kind of fluffy, truth be told, in that they've got one decent idea, and a lot of filler to turn what could have been a tight, ten-page article into a book.  This was quite different in that there were a whole lot of tips and tricks being thrown out.
  • Rob's wife Sherry gave a talk about life with an entrepreneur.  Having two kids and a wonderful wife myself, it's a point of view that I was very interested in hearing about.  Judging from the people I chatted with, this was not your typical "startup" conference with a bunch of 20-somethings with no family and no ties - a lot of the other people attending had kids to think about as they launch their ventures.  A question I asked of Rob was how much of a leap he took from consulting to working on his own products, with the answer being that he's actually pretty risk adverse.  No Silicon Valley story about betting the house and everything else on the company - apparently, revenues from the web sites and products were good enough that there wasn't even really a leap to make when he quit consulting.
  • The size of the conference was just right: enough people that I didn't quite manage to meet everyone, but not so many that it was overwhelming.  In downtime between talks, and during dinners, breakfasts, lunch and so on, the speakers were very available to chat with.
  • Patrick McKenzie seems to have stumbled into his life's calling as someone working at the border of software and marketing.  The amount of advice, anecdotes, and data that he was continually spinning off was incredible.  He comes across as being a down-to-earth, approachable, friendly person.
  • Part of the balancing act the organizers have to work with is where people are at: some people had an idea but no concrete business.  Some of us (me) make some money but not too much.  Others have viable businesses that they make enough to live off of, and then there are those who seem pretty much 'set'.  It's difficult to find people to speak to each audience without losing some of the others.
  • The thing I liked the most about a lot of what was discussed was that it seems realistic.  Few people at the conference were from Silicon Valley, and yet... they're successful!  I like hearing about success stories that work out really well for the people involved, but still feel like something attainable.  People should be looking to emulate the successful guys here, not looking at extreme outliers like Bill Gates or Mark Zuckerberg.
  • I'm used to tech conferences, where it's all about the technology.  There was very little actual tech talk at MicroConf - it seems like everyone knows their stuff and was interested in learning about marketing, sales, and so on.

However, since it was a business conference, I also have to put on my cold, hard accountant hat.  Will the conference pay for itself?  Only time will tell.  I learned a variety of interesting and useful things, many of which I think I can put into practice.  The problem is finding the time between consulting work and family, but that was a bottleneck before, too - I had, and have, more things to do than time.  Also, to be very direct about it, how much of what I learned could not have been learned by carefully reading accounts of the conference, slides, and other material published on the internet?  A lot of it.  I'm not sure I would have paid attention to all of it though, so the conference was definitely nice in that it exposed me to some talks and ideas that otherwise I might have brushed off before giving them a chance.  In terms of dollars and cents, I won't be able to say for a while whether it was a sensible investment or not.

Would I go again?  I'd like to - it was a lot of fun and the people were great.

Like I said, it's tough doing conferences because your competition is the internet!

by David N. Welton at October 25, 2013 10:21 PM

September 30, 2013

The Google LG Nexus 5, and why you should it should be your next smartphone

If you're like me, you are sitting on an upgrade, and not really sure what to do as far as picking a phone goes. I'm here too tell you, buy an iPhone 5C. Just kidding. Don't waste your money on Apple garbage that's 3 years behind every android device on the planet. I suggest to everyone, to wait for the Nexus 5 to come out in the next few months, and let me give you a few reasons why.

1. PRICE (pretty obvious)

The beautiful thing about buying Nexus devices, is you are getting top of the line hardware and specs, for almost half the cost as anyone else. The Galaxy S4 is around 700 dollars off contract, which is absolutely insane. The Nexus 5 will cost (this is an educated guess) around 300-350 dollars, which is half the price of anything else, with the same (in my opinion better) user experience.

2. UPDATES (real catch)

Buying a Nexus phone has one simple bonus. You will always (except for you Gnex verizon people) get the latest version of android, before everyone else. Who doesn't like new software as fast as possible?

3. Everything else

The Nexus 5 is going to be a 5inch 1080p screen with a snapdragon 800 processor with 2GB of ram and a 8mp shooter. Now for those of you who have no idea what I just said, I can break it down for you. Let's imagine that the phone you have in your hand right now (which im guessing is close to 1-2 years old) is the car you had when you were 16. Probably an old beater that had 200,000 miles on it that you didn't care about. The Nexus 5, is an Audi A8 with all the little extras like leather seats and air condition and the fancy GPS that you brag about to all your friends, but never really use it, because you would have your Nexus 5 navigating you around with Google Maps ;)

when it doubt, wait it out, and buy Nexus 5

by Captain Clyde (noreply@blogger.com) at September 30, 2013 10:41 PM

September 18, 2013

Wallpaper Wednesday – Schwangau

Wallpaper Wednesday - Schwangau

This week’s wallpaper is called Schwangau after the place where it was taken. I always use the wallpapers that I put up, and I hope you like it enough to use it too.

This wallpaper will work great on any Galaxy Tab or Galaxy Note. Click here to download.

by Kyle Dornblaser at September 18, 2013 07:23 PM

September 11, 2013

Wallpaper Wednesday – Prague

Wallpaper Wednesday - Prague

This week’s wallpaper is called Prague. I always use the wallpapers that I put up, and I hope you like it enough to use it too.

This wallpaper will work great on any Galaxy Tab or Galaxy Note. Click here to download.

by Kyle Dornblaser at September 11, 2013 02:37 PM

August 06, 2013

Try Some Old School Fun With 3D Snake

The old snake game has gotten a facelift and a new name. 3D Snake for Android is just what its name implies. The old school game has gone 3 dimensional, and it has never been so much fun. The premise is still the same. You are a snake eating as you crawl along in a box getting bigger and bigger as you go. If you are not fast enough to stay away from the edges, you die. It gets harder the bigger the snake gets, of course. In this newer version, you are a cute little grass snake eating bugs and growing as you go along, but if you get too big and lose control you are in trouble.

It is an analogy for life really, if you think about it. We go along our lives and our triumphs can make our pride grow and grow until we can no longer fit in the constraints of our lives or around the people in it. We can't get out of our own lives, therefore if we grow so large as to bust out, we lose it. Maybe we don't literally lose a life, but we very well could lose much of what makes up our lives as we know it.


No one wants to think about that though. The goal here is to get as big as possible and stay away from the edge, which is not as easy as it sounds. Do it well thought and watch your score climb on the Swarm leaderboards.

by Beti (noreply@blogger.com) at August 06, 2013 09:07 PM

July 30, 2013

Avoid The Mines In Minesweeper ++ Lite


Minesweeper is the classic game of "can you figure it out before you die." It is the perfect way to kill time or rest your brain with some mindless activity for just a few minutes without anyone knowing.  Countless execs over the years have utilized the game to take a break while looking busy, and now with Minesweeper ++ Lite for Android the same technique can be used by anyone anywhere on their android mobile device.

While it may take a second to catch on, once you do you will be hooked. You must "guess" where the mines are and stay away from them. This becomes easier to reduce with time and guessing is no longer necessary once you figure out what you are doing. 


What makes it even better is the ability to post scores to the Swarm leaderboards. Compare your progress and rank with players from around the world, but be certain you change your name lest anyone else lurking around the boards catch on to your sneaky break time routine. Of course, be wary of who you share your gaming name with also, but a little inner office camaraderie never hurt anyone.   Enjoy free time, or use it as a cover to make you look busy when you are not. Either way you will love the fun that Minesweeper offers.

by Beti (noreply@blogger.com) at July 30, 2013 04:48 PM

June 26, 2013

T-Mobile To Announce “Simple Choice with no credit check” plans

It seems that T-Mobile always does this. They introduce something fairly interesting, and then follow it up with something also kind of interesting, but also a little confusing. It got bad a few years ago, when they had multiple tiers of plans and it was difficult to tell the differences between them in many cases. Their latest foray piggybacks their Uncarrier campaign. “Simple Choice with no credit check” will provide the credit-challenged with access to those same Uncarrier plans.

There are many catches, of course, and the confusion of the plan might turn off consumers before they get a chance to see how it can work for them. For starters, this is advertised as, and mostly effective as, a family plan. Individual users with bad credit are better off examining T-Mobile’s traditional prepaid plans, which are pretty close to the Simple Choice plans, but with no deposit.

Yes, a deposit is required for the no credit check plans. That starts at $60 for the first line, followed by a $40 deposit for the second line, and $20 each for the next two lines. A fifth line is also a $20 deposit, but that has to be a non-phone internet device (tablet, for example). The deposit is refundable, so presumably it covers you for potential non-payment.

The biggest loss here is the lack of automatic payments. Why T-Mobile would take that away I don’t understand. Companies absolutely love autobill features, and it’s pretty standard in prepaid. (Virgin Mobile offers a $5 per month discount if you sign up for automatic payments.) Maybe it will be available in the future, but for now it’s off the table.

Combine all that with the necessity of paying for a device in full, up front, and you have a not so attractive plan. There will be many customers, for sure, who will want an option like this. But given the ease of T-Mobile’s Simple Choice plans, it seems as though this appeals only to those who absolutely cannot pass a credit check. In which case, they’re stuck with what T-Mobile offers.

Via TmoNews.com.

The post T-Mobile To Announce “Simple Choice with no credit check” plans appeared first on MobileMoo.

by Joe Pawlikowski at June 26, 2013 12:30 PM

June 21, 2013

Beat on Broken Hearts in Springloaded’s Heart Beaten for Android

heart.beaten-android

Beat on Broken Hearts in Springloaded’s Heart Beaten for Android

Most people that have been in love have had their heart broken at some point, and it always sucks. The folks at Springloaded agree, and Heart Beaten is their retro tribute to lost love and heartbreak.

Android Games

by Adam Field at June 21, 2013 02:58 PM

Monoprice 8320 Earbuds Deliver at a Low Price

20130620_180008

Earbud headphones almost always suck. At least for me, and I know plenty of others who simply cannot stand them. I remember seeing everyone walking around with the signature white iPod earbuds as I walked around New York City in the mid-00s, wondering how they found them at all comfortable. For me they alway fell out, so I had to readjust them every 30 or so seconds while walking.

A recent trend in earbuds is including three different size buds with each pair. If the default buds are too big or too small, you can change it to one of the other included sizes. This is nice in many ways — I actually have a pair rigged up with two different sized buds on each ear — but I still can’t seem to find a pair that stays in my ear while walking.

Recently I connected with Troy Redington of FatWallet, who raved about the Monoprice 8320 earbuds. At first he went on about the sound quality, how they all but eliminated outside sound. Then he went on about the price, around $8, which just blows away the cheap earbud competition. When I asked about comfort he said he had dozens of earbuds lying around, but these fit far better. So sure, send me a pair for review.

I’m not going to say that these earbuds stayed in my ear like a dream. I’m not going to say that they’re superior to the Bose over-ear headphones I have. But I will say that in terms of earbuds, they are the most comfortable I’ve worn and they do deliver on sound quality. While they’re not great for spoken-word audio, such as podcasts, they do a real good job with all styles of music I tried.

As you can see in the picture atop this post, they’re not exactly normal looking earbuds. They have something of a hook on top, which is actually great. The hook helps the buds fit snugly in your ear. It takes a little twisting, but I got them to fit very well without moving too much. The cords also wrap around your ear, rather than hanging straight down. This probably makes the greatest difference. Since using these, I started wrapping all of my earbuds around my ear like that, and it honestly does make all of them more comfortable.

Yet what stood out to me about the Monoprice buds is that they’re made of nylon, rather than the cheap plasticky, rubbery substance you see with most headphones. It’s strange, because the buds are so cheap, yet the material feels anything but. They just feel more durable, which is nice. When I buy headphones under $10 I expect to replace them pretty quickly. These feel like they’re last for a while.

You can check out the FatWallet site to get these earbuds at an insanely cheap price. They do offer cash back if you register, which is nice. Again, it’s tough to do better for $8. It’s probably tough to do better for triple that.

The post Monoprice 8320 Earbuds Deliver at a Low Price appeared first on MobileMoo.

by Joe Pawlikowski at June 21, 2013 12:30 PM

June 20, 2013

Aquaria comes to Android via the Humble Bundle 6

Screenshot_2013-06-20-01-39-00

Aquaria comes to Android via the Humble Bundle 6

Aquaria is another awesome Indie that’s just arrived on Android courtesy of the Humble Android Bundle 6. It's the second Bundle game we've covered so far, and it's unlike any platformer you've ever played.

Android Games

by Adam Field at June 20, 2013 03:48 PM

January 14, 2013

The Software Millionaire Next Door

I've been reading "The Millionaire Next Door" and have so far found it to be a pleasant book with a good message: don't waste your money on silly things and appearance (fancy suits, fancy cars, expensive boats, etc...), save what you do earn consistently and constantly, invest wisely, and so on.   Wikipedia has a good summary:


http://en.wikipedia.org/wiki/The_Millionaire_Next_Door

One of the things I like about it is that it focuses on "ordinary" wealthy people, those with a million or more in the bank, but not the Warren Buffets or Bill Gates types that are extreme statistical outliers.  There are plenty of people in the US who have done well by themselves by slowly but surely putting together enough money to be financially independent, without, however, being in the spotlight.   As the book says, these are the kind of people who maybe own a local chain of businesses doing something fairly ordinary, but doing it well enough to succeed.  They may very well not live in a fancy house, nor drive an expensive car, or otherwise outwardly draw much attention to themselves.

The world of software does not revolve around "dressing for success" (you noticed?), but we do tend to focus on the "big winners".  Gates, Jobs, Zuckerberg, Larry & Sergey, Larry Ellison, and so on are the stars of the show.  Of course, the economics of software being what they are, instances of winner-take-all markets with one big fish and a lot of also-rans are not uncommon.   However, that is not the only story, and I think it'd be interesting to know more about those in our industry who have accumulated significant wealth, yet are not the guys with more money than they could possibly ever spend on things that aren't, say, country-sized chunks of real-estate.

I'm guessing they'd fall into these categories:

  • Highly paid workers who have consistently saved over the years.  There are examples in the aforementioned book about people with relatively low salaries who happened to be very frugal and invest well (and have had some luck in their investments too).  These people would probably tend to be older, as it takes a while to save up that kind of money, and since this industry is so young with so much turnover, I would not think there would be a lot of people out there like this, but who knows, maybe there are a bunch of IBMers with this kind of story.
  • Those who got in on the right IPO, like Google or Facebook or something like that.  These events not only generate billions for those at the top of the heap, but for the right person at the right place at the right time, can mean significant wealth even without being in the upper echelons of the company.  My suspicion is that this kind of IPO, where everyone cashes out, is not common enough to have a lot of people in this category, but who knows, maybe it adds up over the years.
  • Those who own or started software firms that do something that's not very visible, but nonetheless dominates some particular niche.  This is where I'd guess most of them would be, but I certainly have no data or even anecdotes to back this up.

It'd be very interesting to gather some actual data on this, although I'm not in a position to do so myself - I wouldn't even really know where to start. 

As I age, I think the third category has begun to seem appealing in many ways - I'm simply not cut out for the Big Company life, and I'm not interested in living in Silicon Valley and going "all in" on the latest startup - I already did that, and while it was fun and I don't regret it, it's not the kind of thing I'd want to do now that I'm married and have kids.   Incidentally, this more relaxed, under the radar approach is exactly what is expoused in one of my favorite books of the past few years, Start Small, Stay Small.

Edit : I finished reading the book and reviewed it here: http://davids-book-reviews.blogspot.com/

by David N. Welton at January 14, 2013 10:23 PM

December 22, 2012

InDrive: Custom Car Home 1.0

We are pleased to announce the launch of a new Android application that may appeal to everyone who uses their phone while driving.

InDrive is a GPS-enabled application that combines the standard car home functionality with a trip computer and Poweramp support. The app makes it very easy to launch your favorite applications, directly dial numbers, view your trip information and control music playback*. It will auto launch when placed in a compatible car dock. If you don’t have a physical car dock, InDrive provides an option to force the phone into car mode, in which it will override the Home button.

  

* The music screen is designed to work in conjunction with Poweramp. Without Poweramp installed, you will only be able to do very basic controls such as switching to the next song in the default Android music player. Support for other media players is not guaranteed.

Please download the app from Google Play and tell us what you think. Your feedback is much appreciated.

Related posts:

  1. TAT Home: 3D home screen
  2. Nexus One desktop dock now available
  3. Video: Flash 10.1 and a new home screen

by Jeff at December 22, 2012 01:59 PM

July 23, 2012

Transfer of data using Intents (Part 2)

Hi everyone!

In spite of trying hard, I couldn’t prevent the delay. I am again sorry for that. Let’s move on. In the last post, I introduced the concept of transfer of data between activities. I also described the code for declaring an Intent which could help us in accomplishing the task.

Now, it’s time to look at the code of SecondActivity.java, the second activity which will help us in adding new tasks to the list. As mentioned earlier, this activity will have an EditText to allow the user to input the task name and a Button, which when clicked, will take the user back to HelloWorldActivity.java and add the task to the List. The code for the click listener for this button looks as follows:

  1. String taskName = taskEdit.getText().toString();
  2. Intent intent = this.getIntent();
  3. intent.putExtra(“task”, taskName);
  4. setResult(RESULT_OK, intent);
  5. finish();

Here, taskEdit is an object of class EditText. The first line extracts the data input to the taskEdit, converts it into string and stores it in a variable. Second line is used to grab access to the intent which called this activity. The third line is the one which actually does the job of putting the data onto the intent. intent.putExtra function used in this line basically adds the information contained in the second parameter to the intent and the first parameter provides a way to access it. We will see the use of the first parameter in a greater detail later, when we will try to access this information in HelloWorldActivity.java. I hope that the fourth and fifth lines will be pretty easy to understand. If not, please refer to the last three posts on Intents.

The above code ensures that the clicking of the button takes us back to the initial activity with an intent which contains the name of the new task that is to be added to the list.

Clearly, the callback function described in Part 1 of this post will be used to access the information carried by the intent since this function will be automatically called when the control is given back to this activity via an intent. Straight away, let’s look at the code!

String extraData=data.getStringExtra(“task”);
taskText.append(extraData+”\n”);

I think it is self-explanatory. We are extracting the information from the variable data using the value of the first parameter of the function in Line 4 above, and saving it in a variable called extraData. The second line just appends this value to the list (referred by taskText).

In this way, we received the name of the task from a different activity and display it in our main activity. This provides a clean and user-friendly interface which is the basis of a useful app.

But here, we have not taken care of the situation when the user calls the intent to SecondActivity.java but wants to cancel it later. This is not perfect programming, though it can be dealt very easily. How?

In the next post, we will finish our discussion on intent and move on to explore some new concepts in Android App Development.

Till then, BYE!


by Nikhil Gupta at July 23, 2012 12:44 PM

July 11, 2012

Transfer of data using Intents (Part 1)

Hi all!

Last time, we had looked at the most basic communication which can be achieved among activities. It allowed us to switch between activities back and forth, which is an important concept used in almost all the android apps these days.

Moving on, it’s time to look at the data transfer using Intents. Consider the case of a simple Task application, in which a To-do list is shown in one activity while another activity performs the task of adding new items to the list. So, what’s happening here?

Basically, we need to create a new task in the second Activity and somehow transfer it to the first activity so that it could add it in the existing list. Note that we are not using any database. If we do so which is done most of the times, this app will be useless in itself. But, I am still discussing this app because I feel that it’s the best in order to understand the concept of transfer of data which you may need in various other apps.

In this post, I will not go through the layout or the entire code of the app. I may go through it later. But, I hope that you will be able to do so after going through the previous posts. As a hint, we will be using a TextView (to display the list) and a Button while making the first activity, while the second Activity will have an EditText and a Button.

Assuming that we have an EditText in the second Activity and when the user presses enter, the string in the EditText is captured in a string variable called NewTask, we need to simply tranfer the contents of NewTask to the first activity.

To achieve this, we need to call the intent when the button in pressed in the first activity in such a way that the Android platform knows that some data will be coming back to this activity. Continuing with the app from the previous post by replacing the startActivity(intent); by

startActivityForResult(intent, 1);

as a parameter acts as a unique code used to distinguish data received by this intent from the data received by other intents if more intents are used. Using the above functin, we have been able to call the intent, but we have not yet accessed the data which comes back with this intent.

To achieve this, we need to use a callback function which will called automatically when the intent returns. Let’s look at the code for this function:

public void onActivityResult(int requestCode,int resultCode,Intent data)
{
          super.onActivityResult(requestCode, resultCode, data);
          if(resultCode==RESULT_OK)
          {
                      //Code to extract the required information from the variable data
          }
}

In our case, requestCode is 1. resultCode is a variable which is set to value RESULT_OK if the intent was successfully handled. data is the variable which contains the data received from the other activity.

In the next post, we will look at the code to extract the information as well as the code for the second Activity which puts the information in the intent.

Till then, BYE!


by Nikhil Gupta at July 11, 2012 05:36 AM

July 04, 2012

Planet Android summer cleaning

Blogs come and blogs go, and nowhere is this more apparent than in a fast changing technology area such as Android. Today I removed 12 feeds from PlanetAndroid that haven't had updates in a while (some since 2010). If you feel your feed was removed in error, let me know.

In a reply to a recent post, one reader said they'd like to see fewer app reviews and news articles here, and more development diaries, tutorials, and community activities. What do you think? What are your most favorite and least favorite feeds? Let me know in the comments.

by Ed Burnette (noreply@blogger.com) at July 04, 2012 03:00 AM

June 14, 2012

New PlanetAndroid feed policy

Starting today I'll be removing most feeds that include embedded ads. Currently, I pay for PlanetAndroid's upkeep out of my own pocket, with no revenue coming in from ads or donations at all. When an ad appears in one of our feeds, it takes space away from the other articles and gets clicks based on the drawing power of the whole site, including feeds with no ads. That didn't seem fair.

I grandfathered in a handful of feeds for various reasons including new sites that need the extra juice that PlanetAndroid brings to help them get started. Some sites report that being listed on PlanetAndroid has doubled their traffic! If you feel your feed was unfairly removed, or if you make a new feed without the ads and want to re-join, just let me know. Thanks for your support.

by Ed Burnette (noreply@blogger.com) at June 14, 2012 12:48 AM

June 12, 2011

Android and openness

On Thursday I gave a talk at TriLUG. The slides I used are available but will probably be rather cryptic without my accompanying commentary.

Although I understand that Google has had to contend with both the open source zealots and the closed-everything carriers, upon looking at the trend, I find Google’s actions getting more disturbing. Just as Android seems to be coming into its own and Google should have more power than ever to twist arms, Google seems to be wimping out – or turning evil. I hope I’m wrong and they’re just waiting for the right time.

One thing I completely forgot to talk about is the abandoning of the Nexus One. When it came out, it was supposed to herald a new age of cross-carrier, stock-Android phones (with a built-in connection-sharing capability, no less). Only T-Mobile really picked it up – you could use it on AT&T but without 3G. Verizon and Sprint were supposed to be coming out with support for the same concept and just a different radio, but instead they released their own phones, with the usual modifications and constraints. So why did Google let them? They didn’t have to; the Skyhook case shows that Google can essentially pull their blessing from any phone for any reason. An Android phone without the Google apps isn’t going to be very attractive to consumers. Why didn’t Google force Verizon and Sprint to kowtow to the Nexus One before allowing them to release any more Android phones?


by Luke Meyer at June 12, 2011 12:59 AM

April 01, 2011

Is this thing on? ::feedback:: ouch…

Well – I don’t want to let the *entire* month of March go by without a post. I just haven’t done much with tech this month, though. It sucked. But evidently my absence has caused a surge in popularity, according to my stats. Less is more?

If I remember correctly – is Honeycomb the first version of Android where we actually saw a preview, got to fiddle with the SDK platform preview before it was actually embodied in a device? If so, better late than never, and let’s hope it means we’re on the way to seeing more of a community effort. Hey, it took a while for Red Hat to learn with Fedora, too, and they didn’t have voracious proprietary partners to contend with.

I have a meetup or two to arrange, but I hope I get some time to work further with ORMlite shortly.

Happy April Fools Day tomorrow!


by Luke Meyer at April 01, 2011 01:01 AM