1.2 Android—The World’s Leading Mobile Operating System
1.4.2 Android 2.3 (Gingerbread)
1.4.3 Android 3.0 through 3.2 (Honeycomb)
1.4.4 Android 4.0 through 4.0.4 (Ice Cream Sandwich)
1.4.5 Android 4.1–4.3 (Jelly Bean)
1.4.7 Android 5.0 and 5.1 (Lollipop)
1.5 Downloading Apps from Google Play
1.7 Android Software Development Kit (SDK)
1.8 Object-Oriented Programming: A Quick Refresher
1.8.1 The Automobile as an Object
1.8.5 Messages and Method Calls
1.8.6 Attributes and Instance Variables
1.8.9 Object-Oriented Analysis and Design (OOAD)
1.9 Test-Driving the Tip Calculator App in an Android Virtual Device (AVD)
1.9.1 Opening the Tip Calculator App’s Project in Android Studio
1.9.2 Creating Android Virtual Devices (AVDs)
1.9.3 Running the Tip Calculator App on the Nexus 6 Smartphone AVD
1.9.4 Running the Tip Calculator App on an Android Device
1.10 Building Great Android Apps
1.11 Android Development Resources
Android Studio: Introducing Visual GUI Design, Layouts, Accessibility and Internationalization
2.2.2 LinearLayout
, TextView
and ImageView
2.2.3 Extensible Markup Language (XML)
2.3.1 Launching Android Studio
2.3.3 Create New Project Dialog
2.3.4 Target Android Devices Step
2.3.5 Add an Activity to Mobile Step
2.3.6 Customize the Activity Step
2.5 Building the App’s GUI with the Layout Editor
2.5.1 Adding an Image to the Project
2.5.3 Changing RelativeLayout
to a LinearLayout
2.5.4 Changing the LinearLayout
’s id
and orientation
2.5.5 Configuring the TextView
’s id
and text
Properties
2.5.6 Configuring the TextView
’s textSize
Property—Scaled Pixels and Density-Independent Pixels
2.5.7 Setting the TextView
’s textColor
Property
2.5.8 Setting the TextView
’s gravity
Property
2.5.9 Setting the TextView
’s layout:gravity
Property
2.5.10 Setting the TextView
’s layout:weight
Property
2.5.11 Adding an ImageView
to Display the Image
2.7 Making Your App Accessible
2.8 Internationalizing Your App
2.8.2 Naming the Folders for Localized Resources
2.8.3 Adding String Translations to the App’s Project
2.8.5 Testing the App in Spanish on an AVD
2.8.6 Testing the App in Spanish on a Device
2.8.7 TalkBack and Localization
2.8.9 Professional Translation
Introducing GridLayout
, EditText
, SeekBar
, Event Handling, NumberFormat
, Customizing the App’s Theme and Defining App Functionality with Java
3.2 Test-Driving the Tip Calculator App
3.3.2 Activity
Lifecycle Methods
3.3.3 AppCompat
Library and Class AppCompatActivity
3.3.4 Arranging Views with a GridLayout
3.3.6 Formatting Numbers as Locale-Specific Currency and Percentage Strings
3.3.7 Implementing Interface TextWatcher
for Handling EditText
Text Changes
3.3.8 Implementing Interface OnSeekBarChangeListener
for Handling SeekBar
Thumb Position Changes
3.3.10 Material Design: Elevation and Shadows
3.3.11 Material Design: Colors
3.3.13 Searching in the Properties Window
3.4.2 Creating the TipCalculator
Project
3.4.3 Changing to a GridLayout
3.4.4 Adding the TextView
s, EditText
and SeekBar
3.5 Default Theme and Customizing Theme Colors
3.5.2 Customizing Theme Colors
3.5.3 Common View
Property Values as Styles
3.6.1 package
and import
Statements
3.6.2 MainActivity
Subclass of AppCompatActivity
3.6.3 Class Variables and Instance Variables
3.6.4 Overriding Activity
Method onCreate
3.6.5 MainActivity
Method calculate
3.6.6 Anonymous Inner Class That Implements Interface OnSeekBarChangeListener
3.6.7 Anonymous Inner Class That Implements Interface TextWatcher
Fragment
s, Menu
s, Preferences, Explicit Intent
s, Handler
, AssetManager
, Tweened Animations, Animator
s, Toast
s, Color State Lists, Layouts for Multiple Device Orientations, Logging Error Messages for Debugging
4.2 Test-Driving the Flag Quiz App
4.2.1 Configuring the Quiz’s Settings
4.3.3 Fragment Lifecycle Methods
4.3.8 Supporting Different Screen Sizes and Resolutions
4.3.9 Determining the Device Orientation
4.3.10 Toast
s for Displaying Messages
4.3.11 Using a Handler
to Execute a Runnable
in the Future
4.3.12 Applying an Animation to a View
4.3.13 Using ViewAnimationUtils
to Create a Circular Reveal Animator
4.3.14 Specifying Colors Based on a View
’s State Via a Color State List
4.3.16 Logging Exception Messages
4.3.17 Launching Another Activity
Via an Explicit Intent
4.4 Creating the Project, Resource Files and Additional Classes
4.4.2 Blank Activity Template Layouts
4.4.3 Configuring Java SE 7 Support
4.4.4 Adding the Flag Images to the Project
4.4.5 strings.xml
and Formatted String
Resources
4.4.10 Creating the Flag Shake Animation
4.4.11 preferences.xml
for Specifying the App’s Settings
4.4.12 Adding Classes SettingsActivity
and SettingsActivityFragment
to the Project
4.5.1 content_main.xml
Layout for Devices in Portrait Orientation
4.5.2 Designing fragment_main.xml
Layout
4.5.3 Graphical Layout Editor Toolbar
4.5.4 content_main.xml
Layout for Tablet Landscape Orientation
4.6.1 package
Statement and import
Statements
4.6.3 Overridden Activity
Method onCreate
4.6.4 Overridden Activity
Method onStart
4.6.5 Overridden Activity
Method onCreateOptionsMenu
4.6.6 Overridden Activity
Method onOptionsItemSelected
4.6.7 Anonymous Inner Class That Implements OnSharedPreferenceChangeListener
4.7 MainActivityFragment
Class
4.7.1 package
and import
Statements
4.7.3 Overridden Fragment
Method onCreateView
4.7.10 Anonymous Inner Class That Implements OnClickListener
4.9 SettingsActivityFragment
Class
2D Graphics, Canvas
, Bitmap
, Accelerometer, SensorManager
, Multitouch Events, MediaStore
, Printing, Android 6.0 Permissions, Gradle
5.2 Test-Driving the Doodlz App in an Android Virtual Device (AVD)
5.3.1 Activity
and Fragment
Lifecycle Methods
5.3.3 Using SensorManager
to Listen for Accelerometer Events
5.3.5 Drawing with Canvas
, Paint
and Bitmap
5.3.6 Processing Multiple Touch Events and Storing Lines in Path
s
5.3.8 Printing and the Android Support Library’s PrintHelper
Class
5.3.9 New Android 6.0 (Marshmallow) Permissions Model
5.3.10 Adding Dependencies Using the Gradle Build System
5.4 Creating the Project and Resources
5.4.2 Gradle: Adding a Support Library to the Project
5.4.4 Importing the Material Design Icons for the App’s Menu Items
5.4.5 MainActivityFragment
Menu
5.4.6 Adding a Permission to AndroidManifest.xml
5.5.1 content_main.xml
Layout for MainActivity
5.5.2 fragment_main.xml
Layout for MainActivityFragment
5.5.3 fragment_color.xml
Layout for ColorDialogFragment
5.5.4 fragment_line_width.xml
Layout for LineWidthDialogFragment
5.5.5 Adding Class EraseImageDialogFragment
5.7 MainActivityFragment
Class
5.7.1 package
Statement, import
Statements and Fields
5.7.2 Overridden Fragment
Method onCreateView
5.7.3 Methods onResume
and enableAccelerometerListening
5.7.4 Methods onPause
and disableAccelerometerListening
5.7.5 Anonymous Inner Class for Processing Accelerometer Events
5.7.7 Overridden Fragment
Methods onCreateOptionsMenu
and onOptionsItemSelected
5.7.9 Overridden Method onRequestPermissionsResult
5.7.10 Methods getDoodleView
and setDialogOnScreen
5.8.1 package
Statement and import
Statements
5.8.2 static
and Instance Variables
5.8.4 Overridden View
Method onSizeChanged
5.8.5 Methods clear
, setDrawingColor
, getDrawingColor
, setLineWidth
and getLineWidth
5.8.6 Overridden View
Method onDraw
5.8.7 Overridden View
Method onTouchEvent
5.9.1 Overridden DialogFragment
Method onCreateDialog
5.9.2 Method getDoodleFragment
5.9.3 Overridden Fragment
Lifecycle Methods onAttach
and onDetach
5.9.4 Anonymous Inner Class That Responds to the Events of the Alpha, Red, Green and Blue SeekBar
s
5.10 LineWidthDialogFragment
Class
5.10.2 Anonymous Inner Class That Responds to the Events of the widthSeekBar
5.11 EraseImageDialogFragment
Class
Manual Frame-By-Frame Animation, Graphics, Sound, Threading, SurfaceView
and SurfaceHolder
, Immersive Mode and Full-Screen
6.2 Test-Driving the Cannon Game App
6.3.1 Using the Resource Folder res/raw
6.3.2 Activity
and Fragment
Lifecycle Methods
6.3.3 Overriding View
Method onTouchEvent
6.3.4 Adding Sound with SoundPool
and AudioManager
6.3.5 Frame-by-Frame Animation with Thread
s, SurfaceView
and SurfaceHolder
6.3.6 Simple Collision Detection
6.4 Building the GUI and Resource Files
6.4.2 Adjusting the Theme to Remove the App Title and App Bar
6.4.5 Adding the Sounds to the App
6.4.6 Adding Class MainActivityFragment
6.4.7 Editing activity_main.xml
6.4.8 Adding the CannonView
to fragment_main.xml
6.5 Overview of This App’s Classes
6.6 MainActivity
Subclass of Activity
6.7 MainActivityFragment
Subclass of Fragment
6.8.1 Instance Variables and Constructor
6.8.2 Methods update
, draw
, and playSound
6.9 Blocker
Subclass of GameElement
6.10 Target
Subclass of GameElement
6.11.1 Instance Variables and Constructor
6.11.5 Methods getCannonball
and removeCannonball
6.12 Cannonball
Subclass of GameElement
6.12.1 Instance Variables and Constructor
6.12.2 Methods getRadius
, collidesWith
, isOnScreen
, and reverseVelocityX
6.13 CannonView
Subclass of SurfaceView
6.13.1 package
and import
Statements
6.13.2 Instance Variables and Constants
6.13.4 Overriding View
Method onSizeChanged
6.13.5 Methods getScreenWidth
, getScreenHeight
, and playSound
6.13.8 Method alignAndFireCannonball
6.13.9 Method showGameOverDialog
6.13.10 Method drawGameElements
6.13.11 Method testForCollisions
6.13.12 Methods stopGame
and releaseResources
6.13.13 Implementing the SurfaceHolder.Callback
Methods
6.13.14 Overriding View Method onTouchEvent
6.13.15 CannonThread
: Using a Thread
to Create a Game Loop
6.13.16 Methods hideSystemBars
and showSystemBars
REST Web Services, AsyncTask
, HttpUrlConnection
, Processing JSON Responses, JSONObject
, JSONArray
, ListView
, ArrayAdapter
, ViewHolder
Pattern, TextInputLayout
, FloatingActionButton
7.2 Test-Driving the WeatherViewer App
7.3.2 JavaScript Object Notation (JSON) and the org.json
Package
7.3.3 HttpUrlConnection
Invoking a REST Web Service
7.3.4 Using AsyncTask
to Perform Network Requests Outside the GUI Thread
7.3.5 ListView
, ArrayAdapter
and the View-Holder Pattern
7.4 Building the App’s GUI and Resource Files
7.5.1 package
Statement, import
Statements and Instance Variables
7.5.3 Method convertTimeStampToDay
7.6.1 package
Statement and import
Statements
7.6.3 Instance Variable and Constructor
7.6.4 Overridden ArrayAdapter
Method getView
7.6.5 AsyncTask
Subclass for Downloading Images in a Separate Thread
7.7.1 package
Statement and import
Statements
7.7.3 Overridden Activity Method onCreate
7.7.4 Methods dismissKeyboard
and createURL
7.7.5 AsyncTask
Subclass for Invoking a Web Service
7.7.6 Method convertJSONtoArrayList
SharedPreferences
, SharedPreferences.Editor
, Implicit Intent
s, Intent
Choosers, RecyclerView
, RecyclerView.Adapter
, RecyclerView.ViewHolder
, RecyclerView.ItemDecoration
8.2.1 Adding a Favorite Search
8.2.2 Viewing Twitter Search Results
8.2.6 Scrolling Through Saved Searches
8.3.1 Storing Key–Value Data in a SharedPreferences
File
8.3.2 Implicit Intent
s and Intent
Choosers
8.3.4 RecyclerView.Adapter
and RecyclerView.ViewHolder
8.3.5 RecyclerView.ItemDecoration
8.3.6 Displaying a List of Options in an AlertDialog
8.4 Building the App’s GUI and Resource Files
8.4.3 Adding the RecyclerView
Library
8.4.8 Adding the Save Button Icon
8.4.11 RecyclerView
Item’s Layout: list_item.xml
8.5.1 package
and import
Statements
8.5.3 Overriden Activity
Method onCreate
8.5.4 TextWatcher
Event Handler and Method updateSaveFAB
8.5.5 saveButton
’s OnClickListener
8.5.7 Anonymous Inner Class That Implements View.OnClickListener
to Display Search Results
8.6 SearchesAdapter
Subclass of RecyclerView.Adapter
8.6.1 package
Statement, import
statements, Instance Variables and Constructor
8.6.2 Nested ViewHolder
Subclass of RecyclerView.ViewHolder
8.6.3 Overridden RecyclerView.Adapter
Methods
8.7 ItemDivider
Subclass of RecyclerView.ItemDecoration
8.8 A Note on Fabric: Twitter’s New Mobile Development Platform
FragmentTransaction
s and the Fragment
Back Stack, SQLite, SQLiteDatabase
, SQLiteOpenHelper
, ContentProvider
, ContentResolver
, Loader
, LoaderManager
, Cursor
and GUI Styles
9.2 Test-Driving the Address Book App
9.3.1 Displaying Fragment
s with FragmentTransaction
s
9.3.2 Communicating Data Between a Fragment
and a Host Activity
9.3.3 Manipulating a SQLite Database
9.3.4 ContentProvider
s and ContentResolver
s
9.3.5 Loader
and LoaderManager
—Asynchronous Database Access
9.3.6 Defining Styles and Applying Them to GUI Components
9.3.7 Specifying a TextView
Background
9.4 Building the GUI and Resource Files
9.4.2 Creating the App’s Classes
9.4.8 ContactsFragment
’s Layout
9.4.10 AddEditFragment
’s Layout
9.5 Overview of This Chapter’s Classes
9.7 AddressBookDatabaseHelper
Class
9.8 AddressBookContentProvider
Class
9.8.1 AddressBookContentProvider
Fields
9.8.2 Overridden Methods onCreate
and getType
9.8.4 Overridden Method insert
9.8.5 Overridden Method update
9.8.6 Overridden Method delete
9.9.1 Superclass, Implemented Interfaces and Fields
9.9.2 Overridden Method onCreate
9.9.3 ContactsFragment.ContactsFragmentListener
Methods
9.9.5 Method displayAddEditFragment
9.9.6 DetailFragment.DetailFragmentListener
Methods
9.9.7 AddEditFragment.AddEditFragmentListener
Method
9.10.1 Superclass and Implemented Interface
9.10.2 ContactsFragmentListener
9.10.4 Overridden Fragment
Method onCreateView
9.10.5 Overridden Fragment
Methods onAttach
and onDetach
9.10.6 Overridden Fragment
Method onActivityCreated
9.10.7 Method updateContactList
9.10.8 LoaderManager.LoaderCallbacks<Cursor>
Methods
9.12.1 Superclass and Implemented Interface
9.12.2 AddEditFragmentListener
9.12.4 Overridden Fragment
Methods onAttach
, onDetach
and onCreateView
9.12.5 TextWatcher nameChangedListener
and Method updateSaveButtonFAB
9.12.6 View.OnClickListener saveContactButtonClicked
and Method saveContact
9.12.7 LoaderManager.LoaderCallbacks<Cursor>
Methods
9.13.1 Superclass and Implemented Interface
9.13.4 Overridden Methods onAttach
, onDetach
and onCreateView
9.13.5 Overridden Methods onCreateOptionsMenu
and onOptionsItemSelected
9.13.6 Method deleteContact
and DialogFragment confirmDelete
9.13.7 LoaderManager.LoaderCallback<Cursor>
Methods
10 Google Play and App Business Issues
10.2 Preparing Your Apps for Publication
10.2.2 End User License Agreement
10.2.5 Licensing to Control Access to Paid Apps
10.2.7 Getting a Private Key for Digitally Signing Your App
10.2.8 Featured Image and Screenshots
10.3 Pricing Your App: Free or Fee
10.4 Monetizing Apps with In-App Advertising
10.5 Monetizing Apps: Using In-App Billing to Sell Virtual Goods
10.6 Registering at Google Play
10.7 Setting Up a Google Payments Merchant Account
10.8 Uploading Your Apps to Google Play
10.9 Launching Play Store from Within Your App
10.10 Managing Your Apps in Google Play
10.11 Other Android App Marketplaces
10.12 Other Mobile App Platforms and Porting Your Apps
A Introduction to Java Applications
A.2 Your First Program in Java: Printing a Line of Text
A.3 Modifying Your First Java Program
A.4 Displaying Text with printf
A.5 Another Application: Adding Integers
A.8 Decision Making: Equality and Relational Operators
B Introduction to Classes, Objects, Methods and Strings
B.2 Declaring a Class with a Method and Instantiating an Object of a Class
B.3 Declaring a Method with a Parameter
B.4 Instance Variables, set Methods and get Methods
B.5 Primitive Types vs. Reference Types
B.6 Initializing Objects with Constructors
B.7 Floating-Point Numbers and Type double
C.5 if
Single-Selection Statement
C.6 if
...else
Double-Selection Statement
C.7 while
Repetition Statement
C.8 Case Study: Counter-Controlled Repetition
C.9 Case Study: Sentinel-Controlled Repetition
C.10 Case Study: Nested Control Statements
C.11 Compound Assignment Operators
C.12 Increment and Decrement Operators
C.14 Essentials of Counter-Controlled Repetition
C.16 Examples Using the for
Statement
C.17 do
...while
Repetition Statement
C.18 switch
Multiple-Selection Statement
C.19 break
and continue
Statements
D.3 static
Methods, static
Fields and Class Math
D.4 Declaring Methods with Multiple Parameters
D.5 Notes on Declaring and Using Methods
D.6 Method-Call Stack and Activation Records
D.7 Argument Promotion and Casting
D.9 Introduction to Random-Number Generation
D.9.1 Scaling and Shifting of Random Numbers
D.9.2 Random-Number Repeatability for Testing and Debugging
D.10 Case Study: A Game of Chance; Introducing Enumerations
E.3 Declaring and Creating Arrays
E.5 Case Study: Card Shuffling and Dealing Simulation
E.8 Case Study: Class GradeBook
Using an Array to Store Grades
E.10 Case Study: Class GradeBook
Using a Two-Dimensional Array
E.12 Introduction to Collections and Class ArrayList
F Classes and Objects: A Deeper Look
F.3 Controlling Access to Members
F.4 Referring to the Current Object’s Members with the this
Reference
F.5 Time
Class Case Study: Overloaded Constructors
F.6 Default and No-Argument Constructors
G Object-Oriented Programming: Inheritance and Polymorphism
G.1 Introduction to Inheritance
G.2 Superclasses and Subclasses
G.4 Relationship between Superclasses and Subclasses
G.4.1 Creating and Using a CommissionEmployee
Class
G.4.2 Creating and Using a BasePlusCommissionEmployee
Class
G.4.3 Creating a CommissionEmployee
–BasePlusCommissionEmployee
Inheritance Hierarchy
G.6 Introduction to Polymorphism
G.8 Demonstrating Polymorphic Behavior
G.9 Abstract Classes and Methods
G.10 Case Study: Payroll System Using Polymorphism
G.10.1 Abstract Superclass Employee
G.10.2 Concrete Subclass SalariedEmployee
G.10.3 Concrete Subclass HourlyEmployee
G.10.4 Concrete Subclass CommissionEmployee
G.10.5 Indirect Concrete Subclass BasePlusCommissionEmployee
G.10.6 Polymorphic Processing, Operator instanceof
and Downcasting
G.10.7 Summary of the Allowed Assignments Between Superclass and Subclass Variables
G.11 final
Methods and Classes
G.12 Case Study: Creating and Using Interfaces
G.12.1 Developing a Payable
Hierarchy
G.12.4 Modifying Class Employee
to Implement Interface Payable
G.12.5 Modifying Class SalariedEmployee
for Use in the Payable
Hierarchy
G.12.6 Using Interface Payable
to Process Invoice
s and Employee
s Polymorphically
G.13 Common Interfaces of the Java API
H Exception Handling: A Deeper Look
H.2 Example: Divide by Zero without Exception Handling
H.3 Example: Handling ArithmeticException
s and InputMismatchExceptions
H.4 When to Use Exception Handling
H.7 Stack Unwinding and Obtaining Information from an Exception Object
I GUI Components and Event Handling
I.3 Text Fields and an Introduction to Event Handling with Nested Classes
I.4 Common GUI Event Types and Listener Interfaces
I.7 JComboBox
; Using an Anonymous Inner Class for Event Handling
J.3 Type-Wrapper Classes for Primitive Types
J.4 Interface Collection
and Class Collections
J.5.3 Views into Collections and Arrays
Method asList
J.10 Introduction to Files and Streams
J.12 Introduction to Object Serialization
J.13 Introduction to Multithreading
J.14 Creating and Executing Threads with the Executor
Framework
J.15 Overview of Thread Synchronization