package com.steamcommunity.siplus.steamscreenshots; import android.accounts.Account; import android.accounts.AccountManager; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Parcel; import android.os.Parcelable; import android.util.Base64; public class SteamshotsAccount implements Parcelable { public static final Creator<SteamshotsAccount> CREATOR = new Creator<SteamshotsAccount>() { @Override public SteamshotsAccount createFromParcel(Parcel source) { return new SteamshotsAccount(source); } @Override public SteamshotsAccount[] newArray(int size) { return new SteamshotsAccount[size]; } }; static final String DATA_AVATAR = Utility.PACKAGE + ".SteamshotsAccount.DATA_AVATAR"; static final String DATA_AVATAR_ADDRESS = Utility.PACKAGE + ".SteamshotsAccount.DATA_AVATAR_ADDRESS"; static final String DATA_GUARD_HASH = Utility.PACKAGE + ".SteamshotsAccount.DATA_GUARD_HASH"; static final String DATA_LOGIN_KEY = Utility.PACKAGE + ".SteamshotsAccount.DATA_LOGIN_KEY"; static final String DATA_NEXT_AVATAR_UPDATE = Utility.PACKAGE + ".SteamshotsAccount.DATA_NEXT_AVATAR_UPDATE"; static final String DATA_STEAM_ID = Utility.PACKAGE + ".SteamshotsAccount.DATA_STEAM_ID"; Bitmap mAvatar; String mAvatarAddress; byte[] mGuardHash; String mLoginKey; String mName; long mNextAvatarUpdate; long mSteamID; boolean mValid; SteamshotsAccount(AccountManager accountManager, Account account) { String name = account.name; if (name == null) { mName = ""; return; } mName = name; String hash = accountManager.getUserData(account, DATA_GUARD_HASH); if (hash != null) { if (hash.length() != 28) {return;} try { mGuardHash = Base64.decode(hash, Base64.NO_WRAP); } catch (IllegalArgumentException e) { return; } if (mGuardHash.length != 20) { return; } } mLoginKey = accountManager.getUserData(account, DATA_LOGIN_KEY); if (mLoginKey == null) { return; } String avatarBase64 = accountManager.getUserData(account, DATA_AVATAR); if (avatarBase64 != null) { try { byte[] avatar = Base64.decode(avatarBase64, Base64.NO_WRAP); mAvatar = BitmapFactory.decodeByteArray(avatar, 0, avatar.length); } catch (IllegalArgumentException e) {} } try { mNextAvatarUpdate = Long.parseLong(accountManager.getUserData(account, DATA_NEXT_AVATAR_UPDATE)); } catch (NumberFormatException e) {} try { mSteamID = Long.parseLong(accountManager.getUserData(account, DATA_STEAM_ID)); } catch (NumberFormatException e) { return; } mValid = true; } SteamshotsAccount(Parcel parcel) { mName = parcel.readString(); int flags = parcel.readByte(); mValid = flags != 0; if (!mValid) { return; } if (flags == 3) { mGuardHash = new byte[20]; parcel.readByteArray(mGuardHash); } mLoginKey = parcel.readString(); mSteamID = parcel.readLong(); } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(mName); if (!mValid) { dest.writeByte((byte)(0)); return; } if (mGuardHash != null) { dest.writeByte((byte)(3)); } else { dest.writeByte((byte)(1)); } if (mGuardHash != null) { dest.writeByteArray(mGuardHash); } dest.writeString(mLoginKey); dest.writeLong(mSteamID); } }