All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.anjlab.android.iab.v3.SkuDetails Maven / Gradle / Ivy

There is a newer version: 2.2.0
Show newest version
/**
 * Copyright 2014 AnjLab
 *
 * Licensed 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 com.anjlab.android.iab.v3;

import android.os.Parcel;
import android.os.Parcelable;

import org.json.JSONException;
import org.json.JSONObject;

public class SkuDetails implements Parcelable {

	public final String productId;

	public final String title;

	public final String description;

	public final boolean isSubscription;

	public final String currency;

	public final Double priceValue;

	/**
	 * Use this value to return the raw price from the product.
	 * This allows math to be performed without needing to worry about errors
	 * caused by floating point representations of the product's price.
	 *
	 * This is in micros from the Play Store.
	 */
	public final long priceLong;

	public final String priceText;

	public SkuDetails(JSONObject source) throws JSONException {
		String responseType = source.optString(Constants.RESPONSE_TYPE);
		if (responseType == null)
			responseType = Constants.PRODUCT_TYPE_MANAGED;
		productId = source.optString(Constants.RESPONSE_PRODUCT_ID);
		title = source.optString(Constants.RESPONSE_TITLE);
		description = source.optString(Constants.RESPONSE_DESCRIPTION);
		isSubscription = responseType.equalsIgnoreCase(Constants.PRODUCT_TYPE_SUBSCRIPTION);
		currency = source.optString(Constants.RESPONSE_PRICE_CURRENCY);
		priceLong = source.optLong(Constants.RESPONSE_PRICE_MICROS);
		priceValue = (double) (priceLong / 1000000);
		priceText = source.optString(Constants.RESPONSE_PRICE);
	}

	@Override
	public String toString() {
		return String.format("%s: %s(%s) %f in %s (%s)", productId, title, description, priceValue, currency, priceText);
	}

	@Override
	public boolean equals(Object o) {
		if (this == o) return true;
		if (o == null || getClass() != o.getClass()) return false;

		SkuDetails that = (SkuDetails) o;

		if (isSubscription != that.isSubscription) return false;
		return !(productId != null ? !productId.equals(that.productId) : that.productId != null);

	}

	@Override
	public int hashCode() {
		int result = productId != null ? productId.hashCode() : 0;
		result = 31 * result + (isSubscription ? 1 : 0);
		return result;
	}

	@Override
	public int describeContents() {
		return 0;
	}

	@Override
	public void writeToParcel(Parcel dest, int flags) {
		dest.writeString(this.productId);
		dest.writeString(this.title);
		dest.writeString(this.description);
		dest.writeByte(isSubscription ? (byte) 1 : (byte) 0);
		dest.writeString(this.currency);
		dest.writeDouble(this.priceValue);
		dest.writeLong(this.priceLong);
		dest.writeString(this.priceText);
	}

	protected SkuDetails(Parcel in) {
		this.productId = in.readString();
		this.title = in.readString();
		this.description = in.readString();
		this.isSubscription = in.readByte() != 0;
		this.currency = in.readString();
		this.priceValue = in.readDouble();
		this.priceLong = in.readLong();
		this.priceText = in.readString();
	}

	public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
		public SkuDetails createFromParcel(Parcel source) {
			return new SkuDetails(source);
		}

		public SkuDetails[] newArray(int size) {
			return new SkuDetails[size];
		}
	};
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy