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