Advertisement
Guest User

Untitled

a guest
Feb 8th, 2015
254
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.00 KB | None | 0 0
  1. package com.psksoft.watchphone.viewmodels;
  2.  
  3. import android.os.Bundle;
  4. import android.util.Log;
  5.  
  6. import com.google.android.gms.common.ConnectionResult;
  7. import com.google.android.gms.common.api.GoogleApiClient;
  8. import com.google.android.gms.common.api.PendingResult;
  9. import com.google.android.gms.common.api.ResultCallback;
  10. import com.google.android.gms.wearable.Asset;
  11. import com.google.android.gms.wearable.DataApi;
  12. import com.google.android.gms.wearable.DataEvent;
  13. import com.google.android.gms.wearable.DataEventBuffer;
  14. import com.google.android.gms.wearable.DataItem;
  15. import com.google.android.gms.wearable.DataItemBuffer;
  16. import com.google.android.gms.wearable.DataMap;
  17. import com.google.android.gms.wearable.DataMapItem;
  18. import com.google.android.gms.wearable.Wearable;
  19. import com.psksoft.commonlib.activities.IActivityViewModel;
  20. import com.psksoft.commonlib.models.MessageNames;
  21. import com.psksoft.commonlib.services.ActivityServices;
  22. import com.psksoft.commonlib.services.WearableCommunicationService;
  23. import com.psksoft.watchphone.models.Contact;
  24. import com.psksoft.watchphone.services.WearMessageListenerService;
  25.  
  26. import org.json.JSONArray;
  27. import org.json.JSONObject;
  28. import org.robobinding.annotation.ItemPresentationModel;
  29. import org.robobinding.presentationmodel.HasPresentationModelChangeSupport;
  30. import org.robobinding.presentationmodel.PresentationModelChangeSupport;
  31.  
  32. import java.io.ByteArrayOutputStream;
  33. import java.io.InputStream;
  34. import java.util.ArrayList;
  35. import java.util.List;
  36. import java.util.concurrent.TimeUnit;
  37.  
  38. @org.robobinding.annotation.PresentationModel
  39. public class ContactsActivityViewModel implements IActivityViewModel,
  40.         HasPresentationModelChangeSupport,
  41.         DataApi.DataListener,
  42.         GoogleApiClient.ConnectionCallbacks,
  43.         GoogleApiClient.OnConnectionFailedListener {
  44.     ActivityServices _ActivityServices;
  45.     PresentationModelChangeSupport _ChangeNotify;
  46.     WearableCommunicationService _WearableCommunicationService;
  47.     WearMessageListenerService _WearMessageListenerService;
  48.     List<Contact> _Contacts;
  49.     private GoogleApiClient mGoogleApiClient;
  50.  
  51.     public ContactsActivityViewModel(ActivityServices activityServices, WearableCommunicationService wearableCommunicationService, WearMessageListenerService wearMessageListenerService) {
  52.         _ActivityServices = activityServices;
  53.         _ChangeNotify = new PresentationModelChangeSupport(this);
  54.         _WearableCommunicationService = wearableCommunicationService;
  55.         _Contacts = new ArrayList<Contact>();
  56.  
  57.         _WearMessageListenerService = wearMessageListenerService;
  58.     }
  59.  
  60.     @ItemPresentationModel(ContactItemViewModel.class)
  61.     public List<Contact> getContacts() {
  62.         return _Contacts;
  63.     }
  64.  
  65.     public void setContacts(List<Contact> value) {
  66.         _Contacts = value;
  67.     }
  68.  
  69.     public void clickContact() {
  70.     }
  71.  
  72.     @Override
  73.     public PresentationModelChangeSupport getPresentationModelChangeSupport() {
  74.         return _ChangeNotify;
  75.     }
  76.  
  77.     @Override
  78.     public void onConnected(Bundle bundle) {
  79.         _WearableCommunicationService.sendMessage(MessageNames.RequestContacts, "");
  80.  
  81.         PendingResult<DataItemBuffer> results = Wearable.DataApi.getDataItems(mGoogleApiClient);
  82.         results.setResultCallback(new ResultCallback<DataItemBuffer>() {
  83.             @Override
  84.             public void onResult(DataItemBuffer dataItems) {
  85.                 if (dataItems.getCount() != 0) {
  86.                     DataItem dataItem = dataItems.get(0);
  87.                     readContactsFromDataItem(dataItem);
  88.                 }
  89.  
  90.                 dataItems.release();
  91.             }
  92.         });
  93.     }
  94.  
  95.     @Override
  96.     public void onConnectionSuspended(int i) {
  97.     }
  98.  
  99.     private void readContactsFromDataItem(DataItem dataItem) {
  100.         if (dataItem.getUri().getPath().equals("/wear_phone/contacts")) {
  101.             DataMap dataMap = DataMapItem.fromDataItem(dataItem).getDataMap();
  102.             Asset asset = dataMap.getAsset("contacts");
  103.             if (!mGoogleApiClient.isConnected()) {
  104.                 ConnectionResult result = mGoogleApiClient.blockingConnect(10000, TimeUnit.MILLISECONDS);
  105.                 if (!result.isSuccess()) {
  106.                     Log.w("watch phone", "Can not connect to Google Api");
  107.                     return;
  108.                 }
  109.             }
  110.  
  111.             PendingResult<DataApi.GetFdForAssetResult> pendingResult = Wearable.DataApi.getFdForAsset(mGoogleApiClient, asset);
  112.             pendingResult.setResultCallback(new ResultCallback<DataApi.GetFdForAssetResult>() {
  113.                 @Override
  114.                 public void onResult(DataApi.GetFdForAssetResult result) {
  115.                     String json = "";
  116.  
  117.                     InputStream assetInputStream = result.getInputStream();
  118.                     byte[] buffer = new byte[1024];
  119.                     try {
  120.                         ByteArrayOutputStream mem = new ByteArrayOutputStream();
  121.                         int cnt = assetInputStream.read(buffer, 0, buffer.length);
  122.                         if (cnt > 0) {
  123.                             mem.write(buffer, 0, cnt);
  124.                             while (cnt == buffer.length) {
  125.                                 try {
  126.                                     cnt = assetInputStream.read(buffer, 0, buffer.length);
  127.                                     mem.write(buffer, 0, cnt);
  128.                                 } catch (Exception ex) {
  129.                                     Log.e("watch phone", ex.getMessage());
  130.                                 }
  131.                             }
  132.                         }
  133.  
  134.                         json = new String(mem.toByteArray(), "UTF-8");
  135.                     } catch (Exception ex) {
  136.                         Log.e("watch phone", ex.getMessage());
  137.                     }
  138.  
  139.                     _Contacts = new ArrayList<Contact>();
  140.                     try {
  141.                         JSONArray jContacts = new JSONArray(json);
  142.                         for (int i = 0; i < jContacts.length(); i++) {
  143.                             JSONObject jContact = jContacts.getJSONObject(i);
  144.                             Contact contact = new Contact();
  145.                             contact.setDisplayName(jContact.getString("name"));
  146.                             _Contacts.add(contact);
  147.                         }
  148.                     } catch (Exception ex) {
  149.                         Log.e("watch phone - deserializing json contacts", ex.getMessage());
  150.                     }
  151.  
  152.                     try {
  153.                         _ChangeNotify.firePropertyChange("Contacts");
  154.                     }catch(Exception ex){
  155.                         Log.e("watch phone", ex.getMessage());
  156.                     }
  157.                 }
  158.             });
  159.         }
  160.     }
  161.  
  162.     @Override
  163.     public void onDataChanged(DataEventBuffer dataEvents) {
  164.         for (DataEvent event : dataEvents) {
  165.             if (event.getType() == DataEvent.TYPE_CHANGED) {
  166.                 DataItem dataItem = event.getDataItem();
  167.                 readContactsFromDataItem(dataItem);
  168.             } else if (event.getType() == DataEvent.TYPE_DELETED) {
  169.             }
  170.         }
  171.     }
  172.  
  173.     @Override
  174.     public void onConnectionFailed(ConnectionResult connectionResult) {
  175.     }
  176.  
  177.     @Override
  178.     public void onStart() {
  179.  
  180.     }
  181.  
  182.     @Override
  183.     public void onRestart() {
  184.  
  185.     }
  186.  
  187.     @Override
  188.     public void onResume() {
  189.         Wearable.DataApi.addListener(mGoogleApiClient, this);
  190.         mGoogleApiClient.connect();
  191.     }
  192.  
  193.     @Override
  194.     public void onCreate(Bundle savedInstanceState) {
  195.         mGoogleApiClient = new GoogleApiClient.Builder(_ActivityServices.getAppication())
  196.                 .addApi(Wearable.API)
  197.                 .addConnectionCallbacks(this)
  198.                 .addOnConnectionFailedListener(this)
  199.                 .build();
  200.     }
  201.  
  202.     @Override
  203.     public void onPause() {
  204.         Wearable.DataApi.removeListener(mGoogleApiClient, this);
  205.         mGoogleApiClient.disconnect();
  206.     }
  207.  
  208.     @Override
  209.     public void onStop() {
  210.     }
  211. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement