/** * Radius Networks, Inc. * http://www.radiusnetworks.com * * @author David G. Young * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.altbeacon.beacon.service; import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; import androidx.annotation.NonNull; import org.altbeacon.beacon.Region; import java.io.Serializable; /** * * Internal class used to transfer ranging and monitoring data between the BeaconService and client * * @hide */ public class StartRMData implements Serializable, Parcelable { private static final String SCAN_PERIOD_KEY = "scanPeriod"; private static final String BETWEEN_SCAN_PERIOD_KEY = "betweenScanPeriod"; private static final String BACKGROUND_FLAG_KEY = "backgroundFlag"; private static final String CALLBACK_PACKAGE_NAME_KEY = "callbackPackageName"; private static final String REGION_KEY = "region"; private Region mRegion; private long mScanPeriod; private long mBetweenScanPeriod; private boolean mBackgroundFlag; private String mCallbackPackageName; private StartRMData() { } public StartRMData(@NonNull Region region, @NonNull String callbackPackageName) { this.mRegion = region; this.mCallbackPackageName = callbackPackageName; } public StartRMData(long scanPeriod, long betweenScanPeriod, boolean backgroundFlag) { this.mScanPeriod = scanPeriod; this.mBetweenScanPeriod = betweenScanPeriod; this.mBackgroundFlag = backgroundFlag; } public StartRMData(@NonNull Region region, @NonNull String callbackPackageName, long scanPeriod, long betweenScanPeriod, boolean backgroundFlag) { this.mScanPeriod = scanPeriod; this.mBetweenScanPeriod = betweenScanPeriod; this.mRegion = region; this.mCallbackPackageName = callbackPackageName; this.mBackgroundFlag = backgroundFlag; } public long getScanPeriod() { return mScanPeriod; } public long getBetweenScanPeriod() { return mBetweenScanPeriod; } public Region getRegionData() { return mRegion; } public String getCallbackPackageName() { return mCallbackPackageName; } public boolean getBackgroundFlag() { return mBackgroundFlag; } public int describeContents() { return 0; } public void writeToParcel(Parcel out, int flags) { out.writeParcelable(mRegion, flags); out.writeString(mCallbackPackageName); out.writeLong(mScanPeriod); out.writeLong(mBetweenScanPeriod); out.writeByte((byte) (mBackgroundFlag ? 1 : 0)); } public static final Parcelable.Creator<StartRMData> CREATOR = new Parcelable.Creator<StartRMData>() { public StartRMData createFromParcel(Parcel in) { return new StartRMData(in); } public StartRMData[] newArray(int size) { return new StartRMData[size]; } }; private StartRMData(Parcel in) { mRegion = in.readParcelable(StartRMData.class.getClassLoader()); mCallbackPackageName = in.readString(); mScanPeriod = in.readLong(); mBetweenScanPeriod = in.readLong(); mBackgroundFlag = in.readByte() != 0; } public Bundle toBundle() { Bundle bundle = new Bundle(); bundle.putLong(SCAN_PERIOD_KEY, this.mScanPeriod); bundle.putLong(BETWEEN_SCAN_PERIOD_KEY, this.mBetweenScanPeriod); bundle.putBoolean(BACKGROUND_FLAG_KEY, this.mBackgroundFlag); bundle.putString(CALLBACK_PACKAGE_NAME_KEY, this.mCallbackPackageName); if (mRegion != null) { bundle.putSerializable(REGION_KEY, mRegion); } return bundle; } public static StartRMData fromBundle(@NonNull Bundle bundle) { bundle.setClassLoader(Region.class.getClassLoader()); boolean valid = false; StartRMData data = new StartRMData(); if (bundle.containsKey(REGION_KEY)) { data.mRegion = (Region)bundle.getSerializable(REGION_KEY); valid = true; } if (bundle.containsKey(SCAN_PERIOD_KEY)) { data.mScanPeriod = (Long) bundle.get(SCAN_PERIOD_KEY); valid = true; } if (bundle.containsKey(BETWEEN_SCAN_PERIOD_KEY)) { data.mBetweenScanPeriod = (Long) bundle.get(BETWEEN_SCAN_PERIOD_KEY); } if (bundle.containsKey(BACKGROUND_FLAG_KEY)) { data.mBackgroundFlag = (Boolean) bundle.get(BACKGROUND_FLAG_KEY); } if (bundle.containsKey(CALLBACK_PACKAGE_NAME_KEY)) { data.mCallbackPackageName = (String) bundle.get(CALLBACK_PACKAGE_NAME_KEY); } if (valid) { return data; } else { return null; } } }