|
|
@ -77,7 +77,7 @@ public class I2PDActivity extends Activity { |
|
|
|
if (textView == null) |
|
|
|
if (textView == null) |
|
|
|
return; |
|
|
|
return; |
|
|
|
Throwable tr = daemon.getLastThrowable(); |
|
|
|
Throwable tr = daemon.getLastThrowable(); |
|
|
|
if (tr!=null) { |
|
|
|
if (tr != null) { |
|
|
|
textView.setText(throwableToString(tr)); |
|
|
|
textView.setText(throwableToString(tr)); |
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
@ -86,7 +86,7 @@ public class I2PDActivity extends Activity { |
|
|
|
String graceStr = DaemonSingleton.State.gracefulShutdownInProgress.equals(state) ? String.format(": %s %s", formatGraceTimeRemaining(), getText(R.string.remaining)) : ""; |
|
|
|
String graceStr = DaemonSingleton.State.gracefulShutdownInProgress.equals(state) ? String.format(": %s %s", formatGraceTimeRemaining(), getText(R.string.remaining)) : ""; |
|
|
|
textView.setText(String.format("%s%s%s", getText(state.getStatusStringResourceId()), startResultStr, graceStr)); |
|
|
|
textView.setText(String.format("%s%s%s", getText(state.getStatusStringResourceId()), startResultStr, graceStr)); |
|
|
|
} catch (Throwable tr) { |
|
|
|
} catch (Throwable tr) { |
|
|
|
Log.e(TAG,"error ignored",tr); |
|
|
|
Log.e(TAG, "error ignored", tr); |
|
|
|
} |
|
|
|
} |
|
|
|
}); |
|
|
|
}); |
|
|
|
} |
|
|
|
} |
|
|
@ -100,7 +100,7 @@ public class I2PDActivity extends Activity { |
|
|
|
synchronized (graceStartedMillis_LOCK) { |
|
|
|
synchronized (graceStartedMillis_LOCK) { |
|
|
|
remainingSeconds = Math.round(Math.max(0, graceStartedMillis + GRACEFUL_DELAY_MILLIS - System.currentTimeMillis()) / 1000.0D); |
|
|
|
remainingSeconds = Math.round(Math.max(0, graceStartedMillis + GRACEFUL_DELAY_MILLIS - System.currentTimeMillis()) / 1000.0D); |
|
|
|
} |
|
|
|
} |
|
|
|
long remainingMinutes = (long)Math.floor(remainingSeconds / 60.0D); |
|
|
|
long remainingMinutes = (long) Math.floor(remainingSeconds / 60.0D); |
|
|
|
long remSec = remainingSeconds - remainingMinutes * 60; |
|
|
|
long remSec = remainingSeconds - remainingMinutes * 60; |
|
|
|
return remainingMinutes + ":" + (remSec / 10) + remSec % 10; |
|
|
|
return remainingMinutes + ":" + (remSec / 10) + remSec % 10; |
|
|
|
} |
|
|
|
} |
|
|
@ -147,14 +147,13 @@ public class I2PDActivity extends Activity { |
|
|
|
//cancelGracefulStop0();
|
|
|
|
//cancelGracefulStop0();
|
|
|
|
try { |
|
|
|
try { |
|
|
|
doUnbindService(); |
|
|
|
doUnbindService(); |
|
|
|
} catch(Throwable tr) { |
|
|
|
} catch (Throwable tr) { |
|
|
|
Log.e(TAG, "", tr); |
|
|
|
Log.e(TAG, "", tr); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) |
|
|
|
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { |
|
|
|
{ |
|
|
|
|
|
|
|
if (requestCode == MY_PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE) { |
|
|
|
if (requestCode == MY_PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE) { |
|
|
|
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) |
|
|
|
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) |
|
|
|
Log.e(TAG, "WR_EXT_STORAGE perm granted"); |
|
|
|
Log.e(TAG, "WR_EXT_STORAGE perm granted"); |
|
|
@ -254,7 +253,7 @@ public class I2PDActivity extends Activity { |
|
|
|
// as you specify a parent activity in AndroidManifest.xml.
|
|
|
|
// as you specify a parent activity in AndroidManifest.xml.
|
|
|
|
int id = item.getItemId(); |
|
|
|
int id = item.getItemId(); |
|
|
|
|
|
|
|
|
|
|
|
switch(id) { |
|
|
|
switch (id) { |
|
|
|
case R.id.action_stop: |
|
|
|
case R.id.action_stop: |
|
|
|
i2pdStop(); |
|
|
|
i2pdStop(); |
|
|
|
return true; |
|
|
|
return true; |
|
|
@ -346,14 +345,13 @@ public class I2PDActivity extends Activity { |
|
|
|
rescheduleGraceStop(null, gracefulStopAtMillis); |
|
|
|
rescheduleGraceStop(null, gracefulStopAtMillis); |
|
|
|
} else |
|
|
|
} else |
|
|
|
i2pdStop(); |
|
|
|
i2pdStop(); |
|
|
|
} catch(Throwable tr) { |
|
|
|
} catch (Throwable tr) { |
|
|
|
Log.e(TAG, "", tr); |
|
|
|
Log.e(TAG, "", tr); |
|
|
|
} |
|
|
|
} |
|
|
|
}, "gracInit").start(); |
|
|
|
}, "gracInit").start(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private void cancelGracefulStop() |
|
|
|
private void cancelGracefulStop() { |
|
|
|
{ |
|
|
|
|
|
|
|
cancelGracefulStop0(); |
|
|
|
cancelGracefulStop0(); |
|
|
|
new Thread(() -> { |
|
|
|
new Thread(() -> { |
|
|
|
try { |
|
|
|
try { |
|
|
@ -363,7 +361,7 @@ public class I2PDActivity extends Activity { |
|
|
|
runOnUiThread(() -> Toast.makeText(this, R.string.shutdown_canceled, Toast.LENGTH_SHORT).show()); |
|
|
|
runOnUiThread(() -> Toast.makeText(this, R.string.shutdown_canceled, Toast.LENGTH_SHORT).show()); |
|
|
|
} else |
|
|
|
} else |
|
|
|
i2pdStop(); |
|
|
|
i2pdStop(); |
|
|
|
} catch(Throwable tr) { |
|
|
|
} catch (Throwable tr) { |
|
|
|
Log.e(TAG, "", tr); |
|
|
|
Log.e(TAG, "", tr); |
|
|
|
} |
|
|
|
} |
|
|
|
}, "gracCancel").start(); |
|
|
|
}, "gracCancel").start(); |
|
|
@ -373,7 +371,7 @@ public class I2PDActivity extends Activity { |
|
|
|
if (gracefulQuitTimerOld != null) |
|
|
|
if (gracefulQuitTimerOld != null) |
|
|
|
gracefulQuitTimerOld.cancel(); |
|
|
|
gracefulQuitTimerOld.cancel(); |
|
|
|
|
|
|
|
|
|
|
|
if(daemon.GetTransitTunnelsCount() <= 0) { // no tunnels left
|
|
|
|
if (daemon.GetTransitTunnelsCount() <= 0) { // no tunnels left
|
|
|
|
Log.d(TAG, "no transit tunnels left, stopping"); |
|
|
|
Log.d(TAG, "no transit tunnels left, stopping"); |
|
|
|
i2pdStop(); |
|
|
|
i2pdStop(); |
|
|
|
} |
|
|
|
} |
|
|
@ -403,7 +401,7 @@ public class I2PDActivity extends Activity { |
|
|
|
|
|
|
|
|
|
|
|
private void setGracefulQuitTimer(Timer gracefulQuitTimer) { |
|
|
|
private void setGracefulQuitTimer(Timer gracefulQuitTimer) { |
|
|
|
I2PDActivity.gracefulQuitTimer = gracefulQuitTimer; |
|
|
|
I2PDActivity.gracefulQuitTimer = gracefulQuitTimer; |
|
|
|
runOnUiThread(()-> { |
|
|
|
runOnUiThread(() -> { |
|
|
|
Menu menu = optionsMenu; |
|
|
|
Menu menu = optionsMenu; |
|
|
|
if (menu != null) { |
|
|
|
if (menu != null) { |
|
|
|
MenuItem item = menu.findItem(R.id.action_graceful_stop); |
|
|
|
MenuItem item = menu.findItem(R.id.action_graceful_stop); |
|
|
@ -420,8 +418,7 @@ public class I2PDActivity extends Activity { |
|
|
|
* Copy the asset at the specified path to this app's data directory. If the |
|
|
|
* Copy the asset at the specified path to this app's data directory. If the |
|
|
|
* asset is a directory, its contents are also copied. |
|
|
|
* asset is a directory, its contents are also copied. |
|
|
|
* |
|
|
|
* |
|
|
|
* @param path |
|
|
|
* @param path Path to asset, relative to app's assets directory. |
|
|
|
* Path to asset, relative to app's assets directory. |
|
|
|
|
|
|
|
*/ |
|
|
|
*/ |
|
|
|
private void copyAsset(String path) { |
|
|
|
private void copyAsset(String path) { |
|
|
|
AssetManager manager = getAssets(); |
|
|
|
AssetManager manager = getAssets(); |
|
|
@ -459,8 +456,7 @@ public class I2PDActivity extends Activity { |
|
|
|
* Copy the asset file specified by path to app's data directory. Assumes |
|
|
|
* Copy the asset file specified by path to app's data directory. Assumes |
|
|
|
* parent directories have already been created. |
|
|
|
* parent directories have already been created. |
|
|
|
* |
|
|
|
* |
|
|
|
* @param path |
|
|
|
* @param path Path to asset, relative to app's assets directory. |
|
|
|
* Path to asset, relative to app's assets directory. |
|
|
|
|
|
|
|
*/ |
|
|
|
*/ |
|
|
|
private void copyFileAsset(String path) { |
|
|
|
private void copyFileAsset(String path) { |
|
|
|
File file = new File(i2pdpath, path); |
|
|
|
File file = new File(i2pdpath, path); |
|
|
@ -518,7 +514,7 @@ public class I2PDActivity extends Activity { |
|
|
|
while ((line = br.readLine()) != null) { |
|
|
|
while ((line = br.readLine()) != null) { |
|
|
|
text.append(line); |
|
|
|
text.append(line); |
|
|
|
} |
|
|
|
} |
|
|
|
}finally { |
|
|
|
} finally { |
|
|
|
try { |
|
|
|
try { |
|
|
|
br.close(); |
|
|
|
br.close(); |
|
|
|
} catch (IOException e) { |
|
|
|
} catch (IOException e) { |
|
|
@ -545,8 +541,7 @@ public class I2PDActivity extends Activity { |
|
|
|
Log.e(TAG, "holderFile.delete() returned " + deleteResult + ", absolute path='" + holderFile.getAbsolutePath() + "'"); |
|
|
|
Log.e(TAG, "holderFile.delete() returned " + deleteResult + ", absolute path='" + holderFile.getAbsolutePath() + "'"); |
|
|
|
File certPath = new File(i2pdpath, "certificates"); |
|
|
|
File certPath = new File(i2pdpath, "certificates"); |
|
|
|
deleteRecursive(certPath); |
|
|
|
deleteRecursive(certPath); |
|
|
|
} |
|
|
|
} catch (Throwable tr) { |
|
|
|
catch (Throwable tr) { |
|
|
|
|
|
|
|
Log.e(TAG, "", tr); |
|
|
|
Log.e(TAG, "", tr); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -566,13 +561,11 @@ public class I2PDActivity extends Activity { |
|
|
|
try { |
|
|
|
try { |
|
|
|
writer.close(); |
|
|
|
writer.close(); |
|
|
|
} catch (IOException e) { |
|
|
|
} catch (IOException e) { |
|
|
|
Log.e(TAG,"on writer close", e); |
|
|
|
Log.e(TAG, "on writer close", e); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} catch (Throwable tr) { |
|
|
|
catch (Throwable tr) |
|
|
|
Log.e(TAG, "on assets copying", tr); |
|
|
|
{ |
|
|
|
|
|
|
|
Log.e(TAG,"on assets copying", tr); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|