From 5b1973900739296bd10c13947cd3f9e988bf3f19 Mon Sep 17 00:00:00 2001 From: Mariotaku Lee Date: Thu, 26 Jan 2017 23:15:05 +0800 Subject: [PATCH] code cleanup --- .../sync/google/GoogleDriveSyncTaskRunner.kt | 5 +- .../tsinghua/hotmobi/util/LocationUtils.java | 7 +- .../twidere/model/DefaultFeatures.java | 20 ++++- .../preference/TrendsLocationPreference.java | 7 +- .../twidere/provider/TwidereDataProvider.java | 5 +- .../receiver/ConnectivityStateReceiver.java | 73 ------------------- .../twidere/util/AsyncTwitterWrapper.java | 14 +--- .../twidere/util/TwitterWrapper.java | 23 ++---- .../org/mariotaku/twidere/util/Utils.java | 13 +++- .../twidere/util/net/TwidereDns.java | 24 ++---- .../twidere/activity/BrowserSignInActivity.kt | 6 +- .../twidere/activity/ComposeActivity.kt | 20 ++--- .../activity/PremiumDashboardActivity.kt | 44 +++++------ .../twidere/activity/SignInActivity.kt | 5 +- .../twidere/app/TwidereApplication.kt | 9 +-- .../twidere/constant/PreferenceKeys.kt | 5 +- .../fragment/APIEditorDialogFragment.kt | 5 +- .../twidere/fragment/AbsActivitiesFragment.kt | 7 +- .../twidere/fragment/AbsStatusesFragment.kt | 4 +- .../loader/MicroBlogAPIStatusesLoader.kt | 4 +- .../receiver/ConnectivityStateReceiver.kt | 72 ++++++++++++++++++ .../twidere/service/StreamingService.kt | 13 +--- .../twidere/task/GetDirectMessagesTask.kt | 6 +- .../twidere/task/GetSavedSearchesTask.kt | 5 +- .../twidere/task/twitter/GetActivitiesTask.kt | 6 +- .../twidere/task/twitter/GetStatusesTask.kt | 6 +- .../twidere/task/twitter/UpdateStatusTask.kt | 7 +- .../twidere/util/DataStoreFunctions.kt | 7 +- .../org/mariotaku/twidere/util/DebugLog.kt | 12 +++ .../util/sync/FileBasedDraftsSyncAction.kt | 41 ++++------- .../sync/SingleFileBasedDataSyncAction.kt | 17 ++--- .../layout/fragment_content_recyclerview.xml | 1 + 32 files changed, 209 insertions(+), 284 deletions(-) delete mode 100644 twidere/src/main/java/org/mariotaku/twidere/receiver/ConnectivityStateReceiver.java create mode 100644 twidere/src/main/kotlin/org/mariotaku/twidere/receiver/ConnectivityStateReceiver.kt diff --git a/twidere/src/google/kotlin/org/mariotaku/twidere/util/sync/google/GoogleDriveSyncTaskRunner.kt b/twidere/src/google/kotlin/org/mariotaku/twidere/util/sync/google/GoogleDriveSyncTaskRunner.kt index 4e4a43cb9..25c3f230e 100644 --- a/twidere/src/google/kotlin/org/mariotaku/twidere/util/sync/google/GoogleDriveSyncTaskRunner.kt +++ b/twidere/src/google/kotlin/org/mariotaku/twidere/util/sync/google/GoogleDriveSyncTaskRunner.kt @@ -11,6 +11,7 @@ import nl.komponents.kovenant.ui.failUi import nl.komponents.kovenant.ui.successUi import org.mariotaku.twidere.BuildConfig import org.mariotaku.twidere.model.sync.GoogleDriveSyncProviderInfo +import org.mariotaku.twidere.util.DebugLog import org.mariotaku.twidere.util.TaskServiceRunner import org.mariotaku.twidere.util.sync.* import java.io.IOException @@ -47,9 +48,7 @@ class GoogleDriveSyncTaskRunner(context: Context, val refreshToken: String) : Sy }.successUi { callback(true) }.failUi { - if (BuildConfig.DEBUG) { - Log.w(LOGTAG_SYNC, "Sync $action failed", it) - } + DebugLog.w(LOGTAG_SYNC, "Sync $action failed", it) callback(false) } return true diff --git a/twidere/src/main/java/edu/tsinghua/hotmobi/util/LocationUtils.java b/twidere/src/main/java/edu/tsinghua/hotmobi/util/LocationUtils.java index e3c7f7775..f3172de66 100644 --- a/twidere/src/main/java/edu/tsinghua/hotmobi/util/LocationUtils.java +++ b/twidere/src/main/java/edu/tsinghua/hotmobi/util/LocationUtils.java @@ -5,10 +5,9 @@ import android.content.SharedPreferences; import android.location.Location; import android.os.AsyncTask; import android.support.annotation.NonNull; -import android.util.Log; -import org.mariotaku.twidere.BuildConfig; import org.mariotaku.twidere.Constants; +import org.mariotaku.twidere.util.DebugLog; import org.mariotaku.twidere.util.JsonSerializer; import org.mariotaku.twidere.util.Utils; import org.mariotaku.twidere.util.dagger.DependencyHolder; @@ -28,9 +27,7 @@ public class LocationUtils implements HotMobiConstants, Constants { final Context appContext = context.getApplicationContext(); final SharedPreferences prefs = DependencyHolder.Companion.get(context).getPreferences(); if (!prefs.getBoolean(KEY_USAGE_STATISTICS, false)) return null; - if (BuildConfig.DEBUG) { - Log.d(HotMobiLogger.LOGTAG, "getting cached location"); - } + DebugLog.d(HotMobiLogger.LOGTAG, "getting cached location", null); final Location location = Utils.getCachedLocation(appContext); if (location == null) { return JsonSerializer.parse(prefs.getString(KEY_FALLBACK_CACHED_LOCATION, null), LatLng.class); diff --git a/twidere/src/main/java/org/mariotaku/twidere/model/DefaultFeatures.java b/twidere/src/main/java/org/mariotaku/twidere/model/DefaultFeatures.java index bf5b7efe7..dcd5b9c88 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/model/DefaultFeatures.java +++ b/twidere/src/main/java/org/mariotaku/twidere/model/DefaultFeatures.java @@ -25,16 +25,30 @@ import static org.mariotaku.twidere.constant.SharedPreferenceConstants.KEY_MEDIA @JsonObject public class DefaultFeatures { - private final static String REMOTE_SETTINGS_URL = "https://raw.githubusercontent.com/TwidereProject/Twidere-Android/master/twidere/src/main/assets/data/default_features.json"; + private final static String REMOTE_SETTINGS_URL = "https://twidere.mariotaku.org/assets/data/default_features.json"; + private static final String KEY_DEFAULT_TWITTER_CONSUMER_KEY = "default_twitter_consumer_key"; + private static final String KEY_DEFAULT_TWITTER_CONSUMER_SECRET = "default_twitter_consumer_secret"; @JsonField(name = "media_link_counts_in_status") boolean mediaLinkCountsInStatus = false; + @JsonField(name = "default_twitter_consumer_key") + String defaultTwitterConsumerKey; + @JsonField(name = "default_twitter_consumer_secret") + String defaultTwitterConsumerSecret; public boolean isMediaLinkCountsInStatus() { return mediaLinkCountsInStatus; } + public String getDefaultTwitterConsumerKey() { + return defaultTwitterConsumerKey; + } + + public String getDefaultTwitterConsumerSecret() { + return defaultTwitterConsumerSecret; + } + @WorkerThread public boolean loadRemoteSettings(RestHttpClient client) throws IOException { HttpRequest request = new HttpRequest.Builder().method(GET.METHOD).url(REMOTE_SETTINGS_URL).build(); @@ -65,11 +79,15 @@ public class DefaultFeatures { public void load(SharedPreferences preferences) { mediaLinkCountsInStatus = preferences.getBoolean(KEY_MEDIA_LINK_COUNTS_IN_STATUS, mediaLinkCountsInStatus); + defaultTwitterConsumerKey = preferences.getString(KEY_DEFAULT_TWITTER_CONSUMER_KEY, null); + defaultTwitterConsumerSecret = preferences.getString(KEY_DEFAULT_TWITTER_CONSUMER_SECRET, null); } public void save(SharedPreferences preferences) { final SharedPreferences.Editor editor = preferences.edit(); editor.putBoolean(KEY_MEDIA_LINK_COUNTS_IN_STATUS, mediaLinkCountsInStatus); + editor.putString(KEY_DEFAULT_TWITTER_CONSUMER_KEY, defaultTwitterConsumerKey); + editor.putString(KEY_DEFAULT_TWITTER_CONSUMER_SECRET, defaultTwitterConsumerSecret); editor.apply(); } } diff --git a/twidere/src/main/java/org/mariotaku/twidere/preference/TrendsLocationPreference.java b/twidere/src/main/java/org/mariotaku/twidere/preference/TrendsLocationPreference.java index f40ee37c0..0eb0c49bd 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/preference/TrendsLocationPreference.java +++ b/twidere/src/main/java/org/mariotaku/twidere/preference/TrendsLocationPreference.java @@ -31,7 +31,6 @@ import android.support.v4.util.SimpleArrayMap; import android.support.v7.app.AlertDialog; import android.support.v7.preference.Preference; import android.util.AttributeSet; -import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -42,8 +41,8 @@ import android.widget.TextView; import org.mariotaku.microblog.library.MicroBlog; import org.mariotaku.microblog.library.MicroBlogException; import org.mariotaku.microblog.library.twitter.model.Location; -import org.mariotaku.twidere.BuildConfig; import org.mariotaku.twidere.R; +import org.mariotaku.twidere.util.DebugLog; import org.mariotaku.twidere.util.MicroBlogAPIFactory; import java.text.Collator; @@ -279,9 +278,7 @@ public class TrendsLocationPreference extends Preference { } return map.pack(); } catch (final MicroBlogException e) { - if (BuildConfig.DEBUG) { - Log.w(LOGTAG, e); - } + DebugLog.w(LOGTAG, null, e); } return null; } diff --git a/twidere/src/main/java/org/mariotaku/twidere/provider/TwidereDataProvider.java b/twidere/src/main/java/org/mariotaku/twidere/provider/TwidereDataProvider.java index 1d67c5acc..9556525cf 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/provider/TwidereDataProvider.java +++ b/twidere/src/main/java/org/mariotaku/twidere/provider/TwidereDataProvider.java @@ -119,6 +119,7 @@ import org.mariotaku.twidere.util.ActivityTracker; import org.mariotaku.twidere.util.AsyncTwitterWrapper; import org.mariotaku.twidere.util.DataStoreFunctionsKt; import org.mariotaku.twidere.util.DataStoreUtils; +import org.mariotaku.twidere.util.DebugLog; import org.mariotaku.twidere.util.ImagePreloader; import org.mariotaku.twidere.util.InternalTwitterContentUtils; import org.mariotaku.twidere.util.JsonSerializer; @@ -1117,9 +1118,7 @@ public final class TwidereDataProvider extends ContentProvider implements Consta c.addRow(new String[]{host, address.getHostAddress()}); } } catch (final IOException ignore) { - if (BuildConfig.DEBUG) { - Log.w(LOGTAG, ignore); - } + DebugLog.w(LOGTAG, null, ignore); } return c; } diff --git a/twidere/src/main/java/org/mariotaku/twidere/receiver/ConnectivityStateReceiver.java b/twidere/src/main/java/org/mariotaku/twidere/receiver/ConnectivityStateReceiver.java deleted file mode 100644 index 87e481779..000000000 --- a/twidere/src/main/java/org/mariotaku/twidere/receiver/ConnectivityStateReceiver.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Twidere - Twitter client for Android - * - * Copyright (C) 2012-2014 Mariotaku Lee - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package org.mariotaku.twidere.receiver; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.SharedPreferences; -import android.net.ConnectivityManager; -import android.support.v4.net.ConnectivityManagerCompat; -import android.util.Log; - -import org.mariotaku.twidere.BuildConfig; -import org.mariotaku.twidere.Constants; -import org.mariotaku.twidere.app.TwidereApplication; -import org.mariotaku.twidere.util.Utils; - -import edu.tsinghua.hotmobi.HotMobiLogger; -import edu.tsinghua.hotmobi.UploadLogsService; -import edu.tsinghua.hotmobi.model.NetworkEvent; - -public class ConnectivityStateReceiver extends BroadcastReceiver implements Constants { - - private static final String RECEIVER_LOGTAG = LOGTAG + "." + "Connectivity"; - - @Override - public void onReceive(final Context context, final Intent intent) { - if (BuildConfig.DEBUG) { - Log.d(RECEIVER_LOGTAG, String.format("Received Broadcast %s", intent)); - } - if (!ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction())) return; - final TwidereApplication application = TwidereApplication.Companion.getInstance(context); -// application.reloadConnectivitySettings(); - final SharedPreferences prefs = context.getSharedPreferences(SHARED_PREFERENCES_NAME, - Context.MODE_PRIVATE); - if (prefs.getBoolean(KEY_USAGE_STATISTICS, false) && prefs.getBoolean(KEY_SETTINGS_WIZARD_COMPLETED, false)) { - // BEGIN HotMobi - final NetworkEvent event = NetworkEvent.create(context); - HotMobiLogger.getInstance(context).log(event); - // END HotMobi - } - - final Context appContext = context.getApplicationContext(); - final ConnectivityManager cm = (ConnectivityManager) appContext.getSystemService(Context.CONNECTIVITY_SERVICE); - final boolean isNetworkMetered = ConnectivityManagerCompat.isActiveNetworkMetered(cm); - final boolean isCharging = Utils.isCharging(appContext); - if (!isNetworkMetered && isCharging) { - final long currentTime = System.currentTimeMillis(); - final long lastSuccessfulTime = HotMobiLogger.getLastUploadTime(appContext); - if ((currentTime - lastSuccessfulTime) > HotMobiLogger.UPLOAD_INTERVAL_MILLIS) { - appContext.startService(new Intent(appContext, UploadLogsService.class)); - } - } - - } -} diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/AsyncTwitterWrapper.java b/twidere/src/main/java/org/mariotaku/twidere/util/AsyncTwitterWrapper.java index 6bc6da4e6..f8b1c30c9 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/util/AsyncTwitterWrapper.java +++ b/twidere/src/main/java/org/mariotaku/twidere/util/AsyncTwitterWrapper.java @@ -305,7 +305,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper { } public int destroyStatusAsync(final UserKey accountKey, final String statusId) { - final DestroyStatusTask task = new DestroyStatusTask(context,accountKey, statusId); + final DestroyStatusTask task = new DestroyStatusTask(context, accountKey, statusId); return asyncTaskManager.add(task, true); } @@ -536,9 +536,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper { if (result.hasData()) { handler.post(new FriendshipUpdatedEvent(accountKey, userKey, result.getData())); } else if (result.hasException()) { - if (BuildConfig.DEBUG) { - Log.w(LOGTAG, "Unable to update friendship", result.getException()); - } + DebugLog.w(LOGTAG, "Unable to update friendship", result.getException()); } } }.setCallback(bus)); @@ -561,9 +559,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper { try { microBlog.setActivitiesAboutMeUnread(cursor); } catch (MicroBlogException e) { - if (BuildConfig.DEBUG) { - Log.w(LOGTAG, e); - } + DebugLog.w(LOGTAG, null, e); } } return null; @@ -685,9 +681,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper { }); return SingleResponse.Companion.getInstance(result); } catch (final MicroBlogException e) { - if (BuildConfig.DEBUG) { - Log.w(LOGTAG, e); - } + DebugLog.w(LOGTAG, null, e); return SingleResponse.Companion.getInstance(e); } } diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/TwitterWrapper.java b/twidere/src/main/java/org/mariotaku/twidere/util/TwitterWrapper.java index 9b7dfb33d..e311b4a50 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/util/TwitterWrapper.java +++ b/twidere/src/main/java/org/mariotaku/twidere/util/TwitterWrapper.java @@ -25,7 +25,6 @@ import android.net.Uri; import android.support.annotation.NonNull; import android.support.v4.util.SimpleArrayMap; import android.text.TextUtils; -import android.util.Log; import android.webkit.MimeTypeMap; import org.mariotaku.microblog.library.MicroBlog; @@ -45,7 +44,6 @@ import org.mariotaku.twidere.model.UserKey; import org.mariotaku.twidere.provider.TwidereDataStore.Notifications; import org.mariotaku.twidere.provider.TwidereDataStore.UnreadCounts; -import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; @@ -187,11 +185,8 @@ public class TwitterWrapper implements Constants { twitter.updateProfileBannerImage(fileBody); } finally { Utils.closeSilently(fileBody); - if (deleteImage && "file".equals(imageUri.getScheme())) { - final File file = new File(imageUri.getPath()); - if (!file.delete()) { - Log.w(LOGTAG, String.format("Unable to delete %s", file)); - } + if (deleteImage) { + Utils.deleteMedia(context, imageUri); } } } @@ -208,11 +203,8 @@ public class TwitterWrapper implements Constants { twitter.updateProfileBackgroundImage(fileBody, tile); } finally { Utils.closeSilently(fileBody); - if (deleteImage && "file".equals(imageUri.getScheme())) { - final File file = new File(imageUri.getPath()); - if (!file.delete()) { - Log.w(LOGTAG, String.format("Unable to delete %s", file)); - } + if (deleteImage) { + Utils.deleteMedia(context, imageUri); } } } @@ -226,11 +218,8 @@ public class TwitterWrapper implements Constants { return twitter.updateProfileImage(fileBody); } finally { Utils.closeSilently(fileBody); - if (deleteImage && "file".equals(imageUri.getScheme())) { - final File file = new File(imageUri.getPath()); - if (!file.delete()) { - Log.w(LOGTAG, String.format("Unable to delete %s", file)); - } + if (deleteImage) { + Utils.deleteMedia(context, imageUri); } } } diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/Utils.java b/twidere/src/main/java/org/mariotaku/twidere/util/Utils.java index a2594706c..14f8f4c88 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/util/Utils.java +++ b/twidere/src/main/java/org/mariotaku/twidere/util/Utils.java @@ -92,6 +92,7 @@ import org.mariotaku.microblog.library.MicroBlog; import org.mariotaku.microblog.library.MicroBlogException; import org.mariotaku.microblog.library.twitter.model.RateLimitStatus; import org.mariotaku.microblog.library.twitter.model.Status; +import org.mariotaku.pickncrop.library.PNCUtils; import org.mariotaku.sqliteqb.library.AllColumns; import org.mariotaku.sqliteqb.library.Columns; import org.mariotaku.sqliteqb.library.Columns.Column; @@ -287,6 +288,14 @@ public final class Utils implements Constants { return colors; } + public static boolean deleteMedia(final Context context, final Uri uri) { + try { + return PNCUtils.deleteMedia(context, uri); + } catch (SecurityException e) { + return false; + } + } + public static class NoAccountException extends Exception { String accountHost; @@ -1328,9 +1337,7 @@ public final class Utils implements Constants { @Nullable public static Location getCachedLocation(Context context) { - if (BuildConfig.DEBUG) { - Log.v(LOGTAG, "Fetching cached location", new Exception()); - } + DebugLog.v(LOGTAG, "Fetching cached location", new Exception()); Location location = null; final LocationManager lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); if (lm == null) return null; diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/net/TwidereDns.java b/twidere/src/main/java/org/mariotaku/twidere/util/net/TwidereDns.java index 7021218db..9a839b7ba 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/util/net/TwidereDns.java +++ b/twidere/src/main/java/org/mariotaku/twidere/util/net/TwidereDns.java @@ -109,10 +109,8 @@ public class TwidereDns implements Dns, Constants { // Return if host is an address final List fromAddressString = fromAddressString(originalHost, host); if (fromAddressString != null) { - if (BuildConfig.DEBUG) { - addLogSplit(logger, host, "valid ip address", depth); - dumpLog(logger, fromAddressString); - } + addLogSplit(logger, host, "valid ip address", depth); + dumpLog(logger, fromAddressString); return fromAddressString; } // Load from custom mapping @@ -120,9 +118,7 @@ public class TwidereDns implements Dns, Constants { final List fromMapping = getFromMapping(host); addLogSplit(logger, host, "end custom mapping resolve", depth); if (fromMapping != null) { - if (BuildConfig.DEBUG) { - dumpLog(logger, fromMapping); - } + dumpLog(logger, fromMapping); return fromMapping; } if (useResolver) { @@ -131,9 +127,7 @@ public class TwidereDns implements Dns, Constants { final List fromSystemHosts = fromSystemHosts(host); addLogSplit(logger, host, "end /etc/hosts resolve", depth); if (fromSystemHosts != null) { - if (BuildConfig.DEBUG) { - dumpLog(logger, fromSystemHosts); - } + dumpLog(logger, fromSystemHosts); return fromSystemHosts; } @@ -142,28 +136,26 @@ public class TwidereDns implements Dns, Constants { final List fromResolver = fromResolver(originalHost, host); addLogSplit(logger, host, "end resolver resolve", depth); if (fromResolver != null) { - if (BuildConfig.DEBUG) { - dumpLog(logger, fromResolver); - } + dumpLog(logger, fromResolver); return fromResolver; } } addLogSplit(logger, host, "start system default resolve", depth); final List fromDefault = Arrays.asList(InetAddress.getAllByName(host)); addLogSplit(logger, host, "end system default resolve", depth); - if (BuildConfig.DEBUG) { - dumpLog(logger, fromDefault); - } + dumpLog(logger, fromDefault); return fromDefault; } private void dumpLog(final TimingLogger logger, @NonNull List addresses) { + if (BuildConfig.DEBUG) return; Log.v(RESOLVER_LOGTAG, "Resolved " + addresses); logger.dumpToLog(); } private void addLogSplit(final TimingLogger logger, String host, String message, int depth) { + if (BuildConfig.DEBUG) return; final StringBuilder sb = new StringBuilder(); for (int i = 0; i < depth; i++) { sb.append(">"); diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/activity/BrowserSignInActivity.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/activity/BrowserSignInActivity.kt index 7133782a6..e16185d69 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/activity/BrowserSignInActivity.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/activity/BrowserSignInActivity.kt @@ -41,7 +41,6 @@ import org.mariotaku.microblog.library.MicroBlogException import org.mariotaku.microblog.library.twitter.TwitterOAuth import org.mariotaku.restfu.oauth.OAuthAuthorization import org.mariotaku.restfu.oauth.OAuthToken -import org.mariotaku.twidere.BuildConfig import org.mariotaku.twidere.R import org.mariotaku.twidere.TwidereConstants import org.mariotaku.twidere.TwidereConstants.LOGTAG @@ -50,6 +49,7 @@ import org.mariotaku.twidere.extension.model.newMicroBlogInstance import org.mariotaku.twidere.model.CustomAPIConfig import org.mariotaku.twidere.model.SingleResponse import org.mariotaku.twidere.util.AsyncTaskUtils +import org.mariotaku.twidere.util.DebugLog import org.mariotaku.twidere.util.MicroBlogAPIFactory import org.mariotaku.twidere.util.OAuthPasswordAuthenticator import org.mariotaku.twidere.util.webkit.DefaultWebViewClient @@ -219,9 +219,7 @@ class BrowserSignInActivity : BaseActivity() { val endpoint = MicroBlogAPIFactory.getOAuthSignInEndpoint(apiConfig.apiUrlFormat, true) activity.loadUrl(endpoint.construct("/oauth/authorize", arrayOf("oauth_token", token.oauthToken))) } else { - if (BuildConfig.DEBUG && result.hasException()) { - Log.w(LOGTAG, "Exception while browser sign in", result.exception) - } + DebugLog.w(LOGTAG, "Error while browser sign in", result.exception) if (!activity.isFinishing) { Toast.makeText(activity, R.string.message_toast_error_occurred, Toast.LENGTH_SHORT).show() activity.finish() diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/activity/ComposeActivity.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/activity/ComposeActivity.kt index d8edd38ee..41892e5a2 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/activity/ComposeActivity.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/activity/ComposeActivity.kt @@ -68,8 +68,6 @@ import org.mariotaku.ktextension.checkAnySelfPermissionsGranted import org.mariotaku.ktextension.setItemChecked import org.mariotaku.ktextension.toTypedArray import org.mariotaku.pickncrop.library.MediaPickerActivity -import org.mariotaku.pickncrop.library.PNCUtils -import org.mariotaku.twidere.BuildConfig import org.mariotaku.twidere.Constants.* import org.mariotaku.twidere.R import org.mariotaku.twidere.TwidereConstants @@ -1536,17 +1534,11 @@ class ComposeActivity : BaseActivity(), OnMenuItemClickListener, OnClickListener if (st == null || os == null) throw FileNotFoundException() StreamUtils.copy(st, os, null, null) if (deleteSrc) { - try { - PNCUtils.deleteMedia(activity, source) - } catch (e: SecurityException) { - Log.w(LOGTAG, e) - } + Utils.deleteMedia(activity, source) } return@mapIndexedNotNull ParcelableMediaUpdate(destination.toString(), mediaType) } catch (e: IOException) { - if (BuildConfig.DEBUG) { - Log.w(LOGTAG, e) - } + DebugLog.w(LOGTAG, tr = e) return@mapIndexedNotNull null } finally { Utils.closeSilently(os) @@ -1623,11 +1615,9 @@ class ComposeActivity : BaseActivity(), OnMenuItemClickListener, OnClickListener } override fun doInBackground(vararg params: Any) { - media.map { Uri.parse(it.uri) }.filter { ContentResolver.SCHEME_FILE == it.scheme }.forEach { uri -> - val file = File(uri.path) - if (!file.delete()) { - Log.d(LOGTAG, String.format("Unable to delete %s", file)) - } + val activity = activityRef.get() ?: return + media.map { Uri.parse(it.uri) }.forEach { uri -> + Utils.deleteMedia(activity, uri) } } diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/activity/PremiumDashboardActivity.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/activity/PremiumDashboardActivity.kt index 445e93cae..2e12ede65 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/activity/PremiumDashboardActivity.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/activity/PremiumDashboardActivity.kt @@ -14,7 +14,6 @@ import nl.komponents.kovenant.ui.successUi import org.mariotaku.twidere.BuildConfig import org.mariotaku.twidere.R import org.mariotaku.twidere.fragment.ProgressDialogFragment -import org.mariotaku.twidere.util.premium.ExtraFeaturesService import java.lang.ref.WeakReference import java.util.concurrent.atomic.AtomicBoolean @@ -46,27 +45,28 @@ class PremiumDashboardActivity : BaseActivity() { when (item.itemId) { R.id.consume_purchase -> { if (BuildConfig.DEBUG) { - val dfRef = WeakReference(ProgressDialogFragment.show(supportFragmentManager, "consume_purchase_progress")) - val weakThis = WeakReference(this) - val recreate = AtomicBoolean() - task { - val activity = weakThis.get() ?: throw IllegalStateException() - if (!activity.extraFeaturesService.destroyPurchase()) { - throw IllegalStateException() - } - }.successUi { - recreate.set(true) - }.failUi { - val activity = weakThis.get() ?: return@failUi - Toast.makeText(activity, R.string.message_unable_to_consume_purchase, Toast.LENGTH_SHORT).show() - }.alwaysUi { - weakThis.get()?.executeAfterFragmentResumed { - val fm = weakThis.get()?.supportFragmentManager - val df = dfRef.get() ?: (fm?.findFragmentByTag("consume_purchase_progress") as? DialogFragment) - df?.dismiss() - if (recreate.get()) { - weakThis.get()?.recreate() - } + return true + } + val dfRef = WeakReference(ProgressDialogFragment.show(supportFragmentManager, "consume_purchase_progress")) + val weakThis = WeakReference(this) + val recreate = AtomicBoolean() + task { + val activity = weakThis.get() ?: throw IllegalStateException() + if (!activity.extraFeaturesService.destroyPurchase()) { + throw IllegalStateException() + } + }.successUi { + recreate.set(true) + }.failUi { + val activity = weakThis.get() ?: return@failUi + Toast.makeText(activity, R.string.message_unable_to_consume_purchase, Toast.LENGTH_SHORT).show() + }.alwaysUi { + weakThis.get()?.executeAfterFragmentResumed { + val fm = weakThis.get()?.supportFragmentManager + val df = dfRef.get() ?: (fm?.findFragmentByTag("consume_purchase_progress") as? DialogFragment) + df?.dismiss() + if (recreate.get()) { + weakThis.get()?.recreate() } } } diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/activity/SignInActivity.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/activity/SignInActivity.kt index a5996f6a9..0d43c7d4b 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/activity/SignInActivity.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/activity/SignInActivity.kt @@ -42,7 +42,6 @@ import android.text.Editable import android.text.InputType import android.text.TextUtils import android.text.TextWatcher -import android.util.Log import android.view.Menu import android.view.MenuItem import android.view.View @@ -367,9 +366,7 @@ class SignInActivity : BaseActivity(), OnClickListener, TextWatcher, APIEditorDi } internal fun onSignInError(exception: Exception) { - if (BuildConfig.DEBUG) { - Log.w(LOGTAG, exception) - } + DebugLog.w(LOGTAG, "Sign in error", exception) var errorReason: String? = null if (exception is AuthenticityTokenException) { Toast.makeText(this, R.string.message_toast_wrong_api_key, Toast.LENGTH_SHORT).show() diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/app/TwidereApplication.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/app/TwidereApplication.kt index d09e0abf7..1be656b47 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/app/TwidereApplication.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/app/TwidereApplication.kt @@ -27,7 +27,6 @@ import android.database.sqlite.SQLiteDatabase import android.database.sqlite.SQLiteOpenHelper import android.os.AsyncTask import android.support.multidex.MultiDex -import android.util.Log import nl.komponents.kovenant.android.startKovenant import nl.komponents.kovenant.android.stopKovenant import nl.komponents.kovenant.task @@ -130,13 +129,9 @@ class TwidereApplication : Application(), Constants, OnSharedPreferenceChangeLis defaultFeatures.loadRemoteSettings(restHttpClient) }.success { defaultFeatures.save(sharedPreferences) - if (BuildConfig.DEBUG) { - Log.d(LOGTAG, "Loaded remote features") - } + DebugLog.d(LOGTAG, "Loaded remote features") }.fail { - if (BuildConfig.DEBUG) { - Log.w(LOGTAG, "Unable to load remote features", it) - } + DebugLog.w(LOGTAG, "Unable to load remote features", it) }.always { kPreferences[defaultFeatureLastUpdated] = System.currentTimeMillis() } diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/constant/PreferenceKeys.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/constant/PreferenceKeys.kt index e5c35baa0..45338624e 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/constant/PreferenceKeys.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/constant/PreferenceKeys.kt @@ -6,9 +6,7 @@ import android.text.TextUtils import org.mariotaku.kpreferences.* import org.mariotaku.ktextension.toLong import org.mariotaku.twidere.BuildConfig -import org.mariotaku.twidere.Constants.KEY_DISPLAY_PROFILE_IMAGE -import org.mariotaku.twidere.Constants.KEY_NO_CLOSE_AFTER_TWEET_SENT -import org.mariotaku.twidere.TwidereConstants.* +import org.mariotaku.twidere.Constants.* import org.mariotaku.twidere.annotation.AccountType import org.mariotaku.twidere.constant.SharedPreferenceConstants.KEY_COMPOSE_ACCOUNTS import org.mariotaku.twidere.constant.SharedPreferenceConstants.KEY_DISPLAY_SENSITIVE_CONTENTS @@ -59,6 +57,7 @@ val themeColorKey = KIntKey(KEY_THEME_COLOR, 0) val filterUnavailableQuoteStatusesKey = KBooleanKey("filter_unavailable_quote_statuses", false) val filterPossibilitySensitiveStatusesKey = KBooleanKey("filter_possibility_sensitive_statuses", false) val chromeCustomTabKey = KBooleanKey("chrome_custom_tab", true) +val usageStatisticsKey = KBooleanKey(KEY_USAGE_STATISTICS, false) object themeBackgroundAlphaKey : KSimpleKey(KEY_THEME_BACKGROUND_ALPHA, 0xFF) { override fun read(preferences: SharedPreferences): Int { diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/APIEditorDialogFragment.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/APIEditorDialogFragment.kt index c3361f17a..c031fb7cf 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/APIEditorDialogFragment.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/APIEditorDialogFragment.kt @@ -15,7 +15,6 @@ import com.bluelinelabs.logansquare.LoganSquare import org.mariotaku.restfu.annotation.method.GET import org.mariotaku.restfu.http.HttpRequest import org.mariotaku.restfu.http.RestHttpClient -import org.mariotaku.twidere.BuildConfig import org.mariotaku.twidere.R import org.mariotaku.twidere.adapter.ArrayAdapter import org.mariotaku.twidere.adapter.BaseArrayAdapter @@ -148,9 +147,7 @@ class APIEditorDialogFragment : BaseDialogFragment() { adapter = CustomAPIConfigArrayAdapter(context, configs) val builder = AlertDialog.Builder(context) builder.setAdapter(adapter, this) - if (!BuildConfig.DEBUG) { - loaderManager.initLoader(0, null, this) - } + loaderManager.initLoader(0, null, this) return builder.create() } diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/AbsActivitiesFragment.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/AbsActivitiesFragment.kt index ba7008834..3d5e7843c 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/AbsActivitiesFragment.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/AbsActivitiesFragment.kt @@ -30,7 +30,6 @@ import android.support.v4.content.Loader import android.support.v7.widget.LinearLayoutManager import android.support.v7.widget.RecyclerView import android.support.v7.widget.RecyclerView.OnScrollListener -import android.util.Log import android.view.* import com.squareup.otto.Subscribe import edu.tsinghua.hotmobi.HotMobiLogger @@ -39,8 +38,6 @@ import kotlinx.android.synthetic.main.fragment_content_recyclerview.* import org.mariotaku.kpreferences.get import org.mariotaku.ktextension.isNullOrEmpty import org.mariotaku.ktextension.rangeOfSize -import org.mariotaku.twidere.BuildConfig -import org.mariotaku.twidere.Constants.KEY_NEW_DOCUMENT_API import org.mariotaku.twidere.R import org.mariotaku.twidere.TwidereConstants import org.mariotaku.twidere.adapter.ParcelableActivitiesAdapter @@ -286,9 +283,7 @@ abstract class AbsActivitiesFragment protected constructor() : override fun onGapClick(holder: GapViewHolder, position: Int) { val activity = adapter.getActivity(position) ?: return - if (BuildConfig.DEBUG) { - Log.v(TwidereConstants.LOGTAG, "Load activity gap $activity") - } + DebugLog.v(TwidereConstants.LOGTAG, "Load activity gap $activity") val accountIds = arrayOf(activity.account_key) val maxIds = arrayOf(activity.min_position) val maxSortIds = longArrayOf(activity.min_sort_position) diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/AbsStatusesFragment.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/AbsStatusesFragment.kt index ce02e6c84..d7e76be71 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/AbsStatusesFragment.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/AbsStatusesFragment.kt @@ -344,9 +344,7 @@ abstract class AbsStatusesFragment protected constructor() : override fun onGapClick(holder: GapViewHolder, position: Int) { val adapter = this.adapter val status = adapter.getStatus(position) ?: return - if (BuildConfig.DEBUG) { - Log.v(TwidereConstants.LOGTAG, "Load activity gap " + status) - } + DebugLog.v(TwidereConstants.LOGTAG, "Load activity gap " + status) adapter.addGapLoadingId(ObjectId(status.account_key, status.id)) val accountIds = arrayOf(status.account_key) val maxIds = arrayOf(status.id) diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/loader/MicroBlogAPIStatusesLoader.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/loader/MicroBlogAPIStatusesLoader.kt index cba7eca39..388b44e80 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/loader/MicroBlogAPIStatusesLoader.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/loader/MicroBlogAPIStatusesLoader.kt @@ -238,8 +238,8 @@ abstract class MicroBlogAPIStatusesLoader( }) { current, total -> true } } catch (e: Exception) { // Ignore - if (BuildConfig.DEBUG && e !is IOException) { - Log.w(LOGTAG, e) + if (e !is IOException) { + DebugLog.w(LOGTAG, "Error saving cached data", e) } } diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/receiver/ConnectivityStateReceiver.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/receiver/ConnectivityStateReceiver.kt new file mode 100644 index 000000000..df4934240 --- /dev/null +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/receiver/ConnectivityStateReceiver.kt @@ -0,0 +1,72 @@ +/* + * Twidere - Twitter client for Android + * + * Copyright (C) 2012-2014 Mariotaku Lee + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package org.mariotaku.twidere.receiver + +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.net.ConnectivityManager +import android.support.v4.net.ConnectivityManagerCompat +import edu.tsinghua.hotmobi.HotMobiLogger +import edu.tsinghua.hotmobi.UploadLogsService +import edu.tsinghua.hotmobi.model.NetworkEvent +import org.mariotaku.kpreferences.get +import org.mariotaku.twidere.TwidereConstants +import org.mariotaku.twidere.TwidereConstants.SHARED_PREFERENCES_NAME +import org.mariotaku.twidere.app.TwidereApplication +import org.mariotaku.twidere.constant.usageStatisticsKey +import org.mariotaku.twidere.util.DebugLog +import org.mariotaku.twidere.util.Utils + +class ConnectivityStateReceiver : BroadcastReceiver() { + + override fun onReceive(context: Context, intent: Intent) { + DebugLog.d(RECEIVER_LOGTAG, String.format("Received Broadcast %s", intent), null) + if (ConnectivityManager.CONNECTIVITY_ACTION != intent.action) return + val application = TwidereApplication.getInstance(context) + // application.reloadConnectivitySettings(); + val prefs = context.getSharedPreferences(SHARED_PREFERENCES_NAME, + Context.MODE_PRIVATE) + if (prefs[usageStatisticsKey]) { + // BEGIN HotMobi + val event = NetworkEvent.create(context) + HotMobiLogger.getInstance(context).log(event) + // END HotMobi + } + + val appContext = context.applicationContext + val cm = appContext.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager + val isNetworkMetered = ConnectivityManagerCompat.isActiveNetworkMetered(cm) + val isCharging = Utils.isCharging(appContext) + if (!isNetworkMetered && isCharging) { + val currentTime = System.currentTimeMillis() + val lastSuccessfulTime = HotMobiLogger.getLastUploadTime(appContext) + if (currentTime - lastSuccessfulTime > HotMobiLogger.UPLOAD_INTERVAL_MILLIS) { + appContext.startService(Intent(appContext, UploadLogsService::class.java)) + } + } + + } + + companion object { + + private val RECEIVER_LOGTAG = TwidereConstants.LOGTAG + "build/intermediates/exploded-aar/com.lnikkila/extendedtouchview/0.1.0/res" + "Connectivity" + } +} diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/service/StreamingService.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/service/StreamingService.kt index 12b67cc19..71b156f79 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/service/StreamingService.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/service/StreamingService.kt @@ -34,6 +34,7 @@ import org.mariotaku.twidere.model.util.AccountUtils import org.mariotaku.twidere.provider.TwidereDataStore.* import org.mariotaku.twidere.util.ContentValuesCreator import org.mariotaku.twidere.util.DataStoreUtils +import org.mariotaku.twidere.util.DebugLog import org.mariotaku.twidere.util.TwidereArrayUtils import java.io.ByteArrayOutputStream import java.io.IOException @@ -56,9 +57,7 @@ class StreamingService : Service() { override fun onCreate() { super.onCreate() notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager - if (BuildConfig.DEBUG) { - Log.d(LOGTAG, "Stream service started.") - } + DebugLog.d(LOGTAG, "Stream service started.") initStreaming() AccountManager.get(this).addOnAccountsUpdatedListenerSafe(accountChangeObserver, updateImmediately = false) } @@ -66,9 +65,7 @@ class StreamingService : Service() { override fun onDestroy() { clearTwitterInstances() AccountManager.get(this).removeOnAccountsUpdatedListenerSafe(accountChangeObserver) - if (BuildConfig.DEBUG) { - Log.d(LOGTAG, "Stream service stopped.") - } + DebugLog.d(LOGTAG, "Stream service stopped.") super.onDestroy() } @@ -97,9 +94,7 @@ class StreamingService : Service() { val accountsList = AccountUtils.getAllAccountDetails(AccountManager.get(this), true).filter { it.credentials is OAuthCredentials } val accountKeys = accountsList.map { it.key }.toTypedArray() val activatedPreferences = AccountPreferences.getAccountPreferences(this, accountKeys) - if (BuildConfig.DEBUG) { - Log.d(LOGTAG, "Setting up twitter stream instances") - } + DebugLog.d(LOGTAG, "Setting up twitter stream instances") this.accountKeys = accountKeys clearTwitterInstances() var result = false diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/task/GetDirectMessagesTask.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/task/GetDirectMessagesTask.kt index 86449d25d..913d50163 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/task/GetDirectMessagesTask.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/task/GetDirectMessagesTask.kt @@ -2,7 +2,6 @@ package org.mariotaku.twidere.task import android.content.Context import android.net.Uri -import android.util.Log import com.squareup.otto.Bus import org.apache.commons.lang3.math.NumberUtils import org.mariotaku.abstask.library.AbstractTask @@ -13,7 +12,6 @@ import org.mariotaku.microblog.library.twitter.model.DirectMessage import org.mariotaku.microblog.library.twitter.model.ErrorInfo import org.mariotaku.microblog.library.twitter.model.Paging import org.mariotaku.microblog.library.twitter.model.ResponseList -import org.mariotaku.twidere.BuildConfig import org.mariotaku.twidere.TwidereConstants import org.mariotaku.twidere.constant.loadItemLimitKey import org.mariotaku.twidere.model.RefreshTaskParam @@ -90,9 +88,7 @@ abstract class GetDirectMessagesTask( } else if (e.isCausedByNetworkIssue) { errorInfoStore[ErrorInfoStore.KEY_DIRECT_MESSAGES, accountKey] = ErrorInfoStore.CODE_NETWORK_ERROR } - if (BuildConfig.DEBUG) { - Log.w(TwidereConstants.LOGTAG, e) - } + DebugLog.w(TwidereConstants.LOGTAG, tr = e) result.add(TwitterWrapper.MessageListResponse(accountKey, e)) } diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/task/GetSavedSearchesTask.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/task/GetSavedSearchesTask.kt index 63439a285..e50b6662d 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/task/GetSavedSearchesTask.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/task/GetSavedSearchesTask.kt @@ -11,6 +11,7 @@ import org.mariotaku.twidere.model.SingleResponse import org.mariotaku.twidere.model.UserKey import org.mariotaku.twidere.provider.TwidereDataStore.SavedSearches import org.mariotaku.twidere.util.ContentValuesCreator +import org.mariotaku.twidere.util.DebugLog import org.mariotaku.twidere.util.MicroBlogAPIFactory import org.mariotaku.twidere.util.content.ContentResolverUtils @@ -34,9 +35,7 @@ class GetSavedSearchesTask( cr.delete(SavedSearches.CONTENT_URI, where.sql, whereArgs) ContentResolverUtils.bulkInsert(cr, SavedSearches.CONTENT_URI, values) } catch (e: MicroBlogException) { - if (BuildConfig.DEBUG) { - Log.w(LOGTAG, e) - } + DebugLog.w(LOGTAG, tr = e) } } return SingleResponse.getInstance(Unit) diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/task/twitter/GetActivitiesTask.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/task/twitter/GetActivitiesTask.kt index c9db79cea..705d0376e 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/task/twitter/GetActivitiesTask.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/task/twitter/GetActivitiesTask.kt @@ -6,7 +6,6 @@ import android.content.ContentValues import android.content.Context import android.net.Uri import android.support.annotation.UiThread -import android.util.Log import com.squareup.otto.Bus import org.mariotaku.abstask.library.AbstractTask import org.mariotaku.kpreferences.KPreferences @@ -16,7 +15,6 @@ import org.mariotaku.microblog.library.twitter.model.Activity import org.mariotaku.microblog.library.twitter.model.Paging import org.mariotaku.microblog.library.twitter.model.ResponseList import org.mariotaku.sqliteqb.library.Expression -import org.mariotaku.twidere.BuildConfig import org.mariotaku.twidere.TwidereConstants.LOGTAG import org.mariotaku.twidere.TwidereConstants.QUERY_PARAM_NOTIFY import org.mariotaku.twidere.constant.loadItemLimitKey @@ -103,9 +101,7 @@ abstract class GetActivitiesTask( } errorInfoStore.remove(errorInfoKey, accountKey) } catch (e: MicroBlogException) { - if (BuildConfig.DEBUG) { - Log.w(LOGTAG, e) - } + DebugLog.w(LOGTAG, tr = e) if (e.errorCode == 220) { errorInfoStore[errorInfoKey, accountKey] = ErrorInfoStore.CODE_NO_ACCESS_FOR_CREDENTIALS } else if (e.isCausedByNetworkIssue) { diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/task/twitter/GetStatusesTask.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/task/twitter/GetStatusesTask.kt index 70be7c8fa..7553fe6f9 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/task/twitter/GetStatusesTask.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/task/twitter/GetStatusesTask.kt @@ -4,7 +4,6 @@ import android.accounts.AccountManager import android.content.ContentValues import android.content.Context import android.net.Uri -import android.util.Log import com.squareup.otto.Bus import edu.tsinghua.hotmobi.HotMobiLogger import edu.tsinghua.hotmobi.model.RefreshEvent @@ -20,7 +19,6 @@ import org.mariotaku.microblog.library.twitter.model.ResponseList import org.mariotaku.microblog.library.twitter.model.Status import org.mariotaku.sqliteqb.library.Columns import org.mariotaku.sqliteqb.library.Expression -import org.mariotaku.twidere.BuildConfig import org.mariotaku.twidere.TwidereConstants.LOGTAG import org.mariotaku.twidere.TwidereConstants.QUERY_PARAM_NOTIFY import org.mariotaku.twidere.constant.loadItemLimitKey @@ -139,9 +137,7 @@ abstract class GetStatusesTask( TaskStarter.execute(cacheTask) errorInfoStore.remove(errorInfoKey, accountKey.id) } catch (e: MicroBlogException) { - if (BuildConfig.DEBUG) { - Log.w(LOGTAG, e) - } + DebugLog.w(LOGTAG, tr = e) if (e.isCausedByNetworkIssue) { errorInfoStore[errorInfoKey, accountKey.id] = ErrorInfoStore.CODE_NETWORK_ERROR } else if (e.statusCode == 401) { diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/task/twitter/UpdateStatusTask.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/task/twitter/UpdateStatusTask.kt index 3179541cb..142f953db 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/task/twitter/UpdateStatusTask.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/task/twitter/UpdateStatusTask.kt @@ -732,12 +732,7 @@ class UpdateStatusTask( data class UriMediaDeletionItem(val uri: Uri) : MediaDeletionItem { override fun delete(context: Context): Boolean { - try { - return PNCUtils.deleteMedia(context, uri) - } catch (e: SecurityException) { - // Ignore - return false - } + return Utils.deleteMedia(context, uri) } } diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/util/DataStoreFunctions.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/util/DataStoreFunctions.kt index fe73e87b2..c103067f1 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/util/DataStoreFunctions.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/util/DataStoreFunctions.kt @@ -6,7 +6,6 @@ import android.content.SharedPreferences import android.net.Uri import org.mariotaku.kpreferences.get import org.mariotaku.ktextension.useCursor -import org.mariotaku.pickncrop.library.PNCUtils import org.mariotaku.sqliteqb.library.* import org.mariotaku.twidere.constant.filterPossibilitySensitiveStatusesKey import org.mariotaku.twidere.constant.filterUnavailableQuoteStatusesKey @@ -94,11 +93,7 @@ fun deleteDrafts(context: Context, draftIds: LongArray): Int { while (!cursor.isAfterLast) { val draft = indices.newObject(cursor) draft.media?.forEach { item -> - try { - PNCUtils.deleteMedia(context, Uri.parse(item.uri)) - } catch (e: SecurityException) { - // Ignore - } + Utils.deleteMedia(context, Uri.parse(item.uri)) } cursor.moveToNext() } diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/util/DebugLog.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/util/DebugLog.kt index 7725965a0..444aa7423 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/util/DebugLog.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/util/DebugLog.kt @@ -8,6 +8,17 @@ import org.mariotaku.twidere.BuildConfig */ object DebugLog { + @JvmStatic + fun v(tag: String, msg: String, tr: Throwable? = null): Int { + if (!BuildConfig.DEBUG) return 0 + if (tr != null) { + return Log.v(tag, msg, tr) + } else { + return Log.v(tag, msg) + } + } + + @JvmStatic fun d(tag: String, msg: String, tr: Throwable? = null): Int { if (!BuildConfig.DEBUG) return 0 if (tr != null) { @@ -17,6 +28,7 @@ object DebugLog { } } + @JvmStatic fun w(tag: String, msg: String? = null, tr: Throwable? = null): Int { if (!BuildConfig.DEBUG) return 0 if (msg != null && tr != null) { diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/util/sync/FileBasedDraftsSyncAction.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/util/sync/FileBasedDraftsSyncAction.kt index d58d3b4a2..7dfc3439f 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/util/sync/FileBasedDraftsSyncAction.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/util/sync/FileBasedDraftsSyncAction.kt @@ -2,17 +2,16 @@ package org.mariotaku.twidere.util.sync import android.content.Context import android.support.v4.util.LongSparseArray -import android.util.Log import org.mariotaku.ktextension.map import org.mariotaku.ktextension.set import org.mariotaku.sqliteqb.library.Expression -import org.mariotaku.twidere.BuildConfig import org.mariotaku.twidere.extension.model.filename import org.mariotaku.twidere.extension.model.unique_id_non_null import org.mariotaku.twidere.model.Draft import org.mariotaku.twidere.model.DraftCursorIndices import org.mariotaku.twidere.model.DraftValuesCreator import org.mariotaku.twidere.provider.TwidereDataStore.Drafts +import org.mariotaku.twidere.util.DebugLog import org.mariotaku.twidere.util.content.ContentResolverUtils import java.io.File import java.io.FileNotFoundException @@ -27,9 +26,7 @@ abstract class FileBasedDraftsSyncAction(val context: Context) : @Throws(IOException::class) override fun execute(): Boolean { - if (BuildConfig.DEBUG) { - Log.d(LOGTAG_SYNC, "Begin syncing drafts") - } + DebugLog.d(LOGTAG_SYNC, "Begin syncing drafts") if (!setup()) { return false @@ -114,29 +111,23 @@ abstract class FileBasedDraftsSyncAction(val context: Context) : // Upload local items if (uploadLocalList.isNotEmpty()) { - if (BuildConfig.DEBUG) { - val fileList = uploadLocalList.joinToString(",") { it.filename } - Log.d(LOGTAG_SYNC, "Uploading local drafts $fileList") - } + val fileList = uploadLocalList.joinToString(",") { it.filename } + DebugLog.d(LOGTAG_SYNC, "Uploading local drafts $fileList") uploadDrafts(uploadLocalList) } // Download remote items if (downloadRemoteInfoList.isNotEmpty()) { - if (BuildConfig.DEBUG) { - val fileList = downloadRemoteInfoList.joinToString(",") { it.draftFileName } - Log.d(LOGTAG_SYNC, "Downloading remote drafts $fileList") - } + val fileList = downloadRemoteInfoList.joinToString(",") { it.draftFileName } + DebugLog.d(LOGTAG_SYNC, "Downloading remote drafts $fileList") ContentResolverUtils.bulkInsert(context.contentResolver, Drafts.CONTENT_URI, downloadDrafts(downloadRemoteInfoList).map { DraftValuesCreator.create(it) }) } // Update local items if (updateLocalInfoList.size() > 0) { - if (BuildConfig.DEBUG) { - val fileList = (0 until updateLocalInfoList.size()).joinToString(",") { updateLocalInfoList.valueAt(it).draftFileName } - Log.d(LOGTAG_SYNC, "Updating local drafts $fileList") - } + val fileList = (0 until updateLocalInfoList.size()).joinToString(",") { updateLocalInfoList.valueAt(it).draftFileName } + DebugLog.d(LOGTAG_SYNC, "Updating local drafts $fileList") for (index in 0 until updateLocalInfoList.size()) { val draft = Draft() if (draft.loadFromRemote(updateLocalInfoList.valueAt(index))) { @@ -149,20 +140,16 @@ abstract class FileBasedDraftsSyncAction(val context: Context) : // Remove local items if (removeLocalIdsList.isNotEmpty()) { - if (BuildConfig.DEBUG) { - val fileList = removeLocalIdsList.joinToString(",") { "$it.eml" } - Log.d(LOGTAG_SYNC, "Removing local drafts $fileList") - } + val fileList = removeLocalIdsList.joinToString(",") { "$it.eml" } + DebugLog.d(LOGTAG_SYNC, "Removing local drafts $fileList") ContentResolverUtils.bulkDelete(context.contentResolver, Drafts.CONTENT_URI, Drafts.UNIQUE_ID, removeLocalIdsList, null) } // Remove remote items if (removeRemoteInfoList.isNotEmpty()) { - if (BuildConfig.DEBUG) { - val fileList = removeRemoteInfoList.joinToString(",") { it.draftFileName } - Log.d(LOGTAG_SYNC, "Removing remote drafts $fileList") - } + val fileList = removeRemoteInfoList.joinToString(",") { it.draftFileName } + DebugLog.d(LOGTAG_SYNC, "Removing remote drafts $fileList") removeDrafts(removeRemoteInfoList) } @@ -178,9 +165,7 @@ abstract class FileBasedDraftsSyncAction(val context: Context) : } } - if (BuildConfig.DEBUG) { - Log.d(LOGTAG_SYNC, "Finished syncing drafts") - } + DebugLog.d(LOGTAG_SYNC, "Finished syncing drafts") return true } diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/util/sync/SingleFileBasedDataSyncAction.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/util/sync/SingleFileBasedDataSyncAction.kt index 497ab9da5..da745b1bf 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/util/sync/SingleFileBasedDataSyncAction.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/util/sync/SingleFileBasedDataSyncAction.kt @@ -2,6 +2,7 @@ package org.mariotaku.twidere.util.sync import android.util.Log import org.mariotaku.twidere.BuildConfig +import org.mariotaku.twidere.util.DebugLog import java.io.Closeable import java.io.FileNotFoundException import java.io.IOException @@ -13,9 +14,7 @@ abstract class SingleFileBasedDataSyncAction. --> +