diff options
Diffstat (limited to 'app/src/main/java/com/zeapo/pwdstore/autofill/AutofillRecyclerAdapter.java')
| -rw-r--r-- | app/src/main/java/com/zeapo/pwdstore/autofill/AutofillRecyclerAdapter.java | 132 |
1 files changed, 21 insertions, 111 deletions
diff --git a/app/src/main/java/com/zeapo/pwdstore/autofill/AutofillRecyclerAdapter.java b/app/src/main/java/com/zeapo/pwdstore/autofill/AutofillRecyclerAdapter.java index 14530879..7c735f18 100644 --- a/app/src/main/java/com/zeapo/pwdstore/autofill/AutofillRecyclerAdapter.java +++ b/app/src/main/java/com/zeapo/pwdstore/autofill/AutofillRecyclerAdapter.java @@ -2,14 +2,11 @@ package com.zeapo.pwdstore.autofill; import android.content.Context; import android.content.SharedPreferences; -import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; -import android.preference.PreferenceManager; +import android.content.pm.ResolveInfo; import android.support.v7.view.ActionMode; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; @@ -18,19 +15,14 @@ import android.widget.TextView; import com.zeapo.pwdstore.R; import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; -import java.util.Set; -import java.util.TreeSet; public class AutofillRecyclerAdapter extends RecyclerView.Adapter<AutofillRecyclerAdapter.ViewHolder> { - private ArrayList<ApplicationInfo> apps; + private ArrayList<ResolveInfo> apps; private PackageManager pm; private AutofillPreferenceActivity activity; - private final Set<Integer> selectedItems; private ActionMode actionMode; - public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener { + public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { public View view; public TextView name; public TextView secondary; @@ -44,38 +36,19 @@ public class AutofillRecyclerAdapter extends RecyclerView.Adapter<AutofillRecycl secondary = (TextView) view.findViewById(R.id.secondary_text); icon = (ImageView) view.findViewById(R.id.app_icon); view.setOnClickListener(this); - view.setOnLongClickListener(this); } @Override public void onClick(View v) { - if (actionMode != null) { - toggleSelection(getAdapterPosition(), view); - if (selectedItems.isEmpty()) { - actionMode.finish(); - } - } else { - activity.showDialog(packageName, name.getText().toString()); - } + activity.showDialog(packageName, name.getText().toString()); } - @Override - public boolean onLongClick(View v) { - if (actionMode != null) { - return false; - } - toggleSelection(getAdapterPosition(), view); - // Start the CAB using the ActionMode.Callback - actionMode = activity.startSupportActionMode(actionModeCallback); - return true; - } } - public AutofillRecyclerAdapter(ArrayList<ApplicationInfo> apps, PackageManager pm, AutofillPreferenceActivity activity) { + public AutofillRecyclerAdapter(ArrayList<ResolveInfo> apps, PackageManager pm, AutofillPreferenceActivity activity) { this.apps = apps; this.pm = pm; this.activity = activity; - this.selectedItems = new TreeSet<>(Collections.reverseOrder()); } @Override @@ -87,30 +60,33 @@ public class AutofillRecyclerAdapter extends RecyclerView.Adapter<AutofillRecycl @Override public void onBindViewHolder(AutofillRecyclerAdapter.ViewHolder holder, int position) { - ApplicationInfo app = apps.get(position); - holder.name.setText(pm.getApplicationLabel(app)); + ResolveInfo app = apps.get(position); + holder.name.setText(app.loadLabel(pm)); + holder.icon.setImageDrawable(app.loadIcon(pm)); + holder.packageName = app.activityInfo.packageName; + + holder.secondary.setVisibility(View.VISIBLE); + holder.view.setBackgroundResource(R.color.grey_white_1000); - // it shouldn't be possible for prefs.getString to not find the app...use defValue anyway - SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(activity); - String defValue = settings.getBoolean("autofill_default", true) ? "first" : "never"; SharedPreferences prefs = activity.getApplicationContext().getSharedPreferences("autofill", Context.MODE_PRIVATE); - String preference = prefs.getString(app.packageName, defValue); + String preference = prefs.getString(holder.packageName, ""); switch (preference) { + case "": + holder.secondary.setVisibility(View.GONE); + // "android:windowBackground" + holder.view.setBackgroundResource(R.color.indigo_50); + break; case "first": - holder.secondary.setText("Automatically match with password"); + holder.secondary.setText("Automatically match"); break; case "never": - holder.secondary.setText("Never autofill"); + holder.secondary.setText("Never match"); break; default: holder.secondary.setText("Match with " + preference); break; } - holder.icon.setImageDrawable(pm.getApplicationIcon(app)); - holder.packageName = app.packageName; - - holder.view.setSelected(selectedItems.contains(position)); } @Override @@ -118,79 +94,13 @@ public class AutofillRecyclerAdapter extends RecyclerView.Adapter<AutofillRecycl return apps.size(); } - public void add(String packageName) { - try { - ApplicationInfo app = pm.getApplicationInfo(packageName, 0); - this.apps.add(app); - notifyItemInserted(apps.size()); - } catch (PackageManager.NameNotFoundException e) { - e.printStackTrace(); - } - } - public int getPosition(String packageName) { for (int i = 0; i < apps.size(); i++) { - if (apps.get(i).packageName.equals(packageName)) { + if (apps.get(i).activityInfo.packageName.equals(packageName)) { return i; } } return -1; } - private ActionMode.Callback actionModeCallback = new ActionMode.Callback() { - @Override - public boolean onCreateActionMode(ActionMode mode, Menu menu) { - mode.getMenuInflater().inflate(R.menu.context_pass, menu); - return true; - } - - @Override - public boolean onPrepareActionMode(ActionMode mode, Menu menu) { - return false; - } - - @Override - public boolean onActionItemClicked(ActionMode mode, MenuItem item) { - switch (item.getItemId()) { - case R.id.menu_delete_password: - // don't ask for confirmation - for (int position : selectedItems) { - remove(position); - } - mode.finish(); // Action picked, so close the CAB - return true; - default: - return false; - } - } - - @Override - public void onDestroyActionMode(ActionMode mode) { - for (Iterator it = selectedItems.iterator(); it.hasNext();) { - // need the setSelected line in onBind - notifyItemChanged((Integer) it.next()); - it.remove(); - } - actionMode = null; - } - }; - - public void remove(int position) { - ApplicationInfo applicationInfo = this.apps.get(position); - SharedPreferences prefs - = activity.getApplicationContext().getSharedPreferences("autofill", Context.MODE_PRIVATE); - prefs.edit().remove(applicationInfo.packageName).apply(); - - this.apps.remove(position); - this.notifyItemRemoved(position); - } - - public void toggleSelection(int position, View view) { - if (!selectedItems.remove(position)) { - selectedItems.add(position); - view.setSelected(true); - } else { - view.setSelected(false); - } - } } |
