summaryrefslogtreecommitdiffstats
path: root/src/com/android/gallery3d/app/TrimTimeBar.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/gallery3d/app/TrimTimeBar.java')
-rw-r--r--src/com/android/gallery3d/app/TrimTimeBar.java339
1 files changed, 0 insertions, 339 deletions
diff --git a/src/com/android/gallery3d/app/TrimTimeBar.java b/src/com/android/gallery3d/app/TrimTimeBar.java
deleted file mode 100644
index f8dbc749e..000000000
--- a/src/com/android/gallery3d/app/TrimTimeBar.java
+++ /dev/null
@@ -1,339 +0,0 @@
-/*
- * Copyright (C) 2012 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.gallery3d.app;
-
-import android.content.Context;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.graphics.Canvas;
-import android.view.MotionEvent;
-
-import com.android.gallery3d.R;
-
-/**
- * The trim time bar view, which includes the current and total time, the progress
- * bar, and the scrubbers for current time, start and end time for trimming.
- */
-public class TrimTimeBar extends TimeBar {
-
- public static final int SCRUBBER_NONE = 0;
- public static final int SCRUBBER_START = 1;
- public static final int SCRUBBER_CURRENT = 2;
- public static final int SCRUBBER_END = 3;
-
- private int mPressedThumb = SCRUBBER_NONE;
-
- // On touch event, the setting order is Scrubber Position -> Time ->
- // PlayedBar. At the setTimes(), activity can update the Time directly, then
- // PlayedBar will be updated too.
- private int mTrimStartScrubberLeft;
- private int mTrimEndScrubberLeft;
-
- private int mTrimStartScrubberTop;
- private int mTrimEndScrubberTop;
-
- private int mTrimStartTime;
- private int mTrimEndTime;
-
- private final Bitmap mTrimStartScrubber;
- private final Bitmap mTrimEndScrubber;
- public TrimTimeBar(Context context, Listener listener) {
- super(context, listener);
-
- mTrimStartTime = 0;
- mTrimEndTime = 0;
- mTrimStartScrubberLeft = 0;
- mTrimEndScrubberLeft = 0;
- mTrimStartScrubberTop = 0;
- mTrimEndScrubberTop = 0;
-
- mTrimStartScrubber = BitmapFactory.decodeResource(getResources(),
- R.drawable.text_select_handle_left);
- mTrimEndScrubber = BitmapFactory.decodeResource(getResources(),
- R.drawable.text_select_handle_right);
- // Increase the size of this trimTimeBar, but minimize the scrubber
- // touch padding since we have 3 scrubbers now.
- mScrubberPadding = 0;
- mVPaddingInPx = mVPaddingInPx * 3 / 2;
- }
-
- private int getBarPosFromTime(int time) {
- return mProgressBar.left +
- (int) ((mProgressBar.width() * (long) time) / mTotalTime);
- }
-
- private int trimStartScrubberTipOffset() {
- return mTrimStartScrubber.getWidth() * 3 / 4;
- }
-
- private int trimEndScrubberTipOffset() {
- return mTrimEndScrubber.getWidth() / 4;
- }
-
- // Based on all the time info (current, total, trimStart, trimEnd), we
- // decide the playedBar size.
- private void updatePlayedBarAndScrubberFromTime() {
- // According to the Time, update the Played Bar
- mPlayedBar.set(mProgressBar);
- if (mTotalTime > 0) {
- // set playedBar according to the trim time.
- mPlayedBar.left = getBarPosFromTime(mTrimStartTime);
- mPlayedBar.right = getBarPosFromTime(mCurrentTime);
- if (!mScrubbing) {
- mScrubberLeft = mPlayedBar.right - mScrubber.getWidth() / 2;
- mTrimStartScrubberLeft = mPlayedBar.left - trimStartScrubberTipOffset();
- mTrimEndScrubberLeft = getBarPosFromTime(mTrimEndTime)
- - trimEndScrubberTipOffset();
- }
- } else {
- // If the video is not prepared, just show the scrubber at the end
- // of progressBar
- mPlayedBar.right = mProgressBar.left;
- mScrubberLeft = mProgressBar.left - mScrubber.getWidth() / 2;
- mTrimStartScrubberLeft = mProgressBar.left - trimStartScrubberTipOffset();
- mTrimEndScrubberLeft = mProgressBar.right - trimEndScrubberTipOffset();
- }
- }
-
- private void initTrimTimeIfNeeded() {
- if (mTotalTime > 0 && mTrimEndTime == 0) {
- mTrimEndTime = mTotalTime;
- }
- }
-
- private void update() {
- initTrimTimeIfNeeded();
- updatePlayedBarAndScrubberFromTime();
- invalidate();
- }
-
- @Override
- public void setTime(int currentTime, int totalTime,
- int trimStartTime, int trimEndTime) {
- if (mCurrentTime == currentTime && mTotalTime == totalTime
- && mTrimStartTime == trimStartTime && mTrimEndTime == trimEndTime) {
- return;
- }
- mCurrentTime = currentTime;
- mTotalTime = totalTime;
- mTrimStartTime = trimStartTime;
- mTrimEndTime = trimEndTime;
- update();
- }
-
- private int whichScrubber(float x, float y) {
- if (inScrubber(x, y, mTrimStartScrubberLeft, mTrimStartScrubberTop, mTrimStartScrubber)) {
- return SCRUBBER_START;
- } else if (inScrubber(x, y, mTrimEndScrubberLeft, mTrimEndScrubberTop, mTrimEndScrubber)) {
- return SCRUBBER_END;
- } else if (inScrubber(x, y, mScrubberLeft, mScrubberTop, mScrubber)) {
- return SCRUBBER_CURRENT;
- }
- return SCRUBBER_NONE;
- }
-
- private boolean inScrubber(float x, float y, int startX, int startY, Bitmap scrubber) {
- int scrubberRight = startX + scrubber.getWidth();
- int scrubberBottom = startY + scrubber.getHeight();
- return startX < x && x < scrubberRight && startY < y && y < scrubberBottom;
- }
-
- private int clampScrubber(int scrubberLeft, int offset, int lowerBound, int upperBound) {
- int max = upperBound - offset;
- int min = lowerBound - offset;
- return Math.min(max, Math.max(min, scrubberLeft));
- }
-
- private int getScrubberTime(int scrubberLeft, int offset) {
- return (int) ((long) (scrubberLeft + offset - mProgressBar.left)
- * mTotalTime / mProgressBar.width());
- }
-
- @Override
- protected void onLayout(boolean changed, int l, int t, int r, int b) {
- int w = r - l;
- int h = b - t;
- if (!mShowTimes && !mShowScrubber) {
- mProgressBar.set(0, 0, w, h);
- } else {
- int margin = mScrubber.getWidth() / 3;
- if (mShowTimes) {
- margin += mTimeBounds.width();
- }
- int progressY = h / 4;
- int scrubberY = progressY - mScrubber.getHeight() / 2 + 1;
- mScrubberTop = scrubberY;
- mTrimStartScrubberTop = progressY;
- mTrimEndScrubberTop = progressY;
- mProgressBar.set(
- getPaddingLeft() + margin, progressY,
- w - getPaddingRight() - margin, progressY + 4);
- }
- update();
- }
-
- @Override
- protected void onDraw(Canvas canvas) {
- // draw progress bars
- canvas.drawRect(mProgressBar, mProgressPaint);
- canvas.drawRect(mPlayedBar, mPlayedPaint);
-
- if (mShowTimes) {
- canvas.drawText(
- stringForTime(mCurrentTime),
- mTimeBounds.width() / 2 + getPaddingLeft(),
- mTimeBounds.height() / 2 + mTrimStartScrubberTop,
- mTimeTextPaint);
- canvas.drawText(
- stringForTime(mTotalTime),
- getWidth() - getPaddingRight() - mTimeBounds.width() / 2,
- mTimeBounds.height() / 2 + mTrimStartScrubberTop,
- mTimeTextPaint);
- }
-
- // draw extra scrubbers
- if (mShowScrubber) {
- canvas.drawBitmap(mScrubber, mScrubberLeft, mScrubberTop, null);
- canvas.drawBitmap(mTrimStartScrubber, mTrimStartScrubberLeft,
- mTrimStartScrubberTop, null);
- canvas.drawBitmap(mTrimEndScrubber, mTrimEndScrubberLeft,
- mTrimEndScrubberTop, null);
- }
- }
-
- private void updateTimeFromPos() {
- mCurrentTime = getScrubberTime(mScrubberLeft, mScrubber.getWidth() / 2);
- mTrimStartTime = getScrubberTime(mTrimStartScrubberLeft, trimStartScrubberTipOffset());
- mTrimEndTime = getScrubberTime(mTrimEndScrubberLeft, trimEndScrubberTipOffset());
- }
-
- @Override
- public boolean onTouchEvent(MotionEvent event) {
- if (mShowScrubber) {
- int x = (int) event.getX();
- int y = (int) event.getY();
-
- switch (event.getAction()) {
- case MotionEvent.ACTION_DOWN:
- mPressedThumb = whichScrubber(x, y);
- switch (mPressedThumb) {
- case SCRUBBER_NONE:
- break;
- case SCRUBBER_CURRENT:
- mScrubbing = true;
- mScrubberCorrection = x - mScrubberLeft;
- break;
- case SCRUBBER_START:
- mScrubbing = true;
- mScrubberCorrection = x - mTrimStartScrubberLeft;
- break;
- case SCRUBBER_END:
- mScrubbing = true;
- mScrubberCorrection = x - mTrimEndScrubberLeft;
- break;
- }
- if (mScrubbing == true) {
- mListener.onScrubbingStart();
- return true;
- }
- break;
- case MotionEvent.ACTION_MOVE:
- if (mScrubbing) {
- int seekToTime = -1;
- int lowerBound = mTrimStartScrubberLeft + trimStartScrubberTipOffset();
- int upperBound = mTrimEndScrubberLeft + trimEndScrubberTipOffset();
- switch (mPressedThumb) {
- case SCRUBBER_CURRENT:
- mScrubberLeft = x - mScrubberCorrection;
- mScrubberLeft =
- clampScrubber(mScrubberLeft,
- mScrubber.getWidth() / 2,
- lowerBound, upperBound);
- seekToTime = getScrubberTime(mScrubberLeft,
- mScrubber.getWidth() / 2);
- break;
- case SCRUBBER_START:
- mTrimStartScrubberLeft = x - mScrubberCorrection;
- // Limit start <= end
- if (mTrimStartScrubberLeft > mTrimEndScrubberLeft) {
- mTrimStartScrubberLeft = mTrimEndScrubberLeft;
- }
- lowerBound = mProgressBar.left;
- mTrimStartScrubberLeft =
- clampScrubber(mTrimStartScrubberLeft,
- trimStartScrubberTipOffset(),
- lowerBound, upperBound);
- seekToTime = getScrubberTime(mTrimStartScrubberLeft,
- trimStartScrubberTipOffset());
- break;
- case SCRUBBER_END:
- mTrimEndScrubberLeft = x - mScrubberCorrection;
- upperBound = mProgressBar.right;
- mTrimEndScrubberLeft =
- clampScrubber(mTrimEndScrubberLeft,
- trimEndScrubberTipOffset(),
- lowerBound, upperBound);
- seekToTime = getScrubberTime(mTrimEndScrubberLeft,
- trimEndScrubberTipOffset());
- break;
- }
- updateTimeFromPos();
- updatePlayedBarAndScrubberFromTime();
- if (seekToTime != -1) {
- mListener.onScrubbingMove(seekToTime);
- }
- invalidate();
- return true;
- }
- break;
- case MotionEvent.ACTION_CANCEL:
- case MotionEvent.ACTION_UP:
- if (mScrubbing) {
- int seekToTime = 0;
- switch (mPressedThumb) {
- case SCRUBBER_CURRENT:
- seekToTime = getScrubberTime(mScrubberLeft,
- mScrubber.getWidth() / 2);
- break;
- case SCRUBBER_START:
- seekToTime = getScrubberTime(mTrimStartScrubberLeft,
- trimStartScrubberTipOffset());
- mScrubberLeft = mTrimStartScrubberLeft +
- trimStartScrubberTipOffset() - mScrubber.getWidth() / 2;
- break;
- case SCRUBBER_END:
- seekToTime = getScrubberTime(mTrimEndScrubberLeft,
- trimEndScrubberTipOffset());
- mScrubberLeft = mTrimEndScrubberLeft +
- trimEndScrubberTipOffset() - mScrubber.getWidth() / 2;
- break;
- }
- updateTimeFromPos();
- mListener.onScrubbingEnd(seekToTime,
- getScrubberTime(mTrimStartScrubberLeft,
- trimStartScrubberTipOffset()),
- getScrubberTime(mTrimEndScrubberLeft, trimEndScrubberTipOffset()));
- mScrubbing = false;
- mPressedThumb = SCRUBBER_NONE;
- return true;
- }
- break;
- }
- }
- return false;
- }
-}