Bill Farmer

Random thoughts on random subjects

Parsing markdown to create a mindmap

by Bill Farmer. Categories: hacking .

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.

Read more →

Flutter app bar search widget

by Bill Farmer. Categories: Hacking .

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.

BusApp

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

by Bill Farmer. Categories: Hacking .

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.

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

by Bill Farmer. Categories: Hacking .

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.

Read more →

Create a Word Grid

by Bill Farmer. Categories: Hacking .

A popular online puzzle game involves solving a five character word grid in the least number of moves. There are probably several ways of algorithmically generating word grids, Donald Knuth’s Dancing Links paper mentions generating a word grid. I decided to use brute force and a randomised word list.

This uses a large number of lists and iterators and can generate a large number of word grids. This algorithm is used in my Gridle android app.

Read more →
Previous page Next page