The Android Crash Course For Beginners to Advanced
4.4 (13 ratings)
Instead of using a simple lifetime average, Udemy calculates a course's star rating by considering a number of different factors such as the number of ratings, the age of ratings, and the likelihood of fraudulent ratings.
77 students enrolled
Wishlisted Wishlist

Please confirm that you want to add The Android Crash Course For Beginners to Advanced to your Wishlist.

Add to Wishlist

The Android Crash Course For Beginners to Advanced

The Android Crash Course will take you from a beginner to a confident Android developer.
4.4 (13 ratings)
Instead of using a simple lifetime average, Udemy calculates a course's star rating by considering a number of different factors such as the number of ratings, the age of ratings, and the likelihood of fraudulent ratings.
77 students enrolled
Created by Hadleigh Gaudreau
Last updated 11/2016
English
Current price: $12 Original price: $200 Discount: 94% off
3 days left at this price!
30-Day Money-Back Guarantee
Includes:
  • 13 hours on-demand video
  • Full lifetime access
  • Access on mobile and TV
  • Certificate of Completion

Training 5 or more people?

Get your team access to Udemy's top 2,000 courses anytime, anywhere.

Try Udemy for Business
What Will I Learn?
  • Confident in Android Development
  • Understand the concepts and methods used.
View Curriculum
Requirements
  • Computer Requirements
  • Mac / PC Machine
  • 2GB RAM Minimum - 8GB RAM Recommended
  • 2GB Disk Space Minimum - 4GB Recommended
  • Minimum screen resolution 1280 X 800
  • Java JDK - We will install together
  • Android Studio - We will install together
Description

This course is designed to take a person with little or no knowledge in Android Application Development and take them through a crash course in getting an application set up and operating successfully. 

The only materials required would be a PC/Mac, all programs needed to help build your applications are given within the course with details on installation and use. 

Because this course is designed to help those with little to know knowledge in Android Application Development, this course has been made clear and with as little technical jargon as possible. It was cover several main topics such as; Multi-threading, Customer Listviews, SQL, Implementing Google Maps to name a few. 

This course is over 10 hours long, however with the clear and easy to understand approach to the topics we feel that you will complete it in no time at all. 

If your keen on improving your development skills then this crash course will greatly assist you in helping you to reach the next level. 

Who is the target audience?
  • Anyone wanting to learn Android from scratch.
Compare to Other Android Development Courses
Curriculum For This Course
116 Lectures
13:10:51
+
Introduction to Android Studio Section 1
7 Lectures 24:50

In this section I'm going to show you how to install Android Studio on a Windows and Mac based machine. After the installation we can then start more about how the software works, before we start our developing career.

Preview 01:19

Installing Android Studio on Windows - 

Our first task is to install our Android Studio application onto a Windows based machine so we can start writing our applications. I will take you through the entire process of finding the Java JDK and the Android studio software, we will then get prepare the software and learn all the key aspects required

Preview 08:09

Installing Android Studio on Mac - 

Our first task is to install our Android Studio application onto a Mac based machine so we can start writing our applications. I will take you through the entire process of finding the Java JDK and the Android studio software, we will then get prepare the software and learn all the key aspects required.

Preview 07:13

Android Studio Menu - 

So by now we have fully installed Android Studio onto your Mac/PC. In this section we will have a quick look at the menu and what features are available to us a developer and how we can use them to aid our application development.

Working with the Android Studio Menu
02:41

SDK Manager - 

Before we get started with any application development we need to install the SDK's. The SDK's are the backbone of any application and allow us to use a range of tools. For example we can download a range of Android Phone versions so that we can test our application on devices which run old versions of software.

SDK Manager
02:42

Stack overflow -

In this section we will look at the online forum of Stack overflow. From there I can show you how to ask a question and get a response from the online community and how we can search stack overflow to find a response to particular question.

Stack Overflow
01:58

Summary Section 1 - 

Congratulations on completing the introductory section of the course and I hope we now have everything installed and ready to go. In the next section we can kick start our Android coding and  start building our first Android application, go luck!

Summary Video
00:48

Introductory Quiz - 

We now have Android Studio installed and ready to go, its now time to test your knowledge on what we have just covered and get you ready to start making your first application.

Introductory Quiz - Level Easy
4 questions
+
My First Application Section 2
10 Lectures 50:58

