1648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu/*
2648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu * Copyright (C) 2012 The Android Open Source Project
3648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu *
4648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu * Licensed under the Apache License, Version 2.0 (the "License");
5648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu * you may not use this file except in compliance with the License.
6648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu * You may obtain a copy of the License at
7648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu *
8648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu *      http://www.apache.org/licenses/LICENSE-2.0
9648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu *
10648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu * Unless required by applicable law or agreed to in writing, software
11648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu * distributed under the License is distributed on an "AS IS" BASIS,
12648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu * See the License for the specific language governing permissions and
14648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu * limitations under the License.
15648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu */
16648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu
17648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhupackage com.android.gallery3d.app;
18648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu
19648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhuimport android.app.Activity;
20648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhuimport android.app.ProgressDialog;
21648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhuimport android.content.Intent;
22648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhuimport android.net.Uri;
23648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhuimport android.os.Handler;
24648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhuimport android.provider.MediaStore;
25648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhuimport android.widget.Toast;
26648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu
27648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhuimport com.android.gallery3d.R;
28648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhuimport com.android.gallery3d.data.MediaItem;
29648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhuimport com.android.gallery3d.util.SaveVideoFileInfo;
30648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhuimport com.android.gallery3d.util.SaveVideoFileUtils;
31648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu
32648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhuimport java.io.IOException;
33648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu
34648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhupublic class MuteVideo {
35648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu
36648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu    private ProgressDialog mMuteProgress;
37648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu
381a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu    private String mFilePath = null;
39648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu    private Uri mUri = null;
40648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu    private SaveVideoFileInfo mDstFileInfo = null;
41648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu    private Activity mActivity = null;
42648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu    private final Handler mHandler = new Handler();
43648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu
44648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu    final String TIME_STAMP_NAME = "'MUTE'_yyyyMMdd_HHmmss";
45648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu
461a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu    public MuteVideo(String filePath, Uri uri, Activity activity) {
47648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu        mUri = uri;
481a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu        mFilePath = filePath;
49648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu        mActivity = activity;
50648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu    }
51648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu
52648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu    public void muteInBackground() {
53648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu        mDstFileInfo = SaveVideoFileUtils.getDstMp4FileInfo(TIME_STAMP_NAME,
54648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu                mActivity.getContentResolver(), mUri,
55648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu                mActivity.getString(R.string.folder_download));
56648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu
57648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu        showProgressDialog();
58648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu        new Thread(new Runnable() {
59648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu                @Override
60648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu            public void run() {
61648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu                try {
621a719804ddd5c6fc9a6914ef5a2b6e914834d1f9Bobby Georgescu                    VideoUtils.startMute(mFilePath, mDstFileInfo);
63648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu                    SaveVideoFileUtils.insertContent(
64648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu                            mDstFileInfo, mActivity.getContentResolver(), mUri);
65648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu                } catch (IOException e) {
66648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu                    Toast.makeText(mActivity, mActivity.getString(R.string.video_mute_err),
67648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu                            Toast.LENGTH_SHORT).show();
68648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu                }
69648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu                // After muting is done, trigger the UI changed.
70648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu                mHandler.post(new Runnable() {
71648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu                        @Override
72648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu                    public void run() {
73648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu                        Toast.makeText(mActivity.getApplicationContext(),
74648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu                                mActivity.getString(R.string.save_into,
75648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu                                        mDstFileInfo.mFolderName),
76648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu                                Toast.LENGTH_SHORT)
77648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu                                .show();
78648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu
79648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu                        if (mMuteProgress != null) {
80648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu                            mMuteProgress.dismiss();
81648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu                            mMuteProgress = null;
82648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu
83648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu                            // Show the result only when the activity not
84648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu                            // stopped.
85648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu                            Intent intent = new Intent(android.content.Intent.ACTION_VIEW);
86b5f374c30d06dc0409891f85a4bd5e1e3ddf8700Teng-Hui Zhu                            intent.setDataAndType(Uri.fromFile(mDstFileInfo.mFile), "video/*");
87648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu                            intent.putExtra(MediaStore.EXTRA_FINISH_ON_COMPLETION, false);
88648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu                            mActivity.startActivity(intent);
89648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu                        }
90648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu                    }
91648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu                });
92648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu            }
93648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu        }).start();
94648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu    }
95648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu
96648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu    private void showProgressDialog() {
97648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu        mMuteProgress = new ProgressDialog(mActivity);
98648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu        mMuteProgress.setTitle(mActivity.getString(R.string.muting));
99648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu        mMuteProgress.setMessage(mActivity.getString(R.string.please_wait));
100648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu        mMuteProgress.setCancelable(false);
101648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu        mMuteProgress.setCanceledOnTouchOutside(false);
102648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu        mMuteProgress.show();
103648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu    }
104648b339c74da2b863304ffc61c8528cc74c2afb3Teng-Hui Zhu}
105