Code Monkey home page Code Monkey logo

atarashii's Introduction

Atarashii! - A Modern MAL for Android

The goal of Atarashii! is to be a modern Material-themed client for the MyAnimeList.net & AniList.co website. It supports Android 4.0 and newer. While still in active development, it already is fully featured and polished. You can download it from the Google Play store.

Atarashii! is BSD licensed and contributions are welcome.

Project Goals

The goal of Atarashii! is to be the best designed and overall best application for MAL and AL on Android devices. This is acomplished with a user-first approach, with a focus on design. The application must be fast, easy to use, and feel and look like it's part of Android. None of these things should mean a tradeoff with functionality; the design and functionality should enhance and inform each other.

In short, the developers are users too. We're making something we would like to use, as users.

Third-Party Components

Atarashii! makes use of several third-party components and services:

atarashii's People

Contributors

animasa avatar apkawa avatar cyrieu avatar d-sko avatar karbonitekream avatar kcchouette avatar ratan12 avatar riotopsys avatar srvrguy avatar xiprox avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

atarashii's Issues

Crash in AsyncTask Database

This error occurs occasionally on launching the application on Android 2.x. I'm currently not sure of the cause.

E/AndroidRuntime(  365): FATAL EXCEPTION: AsyncTask #2
E/AndroidRuntime(  365): java.lang.RuntimeException: An error occured while executing doInBackground()
E/AndroidRuntime(  365):        at android.os.AsyncTask$3.done(AsyncTask.java:200)
E/AndroidRuntime(  365):        at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
E/AndroidRuntime(  365):        at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
E/AndroidRuntime(  365):        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
E/AndroidRuntime(  365):        at java.util.concurrent.FutureTask.run(FutureTask.java:137)
E/AndroidRuntime(  365):        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
E/AndroidRuntime(  365):        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
E/AndroidRuntime(  365):        at java.lang.Thread.run(Thread.java:1096)
E/AndroidRuntime(  365): Caused by: java.lang.IllegalStateException: get field slot from row 0 col -1 failed
E/AndroidRuntime(  365):        at android.database.CursorWindow.getLong_native(Native Method)
E/AndroidRuntime(  365):        at android.database.CursorWindow.getInt(CursorWindow.java:434)
E/AndroidRuntime(  365):        at android.database.AbstractWindowedCursor.getInt(AbstractWindowedCursor.java:93)
E/AndroidRuntime(  365):        at net.somethingdreadful.MAL.MALManager.getAnimeRecordsFromDB(MALManager.java:450)
E/AndroidRuntime(  365):        at net.somethingdreadful.MAL.ItemGridFragment$getAnimeRecordsTask.doInBackground(ItemGridFragment.java:210)
E/AndroidRuntime(  365):        at net.somethingdreadful.MAL.ItemGridFragment$getAnimeRecordsTask.doInBackground(ItemGridFragment.java:1)
E/AndroidRuntime(  365):        at android.os.AsyncTask$2.call(AsyncTask.java:185)
E/AndroidRuntime(  365):        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
E/AndroidRuntime(  365):        ... 4 more

List Style Setting

Someone requested somewhere (I think it was in a direct email to me) that we add back the traditional list rather than the beautiful grid of covers that we have (why?). Honestly, I can see this being pretty easy. If the option for this is enabled, we can just set the columns of grid view to 1 (effectively list view), and load an alternate layout, which I think would just be kind of the bottom part of the covers, and use a kind of zoom crop fill on the image to fill the horizontal space behind the panel.

Effectively the traditional list view, but retain our modern styling. May or may not have this ready for 1.1, so not assigning the milestone.

Text Color in Alert Dialogs on Older Android Devices

On older Android devices, the text on alert dialogs is the same or similar color as the background color of the dialog, making it impossible to read. See the attached image for an example. This was taken from the emulator running 2.3.

This should be checked on devices that skin Android with lighter colors, such as HTC Sense to see if it has similar issues.

