package com.appassit.fragments; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.os.StatFs; import android.support.v4.app.Fragment; import android.text.format.Formatter; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; import com.appassit.R; import com.appassit.activitys.SLAppication; import com.appassit.common.Utils; import com.appassit.enums.QuickReturnType; import com.appassit.interfaces.QuickReturnInterface; import com.appassit.listener.QuickReturnListViewOnScrollListener; import com.appassit.model.AppInfo; import com.appassit.provider.AppInfoProvider; import com.appassit.widget.RippleView; import com.appassit.widget.googleprogress.GoogleProgressBar; import com.appassit.widget.jazzylistview.JazzyListView; import com.lidroid.xutils.ViewUtils; import com.lidroid.xutils.view.annotation.ViewInject; public class AppManagerFragments extends Fragment { // region Member Variables @ViewInject(R.id.tv_avail_rom) TextView tv_avail_rom; @ViewInject(R.id.tv_avail_sd) TextView tv_avail_sd; @ViewInject(android.R.id.list) JazzyListView lv_app_manager; @ViewInject(R.id.ll_loading) GoogleProgressBar ll_loading; /** * 当前程序信息的状态。 */ @ViewInject(R.id.tv_status) TextView tv_status; @ViewInject(R.id.quick_return_footer_ll) LinearLayout mQuickReturnFooterLinearLayout; List<AppInfo> appInfos; /** * 用户应用程序的集合 */ private List<AppInfo> userAppInfos; /** * 系统应用程序的集合 */ // private List<AppInfo> systemAppInfos; /** * 所有的应用程序包信息 */ private QuickReturnInterface mCoordinator; private View mPlaceHolderView; /** * 被点击的条目。 */ private AppInfo appInfo; private AppManagerAdapter adapter; @Override public void onAttach(Activity activity) { super.onAttach(activity); if (activity instanceof QuickReturnInterface) { mCoordinator = (QuickReturnInterface) activity; } else throw new ClassCastException("Parent container must implement the QuickReturnInterface"); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub View view = inflater.inflate(R.layout.fragment_app_manager, container, false); ViewUtils.inject(this, view); return view; } @Override public void onViewCreated(View view, Bundle savedInstanceState) { // TODO Auto-generated method stub super.onViewCreated(view, savedInstanceState); long sdsize = getAvailSpace(Environment.getExternalStorageDirectory().getAbsolutePath()); long romsize = getAvailSpace(Environment.getDataDirectory().getAbsolutePath()); tv_avail_sd.setText("SD卡可用空间" + ":" + Formatter.formatFileSize(getActivity(), sdsize)); tv_avail_rom.setText("内存可用空间:" + Formatter.formatFileSize(getActivity(), romsize)); int headerHeight = getResources().getDimensionPixelSize(R.dimen.twitter_header_height); int footerHeight = getResources().getDimensionPixelSize(R.dimen.twitter_footer_height); int indicatorHeight = Utils.dp2px(getActivity(), 4); int headerTranslation = -headerHeight + indicatorHeight; int footerTranslation = -footerHeight + indicatorHeight; QuickReturnListViewOnScrollListener scrollListener = new QuickReturnListViewOnScrollListener(QuickReturnType.TWITTER, mCoordinator.getTabs(), headerTranslation, mQuickReturnFooterLinearLayout, -footerTranslation); scrollListener.setCanSlideInIdleScrollState(true); lv_app_manager.setOnScrollListener(scrollListener); mPlaceHolderView = getActivity().getLayoutInflater().inflate(R.layout.view_header_placeholder, lv_app_manager, false); lv_app_manager.addHeaderView(mPlaceHolderView); } @Override public void onResume() { // TODO Auto-generated method stub super.onResume(); fillData(); } @Override public void onDestroyView() { Log.e("YM", "onDestroyView"); super.onDestroyView(); lv_app_manager.setAdapter(null); } void fillData() { ll_loading.setVisibility(View.VISIBLE); new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub userAppInfos = new ArrayList<AppInfo>(); appInfos = AppInfoProvider.getAppInfos(SLAppication.getContext()); // systemAppInfos = new ArrayList<AppInfo>(); for (AppInfo info : appInfos) { if (info.isUserApp()) { userAppInfos.add(info); } else { // systemAppInfos.add(info); } } getActivity().runOnUiThread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub if (adapter == null) { adapter = new AppManagerAdapter(); } // tv_status.setText("用户程序:" + userAppInfos.size() + "个"); lv_app_manager.setAdapter(adapter); adapter.notifyDataSetChanged(); ll_loading.setVisibility(View.GONE); } }); } }).start(); } private class AppManagerAdapter extends BaseAdapter { // 控制listview有多少个条目 @Override public View getView(int position, View convertView, ViewGroup parent) { View view; final ViewHolder holder; appInfo = userAppInfos.get(position); // appInfo = systemAppInfos.get(newposition); // } if (convertView != null && convertView instanceof RelativeLayout) { // 不仅需要检查是否为空,还要判断是否是合适的类型去复用 view = convertView; holder = (ViewHolder) view.getTag(); } else { view = View.inflate(SLAppication.getContext(), R.layout.layout_manager_appinfo, null); holder = new ViewHolder(); holder.iv_icon = (ImageView) view.findViewById(R.id.iv_app_icon); holder.tv_location = (TextView) view.findViewById(R.id.tv_app_location); holder.tv_name = (TextView) view.findViewById(R.id.tv_app_name); holder.riple_uninstall = (RippleView) view.findViewById(R.id.riple_uninstall); view.setTag(holder); } holder.position = position; holder.iv_icon.setImageDrawable(appInfo.getIcon()); holder.tv_name.setText(appInfo.getName()); if (appInfo.isInRom()) { holder.tv_location.setText("手机内存"); } else { holder.tv_location.setText("外部存储"); } holder.riple_uninstall.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub appInfo = userAppInfos.get(holder.position); Intent intent = new Intent(); intent.setAction("android.intent.action.VIEW"); intent.setAction("android.intent.action.DELETE"); intent.addCategory("android.intent.category.DEFAULT"); intent.setData(Uri.parse("package:" + appInfo.getPackname())); startActivityForResult(intent, 0); } }); return view; } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public int getCount() { // TODO Auto-generated method stub return userAppInfos.size(); } } static class ViewHolder { TextView tv_name; TextView tv_location; ImageView iv_icon; RippleView riple_uninstall; int position = 0; } /** * 获取某个目录的可用空间 * * @param path * @return */ private long getAvailSpace(String path) { StatFs statf = new StatFs(path); statf.getBlockCount();// 获取分区的个数 long size = statf.getBlockSize();// 获取分区的大小 long count = statf.getAvailableBlocks();// 获取可用的区块的个数 return size * count; } }