Creating your first Wear OS app with Compose
Mikhail Kulaha discussed creating Wear OS apps using Compose and Horologist. Key points included differences between mobile and Wear OS apps, surfaces like tiles and notifications, and navigating with SwipeDismissableNavHost. He demonstrated building a Wear OS module in an existing Confetti app project using Compose components like ScalingLazyColumn, rotary input modifiers, and the WearNavScaffold. The talk provided guidance on app architecture, data synchronization, and suggested adding tiles and using baseline profiles.
The document discusses the Android booting process. It begins with the boot ROM and boot loader which initialize hardware and load the kernel image. The kernel then initializes drivers and loads init, which sets up the environment and mounts partitions. Init starts the zygote process, which preloads classes. System servers like the activity manager and power manager are then started via zygote. Once all servers are running, Android broadcasts an intent to indicate the boot process is complete. The boot sequence involves the bootloader, kernel, init, zygote and system servers working together to start the Android system.
The Android booting process involves 5 stages:
1. The bootloader loads the kernel from flash memory into RAM.
2. The kernel initializes the system and loads drivers. It then launches the init process.
3. Init mounts filesystems and runs scripts to set up services. It also loads properties and launches the Zygote process.
4. Zygote preloads classes and resources. It forks to create new processes like the System Server using copy-on-write.
5. The System Server starts core system services. When complete, Android has finished booting and is ready for use.
Device Tree Overlay implementation on AOSP 9.0Cheng Wig
With the popularity of Android phones, along with the success in the consumer field, the industrial Android platform is also becoming more and more popular in Europe.
In this session, the presenter will share his experience of integrating AOSP 9.0 on multiple industrial grade platform with various hardware specifications, as well as demonstrate a real case of using the latest dtbo.img architecture to achieve separating the hardware specifications from the software definitions. With this additional abstract layer, the maintenance costs and upgrade complexity will be dramatically improved while fully matching the security architecture of AOSP.
The document provides an overview of power management from Linux kernel to Android, covering introduction to Linux power management concepts, concepts behind Android power management, design and implementation details, and areas for potential improvements. It describes goals and approaches of Advanced Power Management (APM) and Advanced Configuration and Power Interface (ACPI) in Linux, and how Android power management is built as a slim wrapper on top of Linux power management, utilizing components like wake locks and different types of wake locks to control power state transitions.
This document discusses Android storage and Opaque Binary Blobs (OBBs). It defines StorageManager as the interface for storage-related items like OBBs. OBBs allow large binary assets to be stored outside an APK and mounted on demand. The document outlines how to create an encrypted OBB file using mkobb.sh, change its owner, sign it with obbtool, and include it in an OBB-enabled APK to securely provide additional app resources like large files.
The document discusses the Android booting process. It begins with the boot ROM and boot loader which initialize hardware and load the kernel image. The kernel then initializes drivers and loads init, which sets up the environment and mounts partitions. Init starts the zygote process, which preloads classes. System servers like the activity manager and power manager are then started via zygote. Once all servers are running, Android broadcasts an intent to indicate the boot process is complete. The boot sequence involves the bootloader, kernel, init, zygote and system servers working together to start the Android system.
The Android booting process involves 5 stages:
1. The bootloader loads the kernel from flash memory into RAM.
2. The kernel initializes the system and loads drivers. It then launches the init process.
3. Init mounts filesystems and runs scripts to set up services. It also loads properties and launches the Zygote process.
4. Zygote preloads classes and resources. It forks to create new processes like the System Server using copy-on-write.
5. The System Server starts core system services. When complete, Android has finished booting and is ready for use.
Device Tree Overlay implementation on AOSP 9.0Cheng Wig
With the popularity of Android phones, along with the success in the consumer field, the industrial Android platform is also becoming more and more popular in Europe.
In this session, the presenter will share his experience of integrating AOSP 9.0 on multiple industrial grade platform with various hardware specifications, as well as demonstrate a real case of using the latest dtbo.img architecture to achieve separating the hardware specifications from the software definitions. With this additional abstract layer, the maintenance costs and upgrade complexity will be dramatically improved while fully matching the security architecture of AOSP.
The document provides an overview of power management from Linux kernel to Android, covering introduction to Linux power management concepts, concepts behind Android power management, design and implementation details, and areas for potential improvements. It describes goals and approaches of Advanced Power Management (APM) and Advanced Configuration and Power Interface (ACPI) in Linux, and how Android power management is built as a slim wrapper on top of Linux power management, utilizing components like wake locks and different types of wake locks to control power state transitions.
This document discusses Android storage and Opaque Binary Blobs (OBBs). It defines StorageManager as the interface for storage-related items like OBBs. OBBs allow large binary assets to be stored outside an APK and mounted on demand. The document outlines how to create an encrypted OBB file using mkobb.sh, change its owner, sign it with obbtool, and include it in an OBB-enabled APK to securely provide additional app resources like large files.
Vold is the volume daemon in Android that manages storage volumes like external SD cards. It communicates with the Linux kernel via Netlink sockets to receive storage events and with the MountService via a local socket. When a new storage device is inserted, Vold receives the kernel event, mounts the volume if FAT format according to its configuration file, and notifies MountService to make the volume available to the user.
Liferay 7: Come realizzare un client SOAP con Apache CXF in OSGi StyleAntonio Musarra
Non sapete come realizzare un client SOAP in OSGi Style su Liferay 7?La risposta è il framework Apache CXF installato a bundle e poi OSGi Service Pattern.
The document provides an overview of programmable logic controllers (PLCs). It discusses the evolution of PLCs from relay logic and hard-wired controls. PLCs automate industrial processes using a programmable digital computer that monitors inputs and controls outputs. The document outlines the characteristics, functions, operation, programming, and applications of PLCs. It also describes common input/output devices and the hardware components of PLC systems.
Timings of Init : Android Ramdisks for the Practical HackerStacy Devino
Android Ramdisks basics presented at the Big Android BBQ 2014.
Covers some of SElinux for Android, Kernels, Startup Sequences, Services, Classes, and Properties.
Even, some practical examples on how they can be used to help your Android embedded or debugging work.
Protocol buffers (Protobuf) are a language-neutral and platform-neutral mechanism for serializing structured data smaller and faster than XML. Protobuf defines data structures once and generates code to easily read and write those structures to data streams in various languages like Java, Python, C++. The Protobuf language defines messages and fields with syntax like "message SearchRequest { string query = 1; }". Code is generated to serialize and deserialize Protobuf messages to and from data streams.
The Android bootup process begins with the boot ROM code loading the first stage boot loader into RAM. The first stage boot loader then loads the main boot loader and external RAM is set up. The main boot loader loads the Linux kernel into RAM along with boot parameters. The Linux kernel initializes the system and launches the init process. The init process then launches the system services like the Zygote process and system server to finish booting up the device.
Booting Android: bootloaders, fastboot and boot imagesChris Simmonds
This document discusses booting Android devices. It covers Android boot images, bootloaders, fastboot protocol, and file systems used for different types of flash memory in Android devices. The key topics covered include bootloaders loading the boot and recovery images, the fastboot protocol for flashing and debugging, and file systems like ext4, f2fs, yaffs2 used on different flash chips like eMMC, SD cards, and raw NAND flash.
This document discusses DevOps concepts and tools. It introduces configuration management tools like Chef, Puppet, and Ansible that can automate server infrastructure setup. Monitoring and metrics collection with Nagios and Graphite is also covered. The document advocates for adopting an Agile development methodology and continuous delivery model. It shares one organization's experience transitioning their blog to use GitHub, Octopress, and Rackspace Cloud Files which improved their content publishing workflow.
The document discusses the benefits of exercise for mental health. Regular physical activity can help reduce anxiety and depression and improve mood and cognitive functioning. Exercise boosts blood flow, releases endorphins, and promotes changes in the brain which help enhance one's emotional well-being and mental clarity.
This presentation is about how to Create Drop Ship Sales Order Across the Operating Units in R12i and then how to perform Inter company Transactions.
Here I will discuss following Process
1.Drop Ship SO Creation
2.PO Creation
3.Receiving against PO
4.AP/AR Invoice Creation
5.Intercompany Invoice Creation
This document provides instructions for setting up an environment for Android development. It discusses downloading and installing the Java Development Kit (JDK), Android SDK, and Android Studio. It also covers configuring a real Android device or emulator for testing apps. The document demonstrates creating a basic "Hello World" Android app in Android Studio and reviewing the underlying code and manifest file. It then briefly describes a more advanced app that scans for nearby WiFi access points when a button is pressed.
Android Workshop for NTU. A getting started guide to android application development.
UPDATE (Oct 2013): An updated slide at http://samwize.com/2013/10/13/android-workshop-2013/
Vold is the volume daemon in Android that manages storage volumes like external SD cards. It communicates with the Linux kernel via Netlink sockets to receive storage events and with the MountService via a local socket. When a new storage device is inserted, Vold receives the kernel event, mounts the volume if FAT format according to its configuration file, and notifies MountService to make the volume available to the user.
Liferay 7: Come realizzare un client SOAP con Apache CXF in OSGi StyleAntonio Musarra
Non sapete come realizzare un client SOAP in OSGi Style su Liferay 7?La risposta è il framework Apache CXF installato a bundle e poi OSGi Service Pattern.
The document provides an overview of programmable logic controllers (PLCs). It discusses the evolution of PLCs from relay logic and hard-wired controls. PLCs automate industrial processes using a programmable digital computer that monitors inputs and controls outputs. The document outlines the characteristics, functions, operation, programming, and applications of PLCs. It also describes common input/output devices and the hardware components of PLC systems.
Timings of Init : Android Ramdisks for the Practical HackerStacy Devino
Android Ramdisks basics presented at the Big Android BBQ 2014.
Covers some of SElinux for Android, Kernels, Startup Sequences, Services, Classes, and Properties.
Even, some practical examples on how they can be used to help your Android embedded or debugging work.
Protocol buffers (Protobuf) are a language-neutral and platform-neutral mechanism for serializing structured data smaller and faster than XML. Protobuf defines data structures once and generates code to easily read and write those structures to data streams in various languages like Java, Python, C++. The Protobuf language defines messages and fields with syntax like "message SearchRequest { string query = 1; }". Code is generated to serialize and deserialize Protobuf messages to and from data streams.
The Android bootup process begins with the boot ROM code loading the first stage boot loader into RAM. The first stage boot loader then loads the main boot loader and external RAM is set up. The main boot loader loads the Linux kernel into RAM along with boot parameters. The Linux kernel initializes the system and launches the init process. The init process then launches the system services like the Zygote process and system server to finish booting up the device.
Booting Android: bootloaders, fastboot and boot imagesChris Simmonds
This document discusses booting Android devices. It covers Android boot images, bootloaders, fastboot protocol, and file systems used for different types of flash memory in Android devices. The key topics covered include bootloaders loading the boot and recovery images, the fastboot protocol for flashing and debugging, and file systems like ext4, f2fs, yaffs2 used on different flash chips like eMMC, SD cards, and raw NAND flash.
This document discusses DevOps concepts and tools. It introduces configuration management tools like Chef, Puppet, and Ansible that can automate server infrastructure setup. Monitoring and metrics collection with Nagios and Graphite is also covered. The document advocates for adopting an Agile development methodology and continuous delivery model. It shares one organization's experience transitioning their blog to use GitHub, Octopress, and Rackspace Cloud Files which improved their content publishing workflow.
The document discusses the benefits of exercise for mental health. Regular physical activity can help reduce anxiety and depression and improve mood and cognitive functioning. Exercise boosts blood flow, releases endorphins, and promotes changes in the brain which help enhance one's emotional well-being and mental clarity.
This presentation is about how to Create Drop Ship Sales Order Across the Operating Units in R12i and then how to perform Inter company Transactions.
Here I will discuss following Process
1.Drop Ship SO Creation
2.PO Creation
3.Receiving against PO
4.AP/AR Invoice Creation
5.Intercompany Invoice Creation
This document provides instructions for setting up an environment for Android development. It discusses downloading and installing the Java Development Kit (JDK), Android SDK, and Android Studio. It also covers configuring a real Android device or emulator for testing apps. The document demonstrates creating a basic "Hello World" Android app in Android Studio and reviewing the underlying code and manifest file. It then briefly describes a more advanced app that scans for nearby WiFi access points when a button is pressed.
Android Workshop for NTU. A getting started guide to android application development.
UPDATE (Oct 2013): An updated slide at http://samwize.com/2013/10/13/android-workshop-2013/
Alfresco’s Application Development Framework (ADF) could be one of the best technology decisions Alfresco has made in the last few years - the creation of responsive, adaptive and attractive User Interfaces have been taken to a new level.
At Ixxus we are excited to have already leveraged the benefits of this framework by integrating it into some of our products and projects. Join us in this session to find out more about:
- The benefits of ADF in Alfresco architectures
- Our transition from Share Development to ADF
- Pros and cons, plus the mistakes you should avoid
- The widgets on our wishlist!
This document provides an overview of setting up the development environment for an Android and SWS application. It includes sections on installing Java, Eclipse, the Android SDK and ADT plugin. It also covers creating a sample Android project and describes the SWS API package structure, which includes common, configuration, utility, UI and transaction processing components.
This document discusses native Android development practices and provides an overview of using Spring for mobile web applications and Android development. It covers Spring Mobile features like device detection and site preference management. It then introduces basic Android development concepts like activities, services, and manifest registration. It demonstrates a simple "Hello World" Android activity and discusses Android lifecycles. Finally, it discusses using Maven for Android projects.
This document provides an overview of mobile application development on the Android platform. It discusses Android architecture and features. It also covers topics related to setting up an Android development environment in Eclipse, the basic building blocks of Android applications like activities and intents, designing user interfaces with views and layouts, and handling user interactions with events. The document uses examples to demonstrate how to create a simple Android project in Eclipse with an activity that displays a text view and handles button click events.
Android Wear allows developers to create three main types of apps: notifications, native watch apps, and watchfaces. Notifications on Android Wear can be expanded to include voice input, multiple pages, and notification stacking. Native watch apps have access to hardware and Android APIs but are optimized for quick interactions. Watchfaces can be customized canvases that display time and other information like weather. The Data Layer API enables communication between wearable and handheld devices to sync data and configurations. Voice input is also an important interaction method for Android Wear apps.
1) Apache Cordova allows developers to use web technologies like HTML, CSS, and JavaScript to build mobile apps that can access native device features and be deployed to app stores.
2) Cordova uses a command line interface for creating projects, adding platforms, and building apps. It also provides APIs for accessing device features through plugins.
3) jQuery Mobile is a popular framework for building the user interface of Cordova apps, though other frameworks can also be used. Special considerations are needed for each mobile platform.
[JavaLand 2015] Developing JavaScript Mobile Apps Using Apache CordovaHazem Saleh
The document discusses how to develop JavaScript mobile apps using Apache Cordova, an open-source framework that allows developers to create mobile apps using HTML, CSS and JavaScript and access native device functions. It provides an overview of Cordova, how to configure and use Cordova commands, the Cordova APIs, and tips for integrating jQuery Mobile with Cordova apps. Code samples and links are included to help developers get started building Cordova apps.
Extending Spring MVC with Spring Mobile and JavaScriptRoy Clarkson
This document discusses extending Spring MVC applications to target different device platforms. It introduces Spring Mobile, which allows detecting the requesting device and directing it to a platform-specific site. It also introduces Lumbar and Thorax, which are tools for building JavaScript applications that target different platforms from a shared codebase, generating modular code for each platform. The document provides examples of how to configure Spring Mobile and build applications using Lumbar.
The document summarizes the refactoring of Wunderlist's Android architecture to improve separation of responsibilities and testability. It describes moving from a single-layer architecture to a multi-layer MVP architecture with separate presentation, model, and UI domain layers. Key changes included introducing use cases to encapsulate business logic, fetching data asynchronously using callbacks or an event bus rather than loaders, and decoupling layers through dependency rules. The goal was to make responsibilities clearer, dependencies looser, and testing easier.
This document introduces React Native, which allows developers to build native mobile apps for iOS and Android from JavaScript. React Native uses React to construct mobile user interfaces and allows sharing of code across platforms. It renders native UI components rather than webviews, supports flexbox layout, and exposes platform APIs. Developers can build full-stack universal apps that share code between web and mobile using React Native and tools like Redux. It provides benefits like hot reloading, native performance, and the ability to add it incrementally to existing apps.
The document summarizes the agenda for a lecture on maps, speech recognition, and other Android topics. It includes:
1) An overview of using the Google Maps API to display maps and get the user's location in an Android app.
2) A discussion of using speech recognition through an intent to enable voice input in an Android app.
3) Brief mentions of other topics covered like Kotlin stats, non-native development options, monetization, sensors, and VR/AR.
Build your own remote control. Droidcon greece 2016Jesus Gumiel
Build your own remote control. This talk explains how to turn your smartwatch into a remote control to can handle pretty much everything connected to the Internet.
It includes an easy example of a wearable app and its integration with the phone
The document provides instructions for creating and running a basic "Hello World" Android application in Android Studio. It discusses creating a new project with an activity, adding a layout file with XML, adding a button and handling button click events either within the activity or with a separate listener class. It also covers running the app in an Android emulator, including selecting a device, launching the emulator if needed, and interacting with the app within the emulator.
If you want to start a good career in Android Development, this presentation gives you a basic introduction about Android, and how you can develop your very first Android Application.
This document provides an overview of beginning Android development. It covers setting up the development environment, including installing Java SDK and Android SDK. It then discusses Android project structure, key components like activities, fragments, services and content providers. It also covers intents, intent filters, databases and supporting multiple screens. The document includes code examples and resources for further reading.
This document provides an overview of beginning native Android app development. It discusses Android app structure including the manifest, activities, intents and lifecycles. It also covers common Android views and layouts, accessing device capabilities like the camera and location, working with data via content providers, and rendering with OpenGL. Example code is provided for various app features like input handling, scrollable lists, and camera access. The document concludes with the process for submitting an app to the Google Play Store.
Similar to Creating your first Wear OS app with compose (20)
8 Best Automated Android App Testing Tool and Framework in 2024.pdfkalichargn70th171
Regarding mobile operating systems, two major players dominate our thoughts: Android and iPhone. With Android leading the market, software development companies are focused on delivering apps compatible with this OS. Ensuring an app's functionality across various Android devices, OS versions, and hardware specifications is critical, making Android app testing essential.
Measures in SQL (SIGMOD 2024, Santiago, Chile)Julian Hyde
SQL has attained widespread adoption, but Business Intelligence tools still use their own higher level languages based upon a multidimensional paradigm. Composable calculations are what is missing from SQL, and we propose a new kind of column, called a measure, that attaches a calculation to a table. Like regular tables, tables with measures are composable and closed when used in queries.
SQL-with-measures has the power, conciseness and reusability of multidimensional languages but retains SQL semantics. Measure invocations can be expanded in place to simple, clear SQL.
To define the evaluation semantics for measures, we introduce context-sensitive expressions (a way to evaluate multidimensional expressions that is consistent with existing SQL semantics), a concept called evaluation context, and several operations for setting and modifying the evaluation context.
A talk at SIGMOD, June 9–15, 2024, Santiago, Chile
Authors: Julian Hyde (Google) and John Fremlin (Google)
https://doi.org/10.1145/3626246.3653374
Why Apache Kafka Clusters Are Like Galaxies (And Other Cosmic Kafka Quandarie...Paul Brebner
Closing talk for the Performance Engineering track at Community Over Code EU (Bratislava, Slovakia, June 5 2024) https://eu.communityovercode.org/sessions/2024/why-apache-kafka-clusters-are-like-galaxies-and-other-cosmic-kafka-quandaries-explored/ Instaclustr (now part of NetApp) manages 100s of Apache Kafka clusters of many different sizes, for a variety of use cases and customers. For the last 7 years I’ve been focused outwardly on exploring Kafka application development challenges, but recently I decided to look inward and see what I could discover about the performance, scalability and resource characteristics of the Kafka clusters themselves. Using a suite of Performance Engineering techniques, I will reveal some surprising discoveries about cosmic Kafka mysteries in our data centres, related to: cluster sizes and distribution (using Zipf’s Law), horizontal vs. vertical scalability, and predicting Kafka performance using metrics, modelling and regression techniques. These insights are relevant to Kafka developers and operators.
Superpower Your Apache Kafka Applications Development with Complementary Open...Paul Brebner
Kafka Summit talk (Bangalore, India, May 2, 2024, https://events.bizzabo.com/573863/agenda/session/1300469 )
Many Apache Kafka use cases take advantage of Kafka’s ability to integrate multiple heterogeneous systems for stream processing and real-time machine learning scenarios. But Kafka also exists in a rich ecosystem of related but complementary stream processing technologies and tools, particularly from the open-source community. In this talk, we’ll take you on a tour of a selection of complementary tools that can make Kafka even more powerful. We’ll focus on tools for stream processing and querying, streaming machine learning, stream visibility and observation, stream meta-data, stream visualisation, stream development including testing and the use of Generative AI and LLMs, and stream performance and scalability. By the end you will have a good idea of the types of Kafka “superhero” tools that exist, which are my favourites (and what superpowers they have), and how they combine to save your Kafka applications development universe from swamploads of data stagnation monsters!
A Comprehensive Guide on Implementing Real-World Mobile Testing Strategies fo...kalichargn70th171
In today's fiercely competitive mobile app market, the role of the QA team is pivotal for continuous improvement and sustained success. Effective testing strategies are essential to navigate the challenges confidently and precisely. Ensuring the perfection of mobile apps before they reach end-users requires thoughtful decisions in the testing plan.
Boost Your Savings with These Money Management AppsJhone kinadey
A money management app can transform your financial life by tracking expenses, creating budgets, and setting financial goals. These apps offer features like real-time expense tracking, bill reminders, and personalized insights to help you save and manage money effectively. With a user-friendly interface, they simplify financial planning, making it easier to stay on top of your finances and achieve long-term financial stability.
The Rising Future of CPaaS in the Middle East 2024Yara Milbes
Explore "The Rising Future of CPaaS in the Middle East in 2024" with this comprehensive PPT presentation. Discover how Communication Platforms as a Service (CPaaS) is transforming communication across various sectors in the Middle East.
Malibou Pitch Deck For Its €3M Seed Roundsjcobrien
French start-up Malibou raised a €3 million Seed Round to develop its payroll and human resources
management platform for VSEs and SMEs. The financing round was led by investors Breega, Y Combinator, and FCVC.
Nashik's top web development company, Upturn India Technologies, crafts innovative digital solutions for your success. Partner with us and achieve your goals
14 th Edition of International conference on computer visionShulagnaSarkar2
About the event
14th Edition of International conference on computer vision
Computer conferences organized by ScienceFather group. ScienceFather takes the privilege to invite speakers participants students delegates and exhibitors from across the globe to its International Conference on computer conferences to be held in the Various Beautiful cites of the world. computer conferences are a discussion of common Inventions-related issues and additionally trade information share proof thoughts and insight into advanced developments in the science inventions service system. New technology may create many materials and devices with a vast range of applications such as in Science medicine electronics biomaterials energy production and consumer products.
Nomination are Open!! Don't Miss it
Visit: computer.scifat.com
Award Nomination: https://x-i.me/ishnom
Conference Submission: https://x-i.me/anicon
For Enquiry: Computer@scifat.com
Photoshop Tutorial for Beginners (2024 Edition)alowpalsadig
Photoshop Tutorial for Beginners (2024 Edition)
Explore the evolution of programming and software development and design in 2024. Discover emerging trends shaping the future of coding in our insightful analysis."
Here's an overview:Introduction: The Evolution of Programming and Software DevelopmentThe Rise of Artificial Intelligence and Machine Learning in CodingAdopting Low-Code and No-Code PlatformsQuantum Computing: Entering the Software Development MainstreamIntegration of DevOps with Machine Learning: MLOpsAdvancements in Cybersecurity PracticesThe Growth of Edge ComputingEmerging Programming Languages and FrameworksSoftware Development Ethics and AI RegulationSustainability in Software EngineeringThe Future Workforce: Remote and Distributed TeamsConclusion: Adapting to the Changing Software Development LandscapeIntroduction: The Evolution of Programming and Software Development
Photoshop Tutorial for Beginners (2024 Edition)Explore the evolution of programming and software development and design in 2024. Discover emerging trends shaping the future of coding in our insightful analysis."Here's an overview:Introduction: The Evolution of Programming and Software DevelopmentThe Rise of Artificial Intelligence and Machine Learning in CodingAdopting Low-Code and No-Code PlatformsQuantum Computing: Entering the Software Development MainstreamIntegration of DevOps with Machine Learning: MLOpsAdvancements in Cybersecurity PracticesThe Growth of Edge ComputingEmerging Programming Languages and FrameworksSoftware Development Ethics and AI RegulationSustainability in Software EngineeringThe Future Workforce: Remote and Distributed TeamsConclusion: Adapting to the Changing Software Development LandscapeIntroduction: The Evolution of Programming and Software Development
The importance of developing and designing programming in 2024
Programming design and development represents a vital step in keeping pace with technological advancements and meeting ever-changing market needs. This course is intended for anyone who wants to understand the fundamental importance of software development and design, whether you are a beginner or a professional seeking to update your knowledge.
Course objectives:
1. **Learn about the basics of software development:
- Understanding software development processes and tools.
- Identify the role of programmers and designers in software projects.
2. Understanding the software design process:
- Learn about the principles of good software design.
- Discussing common design patterns such as Object-Oriented Design.
3. The importance of user experience (UX) in modern software:
- Explore how user experience can improve software acceptance and usability.
- Tools and techniques to analyze and improve user experience.
4. Increase efficiency and productivity through modern development tools:
- Access to the latest programming tools and languages used in the industry.
- Study live examples of applications
WMF 2024 - Unlocking the Future of Data Powering Next-Gen AI with Vector Data...Luigi Fugaro
Vector databases are transforming how we handle data, allowing us to search through text, images, and audio by converting them into vectors. Today, we'll dive into the basics of this exciting technology and discuss its potential to revolutionize our next-generation AI applications. We'll examine typical uses for these databases and the essential tools
developers need. Plus, we'll zoom in on the advanced capabilities of vector search and semantic caching in Java, showcasing these through a live demo with Redis libraries. Get ready to see how these powerful tools can change the game!
2. Speaker intro
Mikhail (Misha) Kulaha
- 12 years of Android experience
- 2 years at Google, Wear OS
- Work in “Compose for Wear OS” team
@kpeved
3. Agenda
- What is Wear OS and why you should care about it
- What is a Wear OS app
- Difference between Mobile and Wear apps
- Designing and developing an app for Wear OS by using “Compose for
Wear OS” and “Horologist”.
4. What is Wear OS
- Based on Android
- Runs on smartwatches
- Latest version is Wear OS 4 -
now in Preview (based on
Android 13 or API 33)
5. Why do you need an app for Wear OS?
5x growth in active devices since
the launch of Wear OS 3
6. Why do you need an app for Wear OS?
Having a Wear OS app
- Increases user engagement
- Low engineering investment
- Unique user journeys
🤔
22. Conference app - Confetti
Features of the Mobile app:
- Shows upcoming agenda
- Shows details of each talk
- Shows speakers and their details
- Searches for Talks
- Adds talks to favourites
Features of the Wear OS app:
- Checks favourite talks
- Shows upcoming agenda.
https://github.com/joreilly/Confetti
28. Compose for Wear OS
androidx.wear.compose:compose-foundation
androidx.wear.compose:compose-material
androidx.wear.compose:compose-navigation
Wear Compose : https://developer.android.com/training/wearables/compose
Note: You can’t include both compose-material and wear-compose-material libraries in the same
module
37. Crown (Rotating Side Button)
- Doesn’t produce any physical haptic - it
should be simulated with haptic
motors
- Produces constant flow of scroll events
from 1px to ~60px
38. Bezel
- Has 24 clicks per full circle
- Produces a fixed number of pixels per
click ( 136px)
- Physical bezel produces mechanical
clicks, virtual bezel does not
39. Rotary input modifiers
public fun Modifier.rotaryWithFling(
focusRequester: FocusRequester,
scrollableState: ScrollableState,
flingBehavior: FlingBehavior = ScrollableDefaults.flingBehavior(),
rotaryHaptics: RotaryHapticHandler =
rememberRotaryHapticHandler(scrollableState),
reverseDirection: Boolean = false
)
public fun Modifier.rotaryWithSnap(
focusRequester: FocusRequester,
rotaryScrollAdapter: RotaryScrollAdapter,
rotaryHaptics: RotaryHapticHandler =
rememberRotaryHapticHandler(rotaryScrollAdapter.scrollableState),
reverseDirection: Boolean = false
)
65. Summary
Today we have learned
- Why we need a wear OS app
- What compose components we have for Wear OS - UX and navigation
- How to create a Wear OS app for existing Android app
Thanks everyone for joining this talk.
Our session today is called Creating your first Wear OS app with Compose
Briefly about me
My name is Misha and currently I’m working as a Software Engineer at Google. I work in a “Compose for Wear OS” team and I have been here for the past 2 years.
Overall I have 12 years of Android experience. I started my path from Android 2.1 and 27 apis later I am still doing it.
I have a Twitter so you can ask me anything there anything if you have any questions.
Question: How many of you have smartwatches? And how many of you have Wear OS watches?
If many -> Wow, so you are definitely in the right place
So, today we’ll talk about Wear OS.
We’ll start with What is Wear OS
Then we’ll talk about what is a wear OS app
We’ll see what are the Differences between Mobile and Wear apps
And after that we’ll try to design and develop a Wear OS app by using Compose for Wear OS and Horologist.
I really hope that at the end of this presentation you will be more confident with a Wear OS and you will be motivated enough to build your own app.
//
- libraries which we’ve been working on .
The main goal of this talk is to explain what is a wear app, why you might need one, what advantages you can get by having it, and how to develop a wear app for existing mobile app. Also go through Wear compose components, best guidelines on wear and design differences All of that should persuade you, android developers, to enter the world of wear apps.
So what is wear OS?
The Wear OS is an operating system for smartwatches which is based on Android. Simple
It’s been here for a while and recently received an update for Wear 4, now in preview, to which selected devices will be updated. Wear 4 is based on Android 13 api 33.
So for Wear OS development you have to use the same SDKs as you would use for Android, no additional sdks required
So you may well be asking yourselves - why do I need an app for Wear OS?
Wear OS is actually a very fast growing platform - 5 times is the growth in active devices since the launch of Wear OS 3.
//So there’re 5 times more active devices now than there were in the middle of 2021 - that’s when the Wear OS 3 was launched.
Other reasons might include
Having a Wear OS app increases user engagement - case studies from other developers show that people who use the app on their watch tend to use this app more often on the phone.
It’s Low engineering investment - creating a wear os app now became much easier with our set of libraries. Today we’ll talk about it and you’ll see how easy it is to do it with compose.
And Wear OS provide Unique User Journeys - these are the things which users can do on the watch (but can’t otherwise). They might be very different from what you may have on the phone. For example -> NEXT SLIDE
For example - the fitness app.
Fitness app might help you to track your workouts on your wrist by also measuring your heart rate and cadence. Watch is more convenient in a lot of situations, for example running!
// You just wound’t get this data from your phone.
//You kind of can do that with a phone, but as a marathon runner I can declare that there is no enjoyment like running with a watch
Another user journey might be a Media app.
You can download some playlists on your watch and go for a run without even taking your phone with you.
//You might also use a voice assistant for switching a track while you’re busy.
Or the messaging app.
No need to lift and unlock your phone for answering the messages. You might also reply with a voice message or quickly send a predefined short message from the list
Those are just simple , and probably obvious examples of user journeys, but you can always find your own unique one.
Now that we know why we might need a wear OS app
Let’s briefly talk about the app itself.
Wear OS app consists not only of the traditional app, but might have different surfaces as well
We’ll start with a Watchface. Watchface is the main screen which user sees while interacting with your watch. //And it can show not only the time, but a lot of other useful information as well.
Watchface has slots ,which can have complications , like small widgets. They can show the weather, the number of steps, the current heart rate, whatever you want - this information can come from your app and can be regularly fetched.
//You can design complications along with watchfaces, so they will fit the watchface design.
//As you see in example on the left, the complication is actually takes the whole circle around the screen.
By swiping left and right from the watchface we’ll go to the list of Tiles. It’s like a horizontal pager.
Tiles are just the screens, full screen pages which show specific pieces of information. Like shortcuts for workouts, or meetings which you might have in the next hour.
// A tile runs as a part of the system UI instead of running in its own application container, so tiles will use less energy than apps.
By clicking on the tile the app will open through a deep link.
As tiles provide very fast access to the information, we recommend that you build at least one tile for your app.
We’ll not cover tiles in this session, but we’ll see one specific tile for our app later.
As a phone or a tablet, a watch can also receive notifications. And notifications play a very crucial role in Wear OS , as they provide a very fast access to the glanceable information and it’s one of the most used things on the watch.
Notifications on Wear OS use the same APIs and have the same structure as notifications on phones. They can have the same customization and can be expandable
Note that notifications are also received on the watch without Wear OS app thanks to bridging.
You can receive them directly in Wear OS app and they will not be duplicated. You can read more about it in our notification guide
And finally, we have Wear OS apps.
Wear OS app is similar to the app which we have on other Android devices. It’s shipped as an apk and has the same package structure
//But even though it’s almost similar to the mobile app, there are some differences and things which you should be aware of while developing it.
//
In this talk we’ll be talking about wear apps specifically, without touching watchfaces or complications.
We just briefly covered the surfaces of Wear OS. There is more information about the current state of the Wear OS, so you can you also check this session from last year’s droidcon, where Ataul and Yuri discuss the Wear OS in more detail.
Now that we know why we might need a Wear OS app and its surfaces, let’s see which differences we have between Mobile and wear OS apps
The interaction with a smart watch is much shorter than with a phone.
Smartwatches have shorter and more frequent sessions, whereas phones have longer and rarer sessions. On average the Phone session lasts around 4 minutes, whereas Smartwatche session is only 5 seconds long.
So we really need to make the most of this time. Apps should be glanceable by the design and easy to follow.
Introduction to UX Research & Product Inclusion on Wear OS
Another difference is the obvious one, the size and the shape.
Phones have more screen space and they can fit more content into them. However, on the watch the space is very limited, so we have to show only relevant information. The screen is also round on the watch, so we have to adjust the content accordingly.
Phones have much more powerful chips, they have more ram and bigger batteries ( much bigger batteries!) than the watches.
We just can’t do the same complicated things on the watch that we can do on the phone.
The battery drain is also a big issue on the watch, so apps should minimize it and prioritize performance efficiency.
For example - we should always use the dark theme on the watch as the screen drains a big amount of battery power. That will actually be a necessary requirement for a Wear app as from September 2023.
You can check more about the design principles on Wear OS from our youtube videos where we explain them in a detail.
Those videos are relatively short and fun so I would recommend to just take a picture and watch it later
Keeping all of that in mind, like why we might need a wear OS app and what the differences are between a phone and a watch, let’s try to create a Wear OS app for an existing Mobile app.
What we will do is look at the existing Conference app, and see how we can create a wear app for it.
And we’ll take a look at the app called confetti - a simple open source app which shows a list of talks for a specific conference. It’s also has this conference so it might be very useful for you all.
Let’s explore this app and see what we’re dealing with.
We can choose the conference and then see the list of talks. At the bottom we have a navigation bar so we can go to other sections of the app.
We also can click on the talk and see the details of it.
Overall we can say that this app has those features:
Show agenda for specific conference
Show details of each talk
Show speakers and their details
Search for Talks
Add talks to your favourites. Favourites are synced through the Firebase.
Now we have to think about what will make sense for our Wear OS App?
The general rule is that we need to think about the most important features of our app, which make sense on the watch and can be quickly completed.
Do we want to see a list of Speakers? probably not very necessary. Todays Agenda? Probably yes, for exploring upcoming sessions. Searching through talks? Nice to have but not really important. I think what might be important is Favouries I would really like to see the selected talks, which are very interesting to me and I chose them, on my watch once they’re approaching.
So we might say that the main features which we want in our app are:
Check favourite talks
Show upcoming agenda.
We significantly simplified our app features and left only the most important ones.
Let’s start creating our app and we’ll start with architecture. What we’re looking for is to create a new app with a little effort as possible. And for that Modularized approach fits perfectly for our needs.
// You can use the same as you have in your mobile app.
If we look at the abstract scheme of an existing app with a good modularised architecture, we’ll see that new wear module fits perfectly into the existing structure.
We have just added a new module and we can share all the necessary data and feature modules with it.
This is another advantage of modularized architecture - you can share modules between apps and you can have multiple apps.
And that is what I meant by the low engineering cost
In order to add a new wear OS module you just need to click new -> module -> select Wear OS -> and basically our wear OS app is ready.
There is a nice lightening talk from AndroidDevSummit which explains what is a good android architecture. Worth checking it as well for getting a better understanding on how to properly modularize your app.
We definitely need to use some specific libraries for Wear OS development.
To ease the process of creating a wear app we have a “Compose for Wear OS” set of libraries.
The libraries that we have are:
compose foundation with contains all fundamental components for Wear OS app.
compose material which has Material specific components based on Material design.
And we have the compose navigation library for navigating on the watch. Navigation on the watch is a little bit different from the mobile and we’ll cover it later.
Note that You can’t include both compose-material and wear-compose-material libraries in the same module.
We recommend that for wear os app you use only Wear-compose-material library. That also applies for Navigation.
We also created another set of libraries called Horologist. It’s a github project which has a lot of usefull components that are not yet in the Wear Compose toolkit.
In some way Horologist is similar to an Accompanist library for Compose.
We have additional components in composables library, compose layouts, we have libraries for working with media on the watch, audio , and many more.
You can chek all horologist libraries on the github.
Let’s start with basic UI elements, which we might use in our app
And the most basic element of our app will be the Card.
The Card component contains content and actions about a single subject. They are similar to what we have in compose Material.
In Wear compose we have an additional set of cards with predefined slots, which accept different composables.
For example in AppCard we have slots for the icon, app name, time, title and content
In the TitleCard we have the Title, time and content.
We can also add a custom background to our card - and that’s how the image card is made
For our app we will use a TitleCard, as it already has a title, time and content slots
That’s how our card might look like.
We place the title in the title slot, startTime in the time slot, and the room and the speakers in the content slot
Now we want to show all of our sessions in a single list of cards.
We might use a LazyColumn for that as we do in a mobile app, but on the wear OS we have a specific element called ScalingLazyColumn.
You might see that it adds this nice scale-down and fading effect on the edges, so it feels like you are scrolling through the rounded disk.
Adding ScalingLazyColumn is very similar to adding LazyColumn.
We just have to create a scalingLazyListState with a rememberScalingLazyListState function, add it to the SLC and put all items inside of the content.
And that’s what our list will look like.
However, we can customize ScalingLazyColumn and do something like this!
By using custom flingBehaviour we added a snapping to the center, and by changing scalingParams we made the central item to stand out. Pretty cool, heh?
But those lists can be scrolled not only with a touch, but with a rotary input as well.
And the Rotary input is a thing which makes the feeling of the app Premium.
The majority of the Wear OS devices have some kind of a rotary input.
Basically there are 2 types - Crown and a Bezel. Note that we also have devices with no rotary.
You can find a crown or Rotating Side Button on such devices as Pixel Watch , Fossil Gen 6 or other.
The crown itself freely rotates and doesn’t produce any physical haptics on its own - those nice haptics which you feel are done throught the haptic motors and added separately.
It produces a constant flow of events when rotated - from 1px to 60 or sometimes even more if you rotate it very fast.
During a rotation of the crown we expect the list to be scrolled by exactly this amount of pixels
There is another input device - Bezel . Bezel is different from the crown because it’s a discrete device - it rotates around the screen and produces 24 clicks per full circle, with exactly 136px each.
You can only find the Bezel on Samsung GW devices .
Bezel can be virtual- like a part of the touch screen - or physical.
A physical bezel produces mechanical clicks, but for the virtual they should be simulated with a haptic.
// The only device with a physical bezel is the GW4 Classic.
So, all of it looks pretty complicated, like Bezel, virtual bezel, crown - how do we handle all these types of input and make scrolling look nice, responsive and premium, on the same app but across all of these devices?
Good news that we have a solution for that - modifiers which connect rotary to the scroll of the list and work for both the Crown and the Bezel inputs.
We have 2 modifiers - rotaryWithFling, and rotaryWithSnap. You can find those modifiers in Horologist library.
By default there is no rotary input in ScalingLazyColumn, so we have to add it separately with those modifiers..
That’s how RotaryWithFling will look like.
In general, fling is a gesture which receives a velocity and gradually slows down the scrolling
RotaryWithFling will produce a nice fling after you finish scrolling. It looks almost identical to the finger scroll.
And that’s how we add it.
We just need to add a focusRequester, add a modifier to our ScalingLazyColumn, and request the focus.
Another gesture is snap.
That’s how rotaryWithSnap will look like.
This modifier allows you to snap the items to the centre of the screen.
During the rotation we have a small resistance before we do a snap, and then we continue snapping to the next items.
And that’s how we add it Compared to the rotaryWithFling, you just need to use state.toRotaryScrollAdapter extension function, and the rest stays the same.
Now let’s talk about curved elements
Specifically for wear we created a set of curved elements, like PositionIndicator, TimeText, ProgressIndicator and more.
Those elements were designed to fit onto curved screens. They do help to save the round screen space, and also look nice.
For our conference app we definitely need TimeText and PositionIndicator.
Let’s start with PositionIndicator. It’s very easy to implement this compOnent. What you need to have is a ScalingLazyListState which you pass to a PositionIndicator.
Adding timeText is even easier. By default it’ll get the current time and a system locale for proper formatting.
We might though add some additional information to the TimeText.
For example we might add a timer before the next talk or something similar.
As you can see, we use a startCurvedContent slot for that with a curvedText item in it. There we specify the text and a curvedTextStyle for it.
This is pretty different from what we would do for normal text, right?
The thing is, we have a whole curved world created for curved elements, which you can find in a compose foundation library for Wear OS.
Everything starts with a CurvedLayout, inside of which we can set curvedColumn, CurvedRow or CurvedBox containers.
We can also specify paddings in angles and rotate the content around the centre
But let’s get back to our app.
Those UX elements which we briefly covered, should be connected together.
We already know how to connect PositionIndicator with a ScalingLazyColumn, we also expect the timeText to be scrolled away once we start scrolling down the list so that it won’t interfere with other content.
For that we’ll be using a Scaffold - a component which helps us to coordinate those components and layer them correctly.
//We also have other components here like vignette - a component which blurs the screen edges a little bit.
The scaffold though does not bind those components together - for that we’ll have to use the hoisted state above the Scaffold
//Though the scaffold looks very convenient, we still need to connect those elements together.
Like the TimeText should be scrolled out of the way when the list is scrolled, or position indicator should change its position.
And this is how we’ll do it- we’ll create a Scaffold, add a PositionIndicator in positionIndicator slot, timeText in timeText slot, add a ScalingLazyColumn as a content, and connect them all together with the hoisted state.
Note that for TimeText we’ll use additional scrollAway modifier, which does exactly what is says - it scrolls away the TimeText when we start scrolling ScalingLazyColumn.
We can make this code though even simpler by using another Horologist component at which we’ll look shortly
Now that we know how to create a scrollable list with items, Let’s try to look at Wear OS navigation and see how it’s different from Mobile.
On mobile our navigation can be heavily branched - we can go from any place to any place. We can have hamburger menu, bottom navigation, etc etc.
On wear OS the navigation is much simpler - we want to have a navigation with as few layers as possible.
Studies show that the deeper the information is, the less chances the users will get there. So we recommend to limit the number of navigational layers to a minimum.
Guide for UX
https://developer.android.com/design/ui/wear/guides/surfaces/apps
Another big difference between Mobile and wear is back navigation.
On the phone we have a back button or a system gesture to go back. On the watch we don’t have that- instead we have a swipe to dismiss gesture, during which we drag the foreground component which shrinks and then scrolls away to the right
The good news is that we can have a back navigation right out of the box in Wear OS navigation - SwipeDismissableNavHost is doing exactly that.
Its usage is very similar to the NavHost navigation in compose - there is the same concept with destinations and navHost states.
But we can make things even easier - as I mentioned before we can connect all Scaffold elements together along with Navigation and with SwipeToDismiss .
And for that we have a WearNavScaffold from Horologist library.
We specify navController, pass it to WearNavScaffold, create a scrollable ( which is similar to composable in NavHost navigation) , which connects a scrollableState to TimeText and PositionIndicator, and then we just add it to our ScalingLazyColumn and everything gots connected!
Another important part of the app is Data synchronization.
In the end we want to show the real data about the conferences in our app and we need to get it from somewhere
And the easiest way to do that is to request the data directly from the network.
What happens underneath is that the phone is used as a proxy between the watch and the network. When we make a request on the watch, it proxies through bluetooth to the phone and then goes to the network.
So we have the cloud as a single source of truth and shouldn’t worry about synchronization between a watch and a phone, because both of them get the same data from the network.
Watch can also connect directly to the wifi or cellular network (when the phone is not connected)- and then it might exchange the data directly with the cloud bypassing the phone..
There is no difference for developers how network requests are handled..
You just send the requests and the system automatically handles it.
However if you really need a high bandwidth for some data, you can explicitly request Wifi connectivity. Note that Wifi or Cellular consumes much more energy than Bluetooth.
You can read more about connectivity by following this link.
//
We recommend that Wearable apps send and sync data directly from a network or connected phone.
Instead of sharing data between your watch and a phone, it’s better to send data directly to the network through the phone - that’s how you’ll have less entities to worry about.
Standalone app is better than
A good infographic https://developer.android.com/training/wearables/data/data-layer#connectivity
So our conference app is almost ready. We know how to show the UI, we know the basics of navigation and network requests. Let’s see what other nice things we might add to our app.
It would be great to have a tile. Tiles will help our users to get the most important information right from the System UI.
We can have a tile which will allow our users to quickly check the upcoming bookmarked sessions without opening our app.
You can check this codelab which explains how to add a tile very well.
//Consider adding a tile for your app. Tiles will help your users to get the most important information at a glance.
In the case of our app, we have a tile which shows the upcoming sessions and a shortcut to bookmarked sessions .
As we noted previously, watch is not the most powerful device in the world, so we need to optimise the performance of our app, especially if it uses compose. One way to do that is to use Baseline Profiles .
I recommend that you check more about Baseline profiles in this youtube video.
//Baseline Profiles is a list of classes and methods, that are Ahead of time compiled at app installation on your device. This helps the app, especially on the Watch, to speed up the start up time , reduce the jank and improve performance.
I recommend that everyone uses Baseline Profiles.
You can read more about Baseline Profiles following this link
That’s what our final app looks like. This is a real app which already exists and you can already download it. This app is a little bit more sophisticated than one which we designed.
We have bookmarked sessions at the top, and conference days below. We can click on the day, then on the session and then check the session description.
It might also be useful for you at this conference so you can check it out.
Worth trying this app, especially if you have a Wear OS watch.
Regarding the developer documentation for Wear OS - I highly recommend checking this link. This is an entry point for all Wear OS development, where you can find almost everything regarding Wear OS.
And let’s summarize what we have learned today.
Now we know why we might need a Wear OS app,
We are aware of compose components which we can use on Wear OS
And we know how to create an app for an existing app.
And I hope that now you know more about wear OS and developing a Wear OS app doesn’t look very scary or pointless to you.
And That’s basically it !But just before you go,. We have a Wear Compose Slack channel, were you can ask anything regarding the Wear OS. We’re replying quickly and already helped a lot of developers building nice Wear OS apps. We always open for new suggestions and always looking for a feedback.
Or you can ask me anything on Twitter.
Thanks for watching!