Git Product home page Git Product logo

presently's Introduction

Presently: A Gratitude Journal

CircleCI

A journal to write what you're thankful for. Contributions welcome!

Google Play Posting

Philosophy

Presently is built on the idea that gratitude journaling should be free, private, and available to all. It will never have ads, never have a premium version, and will always be open source. Entries are kept on device and can be exported to CSV.

Presently is also built with the best Android practices in mind. It follows MVVM to separate concerns and ensure we write testable code. We require 80%+ code coverage and rely on both unit tests and instrumented tests (with a heavier weight towards unit tests). Instrumented tests are run on Firebase Test Lab, crashes are reported through Crashlytics, and analytics are reported with Firebase Analytics.

We support several languages currently and are always looking for translators to help us! We support French, Spanish, Italian, German, Finnish, Arabic, Dutch, Polish, Portuguese, Slovakian, Croatian, Romanian, Turkish, Russian, Afrikaans.

Tech Stack [So far...]

  • MVVM with architecture components
    • ViewModel
    • Room (with FTS and Paging v3)
  • Mavericks
  • CircleCI
  • Jacoco coverage reports (integrated with CI)
  • Firebase Crashlytics Crash Reporting
  • Dagger + Hilt
  • Espresso
  • Firebase Test Lab
  • WorkManager
  • Dropbox Java SDK

Design

The app currently has over 40 themes to choose from! Here's a few:

Contributions

Contributions are welcome! Please fork the repo and make a PR. Forked PRs will build the app and run unit tests but will not run instrumented tests. A repo owner will run those tests as they require secret keys. To make the app build locally you'll need to add a Dropbox Key (or any string if you don't want to test Dropbox backup features) to the local.properties file. Like so: DROPBOX_KEY=myDropboxKey.

Dependency Graph

Presently is a small and simple app, did it need modularizing? Probably not. But Presently also servees as a playground for me for trying out new technologies and keeping up with best practices. Here's how we've broken down the app so far.

presently's People

Contributors

abstractuser avatar alisonthemonster avatar anettleship avatar cascella avatar cypressious avatar danilofreire avatar esimonov avatar georgcantor avatar ilinum avatar jayeclark avatar jonathanaspeling avatar kplich avatar kristy-hu avatar lalon avatar pal03377 avatar peakvalleytech avatar polbins avatar presently-bot avatar rakeshprasanna avatar seabdulbasit avatar surkhojb avatar tdrhq avatar wwcheng02 avatar xhadie avatar yennefer avatar ytwb 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

presently's Issues

Hilt + Code Coverage Issues

As mentioned in this issue: google/dagger#1982

A useful note for anyone having trouble with this using Android Gradle Plugin (AGP) 4.1. In order to get any unit test code coverage with JaCoCo you need to testCoverageEnabled false so that AGP's compiled classes for use on device are not used instead of the local instrumented classes.

That explains why I had to programmatically set the testCoverageEnabled to true in my FTL tests and false in my unit tests to generate code coverage properly. See #211

There's an issue tracker here: https://issuetracker.google.com/issues/171125857
They discuss some workarounds, but I'm happy with mine for now. I'll keep this issue open as a reminder to check up on the issue tracker.

Add ViewPager to Entry view

Many users have requested to be able to swipe between entries on the Entry view. If we implement a view pager we can make this happen!

Swiping the view should move you to the previous or next entry on the device.

Feature request: add NextCloud support

As the app tends to protect privacy it would be great to have an alternative to dropbox. I think NextCloud backup would fill this need as it can be a self hosted cloud.

Danger is unreliable on CircleCI

Danger recommends to have CircleCI only run when PRs are opened and not on every pushed commit. Danger works well with this turned on, but changes made for forked PRs had to turn off this feature.

Danger can work using some environment vars in Circle but its unreliable as documented here:
danger/danger#204

Add "Select Language" Option to Settings

Now, the app language is the same as the system language but it does not always work well.

For example, I have a system language set to English, but write on messenger and Presently mostly in Russian.

I would be grateful if you add the "Select Language" option to the Settings menu, so the app would be is in the same language of the content.

Non saved text is lost when cellphone is rotated

I am running Presently v 1.22.1 on Android 13.

Whenever I rotate my phone while editing text, it is cleared and I have to start all over again.
I quickly checked with AndroidStudio on an Emulator but could not reproduce the bug .

Does anybody have the same issue?

