This document provides instructions for building an interactive tip calculator app in Kotlin using the Jetpack Compose UI toolkit. It teaches how to use state management in Compose by creating state variables to track user input fields and calculate the tip amount. It shows how to add text fields, buttons and switches to collect user input for the service amount and tip percentage. The state is hosted at the top-level screen to share it between composables and recompute the tip when the inputs change.
This document outlines an introduction to Kotlin and Jetpack Compose event called Compose Camp. It provides an overview of what Compose Camp is, which is a community-organized event to teach attendees hands-on coding skills using Jetpack Compose. The document outlines the learning objectives, such as building first Android apps, setting up Android Studio, learning Kotlin and Compose. It also provides information on resources for continuing learning Compose after the event.
Compose Camp is an introduction to building Android apps using Jetpack Compose. The document outlines the prerequisites, learning objectives, and structure of Compose Camp. It will teach participants to set up Android Studio, learn Kotlin fundamentals, and build their first Android apps with Compose. The course is divided into units that introduce key Compose concepts and provide interactive exercises to apply the learning.
The document provides an overview of Compose Camp, which is a hands-on introduction to learning how to build Android apps with Jetpack Compose. The agenda for Day 1 includes an introduction to Jetpack Compose, basics of Kotlin, an overview of Android Studio, and UI elements of Compose. The facilitator Rohit will give an introduction and discuss his journey learning Android development.
This document provides an introduction and overview of Compose Camp, which teaches how to build Android apps using Jetpack Compose. The camp will cover building a first Android app, setting up Android Studio, learning Kotlin basics and Compose, and finding additional learning resources. The agenda for Day 1 includes an introduction to Compose and Kotlin, an Android Studio overview, learning about Compose UI elements and previews, and a Q&A session.
This document provides an overview of key concepts for developing Android apps using Jetpack Compose such as creating composable activities, using rows and columns for layouts, applying modifiers, displaying images and text, managing state, adding buttons, text fields and snackbars, and displaying lists. It discusses annotations for composables, how columns and rows can be used to layout UI elements vertically and horizontally, common modifiers for setting size, padding and borders. It also provides examples of composables for images, text styling, buttons, text fields, snackbars and lists.
The document outlines an agenda for Day 1 of Compose Camp. It will include introductions to Kotlin basics, installing Android Studio, and building a basic layout. Attendees will learn how to set up Android Studio on their computers and create their first Android app using Jetpack Compose. By the end of the day, participants will have an understanding of Kotlin programming fundamentals like functions, variables, and data types, and how to use Android Studio and emulators to build and test Compose apps. Optional resources for continuing learning are also provided.
The document outlines an agenda for Compose Camp Day 1. It includes introducing Kotlin basics, installing Android Studio, and building a basic layout. It also introduces the camp leaders and what Compose Camp is. The learning objectives for the camp are to set up Android Studio, learn Kotlin, Jetpack Compose, and how to create an Android app. The document provides information on installing Android Studio and an overview of its interface including the project view, code view, design view, and split view. It also describes what an emulator is and how to create one in Android Studio.
The document outlines an agenda for Day 1 of Compose Camp. It will include introductions to Kotlin basics, installing Android Studio, and building a basic layout. Attendees will learn the fundamentals of the Kotlin programming language, how to set up Android Studio on their computers, and how to create a basic Android app using Jetpack Compose. The goal is for participants to get hands-on experience developing Android apps with Compose.
This document outlines an introduction to Kotlin and Jetpack Compose event called Compose Camp. It provides an overview of what Compose Camp is, which is a community-organized event to teach attendees hands-on coding skills using Jetpack Compose. The document outlines the learning objectives, such as building first Android apps, setting up Android Studio, learning Kotlin and Compose. It also provides information on resources for continuing learning Compose after the event.
Compose Camp is an introduction to building Android apps using Jetpack Compose. The document outlines the prerequisites, learning objectives, and structure of Compose Camp. It will teach participants to set up Android Studio, learn Kotlin fundamentals, and build their first Android apps with Compose. The course is divided into units that introduce key Compose concepts and provide interactive exercises to apply the learning.
The document provides an overview of Compose Camp, which is a hands-on introduction to learning how to build Android apps with Jetpack Compose. The agenda for Day 1 includes an introduction to Jetpack Compose, basics of Kotlin, an overview of Android Studio, and UI elements of Compose. The facilitator Rohit will give an introduction and discuss his journey learning Android development.
This document provides an introduction and overview of Compose Camp, which teaches how to build Android apps using Jetpack Compose. The camp will cover building a first Android app, setting up Android Studio, learning Kotlin basics and Compose, and finding additional learning resources. The agenda for Day 1 includes an introduction to Compose and Kotlin, an Android Studio overview, learning about Compose UI elements and previews, and a Q&A session.
This document provides an overview of key concepts for developing Android apps using Jetpack Compose such as creating composable activities, using rows and columns for layouts, applying modifiers, displaying images and text, managing state, adding buttons, text fields and snackbars, and displaying lists. It discusses annotations for composables, how columns and rows can be used to layout UI elements vertically and horizontally, common modifiers for setting size, padding and borders. It also provides examples of composables for images, text styling, buttons, text fields, snackbars and lists.
The document outlines an agenda for Day 1 of Compose Camp. It will include introductions to Kotlin basics, installing Android Studio, and building a basic layout. Attendees will learn how to set up Android Studio on their computers and create their first Android app using Jetpack Compose. By the end of the day, participants will have an understanding of Kotlin programming fundamentals like functions, variables, and data types, and how to use Android Studio and emulators to build and test Compose apps. Optional resources for continuing learning are also provided.
The document outlines an agenda for Compose Camp Day 1. It includes introducing Kotlin basics, installing Android Studio, and building a basic layout. It also introduces the camp leaders and what Compose Camp is. The learning objectives for the camp are to set up Android Studio, learn Kotlin, Jetpack Compose, and how to create an Android app. The document provides information on installing Android Studio and an overview of its interface including the project view, code view, design view, and split view. It also describes what an emulator is and how to create one in Android Studio.
The document outlines an agenda for Day 1 of Compose Camp. It will include introductions to Kotlin basics, installing Android Studio, and building a basic layout. Attendees will learn the fundamentals of the Kotlin programming language, how to set up Android Studio on their computers, and how to create a basic Android app using Jetpack Compose. The goal is for participants to get hands-on experience developing Android apps with Compose.
The document outlines an introduction to Kotlin and Jetpack Compose event called Compose Camp. It provides information on what Compose Camp is, which is a community-organized event for learning how to build Android apps using Jetpack Compose through hands-on coding. It details the learning objectives of Compose Camp, which are to build first Android apps, set up Android Studio, learn Kotlin basics and Jetpack Compose, and find additional learning resources. It also provides an overview of some Kotlin and Compose concepts that will be covered, such as functions, variables, and the @Composable annotation.
The document is a presentation on basics of Android development using Kotlin and Jetpack Compose. It includes an introduction to Kotlin programming concepts like variables, functions, data types etc. It then covers topics like building a basic Android app using Android Studio and Jetpack Compose. The schedule includes an introduction to Kotlin, setting up Android Studio and building a first Android app.
This document provides information about a Compose Camp event to teach Android app development using Jetpack Compose. The event is intended for beginners, including those with no programming experience. Attendees will learn Kotlin basics, how to build Android UIs with Compose, and modern Android development best practices. The agenda includes sessions on Kotlin programming concepts like variables, data types, functions, and conditional statements. Hands-on coding exercises will have attendees creating simple apps to practice their new skills.
This Android development workshop is a gateway to the exciting world of mobile app development. Whether you're a complete beginner or have some programming expertise, this class will provide you with the core skills and knowledge required to create great Android apps.
The document provides instructions and examples for creating a basic Android application using Kotlin and Jetpack Compose. It introduces Android Studio and the tools for building Compose apps. It demonstrates how to define composable functions to display text and images. It shows how to organize composables using Column and preview the UI using the @Preview annotation. The goal is to build a simple pet adoption app that displays the name, information and photo of a dog.
The document provides information about Compose Camp events, which are community-organized events focused on learning how to build Android apps using Jetpack Compose. Attendees get hands-on coding experience with Compose in a fun camp theme. Compose Camp has a similar learning format to Android Study Jams, with a group coming together for hands-on learning of a specific Android topic like Compose. The document also provides details about benefits of using Jetpack Compose for app development, such as less code, intuitive use, accelerated development, and powerful features.
Compose Camp is an introduction to building Android apps using Jetpack Compose. It teaches the basics of Kotlin programming language, Android Studio setup, and Jetpack Compose through hands-on projects. The learning objectives are to build first Android apps, set up development environment, learn Kotlin fundamentals like variables, data types, functions, and discover resources to continue learning Compose. The course covers these concepts through topics like Kotlin Playground, variables and data types, functions, and a quiz.
This document provides information about Compose Camp 2022, which is a hands-on introduction to building Android apps with Jetpack Compose. The camp will teach attendees how to set up Android Studio, learn the basics of Kotlin programming, and build their first Android apps with Compose. It includes schedules, learning objectives, pathways for different topics, and previews of sample apps that will be created. Pathways cover Kotlin basics, Android Studio, creating a greeting app, and building a pet adoption app with images and multiple composable functions. The goal is for attendees to learn enough to continue exploring Compose development on their own after the camp.
The document is a collection of snippets about learning Kotlin and building Android apps. It includes explanations of Kotlin concepts like functions, variables, data types, conditionals, loops, and collections methods. It also discusses Compose Camp which is an introduction to building Android apps with Jetpack Compose. The snippets provide code examples and explanations to help teach Kotlin programming basics.
The document discusses Kotlin fundamentals including defining functions, variables, and basic data types. It explains that Kotlin is used to build Android apps and functions are segments of a program that perform specific tasks. Functions begin with the fun keyword and need parentheses and curly braces. Variables can be val for immutable values or var for mutable, require a name, data type, and can have an initial value assigned.
Jetpack Compose is Android's modern toolkit for building native UIs that allows developers to quickly build apps with less code. It uses a declarative paradigm where the UI is described rather than imperatively building each component, simplifying development. The document then discusses how Compose allows building beautiful apps with less code, intuitive Kotlin APIs, compatibility with existing code, and powerful tools like live previews and Material Design support built-in. It also advertises an upcoming session that will cover building a sample app with Compose.
This document outlines the schedule and topics for a Compose Camp course on Android development with Jetpack Compose. The schedule includes hands-on projects to create a dice roller app and tip calculator app, as well as sessions on debugging with Android Studio, understanding state management, and writing automated tests. Key topics covered are how Compose works, the remember and mutableStateOf functions for managing state, state hoisting, and an overview of the Android developer resources available.
Jetpack Compose is a modern toolkit for building Android UIs that simplifies and accelerates development. Compose uses composable functions that take in data and emit UI elements without returning anything. Composable functions are the basic building blocks of Compose UIs. The three standard layout elements in Compose are Column, Row, and Box, which take composable content as arguments to place items in a vertical, horizontal, or stacked layout respectively. Modifiers are used to decorate or add behavior to UI elements.
This document summarizes projects completed by Matt Willmer as part of a .NET Masters program. The projects involved building multi-tier applications using technologies like C#, ASP.NET, Windows Forms, SQL Server, and Visual Studio. Project 1 focused on learning C# features like properties and enumerators. Project 2 involved creating a Windows Forms application for a library management system. Project 3 added database functionality using LINQ to SQL. Project 4 created a web-based presentation layer for the library system using ASP.NET.
This document outlines the schedule and content for an Android study jam session on Kotlin fundamentals. The schedule includes revising Kotlin Koans, and learning about pathways, arrays, strings, loops, lambda expressions, data classes, Android Studio, the Android emulator, views, view groups, declaring layouts in XML, and the anatomy of a basic Android app project. It also provides information on how to access an online Android Kotlin fundamentals course through Google Developers, including starting the course, the unit structure, pathways available, and apps that will be built.
This document contains a summary of an introductory session on Kotlin programming. It defines Kotlin as an open-source language that targets the JVM, Android, JavaScript and Native platforms. It notes that Kotlin code is shorter and more readable than Java for the same problems. The document discusses variables, data types, functions, and differences between var and val keywords in Kotlin. It provides examples of printing, defining variables, adding comments, defining functions, and passing parameters to functions.
This document discusses building a multiple activity Android app. It includes recapping an Instagram layout app, defining attributes for posts and stories, designing the app structure with classes like Post and Story, and using intents to transition between activities. It also covers the activity lifecycle and sending data between activities using intents. The goal is to clone an example multi-activity app that navigates between three activities using intents.
This document discusses building a multiple activity Android app. It includes recapping an Instagram layout app, defining attributes for posts and stories, designing the app structure with classes like Post and Story, and using intents to transition between activities. It also covers the activity lifecycle and sending data between activities using intents. The goal is to clone an example multi-activity app that transitions between three activities using intents.
The document provides an overview of key Kotlin programming concepts including functions, variables, data types, control flow, classes and objects. Some key points covered include:
- Functions are segments of a program that perform specific tasks and can take parameters and return values. The main function is the entry point of a Kotlin program.
- Variables are containers that hold values of different data types like String, Int, Boolean. Variables are defined using val for immutable values and var for mutable values.
- Control flow is handled through if/else statements and when expressions. These allow different code blocks to execute conditionally.
- Classes provide blueprints to create objects with properties and methods. Objects are instances of classes
it describes the bony anatomy including the femoral head , acetabulum, labrum . also discusses the capsule , ligaments . muscle that act on the hip joint and the range of motion are outlined. factors affecting hip joint stability and weight transmission through the joint are summarized.
Strategies for Effective Upskilling is a presentation by Chinwendu Peace in a Your Skill Boost Masterclass organisation by the Excellence Foundation for South Sudan on 08th and 09th June 2024 from 1 PM to 3 PM on each day.
The document outlines an introduction to Kotlin and Jetpack Compose event called Compose Camp. It provides information on what Compose Camp is, which is a community-organized event for learning how to build Android apps using Jetpack Compose through hands-on coding. It details the learning objectives of Compose Camp, which are to build first Android apps, set up Android Studio, learn Kotlin basics and Jetpack Compose, and find additional learning resources. It also provides an overview of some Kotlin and Compose concepts that will be covered, such as functions, variables, and the @Composable annotation.
The document is a presentation on basics of Android development using Kotlin and Jetpack Compose. It includes an introduction to Kotlin programming concepts like variables, functions, data types etc. It then covers topics like building a basic Android app using Android Studio and Jetpack Compose. The schedule includes an introduction to Kotlin, setting up Android Studio and building a first Android app.
This document provides information about a Compose Camp event to teach Android app development using Jetpack Compose. The event is intended for beginners, including those with no programming experience. Attendees will learn Kotlin basics, how to build Android UIs with Compose, and modern Android development best practices. The agenda includes sessions on Kotlin programming concepts like variables, data types, functions, and conditional statements. Hands-on coding exercises will have attendees creating simple apps to practice their new skills.
This Android development workshop is a gateway to the exciting world of mobile app development. Whether you're a complete beginner or have some programming expertise, this class will provide you with the core skills and knowledge required to create great Android apps.
The document provides instructions and examples for creating a basic Android application using Kotlin and Jetpack Compose. It introduces Android Studio and the tools for building Compose apps. It demonstrates how to define composable functions to display text and images. It shows how to organize composables using Column and preview the UI using the @Preview annotation. The goal is to build a simple pet adoption app that displays the name, information and photo of a dog.
The document provides information about Compose Camp events, which are community-organized events focused on learning how to build Android apps using Jetpack Compose. Attendees get hands-on coding experience with Compose in a fun camp theme. Compose Camp has a similar learning format to Android Study Jams, with a group coming together for hands-on learning of a specific Android topic like Compose. The document also provides details about benefits of using Jetpack Compose for app development, such as less code, intuitive use, accelerated development, and powerful features.
Compose Camp is an introduction to building Android apps using Jetpack Compose. It teaches the basics of Kotlin programming language, Android Studio setup, and Jetpack Compose through hands-on projects. The learning objectives are to build first Android apps, set up development environment, learn Kotlin fundamentals like variables, data types, functions, and discover resources to continue learning Compose. The course covers these concepts through topics like Kotlin Playground, variables and data types, functions, and a quiz.
This document provides information about Compose Camp 2022, which is a hands-on introduction to building Android apps with Jetpack Compose. The camp will teach attendees how to set up Android Studio, learn the basics of Kotlin programming, and build their first Android apps with Compose. It includes schedules, learning objectives, pathways for different topics, and previews of sample apps that will be created. Pathways cover Kotlin basics, Android Studio, creating a greeting app, and building a pet adoption app with images and multiple composable functions. The goal is for attendees to learn enough to continue exploring Compose development on their own after the camp.
The document is a collection of snippets about learning Kotlin and building Android apps. It includes explanations of Kotlin concepts like functions, variables, data types, conditionals, loops, and collections methods. It also discusses Compose Camp which is an introduction to building Android apps with Jetpack Compose. The snippets provide code examples and explanations to help teach Kotlin programming basics.
The document discusses Kotlin fundamentals including defining functions, variables, and basic data types. It explains that Kotlin is used to build Android apps and functions are segments of a program that perform specific tasks. Functions begin with the fun keyword and need parentheses and curly braces. Variables can be val for immutable values or var for mutable, require a name, data type, and can have an initial value assigned.
Jetpack Compose is Android's modern toolkit for building native UIs that allows developers to quickly build apps with less code. It uses a declarative paradigm where the UI is described rather than imperatively building each component, simplifying development. The document then discusses how Compose allows building beautiful apps with less code, intuitive Kotlin APIs, compatibility with existing code, and powerful tools like live previews and Material Design support built-in. It also advertises an upcoming session that will cover building a sample app with Compose.
This document outlines the schedule and topics for a Compose Camp course on Android development with Jetpack Compose. The schedule includes hands-on projects to create a dice roller app and tip calculator app, as well as sessions on debugging with Android Studio, understanding state management, and writing automated tests. Key topics covered are how Compose works, the remember and mutableStateOf functions for managing state, state hoisting, and an overview of the Android developer resources available.
Jetpack Compose is a modern toolkit for building Android UIs that simplifies and accelerates development. Compose uses composable functions that take in data and emit UI elements without returning anything. Composable functions are the basic building blocks of Compose UIs. The three standard layout elements in Compose are Column, Row, and Box, which take composable content as arguments to place items in a vertical, horizontal, or stacked layout respectively. Modifiers are used to decorate or add behavior to UI elements.
This document summarizes projects completed by Matt Willmer as part of a .NET Masters program. The projects involved building multi-tier applications using technologies like C#, ASP.NET, Windows Forms, SQL Server, and Visual Studio. Project 1 focused on learning C# features like properties and enumerators. Project 2 involved creating a Windows Forms application for a library management system. Project 3 added database functionality using LINQ to SQL. Project 4 created a web-based presentation layer for the library system using ASP.NET.
This document outlines the schedule and content for an Android study jam session on Kotlin fundamentals. The schedule includes revising Kotlin Koans, and learning about pathways, arrays, strings, loops, lambda expressions, data classes, Android Studio, the Android emulator, views, view groups, declaring layouts in XML, and the anatomy of a basic Android app project. It also provides information on how to access an online Android Kotlin fundamentals course through Google Developers, including starting the course, the unit structure, pathways available, and apps that will be built.
This document contains a summary of an introductory session on Kotlin programming. It defines Kotlin as an open-source language that targets the JVM, Android, JavaScript and Native platforms. It notes that Kotlin code is shorter and more readable than Java for the same problems. The document discusses variables, data types, functions, and differences between var and val keywords in Kotlin. It provides examples of printing, defining variables, adding comments, defining functions, and passing parameters to functions.
This document discusses building a multiple activity Android app. It includes recapping an Instagram layout app, defining attributes for posts and stories, designing the app structure with classes like Post and Story, and using intents to transition between activities. It also covers the activity lifecycle and sending data between activities using intents. The goal is to clone an example multi-activity app that navigates between three activities using intents.
This document discusses building a multiple activity Android app. It includes recapping an Instagram layout app, defining attributes for posts and stories, designing the app structure with classes like Post and Story, and using intents to transition between activities. It also covers the activity lifecycle and sending data between activities using intents. The goal is to clone an example multi-activity app that transitions between three activities using intents.
The document provides an overview of key Kotlin programming concepts including functions, variables, data types, control flow, classes and objects. Some key points covered include:
- Functions are segments of a program that perform specific tasks and can take parameters and return values. The main function is the entry point of a Kotlin program.
- Variables are containers that hold values of different data types like String, Int, Boolean. Variables are defined using val for immutable values and var for mutable values.
- Control flow is handled through if/else statements and when expressions. These allow different code blocks to execute conditionally.
- Classes provide blueprints to create objects with properties and methods. Objects are instances of classes
it describes the bony anatomy including the femoral head , acetabulum, labrum . also discusses the capsule , ligaments . muscle that act on the hip joint and the range of motion are outlined. factors affecting hip joint stability and weight transmission through the joint are summarized.
Strategies for Effective Upskilling is a presentation by Chinwendu Peace in a Your Skill Boost Masterclass organisation by the Excellence Foundation for South Sudan on 08th and 09th June 2024 from 1 PM to 3 PM on each day.
This presentation includes basic of PCOS their pathology and treatment and also Ayurveda correlation of PCOS and Ayurvedic line of treatment mentioned in classics.
How to Build a Module in Odoo 17 Using the Scaffold MethodCeline George
Odoo provides an option for creating a module by using a single line command. By using this command the user can make a whole structure of a module. It is very easy for a beginner to make a module. There is no need to make each file manually. This slide will show how to create a module using the scaffold method.
How to Add Chatter in the odoo 17 ERP ModuleCeline George
In Odoo, the chatter is like a chat tool that helps you work together on records. You can leave notes and track things, making it easier to talk with your team and partners. Inside chatter, all communication history, activity, and changes will be displayed.
Exploiting Artificial Intelligence for Empowering Researchers and Faculty, In...Dr. Vinod Kumar Kanvaria
Exploiting Artificial Intelligence for Empowering Researchers and Faculty,
International FDP on Fundamentals of Research in Social Sciences
at Integral University, Lucknow, 06.06.2024
By Dr. Vinod Kumar Kanvaria
Executive Directors Chat Leveraging AI for Diversity, Equity, and InclusionTechSoup
Let’s explore the intersection of technology and equity in the final session of our DEI series. Discover how AI tools, like ChatGPT, can be used to support and enhance your nonprofit's DEI initiatives. Participants will gain insights into practical AI applications and get tips for leveraging technology to advance their DEI goals.
ISO/IEC 27001, ISO/IEC 42001, and GDPR: Best Practices for Implementation and...PECB
Denis is a dynamic and results-driven Chief Information Officer (CIO) with a distinguished career spanning information systems analysis and technical project management. With a proven track record of spearheading the design and delivery of cutting-edge Information Management solutions, he has consistently elevated business operations, streamlined reporting functions, and maximized process efficiency.
Certified as an ISO/IEC 27001: Information Security Management Systems (ISMS) Lead Implementer, Data Protection Officer, and Cyber Risks Analyst, Denis brings a heightened focus on data security, privacy, and cyber resilience to every endeavor.
His expertise extends across a diverse spectrum of reporting, database, and web development applications, underpinned by an exceptional grasp of data storage and virtualization technologies. His proficiency in application testing, database administration, and data cleansing ensures seamless execution of complex projects.
What sets Denis apart is his comprehensive understanding of Business and Systems Analysis technologies, honed through involvement in all phases of the Software Development Lifecycle (SDLC). From meticulous requirements gathering to precise analysis, innovative design, rigorous development, thorough testing, and successful implementation, he has consistently delivered exceptional results.
Throughout his career, he has taken on multifaceted roles, from leading technical project management teams to owning solutions that drive operational excellence. His conscientious and proactive approach is unwavering, whether he is working independently or collaboratively within a team. His ability to connect with colleagues on a personal level underscores his commitment to fostering a harmonious and productive workplace environment.
Date: May 29, 2024
Tags: Information Security, ISO/IEC 27001, ISO/IEC 42001, Artificial Intelligence, GDPR
-------------------------------------------------------------------------------
Find out more about ISO training and certification services
Training: ISO/IEC 27001 Information Security Management System - EN | PECB
ISO/IEC 42001 Artificial Intelligence Management System - EN | PECB
General Data Protection Regulation (GDPR) - Training Courses - EN | PECB
Webinars: https://pecb.com/webinars
Article: https://pecb.com/article
-------------------------------------------------------------------------------
For more information about PECB:
Website: https://pecb.com/
LinkedIn: https://www.linkedin.com/company/pecb/
Facebook: https://www.facebook.com/PECBInternational/
Slideshare: http://www.slideshare.net/PECBCERTIFICATION
A review of the growth of the Israel Genealogy Research Association Database Collection for the last 12 months. Our collection is now passed the 3 million mark and still growing. See which archives have contributed the most. See the different types of records we have, and which years have had records added. You can also see what we have for the future.
A workshop hosted by the South African Journal of Science aimed at postgraduate students and early career researchers with little or no experience in writing and publishing journal articles.
How to Manage Your Lost Opportunities in Odoo 17 CRMCeline George
Odoo 17 CRM allows us to track why we lose sales opportunities with "Lost Reasons." This helps analyze our sales process and identify areas for improvement. Here's how to configure lost reasons in Odoo 17 CRM
How to Make a Field Mandatory in Odoo 17Celine George
In Odoo, making a field required can be done through both Python code and XML views. When you set the required attribute to True in Python code, it makes the field required across all views where it's used. Conversely, when you set the required attribute in XML views, it makes the field required only in the context of that particular view.
The simplified electron and muon model, Oscillating Spacetime: The Foundation...RitikBhardwaj56
Discover the Simplified Electron and Muon Model: A New Wave-Based Approach to Understanding Particles delves into a groundbreaking theory that presents electrons and muons as rotating soliton waves within oscillating spacetime. Geared towards students, researchers, and science buffs, this book breaks down complex ideas into simple explanations. It covers topics such as electron waves, temporal dynamics, and the implications of this model on particle physics. With clear illustrations and easy-to-follow explanations, readers will gain a new outlook on the universe's fundamental nature.
1. This work is licensed under the Apache 2.0 License
2. This work is licensed under the Apache 2.0 License
Learn fundamentals of Kotlin, object-oriented
programming, and lambdas.
Kotlin Fundamentals
3. This work is licensed under the Apache 2.0 License
‘IF KEYWORD’ +
‘CONDITION YOU NEED TO
EVALUATE’
BOOLEAN EXPRESSION
Expressions combine values, variables,
and operators that return a value.
Boolean expressions return a boolean
value.
Use If/else statements to express
conditions
4.
5. This work is licensed under the Apache 2.0 License
Use a when statement for multiple branches
In Kotlin, when you deal with multiple branches, you can use the
when statement instead of the if/else statement because it
improves readability, which refers to how easy it is for human
readers, typically developers, to read the code. It's very important
to consider readability when you write your code because it's likely
that other developers need to review and modify your code
throughout its lifetime
6.
7. This work is licensed under the Apache 2.0 License
Use nullable variables
1)What is null?
In Unit 1, you learned that when you declare a variable, you need to assign it
a value immediately. For example, when you declare a favorite Actor
variable, you may assign it a "Sandra Oh" string value immediately.
However, what if you don't have a favorite actor? You might want to assign
the variable a "Nobody" or "None" value. This isn't a good approach because
your program interprets the favorite Actor variable to have a "Nobody" or "None"
value rather than no value at all. In Kotlin, you can use null to indicate that
there's no value associated with the variable.
8.
9. This work is licensed under the Apache 2.0 License
Handle nullable variables
Previously, you learned to use the . operator to access methods and
properties of non-nullable variables. In this section, you learn how to
use it to access methods and properties of nullable variables
fun main() {
var favoriteActor: String = "Sandra Oh"
println(favoriteActor.length)
}
10. This work is licensed under the Apache 2.0 License
Add a button to an app
Learn how to respond to a button
click in an Android app.
11. This work is licensed under the Apache 2.0 License
Define a class
1)A class definition starts with the class
keyword, followed by a name and a set of curly
braces.
2)The part of the syntax before the opening curly
brace is also referred to as the class header. In
the curly braces, you can specify properties and
functions for the class.
12. This work is licensed under the Apache 2.0 License
Create an instance of a class
1)To use an object, you create the object and assign it to a variable,
similar to how you define a variable. You use the val keyword to create
an immutable variable and the var keyword for a mutable variable.
2)The val or var keyword is followed by the name of the variable, then
an = assignment operator, then the instantiation of the class object. You
can see the syntax in this diagram:
13. This work is licensed under the Apache 2.0 License
Define class methods
Call a method on an object
14. This work is licensed under the Apache 2.0 License
Define class properties
Properties are basically variables that are defined in the class
body instead of the function body. This means that the syntax
to define properties and variables are identical.
37. This work is licensed under the Apache 2.0 License
COMPOSE CAMP
SESSION 2
38. This work is licensed under the Apache 2.0 License
Pathway 3:
Interact with UI
and state
39. Activity 1: Intro to state in Compose
Activity 2:Calculate a custom tip
Activity 3:Write automated tests
Activity 4:Project: Create an Art Space app
Create a tip calculator app that calculates the tip from user input in the app.
40. This work is licensed under the Apache 2.0 License
Activity 1: Intro to state in Compose
What you'll learn
● How to think about state in a UI.
● How Compose uses state to display data.
● How to add a text box to your app.
● How to hoist a state.
What you'll build
● A tip-calculator app called Tip Time that calculates a tip amount based
on the service amount.
41. This work is licensed under the Apache 2.0 License
42. This work is licensed under the Apache 2.0 License
43. This work is licensed under the Apache 2.0 License
Create a project.
<resources>
<string name="app_name">Tip Time</string>
<string name="calculate_tip">Calculate Tip</string>
<string name="cost_of_service">Cost of Service</string>
<string name="tip_amount">Tip amount: %s</string>
</resources>
44. This work is licensed under the Apache 2.0 License
Add a screen title
override fun onCreate(savedInstanceState: Bundle?) {
//...
setContent {
TipTimeTheme {
Surface(
//...
) {
TipTimeScreen()
}
}
}
}
45. This work is licensed under the Apache 2.0 License
@Preview(showBackground = true)
@Composable
fun DefaultPreview() {
TipTimeTheme {
TipTimeScreen()
}
}
Column(
modifier = Modifier.padding(32.dp),
verticalArrangement = Arrangement.spacedBy(8.dp)
) {}
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.padding
import androidx.compose.ui.unit.dp
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.sp
import androidx.compose.ui.Alignment
Text(
text = stringResource(R.string.calculate_tip),
fontSize = 24.sp,
modifier = Modifier.align(Alignment.CenterHorizontally)
)
48. This work is licensed under the Apache 2.0 License
6. Use state in Compose
val amountInput = "0"
49. This work is licensed under the Apache 2.0 License
7. The composition
@Composable
fun EditNumberField() {
var amountInput = mutableStateOf("0")
TextField(
value = amountInput.value,
onValueChange = { amountInput.value = it },
)
}
50. This work is licensed under the Apache 2.0 License
8. Use remember function to save state
Warning: This code may throw the error that you see in this image regarding the getValue() extension function:
If so, manually add the getValue and setValue imports into the import block at the beginning of the file as you can see in
this image:
51. This work is licensed under the Apache 2.0 License
Warning: This code may throw the error that you see in this image regarding the getValue() extension function:
If so, manually add the getValue and setValue imports into the import block at the beginning of the file as you
can see in this image:
52. This work is licensed under the Apache 2.0 License
@Composable
fun EditNumberField() {
var amountInput by remember { mutableStateOf("") }
TextField(
value = amountInput,
onValueChange = { amountInput = it },
)
}
53. This work is licensed under the Apache 2.0 License
9. State and recomposition in action
54. This work is licensed under the Apache 2.0 License
10. Modify the appearance
55. This work is licensed under the Apache 2.0 License
@Composable
fun EditNumberField() {
var amountInput by remember { mutableStateOf("") }
TextField(
value = amountInput,
onValueChange = { amountInput = it },
label = { Text(stringResource(R.string.cost_of_service)) },
modifier = Modifier.fillMaxWidth(),
singleLine = true,
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number)
)
}
56. This work is licensed under the Apache 2.0 License
57. This work is licensed under the Apache 2.0 License
11. Display the tip amount
58. This work is licensed under the Apache 2.0 License
private fun calculateTip(
amount: Double,
tipPercent: Double = 15.0
): String {
val tip = tipPercent / 100 * amount
return NumberFormat.getCurrencyInstance().format(tip)
}
59. This work is licensed under the Apache 2.0 License
@Composable
fun EditNumberField() {
var amountInput by remember { mutableStateOf("") }
val amount = amountInput.toDoubleOrNull() ?: 0.0
val tip = calculateTip(amount)
TextField(
value = amountInput,
onValueChange = { amountInput = it },
label = { Text(stringResource(R.string.cost_of_service)) },
modifier = Modifier.fillMaxWidth(),
singleLine = true,
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number)
)
}
60. This work is licensed under the Apache 2.0 License
Show the calculated tip amount
61. This work is licensed under the Apache 2.0 License
@Composable
fun TipTimeScreen() {
Column(
//...
) {
Text(
text = stringResource(R.string.tip_amount, ""),
modifier = Modifier.align(Alignment.CenterHorizontally),
fontSize = 20.sp,
fontWeight = FontWeight.Bold
)
EditNumberField()
Spacer(Modifier.height(24.dp))
}
}
62. This work is licensed under the Apache 2.0 License
12. State hosting
Understand stateful versus stateless composables
You should hoist the state when you need to:
● Share the state with multiple composable functions.
● Create a stateless composable that can be reused in your app.
63. This work is licensed under the Apache 2.0 License
@Composable
fun TipTimeScreen() {
var amountInput by remember { mutableStateOf("") }
val amount = amountInput.toDoubleOrNull() ?: 0.0
val tip = calculateTip(amount)
Column(
modifier = Modifier.padding(32.dp),
verticalArrangement = Arrangement.spacedBy(8.dp)
) {
Text(
text = stringResource(R.string.calculate_tip),
fontSize = 24.sp,
modifier = Modifier.align(Alignment.CenterHorizontally)
)
Spacer(Modifier.height(16.dp))
EditNumberField(value = amountInput,
onValueChange = { amountInput = it }
)
Spacer(Modifier.height(24.dp))
Text(
text = stringResource(R.string.tip_amount, tip),
modifier = Modifier.align(Alignment.CenterHorizontally),
fontSize = 20.sp,
fontWeight = FontWeight.Bold
)
}
}
64. This work is licensed under the Apache 2.0 License
@Composable
fun EditNumberField(
value: String,
onValueChange: (String) -> Unit
) {
TextField(
value = value,
onValueChange = onValueChange,
label = { Text(stringResource(R.string.cost_of_service)) },
modifier = Modifier.fillMaxWidth(),
singleLine = true,
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number)
)
}
65. This work is licensed under the Apache 2.0 License
66. This work is licensed under the Apache 2.0 License
13. Get the solution
To download the code for the finished activity,
you can download the repository as a zip file, unzip it, and open it in Android Studio.
67. This work is licensed under the Apache 2.0 License
Conclusion.
Congratulations! You completed this codelab and learned how to use state in a
Compose app!
Summary
● State in an app is any value that can change over time.
● The Composition is a description of the UI built by Compose when it executes
composables. Compose apps call composable functions to transform data into UI.
● Initial composition is a creation of the UI by Compose when it executes
composable functions the first time.
● Recomposition is the process of running the same composables again to update
the tree when their data changes.
● State hoisting is a pattern of moving state up to make a component stateless.
68. This work is licensed under the Apache 2.0 License
Activity 4: calculate a custom tip
69. This work is licensed under the Apache 2.0 License
What you'll learn
● How to add an action button to a virtual keyboard.
● How to set up keyboard actions.
● What a Switch composable is and how to use it.
● What the Layout Inspector is.
What you'll build
● A Tip Time App that calculates tip amounts based on the user's inputted
cost of service and tip percentage.
70. This work is licensed under the Apache 2.0 License
Starter app overview
71. This work is licensed under the Apache 2.0 License
4. Add a tip-percentage text
field
@Composable
fun EditNumberField(
@StringRes label: Int,
value: String,
onValueChange: (String) -> Unit,
modifier: Modifier = Modifier
) {
TextField(
//...
label = { Text(stringResource(label)) },
//...
)
}
72. This work is licensed under the Apache 2.0 License
EditNumberField(
label = R.string.how_was_the_service,
value = "",
onValueChange = { }
)
EditNumberField(
label = R.string.how_was_the_service,
value = tipInput,
onValueChange = { tipInput = it }
)
73. This work is licensed under the Apache 2.0 License
@Composable
fun TipTimeScreen() {
var amountInput by remember { mutableStateOf("") }
var tipInput by remember { mutableStateOf("") }
val tipPercent = tipInput.toDoubleOrNull() ?: 0.0
val amount = amountInput.toDoubleOrNull() ?: 0.0
val tip = calculateTip(amount, tipPercent)
Column(
modifier = Modifier.padding(32.dp),
verticalArrangement = Arrangement.spacedBy(8.dp)
) {
Text(
text = stringResource(R.string.calculate_tip),
fontSize = 24.sp,
modifier = Modifier.align(Alignment.CenterHorizontally)
)
Spacer(Modifier.height(16.dp))
EditNumberField(
label = R.string.bill_amount,
value = amountInput,
onValueChange = { amountInput = it }
)
EditNumberField(
label = R.string.how_was_the_service,
value = tipInput,
onValueChange = { tipInput = it }
)
Spacer(Modifier.height(24.dp))
Text(
text = stringResource(R.string.tip_amount, tip),
modifier =
Modifier.align(Alignment.CenterHorizontally),
fontSize = 20.sp,
fontWeight = FontWeight.Bold
)
}
}
74. This work is licensed under the Apache 2.0 License
75. This work is licensed under the Apache 2.0 License
5. Set an action button
@Composable
fun EditNumberField(
//...
) {
TextField(
//...
keyboardOptions = KeyboardOptions.Default.copy(
keyboardType = KeyboardType.Number,
imeAction = ImeAction.Next
)
)
}
76. This work is licensed under the Apache 2.0 License
77. This work is licensed under the Apache 2.0 License
@Composable
fun EditNumberField(
@StringRes label: Int,
keyboardOptions: KeyboardOptions,
value: String,
onValueChange: (String) -> Unit
){
TextField(
//...
keyboardOptions = keyboardOptions
)
} EditNumberField(
label = R.string.how_was_the_service,
keyboardOptions = KeyboardOptions(
keyboardType = KeyboardType.Number,
imeAction = ImeAction.Done
),
value = tipInput,
onValueChange = { tipInput = it }
)
78. This work is licensed under the Apache 2.0 License
79. This work is licensed under the Apache 2.0 License
7. Add a switch
80. This work is licensed under the Apache 2.0 License
@Composable
fun RoundTheTipRow(roundUp: Boolean, onRoundUpChanged: (Boolean) -> Unit) {
Row(
modifier = Modifier
.fillMaxWidth()
.size(48.dp),
verticalAlignment = Alignment.CenterVertically
) {
Text(stringResource(R.string.round_up_tip))
Switch(
modifier = Modifier
.fillMaxWidth()
.wrapContentWidth(Alignment.End),
checked = roundUp,
onCheckedChange = onRoundUpChanged,
colors = SwitchDefaults.colors(
uncheckedThumbColor = Color.DarkGray
)
)
}
}
81. This work is licensed under the Apache 2.0 License
1. Thumb
2. Track
82. This work is licensed under the Apache 2.0 License
private fun calculateTip(amount: Double, tipPercent: Double = 15.0, roundUp:
Boolean): String {
var tip = tipPercent / 100 * amount
if (roundUp)
tip = kotlin.math.ceil(tip)
return NumberFormat.getCurrencyInstance().format(tip)
}
83. This work is licensed under the Apache 2.0 License
84. This work is licensed under the Apache 2.0 License
8. Get the solution code
To download the code for the finished codelab,
you can download the repository as a zip file, unzip it, and open it in Android
Studio.
85. This work is licensed under the Apache 2.0 License
9. Conclusion
Congratulations! You added custom tip functionality to your Tip Time App. Now your app lets users input a
custom tip percentage and round up the tip amount. Share your work on social media with #AndroidBasics!
86. This work is licensed under the Apache 2.0 License
Activity 5: Write automated text
What you'll learn
● What automated tests in Android do.
● Why automated tests are important.
● What a local test is and what it's used for.
● What an instrumentation test is and what it's used for.
● How to write local tests for Android code.
● How to write instrumentation tests for Android apps.
● How to run automated tests.
What you'll build
● A local test
● An instrumentation test
87. This work is licensed under the Apache 2.0 License
Why automated tests are important
At first, it might seem like you don't really need tests in your app, but testing is needed in apps of all
sizes and complexities.
To grow your codebase, you need to test existing functionality as you add new pieces, which is only
possible if you have existing tests. As your app grows, manual testing takes much more effort than
automated testing. Furthermore, once you start working on apps in production, testing becomes critical
when you have a large user base. For example, you must account for many different types of devices
running many different versions of Android.
Instrumentation tests
In the context of Android development, an instrumentation test is a UI test. Instrumentation tests let you test
parts of an app that depend on the Android, and its platform APIs and services.
Unlike local tests, UI tests launch an app or part of an app, simulate user interactions, and check whether the
app reacted appropriately. Throughout this course, UI tests are run on a physical device or emulator.
88. This work is licensed under the Apache 2.0 License
Conclusion
Tests are a critical component of software quality control. As you continue
to build Android apps, ensure that you write tests alongside your app
features to ensure that your apps work properly throughout the
development process.