You are previewing Android™ 6 for Programmers: An App-Driven Approach, Third Edition.
O'Reilly logo
Android™ 6 for Programmers: An App-Driven Approach, Third Edition

Book Description

The professional programmer’s Deitel® guide to smartphone and tablet app development using Android™ 6 and Android Studio Billions of apps have been downloaded from Google Play™! This book gives you everything you need to start developing great apps quickly and getting them published on Google Play™. The book uses an app-driven approach–each new technology is discussed in the context of eight fully coded and tested Android apps, complete with syntax shading, code highlighting, code walkthroughs and sample outputs. Apps you’ll develop include:

  • Welcome App

  • Cannon Game

  • Tip Calculator

  • Weather Viewer

  • Flag Quiz

  • Twitter® Searches

  • Doodlz

  • Address Book

  • Practical, Example-Rich Coverage of:

  • Android 6, Android Studio: Gradle™, Vector Asset Studio, Theme Editor

  • Material Design App Templates and Themes

  • AppCompat Library, Android Design Support Library, RecyclerView, FloatingActionButton, TextInputLayout

  • Material Design Elevation and Icons

  • REST Web Services/JSON, Threading, SQLite™ Database, Android 6 Permissions

  • Cursors, Loaders, ContentProviders

  • Supporting Various Screen Sizes/Resolutions

  • Accessibility, Internationalization

  • Activities, Fragments, Intents, Preferences

  • GUIs, Layouts, Menus, Resource Files, Events, Touch/Gesture Processing, Images, Audio, Graphics, Animation

  • Immersive Mode, PrintHelper

  • Google Play™ Store, App Publishing, Pricing, Marketing, In-App Advertising, In-App Billing, Virtual Goods and more

  • Visit www.deitel.com

  • Download code examples

  • For info on Deitel’s Dive Into® Series programming training courses, visit www.deitel.com/training or write to deitel@deitel.com

  • Follow the Deitels on Facebook® at facebook.com/DeitelFan, Twitter® at @deitel, Google+™ at google.com/+DeitelFan, LinkedIn® at bit.ly/DeitelLinkedIn, YouTube™ at youtube.com/DeitelTV

  • Subscribe to the Deitel®Buzz e-mail newsletter at www.deitel.com/newsletter/ subscribe.html

  • About This Book

    The first-generation Android phones were released in October 2008. As of June 2015, Android had 82.8% of the global smartphone market share, compared to 13.9% for Apple and 2.6% for Microsoft (http:// www.idc.com/prodserv/smartphone-os-market-share.jsp). Billions of apps have been downloaded from Google Play and more than one billion Android devices were shipped worldwide in 2014 (http://www.cnet.com/news/android-shipments-exceed- 1-billion-for-first-time-in-2014/). The opportunities for Android app developers are enormous.

    This book presents leading-edge computing technologies for professional software developers. At the heart of the book is the Deitel app-driven approach–concepts are presented in the context of complete working Android apps, rather than using code snippets. The introduction and app test drives at the beginning of each chapter show one or more sample executions. The book’s source code is available at http://www.deitel.com/books/AndroidFP3.

    The apps in this book were carefully designed to introduce you to key Android features and APIs. You’ll quickly learn everything you need to start building Android apps–beginning with a test-drive of the Tip Calculator app in Chapter 1, then building one new app in each of Chapters 2 through 9. By the time you reach Chapter 10, you’ll be ready to create your own apps for submission to Google Play and other app marketplaces. You’ll master the Google Play submission process, including uploading your apps. You’ll decide whether to sell your apps or offer them for free, and learn how to market them via social media and monetize them with in-app advertising, in-app billing, virtual goods and more.

    Table of Contents

    1. Title Page
    2. Copyright Page
    3. Deitel® Series Page
      1. Deitel® Developer Series
      2. How To Program Series
      3. Simply Series
      4. CourseSmart Web Books
      5. LiveLessons Video Learning Products
    4. Dedication Page
    5. Contents
    6. Preface
      1. Copyright Notice and Code License
      2. Intended Audience
      3. Features
      4. Pedagogic Features
      5. Working with Open-Source Apps
      6. Android 6 App-Development Fundamentals LiveLessons Video Training Products
      7. Join the Deitel & Associates, Inc. Social Networking Communities
      8. Contacting the Authors
      9. Acknowledgments
      10. About the Authors
      11. About Deitel & Associates, Inc.
    7. Before You Begin
      1. Software and Hardware System Requirements
      2. Installing the Java Development Kit (JDK)
      3. Installing Android Studio
      4. Configure Android Studio to Show Line Numbers
      5. Configure Android Studio to Disallow Code Folding
      6. Android 6 SDK
      7. Creating Android Virtual Devices (AVDs)
      8. Setting Up an Android Device for Testing Apps
      9. Downloading the Book’s Code Examples
      10. A Note Regarding Android Studio and the Android SDK
    8. 1. Introduction to Android
      1. 1.1 Introduction
        1. App-Driven Approach
      2. 1.2 Android—The World’s Leading Mobile Operating System
      3. 1.3 Android Features
        1. Openness and Open Source
        2. Java
        3. Multitouch Screen
        4. Gestures
        5. Built-in Apps
        6. Web Services
      4. 1.4 Android Operating System
        1. Android Version Naming Convention
        2. 1.4.1 Android 2.2 (Froyo)
        3. 1.4.2 Android 2.3 (Gingerbread)
        4. 1.4.3 Android 3.0 through 3.2 (Honeycomb)
        5. 1.4.4 Android 4.0 through 4.0.4 (Ice Cream Sandwich)
        6. 1.4.5 Android 4.1–4.3 (Jelly Bean)
        7. 1.4.6 Android 4.4 (KitKat)
        8. 1.4.7 Android 5.0 and 5.1 (Lollipop)
        9. 1.4.8 Android 6 (Marshmallow)
      5. 1.5 Downloading Apps from Google Play
      6. 1.6 Packages
      7. 1.7 Android Software Development Kit (SDK)
        1. Android Studio
        2. The Android Emulator
      8. 1.8 Object-Oriented Programming: A Quick Refresher
        1. 1.8.1 The Automobile as an Object
        2. 1.8.2 Methods and Classes
        3. 1.8.3 Instantiation
        4. 1.8.4 Reuse
        5. 1.8.5 Messages and Method Calls
        6. 1.8.6 Attributes and Instance Variables
        7. 1.8.7 Encapsulation
        8. 1.8.8 Inheritance
        9. 1.8.9 Object-Oriented Analysis and Design (OOAD)
      9. 1.9 Test-Driving the Tip Calculator App in an Android Virtual Device (AVD)
        1. 1.9.1 Opening the Tip Calculator App’s Project in Android Studio
        2. 1.9.2 Creating Android Virtual Devices (AVDs)
        3. 1.9.3 Running the Tip Calculator App on the Nexus 6 Smartphone AVD
        4. 1.9.4 Running the Tip Calculator App on an Android Device
      10. 1.10 Building Great Android Apps
      11. 1.11 Android Development Resources
      12. 1.12 Wrap-Up
    9. 2. Welcome App
      1. 2.1 Introduction
      2. 2.2 Technologies Overview
        1. 2.2.1 Android Studio
        2. 2.2.2 LinearLayout, TextView and ImageView
        3. 2.2.3 Extensible Markup Language (XML)
        4. 2.2.4 App Resources
        5. 2.2.5 Accessibility
        6. 2.2.6 Internationalization
      3. 2.3 Creating an App
        1. 2.3.1 Launching Android Studio
        2. 2.3.2 Creating a New Project
        3. 2.3.3 Create New Project Dialog
        4. 2.3.4 Target Android Devices Step
        5. 2.3.5 Add an Activity to Mobile Step
        6. 2.3.6 Customize the Activity Step
      4. 2.4 Android Studio Window
        1. 2.4.1 Project Window
        2. 2.4.2 Editor Windows
        3. 2.4.3 Component Tree Window
        4. 2.4.4 App Resource Files
        5. 2.4.5 Layout Editor
        6. 2.4.6 Default GUI
        7. 2.4.7 XML for the Default GUI
      5. 2.5 Building the App’s GUI with the Layout Editor
        1. 2.5.1 Adding an Image to the Project
        2. 2.5.2 Adding an App Icon
        3. 2.5.3 Changing RelativeLayout to a LinearLayout
        4. 2.5.4 Changing the LinearLayout’s id and orientation
        5. 2.5.5 Configuring the TextView’s id and text Properties
        6. 2.5.6 Configuring the TextView’s textSize Property—Scaled Pixels and Density-Independent Pixels
        7. 2.5.7 Setting the TextView’s textColor Property
        8. 2.5.8 Setting the TextView’s gravity Property
        9. 2.5.9 Setting the TextView’s layout:gravity Property
        10. 2.5.10 Setting the TextView’s layout:weight Property
        11. 2.5.11 Adding an ImageView to Display the Image
        12. 2.5.12 Previewing the Design
      6. 2.6 Running the Welcome App
      7. 2.7 Making Your App Accessible
        1. Enabling TalkBack for the ImageViews
        2. Testing the App with TalkBack Enabled
        3. Dynamically Created Views
      8. 2.8 Internationalizing Your App
        1. 2.8.1 Localization
        2. 2.8.2 Naming the Folders for Localized Resources
        3. 2.8.3 Adding String Translations to the App’s Project
        4. 2.8.4 Localizing Strings
        5. 2.8.5 Testing the App in Spanish on an AVD
        6. 2.8.6 Testing the App in Spanish on a Device
        7. 2.8.7 TalkBack and Localization
        8. 2.8.8 Localization Checklist
        9. 2.8.9 Professional Translation
      9. 2.9 Wrap-Up
    10. 3. Tip Calculator App
      1. 3.1 Introduction
        1. Note Regarding the Keyboard in Our Screen Captures
      2. 3.2 Test-Driving the Tip Calculator App
        1. Opening and Running the App
        2. Entering a Bill Total
        3. Selecting a Tip Percentage
      3. 3.3 Technologies Overview
        1. 3.3.1 Class Activity
        2. 3.3.2 Activity Lifecycle Methods
        3. 3.3.3 AppCompat Library and Class AppCompatActivity
        4. 3.3.4 Arranging Views with a GridLayout
        5. 3.3.5 Creating and Customizing the GUI with the Layout Editor and the Component Tree and Properties Windows
        6. 3.3.6 Formatting Numbers as Locale-Specific Currency and Percentage Strings
        7. 3.3.7 Implementing Interface TextWatcher for Handling EditText Text Changes
        8. 3.3.8 Implementing Interface OnSeekBarChangeListener for Handling SeekBar Thumb Position Changes
        9. 3.3.9 Material Themes
        10. 3.3.10 Material Design: Elevation and Shadows
        11. 3.3.11 Material Design: Colors
        12. 3.3.12 AndroidManifest.xml
        13. 3.3.13 Searching in the Properties Window
      4. 3.4 Building the GUI
        1. 3.4.1 GridLayout Introduction
        2. 3.4.2 Creating the TipCalculator Project
        3. 3.4.3 Changing to a GridLayout
        4. 3.4.4 Adding the TextViews, EditText and SeekBar
        5. 3.4.5 Customizing the Views
      5. 3.5 Default Theme and Customizing Theme Colors
        1. 3.5.1 parent Themes
        2. 3.5.2 Customizing Theme Colors
        3. Modifying the Theme’s Primary, Dark Primary and Accent Colors
        4. 3.5.3 Common View Property Values as Styles
      6. 3.6 Adding the App’s Logic
        1. 3.6.1 package and import Statements
        2. 3.6.2 MainActivity Subclass of AppCompatActivity
        3. 3.6.3 Class Variables and Instance Variables
        4. 3.6.4 Overriding Activity Method onCreate
        5. 3.6.5 MainActivity Method calculate
        6. 3.6.6 Anonymous Inner Class That Implements Interface OnSeekBarChangeListener
        7. 3.6.7 Anonymous Inner Class That Implements Interface TextWatcher
      7. 3.7 AndroidManifest.xml
        1. 3.7.1 manifest Element
        2. 3.7.2 application Element
        3. 3.7.3 activity Element
        4. 3.7.4 intent-filter Element
      8. 3.8 Wrap-Up
    11. 4. Flag Quiz App
      1. 4.1 Introduction
      2. 4.2 Test-Driving the Flag Quiz App
        1. 4.2.1 Configuring the Quiz’s Settings
        2. 4.2.2 Taking the Quiz
      3. 4.3 Technologies Overview
        1. 4.3.1 Menus
        2. 4.3.2 Fragments
        3. 4.3.3 Fragment Lifecycle Methods
        4. 4.3.4 Managing Fragments
        5. 4.3.5 Preferences
        6. 4.3.6 assets Folder
        7. 4.3.7 Resource Folders
        8. 4.3.8 Supporting Different Screen Sizes and Resolutions
        9. 4.3.9 Determining the Device Orientation
        10. 4.3.10 Toasts for Displaying Messages
        11. 4.3.11 Using a Handler to Execute a Runnable in the Future
        12. 4.3.12 Applying an Animation to a View
        13. 4.3.13 Using ViewAnimationUtils to Create a Circular Reveal Animator
        14. 4.3.14 Specifying Colors Based on a View’s State Via a Color State List
        15. 4.3.15 AlertDialog
        16. 4.3.16 Logging Exception Messages
        17. 4.3.17 Launching Another Activity Via an Explicit Intent
        18. 4.3.18 Java Data Structures
        19. 4.3.19 Java SE 7 Features
        20. 4.3.20 AndroidManifest.xml
      4. 4.4 Creating the Project, Resource Files and Additional Classes
        1. 4.4.1 Creating the Project
        2. 4.4.2 Blank Activity Template Layouts
        3. 4.4.3 Configuring Java SE 7 Support
        4. 4.4.4 Adding the Flag Images to the Project
        5. 4.4.5 strings.xml and Formatted String Resources
        6. 4.4.6 arrays.xml
        7. 4.4.7 colors.xml
        8. 4.4.8 button_text_color.xml
        9. 4.4.9 Editing menu_main.xml
        10. 4.4.10 Creating the Flag Shake Animation
        11. 4.4.11 preferences.xml for Specifying the App’s Settings
        12. 4.4.12 Adding Classes SettingsActivity and SettingsActivityFragment to the Project
      5. 4.5 Building the App’s GUI
        1. 4.5.1 activity_main.xml Layout for Devices in Portrait Orientation
        2. 4.5.2 Designing fragment_main.xml Layout
        3. 4.5.3 Graphical Layout Editor Toolbar
        4. 4.5.4 content_main.xml Layout for Tablet Landscape Orientation
        5. Creating content_main.xml for Tablets in Landscape Orientation
        6. Creating the Tablet Layout’s GUI
        7. Selecting a Fragment to Preview in the Layout Editor’s Design View
      6. 4.6 MainActivity Class
        1. 4.6.1 package Statement and import Statements
        2. 4.6.2 Fields
        3. 4.6.3 Overridden Activity Method onCreate
        4. 4.6.4 Overridden Activity Method onStart
        5. 4.6.5 Overridden Activity Method onCreateOptionsMenu
        6. 4.6.6 Overridden Activity Method onOptionsItemSelected
        7. 4.6.7 Anonymous Inner Class That Implements OnSharedPreferenceChangeListener
      7. 4.7 MainActivityFragment Class
        1. 4.7.1 package and import Statements
        2. 4.7.2 Fields
        3. 4.7.3 Overridden Fragment Method onCreateView
        4. 4.7.4 Method updateGuessRows
        5. 4.7.5 Method updateRegions
        6. 4.7.6 Method resetQuiz
        7. 4.7.7 Method loadNextFlag
        8. 4.7.8 Method getCountryName
        9. 4.7.9 Method animate
        10. 4.7.10 Anonymous Inner Class That Implements OnClickListener
        11. 4.7.11 Method disableButtons
      8. 4.8 SettingsActivity Class
      9. 4.9 SettingsActivityFragment Class
      10. 4.10 AndroidManifest.xml
      11. 4.11 Wrap-Up
    12. 5. Doodlz App
      1. 5.1 Introduction
      2. 5.2 Test-Driving the Doodlz App in an Android Virtual Device (AVD)
        1. Opening and Running the App
        2. Understanding the App’s Options
        3. Changing the Brush Color to Red
        4. Drawing the Flower Petals
        5. Changing the Brush Color to Dark Green
        6. Changing the Line Width and Drawing the Stem and Leaves
        7. Finishing the Drawing
        8. Saving the Image
        9. Printing the Image
      3. 5.3 Technologies Overview
        1. 5.3.1 Activity and Fragment Lifecycle Methods
        2. 5.3.2 Custom Views
        3. 5.3.3 Using SensorManager to Listen for Accelerometer Events
        4. 5.3.4 Custom DialogFragments
        5. 5.3.5 Drawing with Canvas, Paint and Bitmap
        6. 5.3.6 Processing Multiple Touch Events and Storing Lines in Paths
        7. 5.3.7 Saving to the Device
        8. 5.3.8 Printing and the Android Support Library’s PrintHelper Class
        9. 5.3.9 New Android 6.0 (Marshmallow) Permissions Model
        10. 5.3.10 Adding Dependencies Using the Gradle Build System
      4. 5.4 Creating the Project and Resources
        1. 5.4.1 Creating the Project
        2. 5.4.2 Gradle: Adding a Support Library to the Project
        3. 5.4.3 strings.xml
        4. 5.4.4 Importing the Material Design Icons for the App’s Menu Items
        5. 5.4.5 MainActivityFragment Menu
        6. 5.4.6 Adding a Permission to AndroidManifest.xml
      5. 5.5 Building the App’s GUI
        1. 5.5.1 content_main.xml Layout for MainActivity
        2. 5.5.2 fragment_main.xml Layout for MainActivityFragment
        3. 5.5.3 fragment_color.xml Layout for ColorDialogFragment
        4. 5.5.4 fragment_line_width.xml Layout for LineWidthDialogFragment
        5. 5.5.5 Adding Class EraseImageDialogFragment
      6. 5.6 MainActivity Class
      7. 5.7 MainActivityFragment Class
        1. 5.7.1 package Statement, import Statements and Fields
        2. 5.7.2 Overridden Fragment Method onCreateView
        3. 5.7.3 Methods onResume and enableAccelerometerListening
        4. 5.7.4 Methods onPause and disableAccelerometerListening
        5. 5.7.5 Anonymous Inner Class for Processing Accelerometer Events
        6. 5.7.6 Method confirmErase
        7. 5.7.7 Overridden Fragment Methods onCreateOptionsMenu and onOptionsItemSelected
        8. 5.7.8 Method saveImage
        9. 5.7.9 Overridden Method onRequestPermissionsResult
        10. 5.7.10 Methods getDoodleView and setDialogOnScreen
      8. 5.8 DoodleView Class
        1. 5.8.1 package Statement and import Statements
        2. 5.8.2 static and Instance Variables
        3. 5.8.3 Constructor
        4. 5.8.4 Overridden View Method onSizeChanged
        5. 5.8.5 Methods clear, setDrawingColor, getDrawingColor, setLineWidth and getLineWidth
        6. 5.8.6 Overridden View Method onDraw
        7. 5.8.7 Overridden View Method onTouchEvent
        8. 5.8.8 touchStarted Method
        9. 5.8.9 touchMoved Method
        10. 5.8.10 touchEnded Method
        11. 5.8.11 Method saveImage
        12. 5.8.12 Method printImage
      9. 5.9 ColorDialogFragment Class
        1. 5.9.1 Overridden DialogFragment Method onCreateDialog
        2. 5.9.2 Method getDoodleFragment
        3. 5.9.3 Overridden Fragment Lifecycle Methods onAttach and onDetach
        4. 5.9.4 Anonymous Inner Class That Responds to the Events of the Alpha, Red, Green and Blue SeekBars
      10. 5.10 LineWidthDialogFragment Class
        1. 5.10.1 Method onCreateDialog
        2. 5.10.2 Anonymous Inner Class That Responds to the Events of the widthSeekBar
      11. 5.11 EraseImageDialogFragment Class
      12. 5.12 Wrap-Up
    13. 6. Cannon Game App
      1. 6.1 Introduction
      2. 6.2 Test-Driving the Cannon Game App
        1. Opening and Running the App
        2. Playing the Game
      3. 6.3 Technologies Overview
        1. 6.3.1 Using the Resource Folder res/raw
        2. 6.3.2 Activity and Fragment Lifecycle Methods
        3. 6.3.3 Overriding View Method onTouchEvent
        4. 6.3.4 Adding Sound with SoundPool and AudioManager
        5. 6.3.5 Frame-by-Frame Animation with Threads, SurfaceView and SurfaceHolder
        6. 6.3.6 Simple Collision Detection
        7. 6.3.7 Immersive Mode
      4. 6.4 Building the GUI and Resource Files
        1. 6.4.1 Creating the Project
        2. Configure the App for Landscape Orientation
        3. 6.4.2 Adjusting the Theme to Remove the App Title and App Bar
        4. 6.4.3 strings.xml
        5. 6.4.4 Colors
        6. 6.4.5 Adding the Sounds to the App
        7. 6.4.6 Adding Class MainActivityFragment
        8. 6.4.7 Editing activity_main.xml
        9. 6.4.8 Adding the CannonView to fragment_main.xml
      5. 6.5 Overview of This App’s Classes
      6. 6.6 MainActivity Subclass of Activity
      7. 6.7 MainActivityFragment Subclass of Fragment
      8. 6.8 Class GameElement
        1. 6.8.1 Instance Variables and Constructor
        2. 6.8.2 Methods update, draw, and playSound
      9. 6.9 Blocker Subclass of GameElement
      10. 6.10 Target Subclass of GameElement
      11. 6.11 Cannon Class
        1. 6.11.1 Instance Variables and Constructor
        2. 6.11.2 Method align
        3. 6.11.3 Method fireCannonball
        4. 6.11.4 Method draw
        5. 6.11.5 Methods getCannonball and removeCannonball
      12. 6.12 Cannonball Subclass of GameElement
        1. 6.12.1 Instance Variables and Constructor
        2. 6.12.2 Methods getRadius, collidesWith, isOnScreen, and reverseVelocityX
        3. 6.12.3 Method update
        4. 6.12.4 Method draw
      13. 6.13 CannonView Subclass of SurfaceView
        1. 6.13.1 package and import Statements
        2. 6.13.2 Instance Variables and Constants
        3. 6.13.3 Constructor
        4. 6.13.4 Overriding View Method onSizeChanged
        5. 6.13.5 Methods getScreenWidth, getScreenHeight, and playSound
        6. 6.13.6 Method newGame
        7. 6.13.7 Method updatePositions
        8. 6.13.8 Method alignAndFireCannonball
        9. 6.13.9 Method showGameOverDialog
        10. 6.13.10 Method drawGameElements
        11. 6.13.11 Method testForCollisions
        12. 6.13.12 Methods stopGame and releaseResources
        13. 6.13.13 Implementing the SurfaceHolder.Callback Methods
        14. 6.13.14 Overriding View Method onTouchEvent
        15. 6.13.15 CannonThread: Using a Thread to Create a Game Loop
        16. 6.13.16 Methods hideSystemBars and showSystemBars
      14. 6.14 Wrap-Up
    14. 7. WeatherViewer App
      1. 7.1 Introduction
      2. 7.2 Test-Driving the WeatherViewer App
        1. Opening and Running the App
        2. Viewing a City’s 16-Day Weather Forecast
      3. 7.3 Technologies Overview
        1. 7.3.1 Web Services
        2. 7.3.2 JavaScript Object Notation (JSON) and the org.json Package
        3. 7.3.3 HttpUrlConnection Invoking a REST Web Service
        4. 7.3.4 Using AsyncTask to Perform Network Requests Outside the GUI Thread
        5. 7.3.5 ListView, ArrayAdapter and the View-Holder Pattern
        6. 7.3.6 FloatingActionButton
        7. 7.3.7 TextInputLayout
        8. 7.3.8 Snackbar
      4. 7.4 Building the App’s GUI and Resource Files
        1. 7.4.1 Creating the Project
        2. 7.4.2 AndroidManifest.xml
        3. 7.4.3 strings.xml
        4. 7.4.4 colors.xml
        5. 7.4.5 activity_main.xml
        6. 7.4.6 content_main.xml
        7. 7.4.7 list_item.xml
      5. 7.5 Class Weather
        1. 7.5.1 package Statement, import Statements and Instance Variables
        2. 7.5.2 Constructor
        3. 7.5.3 Method convertTimeStampToDay
      6. 7.6 Class WeatherArrayAdapter
        1. 7.6.1 package Statement and import Statements
        2. 7.6.2 Nested Class ViewHolder
        3. 7.6.3 Instance Variable and Constructor
        4. 7.6.4 Overridden ArrayAdapter Method getView
        5. 7.6.5 AsyncTask Subclass for Downloading Images in a Separate Thread
      7. 7.7 Class MainActivity
        1. 7.7.1 package Statement and import Statements
        2. 7.7.2 Instance Variables
        3. 7.7.3 Overridden Activity Method onCreate
        4. 7.7.4 Methods dismissKeyboard and createURL
        5. 7.7.5 AsyncTask Subclass for Invoking a Web Service
        6. 7.7.6 Method convertJSONtoArrayList
      8. 7.8 Wrap-Up
    15. 8. Twitter® Searches App
      1. 8.1 Introduction
      2. 8.2 Test-Driving the App
        1. Opening and Running the App
        2. 8.2.1 Adding a Favorite Search
        3. 8.2.2 Viewing Twitter Search Results
        4. 8.2.3 Editing a Search
        5. 8.2.4 Sharing a Search
        6. 8.2.5 Deleting a Search
        7. 8.2.6 Scrolling Through Saved Searches
      3. 8.3 Technologies Overview
        1. 8.3.1 Storing Key–Value Data in a SharedPreferences File
        2. 8.3.2 Implicit Intents and Intent Choosers
        3. 8.3.3 RecyclerView
        4. 8.3.4 RecyclerView.Adapter and RecyclerView.ViewHolder
        5. 8.3.5 RecyclerView.ItemDecoration
        6. 8.3.6 Displaying a List of Options in an AlertDialog
      4. 8.4 Building the App’s GUI and Resource Files
        1. 8.4.1 Creating the Project
        2. 8.4.2 AndroidManifest.xml
        3. 8.4.3 Adding the RecyclerView Library
        4. 8.4.4 colors.xml
        5. 8.4.5 strings.xml
        6. 8.4.6 arrays.xml
        7. 8.4.7 dimens.xml
        8. 8.4.8 Adding the Save Button Icon
        9. 8.4.9 activity_main.xml
        10. 8.4.10 content_main.xml
        11. 8.4.11 RecyclerView Item’s Layout: list_item.xml
      5. 8.5 MainActivity Class
        1. 8.5.1 package and import Statements
        2. 8.5.2 MainActivity Fields
        3. 8.5.3 Overriden Activity Method onCreate
        4. 8.5.4 TextWatcher Event Handler and Method updateSaveFAB
        5. 8.5.5 saveButton’s OnClickListener
        6. 8.5.6 addTaggedSearch Method
        7. 8.5.7 Anonymous Inner Class That Implements View.OnClickListener to Display Search Results
        8. 8.5.8 Anonymous Inner Class That Implements View.OnLongClickListener to Share, Edit or Delete a Search
        9. 8.5.9 shareSearch Method
        10. 8.5.10 deleteSearch Method
      6. 8.6 SearchesAdapter Subclass of RecyclerView.Adapter
        1. 8.6.1 package Statement, import statements, Instance Variables and Constructor
        2. 8.6.2 Nested ViewHolder Subclass of RecyclerView.ViewHolder
        3. 8.6.3 Overridden RecyclerView.Adapter Methods
      7. 8.7 ItemDivider Subclass of RecyclerView.ItemDecoration
      8. 8.8 A Note on Fabric: Twitter’s New Mobile Development Platform
      9. 8.9 Wrap-Up
    16. 9. Address Book App
      1. 9.1 Introduction
      2. 9.2 Test-Driving the Address Book App
        1. Opening and Running the App
        2. 9.2.1 Adding a Contact
        3. 9.2.2 Viewing a Contact
        4. 9.2.3 Editing a Contact
        5. 9.2.4 Deleting a Contact
      3. 9.3 Technologies Overview
        1. 9.3.1 Displaying Fragments with FragmentTransactions
        2. 9.3.2 Communicating Data Between a Fragment and a Host Activity
        3. 9.3.3 Manipulating a SQLite Database
        4. 9.3.4 ContentProviders and ContentResolvers
        5. 9.3.5 Loader and LoaderManager—Asynchronous Database Access
        6. 9.3.6 Defining Styles and Applying Them to GUI Components
        7. 9.3.7 Specifying a TextView Background
      4. 9.4 Building the GUI and Resource Files
        1. 9.4.1 Creating the Project
        2. 9.4.2 Creating the App’s Classes
        3. 9.4.3 Add the App’s Icons
        4. 9.4.4 strings.xml
        5. 9.4.5 styles.xml
        6. 9.4.6 textview_border.xml
        7. 9.4.7 MainActivity’s Layout
        8. 9.4.8 ContactsFragment’s Layout
        9. 9.4.9 DetailFragment’s Layout
        10. 9.4.10 AddEditFragment’s Layout
        11. 9.4.11 DetailFragment’s Menu
      5. 9.5 Overview of This Chapter’s Classes
        1. com.deitel.addressbook.data Package
        2. com.deitel.addressbook Package
      6. 9.6 DatabaseDescription Class
        1. 9.6.1 static Fields
        2. 9.6.2 Nested Class Contact
      7. 9.7 AddressBookDatabaseHelper Class
        1. Constructor
        2. Overridden Methods
      8. 9.8 AddressBookContentProvider Class
        1. 9.8.1 AddressBookContentProvider Fields
        2. 9.8.2 Overridden Methods onCreate and getType
        3. 9.8.3 Overridden Method query
        4. 9.8.4 Overridden Method insert
        5. 9.8.5 Overridden Method update
        6. 9.8.6 Overridden Method delete
      9. 9.9 MainActivity Class
        1. 9.9.1 Superclass, Implemented Interfaces and Fields
        2. 9.9.2 Overridden Method onCreate
        3. 9.9.3 ContactsFragment.ContactsFragmentListener Methods
        4. 9.9.4 Method displayContact
        5. 9.9.5 Method displayAddEditFragment
        6. 9.9.6 DetailFragment.DetailFragmentListener Methods
        7. 9.9.7 AddEditFragment.AddEditFragmentListener Method
      10. 9.10 ContactsFragment Class
        1. 9.10.1 Superclass and Implemented Interface
        2. 9.10.2 ContactsFragmentListener
        3. 9.10.3 Fields
        4. 9.10.4 Overridden Fragment Method onCreateView
        5. 9.10.5 Overridden Fragment Methods onAttach and onDetach
        6. 9.10.6 Overridden Fragment Method onActivityCreated
        7. 9.10.7 Method updateContactList
        8. 9.10.8 LoaderManager.LoaderCallbacks<Cursor> Methods
      11. 9.11 ContactsAdapter Class
        1. Nested Interface ContactClickListener
        2. Nested Class ViewHolder
        3. Overridden RecyclerView.Adapter Method onCreateViewHolder
        4. Overridden RecyclerView.Adapter Method onBindViewHolder
        5. Overridden RecyclerView.Adapter Method getItemCount
        6. Method swapCursor
      12. 9.12 AddEditFragment Class
        1. 9.12.1 Superclass and Implemented Interface
        2. 9.12.2 AddEditFragmentListener
        3. 9.12.3 Fields
        4. 9.12.4 Overridden Fragment Methods onAttach, onDetach and onCreateView
        5. 9.12.5 TextWatcher nameChangedListener and Method updateSaveButtonFAB
        6. 9.12.6 View.OnClickListener saveContactButtonClicked and Method saveContact
        7. 9.12.7 LoaderManager.LoaderCallbacks<Cursor> Methods
      13. 9.13 DetailFragment Class
        1. 9.13.1 Superclass and Implemented Interface
        2. 9.13.2 DetailFragmentListener
        3. 9.13.3 Fields
        4. 9.13.4 Overridden Methods onAttach, onDetach and onCreateView
        5. 9.13.5 Overridden Methods onCreateOptionsMenu and onOptionsItemSelected
        6. 9.13.6 Method deleteContact and DialogFragment confirmDelete
        7. 9.13.7 LoaderManager.LoaderCallback<Cursor> Methods
      14. 9.14 Wrap-Up
    17. 10. Google Play and App Business Issues
      1. 10.1 Introduction
      2. 10.2 Preparing Your Apps for Publication
        1. 10.2.1 Testing Your App
        2. 10.2.2 End User License Agreement
        3. 10.2.3 Icons and Labels
        4. 10.2.4 Versioning Your App
        5. 10.2.5 Licensing to Control Access to Paid Apps
        6. 10.2.6 Obfuscating Your Code
        7. 10.2.7 Getting a Private Key for Digitally Signing Your App
        8. 10.2.8 Featured Image and Screenshots
        9. 10.2.9 Promotional App Video
      3. 10.3 Pricing Your App: Free or Fee
        1. 10.3.1 Paid Apps
        2. 10.3.2 Free Apps
      4. 10.4 Monetizing Apps with In-App Advertising
      5. 10.5 Monetizing Apps: Using In-App Billing to Sell Virtual Goods
        1. In-App Purchase for Apps Sold Through Other App Marketplaces
      6. 10.6 Registering at Google Play
      7. 10.7 Setting Up a Google Payments Merchant Account
      8. 10.8 Uploading Your Apps to Google Play
      9. 10.9 Launching Play Store from Within Your App
      10. 10.10 Managing Your Apps in Google Play
      11. 10.11 Other Android App Marketplaces
      12. 10.12 Other Mobile App Platforms and Porting Your Apps
      13. 10.13 Marketing Your Apps
        1. Facebook
        2. Twitter
        3. Viral Video
        4. E-Mail Newsletters
        5. App Reviews
        6. Internet Public Relations
        7. Mobile Advertising Networks
      14. 10.14 Wrap-Up
        1. Staying in Contact with the Authors and Deitel & Associates, Inc.
    18. Index
    19. Code Snippets