Skip to content

Commit

Permalink
4.x用のフォルダ選択画面でサブフォルダを作成できるようにした。WiFiのSupplicantStateを見てWi-Fi半強制をより効果的…
Browse files Browse the repository at this point in the history
…に扱えるようにした。
  • Loading branch information
tateisu committed Mar 8, 2017
1 parent 0ef4aa2 commit 5928a3a
Show file tree
Hide file tree
Showing 19 changed files with 408 additions and 85 deletions.
11 changes: 11 additions & 0 deletions .idea/dictionaries/tateisu.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions .idea/inspectionProfiles/Project_Default.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

File renamed without changes.
4 changes: 4 additions & 0 deletions app/src/main/java/jp/juggler/fadownloader/ActMain.java
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,7 @@ public class ActMain
try{
FileOutputStream fos = new FileOutputStream( test_file );
try{
//noinspection ConstantConditions
fos.write( Utils.encodeUTF8( "TEST" ) );
}finally{
fos.close();
Expand Down Expand Up @@ -583,6 +584,7 @@ void openHelp( int layout_id ){
final Dialog d = new Dialog( this );
d.requestWindowFeature( Window.FEATURE_NO_TITLE );
d.setContentView( v );
//noinspection ConstantConditions
d.getWindow().setLayout( WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT );
d.show();
v.findViewById( R.id.btnClose ).setOnClickListener( new View.OnClickListener(){
Expand All @@ -599,6 +601,7 @@ void openHelp( String text ){
final Dialog d = new Dialog( this );
d.requestWindowFeature( Window.FEATURE_NO_TITLE );
d.setContentView( v );
//noinspection ConstantConditions
d.getWindow().setLayout( WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT );
d.show();
v.findViewById( R.id.btnClose ).setOnClickListener( new View.OnClickListener(){
Expand Down Expand Up @@ -653,6 +656,7 @@ void openHelp( String text ){



@SuppressWarnings( "SpellCheckingInspection" )
static final String APP_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkTbDT+kbberoRK6QHAKNzuKsFh0zSVJk97trga30ZHHyQHPsHtIJCvIibgHmm5QL6xr9TualN5iYMfNKA4bZM3x25kNiJ0NVuP86sravHdTyVuZyIu2WUI1CNdGRun5GYSGtxXNOuZujRkPtIMGjl750Z18CirrXYkl85KHDLgiOAu+d7HjssQ215+Qfo7iJIl30CYgcBl+szfH42MQK2Jd03LeTMf+5MA/ve/6iL2I1nyZrtWrC6Sw1uqOqjB9jx8cJALOrX+CmDa+si9krAI7gcOV/E8CJvVyC7cPxxooB425S8xHTr/MPjkEmwnu7ppMk5MyO+G1XP927fVg0ywIDAQAB";
static final String REMOVE_AD_PRODUCT_ID = "remove_ad";
static final String TAG = "ActMain";
Expand Down
17 changes: 10 additions & 7 deletions app/src/main/java/jp/juggler/fadownloader/DownloadService.java
Original file line number Diff line number Diff line change
Expand Up @@ -88,11 +88,11 @@ public class DownloadService extends Service{
} );

wifi_tracker = new WifiTracker( this, log, new WifiTracker.Callback(){
@Override public void onConnectionEvent( boolean is_connected ){
@Override public void onConnectionEvent( boolean is_connected ,String cause){
if( is_connected ){
int last_mode = Pref.pref( DownloadService.this ).getInt( Pref.LAST_MODE, Pref.LAST_MODE_STOP );
if( last_mode != Pref.LAST_MODE_STOP ){
worker_wakeup();
worker_wakeup( cause );
}
}
}
Expand Down Expand Up @@ -149,12 +149,13 @@ public class DownloadService extends Service{
Intent broadcast_intent = intent.getParcelableExtra( EXTRA_BROADCAST_INTENT );
if( broadcast_intent != null ){
action = broadcast_intent.getAction();
log.d( getString( R.string.broadcast_received, action ) );

if( Receiver1.ACTION_ALARM.equals( action ) ){
worker_wakeup();
worker_wakeup( "Alarm" );
}else if( Intent.ACTION_BOOT_COMPLETED.equals( action ) ){
worker_wakeup();
worker_wakeup( "Boot completed" );
}else{
log.d( getString( R.string.broadcast_received, action ) );
}
}
}finally{
Expand Down Expand Up @@ -183,6 +184,7 @@ public class DownloadService extends Service{
.apply();
worker = new DownloadWorker( this, intent, worker_callback );
worker.start();

}catch( Throwable ex ){
ex.printStackTrace();
log.e( ex, "thread start failed." );
Expand All @@ -204,12 +206,13 @@ public class DownloadService extends Service{
DownloadWorker worker;
boolean will_restart;

void worker_wakeup(){
void worker_wakeup( String cause ){
if( worker != null && worker.isAlive() ) return;

try{
worker = new DownloadWorker( this, worker_callback );
worker = new DownloadWorker( this, cause, worker_callback );
worker.start();

}catch( Throwable ex ){
ex.printStackTrace();
log.e( ex, "thread start failed." );
Expand Down
22 changes: 17 additions & 5 deletions app/src/main/java/jp/juggler/fadownloader/DownloadWorker.java
Original file line number Diff line number Diff line change
Expand Up @@ -88,12 +88,12 @@ public DownloadWorker( DownloadService service, Intent intent, Callback callback
service.location_tracker.updateSetting( location_setting );
}

public DownloadWorker( DownloadService service, Callback callback ){
public DownloadWorker( DownloadService service, String cause, Callback callback ){
this.service = service;
this.callback = callback;
this.log = new LogWriter( service );

log.i( R.string.thread_ctor_restart );
log.i( R.string.thread_ctor_restart, cause );
SharedPreferences pref = Pref.pref( service );
this.repeat = pref.getBoolean( Pref.WORKER_REPEAT, false );
this.flashair_url = pref.getString( Pref.WORKER_FLASHAIR_URL, null );
Expand Down Expand Up @@ -190,7 +190,7 @@ static class Item{
static final Pattern reLine = Pattern.compile( "([^\\x0d\\x0a]+)" );
static final Pattern reAttr = Pattern.compile( ",(\\d+),(\\d+),(\\d+),(\\d+)$" );

@Override public void run(){
@SuppressWarnings( "ConstantConditions" ) @Override public void run(){

status.set( service.getString( R.string.thread_start ) );

Expand Down Expand Up @@ -272,7 +272,7 @@ static class Item{
if( isCancelled() ) break;

if( network == null ){
cancel( service.getString( R.string.wifi_not_connected ) );
cancel( service.getString( R.string.wifi_not_good ) );
break;
}

Expand All @@ -290,6 +290,10 @@ static class Item{
client.last_error = service.getString( R.string.flashair_host_error );
cancel( service.getString( R.string.flashair_host_error_short ) );
callback.releaseWakeLock();
}else if( client.last_error.contains( "ENETUNREACH" ) ){
client.last_error = service.getString( R.string.network_unreachable );
cancel( service.getString( R.string.network_unreachable ) );
callback.releaseWakeLock();
}
log.e( R.string.flashair_update_check_failed, cgi_url, client.last_error );
continue;
Expand Down Expand Up @@ -322,7 +326,7 @@ static class Item{
if( job_queue.isEmpty() ){
status.set( service.getString( R.string.file_scan_completed ) );
if( ! has_error ){

log.i( "ファイルスキャン完了" );
Pref.pref( service ).edit()
.putLong( Pref.LAST_SCAN_COMPLETE, System.currentTimeMillis() )
.putLong( Pref.FLASHAIR_UPDATE_STATUS_OLD, flashair_update_status )
Expand Down Expand Up @@ -352,6 +356,10 @@ static class Item{
client.last_error = service.getString( R.string.flashair_host_error );
cancel( service.getString( R.string.flashair_host_error_short ) );
callback.releaseWakeLock();
}else if( client.last_error.contains( "ENETUNREACH" ) ){
client.last_error = service.getString( R.string.network_unreachable );
cancel( service.getString( R.string.network_unreachable ) );
callback.releaseWakeLock();
}
log.e( R.string.folder_list_failed, item.air_path, cgi_url, client.last_error );
has_error = true;
Expand Down Expand Up @@ -462,6 +470,10 @@ public byte[] onHTTPClientStream( LogWriter log, CancelChecker cancel_checker, I
client.last_error = service.getString( R.string.flashair_host_error );
cancel( service.getString( R.string.flashair_host_error_short ) );
callback.releaseWakeLock();
}else if( client.last_error.contains( "ENETUNREACH" ) ){
client.last_error = service.getString( R.string.network_unreachable );
cancel( service.getString( R.string.network_unreachable ) );
callback.releaseWakeLock();
}

has_error = true;
Expand Down
83 changes: 79 additions & 4 deletions app/src/main/java/jp/juggler/fadownloader/FolderPicker.java
Original file line number Diff line number Diff line change
@@ -1,17 +1,22 @@
package jp.juggler.fadownloader;

import android.app.Activity;
import android.app.Dialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.KeyEvent;
import android.view.View;
import android.view.WindowManager;
import android.view.inputmethod.EditorInfo;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
Expand Down Expand Up @@ -55,8 +60,23 @@ public static void open( Activity activity, int request_code, String path ){
}
}

void showToast(boolean bLong,String s){
Toast.makeText( this
, s
, bLong ?Toast.LENGTH_LONG:Toast.LENGTH_SHORT
).show();
}

void showToast(Throwable ex,String s){
Toast.makeText( this
, s+String.format(":%s %s",ex.getClass().getSimpleName(),ex.getMessage())
, Toast.LENGTH_LONG
).show();
}

TextView tvCurrentFolder;
View btnFolderUp;
View btnSubFolder;
ListView lvFileList;
Button btnSelectFolder;
File showing_folder;
Expand All @@ -70,9 +90,12 @@ public static void open( Activity activity, int request_code, String path ){
case R.id.btnSelectFolder:
Intent intent = new Intent();
intent.putExtra( EXTRA_FOLDER, showing_folder.getAbsolutePath() );
setResult( Activity.RESULT_OK ,intent);
setResult( Activity.RESULT_OK, intent );
finish();
break;
case R.id.btnSubFolder:
openFolderCreateDialog();
break;
}
}

Expand All @@ -81,9 +104,9 @@ public static void open( Activity activity, int request_code, String path ){
if( name != null ){
File folder = new File( showing_folder, name );
if( ! folder.isDirectory() ){
Toast.makeText( this, getString( R.string.folder_not_directory ), Toast.LENGTH_SHORT ).show();
showToast(false,getString( R.string.folder_not_directory ));
}else if( ! folder.canWrite() ){
Toast.makeText( this, getString( R.string.folder_not_writable ), Toast.LENGTH_SHORT ).show();
showToast(false,getString( R.string.folder_not_writable ));
}else{
loadFolder( folder );
}
Expand All @@ -101,12 +124,13 @@ public static void open( Activity activity, int request_code, String path ){

tvCurrentFolder = (TextView) findViewById( R.id.tvCurrentFolder );
btnFolderUp = findViewById( R.id.btnFolderUp );
btnSubFolder = findViewById( R.id.btnSubFolder );
lvFileList = (ListView) findViewById( R.id.lvFileList );
btnSelectFolder = (Button) findViewById( R.id.btnSelectFolder );

btnFolderUp.setOnClickListener( this );
btnSelectFolder.setOnClickListener( this );

btnSubFolder.setOnClickListener( this );
list_adapter = new ArrayAdapter<>( this, android.R.layout.simple_list_item_1 );
lvFileList.setAdapter( list_adapter );
lvFileList.setOnItemClickListener( this );
Expand All @@ -122,6 +146,7 @@ public static void open( Activity activity, int request_code, String path ){
private void loadFolder( final File folder ){
tvCurrentFolder.setText( R.string.loading );
btnFolderUp.setEnabled( false );
btnSubFolder.setEnabled( false );
btnSelectFolder.setEnabled( false );
list_adapter.clear();
new AsyncTask<Void, Void, ArrayList<String>>(){
Expand All @@ -147,11 +172,61 @@ private void loadFolder( final File folder ){
showing_folder = folder;
tvCurrentFolder.setText( folder.getAbsolutePath() );
btnFolderUp.setEnabled( ! folder.getAbsolutePath().equals( "/" ) );
btnSubFolder.setEnabled( true );
btnSelectFolder.setText( getString( R.string.folder_select, folder.getAbsolutePath() ) );
btnSelectFolder.setEnabled( true );
list_adapter.addAll( result );
}
}
}.execute();
}

private void openFolderCreateDialog(){
View root = getLayoutInflater().inflate(R.layout.folder_create_dialog,null,false);
final View btnCancel = root.findViewById( R.id.btnCancel );
final View btnOk = root.findViewById( R.id.btnOk );
final EditText etName = (EditText) root.findViewById( R.id.etName );
final Dialog d = new Dialog(this);
d.setTitle( getString(R.string.create_sub_folder) );
d.setContentView( root );
//noinspection ConstantConditions
d.getWindow().setLayout( WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT );
d.show();
etName.setOnEditorActionListener( new TextView.OnEditorActionListener(){
@Override public boolean onEditorAction( TextView v, int actionId, KeyEvent event ){
if( actionId == EditorInfo.IME_ACTION_DONE ){
btnOk.performClick();
return true;
}
return false;
}
} );
btnCancel.setOnClickListener( new View.OnClickListener(){
@Override public void onClick( View v ){
d.dismiss();
}
} );
btnOk.setOnClickListener( new View.OnClickListener(){
@Override public void onClick( View v ){
try{
String name = etName.getText().toString().trim();
if( TextUtils.isEmpty( name ) ){
showToast( false, getString( R.string.folder_name_empty ) );
}else{
File folder = new File( showing_folder, name );
if( folder.exists() ){
showToast( false, getString( R.string.folder_already_exist ) );
}else if( ! folder.mkdir() ){
showToast( false, getString( R.string.folder_creation_failed ) );
}else{
d.dismiss();
loadFolder( showing_folder );
}
}
}catch(Throwable ex){
showToast(ex,"folder creation failed.");
}
}
} );
}
}
10 changes: 7 additions & 3 deletions app/src/main/java/jp/juggler/fadownloader/HTTPClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ public byte[] getHTTP( LogWriter log, Object network, String url, HTTPClientRece
*/
long timeStart = SystemClock.elapsedRealtime();
for( int nTry = 0 ; nTry < max_try ; ++ nTry ){
long t1, t2, t3, lap;
long t1, t2, lap;
try{
this.rcode = 0;
// キャンセルされたか確認
Expand Down Expand Up @@ -328,6 +328,12 @@ public byte[] getHTTP( LogWriter log, Object network, String url, HTTPClientRece
log.d( "Please check device's date and time." );
this.rcode = 401;
return null;
}else if( ex instanceof ConnectException
&& ex.getMessage() != null
&& ex.getMessage().contains( "ENETUNREACH" )
){
// このアプリの場合は network unreachable はリトライしない
return null;
}
if( quit_network_error ) return null;

Expand All @@ -351,8 +357,6 @@ public byte[] getHTTP( LogWriter log, Object network, String url, HTTPClientRece
byte[] data = receiver.onHTTPClientStream( log, cancel_checker, in, content_length );
if( data == null ) continue;
if( data.length > 0 ){
t3 = SystemClock.elapsedRealtime();
lap = t3 - t2;
if( nTry > 0 ) log.w( "[%s] OK. retry=%d,time=%dms"
, caption
, nTry
Expand Down
Loading

0 comments on commit 5928a3a

Please sign in to comment.