device-2013-01-03-211859

Better handling of adding and marking series as completed

I am rather tempted to say that when user adds an anime to his list using Atarashii the Start Date field in MAL should be automagically set to today. Same would apply for people marking series as Completed, the End Date should be also set to today by default. Any thoughts on viablity of this change?

Crash on startup

Log:

java.lang.RuntimeException: Unable to start activity ComponentInfo{net.somethingdreadful.MAL.beta/net.somethingdreadful.MAL.Home}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2182)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2207)
at android.app.ActivityThread.access$600(ActivityThread.java:139)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1205)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4899)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:558)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at net.somethingdreadful.MAL.Home.onCreate(Home.java:73)
at android.app.Activity.performCreate(Activity.java:5008)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2136)
... 11 more

Last I checked, it's pointing to something that shouldn't be able to throw an NPE, but I probably just missed something in my not so awake state last night.

Cover Panel counter wonked on Xoom/Tablets

What the title says. I pulled out my Xoom to see the grid scaling, which works great btw, and it looks like the number in the cover panels is not where it should be, and only shows max one digit instead of two. Not sure if this affects other tablets or if it's isolated to my Xoom. The Xoom is running 4.0.4 for reference. Will investigate.

Navigation Drawer Support

Atarashii! should sport the navigation drawer as a means of navigating around the app to new sections.

For example, the current section of the app would be "My List". We can then add sections such as "Next Season", "Popular", and so on.

But this issue is for adding the navigation drawer itself and related framework we might need.

Crash in getDetailsTask.onPostExecute

When running the application, if you go into the details page for an item which does not have a stored synopsis, the application will attempt to download the synopsis details.

If you back out of the details view before the synopsis is loaded into the card, the application will crash. This can be reproduced consistently.

The easiest solution might be to check if the card still exists, and only attempt a display update if it does.

Relevant trace:

E/AndroidRuntime(  320): FATAL EXCEPTION: main
E/AndroidRuntime(  320): java.lang.NullPointerException
E/AndroidRuntime(  320):        at net.somethingdreadful.MAL.DetailView$getDetailsTask.onPostExecute(DetailView.java:519)
E/AndroidRuntime(  320):        at net.somethingdreadful.MAL.DetailView$getDetailsTask.onPostExecute(DetailView.java:1)
E/AndroidRuntime(  320):        at android.os.AsyncTask.finish(AsyncTask.java:417)
E/AndroidRuntime(  320):        at android.os.AsyncTask.access$300(AsyncTask.java:127)
E/AndroidRuntime(  320):        at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429)
E/AndroidRuntime(  320):        at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(  320):        at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime(  320):        at android.app.ActivityThread.main(ActivityThread.java:4627)
E/AndroidRuntime(  320):        at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(  320):        at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime(  320):        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
E/AndroidRuntime(  320):        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
E/AndroidRuntime(  320):        at dalvik.system.NativeStart.main(Native Method)
W/ActivityManager(   59):   Force finishing activity net.somethingdreadful.MAL/.Home

Empty list crash+data reload

what the title says, happened to me with my empty "on hold" list fix it fix it fix it

basically just leaving myself a note so I don't forget

Update ActionBarSherlock and android-numberpicker

There have been several updates to our third-party libraries since they were added into the project. Our software should be updated to use the newer versions and the submodules will need to be updated to import the newer code for the build.

Show Volumes Read on Manga List

Currently, the application only shows chapters in the overview for manga. It should also show the volume progress if the title has more than one volume.

Details Card Layout

Though it's nearly done, dropping it here as a reminder to myself.

Left to do as of opening:
-Better layout for "Progress"
-Rating bar for score, possibly as part of "MAL Stats"
-Stylize the dialogs to look like the cards

Crash on Initial Sync

When doing an initial load of the application with the new Manga support, the application crashes:

