diff --git a/app/build.gradle b/app/build.gradle index bf9af869d..66ee38019 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -16,6 +16,7 @@ dependencies { compile 'com.google.code.gson:gson:2.7' compile "com.jakewharton:butterknife:$BUTTERKNIFE_VERSION" annotationProcessor "com.jakewharton:butterknife-compiler:$BUTTERKNIFE_VERSION" + compile 'com.jakewharton.timber:timber:4.5.1' testCompile 'junit:junit:4.12' } diff --git a/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java b/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java index ebfc29b90..5ba33a7e2 100644 --- a/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java +++ b/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java @@ -9,7 +9,6 @@ import android.content.pm.PackageManager; import android.graphics.Bitmap; import android.os.Build; import android.support.v4.util.LruCache; -import android.util.Log; import com.android.volley.RequestQueue; import com.android.volley.toolbox.BasicNetwork; @@ -39,6 +38,7 @@ import java.io.IOException; import fr.free.nrw.commons.auth.WikiAccountAuthenticator; import fr.free.nrw.commons.caching.CacheController; +import timber.log.Timber; // TODO: Use ProGuard to rip out reporting when publishing @ReportsCrashes( @@ -92,6 +92,9 @@ public class CommonsApplication extends Application { @Override public void onCreate() { super.onCreate(); + + Timber.plant(new Timber.DebugTree()); + if (!BuildConfig.DEBUG) { ACRA.init(this); } @@ -112,11 +115,11 @@ public class CommonsApplication extends Application { long maxMem = Runtime.getRuntime().maxMemory(); if (maxMem < 48L * 1024L * 1024L) { // Cache only one bitmap if VM memory is too small (such as Nexus One); - Log.d("Commons", "Skipping bitmap cache; max mem is: " + maxMem); + Timber.d("Skipping bitmap cache; max mem is: %d", maxMem); imageCache = new LruCache<>(1); } else { int cacheSize = (int) (maxMem / (1024 * 8)); - Log.d("Commons", "Bitmap cache size " + cacheSize + " from max mem " + maxMem); + Timber.d("Bitmap cache size %d from max mem %d", cacheSize, maxMem); imageCache = new LruCache(cacheSize) { @Override protected int sizeOf(String key, Bitmap bitmap) { diff --git a/app/src/main/java/fr/free/nrw/commons/EventLog.java b/app/src/main/java/fr/free/nrw/commons/EventLog.java index 373a47ac9..d6c8d5059 100644 --- a/app/src/main/java/fr/free/nrw/commons/EventLog.java +++ b/app/src/main/java/fr/free/nrw/commons/EventLog.java @@ -4,7 +4,6 @@ import android.content.SharedPreferences; import android.os.AsyncTask; import android.os.Build; import android.preference.PreferenceManager; -import android.util.Log; import org.apache.http.HttpResponse; import org.json.JSONException; @@ -17,6 +16,7 @@ import java.net.URL; import fr.free.nrw.commons.settings.Prefs; import in.yuvi.http.fluent.Http; +import timber.log.Timber; public class EventLog { @@ -38,11 +38,11 @@ public class EventLog { if(response.getStatusLine().getStatusCode() != 204) { allSuccess = false; } - Log.d("Commons", "EventLog hit " + url.toString()); + Timber.d("EventLog hit %s", url); } catch (IOException e) { // Probably just ignore for now. Can be much more robust with a service, etc later on. - Log.d("Commons", "IO Error, EventLog hit skipped"); + Timber.d("IO Error, EventLog hit skipped"); } } diff --git a/app/src/main/java/fr/free/nrw/commons/MediaDataExtractor.java b/app/src/main/java/fr/free/nrw/commons/MediaDataExtractor.java index f5d153e5a..b09ec1b76 100644 --- a/app/src/main/java/fr/free/nrw/commons/MediaDataExtractor.java +++ b/app/src/main/java/fr/free/nrw/commons/MediaDataExtractor.java @@ -1,7 +1,5 @@ package fr.free.nrw.commons; -import android.util.Log; - import org.mediawiki.api.ApiResult; import org.mediawiki.api.MWApi; import org.w3c.dom.Document; @@ -23,6 +21,8 @@ import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; +import timber.log.Timber; + /** * Fetch additional media data from the network that we don't store locally. * @@ -131,20 +131,20 @@ public class MediaDataExtractor { * look for 'self' template and check its first parameter * if none, look for any of the known templates */ - Log.d("Commons", "MediaDataExtractor searching for license"); + Timber.d("MediaDataExtractor searching for license"); Node selfLicenseNode = findTemplate(doc.getDocumentElement(), "self"); if (selfLicenseNode != null) { Node firstNode = findTemplateParameter(selfLicenseNode, 1); String licenseTemplate = getFlatText(firstNode); License license = licenseList.licenseForTemplate(licenseTemplate); if (license == null) { - Log.d("Commons", "MediaDataExtractor found no matching license for self parameter: " + licenseTemplate + "; faking it"); + Timber.d("MediaDataExtractor found no matching license for self parameter: %s; faking it", licenseTemplate); this.license = licenseTemplate; // hack hack! For non-selectable licenses that are still in the system. } else { // fixme: record the self-ness in here too... sigh // all this needs better server-side metadata this.license = license.getKey(); - Log.d("Commons", "MediaDataExtractor found self-license " + this.license); + Timber.d("MediaDataExtractor found self-license %s", this.license); } } else { for (License license : licenseList.values()) { @@ -153,7 +153,7 @@ public class MediaDataExtractor { if (template != null) { // Found! this.license = license.getKey(); - Log.d("Commons", "MediaDataExtractor found non-self license " + this.license); + Timber.d("MediaDataExtractor found non-self license %s", this.license); break; } } diff --git a/app/src/main/java/fr/free/nrw/commons/Utils.java b/app/src/main/java/fr/free/nrw/commons/Utils.java index 493a654e6..28f4238d6 100644 --- a/app/src/main/java/fr/free/nrw/commons/Utils.java +++ b/app/src/main/java/fr/free/nrw/commons/Utils.java @@ -2,13 +2,13 @@ package fr.free.nrw.commons; import android.net.Uri; import android.os.Build; -import android.util.Log; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.assist.ImageScaleType; import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer; import fr.free.nrw.commons.settings.Prefs; +import timber.log.Timber; import java.io.BufferedInputStream; import java.io.IOException; @@ -44,8 +44,6 @@ import org.xmlpull.v1.XmlPullParserException; public class Utils { - private static final String TAG = Utils.class.getName(); - // Get SHA1 of file from input stream public static String getSHA1(InputStream is) { @@ -53,7 +51,7 @@ public class Utils { try { digest = MessageDigest.getInstance("SHA1"); } catch (NoSuchAlgorithmException e) { - Log.e(TAG, "Exception while getting Digest", e); + Timber.e(e, "Exception while getting Digest"); return ""; } @@ -68,17 +66,17 @@ public class Utils { String output = bigInt.toString(16); // Fill to 40 chars output = String.format("%40s", output).replace(' ', '0'); - Log.i(TAG, "File SHA1: " + output); + Timber.i("File SHA1: %s", output); return output; } catch (IOException e) { - Log.e(TAG, "IO Exception", e); + Timber.e(e, "IO Exception"); return ""; } finally { try { is.close(); } catch (IOException e) { - Log.e(TAG, "Exception on closing MD5 input stream", e); + Timber.e(e, "Exception on closing MD5 input stream"); } } } diff --git a/app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.java b/app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.java index c66c82910..b86294e7e 100644 --- a/app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.java @@ -14,9 +14,7 @@ import android.os.Bundle; import android.support.v4.app.NavUtils; import android.text.Editable; import android.text.TextWatcher; -import android.util.Log; import android.view.KeyEvent; -import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.inputmethod.EditorInfo; @@ -26,7 +24,6 @@ import android.widget.TextView; import android.widget.Toast; import java.io.IOException; -import java.util.Locale; import fr.free.nrw.commons.CommonsApplication; import fr.free.nrw.commons.EventLog; @@ -36,6 +33,7 @@ import fr.free.nrw.commons.WelcomeActivity; import fr.free.nrw.commons.contributions.ContributionsActivity; import fr.free.nrw.commons.contributions.ContributionsContentProvider; import fr.free.nrw.commons.modifications.ModificationsContentProvider; +import timber.log.Timber; public class LoginActivity extends AccountAuthenticatorActivity { @@ -61,7 +59,7 @@ public class LoginActivity extends AccountAuthenticatorActivity { @Override protected void onPostExecute(String result) { super.onPostExecute(result); - Log.d("Commons", "Login done!"); + Timber.d("Login done!"); EventLog.schema(CommonsApplication.EVENT_LOGIN_ATTEMPT) .param("username", username) @@ -80,7 +78,7 @@ public class LoginActivity extends AccountAuthenticatorActivity { Bundle extras = context.getIntent().getExtras(); if (extras != null) { - Log.d("LoginActivity", "Bundle of extras: " + extras.toString()); + Timber.d("Bundle of extras: %s", extras); if (accountCreated) { // Pass the new account back to the account manager AccountAuthenticatorResponse response = extras.getParcelable(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE); Bundle authResult = new Bundle(); @@ -116,7 +114,7 @@ public class LoginActivity extends AccountAuthenticatorActivity { response = R.string.login_failed_blocked; } else { // Should never really happen - Log.d("Commons", "Login failed with reason: " + result); + Timber.d("Login failed with reason: %s", result); response = R.string.login_failed_generic; } Toast.makeText(getApplicationContext(), response, Toast.LENGTH_LONG).show(); @@ -242,7 +240,7 @@ public class LoginActivity extends AccountAuthenticatorActivity { String password = passwordEdit.getText().toString(); - Log.d("Commons", "Login to start!"); + Timber.d("Login to start!"); LoginTask task = new LoginTask(this); task.execute(canonicalUsername, password); } diff --git a/app/src/main/java/fr/free/nrw/commons/auth/SignupActivity.java b/app/src/main/java/fr/free/nrw/commons/auth/SignupActivity.java index cd65826b0..5965c8928 100644 --- a/app/src/main/java/fr/free/nrw/commons/auth/SignupActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/auth/SignupActivity.java @@ -2,13 +2,13 @@ package fr.free.nrw.commons.auth; import android.content.Intent; import android.os.Bundle; -import android.util.Log; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Toast; import fr.free.nrw.commons.theme.BaseActivity; +import timber.log.Timber; public class SignupActivity extends BaseActivity { @@ -17,7 +17,7 @@ public class SignupActivity extends BaseActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - Log.d("SignupActivity", "Signup Activity started"); + Timber.d("Signup Activity started"); getSupportActionBar().hide(); @@ -37,7 +37,7 @@ public class SignupActivity extends BaseActivity { public boolean shouldOverrideUrlLoading(WebView view, String url) { if (url.equals("https://commons.m.wikimedia.org/w/index.php?title=Main_Page&welcome=yes")) { //Signup success, so clear cookies, notify user, and load LoginActivity again - Log.d("SignupActivity", "Overriding URL" + url); + Timber.d("Overriding URL %s", url); Toast toast = Toast.makeText(getApplicationContext(), "Account created!", Toast.LENGTH_LONG); toast.show(); @@ -47,7 +47,7 @@ public class SignupActivity extends BaseActivity { return true; } else { //If user clicks any other links in the webview - Log.d("SignupActivity", "Not overriding URL, URL is: " + url); + Timber.d("Not overriding URL, URL is: %s", url); return false; } } diff --git a/app/src/main/java/fr/free/nrw/commons/caching/CacheController.java b/app/src/main/java/fr/free/nrw/commons/caching/CacheController.java index 28215b8b2..2d8dafacb 100644 --- a/app/src/main/java/fr/free/nrw/commons/caching/CacheController.java +++ b/app/src/main/java/fr/free/nrw/commons/caching/CacheController.java @@ -1,7 +1,5 @@ package fr.free.nrw.commons.caching; -import android.util.Log; - import com.github.varunpant.quadtree.Point; import com.github.varunpant.quadtree.QuadTree; @@ -10,6 +8,7 @@ import java.util.Arrays; import java.util.List; import fr.free.nrw.commons.upload.MwVolleyApi; +import timber.log.Timber; public class CacheController { @@ -18,7 +17,6 @@ public class CacheController { private Point>[] pointsFound; private double xMinus, xPlus, yMinus, yPlus; - private static final String TAG = CacheController.class.getName(); private static final int EARTH_RADIUS = 6378137; public CacheController() { @@ -28,17 +26,17 @@ public class CacheController { public void setQtPoint(double decLongitude, double decLatitude) { x = decLongitude; y = decLatitude; - Log.d(TAG, "New QuadTree created"); - Log.d(TAG, "X (longitude) value: " + x + ", Y (latitude) value: " + y); + Timber.d("New QuadTree created"); + Timber.d("X (longitude) value: %f, Y (latitude) value: %f", x, y); } public void cacheCategory() { List pointCatList = new ArrayList<>(); if (MwVolleyApi.GpsCatExists.getGpsCatExists() == true) { pointCatList.addAll(MwVolleyApi.getGpsCat()); - Log.d(TAG, "Categories being cached: " + pointCatList); + Timber.d("Categories being cached: %s", pointCatList); } else { - Log.d(TAG, "No categories found, so no categories cached"); + Timber.d("No categories found, so no categories cached"); } quadTree.set(x, y, pointCatList); } @@ -48,20 +46,20 @@ public class CacheController { convertCoordRange(); pointsFound = quadTree.searchWithin(xMinus, yMinus, xPlus, yPlus); List displayCatList = new ArrayList<>(); - Log.d(TAG, "Points found in quadtree: " + Arrays.asList(pointsFound)); + Timber.d("Points found in quadtree: %s", Arrays.toString(pointsFound)); if (pointsFound.length != 0) { - Log.d(TAG, "Entering for loop"); + Timber.d("Entering for loop"); for (Point> point : pointsFound) { - Log.d(TAG, "Nearby point: " + point.toString()); + Timber.d("Nearby point: %s", point); displayCatList = point.getValue(); - Log.d(TAG, "Nearby cat: " + point.getValue()); + Timber.d("Nearby cat: %s", point.getValue()); } - Log.d(TAG, "Categories found in cache: " + displayCatList.toString()); + Timber.d("Categories found in cache: %s", displayCatList); } else { - Log.d(TAG, "No categories found in cache"); + Timber.d("No categories found in cache"); } return displayCatList; } @@ -84,6 +82,7 @@ public class CacheController { yMinus = lat - dLat * 180/Math.PI; xPlus = lon + dLon * 180/Math.PI; xMinus = lon - dLon * 180/Math.PI; - Log.d(TAG, "Search within: xMinus=" + xMinus + ", yMinus=" + yMinus + ", xPlus=" + xPlus + ", yPlus=" + yPlus); + Timber.d("Search within: xMinus=%s, yMinus=%s, xPlus=%s, yPlus=%s", + xMinus, yMinus, xPlus, yPlus); } } diff --git a/app/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java b/app/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java index b4f9d7078..0f71e329b 100644 --- a/app/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java @@ -16,7 +16,6 @@ import android.support.v7.app.AlertDialog; import android.text.Editable; import android.text.TextUtils; import android.text.TextWatcher; -import android.util.Log; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.Menu; @@ -44,6 +43,7 @@ import java.util.concurrent.TimeUnit; import fr.free.nrw.commons.R; import fr.free.nrw.commons.upload.MwVolleyApi; +import timber.log.Timber; /** * Displays the category suggestion and selection screen. Category search is initiated here. @@ -79,7 +79,6 @@ public class CategorizationFragment extends Fragment { private ContentProviderClient client; protected final static int SEARCH_CATS_LIMIT = 25; - private static final String TAG = CategorizationFragment.class.getName(); public static class CategoryItem implements Parcelable { public String name; @@ -130,28 +129,28 @@ public class CategorizationFragment extends Fragment { //Retrieve the title that was saved when user tapped submit icon SharedPreferences titleDesc = PreferenceManager.getDefaultSharedPreferences(getActivity()); String title = titleDesc.getString("Title", ""); - Log.d(TAG, "Title: " + title); + Timber.d("Title: %s", title); //Override onPostExecute to access the results of async API call titleCategoriesSub = new TitleCategories(title) { @Override protected void onPostExecute(ArrayList result) { super.onPostExecute(result); - Log.d(TAG, "Results in onPostExecute: " + result); + Timber.d("Results in onPostExecute: %s", result); titleCatItems.addAll(result); - Log.d(TAG, "TitleCatItems in onPostExecute: " + titleCatItems); + Timber.d("TitleCatItems in onPostExecute: %s", titleCatItems); mergeLatch.countDown(); } }; titleCategoriesSub.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); - Log.d(TAG, "TitleCatItems in titleCatQuery: " + titleCatItems); + Timber.d("TitleCatItems in titleCatQuery: %s", titleCatItems); //Only return titleCatItems after API call has finished try { mergeLatch.await(5L, TimeUnit.SECONDS); } catch (InterruptedException e) { - Log.e(TAG, "Interrupted exception: ", e); + Timber.e(e, "Interrupted exception: "); } return titleCatItems; } @@ -191,7 +190,7 @@ public class CategorizationFragment extends Fragment { Set mergedItems = new LinkedHashSet<>(); - Log.d(TAG, "Calling APIs for GPS cats, title cats and recent cats..."); + Timber.d("Calling APIs for GPS cats, title cats and recent cats..."); List gpsItems = new ArrayList<>(); if (MwVolleyApi.GpsCatExists.getGpsCatExists()) { @@ -203,22 +202,22 @@ public class CategorizationFragment extends Fragment { //Await results of titleItems, which is likely to come in last try { mergeLatch.await(5L, TimeUnit.SECONDS); - Log.d(TAG, "Waited for merge"); + Timber.d("Waited for merge"); } catch (InterruptedException e) { - Log.e(TAG, "Interrupted Exception: ", e); + Timber.e(e, "Interrupted Exception: "); } mergedItems.addAll(gpsItems); - Log.d(TAG, "Adding GPS items: " + gpsItems); + Timber.d("Adding GPS items: %s", gpsItems); mergedItems.addAll(titleItems); - Log.d(TAG, "Adding title items: " + titleItems); + Timber.d("Adding title items: %s", titleItems); mergedItems.addAll(recentItems); - Log.d(TAG, "Adding recent items: " + recentItems); + Timber.d("Adding recent items: %s", recentItems); //Needs to be an ArrayList and not a List unless we want to modify a big portion of preexisting code ArrayList mergedItemsList = new ArrayList<>(mergedItems); - Log.d(TAG, "Merged item list: " + mergedItemsList); + Timber.d("Merged item list: %s", mergedItemsList); return mergedItemsList; } @@ -261,7 +260,7 @@ public class CategorizationFragment extends Fragment { } } else { - Log.e(TAG, "Error: Fragment is null"); + Timber.e("Error: Fragment is null"); } } @@ -285,7 +284,7 @@ public class CategorizationFragment extends Fragment { latch.await(); } catch (InterruptedException e) { - Log.w(TAG, e); + Timber.w(e); //Thread.currentThread().interrupt(); } return result; @@ -296,12 +295,12 @@ public class CategorizationFragment extends Fragment { super.onPostExecute(result); results.addAll(result); - Log.d(TAG, "Prefix result: " + result); + Timber.d("Prefix result: %s", result); String filter = categoriesFilter.getText().toString(); ArrayList resultsList = new ArrayList<>(results); categoriesCache.put(filter, resultsList); - Log.d(TAG, "Final results List: " + resultsList); + Timber.d("Final results List: %s", resultsList); categoriesAdapter.notifyDataSetChanged(); setCatsAfterAsync(resultsList, filter); @@ -315,7 +314,7 @@ public class CategorizationFragment extends Fragment { super.onPostExecute(result); results.addAll(result); - Log.d(TAG, "Method A result: " + result); + Timber.d("Method A result: %s", result); categoriesAdapter.notifyDataSetChanged(); latch.countDown(); diff --git a/app/src/main/java/fr/free/nrw/commons/category/CategoryContentProvider.java b/app/src/main/java/fr/free/nrw/commons/category/CategoryContentProvider.java index 27ab42159..314ab33f2 100644 --- a/app/src/main/java/fr/free/nrw/commons/category/CategoryContentProvider.java +++ b/app/src/main/java/fr/free/nrw/commons/category/CategoryContentProvider.java @@ -8,9 +8,9 @@ import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteQueryBuilder; import android.net.Uri; import android.text.TextUtils; -import android.util.Log; import fr.free.nrw.commons.data.DBOpenHelper; +import timber.log.Timber; public class CategoryContentProvider extends ContentProvider { @@ -101,14 +101,14 @@ public class CategoryContentProvider extends ContentProvider { @Override public int bulkInsert(Uri uri, ContentValues[] values) { - Log.d("Commons", "Hello, bulk insert! (CategoryContentProvider)"); + Timber.d("Hello, bulk insert! (CategoryContentProvider)"); int uriType = uriMatcher.match(uri); SQLiteDatabase sqlDB = dbOpenHelper.getWritableDatabase(); sqlDB.beginTransaction(); switch (uriType) { case CATEGORIES: for(ContentValues value: values) { - Log.d("Commons", "Inserting! " + value.toString()); + Timber.d("Inserting! %s", value); sqlDB.insert(Category.Table.TABLE_NAME, null, value); } break; diff --git a/app/src/main/java/fr/free/nrw/commons/category/MethodAUpdater.java b/app/src/main/java/fr/free/nrw/commons/category/MethodAUpdater.java index cbc31814b..74e379b37 100644 --- a/app/src/main/java/fr/free/nrw/commons/category/MethodAUpdater.java +++ b/app/src/main/java/fr/free/nrw/commons/category/MethodAUpdater.java @@ -1,7 +1,6 @@ package fr.free.nrw.commons.category; import android.os.AsyncTask; -import android.util.Log; import android.view.View; import org.mediawiki.api.ApiResult; @@ -13,6 +12,7 @@ import java.util.Calendar; import java.util.Iterator; import fr.free.nrw.commons.CommonsApplication; +import timber.log.Timber; /** * Sends asynchronous queries to the Commons MediaWiki API to retrieve categories that are close to @@ -22,7 +22,6 @@ import fr.free.nrw.commons.CommonsApplication; public class MethodAUpdater extends AsyncTask> { private String filter; - private static final String TAG = MethodAUpdater.class.getName(); CategorizationFragment catFragment; public MethodAUpdater(CategorizationFragment catFragment) { @@ -54,11 +53,11 @@ public class MethodAUpdater extends AsyncTask> { Calendar now = Calendar.getInstance(); int year = now.get(Calendar.YEAR); String yearInString = String.valueOf(year); - Log.d(TAG, "Year: " + yearInString); + Timber.d("Year: %s", yearInString); int prevYear = year - 1; String prevYearInString = String.valueOf(prevYear); - Log.d(TAG, "Previous year: " + prevYearInString); + Timber.d("Previous year: %s", prevYearInString); //Copy to Iterator to prevent ConcurrentModificationException when removing item for(iterator = items.iterator(); iterator.hasNext();) { @@ -67,12 +66,12 @@ public class MethodAUpdater extends AsyncTask> { //Check if s contains a 4-digit word anywhere within the string (.* is wildcard) //And that s does not equal the current year or previous year if(s.matches(".*(19|20)\\d{2}.*") && !s.contains(yearInString) && !s.contains(prevYearInString)) { - Log.d(TAG, "Filtering out year " + s); + Timber.d("Filtering out year %s", s); iterator.remove(); } } - Log.d(TAG, "Items: " + items.toString()); + Timber.d("Items: %s", items); return items; } @@ -94,9 +93,9 @@ public class MethodAUpdater extends AsyncTask> { .param("srlimit", catFragment.SEARCH_CATS_LIMIT) .param("srsearch", filter) .get(); - Log.d(TAG, "Method A URL filter" + result.toString()); + Timber.d("Method A URL filter %s", result); } catch (IOException e) { - Log.e(TAG, "IO Exception: ", e); + Timber.e(e, "IO Exception: "); //Return empty arraylist return categories; } @@ -108,7 +107,7 @@ public class MethodAUpdater extends AsyncTask> { categories.add(catString); } - Log.d(TAG, "Found categories from Method A search, waiting for filter"); + Timber.d("Found categories from Method A search, waiting for filter"); ArrayList filteredItems = new ArrayList<>(filterYears(categories)); return filteredItems; } diff --git a/app/src/main/java/fr/free/nrw/commons/category/PrefixUpdater.java b/app/src/main/java/fr/free/nrw/commons/category/PrefixUpdater.java index bacd1a520..17d7ab801 100644 --- a/app/src/main/java/fr/free/nrw/commons/category/PrefixUpdater.java +++ b/app/src/main/java/fr/free/nrw/commons/category/PrefixUpdater.java @@ -2,7 +2,6 @@ package fr.free.nrw.commons.category; import android.os.AsyncTask; import android.text.TextUtils; -import android.util.Log; import android.view.View; import org.mediawiki.api.ApiResult; @@ -14,6 +13,7 @@ import java.util.Calendar; import java.util.Iterator; import fr.free.nrw.commons.CommonsApplication; +import timber.log.Timber; /** * Sends asynchronous queries to the Commons MediaWiki API to retrieve categories that share the @@ -24,7 +24,6 @@ import fr.free.nrw.commons.CommonsApplication; public class PrefixUpdater extends AsyncTask> { private String filter; - private static final String TAG = PrefixUpdater.class.getName(); private CategorizationFragment catFragment; public PrefixUpdater(CategorizationFragment catFragment) { @@ -56,11 +55,11 @@ public class PrefixUpdater extends AsyncTask> { Calendar now = Calendar.getInstance(); int year = now.get(Calendar.YEAR); String yearInString = String.valueOf(year); - Log.d(TAG, "Year: " + yearInString); + Timber.d("Year: %s", yearInString); int prevYear = year - 1; String prevYearInString = String.valueOf(prevYear); - Log.d(TAG, "Previous year: " + prevYearInString); + Timber.d("Previous year: %s", prevYearInString); //Copy to Iterator to prevent ConcurrentModificationException when removing item for(iterator = items.iterator(); iterator.hasNext();) { @@ -69,12 +68,12 @@ public class PrefixUpdater extends AsyncTask> { //Check if s contains a 4-digit word anywhere within the string (.* is wildcard) //And that s does not equal the current year or previous year if(s.matches(".*(19|20)\\d{2}.*") && !s.contains(yearInString) && !s.contains(prevYearInString)) { - Log.d(TAG, "Filtering out year " + s); + Timber.d("Filtering out year %s", s); iterator.remove(); } } - Log.d(TAG, "Items: " + items.toString()); + Timber.d("Items: %s", items); return items; } @@ -83,7 +82,7 @@ public class PrefixUpdater extends AsyncTask> { //If user hasn't typed anything in yet, get GPS and recent items if(TextUtils.isEmpty(filter)) { ArrayList mergedItems = new ArrayList<>(catFragment.mergeItems()); - Log.d(TAG, "Merged items, waiting for filter"); + Timber.d("Merged items, waiting for filter"); ArrayList filteredItems = new ArrayList<>(filterYears(mergedItems)); return filteredItems; } @@ -91,7 +90,7 @@ public class PrefixUpdater extends AsyncTask> { //if user types in something that is in cache, return cached category if(catFragment.categoriesCache.containsKey(filter)) { ArrayList cachedItems = new ArrayList<>(catFragment.categoriesCache.get(filter)); - Log.d(TAG, "Found cache items, waiting for filter"); + Timber.d("Found cache items, waiting for filter"); ArrayList filteredItems = new ArrayList<>(filterYears(cachedItems)); return filteredItems; } @@ -107,9 +106,9 @@ public class PrefixUpdater extends AsyncTask> { .param("acprefix", filter) .param("aclimit", catFragment.SEARCH_CATS_LIMIT) .get(); - Log.d(TAG, "Prefix URL filter" + result.toString()); + Timber.d("Prefix URL filter %s", result); } catch (IOException e) { - Log.e(TAG, "IO Exception: ", e); + Timber.e(e, "IO Exception: "); //Return empty arraylist return categories; } @@ -119,7 +118,7 @@ public class PrefixUpdater extends AsyncTask> { categories.add(categoryNode.getDocument().getTextContent()); } - Log.d(TAG, "Found categories from Prefix search, waiting for filter"); + Timber.d("Found categories from Prefix search, waiting for filter"); ArrayList filteredItems = new ArrayList<>(filterYears(categories)); return filteredItems; } diff --git a/app/src/main/java/fr/free/nrw/commons/category/TitleCategories.java b/app/src/main/java/fr/free/nrw/commons/category/TitleCategories.java index 5434c3f1b..9622d4d3b 100644 --- a/app/src/main/java/fr/free/nrw/commons/category/TitleCategories.java +++ b/app/src/main/java/fr/free/nrw/commons/category/TitleCategories.java @@ -1,7 +1,6 @@ package fr.free.nrw.commons.category; import android.os.AsyncTask; -import android.util.Log; import org.mediawiki.api.ApiResult; import org.mediawiki.api.MWApi; @@ -10,6 +9,7 @@ import java.io.IOException; import java.util.ArrayList; import fr.free.nrw.commons.CommonsApplication; +import timber.log.Timber; /** * Sends asynchronous queries to the Commons MediaWiki API to retrieve categories that are related to @@ -19,7 +19,7 @@ import fr.free.nrw.commons.CommonsApplication; public class TitleCategories extends AsyncTask> { private final static int SEARCH_CATS_LIMIT = 25; - private static final String TAG = TitleCategories.class.getName(); + private String title; public TitleCategories(String title) { @@ -48,9 +48,9 @@ public class TitleCategories extends AsyncTask> { .param("srlimit", SEARCH_CATS_LIMIT) .param("srsearch", title) .get(); - Log.d(TAG, "Searching for cats for title: " + result.toString()); + Timber.d("Searching for cats for title: %s", result); } catch (IOException e) { - Log.e(TAG, "IO Exception: ", e); + Timber.e(e, "IO Exception: "); //Return empty arraylist return items; } @@ -62,7 +62,7 @@ public class TitleCategories extends AsyncTask> { items.add(catString); } - Log.d(TAG, "Title cat query results: " + items); + Timber.d("Title cat query results: %s", items); return items; } diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/Contribution.java b/app/src/main/java/fr/free/nrw/commons/contributions/Contribution.java index 4a70151df..bcdf31d1b 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/Contribution.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/Contribution.java @@ -44,8 +44,6 @@ public class Contribution extends Media { public static final String SOURCE_GALLERY = "gallery"; public static final String SOURCE_EXTERNAL = "external"; - private static final String TAG = "Contribution"; - private ContentProviderClient client; private Uri contentUri; private String source; diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionController.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionController.java index 6581e7381..deaf655a1 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionController.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionController.java @@ -7,7 +7,6 @@ import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.support.v4.app.Fragment; -import android.util.Log; import java.io.File; import java.io.IOException; @@ -15,6 +14,7 @@ import java.util.Date; import fr.free.nrw.commons.upload.ShareActivity; import fr.free.nrw.commons.upload.UploadService; +import timber.log.Timber; public class ContributionController { private Fragment fragment; @@ -44,7 +44,7 @@ public class ContributionController { } } catch (IOException e) { - Log.e("Commons", "Could not create file: " + path, e); + Timber.e(e, "Could not create file: %s", path); } return Uri.fromFile(_photoFile); @@ -84,11 +84,11 @@ public class ContributionController { shareIntent.putExtra(UploadService.EXTRA_SOURCE, Contribution.SOURCE_CAMERA); break; } - Log.i("Image", "Image selected"); + Timber.i("Image selected"); try { activity.startActivity(shareIntent); } catch (SecurityException e) { - Log.e("ContributionController", "Security Exception", e); + Timber.e(e, "Security Exception"); } } diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java index a098a4783..bbe6d7411 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java @@ -14,7 +14,6 @@ import android.support.v4.app.LoaderManager; import android.support.v4.content.CursorLoader; import android.support.v4.content.Loader; import android.support.v4.widget.CursorAdapter; -import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; @@ -22,7 +21,6 @@ import android.widget.Adapter; import android.widget.AdapterView; import java.util.ArrayList; -import java.util.Objects; import fr.free.nrw.commons.CommonsApplication; import fr.free.nrw.commons.HandlerService; @@ -32,6 +30,7 @@ import fr.free.nrw.commons.auth.AuthenticatedActivity; import fr.free.nrw.commons.auth.WikiAccountAuthenticator; import fr.free.nrw.commons.media.MediaDetailPagerFragment; import fr.free.nrw.commons.upload.UploadService; +import timber.log.Timber; public class ContributionsActivity extends AuthenticatedActivity @@ -158,9 +157,9 @@ public class ContributionsActivity Contribution c = Contribution.fromCursor(allContributions); if(c.getState() == Contribution.STATE_FAILED) { uploadService.queue(UploadService.ACTION_UPLOAD_FILE, c); - Log.d("Commons", "Restarting for" + c.toContentValues().toString()); + Timber.d("Restarting for %s", c.toContentValues()); } else { - Log.d("Commons", "Skipping re-upload for non-failed " + c.toContentValues().toString()); + Timber.d("Skipping re-upload for non-failed %s", c.toContentValues()); } } @@ -168,11 +167,11 @@ public class ContributionsActivity allContributions.moveToPosition(i); Contribution c = Contribution.fromCursor(allContributions); if(c.getState() == Contribution.STATE_FAILED) { - Log.d("Commons", "Deleting failed contrib " + c.toContentValues().toString()); + Timber.d("Deleting failed contrib %s", c.toContentValues()); c.setContentProviderClient(getContentResolver().acquireContentProviderClient(ContributionsContentProvider.AUTHORITY)); c.delete(); } else { - Log.d("Commons", "Skipping deletion for non-failed contrib " + c.toContentValues().toString()); + Timber.d("Skipping deletion for non-failed contrib %s", c.toContentValues()); } } diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsContentProvider.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsContentProvider.java index 07a4f586e..37d9dae18 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsContentProvider.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsContentProvider.java @@ -8,9 +8,9 @@ import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteQueryBuilder; import android.net.Uri; import android.text.TextUtils; -import android.util.Log; import fr.free.nrw.commons.data.DBOpenHelper; +import timber.log.Timber; public class ContributionsContentProvider extends ContentProvider{ @@ -102,7 +102,7 @@ public class ContributionsContentProvider extends ContentProvider{ switch(uriType) { case CONTRIBUTIONS_ID: - Log.d("Commons", "Deleting contribution id " + uri.getLastPathSegment()); + Timber.d("Deleting contribution id %s", uri.getLastPathSegment()); rows = db.delete(Contribution.Table.TABLE_NAME, "_id = ?", new String[] { uri.getLastPathSegment() } @@ -117,14 +117,14 @@ public class ContributionsContentProvider extends ContentProvider{ @Override public int bulkInsert(Uri uri, ContentValues[] values) { - Log.d("Commons", "Hello, bulk insert! (ContributionsContentProvider)"); + Timber.d("Hello, bulk insert! (ContributionsContentProvider)"); int uriType = uriMatcher.match(uri); SQLiteDatabase sqlDB = dbOpenHelper.getWritableDatabase(); sqlDB.beginTransaction(); switch (uriType) { case CONTRIBUTIONS: for(ContentValues value: values) { - Log.d("Commons", "Inserting! " + value.toString()); + Timber.d("Inserting! %s", value); sqlDB.insert(Contribution.Table.TABLE_NAME, null, value); } break; diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java index 4841ffab5..f5efb8061 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java @@ -10,7 +10,6 @@ import android.os.Build; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.content.ContextCompat; -import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; @@ -29,8 +28,9 @@ import fr.free.nrw.commons.AboutActivity; import fr.free.nrw.commons.BuildConfig; import fr.free.nrw.commons.CommonsApplication; import fr.free.nrw.commons.R; -import fr.free.nrw.commons.settings.SettingsActivity; import fr.free.nrw.commons.nearby.NearbyActivity; +import fr.free.nrw.commons.settings.SettingsActivity; +import timber.log.Timber; import static android.app.Activity.RESULT_OK; @@ -45,7 +45,6 @@ public class ContributionsListFragment extends Fragment { @BindView(R.id.emptyMessage) TextView emptyMessage; private ContributionController controller; - private static final String TAG = "ContributionsList"; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { @@ -54,14 +53,14 @@ public class ContributionsListFragment extends Fragment { contributionsList.setOnItemClickListener((AdapterView.OnItemClickListener)getActivity()); if(savedInstanceState != null) { - Log.d(TAG, "Scrolling to " + savedInstanceState.getInt("grid-position")); + Timber.d("Scrolling to %d", savedInstanceState.getInt("grid-position")); contributionsList.setSelection(savedInstanceState.getInt("grid-position")); } //TODO: Should this be in onResume? SharedPreferences prefs = this.getActivity().getSharedPreferences("prefs", Context.MODE_PRIVATE); String lastModified = prefs.getString("lastSyncTimestamp", ""); - Log.d(TAG, "Last Sync Timestamp: " + lastModified); + Timber.d("Last Sync Timestamp: %s", lastModified); if (lastModified.equals("")) { waitingMessage.setVisibility(View.VISIBLE); @@ -96,10 +95,12 @@ public class ContributionsListFragment extends Fragment { super.onActivityResult(requestCode, resultCode, data); if ( resultCode == RESULT_OK ) { - Log.d("Contributions", "OnActivityResult() parameters: Req code: " + requestCode + " Result code: " + resultCode + " Data: " + data); + Timber.d("OnActivityResult() parameters: Req code: %d Result code: %d Data: %s", + requestCode, resultCode, data); controller.handleImagePicked(requestCode, data); } else { - Log.e("Contributions", "OnActivityResult() parameters: Req code: " + requestCode + " Result code: " + resultCode + " Data: " + data); + Timber.e("OnActivityResult() parameters: Req code: %d Result code: %d Data: %s", + requestCode, resultCode, data); } } @@ -176,7 +177,7 @@ public class ContributionsListFragment extends Fragment { // 1 = Storage allowed when gallery selected case 1: { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { - Log.d("ContributionsList", "Call controller.startGalleryPick()"); + Timber.d("Call controller.startGalleryPick()"); controller.startGalleryPick(); } } @@ -184,7 +185,7 @@ public class ContributionsListFragment extends Fragment { // 2 = Location allowed when 'nearby places' selected case 2: { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { - Log.d("ContributionsList", "Location permission granted"); + Timber.d("Location permission granted"); Intent nearbyIntent = new Intent(getActivity(), NearbyActivity.class); startActivity(nearbyIntent); } diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsSyncAdapter.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsSyncAdapter.java index 9cb01e02c..59f34d1da 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsSyncAdapter.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsSyncAdapter.java @@ -11,7 +11,6 @@ import android.database.Cursor; import android.os.Bundle; import android.os.RemoteException; import android.text.TextUtils; -import android.util.Log; import org.mediawiki.api.ApiResult; import org.mediawiki.api.MWApi; @@ -22,6 +21,7 @@ import java.util.Date; import fr.free.nrw.commons.CommonsApplication; import fr.free.nrw.commons.Utils; +import timber.log.Timber; public class ContributionsSyncAdapter extends AbstractThreadedSyncAdapter { private static int COMMIT_THRESHOLD = 10; @@ -85,18 +85,18 @@ public class ContributionsSyncAdapter extends AbstractThreadedSyncAdapter { // There isn't really much we can do, eh? // FIXME: Perhaps add EventLogging? syncResult.stats.numIoExceptions += 1; // Not sure if this does anything. Shitty docs - Log.d("Commons", "Syncing failed due to " + e.toString()); + Timber.d("Syncing failed due to %s", e); return; } - Log.d("Commons", "Last modified at " + lastModified); + Timber.d("Last modified at %s", lastModified); ArrayList uploads = result.getNodes("/api/query/logevents/item"); - Log.d("Commons", uploads.size() + " results!"); + Timber.d("%d results!", uploads.size()); ArrayList imageValues = new ArrayList<>(); for(ApiResult image: uploads) { String filename = image.getString("@title"); if(fileExists(contentProviderClient, filename)) { - Log.d("Commons", "Skipping " + filename); + Timber.d("Skipping %s", filename); continue; } String thumbUrl = Utils.makeThumbBaseUrl(filename); @@ -128,6 +128,6 @@ public class ContributionsSyncAdapter extends AbstractThreadedSyncAdapter { } } prefs.edit().putString("lastSyncTimestamp", Utils.toMWDate(curTime)).apply(); - Log.d("Commons", "Oh hai, everyone! Look, a kitty!"); + Timber.d("Oh hai, everyone! Look, a kitty!"); } } diff --git a/app/src/main/java/fr/free/nrw/commons/location/LocationServiceManager.java b/app/src/main/java/fr/free/nrw/commons/location/LocationServiceManager.java index cd428e9a3..3c0d2b23b 100644 --- a/app/src/main/java/fr/free/nrw/commons/location/LocationServiceManager.java +++ b/app/src/main/java/fr/free/nrw/commons/location/LocationServiceManager.java @@ -6,10 +6,11 @@ import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; -import android.util.Log; + +import timber.log.Timber; public class LocationServiceManager implements LocationListener { - public static final String TAG = "LocationServiceManager"; + private String provider; private LocationManager locationManager; private LatLng latestLocation; @@ -31,14 +32,14 @@ public class LocationServiceManager implements LocationListener { Location location = locationManager.getLastKnownLocation(provider); //Location works, just need to 'send' GPS coords // via emulator extended controls if testing on emulator - Log.d(TAG, "Checking for location..."); + Timber.d("Checking for location..."); if (location != null) { this.onLocationChanged(location); } } catch (IllegalArgumentException e) { - Log.e(TAG, "Illegal argument exception", e); + Timber.e(e, "Illegal argument exception"); } catch (SecurityException e) { - Log.e(TAG, "Security exception", e); + Timber.e(e, "Security exception"); } } @@ -48,7 +49,7 @@ public class LocationServiceManager implements LocationListener { try { locationManager.removeUpdates(this); } catch (SecurityException e) { - Log.e(TAG, "Security exception", e); + Timber.e(e, "Security exception"); } } @@ -56,24 +57,23 @@ public class LocationServiceManager implements LocationListener { public void onLocationChanged(Location location) { double currentLatitude = location.getLatitude(); double currentLongitude = location.getLongitude(); - Log.d(TAG, "Latitude: " + String.valueOf(currentLatitude) - + " Longitude: " + String.valueOf(currentLongitude)); + Timber.d("Latitude: %f Longitude: %f", currentLatitude, currentLongitude); latestLocation = new LatLng(currentLatitude, currentLongitude); } @Override public void onStatusChanged(String provider, int status, Bundle extras) { - Log.d(TAG, provider + "'s status changed to " + status); + Timber.d("%s's status changed to %d", provider, status); } @Override public void onProviderEnabled(String provider) { - Log.d(TAG, "Provider " + provider + " enabled"); + Timber.d("Provider %s enabled", provider); } @Override public void onProviderDisabled(String provider) { - Log.d(TAG, "Provider " + provider + " disabled"); + Timber.d("Provider %s disabled", provider); } } diff --git a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java index be5bf65db..91d45b982 100644 --- a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java @@ -6,7 +6,6 @@ import android.graphics.Bitmap; import android.os.AsyncTask; import android.os.Bundle; import android.support.v4.app.Fragment; -import android.util.Log; import android.util.TypedValue; import android.view.LayoutInflater; import android.view.View; @@ -34,6 +33,7 @@ import fr.free.nrw.commons.MediaDataExtractor; import fr.free.nrw.commons.MediaWikiImageView; import fr.free.nrw.commons.R; import fr.free.nrw.commons.Utils; +import timber.log.Timber; public class MediaDetailFragment extends Fragment { @@ -130,11 +130,11 @@ public class MediaDetailFragment extends Fragment { Media media = detailProvider.getMediaAtPosition(index); if (media == null) { // Ask the detail provider to ping us when we're ready - Log.d("Commons", "MediaDetailFragment not yet ready to display details; registering observer"); + Timber.d("MediaDetailFragment not yet ready to display details; registering observer"); dataObserver = new DataSetObserver() { @Override public void onChanged() { - Log.d("Commons", "MediaDetailFragment ready to display delayed details!"); + Timber.d("MediaDetailFragment ready to display delayed details!"); detailProvider.unregisterDataSetObserver(dataObserver); dataObserver = null; displayMediaDetails(detailProvider.getMediaAtPosition(index)); @@ -142,7 +142,7 @@ public class MediaDetailFragment extends Fragment { }; detailProvider.registerDataSetObserver(dataObserver); } else { - Log.d("Commons", "MediaDetailFragment ready to display details"); + Timber.d("MediaDetailFragment ready to display details"); displayMediaDetails(media); } @@ -186,7 +186,7 @@ public class MediaDetailFragment extends Fragment { //Always load image from Internet to allow viewing the desc, license, and cats String actualUrl = media.getThumbnailUrl(640); if(actualUrl.startsWith("http")) { - Log.d("Volley", "Actual URL starts with http and is: " + actualUrl); + Timber.d("Actual URL starts with http and is: %s", actualUrl); ImageLoader loader = ((CommonsApplication)getActivity().getApplicationContext()).getImageLoader(); MediaWikiImageView mwImage = (MediaWikiImageView)image; @@ -238,7 +238,7 @@ public class MediaDetailFragment extends Fragment { } rebuildCatList(); } else { - Log.d("Commons", "Failed to load photo details."); + Timber.d("Failed to load photo details."); } } }; @@ -246,7 +246,7 @@ public class MediaDetailFragment extends Fragment { } else { //This should not usually happen, image along with associated details should always be loaded from Internet, but keeping this for now for backup. //Even if image is loaded from device storage, it will display, albeit with empty desc and cat. - Log.d("Volley", "Actual URL does not start with http and is: " + actualUrl); + Timber.d("Actual URL does not start with http and is: %s", actualUrl); com.nostra13.universalimageloader.core.ImageLoader.getInstance().displayImage(actualUrl, image, displayOptions, new ImageLoadingListener() { @Override public void onLoadingStarted(String s, View view) { @@ -286,7 +286,7 @@ public class MediaDetailFragment extends Fragment { @Override public void onLoadingCancelled(String s, View view) { - Log.e("Volley", "Image loading cancelled. But why?"); + Timber.e("Image loading cancelled. But why?"); } }); } @@ -377,7 +377,7 @@ public class MediaDetailFragment extends Fragment { private String prettyLicense(Media media) { String licenseKey = media.getLicense(); - Log.d("Commons", "Media license is: " + licenseKey); + Timber.d("Media license is: %s", licenseKey); if (licenseKey == null || licenseKey.equals("")) { return getString(R.string.detail_license_empty); } diff --git a/app/src/main/java/fr/free/nrw/commons/modifications/ModificationsContentProvider.java b/app/src/main/java/fr/free/nrw/commons/modifications/ModificationsContentProvider.java index a422e5f33..baba01770 100644 --- a/app/src/main/java/fr/free/nrw/commons/modifications/ModificationsContentProvider.java +++ b/app/src/main/java/fr/free/nrw/commons/modifications/ModificationsContentProvider.java @@ -8,9 +8,9 @@ import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteQueryBuilder; import android.net.Uri; import android.text.TextUtils; -import android.util.Log; import fr.free.nrw.commons.data.DBOpenHelper; +import timber.log.Timber; public class ModificationsContentProvider extends ContentProvider{ @@ -101,14 +101,14 @@ public class ModificationsContentProvider extends ContentProvider{ @Override public int bulkInsert(Uri uri, ContentValues[] values) { - Log.d("Commons", "Hello, bulk insert! (ModificationsContentProvider)"); + Timber.d("Hello, bulk insert! (ModificationsContentProvider)"); int uriType = uriMatcher.match(uri); SQLiteDatabase sqlDB = dbOpenHelper.getWritableDatabase(); sqlDB.beginTransaction(); switch (uriType) { case MODIFICATIONS: for(ContentValues value: values) { - Log.d("Commons", "Inserting! " + value.toString()); + Timber.d("Inserting! %s", value); sqlDB.insert(ModifierSequence.Table.TABLE_NAME, null, value); } break; diff --git a/app/src/main/java/fr/free/nrw/commons/modifications/ModificationsSyncAdapter.java b/app/src/main/java/fr/free/nrw/commons/modifications/ModificationsSyncAdapter.java index b17162705..228b01a80 100644 --- a/app/src/main/java/fr/free/nrw/commons/modifications/ModificationsSyncAdapter.java +++ b/app/src/main/java/fr/free/nrw/commons/modifications/ModificationsSyncAdapter.java @@ -11,7 +11,6 @@ import android.content.SyncResult; import android.database.Cursor; import android.os.Bundle; import android.os.RemoteException; -import android.util.Log; import org.mediawiki.api.ApiResult; import org.mediawiki.api.MWApi; @@ -22,6 +21,7 @@ import fr.free.nrw.commons.CommonsApplication; import fr.free.nrw.commons.Utils; import fr.free.nrw.commons.contributions.Contribution; import fr.free.nrw.commons.contributions.ContributionsContentProvider; +import timber.log.Timber; public class ModificationsSyncAdapter extends AbstractThreadedSyncAdapter { @@ -42,7 +42,7 @@ public class ModificationsSyncAdapter extends AbstractThreadedSyncAdapter { // Exit early if nothing to do if(allModifications == null || allModifications.getCount() == 0) { - Log.d("Commons", "No modifications to perform"); + Timber.d("No modifications to perform"); return; } @@ -52,12 +52,12 @@ public class ModificationsSyncAdapter extends AbstractThreadedSyncAdapter { } catch (OperationCanceledException | AuthenticatorException e) { throw new RuntimeException(e); } catch (IOException e) { - Log.d("Commons", "Could not authenticate :("); + Timber.d("Could not authenticate :("); return; } if(Utils.isNullOrWhiteSpace(authCookie)) { - Log.d("Commons", "Could not authenticate :("); + Timber.d("Could not authenticate :("); return; } @@ -69,13 +69,13 @@ public class ModificationsSyncAdapter extends AbstractThreadedSyncAdapter { try { editToken = api.getEditToken(); } catch (IOException e) { - Log.d("Commons", "Can not retreive edit token!"); + Timber.d("Can not retreive edit token!"); return; } allModifications.moveToFirst(); - Log.d("Commons", "Found " + allModifications.getCount() + " modifications to execute"); + Timber.d("Found %d modifications to execute", allModifications.getCount()); ContentProviderClient contributionsClient = null; try { @@ -104,11 +104,11 @@ public class ModificationsSyncAdapter extends AbstractThreadedSyncAdapter { .param("titles", contrib.getFilename()) .get(); } catch (IOException e) { - Log.d("Commons", "Network fuckup on modifications sync!"); + Timber.d("Network fuckup on modifications sync!"); continue; } - Log.d("Commons", "Page content is " + Utils.getStringFromDOM(requestResult.getDocument())); + Timber.d("Page content is %s", Utils.getStringFromDOM(requestResult.getDocument())); String pageContent = requestResult.getString("/api/query/pages/page/revisions/rev"); String processedPageContent = sequence.executeModifications(contrib.getFilename(), pageContent); @@ -120,16 +120,16 @@ public class ModificationsSyncAdapter extends AbstractThreadedSyncAdapter { .param("summary", sequence.getEditSummary()) .post(); } catch (IOException e) { - Log.d("Commons", "Network fuckup on modifications sync!"); + Timber.d("Network fuckup on modifications sync!"); continue; } - Log.d("Commons", "Response is" + Utils.getStringFromDOM(responseResult.getDocument())); + Timber.d("Response is %s", Utils.getStringFromDOM(responseResult.getDocument())); String result = responseResult.getString("/api/edit/@result"); if(!result.equals("Success")) { // FIXME: Log this somewhere else - Log.d("Commons", "Non success result!" + result); + Timber.d("Non success result! %s", result); } else { sequence.delete(); } diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java index 380d256fd..de1b3b6cc 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java @@ -14,8 +14,6 @@ public class NearbyActivity extends BaseActivity { private LocationServiceManager locationManager; - private static final String TAG = NearbyActivity.class.getName(); - @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyAdapter.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyAdapter.java index c642e9602..63161f87b 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyAdapter.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyAdapter.java @@ -1,7 +1,6 @@ package fr.free.nrw.commons.nearby; import android.content.Context; -import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -11,6 +10,8 @@ import fr.free.nrw.commons.R; import java.util.List; +import timber.log.Timber; + public class NearbyAdapter extends ArrayAdapter { private List placesList; private Context context; @@ -33,7 +34,7 @@ public class NearbyAdapter extends ArrayAdapter { public View getView(int position, View convertView, ViewGroup parent) { // Get the data item for this position Place place = getItem(position); - Log.v("NearbyAdapter", "" + place); + Timber.v(String.valueOf(place)); // Check if an existing view is being reused, otherwise inflate the view if (convertView == null) { diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java index e7aedd249..537687567 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java @@ -10,7 +10,6 @@ import android.os.AsyncTask; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.v4.app.ListFragment; -import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -22,6 +21,7 @@ import butterknife.ButterKnife; import butterknife.OnItemClick; import fr.free.nrw.commons.R; import fr.free.nrw.commons.location.LatLng; +import timber.log.Timber; import java.util.Collections; import java.util.Comparator; @@ -40,8 +40,6 @@ public class NearbyListFragment extends ListFragment implements TaskListener { private boolean isTaskRunning = false; - private static final String TAG = NearbyListFragment.class.getName(); - public NearbyListFragment() { } @@ -55,7 +53,7 @@ public class NearbyListFragment extends ListFragment implements TaskListener { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - Log.d(TAG, "NearbyListFragment created"); + Timber.d("NearbyListFragment created"); View view = inflater.inflate(R.layout.fragment_nearby, container, false); ButterKnife.bind(this, view); return view; @@ -69,7 +67,7 @@ public class NearbyListFragment extends ListFragment implements TaskListener { nearbyAsyncTask = new NearbyAsyncTask(this); nearbyAsyncTask.execute(); progressBar.setVisibility(View.VISIBLE); - Log.d(TAG, "Saved instance state is null, populating ListView"); + Timber.d("Saved instance state is null, populating ListView"); } else { progressBar.setVisibility(View.GONE); } @@ -174,10 +172,7 @@ public class NearbyListFragment extends ListFragment implements TaskListener { double latitude = placeLatLng.latitude; double longitude = placeLatLng.longitude; - Log.d(TAG, "Item at position " - + position + " has coords: Lat: " - + latitude + " Long: " - + longitude); + Timber.d("Item at position %d has coords: Lat: %f Long: %f", position, latitude, longitude); //Open map app at given position Uri gmmIntentUri = Uri.parse("geo:0,0?q=" + latitude + "," + longitude); @@ -189,7 +184,7 @@ public class NearbyListFragment extends ListFragment implements TaskListener { } private List loadAttractionsFromLocation(LatLng curLatLng) { - Log.d(TAG, "Loading attractions near " + curLatLng); + Timber.d("Loading attractions near %s", curLatLng); if (curLatLng == null) { return Collections.emptyList(); } @@ -199,7 +194,7 @@ public class NearbyListFragment extends ListFragment implements TaskListener { curLatLng, Locale.getDefault().getLanguage()) : NearbyPlaces.getInstance().getFromWikiNeedsPictures(); if (curLatLng != null) { - Log.d(TAG, "Sorting places by distance..."); + Timber.d("Sorting places by distance..."); final Map distances = new HashMap<>(); for (Place place: places) { distances.put(place, computeDistanceBetween(place.location, curLatLng)); diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java index ecb0064d5..44d415505 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java @@ -2,7 +2,6 @@ package fr.free.nrw.commons.nearby; import android.net.Uri; import android.os.StrictMode; -import android.util.Log; import fr.free.nrw.commons.Utils; import fr.free.nrw.commons.location.LatLng; @@ -20,10 +19,10 @@ import java.util.Locale; import java.util.regex.Matcher; import java.util.regex.Pattern; +import timber.log.Timber; public class NearbyPlaces { - private static final String TAG = NearbyPlaces.class.getName(); private static final int MIN_RESULTS = 40; private static final double INITIAL_RADIUS = 1.0; private static final double MAX_RADIUS = 300.0; @@ -81,7 +80,7 @@ public class NearbyPlaces { // increase the radius gradually to find a satisfactory number of nearby places while (radius < MAX_RADIUS) { places = getFromWikidataQuery(curLatLng, lang, radius); - Log.d(TAG, places.size() + " results at radius: " + radius); + Timber.d("%d results at radius: %f", places.size(), radius); if (places.size() >= MIN_RESULTS) { break; } else { @@ -89,10 +88,10 @@ public class NearbyPlaces { } } } catch (IOException e) { - Log.d(TAG, "" + e.toString()); + Timber.d(e.toString()); // errors tend to be caused by too many results (and time out) // try a small radius next time - Log.d(TAG, "back to initial radius: " + radius); + Timber.d("back to initial radius: %f", radius); radius = INITIAL_RADIUS; } return places; @@ -107,15 +106,15 @@ public class NearbyPlaces { .replace("${LANG}", "" + lang); query = URLEncoder.encode(query, "utf-8").replace("+", "%20"); String url = WIKIDATA_QUERY_URL.replace("${QUERY}", query); - Log.d(TAG, url); + Timber.d(url); URLConnection conn = new URL(url).openConnection(); conn.setRequestProperty("Accept", "text/tab-separated-values"); BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line; - Log.d(TAG, "Reading from query result..."); + Timber.d("Reading from query result..."); while ((line = in.readLine()) != null) { - Log.v(TAG, line); + Timber.v(line); line = line + "\n"; // to pad columns and make fields a fixed size if (!line.startsWith("\"Point")) { continue; @@ -170,7 +169,7 @@ public class NearbyPlaces { boolean firstLine = true; String line; - Log.d(TAG, "Reading from CSV file..."); + Timber.d("Reading from CSV file..."); while ((line = in.readLine()) != null) { @@ -209,7 +208,7 @@ public class NearbyPlaces { in.close(); } catch (IOException e) { - Log.d(TAG, e.toString()); + Timber.d(e.toString()); } } return places; diff --git a/app/src/main/java/fr/free/nrw/commons/upload/ExistingFileAsync.java b/app/src/main/java/fr/free/nrw/commons/upload/ExistingFileAsync.java index 6d7854c26..6d7b08025 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/ExistingFileAsync.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/ExistingFileAsync.java @@ -4,7 +4,7 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.os.AsyncTask; -import android.util.Log; +import android.support.v7.app.AlertDialog; import org.mediawiki.api.ApiResult; import org.mediawiki.api.MWApi; @@ -12,11 +12,10 @@ import org.mediawiki.api.MWApi; import java.io.IOException; import java.util.ArrayList; -import android.support.v7.app.AlertDialog; - import fr.free.nrw.commons.CommonsApplication; import fr.free.nrw.commons.R; import fr.free.nrw.commons.contributions.ContributionsActivity; +import timber.log.Timber; /** * Sends asynchronous queries to the Commons MediaWiki API to check that file doesn't already exist @@ -24,8 +23,6 @@ import fr.free.nrw.commons.contributions.ContributionsActivity; */ public class ExistingFileAsync extends AsyncTask { - private static final String TAG = ExistingFileAsync.class.getName(); - private String fileSHA1; private Context context; @@ -51,14 +48,14 @@ public class ExistingFileAsync extends AsyncTask { .param("list", "allimages") .param("aisha1", fileSHA1) .get(); - Log.d(TAG, "Searching Commons API for existing file: " + result.toString()); + Timber.d("Searching Commons API for existing file: %s", result); } catch (IOException e) { - Log.e(TAG, "IO Exception: ", e); + Timber.e(e, "IO Exception: "); return false; } ArrayList resultNodes = result.getNodes("/api/query/allimages/img"); - Log.d(TAG, "Result nodes: " + resultNodes); + Timber.d("Result nodes: %s", resultNodes); boolean fileExists; if (!resultNodes.isEmpty()) { @@ -67,7 +64,7 @@ public class ExistingFileAsync extends AsyncTask { fileExists = false; } - Log.d(TAG, "File already exists in Commons:" + fileExists); + Timber.d("File already exists in Commons: %s", fileExists); return fileExists; } diff --git a/app/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java b/app/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java index ea26cfa2c..e861a1803 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/GPSExtractor.java @@ -10,10 +10,11 @@ import android.media.ExifInterface; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.annotation.Nullable; -import android.util.Log; import java.io.IOException; +import timber.log.Timber; + /** * Extracts geolocation to be passed to API for category suggestions. If a picture with geolocation * is uploaded, extract latitude and longitude from EXIF data of image. If a picture without @@ -21,8 +22,6 @@ import java.io.IOException; */ public class GPSExtractor { - private static final String TAG = GPSExtractor.class.getName(); - private String filePath; private double decLatitude, decLongitude; private Double currentLatitude = null; @@ -46,7 +45,7 @@ public class GPSExtractor { private boolean gpsPreferenceEnabled() { SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(context); boolean gpsPref = sharedPref.getBoolean("allowGps", false); - Log.d(TAG, "Gps pref set to: " + gpsPref); + Timber.d("Gps pref set to: %b", gpsPref); return gpsPref; } @@ -66,9 +65,9 @@ public class GPSExtractor { myLocationListener.onLocationChanged(location); } } catch (IllegalArgumentException e) { - Log.e(TAG, "Illegal argument exception", e); + Timber.e(e, "Illegal argument exception"); } catch (SecurityException e) { - Log.e(TAG, "Security exception", e); + Timber.e(e, "Security exception"); } } @@ -76,7 +75,7 @@ public class GPSExtractor { try { locationManager.removeUpdates(myLocationListener); } catch (SecurityException e) { - Log.e(TAG, "Security exception", e); + Timber.e(e, "Security exception"); } } @@ -98,10 +97,10 @@ public class GPSExtractor { try { exif = new ExifInterface(filePath); } catch (IOException e) { - Log.w(TAG, e); + Timber.w(e); return null; } catch (IllegalArgumentException e) { - Log.w(TAG, e); + Timber.w(e); return null; } @@ -110,14 +109,15 @@ public class GPSExtractor { registerLocationManager(); imageCoordsExists = false; - Log.d(TAG, "EXIF data has no location info"); + Timber.d("EXIF data has no location info"); //Check what user's preference is for automatic location detection boolean gpsPrefEnabled = gpsPreferenceEnabled(); //Check that currentLatitude and currentLongitude have been explicitly set by MyLocationListener and do not default to (0.0,0.0) if (gpsPrefEnabled && currentLatitude != null && currentLongitude != null) { - Log.d(TAG, "Current location values: Lat = " + currentLatitude + " Long = " + currentLongitude); + Timber.d("Current location values: Lat = %f Long = %f", + currentLatitude, currentLongitude); return String.valueOf(currentLatitude) + "|" + String.valueOf(currentLongitude); } else { // No coords found @@ -128,7 +128,7 @@ public class GPSExtractor { } else { //If image has EXIF data, extract image coords imageCoordsExists = true; - Log.d(TAG, "EXIF data has location info"); + Timber.d("EXIF data has location info"); latitude = exif.getAttribute(ExifInterface.TAG_GPS_LATITUDE); latitude_ref = exif.getAttribute(ExifInterface.TAG_GPS_LATITUDE_REF); @@ -136,8 +136,8 @@ public class GPSExtractor { longitude_ref = exif.getAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF); if (latitude!=null && latitude_ref!=null && longitude!=null && longitude_ref!=null) { - Log.d(TAG, "Latitude: " + latitude + " " + latitude_ref); - Log.d(TAG, "Longitude: " + longitude + " " + longitude_ref); + Timber.d("Latitude: %s %s", latitude, latitude_ref); + Timber.d("Longitude: %s %s", longitude, longitude_ref); decimalCoords = getDecimalCoords(latitude, latitude_ref, longitude, longitude_ref); return decimalCoords; @@ -160,17 +160,17 @@ public class GPSExtractor { @Override public void onStatusChanged(String provider, int status, Bundle extras) { - Log.d(TAG, provider + "'s status changed to " + status); + Timber.d("%s's status changed to %d", provider, status); } @Override public void onProviderEnabled(String provider) { - Log.d(TAG, "Provider " + provider + " enabled"); + Timber.d("Provider %s enabled", provider); } @Override public void onProviderDisabled(String provider) { - Log.d(TAG, "Provider " + provider + " disabled"); + Timber.d("Provider %s disabled", provider); } } @@ -201,7 +201,7 @@ public class GPSExtractor { } String decimalCoords = String.valueOf(decLatitude) + "|" + String.valueOf(decLongitude); - Log.d(TAG, "Latitude and Longitude are " + decimalCoords); + Timber.d("Latitude and Longitude are %s", decimalCoords); return decimalCoords; } diff --git a/app/src/main/java/fr/free/nrw/commons/upload/MultipleShareActivity.java b/app/src/main/java/fr/free/nrw/commons/upload/MultipleShareActivity.java index a39ca0d6c..27ab99e07 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/MultipleShareActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/MultipleShareActivity.java @@ -14,7 +14,6 @@ import android.os.Bundle; import android.support.v4.app.ActivityCompat; import android.support.v4.app.FragmentManager; import android.support.v4.content.ContextCompat; -import android.util.Log; import android.view.MenuItem; import android.view.View; import android.view.inputmethod.InputMethodManager; @@ -36,6 +35,7 @@ import fr.free.nrw.commons.modifications.CategoryModifier; import fr.free.nrw.commons.modifications.ModificationsContentProvider; import fr.free.nrw.commons.modifications.ModifierSequence; import fr.free.nrw.commons.modifications.TemplateRemoveModifier; +import timber.log.Timber; public class MultipleShareActivity extends AuthenticatedActivity @@ -116,7 +116,7 @@ public class MultipleShareActivity private void multipleUploadBegins() { - Log.d("MultipleShareActivity", "Multiple upload begins"); + Timber.d("Multiple upload begins"); final ProgressDialog dialog = new ProgressDialog(MultipleShareActivity.this); dialog.setIndeterminate(false); diff --git a/app/src/main/java/fr/free/nrw/commons/upload/MwVolleyApi.java b/app/src/main/java/fr/free/nrw/commons/upload/MwVolleyApi.java index f47e76dbd..6544b4fff 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/MwVolleyApi.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/MwVolleyApi.java @@ -2,7 +2,6 @@ package fr.free.nrw.commons.upload; import android.content.Context; import android.net.Uri; -import android.util.Log; import com.android.volley.Cache; import com.android.volley.NetworkResponse; @@ -22,6 +21,8 @@ import java.util.HashSet; import java.util.List; import java.util.Set; +import timber.log.Timber; + /** * Uses the Volley library to implement asynchronous calls to the Commons MediaWiki API to match * GPS coordinates with nearby Commons categories. Parses the results using GSON to obtain a list @@ -38,7 +39,6 @@ public class MwVolleyApi { private static List categoryList; private static final String MWURL = "https://commons.wikimedia.org/"; - private static final String TAG = MwVolleyApi.class.getName(); public MwVolleyApi(Context context) { this.context = context; @@ -52,13 +52,13 @@ public class MwVolleyApi { public static void setGpsCat(List cachedList) { categoryList = new ArrayList<>(); categoryList.addAll(cachedList); - Log.d(TAG, "Setting GPS cats from cache: " + categoryList.toString()); + Timber.d("Setting GPS cats from cache: %s", categoryList); } public void request(String coords) { coordsLog = coords; String apiUrl = buildUrl(coords); - Log.d(TAG, "URL: " + apiUrl); + Timber.d("URL: %s", apiUrl); JsonRequest request = new QueryRequest(apiUrl, new LogResponseListener(), new LogResponseErrorListener()); @@ -110,7 +110,7 @@ public class MwVolleyApi { @Override public void onResponse(T response) { - Log.d(TAG, response.toString()); + Timber.d(response.toString()); } } @@ -118,12 +118,11 @@ public class MwVolleyApi { @Override public void onErrorResponse(VolleyError error) { - Log.e(TAG, error.toString()); + Timber.e(error.toString()); } } private static class QueryRequest extends JsonRequest { - private static final String TAG = QueryRequest.class.getName(); public QueryRequest(String url, Response.Listener listener, @@ -169,11 +168,11 @@ public class MwVolleyApi { private String printSet() { if (categorySet == null || categorySet.isEmpty()) { GpsCatExists.setGpsCatExists(false); - Log.d(TAG, "gpsCatExists=" + GpsCatExists.getGpsCatExists()); + Timber.d("gpsCatExists=%b", GpsCatExists.getGpsCatExists()); return "No collection of categories"; } else { GpsCatExists.setGpsCatExists(true); - Log.d(TAG, "gpsCatExists=" + GpsCatExists.getGpsCatExists()); + Timber.d("gpsCatExists=%b", GpsCatExists.getGpsCatExists()); return "CATEGORIES FOUND" + categorySet.toString(); } diff --git a/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java b/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java index 0805ea462..b5be52a9f 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java @@ -12,7 +12,6 @@ import android.support.design.widget.Snackbar; import android.support.v4.app.ActivityCompat; import android.support.v4.app.NavUtils; import android.support.v4.content.ContextCompat; -import android.util.Log; import android.view.MenuItem; import android.view.View; import android.widget.ImageView; @@ -38,6 +37,7 @@ import fr.free.nrw.commons.modifications.CategoryModifier; import fr.free.nrw.commons.modifications.ModificationsContentProvider; import fr.free.nrw.commons.modifications.ModifierSequence; import fr.free.nrw.commons.modifications.TemplateRemoveModifier; +import timber.log.Timber; /** * Activity for the title/desc screen after image is selected. Also starts processing image @@ -48,8 +48,6 @@ public class ShareActivity implements SingleUploadFragment.OnUploadActionInitiated, CategorizationFragment.OnCategoriesSaveHandler { - private static final String TAG = ShareActivity.class.getName(); - private SingleUploadFragment shareView; private CategorizationFragment categorizationFragment; @@ -118,7 +116,7 @@ public class ShareActivity if (cacheFound == false) { //Has to be called after apiCall.request() app.cacheData.cacheCategory(); - Log.d(TAG, "Cache the categories found"); + Timber.d("Cache the categories found"); } uploadController.startUpload(title, mediaUri, description, mimeType, source, decimalCoords, new UploadController.ContributionUploadProgress() { @@ -245,15 +243,15 @@ public class ShareActivity //Test SHA1 of image to see if it matches SHA1 of a file on Commons try { InputStream inputStream = getContentResolver().openInputStream(mediaUri); - Log.d(TAG, "Input stream created from " + mediaUriString); + Timber.d("Input stream created from %s", mediaUriString); String fileSHA1 = Utils.getSHA1(inputStream); - Log.d(TAG, "File SHA1 is: " + fileSHA1); + Timber.d("File SHA1 is: %s", fileSHA1); ExistingFileAsync fileAsyncTask = new ExistingFileAsync(fileSHA1, this); fileAsyncTask.execute(); } catch (IOException e) { - Log.d(TAG, "IO Exception: ", e); + Timber.d(e, "IO Exception: "); } } @@ -263,8 +261,8 @@ public class ShareActivity requestAuthToken(); - Log.d(TAG, "Uri: " + mediaUriString); - Log.d(TAG, "Ext storage dir: " + Environment.getExternalStorageDirectory()); + Timber.d("Uri: %s", mediaUriString); + Timber.d("Ext storage dir: %s", Environment.getExternalStorageDirectory()); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { useNewPermissions = true; @@ -378,8 +376,8 @@ public class ShareActivity */ public void getFileMetadata(boolean gpsEnabled) { filePath = FileUtils.getPath(this, mediaUri); - Log.d(TAG, "Filepath: " + filePath); - Log.d(TAG, "Calling GPSExtractor"); + Timber.d("Filepath: %s", filePath); + Timber.d("Calling GPSExtractor"); if(imageObj == null) { imageObj = new GPSExtractor(filePath, this); } @@ -397,7 +395,7 @@ public class ShareActivity */ public void useImageCoords() { if(decimalCoords != null) { - Log.d(TAG, "Decimal coords of image: " + decimalCoords); + Timber.d("Decimal coords of image: %s", decimalCoords); // Only set cache for this point if image has coords if (imageObj.imageCoordsExists) { @@ -415,10 +413,10 @@ public class ShareActivity if (catListEmpty) { cacheFound = false; apiCall.request(decimalCoords); - Log.d(TAG, "displayCatList size 0, calling MWAPI" + displayCatList.toString()); + Timber.d("displayCatList size 0, calling MWAPI %s", displayCatList); } else { cacheFound = true; - Log.d(TAG, "Cache found, setting categoryList in MwVolleyApi to " + displayCatList.toString()); + Timber.d("Cache found, setting categoryList in MwVolleyApi to %s", displayCatList); MwVolleyApi.setGpsCat(displayCatList); } } @@ -429,10 +427,10 @@ public class ShareActivity super.onPause(); try { imageObj.unregisterLocationManager(); - Log.d(TAG, "Unregistered locationManager"); + Timber.d("Unregistered locationManager"); } catch (NullPointerException e) { - Log.d(TAG, "locationManager does not exist, not unregistered"); + Timber.d("locationManager does not exist, not unregistered"); } } diff --git a/app/src/main/java/fr/free/nrw/commons/upload/SingleUploadFragment.java b/app/src/main/java/fr/free/nrw/commons/upload/SingleUploadFragment.java index 687bcabb0..e96c8768c 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/SingleUploadFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/SingleUploadFragment.java @@ -11,7 +11,6 @@ import android.preference.PreferenceManager; import android.support.v4.app.Fragment; import android.text.Editable; import android.text.TextWatcher; -import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; @@ -37,6 +36,7 @@ import butterknife.OnTouch; import fr.free.nrw.commons.settings.Prefs; import fr.free.nrw.commons.R; import fr.free.nrw.commons.Utils; +import timber.log.Timber; public class SingleUploadFragment extends Fragment { private SharedPreferences prefs; @@ -54,8 +54,6 @@ public class SingleUploadFragment extends Fragment { private OnUploadActionInitiated uploadActionInitiatedHandler; - private static final String TAG = SingleUploadFragment.class.getName(); - @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.activity_share, menu); @@ -103,7 +101,7 @@ public class SingleUploadFragment extends Fragment { prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); license = prefs.getString(Prefs.DEFAULT_LICENSE, Prefs.Licenses.CC_BY_SA_3); - Log.d("Single Upload fragment", license); + Timber.d(license); ArrayAdapter adapter; if (PreferenceManager.getDefaultSharedPreferences(getActivity()).getBoolean("theme",true)) { @@ -117,7 +115,7 @@ public class SingleUploadFragment extends Fragment { licenseSpinner.setAdapter(adapter); int position = licenseItems.indexOf(getString(Utils.licenseNameFor(license))); - Log.d("Single Upload fragment", "Position:"+position+" "+getString(Utils.licenseNameFor(license))); + Timber.d("Position: %d %s", position, getString(Utils.licenseNameFor(license))); licenseSpinner.setSelection(position); TextWatcher uploadEnabler = new TextWatcher() { @@ -190,7 +188,7 @@ public class SingleUploadFragment extends Fragment { SharedPreferences titleDesc = PreferenceManager.getDefaultSharedPreferences(getActivity()); String title = titleDesc.getString("Title", ""); String desc = titleDesc.getString("Desc", ""); - Log.d(TAG, "Title: " + title + ", Desc: " + desc); + Timber.d("Title: %s, Desc: %s", title, desc); titleEdit.setText(title); descEdit.setText(desc); diff --git a/app/src/main/java/fr/free/nrw/commons/upload/UploadController.java b/app/src/main/java/fr/free/nrw/commons/upload/UploadController.java index f2c147249..2bdee55f5 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/UploadController.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/UploadController.java @@ -13,7 +13,6 @@ import android.os.IBinder; import android.preference.PreferenceManager; import android.provider.MediaStore; import android.text.TextUtils; -import android.util.Log; import java.io.IOException; import java.util.Date; @@ -23,6 +22,7 @@ import fr.free.nrw.commons.HandlerService; import fr.free.nrw.commons.settings.Prefs; import fr.free.nrw.commons.Utils; import fr.free.nrw.commons.contributions.Contribution; +import timber.log.Timber; public class UploadController { private UploadService uploadService; @@ -115,11 +115,11 @@ public class UploadController { contribution.setDataLength(length); } } catch(IOException e) { - Log.e("UploadController", "IO Exception: ", e); + Timber.e(e, "IO Exception: "); } catch(NullPointerException e) { - Log.e("UploadController", "Null Pointer Exception: ", e); + Timber.e(e, "Null Pointer Exception: "); } catch(SecurityException e) { - Log.e("UploadController", "Security Exception: ", e); + Timber.e(e, "Security Exception: "); } String mimeType = (String)contribution.getTag("mimeType"); @@ -132,7 +132,7 @@ public class UploadController { if(mimeType != null) { contribution.setTag("mimeType", mimeType); imagePrefix = mimeType.startsWith("image/"); - Log.d("UploadController", "MimeType is: " + mimeType); + Timber.d("MimeType is: %s", mimeType); } if(imagePrefix && contribution.getDateCreated() == null) { diff --git a/app/src/main/java/fr/free/nrw/commons/upload/UploadService.java b/app/src/main/java/fr/free/nrw/commons/upload/UploadService.java index 567eb809c..dea134ac3 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/UploadService.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/UploadService.java @@ -10,7 +10,6 @@ import android.content.Intent; import android.graphics.BitmapFactory; import android.os.Bundle; import android.support.v4.app.NotificationCompat; -import android.util.Log; import android.webkit.MimeTypeMap; import android.widget.Toast; @@ -36,6 +35,7 @@ import fr.free.nrw.commons.contributions.ContributionsActivity; import fr.free.nrw.commons.contributions.ContributionsContentProvider; import fr.free.nrw.commons.modifications.ModificationsContentProvider; import in.yuvi.http.fluent.ProgressListener; +import timber.log.Timber; public class UploadService extends HandlerService { @@ -87,7 +87,7 @@ public class UploadService extends HandlerService { @Override public void onProgress(long transferred, long total) { - Log.d("Commons", String.format("Uploaded %d of %d", transferred, total)); + Timber.d("Uploaded %d of %d", transferred, total); if(!notificationTitleChanged) { curProgressNotification.setContentTitle(notificationProgressTitle); notificationTitleChanged = true; @@ -112,7 +112,7 @@ public class UploadService extends HandlerService { public void onDestroy() { super.onDestroy(); contributionsProviderClient.release(); - Log.d("Commons", "UploadService.onDestroy; " + unfinishedUploads + " are yet to be uploaded"); + Timber.d("UploadService.onDestroy; %s are yet to be uploaded", unfinishedUploads); } @Override @@ -149,7 +149,7 @@ public class UploadService extends HandlerService { toUpload++; if (curProgressNotification != null && toUpload != 1) { curProgressNotification.setContentText(getResources().getQuantityString(R.plurals.uploads_pending_notification_indicator, toUpload, toUpload)); - Log.d("Commons", String.format("%d uploads left", toUpload)); + Timber.d("%d uploads left", toUpload); this.startForeground(NOTIFICATION_UPLOAD_IN_PROGRESS, curProgressNotification.build()); } @@ -173,8 +173,8 @@ public class UploadService extends HandlerService { Contribution.Table.COLUMN_STATE + " = ? OR " + Contribution.Table.COLUMN_STATE + " = ?", new String[]{ String.valueOf(Contribution.STATE_QUEUED), String.valueOf(Contribution.STATE_IN_PROGRESS) } ); - Log.d("Commons", "Set " + updated + " uploads to failed"); - Log.d("Commons", "Flags is" + flags + " id is" + startId); + Timber.d("Set %d uploads to failed", updated); + Timber.d("Flags is %d id is %d", flags, startId); freshStart = false; } return START_REDELIVER_INTENT; @@ -192,12 +192,12 @@ public class UploadService extends HandlerService { //FIXME: Google Photos bug file = this.getContentResolver().openInputStream(contribution.getLocalUri()); } catch(FileNotFoundException e) { - Log.d("Exception", "File not found"); + Timber.d("File not found"); Toast fileNotFound = Toast.makeText(this, R.string.upload_failed, Toast.LENGTH_LONG); fileNotFound.show(); } - Log.d("Commons", "Before execution!"); + Timber.d("Before execution!"); curProgressNotification = new NotificationCompat.Builder(this).setAutoCancel(true) .setSmallIcon(R.drawable.ic_launcher) .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher)) @@ -218,16 +218,16 @@ public class UploadService extends HandlerService { MimeTypeMap.getSingleton().getExtensionFromMimeType((String)contribution.getTag("mimeType"))); synchronized (unfinishedUploads) { - Log.d("Commons", "making sure of uniqueness of name: " + filename); + Timber.d("making sure of uniqueness of name: %s", filename); filename = findUniqueFilename(filename); unfinishedUploads.add(filename); } if(!api.validateLogin()) { // Need to revalidate! if(app.revalidateAuthToken()) { - Log.d("Commons", "Successfully revalidated token!"); + Timber.d("Successfully revalidated token!"); } else { - Log.d("Commons", "Unable to revalidate :("); + Timber.d("Unable to revalidate :("); // TODO: Put up a new notification, ask them to re-login stopForeground(true); Toast failureToast = Toast.makeText(this, R.string.authentication_failed, Toast.LENGTH_LONG); @@ -242,7 +242,7 @@ public class UploadService extends HandlerService { ); result = api.upload(filename, file, contribution.getDataLength(), contribution.getPageContents(), contribution.getEditSummary(), notificationUpdater); - Log.d("Commons", "Response is" + Utils.getStringFromDOM(result.getDocument())); + Timber.d("Response is %s", Utils.getStringFromDOM(result.getDocument())); curProgressNotification = null; @@ -277,7 +277,7 @@ public class UploadService extends HandlerService { .log(); } } catch(IOException e) { - Log.d("Commons", "I have a network fuckup"); + Timber.d("I have a network fuckup"); showFailedNotification(contribution); return; } finally {