mirror of
https://github.com/TwidereProject/Twidere-Android
synced 2025-02-12 09:40:50 +01:00
improved status fav/retweet state - close #250
This commit is contained in:
parent
ffeb5c999e
commit
6752f2d1d8
@ -74,6 +74,16 @@ public class ObjectCursor<E> extends AbstractList<E> {
|
||||
mCursor.close();
|
||||
}
|
||||
|
||||
public CursorIndices<E> getIndices() {
|
||||
return mIndices;
|
||||
}
|
||||
|
||||
public Cursor getCursor(int position) {
|
||||
ensureCursor();
|
||||
mCursor.moveToPosition(position);
|
||||
return mCursor;
|
||||
}
|
||||
|
||||
public static abstract class CursorIndices<T> {
|
||||
|
||||
public CursorIndices(@NonNull Cursor cursor) {
|
||||
|
@ -27,6 +27,7 @@ import android.support.annotation.Nullable;
|
||||
import com.bluelinelabs.logansquare.annotation.JsonField;
|
||||
import com.bluelinelabs.logansquare.annotation.JsonObject;
|
||||
|
||||
import org.apache.commons.lang3.math.NumberUtils;
|
||||
import org.mariotaku.twidere.util.ParseUtils;
|
||||
|
||||
import org.mariotaku.twidere.api.twitter.model.GeoLocation;
|
||||
@ -85,8 +86,8 @@ public class ParcelableLocation implements Parcelable {
|
||||
latitude = Double.NaN;
|
||||
longitude = Double.NaN;
|
||||
} else {
|
||||
latitude = ParseUtils.parseDouble(longlat[0], Double.NaN);
|
||||
longitude = ParseUtils.parseDouble(longlat[1], Double.NaN);
|
||||
latitude = NumberUtils.toDouble(longlat[0], Double.NaN);
|
||||
longitude = NumberUtils.toDouble(longlat[1], Double.NaN);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -11,6 +11,7 @@ import com.bluelinelabs.logansquare.LoganSquare;
|
||||
import com.bluelinelabs.logansquare.annotation.JsonField;
|
||||
import com.bluelinelabs.logansquare.annotation.JsonObject;
|
||||
|
||||
import org.apache.commons.lang3.math.NumberUtils;
|
||||
import org.mariotaku.twidere.api.twitter.model.CardEntity;
|
||||
import org.mariotaku.twidere.api.twitter.model.CardEntity.BindingValue;
|
||||
import org.mariotaku.twidere.api.twitter.model.CardEntity.ImageValue;
|
||||
@ -23,7 +24,6 @@ import org.mariotaku.twidere.api.twitter.model.MediaEntity.Type;
|
||||
import org.mariotaku.twidere.api.twitter.model.Status;
|
||||
import org.mariotaku.twidere.api.twitter.model.UrlEntity;
|
||||
import org.mariotaku.twidere.util.MediaPreviewUtils;
|
||||
import org.mariotaku.twidere.util.ParseUtils;
|
||||
import org.mariotaku.twidere.util.TwidereArrayUtils;
|
||||
import org.mariotaku.twidere.util.TwitterContentUtils;
|
||||
|
||||
@ -276,8 +276,8 @@ public class ParcelableMedia implements Parcelable {
|
||||
final BindingValue player_width = card.getBindingValue("player_width");
|
||||
final BindingValue player_height = card.getBindingValue("player_height");
|
||||
if (player_width instanceof StringValue && player_height instanceof StringValue) {
|
||||
media.width = ParseUtils.parseInt(((StringValue) player_width).getValue());
|
||||
media.height = ParseUtils.parseInt(((StringValue) player_height).getValue());
|
||||
media.width = NumberUtils.toInt(((StringValue) player_width).getValue(), -1);
|
||||
media.height = NumberUtils.toInt(((StringValue) player_height).getValue(), -1);
|
||||
}
|
||||
if (entities != null) {
|
||||
for (UrlEntity entity : entities) {
|
||||
|
@ -0,0 +1,39 @@
|
||||
/*
|
||||
* 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.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 15/11/25.
|
||||
*/
|
||||
public class Nullables {
|
||||
|
||||
@NonNull
|
||||
public static <T> List<T> list(@Nullable List<T> list) {
|
||||
if (list == null) return Collections.emptyList();
|
||||
return list;
|
||||
}
|
||||
|
||||
}
|
@ -113,71 +113,12 @@ public final class ParseUtils {
|
||||
Log.w(TwidereConstants.LOGTAG, "Unknown type " + value.getClass().getSimpleName() + " in arguments key " + key);
|
||||
}
|
||||
}
|
||||
} catch (final JSONException e) {
|
||||
e.printStackTrace();
|
||||
} catch (final ClassCastException e) {
|
||||
} catch (final JSONException | ClassCastException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return bundle;
|
||||
}
|
||||
|
||||
public static double parseDouble(final String source) {
|
||||
return parseDouble(source, -1);
|
||||
}
|
||||
|
||||
public static double parseDouble(final String source, final double def) {
|
||||
if (source == null) return def;
|
||||
try {
|
||||
return Double.parseDouble(source);
|
||||
} catch (final NumberFormatException e) {
|
||||
// Wrong number format? Ignore them.
|
||||
}
|
||||
return def;
|
||||
}
|
||||
|
||||
public static float parseFloat(final String source) {
|
||||
return parseFloat(source, -1);
|
||||
}
|
||||
|
||||
public static float parseFloat(final String source, final float def) {
|
||||
if (source == null) return def;
|
||||
try {
|
||||
return Float.parseFloat(source);
|
||||
} catch (final NumberFormatException e) {
|
||||
// Wrong number format? Ignore them.
|
||||
}
|
||||
return def;
|
||||
}
|
||||
|
||||
public static int parseInt(final String source) {
|
||||
return parseInt(source, -1);
|
||||
}
|
||||
|
||||
public static int parseInt(final String source, final int def) {
|
||||
if (source == null) return def;
|
||||
try {
|
||||
return Integer.valueOf(source);
|
||||
} catch (final NumberFormatException e) {
|
||||
// Wrong number format? Ignore them.
|
||||
}
|
||||
return def;
|
||||
}
|
||||
|
||||
public static long parseLong(final String source) {
|
||||
return parseLong(source, -1);
|
||||
}
|
||||
|
||||
public static long parseLong(final String source, final long def) {
|
||||
if (source == null) return def;
|
||||
try {
|
||||
return Long.parseLong(source);
|
||||
} catch (final NumberFormatException e) {
|
||||
// Wrong number format? Ignore them.
|
||||
}
|
||||
return def;
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public static String parseString(final String object) {
|
||||
return object;
|
||||
}
|
||||
|
@ -24,6 +24,7 @@ import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import org.apache.commons.lang3.math.NumberUtils;
|
||||
import org.apache.commons.lang3.text.translate.CharSequenceTranslator;
|
||||
import org.apache.commons.lang3.text.translate.EntityArrays;
|
||||
import org.apache.commons.lang3.text.translate.LookupTranslator;
|
||||
@ -188,7 +189,8 @@ public class TwitterContentUtils {
|
||||
for (int i = entities.length - 1; i >= 0; i--) {
|
||||
final Matcher m = PATTERN_TWITTER_STATUS_LINK.matcher(entities[i].getExpandedUrl());
|
||||
if (!m.matches()) continue;
|
||||
final long quoteId = ParseUtils.parseLong(m.group(3), -1);
|
||||
final long def = -1;
|
||||
final long quoteId = NumberUtils.toLong(m.group(3), def);
|
||||
if (quoteId > 0) {
|
||||
quotes.put(quoteId, status);
|
||||
}
|
||||
|
@ -13,9 +13,9 @@ import android.text.TextUtils;
|
||||
import android.util.Pair;
|
||||
|
||||
import org.apache.commons.lang3.ArrayUtils;
|
||||
import org.apache.commons.lang3.math.NumberUtils;
|
||||
import org.mariotaku.twidere.Constants;
|
||||
import org.mariotaku.twidere.activity.support.ComposeActivity;
|
||||
import org.mariotaku.twidere.util.ParseUtils;
|
||||
import org.mariotaku.twidere.util.Utils;
|
||||
import org.mariotaku.twidere.util.support.IntentSupport;
|
||||
|
||||
@ -222,7 +222,8 @@ public class TwitterLinkHandlerActivity extends Activity implements Constants {
|
||||
}
|
||||
}
|
||||
} else if (segsSize >= 3) {
|
||||
if ("status".equals(pathSegments.get(1)) && ParseUtils.parseLong(pathSegments.get(2), -1) != -1) {
|
||||
final long def = -1;
|
||||
if ("status".equals(pathSegments.get(1)) && NumberUtils.toLong(pathSegments.get(2), def) != -1) {
|
||||
final Uri.Builder builder = new Uri.Builder();
|
||||
builder.scheme(SCHEME_TWIDERE);
|
||||
builder.authority(AUTHORITY_STATUS);
|
||||
|
@ -37,9 +37,9 @@ import android.widget.Toast;
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.model.ParcelableCredentials;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Accounts;
|
||||
import org.mariotaku.twidere.util.ParseUtils;
|
||||
import org.mariotaku.twidere.util.TwitterAPIFactory;
|
||||
|
||||
import static org.mariotaku.twidere.util.ParseUtils.parseString;
|
||||
import static org.mariotaku.twidere.util.Utils.getNonEmptyString;
|
||||
import static org.mariotaku.twidere.util.Utils.trim;
|
||||
|
||||
@ -113,12 +113,12 @@ public class APIEditorActivity extends BaseSupportDialogActivity implements OnCh
|
||||
|
||||
@Override
|
||||
public void onSaveInstanceState(final Bundle outState) {
|
||||
final String apiUrlFormat = parseString(mEditAPIUrlFormat.getText());
|
||||
final String apiUrlFormat = ParseUtils.parseString(mEditAPIUrlFormat.getText());
|
||||
final int authType = getCheckedAuthType(mEditAuthType.getCheckedRadioButtonId());
|
||||
final boolean sameOAuthSigningUrl = mEditSameOAuthSigningUrl.isChecked();
|
||||
final boolean noVersionSuffix = mEditNoVersionSuffix.isChecked();
|
||||
final String consumerKey = parseString(mEditConsumerKey.getText());
|
||||
final String consumerSecret = parseString(mEditConsumerSecret.getText());
|
||||
final String consumerKey = ParseUtils.parseString(mEditConsumerKey.getText());
|
||||
final String consumerSecret = ParseUtils.parseString(mEditConsumerSecret.getText());
|
||||
outState.putString(Accounts.API_URL_FORMAT, apiUrlFormat);
|
||||
outState.putInt(Accounts.AUTH_TYPE, authType);
|
||||
outState.putBoolean(Accounts.SAME_OAUTH_SIGNING_URL, sameOAuthSigningUrl);
|
||||
@ -129,12 +129,12 @@ public class APIEditorActivity extends BaseSupportDialogActivity implements OnCh
|
||||
}
|
||||
|
||||
public void saveAndFinish() {
|
||||
final String apiUrlFormat = parseString(mEditAPIUrlFormat.getText());
|
||||
final String apiUrlFormat = ParseUtils.parseString(mEditAPIUrlFormat.getText());
|
||||
final int authType = getCheckedAuthType(mEditAuthType.getCheckedRadioButtonId());
|
||||
final boolean sameOAuthSigningUrl = mEditSameOAuthSigningUrl.isChecked();
|
||||
final boolean noVersionSuffix = mEditNoVersionSuffix.isChecked();
|
||||
final String consumerKey = parseString(mEditConsumerKey.getText());
|
||||
final String consumerSecret = parseString(mEditConsumerSecret.getText());
|
||||
final String consumerKey = ParseUtils.parseString(mEditConsumerKey.getText());
|
||||
final String consumerSecret = ParseUtils.parseString(mEditConsumerSecret.getText());
|
||||
final Intent intent = new Intent();
|
||||
intent.putExtra(Accounts.API_URL_FORMAT, apiUrlFormat);
|
||||
intent.putExtra(Accounts.AUTH_TYPE, authType);
|
||||
|
@ -63,6 +63,7 @@ import com.meizu.flyme.reflect.StatusBarProxy;
|
||||
import com.squareup.otto.Subscribe;
|
||||
|
||||
import org.apache.commons.lang3.ArrayUtils;
|
||||
import org.apache.commons.lang3.math.NumberUtils;
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.activity.SettingsActivity;
|
||||
import org.mariotaku.twidere.activity.SettingsWizardActivity;
|
||||
@ -87,7 +88,6 @@ import org.mariotaku.twidere.util.KeyboardShortcutsHandler;
|
||||
import org.mariotaku.twidere.util.KeyboardShortcutsHandler.KeyboardShortcutCallback;
|
||||
import org.mariotaku.twidere.util.MathUtils;
|
||||
import org.mariotaku.twidere.util.MultiSelectEventHandler;
|
||||
import org.mariotaku.twidere.util.ParseUtils;
|
||||
import org.mariotaku.twidere.util.ReadStateManager;
|
||||
import org.mariotaku.twidere.util.ThemeUtils;
|
||||
import org.mariotaku.twidere.util.TwidereColorUtils;
|
||||
@ -697,7 +697,7 @@ public class HomeActivity extends BaseAppCompatActivity implements OnClickListen
|
||||
final String tabType = uri != null ? Utils.matchTabType(uri) : null;
|
||||
int initialTab = -1;
|
||||
if (tabType != null) {
|
||||
final long accountId = ParseUtils.parseLong(uri.getQueryParameter(QUERY_PARAM_ACCOUNT_ID));
|
||||
final long accountId = NumberUtils.toLong(uri.getQueryParameter(QUERY_PARAM_ACCOUNT_ID), -1);
|
||||
for (int i = mPagerAdapter.getCount() - 1; i > -1; i--) {
|
||||
final SupportTabSpec tab = mPagerAdapter.getTab(i);
|
||||
if (tabType.equals(tab.type)) {
|
||||
|
@ -52,13 +52,13 @@ import org.mariotaku.twidere.model.ParcelableUser;
|
||||
import org.mariotaku.twidere.model.ParcelableUserList;
|
||||
import org.mariotaku.twidere.model.SingleResponse;
|
||||
import org.mariotaku.twidere.util.AsyncTaskUtils;
|
||||
import org.mariotaku.twidere.util.ParseUtils;
|
||||
import org.mariotaku.twidere.util.TwitterAPIFactory;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static android.text.TextUtils.isEmpty;
|
||||
import static org.mariotaku.twidere.util.ParseUtils.parseString;
|
||||
import static org.mariotaku.twidere.util.Utils.getAccountScreenName;
|
||||
|
||||
public class UserListSelectorActivity extends BaseSupportDialogActivity implements OnClickListener, OnItemClickListener {
|
||||
@ -88,7 +88,7 @@ public class UserListSelectorActivity extends BaseSupportDialogActivity implemen
|
||||
public void onClick(final View v) {
|
||||
switch (v.getId()) {
|
||||
case R.id.screen_name_confirm: {
|
||||
final String screen_name = parseString(mEditScreenName.getText());
|
||||
final String screen_name = ParseUtils.parseString(mEditScreenName.getText());
|
||||
if (isEmpty(screen_name)) return;
|
||||
searchUser(screen_name);
|
||||
break;
|
||||
|
@ -331,12 +331,16 @@ public abstract class AbsActivitiesAdapter<Data> extends LoadMoreSupportAdapter<
|
||||
|
||||
@Override
|
||||
public void onItemActionClick(ViewHolder holder, int id, int position) {
|
||||
|
||||
if (mActivityAdapterListener != null) {
|
||||
mActivityAdapterListener.onStatusActionClick(((StatusViewHolder) holder), id, position);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onItemMenuClick(ViewHolder holder, View menuView, int position) {
|
||||
|
||||
if (mActivityAdapterListener != null) {
|
||||
mActivityAdapterListener.onStatusMenuClick((StatusViewHolder) holder, menuView, position);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -372,6 +376,10 @@ public abstract class AbsActivitiesAdapter<Data> extends LoadMoreSupportAdapter<
|
||||
void onGapClick(GapViewHolder holder, int position);
|
||||
|
||||
void onActivityClick(ActivityTitleSummaryViewHolder holder, int position);
|
||||
|
||||
void onStatusActionClick(StatusViewHolder holder, int id, int position);
|
||||
|
||||
void onStatusMenuClick(StatusViewHolder holder, View menuView, int position);
|
||||
}
|
||||
|
||||
private static class StubViewHolder extends ViewHolder {
|
||||
|
@ -20,7 +20,9 @@
|
||||
package org.mariotaku.twidere.adapter;
|
||||
|
||||
import android.content.Context;
|
||||
import android.database.Cursor;
|
||||
|
||||
import org.mariotaku.twidere.model.ObjectCursor;
|
||||
import org.mariotaku.twidere.model.ParcelableStatus;
|
||||
|
||||
import java.util.List;
|
||||
@ -62,9 +64,25 @@ public abstract class AbsParcelableStatusesAdapter extends AbsStatusesAdapter<Li
|
||||
@Override
|
||||
public long getStatusId(int position) {
|
||||
if (position == getStatusesCount()) return -1;
|
||||
if (mData instanceof ObjectCursor) {
|
||||
final Cursor cursor = ((ObjectCursor) mData).getCursor(position);
|
||||
final ParcelableStatus.CursorIndices indices = (ParcelableStatus.CursorIndices) ((ObjectCursor) mData).getIndices();
|
||||
return cursor.getLong(indices.status_id);
|
||||
}
|
||||
return mData.get(position).id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getAccountId(int position) {
|
||||
if (position == getStatusesCount()) return -1;
|
||||
if (mData instanceof ObjectCursor) {
|
||||
final Cursor cursor = ((ObjectCursor) mData).getCursor(position);
|
||||
final ParcelableStatus.CursorIndices indices = (ParcelableStatus.CursorIndices) ((ObjectCursor) mData).getIndices();
|
||||
return cursor.getLong(indices.account_id);
|
||||
}
|
||||
return mData.get(position).account_id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setData(List<ParcelableStatus> data) {
|
||||
mData = data;
|
||||
|
@ -2,6 +2,7 @@ package org.mariotaku.twidere.adapter;
|
||||
|
||||
import android.content.Context;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v7.widget.RecyclerView.ViewHolder;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
@ -288,6 +289,16 @@ public abstract class AbsStatusesAdapter<D> extends LoadMoreSupportAdapter<ViewH
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public ParcelableStatus findStatusById(long accountId, long statusId) {
|
||||
for (int i = 0, j = getStatusesCount(); i < j; i++) {
|
||||
if (accountId == getAccountId(i) && statusId == getStatusId(i)) return getStatus(i);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
protected void bindStatus(IStatusViewHolder holder, int position) {
|
||||
holder.displayStatus(getStatus(position), isShowInReplyTo());
|
||||
}
|
||||
|
@ -1,5 +1,7 @@
|
||||
package org.mariotaku.twidere.adapter.iface;
|
||||
|
||||
import android.support.annotation.Nullable;
|
||||
|
||||
import org.mariotaku.twidere.model.ParcelableStatus;
|
||||
import org.mariotaku.twidere.util.MediaLoadingHandler;
|
||||
import org.mariotaku.twidere.util.TwidereLinkify;
|
||||
@ -21,6 +23,11 @@ public interface IStatusesAdapter<Data> extends IContentCardAdapter, IStatusView
|
||||
|
||||
long getStatusId(int position);
|
||||
|
||||
long getAccountId(int position);
|
||||
|
||||
@Nullable
|
||||
ParcelableStatus findStatusById(long accountId, long statusId);
|
||||
|
||||
int getStatusesCount();
|
||||
|
||||
TwidereLinkify getTwidereLinkify();
|
||||
|
@ -43,6 +43,7 @@ import org.mariotaku.twidere.util.RecyclerViewNavigationHelper;
|
||||
import org.mariotaku.twidere.view.HeaderDrawerLayout.DrawerCallback;
|
||||
import org.mariotaku.twidere.view.holder.ActivityTitleSummaryViewHolder;
|
||||
import org.mariotaku.twidere.view.holder.GapViewHolder;
|
||||
import org.mariotaku.twidere.view.holder.StatusViewHolder;
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 14/11/5.
|
||||
@ -169,6 +170,16 @@ public abstract class AbsActivitiesFragment<Data> extends AbsContentListRecycler
|
||||
return new StatusesBusCallback();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStatusActionClick(StatusViewHolder holder, int id, int position) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStatusMenuClick(StatusViewHolder holder, View menuView, int position) {
|
||||
|
||||
}
|
||||
|
||||
protected final class StatusesBusCallback {
|
||||
|
||||
protected StatusesBusCallback() {
|
||||
|
@ -53,8 +53,6 @@ import edu.tsinghua.hotmobi.model.MediaEvent;
|
||||
import edu.tsinghua.hotmobi.model.ScrollRecord;
|
||||
import edu.tsinghua.hotmobi.model.TimelineType;
|
||||
|
||||
import static org.mariotaku.twidere.util.Utils.setMenuForStatus;
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 14/11/5.
|
||||
*/
|
||||
@ -375,7 +373,7 @@ public abstract class AbsStatusesFragment<Data> extends AbsContentListRecyclerVi
|
||||
popupMenu.setOnMenuItemClickListener(mOnStatusMenuItemClickListener);
|
||||
popupMenu.inflate(R.menu.action_status);
|
||||
final ParcelableStatus status = adapter.getStatus(position);
|
||||
setMenuForStatus(adapter.getContext(), mPreferences, popupMenu.getMenu(), status);
|
||||
Utils.setMenuForStatus(adapter.getContext(), mPreferences, popupMenu.getMenu(), status, mTwitterWrapper);
|
||||
popupMenu.show();
|
||||
mPopupMenu = popupMenu;
|
||||
mSelectedStatus = status;
|
||||
|
@ -22,6 +22,8 @@ package org.mariotaku.twidere.fragment.support;
|
||||
import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.view.View;
|
||||
|
||||
import org.mariotaku.twidere.adapter.ParcelableActivitiesAdapter;
|
||||
import org.mariotaku.twidere.adapter.iface.IActivitiesAdapter;
|
||||
@ -102,5 +104,4 @@ public abstract class ParcelableActivitiesFragment extends AbsActivitiesFragment
|
||||
|
||||
protected abstract String[] getSavedActivitiesFileArgs();
|
||||
|
||||
|
||||
}
|
||||
|
@ -72,6 +72,8 @@ import android.widget.ImageView;
|
||||
import android.widget.Space;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.squareup.otto.Subscribe;
|
||||
|
||||
import org.apache.commons.lang3.ArrayUtils;
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.activity.support.ColorPickerDialogActivity;
|
||||
@ -102,6 +104,7 @@ import org.mariotaku.twidere.util.MathUtils;
|
||||
import org.mariotaku.twidere.util.MediaLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.MediaLoadingHandler;
|
||||
import org.mariotaku.twidere.util.MenuUtils;
|
||||
import org.mariotaku.twidere.util.Nullables;
|
||||
import org.mariotaku.twidere.util.RecyclerViewNavigationHelper;
|
||||
import org.mariotaku.twidere.util.RecyclerViewUtils;
|
||||
import org.mariotaku.twidere.util.StatusActionModeCallback;
|
||||
@ -113,6 +116,9 @@ import org.mariotaku.twidere.util.TwitterAPIFactory;
|
||||
import org.mariotaku.twidere.util.TwitterCardUtils;
|
||||
import org.mariotaku.twidere.util.UserColorNameManager;
|
||||
import org.mariotaku.twidere.util.Utils;
|
||||
import org.mariotaku.twidere.util.message.FavoriteCreatedEvent;
|
||||
import org.mariotaku.twidere.util.message.FavoriteDestroyedEvent;
|
||||
import org.mariotaku.twidere.util.message.StatusListChangedEvent;
|
||||
import org.mariotaku.twidere.view.CardMediaContainer;
|
||||
import org.mariotaku.twidere.view.CardMediaContainer.OnMediaClickListener;
|
||||
import org.mariotaku.twidere.view.ColorLabelRelativeLayout;
|
||||
@ -387,7 +393,8 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
||||
popupMenu.setOnMenuItemClickListener(mOnStatusMenuItemClickListener);
|
||||
popupMenu.inflate(R.menu.action_status);
|
||||
final ParcelableStatus status = mStatusAdapter.getStatus(position);
|
||||
Utils.setMenuForStatus(mStatusAdapter.getContext(), mPreferences, popupMenu.getMenu(), status);
|
||||
Utils.setMenuForStatus(mStatusAdapter.getContext(), mPreferences, popupMenu.getMenu(), status,
|
||||
mTwitterWrapper);
|
||||
popupMenu.show();
|
||||
mPopupMenu = popupMenu;
|
||||
mSelectedStatus = status;
|
||||
@ -640,6 +647,42 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStart() {
|
||||
super.onStart();
|
||||
mBus.register(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStop() {
|
||||
mBus.unregister(this);
|
||||
super.onStop();
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void notifyStatusListChanged(StatusListChangedEvent event) {
|
||||
final StatusAdapter adapter = getAdapter();
|
||||
adapter.notifyDataSetChanged();
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void notifyFavoriteCreated(FavoriteCreatedEvent event) {
|
||||
final StatusAdapter adapter = getAdapter();
|
||||
final ParcelableStatus status = adapter.findStatusById(event.status.account_id, event.status.id);
|
||||
if (status != null) {
|
||||
status.is_favorite = true;
|
||||
}
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void notifyFavoriteDestroyed(FavoriteDestroyedEvent event) {
|
||||
final StatusAdapter adapter = getAdapter();
|
||||
final ParcelableStatus status = adapter.findStatusById(event.status.account_id, event.status.id);
|
||||
if (status != null) {
|
||||
status.is_favorite = false;
|
||||
}
|
||||
}
|
||||
|
||||
public static final class LoadSensitiveImageConfirmDialogFragment extends BaseSupportDialogFragment implements
|
||||
DialogInterface.OnClickListener {
|
||||
|
||||
@ -756,7 +799,6 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
||||
private static class DetailStatusViewHolder extends ViewHolder implements OnClickListener,
|
||||
ActionMenuView.OnMenuItemClickListener {
|
||||
|
||||
private final StatusFragment fragment;
|
||||
private final StatusAdapter adapter;
|
||||
|
||||
private final ActionMenuView menuBar;
|
||||
@ -786,9 +828,8 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
||||
private final TwidereLinkify linkify;
|
||||
private final TextView favoritesLabel;
|
||||
|
||||
public DetailStatusViewHolder(StatusFragment fragment, StatusAdapter adapter, View itemView) {
|
||||
public DetailStatusViewHolder(StatusAdapter adapter, View itemView) {
|
||||
super(itemView);
|
||||
this.fragment = fragment;
|
||||
this.linkClickHandler = new StatusLinkClickHandler(adapter.getContext(), null);
|
||||
this.linkify = new TwidereLinkify(linkClickHandler);
|
||||
this.adapter = adapter;
|
||||
@ -825,7 +866,7 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
||||
initViews();
|
||||
}
|
||||
|
||||
public void displayStatus(ParcelableStatus status) {
|
||||
public void displayStatus(ParcelableStatus status, AsyncTwitterWrapper twitter) {
|
||||
if (status == null) return;
|
||||
final StatusFragment fragment = adapter.getFragment();
|
||||
final Context context = adapter.getContext();
|
||||
@ -979,8 +1020,9 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
||||
twitterCard.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
|
||||
Utils.setMenuForStatus(context, fragment.mPreferences, menuBar.getMenu(), status,
|
||||
adapter.getStatusAccount());
|
||||
adapter.getStatusAccount(), twitter);
|
||||
|
||||
textView.setTextIsSelectable(true);
|
||||
quotedTextView.setTextIsSelectable(true);
|
||||
@ -1276,7 +1318,26 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
||||
@Override
|
||||
public long getStatusId(int position) {
|
||||
final ParcelableStatus status = getStatus(position);
|
||||
return status != null ? status.hashCode() : position;
|
||||
return status != null ? status.id : position;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getAccountId(int position) {
|
||||
final ParcelableStatus status = getStatus(position);
|
||||
return status != null ? status.account_id : position;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ParcelableStatus findStatusById(long accountId, long statusId) {
|
||||
if (mStatus != null && accountId == mStatus.account_id && statusId == mStatus.id)
|
||||
return mStatus;
|
||||
for (ParcelableStatus status : Nullables.list(mConversation)) {
|
||||
if (accountId == status.account_id && status.id == statusId) return status;
|
||||
}
|
||||
for (ParcelableStatus status : Nullables.list(mReplies)) {
|
||||
if (accountId == status.account_id && status.id == statusId) return status;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -1412,7 +1473,7 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
||||
final CardView cardView = (CardView) view.findViewById(R.id.card);
|
||||
cardView.setCardBackgroundColor(mCardBackgroundColor);
|
||||
}
|
||||
return new DetailStatusViewHolder(mFragment, this, view);
|
||||
return new DetailStatusViewHolder(this, view);
|
||||
}
|
||||
case VIEW_TYPE_LIST_STATUS: {
|
||||
final View view = mInflater.inflate(mCardLayoutResource, parent, false);
|
||||
@ -1451,7 +1512,7 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
||||
case VIEW_TYPE_DETAIL_STATUS: {
|
||||
final ParcelableStatus status = getStatus(position);
|
||||
final DetailStatusViewHolder detailHolder = (DetailStatusViewHolder) holder;
|
||||
detailHolder.displayStatus(status);
|
||||
detailHolder.displayStatus(status, mTwitterWrapper);
|
||||
break;
|
||||
}
|
||||
case VIEW_TYPE_LIST_STATUS: {
|
||||
|
@ -83,6 +83,7 @@ import android.widget.TextView;
|
||||
import com.meizu.flyme.reflect.StatusBarProxy;
|
||||
import com.squareup.otto.Subscribe;
|
||||
|
||||
import org.apache.commons.lang3.math.NumberUtils;
|
||||
import org.mariotaku.sqliteqb.library.Expression;
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.activity.iface.IThemedActivity;
|
||||
@ -1297,7 +1298,7 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
|
||||
break;
|
||||
}
|
||||
case TwidereLinkify.LINK_TYPE_STATUS: {
|
||||
Utils.openStatus(getActivity(), accountId, ParseUtils.parseLong(link));
|
||||
Utils.openStatus(getActivity(), accountId, NumberUtils.toLong(link, -1));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -40,9 +40,9 @@ import org.mariotaku.twidere.Constants;
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.model.ParcelableCredentials;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Accounts;
|
||||
import org.mariotaku.twidere.util.ParseUtils;
|
||||
|
||||
import static android.text.TextUtils.isEmpty;
|
||||
import static org.mariotaku.twidere.util.ParseUtils.parseString;
|
||||
import static org.mariotaku.twidere.util.Utils.getNonEmptyString;
|
||||
import static org.mariotaku.twidere.util.Utils.trim;
|
||||
|
||||
@ -96,6 +96,7 @@ public class DefaultAPIPreference extends DialogPreference implements Constants,
|
||||
|
||||
@Override
|
||||
protected void onBindDialogView(@NonNull final View view) {
|
||||
super.onBindDialogView(view);
|
||||
final SharedPreferences pref = getSharedPreferences();
|
||||
final String apiUrlFormat = getNonEmptyString(pref, KEY_API_URL_FORMAT, DEFAULT_TWITTER_API_URL_FORMAT);
|
||||
final int authType = pref.getInt(KEY_AUTH_TYPE, ParcelableCredentials.AUTH_TYPE_OAUTH);
|
||||
@ -131,12 +132,12 @@ public class DefaultAPIPreference extends DialogPreference implements Constants,
|
||||
@Override
|
||||
protected void onDialogClosed(final boolean positiveResult) {
|
||||
if (!positiveResult) return;
|
||||
final String apiUrlFormat = parseString(mEditAPIUrlFormat.getText());
|
||||
final String apiUrlFormat = ParseUtils.parseString(mEditAPIUrlFormat.getText());
|
||||
final int authType = getCheckedAuthType(mEditAuthType.getCheckedRadioButtonId());
|
||||
final boolean sameOAuthSigningUrl = mEditSameOAuthSigningUrl.isChecked();
|
||||
final boolean noVersionSuffix = mEditNoVersionSuffix.isChecked();
|
||||
final String consumerKey = parseString(mEditConsumerKey.getText());
|
||||
final String consumerSecret = parseString(mEditConsumerSecret.getText());
|
||||
final String consumerKey = ParseUtils.parseString(mEditConsumerKey.getText());
|
||||
final String consumerSecret = ParseUtils.parseString(mEditConsumerSecret.getText());
|
||||
final SharedPreferences.Editor editor = getSharedPreferences().edit();
|
||||
if (!isEmpty(consumerKey) && !isEmpty(consumerSecret)) {
|
||||
editor.putString(KEY_CONSUMER_KEY, consumerKey);
|
||||
@ -179,11 +180,11 @@ public class DefaultAPIPreference extends DialogPreference implements Constants,
|
||||
protected Parcelable onSaveInstanceState() {
|
||||
final Bundle outState = new Bundle();
|
||||
outState.putParcelable(EXTRA_DATA, super.onSaveInstanceState());
|
||||
outState.putString(Accounts.API_URL_FORMAT, parseString(mEditAPIUrlFormat.getText()));
|
||||
outState.putString(Accounts.API_URL_FORMAT, ParseUtils.parseString(mEditAPIUrlFormat.getText()));
|
||||
outState.putInt(Accounts.AUTH_TYPE, getCheckedAuthType(mEditAuthType.getCheckedRadioButtonId()));
|
||||
outState.putBoolean(Accounts.SAME_OAUTH_SIGNING_URL, mEditSameOAuthSigningUrl.isChecked());
|
||||
outState.putString(Accounts.CONSUMER_KEY, parseString(mEditConsumerKey.getText()));
|
||||
outState.putString(Accounts.CONSUMER_SECRET, parseString(mEditConsumerSecret.getText()));
|
||||
outState.putString(Accounts.CONSUMER_KEY, ParseUtils.parseString(mEditConsumerKey.getText()));
|
||||
outState.putString(Accounts.CONSUMER_SECRET, ParseUtils.parseString(mEditConsumerSecret.getText()));
|
||||
return outState;
|
||||
}
|
||||
|
||||
|
@ -63,6 +63,7 @@ import com.squareup.okhttp.Dns;
|
||||
import com.squareup.otto.Bus;
|
||||
|
||||
import org.apache.commons.lang3.ArrayUtils;
|
||||
import org.apache.commons.lang3.math.NumberUtils;
|
||||
import org.mariotaku.sqliteqb.library.Columns.Column;
|
||||
import org.mariotaku.sqliteqb.library.Expression;
|
||||
import org.mariotaku.sqliteqb.library.OnConflict;
|
||||
@ -400,11 +401,11 @@ public final class TwidereDataProvider extends ContentProvider implements Consta
|
||||
if (segments.size() == 1) {
|
||||
clearNotification();
|
||||
} else if (segments.size() == 2) {
|
||||
final int notificationType = ParseUtils.parseInt(segments.get(1));
|
||||
final int notificationType = NumberUtils.toInt(segments.get(1), -1);
|
||||
clearNotification(notificationType, 0);
|
||||
} else if (segments.size() == 3) {
|
||||
final int notificationType = ParseUtils.parseInt(segments.get(1));
|
||||
final long accountId = ParseUtils.parseLong(segments.get(2));
|
||||
final int notificationType = NumberUtils.toInt(segments.get(1), -1);
|
||||
final long accountId = NumberUtils.toLong(segments.get(2), -1);
|
||||
clearNotification(notificationType, accountId);
|
||||
}
|
||||
return 1;
|
||||
@ -678,15 +679,19 @@ public final class TwidereDataProvider extends ContentProvider implements Consta
|
||||
}
|
||||
case VIRTUAL_TABLE_ID_NOTIFICATIONS: {
|
||||
final List<String> segments = uri.getPathSegments();
|
||||
if (segments.size() == 2)
|
||||
return getNotificationsCursor(ParseUtils.parseInt(segments.get(1), -1));
|
||||
if (segments.size() == 2) {
|
||||
final int def = -1;
|
||||
return getNotificationsCursor(NumberUtils.toInt(segments.get(1), def));
|
||||
}
|
||||
else
|
||||
return getNotificationsCursor();
|
||||
}
|
||||
case VIRTUAL_TABLE_ID_UNREAD_COUNTS: {
|
||||
final List<String> segments = uri.getPathSegments();
|
||||
if (segments.size() == 2)
|
||||
return getUnreadCountsCursor(ParseUtils.parseInt(segments.get(1), -1));
|
||||
if (segments.size() == 2) {
|
||||
final int def = -1;
|
||||
return getUnreadCountsCursor(NumberUtils.toInt(segments.get(1), def));
|
||||
}
|
||||
else
|
||||
return getUnreadCountsCursor();
|
||||
}
|
||||
@ -698,8 +703,8 @@ public final class TwidereDataProvider extends ContentProvider implements Consta
|
||||
case TABLE_ID_DIRECT_MESSAGES_CONVERSATION: {
|
||||
final List<String> segments = uri.getPathSegments();
|
||||
if (segments.size() != 4) return null;
|
||||
final long accountId = ParseUtils.parseLong(segments.get(2));
|
||||
final long conversationId = ParseUtils.parseLong(segments.get(3));
|
||||
final long accountId = NumberUtils.toLong(segments.get(2), -1);
|
||||
final long conversationId = NumberUtils.toLong(segments.get(3), -1);
|
||||
final SQLSelectQuery query = ConversationQueryBuilder.buildByConversationId(projection,
|
||||
accountId, conversationId, selection, sortOrder);
|
||||
final Cursor c = mDatabaseWrapper.rawQuery(query.getSQL(), selectionArgs);
|
||||
@ -709,7 +714,7 @@ public final class TwidereDataProvider extends ContentProvider implements Consta
|
||||
case TABLE_ID_DIRECT_MESSAGES_CONVERSATION_SCREEN_NAME: {
|
||||
final List<String> segments = uri.getPathSegments();
|
||||
if (segments.size() != 4) return null;
|
||||
final long accountId = ParseUtils.parseLong(segments.get(2));
|
||||
final long accountId = NumberUtils.toLong(segments.get(2), -1);
|
||||
final String screenName = segments.get(3);
|
||||
final SQLSelectQuery query = ConversationQueryBuilder.buildByScreenName(projection,
|
||||
accountId, screenName, selection, sortOrder);
|
||||
@ -718,7 +723,8 @@ public final class TwidereDataProvider extends ContentProvider implements Consta
|
||||
return c;
|
||||
}
|
||||
case VIRTUAL_TABLE_ID_CACHED_USERS_WITH_RELATIONSHIP: {
|
||||
final long accountId = ParseUtils.parseLong(uri.getLastPathSegment(), -1);
|
||||
final long def = -1;
|
||||
final long accountId = NumberUtils.toLong(uri.getLastPathSegment(), def);
|
||||
final SQLSelectQuery query = CachedUsersQueryBuilder.withRelationship(projection,
|
||||
selection, sortOrder, accountId);
|
||||
final Cursor c = mDatabaseWrapper.rawQuery(query.getSQL(), selectionArgs);
|
||||
@ -726,7 +732,8 @@ public final class TwidereDataProvider extends ContentProvider implements Consta
|
||||
return c;
|
||||
}
|
||||
case VIRTUAL_TABLE_ID_CACHED_USERS_WITH_SCORE: {
|
||||
final long accountId = ParseUtils.parseLong(uri.getLastPathSegment(), -1);
|
||||
final long def = -1;
|
||||
final long accountId = NumberUtils.toLong(uri.getLastPathSegment(), def);
|
||||
final SQLSelectQuery query = CachedUsersQueryBuilder.withScore(projection,
|
||||
selection, sortOrder, accountId, 0);
|
||||
final Cursor c = mDatabaseWrapper.rawQuery(query.getSQL(), selectionArgs);
|
||||
@ -768,7 +775,8 @@ public final class TwidereDataProvider extends ContentProvider implements Consta
|
||||
|
||||
private Cursor getSearchSuggestionCursor(Uri uri) {
|
||||
final String query = uri.getQueryParameter(QUERY_PARAM_QUERY);
|
||||
final long accountId = ParseUtils.parseLong(uri.getQueryParameter(QUERY_PARAM_ACCOUNT_ID), -1);
|
||||
final long def = -1;
|
||||
final long accountId = NumberUtils.toLong(uri.getQueryParameter(QUERY_PARAM_ACCOUNT_ID), def);
|
||||
if (query == null || accountId <= 0) return null;
|
||||
final boolean emptyQuery = TextUtils.isEmpty(query);
|
||||
final String queryEscaped = query.replace("_", "^_");
|
||||
|
@ -26,9 +26,9 @@ import android.net.Uri;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import org.apache.commons.lang3.math.NumberUtils;
|
||||
import org.mariotaku.twidere.Constants;
|
||||
import org.mariotaku.twidere.model.StringLongPair;
|
||||
import org.mariotaku.twidere.util.ParseUtils;
|
||||
import org.mariotaku.twidere.util.ReadStateManager;
|
||||
import org.mariotaku.twidere.util.UriExtraUtils;
|
||||
import org.mariotaku.twidere.util.Utils;
|
||||
@ -50,10 +50,14 @@ public class NotificationReceiver extends BroadcastReceiver implements Constants
|
||||
final Uri uri = intent.getData();
|
||||
if (uri == null) return;
|
||||
final String type = uri.getQueryParameter(QUERY_PARAM_NOTIFICATION_TYPE);
|
||||
final long accountId = ParseUtils.parseLong(uri.getQueryParameter(QUERY_PARAM_ACCOUNT_ID), -1);
|
||||
final long itemId = ParseUtils.parseLong(UriExtraUtils.getExtra(uri, "item_id"), -1);
|
||||
final long itemUserId = ParseUtils.parseLong(UriExtraUtils.getExtra(uri, "item_user_id"), -1);
|
||||
final long timestamp = ParseUtils.parseLong(uri.getQueryParameter(QUERY_PARAM_TIMESTAMP), -1);
|
||||
final long def4 = -1;
|
||||
final long accountId = NumberUtils.toLong(uri.getQueryParameter(QUERY_PARAM_ACCOUNT_ID), def4);
|
||||
final long def3 = -1;
|
||||
final long itemId = NumberUtils.toLong(UriExtraUtils.getExtra(uri, "item_id"), def3);
|
||||
final long def2 = -1;
|
||||
final long itemUserId = NumberUtils.toLong(UriExtraUtils.getExtra(uri, "item_user_id"), def2);
|
||||
final long def1 = -1;
|
||||
final long timestamp = NumberUtils.toLong(uri.getQueryParameter(QUERY_PARAM_TIMESTAMP), def1);
|
||||
final ApplicationModule module = ApplicationModule.get(context);
|
||||
if (AUTHORITY_MENTIONS.equals(type) && accountId != -1 && itemId != -1 && timestamp != -1) {
|
||||
final HotMobiLogger logger = module.getHotMobiLogger();
|
||||
@ -64,8 +68,9 @@ public class NotificationReceiver extends BroadcastReceiver implements Constants
|
||||
final String paramReadPosition, paramReadPositions;
|
||||
final String tag = getPositionTag(type);
|
||||
if (tag != null && !TextUtils.isEmpty(paramReadPosition = uri.getQueryParameter(QUERY_PARAM_READ_POSITION))) {
|
||||
final long def = -1;
|
||||
manager.setPosition(Utils.getReadPositionTagWithAccounts(tag, accountId),
|
||||
ParseUtils.parseLong(paramReadPosition, -1));
|
||||
NumberUtils.toLong(paramReadPosition, def));
|
||||
} else if (!TextUtils.isEmpty(paramReadPositions = uri.getQueryParameter(QUERY_PARAM_READ_POSITIONS))) {
|
||||
try {
|
||||
final StringLongPair[] pairs = StringLongPair.valuesOf(paramReadPositions);
|
||||
|
@ -43,6 +43,7 @@ import android.widget.Toast;
|
||||
import com.nostra13.universalimageloader.utils.IoUtils;
|
||||
import com.twitter.Extractor;
|
||||
|
||||
import org.apache.commons.lang3.math.NumberUtils;
|
||||
import org.mariotaku.restfu.http.ContentType;
|
||||
import org.mariotaku.restfu.http.mime.FileTypedData;
|
||||
import org.mariotaku.sqliteqb.library.Expression;
|
||||
@ -79,7 +80,6 @@ import org.mariotaku.twidere.util.ContentValuesCreator;
|
||||
import org.mariotaku.twidere.util.ListUtils;
|
||||
import org.mariotaku.twidere.util.MediaUploaderInterface;
|
||||
import org.mariotaku.twidere.util.NotificationManagerWrapper;
|
||||
import org.mariotaku.twidere.util.ParseUtils;
|
||||
import org.mariotaku.twidere.util.StatusCodeMessageUtils;
|
||||
import org.mariotaku.twidere.util.StatusShortenerInterface;
|
||||
import org.mariotaku.twidere.util.TwidereValidator;
|
||||
@ -222,7 +222,8 @@ public class BackgroundOperationService extends IntentService implements Constan
|
||||
final Uri uri = intent.getData();
|
||||
if (uri == null) return;
|
||||
mNotificationManager.cancel(uri.toString(), NOTIFICATION_ID_DRAFTS);
|
||||
final long draftId = ParseUtils.parseLong(uri.getLastPathSegment(), -1);
|
||||
final long def = -1;
|
||||
final long draftId = NumberUtils.toLong(uri.getLastPathSegment(), def);
|
||||
if (draftId == -1) return;
|
||||
final Expression where = Expression.equals(Drafts._ID, draftId);
|
||||
final ContentResolver cr = getContentResolver();
|
||||
@ -255,7 +256,8 @@ public class BackgroundOperationService extends IntentService implements Constan
|
||||
if (data == null) return;
|
||||
mNotificationManager.cancel(data.toString(), NOTIFICATION_ID_DRAFTS);
|
||||
final ContentResolver cr = getContentResolver();
|
||||
final long id = ParseUtils.parseLong(data.getLastPathSegment(), -1);
|
||||
final long def = -1;
|
||||
final long id = NumberUtils.toLong(data.getLastPathSegment(), def);
|
||||
final Expression where = Expression.equals(Drafts._ID, id);
|
||||
cr.delete(Drafts.CONTENT_URI, where.getSQL(), null);
|
||||
}
|
||||
@ -325,7 +327,8 @@ public class BackgroundOperationService extends IntentService implements Constan
|
||||
final ContentValues draftValues = ContentValuesCreator.createStatusDraft(item,
|
||||
ParcelableAccount.getAccountIds(item.accounts));
|
||||
final Uri draftUri = mResolver.insert(Drafts.CONTENT_URI, draftValues);
|
||||
final long draftId = draftUri != null ? ParseUtils.parseLong(draftUri.getLastPathSegment(), -1) : -1;
|
||||
final long def = -1;
|
||||
final long draftId = draftUri != null ? NumberUtils.toLong(draftUri.getLastPathSegment(), def) : -1;
|
||||
mTwitter.addSendingDraftId(draftId);
|
||||
final List<SingleResponse<ParcelableStatus>> result = updateStatus(builder, item);
|
||||
boolean failed = false;
|
||||
|
@ -30,6 +30,7 @@ import android.os.IBinder;
|
||||
import android.os.SystemClock;
|
||||
import android.util.Log;
|
||||
|
||||
import org.apache.commons.lang3.math.NumberUtils;
|
||||
import org.mariotaku.twidere.BuildConfig;
|
||||
import org.mariotaku.twidere.Constants;
|
||||
import org.mariotaku.twidere.model.AccountPreferences;
|
||||
@ -49,7 +50,6 @@ import javax.inject.Inject;
|
||||
import edu.tsinghua.hotmobi.HotMobiLogger;
|
||||
import edu.tsinghua.hotmobi.model.ScreenEvent;
|
||||
|
||||
import static org.mariotaku.twidere.util.ParseUtils.parseInt;
|
||||
import static org.mariotaku.twidere.util.Utils.getAccountIds;
|
||||
import static org.mariotaku.twidere.util.Utils.getDefaultAccountId;
|
||||
import static org.mariotaku.twidere.util.Utils.getNewestMessageIdsFromDatabase;
|
||||
@ -268,7 +268,7 @@ public class RefreshService extends Service implements Constants {
|
||||
|
||||
private long getRefreshInterval() {
|
||||
if (mPreferences == null) return 0;
|
||||
final int prefValue = parseInt(mPreferences.getString(KEY_REFRESH_INTERVAL, DEFAULT_REFRESH_INTERVAL));
|
||||
final int prefValue = NumberUtils.toInt(mPreferences.getString(KEY_REFRESH_INTERVAL, DEFAULT_REFRESH_INTERVAL), -1);
|
||||
return Math.max(prefValue, 3) * 60 * 1000;
|
||||
}
|
||||
|
||||
|
@ -27,6 +27,7 @@ import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
|
||||
import org.apache.commons.lang3.math.NumberUtils;
|
||||
import org.mariotaku.twidere.Constants;
|
||||
import org.mariotaku.twidere.model.ParcelableMedia;
|
||||
import org.mariotaku.twidere.util.TwidereLinkify.OnLinkClickListener;
|
||||
@ -92,11 +93,11 @@ public class OnLinkClickHandler implements OnLinkClickListener, Constants {
|
||||
break;
|
||||
}
|
||||
case TwidereLinkify.LINK_TYPE_USER_ID: {
|
||||
openUserProfile(context, accountId, ParseUtils.parseLong(link), null, null);
|
||||
openUserProfile(context, accountId, NumberUtils.toLong(link, -1), null, null);
|
||||
break;
|
||||
}
|
||||
case TwidereLinkify.LINK_TYPE_STATUS: {
|
||||
openStatus(context, accountId, ParseUtils.parseLong(link));
|
||||
openStatus(context, accountId, NumberUtils.toLong(link, -1));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -24,6 +24,7 @@ import android.text.TextUtils;
|
||||
|
||||
import com.twitter.Validator;
|
||||
|
||||
import org.apache.commons.lang3.math.NumberUtils;
|
||||
import org.mariotaku.twidere.Constants;
|
||||
|
||||
public class TwidereValidator implements Constants {
|
||||
@ -37,7 +38,7 @@ public class TwidereValidator implements Constants {
|
||||
mValidator = new Validator();
|
||||
if (prefs != null) {
|
||||
final String textLimit = prefs.getString(KEY_STATUS_TEXT_LIMIT, null);
|
||||
mMaxTweetLength = ParseUtils.parseInt(textLimit, Validator.MAX_TWEET_LENGTH);
|
||||
mMaxTweetLength = NumberUtils.toInt(textLimit, Validator.MAX_TWEET_LENGTH);
|
||||
} else {
|
||||
mMaxTweetLength = Validator.MAX_TWEET_LENGTH;
|
||||
}
|
||||
|
@ -14,6 +14,7 @@ import android.webkit.URLUtil;
|
||||
import com.squareup.okhttp.Dns;
|
||||
import com.squareup.okhttp.OkHttpClient;
|
||||
|
||||
import org.apache.commons.lang3.math.NumberUtils;
|
||||
import org.mariotaku.restfu.ExceptionFactory;
|
||||
import org.mariotaku.restfu.HttpRequestFactory;
|
||||
import org.mariotaku.restfu.Pair;
|
||||
@ -148,7 +149,7 @@ public class TwitterAPIFactory implements TwidereConstants {
|
||||
|
||||
public static Proxy getProxy(final SharedPreferences prefs) {
|
||||
final String proxyHost = prefs.getString(KEY_PROXY_HOST, null);
|
||||
final int proxyPort = ParseUtils.parseInt(prefs.getString(KEY_PROXY_PORT, "-1"));
|
||||
final int proxyPort = NumberUtils.toInt(prefs.getString(KEY_PROXY_PORT, "-1"), -1);
|
||||
if (!isEmpty(proxyHost) && proxyPort >= 0 && proxyPort < 65535) {
|
||||
final SocketAddress addr = InetSocketAddress.createUnresolved(proxyHost, proxyPort);
|
||||
return new Proxy(Proxy.Type.HTTP, addr);
|
||||
|
@ -23,6 +23,7 @@ import android.graphics.Point;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.app.Fragment;
|
||||
|
||||
import org.apache.commons.lang3.math.NumberUtils;
|
||||
import org.mariotaku.twidere.model.ParcelableStatus.ParcelableCardEntity;
|
||||
import org.mariotaku.twidere.model.ParcelableStatus.ParcelableCardEntity.ParcelableBindingValue;
|
||||
|
||||
@ -60,8 +61,8 @@ public class TwitterCardUtils {
|
||||
final ParcelableBindingValue player_width = ParcelableCardEntity.getValue(card, "player_width");
|
||||
final ParcelableBindingValue player_height = ParcelableCardEntity.getValue(card, "player_height");
|
||||
if (player_width != null && player_height != null) {
|
||||
final int width = ParseUtils.parseInt(String.valueOf(player_width.value));
|
||||
final int height = ParseUtils.parseInt(String.valueOf(player_height.value));
|
||||
final int width = NumberUtils.toInt(String.valueOf(player_width.value), -1);
|
||||
final int height = NumberUtils.toInt(String.valueOf(player_height.value), -1);
|
||||
if (width > 0 && height > 0) {
|
||||
return new Point(width, height);
|
||||
}
|
||||
|
@ -25,6 +25,7 @@ import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
|
||||
import android.graphics.Color;
|
||||
import android.support.v4.util.LongSparseArray;
|
||||
|
||||
import org.apache.commons.lang3.math.NumberUtils;
|
||||
import org.mariotaku.twidere.TwidereConstants;
|
||||
import org.mariotaku.twidere.api.twitter.model.User;
|
||||
import org.mariotaku.twidere.model.ParcelableStatus;
|
||||
@ -175,7 +176,8 @@ public class UserColorNameManager implements TwidereConstants {
|
||||
|
||||
@Override
|
||||
public void onSharedPreferenceChanged(final SharedPreferences sharedPreferences, final String key) {
|
||||
final long userId = ParseUtils.parseLong(key, -1);
|
||||
final long def = -1;
|
||||
final long userId = NumberUtils.toLong(key, def);
|
||||
if (mListener != null) {
|
||||
mListener.onUserColorChanged(userId, sharedPreferences.getInt(key, 0));
|
||||
}
|
||||
@ -193,7 +195,8 @@ public class UserColorNameManager implements TwidereConstants {
|
||||
|
||||
@Override
|
||||
public void onSharedPreferenceChanged(final SharedPreferences sharedPreferences, final String key) {
|
||||
final long userId = ParseUtils.parseLong(key, -1);
|
||||
final long def = -1;
|
||||
final long userId = NumberUtils.toLong(key, def);
|
||||
if (mListener != null) {
|
||||
mListener.onUserNicknameChanged(userId, sharedPreferences.getString(key, null));
|
||||
}
|
||||
|
@ -115,6 +115,7 @@ import android.widget.Toast;
|
||||
import com.bluelinelabs.logansquare.LoganSquare;
|
||||
|
||||
import org.apache.commons.lang3.ArrayUtils;
|
||||
import org.apache.commons.lang3.math.NumberUtils;
|
||||
import org.json.JSONException;
|
||||
import org.mariotaku.restfu.RestAPIFactory;
|
||||
import org.mariotaku.restfu.RestClient;
|
||||
@ -846,8 +847,8 @@ public final class Utils implements Constants {
|
||||
}
|
||||
case LINK_ID_MAP: {
|
||||
if (!args.containsKey(EXTRA_LATITUDE) && !args.containsKey(EXTRA_LONGITUDE)) {
|
||||
final double lat = ParseUtils.parseDouble(uri.getQueryParameter(QUERY_PARAM_LAT), Double.NaN);
|
||||
final double lng = ParseUtils.parseDouble(uri.getQueryParameter(QUERY_PARAM_LNG), Double.NaN);
|
||||
final double lat = NumberUtils.toDouble(uri.getQueryParameter(QUERY_PARAM_LAT), Double.NaN);
|
||||
final double lng = NumberUtils.toDouble(uri.getQueryParameter(QUERY_PARAM_LNG), Double.NaN);
|
||||
if (Double.isNaN(lat) || Double.isNaN(lng)) return null;
|
||||
args.putDouble(EXTRA_LATITUDE, lat);
|
||||
args.putDouble(EXTRA_LONGITUDE, lng);
|
||||
@ -859,7 +860,7 @@ public final class Utils implements Constants {
|
||||
fragment = new StatusFragment();
|
||||
if (!args.containsKey(EXTRA_STATUS_ID)) {
|
||||
final String param_status_id = uri.getQueryParameter(QUERY_PARAM_STATUS_ID);
|
||||
args.putLong(EXTRA_STATUS_ID, ParseUtils.parseLong(param_status_id));
|
||||
args.putLong(EXTRA_STATUS_ID, NumberUtils.toLong(param_status_id, -1));
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -871,7 +872,7 @@ public final class Utils implements Constants {
|
||||
args.putString(EXTRA_SCREEN_NAME, paramScreenName);
|
||||
}
|
||||
if (!args.containsKey(EXTRA_USER_ID)) {
|
||||
args.putLong(EXTRA_USER_ID, ParseUtils.parseLong(param_user_id));
|
||||
args.putLong(EXTRA_USER_ID, NumberUtils.toLong(param_user_id, -1));
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -883,7 +884,7 @@ public final class Utils implements Constants {
|
||||
args.putString(EXTRA_SCREEN_NAME, paramScreenName);
|
||||
}
|
||||
if (!args.containsKey(EXTRA_USER_ID)) {
|
||||
args.putLong(EXTRA_USER_ID, ParseUtils.parseLong(paramUserId));
|
||||
args.putLong(EXTRA_USER_ID, NumberUtils.toLong(paramUserId, -1));
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -895,7 +896,7 @@ public final class Utils implements Constants {
|
||||
args.putString(EXTRA_SCREEN_NAME, paramScreenName);
|
||||
}
|
||||
if (!args.containsKey(EXTRA_USER_ID)) {
|
||||
args.putLong(EXTRA_USER_ID, ParseUtils.parseLong(paramUserId));
|
||||
args.putLong(EXTRA_USER_ID, NumberUtils.toLong(paramUserId, -1));
|
||||
}
|
||||
if (isEmpty(paramScreenName) && isEmpty(paramUserId)) return null;
|
||||
break;
|
||||
@ -908,7 +909,7 @@ public final class Utils implements Constants {
|
||||
args.putString(EXTRA_SCREEN_NAME, paramScreenName);
|
||||
}
|
||||
if (!args.containsKey(EXTRA_USER_ID)) {
|
||||
args.putLong(EXTRA_USER_ID, ParseUtils.parseLong(paramUserId));
|
||||
args.putLong(EXTRA_USER_ID, NumberUtils.toLong(paramUserId, -1));
|
||||
}
|
||||
if (isEmpty(paramScreenName) && isEmpty(paramUserId)) return null;
|
||||
break;
|
||||
@ -921,7 +922,7 @@ public final class Utils implements Constants {
|
||||
args.putString(EXTRA_SCREEN_NAME, paramScreenName);
|
||||
}
|
||||
if (!args.containsKey(EXTRA_USER_ID)) {
|
||||
args.putLong(EXTRA_USER_ID, ParseUtils.parseLong(paramUserId));
|
||||
args.putLong(EXTRA_USER_ID, NumberUtils.toLong(paramUserId, -1));
|
||||
}
|
||||
if (!args.containsKey(EXTRA_SCREEN_NAME) && !args.containsKey(EXTRA_USER_ID))
|
||||
return null;
|
||||
@ -935,7 +936,7 @@ public final class Utils implements Constants {
|
||||
args.putString(EXTRA_SCREEN_NAME, paramScreenName);
|
||||
}
|
||||
if (!args.containsKey(EXTRA_USER_ID)) {
|
||||
args.putLong(EXTRA_USER_ID, ParseUtils.parseLong(param_user_id));
|
||||
args.putLong(EXTRA_USER_ID, NumberUtils.toLong(param_user_id, -1));
|
||||
}
|
||||
if (isEmpty(paramScreenName) && isEmpty(param_user_id)) return null;
|
||||
break;
|
||||
@ -948,7 +949,7 @@ public final class Utils implements Constants {
|
||||
args.putString(EXTRA_SCREEN_NAME, paramScreenName);
|
||||
}
|
||||
if (!args.containsKey(EXTRA_USER_ID)) {
|
||||
args.putLong(EXTRA_USER_ID, ParseUtils.parseLong(param_user_id));
|
||||
args.putLong(EXTRA_USER_ID, NumberUtils.toLong(param_user_id, -1));
|
||||
}
|
||||
if (isEmpty(paramScreenName) && isEmpty(param_user_id)) return null;
|
||||
break;
|
||||
@ -969,7 +970,7 @@ public final class Utils implements Constants {
|
||||
fragment = new MessagesConversationFragment();
|
||||
final String paramRecipientId = uri.getQueryParameter(QUERY_PARAM_RECIPIENT_ID);
|
||||
final String paramScreenName = uri.getQueryParameter(QUERY_PARAM_SCREEN_NAME);
|
||||
final long conversationId = ParseUtils.parseLong(paramRecipientId);
|
||||
final long conversationId = NumberUtils.toLong(paramRecipientId, -1);
|
||||
if (conversationId > 0) {
|
||||
args.putLong(EXTRA_RECIPIENT_ID, conversationId);
|
||||
} else if (paramScreenName != null) {
|
||||
@ -986,8 +987,8 @@ public final class Utils implements Constants {
|
||||
if (isEmpty(paramListId)
|
||||
&& (isEmpty(paramListName) || isEmpty(paramScreenName) && isEmpty(paramUserId)))
|
||||
return null;
|
||||
args.putLong(EXTRA_LIST_ID, ParseUtils.parseLong(paramListId));
|
||||
args.putLong(EXTRA_USER_ID, ParseUtils.parseLong(paramUserId));
|
||||
args.putLong(EXTRA_LIST_ID, NumberUtils.toLong(paramListId, -1));
|
||||
args.putLong(EXTRA_USER_ID, NumberUtils.toLong(paramUserId, -1));
|
||||
args.putString(EXTRA_SCREEN_NAME, paramScreenName);
|
||||
args.putString(EXTRA_LIST_NAME, paramListName);
|
||||
break;
|
||||
@ -1000,7 +1001,7 @@ public final class Utils implements Constants {
|
||||
args.putString(EXTRA_SCREEN_NAME, paramScreenName);
|
||||
}
|
||||
if (!args.containsKey(EXTRA_USER_ID)) {
|
||||
args.putLong(EXTRA_USER_ID, ParseUtils.parseLong(paramUserId));
|
||||
args.putLong(EXTRA_USER_ID, NumberUtils.toLong(paramUserId, -1));
|
||||
}
|
||||
if (isEmpty(paramScreenName) && isEmpty(paramUserId)) return null;
|
||||
break;
|
||||
@ -1014,8 +1015,8 @@ public final class Utils implements Constants {
|
||||
if (isEmpty(paramListId)
|
||||
&& (isEmpty(paramListName) || isEmpty(paramScreenName) && isEmpty(paramUserId)))
|
||||
return null;
|
||||
args.putLong(EXTRA_LIST_ID, ParseUtils.parseLong(paramListId));
|
||||
args.putLong(EXTRA_USER_ID, ParseUtils.parseLong(paramUserId));
|
||||
args.putLong(EXTRA_LIST_ID, NumberUtils.toLong(paramListId, -1));
|
||||
args.putLong(EXTRA_USER_ID, NumberUtils.toLong(paramUserId, -1));
|
||||
args.putString(EXTRA_SCREEN_NAME, paramScreenName);
|
||||
args.putString(EXTRA_LIST_NAME, paramListName);
|
||||
break;
|
||||
@ -1029,8 +1030,8 @@ public final class Utils implements Constants {
|
||||
if (isEmpty(paramListId)
|
||||
&& (isEmpty(paramListName) || isEmpty(paramScreenName) && isEmpty(paramUserId)))
|
||||
return null;
|
||||
args.putLong(EXTRA_LIST_ID, ParseUtils.parseLong(paramListId));
|
||||
args.putLong(EXTRA_USER_ID, ParseUtils.parseLong(paramUserId));
|
||||
args.putLong(EXTRA_LIST_ID, NumberUtils.toLong(paramListId, -1));
|
||||
args.putLong(EXTRA_USER_ID, NumberUtils.toLong(paramUserId, -1));
|
||||
args.putString(EXTRA_SCREEN_NAME, paramScreenName);
|
||||
args.putString(EXTRA_LIST_NAME, paramListName);
|
||||
break;
|
||||
@ -1044,8 +1045,8 @@ public final class Utils implements Constants {
|
||||
if (isEmpty(paramListId)
|
||||
&& (isEmpty(paramListName) || isEmpty(paramScreenName) && isEmpty(paramUserId)))
|
||||
return null;
|
||||
args.putLong(EXTRA_LIST_ID, ParseUtils.parseLong(paramListId));
|
||||
args.putLong(EXTRA_USER_ID, ParseUtils.parseLong(paramUserId));
|
||||
args.putLong(EXTRA_LIST_ID, NumberUtils.toLong(paramListId, -1));
|
||||
args.putLong(EXTRA_USER_ID, NumberUtils.toLong(paramUserId, -1));
|
||||
args.putString(EXTRA_SCREEN_NAME, paramScreenName);
|
||||
args.putString(EXTRA_LIST_NAME, paramListName);
|
||||
break;
|
||||
@ -1079,7 +1080,7 @@ public final class Utils implements Constants {
|
||||
fragment = new StatusRetweetersListFragment();
|
||||
if (!args.containsKey(EXTRA_STATUS_ID)) {
|
||||
final String paramStatusId = uri.getQueryParameter(QUERY_PARAM_STATUS_ID);
|
||||
args.putLong(EXTRA_STATUS_ID, ParseUtils.parseLong(paramStatusId));
|
||||
args.putLong(EXTRA_STATUS_ID, NumberUtils.toLong(paramStatusId, -1));
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -1087,7 +1088,7 @@ public final class Utils implements Constants {
|
||||
fragment = new StatusFavoritersListFragment();
|
||||
if (!args.containsKey(EXTRA_STATUS_ID)) {
|
||||
final String paramStatusId = uri.getQueryParameter(QUERY_PARAM_STATUS_ID);
|
||||
args.putLong(EXTRA_STATUS_ID, ParseUtils.parseLong(paramStatusId));
|
||||
args.putLong(EXTRA_STATUS_ID, NumberUtils.toLong(paramStatusId, -1));
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -1095,7 +1096,7 @@ public final class Utils implements Constants {
|
||||
fragment = new StatusRepliesListFragment();
|
||||
if (!args.containsKey(EXTRA_STATUS_ID)) {
|
||||
final String paramStatusId = uri.getQueryParameter(QUERY_PARAM_STATUS_ID);
|
||||
args.putLong(EXTRA_STATUS_ID, ParseUtils.parseLong(paramStatusId));
|
||||
args.putLong(EXTRA_STATUS_ID, NumberUtils.toLong(paramStatusId, -1));
|
||||
}
|
||||
if (!args.containsKey(EXTRA_SCREEN_NAME)) {
|
||||
final String paramScreenName = uri.getQueryParameter(QUERY_PARAM_SCREEN_NAME);
|
||||
@ -1120,7 +1121,7 @@ public final class Utils implements Constants {
|
||||
}
|
||||
final String paramAccountId = uri.getQueryParameter(QUERY_PARAM_ACCOUNT_ID);
|
||||
if (paramAccountId != null) {
|
||||
args.putLong(EXTRA_ACCOUNT_ID, ParseUtils.parseLong(paramAccountId));
|
||||
args.putLong(EXTRA_ACCOUNT_ID, NumberUtils.toLong(paramAccountId, -1));
|
||||
} else {
|
||||
final String paramAccountName = uri.getQueryParameter(QUERY_PARAM_ACCOUNT_NAME);
|
||||
if (paramAccountName != null) {
|
||||
@ -1954,7 +1955,8 @@ public final class Utils implements Constants {
|
||||
final List<Long> list = new ArrayList<>();
|
||||
for (final Entry<String, ?> entry : manager.getNameEntries()) {
|
||||
final String value = ParseUtils.parseString(entry.getValue());
|
||||
final long key = ParseUtils.parseLong(entry.getKey(), -1);
|
||||
final long def = -1;
|
||||
final long key = NumberUtils.toLong(entry.getKey(), def);
|
||||
if (key == -1 || isEmpty(value)) {
|
||||
continue;
|
||||
}
|
||||
@ -3326,20 +3328,29 @@ public final class Utils implements Constants {
|
||||
}
|
||||
|
||||
public static void setMenuForStatus(final Context context, final SharedPreferencesWrapper preferences,
|
||||
final Menu menu, final ParcelableStatus status) {
|
||||
final Menu menu, final ParcelableStatus status,
|
||||
final AsyncTwitterWrapper twitter) {
|
||||
if (status == null) return;
|
||||
final ParcelableCredentials account = ParcelableAccount.getCredentials(context, status.account_id);
|
||||
setMenuForStatus(context, preferences, menu, status, account);
|
||||
setMenuForStatus(context, preferences, menu, status, account, twitter);
|
||||
}
|
||||
|
||||
public static void setMenuForStatus(final Context context, final SharedPreferencesWrapper preferences,
|
||||
final Menu menu, final ParcelableStatus status, final ParcelableCredentials account) {
|
||||
final Menu menu, final ParcelableStatus status,
|
||||
final ParcelableCredentials account, final AsyncTwitterWrapper twitter) {
|
||||
if (context == null || menu == null || status == null || account == null) return;
|
||||
final Resources resources = context.getResources();
|
||||
final int retweetHighlight = ContextCompat.getColor(context, R.color.highlight_retweet);
|
||||
final int favoriteHighlight = ContextCompat.getColor(context, R.color.highlight_favorite);
|
||||
final int likeHighlight = ContextCompat.getColor(context, R.color.highlight_like);
|
||||
final boolean isMyRetweet = isMyRetweet(status);
|
||||
final boolean isMyRetweet;
|
||||
if (twitter.isCreatingRetweet(status.account_id, status.id)) {
|
||||
isMyRetweet = true;
|
||||
} else if (twitter.isDestroyingStatus(status.account_id, status.id)) {
|
||||
isMyRetweet = false;
|
||||
} else {
|
||||
isMyRetweet = isMyRetweet(status);
|
||||
}
|
||||
final MenuItem delete = menu.findItem(R.id.delete);
|
||||
if (delete != null) {
|
||||
delete.setVisible(isMyStatus(status));
|
||||
@ -3351,6 +3362,14 @@ public final class Utils implements Constants {
|
||||
}
|
||||
final MenuItem favorite = menu.findItem(R.id.favorite);
|
||||
if (favorite != null) {
|
||||
final boolean is_favorite;
|
||||
if (twitter.isCreatingFavorite(status.account_id, status.id)) {
|
||||
is_favorite = true;
|
||||
} else if (twitter.isDestroyingFavorite(status.account_id, status.id)) {
|
||||
is_favorite = false;
|
||||
} else {
|
||||
is_favorite = status.is_favorite;
|
||||
}
|
||||
if (preferences.getBoolean(KEY_I_WANT_MY_STARS_BACK)) {
|
||||
final Drawable oldIcon = favorite.getIcon();
|
||||
if (oldIcon instanceof ActionIconDrawable) {
|
||||
@ -3359,11 +3378,11 @@ public final class Utils implements Constants {
|
||||
} else {
|
||||
favorite.setIcon(R.drawable.ic_action_star);
|
||||
}
|
||||
ActionIconDrawable.setMenuHighlight(favorite, new TwidereMenuInfo(status.is_favorite, favoriteHighlight));
|
||||
favorite.setTitle(status.is_favorite ? R.string.unfavorite : R.string.favorite);
|
||||
ActionIconDrawable.setMenuHighlight(favorite, new TwidereMenuInfo(is_favorite, favoriteHighlight));
|
||||
favorite.setTitle(is_favorite ? R.string.unfavorite : R.string.favorite);
|
||||
} else {
|
||||
ActionIconDrawable.setMenuHighlight(favorite, new TwidereMenuInfo(status.is_favorite, likeHighlight));
|
||||
favorite.setTitle(status.is_favorite ? R.string.undo_like : R.string.like);
|
||||
ActionIconDrawable.setMenuHighlight(favorite, new TwidereMenuInfo(is_favorite, likeHighlight));
|
||||
favorite.setTitle(is_favorite ? R.string.undo_like : R.string.like);
|
||||
}
|
||||
}
|
||||
final MenuItem translate = menu.findItem(R.id.translate);
|
||||
@ -3981,11 +4000,15 @@ public final class Utils implements Constants {
|
||||
public static void logOpenNotificationFromUri(Context context, Uri uri) {
|
||||
if (!uri.getBooleanQueryParameter(QUERY_PARAM_FROM_NOTIFICATION, false)) return;
|
||||
final String type = uri.getQueryParameter(QUERY_PARAM_NOTIFICATION_TYPE);
|
||||
final long accountId = ParseUtils.parseLong(uri.getQueryParameter(QUERY_PARAM_ACCOUNT_ID), -1);
|
||||
final long def3 = -1;
|
||||
final long accountId = NumberUtils.toLong(uri.getQueryParameter(QUERY_PARAM_ACCOUNT_ID), def3);
|
||||
|
||||
final long itemId = ParseUtils.parseLong(UriExtraUtils.getExtra(uri, "item_id"), -1);
|
||||
final long itemUserId = ParseUtils.parseLong(UriExtraUtils.getExtra(uri, "item_user_id"), -1);
|
||||
final long timestamp = ParseUtils.parseLong(uri.getQueryParameter(QUERY_PARAM_TIMESTAMP), -1);
|
||||
final long def2 = -1;
|
||||
final long itemId = NumberUtils.toLong(UriExtraUtils.getExtra(uri, "item_id"), def2);
|
||||
final long def1 = -1;
|
||||
final long itemUserId = NumberUtils.toLong(UriExtraUtils.getExtra(uri, "item_user_id"), def1);
|
||||
final long def = -1;
|
||||
final long timestamp = NumberUtils.toLong(uri.getQueryParameter(QUERY_PARAM_TIMESTAMP), def);
|
||||
if (!NotificationEvent.isSupported(type) || accountId < 0 || itemId < 0 || timestamp < 0)
|
||||
return;
|
||||
final ApplicationModule module = ApplicationModule.get(context);
|
||||
|
@ -0,0 +1,34 @@
|
||||
/*
|
||||
* 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;
|
||||
|
||||
import org.mariotaku.twidere.model.ParcelableStatus;
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 14/12/12.
|
||||
*/
|
||||
public class StatusItemChangedEvent {
|
||||
|
||||
public final ParcelableStatus status;
|
||||
|
||||
public StatusItemChangedEvent(ParcelableStatus status) {
|
||||
this.status = status;
|
||||
}
|
||||
}
|
@ -23,4 +23,5 @@ package org.mariotaku.twidere.util.message;
|
||||
* Created by mariotaku on 14/12/12.
|
||||
*/
|
||||
public class StatusListChangedEvent {
|
||||
|
||||
}
|
||||
|
@ -572,6 +572,17 @@ public class StatusViewHolder extends ViewHolder implements Constants, OnClickLi
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getAccountId(int position) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public ParcelableStatus findStatusById(long accountId, long statusId) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TwidereLinkify getTwidereLinkify() {
|
||||
return linkify;
|
||||
|
Loading…
x
Reference in New Issue
Block a user