package org.softeg.slartus.forpdaplus.fragments;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.Nullable;
import android.text.Html;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
import com.afollestad.materialdialogs.MaterialDialog;
import org.softeg.slartus.forpdaplus.App;
import org.softeg.slartus.forpdaplus.IntentActivity;
import org.softeg.slartus.forpdaplus.MainActivity;
import org.softeg.slartus.forpdaplus.R;
import org.softeg.slartus.forpdaplus.classes.AdvWebView;
import org.softeg.slartus.forpdaplus.classes.HtmlBuilder;
import org.softeg.slartus.forpdaplus.classes.common.ExtUrl;
import org.softeg.slartus.forpdaplus.common.AppLog;
import org.softeg.slartus.forpdaplus.db.DbHelper;
import org.softeg.slartus.forpdaplus.db.NotesTable;
import org.softeg.slartus.forpdaplus.emotic.Smiles;
import org.softeg.slartus.forpdaplus.notes.Note;
import org.softeg.slartus.forpdaplus.prefs.HtmlPreferences;
/**
* Created by radiationx on 17.11.15.
*/
public class NoteFragment extends GeneralFragment {
@Override
public boolean closeTab() {
return false;
}
private Handler mHandler = new Handler();
private static final String NOTE_ID_KEY = "NoteId";
private String m_Id;
private String m_TopicId;
private AdvWebView webView;
private TableLayout infoTable;
private View view;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setArrow();
}
@Override
public void onPause() {
super.onPause();
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.note_view, container, false);
//createActionMenu();
infoTable = (TableLayout) findViewById(R.id.infoTable);
webView = (AdvWebView) findViewById(R.id.webView);
Bundle extras = getArguments();
m_Id = extras.getString(NOTE_ID_KEY);
loadData();
return view;
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString(NOTE_ID_KEY, m_Id);
}
/*
@Override
protected void onRestoreInstanceState(Bundle outState) {
super.onRestoreInstanceState(outState);
m_Id = outState.getString(NOTE_ID_KEY);
}
*/
@Override
public void onResume() {
super.onResume();
setArrow();
}
public static NoteFragment newInstance(Bundle args){
NoteFragment fragment = new NoteFragment();
fragment.setArguments(args);
return fragment;
}
public static void showNote(String id) {
Bundle args = new Bundle();
args.putString(NOTE_ID_KEY, id);
MainActivity.addTab(App.getContext().getString(R.string.note), NOTE_ID_KEY + id, newInstance(args));
}
private void loadData() {
new LoadPageTask(getContext()).execute();
}
private void fillData(final Note note) {
try {
setTitle(DbHelper.getDateString(note.Date));
infoTable.removeAllViews();
TableLayout.LayoutParams rowparams = new TableLayout.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT,
TableRow.LayoutParams.WRAP_CONTENT);
TableRow.LayoutParams textviewparams = new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT,
TableRow.LayoutParams.WRAP_CONTENT);
if (!TextUtils.isEmpty(note.Title)) {
addRow(getString(R.string.theme), note.Title, null, rowparams, textviewparams);
}
if (!TextUtils.isEmpty(note.Topic)) {
addRow(getString(R.string.topic), note.getTopicLink(), note.getTopicUrl(), rowparams, textviewparams);
}
if (!TextUtils.isEmpty(note.User)) {
addRow(getString(R.string.user), note.getUserLink(), note.getUserUrl(), rowparams, textviewparams);
}
if (!TextUtils.isEmpty(note.Url)) {
addRow(getString(R.string.link), note.getUrlLink(), note.Url, rowparams, textviewparams);
}
webView.loadDataWithBaseURL("http://4pda.ru/forum/", transformChatBody(note.Body), "text/html", "UTF-8", null);
} catch (Throwable ex) {
AppLog.e(getMainActivity(), ex);
}
}
private void addRow(String title, String text, final String url,
TableLayout.LayoutParams rowparams, TableRow.LayoutParams textviewparams) {
TableRow row = new TableRow(getContext());
TextView textView = createFirtsTextView();
textView.setText(title);
row.addView(textView, textviewparams);
infoTable.addView(row, rowparams);
row = new TableRow(getContext());
TextView textView2 = createSecondTextView();
textView2.setText(Html.fromHtml(text));
textView2.setEllipsize(null);
textView2.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
if (!TextUtils.isEmpty(url))
IntentActivity.tryShowUrl(getMainActivity(), mHandler, url, true, false);
}
});
textView2.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
if (!TextUtils.isEmpty(url)) {
ExtUrl.showSelectActionDialog(mHandler, getMainActivity(), url);
}
return true;
}
});
row.addView(textView2, textviewparams);
infoTable.addView(row, rowparams);
}
private String transformChatBody(String chatBody) {
HtmlBuilder htmlBuilder = new HtmlBuilder();
htmlBuilder.beginHtml(getString(R.string.note));
htmlBuilder.append("<div class=\"emoticons\">");
chatBody = HtmlPreferences.modifyBody(chatBody, Smiles.getSmilesDict());
htmlBuilder.append(chatBody);
htmlBuilder.append("</div>");
htmlBuilder.endBody();
htmlBuilder.endHtml();
return htmlBuilder.getHtml().toString();
}
private TextView createFirtsTextView() {
return (TextView) getMainActivity().getLayoutInflater().inflate(R.layout.note_first_textview, null);
}
private TextView createSecondTextView() {
return (TextView) getMainActivity().getLayoutInflater().inflate(R.layout.note_second_textview, null);
}
public class LoadPageTask extends AsyncTask<String, String, Note> {
private final MaterialDialog dialog;
public LoadPageTask(Context context) {
dialog = new MaterialDialog.Builder(context)
.progress(true,0)
.cancelable(false)
.content(getString(R.string.loading))
.build();
}
@Override
protected void onProgressUpdate(String... progress) {
this.dialog.setMessage(progress[0]);
}
private Throwable ex;
@Override
protected Note doInBackground(String... params) {
try {
return NotesTable.getNote(m_Id);
} catch (Throwable e) {
ex = e;
return null;
}
}
protected void onPreExecute() {
try {
this.dialog.show();
} catch (Exception ex) {
AppLog.e(null, ex);
this.cancel(true);
}
}
protected void onCancelled() {
super.onCancelled();
}
// can use UI thread here
protected void onPostExecute(final Note note) {
if (this.dialog.isShowing()) {
this.dialog.dismiss();
}
if (note != null) {
fillData(note);
} else {
if (ex != null)
AppLog.e(getMainActivity(), ex, new Runnable() {
@Override
public void run() {
loadData();
}
});
}
}
}
}