快传(接收方图片缩略图尚需改进, 连接断开处理尚需改进),安装包清理, 网页传网页乱码未解决
This commit is contained in:
330
app/src/main/java/com/gh/gamecenter/adapter/CleanApkAdapter.java
Normal file
330
app/src/main/java/com/gh/gamecenter/adapter/CleanApkAdapter.java
Normal file
@ -0,0 +1,330 @@
|
||||
package com.gh.gamecenter.adapter;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.PackageInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Environment;
|
||||
import android.os.Handler;
|
||||
import android.support.v4.util.ArrayMap;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.CompoundButton;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.gh.common.util.BitmapUtils;
|
||||
import com.gh.common.util.PackageUtils;
|
||||
import com.gh.common.view.CardLinearLayout;
|
||||
import com.gh.gamecenter.CleanApkActivity;
|
||||
import com.gh.gamecenter.R;
|
||||
import com.gh.gamecenter.adapter.viewholder.KcSelectGameViewHolder;
|
||||
import com.gh.gamecenter.entity.InstallGameEntity;
|
||||
|
||||
import java.io.File;
|
||||
import java.text.DecimalFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Created by khy on 2017/1/24.
|
||||
*/
|
||||
public class CleanApkAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
||||
|
||||
private Context mContext;
|
||||
|
||||
private List<InstallGameEntity> mApkList;
|
||||
|
||||
private OnScanListener scanListener;
|
||||
|
||||
private ArrayMap<Integer, Boolean> mSelectPosition;
|
||||
|
||||
private static int INSTALLED = 0; // 表示已经安装
|
||||
private static int UNINSTALLED = 1; // 表示未安装
|
||||
|
||||
private int cardMargin;
|
||||
|
||||
private boolean isStopScan;
|
||||
|
||||
private TextView mApkDeleteBtn;
|
||||
|
||||
private boolean isScanOver;
|
||||
|
||||
|
||||
Handler handler = new Handler();
|
||||
|
||||
public CleanApkAdapter(CleanApkActivity activity, TextView apkDeleteBtn) {
|
||||
this.mContext = activity;
|
||||
this.mApkDeleteBtn = apkDeleteBtn;
|
||||
scanListener = activity;
|
||||
|
||||
mApkList = new ArrayList<>();
|
||||
mSelectPosition = new ArrayMap<>();
|
||||
isStopScan = false;
|
||||
isScanOver = false;
|
||||
|
||||
cardMargin = (int) mContext.getResources().getDimension(R.dimen.cardview_margin);
|
||||
init();
|
||||
}
|
||||
|
||||
private void init() {
|
||||
new Thread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
FindAllAPKFile(Environment.getExternalStorageDirectory());
|
||||
handler.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
isScanOver = true;
|
||||
scanListener.onScanOver();
|
||||
if (mApkList.size() == 0) {
|
||||
scanListener.noData();
|
||||
}
|
||||
notifyItemRangeChanged(0, getItemCount());
|
||||
}
|
||||
});
|
||||
}
|
||||
}).start();
|
||||
|
||||
}
|
||||
|
||||
public void FindAllAPKFile(File file) {
|
||||
|
||||
if (isStopScan) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 手机上的文件,目前只判断SD卡上的APK文件
|
||||
// file = Environment.getDataDirectory();
|
||||
// SD卡上的文件目录
|
||||
if (file.isFile()) {
|
||||
// Utils.log("===== 是文件" + file.getAbsolutePath().toString());
|
||||
String name_s = file.getName();
|
||||
InstallGameEntity apkEntity = new InstallGameEntity();
|
||||
String apk_path = null;
|
||||
// MimeTypeMap.getSingleton()
|
||||
if (name_s.toLowerCase().endsWith(".apk")) {
|
||||
apk_path = file.getAbsolutePath();// apk文件的绝对路劲
|
||||
PackageManager pm = mContext.getPackageManager();
|
||||
PackageInfo packageInfo = pm.getPackageArchiveInfo(apk_path, PackageManager.GET_ACTIVITIES);
|
||||
if (packageInfo == null) return;
|
||||
|
||||
ApplicationInfo appInfo = packageInfo.applicationInfo;
|
||||
|
||||
|
||||
/**获取apk的图标 */
|
||||
appInfo.sourceDir = apk_path;
|
||||
appInfo.publicSourceDir = apk_path;
|
||||
Drawable apk_icon = appInfo.loadIcon(pm);
|
||||
apkEntity.setGameBm(BitmapUtils.drawableToBitmap(apk_icon));
|
||||
/** apk的绝对路劲 */
|
||||
apkEntity.setGamePath(file.getAbsolutePath());
|
||||
/** apk的版本名称 String */
|
||||
String versionName = packageInfo.versionName;
|
||||
apkEntity.setGameVersion(versionName);
|
||||
|
||||
String apkName = packageInfo.applicationInfo.loadLabel(pm).toString();
|
||||
apkEntity.setGameName(apkName);
|
||||
|
||||
apkEntity.setGameSize(file.length());
|
||||
|
||||
/**安装处理类型*/
|
||||
/** 得到包名 */
|
||||
String packageName = packageInfo.packageName;
|
||||
int type = doType(pm, packageName);
|
||||
apkEntity.setInstallStatus(type);
|
||||
|
||||
mApkList.add(apkEntity);
|
||||
mSelectPosition.put((mApkList.size() - 1), false);
|
||||
|
||||
handler.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
notifyItemInserted((mApkList.size() - 1));
|
||||
}
|
||||
});
|
||||
}
|
||||
} else {
|
||||
// Utils.log("===== 是文件夹" + file.getAbsolutePath().toString());
|
||||
File[] files = file.listFiles();
|
||||
if (files != null && files.length > 0) {
|
||||
for (File file_str : files) {
|
||||
FindAllAPKFile(file_str);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private int doType(PackageManager pm, String packageName) {
|
||||
List<PackageInfo> pakageinfos = pm.getInstalledPackages(0);
|
||||
for (PackageInfo pi : pakageinfos) {
|
||||
if ((pi.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0) {
|
||||
String pi_packageName = pi.packageName;
|
||||
//如果这个包名在系统已经安装过的应用中存在
|
||||
if(packageName.endsWith(pi_packageName)){
|
||||
return INSTALLED;
|
||||
}
|
||||
}
|
||||
}
|
||||
return UNINSTALLED;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
View view = LayoutInflater.from(parent.getContext()).inflate(
|
||||
R.layout.kc_game_select_item, parent, false);
|
||||
return new KcSelectGameViewHolder(view);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, final int position) {
|
||||
final InstallGameEntity gameEntity = mApkList.get(position);
|
||||
if (viewHolder instanceof KcSelectGameViewHolder) {
|
||||
KcSelectGameViewHolder holder = (KcSelectGameViewHolder) viewHolder;
|
||||
// 第一个
|
||||
if (position == 0) {
|
||||
((CardLinearLayout) holder.itemView).setmTop(cardMargin);
|
||||
} else {
|
||||
((CardLinearLayout) holder.itemView).setmTop(0);
|
||||
}
|
||||
|
||||
// 最后一个
|
||||
if (position == mApkList.size() - 1) {
|
||||
((CardLinearLayout) holder.itemView).setBottom(true);
|
||||
} else {
|
||||
((CardLinearLayout) holder.itemView).setBottom(false);
|
||||
}
|
||||
|
||||
double size = (((float)gameEntity.getGameSize()/1024)/1024);
|
||||
DecimalFormat df = new DecimalFormat("#.00");
|
||||
String sizeName = df.format(size) + "MB";
|
||||
|
||||
// Spanned spanned = Html.fromHtml("大小:" + "<font color=\"#00B7FA\">" + sizeName + "</font>");
|
||||
// holder.gameSize.setText(spanned);
|
||||
holder.selectCB.setVisibility(View.VISIBLE);
|
||||
if (mSelectPosition.get(position)) {
|
||||
holder.selectCB.setChecked(true);
|
||||
} else {
|
||||
holder.selectCB.setChecked(false);
|
||||
}
|
||||
|
||||
holder.gameNameAndSize.setText(gameEntity.getGameName());
|
||||
holder.gameDes.setText("版本:V" + gameEntity.getGameVersion() + " | " + sizeName);
|
||||
|
||||
holder.gameThumb.setImageBitmap(gameEntity.getGameBm());
|
||||
|
||||
if (gameEntity.getInstallStatus() == INSTALLED) {
|
||||
holder.gameSize.setText("已安装");
|
||||
holder.gameSize.setTextColor(mContext.getResources().getColor(R.color.theme));
|
||||
} else {
|
||||
holder.gameSize.setText("未安装");
|
||||
holder.gameSize.setTextColor(Color.RED);
|
||||
}
|
||||
|
||||
if (isScanOver) {
|
||||
holder.selectCB.setEnabled(true);
|
||||
} else {
|
||||
holder.selectCB.setEnabled(false);
|
||||
}
|
||||
|
||||
holder.selectCB.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
|
||||
@Override
|
||||
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
|
||||
if (isChecked) {
|
||||
mSelectPosition.put(position, true);
|
||||
} else {
|
||||
mSelectPosition.put(position, false);
|
||||
}
|
||||
|
||||
long gameSize = 0;
|
||||
for (Integer integer : mSelectPosition.keySet()) {
|
||||
if (mSelectPosition.get(integer)) {
|
||||
gameSize = gameSize + mApkList.get(integer).getGameSize();
|
||||
}
|
||||
}
|
||||
|
||||
if (gameSize == 0) {
|
||||
mApkDeleteBtn.setText("一键删除");
|
||||
} else {
|
||||
double size = (((float)gameSize/1024)/1024);
|
||||
DecimalFormat df = new DecimalFormat("#.00");
|
||||
String sizeName = df.format(size) + "MB";
|
||||
mApkDeleteBtn.setText("一键删除("+ sizeName +")");
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
holder.itemView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (isScanOver) {
|
||||
PackageUtils.launchSetup(mContext, gameEntity.getGamePath());
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return mApkList.size();
|
||||
}
|
||||
|
||||
public List<InstallGameEntity> getApkList() {
|
||||
return mApkList;
|
||||
}
|
||||
|
||||
public ArrayMap<Integer, Boolean> getSelectPosition() {
|
||||
return mSelectPosition;
|
||||
}
|
||||
|
||||
public void setSelectPosition(ArrayMap<Integer, Boolean> selectPosition) {
|
||||
this.mSelectPosition = selectPosition;
|
||||
}
|
||||
|
||||
public void isStopScan () {
|
||||
this.isStopScan = true;
|
||||
}
|
||||
|
||||
public void deleteApk(int position) {
|
||||
mApkList.remove(position);
|
||||
|
||||
Iterator<Map.Entry<Integer, Boolean>> iterator = mSelectPosition.entrySet().iterator();
|
||||
while (iterator.hasNext()) {
|
||||
Map.Entry<Integer, Boolean> entry = iterator.next();
|
||||
Integer key = entry.getKey();
|
||||
|
||||
if (key == position) {
|
||||
iterator.remove();
|
||||
}
|
||||
}
|
||||
|
||||
ArrayMap<Integer, Boolean> newMap = new ArrayMap<>(mSelectPosition);
|
||||
for (Integer integer : newMap.keySet()) {
|
||||
if (integer > position) {
|
||||
int newPosition = integer - 1;
|
||||
mSelectPosition.put(newPosition, mSelectPosition.get(integer));
|
||||
}
|
||||
}
|
||||
|
||||
if (mSelectPosition.size() > mApkList.size()) {
|
||||
mSelectPosition.removeAt(mSelectPosition.size() - 1);
|
||||
}
|
||||
|
||||
notifyItemRemoved(position);
|
||||
}
|
||||
|
||||
public interface OnScanListener {
|
||||
void onScanOver();
|
||||
void noData();
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user