Introduction Video - 

This video contains a small introduction into our new upcoming section which is the development of our first Android application. First of all we will look into creating our application and then progressing into what holds everything together and how they are linked.

Introduction Video - My First Application
00:54

My First Application - 

The time has finally arrived to make our first Android Application. We will begin from the start menu and create the app, we will also understand some of features Android offers us e.g. the selection of templates and additional personalisation features.

Create out first application
07:08

Virtual Phone - 

We have finally reached the last but best section of the section, here we will create a virtual phone using AVD and have a selection of options we can choose from. After the creation of the device we can then test the code we have been working on and see how it turns out for the user.

Build a virtual device
05:17

Android Manifest - 

In this section we will have a look at the Android Manifest and the impact it has when creating an application. We will also look how when a new page is created its then linked into the Manifest so that is can communicate with the rest of the application. We can also look at additional features such as the ability to change our application icon inside of the manifest.

Android Manifest
04:13

What is Gradle? -

By this point we have had a little play around with the code inside of our application and the design side. We are now going to move onto working Gradle which is another key part of application which should only need to make minor alterations if needed. Grade controls key aspects such as the minimum and maximum API level which can run our application.

What is Gradle?
02:43

What is XML? - 

XML sits along side all of our code. The concept of XML is that it allows us as the developer to design a suitable layout for the user. In this section we will cover adding different tools and gadgets to our layout so that it can be more user friendly and more appealing to our target audience.

Understanding the XML Layout
09:25

Understanding our java files - 

Now we understand the back bone of our application which is the Manifest we can look into coding particular pages of our application. We will firstly look at a basic set of Java code provided to us when an Android activity is made and understand what the code does when the application is run.

Understand our Java files
06:56

Custom Textviews - 

Now that we have a greater understanding of XML is and how it can be used to aid our user. It's now time to start aiding some meaning fall information to the screen and start customising it to our needs. We will look how to customise a Textview in the form of layout and placement around the screen, we will also look at changing fonts, colours and sizes.

Customisation of Textviews
07:26

Custom Imageview - 

Ok so hopefully by now we have a greater understand of customising after playing around with the textview. I now want to show you how to add an Imageview into our application and then add our own images into the project. We will then display the information on our virtual device at a later point during the section.

Customisation of Imageviews
06:15

Congratulations for reaching the end of section 2 - 

I hope you have now created your first Android application and you now have a better understanding of all the key parts required in order to get started. In the next section we will progress our knowledge even further and start to learn more of coding concepts behind our Android applications.

Summary Video
00:41

Congratulations on completing the section its now time to test your knowledge on what we have just learn't. Good luck on the quiz and hopefully we get 100% right.

My First Application Quiz - Level Easy
4 questions
+
Android Back To Basics Section 3
13 Lectures 01:43:14

Android Back to Basics - Introduction

Welcome to section 3 of the Android Crash Course. In this section we will be covering some fun little concepts inside of our application. We will be learning about onclick commands used with buttons, we will also be working with animation and audio. I will guide you every step of the way.

Introduction Video - Back to Basic's
00:58

Set a button onclick  - 

In this section we focus on enabling a small button on click. We will write a small section of code which will allow the user to press a button on the virtual device and then display a message in the form of a small notification. This message will be present to the user but no Logcat which we will focus on a little later.

Set button on click
07:34

Set button on click listener -

In the previous section we focused on coding a onclick command and then assign the code to the button on the design side. The second method i'm going to show you allows you to assign our Java code directly to the button using a button on set click listener.

Set button onclick listener
05:49

Change the text with button click - 

I'm going to show you a very simple method which uses the method Set text which allows you to change or set the text of particular button or textview when the button is clicked. You can then further this method and use it multiple different ways depending on your preference.

Change text with button click
08:26

Change Image with Button - 

In the previous section we focused on changing the text using the Set text method. Now we are going to use a slightly different method in order change an image inside of image view when a button is clicked. I will show you how to import the image and all the code you are going to require.

Change image with button click
08:51

Fade in and out animation - 

It's time to play around with some of the animation features available inside Android. In this section we are going to focus more on fading an image out and replacing with another image beneath it. I will show you how to add our images and getting started with the process.

Working with animation part 1
14:01

Spin and resize -

