LibreOffice Module android (master) 1
ThumbnailCreator.java
Go to the documentation of this file.
1/* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/*
3 * This file is part of the LibreOffice project.
4 *
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 */
9package org.libreoffice;
10
11import android.graphics.Bitmap;
12import android.graphics.Color;
13import android.graphics.drawable.ColorDrawable;
14import android.graphics.drawable.Drawable;
15import android.widget.ImageView;
16
17import java.lang.ref.WeakReference;
18
22public class ThumbnailCreator {
23 private static final String LOG_TAG = ThumbnailCreator.class.getSimpleName();
24 private static final int THUMBNAIL_SIZE = 256;
25
26 private static boolean needsThumbnailCreation(int partNumber, ImageView imageView) {
27 ThumbnailCreationTask thumbnailCreationTask = currentThumbnailCreationTask(imageView);
28
29 if (thumbnailCreationTask == null) {
30 return true;
31 }
32
33 if (thumbnailCreationTask.partNumber != partNumber) {
34 thumbnailCreationTask.cancel();
35 return true;
36 } else {
37 return false;
38 }
39 }
40
41 private static ThumbnailCreationTask currentThumbnailCreationTask(ImageView imageView) {
42 if (imageView == null) {
43 return null;
44 }
45 Drawable drawable = imageView.getDrawable();
46 if (drawable instanceof ThumbnailDrawable) {
47 return ((ThumbnailDrawable) drawable).thumbnailCreationTask.get();
48 } else {
49 return null;
50 }
51 }
52
53 public void createThumbnail(int partNumber, ImageView imageView) {
54 if (needsThumbnailCreation(partNumber, imageView)) {
55 ThumbnailCreationTask task = new ThumbnailCreationTask(imageView, partNumber);
56 ThumbnailDrawable thumbnailDrawable = new ThumbnailDrawable(task);
57 imageView.setImageDrawable(thumbnailDrawable);
58 imageView.setMinimumHeight(THUMBNAIL_SIZE);
60 }
61 }
62
63 static class ThumbnailDrawable extends ColorDrawable {
64 public final WeakReference<ThumbnailCreationTask> thumbnailCreationTask;
65
66 public ThumbnailDrawable(ThumbnailCreationTask thumbnailCreationTask) {
67 super(Color.WHITE);
68 this.thumbnailCreationTask = new WeakReference<ThumbnailCreationTask>(thumbnailCreationTask);
69 }
70 }
71
72 class ThumbnailCreationTask{
73 private final WeakReference<ImageView> imageViewReference;
74 private final int partNumber;
75 private boolean cancelled = false;
76
77 public ThumbnailCreationTask(ImageView imageView, int partNumber) {
78 imageViewReference = new WeakReference<ImageView>(imageView);
79 this.partNumber = partNumber;
80 }
81
82 public void cancel() {
83 cancelled = true;
84 }
85
86 public Bitmap getThumbnail(TileProvider tileProvider) {
87 int currentPart = tileProvider.getCurrentPartNumber();
88 tileProvider.changePart(partNumber);
89 final Bitmap bitmap = tileProvider.thumbnail(THUMBNAIL_SIZE);
90 tileProvider.changePart(currentPart);
91 return bitmap;
92 }
93
94 private void changeBitmap(Bitmap bitmap) {
95 if (cancelled) {
96 bitmap = null;
97 }
98
99 if (imageViewReference == null) {
100 return;
101 }
102 ImageView imageView = imageViewReference.get();
103 ThumbnailCreationTask thumbnailCreationTask = currentThumbnailCreationTask(imageView);
104 if (this == thumbnailCreationTask) {
105 imageView.setImageBitmap(bitmap);
106 }
107 }
108
109 public void applyBitmap(final Bitmap bitmap) {
110 // run on UI thread
111 LibreOfficeApplication.getMainHandler().post(new Runnable() {
112 @Override
113 public void run() {
114 changeBitmap(bitmap);
115 }
116 });
117 }
118 }
119}
120
121/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
Common static LOKit functions, functions to send events.
Definition: LOKitShell.java:26
static void sendThumbnailEvent(ThumbnailCreator.ThumbnailCreationTask task)
Definition: LOKitShell.java:76
Create thumbnails for the parts of the document.
static boolean needsThumbnailCreation(int partNumber, ImageView imageView)
static ThumbnailCreationTask currentThumbnailCreationTask(ImageView imageView)
void createThumbnail(int partNumber, ImageView imageView)
def run(arg=None, arg2=-1)