From e2f600ad0eb4f1da37f68c4ec0e7b675d686d1a8 Mon Sep 17 00:00:00 2001 From: Mariotaku Lee Date: Thu, 1 Dec 2016 15:55:38 +0800 Subject: [PATCH] updated library version --- twidere.component.common/build.gradle | 6 +- .../library/twitter/model/DMResponse.java | 1 + .../twitter/model/MediaUploadResponse.java | 4 + .../twitter/model/UniversalSearchQuery.java | 6 ++ .../twitter/model/UniversalSearchResult.java | 3 + .../twidere/annotation/CustomTabType.java | 0 .../java/org/mariotaku/twidere/model/Tab.java | 13 ++- .../model/tab/argument/TabArguments.java | 37 ++++++-- .../tab/argument/TextQueryArguments.java | 0 .../model/tab/argument/UserArguments.java | 0 .../model/tab/argument/UserListArguments.java | 0 .../model/tab/extra/HomeTabExtras.java | 0 .../tab/extra/InteractionsTabExtras.java | 0 .../twidere/model/tab/extra/TabExtras.java | 38 ++++++++ .../util/TabArgumentsFieldConverter.java | 18 ++-- .../model/util/TabExtrasFieldConverter.java | 16 ++-- twidere.component.nyan/build.gradle | 2 +- twidere.donate.nyanwp.wear/build.gradle | 2 +- twidere.donate.nyanwp/build.gradle | 2 +- twidere.library.extension/build.gradle | 2 +- .../java/org/mariotaku/twidere/Twidere.java | 5 +- twidere.wear/build.gradle | 2 +- twidere/build.gradle | 8 +- .../library/twitter/UserStreamCallback.java | 4 +- .../twidere/model/tab/extra/TabExtras.java | 18 ---- .../model/util/ParcelableAccountUtils.java | 5 ++ .../util/ParcelableCredentialsUtils.java | 8 +- .../twidere/provider/TwidereDataProvider.java | 4 + .../twidere/service/StreamingService.java | 4 +- .../twidere/task/GetDirectMessagesTask.java | 7 +- .../twidere/task/UpdateAccountInfoTask.java | 4 + .../twidere/util/ContentValuesCreator.java | 11 +-- .../twidere/util/CustomTabUtils.java | 86 ++++++------------- .../twidere/util/DataImportExportUtils.java | 12 +-- .../twidere/util/DataStoreUtils.java | 52 ++++++----- .../org/mariotaku/twidere/util/Utils.java | 35 +++++--- .../twidere/activity/HomeActivity.kt | 3 +- .../twidere/receiver/NotificationReceiver.kt | 3 +- .../main/res/layout/header_status_common.xml | 14 +-- 39 files changed, 269 insertions(+), 166 deletions(-) rename {twidere => twidere.component.common}/src/main/java/org/mariotaku/twidere/annotation/CustomTabType.java (100%) rename {twidere => twidere.component.common}/src/main/java/org/mariotaku/twidere/model/Tab.java (96%) rename {twidere => twidere.component.common}/src/main/java/org/mariotaku/twidere/model/tab/argument/TabArguments.java (59%) rename {twidere => twidere.component.common}/src/main/java/org/mariotaku/twidere/model/tab/argument/TextQueryArguments.java (100%) rename {twidere => twidere.component.common}/src/main/java/org/mariotaku/twidere/model/tab/argument/UserArguments.java (100%) rename {twidere => twidere.component.common}/src/main/java/org/mariotaku/twidere/model/tab/argument/UserListArguments.java (100%) rename {twidere => twidere.component.common}/src/main/java/org/mariotaku/twidere/model/tab/extra/HomeTabExtras.java (100%) rename {twidere => twidere.component.common}/src/main/java/org/mariotaku/twidere/model/tab/extra/InteractionsTabExtras.java (100%) create mode 100644 twidere.component.common/src/main/java/org/mariotaku/twidere/model/tab/extra/TabExtras.java rename {twidere => twidere.component.common}/src/main/java/org/mariotaku/twidere/model/util/TabArgumentsFieldConverter.java (62%) rename {twidere => twidere.component.common}/src/main/java/org/mariotaku/twidere/model/util/TabExtrasFieldConverter.java (61%) delete mode 100644 twidere/src/main/java/org/mariotaku/twidere/model/tab/extra/TabExtras.java diff --git a/twidere.component.common/build.gradle b/twidere.component.common/build.gradle index cae1baa34..7ab21a233 100644 --- a/twidere.component.common/build.gradle +++ b/twidere.component.common/build.gradle @@ -23,7 +23,7 @@ apply plugin: 'com.neenbedankt.android-apt' android { defaultConfig { minSdkVersion 14 - targetSdkVersion 24 + targetSdkVersion 25 versionCode 1 versionName "3.0" } @@ -38,13 +38,13 @@ android { dependencies { apt 'com.bluelinelabs:logansquare-compiler:1.3.7' apt 'com.hannesdorfmann.parcelableplease:processor:1.0.2' - apt 'com.github.mariotaku.ObjectCursor:processor:0.9.11' + apt 'com.github.mariotaku.ObjectCursor:processor:0.9.12' compile 'com.android.support:support-annotations:25.0.1' compile 'com.bluelinelabs:logansquare:1.3.7' compile 'com.github.mariotaku.RestFu:library:0.9.34' compile 'com.github.mariotaku.RestFu:oauth:0.9.34' compile 'com.hannesdorfmann.parcelableplease:annotation:1.0.2' - compile 'com.github.mariotaku.ObjectCursor:core:0.9.11' + compile 'com.github.mariotaku.ObjectCursor:core:0.9.12' compile 'com.github.mariotaku.CommonsLibrary:objectcursor:0.9.10' compile 'com.github.mariotaku.CommonsLibrary:logansquare:0.9.10' compile fileTree(dir: 'libs', include: ['*.jar']) diff --git a/twidere.component.common/src/main/java/org/mariotaku/microblog/library/twitter/model/DMResponse.java b/twidere.component.common/src/main/java/org/mariotaku/microblog/library/twitter/model/DMResponse.java index 1c85b6b9e..0f44fe466 100644 --- a/twidere.component.common/src/main/java/org/mariotaku/microblog/library/twitter/model/DMResponse.java +++ b/twidere.component.common/src/main/java/org/mariotaku/microblog/library/twitter/model/DMResponse.java @@ -310,6 +310,7 @@ public class DMResponse implements Parcelable { } @StringDef({Type.ONE_TO_ONE, Type.GROUP_DM}) + @Retention(RetentionPolicy.SOURCE) public @interface Type { String ONE_TO_ONE = "one_to_one", GROUP_DM = "group_dm"; } diff --git a/twidere.component.common/src/main/java/org/mariotaku/microblog/library/twitter/model/MediaUploadResponse.java b/twidere.component.common/src/main/java/org/mariotaku/microblog/library/twitter/model/MediaUploadResponse.java index ccdebd677..ec68872c8 100644 --- a/twidere.component.common/src/main/java/org/mariotaku/microblog/library/twitter/model/MediaUploadResponse.java +++ b/twidere.component.common/src/main/java/org/mariotaku/microblog/library/twitter/model/MediaUploadResponse.java @@ -25,6 +25,9 @@ import android.support.annotation.StringDef; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + /** * Created by mariotaku on 15/5/7. */ @@ -163,6 +166,7 @@ public class MediaUploadResponse extends TwitterResponseObject implements Twitte @StringDef({State.PENDING, State.IN_PROGRESS, State.FAILED, State.SUCCEEDED}) + @Retention(RetentionPolicy.SOURCE) public @interface State { String PENDING = "pending"; String IN_PROGRESS = "in_progress"; diff --git a/twidere.component.common/src/main/java/org/mariotaku/microblog/library/twitter/model/UniversalSearchQuery.java b/twidere.component.common/src/main/java/org/mariotaku/microblog/library/twitter/model/UniversalSearchQuery.java index f7376d694..1706db903 100644 --- a/twidere.component.common/src/main/java/org/mariotaku/microblog/library/twitter/model/UniversalSearchQuery.java +++ b/twidere.component.common/src/main/java/org/mariotaku/microblog/library/twitter/model/UniversalSearchQuery.java @@ -24,6 +24,9 @@ import android.support.annotation.StringDef; import org.mariotaku.microblog.library.twitter.util.InternalArrayUtil; import org.mariotaku.restfu.http.SimpleValueMap; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + /** * Created by mariotaku on 15/10/21. */ @@ -58,6 +61,7 @@ public class UniversalSearchQuery extends SimpleValueMap { } @StringDef({Filter.IMAGES, Filter.VIDEOS, Filter.PERISCOPE, Filter.NEWS}) + @Retention(RetentionPolicy.SOURCE) public @interface Filter { String IMAGES = "images"; String VIDEOS = "videos"; @@ -68,6 +72,7 @@ public class UniversalSearchQuery extends SimpleValueMap { @StringDef({Module.TWEET, Module.USER_GALLERY, Module.NEWS, Module.MEDIA_GALLERY, Module.SUGGESTION, Module.EVENT, Module.TWEET_GALLERY, Module.FOLLOWS_TWEET_GALLERY, Module.NEARBY_TWEET_GALLERY, Module.SUMMARY, Module.EVENT_SUMMARY}) + @Retention(RetentionPolicy.SOURCE) public @interface Module { String TWEET = "tweet"; String USER_GALLERY = "user_gallery"; @@ -83,6 +88,7 @@ public class UniversalSearchQuery extends SimpleValueMap { } @StringDef({ResultType.RECENT, ResultType.FOLLOWS}) + @Retention(RetentionPolicy.SOURCE) public @interface ResultType { String RECENT = "recent"; String FOLLOWS = "follows"; diff --git a/twidere.component.common/src/main/java/org/mariotaku/microblog/library/twitter/model/UniversalSearchResult.java b/twidere.component.common/src/main/java/org/mariotaku/microblog/library/twitter/model/UniversalSearchResult.java index 50d8dbede..953deaaa3 100644 --- a/twidere.component.common/src/main/java/org/mariotaku/microblog/library/twitter/model/UniversalSearchResult.java +++ b/twidere.component.common/src/main/java/org/mariotaku/microblog/library/twitter/model/UniversalSearchResult.java @@ -29,6 +29,8 @@ import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonToken; import java.io.IOException; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; import java.util.List; @@ -315,6 +317,7 @@ public class UniversalSearchResult { } @StringDef({ResultType.NORMAL, ResultType.TOP}) + @Retention(RetentionPolicy.SOURCE) public @interface ResultType { String NORMAL = "normal"; String TOP = "top"; diff --git a/twidere/src/main/java/org/mariotaku/twidere/annotation/CustomTabType.java b/twidere.component.common/src/main/java/org/mariotaku/twidere/annotation/CustomTabType.java similarity index 100% rename from twidere/src/main/java/org/mariotaku/twidere/annotation/CustomTabType.java rename to twidere.component.common/src/main/java/org/mariotaku/twidere/annotation/CustomTabType.java diff --git a/twidere/src/main/java/org/mariotaku/twidere/model/Tab.java b/twidere.component.common/src/main/java/org/mariotaku/twidere/model/Tab.java similarity index 96% rename from twidere/src/main/java/org/mariotaku/twidere/model/Tab.java rename to twidere.component.common/src/main/java/org/mariotaku/twidere/model/Tab.java index 2d26ed94f..f56c45308 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/model/Tab.java +++ b/twidere.component.common/src/main/java/org/mariotaku/twidere/model/Tab.java @@ -139,13 +139,13 @@ public class Tab implements Parcelable { this.internalExtras = InternalExtras.from(extras); } - @OnPreJsonSerialize void beforeJsonSerialize() { internalArguments = InternalArguments.from(arguments); internalExtras = InternalExtras.from(extras); } + @OnJsonParseComplete void onJsonParseComplete() { if (internalArguments != null) { @@ -169,6 +169,17 @@ public class Tab implements Parcelable { '}'; } + @CustomTabType + public static String getTypeAlias(String key) { + if (key == null) return null; + switch (key) { + case "mentions_timeline": + case "activities_about_me": + return CustomTabType.NOTIFICATIONS_TIMELINE; + } + return key; + } + @ParcelablePlease(allFields = false) @JsonObject static class InternalArguments implements Parcelable { diff --git a/twidere/src/main/java/org/mariotaku/twidere/model/tab/argument/TabArguments.java b/twidere.component.common/src/main/java/org/mariotaku/twidere/model/tab/argument/TabArguments.java similarity index 59% rename from twidere/src/main/java/org/mariotaku/twidere/model/tab/argument/TabArguments.java rename to twidere.component.common/src/main/java/org/mariotaku/twidere/model/tab/argument/TabArguments.java index d8bc13bb6..8c96c6ecf 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/model/tab/argument/TabArguments.java +++ b/twidere.component.common/src/main/java/org/mariotaku/twidere/model/tab/argument/TabArguments.java @@ -5,14 +5,15 @@ import android.support.annotation.CallSuper; import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import com.bluelinelabs.logansquare.LoganSquare; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; -import org.apache.commons.lang3.ArrayUtils; -import org.apache.commons.lang3.math.NumberUtils; import org.mariotaku.twidere.TwidereConstants; +import org.mariotaku.twidere.annotation.CustomTabType; import org.mariotaku.twidere.model.UserKey; +import java.io.IOException; import java.util.Arrays; /** @@ -43,14 +44,18 @@ public class TabArguments implements TwidereConstants { @CallSuper public void copyToBundle(@NonNull Bundle bundle) { final UserKey[] accountKeys = this.accountKeys; - if (!ArrayUtils.isEmpty(accountKeys)) { - assert accountKeys != null; + if (accountKeys != null && accountKeys.length > 0) { for (UserKey key : accountKeys) { if (key == null) return; } bundle.putParcelableArray(EXTRA_ACCOUNT_KEYS, accountKeys); } else if (accountId != null) { - final long id = NumberUtils.toLong(accountId, Long.MIN_VALUE); + long id = Long.MIN_VALUE; + try { + id = Long.parseLong(accountId); + } catch (NumberFormatException e) { + // Ignore + } if (id != Long.MIN_VALUE && id <= 0) { // account_id = -1, means no account selected bundle.putParcelableArray(EXTRA_ACCOUNT_KEYS, null); @@ -67,4 +72,26 @@ public class TabArguments implements TwidereConstants { ", accountKeys=" + Arrays.toString(accountKeys) + '}'; } + + @Nullable + public static TabArguments parse(@NonNull @CustomTabType String type, String json) throws IOException { + switch (type) { + case CustomTabType.HOME_TIMELINE: + case CustomTabType.NOTIFICATIONS_TIMELINE: + case CustomTabType.DIRECT_MESSAGES: { + return LoganSquare.parse(json, TabArguments.class); + } + case CustomTabType.USER_TIMELINE: + case CustomTabType.FAVORITES: { + return LoganSquare.parse(json, UserArguments.class); + } + case CustomTabType.LIST_TIMELINE: { + return LoganSquare.parse(json, UserListArguments.class); + } + case CustomTabType.SEARCH_STATUSES: { + return LoganSquare.parse(json, TextQueryArguments.class); + } + } + return null; + } } diff --git a/twidere/src/main/java/org/mariotaku/twidere/model/tab/argument/TextQueryArguments.java b/twidere.component.common/src/main/java/org/mariotaku/twidere/model/tab/argument/TextQueryArguments.java similarity index 100% rename from twidere/src/main/java/org/mariotaku/twidere/model/tab/argument/TextQueryArguments.java rename to twidere.component.common/src/main/java/org/mariotaku/twidere/model/tab/argument/TextQueryArguments.java diff --git a/twidere/src/main/java/org/mariotaku/twidere/model/tab/argument/UserArguments.java b/twidere.component.common/src/main/java/org/mariotaku/twidere/model/tab/argument/UserArguments.java similarity index 100% rename from twidere/src/main/java/org/mariotaku/twidere/model/tab/argument/UserArguments.java rename to twidere.component.common/src/main/java/org/mariotaku/twidere/model/tab/argument/UserArguments.java diff --git a/twidere/src/main/java/org/mariotaku/twidere/model/tab/argument/UserListArguments.java b/twidere.component.common/src/main/java/org/mariotaku/twidere/model/tab/argument/UserListArguments.java similarity index 100% rename from twidere/src/main/java/org/mariotaku/twidere/model/tab/argument/UserListArguments.java rename to twidere.component.common/src/main/java/org/mariotaku/twidere/model/tab/argument/UserListArguments.java diff --git a/twidere/src/main/java/org/mariotaku/twidere/model/tab/extra/HomeTabExtras.java b/twidere.component.common/src/main/java/org/mariotaku/twidere/model/tab/extra/HomeTabExtras.java similarity index 100% rename from twidere/src/main/java/org/mariotaku/twidere/model/tab/extra/HomeTabExtras.java rename to twidere.component.common/src/main/java/org/mariotaku/twidere/model/tab/extra/HomeTabExtras.java diff --git a/twidere/src/main/java/org/mariotaku/twidere/model/tab/extra/InteractionsTabExtras.java b/twidere.component.common/src/main/java/org/mariotaku/twidere/model/tab/extra/InteractionsTabExtras.java similarity index 100% rename from twidere/src/main/java/org/mariotaku/twidere/model/tab/extra/InteractionsTabExtras.java rename to twidere.component.common/src/main/java/org/mariotaku/twidere/model/tab/extra/InteractionsTabExtras.java diff --git a/twidere.component.common/src/main/java/org/mariotaku/twidere/model/tab/extra/TabExtras.java b/twidere.component.common/src/main/java/org/mariotaku/twidere/model/tab/extra/TabExtras.java new file mode 100644 index 000000000..c14348497 --- /dev/null +++ b/twidere.component.common/src/main/java/org/mariotaku/twidere/model/tab/extra/TabExtras.java @@ -0,0 +1,38 @@ +package org.mariotaku.twidere.model.tab.extra; + +import android.os.Bundle; +import android.os.Parcelable; +import android.support.annotation.CallSuper; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; + +import com.bluelinelabs.logansquare.annotation.JsonObject; + +import org.mariotaku.commons.logansquare.LoganSquareMapperFinder; +import org.mariotaku.twidere.annotation.CustomTabType; + +import java.io.IOException; + +/** + * Created by mariotaku on 16/3/6. + */ +@JsonObject +public abstract class TabExtras implements Parcelable { + @CallSuper + public void copyToBundle(Bundle bundle) { + + } + + @Nullable + public static TabExtras parse(@NonNull @CustomTabType String type, String json) throws IOException { + switch (type) { + case CustomTabType.NOTIFICATIONS_TIMELINE: { + return LoganSquareMapperFinder.mapperFor(InteractionsTabExtras.class).parse(json); + } + case CustomTabType.HOME_TIMELINE: { + return LoganSquareMapperFinder.mapperFor(HomeTabExtras.class).parse(json); + } + } + return null; + } +} diff --git a/twidere/src/main/java/org/mariotaku/twidere/model/util/TabArgumentsFieldConverter.java b/twidere.component.common/src/main/java/org/mariotaku/twidere/model/util/TabArgumentsFieldConverter.java similarity index 62% rename from twidere/src/main/java/org/mariotaku/twidere/model/util/TabArgumentsFieldConverter.java rename to twidere.component.common/src/main/java/org/mariotaku/twidere/model/util/TabArgumentsFieldConverter.java index 7c9793aa8..dba311462 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/model/util/TabArgumentsFieldConverter.java +++ b/twidere.component.common/src/main/java/org/mariotaku/twidere/model/util/TabArgumentsFieldConverter.java @@ -4,12 +4,14 @@ import android.content.ContentValues; import android.database.Cursor; import android.text.TextUtils; +import com.bluelinelabs.logansquare.LoganSquare; + import org.mariotaku.library.objectcursor.converter.CursorFieldConverter; +import org.mariotaku.twidere.model.Tab; import org.mariotaku.twidere.model.tab.argument.TabArguments; import org.mariotaku.twidere.provider.TwidereDataStore.Tabs; -import org.mariotaku.twidere.util.CustomTabUtils; -import org.mariotaku.twidere.util.JsonSerializer; +import java.io.IOException; import java.lang.reflect.ParameterizedType; /** @@ -18,15 +20,19 @@ import java.lang.reflect.ParameterizedType; public class TabArgumentsFieldConverter implements CursorFieldConverter { @Override - public TabArguments parseField(Cursor cursor, int columnIndex, ParameterizedType fieldType) { - final String tabType = CustomTabUtils.getTabTypeAlias(cursor.getString(cursor.getColumnIndex(Tabs.TYPE))); + public TabArguments parseField(Cursor cursor, int columnIndex, ParameterizedType fieldType) throws IOException { + final String tabType = Tab.getTypeAlias(cursor.getString(cursor.getColumnIndex(Tabs.TYPE))); if (TextUtils.isEmpty(tabType)) return null; - return CustomTabUtils.parseTabArguments(tabType, cursor.getString(columnIndex)); + return TabArguments.parse(tabType, cursor.getString(columnIndex)); } @Override public void writeField(ContentValues values, TabArguments object, String columnName, ParameterizedType fieldType) { if (object == null) return; - values.put(columnName, JsonSerializer.serialize(object)); + try { + values.put(columnName, LoganSquare.serialize(object)); + } catch (IOException e) { + // Ignore + } } } diff --git a/twidere/src/main/java/org/mariotaku/twidere/model/util/TabExtrasFieldConverter.java b/twidere.component.common/src/main/java/org/mariotaku/twidere/model/util/TabExtrasFieldConverter.java similarity index 61% rename from twidere/src/main/java/org/mariotaku/twidere/model/util/TabExtrasFieldConverter.java rename to twidere.component.common/src/main/java/org/mariotaku/twidere/model/util/TabExtrasFieldConverter.java index e1812116d..d263ac167 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/model/util/TabExtrasFieldConverter.java +++ b/twidere.component.common/src/main/java/org/mariotaku/twidere/model/util/TabExtrasFieldConverter.java @@ -4,12 +4,14 @@ import android.content.ContentValues; import android.database.Cursor; import android.text.TextUtils; +import com.bluelinelabs.logansquare.LoganSquare; + import org.mariotaku.library.objectcursor.converter.CursorFieldConverter; +import org.mariotaku.twidere.model.Tab; import org.mariotaku.twidere.model.tab.extra.TabExtras; import org.mariotaku.twidere.provider.TwidereDataStore.Tabs; -import org.mariotaku.twidere.util.CustomTabUtils; -import org.mariotaku.twidere.util.JsonSerializer; +import java.io.IOException; import java.lang.reflect.ParameterizedType; /** @@ -17,15 +19,15 @@ import java.lang.reflect.ParameterizedType; */ public class TabExtrasFieldConverter implements CursorFieldConverter { @Override - public TabExtras parseField(Cursor cursor, int columnIndex, ParameterizedType fieldType) { - final String tabType = CustomTabUtils.getTabTypeAlias(cursor.getString(cursor.getColumnIndex(Tabs.TYPE))); + public TabExtras parseField(Cursor cursor, int columnIndex, ParameterizedType fieldType) throws IOException { + final String tabType = Tab.getTypeAlias(cursor.getString(cursor.getColumnIndex(Tabs.TYPE))); if (TextUtils.isEmpty(tabType)) return null; - return CustomTabUtils.parseTabExtras(tabType, cursor.getString(columnIndex)); + return TabExtras.parse(tabType, cursor.getString(columnIndex)); } @Override - public void writeField(ContentValues values, TabExtras object, String columnName, ParameterizedType fieldType) { + public void writeField(ContentValues values, TabExtras object, String columnName, ParameterizedType fieldType) throws IOException { if (object == null) return; - values.put(columnName, JsonSerializer.serialize(object)); + values.put(columnName, LoganSquare.serialize(object)); } } diff --git a/twidere.component.nyan/build.gradle b/twidere.component.nyan/build.gradle index 47eb3ee96..563b887a8 100644 --- a/twidere.component.nyan/build.gradle +++ b/twidere.component.nyan/build.gradle @@ -22,7 +22,7 @@ apply plugin: 'com.android.library' android { defaultConfig { minSdkVersion 14 - targetSdkVersion 24 + targetSdkVersion 25 versionCode 1 versionName "1.0" } diff --git a/twidere.donate.nyanwp.wear/build.gradle b/twidere.donate.nyanwp.wear/build.gradle index 8a459e019..8cefe0197 100644 --- a/twidere.donate.nyanwp.wear/build.gradle +++ b/twidere.donate.nyanwp.wear/build.gradle @@ -23,7 +23,7 @@ android { defaultConfig { applicationId "org.mariotaku.twidere.donate.nyanwp" minSdkVersion 20 - targetSdkVersion 24 + targetSdkVersion 25 versionCode 1 versionName "1.0" } diff --git a/twidere.donate.nyanwp/build.gradle b/twidere.donate.nyanwp/build.gradle index aa23a95d5..511cf80db 100644 --- a/twidere.donate.nyanwp/build.gradle +++ b/twidere.donate.nyanwp/build.gradle @@ -23,7 +23,7 @@ android { defaultConfig { applicationId "org.mariotaku.twidere.donate.nyanwp" minSdkVersion 14 - targetSdkVersion 24 + targetSdkVersion 25 versionCode 3 versionName "1.2" } diff --git a/twidere.library.extension/build.gradle b/twidere.library.extension/build.gradle index 3efa0fec5..3bb39cbe8 100644 --- a/twidere.library.extension/build.gradle +++ b/twidere.library.extension/build.gradle @@ -22,7 +22,7 @@ apply plugin: 'com.android.library' android { defaultConfig { minSdkVersion 14 - targetSdkVersion 24 + targetSdkVersion 25 versionCode 1 versionName "1.0" } diff --git a/twidere.library.extension/src/main/java/org/mariotaku/twidere/Twidere.java b/twidere.library.extension/src/main/java/org/mariotaku/twidere/Twidere.java index cb74144a1..ff682fed3 100644 --- a/twidere.library.extension/src/main/java/org/mariotaku/twidere/Twidere.java +++ b/twidere.library.extension/src/main/java/org/mariotaku/twidere/Twidere.java @@ -33,18 +33,19 @@ import android.support.annotation.IntDef; import android.support.annotation.NonNull; import android.support.annotation.Nullable; -import org.mariotaku.twidere.model.UserKey; import org.mariotaku.twidere.model.ComposingStatus; import org.mariotaku.twidere.model.ParcelableCredentials; import org.mariotaku.twidere.model.ParcelableCredentialsCursorIndices; import org.mariotaku.twidere.model.ParcelableStatus; import org.mariotaku.twidere.model.ParcelableUser; import org.mariotaku.twidere.model.ParcelableUserList; +import org.mariotaku.twidere.model.UserKey; import org.mariotaku.twidere.provider.TwidereDataStore; import org.mariotaku.twidere.provider.TwidereDataStore.Accounts; import org.mariotaku.twidere.provider.TwidereDataStore.DNS; import org.mariotaku.twidere.provider.TwidereDataStore.Permissions; +import java.io.IOException; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.net.Inet4Address; @@ -245,6 +246,8 @@ public final class Twidere implements TwidereConstants { if (cur.moveToFirst()) { return ParcelableCredentialsCursorIndices.fromCursor(cur); } + } catch (IOException e) { + return null; } finally { cur.close(); } diff --git a/twidere.wear/build.gradle b/twidere.wear/build.gradle index 9f82e5cef..d3e6c771b 100644 --- a/twidere.wear/build.gradle +++ b/twidere.wear/build.gradle @@ -23,7 +23,7 @@ android { defaultConfig { applicationId "org.mariotaku.twidere" minSdkVersion 20 - targetSdkVersion 24 + targetSdkVersion 25 versionCode 1 versionName "1.0" multiDexEnabled true diff --git a/twidere/build.gradle b/twidere/build.gradle index 4c70da61c..ff2704926 100644 --- a/twidere/build.gradle +++ b/twidere/build.gradle @@ -91,7 +91,7 @@ dependencies { kapt 'com.bluelinelabs:logansquare-compiler:1.3.7' kapt 'com.hannesdorfmann.parcelableplease:processor:1.0.2' kapt 'com.google.dagger:dagger-compiler:2.6.1' - kapt 'com.github.mariotaku.ObjectCursor:processor:0.9.11' + kapt 'com.github.mariotaku.ObjectCursor:processor:0.9.12' compile('com.github.mariotaku:app-theme-engine:1efc6237e1@aar') { transitive = true @@ -102,8 +102,8 @@ dependencies { compile project(':twidere.component.nyan') // START Non-FOSS component - googleCompile 'com.google.android.gms:play-services-maps:9.8.0' - googleCompile 'com.google.android.gms:play-services-auth:9.8.0' + googleCompile 'com.google.android.gms:play-services-maps:10.0.0' + googleCompile 'com.google.android.gms:play-services-auth:10.0.0' googleCompile 'com.google.maps.android:android-maps-utils:0.4.4' googleCompile('com.crashlytics.sdk.android:crashlytics:2.6.5@aar') { transitive = true } googleCompile ':YouTubeAndroidPlayerApi:1.2.2@jar' @@ -163,7 +163,7 @@ dependencies { compile 'com.github.mariotaku.MediaViewerLibrary:base:0.9.17' compile 'com.github.mariotaku.MediaViewerLibrary:subsample-image-view:0.9.17' compile 'com.github.mariotaku.SQLiteQB:library:0.9.8' - compile 'com.github.mariotaku.ObjectCursor:core:0.9.11' + compile 'com.github.mariotaku.ObjectCursor:core:0.9.12' compile 'com.github.mariotaku:MultiValueSwitch:0.9.7' compile 'com.github.mariotaku:AbstractTask:0.9.4' compile 'com.github.mariotaku.CommonsLibrary:parcel:0.9.10' diff --git a/twidere/src/main/java/org/mariotaku/microblog/library/twitter/UserStreamCallback.java b/twidere/src/main/java/org/mariotaku/microblog/library/twitter/UserStreamCallback.java index 4ec078e14..060fea6b7 100644 --- a/twidere/src/main/java/org/mariotaku/microblog/library/twitter/UserStreamCallback.java +++ b/twidere/src/main/java/org/mariotaku/microblog/library/twitter/UserStreamCallback.java @@ -167,9 +167,9 @@ public abstract class UserStreamCallback implements RawCallback { public abstract void onConnected(); - public abstract void onStatus(Status status); + public abstract void onStatus(Status status) throws IOException; - public abstract void onDirectMessage(DirectMessage directMessage); + public abstract void onDirectMessage(DirectMessage directMessage) throws IOException; public abstract void onBlock(User source, User blockedUser); diff --git a/twidere/src/main/java/org/mariotaku/twidere/model/tab/extra/TabExtras.java b/twidere/src/main/java/org/mariotaku/twidere/model/tab/extra/TabExtras.java deleted file mode 100644 index 119fb142d..000000000 --- a/twidere/src/main/java/org/mariotaku/twidere/model/tab/extra/TabExtras.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.mariotaku.twidere.model.tab.extra; - -import android.os.Bundle; -import android.os.Parcelable; -import android.support.annotation.CallSuper; - -import com.bluelinelabs.logansquare.annotation.JsonObject; - -/** - * Created by mariotaku on 16/3/6. - */ -@JsonObject -public abstract class TabExtras implements Parcelable { - @CallSuper - public void copyToBundle(Bundle bundle) { - - } -} diff --git a/twidere/src/main/java/org/mariotaku/twidere/model/util/ParcelableAccountUtils.java b/twidere/src/main/java/org/mariotaku/twidere/model/util/ParcelableAccountUtils.java index e33447acc..ad71b5f28 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/model/util/ParcelableAccountUtils.java +++ b/twidere/src/main/java/org/mariotaku/twidere/model/util/ParcelableAccountUtils.java @@ -16,6 +16,7 @@ import org.mariotaku.twidere.provider.TwidereDataStore.Accounts; import org.mariotaku.twidere.util.DataStoreUtils; import org.mariotaku.twidere.util.TwidereArrayUtils; +import java.io.IOException; import java.util.List; /** @@ -45,6 +46,8 @@ public class ParcelableAccountUtils { if (c.moveToFirst()) { return i.newObject(c); } + } catch (IOException e) { + return null; } finally { c.close(); } @@ -93,6 +96,8 @@ public class ParcelableAccountUtils { cursor.moveToNext(); } return names; + } catch (IOException e) { + return new ParcelableAccount[0]; } finally { cursor.close(); } diff --git a/twidere/src/main/java/org/mariotaku/twidere/model/util/ParcelableCredentialsUtils.java b/twidere/src/main/java/org/mariotaku/twidere/model/util/ParcelableCredentialsUtils.java index 5d9ab7612..1423831be 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/model/util/ParcelableCredentialsUtils.java +++ b/twidere/src/main/java/org/mariotaku/twidere/model/util/ParcelableCredentialsUtils.java @@ -11,6 +11,8 @@ import org.mariotaku.twidere.model.UserKey; import org.mariotaku.twidere.provider.TwidereDataStore.Accounts; import org.mariotaku.twidere.util.DataStoreUtils; +import java.io.IOException; + /** * Created by mariotaku on 16/3/4. */ @@ -38,6 +40,8 @@ public class ParcelableCredentialsUtils { if (c.moveToFirst()) { return i.newObject(c); } + } catch (IOException e) { + return null; } finally { c.close(); } @@ -56,7 +60,9 @@ public class ParcelableCredentialsUtils { cursor.moveToNext(); } return credentialses; - } finally { + } catch (IOException e) { + return new ParcelableCredentials[0]; + }finally { cursor.close(); } } 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 552e308c8..1c912c201 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/provider/TwidereDataProvider.java +++ b/twidere/src/main/java/org/mariotaku/twidere/provider/TwidereDataProvider.java @@ -548,6 +548,8 @@ public final class TwidereDataProvider extends ContentProvider implements Consta try { if (!c.moveToFirst()) return -1; item = i.newObject(c); + } catch (IOException e) { + return -1; } finally { c.close(); } @@ -1462,6 +1464,8 @@ public final class TwidereDataProvider extends ContentProvider implements Consta builder.setDeleteIntent(getMarkReadDeleteIntent(context, NotificationType.INTERACTIONS, accountKey, timestamp, false)); } + } catch (IOException e) { + return; } finally { c.close(); } diff --git a/twidere/src/main/java/org/mariotaku/twidere/service/StreamingService.java b/twidere/src/main/java/org/mariotaku/twidere/service/StreamingService.java index ed61ba635..99a16bbdf 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/service/StreamingService.java +++ b/twidere/src/main/java/org/mariotaku/twidere/service/StreamingService.java @@ -243,7 +243,7 @@ public class StreamingService extends Service implements Constants { } @Override - public void onDirectMessage(final DirectMessage directMessage) { + public void onDirectMessage(final DirectMessage directMessage) throws IOException { if (directMessage == null || directMessage.getId() == null) return; final String where = Expression.and(Expression.equalsArgs(DirectMessages.ACCOUNT_KEY), Expression.equalsArgs(DirectMessages.MESSAGE_ID)).getSQL(); @@ -340,7 +340,7 @@ public class StreamingService extends Service implements Constants { } @Override - public void onStatus(final Status status) { + public void onStatus(final Status status) throws IOException { final ContentValues values = ContentValuesCreator.createStatus(status, account.account_key); if (!statusStreamStarted) { statusStreamStarted = true; diff --git a/twidere/src/main/java/org/mariotaku/twidere/task/GetDirectMessagesTask.java b/twidere/src/main/java/org/mariotaku/twidere/task/GetDirectMessagesTask.java index 928c1b4ac..6e423ad3b 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/task/GetDirectMessagesTask.java +++ b/twidere/src/main/java/org/mariotaku/twidere/task/GetDirectMessagesTask.java @@ -31,6 +31,7 @@ import org.mariotaku.twidere.util.UriUtils; import org.mariotaku.twidere.util.content.ContentResolverUtils; import org.mariotaku.twidere.util.dagger.GeneralComponentHelper; +import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -123,7 +124,11 @@ public abstract class GetDirectMessagesTask extends AbstractTask tabs = new ArrayList<>(); - cur.moveToFirst(); - TabCursorIndices indices = new TabCursorIndices(cur); - while (!cur.isAfterLast()) { - tabs.add(indices.newObject(cur)); - cur.moveToNext(); + try { + final ArrayList tabs = new ArrayList<>(); + cur.moveToFirst(); + TabCursorIndices indices = new TabCursorIndices(cur); + while (!cur.isAfterLast()) { + tabs.add(indices.newObject(cur)); + cur.moveToNext(); + } + return tabs; + } catch (IOException e) { + return Collections.emptyList(); + } finally { + cur.close(); } - return tabs; } public static List getHomeTabs(@NonNull final Context context) { @@ -120,47 +122,20 @@ public class CustomTabUtils implements Constants { @Nullable public static TabArguments newTabArguments(@NonNull @CustomTabType String type) { - return parseTabArguments(type, "{}"); + try { + return TabArguments.parse(type, "{}"); + } catch (IOException e) { + throw new RuntimeException(e); + } } @Nullable public static TabExtras newTabExtras(@NonNull @CustomTabType String type) { - return parseTabExtras(type, "{}"); - } - - @Nullable - public static TabArguments parseTabArguments(@NonNull @CustomTabType String type, String json) { - switch (type) { - case CustomTabType.HOME_TIMELINE: - case CustomTabType.NOTIFICATIONS_TIMELINE: - case CustomTabType.DIRECT_MESSAGES: { - return JsonSerializer.parse(json, TabArguments.class); - } - case CustomTabType.USER_TIMELINE: - case CustomTabType.FAVORITES: { - return JsonSerializer.parse(json, UserArguments.class); - } - case CustomTabType.LIST_TIMELINE: { - return JsonSerializer.parse(json, UserListArguments.class); - } - case CustomTabType.SEARCH_STATUSES: { - return JsonSerializer.parse(json, TextQueryArguments.class); - } + try { + return TabExtras.parse(type, "{}"); + } catch (IOException e) { + throw new RuntimeException(e); } - return null; - } - - @Nullable - public static TabExtras parseTabExtras(@NonNull @CustomTabType String type, String json) { - switch (type) { - case CustomTabType.NOTIFICATIONS_TIMELINE: { - return JsonSerializer.parse(json, InteractionsTabExtras.class); - } - case CustomTabType.HOME_TIMELINE: { - return JsonSerializer.parse(json, HomeTabExtras.class); - } - } - return null; } @Nullable @@ -180,18 +155,7 @@ public class CustomTabUtils implements Constants { public static TabConfiguration getTabConfiguration(final String tabType) { if (tabType == null) return null; - return TabConfiguration.ofType(getTabTypeAlias(tabType)); - } - - @CustomTabType - public static String getTabTypeAlias(String key) { - if (key == null) return null; - switch (key) { - case "mentions_timeline": - case "activities_about_me": - return CustomTabType.NOTIFICATIONS_TIMELINE; - } - return key; + return TabConfiguration.ofType(Tab.getTypeAlias(tabType)); } public static Drawable getTabIconDrawable(final Context context, final DrawableHolder icon) { @@ -221,7 +185,7 @@ public class CustomTabUtils implements Constants { } public static boolean isTabTypeValid(final String tabType) { - return tabType != null && TabConfiguration.ofType(getTabTypeAlias(tabType)) != null; + return tabType != null && TabConfiguration.ofType(Tab.getTypeAlias(tabType)) != null; } public static boolean hasAccountId(final Context context, @NonNull final Bundle args, diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/DataImportExportUtils.java b/twidere/src/main/java/org/mariotaku/twidere/util/DataImportExportUtils.java index 34d86f72f..4e7738717 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/util/DataImportExportUtils.java +++ b/twidere/src/main/java/org/mariotaku/twidere/util/DataImportExportUtils.java @@ -152,7 +152,7 @@ public class DataImportExportUtils implements Constants { } private static List queryAll(ContentResolver cr, Uri uri, String[] projection, - Class> cls) { + Class> cls) throws IOException { Cursor c = cr.query(uri, projection, null, null, null); if (c == null) return null; try { @@ -241,7 +241,7 @@ public class DataImportExportUtils implements Constants { if (hasFlag(flags, FLAG_FILTERS)) { importItem(context, zipFile, ENTRY_FILTERS, FiltersData.class, new ContentResolverProcessStrategy() { @Override - public boolean importItem(ContentResolver cr, FiltersData filtersData) { + public boolean importItem(ContentResolver cr, FiltersData filtersData) throws IOException { if (filtersData == null) return false; insertBase(cr, Filters.Keywords.CONTENT_URI, filtersData.getKeywords()); insertBase(cr, Filters.Sources.CONTENT_URI, filtersData.getSources()); @@ -250,7 +250,7 @@ public class DataImportExportUtils implements Constants { return true; } - void insertBase(ContentResolver cr, Uri uri, List items) { + void insertBase(ContentResolver cr, Uri uri, List items) throws IOException { if (items == null) return; List values = new ArrayList<>(items.size()); for (FiltersData.BaseItem item : items) { @@ -259,7 +259,7 @@ public class DataImportExportUtils implements Constants { ContentResolverUtils.bulkInsert(cr, uri, values); } - void insertUser(ContentResolver cr, Uri uri, List items) { + void insertUser(ContentResolver cr, Uri uri, List items) throws IOException { if (items == null) return; List values = new ArrayList<>(items.size()); for (FiltersData.UserItem item : items) { @@ -272,7 +272,7 @@ public class DataImportExportUtils implements Constants { if (hasFlag(flags, FLAG_TABS)) { importItemsList(context, zipFile, ENTRY_TABS, Tab.class, new ContentResolverProcessStrategy>() { @Override - public boolean importItem(ContentResolver cr, List items) { + public boolean importItem(ContentResolver cr, List items) throws IOException { if (items == null) return false; List values = new ArrayList<>(items.size()); for (Tab item : items) { @@ -380,7 +380,7 @@ public class DataImportExportUtils implements Constants { } private interface ContentResolverProcessStrategy { - boolean importItem(ContentResolver cr, T item); + boolean importItem(ContentResolver cr, T item) throws IOException; } private interface SharedPreferencesProcessStrategy { diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/DataStoreUtils.java b/twidere/src/main/java/org/mariotaku/twidere/util/DataStoreUtils.java index 5679794a7..0c678f853 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/util/DataStoreUtils.java +++ b/twidere/src/main/java/org/mariotaku/twidere/util/DataStoreUtils.java @@ -1064,6 +1064,8 @@ public class DataStoreUtils implements Constants { values.put(activity._id, ParcelableActivityValuesCreator.create(activity)); c.moveToNext(); } + } catch (IOException e) { + return; } finally { c.close(); } @@ -1110,7 +1112,7 @@ public class DataStoreUtils implements Constants { } public static int queryCount(@NonNull final Context context, @NonNull final Uri uri, - @Nullable final String selection, @Nullable final String[] selectionArgs) { + @Nullable final String selection, @Nullable final String[] selectionArgs) { final ContentResolver resolver = context.getContentResolver(); final String[] projection = new String[]{SQLFunctions.COUNT()}; final Cursor cur = resolver.query(uri, projection, selection, selectionArgs, null); @@ -1137,20 +1139,25 @@ public class DataStoreUtils implements Constants { final Cursor cur = context.getContentResolver().query(Accounts.CONTENT_URI, Accounts.COLUMNS, selection, null, Accounts.SORT_POSITION); if (cur == null) return accounts; final ParcelableCredentialsCursorIndices indices = new ParcelableCredentialsCursorIndices(cur); - cur.moveToFirst(); - while (!cur.isAfterLast()) { - if (!officialKeyOnly) { - accounts.add(indices.newObject(cur)); - } else { - final String consumerKey = cur.getString(indices.consumer_key); - final String consumerSecret = cur.getString(indices.consumer_secret); - if (TwitterContentUtils.isOfficialKey(context, consumerKey, consumerSecret)) { + try { + cur.moveToFirst(); + while (!cur.isAfterLast()) { + if (!officialKeyOnly) { accounts.add(indices.newObject(cur)); + } else { + final String consumerKey = cur.getString(indices.consumer_key); + final String consumerSecret = cur.getString(indices.consumer_secret); + if (TwitterContentUtils.isOfficialKey(context, consumerKey, consumerSecret)) { + accounts.add(indices.newObject(cur)); + } } + cur.moveToNext(); } - cur.moveToNext(); + } catch (IOException e) { + return Collections.emptyList(); + } finally { + cur.close(); } - cur.close(); return accounts; } @@ -1225,19 +1232,24 @@ public class DataStoreUtils implements Constants { if (cur == null) return accounts; ParcelableCredentialsCursorIndices indices = new ParcelableCredentialsCursorIndices(cur); cur.moveToFirst(); - while (!cur.isAfterLast()) { - if (officialKeyOnly) { - final String consumerKey = cur.getString(indices.consumer_key); - final String consumerSecret = cur.getString(indices.consumer_secret); - if (TwitterContentUtils.isOfficialKey(context, consumerKey, consumerSecret)) { + try { + while (!cur.isAfterLast()) { + if (officialKeyOnly) { + final String consumerKey = cur.getString(indices.consumer_key); + final String consumerSecret = cur.getString(indices.consumer_secret); + if (TwitterContentUtils.isOfficialKey(context, consumerKey, consumerSecret)) { + accounts.add(indices.newObject(cur)); + } + } else { accounts.add(indices.newObject(cur)); } - } else { - accounts.add(indices.newObject(cur)); + cur.moveToNext(); } - cur.moveToNext(); + } catch (IOException e) { + return Collections.emptyList(); + } finally { + cur.close(); } - cur.close(); return accounts; } 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 0e6e1c661..7dc0f4c6b 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/util/Utils.java +++ b/twidere/src/main/java/org/mariotaku/twidere/util/Utils.java @@ -111,6 +111,7 @@ import org.mariotaku.twidere.model.ParcelableCredentials; import org.mariotaku.twidere.model.ParcelableDirectMessage; import org.mariotaku.twidere.model.ParcelableDirectMessageCursorIndices; import org.mariotaku.twidere.model.ParcelableStatus; +import org.mariotaku.twidere.model.ParcelableStatusValuesCreator; import org.mariotaku.twidere.model.ParcelableStatusCursorIndices; import org.mariotaku.twidere.model.ParcelableUser; import org.mariotaku.twidere.model.ParcelableUserMention; @@ -422,10 +423,15 @@ public final class Utils implements Constants { if (cur == null) { continue; } - if (cur.getCount() > 0 && cur.moveToFirst()) { - message = ParcelableDirectMessageCursorIndices.fromCursor(cur); + try { + if (cur.getCount() > 0 && cur.moveToFirst()) { + message = ParcelableDirectMessageCursorIndices.fromCursor(cur); + } + } catch (IOException e) { + // Ignore + } finally { + cur.close(); } - cur.close(); } return message; } @@ -440,14 +446,19 @@ public final class Utils implements Constants { if (cached != null) return cached; final MicroBlog twitter = MicroBlogAPIFactory.getInstance(context, accountKey, true); if (twitter == null) throw new MicroBlogException("Account does not exist"); - final Status status = twitter.showStatus(statusId); + final Status result = twitter.showStatus(statusId); final String where = Expression.and(Expression.equalsArgs(Statuses.ACCOUNT_KEY), Expression.equalsArgs(Statuses.STATUS_ID)).getSQL(); final String[] whereArgs = {accountKey.toString(), statusId}; final ContentResolver resolver = context.getContentResolver(); + final ParcelableStatus status = ParcelableStatusUtils.INSTANCE.fromStatus(result, accountKey, false); resolver.delete(CachedStatuses.CONTENT_URI, where, whereArgs); - resolver.insert(CachedStatuses.CONTENT_URI, ContentValuesCreator.createStatus(status, accountKey)); - return ParcelableStatusUtils.INSTANCE.fromStatus(status, accountKey, false); + try { + resolver.insert(CachedStatuses.CONTENT_URI, ParcelableStatusValuesCreator.create(status)); + } catch (IOException e) { + // Ignore + } + return status; } @Nullable @@ -465,11 +476,15 @@ public final class Utils implements Constants { if (cur == null) { continue; } - if (cur.getCount() > 0) { - cur.moveToFirst(); - status = ParcelableStatusCursorIndices.fromCursor(cur); + try { + if (cur.getCount() > 0 && cur.moveToFirst()) { + status = ParcelableStatusCursorIndices.fromCursor(cur); + } + } catch (IOException e) { + // Ignore + } finally { + cur.close(); } - cur.close(); } return status; } diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/activity/HomeActivity.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/activity/HomeActivity.kt index 4eb25648e..bf6a1f181 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/activity/HomeActivity.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/activity/HomeActivity.kt @@ -71,6 +71,7 @@ import org.mariotaku.twidere.fragment.iface.SupportFragmentCallback import org.mariotaku.twidere.graphic.EmptyDrawable import org.mariotaku.twidere.model.ParcelableAccount import org.mariotaku.twidere.model.SupportTabSpec +import org.mariotaku.twidere.model.Tab import org.mariotaku.twidere.model.UserKey import org.mariotaku.twidere.model.message.TaskStateChangedEvent import org.mariotaku.twidere.model.message.UnreadCountUpdatedEvent @@ -681,7 +682,7 @@ class HomeActivity : BaseActivity(), OnClickListener, OnPageChangeListener, Supp val accountKey = UserKey.valueOf(uri!!.getQueryParameter(QUERY_PARAM_ACCOUNT_KEY)) for (i in 0 until pagerAdapter!!.count) { val tab = pagerAdapter!!.getTab(i) - if (tabType == CustomTabUtils.getTabTypeAlias(tab.type)) { + if (tabType == Tab.getTypeAlias(tab.type)) { val args = tab.args if (args != null && CustomTabUtils.hasAccountId(this, args, activatedAccountKeys, accountKey)) { diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/receiver/NotificationReceiver.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/receiver/NotificationReceiver.kt index 3f335e201..89e16cc23 100644 --- a/twidere/src/main/kotlin/org/mariotaku/twidere/receiver/NotificationReceiver.kt +++ b/twidere/src/main/kotlin/org/mariotaku/twidere/receiver/NotificationReceiver.kt @@ -32,6 +32,7 @@ import org.mariotaku.twidere.annotation.NotificationType import org.mariotaku.twidere.annotation.ReadPositionTag import org.mariotaku.twidere.constant.IntentConstants.BROADCAST_NOTIFICATION_DELETED import org.mariotaku.twidere.model.StringLongPair +import org.mariotaku.twidere.model.Tab import org.mariotaku.twidere.model.UserKey import org.mariotaku.twidere.util.CustomTabUtils import org.mariotaku.twidere.util.UriExtraUtils @@ -56,7 +57,7 @@ class NotificationReceiver : BroadcastReceiver() { val itemUserId = UriExtraUtils.getExtra(uri, "item_user_id")?.toLong(-1) ?: -1 val itemUserFollowing = UriExtraUtils.getExtra(uri, "item_user_following")?.toBoolean() ?: false val timestamp = uri.getQueryParameter(QUERY_PARAM_TIMESTAMP)?.toLong() ?: -1 - if (CustomTabType.NOTIFICATIONS_TIMELINE == CustomTabUtils.getTabTypeAlias(notificationType) + if (CustomTabType.NOTIFICATIONS_TIMELINE == Tab.getTypeAlias(notificationType) && accountKey != null && itemId != -1L && timestamp != -1L) { val logger = holder.hotMobiLogger logger.log(accountKey, NotificationEvent.deleted(context, timestamp, notificationType, accountKey, diff --git a/twidere/src/main/res/layout/header_status_common.xml b/twidere/src/main/res/layout/header_status_common.xml index 42b9f1866..1029a9e9b 100644 --- a/twidere/src/main/res/layout/header_status_common.xml +++ b/twidere/src/main/res/layout/header_status_common.xml @@ -274,8 +274,8 @@ - + android:src="@drawable/ic_action_gallery" + android:visibility="visible" + app:iabColor="?android:textColorSecondary" + tools:visibility="gone"/>