aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Wong <wongma@protonmail.ch>2015-12-27 06:00:06 -0500
committerMatthew Wong <wongma@protonmail.ch>2015-12-27 06:00:06 -0500
commit5cb380bf471c6c7db1d165183296176d564c1ad3 (patch)
treeec9af3d86663c8e28955dc1d306b3e8f9f1b0a29
parent94ee36a38d3b06422c25613c31b8e01e1ef9c4af (diff)
Don't use ResolveInfo for app settings ui
-rw-r--r--app/src/main/java/com/zeapo/pwdstore/autofill/AutofillFragment.java3
-rw-r--r--app/src/main/java/com/zeapo/pwdstore/autofill/AutofillPreferenceActivity.java37
-rw-r--r--app/src/main/java/com/zeapo/pwdstore/autofill/AutofillRecyclerAdapter.java68
-rw-r--r--app/src/main/java/com/zeapo/pwdstore/autofill/AutofillService.java3
-rw-r--r--app/src/main/res/layout/autofill_recycler_view.xml20
5 files changed, 90 insertions, 41 deletions
diff --git a/app/src/main/java/com/zeapo/pwdstore/autofill/AutofillFragment.java b/app/src/main/java/com/zeapo/pwdstore/autofill/AutofillFragment.java
index e4986354..4a5a37cd 100644
--- a/app/src/main/java/com/zeapo/pwdstore/autofill/AutofillFragment.java
+++ b/app/src/main/java/com/zeapo/pwdstore/autofill/AutofillFragment.java
@@ -38,6 +38,8 @@ public class AutofillFragment extends DialogFragment {
// need to interact with the recyclerAdapter which is a member of activity
final AutofillPreferenceActivity callingActivity = (AutofillPreferenceActivity) getActivity();
LayoutInflater inflater = callingActivity.getLayoutInflater();
+
+ // if... hide textview
final View view = inflater.inflate(R.layout.fragment_autofill, null);
builder.setView(view);
@@ -74,6 +76,7 @@ public class AutofillFragment extends DialogFragment {
}
});
+ // if... autofill_web
SharedPreferences prefs
= getActivity().getApplicationContext().getSharedPreferences("autofill", Context.MODE_PRIVATE);
String preference = prefs.getString(packageName, "");
diff --git a/app/src/main/java/com/zeapo/pwdstore/autofill/AutofillPreferenceActivity.java b/app/src/main/java/com/zeapo/pwdstore/autofill/AutofillPreferenceActivity.java
index adfce0b1..0c721012 100644
--- a/app/src/main/java/com/zeapo/pwdstore/autofill/AutofillPreferenceActivity.java
+++ b/app/src/main/java/com/zeapo/pwdstore/autofill/AutofillPreferenceActivity.java
@@ -1,12 +1,14 @@
package com.zeapo.pwdstore.autofill;
import android.app.DialogFragment;
+import android.content.Context;
import android.content.Intent;
+import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
-import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.os.Bundle;
+import android.support.design.widget.FloatingActionButton;
import android.support.v4.app.NavUtils;
import android.support.v4.app.TaskStackBuilder;
import android.support.v4.view.MenuItemCompat;
@@ -14,15 +16,15 @@ import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.SearchView;
-import android.util.Pair;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import com.zeapo.pwdstore.R;
-import java.util.HashMap;
+import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
public class AutofillPreferenceActivity extends AppCompatActivity {
@@ -58,6 +60,13 @@ public class AutofillPreferenceActivity extends AppCompatActivity {
}
setTitle("Autofill Apps");
+
+ final FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
+ fab.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ }
+ });
}
private class populateTask extends AsyncTask<Void, Void, Void> {
@@ -70,15 +79,25 @@ public class AutofillPreferenceActivity extends AppCompatActivity {
protected Void doInBackground(Void... params) {
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
- List<ResolveInfo> allApps = pm.queryIntentActivities(intent, 0);
+ List<ResolveInfo> allAppsResolveInfo = pm.queryIntentActivities(intent, 0);
+ List<AutofillRecyclerAdapter.AppInfo> allApps = new ArrayList<>();
- HashMap<String, Pair<Drawable, String>> iconMap = new HashMap<>(allApps.size());
- for (ResolveInfo app : allApps) {
- iconMap.put(app.activityInfo.packageName
- , Pair.create(app.loadIcon(pm), app.loadLabel(pm).toString()));
+ for (ResolveInfo app : allAppsResolveInfo) {
+ allApps.add(new AutofillRecyclerAdapter.AppInfo(app.loadLabel(pm).toString()
+ , app.activityInfo.packageName, app.loadIcon(pm)));
+ }
+
+ SharedPreferences prefs = getSharedPreferences("autofill_web", Context.MODE_PRIVATE);
+ Map<String, ?> prefsMap = prefs.getAll();
+ for (String key : prefsMap.keySet()) {
+ try {
+ allApps.add(new AutofillRecyclerAdapter.AppInfo(null, key, pm.getApplicationIcon("com.android.browser")));
+ } catch (PackageManager.NameNotFoundException e) {
+ allApps.add(new AutofillRecyclerAdapter.AppInfo(null, key, null));
+ }
}
- recyclerAdapter = new AutofillRecyclerAdapter(allApps, iconMap, pm, AutofillPreferenceActivity.this);
+ recyclerAdapter = new AutofillRecyclerAdapter(allApps, pm, AutofillPreferenceActivity.this);
return null;
}
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 eddf075e..e00f1c5b 100644
--- a/app/src/main/java/com/zeapo/pwdstore/autofill/AutofillRecyclerAdapter.java
+++ b/app/src/main/java/com/zeapo/pwdstore/autofill/AutofillRecyclerAdapter.java
@@ -3,12 +3,10 @@ package com.zeapo.pwdstore.autofill;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
import android.graphics.drawable.Drawable;
import android.support.v7.util.SortedList;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.util.SortedListAdapterCallback;
-import android.util.Pair;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -18,13 +16,12 @@ import android.widget.TextView;
import com.zeapo.pwdstore.R;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.List;
public class AutofillRecyclerAdapter extends RecyclerView.Adapter<AutofillRecyclerAdapter.ViewHolder> {
- private SortedList<ResolveInfo> apps;
- private ArrayList<ResolveInfo> allApps;
- private HashMap<String, Pair<Drawable, String>> iconMap;
+
+ private SortedList<AppInfo> apps;
+ private ArrayList<AppInfo> allApps;
private PackageManager pm;
private AutofillPreferenceActivity activity;
@@ -51,28 +48,39 @@ public class AutofillRecyclerAdapter extends RecyclerView.Adapter<AutofillRecycl
}
- public AutofillRecyclerAdapter(List<ResolveInfo> allApps, HashMap<String, Pair<Drawable, String>> iconMap
- , final PackageManager pm, AutofillPreferenceActivity activity) {
- SortedList.Callback<ResolveInfo> callback = new SortedListAdapterCallback<ResolveInfo>(this) {
- @Override
- public int compare(ResolveInfo o1, ResolveInfo o2) {
- return o1.loadLabel(pm).toString().toLowerCase().compareTo(o2.loadLabel(pm).toString().toLowerCase());
- }
+ public static class AppInfo {
+ public String label;
+ public String packageName;
+ public Drawable icon;
- @Override
- public boolean areContentsTheSame(ResolveInfo oldItem, ResolveInfo newItem) {
- return oldItem.loadLabel(pm).toString().equals(newItem.loadLabel(pm).toString());
- }
+ public AppInfo(String label, String packageName, Drawable icon) {
+ this.label = label;
+ this.packageName = packageName;
+ this.icon = icon;
+ }
+ }
- @Override
- public boolean areItemsTheSame(ResolveInfo item1, ResolveInfo item2) {
- return item1.loadLabel(pm).toString().equals(item2.loadLabel(pm).toString());
- }
+ public AutofillRecyclerAdapter(List<AppInfo> allApps, final PackageManager pm
+ , AutofillPreferenceActivity activity) {
+ SortedList.Callback<AppInfo> callback = new SortedListAdapterCallback<AppInfo>(this) {
+ @Override
+ public int compare(AppInfo o1, AppInfo o2) {
+ return o1.label.toLowerCase().compareTo(o2.label.toLowerCase());
+ }
+
+ @Override
+ public boolean areContentsTheSame(AppInfo oldItem, AppInfo newItem) {
+ return oldItem.label.equals(newItem.label);
+ }
+
+ @Override
+ public boolean areItemsTheSame(AppInfo item1, AppInfo item2) {
+ return item1.packageName.equals(item2.packageName);
+ }
};
- this.apps = new SortedList<>(ResolveInfo.class, callback);
+ this.apps = new SortedList<>(AppInfo.class, callback);
this.apps.addAll(allApps);
this.allApps = new ArrayList<>(allApps);
- this.iconMap = new HashMap<>(iconMap);
this.pm = pm;
this.activity = activity;
}
@@ -86,11 +94,11 @@ public class AutofillRecyclerAdapter extends RecyclerView.Adapter<AutofillRecycl
@Override
public void onBindViewHolder(AutofillRecyclerAdapter.ViewHolder holder, int position) {
- ResolveInfo app = apps.get(position);
- holder.packageName = app.activityInfo.packageName;
+ AppInfo app = apps.get(position);
+ holder.packageName = app.packageName;
- holder.icon.setImageDrawable(iconMap.get(holder.packageName).first);
- holder.name.setText(iconMap.get(holder.packageName).second);
+ holder.icon.setImageDrawable(app.icon);
+ holder.name.setText(app.label);
holder.secondary.setVisibility(View.VISIBLE);
holder.view.setBackgroundResource(R.color.grey_white_1000);
@@ -126,7 +134,7 @@ public class AutofillRecyclerAdapter extends RecyclerView.Adapter<AutofillRecycl
public int getPosition(String packageName) {
for (int i = 0; i < apps.size(); i++) {
- if (apps.get(i).activityInfo.packageName.equals(packageName)) {
+ if (apps.get(i).packageName.equals(packageName)) {
return i;
}
}
@@ -139,8 +147,8 @@ public class AutofillRecyclerAdapter extends RecyclerView.Adapter<AutofillRecycl
return;
}
apps.beginBatchedUpdates();
- for (ResolveInfo app : allApps) {
- if (app.loadLabel(pm).toString().toLowerCase().contains(s.toLowerCase())) {
+ for (AppInfo app : allApps) {
+ if (app.label.toLowerCase().contains(s.toLowerCase())) {
apps.add(app);
} else {
apps.remove(app);
diff --git a/app/src/main/java/com/zeapo/pwdstore/autofill/AutofillService.java b/app/src/main/java/com/zeapo/pwdstore/autofill/AutofillService.java
index 6a880ccc..58fe6609 100644
--- a/app/src/main/java/com/zeapo/pwdstore/autofill/AutofillService.java
+++ b/app/src/main/java/com/zeapo/pwdstore/autofill/AutofillService.java
@@ -159,6 +159,9 @@ public class AutofillService extends AccessibilityService {
}
private String searchWebView(AccessibilityNodeInfo source) {
+ if (source == null) {
+ return null;
+ }
for (int i = 0; i < source.getChildCount(); i++) {
AccessibilityNodeInfo u = source.getChild(i);
if (u == null) {
diff --git a/app/src/main/res/layout/autofill_recycler_view.xml b/app/src/main/res/layout/autofill_recycler_view.xml
index 5dc950c2..7991341d 100644
--- a/app/src/main/res/layout/autofill_recycler_view.xml
+++ b/app/src/main/res/layout/autofill_recycler_view.xml
@@ -1,7 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ xmlns:app="http://schemas.android.com/apk/res-auto">
<android.support.v7.widget.RecyclerView
android:id="@+id/autofill_recycler"
@@ -17,4 +18,19 @@
android:layout_centerInParent="true"
android:indeterminate="true"
android:visibility="gone" />
+
+ <android.support.design.widget.FloatingActionButton
+ android:id="@+id/fab"
+ android:src="@drawable/ic_action_new"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="bottom|end"
+ app:elevation="6dp"
+ app:pressedTranslationZ="12dp"
+ app:backgroundTint="@color/blue_grey_500"
+ app:rippleColor="@color/blue_grey_50"
+ app:borderWidth="0dp"
+ android:layout_margin="@dimen/fab_compat_margin"
+ android:layout_alignParentBottom="true"
+ android:layout_alignParentRight="true"/>
</RelativeLayout> \ No newline at end of file