1990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount/* 2990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount * Copyright (C) 2016 The Android Open Source Project 3990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount * 4990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount * Licensed under the Apache License, Version 2.0 (the "License"); 5990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount * you may not use this file except in compliance with the License. 6990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount * You may obtain a copy of the License at 7990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount * 8990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount * http://www.apache.org/licenses/LICENSE-2.0 9990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount * 10990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount * Unless required by applicable law or agreed to in writing, software 11990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount * distributed under the License is distributed on an "AS IS" BASIS, 12990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount * See the License for the specific language governing permissions and 14990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount * limitations under the License. 15990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount */ 16990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mountpackage android.support.v4.app; 17990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 18990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mountimport android.animation.Animator; 19990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mountimport android.graphics.Rect; 20990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mountimport android.transition.TransitionValues; 21990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mountimport android.transition.Visibility; 22990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mountimport android.view.View; 23990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mountimport android.view.ViewGroup; 24990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 25990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mountimport java.util.ArrayList; 26990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 27990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount/** 28990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount * Visibility transition that tracks which targets are applied to it. 29990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount * This transition does no animation. 30990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount */ 31990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mountclass TrackingVisibility extends Visibility implements TargetTracking { 32990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount public final ArrayList<View> targets = new ArrayList<>(); 33990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount private final Rect[] mEpicenter = new Rect[1]; 34990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 35990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount @Override 36990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount public Animator onAppear(ViewGroup sceneRoot, View view, TransitionValues startValues, 37990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount TransitionValues endValues) { 38990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount targets.add(endValues.view); 39990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount Rect epicenter = getEpicenter(); 40990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount if (epicenter != null) { 41990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount mEpicenter[0] = new Rect(epicenter); 42990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount } else { 43990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount mEpicenter[0] = null; 44990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount } 45990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount return null; 46990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount } 47990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 48990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount @Override 49990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount public Animator onDisappear(ViewGroup sceneRoot, View view, TransitionValues startValues, 50990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount TransitionValues endValues) { 51990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount targets.add(startValues.view); 52990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount Rect epicenter = getEpicenter(); 53990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount if (epicenter != null) { 54990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount mEpicenter[0] = new Rect(epicenter); 55990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount } else { 56990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount mEpicenter[0] = null; 57990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount } 58990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount return null; 59990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount } 60990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 61990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount @Override 62990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount public ArrayList<View> getTrackedTargets() { 63990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount return targets; 64990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount } 65990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 66990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount @Override 67990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount public void clearTargets() { 68990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount targets.clear(); 69990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount } 70990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount 71990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount @Override 72990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount public Rect getCapturedEpicenter() { 73990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount return mEpicenter[0]; 74990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount } 75990e6fc0326f5948736650c0cb71b6002d443c9cGeorge Mount} 76