/* * Copyright (C) 2015, Jhuster, All Rights Reserved * * Author: Jhuster(lujun.hust@gmail.com) * * https://github.com/Jhuster/JNote * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. */ package com.jhuster.jnote; import java.io.BufferedWriter; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import com.jhuster.jnote.markdown.MDReader; import android.graphics.Bitmap; import android.graphics.Bitmap.CompressFormat; import android.graphics.Bitmap.Config; import android.graphics.Canvas; import android.os.Bundle; import android.os.Environment; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.ScrollView; import android.widget.TextView; import android.widget.Toast; import android.widget.TextView.BufferType; public class DisplayActivity extends BaseActivity { private static final String DEFAULT_DIR = Environment.getExternalStorageDirectory() + File.separator + "JNote"; private TextView mTextView; private MDReader mMDReader; private ScrollView mRootView; @Override protected void onCreate(Bundle savedInstanceState) { getActionBar().setDisplayHomeAsUpEnabled(true); getActionBar().setDisplayShowHomeEnabled(false); super.onCreate(savedInstanceState); } @Override protected void initVariables() { String content = getIntent().getExtras().getString("Content"); mMDReader = new MDReader(content); checkStorageDir(); } @Override protected void initViews(Bundle savedInstanceState) { setContentView(R.layout.activity_display); mRootView = (ScrollView) findViewById(R.id.DisplayRootView); mTextView = (TextView) findViewById(R.id.DisplayTextView); mTextView.setTextKeepState(mMDReader.getFormattedContent(), BufferType.SPANNABLE); } @Override protected void loadData() { } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_display, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); switch (id) { case R.id.action_save_md: saveAsMardown(); break; case R.id.action_save_txt: saveAsRawContent(); break; case R.id.action_save_img: saveAsBitmap(); break; default: break; } return super.onOptionsItemSelected(item); } public boolean isSDCardMounted() { return Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED); } public void checkStorageDir() { if (isSDCardMounted()) { File directory = new File(DEFAULT_DIR); if (!directory.exists()) { directory.mkdir(); } } } public boolean checkSaveEnv() { if (!isSDCardMounted()) { Toast.makeText(this, "找不到 SDCard !", Toast.LENGTH_LONG).show(); return false; } if ("".equals(mMDReader.getContent())) { Toast.makeText(this, "没有内容,无法保存 !", Toast.LENGTH_LONG).show(); return false; } return true; } public void saveAsMardown() { if (!checkSaveEnv()) { return; } String filepath = DEFAULT_DIR + File.separator + mMDReader.getTitle() + ".md"; try { BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filepath), "UTF-8")); writer.write(mMDReader.getContent()); writer.close(); } catch (IOException e) { e.printStackTrace(); } Toast.makeText(this, "成功保存到:" + filepath, Toast.LENGTH_LONG).show(); } public void saveAsRawContent() { if (!checkSaveEnv()) { return; } String filepath = DEFAULT_DIR + File.separator + mMDReader.getTitle() + ".txt"; try { BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filepath), "UTF-8")); writer.write(mMDReader.getRawContent()); writer.close(); } catch (IOException e) { e.printStackTrace(); } Toast.makeText(this, "成功保存到:" + filepath, Toast.LENGTH_LONG).show(); } public void saveAsBitmap() { if (!checkSaveEnv()) { return; } String filepath = DEFAULT_DIR + File.separator + mMDReader.getTitle() + ".jpg"; try { FileOutputStream stream = new FileOutputStream(filepath); Bitmap bitmap = createBitmap(mRootView); if (bitmap != null) { bitmap.compress(CompressFormat.JPEG, 100, stream); Toast.makeText(this, "成功保存到:" + filepath, Toast.LENGTH_LONG).show(); } stream.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public static Bitmap createBitmap(ScrollView v) { int width = 0, height = 0; for (int i = 0; i < v.getChildCount(); i++) { width += v.getChildAt(i).getWidth(); height += v.getChildAt(i).getHeight(); } Bitmap bitmap = Bitmap.createBitmap(width, height, Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); v.draw(canvas); return bitmap; } public static Bitmap createBitmap(View v) { v.setDrawingCacheEnabled(true); v.buildDrawingCache(); Bitmap bitmap = Bitmap.createBitmap(v.getDrawingCache()); v.setDrawingCacheEnabled(false); return bitmap; } }