blob: f10425e66852796b382bc5ab338d7db72b037da8 [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.widget;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.util.AttributeSet;
import androidx.annotation.AttrRes;
import androidx.annotation.DrawableRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.UiThread;
import com.android.pump.util.Globals;
import com.android.pump.util.ImageLoader;
import com.android.pump.util.Scheme;
@UiThread
public class UriImageView extends PlaceholderImageView {
private Uri mUri;
public UriImageView(@NonNull Context context) {
super(context);
}
public UriImageView(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public UriImageView(@NonNull Context context, @Nullable AttributeSet attrs,
@AttrRes int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public void setImageResource(@DrawableRes int resId) {
super.setImageResource(resId);
mUri = null;
}
@Override
public void setImageDrawable(@Nullable Drawable drawable) {
super.setImageDrawable(drawable);
mUri = null;
}
@Override
public void setImageBitmap(@Nullable Bitmap bm) {
super.setImageBitmap(bm);
mUri = null;
}
@Override
public void setImageURI(@Nullable Uri uri) {
setImageDrawable(null);
if (uri == null) {
return;
}
if (Scheme.isContent(uri) || Scheme.isFile(uri)
|| Scheme.isHttp(uri) || Scheme.isHttps(uri)) {
mUri = uri;
loadImage();
} else {
super.setImageURI(uri);
}
}
private void loadImage() {
ImageLoader imageLoader = Globals.getImageLoader(getContext());
imageLoader.loadImage(mUri, (loadedUri, bitmap) -> {
if (mUri != null && mUri.equals(loadedUri)) {
setImageBitmap(bitmap);
mUri = loadedUri;
}
});
}
}