Commit | Line | Data |
---|---|---|
64968418 NR |
1 | package be.nikiroo.fanfix.reader.android; |
2 | ||
3 | import android.app.Activity; | |
a18ba536 | 4 | import android.app.AlertDialog; |
64968418 | 5 | import android.app.FragmentTransaction; |
a18ba536 NR |
6 | import android.content.Context; |
7 | import android.content.DialogInterface; | |
64968418 NR |
8 | import android.os.Bundle; |
9 | import android.os.Environment; | |
a18ba536 | 10 | import android.text.InputType; |
64968418 NR |
11 | import android.view.View; |
12 | import android.widget.EditText; | |
13 | ||
14 | import java.io.File; | |
15 | import java.io.IOException; | |
16 | import java.net.URL; | |
17 | ||
18 | import be.nikiroo.fanfix.Instance; | |
19 | import be.nikiroo.fanfix.data.MetaData; | |
20 | import be.nikiroo.fanfix.reader.BasicReader; | |
21 | import be.nikiroo.fanfix.reader.Reader; | |
22 | import be.nikiroo.utils.TraceHandler; | |
23 | ||
24 | public class AndroidReaderActivity extends Activity implements | |
25 | AndroidReaderBook.OnFragmentInteractionListener { | |
26 | private static Reader reader = null; | |
27 | ||
28 | @Override | |
29 | protected void onCreate(Bundle savedInstanceState) { | |
a18ba536 | 30 | reader = config(); |
64968418 NR |
31 | super.onCreate(savedInstanceState); |
32 | setContentView(R.layout.activity_main); | |
33 | } | |
34 | ||
a18ba536 NR |
35 | @Override |
36 | protected void onStart() { | |
37 | super.onStart(); | |
38 | refresh(); | |
39 | } | |
64968418 | 40 | |
a18ba536 NR |
41 | private void refresh() { |
42 | AndroidReaderGroup group = new AndroidReaderGroup(); | |
64968418 NR |
43 | |
44 | FragmentTransaction trans = getFragmentManager().beginTransaction(); | |
a18ba536 | 45 | trans.replace(R.id.Main_pnlStories, group); |
64968418 NR |
46 | trans.commit(); |
47 | getFragmentManager().executePendingTransactions(); | |
48 | ||
a18ba536 | 49 | group.fill(reader.getLibrary().getList(), reader); |
64968418 NR |
50 | } |
51 | ||
a18ba536 NR |
52 | public void onAdd(View view) { |
53 | final View root = findViewById(R.id.Main); | |
54 | ||
55 | ask(this, | |
56 | "Import new story", | |
57 | "Enter the story URL (the program will then download it -- the interface will not be usable until it is downloaded", | |
58 | "Download", new AnswerListener() { | |
59 | @Override | |
60 | public void onAnswer(final String answer) { | |
61 | root.setEnabled(false); | |
62 | new Thread(new Runnable() { | |
63 | @Override | |
64 | public void run() { | |
65 | try { | |
66 | URL url = new URL(answer); | |
67 | reader.getLibrary().imprt(url, null); | |
68 | } catch (Throwable e) { | |
69 | // TODO: show error message correctly | |
70 | String mess = ""; | |
71 | for (String tab = ""; e != null | |
72 | && e != e.getCause(); e = e | |
73 | .getCause()) { | |
74 | mess += tab + "[" | |
75 | + e.getClass().getSimpleName() | |
76 | + "] " + e.getMessage() + "\n"; | |
77 | tab += "\t"; | |
78 | } | |
79 | ||
80 | final String messf = mess; | |
81 | AndroidReaderActivity.this | |
82 | .runOnUiThread(new Runnable() { | |
83 | @Override | |
84 | public void run() { | |
85 | ask(AndroidReaderActivity.this, | |
86 | "Error", | |
87 | "Cannot import URL: \n" | |
88 | + messf, | |
89 | "OK", null); | |
90 | } | |
91 | }); | |
92 | ||
93 | } | |
94 | ||
95 | AndroidReaderActivity.this | |
96 | .runOnUiThread(new Runnable() { | |
97 | @Override | |
98 | public void run() { | |
99 | refresh(); | |
100 | root.setEnabled(true); | |
101 | } | |
102 | }); | |
103 | } | |
104 | }).start(); | |
64968418 | 105 | } |
a18ba536 | 106 | }); |
64968418 | 107 | |
a18ba536 NR |
108 | /* |
109 | * Intent intent = new Intent(AndroidReaderActivity.this, SayIt.class); | |
110 | * intent.putExtra(SayIt.MESSAGE, message); startActivity(intent); | |
111 | */ | |
64968418 NR |
112 | } |
113 | ||
114 | @Override | |
115 | public void onFragmentInteraction(MetaData meta) { | |
116 | AndroidReader reader = new AndroidReader(this); | |
117 | try { | |
118 | reader.openExternal(Instance.getLibrary(), meta.getLuid()); | |
119 | } catch (IOException e) { | |
120 | e.printStackTrace(); | |
121 | } | |
122 | } | |
123 | ||
a18ba536 | 124 | private Reader config() { |
64968418 | 125 | if (reader != null) { |
a18ba536 | 126 | return reader; |
64968418 NR |
127 | } |
128 | ||
129 | String internal = getExternalFilesDir(null).toString(); | |
130 | File user = Environment | |
131 | .getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS); | |
132 | ||
133 | try { | |
134 | File parent = user.getParentFile(); | |
135 | if (parent.exists() || parent.mkdirs()) { | |
136 | File test = new File(parent, "test"); | |
137 | if (test.exists() || (test.createNewFile() && test.delete())) { | |
138 | user = parent; | |
139 | } | |
140 | } | |
141 | } catch (Exception e) { | |
142 | // Fall back to Documents/Books | |
143 | } | |
144 | ||
145 | System.setProperty("DEBUG", "1"); | |
146 | System.setProperty("fanfix.home", internal); | |
147 | System.setProperty("fanfix.libdir", new File(user, "Books").toString()); | |
148 | ||
149 | Instance.resetConfig(false); | |
150 | Instance.setTraceHandler(new TraceHandler(true, true, 2)); | |
151 | ||
152 | BasicReader.setDefaultReaderType(Reader.ReaderType.ANDROID); | |
a18ba536 NR |
153 | return BasicReader.getReader(); |
154 | } | |
155 | ||
156 | public static void ask(Context context, String title, String message, | |
157 | String okMessage, final AnswerListener listener) { | |
158 | final EditText input = new EditText(context); | |
159 | input.setFocusable(true); | |
160 | input.setInputType(InputType.TYPE_CLASS_TEXT); | |
161 | ||
162 | AlertDialog.Builder alert = new AlertDialog.Builder(context); | |
163 | alert.setTitle(title); | |
164 | alert.setMessage(message); | |
165 | alert.setCancelable(true); | |
166 | alert.setView(input); | |
167 | ||
168 | if (listener != null) { | |
169 | alert.setPositiveButton(okMessage, | |
170 | new DialogInterface.OnClickListener() { | |
171 | @Override | |
172 | public void onClick(DialogInterface dialog, int which) { | |
173 | listener.onAnswer(input.getText().toString()); | |
174 | } | |
175 | }); | |
176 | ||
177 | alert.setOnCancelListener(new DialogInterface.OnCancelListener() { | |
178 | @Override | |
179 | public void onCancel(DialogInterface dialog) { | |
180 | listener.onAnswer(null); | |
181 | } | |
182 | }); | |
183 | } | |
184 | ||
185 | alert.show(); | |
186 | } | |
187 | ||
188 | private interface AnswerListener { | |
189 | public void onAnswer(String answer); | |
64968418 NR |
190 | } |
191 | } |