Add option to show day of the week

Some users have requested that we also show the day of the week on the timeline view. We should add this to the settings screen under "Appearance" and have it be an optional feature. We also need to ensure that it is properly localized.

Add ability to share the app itself

REQUIREMENTS

  • A new item in settings for sharing Presently
  • Opens the system share sheet and shares the play store listing
  • Title: "Share Presently"
  • Description: "Enjoying Presently? Share the app with your friends and family
  • Translated to all locales

Import Dialog Text not visible in Emilia Theme

The text is not visible in the Import Dialog in Emilia Theme.

This has the same root cause as this issue - Emilia is the only theme that has tonal opposites for Entry Text and Timeline Text, so where an app dialogue uses e.g. EntryText Colours for the Text Body, but TimelineBackground Colours for the Text Background, other themes display correctly, but Emilia does not.

The fix implemented in this pull request does not fix the Import CSV bug.

212567634-7d71374f-a452-46ef-a128-6ce5ea092b20

Feature Suggestion: Ability to Change "Today I am grateful for"

Been loving this app and using it since last November. Thanks for your work and all that you do!

One feature I'd like to see is the option to change the "I am grateful for" header that displays at the top of every entry. My entries usually start with "I am grateful I got to...", so if that was already the header it would really help me type down my thoughts more quickly. I think a lot of people can benefit from this feature since different people have different writing styles. Some even use this app for purposes other than gratitude journaling.

If this is difficult to implement (idk cuz I don't code), it's also fine if you could offer "pre-written" headers that we can choose from, instead of the option for us to type down our own customized headers.

Here's the header I'm talking about:
ASD

Parser \n\n behaviour as demoed in RealCsvParserTest

Looking at RealCsvParserTest the parser code deals with new lines being imported in entryContent.

However, here is an example of it not working:

csv file:
2021-01-25,I am grateful I got new kitchen gas & firewood which made me feel responsible\n\nI am grateful I had tuna melt in applegreen which made me feel it was something different\n\nI am grateful I figured out regex replace to change to lowercase which made me feel i'm learning\n\nI am grateful I signed up for Real Python for 1 month which made me feel i'm taking a positive step\n\nI am grateful I learned what a lamba function was in Python which made me feel why did I wait so long

When I import this it does not parse the \n's correctly:

image

Prepopulate contact form with device information

When a user contacts us through the in app feedback feature we often have to ask them for basic information about their situation. This would prevent this extra step and allow us to help users faster.

REQUIREMENTS

  • Add the following text to the end of the email body
    • Device: insert device model here
    • OS Version: insert version of Android here
    • App Version: insert current app version here

How can I contribute?

Hello there! I just saw the app popping up in the Android Store recommendations and gave it a go. I really love the sleek theme and design of the app! Gonna be using this app rather frequently. Just wondering how else can a fan help with contribution to this app ? :)

DateUtilTest fails on machine with German locale

When I run DateUtilTest on my machine with the locale set to German, I get the following failures:

junit.framework.ComparisonFailure: 
Expected :March
Actual   :März
<Click to see difference>


	at junit.framework.Assert.assertEquals(Assert.java:100)
	at junit.framework.Assert.assertEquals(Assert.java:107)
	at junit.framework.TestCase.assertEquals(TestCase.java:269)
	at journal.gratitude.com.gratitudejournal.ui.util.DateUtilTest.getMonthStringFromDateObject(DateUtilTest.kt:68)
junit.framework.ComparisonFailure: 
Expected :November 11, 2011
Actual   :11. November 2011
<Click to see difference>


	at junit.framework.Assert.assertEquals(Assert.java:100)
	at junit.framework.Assert.assertEquals(Assert.java:107)
	at junit.framework.TestCase.assertEquals(TestCase.java:269)
	at journal.gratitude.com.gratitudejournal.ui.util.DateUtilTest.localDateToLongString(DateUtilTest.kt:33)

The tests should be independent of the locale of the machine.

Regular backups

Great app! I was wondering how the backup process could be automated. I agree that this shouldn't be activated by default but it would be great to store an (encrypted?) version of the user input on Dropbox / Google Drive. Maybe similar to how WhatsApp does it.

I doesn't have to be implemented in the app itself, any solution would be fine to me.

Background color of dialogs should match theme

When dialogs are shown to the user, they are always the default, white. I suggest that they should be updated to be consistent with the current theme. The white is jarring especially when the theme is a dark theme and the time of day is night.

