Android 3
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Android 3

on

  • 1,246 views

What's new in Android 3.0 Honeycomb

What's new in Android 3.0 Honeycomb

Statistics

Views

Total Views
1,246
Views on SlideShare
1,246
Embed Views
0

Actions

Likes
0
Downloads
13
Comments
0

0 Embeds 0

No embeds

Accessibility

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Android 3 Presentation Transcript

  • 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="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>
  • 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(R.id.fragment_container, 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="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>
  • 14.  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>
  • 15.  Custom Views in ActionBar (cont)SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView ();
  • 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(android.R.id.home);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( R.id.my_button, 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(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); }
  • 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