package com.majeur.materialicons; import android.content.res.TypedArray; import android.graphics.Color; import android.os.Bundle; import android.os.Environment; import android.support.annotation.NonNull; import android.support.v7.app.ActionBarActivity; import android.view.Gravity; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.CheckBox; import android.widget.GridView; import android.widget.ImageView; import android.widget.ListView; import android.widget.RadioButton; import android.widget.TextView; import android.widget.Toast; import com.afollestad.materialdialogs.MaterialDialog; import net.rdrei.android.dirchooser.DirectoryChooserFragment; import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class ExportActivity extends ActionBarActivity implements DirectoryChooserFragment.OnFragmentInteractionListener { public static final String EXTRA_SELECTED_ITEMS = "selected_items"; private static final int[] CHECKBOX_IDS = {R.id.checkbox_ldpi, R.id.checkbox_mdpi, R.id.checkbox_hdpi, R.id.checkbox_xhdpi, R.id.checkbox_xxhdpi, R.id.checkbox_xxxhdpi}; private List<String> mAssetsFiles; private int mColor = Color.DKGRAY; private View mColorPreview; private TextView mPathTextView; private DirectoryChooserFragment mDialog; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_export); getSupportActionBar().setDisplayHomeAsUpEnabled(true); mAssetsFiles = Arrays.asList(getIntent().getStringArrayExtra(EXTRA_SELECTED_ITEMS)); View colorButton = findViewById(R.id.color_button); colorButton.setOnClickListener(mColorClickListener); mColorPreview = findViewById(R.id.color_preview); mColorPreview.setBackgroundColor(mColor); View pathButton = findViewById(R.id.path_button); pathButton.setOnClickListener(mPathClickListener); mPathTextView = (TextView) findViewById(R.id.path_text); mPathTextView.setText(Environment.getExternalStorageDirectory().getPath()); ListView listView = (ListView) findViewById(R.id.list_view); listView.setOnItemClickListener(mOnItemClickListener); listView.setOnItemLongClickListener(mOnItemLongClickListener); listView.setAdapter(mListAdapter); findViewById(R.id.start_export_button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startExport(); } }); mDialog = DirectoryChooserFragment.newInstance(getString(R.string.app_name), null); } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == android.R.id.home) { finish(); return true; } return super.onOptionsItemSelected(item); } private AdapterView.OnItemClickListener mOnItemClickListener = new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(ExportActivity.this, R.string.long_press_to_remove, Toast.LENGTH_SHORT).show(); } }; private AdapterView.OnItemLongClickListener mOnItemLongClickListener = new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(ExportActivity.this, Utils.svgFileNameToLabel(mAssetsFiles.remove(position)) + " " + getString(R.string.removed), Toast.LENGTH_SHORT) .show(); mListAdapter.notifyDataSetChanged(); return true; } }; private View.OnClickListener mColorClickListener = new View.OnClickListener() { @Override public void onClick(View v) { TypedArray typedArray = getResources().obtainTypedArray(R.array.mtrl_colors); final int[] colors = new int[typedArray.length()]; for (int i = 0; i < typedArray.length(); i++) colors[i] = typedArray.getColor(i, Color.BLUE); typedArray.recycle(); GridView gridView = new GridView(ExportActivity.this); gridView.setNumColumns(getResources().getInteger(R.integer.color_grid_num_col)); gridView.setGravity(Gravity.CENTER); gridView.setAdapter(new SimpleAdapter() { @Override public int getCount() { return colors.length; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) convertView = new RoundView(parent.getContext()); ((RoundView) convertView).setRoundColor(colors[position]); return convertView; } }); final MaterialDialog dialog = new MaterialDialog.Builder(ExportActivity.this) .title(R.string.material_colors) .customView(gridView, false) .negativeText(android.R.string.cancel) .show(); gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { dialog.dismiss(); mColor = colors[position]; mColorPreview.setBackgroundColor(mColor); } }); } }; private View.OnClickListener mPathClickListener = new View.OnClickListener() { @Override public void onClick(View v) { mDialog.show(getFragmentManager(), null); } }; @Override public void onSelectDirectory(@NonNull String s) { mPathTextView.setText(s); mDialog.dismiss(); } @Override public void onCancelChooser() { mDialog.dismiss(); } private void startExport() { List<Density> desiredDensities = new ArrayList<>(CHECKBOX_IDS.length); final Density[] densities = Density.values(); for (int i = 0; i < CHECKBOX_IDS.length; i++) { CheckBox checkBox = (CheckBox) findViewById(CHECKBOX_IDS[i]); if (checkBox.isChecked()) desiredDensities.add(densities[i]); } if (desiredDensities.size() == 0) { Toast.makeText(this, R.string.no_density_selected, Toast.LENGTH_LONG).show();//TODO return; } AsyncExporter.Params params = new AsyncExporter.Params(); params.desiredColor = mColor; params.desiredDensities = desiredDensities; params.desiredFiles = mAssetsFiles; params.path = mPathTextView.getText().toString(); params.saveType = getSaveType(); final MaterialDialog dialog = new MaterialDialog.Builder(this) .content("") .progress(false, 100, true) .build(); new AsyncExporter(this, new AsyncExporter.ExportStateCallbacks() { @Override public void onPreExport() { dialog.show(); } @Override public void onExportProgressUpdate(AsyncExporter.Progress progress) { dialog.setMaxProgress(progress.totalProgress); dialog.setProgress(progress.currentProgress); dialog.setMessage(progress.currentDensity + "\n" + progress.currentFileName); } @Override public void onPostExport(final File resultDirectory) { dialog.dismiss(); new MaterialDialog.Builder(ExportActivity.this) .title(R.string.success) .content(R.string.icons_exported_correctly) .negativeText(android.R.string.ok) .show(); } }).execute(params); } private AsyncExporter.SaveType getSaveType() { RadioButton zipRadio = (RadioButton) findViewById(R.id.radio_zip); if (zipRadio.isChecked()) return AsyncExporter.SaveType.ZIP; else return AsyncExporter.SaveType.DIR; } private BaseAdapter mListAdapter = new BaseAdapter() { @Override public int getCount() { return mAssetsFiles.size(); } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } class Holder { ImageView imageView; TextView textView; public Holder(View view) { imageView = (ImageView) view.findViewById(R.id.image1); imageView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); textView = (TextView) view.findViewById(R.id.text1); } } @Override public View getView(int position, View convertView, ViewGroup parent) { Holder holder; if (convertView == null) { convertView = ExportActivity.this.getLayoutInflater().inflate(R.layout.list_item, parent, false); holder = new Holder(convertView); convertView.setTag(holder); } else { holder = (Holder) convertView.getTag(); } String fileName = mAssetsFiles.get(position); holder.imageView.setImageDrawable(Utils.getDrawableForSvg(ExportActivity.this, fileName)); holder.textView.setText(Utils.svgFileNameToLabel(fileName)); return convertView; } }; }