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