Road to Surface Duo Xamarin App (#rTsd)
This is a forever work in progress Xamarin.Forms Android project which is intended to feature most of the new features that makes the upcoming Microsoft Surface Duo phone unique. It will use the awesome German Dr. Windows as data source for its articles.
tl;dr
This is neither an offical Dr. Windows app nor anything other than a highly motivated playground to dive deep into the Xamarin.Forms ecosystem with a dedicated usecase in mind.
It will target only Android devices and it's meant to include all other aspecs of Xamarin development such as a configurared continuous integration and analytics powerd by the Azure App Center.
This project is written and owned by a beginner and meant for beginners. It would be perfect if experts could mentor the project - but this is just a mind in the clouds.
If you are looking for the siblings app that's based on the UWP ecosystem to work with the Surface Neo, please see the GitHub repository tscholze/uwp-road-to-surface-neo. This project is currently on hold due to some emulator requirements that I cannot fulfill at the ment.
Build status
Service |
Status |
AppCenter |
|
Azure DevOps |
|
Sonar Cloud |
|
Releases
Structure
rTsd
Xamarin.Forms container that includes all shared functionality and features.
rTsd.Android
Android wrapper and platform-specifc implementations like custom rendereres, effects or assets.
Phases
- [x] Finding a usecase
- [x] Write down a motivation (e.g. Readme)
- [x] Write an email to
dualscreendev@microsoft.com
to get soon(tm) more information
- [x] Concept roughly an user interface
- [x] Get the project (template) up and running
- [x] Getting into important Xamarin / C# pattern
- [x] Write first MVP code
- [x] Implement first Surface Duo related features or layouts
- [x] Improve feature and code quality
- [x] Run it on a Surface Duo emulator
- [x] Add user opt-in for non Dr. Windows server requests
- [x] Add localization (resx)
- [ ] Write tests
- [x] Leverage CI with tests and deployments
- [x] Run it on an actual Surface Duo device
- [ ] Add analytics
Publications
- Microsoft: The Dual-Screen Developer Experience: Interview with Tobias Scholze
- Personal Blog: [Projekt] #rTsd – Road to Surface Duo
- Personal Podcast: LLD5 - Road To Surface Duo
- Personal Podcast: LLD8 - Ganz allein im Surface Duo Forum
- Dr. Windows: Surface Duo: Unser Tobias im Interview auf dem Microsoft-Blog
- Dr. Windows: #rTsd – Road to Surface Duo, das Entwicklertagebuch: Teil 01
- Dr. Windows: #rTsd – Road to Surface Duo, das Entwicklertagebuch: Teil 02
- Dr. Windows: #rTsd – Road to Surface Duo, das Entwicklertagebuch: Teil 03
- Dr. Windows: #rTsd – Road to Surface Duo, das Entwicklertagebuch: Teil 04
- Dr. Windows: #rTsd – Road to Surface Duo, das Entwicklertagebuch: Teil 05
- Dr. Windows: #rTsd – Road to Surface Duo, das Entwicklertagebuch: Teil 06
- Dr. Windows: #rTsd – Road to Surface Duo, das Entwicklertagebuch: Teil 07
- Dr. Windows: #rTsd – Road to Surface Duo, das Entwicklertagebuch: Teil 08
- Dr. Windows: #rTsd – Road to Surface Duo, das Entwicklertagebuch: Teil 09
- Dr. Windows: #rTsd – Road to Surface Duo, das Entwicklertagebuch: Teil 10
- Dr. Windows: #rTsd – Road to Surface Duo, das Entwicklertagebuch: Teil 11
- Dr. Windows: #rTsd – Road to Surface Duo, das Entwicklertagebuch: Teil 12
Prerequirements
Assumption
- The Surface Duo will usw two navigation pages, master on the left screen and detail on the right, as the main indicator how to display an app on two screens -> Nope it works a little bit diffrent
Other programms I used
- Microsoft OneNote as information storage around the idea of the app
- Microsoft Teams to clarify open question with the Dr. Windows team
- Visual Studio Code for all, except source code editing, writings like mark down files
- Git Bash for Git operations outside of Visual Studio
- Adobe XD to protoyp the UI
Features
- Good looking, hopefully (in my opinion)
- Utilizes Surface Duo features
- Utilizes App Center features
- Ticker with latest tweets of @drwindows_de
- Lists articles of Dr. Windows
- Lists videos of Dr. Windows Youtube Channel
- Detail article view
- Share functionality
UI concepts
I'm not a skilled user interface designer nor I have an eye for beauty, but the app should look mostly like the following concepts.
App screenshots
Running on a Microsoft Surface Duo
I used the free, but required an Adobe ID, application Adobe XD to create the protoyp views.
Decisions made
- Using the
Page.Navigation(...)
feature instead of the new url-based Shell.GoToAsync(...)
- Using the native asset management instead of the embedded images one. The not successful feature implementation can be found via:
deadend/embedded-images
- No more gradients - updated UI of the app to use solid colors instead of blue-ish gradients
Keep in mind
This app is purely build for having fun! All features have room for improvements or could be done more elegant. This app was and will be never meant to run in production-like environments.
Contributing
Feel free to improve the quality of the code. It would be great to learn more from experienced C#, Xamarin and Azure developers.
Please use the "default" workflow of contributing to this project.
- Open an issue and describing your idea or bug finding
- Fork repository
- Fix bug / add enhancement in well named feature branch with issue number (e.g.
user.name/2-added-app-icon
)
- Add the issue number to your commit message (e.g.
#2 Added new app icon
)
- Create pull request (PR) from your feature branch to this
master
branch
- Please keep in touch with your PR to answer upcoming questions
- If your PR got merged, check if you are listed in the "Authors" section of the readme
Special thanks to
- Martin Geuss (Dr. Windows) for letting me publish an article series on one of the largest German speaking Microsoft communities and portals Dr. Windows
- Sven-Michael Stübe (Zuehlke) for helping me with is awesome knowledge of Xamarin
- Tim Messerschmidt (Google), for motivating me to give Android and the Google ecosystem another chance
Authors
Just me, Tobi.
Links
License
This project is licensed under the MIT License - see the LICENSE file for details.
Dependencies or assets maybe licensed differently.