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