Skip to content

Commit 93da7da

Browse files
committed
Added base dev tool for read page html
1 parent 391d136 commit 93da7da

17 files changed

Lines changed: 544 additions & 69 deletions

main/src/main/java/org/xedox/webaide/DevToolsActivity.java

Lines changed: 107 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,33 @@
11
package org.xedox.webaide;
22

33
import android.os.Bundle;
4-
import android.os.Handler;
5-
import android.os.Looper;
64
import android.view.Menu;
75
import android.view.MenuItem;
86
import android.widget.ProgressBar;
9-
import androidx.appcompat.app.AppCompatActivity;
107
import androidx.appcompat.widget.SearchView;
118
import androidx.fragment.app.Fragment;
9+
import androidx.fragment.app.FragmentManager;
1210
import com.google.android.material.appbar.MaterialToolbar;
1311
import com.google.android.material.tabs.TabLayout;
1412
import org.xedox.utils.BaseActivity;
13+
import org.xedox.utils.dialog.ErrorDialog;
14+
import org.xedox.utils.dialog.LoadingDialog;
1515
import org.xedox.webaide.devtools.PreviewFragment;
1616
import org.xedox.webaide.devtools.SourceFragment;
17+
import org.xedox.webaide.devtools.WebManager;
18+
import java.io.IOException;
1719

1820
public 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

main/src/main/java/org/xedox/webaide/MainActivity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@
1111
import org.xedox.filetree.widget.FileTreeView;
1212
import org.xedox.utils.BaseActivity;
1313
import org.xedox.utils.dialog.ErrorDialog;
14+
import org.xedox.utils.sora.SoraEditorManager;
1415
import org.xedox.webaide.dialog.CreateProjectDialog;
15-
import org.xedox.webaide.editor.sora.SoraEditorManager;
1616
import org.xedox.webaide.project.Project;
1717
import org.xedox.webaide.project.ProjectsAdapter;
1818

