Reading Diary for iOS released

App contains same functionality as new Android version. You will find detail info here. Check it out.

Reading Diary 4 Released

New and completely from scratch in Flutter rewritten version of Reader’s Diary was released on Android. And iOS version is to come soon. App now offers much more. There is new UI with light and dark theme and new filtering possibilities. New is also search for book by it’s author or name. There are new parameters to fill: book format, reading status, end of reading date, ownership, bookshelf, tags. There is new Overview with statistics. Apple sign-in. Some of these functions are available as in-app purchase. Check it out.

Get it on Google Play

Colors – Game

Practise your perception. Click on correct color! It will be simple just in the beginning. You will have less time and the game will eventually try to confuse you!

Simple game I made in Flutter. Are you interested in release for some other platform?

Get it on Google Play

Suntime 2

Suntime app just got a huge update. Now it is possible to add an unlimited number of locations. Also, you can see Astronomical, Nautical and Civil Sunrise and Sunset. There are 2 new widgets – small widget and widget with info about one event. And also there is dark mode.

Get it on Google Play

Inserting multiple rows into Sqlite database with Content Providers

I have just found a draft of this post. I know this is a bit outdated but I think this might provide some value to someone still using Content Providers.

So, how can you insert multiple rows into the database at one using SQLite with ContentProvider?

Many separate inserts

Naive approach would be similar to this:

for (int i = 0; i < list.size(); i++) {
    Book book = list.get(i);
    ContentValues cv = getContentValues(book);
    cr.insert(CONTENT_URI, cv);

Continue reading

Adding backendless sync to existing offline app with Firebase

My application Reader‘s Diary is on Google Play store for more than 4 years. It was my first more complex application when I started self-learning programming. And you can guess that from some still remaining fragments of horrible code:) I wrote application primarily for myself, I use it whenever I start or finish reading a book. However, during these years it found few hundred active users. As my coding and UI skills improved, so has app, and now it is quite different from it‘s first version. Some poor initial design choices are however still there.

Planning new version

I was quite happy with the previous version. It fulfilled all my needs. Not taking small fix into account, it was in store for 18 months. In the meantime, I got some requests from users. Some wanted to sync their books, some wanted to add book cover pages. Showing cover images was an easy thing. I already have a function to search books by ISBN code using Google Books service so I only needed to save image url from the search result. For sync, I decided to use Firebase.
Continue reading

Reader’s Diary 3.0

Backup and synchronization are coming! Sign up and have your books synchronized between all your devices. For books found online by their ISBN code cover image and info link is shown. UI is smoother and some bugs have been fixed.

Get it on Google Play

What is Application class good for?

The Application class is the base class of Android application. It is the first class that is initialized when the app is started. Therefore you can initialize here everything that needs to be ready when an activity or other application component is started.

When to override Application class?

Application class doesn’t have to be overridden all the time. I presume most of simple apps can use default Application class implementation without problems. Android documentation states that

There is normally no need to subclass Application. In most situations, static singletons can provide the same functionality in a more modular way. If your singleton needs a global context (for example to register broadcast receivers), include Context.getApplicationContext() as a Context argument when invoking your singleton’s getInstance() method.

Main reasons to override Application class are following:
• Getting access to the Application Context
• Global initialization
• Getting access to global methods and data
Continue reading

Java threads, Android Async Task and Kotlin Coroutines

Imagine that you need to do some long time operation and update UI with its result. You probably know that you should not call things that might take some time on UI thread. If you do so, an application might become unresponsive and that would lead to poor user experience or system stepping in and offering to kill an application with infamous Application is not responding dialog.
So how can you avoid this? There are many ways. Most commonly used are threads, AsyncTasks and now also Kotlin coroutines. In this article, I will make a quick introduction and provide reference links for more details.
Continue reading