Files
assistant-android/app/src/main/java/com/gh/gamecenter/suggest/SuggestSelectGameAdapter.java
2020-11-03 10:44:19 +08:00

123 lines
4.4 KiB
Java

package com.gh.gamecenter.suggest;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ProgressBar;
import com.gh.base.OnRequestCallBackListener;
import com.gh.base.fragment.BaseFragment;
import com.gh.common.util.BitmapUtils;
import com.gh.common.util.PackageUtils;
import com.gh.gamecenter.R;
import com.gh.gamecenter.SuggestionActivity;
import com.gh.gamecenter.entity.InstallGameEntity;
import com.gh.gamecenter.retrofit.Response;
import com.lightgame.adapter.BaseRecyclerAdapter;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
/**
* Created by khy on 2017/4/1.
*/
public class SuggestSelectGameAdapter extends BaseRecyclerAdapter<SelectGameViewHolder> {
private OnRequestCallBackListener listener;
private List<InstallGameEntity> apkList;
private ProgressBar pb;
public SuggestSelectGameAdapter(SuggestionActivity context, ProgressBar pb) {
super(context);
this.listener = context;
this.pb = pb;
apkList = new ArrayList<>();
initData();
}
public SuggestSelectGameAdapter(BaseFragment fragment, ProgressBar pb) {
super(fragment.getContext());
this.listener = fragment;
this.pb = pb;
apkList = new ArrayList<>();
initData();
}
private void initData() {
Observable
.create(emitter -> {
PackageManager pm = mContext.getPackageManager();
List<PackageInfo> installedPackages = PackageUtils.getInstalledPackages(mContext, 0);
for (PackageInfo installedPackage : installedPackages) {
if ((installedPackage.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0) {
InstallGameEntity installGameEntity = new InstallGameEntity();
installGameEntity.setGamePath(installedPackage.applicationInfo.sourceDir);
try {
Drawable drawable = installedPackage.applicationInfo.loadIcon(pm);
installGameEntity.setGameBm(BitmapUtils.drawableToBitmap(drawable, true));
installGameEntity.setGameVersion(installedPackage.versionName);
installGameEntity.setGameName(installedPackage.applicationInfo.loadLabel(pm).toString());
installGameEntity.setPackageName(installedPackage.packageName);
File file = new File(installedPackage.applicationInfo.sourceDir);
installGameEntity.setGameSize(file.length());
apkList.add(installGameEntity);
} catch (Exception ignore) {
}
}
}
emitter.onComplete();
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Response<Object>() {
@Override
public void onComplete() {
super.onComplete();
notifyDataSetChanged();
pb.setVisibility(View.GONE);
}
});
}
@Override
public SelectGameViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = mLayoutInflater.inflate(R.layout.dialog_select_game_item, parent, false);
return new SelectGameViewHolder(view);
}
@Override
public void onBindViewHolder(SelectGameViewHolder holder, int position) {
final InstallGameEntity installGameEntity = apkList.get(position);
holder.gameIcon.getIconIv().setImageBitmap(installGameEntity.getGameBm());
holder.gameIcon.getIconDecoratorIv().setVisibility(View.GONE);
holder.gameName.setText(installGameEntity.getGameName());
holder.itemView.setOnClickListener(v -> listener.loadDone(installGameEntity));
}
@Override
public int getItemCount() {
return apkList.size();
}
}