package uk.co.alt236.bluetoothlelib.device.adrecord; import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; import android.util.SparseArray; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import uk.co.alt236.bluetoothlelib.util.AdRecordUtils; /** * The Class AdRecordStore. */ public class AdRecordStore implements Parcelable { public static final Parcelable.Creator<AdRecordStore> CREATOR = new Parcelable.Creator<AdRecordStore>() { public AdRecordStore createFromParcel(final Parcel in) { return new AdRecordStore(in); } public AdRecordStore[] newArray(final int size) { return new AdRecordStore[size]; } }; private final SparseArray<AdRecord> mAdRecords; private final String mLocalNameComplete; private final String mLocalNameShort; public AdRecordStore(final Parcel in) { final Bundle b = in.readBundle(getClass().getClassLoader()); mAdRecords = b.getSparseParcelableArray("records_array"); mLocalNameComplete = b.getString("local_name_complete"); mLocalNameShort = b.getString("local_name_short"); } /** * Instantiates a new Bluetooth LE device Ad Record Store. * * @param adRecords the ad records */ public AdRecordStore(final SparseArray<AdRecord> adRecords) { mAdRecords = adRecords; mLocalNameComplete = AdRecordUtils.getRecordDataAsString( mAdRecords.get(AdRecord.TYPE_LOCAL_NAME_COMPLETE)); mLocalNameShort = AdRecordUtils.getRecordDataAsString( mAdRecords.get(AdRecord.TYPE_LOCAL_NAME_SHORT)); } /* (non-Javadoc) * @see android.os.Parcelable#describeContents() */ @Override public int describeContents() { return 0; } /** * Gets the short local device name. * * @return the local name complete */ public String getLocalNameComplete() { return mLocalNameComplete; } /** * Gets the complete local device name. * * @return the local name short */ public String getLocalNameShort() { return mLocalNameShort; } /** * retrieves an individual record. * * @param record the record * @return the record */ public AdRecord getRecord(final int record) { return mAdRecords.get(record); } /** * Gets the record data as string. * * @param record the record * @return the record data as string */ public String getRecordDataAsString(final int record) { return AdRecordUtils.getRecordDataAsString( mAdRecords.get(record)); } /** * Gets the record as collection. * * @return the records as collection */ public Collection<AdRecord> getRecordsAsCollection() { return Collections.unmodifiableCollection(asList(mAdRecords)); } /** * Checks if is record present. * * @param record the record * @return true, if is record present */ public boolean isRecordPresent(final int record) { return mAdRecords.indexOfKey(record) >= 0; } /* (non-Javadoc) * @see java.lang.Object#toString() */ @Override public String toString() { return "AdRecordStore [mLocalNameComplete=" + mLocalNameComplete + ", mLocalNameShort=" + mLocalNameShort + "]"; } /* (non-Javadoc) * @see android.os.Parcelable#writeToParcel(android.os.Parcel, int) */ @Override public void writeToParcel(final Parcel parcel, final int arg1) { final Bundle b = new Bundle(); b.putString("local_name_complete", mLocalNameComplete); b.putString("local_name_short", mLocalNameShort); b.putSparseParcelableArray("records_array", mAdRecords); parcel.writeBundle(b); } /** * As list. * * @param <C> the generic type * @param sparseArray the sparse array * @return the collection */ public static <C> Collection<C> asList(final SparseArray<C> sparseArray) { if (sparseArray == null) return null; final Collection<C> arrayList = new ArrayList<>(sparseArray.size()); for (int i = 0; i < sparseArray.size(); i++) { arrayList.add(sparseArray.valueAt(i)); } return arrayList; } }