From 004f26ad98145bafb39ca2b4edffa465c4c417ea Mon Sep 17 00:00:00 2001 From: Mariotaku Lee Date: Sat, 30 Apr 2016 13:35:35 +0800 Subject: [PATCH] make media decoding faster --- build.gradle | 2 +- twidere.component.common/build.gradle | 2 + .../Twidere_ParameterizedTypeAccessor.java | 36 ----- .../org/mariotaku/twidere/model/Draft.java | 2 +- .../twidere/model/ParcelableAccount.java | 2 +- .../twidere/model/ParcelableActivity.java | 2 +- .../model/ParcelableDirectMessage.java | 2 +- .../twidere/model/ParcelableStatus.java | 2 +- .../twidere/model/ParcelableUser.java | 2 +- .../util/AbsArrayCursorFieldConverter.java | 89 ------------- .../model/util/DraftExtrasConverter.java | 2 +- .../util/LoganSquareCursorFieldConverter.java | 124 ------------------ .../util/LongArrayCursorFieldConverter.java | 84 ------------ .../util/UserKeysCursorFieldConverter.java | 1 + .../twidere/util/LoganSquareMapperFinder.java | 79 ----------- .../twidere/service/MediaUploaderService.java | 3 +- .../service/StatusShortenerService.java | 3 +- .../LoganSquareCursorFieldConverterTest.java | 100 -------------- .../model/util/LongArrayConverterTest.java | 32 ----- .../twidere/activity/MediaViewerActivity.java | 2 +- .../api/twitter/UserStreamCallback.java | 2 +- .../twitter/util/TwitterConverterFactory.java | 2 +- .../twidere/fragment/ItemsListFragment.java | 18 +++ .../loader/TwitterAPIStatusesLoader.java | 2 +- .../twidere/provider/CacheProvider.java | 2 +- .../twidere/provider/TwidereDataProvider.java | 3 +- .../twidere/util/DataImportExportUtils.java | 1 + .../twidere/util/DataStoreUtils.java | 1 + .../twidere/util/JsonSerializer.java | 2 + .../mariotaku/twidere/util/LinkCreator.java | 4 +- .../twidere/util/TwitterAPIFactory.java | 11 +- .../drawable-hdpi/ic_action_more_vertical.png | Bin 125 -> 0 bytes .../drawable-mdpi/ic_action_more_vertical.png | Bin 103 -> 0 bytes .../ic_action_more_vertical.png | Bin 157 -> 0 bytes .../ic_action_more_vertical.png | Bin 228 -> 0 bytes .../drawable/ic_action_more_vertical-mdpi.svg | 13 ++ 36 files changed, 65 insertions(+), 567 deletions(-) delete mode 100644 twidere.component.common/src/main/java/com/bluelinelabs/logansquare/Twidere_ParameterizedTypeAccessor.java delete mode 100644 twidere.component.common/src/main/java/org/mariotaku/twidere/model/util/AbsArrayCursorFieldConverter.java delete mode 100644 twidere.component.common/src/main/java/org/mariotaku/twidere/model/util/LoganSquareCursorFieldConverter.java delete mode 100644 twidere.component.common/src/main/java/org/mariotaku/twidere/model/util/LongArrayCursorFieldConverter.java delete mode 100644 twidere.component.common/src/main/java/org/mariotaku/twidere/util/LoganSquareMapperFinder.java delete mode 100644 twidere/src/androidTest/java/org/mariotaku/twidere/model/util/LoganSquareCursorFieldConverterTest.java delete mode 100644 twidere/src/androidTest/java/org/mariotaku/twidere/model/util/LongArrayConverterTest.java delete mode 100644 twidere/src/main/res/drawable-hdpi/ic_action_more_vertical.png delete mode 100644 twidere/src/main/res/drawable-mdpi/ic_action_more_vertical.png delete mode 100644 twidere/src/main/res/drawable-xhdpi/ic_action_more_vertical.png delete mode 100644 twidere/src/main/res/drawable-xxhdpi/ic_action_more_vertical.png create mode 100644 twidere/src/main/svg/drawable/ic_action_more_vertical-mdpi.svg diff --git a/build.gradle b/build.gradle index 809d2a228..7a0a4fd72 100644 --- a/build.gradle +++ b/build.gradle @@ -8,7 +8,7 @@ buildscript { } dependencies { classpath 'com.github.ben-manes:gradle-versions-plugin:0.12.0' - classpath 'com.android.tools.build:gradle:2.0.0' + classpath 'com.android.tools.build:gradle:2.1.0' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' classpath('fr.avianey.androidsvgdrawable:gradle-plugin:3.0.0') { // should be excluded to avoid conflict diff --git a/twidere.component.common/build.gradle b/twidere.component.common/build.gradle index 87938a545..500159593 100644 --- a/twidere.component.common/build.gradle +++ b/twidere.component.common/build.gradle @@ -44,5 +44,7 @@ dependencies { compile 'com.github.mariotaku.RestFu:library:0.9.27' compile 'com.hannesdorfmann.parcelableplease:annotation:1.0.2' compile 'com.github.mariotaku.ObjectCursor:core:0.9.7' + compile 'com.github.mariotaku.CommonsLibrary:objectcursor:0.9.4' + compile 'com.github.mariotaku.CommonsLibrary:logansquare:0.9.4' compile fileTree(dir: 'libs', include: ['*.jar']) } diff --git a/twidere.component.common/src/main/java/com/bluelinelabs/logansquare/Twidere_ParameterizedTypeAccessor.java b/twidere.component.common/src/main/java/com/bluelinelabs/logansquare/Twidere_ParameterizedTypeAccessor.java deleted file mode 100644 index 333b3c023..000000000 --- a/twidere.component.common/src/main/java/com/bluelinelabs/logansquare/Twidere_ParameterizedTypeAccessor.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Twidere - Twitter client for Android - * - * Copyright (C) 2012-2015 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 com.bluelinelabs.logansquare; - -import java.lang.reflect.Type; - -/** - * Created by mariotaku on 15/12/13. - */ -public class Twidere_ParameterizedTypeAccessor { - - private Twidere_ParameterizedTypeAccessor() { - } - - public static ParameterizedType create(Type type) { - return new ParameterizedType.ConcreteParameterizedType<>(type); - } - -} diff --git a/twidere.component.common/src/main/java/org/mariotaku/twidere/model/Draft.java b/twidere.component.common/src/main/java/org/mariotaku/twidere/model/Draft.java index 62d135958..4b318b0ef 100644 --- a/twidere.component.common/src/main/java/org/mariotaku/twidere/model/Draft.java +++ b/twidere.component.common/src/main/java/org/mariotaku/twidere/model/Draft.java @@ -27,11 +27,11 @@ import android.support.annotation.StringDef; import com.hannesdorfmann.parcelableplease.annotation.ParcelablePlease; import com.hannesdorfmann.parcelableplease.annotation.ParcelableThisPlease; +import org.mariotaku.commons.objectcursor.LoganSquareCursorFieldConverter; import org.mariotaku.library.objectcursor.annotation.CursorField; import org.mariotaku.library.objectcursor.annotation.CursorObject; import org.mariotaku.twidere.model.draft.ActionExtra; import org.mariotaku.twidere.model.util.DraftExtrasConverter; -import org.mariotaku.twidere.model.util.LoganSquareCursorFieldConverter; import org.mariotaku.twidere.model.util.UserKeysCursorFieldConverter; import org.mariotaku.twidere.provider.TwidereDataStore.Drafts; diff --git a/twidere.component.common/src/main/java/org/mariotaku/twidere/model/ParcelableAccount.java b/twidere.component.common/src/main/java/org/mariotaku/twidere/model/ParcelableAccount.java index fee916de6..9c0d684d9 100644 --- a/twidere.component.common/src/main/java/org/mariotaku/twidere/model/ParcelableAccount.java +++ b/twidere.component.common/src/main/java/org/mariotaku/twidere/model/ParcelableAccount.java @@ -30,10 +30,10 @@ import com.bluelinelabs.logansquare.annotation.OnJsonParseComplete; import com.hannesdorfmann.parcelableplease.annotation.ParcelablePlease; import com.hannesdorfmann.parcelableplease.annotation.ParcelableThisPlease; +import org.mariotaku.commons.objectcursor.LoganSquareCursorFieldConverter; import org.mariotaku.library.objectcursor.annotation.AfterCursorObjectCreated; import org.mariotaku.library.objectcursor.annotation.CursorField; import org.mariotaku.library.objectcursor.annotation.CursorObject; -import org.mariotaku.twidere.model.util.LoganSquareCursorFieldConverter; import org.mariotaku.twidere.model.util.UserKeyConverter; import org.mariotaku.twidere.model.util.UserKeyCursorFieldConverter; import org.mariotaku.twidere.provider.TwidereDataStore.Accounts; diff --git a/twidere.component.common/src/main/java/org/mariotaku/twidere/model/ParcelableActivity.java b/twidere.component.common/src/main/java/org/mariotaku/twidere/model/ParcelableActivity.java index 4b9cf32b0..94e53fe75 100644 --- a/twidere.component.common/src/main/java/org/mariotaku/twidere/model/ParcelableActivity.java +++ b/twidere.component.common/src/main/java/org/mariotaku/twidere/model/ParcelableActivity.java @@ -29,9 +29,9 @@ import com.bluelinelabs.logansquare.annotation.JsonObject; import com.hannesdorfmann.parcelableplease.annotation.ParcelablePlease; import com.hannesdorfmann.parcelableplease.annotation.ParcelableThisPlease; +import org.mariotaku.commons.objectcursor.LoganSquareCursorFieldConverter; import org.mariotaku.library.objectcursor.annotation.CursorField; import org.mariotaku.library.objectcursor.annotation.CursorObject; -import org.mariotaku.twidere.model.util.LoganSquareCursorFieldConverter; import org.mariotaku.twidere.model.util.UserKeyConverter; import org.mariotaku.twidere.model.util.UserKeyCursorFieldConverter; import org.mariotaku.twidere.model.util.UserKeysConverter; diff --git a/twidere.component.common/src/main/java/org/mariotaku/twidere/model/ParcelableDirectMessage.java b/twidere.component.common/src/main/java/org/mariotaku/twidere/model/ParcelableDirectMessage.java index d73158852..8948729c7 100644 --- a/twidere.component.common/src/main/java/org/mariotaku/twidere/model/ParcelableDirectMessage.java +++ b/twidere.component.common/src/main/java/org/mariotaku/twidere/model/ParcelableDirectMessage.java @@ -28,11 +28,11 @@ import com.bluelinelabs.logansquare.annotation.JsonObject; import com.hannesdorfmann.parcelableplease.annotation.ParcelablePlease; import com.hannesdorfmann.parcelableplease.annotation.ParcelableThisPlease; +import org.mariotaku.commons.objectcursor.LoganSquareCursorFieldConverter; import org.mariotaku.library.objectcursor.annotation.CursorField; import org.mariotaku.library.objectcursor.annotation.CursorObject; import org.mariotaku.twidere.model.util.UserKeyConverter; import org.mariotaku.twidere.model.util.UserKeyCursorFieldConverter; -import org.mariotaku.twidere.model.util.LoganSquareCursorFieldConverter; import org.mariotaku.twidere.provider.TwidereDataStore.DirectMessages; import java.util.Arrays; diff --git a/twidere.component.common/src/main/java/org/mariotaku/twidere/model/ParcelableStatus.java b/twidere.component.common/src/main/java/org/mariotaku/twidere/model/ParcelableStatus.java index a53f0bfc2..81426f268 100644 --- a/twidere.component.common/src/main/java/org/mariotaku/twidere/model/ParcelableStatus.java +++ b/twidere.component.common/src/main/java/org/mariotaku/twidere/model/ParcelableStatus.java @@ -31,10 +31,10 @@ import com.bluelinelabs.logansquare.annotation.OnJsonParseComplete; import com.hannesdorfmann.parcelableplease.annotation.ParcelablePlease; import com.hannesdorfmann.parcelableplease.annotation.ParcelableThisPlease; +import org.mariotaku.commons.objectcursor.LoganSquareCursorFieldConverter; import org.mariotaku.library.objectcursor.annotation.AfterCursorObjectCreated; import org.mariotaku.library.objectcursor.annotation.CursorField; import org.mariotaku.library.objectcursor.annotation.CursorObject; -import org.mariotaku.twidere.model.util.LoganSquareCursorFieldConverter; import org.mariotaku.twidere.model.util.UserKeyConverter; import org.mariotaku.twidere.model.util.UserKeyCursorFieldConverter; import org.mariotaku.twidere.provider.TwidereDataStore; diff --git a/twidere.component.common/src/main/java/org/mariotaku/twidere/model/ParcelableUser.java b/twidere.component.common/src/main/java/org/mariotaku/twidere/model/ParcelableUser.java index f3613e486..703726654 100644 --- a/twidere.component.common/src/main/java/org/mariotaku/twidere/model/ParcelableUser.java +++ b/twidere.component.common/src/main/java/org/mariotaku/twidere/model/ParcelableUser.java @@ -28,10 +28,10 @@ import com.bluelinelabs.logansquare.annotation.JsonObject; import com.hannesdorfmann.parcelableplease.annotation.ParcelablePlease; import com.hannesdorfmann.parcelableplease.annotation.ParcelableThisPlease; +import org.mariotaku.commons.objectcursor.LoganSquareCursorFieldConverter; import org.mariotaku.library.objectcursor.annotation.AfterCursorObjectCreated; import org.mariotaku.library.objectcursor.annotation.CursorField; import org.mariotaku.library.objectcursor.annotation.CursorObject; -import org.mariotaku.twidere.model.util.LoganSquareCursorFieldConverter; import org.mariotaku.twidere.model.util.UserKeyConverter; import org.mariotaku.twidere.model.util.UserKeyCursorFieldConverter; import org.mariotaku.twidere.provider.TwidereDataStore.CachedUsers; diff --git a/twidere.component.common/src/main/java/org/mariotaku/twidere/model/util/AbsArrayCursorFieldConverter.java b/twidere.component.common/src/main/java/org/mariotaku/twidere/model/util/AbsArrayCursorFieldConverter.java deleted file mode 100644 index f45d3a7ec..000000000 --- a/twidere.component.common/src/main/java/org/mariotaku/twidere/model/util/AbsArrayCursorFieldConverter.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Twidere - Twitter client for Android - * - * Copyright (C) 2012-2015 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.model.util; - -import android.content.ContentValues; -import android.database.Cursor; -import android.text.TextUtils; - -import org.mariotaku.library.objectcursor.converter.CursorFieldConverter; - -import java.lang.reflect.ParameterizedType; - -/** - * Created by mariotaku on 15/11/27. - */ -public abstract class AbsArrayCursorFieldConverter implements CursorFieldConverter { - @Override - public final T[] parseField(Cursor cursor, int columnIndex, ParameterizedType fieldType) { - final String string = cursor.getString(columnIndex); - if (TextUtils.isEmpty(string)) return null; - - T[] temp = newArray(0); - int len = 0; - int offset = 0; - try { - while (true) { - int index = string.indexOf(',', offset); - if (index == -1) { - temp = putElement(temp, parseItem(string.substring(offset)), len++); - T[] out = newArray(len); - System.arraycopy(temp, 0, out, 0, len); - return out; - } else { - temp = putElement(temp, parseItem(string.substring(offset, index)), len++); - offset = (index + 1); - } - } - } catch (NumberFormatException e) { - return null; - } - } - - @Override - public final void writeField(ContentValues values, T[] object, String columnName, ParameterizedType fieldType) { - if (object == null) return; - final StringBuilder sb = new StringBuilder(); - for (int i = 0, j = object.length; i < j; i++) { - if (i > 0) { - sb.append(','); - } - sb.append(object[i]); - } - values.put(columnName, sb.toString()); - } - - protected abstract T[] newArray(int size); - - protected abstract T parseItem(String s); - - private T[] putElement(T[] array, T element, int index) { - T[] out; - if (index < array.length) { - out = array; - } else { - out = newArray(Math.max(1, array.length) * 2); - System.arraycopy(array, 0, out, 0, array.length); - } - out[index] = element; - return out; - } - -} diff --git a/twidere.component.common/src/main/java/org/mariotaku/twidere/model/util/DraftExtrasConverter.java b/twidere.component.common/src/main/java/org/mariotaku/twidere/model/util/DraftExtrasConverter.java index 98915a142..319a0d189 100644 --- a/twidere.component.common/src/main/java/org/mariotaku/twidere/model/util/DraftExtrasConverter.java +++ b/twidere.component.common/src/main/java/org/mariotaku/twidere/model/util/DraftExtrasConverter.java @@ -12,7 +12,7 @@ import org.mariotaku.twidere.model.draft.ActionExtra; import org.mariotaku.twidere.model.draft.SendDirectMessageActionExtra; import org.mariotaku.twidere.model.draft.UpdateStatusActionExtra; import org.mariotaku.twidere.provider.TwidereDataStore.Drafts; -import org.mariotaku.twidere.util.LoganSquareMapperFinder; +import org.mariotaku.commons.logansquare.LoganSquareMapperFinder; import java.io.IOException; import java.lang.reflect.ParameterizedType; diff --git a/twidere.component.common/src/main/java/org/mariotaku/twidere/model/util/LoganSquareCursorFieldConverter.java b/twidere.component.common/src/main/java/org/mariotaku/twidere/model/util/LoganSquareCursorFieldConverter.java deleted file mode 100644 index e0b158366..000000000 --- a/twidere.component.common/src/main/java/org/mariotaku/twidere/model/util/LoganSquareCursorFieldConverter.java +++ /dev/null @@ -1,124 +0,0 @@ -/* - * Twidere - Twitter client for Android - * - * Copyright (C) 2012-2015 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.model.util; - -import android.content.ContentValues; -import android.database.Cursor; -import android.text.TextUtils; - -import com.bluelinelabs.logansquare.JsonMapper; - -import org.mariotaku.library.objectcursor.converter.CursorFieldConverter; -import org.mariotaku.twidere.util.LoganSquareMapperFinder; - -import java.io.IOException; -import java.lang.reflect.Array; -import java.lang.reflect.ParameterizedType; -import java.lang.reflect.Type; -import java.util.Arrays; -import java.util.List; -import java.util.Map; - -/** - * Created by mariotaku on 15/11/27. - */ -public class LoganSquareCursorFieldConverter implements CursorFieldConverter { - @Override - public Object parseField(Cursor cursor, int columnIndex, ParameterizedType fieldType) { - try { - return getObject(cursor, columnIndex, fieldType); - } catch (IOException e) { - return null; - } - } - - @Override - public void writeField(ContentValues values, Object object, String columnName, ParameterizedType fieldType) { - try { - writeObject(values, object, columnName, fieldType); - } catch (IOException ignored) { - } - } - - private void writeObject(ContentValues values, T object, String columnName, ParameterizedType fieldType) throws IOException { - if (object == null) return; - if (isArray(fieldType)) { - final Class component = getArrayComponent(fieldType); - //noinspection unchecked - JsonMapper mapper = (JsonMapper) LoganSquareMapperFinder.mapperFor(component); - values.put(columnName, mapper.serialize(Arrays.asList((Object[]) object))); - } else if (fieldType.getRawType() == List.class) { - JsonMapper mapper = LoganSquareMapperFinder.mapperFor(fieldType.getActualTypeArguments()[0]); - //noinspection unchecked - values.put(columnName, mapper.serialize((List) object)); - } else if (fieldType.getRawType() == Map.class) { - JsonMapper mapper = LoganSquareMapperFinder.mapperFor(fieldType.getActualTypeArguments()[1]); - //noinspection unchecked - values.put(columnName, mapper.serialize((Map) object)); - } else { - JsonMapper mapper = LoganSquareMapperFinder.mapperFor(fieldType); - values.put(columnName, mapper.serialize(object)); - } - } - - private T getObject(Cursor cursor, int columnIndex, ParameterizedType fieldType) throws IOException { - final String string = cursor.getString(columnIndex); - if (TextUtils.isEmpty(string)) return null; - if (isArray(fieldType)) { - final Class component = getArrayComponent(fieldType); - //noinspection unchecked - JsonMapper mapper = (JsonMapper) LoganSquareMapperFinder.mapperFor(component); - final List list = mapper.parseList(string); - //noinspection unchecked - return (T) list.toArray((Object[]) Array.newInstance(component, list.size())); - } else if (fieldType.getRawType() == List.class) { - JsonMapper mapper = LoganSquareMapperFinder.mapperFor(fieldType.getActualTypeArguments()[0]); - //noinspection unchecked - return (T) mapper.parseList(string); - } else if (fieldType.getRawType() == Map.class) { - JsonMapper mapper = LoganSquareMapperFinder.mapperFor(fieldType.getActualTypeArguments()[1]); - //noinspection unchecked - return (T) mapper.parseMap(string); - } else { - JsonMapper mapper = LoganSquareMapperFinder.mapperFor(fieldType); - return mapper.parse(string); - } - } - - private boolean isArray(Type type) { - if (type instanceof Class) { - return ((Class) type).isArray(); - } else if (type instanceof ParameterizedType) { - return isArray(((ParameterizedType) type).getRawType()); - } - return false; - } - - private Class getArrayComponent(Type type) { - if (type instanceof Class) { - if (((Class) type).isArray()) { - return ((Class) type).getComponentType(); - } - } else if (type instanceof ParameterizedType) { - return getArrayComponent(((ParameterizedType) type).getRawType()); - } - throw new UnsupportedOperationException(); - } -} diff --git a/twidere.component.common/src/main/java/org/mariotaku/twidere/model/util/LongArrayCursorFieldConverter.java b/twidere.component.common/src/main/java/org/mariotaku/twidere/model/util/LongArrayCursorFieldConverter.java deleted file mode 100644 index 90098f1ab..000000000 --- a/twidere.component.common/src/main/java/org/mariotaku/twidere/model/util/LongArrayCursorFieldConverter.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Twidere - Twitter client for Android - * - * Copyright (C) 2012-2015 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.model.util; - -import android.content.ContentValues; -import android.database.Cursor; -import android.text.TextUtils; - -import org.mariotaku.library.objectcursor.converter.CursorFieldConverter; - -import java.lang.reflect.ParameterizedType; - -/** - * Created by mariotaku on 15/11/27. - */ -public class LongArrayCursorFieldConverter implements CursorFieldConverter { - @Override - public long[] parseField(Cursor cursor, int columnIndex, ParameterizedType fieldType) { - final String string = cursor.getString(columnIndex); - if (TextUtils.isEmpty(string)) return null; - - long[] temp = new long[0]; - int len = 0; - int offset = 0; - try { - while (true) { - int index = string.indexOf(',', offset); - if (index == -1) { - temp = putElement(temp, Long.parseLong(string.substring(offset)), len++); - long[] out = new long[len]; - System.arraycopy(temp, 0, out, 0, len); - return out; - } else { - temp = putElement(temp, Long.parseLong(string.substring(offset, index)), len++); - offset = (index + 1); - } - } - } catch (NumberFormatException e) { - return null; - } - } - - @Override - public void writeField(ContentValues values, long[] object, String columnName, ParameterizedType fieldType) { - if (object == null) return; - final StringBuilder sb = new StringBuilder(); - for (int i = 0, j = object.length; i < j; i++) { - if (i > 0) { - sb.append(','); - } - sb.append(object[i]); - } - values.put(columnName, sb.toString()); - } - - private static long[] putElement(long[] array, long element, int index) { - long[] out; - if (index < array.length) { - out = array; - } else { - out = new long[Math.max(1, array.length) * 2]; - System.arraycopy(array, 0, out, 0, array.length); - } - out[index] = element; - return out; - } -} diff --git a/twidere.component.common/src/main/java/org/mariotaku/twidere/model/util/UserKeysCursorFieldConverter.java b/twidere.component.common/src/main/java/org/mariotaku/twidere/model/util/UserKeysCursorFieldConverter.java index d066630f0..c09636499 100644 --- a/twidere.component.common/src/main/java/org/mariotaku/twidere/model/util/UserKeysCursorFieldConverter.java +++ b/twidere.component.common/src/main/java/org/mariotaku/twidere/model/util/UserKeysCursorFieldConverter.java @@ -1,5 +1,6 @@ package org.mariotaku.twidere.model.util; +import org.mariotaku.commons.objectcursor.AbsArrayCursorFieldConverter; import org.mariotaku.twidere.model.UserKey; /** diff --git a/twidere.component.common/src/main/java/org/mariotaku/twidere/util/LoganSquareMapperFinder.java b/twidere.component.common/src/main/java/org/mariotaku/twidere/util/LoganSquareMapperFinder.java deleted file mode 100644 index 8fff42d39..000000000 --- a/twidere.component.common/src/main/java/org/mariotaku/twidere/util/LoganSquareMapperFinder.java +++ /dev/null @@ -1,79 +0,0 @@ -package org.mariotaku.twidere.util; - -import com.bluelinelabs.logansquare.JsonMapper; -import com.bluelinelabs.logansquare.LoganSquare; -import com.bluelinelabs.logansquare.ParameterizedType; -import com.bluelinelabs.logansquare.Twidere_ParameterizedTypeAccessor; - -import org.mariotaku.twidere.common.BuildConfig; - -import java.io.IOException; -import java.lang.reflect.Type; -import java.util.concurrent.Callable; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.Future; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; - -/** - * Created by mariotaku on 16/2/19. - */ -public class LoganSquareMapperFinder { - private static final ExecutorService pool = Executors.newSingleThreadExecutor(); - - private LoganSquareMapperFinder() { - } - - public static JsonMapper mapperFor(Class cls) throws ClassLoaderDeadLockException { - return mapperFor(Twidere_ParameterizedTypeAccessor.create(cls)); - } - - public static JsonMapper mapperFor(Type type) throws ClassLoaderDeadLockException { - return mapperFor(Twidere_ParameterizedTypeAccessor.create(type)); - } - - public static JsonMapper mapperFor(final ParameterizedType type) throws ClassLoaderDeadLockException { - final Future> future = pool.submit(new Callable>() { - @Override - public JsonMapper call() { - return LoganSquare.mapperFor(type); - } - }); - final JsonMapper mapper; - //noinspection TryWithIdenticalCatches - try { - mapper = future.get(1, TimeUnit.SECONDS); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } catch (ExecutionException e) { - throw new RuntimeException(e); - } catch (TimeoutException e) { - if (BuildConfig.DEBUG) { - throw new RuntimeException(e); - } - BugReporter.logException(e); - throw new ClassLoaderDeadLockException(e); - } - return mapper; - } - - public static class ClassLoaderDeadLockException extends IOException { - public ClassLoaderDeadLockException() { - super(); - } - - public ClassLoaderDeadLockException(String detailMessage) { - super(detailMessage); - } - - public ClassLoaderDeadLockException(String message, Throwable cause) { - super(message, cause); - } - - public ClassLoaderDeadLockException(Throwable cause) { - super(cause); - } - } -} diff --git a/twidere.library.extension/src/main/java/org/mariotaku/twidere/service/MediaUploaderService.java b/twidere.library.extension/src/main/java/org/mariotaku/twidere/service/MediaUploaderService.java index 02c9423e6..52151ac7a 100644 --- a/twidere.library.extension/src/main/java/org/mariotaku/twidere/service/MediaUploaderService.java +++ b/twidere.library.extension/src/main/java/org/mariotaku/twidere/service/MediaUploaderService.java @@ -11,7 +11,7 @@ import org.mariotaku.twidere.model.MediaUploadResult; import org.mariotaku.twidere.model.ParcelableStatus; import org.mariotaku.twidere.model.ParcelableStatusUpdate; import org.mariotaku.twidere.model.UploaderMediaItem; -import org.mariotaku.twidere.util.LoganSquareMapperFinder; +import org.mariotaku.commons.logansquare.LoganSquareMapperFinder; import java.io.IOException; import java.lang.ref.WeakReference; @@ -26,6 +26,7 @@ public abstract class MediaUploaderService extends Service { private final MediaUploaderStub mBinder = new MediaUploaderStub(this); + @Override public final IBinder onBind(final Intent intent) { return mBinder; } diff --git a/twidere.library.extension/src/main/java/org/mariotaku/twidere/service/StatusShortenerService.java b/twidere.library.extension/src/main/java/org/mariotaku/twidere/service/StatusShortenerService.java index 310d7ea18..04e91bea1 100644 --- a/twidere.library.extension/src/main/java/org/mariotaku/twidere/service/StatusShortenerService.java +++ b/twidere.library.extension/src/main/java/org/mariotaku/twidere/service/StatusShortenerService.java @@ -11,7 +11,7 @@ import org.mariotaku.twidere.model.UserKey; import org.mariotaku.twidere.model.ParcelableStatus; import org.mariotaku.twidere.model.ParcelableStatusUpdate; import org.mariotaku.twidere.model.StatusShortenResult; -import org.mariotaku.twidere.util.LoganSquareMapperFinder; +import org.mariotaku.commons.logansquare.LoganSquareMapperFinder; import java.io.IOException; import java.lang.ref.WeakReference; @@ -24,6 +24,7 @@ import java.lang.ref.WeakReference; public abstract class StatusShortenerService extends Service { private final StatusShortenerStub mBinder = new StatusShortenerStub(this); + @Override public final IBinder onBind(final Intent intent) { return mBinder; } diff --git a/twidere/src/androidTest/java/org/mariotaku/twidere/model/util/LoganSquareCursorFieldConverterTest.java b/twidere/src/androidTest/java/org/mariotaku/twidere/model/util/LoganSquareCursorFieldConverterTest.java deleted file mode 100644 index 07154d4e3..000000000 --- a/twidere/src/androidTest/java/org/mariotaku/twidere/model/util/LoganSquareCursorFieldConverterTest.java +++ /dev/null @@ -1,100 +0,0 @@ -package org.mariotaku.twidere.model.util; - -import android.content.ContentValues; -import android.database.MatrixCursor; - -import com.bluelinelabs.logansquare.annotation.JsonField; -import com.bluelinelabs.logansquare.annotation.JsonObject; - -import org.apache.commons.lang3.reflect.TypeUtils; -import org.junit.Test; -import org.mariotaku.twidere.util.JsonSerializer; - -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.Map; - -import static org.junit.Assert.assertArrayEquals; -import static org.junit.Assert.assertEquals; - -/** - * Created by mariotaku on 16/2/19. - */ -public class LoganSquareCursorFieldConverterTest { - private final LoganSquareCursorFieldConverter converter = new LoganSquareCursorFieldConverter(); - - private final Model jsonObject = new Model("a"); - private final Model[] jsonArray = {new Model("a"), new Model("b"), new Model("c")}; - private final List jsonList = Arrays.asList(jsonArray); - private final Map jsonMap = Collections.singletonMap("key", new Model("value")); - - @Test - public void testParseField() throws Exception { - final String[] columns = {"json_object", "json_array", "json_list", "json_map"}; - MatrixCursor cursor = new MatrixCursor(columns); - cursor.addRow(new String[]{ - JsonSerializer.serialize(jsonObject, Model.class), - JsonSerializer.serialize(jsonArray, Model.class), - JsonSerializer.serialize(jsonList, Model.class), - JsonSerializer.serialize(jsonMap, Model.class) - }); - cursor.moveToFirst(); - assertEquals(jsonObject, converter.parseField(cursor, 0, TypeUtils.parameterize(Model.class))); - assertArrayEquals(jsonArray, (Model[]) converter.parseField(cursor, 1, TypeUtils.parameterize(Model[].class))); - assertEquals((Object) jsonList, converter.parseField(cursor, 2, TypeUtils.parameterize(List.class, Model.class))); - assertEquals((Object) jsonMap, converter.parseField(cursor, 3, TypeUtils.parameterize(Map.class, String.class, Model.class))); - } - - @Test - public void testWriteField() throws Exception { - final ContentValues contentValues = new ContentValues(); - converter.writeField(contentValues, jsonObject, "json_object", TypeUtils.parameterize(Model.class)); - converter.writeField(contentValues, jsonArray, "json_array", TypeUtils.parameterize(Model[].class)); - converter.writeField(contentValues, jsonList, "json_list", TypeUtils.parameterize(List.class, Model.class)); - converter.writeField(contentValues, jsonMap, "json_map", TypeUtils.parameterize(Map.class, String.class, Model.class)); - - assertEquals(JsonSerializer.serialize(jsonObject, Model.class), contentValues.getAsString("json_object")); - assertEquals(JsonSerializer.serialize(jsonArray, Model.class), contentValues.getAsString("json_array")); - assertEquals(JsonSerializer.serialize(jsonList, Model.class), contentValues.getAsString("json_list")); - assertEquals(JsonSerializer.serialize(jsonMap, Model.class), contentValues.getAsString("json_map")); - } - - @JsonObject - public static class Model { - @JsonField(name = "field") - String field; - - public Model() { - - } - - public Model(String field) { - this.field = field; - } - - public String getField() { - return field; - } - - public void setField(String field) { - this.field = field; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - Model model = (Model) o; - - return !(field != null ? !field.equals(model.field) : model.field != null); - - } - - @Override - public int hashCode() { - return field != null ? field.hashCode() : 0; - } - } -} \ No newline at end of file diff --git a/twidere/src/androidTest/java/org/mariotaku/twidere/model/util/LongArrayConverterTest.java b/twidere/src/androidTest/java/org/mariotaku/twidere/model/util/LongArrayConverterTest.java deleted file mode 100644 index 6c5e88b25..000000000 --- a/twidere/src/androidTest/java/org/mariotaku/twidere/model/util/LongArrayConverterTest.java +++ /dev/null @@ -1,32 +0,0 @@ -package org.mariotaku.twidere.model.util; - -import android.database.MatrixCursor; - -import org.apache.commons.lang3.reflect.TypeUtils; -import org.junit.Test; - -import static org.junit.Assert.assertArrayEquals; -import static org.junit.Assert.assertNull; - -/** - * Created by mariotaku on 16/2/24. - */ -public class LongArrayConverterTest { - private final LongArrayCursorFieldConverter converter = new LongArrayCursorFieldConverter(); - - @Test - public void testParseField() throws Exception { - MatrixCursor cursor = new MatrixCursor(new String[]{"a", "b", "c", "d"}); - cursor.addRow(new String[]{"1,2,3,4", "5,6,7", "8,", ""}); - cursor.moveToFirst(); - assertArrayEquals(new long[]{1, 2, 3, 4}, converter.parseField(cursor, 0, TypeUtils.parameterize(long[].class))); - assertArrayEquals(new long[]{5, 6, 7}, converter.parseField(cursor, 1, TypeUtils.parameterize(long[].class))); - assertNull(converter.parseField(cursor, 2, TypeUtils.parameterize(long[].class))); - assertNull(converter.parseField(cursor, 3, TypeUtils.parameterize(long[].class))); - } - - @Test - public void testWriteField() throws Exception { - - } -} \ No newline at end of file diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/MediaViewerActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/MediaViewerActivity.java index 0d5cf4858..6d6c708c7 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/MediaViewerActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/MediaViewerActivity.java @@ -755,7 +755,7 @@ public final class MediaViewerActivity extends BaseActivity implements Constants decodeBitmap(cr, uri, o); final DisplayMetrics dm = context.getResources().getDisplayMetrics(); final int targetSize = Math.min(1024, Math.max(dm.widthPixels, dm.heightPixels)); - final double sizeRatio = Math.ceil(Math.min(o.outHeight, o.outWidth) / (double) targetSize); + final double sizeRatio = Math.ceil(Math.max(o.outHeight, o.outWidth) / (double) targetSize); o.inSampleSize = TwidereMathUtils.nextPowerOf2((int) Math.max(1, sizeRatio)); o.inJustDecodeBounds = false; final Bitmap bitmap = decodeBitmap(cr, uri, o); diff --git a/twidere/src/main/java/org/mariotaku/twidere/api/twitter/UserStreamCallback.java b/twidere/src/main/java/org/mariotaku/twidere/api/twitter/UserStreamCallback.java index 6d262d7a1..9b5a78a90 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/api/twitter/UserStreamCallback.java +++ b/twidere/src/main/java/org/mariotaku/twidere/api/twitter/UserStreamCallback.java @@ -37,7 +37,7 @@ import org.mariotaku.twidere.api.twitter.model.User; import org.mariotaku.twidere.api.twitter.model.UserList; import org.mariotaku.twidere.api.twitter.model.Warning; import org.mariotaku.twidere.api.twitter.util.CRLFLineReader; -import org.mariotaku.twidere.util.LoganSquareMapperFinder; +import org.mariotaku.commons.logansquare.LoganSquareMapperFinder; import java.io.IOException; import java.io.InputStreamReader; diff --git a/twidere/src/main/java/org/mariotaku/twidere/api/twitter/util/TwitterConverterFactory.java b/twidere/src/main/java/org/mariotaku/twidere/api/twitter/util/TwitterConverterFactory.java index a03b1bf54..e52706a9c 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/api/twitter/util/TwitterConverterFactory.java +++ b/twidere/src/main/java/org/mariotaku/twidere/api/twitter/util/TwitterConverterFactory.java @@ -35,7 +35,7 @@ import org.mariotaku.twidere.api.twitter.TwitterException; import org.mariotaku.twidere.api.twitter.auth.OAuthToken; import org.mariotaku.twidere.api.twitter.model.ResponseCode; import org.mariotaku.twidere.api.twitter.model.TwitterResponse; -import org.mariotaku.twidere.util.LoganSquareMapperFinder; +import org.mariotaku.commons.logansquare.LoganSquareMapperFinder; import java.io.IOException; import java.lang.reflect.Type; diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/ItemsListFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/ItemsListFragment.java index 6ea13ebbb..190f51196 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/ItemsListFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/ItemsListFragment.java @@ -20,6 +20,7 @@ import org.mariotaku.twidere.adapter.DummyItemAdapter; import org.mariotaku.twidere.adapter.VariousItemsAdapter; import org.mariotaku.twidere.adapter.decorator.DividerItemDecoration; import org.mariotaku.twidere.adapter.iface.IUsersAdapter; +import org.mariotaku.twidere.model.ParcelableMedia; import org.mariotaku.twidere.model.ParcelableStatus; import org.mariotaku.twidere.model.ParcelableUser; import org.mariotaku.twidere.util.IntentUtils; @@ -33,6 +34,10 @@ import org.mariotaku.twidere.view.holder.iface.IStatusViewHolder; import java.util.List; +import edu.tsinghua.hotmobi.HotMobiLogger; +import edu.tsinghua.hotmobi.model.MediaEvent; +import edu.tsinghua.hotmobi.model.TimelineType; + /** * Created by mariotaku on 16/3/20. */ @@ -77,6 +82,19 @@ public class ItemsListFragment extends AbsContentListRecyclerViewFragmentbP0l+XkKFwG`x diff --git a/twidere/src/main/res/drawable-mdpi/ic_action_more_vertical.png b/twidere/src/main/res/drawable-mdpi/ic_action_more_vertical.png deleted file mode 100644 index f041fbe5a4101b59dda65d1a576338ce9d300cbf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 103 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UdY&$hAs)w*6C_v{H!%Eo|M@?w yz^@7U2fF_&d`M#8U2uha@kRqF5W(dp!N73nZm8%l1}=S|P6kg`KbLh*2~7ZyAs+hx diff --git a/twidere/src/main/res/drawable-xhdpi/ic_action_more_vertical.png b/twidere/src/main/res/drawable-xhdpi/ic_action_more_vertical.png deleted file mode 100644 index ae4b96ce42ad7e3c4eb5d8a272bbe6a63508d95c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 157 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_7U6i*k&kc@k8uWsZ$V8G!LSS=+n z>!uCc+ofJ2+ch1E{>^@%BK_A8sL<}x6wN7Ktv;LU8nRz*OZm#|lpkoXu$}SeVaB)q z8|t0jTR7LByC8i|U;*ov2C)lFAROhu&A@QLP%l3u=yZ}}DUid!;OXk;vd$@?2>{@q BH1hxe diff --git a/twidere/src/main/res/drawable-xxhdpi/ic_action_more_vertical.png b/twidere/src/main/res/drawable-xxhdpi/ic_action_more_vertical.png deleted file mode 100644 index ed45dd94360ba2c7ce35f7a3d7d2f3d31768d175..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 228 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeE3?v1%WpM*3i2$DvS0Mc#8&IyB8xNG@C<*cl zW=J^yKb}G0g6Ef2H-KWro-U3d6^w5$Z{%z+5NLg9(QM&Zz) + + + Artboard + Created with Sketch. + + + + + + + + \ No newline at end of file