E/AndroidRuntime( 2122): FATAL EXCEPTION: AsyncTask #1
E/AndroidRuntime( 2122): java.lang.RuntimeException: An error occured while executing doInBackground()
E/AndroidRuntime( 2122):        at android.os.AsyncTask$3.done(AsyncTask.java:278)
E/AndroidRuntime( 2122):        at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
E/AndroidRuntime( 2122):        at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
E/AndroidRuntime( 2122):        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
E/AndroidRuntime( 2122):        at java.util.concurrent.FutureTask.run(FutureTask.java:137)
E/AndroidRuntime( 2122):        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
E/AndroidRuntime( 2122):        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
E/AndroidRuntime( 2122):        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
E/AndroidRuntime( 2122):        at java.lang.Thread.run(Thread.java:856)
E/AndroidRuntime( 2122): Caused by: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
E/AndroidRuntime( 2122):        at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:4039)
E/AndroidRuntime( 2122):        at android.view.ViewRootImpl.invalidateChild(ViewRootImpl.java:722)
E/AndroidRuntime( 2122):        at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:771)
E/AndroidRuntime( 2122):        at android.view.ViewGroup.invalidateChild(ViewGroup.java:4005)
E/AndroidRuntime( 2122):        at android.view.View.invalidate(View.java:8576)
E/AndroidRuntime( 2122):        at android.view.View.invalidate(View.java:8527)
E/AndroidRuntime( 2122):        at android.widget.ImageView.setImageDrawable(ImageView.java:364)
E/AndroidRuntime( 2122):        at net.somethingdreadful.MAL.ImageDownloader$DecodeFileTask.doInBackground(ImageDownloader.java:297)
E/AndroidRuntime( 2122):        at net.somethingdreadful.MAL.ImageDownloader$DecodeFileTask.doInBackground(ImageDownloader.java:1)
E/AndroidRuntime( 2122):        at android.os.AsyncTask$2.call(AsyncTask.java:264)
E/AndroidRuntime( 2122):        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
E/AndroidRuntime( 2122):        ... 5 more

Confirmed on both the mangasupport and working branch since the first merge.

Logout Error - No Such Method getDatabaseName

During some earlier work, getDatabaseName() was removed from from MALSqlHelper. This causes a crash on logout, as the logout process uses this method to get the name of the database.

Add Delete Item Feature

In the details page, we should add the ability to delete an item from the MAL list. Ideally, it would be an item on the action bar.

Also, it should have a confirmation dialog to confirm as it's a destructive operation.

Write a summary for yourself

As of 2089e25 there is now a more detailed contributor screen. Sure it's a stopgap for now, but we can reuse the summary blurb in a less temporary screen later. So: I tentatively filled in the contributor_name_Motokochan and contributor_summary_Motokochan strings for you, but feel free to change them to whatever you'd like, as I would like you to be credited in the app as you would like to be.

Also the new setup of name/summary for each contributor means if more people contribute in the future (like the person that is working on search) it's easy to just add a new credit for them.

Logout Feature

The application should allow you to "log out", clearing the database and going back to the login screen. Potentially, this could be placed in the settings area, not the menu. If it will be in the menu, it should have a confirmation dialog to prevent accidental use.

Gracefully Handle Connectivity Issues

As a future enhancement, we should look into better handling of connectivity issues. Namely, what do we do when there is an issue with getting a connection and what do we do when the unofficial API is having issues/returning bad data?

My thought is to make all changes go into a "queue" before running the action against the API. This will allow us to break the network connection handling into its own area where we can do things like not updating if there is no data connection, or retaining changes until we get a good response back from the API.

As a bonus, handling changes in this way would allow a better "offline mode" for the application. Of course, cover art wouldn't be downloaded in an offline mode, but it is what it is and we can always offer a selection in settings/preferences to force-download all missing cover art at once.

Manga Support

Atarashii needs to build out manga support so as to become a good daily-driver application for updates at least.

