Home | History | Annotate | Download | only in client
      1 /*
      2  * Copyright (C) 2010 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
      5  * use this file except in compliance with the License. You may obtain a copy of
      6  * the License at
      7  *
      8  * http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
     12  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
     13  * License for the specific language governing permissions and limitations under
     14  * the License.
     15  */
     16 package com.example.android.samplesync.client;
     17 
     18 import android.text.TextUtils;
     19 import android.util.Log;
     20 
     21 import org.json.JSONObject;
     22 import org.json.JSONException;
     23 
     24 import java.lang.StringBuilder;
     25 
     26 /**
     27  * Represents a low-level contacts RawContact - or at least
     28  * the fields of the RawContact that we care about.
     29  */
     30 final public class RawContact {
     31 
     32     /** The tag used to log to adb console. **/
     33     private static final String TAG = "RawContact";
     34 
     35     private final String mUserName;
     36 
     37     private final String mFullName;
     38 
     39     private final String mFirstName;
     40 
     41     private final String mLastName;
     42 
     43     private final String mCellPhone;
     44 
     45     private final String mOfficePhone;
     46 
     47     private final String mHomePhone;
     48 
     49     private final String mEmail;
     50 
     51     private final String mStatus;
     52 
     53     private final String mAvatarUrl;
     54 
     55     private final boolean mDeleted;
     56 
     57     private final boolean mDirty;
     58 
     59     private final long mServerContactId;
     60 
     61     private final long mRawContactId;
     62 
     63     private final long mSyncState;
     64 
     65     public long getServerContactId() {
     66         return mServerContactId;
     67     }
     68 
     69     public long getRawContactId() {
     70         return mRawContactId;
     71     }
     72 
     73     public String getUserName() {
     74         return mUserName;
     75     }
     76 
     77     public String getFirstName() {
     78         return mFirstName;
     79     }
     80 
     81     public String getLastName() {
     82         return mLastName;
     83     }
     84 
     85     public String getFullName() {
     86         return mFullName;
     87     }
     88 
     89     public String getCellPhone() {
     90         return mCellPhone;
     91     }
     92 
     93     public String getOfficePhone() {
     94         return mOfficePhone;
     95     }
     96 
     97     public String getHomePhone() {
     98         return mHomePhone;
     99     }
    100 
    101     public String getEmail() {
    102         return mEmail;
    103     }
    104 
    105     public String getStatus() {
    106         return mStatus;
    107     }
    108 
    109     public String getAvatarUrl() {
    110         return mAvatarUrl;
    111     }
    112 
    113     public boolean isDeleted() {
    114         return mDeleted;
    115     }
    116 
    117     public boolean isDirty() {
    118         return mDirty;
    119     }
    120 
    121     public long getSyncState() {
    122         return mSyncState;
    123     }
    124 
    125     public String getBestName() {
    126         if (!TextUtils.isEmpty(mFullName)) {
    127             return mFullName;
    128         } else if (TextUtils.isEmpty(mFirstName)) {
    129             return mLastName;
    130         } else {
    131             return mFirstName;
    132         }
    133     }
    134 
    135     /**
    136      * Convert the RawContact object into a JSON string.  From the
    137      * JSONString interface.
    138      * @return a JSON string representation of the object
    139      */
    140     public JSONObject toJSONObject() {
    141         JSONObject json = new JSONObject();
    142 
    143         try {
    144             if (!TextUtils.isEmpty(mFirstName)) {
    145                 json.put("f", mFirstName);
    146             }
    147             if (!TextUtils.isEmpty(mLastName)) {
    148                 json.put("l", mLastName);
    149             }
    150             if (!TextUtils.isEmpty(mCellPhone)) {
    151                 json.put("m", mCellPhone);
    152             }
    153             if (!TextUtils.isEmpty(mOfficePhone)) {
    154                 json.put("o", mOfficePhone);
    155             }
    156             if (!TextUtils.isEmpty(mHomePhone)) {
    157                 json.put("h", mHomePhone);
    158             }
    159             if (!TextUtils.isEmpty(mEmail)) {
    160                 json.put("e", mEmail);
    161             }
    162             if (mServerContactId > 0) {
    163                 json.put("i", mServerContactId);
    164             }
    165             if (mRawContactId > 0) {
    166                 json.put("c", mRawContactId);
    167             }
    168             if (mDeleted) {
    169                 json.put("d", mDeleted);
    170             }
    171         } catch (final Exception ex) {
    172             Log.i(TAG, "Error converting RawContact to JSONObject" + ex.toString());
    173         }
    174 
    175         return json;
    176     }
    177 
    178     public RawContact(String name, String fullName, String firstName, String lastName,
    179             String cellPhone, String officePhone, String homePhone, String email,
    180             String status, String avatarUrl, boolean deleted, long serverContactId,
    181             long rawContactId, long syncState, boolean dirty) {
    182         mUserName = name;
    183         mFullName = fullName;
    184         mFirstName = firstName;
    185         mLastName = lastName;
    186         mCellPhone = cellPhone;
    187         mOfficePhone = officePhone;
    188         mHomePhone = homePhone;
    189         mEmail = email;
    190         mStatus = status;
    191         mAvatarUrl = avatarUrl;
    192         mDeleted = deleted;
    193         mServerContactId = serverContactId;
    194         mRawContactId = rawContactId;
    195         mSyncState = syncState;
    196         mDirty = dirty;
    197     }
    198 
    199     /**
    200      * Creates and returns an instance of the RawContact from the provided JSON data.
    201      *
    202      * @param user The JSONObject containing user data
    203      * @return user The new instance of Sample RawContact created from the JSON data.
    204      */
    205     public static RawContact valueOf(JSONObject contact) {
    206 
    207         try {
    208             final String userName = !contact.isNull("u") ? contact.getString("u") : null;
    209             final int serverContactId = !contact.isNull("i") ? contact.getInt("i") : -1;
    210             // If we didn't get either a username or serverId for the contact, then
    211             // we can't do anything with it locally...
    212             if ((userName == null) && (serverContactId <= 0)) {
    213                 throw new JSONException("JSON contact missing required 'u' or 'i' fields");
    214             }
    215 
    216             final int rawContactId = !contact.isNull("c") ? contact.getInt("c") : -1;
    217             final String firstName = !contact.isNull("f")  ? contact.getString("f") : null;
    218             final String lastName = !contact.isNull("l") ? contact.getString("l") : null;
    219             final String cellPhone = !contact.isNull("m") ? contact.getString("m") : null;
    220             final String officePhone = !contact.isNull("o") ? contact.getString("o") : null;
    221             final String homePhone = !contact.isNull("h") ? contact.getString("h") : null;
    222             final String email = !contact.isNull("e") ? contact.getString("e") : null;
    223             final String status = !contact.isNull("s") ? contact.getString("s") : null;
    224             final String avatarUrl = !contact.isNull("a") ? contact.getString("a") : null;
    225             final boolean deleted = !contact.isNull("d") ? contact.getBoolean("d") : false;
    226             final long syncState = !contact.isNull("x") ? contact.getLong("x") : 0;
    227             return new RawContact(userName, null, firstName, lastName, cellPhone,
    228                     officePhone, homePhone, email, status, avatarUrl, deleted,
    229                     serverContactId, rawContactId, syncState, false);
    230         } catch (final Exception ex) {
    231             Log.i(TAG, "Error parsing JSON contact object" + ex.toString());
    232         }
    233         return null;
    234     }
    235 
    236     /**
    237      * Creates and returns RawContact instance from all the supplied parameters.
    238      */
    239     public static RawContact create(String fullName, String firstName, String lastName,
    240             String cellPhone, String officePhone, String homePhone,
    241             String email, String status, boolean deleted, long rawContactId,
    242             long serverContactId) {
    243         return new RawContact(null, fullName, firstName, lastName, cellPhone, officePhone,
    244                 homePhone, email, status, null, deleted, serverContactId, rawContactId,
    245                 -1, true);
    246     }
    247 
    248     /**
    249      * Creates and returns a User instance that represents a deleted user.
    250      * Since the user is deleted, all we need are the client/server IDs.
    251      * @param clientUserId The client-side ID for the contact
    252      * @param serverUserId The server-side ID for the contact
    253      * @return a minimal User object representing the deleted contact.
    254      */
    255     public static RawContact createDeletedContact(long rawContactId, long serverContactId)
    256     {
    257         return new RawContact(null, null, null, null, null, null, null,
    258                 null, null, null, true, serverContactId, rawContactId, -1, true);
    259     }
    260 }
    261