Giter VIP home page Giter VIP logo

opentoday's Introduction

Public archive

This project is no longer in development.

.

.

.

.

.

.

.

OpenToday

Language: [English | Русский]

Android application for the organization of life, pro notes and reminder.

license

GitHub release (latest SemVer) IzzyOnDroid

Using

Each tile in the app is called an Item. There are different types of Items, some inherit others, adding new functionality. So for example, the 'Daily checkmark' is inherited from the 'Checkmark' item.

  • Text - use it for simple text notes
  • CheckBox - in connection with Group, use it as a grocery list to the store or a to-do list for today
  • Group - there are no restrictions in depth! Create your own hierarchy of storing items
  • Filter Group - use it to indicate current birthdays, tasks for today, various schedules (for example, school) or something more, up to the second (very useful thing)

and others...

Screenshots

Even more ideas for use can come to your mind after viewing the screenshots

1 2 About app Calendar
1 2

Toolbar

Toolbar is an important element of the interface. It is located at the bottom of the screen

About important functions in brief:

Add item - Toolbar->Items click (+) next to the desired item type.

--

Move items Swipe the desired item to the right, click the 'selected' checkbox, then open the desired location, open the 'selection' tab in the toolbar and select the desired action there

--

Import/Export Share your items with your friends, to export you have to click on the corresponding button in the 'selection' toolbar menu. All selected items are exported to the clipboard

To import, use the received text in the File tab in the toolbar

--

Technical information

Check more documentation in "/docs" directory

Contribute

I will be glad if you make a Pull Request with a new feature or bug fix.

See "/docs/CONTRIBUTING.md"

Kotlin or Java?

I know Java well, and I'm just learning Kotlin.

When developing, I act according to this logic:

If I write a Backend (working with items, etc.) then Java

If I write Frontend (GUI), then Kotlin is preferable

Items tree (pedigree)

Item (implements Unique) - (minimal height, background color)
|
| Text - (text, text color)
  |
  | DebugTickCounter - (debug item...)
  | LongText - (long text, long text color)
  | Group (implements ContainerItem, ItemsStorage) - (items)
  | FilterGroup (implements ContainerItem, ItemsStorage) - (items)
  | CycleList (implements ContainerItem, ItemsStorage) - (items)
  | Counter - (current value, step)
  | MathGame - (primitive operations (+-*/))
  | Checkbox - (is checked)
     |
     | DayRepeatableCheckbox - (start value for 'is checked' in Checkbox, latest regenerate date)

Todo/Ideas:

  • Settings: ItemsStorage to add quick notes from the notification exactly there
  • Toolbar->Selection -> SelectALL & DeselectALL
  • Settings -> minimize paddings (left, right, bottom, top)
  • Replace checkboxItem to text item & add 'modules' to item and add Module 'checkbox' (what?)

Make a pull request -> you will be added to contributors.json and also I will create the contributors screen in the application

Save

Data saved in item_data.json, and item_data.gz (bak file is stored in /data/data/item_data.gz.bak)

Saving in other Thread (TabsManager.SaveThread)

Data loaded from .gz, if the error is from .json

Other files

  • color_history.json - color history for ColorPickerDialog's in ItemEditor
  • instanceId - UUID of your application instance. Used for sending crash reports anonymously (if telemetry enabled by user)
  • version - contains information about the version of the data in this folder in JSON format. The most important value is "data_version". It is used by new versions when updating to run DataFixer
  • settings.json - Contains the application settings

Import/Export

Structure

--OPENTODAY-IMPORT-START--
<version>
<data>
--OPENTODAY-IMPORT-END--
  • Version 0: is a regular json converted to base64
  • Version 1: is a json converted to base64 but previously passed through GZip compression
  • Version 2: is a json converted to base64 but previously passed through GZip compression (added permissions)
  • Version 3: is a json converted to base64 but previously passed through GZip compression (added "dataVersion" for fixes in new versions by DataFixer)

