Necessitas/TODO: Difference between revisions

From KDE Community Wiki
 
(48 intermediate revisions by 2 users not shown)
Line 1: Line 1:
Welcome to the Necessitas TODO wiki page
Welcome to the Necessitas TODO wiki page


==Qt framework==
= Qt framework =


===Must be implemented before first beta release===
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"


====Android assets support====
! Status
* Android assets are readonly resources and are a must for any android applications, the implementation will be simple, the problem is how to handle it in Qt, my suggestion is to use the existing Qt resources mechanism: let's say that the application wants to open a file (":/path/my_file"), Qt will search for that file in the application resources, and if is not found, then it will also search it in android assets, more about android assets can be found here: http://developer.android.com/reference/android/content/res/AssetManager.html.
! Description
! Difficulty


====OpenGL support====
{{FeatureInProgress
* OpenGL support, this, IMHO, is the hardest feature to implement. Before we go further, I'd like to make something clear: I'm not an OpenGL expert, actually I'm an OpenGL beginner! Let me start with an introduction about Android OpenGL limitations:
|Compile and run all test and benchmarks, also make sure they pass
** you can't create more than one OpenGL context (it seems this limitation is not resent any more on latest platforms).
|Easy
** you can't create more than one Window surface, actually you can create more than one, but they are useless because you can't control their Z order.
}}
** you can create additionally Pixel buffer surfaces.


* The problem is that Qt needs an OpenGL surface for every Top Level Widget (TLW), so, because on Android you can't create more than one Window surfaces, I've see two possible solutions:
{{FeatureInProgress
** Using a pixmap or a pbuffer surface, for every TLW, make them textures and then compose them to a windows surface.
|QSystemTrayIcon
***pro: - the user can do anything with that surface.
|Medium}}
***con: - the speed will be slow.
** Using frame buffer objects, this is our favorite approach, the problem is that your OpenGL implementation needs to be changed (a lot).
***pro: - probably is the fastest way to do it.
***con:
****- only platforms >=5 are supports OpenGL ES 2, android-4 platform has FBO support only via OpenGL extensions.
****- the users are limited.


====Android style plugin====
{{FeatureInProgress
* We must to implement an android plugin, Qt apps must look the same as native Android apps.
|x86 support
|Medium}}


