Your SlideShare is downloading. ×
Android 3
Upcoming SlideShare
Loading in...5

Thanks for flagging this SlideShare!

Oops! An error has occurred.

Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Android 3


Published on

What's new in Android 3.0 Honeycomb

What's new in Android 3.0 Honeycomb

  • Be the first to comment

  • Be the first to like this

No Downloads
Total Views
On Slideshare
From Embeds
Number of Embeds
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

No notes for slide


  • 1. Robert CooperReach Health
  • 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.  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
  • 6.  Fragments  Sub-Activities Loaders  Async-Friendly Content Fetchers ActionBar  New Menuing and Nav System. Enhanced Interaction for Widgets and Notifications Drag and Drop
  • 7.  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)
  • 8.  Fragments mimic Activity lifecycle:  onCreate()  onStart()  onCreateView()*  onPause()  onStop()
  • 9.  Fragments laid out as part of Layouts<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> <fragment android:name="" android:id="@+id/list" android:layout_weight="1" android:layout_width="0dp" android:layout_height="match_parent" /> <fragment android:name="" android:id="@+id/viewer" android:layout_weight="2" android:layout_width="0dp" android:layout_height="match_parent" /> </LinearLayout>
  • 10.  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
  • 11.  FragmentTransaction Fragment newFragment = new ExampleFragment(); FragmentTransaction transaction = getFragmentManager().beginTransaction(); transaction.replace(, newFragmen t); transaction.addToBackStack(null); transaction.commit();
  • 12.  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.
  • 13.  Moving MenuItems to the ActionBar<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="" > <item android:id="@+id/menu_add" android:icon="@drawable/ic_menu_save" android:title="@string/menu_save" android:showAsAction="ifRoom|withText" /> </menu>
  • 14.  Custom Views in ActionBar<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android=" 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>
  • 15.  Custom Views in ActionBar (cont)SearchView searchView = (SearchView) menu.findItem( ();
  • 16.  Navigation  Big win over iOS! Implicit “Home” widget (vs iOS Nav Bar) App Global Tabs (vs iOS Tool Bar) App List Navigation
  • 17.  Getting the “Home” icon viewView home = a.findViewById(;home.setOnClickListener(new OnClickListener() { public void onClick(View arg0) { a.finish(); }}); Adding “Up” markerActionBar actionBar = this.getActionBar();actionBar.setDisplayHomeAsUpEnabled(true);
  • 18.  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)));
  • 19.  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){ //… } });
  • 20.  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(, getDialogPendingIntent( "You pressed it!"));
  • 21. 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); }
  • 22. 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.
  • 23.  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.
  • 24.  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!
  • 25.  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
  • 26.  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.
  • 27.  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.
  • 28.  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)
  • 29.  Activation/Deactivation  Step 1: Add… android:hardwareAccelerated="true|false“ …to your <application> or <activity>  Step 2: Profit!
  • 30.  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();
  • 31.  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!”
  • 32.  Not even going to get into this. Example from Google: #pragma version(1) #pragma rs java_package_name( 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); }
  • 33.  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
  • 34.  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