1*90c8c64dSAndroid Build Coastguard Worker /*
2*90c8c64dSAndroid Build Coastguard Worker * Copyright 2013 The Android Open Source Project
3*90c8c64dSAndroid Build Coastguard Worker *
4*90c8c64dSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*90c8c64dSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*90c8c64dSAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*90c8c64dSAndroid Build Coastguard Worker *
8*90c8c64dSAndroid Build Coastguard Worker *     http://www.apache.org/licenses/LICENSE-2.0
9*90c8c64dSAndroid Build Coastguard Worker *
10*90c8c64dSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*90c8c64dSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*90c8c64dSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*90c8c64dSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*90c8c64dSAndroid Build Coastguard Worker * limitations under the License.
15*90c8c64dSAndroid Build Coastguard Worker */
16*90c8c64dSAndroid Build Coastguard Worker /*
17*90c8c64dSAndroid Build Coastguard Worker  * Copyright 2013 The Android Open Source Project
18*90c8c64dSAndroid Build Coastguard Worker  *
19*90c8c64dSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
20*90c8c64dSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
21*90c8c64dSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
22*90c8c64dSAndroid Build Coastguard Worker  *
23*90c8c64dSAndroid Build Coastguard Worker  *     http://www.apache.org/licenses/LICENSE-2.0
24*90c8c64dSAndroid Build Coastguard Worker  *
25*90c8c64dSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
26*90c8c64dSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
27*90c8c64dSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
28*90c8c64dSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
29*90c8c64dSAndroid Build Coastguard Worker  * limitations under the License.
30*90c8c64dSAndroid Build Coastguard Worker  */
31*90c8c64dSAndroid Build Coastguard Worker 
32*90c8c64dSAndroid Build Coastguard Worker package com.example.android.common.logger;
33*90c8c64dSAndroid Build Coastguard Worker 
34*90c8c64dSAndroid Build Coastguard Worker import android.graphics.Typeface;
35*90c8c64dSAndroid Build Coastguard Worker import android.os.Bundle;
36*90c8c64dSAndroid Build Coastguard Worker import android.support.v4.app.Fragment;
37*90c8c64dSAndroid Build Coastguard Worker import android.text.Editable;
38*90c8c64dSAndroid Build Coastguard Worker import android.text.TextWatcher;
39*90c8c64dSAndroid Build Coastguard Worker import android.view.Gravity;
40*90c8c64dSAndroid Build Coastguard Worker import android.view.LayoutInflater;
41*90c8c64dSAndroid Build Coastguard Worker import android.view.View;
42*90c8c64dSAndroid Build Coastguard Worker import android.view.ViewGroup;
43*90c8c64dSAndroid Build Coastguard Worker import android.widget.ScrollView;
44*90c8c64dSAndroid Build Coastguard Worker 
45*90c8c64dSAndroid Build Coastguard Worker /**
46*90c8c64dSAndroid Build Coastguard Worker  * Simple fraggment which contains a LogView and uses is to output log data it receives
47*90c8c64dSAndroid Build Coastguard Worker  * through the LogNode interface.
48*90c8c64dSAndroid Build Coastguard Worker  */
49*90c8c64dSAndroid Build Coastguard Worker public class LogFragment extends Fragment {
50*90c8c64dSAndroid Build Coastguard Worker 
51*90c8c64dSAndroid Build Coastguard Worker     private LogView mLogView;
52*90c8c64dSAndroid Build Coastguard Worker     private ScrollView mScrollView;
53*90c8c64dSAndroid Build Coastguard Worker 
LogFragment()54*90c8c64dSAndroid Build Coastguard Worker     public LogFragment() {}
55*90c8c64dSAndroid Build Coastguard Worker 
inflateViews()56*90c8c64dSAndroid Build Coastguard Worker     public View inflateViews() {
57*90c8c64dSAndroid Build Coastguard Worker         mScrollView = new ScrollView(getActivity());
58*90c8c64dSAndroid Build Coastguard Worker         ViewGroup.LayoutParams scrollParams = new ViewGroup.LayoutParams(
59*90c8c64dSAndroid Build Coastguard Worker                 ViewGroup.LayoutParams.MATCH_PARENT,
60*90c8c64dSAndroid Build Coastguard Worker                 ViewGroup.LayoutParams.MATCH_PARENT);
61*90c8c64dSAndroid Build Coastguard Worker         mScrollView.setLayoutParams(scrollParams);
62*90c8c64dSAndroid Build Coastguard Worker 
63*90c8c64dSAndroid Build Coastguard Worker         mLogView = new LogView(getActivity());
64*90c8c64dSAndroid Build Coastguard Worker         ViewGroup.LayoutParams logParams = new ViewGroup.LayoutParams(scrollParams);
65*90c8c64dSAndroid Build Coastguard Worker         logParams.height = ViewGroup.LayoutParams.WRAP_CONTENT;
66*90c8c64dSAndroid Build Coastguard Worker         mLogView.setLayoutParams(logParams);
67*90c8c64dSAndroid Build Coastguard Worker         mLogView.setClickable(true);
68*90c8c64dSAndroid Build Coastguard Worker         mLogView.setFocusable(true);
69*90c8c64dSAndroid Build Coastguard Worker         mLogView.setTypeface(Typeface.MONOSPACE);
70*90c8c64dSAndroid Build Coastguard Worker 
71*90c8c64dSAndroid Build Coastguard Worker         // Want to set padding as 16 dips, setPadding takes pixels.  Hooray math!
72*90c8c64dSAndroid Build Coastguard Worker         int paddingDips = 16;
73*90c8c64dSAndroid Build Coastguard Worker         double scale = getResources().getDisplayMetrics().density;
74*90c8c64dSAndroid Build Coastguard Worker         int paddingPixels = (int) ((paddingDips * (scale)) + .5);
75*90c8c64dSAndroid Build Coastguard Worker         mLogView.setPadding(paddingPixels, paddingPixels, paddingPixels, paddingPixels);
76*90c8c64dSAndroid Build Coastguard Worker         mLogView.setCompoundDrawablePadding(paddingPixels);
77*90c8c64dSAndroid Build Coastguard Worker 
78*90c8c64dSAndroid Build Coastguard Worker         mLogView.setGravity(Gravity.BOTTOM);
79*90c8c64dSAndroid Build Coastguard Worker         mLogView.setTextAppearance(getActivity(), android.R.style.TextAppearance_Holo_Medium);
80*90c8c64dSAndroid Build Coastguard Worker 
81*90c8c64dSAndroid Build Coastguard Worker         mScrollView.addView(mLogView);
82*90c8c64dSAndroid Build Coastguard Worker         return mScrollView;
83*90c8c64dSAndroid Build Coastguard Worker     }
84*90c8c64dSAndroid Build Coastguard Worker 
85*90c8c64dSAndroid Build Coastguard Worker     @Override
onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)86*90c8c64dSAndroid Build Coastguard Worker     public View onCreateView(LayoutInflater inflater, ViewGroup container,
87*90c8c64dSAndroid Build Coastguard Worker                              Bundle savedInstanceState) {
88*90c8c64dSAndroid Build Coastguard Worker 
89*90c8c64dSAndroid Build Coastguard Worker         View result = inflateViews();
90*90c8c64dSAndroid Build Coastguard Worker 
91*90c8c64dSAndroid Build Coastguard Worker         mLogView.addTextChangedListener(new TextWatcher() {
92*90c8c64dSAndroid Build Coastguard Worker             @Override
93*90c8c64dSAndroid Build Coastguard Worker             public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
94*90c8c64dSAndroid Build Coastguard Worker 
95*90c8c64dSAndroid Build Coastguard Worker             @Override
96*90c8c64dSAndroid Build Coastguard Worker             public void onTextChanged(CharSequence s, int start, int before, int count) {}
97*90c8c64dSAndroid Build Coastguard Worker 
98*90c8c64dSAndroid Build Coastguard Worker             @Override
99*90c8c64dSAndroid Build Coastguard Worker             public void afterTextChanged(Editable s) {
100*90c8c64dSAndroid Build Coastguard Worker                 mScrollView.fullScroll(ScrollView.FOCUS_DOWN);
101*90c8c64dSAndroid Build Coastguard Worker             }
102*90c8c64dSAndroid Build Coastguard Worker         });
103*90c8c64dSAndroid Build Coastguard Worker         return result;
104*90c8c64dSAndroid Build Coastguard Worker     }
105*90c8c64dSAndroid Build Coastguard Worker 
getLogView()106*90c8c64dSAndroid Build Coastguard Worker     public LogView getLogView() {
107*90c8c64dSAndroid Build Coastguard Worker         return mLogView;
108*90c8c64dSAndroid Build Coastguard Worker     }
109*90c8c64dSAndroid Build Coastguard Worker }