Tree of code (not full) (maybe outdated)

com.fazziclay.opentoday
|
| app - app logic
  | App - main application class (used by AndroidManifest.xml)
  |
  | items
  | |
  | | item - (items)
  | | |
  | | | ItemsRegistry - contain all items (Item.class, "Item", EmportExportTool, howToCreateEmpty, howToCopy, R.string.itemDisplayName)
  | | | Item - the father of all aitems (see items tree in README.md)
  | | | TextItem
  | | | CheckboxItem
  | | | DayRepeatableCheckboxItem
  | | | CounterItem
  | | | GroupItem
  | | | FilterGroupItem
  | | | CycleList
  | | | DebugTickCounterItem - item contain (int: counter) and add +1 every tick
  | | | ItemController - controller on item (set when attach to itemsStorage)
  | | | ItemsUtils - utils for item managment
  | |
  | | callback - (callbacks)
  | | |
  | |
  | | notification - (item notifications)
  | | |
  | |
  | | tab - (tabs)
  | | | TabsManager - manager of items
  | |
  | | selection - ...
  | | | SelectionManager
  | | | Selection - selection of item (contain item and item itemsStorage)
  | | 
  | | 
  | | CurrentItemStorage - item storage for one item (CycleListItem...)
  | | ItemsStorage - items storage interface
  | | SimpleItemsStorage - simple implementation of ItemsStorage
  | | ImportWrapper - for import/export
  | 
  | datafixer
  | | DataFixer - it is launched at the very beginning of the app to correct the data of the old version (if the application has been updated)
  |             used 'version' file in '.../Android/data/<...>/files/'
  | SettingsManager - manager of application settings (use in ui...SettingsFragment)
  |             used 'settings.json' file
  | UpdateChecker - checking for app updates
                use api in 'https://fazziclay.github.io/api/project_3/...'
                cached result if update not-available for '...cache/latest_update_check' (file contain unix MILLISeconds)
| gui - ui logic
  | activity
  | |
  | | MainActivity - (see UI tree in README.md)
  |
  | UI - ui utils
  |
| util - there are many different utilities...
| (the rest is for convenience and it doesn't matter)

UI Tree

| MainActivity - mainActivity (current date of top, notifications)
| |
| | MainRootFragment - container of fragments, ItemsTabIncludeFragment by default
| | |
| | | ItemsTabIncludeFragment - (contain Toolbar, Tabs+ViewPager2: ItemsEditorRootFragment)
| | | |
| | | | ItemsEditorRootFragment - Root for ItemsStorage tree
| | | | |
| | | | | ItemsEditorFragment - Contain ItemsStorage drawer
| | | | | | ItemTextEditorFragment - comfortable editor for text & text formatting
| | |
| | | AboutFragment - about this app
| | | | ChangelogFragment - CHANGELOG file viewer
| | | SettingsFragment - settings of app (see app.settings.SettingsManager)
| | | ImportFragment - import from text
| | | DeleteItemsFragment - delete items (calls delete() for all provided items)

opentoday's People

Contributors

williamphysics 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

Watchers

 avatar  avatar  avatar  avatar  avatar

opentoday's Issues

App crashes instantly

Hi, I found your app on fdroid and I wanted to give it a try. Sadly it crashes every time I open it.

Clearing cashe or force stopping doesn't change anything.

Some information:
OS: Android 12, crDroid 8.9 (latest security patch)
Device: Redmi Note 10 Pro

Logs:

=== OpenToday Crash ===
CrashID: 93d1b34c-7b6c-4351-aa18-c9435083349b
Application: (ru.fazziclay.opentoday)
 * VERSION_BUILD: 52
 * VERSION_NAME: 0.9.3 (build 52)
 * DATA_VERSION: 5
 * DEBUG: false
 * DEBUG_TICK_NOTIFICATION: false
 * DEBUG_MAIN_ACTIVITY_START_SLEEP: 0
 * DEBUG_APP_START_SLEEP: 0
 * DEBUG_MAIN_ACTIVITY: null
 * DEBUG_TEST_EXCEPTION_ONCREATE_MAINACTIVITY: false

Device:
 * SDK_INT: 32
 * BASE_OS: 

Time:
* Formatted: 2022.10.03 18:47:50
* Millis: 1664815670153
* Nano: 2100527712790

Thread: Thread[main,5,main]
Throwable:
java.lang.RuntimeException: Unable to start activity ComponentInfo{ru.fazziclay.opentoday/ru.fazziclay.opentoday.ui.activity.MainActivity}: java.lang.IllegalArgumentException: ru.fazziclay.opentoday: Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.
Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if some functionality depends on the PendingIntent being mutable, e.g. if it needs to be used with inline replies or bubbles.
	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3662)
	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3819)
	at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:102)
	at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
	at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2242)
	at android.os.Handler.dispatchMessage(Handler.java:106)
	at android.os.Looper.loopOnce(Looper.java:201)
	at android.os.Looper.loop(Looper.java:288)
	at android.app.ActivityThread.main(ActivityThread.java:7833)
	at java.lang.reflect.Method.invoke(Native Method)
	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
