Giter VIP home page Giter VIP logo

quillpad's Introduction

Gitter Android Build Release

Quillpad

Quillpad is fully free and open-source. It will never show you ads, ask you for unnecessary permissions or upload your notes anywhere without you knowing.

Take beautiful markdown notes whenever you feel inspired. Place them in notebooks and tag them accordingly. Stay organized by making task lists, set reminders and keep everything in one place by attaching related files.

Matrix

Join the conversation at Matrix or Gitter

Fork Info

Quillpad is a fork of an original app called Quillnote. The development stopped on the original app and PR backlogs were not cleared up. The community showed much interest in the app for continued development and so this fork was created. msoultanidis#177 msoultanidis#209

Get it on F-DroidGet it on Google Play

Features

With Quillpad, you can:

  • Take notes with Markdown support
  • Make task lists
  • Pin your favorite notes to the top
  • Hide notes you do not want others to see
  • Set reminders for events you do not want to miss
  • Add voice recordings and other file attachments
  • Group related notes in notebooks
  • Add tags to notes
  • Archive notes you want out of your way
  • Search through notes
  • Sync with Nextcloud (experimental, requires the Nextcloud Notes app installed on the Nextcloud server used for syncing)
  • Backup your notes to a zip file which you can restore at a later time
  • Toggle between Light and Dark mode
  • Choose between multiple color schemes

Migration

Backups from Notally can be converted into Quillpad compatible backups using this python script

Translations

Follow these steps to add a new translation:

  1. Create an account on Github or use your Github account if you have one that already exists.
  2. Create a new folder under quillpad/app/src/main/res named values-LANGCODE (e.g the Arabic folder will be named values-ar).
  3. Copy the file quillpad/app/src/main/res/values/strings.xml and put it in the values-LANGCODE folder.
  4. Now you can translate the strings.xml file in your language value folder.

Roadmap

The major features that are currently planned for this app are listed below in a series of milestones. In additional to these major features, there will be bug fixes and other enhancements will be added as we go.

Milestone 1.5 (General cloud syncing)

  • Store the notes as markdown files in the device.
  • If the folder chosen is under a cloud storage provider, Android will sync the markdown files with the respective cloud. For e.g. Google Drive, Dropbox and even Nextcloud. Syncing this way to the cloud does not deal with the Nextcloud API.
  • This will be the easiest way for users to sync the notes without having to self-host a NextCloud instance.
  • Update to the latest version of Android API and Dependency Libraries.

Milestone 1.6 (Jetpack Compose)

- Introduce Compose and Kotlin multiplatform. The main app views like the list of notes, edit view and the todo list view will be migrated to Compose.

The app uses the current XML based UI and a bunch of Android based libraries.

  • Migrating the UI to compose. These libraries are Android UI and would need to be replaced with Compose Multiplatform libraries. The entire UI will be re-written in Compose.
    • androidx.appcompat:appcompat
    • androidx.recyclerview:recyclerview
    • androidx.fragment:fragment-ktx
    • androidx.palette:palette-ktx
    • androidx.media:media
    • androidx.swiperefreshlayout:swiperefreshlayout
    • androidx.navigation:navigation-ui-ktx
  • Hilt + Dagger will need to be replaced with koin. Given that the dependency injection is already deeply integrated with the UI, this will be a major change.
  • Room Database will need to be replaced with SQLDelight. This is a major change as the entire database schema will need to be re-written. All the migrations will need to be re-written and tested if an earlier version of the app with Room DB be able to newer versions with SQLDelight.
  • Markwon will need to be replaced with Compose compatible Markdown library. Given that the app is a markdown editor, this is a major change and I don't know if there is a Compose and Multiplatform compatible markdown library.
  • Retrofit, Security-crypto, ExoPlayer, and other libraries will need to be replaced with Multiplatform compatible libraries.

Given the extensive changes required for the migration to Compose Multiplatform, it would be more practical to start a new project. This approach allows us to build the app with multiplatform compatibility in mind from the ground up, rather than trying to retrofit it into an existing Android-specific codebase.

Furthermore, this approach ensures that the current app remains stable and usable for users during the migration process. We can gradually port features from the old app to the new one.

Milestone 1.7 (Desktop App)

- Introduce desktop app. With the main views available in compose, try making a desktop app with help of Compose for desktop.

Milestone 1.8 (iOS App)

- Try an iOS version since the kotlin multiplatform code does the heavy lifting of notes management and syncing. Leverage the same storage API equivalent in iOS.

Milestone 2.0 (Encryption)

  • Now we have the ability to sync notes using cloud providers like Google Drive and Dropbox pCloud. The cloud providers may to go through the notes and may index them and may profile the user. This is the primary reason for the encryption feature. Which means, the notes won't be staying as markdown files, and cannot be edited by other text editors.
  • Encryption will be optional. The user can switch between having the notes encrypted vs stored them as plain markdown files.

