blob: e43552d74bf349b083aed6eb111a9161479740c2 [file] [log] [blame]
/*
* Copyright (C) 2019 The Android Open Source Project
*
* 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 android.telephony.ims;
import android.annotation.CheckResult;
import android.net.Uri;
import android.os.Parcel;
import android.os.Parcelable;
/**
* Pass an instance of this class to
* {@link RcsMessage#insertFileTransfer(RcsFileTransferCreationParams)} create an
* {@link RcsFileTransferPart} and save it into storage.
*
* @hide
*/
public final class RcsFileTransferCreationParams implements Parcelable {
private String mRcsFileTransferSessionId;
private Uri mContentUri;
private String mContentMimeType;
private long mFileSize;
private long mTransferOffset;
private int mWidth;
private int mHeight;
private long mMediaDuration;
private Uri mPreviewUri;
private String mPreviewMimeType;
private @RcsFileTransferPart.RcsFileTransferStatus int mFileTransferStatus;
/**
* @return Returns the globally unique RCS file transfer session ID for the
* {@link RcsFileTransferPart} to be created
*/
public String getRcsFileTransferSessionId() {
return mRcsFileTransferSessionId;
}
/**
* @return Returns the URI for the content of the {@link RcsFileTransferPart} to be created
*/
public Uri getContentUri() {
return mContentUri;
}
/**
* @return Returns the MIME type for the content of the {@link RcsFileTransferPart} to be
* created
*/
public String getContentMimeType() {
return mContentMimeType;
}
/**
* @return Returns the file size in bytes for the {@link RcsFileTransferPart} to be created
*/
public long getFileSize() {
return mFileSize;
}
/**
* @return Returns the transfer offset for the {@link RcsFileTransferPart} to be created. The
* file transfer offset is defined as how many bytes have been successfully transferred to the
* receiver of this file transfer.
*/
public long getTransferOffset() {
return mTransferOffset;
}
/**
* @return Returns the width of the {@link RcsFileTransferPart} to be created. The value is in
* pixels.
*/
public int getWidth() {
return mWidth;
}
/**
* @return Returns the height of the {@link RcsFileTransferPart} to be created. The value is in
* pixels.
*/
public int getHeight() {
return mHeight;
}
/**
* @return Returns the duration of the {@link RcsFileTransferPart} to be created.
*/
public long getMediaDuration() {
return mMediaDuration;
}
/**
* @return Returns the URI of the preview of the content of the {@link RcsFileTransferPart} to
* be created. This should only be used for multi-media files.
*/
public Uri getPreviewUri() {
return mPreviewUri;
}
/**
* @return Returns the MIME type of the preview of the content of the
* {@link RcsFileTransferPart} to be created. This should only be used for multi-media files.
*/
public String getPreviewMimeType() {
return mPreviewMimeType;
}
/**
* @return Returns the status of the {@link RcsFileTransferPart} to be created.
*/
public @RcsFileTransferPart.RcsFileTransferStatus int getFileTransferStatus() {
return mFileTransferStatus;
}
/**
* @hide
*/
RcsFileTransferCreationParams(Builder builder) {
mRcsFileTransferSessionId = builder.mRcsFileTransferSessionId;
mContentUri = builder.mContentUri;
mContentMimeType = builder.mContentMimeType;
mFileSize = builder.mFileSize;
mTransferOffset = builder.mTransferOffset;
mWidth = builder.mWidth;
mHeight = builder.mHeight;
mMediaDuration = builder.mLength;
mPreviewUri = builder.mPreviewUri;
mPreviewMimeType = builder.mPreviewMimeType;
mFileTransferStatus = builder.mFileTransferStatus;
}
/**
* A builder to create instances of {@link RcsFileTransferCreationParams}
*/
public class Builder {
private String mRcsFileTransferSessionId;
private Uri mContentUri;
private String mContentMimeType;
private long mFileSize;
private long mTransferOffset;
private int mWidth;
private int mHeight;
private long mLength;
private Uri mPreviewUri;
private String mPreviewMimeType;
private @RcsFileTransferPart.RcsFileTransferStatus int mFileTransferStatus;
/**
* Sets the globally unique RCS file transfer session ID for the {@link RcsFileTransferPart}
* to be created
*
* @param sessionId The RCS file transfer session ID
* @return The same instance of {@link Builder} to chain methods
*/
@CheckResult
public Builder setFileTransferSessionId(String sessionId) {
mRcsFileTransferSessionId = sessionId;
return this;
}
/**
* Sets the URI for the content of the {@link RcsFileTransferPart} to be created
*
* @param contentUri The URI for the file
* @return The same instance of {@link Builder} to chain methods
*/
@CheckResult
public Builder setContentUri(Uri contentUri) {
mContentUri = contentUri;
return this;
}
/**
* Sets the MIME type for the content of the {@link RcsFileTransferPart} to be created
*
* @param contentType The MIME type of the file
* @return The same instance of {@link Builder} to chain methods
*/
@CheckResult
public Builder setContentMimeType(String contentType) {
mContentMimeType = contentType;
return this;
}
/**
* Sets the file size for the {@link RcsFileTransferPart} to be created
*
* @param size The size of the file in bytes
* @return The same instance of {@link Builder} to chain methods
*/
@CheckResult
public Builder setFileSize(long size) {
mFileSize = size;
return this;
}
/**
* Sets the transfer offset for the {@link RcsFileTransferPart} to be created. The file
* transfer offset is defined as how many bytes have been successfully transferred to the
* receiver of this file transfer.
*
* @param offset The transfer offset in bytes
* @return The same instance of {@link Builder} to chain methods
*/
@CheckResult
public Builder setTransferOffset(long offset) {
mTransferOffset = offset;
return this;
}
/**
* Sets the width of the {@link RcsFileTransferPart} to be created. This should only be used
* for multi-media files.
*
* @param width The width of the multi-media file in pixels.
* @return The same instance of {@link Builder} to chain methods
*/
@CheckResult
public Builder setWidth(int width) {
mWidth = width;
return this;
}
/**
* Sets the height of the {@link RcsFileTransferPart} to be created. This should only be
* used for multi-media files.
*
* @param height The height of the multi-media file in pixels.
* @return The same instance of {@link Builder} to chain methods
*/
@CheckResult
public Builder setHeight(int height) {
mHeight = height;
return this;
}
/**
* Sets the length of the {@link RcsFileTransferPart} to be created. This should only be
* used for multi-media files such as audio or video.
*
* @param length The length of the multi-media file in milliseconds
* @return The same instance of {@link Builder} to chain methods
*/
@CheckResult
public Builder setMediaDuration(long length) {
mLength = length;
return this;
}
/**
* Sets the URI of the preview of the content of the {@link RcsFileTransferPart} to be
* created. This should only be used for multi-media files.
*
* @param previewUri The URI of the preview of the file transfer
* @return The same instance of {@link Builder} to chain methods
*/
@CheckResult
public Builder setPreviewUri(Uri previewUri) {
mPreviewUri = previewUri;
return this;
}
/**
* Sets the MIME type of the preview of the content of the {@link RcsFileTransferPart} to
* be created. This should only be used for multi-media files.
*
* @param previewType The MIME type of the preview of the file transfer
* @return The same instance of {@link Builder} to chain methods
*/
@CheckResult
public Builder setPreviewMimeType(String previewType) {
mPreviewMimeType = previewType;
return this;
}
/**
* Sets the status of the {@link RcsFileTransferPart} to be created.
*
* @param status The status of the file transfer
* @return The same instance of {@link Builder} to chain methods
*/
@CheckResult
public Builder setFileTransferStatus(
@RcsFileTransferPart.RcsFileTransferStatus int status) {
mFileTransferStatus = status;
return this;
}
/**
* Creates an instance of {@link RcsFileTransferCreationParams} with the given
* parameters.
*
* @return The same instance of {@link Builder} to chain methods
* @see RcsMessage#insertFileTransfer(RcsFileTransferCreationParams)
*/
public RcsFileTransferCreationParams build() {
return new RcsFileTransferCreationParams(this);
}
}
private RcsFileTransferCreationParams(Parcel in) {
mRcsFileTransferSessionId = in.readString();
mContentUri = in.readParcelable(Uri.class.getClassLoader());
mContentMimeType = in.readString();
mFileSize = in.readLong();
mTransferOffset = in.readLong();
mWidth = in.readInt();
mHeight = in.readInt();
mMediaDuration = in.readLong();
mPreviewUri = in.readParcelable(Uri.class.getClassLoader());
mPreviewMimeType = in.readString();
mFileTransferStatus = in.readInt();
}
public static final @android.annotation.NonNull Creator<RcsFileTransferCreationParams> CREATOR =
new Creator<RcsFileTransferCreationParams>() {
@Override
public RcsFileTransferCreationParams createFromParcel(Parcel in) {
return new RcsFileTransferCreationParams(in);
}
@Override
public RcsFileTransferCreationParams[] newArray(int size) {
return new RcsFileTransferCreationParams[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(mRcsFileTransferSessionId);
dest.writeParcelable(mContentUri, flags);
dest.writeString(mContentMimeType);
dest.writeLong(mFileSize);
dest.writeLong(mTransferOffset);
dest.writeInt(mWidth);
dest.writeInt(mHeight);
dest.writeLong(mMediaDuration);
dest.writeParcelable(mPreviewUri, flags);
dest.writeString(mPreviewMimeType);
dest.writeInt(mFileTransferStatus);
}
}