Code Monkey home page Code Monkey logo

habitica-android's Introduction

Habitica for Android

Habitica is an open source habit building program which treats your life like a Role Playing Game. Level up as you succeed, lose HP as you fail, earn money to buy weapons and armor. This repository is related to the Android Native Application.

It's also on Google Play:

Get it on Google Play

Having the application installed is a good way to be notified of new releases. However, clicking "Watch" on this repository will allow GitHub to email you whenever we publish a release.

What's New

See the project's Releases page for a list of versions with their changelogs.

If you Watch this repository, GitHub will send you an email every time we publish an update.

Contributing

For an introduction to the technologies used and how the software is organized, refer to Contributing to Habitica - "Coders (Web & Mobile)" section.

Thank you very much to all contributors.

How mobile releases work

All major mobile releases are organized by Milestones labeled with the release number. The 'Help Wanted' is added to any issue we feel would be okay for a contributor to work on, so look for that tag first! We do our best to answer any questions contributors may have regarding issues marked with that tag. If an issue does not have the 'Help Wanted' tag, that means staff will handle it when we have the availability.

The mobile team consists of one developer and one designer for both Android and iOS. Because of this, we switch back and forth for releases. While we work on one platform, the other will be put on hold. This may result in a wait time for PRs to be reviewed or questions to be answered. Any PRs submitted while we're working on a different platform will be assigned to the next Milestone and we will review it when we come back!

Given that our team is stretched pretty thin, it can be difficult for us to take an active role in helping to troubleshoot how to fix issues, but we always do our best to help as much as possible :) With this in mind, when selecting issues to work on it may be best to pick up issues you already have a good idea how to handle and test. Thank you for putting in your time to help make Habitica the best it can be!

Steps for contributing to this repository:

  1. Fork it
  2. Create your feature branch: git checkout -b my-new-feature
  3. Commit your changes: git commit -am 'Add some feature'
  4. Push to the branch: git push origin my-new-feature
  5. Create new Pull Request
    • Don't forget to include your Habitica User ID, so that we can count your contribution towards your contributor tier

Code Style Guidelines

We use Kotlin and follow the code style based on the Android Kotlin Style Guide.

Build Instructions

Config Files

  1. Setup Habitica build config files by simply copying or renaming the example habitica files:

    habitica.properties.example to habitica.properties

    habitica.resources.example to habitica.resources

    You also need google-services.json. Download it from Firebase in the next step.

    Note: this is the default production habitica.properties file for habitica.com. If you want to use a local Habitica server, please modify the values in the properties file accordingly.

  2. Go to https://console.firebase.google.com

    a. Register/Login to Firebase. (You can use a Google account.)

    b. Create a new project called Habitica

    c. Create two apps in the project: com.habitrpg.android.habitica and com.habitrpg.android.habitica.debug

    d. Creating each app will generate a google-services.json file. Download the google-services.json file from the second app and put it in \Habitica\ and \wearos\

    You can skip the last part of the app creation wizards (where you run the app to verify installation).

  3. If using Android Studio, click Sync Project with Gradle Files. Update Android Studio if it asks you to update. Run Habitica.

habitica-android's People

Contributors

albroehm avatar alejandro-rios avatar anitawoodruff avatar carollanos avatar cvuorinen avatar danielgomezrico avatar danielkaparunakis avatar data5tream avatar dlew avatar franzejr avatar gryphonbot avatar hafizzle avatar hiroinaprotagonist avatar lelandhwu avatar magicmicky avatar michaldrabik avatar mike-the-monk avatar nakonana avatar nazarparuna avatar negue avatar nivl4 avatar phillipthelen avatar raitheofdureya avatar redbug312 avatar rewrite00 avatar saranlert avatar slothhut avatar snowcrasher avatar thehollidayinn avatar weblate 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  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  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

habitica-android's Issues

tag filters appear to change themselves and lose their purple colour

