diff options
| author | The Android Open Source Project <initial-contribution@android.com> | 2009-03-03 18:28:16 -0800 |
|---|---|---|
| committer | The Android Open Source Project <initial-contribution@android.com> | 2009-03-03 18:28:16 -0800 |
| commit | d4aee0c0caa00aa02d4c50ed28151591ac0456b5 (patch) | |
| tree | 4b825dc642cb6eb9a060e54bf8d69288fbee4904 /samples/Home/src/com | |
| parent | d2f2b1d7b77d06bce8cf9340171cf6c25cd720c4 (diff) | |
| download | android_development-d4aee0c0caa00aa02d4c50ed28151591ac0456b5.tar.gz android_development-d4aee0c0caa00aa02d4c50ed28151591ac0456b5.tar.bz2 android_development-d4aee0c0caa00aa02d4c50ed28151591ac0456b5.zip | |
auto import from //depot/cupcake/@135843
Diffstat (limited to 'samples/Home/src/com')
4 files changed, 0 insertions, 1267 deletions
diff --git a/samples/Home/src/com/example/android/home/ApplicationInfo.java b/samples/Home/src/com/example/android/home/ApplicationInfo.java deleted file mode 100644 index 79f6234c8..000000000 --- a/samples/Home/src/com/example/android/home/ApplicationInfo.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright (C) 2007 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. - */ - -package com.example.android.home; - -import android.content.ComponentName; -import android.content.Intent; -import android.graphics.drawable.Drawable; - -/** - * Represents a launchable application. An application is made of a name (or title), an intent - * and an icon. - */ -class ApplicationInfo { - /** - * The application name. - */ - CharSequence title; - - /** - * The intent used to start the application. - */ - Intent intent; - - /** - * The application icon. - */ - Drawable icon; - - /** - * When set to true, indicates that the icon has been resized. - */ - boolean filtered; - - /** - * Creates the application intent based on a component name and various launch flags. - * - * @param className the class name of the component representing the intent - * @param launchFlags the launch flags - */ - final void setActivity(ComponentName className, int launchFlags) { - intent = new Intent(Intent.ACTION_MAIN); - intent.addCategory(Intent.CATEGORY_LAUNCHER); - intent.setComponent(className); - intent.setFlags(launchFlags); - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (!(o instanceof ApplicationInfo)) { - return false; - } - - ApplicationInfo that = (ApplicationInfo) o; - return title.equals(that.title) && - intent.getComponent().getClassName().equals( - that.intent.getComponent().getClassName()); - } - - @Override - public int hashCode() { - int result; - result = (title != null ? title.hashCode() : 0); - final String name = intent.getComponent().getClassName(); - result = 31 * result + (name != null ? name.hashCode() : 0); - return result; - } -} diff --git a/samples/Home/src/com/example/android/home/ApplicationsStackLayout.java b/samples/Home/src/com/example/android/home/ApplicationsStackLayout.java deleted file mode 100644 index a2073fa80..000000000 --- a/samples/Home/src/com/example/android/home/ApplicationsStackLayout.java +++ /dev/null @@ -1,342 +0,0 @@ -/* - * Copyright (C) 2007 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. - */ - -package com.example.android.home; - -import android.content.Context; -import android.content.Intent; -import android.content.res.TypedArray; -import android.graphics.Canvas; -import android.graphics.Rect; -import android.graphics.drawable.Drawable; -import android.util.AttributeSet; -import android.view.View; -import android.view.ViewGroup; -import android.view.LayoutInflater; -import android.widget.TextView; -import android.*; - -import java.util.List; -import java.util.Map; - -/** - * The ApplicationsStackLayout is a specialized layout used for the purpose of the home screen - * only. This layout stacks various icons in three distinct areas: the recents, the favorites - * (or faves) and the button. - * - * This layout supports two different orientations: vertical and horizontal. When horizontal, - * the areas are laid out this way: - * - * [RECENTS][FAVES][BUTTON] - * - * When vertical, the layout is the following: - * - * [RECENTS] - * [FAVES] - * [BUTTON] - * - * The layout operates from the "bottom up" (or from right to left.) This means that the button - * area will first be laid out, then the faves area, then the recents. When there are too many - * favorites, the recents area is not displayed. - * - * The following attributes can be set in XML: - * - * orientation: horizontal or vertical - * marginLeft: the left margin of each element in the stack - * marginTop: the top margin of each element in the stack - * marginRight: the right margin of each element in the stack - * marginBottom: the bottom margin of each element in the stack - */ -public class ApplicationsStackLayout extends ViewGroup implements View.OnClickListener { - public static final int HORIZONTAL = 0; - public static final int VERTICAL = 1; - - private View mButton; - private LayoutInflater mInflater; - - private int mFavoritesEnd; - private int mFavoritesStart; - - private List<ApplicationInfo> mFavorites; - private List<ApplicationInfo> mRecents; - - private int mOrientation = VERTICAL; - - private int mMarginLeft; - private int mMarginTop; - private int mMarginRight; - private int mMarginBottom; - - private Rect mDrawRect = new Rect(); - - private Drawable mBackground; - private int mIconSize; - - public ApplicationsStackLayout(Context context) { - super(context); - initLayout(); - } - - public ApplicationsStackLayout(Context context, AttributeSet attrs) { - super(context, attrs); - - TypedArray a = - context.obtainStyledAttributes(attrs, R.styleable.ApplicationsStackLayout); - - mOrientation = a.getInt(R.styleable.ApplicationsStackLayout_stackOrientation, VERTICAL); - - mMarginLeft = a.getDimensionPixelSize(R.styleable.ApplicationsStackLayout_marginLeft, 0); - mMarginTop = a.getDimensionPixelSize(R.styleable.ApplicationsStackLayout_marginTop, 0); - mMarginRight = a.getDimensionPixelSize(R.styleable.ApplicationsStackLayout_marginRight, 0); - mMarginBottom = a.getDimensionPixelSize(R.styleable.ApplicationsStackLayout_marginBottom, 0); - - a.recycle(); - - mIconSize = (int) getResources().getDimension(android.R.dimen.app_icon_size); - - initLayout(); - } - - private void initLayout() { - mInflater = LayoutInflater.from(getContext()); - mButton = mInflater.inflate(R.layout.all_applications_button, this, false); - addView(mButton); - - mBackground = getBackground(); - setBackgroundDrawable(null); - setWillNotDraw(false); - } - - /** - * Return the current orientation, either VERTICAL (default) or HORIZONTAL. - * - * @return the stack orientation - */ - public int getOrientation() { - return mOrientation; - } - - @Override - protected void onDraw(Canvas canvas) { - final Drawable background = mBackground; - - final int right = getWidth(); - final int bottom = getHeight(); - - // Draw behind recents - if (mOrientation == VERTICAL) { - mDrawRect.set(0, 0, right, mFavoritesStart); - } else { - mDrawRect.set(0, 0, mFavoritesStart, bottom); - } - background.setBounds(mDrawRect); - background.draw(canvas); - - // Draw behind favorites - if (mFavoritesStart > -1) { - if (mOrientation == VERTICAL) { - mDrawRect.set(0, mFavoritesStart, right, mFavoritesEnd); - } else { - mDrawRect.set(mFavoritesStart, 0, mFavoritesEnd, bottom); - } - background.setBounds(mDrawRect); - background.draw(canvas); - } - - super.onDraw(canvas); - } - - @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - super.onMeasure(widthMeasureSpec, heightMeasureSpec); - - final int widthMode = MeasureSpec.getMode(widthMeasureSpec); - final int widthSize = MeasureSpec.getSize(widthMeasureSpec); - - final int heightMode = MeasureSpec.getMode(heightMeasureSpec); - final int heightSize = MeasureSpec.getSize(heightMeasureSpec); - - if (widthMode != MeasureSpec.EXACTLY || heightMode != MeasureSpec.EXACTLY) { - throw new IllegalStateException("ApplicationsStackLayout can only be used with " - + "measure spec mode=EXACTLY"); - } - - setMeasuredDimension(widthSize, heightSize); - } - - @Override - protected void onLayout(boolean changed, int l, int t, int r, int b) { - removeAllApplications(); - - LayoutParams layoutParams = mButton.getLayoutParams(); - final int widthSpec = MeasureSpec.makeMeasureSpec(layoutParams.width, MeasureSpec.EXACTLY); - final int heightSpec = MeasureSpec.makeMeasureSpec(layoutParams.height, MeasureSpec.EXACTLY); - mButton.measure(widthSpec, heightSpec); - - if (mOrientation == VERTICAL) { - layoutVertical(); - } else { - layoutHorizontal(); - } - } - - private void layoutVertical() { - int childLeft = 0; - int childTop = getHeight(); - - int childWidth = mButton.getMeasuredWidth(); - int childHeight = mButton.getMeasuredHeight(); - - childTop -= childHeight + mMarginBottom; - mButton.layout(childLeft, childTop, childLeft + childWidth, childTop + childHeight); - childTop -= mMarginTop; - mFavoritesEnd = childTop - mMarginBottom; - - int oldChildTop = childTop; - childTop = stackApplications(mFavorites, childLeft, childTop); - if (childTop != oldChildTop) { - mFavoritesStart = childTop + mMarginTop; - } else { - mFavoritesStart = -1; - } - - stackApplications(mRecents, childLeft, childTop); - } - - private void layoutHorizontal() { - int childLeft = getWidth(); - int childTop = 0; - - int childWidth = mButton.getMeasuredWidth(); - int childHeight = mButton.getMeasuredHeight(); - - childLeft -= childWidth; - mButton.layout(childLeft, childTop, childLeft + childWidth, childTop + childHeight); - childLeft -= mMarginLeft; - mFavoritesEnd = childLeft - mMarginRight; - - int oldChildLeft = childLeft; - childLeft = stackApplications(mFavorites, childLeft, childTop); - if (childLeft != oldChildLeft) { - mFavoritesStart = childLeft + mMarginLeft; - } else { - mFavoritesStart = -1; - } - - stackApplications(mRecents, childLeft, childTop); - } - - private int stackApplications(List<ApplicationInfo> applications, int childLeft, int childTop) { - LayoutParams layoutParams; - int widthSpec; - int heightSpec; - int childWidth; - int childHeight; - - final boolean isVertical = mOrientation == VERTICAL; - - final int count = applications.size(); - for (int i = count - 1; i >= 0; i--) { - final ApplicationInfo info = applications.get(i); - final View view = createApplicationIcon(mInflater, this, info); - - layoutParams = view.getLayoutParams(); - widthSpec = MeasureSpec.makeMeasureSpec(layoutParams.width, MeasureSpec.EXACTLY); - heightSpec = MeasureSpec.makeMeasureSpec(layoutParams.height, MeasureSpec.EXACTLY); - view.measure(widthSpec, heightSpec); - - childWidth = view.getMeasuredWidth(); - childHeight = view.getMeasuredHeight(); - - if (isVertical) { - childTop -= childHeight + mMarginBottom; - - if (childTop < 0) { - childTop += childHeight + mMarginBottom; - break; - } - } else { - childLeft -= childWidth + mMarginRight; - - if (childLeft < 0) { - childLeft += childWidth + mMarginRight; - break; - } - } - - addViewInLayout(view, -1, layoutParams); - - view.layout(childLeft, childTop, childLeft + childWidth, childTop + childHeight); - - if (isVertical) { - childTop -= mMarginTop; - } else { - childLeft -= mMarginLeft; - } - } - - return isVertical ? childTop : childLeft; - } - - private void removeAllApplications() { - final int count = getChildCount(); - for (int i = count - 1; i >= 0; i--) { - final View view = getChildAt(i); - if (view != mButton) { - removeViewAt(i); - } - } - } - - private View createApplicationIcon(LayoutInflater inflater, - ViewGroup group, ApplicationInfo info) { - - TextView textView = (TextView) inflater.inflate(R.layout.favorite, group, false); - - info.icon.setBounds(0, 0, mIconSize, mIconSize); - textView.setCompoundDrawables(null, info.icon, null, null); - textView.setText(info.title); - - textView.setTag(info.intent); - textView.setOnClickListener(this); - - return textView; - } - - /** - * Sets the list of favorites. - * - * @param applications the applications to put in the favorites area - */ - public void setFavorites(List<ApplicationInfo> applications) { - mFavorites = applications; - requestLayout(); - } - - /** - * Sets the list of recents. - * - * @param applications the applications to put in the recents area - */ - public void setRecents(List<ApplicationInfo> applications) { - mRecents = applications; - requestLayout(); - } - - public void onClick(View v) { - getContext().startActivity((Intent) v.getTag()); - } -} diff --git a/samples/Home/src/com/example/android/home/Home.java b/samples/Home/src/com/example/android/home/Home.java deleted file mode 100644 index de67ef4d2..000000000 --- a/samples/Home/src/com/example/android/home/Home.java +++ /dev/null @@ -1,690 +0,0 @@ -/* - * Copyright (C) 2007 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. - */ - -package com.example.android.home; - -import android.app.Activity; -import android.app.ActivityManager; -import android.app.SearchManager; -import android.content.BroadcastReceiver; -import android.content.ComponentName; -import android.content.ContentResolver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.content.pm.ActivityInfo; -import android.content.pm.PackageManager; -import android.content.pm.ResolveInfo; -import android.content.res.Resources; -import android.database.ContentObserver; -import android.database.Cursor; -import android.graphics.Bitmap; -import android.graphics.Canvas; -import android.graphics.Paint; -import android.graphics.PaintFlagsDrawFilter; -import android.graphics.PixelFormat; -import android.graphics.Rect; -import android.graphics.drawable.BitmapDrawable; -import android.graphics.drawable.Drawable; -import android.graphics.drawable.PaintDrawable; -import android.os.Bundle; -import android.os.Handler; -import android.util.Log; -import android.view.KeyEvent; -import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuItem; -import android.view.View; -import android.view.ViewGroup; -import android.view.animation.Animation; -import android.view.animation.AnimationUtils; -import android.view.animation.LayoutAnimationController; -import android.widget.AdapterView; -import android.widget.ArrayAdapter; -import android.widget.CheckBox; -import android.widget.GridView; -import android.widget.TextView; -import android.net.Uri; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.LinkedList; -import java.util.List; - -public class Home extends Activity { - /** - * Tag used for logging errors. - */ - private static final String LOG_TAG = "Home"; - - /** - * Keys during freeze/thaw. - */ - private static final String KEY_SAVE_GRID_OPENED = "grid.opened"; - - // Identifiers for option menu items - private static final int MENU_WALLPAPER_SETTINGS = Menu.FIRST + 1; - private static final int MENU_SEARCH = MENU_WALLPAPER_SETTINGS + 1; - private static final int MENU_SETTINGS = MENU_SEARCH + 1; - - /** - * Maximum number of recent tasks to query. - */ - private static final int MAX_RECENT_TASKS = 20; - - private static boolean mWallpaperChecked; - private static ArrayList<ApplicationInfo> mApplications; - private static LinkedList<ApplicationInfo> mFavorites; - - private Handler mHandler = new Handler(); - - private final BroadcastReceiver mWallpaperReceiver = new WallpaperIntentReceiver(); - private final BroadcastReceiver mApplicationsReceiver = new ApplicationsIntentReceiver(); - private final ContentObserver mObserver = new FavoritesChangeObserver(); - - private GridView mGrid; - - private LayoutAnimationController mShowLayoutAnimation; - private LayoutAnimationController mHideLayoutAnimation; - - private boolean mBlockAnimation; - - private View mShowApplications; - private CheckBox mShowApplicationsCheck; - - private ApplicationsStackLayout mApplicationsStack; - - private Animation mGridEntry; - private Animation mGridExit; - - @Override - public void onCreate(Bundle icicle) { - super.onCreate(icicle); - - setDefaultKeyMode(DEFAULT_KEYS_SEARCH_LOCAL); - - setContentView(R.layout.home); - - registerIntentReceivers(); - registerContentObservers(); - - setDefaultWallpaper(); - - loadApplications(true); - - bindApplications(); - bindFavorites(true); - bindRecents(); - bindButtons(); - - mGridEntry = AnimationUtils.loadAnimation(this, R.anim.grid_entry); - mGridExit = AnimationUtils.loadAnimation(this, R.anim.grid_exit); - } - - @Override - protected void onNewIntent(Intent intent) { - super.onNewIntent(intent); - - // Close the menu - if (Intent.ACTION_MAIN.equals(intent.getAction())) { - getWindow().closeAllPanels(); - } - } - - @Override - public void onDestroy() { - super.onDestroy(); - - // Remove the callback for the cached drawables or we leak - // the previous Home screen on orientation change - final int count = mApplications.size(); - for (int i = 0; i < count; i++) { - mApplications.get(i).icon.setCallback(null); - } - - getContentResolver().unregisterContentObserver(mObserver); - unregisterReceiver(mWallpaperReceiver); - unregisterReceiver(mApplicationsReceiver); - } - - @Override - protected void onResume() { - super.onResume(); - bindRecents(); - } - - @Override - protected void onRestoreInstanceState(Bundle state) { - super.onRestoreInstanceState(state); - final boolean opened = state.getBoolean(KEY_SAVE_GRID_OPENED, false); - if (opened) { - showApplications(false); - } - } - - @Override - protected void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - outState.putBoolean(KEY_SAVE_GRID_OPENED, mGrid.getVisibility() == View.VISIBLE); - } - - /** - * Registers various intent receivers. The current implementation registers - * only a wallpaper intent receiver to let other applications change the - * wallpaper. - */ - private void registerIntentReceivers() { - IntentFilter filter = new IntentFilter(Intent.ACTION_WALLPAPER_CHANGED); - registerReceiver(mWallpaperReceiver, filter); - - filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED); - filter.addAction(Intent.ACTION_PACKAGE_REMOVED); - filter.addAction(Intent.ACTION_PACKAGE_CHANGED); - filter.addDataScheme("package"); - registerReceiver(mApplicationsReceiver, filter); - } - - /** - * Registers various content observers. The current implementation registers - * only a favorites observer to keep track of the favorites applications. - */ - private void registerContentObservers() { - ContentResolver resolver = getContentResolver(); - resolver.registerContentObserver(Uri.parse("content://" + - android.provider.Settings.AUTHORITY + "/favorites?notify=true"), true, mObserver); - } - - /** - * Creates a new appplications adapter for the grid view and registers it. - */ - private void bindApplications() { - if (mGrid == null) { - mGrid = (GridView) findViewById(R.id.all_apps); - } - mGrid.setAdapter(new ApplicationsAdapter(this, mApplications)); - mGrid.setSelection(0); - - if (mApplicationsStack == null) { - mApplicationsStack = (ApplicationsStackLayout) findViewById(R.id.faves_and_recents); - } - } - - /** - * Binds actions to the various buttons. - */ - private void bindButtons() { - mShowApplications = findViewById(R.id.show_all_apps); - mShowApplications.setOnClickListener(new ShowApplications()); - mShowApplicationsCheck = (CheckBox) findViewById(R.id.show_all_apps_check); - - mGrid.setOnItemClickListener(new ApplicationLauncher()); - } - - /** - * When no wallpaper was manually set, a default wallpaper is used instead. - */ - private void setDefaultWallpaper() { - if (!mWallpaperChecked) { - Drawable wallpaper = peekWallpaper(); - if (wallpaper == null) { - try { - clearWallpaper(); - } catch (IOException e) { - Log.e(LOG_TAG, "Failed to clear wallpaper " + e); - } - } else { - getWindow().setBackgroundDrawable(wallpaper); - } - mWallpaperChecked = true; - } - } - - /** - * Refreshes the favorite applications stacked over the all apps button. - * The number of favorites depends on the user. - */ - private void bindFavorites(boolean isLaunching) { - if (!isLaunching || mFavorites == null) { - final Cursor c = getContentResolver().query(Uri.parse("content://" + - android.provider.Settings.AUTHORITY + "/favorites?notify=true"), - null, null, null, "cellX"); - - final int intentIndex = c.getColumnIndexOrThrow("intent"); - final int titleIndex = c.getColumnIndexOrThrow("title"); - final int typeIndex = c.getColumnIndexOrThrow("itemType"); - - final PackageManager manager = getPackageManager(); - - ApplicationInfo info; - String intentDescription; - - if (mFavorites == null) { - mFavorites = new LinkedList<ApplicationInfo>(); - } else { - mFavorites.clear(); - } - - while (c.moveToNext()) { - final int itemType = c.getInt(typeIndex); - - if (itemType == 0 || // 0 == application - itemType == 1) { // 1 == shortcut - - intentDescription = c.getString(intentIndex); - if (intentDescription == null) { - continue; - } - - Intent intent; - try { - intent = Intent.getIntent(intentDescription); - } catch (java.net.URISyntaxException e) { - continue; - } - info = getApplicationInfo(manager, intent); - if (info != null) { - info.title = c.getString(titleIndex); - info.intent = intent; - mFavorites.addFirst(info); - } - } - } - - c.close(); - } - - mApplicationsStack.setFavorites(mFavorites); - } - - /** - * Refreshes the recently launched applications stacked over the favorites. The number - * of recents depends on how many favorites are present. - */ - private void bindRecents() { - final PackageManager manager = getPackageManager(); - final ActivityManager tasksManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); - final List<ActivityManager.RecentTaskInfo> recentTasks = tasksManager.getRecentTasks( - MAX_RECENT_TASKS, 0); - - final int count = recentTasks.size(); - final ArrayList<ApplicationInfo> recents = new ArrayList<ApplicationInfo>(); - - for (int i = count - 1; i >= 0; i--) { - final Intent intent = recentTasks.get(i).baseIntent; - - if (Intent.ACTION_MAIN.equals(intent.getAction()) && - !intent.hasCategory(Intent.CATEGORY_HOME)) { - - ApplicationInfo info = getApplicationInfo(manager, intent); - if (info != null) { - info.intent = intent; - if (!mFavorites.contains(info)) { - recents.add(info); - } - } - } - } - - mApplicationsStack.setRecents(recents); - } - - private static ApplicationInfo getApplicationInfo(PackageManager manager, Intent intent) { - final ResolveInfo resolveInfo = manager.resolveActivity(intent, 0); - - if (resolveInfo == null) { - return null; - } - - final ApplicationInfo info = new ApplicationInfo(); - final ActivityInfo activityInfo = resolveInfo.activityInfo; - info.icon = activityInfo.loadIcon(manager); - if (info.title == null || info.title.length() == 0) { - info.title = activityInfo.loadLabel(manager); - } - if (info.title == null) { - info.title = ""; - } - return info; - } - - /** - * When the notification that favorites have changed is received, requests - * a favorites list refresh. - */ - private void onFavoritesChanged() { - bindFavorites(false); - } - - @Override - public boolean dispatchKeyEvent(KeyEvent event) { - if (event.getAction() == KeyEvent.ACTION_DOWN) { - switch (event.getKeyCode()) { - case KeyEvent.KEYCODE_BACK: - return true; - case KeyEvent.KEYCODE_HOME: - return true; - } - } - - return super.dispatchKeyEvent(event); - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - super.onCreateOptionsMenu(menu); - - menu.add(0, MENU_WALLPAPER_SETTINGS, 0, R.string.menu_wallpaper) - .setIcon(android.R.drawable.ic_menu_gallery) - .setAlphabeticShortcut('W'); - menu.add(0, MENU_SEARCH, 0, R.string.menu_search) - .setIcon(android.R.drawable.ic_search_category_default) - .setAlphabeticShortcut(SearchManager.MENU_KEY); - menu.add(0, MENU_SETTINGS, 0, R.string.menu_settings) - .setIcon(android.R.drawable.ic_menu_preferences) - .setIntent(new Intent(android.provider.Settings.ACTION_SETTINGS)); - - return true; - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - switch (item.getItemId()) { - case MENU_WALLPAPER_SETTINGS: - startWallpaper(); - return true; - case MENU_SEARCH: - onSearchRequested(); - return true; - } - - return super.onOptionsItemSelected(item); - } - - private void startWallpaper() { - final Intent pickWallpaper = new Intent(Intent.ACTION_SET_WALLPAPER); - startActivity(Intent.createChooser(pickWallpaper, getString(R.string.menu_wallpaper))); - } - - /** - * Loads the list of installed applications in mApplications. - */ - private void loadApplications(boolean isLaunching) { - if (isLaunching && mApplications != null) { - return; - } - - PackageManager manager = getPackageManager(); - - Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); - mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); - - final List<ResolveInfo> apps = manager.queryIntentActivities(mainIntent, 0); - Collections.sort(apps, new ResolveInfo.DisplayNameComparator(manager)); - - if (apps != null) { - final int count = apps.size(); - - if (mApplications == null) { - mApplications = new ArrayList<ApplicationInfo>(count); - } - mApplications.clear(); - - for (int i = 0; i < count; i++) { - ApplicationInfo application = new ApplicationInfo(); - ResolveInfo info = apps.get(i); - - application.title = info.loadLabel(manager); - application.setActivity(new ComponentName( - info.activityInfo.applicationInfo.packageName, - info.activityInfo.name), - Intent.FLAG_ACTIVITY_NEW_TASK - | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); - application.icon = info.activityInfo.loadIcon(manager); - - mApplications.add(application); - } - } - } - - /** - * Shows all of the applications by playing an animation on the grid. - */ - private void showApplications(boolean animate) { - if (mBlockAnimation) { - return; - } - mBlockAnimation = true; - - mShowApplicationsCheck.toggle(); - - if (mShowLayoutAnimation == null) { - mShowLayoutAnimation = AnimationUtils.loadLayoutAnimation( - this, R.anim.show_applications); - } - - // This enables a layout animation; if you uncomment this code, you need to - // comment the line mGrid.startAnimation() below -// mGrid.setLayoutAnimationListener(new ShowGrid()); -// mGrid.setLayoutAnimation(mShowLayoutAnimation); -// mGrid.startLayoutAnimation(); - - if (animate) { - mGridEntry.setAnimationListener(new ShowGrid()); - mGrid.startAnimation(mGridEntry); - } - - mGrid.setVisibility(View.VISIBLE); - - if (!animate) { - mBlockAnimation = false; - } - - // ViewDebug.startHierarchyTracing("Home", mGrid); - } - - /** - * Hides all of the applications by playing an animation on the grid. - */ - private void hideApplications() { - if (mBlockAnimation) { - return; - } - mBlockAnimation = true; - - mShowApplicationsCheck.toggle(); - - if (mHideLayoutAnimation == null) { - mHideLayoutAnimation = AnimationUtils.loadLayoutAnimation( - this, R.anim.hide_applications); - } - - mGridExit.setAnimationListener(new HideGrid()); - mGrid.startAnimation(mGridExit); - mGrid.setVisibility(View.INVISIBLE); - mShowApplications.requestFocus(); - - // This enables a layout animation; if you uncomment this code, you need to - // comment the line mGrid.startAnimation() above -// mGrid.setLayoutAnimationListener(new HideGrid()); -// mGrid.setLayoutAnimation(mHideLayoutAnimation); -// mGrid.startLayoutAnimation(); - } - - /** - * Receives intents from other applications to change the wallpaper. - */ - private class WallpaperIntentReceiver extends BroadcastReceiver { - @Override - public void onReceive(Context context, Intent intent) { - getWindow().setBackgroundDrawable(getWallpaper()); - } - } - - /** - * Receives notifications when applications are added/removed. - */ - private class ApplicationsIntentReceiver extends BroadcastReceiver { - @Override - public void onReceive(Context context, Intent intent) { - loadApplications(false); - bindApplications(); - bindRecents(); - bindFavorites(false); - } - } - - /** - * Receives notifications whenever the user favorites have changed. - */ - private class FavoritesChangeObserver extends ContentObserver { - public FavoritesChangeObserver() { - super(mHandler); - } - - @Override - public void onChange(boolean selfChange) { - onFavoritesChanged(); - } - } - - /** - * GridView adapter to show the list of all installed applications. - */ - private class ApplicationsAdapter extends ArrayAdapter<ApplicationInfo> { - private Rect mOldBounds = new Rect(); - - public ApplicationsAdapter(Context context, ArrayList<ApplicationInfo> apps) { - super(context, 0, apps); - } - - @Override - public View getView(int position, View convertView, ViewGroup parent) { - final ApplicationInfo info = mApplications.get(position); - - if (convertView == null) { - final LayoutInflater inflater = getLayoutInflater(); - convertView = inflater.inflate(R.layout.application, parent, false); - } - - //final ImageView imageView = (ImageView) convertView.findViewById(R.id.icon); - Drawable icon = info.icon; - - if (!info.filtered) { - final Resources resources = getContext().getResources(); - int width = (int) resources.getDimension(android.R.dimen.app_icon_size); - int height = (int) resources.getDimension(android.R.dimen.app_icon_size); - - final int iconWidth = icon.getIntrinsicWidth(); - final int iconHeight = icon.getIntrinsicHeight(); - - if (icon instanceof PaintDrawable) { - PaintDrawable painter = (PaintDrawable) icon; - painter.setIntrinsicWidth(width); - painter.setIntrinsicHeight(height); - } - - if (width > 0 && height > 0 && (width < iconWidth || height < iconHeight)) { - final float ratio = (float) iconWidth / iconHeight; - - if (iconWidth > iconHeight) { - height = (int) (width / ratio); - } else if (iconHeight > iconWidth) { - width = (int) (height * ratio); - } - - final Bitmap.Config c = - icon.getOpacity() != PixelFormat.OPAQUE ? - Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565; - final Bitmap thumb = Bitmap.createBitmap(width, height, c); - final Canvas canvas = new Canvas(thumb); - canvas.setDrawFilter(new PaintFlagsDrawFilter(Paint.DITHER_FLAG, 0)); - // Copy the old bounds to restore them later - // If we were to do oldBounds = icon.getBounds(), - // the call to setBounds() that follows would - // change the same instance and we would lose the - // old bounds - mOldBounds.set(icon.getBounds()); - icon.setBounds(0, 0, width, height); - icon.draw(canvas); - icon.setBounds(mOldBounds); - icon = info.icon = new BitmapDrawable(thumb); - info.filtered = true; - } - } - - final TextView textView = (TextView) convertView.findViewById(R.id.label); - textView.setCompoundDrawablesWithIntrinsicBounds(null, icon, null, null); - textView.setText(info.title); - - return convertView; - } - } - - /** - * Shows and hides the applications grid view. - */ - private class ShowApplications implements View.OnClickListener { - public void onClick(View v) { - if (mGrid.getVisibility() != View.VISIBLE) { - showApplications(true); - } else { - hideApplications(); - } - } - } - - /** - * Hides the applications grid when the layout animation is over. - */ - private class HideGrid implements Animation.AnimationListener { - public void onAnimationStart(Animation animation) { - } - - public void onAnimationEnd(Animation animation) { - mBlockAnimation = false; - } - - public void onAnimationRepeat(Animation animation) { - } - } - - /** - * Shows the applications grid when the layout animation is over. - */ - private class ShowGrid implements Animation.AnimationListener { - public void onAnimationStart(Animation animation) { - } - - public void onAnimationEnd(Animation animation) { - mBlockAnimation = false; - // ViewDebug.stopHierarchyTracing(); - } - - public void onAnimationRepeat(Animation animation) { - } - } - - /** - * Starts the selected activity/application in the grid view. - */ - private class ApplicationLauncher implements AdapterView.OnItemClickListener { - public void onItemClick(AdapterView parent, View v, int position, long id) { - ApplicationInfo app = (ApplicationInfo) parent.getItemAtPosition(position); - startActivity(app.intent); - } - } -} diff --git a/samples/Home/src/com/example/android/home/Wallpaper.java b/samples/Home/src/com/example/android/home/Wallpaper.java deleted file mode 100644 index 3401c49c0..000000000 --- a/samples/Home/src/com/example/android/home/Wallpaper.java +++ /dev/null @@ -1,151 +0,0 @@ -/* - * Copyright (C) 2006 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. - */ - -package com.example.android.home; - -import android.app.Activity; -import android.content.Context; -import android.os.Bundle; -import android.util.Log; -import android.view.MotionEvent; -import android.view.View; -import android.view.ViewGroup; -import android.view.Window; -import android.widget.AdapterView; -import android.widget.BaseAdapter; -import android.widget.Gallery; -import android.widget.ImageView; -import android.widget.Gallery.LayoutParams; - -import java.io.IOException; -import java.io.InputStream; - -/** - * Wallpaper picker for the Home application. User can choose from - * a gallery of stock photos. - */ -public class Wallpaper extends Activity implements - AdapterView.OnItemSelectedListener, AdapterView.OnItemClickListener { - - private static final String LOG_TAG = "Home"; - - private static final Integer[] THUMB_IDS = { - R.drawable.bg_android_icon, - R.drawable.bg_sunrise_icon, - R.drawable.bg_sunset_icon, - }; - - private static final Integer[] IMAGE_IDS = { - R.drawable.bg_android, - R.drawable.bg_sunrise, - R.drawable.bg_sunset, - }; - - private Gallery mGallery; - private boolean mIsWallpaperSet; - - @Override - public void onCreate(Bundle icicle) { - super.onCreate(icicle); - requestWindowFeature(Window.FEATURE_NO_TITLE); - - setContentView(R.layout.wallpaper); - - mGallery = (Gallery) findViewById(R.id.gallery); - mGallery.setAdapter(new ImageAdapter(this)); - mGallery.setOnItemSelectedListener(this); - mGallery.setOnItemClickListener(this); - } - - @Override - protected void onResume() { - super.onResume(); - mIsWallpaperSet = false; - } - - public void onItemSelected(AdapterView parent, View v, int position, long id) { - getWindow().setBackgroundDrawableResource(IMAGE_IDS[position]); - } - - public void onItemClick(AdapterView parent, View v, int position, long id) { - selectWallpaper(position); - } - - /* - * When using touch if you tap an image it triggers both the onItemClick and - * the onTouchEvent causing the wallpaper to be set twice. Synchronize this - * method and ensure we only set the wallpaper once. - */ - private synchronized void selectWallpaper(int position) { - if (mIsWallpaperSet) { - return; - } - mIsWallpaperSet = true; - try { - InputStream stream = getResources().openRawResource(IMAGE_IDS[position]); - setWallpaper(stream); - setResult(RESULT_OK); - finish(); - } catch (IOException e) { - Log.e(LOG_TAG, "Failed to set wallpaper " + e); - } - } - - public void onNothingSelected(AdapterView parent) { - } - - @Override - public boolean onTouchEvent(MotionEvent event) { - selectWallpaper(mGallery.getSelectedItemPosition()); - return true; - } - - public class ImageAdapter extends BaseAdapter { - - private Context mContext; - - public ImageAdapter(Context c) { - mContext = c; - } - - public int getCount() { - return THUMB_IDS.length; - } - - public Object getItem(int position) { - return position; - } - - public long getItemId(int position) { - return position; - } - - public View getView(final int position, View convertView, ViewGroup parent) { - ImageView i = new ImageView(mContext); - - i.setImageResource(THUMB_IDS[position]); - i.setAdjustViewBounds(true); - i.setLayoutParams(new Gallery.LayoutParams( - LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); - i.setBackgroundResource(android.R.drawable.picture_frame); - return i; - } - - } - -} - - |
