summaryrefslogtreecommitdiffstats
path: root/src/com/android/gallery3d/app/TrimVideo.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/gallery3d/app/TrimVideo.java')
-rw-r--r--src/com/android/gallery3d/app/TrimVideo.java337
1 files changed, 0 insertions, 337 deletions
diff --git a/src/com/android/gallery3d/app/TrimVideo.java b/src/com/android/gallery3d/app/TrimVideo.java
deleted file mode 100644
index 1e7728162..000000000
--- a/src/com/android/gallery3d/app/TrimVideo.java
+++ /dev/null
@@ -1,337 +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.app.ActionBar;
-import android.app.Activity;
-import android.app.ProgressDialog;
-import android.content.Context;
-import android.content.Intent;
-import android.media.MediaPlayer;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.Handler;
-import android.provider.MediaStore;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.Window;
-import android.widget.TextView;
-import android.widget.Toast;
-import android.widget.VideoView;
-
-import com.android.gallery3d.R;
-import com.android.gallery3d.util.SaveVideoFileInfo;
-import com.android.gallery3d.util.SaveVideoFileUtils;
-
-import java.io.File;
-import java.io.IOException;
-
-public class TrimVideo extends Activity implements
- MediaPlayer.OnErrorListener,
- MediaPlayer.OnCompletionListener,
- ControllerOverlay.Listener {
-
- private VideoView mVideoView;
- private TextView mSaveVideoTextView;
- private TrimControllerOverlay mController;
- private Context mContext;
- private Uri mUri;
- private final Handler mHandler = new Handler();
- public static final String TRIM_ACTION = "com.android.camera.action.TRIM";
-
- public ProgressDialog mProgress;
-
- private int mTrimStartTime = 0;
- private int mTrimEndTime = 0;
- private int mVideoPosition = 0;
- public static final String KEY_TRIM_START = "trim_start";
- public static final String KEY_TRIM_END = "trim_end";
- public static final String KEY_VIDEO_POSITION = "video_pos";
- private boolean mHasPaused = false;
-
- private String mSrcVideoPath = null;
- private static final String TIME_STAMP_NAME = "'TRIM'_yyyyMMdd_HHmmss";
- private SaveVideoFileInfo mDstFileInfo = null;
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- mContext = getApplicationContext();
- super.onCreate(savedInstanceState);
-
- requestWindowFeature(Window.FEATURE_ACTION_BAR);
- requestWindowFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
-
- ActionBar actionBar = getActionBar();
- int displayOptions = ActionBar.DISPLAY_SHOW_HOME;
- actionBar.setDisplayOptions(0, displayOptions);
- displayOptions = ActionBar.DISPLAY_SHOW_CUSTOM;
- actionBar.setDisplayOptions(displayOptions, displayOptions);
- actionBar.setCustomView(R.layout.trim_menu);
-
- mSaveVideoTextView = (TextView) findViewById(R.id.start_trim);
- mSaveVideoTextView.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View arg0) {
- trimVideo();
- }
- });
- mSaveVideoTextView.setEnabled(false);
-
- Intent intent = getIntent();
- mUri = intent.getData();
- mSrcVideoPath = intent.getStringExtra(PhotoPage.KEY_MEDIA_ITEM_PATH);
- setContentView(R.layout.trim_view);
- View rootView = findViewById(R.id.trim_view_root);
-
- mVideoView = (VideoView) rootView.findViewById(R.id.surface_view);
-
- mController = new TrimControllerOverlay(mContext);
- ((ViewGroup) rootView).addView(mController.getView());
- mController.setListener(this);
- mController.setCanReplay(true);
-
- mVideoView.setOnErrorListener(this);
- mVideoView.setOnCompletionListener(this);
- mVideoView.setVideoURI(mUri);
-
- playVideo();
- }
-
- @Override
- public void onResume() {
- super.onResume();
- if (mHasPaused) {
- mVideoView.seekTo(mVideoPosition);
- mVideoView.resume();
- mHasPaused = false;
- }
- mHandler.post(mProgressChecker);
- }
-
- @Override
- public void onPause() {
- mHasPaused = true;
- mHandler.removeCallbacksAndMessages(null);
- mVideoPosition = mVideoView.getCurrentPosition();
- mVideoView.suspend();
- super.onPause();
- }
-
- @Override
- public void onStop() {
- if (mProgress != null) {
- mProgress.dismiss();
- mProgress = null;
- }
- super.onStop();
- }
-
- @Override
- public void onDestroy() {
- mVideoView.stopPlayback();
- super.onDestroy();
- }
-
- private final Runnable mProgressChecker = new Runnable() {
- @Override
- public void run() {
- int pos = setProgress();
- mHandler.postDelayed(mProgressChecker, 200 - (pos % 200));
- }
- };
-
- @Override
- public void onSaveInstanceState(Bundle savedInstanceState) {
- savedInstanceState.putInt(KEY_TRIM_START, mTrimStartTime);
- savedInstanceState.putInt(KEY_TRIM_END, mTrimEndTime);
- savedInstanceState.putInt(KEY_VIDEO_POSITION, mVideoPosition);
- super.onSaveInstanceState(savedInstanceState);
- }
-
- @Override
- public void onRestoreInstanceState(Bundle savedInstanceState) {
- super.onRestoreInstanceState(savedInstanceState);
- mTrimStartTime = savedInstanceState.getInt(KEY_TRIM_START, 0);
- mTrimEndTime = savedInstanceState.getInt(KEY_TRIM_END, 0);
- mVideoPosition = savedInstanceState.getInt(KEY_VIDEO_POSITION, 0);
- }
-
- // This updates the time bar display (if necessary). It is called by
- // mProgressChecker and also from places where the time bar needs
- // to be updated immediately.
- private int setProgress() {
- mVideoPosition = mVideoView.getCurrentPosition();
- // If the video position is smaller than the starting point of trimming,
- // correct it.
- if (mVideoPosition < mTrimStartTime) {
- mVideoView.seekTo(mTrimStartTime);
- mVideoPosition = mTrimStartTime;
- }
- // If the position is bigger than the end point of trimming, show the
- // replay button and pause.
- if (mVideoPosition >= mTrimEndTime && mTrimEndTime > 0) {
- if (mVideoPosition > mTrimEndTime) {
- mVideoView.seekTo(mTrimEndTime);
- mVideoPosition = mTrimEndTime;
- }
- mController.showEnded();
- mVideoView.pause();
- }
-
- int duration = mVideoView.getDuration();
- if (duration > 0 && mTrimEndTime == 0) {
- mTrimEndTime = duration;
- }
- mController.setTimes(mVideoPosition, duration, mTrimStartTime, mTrimEndTime);
- return mVideoPosition;
- }
-
- private void playVideo() {
- mVideoView.start();
- mController.showPlaying();
- setProgress();
- }
-
- private void pauseVideo() {
- mVideoView.pause();
- mController.showPaused();
- }
-
-
- private boolean isModified() {
- int delta = mTrimEndTime - mTrimStartTime;
-
- // Considering that we only trim at sync frame, we don't want to trim
- // when the time interval is too short or too close to the origin.
- if (delta < 100 || Math.abs(mVideoView.getDuration() - delta) < 100) {
- return false;
- } else {
- return true;
- }
- }
-
- private void trimVideo() {
-
- mDstFileInfo = SaveVideoFileUtils.getDstMp4FileInfo(TIME_STAMP_NAME,
- getContentResolver(), mUri, getString(R.string.folder_download));
- final File mSrcFile = new File(mSrcVideoPath);
-
- showProgressDialog();
-
- new Thread(new Runnable() {
- @Override
- public void run() {
- try {
- VideoUtils.startTrim(mSrcFile, mDstFileInfo.mFile,
- mTrimStartTime, mTrimEndTime);
- // Update the database for adding a new video file.
- SaveVideoFileUtils.insertContent(mDstFileInfo,
- getContentResolver(), mUri);
- } catch (IOException e) {
- e.printStackTrace();
- }
- // After trimming is done, trigger the UI changed.
- mHandler.post(new Runnable() {
- @Override
- public void run() {
- Toast.makeText(getApplicationContext(),
- getString(R.string.save_into, mDstFileInfo.mFolderName),
- Toast.LENGTH_SHORT)
- .show();
- // TODO: change trimming into a service to avoid
- // this progressDialog and add notification properly.
- if (mProgress != null) {
- mProgress.dismiss();
- mProgress = null;
- // Show the result only when the activity not stopped.
- Intent intent = new Intent(android.content.Intent.ACTION_VIEW);
- intent.setDataAndType(Uri.fromFile(mDstFileInfo.mFile), "video/*");
- intent.putExtra(MediaStore.EXTRA_FINISH_ON_COMPLETION, false);
- startActivity(intent);
- finish();
- }
- }
- });
- }
- }).start();
- }
-
- private void showProgressDialog() {
- // create a background thread to trim the video.
- // and show the progress.
- mProgress = new ProgressDialog(this);
- mProgress.setTitle(getString(R.string.trimming));
- mProgress.setMessage(getString(R.string.please_wait));
- // TODO: make this cancelable.
- mProgress.setCancelable(false);
- mProgress.setCanceledOnTouchOutside(false);
- mProgress.show();
- }
-
- @Override
- public void onPlayPause() {
- if (mVideoView.isPlaying()) {
- pauseVideo();
- } else {
- playVideo();
- }
- }
-
- @Override
- public void onSeekStart() {
- pauseVideo();
- }
-
- @Override
- public void onSeekMove(int time) {
- mVideoView.seekTo(time);
- }
-
- @Override
- public void onSeekEnd(int time, int start, int end) {
- mVideoView.seekTo(time);
- mTrimStartTime = start;
- mTrimEndTime = end;
- setProgress();
- // Enable save if there's modifications
- mSaveVideoTextView.setEnabled(isModified());
- }
-
- @Override
- public void onShown() {
- }
-
- @Override
- public void onHidden() {
- }
-
- @Override
- public void onReplay() {
- mVideoView.seekTo(mTrimStartTime);
- playVideo();
- }
-
- @Override
- public void onCompletion(MediaPlayer mp) {
- mController.showEnded();
- }
-
- @Override
- public boolean onError(MediaPlayer mp, int what, int extra) {
- return false;
- }
-}