1616import android .view .MenuItem ;
1717import android .view .View ;
1818import android .view .ViewGroup ;
19+ import okhttp3 .OkHttpClient ;
20+ import okhttp3 .Request ;
21+ import okhttp3 .Response ;
1922import org .itxtech .daedalus .Daedalus ;
2023import org .itxtech .daedalus .R ;
2124import org .itxtech .daedalus .activity .ConfigActivity ;
2427import org .itxtech .daedalus .widget .ClickPreference ;
2528
2629import java .io .*;
27- import java .net .URL ;
28- import java .net .URLConnection ;
30+ import java .util .concurrent .TimeUnit ;
2931
3032/**
3133 * Daedalus Project
3941 * (at your option) any later version.
4042 */
4143public class RuleConfigFragment extends ConfigFragment {
44+ private static final OkHttpClient HTTP_CLIENT = new OkHttpClient .Builder ()
45+ .connectTimeout (5 , TimeUnit .SECONDS )
46+ .readTimeout (10 , TimeUnit .SECONDS )
47+ .writeTimeout (10 , TimeUnit .SECONDS )
48+ .build ();
49+
4250 private static final int READ_REQUEST_CODE = 1 ;
4351 private Intent intent = null ;
4452 private Thread mThread = null ;
@@ -127,7 +135,6 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa
127135 buffer .flush ();
128136 mHandler .obtainMessage (RuleConfigHandler .MSG_RULE_DOWNLOADED ,
129137 new RuleData (ruleFilename .getText (), buffer .toByteArray ())).sendToTarget ();
130- stopThread ();
131138 } catch (Exception e ) {
132139 Logger .logException (e );
133140 } finally {
@@ -137,21 +144,20 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa
137144 } else {
138145 mThread = new Thread (() -> {
139146 try {
140- URLConnection connection = new URL ( ruleDownloadUrl . getText ()). openConnection ();
141- InputStream inputStream = connection . getInputStream ();
142- BufferedReader reader = new BufferedReader ( new InputStreamReader ( inputStream ) );
143- StringBuilder builder = new StringBuilder ( );
144- String result ;
145- while (( result = reader . readLine ()) != null ) {
146- builder . append ( " \n " ). append ( result );
147+ Request request = new Request . Builder ()
148+ . url ( ruleDownloadUrl . getText ()). get (). build ();
149+ Response response = HTTP_CLIENT . newCall ( request ). execute ( );
150+ Logger . info ( "Downloaded " + ruleDownloadUrl . getText () );
151+ if ( response . isSuccessful () && mHandler != null ) {
152+ mHandler . obtainMessage ( RuleConfigHandler . MSG_RULE_DOWNLOADED ,
153+ new RuleData ( ruleFilename . getText (), response . body (). bytes ())). sendToTarget ( );
147154 }
148- reader .close ();
149-
150- mHandler .obtainMessage (RuleConfigHandler .MSG_RULE_DOWNLOADED ,
151- new RuleData (ruleFilename .getText (), builder .toString ().getBytes ())).sendToTarget ();
152- stopThread ();
153155 } catch (Exception e ) {
154156 Logger .logException (e );
157+ if (mHandler != null ) {
158+ mHandler .obtainMessage (RuleConfigHandler .MSG_RULE_DOWNLOADED ,
159+ new RuleData (ruleFilename .getText (), new byte [0 ])).sendToTarget ();
160+ }
155161 } finally {
156162 stopThread ();
157163 }
@@ -366,8 +372,14 @@ public void handleMessage(Message msg) {
366372
367373 switch (msg .what ) {
368374 case MSG_RULE_DOWNLOADED :
375+ RuleData ruleData = (RuleData ) msg .obj ;
376+ if (ruleData .data .length == 0 ) {
377+ if (view != null ) {
378+ Snackbar .make (view , R .string .notice_download_failed , Snackbar .LENGTH_SHORT ).show ();
379+ }
380+ break ;
381+ }
369382 try {
370- RuleData ruleData = (RuleData ) msg .obj ;
371383 File file = new File (Daedalus .rulePath + ruleData .getFilename ());
372384 FileOutputStream stream = new FileOutputStream (file );
373385 stream .write (ruleData .getData ());
0 commit comments