package com.ToxicBakery.lollipop; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.os.Handler; import android.support.wearable.view.WatchViewStub; import android.widget.ImageView; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.api.GoogleApiClient; import com.google.android.gms.common.data.FreezableUtils; import com.google.android.gms.wearable.Asset; import com.google.android.gms.wearable.DataApi; import com.google.android.gms.wearable.DataEvent; import com.google.android.gms.wearable.DataEventBuffer; import com.google.android.gms.wearable.DataMapItem; import com.google.android.gms.wearable.Wearable; import java.io.InputStream; import java.util.List; public class DemoWearActivity extends Activity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, DataApi.DataListener { private static final String IMAGE_PATH = "/image"; private static final String IMAGE_KEY = "photo"; private ImageView imageView; private GoogleApiClient googleApiClient; private Handler handler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_demo_wear); final WatchViewStub stub = (WatchViewStub) findViewById(R.id.watch_view_stub); stub.setOnLayoutInflatedListener(new WatchViewStub.OnLayoutInflatedListener() { @Override public void onLayoutInflated(WatchViewStub stub) { imageView = (ImageView) stub.findViewById(R.id.imageview); } }); handler = new Handler(); googleApiClient = new GoogleApiClient.Builder(this) .addApi(Wearable.API) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .build(); } @Override protected void onResume() { super.onResume(); googleApiClient.connect(); } @Override protected void onPause() { super.onPause(); Wearable.DataApi.removeListener(googleApiClient, this); googleApiClient.disconnect(); } @Override public void onConnected(Bundle bundle) { Wearable.DataApi.addListener(googleApiClient, this); } @Override public void onConnectionSuspended(int i) { } @Override public void onDataChanged(DataEventBuffer dataEvents) { final List<DataEvent> events = FreezableUtils.freezeIterable(dataEvents); dataEvents.close(); for (DataEvent event : events) { if (event.getType() == DataEvent.TYPE_CHANGED) { String path = event.getDataItem().getUri().getPath(); if (IMAGE_PATH.equals(path)) { DataMapItem dataMapItem = DataMapItem.fromDataItem(event.getDataItem()); Asset photo = dataMapItem.getDataMap() .getAsset(IMAGE_KEY); final Bitmap bitmap = loadBitmapFromAsset(googleApiClient, photo); handler.post(new Runnable() { @Override public void run() { imageView.setImageBitmap(bitmap); } }); } } } } @Override public void onConnectionFailed(ConnectionResult connectionResult) { } /** * Extracts {@link android.graphics.Bitmap} data from the {@link com.google.android.gms.wearable.Asset} */ private Bitmap loadBitmapFromAsset(GoogleApiClient apiClient, Asset asset) { if (asset == null) { throw new IllegalArgumentException("Asset must be non-null"); } InputStream assetInputStream = Wearable.DataApi.getFdForAsset( apiClient, asset).await().getInputStream(); if (assetInputStream == null) { return null; } return BitmapFactory.decodeStream(assetInputStream); } }