Caused by: java.lang.IllegalArgumentException: ru.fazziclay.opentoday: Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.
Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if some functionality depends on the PendingIntent being mutable, e.g. if it needs to be used with inline replies or bubbles.
	at android.app.PendingIntent.checkFlags(PendingIntent.java:375)
	at android.app.PendingIntent.getBroadcastAsUser(PendingIntent.java:645)
	at android.app.PendingIntent.getBroadcast(PendingIntent.java:632)
	at ru.fazziclay.opentoday.app.receiver.QuickNoteReceiver.sendQuickNoteNotification(QuickNoteReceiver.java:23)
	at ru.fazziclay.opentoday.ui.activity.MainActivity.sendQuickNoteNotify(MainActivity.java:71)
	at ru.fazziclay.opentoday.ui.activity.MainActivity.onCreate(MainActivity.java:67)
	at android.app.Activity.performCreate(Activity.java:8057)
	at android.app.Activity.performCreate(Activity.java:8037)
	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1347)
	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3643)
	... 12 more

--- OpenToday Crash ---

Fix theme bug

apply a theme to every activity, not just in PreMainActivity

Settings (swipe actions) aren't saved.

I noticed that settings such as swipe actions aren't saved.

Device information:
OS: Android 12, crDroid 8.9
Device: Redmi Note 10 Pro

Below is a gif showing the issue:
recording

Allow setting default item type

I would like to be able to change default item type from text to checkbox, so that I would be able to use Type here input at the bottom of the app instead of going into Item -> Checkbox everytime I want to add something.

Screenshot_20230207-171237_OpenToday
Make type of this ^ changeable

Adding to Groups/Lists instead adds to the top layer

Expected: pressing (+) > new item appears inside the open group.
Actual behaviour: pressing (+) > Item appears at top level.

Extra info: The blue (!) Does add to the opened group but does not open the options of the new entry...

Allow setting custom save location (for synchronization purposes)

Hi (me again),
I've been thinking, that it would be nice to have an ability to set a custom location for app's data (something like: /storage/emulated/0/OpenToday). Than it would be possible to synchronise this directory with external program (like syncthing).
This would allow for having synchronised notes on multiple devices without too much work.

missing ItemsStorage context

Sometimes the application thinks that the root is open now, or even another tab, although exactly what is open on the screen, this does not prevent the application from creating items where it thinks, and not where the user actually is.

fastlane changelog much too long

Fastlane changelogs are limited to 500 chars. Your latest one has more than 2k, and thus will have its content trucated at char 500 (looking weird). Please take care to stay within the limits 😉 For Reference, here's my Fastlane Cheat Sheet. Thanks!

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.