// Path: app/src/main/java/com/zzzmode/appopsx/ui/main/AppItemViewHolder.java
// public class AppItemViewHolder extends RecyclerView.ViewHolder {
// 
//   private ImageView imgIcon;
//   TextView tvName;
// 
//   public AppItemViewHolder(View itemView) {
//     super(itemView);
//     imgIcon = itemView.findViewById(R.id.app_icon);
//     tvName = itemView.findViewById(R.id.app_name);
//   }
// 
// 
//   public void bindData(AppInfo appInfo) {
//     tvName.setText(appInfo.appName);
//     LocalImageLoader.load(imgIcon, appInfo);
//   }
// }
// 
// 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 + '\'' +
//         '}';
//   }
// }


import androidx.annotation.NonNull;
import androidx.collection.SparseArrayCompat;
import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import com.zzzmode.appopsx.R;
import com.zzzmode.appopsx.ui.main.AppItemViewHolder;
import com.zzzmode.appopsx.ui.model.AppInfo;
import java.util.List;

  private void handleCheck(ExportViewHolder holder, boolean change) {
    int pos = holder.getAdapterPosition();

    if (holder.checkBox.isChecked()) {
      mCheckedApps.delete(pos);
    } else {
      mCheckedApps.put(pos, appInfos.get(pos));
    }
    if (change) {
      holder.checkBox.setOnCheckedChangeListener(null);
      holder.checkBox.setChecked(isChecked(pos));
      holder.checkBox.setOnCheckedChangeListener(this);
    }
  }

  private boolean isChecked(int pos) {
    return !(mCheckedApps.indexOfKey(pos) < 0);
  }

  @Override
  public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    Object tag = buttonView.getTag();
    if (tag instanceof ExportViewHolder) {
      ExportViewHolder holder = (ExportViewHolder) tag;
      handleCheck(holder, false);
    }
  }


// Path: app/src/main/java/com/zzzmode/appopsx/ui/main/AppItemViewHolder.java
// public class AppItemViewHolder extends RecyclerView.ViewHolder {
// 
//   private ImageView imgIcon;
//   TextView tvName;
// 
//   public AppItemViewHolder(View itemView) {
//     super(itemView);
//     imgIcon = itemView.findViewById(R.id.app_icon);
//     tvName = itemView.findViewById(R.id.app_name);
//   }
// 
// 
//   public void bindData(AppInfo appInfo) {
//     tvName.setText(appInfo.appName);
//     LocalImageLoader.load(imgIcon, appInfo);
//   }
// }
// 
// 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/main/backup/ExportAdapter.java
import androidx.annotation.NonNull;
import androidx.collection.SparseArrayCompat;
import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import com.zzzmode.appopsx.R;
import com.zzzmode.appopsx.ui.main.AppItemViewHolder;
import com.zzzmode.appopsx.ui.model.AppInfo;
import java.util.List;


  private void handleCheck(ExportViewHolder holder, boolean change) {
    int pos = holder.getAdapterPosition();

    if (holder.checkBox.isChecked()) {
      mCheckedApps.delete(pos);
    } else {
      mCheckedApps.put(pos, appInfos.get(pos));
    }
    if (change) {
      holder.checkBox.setOnCheckedChangeListener(null);
      holder.checkBox.setChecked(isChecked(pos));
      holder.checkBox.setOnCheckedChangeListener(this);
    }
  }

  private boolean isChecked(int pos) {
    return !(mCheckedApps.indexOfKey(pos) < 0);
  }

  @Override
  public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    Object tag = buttonView.getTag();
    if (tag instanceof ExportViewHolder) {
      ExportViewHolder holder = (ExportViewHolder) tag;
      handleCheck(holder, false);
    }
  }


  static class ExportViewHolder extends AppItemViewHolder {