If I select a tag, its switch moves to the on position and it turns purple, as expected. However if I then scroll through my tag list and then scroll back to view the original tag, I'll notice that the tag has either become unselected or is still selected but not purple. At the same time, the scrolling has caused other tags to have their switches moved to the on position, although they are not coloured purple.

If I go back to the task list after scrolling through the tag list, the tag filter I had selected is not applied. If I select a tag and do not scroll through the tag list, then the tag filter is applied.

Basically, it looks like scrolling through the tag list will remove tag filters but will make some tag switches appear to be on.

Before replicating this bug, I scrolled through my tag list to ensure that they all started as unselected. I also checked my exported data to ensure that all tags had unique IDs. I tried to scroll very carefully to avoid accidentally turning any tags on or off. I have 25 tags.

App version 0.0.3 (3)
Nexus 4, Android 4.4.4, CyanogenMod 11 (full details)

Add feedback for login

In the current version of the app, if the user enters a bad password, it has any feedback related to that.
BTW, in the log we have:

11-17 23:14:31.975 22894-23106/com.habitrpg.android.habitica.debug D/Retrofit: {"err":"Uh-oh - your username or password is incorrect.\n- Make sure your username or email is typed correctly.\n- You may have signed up with Facebook, not email. Double-check by trying Facebook login.\n- If you forgot your password, click \"Forgot Password\"."}

It should probably have a kind of dialog or a feedback in somewhere?

Party Design

  • change text colors for health bar and class label
  • use avatar without the background and pets, so that it appears bigger

Task List Design

  • custom checkbox design for dailies and todos
  • more whitespace
  • updated colors from brandbook
  • completed and non-due dailies as gray

Reference Design Screen:

android_habits

android_dailies

android_todos

Crash - Saving Daily

  1. Open the app
  2. Go to Dailies
  3. Click on the text of a Daily
  4. Crashes
                                                                                     Process: com.habitrpg.android.habitica.debug, PID: 28249
                                                                                     android.database.sqlite.SQLiteConstraintException: Days.user_id may not be NULL (code 19)
                                                                                         at android.database.sqlite.SQLiteConnection.nativeExecuteForLastInsertedRowId(Native Method)
                                                                                         at android.database.sqlite.SQLiteConnection.executeForLastInsertedRowId(SQLiteConnection.java:782)
                                                                                         at android.database.sqlite.SQLiteSession.executeForLastInsertedRowId(SQLiteSession.java:788)
                                                                                         at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:86)
                                                                                         at com.raizlabs.android.dbflow.sql.SqlUtils.insert(SqlUtils.java:314)
                                                                                         at com.raizlabs.android.dbflow.sql.SqlUtils.save(SqlUtils.java:268)
                                                                                         at com.raizlabs.android.dbflow.structure.ModelAdapter.save(ModelAdapter.java:54)
                                                                                         at com.raizlabs.android.dbflow.structure.BaseModel.save(BaseModel.java:50)
                                                                                         at com.magicmicky.habitrpgwrapper.lib.models.tasks.Task$Adapter.bindToContentValues(Task$Adapter.java:216)
                                                                                         at com.magicmicky.habitrpgwrapper.lib.models.tasks.Task$Adapter.bindToContentValues(Task$Adapter.java:12)
                                                                                         at com.raizlabs.android.dbflow.sql.SqlUtils.update(SqlUtils.java:288)
                                                                                         at com.raizlabs.android.dbflow.sql.SqlUtils.save(SqlUtils.java:264)
                                                                                         at com.raizlabs.android.dbflow.structure.ModelAdapter.save(ModelAdapter.java:54)
                                                                                         at com.magicmicky.habitrpgwrapper.lib.models.tasks.Task$Adapter.save(Task$Adapter.java:524)
                                                                                         at com.magicmicky.habitrpgwrapper.lib.models.tasks.Task$Adapter.save(Task$Adapter.java:12)
                                                                                         at com.raizlabs.android.dbflow.structure.BaseModel.save(BaseModel.java:50)
                                                                                         at com.magicmicky.habitrpgwrapper.lib.models.tasks.Task.save(Task.java:364)
                                                                                         at com.habitrpg.android.habitica.callbacks.TaskUpdateCallback.success(TaskUpdateCallback.java:22)
                                                                                         at com.habitrpg.android.habitica.callbacks.TaskUpdateCallback.success(TaskUpdateCallback.java:18)
                                                                                         at retrofit.CallbackRunnable$1.run(CallbackRunnable.java:45)
                                                                                         at android.os.Handler.handleCallback(Handler.java:733)
                                                                                         at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                                         at android.os.Looper.loop(Looper.java:136)
                                                                                         at android.app.ActivityThread.main(ActivityThread.java:5001)
                                                                                         at java.lang.reflect.Method.invokeNative(Native Method)
                                                                                         at java.lang.reflect.Method.invoke(Method.java:515)
                                                                                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
                                                                                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
                                                                                         at dalvik.system.NativeStart.main(Native Method)

