A bit of code cleanup, mostly getting rid of warnings.
This commit is contained in:
parent
c4114b6be2
commit
46fe328967
@ -24,17 +24,17 @@ import org.json.JSONObject;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class Account {
|
||||
public String id;
|
||||
public String username;
|
||||
public String displayName;
|
||||
public Spanned note;
|
||||
public String url;
|
||||
public String avatar;
|
||||
public String header;
|
||||
public String followersCount;
|
||||
public String followingCount;
|
||||
public String statusesCount;
|
||||
class Account {
|
||||
String id;
|
||||
String username;
|
||||
String displayName;
|
||||
Spanned note;
|
||||
String url;
|
||||
String avatar;
|
||||
String header;
|
||||
String followersCount;
|
||||
String followingCount;
|
||||
String statusesCount;
|
||||
|
||||
public static Account parse(JSONObject object) throws JSONException {
|
||||
Account account = new Account();
|
||||
|
@ -15,7 +15,7 @@
|
||||
|
||||
package com.keylesspalace.tusky;
|
||||
|
||||
public interface AccountActionListener {
|
||||
interface AccountActionListener {
|
||||
void onViewAccount(String id);
|
||||
void onBlock(final boolean block, final String id, final int position);
|
||||
}
|
||||
|
@ -31,6 +31,7 @@ import android.util.TypedValue;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.android.volley.AuthFailureError;
|
||||
@ -96,8 +97,8 @@ public class AccountActivity extends BaseActivity {
|
||||
}
|
||||
|
||||
// Setup the tabs and timeline pager.
|
||||
AccountPagerAdapter adapter = new AccountPagerAdapter(
|
||||
getSupportFragmentManager(), this, accountId);
|
||||
AccountPagerAdapter adapter = new AccountPagerAdapter(getSupportFragmentManager(), this,
|
||||
accountId);
|
||||
String[] pageTitles = {
|
||||
getString(R.string.title_statuses),
|
||||
getString(R.string.title_follows),
|
||||
@ -115,7 +116,7 @@ public class AccountActivity extends BaseActivity {
|
||||
for (int i = 0; i < tabLayout.getTabCount(); i++) {
|
||||
TabLayout.Tab tab = tabLayout.getTabAt(i);
|
||||
if (tab != null) {
|
||||
tab.setCustomView(adapter.getTabView(i));
|
||||
tab.setCustomView(adapter.getTabView(i, tabLayout));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -21,20 +21,21 @@ import android.support.v4.app.FragmentManager;
|
||||
import android.support.v4.app.FragmentPagerAdapter;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
|
||||
public class AccountPagerAdapter extends FragmentPagerAdapter {
|
||||
class AccountPagerAdapter extends FragmentPagerAdapter {
|
||||
private Context context;
|
||||
private String accountId;
|
||||
private String[] pageTitles;
|
||||
|
||||
public AccountPagerAdapter(FragmentManager manager, Context context, String accountId) {
|
||||
AccountPagerAdapter(FragmentManager manager, Context context, String accountId) {
|
||||
super(manager);
|
||||
this.context = context;
|
||||
this.accountId = accountId;
|
||||
}
|
||||
|
||||
public void setPageTitles(String[] titles) {
|
||||
void setPageTitles(String[] titles) {
|
||||
pageTitles = titles;
|
||||
}
|
||||
|
||||
@ -66,8 +67,8 @@ public class AccountPagerAdapter extends FragmentPagerAdapter {
|
||||
return pageTitles[position];
|
||||
}
|
||||
|
||||
public View getTabView(int position) {
|
||||
View view = LayoutInflater.from(context).inflate(R.layout.tab_account, null);
|
||||
View getTabView(int position, ViewGroup root) {
|
||||
View view = LayoutInflater.from(context).inflate(R.layout.tab_account, root, false);
|
||||
TextView title = (TextView) view.findViewById(R.id.title);
|
||||
title.setText(pageTitles[position]);
|
||||
return view;
|
||||
|
@ -15,6 +15,6 @@
|
||||
|
||||
package com.keylesspalace.tusky;
|
||||
|
||||
public interface AdapterItemRemover {
|
||||
interface AdapterItemRemover {
|
||||
void removeItem(int position);
|
||||
}
|
||||
|
27
app/src/main/java/com/keylesspalace/tusky/Assert.java
Normal file
27
app/src/main/java/com/keylesspalace/tusky/Assert.java
Normal file
@ -0,0 +1,27 @@
|
||||
/* Copyright 2017 Andrew Dawson
|
||||
*
|
||||
* This file is part of Tusky.
|
||||
*
|
||||
* Tusky 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.
|
||||
*
|
||||
* Tusky 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 Tusky. If not, see
|
||||
* <http://www.gnu.org/licenses/>. */
|
||||
|
||||
package com.keylesspalace.tusky;
|
||||
|
||||
/** Android Studio complains about built-in assertions so here's this is an alternative. */
|
||||
class Assert {
|
||||
private static boolean ENABLED = BuildConfig.DEBUG;
|
||||
|
||||
static void expect(boolean expression) {
|
||||
if (ENABLED && !expression) {
|
||||
throw new AssertionError();
|
||||
}
|
||||
}
|
||||
}
|
@ -81,7 +81,7 @@ class BlocksAdapter extends AccountAdapter {
|
||||
}
|
||||
}
|
||||
|
||||
public void setBlocked(boolean blocked, int position) {
|
||||
void setBlocked(boolean blocked, int position) {
|
||||
if (blocked) {
|
||||
unblockedAccountPositions.remove(position);
|
||||
} else {
|
||||
|
@ -39,6 +39,7 @@ import android.os.Parcelable;
|
||||
import android.provider.OpenableColumns;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.annotation.StringRes;
|
||||
import android.support.design.widget.Snackbar;
|
||||
import android.support.v4.app.ActivityCompat;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
@ -174,14 +175,15 @@ public class ComposeActivity extends BaseActivity {
|
||||
};
|
||||
}
|
||||
|
||||
private void doErrorDialog(int descriptionId, int actionId, View.OnClickListener listener) {
|
||||
private void doErrorDialog(@StringRes int descriptionId, @StringRes int actionId,
|
||||
View.OnClickListener listener) {
|
||||
Snackbar bar = Snackbar.make(findViewById(R.id.activity_compose), getString(descriptionId),
|
||||
Snackbar.LENGTH_SHORT);
|
||||
bar.setAction(actionId, listener);
|
||||
bar.show();
|
||||
}
|
||||
|
||||
private void displayTransientError(int stringId) {
|
||||
private void displayTransientError(@StringRes int stringId) {
|
||||
Snackbar.make(findViewById(R.id.activity_compose), stringId, Snackbar.LENGTH_LONG).show();
|
||||
}
|
||||
|
||||
|
@ -15,24 +15,24 @@
|
||||
|
||||
package com.keylesspalace.tusky;
|
||||
|
||||
public class CountUpDownLatch {
|
||||
class CountUpDownLatch {
|
||||
private int count;
|
||||
|
||||
public CountUpDownLatch() {
|
||||
CountUpDownLatch() {
|
||||
this.count = 0;
|
||||
}
|
||||
|
||||
public synchronized void countDown() {
|
||||
synchronized void countDown() {
|
||||
count--;
|
||||
notifyAll();
|
||||
}
|
||||
|
||||
public synchronized void countUp() {
|
||||
synchronized void countUp() {
|
||||
count++;
|
||||
notifyAll();
|
||||
}
|
||||
|
||||
public synchronized void await() throws InterruptedException {
|
||||
synchronized void await() throws InterruptedException {
|
||||
while (count != 0) {
|
||||
wait();
|
||||
}
|
||||
|
@ -15,10 +15,10 @@
|
||||
|
||||
package com.keylesspalace.tusky;
|
||||
|
||||
public class DateUtils {
|
||||
class DateUtils {
|
||||
/* This is a rough duplicate of android.text.format.DateUtils.getRelativeTimeSpanString,
|
||||
* but even with the FORMAT_ABBREV_RELATIVE flag it wasn't abbreviating enough. */
|
||||
public static String getRelativeTimeSpanString(long then, long now) {
|
||||
static String getRelativeTimeSpanString(long then, long now) {
|
||||
final long MINUTE = 60;
|
||||
final long HOUR = 60 * MINUTE;
|
||||
final long DAY = 24 * HOUR;
|
||||
|
@ -22,17 +22,17 @@ import java.io.ByteArrayOutputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class DownsizeImageTask extends AsyncTask<Bitmap, Void, Boolean> {
|
||||
class DownsizeImageTask extends AsyncTask<Bitmap, Void, Boolean> {
|
||||
private Listener listener;
|
||||
private int sizeLimit;
|
||||
private List<byte[]> resultList;
|
||||
|
||||
public DownsizeImageTask(int sizeLimit, Listener listener) {
|
||||
DownsizeImageTask(int sizeLimit, Listener listener) {
|
||||
this.listener = listener;
|
||||
this.sizeLimit = sizeLimit;
|
||||
}
|
||||
|
||||
public static Bitmap scaleDown(Bitmap source, float maxImageSize, boolean filter) {
|
||||
private static Bitmap scaleDown(Bitmap source, float maxImageSize, boolean filter) {
|
||||
float ratio = Math.min(maxImageSize / source.getWidth(), maxImageSize / source.getHeight());
|
||||
int width = Math.round(ratio * source.getWidth());
|
||||
int height = Math.round(ratio * source.getHeight());
|
||||
@ -67,7 +67,7 @@ public class DownsizeImageTask extends AsyncTask<Bitmap, Void, Boolean> {
|
||||
scaledImageSize /= 2;
|
||||
iterations++;
|
||||
} while (stream.size() > sizeLimit);
|
||||
assert(iterations < 3);
|
||||
Assert.expect(iterations < 3);
|
||||
resultList.add(stream.toByteArray());
|
||||
if (isCancelled()) {
|
||||
return false;
|
||||
|
@ -18,16 +18,20 @@ package com.keylesspalace.tusky;
|
||||
import android.support.v7.widget.LinearLayoutManager;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
|
||||
public abstract class EndlessOnScrollListener extends RecyclerView.OnScrollListener {
|
||||
private int visibleThreshold = 15;
|
||||
private int currentPage = 0;
|
||||
private int previousTotalItemCount = 0;
|
||||
private boolean loading = true;
|
||||
private int startingPageIndex = 0;
|
||||
abstract class EndlessOnScrollListener extends RecyclerView.OnScrollListener {
|
||||
private static final int VISIBLE_THRESHOLD = 15;
|
||||
private int currentPage;
|
||||
private int previousTotalItemCount;
|
||||
private boolean loading;
|
||||
private int startingPageIndex;
|
||||
private LinearLayoutManager layoutManager;
|
||||
|
||||
public EndlessOnScrollListener(LinearLayoutManager layoutManager) {
|
||||
EndlessOnScrollListener(LinearLayoutManager layoutManager) {
|
||||
this.layoutManager = layoutManager;
|
||||
currentPage = 0;
|
||||
previousTotalItemCount = 0;
|
||||
loading = true;
|
||||
startingPageIndex = 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -45,14 +49,14 @@ public abstract class EndlessOnScrollListener extends RecyclerView.OnScrollListe
|
||||
loading = false;
|
||||
previousTotalItemCount = totalItemCount;
|
||||
}
|
||||
if (!loading && lastVisibleItemPosition + visibleThreshold > totalItemCount) {
|
||||
if (!loading && lastVisibleItemPosition + VISIBLE_THRESHOLD > totalItemCount) {
|
||||
currentPage++;
|
||||
onLoadMore(currentPage, totalItemCount, view);
|
||||
loading = true;
|
||||
}
|
||||
}
|
||||
|
||||
public void reset() {
|
||||
void reset() {
|
||||
currentPage = startingPageIndex;
|
||||
previousTotalItemCount = 0;
|
||||
loading = true;
|
||||
|
@ -45,7 +45,7 @@ public class FlowLayout extends ViewGroup {
|
||||
|
||||
@Override
|
||||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
||||
assert (MeasureSpec.getMode(widthMeasureSpec) != MeasureSpec.UNSPECIFIED);
|
||||
Assert.expect(MeasureSpec.getMode(widthMeasureSpec) != MeasureSpec.UNSPECIFIED);
|
||||
int width = MeasureSpec.getSize(widthMeasureSpec) - getPaddingLeft() - getPaddingRight();
|
||||
int height = MeasureSpec.getSize(heightMeasureSpec) - getPaddingTop() - getPaddingBottom();
|
||||
int count = getChildCount();
|
||||
|
@ -21,7 +21,7 @@ import android.widget.Button;
|
||||
import android.widget.ProgressBar;
|
||||
import android.widget.TextView;
|
||||
|
||||
public class FooterViewHolder extends RecyclerView.ViewHolder {
|
||||
class FooterViewHolder extends RecyclerView.ViewHolder {
|
||||
private View retryBar;
|
||||
private TextView retryMessage;
|
||||
private Button retry;
|
||||
@ -34,7 +34,7 @@ public class FooterViewHolder extends RecyclerView.ViewHolder {
|
||||
END_OF_TIMELINE,
|
||||
}
|
||||
|
||||
public FooterViewHolder(View itemView) {
|
||||
FooterViewHolder(View itemView) {
|
||||
super(itemView);
|
||||
retryBar = itemView.findViewById(R.id.footer_retry_bar);
|
||||
retryMessage = (TextView) itemView.findViewById(R.id.footer_retry_message);
|
||||
@ -44,7 +44,7 @@ public class FooterViewHolder extends RecyclerView.ViewHolder {
|
||||
endOfTimelineMessage = (TextView) itemView.findViewById(R.id.footer_end_of_timeline_text);
|
||||
}
|
||||
|
||||
public void setupButton(final FooterActionListener listener) {
|
||||
void setupButton(final FooterActionListener listener) {
|
||||
retry.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
@ -53,15 +53,15 @@ public class FooterViewHolder extends RecyclerView.ViewHolder {
|
||||
});
|
||||
}
|
||||
|
||||
public void setRetryMessage(int messageId) {
|
||||
void setRetryMessage(int messageId) {
|
||||
retryMessage.setText(messageId);
|
||||
}
|
||||
|
||||
public void setEndOfTimelineMessage(int messageId) {
|
||||
void setEndOfTimelineMessage(int messageId) {
|
||||
endOfTimelineMessage.setText(messageId);
|
||||
}
|
||||
|
||||
public void setState(State state) {
|
||||
void setState(State state) {
|
||||
switch (state) {
|
||||
case LOADING: {
|
||||
retryBar.setVisibility(View.GONE);
|
||||
|
@ -19,7 +19,7 @@ import android.os.Build;
|
||||
import android.text.Html;
|
||||
import android.text.Spanned;
|
||||
|
||||
public class HtmlUtils {
|
||||
class HtmlUtils {
|
||||
private static CharSequence trimTrailingWhitespace(CharSequence s) {
|
||||
int i = s.length();
|
||||
do {
|
||||
@ -28,7 +28,7 @@ public class HtmlUtils {
|
||||
return s.subSequence(0, i + 1);
|
||||
}
|
||||
|
||||
public static Spanned fromHtml(String html) {
|
||||
static Spanned fromHtml(String html) {
|
||||
Spanned result;
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||
result = Html.fromHtml(html, Html.FROM_HTML_MODE_LEGACY);
|
||||
|
@ -20,8 +20,8 @@ import android.support.annotation.Nullable;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
||||
public class IOUtils {
|
||||
public static void closeQuietly(@Nullable InputStream stream) {
|
||||
class IOUtils {
|
||||
static void closeQuietly(@Nullable InputStream stream) {
|
||||
try {
|
||||
if (stream != null) {
|
||||
stream.close();
|
||||
|
@ -63,7 +63,7 @@ public class MainActivity extends BaseActivity {
|
||||
setSupportActionBar(toolbar);
|
||||
|
||||
// Setup the tabs and timeline pager.
|
||||
TimelinePagerAdapter adapter = new TimelinePagerAdapter(getSupportFragmentManager(), this);
|
||||
TimelinePagerAdapter adapter = new TimelinePagerAdapter(getSupportFragmentManager());
|
||||
String[] pageTitles = {
|
||||
getString(R.string.title_home),
|
||||
getString(R.string.title_notifications),
|
||||
|
@ -29,14 +29,14 @@ import java.io.DataOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
|
||||
public class MultipartRequest extends Request<JSONObject> {
|
||||
class MultipartRequest extends Request<JSONObject> {
|
||||
private static final String CHARSET = "utf-8";
|
||||
private final String boundary = "something-" + System.currentTimeMillis();
|
||||
|
||||
private JSONObject parameters;
|
||||
private Response.Listener<JSONObject> listener;
|
||||
|
||||
public MultipartRequest(int method, String url, JSONObject parameters,
|
||||
MultipartRequest(int method, String url, JSONObject parameters,
|
||||
Response.Listener<JSONObject> listener, Response.ErrorListener errorListener) {
|
||||
super(method, url, errorListener);
|
||||
this.parameters = parameters;
|
||||
@ -108,10 +108,10 @@ public class MultipartRequest extends Request<JSONObject> {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static class DataItem {
|
||||
public String name;
|
||||
public String filename;
|
||||
public String mimeType;
|
||||
public byte[] content;
|
||||
static class DataItem {
|
||||
String name;
|
||||
String filename;
|
||||
String mimeType;
|
||||
byte[] content;
|
||||
}
|
||||
}
|
||||
|
@ -24,8 +24,8 @@ import org.json.JSONObject;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class Notification {
|
||||
public enum Type {
|
||||
class Notification {
|
||||
enum Type {
|
||||
MENTION,
|
||||
REBLOG,
|
||||
FAVOURITE,
|
||||
@ -37,39 +37,39 @@ public class Notification {
|
||||
/** Which of the user's statuses has been mentioned, reblogged, or favourited. */
|
||||
private Status status;
|
||||
|
||||
public Notification(Type type, String id, String displayName) {
|
||||
private Notification(Type type, String id, String displayName) {
|
||||
this.type = type;
|
||||
this.id = id;
|
||||
this.displayName = displayName;
|
||||
}
|
||||
|
||||
public Type getType() {
|
||||
Type getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public String getId() {
|
||||
String getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public String getDisplayName() {
|
||||
String getDisplayName() {
|
||||
return displayName;
|
||||
}
|
||||
|
||||
public @Nullable Status getStatus() {
|
||||
@Nullable Status getStatus() {
|
||||
return status;
|
||||
}
|
||||
|
||||
public void setStatus(Status status) {
|
||||
void setStatus(Status status) {
|
||||
this.status = status;
|
||||
}
|
||||
|
||||
public boolean hasStatusType() {
|
||||
private boolean hasStatusType() {
|
||||
return type == Type.MENTION
|
||||
|| type == Type.FAVOURITE
|
||||
|| type == Type.REBLOG;
|
||||
}
|
||||
|
||||
public static List<Notification> parse(JSONArray array) throws JSONException {
|
||||
static List<Notification> parse(JSONArray array) throws JSONException {
|
||||
List<Notification> notifications = new ArrayList<>();
|
||||
for (int i = 0; i < array.length(); i++) {
|
||||
JSONObject object = array.getJSONObject(i);
|
||||
|
@ -28,7 +28,7 @@ import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
public class NotificationsAdapter extends RecyclerView.Adapter implements AdapterItemRemover {
|
||||
class NotificationsAdapter extends RecyclerView.Adapter implements AdapterItemRemover {
|
||||
private static final int VIEW_TYPE_MENTION = 0;
|
||||
private static final int VIEW_TYPE_FOOTER = 1;
|
||||
private static final int VIEW_TYPE_STATUS_NOTIFICATION = 2;
|
||||
@ -39,7 +39,7 @@ public class NotificationsAdapter extends RecyclerView.Adapter implements Adapte
|
||||
private FooterActionListener footerListener;
|
||||
private FooterViewHolder.State footerState;
|
||||
|
||||
public NotificationsAdapter(StatusActionListener statusListener,
|
||||
NotificationsAdapter(StatusActionListener statusListener,
|
||||
FooterActionListener footerListener) {
|
||||
super();
|
||||
notifications = new ArrayList<>();
|
||||
@ -143,7 +143,7 @@ public class NotificationsAdapter extends RecyclerView.Adapter implements Adapte
|
||||
return null;
|
||||
}
|
||||
|
||||
public int update(List<Notification> new_notifications) {
|
||||
int update(List<Notification> new_notifications) {
|
||||
int scrollToPosition;
|
||||
if (notifications == null || notifications.isEmpty()) {
|
||||
notifications = new_notifications;
|
||||
@ -162,7 +162,7 @@ public class NotificationsAdapter extends RecyclerView.Adapter implements Adapte
|
||||
return scrollToPosition;
|
||||
}
|
||||
|
||||
public void addItems(List<Notification> new_notifications) {
|
||||
void addItems(List<Notification> new_notifications) {
|
||||
int end = notifications.size();
|
||||
notifications.addAll(new_notifications);
|
||||
notifyItemRangeInserted(end, new_notifications.size());
|
||||
@ -173,19 +173,19 @@ public class NotificationsAdapter extends RecyclerView.Adapter implements Adapte
|
||||
notifyItemChanged(position);
|
||||
}
|
||||
|
||||
public void setFooterState(FooterViewHolder.State state) {
|
||||
void setFooterState(FooterViewHolder.State state) {
|
||||
footerState = state;
|
||||
}
|
||||
|
||||
public static class FollowViewHolder extends RecyclerView.ViewHolder {
|
||||
private static class FollowViewHolder extends RecyclerView.ViewHolder {
|
||||
private TextView message;
|
||||
|
||||
public FollowViewHolder(View itemView) {
|
||||
FollowViewHolder(View itemView) {
|
||||
super(itemView);
|
||||
message = (TextView) itemView.findViewById(R.id.notification_text);
|
||||
}
|
||||
|
||||
public void setMessage(String displayName) {
|
||||
void setMessage(String displayName) {
|
||||
Context context = message.getContext();
|
||||
String format = context.getString(R.string.notification_follow_format);
|
||||
String wholeMessage = String.format(format, displayName);
|
||||
@ -193,19 +193,19 @@ public class NotificationsAdapter extends RecyclerView.Adapter implements Adapte
|
||||
}
|
||||
}
|
||||
|
||||
public static class StatusNotificationViewHolder extends RecyclerView.ViewHolder {
|
||||
private static class StatusNotificationViewHolder extends RecyclerView.ViewHolder {
|
||||
private TextView message;
|
||||
private ImageView icon;
|
||||
private TextView statusContent;
|
||||
|
||||
public StatusNotificationViewHolder(View itemView) {
|
||||
StatusNotificationViewHolder(View itemView) {
|
||||
super(itemView);
|
||||
message = (TextView) itemView.findViewById(R.id.notification_text);
|
||||
icon = (ImageView) itemView.findViewById(R.id.notification_icon);
|
||||
statusContent = (TextView) itemView.findViewById(R.id.notification_content);
|
||||
}
|
||||
|
||||
public void setMessage(Notification.Type type, String displayName, Status status) {
|
||||
void setMessage(Notification.Type type, String displayName, Status status) {
|
||||
Context context = message.getContext();
|
||||
String format;
|
||||
switch (type) {
|
||||
|
@ -33,11 +33,7 @@ public class PreferencesActivity extends AppCompatActivity
|
||||
themeSwitched = savedInstanceState.getBoolean("themeSwitched");
|
||||
} else {
|
||||
Bundle extras = getIntent().getExtras();
|
||||
if (extras != null) {
|
||||
themeSwitched = extras.getBoolean("themeSwitched");
|
||||
} else {
|
||||
themeSwitched = false;
|
||||
}
|
||||
themeSwitched = extras != null && extras.getBoolean("themeSwitched");
|
||||
}
|
||||
|
||||
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
|
||||
|
@ -140,9 +140,9 @@ public class PullNotificationService extends IntentService {
|
||||
}
|
||||
|
||||
private static class MentionResult {
|
||||
public String displayName;
|
||||
public String content;
|
||||
public String avatarUrl;
|
||||
String displayName;
|
||||
String content;
|
||||
String avatarUrl;
|
||||
}
|
||||
|
||||
private String truncateWithEllipses(String string, int limit) {
|
||||
|
@ -56,7 +56,7 @@ public class Status {
|
||||
private MediaAttachment[] attachments;
|
||||
private Mention[] mentions;
|
||||
|
||||
public static final int MAX_MEDIA_ATTACHMENTS = 4;
|
||||
static final int MAX_MEDIA_ATTACHMENTS = 4;
|
||||
|
||||
public Status(String id, String accountId, String displayName, String username, Spanned content,
|
||||
String avatar, Date createdAt, boolean reblogged, boolean favourited,
|
||||
@ -76,87 +76,87 @@ public class Status {
|
||||
this.mentions = new Mention[0];
|
||||
}
|
||||
|
||||
public String getId() {
|
||||
String getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public String getAccountId() {
|
||||
String getAccountId() {
|
||||
return accountId;
|
||||
}
|
||||
|
||||
public String getDisplayName() {
|
||||
String getDisplayName() {
|
||||
return displayName;
|
||||
}
|
||||
|
||||
public String getUsername() {
|
||||
String getUsername() {
|
||||
return username;
|
||||
}
|
||||
|
||||
public Spanned getContent() {
|
||||
Spanned getContent() {
|
||||
return content;
|
||||
}
|
||||
|
||||
public String getAvatar() {
|
||||
String getAvatar() {
|
||||
return avatar;
|
||||
}
|
||||
|
||||
public Date getCreatedAt() {
|
||||
Date getCreatedAt() {
|
||||
return createdAt;
|
||||
}
|
||||
|
||||
public String getRebloggedByDisplayName() {
|
||||
String getRebloggedByDisplayName() {
|
||||
return rebloggedByDisplayName;
|
||||
}
|
||||
|
||||
public boolean getReblogged() {
|
||||
boolean getReblogged() {
|
||||
return reblogged;
|
||||
}
|
||||
|
||||
public boolean getFavourited() {
|
||||
boolean getFavourited() {
|
||||
return favourited;
|
||||
}
|
||||
|
||||
public boolean getSensitive() {
|
||||
boolean getSensitive() {
|
||||
return sensitive;
|
||||
}
|
||||
|
||||
public String getSpoilerText() {
|
||||
String getSpoilerText() {
|
||||
return spoilerText;
|
||||
}
|
||||
|
||||
public Visibility getVisibility() {
|
||||
Visibility getVisibility() {
|
||||
return visibility;
|
||||
}
|
||||
|
||||
public MediaAttachment[] getAttachments() {
|
||||
MediaAttachment[] getAttachments() {
|
||||
return attachments;
|
||||
}
|
||||
|
||||
public Mention[] getMentions() {
|
||||
Mention[] getMentions() {
|
||||
return mentions;
|
||||
}
|
||||
|
||||
public void setRebloggedByDisplayName(String name) {
|
||||
private void setRebloggedByDisplayName(String name) {
|
||||
rebloggedByDisplayName = name;
|
||||
}
|
||||
|
||||
public void setReblogged(boolean reblogged) {
|
||||
void setReblogged(boolean reblogged) {
|
||||
this.reblogged = reblogged;
|
||||
}
|
||||
|
||||
public void setFavourited(boolean favourited) {
|
||||
void setFavourited(boolean favourited) {
|
||||
this.favourited = favourited;
|
||||
}
|
||||
|
||||
public void setSpoilerText(String spoilerText) {
|
||||
private void setSpoilerText(String spoilerText) {
|
||||
this.spoilerText = spoilerText;
|
||||
}
|
||||
|
||||
public void setMentions(Mention[] mentions) {
|
||||
private void setMentions(Mention[] mentions) {
|
||||
this.mentions = mentions;
|
||||
}
|
||||
|
||||
public void setAttachments(MediaAttachment[] attachments, boolean sensitive) {
|
||||
private void setAttachments(MediaAttachment[] attachments, boolean sensitive) {
|
||||
this.attachments = attachments;
|
||||
this.sensitive = sensitive;
|
||||
}
|
||||
@ -285,7 +285,7 @@ public class Status {
|
||||
return statuses;
|
||||
}
|
||||
|
||||
public static class MediaAttachment {
|
||||
static class MediaAttachment {
|
||||
enum Type {
|
||||
IMAGE,
|
||||
VIDEO,
|
||||
@ -295,45 +295,45 @@ public class Status {
|
||||
private String previewUrl;
|
||||
private Type type;
|
||||
|
||||
public MediaAttachment(String url, String previewUrl, Type type) {
|
||||
MediaAttachment(String url, String previewUrl, Type type) {
|
||||
this.url = url;
|
||||
this.previewUrl = previewUrl;
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public String getUrl() {
|
||||
String getUrl() {
|
||||
return url;
|
||||
}
|
||||
|
||||
public String getPreviewUrl() {
|
||||
String getPreviewUrl() {
|
||||
return previewUrl;
|
||||
}
|
||||
|
||||
public Type getType() {
|
||||
Type getType() {
|
||||
return type;
|
||||
}
|
||||
}
|
||||
|
||||
public static class Mention {
|
||||
static class Mention {
|
||||
private String url;
|
||||
private String username;
|
||||
private String id;
|
||||
|
||||
public Mention(String url, String username, String id) {
|
||||
Mention(String url, String username, String id) {
|
||||
this.url = url;
|
||||
this.username = username;
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getUrl() {
|
||||
String getUrl() {
|
||||
return url;
|
||||
}
|
||||
|
||||
public String getUsername() {
|
||||
String getUsername() {
|
||||
return username;
|
||||
}
|
||||
|
||||
public String getId() {
|
||||
String getId() {
|
||||
return id;
|
||||
}
|
||||
}
|
||||
|
@ -17,7 +17,7 @@ package com.keylesspalace.tusky;
|
||||
|
||||
import android.view.View;
|
||||
|
||||
public interface StatusActionListener {
|
||||
interface StatusActionListener {
|
||||
void onReply(int position);
|
||||
void onReblog(final boolean reblog, final int position);
|
||||
void onFavourite(final boolean favourite, final int position);
|
||||
|
@ -34,7 +34,7 @@ import com.android.volley.toolbox.NetworkImageView;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
public class StatusViewHolder extends RecyclerView.ViewHolder {
|
||||
class StatusViewHolder extends RecyclerView.ViewHolder {
|
||||
private View container;
|
||||
private TextView displayName;
|
||||
private TextView username;
|
||||
@ -58,7 +58,7 @@ public class StatusViewHolder extends RecyclerView.ViewHolder {
|
||||
private TextView contentWarningDescription;
|
||||
private ToggleButton contentWarningButton;
|
||||
|
||||
public StatusViewHolder(View itemView) {
|
||||
StatusViewHolder(View itemView) {
|
||||
super(itemView);
|
||||
container = itemView.findViewById(R.id.status_container);
|
||||
displayName = (TextView) itemView.findViewById(R.id.status_display_name);
|
||||
@ -94,18 +94,18 @@ public class StatusViewHolder extends RecyclerView.ViewHolder {
|
||||
(ToggleButton) itemView.findViewById(R.id.status_content_warning_button);
|
||||
}
|
||||
|
||||
public void setDisplayName(String name) {
|
||||
private void setDisplayName(String name) {
|
||||
displayName.setText(name);
|
||||
}
|
||||
|
||||
public void setUsername(String name) {
|
||||
void setUsername(String name) {
|
||||
Context context = username.getContext();
|
||||
String format = context.getString(R.string.status_username_format);
|
||||
String usernameText = String.format(format, name);
|
||||
username.setText(usernameText);
|
||||
}
|
||||
|
||||
public void setContent(Spanned content, Status.Mention[] mentions,
|
||||
private void setContent(Spanned content, Status.Mention[] mentions,
|
||||
final StatusActionListener listener) {
|
||||
/* Redirect URLSpan's in the status content to the listener for viewing tag pages and
|
||||
* account pages. */
|
||||
@ -154,7 +154,7 @@ public class StatusViewHolder extends RecyclerView.ViewHolder {
|
||||
this.content.setMovementMethod(LinkMovementMethod.getInstance());
|
||||
}
|
||||
|
||||
public void setAvatar(String url) {
|
||||
private void setAvatar(String url) {
|
||||
if (url.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
@ -163,7 +163,7 @@ public class StatusViewHolder extends RecyclerView.ViewHolder {
|
||||
avatar.setImageUrl(url, imageLoader);
|
||||
}
|
||||
|
||||
public void setCreatedAt(@Nullable Date createdAt) {
|
||||
private void setCreatedAt(@Nullable Date createdAt) {
|
||||
String readout;
|
||||
if (createdAt != null) {
|
||||
long then = createdAt.getTime();
|
||||
@ -175,7 +175,7 @@ public class StatusViewHolder extends RecyclerView.ViewHolder {
|
||||
sinceCreated.setText(readout);
|
||||
}
|
||||
|
||||
public void setRebloggedByDisplayName(String name) {
|
||||
private void setRebloggedByDisplayName(String name) {
|
||||
Context context = rebloggedByDisplayName.getContext();
|
||||
String format = context.getString(R.string.status_boosted_format);
|
||||
String boostedText = String.format(format, name);
|
||||
@ -183,11 +183,11 @@ public class StatusViewHolder extends RecyclerView.ViewHolder {
|
||||
rebloggedBar.setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
||||
public void hideRebloggedByDisplayName() {
|
||||
private void hideRebloggedByDisplayName() {
|
||||
rebloggedBar.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
public void setReblogged(boolean reblogged) {
|
||||
private void setReblogged(boolean reblogged) {
|
||||
this.reblogged = reblogged;
|
||||
int attribute;
|
||||
if (reblogged) {
|
||||
@ -199,7 +199,7 @@ public class StatusViewHolder extends RecyclerView.ViewHolder {
|
||||
}
|
||||
|
||||
/** This should only be called after setReblogged, in order to override the tint correctly. */
|
||||
public void setRebloggingEnabled(boolean enabled) {
|
||||
private void setRebloggingEnabled(boolean enabled) {
|
||||
reblogButton.setEnabled(enabled);
|
||||
if (enabled) {
|
||||
reblogButton.setImageResource(R.drawable.ic_reblog);
|
||||
@ -209,7 +209,7 @@ public class StatusViewHolder extends RecyclerView.ViewHolder {
|
||||
}
|
||||
}
|
||||
|
||||
public void setFavourited(boolean favourited) {
|
||||
private void setFavourited(boolean favourited) {
|
||||
this.favourited = favourited;
|
||||
int attribute;
|
||||
if (favourited) {
|
||||
@ -220,7 +220,7 @@ public class StatusViewHolder extends RecyclerView.ViewHolder {
|
||||
ThemeUtils.setImageViewTint(favouriteButton, attribute);
|
||||
}
|
||||
|
||||
public void setMediaPreviews(final Status.MediaAttachment[] attachments,
|
||||
private void setMediaPreviews(final Status.MediaAttachment[] attachments,
|
||||
boolean sensitive, final StatusActionListener listener) {
|
||||
final NetworkImageView[] previews = {
|
||||
mediaPreview0,
|
||||
@ -268,11 +268,11 @@ public class StatusViewHolder extends RecyclerView.ViewHolder {
|
||||
}
|
||||
}
|
||||
|
||||
public void hideSensitiveMediaWarning() {
|
||||
private void hideSensitiveMediaWarning() {
|
||||
sensitiveMediaWarning.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
public void setSpoilerText(String spoilerText) {
|
||||
private void setSpoilerText(String spoilerText) {
|
||||
contentWarningDescription.setText(spoilerText);
|
||||
contentWarningBar.setVisibility(View.VISIBLE);
|
||||
content.setVisibility(View.GONE);
|
||||
@ -289,12 +289,12 @@ public class StatusViewHolder extends RecyclerView.ViewHolder {
|
||||
});
|
||||
}
|
||||
|
||||
public void hideSpoilerText() {
|
||||
private void hideSpoilerText() {
|
||||
contentWarningBar.setVisibility(View.GONE);
|
||||
content.setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
||||
public void setupButtons(final StatusActionListener listener, final int position) {
|
||||
private void setupButtons(final StatusActionListener listener, final int position) {
|
||||
avatar.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
@ -339,7 +339,7 @@ public class StatusViewHolder extends RecyclerView.ViewHolder {
|
||||
container.setOnClickListener(viewThreadListener);
|
||||
}
|
||||
|
||||
public void setupWithStatus(Status status, StatusActionListener listener, int position) {
|
||||
void setupWithStatus(Status status, StatusActionListener listener, int position) {
|
||||
setDisplayName(status.getDisplayName());
|
||||
setUsername(status.getUsername());
|
||||
setCreatedAt(status.getCreatedAt());
|
||||
|
@ -22,8 +22,8 @@ import android.support.v4.content.ContextCompat;
|
||||
import android.util.TypedValue;
|
||||
import android.widget.ImageView;
|
||||
|
||||
public class ThemeUtils {
|
||||
public static Drawable getDrawable(Context context, int attribute, int fallbackDrawable) {
|
||||
class ThemeUtils {
|
||||
static Drawable getDrawable(Context context, int attribute, int fallbackDrawable) {
|
||||
TypedValue value = new TypedValue();
|
||||
int resourceId;
|
||||
if (context.getTheme().resolveAttribute(attribute, value, true)) {
|
||||
@ -34,7 +34,7 @@ public class ThemeUtils {
|
||||
return ContextCompat.getDrawable(context, resourceId);
|
||||
}
|
||||
|
||||
public static int getDrawableId(Context context, int attribute, int fallbackDrawableId) {
|
||||
static int getDrawableId(Context context, int attribute, int fallbackDrawableId) {
|
||||
TypedValue value = new TypedValue();
|
||||
if (context.getTheme().resolveAttribute(attribute, value, true)) {
|
||||
return value.resourceId;
|
||||
@ -43,7 +43,7 @@ public class ThemeUtils {
|
||||
}
|
||||
}
|
||||
|
||||
public static int getColor(Context context, int attribute) {
|
||||
static int getColor(Context context, int attribute) {
|
||||
TypedValue value = new TypedValue();
|
||||
if (context.getTheme().resolveAttribute(attribute, value, true)) {
|
||||
return value.data;
|
||||
@ -52,7 +52,7 @@ public class ThemeUtils {
|
||||
}
|
||||
}
|
||||
|
||||
public static void setImageViewTint(ImageView view, int attribute) {
|
||||
static void setImageViewTint(ImageView view, int attribute) {
|
||||
view.setColorFilter(getColor(view.getContext(), attribute), PorterDuff.Mode.SRC_IN);
|
||||
}
|
||||
}
|
||||
|
@ -23,12 +23,12 @@ import android.view.ViewGroup;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class ThreadAdapter extends RecyclerView.Adapter implements AdapterItemRemover {
|
||||
class ThreadAdapter extends RecyclerView.Adapter implements AdapterItemRemover {
|
||||
private List<Status> statuses;
|
||||
private StatusActionListener statusActionListener;
|
||||
private int statusIndex;
|
||||
|
||||
public ThreadAdapter(StatusActionListener listener) {
|
||||
ThreadAdapter(StatusActionListener listener) {
|
||||
this.statusActionListener = listener;
|
||||
this.statuses = new ArrayList<>();
|
||||
this.statusIndex = 0;
|
||||
@ -53,7 +53,7 @@ public class ThreadAdapter extends RecyclerView.Adapter implements AdapterItemRe
|
||||
return statuses.size();
|
||||
}
|
||||
|
||||
public Status getItem(int position) {
|
||||
Status getItem(int position) {
|
||||
return statuses.get(position);
|
||||
}
|
||||
|
||||
@ -62,20 +62,20 @@ public class ThreadAdapter extends RecyclerView.Adapter implements AdapterItemRe
|
||||
notifyItemRemoved(position);
|
||||
}
|
||||
|
||||
public int insertStatus(Status status) {
|
||||
int insertStatus(Status status) {
|
||||
int i = statusIndex;
|
||||
statuses.add(i, status);
|
||||
notifyItemInserted(i);
|
||||
return i;
|
||||
}
|
||||
|
||||
public void addAncestors(List<Status> ancestors) {
|
||||
void addAncestors(List<Status> ancestors) {
|
||||
statusIndex = ancestors.size();
|
||||
statuses.addAll(0, ancestors);
|
||||
notifyItemRangeInserted(0, statusIndex);
|
||||
}
|
||||
|
||||
public void addDescendants(List<Status> descendants) {
|
||||
void addDescendants(List<Status> descendants) {
|
||||
int end = statuses.size();
|
||||
statuses.addAll(descendants);
|
||||
notifyItemRangeInserted(end, descendants.size());
|
||||
|
@ -24,7 +24,7 @@ import android.view.ViewGroup;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class TimelineAdapter extends RecyclerView.Adapter implements AdapterItemRemover {
|
||||
class TimelineAdapter extends RecyclerView.Adapter implements AdapterItemRemover {
|
||||
private static final int VIEW_TYPE_STATUS = 0;
|
||||
private static final int VIEW_TYPE_FOOTER = 1;
|
||||
|
||||
@ -33,7 +33,7 @@ public class TimelineAdapter extends RecyclerView.Adapter implements AdapterItem
|
||||
private FooterActionListener footerListener;
|
||||
private FooterViewHolder.State footerState;
|
||||
|
||||
public TimelineAdapter(StatusActionListener statusListener,
|
||||
TimelineAdapter(StatusActionListener statusListener,
|
||||
FooterActionListener footerListener) {
|
||||
super();
|
||||
statuses = new ArrayList<>();
|
||||
@ -88,7 +88,7 @@ public class TimelineAdapter extends RecyclerView.Adapter implements AdapterItem
|
||||
}
|
||||
}
|
||||
|
||||
public int update(List<Status> newStatuses) {
|
||||
int update(List<Status> newStatuses) {
|
||||
int scrollToPosition;
|
||||
if (statuses == null || statuses.isEmpty()) {
|
||||
statuses = newStatuses;
|
||||
@ -107,7 +107,7 @@ public class TimelineAdapter extends RecyclerView.Adapter implements AdapterItem
|
||||
return scrollToPosition;
|
||||
}
|
||||
|
||||
public void addItems(List<Status> newStatuses) {
|
||||
void addItems(List<Status> newStatuses) {
|
||||
int end = statuses.size();
|
||||
statuses.addAll(newStatuses);
|
||||
notifyItemRangeInserted(end, newStatuses.size());
|
||||
@ -118,14 +118,14 @@ public class TimelineAdapter extends RecyclerView.Adapter implements AdapterItem
|
||||
notifyItemRemoved(position);
|
||||
}
|
||||
|
||||
public @Nullable Status getItem(int position) {
|
||||
@Nullable Status getItem(int position) {
|
||||
if (position >= 0 && position < statuses.size()) {
|
||||
return statuses.get(position);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public void setFooterState(FooterViewHolder.State state) {
|
||||
void setFooterState(FooterViewHolder.State state) {
|
||||
footerState = state;
|
||||
}
|
||||
}
|
||||
|
@ -314,8 +314,11 @@ public class TimelineFragment extends SFragment implements
|
||||
|
||||
public void onViewAccount(int position) {
|
||||
Status status = adapter.getItem(position);
|
||||
String id = status.getAccountId();
|
||||
String username = status.getUsername();
|
||||
super.viewAccount(id, username);
|
||||
Assert.expect(status != null);
|
||||
if (status != null) {
|
||||
String id = status.getAccountId();
|
||||
String username = status.getUsername();
|
||||
super.viewAccount(id, username);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -15,24 +15,18 @@
|
||||
|
||||
package com.keylesspalace.tusky;
|
||||
|
||||
import android.content.Context;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.app.FragmentManager;
|
||||
import android.support.v4.app.FragmentPagerAdapter;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
|
||||
public class TimelinePagerAdapter extends FragmentPagerAdapter {
|
||||
class TimelinePagerAdapter extends FragmentPagerAdapter {
|
||||
private String[] pageTitles;
|
||||
private Context context;
|
||||
|
||||
public TimelinePagerAdapter(FragmentManager manager, Context context) {
|
||||
TimelinePagerAdapter(FragmentManager manager) {
|
||||
super(manager);
|
||||
this.context = context;
|
||||
}
|
||||
|
||||
public void setPageTitles(String[] titles) {
|
||||
void setPageTitles(String[] titles) {
|
||||
pageTitles = titles;
|
||||
}
|
||||
|
||||
|
@ -36,6 +36,8 @@ import org.json.JSONObject;
|
||||
import java.util.List;
|
||||
|
||||
public class ViewThreadFragment extends SFragment implements StatusActionListener {
|
||||
private static final String TAG = "ViewThread"; // logging tag
|
||||
|
||||
private RecyclerView recyclerView;
|
||||
private ThreadAdapter adapter;
|
||||
|
||||
@ -113,8 +115,8 @@ public class ViewThreadFragment extends SFragment implements StatusActionListene
|
||||
}
|
||||
|
||||
private void onThreadRequestFailure() {
|
||||
Log.e(TAG, "The request to fetch the thread has failed.");
|
||||
//TODO: no
|
||||
assert(false);
|
||||
}
|
||||
|
||||
public void onReply(int position) {
|
||||
|
@ -56,7 +56,7 @@ public class VolleySingleton {
|
||||
return instance;
|
||||
}
|
||||
|
||||
public RequestQueue getRequestQueue() {
|
||||
private RequestQueue getRequestQueue() {
|
||||
if (requestQueue == null) {
|
||||
/* getApplicationContext() is key, it keeps you from leaking the
|
||||
* Activity or BroadcastReceiver if someone passes one in. */
|
||||
@ -65,15 +65,15 @@ public class VolleySingleton {
|
||||
return requestQueue;
|
||||
}
|
||||
|
||||
public <T> void addToRequestQueue(Request<T> request) {
|
||||
<T> void addToRequestQueue(Request<T> request) {
|
||||
getRequestQueue().add(request);
|
||||
}
|
||||
|
||||
public void cancelAll(String tag) {
|
||||
void cancelAll(String tag) {
|
||||
getRequestQueue().cancelAll(tag);
|
||||
}
|
||||
|
||||
public ImageLoader getImageLoader() {
|
||||
ImageLoader getImageLoader() {
|
||||
return imageLoader;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user