Can Corona Do This? Checkable list, iTunes player, Etc.

I am looking to build an educational language learning app for a client that has the following features:

Choose  a course for learning 1000 words each out of 5000 base vocabulary for a language (English to start). 

A screen with list of words to learn, with columns for number, word, meaning, and check (for checking it off). 

A screen where a song from iTunes can be played, and the user scrolls through the lyrics (too hard to auto-scroll & sync?), and when he hears a word in the song, can check off the word (box below player with number / Word / Meaning / check) and that gets recorded in the master list of words (shown on list screen) they’ve learned. 

400 songs to learn words from - user downloads from iTunes to play –  and a vocabulary of 5000 words for English, with the meaning in Japanese. 

Does this sound doable in Corona? How difficult? 

Thanks!

I don’t see any thing on your list that Corona SDK can’t do. I doubt you can reasonably sync scrolling the text with the music, but everything else is possible.

How difficult? Depends on your programming experience. An experienced developer could probably have the core of this working  in a couple of weeks of full time work.

Rob

Rob – I agree it’s very probably doable from my research. I haven’t used Corona for a few years, and the project I did before was very different (a 2D game).

I’m looking at things like TableView widget, and the iTunes plugin. 

https://docs.coronalabs.com/plugin/iTunes/

I’ll be back… 

Thanks!!

Rob - What about a checklist, and the Japanese characters? See the screenshot - little rectangles are checks. This info would be pulled from a database I assume. 

screenshot_checklist.jpg

Thanks

Corona SDK is fully UTF-8 compatible. You can use a full range of Japanese characters as part of display.newText() calls and stored in databases and such.

As for check boxes, that can be done with widget.newSwitch(). But there are also other UI ways to display them.

OK great.

One more question (hopefully): do you think this app could be done without a database, but rather by creating screens (scripts I imagine), for example one for each song. The idea is to minimize complexity and cost. My client has the idea that I could create a page of one of the 400 songs, and then he can provide links via an API to pull in cover art and song info, and the word list associated with it. So all I’d have to make is the basic 3 screens of the app. But seems to me to do the of checklists for example, requires *some* kind of database? 

Thanks!

If you plan to store the values of the check boxes between settings you have to have a way to store the data. There are two ways:

  1. a flat file (possibly using some easy Lua table saving techniques, where it can save a table out and read it back).

  2. a database

The first option is hyper simple. We have tutorials and community code that lets you do it easily. But you have to load the entire table at once and have all of the data in memory. The second option is searchable. You can store all your song’s check marks, then look up the one you’re showing and have a smaller memory footprint.

Rob

Rob, What version of Java should I install on a Mac with OS X 10.10.5 to be compatible with Corona (for deploying to Android)? 

Also if you can point me in the direction of what techniques to add interactive checks (that can be saved and retrieved) to a  list:

I take I somehow have to combine:

TableView widget

widget.newSwitch()

onRowTouch

is that good guess? 

are there any examples out there that do this (I’ve searched far and wide)? 

(and then a database to store and retrieve it later)…

Thanks!

There is an Apple provided version of Java 6 which I know to work. You should try the latest version of Java 7 if you can’t find the Apple version of 6.

You’re off to a good start exploring widget.newTableView and widget.newSwitch().  The onRowTouch() is part of the tableView.  For the database storage look at sqlite3. If you just want to save a Lua table with your values in it, you can google “corona loadsave” to find a simple table storage/retrieval function.

Rob

I found some code that just inserts text on row touch, and added text that *is* simply a checkmark - perhaps this could simplify it, so I don’t have to add add a layer on top (which I take it widget.newSwitch()  is - basically a graphics layer)?   

local function onRowTouch(e) local str = e.target.titleTxt.text .. "✔" e.target.titleTxt.text = str e.target.titleTxt:setFillColor(1, 0, 0, 1) end

Then I assume some statements could be added to send this – the row checked – to a file or database - then retrieved and added to another list (or back to this one). 

Thanks for the tips on sql and loadsave. I’ll look them up. 

I don’t see any thing on your list that Corona SDK can’t do. I doubt you can reasonably sync scrolling the text with the music, but everything else is possible.

How difficult? Depends on your programming experience. An experienced developer could probably have the core of this working  in a couple of weeks of full time work.

Rob

Rob – I agree it’s very probably doable from my research. I haven’t used Corona for a few years, and the project I did before was very different (a 2D game).

I’m looking at things like TableView widget, and the iTunes plugin. 

https://docs.coronalabs.com/plugin/iTunes/

I’ll be back… 

Thanks!!

Rob - What about a checklist, and the Japanese characters? See the screenshot - little rectangles are checks. This info would be pulled from a database I assume. 

screenshot_checklist.jpg

Thanks

Corona SDK is fully UTF-8 compatible. You can use a full range of Japanese characters as part of display.newText() calls and stored in databases and such.

As for check boxes, that can be done with widget.newSwitch(). But there are also other UI ways to display them.

OK great.

One more question (hopefully): do you think this app could be done without a database, but rather by creating screens (scripts I imagine), for example one for each song. The idea is to minimize complexity and cost. My client has the idea that I could create a page of one of the 400 songs, and then he can provide links via an API to pull in cover art and song info, and the word list associated with it. So all I’d have to make is the basic 3 screens of the app. But seems to me to do the of checklists for example, requires *some* kind of database? 

Thanks!

If you plan to store the values of the check boxes between settings you have to have a way to store the data. There are two ways:

  1. a flat file (possibly using some easy Lua table saving techniques, where it can save a table out and read it back).

  2. a database

The first option is hyper simple. We have tutorials and community code that lets you do it easily. But you have to load the entire table at once and have all of the data in memory. The second option is searchable. You can store all your song’s check marks, then look up the one you’re showing and have a smaller memory footprint.

Rob

Rob, What version of Java should I install on a Mac with OS X 10.10.5 to be compatible with Corona (for deploying to Android)? 

Also if you can point me in the direction of what techniques to add interactive checks (that can be saved and retrieved) to a  list:

I take I somehow have to combine:

TableView widget

widget.newSwitch()

onRowTouch

is that good guess? 

are there any examples out there that do this (I’ve searched far and wide)? 

(and then a database to store and retrieve it later)…

Thanks!

There is an Apple provided version of Java 6 which I know to work. You should try the latest version of Java 7 if you can’t find the Apple version of 6.

You’re off to a good start exploring widget.newTableView and widget.newSwitch().  The onRowTouch() is part of the tableView.  For the database storage look at sqlite3. If you just want to save a Lua table with your values in it, you can google “corona loadsave” to find a simple table storage/retrieval function.

Rob

I found some code that just inserts text on row touch, and added text that *is* simply a checkmark - perhaps this could simplify it, so I don’t have to add add a layer on top (which I take it widget.newSwitch()  is - basically a graphics layer)?   

local function onRowTouch(e) local str = e.target.titleTxt.text .. "✔" e.target.titleTxt.text = str e.target.titleTxt:setFillColor(1, 0, 0, 1) end

Then I assume some statements could be added to send this – the row checked – to a file or database - then retrieved and added to another list (or back to this one). 

Thanks for the tips on sql and loadsave. I’ll look them up.