Mĭjur

I began a new project last month, called Mĭjur, an Android client for Imgur. There’s quite a few around already, including the official one, but they’re all of varying quality; some are actively working on improving, like the official app (which I still think is just a wrapper around the mobile website) and Imgur-Holo which made a leap in its considerations toward design in the last few weeks or so. My version will exist for several purposes:

  • learning
  • customised to my needs
  • progressing the ImageLoader library

Learning is the main plan – I started at Novoda three months ago, and while I know a little bit about most parts of Android, I’d rather have a solid understanding about the whole application development lifecycle and a solid understanding in several core areas of Android. For this reason, development on the project might be pretty slow – I want to do this right.

It’ll be customised to my requirements for the client. “You are not your user” doesn’t apply here – I use Imgur a lot, and while I recognise I’m not every user, it means I can make a minimum viable product which is suitable for me, and expand from there.

I’ve become quite attached to Novoda’s ImageLoader library. It’s not extremely pleasant to use, but that’s a minor issue – can just write a wrapper around the library itself. Writing an app which is essentially an image viewer will mean that I’ll be able to deep-dive into the ImageLoader code and learn about the library in such a way as to make it easier to contribute fixes and features.

MVP

For the minimum viable product, from the user perspective the client must:

  • load the (most-viral newest-first) public gallery in a grid
  • show the image (or album of images) with caption, description(s) and details (votes, views, source)
  • allow horizontal paging for next and previous image/album
  • look as though it’s finished

So far

I’ve been working on a “core” module – no Android code is allowed in here; this makes it really easy to run tests for this module in the JVM. The core module interacts with the Imgur API though currently only access publicly available resources (nothing that requires user authentication). All the API calls are done on a single thread; handling multi-threading will be the responsibility of the caller (in the “Android” module).

Currently, I’m working with Etsy’s AndroidStaggeredGrid to display the gallery in a grid. I have a list of GalleryItems each of which contains a URL to the image or album cover image it represents.

To do

I want to complete the MVP by mid/end of January. Given as how half of Imgur is animated GIFs, I need to implement animated GIF support in ImageLoader. The short term plan is:

  • load GalleryItems using AsyncTaskLoaders in a GridView
  • load the URLs as can be best loaded using ImageLoader, with an error image for failures, and default image for still-loading
  • port to AndroidStaggeredGrid
  • reassess

That’s what I’m working on today! :)

Leave a Reply

Your email address will not be published. Required fields are marked *

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>