15f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler/*);
25f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler * Copyright (C) 2011 The Android Open Source Project
35f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler *
45f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler * Licensed under the Apache License, Version 2.0 (the "License");
55f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler * you may not use this file except in compliance with the License.
65f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler * You may obtain a copy of the License at
75f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler *
85f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler *      http://www.apache.org/licenses/LICENSE-2.0
95f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler *
105f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler * Unless required by applicable law or agreed to in writing, software
115f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler * distributed under the License is distributed on an "AS IS" BASIS,
125f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
135f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler * See the License for the specific language governing permissions and
145f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler * limitations under the License.
155f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler */
165f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler
175f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandlerpackage com.android.systemui;
185f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler
195f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandlerimport android.animation.AnimatorSet;
205f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandlerimport android.animation.PropertyValuesHolder;
215f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandlerimport android.animation.ObjectAnimator;
225f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandlerimport android.animation.TimeAnimator;
235f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandlerimport android.app.Activity;
245f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandlerimport android.content.ComponentName;
255f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandlerimport android.content.Context;
265f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandlerimport android.content.Intent;
275f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandlerimport android.graphics.drawable.AnimationDrawable;
285f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandlerimport android.graphics.Bitmap;
295f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandlerimport android.graphics.Canvas;
305f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandlerimport android.graphics.Color;
315f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandlerimport android.graphics.Matrix;
325f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandlerimport android.graphics.Paint;
335f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandlerimport android.graphics.Point;
345f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandlerimport android.graphics.Rect;
355f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandlerimport android.graphics.RectF;
365f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandlerimport android.os.Handler;
375f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandlerimport android.util.AttributeSet;
385f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandlerimport android.util.DisplayMetrics;
395f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandlerimport android.util.Pair;
405f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandlerimport android.view.Gravity;
415f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandlerimport android.view.MotionEvent;
425f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandlerimport android.view.View;
435f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandlerimport android.view.ViewGroup;
445f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandlerimport android.view.WindowManager;
455f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandlerimport android.widget.FrameLayout;
465f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandlerimport android.widget.ImageView;
475f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandlerimport java.util.HashMap;
485f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandlerimport java.util.Random;
495f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler
505f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandlerpublic class Nyandroid extends Activity {
515f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler    final static boolean DEBUG = false;
525f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler
535f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler    public static class Board extends FrameLayout
545f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler    {
555f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler        public static final boolean FIXED_STARS = true;
565f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler        public static final int NUM_CATS = 20;
575f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler
585f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler        static Random sRNG = new Random();
595f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler
605f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler        static float lerp(float a, float b, float f) {
615f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler            return (b-a)*f + a;
625f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler        }
635f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler
645f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler        static float randfrange(float a, float b) {
655f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler            return lerp(a, b, sRNG.nextFloat());
665f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler        }
675f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler
685f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler        static int randsign() {
695f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler            return sRNG.nextBoolean() ? 1 : -1;
705f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler        }
715f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler
725f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler        static <E> E pick(E[] array) {
735f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler            if (array.length == 0) return null;
745f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler            return array[sRNG.nextInt(array.length)];
755f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler        }
765f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler
775f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler        public class FlyingCat extends ImageView {
785f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler            public static final float VMAX = 1000.0f;
795f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler            public static final float VMIN = 100.0f;
805f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler
815f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler            public float v, vr;
825f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler
835f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler            public float dist;
845f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler            public float z;
855f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler
865f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler            public ComponentName component;
875f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler
885f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler            public FlyingCat(Context context, AttributeSet as) {
895f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                super(context, as);
905f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                setImageResource(R.drawable.nyandroid_anim); // @@@
915f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler
925f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                if (DEBUG) setBackgroundColor(0x80FF0000);
935f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler            }
945f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler
955f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler            public String toString() {
965f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                return String.format("<cat (%.1f, %.1f) (%d x %d)>",
975f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                    getX(), getY(), getWidth(), getHeight());
985f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler            }
995f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler
1005f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler            public void reset() {
1015f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                final float scale = lerp(0.1f,2f,z);
1025f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                setScaleX(scale); setScaleY(scale);
1035f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler
1045f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                setX(-scale*getWidth()+1);
1055f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                setY(randfrange(0, Board.this.getHeight()-scale*getHeight()));
1065f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                v = lerp(VMIN, VMAX, z);
1075f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler
1085f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                dist = 0;
1095f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler
1105f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler//                android.util.Log.d("Nyandroid", "reset cat: " + this);
1115f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler            }
1125f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler
1135f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler            public void update(float dt) {
1145f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                dist += v * dt;
1155f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                setX(getX() + v * dt);
1165f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler            }
1175f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler        }
1185f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler
1195f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler        TimeAnimator mAnim;
1205f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler
1215f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler        public Board(Context context, AttributeSet as) {
1225f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler            super(context, as);
1235f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler
1245f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler            setLayerType(View.LAYER_TYPE_HARDWARE, null);
1255f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler            setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
1265f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler            setBackgroundColor(0xFF003366);
1275f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler        }
1285f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler
1295f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler        private void reset() {
1305f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler//            android.util.Log.d("Nyandroid", "board reset");
1315f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler            removeAllViews();
1325f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler
1335f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler            final ViewGroup.LayoutParams wrap = new ViewGroup.LayoutParams(
1345f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                        ViewGroup.LayoutParams.WRAP_CONTENT,
1355f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                        ViewGroup.LayoutParams.WRAP_CONTENT);
1365f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler
1375f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler            if (FIXED_STARS) {
1385f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                for(int i=0; i<20; i++) {
1395f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                    ImageView fixedStar = new ImageView(getContext(), null);
1405f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                    if (DEBUG) fixedStar.setBackgroundColor(0x8000FF80);
1415f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                    fixedStar.setImageResource(R.drawable.star_anim); // @@@
1425f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                    addView(fixedStar, wrap);
1435f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                    final float scale = randfrange(0.1f, 1f);
1445f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                    fixedStar.setScaleX(scale); fixedStar.setScaleY(scale);
1455f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                    fixedStar.setX(randfrange(0, getWidth()));
1465f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                    fixedStar.setY(randfrange(0, getHeight()));
1475f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                    final AnimationDrawable anim = (AnimationDrawable) fixedStar.getDrawable();
1485f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                    postDelayed(new Runnable() {
1495f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                        public void run() {
1505f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                            anim.start();
1515f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                        }}, (int) randfrange(0, 1000));
1525f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                }
1535f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler            }
1545f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler
1555f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler            for(int i=0; i<NUM_CATS; i++) {
1565f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                FlyingCat nv = new FlyingCat(getContext(), null);
1575f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                addView(nv, wrap);
1585f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                nv.z = ((float)i/NUM_CATS);
1595f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                nv.z *= nv.z;
1605f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                nv.reset();
1615f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                nv.setX(randfrange(0,Board.this.getWidth()));
1625f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                final AnimationDrawable anim = (AnimationDrawable) nv.getDrawable();
1635f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                postDelayed(new Runnable() {
1645f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                    public void run() {
1655f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                        anim.start();
1665f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                    }}, (int) randfrange(0, 1000));
1675f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler            }
1685f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler
1695f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler            if (mAnim != null) {
1705f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                mAnim.cancel();
1715f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler            }
1725f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler            mAnim = new TimeAnimator();
1735f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler            mAnim.setTimeListener(new TimeAnimator.TimeListener() {
1745f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                public void onTimeUpdate(TimeAnimator animation, long totalTime, long deltaTime) {
1755f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                    // setRotation(totalTime * 0.01f); // not as cool as you would think
1765f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler//                    android.util.Log.d("Nyandroid", "t=" + totalTime);
1775f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler
1785f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                    for (int i=0; i<getChildCount(); i++) {
1795f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                        View v = getChildAt(i);
1805f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                        if (!(v instanceof FlyingCat)) continue;
1815f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                        FlyingCat nv = (FlyingCat) v;
1825f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                        nv.update(deltaTime / 1000f);
1835f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                        final float catWidth = nv.getWidth() * nv.getScaleX();
1845f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                        final float catHeight = nv.getHeight() * nv.getScaleY();
1855f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                        if (   nv.getX() + catWidth < -2
1865f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                            || nv.getX() > getWidth() + 2
1875f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                            || nv.getY() + catHeight < -2
1885f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                            || nv.getY() > getHeight() + 2)
1895f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                        {
1905f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                            nv.reset();
1915f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                        }
1925f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                    }
1935f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                }
1945f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler            });
1955f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler        }
1965f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler
1975f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler        @Override
1985f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler        protected void onSizeChanged (int w, int h, int oldw, int oldh) {
1995f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler            super.onSizeChanged(w,h,oldw,oldh);
2005f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler//            android.util.Log.d("Nyandroid", "resized: " + w + "x" + h);
2015f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler            post(new Runnable() { public void run() {
2025f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                reset();
2035f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                mAnim.start();
2045f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler            } });
2055f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler        }
2065f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler
2075f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler
2085f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler        @Override
2095f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler        protected void onDetachedFromWindow() {
2105f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler            super.onDetachedFromWindow();
2115f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler            mAnim.cancel();
2125f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler        }
2135f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler
2145f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler        @Override
2155f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler        public boolean isOpaque() {
2165f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler            return true;
2175f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler        }
2185f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler    }
2195f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler
2205f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler    private Board mBoard;
2215f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler
2225f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler    @Override
2235f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler    public void onStart() {
2245f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler        super.onStart();
2255f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler
2265f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler        getWindow().addFlags(
2275f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                  WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON
2285f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
2295f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                );
2305f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler    }
2315f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler
2325f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler    @Override
2335f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler    public void onResume() {
2345f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler        super.onResume();
2355f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler        mBoard = new Board(this, null);
2365f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler        setContentView(mBoard);
2375f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler
2385f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler        mBoard.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {
2395f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler            @Override
2405f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler            public void onSystemUiVisibilityChange(int vis) {
2415f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                if (0 == (vis & View.SYSTEM_UI_FLAG_HIDE_NAVIGATION)) {
2425f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                    Nyandroid.this.finish();
2435f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler                }
2445f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler            }
2455f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler        });
2465f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler    }
2475f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler
2485f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler    @Override
2495f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler    public void onUserInteraction() {
2505f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler//        android.util.Log.d("Nyandroid", "finishing on user interaction");
2515f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler        finish();
2525f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler    }
2535f839f8ee426cc42af3ee0eaf5236f2f6930dd15Daniel Sandler}
254