Open source note-taking application for Android

Overview

icon

Omni-Notes

License CI workflow CodeQL Workflow Sonarcloud Coverage Sonarcloud Maintainability Crowdin GitHub release

Note taking open-source application aimed to have both a simple interface but keeping smart behavior.

The project was inspired by the absence of such applications compatible with old phones and old versions of Android. It aims to provide an attractive look and follow the most recent design guidelines of the Google operating system.

Follow the developments and post your comments and advice on Facebook Community at https://www.facebook.com/OmniNotes

Help to keep translations updated is always welcome, if you want give a hand checkout the translation project on https://translate.omninotes.app.

Get it on F-Droid Get it on Google Play

If you're willing to help speeding up developments please also opt-in for the Alpha version of the app following continuous delivery principles:

Get it on Google Play

Features

Currently the following functions are implemented:

  • Material Design interface *Basic add, modify, archive, trash and delete notes actions
  • Share, merge and search notes
  • Image, audio and generic file attachments
  • Manage your notes using tags and categories
  • To-do list
  • Sketch-note mode
  • Notes shortcut on home screen
  • Export/import notes to backup
  • Google Now integration: just tell "write a note" followed by the content
  • Multiple widgets, DashClock extension, Android 4.2 lockscreen compatibility
  • Multilanguage: 30+ languages supported: https://crowdin.com/project/omni-notes

Further developments will include:

  • Notes sychronization
  • Web interface to manage notes (stub project)

You can find a complete changelog inside the application settings menu!

If you need some help on how to use the application you'll find everything you need in the Help Online section.

User guide

Look into the wiki for GIFs-based tutorials: LINK

Build

Watch the following terminal session recording on how to compile distributable files asciicast

To be sure that build environment is fully compliant with the project the following command creates a container with all the needed tools to compile the code:

cd {project-folder}; rm local.properties; docker rm android-omninotes; docker run -v $PWD:/workspace --name android-omninotes tabrindle/min-alpine-android-sdk:latest bash -c "mkdir -p ~/.android && touch ~/.android/repositories.cfg && yes | sdkmanager --update &>/dev/null && cd /workspace && ./gradlew clean build --stacktrace -Dorg.gradle.daemon=true -Pandroid.useDeprecatedNdk=true"

Test

To execute all tests included into the project connect a device or emulator, then run the following command:

./gradlew testAll

Testing Pyramid

To speedup the development more levels of testing are available following the testing pyramid approach, each type test requires more time than the previous one.

Unit Tests

./gradlew --stacktrace test

Integration Tests

./gradlew --stacktrace -Pandroid.testInstrumentationRunnerArguments.notAnnotation=androidx.test.filters.LargeTest connectedAndroidTest

UI Tests

./gradlew --stacktrace -Pandroid.testInstrumentationRunnerArguments.annotation=androidx.test.filters.LargeTest connectedPlayDebugAndroidTest

Notice that in this case I specified a single flavor to run tests on. This could be a useful and faster approach when you're testing specific flavor features.

Contributing

Due to the fact that I'm using gitflow as code versioning methodology, you as developer should always start working on develop branch that contains the most recent changes.

There are many features/improvements that are not on my roadmap but someone else could decide to work on them anyway: hunt for issues tagged as Help Wanted to find them!

Feel free to add yourself to contributors.md file.

New feature or improvements contributions

This kind of contributions must have screenshots or screencast as demonstration of the new additions.

Code style

If you plan to manipulate the code then you'll have to do it by following a specific code style. Also pay attention if you're using any plugin that automatically formats/cleans/rearrange your code and set it to only change that code that you touched and not the whole files.

Test your code contributions!

All code changes and additions must be tested. See the related section for more informations or this two pull requests comments: one and two

Forking project

When forking the project you'll have to modify some files that are strictly dependent from my own development / build / third-party-services environment. Files that need some attention are the following:

  • gradle.properties: this is overridden by another file with the same name inside the omniNotes module. You can do the same or leave as it is, any missing property will let the app gracefully fallback on a default behavior.

Code quality

A public instance of SonarQube is available both to encourage other developers to improve their code contributions (and existing code obviously) and to move the project even further into transparency and openness.

Checkout for it here

Pull requests will be automatically analyzed and rejected if they'll rise the code technical debt.

Dependencies

They're all listed into the build.gradle file but due to the fact that many of the dependences have been customized by me I'd like to say thanks here to the original developers of these great libraries:

Mentioned on

XDA Android Authority Droid Advisor Addictive Tips Techalook DZone Slash Gear quaap.com

Developed with love and passion by

License

