SlideShare une entreprise Scribd logo
1  sur  38
Robert Cooper
Reach Health
   Tablet-specific version of Android
       New UI Metaphors
       New LaF (Holographic)
       New/Improved APIs.
       Old APIs made optional (telephony, etc)
       New Technologies
   Basis for future releases
     3.1 seems to be on-deck
     Merged with phone branch?
   Hopefully everything, at least briefly.
   Detailed discussion of the things I just you
    are most likely to care about as a
    developer :P
   ActionBar
     Used for “App Global” Tabs
     Special MenuItems or SubMenus
     App Icon with a “Logical Home” operation
   No Hard Buttons
     NotificationBar now includes “Back”, “Home”
     and “Tasks”
   Long-Touch context menus deprecated as
    a model
   Holographic look and feel added
   Make it more TRON-ish…
   … but not too TRON-ish
   Lots of glows, varied depth line
    markers, 3D transitions
   Improved text ops mechanics
   Fragments
     Sub-Activities
   Loaders
     Async-Friendly Content Fetchers
   ActionBar
     New Menuing and Nav System.
   Enhanced Interaction for Widgets and
    Notifications
   Drag and Drop
   Fragments
     Fragments are Sub-Activities that can be
      recomposed based on UI factors (screen
      size, orientation, etc)
     Part of 3.0, but available as a build-in backport
      as far back as 1.6 with the “Android
      Compatibility Package” (Available in the
      SDK/AVD Manager)
   Fragments mimic Activity lifecycle:
     onCreate()
     onStart()
     onCreateView()*
     onPause()
     onStop()
   Fragments laid out as part of Layouts
<?xml version="1.0" encoding="utf-8"?>
   <LinearLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
       android:orientation="horizontal"
       android:layout_width="match_parent"
       android:layout_height="match_parent">
       <fragment android:name="com.example.news.ArticleListFragment"
               android:id="@+id/list"
               android:layout_weight="1"
               android:layout_width="0dp"
               android:layout_height="match_parent" />
       <fragment
   android:name="com.example.news.ArticleReaderFragment"
               android:id="@+id/viewer"
               android:layout_weight="2"
               android:layout_width="0dp"
               android:layout_height="match_parent" />
   </LinearLayout>
   Each Fragment becomes unique in the
    application
   Can move between Activities with different
    combinations of Fragments by passing
    Fragment model/URI information using
    the FragmentManager API.
   FragmentTransaction can be used to
    manipulate fragment state and “back”
    behavior
   FragmentTransaction
     Fragment newFragment = new ExampleFragment();
    FragmentTransaction transaction =
    getFragmentManager().beginTransaction();

    transaction.replace(R.id.fragment_container, newFragmen
    t);
    transaction.addToBackStack(null);

    transaction.commit();
   Loaders provide a standard way to load
    data for Fragments
   AsyncTaskLoader provides API for loading
    data asynchronously
   CursorLoader loads a paged dataset
    asynchronously – this is likely what you
    want to read, for example, an Atom Pub
    Proto data source remotely.
   Moving MenuItems to the ActionBar

<?xml version="1.0" encoding="utf-8"?>
  <menu
  xmlns:android="http://schemas.android.com/apk/res/android"
  >
    <item android:id="@+id/menu_add"
        android:icon="@drawable/ic_menu_save"
        android:title="@string/menu_save"
        android:showAsAction="ifRoom|withText" />
  </menu>
   Custom Views in ActionBar
<?xml version="1.0" encoding="utf-8"?>
  <menu
  xmlns:android="http://schemas.android.com/apk/res/andro
  id">
      <item android:id="@+id/menu_search"
          android:title="Search"
          android:icon="@drawable/ic_menu_search"
          android:showAsAction="ifRoom"
      android:actionLayout="@layout/searchview"
      android:actionViewClass="android.widget.SearchView"

              />
    </menu>
   Custom Views in ActionBar (cont)

SearchView searchView = (SearchView)
  menu.findItem(R.id.menu_search).getActionView
  ();
   Navigation
     Big win over iOS!
   Implicit “Home” widget (vs iOS Nav Bar)
   App Global Tabs (vs iOS Tool Bar)
   App List Navigation
   Getting the “Home” icon view
