Bill Farmer

Random thoughts on random subjects

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 →

Read Paywalled Newspaper Articles

by Bill Farmer. Categories: Hacking .

Most mainstream newspapers show a teaser front page on their web site, but hide most of their content behind a paywall. As with most things you can think of, there is a browser extension for this – Bypass Paywalls.

However this does not work for all newspapers, the extension appears to have dropped support for The Times, for example. It is still possible to read some articles by making use of a search engine to find another source for the text of the item. To do this:

Read more →
Previous page Next page