Copyright 2013-2021 Federico Iosue

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
Comments
  • Crash on startup using version 5.3.1.FOSS from F-Droid

    Crash on startup using version 5.3.1.FOSS from F-Droid

    Hi there, I really like omni notes and use it quite often. Just tried to check on one of my notes, but when I try to open the app, I get only the splash screen and nothing after (return to my Android's homescreen). It did work earlier this week.

    • How to save my notes?
    • How can I help in debugging this issue?

    Device: Fairphone 2; OS: Android 5.1; App: Omni Notes 5.3.1 via F-Droid

    Bug Bug - Critical Flavor - Foss 
    opened by keunes 27
  • F-Droid support?

    F-Droid support?

    I would love to see Omni Notes on F-Droid. Would it be possible to make the required changes to Omni Notes?

    Some references on the topic: https://github.com/federicoiosue/Omni-Notes/issues/20#issuecomment-105214738 https://f-droid.org/forums/topic/omni-notes/ https://f-droid.org/wiki/page/it.feio.android.omninotes

    Development Flavor - Foss 
    opened by jluttine 22
  • Corrupted note crashes app

    Corrupted note crashes app

    Hi @federicoiosue ! Today I encountered a little issue and can't figure out how to fix it. I was exporting a WhatsApp chat and Android gave me the option to save all the files as a note in Omni Notes. It was not many files, around 10. So the note was created but then the app crashed and it's crashing anytime I try to open it again. I imagine it would be possible to fix this by manually editing the database to remove such note, but I'm not sure it would be enough neither how to do it.

    Could you give me a hand with this? Thanks!

    Support 
    opened by echeoquehaii 19
  • Cannot restore legacy backup

    Cannot restore legacy backup

    Hi, I recently upgraded to a newer version of Lineage OS, and had to format my phone, so i made a backup of my Omni Notes data. Now, i have been trying to restore it in the Omni Notes 5.5.0 (from f-droid) and in the Omni Notes 6.x from here, but even if it says it succeeds, i still dont see any notes. What can i do to figure out what is going wrong?

    Bug - Critical Flavor - Foss 
    opened by bastianilso 16
  • Build Failed with Program type already present in Cmd and Android Studio - F-Droid compilation failure

    Build Failed with Program type already present in Cmd and Android Studio - F-Droid compilation failure

    I have cloned the develop branch. Build is failing with following error.

    ### Android Studio StackTrace:

    Error: Program type already present: com.afollestad.materialdialogs.color.ColorChooserDialog$1 Message{kind=ERROR, text=Program type already present: com.afollestad.materialdialogs.color.ColorChooserDialog$1, sources=[Unknown source file], tool name=Optional.of(D8)}

    WARNING InnerClass annotations are missing corresponding EnclosingMember annotations. Such InnerClass annotations are ignored. Message{kind=WARNING, text=InnerClass annotations are missing corresponding EnclosingMember annotations. Such InnerClass annotations are ignored., sources=[Unknown source file], tool name=Optional.of(D8)} warning: unknown enum constant Scope.LIBRARY_GROUP

    org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':omniNotes:transformDexArchiveWithExternalLibsDexMergerForAlphaDebug'. at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:100) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:70) at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51) at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:62) at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54) at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:60) at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:97) at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:87) at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:52) at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52) at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54) at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43) at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34) at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.run(DefaultTaskGraphExecuter.java:248) at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336) at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328) at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199) at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110) at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:241) at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:230) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.processTask(DefaultTaskPlanExecutor.java:123) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.access$200(DefaultTaskPlanExecutor.java:79) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:104) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:98) at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.java:626) at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.java:581) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:98) at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55) at java.lang.Thread.run(Thread.java:745) Caused by: java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives: at com.android.builder.profile.Recorder$Block.handleException(Recorder.java:55) at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:104) at com.android.build.gradle.internal.pipeline.TransformTask.transform(TransformTask.java:212) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73) at org.gradle.api.internal.project.taskfactory.IncrementalTaskAction.doExecute(IncrementalTaskAction.java:46) at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39) at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:121) at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336) at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328) at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199) at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:110) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:92) ... 32 more Caused by: com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives: at com.android.builder.dexing.D8DexArchiveMerger.getExceptionToRethrow(D8DexArchiveMerger.java:124) at com.android.builder.dexing.D8DexArchiveMerger.mergeDexArchives(D8DexArchiveMerger.java:109) at com.android.build.gradle.internal.transforms.DexMergerTransformCallable.call(DexMergerTransformCallable.java:101) at com.android.build.gradle.internal.transforms.ExternalLibsMergerTransform.transform(ExternalLibsMergerTransform.kt:123) at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:221) at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:217) at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:102) ... 48 more Caused by: com.android.tools.r8.CompilationFailedException: Compilation failed to complete at com.android.tools.r8.utils.ExceptionUtils.withCompilationHandler(ExceptionUtils.java:76) at com.android.tools.r8.utils.ExceptionUtils.withD8CompilationHandler(ExceptionUtils.java:45) at com.android.tools.r8.D8.run(D8.java:67) at com.android.builder.dexing.D8DexArchiveMerger.mergeDexArchives(D8DexArchiveMerger.java:107) ... 53 more Caused by: com.android.tools.r8.utils.AbortException at com.android.tools.r8.utils.Reporter.failIfPendingErrors(Reporter.java:77) at com.android.tools.r8.utils.Reporter.fatalError(Reporter.java:58) at com.android.tools.r8.utils.ExceptionUtils.withCompilationHandler(ExceptionUtils.java:67) ... 56 more

    ### Command Prompt

    FAILURE: Build failed with an exception.

    • What went wrong: Execution failed for task ':omniNotes:transformClassesWithMultidexlistForAlphaDebug'.

    com.android.build.api.transform.TransformException: Error while generating the main dex list.

    • Try: Run with --info or --debug option to get more log output. Run with --scan to get full insights.

    • Exception is: org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':omniNotes:transformClassesWithMultidexlistForAlphaDebug'. at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:100) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:70) at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51) at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:62) at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54) at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:60) at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:97) at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:87) at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:52) at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52) at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54) at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43) at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34) at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.run(DefaultTaskGraphExecuter.java:248) at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336) at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328) at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199) at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110) at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:241) at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:230) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.processTask(DefaultTaskPlanExecutor.java:123) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.access$200(DefaultTaskPlanExecutor.java:79) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:104) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:98) at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.java:626) at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.java:581) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:98) at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46) at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55) Caused by: java.lang.RuntimeException: com.android.build.api.transform.TransformException: Error while generating the main dex list. at com.android.builder.profile.Recorder$Block.handleException(Recorder.java:55) at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:104) at com.android.build.gradle.internal.pipeline.TransformTask.transform(TransformTask.java:212) at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73) at org.gradle.api.internal.project.taskfactory.IncrementalTaskAction.doExecute(IncrementalTaskAction.java:46) at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39) at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:121) at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336) at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328) at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199) at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:110) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:92) ... 29 more Caused by: com.android.build.api.transform.TransformException: Error while generating the main dex list. at com.android.build.gradle.internal.transforms.D8MainDexListTransform.transform(D8MainDexListTransform.kt:127) at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:221) at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:217) at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:102) ... 41 more Caused by: com.android.builder.multidex.D8MainDexList$MainDexListException: com.android.tools.r8.errors.CompilationError: Program type already present : com.afollestad.materialdialogs.folderselector.FileChooserDialog$FileCallback at com.android.builder.multidex.D8MainDexList.generate(D8MainDexList.java:87) at com.android.build.gradle.internal.transforms.D8MainDexListTransform.transform(D8MainDexListTransform.kt:114) ... 44 more Caused by: com.android.tools.r8.errors.CompilationError: Program type already present: com.afollestad.materialdialogs.folderselector.FileChooserDialog $FileCallback at com.android.tools.r8.utils.ProgramClassCollection.resolveClassConflictImpl(ProgramClassCollection.java:64) at com.android.tools.r8.dex.ApplicationReader$$Lambda$389/2082552277.resolveClassConflict(Unknown Source) at com.android.tools.r8.utils.ProgramClassCollection.lambda$create$0(ProgramClassCollection.java:25) at com.android.tools.r8.utils.ProgramClassCollection$$Lambda$412/2057012535.apply(Unknown Source) at com.android.tools.r8.utils.ProgramClassCollection.create(ProgramClassCollection.java:24) at com.android.tools.r8.graph.LazyLoadedDexApplication$Builder.build(LazyLoadedDexApplication.java:121) at com.android.tools.r8.dex.ApplicationReader.read(ApplicationReader.java:122) at com.android.tools.r8.dex.ApplicationReader.read(ApplicationReader.java:86) at com.android.tools.r8.GenerateMainDexList.run(GenerateMainDexList.java:40) at com.android.tools.r8.GenerateMainDexList.run(GenerateMainDexList.java:110) at com.android.builder.multidex.D8MainDexList.generate(D8MainDexList.java:83) ... 45 more

    • Get more help at https://help.gradle.org

    BUILD FAILED in 13s 23 actionable tasks: 1 executed, 22 up-to-date

    Development Flavor - Foss 
    opened by nssharath 14
  • Beta 9 - Reminders stopped working

    Beta 9 - Reminders stopped working

    Omni Notes Version 6.0.0 Beta 9 Apr 18, 2019

    Android version: 8.0.0

    After update to Beta 9, Reminder Notifications are not working at all.

    From Omni Notes log file (for a reminder set for 24 Apr 22:41):

    04-24 22:41:00.504 28594-28594 E/Error on receiving reminder: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: at android.os.Parcel.readParcelableCreator(Parcel.java:2855) at android.os.Parcel.readParcelable(Parcel.java:2781) at it.feio.android.omninotes.models.Note.(Note.java:84) at it.feio.android.omninotes.models.Note.(Note.java:30) at it.feio.android.omninotes.models.Note$1.createFromParcel(Note.java:39) at it.feio.android.omninotes.models.Note$1.createFromParcel(Note.java:36) at it.feio.android.omninotes.utils.ParcelableUtil.unmarshall(ParcelableUtil.java:45) at it.feio.android.omninotes.receiver.AlarmReceiver.onReceive(AlarmReceiver.java:51) at android.app.ActivityThread.handleReceiver(ActivityThread.java:3357) at android.app.ActivityThread.-wrap17(Unknown Source:0) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1755) at android.os.Handler.dispatchMessage(Handler.java:108) at android.os.Looper.loop(Looper.java:206) at android.app.ActivityThread.main(ActivityThread.java:6784) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:852)

    Thanks and Regards

    Bug Flavor - Beta 
    opened by aabm197 13
  • Backup/Restore broken on Marshmallow

    Backup/Restore broken on Marshmallow

    every time I'm trying to create or restore a backup, the toast saying something went wrong pops up and the app restarts. I'm using Sony Xperia Z3 compact on Marshmallow.

    Bug 
    opened by noodlejetski 13
  • Failed to restore data

    Failed to restore data

    The bug appear when i try to backup data from database exported.

    Context

    • Device: HTC One m8
    • OS version: Lineage OS 16.0 (Android 9.0) https://forum.xda-developers.com/htc-one-m8/development/rom-lineageos-16-0-htc-one-m8-t3837538
    • App version: 5.5.2

    How to reproduce Steps to reproduce the behavior:

    1. Go to app
    2. Click on 'parameters' -> data -> sync and save -> restore -> choose the database exported
    3. Database successfull restored
    4. See no data when openned app but sucessfull notification app

    **adb logcat - Log LineageOS 16.0 (Android 9.0) ** W Omni Notes FOSS: Error fetching app metadata

    I ActivityManager:
    Start proc 7538:it.feio.android.omninotes.foss/u0a90 for activity it.feio.android.omninotes.foss/it.feio.android.omninotes.MainActivity
    W main    : type=1400 audit(0.0:5049): avc: denied { read } for name="u:object_r:adbtcp_prop:s0" dev="tmpfs" ino=7197 scontext=u:r:untrusted_app_25:s0:c512,c768 tcontext=u:object_r:adbtcp_prop:s0 tclass=file permissive=0
    W main    : type=1400 audit(0.0:5050): avc: denied { read } for name="u:object_r:alarm_boot_prop:s0" dev="tmpfs" ino=7198 scontext=u:r:untrusted_app_25:s0:c512,c768 tcontext=u:object_r:alarm_boot_prop:s0 tclass=file permissive=0
    W main    : type=1400 audit(0.0:5051): avc: denied { read } for name="u:object_r:alarm_handled_prop:s0" dev="tmpfs" ino=7199 scontext=u:r:untrusted_app_25:s0:c512,c768 tcontext=u:object_r:alarm_handled_prop:s0 tclass=file permissive=0
    W main    : type=1400 audit(0.0:5052): avc: denied { read } for name="u:object_r:alarm_instance_prop:s0" dev="tmpfs" ino=7200 scontext=u:r:untrusted_app_25:s0:c512,c768 tcontext=u:object_r:alarm_instance_prop:s0 tclass=file permissive=0
    W main    : type=1400 audit(0.0:5053): avc: denied { read } for name="u:object_r:bg_boot_complete_prop:s0" dev="tmpfs" ino=7202 scontext=u:r:untrusted_app_25:s0:c512,c768 tcontext=u:object_r:bg_boot_complete_prop:s0 tclass=file permissive=0
    E .omninotes.fos: Not starting debugger since process cannot load the jdwp agent.
    I MultiDex: VM with version 2.1.0 has multidex support
    I MultiDex: install
    I MultiDex: VM has multidex support, MultiDex support library is disabled.
    I ACRA    : ACRA is disabled for it.feio.android.omninotes.foss, initializing...
    I AppCompatViewInflater: app:theme is now deprecated. Please move to using android:theme instead.
    W Omni Notes FOSS: Error fetching app metadata
    W Omni Notes FOSS: java.net.MalformedURLException: no protocol:
    W Omni Notes FOSS:     at java.net.URL.<init>(URL.java:601)
    W Omni Notes FOSS:     at java.net.URL.<init>(URL.java:498)
    W Omni Notes FOSS:     at java.net.URL.<init>(URL.java:447)
    W Omni Notes FOSS:     at it.feio.android.omninotes.async.UpdaterTask.getAppData(UpdaterTask.java:165)
    W Omni Notes FOSS:     at it.feio.android.omninotes.async.UpdaterTask.doInBackground(UpdaterTask.java:83)
    W Omni Notes FOSS:     at it.feio.android.omninotes.async.UpdaterTask.doInBackground(UpdaterTask.java:51)
    W Omni Notes FOSS:     at android.os.AsyncTask$2.call(AsyncTask.java:333)
    W Omni Notes FOSS:     at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    W Omni Notes FOSS:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
    W Omni Notes FOSS:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
    W Omni Notes FOSS:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
    W Omni Notes FOSS:     at java.lang.Thread.run(Thread.java:764)
    D Omni Notes FOSS: Started navigation drawer initialization
    D Omni Notes FOSS: Finished navigation drawer initialization
    D Omni Notes FOSS: initNotesList intent: android.intent.action.MAIN
    I MockAnalyticsHelper: MockAnalyticsHelper instance methods are empty. No analytic data will be collected.
    V Omni Notes FOSS: Query: SELECT creation,last_modification,title,content,archived,trashed,alarm,reminder_fired,recurrence_rule,latitude,longitude,address,locked,checklist,category_id,name,description,color FROM notes LEFT JOIN categories USING( category_id)  WHERE archived IS NOT 1 AND trashed IS NOT 1  ORDER BY last_modification DESC
    D Omni Notes FOSS: {settings_text_size=default, settings_enable_swipe=true, expanded_view=true, settings_send_analytics=false, settings_prettified_dates=false, sorting_column=last_modification, acra.enable=false, settings_current_app_version=247, settings_notification_snooze_delay=10, settings_instant_search=false, settings_notification_vibration=true, navigation=Notes, settings_navdrawer_on_exit=false, settings_show_category_count=true, acra.legacyAlreadyConvertedTo4.8.0=true, settings_swipe_to_trash=false, settings_dynamic_menu=true, settings_checked_items_behavior=0, settings_fab_expansion_behavior=true, settings_language=fr_FR, settings_simple_calendar=true, settings_password_access=false, settings_colors_app=strip, pref_tour_complete=true, settings_attachments_on_bottom=false, settings_auto_location=false, settings_show_uncategorized=true, acra.lastVersionNr=247}
    D OpenGLRenderer: Skia GL Pipeline
    V Omni Notes FOSS: Query: Retrieval finished!
    I Adreno-EGL: <qeglDrvAPI_eglInitialize:379>: EGL 1.4 QUALCOMM build: Nondeterministic_AU_msm8974_LA.BF.1.1.3_RB1__release_AU (I741a3d36ca)
    I Adreno-EGL: OpenGL ES Shader Compiler Version: E031.29.00.00
    I Adreno-EGL: Build Date: 04/04/16 Mon
    I Adreno-EGL: Local Branch: mybranch19053788
    I Adreno-EGL: Remote Branch: quic/LA.BF.1.1.3_rb1.12
    I Adreno-EGL: Local Patches: NONE
    I Adreno-EGL: Reconstruct Branch: NOTHING
    I ConfigStore: android::hardware::configstore::V1_0::ISurfaceFlingerConfigs::hasWideColorDisplay retrieved: 0
    I ConfigStore: android::hardware::configstore::V1_0::ISurfaceFlingerConfigs::hasHDRDisplay retrieved: 0
    I OpenGLRenderer: Initialized EGL, version 1.4
    D OpenGLRenderer: Swap behavior 1
    W Adreno-EGL: <qeglDrvAPI_eglGetConfigAttrib:607>: EGL_BAD_ATTRIBUTE
    W Adreno-EGL: <qeglDrvAPI_eglGetConfigAttrib:607>: EGL_BAD_ATTRIBUTE
    D vndksupport: Loading /vendor/lib/hw/gralloc.msm8974.so from current namespace instead of sphal namespace.
    D Omni Notes FOSS: it.feio.android.omninotes.async.bus.NotesLoadedEvent
    D Omni Notes FOSS: Started navigation drawer initialization
    D Omni Notes FOSS: Finished navigation drawer initialization
    D Omni Notes FOSS: Finished main menu initialization
    D Omni Notes FOSS: Finished categories menu initialization
    V Omni Notes FOSS: Query: SELECT creation,last_modification,title,content,archived,trashed,alarm,reminder_fired,recurrence_rule,latitude,longitude,address,locked,checklist,category_id,name,description,color FROM notes LEFT JOIN categories USING( category_id)  ORDER BY last_modification DESC
    V Omni Notes FOSS: Query: Retrieval finished!
    D Omni Notes FOSS: Dynamic menu finished counting items
    E Omni Notes FOSS: Wrong element choosen: 0
    D vndksupport: Loading /vendor/lib/hw/[email protected] from current namespace instead of sphal namespace.
    D vndksupport: Loading /vendor/lib/hw/gralloc.msm8974.so from current namespace instead of sphal namespace.
    D Omni Notes FOSS: onNewIntent
    D Omni Notes FOSS: {settings_text_size=default, settings_enable_swipe=true, expanded_view=true, settings_send_analytics=false, settings_prettified_dates=false, sorting_column=last_modification, acra.enable=false, settings_current_app_version=247, settings_notification_snooze_delay=10, settings_instant_search=false, settings_notification_vibration=true, navigation=Notes, settings_navdrawer_on_exit=false, settings_show_category_count=true, acra.legacyAlreadyConvertedTo4.8.0=true, settings_swipe_to_trash=false, settings_dynamic_menu=true, settings_checked_items_behavior=0, settings_fab_expansion_behavior=true, settings_language=fr_FR, settings_simple_calendar=true, settings_password_access=false, settings_colors_app=strip, pref_tour_complete=true, settings_attachments_on_bottom=false, settings_auto_location=false, settings_show_uncategorized=true, acra.lastVersionNr=247}
    W Adreno-EGL: <qeglDrvAPI_eglGetConfigAttrib:607>: EGL_BAD_ATTRIBUTE
    D vndksupport: Loading /vendor/lib/hw/gralloc.msm8974.so from current namespace instead of sphal namespace.
    W ActivityThread: handleWindowVisibility: no activity for token android.os.BinderProxy@90659e
    I AppCompatViewInflater: app:theme is now deprecated. Please move to using android:theme instead.
    W Adreno-EGL: <qeglDrvAPI_eglGetConfigAttrib:607>: EGL_BAD_ATTRIBUTE
    D vndksupport: Loading /vendor/lib/hw/gralloc.msm8974.so from current namespace instead of sphal namespace.
    W Event   : Subscriber to unregister was not registered before: class it.feio.android.omninotes.MainActivity
    W Adreno-EGL: <qeglDrvAPI_eglGetConfigAttrib:607>: EGL_BAD_ATTRIBUTE
    D vndksupport: Loading /vendor/lib/hw/gralloc.msm8974.so from current namespace instead of sphal namespace.
    W Adreno-EGL: <qeglDrvAPI_eglGetConfigAttrib:607>: EGL_BAD_ATTRIBUTE
    D vndksupport: Loading /vendor/lib/hw/gralloc.msm8974.so from current namespace instead of sphal namespace.
    D OpenGLRenderer: endAllActiveAnimators on 0x8a610180 (RippleDrawable) with handle 0x8bffe960
    W Notification: Use of stream types is deprecated for operations other than volume control
    W Notification: See the documentation of setSound() for what to use instead with android.media.AudioAttributes to qualify your playback use case
    W Notification: Use of stream types is deprecated for operations other than volume control
    W Notification: See the documentation of setSound() for what to use instead with android.media.AudioAttributes to qualify your playback use case
    W Notification: Use of stream types is deprecated for operations other than volume control
    W Notification: See the documentation of setSound() for what to use instead with android.media.AudioAttributes to qualify your playback use case
    W Notification: Use of stream types is deprecated for operations other than volume control
    W Notification: See the documentation of setSound() for what to use instead with android.media.AudioAttributes to qualify your playback use case
    W Notification: Use of stream types is deprecated for operations other than volume control
    W Notification: See the documentation of setSound() for what to use instead with android.media.AudioAttributes to qualify your playback use case
    W Notification: Use of stream types is deprecated for operations other than volume control
    W Notification: See the documentation of setSound() for what to use instead with android.media.AudioAttributes to qualify your playback use case
    W Notification: Use of stream types is deprecated for operations other than volume control
    W Notification: See the documentation of setSound() for what to use instead with android.media.AudioAttributes to qualify your playback use case
    W Notification: Use of stream types is deprecated for operations other than volume control
    W Notification: See the documentation of setSound() for what to use instead with android.media.AudioAttributes to qualify your playback use case
    W Notification: Use of stream types is deprecated for operations other than volume control
    W Notification: See the documentation of setSound() for what to use instead with android.media.AudioAttributes to qualify your playback use case
    W Notification: Use of stream types is deprecated for operations other than volume control
    W Notification: See the documentation of setSound() for what to use instead with android.media.AudioAttributes to qualify your playback use case
    W Notification: Use of stream types is deprecated for operations other than volume control
    W Notification: See the documentation of setSound() for what to use instead with android.media.AudioAttributes to qualify your playback use case
    W Notification: Use of stream types is deprecated for operations other than volume control
    W Notification: See the documentation of setSound() for what to use instead with android.media.AudioAttributes to qualify your playback use case
    W Notification: Use of stream types is deprecated for operations other than volume control
    W Notification: See the documentation of setSound() for what to use instead with android.media.AudioAttributes to qualify your playback use case
    W Notification: Use of stream types is deprecated for operations other than volume control
    W Notification: See the documentation of setSound() for what to use instead with android.media.AudioAttributes to qualify your playback use case
    W Notification: Use of stream types is deprecated for operations other than volume control
    W Notification: See the documentation of setSound() for what to use instead with android.media.AudioAttributes to qualify your playback use case
    W Notification: Use of stream types is deprecated for operations other than volume control
    W Notification: See the documentation of setSound() for what to use instead with android.media.AudioAttributes to qualify your playback use case
    W Notification: Use of stream types is deprecated for operations other than volume control
    W Notification: See the documentation of setSound() for what to use instead with android.media.AudioAttributes to qualify your playback use case
    W Notification: Use of stream types is deprecated for operations other than volume control
    W Notification: See the documentation of setSound() for what to use instead with android.media.AudioAttributes to qualify your playback use case
    W Notification: Use of stream types is deprecated for operations other than volume control
    W Notification: See the documentation of setSound() for what to use instead with android.media.AudioAttributes to qualify your playback use case
    W Notification: Use of stream types is deprecated for operations other than volume control
    W Notification: See the documentation of setSound() for what to use instead with android.media.AudioAttributes to qualify your playback use case
    W Notification: Use of stream types is deprecated for operations other than volume control
    W Notification: See the documentation of setSound() for what to use instead with android.media.AudioAttributes to qualify your playback use case
    W Notification: Use of stream types is deprecated for operations other than volume control
    W Notification: See the documentation of setSound() for what to use instead with android.media.AudioAttributes to qualify your playback use case
    W Notification: Use of stream types is deprecated for operations other than volume control
    W Notification: See the documentation of setSound() for what to use instead with android.media.AudioAttributes to qualify your playback use case
    W Notification: Use of stream types is deprecated for operations other than volume control
    W Notification: See the documentation of setSound() for what to use instead with android.media.AudioAttributes to qualify your playback use case
    W Notification: Use of stream types is deprecated for operations other than volume control
    W Notification: See the documentation of setSound() for what to use instead with android.media.AudioAttributes to qualify your playback use case
    W Notification: Use of stream types is deprecated for operations other than volume control
    W Notification: See the documentation of setSound() for what to use instead with android.media.AudioAttributes to qualify your playback use case
    W Notification: Use of stream types is deprecated for operations other than volume control
    W Notification: See the documentation of setSound() for what to use instead with android.media.AudioAttributes to qualify your playback use case
    W Notification: Use of stream types is deprecated for operations other than volume control
    W Notification: See the documentation of setSound() for what to use instead with android.media.AudioAttributes to qualify your playback use case
    W Notification: Use of stream types is deprecated for operations other than volume control
    W Notification: See the documentation of setSound() for what to use instead with android.media.AudioAttributes to qualify your playback use case
    W Notification: Use of stream types is deprecated for operations other than volume control
    W Notification: See the documentation of setSound() for what to use instead with android.media.AudioAttributes to qualify your playback use case
    W Notification: Use of stream types is deprecated for operations other than volume control
    W Notification: See the documentation of setSound() for what to use instead with android.media.AudioAttributes to qualify your playback use case
    W Notification: Use of stream types is deprecated for operations other than volume control
    W Notification: See the documentation of setSound() for what to use instead with android.media.AudioAttributes to qualify your playback use case
    W Notification: Use of stream types is deprecated for operations other than volume control
    W Notification: See the documentation of setSound() for what to use instead with android.media.AudioAttributes to qualify your playback use case
    W Notification: Use of stream types is deprecated for operations other than volume control
    W Notification: See the documentation of setSound() for what to use instead with android.media.AudioAttributes to qualify your playback use case
    W Notification: Use of stream types is deprecated for operations other than volume control
    W Notification: See the documentation of setSound() for what to use instead with android.media.AudioAttributes to qualify your playback use case
    W Notification: Use of stream types is deprecated for operations other than volume control
    W Notification: See the documentation of setSound() for what to use instead with android.media.AudioAttributes to qualify your playback use case
    W Notification: Use of stream types is deprecated for operations other than volume control
    W Notification: See the documentation of setSound() for what to use instead with android.media.AudioAttributes to qualify your playback use case
    W Notification: Use of stream types is deprecated for operations other than volume control
    W Notification: See the documentation of setSound() for what to use instead with android.media.AudioAttributes to qualify your playback use case
    W Notification: Use of stream types is deprecated for operations other than volume control
    W Notification: See the documentation of setSound() for what to use instead with android.media.AudioAttributes to qualify your playback use case
    W Notification: Use of stream types is deprecated for operations other than volume control
    W Notification: See the documentation of setSound() for what to use instead with android.media.AudioAttributes to qualify your playback use case
    W Notification: Use of stream types is deprecated for operations other than volume control
    W Notification: See the documentation of setSound() for what to use instead with android.media.AudioAttributes to qualify your playback use case
    W Notification: Use of stream types is deprecated for operations other than volume control
    W Notification: See the documentation of setSound() for what to use instead with android.media.AudioAttributes to qualify your playback use case
    W Notification: Use of stream types is deprecated for operations other than volume control
    W Notification: See the documentation of setSound() for what to use instead with android.media.AudioAttributes to qualify your playback use case
    W Notification: Use of stream types is deprecated for operations other than volume control
    W Notification: See the documentation of setSound() for what to use instead with android.media.AudioAttributes to qualify your playback use case
    W Notification: Use of stream types is deprecated for operations other than volume control
    W Notification: See the documentation of setSound() for what to use instead with android.media.AudioAttributes to qualify your playback use case
    W Notification: Use of stream types is deprecated for operations other than volume control
    W Notification: See the documentation of setSound() for what to use instead with android.media.AudioAttributes to qualify your playback use case
    W Notification: Use of stream types is deprecated for operations other than volume control
    W Notification: See the documentation of setSound() for what to use instead
    

    Thank's a lot

    Bug - Critical Flavor - Foss 
    opened by electro575 12
  • Omni Notes web application

    Omni Notes web application

    Hi, i am going to start working on a web application for Omni Notes, I am going to use either flask or django, before I started to design the UI and the application I wanted to ask for any suggestions as to how I should design and structure the app so that it will be easy to code it for the android app

    opened by thewhitetulip 11
  • Arbitrary creation date

    Arbitrary creation date

    hello :3

    i would like to import the notes that i currently have in my device, but i don't have root privileges to just import everything, and while they're old, i still want to keep the creatíon time of each one, but i don't want to keep so many tags, one for each date/time, and let it become disorganized.

    can there be a feature to set an arbitrary creation date/time for these notes? possibly with a mark on them indicating that the date/time set was set by the user, too (or not)

    thank you for reading ^-^

    opened by Wilker-a 10
  • On scrolling up and down in the notes list, stuttering movement

    On scrolling up and down in the notes list, stuttering movement

    When scrolling through the notes list quickly, the movement appears to slightly stutter. This makes it slightly harder to read and choose a note from the list.

    Thanks for developing such a cool notes app!

    Bug Non-replicable Bug - Minor 
    opened by LNFWebsite 10
  • cut function =bug

    cut function =bug

    Omni version 6.1.0

    The cut function deletes the value in the old location, but does not write to the new location. Instead the buffer contains a value from a previous copy. A workaround is using copy, but then one has to explicitly delete after moving the text.

    This may be intermittant, but it occurred many times and at no occasion did it seem to work. I have only been using Omni for a few hours, but during this time cut works on several other smartphone apps. I was able to cut from other note apps and copy the data to Omni without problem. But not cut from Omni to another location in Omni. I tried closing and reopening Omni, but the problem persisted.

    opened by andr222 0
  • merge distinct items in list =enhancement

    merge distinct items in list =enhancement

    Current version 6.1.0 This is a common function on other note apps with lists. It is usually implemented with simple backspace/delete.

    It can be worked around, but it would be very convenient, and should be easy to implement.

    opened by andr222 0
  • Add delombok step to code analysis action

    Add delombok step to code analysis action

    I noticed that, after the recent addition of some Lombok code in this project, CodeQL no longer extracts the classes that use it. This PR adds a delombok step to the code analysis GitHub Action so that those classes are extracted again, potentially uncovering new security issues.

    ⚠️ Take into account that this is NOT an officially supported solution from GitHub, but rather something that I recommend as an individual contributor. Take it with a grain of salt if you decide to use it 😄.

    Also, I changed the build command to assembleDebug, which should be faster (both because it skips tests and only builds one flavor of the app) while being equally useful to CodeQL.

    opened by atorralba 0
  • Feature request: back-up options

    Feature request: back-up options

    Request 1: Having the possibility to back-up to cloud or webdav. Because due to broken/stolen/lost phones local backups are still funrable to loosing.

    Request 2. An option to perform auto back-ups at user-specified intervals (every 24h, one a week, etc).

    opened by Chrizzle 1
  • Feature request: pin to top

    Feature request: pin to top

    I would like to be able to pin notes to the top of the notes list. How: within a note there could be an option 'Pin to top'. Multiple pinned-notes should be able to rearrange manually.

    Regards Chris

    opened by Chrizzle 0
  • Think about omitting settings file backup/restore

    Think about omitting settings file backup/restore

    Currently settings are exported to allow users to restore all their app's preferences on backup restore.

    This currently causes two issues, in ascendent order of criticality:

    1. Storage Access Framework url in set right into settings, and would be overridden when restoring settings file
    2. There is no way to check correctness of a password trying to decode data on restoration, only if it's actually set or not. Importing settings would also override current password with the one from settings file itself, with still not much explorated side effects
    Improvements Development Security 
    opened by federicoiosue 1