Offline warning

Display a warning/alert when the device doesn't have an internet connection letting the user know that some actions are unavailable.

Header Design

  • Add level, class, gold and gem display
  • Add health/exp/magic icons

android_habits

About Activity

  • Option for Feedback/Bug report
  • Link to website, twitter and wiki
  • "Leave a Review" link to play store
  • Link to source code

Level Up

Display a popup on level up

Reference screen from iOS app:

en-us-iphone6plus-1-levelup-portrait

Buy Gems

  • View to purchase gems
  • Prompt to purchase gems if trying to purchase customization without enough gems

No Tag Filtering

Once I select a Tag from the Drawer nothing happens.

I tried to debug it, but the app's code seems to work, I think the Wrapper doesn't read the tags from the API?

Ping @MagicMicky

Have common header with fragments

Currently the header gets created fro each navigation. This causes 1. unnecessary animations and 2. uses more resources than necessary.

My idea would be to have a single activity for the app, that has the header and then the content is loaded as fragments. Is this possible? Especially with the header scrolling away?

Daily reminder

Add option for a daily reminder, that displays a notification at a set time. (time should be configurable in settings)
Should default to on.

Class System

at level 10 allow users to choose a class.

  • display dialog at level 10 level up
  • if user chooses "decide later" show "Choose class" in place of "Use Skills" item in menu
  • display link to class wiki page

Drops

Display toast notification for a drop. If possible with the item icon.

Cannot delete tasks from app

I have entered a "test" habit that cannot be removed from the app. Deleting the habit via the website does not remove it from the mobile app.

Rewards design

  • design according to reference
  • when tapping gear, display details popup

android_rewards_modal

android_rewards

Skills

  • only visible after level 10 and when class selected
  • use group/general skills
  • Use skills on tasks

Note:
Skills are available through the /contents/ api

Login Design

  • Branding (Logo with Gryphon
  • remove login via tokens (confusing)

As a reference, the iOS login screen:

simulator screen shot 15 oct 2015 16 49 51

SettingsActivity

  • Show the values for each setting without having to navigate there
  • show the toolbar/drawer on it
  • Remove server config, contact and license notice
  • display account details (login name, email, local/facebook authentication, user ID, api key)
  • Logout

App loading time

Habitica loads up quickly, but after the health/xp/Mana bars load up, it takes a full 40 seconds before I can do anything with the app :( Can we speed it up? Otherwise, is a loading screen possible?

Death

Display a death screen and revive user.

Chat Design

The current design for tavern and party chat is a bit confusing, as posts are close to each other and it isn't exactly clear what belongs to which message.

Ideas:

  • add spacing and/or separator between posts
  • make box that currently only contains the message itself contain the metadata/buttons too

App should set timezoneOffset at signup and keep it updated

Just for reference so we don't forget it. When an user sign up using the app the timezoneOffset property should be set based on the user timezone and changed when the timezone changes (so checked at every startup) to keep it up to date and replicate the site behavior.

Sidebar Design

  • Add header
  • larger menu items with icons for categories

android_menu

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.