quillpad's People

Contributors

arunk140 avatar comradekingu avatar danigarau avatar dankxylese avatar deltainsight avatar dreamylynn avatar emmanueldav avatar fabix avatar fischer-felix avatar githubcatw avatar holton-jiang avatar into-the-v0id avatar jermanuts avatar jsixface avatar locness3 avatar morris-alan avatar msoultanidis avatar mxc48 avatar nenpo avatar nofishonfriday avatar nwestie avatar pereorga avatar pr0gr8mm3r avatar random6150 avatar reysonk avatar thedidek avatar thejayduck avatar umitseyhan75 avatar urizev 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

quillpad's Issues

NullPointerException app crash

Exception java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference
at io.noties.markwon.ext.tables.TableRowSpan. (TableRowSpan.java)
at io.noties.markwon.ext.tables.TablePlugin$TableVisitor.visitRow (TablePlugin.java:7)
at io.noties.markwon.ext.tables.TablePlugin$TableVisitor$3.visit (TablePlugin.java:1)
at io.noties.markwon.MarkwonVisitorImpl.visit (MarkwonVisitorImpl.java)
at io.noties.markwon.MarkwonVisitorImpl.visit (MarkwonVisitorImpl.java)
at org.commonmark.node.CustomNode.accept (CustomNode.java)
at io.noties.markwon.MarkwonVisitorImpl.visitChildren (MarkwonVisitorImpl.java:3)
at io.noties.markwon.ext.tables.TablePlugin$TableVisitor.visitRow (TablePlugin.java:1)
at io.noties.markwon.ext.tables.TablePlugin$TableVisitor$2.visit (TablePlugin.java:1)
at io.noties.markwon.MarkwonVisitorImpl.visit (MarkwonVisitorImpl.java)
at io.noties.markwon.MarkwonVisitorImpl.visit (MarkwonVisitorImpl.java)
at org.commonmark.node.CustomNode.accept (CustomNode.java)
at io.noties.markwon.MarkwonVisitorImpl.visitChildren (MarkwonVisitorImpl.java:3)
at io.noties.markwon.ext.tables.TablePlugin$TableVisitor$5.visit (TablePlugin.java:4)
at io.noties.markwon.MarkwonVisitorImpl.visit (MarkwonVisitorImpl.java)
at io.noties.markwon.MarkwonVisitorImpl.visit (MarkwonVisitorImpl.java)
at org.commonmark.node.CustomBlock.accept (CustomBlock.java)
at io.noties.markwon.MarkwonVisitorImpl.visitChildren (MarkwonVisitorImpl.java:3)
at io.noties.markwon.MarkwonVisitorImpl.visit (MarkwonVisitorImpl.java)
at io.noties.markwon.MarkwonVisitorImpl.visit (MarkwonVisitorImpl.java)
at org.commonmark.node.Document.accept (Document.java)
at io.noties.markwon.MarkwonImpl.render (MarkwonImpl.java:3)
at org.qosp.notes.ui.editor.EditorFragment$observeData$1$1$7.run (EditorFragment.java:7)
at android.os.Handler.handleCallback (Handler.java:938)
at android.os.Handler.dispatchMessage (Handler.java:99)
at android.os.Looper.loopOnce (Looper.java:210)
at android.os.Looper.loop (Looper.java:299)
at android.app.ActivityThread.main (ActivityThread.java:8291)
at java.lang.reflect.Method.invoke (Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:556)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1045)

Save images in Markdown

Currently, whenever you add an image in the app, the note is just empty in Nextcloud.

It would be nice if any image from a quillnote would just be a Markdown image in the web interface.

The images in Nextcloud are stored in the user's home directory under ~/Notes/Notebook if applicable/ next to the actual Note.
I've had a look through the code and checked the notes API and it seems there is no way of uploading an image this way, so if I'm not wrong this means we would have to use a WebDAV connection.

Multiple Profiles

The ability to have multiple profiles/accounts.

This will allow you to have a personal account which could store notes on your local file system, a family account to store notes on a Nextcloud server, a work account to store notes on a Google Drive account, etc.

Tags sorting

@jsixface

I would like to suggest a new option in settings- sorting of tags in alphabetical order. Now tags are not sorted which means that when there are many tags the tags list becomes a mess. This may be implemented in two ways:

  • automatic sorting of tags in alphabetical order;
  • manual sorting of tags in alphabetical order;

Either way would be fine for me- I need an option for sorting tags alphabetically so that I would be able to find the needed tag easily.

Regards

Cyrillic bug

