Upgrade to Pro — share decks privately, control downloads, hide ads and more …

[Constantine Mars] Android Wear 2.0: Great Changes Upcoming this Fall

[Constantine Mars] Android Wear 2.0: Great Changes Upcoming this Fall

Presentation from GDG DevFest Ukraine 2016.
Learn more at: https://devfest.gdg.org.ua

Google Developers Group Lviv

September 10, 2016
Tweet

More Decks by Google Developers Group Lviv

Other Decks in Technology

Transcript

  1. Android Wear 2.0 Great Changes Upcoming this Fall Constantine Mars

    Organizer @ GDG Dnipro Senior Mobile Developer @ DataArt
  2. #dfua Officially supported watches LG Watch Urbane 2nd Edition Huawei

    Watch Display: 1.4 inches, 400 x 400 pixels (~286 ppi) CPU:Quad-core 1.2 GHz Cortex-A7 GPU: Adreno 305, Chipset: Qualcomm Snapdragon 400 Memory: 4 GB, 512 MB RAM Comm: Wi-Fi 802.11 b/g, Bluetooth v4.1 LE Network: No cellular connectivity Battery: 300 mAh (48h) Display: 1.38 inches, 480 x 480 pixels (~348 ppi) CPU: Quad-core 1.2 GHz Cortex-A7 GPU: Adreno 305, Chipset: Qualcomm Snapdragon 400 Memory: 4 GB, 768 MB RAM Comm: Wi-Fi 802.11 b/g, Bluetooth v4.1 LE, GPS, NFC Network: GSM, HSPA, LTE Battery: 570 mAh (60h)
  3. #dfua Complications “any feature in a timepiece beyond the simple

    display of hours and minutes” (Wikipedia)
  4. #dfua Complication types -Short text -Long text -Range of values

    -Icon (small picture) -Image (big picture)
  5. #dfua Each position need to be identified 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}; Complication ID
  6. #dfua Each position must be mapped with array of supported

    types // Left and right dial supported types. public static final int[][] COMPLICATION_SUPPORTED_TYPES = { {ComplicationData.TYPE_SHORT_TEXT}, {ComplicationData.TYPE_SHORT_TEXT} }; Complication supported types
  7. #dfua Data Providers and system trigger .onComplicationDataUpdate() sometimes /* Called

    when there is updated data for a complication id. */ @Override public void onComplicationDataUpdate( int complicationId, ComplicationData complicationData) { Log.d(TAG, "onComplicationDataUpdate() id: " + complicationId); mActiveComplicationDataSparseArray.put(complicationId, complicationData); invalidate(); } ComplicationData receiving
  8. #dfua .onDraw() is the moment of drawing. ComplicationData where stored

    earlier @Override public void onDraw(Canvas canvas, Rect bounds) { ComplicationData complicationData; for (int i = 0; i < COMPLICATION_IDS.length; i++) { complicationData = mActiveComplicationDataSparseArray .get(COMPLICATION_IDS[i]); // ... Complications rendering
  9. #dfua Complication may be deactivated or contain wrong data type

    if ((complicationData != null) && (complicationData.isActive(currentTimeMillis)) && (complicationData.getType() == ComplicationData.TYPE_SHORT_TEXT)) { ComplicationText mainText = complicationData.getShortText(); CharSequence complicationMessage = mainText.getText(getApplicationContext(), currentTimeMillis); Complications rendering
  10. #dfua @Override public void onComplicationActivated( int complicationId, int dataType, ComplicationManager

    complicationManager) { … } @Override public void onComplicationUpdate( int complicationId, int dataType, ComplicationManager complicationManager) { … } @Override public void onComplicationDeactivated(int complicationId) { … } Data Provider methods
  11. #dfua @Override public void onComplicationUpdate(int complicationId, int dataType, ComplicationManager complicationManager)

    { // Retrieve or generate your data int randomNumber = (int) Math.floor(Math.random() * 10); String randomNumberText = String.format(Locale.getDefault(), "%d!", randomNumber); Exposing data to complications Called according to update period time
  12. #dfua ComplicationData complicationData = null; switch (dataType) { case ComplicationData.TYPE_SHORT_TEXT:

    complicationData = new ComplicationData.Builder( ComplicationData.TYPE_SHORT_TEXT) .setShortText(ComplicationText.plainText(randomNumberText)) .build(); break; Exposing data to complications
  13. #dfua @Override public void onComplicationUpdate( int complicationId, int dataType, ComplicationManager

    complicationManager) { … if (complicationData != null) { complicationManager.updateComplicationData( complicationId, complicationData); } Exposing data to complications
  14. #dfua Notification noti = new NotificationCompat.Builder() .setContentTitle(messages.length + " new

    messages with " + sender) .setContentText("subject") .setSmallIcon(R.drawable.new_message) // 2) set the style to MessagingStyle .setStyle(new NotificationCompat.MessagingStyle( getResources().getString(R.string.reply_name)) .addMessage(messages[0]) .addMessage(messages[1]); Notifications with modern MessagingStyle set MessagingStyle
  15. #dfua Wait, a Keyboard??? LG Watch Urbane 2nd Edition Display:

    1.38 inches, 480 x 480 pixels (~348 ppi) CPU: Quad-core 1.2 GHz Cortex-A7 GPU: Adreno 305, Chipset: Qualcomm Snapdragon 400 Memory: 4 GB, 768 MB RAM Comm: Wi-Fi 802.11 b/g, Bluetooth v4.1, LE, GPS, NFC Network: GSM, HSPA, LTE Battery: 570 mAh (60h) Size x2 bigger than first phones
  16. #dfua Brightness values 1 App color - Default color 2

    Dark background - 15% 3 Lighter background - 30% 4 UI element - 40% 5 Lighter UI element - 65% 6 Accent - 100%