In this section we are going to follow up from the application we started in the previous section. Now that we have the fade function implemented into our application its now time to add some additional features such as being spin and resize  the image when a button is clicked. 

Working with animation part 2
13:27

Logcat - 

In this lecture we will learn the concept of using Logcat inside of our applications. Logcat is used to display a message to the developer being a preset message or a error message. The concept being that we can spot errors when they occur and gain a greater understanding what the error is and what caused the problem to start with.

What is logcat?
04:29

Add audio to a project - 

In this section I will take you through the process of adding audio to project and initiating the audio when a button is clicked. In further sections we will manipulate audio so that we can have more control over the progress of the audio being played.

Add audio to a project
10:11

Set seeker volume - 

We will continue to work with our audio file that we have recently imported. This time round we will implement a seeker bar which will allow the user the ability set the overall volume of the audio using a slider based system. We will then progress in the next section to actually setting a progress bar which will follow the audio as its being played.

Set seek volume
15:22

Set progress bar -

The final section in working with our audio. We will now set a progress bar which will follow the audio file as it's being played. This progress will also allow the user to select which part of the audio is to rewind or be played using a slider based system.

Set progress bar
08:38

Add Scrollview - 

Struggling to fit everything on one screen? Don't worry we can change our screen to allow the user to scroll any direction you want avoiding any cramped design and the freedom of movement for the user.

Working with scroll views
04:43

Congratulation on completing section 3 - 

Hopefully by now you are starting to gain a better understanding of android and you're starting to understand you surrounding a little more. In the next section we are going to look at the behind the scenes of Android and see what really makes a Android application tick.

Summary Video
00:45

Android back to basics quiz - Level Moderate
4 questions
+
The behind the scenes of Java Section 4
11 Lectures 01:17:08

The behind the scenes of Java - Introduction 

In this section we will go through the process of understanding the key reasons why we use Variables, IF Statements and Loops inside of our application. We will then implement them into a couple small applications where we can then test the results.

Introduction Video - The behind the scenes of Java
00:39

What is a variable? -

In this video I will show you a range of variables that we use in our day to day programming and how to implement them into our application. Further on in the section we will focus on specific types of variables and then make some applications to test our theory's.

What is a variable?
11:45

Adding multiple edit text views together - 

We now want to give the user a little more freedom then just increasing and decreasing a number when a button is press. This time round the user will be able to select the two numbers that they wish to add together and then display the result in a textview.

Adding multiple edit texts together
13:29

Adding int and double - 

Last time round we added two integers together which is perfect if we are working with whole numbers all the time. But what if we need to be more accurate in our results? So now I will show you how to add doubles and integers together to give a more specific result.

Adding a int and double
06:25

Adding values with button click - 

In this section we are going to be working with Integers. We will assign two integers inside our code and allow the user to increase and decrease the value of a number by clicking. The concept being that we can use integers to manipulate the way in which information is displayed to the user.

Adding values with button click
07:57

Working with strings -

The first variable we are going to look at in detail is the use of a string. A string is used to work with and display only text information. In our application we will set some specific text inside of our code and then send it to a textview when a button is clicked.

Working with strings
06:39

IF Statements - 

Think of a IF Statement as a question we are asking our application to answer. In this section we create a integer containing a value which will be our correct answer and we will then ask our application to look at a edit text window where a user has input a number and then tell us if the number is exactly the same as our set number. Then display a message to the user.

Ask a question with a IF statement
12:48

For loops - 

We are now going to focus on using loops inside our application. The concept of a for loop is that it starts as a true statement and will continuously cycle until it become false. For example if we told the loop to add one each time until it reaches 10 at which point it would become false and stop the process.

For Loops
05:54

While loops - 

In section we are going to focus on using a very simple while loop which should give you a reasonable understanding of why we use them inside of our application. This loops continues its process while a process is true. For example the statement might continue to loops when its equal to a certain value.

While Loops
05:01

String Array - 

In this section we are going to focus on how a string array works in incomparison to a standard string and how we can use the array to store a range of results, for example a list of names.

String Array
05:57

The behind the scenes of Java - Summary 

I hope by now you have a better understanding of the key concepts behind using If statements, loops and variables inside of your applications. You should be gaining more confidence in your coding and start to understand the language bit more. In the next section we are going to focus on using a range of intents.

Summary Video
00:34