When I use cyrillic in my notes and create backup after restore there is a missing random letters. One random symbol replaced by "��". Now I tested it and lost one letter: "н". Just try to check with big texts:

Это было давно, это было давно,
В королевстве приморской земли:
Там жила и цвела та, что звалась всегда,
Называлася Аннабель-Ли,
Я любил, был любим, мы любили вдвоем,
Только этим мы жить и могли.

И, любовью дыша, были оба детьми
В королевстве приморской земли.
Но любили мы больше, чем любят в любви,—
Я и нежная Аннабель-Ли,
И, взирая на нас, серафимы небес
Той любви нам простить не могли.

Оттого и случилось когда-то давно,
В королевстве приморской земли,—
С неба ветер повеял холодный из туч,
Он повеял на Аннабель-Ли;
И родные толпой многознатной сошлись
И ее от меня унесли,
Чтоб навеки ее положить в саркофаг,
В королевстве приморской земли.

Половины такого блаженства узнать
Серафимы в раю не могли,—
Оттого и случилось (как ведомо всем
В королевстве приморской земли),—
Ветер ночью повеял холодный из туч
И убил мою Аннабель-Ли.

Но, любя, мы любили сильней и полней
Тех, что старости бремя несли,—
Тех, что мудростью нас превзошли,—
И ни ангелы неба, ни демоны тьмы,
Разлучить никогда не могли,
Не могли разлучить мою душу с душой
Обольстительной Аннабель-Ли.

И всегда луч луны навевает мне сны
О пленительной Аннабель-Ли:
И зажжется ль звезда, вижу очи всегда
Обольстительной Аннабель-Ли;
И в мерцаньи ночей я все с ней, я все с ней,
С незабвенной — с невестой — с любовью моей-
Рядом с ней распростерт я вдали,
В саркофаге приморской земли.

photo_2022-12-06_13-28-28

Option to lock app and/or notebook

Same as title, option to lock whole app and/or any notebook would be a great feature to have! This way we can have private notebooks (say diary).

Features request - multiple

Hi,

I'm really ecstatic to see a fork of QuillNote being worked on. The app has phenomenal potential and I can't wait for it to see it growing - thank you guys!

While I've read your notes and the planned roadmap, please consider the feature suggestion list below which was originally posted on QuillNote's GitHub page.

  1. Implement font size options (larger).
  2. Improve search capability, where (a) the number of found matches is indicated, (b) found matches are highlighted in text, and (c) they are scrollable across all matching notes.
  3. Automatic bullet & numbering lists (apply bullet formatting or numbering to all selected text, as well as when jumping to a new row - similar to Enter on keyboard in a Word document).
  4. Option in settings to no longer jump to the end of note when editing, but rather keep the cursor at current indexing location (very annoying in large notes to have to come back and search AGAIN, for location intended to be edited).
  5. Allow notebooks to be manually (alphabetical) re-sorted in left menu as well as in settings.
  6. Implement selective encryption, or at least password / biometric protection to allow for each note to be protected independently.
  7. Add a condensed quick view mode to allow as many notes as possible to be viewed at a glance.
  8. Add option in settings for app start-up screen: (1) All Notebooks - overview showing all created notebooks, (2) Specific Notebook, or (3) All notes (current view).

Thanks a lot!

Animations are jittery

Whenever I open or close a note, the animation being player is quite jittery.
For more info:

Model: Realme 2 pro
Processor: Qualcomm Snapdradon 660
OS: Android 13 arrow OS
RAM: 4 GB

Automated github build for APK release

Use github actions to generate a signed APK.
It gets triggered when master branch gets a tag and publishes the release notes and APK to the release page.

Enhance search capability **HIGH PRIORITY**

Searching for a word or using wildcards should generate the following results:

  1. A count of matches (throughout all notes, or individual ones),
  2. Found matches should be highlighted and,
  3. Found matches should be scrollable (back & forth) across all matching notes.
  4. Allow searching with wildcards (*)

Extend the search capability also to individual notes, not just globally.

Many apps come with this enhanced search capability, so examples can be found everywhere.

Add material You

There is currently only dark and light theme but no Material You theme

Option to change colour of multiple selected notes and assign colour to a notebook

Right now we can only change the colour of individual notes by opening each one. It is not possible to select multiple notes and change their colour at the same time. I want to request the option to change the colour of multiple selected notes.

Also I want to request feature to assign colours to notebooks. So that whenever a new note is created and added to the notebook, that note will automatically get the colour of the notebook.

Navbar not colored correctly on some devices

On some devices (including my LG V30, Android 9), the navbar does not get themed by themes.xml.
This can be worked around by programmatically setting the colour of the navbar.
(the navigation buttons are well visible on white in real live, they only fade a bit after a while of not touching the display in order to prevent burn-in)

