blob: 3aa1f22463e68abff1e465b722753a678d49ca1a [file] [log] [blame]
/*
* Copyright (C) 2017 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.documentsui.inspector;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Point;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.RelativeLayout;
import com.android.documentsui.IconUtils;
import com.android.documentsui.ProviderExecutor;
import com.android.documentsui.R;
import com.android.documentsui.ThumbnailLoader;
import com.android.documentsui.base.Display;
import com.android.documentsui.base.DocumentInfo;
import com.android.documentsui.inspector.InspectorController.HeaderDisplay;
import java.util.function.Consumer;
import javax.annotation.Nullable;
/**
* Organizes and displays the title and thumbnail for a given document
*/
public final class HeaderView extends RelativeLayout implements HeaderDisplay {
private final Context mContext;
private final View mHeader;
private ImageView mThumbnail;
private Point mImageDimensions;
public HeaderView(Context context) {
this(context, null);
}
public HeaderView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public HeaderView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(
Context.LAYOUT_INFLATER_SERVICE);
mContext = context;
mHeader = inflater.inflate(R.layout.inspector_header, null);
mThumbnail = (ImageView) mHeader.findViewById(R.id.inspector_thumbnail);
int width = (int) Display.screenWidth((Activity)context);
int height = mContext.getResources().getDimensionPixelSize(R.dimen.inspector_header_height);
mImageDimensions = new Point(width, height);
addView(mHeader);
}
@Override
public void accept(DocumentInfo info) {
loadHeaderImage(info);
}
private void loadHeaderImage(DocumentInfo doc) {
if (!doc.isThumbnailSupported()) {
showImage(doc, null);
} else {
Consumer<Bitmap> callback = new Consumer<Bitmap>() {
@Override
public void accept(Bitmap thumbnail) {
showImage(doc, thumbnail);
}
};
// load the thumbnail async.
final ThumbnailLoader task = new ThumbnailLoader(doc.derivedUri, mThumbnail,
mImageDimensions, doc.lastModified, callback, false);
task.executeOnExecutor(ProviderExecutor.forAuthority(doc.derivedUri.getAuthority()),
doc.derivedUri);
}
}
/**
* Shows the supplied image, falling back to a mimetype icon if the image is null.
*/
private void showImage(DocumentInfo info, @Nullable Bitmap thumbnail) {
if (thumbnail != null) {
mThumbnail.setScaleType(ScaleType.CENTER_CROP);
mThumbnail.setImageBitmap(thumbnail);
} else {
Drawable mimeIcon = IconUtils.loadMimeIcon(mContext, info.mimeType);
mThumbnail.setScaleType(ScaleType.FIT_CENTER);
mThumbnail.setImageDrawable(mimeIcon);
}
mThumbnail.animate().alpha(1.0f).start();
}
}