1b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren/*
2b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren * Copyright (C) 2012 The Android Open Source Project
3b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren *
4b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren * Licensed under the Apache License, Version 2.0 (the "License");
5b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren * you may not use this file except in compliance with the License.
6b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren * You may obtain a copy of the License at
7b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren *
8b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren *      http://www.apache.org/licenses/LICENSE-2.0
9b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren *
10b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren * Unless required by applicable law or agreed to in writing, software
11b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren * distributed under the License is distributed on an "AS IS" BASIS,
12b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren * See the License for the specific language governing permissions and
14b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren * limitations under the License.
15b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren */
16b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren
17b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wrenpackage com.android.dreams.phototable;
18b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren
19b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wrenimport android.content.Context;
20b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wrenimport android.os.Handler;
21b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wrenimport android.os.Message;
22b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wrenimport android.util.AttributeSet;
23b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wrenimport android.view.View;
24b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wrenimport android.widget.TextView;
25b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren
26b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wrenpublic class BummerView extends TextView {
27b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren    public static final int START = 1;
28b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren    public static final int MOVE = 2;
29b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren
30b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren    private int mDelay = 10000; // ms
31b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren    private int mAnimTime = 2000; // ms
32b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren    private boolean mAnimate = false;
33b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren
34b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren    private Handler mHandler = new Handler() {
35b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren        @Override
36b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren        public void handleMessage(Message m) {
37b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren            boolean animate = false;
38b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren            switch (m.what) {
39b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren                case MOVE:
40b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren                    animate = mAnimate;
41b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren                    // fall through
42b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren                case START:
43b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren                    final View parent = (View) BummerView.this.getParent();
44b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren                    if (parent == null)
45b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren                        return;
46b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren
47b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren                    final float framew = parent.getMeasuredWidth();
48b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren                    final float frameh = parent.getMeasuredHeight();
49b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren                    final float textw = getMeasuredWidth();
50b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren                    final float texth = getMeasuredHeight();
51b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren
52b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren                    final float newx = (float) (Math.random() * (framew - textw));
53b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren                    final float newy = (float) (Math.random() * (frameh - texth));
54b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren                    if (animate) {
55b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren                        animate().x(newx)
56b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren                                .y(newy)
57b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren                                .setDuration(mAnimTime)
58b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren                                .start();
59b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren                    } else {
60b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren                        setX(newx);
61b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren                        setY(newy);
62b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren                    }
63b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren                    setVisibility(View.VISIBLE);
64b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren
65b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren                    removeMessages(MOVE);
66b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren                    sendEmptyMessageDelayed(MOVE, mDelay);
67b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren                    break;
68b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren            }
69b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren        }
70b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren    };
71b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren
72b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren    public BummerView(Context context) {
73b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren        super(context);
74b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren    }
75b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren
76b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren    public BummerView(Context context, AttributeSet attrs) {
77b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren        this(context, attrs, 0);
78b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren    }
79b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren
80b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren    public BummerView(Context context, AttributeSet attrs, int flags) {
81b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren        super(context, attrs, flags);
82b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren    }
83b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren
84b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren    public void setAnimationParams(boolean animate, int delay, int animTime) {
85b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren        mAnimate = animate;
86b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren        mDelay = delay;
87b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren        mAnimTime = animTime;
88b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren    }
89b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren
90b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren    @Override
91b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren    public void onAttachedToWindow() {
92b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren        final View parent = (View) this.getParent();
93b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren        parent.addOnLayoutChangeListener(new OnLayoutChangeListener() {
94b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren            public void onLayoutChange(View v, int left, int top, int right, int bottom,
95b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren                    int oldLeft, int oldTop, int oldRight, int oldBottom) {
96b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren                if (v == parent && right != oldRight) {
97b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren                    mHandler.removeMessages(MOVE);
98b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren                    mHandler.sendEmptyMessage(START);
99b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren                }
100b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren            }
101b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren        });
102b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren
103b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren        mHandler.sendEmptyMessage(START);
104b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren    }
105b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren
106b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren}
107