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