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
19b7639c641f2ed5d0c60546349c3aa9e90c026878Sascha Haeberlingimport android.app.Activity;
208e5e4eedb25a4589342660b928935acca4375fc7Angus Kongimport android.content.Context;
218e5e4eedb25a4589342660b928935acca4375fc7Angus Kongimport android.net.Uri;
228e5e4eedb25a4589342660b928935acca4375fc7Angus Kongimport android.view.View;
238e5e4eedb25a4589342660b928935acca4375fc7Angus Kong
248e5e4eedb25a4589342660b928935acca4375fc7Angus Kongimport com.android.camera.ui.FilmStripView;
258e5e4eedb25a4589342660b928935acca4375fc7Angus Kong
268e5e4eedb25a4589342660b928935acca4375fc7Angus Kong/**
278e5e4eedb25a4589342660b928935acca4375fc7Angus Kong * A {@link LocalDataAdapter} which puts a {@link LocalData} fixed at the last
288e5e4eedb25a4589342660b928935acca4375fc7Angus Kong * position. It's done by combining a {@link LocalData} and another
298e5e4eedb25a4589342660b928935acca4375fc7Angus Kong * {@link LocalDataAdapter}.
308e5e4eedb25a4589342660b928935acca4375fc7Angus Kong */
318e5e4eedb25a4589342660b928935acca4375fc7Angus Kongpublic class FixedLastDataAdapter extends AbstractLocalDataAdapterWrapper {
328e5e4eedb25a4589342660b928935acca4375fc7Angus Kong
3337f3611bbdc787c996a99894dcef7d8fb77e3f7cSascha Haeberling    private LocalData mLastData;
3437f3611bbdc787c996a99894dcef7d8fb77e3f7cSascha Haeberling    private Listener mListener;
358e5e4eedb25a4589342660b928935acca4375fc7Angus Kong
368e5e4eedb25a4589342660b928935acca4375fc7Angus Kong    /**
378e5e4eedb25a4589342660b928935acca4375fc7Angus Kong     * Constructor.
388e5e4eedb25a4589342660b928935acca4375fc7Angus Kong     *
398e5e4eedb25a4589342660b928935acca4375fc7Angus Kong     * @param wrappedAdapter  The {@link LocalDataAdapter} to be wrapped.
408e5e4eedb25a4589342660b928935acca4375fc7Angus Kong     * @param lastData       The {@link LocalData} to be placed at the last position.
418e5e4eedb25a4589342660b928935acca4375fc7Angus Kong     */
428e5e4eedb25a4589342660b928935acca4375fc7Angus Kong    public FixedLastDataAdapter(
438e5e4eedb25a4589342660b928935acca4375fc7Angus Kong            LocalDataAdapter wrappedAdapter,
448e5e4eedb25a4589342660b928935acca4375fc7Angus Kong            LocalData lastData) {
458e5e4eedb25a4589342660b928935acca4375fc7Angus Kong        super(wrappedAdapter);
468e5e4eedb25a4589342660b928935acca4375fc7Angus Kong        if (lastData == null) {
478e5e4eedb25a4589342660b928935acca4375fc7Angus Kong            throw new AssertionError("data is null");
488e5e4eedb25a4589342660b928935acca4375fc7Angus Kong        }
498e5e4eedb25a4589342660b928935acca4375fc7Angus Kong        mLastData = lastData;
508e5e4eedb25a4589342660b928935acca4375fc7Angus Kong    }
518e5e4eedb25a4589342660b928935acca4375fc7Angus Kong
528e5e4eedb25a4589342660b928935acca4375fc7Angus Kong    @Override
5337f3611bbdc787c996a99894dcef7d8fb77e3f7cSascha Haeberling    public void setListener(Listener listener) {
5437f3611bbdc787c996a99894dcef7d8fb77e3f7cSascha Haeberling        super.setListener(listener);
5537f3611bbdc787c996a99894dcef7d8fb77e3f7cSascha Haeberling        mListener = listener;
5637f3611bbdc787c996a99894dcef7d8fb77e3f7cSascha Haeberling    }
5737f3611bbdc787c996a99894dcef7d8fb77e3f7cSascha Haeberling
5837f3611bbdc787c996a99894dcef7d8fb77e3f7cSascha Haeberling    @Override
5937f3611bbdc787c996a99894dcef7d8fb77e3f7cSascha Haeberling    public LocalData getLocalData(int dataID) {
6037f3611bbdc787c996a99894dcef7d8fb77e3f7cSascha Haeberling        int totalNumber = mAdapter.getTotalNumber();
6137f3611bbdc787c996a99894dcef7d8fb77e3f7cSascha Haeberling
6237f3611bbdc787c996a99894dcef7d8fb77e3f7cSascha Haeberling        if (dataID < totalNumber) {
6337f3611bbdc787c996a99894dcef7d8fb77e3f7cSascha Haeberling            return mAdapter.getLocalData(dataID);
6437f3611bbdc787c996a99894dcef7d8fb77e3f7cSascha Haeberling        } else if (dataID == totalNumber) {
6537f3611bbdc787c996a99894dcef7d8fb77e3f7cSascha Haeberling            return mLastData;
6637f3611bbdc787c996a99894dcef7d8fb77e3f7cSascha Haeberling        }
6737f3611bbdc787c996a99894dcef7d8fb77e3f7cSascha Haeberling
6837f3611bbdc787c996a99894dcef7d8fb77e3f7cSascha Haeberling        return null;
6937f3611bbdc787c996a99894dcef7d8fb77e3f7cSascha Haeberling    }
7037f3611bbdc787c996a99894dcef7d8fb77e3f7cSascha Haeberling
7137f3611bbdc787c996a99894dcef7d8fb77e3f7cSascha Haeberling    @Override
728e5e4eedb25a4589342660b928935acca4375fc7Angus Kong    public void removeData(Context context, int dataID) {
738e5e4eedb25a4589342660b928935acca4375fc7Angus Kong        if (dataID < mAdapter.getTotalNumber()) {
748e5e4eedb25a4589342660b928935acca4375fc7Angus Kong            mAdapter.removeData(context, dataID);
758e5e4eedb25a4589342660b928935acca4375fc7Angus Kong        }
768e5e4eedb25a4589342660b928935acca4375fc7Angus Kong    }
778e5e4eedb25a4589342660b928935acca4375fc7Angus Kong
788e5e4eedb25a4589342660b928935acca4375fc7Angus Kong    @Override
798e5e4eedb25a4589342660b928935acca4375fc7Angus Kong    public int findDataByContentUri(Uri uri) {
808e5e4eedb25a4589342660b928935acca4375fc7Angus Kong        return mAdapter.findDataByContentUri(uri);
818e5e4eedb25a4589342660b928935acca4375fc7Angus Kong    }
828e5e4eedb25a4589342660b928935acca4375fc7Angus Kong
838e5e4eedb25a4589342660b928935acca4375fc7Angus Kong    @Override
8437f3611bbdc787c996a99894dcef7d8fb77e3f7cSascha Haeberling    public void updateData(final int pos, LocalData data) {
8537f3611bbdc787c996a99894dcef7d8fb77e3f7cSascha Haeberling        int totalNumber = mAdapter.getTotalNumber();
8637f3611bbdc787c996a99894dcef7d8fb77e3f7cSascha Haeberling
8737f3611bbdc787c996a99894dcef7d8fb77e3f7cSascha Haeberling        if (pos < totalNumber) {
8837f3611bbdc787c996a99894dcef7d8fb77e3f7cSascha Haeberling            mAdapter.updateData(pos, data);
8937f3611bbdc787c996a99894dcef7d8fb77e3f7cSascha Haeberling        } else if (pos == totalNumber) {
9037f3611bbdc787c996a99894dcef7d8fb77e3f7cSascha Haeberling            mLastData = data;
9137f3611bbdc787c996a99894dcef7d8fb77e3f7cSascha Haeberling            if (mListener != null) {
9237f3611bbdc787c996a99894dcef7d8fb77e3f7cSascha Haeberling                mListener.onDataUpdated(new UpdateReporter() {
9337f3611bbdc787c996a99894dcef7d8fb77e3f7cSascha Haeberling                    @Override
9437f3611bbdc787c996a99894dcef7d8fb77e3f7cSascha Haeberling                    public boolean isDataRemoved(int dataID) {
9537f3611bbdc787c996a99894dcef7d8fb77e3f7cSascha Haeberling                        return false;
9637f3611bbdc787c996a99894dcef7d8fb77e3f7cSascha Haeberling                    }
9737f3611bbdc787c996a99894dcef7d8fb77e3f7cSascha Haeberling
9837f3611bbdc787c996a99894dcef7d8fb77e3f7cSascha Haeberling                    @Override
9937f3611bbdc787c996a99894dcef7d8fb77e3f7cSascha Haeberling                    public boolean isDataUpdated(int dataID) {
10037f3611bbdc787c996a99894dcef7d8fb77e3f7cSascha Haeberling                        return (dataID == pos);
10137f3611bbdc787c996a99894dcef7d8fb77e3f7cSascha Haeberling                    }
10237f3611bbdc787c996a99894dcef7d8fb77e3f7cSascha Haeberling                });
10337f3611bbdc787c996a99894dcef7d8fb77e3f7cSascha Haeberling            }
10437f3611bbdc787c996a99894dcef7d8fb77e3f7cSascha Haeberling        }
10537f3611bbdc787c996a99894dcef7d8fb77e3f7cSascha Haeberling    }
10637f3611bbdc787c996a99894dcef7d8fb77e3f7cSascha Haeberling
10737f3611bbdc787c996a99894dcef7d8fb77e3f7cSascha Haeberling    @Override
1088e5e4eedb25a4589342660b928935acca4375fc7Angus Kong    public int getTotalNumber() {
1098e5e4eedb25a4589342660b928935acca4375fc7Angus Kong        return mAdapter.getTotalNumber() + 1;
1108e5e4eedb25a4589342660b928935acca4375fc7Angus Kong    }
1118e5e4eedb25a4589342660b928935acca4375fc7Angus Kong
1128e5e4eedb25a4589342660b928935acca4375fc7Angus Kong    @Override
113b7639c641f2ed5d0c60546349c3aa9e90c026878Sascha Haeberling    public View getView(Activity activity, int dataID) {
1148e5e4eedb25a4589342660b928935acca4375fc7Angus Kong        int totalNumber = mAdapter.getTotalNumber();
1158e5e4eedb25a4589342660b928935acca4375fc7Angus Kong
1168e5e4eedb25a4589342660b928935acca4375fc7Angus Kong        if (dataID < totalNumber) {
117b7639c641f2ed5d0c60546349c3aa9e90c026878Sascha Haeberling            return mAdapter.getView(activity, dataID);
1188e5e4eedb25a4589342660b928935acca4375fc7Angus Kong        } else if (dataID == totalNumber) {
119b7639c641f2ed5d0c60546349c3aa9e90c026878Sascha Haeberling            return mLastData.getView(activity,
120b7be228d192cb8f91079caaa2f77a884a40b1160ztenghui                    mSuggestedWidth, mSuggestedHeight, null, null);
1218e5e4eedb25a4589342660b928935acca4375fc7Angus Kong        }
1228e5e4eedb25a4589342660b928935acca4375fc7Angus Kong
1238e5e4eedb25a4589342660b928935acca4375fc7Angus Kong        return null;
1248e5e4eedb25a4589342660b928935acca4375fc7Angus Kong    }
1258e5e4eedb25a4589342660b928935acca4375fc7Angus Kong
1268e5e4eedb25a4589342660b928935acca4375fc7Angus Kong    @Override
1278e5e4eedb25a4589342660b928935acca4375fc7Angus Kong    public FilmStripView.ImageData getImageData(int dataID) {
1288e5e4eedb25a4589342660b928935acca4375fc7Angus Kong        int totalNumber = mAdapter.getTotalNumber();
1298e5e4eedb25a4589342660b928935acca4375fc7Angus Kong
1308e5e4eedb25a4589342660b928935acca4375fc7Angus Kong        if (dataID < totalNumber) {
1318e5e4eedb25a4589342660b928935acca4375fc7Angus Kong            return mAdapter.getImageData(dataID);
1328e5e4eedb25a4589342660b928935acca4375fc7Angus Kong        } else if (dataID == totalNumber) {
1338e5e4eedb25a4589342660b928935acca4375fc7Angus Kong            return mLastData;
1348e5e4eedb25a4589342660b928935acca4375fc7Angus Kong        }
1358e5e4eedb25a4589342660b928935acca4375fc7Angus Kong        return null;
1368e5e4eedb25a4589342660b928935acca4375fc7Angus Kong    }
1378e5e4eedb25a4589342660b928935acca4375fc7Angus Kong
1388e5e4eedb25a4589342660b928935acca4375fc7Angus Kong    @Override
1398e5e4eedb25a4589342660b928935acca4375fc7Angus Kong    public boolean canSwipeInFullScreen(int dataID) {
1408e5e4eedb25a4589342660b928935acca4375fc7Angus Kong        int totalNumber = mAdapter.getTotalNumber();
1418e5e4eedb25a4589342660b928935acca4375fc7Angus Kong
1428e5e4eedb25a4589342660b928935acca4375fc7Angus Kong        if (dataID < totalNumber) {
1438e5e4eedb25a4589342660b928935acca4375fc7Angus Kong            return mAdapter.canSwipeInFullScreen(dataID);
1448e5e4eedb25a4589342660b928935acca4375fc7Angus Kong        } else if (dataID == totalNumber) {
1458e5e4eedb25a4589342660b928935acca4375fc7Angus Kong            return mLastData.canSwipeInFullScreen();
1468e5e4eedb25a4589342660b928935acca4375fc7Angus Kong        }
1478e5e4eedb25a4589342660b928935acca4375fc7Angus Kong        return false;
1488e5e4eedb25a4589342660b928935acca4375fc7Angus Kong    }
1498e5e4eedb25a4589342660b928935acca4375fc7Angus Kong}
1508e5e4eedb25a4589342660b928935acca4375fc7Angus Kong
151