View home = a.findViewById(android.R.id.home);
home.setOnClickListener(new OnClickListener() {
      public void onClick(View arg0) {
         a.finish();
      }
});
   Adding “Up” marker
ActionBar actionBar = this.getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
   ActionBar Tabs
    final ActionBar actionBar = getActionBar();
    actionBar.setNavigationMode(
           ActionBar.NAVIGATION_MODE_TABS);
    // remove the activity title to make space for tabs
    actionBar.setDisplayShowTitleEnabled(false);
    Fragment artistsFragment = new ArtistsFragment();
    actionBar.addTab(actionBar.newTab()
         .setText(R.string.tab_artists)
        .setTabListener(new TabListener(artistsFragment)));
    Fragment albumsFragment = new AlbumsFragment();
    actionBar.addTab(actionBar.newTab()
         .setText(R.string.tab_albums)
         .setTabListener(new TabListener(albumsFragment)));
   ActionBar List (Spinner) Navigation
    ActionBar actionBar = getActionBar();
    actionBar.setNavigationMode(
             ActionBar.NAVIGATION_MODE_LIST);
    actionBar.setListNavigationCallbacks(
       new SpinnerAdapter(){
          public View getDropDownView(int position,
              View convertView, View Group parent){
              // …
          }

    }, new OnNavigationListener(){
          public boolean onNavigationItemSelected(
              int itemPosition, long itemId){
            //…
          }
    });
   Notifications can now use RemoteViews to
    allow interaction with the popup notification,
    rather than just launch an intent.
    RemoteViews layout = new RemoteViews(
       getPackageName(), R.layout.notification);

    notification.contentView = layout;

    layout.setOnClickPendingIntent(
      R.id.my_button,
     getDialogPendingIntent(
      "You pressed it!"));
PendingIntent getDialogPendingIntent(
     String dialogText) {
          return PendingIntent.getActivity(
                  this, // send back to the creating Act.
                  dialogText.hashCode(),
                  new Intent(ACTION_DIALOG)
                          .putExtra(Intent.EXTRA_TEXT,
                                     dialogText)
                          .addFlags(
                           Intent.FLAG_ACTIVITY_NEW_TASK),
                  0);
      }
Handling the PendingIntent:

 if (ACTION_DIALOG.equals(intent.getAction())) {
               showDialog(
                    intent.getStringExtra(
                             Intent.EXTRA_TEXT))
 }



PendingIntent then becomes an invisible
 call back into your Activity.
   Any View can now be dragged about the
    screen.
   To begin a drag action call:
    myView.startDrag(
    dragData, dragShadowBuilder, localData,
     0 /*unused int flags */);
   Can be called from you
    OnClick/OnLongClick listeners…
   localData is just any Object that will be
    sent with each DragEvent.
   dragData: is a ClipData object. This
    contains the data representation of what is
    being dragged:
    ClipData.Item item =
               new ClipData.Item(v.getTag());
     ClipData dragData = new ClipData(v.getTag(),
               ClipData.MIMETYPE_TEXT_PLAIN,item);


