android wear 2.0 - it nonstop dnipro

50
Android Wear 2.0 New level of freedom for your action Докладчик: Constantine Mars Senior Developer @ DataArt, Co-Organizer @ GDG Dnipro +ConstantineMars

Upload: constantine-mars

Post on 17-Jan-2017

59 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Android Wear 2.0 - IT NonStop Dnipro

Android Wear 2.0 New level of freedom for your action

Докладчик: Constantine MarsSenior Developer @ DataArt,Co-Organizer @ GDG Dnipro+ConstantineMars

Page 2: Android Wear 2.0 - IT NonStop Dnipro
Page 3: Android Wear 2.0 - IT NonStop Dnipro

David Singleton, VP Engineering at Google

Page 4: Android Wear 2.0 - IT NonStop Dnipro
Page 5: Android Wear 2.0 - IT NonStop Dnipro

So… What’s coming in Android Wear 2.0?

Page 6: Android Wear 2.0 - IT NonStop Dnipro

Problem No.1: Tethering

Page 7: Android Wear 2.0 - IT NonStop Dnipro

Freedom from tetheringmeans “freedom without phone”

Page 8: Android Wear 2.0 - IT NonStop Dnipro

Officially supported by:● LGE Watch Urbane

2nd Edition● Huawei Watch

Android Wear 2.0 Preview is available for

Page 9: Android Wear 2.0 - IT NonStop Dnipro

Upcoming: access Market directly from watch

Page 10: Android Wear 2.0 - IT NonStop Dnipro

What makes custom Watch Faces different but at the same time similar?

Page 11: Android Wear 2.0 - IT NonStop Dnipro

Complications- “any feature in a timepiece beyond the simple display of hours and

minutes” (Wikipedia)

Page 12: Android Wear 2.0 - IT NonStop Dnipro

● Short text● Long text● Range of values● Icon (small picture)● Image (big picture)

Complication types:

Page 13: Android Wear 2.0 - IT NonStop Dnipro

Complications coding

Page 14: Android Wear 2.0 - IT NonStop Dnipro

Each complication should have unique id

private static final int LEFT_DIAL_COMPLICATION = 0;

private static final int RIGHT_DIAL_COMPLICATION = 1;

public static final int[] COMPLICATION_IDS = {LEFT_DIAL_COMPLICATION, RIGHT_DIAL_COMPLICATION};

// Left and right dial supported types.

public static final int[][] COMPLICATION_SUPPORTED_TYPES = {

{ComplicationData.TYPE_SHORT_TEXT},

{ComplicationData.TYPE_SHORT_TEXT}

};

Page 15: Android Wear 2.0 - IT NonStop Dnipro

ComplicationData type stores complication info (text, icon, type)

onComplicationDataUpdate() is initiated by Data Provider

private SparseArray<ComplicationData> mActiveComplicationDataSparseArray;

@Override

public void onComplicationDataUpdate(

int complicationId, ComplicationData complicationData) {

Log.d(TAG, "onComplicationDataUpdate() id: " + complicationId);

// Adds/updates active complication data in the array.

mActiveComplicationDataSparseArray.put(complicationId, complicationData);

invalidate();

}

Page 16: Android Wear 2.0 - IT NonStop Dnipro

Rendering complications

