diff options
author | nebkat <nebkat@teamhacksung.org> | 2012-12-22 10:46:58 +0000 |
---|---|---|
committer | nebkat <nebkat@teamhacksung.org> | 2012-12-22 20:10:14 +0000 |
commit | 1a9d397e9d8f432d6a8acfc96a6378cff57e753a (patch) | |
tree | 7581c076b96e3265592a209c8072b90e79005394 /src/com/cyanogenmod/trebuchet/preference | |
parent | 229ac203294898445ce64e2f9ccd2163d681c276 (diff) | |
download | android_packages_apps_Trebuchet-1a9d397e9d8f432d6a8acfc96a6378cff57e753a.tar.gz android_packages_apps_Trebuchet-1a9d397e9d8f432d6a8acfc96a6378cff57e753a.tar.bz2 android_packages_apps_Trebuchet-1a9d397e9d8f432d6a8acfc96a6378cff57e753a.zip |
AppsCustomizePagedView: Filtering
Change-Id: I829fc4b1a54e348d3c13da602d133dc20d315cca
Diffstat (limited to 'src/com/cyanogenmod/trebuchet/preference')
-rw-r--r-- | src/com/cyanogenmod/trebuchet/preference/HiddenAppsActivity.java | 231 | ||||
-rw-r--r-- | src/com/cyanogenmod/trebuchet/preference/PreferencesProvider.java | 3 |
2 files changed, 234 insertions, 0 deletions
diff --git a/src/com/cyanogenmod/trebuchet/preference/HiddenAppsActivity.java b/src/com/cyanogenmod/trebuchet/preference/HiddenAppsActivity.java new file mode 100644 index 000000000..3eb6170d5 --- /dev/null +++ b/src/com/cyanogenmod/trebuchet/preference/HiddenAppsActivity.java @@ -0,0 +1,231 @@ +package com.cyanogenmod.trebuchet.preference; + +import android.app.AlertDialog; +import android.app.ListActivity; +import android.content.ComponentName; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.SharedPreferences; +import android.content.pm.ResolveInfo; +import android.content.pm.PackageManager; +import android.os.AsyncTask; +import android.os.Bundle; +import android.preference.PreferenceManager; +import android.util.SparseBooleanArray; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.widget.ArrayAdapter; +import android.widget.Checkable; +import android.widget.ImageView; +import android.widget.ListView; +import android.widget.TextView; +import android.widget.Toast; + +import com.cyanogenmod.trebuchet.R; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +public class HiddenAppsActivity extends ListActivity implements MenuItem.OnMenuItemClickListener { + + private boolean mSaved; + + private static final int MENU_DELETE = 0; + + private PackageManager mPackageManager; + + private AppsAdapter mAppsAdapter; + + protected void onCreate(Bundle savedInstanceState) { + requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); + super.onCreate(savedInstanceState); + + setTitle(R.string.hidden_apps_title); + setContentView(R.layout.hidden_apps_list); + + getActionBar().setDisplayHomeAsUpEnabled(true); + setProgressBarIndeterminateVisibility(true); + setProgressBarIndeterminate(true); + + mPackageManager = getPackageManager(); + mAppsAdapter = new AppsAdapter(this, R.layout.hidden_apps_list_item); + mAppsAdapter.setNotifyOnChange(true); + + setListAdapter(mAppsAdapter); + + AsyncTask<Void, Void, Void> refreshAppsTask = new AsyncTask<Void, Void, Void>(){ + + @Override + protected void onPostExecute(Void result) { + restore(); + setProgressBarIndeterminateVisibility(false); + setProgressBarIndeterminate(false); + super.onPostExecute(result); + } + + @Override + protected Void doInBackground(Void... params) { + refreshApps(); + return null; + } + }; + refreshAppsTask.execute(null, null, null); + } + + @Override + public void onPause() { + super.onPause(); + save(); + } + + private void save() { + StringBuilder string = new StringBuilder(""); + + SparseBooleanArray checked = getListView().getCheckedItemPositions(); + + for (int i = 0; i < checked.size(); i++) { + if (checked.valueAt(i)) { + ResolveInfo app = (ResolveInfo) getListView().getItemAtPosition(checked.keyAt(i)); + if (string.length() > 0) string.append("|"); + string.append(new ComponentName(app.activityInfo.packageName, app.activityInfo.name).flattenToString()); + + } + } + + SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(this).edit(); + editor.putString("ui_drawer_hidden_apps", string.toString()); + editor.commit(); + + mSaved = true; + } + + private void restore() { + List<ComponentName> apps = new ArrayList(); + String[] flattened = PreferenceManager.getDefaultSharedPreferences(this) + .getString("ui_drawer_hidden_apps", "").split("\\|"); + for (String flat : flattened) { + apps.add(ComponentName.unflattenFromString(flat)); + } + + for (int i = 0; i < getListAdapter().getCount(); i++) { + ResolveInfo info = (ResolveInfo) getListAdapter().getItem(i); + if (apps.contains(new ComponentName(info.activityInfo.packageName, info.activityInfo.name))) { + getListView().setItemChecked(i, true); + } + } + + mSaved = true; + + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + + menu.add(0, MENU_DELETE, 0, R.string.menu_hidden_apps_delete) + .setOnMenuItemClickListener(this) + .setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT); + + return true; + } + + @Override + public boolean onMenuItemClick(MenuItem item) { + switch (item.getItemId()) { + case MENU_DELETE: + delete(); + return true; + } + return false; + } + + private void delete() { + for (int i = 0; i < getListView().getCount(); i++) { + getListView().setItemChecked(i, false); + } + + mSaved = false; + } + + private void refreshApps() { + final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); + mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); + final List<ResolveInfo> apps = mPackageManager.queryIntentActivities(mainIntent, 0); + Collections.sort(apps, new ResolveInfo.DisplayNameComparator(mPackageManager)); + + runOnUiThread(new Runnable() { + @Override + public void run() { + mAppsAdapter.clear(); + mAppsAdapter.addAll(apps); + } + }); + } + + @Override + public boolean onMenuItemSelected(int featureId, MenuItem item) { + boolean result = super.onMenuItemSelected(featureId, item); + if (item.getItemId() == android.R.id.home) { + finish(); + return true; + } + return result; + } + + private class AppsAdapter extends ArrayAdapter<ResolveInfo> { + + private final LayoutInflater mInfaltor; + + public AppsAdapter(Context context, int textViewResourceId) { + super(context, textViewResourceId); + + mInfaltor = LayoutInflater.from(context); + + } + + @Override + public long getItemId(int id) { + return id; + } + + @Override + public View getView(final int position, View convertView, ViewGroup parent) { + final ResolveInfo info = getItem(position); + + if(convertView == null) { + convertView = mInfaltor.inflate(R.layout.hidden_apps_list_item, parent, false); + } + + final View item = convertView; + + ImageView icon = (ImageView) item.findViewById(R.id.icon); + TextView title = (TextView) item.findViewById(R.id.title); + + icon.setImageDrawable(info.loadIcon(mPackageManager)); + title.setText(info.loadLabel(mPackageManager)); + + item.setTag(info.activityInfo.packageName); + + item.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + getListView().setItemChecked(position, !((Checkable) item).isChecked()); + mSaved = false; + } + }); + + return convertView; + } + + @Override + public boolean hasStableIds() { + return true; + } + } +} diff --git a/src/com/cyanogenmod/trebuchet/preference/PreferencesProvider.java b/src/com/cyanogenmod/trebuchet/preference/PreferencesProvider.java index 7866345be..623a2976e 100644 --- a/src/com/cyanogenmod/trebuchet/preference/PreferencesProvider.java +++ b/src/com/cyanogenmod/trebuchet/preference/PreferencesProvider.java @@ -141,6 +141,9 @@ public final class PreferencesProvider { public static boolean getJoinWidgetsApps() { return getBoolean("ui_drawer_widgets_join_apps", true); } + public static String getHiddenApps() { + return getString("ui_drawer_hidden_apps", ""); + } public static class Scrolling { public static AppsCustomizePagedView.TransitionEffect getTransitionEffect(String def) { try { |