2222import java .util .ArrayList ;
2323import java .util .Collections ;
2424import java .util .List ;
25+ import java .util .concurrent .locks .ReadWriteLock ;
26+ import java .util .concurrent .locks .ReentrantReadWriteLock ;
2527
2628import static android .view .Window .FEATURE_ACTIVITY_TRANSITIONS ;
2729import static android .view .WindowManager .LayoutParams .FLAG_LAYOUT_IN_SCREEN ;
@@ -34,11 +36,12 @@ public class InstalledAppsActivity extends Activity {
3436
3537 private EditText editTextFilter ;
3638
39+ private ReadWriteLock lock = new ReentrantReadWriteLock ();
40+
3741 @ Override
3842 protected void onResume () {
3943 super .onResume ();
4044 if (getActivities (getPackageManager ()).size () - 1 != appsPosition .size ()) {
41- fetchAppList ();
4245 editTextFilter .getText ().clear ();
4346 }
4447 }
@@ -68,23 +71,29 @@ protected void onCreate(Bundle savedInstanceState) {
6871 editTextFilter .addTextChangedListener (new TextWatcher () {
6972 @ Override
7073 public void beforeTextChanged (CharSequence charSequence , int i , int i1 , int i2 ) {
71-
74+ fetchAppList ();
7275 }
7376
7477 @ Override
7578 public void onTextChanged (CharSequence charSequence , int i , int i1 , int i2 ) {
7679 String lowered = charSequence .toString ().toLowerCase ();
77- ( InstalledAppsActivity . this ). adapter . getFilter ().filter ( charSequence );
80+ lock . readLock ().lock ( );
7881 List <Pair <String , String >> list = new ArrayList <>();
7982 for (Pair <String , String > entry : appsPosition ) {
80- for (String word : entry .first .toLowerCase ().split ("\\ s+" )) {
81- if (word .startsWith (lowered )) {
82- list .add (entry );
83- break ;
83+ if (lowered .length () == 0 ) {
84+ list .add (entry );
85+ } else {
86+ for (String word : entry .first .toLowerCase ().split ("\\ s+" )) {
87+ if (word .startsWith (lowered )) {
88+ list .add (entry );
89+ break ;
90+ }
8491 }
8592 }
8693 }
8794 appsPosition = list ;
95+ (InstalledAppsActivity .this ).adapter .getFilter ().filter (charSequence );
96+ lock .readLock ().unlock ();
8897 }
8998
9099 @ Override
@@ -111,10 +120,12 @@ public View getView(int position, View convertView, ViewGroup parent) {
111120 }
112121
113122 private void fetchAppList () {
123+ PackageManager packageManager = getPackageManager ();
124+ List <ResolveInfo > activities = getActivities (packageManager );
125+ lock .writeLock ().lock ();
114126 appsPosition .clear ();
115127 adapter .clear ();
116- PackageManager packageManager = getPackageManager ();
117- for (ResolveInfo resolver : getActivities (packageManager )) {
128+ for (ResolveInfo resolver : activities ) {
118129 String appName = (String ) resolver .loadLabel (packageManager );
119130 if (appName .equals ("Light Android Launcher" ))
120131 continue ;
@@ -123,6 +134,7 @@ private void fetchAppList() {
123134 }
124135 listView .setBackgroundColor (getResources ().getColor (R .color .colorBackgroundPrimary ));
125136 setActions ();
137+ lock .writeLock ().unlock ();
126138 }
127139
128140 private List <ResolveInfo > getActivities (PackageManager packageManager ) {
0 commit comments