Version 5.2.6.1, tag libreoffice-5.2.6.1
[LibreOffice.git] / android / source / src / java / org / libreoffice / ui / FolderIconView.java
blob004e5e9a819049c87e3e909cd18adc83e0a9ceaf
1 /* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
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 */
9 package org.libreoffice.ui;
11 import android.content.Context;
12 import android.graphics.Bitmap;
13 import android.graphics.BitmapFactory;
14 import android.graphics.Canvas;
15 import android.graphics.Paint;
16 import android.graphics.RectF;
17 import android.graphics.Color;
18 import android.util.AttributeSet;
19 import android.util.Log;
20 import android.view.View;
22 import java.io.File;
23 import java.util.Stack;
25 public class FolderIconView extends View{
26 private String LOGTAG = "FolderIconView";
28 private Paint mPaintBlack;
29 private Paint mPaintGray;
30 private Paint mPaintShadow;
32 private File dir;
34 public FolderIconView(Context context) {
35 super(context);
36 initialisePaints();
38 public FolderIconView(Context context, AttributeSet attrs) {
39 super(context, attrs);
40 initialisePaints();
42 public FolderIconView(Context context, AttributeSet attrs, int defStyle) {
43 super(context, attrs, defStyle);
44 initialisePaints();
47 private void initialisePaints() {
48 mPaintBlack = new Paint();
49 mPaintBlack.setColor(Color.DKGRAY);//Can also use parseColor(String "#aarrggbb")
50 mPaintBlack.setAntiAlias(true);
52 mPaintGray = new Paint();
53 mPaintGray.setColor(Color.GRAY);//Can also use parseColor(String "#aarrggbb")
54 mPaintGray.setAntiAlias(true);
56 mPaintShadow = new Paint();
57 mPaintShadow.setColor(Color.parseColor("#88888888"));
58 mPaintShadow.setAntiAlias(true);
61 public void setDir(File dir) {
62 this.dir = dir;
65 @Override
66 protected void onDraw(Canvas canvas) {
67 super.onDraw(canvas);
68 Log.d(LOGTAG, "onDraw");
69 //float width = (float)canvas.getWidth();
70 //float height = (float)canvas.getHeight();
71 float width = (float) this.getWidth();
72 float height = (float) this.getHeight();
73 float centerX = width*0.5f;// centered on horz axis
74 float centerY = height*0.5f;
75 float outerRadius = 0.8f*0.5f*width;
76 float innerRadius = 0.7f*0.5f*width;
77 float thumbHeight = outerRadius*1.25f;
78 float thumbWidth = thumbHeight*(float)(1/Math.sqrt(2));
79 float DZx = 0.2f*outerRadius;
80 float DZy = 0.2f*outerRadius;
81 //Bitmap blankPage = BitmapFactory.decodeResource(getResources(), R.drawable.page);
82 Log.i(LOGTAG, Float.toString(width) + "x" + Float.toString(height));
83 canvas.drawCircle(centerX, centerY, outerRadius, mPaintGray);
84 canvas.drawCircle(centerX, centerY, innerRadius, mPaintBlack);
85 //Either get thumbs from directory or use generic page images
86 //For now just get the first 4 thumbs -> add some checks later
87 if (dir == null)
88 return;//TODO
89 File[] contents = dir.listFiles();//TODO consider filtering thumbs to match grid.
90 if (contents == null)
91 // dir is not a directory,
92 // or user does not have permissions to read it
93 return;
94 Stack<Bitmap> thumbs = new Stack<Bitmap>();
95 BitmapFactory factory = new BitmapFactory();
96 for (File file : contents) {
97 if (!FileUtilities.isThumbnail(file))
98 continue;
99 thumbs.push(BitmapFactory.decodeFile(file.getAbsolutePath()));//TODO switch to push for semantics
100 if (thumbs.size() > 3)
101 break;
103 /*while(thumbs.size() < 4) {// padd out with blanks?
104 thumbs.push(blankPage);
106 Log.i(LOGTAG, Integer.toString(thumbs.size()));
107 //should handle empty folders better
108 // options:
109 // don't show?
110 // show generic LO icons for writer etc
111 // Show a generic blank page icon
112 if (thumbs.isEmpty())
113 return;
114 /*float left = centerX ;//+ 0.25f*outerRadius;
115 float top = centerY - 0.5f*outerRadius;
116 float right = left + thumbs.get(0).getWidth()*0.4f;
117 float bottom = top + thumbs.get(0).getHeight()*0.4f;
118 RectF dest = new RectF(left, top, right, bottom);
119 RectF shadowBox = new RectF(dest);
120 shadowBox.inset(-1, -1);
121 int size = thumbs.size();
122 for (int i = 1; i <= size; i++) {
123 canvas.drawRect(shadowBox, mPaintShadow);
124 canvas.drawBitmap(thumbs.pop(), null, dest, null);
125 dest.offset(-outerRadius*0.2f, outerRadius*0.1f);
126 shadowBox.offset(-outerRadius*0.2f, outerRadius*0.1f);
128 float left;
129 float top;
130 float right;
131 float bottom;
132 RectF dest;
133 RectF shadowBox;
134 int size;
135 switch(thumbs.size()) {
136 case 0:
137 break;
138 case 1:
139 left = centerX - 0.5f*thumbWidth;
140 top = centerY - 0.5f*thumbHeight;
141 right = left + thumbWidth;
142 bottom = top + thumbHeight;
143 dest = new RectF(left, top, right, bottom);
144 shadowBox = new RectF(dest);
145 shadowBox.inset(-1, -1);
146 canvas.drawRect(shadowBox, mPaintShadow);
147 canvas.drawBitmap(thumbs.pop(), null, dest, null);
148 break;
149 case 2:
150 left = centerX - 0.5f*thumbWidth + 0.5f*DZx;
151 top = centerY - 0.5f*thumbHeight - 0.5f*DZy;
152 right = left + thumbWidth;
153 bottom = top + thumbHeight;
154 dest = new RectF(left, top, right, bottom);
155 shadowBox = new RectF(dest);
156 shadowBox.inset(-1, -1);
157 size = thumbs.size();
158 for (int i = 1; i <= size; i++) {
159 canvas.drawRect(shadowBox, mPaintShadow);
160 canvas.drawBitmap(thumbs.pop(), null, dest, null);
161 dest.offset(-DZx, DZy);
162 shadowBox.offset(-DZx, DZy);
164 break;
165 case 3:
166 left = centerX - 0.5f*thumbWidth + DZx;
167 top = centerY - 0.5f*thumbHeight - DZy;
168 right = left + thumbWidth;
169 bottom = top + thumbHeight;
170 dest = new RectF(left, top, right, bottom);
171 shadowBox = new RectF(dest);
172 shadowBox.inset(-1, -1);
173 size = thumbs.size();
174 for (int i = 1; i <= size; i++) {
175 canvas.drawRect(shadowBox, mPaintShadow);
176 canvas.drawBitmap(thumbs.pop(), null, dest, null);
177 dest.offset(-DZx, DZy);
178 shadowBox.offset(-DZx, DZy);
180 break;
181 case 4:
182 left = centerX - 0.5f*thumbWidth + 1.5f*DZx;
183 top = centerY - 0.5f*thumbHeight - 1.5f*DZy;
184 right = left + thumbWidth;
185 bottom = top + thumbHeight;
186 dest = new RectF(left, top, right, bottom);
187 shadowBox = new RectF(dest);
188 shadowBox.inset(-1, -1);
189 size = thumbs.size();
190 for (int i = 1; i <= size; i++) {
191 canvas.drawRect(shadowBox, mPaintShadow);
192 canvas.drawBitmap(thumbs.pop(), null, dest, null);
193 dest.offset(-DZx, DZy);
194 shadowBox.offset(-DZx, DZy);
196 break;
197 default:
198 break;
200 //test
202 return;
207 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */