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

📄 home.java

📁 android 例子中的Home。很有代表意义
💻 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.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);

⌨️ 快捷键说明

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