A Windows Phone inspired launcher for Android written in OpenGL ES
- WP7 style tiles
- Notifications on tiles
- App list
- Pin apps to the screen
- Installed apps
- Resizable tiles
- Tile color
- Photos live tile
- Weather live tile
- Java
- OpenGL ES3.2
- API Level 34
demo.mp4
This is a living roadmap, all future milestones are refined as I go, and subject to change. M4 is in progress
M1 is all about laying the groundwork. Don't expect anything fancy here. At this phase the application is barely usable.
- 4 columns
- Show something on the tiles
- Show app icon on tiles
- Listview for the installed apps
- Icon on list elements
- Swipe between start page and application list page
- Handle tap event on tiles
- Long press on tiles
- Long press on list items
- Context menu
- Pin installed apps to the screen
- Unpin installed apps from the main screen
- Launch app from the app list
- Launch pinned apps
- Uninstall app
- Data structure to store tiles on the main screen
- Rearrange tiles on the grid
- Persist tile arrangement
Consolidation
- Extract draw contexts
- App-list state machine (also fixed fling to keep momentum)
- Tile-grid state machine
- Fix de-select bug when rearranging tiles
M2 is the beginning of making the launcher usable in everyday use-cases.
- Start working on "launcher apps/widgets/live tiles"
- Clock
- Launcher settings
- Show notification count on tiles
- Show notification content on corresponding tiles
- Change accent color
- Settings service
- Persist settings
- Resize tiles
- Generic list view
- Stack view
- Basic flex layout
- Support row and column layout modes
- Support alignment
- Flex layout as a child of flex layout
- Absolute layout
- Use Absolute layout for static tiles
- Use an Icon UI element instead of basic textures for icons to be able to use them in layouts
- Basic UI elements
- Button
- Checkbox
I'm already daily-driving, you shouldn't be.
- Checkbox border
- Fix: pin the same tile multiple times
- Don't show uninstall in the context menu for internal and system apps
- Fix: tile overlap after resize
- Remove uninstalled app from the applist/tilegrid
- Fix: Updated app is removed from the grid and app-list instead of updating
- Adjust notification count on tiles - don't allow overlap with the icon
- Fix: Scrolling while swiping on the main screen (scrolling on tile-grid keeps working, WHILE in SWIPING state) -- keeping an eye out, this was a sneaky one
- Fix: Some notifications are counted multiple times
- Use AbsoluteLayout in the ClockHUB tile
- Press "Home" button to jump back to the top of the tile-grid
Try to make it usable for the less crazy people
- GLES 3.2
- Make ContextMenu and MenuOption to use layouts and labels
- Make ListItem use high level UI components
- Embeddable ListView component
- Make ListPage use ListView internally
- Animations
- Swipe animation on StartScreen
- Animated snap on StartScreen when back or home button is pressed
- Animate scroll to top on tile-grid when home or back button is pressed
- Feedback to the user on tap (Rotation/animations/etc)
- Button
- Tiles
- List items
- InputBox
- Labels with onclick handlers
- Context menu
- Gesture system refactor
- Optimizations
- Fix: janky scroll on the TileGrid + remain in ScrollState while flinging
- Reduce GC pressure when measuring labels and textblocks during rendering
- Reduce icon texture size in the app-list to 96x96
- Reduce icon texture size on the tiles to 256x256
- On-demand alloc of internal apps and screens
- Optimize text wrapping in textblock
- Do not render list items that are outside the viewport
- Do not store textures when a single uniform color can be used (e.g. for the tile background)
- Bug fixes
- View crash logs
- Fix: crash on empty notification content
- Fix: crash on concurrent access to navigation stack
- Fix: crash when onDestroy() fires before onSurfaceCreated()
- Fix: null reference error crash in context menu
- Fix: call layout() in StackLayout on resize
- Fix: textblock: force-wrap overly wide words
- Fix: do not go into context menu state when long-pressing a non-interactive element (fixes null reference crash in context menu)
- Recycle unused temp bitmaps after texture upload
- Fix: crash: concurrent modification exception in TextReaderScreen.draw() -> StackLayout.draw() [hopefully fixed by moving gesture handling to the gl thread]
- Fix: Make context menu aware of the bottom and top margins of the list
- Fix: Pressing back on the AppList while context menu is opened makes the StartScreen stuck on the TileGrid
- Disable landscape mode
- Search bar in the app-list
- Kill ListPage in the app-list and replace it with a StackLayout + search box + ListView
- InputBox component
- ListView filter
- Scissor test on tiles to prevent drawing out of the tile
Try it at your own risk
- Make the crash-log viewer scrollable (ScrollView component)
- Adjust button border drawing when no icon is set
- About page in Launcher Settings
- Clear search-box when pressing back on the app-list
- Support cursor in input boxes
- Show current cursor position
- Set cursor position
- Insert text at cursor position
- Delete text at cursor position
- Try perspective projection instead of orthographic
- Use stencil buffer instead of scissor test for drawing tiles
- Use stencil buffer to clip list view
- Use stencil buffer to clip scroll view
- Fix: Uninstalling applications with multiple intents: Only one intent is removed from the applist
- Viewport culling on tile-grid
Feature-creep!
- More live-tiles
- Photos
- Weather
- Light mode/Dark mode support
- Dropdown component
- Theming support
- Animated tile resize
- Animate internal app/subpage navigation
- Re-ask for permissions from the launcher settings
- Input box cursor
- Proper cursor in the textbox
- Draggable cursor
- Top level overlay for adorners
- Fix: InputBox cursor behavior is different on the emulator then on real hardware (onComposingText etc...)
- Modal
- Animate modal open/close
- StackLayout horizontal orientation
- Extract ScreenNavigator into a separate component
- Cycling between notifications should be animated
- Debug menu
- Crash app button
- Restart app button
- Reset configuration button
- Scroll in edit mode:
- Scroll instead of moving the tile when the scroll movement is not started on the tile
- Adjust dragged tile position while auto-scrolling when reaching the boundaries
- Fix: crash on modal dismiss
- Fix: null pointer exception in TileGrid.Tile.getDragInfo() - maybe fixed by #85
- Fix: tile keeps spinning indefinitely after dismissing the last notification
- Fix: checkbox label is squashed
- Fix: Dirty flag is set on tiles on scroll stop
- Call layout() in the parent layout on a component resize
Cleaning up the accumulated mess
- Cache UI element size measurement results
- Double call of createTile in tileService
- Add stencil clipping to layouts
- Make Notification surface layout more symmetric
- Don't recalculate matrices every frame
- Open system settings from launcher settings
- TextBlock wrapping: never start a new line with space
- Discard keyboard on tapping outside the input box
- Fix: Scroll/drag lags behind finger movement
- Gesture handling is a hot garbage
- Show the context menu in the new overlay system
- Opening a large crash-log crashes the launcher on texture creation
- Fix: Adjust the layer offset of the opened pages so spinning tiles won't overlap with the animated page
- Relayout on child size change should be implicit
Creep got too big
- More live tiles
- Tasks
- Step Counter
- Device resolution independent UI (https://developer.android.com/training/multiscreen/screendensities)
- Make dragging in edit mode density aware
- Animate context menu
- Custom tile color
- Show a transparent tile on the drop-target
- Reduce memory footprint by not keeping bitmaps in memory (see the TODO App.java)
- Floating tiles in edit-mode
- 6 column mode setting
- Make checkbox use higher level components (then kill TileUtil.java)
- Show weather icon on the Glance tile
- Add tile adorners to the top level overlay
Janitor for hire
- Fix: TouchHandler: Force state reset on focus loss. Pressed state can stick when a touch moves out of bounds before hitting Move threshold
- Close dropdown on focus loss
Can we release now, pls?
- Landscape mode support
- Background image with transparent tiles
- WP7/7.8 start screen setting
- Group apps by the first letter in the app list
- Application icon
- Privacy policy
- Lower min API level / raise target API level
- License
- Generic pivot view (tabbed view)
- Settings subpages use pivot view with one tab
- Multi lang support
- Rebrand to something else than WPLauncher ES
- First start experience
- Pin some default tiles to the start screen on first start
- Quick tutorial on first start
Haven't seen these for a while
- Fix: All pinned tiles got cleared from the start screen - May have been fixed in M4
- Fix: black bar in the place of the notification count when all previous notifications were dismissed (on real hardware, needs repro)
- Fix: sometimes tiles don't spin when there is a notification (detected on real hardware, needs repro)
- Fix: Tile bg after resize is dark (needs repro)
Nice to have, but I feel no pressure to implement them for now
- Reconsider tile reflow logic (tile occupancy bool map, for every tile top to bottom -> remove -> find the highest available pos where it fits -> place?)

