blob: 8254baaa9e43e67d40f55650e69782c31a87cb3b [file] [log] [blame]
/*
* Copyright (C) 2014 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.camera.data;
import android.content.Context;
import android.graphics.Point;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import com.android.camera.Storage;
import com.android.camera2.R;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.DecodeFormat;
import java.util.Date;
import java.util.concurrent.TimeUnit;
/**
* This is used to represent a local data item that is in progress and not
* yet in the media store.
*/
public class LocalSessionData implements LocalData {
private Uri mUri;
// Units are GMT epoch milliseconds.
private long mDateTaken;
protected final Bundle mMetaData;
private int mWidth;
private int mHeight;
public LocalSessionData(Uri uri) {
mUri = uri;
mMetaData = new Bundle();
mDateTaken = new Date().getTime();
refreshSize(uri);
}
private void refreshSize(Uri uri) {
Point size = Storage.getSizeForSession(uri);
mWidth = size.x;
mHeight = size.y;
}
@Override
public View getView(Context context, View recycled, int thumbWidth, int thumbHeight,
int placeholderResourcedId, LocalDataAdapter adapter, boolean isInProgress) {
final ImageView imageView;
if (recycled != null) {
imageView = (ImageView) recycled;
} else {
imageView = new ImageView(context);
imageView.setTag(R.id.mediadata_tag_viewtype, getItemViewType().ordinal());
}
byte[] jpegData = Storage.getJpegForSession(mUri);
int currentVersion = Storage.getJpegVersionForSession(mUri);
Glide.with(context)
.loadFromImage(jpegData, mUri.toString() + currentVersion)
.skipDiskCache(true)
.fitCenter()
.into(imageView);
imageView.setContentDescription(context.getResources().getString(
R.string.media_processing_content_description));
return imageView;
}
@Override
public LocalDataViewType getItemViewType() {
return LocalDataViewType.SESSION;
}
@Override
public void loadFullImage(Context context, int width, int height, View view,
LocalDataAdapter adapter) {
}
@Override
public long getDateTaken() {
return mDateTaken;
}
@Override
public long getDateModified() {
// Convert to seconds because LocalData interface specifies that this
// method should return seconds and mDateTaken is in milliseconds.
return TimeUnit.MILLISECONDS.toSeconds(mDateTaken);
}
@Override
public String getTitle() {
return mUri.toString();
}
@Override
public boolean isDataActionSupported(int actions) {
return false;
}
@Override
public boolean delete(Context c) {
return false;
}
@Override
public void onFullScreen(boolean fullScreen) {
}
@Override
public boolean canSwipeInFullScreen() {
return true;
}
@Override
public String getPath() {
return "";
}
@Override
public String getMimeType() {
return null;
}
@Override
public MediaDetails getMediaDetails(Context context) {
return null;
}
@Override
public int getLocalDataType() {
return LOCAL_IN_PROGRESS_DATA;
}
@Override
public long getSizeInBytes() {
return 0;
}
@Override
public LocalData refresh(Context context) {
refreshSize(mUri);
return this;
}
@Override
public long getContentId() {
return 0;
}
@Override
public Bundle getMetadata() {
return mMetaData;
}
@Override
public String getSignature() {
return "";
}
@Override
public boolean isMetadataUpdated() {
return true;
}
@Override
public int getRotation() {
return 0;
}
@Override
public int getWidth() {
return mWidth;
}
@Override
public int getHeight() {
return mHeight;
}
@Override
public int getViewType() {
return VIEW_TYPE_REMOVABLE;
}
@Override
public double[] getLatLong() {
return null;
}
@Override
public boolean isUIActionSupported(int action) {
return false;
}
@Override
public void prepare() {
}
@Override
public void recycle(View view) {
Glide.clear(view);
}
@Override
public Uri getUri() {
return mUri;
}
}