Use Timber instead of Android.Log

This commit is contained in:
Vincent Breitmoser committed 2018-01-20 21:32:37 +01:00
1 parent 73b65bf50b
commit 22c65f2ab8
161 files changed
+782 -947

No files matched your search

+2
View File
@@ -88,6 +88,8 @@ dependencies {
exclude module: 'recyclerview-v7' exclude module: 'recyclerview-v7'
} }
compile "com.jakewharton.timber:timber:4.5.1"
compile 'org.glassfish:javax.annotation:10.0-b28' compile 'org.glassfish:javax.annotation:10.0-b28'
provided "com.google.auto.value:auto-value:1.4.1" provided "com.google.auto.value:auto-value:1.4.1"
apt "com.google.auto.value:auto-value:1.4.1" apt "com.google.auto.value:auto-value:1.4.1"
@@ -16,12 +16,14 @@
package android.support.v4.widget; package android.support.v4.widget;
import java.util.ArrayList;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.content.Context; import android.content.Context;
import android.content.res.TypedArray; import android.content.res.TypedArray;
import android.graphics.Canvas; import android.graphics.Canvas;
import android.graphics.Rect; import android.graphics.Rect;
import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.Parcel; import android.os.Parcel;
import android.os.Parcelable; import android.os.Parcelable;
@@ -37,7 +39,6 @@ import android.support.v4.view.accessibility.AccessibilityEventCompat;
import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat; import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat;
import android.support.v4.view.accessibility.AccessibilityRecordCompat; import android.support.v4.view.accessibility.AccessibilityRecordCompat;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.util.Log;
import android.util.TypedValue; import android.util.TypedValue;
import android.view.FocusFinder; import android.view.FocusFinder;
import android.view.KeyEvent; import android.view.KeyEvent;
@@ -49,11 +50,11 @@ import android.view.ViewGroup;
import android.view.ViewParent; import android.view.ViewParent;
import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityEvent;
import android.view.animation.AnimationUtils; import android.view.animation.AnimationUtils;
import android.view.animation.Interpolator;
import android.widget.FrameLayout; import android.widget.FrameLayout;
import android.widget.ScrollView; import android.widget.ScrollView;
import java.util.ArrayList; import timber.log.Timber;
/** /**
* Workaround for bug in support lib. From https://code.google.com/p/android/issues/detail?id=177729 * Workaround for bug in support lib. From https://code.google.com/p/android/issues/detail?id=177729
@@ -444,7 +445,7 @@ public class FlingNestedScrollView extends FrameLayout implements NestedScrollin
if(y != -1) { if(y != -1) {
int pointerIndex = MotionEventCompat.findPointerIndex(ev, y); int pointerIndex = MotionEventCompat.findPointerIndex(ev, y);
if(pointerIndex == -1) { if(pointerIndex == -1) {
Log.e("FlingNestedScrollView", "Invalid pointerId=" + y + " in onInterceptTouchEvent"); Timber.e("Invalid pointerId=" + y + " in onInterceptTouchEvent");
} else { } else {
int y1 = (int)MotionEventCompat.getY(ev, pointerIndex); int y1 = (int)MotionEventCompat.getY(ev, pointerIndex);
int yDiff = Math.abs(y1 - this.mLastMotionY); int yDiff = Math.abs(y1 - this.mLastMotionY);
@@ -521,7 +522,7 @@ public class FlingNestedScrollView extends FrameLayout implements NestedScrollin
case 2: case 2:
int activePointerIndex = MotionEventCompat.findPointerIndex(ev, this.mActivePointerId); int activePointerIndex = MotionEventCompat.findPointerIndex(ev, this.mActivePointerId);
if(activePointerIndex == -1) { if(activePointerIndex == -1) {
Log.e("FlingNestedScrollView", "Invalid pointerId=" + this.mActivePointerId + " in onTouchEvent"); Timber.e("Invalid pointerId=" + this.mActivePointerId + " in onTouchEvent");
} else { } else {
int y = (int)MotionEventCompat.getY(ev, activePointerIndex); int y = (int)MotionEventCompat.getY(ev, activePointerIndex);
int deltaY = this.mLastMotionY - y; int deltaY = this.mLastMotionY - y;
@@ -29,7 +29,6 @@ import android.graphics.Bitmap;
import android.graphics.PorterDuff; import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.os.Build; import android.os.Build;
import android.os.Environment;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.widget.Toast; import android.widget.Toast;
@@ -39,9 +38,9 @@ import org.sufficientlysecure.keychain.provider.TemporaryFileProvider;
import org.sufficientlysecure.keychain.service.ContactSyncAdapterService; import org.sufficientlysecure.keychain.service.ContactSyncAdapterService;
import org.sufficientlysecure.keychain.service.KeyserverSyncAdapterService; import org.sufficientlysecure.keychain.service.KeyserverSyncAdapterService;
import org.sufficientlysecure.keychain.ui.util.FormattingUtils; import org.sufficientlysecure.keychain.ui.util.FormattingUtils;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.PRNGFixes; import org.sufficientlysecure.keychain.util.PRNGFixes;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
import timber.log.Timber;
public class KeychainApplication extends Application { public class KeychainApplication extends Application {
@@ -72,7 +71,7 @@ public class KeychainApplication extends Application {
* LinuxPRNGSecureRandomProvider(), 1) for Android <= SDK 17 * LinuxPRNGSecureRandomProvider(), 1) for Android <= SDK 17
*/ */
PRNGFixes.apply(); PRNGFixes.apply();
Log.d(Constants.TAG, "Bouncy Castle set and PRNG Fixes applied!"); Timber.d("Bouncy Castle set and PRNG Fixes applied!");
/* /*
if (Constants.DEBUG) { if (Constants.DEBUG) {
@@ -127,7 +126,7 @@ public class KeychainApplication extends Application {
Account account = new Account(Constants.ACCOUNT_NAME, Constants.ACCOUNT_TYPE); Account account = new Account(Constants.ACCOUNT_NAME, Constants.ACCOUNT_TYPE);
if (accounts.length == 0) { if (accounts.length == 0) {
if (!manager.addAccountExplicitly(account, null, null)) { if (!manager.addAccountExplicitly(account, null, null)) {
Log.d(Constants.TAG, "error when adding account via addAccountExplicitly"); Timber.d("error when adding account via addAccountExplicitly");
return null; return null;
} else { } else {
return account; return account;
@@ -136,7 +135,7 @@ public class KeychainApplication extends Application {
return accounts[0]; return accounts[0];
} }
} catch (SecurityException e) { } catch (SecurityException e) {
Log.e(Constants.TAG, "SecurityException when adding the account", e); Timber.e(e, "SecurityException when adding the account");
Toast.makeText(context, R.string.reinstall_openkeychain, Toast.LENGTH_LONG).show(); Toast.makeText(context, R.string.reinstall_openkeychain, Toast.LENGTH_LONG).show();
return null; return null;
} }
@@ -23,8 +23,8 @@ import android.content.ClipboardManager;
import android.content.Context; import android.content.Context;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import org.sufficientlysecure.keychain.Constants; import timber.log.Timber;
import org.sufficientlysecure.keychain.util.Log;
public class ClipboardReflection { public class ClipboardReflection {
@@ -37,7 +37,7 @@ public class ClipboardReflection {
ClipData clip = clipboard.getPrimaryClip(); ClipData clip = clipboard.getPrimaryClip();
if (clip == null || clip.getItemCount() == 0) { if (clip == null || clip.getItemCount() == 0) {
Log.e(Constants.TAG, "No clipboard data!"); Timber.e("No clipboard data!");
return null; return null;
} }
@@ -19,10 +19,9 @@ package org.sufficientlysecure.keychain.keyimport;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.ParcelableProxy; import org.sufficientlysecure.keychain.util.ParcelableProxy;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
import timber.log.Timber;
import java.net.Proxy; import java.net.Proxy;
import java.util.ArrayList; import java.util.ArrayList;
@@ -98,7 +97,7 @@ public class CloudSearch {
if (!problems.isEmpty()) { if (!problems.isEmpty()) {
for (KeyserverClient.CloudSearchFailureException e : problems) { for (KeyserverClient.CloudSearchFailureException e : problems) {
Log.d(Constants.TAG, "Cloud search exception: " + e.getLocalizedMessage()); Timber.d("Cloud search exception: " + e.getLocalizedMessage());
} }
// only throw exception if we didn’t get any results // only throw exception if we didn’t get any results
@@ -32,15 +32,15 @@ import android.support.annotation.Nullable;
import okhttp3.OkHttpClient; import okhttp3.OkHttpClient;
import okhttp3.Request; import okhttp3.Request;
import okhttp3.Response; import okhttp3.Response;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.network.OkHttpClientFactory; import org.sufficientlysecure.keychain.network.OkHttpClientFactory;
import org.sufficientlysecure.keychain.pgp.PgpHelper; import org.sufficientlysecure.keychain.pgp.PgpHelper;
import org.sufficientlysecure.keychain.pgp.UncachedKeyRing; import org.sufficientlysecure.keychain.pgp.UncachedKeyRing;
import org.sufficientlysecure.keychain.pgp.UncachedPublicKey; import org.sufficientlysecure.keychain.pgp.UncachedPublicKey;
import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException; import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.ParcelableProxy; import org.sufficientlysecure.keychain.util.ParcelableProxy;
import timber.log.Timber;
public class FacebookKeyserverClient implements KeyserverClient { public class FacebookKeyserverClient implements KeyserverClient {
private static final String FB_KEY_URL_FORMAT private static final String FB_KEY_URL_FORMAT
@@ -69,10 +69,10 @@ public class FacebookKeyserverClient implements KeyserverClient {
try { try {
entry.add(getEntry(keyRing, fbUsername)); entry.add(getEntry(keyRing, fbUsername));
} catch (UnsupportedOperationException e) { } catch (UnsupportedOperationException e) {
Log.e(Constants.TAG, "Parsing retrieved Facebook key failed!"); Timber.e("Parsing retrieved Facebook key failed!");
} }
} catch (PgpGeneralException | IOException e) { } catch (PgpGeneralException | IOException e) {
Log.e(Constants.TAG, "Failed parsing key from Facebook during search", e); Timber.e(e, "Failed parsing key from Facebook during search");
throw new QueryFailedException("No valid key found on Facebook"); throw new QueryFailedException("No valid key found on Facebook");
} }
return entry; return entry;
@@ -80,7 +80,7 @@ public class FacebookKeyserverClient implements KeyserverClient {
@Override @Override
public String get(String fbUsername, ParcelableProxy proxy) throws QueryFailedException { public String get(String fbUsername, ParcelableProxy proxy) throws QueryFailedException {
Log.d(Constants.TAG, "FacebookKeyserver get: " + fbUsername + " using Proxy: " + proxy.getProxy()); Timber.d("FacebookKeyserver get: " + fbUsername + " using Proxy: " + proxy.getProxy());
String data = query(fbUsername, proxy); String data = query(fbUsername, proxy);
@@ -98,7 +98,7 @@ public class FacebookKeyserverClient implements KeyserverClient {
private String query(String fbUsername, ParcelableProxy proxy) throws QueryFailedException { private String query(String fbUsername, ParcelableProxy proxy) throws QueryFailedException {
try { try {
URL url = new URL(String.format(FB_KEY_URL_FORMAT, fbUsername)); URL url = new URL(String.format(FB_KEY_URL_FORMAT, fbUsername));
Log.d(Constants.TAG, "fetching from Facebook with: " + url + " proxy: " + proxy.getProxy()); Timber.d("fetching from Facebook with: " + url + " proxy: " + proxy.getProxy());
/* /*
* For some URLs such as https://www.facebook.com/adithya.abraham/publickey/download * For some URLs such as https://www.facebook.com/adithya.abraham/publickey/download
@@ -125,7 +125,7 @@ public class FacebookKeyserverClient implements KeyserverClient {
} }
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "IOException at Facebook key download", e); Timber.e(e, "IOException at Facebook key download");
throw new QueryFailedException("Cannot connect to Facebook. " throw new QueryFailedException("Cannot connect to Facebook. "
+ "Check your Internet connection!" + "Check your Internet connection!"
+ (proxy.getProxy() == Proxy.NO_PROXY ? "" : " Using proxy " + proxy.getProxy())); + (proxy.getProxy() == Proxy.NO_PROXY ? "" : " Using proxy " + proxy.getProxy()));
@@ -163,7 +163,7 @@ public class FacebookKeyserverClient implements KeyserverClient {
try { try {
if (key.isEC()) { // unsupported key format (ECDH or ECDSA) if (key.isEC()) { // unsupported key format (ECDH or ECDSA)
Log.e(Constants.TAG, "ECDH/ECDSA key - not supported."); Timber.e("ECDH/ECDSA key - not supported.");
throw new UnsupportedOperationException( throw new UnsupportedOperationException(
"ECDH/ECDSA keys not supported yet"); "ECDH/ECDSA keys not supported yet");
} }
@@ -172,7 +172,7 @@ public class FacebookKeyserverClient implements KeyserverClient {
entry.setAlgorithm(KeyFormattingUtils.getAlgorithmInfo(algorithm, key.getBitStrength(), entry.setAlgorithm(KeyFormattingUtils.getAlgorithmInfo(algorithm, key.getBitStrength(),
key.getCurveOid())); key.getCurveOid()));
} catch (NumberFormatException | NullPointerException e) { } catch (NumberFormatException | NullPointerException e) {
Log.e(Constants.TAG, "Conversion for bit size, algorithm, or creation date failed.", e); Timber.e(e, "Conversion for bit size, algorithm, or creation date failed.");
// can't use this key // can't use this key
throw new UnsupportedOperationException( throw new UnsupportedOperationException(
"Conversion for bit size, algorithm, or creation date failed."); "Conversion for bit size, algorithm, or creation date failed.");
@@ -41,12 +41,13 @@ import okhttp3.OkHttpClient;
import okhttp3.Request; import okhttp3.Request;
import okhttp3.RequestBody; import okhttp3.RequestBody;
import okhttp3.Response; import okhttp3.Response;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.network.OkHttpClientFactory; import org.sufficientlysecure.keychain.network.OkHttpClientFactory;
import org.sufficientlysecure.keychain.pgp.PgpHelper; import org.sufficientlysecure.keychain.pgp.PgpHelper;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.ParcelableProxy; import org.sufficientlysecure.keychain.util.ParcelableProxy;
import timber.log.Timber;
import static java.util.Locale.ENGLISH;
public class HkpKeyserverClient implements KeyserverClient { public class HkpKeyserverClient implements KeyserverClient {
@@ -148,14 +149,14 @@ public class HkpKeyserverClient implements KeyserverClient {
.addQueryParameter("search", query) .addQueryParameter("search", query)
.build(); .build();
Log.d(Constants.TAG, "Keyserver search: " + url + " using Proxy: " + proxy.getProxy()); Timber.d("Keyserver search: " + url + " using Proxy: " + proxy.getProxy());
data = query(url, proxy); data = query(url, proxy);
} catch (URISyntaxException e) { } catch (URISyntaxException e) {
throw new IllegalStateException("Unsupported keyserver URI"); throw new IllegalStateException("Unsupported keyserver URI");
} catch (HttpError e) { } catch (HttpError e) {
if (e.getData() != null) { if (e.getData() != null) {
Log.d(Constants.TAG, "returned error data: " + e.getData().toLowerCase(Locale.ENGLISH)); Timber.d("returned error data: " + e.getData().toLowerCase(ENGLISH));
if (e.getData().toLowerCase(Locale.ENGLISH).contains("no keys found")) { if (e.getData().toLowerCase(Locale.ENGLISH).contains("no keys found")) {
// NOTE: This is also a 404 error for some keyservers! // NOTE: This is also a 404 error for some keyservers!
@@ -193,7 +194,7 @@ public class HkpKeyserverClient implements KeyserverClient {
// set key id only // set key id only
entry.setKeyIdHex("0x" + fingerprintOrKeyId); entry.setKeyIdHex("0x" + fingerprintOrKeyId);
} else { } else {
Log.e(Constants.TAG, "Wrong length for fingerprint/long key id."); Timber.e("Wrong length for fingerprint/long key id.");
// skip this key // skip this key
continue; continue;
} }
@@ -209,7 +210,7 @@ public class HkpKeyserverClient implements KeyserverClient {
calendar.setTimeInMillis(creationDate * 1000); calendar.setTimeInMillis(creationDate * 1000);
entry.setDate(calendar.getTime()); entry.setDate(calendar.getTime());
} catch (NumberFormatException e) { } catch (NumberFormatException e) {
Log.e(Constants.TAG, "Conversation for bit size, algorithm, or creation date failed.", e); Timber.e(e, "Conversation for bit size, algorithm, or creation date failed.");
// skip this key // skip this key
continue; continue;
} }
@@ -229,7 +230,7 @@ public class HkpKeyserverClient implements KeyserverClient {
} }
entry.setExpired(expired); entry.setExpired(expired);
} catch (NullPointerException e) { } catch (NullPointerException e) {
Log.e(Constants.TAG, "Check for revocation or expiry failed.", e); Timber.e(e, "Check for revocation or expiry failed.");
// skip this key // skip this key
continue; continue;
} }
@@ -251,7 +252,7 @@ public class HkpKeyserverClient implements KeyserverClient {
} catch (UnsupportedEncodingException ignored) { } catch (UnsupportedEncodingException ignored) {
// will never happen, because "UTF8" is supported // will never happen, because "UTF8" is supported
} catch (IllegalArgumentException e) { } catch (IllegalArgumentException e) {
Log.e(Constants.TAG, "User ID encoding broken", e); Timber.e(e, "User ID encoding broken");
// skip this user id // skip this user id
continue; continue;
} }
@@ -278,13 +279,13 @@ public class HkpKeyserverClient implements KeyserverClient {
.addQueryParameter("search", keyIdHex) .addQueryParameter("search", keyIdHex)
.build(); .build();
Log.d(Constants.TAG, "Keyserver get: " + url + " using Proxy: " + proxy.getProxy()); Timber.d("Keyserver get: " + url + " using Proxy: " + proxy.getProxy());
data = query(url, proxy); data = query(url, proxy);
} catch (URISyntaxException e) { } catch (URISyntaxException e) {
throw new IllegalStateException("Unsupported keyserver URI"); throw new IllegalStateException("Unsupported keyserver URI");
} catch (HttpError httpError) { } catch (HttpError httpError) {
Log.d(Constants.TAG, "Failed to get key at HkpKeyserver", httpError); Timber.d(httpError, "Failed to get key at HkpKeyserver");
if (httpError.getCode() == 404) { if (httpError.getCode() == 404) {
throw new KeyserverClient.QueryNotFoundException("not found"); throw new KeyserverClient.QueryNotFoundException("not found");
} }
@@ -324,7 +325,7 @@ public class HkpKeyserverClient implements KeyserverClient {
String responseBody = getResponseBodyAsUtf8(response); String responseBody = getResponseBodyAsUtf8(response);
Log.d(Constants.TAG, "Adding key with URL: " + url Timber.d("Adding key with URL: " + url
+ ", response code: " + response.code() + ", response code: " + response.code()
+ ", body: " + responseBody); + ", body: " + responseBody);
@@ -333,10 +334,10 @@ public class HkpKeyserverClient implements KeyserverClient {
} }
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "IOException", e); Timber.e(e, "IOException");
throw new KeyserverClient.AddKeyException(); throw new KeyserverClient.AddKeyException();
} catch (URISyntaxException e) { } catch (URISyntaxException e) {
Log.e(Constants.TAG, "Unsupported keyserver URI", e); Timber.e(e, "Unsupported keyserver URI");
throw new KeyserverClient.AddKeyException(); throw new KeyserverClient.AddKeyException();
} }
} }
@@ -373,7 +374,7 @@ public class HkpKeyserverClient implements KeyserverClient {
throw new HttpError(response.code(), responseBody); throw new HttpError(response.code(), responseBody);
} }
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "IOException at HkpKeyserver", e); Timber.e(e, "IOException at HkpKeyserver");
String proxyInfo = proxy.getProxy() == Proxy.NO_PROXY ? "" : " Using proxy " + proxy.getProxy(); String proxyInfo = proxy.getProxy() == Proxy.NO_PROXY ? "" : " Using proxy " + proxy.getProxy();
Throwable cause = e.getCause(); Throwable cause = e.getCause();
String causeName = cause != null ? cause.getClass().getSimpleName() : "generic"; String causeName = cause != null ? cause.getClass().getSimpleName() : "generic";
@@ -22,11 +22,10 @@ import com.textuality.keybase.lib.KeybaseQuery;
import com.textuality.keybase.lib.Match; import com.textuality.keybase.lib.Match;
import com.textuality.keybase.lib.User; import com.textuality.keybase.lib.User;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.network.OkHttpKeybaseClient; import org.sufficientlysecure.keychain.network.OkHttpKeybaseClient;
import org.sufficientlysecure.keychain.util.ParcelableProxy; import org.sufficientlysecure.keychain.util.ParcelableProxy;
import timber.log.Timber;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -60,7 +59,7 @@ public class KeybaseKeyserverClient implements KeyserverClient {
results.add(makeEntry(match, query)); results.add(makeEntry(match, query));
} }
} catch (KeybaseException e) { } catch (KeybaseException e) {
Log.e(Constants.TAG, "keybase result parsing error", e); Timber.e(e, "keybase result parsing error");
throw new QueryFailedException("Unexpected structure in keybase search result: " + e.getMessage()); throw new QueryFailedException("Unexpected structure in keybase search result: " + e.getMessage());
} }
@@ -21,7 +21,6 @@ import android.content.Context;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.v4.content.AsyncTaskLoader; import android.support.v4.content.AsyncTaskLoader;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.keyimport.CloudSearch; import org.sufficientlysecure.keychain.keyimport.CloudSearch;
import org.sufficientlysecure.keychain.keyimport.ImportKeysListEntry; import org.sufficientlysecure.keychain.keyimport.ImportKeysListEntry;
import org.sufficientlysecure.keychain.keyimport.KeyserverClient; import org.sufficientlysecure.keychain.keyimport.KeyserverClient;
@@ -31,10 +30,10 @@ import org.sufficientlysecure.keychain.operations.results.OperationResult;
import org.sufficientlysecure.keychain.service.input.CryptoInputParcel; import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;
import org.sufficientlysecure.keychain.service.input.RequiredInputParcel; import org.sufficientlysecure.keychain.service.input.RequiredInputParcel;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.ParcelableProxy; import org.sufficientlysecure.keychain.util.ParcelableProxy;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
import org.sufficientlysecure.keychain.network.orbot.OrbotHelper; import org.sufficientlysecure.keychain.network.orbot.OrbotHelper;
import timber.log.Timber;
import java.util.ArrayList; import java.util.ArrayList;
@@ -71,12 +70,12 @@ public class ImportKeysListCloudLoader
mEntryListWrapper = new AsyncTaskResultWrapper<>(mEntryList, null); mEntryListWrapper = new AsyncTaskResultWrapper<>(mEntryList, null);
if (mState.mServerQuery == null) { if (mState.mServerQuery == null) {
Log.e(Constants.TAG, "mServerQuery is null!"); Timber.e("mServerQuery is null!");
return mEntryListWrapper; return mEntryListWrapper;
} }
if (mState.mServerQuery.startsWith("0x") && mState.mServerQuery.length() == 42) { if (mState.mServerQuery.startsWith("0x") && mState.mServerQuery.length() == 42) {
Log.d(Constants.TAG, "This search is based on a unique fingerprint. Enforce a fingerprint check!"); Timber.d("This search is based on a unique fingerprint. Enforce a fingerprint check!");
queryServer(true); queryServer(true);
} else { } else {
queryServer(false); queryServer(false);
@@ -148,7 +147,7 @@ public class ImportKeysListCloudLoader
// add result to data // add result to data
if (enforceFingerprint) { if (enforceFingerprint) {
String fingerprintHex = mState.mServerQuery.substring(2); String fingerprintHex = mState.mServerQuery.substring(2);
Log.d(Constants.TAG, "fingerprint: " + fingerprintHex); Timber.d("fingerprint: " + fingerprintHex);
// query must return only one result! // query must return only one result!
if (searchResult.size() == 1) { if (searchResult.size() == 1) {
if (fingerprintHex.length() != 40) { if (fingerprintHex.length() != 40) {
@@ -22,7 +22,6 @@ import android.content.Context;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.v4.content.AsyncTaskLoader; import android.support.v4.content.AsyncTaskLoader;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.keyimport.ImportKeysListEntry; import org.sufficientlysecure.keychain.keyimport.ImportKeysListEntry;
import org.sufficientlysecure.keychain.operations.results.GetKeyResult; import org.sufficientlysecure.keychain.operations.results.GetKeyResult;
import org.sufficientlysecure.keychain.operations.results.OperationResult; import org.sufficientlysecure.keychain.operations.results.OperationResult;
@@ -32,8 +31,8 @@ import org.sufficientlysecure.keychain.pgp.UncachedKeyRing;
import org.sufficientlysecure.keychain.pgp.UncachedKeyRing.IteratorWithIOThrow; import org.sufficientlysecure.keychain.pgp.UncachedKeyRing.IteratorWithIOThrow;
import org.sufficientlysecure.keychain.util.FileHelper; import org.sufficientlysecure.keychain.util.FileHelper;
import org.sufficientlysecure.keychain.util.InputData; import org.sufficientlysecure.keychain.util.InputData;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.PositionAwareInputStream; import org.sufficientlysecure.keychain.util.PositionAwareInputStream;
import timber.log.Timber;
import java.io.BufferedInputStream; import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
@@ -70,7 +69,7 @@ public class ImportKeysListLoader
} }
if (mState == null) { if (mState == null) {
Log.e(Constants.TAG, "Input data is null!"); Timber.e("Input data is null!");
return mEntryListWrapper; return mEntryListWrapper;
} }
@@ -123,7 +122,7 @@ public class ImportKeysListLoader
mData.add(new ImportKeysListEntry(mContext, it.next())); mData.add(new ImportKeysListEntry(mContext, it.next()));
} }
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "IOException on parsing key file! Return NoValidKeysException!", e); Timber.e(e, "IOException on parsing key file! Return NoValidKeysException!");
OperationResult.OperationLog log = new OperationResult.OperationLog(); OperationResult.OperationLog log = new OperationResult.OperationLog();
log.add(OperationResult.LogType.MSG_GET_NO_VALID_KEYS, 0); log.add(OperationResult.LogType.MSG_GET_NO_VALID_KEYS, 0);
GetKeyResult getKeyResult = new GetKeyResult(GetKeyResult.RESULT_ERROR_NO_VALID_KEYS, log); GetKeyResult getKeyResult = new GetKeyResult(GetKeyResult.RESULT_ERROR_NO_VALID_KEYS, log);
@@ -24,7 +24,6 @@ import okhttp3.OkHttpClient;
import okhttp3.Request; import okhttp3.Request;
import okhttp3.Response; import okhttp3.Response;
import org.json.JSONException; import org.json.JSONException;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.linked.resources.GenericHttpsResource; import org.sufficientlysecure.keychain.linked.resources.GenericHttpsResource;
import org.sufficientlysecure.keychain.linked.resources.GithubResource; import org.sufficientlysecure.keychain.linked.resources.GithubResource;
import org.sufficientlysecure.keychain.linked.resources.TwitterResource; import org.sufficientlysecure.keychain.linked.resources.TwitterResource;
@@ -32,8 +31,8 @@ import org.sufficientlysecure.keychain.operations.results.LinkedVerifyResult;
import org.sufficientlysecure.keychain.operations.results.OperationResult.LogType; import org.sufficientlysecure.keychain.operations.results.OperationResult.LogType;
import org.sufficientlysecure.keychain.operations.results.OperationResult.OperationLog; import org.sufficientlysecure.keychain.operations.results.OperationResult.OperationLog;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.network.OkHttpClientFactory; import org.sufficientlysecure.keychain.network.OkHttpClientFactory;
import timber.log.Timber;
import java.io.IOException; import java.io.IOException;
import java.net.MalformedURLException; import java.net.MalformedURLException;
@@ -83,18 +82,18 @@ public abstract class LinkedTokenResource extends LinkedResource {
if (!"openpgpid+token".equals(uri.getScheme()) if (!"openpgpid+token".equals(uri.getScheme())
&& !"openpgpid+cookie".equals(uri.getScheme())) { && !"openpgpid+cookie".equals(uri.getScheme())) {
Log.e(Constants.TAG, "unknown uri scheme in (suspected) linked id packet"); Timber.e("unknown uri scheme in (suspected) linked id packet");
return null; return null;
} }
if (!uri.isOpaque()) { if (!uri.isOpaque()) {
Log.e(Constants.TAG, "non-opaque uri in (suspected) linked id packet"); Timber.e("non-opaque uri in (suspected) linked id packet");
return null; return null;
} }
String specific = uri.getSchemeSpecificPart(); String specific = uri.getSchemeSpecificPart();
if (!specific.contains("@")) { if (!specific.contains("@")) {
Log.e(Constants.TAG, "unknown uri scheme in linked id packet"); Timber.e("unknown uri scheme in linked id packet");
return null; return null;
} }
@@ -192,15 +191,15 @@ public abstract class LinkedTokenResource extends LinkedResource {
res = fetchResource(context, log, 1); res = fetchResource(context, log, 1);
} catch (HttpStatusException e) { } catch (HttpStatusException e) {
// log verbose output to logcat // log verbose output to logcat
Log.e(Constants.TAG, "http error (" + e.getStatus() + "): " + e.getReason()); Timber.e("http error (" + e.getStatus() + "): " + e.getReason());
log.add(LogType.MSG_LV_FETCH_ERROR, 2, Integer.toString(e.getStatus())); log.add(LogType.MSG_LV_FETCH_ERROR, 2, Integer.toString(e.getStatus()));
} catch (MalformedURLException e) { } catch (MalformedURLException e) {
log.add(LogType.MSG_LV_FETCH_ERROR_URL, 2); log.add(LogType.MSG_LV_FETCH_ERROR_URL, 2);
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "io error", e); Timber.e(e, "io error");
log.add(LogType.MSG_LV_FETCH_ERROR_IO, 2); log.add(LogType.MSG_LV_FETCH_ERROR_IO, 2);
} catch (JSONException e) { } catch (JSONException e) {
Log.e(Constants.TAG, "json error", e); Timber.e(e, "json error");
log.add(LogType.MSG_LV_FETCH_ERROR_FORMAT, 2); log.add(LogType.MSG_LV_FETCH_ERROR_FORMAT, 2);
} }
@@ -209,7 +208,7 @@ public abstract class LinkedTokenResource extends LinkedResource {
return new LinkedVerifyResult(LinkedVerifyResult.RESULT_ERROR, log); return new LinkedVerifyResult(LinkedVerifyResult.RESULT_ERROR, log);
} }
Log.d(Constants.TAG, "Resource data: '" + res + "'"); Timber.d("Resource data: '" + res + "'");
return verifyString(log, 1, res, fingerprint); return verifyString(log, 1, res, fingerprint);
@@ -258,7 +257,7 @@ public abstract class LinkedTokenResource extends LinkedResource {
public static String getResponseBody(Request request, String... pins) public static String getResponseBody(Request request, String... pins)
throws IOException, HttpStatusException { throws IOException, HttpStatusException {
Log.d("Connection to: " + request.url().url().getHost(), ""); Timber.d("");
OkHttpClient client; OkHttpClient client;
if (pins != null) { if (pins != null) {
client = OkHttpClientFactory.getSimpleClientPinned(getCertificatePinner(request.url().url().getHost(), pins)); client = OkHttpClientFactory.getSimpleClientPinned(getCertificatePinner(request.url().url().getHost(), pins));
@@ -18,10 +18,9 @@
package org.sufficientlysecure.keychain.linked; package org.sufficientlysecure.keychain.linked;
import org.bouncycastle.util.Strings; import org.bouncycastle.util.Strings;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.pgp.WrappedUserAttribute; import org.sufficientlysecure.keychain.pgp.WrappedUserAttribute;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
import java.io.IOException; import java.io.IOException;
import java.net.URI; import java.net.URI;
@@ -67,7 +66,7 @@ public class UriAttribute {
return new LinkedAttribute(uri, res); return new LinkedAttribute(uri, res);
} catch (IllegalArgumentException e) { } catch (IllegalArgumentException e) {
Log.e(Constants.TAG, "error parsing uri in (suspected) linked id packet"); Timber.e("error parsing uri in (suspected) linked id packet");
return null; return null;
} }
} }
@@ -27,12 +27,11 @@ import okhttp3.Request;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.operations.results.OperationResult.LogType; import org.sufficientlysecure.keychain.operations.results.OperationResult.LogType;
import org.sufficientlysecure.keychain.operations.results.OperationResult.OperationLog; import org.sufficientlysecure.keychain.operations.results.OperationResult.OperationLog;
import org.sufficientlysecure.keychain.linked.LinkedTokenResource; import org.sufficientlysecure.keychain.linked.LinkedTokenResource;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
import java.io.IOException; import java.io.IOException;
import java.net.MalformedURLException; import java.net.MalformedURLException;
@@ -166,15 +165,15 @@ public class GithubResource extends LinkedTokenResource {
} catch (HttpStatusException e) { } catch (HttpStatusException e) {
// log verbose output to logcat // log verbose output to logcat
Log.e(Constants.TAG, "http error (" + e.getStatus() + "): " + e.getReason()); Timber.e("http error (" + e.getStatus() + "): " + e.getReason());
log.add(LogType.MSG_LV_FETCH_ERROR, 2, Integer.toString(e.getStatus())); log.add(LogType.MSG_LV_FETCH_ERROR, 2, Integer.toString(e.getStatus()));
} catch (MalformedURLException e) { } catch (MalformedURLException e) {
log.add(LogType.MSG_LV_FETCH_ERROR_URL, 2); log.add(LogType.MSG_LV_FETCH_ERROR_URL, 2);
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "io error", e); Timber.e(e, "io error");
log.add(LogType.MSG_LV_FETCH_ERROR_IO, 2); log.add(LogType.MSG_LV_FETCH_ERROR_IO, 2);
} catch (JSONException e) { } catch (JSONException e) {
Log.e(Constants.TAG, "json error", e); Timber.e(e, "json error");
log.add(LogType.MSG_LV_FETCH_ERROR_FORMAT, 2); log.add(LogType.MSG_LV_FETCH_ERROR_FORMAT, 2);
} }
@@ -37,6 +37,7 @@ import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.operations.results.OperationResult.LogType; import org.sufficientlysecure.keychain.operations.results.OperationResult.LogType;
import org.sufficientlysecure.keychain.operations.results.OperationResult.OperationLog; import org.sufficientlysecure.keychain.operations.results.OperationResult.OperationLog;
import org.sufficientlysecure.keychain.linked.LinkedTokenResource; import org.sufficientlysecure.keychain.linked.LinkedTokenResource;
import timber.log.Timber;
import java.io.IOException; import java.io.IOException;
import java.net.MalformedURLException; import java.net.MalformedURLException;
@@ -207,15 +208,15 @@ public class TwitterResource extends LinkedTokenResource {
} catch (HttpStatusException e) { } catch (HttpStatusException e) {
// log verbose output to logcat // log verbose output to logcat
Log.e(Constants.TAG, "http error (" + e.getStatus() + "): " + e.getReason()); Timber.e("http error (" + e.getStatus() + "): " + e.getReason());
log.add(LogType.MSG_LV_FETCH_ERROR, 1, Integer.toString(e.getStatus())); log.add(LogType.MSG_LV_FETCH_ERROR, 1, Integer.toString(e.getStatus()));
} catch (MalformedURLException e) { } catch (MalformedURLException e) {
log.add(LogType.MSG_LV_FETCH_ERROR_URL, 1); log.add(LogType.MSG_LV_FETCH_ERROR_URL, 1);
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "io error", e); Timber.e(e, "io error");
log.add(LogType.MSG_LV_FETCH_ERROR_IO, 1); log.add(LogType.MSG_LV_FETCH_ERROR_IO, 1);
} catch (JSONException e) { } catch (JSONException e) {
Log.e(Constants.TAG, "json error", e); Timber.e(e, "json error");
log.add(LogType.MSG_LV_FETCH_ERROR_FORMAT, 1); log.add(LogType.MSG_LV_FETCH_ERROR_FORMAT, 1);
} }
@@ -56,8 +56,7 @@ import javax.net.ssl.SSLHandshakeException;
import javax.net.ssl.SSLServerSocket; import javax.net.ssl.SSLServerSocket;
import javax.net.ssl.SSLSocket; import javax.net.ssl.SSLSocket;
import javax.net.ssl.TrustManager; import javax.net.ssl.TrustManager;
import org.sufficientlysecure.keychain.Constants; import timber.log.Timber;
import org.sufficientlysecure.keychain.util.Log;
@RequiresApi(api = VERSION_CODES.LOLLIPOP) @RequiresApi(api = VERSION_CODES.LOLLIPOP)
@@ -171,12 +170,12 @@ public class KeyTransferInteractor {
try { try {
handleOpenConnection(socket); handleOpenConnection(socket);
Log.d(Constants.TAG, "connection closed ok!"); Timber.d("connection closed ok!");
} catch (SSLHandshakeException e) { } catch (SSLHandshakeException e) {
Log.d(Constants.TAG, "ssl handshake error!", e); Timber.d(e, "ssl handshake error!");
invokeListener(CONNECTION_ERROR_CONNECT, null); invokeListener(CONNECTION_ERROR_CONNECT, null);
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "communication error!", e); Timber.e(e, "communication error!");
invokeListener(CONNECTION_ERROR_WHILE_CONNECTED, e.getLocalizedMessage()); invokeListener(CONNECTION_ERROR_WHILE_CONNECTED, e.getLocalizedMessage());
} }
} finally { } finally {
@@ -200,7 +199,7 @@ public class KeyTransferInteractor {
socket = serverSocket.accept(); socket = serverSocket.accept();
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "error while listening!", e); Timber.e(e, "error while listening!");
invokeListener(CONNECTION_ERROR_LISTEN, null); invokeListener(CONNECTION_ERROR_LISTEN, null);
return null; return null;
} }
@@ -214,7 +213,7 @@ public class KeyTransferInteractor {
socket = sslSocket; socket = sslSocket;
socket.connect(new InetSocketAddress(InetAddress.getByName(clientHost), clientPort), TIMEOUT_CONNECTING); socket.connect(new InetSocketAddress(InetAddress.getByName(clientHost), clientPort), TIMEOUT_CONNECTING);
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "error while connecting!", e); Timber.e(e, "error while connecting!");
if (e instanceof NoRouteToHostException) { if (e instanceof NoRouteToHostException) {
invokeListener(CONNECTION_ERROR_NO_ROUTE_TO_HOST, wifiSsid); invokeListener(CONNECTION_ERROR_NO_ROUTE_TO_HOST, wifiSsid);
} else { } else {
@@ -252,7 +251,7 @@ public class KeyTransferInteractor {
break; break;
} }
} }
Log.d(Constants.TAG, "disconnected"); Timber.d("disconnected");
invokeListener(CONNECTION_LOST, null); invokeListener(CONNECTION_LOST, null);
} }
@@ -270,7 +269,7 @@ public class KeyTransferInteractor {
boolean lineIsDelimiter = delimiterStart.equals(firstLine); boolean lineIsDelimiter = delimiterStart.equals(firstLine);
if (!lineIsDelimiter) { if (!lineIsDelimiter) {
Log.d(Constants.TAG, "bad beginning of key block?"); Timber.d("bad beginning of key block?");
return false; return false;
} }
@@ -25,9 +25,9 @@ import android.content.pm.PackageManager;
import android.net.ConnectivityManager; import android.net.ConnectivityManager;
import android.net.NetworkInfo; import android.net.NetworkInfo;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.service.KeyserverSyncAdapterService; import org.sufficientlysecure.keychain.service.KeyserverSyncAdapterService;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
public class NetworkReceiver extends BroadcastReceiver { public class NetworkReceiver extends BroadcastReceiver {
@@ -60,11 +60,11 @@ public class NetworkReceiver extends BroadcastReceiver {
if (isEnabled) { if (isEnabled) {
pm.setComponentEnabledSetting(compName, pm.setComponentEnabledSetting(compName,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP); PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
Log.d(Constants.TAG, "Wifi Receiver is enabled!"); Timber.d("Wifi Receiver is enabled!");
} else { } else {
pm.setComponentEnabledSetting(compName, pm.setComponentEnabledSetting(compName,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
Log.d(Constants.TAG, "Wifi Receiver is disabled!"); Timber.d("Wifi Receiver is disabled!");
} }
} }
} }
@@ -28,7 +28,8 @@ import com.google.auto.value.AutoValue;
import org.bouncycastle.util.encoders.DecoderException; import org.bouncycastle.util.encoders.DecoderException;
import org.bouncycastle.util.encoders.Hex; import org.bouncycastle.util.encoders.Hex;
import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
@AutoValue @AutoValue
abstract class SktUri { abstract class SktUri {
@@ -75,7 +76,7 @@ abstract class SktUri {
try { try {
wifiSsid = new String(Hex.decode(optarg[1])); wifiSsid = new String(Hex.decode(optarg[1]));
} catch (DecoderException e) { } catch (DecoderException e) {
Log.d(Constants.TAG, "error parsing ssid in skt uri, ignoring: " + input); Timber.d("error parsing ssid in skt uri, ignoring: " + input);
} }
} }
} }
@@ -19,9 +19,6 @@ package org.sufficientlysecure.keychain.network;
import android.content.res.AssetManager; import android.content.res.AssetManager;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.util.Log;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
@@ -45,6 +42,8 @@ import javax.net.ssl.TrustManagerFactory;
import javax.net.ssl.X509TrustManager; import javax.net.ssl.X509TrustManager;
import okhttp3.OkHttpClient; import okhttp3.OkHttpClient;
import timber.log.Timber;
public class TlsCertificatePinning { public class TlsCertificatePinning {
@@ -68,7 +67,7 @@ public class TlsCertificatePinning {
sCertificatePins.put(host, baos.toByteArray()); sCertificatePins.put(host, baos.toByteArray());
} catch (IOException e) { } catch (IOException e) {
Log.w(Constants.TAG, e); Timber.w(e);
} }
} }
@@ -89,7 +88,7 @@ public class TlsCertificatePinning {
* to URLs with passed certificate. * to URLs with passed certificate.
*/ */
void pinCertificate(OkHttpClient.Builder builder) { void pinCertificate(OkHttpClient.Builder builder) {
Log.d(Constants.TAG, "Pinning certificate for " + url); Timber.d("Pinning certificate for " + url);
// We don't use OkHttp's CertificatePinner since it can not be used to pin self-signed // We don't use OkHttp's CertificatePinner since it can not be used to pin self-signed
// certificate if such certificate is not accepted by TrustManager. // certificate if such certificate is not accepted by TrustManager.
@@ -65,18 +65,18 @@ import android.support.v4.app.DialogFragment;
import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentActivity;
import android.text.TextUtils; import android.text.TextUtils;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.ui.dialog.SupportInstallDialogFragment; import org.sufficientlysecure.keychain.ui.dialog.SupportInstallDialogFragment;
import org.sufficientlysecure.keychain.ui.dialog.OrbotStartDialogFragment; import org.sufficientlysecure.keychain.ui.dialog.OrbotStartDialogFragment;
import org.sufficientlysecure.keychain.ui.dialog.PreferenceInstallDialogFragment; import org.sufficientlysecure.keychain.ui.dialog.PreferenceInstallDialogFragment;
import org.sufficientlysecure.keychain.ui.util.ThemeChanger; import org.sufficientlysecure.keychain.ui.util.ThemeChanger;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.ParcelableProxy; import org.sufficientlysecure.keychain.util.ParcelableProxy;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
import timber.log.Timber;
import java.util.List; import java.util.List;
/** /**
* This class is taken from the NetCipher library: https://github.com/guardianproject/NetCipher/ * This class is taken from the NetCipher library: https://github.com/guardianproject/NetCipher/
* All calls that use a shell have been removed. * All calls that use a shell have been removed.
@@ -221,7 +221,7 @@ public class OrbotHelper {
*/ */
public static boolean requestStartTor(Context context) { public static boolean requestStartTor(Context context) {
if (OrbotHelper.isOrbotInstalled(context)) { if (OrbotHelper.isOrbotInstalled(context)) {
Log.i("OrbotHelper", "requestStartTor " + context.getPackageName()); Timber.i("requestStartTor " + context.getPackageName());
Intent intent = getOrbotStartIntent(); Intent intent = getOrbotStartIntent();
intent.putExtra(EXTRA_PACKAGE_NAME, context.getPackageName()); intent.putExtra(EXTRA_PACKAGE_NAME, context.getPackageName());
context.sendBroadcast(intent); context.sendBroadcast(intent);
@@ -245,7 +245,7 @@ public class OrbotHelper {
String foundPackageName = null; String foundPackageName = null;
for (ResolveInfo r : resInfos) { for (ResolveInfo r : resInfos) {
Log.i("OrbotHelper", "market: " + r.activityInfo.packageName); Timber.i("market: " + r.activityInfo.packageName);
if (TextUtils.equals(r.activityInfo.packageName, FDROID_PACKAGE_NAME) if (TextUtils.equals(r.activityInfo.packageName, FDROID_PACKAGE_NAME)
|| TextUtils.equals(r.activityInfo.packageName, PLAY_PACKAGE_NAME)) { || TextUtils.equals(r.activityInfo.packageName, PLAY_PACKAGE_NAME)) {
foundPackageName = r.activityInfo.packageName; foundPackageName = r.activityInfo.packageName;
@@ -416,7 +416,7 @@ public class OrbotHelper {
private ProgressDialog mProgressDialog; private ProgressDialog mProgressDialog;
public void startOrbotAndListen(final Context context, final boolean showProgress) { public void startOrbotAndListen(final Context context, final boolean showProgress) {
Log.d(Constants.TAG, "starting orbot listener"); Timber.d("starting orbot listener");
if (showProgress) { if (showProgress) {
showProgressDialog(context); showProgressDialog(context);
} }
@@ -447,8 +447,8 @@ public class OrbotHelper {
break; break;
} }
Log.d(Constants.TAG, "Orbot silent start broadcast: " + Timber.d("Orbot silent start broadcast: " +
intent.getStringExtra(OrbotHelper.EXTRA_STATUS)); intent.getStringExtra(EXTRA_STATUS));
} }
}; };
context.registerReceiver(receiver, new IntentFilter(OrbotHelper.ACTION_STATUS)); context.registerReceiver(receiver, new IntentFilter(OrbotHelper.ACTION_STATUS));
@@ -22,8 +22,8 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import org.sufficientlysecure.keychain.Constants; import timber.log.Timber;
import org.sufficientlysecure.keychain.util.Log;
/** /**
* BroadcastReceiver that receives Orbots status * BroadcastReceiver that receives Orbots status
@@ -58,18 +58,18 @@ public class OrbotStatusReceiver extends BroadcastReceiver {
String status = intent.getStringExtra(OrbotHelper.EXTRA_STATUS); String status = intent.getStringExtra(OrbotHelper.EXTRA_STATUS);
this.torRunning = (intent.getStringExtra(OrbotHelper.EXTRA_STATUS).equals(OrbotHelper.STATUS_ON)); this.torRunning = (intent.getStringExtra(OrbotHelper.EXTRA_STATUS).equals(OrbotHelper.STATUS_ON));
Log.d(Constants.TAG, "Receiver: Orbot status: " + status); Timber.d("Receiver: Orbot status: " + status);
if (torRunning) { if (torRunning) {
Bundle extras = intent.getExtras(); Bundle extras = intent.getExtras();
if (extras.containsKey(EXTRA_PROXY_PORT_HTTP)) { if (extras.containsKey(EXTRA_PROXY_PORT_HTTP)) {
this.proxyPortHttp = extras.getInt(EXTRA_PROXY_PORT_HTTP, -1); this.proxyPortHttp = extras.getInt(EXTRA_PROXY_PORT_HTTP, -1);
Log.i(Constants.TAG, "Receiver: Orbot Http proxy at " + proxyPortHttp); Timber.i("Receiver: Orbot Http proxy at " + proxyPortHttp);
} }
if (extras.containsKey(EXTRA_PROXY_PORT_SOCKS)) { if (extras.containsKey(EXTRA_PROXY_PORT_SOCKS)) {
this.proxyPortSocks = extras.getInt(EXTRA_PROXY_PORT_SOCKS, -1); this.proxyPortSocks = extras.getInt(EXTRA_PROXY_PORT_SOCKS, -1);
Log.i(Constants.TAG, "Receiver: Orbot Socks proxy at " + proxyPortSocks); Timber.i("Receiver: Orbot Socks proxy at " + proxyPortSocks);
} }
} }
} }
@@ -46,7 +46,6 @@ import org.sufficientlysecure.keychain.operations.results.PgpSignEncryptResult;
import org.sufficientlysecure.keychain.pgp.CanonicalizedPublicKeyRing; import org.sufficientlysecure.keychain.pgp.CanonicalizedPublicKeyRing;
import org.sufficientlysecure.keychain.pgp.CanonicalizedSecretKeyRing; import org.sufficientlysecure.keychain.pgp.CanonicalizedSecretKeyRing;
import org.sufficientlysecure.keychain.pgp.PgpSignEncryptData; import org.sufficientlysecure.keychain.pgp.PgpSignEncryptData;
import org.sufficientlysecure.keychain.pgp.PgpSignEncryptInputParcel;
import org.sufficientlysecure.keychain.pgp.PgpSignEncryptOperation; import org.sufficientlysecure.keychain.pgp.PgpSignEncryptOperation;
import org.sufficientlysecure.keychain.pgp.Progressable; import org.sufficientlysecure.keychain.pgp.Progressable;
import org.sufficientlysecure.keychain.pgp.UncachedKeyRing; import org.sufficientlysecure.keychain.pgp.UncachedKeyRing;
@@ -61,7 +60,7 @@ import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.util.CountingOutputStream; import org.sufficientlysecure.keychain.util.CountingOutputStream;
import org.sufficientlysecure.keychain.util.InputData; import org.sufficientlysecure.keychain.util.InputData;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
/** /**
@@ -259,7 +258,7 @@ public class BackupOperation extends BaseOperation<BackupKeyringParcel> {
if (outStream != null) try { if (outStream != null) try {
outStream.close(); outStream.close();
} catch (Exception e) { } catch (Exception e) {
Log.e(Constants.TAG, "error closing stream", e); Timber.e(e, "error closing stream");
} }
cursor.close(); cursor.close();
} }
@@ -45,9 +45,9 @@ import org.sufficientlysecure.keychain.pgp.SignEncryptParcel;
import org.sufficientlysecure.keychain.provider.KeyWritableRepository; import org.sufficientlysecure.keychain.provider.KeyWritableRepository;
import org.sufficientlysecure.keychain.service.BenchmarkInputParcel; import org.sufficientlysecure.keychain.service.BenchmarkInputParcel;
import org.sufficientlysecure.keychain.service.input.CryptoInputParcel; import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Passphrase; import org.sufficientlysecure.keychain.util.Passphrase;
import org.sufficientlysecure.keychain.util.ProgressScaler; import org.sufficientlysecure.keychain.util.ProgressScaler;
import timber.log.Timber;
public class BenchmarkOperation extends BaseOperation<BenchmarkInputParcel> { public class BenchmarkOperation extends BaseOperation<BenchmarkInputParcel> {
@@ -139,7 +139,7 @@ public class BenchmarkOperation extends BaseOperation<BenchmarkInputParcel> {
iterationsFor100ms = iterations; iterationsFor100ms = iterations;
} catch (PGPException e) { } catch (PGPException e) {
Log.e(Constants.TAG, "internal error during benchmark", e); Timber.e(e, "internal error during benchmark");
log.add(LogType.MSG_INTERNAL_ERROR, 0); log.add(LogType.MSG_INTERNAL_ERROR, 0);
return new BenchmarkResult(BenchmarkResult.RESULT_ERROR, log); return new BenchmarkResult(BenchmarkResult.RESULT_ERROR, log);
} }
@@ -35,7 +35,6 @@ import android.content.Context;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.keyimport.FacebookKeyserverClient; import org.sufficientlysecure.keychain.keyimport.FacebookKeyserverClient;
import org.sufficientlysecure.keychain.keyimport.HkpKeyserverAddress; import org.sufficientlysecure.keychain.keyimport.HkpKeyserverAddress;
@@ -62,11 +61,12 @@ import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;
import org.sufficientlysecure.keychain.service.input.RequiredInputParcel; import org.sufficientlysecure.keychain.service.input.RequiredInputParcel;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.util.IteratorWithSize; import org.sufficientlysecure.keychain.util.IteratorWithSize;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.ParcelableFileCache; import org.sufficientlysecure.keychain.util.ParcelableFileCache;
import org.sufficientlysecure.keychain.util.ParcelableProxy; import org.sufficientlysecure.keychain.util.ParcelableProxy;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
import org.sufficientlysecure.keychain.util.ProgressScaler; import org.sufficientlysecure.keychain.util.ProgressScaler;
import timber.log.Timber;
/** /**
* An operation class which implements high level import * An operation class which implements high level import
@@ -248,7 +248,7 @@ public class ImportOperation extends BaseReadWriteOperation<ImportKeyringParcel>
log.add(result, 2); log.add(result, 2);
} catch (IOException | PgpGeneralException e) { } catch (IOException | PgpGeneralException e) {
Log.e(Constants.TAG, "Encountered bad key on import!", e); Timber.e(e, "Encountered bad key on import!");
++badKeys; ++badKeys;
} }
@@ -400,7 +400,7 @@ public class ImportOperation extends BaseReadWriteOperation<ImportKeyringParcel>
} catch (KeyserverClient.QueryNotFoundException e) { } catch (KeyserverClient.QueryNotFoundException e) {
throw e; throw e;
} catch (KeyserverClient.QueryFailedException e) { } catch (KeyserverClient.QueryFailedException e) {
Log.d(Constants.TAG, "query failed", e); Timber.d(e, "query failed");
log.add(LogType.MSG_IMPORT_FETCH_ERROR_KEYSERVER, 3, e.getMessage()); log.add(LogType.MSG_IMPORT_FETCH_ERROR_KEYSERVER, 3, e.getMessage());
return null; return null;
} }
@@ -426,7 +426,7 @@ public class ImportOperation extends BaseReadWriteOperation<ImportKeyringParcel>
return keybaseKey; return keybaseKey;
} catch (KeyserverClient.QueryFailedException e) { } catch (KeyserverClient.QueryFailedException e) {
// download failed, too bad. just proceed // download failed, too bad. just proceed
Log.e(Constants.TAG, "query failed", e); Timber.e(e, "query failed");
log.add(LogType.MSG_IMPORT_FETCH_ERROR_KEYSERVER, 3, e.getMessage()); log.add(LogType.MSG_IMPORT_FETCH_ERROR_KEYSERVER, 3, e.getMessage());
return null; return null;
} }
@@ -452,7 +452,7 @@ public class ImportOperation extends BaseReadWriteOperation<ImportKeyringParcel>
return facebookKey; return facebookKey;
} catch (KeyserverClient.QueryFailedException e) { } catch (KeyserverClient.QueryFailedException e) {
// download failed, too bad. just proceed // download failed, too bad. just proceed
Log.e(Constants.TAG, "query failed", e); Timber.e(e, "query failed");
log.add(LogType.MSG_IMPORT_FETCH_ERROR_KEYSERVER, 3, e.getMessage()); log.add(LogType.MSG_IMPORT_FETCH_ERROR_KEYSERVER, 3, e.getMessage());
return null; return null;
} }
@@ -515,7 +515,7 @@ public class ImportOperation extends BaseReadWriteOperation<ImportKeyringParcel>
private ImportKeyResult multiThreadedKeyImport(List<ParcelableKeyRing> keyList, private ImportKeyResult multiThreadedKeyImport(List<ParcelableKeyRing> keyList,
final HkpKeyserverAddress keyServer, final ParcelableProxy proxy, final HkpKeyserverAddress keyServer, final ParcelableProxy proxy,
final boolean skipSave) { final boolean skipSave) {
Log.d(Constants.TAG, "Multi-threaded key import starting"); Timber.d("Multi-threaded key import starting");
final Iterator<ParcelableKeyRing> keyListIterator = keyList.iterator(); final Iterator<ParcelableKeyRing> keyListIterator = keyList.iterator();
final int totKeys = keyList.size(); final int totKeys = keyList.size();
@@ -555,8 +555,8 @@ public class ImportOperation extends BaseReadWriteOperation<ImportKeyringParcel>
try { try {
accumulator.accumulateKeyImport(importCompletionService.take().get()); accumulator.accumulateKeyImport(importCompletionService.take().get());
} catch (InterruptedException | ExecutionException e) { } catch (InterruptedException | ExecutionException e) {
Log.e(Constants.TAG, "A key could not be imported during multi-threaded " + Timber.e(e, "A key could not be imported during multi-threaded " +
"import", e); "import");
// do nothing? // do nothing?
if (e instanceof ExecutionException) { if (e instanceof ExecutionException) {
// Since serialKeyRingImport does not throw any exceptions, this is what // Since serialKeyRingImport does not throw any exceptions, this is what
@@ -22,7 +22,6 @@ import android.content.Context;
import android.net.Uri; import android.net.Uri;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.operations.results.EditKeyResult; import org.sufficientlysecure.keychain.operations.results.EditKeyResult;
import org.sufficientlysecure.keychain.operations.results.OperationResult; import org.sufficientlysecure.keychain.operations.results.OperationResult;
import org.sufficientlysecure.keychain.operations.results.RevokeResult; import org.sufficientlysecure.keychain.operations.results.RevokeResult;
@@ -35,7 +34,8 @@ import org.sufficientlysecure.keychain.service.RevokeKeyringParcel;
import org.sufficientlysecure.keychain.service.SaveKeyringParcel; import org.sufficientlysecure.keychain.service.SaveKeyringParcel;
import org.sufficientlysecure.keychain.service.input.CryptoInputParcel; import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
public class RevokeOperation extends BaseReadWriteOperation<RevokeKeyringParcel> { public class RevokeOperation extends BaseReadWriteOperation<RevokeKeyringParcel> {
@@ -97,7 +97,7 @@ public class RevokeOperation extends BaseReadWriteOperation<RevokeKeyringParcel>
} }
} catch (PgpKeyNotFoundException | KeyWritableRepository.NotFoundException e) { } catch (PgpKeyNotFoundException | KeyWritableRepository.NotFoundException e) {
Log.e(Constants.TAG, "could not find key to revoke", e); Timber.e(e, "could not find key to revoke");
log.add(OperationResult.LogType.MSG_REVOKE_ERROR_KEY_FAIL, 1); log.add(OperationResult.LogType.MSG_REVOKE_ERROR_KEY_FAIL, 1);
return new RevokeResult(RevokeResult.RESULT_ERROR, log, masterKeyId); return new RevokeResult(RevokeResult.RESULT_ERROR, log, masterKeyId);
} }
@@ -23,7 +23,6 @@ import android.support.annotation.NonNull;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import org.bouncycastle.bcpg.ArmoredOutputStream; import org.bouncycastle.bcpg.ArmoredOutputStream;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.keyimport.HkpKeyserverClient; import org.sufficientlysecure.keychain.keyimport.HkpKeyserverClient;
import org.sufficientlysecure.keychain.keyimport.KeyserverClient.AddKeyException; import org.sufficientlysecure.keychain.keyimport.KeyserverClient.AddKeyException;
@@ -42,10 +41,10 @@ import org.sufficientlysecure.keychain.service.UploadKeyringParcel;
import org.sufficientlysecure.keychain.service.input.CryptoInputParcel; import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;
import org.sufficientlysecure.keychain.service.input.RequiredInputParcel; import org.sufficientlysecure.keychain.service.input.RequiredInputParcel;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.ParcelableProxy; import org.sufficientlysecure.keychain.util.ParcelableProxy;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
import org.sufficientlysecure.keychain.network.orbot.OrbotHelper; import org.sufficientlysecure.keychain.network.orbot.OrbotHelper;
import timber.log.Timber;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
@@ -130,7 +129,7 @@ public class UploadOperation extends BaseOperation<UploadKeyringParcel> {
return null; return null;
} catch (IOException | PgpGeneralException e) { } catch (IOException | PgpGeneralException e) {
log.add(LogType.MSG_UPLOAD_ERROR_IO, 1); log.add(LogType.MSG_UPLOAD_ERROR_IO, 1);
Log.e(Constants.TAG, "error uploading key", e); Timber.e(e, "error uploading key");
return null; return null;
} }
@@ -159,12 +158,12 @@ public class UploadOperation extends BaseOperation<UploadKeyringParcel> {
log.add(LogType.MSG_UPLOAD_SUCCESS, 1); log.add(LogType.MSG_UPLOAD_SUCCESS, 1);
return new UploadResult(UploadResult.RESULT_OK, log); return new UploadResult(UploadResult.RESULT_OK, log);
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "IOException", e); Timber.e(e, "IOException");
log.add(LogType.MSG_UPLOAD_ERROR_IO, 1); log.add(LogType.MSG_UPLOAD_ERROR_IO, 1);
return new UploadResult(UploadResult.RESULT_ERROR, log); return new UploadResult(UploadResult.RESULT_ERROR, log);
} catch (AddKeyException e) { } catch (AddKeyException e) {
Log.e(Constants.TAG, "AddKeyException", e); Timber.e(e, "AddKeyException");
log.add(LogType.MSG_UPLOAD_ERROR_UPLOAD, 1); log.add(LogType.MSG_UPLOAD_ERROR_UPLOAD, 1);
return new UploadResult(UploadResult.RESULT_ERROR, log); return new UploadResult(UploadResult.RESULT_ERROR, log);
@@ -24,7 +24,6 @@ import android.os.Parcel;
import android.os.Parcelable; import android.os.Parcelable;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.ui.LogDisplayActivity; import org.sufficientlysecure.keychain.ui.LogDisplayActivity;
import org.sufficientlysecure.keychain.ui.LogDisplayFragment; import org.sufficientlysecure.keychain.ui.LogDisplayFragment;
@@ -33,8 +32,8 @@ import org.sufficientlysecure.keychain.ui.util.Notify.ActionListener;
import org.sufficientlysecure.keychain.ui.util.Notify.Showable; import org.sufficientlysecure.keychain.ui.util.Notify.Showable;
import org.sufficientlysecure.keychain.ui.util.Notify.Style; import org.sufficientlysecure.keychain.ui.util.Notify.Style;
import org.sufficientlysecure.keychain.util.IterableIterator; import org.sufficientlysecure.keychain.util.IterableIterator;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.ParcelableCache; import org.sufficientlysecure.keychain.util.ParcelableCache;
import timber.log.Timber;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
@@ -122,7 +121,7 @@ public abstract class OperationResult implements Parcelable {
mType = type; mType = type;
mParameters = parameters; mParameters = parameters;
mIndent = indent; mIndent = indent;
Log.v(Constants.TAG, "log: " + this); Timber.v("log: " + this);
} }
/** Clones this LogEntryParcel, adding extra indent. Note that the parameter array is NOT cloned! */ /** Clones this LogEntryParcel, adding extra indent. Note that the parameter array is NOT cloned! */
@@ -206,7 +205,7 @@ public abstract class OperationResult implements Parcelable {
super(type, indent, parameters); super(type, indent, parameters);
mSubResult = subResult; mSubResult = subResult;
Log.v(Constants.TAG, "log: " + this); Timber.v("log: " + this);
} }
public SubLogEntryParcel(Parcel source) { public SubLogEntryParcel(Parcel source) {
@@ -264,7 +263,7 @@ public abstract class OperationResult implements Parcelable {
LogEntryParcel entryParcel = mLog.getLast(); LogEntryParcel entryParcel = mLog.getLast();
if (entryParcel == null) { if (entryParcel == null) {
Log.e(Constants.TAG, "Tried to show empty log!"); Timber.e("Tried to show empty log!");
return Notify.create(activity, R.string.error_empty_log, Style.ERROR); return Notify.create(activity, R.string.error_empty_log, Style.ERROR);
} }
// special case: first parameter may be a quantity // special case: first parameter may be a quantity
@@ -18,6 +18,14 @@
package org.sufficientlysecure.keychain.pgp; package org.sufficientlysecure.keychain.pgp;
import java.io.IOException;
import java.security.PublicKey;
import java.security.interfaces.ECPublicKey;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Iterator;
import org.bouncycastle.asn1.ASN1ObjectIdentifier; import org.bouncycastle.asn1.ASN1ObjectIdentifier;
import org.bouncycastle.asn1.nist.NISTObjectIdentifiers; import org.bouncycastle.asn1.nist.NISTObjectIdentifiers;
import org.bouncycastle.bcpg.ECDHPublicBCPGKey; import org.bouncycastle.bcpg.ECDHPublicBCPGKey;
@@ -31,18 +39,9 @@ import org.bouncycastle.openpgp.operator.KeyFingerPrintCalculator;
import org.bouncycastle.openpgp.operator.RFC6637Utils; import org.bouncycastle.openpgp.operator.RFC6637Utils;
import org.bouncycastle.openpgp.operator.jcajce.JcaPGPKeyConverter; import org.bouncycastle.openpgp.operator.jcajce.JcaPGPKeyConverter;
import org.bouncycastle.openpgp.operator.jcajce.JcePublicKeyKeyEncryptionMethodGenerator; import org.bouncycastle.openpgp.operator.jcajce.JcePublicKeyKeyEncryptionMethodGenerator;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException; import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException;
import org.sufficientlysecure.keychain.util.IterableIterator; import org.sufficientlysecure.keychain.util.IterableIterator;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
import java.io.IOException;
import java.security.PublicKey;
import java.security.interfaces.ECPublicKey;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Iterator;
/** Wrapper for a PGPPublicKey. /** Wrapper for a PGPPublicKey.
* *
@@ -185,7 +184,7 @@ public class CanonicalizedPublicKey extends UncachedPublicKey {
long seconds = getValidSeconds(); long seconds = getValidSeconds();
if (seconds > Integer.MAX_VALUE) { if (seconds > Integer.MAX_VALUE) {
Log.e(Constants.TAG, "error, expiry time too large"); Timber.e("error, expiry time too large");
return null; return null;
} }
if (seconds == 0) { if (seconds == 0) {
@@ -37,14 +37,21 @@ import org.bouncycastle.openpgp.PGPSignatureGenerator;
import org.bouncycastle.openpgp.PGPSignatureSubpacketGenerator; import org.bouncycastle.openpgp.PGPSignatureSubpacketGenerator;
import org.bouncycastle.openpgp.operator.PBESecretKeyDecryptor; import org.bouncycastle.openpgp.operator.PBESecretKeyDecryptor;
import org.bouncycastle.openpgp.operator.PGPContentSignerBuilder; import org.bouncycastle.openpgp.operator.PGPContentSignerBuilder;
import org.bouncycastle.openpgp.operator.jcajce.*; import org.bouncycastle.openpgp.operator.jcajce.CachingDataDecryptorFactory;
import org.bouncycastle.openpgp.operator.jcajce.EdDsaAuthenticationContentSignerBuilder;
import org.bouncycastle.openpgp.operator.jcajce.JcaPGPContentSignerBuilder;
import org.bouncycastle.openpgp.operator.jcajce.JcaPGPKeyConverter;
import org.bouncycastle.openpgp.operator.jcajce.JcePBESecretKeyDecryptorBuilder;
import org.bouncycastle.openpgp.operator.jcajce.JcePublicKeyDataDecryptorFactoryBuilder;
import org.bouncycastle.openpgp.operator.jcajce.NfcSyncPGPContentSignerBuilder;
import org.bouncycastle.openpgp.operator.jcajce.SessionKeySecretKeyDecryptorBuilder;
import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException; import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException;
import org.sufficientlysecure.keychain.pgp.exception.PgpKeyNotFoundException; import org.sufficientlysecure.keychain.pgp.exception.PgpKeyNotFoundException;
import org.sufficientlysecure.keychain.provider.KeyWritableRepository; import org.sufficientlysecure.keychain.provider.KeyWritableRepository;
import org.sufficientlysecure.keychain.service.input.CryptoInputParcel; import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Passphrase; import org.sufficientlysecure.keychain.util.Passphrase;
import timber.log.Timber;
/** /**
@@ -204,7 +211,7 @@ public class CanonicalizedSecretKey extends CanonicalizedPublicKey {
mPrivateKey = mSecretKey.extractPrivateKey(keyDecryptor); mPrivateKey = mSecretKey.extractPrivateKey(keyDecryptor);
mPrivateKeyState = PRIVATE_KEY_STATE_UNLOCKED; mPrivateKeyState = PRIVATE_KEY_STATE_UNLOCKED;
} catch (PGPException e) { } catch (PGPException e) {
Log.e(Constants.TAG, "Error extracting private key!", e); Timber.e(e, "Error extracting private key!");
return false; return false;
} }
if (mPrivateKey == null) { if (mPrivateKey == null) {
@@ -241,7 +248,7 @@ public class CanonicalizedSecretKey extends CanonicalizedPublicKey {
signatureGenerator.init(PGPSignature.DEFAULT_CERTIFICATION, mPrivateKey); signatureGenerator.init(PGPSignature.DEFAULT_CERTIFICATION, mPrivateKey);
return signatureGenerator; return signatureGenerator;
} catch (PGPException e) { } catch (PGPException e) {
Log.e(Constants.TAG, "signing error", e); Timber.e(e, "signing error");
return null; return null;
} }
} }
@@ -17,19 +17,19 @@
package org.sufficientlysecure.keychain.pgp; package org.sufficientlysecure.keychain.pgp;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import org.bouncycastle.openpgp.PGPKeyRing; import org.bouncycastle.openpgp.PGPKeyRing;
import org.bouncycastle.openpgp.PGPPublicKey; import org.bouncycastle.openpgp.PGPPublicKey;
import org.bouncycastle.openpgp.PGPSecretKey; import org.bouncycastle.openpgp.PGPSecretKey;
import org.bouncycastle.openpgp.PGPSecretKeyRing; import org.bouncycastle.openpgp.PGPSecretKeyRing;
import org.bouncycastle.openpgp.PGPSignature; import org.bouncycastle.openpgp.PGPSignature;
import org.bouncycastle.openpgp.jcajce.JcaPGPObjectFactory; import org.bouncycastle.openpgp.jcajce.JcaPGPObjectFactory;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.util.IterableIterator; import org.sufficientlysecure.keychain.util.IterableIterator;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
public class CanonicalizedSecretKeyRing extends CanonicalizedKeyRing { public class CanonicalizedSecretKeyRing extends CanonicalizedKeyRing {
@@ -47,10 +47,10 @@ public class CanonicalizedSecretKeyRing extends CanonicalizedKeyRing {
PGPKeyRing keyRing = null; PGPKeyRing keyRing = null;
try { try {
if ((keyRing = (PGPKeyRing) factory.nextObject()) == null) { if ((keyRing = (PGPKeyRing) factory.nextObject()) == null) {
Log.e(Constants.TAG, "No keys given!"); Timber.e("No keys given!");
} }
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "Error while converting to PGPKeyRing!", e); Timber.e(e, "Error while converting to PGPKeyRing!");
} }
mRing = (PGPSecretKeyRing) keyRing; mRing = (PGPSecretKeyRing) keyRing;
@@ -18,8 +18,8 @@
package org.sufficientlysecure.keychain.pgp; package org.sufficientlysecure.keychain.pgp;
import org.openintents.openpgp.OpenPgpDecryptionResult; import org.openintents.openpgp.OpenPgpDecryptionResult;
import org.sufficientlysecure.keychain.Constants; import timber.log.Timber;
import org.sufficientlysecure.keychain.util.Log;
class OpenPgpDecryptionResultBuilder { class OpenPgpDecryptionResultBuilder {
@@ -39,16 +39,16 @@ class OpenPgpDecryptionResultBuilder {
public OpenPgpDecryptionResult build() { public OpenPgpDecryptionResult build() {
if (isInsecure) { if (isInsecure) {
Log.d(Constants.TAG, "RESULT_INSECURE"); Timber.d("RESULT_INSECURE");
return new OpenPgpDecryptionResult(OpenPgpDecryptionResult.RESULT_INSECURE, sessionKey, decryptedSessionKey); return new OpenPgpDecryptionResult(OpenPgpDecryptionResult.RESULT_INSECURE, sessionKey, decryptedSessionKey);
} }
if (isEncrypted) { if (isEncrypted) {
Log.d(Constants.TAG, "RESULT_ENCRYPTED"); Timber.d("RESULT_ENCRYPTED");
return new OpenPgpDecryptionResult(OpenPgpDecryptionResult.RESULT_ENCRYPTED, sessionKey, decryptedSessionKey); return new OpenPgpDecryptionResult(OpenPgpDecryptionResult.RESULT_ENCRYPTED, sessionKey, decryptedSessionKey);
} }
Log.d(Constants.TAG, "RESULT_NOT_ENCRYPTED"); Timber.d("RESULT_NOT_ENCRYPTED");
return new OpenPgpDecryptionResult(OpenPgpDecryptionResult.RESULT_NOT_ENCRYPTED); return new OpenPgpDecryptionResult(OpenPgpDecryptionResult.RESULT_NOT_ENCRYPTED);
} }
@@ -25,11 +25,11 @@ import org.openintents.openpgp.OpenPgpSignatureResult;
import org.openintents.openpgp.OpenPgpSignatureResult.SenderStatusResult; import org.openintents.openpgp.OpenPgpSignatureResult.SenderStatusResult;
import org.openintents.openpgp.util.OpenPgpUtils; import org.openintents.openpgp.util.OpenPgpUtils;
import org.openintents.openpgp.util.OpenPgpUtils.UserId; import org.openintents.openpgp.util.OpenPgpUtils.UserId;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.pgp.exception.PgpKeyNotFoundException; import org.sufficientlysecure.keychain.pgp.exception.PgpKeyNotFoundException;
import org.sufficientlysecure.keychain.provider.KeyRepository; import org.sufficientlysecure.keychain.provider.KeyRepository;
import org.sufficientlysecure.keychain.provider.KeyRepository.NotFoundException; import org.sufficientlysecure.keychain.provider.KeyRepository.NotFoundException;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
/** /**
* This class can be used to build OpenPgpSignatureResult objects based on several checks. * This class can be used to build OpenPgpSignatureResult objects based on several checks.
@@ -121,7 +121,7 @@ public class OpenPgpSignatureResultBuilder {
try { try {
setPrimaryUserId(signingRing.getPrimaryUserIdWithFallback()); setPrimaryUserId(signingRing.getPrimaryUserIdWithFallback());
} catch (PgpKeyNotFoundException e) { } catch (PgpKeyNotFoundException e) {
Log.d(Constants.TAG, "No primary user id in keyring with master key id " + signingRing.getMasterKeyId()); Timber.d("No primary user id in keyring with master key id " + signingRing.getMasterKeyId());
} }
setSignatureKeyCertified(signingRing.getVerified() > 0); setSignatureKeyCertified(signingRing.getVerified() > 0);
@@ -168,35 +168,35 @@ public class OpenPgpSignatureResultBuilder {
public OpenPgpSignatureResult build() { public OpenPgpSignatureResult build() {
if (!mSignatureAvailable) { if (!mSignatureAvailable) {
Log.d(Constants.TAG, "RESULT_NO_SIGNATURE"); Timber.d("RESULT_NO_SIGNATURE");
return OpenPgpSignatureResult.createWithNoSignature(); return OpenPgpSignatureResult.createWithNoSignature();
} }
if (!mKnownKey) { if (!mKnownKey) {
Log.d(Constants.TAG, "RESULT_KEY_MISSING"); Timber.d("RESULT_KEY_MISSING");
return OpenPgpSignatureResult.createWithKeyMissing(mKeyId, mSignatureTimestamp); return OpenPgpSignatureResult.createWithKeyMissing(mKeyId, mSignatureTimestamp);
} }
if (!mValidSignature) { if (!mValidSignature) {
Log.d(Constants.TAG, "RESULT_INVALID_SIGNATURE"); Timber.d("RESULT_INVALID_SIGNATURE");
return OpenPgpSignatureResult.createWithInvalidSignature(); return OpenPgpSignatureResult.createWithInvalidSignature();
} }
int signatureStatus; int signatureStatus;
if (mIsKeyRevoked) { if (mIsKeyRevoked) {
Log.d(Constants.TAG, "RESULT_INVALID_KEY_REVOKED"); Timber.d("RESULT_INVALID_KEY_REVOKED");
signatureStatus = OpenPgpSignatureResult.RESULT_INVALID_KEY_REVOKED; signatureStatus = OpenPgpSignatureResult.RESULT_INVALID_KEY_REVOKED;
} else if (mIsKeyExpired) { } else if (mIsKeyExpired) {
Log.d(Constants.TAG, "RESULT_INVALID_KEY_EXPIRED"); Timber.d("RESULT_INVALID_KEY_EXPIRED");
signatureStatus = OpenPgpSignatureResult.RESULT_INVALID_KEY_EXPIRED; signatureStatus = OpenPgpSignatureResult.RESULT_INVALID_KEY_EXPIRED;
} else if (mInsecure) { } else if (mInsecure) {
Log.d(Constants.TAG, "RESULT_INVALID_INSECURE"); Timber.d("RESULT_INVALID_INSECURE");
signatureStatus = OpenPgpSignatureResult.RESULT_INVALID_KEY_INSECURE; signatureStatus = OpenPgpSignatureResult.RESULT_INVALID_KEY_INSECURE;
} else if (mIsSignatureKeyCertified) { } else if (mIsSignatureKeyCertified) {
Log.d(Constants.TAG, "RESULT_VALID_CONFIRMED"); Timber.d("RESULT_VALID_CONFIRMED");
signatureStatus = OpenPgpSignatureResult.RESULT_VALID_KEY_CONFIRMED; signatureStatus = OpenPgpSignatureResult.RESULT_VALID_KEY_CONFIRMED;
} else { } else {
Log.d(Constants.TAG, "RESULT_VALID_UNCONFIRMED"); Timber.d("RESULT_VALID_UNCONFIRMED");
signatureStatus = OpenPgpSignatureResult.RESULT_VALID_KEY_UNCONFIRMED; signatureStatus = OpenPgpSignatureResult.RESULT_VALID_KEY_UNCONFIRMED;
} }
@@ -32,14 +32,13 @@ import org.bouncycastle.openpgp.PGPSignatureSubpacketGenerator;
import org.bouncycastle.openpgp.PGPSignatureSubpacketVector; import org.bouncycastle.openpgp.PGPSignatureSubpacketVector;
import org.bouncycastle.openpgp.PGPUserAttributeSubpacketVector; import org.bouncycastle.openpgp.PGPUserAttributeSubpacketVector;
import org.bouncycastle.openpgp.operator.jcajce.NfcSyncPGPContentSignerBuilder.NfcInteractionNeeded; import org.bouncycastle.openpgp.operator.jcajce.NfcSyncPGPContentSignerBuilder.NfcInteractionNeeded;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.operations.results.OperationResult.LogType; import org.sufficientlysecure.keychain.operations.results.OperationResult.LogType;
import org.sufficientlysecure.keychain.operations.results.OperationResult.OperationLog; import org.sufficientlysecure.keychain.operations.results.OperationResult.OperationLog;
import org.sufficientlysecure.keychain.service.CertifyActionsParcel.CertifyAction; import org.sufficientlysecure.keychain.service.CertifyActionsParcel.CertifyAction;
import org.sufficientlysecure.keychain.service.input.RequiredInputParcel; import org.sufficientlysecure.keychain.service.input.RequiredInputParcel;
import org.sufficientlysecure.keychain.service.input.RequiredInputParcel.SecurityTokenSignOperationsBuilder; import org.sufficientlysecure.keychain.service.input.RequiredInputParcel.SecurityTokenSignOperationsBuilder;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
public class PgpCertifyOperation { public class PgpCertifyOperation {
@@ -67,7 +66,7 @@ public class PgpCertifyOperation {
PGPSignatureSubpacketGenerator spGen = new PGPSignatureSubpacketGenerator(); PGPSignatureSubpacketGenerator spGen = new PGPSignatureSubpacketGenerator();
if (creationTimestamp != null) { if (creationTimestamp != null) {
spGen.setSignatureCreationTime(false, creationTimestamp); spGen.setSignatureCreationTime(false, creationTimestamp);
Log.d(Constants.TAG, "For NFC: set sig creation time to " + creationTimestamp); Timber.d("For NFC: set sig creation time to " + creationTimestamp);
} }
PGPSignatureSubpacketVector packetVector = spGen.generate(); PGPSignatureSubpacketVector packetVector = spGen.generate();
signatureGenerator.setHashedSubpackets(packetVector); signatureGenerator.setHashedSubpackets(packetVector);
@@ -115,7 +114,7 @@ public class PgpCertifyOperation {
} }
} catch (PGPException e) { } catch (PGPException e) {
Log.e(Constants.TAG, "signing error", e); Timber.e(e, "signing error");
return new PgpCertifyResult(); return new PgpCertifyResult();
} }
@@ -83,9 +83,12 @@ import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.util.CharsetVerifier; import org.sufficientlysecure.keychain.util.CharsetVerifier;
import org.sufficientlysecure.keychain.util.FileHelper; import org.sufficientlysecure.keychain.util.FileHelper;
import org.sufficientlysecure.keychain.util.InputData; import org.sufficientlysecure.keychain.util.InputData;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Passphrase; import org.sufficientlysecure.keychain.util.Passphrase;
import org.sufficientlysecure.keychain.util.ProgressScaler; import org.sufficientlysecure.keychain.util.ProgressScaler;
import timber.log.Timber;
import static java.lang.String.format;
public class PgpDecryptVerifyOperation extends BaseOperation<PgpDecryptVerifyInputParcel> { public class PgpDecryptVerifyOperation extends BaseOperation<PgpDecryptVerifyInputParcel> {
@@ -112,7 +115,7 @@ public class PgpDecryptVerifyOperation extends BaseOperation<PgpDecryptVerifyInp
long inputSize = FileHelper.getFileSize(mContext, input.getInputUri(), 0); long inputSize = FileHelper.getFileSize(mContext, input.getInputUri(), 0);
inputData = new InputData(inputStream, inputSize); inputData = new InputData(inputStream, inputSize);
} catch (FileNotFoundException e) { } catch (FileNotFoundException e) {
Log.e(Constants.TAG, "Input URI could not be opened: " + input.getInputUri(), e); Timber.e(e, "Input URI could not be opened: " + input.getInputUri());
OperationLog log = new OperationLog(); OperationLog log = new OperationLog();
log.add(LogType.MSG_DC_ERROR_INPUT, 1); log.add(LogType.MSG_DC_ERROR_INPUT, 1);
return new DecryptVerifyResult(DecryptVerifyResult.RESULT_ERROR, log); return new DecryptVerifyResult(DecryptVerifyResult.RESULT_ERROR, log);
@@ -125,7 +128,7 @@ public class PgpDecryptVerifyOperation extends BaseOperation<PgpDecryptVerifyInp
try { try {
outputStream = mContext.getContentResolver().openOutputStream(input.getOutputUri()); outputStream = mContext.getContentResolver().openOutputStream(input.getOutputUri());
} catch (FileNotFoundException e) { } catch (FileNotFoundException e) {
Log.e(Constants.TAG, "Output URI could not be opened: " + input.getOutputUri(), e); Timber.e(e, "Output URI could not be opened: " + input.getOutputUri());
OperationLog log = new OperationLog(); OperationLog log = new OperationLog();
log.add(LogType.MSG_DC_ERROR_IO, 1); log.add(LogType.MSG_DC_ERROR_IO, 1);
return new DecryptVerifyResult(DecryptVerifyResult.RESULT_ERROR, log); return new DecryptVerifyResult(DecryptVerifyResult.RESULT_ERROR, log);
@@ -139,7 +142,7 @@ public class PgpDecryptVerifyOperation extends BaseOperation<PgpDecryptVerifyInp
} }
result.mOperationTime = System.currentTimeMillis() - startTime; result.mOperationTime = System.currentTimeMillis() - startTime;
Log.d(Constants.TAG, "total time taken: " + String.format("%.2f", result.mOperationTime / 1000.0) + "s"); Timber.d("total time taken: " + format("%.2f", result.mOperationTime / 1000.0) + "s");
return result; return result;
} }
@@ -155,7 +158,7 @@ public class PgpDecryptVerifyOperation extends BaseOperation<PgpDecryptVerifyInp
InputData inputData, OutputStream outputStream) { InputData inputData, OutputStream outputStream) {
try { try {
if (input.getDetachedSignature() != null) { if (input.getDetachedSignature() != null) {
Log.d(Constants.TAG, "Detached signature present, verifying with this signature only"); Timber.d("Detached signature present, verifying with this signature only");
return verifyDetachedSignature(input, inputData, outputStream, 0); return verifyDetachedSignature(input, inputData, outputStream, 0);
} else { } else {
@@ -165,7 +168,7 @@ public class PgpDecryptVerifyOperation extends BaseOperation<PgpDecryptVerifyInp
if (inputStream instanceof ArmoredInputStream) { if (inputStream instanceof ArmoredInputStream) {
ArmoredInputStream aIn = (ArmoredInputStream) inputStream; ArmoredInputStream aIn = (ArmoredInputStream) inputStream;
// it is ascii armored // it is ascii armored
Log.d(Constants.TAG, "ASCII Armor Header Line: " + aIn.getArmorHeaderLine()); Timber.d("ASCII Armor Header Line: " + aIn.getArmorHeaderLine());
if (aIn.isClearText()) { if (aIn.isClearText()) {
// a cleartext signature, verify it with the other method // a cleartext signature, verify it with the other method
@@ -179,19 +182,19 @@ public class PgpDecryptVerifyOperation extends BaseOperation<PgpDecryptVerifyInp
} }
} }
} catch (PGPException e) { } catch (PGPException e) {
Log.d(Constants.TAG, "PGPException", e); Timber.d(e, "PGPException");
OperationLog log = new OperationLog(); OperationLog log = new OperationLog();
log.add(LogType.MSG_DC_ERROR_PGP_EXCEPTION, 1); log.add(LogType.MSG_DC_ERROR_PGP_EXCEPTION, 1);
return new DecryptVerifyResult(DecryptVerifyResult.RESULT_ERROR, log); return new DecryptVerifyResult(DecryptVerifyResult.RESULT_ERROR, log);
} catch (DecoderException | ArrayIndexOutOfBoundsException e) { } catch (DecoderException | ArrayIndexOutOfBoundsException e) {
// these can happen if assumptions in JcaPGPObjectFactory.nextObject() aren't // these can happen if assumptions in JcaPGPObjectFactory.nextObject() aren't
// fulfilled, so we need to catch them here to handle this gracefully // fulfilled, so we need to catch them here to handle this gracefully
Log.d(Constants.TAG, "data error", e); Timber.d(e, "data error");
OperationLog log = new OperationLog(); OperationLog log = new OperationLog();
log.add(LogType.MSG_DC_ERROR_IO, 1); log.add(LogType.MSG_DC_ERROR_IO, 1);
return new DecryptVerifyResult(DecryptVerifyResult.RESULT_ERROR, log); return new DecryptVerifyResult(DecryptVerifyResult.RESULT_ERROR, log);
} catch (IOException e) { } catch (IOException e) {
Log.d(Constants.TAG, "IOException", e); Timber.d(e, "IOException");
OperationLog log = new OperationLog(); OperationLog log = new OperationLog();
log.add(LogType.MSG_DC_ERROR_IO, 1); log.add(LogType.MSG_DC_ERROR_IO, 1);
return new DecryptVerifyResult(DecryptVerifyResult.RESULT_ERROR, log); return new DecryptVerifyResult(DecryptVerifyResult.RESULT_ERROR, log);
@@ -504,7 +507,7 @@ public class PgpDecryptVerifyOperation extends BaseOperation<PgpDecryptVerifyInp
} }
opTime = System.currentTimeMillis()-startTime; opTime = System.currentTimeMillis()-startTime;
Log.d(Constants.TAG, "decrypt time taken: " + String.format("%.2f", opTime / 1000.0) + "s, for " Timber.d("decrypt time taken: " + format("%.2f", opTime / 1000.0) + "s, for "
+ alreadyWritten + " bytes"); + alreadyWritten + " bytes");
// special treatment to detect pgp mime types // special treatment to detect pgp mime types
@@ -522,7 +525,7 @@ public class PgpDecryptVerifyOperation extends BaseOperation<PgpDecryptVerifyInp
alreadyWritten, charsetVerifier.getCharset()); alreadyWritten, charsetVerifier.getCharset());
log.add(LogType.MSG_DC_CLEAR_META_MIME, indent + 1, mimeType); log.add(LogType.MSG_DC_CLEAR_META_MIME, indent + 1, mimeType);
Log.d(Constants.TAG, metadata.toString()); Timber.d(metadata.toString());
indent -= 1; indent -= 1;
@@ -613,9 +616,9 @@ public class PgpDecryptVerifyOperation extends BaseOperation<PgpDecryptVerifyInp
// allow only specific keys for decryption? // allow only specific keys for decryption?
if (input.getAllowedKeyIds() != null) { if (input.getAllowedKeyIds() != null) {
Log.d(Constants.TAG, "encData.getKeyID(): " + subKeyId); Timber.d("encData.getKeyID(): " + subKeyId);
Log.d(Constants.TAG, "mAllowedKeyIds: " + input.getAllowedKeyIds()); Timber.d("mAllowedKeyIds: " + input.getAllowedKeyIds());
Log.d(Constants.TAG, "masterKeyId: " + masterKeyId); Timber.d("masterKeyId: " + masterKeyId);
if (!input.getAllowedKeyIds().contains(masterKeyId)) { if (!input.getAllowedKeyIds().contains(masterKeyId)) {
// this key is in our db, but NOT allowed! // this key is in our db, but NOT allowed!
@@ -913,7 +916,7 @@ public class PgpDecryptVerifyOperation extends BaseOperation<PgpDecryptVerifyInp
signatureChecker.verifySignature(log, indent); signatureChecker.verifySignature(log, indent);
} catch (SignatureException e) { } catch (SignatureException e) {
Log.d(Constants.TAG, "SignatureException", e); Timber.d(e, "SignatureException");
return new DecryptVerifyResult(DecryptVerifyResult.RESULT_ERROR, log); return new DecryptVerifyResult(DecryptVerifyResult.RESULT_ERROR, log);
} }
} }
@@ -27,8 +27,8 @@ import android.support.annotation.Nullable;
import android.support.annotation.VisibleForTesting; import android.support.annotation.VisibleForTesting;
import android.text.TextUtils; import android.text.TextUtils;
import org.sufficientlysecure.keychain.Constants; import timber.log.Timber;
import org.sufficientlysecure.keychain.util.Log;
public class PgpHelper { public class PgpHelper {
@@ -84,14 +84,14 @@ public class PgpHelper {
} }
public static String getPgpMessageContent(@NonNull CharSequence input) { public static String getPgpMessageContent(@NonNull CharSequence input) {
Log.dEscaped(Constants.TAG, "input: " + input); Timber.d("input: %s");
Matcher matcher = PgpHelper.PGP_MESSAGE.matcher(input); Matcher matcher = PgpHelper.PGP_MESSAGE.matcher(input);
if (matcher.matches()) { if (matcher.matches()) {
String text = matcher.group(1); String text = matcher.group(1);
text = fixPgpMessage(text); text = fixPgpMessage(text);
Log.dEscaped(Constants.TAG, "input fixed: " + text); Timber.d("input fixed: %s", text);
return text; return text;
} else { } else {
matcher = PgpHelper.PGP_CLEARTEXT_SIGNATURE.matcher(input); matcher = PgpHelper.PGP_CLEARTEXT_SIGNATURE.matcher(input);
@@ -99,7 +99,7 @@ public class PgpHelper {
String text = matcher.group(1); String text = matcher.group(1);
text = fixPgpCleartextSignature(text); text = fixPgpCleartextSignature(text);
Log.dEscaped(Constants.TAG, "input fixed: " + text); Timber.d("input fixed: %s", text);
return text; return text;
} else { } else {
return null; return null;
@@ -108,7 +108,7 @@ public class PgpHelper {
} }
public static String getPgpPublicKeyContent(@NonNull CharSequence input) { public static String getPgpPublicKeyContent(@NonNull CharSequence input) {
Log.dEscaped(Constants.TAG, "input: " + input); Timber.d("input: %s", input);
Matcher matcher = PgpHelper.PGP_PUBLIC_KEY.matcher(input); Matcher matcher = PgpHelper.PGP_PUBLIC_KEY.matcher(input);
if (!matcher.matches()) { if (!matcher.matches()) {
@@ -165,7 +165,7 @@ public class PgpHelper {
Matcher matcher = KEYDATA_START_PATTERN.matcher(text); Matcher matcher = KEYDATA_START_PATTERN.matcher(text);
if (!matcher.find()) { if (!matcher.find()) {
Log.e(Constants.TAG, "Could not find start of key data!"); Timber.e("Could not find start of key data!");
break; break;
} }
int indexOfPubkeyMaterial = matcher.start(1); int indexOfPubkeyMaterial = matcher.start(1);
@@ -90,10 +90,11 @@ import org.sufficientlysecure.keychain.service.input.RequiredInputParcel.Securit
import org.sufficientlysecure.keychain.service.input.RequiredInputParcel.SecurityTokenSignOperationsBuilder; import org.sufficientlysecure.keychain.service.input.RequiredInputParcel.SecurityTokenSignOperationsBuilder;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.util.IterableIterator; import org.sufficientlysecure.keychain.util.IterableIterator;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Passphrase; import org.sufficientlysecure.keychain.util.Passphrase;
import org.sufficientlysecure.keychain.util.Primes; import org.sufficientlysecure.keychain.util.Primes;
import org.sufficientlysecure.keychain.util.ProgressScaler; import org.sufficientlysecure.keychain.util.ProgressScaler;
import timber.log.Timber;
/** /**
* This class is the single place where ALL operations that actually modify a PGP public or secret * This class is the single place where ALL operations that actually modify a PGP public or secret
@@ -286,7 +287,7 @@ public class PgpKeyOperation {
log.add(LogType.MSG_CR_ERROR_UNKNOWN_ALGO, indent); log.add(LogType.MSG_CR_ERROR_UNKNOWN_ALGO, indent);
return null; return null;
} catch(PGPException e) { } catch(PGPException e) {
Log.e(Constants.TAG, "internal pgp error", e); Timber.e(e, "internal pgp error");
log.add(LogType.MSG_CR_ERROR_INTERNAL_PGP, indent); log.add(LogType.MSG_CR_ERROR_INTERNAL_PGP, indent);
return null; return null;
} }
@@ -364,10 +365,10 @@ public class PgpKeyOperation {
} catch (PGPException e) { } catch (PGPException e) {
log.add(LogType.MSG_CR_ERROR_INTERNAL_PGP, indent); log.add(LogType.MSG_CR_ERROR_INTERNAL_PGP, indent);
Log.e(Constants.TAG, "pgp error encoding key", e); Timber.e(e, "pgp error encoding key");
return new PgpEditKeyResult(PgpEditKeyResult.RESULT_ERROR, log, null); return new PgpEditKeyResult(PgpEditKeyResult.RESULT_ERROR, log, null);
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "io error encoding key", e); Timber.e(e, "io error encoding key");
return new PgpEditKeyResult(PgpEditKeyResult.RESULT_ERROR, log, null); return new PgpEditKeyResult(PgpEditKeyResult.RESULT_ERROR, log, null);
} }
@@ -1137,15 +1138,15 @@ public class PgpKeyOperation {
} }
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "encountered IOException while modifying key", e); Timber.e(e, "encountered IOException while modifying key");
log.add(LogType.MSG_MF_ERROR_ENCODE, indent+1); log.add(LogType.MSG_MF_ERROR_ENCODE, indent+1);
return new PgpEditKeyResult(PgpEditKeyResult.RESULT_ERROR, log, null); return new PgpEditKeyResult(PgpEditKeyResult.RESULT_ERROR, log, null);
} catch (PGPException e) { } catch (PGPException e) {
Log.e(Constants.TAG, "encountered pgp error while modifying key", e); Timber.e(e, "encountered pgp error while modifying key");
log.add(LogType.MSG_MF_ERROR_PGP, indent+1); log.add(LogType.MSG_MF_ERROR_PGP, indent+1);
return new PgpEditKeyResult(PgpEditKeyResult.RESULT_ERROR, log, null); return new PgpEditKeyResult(PgpEditKeyResult.RESULT_ERROR, log, null);
} catch (SignatureException e) { } catch (SignatureException e) {
Log.e(Constants.TAG, "encountered SignatureException while modifying key", e); Timber.e(e, "encountered SignatureException while modifying key");
log.add(LogType.MSG_MF_ERROR_SIG, indent+1); log.add(LogType.MSG_MF_ERROR_SIG, indent+1);
return new PgpEditKeyResult(PgpEditKeyResult.RESULT_ERROR, log, null); return new PgpEditKeyResult(PgpEditKeyResult.RESULT_ERROR, log, null);
} }
@@ -72,9 +72,12 @@ import org.sufficientlysecure.keychain.service.input.RequiredInputParcel;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.util.FileHelper; import org.sufficientlysecure.keychain.util.FileHelper;
import org.sufficientlysecure.keychain.util.InputData; import org.sufficientlysecure.keychain.util.InputData;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Passphrase; import org.sufficientlysecure.keychain.util.Passphrase;
import org.sufficientlysecure.keychain.util.ProgressScaler; import org.sufficientlysecure.keychain.util.ProgressScaler;
import timber.log.Timber;
import static java.lang.String.format;
/** /**
* This class supports a single, low-level, sign/encrypt operation. * This class supports a single, low-level, sign/encrypt operation.
@@ -98,7 +101,7 @@ public class PgpSignEncryptOperation extends BaseOperation<PgpSignEncryptInputPa
try { try {
NEW_LINE = "\r\n".getBytes("UTF-8"); NEW_LINE = "\r\n".getBytes("UTF-8");
} catch (UnsupportedEncodingException e) { } catch (UnsupportedEncodingException e) {
Log.e(Constants.TAG, "UnsupportedEncodingException", e); Timber.e(e, "UnsupportedEncodingException");
} }
} }
@@ -186,7 +189,7 @@ public class PgpSignEncryptOperation extends BaseOperation<PgpSignEncryptInputPa
compressionAlgorithm = PgpSecurityConstants.DEFAULT_COMPRESSION_ALGORITHM; compressionAlgorithm = PgpSecurityConstants.DEFAULT_COMPRESSION_ALGORITHM;
} }
Log.d(Constants.TAG, data.toString()); Timber.d(data.toString());
ArmoredOutputStream armorOut = null; ArmoredOutputStream armorOut = null;
OutputStream out; OutputStream out;
@@ -576,7 +579,7 @@ public class PgpSignEncryptOperation extends BaseOperation<PgpSignEncryptInputPa
} }
opTime = System.currentTimeMillis() - startTime; opTime = System.currentTimeMillis() - startTime;
Log.d(Constants.TAG, "sign/encrypt time taken: " + String.format("%.2f", opTime / 1000.0) + "s"); Timber.d("sign/encrypt time taken: " + format("%.2f", opTime / 1000.0) + "s");
// closing outputs // closing outputs
// NOTE: closing needs to be done in the correct order! // NOTE: closing needs to be done in the correct order!
@@ -635,7 +638,7 @@ public class PgpSignEncryptOperation extends BaseOperation<PgpSignEncryptInputPa
// construct micalg parameter according to https://tools.ietf.org/html/rfc3156#section-5 // construct micalg parameter according to https://tools.ietf.org/html/rfc3156#section-5
result.setMicAlgDigestName("pgp-" + digestName.toLowerCase()); result.setMicAlgDigestName("pgp-" + digestName.toLowerCase());
} catch (PGPException e) { } catch (PGPException e) {
Log.e(Constants.TAG, "error setting micalg parameter!", e); Timber.e(e, "error setting micalg parameter!");
} }
} }
return result; return result;
@@ -41,7 +41,7 @@ import org.sufficientlysecure.keychain.pgp.SecurityProblem.KeySecurityProblem;
import org.sufficientlysecure.keychain.provider.KeyRepository; import org.sufficientlysecure.keychain.provider.KeyRepository;
import org.sufficientlysecure.keychain.provider.KeyWritableRepository; import org.sufficientlysecure.keychain.provider.KeyWritableRepository;
import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings; import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
/** This class is used to track the state of a single signature verification. /** This class is used to track the state of a single signature verification.
@@ -172,7 +172,7 @@ class PgpSignatureChecker {
onePassSignature = sigList.get(i); onePassSignature = sigList.get(i);
return; return;
} catch (KeyWritableRepository.NotFoundException e) { } catch (KeyWritableRepository.NotFoundException e) {
Log.d(Constants.TAG, "key not found, trying next signature..."); Timber.d("key not found, trying next signature...");
} }
} }
} }
@@ -195,7 +195,7 @@ class PgpSignatureChecker {
signature = sigList.get(i); signature = sigList.get(i);
return; return;
} catch (KeyWritableRepository.NotFoundException e) { } catch (KeyWritableRepository.NotFoundException e) {
Log.d(Constants.TAG, "key not found, trying next signature..."); Timber.d("key not found, trying next signature...");
} }
} }
} }
@@ -67,8 +67,9 @@ import org.sufficientlysecure.keychain.operations.results.OperationResult.Operat
import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException; import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.util.IterableIterator; import org.sufficientlysecure.keychain.util.IterableIterator;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Utf8Util; import org.sufficientlysecure.keychain.util.Utf8Util;
import timber.log.Timber;
/** Wrapper around PGPKeyRing class, to be constructed from bytes. /** Wrapper around PGPKeyRing class, to be constructed from bytes.
* *
@@ -217,10 +218,9 @@ public class UncachedKeyRing {
// go through all objects in this block // go through all objects in this block
Object obj; Object obj;
while ((obj = mObjectFactory.nextObject()) != null) { while ((obj = mObjectFactory.nextObject()) != null) {
Log.d(Constants.TAG, "Found class: " + obj.getClass()); Timber.d("Found class: " + obj.getClass());
if (!(obj instanceof PGPKeyRing)) { if (!(obj instanceof PGPKeyRing)) {
Log.i(Constants.TAG, Timber.i("Skipping object of bad type " + obj.getClass().getName() + " in stream");
"Skipping object of bad type " + obj.getClass().getName() + " in stream");
// skip object // skip object
continue; continue;
} }
@@ -17,6 +17,14 @@
package org.sufficientlysecure.keychain.pgp; package org.sufficientlysecure.keychain.pgp;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Iterator;
import org.bouncycastle.bcpg.ECPublicBCPGKey; import org.bouncycastle.bcpg.ECPublicBCPGKey;
import org.bouncycastle.bcpg.SignatureSubpacketTags; import org.bouncycastle.bcpg.SignatureSubpacketTags;
import org.bouncycastle.openpgp.PGPPublicKey; import org.bouncycastle.openpgp.PGPPublicKey;
@@ -26,15 +34,8 @@ import org.bouncycastle.openpgp.PGPUserAttributeSubpacketVector;
import org.bouncycastle.openpgp.operator.jcajce.JcaPGPContentVerifierBuilderProvider; import org.bouncycastle.openpgp.operator.jcajce.JcaPGPContentVerifierBuilderProvider;
import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.util.IterableIterator; import org.sufficientlysecure.keychain.util.IterableIterator;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Utf8Util; import org.sufficientlysecure.keychain.util.Utf8Util;
import timber.log.Timber;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Iterator;
public class UncachedPublicKey { public class UncachedPublicKey {
protected final PGPPublicKey mPublicKey; protected final PGPPublicKey mPublicKey;
@@ -374,7 +375,7 @@ public class UncachedPublicKey {
long valid = mPublicKey.getValidSeconds(); long valid = mPublicKey.getValidSeconds();
if (valid > Integer.MAX_VALUE) { if (valid > Integer.MAX_VALUE) {
Log.e(Constants.TAG, "error, expiry time too large"); Timber.e("error, expiry time too large");
return null; return null;
} }
if (valid == 0) { if (valid == 0) {
@@ -33,7 +33,7 @@ import org.bouncycastle.openpgp.operator.jcajce.JcaKeyFingerprintCalculator;
import org.bouncycastle.openpgp.operator.jcajce.JcaPGPContentVerifierBuilderProvider; import org.bouncycastle.openpgp.operator.jcajce.JcaPGPContentVerifierBuilderProvider;
import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException; import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
@@ -103,7 +103,7 @@ public class WrappedSignature {
} }
} catch (PGPException e) { } catch (PGPException e) {
// no matter // no matter
Log.e(Constants.TAG, "exception reading embedded signatures", e); Timber.e(e, "exception reading embedded signatures");
} }
return sigs; return sigs;
} }
@@ -229,11 +229,11 @@ public class WrappedSignature {
PGPSignatureList signatures = null; PGPSignatureList signatures = null;
try { try {
if ((signatures = (PGPSignatureList) factory.nextObject()) == null || signatures.isEmpty()) { if ((signatures = (PGPSignatureList) factory.nextObject()) == null || signatures.isEmpty()) {
Log.e(Constants.TAG, "No signatures given!"); Timber.e("No signatures given!");
return null; return null;
} }
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "Error while converting to PGPSignature!", e); Timber.e(e, "Error while converting to PGPSignature!");
return null; return null;
} }
@@ -20,14 +20,14 @@ package org.sufficientlysecure.keychain.provider;
import android.net.Uri; import android.net.Uri;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.pgp.CanonicalizedSecretKey.SecretKeyType; import org.sufficientlysecure.keychain.pgp.CanonicalizedSecretKey.SecretKeyType;
import org.sufficientlysecure.keychain.pgp.KeyRing; import org.sufficientlysecure.keychain.pgp.KeyRing;
import org.sufficientlysecure.keychain.pgp.exception.PgpKeyNotFoundException; import org.sufficientlysecure.keychain.pgp.exception.PgpKeyNotFoundException;
import org.sufficientlysecure.keychain.provider.KeyRepository.NotFoundException; import org.sufficientlysecure.keychain.provider.KeyRepository.NotFoundException;
import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings; import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings;
import org.sufficientlysecure.keychain.provider.KeychainContract.Keys; import org.sufficientlysecure.keychain.provider.KeychainContract.Keys;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
/** This implementation of KeyRing provides a cached view of PublicKeyRing /** This implementation of KeyRing provides a cached view of PublicKeyRing
* objects based on database queries exclusively. * objects based on database queries exclusively.
@@ -77,7 +77,7 @@ public class CachedPublicKeyRing extends KeyRing {
return Long.parseLong(firstSegment); return Long.parseLong(firstSegment);
} catch (NumberFormatException e) { } catch (NumberFormatException e) {
// didn't work? oh well. // didn't work? oh well.
Log.d(Constants.TAG, "Couldn't get masterKeyId from URI, querying..."); Timber.d("Couldn't get masterKeyId from URI, querying...");
} }
return getMasterKeyId(); return getMasterKeyId();
} }
@@ -28,10 +28,8 @@ import android.content.Context;
import android.database.Cursor; import android.database.Cursor;
import android.net.Uri; import android.net.Uri;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.util.Log;
import org.bouncycastle.bcpg.ArmoredOutputStream; import org.bouncycastle.bcpg.ArmoredOutputStream;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.operations.results.OperationResult.LogType; import org.sufficientlysecure.keychain.operations.results.OperationResult.LogType;
import org.sufficientlysecure.keychain.operations.results.OperationResult.OperationLog; import org.sufficientlysecure.keychain.operations.results.OperationResult.OperationLog;
import org.sufficientlysecure.keychain.pgp.CanonicalizedPublicKeyRing; import org.sufficientlysecure.keychain.pgp.CanonicalizedPublicKeyRing;
@@ -43,6 +41,7 @@ import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRingData;
import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings; import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings;
import org.sufficientlysecure.keychain.provider.KeychainContract.UpdatedKeys; import org.sufficientlysecure.keychain.provider.KeychainContract.UpdatedKeys;
import org.sufficientlysecure.keychain.provider.KeychainContract.UserPackets; import org.sufficientlysecure.keychain.provider.KeychainContract.UserPackets;
import timber.log.Timber;
public class KeyRepository { public class KeyRepository {
@@ -339,7 +338,7 @@ public class KeyRepository {
try { try {
data = mLocalPublicKeyStorage.readPublicKey(masterKeyId); data = mLocalPublicKeyStorage.readPublicKey(masterKeyId);
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "Error reading public key from storage!", e); Timber.e(e, "Error reading public key from storage!");
throw new NotFoundException(); throw new NotFoundException();
} }
} }
@@ -38,7 +38,6 @@ import android.support.annotation.VisibleForTesting;
import android.support.v4.util.LongSparseArray; import android.support.v4.util.LongSparseArray;
import org.openintents.openpgp.util.OpenPgpUtils; import org.openintents.openpgp.util.OpenPgpUtils;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.operations.results.OperationResult.LogType; import org.sufficientlysecure.keychain.operations.results.OperationResult.LogType;
import org.sufficientlysecure.keychain.operations.results.OperationResult.OperationLog; import org.sufficientlysecure.keychain.operations.results.OperationResult.OperationLog;
@@ -67,9 +66,10 @@ import org.sufficientlysecure.keychain.provider.KeychainContract.UpdatedKeys;
import org.sufficientlysecure.keychain.provider.KeychainContract.UserPackets; import org.sufficientlysecure.keychain.provider.KeychainContract.UserPackets;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.util.IterableIterator; import org.sufficientlysecure.keychain.util.IterableIterator;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
import org.sufficientlysecure.keychain.util.Utf8Util; import org.sufficientlysecure.keychain.util.Utf8Util;
import timber.log.Timber;
/** /**
* This class contains high level methods for database access. Despite its * This class contains high level methods for database access. Despite its
@@ -514,7 +514,7 @@ public class KeyWritableRepository extends KeyRepository {
} catch (IOException e) { } catch (IOException e) {
log(LogType.MSG_IP_ERROR_IO_EXC); log(LogType.MSG_IP_ERROR_IO_EXC);
Log.e(Constants.TAG, "IOException during import", e); Timber.e(e, "IOException during import");
return SaveKeyringResult.RESULT_ERROR; return SaveKeyringResult.RESULT_ERROR;
} finally { } finally {
mIndent -= 1; mIndent -= 1;
@@ -544,11 +544,11 @@ public class KeyWritableRepository extends KeyRepository {
} catch (RemoteException e) { } catch (RemoteException e) {
log(LogType.MSG_IP_ERROR_REMOTE_EX); log(LogType.MSG_IP_ERROR_REMOTE_EX);
Log.e(Constants.TAG, "RemoteException during import", e); Timber.e(e, "RemoteException during import");
return SaveKeyringResult.RESULT_ERROR; return SaveKeyringResult.RESULT_ERROR;
} catch (OperationApplicationException e) { } catch (OperationApplicationException e) {
log(LogType.MSG_IP_ERROR_OP_EXC); log(LogType.MSG_IP_ERROR_OP_EXC);
Log.e(Constants.TAG, "OperationApplicationException during import", e); Timber.e(e, "OperationApplicationException during import");
return SaveKeyringResult.RESULT_ERROR; return SaveKeyringResult.RESULT_ERROR;
} }
@@ -602,7 +602,7 @@ public class KeyWritableRepository extends KeyRepository {
try { try {
mLocalPublicKeyStorage.deletePublicKey(masterKeyId); mLocalPublicKeyStorage.deletePublicKey(masterKeyId);
} catch (IOException e) { } catch (IOException e) {
android.util.Log.e(Constants.TAG, "Could not delete file!", e); Timber.e(e, "Could not delete file!");
return false; return false;
} }
mContentResolver.delete(ApiAutocryptPeer.buildByMasterKeyId(masterKeyId),null, null); mContentResolver.delete(ApiAutocryptPeer.buildByMasterKeyId(masterKeyId),null, null);
@@ -671,7 +671,7 @@ public class KeyWritableRepository extends KeyRepository {
return SaveKeyringResult.RESULT_ERROR; return SaveKeyringResult.RESULT_ERROR;
} }
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "Failed to encode key!", e); Timber.e(e, "Failed to encode key!");
log(LogType.MSG_IS_ERROR_IO_EXC); log(LogType.MSG_IS_ERROR_IO_EXC);
return SaveKeyringResult.RESULT_ERROR; return SaveKeyringResult.RESULT_ERROR;
} }
@@ -1068,7 +1068,7 @@ public class KeyWritableRepository extends KeyRepository {
log.add(result, 1); log.add(result, 1);
progress.setProgress(processedKeys++, totalKeys); progress.setProgress(processedKeys++, totalKeys);
} catch (NotFoundException | PgpGeneralException | IOException e) { } catch (NotFoundException | PgpGeneralException | IOException e) {
Log.e(Constants.TAG, "Error updating trust database", e); Timber.e(e, "Error updating trust database");
return new UpdateTrustResult(UpdateTrustResult.RESULT_ERROR, log); return new UpdateTrustResult(UpdateTrustResult.RESULT_ERROR, log);
} }
} }
@@ -40,8 +40,8 @@ import org.sufficientlysecure.keychain.provider.KeychainContract.KeysColumns;
import org.sufficientlysecure.keychain.provider.KeychainContract.OverriddenWarnings; import org.sufficientlysecure.keychain.provider.KeychainContract.OverriddenWarnings;
import org.sufficientlysecure.keychain.provider.KeychainContract.UpdatedKeysColumns; import org.sufficientlysecure.keychain.provider.KeychainContract.UpdatedKeysColumns;
import org.sufficientlysecure.keychain.provider.KeychainContract.UserPacketsColumns; import org.sufficientlysecure.keychain.provider.KeychainContract.UserPacketsColumns;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
import timber.log.Timber;
/** /**
@@ -215,7 +215,7 @@ public class KeychainDatabase extends SQLiteOpenHelper {
@Override @Override
public void onCreate(SQLiteDatabase db) { public void onCreate(SQLiteDatabase db) {
Log.w(Constants.TAG, "Creating database..."); Timber.w("Creating database...");
db.execSQL(CREATE_KEYRINGS_PUBLIC); db.execSQL(CREATE_KEYRINGS_PUBLIC);
db.execSQL(CREATE_KEYRINGS_SECRET); db.execSQL(CREATE_KEYRINGS_SECRET);
@@ -249,7 +249,7 @@ public class KeychainDatabase extends SQLiteOpenHelper {
@Override @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.d(Constants.TAG, "Upgrading db from " + oldVersion + " to " + newVersion); Timber.d("Upgrading db from " + oldVersion + " to " + newVersion);
switch (oldVersion) { switch (oldVersion) {
case 1: case 1:
@@ -50,7 +50,10 @@ import org.sufficientlysecure.keychain.provider.KeychainContract.UpdatedKeys;
import org.sufficientlysecure.keychain.provider.KeychainContract.UserPackets; import org.sufficientlysecure.keychain.provider.KeychainContract.UserPackets;
import org.sufficientlysecure.keychain.provider.KeychainContract.UserPacketsColumns; import org.sufficientlysecure.keychain.provider.KeychainContract.UserPacketsColumns;
import org.sufficientlysecure.keychain.provider.KeychainDatabase.Tables; import org.sufficientlysecure.keychain.provider.KeychainDatabase.Tables;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
import static android.database.DatabaseUtils.dumpCursorToString;
public class KeychainProvider extends ContentProvider { public class KeychainProvider extends ContentProvider {
@@ -296,7 +299,7 @@ public class KeychainProvider extends ContentProvider {
@Override @Override
public Cursor query(@NonNull Uri uri, String[] projection, String selection, String[] selectionArgs, public Cursor query(@NonNull Uri uri, String[] projection, String selection, String[] selectionArgs,
String sortOrder) { String sortOrder) {
Log.v(Constants.TAG, "query(uri=" + uri + ", proj=" + Arrays.toString(projection) + ")"); Timber.v("query(uri=" + uri + ", proj=" + Arrays.toString(projection) + ")");
SQLiteQueryBuilder qb = new SQLiteQueryBuilder(); SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
@@ -457,7 +460,7 @@ public class KeychainProvider extends ContentProvider {
+ " AND tmp." + Keys.KEY_ID + " = " + subkey + "" + " AND tmp." + Keys.KEY_ID + " = " + subkey + ""
+ ")"); + ")");
} catch(NumberFormatException e) { } catch(NumberFormatException e) {
Log.e(Constants.TAG, "Malformed find by subkey query!", e); Timber.e(e, "Malformed find by subkey query!");
qb.appendWhere(" AND 0"); qb.appendWhere(" AND 0");
} }
break; break;
@@ -510,7 +513,7 @@ public class KeychainProvider extends ContentProvider {
+ ")"); + ")");
} else { } else {
// TODO better way to do this? // TODO better way to do this?
Log.e(Constants.TAG, "Malformed find by email query!"); Timber.e("Malformed find by email query!");
qb.appendWhere(" AND 0"); qb.appendWhere(" AND 0");
} }
break; break;
@@ -795,11 +798,10 @@ public class KeychainProvider extends ContentProvider {
cursor.setNotificationUri(getContext().getContentResolver(), uri); cursor.setNotificationUri(getContext().getContentResolver(), uri);
} }
Log.d(Constants.TAG, Timber.d("Query: " + qb.buildQuery(projection, selection, null, null, orderBy, null));
"Query: " + qb.buildQuery(projection, selection, null, null, orderBy, null));
if (Constants.DEBUG && Constants.DEBUG_LOG_DB_QUERIES) { if (Constants.DEBUG && Constants.DEBUG_LOG_DB_QUERIES) {
Log.d(Constants.TAG, "Cursor: " + DatabaseUtils.dumpCursorToString(cursor)); Timber.d("Cursor: " + dumpCursorToString(cursor));
} }
if (Constants.DEBUG && Constants.DEBUG_EXPLAIN_QUERIES) { if (Constants.DEBUG && Constants.DEBUG_EXPLAIN_QUERIES) {
@@ -813,14 +815,14 @@ public class KeychainProvider extends ContentProvider {
for (int i = 0; i < explainCursor.getColumnCount(); i++) { for (int i = 0; i < explainCursor.getColumnCount(); i++) {
line.append(explainCursor.getColumnName(i)).append(", "); line.append(explainCursor.getColumnName(i)).append(", ");
} }
Log.d(Constants.TAG, line.toString()); Timber.d(line.toString());
while (!explainCursor.isAfterLast()) { while (!explainCursor.isAfterLast()) {
line = new StringBuilder(); line = new StringBuilder();
for (int i = 0; i < explainCursor.getColumnCount(); i++) { for (int i = 0; i < explainCursor.getColumnCount(); i++) {
line.append(explainCursor.getString(i)).append(", "); line.append(explainCursor.getString(i)).append(", ");
} }
Log.d(Constants.TAG, line.toString()); Timber.d(line.toString());
explainCursor.moveToNext(); explainCursor.moveToNext();
} }
@@ -835,7 +837,7 @@ public class KeychainProvider extends ContentProvider {
*/ */
@Override @Override
public Uri insert(Uri uri, ContentValues values) { public Uri insert(Uri uri, ContentValues values) {
Log.d(Constants.TAG, "insert(uri=" + uri + ", values=" + values.toString() + ")"); Timber.d("insert(uri=" + uri + ", values=" + values.toString() + ")");
final SQLiteDatabase db = getDb().getWritableDatabase(); final SQLiteDatabase db = getDb().getWritableDatabase();
@@ -925,7 +927,7 @@ public class KeychainProvider extends ContentProvider {
getContext().getContentResolver().notifyChange(uri, null); getContext().getContentResolver().notifyChange(uri, null);
} catch (SQLiteConstraintException e) { } catch (SQLiteConstraintException e) {
Log.d(Constants.TAG, "Constraint exception on insert! Entry already existing?", e); Timber.d(e, "Constraint exception on insert! Entry already existing?");
} }
return rowUri; return rowUri;
@@ -936,7 +938,7 @@ public class KeychainProvider extends ContentProvider {
*/ */
@Override @Override
public int delete(Uri uri, String additionalSelection, String[] selectionArgs) { public int delete(Uri uri, String additionalSelection, String[] selectionArgs) {
Log.v(Constants.TAG, "delete(uri=" + uri + ")"); Timber.v("delete(uri=" + uri + ")");
final SQLiteDatabase db = getDb().getWritableDatabase(); final SQLiteDatabase db = getDb().getWritableDatabase();
@@ -1028,7 +1030,7 @@ public class KeychainProvider extends ContentProvider {
*/ */
@Override @Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
Log.v(Constants.TAG, "update(uri=" + uri + ", values=" + values.toString() + ")"); Timber.v("update(uri=" + uri + ", values=" + values.toString() + ")");
final SQLiteDatabase db = getDb().getWritableDatabase(); final SQLiteDatabase db = getDb().getWritableDatabase();
ContentResolver contentResolver = getContext().getContentResolver(); ContentResolver contentResolver = getContext().getContentResolver();
@@ -1109,7 +1111,7 @@ public class KeychainProvider extends ContentProvider {
contentResolver.notifyChange(uri, null); contentResolver.notifyChange(uri, null);
} catch (SQLiteConstraintException e) { } catch (SQLiteConstraintException e) {
Log.d(Constants.TAG, "Constraint exception on update! Entry already existing?", e); Timber.d(e, "Constraint exception on update! Entry already existing?");
} }
return count; return count;
@@ -32,7 +32,7 @@ import android.provider.MediaStore;
import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.util.DatabaseUtil; import org.sufficientlysecure.keychain.util.DatabaseUtil;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
import java.io.File; import java.io.File;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
@@ -136,7 +136,7 @@ public class TemporaryFileProvider extends ContentProvider {
@Override @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.d(Constants.TAG, "Upgrading files db from " + oldVersion + " to " + newVersion); Timber.d("Upgrading files db from %s to %s", oldVersion, newVersion);
switch (oldVersion) { switch (oldVersion) {
case 1: case 1:
@@ -188,7 +188,7 @@ public class TemporaryFileProvider extends ContentProvider {
try { try {
file = getFile(uri); file = getFile(uri);
} catch (FileNotFoundException e) { } catch (FileNotFoundException e) {
Log.e(Constants.TAG, "file not found!"); Timber.e("file not found!");
return null; return null;
} }
@@ -253,13 +253,13 @@ public class TemporaryFileProvider extends ContentProvider {
values.put(TemporaryFileColumns.COLUMN_UUID, uuid); values.put(TemporaryFileColumns.COLUMN_UUID, uuid);
int insert = (int) db.getWritableDatabase().insert(TABLE_FILES, null, values); int insert = (int) db.getWritableDatabase().insert(TABLE_FILES, null, values);
if (insert == -1) { if (insert == -1) {
Log.e(Constants.TAG, "Insert failed!"); Timber.e("Insert failed!");
return null; return null;
} }
try { try {
getFile(uuid).createNewFile(); getFile(uuid).createNewFile();
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "File creation failed!"); Timber.e("File creation failed!");
return null; return null;
} }
return Uri.withAppendedPath(CONTENT_URI, uuid); return Uri.withAppendedPath(CONTENT_URI, uuid);
@@ -34,10 +34,9 @@ import android.os.Binder;
import org.openintents.openpgp.OpenPgpError; import org.openintents.openpgp.OpenPgpError;
import org.openintents.openpgp.util.OpenPgpApi; import org.openintents.openpgp.util.OpenPgpApi;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.provider.ApiDataAccessObject; import org.sufficientlysecure.keychain.provider.ApiDataAccessObject;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
/** /**
@@ -86,13 +85,13 @@ public class ApiPermissionHelper {
return null; return null;
} else { } else {
String packageName = getCurrentCallingPackage(); String packageName = getCurrentCallingPackage();
Log.d(Constants.TAG, "isAllowed packageName: " + packageName); Timber.d("isAllowed packageName: " + packageName);
byte[] packageCertificate; byte[] packageCertificate;
try { try {
packageCertificate = getPackageCertificate(packageName); packageCertificate = getPackageCertificate(packageName);
} catch (NameNotFoundException e) { } catch (NameNotFoundException e) {
Log.e(Constants.TAG, "Should not happen, returning!", e); Timber.e(e, "Should not happen, returning!");
// return error // return error
Intent result = new Intent(); Intent result = new Intent();
result.putExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_ERROR); result.putExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_ERROR);
@@ -100,7 +99,7 @@ public class ApiPermissionHelper {
new OpenPgpError(OpenPgpError.GENERIC_ERROR, e.getMessage())); new OpenPgpError(OpenPgpError.GENERIC_ERROR, e.getMessage()));
return result; return result;
} }
Log.e(Constants.TAG, "Not allowed to use service! return PendingIntent for registration!"); Timber.e("Not allowed to use service! return PendingIntent for registration!");
PendingIntent pi = piFactory.createRegisterPendingIntent(data, packageName, packageCertificate); PendingIntent pi = piFactory.createRegisterPendingIntent(data, packageName, packageCertificate);
@@ -112,7 +111,7 @@ public class ApiPermissionHelper {
return result; return result;
} }
} catch (WrongPackageCertificateException e) { } catch (WrongPackageCertificateException e) {
Log.e(Constants.TAG, "wrong signature!", e); Timber.e(e, "wrong signature!");
PendingIntent pi = piFactory.createErrorPendingIntent(data, mContext.getString(R.string.api_error_wrong_signature)); PendingIntent pi = piFactory.createErrorPendingIntent(data, mContext.getString(R.string.api_error_wrong_signature));
@@ -159,7 +158,7 @@ public class ApiPermissionHelper {
// No plans to support sharedUserIds due to many bugs connected to them: // No plans to support sharedUserIds due to many bugs connected to them:
// http://java-hamster.blogspot.de/2010/05/androids-shareduserid.html // http://java-hamster.blogspot.de/2010/05/androids-shareduserid.html
String currentPkg = callingPackages[0]; String currentPkg = callingPackages[0];
Log.d(Constants.TAG, "currentPkg: " + currentPkg); Timber.d("currentPkg: " + currentPkg);
return currentPkg; return currentPkg;
} }
@@ -187,7 +186,7 @@ public class ApiPermissionHelper {
} }
} }
Log.e(Constants.TAG, "Uid is NOT allowed!"); Timber.e("Uid is NOT allowed!");
return false; return false;
} }
@@ -197,16 +196,16 @@ public class ApiPermissionHelper {
* @throws WrongPackageCertificateException * @throws WrongPackageCertificateException
*/ */
public boolean isPackageAllowed(String packageName) throws WrongPackageCertificateException { public boolean isPackageAllowed(String packageName) throws WrongPackageCertificateException {
Log.d(Constants.TAG, "isPackageAllowed packageName: " + packageName); Timber.d("isPackageAllowed packageName: " + packageName);
byte[] storedPackageCert = mApiDao.getApiAppCertificate(packageName); byte[] storedPackageCert = mApiDao.getApiAppCertificate(packageName);
boolean isKnownPackage = storedPackageCert != null; boolean isKnownPackage = storedPackageCert != null;
if (!isKnownPackage) { if (!isKnownPackage) {
Log.d(Constants.TAG, "Package is NOT allowed! packageName: " + packageName); Timber.d("Package is NOT allowed! packageName: " + packageName);
return false; return false;
} }
Log.d(Constants.TAG, "Package is allowed! packageName: " + packageName); Timber.d("Package is allowed! packageName: " + packageName);
byte[] currentPackageCert; byte[] currentPackageCert;
try { try {
@@ -217,7 +216,7 @@ public class ApiPermissionHelper {
boolean packageCertMatchesStored = Arrays.equals(currentPackageCert, storedPackageCert); boolean packageCertMatchesStored = Arrays.equals(currentPackageCert, storedPackageCert);
if (packageCertMatchesStored) { if (packageCertMatchesStored) {
Log.d(Constants.TAG,"Package certificate matches expected."); Timber.d("Package certificate matches expected.");
return true; return true;
} }
@@ -32,7 +32,7 @@ import android.os.RemoteException;
import org.openintents.openpgp.util.OpenPgpApi; import org.openintents.openpgp.util.OpenPgpApi;
import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.service.input.CryptoInputParcel; import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
import java.util.UUID; import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
@@ -158,7 +158,7 @@ public class CryptoInputParcelCacheService extends Service {
case MSG_GET_NOT_FOUND: case MSG_GET_NOT_FOUND:
throw new InputParcelNotFound(); throw new InputParcelNotFound();
default: default:
Log.e(Constants.TAG, "timeout!"); Timber.e("timeout!");
throw new InputParcelNotFound("should not happen!"); throw new InputParcelNotFound("should not happen!");
} }
} }
@@ -206,19 +206,19 @@ public class CryptoInputParcelCacheService extends Service {
try { try {
messenger.send(msg); messenger.send(msg);
} catch (RemoteException e) { } catch (RemoteException e) {
Log.e(Constants.TAG, "CryptoInputParcelCacheService: Sending message failed", e); Timber.e(e, "CryptoInputParcelCacheService: Sending message failed");
} }
break; break;
} }
default: { default: {
Log.e(Constants.TAG, "CryptoInputParcelCacheService: Intent or Intent Action not supported!"); Timber.e("CryptoInputParcelCacheService: Intent or Intent Action not supported!");
break; break;
} }
} }
if (mCache.size() <= 0) { if (mCache.size() <= 0) {
// stop whole service if cache is empty // stop whole service if cache is empty
Log.d(Constants.TAG, "CryptoInputParcelCacheService: No passphrases remaining in memory, stopping service!"); Timber.d("CryptoInputParcelCacheService: No passphrases remaining in memory, stopping service!");
stopSelf(); stopSelf();
} }
@@ -229,13 +229,13 @@ public class CryptoInputParcelCacheService extends Service {
public void onCreate() { public void onCreate() {
super.onCreate(); super.onCreate();
mContext = this; mContext = this;
Log.d(Constants.TAG, "CryptoInputParcelCacheService, onCreate()"); Timber.d("CryptoInputParcelCacheService, onCreate()");
} }
@Override @Override
public void onDestroy() { public void onDestroy() {
super.onDestroy(); super.onDestroy();
Log.d(Constants.TAG, "CryptoInputParcelCacheService, onDestroy()"); Timber.d("CryptoInputParcelCacheService, onDestroy()");
} }
@Override @Override
@@ -54,7 +54,8 @@ import org.sufficientlysecure.keychain.provider.KeychainExternalContract.Autocry
import org.sufficientlysecure.keychain.provider.KeychainExternalContract.EmailStatus; import org.sufficientlysecure.keychain.provider.KeychainExternalContract.EmailStatus;
import org.sufficientlysecure.keychain.provider.SimpleContentResolverInterface; import org.sufficientlysecure.keychain.provider.SimpleContentResolverInterface;
import org.sufficientlysecure.keychain.util.CloseDatabaseCursorFactory; import org.sufficientlysecure.keychain.util.CloseDatabaseCursorFactory;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
public class KeychainExternalProvider extends ContentProvider implements SimpleContentResolverInterface { public class KeychainExternalProvider extends ContentProvider implements SimpleContentResolverInterface {
private static final int EMAIL_STATUS = 101; private static final int EMAIL_STATUS = 101;
@@ -135,7 +136,7 @@ public class KeychainExternalProvider extends ContentProvider implements SimpleC
@Override @Override
public Cursor query(@NonNull Uri uri, String[] projection, String selection, String[] selectionArgs, public Cursor query(@NonNull Uri uri, String[] projection, String selection, String[] selectionArgs,
String sortOrder) { String sortOrder) {
Log.v(Constants.TAG, "query(uri=" + uri + ", proj=" + Arrays.toString(projection) + ")"); Timber.v("query(uri=" + uri + ", proj=" + Arrays.toString(projection) + ")");
SQLiteQueryBuilder qb = new SQLiteQueryBuilder(); SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
@@ -349,8 +350,7 @@ public class KeychainExternalProvider extends ContentProvider implements SimpleC
} }
} }
Log.d(Constants.TAG, Timber.d("Query: " + qb.buildQuery(projection, selection, groupBy, null, orderBy, null));
"Query: " + qb.buildQuery(projection, selection, groupBy, null, orderBy, null));
return cursor; return cursor;
} }
@@ -81,8 +81,9 @@ import org.sufficientlysecure.keychain.service.BackupKeyringParcel;
import org.sufficientlysecure.keychain.service.input.CryptoInputParcel; import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;
import org.sufficientlysecure.keychain.service.input.RequiredInputParcel; import org.sufficientlysecure.keychain.service.input.RequiredInputParcel;
import org.sufficientlysecure.keychain.util.InputData; import org.sufficientlysecure.keychain.util.InputData;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Passphrase; import org.sufficientlysecure.keychain.util.Passphrase;
import timber.log.Timber;
public class OpenPgpService extends Service { public class OpenPgpService extends Service {
public static final int API_VERSION_WITH_KEY_INVALID_INSECURE = 8; public static final int API_VERSION_WITH_KEY_INVALID_INSECURE = 8;
@@ -193,7 +194,7 @@ public class OpenPgpService extends Service {
throw new Exception(getString(errorMsg.mType.getMsgId())); throw new Exception(getString(errorMsg.mType.getMsgId()));
} }
} catch (Exception e) { } catch (Exception e) {
Log.d(Constants.TAG, "signImpl", e); Timber.d(e, "signImpl");
return createErrorResultIntent(OpenPgpError.GENERIC_ERROR, e.getMessage()); return createErrorResultIntent(OpenPgpError.GENERIC_ERROR, e.getMessage());
} }
} }
@@ -296,7 +297,7 @@ public class OpenPgpService extends Service {
throw new Exception(getString(errorMsg.mType.getMsgId())); throw new Exception(getString(errorMsg.mType.getMsgId()));
} }
} catch (Exception e) { } catch (Exception e) {
Log.d(Constants.TAG, "encryptAndSignImpl", e); Timber.d(e, "encryptAndSignImpl");
return createErrorResultIntent(OpenPgpError.GENERIC_ERROR, e.getMessage()); return createErrorResultIntent(OpenPgpError.GENERIC_ERROR, e.getMessage());
} }
} }
@@ -446,7 +447,7 @@ public class OpenPgpService extends Service {
} }
} catch (Exception e) { } catch (Exception e) {
Log.e(Constants.TAG, "decryptAndVerifyImpl", e); Timber.e(e, "decryptAndVerifyImpl");
return createErrorResultIntent(OpenPgpError.GENERIC_ERROR, e.getMessage()); return createErrorResultIntent(OpenPgpError.GENERIC_ERROR, e.getMessage());
} }
} }
@@ -486,7 +487,7 @@ public class OpenPgpService extends Service {
if (autocryptPeerUpdate.hasKeyData()) { if (autocryptPeerUpdate.hasKeyData()) {
UncachedKeyRing uncachedKeyRing = UncachedKeyRing.decodeFromData(autocryptPeerUpdate.getKeyData()); UncachedKeyRing uncachedKeyRing = UncachedKeyRing.decodeFromData(autocryptPeerUpdate.getKeyData());
if (uncachedKeyRing.isSecret()) { if (uncachedKeyRing.isSecret()) {
Log.e(Constants.TAG, "Found secret key in autocrypt id! - Ignoring"); Timber.e("Found secret key in autocrypt id! - Ignoring");
return null; return null;
} }
// this will merge if the key already exists - no worries! // this will merge if the key already exists - no worries!
@@ -669,7 +670,7 @@ public class OpenPgpService extends Service {
try { try {
outputStream.close(); outputStream.close();
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "IOException when closing OutputStream", e); Timber.e(e, "IOException when closing OutputStream");
} }
} }
} }
@@ -689,7 +690,7 @@ public class OpenPgpService extends Service {
return result; return result;
} }
} catch (Exception e) { } catch (Exception e) {
Log.d(Constants.TAG, "getKeyImpl", e); Timber.d(e, "getKeyImpl");
return createErrorResultIntent(OpenPgpError.GENERIC_ERROR, e.getMessage()); return createErrorResultIntent(OpenPgpError.GENERIC_ERROR, e.getMessage());
} }
} }
@@ -776,7 +777,7 @@ public class OpenPgpService extends Service {
return createErrorResultIntent(OpenPgpError.GENERIC_ERROR, errorMsg); return createErrorResultIntent(OpenPgpError.GENERIC_ERROR, errorMsg);
} }
} catch (Exception e) { } catch (Exception e) {
Log.d(Constants.TAG, "backupImpl", e); Timber.d(e, "backupImpl");
return createErrorResultIntent(OpenPgpError.GENERIC_ERROR, e.getMessage()); return createErrorResultIntent(OpenPgpError.GENERIC_ERROR, e.getMessage());
} }
} }
@@ -797,7 +798,7 @@ public class OpenPgpService extends Service {
result.putExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_SUCCESS); result.putExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_SUCCESS);
return result; return result;
} catch (Exception e) { } catch (Exception e) {
Log.d(Constants.TAG, "exception in updateAutocryptPeerImpl", e); Timber.d(e, "exception in updateAutocryptPeerImpl");
return createErrorResultIntent(OpenPgpError.GENERIC_ERROR, e.getMessage()); return createErrorResultIntent(OpenPgpError.GENERIC_ERROR, e.getMessage());
} }
} }
@@ -870,7 +871,8 @@ public class OpenPgpService extends Service {
private final IOpenPgpService.Stub mBinder = new IOpenPgpService.Stub() { private final IOpenPgpService.Stub mBinder = new IOpenPgpService.Stub() {
@Override @Override
public Intent execute(Intent data, ParcelFileDescriptor input, ParcelFileDescriptor output) { public Intent execute(Intent data, ParcelFileDescriptor input, ParcelFileDescriptor output) {
Log.w(Constants.TAG, "You are using a deprecated service which may lead to truncated data on return, please use IOpenPgpService2!"); Timber.w(
"You are using a deprecated service which may lead to truncated data on return, please use IOpenPgpService2!");
return executeInternal(data, input, output); return executeInternal(data, input, output);
} }
@@ -900,14 +902,14 @@ public class OpenPgpService extends Service {
try { try {
inputStream.close(); inputStream.close();
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "IOException when closing input ParcelFileDescriptor", e); Timber.e(e, "IOException when closing input ParcelFileDescriptor");
} }
} }
if (outputStream != null) { if (outputStream != null) {
try { try {
outputStream.close(); outputStream.close();
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "IOException when closing output ParcelFileDescriptor", e); Timber.e(e, "IOException when closing output ParcelFileDescriptor");
} }
} }
} }
@@ -943,7 +945,8 @@ public class OpenPgpService extends Service {
} }
case OpenPgpApi.ACTION_SIGN: { case OpenPgpApi.ACTION_SIGN: {
// DEPRECATED: same as ACTION_CLEARTEXT_SIGN // DEPRECATED: same as ACTION_CLEARTEXT_SIGN
Log.w(Constants.TAG, "You are using a deprecated API call, please use ACTION_CLEARTEXT_SIGN instead of ACTION_SIGN!"); Timber.w(
"You are using a deprecated API call, please use ACTION_CLEARTEXT_SIGN instead of ACTION_SIGN!");
return signImpl(data, inputStream, outputStream, true); return signImpl(data, inputStream, outputStream, true);
} }
case OpenPgpApi.ACTION_DETACHED_SIGN: { case OpenPgpApi.ACTION_DETACHED_SIGN: {
@@ -23,8 +23,7 @@ import android.os.IBinder;
import android.os.ParcelFileDescriptor; import android.os.ParcelFileDescriptor;
import org.openintents.openpgp.IOpenPgpService2; import org.openintents.openpgp.IOpenPgpService2;
import org.sufficientlysecure.keychain.Constants; import timber.log.Timber;
import org.sufficientlysecure.keychain.util.Log;
import java.io.IOException; import java.io.IOException;
import java.util.HashMap; import java.util.HashMap;
@@ -48,7 +47,7 @@ public class OpenPgpService2 extends OpenPgpService {
mOutputPipeMap.put(createKey(outputPipeId), pipe[1]); mOutputPipeMap.put(createKey(outputPipeId), pipe[1]);
return pipe[0]; return pipe[0];
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "IOException in OpenPgpService2", e); Timber.e(e, "IOException in OpenPgpService2");
return null; return null;
} }
@@ -31,12 +31,11 @@ import android.support.annotation.NonNull;
import android.support.annotation.VisibleForTesting; import android.support.annotation.VisibleForTesting;
import org.openintents.openpgp.util.OpenPgpApi; import org.openintents.openpgp.util.OpenPgpApi;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.provider.KeychainContract.ApiAutocryptPeer; import org.sufficientlysecure.keychain.provider.KeychainContract.ApiAutocryptPeer;
import org.sufficientlysecure.keychain.provider.KeychainExternalContract; import org.sufficientlysecure.keychain.provider.KeychainExternalContract;
import org.sufficientlysecure.keychain.provider.KeychainExternalContract.AutocryptStatus; import org.sufficientlysecure.keychain.provider.KeychainExternalContract.AutocryptStatus;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
class OpenPgpServiceKeyIdExtractor { class OpenPgpServiceKeyIdExtractor {
@@ -158,7 +157,7 @@ class OpenPgpServiceKeyIdExtractor {
} }
if (userIdEntries.size() != encryptionAddresses.length) { if (userIdEntries.size() != encryptionAddresses.length) {
Log.e(Constants.TAG, "Number of rows doesn't match number of retrieved rows! Probably a bug?"); Timber.e("Number of rows doesn't match number of retrieved rows! Probably a bug?");
} }
allKeysConfirmed = !anyKeyNotVerified; allKeysConfirmed = !anyKeyNotVerified;
@@ -48,6 +48,7 @@ import org.sufficientlysecure.keychain.ssh.AuthenticationOperation;
import org.sufficientlysecure.keychain.ssh.AuthenticationParcel; import org.sufficientlysecure.keychain.ssh.AuthenticationParcel;
import org.sufficientlysecure.keychain.ssh.AuthenticationResult; import org.sufficientlysecure.keychain.ssh.AuthenticationResult;
import org.sufficientlysecure.keychain.ssh.signature.SshSignatureConverter; import org.sufficientlysecure.keychain.ssh.signature.SshSignatureConverter;
import timber.log.Timber;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
import java.security.PublicKey; import java.security.PublicKey;
@@ -412,7 +413,7 @@ public class SshAuthenticationService extends Service {
} }
private Intent createErrorResult(int errorCode, String errorMessage) { private Intent createErrorResult(int errorCode, String errorMessage) {
Log.e(TAG, errorMessage); Timber.e(errorMessage);
Intent result = new Intent(); Intent result = new Intent();
result.putExtra(SshAuthenticationApi.EXTRA_ERROR, new SshAuthenticationApiError(errorCode, errorMessage)); result.putExtra(SshAuthenticationApi.EXTRA_ERROR, new SshAuthenticationApiError(errorCode, errorMessage));
result.putExtra(SshAuthenticationApi.EXTRA_RESULT_CODE, SshAuthenticationApi.RESULT_CODE_ERROR); result.putExtra(SshAuthenticationApi.EXTRA_RESULT_CODE, SshAuthenticationApi.RESULT_CODE_ERROR);
@@ -35,7 +35,6 @@ import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import org.bouncycastle.util.encoders.Hex; import org.bouncycastle.util.encoders.Hex;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.operations.results.OperationResult; import org.sufficientlysecure.keychain.operations.results.OperationResult;
import org.sufficientlysecure.keychain.provider.ApiDataAccessObject; import org.sufficientlysecure.keychain.provider.ApiDataAccessObject;
@@ -43,7 +42,8 @@ import org.sufficientlysecure.keychain.provider.KeychainContract;
import org.sufficientlysecure.keychain.remote.AppSettings; import org.sufficientlysecure.keychain.remote.AppSettings;
import org.sufficientlysecure.keychain.ui.base.BaseActivity; import org.sufficientlysecure.keychain.ui.base.BaseActivity;
import org.sufficientlysecure.keychain.ui.dialog.AdvancedAppSettingsDialogFragment; import org.sufficientlysecure.keychain.ui.dialog.AdvancedAppSettingsDialogFragment;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
public class AppSettingsActivity extends BaseActivity { public class AppSettingsActivity extends BaseActivity {
private Uri mAppUri; private Uri mAppUri;
@@ -82,12 +82,12 @@ public class AppSettingsActivity extends BaseActivity {
Intent intent = getIntent(); Intent intent = getIntent();
mAppUri = intent.getData(); mAppUri = intent.getData();
if (mAppUri == null) { if (mAppUri == null) {
Log.e(Constants.TAG, "Intent data missing. Should be Uri of app!"); Timber.e("Intent data missing. Should be Uri of app!");
finish(); finish();
return; return;
} }
Log.d(Constants.TAG, "uri: " + mAppUri); Timber.d("uri: %s", mAppUri);
loadData(savedInstanceState, mAppUri); loadData(savedInstanceState, mAppUri);
} }
@@ -142,7 +142,7 @@ public class AppSettingsActivity extends BaseActivity {
byte[] digest = md.digest(); byte[] digest = md.digest();
certificate = new String(Hex.encode(digest)); certificate = new String(Hex.encode(digest));
} catch (NoSuchAlgorithmException e) { } catch (NoSuchAlgorithmException e) {
Log.e(Constants.TAG, "Should not happen!", e); Timber.e(e, "Should not happen!");
} }
AdvancedAppSettingsDialogFragment dialogFragment = AdvancedAppSettingsDialogFragment dialogFragment =
@@ -163,7 +163,7 @@ public class AppSettingsActivity extends BaseActivity {
i.addCategory(Intent.CATEGORY_LAUNCHER); i.addCategory(Intent.CATEGORY_LAUNCHER);
startActivity(i); startActivity(i);
} catch (PackageManager.NameNotFoundException e) { } catch (PackageManager.NameNotFoundException e) {
Log.e(Constants.TAG, "startApp", e); Timber.e(e, "startApp");
} }
} }
@@ -187,7 +187,7 @@ public class AppSettingsActivity extends BaseActivity {
mAppIconView.setImageDrawable(appIcon); mAppIconView.setImageDrawable(appIcon);
Uri allowedKeysUri = appUri.buildUpon().appendPath(KeychainContract.PATH_ALLOWED_KEYS).build(); Uri allowedKeysUri = appUri.buildUpon().appendPath(KeychainContract.PATH_ALLOWED_KEYS).build();
Log.d(Constants.TAG, "allowedKeysUri: " + allowedKeysUri); Timber.d("allowedKeysUri: " + allowedKeysUri);
startListFragments(savedInstanceState, allowedKeysUri); startListFragments(savedInstanceState, allowedKeysUri);
} }
@@ -33,7 +33,6 @@ import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.ListView; import android.widget.ListView;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.compatibility.ListFragmentWorkaround; import org.sufficientlysecure.keychain.compatibility.ListFragmentWorkaround;
import org.sufficientlysecure.keychain.provider.ApiDataAccessObject; import org.sufficientlysecure.keychain.provider.ApiDataAccessObject;
@@ -41,7 +40,8 @@ import org.sufficientlysecure.keychain.provider.KeychainContract;
import org.sufficientlysecure.keychain.ui.adapter.KeyAdapter; import org.sufficientlysecure.keychain.ui.adapter.KeyAdapter;
import org.sufficientlysecure.keychain.ui.adapter.KeySelectableAdapter; import org.sufficientlysecure.keychain.ui.adapter.KeySelectableAdapter;
import org.sufficientlysecure.keychain.ui.widget.FixedListView; import org.sufficientlysecure.keychain.ui.widget.FixedListView;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
public class AppSettingsAllowedKeysListFragment extends ListFragmentWorkaround implements LoaderManager.LoaderCallbacks<Cursor> { public class AppSettingsAllowedKeysListFragment extends ListFragmentWorkaround implements LoaderManager.LoaderCallbacks<Cursor> {
private static final String ARG_DATA_URI = "uri"; private static final String ARG_DATA_URI = "uri";
@@ -143,7 +143,7 @@ public class AppSettingsAllowedKeysListFragment extends ListFragmentWorkaround i
try { try {
mApiDao.saveAllowedKeyIdsForApp(mDataUri, getSelectedMasterKeyIds()); mApiDao.saveAllowedKeyIdsForApp(mDataUri, getSelectedMasterKeyIds());
} catch (RemoteException | OperationApplicationException e) { } catch (RemoteException | OperationApplicationException e) {
Log.e(Constants.TAG, "Problem saving allowed key ids!", e); Timber.e(e, "Problem saving allowed key ids!");
} }
} }
@@ -30,10 +30,9 @@ import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import org.bouncycastle.util.encoders.Hex; import org.bouncycastle.util.encoders.Hex;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.remote.AppSettings; import org.sufficientlysecure.keychain.remote.AppSettings;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
import java.security.MessageDigest; import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
@@ -100,7 +99,7 @@ public class AppSettingsHeaderFragment extends Fragment {
mPackageCertificate.setText(signature); mPackageCertificate.setText(signature);
} catch (NoSuchAlgorithmException e) { } catch (NoSuchAlgorithmException e) {
Log.e(Constants.TAG, "Should not happen!", e); Timber.e(e, "Should not happen!");
} }
} }
@@ -41,11 +41,11 @@ import android.widget.AdapterView.OnItemClickListener;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.provider.KeychainContract; import org.sufficientlysecure.keychain.provider.KeychainContract;
import org.sufficientlysecure.keychain.provider.KeychainContract.ApiApps; import org.sufficientlysecure.keychain.provider.KeychainContract.ApiApps;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
public class AppsListFragment extends ListFragment implements public class AppsListFragment extends ListFragment implements
LoaderManager.LoaderCallbacks<Cursor>, OnItemClickListener { LoaderManager.LoaderCallbacks<Cursor>, OnItemClickListener {
@@ -106,7 +106,7 @@ public class AppsListFragment extends ListFragment implements
i.addCategory(Intent.CATEGORY_LAUNCHER); i.addCategory(Intent.CATEGORY_LAUNCHER);
startActivity(i); startActivity(i);
} catch (PackageManager.NameNotFoundException e) { } catch (PackageManager.NameNotFoundException e) {
Log.e(Constants.TAG, "startApp", e); Timber.e(e, "startApp");
} }
} }
} else { } else {
@@ -326,7 +326,7 @@ public class AppsListFragment extends ListFragment implements
ImageView installIcon = (ImageView) view.findViewById(R.id.api_apps_adapter_install_icon); ImageView installIcon = (ImageView) view.findViewById(R.id.api_apps_adapter_install_icon);
String packageName = cursor.getString(INDEX_PACKAGE_NAME); String packageName = cursor.getString(INDEX_PACKAGE_NAME);
Log.d(Constants.TAG, "packageName: " + packageName); Timber.d("packageName: " + packageName);
int installed = cursor.getInt(INDEX_INSTALLED); int installed = cursor.getInt(INDEX_INSTALLED);
String name = cursor.getString(INDEX_NAME); String name = cursor.getString(INDEX_NAME);
int iconResName = cursor.getInt(INDEX_ICON_RES_ID); int iconResName = cursor.getInt(INDEX_ICON_RES_ID);
@@ -25,11 +25,10 @@ import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.PackageManager.NameNotFoundException;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.provider.ApiDataAccessObject; import org.sufficientlysecure.keychain.provider.ApiDataAccessObject;
import org.sufficientlysecure.keychain.remote.AppSettings; import org.sufficientlysecure.keychain.remote.AppSettings;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
class RemoteRegisterPresenter { class RemoteRegisterPresenter {
@@ -61,7 +60,7 @@ class RemoteRegisterPresenter {
try { try {
setPackageInfo(packageName); setPackageInfo(packageName);
} catch (NameNotFoundException e) { } catch (NameNotFoundException e) {
Log.e(Constants.TAG, "Unable to find info of calling app!"); Timber.e("Unable to find info of calling app!");
view.finishAsCancelled(); view.finishAsCancelled();
return; return;
} }
@@ -26,7 +26,6 @@ import android.graphics.drawable.Drawable;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import org.openintents.openpgp.util.OpenPgpUtils.UserId; import org.openintents.openpgp.util.OpenPgpUtils.UserId;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.pgp.CanonicalizedSecretKey.SecretKeyType; import org.sufficientlysecure.keychain.pgp.CanonicalizedSecretKey.SecretKeyType;
import org.sufficientlysecure.keychain.pgp.exception.PgpKeyNotFoundException; import org.sufficientlysecure.keychain.pgp.exception.PgpKeyNotFoundException;
@@ -37,7 +36,7 @@ import org.sufficientlysecure.keychain.provider.KeyRepository.NotFoundException;
import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings; import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings;
import org.sufficientlysecure.keychain.remote.ApiPermissionHelper; import org.sufficientlysecure.keychain.remote.ApiPermissionHelper;
import org.sufficientlysecure.keychain.remote.ApiPermissionHelper.WrongPackageCertificateException; import org.sufficientlysecure.keychain.remote.ApiPermissionHelper.WrongPackageCertificateException;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
class RequestKeyPermissionPresenter { class RequestKeyPermissionPresenter {
@@ -83,7 +82,7 @@ class RequestKeyPermissionPresenter {
try { try {
setPackageInfo(packageName); setPackageInfo(packageName);
} catch (NameNotFoundException e) { } catch (NameNotFoundException e) {
Log.e(Constants.TAG, "Unable to find info of calling app!"); Timber.e("Unable to find info of calling app!");
view.finishAsCancelled(); view.finishAsCancelled();
return; return;
} }
@@ -25,14 +25,12 @@ import android.view.View;
import android.widget.TextView; import android.widget.TextView;
import org.openintents.openpgp.util.OpenPgpApi; import org.openintents.openpgp.util.OpenPgpApi;
import org.openintents.openpgp.util.OpenPgpUtils;
import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.operations.results.OperationResult; import org.sufficientlysecure.keychain.operations.results.OperationResult;
import org.sufficientlysecure.keychain.pgp.KeyRing;
import org.sufficientlysecure.keychain.ui.base.BaseActivity; import org.sufficientlysecure.keychain.ui.base.BaseActivity;
import org.sufficientlysecure.keychain.ui.CreateKeyActivity; import timber.log.Timber;
import org.sufficientlysecure.keychain.util.Log;
public class SelectSignKeyIdActivity extends BaseActivity { public class SelectSignKeyIdActivity extends BaseActivity {
@@ -74,10 +72,10 @@ public class SelectSignKeyIdActivity extends BaseActivity {
mPreferredUserId = intent.getStringExtra(EXTRA_USER_ID); mPreferredUserId = intent.getStringExtra(EXTRA_USER_ID);
mData = intent.getParcelableExtra(EXTRA_DATA); mData = intent.getParcelableExtra(EXTRA_DATA);
if (appUri == null) { if (appUri == null) {
Log.e(Constants.TAG, "Intent data missing. Should be Uri of app!"); Timber.e("Intent data missing. Should be Uri of app!");
finish(); finish();
} else { } else {
Log.d(Constants.TAG, "uri: " + appUri); Timber.d("uri: " + appUri);
startListFragments(savedInstanceState, appUri, mData, mPreferredUserId); startListFragments(savedInstanceState, appUri, mData, mPreferredUserId);
} }
} }
@@ -123,7 +121,7 @@ public class SelectSignKeyIdActivity extends BaseActivity {
// EditKeyResult result = data.getParcelableExtra(OperationResult.EXTRA_RESULT); // EditKeyResult result = data.getParcelableExtra(OperationResult.EXTRA_RESULT);
// mSelectKeySpinner.setSelectedKeyId(result.mMasterKeyId); // mSelectKeySpinner.setSelectedKeyId(result.mMasterKeyId);
} else { } else {
Log.e(Constants.TAG, "missing result!"); Timber.e("missing result!");
} }
} }
break; break;
@@ -30,7 +30,6 @@ import android.support.v7.widget.LinearLayoutManager;
import org.openintents.openpgp.util.OpenPgpApi; import org.openintents.openpgp.util.OpenPgpApi;
import org.openintents.openpgp.util.OpenPgpUtils; import org.openintents.openpgp.util.OpenPgpUtils;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.pgp.KeyRing; import org.sufficientlysecure.keychain.pgp.KeyRing;
import org.sufficientlysecure.keychain.provider.ApiDataAccessObject; import org.sufficientlysecure.keychain.provider.ApiDataAccessObject;
@@ -40,7 +39,8 @@ import org.sufficientlysecure.keychain.remote.ui.adapter.SelectSignKeyAdapter;
import org.sufficientlysecure.keychain.ui.CreateKeyActivity; import org.sufficientlysecure.keychain.ui.CreateKeyActivity;
import org.sufficientlysecure.keychain.ui.util.adapter.CursorAdapter; import org.sufficientlysecure.keychain.ui.util.adapter.CursorAdapter;
import org.sufficientlysecure.keychain.ui.base.RecyclerFragment; import org.sufficientlysecure.keychain.ui.base.RecyclerFragment;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
public class SelectSignKeyIdListFragment extends RecyclerFragment<SelectSignKeyAdapter> public class SelectSignKeyIdListFragment extends RecyclerFragment<SelectSignKeyAdapter>
implements SelectSignKeyAdapter.SelectSignKeyListener, LoaderManager.LoaderCallbacks<Cursor> { implements SelectSignKeyAdapter.SelectSignKeyListener, LoaderManager.LoaderCallbacks<Cursor> {
@@ -182,8 +182,8 @@ public class SelectSignKeyIdListFragment extends RecyclerFragment<SelectSignKeyA
mApiDao.addAllowedKeyIdForApp(allowedKeysUri, masterKeyId); mApiDao.addAllowedKeyIdForApp(allowedKeysUri, masterKeyId);
mResult.putExtra(OpenPgpApi.EXTRA_SIGN_KEY_ID, masterKeyId); mResult.putExtra(OpenPgpApi.EXTRA_SIGN_KEY_ID, masterKeyId);
Log.d(Constants.TAG, "allowedKeyId: " + masterKeyId); Timber.d("allowedKeyId: " + masterKeyId);
Log.d(Constants.TAG, "allowedKeysUri: " + allowedKeysUri); Timber.d("allowedKeysUri: " + allowedKeysUri);
getActivity().setResult(Activity.RESULT_OK, mResult); getActivity().setResult(Activity.RESULT_OK, mResult);
getActivity().finish(); getActivity().finish();
@@ -30,12 +30,11 @@ import android.support.v4.app.LoaderManager;
import android.support.v4.app.LoaderManager.LoaderCallbacks; import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.Loader; import android.support.v4.content.Loader;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.provider.AutocryptPeerDataAccessObject; import org.sufficientlysecure.keychain.provider.AutocryptPeerDataAccessObject;
import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings; import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings;
import org.sufficientlysecure.keychain.remote.ui.dialog.KeyLoader.KeyInfo; import org.sufficientlysecure.keychain.remote.ui.dialog.KeyLoader.KeyInfo;
import org.sufficientlysecure.keychain.remote.ui.dialog.KeyLoader.KeySelector; import org.sufficientlysecure.keychain.remote.ui.dialog.KeyLoader.KeySelector;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
class RemoteDeduplicatePresenter implements LoaderCallbacks<List<KeyInfo>> { class RemoteDeduplicatePresenter implements LoaderCallbacks<List<KeyInfo>> {
@@ -68,7 +67,7 @@ class RemoteDeduplicatePresenter implements LoaderCallbacks<List<KeyInfo>> {
try { try {
setPackageInfo(packageName); setPackageInfo(packageName);
} catch (NameNotFoundException e) { } catch (NameNotFoundException e) {
Log.e(Constants.TAG, "Unable to find info of calling app!"); Timber.e("Unable to find info of calling app!");
view.finishAsCancelled(); view.finishAsCancelled();
return; return;
} }
@@ -113,11 +112,11 @@ class RemoteDeduplicatePresenter implements LoaderCallbacks<List<KeyInfo>> {
void onClickSelect() { void onClickSelect() {
if (keyInfoData == null) { if (keyInfoData == null) {
Log.e(Constants.TAG, "got click on select with no data…?"); Timber.e("got click on select with no data…?");
return; return;
} }
if (selectedItem == null) { if (selectedItem == null) {
Log.e(Constants.TAG, "got click on select with no selection…?"); Timber.e("got click on select with no selection…?");
return; return;
} }
@@ -28,11 +28,10 @@ import android.support.v4.app.LoaderManager;
import android.support.v4.app.LoaderManager.LoaderCallbacks; import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.Loader; import android.support.v4.content.Loader;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings; import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings;
import org.sufficientlysecure.keychain.remote.ui.dialog.KeyLoader.KeyInfo; import org.sufficientlysecure.keychain.remote.ui.dialog.KeyLoader.KeyInfo;
import org.sufficientlysecure.keychain.remote.ui.dialog.KeyLoader.KeySelector; import org.sufficientlysecure.keychain.remote.ui.dialog.KeyLoader.KeySelector;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
import java.util.List; import java.util.List;
@@ -64,7 +63,7 @@ class RemoteSelectAuthenticationKeyPresenter implements LoaderCallbacks<List<Key
try { try {
setPackageInfo(packageName); setPackageInfo(packageName);
} catch (NameNotFoundException e) { } catch (NameNotFoundException e) {
Log.e(Constants.TAG, "Unable to find info of calling app!"); Timber.e("Unable to find info of calling app!");
view.finishAsCancelled(); view.finishAsCancelled();
} }
} }
@@ -103,11 +102,11 @@ class RemoteSelectAuthenticationKeyPresenter implements LoaderCallbacks<List<Key
void onClickSelect() { void onClickSelect() {
if (keyInfoData == null) { if (keyInfoData == null) {
Log.e(Constants.TAG, "got click on select with no data…?"); Timber.e("got click on select with no data…?");
return; return;
} }
if (selectedItem == null) { if (selectedItem == null) {
Log.e(Constants.TAG, "got click on select with no selection…?"); Timber.e("got click on select with no selection…?");
return; return;
} }
@@ -17,10 +17,7 @@
package org.sufficientlysecure.keychain.securitytoken; package org.sufficientlysecure.keychain.securitytoken;
import org.bouncycastle.util.encoders.Hex;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.securitytoken.usb.UsbTransportException; import org.sufficientlysecure.keychain.securitytoken.usb.UsbTransportException;
import org.sufficientlysecure.keychain.util.Log;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.util.Arrays; import java.util.Arrays;
@@ -31,6 +31,10 @@ import java.io.IOException;
import nordpol.IsoCard; import nordpol.IsoCard;
import nordpol.android.AndroidCard; import nordpol.android.AndroidCard;
import timber.log.Timber;
import static org.bouncycastle.util.encoders.Hex.toHexString;
public class NfcTransport implements Transport { public class NfcTransport implements Transport {
// timeout is set to 100 seconds to avoid cancellation during calculation // timeout is set to 100 seconds to avoid cancellation during calculation
@@ -60,12 +64,12 @@ public class NfcTransport implements Transport {
public ResponseApdu transceive(final CommandApdu data) throws IOException { public ResponseApdu transceive(final CommandApdu data) throws IOException {
byte[] rawCommand = data.toBytes(); byte[] rawCommand = data.toBytes();
if (Constants.DEBUG) { if (Constants.DEBUG) {
Log.d(Constants.TAG, "nfc out: " + Hex.toHexString(rawCommand)); Timber.d("nfc out: " + toHexString(rawCommand));
} }
byte[] rawResponse = mIsoCard.transceive(rawCommand); byte[] rawResponse = mIsoCard.transceive(rawCommand);
if (Constants.DEBUG) { if (Constants.DEBUG) {
Log.d(Constants.TAG, "nfc in: " + Hex.toHexString(rawResponse)); Timber.d("nfc in: " + toHexString(rawResponse));
} }
return ResponseApdu.fromBytes(rawResponse); return ResponseApdu.fromBytes(rawResponse);
@@ -27,11 +27,10 @@ import android.support.annotation.NonNull;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.annotation.VisibleForTesting; import android.support.annotation.VisibleForTesting;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.securitytoken.SecurityTokenInfo.TokenType; import org.sufficientlysecure.keychain.securitytoken.SecurityTokenInfo.TokenType;
import org.sufficientlysecure.keychain.securitytoken.SecurityTokenInfo.TransportType; import org.sufficientlysecure.keychain.securitytoken.SecurityTokenInfo.TransportType;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Passphrase; import org.sufficientlysecure.keychain.util.Passphrase;
import timber.log.Timber;
/** /**
@@ -256,7 +255,7 @@ public class SecurityTokenConnection {
secureMessaging = SCP11bSecureMessaging.establish(this, context, commandFactory); secureMessaging = SCP11bSecureMessaging.establish(this, context, commandFactory);
} catch (SecureMessagingException e) { } catch (SecureMessagingException e) {
secureMessaging = null; secureMessaging = null;
Log.e(Constants.TAG, "failed to establish secure messaging", e); Timber.e(e, "failed to establish secure messaging");
} }
} }
@@ -427,7 +426,7 @@ public class SecurityTokenConnection {
// Note: This should not happen, but happens with // Note: This should not happen, but happens with
// https://github.com/FluffyKaon/OpenPGP-Card, thus return an empty string for now! // https://github.com/FluffyKaon/OpenPGP-Card, thus return an empty string for now!
Log.e(Constants.TAG, "Couldn't get holder name, returning empty string!", e); Timber.e(e, "Couldn't get holder name, returning empty string!");
return ""; return "";
} }
} }
@@ -25,10 +25,10 @@ import android.content.IntentFilter;
import android.hardware.usb.UsbDevice; import android.hardware.usb.UsbDevice;
import android.hardware.usb.UsbManager; import android.hardware.usb.UsbManager;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.securitytoken.usb.UsbTransport; import org.sufficientlysecure.keychain.securitytoken.usb.UsbTransport;
import org.sufficientlysecure.keychain.ui.UsbEventReceiverActivity; import org.sufficientlysecure.keychain.ui.UsbEventReceiverActivity;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
public class UsbConnectionDispatcher { public class UsbConnectionDispatcher {
private Activity mActivity; private Activity mActivity;
@@ -50,7 +50,7 @@ public class UsbConnectionDispatcher {
boolean permission = intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, boolean permission = intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED,
false); false);
if (permission) { if (permission) {
Log.d(Constants.TAG, "Got permission for " + usbDevice.getDeviceName()); Timber.d("Got permission for " + usbDevice.getDeviceName());
sendUsbTransportDiscovered(usbDevice); sendUsbTransportDiscovered(usbDevice);
} }
break; break;
@@ -28,16 +28,14 @@ import org.bouncycastle.asn1.DERSequence;
import org.bouncycastle.bcpg.HashAlgorithmTags; import org.bouncycastle.bcpg.HashAlgorithmTags;
import org.bouncycastle.util.Arrays; import org.bouncycastle.util.Arrays;
import org.bouncycastle.util.encoders.Hex; import org.bouncycastle.util.encoders.Hex;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.securitytoken.CardException; import org.sufficientlysecure.keychain.securitytoken.CardException;
import org.sufficientlysecure.keychain.securitytoken.CommandApdu; import org.sufficientlysecure.keychain.securitytoken.CommandApdu;
import org.sufficientlysecure.keychain.securitytoken.KeyFormat; import org.sufficientlysecure.keychain.securitytoken.KeyFormat;
import org.sufficientlysecure.keychain.securitytoken.KeyType;
import org.sufficientlysecure.keychain.securitytoken.OpenPgpCapabilities; import org.sufficientlysecure.keychain.securitytoken.OpenPgpCapabilities;
import org.sufficientlysecure.keychain.securitytoken.RSAKeyFormat; import org.sufficientlysecure.keychain.securitytoken.RSAKeyFormat;
import org.sufficientlysecure.keychain.securitytoken.ResponseApdu; import org.sufficientlysecure.keychain.securitytoken.ResponseApdu;
import org.sufficientlysecure.keychain.securitytoken.SecurityTokenConnection; import org.sufficientlysecure.keychain.securitytoken.SecurityTokenConnection;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
public class SecurityTokenPsoSignTokenOp { public class SecurityTokenPsoSignTokenOp {
@@ -54,7 +52,7 @@ public class SecurityTokenPsoSignTokenOp {
private byte[] prepareDsi(byte[] hash, int hashAlgo) throws IOException { private byte[] prepareDsi(byte[] hash, int hashAlgo) throws IOException {
byte[] dsi; byte[] dsi;
Log.i(Constants.TAG, "Hash: " + hashAlgo); Timber.i("Hash: " + hashAlgo);
switch (hashAlgo) { switch (hashAlgo) {
case HashAlgorithmTags.SHA1: case HashAlgorithmTags.SHA1:
if (hash.length != 20) { if (hash.length != 20) {
@@ -27,13 +27,13 @@ import android.os.SystemClock;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.annotation.WorkerThread; import android.support.annotation.WorkerThread;
import android.util.Log;
import com.google.auto.value.AutoValue; import com.google.auto.value.AutoValue;
import org.bouncycastle.util.Arrays; import org.bouncycastle.util.Arrays;
import org.bouncycastle.util.encoders.Hex;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.securitytoken.usb.UsbTransportException.UsbCcidErrorException; import org.sufficientlysecure.keychain.securitytoken.usb.UsbTransportException.UsbCcidErrorException;
import timber.log.Timber;
import static org.bouncycastle.util.encoders.Hex.toHexString;
public class CcidTransceiver { public class CcidTransceiver {
@@ -87,14 +87,14 @@ public class CcidTransceiver {
CcidDataBlock response = null; CcidDataBlock response = null;
for (CcidDescription.Voltage v : usbCcidDescription.getVoltages()) { for (CcidDescription.Voltage v : usbCcidDescription.getVoltages()) {
Log.v(Constants.TAG, "CCID: attempting to power on with voltage " + v.toString()); Timber.v("CCID: attempting to power on with voltage " + v.toString());
try { try {
response = iccPowerOnVoltage(v.powerOnValue); response = iccPowerOnVoltage(v.powerOnValue);
} catch (UsbCcidErrorException e) { } catch (UsbCcidErrorException e) {
if (e.getErrorResponse().getError() == 7) { // Power select error if (e.getErrorResponse().getError() == 7) { // Power select error
Log.v(Constants.TAG, "CCID: failed to power on with voltage " + v.toString()); Timber.v("CCID: failed to power on with voltage " + v.toString());
iccPowerOff(); iccPowerOff();
Log.v(Constants.TAG, "CCID: powered off"); Timber.v("CCID: powered off");
continue; continue;
} }
@@ -109,8 +109,8 @@ public class CcidTransceiver {
long elapsedTime = SystemClock.elapsedRealtime() - startTime; long elapsedTime = SystemClock.elapsedRealtime() - startTime;
Log.d(Constants.TAG, "Usb transport connected, took " + elapsedTime + "ms, ATR=" + Timber.d("Usb transport connected, took " + elapsedTime + "ms, ATR=" +
Hex.toHexString(response.getData())); toHexString(response.getData()));
return response; return response;
} }
@@ -176,7 +176,7 @@ public class CcidTransceiver {
CcidDataBlock ccidDataBlock = receiveDataBlock(sequenceNumber); CcidDataBlock ccidDataBlock = receiveDataBlock(sequenceNumber);
long elapsedTime = SystemClock.elapsedRealtime() - startTime; long elapsedTime = SystemClock.elapsedRealtime() - startTime;
Log.d(Constants.TAG, "USB XferBlock call took " + elapsedTime + "ms"); Timber.d("USB XferBlock call took " + elapsedTime + "ms");
return ccidDataBlock; return ccidDataBlock;
} }
@@ -187,8 +187,7 @@ public class CcidTransceiver {
ignoredBytes = usbConnection.bulkTransfer( ignoredBytes = usbConnection.bulkTransfer(
usbBulkIn, inputBuffer, inputBuffer.length, DEVICE_SKIP_TIMEOUT_MILLIS); usbBulkIn, inputBuffer, inputBuffer.length, DEVICE_SKIP_TIMEOUT_MILLIS);
if (ignoredBytes > 0) { if (ignoredBytes > 0) {
Log.e(Constants.TAG, Timber.e("Skipped " + ignoredBytes + " bytes: " + toHexString(inputBuffer, 0, ignoredBytes));
"Skipped " + ignoredBytes + " bytes: " + Hex.toHexString(inputBuffer, 0, ignoredBytes));
} }
} while (ignoredBytes > 0); } while (ignoredBytes > 0);
} }
@@ -31,7 +31,6 @@ import android.support.annotation.NonNull;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.util.Pair; import android.util.Pair;
import org.bouncycastle.util.encoders.Hex;
import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.securitytoken.CommandApdu; import org.sufficientlysecure.keychain.securitytoken.CommandApdu;
import org.sufficientlysecure.keychain.securitytoken.ResponseApdu; import org.sufficientlysecure.keychain.securitytoken.ResponseApdu;
@@ -39,8 +38,10 @@ import org.sufficientlysecure.keychain.securitytoken.SecurityTokenInfo;
import org.sufficientlysecure.keychain.securitytoken.SecurityTokenInfo.TokenType; import org.sufficientlysecure.keychain.securitytoken.SecurityTokenInfo.TokenType;
import org.sufficientlysecure.keychain.securitytoken.SecurityTokenInfo.TransportType; import org.sufficientlysecure.keychain.securitytoken.SecurityTokenInfo.TransportType;
import org.sufficientlysecure.keychain.securitytoken.Transport; import org.sufficientlysecure.keychain.securitytoken.Transport;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
import timber.log.Timber;
import static org.bouncycastle.util.encoders.Hex.toHexString;
/** /**
@@ -98,7 +99,7 @@ public class UsbTransport implements Transport {
usbConnection = null; usbConnection = null;
} }
Log.d(Constants.TAG, "Usb transport disconnected"); Timber.d("Usb transport disconnected");
} }
/** /**
@@ -158,7 +159,7 @@ public class UsbTransport implements Transport {
} }
CcidDescription ccidDescription = CcidDescription.fromRawDescriptors(usbConnection.getRawDescriptors()); CcidDescription ccidDescription = CcidDescription.fromRawDescriptors(usbConnection.getRawDescriptors());
Log.d(Constants.TAG, "CCID Description: " + ccidDescription); Timber.d("CCID Description: " + ccidDescription);
CcidTransceiver transceiver = new CcidTransceiver(usbConnection, usbBulkIn, usbBulkOut, ccidDescription); CcidTransceiver transceiver = new CcidTransceiver(usbConnection, usbBulkIn, usbBulkOut, ccidDescription);
ccidTransportProtocol = ccidDescription.getSuitableTransportProtocol(); ccidTransportProtocol = ccidDescription.getSuitableTransportProtocol();
@@ -175,12 +176,12 @@ public class UsbTransport implements Transport {
public ResponseApdu transceive(CommandApdu data) throws UsbTransportException { public ResponseApdu transceive(CommandApdu data) throws UsbTransportException {
byte[] rawCommand = data.toBytes(); byte[] rawCommand = data.toBytes();
if (Constants.DEBUG) { if (Constants.DEBUG) {
Log.d(Constants.TAG, "USB >> " + Hex.toHexString(rawCommand)); Timber.d("USB >> " + toHexString(rawCommand));
} }
byte[] rawResponse = ccidTransportProtocol.transceive(rawCommand); byte[] rawResponse = ccidTransportProtocol.transceive(rawCommand);
if (Constants.DEBUG) { if (Constants.DEBUG) {
Log.d(Constants.TAG, "USB << " + Hex.toHexString(rawResponse)); Timber.d("USB << " + toHexString(rawResponse));
} }
return ResponseApdu.fromBytes(rawResponse); return ResponseApdu.fromBytes(rawResponse);
@@ -252,7 +253,7 @@ public class UsbTransport implements Transport {
} }
} }
Log.d(Constants.TAG, "Unknown USB token. Vendor ID: " + usbDevice.getVendorId() + ", Product ID: " + Timber.d("Unknown USB token. Vendor ID: " + usbDevice.getVendorId() + ", Product ID: " +
usbDevice.getProductId()); usbDevice.getProductId());
return null; return null;
} }
@@ -21,12 +21,12 @@ package org.sufficientlysecure.keychain.securitytoken.usb.tpdu;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import org.bouncycastle.util.Arrays; import org.bouncycastle.util.Arrays;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.securitytoken.usb.CcidTransceiver; import org.sufficientlysecure.keychain.securitytoken.usb.CcidTransceiver;
import org.sufficientlysecure.keychain.securitytoken.usb.CcidTransceiver.CcidDataBlock; import org.sufficientlysecure.keychain.securitytoken.usb.CcidTransceiver.CcidDataBlock;
import org.sufficientlysecure.keychain.securitytoken.usb.CcidTransportProtocol; import org.sufficientlysecure.keychain.securitytoken.usb.CcidTransportProtocol;
import org.sufficientlysecure.keychain.securitytoken.usb.UsbTransportException; import org.sufficientlysecure.keychain.securitytoken.usb.UsbTransportException;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
/* T=1 Protocol, see http://www.icedev.se/proxmark3/docs/ISO-7816.pdf, Part 11 */ /* T=1 Protocol, see http://www.icedev.se/proxmark3/docs/ISO-7816.pdf, Part 11 */
public class T1TpduProtocol implements CcidTransportProtocol { public class T1TpduProtocol implements CcidTransportProtocol {
@@ -94,10 +94,10 @@ public class T1TpduProtocol implements CcidTransportProtocol {
sentLength += len; sentLength += len;
if (responseBlock instanceof SBlock) { if (responseBlock instanceof SBlock) {
Log.d(Constants.TAG, "S-Block received " + responseBlock); Timber.d("S-Block received " + responseBlock);
// just ignore // just ignore
} else if (responseBlock instanceof RBlock) { } else if (responseBlock instanceof RBlock) {
Log.d(Constants.TAG, "R-Block received " + responseBlock); Timber.d("R-Block received " + responseBlock);
if (((RBlock) responseBlock).getError() != RBlock.RError.NO_ERROR) { if (((RBlock) responseBlock).getError() != RBlock.RError.NO_ERROR) {
throw new UsbTransportException("R-Block reports error " + ((RBlock) responseBlock).getError()); throw new UsbTransportException("R-Block reports error " + ((RBlock) responseBlock).getError());
} }
@@ -123,7 +123,7 @@ public class T1TpduProtocol implements CcidTransportProtocol {
Block responseBlock = blockFactory.fromBytes(response.getData()); Block responseBlock = blockFactory.fromBytes(response.getData());
if (!(responseBlock instanceof IBlock)) { if (!(responseBlock instanceof IBlock)) {
Log.e(Constants.TAG, "Invalid response block received " + responseBlock); Timber.e("Invalid response block received " + responseBlock);
throw new UsbTransportException("Response: invalid state - invalid block received"); throw new UsbTransportException("Response: invalid state - invalid block received");
} }
@@ -41,7 +41,8 @@ import org.sufficientlysecure.keychain.KeychainApplication;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.ui.SettingsActivity; import org.sufficientlysecure.keychain.ui.SettingsActivity;
import org.sufficientlysecure.keychain.util.ContactHelper; import org.sufficientlysecure.keychain.util.ContactHelper;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
public class ContactSyncAdapterService extends Service { public class ContactSyncAdapterService extends Service {
@@ -58,7 +59,7 @@ public class ContactSyncAdapterService extends Service {
@Override @Override
public void onPerformSync(Account account, Bundle extras, String authority, ContentProviderClient provider, public void onPerformSync(Account account, Bundle extras, String authority, ContentProviderClient provider,
final SyncResult syncResult) { final SyncResult syncResult) {
Log.d(Constants.TAG, "Performing a contact sync!"); Timber.d("Performing a contact sync!");
new ContactHelper(ContactSyncAdapterService.this).writeKeysToContacts(); new ContactHelper(ContactSyncAdapterService.this).writeKeysToContacts();
@@ -30,9 +30,9 @@ import android.os.IBinder;
import android.os.Message; import android.os.Message;
import android.widget.Toast; import android.widget.Toast;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
/** /**
* This service actually does nothing, it's sole task is to show a Toast if the use tries to create an account. * This service actually does nothing, it's sole task is to show a Toast if the use tries to create an account.
@@ -75,7 +75,7 @@ public class DummyAccountService extends Service {
@Override @Override
public Bundle editProperties(AccountAuthenticatorResponse response, String accountType) { public Bundle editProperties(AccountAuthenticatorResponse response, String accountType) {
Log.d(Constants.TAG, "DummyAccountService.editProperties"); Timber.d("DummyAccountService.editProperties");
return null; return null;
} }
@@ -84,41 +84,41 @@ public class DummyAccountService extends Service {
String[] requiredFeatures, Bundle options) throws NetworkErrorException { String[] requiredFeatures, Bundle options) throws NetworkErrorException {
response.onResult(new Bundle()); response.onResult(new Bundle());
toaster.toast(R.string.account_no_manual_account_creation); toaster.toast(R.string.account_no_manual_account_creation);
Log.d(Constants.TAG, "DummyAccountService.addAccount"); Timber.d("DummyAccountService.addAccount");
return null; return null;
} }
@Override @Override
public Bundle confirmCredentials(AccountAuthenticatorResponse response, Account account, Bundle options) public Bundle confirmCredentials(AccountAuthenticatorResponse response, Account account, Bundle options)
throws NetworkErrorException { throws NetworkErrorException {
Log.d(Constants.TAG, "DummyAccountService.confirmCredentials"); Timber.d("DummyAccountService.confirmCredentials");
return null; return null;
} }
@Override @Override
public Bundle getAuthToken(AccountAuthenticatorResponse response, Account account, String authTokenType, public Bundle getAuthToken(AccountAuthenticatorResponse response, Account account, String authTokenType,
Bundle options) throws NetworkErrorException { Bundle options) throws NetworkErrorException {
Log.d(Constants.TAG, "DummyAccountService.getAuthToken"); Timber.d("DummyAccountService.getAuthToken");
return null; return null;
} }
@Override @Override
public String getAuthTokenLabel(String authTokenType) { public String getAuthTokenLabel(String authTokenType) {
Log.d(Constants.TAG, "DummyAccountService.getAuthTokenLabel"); Timber.d("DummyAccountService.getAuthTokenLabel");
return null; return null;
} }
@Override @Override
public Bundle updateCredentials(AccountAuthenticatorResponse response, Account account, String authTokenType, public Bundle updateCredentials(AccountAuthenticatorResponse response, Account account, String authTokenType,
Bundle options) throws NetworkErrorException { Bundle options) throws NetworkErrorException {
Log.d(Constants.TAG, "DummyAccountService.updateCredentials"); Timber.d("DummyAccountService.updateCredentials");
return null; return null;
} }
@Override @Override
public Bundle hasFeatures(AccountAuthenticatorResponse response, Account account, String[] features) public Bundle hasFeatures(AccountAuthenticatorResponse response, Account account, String[] features)
throws NetworkErrorException { throws NetworkErrorException {
Log.d(Constants.TAG, "DummyAccountService.hasFeatures"); Timber.d("DummyAccountService.hasFeatures");
return null; return null;
} }
} }
@@ -29,7 +29,6 @@ import android.os.Messenger;
import android.os.Parcelable; import android.os.Parcelable;
import android.os.RemoteException; import android.os.RemoteException;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.operations.BackupOperation; import org.sufficientlysecure.keychain.operations.BackupOperation;
import org.sufficientlysecure.keychain.operations.BaseOperation; import org.sufficientlysecure.keychain.operations.BaseOperation;
import org.sufficientlysecure.keychain.operations.BenchmarkOperation; import org.sufficientlysecure.keychain.operations.BenchmarkOperation;
@@ -52,7 +51,8 @@ import org.sufficientlysecure.keychain.pgp.SignEncryptParcel;
import org.sufficientlysecure.keychain.provider.KeyWritableRepository; import org.sufficientlysecure.keychain.provider.KeyWritableRepository;
import org.sufficientlysecure.keychain.service.ServiceProgressHandler.MessageStatus; import org.sufficientlysecure.keychain.service.ServiceProgressHandler.MessageStatus;
import org.sufficientlysecure.keychain.service.input.CryptoInputParcel; import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
/** /**
* This Service contains all important long lasting operations for OpenKeychain. It receives Intents with * This Service contains all important long lasting operations for OpenKeychain. It receives Intents with
@@ -172,9 +172,9 @@ public class KeychainService extends Service implements Progressable {
try { try {
mMessenger.get().send(msg); mMessenger.get().send(msg);
} catch (RemoteException e) { } catch (RemoteException e) {
Log.w(Constants.TAG, "Exception sending message, Is handler present?", e); Timber.w(e, "Exception sending message, Is handler present?");
} catch (NullPointerException e) { } catch (NullPointerException e) {
Log.w(Constants.TAG, "Messenger is null!", e); Timber.w(e, "Messenger is null!");
} }
} }
@@ -193,7 +193,7 @@ public class KeychainService extends Service implements Progressable {
*/ */
@Override @Override
public void setProgress(String message, int progress, int max) { public void setProgress(String message, int progress, int max) {
Log.d(Constants.TAG, "Send message by setProgress with progress=" + progress + ", max=" Timber.d("Send message by setProgress with progress=" + progress + ", max="
+ max); + max);
Bundle data = new Bundle(); Bundle data = new Bundle();
@@ -66,9 +66,10 @@ import org.sufficientlysecure.keychain.provider.KeychainContract;
import org.sufficientlysecure.keychain.service.input.CryptoInputParcel; import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;
import org.sufficientlysecure.keychain.ui.OrbotRequiredDialogActivity; import org.sufficientlysecure.keychain.ui.OrbotRequiredDialogActivity;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.ParcelableProxy; import org.sufficientlysecure.keychain.util.ParcelableProxy;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
import timber.log.Timber;
public class KeyserverSyncAdapterService extends Service { public class KeyserverSyncAdapterService extends Service {
@@ -215,7 +216,7 @@ public class KeyserverSyncAdapterService extends Service {
return; return;
} }
} }
Log.d(Constants.TAG, "Performing a keyserver sync!"); Timber.d("Performing a keyserver sync!");
PowerManager pm = (PowerManager) KeyserverSyncAdapterService.this PowerManager pm = (PowerManager) KeyserverSyncAdapterService.this
.getSystemService(Context.POWER_SERVICE); .getSystemService(Context.POWER_SERVICE);
@SuppressWarnings("deprecation") // our min is API 15, deprecated only in 20 @SuppressWarnings("deprecation") // our min is API 15, deprecated only in 20
@@ -249,7 +250,7 @@ public class KeyserverSyncAdapterService extends Service {
*/ */
private void handleUpdateResult(ImportKeyResult result, final int startId) { private void handleUpdateResult(ImportKeyResult result, final int startId) {
if (result.isPending()) { if (result.isPending()) {
Log.d(Constants.TAG, "Orbot required for sync but not running, attempting to start"); Timber.d("Orbot required for sync but not running, attempting to start");
// result is pending due to Orbot not being started // result is pending due to Orbot not being started
// try to start it silently, if disabled show notifications // try to start it silently, if disabled show notifications
new OrbotHelper.SilentStartManager() { new OrbotHelper.SilentStartManager() {
@@ -275,13 +276,13 @@ public class KeyserverSyncAdapterService extends Service {
// if we're killed before we get a response from Orbot, we need the intent to be // if we're killed before we get a response from Orbot, we need the intent to be
// redelivered, so no stopSelf(int) here // redelivered, so no stopSelf(int) here
} else if (isUpdateCancelled()) { } else if (isUpdateCancelled()) {
Log.d(Constants.TAG, "Keyserver sync cancelled, postponing by" + SYNC_POSTPONE_TIME Timber.d("Keyserver sync cancelled, postponing by" + SYNC_POSTPONE_TIME
+ "ms"); + "ms");
postponeSync(); postponeSync();
// postponeSync creates a new intent, so we don't need this to be redelivered // postponeSync creates a new intent, so we don't need this to be redelivered
stopSelf(startId); stopSelf(startId);
} else { } else {
Log.d(Constants.TAG, "Keyserver sync completed: Updated: " + result.mUpdatedKeys Timber.d("Keyserver sync completed: Updated: " + result.mUpdatedKeys
+ " Failed: " + result.mBadKeys); + " Failed: " + result.mBadKeys);
// key sync completed successfully, we can stop // key sync completed successfully, we can stop
stopSelf(startId); stopSelf(startId);
@@ -337,7 +338,7 @@ public class KeyserverSyncAdapterService extends Service {
private ImportKeyResult directUpdate(Context context, ArrayList<ParcelableKeyRing> keyList, private ImportKeyResult directUpdate(Context context, ArrayList<ParcelableKeyRing> keyList,
CryptoInputParcel cryptoInputParcel) { CryptoInputParcel cryptoInputParcel) {
Log.d(Constants.TAG, "Starting normal update"); Timber.d("Starting normal update");
ImportOperation importOp = new ImportOperation(context, ImportOperation importOp = new ImportOperation(context,
KeyWritableRepository.create(context), null); KeyWritableRepository.create(context), null);
return importOp.execute( return importOp.execute(
@@ -356,7 +357,7 @@ public class KeyserverSyncAdapterService extends Service {
*/ */
private ImportKeyResult staggeredUpdate(Context context, ArrayList<ParcelableKeyRing> keyList, private ImportKeyResult staggeredUpdate(Context context, ArrayList<ParcelableKeyRing> keyList,
CryptoInputParcel cryptoInputParcel) { CryptoInputParcel cryptoInputParcel) {
Log.d(Constants.TAG, "Starting staggered update"); Timber.d("Starting staggered update");
// final int WEEK_IN_SECONDS = (int) TimeUnit.DAYS.toSeconds(7); // final int WEEK_IN_SECONDS = (int) TimeUnit.DAYS.toSeconds(7);
// we are limiting our randomness to ORBOT_CIRCUIT_TIMEOUT_SECONDS for now // we are limiting our randomness to ORBOT_CIRCUIT_TIMEOUT_SECONDS for now
final int WEEK_IN_SECONDS = 0; final int WEEK_IN_SECONDS = 0;
@@ -383,11 +384,11 @@ public class KeyserverSyncAdapterService extends Service {
first = false; first = false;
} }
Log.d(Constants.TAG, "Updating key with a wait time of " + waitTime + "s"); Timber.d("Updating key with a wait time of " + waitTime + "s");
try { try {
Thread.sleep(waitTime * 1000); Thread.sleep(waitTime * 1000);
} catch (InterruptedException e) { } catch (InterruptedException e) {
Log.e(Constants.TAG, "Exception during sleep between key updates", e); Timber.e(e, "Exception during sleep between key updates");
// skip this one // skip this one
continue; continue;
} }
@@ -445,7 +446,7 @@ public class KeyserverSyncAdapterService extends Service {
ArrayList<Long> ignoreMasterKeyIds = new ArrayList<>(); ArrayList<Long> ignoreMasterKeyIds = new ArrayList<>();
while (updatedKeysCursor != null && updatedKeysCursor.moveToNext()) { while (updatedKeysCursor != null && updatedKeysCursor.moveToNext()) {
long masterKeyId = updatedKeysCursor.getLong(INDEX_UPDATED_KEYS_MASTER_KEY_ID); long masterKeyId = updatedKeysCursor.getLong(INDEX_UPDATED_KEYS_MASTER_KEY_ID);
Log.d(Constants.TAG, "Keyserver sync: Ignoring {" + masterKeyId + "} last updated at {" Timber.d("Keyserver sync: Ignoring {" + masterKeyId + "} last updated at {"
+ updatedKeysCursor.getLong(INDEX_LAST_UPDATED) + "}s"); + updatedKeysCursor.getLong(INDEX_LAST_UPDATED) + "}s");
ignoreMasterKeyIds.add(masterKeyId); ignoreMasterKeyIds.add(masterKeyId);
} }
@@ -477,7 +478,7 @@ public class KeyserverSyncAdapterService extends Service {
if (ignoreMasterKeyIds.contains(keyId)) { if (ignoreMasterKeyIds.contains(keyId)) {
continue; continue;
} }
Log.d(Constants.TAG, "Keyserver sync: Updating {" + keyId + "}"); Timber.d("Keyserver sync: Updating {" + keyId + "}");
byte[] fingerprint = keyCursor.getBlob(INDEX_FINGERPRINT); byte[] fingerprint = keyCursor.getBlob(INDEX_FINGERPRINT);
String hexKeyId = KeyFormattingUtils.convertKeyIdToHex(keyId); String hexKeyId = KeyFormattingUtils.convertKeyIdToHex(keyId);
// we aren't updating from keybase as of now // we aren't updating from keybase as of now
@@ -42,9 +42,9 @@ import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.pgp.CanonicalizedSecretKey.SecretKeyType; import org.sufficientlysecure.keychain.pgp.CanonicalizedSecretKey.SecretKeyType;
import org.sufficientlysecure.keychain.provider.CachedPublicKeyRing; import org.sufficientlysecure.keychain.provider.CachedPublicKeyRing;
import org.sufficientlysecure.keychain.provider.KeyRepository; import org.sufficientlysecure.keychain.provider.KeyRepository;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Passphrase; import org.sufficientlysecure.keychain.util.Passphrase;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
import timber.log.Timber;
import java.util.Date; import java.util.Date;
@@ -122,7 +122,7 @@ public class PassphraseCacheService extends Service {
Passphrase passphrase, Passphrase passphrase,
String primaryUserId, String primaryUserId,
int timeToLiveSeconds) { int timeToLiveSeconds) {
Log.d(Constants.TAG, "PassphraseCacheService.addCachedPassphrase() for " + masterKeyId); Timber.d("PassphraseCacheService.addCachedPassphrase() for " + masterKeyId);
Intent intent = new Intent(context, PassphraseCacheService.class); Intent intent = new Intent(context, PassphraseCacheService.class);
intent.setAction(ACTION_PASSPHRASE_CACHE_ADD); intent.setAction(ACTION_PASSPHRASE_CACHE_ADD);
@@ -137,7 +137,7 @@ public class PassphraseCacheService extends Service {
} }
public static void clearCachedPassphrase(Context context, long masterKeyId, long subKeyId) { public static void clearCachedPassphrase(Context context, long masterKeyId, long subKeyId) {
Log.d(Constants.TAG, "PassphraseCacheService.clearCachedPassphrase() for " + masterKeyId); Timber.d("PassphraseCacheService.clearCachedPassphrase() for " + masterKeyId);
Intent intent = new Intent(context, PassphraseCacheService.class); Intent intent = new Intent(context, PassphraseCacheService.class);
intent.setAction(ACTION_PASSPHRASE_CACHE_CLEAR); intent.setAction(ACTION_PASSPHRASE_CACHE_CLEAR);
@@ -149,7 +149,7 @@ public class PassphraseCacheService extends Service {
} }
public static void clearCachedPassphrases(Context context) { public static void clearCachedPassphrases(Context context) {
Log.d(Constants.TAG, "PassphraseCacheService.clearCachedPassphrase()"); Timber.d("PassphraseCacheService.clearCachedPassphrase()");
Intent intent = new Intent(context, PassphraseCacheService.class); Intent intent = new Intent(context, PassphraseCacheService.class);
intent.setAction(ACTION_PASSPHRASE_CACHE_CLEAR); intent.setAction(ACTION_PASSPHRASE_CACHE_CLEAR);
@@ -164,7 +164,7 @@ public class PassphraseCacheService extends Service {
* @return passphrase or null (if no passphrase is cached for this keyId) * @return passphrase or null (if no passphrase is cached for this keyId)
*/ */
public static Passphrase getCachedPassphrase(Context context, long masterKeyId, long subKeyId) throws KeyNotFoundException { public static Passphrase getCachedPassphrase(Context context, long masterKeyId, long subKeyId) throws KeyNotFoundException {
Log.d(Constants.TAG, "PassphraseCacheService.getCachedPassphrase() for masterKeyId " Timber.d("PassphraseCacheService.getCachedPassphrase() for masterKeyId "
+ masterKeyId + ", subKeyId " + subKeyId); + masterKeyId + ", subKeyId " + subKeyId);
Intent intent = new Intent(context, PassphraseCacheService.class); Intent intent = new Intent(context, PassphraseCacheService.class);
@@ -216,7 +216,7 @@ public class PassphraseCacheService extends Service {
case MSG_PASSPHRASE_CACHE_GET_KEY_NOT_FOUND: case MSG_PASSPHRASE_CACHE_GET_KEY_NOT_FOUND:
throw new KeyNotFoundException(); throw new KeyNotFoundException();
default: default:
Log.e(Constants.TAG, "timeout case!"); Timber.e("timeout case!");
throw new KeyNotFoundException("should not happen!"); throw new KeyNotFoundException("should not happen!");
} }
} }
@@ -232,7 +232,7 @@ public class PassphraseCacheService extends Service {
// passphrase for symmetric encryption? // passphrase for symmetric encryption?
if (masterKeyId == Constants.key.symmetric) { if (masterKeyId == Constants.key.symmetric) {
Log.d(Constants.TAG, "PassphraseCacheService.getCachedPassphraseImpl() for symmetric encryption"); Timber.d("PassphraseCacheService.getCachedPassphraseImpl() for symmetric encryption");
CachedPassphrase cachedPassphrase = mPassphraseCache.get(Constants.key.symmetric); CachedPassphrase cachedPassphrase = mPassphraseCache.get(Constants.key.symmetric);
if (cachedPassphrase == null) { if (cachedPassphrase == null) {
return null; return null;
@@ -241,7 +241,7 @@ public class PassphraseCacheService extends Service {
} }
// try to get master key id which is used as an identifier for cached passphrases // try to get master key id which is used as an identifier for cached passphrases
Log.d(Constants.TAG, "PassphraseCacheService.getCachedPassphraseImpl() for masterKeyId " Timber.d("PassphraseCacheService.getCachedPassphraseImpl() for masterKeyId "
+ masterKeyId + ", subKeyId " + subKeyId); + masterKeyId + ", subKeyId " + subKeyId);
// get the type of key (from the database) // get the type of key (from the database)
@@ -263,13 +263,13 @@ public class PassphraseCacheService extends Service {
// If we cache strictly by subkey, exit early // If we cache strictly by subkey, exit early
if (Preferences.getPreferences(mContext).getPassphraseCacheSubs()) { if (Preferences.getPreferences(mContext).getPassphraseCacheSubs()) {
Log.d(Constants.TAG, "PassphraseCacheService: specific subkey passphrase not (yet) cached, returning null"); Timber.d("PassphraseCacheService: specific subkey passphrase not (yet) cached, returning null");
// not really an error, just means the passphrase is not cached but not empty either // not really an error, just means the passphrase is not cached but not empty either
return null; return null;
} }
if (subKeyId == masterKeyId) { if (subKeyId == masterKeyId) {
Log.d(Constants.TAG, "PassphraseCacheService: masterkey passphrase not (yet) cached, returning null"); Timber.d("PassphraseCacheService: masterkey passphrase not (yet) cached, returning null");
// not really an error, just means the passphrase is not cached but not empty either // not really an error, just means the passphrase is not cached but not empty either
return null; return null;
} }
@@ -277,7 +277,7 @@ public class PassphraseCacheService extends Service {
cachedPassphrase = mPassphraseCache.get(masterKeyId); cachedPassphrase = mPassphraseCache.get(masterKeyId);
// If we cache strictly by subkey, exit early // If we cache strictly by subkey, exit early
if (cachedPassphrase == null) { if (cachedPassphrase == null) {
Log.d(Constants.TAG, "PassphraseCacheService: keyring passphrase not (yet) cached, returning null"); Timber.d("PassphraseCacheService: keyring passphrase not (yet) cached, returning null");
// not really an error, just means the passphrase is not cached but not empty either // not really an error, just means the passphrase is not cached but not empty either
return null; return null;
} }
@@ -299,7 +299,7 @@ public class PassphraseCacheService extends Service {
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
String action = intent.getAction(); String action = intent.getAction();
Log.d(Constants.TAG, "PassphraseCacheService: Received broadcast..."); Timber.d("PassphraseCacheService: Received broadcast...");
if (action.equals(BROADCAST_ACTION_PASSPHRASE_CACHE_SERVICE)) { if (action.equals(BROADCAST_ACTION_PASSPHRASE_CACHE_SERVICE)) {
long keyId = intent.getLongExtra(EXTRA_KEY_ID, -1); long keyId = intent.getLongExtra(EXTRA_KEY_ID, -1);
@@ -335,7 +335,7 @@ public class PassphraseCacheService extends Service {
*/ */
@Override @Override
public int onStartCommand(Intent intent, int flags, int startId) { public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(Constants.TAG, "PassphraseCacheService.onStartCommand()"); Timber.d("PassphraseCacheService.onStartCommand()");
if (intent == null || intent.getAction() == null) { if (intent == null || intent.getAction() == null) {
updateService(); updateService();
@@ -352,10 +352,10 @@ public class PassphraseCacheService extends Service {
Passphrase passphrase = intent.getParcelableExtra(EXTRA_PASSPHRASE); Passphrase passphrase = intent.getParcelableExtra(EXTRA_PASSPHRASE);
String primaryUserID = intent.getStringExtra(EXTRA_USER_ID); String primaryUserID = intent.getStringExtra(EXTRA_USER_ID);
Log.d(Constants.TAG, Timber.d(
"PassphraseCacheService: Received ACTION_PASSPHRASE_CACHE_ADD intent in onStartCommand() with masterkeyId: " "PassphraseCacheService: Received ACTION_PASSPHRASE_CACHE_ADD intent in onStartCommand() with masterkeyId: "
+ masterKeyId + ", subKeyId: " + subKeyId + ", ttl: " + timeoutTtl + ", usrId: " + primaryUserID + masterKeyId + ", subKeyId: " + subKeyId + ", ttl: " + timeoutTtl + ", usrId: " +
); primaryUserID);
// if we don't cache by specific subkey id, or the requested subkey is the master key, // if we don't cache by specific subkey id, or the requested subkey is the master key,
// just add master key id to the cache, otherwise, add this specific subkey to the cache // just add master key id to the cache, otherwise, add this specific subkey to the cache
@@ -389,7 +389,7 @@ public class PassphraseCacheService extends Service {
try { try {
// If only one of these is symmetric, error out! // If only one of these is symmetric, error out!
if (masterKeyId == Constants.key.symmetric ^ subKeyId == Constants.key.symmetric) { if (masterKeyId == Constants.key.symmetric ^ subKeyId == Constants.key.symmetric) {
Log.e(Constants.TAG, "PassphraseCacheService: Bad request, missing masterKeyId or subKeyId!"); Timber.e("PassphraseCacheService: Bad request, missing masterKeyId or subKeyId!");
msg.what = MSG_PASSPHRASE_CACHE_GET_KEY_NOT_FOUND; msg.what = MSG_PASSPHRASE_CACHE_GET_KEY_NOT_FOUND;
} else { } else {
Passphrase passphrase = getCachedPassphraseImpl(masterKeyId, subKeyId); Passphrase passphrase = getCachedPassphraseImpl(masterKeyId, subKeyId);
@@ -399,14 +399,14 @@ public class PassphraseCacheService extends Service {
msg.setData(bundle); msg.setData(bundle);
} }
} catch (KeyRepository.NotFoundException e) { } catch (KeyRepository.NotFoundException e) {
Log.e(Constants.TAG, "PassphraseCacheService: Passphrase for unknown key was requested!"); Timber.e("PassphraseCacheService: Passphrase for unknown key was requested!");
msg.what = MSG_PASSPHRASE_CACHE_GET_KEY_NOT_FOUND; msg.what = MSG_PASSPHRASE_CACHE_GET_KEY_NOT_FOUND;
} }
try { try {
messenger.send(msg); messenger.send(msg);
} catch (RemoteException e) { } catch (RemoteException e) {
Log.e(Constants.TAG, "PassphraseCacheService: Sending message failed", e); Timber.e(e, "PassphraseCacheService: Sending message failed");
} }
break; break;
} }
@@ -440,7 +440,7 @@ public class PassphraseCacheService extends Service {
break; break;
} }
default: { default: {
Log.e(Constants.TAG, "PassphraseCacheService: Intent or Intent Action not supported!"); Timber.e("PassphraseCacheService: Intent or Intent Action not supported!");
break; break;
} }
} }
@@ -463,7 +463,7 @@ public class PassphraseCacheService extends Service {
mPassphraseCache.remove(keyId); mPassphraseCache.remove(keyId);
} }
Log.d(Constants.TAG, "PassphraseCacheService Timeout of keyId " + keyId + ", removed from memory!"); Timber.d("PassphraseCacheService Timeout of keyId " + keyId + ", removed from memory!");
updateService(); updateService();
} }
@@ -481,7 +481,7 @@ public class PassphraseCacheService extends Service {
i += 1; i += 1;
} }
Log.d(Constants.TAG, "PassphraseCacheService Removing all cached-until-lock passphrases from memory!"); Timber.d("PassphraseCacheService Removing all cached-until-lock passphrases from memory!");
updateService(); updateService();
} }
@@ -491,7 +491,7 @@ public class PassphraseCacheService extends Service {
startForeground(Constants.Notification.PASSPHRASE_CACHE, getNotification()); startForeground(Constants.Notification.PASSPHRASE_CACHE, getNotification());
} else { } else {
// stop whole service if no cached passphrases remaining // stop whole service if no cached passphrases remaining
Log.d(Constants.TAG, "PassphraseCacheService: No passphrases remaining in memory, stopping service!"); Timber.d("PassphraseCacheService: No passphrases remaining in memory, stopping service!");
stopForeground(true); stopForeground(true);
stopSelf(); stopSelf();
} }
@@ -544,7 +544,7 @@ public class PassphraseCacheService extends Service {
public void onCreate() { public void onCreate() {
super.onCreate(); super.onCreate();
mContext = this; mContext = this;
Log.d(Constants.TAG, "PassphraseCacheService, onCreate()"); Timber.d("PassphraseCacheService, onCreate()");
registerReceiver(); registerReceiver();
} }
@@ -552,7 +552,7 @@ public class PassphraseCacheService extends Service {
@Override @Override
public void onDestroy() { public void onDestroy() {
super.onDestroy(); super.onDestroy();
Log.d(Constants.TAG, "PassphraseCacheService, onDestroy()"); Timber.d("PassphraseCacheService, onDestroy()");
unregisterReceiver(mIntentReceiver); unregisterReceiver(mIntentReceiver);
} }
@@ -25,11 +25,11 @@ import android.os.Message;
import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentManager;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.ui.dialog.ProgressDialogFragment; import org.sufficientlysecure.keychain.ui.dialog.ProgressDialogFragment;
import org.sufficientlysecure.keychain.ui.util.Notify; import org.sufficientlysecure.keychain.ui.util.Notify;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
public class ServiceProgressHandler extends Handler { public class ServiceProgressHandler extends Handler {
@@ -144,7 +144,7 @@ public class ServiceProgressHandler extends Handler {
break; break;
default: default:
Log.e(Constants.TAG, "unknown handler message!"); Timber.e("unknown handler message!");
break; break;
} }
} }
@@ -33,11 +33,14 @@ import org.sufficientlysecure.keychain.pgp.exception.PgpKeyNotFoundException;
import org.sufficientlysecure.keychain.provider.KeyRepository; import org.sufficientlysecure.keychain.provider.KeyRepository;
import org.sufficientlysecure.keychain.service.input.CryptoInputParcel; import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;
import org.sufficientlysecure.keychain.service.input.RequiredInputParcel; import org.sufficientlysecure.keychain.service.input.RequiredInputParcel;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Passphrase; import org.sufficientlysecure.keychain.util.Passphrase;
import timber.log.Timber;
import java.util.Collection; import java.util.Collection;
import static java.lang.String.format;
/** /**
* This class supports a single, low-level, authentication operation. * This class supports a single, low-level, authentication operation.
* <p/> * <p/>
@@ -83,7 +86,7 @@ public class AuthenticationOperation extends BaseOperation<AuthenticationParcel>
log.add(LogType.MSG_AUTH, indent); log.add(LogType.MSG_AUTH, indent);
indent += 1; indent += 1;
Log.d(TAG, data.toString()); Timber.d(data.toString());
long opTime; long opTime;
long startTime = System.currentTimeMillis(); long startTime = System.currentTimeMillis();
@@ -231,7 +234,7 @@ public class AuthenticationOperation extends BaseOperation<AuthenticationParcel>
} }
opTime = System.currentTimeMillis() - startTime; opTime = System.currentTimeMillis() - startTime;
Log.d(TAG, "Authentication operation duration : " + String.format("%.2f", opTime / 1000.0) + "s"); Timber.d("Authentication operation duration : " + format("%.2f", opTime / 1000.0) + "s");
log.add(LogType.MSG_AUTH_OK, indent); log.add(LogType.MSG_AUTH_OK, indent);
AuthenticationResult result = new AuthenticationResult(AuthenticationResult.RESULT_OK, log); AuthenticationResult result = new AuthenticationResult(AuthenticationResult.RESULT_OK, log);
@@ -21,10 +21,10 @@ import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.view.View; import android.view.View;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.ui.base.BaseActivity; import org.sufficientlysecure.keychain.ui.base.BaseActivity;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
public class CertifyFingerprintActivity extends BaseActivity { public class CertifyFingerprintActivity extends BaseActivity {
@@ -36,7 +36,7 @@ public class CertifyFingerprintActivity extends BaseActivity {
mDataUri = getIntent().getData(); mDataUri = getIntent().getData();
if (mDataUri == null) { if (mDataUri == null) {
Log.e(Constants.TAG, "Data missing. Should be uri of key!"); Timber.e("Data missing. Should be uri of key!");
finish(); finish();
return; return;
} }
@@ -48,7 +48,7 @@ public class CertifyFingerprintActivity extends BaseActivity {
} }
}); });
Log.i(Constants.TAG, "mDataUri: " + mDataUri.toString()); Timber.i("mDataUri: " + mDataUri.toString());
startFragment(savedInstanceState, mDataUri); startFragment(savedInstanceState, mDataUri);
} }
@@ -18,11 +18,8 @@
package org.sufficientlysecure.keychain.ui; package org.sufficientlysecure.keychain.ui;
import java.io.IOException;
import android.content.Intent; import android.content.Intent;
import android.database.Cursor; import android.database.Cursor;
import android.graphics.Typeface;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.support.v4.app.LoaderManager; import android.support.v4.app.LoaderManager;
@@ -33,14 +30,13 @@ import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.TextView; import android.widget.TextView;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.pgp.exception.PgpKeyNotFoundException; import org.sufficientlysecure.keychain.pgp.exception.PgpKeyNotFoundException;
import org.sufficientlysecure.keychain.provider.KeyRepository; import org.sufficientlysecure.keychain.provider.KeyRepository;
import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings; import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings;
import org.sufficientlysecure.keychain.ui.base.LoaderFragment; import org.sufficientlysecure.keychain.ui.base.LoaderFragment;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
public class CertifyFingerprintFragment extends LoaderFragment implements public class CertifyFingerprintFragment extends LoaderFragment implements
@@ -106,7 +102,7 @@ public class CertifyFingerprintFragment extends LoaderFragment implements
Uri dataUri = getArguments().getParcelable(ARG_DATA_URI); Uri dataUri = getArguments().getParcelable(ARG_DATA_URI);
if (dataUri == null) { if (dataUri == null) {
Log.e(Constants.TAG, "Data missing. Should be Uri of key!"); Timber.e("Data missing. Should be Uri of key!");
getActivity().finish(); getActivity().finish();
return; return;
} }
@@ -117,7 +113,7 @@ public class CertifyFingerprintFragment extends LoaderFragment implements
private void loadData(Uri dataUri) { private void loadData(Uri dataUri) {
mDataUri = dataUri; mDataUri = dataUri;
Log.i(Constants.TAG, "mDataUri: " + mDataUri.toString()); Timber.i("mDataUri: " + mDataUri.toString());
// Prepare the loaders. Either re-connect with an existing ones, // Prepare the loaders. Either re-connect with an existing ones,
// or start new ones. // or start new ones.
@@ -187,7 +183,7 @@ public class CertifyFingerprintFragment extends LoaderFragment implements
.getCachedPublicKeyRing(dataUri) .getCachedPublicKeyRing(dataUri)
.extractOrGetMasterKeyId(); .extractOrGetMasterKeyId();
} catch (PgpKeyNotFoundException e) { } catch (PgpKeyNotFoundException e) {
Log.e(Constants.TAG, "key not found!", e); Timber.e(e, "key not found!");
} }
Intent certifyIntent = new Intent(getActivity(), CertifyKeyActivity.class); Intent certifyIntent = new Intent(getActivity(), CertifyKeyActivity.class);
certifyIntent.putExtras(getActivity().getIntent()); certifyIntent.putExtras(getActivity().getIntent());
@@ -46,8 +46,9 @@ import org.sufficientlysecure.keychain.ui.base.CachingCryptoOperationFragment;
import org.sufficientlysecure.keychain.ui.util.FormattingUtils; import org.sufficientlysecure.keychain.ui.util.FormattingUtils;
import org.sufficientlysecure.keychain.ui.util.Notify; import org.sufficientlysecure.keychain.ui.util.Notify;
import org.sufficientlysecure.keychain.ui.widget.CertifyKeySpinner; import org.sufficientlysecure.keychain.ui.widget.CertifyKeySpinner;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
import timber.log.Timber;
public class CertifyKeyFragment public class CertifyKeyFragment
extends CachingCryptoOperationFragment<CertifyActionsParcel, CertifyResult> { extends CachingCryptoOperationFragment<CertifyActionsParcel, CertifyResult> {
@@ -75,7 +76,7 @@ public class CertifyKeyFragment
mCertifyKeySpinner.setPreSelectedKeyId(certifyKeyId); mCertifyKeySpinner.setPreSelectedKeyId(certifyKeyId);
} }
} catch (PgpKeyNotFoundException e) { } catch (PgpKeyNotFoundException e) {
Log.e(Constants.TAG, "certify certify check failed", e); Timber.e(e, "certify certify check failed");
} }
} }
} }
@@ -52,10 +52,10 @@ import org.sufficientlysecure.keychain.service.UploadKeyringParcel;
import org.sufficientlysecure.keychain.service.input.CryptoInputParcel; import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;
import org.sufficientlysecure.keychain.ui.CreateKeyActivity.FragAction; import org.sufficientlysecure.keychain.ui.CreateKeyActivity.FragAction;
import org.sufficientlysecure.keychain.ui.base.CryptoOperationHelper; import org.sufficientlysecure.keychain.ui.base.CryptoOperationHelper;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.keyimport.HkpKeyserverAddress; import org.sufficientlysecure.keychain.keyimport.HkpKeyserverAddress;
import org.sufficientlysecure.keychain.util.Passphrase; import org.sufficientlysecure.keychain.util.Passphrase;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
import timber.log.Timber;
import java.util.Date; import java.util.Date;
import java.util.Iterator; import java.util.Iterator;
@@ -435,7 +435,7 @@ public class CreateKeyFinalFragment extends Fragment {
try { try {
builder = SaveKeyringParcel.buildChangeKeyringParcel(key.getMasterKeyId(), key.getFingerprint()); builder = SaveKeyringParcel.buildChangeKeyringParcel(key.getMasterKeyId(), key.getFingerprint());
} catch (PgpKeyNotFoundException e) { } catch (PgpKeyNotFoundException e) {
Log.e(Constants.TAG, "Key that should be moved to Security Token not found in database!"); Timber.e("Key that should be moved to Security Token not found in database!");
return; return;
} }
@@ -32,12 +32,12 @@ import android.view.View.OnClickListener;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.TextView; import android.widget.TextView;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.ui.CreateKeyActivity.FragAction; import org.sufficientlysecure.keychain.ui.CreateKeyActivity.FragAction;
import org.sufficientlysecure.keychain.ui.transfer.view.TransferFragment; import org.sufficientlysecure.keychain.ui.transfer.view.TransferFragment;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
import timber.log.Timber;
public class CreateKeyStartFragment extends Fragment { public class CreateKeyStartFragment extends Fragment {
public static final int REQUEST_CODE_IMPORT_KEY = 0x00007012; public static final int REQUEST_CODE_IMPORT_KEY = 0x00007012;
@@ -149,7 +149,7 @@ public class CreateKeyStartFragment extends Fragment {
} }
} }
} else { } else {
Log.e(Constants.TAG, "No valid request code!"); Timber.e("No valid request code!");
} }
} }
@@ -60,6 +60,8 @@ import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils.State;
import org.sufficientlysecure.keychain.ui.util.Notify; import org.sufficientlysecure.keychain.ui.util.Notify;
import org.sufficientlysecure.keychain.ui.util.Notify.Style; import org.sufficientlysecure.keychain.ui.util.Notify.Style;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
import timber.log.Timber;
public abstract class DecryptFragment extends Fragment implements LoaderManager.LoaderCallbacks<Cursor> { public abstract class DecryptFragment extends Fragment implements LoaderManager.LoaderCallbacks<Cursor> {
@@ -424,7 +426,7 @@ public abstract class DecryptFragment extends Fragment implements LoaderManager.
int result = mSignatureResult.getResult(); int result = mSignatureResult.getResult();
if (result != OpenPgpSignatureResult.RESULT_KEY_MISSING if (result != OpenPgpSignatureResult.RESULT_KEY_MISSING
&& result != OpenPgpSignatureResult.RESULT_INVALID_SIGNATURE) { && result != OpenPgpSignatureResult.RESULT_INVALID_SIGNATURE) {
Log.e(Constants.TAG, "got missing status for non-missing key, shouldn't happen!"); Timber.e("got missing status for non-missing key, shouldn't happen!");
} }
String userId = mSignatureResult.getPrimaryUserId(); String userId = mSignatureResult.getPrimaryUserId();
@@ -95,9 +95,9 @@ import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.ui.util.Notify; import org.sufficientlysecure.keychain.ui.util.Notify;
import org.sufficientlysecure.keychain.ui.util.Notify.Style; import org.sufficientlysecure.keychain.ui.util.Notify.Style;
import org.sufficientlysecure.keychain.util.FileHelper; import org.sufficientlysecure.keychain.util.FileHelper;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.ParcelableHashMap; import org.sufficientlysecure.keychain.util.ParcelableHashMap;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
import timber.log.Timber;
/** /**
@@ -321,7 +321,7 @@ public class DecryptListFragment
FileHelper.copyUriData(activity, decryptedFileUri, saveUri); FileHelper.copyUriData(activity, decryptedFileUri, saveUri);
Notify.create(activity, R.string.file_saved, Style.OK).show(); Notify.create(activity, R.string.file_saved, Style.OK).show();
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "error saving file", e); Timber.e(e, "error saving file");
Notify.create(activity, R.string.error_saving_file, Style.ERROR).show(); Notify.create(activity, R.string.error_saving_file, Style.ERROR).show();
} }
} }
@@ -631,7 +631,7 @@ public class DecryptListFragment
mCurrentInputUri = mPendingInputUris.remove(0); mCurrentInputUri = mPendingInputUris.remove(0);
} }
Log.d(Constants.TAG, "mCurrentInputUri=" + mCurrentInputUri); Timber.d("mCurrentInputUri=" + mCurrentInputUri);
if (!checkAndRequestReadPermission(activity, mCurrentInputUri)) { if (!checkAndRequestReadPermission(activity, mCurrentInputUri)) {
return null; return null;
@@ -825,7 +825,7 @@ public class DecryptListFragment
Notify.create(activity, R.string.file_delete_none, Style.WARN).show(); Notify.create(activity, R.string.file_delete_none, Style.WARN).show();
} }
} catch (Exception e) { } catch (Exception e) {
Log.e(Constants.TAG, "exception deleting file", e); Timber.e(e, "exception deleting file");
Notify.create(activity, R.string.file_delete_exception, Style.ERROR).show(); Notify.create(activity, R.string.file_delete_exception, Style.ERROR).show();
} }
@@ -33,7 +33,6 @@ import android.widget.AdapterView;
import android.widget.Spinner; import android.widget.Spinner;
import android.widget.TextView; import android.widget.TextView;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.keyimport.HkpKeyserverAddress; import org.sufficientlysecure.keychain.keyimport.HkpKeyserverAddress;
import org.sufficientlysecure.keychain.operations.results.DeleteResult; import org.sufficientlysecure.keychain.operations.results.DeleteResult;
@@ -47,7 +46,7 @@ import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;
import org.sufficientlysecure.keychain.ui.base.CryptoOperationHelper; import org.sufficientlysecure.keychain.ui.base.CryptoOperationHelper;
import org.sufficientlysecure.keychain.ui.dialog.CustomAlertDialogBuilder; import org.sufficientlysecure.keychain.ui.dialog.CustomAlertDialogBuilder;
import org.sufficientlysecure.keychain.ui.util.ThemeChanger; import org.sufficientlysecure.keychain.ui.util.ThemeChanger;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
@@ -111,9 +110,8 @@ public class DeleteKeyDialogActivity extends FragmentActivity {
showRevokeDeleteDialog(name); showRevokeDeleteDialog(name);
} }
} catch (KeyRepository.NotFoundException e) { } catch (KeyRepository.NotFoundException e) {
Log.e(Constants.TAG, Timber.e(e, "Secret key to delete not found at DeleteKeyDialogActivity for "
"Secret key to delete not found at DeleteKeyDialogActivity for " + mMasterKeyIds[0]);
+ mMasterKeyIds[0], e);
finish(); finish();
} }
} else { } else {
@@ -20,10 +20,10 @@ package org.sufficientlysecure.keychain.ui;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.ui.base.BaseActivity; import org.sufficientlysecure.keychain.ui.base.BaseActivity;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
public class EditIdentitiesActivity extends BaseActivity { public class EditIdentitiesActivity extends BaseActivity {
@@ -33,7 +33,7 @@ public class EditIdentitiesActivity extends BaseActivity {
Uri dataUri = getIntent().getData(); Uri dataUri = getIntent().getData();
if (dataUri == null) { if (dataUri == null) {
Log.e(Constants.TAG, "Either a key Uri or EXTRA_SAVE_KEYRING_PARCEL is required!"); Timber.e("Either a key Uri or EXTRA_SAVE_KEYRING_PARCEL is required!");
finish(); finish();
return; return;
} }
@@ -62,8 +62,9 @@ import org.sufficientlysecure.keychain.ui.base.CryptoOperationHelper;
import org.sufficientlysecure.keychain.ui.dialog.AddUserIdDialogFragment; import org.sufficientlysecure.keychain.ui.dialog.AddUserIdDialogFragment;
import org.sufficientlysecure.keychain.ui.dialog.EditUserIdDialogFragment; import org.sufficientlysecure.keychain.ui.dialog.EditUserIdDialogFragment;
import org.sufficientlysecure.keychain.ui.dialog.SetPassphraseDialogFragment; import org.sufficientlysecure.keychain.ui.dialog.SetPassphraseDialogFragment;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
import timber.log.Timber;
public class EditIdentitiesFragment extends Fragment public class EditIdentitiesFragment extends Fragment
implements LoaderManager.LoaderCallbacks<Cursor> { implements LoaderManager.LoaderCallbacks<Cursor> {
@@ -140,7 +141,7 @@ public class EditIdentitiesFragment extends Fragment
Uri dataUri = getArguments().getParcelable(ARG_DATA_URI); Uri dataUri = getArguments().getParcelable(ARG_DATA_URI);
if (dataUri == null) { if (dataUri == null) {
Log.e(Constants.TAG, "Either a key Uri is required!"); Timber.e("Either a key Uri is required!");
getActivity().finish(); getActivity().finish();
return; return;
} }
@@ -164,7 +165,7 @@ public class EditIdentitiesFragment extends Fragment
private void loadData(Uri dataUri) { private void loadData(Uri dataUri) {
mDataUri = dataUri; mDataUri = dataUri;
Log.i(Constants.TAG, "mDataUri: " + mDataUri); Timber.i("mDataUri: " + mDataUri);
// load the secret key ring. we do verify here that the passphrase is correct, so cached won't do // load the secret key ring. we do verify here that the passphrase is correct, so cached won't do
try { try {
@@ -20,11 +20,11 @@ package org.sufficientlysecure.keychain.ui;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.service.SaveKeyringParcel; import org.sufficientlysecure.keychain.service.SaveKeyringParcel;
import org.sufficientlysecure.keychain.ui.base.BaseActivity; import org.sufficientlysecure.keychain.ui.base.BaseActivity;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
public class EditKeyActivity extends BaseActivity { public class EditKeyActivity extends BaseActivity {
@@ -39,7 +39,7 @@ public class EditKeyActivity extends BaseActivity {
Uri dataUri = getIntent().getData(); Uri dataUri = getIntent().getData();
SaveKeyringParcel saveKeyringParcel = getIntent().getParcelableExtra(EXTRA_SAVE_KEYRING_PARCEL); SaveKeyringParcel saveKeyringParcel = getIntent().getParcelableExtra(EXTRA_SAVE_KEYRING_PARCEL);
if (dataUri == null && saveKeyringParcel == null) { if (dataUri == null && saveKeyringParcel == null) {
Log.e(Constants.TAG, "Either a key Uri or EXTRA_SAVE_KEYRING_PARCEL is required!"); Timber.e("Either a key Uri or EXTRA_SAVE_KEYRING_PARCEL is required!");
finish(); finish();
return; return;
} }
@@ -38,7 +38,6 @@ import android.view.ViewGroup;
import android.widget.AdapterView; import android.widget.AdapterView;
import android.widget.ListView; import android.widget.ListView;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.compatibility.DialogFragmentWorkaround; import org.sufficientlysecure.keychain.compatibility.DialogFragmentWorkaround;
import org.sufficientlysecure.keychain.operations.results.OperationResult; import org.sufficientlysecure.keychain.operations.results.OperationResult;
@@ -68,8 +67,9 @@ import org.sufficientlysecure.keychain.ui.dialog.EditSubkeyExpiryDialogFragment;
import org.sufficientlysecure.keychain.ui.dialog.EditUserIdDialogFragment; import org.sufficientlysecure.keychain.ui.dialog.EditUserIdDialogFragment;
import org.sufficientlysecure.keychain.ui.dialog.SetPassphraseDialogFragment; import org.sufficientlysecure.keychain.ui.dialog.SetPassphraseDialogFragment;
import org.sufficientlysecure.keychain.ui.util.Notify; import org.sufficientlysecure.keychain.ui.util.Notify;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Passphrase; import org.sufficientlysecure.keychain.util.Passphrase;
import timber.log.Timber;
public class EditKeyFragment extends QueueingCryptoOperationFragment<SaveKeyringParcel, OperationResult> public class EditKeyFragment extends QueueingCryptoOperationFragment<SaveKeyringParcel, OperationResult>
implements LoaderManager.LoaderCallbacks<Cursor> { implements LoaderManager.LoaderCallbacks<Cursor> {
@@ -168,7 +168,7 @@ public class EditKeyFragment extends QueueingCryptoOperationFragment<SaveKeyring
Uri dataUri = getArguments().getParcelable(ARG_DATA_URI); Uri dataUri = getArguments().getParcelable(ARG_DATA_URI);
SaveKeyringParcel saveKeyringParcel = getArguments().getParcelable(ARG_SAVE_KEYRING_PARCEL); SaveKeyringParcel saveKeyringParcel = getArguments().getParcelable(ARG_SAVE_KEYRING_PARCEL);
if (dataUri == null && saveKeyringParcel == null) { if (dataUri == null && saveKeyringParcel == null) {
Log.e(Constants.TAG, "Either a key Uri or ARG_SAVE_KEYRING_PARCEL is required!"); Timber.e("Either a key Uri or ARG_SAVE_KEYRING_PARCEL is required!");
getActivity().finish(); getActivity().finish();
return; return;
} }
@@ -195,7 +195,7 @@ public class EditKeyFragment extends QueueingCryptoOperationFragment<SaveKeyring
private void loadData(Uri dataUri) { private void loadData(Uri dataUri) {
mDataUri = dataUri; mDataUri = dataUri;
Log.i(Constants.TAG, "mDataUri: " + mDataUri); Timber.i("mDataUri: " + mDataUri);
// load the secret key ring. we do verify here that the passphrase is correct, so cached won't do // load the secret key ring. we do verify here that the passphrase is correct, so cached won't do
try { try {
@@ -76,9 +76,10 @@ import org.sufficientlysecure.keychain.ui.util.Notify;
import org.sufficientlysecure.keychain.ui.util.Notify.ActionListener; import org.sufficientlysecure.keychain.ui.util.Notify.ActionListener;
import org.sufficientlysecure.keychain.ui.util.Notify.Style; import org.sufficientlysecure.keychain.ui.util.Notify.Style;
import org.sufficientlysecure.keychain.util.FileHelper; import org.sufficientlysecure.keychain.util.FileHelper;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Passphrase; import org.sufficientlysecure.keychain.util.Passphrase;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
import timber.log.Timber;
public class EncryptFilesFragment public class EncryptFilesFragment
extends CachingCryptoOperationFragment<SignEncryptParcel, SignEncryptResult> { extends CachingCryptoOperationFragment<SignEncryptParcel, SignEncryptResult> {
@@ -901,7 +902,7 @@ public class EncryptFilesFragment
for (Uri inputUri : inputUris) { for (Uri inputUri : inputUris) {
ViewModel newModel = new ViewModel(mActivity, inputUri); ViewModel newModel = new ViewModel(mActivity, inputUri);
if (mDataset.contains(newModel)) { if (mDataset.contains(newModel)) {
Log.e(Constants.TAG, "Skipped duplicate " + inputUri); Timber.e("Skipped duplicate " + inputUri);
} else { } else {
mDataset.add(newModel); mDataset.add(newModel);
} }
@@ -44,8 +44,9 @@ import org.sufficientlysecure.keychain.ui.util.Notify.Style;
import org.sufficientlysecure.keychain.ui.widget.EncryptKeyCompletionView; import org.sufficientlysecure.keychain.ui.widget.EncryptKeyCompletionView;
import org.sufficientlysecure.keychain.ui.widget.KeySpinner; import org.sufficientlysecure.keychain.ui.widget.KeySpinner;
import org.sufficientlysecure.keychain.ui.widget.KeySpinner.OnKeyChangedListener; import org.sufficientlysecure.keychain.ui.widget.KeySpinner.OnKeyChangedListener;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Passphrase; import org.sufficientlysecure.keychain.util.Passphrase;
import timber.log.Timber;
public class EncryptModeAsymmetricFragment extends EncryptModeFragment { public class EncryptModeAsymmetricFragment extends EncryptModeFragment {
@@ -144,7 +145,7 @@ public class EncryptModeAsymmetricFragment extends EncryptModeFragment {
mSignKeySpinner.setPreSelectedKeyId(signatureKeyId); mSignKeySpinner.setPreSelectedKeyId(signatureKeyId);
} }
} catch (PgpKeyNotFoundException e) { } catch (PgpKeyNotFoundException e) {
Log.e(Constants.TAG, "key not found for signing!", e); Timber.e(e, "key not found for signing!");
Notify.create(getActivity(), getString(R.string.error_preselect_sign_key, Notify.create(getActivity(), getString(R.string.error_preselect_sign_key,
KeyFormattingUtils.beautifyKeyId(signatureKeyId)), KeyFormattingUtils.beautifyKeyId(signatureKeyId)),
Style.ERROR).show(); Style.ERROR).show();
@@ -158,7 +159,7 @@ public class EncryptModeAsymmetricFragment extends EncryptModeFragment {
mKeyRepository.getCanonicalizedPublicKeyRing(preselectedId); mKeyRepository.getCanonicalizedPublicKeyRing(preselectedId);
mEncryptKeyView.addObject(new KeyItem(ring)); mEncryptKeyView.addObject(new KeyItem(ring));
} catch (NotFoundException e) { } catch (NotFoundException e) {
Log.e(Constants.TAG, "key not found for encryption!", e); Timber.e(e, "key not found for encryption!");
Notify.create(getActivity(), getString(R.string.error_preselect_encrypt_key, Notify.create(getActivity(), getString(R.string.error_preselect_encrypt_key,
KeyFormattingUtils.beautifyKeyId(preselectedId)), KeyFormattingUtils.beautifyKeyId(preselectedId)),
Style.ERROR).show(); Style.ERROR).show();
@@ -25,6 +25,7 @@ import android.content.Intent;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.support.v4.app.FragmentTransaction; import android.support.v4.app.FragmentTransaction;
import android.util.Log;
import android.widget.Toast; import android.widget.Toast;
import org.apache.james.mime4j.util.MimeUtil; import org.apache.james.mime4j.util.MimeUtil;
@@ -33,7 +34,8 @@ import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.ui.util.Notify; import org.sufficientlysecure.keychain.ui.util.Notify;
import org.sufficientlysecure.keychain.ui.util.Notify.Style; import org.sufficientlysecure.keychain.ui.util.Notify.Style;
import org.sufficientlysecure.keychain.util.FileHelper; import org.sufficientlysecure.keychain.util.FileHelper;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
public class EncryptTextActivity extends EncryptActivity { public class EncryptTextActivity extends EncryptActivity {
@@ -63,8 +65,6 @@ public class EncryptTextActivity extends EncryptActivity {
// When sending to OpenKeychain Encrypt via share menu // When sending to OpenKeychain Encrypt via share menu
if (Intent.ACTION_SEND.equals(action) && type != null) { if (Intent.ACTION_SEND.equals(action) && type != null) {
Log.logDebugBundle(extras, "extras");
// When sending to OpenKeychain Encrypt via share menu // When sending to OpenKeychain Encrypt via share menu
if ( ! MimeUtil.isSameMimeType("text/plain", type)) { if ( ! MimeUtil.isSameMimeType("text/plain", type)) {
Toast.makeText(this, R.string.toast_wrong_mimetype, Toast.LENGTH_LONG).show(); Toast.makeText(this, R.string.toast_wrong_mimetype, Toast.LENGTH_LONG).show();
@@ -30,9 +30,8 @@ import android.widget.TextView;
import org.markdown4j.Markdown4jProcessor; import org.markdown4j.Markdown4jProcessor;
import org.sufficientlysecure.htmltextview.HtmlResImageGetter; import org.sufficientlysecure.htmltextview.HtmlResImageGetter;
import org.sufficientlysecure.htmltextview.HtmlTextView; import org.sufficientlysecure.htmltextview.HtmlTextView;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
import java.io.IOException; import java.io.IOException;
@@ -54,7 +53,7 @@ public class HelpAboutFragment extends Fragment {
getActivity().getResources().openRawResource(R.raw.help_about)); getActivity().getResources().openRawResource(R.raw.help_about));
aboutTextView.setHtml(html, new HtmlResImageGetter(aboutTextView)); aboutTextView.setHtml(html, new HtmlResImageGetter(aboutTextView));
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "IOException", e); Timber.e(e, "IOException");
} }
return view; return view;
@@ -73,7 +72,7 @@ public class HelpAboutFragment extends Fragment {
result = String.format("%s (%s)", info.versionName, info.versionCode); result = String.format("%s (%s)", info.versionName, info.versionCode);
} catch (NameNotFoundException e) { } catch (NameNotFoundException e) {
Log.w(Constants.TAG, "Unable to get application version: " + e.getMessage()); Timber.w("Unable to get application version: " + e.getMessage());
result = "Unable to get application version."; result = "Unable to get application version.";
} }
@@ -28,8 +28,7 @@ import android.widget.ScrollView;
import org.markdown4j.Markdown4jProcessor; import org.markdown4j.Markdown4jProcessor;
import org.sufficientlysecure.htmltextview.HtmlResImageGetter; import org.sufficientlysecure.htmltextview.HtmlResImageGetter;
import org.sufficientlysecure.htmltextview.HtmlTextView; import org.sufficientlysecure.htmltextview.HtmlTextView;
import org.sufficientlysecure.keychain.Constants; import timber.log.Timber;
import org.sufficientlysecure.keychain.util.Log;
import java.io.IOException; import java.io.IOException;
@@ -71,7 +70,7 @@ public class HelpMarkdownFragment extends Fragment {
getActivity().getResources().openRawResource(mHtmlFile)); getActivity().getResources().openRawResource(mHtmlFile));
text.setHtml(html, new HtmlResImageGetter(text)); text.setHtml(html, new HtmlResImageGetter(text));
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "IOException", e); Timber.e(e, "IOException");
} }
return scroller; return scroller;
@@ -42,9 +42,9 @@ import org.sufficientlysecure.keychain.ui.base.BaseActivity;
import org.sufficientlysecure.keychain.ui.base.CryptoOperationHelper; import org.sufficientlysecure.keychain.ui.base.CryptoOperationHelper;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.ui.util.Notify; import org.sufficientlysecure.keychain.ui.util.Notify;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.ParcelableFileCache; import org.sufficientlysecure.keychain.util.ParcelableFileCache;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
import timber.log.Timber;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
@@ -176,7 +176,7 @@ public class ImportKeysActivity extends BaseActivity implements ImportKeysListen
// action: search immediately // action: search immediately
startListFragment(null, null, query, null); startListFragment(null, null, query, null);
} else { } else {
Log.e(Constants.TAG, "Query is empty!"); Timber.e("Query is empty!");
return; return;
} }
} else if (extras.containsKey(EXTRA_FINGERPRINT)) { } else if (extras.containsKey(EXTRA_FINGERPRINT)) {
@@ -193,10 +193,8 @@ public class ImportKeysActivity extends BaseActivity implements ImportKeysListen
startListFragment(null, null, query, null); startListFragment(null, null, query, null);
} }
} else { } else {
Log.e(Constants.TAG, Timber.e("IMPORT_KEY_FROM_KEYSERVER action needs to contain the 'query', 'key_id', or " +
"IMPORT_KEY_FROM_KEYSERVER action needs to contain the 'query', 'key_id', or " + "'fingerprint' extra!");
"'fingerprint' extra!"
);
return; return;
} }
break; break;
@@ -216,7 +214,7 @@ public class ImportKeysActivity extends BaseActivity implements ImportKeysListen
dataUri.getScheme() + "://" + dataUri.getAuthority()); dataUri.getScheme() + "://" + dataUri.getAuthority());
Preferences.CloudSearchPrefs cloudSearchPrefs = new Preferences.CloudSearchPrefs( Preferences.CloudSearchPrefs cloudSearchPrefs = new Preferences.CloudSearchPrefs(
true, false, false, keyserver); true, false, false, keyserver);
Log.d(Constants.TAG, "Using keyserver: " + keyserver); Timber.d("Using keyserver: " + keyserver);
// process URL to get operation and query // process URL to get operation and query
String operation = dataUri.getQueryParameter("op"); String operation = dataUri.getQueryParameter("op");
@@ -352,7 +350,7 @@ public class ImportKeysActivity extends BaseActivity implements ImportKeysListen
new ParcelableFileCache<>(this, ImportOperation.CACHE_FILE_NAME); new ParcelableFileCache<>(this, ImportOperation.CACHE_FILE_NAME);
cache.writeCache(entries.size(), keyRings.iterator()); cache.writeCache(entries.size(), keyRings.iterator());
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "Problem writing cache file", e); Timber.e(e, "Problem writing cache file");
Notify.create(this, "Problem writing cache file!", Notify.Style.ERROR).show(); Notify.create(this, "Problem writing cache file!", Notify.Style.ERROR).show();
return; return;
} }
@@ -32,7 +32,6 @@ import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.compatibility.ClipboardReflection; import org.sufficientlysecure.keychain.compatibility.ClipboardReflection;
import org.sufficientlysecure.keychain.keyimport.processing.BytesLoaderState; import org.sufficientlysecure.keychain.keyimport.processing.BytesLoaderState;
@@ -42,7 +41,7 @@ import org.sufficientlysecure.keychain.ui.util.Notify;
import org.sufficientlysecure.keychain.ui.util.Notify.Style; import org.sufficientlysecure.keychain.ui.util.Notify.Style;
import org.sufficientlysecure.keychain.ui.util.PermissionsUtil; import org.sufficientlysecure.keychain.ui.util.PermissionsUtil;
import org.sufficientlysecure.keychain.util.FileHelper; import org.sufficientlysecure.keychain.util.FileHelper;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
import java.io.IOException; import java.io.IOException;
@@ -151,7 +150,7 @@ public class ImportKeysFileFragment extends Fragment {
try { try {
isEncrypted = FileHelper.isEncryptedFile(mActivity, mCurrentUri); isEncrypted = FileHelper.isEncryptedFile(mActivity, mCurrentUri);
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "Error opening file", e); Timber.e(e, "Error opening file");
Notify.create(mActivity, R.string.error_bad_data, Style.ERROR).show(); Notify.create(mActivity, R.string.error_bad_data, Style.ERROR).show();
return; return;
@@ -43,9 +43,9 @@ import org.sufficientlysecure.keychain.ui.base.CryptoOperationHelper;
import org.sufficientlysecure.keychain.ui.transfer.view.TransferFragment; import org.sufficientlysecure.keychain.ui.transfer.view.TransferFragment;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.util.IntentIntegratorSupportV4; import org.sufficientlysecure.keychain.util.IntentIntegratorSupportV4;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.keyimport.HkpKeyserverAddress; import org.sufficientlysecure.keychain.keyimport.HkpKeyserverAddress;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
import timber.log.Timber;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Locale; import java.util.Locale;
@@ -94,11 +94,11 @@ public class ImportKeysProxyActivity extends FragmentActivity
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
handleActionNdefDiscovered(getIntent()); handleActionNdefDiscovered(getIntent());
} else { } else {
Log.e(Constants.TAG, "Android Beam not supported by Android < 4.1"); Timber.e("Android Beam not supported by Android < 4.1");
finish(); finish();
} }
} else { } else {
Log.e(Constants.TAG, "No valid scheme or action given!"); Timber.e("No valid scheme or action given!");
finish(); finish();
} }
} }
@@ -123,7 +123,7 @@ public class ImportKeysProxyActivity extends FragmentActivity
resultCode, data); resultCode, data);
if (scanResult == null || scanResult.getFormatName() == null) { if (scanResult == null || scanResult.getFormatName() == null) {
Log.e(Constants.TAG, "scanResult or formatName null! Should not happen!"); Timber.e("scanResult or formatName null! Should not happen!");
finish(); finish();
return; return;
} }
@@ -142,7 +142,7 @@ public class ImportKeysProxyActivity extends FragmentActivity
private void processScannedContent(Uri uri) { private void processScannedContent(Uri uri) {
String action = getIntent().getAction(); String action = getIntent().getAction();
Log.d(Constants.TAG, "scanned: " + uri); Timber.d("scanned: " + uri);
// example: pgp+transfer: // example: pgp+transfer:
if (uri != null && uri.getScheme() != null && uri.getScheme().equalsIgnoreCase(Constants.SKT_SCHEME)) { if (uri != null && uri.getScheme() != null && uri.getScheme().equalsIgnoreCase(Constants.SKT_SCHEME)) {
@@ -68,8 +68,9 @@ import org.sufficientlysecure.keychain.ui.base.RecyclerFragment;
import org.sufficientlysecure.keychain.ui.keyview.ViewKeyActivity; import org.sufficientlysecure.keychain.ui.keyview.ViewKeyActivity;
import org.sufficientlysecure.keychain.ui.util.Notify; import org.sufficientlysecure.keychain.ui.util.Notify;
import org.sufficientlysecure.keychain.util.FabContainer; import org.sufficientlysecure.keychain.util.FabContainer;
import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
import timber.log.Timber;
public class KeyListFragment extends RecyclerFragment<KeySectionedListAdapter> public class KeyListFragment extends RecyclerFragment<KeySectionedListAdapter>
implements SearchView.OnQueryTextListener, implements SearchView.OnQueryTextListener,
@@ -381,7 +382,7 @@ public class KeyListFragment extends RecyclerFragment<KeySectionedListAdapter>
Notify.create(getActivity(), "Restored debug_backup.db", Notify.Style.OK).show(); Notify.create(getActivity(), "Restored debug_backup.db", Notify.Style.OK).show();
getActivity().getContentResolver().notifyChange(KeychainContract.KeyRings.CONTENT_URI, null); getActivity().getContentResolver().notifyChange(KeychainContract.KeyRings.CONTENT_URI, null);
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "IO Error", e); Timber.e(e, "IO Error");
Notify.create(getActivity(), "IO Error " + e.getMessage(), Notify.Style.ERROR).show(); Notify.create(getActivity(), "IO Error " + e.getMessage(), Notify.Style.ERROR).show();
} }
return true; return true;
@@ -391,7 +392,7 @@ public class KeyListFragment extends RecyclerFragment<KeySectionedListAdapter>
KeychainDatabase.debugBackup(getActivity(), false); KeychainDatabase.debugBackup(getActivity(), false);
Notify.create(getActivity(), "Backup to debug_backup.db completed", Notify.Style.OK).show(); Notify.create(getActivity(), "Backup to debug_backup.db completed", Notify.Style.OK).show();
} catch (IOException e) { } catch (IOException e) {
Log.e(Constants.TAG, "IO Error", e); Timber.e(e, "IO Error");
Notify.create(getActivity(), "IO Error: " + e.getMessage(), Notify.Style.ERROR).show(); Notify.create(getActivity(), "IO Error: " + e.getMessage(), Notify.Style.ERROR).show();
} }
return true; return true;
@@ -422,7 +423,7 @@ public class KeyListFragment extends RecyclerFragment<KeySectionedListAdapter>
@Override @Override
public boolean onQueryTextChange(String s) { public boolean onQueryTextChange(String s) {
Log.d(Constants.TAG, "onQueryTextChange s:" + s); Timber.d("onQueryTextChange s: %s", s);
// Called when the action bar search text has changed. Update the // Called when the action bar search text has changed. Update the
// search filter, and restart the loader to do a new query with this // search filter, and restart the loader to do a new query with this
// filter. // filter.
@@ -32,15 +32,12 @@ import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.ListView; import android.widget.ListView;
import org.openintents.openpgp.util.OpenPgpUtils;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.pgp.KeyRing;
import org.sufficientlysecure.keychain.provider.KeychainContract; import org.sufficientlysecure.keychain.provider.KeychainContract;
import org.sufficientlysecure.keychain.provider.KeychainDatabase; import org.sufficientlysecure.keychain.provider.KeychainDatabase;
import org.sufficientlysecure.keychain.service.CertifyActionsParcel; import org.sufficientlysecure.keychain.service.CertifyActionsParcel;
import org.sufficientlysecure.keychain.ui.adapter.MultiUserIdsAdapter; import org.sufficientlysecure.keychain.ui.adapter.MultiUserIdsAdapter;
import org.sufficientlysecure.keychain.util.Log; import timber.log.Timber;
import java.util.ArrayList; import java.util.ArrayList;
@@ -90,7 +87,7 @@ public class MultiUserIdsFragment extends Fragment implements LoaderManager.Load
mPubMasterKeyIds = getActivity().getIntent().getLongArrayExtra(EXTRA_KEY_IDS); mPubMasterKeyIds = getActivity().getIntent().getLongArrayExtra(EXTRA_KEY_IDS);
if (mPubMasterKeyIds == null) { if (mPubMasterKeyIds == null) {
Log.e(Constants.TAG, "List of key ids to certify missing!"); Timber.e("List of key ids to certify missing!");
getActivity().finish(); getActivity().finish();
return; return;
} }
@@ -184,7 +181,7 @@ public class MultiUserIdsFragment extends Fragment implements LoaderManager.Load
// Remember for next loop // Remember for next loop
lastName = name; lastName = name;
Log.d(Constants.TAG, Long.toString(masterKeyId, 16) + (grouped ? "grouped" : "not grouped")); Timber.d(Long.toString(masterKeyId, 16) + (grouped ? "grouped" : "not grouped"));
if (!subGrouped) { if (!subGrouped) {
// 1. This name should NOT be grouped with the previous, so we flush the buffer // 1. This name should NOT be grouped with the previous, so we flush the buffer
Loaded 100 of 161 files, more files were not shown because too many files have changed in this diff. Show more