Releases(6.2.0_alpha)
  • 6.2.0_alpha(Oct 31, 2022)

    ★ Updated to Android 11 to get latest fixes and improvements. IMPORTANT: This will require to move your old backups to the new directory ★ Open source transparent crashes reporting available on acra.omninotes.app (user: guest, pass: guest) ★ Removed all analytics ☆ Password is required when importing backups containing protected notes ✓ Backups restoration on Android 12+ ✓ Backup import/export notifications improvements

    Source code(tar.gz)
    Source code(zip)
    OmniNotes-alphaRelease-6.2.0.apk(7.27 MB)
  • 6.1.0(Mar 7, 2022)

    ★ Pin your notes into notifications! ★ Dropped support for Android KitKat to improve performances ★ Reminders with a single touch with new dialogs ★ Move to bottom your checked items on demand ☆ Simplified merge notes without confirmation ☆ Improved bulk tag editing preselecting tags ☆ Share button in first menu position for fast sharing ☆ Percentage of completion for checklists inside info dialog ☆ Revamped backup restore/delete ☆ Removed custom text size option ☆ Updated languages ✓ Fixes!!!!!

    Source code(tar.gz)
    Source code(zip)
    300.apk(7.46 MB)
  • 6.0.5(Nov 17, 2019)

  • 6.0.4(Nov 17, 2019)

  • 6.0.3(Nov 6, 2019)

  • 6.0.2(Oct 30, 2019)

  • 6.0.1(Oct 22, 2019)

  • 6.0.0(Oct 21, 2019)

    ★ New backup mode using JSON: older backups can still be restored with "legacy" restore option ★ Included SDK 28 fixed and improvements ★ Added finnish and romanian translations ☆ Translations update ☆ Much faster images loading ☆ Easily recognizable shortcut widget ✓ Broken share-with-ON when receiving images ✓ Reloaded notes after password reset displaying an explicit message ✓ Ignored case when sorting notes ✓ Broken notifications on Android Oreo and following

    Source code(tar.gz)
    Source code(zip)
    6.0.0.apk(6.03 MB)
  • 5.5.4(Oct 1, 2019)

  • 5.5.3(Oct 1, 2019)

  • 5.5.2(Oct 23, 2018)

  • 5.5.1(May 11, 2018)

  • 5.5.0(Apr 26, 2018)

    ★ Rapidly search your unfinished to-do lists ★ New "attachment" available to easily add the current timestamp ★ Now an option is available into the editor to check currently edited note's informations ★ Persian translation ☆ Removed outdated transparent navigation bar: this will save a lot of CPU avoiding calculating dynamic layout, after all today all devides are very much bigger than when this optimization has been introduced ☆ Removed semi-transparent overlay when using floating action button to speed-up the flow ✓ Notes list update after password reset and password request bypass using swipe actions ✓ Language switching on Android Oreo and later versions ✓ First title duplication during notes' merging

    Source code(tar.gz)
    Source code(zip)
    5.5.0.apk(5.47 MB)
  • 5.4.5(Apr 16, 2018)

    ☆ Updated translations ☆ Added full description and screenshots for F-Droid users ✓ Blank screen after leaving app by back-button pressure ✓ Attachments addition from external memory ✓ Widget update when archiving/deleting ✓ Broken "new note with camera" shortcut

    Source code(tar.gz)
    Source code(zip)
    5.4.5.apk(5.55 MB)
  • 5.4.4(Apr 16, 2018)

  • 5.4.3(Jan 29, 2018)

  • 5.4.2(Jan 8, 2018)

  • 5.4.1(Dec 16, 2017)

  • 5.4.0(Dec 11, 2017)

    ★ Added file size to attachments'action dialog ★ When editing a note's reminder, if that's in the past, a future date will be proposed ★ Added an option to switch timestamps ON or OFF into home widget ☆ Revisited contextual actions when multiple notes are selected ☆ Improved memory usage ☆ Different text size in the "Text size" settings ✓ Bugfixes

    Thanks a lot to Dima-1 for his contributions!

    Source code(tar.gz)
    Source code(zip)
    5.4.0.apk(5.52 MB)
  • 5.3.1(Mar 2, 2017)

  • 5.3.0(Feb 21, 2017)

    NEW

    ★ FOSS version available on F-Droid issue ★ Enjoy the renewed help page (accessible from inside settings) that makes use of animated tutorials ★ Added Serbian Cyrillic language (thanks Slobodan Simic)

    Improvement

    ☆ New checklist items are now capitalized ☆ Category deletion button no more shown on creation ☆ Notes without title are now shown as they into list instead of using part of the content to improve performances ☆ Updated translations

    Fixes

    Memory leaks related to checklists and geolocation Hidden attachments from locked notes into home widget

    Source code(tar.gz)
    Source code(zip)
  • 5.2.20(Feb 4, 2017)

  • 5.2.19(Feb 3, 2017)

  • 5.2.18(Nov 4, 2016)

  • 5.2.17(Sep 29, 2016)

  • 5.2.16(Feb 3, 2017)

    ☆ Opening the same note twice from home widget breaking navigation issue fixed ☆ Removed searched string label when changing sort order in notes list ☆ Code cleaning

    Source code(tar.gz)
    Source code(zip)
  • 5.2.15(Jun 6, 2016)

  • 5.2.13(Jun 3, 2016)

    ☆ Archived notes are now hidden within home widgets ☆ Updated Dutch, Polish and Spanish translations (thanks translators!) ☆ Navigation change issue when app is opened from home widget ☆ Broken share with ON function when attachments are included on Android Marshmallow ☆ Geolocation runtime permission request when not needed ☆ Sharing notes with audio recordings

    Source code(tar.gz)
    Source code(zip)
  • 5.2.12(Jun 3, 2016)

  • 5.2.10(May 2, 2016)

    ☆ Is now possible to create tags using any kind of words. For example you can use "#thisIsA_tag!" and it'll be correctly recognized ☆ Changed selected notes colorization ☆ Disabled checklist items'vibration on drag ☆ Updated French, Galician, Hungarian, Italian, Japanese translations (very thanks to translators) ☆ Fixed search by tags: it will now search by match and no more by prefix (ex. searching for "#tag" will no more find "#tagged")

    Source code(tar.gz)
    Source code(zip)
