From 8e5e4eedb25a4589342660b928935acca4375fc7 Mon Sep 17 00:00:00 2001 From: Angus Kong Date: Tue, 30 Jul 2013 11:36:00 -0700 Subject: Add LocalDataAdapter and wrappers. 1. FixedFirstDataAdapter wraps another adapter and add a data at the first position. 2. FixedLastDataAdapter wraps another adapter and add a data at the last position. 3. Make the LocalData interface more complete. - onFullScreen() - canSwipeInFullScreen() - getPath() 3. Add methods to the FilmStripView.DataAdapter to receive UI events. - onDataCentered() - onDataFullScreen() Change-Id: I26d3a3b7facd0c451af43ce5fbbcab2baaaec427 --- .../android/camera/data/FixedLastDataAdapter.java | 127 +++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 src/com/android/camera/data/FixedLastDataAdapter.java (limited to 'src/com/android/camera/data/FixedLastDataAdapter.java') diff --git a/src/com/android/camera/data/FixedLastDataAdapter.java b/src/com/android/camera/data/FixedLastDataAdapter.java new file mode 100644 index 000000000..16c047d1a --- /dev/null +++ b/src/com/android/camera/data/FixedLastDataAdapter.java @@ -0,0 +1,127 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.camera.data; + +import android.content.Context; +import android.net.Uri; +import android.view.View; + +import com.android.camera.ui.FilmStripView; + +/** + * A {@link LocalDataAdapter} which puts a {@link LocalData} fixed at the last + * position. It's done by combining a {@link LocalData} and another + * {@link LocalDataAdapter}. + */ +public class FixedLastDataAdapter extends AbstractLocalDataAdapterWrapper { + + private final LocalData mLastData; + + /** + * Constructor. + * + * @param wrappedAdapter The {@link LocalDataAdapter} to be wrapped. + * @param lastData The {@link LocalData} to be placed at the last position. + */ + public FixedLastDataAdapter( + LocalDataAdapter wrappedAdapter, + LocalData lastData) { + super(wrappedAdapter); + if (lastData == null) { + throw new AssertionError("data is null"); + } + mLastData = lastData; + } + + @Override + public void removeData(Context context, int dataID) { + if (dataID < mAdapter.getTotalNumber()) { + mAdapter.removeData(context, dataID); + } + } + + @Override + public int findDataByContentUri(Uri uri) { + return mAdapter.findDataByContentUri(uri); + } + + @Override + public int getTotalNumber() { + return mAdapter.getTotalNumber() + 1; + } + + @Override + public View getView(Context context, int dataID) { + int totalNumber = mAdapter.getTotalNumber(); + + if (dataID < totalNumber) { + return mAdapter.getView(context, dataID); + } else if (dataID == totalNumber) { + return mLastData.getView(context, + mSuggestedWidth, mSuggestedHeight, null); + } + + return null; + } + + @Override + public FilmStripView.ImageData getImageData(int dataID) { + int totalNumber = mAdapter.getTotalNumber(); + + if (dataID < totalNumber) { + return mAdapter.getImageData(dataID); + } else if (dataID == totalNumber) { + return mLastData; + } + return null; + } + + @Override + public void onDataFullScreen(int dataID, boolean fullScreen) { + int totalNumber = mAdapter.getTotalNumber(); + + if (dataID < totalNumber) { + mAdapter.onDataFullScreen(dataID, fullScreen); + } else if (dataID == totalNumber) { + mLastData.onFullScreen(fullScreen); + } + } + + @Override + public void onDataCentered(int dataID, boolean centered) { + int totalNumber = mAdapter.getTotalNumber(); + + if (dataID < totalNumber) { + mAdapter.onDataCentered(dataID, centered); + } else if (dataID == totalNumber) { + // TODO: notify the data + } + } + + @Override + public boolean canSwipeInFullScreen(int dataID) { + int totalNumber = mAdapter.getTotalNumber(); + + if (dataID < totalNumber) { + return mAdapter.canSwipeInFullScreen(dataID); + } else if (dataID == totalNumber) { + return mLastData.canSwipeInFullScreen(); + } + return false; + } +} + -- cgit v1.2.3