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