Owner
Federico Iosue
Intrigued by smart things, coding, beer 🍺
Federico Iosue
Note-Taking-App - Android application which can be used to take notes

Android application which can be used to take notes.The application uses Recycle

Utkarsh Panwar 0 Jan 30, 2022
Note taking application using Kotlin and Firebase Realtime Database.

Notes-Firebase-Kotlin Note taking application using Kotlin and Firebase Realtime Database. Features:- 1.Signup With Google 2.Create Note 3.Update Note

Shivam Kumar 4 Nov 9, 2022
Easy-Note - Easy Note Application will help user to add and update their important notes

Easy-Note ??️ Easy Note App helps you to create your notes. You can ?? edit and

Ade Amit 0 Jan 30, 2022
Note-taking Android App

NOTEDGE Note-taking Android app Website » Download » Tech Stack Appcompat Material Design Room RecyclerView RecyclerView Animators Lifecycle Rounded I

Borichevskiy Kirill 22 Dec 25, 2022
NoteApp - A note taking app illustrating Android best practices with Jetpack Compose.

NoteApp - A note taking app illustrating Android best practices with Jetpack Compose.

Ömer Karaca 23 Dec 20, 2022
CRUD Note taking app built for Android with Kotlin and XML.

Android Note Keeping App An offline android app that can be used to write notes on the fly to be retrieved later. Libraries Room Database. Lifecycle C