====Android menus simulation/use====
{{FeatureInProgress
* We need to find a way to use android menus or to paint them from Qt.
|Android style plugin.Qt apps must look the same as native Android apps.
- using the existing Android menu system is the easiest but it has some limitations (e.g you can add a submenu to any menu (except a submenu), only menus can have icons, etc., check http://developer.android.com/guide/topics/ui/menus.html )
|Hard}}
- using our own menu implementation, it will be a little difficult to simulate Android's menus, but it will be very flexible.


* Aurelien Gateau contact me about this topic and he suggest me to use his work to implement this feature, check http://agateau.wordpress.com/2010/05/10/getting-menus-out-of-application-windows/ and http://gitorious.org/~agateau/qt/agateau-qt.
{{FeatureInProgress
|Android menus simulation/use. We need to find a way to use android native menus.
|Hard}}


{{FeatureTodo
|Find a way to compile for all android platforms at once, switch to [http://doc-snapshot.qt-project.org/qbs/index.html QBS]
|Medium}}
|}


====QDesktopServices====
= QtCreator =
* QDesktopServices implementation (at least for openUrl) IMHO it should be handled by platform plugin .


====QSystemTrayIcon====
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"
* QSystemTrayIcon must be implemented (using Android's notifications system, http://developer.android.com/guide/topics/ui/notifiers/notifications.html).Also this one should be implemented outside qt tree (platform plugin).
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"


====Find a way to compile for all android platforms at once====
! Status
This feature is very important for android platform.
! Description
! Difficulty


===Can be safely implemented after first beta release===
{{FeatureInProgress
====Qt dialogs====
|x86 support
* Android comes with a few dialogs (http://developer.android.com/reference/android/app/Dialog.html) and I don't think Qt can use Android's native dialogs, so, if they are implemented in Qt it should not be a problem.
|Easy}}


==QtCreator==
{{FeatureTodo
===Find a way to compile for all android platforms at once, and handle the results corectly===
| Switch to [http://doc-snapshot.qt-project.org/qbs/index.html QBS], is the only way to compile for all android platforms at once
* Find a way to compile for all android platforms at once, and handle the results corectly, (e.g. copy arm v5 libs to armeabi forlder and arm v7 libs to armeabi-v7a forlder).
| Hard }}
|}


===Prepare the package for android market publishing===
=QtMobility=
* Prepare the package for android market publishing, e.g. release compilation, signing, etc.
==Support all android platforms==
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"


===Documentation===
! Status
* Written documentation for Android platform
! Description
! Difficulty


==QtMobility==
{{FeatureTodo
|Contacts implementation needs to be reviewd/rewritten, it crashes on my phone with 150+ contacts.
|Medium}}


{{FeatureTodo
|Check all mobility modules
|Medium}}


==QtWebKit==
{{FeatureTodo
===Speed and memory usage===
|Multimedia module
* QtWebKit 2.1.x is still 2x times slower than Google's WebKit, also the memory consumption is still insanely high (to run SunSpider benchmark, needs >200Mb)
|Hard}}


==Ministro==
{{FeatureTodo
===Add multilanguage support===
|Proper camera implementation
===Clean up the code===
|Hard}}


==Necessitas SDK==
|}
 
=QtWebKit=
==Speed==
* QtWebKit 2.2.x is still 2x times slower than Google's WebKit.
 
=Android QML Controls=
Create Android QML Controls which looks and feel like native Android controls, you have to use Ministro's extracted look & feel data for every device which is already used by classic controls. To find out how to use the data, please take a look to qandroidstyle plugin.
Yes we know that there are a some implementation out there based on MeeGO/Symbian implementations, the problem is that apps made using these implementation looks & feels like MeeGO/Symbian apps not like Android apps.
 
=QBS=
* QBS is extremely important for QtCreator used by Necessitas project, it will actually make the difference between another IDE for Android and '''the''' IDE for Android.
 
 
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"
 
! Status
! Description
! Difficulty
 
{{FeatureTodo
|Find a better way to probe the toolchains and platforms, check [http://lists.qt-project.org/pipermail/qbs/2012-March/000062.html this] and [http://lists.qt-project.org/pipermail/qbs/2012-June/000159.html this] threads.
|Hard}}
 
{{FeatureTodo
| Find a way to configure the projects
|Hard }}
|}
 
=Platform Issues=
==Windows==
* Make it so that the Windows version can be built from Linux (mingw cross compiler support, quite a lot of work, esp. building Python which needs to run itself to compile the modules under Wine)
* Fix make.exe -j support (would help with building on Windows as otherwise it requires baby-sitting).
* Add support to 7za and installer-framework for symbolic links on Windows (see msdos command mklink) so there's no need to remove symlinks from the packages (and also MinGW's ln program)
* Fix webkit build failure on Windows and Mac OS X
* Fix installer framework so that it can install from local packages folder instead of always having to use the network -> this already works on Mac OS X (just modify config.xml to use file:/usr/www/ etc), but not on Windows (where it works partially, updates.xml is loaded but nothing else); I'm not sure about Linux, maybe add a command line option to override the repo url?

Latest revision as of 11:03, 30 July 2012

Welcome to the Necessitas TODO wiki page

Qt framework

Status Description Difficulty
IN PROGRESS Compile and run all test and benchmarks, also make sure they pass Easy


IN PROGRESS QSystemTrayIcon Medium


IN PROGRESS x86 support Medium


IN PROGRESS Android style plugin.Qt apps must look the same as native Android apps. Hard


IN PROGRESS Android menus simulation/use. We need to find a way to use android native menus. Hard


TO DO Find a way to compile for all android platforms at once, switch to QBS Medium <{{{3}}}>

QtCreator

Status Description Difficulty
IN PROGRESS x86 support Easy


TO DO Switch to QBS, is the only way to compile for all android platforms at once Hard <{{{3}}}>

QtMobility

Support all android platforms

Status Description Difficulty
TO DO Contacts implementation needs to be reviewd/rewritten, it crashes on my phone with 150+ contacts. Medium <{{{3}}}>


TO DO Check all mobility modules Medium <{{{3}}}>


TO DO Multimedia module Hard <{{{3}}}>


TO DO Proper camera implementation Hard <{{{3}}}>


QtWebKit

Speed

  • QtWebKit 2.2.x is still 2x times slower than Google's WebKit.

Android QML Controls

Create Android QML Controls which looks and feel like native Android controls, you have to use Ministro's extracted look & feel data for every device which is already used by classic controls. To find out how to use the data, please take a look to qandroidstyle plugin. Yes we know that there are a some implementation out there based on MeeGO/Symbian implementations, the problem is that apps made using these implementation looks & feels like MeeGO/Symbian apps not like Android apps.

QBS

  • QBS is extremely important for QtCreator used by Necessitas project, it will actually make the difference between another IDE for Android and the IDE for Android.


Status Description Difficulty
TO DO Find a better way to probe the toolchains and platforms, check this and this threads. Hard <{{{3}}}>


TO DO Find a way to configure the projects Hard <{{{3}}}>

Platform Issues

Windows

  • Make it so that the Windows version can be built from Linux (mingw cross compiler support, quite a lot of work, esp. building Python which needs to run itself to compile the modules under Wine)
  • Fix make.exe -j support (would help with building on Windows as otherwise it requires baby-sitting).
  • Add support to 7za and installer-framework for symbolic links on Windows (see msdos command mklink) so there's no need to remove symlinks from the packages (and also MinGW's ln program)
  • Fix webkit build failure on Windows and Mac OS X
  • Fix installer framework so that it can install from local packages folder instead of always having to use the network -> this already works on Mac OS X (just modify config.xml to use file:/usr/www/ etc), but not on Windows (where it works partially, updates.xml is loaded but nothing else); I'm not sure about Linux, maybe add a command line option to override the repo url?