It's time to test your knowledge on If statement, Variables and loops.

The behind the scenes quiz - Level Moderate
3 questions
+
Java Intents - Section 5
7 Lectures 43:14

Java Intents - 

In this section we are going to learn how to implement a range of intents. This includes making a phone call, sending emails, opening webpages, changing pages and setting up a small alert box. All of these methods will be present in one application.

Introduction Video - Java Intents
00:51

Changing page - 

The first intent we are going to learn is the ability to change pages when a button is clicked. This includes the ability to create and write code between two activities.

Change page intent
10:40

How to make a phone call - 

We are now going to continue on with our previous application but this time round we are going to give our user the ability to a make a phone call to specific number when a button is clicked. This includes using our Manifest file and using other tools the we have not look at so far.

How to make a phone call
07:16

Webpage Intent - 

We're now going to give our user the ability to open a webpage when a button is selected. The user will then be directly rooted outside of our application to the desired webpage.

Setup webpage intent
05:21

Sending a email - 

This time round we're are going to look at sending a email from our device. We are going to setup key attributes such as  a specific email address, subject and content. This will also open the default email application on the device and fill in all the blanks.

Setup email intent
09:24

Alert Dialog - 

A alert dialog box is used to display a small box to the user and will normally have a question they can respond too. For example "Do you want to quit?". We are going to setup a very basic dialog box for our user when a button is selected.

Alert Dialog
08:57

Java Intents - Summary

So hopefully you have a better understanding now of the range of intents available to our users and how they can be used. You should now feel confident in knowing how to implement these methods into your own applications. In the next section we are going to focus on using fragments.

Summary Video
00:45

it's time to test your knowledge on Java Intents

Java Intents quiz - Level Moderate
3 questions
+
Android Working with Fragments - Section 6
6 Lectures 35:37

Working with Fragments - Introduction

During the course so far we have been primarily working with activity based applications. Now I want to move onto working with fragments based inside of activity and how they can be more beneficial not only for the user but for the developers as well.

Introduction Video - Working with fragments
00:46

Adding a fragment to an activity - 

In this first section we are going to start of very easy and build a very basic fragment. After the fragment has been built we will then display it inside of our main application. This will allow us to see how an activity and a fragment can work together as one page.

Adding a fragment to an activity
09:28

Load a fragment on start up - 

We now understand how to make a fragment and then display it on the activity. But now I want the ability to automatically load a fragment the application loads up. To do this we will implement the fragment into our increase method of our activity.

Load up a fragment on startup
07:23

Working with fragments part 1 - 

Lets say we have one key activity and we have a range of fragments. In this section we will learn how to navigate through all of our fragments with very simple on click commands to navigate our user where ever they need to go.

Working with fragments part 1
10:51

Working with fragments part 2 -

Ok so we now know how to move between fragments, but what if we want to move from a fragment to a new activity? Well in this section we are going to focus on programming inside of a fragment to enable us to navigate to a brand new activity. 

Working with fragments part 2
06:35

Working with fragments - Summary 

Congratulations for making to the end of section 6. We should now have a better understanding of what a fragment is and how it can be used in comparison to an activity. In the next section we are going to focus on using a list view to display a  range of information.

Summary Video
00:34

It's time to test your knowledge on what we have learn't about fragments.

Working with fragments - Level Moderate
3 questions
+
The perfect list view - Section 7
12 Lectures 01:25:41

The perfect list view - Introduction

In this section we are going to focus on the three methods to make perfect list view. I will start by making a very basic method and slowly increase the difficultly until we have a custom list view with  range of fonts, colours and custom images.

Introduction Video - The perfect list view
00:46

Setup a basic list view - 

The first stage is setup a very basic list view which will contain a couple text results. I will show you how to implement the list view feature into our XML and  then finally import a range of string results directly into our list view ready to be seen by the user.

Beginner - Basic list view
10:56

Basic list view on click listener - 

Now we have the list view setup with some basic information. It's now time to enable our users the ability to click one of the results inside of the list view and then display a simple toast message informing them of which section of the list view they have pressed.

Beginner - Setup onclick listener on list view
06:10

Moderate - Custom list view design -

I now want to increase the level of flexibility we have with our list views. We are going to focus on setting up a brand new XML page which we are going to use a template for our custom list view design.

Moderate - setup list view design
06:10