Moyosoreoluwa 3 Sep 19, 2022
Note taking app using MVVM architecture with Hilt, Material Motion, Coroutines, Flow, Jetpack

Note taking app using MVVM architecture with Hilt, Material Motion, Coroutines, Flow, Jetpack (Room, ViewModel,Paging3).

Ranbir Singh 7 Apr 25, 2022
Noted is a Clean Architectured android application for taking personal notes

Noted is an android application for taking notes. The user can create, edit, review, and delete notes. They also can specify a category for each note.

null 0 Apr 25, 2022
Note-app - A sample project that presents a modern approach to Android application development

Note-app - A sample project that presents a modern approach to Android application development

null 3 Aug 19, 2022
The simplest version of a notepad application with the feature to save pictures on a note.

PhotoNotePad Easy to write, read and organize notes with photo(s). Feature A note has... title content date color pin images Easy to write a note. Pro

seungmin shin 1 Dec 5, 2021
Secret Codes is an Open Source application that allows you to browse through hidden codes of your Android phone.

####Secret Codes is an Open Source application that allows you to browse through hidden codes of your Android phone. This application will scan throug

Simon Marquis 251 Jan 6, 2023
An open source application to make your own android applications without coding!

Stif An Open source project for building Android Application at a go both with and without coding. This project was inspired from Scratch and Sketchwa

