11package com .viliussutkus89 .android .pdf2htmlex .application ;
22
33import android .annotation .SuppressLint ;
4+ import android .content .ActivityNotFoundException ;
5+ import android .content .Intent ;
46import android .net .Uri ;
7+ import android .os .Build ;
58import android .os .Bundle ;
9+ import android .view .Menu ;
10+ import android .view .MenuItem ;
611import android .webkit .WebSettings ;
712import android .webkit .WebView ;
13+ import android .widget .Toast ;
814
15+ import androidx .activity .result .ActivityResultLauncher ;
16+ import androidx .activity .result .contract .ActivityResultContracts ;
917import androidx .annotation .NonNull ;
1018import androidx .appcompat .app .ActionBar ;
1119import androidx .appcompat .app .AppCompatActivity ;
1220import androidx .appcompat .widget .Toolbar ;
21+ import androidx .work .Data ;
22+ import androidx .work .OneTimeWorkRequest ;
23+ import androidx .work .WorkManager ;
24+ import androidx .work .WorkRequest ;
1325
1426public class HTMLReaderActivity extends AppCompatActivity {
1527 static final String INTENT_EXTRA_INPUT__FILENAME = "input.filename.pdf" ;
1628 private static final String BUNDLE_KEY__WEB_VIEW = "m_webView.state" ;
1729
1830 private WebView m_webView = null ;
1931
32+ private ActivityResultLauncher <String > m_saveDocument ;
33+
2034 @ SuppressLint ("SetJavaScriptEnabled" )
2135 @ Override
2236 protected void onCreate (Bundle savedInstanceState ) {
@@ -44,12 +58,42 @@ protected void onCreate(Bundle savedInstanceState) {
4458 ws .setAllowFileAccess (false );
4559 ws .setBlockNetworkLoads (true );
4660
61+ final Uri convertedDocument = getIntent ().getData ();
4762 try {
4863 Bundle wvBundle = savedInstanceState .getBundle (BUNDLE_KEY__WEB_VIEW );
4964 m_webView .restoreState (wvBundle );
5065 } catch (NullPointerException ignored ) {
51- Uri convertedResult = getIntent ().getData ();
52- m_webView .loadUrl (convertedResult .toString ());
66+ m_webView .loadUrl (convertedDocument .toString ());
67+ }
68+
69+ if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .KITKAT ) {
70+ m_saveDocument = registerForActivityResult (new ActivityResultContracts .CreateDocument (),
71+ selectedOutputDocument -> {
72+ if (null == selectedOutputDocument ) {
73+ return ;
74+ }
75+ WorkRequest saveWork = new OneTimeWorkRequest .Builder (SaveWorker .class )
76+ .setInputData (new Data .Builder ()
77+ .putString (SaveWorker .INPUT__INPUT_URI , convertedDocument .toString ())
78+ .putString (SaveWorker .INPUT__OUTPUT_URI , selectedOutputDocument .toString ())
79+ .build ())
80+ .build ();
81+ WorkManager workManager = WorkManager .getInstance (getApplicationContext ());
82+ workManager .enqueue (saveWork );
83+ workManager .getWorkInfoByIdLiveData (saveWork .getId ()).observe (this , workInfo -> {
84+ if (null == workInfo ) {
85+ return ;
86+ }
87+ switch (workInfo .getState ()) {
88+ case SUCCEEDED :
89+ Toast .makeText (getApplicationContext (), R .string .save_successful , Toast .LENGTH_LONG ).show ();
90+ break ;
91+ case FAILED :
92+ Toast .makeText (getApplicationContext (), R .string .error_save_failed , Toast .LENGTH_LONG ).show ();
93+ break ;
94+ }
95+ });
96+ });
5397 }
5498 }
5599
@@ -61,4 +105,37 @@ protected void onSaveInstanceState(@NonNull Bundle outState) {
61105 m_webView .saveState (wwBundle );
62106 outState .putBundle (BUNDLE_KEY__WEB_VIEW , wwBundle );
63107 }
108+
109+ @ Override
110+ public boolean onCreateOptionsMenu (Menu menu ) {
111+ getMenuInflater ().inflate (R .menu .html_reader_menu , menu );
112+ if (Build .VERSION .SDK_INT < Build .VERSION_CODES .KITKAT ) {
113+ menu .findItem (R .id .action_save ).setEnabled (false );
114+ }
115+ return super .onCreateOptionsMenu (menu );
116+ }
117+
118+ @ Override
119+ public boolean onOptionsItemSelected (MenuItem item ) {
120+ if (R .id .action_share == item .getItemId ()) {
121+ Intent shareIntent = new Intent (Intent .ACTION_SEND );
122+ shareIntent .setType ("text/html" );
123+ shareIntent .putExtra (Intent .EXTRA_STREAM , getIntent ().getData ());
124+ shareIntent .addFlags (Intent .FLAG_GRANT_READ_URI_PERMISSION );
125+ try {
126+ startActivity (shareIntent );
127+ } catch (ActivityNotFoundException e ) {
128+ Toast .makeText (this , R .string .error_share_failed , Toast .LENGTH_LONG ).show ();
129+ }
130+ return true ;
131+ }
132+
133+ if (R .id .action_save == item .getItemId ()) {
134+ String filename = GetFileName .FromUri (getContentResolver (), getIntent ().getData ());
135+ m_saveDocument .launch (filename );
136+ return true ;
137+ }
138+
139+ return super .onOptionsItemSelected (item );
140+ }
64141}
0 commit comments