1faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase/* 2faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * Copyright (C) 2013 The Android Open Source Project 3faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * 4faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * Licensed under the Apache License, Version 2.0 (the "License"); 5faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * you may not use this file except in compliance with the License. 6faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * You may obtain a copy of the License at 7faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * 8faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * http://www.apache.org/licenses/LICENSE-2.0 9faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * 10faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * Unless required by applicable law or agreed to in writing, software 11faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * distributed under the License is distributed on an "AS IS" BASIS, 12faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * See the License for the specific language governing permissions and 14faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * limitations under the License. 15faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase */ 16faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haasepackage com.android.transitiontests; 17faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 18faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haaseimport android.app.Activity; 19faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haaseimport android.content.Context; 20faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haaseimport android.os.Bundle; 21d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haaseimport android.transition.ChangeBounds; 22faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haaseimport android.view.LayoutInflater; 23faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haaseimport android.view.View; 24faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haaseimport android.view.ViewGroup; 25d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haaseimport android.transition.Fade; 26d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haaseimport android.transition.Scene; 27d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haaseimport android.transition.Transition; 28d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haaseimport android.transition.TransitionSet; 29faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haaseimport android.widget.ImageView; 30faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haaseimport android.widget.TextView; 31d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haaseimport android.transition.Crossfade; 32d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haaseimport android.transition.Rotate; 33d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haaseimport android.transition.TransitionManager; 34faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 35faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haasepublic class ContactsExpansion extends Activity { 36faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 37faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase String contactsData[] = { 38faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase "Alan Green", "56 Bob Street", "Boston, MA 02134", "617-555-5555", "blatt@blatt.com", 39faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase "Bob Foonman", "92 The Avenue", "Chico, CA 78456", "510-555-5556", "bob@jerk.com", 40faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase "Tracey Sue", "95 Houses Street", "San Jose, CA 96504", "415-555-5557", "ts@thing.com", 41faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase }; 42faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 43faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase View currentItem = null; 44faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 45d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase TransitionSet mMyAutoTransition = new TransitionSet(). 46d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase setOrdering(TransitionSet.ORDERING_SEQUENTIAL); 47faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 48faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase @Override 49faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase protected void onCreate(Bundle savedInstanceState) { 50faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase super.onCreate(savedInstanceState); 51faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase setContentView(R.layout.contacts_list); 52faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase ViewGroup contactsContainer = (ViewGroup) findViewById(R.id.contactsContainer); 53faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 54faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase int contactsIndex = 0; 55faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase addContact(contactsContainer, contactsIndex, R.drawable.self_portrait_square_100); 56faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase contactsIndex += 5; 57faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase addContact(contactsContainer, contactsIndex, R.drawable.self_portrait_square_100); 58faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase contactsIndex += 5; 59faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase addContact(contactsContainer, contactsIndex, R.drawable.self_portrait_square_100); 60faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 61faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 62faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 63faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase private void addContact(ViewGroup container, int dataIndex, int thumbnailID) { 64faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase LayoutInflater inflater = (LayoutInflater) 65faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase getSystemService(Context.LAYOUT_INFLATER_SERVICE); 66faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase View contactItem = inflater.inflate(R.layout.contact_collapsed, container, false); 67faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase ImageView thumbnailView = (ImageView) contactItem.findViewById(R.id.contact_picture); 68faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase thumbnailView.setImageResource(thumbnailID); 69faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase ((TextView)contactItem.findViewById(R.id.contact_name)).setText(contactsData[dataIndex++]); 70faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase ((TextView)contactItem.findViewById(R.id.contact_street)). 71faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase setText(contactsData[dataIndex++]); 72faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase ((TextView)contactItem.findViewById(R.id.contact_city)).setText(contactsData[dataIndex++]); 73faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase ((TextView)contactItem.findViewById(R.id.contact_phone)).setText(contactsData[dataIndex++]); 74faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase ((TextView)contactItem.findViewById(R.id.contact_email)).setText(contactsData[dataIndex++]); 75faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase container.addView(contactItem); 76faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 77d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase final TransitionSet myTransition = new TransitionSet(); 78d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase myTransition.addTransition(new Fade(Fade.IN)). 79ff58f92a0a77ad849ba714b5adac96790eca0048Chet Haase addTransition(new Rotate().addTarget(R.id.contact_arrow)). 80d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase addTransition(new ChangeBounds()). 81d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase addTransition(new Fade(Fade.OUT)). 82ff58f92a0a77ad849ba714b5adac96790eca0048Chet Haase addTransition(new Crossfade().addTarget(R.id.contact_picture)); 83faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase final ToggleScene toggleScene = new ToggleScene(container, myTransition); 84faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase contactItem.setOnClickListener(new View.OnClickListener() { 85faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase @Override 86faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase public void onClick(View v) { 87faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase currentItem = v; 88faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase toggleScene.changeToScene(); 89faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 90faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase }); 91faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 92faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 93faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase class ToggleScene { 94faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase boolean expanded = false; 95faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase Scene mScene; 96faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase Transition mTransition; 97faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 98faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase ToggleScene(ViewGroup rootView, Transition transition) { 99faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase mScene = new Scene(rootView); 100faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase mTransition = transition; 101faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase mScene.setEnterAction(new Runnable() { 102faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase @Override 103faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase public void run() { 104faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase if (currentItem != null) { 105faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase System.out.println("onsceneChanged: currentItem = " + currentItem); 106faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase View expandedContainer = currentItem.findViewById(R.id.expanded_info); 107faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase expandedContainer.setVisibility(expanded ? View.GONE : View.VISIBLE); 108faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase ImageView thumbnailView = 109faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase (ImageView) currentItem.findViewById(R.id.contact_picture); 110faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase thumbnailView.setImageResource(expanded ? R.drawable.self_portrait_square_100 : 111faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase R.drawable.self_portrait_square_200); 112faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase ImageView arrow = (ImageView) currentItem.findViewById(R.id.contact_arrow); 113faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase arrow.setRotation(expanded ? 0 : 90); 114faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase expanded = !expanded; 115faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 116faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 117faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase }); 118faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 119faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 120faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase void changeToScene() { 121faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase TransitionManager.go(mScene, mTransition); 122faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 123faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase }; 124faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase} 125