11859aaff81561d7bf0b28f6164839731f886c15dAngus Kong/* 21859aaff81561d7bf0b28f6164839731f886c15dAngus Kong * Copyright (C) 2012 The Android Open Source Project 31859aaff81561d7bf0b28f6164839731f886c15dAngus Kong * 41859aaff81561d7bf0b28f6164839731f886c15dAngus Kong * Licensed under the Apache License, Version 2.0 (the "License"); 51859aaff81561d7bf0b28f6164839731f886c15dAngus Kong * you may not use this file except in compliance with the License. 61859aaff81561d7bf0b28f6164839731f886c15dAngus Kong * You may obtain a copy of the License at 71859aaff81561d7bf0b28f6164839731f886c15dAngus Kong * 81859aaff81561d7bf0b28f6164839731f886c15dAngus Kong * http://www.apache.org/licenses/LICENSE-2.0 91859aaff81561d7bf0b28f6164839731f886c15dAngus Kong * 101859aaff81561d7bf0b28f6164839731f886c15dAngus Kong * Unless required by applicable law or agreed to in writing, software 111859aaff81561d7bf0b28f6164839731f886c15dAngus Kong * distributed under the License is distributed on an "AS IS" BASIS, 121859aaff81561d7bf0b28f6164839731f886c15dAngus Kong * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131859aaff81561d7bf0b28f6164839731f886c15dAngus Kong * See the License for the specific language governing permissions and 141859aaff81561d7bf0b28f6164839731f886c15dAngus Kong * limitations under the License. 151859aaff81561d7bf0b28f6164839731f886c15dAngus Kong */ 161859aaff81561d7bf0b28f6164839731f886c15dAngus Kong 171859aaff81561d7bf0b28f6164839731f886c15dAngus Kongpackage com.android.camera; 181859aaff81561d7bf0b28f6164839731f886c15dAngus Kong 191859aaff81561d7bf0b28f6164839731f886c15dAngus Kongimport android.content.ContentResolver; 201859aaff81561d7bf0b28f6164839731f886c15dAngus Kongimport android.os.Handler; 211859aaff81561d7bf0b28f6164839731f886c15dAngus Kongimport android.os.HandlerThread; 221859aaff81561d7bf0b28f6164839731f886c15dAngus Kongimport android.os.Message; 231859aaff81561d7bf0b28f6164839731f886c15dAngus Kong 241859aaff81561d7bf0b28f6164839731f886c15dAngus Kongpublic class ThumbnailHolder { 251859aaff81561d7bf0b28f6164839731f886c15dAngus Kong private static final int CLEAN_THUMBNAIL = 1; 261859aaff81561d7bf0b28f6164839731f886c15dAngus Kong 2790c844841dbcdc8ad7897ac40d1fe562fab790f1Pin Ting private static Thumbnail sLastThumbnail; 281859aaff81561d7bf0b28f6164839731f886c15dAngus Kong 291859aaff81561d7bf0b28f6164839731f886c15dAngus Kong private static class LazyHandlerHolder { 301859aaff81561d7bf0b28f6164839731f886c15dAngus Kong private static final HandlerThread sHandlerThread = new HandlerThread("ClearThumbnail"); 311859aaff81561d7bf0b28f6164839731f886c15dAngus Kong static { 321859aaff81561d7bf0b28f6164839731f886c15dAngus Kong sHandlerThread.start(); 331859aaff81561d7bf0b28f6164839731f886c15dAngus Kong } 341859aaff81561d7bf0b28f6164839731f886c15dAngus Kong public static final Handler sHandler = 351859aaff81561d7bf0b28f6164839731f886c15dAngus Kong new Handler(sHandlerThread.getLooper(), new Handler.Callback() { 361859aaff81561d7bf0b28f6164839731f886c15dAngus Kong @Override 371859aaff81561d7bf0b28f6164839731f886c15dAngus Kong public boolean handleMessage(Message msg) { 381859aaff81561d7bf0b28f6164839731f886c15dAngus Kong switch(msg.what) { 391859aaff81561d7bf0b28f6164839731f886c15dAngus Kong case CLEAN_THUMBNAIL: 4090c844841dbcdc8ad7897ac40d1fe562fab790f1Pin Ting cleanLastThumbnail(); 411859aaff81561d7bf0b28f6164839731f886c15dAngus Kong break; 421859aaff81561d7bf0b28f6164839731f886c15dAngus Kong } 431859aaff81561d7bf0b28f6164839731f886c15dAngus Kong return true; 441859aaff81561d7bf0b28f6164839731f886c15dAngus Kong } 451859aaff81561d7bf0b28f6164839731f886c15dAngus Kong }); 461859aaff81561d7bf0b28f6164839731f886c15dAngus Kong } 471859aaff81561d7bf0b28f6164839731f886c15dAngus Kong 481859aaff81561d7bf0b28f6164839731f886c15dAngus Kong private ThumbnailHolder() { 491859aaff81561d7bf0b28f6164839731f886c15dAngus Kong } 501859aaff81561d7bf0b28f6164839731f886c15dAngus Kong 511859aaff81561d7bf0b28f6164839731f886c15dAngus Kong public static synchronized Thumbnail getLastThumbnail(ContentResolver resolver) { 5290c844841dbcdc8ad7897ac40d1fe562fab790f1Pin Ting if (sLastThumbnail != null) { // Thumbnail exists. Checks validity. 531859aaff81561d7bf0b28f6164839731f886c15dAngus Kong LazyHandlerHolder.sHandler.removeMessages(CLEAN_THUMBNAIL); 5490c844841dbcdc8ad7897ac40d1fe562fab790f1Pin Ting Thumbnail t = sLastThumbnail; 5590c844841dbcdc8ad7897ac40d1fe562fab790f1Pin Ting sLastThumbnail = null; 561859aaff81561d7bf0b28f6164839731f886c15dAngus Kong if (Util.isUriValid(t.getUri(), resolver)) { 571859aaff81561d7bf0b28f6164839731f886c15dAngus Kong return t; 581859aaff81561d7bf0b28f6164839731f886c15dAngus Kong } 591859aaff81561d7bf0b28f6164839731f886c15dAngus Kong } 601859aaff81561d7bf0b28f6164839731f886c15dAngus Kong 611859aaff81561d7bf0b28f6164839731f886c15dAngus Kong return null; 621859aaff81561d7bf0b28f6164839731f886c15dAngus Kong } 631859aaff81561d7bf0b28f6164839731f886c15dAngus Kong 6490c844841dbcdc8ad7897ac40d1fe562fab790f1Pin Ting private static synchronized void cleanLastThumbnail() { 6590c844841dbcdc8ad7897ac40d1fe562fab790f1Pin Ting sLastThumbnail = null; 661859aaff81561d7bf0b28f6164839731f886c15dAngus Kong } 671859aaff81561d7bf0b28f6164839731f886c15dAngus Kong 6890c844841dbcdc8ad7897ac40d1fe562fab790f1Pin Ting public static synchronized void keep(Thumbnail t) { 6990c844841dbcdc8ad7897ac40d1fe562fab790f1Pin Ting sLastThumbnail = t; 701859aaff81561d7bf0b28f6164839731f886c15dAngus Kong LazyHandlerHolder.sHandler.removeMessages(CLEAN_THUMBNAIL); 711859aaff81561d7bf0b28f6164839731f886c15dAngus Kong LazyHandlerHolder.sHandler.sendEmptyMessageDelayed(CLEAN_THUMBNAIL, 3000); 721859aaff81561d7bf0b28f6164839731f886c15dAngus Kong } 731859aaff81561d7bf0b28f6164839731f886c15dAngus Kong} 74