package org.openintents.shopping.wear; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.ServiceConnection; import android.os.Bundle; import android.os.IBinder; import android.support.v4.content.LocalBroadcastManager; import android.support.wearable.view.WearableListView; import android.text.TextUtils; import android.util.Log; import android.widget.TextView; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.api.GoogleApiClient; import com.google.android.gms.common.api.ResultCallback; import com.google.android.gms.wearable.DataItem; import com.google.android.gms.wearable.DataItemBuffer; import com.google.android.gms.wearable.DataMap; import com.google.android.gms.wearable.DataMapItem; import com.google.android.gms.wearable.PutDataRequest; import com.google.android.gms.wearable.Wearable; import org.openintents.shopping.R; import org.openintents.shopping.library.provider.ShoppingContract; import java.util.ArrayList; import java.util.List; public class ShoppingActivity extends Activity implements ServiceConnection, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, ResultCallback<DataItemBuffer> { public static final String EXTRA_LIST_ID = "EXTRA_LIST_ID"; private static final String TAG = "ShoppintListActivity"; private TextView mTextView; private ShoppingWearableListenerService mService; private com.google.android.gms.common.api.GoogleApiClient mGoogleApiClient; private ShoppingDataItemAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_shopping); final WearableListView listView = (WearableListView) findViewById(R.id.shopping_list); adapter = new ShoppingDataItemAdapter(this); listView.setAdapter(adapter); listView.setClickListener(new WearableListView.ClickListener() { @Override public void onClick(WearableListView.ViewHolder viewHolder) { long itemId = viewHolder.getItemId(); Log.d(TAG, "id: " + viewHolder.getItemId()); int position = viewHolder.getPosition(); DataItem item = adapter.getItem(position); Log.d(TAG, "id: " + DataMapItem.fromDataItem(item).getDataMap().getString(ShoppingContract.ContainsFull.ITEM_NAME)); Log.d(TAG, "url:" + item.getUri().toString()); toggleShoppingItem(position, itemId); } @Override public void onTopEmptyRegionClick() { } }); registerLocalNewDataReceiver(); mGoogleApiClient = new GoogleApiClient.Builder(this) .addApi(Wearable.API) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .build(); mGoogleApiClient.connect(); } private void toggleShoppingItem(int position, long itemId) { PutDataRequest request; //Wearable.DataApi.putDataItem(mGoogleApiClient, request); adapter.remove(position); } private void registerLocalNewDataReceiver() { IntentFilter intentFilter = new IntentFilter("new_data"); LocalBroadcastManager.getInstance(this).registerReceiver(new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { byte[] items = intent.getByteArrayExtra("data"); } }, intentFilter); } @Override protected void onResume() { super.onResume(); if (mGoogleApiClient.isConnected()){ loadItems(); } } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); } @Override public void onServiceConnected(ComponentName name, IBinder service) { mService = (ShoppingWearableListenerService) service; } @Override public void onServiceDisconnected(ComponentName name) { mService = null; } @Override public void onConnected(Bundle bundle) { loadItems(); } private void loadItems() { Wearable.DataApi.getDataItems(mGoogleApiClient).setResultCallback(this); } @Override public void onConnectionSuspended(int i) { } @Override public void onConnectionFailed(ConnectionResult connectionResult) { } @Override public void onResult(DataItemBuffer dataItemBuffer) { List<DataItem> items = new ArrayList<DataItem>(); String listPrefix = "/" + getListId() + "/"; for (int i=0; i< dataItemBuffer.getCount(); i++){ DataItem item = dataItemBuffer.get(i); if (item.getUri().getPath().startsWith(listPrefix)){ DataMap mapItem = DataMapItem.fromDataItem(item).getDataMap(); String name = mapItem.getString(ShoppingContract.ContainsFull.ITEM_NAME); if (!TextUtils.isEmpty(name)) { items.add(item); } } } adapter.setItems(items); } private String getListId() { return getIntent().getStringExtra(EXTRA_LIST_ID); } }