1717import com .google .android .material .appbar .MaterialToolbar ;
1818import java .io .BufferedReader ;
1919import java .io .File ;
20- import java .io .FileInputStream ;
2120import java .io .InputStream ;
2221import java .io .InputStreamReader ;
2322import java .io .IOException ;
24- import fi . iki . elonen . NanoHTTPD ;
23+ import org . xedox . utils . LocalWebServer ;
2524import org .xedox .utils .dialog .ErrorDialog ;
2625import org .xedox .utils .view .WebViewX ;
2726
@@ -33,9 +32,9 @@ public class PreviewActivity extends AppCompatActivity {
3332 private SwipeRefreshLayout swipeRefresh ;
3433
3534 private boolean isDesktopMode = false ;
36- private String currentUrl = null ;
37- private LocalWebServer localServer = null ;
38- private String localServerUrl = null ;
35+ private String currentUrl ;
36+ private LocalWebServer localServer ;
37+ private String localServerUrl ;
3938
4039 @ Override
4140 protected void onCreate (Bundle savedInstanceState ) {
@@ -58,31 +57,34 @@ protected void onCreate(Bundle savedInstanceState) {
5857 settings .setAllowFileAccess (true );
5958 settings .setMixedContentMode (WebSettings .MIXED_CONTENT_ALWAYS_ALLOW );
6059
61- webView .setWebViewClient (new WebViewClient () {
62- @ Override
63- public void onPageStarted (WebView view , String url , Bitmap favicon ) {
64- currentUrl = url ;
65- progress .setVisibility (ProgressBar .VISIBLE );
66- }
67-
68- @ Override
69- public void onPageFinished (WebView view , String url ) {
70- currentUrl = url ;
71- progress .setVisibility (ProgressBar .GONE );
72- }
73- });
60+ webView .setWebViewClient (
61+ new WebViewClient () {
62+ @ Override
63+ public void onPageStarted (WebView view , String url , Bitmap favicon ) {
64+ currentUrl = url ;
65+ progress .setVisibility (ProgressBar .VISIBLE );
66+ }
67+
68+ @ Override
69+ public void onPageFinished (WebView view , String url ) {
70+ currentUrl = url ;
71+ progress .setVisibility (ProgressBar .GONE );
72+ swipeRefresh .setRefreshing (false );
73+ }
74+ });
7475
75- webView .setWebChromeClient (new WebChromeClient () {
76- @ Override
77- public void onProgressChanged (WebView view , int newProgress ) {
78- progress .setProgress (newProgress );
79- if (newProgress >= 100 ) {
80- progress .setVisibility (ProgressBar .GONE );
81- } else {
82- progress .setVisibility (ProgressBar .VISIBLE );
83- }
84- }
85- });
76+ webView .setWebChromeClient (
77+ new WebChromeClient () {
78+ @ Override
79+ public void onProgressChanged (WebView view , int newProgress ) {
80+ progress .setProgress (newProgress );
81+ if (newProgress >= 100 ) {
82+ progress .setVisibility (ProgressBar .GONE );
83+ } else {
84+ progress .setVisibility (ProgressBar .VISIBLE );
85+ }
86+ }
87+ });
8688
8789 Intent intent = getIntent ();
8890 String indexHtml = intent .getStringExtra ("index.html" );
@@ -107,10 +109,10 @@ public void onProgressChanged(WebView view, int newProgress) {
107109 }
108110 }
109111
110- swipeRefresh .setOnRefreshListener (() -> {
111- webView . reload ();
112- swipeRefresh . setRefreshing ( false );
113- });
112+ swipeRefresh .setOnRefreshListener (
113+ () -> {
114+ webView . reload ( );
115+ });
114116
115117 setWebViewMode (false );
116118
@@ -161,15 +163,15 @@ private void setWebViewMode(boolean desktopMode) {
161163 WebSettings settings = webView .getSettings ();
162164 if (desktopMode ) {
163165 settings .setUserAgentString (
164- "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 " +
165- "(KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" );
166+ "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 "
167+ + "(KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" );
166168 settings .setUseWideViewPort (true );
167169 settings .setLoadWithOverviewMode (true );
168170 webView .setInitialScale (100 );
169171 } else {
170172 settings .setUserAgentString (
171- "Mozilla/5.0 (Linux; Android 10) AppleWebKit/537.36 " +
172- "(KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36" );
173+ "Mozilla/5.0 (Linux; Android 10) AppleWebKit/537.36 "
174+ + "(KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36" );
173175 settings .setUseWideViewPort (false );
174176 settings .setLoadWithOverviewMode (false );
175177 webView .setInitialScale (0 );
@@ -178,7 +180,7 @@ private void setWebViewMode(boolean desktopMode) {
178180
179181 private void loadHtmlFromUri (Uri uri ) {
180182 try (InputStream is = getContentResolver ().openInputStream (uri );
181- BufferedReader br = new BufferedReader (new InputStreamReader (is ))) {
183+ BufferedReader br = new BufferedReader (new InputStreamReader (is ))) {
182184 StringBuilder buffer = new StringBuilder ();
183185 String line ;
184186 while ((line = br .readLine ()) != null ) {
@@ -212,92 +214,4 @@ private void stopLocalServer() {
212214 localServer = null ;
213215 }
214216 }
215-
216- public static class LocalWebServer extends NanoHTTPD {
217- private final File rootDir ;
218-
219- public LocalWebServer (int port , File rootDir ) {
220- super (port );
221- this .rootDir = rootDir ;
222- }
223-
224- @ Override
225- public Response serve (IHTTPSession session ) {
226- try {
227- String uri = session .getUri ();
228- File file = new File (rootDir , uri );
229- if (!file .exists ()) {
230- return newFixedLengthResponse (Response .Status .NOT_FOUND , "text/plain" , "404 Not Found" );
231- }
232- FileInputStream fis = new FileInputStream (file );
233- String mime = getMimeTypeForFile (uri );
234- return newChunkedResponse (Response .Status .OK , mime , fis );
235- } catch (Exception e ) {
236- return newFixedLengthResponse (Response .Status .INTERNAL_ERROR , "text/plain" , "Error: " + e .getMessage ());
237- }
238- }
239- }
240- } webView = findViewById (R .id .web_view );
241- progress = findViewById (R .id .progress );
242- swipeRefresh = findViewById (R .id .refresh_layout );
243- setSupportActionBar (toolbar );
244- getSupportActionBar ().setDisplayHomeAsUpEnabled (true );
245- webView .setProgressBar (progress );
246- webView .addOnPageStartedListener (
247- (v , url , ic ) -> {
248-
249- String str = url .substring (url .lastIndexOf ("/" )+1 , url .length ());
250- getSupportActionBar ().setSubtitle (str );
251- });
252-
253- Intent intent = getIntent ();
254- String indexHtml = intent .getStringExtra ("index.html" );
255-
256- if (indexHtml != null && !indexHtml .isBlank ()) {
257- webView .loadUrl ("file://" + indexHtml );
258- } else if (Intent .ACTION_VIEW .equals (intent .getAction ())) {
259- Uri data = intent .getData ();
260- if (data != null ) {
261- loadHtmlFromUri (data );
262- } else {
263- webView .loadData ("File found'n" , "text/html" , "UTF-8" );
264- }
265- }
266- swipeRefresh .setOnRefreshListener (
267- () -> {
268- webView .reload ();
269- swipeRefresh .setRefreshing (false );
270- });
271- } catch (Exception err ) {
272- ErrorDialog .show (this , err );
273- }
274- }
275-
276- @ Override
277- public boolean onOptionsItemSelected (MenuItem item ) {
278- int id = item .getItemId ();
279- if (id == android .R .id .home ) {
280- finish ();
281- }
282- return super .onOptionsItemSelected (item );
283- }
284-
285- @ Override
286- public void handleBackPressed () {
287- finish ();
288- }
289-
290- private void loadHtmlFromUri (Uri uri ) {
291- try (InputStream is = getContentResolver ().openInputStream (uri );
292- BufferedReader br = new BufferedReader (new InputStreamReader (is ))) {
293- StringBuilder buffer = new StringBuilder ();
294- String line ;
295- while ((line = br .readLine ()) != null ) {
296- buffer .append (line ).append ("\n " );
297- }
298- webView .loadData (buffer .toString (), "text/html" , "UTF-8" );
299- } catch (Exception e ) {
300- webView .loadData ("Ошибка загрузки: " + e .getMessage (), "text/html" , "UTF-8" );
301- }
302- }
303217}
0 commit comments