package com.jackpf.apkdownloader.UI; import com.actionbarsherlock.app.SherlockActivity; import com.jackpf.apkdownloader.Downloader; import com.jackpf.apkdownloader.Helpers; import com.jackpf.apkdownloader.R; import com.jackpf.apkdownloader.Entity.ApkFile; import com.jackpf.apkdownloader.Exception.AuthenticationException; import com.jackpf.apkdownloader.Exception.PlayApiException; import com.jackpf.apkdownloader.Model.UIInterface; public class MainActivityUI extends UIInterface { private SherlockActivity activity; private ArrayAdapter<List<ApkFile>> adapter; private List<ApkFile> downloads = new ArrayList<ApkFile>(); private ProgressDialog dialog; public MainActivityUI(Context context) { super(context); activity = (SherlockActivity) context; } public void initialise(Object ...params) { if (params.length > 0 && params[0] instanceof String) { ((EditText) activity.findViewById(R.id.app_id)).setText((String) params[0]); } final ListView downloadsList = (ListView) activity.findViewById(R.id.downloads); File dir = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + Downloader.DOWNLOAD_DIR); if (dir.listFiles() != null) { for (File file : dir.listFiles()) { ApkFile apk = new ApkFile(context, file); if (!downloads.contains(apk)) { downloads.add(apk); } } } Collections.sort(downloads, new Comparator<ApkFile>() { @Override public int compare(ApkFile f1, ApkFile f2) { return f1.getFile().lastModified() < f2.getFile().lastModified() ? 1 : -1; } }); if (adapter == null) { adapter = new ArrayAdapter<List<ApkFile>>(context, downloads); downloadsList.setAdapter(adapter); downloadsList.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Helpers.installFile(context, ((ApkFile) adapter.getItem(position)).getFile()); } }); /*Helpers.addContextMenu(downloadsList, R.menu._downloads_context_menu, new Helpers.ContextMenuCallback() { @Override public ActionMode startActionMode(ActionMode.Callback callback) { return activity.startActionMode(callback); } @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { File file = (File) adapter.getItem(downloadsList.getCheckedItemPosition()); switch (item.getItemId()) { case R.id.action_edit: return true; case R.id.action_delete: return true; } return false; } });*/ } else { adapter.notifyDataSetChanged(); } } public void preUpdate() { dialog = ProgressDialog.show(context, "Working", "Getting download path..."); } public void update() { if (dialog != null) { dialog.dismiss(); } } public void error(Exception e) { if (dialog != null) { dialog.dismiss(); } if (e instanceof AuthenticationException) { Toast.makeText(context.getApplicationContext(), context.getString(R.string.error_unrecognized_login, e.getMessage()), Toast.LENGTH_LONG).show(); } else if (e instanceof PlayApiException) { Toast.makeText(context.getApplicationContext(), context.getString(R.string.error_api_exception, e.getMessage()), Toast.LENGTH_LONG).show(); } else { throw new RuntimeException(e.getMessage(), e); } } private class ArrayAdapter<T extends List<?>> extends BaseAdapter { private final Context context; private final T objects; private final LayoutInflater inflater; private ArrayList<ApkFile> animatedViews = new ArrayList<ApkFile>(); public ArrayAdapter(Context context, T objects) { this.context = context; this.objects = objects; inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } public Object getItem(int position) { return objects.get(position); } public long getItemId(int position) { return position; } public int getCount() { return objects.size(); } @Override public View getView(int position, View convertView, ViewGroup parent) { View row; if (convertView == null) { row = inflater.inflate(R.layout._download_item, parent, false); } else { row = convertView; } ApkFile apk = (ApkFile) getItem(position); ((TextView) row.findViewById(R.id.package_name)).setText(apk.getFile().getName()); ((ImageView) row.findViewById(R.id.package_icon)).setImageBitmap(apk.getIcon()); if (!animatedViews.contains(apk)) { Animation animation = AnimationUtils.loadAnimation(context, R.anim.apk_animation); row.startAnimation(animation); animatedViews.add(apk); } return row; } } }