127 lines
4.2 KiB
Java
127 lines
4.2 KiB
Java
/*
|
|
* Copyright (C) 2016 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.dialer.callcomposer;
|
|
|
|
import android.content.Context;
|
|
import android.database.Cursor;
|
|
import android.util.AttributeSet;
|
|
import android.view.View;
|
|
import android.widget.FrameLayout;
|
|
import android.widget.ImageView;
|
|
import android.widget.ImageView.ScaleType;
|
|
import com.bumptech.glide.Glide;
|
|
import com.bumptech.glide.load.resource.bitmap.DownsampleStrategy;
|
|
import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions;
|
|
import com.bumptech.glide.request.RequestOptions;
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
/** Shows an item in the gallery picker grid view. Hosts an FileImageView with a checkbox. */
|
|
public class GalleryGridItemView extends FrameLayout {
|
|
|
|
private final GalleryGridItemData data = new GalleryGridItemData();
|
|
|
|
private ImageView image;
|
|
private View checkbox;
|
|
private View gallery;
|
|
private String currentFilePath;
|
|
private boolean isGallery;
|
|
|
|
public GalleryGridItemView(Context context, AttributeSet attrs) {
|
|
super(context, attrs);
|
|
}
|
|
|
|
@Override
|
|
protected void onFinishInflate() {
|
|
super.onFinishInflate();
|
|
image = (ImageView) findViewById(R.id.image);
|
|
checkbox = findViewById(R.id.checkbox);
|
|
gallery = findViewById(R.id.gallery);
|
|
|
|
image.setClipToOutline(true);
|
|
checkbox.setClipToOutline(true);
|
|
gallery.setClipToOutline(true);
|
|
}
|
|
|
|
@Override
|
|
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
|
// The grid view auto-fit the columns, so we want to let the height match the width
|
|
// to make the image square.
|
|
super.onMeasure(widthMeasureSpec, widthMeasureSpec);
|
|
}
|
|
|
|
public GalleryGridItemData getData() {
|
|
return data;
|
|
}
|
|
|
|
@Override
|
|
public void setSelected(boolean selected) {
|
|
if (selected) {
|
|
checkbox.setVisibility(VISIBLE);
|
|
int paddingPx = getResources().getDimensionPixelSize(R.dimen.gallery_item_selected_padding);
|
|
setPadding(paddingPx, paddingPx, paddingPx, paddingPx);
|
|
} else {
|
|
checkbox.setVisibility(GONE);
|
|
int paddingPx = getResources().getDimensionPixelOffset(R.dimen.gallery_item_padding);
|
|
setPadding(paddingPx, paddingPx, paddingPx, paddingPx);
|
|
}
|
|
}
|
|
|
|
public boolean isGallery() {
|
|
return isGallery;
|
|
}
|
|
|
|
public void showGallery(boolean show) {
|
|
isGallery = show;
|
|
gallery.setVisibility(show ? VISIBLE : INVISIBLE);
|
|
}
|
|
|
|
public void bind(Cursor cursor) {
|
|
data.bind(cursor);
|
|
showGallery(false);
|
|
updateImageView();
|
|
}
|
|
|
|
private void updateImageView() {
|
|
image.setScaleType(ScaleType.CENTER_CROP);
|
|
|
|
if (currentFilePath == null || !currentFilePath.equals(data.getFilePath())) {
|
|
currentFilePath = data.getFilePath();
|
|
|
|
// Downloads/loads an image from the given URI so that the image's largest dimension is
|
|
// between 1/2 the given dimensions and the given dimensions, with no restrictions on the
|
|
// image's smallest dimension. We skip the memory cache, but glide still applies it's disk
|
|
// cache to optimize loads.
|
|
Glide.with(getContext())
|
|
.load(data.getFileUri())
|
|
.apply(RequestOptions.downsampleOf(DownsampleStrategy.AT_MOST).skipMemoryCache(true))
|
|
.transition(DrawableTransitionOptions.withCrossFade())
|
|
.into(image);
|
|
}
|
|
long dateModifiedSeconds = data.getDateModifiedSeconds();
|
|
if (dateModifiedSeconds > 0) {
|
|
image.setContentDescription(
|
|
getResources()
|
|
.getString(
|
|
R.string.gallery_item_description,
|
|
TimeUnit.SECONDS.toMillis(dateModifiedSeconds)));
|
|
} else {
|
|
image.setContentDescription(
|
|
getResources().getString(R.string.gallery_item_description_no_date));
|
|
}
|
|
}
|
|
}
|