This issue comprises several tasks:

  • Building out a MangaRecord class
  • Making the display grid generic
  • Making the detail view generic
  • If impossible to make things full generic, look to use inheritance so as to share as much code as possible between the items

Software License

With more people wanting to contribute, it is important to pick a license for the software.

I'm fine with nearly anything, the key is how much control is desired over the code. The field is wide open from the "must keep the source open" of the GPL to the much more loose BSD and Apache licenses.

Keep in mind that choosing a license also affects what third-party components can be used within the source as some licenses can conflict. I don't expect a lot of problems, but it is something to consider.

Also keep in mind that without copyright assignment, changing the license to the software gets more difficult as the number of contributors climb as every contributor must agree to the change or you'll need to strip out their contributions to make the change.

This issue is to discuss licensing and hopefully reach a conclusion on the best license for the project to use.

Allow Episode Display to Handle More Than Two Digits

As noted by this comment and this other comment, the application is only displaying the first two digits of three digit episode counts. This should be adjusted to handle really epic long series in some manner.

It might be worth reducing the size of the count on the tiles. The focus should be on the title of the series anyway, and using smaller text would allow for very large numbers if needed.

AccountManager, SyncAdapter and ContentProvider

For release 1.3, I think it would be an excellent addition to add the ability to have the app perform scheduled syncs. We could implement that ourselves, but Android already has an excellent framework for this exact purpose.

It'll probably require quite a bit of retooling, as the SyncAdapter relies on the ContentProvider and can't exist without using the AccountManager. Quite a bit of work to get it going, but I think the end results would be worth it. As a bonus, Atarashii! would show up under Accounts & Sync in the settings, which is neat.

Deleting entry on MAL does not reflect within the app

According to a review that was left, deleting an entry on the MAL site will not reflect within the app, even after a sync.

This behaviour does in fact make sense, as we don't currently check against the database to see if anything is missing, only if the entries don't exist or have been updated.

Going to fix this for 1.2. Maybe I'll even push a hotfix for 1.1 with this fix.

NPE in Login under Android < 4

A NPE occurs on first login under Android versions below 4.0. Following is a logcat of the issue, including output from Atarashii!. Log was taken on an HTC Glacier on Android 2.3.4.

Re-launching the application and running a sync will make the application work.

V/MALX    ( 2714): Grid Cell Size for anime: 160x228
V/MALX    ( 2714): getAnimeRecordsFromDB() has been invoked for list watching
W/MALX    ( 2714): mManager is null. Attempting to re-create the object.
V/MALX    ( 2714): Successfully re-created mManager
V/MALX    ( 2714): Grid Cell Size for manga: 160x228
V/MALX    ( 2714): getMangaRecordsFromDB() has been invoked for list reading
E/AndroidRuntime( 2714): FATAL EXCEPTION: AsyncTask #3
E/AndroidRuntime( 2714): java.lang.RuntimeException: An error occured while executing doInBackground()
E/AndroidRuntime( 2714):        at android.os.AsyncTask$3.done(AsyncTask.java:200)
E/AndroidRuntime( 2714):        at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
E/AndroidRuntime( 2714):        at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
E/AndroidRuntime( 2714):        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
E/AndroidRuntime( 2714):        at java.util.concurrent.FutureTask.run(FutureTask.java:138)
E/AndroidRuntime( 2714):        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
E/AndroidRuntime( 2714):        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
E/AndroidRuntime( 2714):        at java.lang.Thread.run(Thread.java:1027)
E/AndroidRuntime( 2714): Caused by: java.lang.NullPointerException
E/AndroidRuntime( 2714):        at net.somethingdreadful.MAL.PrefManager.<init>(PrefManager.java:17)
E/AndroidRuntime( 2714):        at net.somethingdreadful.MAL.api.MALApi.<init>(MALApi.java:27)
E/AndroidRuntime( 2714):        at net.somethingdreadful.MAL.MALManager.<init>(MALManager.java:45)
E/AndroidRuntime( 2714):        at net.somethingdreadful.MAL.ItemGridFragment$getMangaRecordsTask.doInBackground(ItemGridFragment.java:255)
E/AndroidRuntime( 2714):        at net.somethingdreadful.MAL.ItemGridFragment$getMangaRecordsTask.doInBackground(ItemGridFragment.java:1)
E/AndroidRuntime( 2714):        at android.os.AsyncTask$2.call(AsyncTask.java:185)
E/AndroidRuntime( 2714):        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
E/AndroidRuntime( 2714):        ... 4 more

