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 */
166ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase
17d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haasepackage android.transition;
18faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase
1908735185f8105710e18ad02297461bec9268e514Chet Haaseimport android.util.ArrayMap;
20faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haaseimport android.view.View;
21faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haaseimport android.view.ViewGroup;
22faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase
235030c7f6f15c5c2cac2403f863e4f618a8cfaedfGeorge Mountimport java.util.ArrayList;
2408735185f8105710e18ad02297461bec9268e514Chet Haaseimport java.util.Map;
25faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase
26faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase/**
27faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * Data structure which holds cached values for the transition.
28faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * The view field is the target which all of the values pertain to.
2908735185f8105710e18ad02297461bec9268e514Chet Haase * The values field is a map which holds information for fields
30faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * according to names selected by the transitions. These names should
31faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * be unique to avoid clobbering values stored by other transitions,
32faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * such as the convention project:transition_name:property_name. For
33faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * example, the platform might store a property "alpha" in a transition
34faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * "Fader" as "android:fader:alpha".
35faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase *
36faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * <p>These values are cached during the
37d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * {@link Transition#captureStartValues(TransitionValues)}
38faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * capture} phases of a scene change, once when the start values are captured
39faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * and again when the end values are captured. These start/end values are then
402ea7f8b9c5f903050d42c1af57406bf528979f45Chet Haase * passed into the transitions via the
41d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * for {@link Transition#createAnimator(ViewGroup, TransitionValues, TransitionValues)}
422ea7f8b9c5f903050d42c1af57406bf528979f45Chet Haase * method.</p>
43faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase */
44faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haasepublic class TransitionValues {
45faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase
46faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase    /**
47faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase     * The View with these values
48faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase     */
49faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase    public View view;
50faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase
51faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase    /**
52faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase     * The set of values tracked by transitions for this scene
53faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase     */
5408735185f8105710e18ad02297461bec9268e514Chet Haase    public final Map<String, Object> values = new ArrayMap<String, Object>();
55faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase
565030c7f6f15c5c2cac2403f863e4f618a8cfaedfGeorge Mount    /**
575030c7f6f15c5c2cac2403f863e4f618a8cfaedfGeorge Mount     * The Transitions that targeted this view.
585030c7f6f15c5c2cac2403f863e4f618a8cfaedfGeorge Mount     */
595030c7f6f15c5c2cac2403f863e4f618a8cfaedfGeorge Mount    final ArrayList<Transition> targetedTransitions = new ArrayList<Transition>();
605030c7f6f15c5c2cac2403f863e4f618a8cfaedfGeorge Mount
61faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase    @Override
62c43524f3869cc0d36974fce61986017093f2ecd2Chet Haase    public boolean equals(Object other) {
63c43524f3869cc0d36974fce61986017093f2ecd2Chet Haase        if (other instanceof TransitionValues) {
64c43524f3869cc0d36974fce61986017093f2ecd2Chet Haase            if (view == ((TransitionValues) other).view) {
65c43524f3869cc0d36974fce61986017093f2ecd2Chet Haase                if (values.equals(((TransitionValues) other).values)) {
66c43524f3869cc0d36974fce61986017093f2ecd2Chet Haase                    return true;
67c43524f3869cc0d36974fce61986017093f2ecd2Chet Haase                }
68c43524f3869cc0d36974fce61986017093f2ecd2Chet Haase            }
69c43524f3869cc0d36974fce61986017093f2ecd2Chet Haase        }
70c43524f3869cc0d36974fce61986017093f2ecd2Chet Haase        return false;
71c43524f3869cc0d36974fce61986017093f2ecd2Chet Haase    }
72c43524f3869cc0d36974fce61986017093f2ecd2Chet Haase
73c43524f3869cc0d36974fce61986017093f2ecd2Chet Haase    @Override
74c43524f3869cc0d36974fce61986017093f2ecd2Chet Haase    public int hashCode() {
75c43524f3869cc0d36974fce61986017093f2ecd2Chet Haase        return 31*view.hashCode() + values.hashCode();
76c43524f3869cc0d36974fce61986017093f2ecd2Chet Haase    }
77c43524f3869cc0d36974fce61986017093f2ecd2Chet Haase
78c43524f3869cc0d36974fce61986017093f2ecd2Chet Haase    @Override
79faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase    public String toString() {
80faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        String returnValue = "TransitionValues@" + Integer.toHexString(hashCode()) + ":\n";
81faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        returnValue += "    view = " + view + "\n";
826ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase        returnValue += "    values:";
836ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase        for (String s : values.keySet()) {
846ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase            returnValue += "    " + s + ": " + values.get(s) + "\n";
856ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase        }
86faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase        return returnValue;
87faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase    }
88faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase}