From c9b1877f9acf604897c719d70dc99685d10849b5 Mon Sep 17 00:00:00 2001 From: Daniel Sandler Date: Thu, 22 Apr 2010 14:37:59 -0400 Subject: New Launcher feature: "hotseat" icons. The hotseats are permanent slots on either side of the AllApps button. Their functions are: LEFT/BOTTOM: Phone Launched via the hardcoded class name com.android.contacts/.ContactsLaunchActivity. RIGHT/TOP: Browser Launched by querying to see which application is the default for URLs, then starting that activity directly. In the future, it would be ideal to allow an application with permission to access LauncherProvider to customize these (icons, contentDescriptions, and Intents). Bug: 2559083 Change-Id: I56f6e745f8574aa17e28feaa9d2118fb4a715cd4 --- src/com/android/launcher2/DeleteZone.java | 20 +------- src/com/android/launcher2/Launcher.java | 79 ++++++++++++++++++++++++++++++- 2 files changed, 79 insertions(+), 20 deletions(-) (limited to 'src/com') diff --git a/src/com/android/launcher2/DeleteZone.java b/src/com/android/launcher2/DeleteZone.java index 9065de494..3a6c63d8b 100644 --- a/src/com/android/launcher2/DeleteZone.java +++ b/src/com/android/launcher2/DeleteZone.java @@ -183,15 +183,7 @@ public class DeleteZone extends ImageView implements DropTarget, DragController. animationSet.setDuration(ANIMATION_DURATION); } if (mHandleInAnimation == null) { - if (mOrientation == ORIENTATION_HORIZONTAL) { - mHandleInAnimation = new TranslateAnimation(Animation.ABSOLUTE, 0.0f, - Animation.ABSOLUTE, 0.0f, Animation.RELATIVE_TO_SELF, 1.0f, - Animation.RELATIVE_TO_SELF, 0.0f); - } else { - mHandleInAnimation = new TranslateAnimation(Animation.RELATIVE_TO_SELF, - 1.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.ABSOLUTE, 0.0f, - Animation.ABSOLUTE, 0.0f); - } + mHandleInAnimation = new AlphaAnimation(0.0f, 1.0f); mHandleInAnimation.setDuration(ANIMATION_DURATION); } if (mOutAnimation == null) { @@ -211,15 +203,7 @@ public class DeleteZone extends ImageView implements DropTarget, DragController. animationSet.setDuration(ANIMATION_DURATION); } if (mHandleOutAnimation == null) { - if (mOrientation == ORIENTATION_HORIZONTAL) { - mHandleOutAnimation = new FastTranslateAnimation(Animation.ABSOLUTE, 0.0f, - Animation.ABSOLUTE, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f, - Animation.RELATIVE_TO_SELF, 1.0f); - } else { - mHandleOutAnimation = new FastTranslateAnimation(Animation.RELATIVE_TO_SELF, - 0.0f, Animation.RELATIVE_TO_SELF, 1.0f, Animation.ABSOLUTE, 0.0f, - Animation.ABSOLUTE, 0.0f); - } + mHandleOutAnimation = new AlphaAnimation(1.0f, 0.0f); mHandleOutAnimation.setFillAfter(true); mHandleOutAnimation.setDuration(ANIMATION_DURATION); } diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java index 868a9d17f..5a2a7d37e 100644 --- a/src/com/android/launcher2/Launcher.java +++ b/src/com/android/launcher2/Launcher.java @@ -26,12 +26,14 @@ import android.app.StatusBarManager; import android.app.WallpaperManager; import android.content.ActivityNotFoundException; import android.content.BroadcastReceiver; +import android.content.ComponentName; import android.content.ContentResolver; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.Intent.ShortcutIconResource; import android.content.IntentFilter; +import android.content.pm.ActivityInfo; import android.content.pm.PackageManager; import android.content.res.Configuration; import android.content.res.Resources; @@ -41,6 +43,7 @@ import android.graphics.Rect; import android.graphics.Canvas; import android.graphics.drawable.Drawable; import android.graphics.drawable.ColorDrawable; +import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.os.Parcelable; @@ -197,6 +200,17 @@ public final class Launcher extends Activity private ImageView mPreviousView; private ImageView mNextView; + // Hotseats (quick-launch icons next to AllApps) + // TODO: move these intial intents out to Uris in an XML resource + private static final int NUM_HOTSEATS = 2; + private Intent[] mHotseats = new Intent[] { + new Intent(Intent.ACTION_MAIN) + .setComponent(ComponentName.unflattenFromString( + "com.android.contacts/.ContactsLaunchActivity")), + new Intent(Intent.ACTION_WEB_SEARCH, Uri.EMPTY), + }; + private CharSequence[] mHotseatLabels = new CharSequence[2]; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -215,6 +229,7 @@ public final class Launcher extends Activity android.os.Debug.startMethodTracing("/sdcard/launcher"); } + loadHotseats(); checkForLocaleChange(); setWallpaperDimension(); @@ -273,6 +288,8 @@ public final class Launcher extends Activity writeConfiguration(this, localeConfiguration); mIconCache.flush(); + + loadHotseats(); } } @@ -351,6 +368,44 @@ public final class Launcher extends Activity wpm.suggestDesiredDimensions(width * WALLPAPER_SCREENS_SPAN, height); } + private void loadHotseats() { + PackageManager pm = getPackageManager(); + for (int i=0; i= 0 && mHotseats[index] != null) { + startActivitySafely( + mHotseats[index], + "hotseat" + ); + } + } /** * Creates a view representing a shortcut. @@ -1280,7 +1355,7 @@ public final class Launcher extends Activity startActivity(intent); } catch (ActivityNotFoundException e) { Toast.makeText(this, R.string.activity_not_found, Toast.LENGTH_SHORT).show(); - Log.e(TAG, "Unable to launch. tag=" + tag + " intent=" + intent); + Log.e(TAG, "Unable to launch. tag=" + tag + " intent=" + intent, e); } catch (SecurityException e) { Toast.makeText(this, R.string.activity_not_found, Toast.LENGTH_SHORT).show(); Log.e(TAG, "Launcher does not have the permission to launch " + intent + -- cgit v1.2.3