android.graphics.Bitmap.getByteCount in API < 12

The image downloader has a bug in API versions less than 12. It uses getByteCount, which didn't appear until recently. This can cause crashes and weird behavior, especially on first login. This should be fixed by a conditional that can do an equivalent process.

Logcat Output:

I/dalvikvm(  656): Could not find method android.graphics.Bitmap.getByteCount, referenced from method net.somethingdreadful.MAL.ImageDownloader$1.sizeOf
W/dalvikvm(  656): VFY: unable to resolve virtual method 412: Landroid/graphics/Bitmap;.getByteCount ()I
D/dalvikvm(  656): VFY: replacing opcode 0x6e at 0x000e
D/dalvikvm(  656): VFY: dead code 0x0011-0011 in Lnet/somethingdreadful/MAL/ImageDownloader$1;.sizeOf (Ljava/lang/String;Landroid/graphics/Bitmap;)I
W/dalvikvm(  656): threadid=12: thread exiting with uncaught exception (group=0x400207e8)
I/Process (  656): Sending signal. PID: 656 SIG: 9
I/ActivityManager(  144): Process net.somethingdreadful.MAL (pid 656) has died.
I/WindowManager(  144): WIN DEATH: Window{43ea4d00 net.somethingdreadful.MAL/net.somethingdreadful.MAL.Home paused=false}
I/WindowManager(  144): WIN DEATH: Window{43f8e990 net.somethingdreadful.MAL/net.somethingdreadful.MAL.Home paused=false}
I/WindowManager(  144): WIN DEATH: Window{43f127c0 Toast paused=false}
I/WindowManager(  144): WIN DEATH: Window{43f0a478 net.somethingdreadful.MAL/net.somethingdreadful.MAL.FirstTimeInit paused=false}
I/WindowManager(  144): WIN DEATH: Window{43eccb30 Toast paused=false}
I/ActivityManager(  144): Start proc net.somethingdreadful.MAL for activity net.somethingdreadful.MAL/.FirstTimeInit: pid=688 uid=10053 gids={3003, 1015}
I/UsageStats(  144): Unexpected resume of net.somethingdreadful.MAL while already resumed in net.somethingdreadful.MAL

Use Picasso for Cover Image Handling

Another cool library from Square, Picasso. It handles image downloading and a ton of other stuff like recycling of the adapter, placeholder and error images, image manipulation, and memory and disk caching of images.

This might be a very good solution for the cover art downloading in our application.

Crash on First Launch

On first launch of application on Google TV (Logitech Revue in this case), the application crashes after login with an NPE. The application can be re-launched and a sync done to get the application running. This currently isn't a huge priority as GoogleTV isn't a major consumer of the application, plus the error can be worked around.

I'll look into this as I get time.

Relevant log:

FATAL EXCEPTION: AsyncTask #3
java.lang.RuntimeException: An error occured while executing doInBackground()
       at android.os.AsyncTask$3.done(AsyncTask.java:266)
       at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
       at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
       at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
       at java.util.concurrent.FutureTask.run(FutureTask.java:137)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1081)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:574)
       at java.lang.Thread.run(Thread.java:1020)
