1ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi/*
2ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Copyright (C) 2010 The Android Open Source Project
3ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi *
4ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Licensed under the Apache License, Version 2.0 (the "License");
5ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * you may not use this file except in compliance with the License.
6ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * You may obtain a copy of the License at
7ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi *
8ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi *      http://www.apache.org/licenses/LICENSE-2.0
9ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi *
10ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Unless required by applicable law or agreed to in writing, software
11ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * distributed under the License is distributed on an "AS IS" BASIS,
12ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * See the License for the specific language governing permissions and
14ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * limitations under the License.
15ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */
16ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
1781393d6dc5767f7784a00958095614a37bf1a91aGil Dobjanschipackage com.android.videoeditor;
18ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
19ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.app.ListActivity;
20ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.content.Intent;
21ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.os.Bundle;
22ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.view.View;
23ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.widget.ListView;
24ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.widget.TextView;
25ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
26ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi/**
27cf53127886a8193fe57b9d45173f258b5fa7a2b6Shih-chia Cheng * Activity that lists all transition effects for user to choose.
28ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */
29ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschipublic class TransitionsActivity extends ListActivity {
30ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    // Input transition category
31ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    public static final String PARAM_AFTER_MEDIA_ITEM_ID = "media_item_id";
32ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    public static final String PARAM_TRANSITION_ID = "transition_id";
33ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    public static final String PARAM_MINIMUM_DURATION = "min_duration";
34ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    public static final String PARAM_DEFAULT_DURATION = "default_duration";
35ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    public static final String PARAM_MAXIMUM_DURATION = "max_duration";
36ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
37ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    // Increment transition duration in milliseconds
38ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    private static final long INCREMENT_TRANSITION = 100;
39ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
40ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    // Output transition type
41ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    public static final String PARAM_TRANSITION_TYPE = "transition";
42ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    public static final String PARAM_TRANSITION_DURATION = "duration";
43ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
44ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    // State keys
45ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    private static final String STATE_KEY_TRANSITION_DURATION = "duration";
46ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
47ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    // Instance variables
48ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    private TextView mTransitionDurationView;
49ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    private View mTransitionLeftBtn, mTransitionRightBtn;
50ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    private TransitionsAdapter mAdapter;
51ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    private long mMinTransitionDurationMs, mMaxTransitionDurationMs, mTransitionDurationMs;
52ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
53ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    @Override
54ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    public void onCreate(Bundle savedInstanceState) {
55ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        super.onCreate(savedInstanceState);
56ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        setContentView(R.layout.transition_list_view);
57acb912709027b1c47fa3fa371e3aa68efd61501cGil Dobjanschi        setFinishOnTouchOutside(true);
58ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
59ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        mTransitionDurationView = (TextView)findViewById(R.id.transition_duration);
60ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        mTransitionLeftBtn = findViewById(R.id.duration_left);
61ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        mTransitionRightBtn = findViewById(R.id.duration_right);
62ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
63ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        mMinTransitionDurationMs = getIntent().getLongExtra(PARAM_MINIMUM_DURATION, 0);
64ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        mMinTransitionDurationMs = (mMinTransitionDurationMs / INCREMENT_TRANSITION) *
65ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi            INCREMENT_TRANSITION;
66ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
67ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        mMaxTransitionDurationMs = getIntent().getLongExtra(PARAM_MAXIMUM_DURATION, 0);
68ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        mMaxTransitionDurationMs = (mMaxTransitionDurationMs / INCREMENT_TRANSITION) *
69ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi            INCREMENT_TRANSITION;
70ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
71ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        if (savedInstanceState == null) {
72ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi            mTransitionDurationMs = getIntent().getLongExtra(PARAM_DEFAULT_DURATION, 0);
73ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        } else {
74ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi            mTransitionDurationMs = savedInstanceState.getLong(STATE_KEY_TRANSITION_DURATION);
75ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        }
76ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        mTransitionDurationMs = (mTransitionDurationMs / INCREMENT_TRANSITION) *
77ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi            INCREMENT_TRANSITION;
78ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
79ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        updateTransitionDuration();
80ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
81ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        // Create the list adapter
82ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        mAdapter = new TransitionsAdapter(this, getListView());
83ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        setListAdapter(mAdapter);
84ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
85ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        final int transitionType = getIntent().getIntExtra(PARAM_TRANSITION_TYPE, -1);
86ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        if (transitionType >= 0) {
87ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi            // Select the current transition
88ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi            final TransitionType[] transitions = mAdapter.getTransitions();
89ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi            for (int i = 0; i < transitions.length; i++) {
90ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                if (transitions[i].getType() == transitionType) {
91ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                    setSelection(i);
92ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                    break;
93ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                }
94ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi            }
95ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        }
96ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    }
97ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
98ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    @Override
99ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    public void onPause() {
100ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        super.onPause();
101ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
102ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        if (mAdapter != null) {
103ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi            mAdapter.onPause();
104ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        }
105ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    }
106ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
107ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    @Override
108ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    public void onDestroy() {
109ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        super.onDestroy();
110ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
111ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        if (mAdapter != null) {
112ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi            mAdapter.onDestroy();
113cf53127886a8193fe57b9d45173f258b5fa7a2b6Shih-chia Cheng            mAdapter = null;
114ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        }
115ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    }
116ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
117ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    @Override
118ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    public void onSaveInstanceState(Bundle outState) {
119ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        super.onSaveInstanceState(outState);
120ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
121ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        outState.putLong(STATE_KEY_TRANSITION_DURATION, mTransitionDurationMs);
122ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    }
123ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
124ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    @Override
125ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    public void onListItemClick(ListView l, View v, int position, long id) {
126ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        final Intent extras = new Intent();
127ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        extras.putExtra(PARAM_TRANSITION_TYPE,
128ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                ((TransitionType)mAdapter.getItem(position)).getType());
129ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        extras.putExtra(PARAM_AFTER_MEDIA_ITEM_ID,
130ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                getIntent().getStringExtra(PARAM_AFTER_MEDIA_ITEM_ID));
131ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        extras.putExtra(PARAM_TRANSITION_ID,
132ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                getIntent().getStringExtra(PARAM_TRANSITION_ID));
133ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        extras.putExtra(PARAM_TRANSITION_DURATION, mTransitionDurationMs);
134ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
135ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        setResult(RESULT_OK, extras);
136ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        finish();
137ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    }
138ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
139ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    public void onClickHandler(View target) {
140ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        switch (target.getId()) {
141ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi            case R.id.duration_left: {
142ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                if (mTransitionDurationMs > mMinTransitionDurationMs) {
143ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                    mTransitionDurationMs -= INCREMENT_TRANSITION;
144ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                    updateTransitionDuration();
145ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                }
146ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                break;
147ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi            }
148ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
149ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi            case R.id.duration_right: {
150ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                if (mTransitionDurationMs < mMaxTransitionDurationMs) {
151ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                    mTransitionDurationMs += INCREMENT_TRANSITION;
152ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                    updateTransitionDuration();
153ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                }
154ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                break;
155ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi            }
156ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
157ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi            default: {
158ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                break;
159ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi            }
160ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        }
161ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    }
162ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
163ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    @Override
164ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    public boolean onSearchRequested() {
165ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        return false;
166ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    }
167ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
168ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    /**
169cf53127886a8193fe57b9d45173f258b5fa7a2b6Shih-chia Cheng     * Updates the transition duration and the state of the buttons.
170ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi     */
171ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    private void updateTransitionDuration() {
172ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        mTransitionDurationView.setText(getString(R.string.transitions_duration,
173ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                (((float)mTransitionDurationMs) / 1000)));
174ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
175ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        mTransitionLeftBtn.setEnabled(mTransitionDurationMs > mMinTransitionDurationMs);
176ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        mTransitionRightBtn.setEnabled(mTransitionDurationMs < mMaxTransitionDurationMs);
177ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    }
178ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi}
179