Update Request

Hi man. Your app is just great but I think it would be way better with the latest cutting-edge technologies. namely, compose! I would be honored to help you rewrite the whole UI using the world's most modern UI android kit ever created .. Jetpack Compose! Tell me what you think :)

Option to not ellipsize entries

I would prefer to be able to read the full entry from the list view. Since other people may prefer the ellipsized text, I suggest to add an option.

I'd like to work on this feature myself.

Some inconsistent German strings

Some of the German translation used is written in an informal tone, and some is written formally.

(https://github.com/alisonthemonster/Presently/blob/develop/app/src/main/res/values-de/strings.xml)

For example, "Bist du sicher, dass du Einträge aus einer Datei importieren möchtest?" is informal (using du/dein/dir), but "Ihre Einträge werden in Dropbox gesichert" is formal (using Sie/Ihr/Ihre).

As a native speaker myself, I would suggest changing the translation strings to use the informal tone as it seems more fitting for something that personal like a gratitude app. Also, the main strings in the app (what_are_you_thankful_for, what_were_you_thankful_for, ...) already use informal tone anyways and the changes would only affect some strings in the settings this way.

I also found some strings that replaced the app name "Presently", but should not (like "Teile Derzeit" instead of "Teile Presently").

Don't notify if I've already made an entry for the day?

Thank you for this beautiful and heart-warming app!

I try to remember to write something every day, but I also have notifications turned on as a reminder, set to pop up in the afternoon. I think if I've already written something for today, you could skip reminding me?

Milestones stop appearing after 600 days

When I originally wrote the milestones I took the manual/lazy route and added all the possible milestones here.

Now users are reporting they aren't seeing milestones after 600 days, we really should update this logic so its not hard coded! We want to show milestones for 5, 10, and then every 25 days after that.

Rotating screen discards unsaved text

Steps to reproduce.

  • Write and save an entry for a day
  • go back to menu and open again that day
  • write some more text
  • rotate the screen
  • find that your additional text has been gone

I'm using Android 10, app 1.5.4.

Milestone text being cut off for some users

I've had a few reports of the "10 days" milestone being cut off. Here are the reports:

From a GM1903 (OnePlus 7):
Screen Shot 2021-03-09 at 7 36 43 PM

I had another report (without a screenshot) that it was happening on a FP3 device.

I can't reproduce it on any of my test devices unfortunately.

Add random button to Calendar

Users have requested the option to jump to a random entry they have written

REQUIREMENTS

  • Text in the bottom right corner of the calendar dialog that reads, "Random"
  • "Random" translated to all locales
  • Random button jumps to a random entry screen

Add setting to hide quotes

A user requested to be able to hide the quotes in the settings screen. Should be pretty straight forward to add a new shared preference and toggle the visibility!

Use Android Paging 3.0 Library

Currently the search recycler view is on Paging v2 and the timeline recycler view is not paged at all.

It would be great to migrate to v3 and to finally get Timeline paged.

Add close button to Milestone Dialog

Users have requested a close or x button be added to the milestone dialog.

REQUIREMENTS:

  • An x button in the top right corner that closes the milestone dialog
  • The x button should be an SVG
  • X button should have a content description of "close"

Redundant use of shared prefrences

PreferanceManager.getDefaultSharedPreferences is used in 9 files.
Proposed solution: refactor as a kotlin extension in the main activity.

So for example
val sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context)
val showDayOfWeek = sharedPrefs?.getBoolean(DAY_OF_WEEK, false) ?: false

would turn into
getBooleanPref
getStringPref
etc.

with those being extensions in ContainerActivity.

Update screenshots in Readme

The screenshots in the root README are very out of date! They could do with an update on a newer device as well.

Publish to F-Droid

It would be great if this app could be published to F-Droid and would allow new users and privacy conscious users to use this app. Possibly blockers may be the Google/Firebase dependencies, which cannot be included in an F-Droid app. Maybe they could be removed?
If the requirements of F-Droid cannot be met, an alternative would be to add it to @IzzySoft's IzzyOnDroid repo.

Move from Jcenter to MavenCentral

Jfrog announced they will no longer be maintaining their Maven repo, we have until February 1st 2022 to move away from this. I started this process but there's an issue with Kotlin.

We have a lot of time to make this change but I'll open the issue so we can keep track of the Kotlin issue.

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.