Nethical org 5 Aug 28, 2021
The Free & Open Source Android Application for reading (Light) Novels

Shosetsu The Free & Open Source Android Application for reading (Light) Novels! We appreciate any help in improving the app, so let us know by opening

ShosetsuOrg 541 Jan 6, 2023
NimTome is a Free and open-source spell tracker application for Dungeons and Dragons

Nimtome: An open source application to manage all your spells in D&D About This project came to life as a homework assignment, but it became a lot bit

null 2 Jan 11, 2022
Tidy up your Android status bar before taking screenshots for the Play Store

DEPRECATED This project no longer works on recent versions of Android. Use Android's build-in Demo mode instead. For the curious, more information abo

Emma Vanbrabant 891 Nov 10, 2022
Android-Study-Jams-BSIOTR - NotaRank - Easy notes taking app for students

Android Study Jams BSIOTR Notarank : Notes Taking app Problem Statements The env

null 2 Jan 10, 2022
A notes taking app.

NoteDroid A simple android app written in Kotlin to take notes and be productive. This app was built under Android Study Jams 2021 for students to lea

Google Developer Student Clubs - SNU 2 Jan 10, 2022
Productivity Note App utilizing Jetpack Compose

DailyDoc Productivity Note App utilizing Jetpack Compose Currently working on improving UI features and will be applying these directly to the main br

Bryan L 31 Dec 16, 2022
Daily Doc is a Productivity Note App utilizing Jetpack Compose

Daily Doc is a productivity app to help you keep track of your daily progress inspired by 100-day-challenges.

Bryan L 31 Dec 16, 2022