Moderate - Coding our list view - 

Now that we have designed our custom list view row, we can now starting coding the inside of our application. We will push our custom list view into our layout. In this section we will also apply our list view information.

Moderate - coding our list view
18:47

Moderate - Set onclick listener to our list view - 

So now we are using our custom list view and have set our information. The next step is to set a on click listener to this view so that the user can press any section of the list view and then see a response in the form of a simple toast message which will tell them what cell they clicked on.

Moderate - set onclick listener to list view
05:39

Advanced - list view layout design - 

In this lecture I'm going to show you the most advanced list view I'm using to date. We are going to start by making the overall design for our custom row and then we will progress on in later lectures to adding in different sections.

Advanced - List view layout design
06:29

Advanced - Creating entity - 

In this section we are going to focus on implementing an entity format into our application. This will be the middle ground for the sending and receiving of images and names between our different sections.

Advanced - Creating a entity
04:53

Advanced - Creating the view holder - 

We have now created the entity. It's now time to make the view holder of the application. A view holder object stores each of the component views inside the tag field of the Layout, so you can immediately access them without the need to look them up repeatedly.

Advanced - Creating the view holder
04:29

Advanced - Create adapter - 

We now need to make the adapter of our list view. The adapter works by controlling all the information we have input so far and then we will reference the adapter as a fragment when adding it to our project. The next step is to add the information to all code we implemented so far.

Advanced - Create adapter
12:23

Advanced - adding our information to the list view - 

We have arrived at the final stage of our list view, the last step is to add our information. Then we are going to implement the adapter we made earlier into the design side of application before finally running the app seeing what we have achieved.

Advanced - Add information to list view
08:11

The perfect list view - section 7 -

We have now completed the list view section of the course and I hope you now have a better understanding of how to make the perfect list view and the key benefits when using different methods. In the section we are going to focus on storing information inside our application being internal and external. Also don't forget the quiz.

Summary Video
00:48

The perfect list view - Level Moderate
3 questions
+
Storing Information - Section 8
15 Lectures 02:17:24

Storing information - Introduction

Welcome to section 8 of the course. In this section we are going focus on storing information inside of our application and using external storage. This includes using SQL and shared preference, which sounds scary at first but you should find it a breeze once we go through it.

Introduction Video - Storing information
00:39

Storing data internally - Part 1

In this first section we are going to focus on setting up a small application which will store information directly onto the main storage of our device. We are first going to work on the design side and then move over to coding part of this application.

Storing data internally part 1
14:00

Storing data internally - Part 2

We have now design our application its time to start coding. We will now implement all the parts need to store information directly to our users phone and then debug the application directly to our virtual device.

Storing data internally part 2
08:59

Storing data externally - Part 1

Now that we have a better understanding of how to store information on internal storage. it's now time to store information on external storage e.g. SD Card. We are going to start off by completing the design side of the application and then we will move onto the coding in part 2.

Storing data externally part 1
09:45

Storing data externally - Part 2

So now that we have our design ready to go, we can now start learning how to code our external storage into our application. We are also going to have to use the manifest to grant permission to our applications because we are using features outside of the app.

Storing data externally part 2
09:06

Shared preference - Design side -

We are now going to focus on using shared preferences. Which means to send and receive information between different activities and fragments. The first step is to input a design layout for our user to input there information, we will then go through the steps of processing these details.

Shared preferences design side
08:04

Shared preference saving the information - 

We now have the user interface setup, the next step is to retrieve the information the user has input into our sections and store it inside of our application ready to transferred to the fragment or activity of our choice.

Shared preferences storing user data
10:44

Shared preference - get user data -

The final stage of our application is to recover all the user information we have received from the previous page and then present it inside of the activity or fragment of our choosing. Overall should give you a good understand of how manipulate our application in order to transfer information between sections.

Shared preferences get user data
10:11

Getting started with SQL - Part 1

In this section we are going to start from the beginning of SQL. I'm going to show you how to create your own SQL table within the code which we can then progress from in future lectures. We are also going to make our own custom toast message class we can then reference this instead of re-writting it each time.

Getting started with SQL - Part 1
15:49

Getting started with SQL - Part 2 -

We have now created our SQL database and its now time to add a couple features in and then add to our main activity ready to run as soon the application begins, it will then display a simple toast message to the user because visually we wouldn't be able to see any table.