Be sure to use the “tag” property for your
 model data!
 Create the DrawShadowBuilder. This returns the
  view that is dragged about under the pointer.
 This class takes a View as an argument and
  looks a lot like the stock View paint lifecycle.
    @Override
    public void onProvideShadowMetrics (Point
    size, Point touch)
    @Override
    public void onDrawShadow(Canvas canvas)
 The first method sets the bounds, the second
  paints to the canvas.
 You can use the View’s existing draw() method
  then mutate it
   DragEvents
     onDragEvent(DragEvent) or
     View.OnDragListener on any view (These are
     really for Drop Targets)
   DragEvent.getAction() returns one of the
    possible event action types.
   ACTION_DRAG_STARTED
     Sent to all active Views – check here for drop target
      validity!
   ACTION_DRAG_ENTERED
     Sent when the touch enters the box of the View
   ACTION_DRAG_LOCATION
     Sent on each move while in the box of the View
   ACTION_DRAG_EXITED
     Sent when the touch leaves the box.
   ACTION_DROP
     Sent on drop event *ONLY* when the View/Listener
      returned “true” from the ACTION_DRAG_STARTED
      event.
   Support for Hardware Accelerated Graphics
       Applies to stock animations and drawing APIs
       Comes damned near for free but…
       … if you haven’t tested it, it doesn’t work.
       Romain Guy eats his words! :P
   Property animation
   RenderScript
     A C99-ish script for doing OpenGL ops
     Should be like falling off a log for people with
        OpenCL experience (read: not me)
   Activation/Deactivation
     Step 1: Add…
    android:hardwareAccelerated="true|false“
    …to your <application> or <activity>
     Step 2: Profit!
   Looks a whole lot like every other
    reflective animator (Swing-X, Gwittir, Moo
    Tools, etc)
   Lots of possible options, but easily
    summarized:
    ObjectAnimator anim = ObjectAnimator.ofFloat(
      someObject, “someProperty", startValue, endValue);
    anim.setInterpolater( someInterpolater );
    anim.setDuration(1000);
    anim.start();
   Lots of stock interpolators (mutation
    strategies)
     AccelerateDecelerateInterpolator : Sinoidal
     AccelerateInterpolator : Geometric
     AnticipateInterpolator : Start backwards, then fling
      forward
     BounceInterpolator : Bounces around the end
      value
     Linear Interpolator : Even steps
     “And many, many more!”
   Not even going to get into this. Example from Google:
    #pragma version(1)
    #pragma rs java_package_name(com.android.example.hellocompute)
    rs_allocation gIn;
    rs_allocation gOut;
    rs_script gScript;
    const static float3 gMonoMult = {0.299f, 0.587f, 0.114f};
    void root(const uchar4 *v_in, uchar4 *v_out, const void
    *usrData, uint32_t x, uint32_t y) {
        float4 f4 = rsUnpackColor8888(*v_in);
        float3 mono = dot(f4.rgb, gMonoMult);
        *v_out = rsPackColorTo8888(mono);
    }
    void filter() {
        rsForEach(gScript, gIn, gOut, 0);
    }
   DownloadManager API is VASTLY
    improved over the Gingerbread version!
     It is actually usable now!
   HTTP Live Streaming support
   Improved SIP API over Gingerbread.
   Accessibility improvements
   Still questions about what API 12 will mean
     ActionBar/New Notifications on Phones? Is that a
      good idea?
     Keeping phones with the current menu strategy?
     How to detect “Tablet-y” systems?
   Google TV?
   Lots and Lots of “Reflectively constructed
    strategies” – I it is manageable, but getting
    harder to support older devices

Contenu connexe

Tendances

Quick Intro to Android Development
Quick Intro to Android DevelopmentQuick Intro to Android Development
Quick Intro to Android Development
Jussi Pohjolainen
 

Tendances (20)

Android dev toolbox
Android dev toolboxAndroid dev toolbox
Android dev toolbox
 
Material Design and Backwards Compatibility
Material Design and Backwards CompatibilityMaterial Design and Backwards Compatibility
Material Design and Backwards Compatibility
 
Android basic 4 Navigation Drawer
Android basic 4 Navigation DrawerAndroid basic 4 Navigation Drawer
Android basic 4 Navigation Drawer
 
Android Sliding Menu dengan Navigation Drawer
Android Sliding Menu dengan Navigation DrawerAndroid Sliding Menu dengan Navigation Drawer
Android Sliding Menu dengan Navigation Drawer
 
Andriod dev toolbox part 2
Andriod dev toolbox  part 2Andriod dev toolbox  part 2
Andriod dev toolbox part 2
 
Eclipse Tricks
Eclipse TricksEclipse Tricks
Eclipse Tricks
 
Android basic 3 Dialogs
Android basic 3 DialogsAndroid basic 3 Dialogs
Android basic 3 Dialogs
 
Android UI Reference
Android UI ReferenceAndroid UI Reference
Android UI Reference
 
Android basic 2 UI Design
Android basic 2 UI DesignAndroid basic 2 UI Design
Android basic 2 UI Design
 
STYLISH FLOOR
STYLISH FLOORSTYLISH FLOOR
STYLISH FLOOR
 
Design Patterns for Tablets and Smartphones
Design Patterns for Tablets and SmartphonesDesign Patterns for Tablets and Smartphones
Design Patterns for Tablets and Smartphones
 
Quick Intro to Android Development
Quick Intro to Android DevelopmentQuick Intro to Android Development
Quick Intro to Android Development
 
Intro to Google TV
Intro to Google TVIntro to Google TV
Intro to Google TV
 
Android app material design from dev's perspective
Android app material design from dev's perspectiveAndroid app material design from dev's perspective
Android app material design from dev's perspective
 
Android Testing
Android TestingAndroid Testing
Android Testing
 
A comprehensive guide on developing responsive and common react filter component
A comprehensive guide on developing responsive and common react filter componentA comprehensive guide on developing responsive and common react filter component
A comprehensive guide on developing responsive and common react filter component
 
Capture image on eye blink
Capture image on eye blinkCapture image on eye blink
Capture image on eye blink
 
Session 2- day 3
Session 2- day 3Session 2- day 3
Session 2- day 3
 
Android Accessibility
Android AccessibilityAndroid Accessibility
Android Accessibility
 
Day seven
Day sevenDay seven
Day seven
 

En vedette (9)

Improved tablet production
Improved tablet productionImproved tablet production
Improved tablet production
 
What's new in android M(6.0)
What's new in android M(6.0)What's new in android M(6.0)
What's new in android M(6.0)
 
Android M: Top Features That You Need To Know
Android M: Top Features That You Need To KnowAndroid M: Top Features That You Need To Know
Android M: Top Features That You Need To Know
 
Granulation ppt.
Granulation ppt.Granulation ppt.
Granulation ppt.
 
tablet presentation
tablet presentationtablet presentation
tablet presentation
 
Apple presentation final ppt
Apple presentation final pptApple presentation final ppt
Apple presentation final ppt
 
Apple presentation.ppt
Apple presentation.pptApple presentation.ppt
Apple presentation.ppt
 
Presentation On Apple INC
Presentation On Apple INCPresentation On Apple INC
Presentation On Apple INC
 
Apple Inc Presentatioin
Apple Inc PresentatioinApple Inc Presentatioin
Apple Inc Presentatioin
 

Similaire à Android 3

Android Best Practices
Android Best PracticesAndroid Best Practices
Android Best Practices
Yekmer Simsek
 
Android activity, service, and broadcast recievers
Android activity, service, and broadcast recieversAndroid activity, service, and broadcast recievers
Android activity, service, and broadcast recievers
Utkarsh Mankad
 
Droidcon2013 android experience lahoda
Droidcon2013 android experience lahodaDroidcon2013 android experience lahoda
Droidcon2013 android experience lahoda
Droidcon Berlin
 
Android app development basics
Android app development basicsAndroid app development basics
Android app development basics
Anton Narusberg
 

Similaire à Android 3 (20)

Android Best Practices
Android Best PracticesAndroid Best Practices
Android Best Practices
 
Android activity, service, and broadcast recievers
Android activity, service, and broadcast recieversAndroid activity, service, and broadcast recievers
Android activity, service, and broadcast recievers
 
04 activities - Android
04   activities - Android04   activities - Android
04 activities - Android
 
Android apps development
Android apps developmentAndroid apps development
Android apps development
 
Android
AndroidAndroid
Android
 
Improving android experience for both users and developers
Improving android experience for both users and developersImproving android experience for both users and developers
Improving android experience for both users and developers
 
Droidcon2013 android experience lahoda
Droidcon2013 android experience lahodaDroidcon2013 android experience lahoda
Droidcon2013 android experience lahoda
 
Android best practices
Android best practicesAndroid best practices
Android best practices
 
Android por onde começar? Mini Curso Erbase 2015
Android por onde começar? Mini Curso Erbase 2015 Android por onde começar? Mini Curso Erbase 2015
Android por onde começar? Mini Curso Erbase 2015
 
Day 5
Day 5Day 5
Day 5
 
How to become an Android dev starting from iOS (and vice versa)
How to become an Android dev starting from iOS (and vice versa)How to become an Android dev starting from iOS (and vice versa)
How to become an Android dev starting from iOS (and vice versa)
 
Android app development basics
Android app development basicsAndroid app development basics
Android app development basics
 
Getting Started With Material Design
Getting Started With Material DesignGetting Started With Material Design
Getting Started With Material Design
 
Introduction toandroid
Introduction toandroidIntroduction toandroid
Introduction toandroid
 
Android App Dev Manual-1.doc
Android App Dev Manual-1.docAndroid App Dev Manual-1.doc
Android App Dev Manual-1.doc
 
Workshop 26: React Native - The Native Side
Workshop 26: React Native - The Native SideWorkshop 26: React Native - The Native Side
Workshop 26: React Native - The Native Side
 
mobl
moblmobl
mobl
 
07_UIAndroid.pdf
07_UIAndroid.pdf07_UIAndroid.pdf
07_UIAndroid.pdf
 
Designing Apps for the Motorola XOOM
Designing Apps for the Motorola XOOM Designing Apps for the Motorola XOOM
Designing Apps for the Motorola XOOM
 
From Legacy to Hexagonal (An Unexpected Android Journey)
From Legacy to Hexagonal (An Unexpected Android Journey)From Legacy to Hexagonal (An Unexpected Android Journey)
From Legacy to Hexagonal (An Unexpected Android Journey)
 

Plus de Robert Cooper (6)

GWT is Smarter Than You
GWT is Smarter Than YouGWT is Smarter Than You
GWT is Smarter Than You
 
Guice gin
Guice ginGuice gin
Guice gin
 
Sapphire Gimlets
Sapphire GimletsSapphire Gimlets
Sapphire Gimlets
 
Android Froyo
Android FroyoAndroid Froyo
Android Froyo
 
Extreme Source Compatibility
Extreme Source CompatibilityExtreme Source Compatibility
Extreme Source Compatibility
 
GWT 2 Is Smarter Than You
GWT 2 Is Smarter Than YouGWT 2 Is Smarter Than You
GWT 2 Is Smarter Than You
 

Dernier

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
Earley Information Science
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Enterprise Knowledge
 

Dernier (20)

Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Evaluating the top large language models.pdf
Evaluating the top large language models.pdfEvaluating the top large language models.pdf
Evaluating the top large language models.pdf
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 

Android 3

  • 2. Tablet-specific version of Android  New UI Metaphors  New LaF (Holographic)  New/Improved APIs.  Old APIs made optional (telephony, etc)  New Technologies  Basis for future releases  3.1 seems to be on-deck  Merged with phone branch?
  • 3. Hopefully everything, at least briefly.  Detailed discussion of the things I just you are most likely to care about as a developer :P
  • 4. ActionBar  Used for “App Global” Tabs  Special MenuItems or SubMenus  App Icon with a “Logical Home” operation  No Hard Buttons  NotificationBar now includes “Back”, “Home” and “Tasks”  Long-Touch context menus deprecated as a model
  • 5.
  • 6. Holographic look and feel added  Make it more TRON-ish…  … but not too TRON-ish  Lots of glows, varied depth line markers, 3D transitions  Improved text ops mechanics
  • 7.
  • 8.
  • 9.
  • 10. Fragments  Sub-Activities  Loaders  Async-Friendly Content Fetchers  ActionBar  New Menuing and Nav System.  Enhanced Interaction for Widgets and Notifications  Drag and Drop
  • 11. Fragments  Fragments are Sub-Activities that can be recomposed based on UI factors (screen size, orientation, etc)  Part of 3.0, but available as a build-in backport as far back as 1.6 with the “Android Compatibility Package” (Available in the SDK/AVD Manager)
  • 12. Fragments mimic Activity lifecycle:  onCreate()  onStart()  onCreateView()*  onPause()  onStop()
  • 13. Fragments laid out as part of Layouts <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> <fragment android:name="com.example.news.ArticleListFragment" android:id="@+id/list" android:layout_weight="1" android:layout_width="0dp" android:layout_height="match_parent" /> <fragment android:name="com.example.news.ArticleReaderFragment" android:id="@+id/viewer" android:layout_weight="2" android:layout_width="0dp" android:layout_height="match_parent" /> </LinearLayout>
  • 14. Each Fragment becomes unique in the application  Can move between Activities with different combinations of Fragments by passing Fragment model/URI information using the FragmentManager API.  FragmentTransaction can be used to manipulate fragment state and “back” behavior
  • 15. FragmentTransaction Fragment newFragment = new ExampleFragment(); FragmentTransaction transaction = getFragmentManager().beginTransaction(); transaction.replace(R.id.fragment_container, newFragmen t); transaction.addToBackStack(null); transaction.commit();
  • 16. Loaders provide a standard way to load data for Fragments  AsyncTaskLoader provides API for loading data asynchronously  CursorLoader loads a paged dataset asynchronously – this is likely what you want to read, for example, an Atom Pub Proto data source remotely.
  • 17. Moving MenuItems to the ActionBar <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/menu_add" android:icon="@drawable/ic_menu_save" android:title="@string/menu_save" android:showAsAction="ifRoom|withText" /> </menu>
  • 18. Custom Views in ActionBar <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/andro id"> <item android:id="@+id/menu_search" android:title="Search" android:icon="@drawable/ic_menu_search" android:showAsAction="ifRoom" android:actionLayout="@layout/searchview" android:actionViewClass="android.widget.SearchView" /> </menu>
  • 19. Custom Views in ActionBar (cont) SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView ();
  • 20. Navigation  Big win over iOS!  Implicit “Home” widget (vs iOS Nav Bar)  App Global Tabs (vs iOS Tool Bar)  App List Navigation
  • 21. Getting the “Home” icon view View home = a.findViewById(android.R.id.home); home.setOnClickListener(new OnClickListener() { public void onClick(View arg0) { a.finish(); } });  Adding “Up” marker ActionBar actionBar = this.getActionBar(); actionBar.setDisplayHomeAsUpEnabled(true);
  • 22. ActionBar Tabs final ActionBar actionBar = getActionBar(); actionBar.setNavigationMode( ActionBar.NAVIGATION_MODE_TABS); // remove the activity title to make space for tabs actionBar.setDisplayShowTitleEnabled(false); Fragment artistsFragment = new ArtistsFragment(); actionBar.addTab(actionBar.newTab() .setText(R.string.tab_artists) .setTabListener(new TabListener(artistsFragment))); Fragment albumsFragment = new AlbumsFragment(); actionBar.addTab(actionBar.newTab() .setText(R.string.tab_albums) .setTabListener(new TabListener(albumsFragment)));
  • 23. ActionBar List (Spinner) Navigation ActionBar actionBar = getActionBar(); actionBar.setNavigationMode( ActionBar.NAVIGATION_MODE_LIST); actionBar.setListNavigationCallbacks( new SpinnerAdapter(){ public View getDropDownView(int position, View convertView, View Group parent){ // … } }, new OnNavigationListener(){ public boolean onNavigationItemSelected( int itemPosition, long itemId){ //… } });
  • 24. Notifications can now use RemoteViews to allow interaction with the popup notification, rather than just launch an intent. RemoteViews layout = new RemoteViews( getPackageName(), R.layout.notification); notification.contentView = layout; layout.setOnClickPendingIntent( R.id.my_button, getDialogPendingIntent( "You pressed it!"));
  • 25. PendingIntent getDialogPendingIntent( String dialogText) { return PendingIntent.getActivity( this, // send back to the creating Act. dialogText.hashCode(), new Intent(ACTION_DIALOG) .putExtra(Intent.EXTRA_TEXT, dialogText) .addFlags( Intent.FLAG_ACTIVITY_NEW_TASK), 0); }
  • 26. Handling the PendingIntent: if (ACTION_DIALOG.equals(intent.getAction())) { showDialog( intent.getStringExtra( Intent.EXTRA_TEXT)) } PendingIntent then becomes an invisible call back into your Activity.
  • 27. Any View can now be dragged about the screen.  To begin a drag action call: myView.startDrag( dragData, dragShadowBuilder, localData,  0 /*unused int flags */);  Can be called from you OnClick/OnLongClick listeners…  localData is just any Object that will be sent with each DragEvent.
  • 28. dragData: is a ClipData object. This contains the data representation of what is being dragged: ClipData.Item item = new ClipData.Item(v.getTag()); ClipData dragData = new ClipData(v.getTag(), ClipData.MIMETYPE_TEXT_PLAIN,item); Be sure to use the “tag” property for your model data!
  • 29.  Create the DrawShadowBuilder. This returns the view that is dragged about under the pointer.  This class takes a View as an argument and looks a lot like the stock View paint lifecycle. @Override public void onProvideShadowMetrics (Point size, Point touch) @Override public void onDrawShadow(Canvas canvas)  The first method sets the bounds, the second paints to the canvas.  You can use the View’s existing draw() method then mutate it
  • 30. DragEvents  onDragEvent(DragEvent) or View.OnDragListener on any view (These are really for Drop Targets)  DragEvent.getAction() returns one of the possible event action types.
  • 31. ACTION_DRAG_STARTED  Sent to all active Views – check here for drop target validity!  ACTION_DRAG_ENTERED  Sent when the touch enters the box of the View  ACTION_DRAG_LOCATION  Sent on each move while in the box of the View  ACTION_DRAG_EXITED  Sent when the touch leaves the box.  ACTION_DROP  Sent on drop event *ONLY* when the View/Listener returned “true” from the ACTION_DRAG_STARTED event.
  • 32. Support for Hardware Accelerated Graphics  Applies to stock animations and drawing APIs  Comes damned near for free but…  … if you haven’t tested it, it doesn’t work.  Romain Guy eats his words! :P  Property animation  RenderScript  A C99-ish script for doing OpenGL ops  Should be like falling off a log for people with OpenCL experience (read: not me)
  • 33. Activation/Deactivation  Step 1: Add… android:hardwareAccelerated="true|false“ …to your <application> or <activity>  Step 2: Profit!
  • 34. Looks a whole lot like every other reflective animator (Swing-X, Gwittir, Moo Tools, etc)  Lots of possible options, but easily summarized: ObjectAnimator anim = ObjectAnimator.ofFloat( someObject, “someProperty", startValue, endValue); anim.setInterpolater( someInterpolater ); anim.setDuration(1000); anim.start();
  • 35. Lots of stock interpolators (mutation strategies)  AccelerateDecelerateInterpolator : Sinoidal  AccelerateInterpolator : Geometric  AnticipateInterpolator : Start backwards, then fling forward  BounceInterpolator : Bounces around the end value  Linear Interpolator : Even steps  “And many, many more!”
  • 36. Not even going to get into this. Example from Google: #pragma version(1) #pragma rs java_package_name(com.android.example.hellocompute) rs_allocation gIn; rs_allocation gOut; rs_script gScript; const static float3 gMonoMult = {0.299f, 0.587f, 0.114f}; void root(const uchar4 *v_in, uchar4 *v_out, const void *usrData, uint32_t x, uint32_t y) { float4 f4 = rsUnpackColor8888(*v_in); float3 mono = dot(f4.rgb, gMonoMult); *v_out = rsPackColorTo8888(mono); } void filter() { rsForEach(gScript, gIn, gOut, 0); }
  • 37. DownloadManager API is VASTLY improved over the Gingerbread version!  It is actually usable now!  HTTP Live Streaming support  Improved SIP API over Gingerbread.  Accessibility improvements
  • 38. Still questions about what API 12 will mean  ActionBar/New Notifications on Phones? Is that a good idea?  Keeping phones with the current menu strategy?  How to detect “Tablet-y” systems?  Google TV?  Lots and Lots of “Reflectively constructed strategies” – I it is manageable, but getting harder to support older devices