blob: ecd8ade471bddf13895ba9b9557baaed5dcafbb5 [file] [log] [blame]
/*
* Copyright 2018 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 com.android.pump.db;
import android.net.Uri;
import androidx.annotation.AnyThread;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@AnyThread
public class Other extends Video {
// TODO(b/123706949) Lock mutable fields to ensure consistent updates
private String mTitle;
private long mDuration;
private long mDateTaken;
private double mLatitude;
private double mLongitude;
private Uri mThumbnailUri;
private boolean mLoaded;
Other(long id, @NonNull String mimeType, @NonNull String title) {
super(id, mimeType);
mTitle = title;
mDuration = Long.MIN_VALUE;
mDateTaken = Long.MIN_VALUE;
mLatitude = Double.NaN;
mLongitude = Double.NaN;
}
public @NonNull String getTitle() {
return mTitle;
}
public boolean setTitle(@NonNull String title) {
if (title.equals(mTitle)) {
return false;
}
mTitle = title;
return true;
}
public boolean hasDuration() {
return mDuration >= 0;
}
public long getDuration() {
if (!hasDuration()) {
throw new IllegalStateException();
}
return mDuration;
}
public boolean setDuration(long duration) {
if (duration == mDuration) {
return false;
}
mDuration = duration;
return true;
}
public boolean hasDateTaken() {
return mDateTaken >= 0;
}
public long getDateTaken() {
if (!hasDateTaken()) {
throw new IllegalStateException();
}
return mDateTaken;
}
public boolean setDateTaken(long dateTaken) {
if (dateTaken == mDateTaken) {
return false;
}
mDateTaken = dateTaken;
return true;
}
public boolean hasLatLong() {
return !Double.isNaN(mLatitude) && !Double.isNaN(mLongitude);
}
public boolean setLatLong(double latitude, double longitude) {
if (latitude == mLatitude || longitude == mLongitude) {
return false;
}
mLatitude = latitude;
mLongitude = longitude;
return true;
}
public double getLatitude() {
if (!hasLatLong()) {
throw new IllegalStateException();
}
return mLatitude;
}
public double getLongitude() {
if (!hasLatLong()) {
throw new IllegalStateException();
}
return mLongitude;
}
public @Nullable Uri getThumbnailUri() {
return mThumbnailUri;
}
public boolean setThumbnailUri(@NonNull Uri thumbnailUri) {
if (thumbnailUri.equals(mThumbnailUri)) {
return false;
}
mThumbnailUri = thumbnailUri;
return true;
}
boolean isLoaded() {
return mLoaded;
}
void setLoaded() {
mLoaded = true;
}
}