11package org .xedox .webaide ;
22
33import android .os .Bundle ;
4- import android .os .Handler ;
5- import android .os .Looper ;
64import android .view .Menu ;
75import android .view .MenuItem ;
86import android .widget .ProgressBar ;
9- import androidx .appcompat .app .AppCompatActivity ;
107import androidx .appcompat .widget .SearchView ;
118import androidx .fragment .app .Fragment ;
9+ import androidx .fragment .app .FragmentManager ;
1210import com .google .android .material .appbar .MaterialToolbar ;
1311import com .google .android .material .tabs .TabLayout ;
1412import org .xedox .utils .BaseActivity ;
13+ import org .xedox .utils .dialog .ErrorDialog ;
14+ import org .xedox .utils .dialog .LoadingDialog ;
1515import org .xedox .webaide .devtools .PreviewFragment ;
1616import org .xedox .webaide .devtools .SourceFragment ;
17+ import org .xedox .webaide .devtools .WebManager ;
18+ import java .io .IOException ;
1719
1820public class DevToolsActivity extends BaseActivity
19- implements SearchView .OnQueryTextListener , TabLayout .OnTabSelectedListener {
21+ implements SearchView .OnQueryTextListener ,
22+ TabLayout .OnTabSelectedListener ,
23+ WebManager .OnDownloadListener {
2024
2125 private MaterialToolbar toolbar ;
2226 private TabLayout tabLayout ;
27+ private WebManager webManager ;
28+ private LoadingDialog loadingDialog ;
2329 private ProgressBar progress ;
30+ private String currentUrl ;
2431
2532 private PreviewFragment previewFragment ;
2633 private SourceFragment sourceFragment ;
@@ -31,8 +38,9 @@ protected void onCreate(Bundle savedInstanceState) {
3138 setContentView (R .layout .activity_dev_tools );
3239
3340 toolbar = findViewById (R .id .toolbar );
34- progress = findViewById (R .id .progress );
3541 tabLayout = findViewById (R .id .tab_layout );
42+ webManager = new WebManager ();
43+ progress = findViewById (R .id .progress );
3644
3745 setSupportActionBar (toolbar );
3846 if (getSupportActionBar () != null ) {
@@ -42,36 +50,106 @@ protected void onCreate(Bundle savedInstanceState) {
4250 previewFragment = PreviewFragment .newInstance (progress );
4351 sourceFragment = SourceFragment .newInstance ();
4452 tabLayout .addOnTabSelectedListener (this );
45- getSupportFragmentManager ()
46- .beginTransaction ()
47- .replace (R .id .content , previewFragment )
53+ FragmentManager fm = getSupportFragmentManager ();
54+ if (!initedFragments ) {
55+ initFragments (fm );
56+ }
57+ }
58+
59+ private boolean initedFragments = false ;
60+
61+ private void initFragments (FragmentManager fm ) {
62+ previewFragment = PreviewFragment .newInstance (progress );
63+ sourceFragment = SourceFragment .newInstance ();
64+
65+ fm .beginTransaction ()
66+ .add (R .id .content , previewFragment )
67+ .add (R .id .content , sourceFragment )
4868 .commit ();
49- new Handler (Looper .getMainLooper ())
50- .post (
69+ fm .beginTransaction ().hide (sourceFragment );
70+ }
71+
72+ private void loadUrl (String url ) {
73+ currentUrl = url ;
74+ loadingDialog =
75+ LoadingDialog .create (
76+ this ,
77+ R .string .downloading_page_content ,
5178 () -> {
52- performSearch ("https://www.example.com" );
79+ try {
80+ webManager .download (url , DevToolsActivity .this );
81+ } catch (IOException e ) {
82+ runOnUiThread (() -> ErrorDialog .show (this , e ));
83+ if (loadingDialog != null ) {
84+ loadingDialog .dismiss ();
85+ }
86+ }
5387 });
88+ loadingDialog .show ();
89+ }
90+
91+ @ Override
92+ public void onDownloadStart (int pageLength ) {
93+ runOnUiThread (
94+ () -> {
95+ if (loadingDialog != null ) {
96+ loadingDialog .setMaxProgress (pageLength );
97+ loadingDialog .updateProgress ("Starting download..." , 0 );
98+ }
99+ });
100+ }
101+
102+ @ Override
103+ public void onDownload (int downloaded , int pageLength ) {
104+ runOnUiThread (
105+ () -> {
106+ if (loadingDialog != null ) {
107+ String progressText =
108+ pageLength > 0
109+ ? String .format ("%d/%d bytes" , downloaded , pageLength )
110+ : String .format ("%d bytes" , downloaded );
111+ loadingDialog .updateProgress (progressText , downloaded );
112+ }
113+ });
114+ }
115+
116+ @ Override
117+ public void onDownloadFinished (String downloaded ) {
118+ runOnUiThread (
119+ () -> {
120+ sourceFragment .updateHtml (downloaded );
121+ previewFragment .webView .loadDataWithBaseURL (
122+ currentUrl , downloaded , "text/html" , "UTF-8" , null );
123+ if (loadingDialog != null ) {
124+ loadingDialog .dismiss ();
125+ }
126+ });
127+ }
128+
129+ @ Override
130+ public void onDownloadError (IOException e ) {
131+ runOnUiThread (
132+ () -> {
133+ ErrorDialog .show (this , e );
134+ if (loadingDialog != null ) {
135+ loadingDialog .dismiss ();
136+ }
137+ });
54138 }
55139
56140 @ Override
57141 public boolean onCreateOptionsMenu (Menu menu ) {
58142 getMenuInflater ().inflate (R .menu .dev_tools , menu );
59-
60143 MenuItem searchItem = menu .findItem (R .id .link );
61144 SearchView searchView = (SearchView ) searchItem .getActionView ();
62145
63146 if (searchView != null ) {
64147 searchView .setQueryHint (getString (R .string .search_hint ));
65148 searchView .setOnQueryTextListener (this );
66149 }
67-
68150 return true ;
69151 }
70152
71- private void performSearch (String query ) {
72- previewFragment .webView .loadUrl (query );
73- }
74-
75153 @ Override
76154 public boolean onOptionsItemSelected (MenuItem item ) {
77155 if (item .getItemId () == android .R .id .home ) {
@@ -87,7 +165,7 @@ public boolean onQueryTextSubmit(String query) {
87165 if (!query .startsWith ("http://" ) && !query .startsWith ("https://" )) {
88166 query = "https://" + query ;
89167 }
90- performSearch (query );
168+ loadUrl (query );
91169 }
92170 return true ;
93171 }
@@ -107,7 +185,17 @@ public void onTabSelected(TabLayout.Tab tab) {
107185 }
108186
109187 private void showFragment (Fragment fragment ) {
110- getSupportFragmentManager ().beginTransaction ().replace (R .id .content , fragment ).commit ();
188+ try {
189+ FragmentManager fm = getSupportFragmentManager ();
190+
191+ fm .beginTransaction ()
192+ .hide (fragment == previewFragment ? sourceFragment : previewFragment )
193+ .show (fragment )
194+ .commit ();
195+
196+ } catch (Exception err ) {
197+ ErrorDialog .show (this , err );
198+ }
111199 }
112200
113201 @ Override
0 commit comments