added experimental vine video support
use jitpack instead of submodule
This commit is contained in:
parent
1852b5305b
commit
6a62ba6382
|
@ -1,12 +1,6 @@
|
|||
[submodule "libraries/SlidingMenu"]
|
||||
path = libraries/SlidingMenu
|
||||
url = https://github.com/mariotaku/SlidingMenu-Gradle
|
||||
[submodule "libraries/DragSortListView"]
|
||||
path = libraries/DragSortListView
|
||||
url = https://github.com/mariotaku/DragSortListView-Gradle
|
||||
[submodule "libraries/MessageBubbleView"]
|
||||
path = libraries/MessageBubbleView
|
||||
url = https://github.com/mariotaku/MessageBubbleView.git
|
||||
[submodule "libraries/ColorPicker"]
|
||||
path = libraries/ColorPicker
|
||||
url = https://github.com/uucky/ColorPicker-Android.git
|
||||
|
|
|
@ -10,7 +10,6 @@ buildscript {
|
|||
dependencies {
|
||||
classpath 'com.github.ben-manes:gradle-versions-plugin:0.8'
|
||||
classpath 'com.android.tools.build:gradle:1.1.3'
|
||||
classpath 'com.github.xujiaao:aarLinkSources:1.0.0'
|
||||
// NOTE: Do not place your application dependencies here; they belong
|
||||
// in the individual module build.gradle files
|
||||
}
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
Subproject commit 524ca7a432be4c55be3841813fe7326f2fbf08c1
|
|
@ -1 +0,0 @@
|
|||
Subproject commit 10724315c13768d16891c0ff0926daecba39c75c
|
|
@ -12,9 +12,7 @@ include ':twidere.component.nyan'
|
|||
include ':twidere.extension.streaming'
|
||||
include ':twidere.extension.twitlonger'
|
||||
include ':twidere.extension.push.xiaomi'
|
||||
include ':SlidingMenu', ':DragSortListView', ':MessageBubbleView', ':ColorPicker'
|
||||
include ':SlidingMenu', ':ColorPicker'
|
||||
|
||||
project(':SlidingMenu').projectDir = file('libraries/SlidingMenu/library')
|
||||
project(':DragSortListView').projectDir = file('libraries/DragSortListView/library')
|
||||
project(':MessageBubbleView').projectDir = file('libraries/MessageBubbleView/library')
|
||||
project(':ColorPicker').projectDir = file('libraries/ColorPicker/library')
|
|
@ -23,7 +23,7 @@ apply from: rootProject.file('global.gradle')
|
|||
android {
|
||||
defaultConfig {
|
||||
minSdkVersion 14
|
||||
targetSdkVersion 21
|
||||
targetSdkVersion 22
|
||||
versionCode 1
|
||||
versionName "1.0"
|
||||
}
|
||||
|
|
|
@ -4,11 +4,9 @@ import android.os.Parcel;
|
|||
import android.os.Parcelable;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.util.Log;
|
||||
|
||||
import org.mariotaku.jsonserializer.JSONParcel;
|
||||
import org.mariotaku.jsonserializer.JSONParcelable;
|
||||
import org.mariotaku.twidere.TwidereConstants;
|
||||
import org.mariotaku.twidere.util.MediaPreviewUtils;
|
||||
import org.mariotaku.twidere.util.ParseUtils;
|
||||
import org.mariotaku.twidere.util.SimpleValueSerializer;
|
||||
|
@ -17,21 +15,24 @@ import org.mariotaku.twidere.util.SimpleValueSerializer.SerializationException;
|
|||
import org.mariotaku.twidere.util.SimpleValueSerializer.SimpleValueSerializable;
|
||||
import org.mariotaku.twidere.util.SimpleValueSerializer.Writer;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.URL;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import twitter4j.EntitySupport;
|
||||
import twitter4j.ExtendedEntitySupport;
|
||||
import twitter4j.MediaEntity;
|
||||
import twitter4j.MediaEntity.Size;
|
||||
import twitter4j.MediaEntity.Type;
|
||||
import twitter4j.URLEntity;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class ParcelableMedia implements Parcelable, JSONParcelable, SimpleValueSerializable {
|
||||
|
||||
public static final int TYPE_UNKNOWN = 0;
|
||||
public static final int TYPE_IMAGE = 1;
|
||||
public static final int TYPE_VIDEO = 2;
|
||||
|
||||
public static final Parcelable.Creator<ParcelableMedia> CREATOR = new Parcelable.Creator<ParcelableMedia>() {
|
||||
@Override
|
||||
|
@ -77,6 +78,8 @@ public class ParcelableMedia implements Parcelable, JSONParcelable, SimpleValueS
|
|||
public int start, end, type;
|
||||
public int width, height;
|
||||
|
||||
public VideoInfo video_info;
|
||||
|
||||
|
||||
public ParcelableMedia() {
|
||||
|
||||
|
@ -97,10 +100,21 @@ public class ParcelableMedia implements Parcelable, JSONParcelable, SimpleValueS
|
|||
media_url = ParseUtils.parseString(entity.getMediaURL());
|
||||
start = entity.getStart();
|
||||
end = entity.getEnd();
|
||||
type = TYPE_IMAGE;
|
||||
type = getTypeInt(entity.getType());
|
||||
final Size size = entity.getSizes().get(Size.LARGE);
|
||||
width = size != null ? size.getWidth() : 0;
|
||||
height = size != null ? size.getHeight() : 0;
|
||||
video_info = VideoInfo.fromMediaEntityInfo(entity.getVideoInfo());
|
||||
}
|
||||
|
||||
private static int getTypeInt(Type type) {
|
||||
switch (type) {
|
||||
case PHOTO:
|
||||
return TYPE_IMAGE;
|
||||
case VIDEO:
|
||||
return TYPE_VIDEO;
|
||||
}
|
||||
return TYPE_UNKNOWN;
|
||||
}
|
||||
|
||||
public ParcelableMedia(final Parcel in) {
|
||||
|
@ -111,6 +125,7 @@ public class ParcelableMedia implements Parcelable, JSONParcelable, SimpleValueS
|
|||
type = in.readInt();
|
||||
width = in.readInt();
|
||||
height = in.readInt();
|
||||
video_info = in.readParcelable(VideoInfo.class.getClassLoader());
|
||||
}
|
||||
|
||||
private ParcelableMedia(@NonNull final String media_url, @Nullable final String page_url,
|
||||
|
@ -237,6 +252,7 @@ public class ParcelableMedia implements Parcelable, JSONParcelable, SimpleValueS
|
|||
dest.writeInt(type);
|
||||
dest.writeInt(width);
|
||||
dest.writeInt(height);
|
||||
dest.writeParcelable(video_info, flags);
|
||||
}
|
||||
|
||||
public static ParcelableMedia[] fromEntities(final EntitySupport entities) {
|
||||
|
@ -272,6 +288,133 @@ public class ParcelableMedia implements Parcelable, JSONParcelable, SimpleValueS
|
|||
}
|
||||
|
||||
|
||||
public static class VideoInfo implements Parcelable {
|
||||
|
||||
public Variant[] variants;
|
||||
public long[] aspect_ratio;
|
||||
public long duration;
|
||||
|
||||
public VideoInfo(Reader source) {
|
||||
|
||||
}
|
||||
|
||||
public VideoInfo(MediaEntity.VideoInfo videoInfo) {
|
||||
variants = Variant.fromMediaEntityVariants(videoInfo.getVariants());
|
||||
aspect_ratio = videoInfo.getAspectRatio();
|
||||
duration = videoInfo.getDuration();
|
||||
}
|
||||
|
||||
public static VideoInfo fromMediaEntityInfo(MediaEntity.VideoInfo videoInfo) {
|
||||
if (videoInfo == null) return null;
|
||||
return new VideoInfo(videoInfo);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "VideoInfo{" +
|
||||
"variants=" + Arrays.toString(variants) +
|
||||
", aspect_ratio=" + Arrays.toString(aspect_ratio) +
|
||||
", duration=" + duration +
|
||||
'}';
|
||||
}
|
||||
|
||||
public static class Variant implements Parcelable {
|
||||
public Variant(MediaEntity.VideoInfo.Variant entityVariant) {
|
||||
content_type = entityVariant.getContentType();
|
||||
url = entityVariant.getUrl();
|
||||
bitrate = entityVariant.getBitrate();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Variant{" +
|
||||
"content_type='" + content_type + '\'' +
|
||||
", url='" + url + '\'' +
|
||||
", bitrate=" + bitrate +
|
||||
'}';
|
||||
}
|
||||
|
||||
public final String content_type;
|
||||
public final String url;
|
||||
public final long bitrate;
|
||||
|
||||
public Variant(JSONParcel source) {
|
||||
content_type = source.readString("content_type");
|
||||
url = source.readString("url");
|
||||
bitrate = source.readLong("bitrate");
|
||||
}
|
||||
|
||||
@Override
|
||||
public int describeContents() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public static Variant[] fromMediaEntityVariants(MediaEntity.VideoInfo.Variant[] entityVariants) {
|
||||
if (entityVariants == null) return null;
|
||||
final Variant[] variants = new Variant[entityVariants.length];
|
||||
for (int i = 0, j = entityVariants.length; i < j; i++) {
|
||||
variants[i] = new Variant(entityVariants[i]);
|
||||
}
|
||||
return variants;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void writeToParcel(Parcel dest, int flags) {
|
||||
dest.writeString(this.content_type);
|
||||
dest.writeString(this.url);
|
||||
dest.writeLong(this.bitrate);
|
||||
}
|
||||
|
||||
|
||||
private Variant(Parcel in) {
|
||||
this.content_type = in.readString();
|
||||
this.url = in.readString();
|
||||
this.bitrate = in.readLong();
|
||||
}
|
||||
|
||||
public static final Parcelable.Creator<Variant> CREATOR = new Parcelable.Creator<Variant>() {
|
||||
public Variant createFromParcel(Parcel source) {
|
||||
return new Variant(source);
|
||||
}
|
||||
|
||||
public Variant[] newArray(int size) {
|
||||
return new Variant[size];
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public int describeContents() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToParcel(Parcel dest, int flags) {
|
||||
dest.writeTypedArray(variants, flags);
|
||||
dest.writeLongArray(aspect_ratio);
|
||||
dest.writeLong(duration);
|
||||
}
|
||||
|
||||
|
||||
private VideoInfo(Parcel in) {
|
||||
variants = in.createTypedArray(Variant.CREATOR);
|
||||
aspect_ratio = in.createLongArray();
|
||||
duration = in.readLong();
|
||||
}
|
||||
|
||||
public static final Parcelable.Creator<VideoInfo> CREATOR = new Parcelable.Creator<VideoInfo>() {
|
||||
public VideoInfo createFromParcel(Parcel source) {
|
||||
return new VideoInfo(source);
|
||||
}
|
||||
|
||||
public VideoInfo[] newArray(int size) {
|
||||
return new VideoInfo[size];
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
public static ParcelableMedia newImage(final String media_url, final String url) {
|
||||
return new ParcelableMedia(media_url, url, 0, 0, TYPE_IMAGE);
|
||||
}
|
||||
|
|
|
@ -23,7 +23,7 @@ apply from: rootProject.file('global.gradle')
|
|||
android {
|
||||
defaultConfig {
|
||||
minSdkVersion 14
|
||||
targetSdkVersion 21
|
||||
targetSdkVersion 22
|
||||
versionCode 1
|
||||
versionName "1.0"
|
||||
}
|
||||
|
|
|
@ -23,7 +23,7 @@ apply from: rootProject.file('global.gradle')
|
|||
android {
|
||||
defaultConfig {
|
||||
minSdkVersion 14
|
||||
targetSdkVersion 21
|
||||
targetSdkVersion 22
|
||||
versionCode 1
|
||||
versionName "1.0"
|
||||
}
|
||||
|
|
|
@ -23,7 +23,7 @@ apply from: rootProject.file('global.gradle')
|
|||
android {
|
||||
defaultConfig {
|
||||
minSdkVersion 14
|
||||
targetSdkVersion 21
|
||||
targetSdkVersion 22
|
||||
versionCode 1
|
||||
versionName "1.0"
|
||||
}
|
||||
|
|
|
@ -23,7 +23,7 @@ apply from: rootProject.file('global.gradle')
|
|||
android {
|
||||
defaultConfig {
|
||||
minSdkVersion 14
|
||||
targetSdkVersion 21
|
||||
targetSdkVersion 22
|
||||
versionCode 1
|
||||
versionName "1.0"
|
||||
}
|
||||
|
|
|
@ -23,7 +23,7 @@ apply from: rootProject.file('global.gradle')
|
|||
android {
|
||||
defaultConfig {
|
||||
minSdkVersion 14
|
||||
targetSdkVersion 21
|
||||
targetSdkVersion 22
|
||||
versionCode 1
|
||||
versionName "1.0"
|
||||
}
|
||||
|
|
|
@ -25,54 +25,88 @@ import java.util.Map;
|
|||
* @since Twitter4J 2.2.3
|
||||
*/
|
||||
public interface MediaEntity extends URLEntity, Serializable {
|
||||
/**
|
||||
* Returns the id of the media.
|
||||
*
|
||||
* @return the id of the media
|
||||
*/
|
||||
long getId();
|
||||
/**
|
||||
* Returns the id of the media.
|
||||
*
|
||||
* @return the id of the media
|
||||
*/
|
||||
long getId();
|
||||
|
||||
/**
|
||||
* Returns the media URL.
|
||||
*
|
||||
* @return the media URL
|
||||
*/
|
||||
URL getMediaURL();
|
||||
/**
|
||||
* Returns the media URL.
|
||||
*
|
||||
* @return the media URL
|
||||
*/
|
||||
URL getMediaURL();
|
||||
|
||||
/**
|
||||
* Returns the media secure URL.
|
||||
*
|
||||
* @return the media secure URL
|
||||
*/
|
||||
URL getMediaURLHttps();
|
||||
/**
|
||||
* Returns the media secure URL.
|
||||
*
|
||||
* @return the media secure URL
|
||||
*/
|
||||
URL getMediaURLHttps();
|
||||
|
||||
/**
|
||||
* Returns size variations of the media.
|
||||
*
|
||||
* @return size variations of the media
|
||||
*/
|
||||
Map<Integer, Size> getSizes();
|
||||
/**
|
||||
* Returns size variations of the media.
|
||||
*
|
||||
* @return size variations of the media
|
||||
*/
|
||||
Map<Integer, Size> getSizes();
|
||||
|
||||
/**
|
||||
* Returns the media type ("photo").
|
||||
*
|
||||
* @return the media type ("photo").
|
||||
*/
|
||||
String getType();
|
||||
/**
|
||||
* Returns the media type ("photo").
|
||||
*
|
||||
* @return the media type ("photo").
|
||||
*/
|
||||
Type getType();
|
||||
|
||||
interface Size extends Serializable {
|
||||
Integer THUMB = 0;
|
||||
Integer SMALL = 1;
|
||||
Integer MEDIUM = 2;
|
||||
Integer LARGE = 3;
|
||||
int FIT = 100;
|
||||
int CROP = 101;
|
||||
enum Type {
|
||||
PHOTO, VIDEO, UNKNOWN;
|
||||
|
||||
int getHeight();
|
||||
public static Type parse(String typeString) {
|
||||
if ("photo".equalsIgnoreCase(typeString)) {
|
||||
return PHOTO;
|
||||
} else if ("video".equalsIgnoreCase(typeString)) {
|
||||
return VIDEO;
|
||||
}
|
||||
return UNKNOWN;
|
||||
}
|
||||
}
|
||||
|
||||
int getResize();
|
||||
VideoInfo getVideoInfo();
|
||||
|
||||
int getWidth();
|
||||
}
|
||||
interface VideoInfo extends Serializable {
|
||||
|
||||
Variant[] getVariants();
|
||||
|
||||
long[] getAspectRatio();
|
||||
|
||||
long getDuration();
|
||||
|
||||
interface Variant extends Serializable {
|
||||
|
||||
String getContentType();
|
||||
|
||||
String getUrl();
|
||||
|
||||
long getBitrate();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
interface Size extends Serializable {
|
||||
Integer THUMB = 0;
|
||||
Integer SMALL = 1;
|
||||
Integer MEDIUM = 2;
|
||||
Integer LARGE = 3;
|
||||
int FIT = 100;
|
||||
int CROP = 101;
|
||||
|
||||
int getHeight();
|
||||
|
||||
int getResize();
|
||||
|
||||
int getWidth();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -25,6 +25,7 @@ import org.json.JSONObject;
|
|||
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
|
@ -39,239 +40,329 @@ import static twitter4j.internal.util.InternalParseUtil.getLong;
|
|||
*/
|
||||
public class MediaEntityJSONImpl implements MediaEntity {
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = -1634113112942821363L;
|
||||
private long id;
|
||||
private int start = -1;
|
||||
private int end = -1;
|
||||
private URL url;
|
||||
private URL mediaURL;
|
||||
private URL mediaURLHttps;
|
||||
private URL expandedURL;
|
||||
private String displayURL;
|
||||
private Map<Integer, MediaEntity.Size> sizes;
|
||||
private String type;
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = -1634113112942821363L;
|
||||
private long id;
|
||||
private int start = -1;
|
||||
private int end = -1;
|
||||
private URL url;
|
||||
private URL mediaURL;
|
||||
private URL mediaURLHttps;
|
||||
private URL expandedURL;
|
||||
private String displayURL;
|
||||
private Map<Integer, MediaEntity.Size> sizes;
|
||||
private Type type;
|
||||
private VideoInfoJSONImpl videoInfo;
|
||||
|
||||
public MediaEntityJSONImpl(final JSONObject json) throws TwitterException {
|
||||
try {
|
||||
final JSONArray indicesArray = json.getJSONArray("indices");
|
||||
start = indicesArray.getInt(0);
|
||||
end = indicesArray.getInt(1);
|
||||
id = getLong("id", json);
|
||||
public VideoInfo getVideoInfo() {
|
||||
return videoInfo;
|
||||
}
|
||||
|
||||
try {
|
||||
url = new URL(json.getString("url"));
|
||||
} catch (final MalformedURLException ignore) {
|
||||
}
|
||||
public MediaEntityJSONImpl(final JSONObject json) throws TwitterException {
|
||||
try {
|
||||
final JSONArray indicesArray = json.getJSONArray("indices");
|
||||
start = indicesArray.getInt(0);
|
||||
end = indicesArray.getInt(1);
|
||||
id = getLong("id", json);
|
||||
|
||||
if (!json.isNull("expanded_url")) {
|
||||
try {
|
||||
expandedURL = new URL(json.getString("expanded_url"));
|
||||
} catch (final MalformedURLException ignore) {
|
||||
}
|
||||
}
|
||||
if (!json.isNull("media_url")) {
|
||||
try {
|
||||
mediaURL = new URL(json.getString("media_url"));
|
||||
} catch (final MalformedURLException ignore) {
|
||||
}
|
||||
}
|
||||
if (!json.isNull("media_url_https")) {
|
||||
try {
|
||||
mediaURLHttps = new URL(json.getString("media_url_https"));
|
||||
} catch (final MalformedURLException ignore) {
|
||||
}
|
||||
}
|
||||
if (!json.isNull("display_url")) {
|
||||
displayURL = json.getString("display_url");
|
||||
}
|
||||
final JSONObject sizes = json.getJSONObject("sizes");
|
||||
this.sizes = new HashMap<Integer, MediaEntity.Size>(4);
|
||||
// thumbworkarounding API side issue
|
||||
addMediaEntitySizeIfNotNull(this.sizes, sizes, MediaEntity.Size.LARGE, "large");
|
||||
addMediaEntitySizeIfNotNull(this.sizes, sizes, MediaEntity.Size.MEDIUM, "medium");
|
||||
addMediaEntitySizeIfNotNull(this.sizes, sizes, MediaEntity.Size.SMALL, "small");
|
||||
addMediaEntitySizeIfNotNull(this.sizes, sizes, MediaEntity.Size.THUMB, "thumb");
|
||||
if (!json.isNull("type")) {
|
||||
type = json.getString("type");
|
||||
}
|
||||
} catch (final JSONException jsone) {
|
||||
throw new TwitterException(jsone);
|
||||
}
|
||||
}
|
||||
try {
|
||||
url = new URL(json.getString("url"));
|
||||
} catch (final MalformedURLException ignore) {
|
||||
}
|
||||
|
||||
/* For serialization purposes only. */
|
||||
/* package */MediaEntityJSONImpl() {
|
||||
if (!json.isNull("expanded_url")) {
|
||||
try {
|
||||
expandedURL = new URL(json.getString("expanded_url"));
|
||||
} catch (final MalformedURLException ignore) {
|
||||
}
|
||||
}
|
||||
if (!json.isNull("media_url")) {
|
||||
try {
|
||||
mediaURL = new URL(json.getString("media_url"));
|
||||
} catch (final MalformedURLException ignore) {
|
||||
}
|
||||
}
|
||||
if (!json.isNull("media_url_https")) {
|
||||
try {
|
||||
mediaURLHttps = new URL(json.getString("media_url_https"));
|
||||
} catch (final MalformedURLException ignore) {
|
||||
}
|
||||
}
|
||||
if (!json.isNull("display_url")) {
|
||||
displayURL = json.getString("display_url");
|
||||
}
|
||||
if (!json.isNull("video_info")) {
|
||||
videoInfo = new VideoInfoJSONImpl(json.getJSONObject("video_info"));
|
||||
}
|
||||
final JSONObject sizes = json.getJSONObject("sizes");
|
||||
this.sizes = new HashMap<Integer, MediaEntity.Size>(4);
|
||||
// thumbworkarounding API side issue
|
||||
addMediaEntitySizeIfNotNull(this.sizes, sizes, MediaEntity.Size.LARGE, "large");
|
||||
addMediaEntitySizeIfNotNull(this.sizes, sizes, MediaEntity.Size.MEDIUM, "medium");
|
||||
addMediaEntitySizeIfNotNull(this.sizes, sizes, MediaEntity.Size.SMALL, "small");
|
||||
addMediaEntitySizeIfNotNull(this.sizes, sizes, MediaEntity.Size.THUMB, "thumb");
|
||||
if (!json.isNull("type")) {
|
||||
type = Type.parse(json.getString("type"));
|
||||
}
|
||||
} catch (final JSONException jsone) {
|
||||
throw new TwitterException(jsone);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
/* For serialization purposes only. */
|
||||
/* package */MediaEntityJSONImpl() {
|
||||
|
||||
@Override
|
||||
public boolean equals(final Object o) {
|
||||
if (this == o) return true;
|
||||
if (!(o instanceof MediaEntityJSONImpl)) return false;
|
||||
}
|
||||
|
||||
final MediaEntityJSONImpl that = (MediaEntityJSONImpl) o;
|
||||
@Override
|
||||
public boolean equals(final Object o) {
|
||||
if (this == o) return true;
|
||||
if (!(o instanceof MediaEntityJSONImpl)) return false;
|
||||
|
||||
if (id != that.id) return false;
|
||||
final MediaEntityJSONImpl that = (MediaEntityJSONImpl) o;
|
||||
|
||||
return true;
|
||||
}
|
||||
if (id != that.id) return false;
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public String getDisplayURL() {
|
||||
return displayURL;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public int getEnd() {
|
||||
return end;
|
||||
}
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public String getDisplayURL() {
|
||||
return displayURL;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public URL getExpandedURL() {
|
||||
return expandedURL;
|
||||
}
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public int getEnd() {
|
||||
return end;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public long getId() {
|
||||
return id;
|
||||
}
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public URL getExpandedURL() {
|
||||
return expandedURL;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public URL getMediaURL() {
|
||||
return mediaURL;
|
||||
}
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public URL getMediaURLHttps() {
|
||||
return mediaURLHttps;
|
||||
}
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public URL getMediaURL() {
|
||||
return mediaURL;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<Integer, MediaEntity.Size> getSizes() {
|
||||
return sizes;
|
||||
}
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public URL getMediaURLHttps() {
|
||||
return mediaURLHttps;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public int getStart() {
|
||||
return start;
|
||||
}
|
||||
@Override
|
||||
public Map<Integer, MediaEntity.Size> getSizes() {
|
||||
return sizes;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public int getStart() {
|
||||
return start;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public URL getURL() {
|
||||
return url;
|
||||
}
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public Type getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return (int) (id ^ id >>> 32);
|
||||
}
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public URL getURL() {
|
||||
return url;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "MediaEntityJSONImpl{" + "id=" + id + ", start=" + start + ", end=" + end + ", url=" + url
|
||||
+ ", mediaURL=" + mediaURL + ", mediaURLHttps=" + mediaURLHttps + ", expandedURL=" + expandedURL
|
||||
+ ", displayURL='" + displayURL + '\'' + ", sizes=" + sizes + ", type=" + type + '}';
|
||||
}
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return (int) (id ^ id >>> 32);
|
||||
}
|
||||
|
||||
private void addMediaEntitySizeIfNotNull(final Map<Integer, MediaEntity.Size> sizes, final JSONObject sizes_json,
|
||||
final Integer size, final String key) throws JSONException {
|
||||
final JSONObject size_json = sizes_json.optJSONObject(key);
|
||||
if (size_json != null) {
|
||||
sizes.put(size, new Size(size_json));
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public String toString() {
|
||||
return "MediaEntityJSONImpl{" + "id=" + id + ", start=" + start + ", end=" + end + ", url=" + url
|
||||
+ ", mediaURL=" + mediaURL + ", mediaURLHttps=" + mediaURLHttps + ", expandedURL=" + expandedURL
|
||||
+ ", displayURL='" + displayURL + '\'' + ", sizes=" + sizes + ", type=" + type + '}';
|
||||
}
|
||||
|
||||
static class Size implements MediaEntity.Size {
|
||||
private void addMediaEntitySizeIfNotNull(final Map<Integer, MediaEntity.Size> sizes, final JSONObject sizes_json,
|
||||
final Integer size, final String key) throws JSONException {
|
||||
final JSONObject size_json = sizes_json.optJSONObject(key);
|
||||
if (size_json != null) {
|
||||
sizes.put(size, new Size(size_json));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 5638836742331957957L;
|
||||
int width;
|
||||
int height;
|
||||
int resize;
|
||||
static class Size implements MediaEntity.Size {
|
||||
|
||||
Size(final JSONObject json) throws JSONException {
|
||||
width = json.getInt("w");
|
||||
height = json.getInt("h");
|
||||
resize = "fit".equals(json.getString("resize")) ? MediaEntity.Size.FIT : MediaEntity.Size.CROP;
|
||||
}
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 5638836742331957957L;
|
||||
int width;
|
||||
int height;
|
||||
int resize;
|
||||
|
||||
@Override
|
||||
public boolean equals(final Object o) {
|
||||
if (this == o) return true;
|
||||
if (!(o instanceof Size)) return false;
|
||||
Size(final JSONObject json) throws JSONException {
|
||||
width = json.getInt("w");
|
||||
height = json.getInt("h");
|
||||
resize = "fit".equals(json.getString("resize")) ? MediaEntity.Size.FIT : MediaEntity.Size.CROP;
|
||||
}
|
||||
|
||||
final Size size = (Size) o;
|
||||
@Override
|
||||
public boolean equals(final Object o) {
|
||||
if (this == o) return true;
|
||||
if (!(o instanceof Size)) return false;
|
||||
|
||||
if (height != size.height) return false;
|
||||
if (resize != size.resize) return false;
|
||||
if (width != size.width) return false;
|
||||
final Size size = (Size) o;
|
||||
|
||||
return true;
|
||||
}
|
||||
if (height != size.height) return false;
|
||||
if (resize != size.resize) return false;
|
||||
if (width != size.width) return false;
|
||||
|
||||
@Override
|
||||
public int getHeight() {
|
||||
return height;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getResize() {
|
||||
return resize;
|
||||
}
|
||||
@Override
|
||||
public int getHeight() {
|
||||
return height;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWidth() {
|
||||
return width;
|
||||
}
|
||||
@Override
|
||||
public int getResize() {
|
||||
return resize;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = width;
|
||||
result = 31 * result + height;
|
||||
result = 31 * result + resize;
|
||||
return result;
|
||||
}
|
||||
@Override
|
||||
public int getWidth() {
|
||||
return width;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Size{" + "width=" + width + ", height=" + height + ", resize=" + resize + '}';
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = width;
|
||||
result = 31 * result + height;
|
||||
result = 31 * result + resize;
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Size{" + "width=" + width + ", height=" + height + ", resize=" + resize + '}';
|
||||
}
|
||||
}
|
||||
|
||||
private static class VideoInfoJSONImpl implements VideoInfo {
|
||||
|
||||
private final VariantJSONImpl[] variants;
|
||||
private final long[] aspectRatio;
|
||||
private final long duration;
|
||||
|
||||
VideoInfoJSONImpl(JSONObject json) throws JSONException {
|
||||
variants = VariantJSONImpl.fromJSONArray(json.getJSONArray("variants"));
|
||||
final JSONArray aspectRatioJson = json.getJSONArray("aspect_ratio");
|
||||
aspectRatio = new long[]{aspectRatioJson.getLong(0), aspectRatioJson.getLong(1)};
|
||||
duration = json.getLong("duration_millis");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Variant[] getVariants() {
|
||||
return variants;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long[] getAspectRatio() {
|
||||
return aspectRatio;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "VideoInfoJSONImpl{" +
|
||||
"variants=" + Arrays.toString(variants) +
|
||||
", aspectRatio=" + Arrays.toString(aspectRatio) +
|
||||
", duration=" + duration +
|
||||
'}';
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getDuration() {
|
||||
return duration;
|
||||
}
|
||||
|
||||
private static class VariantJSONImpl implements Variant {
|
||||
private final String contentType;
|
||||
private final String url;
|
||||
private final long bitrate;
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "VariantJSONImpl{" +
|
||||
"contentType='" + contentType + '\'' +
|
||||
", url='" + url + '\'' +
|
||||
", bitrate=" + bitrate +
|
||||
'}';
|
||||
}
|
||||
|
||||
public VariantJSONImpl(JSONObject json) throws JSONException {
|
||||
contentType = json.getString("content_type");
|
||||
url = json.getString("url");
|
||||
bitrate = json.optLong("bitrate", -1);
|
||||
}
|
||||
|
||||
public static VariantJSONImpl[] fromJSONArray(JSONArray json) throws JSONException {
|
||||
final VariantJSONImpl[] variant = new VariantJSONImpl[json.length()];
|
||||
for (int i = 0, j = variant.length; i < j; i++) {
|
||||
variant[i] = new VariantJSONImpl(json.getJSONObject(i));
|
||||
}
|
||||
return variant;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getContentType() {
|
||||
return contentType;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUrl() {
|
||||
return url;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getBitrate() {
|
||||
return bitrate;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,7 +25,7 @@ android {
|
|||
defaultConfig {
|
||||
applicationId "org.mariotaku.twidere.donate.nyanwp"
|
||||
minSdkVersion 20
|
||||
targetSdkVersion 21
|
||||
targetSdkVersion 22
|
||||
versionCode 1
|
||||
versionName "1.0"
|
||||
}
|
||||
|
|
|
@ -25,7 +25,7 @@ android {
|
|||
defaultConfig {
|
||||
applicationId "org.mariotaku.twidere.donate.nyanwp"
|
||||
minSdkVersion 14
|
||||
targetSdkVersion 21
|
||||
targetSdkVersion 22
|
||||
versionCode 3
|
||||
versionName "1.2"
|
||||
}
|
||||
|
|
|
@ -24,7 +24,7 @@ android {
|
|||
defaultConfig {
|
||||
applicationId "org.mariotaku.twidere.extension.push.xiaomi"
|
||||
minSdkVersion 14
|
||||
targetSdkVersion 21
|
||||
targetSdkVersion 22
|
||||
versionCode 2
|
||||
versionName "1.0"
|
||||
}
|
||||
|
|
|
@ -25,7 +25,7 @@ android {
|
|||
defaultConfig {
|
||||
applicationId "org.mariotaku.twidere.extension.streaming"
|
||||
minSdkVersion 14
|
||||
targetSdkVersion 21
|
||||
targetSdkVersion 22
|
||||
versionCode 13
|
||||
versionName "1.10 (0.3.0-dev)"
|
||||
}
|
||||
|
|
|
@ -25,7 +25,7 @@ android {
|
|||
defaultConfig {
|
||||
applicationId "org.mariotaku.extension.twitlonger"
|
||||
minSdkVersion 14
|
||||
targetSdkVersion 21
|
||||
targetSdkVersion 22
|
||||
versionCode 6
|
||||
versionName "1.5"
|
||||
}
|
||||
|
|
|
@ -23,7 +23,7 @@ apply from: rootProject.file('global.gradle')
|
|||
android {
|
||||
defaultConfig {
|
||||
minSdkVersion 14
|
||||
targetSdkVersion 21
|
||||
targetSdkVersion 22
|
||||
versionCode 1
|
||||
versionName "1.0"
|
||||
}
|
||||
|
|
|
@ -26,7 +26,7 @@ android {
|
|||
defaultConfig {
|
||||
applicationId "org.mariotaku.twidere"
|
||||
minSdkVersion 20
|
||||
targetSdkVersion 21
|
||||
targetSdkVersion 22
|
||||
versionCode 1
|
||||
versionName "1.0"
|
||||
}
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
import java.text.SimpleDateFormat
|
||||
|
||||
apply plugin: 'com.android.application'
|
||||
apply plugin: 'aar-link-sources'
|
||||
apply from: rootProject.file('global.gradle')
|
||||
apply from: rootProject.file('signing.gradle')
|
||||
|
||||
|
@ -63,7 +62,6 @@ dependencies {
|
|||
compile 'com.android.support:recyclerview-v7:22.0.0'
|
||||
compile 'com.sothree.slidinguppanel:library:3.0.0'
|
||||
compile 'com.twitter:twitter-text:1.11.1'
|
||||
aarLinkSources 'com.twitter:twitter-text:1.11.1:sources@jar'
|
||||
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.3'
|
||||
compile 'com.google.android.apps.dashclock:dashclock-api:2.0.0'
|
||||
compile 'com.squareup:otto:1.3.6'
|
||||
|
@ -74,16 +72,15 @@ dependencies {
|
|||
compile 'com.pnikosis:materialish-progress:1.4'
|
||||
compile 'com.squareup.okhttp:okhttp:2.3.0'
|
||||
compile 'pl.droidsonroids.gif:android-gif-drawable:1.1.2'
|
||||
aarLinkSources 'com.squareup.okhttp:okhttp:2.2.0:sources@jar'
|
||||
compile 'com.github.mariotaku:MessageBubbleView:1.0'
|
||||
compile 'com.github.mariotaku:DragSortListView:0.6.1'
|
||||
compile 'com.github.mariotaku:SlidingMenu:1.3'
|
||||
googleCompile 'com.google.android.gms:play-services-maps:7.0.0'
|
||||
googleCompile 'com.google.maps.android:android-maps-utils:0.3.4'
|
||||
fdroidCompile 'org.osmdroid:osmdroid-android:4.3'
|
||||
fdroidCompile 'org.slf4j:slf4j-simple:1.7.10'
|
||||
compile project(':twidere.component.common')
|
||||
compile project(':twidere.component.nyan')
|
||||
compile project(':SlidingMenu')
|
||||
compile project(':DragSortListView')
|
||||
compile project(':MessageBubbleView')
|
||||
compile project(':ColorPicker')
|
||||
compile fileTree(dir: 'libs/main', include: ['*.jar'])
|
||||
googleCompile fileTree(dir: 'libs/google', include: ['*.jar'])
|
||||
|
|
|
@ -105,7 +105,7 @@ import org.mariotaku.twidere.service.BackgroundOperationService;
|
|||
import org.mariotaku.twidere.task.TwidereAsyncTask;
|
||||
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
|
||||
import org.mariotaku.twidere.util.ContentValuesCreator;
|
||||
import org.mariotaku.twidere.util.ImageLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.MediaLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.MathUtils;
|
||||
import org.mariotaku.twidere.util.ParseUtils;
|
||||
import org.mariotaku.twidere.util.SharedPreferencesWrapper;
|
||||
|
@ -114,7 +114,6 @@ import org.mariotaku.twidere.util.TwidereArrayUtils;
|
|||
import org.mariotaku.twidere.util.TwidereValidator;
|
||||
import org.mariotaku.twidere.util.UserColorNameUtils;
|
||||
import org.mariotaku.twidere.util.Utils;
|
||||
import org.mariotaku.twidere.util.accessor.ViewAccessor;
|
||||
import org.mariotaku.twidere.view.ActionIconView;
|
||||
import org.mariotaku.twidere.view.BadgeView;
|
||||
import org.mariotaku.twidere.view.ShapedImageView;
|
||||
|
@ -190,7 +189,7 @@ public class ComposeActivity extends ThemedFragmentActivity implements TextWatch
|
|||
private ShapedImageView mProfileImageView;
|
||||
private BadgeView mCountView;
|
||||
private View mAccountSelectorButton;
|
||||
private ImageLoaderWrapper mImageLoader;
|
||||
private MediaLoaderWrapper mImageLoader;
|
||||
private View mLocationContainer;
|
||||
private ActionIconView mLocationIcon;
|
||||
private TextView mLocationText;
|
||||
|
@ -1202,7 +1201,7 @@ public class ComposeActivity extends ThemedFragmentActivity implements TextWatch
|
|||
|
||||
public void showAccount(AccountIconsAdapter adapter, ParcelableAccount account, boolean isSelected) {
|
||||
itemView.setAlpha(isSelected ? 1 : 0.33f);
|
||||
final ImageLoaderWrapper loader = adapter.getImageLoader();
|
||||
final MediaLoaderWrapper loader = adapter.getImageLoader();
|
||||
loader.displayProfileImage(iconView, account.profile_image_url);
|
||||
iconView.setBorderColor(account.color);
|
||||
}
|
||||
|
@ -1219,7 +1218,7 @@ public class ComposeActivity extends ThemedFragmentActivity implements TextWatch
|
|||
|
||||
private final ComposeActivity mActivity;
|
||||
private final LayoutInflater mInflater;
|
||||
private final ImageLoaderWrapper mImageLoader;
|
||||
private final MediaLoaderWrapper mImageLoader;
|
||||
private final LongSparseArray<Boolean> mSelection;
|
||||
|
||||
private ParcelableAccount[] mAccounts;
|
||||
|
@ -1231,7 +1230,7 @@ public class ComposeActivity extends ThemedFragmentActivity implements TextWatch
|
|||
mSelection = new LongSparseArray<>();
|
||||
}
|
||||
|
||||
public ImageLoaderWrapper getImageLoader() {
|
||||
public MediaLoaderWrapper getImageLoader() {
|
||||
return mImageLoader;
|
||||
}
|
||||
|
||||
|
@ -1481,7 +1480,7 @@ public class ComposeActivity extends ThemedFragmentActivity implements TextWatch
|
|||
|
||||
private static class MediaPreviewAdapter extends DraggableArrayAdapter<ParcelableMediaUpdate> {
|
||||
|
||||
private final ImageLoaderWrapper mImageLoader;
|
||||
private final MediaLoaderWrapper mImageLoader;
|
||||
|
||||
public MediaPreviewAdapter(final Context context) {
|
||||
super(context, R.layout.grid_item_media_editor);
|
||||
|
|
|
@ -53,7 +53,7 @@ import org.mariotaku.twidere.model.CustomTabConfiguration.ExtraConfiguration;
|
|||
import org.mariotaku.twidere.model.ParcelableAccount;
|
||||
import org.mariotaku.twidere.model.ParcelableUser;
|
||||
import org.mariotaku.twidere.model.ParcelableUserList;
|
||||
import org.mariotaku.twidere.util.ImageLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.MediaLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.ParseUtils;
|
||||
import org.mariotaku.twidere.util.ThemeUtils;
|
||||
|
||||
|
@ -71,7 +71,7 @@ import static org.mariotaku.twidere.util.UserColorNameUtils.getUserNickname;
|
|||
|
||||
public class CustomTabEditorActivity extends BaseSupportDialogActivity implements OnClickListener {
|
||||
|
||||
private ImageLoaderWrapper mImageLoader;
|
||||
private MediaLoaderWrapper mImageLoader;
|
||||
private SharedPreferences mPreferences;
|
||||
|
||||
private AccountsSpinnerAdapter mAccountsAdapter;
|
||||
|
|
|
@ -39,6 +39,7 @@ import android.view.View;
|
|||
import android.view.View.OnClickListener;
|
||||
import android.view.View.OnLayoutChangeListener;
|
||||
import android.view.ViewGroup;
|
||||
import android.webkit.WebView;
|
||||
import android.widget.ProgressBar;
|
||||
|
||||
import com.diegocarloslima.byakugallery.lib.TileBitmapDrawable;
|
||||
|
@ -48,16 +49,20 @@ import org.apache.commons.lang3.ArrayUtils;
|
|||
import org.mariotaku.twidere.Constants;
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.adapter.support.SupportFixedFragmentStatePagerAdapter;
|
||||
import org.mariotaku.twidere.app.TwidereApplication;
|
||||
import org.mariotaku.twidere.fragment.support.BaseSupportFragment;
|
||||
import org.mariotaku.twidere.fragment.support.ViewStatusDialogFragment;
|
||||
import org.mariotaku.twidere.loader.support.TileImageLoader;
|
||||
import org.mariotaku.twidere.loader.support.TileImageLoader.DownloadListener;
|
||||
import org.mariotaku.twidere.loader.support.TileImageLoader.Result;
|
||||
import org.mariotaku.twidere.model.ParcelableMedia;
|
||||
import org.mariotaku.twidere.model.ParcelableMedia.VideoInfo.Variant;
|
||||
import org.mariotaku.twidere.model.ParcelableStatus;
|
||||
import org.mariotaku.twidere.util.SaveImageTask;
|
||||
import org.mariotaku.twidere.util.ThemeUtils;
|
||||
import org.mariotaku.twidere.util.Utils;
|
||||
import org.mariotaku.twidere.util.VideoLoader;
|
||||
import org.mariotaku.twidere.util.VideoLoader.VideoLoadingListener;
|
||||
import org.mariotaku.twidere.view.TouchImageView;
|
||||
import org.mariotaku.twidere.view.TouchImageView.ZoomListener;
|
||||
|
||||
|
@ -178,6 +183,106 @@ public final class MediaViewerActivity extends ThemedActionBarActivity implement
|
|||
return getIntent().hasExtra(EXTRA_STATUS);
|
||||
}
|
||||
|
||||
public static final class VideoPageFragment extends BaseSupportFragment
|
||||
implements VideoLoadingListener {
|
||||
|
||||
private static final String[] SUPPORTED_VIDEO_TYPES;
|
||||
|
||||
static {
|
||||
SUPPORTED_VIDEO_TYPES = new String[]{"video/mp4"};
|
||||
}
|
||||
|
||||
private WebView mWebView;
|
||||
private VideoLoader mVideoLoader;
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||
return inflater.inflate(R.layout.fragment_media_page_video, container, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
mVideoLoader = TwidereApplication.getInstance(getActivity()).getVideoLoader();
|
||||
final String url = getBestVideoUrl(getMedia());
|
||||
if (url != null) {
|
||||
// mVideoLoader.loadVideo(url, this);
|
||||
mWebView.loadUrl(url);
|
||||
}
|
||||
}
|
||||
|
||||
private String getBestVideoUrl(ParcelableMedia media) {
|
||||
if (media == null || media.video_info == null) return null;
|
||||
for (Variant variant : media.video_info.variants) {
|
||||
if (ArrayUtils.contains(SUPPORTED_VIDEO_TYPES, variant.content_type)) {
|
||||
return variant.url;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBaseViewCreated(View view, Bundle savedInstanceState) {
|
||||
super.onBaseViewCreated(view, savedInstanceState);
|
||||
mWebView = (WebView) view.findViewById(R.id.web_view);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onVideoLoadingCancelled(String uri, VideoLoadingListener listener) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
mWebView.onResume();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroyView() {
|
||||
mWebView.destroy();
|
||||
super.onDestroyView();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPause() {
|
||||
mWebView.onPause();
|
||||
super.onPause();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setUserVisibleHint(boolean isVisibleToUser) {
|
||||
super.setUserVisibleHint(isVisibleToUser);
|
||||
// if (mVideoView != null && mVideoView.isPlaying()) {
|
||||
// mVideoView.pause();
|
||||
// }
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onVideoLoadingComplete(String uri, VideoLoadingListener listener, File file) {
|
||||
mWebView.loadUrl(Uri.fromFile(file).toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onVideoLoadingFailed(String uri, VideoLoadingListener listener, Exception e) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onVideoLoadingProgressUpdate(String uri, VideoLoadingListener listener, int current, int total) {
|
||||
|
||||
}
|
||||
|
||||
private ParcelableMedia getMedia() {
|
||||
final Bundle args = getArguments();
|
||||
return args.getParcelable(EXTRA_MEDIA);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onVideoLoadingStarted(String uri, VideoLoadingListener listener) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public static final class ImagePageFragment extends BaseSupportFragment
|
||||
implements DownloadListener, LoaderCallbacks<Result>, OnLayoutChangeListener, OnClickListener, ZoomListener {
|
||||
|
||||
|
@ -205,11 +310,16 @@ public final class MediaViewerActivity extends ThemedActionBarActivity implement
|
|||
mProgressBar.setVisibility(View.VISIBLE);
|
||||
mProgressBar.setIndeterminate(true);
|
||||
invalidateOptionsMenu();
|
||||
final ParcelableMedia media = args.getParcelable(EXTRA_MEDIA);
|
||||
final ParcelableMedia media = getMedia();
|
||||
final long accountId = args.getLong(EXTRA_ACCOUNT_ID, -1);
|
||||
return new TileImageLoader(getActivity(), this, accountId, Uri.parse(media.media_url));
|
||||
}
|
||||
|
||||
private ParcelableMedia getMedia() {
|
||||
final Bundle args = getArguments();
|
||||
return args.getParcelable(EXTRA_MEDIA);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoadFinished(final Loader<TileImageLoader.Result> loader, final TileImageLoader.Result data) {
|
||||
if (data.hasData()) {
|
||||
|
@ -269,7 +379,7 @@ public final class MediaViewerActivity extends ThemedActionBarActivity implement
|
|||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||
return inflater.inflate(R.layout.fragment_media_page, container, false);
|
||||
return inflater.inflate(R.layout.fragment_media_page_image, container, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -347,11 +457,6 @@ public final class MediaViewerActivity extends ThemedActionBarActivity implement
|
|||
startActivity(intent);
|
||||
}
|
||||
|
||||
private ParcelableMedia getMedia() {
|
||||
final Bundle args = getArguments();
|
||||
return args.getParcelable(EXTRA_MEDIA);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
|
@ -464,10 +569,18 @@ public final class MediaViewerActivity extends ThemedActionBarActivity implement
|
|||
|
||||
@Override
|
||||
public Fragment getItem(int position) {
|
||||
final ParcelableMedia media = mMedia[position];
|
||||
final Bundle args = new Bundle();
|
||||
args.putLong(EXTRA_ACCOUNT_ID, mAccountId);
|
||||
args.putParcelable(EXTRA_MEDIA, mMedia[position]);
|
||||
return Fragment.instantiate(mActivity, ImagePageFragment.class.getName(), args);
|
||||
args.putParcelable(EXTRA_MEDIA, media);
|
||||
switch (media.type) {
|
||||
case ParcelableMedia.TYPE_VIDEO: {
|
||||
return Fragment.instantiate(mActivity, VideoPageFragment.class.getName(), args);
|
||||
}
|
||||
default: {
|
||||
return Fragment.instantiate(mActivity, ImagePageFragment.class.getName(), args);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void setMedia(long accountId, ParcelableMedia[] media) {
|
||||
|
|
|
@ -68,7 +68,7 @@ import org.mariotaku.twidere.model.ParcelableUser.CachedIndices;
|
|||
import org.mariotaku.twidere.provider.TwidereDataStore.CachedUsers;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.SavedSearches;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.SearchHistory;
|
||||
import org.mariotaku.twidere.util.ImageLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.MediaLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.ParseUtils;
|
||||
import org.mariotaku.twidere.util.SwipeDismissListViewTouchListener;
|
||||
import org.mariotaku.twidere.util.SwipeDismissListViewTouchListener.DismissCallbacks;
|
||||
|
@ -436,7 +436,7 @@ public class QuickSearchBarActivity extends ThemedFragmentActivity implements On
|
|||
public void bindView(SuggestionsAdapter adapter, View view, int position) {
|
||||
final ParcelableUser user = mUser;
|
||||
final Context context = adapter.getContext();
|
||||
final ImageLoaderWrapper loader = adapter.getImageLoader();
|
||||
final MediaLoaderWrapper loader = adapter.getImageLoader();
|
||||
final ImageView icon = (ImageView) view.findViewById(android.R.id.icon);
|
||||
final TextView text1 = (TextView) view.findViewById(android.R.id.text1);
|
||||
final TextView text2 = (TextView) view.findViewById(android.R.id.text2);
|
||||
|
@ -480,7 +480,7 @@ public class QuickSearchBarActivity extends ThemedFragmentActivity implements On
|
|||
|
||||
@Override
|
||||
public void bindView(SuggestionsAdapter adapter, View view, int position) {
|
||||
final ImageLoaderWrapper loader = adapter.getImageLoader();
|
||||
final MediaLoaderWrapper loader = adapter.getImageLoader();
|
||||
final ImageView icon = (ImageView) view.findViewById(android.R.id.icon);
|
||||
final TextView text1 = (TextView) view.findViewById(android.R.id.text1);
|
||||
final TextView text2 = (TextView) view.findViewById(android.R.id.text2);
|
||||
|
@ -496,7 +496,7 @@ public class QuickSearchBarActivity extends ThemedFragmentActivity implements On
|
|||
|
||||
private final Context mContext;
|
||||
private final LayoutInflater mInflater;
|
||||
private final ImageLoaderWrapper mImageLoader;
|
||||
private final MediaLoaderWrapper mImageLoader;
|
||||
private final boolean mNicknameOnly;
|
||||
private List<SuggestionItem> mData;
|
||||
|
||||
|
@ -542,7 +542,7 @@ public class QuickSearchBarActivity extends ThemedFragmentActivity implements On
|
|||
return view;
|
||||
}
|
||||
|
||||
public ImageLoaderWrapper getImageLoader() {
|
||||
public MediaLoaderWrapper getImageLoader() {
|
||||
return mImageLoader;
|
||||
}
|
||||
|
||||
|
|
|
@ -48,7 +48,7 @@ import org.mariotaku.twidere.task.TwidereAsyncTask.Status;
|
|||
import org.mariotaku.twidere.util.AsyncTaskManager;
|
||||
import org.mariotaku.twidere.util.AsyncTwitterWrapper.UpdateProfileBannerImageTask;
|
||||
import org.mariotaku.twidere.util.AsyncTwitterWrapper.UpdateProfileImageTask;
|
||||
import org.mariotaku.twidere.util.ImageLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.MediaLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.ParseUtils;
|
||||
import org.mariotaku.twidere.util.ThemeUtils;
|
||||
import org.mariotaku.twidere.util.TwitterWrapper;
|
||||
|
@ -79,7 +79,7 @@ public class UserProfileEditorActivity extends BaseActionBarActivity implements
|
|||
private static final int REQUEST_PICK_LINK_COLOR = 3;
|
||||
private static final int REQUEST_PICK_BACKGROUND_COLOR = 4;
|
||||
|
||||
private ImageLoaderWrapper mLazyImageLoader;
|
||||
private MediaLoaderWrapper mLazyImageLoader;
|
||||
private AsyncTaskManager mAsyncTaskManager;
|
||||
private TwidereAsyncTask<Void, Void, ?> mTask;
|
||||
|
||||
|
|
|
@ -39,7 +39,7 @@ import org.mariotaku.twidere.fragment.support.UserFragment;
|
|||
import org.mariotaku.twidere.model.ParcelableActivity;
|
||||
import org.mariotaku.twidere.model.ParcelableStatus;
|
||||
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
|
||||
import org.mariotaku.twidere.util.ImageLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.MediaLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.ImageLoadingHandler;
|
||||
import org.mariotaku.twidere.util.SharedPreferencesWrapper;
|
||||
import org.mariotaku.twidere.util.ThemeUtils;
|
||||
|
@ -64,7 +64,7 @@ public abstract class AbsActivitiesAdapter<Data> extends Adapter<ViewHolder> imp
|
|||
|
||||
private final Context mContext;
|
||||
private final LayoutInflater mInflater;
|
||||
private final ImageLoaderWrapper mImageLoader;
|
||||
private final MediaLoaderWrapper mImageLoader;
|
||||
private final ImageLoadingHandler mLoadingHandler;
|
||||
private final AsyncTwitterWrapper mTwitterWrapper;
|
||||
private final int mCardBackgroundColor;
|
||||
|
@ -105,7 +105,7 @@ public abstract class AbsActivitiesAdapter<Data> extends Adapter<ViewHolder> imp
|
|||
public abstract void setData(Data data);
|
||||
|
||||
@Override
|
||||
public ImageLoaderWrapper getImageLoader() {
|
||||
public MediaLoaderWrapper getImageLoader() {
|
||||
return mImageLoader;
|
||||
}
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@ import org.mariotaku.twidere.app.TwidereApplication;
|
|||
import org.mariotaku.twidere.fragment.support.UserFragment;
|
||||
import org.mariotaku.twidere.model.ParcelableStatus;
|
||||
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
|
||||
import org.mariotaku.twidere.util.ImageLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.MediaLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.ImageLoadingHandler;
|
||||
import org.mariotaku.twidere.util.SharedPreferencesWrapper;
|
||||
import org.mariotaku.twidere.util.ThemeUtils;
|
||||
|
@ -39,7 +39,7 @@ public abstract class AbsStatusesAdapter<D> extends Adapter<ViewHolder> implemen
|
|||
|
||||
private final Context mContext;
|
||||
private final LayoutInflater mInflater;
|
||||
private final ImageLoaderWrapper mImageLoader;
|
||||
private final MediaLoaderWrapper mImageLoader;
|
||||
private final ImageLoadingHandler mLoadingHandler;
|
||||
private final AsyncTwitterWrapper mTwitterWrapper;
|
||||
private final int mCardBackgroundColor;
|
||||
|
@ -84,7 +84,7 @@ public abstract class AbsStatusesAdapter<D> extends Adapter<ViewHolder> implemen
|
|||
}
|
||||
|
||||
@Override
|
||||
public final ImageLoaderWrapper getImageLoader() {
|
||||
public final MediaLoaderWrapper getImageLoader() {
|
||||
return mImageLoader;
|
||||
}
|
||||
|
||||
|
|
|
@ -35,12 +35,12 @@ import org.mariotaku.twidere.app.TwidereApplication;
|
|||
import org.mariotaku.twidere.model.ParcelableAccount;
|
||||
import org.mariotaku.twidere.model.ParcelableAccount.Indices;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Accounts;
|
||||
import org.mariotaku.twidere.util.ImageLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.MediaLoaderWrapper;
|
||||
import org.mariotaku.twidere.view.holder.AccountViewHolder;
|
||||
|
||||
public class AccountsAdapter extends SimpleDragSortCursorAdapter implements Constants, IBaseAdapter {
|
||||
|
||||
private final ImageLoaderWrapper mImageLoader;
|
||||
private final MediaLoaderWrapper mImageLoader;
|
||||
private final SharedPreferences mPreferences;
|
||||
|
||||
private boolean mDisplayProfileImage;
|
||||
|
@ -90,7 +90,7 @@ public class AccountsAdapter extends SimpleDragSortCursorAdapter implements Cons
|
|||
}
|
||||
|
||||
@Override
|
||||
public ImageLoaderWrapper getImageLoader() {
|
||||
public MediaLoaderWrapper getImageLoader() {
|
||||
return mImageLoader;
|
||||
}
|
||||
|
||||
|
|
|
@ -29,13 +29,13 @@ import org.mariotaku.twidere.R;
|
|||
import org.mariotaku.twidere.app.TwidereApplication;
|
||||
import org.mariotaku.twidere.fragment.support.DirectMessagesConversationFragment;
|
||||
import org.mariotaku.twidere.model.ParcelableAccount;
|
||||
import org.mariotaku.twidere.util.ImageLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.MediaLoaderWrapper;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
public class AccountsSpinnerAdapter extends ArrayAdapter<ParcelableAccount> {
|
||||
|
||||
private final ImageLoaderWrapper mImageLoader;
|
||||
private final MediaLoaderWrapper mImageLoader;
|
||||
private final boolean mDisplayProfileImage;
|
||||
|
||||
public AccountsSpinnerAdapter(final Context context) {
|
||||
|
|
|
@ -25,7 +25,7 @@ import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
|
|||
|
||||
import org.mariotaku.twidere.adapter.iface.IBaseAdapter;
|
||||
import org.mariotaku.twidere.app.TwidereApplication;
|
||||
import org.mariotaku.twidere.util.ImageLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.MediaLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.OnLinkClickHandler;
|
||||
import org.mariotaku.twidere.util.TwidereLinkify;
|
||||
|
||||
|
@ -43,7 +43,7 @@ public class BaseArrayAdapter<T> extends ArrayAdapter<T> implements IBaseAdapter
|
|||
private boolean mDisplayProfileImage, mNicknameOnly, mDisplayNameFirst, mShowAccountColor;
|
||||
|
||||
private final SharedPreferences mNicknamePrefs, mColorPrefs;
|
||||
private final ImageLoaderWrapper mImageLoader;
|
||||
private final MediaLoaderWrapper mImageLoader;
|
||||
|
||||
public BaseArrayAdapter(final Context context, final int layoutRes) {
|
||||
this(context, layoutRes, null);
|
||||
|
@ -61,7 +61,7 @@ public class BaseArrayAdapter<T> extends ArrayAdapter<T> implements IBaseAdapter
|
|||
}
|
||||
|
||||
@Override
|
||||
public ImageLoaderWrapper getImageLoader() {
|
||||
public MediaLoaderWrapper getImageLoader() {
|
||||
return mImageLoader;
|
||||
}
|
||||
|
||||
|
|
|
@ -29,7 +29,7 @@ import android.support.v4.widget.SimpleCursorAdapter;
|
|||
|
||||
import org.mariotaku.twidere.adapter.iface.IBaseAdapter;
|
||||
import org.mariotaku.twidere.app.TwidereApplication;
|
||||
import org.mariotaku.twidere.util.ImageLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.MediaLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.OnLinkClickHandler;
|
||||
import org.mariotaku.twidere.util.TwidereLinkify;
|
||||
|
||||
|
@ -44,7 +44,7 @@ public class BaseCursorAdapter extends SimpleCursorAdapter implements IBaseAdapt
|
|||
private boolean mDisplayProfileImage, mNicknameOnly, mDisplayNameFirst, mShowAccountColor;
|
||||
|
||||
private final SharedPreferences mNicknamePrefs, mColorPrefs;
|
||||
private final ImageLoaderWrapper mImageLoader;
|
||||
private final MediaLoaderWrapper mImageLoader;
|
||||
|
||||
public BaseCursorAdapter(final Context context, final int layout, final Cursor c, final String[] from,
|
||||
final int[] to) {
|
||||
|
@ -64,7 +64,7 @@ public class BaseCursorAdapter extends SimpleCursorAdapter implements IBaseAdapt
|
|||
}
|
||||
|
||||
@Override
|
||||
public ImageLoaderWrapper getImageLoader() {
|
||||
public MediaLoaderWrapper getImageLoader() {
|
||||
return mImageLoader;
|
||||
}
|
||||
|
||||
|
|
|
@ -32,8 +32,8 @@ import org.mariotaku.twidere.app.TwidereApplication;
|
|||
import org.mariotaku.twidere.model.DraftItem;
|
||||
import org.mariotaku.twidere.model.ParcelableMediaUpdate;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Drafts;
|
||||
import org.mariotaku.twidere.util.MediaLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.TwidereArrayUtils;
|
||||
import org.mariotaku.twidere.util.ImageLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.ImageLoadingHandler;
|
||||
import org.mariotaku.twidere.util.Utils;
|
||||
import org.mariotaku.twidere.view.holder.DraftViewHolder;
|
||||
|
@ -42,7 +42,7 @@ import static org.mariotaku.twidere.util.Utils.getAccountColors;
|
|||
|
||||
public class DraftsAdapter extends SimpleCursorAdapter {
|
||||
|
||||
private final ImageLoaderWrapper mImageLoader;
|
||||
private final MediaLoaderWrapper mImageLoader;
|
||||
private final ImageLoadingHandler mImageLoadingHandler;
|
||||
|
||||
private float mTextSize;
|
||||
|
|
|
@ -28,14 +28,14 @@ import android.widget.ImageView;
|
|||
import org.mariotaku.twidere.Constants;
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.app.TwidereApplication;
|
||||
import org.mariotaku.twidere.util.ImageLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.MediaLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.ImageLoadingHandler;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
public class MediaPreviewAdapter extends ArrayAdapter<String> implements Constants {
|
||||
|
||||
private final ImageLoaderWrapper mImageLoader;
|
||||
private final MediaLoaderWrapper mImageLoader;
|
||||
private final SharedPreferences mPreferences;
|
||||
private final ImageLoadingHandler mImageLoadingHandler;
|
||||
|
||||
|
|
|
@ -36,7 +36,7 @@ import org.mariotaku.twidere.app.TwidereApplication;
|
|||
import org.mariotaku.twidere.model.ParcelableDirectMessage;
|
||||
import org.mariotaku.twidere.model.ParcelableDirectMessage.CursorIndices;
|
||||
import org.mariotaku.twidere.util.DirectMessageOnLinkClickHandler;
|
||||
import org.mariotaku.twidere.util.ImageLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.MediaLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.ImageLoadingHandler;
|
||||
import org.mariotaku.twidere.util.MultiSelectManager;
|
||||
import org.mariotaku.twidere.util.ThemeUtils;
|
||||
|
@ -59,7 +59,7 @@ public class MessageConversationAdapter extends Adapter<ViewHolder>
|
|||
|
||||
private final Context mContext;
|
||||
private final LayoutInflater mInflater;
|
||||
private final ImageLoaderWrapper mImageLoader;
|
||||
private final MediaLoaderWrapper mImageLoader;
|
||||
private final MultiSelectManager mMultiSelectManager;
|
||||
private final ImageLoadingHandler mImageLoadingHandler;
|
||||
|
||||
|
@ -84,7 +84,7 @@ public class MessageConversationAdapter extends Adapter<ViewHolder>
|
|||
return mContext;
|
||||
}
|
||||
|
||||
public ImageLoaderWrapper getImageLoader() {
|
||||
public MediaLoaderWrapper getImageLoader() {
|
||||
return mImageLoader;
|
||||
}
|
||||
|
||||
|
|
|
@ -34,7 +34,7 @@ import org.mariotaku.twidere.adapter.iface.IContentCardAdapter;
|
|||
import org.mariotaku.twidere.app.TwidereApplication;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.DirectMessages.ConversationEntries;
|
||||
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
|
||||
import org.mariotaku.twidere.util.ImageLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.MediaLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.ImageLoadingHandler;
|
||||
import org.mariotaku.twidere.util.MultiSelectManager;
|
||||
import org.mariotaku.twidere.util.SharedPreferencesWrapper;
|
||||
|
@ -46,7 +46,7 @@ public class MessageEntriesAdapter extends Adapter<ViewHolder> implements Consta
|
|||
|
||||
private final Context mContext;
|
||||
private final LayoutInflater mInflater;
|
||||
private final ImageLoaderWrapper mImageLoader;
|
||||
private final MediaLoaderWrapper mImageLoader;
|
||||
private final MultiSelectManager mMultiSelectManager;
|
||||
private final boolean mNicknameOnly;
|
||||
private boolean mLoadMoreIndicatorEnabled;
|
||||
|
@ -98,7 +98,7 @@ public class MessageEntriesAdapter extends Adapter<ViewHolder> implements Consta
|
|||
}
|
||||
|
||||
|
||||
public ImageLoaderWrapper getImageLoader() {
|
||||
public MediaLoaderWrapper getImageLoader() {
|
||||
return mImageLoader;
|
||||
}
|
||||
|
||||
|
|
|
@ -30,7 +30,7 @@ import org.mariotaku.twidere.R;
|
|||
import org.mariotaku.twidere.adapter.iface.IBaseCardAdapter;
|
||||
import org.mariotaku.twidere.app.TwidereApplication;
|
||||
import org.mariotaku.twidere.model.ParcelableUserList;
|
||||
import org.mariotaku.twidere.util.ImageLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.MediaLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.MultiSelectManager;
|
||||
import org.mariotaku.twidere.util.UserColorNameUtils;
|
||||
import org.mariotaku.twidere.util.Utils;
|
||||
|
@ -47,7 +47,7 @@ public class ParcelableUserListsListAdapter extends BaseArrayAdapter<ParcelableU
|
|||
OnClickListener {
|
||||
|
||||
private final Context mContext;
|
||||
private final ImageLoaderWrapper mImageLoader;
|
||||
private final MediaLoaderWrapper mImageLoader;
|
||||
private final MultiSelectManager mMultiSelectManager;
|
||||
private final Locale mLocale;
|
||||
|
||||
|
|
|
@ -28,7 +28,7 @@ import org.mariotaku.twidere.R;
|
|||
import org.mariotaku.twidere.adapter.iface.IBaseCardAdapter;
|
||||
import org.mariotaku.twidere.app.TwidereApplication;
|
||||
import org.mariotaku.twidere.model.ParcelableUser;
|
||||
import org.mariotaku.twidere.util.ImageLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.MediaLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.MultiSelectManager;
|
||||
import org.mariotaku.twidere.util.Utils;
|
||||
import org.mariotaku.twidere.view.holder.UserViewListHolder;
|
||||
|
@ -45,7 +45,7 @@ import static org.mariotaku.twidere.util.Utils.getUserTypeIconRes;
|
|||
|
||||
public class ParcelableUsersAdapter extends BaseArrayAdapter<ParcelableUser> implements IBaseCardAdapter {
|
||||
|
||||
private final ImageLoaderWrapper mProfileImageLoader;
|
||||
private final MediaLoaderWrapper mProfileImageLoader;
|
||||
private final MultiSelectManager mMultiSelectManager;
|
||||
private final Context mContext;
|
||||
|
||||
|
|
|
@ -27,7 +27,7 @@ import org.mariotaku.twidere.R;
|
|||
import org.mariotaku.twidere.adapter.iface.IBaseAdapter;
|
||||
import org.mariotaku.twidere.app.TwidereApplication;
|
||||
import org.mariotaku.twidere.model.ParcelableUserList;
|
||||
import org.mariotaku.twidere.util.ImageLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.MediaLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.UserColorNameUtils;
|
||||
import org.mariotaku.twidere.view.holder.TwoLineWithIconViewHolder;
|
||||
|
||||
|
@ -39,7 +39,7 @@ import static org.mariotaku.twidere.util.UserColorNameUtils.getDisplayName;
|
|||
public class SimpleParcelableUserListsAdapter extends BaseArrayAdapter<ParcelableUserList> implements IBaseAdapter {
|
||||
|
||||
private final Context mContext;
|
||||
private final ImageLoaderWrapper mImageLoader;
|
||||
private final MediaLoaderWrapper mImageLoader;
|
||||
|
||||
public SimpleParcelableUserListsAdapter(final Context context) {
|
||||
super(context, R.layout.list_item_two_line);
|
||||
|
|
|
@ -28,7 +28,7 @@ import org.mariotaku.twidere.R;
|
|||
import org.mariotaku.twidere.adapter.iface.IBaseAdapter;
|
||||
import org.mariotaku.twidere.app.TwidereApplication;
|
||||
import org.mariotaku.twidere.model.ParcelableUser;
|
||||
import org.mariotaku.twidere.util.ImageLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.MediaLoaderWrapper;
|
||||
import org.mariotaku.twidere.view.holder.TwoLineWithIconViewHolder;
|
||||
|
||||
import java.util.List;
|
||||
|
@ -39,7 +39,7 @@ import static org.mariotaku.twidere.util.Utils.getUserTypeIconRes;
|
|||
|
||||
public class SimpleParcelableUsersAdapter extends BaseArrayAdapter<ParcelableUser> implements IBaseAdapter {
|
||||
|
||||
private final ImageLoaderWrapper mImageLoader;
|
||||
private final MediaLoaderWrapper mImageLoader;
|
||||
private final Context mContext;
|
||||
|
||||
public SimpleParcelableUsersAdapter(final Context context) {
|
||||
|
|
|
@ -42,7 +42,7 @@ import org.mariotaku.twidere.app.TwidereApplication;
|
|||
import org.mariotaku.twidere.provider.TwidereDataStore.CachedHashtags;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.CachedUsers;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.CachedValues;
|
||||
import org.mariotaku.twidere.util.ImageLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.MediaLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.ParseUtils;
|
||||
import org.mariotaku.twidere.util.Utils;
|
||||
|
||||
|
@ -55,7 +55,7 @@ public class UserHashtagAutoCompleteAdapter extends SimpleCursorAdapter implemen
|
|||
|
||||
private final ContentResolver mResolver;
|
||||
private final SQLiteDatabase mDatabase;
|
||||
private final ImageLoaderWrapper mProfileImageLoader;
|
||||
private final MediaLoaderWrapper mProfileImageLoader;
|
||||
private final SharedPreferences mPreferences, mUserNicknamePreferences;
|
||||
|
||||
private final EditText mEditText;
|
||||
|
|
|
@ -22,11 +22,11 @@ package org.mariotaku.twidere.adapter.iface;
|
|||
import android.widget.ListAdapter;
|
||||
|
||||
import org.mariotaku.twidere.Constants;
|
||||
import org.mariotaku.twidere.util.ImageLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.MediaLoaderWrapper;
|
||||
|
||||
public interface IBaseAdapter extends Constants, ListAdapter {
|
||||
|
||||
public ImageLoaderWrapper getImageLoader();
|
||||
public MediaLoaderWrapper getImageLoader();
|
||||
|
||||
public int getLinkHighlightOption();
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@ package org.mariotaku.twidere.adapter.iface;
|
|||
import android.content.Context;
|
||||
|
||||
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
|
||||
import org.mariotaku.twidere.util.ImageLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.MediaLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.ImageLoadingHandler;
|
||||
import org.mariotaku.twidere.view.ShapedImageView.ShapeStyle;
|
||||
|
||||
|
@ -30,7 +30,7 @@ import org.mariotaku.twidere.view.ShapedImageView.ShapeStyle;
|
|||
* Created by mariotaku on 15/1/3.
|
||||
*/
|
||||
public interface IContentCardAdapter extends IGapSupportedAdapter, ContentCardClickListener {
|
||||
ImageLoaderWrapper getImageLoader();
|
||||
MediaLoaderWrapper getImageLoader();
|
||||
|
||||
Context getContext();
|
||||
|
||||
|
|
|
@ -46,12 +46,13 @@ import org.mariotaku.twidere.activity.MainHondaJOJOActivity;
|
|||
import org.mariotaku.twidere.service.RefreshService;
|
||||
import org.mariotaku.twidere.util.AsyncTaskManager;
|
||||
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
|
||||
import org.mariotaku.twidere.util.ImageLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.MediaLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.MessagesManager;
|
||||
import org.mariotaku.twidere.util.MultiSelectManager;
|
||||
import org.mariotaku.twidere.util.StrictModeUtils;
|
||||
import org.mariotaku.twidere.util.ThemeUtils;
|
||||
import org.mariotaku.twidere.util.Utils;
|
||||
import org.mariotaku.twidere.util.VideoLoader;
|
||||
import org.mariotaku.twidere.util.content.TwidereSQLiteOpenHelper;
|
||||
import org.mariotaku.twidere.util.imageloader.TwidereImageDownloader;
|
||||
import org.mariotaku.twidere.util.imageloader.URLFileNameGenerator;
|
||||
|
@ -74,7 +75,7 @@ public class TwidereApplication extends MultiDexApplication implements Constants
|
|||
OnSharedPreferenceChangeListener {
|
||||
|
||||
private Handler mHandler;
|
||||
private ImageLoaderWrapper mImageLoaderWrapper;
|
||||
private MediaLoaderWrapper mMediaLoaderWrapper;
|
||||
private ImageLoader mImageLoader;
|
||||
private AsyncTaskManager mAsyncTaskManager;
|
||||
private SharedPreferences mPreferences;
|
||||
|
@ -87,6 +88,7 @@ public class TwidereApplication extends MultiDexApplication implements Constants
|
|||
private HostAddressResolver mResolver;
|
||||
private SQLiteDatabase mDatabase;
|
||||
private Bus mMessageBus;
|
||||
private VideoLoader mVideoLoader;
|
||||
|
||||
public AsyncTaskManager getAsyncTaskManager() {
|
||||
if (mAsyncTaskManager != null) return mAsyncTaskManager;
|
||||
|
@ -137,9 +139,15 @@ public class TwidereApplication extends MultiDexApplication implements Constants
|
|||
return mImageLoader = loader;
|
||||
}
|
||||
|
||||
public ImageLoaderWrapper getImageLoaderWrapper() {
|
||||
if (mImageLoaderWrapper != null) return mImageLoaderWrapper;
|
||||
return mImageLoaderWrapper = new ImageLoaderWrapper(getImageLoader());
|
||||
public VideoLoader getVideoLoader() {
|
||||
if (mVideoLoader != null) return mVideoLoader;
|
||||
final VideoLoader loader = new VideoLoader(this);
|
||||
return mVideoLoader = loader;
|
||||
}
|
||||
|
||||
public MediaLoaderWrapper getImageLoaderWrapper() {
|
||||
if (mMediaLoaderWrapper != null) return mMediaLoaderWrapper;
|
||||
return mMediaLoaderWrapper = new MediaLoaderWrapper(getImageLoader(), getVideoLoader());
|
||||
}
|
||||
|
||||
public static TwidereApplication getInstance(final Context context) {
|
||||
|
@ -215,8 +223,8 @@ public class TwidereApplication extends MultiDexApplication implements Constants
|
|||
|
||||
@Override
|
||||
public void onLowMemory() {
|
||||
if (mImageLoaderWrapper != null) {
|
||||
mImageLoaderWrapper.clearMemoryCache();
|
||||
if (mMediaLoaderWrapper != null) {
|
||||
mMediaLoaderWrapper.clearMemoryCache();
|
||||
}
|
||||
super.onLowMemory();
|
||||
}
|
||||
|
|
|
@ -91,7 +91,7 @@ import org.mariotaku.twidere.menu.SupportAccountActionProvider;
|
|||
import org.mariotaku.twidere.model.ParcelableAccount;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Accounts;
|
||||
import org.mariotaku.twidere.util.CompareUtils;
|
||||
import org.mariotaku.twidere.util.ImageLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.MediaLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.ThemeUtils;
|
||||
import org.mariotaku.twidere.util.TransitionUtils;
|
||||
import org.mariotaku.twidere.util.Utils;
|
||||
|
@ -133,7 +133,7 @@ public class AccountsDashboardFragment extends BaseSupportListFragment implement
|
|||
private View mAccountProfileContainer;
|
||||
|
||||
private Context mThemedContext;
|
||||
private ImageLoaderWrapper mImageLoader;
|
||||
private MediaLoaderWrapper mImageLoader;
|
||||
private SupportAccountActionProvider mAccountActionProvider;
|
||||
private boolean mSwitchAccountAnimationPlaying;
|
||||
|
||||
|
@ -600,7 +600,7 @@ public class AccountsDashboardFragment extends BaseSupportListFragment implement
|
|||
private static class AccountSelectorAdapter extends Adapter<AccountProfileImageViewHolder> {
|
||||
|
||||
private final LayoutInflater mInflater;
|
||||
private final ImageLoaderWrapper mImageLoader;
|
||||
private final MediaLoaderWrapper mImageLoader;
|
||||
private final AccountsDashboardFragment mFragment;
|
||||
private ParcelableAccount[] mAccounts;
|
||||
private ParcelableAccount[] mInternalAccounts;
|
||||
|
|
|
@ -86,7 +86,7 @@ import org.mariotaku.twidere.provider.TwidereDataStore.DirectMessages;
|
|||
import org.mariotaku.twidere.provider.TwidereDataStore.DirectMessages.Conversation;
|
||||
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
|
||||
import org.mariotaku.twidere.util.ClipboardUtils;
|
||||
import org.mariotaku.twidere.util.ImageLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.MediaLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.ParseUtils;
|
||||
import org.mariotaku.twidere.util.TwidereValidator;
|
||||
import org.mariotaku.twidere.util.UserColorNameUtils;
|
||||
|
@ -145,7 +145,7 @@ public class DirectMessagesConversationFragment extends BaseSupportFragment impl
|
|||
private ParcelableAccount mAccount;
|
||||
private ParcelableUser mRecipient;
|
||||
|
||||
private ImageLoaderWrapper mImageLoader;
|
||||
private MediaLoaderWrapper mImageLoader;
|
||||
private IColorLabelView mProfileImageContainer;
|
||||
|
||||
private LoaderCallbacks<List<ParcelableUser>> mSearchLoadersCallback = new LoaderCallbacks<List<ParcelableUser>>() {
|
||||
|
|
|
@ -35,7 +35,7 @@ import org.mariotaku.twidere.R;
|
|||
import org.mariotaku.twidere.app.TwidereApplication;
|
||||
import org.mariotaku.twidere.model.ParcelableStatus;
|
||||
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
|
||||
import org.mariotaku.twidere.util.ImageLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.MediaLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.ImageLoadingHandler;
|
||||
import org.mariotaku.twidere.util.SharedPreferencesWrapper;
|
||||
import org.mariotaku.twidere.util.ThemeUtils;
|
||||
|
@ -83,7 +83,7 @@ public class RetweetQuoteDialogFragment extends BaseSupportDialogFragment implem
|
|||
final Context context = builder.getContext();
|
||||
final SharedPreferencesWrapper preferences = SharedPreferencesWrapper.getInstance(context,
|
||||
SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
|
||||
final ImageLoaderWrapper loader = TwidereApplication.getInstance(context).getImageLoaderWrapper();
|
||||
final MediaLoaderWrapper loader = TwidereApplication.getInstance(context).getImageLoaderWrapper();
|
||||
final ImageLoadingHandler handler = new ImageLoadingHandler(R.id.media_preview_progress);
|
||||
final AsyncTwitterWrapper twitter = getTwitterWrapper();
|
||||
final LayoutInflater inflater = LayoutInflater.from(context);
|
||||
|
|
|
@ -87,7 +87,7 @@ import org.mariotaku.twidere.text.method.StatusContentMovementMethod;
|
|||
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
|
||||
import org.mariotaku.twidere.util.ClipboardUtils;
|
||||
import org.mariotaku.twidere.util.CompareUtils;
|
||||
import org.mariotaku.twidere.util.ImageLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.MediaLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.ImageLoadingHandler;
|
||||
import org.mariotaku.twidere.util.LinkCreator;
|
||||
import org.mariotaku.twidere.util.StatusLinkClickHandler;
|
||||
|
@ -453,7 +453,7 @@ public class StatusFragment extends BaseSupportFragment
|
|||
private final Context mContext;
|
||||
private final StatusFragment mFragment;
|
||||
private final LayoutInflater mInflater;
|
||||
private final ImageLoaderWrapper mImageLoader;
|
||||
private final MediaLoaderWrapper mImageLoader;
|
||||
private final ImageLoadingHandler mImageLoadingHandler;
|
||||
|
||||
private final boolean mNameFirst, mNicknameOnly;
|
||||
|
@ -506,7 +506,7 @@ public class StatusFragment extends BaseSupportFragment
|
|||
return mFragment;
|
||||
}
|
||||
|
||||
public ImageLoaderWrapper getImageLoader() {
|
||||
public MediaLoaderWrapper getImageLoader() {
|
||||
return mImageLoader;
|
||||
}
|
||||
|
||||
|
@ -1110,7 +1110,7 @@ public class StatusFragment extends BaseSupportFragment
|
|||
final StatusFragment fragment = adapter.getFragment();
|
||||
final Context context = adapter.getContext();
|
||||
final Resources resources = context.getResources();
|
||||
final ImageLoaderWrapper loader = adapter.getImageLoader();
|
||||
final MediaLoaderWrapper loader = adapter.getImageLoader();
|
||||
final boolean nameFirst = adapter.isNameFirst();
|
||||
final boolean nicknameOnly = adapter.isNicknameOnly();
|
||||
|
||||
|
|
|
@ -41,7 +41,7 @@ import org.mariotaku.twidere.app.TwidereApplication;
|
|||
import org.mariotaku.twidere.model.ParcelableStatus;
|
||||
import org.mariotaku.twidere.model.SingleResponse;
|
||||
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
|
||||
import org.mariotaku.twidere.util.ImageLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.MediaLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.ImageLoadingHandler;
|
||||
import org.mariotaku.twidere.util.SharedPreferencesWrapper;
|
||||
import org.mariotaku.twidere.util.Utils;
|
||||
|
@ -128,7 +128,7 @@ public class StatusTranslateDialogFragment extends BaseSupportDialogFragment imp
|
|||
if (status == null || translated == null) return;
|
||||
final FragmentActivity activity = getActivity();
|
||||
final TwidereApplication application = getApplication();
|
||||
final ImageLoaderWrapper loader = application.getImageLoaderWrapper();
|
||||
final MediaLoaderWrapper loader = application.getImageLoaderWrapper();
|
||||
final ImageLoadingHandler handler = new ImageLoadingHandler(R.id.media_preview_progress);
|
||||
final AsyncTwitterWrapper twitter = getTwitterWrapper();
|
||||
final SharedPreferencesWrapper preferences = SharedPreferencesWrapper.getInstance(activity,
|
||||
|
|
|
@ -107,7 +107,7 @@ import org.mariotaku.twidere.provider.TwidereDataStore.Filters;
|
|||
import org.mariotaku.twidere.text.TextAlphaSpan;
|
||||
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
|
||||
import org.mariotaku.twidere.util.ContentValuesCreator;
|
||||
import org.mariotaku.twidere.util.ImageLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.MediaLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.LinkCreator;
|
||||
import org.mariotaku.twidere.util.MathUtils;
|
||||
import org.mariotaku.twidere.util.ParseUtils;
|
||||
|
@ -174,7 +174,7 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
|
|||
private static final int LOADER_ID_USER = 1;
|
||||
private static final int LOADER_ID_FRIENDSHIP = 2;
|
||||
|
||||
private ImageLoaderWrapper mProfileImageLoader;
|
||||
private MediaLoaderWrapper mProfileImageLoader;
|
||||
|
||||
private ShapedImageView mProfileImageView;
|
||||
private ImageView mProfileTypeView;
|
||||
|
|
|
@ -70,7 +70,7 @@ import org.mariotaku.twidere.model.ParcelableUser;
|
|||
import org.mariotaku.twidere.model.ParcelableUserList;
|
||||
import org.mariotaku.twidere.model.SingleResponse;
|
||||
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
|
||||
import org.mariotaku.twidere.util.ImageLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.MediaLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.LinkCreator;
|
||||
import org.mariotaku.twidere.util.OnLinkClickHandler;
|
||||
import org.mariotaku.twidere.util.ParseUtils;
|
||||
|
@ -99,7 +99,7 @@ public class UserListFragment extends BaseSupportFragment implements OnClickList
|
|||
LoaderCallbacks<SingleResponse<ParcelableUserList>>, DrawerCallback,
|
||||
SystemWindowsInsetsCallback, SupportFragmentCallback {
|
||||
|
||||
private ImageLoaderWrapper mProfileImageLoader;
|
||||
private MediaLoaderWrapper mProfileImageLoader;
|
||||
private AsyncTwitterWrapper mTwitterWrapper;
|
||||
|
||||
private ImageView mProfileImageView;
|
||||
|
|
|
@ -22,7 +22,7 @@ import org.mariotaku.twidere.app.TwidereApplication;
|
|||
import org.mariotaku.twidere.loader.support.MediaTimelineLoader;
|
||||
import org.mariotaku.twidere.model.ParcelableMedia;
|
||||
import org.mariotaku.twidere.model.ParcelableStatus;
|
||||
import org.mariotaku.twidere.util.ImageLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.MediaLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.ImageLoadingHandler;
|
||||
import org.mariotaku.twidere.util.SimpleDrawerCallback;
|
||||
import org.mariotaku.twidere.view.HeaderDrawerLayout.DrawerCallback;
|
||||
|
@ -161,7 +161,7 @@ public class UserMediaTimelineFragment extends BaseSupportFragment
|
|||
private static class MediaTimelineAdapter extends Adapter<MediaTimelineViewHolder> {
|
||||
|
||||
private final LayoutInflater mInflater;
|
||||
private final ImageLoaderWrapper mImageLoader;
|
||||
private final MediaLoaderWrapper mImageLoader;
|
||||
private final ImageLoadingHandler mLoadingHandler;
|
||||
private List<ParcelableStatus> mData;
|
||||
|
||||
|
@ -208,7 +208,7 @@ public class UserMediaTimelineFragment extends BaseSupportFragment
|
|||
mediaTextView = (TextView) itemView.findViewById(R.id.media_text);
|
||||
}
|
||||
|
||||
public void setMedia(ImageLoaderWrapper loader, ImageLoadingHandler loadingHandler, ParcelableStatus status) {
|
||||
public void setMedia(MediaLoaderWrapper loader, ImageLoadingHandler loadingHandler, ParcelableStatus status) {
|
||||
final ParcelableMedia[] media = status.media;
|
||||
if (media == null || media.length < 1) return;
|
||||
final ParcelableMedia firstMedia = media[0];
|
||||
|
|
|
@ -31,7 +31,7 @@ import org.mariotaku.twidere.R;
|
|||
import org.mariotaku.twidere.app.TwidereApplication;
|
||||
import org.mariotaku.twidere.model.ParcelableStatus;
|
||||
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
|
||||
import org.mariotaku.twidere.util.ImageLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.MediaLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.ImageLoadingHandler;
|
||||
import org.mariotaku.twidere.util.SharedPreferencesWrapper;
|
||||
import org.mariotaku.twidere.util.Utils;
|
||||
|
@ -71,7 +71,7 @@ public class ViewStatusDialogFragment extends BaseSupportDialogFragment {
|
|||
}
|
||||
final TwidereApplication application = getApplication();
|
||||
final FragmentActivity activity = getActivity();
|
||||
final ImageLoaderWrapper loader = application.getImageLoaderWrapper();
|
||||
final MediaLoaderWrapper loader = application.getImageLoaderWrapper();
|
||||
final ImageLoadingHandler handler = new ImageLoadingHandler(R.id.media_preview_progress);
|
||||
final AsyncTwitterWrapper twitter = getTwitterWrapper();
|
||||
final SharedPreferencesWrapper preferences = SharedPreferencesWrapper.getInstance(activity,
|
||||
|
|
|
@ -40,7 +40,7 @@ import org.mariotaku.twidere.R;
|
|||
import org.mariotaku.twidere.adapter.ArrayAdapter;
|
||||
import org.mariotaku.twidere.app.TwidereApplication;
|
||||
import org.mariotaku.twidere.model.ParcelableAccount;
|
||||
import org.mariotaku.twidere.util.ImageLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.MediaLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.ThemeUtils;
|
||||
import org.mariotaku.twidere.util.ThemedViewFactory;
|
||||
import org.mariotaku.twidere.util.Utils;
|
||||
|
@ -146,7 +146,7 @@ public class AccountSelectorPopupWindow {
|
|||
|
||||
private static class AccountsGridAdapter extends ArrayAdapter<ParcelableAccount> {
|
||||
|
||||
private final ImageLoaderWrapper mImageLoader;
|
||||
private final MediaLoaderWrapper mImageLoader;
|
||||
|
||||
public AccountsGridAdapter(Context context) {
|
||||
super(context, R.layout.grid_item_selector_account);
|
||||
|
|
|
@ -47,7 +47,7 @@ import org.mariotaku.twidere.R;
|
|||
import org.mariotaku.twidere.app.TwidereApplication;
|
||||
import org.mariotaku.twidere.model.ParcelableAccount;
|
||||
import org.mariotaku.twidere.task.TwidereAsyncTask;
|
||||
import org.mariotaku.twidere.util.ImageLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.MediaLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.Utils;
|
||||
|
||||
import java.util.List;
|
||||
|
@ -100,7 +100,7 @@ public abstract class AccountsListPreference extends PreferenceCategory implemen
|
|||
|
||||
private final ParcelableAccount mAccount;
|
||||
private final SharedPreferences mSwitchPreference;
|
||||
private final ImageLoaderWrapper mImageLoader;
|
||||
private final MediaLoaderWrapper mImageLoader;
|
||||
|
||||
private final String mSwitchKey;
|
||||
private final boolean mSwitchDefault;
|
||||
|
|
|
@ -36,16 +36,18 @@ import org.mariotaku.twidere.util.imageloader.OvalBitmapDisplayer;
|
|||
|
||||
import static org.mariotaku.twidere.util.Utils.getBestBannerUrl;
|
||||
|
||||
public class ImageLoaderWrapper implements Constants {
|
||||
public class MediaLoaderWrapper implements Constants {
|
||||
|
||||
private final ImageLoader mImageLoader;
|
||||
private final DisplayImageOptions mProfileImageDisplayOptions;
|
||||
private final DisplayImageOptions mDashboardProfileImageDisplayOptions;
|
||||
private final DisplayImageOptions mOvalProfileImageDisplayOptions;
|
||||
private final DisplayImageOptions mImageDisplayOptions, mBannerDisplayOptions;
|
||||
private final VideoLoader mVideoLoader;
|
||||
|
||||
public ImageLoaderWrapper(final ImageLoader loader) {
|
||||
mImageLoader = loader;
|
||||
public MediaLoaderWrapper(final ImageLoader imageLoader, VideoLoader videoLoader) {
|
||||
mImageLoader = imageLoader;
|
||||
mVideoLoader = videoLoader;
|
||||
final DisplayImageOptions.Builder profileOptsBuilder = new DisplayImageOptions.Builder();
|
||||
profileOptsBuilder.cacheInMemory(true);
|
||||
profileOptsBuilder.cacheOnDisk(true);
|
|
@ -471,7 +471,7 @@ public final class Utils implements Constants, TwitterConstants {
|
|||
}
|
||||
}
|
||||
|
||||
public static void addToLinearLayout(final LinearLayout container, final ImageLoaderWrapper loader,
|
||||
public static void addToLinearLayout(final LinearLayout container, final MediaLoaderWrapper loader,
|
||||
final List<ParcelableMedia> mediaList, final long accountId,
|
||||
final int maxColumnCount, final OnMediaClickListener mediaClickListener) {
|
||||
if (container.getOrientation() != LinearLayout.VERTICAL)
|
||||
|
@ -510,7 +510,7 @@ public final class Utils implements Constants, TwitterConstants {
|
|||
}
|
||||
}
|
||||
|
||||
public static void addToLinearLayout(final LinearLayout container, final ImageLoaderWrapper loader,
|
||||
public static void addToLinearLayout(final LinearLayout container, final MediaLoaderWrapper loader,
|
||||
final ParcelableMedia[] mediaArray, final long accountId,
|
||||
final int maxColumnCount, final OnMediaClickListener listener) {
|
||||
addToLinearLayout(container, loader, Arrays.asList(mediaArray), accountId, maxColumnCount,
|
||||
|
|
|
@ -0,0 +1,171 @@
|
|||
/*
|
||||
* Twidere - Twitter client for Android
|
||||
*
|
||||
* Copyright (C) 2012-2015 Mariotaku Lee <mariotaku.lee@gmail.com>
|
||||
*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package org.mariotaku.twidere.util;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.util.Log;
|
||||
|
||||
import com.nostra13.universalimageloader.cache.disc.DiskCache;
|
||||
import com.nostra13.universalimageloader.core.download.ImageDownloader;
|
||||
import com.nostra13.universalimageloader.utils.IoUtils;
|
||||
import com.squareup.otto.Bus;
|
||||
|
||||
import org.mariotaku.twidere.app.TwidereApplication;
|
||||
import org.mariotaku.twidere.model.SingleResponse;
|
||||
import org.mariotaku.twidere.task.ManagedAsyncTask;
|
||||
import org.mariotaku.twidere.util.message.VideoLoadFinishedEvent;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 14-8-13.
|
||||
*/
|
||||
public class VideoLoader {
|
||||
|
||||
private final Context mContext;
|
||||
private final DiskCache mDiskCache;
|
||||
private final ImageDownloader mImageDownloader;
|
||||
private final AsyncTaskManager mTaskManager;
|
||||
private final Bus mBus;
|
||||
|
||||
public VideoLoader(Context context) {
|
||||
final TwidereApplication app = TwidereApplication.getInstance(context);
|
||||
mContext = context;
|
||||
mDiskCache = app.getDiskCache();
|
||||
mImageDownloader = app.getImageDownloader();
|
||||
mTaskManager = app.getAsyncTaskManager();
|
||||
mBus = app.getMessageBus();
|
||||
}
|
||||
|
||||
public File getCachedVideoFile(final String url, boolean loadIfNotFound) {
|
||||
if (url == null) return null;
|
||||
final File cache = mDiskCache.get(url);
|
||||
if (cache.exists())
|
||||
return cache;
|
||||
else if (loadIfNotFound) {
|
||||
loadVideo(url, null);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
public int loadVideo(String uri, VideoLoadingListener listener) {
|
||||
if (mTaskManager.hasRunningTasksForTag(uri)) {
|
||||
return 0;
|
||||
}
|
||||
return mTaskManager.add(new PreLoadVideoTask(mContext, this, listener, uri), true);
|
||||
}
|
||||
|
||||
private void notifyTaskFinish(String uri, boolean succeeded) {
|
||||
mBus.post(new VideoLoadFinishedEvent());
|
||||
}
|
||||
|
||||
public interface VideoLoadingListener {
|
||||
|
||||
void onVideoLoadingCancelled(String uri, VideoLoadingListener listener);
|
||||
|
||||
void onVideoLoadingComplete(String uri, VideoLoadingListener listener, File file);
|
||||
|
||||
void onVideoLoadingFailed(String uri, VideoLoadingListener listener, Exception e);
|
||||
|
||||
void onVideoLoadingProgressUpdate(String uri, VideoLoadingListener listener, int current, int total);
|
||||
|
||||
void onVideoLoadingStarted(String uri, VideoLoadingListener listener);
|
||||
}
|
||||
|
||||
private static class PreLoadVideoTask extends ManagedAsyncTask<Void, Integer, SingleResponse<File>> implements IoUtils.CopyListener {
|
||||
|
||||
private final VideoLoader mPreLoader;
|
||||
private final VideoLoadingListener mListener;
|
||||
private final String mUri;
|
||||
|
||||
private PreLoadVideoTask(final Context context, final VideoLoader preLoader, VideoLoadingListener listener, final String uri) {
|
||||
super(context, preLoader.mTaskManager, uri);
|
||||
mPreLoader = preLoader;
|
||||
mListener = listener;
|
||||
mUri = uri;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onBytesCopied(int current, int total) {
|
||||
if (isCancelled()) return false;
|
||||
publishProgress(current, total);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SingleResponse<File> doInBackground(Void... params) {
|
||||
final File file = mPreLoader.mDiskCache.get(mUri);
|
||||
if (file.isFile() && file.length() > 0) return SingleResponse.getInstance(file);
|
||||
try {
|
||||
final InputStream is = mPreLoader.mImageDownloader.getStream(mUri, null);
|
||||
mPreLoader.mDiskCache.save(mUri, is, this);
|
||||
IoUtils.closeSilently(is);
|
||||
} catch (IOException e) {
|
||||
mPreLoader.mDiskCache.remove(mUri);
|
||||
Log.w(LOGTAG, e);
|
||||
return SingleResponse.getInstance(e);
|
||||
}
|
||||
return SingleResponse.getInstance(file);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onProgressUpdate(Integer... values) {
|
||||
super.onProgressUpdate(values);
|
||||
if (mListener != null) {
|
||||
mListener.onVideoLoadingProgressUpdate(mUri, mListener, values[0], values[1]);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPreExecute() {
|
||||
super.onPreExecute();
|
||||
if (mListener != null) {
|
||||
mListener.onVideoLoadingStarted(mUri, mListener);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(SingleResponse<File> result) {
|
||||
super.onPostExecute(result);
|
||||
if (mListener != null) {
|
||||
if (result.hasData()) {
|
||||
mListener.onVideoLoadingComplete(mUri, mListener, result.getData());
|
||||
} else {
|
||||
mListener.onVideoLoadingFailed(mUri, mListener, result.getException());
|
||||
}
|
||||
}
|
||||
mPreLoader.notifyTaskFinish(mUri, result.hasData());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCancelled() {
|
||||
super.onCancelled();
|
||||
if (mListener != null) {
|
||||
mListener.onVideoLoadingCancelled(mUri, mListener);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
/*
|
||||
* Twidere - Twitter client for Android
|
||||
*
|
||||
* Copyright (C) 2012-2015 Mariotaku Lee <mariotaku.lee@gmail.com>
|
||||
*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package org.mariotaku.twidere.util.message;
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 15/3/23.
|
||||
*/
|
||||
public class VideoLoadFinishedEvent {
|
||||
}
|
|
@ -33,7 +33,7 @@ import android.widget.TextView;
|
|||
import org.mariotaku.twidere.Constants;
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.model.ParcelableMedia;
|
||||
import org.mariotaku.twidere.util.ImageLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.MediaLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.ImageLoadingHandler;
|
||||
import org.mariotaku.twidere.util.Utils.OnMediaClickListener;
|
||||
|
||||
|
@ -84,7 +84,7 @@ public class CardMediaContainer extends ViewGroup implements Constants {
|
|||
}
|
||||
|
||||
public void displayMedia(@Nullable final ParcelableMedia[] mediaArray,
|
||||
@NonNull final ImageLoaderWrapper loader,
|
||||
@NonNull final MediaLoaderWrapper loader,
|
||||
final long accountId,
|
||||
final OnMediaClickListener mediaClickListener,
|
||||
final ImageLoadingHandler loadingHandler) {
|
||||
|
|
|
@ -37,7 +37,7 @@ import org.mariotaku.twidere.R;
|
|||
import org.mariotaku.twidere.adapter.AbsActivitiesAdapter;
|
||||
import org.mariotaku.twidere.model.ParcelableActivity;
|
||||
import org.mariotaku.twidere.model.ParcelableUser;
|
||||
import org.mariotaku.twidere.util.ImageLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.MediaLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.UserColorNameUtils;
|
||||
import org.mariotaku.twidere.view.ActionIconView;
|
||||
import org.oshkimaadziig.george.androidutils.SpanFormatter;
|
||||
|
@ -156,7 +156,7 @@ public class ActivityTitleSummaryViewHolder extends ViewHolder {
|
|||
}
|
||||
|
||||
private void displayUserProfileImages(final ParcelableUser[] statuses) {
|
||||
final ImageLoaderWrapper imageLoader = adapter.getImageLoader();
|
||||
final MediaLoaderWrapper imageLoader = adapter.getImageLoader();
|
||||
if (statuses == null) {
|
||||
for (final ImageView view : profileImageViews) {
|
||||
imageLoader.cancelDisplayTask(view);
|
||||
|
|
|
@ -34,7 +34,7 @@ import org.mariotaku.twidere.adapter.MessageConversationAdapter;
|
|||
import org.mariotaku.twidere.model.ParcelableDirectMessage.CursorIndices;
|
||||
import org.mariotaku.twidere.model.ParcelableMedia;
|
||||
import org.mariotaku.twidere.util.ColorUtils;
|
||||
import org.mariotaku.twidere.util.ImageLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.MediaLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.SimpleValueSerializer;
|
||||
import org.mariotaku.twidere.util.TwidereLinkify;
|
||||
import org.mariotaku.twidere.util.Utils;
|
||||
|
@ -73,7 +73,7 @@ public class MessageConversationViewHolder extends ViewHolder {
|
|||
public void displayMessage(Cursor cursor, CursorIndices indices) {
|
||||
final Context context = adapter.getContext();
|
||||
final TwidereLinkify linkify = adapter.getLinkify();
|
||||
final ImageLoaderWrapper loader = adapter.getImageLoader();
|
||||
final MediaLoaderWrapper loader = adapter.getImageLoader();
|
||||
|
||||
final long accountId = cursor.getLong(indices.account_id);
|
||||
final long timestamp = cursor.getLong(indices.message_timestamp);
|
||||
|
|
|
@ -32,7 +32,7 @@ import android.widget.TextView;
|
|||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.adapter.MessageEntriesAdapter;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.DirectMessages.ConversationEntries;
|
||||
import org.mariotaku.twidere.util.ImageLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.MediaLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.UserColorNameUtils;
|
||||
import org.mariotaku.twidere.util.Utils;
|
||||
import org.mariotaku.twidere.view.ShortTimeView;
|
||||
|
@ -66,7 +66,7 @@ public class MessageEntryViewHolder extends ViewHolder implements OnClickListene
|
|||
|
||||
public void displayMessage(Cursor cursor) {
|
||||
final Context context = adapter.getContext();
|
||||
final ImageLoaderWrapper loader = adapter.getImageLoader();
|
||||
final MediaLoaderWrapper loader = adapter.getImageLoader();
|
||||
|
||||
final long accountId = cursor.getLong(ConversationEntries.IDX_ACCOUNT_ID);
|
||||
final long conversationId = cursor.getLong(ConversationEntries.IDX_CONVERSATION_ID);
|
||||
|
|
|
@ -21,10 +21,9 @@ import org.mariotaku.twidere.model.ParcelableMedia;
|
|||
import org.mariotaku.twidere.model.ParcelableStatus;
|
||||
import org.mariotaku.twidere.model.ParcelableStatus.CursorIndices;
|
||||
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
|
||||
import org.mariotaku.twidere.util.ImageLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.MediaLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.ImageLoadingHandler;
|
||||
import org.mariotaku.twidere.util.SimpleValueSerializer;
|
||||
import org.mariotaku.twidere.util.ThemeUtils;
|
||||
import org.mariotaku.twidere.util.TwitterCardUtils;
|
||||
import org.mariotaku.twidere.util.UserColorNameUtils;
|
||||
import org.mariotaku.twidere.util.Utils;
|
||||
|
@ -110,7 +109,7 @@ public class StatusViewHolder extends RecyclerView.ViewHolder implements Constan
|
|||
}
|
||||
|
||||
public void displayStatus(@NonNull final Context context,
|
||||
@NonNull final ImageLoaderWrapper loader,
|
||||
@NonNull final MediaLoaderWrapper loader,
|
||||
@NonNull final ImageLoadingHandler handler,
|
||||
@NonNull final AsyncTwitterWrapper twitter,
|
||||
final boolean displayMediaPreview, final boolean displayAccountsColor,
|
||||
|
@ -229,7 +228,7 @@ public class StatusViewHolder extends RecyclerView.ViewHolder implements Constan
|
|||
|
||||
public void displayStatus(@NonNull Cursor cursor, @NonNull CursorIndices indices,
|
||||
final boolean displayInReplyTo) {
|
||||
final ImageLoaderWrapper loader = adapter.getImageLoader();
|
||||
final MediaLoaderWrapper loader = adapter.getImageLoader();
|
||||
final AsyncTwitterWrapper twitter = adapter.getTwitterWrapper();
|
||||
final Context context = adapter.getContext();
|
||||
final boolean nameFirst = adapter.isNameFirst();
|
||||
|
@ -443,7 +442,11 @@ public class StatusViewHolder extends RecyclerView.ViewHolder implements Constan
|
|||
extraTypeView.setImageResource(R.drawable.ic_action_play_circle);
|
||||
extraTypeView.setVisibility(View.VISIBLE);
|
||||
} else if (media != null && media.length > 0) {
|
||||
extraTypeView.setImageResource(R.drawable.ic_action_gallery);
|
||||
if (hasVideo(media)) {
|
||||
extraTypeView.setImageResource(R.drawable.ic_action_movie);
|
||||
} else {
|
||||
extraTypeView.setImageResource(R.drawable.ic_action_gallery);
|
||||
}
|
||||
extraTypeView.setVisibility(View.VISIBLE);
|
||||
} else if (location != null && location.isValid()) {
|
||||
extraTypeView.setImageResource(R.drawable.ic_action_location);
|
||||
|
@ -453,6 +456,13 @@ public class StatusViewHolder extends RecyclerView.ViewHolder implements Constan
|
|||
}
|
||||
}
|
||||
|
||||
private boolean hasVideo(ParcelableMedia[] media) {
|
||||
for (ParcelableMedia mediaItem : media) {
|
||||
if (mediaItem.type == ParcelableMedia.TYPE_VIDEO) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static interface StatusClickListener extends ContentCardClickListener {
|
||||
|
||||
void onStatusClick(StatusViewHolder holder, int position);
|
||||
|
|
|
@ -0,0 +1,40 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<!--
|
||||
~ Twidere - Twitter client for Android
|
||||
~
|
||||
~ Copyright (C) 2012-2015 Mariotaku Lee <mariotaku.lee@gmail.com>
|
||||
~
|
||||
~ 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 <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
<FrameLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<WebView
|
||||
android:id="@+id/web_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_gravity="center"
|
||||
android:layout_height="match_parent"/>
|
||||
|
||||
<ProgressBar
|
||||
android:visibility="gone"
|
||||
android:id="@+id/progress"
|
||||
android:layout_width="@dimen/element_size_normal"
|
||||
android:layout_height="@dimen/element_size_normal"
|
||||
android:layout_gravity="center"/>
|
||||
|
||||
|
||||
</FrameLayout>
|
Loading…
Reference in New Issue