diff options
-rw-r--r-- | AndroidManifest.xml | 9 | ||||
-rw-r--r-- | src/com/android/launcher2/RocketLauncher.java | 416 |
2 files changed, 0 insertions, 425 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 9ae31d75f..adb6ef352 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -99,15 +99,6 @@ android:resource="@xml/wallpaper_picker_preview" /> </activity> - <activity android:name="com.android.launcher2.RocketLauncher" - android:label="@string/dream_name" - android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"> - <intent-filter> - <action android:name="android.service.dreams.DreamService" /> - <category android:name="android.intent.category.DEFAULT" /> - </intent-filter> - </activity> - <!-- Intent received used to prepopulate the default workspace. --> <receiver android:name="com.android.launcher2.PreloadReceiver" diff --git a/src/com/android/launcher2/RocketLauncher.java b/src/com/android/launcher2/RocketLauncher.java deleted file mode 100644 index 6eefedd03..000000000 --- a/src/com/android/launcher2/RocketLauncher.java +++ /dev/null @@ -1,416 +0,0 @@ -/*); - * Copyright (C) 2011 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// TODO: -// background stellar matter: -// - add some slow horizontal parallax motion, or perhaps veeeeery gradual outward drift - -package com.android.launcher2; - -import android.animation.AnimatorSet; -import android.animation.TimeAnimator; -import android.content.ComponentName; -import android.content.Context; -import android.content.Intent; -import android.graphics.Bitmap; -import android.graphics.Point; -import android.graphics.Rect; -import android.os.Handler; -import android.support.v13.dreams.BasicDream; -import android.util.AttributeSet; -import android.util.DisplayMetrics; -import android.view.MotionEvent; -import android.view.View; -import android.view.ViewGroup; -import android.widget.FrameLayout; -import android.widget.ImageView; - -import com.android.launcher.R; - -import java.util.HashMap; -import java.util.Random; - -public class RocketLauncher extends BasicDream { - public static final boolean ROCKET_LAUNCHER = true; - - public static class Board extends FrameLayout - { - public static final boolean FIXED_STARS = true; - public static final boolean FLYING_STARS = true; - public static final int NUM_ICONS = 20; - - public static final float MANEUVERING_THRUST_SCALE = 0.1f; // tenth speed - private boolean mManeuveringThrusters = false; - private float mSpeedScale = 1.0f; - - public static final int LAUNCH_ZOOM_TIME = 400; // ms - - HashMap<ComponentName, Bitmap> mIcons; - ComponentName[] mComponentNames; - - static Random sRNG = new Random(); - - static float lerp(float a, float b, float f) { - return (b-a)*f + a; - } - - static float randfrange(float a, float b) { - return lerp(a, b, sRNG.nextFloat()); - } - - static int randsign() { - return sRNG.nextBoolean() ? 1 : -1; - } - - static <E> E pick(E[] array) { - if (array.length == 0) return null; - return array[sRNG.nextInt(array.length)]; - } - - public class FlyingIcon extends ImageView { - public static final float VMAX = 1000.0f; - public static final float VMIN = 100.0f; - public static final float ANGULAR_VMAX = 45f; - public static final float ANGULAR_VMIN = 0f; - public static final float SCALE_MIN = 0.5f; - public static final float SCALE_MAX = 4f; - - public float v, vr; - - public final float[] hsv = new float[3]; - - public float angle, anglex, angley; - public float fuse; - public float dist; - public float endscale; - public float boardCenterX, boardCenterY; - - public ComponentName component; - - public FlyingIcon(Context context, AttributeSet as) { - super(context, as); - setLayerType(View.LAYER_TYPE_HARDWARE, null); - - setBackgroundResource(R.drawable.flying_icon_bg); - //android.util.Log.d("RocketLauncher", "ctor: " + this); - hsv[1] = 1f; - hsv[2] = 1f; - } - - @Override - public boolean onTouchEvent(MotionEvent event) { - if (!mManeuveringThrusters || component == null) { - return false; - } - if (getAlpha() < 0.5f) { - setPressed(false); - return false; - } - - switch (event.getAction()) { - case MotionEvent.ACTION_DOWN: - setPressed(true); - Board.this.resetWarpTimer(); - break; - case MotionEvent.ACTION_MOVE: - final Rect hit = new Rect(); - final Point offset = new Point(); - getGlobalVisibleRect(hit, offset); - final int globx = (int) event.getX() + offset.x; - final int globy = (int) event.getY() + offset.y; - setPressed(hit.contains(globx, globy)); - Board.this.resetWarpTimer(); - break; - case MotionEvent.ACTION_UP: - if (isPressed()) { - setPressed(false); - postDelayed(new Runnable() { - public void run() { - try { - getContext().startActivity(new Intent(Intent.ACTION_MAIN) - .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) - .setComponent(component)); - } catch (android.content.ActivityNotFoundException e) { - } catch (SecurityException e) { - } - } - }, LAUNCH_ZOOM_TIME); - endscale = 0; - AnimatorSet s = LauncherAnimUtils.createAnimatorSet(); - s.playTogether( - LauncherAnimUtils.ofFloat(this, "scaleX", 15f), - LauncherAnimUtils.ofFloat(this, "scaleY", 15f), - LauncherAnimUtils.ofFloat(this, "alpha", 0f) - ); - - // make sure things are still moving until the very last instant the - // activity is visible - s.setDuration((int)(LAUNCH_ZOOM_TIME * 1.25)); - s.setInterpolator(new android.view.animation.AccelerateInterpolator(3)); - s.start(); - } - break; - } - return true; - } - - public String toString() { - return String.format("<'%s' @ (%.1f, %.1f) v=%.1f a=%.1f dist/fuse=%.1f/%.1f>", - "icon", getX(), getY(), v, angle, dist, fuse); - } - - public void randomizeIcon() { - component = pick(mComponentNames); - setImageBitmap(mIcons.get(component)); - } - - public void randomize() { - v = randfrange(VMIN, VMAX); - angle = randfrange(0, 360f); - anglex = (float) Math.sin(angle / 180. * Math.PI); - angley = (float) Math.cos(angle / 180. * Math.PI); - vr = randfrange(ANGULAR_VMIN, ANGULAR_VMAX) * randsign(); - endscale = randfrange(SCALE_MIN, SCALE_MAX); - - randomizeIcon(); - } - public void reset() { - randomize(); - boardCenterX = (Board.this.getWidth() - getWidth()) / 2; - boardCenterY = (Board.this.getHeight() - getHeight()) / 2; - setX(boardCenterX); - setY(boardCenterY); - fuse = (float) Math.max(boardCenterX, boardCenterY); - setRotation(180-angle); - setScaleX(0f); - setScaleY(0f); - dist = 0; - setAlpha(0f); - } - public void update(float dt) { - dist += v * dt; - setX(getX() + anglex * v * dt); - setY(getY() + angley * v * dt); - //setRotation(getRotation() + vr * dt); - if (endscale > 0) { - float scale = lerp(0, endscale, (float) Math.sqrt(dist / fuse)); - setScaleX(scale * lerp(1f, 0.75f, (float) Math.pow((v-VMIN)/(VMAX-VMIN),3))); - setScaleY(scale * lerp(1f, 1.5f, (float) Math.pow((v-VMIN)/(VMAX-VMIN),3))); - final float q1 = fuse*0.15f; - final float q4 = fuse*0.75f; - if (dist < q1) { - setAlpha((float) Math.sqrt(dist/q1)); - } else if (dist > q4) { - setAlpha((dist >= fuse) ? 0f : (1f-(float)Math.pow((dist-q4)/(fuse-q4),2))); - } else { - setAlpha(1f); - } - } - } - } - - public class FlyingStar extends FlyingIcon { - public FlyingStar(Context context, AttributeSet as) { - super(context, as); - } - public void randomizeIcon() { - setImageResource(R.drawable.widget_resize_handle_bottom); - } - public void randomize() { - super.randomize(); - v = randfrange(VMAX*0.75f, VMAX*2f); // fasticate - endscale = randfrange(1f, 2f); // ensmallen - } - } - - TimeAnimator mAnim; - - public Board(Context context, AttributeSet as) { - super(context, as); - - setBackgroundColor(0xFF000000); - - LauncherApplication app = (LauncherApplication)context.getApplicationContext(); - mIcons = app.getIconCache().getAllIcons(); - mComponentNames = new ComponentName[mIcons.size()]; - mComponentNames = mIcons.keySet().toArray(mComponentNames); - } - - private void reset() { - removeAllViews(); - - final ViewGroup.LayoutParams wrap = new ViewGroup.LayoutParams( - ViewGroup.LayoutParams.WRAP_CONTENT, - ViewGroup.LayoutParams.WRAP_CONTENT); - - if (FIXED_STARS) { - for(int i=0; i<20; i++) { - ImageView fixedStar = new ImageView(getContext(), null); - fixedStar.setImageResource(R.drawable.widget_resize_handle_bottom); - final float s = randfrange(0.25f, 0.75f); - fixedStar.setScaleX(s); - fixedStar.setScaleY(s); - fixedStar.setAlpha(0.75f); - addView(fixedStar, wrap); - fixedStar.setX(randfrange(0, getWidth())); - fixedStar.setY(randfrange(0, getHeight())); - } - } - - for(int i=0; i<NUM_ICONS*2; i++) { - FlyingIcon nv = (FLYING_STARS && (i < NUM_ICONS)) - ? new FlyingStar(getContext(), null) - : new FlyingIcon(getContext(), null); - addView(nv, wrap); - nv.reset(); - } - - mAnim = new TimeAnimator(); - mAnim.setTimeListener(new TimeAnimator.TimeListener() { - public void onTimeUpdate(TimeAnimator animation, long totalTime, long deltaTime) { - // setRotation(totalTime * 0.01f); // not as cool as you would think - - final int START_ZOOM_TIME = 3000; - if (totalTime < START_ZOOM_TIME) { - final float x = totalTime/(float)START_ZOOM_TIME; - final float s = 1f-(float)Math.pow(x-1, 4); - setScaleX(s); setScaleY(s); - } else { - setScaleX(1.0f); setScaleY(1.0f); - } - - if (mManeuveringThrusters) { - if (mSpeedScale > MANEUVERING_THRUST_SCALE) { - mSpeedScale -= (2*deltaTime/1000f); - } - if (mSpeedScale < MANEUVERING_THRUST_SCALE) { - mSpeedScale = MANEUVERING_THRUST_SCALE; - } - } else { - if (mSpeedScale < 1.0f) { - mSpeedScale += (deltaTime/1000f); - } - if (mSpeedScale > 1.0f) { - mSpeedScale = 1.0f; - } - } - - for (int i=0; i<getChildCount(); i++) { - View v = getChildAt(i); - if (!(v instanceof FlyingIcon)) continue; - FlyingIcon nv = (FlyingIcon) v; - nv.update(deltaTime / 1000f * mSpeedScale); - final float scaledWidth = nv.getWidth() * nv.getScaleX(); - final float scaledHeight = nv.getHeight() * nv.getScaleY(); - if ( nv.getX() + scaledWidth < 0 - || nv.getX() - scaledWidth > getWidth() - || nv.getY() + scaledHeight < 0 - || nv.getY() - scaledHeight > getHeight()) - { - nv.reset(); - } - } - } - }); - } - - @Override - protected void onAttachedToWindow() { - super.onAttachedToWindow(); - setLayerType(View.LAYER_TYPE_HARDWARE, null); - setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE); - - reset(); - mAnim.start(); - } - - protected void onSizeChanged (int w, int h, int oldw, int oldh) { - super.onSizeChanged(w,h,oldw,oldh); - mAnim.cancel(); - reset(); - mAnim.start(); - } - - - @Override - protected void onDetachedFromWindow() { - super.onDetachedFromWindow(); - mAnim.cancel(); - } - - @Override - public boolean isOpaque() { - return true; - } - - @Override - public boolean onInterceptTouchEvent(MotionEvent e) { - // we want to eat touch events ourselves if we're in warp speed - return (!(ROCKET_LAUNCHER && mManeuveringThrusters)); - } - - final Runnable mEngageWarp = new Runnable() { - @Override - public void run() { - mManeuveringThrusters = false; - } - }; - public void resetWarpTimer() { - final Handler h = getHandler(); - h.removeCallbacks(mEngageWarp); - h.postDelayed(mEngageWarp, 5000); - } - - @Override - public boolean onTouchEvent(MotionEvent event) { - if (!ROCKET_LAUNCHER) { - return true; - } - - if (event.getAction() == MotionEvent.ACTION_DOWN) { - if (!mManeuveringThrusters) { - mManeuveringThrusters = true; - resetWarpTimer(); - return true; - } - } - - return false; - } - } - - @Override - public void onStart() { - super.onStart(); - - DisplayMetrics metrics = new DisplayMetrics(); - getWindowManager().getDefaultDisplay().getMetrics(metrics); - final int longside = metrics.widthPixels > metrics.heightPixels - ? metrics.widthPixels : metrics.heightPixels; - - Board b = new Board(this, null); - setContentView(b, new ViewGroup.LayoutParams(longside, longside)); - b.setX((metrics.widthPixels - longside) / 2); - b.setY((metrics.heightPixels - longside) / 2); - } - - @Override - public void onUserInteraction() { - if (!ROCKET_LAUNCHER) { - finish(); - } - } -} |