Fennec/NativeUI
< Fennec
Jump to navigation
Jump to search
Features
- Awesome Bar – Go to your favorite sites in just a couple of keystrokes with intelligent and personalized searching
- Firefox Sync – Sync your Firefox tabs, history, bookmarks and passwords between your desktop and mobile device for a seamless browsing experience
- Tabbed browsing – View open tabs as thumbnails to easily identify and select the Web page you’d like to go to next
- Fast - Instantly startup (<300ms)
- Small - Low memory usage (consistent with other browsers)
- Energy - Doesn't eat your battery
Background
How To Build
The project repository is here: http://hg.mozilla.org/projects/birch
Follow the instructions from Mobile/Fennec/Android. Build as you normally would (make -f client.mk), just with a different mozconfig.
Here's an example mozconfig:
# Add the correct paths here: ac_add_options --with-android-ndk="$HOME/android-ndk-r6" ac_add_options --with-android-sdk="$HOME/android-sdk-linux_x86/platforms/android-13" ac_add_options --with-android-version=5 # android options ac_add_options --enable-application=mobile ac_add_options --target=arm-linux-androideabi ac_add_options --with-endian=little ac_add_options --with-ccache ac_add_options --enable-tests mk_add_options MOZ_OBJDIR=./objdir-droid mk_add_options MOZ_MAKE_FLAGS="-j9 -s"
hg clone http://hg.mozilla.org/projects/birch/ src cd src vi mozconfig-droid ... export MOZCONFIG=~/src/mozconfig-droid make -f client.mk
Architecture Overview
Get a bird's eye view of how the native UI version of Fennec is structured.
Known Issue
Near Term
- tabs (dougt / ram)
- Dialogs
- http auth
- nsIPrompt
- cert auth (xul)
- door hangers (gcp)
- content permission (geolocation, desktop notification, indexedDb)
- popup permission
- preferences (alexp)
- bookmarking (blassey)
- Panning perf (clord)
- zooming perf (clord)
- IME (alexp)
- Don't initialize this early. https://github.com/snorp/mozilla-central/blob/faster/embedding/android/GeckoApp.java#L383. So far, the only usage is here: https://github.com/snorp/mozilla-central/blob/faster/embedding/android/GeckoAppShell.java#L1717 -- which is after a page has loaded. I would recommend the initialization happen right there, when the mDb is null. Or probably at the end of onCreate in GeckApp.java
- https://github.com/snorp/mozilla-central/blob/faster/embedding/android/AwesomeBar.java#L178 -- This can be moved to an AsyncTask. A database access can happen in the background and the results can be pushed to the UI. In that way, the responsiveness of AwesomeBar will be faster and better.
- Setting the FilterQueryProvider automatically processes the SQL in a background thread (see http://developer.android.com/reference/android/widget/CursorAdapter.html#runQueryOnBackgroundThread%28java.lang.CharSequence%29). I verified this by adding a Thread.sleep() call in the filter - the UI remains responsive.
- Better to use styles in layout. This helps in reusability. (sriram)
- GeckoApp activity uses a lot of static variables. This has issues while rotation (they tend to hold previous values). It's better to avoid static variables and use getter and setters. [see http://stackoverflow.com/questions/2475978/using-static-variables-in-android]
- Change directory structure under embedding/android to follow a more traditional Android app layout (src, res, gen, etc) for better integration with Eclipse.
Mid Term
- Sync support (thebnich) ** see https://github.com/rnewman/clj-weave to start
- page info
- sharing
- Ability to pan around last screen shot.
- Remove unused cruft from the APK.
Longer term
- addons (going to use jetpack - mossop)
- Download
- find on page
- selection
- removing xul
- profile migration
- Touch events
Low priority bugs
- The HttpRequestObsever is not appropriate for one.
http://hg.mozilla.org/projects/birch/file/2f3d39316c54/mobile/chrome/content/browser.js#l22
- OpenURI is not supposed to load the frame, only provide the frame:
http://hg.mozilla.org/projects/birch/file/2f3d39316c54/mobile/chrome/content/browser.js#l80