mirror of
https://github.com/android-password-store/Android-Password-Store.git
synced 2026-04-21 05:45:50 +02:00
Add searching for apps in autofill settings page
This commit is contained in:
parent
2d7c37d379
commit
51a05087e5
|
|
@ -55,7 +55,10 @@
|
|||
</service>
|
||||
|
||||
<activity android:name=".autofill.AutofillActivity">
|
||||
android:parentActivityName=".PasswordStore">
|
||||
|
||||
<meta-data android:name="android.support.PARENT_ACTIVITY"
|
||||
android:value="com.zeapo.pwdstore.PasswordStore" />
|
||||
</activity>
|
||||
|
||||
<activity android:name="net.rdrei.android.dirchooser.DirectoryChooserActivity" />
|
||||
|
|
|
|||
|
|
@ -7,11 +7,19 @@ import android.content.IntentSender;
|
|||
import android.content.SharedPreferences;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.database.Cursor;
|
||||
import android.database.MatrixCursor;
|
||||
import android.os.Bundle;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.support.v7.widget.LinearLayoutManager;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.util.Log;
|
||||
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 com.zeapo.pwdstore.R;
|
||||
|
||||
|
|
@ -48,9 +56,15 @@ public class AutofillActivity extends AppCompatActivity {
|
|||
return;
|
||||
}
|
||||
// otherwise if called from settings
|
||||
final PackageManager pm = getPackageManager();
|
||||
List<ApplicationInfo> allApps = pm.getInstalledApplications(0);
|
||||
setContentView(R.layout.autofill_recycler_view);
|
||||
recyclerView = (RecyclerView) findViewById(R.id.autofill_recycler);
|
||||
|
||||
layoutManager = new LinearLayoutManager(this);
|
||||
recyclerView.setLayoutManager(layoutManager);
|
||||
|
||||
// apps for which the user has custom settings should be in the recycler
|
||||
final PackageManager pm = getPackageManager();
|
||||
final List<ApplicationInfo> allApps = pm.getInstalledApplications(0);
|
||||
SharedPreferences prefs
|
||||
= getSharedPreferences("autofill", Context.MODE_PRIVATE);
|
||||
Map<String, ?> prefApps = prefs.getAll();
|
||||
|
|
@ -60,18 +74,54 @@ public class AutofillActivity extends AppCompatActivity {
|
|||
apps.add(applicationInfo);
|
||||
}
|
||||
}
|
||||
|
||||
setContentView(R.layout.autofill_recycler_view);
|
||||
recyclerView = (RecyclerView) findViewById(R.id.autofill_recycler);
|
||||
|
||||
layoutManager = new LinearLayoutManager(this);
|
||||
recyclerView.setLayoutManager(layoutManager);
|
||||
|
||||
recyclerAdapter = new AutofillRecyclerAdapter(apps, pm);
|
||||
recyclerView.setAdapter(recyclerAdapter);
|
||||
|
||||
setTitle("Autofill Apps");
|
||||
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
|
||||
final SearchView searchView = (SearchView) findViewById(R.id.app_search);
|
||||
|
||||
// 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;
|
||||
}
|
||||
};
|
||||
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
|
||||
@Override
|
||||
public boolean onQueryTextSubmit(String query) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onQueryTextChange(String newText) {
|
||||
// should be a better/faster way to do this?
|
||||
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(AutofillActivity.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;
|
||||
}
|
||||
});
|
||||
|
||||
setTitle("Autofill Apps");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ public class AutofillService extends AccessibilityService {
|
|||
serviceConnection.bindToService();
|
||||
settings = PreferenceManager.getDefaultSharedPreferences(this);
|
||||
}
|
||||
|
||||
// TODO handle CLICKS and change search/search results (just use first result)
|
||||
@Override
|
||||
public void onAccessibilityEvent(AccessibilityEvent event) {
|
||||
// if returning to the source app from a successful AutofillActivity
|
||||
|
|
|
|||
23
app/src/main/res/layout/app_list_item.xml
Normal file
23
app/src/main/res/layout/app_list_item.xml
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="horizontal"
|
||||
android:paddingLeft="8dp"
|
||||
android:paddingRight="8dp">
|
||||
|
||||
<ImageView
|
||||
android:id="@android:id/icon1"
|
||||
android:layout_width="48dp"
|
||||
android:layout_height="48dp"/>
|
||||
|
||||
<TextView android:id="@android:id/text1"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_vertical"
|
||||
android:minHeight="?android:attr/listPreferredItemHeightSmall"
|
||||
android:textAppearance="?android:attr/textAppearanceListItemSmall"
|
||||
android:layout_marginLeft="8dp"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
|
@ -4,6 +4,13 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<SearchView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/app_search"
|
||||
android:queryHint="Add an app to configure"
|
||||
android:iconifiedByDefault="false"/>
|
||||
|
||||
<android.support.v7.widget.RecyclerView
|
||||
android:id="@+id/autofill_recycler"
|
||||
android:scrollbars="vertical"
|
||||
|
|
|
|||
Loading…
Reference in a new issue