mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-17 13:19:52 +01:00
Refactored FileUtils.
Removed methods that are no longer needed for Java 6, moved the remaining method into the utils directory.
This commit is contained in:
@@ -1,52 +1,5 @@
|
|||||||
package org.briarproject.android;
|
package org.briarproject.android;
|
||||||
|
|
||||||
import static android.bluetooth.BluetoothAdapter.SCAN_MODE_CONNECTABLE;
|
|
||||||
import static android.bluetooth.BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE;
|
|
||||||
import static android.content.Intent.ACTION_SEND;
|
|
||||||
import static android.content.Intent.EXTRA_EMAIL;
|
|
||||||
import static android.content.Intent.EXTRA_STREAM;
|
|
||||||
import static android.content.Intent.EXTRA_SUBJECT;
|
|
||||||
import static android.net.ConnectivityManager.TYPE_MOBILE;
|
|
||||||
import static android.net.ConnectivityManager.TYPE_WIFI;
|
|
||||||
import static android.net.wifi.WifiManager.WIFI_STATE_ENABLED;
|
|
||||||
import static android.view.Gravity.CENTER;
|
|
||||||
import static android.view.Gravity.CENTER_HORIZONTAL;
|
|
||||||
import static android.view.View.GONE;
|
|
||||||
import static android.view.View.VISIBLE;
|
|
||||||
import static android.widget.LinearLayout.VERTICAL;
|
|
||||||
import static java.util.logging.Level.INFO;
|
|
||||||
import static java.util.logging.Level.WARNING;
|
|
||||||
import static org.briarproject.android.TestingConstants.SHARE_CRASH_REPORTS;
|
|
||||||
import static org.briarproject.android.util.CommonLayoutParams.MATCH_MATCH;
|
|
||||||
import static org.briarproject.android.util.CommonLayoutParams.MATCH_WRAP;
|
|
||||||
import static org.briarproject.android.util.CommonLayoutParams.MATCH_WRAP_1;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileOutputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.PrintStream;
|
|
||||||
import java.lang.reflect.InvocationTargetException;
|
|
||||||
import java.lang.reflect.Method;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.LinkedHashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Map.Entry;
|
|
||||||
import java.util.Scanner;
|
|
||||||
import java.util.concurrent.Callable;
|
|
||||||
import java.util.concurrent.ExecutionException;
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
import java.util.regex.Pattern;
|
|
||||||
|
|
||||||
import org.briarproject.R;
|
|
||||||
import org.briarproject.android.util.AndroidUtils;
|
|
||||||
import org.briarproject.android.util.HorizontalBorder;
|
|
||||||
import org.briarproject.android.util.LayoutUtils;
|
|
||||||
import org.briarproject.android.util.ListLoadingProgressBar;
|
|
||||||
import org.briarproject.api.android.AndroidExecutor;
|
|
||||||
import org.briarproject.api.system.FileUtils;
|
|
||||||
import org.briarproject.util.StringUtils;
|
|
||||||
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.ActivityManager;
|
import android.app.ActivityManager;
|
||||||
@@ -70,14 +23,57 @@ import android.widget.LinearLayout;
|
|||||||
import android.widget.ScrollView;
|
import android.widget.ScrollView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import org.briarproject.R;
|
||||||
|
import org.briarproject.android.util.AndroidUtils;
|
||||||
|
import org.briarproject.android.util.HorizontalBorder;
|
||||||
|
import org.briarproject.android.util.LayoutUtils;
|
||||||
|
import org.briarproject.android.util.ListLoadingProgressBar;
|
||||||
|
import org.briarproject.api.android.AndroidExecutor;
|
||||||
|
import org.briarproject.util.StringUtils;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.PrintStream;
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
import java.util.Scanner;
|
||||||
|
import java.util.concurrent.Callable;
|
||||||
|
import java.util.concurrent.ExecutionException;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
import static android.bluetooth.BluetoothAdapter.SCAN_MODE_CONNECTABLE;
|
||||||
|
import static android.bluetooth.BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE;
|
||||||
|
import static android.content.Intent.ACTION_SEND;
|
||||||
|
import static android.content.Intent.EXTRA_EMAIL;
|
||||||
|
import static android.content.Intent.EXTRA_STREAM;
|
||||||
|
import static android.content.Intent.EXTRA_SUBJECT;
|
||||||
|
import static android.net.ConnectivityManager.TYPE_MOBILE;
|
||||||
|
import static android.net.ConnectivityManager.TYPE_WIFI;
|
||||||
|
import static android.net.wifi.WifiManager.WIFI_STATE_ENABLED;
|
||||||
|
import static android.view.Gravity.CENTER;
|
||||||
|
import static android.view.Gravity.CENTER_HORIZONTAL;
|
||||||
|
import static android.view.View.GONE;
|
||||||
|
import static android.view.View.VISIBLE;
|
||||||
|
import static android.widget.LinearLayout.VERTICAL;
|
||||||
|
import static java.util.logging.Level.INFO;
|
||||||
|
import static java.util.logging.Level.WARNING;
|
||||||
|
import static org.briarproject.android.TestingConstants.SHARE_CRASH_REPORTS;
|
||||||
|
import static org.briarproject.android.util.CommonLayoutParams.MATCH_MATCH;
|
||||||
|
import static org.briarproject.android.util.CommonLayoutParams.MATCH_WRAP;
|
||||||
|
import static org.briarproject.android.util.CommonLayoutParams.MATCH_WRAP_1;
|
||||||
|
|
||||||
public class CrashReportActivity extends Activity implements OnClickListener {
|
public class CrashReportActivity extends Activity implements OnClickListener {
|
||||||
|
|
||||||
private static final Logger LOG =
|
private static final Logger LOG =
|
||||||
Logger.getLogger(CrashReportActivity.class.getName());
|
Logger.getLogger(CrashReportActivity.class.getName());
|
||||||
|
|
||||||
@Inject private FileUtils fileUtils;
|
|
||||||
private final AndroidExecutor androidExecutor = new AndroidExecutorImpl();
|
private final AndroidExecutor androidExecutor = new AndroidExecutorImpl();
|
||||||
|
|
||||||
private ScrollView scroll = null;
|
private ScrollView scroll = null;
|
||||||
@@ -235,28 +231,20 @@ public class CrashReportActivity extends Activity implements OnClickListener {
|
|||||||
statusMap.put("Virtual machine memory:", vmMemory);
|
statusMap.put("Virtual machine memory:", vmMemory);
|
||||||
|
|
||||||
// Internal storage
|
// Internal storage
|
||||||
try {
|
File root = Environment.getRootDirectory();
|
||||||
File root = Environment.getRootDirectory();
|
long rootTotal = root.getTotalSpace();
|
||||||
long rootTotal = fileUtils.getTotalSpace(root);
|
long rootFree = root.getFreeSpace();
|
||||||
long rootFree = fileUtils.getFreeSpace(root);
|
String internal = (rootTotal / 1024 / 1024) + " MiB total, "
|
||||||
String internal = (rootTotal / 1024 / 1024) + " MiB total, "
|
+ (rootFree / 1024 / 1024) + " MiB free";
|
||||||
+ (rootFree / 1024 / 1024) + " MiB free";
|
statusMap.put("Internal storage:", internal);
|
||||||
statusMap.put("Internal storage:", internal);
|
|
||||||
} catch (IOException e) {
|
|
||||||
statusMap.put("Internal storage:", "Unknown");
|
|
||||||
}
|
|
||||||
|
|
||||||
// External storage (SD card)
|
// External storage (SD card)
|
||||||
try {
|
File sd = Environment.getExternalStorageDirectory();
|
||||||
File sd = Environment.getExternalStorageDirectory();
|
long sdTotal = sd.getTotalSpace();
|
||||||
long sdTotal = fileUtils.getTotalSpace(sd);
|
long sdFree = sd.getFreeSpace();
|
||||||
long sdFree = fileUtils.getFreeSpace(sd);
|
String external = (sdTotal / 1024 / 1024) + " MiB total, "
|
||||||
String external = (sdTotal / 1024 / 1024) + " MiB total, "
|
+ (sdFree / 1024 / 1024) + " MiB free";
|
||||||
+ (sdFree / 1024 / 1024) + " MiB free";
|
statusMap.put("External storage:", external);
|
||||||
statusMap.put("External storage:", external);
|
|
||||||
} catch (IOException e) {
|
|
||||||
statusMap.put("External storage:", "Unknown");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Is mobile data available?
|
// Is mobile data available?
|
||||||
o = getSystemService(CONNECTIVITY_SERVICE);
|
o = getSystemService(CONNECTIVITY_SERVICE);
|
||||||
@@ -345,7 +333,7 @@ public class CrashReportActivity extends Activity implements OnClickListener {
|
|||||||
// Is Bluetooth connectable?
|
// Is Bluetooth connectable?
|
||||||
boolean btConnectable = bt != null &&
|
boolean btConnectable = bt != null &&
|
||||||
(bt.getScanMode() == SCAN_MODE_CONNECTABLE ||
|
(bt.getScanMode() == SCAN_MODE_CONNECTABLE ||
|
||||||
bt.getScanMode() == SCAN_MODE_CONNECTABLE_DISCOVERABLE);
|
bt.getScanMode() == SCAN_MODE_CONNECTABLE_DISCOVERABLE);
|
||||||
// Is Bluetooth discoverable?
|
// Is Bluetooth discoverable?
|
||||||
boolean btDiscoverable = bt != null &&
|
boolean btDiscoverable = bt != null &&
|
||||||
bt.getScanMode() == SCAN_MODE_CONNECTABLE_DISCOVERABLE;
|
bt.getScanMode() == SCAN_MODE_CONNECTABLE_DISCOVERABLE;
|
||||||
|
|||||||
@@ -1,33 +1,33 @@
|
|||||||
package org.briarproject.android;
|
package org.briarproject.android;
|
||||||
|
|
||||||
import static android.view.View.GONE;
|
|
||||||
import static android.view.View.VISIBLE;
|
|
||||||
|
|
||||||
import java.util.concurrent.Executor;
|
|
||||||
|
|
||||||
import javax.inject.Inject;
|
|
||||||
|
|
||||||
import org.briarproject.R;
|
|
||||||
import org.briarproject.api.crypto.CryptoComponent;
|
|
||||||
import org.briarproject.api.crypto.CryptoExecutor;
|
|
||||||
import org.briarproject.api.crypto.SecretKey;
|
|
||||||
import org.briarproject.api.db.DatabaseConfig;
|
|
||||||
import org.briarproject.api.system.FileUtils;
|
|
||||||
import org.briarproject.util.StringUtils;
|
|
||||||
|
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.text.Editable;
|
import android.text.Editable;
|
||||||
import android.view.KeyEvent;
|
import android.view.KeyEvent;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.inputmethod.EditorInfo;
|
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import android.widget.ProgressBar;
|
import android.widget.ProgressBar;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.TextView.OnEditorActionListener;
|
import android.widget.TextView.OnEditorActionListener;
|
||||||
|
|
||||||
|
import org.briarproject.R;
|
||||||
|
import org.briarproject.api.crypto.CryptoComponent;
|
||||||
|
import org.briarproject.api.crypto.CryptoExecutor;
|
||||||
|
import org.briarproject.api.crypto.SecretKey;
|
||||||
|
import org.briarproject.api.db.DatabaseConfig;
|
||||||
|
import org.briarproject.util.FileUtils;
|
||||||
|
import org.briarproject.util.StringUtils;
|
||||||
|
|
||||||
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
|
||||||
|
import static android.view.View.GONE;
|
||||||
|
import static android.view.View.VISIBLE;
|
||||||
|
import static android.view.inputmethod.EditorInfo.IME_ACTION_DONE;
|
||||||
|
|
||||||
public class PasswordActivity extends BaseActivity {
|
public class PasswordActivity extends BaseActivity {
|
||||||
|
|
||||||
@Inject @CryptoExecutor private Executor cryptoExecutor;
|
@Inject @CryptoExecutor private Executor cryptoExecutor;
|
||||||
@@ -41,7 +41,6 @@ public class PasswordActivity extends BaseActivity {
|
|||||||
// Fields that are accessed from background threads must be volatile
|
// Fields that are accessed from background threads must be volatile
|
||||||
@Inject private volatile CryptoComponent crypto;
|
@Inject private volatile CryptoComponent crypto;
|
||||||
@Inject private volatile DatabaseConfig databaseConfig;
|
@Inject private volatile DatabaseConfig databaseConfig;
|
||||||
@Inject private FileUtils fileUtils;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle state) {
|
public void onCreate(Bundle state) {
|
||||||
@@ -55,14 +54,14 @@ public class PasswordActivity extends BaseActivity {
|
|||||||
encrypted = StringUtils.fromHexString(hex);
|
encrypted = StringUtils.fromHexString(hex);
|
||||||
|
|
||||||
setContentView(R.layout.activity_password);
|
setContentView(R.layout.activity_password);
|
||||||
signInButton = (Button)findViewById(R.id.btn_sign_in);
|
signInButton = (Button) findViewById(R.id.btn_sign_in);
|
||||||
progress = (ProgressBar)findViewById(R.id.progress_wheel);
|
progress = (ProgressBar) findViewById(R.id.progress_wheel);
|
||||||
title = (TextView)findViewById(R.id.title_password);
|
title = (TextView) findViewById(R.id.title_password);
|
||||||
password = (EditText)findViewById(R.id.edit_password);
|
password = (EditText) findViewById(R.id.edit_password);
|
||||||
password.setOnEditorActionListener(new OnEditorActionListener() {
|
password.setOnEditorActionListener(new OnEditorActionListener() {
|
||||||
@Override
|
@Override
|
||||||
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
|
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
|
||||||
if (actionId == EditorInfo.IME_ACTION_DONE) {
|
if (actionId == IME_ACTION_DONE) {
|
||||||
validatePassword(encrypted, password.getText());
|
validatePassword(encrypted, password.getText());
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@@ -73,7 +72,7 @@ public class PasswordActivity extends BaseActivity {
|
|||||||
@Override
|
@Override
|
||||||
protected void clearDbPrefs() {
|
protected void clearDbPrefs() {
|
||||||
super.clearDbPrefs();
|
super.clearDbPrefs();
|
||||||
fileUtils.deleteFileOrDir(databaseConfig.getDatabaseDirectory());
|
FileUtils.deleteFileOrDir(databaseConfig.getDatabaseDirectory());
|
||||||
gotoAndFinish(SetupActivity.class, RESULT_CANCELED);
|
gotoAndFinish(SetupActivity.class, RESULT_CANCELED);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -100,7 +99,7 @@ public class PasswordActivity extends BaseActivity {
|
|||||||
private void validatePassword(final byte[] encrypted, Editable e) {
|
private void validatePassword(final byte[] encrypted, Editable e) {
|
||||||
hideSoftKeyboard();
|
hideSoftKeyboard();
|
||||||
// Replace the button with a progress bar
|
// Replace the button with a progress bar
|
||||||
signInButton.setVisibility(View.INVISIBLE);
|
signInButton.setVisibility(GONE);
|
||||||
progress.setVisibility(VISIBLE);
|
progress.setVisibility(VISIBLE);
|
||||||
// Decrypt the database key in a background thread
|
// Decrypt the database key in a background thread
|
||||||
final String password = e.toString();
|
final String password = e.toString();
|
||||||
|
|||||||
@@ -1,5 +1,42 @@
|
|||||||
package org.briarproject.android;
|
package org.briarproject.android;
|
||||||
|
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
|
import android.content.SharedPreferences.Editor;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.view.KeyEvent;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.View.OnClickListener;
|
||||||
|
import android.view.inputmethod.InputMethodManager;
|
||||||
|
import android.widget.Button;
|
||||||
|
import android.widget.EditText;
|
||||||
|
import android.widget.LinearLayout;
|
||||||
|
import android.widget.ProgressBar;
|
||||||
|
import android.widget.ScrollView;
|
||||||
|
import android.widget.TextView;
|
||||||
|
import android.widget.TextView.OnEditorActionListener;
|
||||||
|
|
||||||
|
import org.briarproject.R;
|
||||||
|
import org.briarproject.android.util.LayoutUtils;
|
||||||
|
import org.briarproject.android.util.StrengthMeter;
|
||||||
|
import org.briarproject.api.AuthorFactory;
|
||||||
|
import org.briarproject.api.LocalAuthor;
|
||||||
|
import org.briarproject.api.android.ReferenceManager;
|
||||||
|
import org.briarproject.api.crypto.CryptoComponent;
|
||||||
|
import org.briarproject.api.crypto.CryptoExecutor;
|
||||||
|
import org.briarproject.api.crypto.KeyPair;
|
||||||
|
import org.briarproject.api.crypto.PasswordStrengthEstimator;
|
||||||
|
import org.briarproject.api.crypto.SecretKey;
|
||||||
|
import org.briarproject.api.db.DatabaseConfig;
|
||||||
|
import org.briarproject.util.StringUtils;
|
||||||
|
|
||||||
|
import java.util.concurrent.Executor;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
|
||||||
|
import roboguice.activity.RoboActivity;
|
||||||
|
|
||||||
import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
|
import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
|
||||||
import static android.text.InputType.TYPE_CLASS_TEXT;
|
import static android.text.InputType.TYPE_CLASS_TEXT;
|
||||||
import static android.text.InputType.TYPE_TEXT_FLAG_CAP_WORDS;
|
import static android.text.InputType.TYPE_TEXT_FLAG_CAP_WORDS;
|
||||||
@@ -19,42 +56,6 @@ import static org.briarproject.android.util.CommonLayoutParams.WRAP_WRAP;
|
|||||||
import static org.briarproject.api.AuthorConstants.MAX_AUTHOR_NAME_LENGTH;
|
import static org.briarproject.api.AuthorConstants.MAX_AUTHOR_NAME_LENGTH;
|
||||||
import static org.briarproject.api.crypto.PasswordStrengthEstimator.WEAK;
|
import static org.briarproject.api.crypto.PasswordStrengthEstimator.WEAK;
|
||||||
|
|
||||||
import java.util.concurrent.Executor;
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
import javax.inject.Inject;
|
|
||||||
|
|
||||||
import org.briarproject.R;
|
|
||||||
import org.briarproject.android.util.LayoutUtils;
|
|
||||||
import org.briarproject.android.util.StrengthMeter;
|
|
||||||
import org.briarproject.api.AuthorFactory;
|
|
||||||
import org.briarproject.api.LocalAuthor;
|
|
||||||
import org.briarproject.api.android.ReferenceManager;
|
|
||||||
import org.briarproject.api.crypto.CryptoComponent;
|
|
||||||
import org.briarproject.api.crypto.CryptoExecutor;
|
|
||||||
import org.briarproject.api.crypto.KeyPair;
|
|
||||||
import org.briarproject.api.crypto.PasswordStrengthEstimator;
|
|
||||||
import org.briarproject.api.crypto.SecretKey;
|
|
||||||
import org.briarproject.api.db.DatabaseConfig;
|
|
||||||
import org.briarproject.util.StringUtils;
|
|
||||||
|
|
||||||
import roboguice.activity.RoboActivity;
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.content.SharedPreferences;
|
|
||||||
import android.content.SharedPreferences.Editor;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.view.KeyEvent;
|
|
||||||
import android.view.View;
|
|
||||||
import android.view.View.OnClickListener;
|
|
||||||
import android.view.inputmethod.InputMethodManager;
|
|
||||||
import android.widget.Button;
|
|
||||||
import android.widget.EditText;
|
|
||||||
import android.widget.LinearLayout;
|
|
||||||
import android.widget.ProgressBar;
|
|
||||||
import android.widget.ScrollView;
|
|
||||||
import android.widget.TextView;
|
|
||||||
import android.widget.TextView.OnEditorActionListener;
|
|
||||||
|
|
||||||
public class SetupActivity extends RoboActivity implements OnClickListener,
|
public class SetupActivity extends RoboActivity implements OnClickListener,
|
||||||
OnEditorActionListener {
|
OnEditorActionListener {
|
||||||
|
|
||||||
@@ -149,7 +150,7 @@ OnEditorActionListener {
|
|||||||
layout.addView(passwordConfirmation);
|
layout.addView(passwordConfirmation);
|
||||||
|
|
||||||
strengthMeter = new StrengthMeter(this);
|
strengthMeter = new StrengthMeter(this);
|
||||||
strengthMeter.setPadding(pad, 2 * pad, pad, 0);
|
strengthMeter.setPadding(pad, pad, pad, pad);
|
||||||
strengthMeter.setVisibility(INVISIBLE);
|
strengthMeter.setVisibility(INVISIBLE);
|
||||||
layout.addView(strengthMeter);
|
layout.addView(strengthMeter);
|
||||||
|
|
||||||
|
|||||||
@@ -1,61 +1,5 @@
|
|||||||
package org.briarproject.android;
|
package org.briarproject.android;
|
||||||
|
|
||||||
import static android.bluetooth.BluetoothAdapter.SCAN_MODE_CONNECTABLE;
|
|
||||||
import static android.bluetooth.BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE;
|
|
||||||
import static android.content.Intent.ACTION_SEND;
|
|
||||||
import static android.content.Intent.EXTRA_EMAIL;
|
|
||||||
import static android.content.Intent.EXTRA_STREAM;
|
|
||||||
import static android.content.Intent.EXTRA_SUBJECT;
|
|
||||||
import static android.net.ConnectivityManager.TYPE_MOBILE;
|
|
||||||
import static android.net.ConnectivityManager.TYPE_WIFI;
|
|
||||||
import static android.net.wifi.WifiManager.WIFI_STATE_ENABLED;
|
|
||||||
import static android.view.Gravity.CENTER;
|
|
||||||
import static android.view.Gravity.CENTER_HORIZONTAL;
|
|
||||||
import static android.view.View.GONE;
|
|
||||||
import static android.view.View.VISIBLE;
|
|
||||||
import static android.widget.LinearLayout.VERTICAL;
|
|
||||||
import static java.util.logging.Level.INFO;
|
|
||||||
import static java.util.logging.Level.WARNING;
|
|
||||||
import static org.briarproject.android.util.CommonLayoutParams.MATCH_MATCH;
|
|
||||||
import static org.briarproject.android.util.CommonLayoutParams.MATCH_WRAP;
|
|
||||||
import static org.briarproject.android.util.CommonLayoutParams.MATCH_WRAP_1;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileOutputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.PrintStream;
|
|
||||||
import java.lang.reflect.InvocationTargetException;
|
|
||||||
import java.lang.reflect.Method;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.LinkedHashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Map.Entry;
|
|
||||||
import java.util.Scanner;
|
|
||||||
import java.util.concurrent.Callable;
|
|
||||||
import java.util.concurrent.ExecutionException;
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
import java.util.regex.Pattern;
|
|
||||||
|
|
||||||
import javax.inject.Inject;
|
|
||||||
|
|
||||||
import org.briarproject.R;
|
|
||||||
import org.briarproject.android.util.AndroidUtils;
|
|
||||||
import org.briarproject.android.util.ElasticHorizontalSpace;
|
|
||||||
import org.briarproject.android.util.HorizontalBorder;
|
|
||||||
import org.briarproject.android.util.LayoutUtils;
|
|
||||||
import org.briarproject.android.util.ListLoadingProgressBar;
|
|
||||||
import org.briarproject.api.TransportId;
|
|
||||||
import org.briarproject.api.TransportProperties;
|
|
||||||
import org.briarproject.api.android.AndroidExecutor;
|
|
||||||
import org.briarproject.api.db.DatabaseComponent;
|
|
||||||
import org.briarproject.api.db.DbException;
|
|
||||||
import org.briarproject.api.lifecycle.LifecycleManager;
|
|
||||||
import org.briarproject.api.plugins.Plugin;
|
|
||||||
import org.briarproject.api.plugins.PluginManager;
|
|
||||||
import org.briarproject.api.system.FileUtils;
|
|
||||||
import org.briarproject.util.StringUtils;
|
|
||||||
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.app.ActivityManager;
|
import android.app.ActivityManager;
|
||||||
import android.bluetooth.BluetoothAdapter;
|
import android.bluetooth.BluetoothAdapter;
|
||||||
@@ -77,6 +21,61 @@ import android.widget.LinearLayout;
|
|||||||
import android.widget.ScrollView;
|
import android.widget.ScrollView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import org.briarproject.R;
|
||||||
|
import org.briarproject.android.util.AndroidUtils;
|
||||||
|
import org.briarproject.android.util.ElasticHorizontalSpace;
|
||||||
|
import org.briarproject.android.util.HorizontalBorder;
|
||||||
|
import org.briarproject.android.util.LayoutUtils;
|
||||||
|
import org.briarproject.android.util.ListLoadingProgressBar;
|
||||||
|
import org.briarproject.api.TransportId;
|
||||||
|
import org.briarproject.api.TransportProperties;
|
||||||
|
import org.briarproject.api.android.AndroidExecutor;
|
||||||
|
import org.briarproject.api.db.DatabaseComponent;
|
||||||
|
import org.briarproject.api.db.DbException;
|
||||||
|
import org.briarproject.api.lifecycle.LifecycleManager;
|
||||||
|
import org.briarproject.api.plugins.Plugin;
|
||||||
|
import org.briarproject.api.plugins.PluginManager;
|
||||||
|
import org.briarproject.util.StringUtils;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.PrintStream;
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
import java.util.Scanner;
|
||||||
|
import java.util.concurrent.Callable;
|
||||||
|
import java.util.concurrent.ExecutionException;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
|
||||||
|
import static android.bluetooth.BluetoothAdapter.SCAN_MODE_CONNECTABLE;
|
||||||
|
import static android.bluetooth.BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE;
|
||||||
|
import static android.content.Intent.ACTION_SEND;
|
||||||
|
import static android.content.Intent.EXTRA_EMAIL;
|
||||||
|
import static android.content.Intent.EXTRA_STREAM;
|
||||||
|
import static android.content.Intent.EXTRA_SUBJECT;
|
||||||
|
import static android.net.ConnectivityManager.TYPE_MOBILE;
|
||||||
|
import static android.net.ConnectivityManager.TYPE_WIFI;
|
||||||
|
import static android.net.wifi.WifiManager.WIFI_STATE_ENABLED;
|
||||||
|
import static android.view.Gravity.CENTER;
|
||||||
|
import static android.view.Gravity.CENTER_HORIZONTAL;
|
||||||
|
import static android.view.View.GONE;
|
||||||
|
import static android.view.View.VISIBLE;
|
||||||
|
import static android.widget.LinearLayout.VERTICAL;
|
||||||
|
import static java.util.logging.Level.INFO;
|
||||||
|
import static java.util.logging.Level.WARNING;
|
||||||
|
import static org.briarproject.android.util.CommonLayoutParams.MATCH_MATCH;
|
||||||
|
import static org.briarproject.android.util.CommonLayoutParams.MATCH_WRAP;
|
||||||
|
import static org.briarproject.android.util.CommonLayoutParams.MATCH_WRAP_1;
|
||||||
|
|
||||||
public class TestingActivity extends BriarActivity implements OnClickListener {
|
public class TestingActivity extends BriarActivity implements OnClickListener {
|
||||||
|
|
||||||
private static final Logger LOG =
|
private static final Logger LOG =
|
||||||
@@ -92,8 +91,6 @@ public class TestingActivity extends BriarActivity implements OnClickListener {
|
|||||||
private ImageButton refresh = null, share = null;
|
private ImageButton refresh = null, share = null;
|
||||||
private File temp = null;
|
private File temp = null;
|
||||||
|
|
||||||
@Inject private volatile FileUtils fileUtils;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle state) {
|
public void onCreate(Bundle state) {
|
||||||
super.onCreate(state);
|
super.onCreate(state);
|
||||||
@@ -245,28 +242,20 @@ public class TestingActivity extends BriarActivity implements OnClickListener {
|
|||||||
statusMap.put("Virtual machine memory:", vmMemory);
|
statusMap.put("Virtual machine memory:", vmMemory);
|
||||||
|
|
||||||
// Internal storage
|
// Internal storage
|
||||||
try {
|
File root = Environment.getRootDirectory();
|
||||||
File root = Environment.getRootDirectory();
|
long rootTotal = root.getTotalSpace();
|
||||||
long rootTotal = fileUtils.getTotalSpace(root);
|
long rootFree = root.getFreeSpace();
|
||||||
long rootFree = fileUtils.getFreeSpace(root);
|
String internal = (rootTotal / 1024 / 1024) + " MiB total, "
|
||||||
String internal = (rootTotal / 1024 / 1024) + " MiB total, "
|
+ (rootFree / 1024 / 1024) + " MiB free";
|
||||||
+ (rootFree / 1024 / 1024) + " MiB free";
|
statusMap.put("Internal storage:", internal);
|
||||||
statusMap.put("Internal storage:", internal);
|
|
||||||
} catch (IOException e) {
|
|
||||||
statusMap.put("Internal storage:", "Unknown");
|
|
||||||
}
|
|
||||||
|
|
||||||
// External storage (SD card)
|
// External storage (SD card)
|
||||||
try {
|
File sd = Environment.getExternalStorageDirectory();
|
||||||
File sd = Environment.getExternalStorageDirectory();
|
long sdTotal = sd.getTotalSpace();
|
||||||
long sdTotal = fileUtils.getTotalSpace(sd);
|
long sdFree = sd.getFreeSpace();
|
||||||
long sdFree = fileUtils.getFreeSpace(sd);
|
String external = (sdTotal / 1024 / 1024) + " MiB total, "
|
||||||
String external = (sdTotal / 1024 / 1024) + " MiB total, "
|
+ (sdFree / 1024 / 1024) + " MiB free";
|
||||||
+ (sdFree / 1024 / 1024) + " MiB free";
|
statusMap.put("External storage:", external);
|
||||||
statusMap.put("External storage:", external);
|
|
||||||
} catch (IOException e) {
|
|
||||||
statusMap.put("External storage:", "Unknown");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Is mobile data available?
|
// Is mobile data available?
|
||||||
o = getSystemService(CONNECTIVITY_SERVICE);
|
o = getSystemService(CONNECTIVITY_SERVICE);
|
||||||
@@ -355,7 +344,7 @@ public class TestingActivity extends BriarActivity implements OnClickListener {
|
|||||||
// Is Bluetooth connectable?
|
// Is Bluetooth connectable?
|
||||||
boolean btConnectable = bt != null &&
|
boolean btConnectable = bt != null &&
|
||||||
(bt.getScanMode() == SCAN_MODE_CONNECTABLE ||
|
(bt.getScanMode() == SCAN_MODE_CONNECTABLE ||
|
||||||
bt.getScanMode() == SCAN_MODE_CONNECTABLE_DISCOVERABLE);
|
bt.getScanMode() == SCAN_MODE_CONNECTABLE_DISCOVERABLE);
|
||||||
// Is Bluetooth discoverable?
|
// Is Bluetooth discoverable?
|
||||||
boolean btDiscoverable = bt != null &&
|
boolean btDiscoverable = bt != null &&
|
||||||
bt.getScanMode() == SCAN_MODE_CONNECTABLE_DISCOVERABLE;
|
bt.getScanMode() == SCAN_MODE_CONNECTABLE_DISCOVERABLE;
|
||||||
|
|||||||
@@ -1,20 +1,18 @@
|
|||||||
package org.briarproject.system;
|
package org.briarproject.system;
|
||||||
|
|
||||||
|
import com.google.inject.AbstractModule;
|
||||||
|
|
||||||
import org.briarproject.api.system.Clock;
|
import org.briarproject.api.system.Clock;
|
||||||
import org.briarproject.api.system.FileUtils;
|
|
||||||
import org.briarproject.api.system.LocationUtils;
|
import org.briarproject.api.system.LocationUtils;
|
||||||
import org.briarproject.api.system.SeedProvider;
|
import org.briarproject.api.system.SeedProvider;
|
||||||
import org.briarproject.api.system.Timer;
|
import org.briarproject.api.system.Timer;
|
||||||
|
|
||||||
import com.google.inject.AbstractModule;
|
|
||||||
|
|
||||||
public class AndroidSystemModule extends AbstractModule {
|
public class AndroidSystemModule extends AbstractModule {
|
||||||
|
|
||||||
protected void configure() {
|
protected void configure() {
|
||||||
bind(Clock.class).to(SystemClock.class);
|
bind(Clock.class).to(SystemClock.class);
|
||||||
bind(Timer.class).to(SystemTimer.class);
|
bind(Timer.class).to(SystemTimer.class);
|
||||||
bind(SeedProvider.class).to(AndroidSeedProvider.class);
|
bind(SeedProvider.class).to(AndroidSeedProvider.class);
|
||||||
bind(FileUtils.class).to(FileUtilsImpl.class);
|
|
||||||
bind(LocationUtils.class).to(AndroidLocationUtils.class);
|
bind(LocationUtils.class).to(AndroidLocationUtils.class);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
package org.briarproject.api.system;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
public interface FileUtils {
|
|
||||||
|
|
||||||
long getTotalSpace(File f) throws IOException;
|
|
||||||
|
|
||||||
long getFreeSpace(File f) throws IOException;
|
|
||||||
|
|
||||||
void deleteFileOrDir(File f);
|
|
||||||
}
|
|
||||||
@@ -1,6 +1,15 @@
|
|||||||
package org.briarproject.db;
|
package org.briarproject.db;
|
||||||
|
|
||||||
import static java.util.concurrent.TimeUnit.SECONDS;
|
import com.google.inject.AbstractModule;
|
||||||
|
import com.google.inject.Provides;
|
||||||
|
|
||||||
|
import org.briarproject.api.db.DatabaseComponent;
|
||||||
|
import org.briarproject.api.db.DatabaseConfig;
|
||||||
|
import org.briarproject.api.db.DatabaseExecutor;
|
||||||
|
import org.briarproject.api.event.EventBus;
|
||||||
|
import org.briarproject.api.lifecycle.LifecycleManager;
|
||||||
|
import org.briarproject.api.lifecycle.ShutdownManager;
|
||||||
|
import org.briarproject.system.SystemClock;
|
||||||
|
|
||||||
import java.sql.Connection;
|
import java.sql.Connection;
|
||||||
import java.util.concurrent.BlockingQueue;
|
import java.util.concurrent.BlockingQueue;
|
||||||
@@ -12,17 +21,7 @@ import java.util.concurrent.ThreadPoolExecutor;
|
|||||||
|
|
||||||
import javax.inject.Singleton;
|
import javax.inject.Singleton;
|
||||||
|
|
||||||
import org.briarproject.api.db.DatabaseComponent;
|
import static java.util.concurrent.TimeUnit.SECONDS;
|
||||||
import org.briarproject.api.db.DatabaseConfig;
|
|
||||||
import org.briarproject.api.db.DatabaseExecutor;
|
|
||||||
import org.briarproject.api.event.EventBus;
|
|
||||||
import org.briarproject.api.lifecycle.LifecycleManager;
|
|
||||||
import org.briarproject.api.lifecycle.ShutdownManager;
|
|
||||||
import org.briarproject.api.system.FileUtils;
|
|
||||||
import org.briarproject.system.SystemClock;
|
|
||||||
|
|
||||||
import com.google.inject.AbstractModule;
|
|
||||||
import com.google.inject.Provides;
|
|
||||||
|
|
||||||
public class DatabaseModule extends AbstractModule {
|
public class DatabaseModule extends AbstractModule {
|
||||||
|
|
||||||
@@ -45,9 +44,8 @@ public class DatabaseModule extends AbstractModule {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
Database<Connection> getDatabase(DatabaseConfig config,
|
Database<Connection> getDatabase(DatabaseConfig config) {
|
||||||
FileUtils fileUtils) {
|
return new H2Database(config, new SystemClock());
|
||||||
return new H2Database(config, fileUtils, new SystemClock());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Provides @Singleton
|
@Provides @Singleton
|
||||||
|
|||||||
@@ -1,5 +1,10 @@
|
|||||||
package org.briarproject.db;
|
package org.briarproject.db;
|
||||||
|
|
||||||
|
import org.briarproject.api.db.DatabaseConfig;
|
||||||
|
import org.briarproject.api.db.DbException;
|
||||||
|
import org.briarproject.api.system.Clock;
|
||||||
|
import org.briarproject.util.StringUtils;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.sql.Connection;
|
import java.sql.Connection;
|
||||||
@@ -10,12 +15,6 @@ import java.util.Properties;
|
|||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
|
||||||
import org.briarproject.api.db.DatabaseConfig;
|
|
||||||
import org.briarproject.api.db.DbException;
|
|
||||||
import org.briarproject.api.system.Clock;
|
|
||||||
import org.briarproject.api.system.FileUtils;
|
|
||||||
import org.briarproject.util.StringUtils;
|
|
||||||
|
|
||||||
/** Contains all the H2-specific code for the database. */
|
/** Contains all the H2-specific code for the database. */
|
||||||
class H2Database extends JdbcDatabase {
|
class H2Database extends JdbcDatabase {
|
||||||
|
|
||||||
@@ -25,14 +24,12 @@ class H2Database extends JdbcDatabase {
|
|||||||
private static final String SECRET_TYPE = "BINARY(32)";
|
private static final String SECRET_TYPE = "BINARY(32)";
|
||||||
|
|
||||||
private final DatabaseConfig config;
|
private final DatabaseConfig config;
|
||||||
private final FileUtils fileUtils;
|
|
||||||
private final String url;
|
private final String url;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
H2Database(DatabaseConfig config, FileUtils fileUtils, Clock clock) {
|
H2Database(DatabaseConfig config, Clock clock) {
|
||||||
super(HASH_TYPE, BINARY_TYPE, COUNTER_TYPE, SECRET_TYPE, clock);
|
super(HASH_TYPE, BINARY_TYPE, COUNTER_TYPE, SECRET_TYPE, clock);
|
||||||
this.config = config;
|
this.config = config;
|
||||||
this.fileUtils = fileUtils;
|
|
||||||
String path = new File(config.getDatabaseDirectory(), "db").getAbsolutePath();
|
String path = new File(config.getDatabaseDirectory(), "db").getAbsolutePath();
|
||||||
// FIXME: Remove WRITE_DELAY=0 after implementing BTPv2?
|
// FIXME: Remove WRITE_DELAY=0 after implementing BTPv2?
|
||||||
url = "jdbc:h2:split:" + path + ";CIPHER=AES;MULTI_THREADED=1"
|
url = "jdbc:h2:split:" + path + ";CIPHER=AES;MULTI_THREADED=1"
|
||||||
@@ -58,15 +55,10 @@ class H2Database extends JdbcDatabase {
|
|||||||
public long getFreeSpace() throws DbException {
|
public long getFreeSpace() throws DbException {
|
||||||
File dir = config.getDatabaseDirectory();
|
File dir = config.getDatabaseDirectory();
|
||||||
long maxSize = config.getMaxSize();
|
long maxSize = config.getMaxSize();
|
||||||
try {
|
long free = dir.getFreeSpace();
|
||||||
long free = fileUtils.getFreeSpace(dir);
|
long used = getDiskSpace(dir);
|
||||||
long used = getDiskSpace(dir);
|
long quota = maxSize - used;
|
||||||
long quota = maxSize - used;
|
return Math.min(free, quota);
|
||||||
long min = Math.min(free, quota);
|
|
||||||
return min;
|
|
||||||
} catch (IOException e) {
|
|
||||||
throw new DbException(e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private long getDiskSpace(File f) {
|
private long getDiskSpace(File f) {
|
||||||
|
|||||||
@@ -1,7 +1,10 @@
|
|||||||
package org.briarproject.plugins.file;
|
package org.briarproject.plugins.file;
|
||||||
|
|
||||||
import static java.util.logging.Level.WARNING;
|
import org.briarproject.api.ContactId;
|
||||||
import static org.briarproject.api.transport.TransportConstants.MIN_STREAM_LENGTH;
|
import org.briarproject.api.plugins.TransportConnectionReader;
|
||||||
|
import org.briarproject.api.plugins.TransportConnectionWriter;
|
||||||
|
import org.briarproject.api.plugins.simplex.SimplexPlugin;
|
||||||
|
import org.briarproject.api.plugins.simplex.SimplexPluginCallback;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
@@ -13,12 +16,8 @@ import java.util.Locale;
|
|||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
import org.briarproject.api.ContactId;
|
import static java.util.logging.Level.WARNING;
|
||||||
import org.briarproject.api.plugins.TransportConnectionReader;
|
import static org.briarproject.api.transport.TransportConstants.MIN_STREAM_LENGTH;
|
||||||
import org.briarproject.api.plugins.TransportConnectionWriter;
|
|
||||||
import org.briarproject.api.plugins.simplex.SimplexPlugin;
|
|
||||||
import org.briarproject.api.plugins.simplex.SimplexPluginCallback;
|
|
||||||
import org.briarproject.api.system.FileUtils;
|
|
||||||
|
|
||||||
public abstract class FilePlugin implements SimplexPlugin {
|
public abstract class FilePlugin implements SimplexPlugin {
|
||||||
|
|
||||||
@@ -26,7 +25,6 @@ public abstract class FilePlugin implements SimplexPlugin {
|
|||||||
Logger.getLogger(FilePlugin.class.getName());
|
Logger.getLogger(FilePlugin.class.getName());
|
||||||
|
|
||||||
protected final Executor ioExecutor;
|
protected final Executor ioExecutor;
|
||||||
protected final FileUtils fileUtils;
|
|
||||||
protected final SimplexPluginCallback callback;
|
protected final SimplexPluginCallback callback;
|
||||||
protected final int maxLatency;
|
protected final int maxLatency;
|
||||||
|
|
||||||
@@ -37,10 +35,9 @@ public abstract class FilePlugin implements SimplexPlugin {
|
|||||||
protected abstract void writerFinished(File f);
|
protected abstract void writerFinished(File f);
|
||||||
protected abstract void readerFinished(File f);
|
protected abstract void readerFinished(File f);
|
||||||
|
|
||||||
protected FilePlugin(Executor ioExecutor, FileUtils fileUtils,
|
protected FilePlugin(Executor ioExecutor, SimplexPluginCallback callback,
|
||||||
SimplexPluginCallback callback, int maxLatency) {
|
int maxLatency) {
|
||||||
this.ioExecutor = ioExecutor;
|
this.ioExecutor = ioExecutor;
|
||||||
this.fileUtils = fileUtils;
|
|
||||||
this.callback = callback;
|
this.callback = callback;
|
||||||
this.maxLatency = maxLatency;
|
this.maxLatency = maxLatency;
|
||||||
}
|
}
|
||||||
@@ -84,7 +81,7 @@ public abstract class FilePlugin implements SimplexPlugin {
|
|||||||
if (dir == null || !dir.exists() || !dir.isDirectory()) return null;
|
if (dir == null || !dir.exists() || !dir.isDirectory()) return null;
|
||||||
File f = new File(dir, filename);
|
File f = new File(dir, filename);
|
||||||
try {
|
try {
|
||||||
long capacity = fileUtils.getFreeSpace(dir);
|
long capacity = dir.getFreeSpace();
|
||||||
if (capacity < MIN_STREAM_LENGTH) return null;
|
if (capacity < MIN_STREAM_LENGTH) return null;
|
||||||
OutputStream out = new FileOutputStream(f);
|
OutputStream out = new FileOutputStream(f);
|
||||||
return new FileTransportWriter(f, out, capacity, this);
|
return new FileTransportWriter(f, out, capacity, this);
|
||||||
|
|||||||
@@ -1,25 +0,0 @@
|
|||||||
package org.briarproject.system;
|
|
||||||
|
|
||||||
import org.briarproject.api.system.FileUtils;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
public class FileUtilsImpl implements FileUtils {
|
|
||||||
|
|
||||||
public long getTotalSpace(File f) throws IOException {
|
|
||||||
return f.getTotalSpace(); // Requires Java 1.6
|
|
||||||
}
|
|
||||||
|
|
||||||
public long getFreeSpace(File f) throws IOException {
|
|
||||||
return f.getUsableSpace(); // Requires Java 1.6
|
|
||||||
}
|
|
||||||
|
|
||||||
public void deleteFileOrDir(File f) {
|
|
||||||
if (f.isFile())
|
|
||||||
f.delete();
|
|
||||||
else if (f.isDirectory())
|
|
||||||
for (File child : f.listFiles())
|
|
||||||
deleteFileOrDir(child);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
15
briar-core/src/org/briarproject/util/FileUtils.java
Normal file
15
briar-core/src/org/briarproject/util/FileUtils.java
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
package org.briarproject.util;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
public class FileUtils {
|
||||||
|
|
||||||
|
public static void deleteFileOrDir(File f) {
|
||||||
|
if (f.isFile()) {
|
||||||
|
f.delete();
|
||||||
|
} else if (f.isDirectory()) {
|
||||||
|
for (File child : f.listFiles()) deleteFileOrDir(child);
|
||||||
|
f.delete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,8 +1,6 @@
|
|||||||
package org.briarproject.plugins;
|
package org.briarproject.plugins;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import com.google.inject.Provides;
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.concurrent.Executor;
|
|
||||||
|
|
||||||
import org.briarproject.api.crypto.CryptoComponent;
|
import org.briarproject.api.crypto.CryptoComponent;
|
||||||
import org.briarproject.api.lifecycle.IoExecutor;
|
import org.briarproject.api.lifecycle.IoExecutor;
|
||||||
@@ -12,24 +10,26 @@ import org.briarproject.api.plugins.duplex.DuplexPluginFactory;
|
|||||||
import org.briarproject.api.plugins.simplex.SimplexPluginConfig;
|
import org.briarproject.api.plugins.simplex.SimplexPluginConfig;
|
||||||
import org.briarproject.api.plugins.simplex.SimplexPluginFactory;
|
import org.briarproject.api.plugins.simplex.SimplexPluginFactory;
|
||||||
import org.briarproject.api.reliability.ReliabilityLayerFactory;
|
import org.briarproject.api.reliability.ReliabilityLayerFactory;
|
||||||
import org.briarproject.api.system.FileUtils;
|
|
||||||
import org.briarproject.plugins.bluetooth.BluetoothPluginFactory;
|
import org.briarproject.plugins.bluetooth.BluetoothPluginFactory;
|
||||||
import org.briarproject.plugins.file.RemovableDrivePluginFactory;
|
import org.briarproject.plugins.file.RemovableDrivePluginFactory;
|
||||||
import org.briarproject.plugins.modem.ModemPluginFactory;
|
import org.briarproject.plugins.modem.ModemPluginFactory;
|
||||||
import org.briarproject.plugins.tcp.LanTcpPluginFactory;
|
import org.briarproject.plugins.tcp.LanTcpPluginFactory;
|
||||||
import org.briarproject.plugins.tcp.WanTcpPluginFactory;
|
import org.briarproject.plugins.tcp.WanTcpPluginFactory;
|
||||||
|
|
||||||
import com.google.inject.Provides;
|
import java.util.Arrays;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
public class DesktopPluginsModule extends PluginsModule {
|
public class DesktopPluginsModule extends PluginsModule {
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
SimplexPluginConfig getSimplexPluginConfig(@IoExecutor Executor ioExecutor,
|
SimplexPluginConfig getSimplexPluginConfig(
|
||||||
FileUtils fileUtils) {
|
@IoExecutor Executor ioExecutor) {
|
||||||
SimplexPluginFactory removable =
|
SimplexPluginFactory removable =
|
||||||
new RemovableDrivePluginFactory(ioExecutor, fileUtils);
|
new RemovableDrivePluginFactory(ioExecutor);
|
||||||
final Collection<SimplexPluginFactory> factories =
|
final Collection<SimplexPluginFactory> factories =
|
||||||
Arrays.asList(removable);
|
Collections.singletonList(removable);
|
||||||
return new SimplexPluginConfig() {
|
return new SimplexPluginConfig() {
|
||||||
public Collection<SimplexPluginFactory> getFactories() {
|
public Collection<SimplexPluginFactory> getFactories() {
|
||||||
return factories;
|
return factories;
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
package org.briarproject.plugins.file;
|
package org.briarproject.plugins.file;
|
||||||
|
|
||||||
import static java.util.logging.Level.WARNING;
|
import org.briarproject.api.ContactId;
|
||||||
|
import org.briarproject.api.TransportId;
|
||||||
|
import org.briarproject.api.plugins.simplex.SimplexPluginCallback;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -11,10 +13,7 @@ import java.util.List;
|
|||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
import org.briarproject.api.ContactId;
|
import static java.util.logging.Level.WARNING;
|
||||||
import org.briarproject.api.TransportId;
|
|
||||||
import org.briarproject.api.plugins.simplex.SimplexPluginCallback;
|
|
||||||
import org.briarproject.api.system.FileUtils;
|
|
||||||
|
|
||||||
class RemovableDrivePlugin extends FilePlugin
|
class RemovableDrivePlugin extends FilePlugin
|
||||||
implements RemovableDriveMonitor.Callback {
|
implements RemovableDriveMonitor.Callback {
|
||||||
@@ -27,10 +26,10 @@ implements RemovableDriveMonitor.Callback {
|
|||||||
private final RemovableDriveFinder finder;
|
private final RemovableDriveFinder finder;
|
||||||
private final RemovableDriveMonitor monitor;
|
private final RemovableDriveMonitor monitor;
|
||||||
|
|
||||||
RemovableDrivePlugin(Executor ioExecutor, FileUtils fileUtils,
|
RemovableDrivePlugin(Executor ioExecutor, SimplexPluginCallback callback,
|
||||||
SimplexPluginCallback callback, RemovableDriveFinder finder,
|
RemovableDriveFinder finder, RemovableDriveMonitor monitor,
|
||||||
RemovableDriveMonitor monitor, int maxLatency) {
|
int maxLatency) {
|
||||||
super(ioExecutor, fileUtils, callback, maxLatency);
|
super(ioExecutor, callback, maxLatency);
|
||||||
this.finder = finder;
|
this.finder = finder;
|
||||||
this.monitor = monitor;
|
this.monitor = monitor;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,13 @@
|
|||||||
package org.briarproject.plugins.file;
|
package org.briarproject.plugins.file;
|
||||||
|
|
||||||
import java.util.concurrent.Executor;
|
|
||||||
|
|
||||||
import org.briarproject.api.TransportId;
|
import org.briarproject.api.TransportId;
|
||||||
import org.briarproject.api.plugins.simplex.SimplexPlugin;
|
import org.briarproject.api.plugins.simplex.SimplexPlugin;
|
||||||
import org.briarproject.api.plugins.simplex.SimplexPluginCallback;
|
import org.briarproject.api.plugins.simplex.SimplexPluginCallback;
|
||||||
import org.briarproject.api.plugins.simplex.SimplexPluginFactory;
|
import org.briarproject.api.plugins.simplex.SimplexPluginFactory;
|
||||||
import org.briarproject.api.system.FileUtils;
|
|
||||||
import org.briarproject.util.OsUtils;
|
import org.briarproject.util.OsUtils;
|
||||||
|
|
||||||
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
public class RemovableDrivePluginFactory implements SimplexPluginFactory {
|
public class RemovableDrivePluginFactory implements SimplexPluginFactory {
|
||||||
|
|
||||||
// Maximum latency 14 days (Royal Mail or lackadaisical carrier pigeon)
|
// Maximum latency 14 days (Royal Mail or lackadaisical carrier pigeon)
|
||||||
@@ -16,12 +15,9 @@ public class RemovableDrivePluginFactory implements SimplexPluginFactory {
|
|||||||
private static final int POLLING_INTERVAL = 10 * 1000; // 10 seconds
|
private static final int POLLING_INTERVAL = 10 * 1000; // 10 seconds
|
||||||
|
|
||||||
private final Executor ioExecutor;
|
private final Executor ioExecutor;
|
||||||
private final FileUtils fileUtils;
|
|
||||||
|
|
||||||
public RemovableDrivePluginFactory(Executor ioExecutor,
|
public RemovableDrivePluginFactory(Executor ioExecutor) {
|
||||||
FileUtils fileUtils) {
|
|
||||||
this.ioExecutor = ioExecutor;
|
this.ioExecutor = ioExecutor;
|
||||||
this.fileUtils = fileUtils;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public TransportId getId() {
|
public TransportId getId() {
|
||||||
@@ -49,7 +45,7 @@ public class RemovableDrivePluginFactory implements SimplexPluginFactory {
|
|||||||
} else {
|
} else {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return new RemovableDrivePlugin(ioExecutor, fileUtils, callback,
|
return new RemovableDrivePlugin(ioExecutor, callback, finder, monitor,
|
||||||
finder, monitor, MAX_LATENCY);
|
MAX_LATENCY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +1,12 @@
|
|||||||
package org.briarproject.system;
|
package org.briarproject.system;
|
||||||
|
|
||||||
|
import com.google.inject.AbstractModule;
|
||||||
|
|
||||||
import org.briarproject.api.system.Clock;
|
import org.briarproject.api.system.Clock;
|
||||||
import org.briarproject.api.system.FileUtils;
|
|
||||||
import org.briarproject.api.system.SeedProvider;
|
import org.briarproject.api.system.SeedProvider;
|
||||||
import org.briarproject.api.system.Timer;
|
import org.briarproject.api.system.Timer;
|
||||||
import org.briarproject.util.OsUtils;
|
import org.briarproject.util.OsUtils;
|
||||||
|
|
||||||
import com.google.inject.AbstractModule;
|
|
||||||
|
|
||||||
public class DesktopSystemModule extends AbstractModule {
|
public class DesktopSystemModule extends AbstractModule {
|
||||||
|
|
||||||
protected void configure() {
|
protected void configure() {
|
||||||
@@ -15,6 +14,5 @@ public class DesktopSystemModule extends AbstractModule {
|
|||||||
bind(Timer.class).to(SystemTimer.class);
|
bind(Timer.class).to(SystemTimer.class);
|
||||||
if (OsUtils.isLinux())
|
if (OsUtils.isLinux())
|
||||||
bind(SeedProvider.class).to(LinuxSeedProvider.class);
|
bind(SeedProvider.class).to(LinuxSeedProvider.class);
|
||||||
bind(FileUtils.class).to(FileUtilsImpl.class);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,8 +3,6 @@ package org.briarproject;
|
|||||||
import com.google.inject.AbstractModule;
|
import com.google.inject.AbstractModule;
|
||||||
|
|
||||||
import org.briarproject.api.db.DatabaseConfig;
|
import org.briarproject.api.db.DatabaseConfig;
|
||||||
import org.briarproject.api.system.FileUtils;
|
|
||||||
import org.briarproject.system.FileUtilsImpl;
|
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
|
||||||
@@ -26,6 +24,5 @@ public class TestDatabaseModule extends AbstractModule {
|
|||||||
|
|
||||||
protected void configure() {
|
protected void configure() {
|
||||||
bind(DatabaseConfig.class).toInstance(config);
|
bind(DatabaseConfig.class).toInstance(config);
|
||||||
bind(FileUtils.class).to(FileUtilsImpl.class);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
package org.briarproject;
|
package org.briarproject;
|
||||||
|
|
||||||
import org.briarproject.api.UniqueId;
|
import org.briarproject.api.UniqueId;
|
||||||
|
import org.briarproject.util.FileUtils;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileOutputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.PrintStream;
|
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
|
||||||
@@ -15,27 +13,13 @@ public class TestUtils {
|
|||||||
new AtomicInteger((int) (Math.random() * 1000 * 1000));
|
new AtomicInteger((int) (Math.random() * 1000 * 1000));
|
||||||
private static final Random random = new Random();
|
private static final Random random = new Random();
|
||||||
|
|
||||||
public static void delete(File f) {
|
|
||||||
if (f.isDirectory()) for (File child : f.listFiles()) delete(child);
|
|
||||||
f.delete();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void createFile(File f, String s) throws IOException {
|
|
||||||
f.getParentFile().mkdirs();
|
|
||||||
PrintStream out = new PrintStream(new FileOutputStream(f));
|
|
||||||
out.print(s);
|
|
||||||
out.flush();
|
|
||||||
out.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static File getTestDirectory() {
|
public static File getTestDirectory() {
|
||||||
int name = nextTestDir.getAndIncrement();
|
int name = nextTestDir.getAndIncrement();
|
||||||
File testDir = new File("test.tmp/" + name);
|
return new File("test.tmp/" + name);
|
||||||
return testDir;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void deleteTestDirectory(File testDir) {
|
public static void deleteTestDirectory(File testDir) {
|
||||||
delete(testDir);
|
FileUtils.deleteFileOrDir(testDir);
|
||||||
testDir.getParentFile().delete(); // Delete if empty
|
testDir.getParentFile().delete(); // Delete if empty
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ import org.briarproject.api.messaging.Message;
|
|||||||
import org.briarproject.api.messaging.MessageId;
|
import org.briarproject.api.messaging.MessageId;
|
||||||
import org.briarproject.api.transport.Endpoint;
|
import org.briarproject.api.transport.Endpoint;
|
||||||
import org.briarproject.api.transport.TemporarySecret;
|
import org.briarproject.api.transport.TemporarySecret;
|
||||||
import org.briarproject.system.FileUtilsImpl;
|
|
||||||
import org.briarproject.system.SystemClock;
|
import org.briarproject.system.SystemClock;
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
@@ -1611,7 +1610,7 @@ public class H2DatabaseTest extends BriarTestCase {
|
|||||||
|
|
||||||
private Database<Connection> open(boolean resume) throws Exception {
|
private Database<Connection> open(boolean resume) throws Exception {
|
||||||
Database<Connection> db = new H2Database(new TestDatabaseConfig(testDir,
|
Database<Connection> db = new H2Database(new TestDatabaseConfig(testDir,
|
||||||
MAX_SIZE), new FileUtilsImpl(), new SystemClock());
|
MAX_SIZE), new SystemClock());
|
||||||
if (!resume) TestUtils.deleteTestDirectory(testDir);
|
if (!resume) TestUtils.deleteTestDirectory(testDir);
|
||||||
db.open();
|
db.open();
|
||||||
return db;
|
return db;
|
||||||
|
|||||||
@@ -5,10 +5,8 @@ import org.briarproject.TestUtils;
|
|||||||
import org.briarproject.api.ContactId;
|
import org.briarproject.api.ContactId;
|
||||||
import org.briarproject.api.plugins.TransportConnectionWriter;
|
import org.briarproject.api.plugins.TransportConnectionWriter;
|
||||||
import org.briarproject.api.plugins.simplex.SimplexPluginCallback;
|
import org.briarproject.api.plugins.simplex.SimplexPluginCallback;
|
||||||
import org.briarproject.api.system.FileUtils;
|
|
||||||
import org.briarproject.plugins.ImmediateExecutor;
|
import org.briarproject.plugins.ImmediateExecutor;
|
||||||
import org.briarproject.plugins.file.RemovableDriveMonitor.Callback;
|
import org.briarproject.plugins.file.RemovableDriveMonitor.Callback;
|
||||||
import org.briarproject.system.FileUtilsImpl;
|
|
||||||
import org.jmock.Expectations;
|
import org.jmock.Expectations;
|
||||||
import org.jmock.Mockery;
|
import org.jmock.Mockery;
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
@@ -34,7 +32,6 @@ public class RemovableDrivePluginTest extends BriarTestCase {
|
|||||||
|
|
||||||
private final File testDir = TestUtils.getTestDirectory();
|
private final File testDir = TestUtils.getTestDirectory();
|
||||||
private final ContactId contactId = new ContactId(234);
|
private final ContactId contactId = new ContactId(234);
|
||||||
private final FileUtils fileUtils = new FileUtilsImpl();
|
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
@@ -61,7 +58,7 @@ public class RemovableDrivePluginTest extends BriarTestCase {
|
|||||||
}});
|
}});
|
||||||
|
|
||||||
RemovableDrivePlugin plugin = new RemovableDrivePlugin(executor,
|
RemovableDrivePlugin plugin = new RemovableDrivePlugin(executor,
|
||||||
fileUtils, callback, finder, monitor, 0);
|
callback, finder, monitor, 0);
|
||||||
plugin.start();
|
plugin.start();
|
||||||
|
|
||||||
assertNull(plugin.createWriter(contactId));
|
assertNull(plugin.createWriter(contactId));
|
||||||
@@ -96,7 +93,7 @@ public class RemovableDrivePluginTest extends BriarTestCase {
|
|||||||
}});
|
}});
|
||||||
|
|
||||||
RemovableDrivePlugin plugin = new RemovableDrivePlugin(executor,
|
RemovableDrivePlugin plugin = new RemovableDrivePlugin(executor,
|
||||||
fileUtils, callback, finder, monitor, 0);
|
callback, finder, monitor, 0);
|
||||||
plugin.start();
|
plugin.start();
|
||||||
|
|
||||||
assertNull(plugin.createWriter(contactId));
|
assertNull(plugin.createWriter(contactId));
|
||||||
@@ -133,7 +130,7 @@ public class RemovableDrivePluginTest extends BriarTestCase {
|
|||||||
}});
|
}});
|
||||||
|
|
||||||
RemovableDrivePlugin plugin = new RemovableDrivePlugin(executor,
|
RemovableDrivePlugin plugin = new RemovableDrivePlugin(executor,
|
||||||
fileUtils, callback, finder, monitor, 0);
|
callback, finder, monitor, 0);
|
||||||
plugin.start();
|
plugin.start();
|
||||||
|
|
||||||
assertNull(plugin.createWriter(contactId));
|
assertNull(plugin.createWriter(contactId));
|
||||||
@@ -172,7 +169,7 @@ public class RemovableDrivePluginTest extends BriarTestCase {
|
|||||||
}});
|
}});
|
||||||
|
|
||||||
RemovableDrivePlugin plugin = new RemovableDrivePlugin(executor,
|
RemovableDrivePlugin plugin = new RemovableDrivePlugin(executor,
|
||||||
fileUtils, callback, finder, monitor, 0);
|
callback, finder, monitor, 0);
|
||||||
plugin.start();
|
plugin.start();
|
||||||
|
|
||||||
assertNull(plugin.createWriter(contactId));
|
assertNull(plugin.createWriter(contactId));
|
||||||
@@ -211,7 +208,7 @@ public class RemovableDrivePluginTest extends BriarTestCase {
|
|||||||
}});
|
}});
|
||||||
|
|
||||||
RemovableDrivePlugin plugin = new RemovableDrivePlugin(executor,
|
RemovableDrivePlugin plugin = new RemovableDrivePlugin(executor,
|
||||||
fileUtils, callback, finder, monitor, 0);
|
callback, finder, monitor, 0);
|
||||||
plugin.start();
|
plugin.start();
|
||||||
|
|
||||||
assertNotNull(plugin.createWriter(contactId));
|
assertNotNull(plugin.createWriter(contactId));
|
||||||
@@ -254,7 +251,7 @@ public class RemovableDrivePluginTest extends BriarTestCase {
|
|||||||
}});
|
}});
|
||||||
|
|
||||||
RemovableDrivePlugin plugin = new RemovableDrivePlugin(executor,
|
RemovableDrivePlugin plugin = new RemovableDrivePlugin(executor,
|
||||||
fileUtils, callback, finder, monitor, 0);
|
callback, finder, monitor, 0);
|
||||||
plugin.start();
|
plugin.start();
|
||||||
|
|
||||||
TransportConnectionWriter writer = plugin.createWriter(contactId);
|
TransportConnectionWriter writer = plugin.createWriter(contactId);
|
||||||
@@ -293,7 +290,7 @@ public class RemovableDrivePluginTest extends BriarTestCase {
|
|||||||
}});
|
}});
|
||||||
|
|
||||||
RemovableDrivePlugin plugin = new RemovableDrivePlugin(executor,
|
RemovableDrivePlugin plugin = new RemovableDrivePlugin(executor,
|
||||||
fileUtils, callback, finder, monitor, 0);
|
callback, finder, monitor, 0);
|
||||||
plugin.start();
|
plugin.start();
|
||||||
|
|
||||||
plugin.driveInserted(testDir);
|
plugin.driveInserted(testDir);
|
||||||
@@ -313,7 +310,7 @@ public class RemovableDrivePluginTest extends BriarTestCase {
|
|||||||
context.mock(RemovableDriveMonitor.class);
|
context.mock(RemovableDriveMonitor.class);
|
||||||
|
|
||||||
RemovableDrivePlugin plugin = new RemovableDrivePlugin(executor,
|
RemovableDrivePlugin plugin = new RemovableDrivePlugin(executor,
|
||||||
fileUtils, callback, finder, monitor, 0);
|
callback, finder, monitor, 0);
|
||||||
|
|
||||||
assertFalse(plugin.isPossibleConnectionFilename("abcdefg.dat"));
|
assertFalse(plugin.isPossibleConnectionFilename("abcdefg.dat"));
|
||||||
assertFalse(plugin.isPossibleConnectionFilename("abcdefghi.dat"));
|
assertFalse(plugin.isPossibleConnectionFilename("abcdefghi.dat"));
|
||||||
@@ -341,8 +338,7 @@ public class RemovableDrivePluginTest extends BriarTestCase {
|
|||||||
}});
|
}});
|
||||||
|
|
||||||
RemovableDrivePlugin plugin = new RemovableDrivePlugin(
|
RemovableDrivePlugin plugin = new RemovableDrivePlugin(
|
||||||
new ImmediateExecutor(), fileUtils, callback, finder, monitor,
|
new ImmediateExecutor(), callback, finder, monitor, 0);
|
||||||
0);
|
|
||||||
plugin.start();
|
plugin.start();
|
||||||
|
|
||||||
File f = new File(testDir, "abcdefgh.dat");
|
File f = new File(testDir, "abcdefgh.dat");
|
||||||
|
|||||||
Reference in New Issue
Block a user