aboutsummaryrefslogtreecommitdiffstats
path: root/app/src/main/java/com/zeapo/pwdstore/autofill/AutofillPreferenceActivity.java
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/com/zeapo/pwdstore/autofill/AutofillPreferenceActivity.java')
-rw-r--r--app/src/main/java/com/zeapo/pwdstore/autofill/AutofillPreferenceActivity.java122
1 files changed, 38 insertions, 84 deletions
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 abf1f320..91131956 100644
--- a/app/src/main/java/com/zeapo/pwdstore/autofill/AutofillPreferenceActivity.java
+++ b/app/src/main/java/com/zeapo/pwdstore/autofill/AutofillPreferenceActivity.java
@@ -1,22 +1,17 @@
package com.zeapo.pwdstore.autofill;
import android.app.DialogFragment;
-import android.content.Context;
-import android.content.SharedPreferences;
-import android.content.pm.ApplicationInfo;
+import android.content.Intent;
import android.content.pm.PackageManager;
-import android.database.Cursor;
-import android.database.MatrixCursor;
+import android.content.pm.ResolveInfo;
import android.os.Bundle;
+import android.support.v4.view.MenuItemCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
-import android.view.View;
-import android.view.WindowManager;
-import android.widget.ImageView;
-import android.widget.SearchView;
-import android.widget.SimpleCursorAdapter;
-import android.widget.TextView;
+import android.support.v7.widget.SearchView;
+import android.view.Menu;
+import android.view.MenuItem;
import com.zeapo.pwdstore.R;
@@ -24,7 +19,6 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
-import java.util.Map;
public class AutofillPreferenceActivity extends AppCompatActivity {
@@ -43,102 +37,62 @@ public class AutofillPreferenceActivity extends AppCompatActivity {
layoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
recyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST));
-
- // apps for which the user has custom settings should be in the recycler
+
+ Intent intent = new Intent(Intent.ACTION_MAIN);
+ intent.addCategory(Intent.CATEGORY_LAUNCHER);
+ List<ResolveInfo> allApps = getPackageManager().queryIntentActivities(intent, 0);
final PackageManager pm = getPackageManager();
- SharedPreferences prefs
- = getSharedPreferences("autofill", Context.MODE_PRIVATE);
- Map<String, ?> prefApps = prefs.getAll();
- ArrayList<ApplicationInfo> apps = new ArrayList<>();
- for (String packageName : prefApps.keySet()) {
- try {
- apps.add(pm.getApplicationInfo(packageName, 0));
- } catch (PackageManager.NameNotFoundException e) {
- // remove invalid entries (from uninstalled apps?)
- SharedPreferences.Editor editor = prefs.edit();
- editor.remove(packageName).apply();
- }
- }
- Collections.sort(apps, new Comparator<ApplicationInfo>() {
+ Collections.sort(allApps, new Comparator<ResolveInfo>() {
@Override
- public int compare(ApplicationInfo lhs, ApplicationInfo rhs) {
+ public int compare(ResolveInfo lhs, ResolveInfo rhs) {
return lhs.loadLabel(pm).toString().compareTo(rhs.loadLabel(pm).toString());
}
});
- recyclerAdapter = new AutofillRecyclerAdapter(apps, pm, this);
+ recyclerAdapter = new AutofillRecyclerAdapter(new ArrayList<>(allApps), pm, this);
recyclerView.setAdapter(recyclerAdapter);
- // show the search bar by default but don't open the keyboard
- getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
- final SearchView searchView = (SearchView) findViewById(R.id.app_search);
- searchView.clearFocus();
+ setTitle("Autofill Apps");
- // create search suggestions of apps with icons & names
- final SimpleCursorAdapter.ViewBinder viewBinder = new SimpleCursorAdapter.ViewBinder() {
- @Override
- public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
- if (view instanceof TextView) {
- ((TextView) view).setText(cursor.getString(columnIndex));
- } else if (view instanceof ImageView) {
- try {
- ((ImageView) view).setImageDrawable(pm.getApplicationIcon(cursor.getString(columnIndex)));
- } catch (PackageManager.NameNotFoundException e) {
- e.printStackTrace();
- return false;
- }
- }
- return true;
- }
- };
+ Bundle extras = getIntent().getExtras();
+ if (extras != null) {
+ recyclerView.scrollToPosition(recyclerAdapter.getPosition(extras.getString("packageName")));
+ showDialog(extras.getString("packageName"), extras.getString("appName"));
+ }
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ // Inflate the menu; this adds items to the action bar if it is present.
+ getMenuInflater().inflate(R.menu.autofill_preference, menu);
+ MenuItem searchItem = menu.findItem(R.id.action_search);
+ SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
- final List<ApplicationInfo> allApps = pm.getInstalledApplications(0);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
- public boolean onQueryTextSubmit(String query) {
- return false;
+ public boolean onQueryTextSubmit(String s) {
+ return true;
}
@Override
- public boolean onQueryTextChange(String newText) {
- // should be a better/faster way to do this?
- // TODO do this async probably. it lags.
- MatrixCursor matrixCursor = new MatrixCursor(new String[]{"_id", "package", "label"});
- for (ApplicationInfo applicationInfo : allApps) {
- if (applicationInfo.loadLabel(pm).toString().toLowerCase().contains(newText.toLowerCase())) {
- matrixCursor.addRow(new Object[]{0, applicationInfo.packageName, applicationInfo.loadLabel(pm)});
- }
- }
- SimpleCursorAdapter simpleCursorAdapter = new SimpleCursorAdapter(AutofillPreferenceActivity.this
- , R.layout.app_list_item, matrixCursor, new String[]{"package", "label"}
- , new int[]{android.R.id.icon1, android.R.id.text1}, 0);
- simpleCursorAdapter.setViewBinder(viewBinder);
- searchView.setSuggestionsAdapter(simpleCursorAdapter);
- return false;
+ public boolean onQueryTextChange(String s) {
+ return true;
}
});
- searchView.setOnSuggestionListener(new SearchView.OnSuggestionListener() {
+ // When using the support library, the setOnActionExpandListener() method is
+ // static and accepts the MenuItem object as an argument
+ MenuItemCompat.setOnActionExpandListener(searchItem, new MenuItemCompat.OnActionExpandListener() {
@Override
- public boolean onSuggestionSelect(int position) {
- return false;
+ public boolean onMenuItemActionCollapse(MenuItem item) {
+ return true;
}
@Override
- public boolean onSuggestionClick(int position) {
- Cursor cursor = searchView.getSuggestionsAdapter().getCursor();
- String packageName = cursor.getString(1);
- String appName = cursor.getString(2);
- showDialog(packageName, appName);
+ public boolean onMenuItemActionExpand(MenuItem item) {
return true;
}
});
-
- setTitle("Autofill Apps");
-
- Bundle extras = getIntent().getExtras();
- if (extras != null) {
- showDialog(extras.getString("packageName"), extras.getString("appName"));
- }
+ return super.onCreateOptionsMenu(menu);
}
public void showDialog(String packageName, String appName) {