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