summaryrefslogtreecommitdiffstats
path: root/src/com/android/settings/dashboard/DashboardSummary.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/settings/dashboard/DashboardSummary.java')
-rw-r--r--src/com/android/settings/dashboard/DashboardSummary.java322
1 files changed, 9 insertions, 313 deletions
diff --git a/src/com/android/settings/dashboard/DashboardSummary.java b/src/com/android/settings/dashboard/DashboardSummary.java
index b48e07e..f023dec 100644
--- a/src/com/android/settings/dashboard/DashboardSummary.java
+++ b/src/com/android/settings/dashboard/DashboardSummary.java
@@ -16,339 +16,35 @@
package com.android.settings.dashboard;
-import android.app.Fragment;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.content.res.Resources;
-import android.database.Cursor;
-import android.graphics.drawable.Drawable;
-import android.os.AsyncTask;
+import android.app.ListFragment;
import android.os.Bundle;
-import android.text.Editable;
-import android.text.TextUtils;
-import android.text.TextWatcher;
-import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import android.view.inputmethod.InputMethodManager;
-import android.widget.AdapterView;
-import android.widget.BaseAdapter;
-import android.widget.EditText;
-import android.widget.ImageView;
+import android.widget.ListAdapter;
import android.widget.ListView;
-import android.widget.TextView;
import com.android.settings.R;
import com.android.settings.SettingsActivity;
-import com.android.settings.search.Index;
-
-import java.util.HashMap;
-
-public class DashboardSummary extends Fragment {
+public class DashboardSummary extends ListFragment {
private static final String LOG_TAG = "DashboardSummary";
- private EditText mEditText;
- private ListView mListView;
-
- private SearchResultsAdapter mAdapter;
- private Index mIndex;
- private UpdateSearchResultsTask mUpdateSearchResultsTask;
-
- /**
- * A basic AsyncTask for updating the query results cursor
- */
- private class UpdateSearchResultsTask extends AsyncTask<String, Void, Cursor> {
- @Override
- protected Cursor doInBackground(String... params) {
- return mIndex.search(params[0]);
- }
-
- @Override
- protected void onPostExecute(Cursor cursor) {
- if (!isCancelled()) {
- setCursor(cursor);
- } else if (cursor != null) {
- cursor.close();
- }
- }
- }
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- mIndex = Index.getInstance(getActivity());
- mAdapter = new SearchResultsAdapter(getActivity());
- }
-
- @Override
- public void onStop() {
- super.onStop();
-
- clearResults();
- }
-
- @Override
- public void onStart() {
- super.onStart();
-
- updateSearchResults();
- }
-
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final View view = inflater.inflate(R.layout.dashboard, container, false);
- mEditText = (EditText)view.findViewById(R.id.edittext_query);
- mEditText.addTextChangedListener(new TextWatcher() {
- @Override
- public void beforeTextChanged(CharSequence s, int start, int count, int after) {
- }
-
- @Override
- public void onTextChanged(CharSequence s, int start, int before, int count) {
- updateSearchResults();
- }
-
- @Override
- public void afterTextChanged(Editable s) {
- }
- });
- mEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
- @Override
- public void onFocusChange(View v, boolean hasFocus) {
- if (!hasFocus) {
- closeSoftKeyboard();
- }
- }
- });
-
- mListView = (ListView) view.findViewById(R.id.list_results);
- mListView.setAdapter(mAdapter);
- mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
- @Override
- public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
- closeSoftKeyboard();
-
- final Cursor cursor = mAdapter.mCursor;
- cursor.moveToPosition(position);
-
- final String className = cursor.getString(Index.COLUMN_INDEX_CLASS_NAME);
- final String screenTitle = cursor.getString(Index.COLUMN_INDEX_SCREEN_TITLE);
-
- final String action = cursor.getString(Index.COLUMN_INDEX_INTENT_ACTION);
-
- if (TextUtils.isEmpty(action)) {
- ((SettingsActivity) getActivity()).startPreferencePanel(className, null, 0,
- screenTitle, null, 0);
- } else {
- final Intent intent = new Intent(action);
-
- final String targetPackage = cursor.getString(
- Index.COLUMN_INDEX_INTENT_ACTION_TARGET_PACKAGE);
- final String targetClass = cursor.getString(
- Index.COLUMN_INDEX_INTENT_ACTION_TARGET_CLASS);
- if (!TextUtils.isEmpty(targetPackage) && !TextUtils.isEmpty(targetClass)) {
- final ComponentName component =
- new ComponentName(targetPackage, targetClass);
- intent.setComponent(component);
- }
+ ListView listView = (ListView) view.findViewById(android.R.id.list);
- getActivity().startActivity(intent);
- }
- }
- });
+ ListAdapter adapter = ((SettingsActivity) getActivity()).getHeaderAdapter();
+ listView.setAdapter(adapter);
return view;
}
- private void closeSoftKeyboard() {
- InputMethodManager imm = InputMethodManager.peekInstance();
- if (imm != null && imm.isActive(mEditText)) {
- imm.hideSoftInputFromWindow(mEditText.getWindowToken(), 0);
- }
- }
-
- private void clearResults() {
- if (mUpdateSearchResultsTask != null) {
- mUpdateSearchResultsTask.cancel(false);
- mUpdateSearchResultsTask = null;
- }
- setCursor(null);
- }
-
- private void setCursor(Cursor cursor) {
- Cursor oldCursor = mAdapter.swapCursor(cursor);
- if (oldCursor != null) {
- oldCursor.close();
- }
- }
-
- private String getFilteredQueryString() {
- final CharSequence query = mEditText.getText().toString();
- final StringBuilder filtered = new StringBuilder();
- for (int n = 0; n < query.length(); n++) {
- char c = query.charAt(n);
- if (!Character.isLetterOrDigit(c) && !Character.isSpaceChar(c)) {
- continue;
- }
- filtered.append(c);
- }
- return filtered.toString();
- }
-
- private void updateSearchResults() {
- if (mUpdateSearchResultsTask != null) {
- mUpdateSearchResultsTask.cancel(false);
- mUpdateSearchResultsTask = null;
- }
- final String query = getFilteredQueryString();
- if (TextUtils.isEmpty(query)) {
- setCursor(null);
- } else {
- mUpdateSearchResultsTask = new UpdateSearchResultsTask();
- mUpdateSearchResultsTask.execute(query);
- }
- }
-
- private static class SearchResult {
- public String title;
- public String summary;
- public int iconResId;
- public Context context;
-
- public SearchResult(Context context, String title, String summary, int iconResId) {
- this.context = context;
- this.title = title;
- this.summary = summary;
- this.iconResId = iconResId;
- }
- }
-
- private static class SearchResultsAdapter extends BaseAdapter {
-
- private Cursor mCursor;
- private LayoutInflater mInflater;
- private boolean mDataValid;
- private Context mContext;
- private HashMap<String, Context> mContextMap = new HashMap<String, Context>();
-
- public SearchResultsAdapter(Context context) {
- mContext = context;
- mInflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- mDataValid = false;
- }
-
- public Cursor swapCursor(Cursor newCursor) {
- if (newCursor == mCursor) {
- return null;
- }
- Cursor oldCursor = mCursor;
- mCursor = newCursor;
- if (newCursor != null) {
- mDataValid = true;
- notifyDataSetChanged();
- } else {
- mDataValid = false;
- notifyDataSetInvalidated();
- }
- return oldCursor;
- }
-
- @Override
- public int getCount() {
- if (!mDataValid || mCursor == null || mCursor.isClosed()) return 0;
- return mCursor.getCount();
- }
-
- @Override
- public Object getItem(int position) {
- if (mDataValid && mCursor.moveToPosition(position)) {
- final String title = mCursor.getString(Index.COLUMN_INDEX_TITLE);
- final String summary = mCursor.getString(Index.COLUMN_INDEX_SUMMARY);
- final String iconResStr = mCursor.getString(Index.COLUMN_INDEX_ICON);
- final String className = mCursor.getString(
- Index.COLUMN_INDEX_CLASS_NAME);
- final String packageName = mCursor.getString(
- Index.COLUMN_INDEX_INTENT_ACTION_TARGET_PACKAGE);
-
- Context packageContext;
- if (TextUtils.isEmpty(className) && !TextUtils.isEmpty(packageName)) {
- packageContext = mContextMap.get(packageName);
- if (packageContext == null) {
- try {
- packageContext = mContext.createPackageContext(packageName, 0);
- } catch (PackageManager.NameNotFoundException e) {
- Log.e(LOG_TAG, "Cannot create Context for package: " + packageName);
- return null;
- }
- mContextMap.put(packageName, packageContext);
- }
- } else {
- packageContext = mContext;
- }
- final int iconResId = TextUtils.isEmpty(iconResStr) ?
- R.drawable.empty_icon : Integer.parseInt(iconResStr);
- return new SearchResult(packageContext, title, summary, iconResId);
- }
- return null;
- }
-
- @Override
- public long getItemId(int position) {
- return 0;
- }
-
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- if (!mDataValid && convertView == null) {
- throw new IllegalStateException(
- "this should only be called when the cursor is valid");
- }
- if (!mCursor.moveToPosition(position)) {
- throw new IllegalStateException("couldn't move cursor to position " + position);
- }
-
- View view;
- TextView textTitle;
- TextView textSummary;
- ImageView imageView;
-
- if (convertView == null) {
- view = mInflater.inflate(R.layout.search_result, parent, false);
- } else {
- view = convertView;
- }
- textTitle = (TextView) view.findViewById(R.id.title);
- textSummary = (TextView) view.findViewById(R.id.summary);
- imageView = (ImageView) view.findViewById(R.id.icon);
-
- SearchResult result = (SearchResult) getItem(position);
-
- textTitle.setText(result.title);
- textSummary.setText(result.summary);
- if (result.iconResId != R.drawable.empty_icon) {
- final Context packageContext = result.context;
- final Drawable drawable;
- try {
- drawable = packageContext.getDrawable(result.iconResId);
- imageView.setImageDrawable(drawable);
- } catch (Resources.NotFoundException nfe) {
- // Not much we can do except logging
- Log.e(LOG_TAG, "Cannot load Drawable for " + result.title);
- }
- imageView.setBackgroundResource(R.color.background_search_result_icon);
- } else {
- imageView.setImageDrawable(null);
- imageView.setBackgroundResource(R.drawable.empty_icon);
- }
-
- return view;
- }
+ @Override
+ public void onListItemClick(ListView l, View v, int position, long id) {
+ ((SettingsActivity) getActivity()).onListItemClick(l, v, position, id);
}
}