Getting started with SQL - Part 2
10:53

In this section we are going to design the user interface needed to input information into our SQL database which we can recall at a later point.

SQL Design
05:15

SQL Add user information - Part 1 -

We have created our SQL database and should display a message when its called. We now want to give this some information. The first process is to add a design layout which the user can implement some information for our Sql database to store.

SQL add user information - Part 1
10:07

SQL add user information - Part 2 - 

Now that we have a simple user interface setup ready, we now need to link they elements up inside our code so that our application understands where to get the information from then finally store it. We will then test the theory and if it works correctly should display a toast message to us confirming the save.

SQL add user information - Part 2
09:02

SQL show user information final - 

We have set up a design for our application and stored information directly to the SQL database. The next step is to do a task with the information, we are going to display all of user information in the form of toast message which will contain all the details input by the user as well as an ID supplied by the database.

SQL Show user information final
13:59

Storing information - Summary 

Congratulations for making to the end of section 8, we should now have a good understanding of different ways of storing information and then displaying information to the user. In the next section we are going to take a break from the heavy coding and focus setting up a basic list view.

Summary Video
00:51

Storing information - Level Hard
4 questions
+
Working with webviews - Section 9
4 Lectures 14:08

Introduction to Webviews - 

In this section we are going to focus on implementing a webview into our application and then directing to a website with a couple additional features to control the behaviour of view to make it more user friendly.

Introduction Video - Webviews
00:42

Set website to a Webview - 

The first is to add the Webview to our application, we then set a website to the view and then tell our application to load from the view instead of going directly to another browser outside of the application. We will also be working inside of the manifest.

Set website to webview
06:03

Set the webview back button - 

We now a working webview which displays a website when the application is loaded. But if currently press the back button then our application will close, we are going to program a small back button so that if the user has progress through multiple webpages then they go back using the back button.

Set webview back button
06:39

Working with Webviews - Summary

Congratulations for making it to the end of section 9, I hope this has given you a small break from the high level coding. The next stage is to understand the use of multithreading and the key benefits it has with our applications.

Summary Video
00:44

Working with webviews - Level Easy
3 questions
+
Multi-threading - Section 10
6 Lectures 44:45

Introduction to multi-threading -

This section is all based around reducing the amount work the application has to complete when it initially loads. Instead we are going tell our application to load certain elements in the back ground of our application so that it has minimal effect on the application and the user.

Introduction Video - Multithreading
00:48

Set up a method - 

I'm firstly going to implement a very basic method into our application which won't use any handlers or threads. The application will then start to run slow or possibly crash. We will then proceed over the next couple lectures to improve the method to work more efficiently.

Set up a method
09:21

Thread and Handler - 

In this section we are going to focus on implementing a thread and handler system around the incorrect method that we previously implemented into our application. The outcome should be that the application runs much smoother and shouldn't have any problems for the user.

Thread and Handler
07:19

Thread progress bar - 

The final part of our application is to add an additional feature which will add a progress bar so we can follow our code as its goes from start to finish. This will then keep the user in the loop of the application.

Thread progress bar
13:48

Working with Async tasks - 

We are going to implement a simple async task which are used to run long back ground operations which if normally run on the main thread could cause the application to run slow or possibly crash.

Working with Async tasks
12:51

Multithreading - Summary

Congratulations for making to the end of section 10 of the course. We should now have a better understanding of running multiple tasks in the background preventing our application from running slow for the user. In the next section we are going to focus on XML Parsing.

Summary Video
00:38

Multithreading quiz - Level Moderate
3 questions
4 More Sections
About the Instructor
Hadleigh Gaudreau
4.4 Average rating
13 Reviews
77 Students
1 Course
Android Software Developer

Hello I'm Hadleigh. I'm a self taught Android Developer from the UK.

In the past couple years I have implemented and repaired a range of user based equipment being networks, PC's and mobile devices. I then set myself a challenge of learning Android Development in my spare time.

After becoming confident with Android and enjoying the language. I then started to teach friends the language as well. I have now gone onto developing my own range of courses to help others get ahead start in there developing career.

My goal is to take someone with no coding knowledge to a point where they are confident with a great understanding of the methods and concepts behind the language.

Sign up to my courses and we can kickstart your knowledge of the coding world.