With the latest update you can create new ways to sort your ideas.
At work, I’m learning more about how to use instrumentation tests with Android development. I’m now applying this to my Idea Growr app.
In the beginning I had the problem of not being able to take screenshots of pop-up windows with Spoon. So I’m using the Falcon library to make this happen.
Than I ran into the problem that Idea Growr supports android version with SDK 9 (really old), and the Falcon library has a minimum of SDK 10. So I needed to add a line in my manifest file to work around that:
<uses-sdk tools:overrideLibrary="com.jraska.falcon.spooncompat, com.jraska.falcon" />
At first that didn’t work, but then I found out that I should put it in a separate AndroidManifest file.
I’ve complained about this before, but I keep being surprised how things that seem like ‘core’ parts of Android require you to do some quite obscure Googling. But on the positive side, it’s quite easy to make test scenarios with Espresso.
One of the main goals is to make it easier to develop new features without accidentally breaking existing functionality. Also, I can much easier see how the app works on different devices (emulators).
I’m not there yet. Todo:
- Add more tests
I’ve made a couple of basic tests, like creating an idea with a note, but there is more to be done.
- Figure out how to best test for mutiple languages
There doesn’t seem to be something in Espresso for doing the same test for multiple languages. But it should be do-able
- Figure out screen orientation changes
- Add even more tests
As of version 1.54 of Idea Growr, you can now import your ideas. This enables you to move all your ideas to a new phone, or collaborate with someone by sharing your idea(s).
How to import
This assumes you have exported your ideas to an app like Dropbox. You can export your ideas using the up-arrow-icon on the main screen.
1. Download the .zip file to your device
Go to your Dropbox app (or where you have stored your idea) and download the .zip file to your device. For instance ideas-2016-04-07.zip to your Download folder.
2. Open Idea Growr and go to settings
3. Tap the ‘Import from zip file’ button
4. Select your zip file from folder you downloaded to in step 1
A progress bar will show the progress of the unzipping. This does not mean the ideas are imported yet.
5. Select how many ideas you want to import
6. Select ideas to import (optional)
7. Idea Growr checks for potential duplicates. If those are found, select if you want to import them.
The app looks at the ideas in your zip file and can see that one or more of these ideas have a name this is also in your current list of ideas in your app. It’s up to you what to do next:
- Import all anyway
- Skip the ones that are probably duplicates
- Import the content of the ideas with a known name as notes.
I struggled a bit with how to best describe this. If you want to help out, let me know in the comments if this seems clear from the screenshot or how it might be improved.
8 After another progress bar your ideas are imported
And that’s it. If you have any questions, bugs or feature requests, let me know in the comments.
I have added a couple of new features in Idea Growr with the goal to give you more control over your own questions.
- Create and edit multiple of your own question sets
- For every idea select what ideas you want to use
- Select any of the 11 languages in the settings
Create and edit multiple of your own question sets
When I rewrote the database last year, I set up a structure that would allow me to do this update. I hope to later use this as a first step to a simple platform where you can share and import your question sets.
I put a lot of effort into creating a list of fields, and I was very close. But in the end I had to use a pop-up dialog where you can enter your question. I could write a rant about how Android should make this easy, but I won’t.
For every idea select what ideas you want to use
I got a number of requests for this feature and it is one of those things that I hadn’t thought about myself. You could say that seeing a title of a question set you aren’t using is not a problem. But when you really think about it does matter.
Idea Growr is about helping you in your thinking process and it makes sense to want to remove as much clutter as possible.
Select any of the 11 languages in the settings
The app always supported a large number of languages. I wrote about it from the start. The way that Android works out of the box, is that it will use the language of your device. I received feedback that people wanted to switch languages. I can understand, because to be honest, most of these translations are far from perfect.
While some have helped, I use Google translate for most of them. The thought being that if you don’t know English, you would rather have something you could read but had some strange sentences, than have an app that you can’t read at all.
You might think it would be easy to implement such a feature, once you have all the translations, but it was not so simple. Either way, I now have it working and I wonder if more people will switch to English or use the feature to switch to a different language at all.
As often requested by users, you can now* add a picture to a note.
To keep things as simple as before, you can only add a picture to a note. So no need for a media library or other (mental) overhead.
I could re-use some code from my other app, My Picture Books. And while I was at it, I rewrote most of the create/edit note code making it much easier to maintain.
Next up will probably be the option to export all your ideas in a .zip file that also includes all your pictures and audio, just like I made for My Picture Books. It might even be possible to export ideas from Idea Growr and import them to My Picture Books or the other way around. I’ll have to look into that :).
* Now = version 1.48 rolling out today, but not for all users at once.
I’m working on an update to Idea Growr that gives users the option to set the language of the app. At first just the option to either ‘use device language’ or ‘English’.
How language works in Android
If you develop an Android app you use folders like values-fr for all your French texts, and values-pt for Portuguese, etc. When a user opens the app, Android looks at the language that is set at the device level and it will pick that same language for your app.
You might think it would be easy to give users control over the language in the app, since the folder structure is already there. But it’s harder than you would expect:
- You can change something that is called ‘locale’. But that sort of tricks Android into thinking that there is a different device language. This makes it rather hard to later on enable the radio button for ‘use the device language’. In the comments of this Stack Overflow question you see a whole range of options. Taking fully different approaches.
- But these and other solutions you find online might be from 2012, and since then new Android versions make that those solutions no longer (fully) work.
- Then when you think you get it to work, strange things happen, like action bar titles that won’t change immediately but sometimes later on. Again a Stack Overflow question shows I’m not the only one with this problem.
So now I’m at the point that I try all sort of different things people are saying in the comments of Stack Overflow questions. I have the feeling that many developers would say that this is part of the process of software development, but what I find troubling about this is that I’m not learning anything.
I want to become a better developer, but at the moment I think that I actually could not have known how to do this with a better process or general software development skills. It’s just that Android assumes that users want apps to have the same language as their device. While I’m not holding my breath, I added a request for the Android team for an easy way to let users select the language of their apps.
With Idea Growr you can quickly write down your ideas. The app stores all your ideas on your phone, not online. If you buy a new phone it would be nice if you can take your ideas with you. You can do this by the export and import feature. Here a quick guide on how to do that.
Exporting and importing audio files is not yet possible.
Exporting your ideas and notes
In the phone that holds all your ideas, on the start screen in the top bar there is an arrow up icon.
If you tap that icon it says ‘Send all ideas and notes’ and you can select an app on your phone where those (it’s text) will go to.
For instance you can select your e-mail app and send an e-mail to yourself.
Don’t change the text of the e-mail. This is the text you are later going to import. The import feature relies on that the text is structured in a certain way.
Import ideas (on your new phone)
The text you used sent yourself you can use to import all ideas and notes to a different device, for instance your new phone.
On your (new) phone or tablet first go to your mail and select all the text of the e-mail and copy it.
Then you open the Idea Growr app and tap the gear icon in the top bar. In earlier versions the app had a different settings icon.
On the setting screen tap ‘import from text’. I plan to clean up this settings screen, so in the future this screen may look different.
You then see this screen where you can do the real importing.
In this screen you paste the text that you copied earlier from your e-mail (or other app). You then press ‘Save ideas and notes’ and the following will happen:
- Every idea will be created
- Every note will be added to this idea
- Every answer to every question will be converted to a note. While not ideal, no information is lost.
If you run into any problems, let me now in the comments or send me an e-mail.
First, the database update was a 100% success
I was just looking at my Analytics on the app, and I am happy to find out there where zero people that failed with their database update. I wrote earlier on why I rewrote the whole database. Good to see that extra effort payed off.
Implementing search was harder than I expected. There is a specific searchview in Android that is supposed to do the trick, but I was not able to use it. This is because the searchview is not compatible with a library I used for my list views (Easy Adapter). It turns out that library does not give the type of adapter that is needed to do a search filter.
While in theory I might be able to build around that, I was to much in unfamiliar coding terrain.. This conversation was about my exact problem, but my understanding of what was going on is too limited. Also I figured I could first try to overstep the problem by not using the searchview.
So I created a regular input field, and do the filter on the list ‘by hand’. I needed to jump some extra hoops, but in the end I got it working. The main disadvantage is that it doesn’t have a smooth animation like the regular searchview. But since time is precious and I got other things to do, I am happy with the result.
More sort options
In the beginning in 2013 sorting was done by using these buttons:
I thought that might not always look good in all languages. So I made icons for sorting back in 2014:
What I gained was a cleaner look, and no language issues. What I lost was clarity. My assumption was that sorting was only relevant for hardcore users who had many ideas. They would learn what those icons meant by using them.
That may or not be true, but in the end I wanted to add more sorting and filtering features. Using icons was not scalable. With the latest updates (v.1.43, 2015), sorting now looks like this:
It has become fully textual. There is still the challenge of how to name them, and I’d like to hear from you in the comments what you think of this way of describing the sorting options. Perhaps I should rename some to be shorter or more easily read.
I won’t get into the details of it, I also added search, more sorting and starring to the notes screen.
Allow user to set what question sets to show on default
Every now and then I get an e-mail for a feature request. One of them I think I got years ago, was the need to keep the idea overview screen clean by hiding question sets that you don’t plan to use.
It never got a high priority, since I thought that with just a couple of question sets the current situation was acceptable. But now I have written a couple of new question sets that I’d like to add. Because of this I decided to first give the user more control over how the idea screen can look.
In the settings the user can now select what question sets to show on default:
At Questions you can select ‘All sets containing answers, and:’
The user can here (un)check the question sets that should be shown on default on the idea overview screen. In order to help the user not get lost, you cannot hide questions you have written answers for.
Up next: more question sets
The settings screen is getting a bit crowded, and the Your own questions part eventually will need to move to a separate screen. But for now I thought it was acceptable to add it like this. I rather first invest in adding more question sets and see what people think of them. So that will be the next update.
After more than a year a new Idea Growr app update is ready!
New code & new database
As described here, I decided to fully rewrite the code of the app.
The main reasons for the new database being:
- More scalable
- Easier to add new features
- Makes use of a library that’s easier to code for
While my main focus was on the database and code, I wanted to at least give the users one new feature. You can now star an idea and it will be easier to find it in the list of ideas.
Different use of colours
Three reasons I changed the way colours are used:
- The old orange didn’t have enough contrast when used with small text on white
- Making the first steps towards Material Design guidelines, it advices the use of a bright accent colour.
- I expect to add features like audio and images. This means that my earlier logic of ‘notes are orange’ and ‘ideas are blue’ can no longer be applied. Also because I can imagine in the future that images can be used for both an idea and a note.
The main difference is that now orange is the accent color used to highlight important elements in the layout. Overall I believe I didn’t move away too far from the feeling the app used to have. So I hope users will find the update a refreshment and not too drastic.
Moving towards a Material Design I made some changes to the layout. The most changes can be found in the idea overview, shown at the top.
Also the all ideas layout has changed a bit. The sorting icons (last created, last edited, alphabet) are now more easy on the eye.
I’m aware that these icons don’t quite speak for themselves. But they are for ‘power users’ that will find out by themselves (I hope).
In the future, I want to add more ways to sort like based on number of notes, starred, what question sets are used. I’ll probably make us of a drop down then and get rid of these icons.
Copy & translations
Not much changed, but I now made sure that all languages are fully translated. And by translated I mean Google Translation translated. I also cleaned up the strings.xml files that hold all the texts. This should make it much easier to maintain the texts in the future.
If you see text that is wrongly translated, let me know and I can improve the translation with the following update.
Staged roll out
I’m pushing out the update today with a staged roll out. Only 5% of users will be able to do the update. This way I can see if I missed any bugs.
I’m working on a new total rewrite of the code of Idea Growr. The main point is that the database will have a new structure that will allow for more question sets and will make it easier to add more features in the future.
A simpler, but slower database
This new update will require a database migration. For the new version I will make use of a library called ActiveAndroid. It makes it much easier to work with the database. A small price to pay, is that it’s slower. Just a couple of microseconds slower for a user. So there is nothing to notice.
The only time when a user does notice the slowness of the library is when all the new ideas will be migrated to the new database. After a number of tweaks I have been able to get the migration time down to 7.5 sconds for the migration of 250 ideas with lots of content for every idea.
To be a lazy coder or not be a lazy coder
The easiest thing for me would be to run this database migration when the user starts the app before any screen is shown to the user.
The disadvantage is that the screen of the user will freeze during this upgrade. Now my question was, how bad would this be? It will require me probably a 16 hours of extra coding and testing to do this differently in a way that gives the user good feedback on what is going on.
So how much would some of the most active users have to wait?
First let me state that I had contact with someone who claimed to have created over 500 ideas. He created 10 ideas every day. So the main goal is actually to see if this is realistic, or if this person was just stating this to impress me.
I track how often the save button is pressed, and it’s true that a couple of users have pressed that button over 500 hundred times. Surprisingly someone also deleted most of those ideas. I don’t know that that means, but it’s still interesting.
Either way, the hundreds of ideas are the most loyal users. If they happen to have a bit of a slow device, perhaps they would have to wait over 30 seconds for their database to migrate. That would give them the idea the app has crashed, perhaps stop the app, and will never have enough patience to do the full update, assume the app is broken and delete it. That way they would lose all their (500+ !!) ideas. Converting my most happy users into the most unhappy users in just a couple of minutes..
So I just wanted to share with you that I will be making the extra effort to give decent feedback on the migration update.
Now my todo list for the Idea Growr update contains:
- Do the database migration the nice way, including feedback on progress
- Build a ‘plan b’ for migration failure, where at least the user can export their ideas from the old database to a text file/e-mail. I can export the ideas from the old database that will not be deleted from the app (since it doesn’t take up much space). I will do many tests on emulators and real devices, and it should be impossible that anything goes wrong. Still, it’s always good to implement a plan B when the consequences of failure are quite profound.
- Update Google Analytics code (there is a new api).
- Update the layout of the app, making consistent use of the Material Design elements.
- Update About texts. Also I will remove the donation button, so I no longer need the in-app payment permission for the app.
- Clean up the translation files (strings.xml)
- Check the feedback e-mails I’ve gotten over the last year and see what features I might be able to do right away and would be put on my todo list.
After that, I can put the update live. For the user the new visual design will be the most prominent update. But for me the database will be the most important part.
After that I’m thinking about adding the following updates:
- ‘Star’ an idea, so you can easily find it back [ DONE ]
- Improved interface for settings, enabling you to select what question sets are shown for every idea. [ DONE ]
- Add images to idea [ DONE ]
- Add audio to idea [ DONE ]
- Add more question sets [ SOMEWHAT DONE ]
These are the things that I know I can do. After that I would have to learn myself some new coding skills. I’ll probably take another look at how a user could back-up and import, or even sync their ideas for different devices. Either by exporting and importing a text file, or by using a service like Dropbox or by developing a proper back-end with a service like FireBase.