Feature/timber logging (#143)

* Added Timber for logging

* Replaced Log calls with timber

* added timber to licenses list

* PR suggestions
merge-requests/3/head
Stephan Hagios 7 years ago committed by m2049r
parent 92d867fbaa
commit d2429da044

@ -45,6 +45,7 @@ dependencies {
compile 'me.dm7.barcodescanner:zxing:1.9.8'
compile "com.squareup.okhttp3:okhttp:$rootProject.ext.okHttpVersion"
compile "com.jakewharton.timber:timber:$rootProject.ext.timberVersion"
testCompile "junit:junit:$rootProject.ext.junitVersion"
testCompile "org.mockito:mockito-all:$rootProject.ext.mockitoVersion"

@ -13,6 +13,7 @@
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:name=".XmrWalletApplication"
android:theme="@style/MyMaterialTheme">
<activity

@ -22,7 +22,6 @@ import android.support.annotation.Nullable;
import android.support.design.widget.TextInputLayout;
import android.support.v4.app.Fragment;
import android.text.InputType;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
@ -40,8 +39,9 @@ import com.m2049r.xmrwallet.util.Helper;
import java.io.File;
import timber.log.Timber;
public class GenerateFragment extends Fragment {
static final String TAG = "GenerateFragment";
static final String TYPE = "type";
static final String TYPE_NEW = "new";
@ -366,7 +366,7 @@ public class GenerateFragment extends Fragment {
@Override
public void onResume() {
super.onResume();
Log.d(TAG, "onResume()");
Timber.d("onResume()");
activityCallback.setTitle(getString(R.string.generate_title) + " - " + getType());
activityCallback.setToolbarButton(Toolbar.BUTTON_BACK);
@ -383,7 +383,7 @@ public class GenerateFragment extends Fragment {
case TYPE_VIEWONLY:
return getString(R.string.generate_wallet_type_view);
default:
Log.e(TAG, "unknown type " + type);
Timber.e("unknown type %s", type);
return "?";
}
}

@ -21,7 +21,6 @@ import android.os.AsyncTask;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
@ -41,8 +40,9 @@ import com.m2049r.xmrwallet.model.WalletManager;
import com.m2049r.xmrwallet.util.Helper;
import com.m2049r.xmrwallet.util.MoneroThreadPoolExecutor;
import timber.log.Timber;
public class GenerateReviewFragment extends Fragment {
static final String TAG = "GenerateReviewFragment";
static final public String VIEW_TYPE_DETAILS = "details";
static final public String VIEW_TYPE_ACCEPT = "accept";
static final public String VIEW_TYPE_WALLET = "wallet";
@ -264,7 +264,7 @@ public class GenerateReviewFragment extends Fragment {
@Override
public void onResume() {
super.onResume();
Log.d(TAG, "onResume()");
Timber.d("onResume()");
String name = tvWalletName.getText().toString();
if (name.isEmpty()) name = null;
activityCallback.setTitle(name, getString(R.string.details_title));

@ -35,7 +35,6 @@ import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.MenuItem;
@ -67,10 +66,11 @@ import java.net.SocketAddress;
import java.nio.channels.FileChannel;
import java.util.Date;
import timber.log.Timber;
public class LoginActivity extends SecureActivity
implements LoginFragment.Listener, GenerateFragment.Listener,
GenerateReviewFragment.Listener, GenerateReviewFragment.AcceptListener, ReceiveFragment.Listener {
static final String TAG = "LoginActivity";
private static final String GENERATE_STACK = "gen";
static final int DAEMON_TIMEOUT = 500; // deamon must respond in 500ms
@ -99,7 +99,7 @@ public class LoginActivity extends SecureActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.d(TAG, "onCreate()");
Timber.d("onCreate()");
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
// we don't store anything ourselves
@ -125,7 +125,7 @@ public class LoginActivity extends SecureActivity
break;
case Toolbar.BUTTON_NONE:
default:
Log.e(TAG, "Button " + type + "pressed - how can this be?");
Timber.e("Button " + type + "pressed - how can this be?");
}
}
});
@ -133,7 +133,7 @@ public class LoginActivity extends SecureActivity
if (Helper.getWritePermission(this)) {
if (savedInstanceState == null) startLoginFragment();
} else {
Log.i(TAG, "Waiting for permissions");
Timber.i("Waiting for permissions");
}
}
@ -157,7 +157,7 @@ public class LoginActivity extends SecureActivity
WalletNode aWalletNode = new WalletNode(walletName, daemon, testnet);
new AsyncOpenWallet().execute(aWalletNode);
} catch (IllegalArgumentException ex) {
Log.e(TAG, ex.getLocalizedMessage());
Timber.e(ex.getLocalizedMessage());
Toast.makeText(this, ex.getLocalizedMessage(), Toast.LENGTH_SHORT).show();
return false;
}
@ -167,7 +167,7 @@ public class LoginActivity extends SecureActivity
@Override
public void onWalletDetails(final String walletName, boolean testnet) {
setNet(testnet);
Log.d(TAG, "details for wallet ." + walletName + ".");
Timber.d("details for wallet ." + walletName + ".");
if (checkServiceRunning()) return;
DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
@Override
@ -183,7 +183,7 @@ public class LoginActivity extends SecureActivity
}
});
} else { // this cannot really happen as we prefilter choices
Log.e(TAG, "Wallet missing: " + walletName);
Timber.e("Wallet missing: %s", walletName);
Toast.makeText(LoginActivity.this, getString(R.string.bad_wallet), Toast.LENGTH_SHORT).show();
}
break;
@ -205,7 +205,7 @@ public class LoginActivity extends SecureActivity
@Override
public void onWalletReceive(String walletName, boolean testnet) {
setNet(testnet);
Log.d(TAG, "receive for wallet ." + walletName + ".");
Timber.d("receive for wallet ." + walletName + ".");
if (checkServiceRunning()) return;
final File walletFile = Helper.getWalletFile(this, walletName);
if (WalletManager.getInstance().walletExists(walletFile)) {
@ -262,7 +262,7 @@ public class LoginActivity extends SecureActivity
@Override
public void onWalletRename(final String walletName) {
Log.d(TAG, "rename for wallet ." + walletName + ".");
Timber.d("rename for wallet ." + walletName + ".");
if (checkServiceRunning()) return;
LayoutInflater li = LayoutInflater.from(this);
View promptsView = li.inflate(R.layout.prompt_rename, null);
@ -345,7 +345,7 @@ public class LoginActivity extends SecureActivity
File backupFolder = new File(getStorageRoot(), "backups");
if (!backupFolder.exists()) {
if (!backupFolder.mkdir()) {
Log.e(TAG, "Cannot create backup dir " + backupFolder.getAbsolutePath());
Timber.e("Cannot create backup dir %s", backupFolder.getAbsolutePath());
return false;
}
// make folder visible over USB/MTP
@ -353,18 +353,18 @@ public class LoginActivity extends SecureActivity
}
File walletFile = Helper.getWalletFile(LoginActivity.this, walletName);
File backupFile = new File(backupFolder, walletName);
Log.d(TAG, "backup " + walletFile.getAbsolutePath() + " to " + backupFile.getAbsolutePath());
Timber.d("backup " + walletFile.getAbsolutePath() + " to " + backupFile.getAbsolutePath());
// TODO probably better to copy to a new file and then rename
// then if something fails we have the old backup at least
// or just create a new backup every time and keep n old backups
boolean success = copyWallet(walletFile, backupFile, true, true);
Log.d(TAG, "copyWallet is " + success);
Timber.d("copyWallet is %s", success);
return success;
}
@Override
public void onWalletBackup(String walletName) {
Log.d(TAG, "backup for wallet ." + walletName + ".");
Timber.d("backup for wallet ." + walletName + ".");
new AsyncBackup().execute(walletName);
}
@ -403,7 +403,7 @@ public class LoginActivity extends SecureActivity
@Override
public void onWalletArchive(final String walletName) {
Log.d(TAG, "archive for wallet ." + walletName + ".");
Timber.d("archive for wallet ." + walletName + ".");
if (checkServiceRunning()) return;
DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
@Override
@ -428,7 +428,7 @@ public class LoginActivity extends SecureActivity
}
void reloadWalletList() {
Log.d(TAG, "reloadWalletList()");
Timber.d("reloadWalletList()");
try {
LoginFragment loginFragment = (LoginFragment)
getSupportFragmentManager().findFragmentById(R.id.fragment_container);
@ -585,7 +585,7 @@ public class LoginActivity extends SecureActivity
@Override
protected void onPause() {
Log.d(TAG, "onPause()");
Timber.d("onPause()");
super.onPause();
}
@ -626,7 +626,7 @@ public class LoginActivity extends SecureActivity
@Override
protected void onResume() {
super.onResume();
Log.d(TAG, "onResume()");
Timber.d("onResume()");
// wait for WalletService to finish
if (WalletService.Running && (progressDialog == null)) {
// and show a progress dialog, but only if there isn't one already
@ -681,7 +681,7 @@ public class LoginActivity extends SecureActivity
}
void startWallet(String walletName, String walletPassword) {
Log.d(TAG, "startWallet()");
Timber.d("startWallet()");
Intent intent = new Intent(getApplicationContext(), WalletActivity.class);
intent.putExtra(WalletActivity.REQUEST_ID, walletName);
intent.putExtra(WalletActivity.REQUEST_PW, walletPassword);
@ -689,7 +689,7 @@ public class LoginActivity extends SecureActivity
}
void startDetails(File walletFile, String password, String type) {
Log.d(TAG, "startDetails()");
Timber.d("startDetails()");
Bundle b = new Bundle();
b.putString("path", walletFile.getAbsolutePath());
b.putString("password", password);
@ -698,7 +698,7 @@ public class LoginActivity extends SecureActivity
}
void startReceive(File walletFile, String password) {
Log.d(TAG, "startReceive()");
Timber.d("startReceive()");
Bundle b = new Bundle();
b.putString("path", walletFile.getAbsolutePath());
b.putString("password", password);
@ -707,7 +707,7 @@ public class LoginActivity extends SecureActivity
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) {
Log.d(TAG, "onRequestPermissionsResult()");
Timber.d("onRequestPermissionsResult()");
switch (requestCode) {
case Helper.PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE:
// If request is cancelled, the result arrays are empty.
@ -716,7 +716,7 @@ public class LoginActivity extends SecureActivity
startLoginFragment = true;
} else {
String msg = getString(R.string.message_strorage_not_permitted);
Log.e(TAG, msg);
Timber.e(msg);
Toast.makeText(this, msg, Toast.LENGTH_LONG).show();
//throw new IllegalStateException(msg);
}
@ -740,24 +740,24 @@ public class LoginActivity extends SecureActivity
Fragment fragment = new LoginFragment();
getSupportFragmentManager().beginTransaction()
.add(R.id.fragment_container, fragment).commit();
Log.d(TAG, "LoginFragment added");
Timber.d("LoginFragment added");
}
void startGenerateFragment(String type) {
Bundle extras = new Bundle();
extras.putString(GenerateFragment.TYPE, type);
replaceFragment(new GenerateFragment(), GENERATE_STACK, extras);
Log.d(TAG, "GenerateFragment placed");
Timber.d("GenerateFragment placed");
}
void startReviewFragment(Bundle extras) {
replaceFragment(new GenerateReviewFragment(), null, extras);
Log.d(TAG, "GenerateReviewFragment placed");
Timber.d("GenerateReviewFragment placed");
}
void startReceiveFragment(Bundle extras) {
replaceFragment(new ReceiveFragment(), null, extras);
Log.d(TAG, "ReceiveFragment placed");
Timber.d("ReceiveFragment placed");
}
void replaceFragment(Fragment newFragment, String stackName, Bundle extras) {
@ -803,7 +803,7 @@ public class LoginActivity extends SecureActivity
protected Boolean doInBackground(Void... params) {
File newWalletFolder = getStorageRoot();
if (!newWalletFolder.isDirectory()) {
Log.e(TAG, "Wallet dir " + newWalletFolder.getAbsolutePath() + "is not a directory");
Timber.e("Wallet dir " + newWalletFolder.getAbsolutePath() + "is not a directory");
return false;
}
File cacheFile = new File(newWalletFolder, walletName);
@ -811,7 +811,7 @@ public class LoginActivity extends SecureActivity
File addressFile = new File(newWalletFolder, walletName + ".address.txt");
if (cacheFile.exists() || keysFile.exists() || addressFile.exists()) {
Log.e(TAG, "Some wallet files already exist for " + cacheFile.getAbsolutePath());
Timber.e("Some wallet files already exist for %s", cacheFile.getAbsolutePath());
return false;
}
@ -820,7 +820,7 @@ public class LoginActivity extends SecureActivity
if (success) {
return true;
} else {
Log.e(TAG, "Could not create new wallet in " + newWalletFile.getAbsolutePath());
Timber.e("Could not create new wallet in %s", newWalletFile.getAbsolutePath());
return false;
}
}
@ -851,7 +851,7 @@ public class LoginActivity extends SecureActivity
getSupportFragmentManager().findFragmentById(R.id.fragment_container);
genFragment.walletGenerateError();
} catch (ClassCastException ex) {
Log.e(TAG, "walletGenerateError() but not in GenerateFragment");
Timber.e("walletGenerateError() but not in GenerateFragment");
}
}
@ -869,7 +869,7 @@ public class LoginActivity extends SecureActivity
.createWallet(aFile, password, MNEMONIC_LANGUAGE);
boolean success = (newWallet.getStatus() == Wallet.Status.Status_Ok);
if (!success) {
Log.e(TAG, newWallet.getErrorString());
Timber.e(newWallet.getErrorString());
toast(newWallet.getErrorString());
}
newWallet.close();
@ -889,7 +889,7 @@ public class LoginActivity extends SecureActivity
newWallet.setPassword(password);
success = success && newWallet.store();
} else {
Log.e(TAG, newWallet.getErrorString());
Timber.e(newWallet.getErrorString());
toast(newWallet.getErrorString());
}
newWallet.close();
@ -912,7 +912,7 @@ public class LoginActivity extends SecureActivity
newWallet.setPassword(password);
success = success && newWallet.store();
} else {
Log.e(TAG, newWallet.getErrorString());
Timber.e(newWallet.getErrorString());
toast(newWallet.getErrorString());
}
newWallet.close();
@ -943,17 +943,17 @@ public class LoginActivity extends SecureActivity
Toast.makeText(LoginActivity.this,
getString(R.string.generate_wallet_created), Toast.LENGTH_SHORT).show();
} else {
Log.e(TAG, "Wallet store failed to " + walletFile.getAbsolutePath());
Timber.e("Wallet store failed to %s", walletFile.getAbsolutePath());
Toast.makeText(LoginActivity.this, getString(R.string.generate_wallet_create_failed), Toast.LENGTH_LONG).show();
}
}
Wallet.Status testWallet(String path, String password) {
Log.d(TAG, "testing wallet " + path);
Timber.d("testing wallet %s", path);
Wallet aWallet = WalletManager.getInstance().openWallet(path, password);
if (aWallet == null) return Wallet.Status.Status_Error; // does this ever happen?
Wallet.Status status = aWallet.getStatus();
Log.d(TAG, "wallet tested " + aWallet.getStatus());
Timber.d("wallet tested %s", aWallet.getStatus());
aWallet.close();
return status;
}
@ -983,7 +983,7 @@ public class LoginActivity extends SecureActivity
try {
copyFile(new File(srcDir, srcName), new File(dstDir, dstName));
} catch (IOException ex) {
Log.d(TAG, "CACHE " + ignoreCacheError);
Timber.d("CACHE %s", ignoreCacheError);
if (!ignoreCacheError) { // ignore cache backup error if backing up (can be resynced)
throw ex;
}
@ -992,7 +992,7 @@ public class LoginActivity extends SecureActivity
copyFile(new File(srcDir, srcName + ".address.txt"), new File(dstDir, dstName + ".address.txt"));
success = true;
} catch (IOException ex) {
Log.e(TAG, "wallet copy failed: " + ex.getMessage());
Timber.e("wallet copy failed: %s", ex.getMessage());
// try to rollback
deleteWallet(dstWallet);
}
@ -1001,7 +1001,7 @@ public class LoginActivity extends SecureActivity
// do our best to delete as much as possible of the wallet files
boolean deleteWallet(File walletFile) {
Log.d(TAG, "deleteWallet " + walletFile.getAbsolutePath());
Timber.d("deleteWallet %s", walletFile.getAbsolutePath());
File dir = walletFile.getParentFile();
String name = walletFile.getName();
boolean success = true;
@ -1014,7 +1014,7 @@ public class LoginActivity extends SecureActivity
if (addressFile.exists()) {
success = addressFile.delete() && success;
}
Log.d(TAG, "deleteWallet is " + success);
Timber.d("deleteWallet is %s", success);
return success;
}
@ -1164,26 +1164,26 @@ public class LoginActivity extends SecureActivity
this.walletNode = params[0];
if (!walletNode.isValid()) return INVALID;
Log.d(TAG, "checking " + walletNode.getAddress());
Timber.d("checking %s", walletNode.getAddress());
try {
long timeDA = new Date().getTime();
SocketAddress address = new InetSocketAddress(walletNode.host, walletNode.port);
long timeDB = new Date().getTime();
Log.d(TAG, "Resolving " + walletNode.host + " took " + (timeDB - timeDA) + "ms.");
Timber.d("Resolving " + walletNode.host + " took " + (timeDB - timeDA) + "ms.");
Socket socket = new Socket();
long timeA = new Date().getTime();
socket.connect(address, LoginActivity.DAEMON_TIMEOUT);
socket.close();
long timeB = new Date().getTime();
long time = timeB - timeA;
Log.d(TAG, "Daemon " + walletNode.host + " is " + time + "ms away.");
Timber.d("Daemon " + walletNode.host + " is " + time + "ms away.");
return (time < LoginActivity.DAEMON_TIMEOUT ? OK : TIMEOUT);
} catch (IOException ex) {
Log.d(TAG, "Cannot reach daemon " + walletNode.host + "/" + walletNode.port + " because " + ex.getMessage());
Timber.d("Cannot reach daemon " + walletNode.host + "/" + walletNode.port + " because " + ex.getMessage());
return IOEX;
} catch (IllegalArgumentException ex) {
Log.d(TAG, "Cannot reach daemon " + walletNode.host + "/" + walletNode.port + " because " + ex.getMessage());
Timber.d("Cannot reach daemon " + walletNode.host + "/" + walletNode.port + " because " + ex.getMessage());
return INVALID;
}
}
@ -1197,7 +1197,7 @@ public class LoginActivity extends SecureActivity
dismissProgressDialog();
switch (result) {
case OK:
Log.d(TAG, "selected wallet is ." + walletNode.name + ".");
Timber.d("selected wallet is ." + walletNode.name + ".");
// now it's getting real, check if wallet exists
promptAndStart(walletNode);
break;

@ -24,7 +24,6 @@ import android.support.annotation.Nullable;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.app.Fragment;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
@ -55,9 +54,10 @@ import java.io.File;
import java.util.ArrayList;
import java.util.List;
import timber.log.Timber;
public class LoginFragment extends Fragment implements WalletInfoAdapter.OnInteractionListener,
View.OnClickListener {
private static final String TAG = "LoginFragment";
private WalletInfoAdapter adapter;
@ -112,7 +112,7 @@ public class LoginFragment extends Fragment implements WalletInfoAdapter.OnInter
@Override
public void onPause() {
Log.d(TAG, "onPause()");
Timber.d("onPause()");
savePrefs();
super.onPause();
}
@ -120,7 +120,7 @@ public class LoginFragment extends Fragment implements WalletInfoAdapter.OnInter
@Override
public void onResume() {
super.onResume();
Log.d(TAG, "onResume()");
Timber.d("onResume()");
activityCallback.setTitle(null);
activityCallback.setToolbarButton(Toolbar.BUTTON_DONATE);
activityCallback.showNet(isTestnet());
@ -129,7 +129,7 @@ public class LoginFragment extends Fragment implements WalletInfoAdapter.OnInter
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Log.d(TAG, "onCreateView");
Timber.d("onCreateView");
View view = inflater.inflate(R.layout.fragment_login, container, false);
ivGunther = (ImageView) view.findViewById(R.id.ivGunther);
@ -262,7 +262,7 @@ public class LoginFragment extends Fragment implements WalletInfoAdapter.OnInter
}
public void loadList() {
Log.d(TAG, "loadList()");
Timber.d("loadList()");
WalletManager mgr = WalletManager.getInstance();
List<WalletManager.WalletInfo> walletInfos =
mgr.findWallets(activityCallback.getStorageRoot());
@ -360,7 +360,7 @@ public class LoginFragment extends Fragment implements WalletInfoAdapter.OnInter
}
void savePrefs(boolean usePreviousState) {
Log.d(TAG, "SAVE / " + usePreviousState);
Timber.d("SAVE / %s", usePreviousState);
// save the daemon address for the net
boolean testnet = isTestnet() ^ usePreviousState;
String daemon = getDaemon();
@ -383,7 +383,7 @@ public class LoginFragment extends Fragment implements WalletInfoAdapter.OnInter
}
void setDaemon(NodeList nodeList) {
Log.d(TAG, "setDaemon() " + nodeList.toString());
Timber.d("setDaemon() %s", nodeList.toString());
String[] nodes = nodeList.getNodes().toArray(new String[0]);
nodeAdapter.clear();
nodeAdapter.addAll(nodes);

@ -27,7 +27,6 @@ import android.support.v4.app.Fragment;
import android.text.Editable;
import android.text.InputType;
import android.text.TextWatcher;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
@ -57,8 +56,9 @@ import com.m2049r.xmrwallet.util.MoneroThreadPoolExecutor;
import java.util.HashMap;
import java.util.Map;
import timber.log.Timber;
public class ReceiveFragment extends Fragment {
static final String TAG = "ReceiveFragment";
private ProgressBar pbProgress;
private TextView tvAddress;
@ -111,7 +111,7 @@ public class ReceiveFragment extends Fragment {
evAmount.setOnNewAmountListener(new ExchangeView.OnNewAmountListener() {
@Override
public void onNewAmount(String xmr) {
Log.d(TAG, "new amount = " + xmr);
Timber.d("new amount = %s", xmr);
generateQr();
}
});
@ -189,7 +189,7 @@ public class ReceiveFragment extends Fragment {
Bundle b = getArguments();
String address = b.getString("address");
String walletName = b.getString("name");
Log.d(TAG, "address=" + address + "/name=" + walletName);
Timber.d("%s/%s",address, walletName);
if (address == null) {
String path = b.getString("path");
String password = b.getString("password");
@ -227,7 +227,7 @@ public class ReceiveFragment extends Fragment {
@Override
public void onResume() {
super.onResume();
Log.d(TAG, "onResume()");
Timber.d("onResume()");
listenerCallback.setToolbarButton(Toolbar.BUTTON_BACK);
listenerCallback.setSubtitle(getString(R.string.receive_title));
generateQr();
@ -236,7 +236,7 @@ public class ReceiveFragment extends Fragment {
private boolean isLoaded = false;
private void show(String name, String address) {
Log.d(TAG, "name=" + name);
Timber.d("name=%s", name);
isLoaded = true;
listenerCallback.setTitle(name);
tvAddress.setText(address);
@ -296,14 +296,14 @@ public class ReceiveFragment extends Fragment {
}
private void generateQr() {
Log.d(TAG, "GENQR");
Timber.d("GENQR");
String address = tvAddress.getText().toString();
String paymentId = etPaymentId.getEditText().getText().toString();
String xmrAmount = evAmount.getAmount();
Log.d(TAG, xmrAmount + "/" + paymentId + "/" + address);
Timber.d("%s/%s/%s",xmrAmount, paymentId, address);
if ((xmrAmount == null) || !Wallet.isAddressValid(address, WalletManager.getInstance().isTestNet())) {
clearQR();
Log.d(TAG, "CLEARQR");
Timber.d("CLEARQR");
return;
}
StringBuffer sb = new StringBuffer();
@ -329,7 +329,7 @@ public class ReceiveFragment extends Fragment {
Bitmap qr = generate(text, size, size);
if (qr != null) {
setQR(qr);
Log.d(TAG, "SETQR");
Timber.d("SETQR");
etDummy.requestFocus();
Helper.hideKeyboard(getActivity());
}
@ -419,7 +419,7 @@ public class ReceiveFragment extends Fragment {
@Override
public void onPause() {
Log.d(TAG, "onPause()");
Timber.d("onPause()");
super.onPause();
}
}

@ -20,7 +20,6 @@ import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -30,9 +29,9 @@ import com.google.zxing.BarcodeFormat;
import com.google.zxing.Result;
import me.dm7.barcodescanner.zxing.ZXingScannerView;
import timber.log.Timber;
public class ScannerFragment extends Fragment implements ZXingScannerView.ResultHandler {
static final String TAG = "ScannerFragment";
private Listener activityCallback;
@ -44,7 +43,7 @@ public class ScannerFragment extends Fragment implements ZXingScannerView.Result
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Log.d(TAG, "onCreateView");
Timber.d("onCreateView");
mScannerView = new ZXingScannerView(getActivity());
return mScannerView;
}
@ -52,7 +51,7 @@ public class ScannerFragment extends Fragment implements ZXingScannerView.Result
@Override
public void onResume() {
super.onResume();
Log.d(TAG, "onResume");
Timber.d("onResume");
mScannerView.setResultHandler(this);
mScannerView.startCamera();
}
@ -91,7 +90,7 @@ public class ScannerFragment extends Fragment implements ZXingScannerView.Result
@Override
public void onPause() {
Log.d(TAG, "onPause");
Timber.d("onPause");
mScannerView.stopCamera();
super.onPause();
}

@ -27,7 +27,6 @@ import android.support.v7.app.AlertDialog;
import android.text.Editable;
import android.text.InputType;
import android.text.TextWatcher;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
@ -53,8 +52,9 @@ import com.m2049r.xmrwallet.util.BarcodeData;
import com.m2049r.xmrwallet.util.Helper;
import com.m2049r.xmrwallet.util.TxData;
import timber.log.Timber;
public class SendFragment extends Fragment {
static final String TAG = "SendFragment";
private EditText etDummy;
@ -352,7 +352,7 @@ public class SendFragment extends Fragment {
int mixin = Mixins[sMixin.getSelectedItemPosition()];
int priorityIndex = sPriority.getSelectedItemPosition();
PendingTransaction.Priority priority = Priorities[priorityIndex];
Log.d(TAG, dst_addr + "/" + paymentId + "/" + amount + "/" + mixin + "/" + priority.toString());
Timber.d("%s/%s/%d/%d/%s", dst_addr, paymentId, amount, mixin, priority.toString());
TxData txData = new TxData(
dst_addr,
paymentId,
@ -426,12 +426,12 @@ public class SendFragment extends Fragment {
@Override
public void onResume() {
super.onResume();
Log.d(TAG, "onResume");
Timber.d("onResume");
activityCallback.setToolbarButton(Toolbar.BUTTON_BACK);
activityCallback.setSubtitle(getString(R.string.send_title));
BarcodeData data = activityCallback.popScannedData();
if (data != null) {
Log.d(TAG, "GOT DATA");
Timber.d("GOT DATA");
String scannedAddress = data.address;
if (scannedAddress != null) {
etAddress.getEditText().setText(scannedAddress);

@ -44,7 +44,6 @@ import java.util.Set;
import java.util.TimeZone;
public class TxFragment extends Fragment {
static final String TAG = "TxFragment";
static public final String ARG_INFO = "info";

@ -31,7 +31,6 @@ import android.support.annotation.NonNull;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.util.Log;
import android.view.MenuItem;
import android.widget.Toast;
@ -50,12 +49,13 @@ import com.m2049r.xmrwallet.util.TxData;
import java.util.HashMap;
import java.util.Map;
import timber.log.Timber;
public class WalletActivity extends SecureActivity implements WalletFragment.Listener,
WalletService.Observer, SendFragment.Listener, TxFragment.Listener,
GenerateReviewFragment.ListenerWithWallet,
GenerateReviewFragment.Listener,
ScannerFragment.Listener, ReceiveFragment.Listener {
private static final String TAG = "WalletActivity";
public static final String REQUEST_ID = "id";
public static final String REQUEST_PW = "pw";
@ -74,7 +74,7 @@ public class WalletActivity extends SecureActivity implements WalletFragment.Lis
@Override
public void setTitle(String title) {
Log.d(TAG, "setTitle:" + title + ".");
Timber.d("setTitle:%s.", title);
toolbar.setTitle(title);
}
@ -108,7 +108,7 @@ public class WalletActivity extends SecureActivity implements WalletFragment.Lis
@Override
protected void onStart() {
super.onStart();
Log.d(TAG, "onStart()");
Timber.d( "onStart()");
}
private void startWalletService() {
@ -131,13 +131,13 @@ public class WalletActivity extends SecureActivity implements WalletFragment.Lis
@Override
protected void onStop() {
Log.d(TAG, "onStop()");
Timber.d("onStop()");
super.onStop();
}
@Override
protected void onDestroy() {
Log.d(TAG, "onDestroy()");
Timber.d("onDestroy()");
stopWalletService();
super.onDestroy();
}
@ -179,7 +179,7 @@ public class WalletActivity extends SecureActivity implements WalletFragment.Lis
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.d(TAG, "onCreate()");
Timber.d("onCreate()");
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
// activity restarted
@ -208,7 +208,7 @@ public class WalletActivity extends SecureActivity implements WalletFragment.Lis
Toast.makeText(WalletActivity.this, getString(R.string.label_donate), Toast.LENGTH_SHORT).show();
case Toolbar.BUTTON_NONE:
default:
Log.e(TAG, "Button " + type + "pressed - how can this be?");
Timber.e("Button " + type + "pressed - how can this be?");
}
}
});
@ -222,11 +222,11 @@ public class WalletActivity extends SecureActivity implements WalletFragment.Lis
Fragment walletFragment = new WalletFragment();
getSupportFragmentManager().beginTransaction()
.add(R.id.fragment_container, walletFragment, WalletFragment.TAG).commit();
Log.d(TAG, "fragment added");
.add(R.id.fragment_container, walletFragment, WalletFragment.class.getName()).commit();
Timber.d("fragment added");
startWalletService();
Log.d(TAG, "onCreate() done.");
Timber.d("onCreate() done.");
}
public Wallet getWallet() {
@ -254,7 +254,7 @@ public class WalletActivity extends SecureActivity implements WalletFragment.Lis
}
}
updateProgress();
Log.d(TAG, "CONNECTED");
Timber.d( "CONNECTED");
}
public void onServiceDisconnected(ComponentName className) {
@ -264,7 +264,7 @@ public class WalletActivity extends SecureActivity implements WalletFragment.Lis
// see this happen.
mBoundService = null;
setTitle(getString(R.string.wallet_activity_name), getString(R.string.status_wallet_disconnected));
Log.d(TAG, "DISCONNECTED");
Timber.d( "DISCONNECTED");
}
};
@ -280,7 +280,7 @@ public class WalletActivity extends SecureActivity implements WalletFragment.Lis
startService(intent);
bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
mIsBound = true;
Log.d(TAG, "BOUND");
Timber.d( "BOUND");
}
void disconnectWalletService() {
@ -289,20 +289,20 @@ public class WalletActivity extends SecureActivity implements WalletFragment.Lis
mBoundService.setObserver(null);
unbindService(mConnection);
mIsBound = false;
Log.d(TAG, "UNBOUND");
Timber.d( "UNBOUND");
}
}
@Override
protected void onPause() {
Log.d(TAG, "onPause()");
Timber.d( "onPause()");
super.onPause();
}
@Override
protected void onResume() {
super.onResume();
Log.d(TAG, "onResume()");
Timber.d( "onResume()");
}
private PowerManager.WakeLock wl = null;
@ -313,9 +313,9 @@ public class WalletActivity extends SecureActivity implements WalletFragment.Lis
this.wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, getString(R.string.app_name));
try {
wl.acquire();
Log.d(TAG, "WakeLock acquired");
Timber.d( "WakeLock acquired");
} catch (SecurityException ex) {
Log.w(TAG, "WakeLock NOT acquired: " + ex.getLocalizedMessage());
Timber.w( "WakeLock NOT acquired: %s", ex.getLocalizedMessage());
wl = null;
}
}
@ -324,7 +324,7 @@ public class WalletActivity extends SecureActivity implements WalletFragment.Lis
if ((wl == null) || !wl.isHeld()) return;
wl.release();
wl = null;
Log.d(TAG, "WakeLock released");
Timber.d( "WakeLock released");
}
public void saveWallet() {
@ -332,9 +332,9 @@ public class WalletActivity extends SecureActivity implements WalletFragment.Lis
Intent intent = new Intent(getApplicationContext(), WalletService.class);
intent.putExtra(WalletService.REQUEST, WalletService.REQUEST_CMD_STORE);
startService(intent);
Log.d(TAG, "STORE request sent");
Timber.d( "STORE request sent");
} else {
Log.e(TAG, "Service not bound");
Timber.e( "Service not bound");
}
}
@ -374,7 +374,7 @@ public class WalletActivity extends SecureActivity implements WalletFragment.Lis
try {
onRefreshed(getWallet(), true);
} catch (IllegalStateException ex) {
Log.e(TAG, ex.getLocalizedMessage());
Timber.e( ex.getLocalizedMessage());
}
}
@ -385,12 +385,12 @@ public class WalletActivity extends SecureActivity implements WalletFragment.Lis
// refresh and return if successful
@Override
public boolean onRefreshed(final Wallet wallet, final boolean full) {
Log.d(TAG, "onRefreshed()");
Timber.d( "onRefreshed()");
try {
final WalletFragment walletFragment = (WalletFragment)
getSupportFragmentManager().findFragmentByTag(WalletFragment.TAG);
getSupportFragmentManager().findFragmentByTag(WalletFragment.class.getName());
if (wallet.isSynchronized()) {
Log.d(TAG, "onRefreshed() synced");
Timber.d("onRefreshed() synced");
releaseWakeLock(); // the idea is to stay awake until synced
if (!synced) { // first sync
onProgress(-1);
@ -411,7 +411,7 @@ public class WalletActivity extends SecureActivity implements WalletFragment.Lis
return true;
} catch (ClassCastException ex) {
// not in wallet fragment (probably send monero)
Log.d(TAG, ex.getLocalizedMessage());
Timber.d(ex.getLocalizedMessage());
// keep calm and carry on
}
return false;
@ -478,7 +478,7 @@ public class WalletActivity extends SecureActivity implements WalletFragment.Lis
});
} catch (ClassCastException ex) {
// not in spend fragment
Log.d(TAG, ex.getLocalizedMessage());
Timber.d(ex.getLocalizedMessage());
// don't need the transaction any more
getWallet().disposePendingTransaction();
}
@ -513,7 +513,7 @@ public class WalletActivity extends SecureActivity implements WalletFragment.Lis
});
} catch (ClassCastException ex) {
// not in tx fragment
Log.d(TAG, ex.getLocalizedMessage());
Timber.d(ex.getLocalizedMessage());
// never min
}
}
@ -522,7 +522,7 @@ public class WalletActivity extends SecureActivity implements WalletFragment.Lis
public void onProgress(final String text) {
try {
final WalletFragment walletFragment = (WalletFragment)
getSupportFragmentManager().findFragmentByTag(WalletFragment.TAG);
getSupportFragmentManager().findFragmentByTag(WalletFragment.class.getName());
runOnUiThread(new Runnable() {
public void run() {
walletFragment.setProgress(text);
@ -530,7 +530,7 @@ public class WalletActivity extends SecureActivity implements WalletFragment.Lis
});
} catch (ClassCastException ex) {
// not in wallet fragment (probably send monero)
Log.d(TAG, ex.getLocalizedMessage());
Timber.d(ex.getLocalizedMessage());
// keep calm and carry on
}
}
@ -539,7 +539,7 @@ public class WalletActivity extends SecureActivity implements WalletFragment.Lis
public void onProgress(final int n) {
try {
final WalletFragment walletFragment = (WalletFragment)
getSupportFragmentManager().findFragmentByTag(WalletFragment.TAG);
getSupportFragmentManager().findFragmentByTag(WalletFragment.class.getName());
runOnUiThread(new Runnable() {
public void run() {
walletFragment.setProgress(n);
@ -547,7 +547,7 @@ public class WalletActivity extends SecureActivity implements WalletFragment.Lis
});
} catch (ClassCastException ex) {
// not in wallet fragment (probably send monero)
Log.d(TAG, ex.getLocalizedMessage());
Timber.d(ex.getLocalizedMessage());
// keep calm and carry on
}
}
@ -571,9 +571,9 @@ public class WalletActivity extends SecureActivity implements WalletFragment.Lis
intent.putExtra(WalletService.REQUEST, WalletService.REQUEST_CMD_SEND);
intent.putExtra(WalletService.REQUEST_CMD_SEND_NOTES, notes);
startService(intent);
Log.d(TAG, "SEND TX request sent");
Timber.d("SEND TX request sent");
} else {
Log.e(TAG, "Service not bound");
Timber.e("Service not bound");
}
}
@ -586,9 +586,9 @@ public class WalletActivity extends SecureActivity implements WalletFragment.Lis
intent.putExtra(WalletService.REQUEST_CMD_SETNOTE_TX, txId);
intent.putExtra(WalletService.REQUEST_CMD_SETNOTE_NOTES, notes);
startService(intent);
Log.d(TAG, "SET NOTE request sent");
Timber.d("SET NOTE request sent");
} else {
Log.e(TAG, "Service not bound");
Timber.e("Service not bound");
}
}
@ -600,9 +600,9 @@ public class WalletActivity extends SecureActivity implements WalletFragment.Lis
intent.putExtra(WalletService.REQUEST, WalletService.REQUEST_CMD_TX);
intent.putExtra(WalletService.REQUEST_CMD_TX_DATA, txData);
startService(intent);
Log.d(TAG, "CREATE TX request sent");
Timber.d("CREATE TX request sent");
} else {
Log.e(TAG, "Service not bound");
Timber.e("Service not bound");
}
}
@ -665,7 +665,7 @@ public class WalletActivity extends SecureActivity implements WalletFragment.Lis
fragment.shareTxInfo();
} catch (ClassCastException ex) {
// not in wallet fragment
Log.e(TAG, ex.getLocalizedMessage());
Timber.e(ex.getLocalizedMessage());
// keep calm and carry on
}
}
@ -697,7 +697,7 @@ public class WalletActivity extends SecureActivity implements WalletFragment.Lis
if (Helper.getCameraPermission(this)) {
startScanFragment();
} else {
Log.i(TAG, "Waiting for permissions");
Timber.i("Waiting for permissions");
}
}
@ -770,7 +770,7 @@ public class WalletActivity extends SecureActivity implements WalletFragment.Lis
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[],
@NonNull int[] grantResults) {
Log.d(TAG, "onRequestPermissionsResult()");
Timber.d("onRequestPermissionsResult()");
switch (requestCode) {
case Helper.PERMISSIONS_REQUEST_CAMERA:
// If request is cancelled, the result arrays are empty.
@ -779,7 +779,7 @@ public class WalletActivity extends SecureActivity implements WalletFragment.Lis
startScanFragment = true;
} else {
String msg = getString(R.string.message_camera_not_permitted);
Log.e(TAG, msg);
Timber.e(msg);
Toast.makeText(this, msg, Toast.LENGTH_LONG).show();
}
break;
@ -793,7 +793,7 @@ public class WalletActivity extends SecureActivity implements WalletFragment.Lis
}
void startReceive(String address) {
Log.d(TAG, "startReceive()");
Timber.d( "startReceive()");
Bundle b = new Bundle();
b.putString("address", address);
b.putString("name", getWalletName());
@ -802,6 +802,6 @@ public class WalletActivity extends SecureActivity implements WalletFragment.Lis
void startReceiveFragment(Bundle extras) {
replaceFragment(new ReceiveFragment(), null, extras);
Log.d(TAG, "ReceiveFragment placed");
Timber.d( "ReceiveFragment placed");
}
}

