package com.javalive09.codebag.logger;
import android.graphics.Typeface;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ScrollView;
import com.javalive09.codebag.EntryTreeActivity;
import com.javalive09.codebag.R;
/**
* Created by peter on 2017/3/22.
*/
public class LogFragment extends Fragment {
private LogView mLogView;
private ScrollView mScrollView;
private boolean autoScroll;
private static final long MAX = 20; //M
public LogFragment() {
}
public View inflateViews() {
ViewGroup.LayoutParams scrollParams = new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT);
mScrollView.setLayoutParams(scrollParams);
mLogView = new LogView(getActivity());
ViewGroup.LayoutParams logParams = new ViewGroup.LayoutParams(scrollParams);
logParams.height = ViewGroup.LayoutParams.WRAP_CONTENT;
mLogView.setLayoutParams(logParams);
mLogView.setClickable(true);
mLogView.setFocusable(true);
mLogView.setTypeface(Typeface.MONOSPACE);
// Want to set padding as 16 dips, setPadding takes pixels. Hooray math!
int paddingDips = 16;
double scale = getResources().getDisplayMetrics().density;
int paddingPixels = (int) ((paddingDips * (scale)) + .5);
mLogView.setPadding(paddingPixels, paddingPixels, paddingPixels, paddingPixels);
mLogView.setCompoundDrawablePadding(paddingPixels);
mLogView.setGravity(Gravity.BOTTOM);
mLogView.setTextAppearance(getActivity(), android.R.style.TextAppearance_Holo_Small);
mScrollView.addView(mLogView);
return mScrollView;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mScrollView = (ScrollView) inflater.inflate(R.layout.scroll_view, container, false);
mScrollView.setBackgroundResource(R.color.log_bg_color);
View result = inflateViews();
mLogView.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if(autoScroll) {
mScrollView.post(scrollToBottom);
}
int len = mLogView.getText().toString().getBytes().length;
int currentLen = len /1024 / 1024; //M
if(currentLen > ((EntryTreeActivity)getActivity()).getMaxLog()) {
clear();
}
}
});
return result;
}
private Runnable scrollToBottom = new Runnable() {
@Override
public void run() {
mScrollView.fullScroll(ScrollView.FOCUS_DOWN);
}
};
public void setAutoScroll(boolean autoScroll) {
this.autoScroll = autoScroll;
}
public LogView getLogView() {
return mLogView;
}
public void show(boolean show) {
if (show) {
getView().setVisibility(View.VISIBLE);
} else {
getView().setVisibility(View.GONE);
}
}
public void clear() {
mLogView.setText("---");
}
}