private void drawComplications(Canvas canvas, long currentTimeMillis) { // onDraw()

for (int i = 0; i < COMPLICATION_IDS.length; i++) {

ComplicationData complicationData = mActiveComplicationDataSparseArray.get(COMPLICATION_IDS[i]);

if ((complicationData != null) && (complicationData.isActive(currentTimeMillis))

&& (complicationData.getType() == ComplicationData.TYPE_SHORT_TEXT)) {

ComplicationText mainText = complicationData.getShortText();

canvas.drawText( mainText, 0, mainText.length(),

complicationsX, mComplicationsY, mComplicationPaint);

Page 17: Android Wear 2.0 - IT NonStop Dnipro

Data Providerswill stand behind the scenes as sources of data for

complications

Page 18: Android Wear 2.0 - IT NonStop Dnipro

One complication may use different providers as the data source

Page 19: Android Wear 2.0 - IT NonStop Dnipro

DataProviders coding

Page 20: Android Wear 2.0 - IT NonStop Dnipro

Extend ComplicationProviderServiceand declare it in AndroidManifest.xml

android.support.wearable.complications.ACTION_COMPLICATION_UPDATE_REQUEST

android:icon

android.support.wearable.complications.UPDATE_PERIOD_SECONDS

android.support.wearable.complications.PROVIDER_CONFIG_ACTION

<meta-data

android:name="android.support.wearable.complications.SUPPORTED_TYPES"

android:value="SHORT_TEXT"/>

Page 21: Android Wear 2.0 - IT NonStop Dnipro

ComplicationProviderServiceinternals

onComplicationActivated()

onComplicationUpdate()

onComplicationDeactivated()

Page 22: Android Wear 2.0 - IT NonStop Dnipro

Exposing data from providerin onComplicationUpdate()

@Override

public void onComplicationUpdate(int complicationId, int dataType, ComplicationManager complicationManager) {

int randomNumber = (int) Math.floor(Math.random() * 10);

String randomNumberText = String.format(Locale.getDefault(), "%d!", randomNumber);

switch (dataType) {

case ComplicationData.TYPE_SHORT_TEXT:

ComplicationData complicationData = new ComplicationData.Builder(ComplicationData.TYPE_SHORT_TEXT)

.setShortText(ComplicationText.plainText(randomNumberText))

.build();

break;

...

Page 23: Android Wear 2.0 - IT NonStop Dnipro

Exposing data from providerTrigger update with ComplicationManager.updateComplicationData()

@Override

public void onComplicationUpdate(int complicationId, int dataType, ComplicationManager complicationManager) {

...

if (complicationData != null) {

complicationManager.updateComplicationData(complicationId, complicationData);

}

Page 24: Android Wear 2.0 - IT NonStop Dnipro

What whas really distracting in AndroidWear 1.X notifications?

White light when you receive notification

Page 25: Android Wear 2.0 - IT NonStop Dnipro

Visual updates to notifications in 2.0Dark theme, Material Design for Android Wear

Page 26: Android Wear 2.0 - IT NonStop Dnipro

Large dark notificationEasier to read, but less-distracting in everyday life

Page 27: Android Wear 2.0 - IT NonStop Dnipro

Notifications and messages

Page 28: Android Wear 2.0 - IT NonStop Dnipro

Notification MessagingStyle

Page 29: Android Wear 2.0 - IT NonStop Dnipro

Allow smart replies, based on Google Assistant

NotificationCompat.Action action =

new NotificationCompat.Action.Builder(R.drawable.ic_reply_icon,

getString(R.string.label), replyPendingIntent)

.addRemoteInput(remoteInput)

// 1) allow generated replies

.setAllowGeneratedReplies(true)

.build();

Page 30: Android Wear 2.0 - IT NonStop Dnipro

Use MessagingStyle for notification

Notification noti = new NotificationCompat.Builder()

.setContentTitle(messages.length + " new messages with " + sender.toString())

.setContentText(subject)

.setSmallIcon(R.drawable.new_message)

.setLargeIcon(aBitmap)

// 2) set the style to MessagingStyle

.setStyle(new NotificationCompat.MessagingStyle(resources.getString(R.string.reply_name))

.addMessage(messages[0].getText(), messages[0].getTime(), messages[0].getSender())

.addMessage(messages[1].getText(), messages[1].getTime(), messages[1].getSender()))

Page 31: Android Wear 2.0 - IT NonStop Dnipro

Response to notifications in AndroidWear 1.X“Voice input”

Page 32: Android Wear 2.0 - IT NonStop Dnipro

More input methodsHandwriting, suggestions, keyboard

Page 33: Android Wear 2.0 - IT NonStop Dnipro

1.38-inch full circle P-OLED480 x 480348ppi

How full-size keyboard works on the small screen?

Page 34: Android Wear 2.0 - IT NonStop Dnipro

“Magic button” - center of navigation concepts

Page 35: Android Wear 2.0 - IT NonStop Dnipro

The most complicated UI pattern of AndroidWear 1.X?- “2D Picker”

Page 36: Android Wear 2.0 - IT NonStop Dnipro

The answer to this problem in AndroidWear 2- Recommended pattern is “1D Layouts”

Page 37: Android Wear 2.0 - IT NonStop Dnipro

App Layout examples

Page 38: Android Wear 2.0 - IT NonStop Dnipro

Material Design: Navigation and Action Drawers

Page 39: Android Wear 2.0 - IT NonStop Dnipro

WearableDrawerLayoutand it’s internals

<android.support.wearable.view.drawer.WearableDrawerLayout

...>

<FrameLayout

.../>

<android.support.wearable.view.drawer.WearableNavigationDrawer

.../>

<android.support.wearable.view.drawer.WearableActionDrawer

.../>

</android.support.wearable.view.drawer.WearableDrawerLayout>

Page 40: Android Wear 2.0 - IT NonStop Dnipro

Material Design: Navigation and Action Drawers

Page 41: Android Wear 2.0 - IT NonStop Dnipro

Material Design: Dark Theme

Page 42: Android Wear 2.0 - IT NonStop Dnipro

Android Wear Area at Google I/O

Page 43: Android Wear 2.0 - IT NonStop Dnipro

GoogleFit infrastructure

Page 44: Android Wear 2.0 - IT NonStop Dnipro

Well known GoogleFit APIs

Page 45: Android Wear 2.0 - IT NonStop Dnipro

GoogleFit: upcoming APIs

Page 46: Android Wear 2.0 - IT NonStop Dnipro

GoogleFit: upcoming features of existing APIs

Page 47: Android Wear 2.0 - IT NonStop Dnipro

GoogleFit - gym activity recognition

Page 48: Android Wear 2.0 - IT NonStop Dnipro

GoogleFit live demo on Google I/O

Page 49: Android Wear 2.0 - IT NonStop Dnipro

Activity recognition accuracy

Page 50: Android Wear 2.0 - IT NonStop Dnipro

Thank [email protected]

Bring The Action!and it’s only beginning of IT NonStop ;)