Caused by: java.lang.NullPointerException
       at net.somethingdreadful.MAL.ItemGridFragment$getMangaRecordsTask.doInBackground(ItemGridFragment.java:285)
       at net.somethingdreadful.MAL.ItemGridFragment$getMangaRecordsTask.doInBackground(ItemGridFragment.java:1)
       at android.os.AsyncTask$2.call(AsyncTask.java:252)
       at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
       ... 4 more

Too much stuff in the action bar

I think that there is a little too much stuff in the action bar on a Nexus 7. Isn't there a way to make the tabs appear under the action bar (like in the screenshots in the Play Store)?

Attached is a screenshot so you can see what I mean.

Screenshot_2013-04-05-13-35-25

Migrate to "Queue" Style Update System

To better handle being offline, either that being not connected or the API having issues, the application should move to a "queue" style system where changes can be stored and then run through once connectivity is restored.

Rename Application

I highly suggest renaming the application, at least externally. "Dreadful" isn't exactly a positive word in English, and "DreadfulMAL" seems, to me at least, to sound more like a really bad application for MAL than something that's actually pretty awesome. Maybe it could be shortened to "DMAL."

Out of Memory on really long lists

I just had a report of the app crashing due to being out of memory. I have a pretty good idea how to fix this though. (reuse bitmaps instead of creating new ones)

On another note, I never thought I'd actually have to use these issue report things. They're handy.

Activities Not Setting as Root

Some activities, when called, such as the "first time init" are not being set as the root activity, even when called with flags that should allow this. Because of this situation, you can use the back action to return to the calling activity, which creates a NPE.

This needs to be investigated, as there are some NPEs being reported that seem to be from users doing this exact thing. With the new logout feature, this could get to be more of an issue.

Get/Display more Info

We should get and display more info from the API, such as alternative names, etc.

Basically:
-Upgrade the database to take more information
-Store and display more information as new cards

Proper "About" View

Instead of squishing credits and about into into the settings area, there should be a nice "About" view.

Intent Based Updates (+3rd party hooks)

At some unspecified time in the future, I'd like for Atarashii! to move to intent based updates. What that means is that we only need our AsyncTasks in one place, thus cleaner code, and that third party apps that request the permissions can leverage Atarashii! as an easy way to work with MAL.

What this entails, as far as I know is:
-BroadcastReceiver to receive and hand off intents to a..
-Service that will process the request specified by the intent
-And some sort of communications back to the app that fired the intent, possibly a broadcast message for the app to receive

So with this, third party apps, for example a manga reader, would be able to fire an intent saying "I've read a chapter", and have Atarashii! handle it, updating both itself and MAL. Also our internal code will be cleaner and more abstracted, which is always good.

Make Icons Consistent

Currently on older versions of Android, some of the icons in the action bar are using the old 2.3 icon style while some of the icons in the menu are using the flat Holo style. The former situation looks bad but the later causes the icons to blend into the menu background.

The icons should be fixed so that the correct style is used in the correct place on all supported versions of Android.

Cover size broken on 2.3

The new cover height calculation code introduced in 9dfeabe appears to be broken on Android 2.3. My best guess is a miscalculation between dp and px units.

Restore compatibility with Android < 3.0

Mentioned this issue in the bottom of c99d6ce, opening as issue in the issue tracker to remember.

Basically, we need a suitable workaround as Cursor.getType(index) doesn't exist prior to Honeycomb. I briefly looked into it, and getting around it doesn't seem like a simple fix.

Set "Completed" date when completing an item

Maybe I missed this, but it looks like the app doesn't set the "completed" date when completing a series, although it does set the status correctly.

When marking the item as completed in the application by using the various progress update dialogs (+1 quick popup, edit progress dialog, mark completed), the application should also mark the item as completed on the current date.

Support Android 2.x devices

Just something that's been on the back of my mind, but with the ActionBarSherlock extension to the support library, supporting older devices might actually be doable.

I think the only feature that wouldn't carry over would be cover actions, due to Popup Menu not being introduced to the api until 3.x. A simple SDK version check at runtime though and we could just gracefully disable it if it isn't available.