without workaround with workaround
Gray
Screenshot_20221118-225413 Screenshot_20221118-225653
Screenshot_20221118-225534 Screenshot_20221118-225657
Black
Screenshot_20221118-225435 Screenshot_20221118-225734
Screenshot_20221118-225516 Screenshot_20221118-225739
White
Screenshot_20221118-225446 Screenshot_20221118-225713
Screenshot_20221118-225506 Screenshot_20221118-225722

Issue for #14

F-Droid release

Get the app and included in the F-Droid repo and made available for installation through f-droid.

Migrate from Dagger + Hilt to Koin

To help with the multi-platform effort, the libraries to be used in the common module needs to be kotlin multiplatform compatible. Dagger does not support KMM yet, Koin does.

Add list entry when pressing enter

If currently adding a list, add a - automatically when pressing enter to go the next line.

When enter is pressed again without typing anything, remove the added list prefix and make that a normal line.

Fix up IDs

The new fork should reflect the new name of the app and the package IDs. These are necessary to release the app as a different app in the app stores.

Note History

An option to have note history with the ability to view and restore the note to an older version.

With the option to only store X numbers of older versions of the notes or store older versions of note for X amount of days.

Consistency in selecting single and multiple notes - UX improvement

Selecting a single note prompt bottom drawer with option to select more.
Screenshot_20221125-230637

When you select "Select more..", you can select multiple notes and to get similar options as bottom drawer you have to press overflow menu button.

Screenshot_20221125-230651

I think, for consistency, you can remove bottom drawer as it doesn't serve any purpose. You can do everything with single overflow menu.
Also, more than often I accidentally tapped on options given in suddenly popped bottom drawer whenever I select any notes (and intend to select more).

Custom language

Hi, Quillpad definitely lacks of a possibility to set a custom app language, different than your system's one. If it'd be too hard, I'd really like to see a checkmark to set the app language to English in the settings.

Update README

To reflect the right app name and provide attribution to msoultanidis/quillnote.
Update the links to F-Droid and Google play.

Why fork Quillnote?

Why did you make this fork? What does it do more or differently than the original app? Why not improve the original app?

Repeated Reminders

Reminders that can repeat unlimited times, u til a certain date or repeat X number of times.

Compact notes list

@jsixface

First, thanks for maintaining and developing this project.

I would like to suggest a simple enhancement- a new option in settings for showing only notes titles in notes list, without showing part of the notes text and notes tags. I mean something like that:

Screenshot_20221130-164146

I prefer a compact notes list as shown in the screenshot above. With an option for compact notes list (only notes titles shown) there would be less scrolling when the notes list grows bigger.

Regards

Font size options + enhanced Bold

  1. Implement font size options (larger).
  2. Enhanced Bold formatting. The current Bold formatting can barely be discerned from the regular.

Do NOT jump to the end of note when editing (option)

Implement an option in settings to no longer jump to the end of a note when editing, but rather keep the cursor at current indexing location (very annoying in large notes to have to come back and search AGAIN, for location intended to be edited).

Feature request - make it easier to see text and image at same time

Screenshot_20221201-161233

Here is a screenshot for context of what I mean - I would like to use the app to transcribe the text in the image, but this is tricky at the moment. I think these would be improvements:

  • Do not show the file name - takes up too much screen space
  • Allow scrolling on longer images to adjust the position being shown while typing
  • Move the eye symbol at the bottom right to the top or only show it when the keyboard is not open. At the moment it partly covers the note being typed

New app logo

We need a new version of app logo preferably similar to the original Quillnote icon. This will differentiate the app in the Google play and F-Droid app stores from Quillnote.

A newer base color instead of blue is also welcome.

Need:

  • Logo
  • App icon
  • Store banner with the new logo

App Crash around Preferences

Exception java.util.ConcurrentModificationException:
at java.util.ArrayList$Itr.next (ArrayList.java:860)
at androidx.security.crypto.EncryptedSharedPreferences$Editor.notifyListeners (EncryptedSharedPreferences.java)
at androidx.security.crypto.EncryptedSharedPreferences$Editor.commit (EncryptedSharedPreferences.java)
at com.tfcporciuncula.flow.StringPreference$setAndCommit$2.invokeSuspend (StringPreference.java:4)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith (BaseContinuationImpl.java:4)
at kotlinx.coroutines.DispatchedTask.run (DispatchedTask.java)
at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely (CoroutineScheduler.java)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask (CoroutineScheduler.java:5)

"Open with" dialog

Please add Quillpad icon to the open with dialog for .md files

Screenshot_2022-12-01-00-22-38-042_android.jpg

Thanks

Widgets - Feature Request

Will it have Android widgets ? I would like to put favorite notes as widgets. Just like Nextcloud notes or Google Keep.

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.