Parsing markdown to create a mindmap
I was requested to investigate importing a markdown mindmap into my MindMap app. The app uses the MindMapView library for the display. There is a commonmark library that I have used in other apps to handle markdown, so I investigated if it is possible to use it for this.
The library provides an AbstractVisitor which you may use to visit
the tree of nodes generated by the parser. Because at least one
implementation of MarkMap uses YAML front matter to define the
title/root node there is a YamlFrontMatterExtension and a
YamlFrontMatterVisitor to deal with that.
Beach Villas
On a variety of holidays we have come across a wide range of interesting development opportunities.

Irish rural retreat near Cahir, Ireland. Some rethatching required.

Pretty Welsh country cottage near Caerphilly, UK. Natural slate roof.

On the beach at Zahora, Costa de Luz, Spain. This has since been turned into a beach bar. The lighthouse at Trafalgar can be seen in the distance.

Country cottage near Olveira, Galicia, Spain. Sturdy chimney.
Read more →Flutter app bar search widget
As an exercise I decided to reimplement my Buses app in flutter. To do this I need an open street map library, a beautiful soup library, a location library, an OS ref library, and a search widget. All of these are available in pub.dev, except a suitable search widget. All implementations of SearchBar in the docs include an annoying dropdown suggestions feature, which appears to be mandatory.

However it is possible to take the SearchBar and include it in an AppBar, change the icons and end up with something which looks and acts very similarly to an android search widget. To do this, add code to the actions of the app bar which either shows an icon button or the search bar, controlled by a boolean which is set by pressing the search button. The search bar is wrapped by an Expanded widget to stop it overflowing the display. The search bar has a leading button which dismisses it, a conditional trailing button to clear the search field and a button to do the search.
Read more →Android Navigation Menu
Android versions from android 5 use a Toolbar as the ActionBar, but there appears to be no obvious API access.
However, by traversing the view hierarchy, it can be found and used to set up app navigation.

Create a recursive function to traverse the views and find the toolbar.
// findToolbar
private Toolbar findToolbar(ViewGroup group)
{
View result = null;
final int count = group.getChildCount();
for (int i = 0; i < count; i++)
{
View view = group.getChildAt(i);
if (view instanceof Toolbar)
return (Toolbar) view;
if (view instanceof ViewGroup)
result = findToolbar((ViewGroup) view);
if (result != null)
break;
}
return (Toolbar) result;
}
Having written this hack, I then discovered a more efficient way using built in functionality.
Read more →Update App Widget
Android app widgets normally can be set up to update periodically, but not repeatedly for a short period. For a bus times app I need the widget to update every 30 seconds for about 5 minutes.
I already had a Service set up to update the widget from a suitable web site and using a Handler to reset the progress bar if the background update process failed.
public static final int RESET_DELAY = 5 * 1000;
public static final int REPEAT_DELAY = 30 * 1000;
public static final int STOP_DELAY = 5 * 60 * 1000;
private Handler handler;
private boolean stopUpdate;
// onCreate
@Override
public void onCreate()
{
// Get handler
handler = new Handler(Looper.getMainLooper());
if (BuildConfig.DEBUG)
Log.d(TAG, "onCreate " + handler);
}
Define the various delays and get a handler in the onCreate() method.