@ -23,7 +23,6 @@ import android.os.Looper;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
@ -52,11 +51,10 @@ import com.m2049r.xmrwallet.util.OkHttpClientSingleton;
import java.text.NumberFormat;
import java.util.List;
import okhttp3.OkHttpClient;
import timber.log.Timber;
public class WalletFragment extends Fragment
implements TransactionInfoAdapter.OnInteractionListener {
public static final String TAG = "WalletFragment";
private TransactionInfoAdapter adapter;
private NumberFormat formatter = NumberFormat.getInstance();
@ -190,7 +188,7 @@ public class WalletFragment extends Fragment
@Override
public void onError(final Exception e) {
Log.e(TAG, e.getLocalizedMessage());
Timber.e(e.getLocalizedMessage());
if (isAdded())
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
@ -232,14 +230,14 @@ public class WalletFragment extends Fragment
public void exchange(final ExchangeRate exchangeRate) {
hideExchanging();
if (!"XMR".equals(exchangeRate.getBaseCurrency())) {
Log.e(TAG, "Not XMR");
Timber.e("Not XMR");
sCurrency.setSelection(0, true);
balanceCurrency = "XMR";
balanceRate = 1.0;
} else {
int spinnerPosition = ((ArrayAdapter) sCurrency.getAdapter()).getPosition(exchangeRate.getQuoteCurrency());
if (spinnerPosition < 0) { // requested currency not in list
Log.e(TAG, "Requested currency not in list " + exchangeRate.getQuoteCurrency());
Timber.e("Requested currency not in list %s", exchangeRate.getQuoteCurrency());
sCurrency.setSelection(0, true);
} else {
sCurrency.setSelection(spinnerPosition, true);
@ -259,7 +257,7 @@ public class WalletFragment extends Fragment
// called from activity
public void onRefreshed(final Wallet wallet, final boolean full) {
Log.d(TAG, "onRefreshed()");
Timber.d("onRefreshed()");
if (full) {
List<TransactionInfo> list = wallet.getHistory().getAll();
adapter.setInfos(list);
@ -318,7 +316,7 @@ public class WalletFragment extends Fragment
String watchOnly = (wallet.isWatchOnly() ? getString(R.string.label_watchonly) : "");
walletSubtitle = wallet.getAddress().substring(0, 16) + "…" + watchOnly;
activityCallback.setTitle(walletTitle, walletSubtitle);
Log.d(TAG, "wallet title is " + walletTitle);
Timber.d("wallet title is %s", walletTitle);
}
private long firstBlock = 0;
@ -328,7 +326,7 @@ public class WalletFragment extends Fragment
private void updateStatus(Wallet wallet) {
if (!isAdded()) return;
Log.d(TAG, "updateStatus()");
Timber.d("updateStatus()");
if (walletTitle == null) {
setActivityTitle(wallet);
}
@ -413,7 +411,7 @@ public class WalletFragment extends Fragment
@Override
public void onResume() {
super.onResume();
Log.d(TAG, "onResume()");
Timber.d("onResume()");
activityCallback.setTitle(walletTitle, walletSubtitle);
activityCallback.setToolbarButton(Toolbar.BUTTON_CLOSE);
setProgress(syncProgress);

@ -0,0 +1,17 @@
package com.m2049r.xmrwallet;
import android.app.Application;
import timber.log.Timber;
public class XmrWalletApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
if (BuildConfig.DEBUG) {
Timber.plant(new Timber.DebugTree());
}
}
}

@ -25,7 +25,6 @@ import android.support.design.widget.TextInputLayout;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
@ -48,10 +47,9 @@ import com.m2049r.xmrwallet.util.OkHttpClientSingleton;
import java.util.Locale;
import okhttp3.OkHttpClient;
import timber.log.Timber;
public class ExchangeView extends LinearLayout {
static final String TAG = "ExchangeView";
public boolean focus() {
return etAmount.requestFocus();
@ -254,7 +252,7 @@ public class ExchangeView extends LinearLayout {
public boolean checkEnteredAmount() {
boolean ok = true;
Log.d(TAG, "checkEnteredAmount");
Timber.d("checkEnteredAmount");
String amountEntry = etAmount.getEditText().getText().toString();
if (!amountEntry.isEmpty()) {
try {
@ -307,7 +305,7 @@ public class ExchangeView extends LinearLayout {
@Override
public void onError(final Exception e) {
Log.e(TAG, e.getLocalizedMessage());
Timber.e(e.getLocalizedMessage());
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
@ -338,7 +336,7 @@ public class ExchangeView extends LinearLayout {
}
tvAmountB.setText(xmrAmount);
} else { // no XMR currency - cannot happen!
Log.e(TAG, "No XMR currency!");
Timber.e("No XMR currency!");
setXmr(null);
notXmrAmount = null;
return;
@ -346,7 +344,7 @@ public class ExchangeView extends LinearLayout {
}
boolean prepareExchange() {
Log.d(TAG, "prepareExchange()");
Timber.d("prepareExchange()");
if (checkEnteredAmount()) {
String enteredAmount = etAmount.getEditText().getText().toString();
if (!enteredAmount.isEmpty()) {
@ -356,7 +354,7 @@ public class ExchangeView extends LinearLayout {
cleanAmount = Helper.getDisplayAmount(Wallet.getAmountFromString(enteredAmount));
setXmr(cleanAmount);
notXmrAmount = null;
Log.d(TAG, "cleanAmount = " + cleanAmount);
Timber.d("cleanAmount = %s", cleanAmount);
} else if (getCurrencyB() == 0) { // we use B & 0 here for the else below ...
// sanitize the input
double amountA = Double.parseDouble(enteredAmount);
@ -364,12 +362,12 @@ public class ExchangeView extends LinearLayout {
setXmr(null);
notXmrAmount = cleanAmount;
} else { // no XMR currency - cannot happen!
Log.e(TAG, "No XMR currency!");
Timber.e("No XMR currency!");
setXmr(null);
notXmrAmount = null;
return false;
}
Log.d(TAG, "prepareExchange() " + cleanAmount);
Timber.d("prepareExchange() %s", cleanAmount);
//etAmount.getEditText().setText(cleanAmount); // display what we use
} else {
setXmr("");
@ -399,7 +397,7 @@ public class ExchangeView extends LinearLayout {
if (!exchangeRate.getBaseCurrency().equals(enteredCurrencyA)
|| !exchangeRate.getQuoteCurrency().equals(enteredCurrencyB)) {
// something's wrong
Log.e(TAG, "Currencies don't match!");
Timber.e("Currencies don't match!");
return;
}
if (prepareExchange()) {

@ -19,7 +19,6 @@ package com.m2049r.xmrwallet.layout;
import android.content.Context;
import android.support.v4.content.ContextCompat;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -37,8 +36,9 @@ import java.util.Date;
import java.util.List;
import java.util.TimeZone;
import timber.log.Timber;
public class TransactionInfoAdapter extends RecyclerView.Adapter<TransactionInfoAdapter.ViewHolder> {
private static final String TAG = "TransactionInfoAdapter";
private final SimpleDateFormat DATETIME_FORMATTER = new SimpleDateFormat("yyyy-MM-dd HH:mm");
@ -96,11 +96,11 @@ public class TransactionInfoAdapter extends RecyclerView.Adapter<TransactionInfo
// as the TransactionInfo items are always recreated, we cannot recycle
this.infoItems.clear();
if (data != null) {
Log.d(TAG, "setInfos " + data.size());
Timber.d("setInfos %s", data.size());
infoItems.addAll(data);
Collections.sort(infoItems);
} else {
Log.d(TAG, "setInfos null");
Timber.d("setInfos null");
}
notifyDataSetChanged();
}

@ -19,7 +19,6 @@ package com.m2049r.xmrwallet.layout;
import android.content.Context;
import android.support.v7.widget.PopupMenu;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
@ -38,8 +37,9 @@ import java.util.Date;
import java.util.List;
import java.util.TimeZone;
import timber.log.Timber;
public class WalletInfoAdapter extends RecyclerView.Adapter<WalletInfoAdapter.ViewHolder> {
private static final String TAG = "WalletInfoAdapter";
private final SimpleDateFormat DATETIME_FORMATTER = new SimpleDateFormat("yyyy-MM-dd HH:mm");
@ -89,11 +89,11 @@ public class WalletInfoAdapter extends RecyclerView.Adapter<WalletInfoAdapter.Vi
// as the WalletInfo items are always recreated, we cannot recycle
infoItems.clear();
if (data != null) {
Log.d(TAG, "setInfos " + data.size());
Timber.d("setInfos %s", data.size());
infoItems.addAll(data);
Collections.sort(infoItems);
} else {
Log.d(TAG, "setInfos null");
Timber.d("setInfos null");
}
notifyDataSetChanged();
}

@ -16,21 +16,17 @@
package com.m2049r.xmrwallet.model;
import android.support.annotation.NonNull;
import android.util.Log;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import timber.log.Timber;
public class WalletManager {
private final static String TAG = "WalletManager";
static {
System.loadLibrary("monerujo");
@ -54,7 +50,7 @@ public class WalletManager {
}
private void manageWallet(Wallet wallet) {
Log.d(TAG, "Managing " + wallet.getName());
Timber.d("Managing %s", wallet.getName());
managedWallet = wallet;
}
@ -68,7 +64,7 @@ public class WalletManager {
if (getWallet() != wallet) {
throw new IllegalStateException(wallet.getName() + " not under management!");
}
Log.d(TAG, "Unmanaging " + managedWallet.getName());
Timber.d("Unmanaging %s", managedWallet.getName());
managedWallet = null;
}
@ -165,14 +161,14 @@ public class WalletManager {
info.path = wallet.getParentFile();
info.name = wallet.getName();
File addressFile = new File(info.path, info.name + ".address.txt");
//Log.d(TAG, addressFile.getAbsolutePath());
//Timber.d(addressFile.getAbsolutePath());
info.address = "??????";
BufferedReader addressReader = null;
try {
addressReader = new BufferedReader(new FileReader(addressFile));
info.address = addressReader.readLine();
} catch (IOException ex) {
Log.d(TAG, ex.getLocalizedMessage());
Timber.d(ex.getLocalizedMessage());
} finally {
if (addressReader != null) {
try {
@ -187,7 +183,7 @@ public class WalletManager {
public List<WalletInfo> findWallets(File path) {
List<WalletInfo> wallets = new ArrayList<>();
Log.d(TAG, "Scanning: " + path.getAbsolutePath());
Timber.d("Scanning: %s", path.getAbsolutePath());
File[] found = path.listFiles(new FilenameFilter() {
public boolean accept(File dir, String filename) {
return filename.endsWith(".keys");
@ -217,7 +213,7 @@ public class WalletManager {
}
public void setDaemon(String address, boolean testnet, String username, String password) {
//Log.d(TAG, "SETDAEMON " + username + "/" + password + "/" + address);
//Timber.d("SETDAEMON " + username + "/" + password + "/" + address);
this.daemonAddress = address;
this.testnet = testnet;
this.daemonUsername = username;

@ -27,7 +27,6 @@ import android.os.IBinder;
import android.os.Looper;
import android.os.Message;
import android.os.Process;
import android.util.Log;
import com.m2049r.xmrwallet.R;
import com.m2049r.xmrwallet.WalletActivity;
@ -38,10 +37,11 @@ import com.m2049r.xmrwallet.model.WalletManager;
import com.m2049r.xmrwallet.util.Helper;
import com.m2049r.xmrwallet.util.TxData;
import timber.log.Timber;
public class WalletService extends Service {
public static boolean Running = false;
final static String TAG = "WalletService";
final static int NOTIFICATION_ID = 2049;
public static final String REQUEST_WALLET = "wallet";
@ -73,7 +73,7 @@ public class WalletService extends Service {
boolean updated = true;
void start() {
Log.d(TAG, "MyWalletListener.start()");
Timber.d("MyWalletListener.start()");
Wallet wallet = getWallet();
if (wallet == null) throw new IllegalStateException("No wallet!");
//acquireWakeLock();
@ -82,7 +82,7 @@ public class WalletService extends Service {
}
void stop() {
Log.d(TAG, "MyWalletListener.stop()");
Timber.d("MyWalletListener.stop()");
Wallet wallet = getWallet();
if (wallet == null) throw new IllegalStateException("No wallet!");
wallet.pauseRefresh();
@ -92,15 +92,15 @@ public class WalletService extends Service {
// WalletListener callbacks
public void moneySpent(String txId, long amount) {
Log.d(TAG, "moneySpent() " + amount + " @ " + txId);
Timber.d("moneySpent() %d @ %s", amount, txId);
}
public void moneyReceived(String txId, long amount) {
Log.d(TAG, "moneyReceived() " + amount + " @ " + txId);
Timber.d("moneyReceived() %d @ %s",amount, txId);
}
public void unconfirmedMoneyReceived(String txId, long amount) {
Log.d(TAG, "unconfirmedMoneyReceived() " + amount + " @ " + txId);
Timber.d("unconfirmedMoneyReceived() %d @ %s", amount, txId);
}
long lastBlockTime = 0;
@ -111,7 +111,7 @@ public class WalletService extends Service {
if (wallet == null) throw new IllegalStateException("No wallet!");
// don't flood with an update for every block ...
if (lastBlockTime < System.currentTimeMillis() - 2000) {
Log.d(TAG, "newBlock() @" + height + " with observer " + observer);
Timber.d("newBlock() @ %d with observer %s", height, observer);
lastBlockTime = System.currentTimeMillis();
if (observer != null) {
boolean fullRefresh = false;
@ -134,14 +134,14 @@ public class WalletService extends Service {
}
public void updated() {
Log.d(TAG, "updated()");
Timber.d("updated()");
Wallet wallet = getWallet();
if (wallet == null) throw new IllegalStateException("No wallet!");
updated = true;
}
public void refreshed() {
Log.d(TAG, "refreshed()");
Timber.d("refreshed()");
Wallet wallet = getWallet();
if (wallet == null) throw new IllegalStateException("No wallet!");
if (updated) {
@ -180,7 +180,7 @@ public class WalletService extends Service {
}
}
}
//Log.d(TAG, "updated daemon status: " + daemonHeight + "/" + connectionStatus.toString());
//Timber.d("updated daemon status: " + daemonHeight + "/" + connectionStatus.toString());
}
public long getDaemonHeight() {
@ -200,7 +200,7 @@ public class WalletService extends Service {
public void setObserver(Observer anObserver) {
observer = anObserver;
Log.d(TAG, "setObserver " + observer);
Timber.d("setObserver %s", observer);
}
public interface Observer {
@ -266,9 +266,9 @@ public class WalletService extends Service {
@Override
public void handleMessage(Message msg) {
Log.d(TAG, "Handling " + msg.arg2);
Timber.d("Handling %s", msg.arg2);
if (errorState) {
Log.i(TAG, "In error state.");
Timber.i("In error state.");
// also, we have already stopped ourselves
return;
}
@ -279,7 +279,7 @@ public class WalletService extends Service {
if (cmd.equals(REQUEST_CMD_LOAD)) {
String walletId = extras.getString(REQUEST_WALLET, null);
String walletPw = extras.getString(REQUEST_CMD_LOAD_PW, null);
Log.d(TAG, "LOAD wallet " + walletId);
Timber.d("LOAD wallet %s", walletId);
if (walletId != null) {
showProgress(getString(R.string.status_wallet_loading));
showProgress(10);
@ -292,23 +292,23 @@ public class WalletService extends Service {
}
} else if (cmd.equals(REQUEST_CMD_STORE)) {
Wallet myWallet = getWallet();
Log.d(TAG, "STORE wallet: " + myWallet.getName());
Timber.d("STORE wallet: %s", myWallet.getName());
boolean rc = myWallet.store();
Log.d(TAG, "wallet stored: " + myWallet.getName() + " with rc=" + rc);
Timber.d("wallet stored: %s with rc=%b", myWallet.getName(), rc);
if (!rc) {
Log.w(TAG, "Wallet store failed: " + myWallet.getErrorString());
Timber.w("Wallet store failed: %s", myWallet.getErrorString());
}
if (observer != null) observer.onWalletStored(rc);
} else if (cmd.equals(REQUEST_CMD_TX)) {
Wallet myWallet = getWallet();
Log.d(TAG, "CREATE TX for wallet: " + myWallet.getName());
Timber.d("CREATE TX for wallet: %s", myWallet.getName());
TxData txData = extras.getParcelable(REQUEST_CMD_TX_DATA);
PendingTransaction pendingTransaction = myWallet.createTransaction(
txData.dst_addr, txData.paymentId, txData.amount, txData.mixin, txData.priority);
PendingTransaction.Status status = pendingTransaction.getStatus();
Log.d(TAG, "transaction status " + status);
Timber.d("transaction status %s", status);
if (status != PendingTransaction.Status.Status_Ok) {
Log.w(TAG, "Create Transaction failed: " + pendingTransaction.getErrorString());
Timber.w("Create Transaction failed: %s", pendingTransaction.getErrorString());
}
if (observer != null) {
observer.onCreatedTransaction(pendingTransaction);
@ -317,12 +317,12 @@ public class WalletService extends Service {
}
} else if (cmd.equals(REQUEST_CMD_SWEEP)) {
Wallet myWallet = getWallet();
Log.d(TAG, "SWEEP TX for wallet: " + myWallet.getName());
Timber.d("SWEEP TX for wallet: %s", myWallet.getName());
PendingTransaction pendingTransaction = myWallet.createSweepUnmixableTransaction();
PendingTransaction.Status status = pendingTransaction.getStatus();
Log.d(TAG, "transaction status " + status);
Timber.d("transaction status %s", status);
if (status != PendingTransaction.Status.Status_Ok) {
Log.w(TAG, "Create Transaction failed: " + pendingTransaction.getErrorString());
Timber.w("Create Transaction failed: %s", pendingTransaction.getErrorString());
}
if (observer != null) {
observer.onCreatedTransaction(pendingTransaction);
@ -331,11 +331,11 @@ public class WalletService extends Service {
}
} else if (cmd.equals(REQUEST_CMD_SEND)) {
Wallet myWallet = getWallet();
Log.d(TAG, "SEND TX for wallet: " + myWallet.getName());
Timber.d("SEND TX for wallet: %s", myWallet.getName());
PendingTransaction pendingTransaction = myWallet.getPendingTransaction();
if ((pendingTransaction == null)
|| (pendingTransaction.getStatus() != PendingTransaction.Status.Status_Ok)) {
Log.e(TAG, "PendingTransaction is " + pendingTransaction.getStatus());
Timber.e("PendingTransaction is %s", pendingTransaction.getStatus());
myWallet.disposePendingTransaction(); // it's broken anyway
if (observer != null) observer.onSentTransaction(false);
return;
@ -350,29 +350,29 @@ public class WalletService extends Service {
myWallet.setUserNote(txid, notes);
}
boolean rc = myWallet.store();
Log.d(TAG, "wallet stored: " + myWallet.getName() + " with rc=" + rc);
Timber.d("wallet stored: %s with rc=%b", myWallet.getName(), rc);
if (!rc) {
Log.w(TAG, "Wallet store failed: " + myWallet.getErrorString());
Timber.w("Wallet store failed: %s", myWallet.getErrorString());
}
if (observer != null) observer.onWalletStored(rc);
listener.updated = true;
}
} else if (cmd.equals(REQUEST_CMD_SETNOTE)) {
Wallet myWallet = getWallet();
Log.d(TAG, "SET NOTE for wallet: " + myWallet.getName());
Timber.d("SET NOTE for wallet: %s", myWallet.getName());
String txId = extras.getString(REQUEST_CMD_SETNOTE_TX);
String notes = extras.getString(REQUEST_CMD_SETNOTE_NOTES);
if ((txId != null) && (notes != null)) {
boolean success = myWallet.setUserNote(txId, notes);
if (!success) {
Log.e(TAG, myWallet.getErrorString());
Timber.e(myWallet.getErrorString());
}
if (observer != null) observer.onSetNotes(success);
if (success) {
boolean rc = myWallet.store();
Log.d(TAG, "wallet stored: " + myWallet.getName() + " with rc=" + rc);
Timber.d("wallet stored: %s with rc=%b", myWallet.getName(), rc);
if (!rc) {
Log.w(TAG, "Wallet store failed: " + myWallet.getErrorString());
Timber.w("Wallet store failed: %s", myWallet.getErrorString());
}
if (observer != null) observer.onWalletStored(rc);
}
@ -384,7 +384,7 @@ public class WalletService extends Service {
stop();
break;
default:
Log.e(TAG, "UNKNOWN " + msg.arg2);
Timber.e("UNKNOWN %s", msg.arg2);
}
}
}
@ -401,14 +401,14 @@ public class WalletService extends Service {
final Looper serviceLooper = thread.getLooper();
mServiceHandler = new WalletService.ServiceHandler(serviceLooper);
Log.d(TAG, "Service created");
Timber.d("Service created");
}
@Override
public void onDestroy() {
Log.d(TAG, "onDestroy()");
Timber.d("onDestroy()");
if (this.listener != null) {
Log.w(TAG, "onDestroy() with active listener");
Timber.w("onDestroy() with active listener");
// no need to stop() here because the wallet closing should have been triggered
// through onUnbind() already
}
@ -430,7 +430,7 @@ public class WalletService extends Service {
// so we queue the open request
// this should not matter since the old activity is not getting updates
// and the new one is not listening yet (although it will be bound)
Log.d(TAG, "onStartCommand()");
Timber.d("onStartCommand()");
// For each start request, send a message to start a job and deliver the
// start ID so we know which request we're stopping when we finish the job
Message msg = mServiceHandler.obtainMessage();
@ -449,28 +449,28 @@ public class WalletService extends Service {
@Override
public IBinder onBind(Intent intent) {
// Very first client binds
Log.d(TAG, "onBind()");
Timber.d("onBind()");
return mBinder;
}
@Override
public boolean onUnbind(Intent intent) {
Log.d(TAG, "onUnbind()");
Timber.d("onUnbind()");
// All clients have unbound with unbindService()
Message msg = mServiceHandler.obtainMessage();
msg.arg2 = STOP_SERVICE;
mServiceHandler.sendMessage(msg);
Log.d(TAG, "onUnbind() message sent");
Timber.d("onUnbind() message sent");
return true; // true is important so that onUnbind is also called next time
}
private boolean start(String walletName, String walletPassword) {
Log.d(TAG, "start()");
Timber.d("start()");
startNotfication();
showProgress(getString(R.string.status_wallet_loading));
showProgress(10);
if (listener == null) {
Log.d(TAG, "start() loadWallet");
Timber.d("start() loadWallet");
Wallet aWallet = loadWallet(walletName, walletPassword);
if ((aWallet == null) || (aWallet.getConnectionStatus() != Wallet.ConnectionStatus.ConnectionStatus_Connected)) {
if (aWallet != null) aWallet.close();
@ -484,19 +484,19 @@ public class WalletService extends Service {
showProgress(101);
// if we try to refresh the history here we get occasional segfaults!
// doesnt matter since we update as soon as we get a new block anyway
Log.d(TAG, "start() done");
Timber.d("start() done");
return true;
}
public void stop() {
Log.d(TAG, "stop()");
Timber.d("stop()");
setObserver(null); // in case it was not reset already
if (listener != null) {
listener.stop();
Wallet myWallet = getWallet();
Log.d(TAG, "stop() closing");
Timber.d("stop() closing");
myWallet.close();
Log.d(TAG, "stop() closed");
Timber.d("stop() closed");
listener = null;
}
stopForeground(true);
@ -507,7 +507,7 @@ public class WalletService extends Service {
private Wallet loadWallet(String walletName, String walletPassword) {
Wallet wallet = openWallet(walletName, walletPassword);
if (wallet != null) {
Log.d(TAG, "Using daemon " + WalletManager.getInstance().getDaemonAddress());
Timber.d("Using daemon %s", WalletManager.getInstance().getDaemonAddress());
showProgress(55);
wallet.init(0);
showProgress(90);
@ -520,17 +520,17 @@ public class WalletService extends Service {
showProgress(20);
Wallet wallet = null;
WalletManager walletMgr = WalletManager.getInstance();
Log.d(TAG, "WalletManager testnet=" + walletMgr.isTestNet());
Timber.d("WalletManager testnet=%s", walletMgr.isTestNet());
showProgress(30);
if (walletMgr.walletExists(path)) {
Log.d(TAG, "open wallet " + path);
Timber.d("open wallet %s", path);
wallet = walletMgr.openWallet(path, walletPassword);
showProgress(60);
Log.d(TAG, "wallet opened");
Timber.d("wallet opened");
Wallet.Status status = wallet.getStatus();
Log.d(TAG, "wallet status is " + status);
Timber.d("wallet status is %s", status);
if (status != Wallet.Status.Status_Ok) {
Log.d(TAG, "wallet status is " + status);
Timber.d("wallet status is %s", status);
WalletManager.getInstance().close(wallet); // TODO close() failed?
wallet = null;
// TODO what do we do with the progress??

@ -31,7 +31,6 @@ import android.graphics.drawable.Drawable;
import android.graphics.drawable.VectorDrawable;
import android.os.Environment;
import android.support.v4.content.ContextCompat;
import android.util.Log;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
@ -48,10 +47,9 @@ import java.util.Locale;
import javax.net.ssl.HttpsURLConnection;
import okhttp3.OkHttpClient;
import timber.log.Timber;
public class Helper {
static private final String TAG = "Helper";
static private final String WALLET_DIR = "monerujo";
static public int DISPLAY_DIGITS_INFO = 5;
@ -60,17 +58,17 @@ public class Helper {
static public File getStorageRoot(Context context) {
if (!isExternalStorageWritable()) {
String msg = context.getString(R.string.message_strorage_not_writable);
Log.e(TAG, msg);
Timber.e(msg);
throw new IllegalStateException(msg);
}
File dir = new File(Environment.getExternalStorageDirectory(), WALLET_DIR);
if (!dir.exists()) {
Log.i(TAG, "Creating " + dir.getAbsolutePath());
Timber.i("Creating %s", dir.getAbsolutePath());
dir.mkdirs(); // try to make it
}
if (!dir.isDirectory()) {
String msg = "Directory " + dir.getAbsolutePath() + " does not exist.";
Log.e(TAG, msg);
Timber.e(msg);
throw new IllegalStateException(msg);
}
return dir;
@ -82,7 +80,7 @@ public class Helper {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
if (context.checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
== PackageManager.PERMISSION_DENIED) {
Log.w(TAG, "Permission denied to WRITE_EXTERNAL_STORAGE - requesting it");
Timber.w("Permission denied to WRITE_EXTERNAL_STORAGE - requesting it");
String[] permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE};
context.requestPermissions(permissions, PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);
return false;
@ -100,7 +98,7 @@ public class Helper {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
if (context.checkSelfPermission(Manifest.permission.CAMERA)
== PackageManager.PERMISSION_DENIED) {
Log.w(TAG, "Permission denied for CAMERA - requesting it");
Timber.w("Permission denied for CAMERA - requesting it");
String[] permissions = {Manifest.permission.CAMERA};
context.requestPermissions(permissions, PERMISSIONS_REQUEST_CAMERA);
return false;
@ -115,7 +113,7 @@ public class Helper {
static public File getWalletFile(Context context, String aWalletName) {
File walletDir = getStorageRoot(context);
File f = new File(walletDir, aWalletName);
Log.d(TAG, "wallet = " + f.getAbsolutePath() + " size=" + f.length());
Timber.d("wallet= %s size= %d", f.getAbsolutePath(), f.length());
return f;
}
@ -224,11 +222,11 @@ public class Helper {
}
return sb.toString();
} catch (SocketTimeoutException ex) {
Log.w(TAG, "C " + ex.getLocalizedMessage());
Timber.w("C %s", ex.getLocalizedMessage());
} catch (MalformedURLException ex) {
Log.e(TAG, "A " + ex.getLocalizedMessage());
Timber.e("A %s", ex.getLocalizedMessage());
} catch (IOException ex) {
Log.e(TAG, "B " + ex.getLocalizedMessage());
Timber.e("B %s", ex.getLocalizedMessage());
} finally {
if (urlConnection != null) {
urlConnection.disconnect();

@ -21,7 +21,6 @@ import java.util.Arrays;
import java.util.List;
public class NodeList {
static private final String TAG = "NodeList";
private static final int MAX_SIZE = 5;
private List<String> nodes = new ArrayList<>();

@ -93,6 +93,9 @@
<h3>OkHttp</h3>
Copyright (c) 2014 Square, Inc.
<h3>Timber</h3>
Copyright (c) 2013 Jake Wharton
<h3>com.google.zxing:core</h3>
Copyright (c) 2012 ZXing authors

@ -30,4 +30,5 @@ ext {
okHttpVersion = '3.9.0'
junitVersion = '4.12'
mockitoVersion = '1.10.19'
timberVersion = '4.6.0'
}

Loading…
Cancel
Save