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