So yeah, I'll probably get around to doing this eventually, not setting a milestone yet.

Progress Dialog Buttons

Instead of relying on a "back" operation to close the progress dialog and set to the value in the picker, it should have a proper set of Cancel/Set buttons. The default action on backing out of the dialog should be to ignore any change by the user.

Wrong list names

In the app there are different names for the same list. These lists are affected:

  • Watching (sometimes called In Progress)
  • Plan To Watch (mostly called Planned)
  • On Hold (sometimes called On-Hold)

I suggest you use the same names as on MyAnimelist (the ones I mentioned first), but do what you want :D At least use the same name everywhere.
Screenshot_2013-04-05-13-35-50
Screenshot_2013-04-05-13-36-24
Screenshot_2013-04-05-13-36-34
Screenshot_2013-04-05-13-36-41

Use Retrofit for API Communication

Browsing around, I found a few Android applications using a library called Retrofit. It looks pretty neat and handles a lot of the parsing for us. This library might be worth using for the benefit it brings in cleaner code.

Save Item Rating

Adjusting the rating for the anime/manga item should trigger a save action.

Consider making the rating adjustment a dialog, as it's way too easy to inadvertently change the rating when scrolling the details. (Implement as radio buttons or dropdown with descriptive text?)

Search/Add Support

I'm really bad at writing summaries, so I'll keep it short. The gist of this would be:

 -Possibly a search action view thing in the ActionBar, the expandable one
 -New search results
 -New menu xml with basically just a "Add to List" button to be used in the DetailView if the record isn't on a list
 -And of course, the backing code to make this work.

Hopefully some of the existing net code in place can be reused to leverage MAL's search api.

NPE on tile display for Android 3 and below (was: NPE in Login under Android 2.x)

NOTE: As of about the fifth comment below, this bug became more focused on a secondary issue, not the primary reported here. The secondary issue was that certain record items were returning null values, causing crashes in Android 3 and below.

The original issue as documented below is now being tracked on issue #54.


Using the latest code in the repository for 1.3b1, there is a NPE when doing an initial login on Android 2.2:

E/AndroidRuntime(  742): FATAL EXCEPTION: AsyncTask #3
E/AndroidRuntime(  742): java.lang.RuntimeException: An error occured while executing doInBackground()
E/AndroidRuntime(  742):        at android.os.AsyncTask$3.done(AsyncTask.java:200)
E/AndroidRuntime(  742):        at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
E/AndroidRuntime(  742):        at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
E/AndroidRuntime(  742):        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
E/AndroidRuntime(  742):        at java.util.concurrent.FutureTask.run(FutureTask.java:137)
E/AndroidRuntime(  742):        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
E/AndroidRuntime(  742):        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
E/AndroidRuntime(  742):        at java.lang.Thread.run(Thread.java:1096)
E/AndroidRuntime(  742): Caused by: java.lang.NullPointerException
E/AndroidRuntime(  742):        at net.somethingdreadful.MAL.PrefManager.<init>(PrefManager.java:17)
E/AndroidRuntime(  742):        at net.somethingdreadful.MAL.api.MALApi.<init>(MALApi.java:44)
E/AndroidRuntime(  742):        at net.somethingdreadful.MAL.MALManager.<init>(MALManager.java:45)
E/AndroidRuntime(  742):        at net.somethingdreadful.MAL.ItemGridFragment$getMangaRecordsTask.doInBackground(ItemGridFragment.java:255)
E/AndroidRuntime(  742):        at net.somethingdreadful.MAL.ItemGridFragment$getMangaRecordsTask.doInBackground(ItemGridFragment.java:1)
E/AndroidRuntime(  742):        at android.os.AsyncTask$2.call(AsyncTask.java:185)
E/AndroidRuntime(  742):        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
E/AndroidRuntime(  742):        ... 4 more

This will need to be investigated further.

Edit: Confirmed this also affects Android 2.3.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.