// Path: app/src/main/java/com/zzzmode/appopsx/ui/model/AppInfo.java
// public class AppInfo implements Parcelable {
// 
//   public String appName;
//   public String packageName;
//   public long time;
//   public long installTime;
//   public long updateTime;
//   public String pinyin;
//   public ApplicationInfo applicationInfo;
// 
//   @Override
//   public boolean equals(Object o) {
//     if (this == o) {
//       return true;
//     }
//     if (o == null || getClass() != o.getClass()) {
//       return false;
//     }
// 
//     AppInfo appInfo = (AppInfo) o;
// 
//     return packageName != null ? packageName.equals(appInfo.packageName)
//         : appInfo.packageName == null;
// 
//   }
// 
//   @Override
//   public int describeContents() {
//     return 0;
//   }
// 
//   @Override
//   public void writeToParcel(Parcel dest, int flags) {
//     dest.writeString(this.appName);
//     dest.writeString(this.packageName);
//   }
// 
//   public AppInfo() {
//   }
// 
//   protected AppInfo(Parcel in) {
//     this.appName = in.readString();
//     this.packageName = in.readString();
//   }
// 
//   public static final Parcelable.Creator<AppInfo> CREATOR = new Parcelable.Creator<AppInfo>() {
//     @Override
//     public AppInfo createFromParcel(Parcel source) {
//       return new AppInfo(source);
//     }
// 
//     @Override
//     public AppInfo[] newArray(int size) {
//       return new AppInfo[size];
//     }
//   };
// 
// 
//   @Override
//   public String toString() {
//     return "AppInfo{" +
//         "appName='" + appName + '\'' +
//         ", packageName='" + packageName + '\'' +
//         '}';
//   }
// }
// 
// Path: app/src/main/java/com/zzzmode/appopsx/ui/widget/CommonDivderDecorator.java
// public class CommonDivderDecorator extends DividerItemDecoration {
// 
//   private static Drawable sDefDrawable;
// 
//   public CommonDivderDecorator(Context context, int orientation) {
//     super(context, orientation);
//   }
// 
//   public CommonDivderDecorator(Context context) {
//     super(context, VERTICAL);
// 
//     Drawable divider = ContextCompat.getDrawable(context, R.drawable.list_divider_h);
//     setDrawable(divider);
//   }
// }


import android.graphics.Color;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.TextUtils;
import android.text.style.ForegroundColorSpan;
import android.view.View;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.github.promeg.pinyinhelper.Pinyin;
import com.h6ah4i.android.widget.advrecyclerview.animator.RefactoredDefaultItemAnimator;
import com.zzzmode.appopsx.R;
import com.zzzmode.appopsx.ui.model.AppInfo;
import com.zzzmode.appopsx.ui.widget.CommonDivderDecorator;
import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.observers.ResourceObserver;
import io.reactivex.schedulers.Schedulers;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
        e.onNext(result);
      }
    });
  }

  private static class SearchResultAdapter extends MainListAdapter {

    String kw;

    private int color = Color.parseColor("#FF4081");

    void clear() {
      appInfos.clear();
      notifyDataSetChanged();
    }

    @Override
    protected CharSequence processText(String name) {
      return resultHighlight(kw, name, color);
    }


    private CharSequence resultHighlight(String key, String text, int color) {
      String phantom = text.toLowerCase();
      String k = key != null ? key.toLowerCase() : null;

      if (k != null && phantom.contains(k)) {
        int st = 0;
        List<Integer> pos = new ArrayList<>(3);
        while ((st = phantom.indexOf(k, st)) != -1) {
// Path: app/src/main/java/com/zzzmode/appopsx/ui/model/AppInfo.java
// public class AppInfo implements Parcelable {
// 
//   public String appName;
//   public String packageName;
//   public long time;
//   public long installTime;
//   public long updateTime;
//   public String pinyin;
//   public ApplicationInfo applicationInfo;
// 
//   @Override
//   public boolean equals(Object o) {
//     if (this == o) {
//       return true;
//     }
//     if (o == null || getClass() != o.getClass()) {
//       return false;
//     }
// 
//     AppInfo appInfo = (AppInfo) o;
// 
//     return packageName != null ? packageName.equals(appInfo.packageName)
//         : appInfo.packageName == null;
// 
//   }
// 
//   @Override
//   public int describeContents() {
//     return 0;
//   }
// 
//   @Override
//   public void writeToParcel(Parcel dest, int flags) {
//     dest.writeString(this.appName);
//     dest.writeString(this.packageName);
//   }
// 
//   public AppInfo() {
//   }
// 
//   protected AppInfo(Parcel in) {
//     this.appName = in.readString();
//     this.packageName = in.readString();
//   }
// 
//   public static final Parcelable.Creator<AppInfo> CREATOR = new Parcelable.Creator<AppInfo>() {
//     @Override
//     public AppInfo createFromParcel(Parcel source) {
//       return new AppInfo(source);
//     }
// 
//     @Override
//     public AppInfo[] newArray(int size) {
//       return new AppInfo[size];
//     }
//   };
// 
// 
//   @Override
//   public String toString() {
//     return "AppInfo{" +
//         "appName='" + appName + '\'' +
//         ", packageName='" + packageName + '\'' +
//         '}';
//   }
// }
// 
// Path: app/src/main/java/com/zzzmode/appopsx/ui/widget/CommonDivderDecorator.java
// public class CommonDivderDecorator extends DividerItemDecoration {
// 
//   private static Drawable sDefDrawable;
// 
//   public CommonDivderDecorator(Context context, int orientation) {
//     super(context, orientation);
//   }
// 
//   public CommonDivderDecorator(Context context) {
//     super(context, VERTICAL);
// 
//     Drawable divider = ContextCompat.getDrawable(context, R.drawable.list_divider_h);
//     setDrawable(divider);
//   }
// }


// Path: app/src/main/java/com/zzzmode/appopsx/ui/main/SearchHandler.java
import android.graphics.Color;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.TextUtils;
import android.text.style.ForegroundColorSpan;
import android.view.View;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.github.promeg.pinyinhelper.Pinyin;
import com.h6ah4i.android.widget.advrecyclerview.animator.RefactoredDefaultItemAnimator;
import com.zzzmode.appopsx.R;
import com.zzzmode.appopsx.ui.model.AppInfo;
import com.zzzmode.appopsx.ui.widget.CommonDivderDecorator;
import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.observers.ResourceObserver;
import io.reactivex.schedulers.Schedulers;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;

        e.onNext(result);
      }
    });
  }

  private static class SearchResultAdapter extends MainListAdapter {

    String kw;

    private int color = Color.parseColor("#FF4081");

    void clear() {
      appInfos.clear();
      notifyDataSetChanged();
    }

    @Override
    protected CharSequence processText(String name) {
      return resultHighlight(kw, name, color);
    }


    private CharSequence resultHighlight(String key, String text, int color) {
      String phantom = text.toLowerCase();
      String k = key != null ? key.toLowerCase() : null;

      if (k != null && phantom.contains(k)) {
        int st = 0;
        List<Integer> pos = new ArrayList<>(3);
        while ((st = phantom.indexOf(k, st)) != -1) {
          pos.add(st);