145f283443d645cb7f321b1a0f3eaf28407b699ccJan Berkelpackage com.xtremelabs.robolectric.shadows; 245f283443d645cb7f321b1a0f3eaf28407b699ccJan Berkel 345f283443d645cb7f321b1a0f3eaf28407b699ccJan Berkelimport android.accounts.Account; 445f283443d645cb7f321b1a0f3eaf28407b699ccJan Berkelimport android.os.Parcel; 5064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogenimport android.os.Parcelable.Creator; 645f283443d645cb7f321b1a0f3eaf28407b699ccJan Berkelimport android.text.TextUtils; 7064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 8fb82eae187c0cdff8efd2d93209e775cd0ed6a39Jon Boekenoogenimport com.xtremelabs.robolectric.Robolectric; 945f283443d645cb7f321b1a0f3eaf28407b699ccJan Berkelimport com.xtremelabs.robolectric.internal.Implementation; 1045f283443d645cb7f321b1a0f3eaf28407b699ccJan Berkelimport com.xtremelabs.robolectric.internal.Implements; 1145f283443d645cb7f321b1a0f3eaf28407b699ccJan Berkelimport com.xtremelabs.robolectric.internal.RealObject; 1245f283443d645cb7f321b1a0f3eaf28407b699ccJan Berkel 1345f283443d645cb7f321b1a0f3eaf28407b699ccJan Berkelimport java.lang.reflect.Field; 1445f283443d645cb7f321b1a0f3eaf28407b699ccJan Berkel 1545f283443d645cb7f321b1a0f3eaf28407b699ccJan Berkel@Implements(Account.class) 1645f283443d645cb7f321b1a0f3eaf28407b699ccJan Berkelpublic class ShadowAccount { 1745f283443d645cb7f321b1a0f3eaf28407b699ccJan Berkel @RealObject 1845f283443d645cb7f321b1a0f3eaf28407b699ccJan Berkel private Account realObject; 1945f283443d645cb7f321b1a0f3eaf28407b699ccJan Berkel 2045f283443d645cb7f321b1a0f3eaf28407b699ccJan Berkel public void __constructor__(String name, String type) throws Exception { 2145f283443d645cb7f321b1a0f3eaf28407b699ccJan Berkel set(name, type); 2245f283443d645cb7f321b1a0f3eaf28407b699ccJan Berkel } 2345f283443d645cb7f321b1a0f3eaf28407b699ccJan Berkel 2445f283443d645cb7f321b1a0f3eaf28407b699ccJan Berkel public void __constructor__(Parcel parcel) throws Exception { 2545f283443d645cb7f321b1a0f3eaf28407b699ccJan Berkel set(parcel.readString(), parcel.readString()); 2645f283443d645cb7f321b1a0f3eaf28407b699ccJan Berkel } 2745f283443d645cb7f321b1a0f3eaf28407b699ccJan Berkel 28064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen @Override 2945f283443d645cb7f321b1a0f3eaf28407b699ccJan Berkel @Implementation 3045f283443d645cb7f321b1a0f3eaf28407b699ccJan Berkel public String toString() { 3145f283443d645cb7f321b1a0f3eaf28407b699ccJan Berkel return "Account {name=" + realObject.name + ", type=" + realObject.type + "}"; 3245f283443d645cb7f321b1a0f3eaf28407b699ccJan Berkel } 3345f283443d645cb7f321b1a0f3eaf28407b699ccJan Berkel 34064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen @Implementation 35064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen public void writeToParcel(Parcel dest, int flags) { 36064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen dest.writeString(realObject.name); 37064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen dest.writeString(realObject.type); 38064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } 39064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 40064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen public static final Creator<Account> CREATOR = 41064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen new Creator<Account>() { 42064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen @Override 43064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen public Account createFromParcel(Parcel source) { 44064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen return new Account(source); 45064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } 46064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 47064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen @Override 48064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen public Account[] newArray(int size) { 49064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen return new Account[size]; 50064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } 51064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen }; 52064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 5345f283443d645cb7f321b1a0f3eaf28407b699ccJan Berkel private void set(String name, String type) throws Exception { 5445f283443d645cb7f321b1a0f3eaf28407b699ccJan Berkel if (TextUtils.isEmpty(name) || TextUtils.isEmpty(type)) throw new IllegalArgumentException(); 5545f283443d645cb7f321b1a0f3eaf28407b699ccJan Berkel 5645f283443d645cb7f321b1a0f3eaf28407b699ccJan Berkel Field nameF = realObject.getClass().getField("name"); 5745f283443d645cb7f321b1a0f3eaf28407b699ccJan Berkel nameF.setAccessible(true); 5845f283443d645cb7f321b1a0f3eaf28407b699ccJan Berkel nameF.set(realObject, name); 5945f283443d645cb7f321b1a0f3eaf28407b699ccJan Berkel 6045f283443d645cb7f321b1a0f3eaf28407b699ccJan Berkel Field typeF = realObject.getClass().getField("type"); 6145f283443d645cb7f321b1a0f3eaf28407b699ccJan Berkel typeF.setAccessible(true); 6245f283443d645cb7f321b1a0f3eaf28407b699ccJan Berkel typeF.set(realObject, type); 6345f283443d645cb7f321b1a0f3eaf28407b699ccJan Berkel } 648239cec3cb888ed2c71d4bb9cebf63432a3d06deJan Berkel 65064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen @Override 668239cec3cb888ed2c71d4bb9cebf63432a3d06deJan Berkel @Implementation 678239cec3cb888ed2c71d4bb9cebf63432a3d06deJan Berkel public boolean equals(Object o) { 688239cec3cb888ed2c71d4bb9cebf63432a3d06deJan Berkel if (o == this) return true; 698239cec3cb888ed2c71d4bb9cebf63432a3d06deJan Berkel if (!(o instanceof Account)) return false; 708239cec3cb888ed2c71d4bb9cebf63432a3d06deJan Berkel final Account other = (Account)o; 718239cec3cb888ed2c71d4bb9cebf63432a3d06deJan Berkel return realObject.name.equals(other.name) && realObject.type.equals(other.type); 728239cec3cb888ed2c71d4bb9cebf63432a3d06deJan Berkel } 738239cec3cb888ed2c71d4bb9cebf63432a3d06deJan Berkel 74064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen @Override 758239cec3cb888ed2c71d4bb9cebf63432a3d06deJan Berkel @Implementation 768239cec3cb888ed2c71d4bb9cebf63432a3d06deJan Berkel public int hashCode() { 778239cec3cb888ed2c71d4bb9cebf63432a3d06deJan Berkel int result = 17; 788239cec3cb888ed2c71d4bb9cebf63432a3d06deJan Berkel result = 31 * result + realObject.name.hashCode(); 798239cec3cb888ed2c71d4bb9cebf63432a3d06deJan Berkel result = 31 * result + realObject.type.hashCode(); 808239cec3cb888ed2c71d4bb9cebf63432a3d06deJan Berkel return result; 818239cec3cb888ed2c71d4bb9cebf63432a3d06deJan Berkel } 82fb82eae187c0cdff8efd2d93209e775cd0ed6a39Jon Boekenoogen 83fb82eae187c0cdff8efd2d93209e775cd0ed6a39Jon Boekenoogen public static void reset() { 84fb82eae187c0cdff8efd2d93209e775cd0ed6a39Jon Boekenoogen Robolectric.Reflection.setFinalStaticField(Account.class, "CREATOR", CREATOR); 85fb82eae187c0cdff8efd2d93209e775cd0ed6a39Jon Boekenoogen } 8645f283443d645cb7f321b1a0f3eaf28407b699ccJan Berkel} 87