/*
|
* 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.filmstrip;
|
|
import android.view.View;
|
|
import com.android.camera.app.CameraAppUI;
|
import com.android.camera.data.FilmstripItem;
|
|
/**
|
* An interface which defines the controller of filmstrip.
|
* A filmstrip has 4 states:
|
* <ol>
|
* <li>Filmstrip</li>
|
* Images are scaled down and the user can navigate quickly by swiping.
|
* Action bar and controls are shown.
|
* <li>Full-screen</li>
|
* One single image occupies the whole screen. Action bar and controls are
|
* hidden.
|
* <li>Zoom view</li>
|
* Zoom in to view the details of one single image.
|
* </ol>
|
* Only the following state transitions can happen:
|
* <ol>
|
* <li>filmstrip --> full-screen</li>
|
* <li>full-screen --> filmstrip</li>
|
* <li>full-screen --> full-screen with UIs</li>
|
* <li>full-screen --> zoom view</li>
|
* <li>zoom view --> full-screen</li>
|
* </ol>
|
*
|
* Upon entering/leaving each of the states, the
|
* {@link com.android.camera.filmstrip.FilmstripController.FilmstripListener} will be notified.
|
*/
|
public interface FilmstripController {
|
|
/**
|
* Sets the listener for filmstrip events.
|
*
|
* @param listener
|
*/
|
public void setListener(FilmstripListener listener);
|
|
/**
|
* Sets the gap width between each images on the filmstrip.
|
*
|
* @param imageGap The gap width in pixels.
|
*/
|
public void setImageGap(int imageGap);
|
|
/**
|
* @return The ID of the current item, or -1.
|
*/
|
public int getCurrentAdapterIndex();
|
|
/**
|
* Sets the {@link FilmstripDataAdapter}.
|
*/
|
public void setDataAdapter(FilmstripDataAdapter adapter);
|
|
/**
|
* Returns whether the filmstrip is in filmstrip mode.
|
*/
|
public boolean inFilmstrip();
|
|
/**
|
* @return Whether the filmstrip is in full-screen mode.
|
*/
|
public boolean inFullScreen();
|
|
/**
|
* @return Whether the filmstrip is in scaling animation.
|
*/
|
public boolean isScaling();
|
|
/**
|
* Scrolls the filmstrip horizontally.
|
*
|
* @param deltaX The distance in pixel The filmstrip will be scrolled by.
|
*/
|
public void scroll(float deltaX);
|
|
/**
|
* Flings the filmstrip horizontally.
|
*
|
* @param velocity
|
*/
|
public void fling(float velocity);
|
|
/**
|
* Scrolls the filmstrip horizontally to a specific position.
|
*
|
* @param position The final position.
|
* @param duration The duration of this scrolling.
|
* @param interruptible Whether this scrolling can be interrupted.
|
*/
|
public void scrollToPosition(int position, int duration, boolean interruptible);
|
|
/**
|
* Scrolls the filmstrip horizontally to the center of the next item.
|
*
|
* @return Whether the next item exists.
|
*/
|
public boolean goToNextItem();
|
|
/**
|
* Scrolls the filmstrip horizontally to the center of the previous item.
|
*
|
* @return Whether the previous item exists.
|
*/
|
public boolean goToPreviousItem();
|
|
/**
|
* Stops the scrolling.
|
*
|
* @param forced Forces to stop even if the scrolling can not be
|
* interrupted.
|
* @return Whether the scrolling is stopped.
|
*/
|
public boolean stopScrolling(boolean forced);
|
|
/**
|
* Returns whether the filmstrip is scrolling.
|
* @return
|
*/
|
public boolean isScrolling();
|
|
/**
|
* Puts the first item in the center in full-screen.
|
*/
|
public void goToFirstItem();
|
|
/**
|
* Scales down to filmstrip mode. If the current item is camera preview,
|
* scrolls to the next item.
|
*/
|
public void goToFilmstrip();
|
|
/**
|
* Scales up to full-screen mode.
|
*/
|
public void goToFullScreen();
|
|
/**
|
* Returns true if the supplied element is present and its view reports
|
* {@link View#VISIBLE}, such that it would be visible if onscreen. Note
|
* the filmstrip view itself might not be visible, if caller needs to check
|
* whether the filmstrip is visible, see
|
* {@link CameraAppUI#getFilmstripVisibility()}.
|
*
|
* @param data an item which can be present in the filmstrip.
|
* @return true if the view corresponding to the item has visibility of
|
* {@link View#VISIBLE}, false otherwise.
|
*/
|
public boolean isVisible(FilmstripItem data);
|
|
/**
|
* An interface which defines the FilmStripView UI action listener.
|
*/
|
interface FilmstripListener {
|
|
/**
|
* Callback when the data item is promoted. A data is promoted if the user
|
* swipe up a data vertically.
|
*
|
* @param adapterIndex The ID of the promoted data.
|
*/
|
public void onFocusedDataPromoted(int adapterIndex);
|
|
/**
|
* Callback when the data item is demoted. A data is promoted if the user
|
* swipe down a data vertically.
|
*
|
* @param adapterIndex The ID of the demoted data.
|
*/
|
public void onFocusedDataDemoted(int adapterIndex);
|
|
/**
|
* Callback when the data item is long-pressed.
|
*
|
* @param adapterIndex The ID of the long-pressed data.
|
*/
|
public void onFocusedDataLongPressed(int adapterIndex);
|
|
/**
|
* Called when all the data has been reloaded.
|
*/
|
public void onDataReloaded();
|
|
/**
|
* Called when data is updated.
|
*
|
* @param adapterIndex The ID of the updated data.
|
*/
|
public void onDataUpdated(int adapterIndex);
|
|
/**
|
* The callback when the item enters augmented full-screen state.
|
*
|
* @param adapterIndex The ID of the current focused image data.
|
*/
|
public void onEnterFullScreenUiShown(int adapterIndex);
|
|
/**
|
* The callback when the item leaves augmented full-screen.
|
*
|
* @param adapterIndex The ID of the current focused image data.
|
*/
|
public void onLeaveFullScreenUiShown(int adapterIndex);
|
|
/**
|
* The callback when the filmstrip enters no UI full-screen.
|
*
|
* @param adapterIndex The ID of the current focused image data.
|
*/
|
public void onEnterFullScreenUiHidden(int adapterIndex);
|
|
/**
|
* The callback when the filmstrip leaves no UI full-screen.
|
*
|
* @param adapterIndex The ID of the current focused image data.
|
*/
|
public void onLeaveFullScreenUiHidden(int adapterIndex);
|
|
/**
|
* The callback when the item enters filmstrip.
|
*
|
* @param adapterIndex The ID of the current focused image data.
|
*/
|
public void onEnterFilmstrip(int adapterIndex);
|
|
/**
|
* The callback when the item leaves filmstrip.
|
*
|
* @param adapterIndex The ID of the current focused image data.
|
*/
|
public void onLeaveFilmstrip(int adapterIndex);
|
|
/**
|
* The callback when the item enters zoom view.
|
*
|
* @param adapterIndex
|
*/
|
public void onEnterZoomView(int adapterIndex);
|
|
/**
|
* Called when current item or zoom level has changed.
|
*
|
* @param adapterIndex The ID of the current focused image data.
|
* @param zoom Zoom level.
|
*/
|
public void onZoomAtIndexChanged(int adapterIndex, float zoom);
|
|
/**
|
* The callback when the data focus changed.
|
*
|
* @param prevIndex The ID of the previously focused data or {@code -1} if
|
* none.
|
* @param newIndex The ID of the focused data of {@code -1} if none.
|
*/
|
public void onDataFocusChanged(int prevIndex, int newIndex);
|
|
/**
|
* The callback when we scroll.
|
*
|
* @param firstVisiblePosition The position of the first rendered item
|
* (may be slightly offscreen depending on
|
* the orientation of the device).
|
* @param visibleItemCount The total number of rendered items.
|
* @param totalItemCount The total number of items in the filmstrip.
|
*/
|
public void onScroll(int firstVisiblePosition, int visibleItemCount, int totalItemCount);
|
}
|
}
|