Necessitas/TODO

From KDE Community Wiki
Revision as of 07:26, 7 June 2011 by Mingw.android (talk | contribs) (Added some more TODO items, Windows stuff mostly.)

Welcome to the Necessitas TODO wiki page

Qt framework

Must be implemented before first beta release

Android assets support

  • 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.

OpenGL support

  • 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:
    • you can't create more than one OpenGL context (it seems this limitation is not resent any more on latest platforms).
    • 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:
    • Using a pixmap or a pbuffer surface, for every TLW, make them textures and then compose them to a windows surface.
      • pro: - the user can do anything with that surface.
      • 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

  • We must to implement an android plugin, Qt apps must look the same as native Android apps.

Android menus simulation/use

  • We need to find a way to use android menus or to paint them from Qt.
    • 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 )
    • using our own menu implementation, it will be a little difficult to simulate Android's menus, but it will be very flexible.

QDesktopServices

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

QSystemTrayIcon

Find a way to compile for all android platforms at once

  • We need to find a way to make qmake to compile for all android platforms at once. This feature is very important for android platform.

QAtomic implementation

  • When I switched from qatomic_armv5.h implementation to qatomic_avr32.h (which uses the gcc builtin atomics) I had a very unpleasant surprise, all apps built with armv5 ceased to run because of ABI changes (I had to do that change because your arm5 implementation could not be compiled with thumb instructions and AFAIK it doesn't have SMP support), the problem is I don't know if the gcc builtin atomics are the best choice, because are not officially supported by Google and it may be removed from their future toolchains, Google's provides and supports some basic atomic operations (check android-ndk-r5b/platforms/android-4/arch-arm/usr/include/sys/atomics.h), I'm not an expert in this area, so, if someone can help me on this topic I'll appreciate a lot. Keep in mind that an application which was built using Qt armv5 it should work using Qt amrv7 libs.

Can be safely implemented after first beta release

Qt dialogs

QtCreator

Find a way to compile for all android platforms at once, and handle the results corectly

  • 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).

Prepare the package for android market publishing

  • Prepare the package for android market publishing, e.g. release compilation, signing, etc.

Documentation

  • Written documentation for Android platform

QtMobility

Support all android platforms

  • Find a way to support as many android platforms we can. Currently platforms < android-8 are not supported by all QtMobility modules.

QtWebKit

Speed and memory usage

  • 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)

Gestures

  • Gestures are not working well, the panning is not smooth enough and the pinch zoom is not working at all.

Ministro

Add multilanguage support

Clean up the code

Necessitas SDK

Platform Issues

Windows

  • Fix the plugins copying (in general, using cp, rm etc) on Windows -> 2 ways, I can provide these exes or we can get platform detection working properly and switch on it in the mkspecs)
  • 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?