123 lines
4.4 KiB
Java
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();
|
|
}
|
|
}
|