package hello.dcsms.omzen.Panel; import hello.dcsms.omzen.R; import hello.dcsms.omzen.Util.JSON; import hello.dcsms.omzen.Util.ZipUtils; import hello.dcsms.omzen.theme.ThemeData; import hello.dcsms.omzen.theme.ThemeKontsran; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.OutputStreamWriter; import android.app.Activity; import android.app.ProgressDialog; import android.content.Intent; import android.content.res.ColorStateList; import android.database.Cursor; import android.graphics.Color; import android.graphics.drawable.StateListDrawable; import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.util.JsonWriter; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.Toast; public class BackupThemeFragment extends BaseFragmen implements OnClickListener { LinearLayout leot; EditText et_nama, et_autor, et_versi, et_kontak, et_keterangan; Button ss1, ss2, apply; ImageView iv1, iv2; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { leot = (LinearLayout) inflater.inflate(R.layout.backuptheme, null); findView(); return leot; } private ColorStateList statelist() { int[][] states = new int[][] { new int[] { android.R.attr.state_pressed }, new int[] {} }; int[] colors = new int[] { Color.RED, Color.WHITE }; ColorStateList c = new ColorStateList(states, colors); return c; } private void findView() { et_nama = (EditText) leot.findViewById(R.id.bt_namatema); et_autor = (EditText) leot.findViewById(R.id.bt_namaauthor); et_versi = (EditText) leot.findViewById(R.id.bt_versi); et_kontak = (EditText) leot.findViewById(R.id.bt_kontak); et_keterangan = (EditText) leot.findViewById(R.id.bt_keterangan); ss1 = (Button) leot.findViewById(R.id.bt_ss1); ss2 = (Button) leot.findViewById(R.id.bt_ss2); apply = (Button) leot.findViewById(R.id.bt_apply); iv1 = (ImageView) leot.findViewById(R.id.ss1); iv2 = (ImageView) leot.findViewById(R.id.ss2); ss1.setOnClickListener(this); ss2.setOnClickListener(this); apply.setOnClickListener(this); } private String getImagePath(Uri uri) { Cursor cursor = getActivity().getContentResolver().query(uri, null, null, null, null); cursor.moveToFirst(); int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); return cursor.getString(idx); } private void getImageChooser(String judul, int rekueskode) { Intent i = new Intent(Intent.ACTION_GET_CONTENT); i.setType("image/*"); startActivityForResult(Intent.createChooser(i, judul), rekueskode); } int SS1_REQCODE = 10001; int SS2_REQCODE = 10002; String SS1 = "", SS2 = ""; @Override public void onClick(View v) { switch (v.getId()) { case R.id.bt_ss1: getImageChooser("Pilih Screenshot 1", SS1_REQCODE); break; case R.id.bt_ss2: getImageChooser("Pilih Screenshot 2", SS2_REQCODE); break; case R.id.bt_apply: boolean boo = sudahbolehdibackup(); if (boo) { ThemeData d = new ThemeData(); d.set(GT(et_nama), GT(et_autor), GT(et_keterangan), GT(et_versi), GT(et_kontak)); try { bikinFileJSON(); KopiFileSS(); String[] files = new String[] { Environment.getExternalStorageDirectory() .getAbsolutePath() + "/default_icon", ThemeKontsran.OMZENCACHEDIR + "/info.json", ThemeKontsran.OMZENCACHEDIR + "/screenshot_1.jpg", ThemeKontsran.OMZENCACHEDIR + "/screenshot_2.jpg" }; ZIPBACKUP zip = new ZIPBACKUP(d); zip.execute(files); } catch (IOException e) { e.printStackTrace(); } } break; } } private class ZIPBACKUP extends AsyncTask<String, Void, Boolean> { ThemeData td; ProgressDialog pd; public ZIPBACKUP(ThemeData t) { td = t; } @Override protected void onPostExecute(Boolean result) { super.onPostExecute(result); if (result) { pd.dismiss(); Toast.makeText(getActivity(), "Sukses backup", Toast.LENGTH_SHORT).show(); } } @Override protected void onPreExecute() { super.onPreExecute(); pd = new ProgressDialog(getActivity()); pd.setTitle("Backup Tema"); pd.setMessage("Mohon tunggu sejenak"); pd.setIndeterminate(true); pd.setCancelable(false); pd.show(); } @Override protected Boolean doInBackground(String... str) { return ZipUtils.zipFileAtPath(str, ThemeKontsran.OMZENTHEMEDIR + "/" + td.get_NAMATEMA() + ".omztheme"); } } private String GT(EditText et) { return et.getText().toString(); } private boolean sudahbolehdibackup() { if (GT(et_autor).equals("") || GT(et_keterangan).equals("") || GT(et_kontak).equals("") || GT(et_versi).equals("") || GT(et_nama).equals("")) { Toast.makeText(getActivity(), "Semua data harus diisi", Toast.LENGTH_SHORT).show(); return false; } else { File f = new File(SS1); File f2 = new File(SS2); if (!f.exists() || !f2.exists()) { Toast.makeText(getActivity(), "Screenshot belon dipilih", Toast.LENGTH_SHORT).show(); return false; } } return true; } void KopiFileSS() { File ss1 = new File(ThemeKontsran.OMZENCACHEDIR + "/screenshot_1.jpg"); File ss2 = new File(ThemeKontsran.OMZENCACHEDIR + "/screenshot_2.jpg"); if (ss1.exists()) ss1.delete(); if (ss2.exists()) ss2.delete(); File ssbaru1 = new File(SS1); File ssbaru2 = new File(SS2); if (ssbaru1.exists()) KOPISS(ssbaru1, "screenshot_1.jpg"); if (ssbaru2.exists()) KOPISS(ssbaru2, "screenshot_2.jpg"); } private boolean KOPISS(File iss, String osx) { boolean result = false; InputStream is = null; OutputStream os = null; final int buffer_size = 1024; try { is = new FileInputStream(iss); os = new FileOutputStream(new File(ThemeKontsran.OMZENCACHEDIR + "/" + osx)); byte[] bytes = new byte[buffer_size]; for (;;) { int count = is.read(bytes, 0, buffer_size); if (count == -1) break; os.write(bytes, 0, count); } is.close(); os.close(); } catch (Exception ex) { result = false; } return result; } void bikinFileJSON() throws IOException { File f = new File(ThemeKontsran.OMZENCACHEDIR); if (!f.exists()) f.mkdirs(); File json = new File(f + "/info.json"); if (json.exists()) json.delete(); FileOutputStream out = new FileOutputStream(json); JsonWriter writer = new JsonWriter(new OutputStreamWriter(out, "UTF-8")); writer.setIndent(" "); ThemeData d = new ThemeData(); d.set(GT(et_nama), GT(et_autor), GT(et_keterangan), GT(et_versi), GT(et_kontak)); JSON.writeMessage(writer, d); writer.close(); out.close(); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == Activity.RESULT_OK) { setOnPickerResult(requestCode, data); } } public void setOnPickerResult(int requestCode, Intent data) { if (requestCode == SS1_REQCODE) { Uri uri = data.getData(); File f = new File(uri.getPath()); if (!f.isFile()) { SS1 = getImagePath(uri); } else { SS1 = uri.getPath(); } iv1.setImageURI(Uri.fromFile(new File(SS1))); } else if (requestCode == SS2_REQCODE) { Uri uri = data.getData(); File f = new File(uri.getPath()); if (!f.isFile()) { SS2 = getImagePath(uri); } else { SS2 = uri.getPath(); } iv2.setImageURI(Uri.fromFile(new File(SS2))); } } }