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}