main/src/main/java/org/xedox/webaide/SettingsActivity.java

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -59,11 +59,8 @@ public SettingsFragment() {}
5959
@Override
6060
public void onCreatePreferences(Bundle extraArgs, String root) {
6161
setPreferencesFromResource(R.xml.settings_preferences, root);
62-
Preference appThemePref = findPreference("app_theme");
6362
Preference appDialogTypePref = findPreference("app_dialog_type");
64-
if (appThemePref != null) {
65-
appThemePref.setOnPreferenceChangeListener(this);
66-
}
63+
6764
if (appDialogTypePref != null) {
6865
appDialogTypePref.setOnPreferenceChangeListener(this);
6966
}
@@ -75,10 +72,7 @@ public boolean onPreferenceChange(Preference pref, Object newValue) {
7572
SharedPreferences sp =
7673
PreferenceManager.getDefaultSharedPreferences(requireContext());
7774
sp.edit().putString(key, newValue.toString()).apply();
78-
if (key.equals("app_theme")) {
79-
AppCore.setAppDelegate(newValue.toString());
80-
return true;
81-
} else if (key.equals("app_dialog_type")) {
75+
if (key.equals("app_dialog_type")) {
8276
AppCore.setDialogType(newValue.toString());
8377
return true;
8478
}

main/src/main/java/org/xedox/webaide/devtools/SourceFragment.java

Lines changed: 98 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -4,56 +4,123 @@
44
import android.view.LayoutInflater;
55
import android.view.View;
66
import android.view.ViewGroup;
7-
import android.widget.ListView;
7+
import androidx.annotation.NonNull;
8+
import androidx.annotation.Nullable;
89
import androidx.fragment.app.Fragment;
10+
import androidx.fragment.app.FragmentManager;
911
import com.google.android.material.tabs.TabLayout;
12+
import org.xedox.utils.ListFragment;
13+
import org.xedox.utils.TextFragment;
1014
import org.xedox.webaide.R;
1115

12-
public class SourceFragment extends Fragment {
16+
public class SourceFragment extends Fragment implements TabLayout.OnTabSelectedListener {
17+
18+
private static final String KEY_HTML = "html_content";
19+
private static final String TAB_HTML = "HTML";
20+
private static final String TAB_CSS = "CSS";
21+
private static final String TAB_JS = "JavaScript";
1322

1423
private TabLayout tabLayout;
15-
private ListView links;
16-
private View view;
24+
private String html;
25+
private WebManager webManager = new WebManager();
26+
27+
private ListFragment<String> scriptsFragment;
28+
private ListFragment<String> stylesFragment;
29+
private TextFragment htmlFragment;
30+
31+
private boolean initedFragments = false;
32+
33+
@Override
34+
public void onCreate(@Nullable Bundle savedInstanceState) {
35+
super.onCreate(savedInstanceState);
36+
if (savedInstanceState != null) {
37+
html = savedInstanceState.getString(KEY_HTML);
38+
}
39+
}
1740

1841
@Override
1942
public View onCreateView(
20-
LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
21-
if (view == null) {
22-
view = inflater.inflate(R.layout.fragment_source, container, false);
23-
24-
tabLayout = view.findViewById(R.id.tab_layout);
25-
links = view.findViewById(R.id.links);
26-
27-
tabLayout.addOnTabSelectedListener(
28-
new TabLayout.OnTabSelectedListener() {
29-
@Override
30-
public void onTabSelected(TabLayout.Tab tab) {
31-
updateContent(tab.getPosition());
32-
}
33-
34-
@Override
35-
public void onTabUnselected(TabLayout.Tab tab) {}
36-
37-
@Override
38-
public void onTabReselected(TabLayout.Tab tab) {}
39-
});
43+
@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
44+
View view = inflater.inflate(R.layout.fragment_source, container, false);
45+
tabLayout = view.findViewById(R.id.tab_layout);
46+
tabLayout.addOnTabSelectedListener(this);
47+
48+
FragmentManager fm = getChildFragmentManager();
49+
if (!initedFragments) {
50+
initFragments(fm);
51+
initedFragments = true;
4052
}
53+
4154
return view;
4255
}
4356

44-
private void updateContent(int tabPosition) {
57+
private void initFragments(FragmentManager fm) {
58+
scriptsFragment = ListFragment.newInstance();
59+
stylesFragment = ListFragment.newInstance();
60+
htmlFragment = TextFragment.newInstance("source.html");
61+
62+
fm.beginTransaction()
63+
.add(R.id.source_content, htmlFragment)
64+
.add(R.id.source_content, stylesFragment)
65+
.add(R.id.source_content, scriptsFragment)
66+
.commit();
67+
68+
fm.beginTransaction().hide(stylesFragment).hide(scriptsFragment).commit();
69+
}
70+
71+
@Override
72+
public void onSaveInstanceState(@NonNull Bundle outState) {
73+
super.onSaveInstanceState(outState);
74+
outState.putString(KEY_HTML, html);
75+
}
4576

46-
switch (tabPosition) {
47-
case 0:
77+
public void updateHtml(String newHtml) {
78+
this.html = newHtml;
79+
if (htmlFragment != null && htmlFragment.getEditor() != null) {
80+
htmlFragment.getEditor().setText(html);
81+
}
82+
}
83+
84+
public static SourceFragment newInstance() {
85+
return new SourceFragment();
86+
}
87+
88+
@Override
89+
public void onTabSelected(TabLayout.Tab tab) {
90+
String tabText = tab.getText().toString();
91+
FragmentManager fm = getChildFragmentManager();
92+
93+
switch (tabText) {
94+
case TAB_HTML:
95+
showFragment(fm, htmlFragment);
4896
break;
49-
case 1:
97+
case TAB_CSS:
98+
showFragment(fm, stylesFragment);
5099
break;
51-
case 2:
100+
case TAB_JS:
101+
showFragment(fm, scriptsFragment);
52102
break;
53103
}
54104
}
55105

56-
public static SourceFragment newInstance() {
57-
return new SourceFragment();
106+
@Override
107+
public void onTabUnselected(TabLayout.Tab tab) {}
108+
109+
@Override
110+
public void onTabReselected(TabLayout.Tab tab) {}
111+
112+
private void showFragment(FragmentManager fm, Fragment fragment) {
113+
if (isAdded() && getActivity() != null) {
114+
fm.beginTransaction()
115+
.hide(fragment == htmlFragment ? stylesFragment : htmlFragment)
116+
.hide(
117+
fragment == htmlFragment
118+
? scriptsFragment
119+
: (fragment == stylesFragment
120+
? scriptsFragment
121+
: stylesFragment))
122+
.show(fragment)
123+
.commit();
124+
}
58125
}
59126
}

0 commit comments

Comments
 (0)