⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 home.java

📁 android first home screen
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* * 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.Color;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;		private Paint bubblePaint;	@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();				bubblePaint = new Paint();		bubblePaint.setColor(Color.WHITE);				bubblePaint.setAntiAlias(true);		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)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -