File: LogcatTextWriter.cs

package info (click to toggle)
mono-reference-assemblies 3.12.1%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 604,240 kB
  • ctags: 625,505
  • sloc: cs: 3,967,741; xml: 2,793,081; ansic: 418,042; java: 60,435; sh: 14,833; makefile: 11,576; sql: 7,956; perl: 1,467; cpp: 1,446; yacc: 1,203; python: 598; asm: 422; sed: 16; php: 1
file content (79 lines) | stat: -rw-r--r-- 1,399 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#if MONODROID

using System;
using System.IO;
using System.Text;
using System.Runtime.InteropServices;

namespace System.IO {

	class LogcatTextWriter : TextWriter {

		const string LibLog = "/system/lib/liblog.so";

		TextWriter stdout;
		readonly string appname;
		StringBuilder line = new StringBuilder ();

		public LogcatTextWriter (string appname, TextWriter stdout)
		{
			this.appname = appname;
			this.stdout = stdout;
		}

		public override Encoding Encoding {
			get {return Encoding.UTF8;}
		}

		public override void Write (string s)
		{
			if (s != null)
				foreach (char c in s)
					Write (c);
		}

		public override void Write (char value)
		{
			if (value == '\n')
				WriteLine ();
			else
				line.Append (value);
		}

		public override void WriteLine ()
		{
			var o = line.ToString ();
			line.Clear ();

			Log (LogLevel.Info, appname, o);
			stdout.WriteLine (o);
		}

		enum LogLevel {
			Unknown,
			Default,
			Verbose,
			Debug,
			Info,
			Warn,
			Error,
			Fatal,
			Silent
		}

		public static bool IsRunningOnAndroid ()
		{
			return File.Exists (LibLog);
		}

		[DllImport (LibLog)]
		static extern void __android_log_print (LogLevel level, string appname, string format, string args, IntPtr zero);

		static void Log (LogLevel level, string appname, string log)
		{
			__android_log_print (level, appname, "%s", log, IntPtr.Zero);
		}
	}
}

#endif  // MONODROID