18e5e4eedb25a4589342660b928935acca4375fc7Angus Kong/* 28e5e4eedb25a4589342660b928935acca4375fc7Angus Kong * Copyright (C) 2013 The Android Open Source Project 38e5e4eedb25a4589342660b928935acca4375fc7Angus Kong * 48e5e4eedb25a4589342660b928935acca4375fc7Angus Kong * Licensed under the Apache License, Version 2.0 (the "License"); 58e5e4eedb25a4589342660b928935acca4375fc7Angus Kong * you may not use this file except in compliance with the License. 68e5e4eedb25a4589342660b928935acca4375fc7Angus Kong * You may obtain a copy of the License at 78e5e4eedb25a4589342660b928935acca4375fc7Angus Kong * 88e5e4eedb25a4589342660b928935acca4375fc7Angus Kong * http://www.apache.org/licenses/LICENSE-2.0 98e5e4eedb25a4589342660b928935acca4375fc7Angus Kong * 108e5e4eedb25a4589342660b928935acca4375fc7Angus Kong * Unless required by applicable law or agreed to in writing, software 118e5e4eedb25a4589342660b928935acca4375fc7Angus Kong * distributed under the License is distributed on an "AS IS" BASIS, 128e5e4eedb25a4589342660b928935acca4375fc7Angus Kong * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138e5e4eedb25a4589342660b928935acca4375fc7Angus Kong * See the License for the specific language governing permissions and 148e5e4eedb25a4589342660b928935acca4375fc7Angus Kong * limitations under the License. 158e5e4eedb25a4589342660b928935acca4375fc7Angus Kong */ 168e5e4eedb25a4589342660b928935acca4375fc7Angus Kong 178e5e4eedb25a4589342660b928935acca4375fc7Angus Kongpackage com.android.camera.data; 188e5e4eedb25a4589342660b928935acca4375fc7Angus Kong 198e5e4eedb25a4589342660b928935acca4375fc7Angus Kongimport android.content.Context; 208e5e4eedb25a4589342660b928935acca4375fc7Angus Kongimport android.net.Uri; 21de3e9abaa241dc2aa66e5d02ba8b7bd35e0d8f00Sam Juddimport android.os.AsyncTask; 22de3e9abaa241dc2aa66e5d02ba8b7bd35e0d8f00Sam Judd 23adde93f26f39cd856fdf749c83d29f9022a310e1Sascha Haeberlingimport com.android.camera.util.Callback; 24adde93f26f39cd856fdf749c83d29f9022a310e1Sascha Haeberling 25de3e9abaa241dc2aa66e5d02ba8b7bd35e0d8f00Sam Juddimport java.util.List; 268e5e4eedb25a4589342660b928935acca4375fc7Angus Kong 278e5e4eedb25a4589342660b928935acca4375fc7Angus Kong/** 288e5e4eedb25a4589342660b928935acca4375fc7Angus Kong * An abstract {@link LocalDataAdapter} implementation to wrap another 298e5e4eedb25a4589342660b928935acca4375fc7Angus Kong * {@link LocalDataAdapter}. All implementations related to data id is not 308e5e4eedb25a4589342660b928935acca4375fc7Angus Kong * addressed in this abstract class since wrapping another data adapter 318e5e4eedb25a4589342660b928935acca4375fc7Angus Kong * surely makes things different for data id. 328e5e4eedb25a4589342660b928935acca4375fc7Angus Kong * 338e5e4eedb25a4589342660b928935acca4375fc7Angus Kong * @see FixedFirstDataAdapter 348e5e4eedb25a4589342660b928935acca4375fc7Angus Kong * @see FixedLastDataAdapter 358e5e4eedb25a4589342660b928935acca4375fc7Angus Kong */ 368e5e4eedb25a4589342660b928935acca4375fc7Angus Kongpublic abstract class AbstractLocalDataAdapterWrapper implements LocalDataAdapter { 378e5e4eedb25a4589342660b928935acca4375fc7Angus Kong 3844c1afb9dac08e02004244e602469c29a27487b6Sascha Haeberling protected final Context mContext; 398e5e4eedb25a4589342660b928935acca4375fc7Angus Kong protected final LocalDataAdapter mAdapter; 408e5e4eedb25a4589342660b928935acca4375fc7Angus Kong protected int mSuggestedWidth; 418e5e4eedb25a4589342660b928935acca4375fc7Angus Kong protected int mSuggestedHeight; 428e5e4eedb25a4589342660b928935acca4375fc7Angus Kong 438e5e4eedb25a4589342660b928935acca4375fc7Angus Kong /** 448e5e4eedb25a4589342660b928935acca4375fc7Angus Kong * Constructor. 458e5e4eedb25a4589342660b928935acca4375fc7Angus Kong * 4644c1afb9dac08e02004244e602469c29a27487b6Sascha Haeberling * @param context A valid Android context. 4744c1afb9dac08e02004244e602469c29a27487b6Sascha Haeberling * @param wrappedAdapter The {@link LocalDataAdapter} to be wrapped. 488e5e4eedb25a4589342660b928935acca4375fc7Angus Kong */ 4944c1afb9dac08e02004244e602469c29a27487b6Sascha Haeberling AbstractLocalDataAdapterWrapper(Context context, LocalDataAdapter wrappedAdapter) { 508e5e4eedb25a4589342660b928935acca4375fc7Angus Kong if (wrappedAdapter == null) { 518e5e4eedb25a4589342660b928935acca4375fc7Angus Kong throw new AssertionError("data adapter is null"); 528e5e4eedb25a4589342660b928935acca4375fc7Angus Kong } 5344c1afb9dac08e02004244e602469c29a27487b6Sascha Haeberling mContext = context; 548e5e4eedb25a4589342660b928935acca4375fc7Angus Kong mAdapter = wrappedAdapter; 558e5e4eedb25a4589342660b928935acca4375fc7Angus Kong } 568e5e4eedb25a4589342660b928935acca4375fc7Angus Kong 578e5e4eedb25a4589342660b928935acca4375fc7Angus Kong @Override 588e5e4eedb25a4589342660b928935acca4375fc7Angus Kong public void suggestViewSizeBound(int w, int h) { 598e5e4eedb25a4589342660b928935acca4375fc7Angus Kong mSuggestedWidth = w; 608e5e4eedb25a4589342660b928935acca4375fc7Angus Kong mSuggestedHeight = h; 611259bc49d956887477ad6d789668fb61f572b046Sascha Haeberling mAdapter.suggestViewSizeBound(w, h); 628e5e4eedb25a4589342660b928935acca4375fc7Angus Kong } 638e5e4eedb25a4589342660b928935acca4375fc7Angus Kong 648e5e4eedb25a4589342660b928935acca4375fc7Angus Kong @Override 658e5e4eedb25a4589342660b928935acca4375fc7Angus Kong public void setListener(Listener listener) { 668e5e4eedb25a4589342660b928935acca4375fc7Angus Kong mAdapter.setListener(listener); 678e5e4eedb25a4589342660b928935acca4375fc7Angus Kong } 688e5e4eedb25a4589342660b928935acca4375fc7Angus Kong 698e5e4eedb25a4589342660b928935acca4375fc7Angus Kong @Override 70e2f4c03eaea059e15adf34d8782c433b1f7164dcAngus Kong public void setLocalDataListener(LocalDataListener listener) { 71e2f4c03eaea059e15adf34d8782c433b1f7164dcAngus Kong mAdapter.setLocalDataListener(listener); 72e2f4c03eaea059e15adf34d8782c433b1f7164dcAngus Kong } 73e2f4c03eaea059e15adf34d8782c433b1f7164dcAngus Kong 74e2f4c03eaea059e15adf34d8782c433b1f7164dcAngus Kong @Override 75adde93f26f39cd856fdf749c83d29f9022a310e1Sascha Haeberling public void requestLoad(Callback<Void> doneCallback) { 76adde93f26f39cd856fdf749c83d29f9022a310e1Sascha Haeberling mAdapter.requestLoad(doneCallback); 778e5e4eedb25a4589342660b928935acca4375fc7Angus Kong } 788e5e4eedb25a4589342660b928935acca4375fc7Angus Kong 798e5e4eedb25a4589342660b928935acca4375fc7Angus Kong @Override 80aeed91f3777d08a4160d68ddfc2626808a08b92dSam Judd public void requestLoadNewPhotos() { 81aeed91f3777d08a4160d68ddfc2626808a08b92dSam Judd mAdapter.requestLoadNewPhotos(); 82aeed91f3777d08a4160d68ddfc2626808a08b92dSam Judd } 83aeed91f3777d08a4160d68ddfc2626808a08b92dSam Judd 84aeed91f3777d08a4160d68ddfc2626808a08b92dSam Judd @Override 85571a8c389798bd3f01429f6be34cd3e606ab34dfAngus Kong public boolean addData(LocalData data) { 86571a8c389798bd3f01429f6be34cd3e606ab34dfAngus Kong return mAdapter.addData(data); 8737f3611bbdc787c996a99894dcef7d8fb77e3f7cSascha Haeberling } 8837f3611bbdc787c996a99894dcef7d8fb77e3f7cSascha Haeberling 8937f3611bbdc787c996a99894dcef7d8fb77e3f7cSascha Haeberling @Override 908e5e4eedb25a4589342660b928935acca4375fc7Angus Kong public void flush() { 918e5e4eedb25a4589342660b928935acca4375fc7Angus Kong mAdapter.flush(); 928e5e4eedb25a4589342660b928935acca4375fc7Angus Kong } 938e5e4eedb25a4589342660b928935acca4375fc7Angus Kong 948e5e4eedb25a4589342660b928935acca4375fc7Angus Kong @Override 9544c1afb9dac08e02004244e602469c29a27487b6Sascha Haeberling public boolean executeDeletion() { 9644c1afb9dac08e02004244e602469c29a27487b6Sascha Haeberling return mAdapter.executeDeletion(); 978e5e4eedb25a4589342660b928935acca4375fc7Angus Kong } 988e5e4eedb25a4589342660b928935acca4375fc7Angus Kong 998e5e4eedb25a4589342660b928935acca4375fc7Angus Kong @Override 1008e5e4eedb25a4589342660b928935acca4375fc7Angus Kong public boolean undoDataRemoval() { 1018e5e4eedb25a4589342660b928935acca4375fc7Angus Kong return mAdapter.undoDataRemoval(); 1028e5e4eedb25a4589342660b928935acca4375fc7Angus Kong } 10337f3611bbdc787c996a99894dcef7d8fb77e3f7cSascha Haeberling 10437f3611bbdc787c996a99894dcef7d8fb77e3f7cSascha Haeberling @Override 105455ba5a146484d2af4a4fb44eb50ad294834dfa0Seth Raphael public void refresh(Uri uri) { 106455ba5a146484d2af4a4fb44eb50ad294834dfa0Seth Raphael mAdapter.refresh(uri); 10737f3611bbdc787c996a99894dcef7d8fb77e3f7cSascha Haeberling } 108e2f4c03eaea059e15adf34d8782c433b1f7164dcAngus Kong 109e2f4c03eaea059e15adf34d8782c433b1f7164dcAngus Kong @Override 110de3e9abaa241dc2aa66e5d02ba8b7bd35e0d8f00Sam Judd public AsyncTask updateMetadata(int dataId) { 111de3e9abaa241dc2aa66e5d02ba8b7bd35e0d8f00Sam Judd return mAdapter.updateMetadata(dataId); 112e2f4c03eaea059e15adf34d8782c433b1f7164dcAngus Kong } 113e2f4c03eaea059e15adf34d8782c433b1f7164dcAngus Kong 114e2f4c03eaea059e15adf34d8782c433b1f7164dcAngus Kong @Override 115e2f4c03eaea059e15adf34d8782c433b1f7164dcAngus Kong public boolean isMetadataUpdated(int dataId) { 116e2f4c03eaea059e15adf34d8782c433b1f7164dcAngus Kong return mAdapter.isMetadataUpdated(dataId); 117e2f4c03eaea059e15adf34d8782c433b1f7164dcAngus Kong } 118de3e9abaa241dc2aa66e5d02ba8b7bd35e0d8f00Sam Judd 119de3e9abaa241dc2aa66e5d02ba8b7bd35e0d8f00Sam Judd @Override 120de3e9abaa241dc2aa66e5d02ba8b7bd35e0d8f00Sam Judd public List<AsyncTask> preloadItems(List<Integer> items) { 121de3e9abaa241dc2aa66e5d02ba8b7bd35e0d8f00Sam Judd return mAdapter.preloadItems(items); 122de3e9abaa241dc2aa66e5d02ba8b7bd35e0d8f00Sam Judd } 123de3e9abaa241dc2aa66e5d02ba8b7bd35e0d8f00Sam Judd 124de3e9abaa241dc2aa66e5d02ba8b7bd35e0d8f00Sam Judd @Override 125de3e9abaa241dc2aa66e5d02ba8b7bd35e0d8f00Sam Judd public void cancelItems(List<AsyncTask> loadTokens) { 126de3e9abaa241dc2aa66e5d02ba8b7bd35e0d8f00Sam Judd mAdapter.cancelItems(loadTokens); 127de3e9abaa241dc2aa66e5d02ba8b7bd35e0d8f00Sam Judd } 128de3e9abaa241dc2aa66e5d02ba8b7bd35e0d8f00Sam Judd 129de3e9abaa241dc2aa66e5d02ba8b7bd35e0d8f00Sam Judd @Override 130de3e9abaa241dc2aa66e5d02ba8b7bd35e0d8f00Sam Judd public List<Integer> getItemsInRange(int startPosition, int endPosition) { 131de3e9abaa241dc2aa66e5d02ba8b7bd35e0d8f00Sam Judd return mAdapter.getItemsInRange(startPosition, endPosition); 132de3e9abaa241dc2aa66e5d02ba8b7bd35e0d8f00Sam Judd } 133de3e9abaa241dc2aa66e5d02ba8b7bd35e0d8f00Sam Judd 134de3e9abaa241dc2aa66e5d02ba8b7bd35e0d8f00Sam Judd @Override 135de3e9abaa241dc2aa66e5d02ba8b7bd35e0d8f00Sam Judd public int getCount() { 136de3e9abaa241dc2aa66e5d02ba8b7bd35e0d8f00Sam Judd return mAdapter.getCount(); 137de3e9abaa241dc2aa66e5d02ba8b7bd35e0d8f00Sam Judd } 1388e5e4eedb25a4589342660b928935acca4375fc7Angus Kong} 139