new icon is not ready so roll back now

made menu in tweet list clickable again
This commit is contained in:
Mariotaku Lee 2015-03-29 14:44:43 +08:00
parent 6de9da0338
commit 70c8494438
18 changed files with 236 additions and 158 deletions

View File

@ -28,6 +28,7 @@ import android.content.SharedPreferences;
import android.content.res.Resources;
import android.graphics.PorterDuff.Mode;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.FragmentActivity;
import android.text.TextUtils;
import android.view.LayoutInflater;
@ -292,16 +293,17 @@ public class CustomTabEditorActivity extends BaseSupportDialogActivity implement
}
if (!isEditMode()) {
mTabConfiguration = conf;
final boolean has_secondary_field = conf.getSecondaryFieldType() != CustomTabConfiguration.FIELD_TYPE_NONE;
final boolean account_id_none = conf.getAccountRequirement() == CustomTabConfiguration.ACCOUNT_NONE;
mAccountContainer.setVisibility(account_id_none ? View.GONE : View.VISIBLE);
mSecondaryFieldContainer.setVisibility(has_secondary_field ? View.VISIBLE : View.GONE);
final boolean hasSecondaryField = conf.getSecondaryFieldType() != CustomTabConfiguration.FIELD_TYPE_NONE;
final boolean accountIdNone = conf.getAccountRequirement() == CustomTabConfiguration.ACCOUNT_NONE;
mAccountContainer.setVisibility(accountIdNone ? View.GONE : View.VISIBLE);
mSecondaryFieldContainer.setVisibility(hasSecondaryField ? View.VISIBLE : View.GONE);
final boolean accountIdRequired = conf.getAccountRequirement() == CustomTabConfiguration.ACCOUNT_REQUIRED;
if (!accountIdRequired) {
mAccountsAdapter.add(ParcelableAccount.dummyInstance());
}
final boolean officialKeyOnly = intent.getBooleanExtra(EXTRA_OFFICIAL_KEY_ONLY, false);
mAccountsAdapter.addAll(ParcelableAccount.getAccountsList(this, false, officialKeyOnly));
mAccountsAdapter.setDummyItemText(R.string.activated_accounts);
switch (conf.getSecondaryFieldType()) {
case CustomTabConfiguration.FIELD_TYPE_USER: {
mSecondaryFieldLabel.setText(R.string.user);
@ -425,6 +427,7 @@ public class CustomTabEditorActivity extends BaseSupportDialogActivity implement
}
}
@NonNull
@Override
public Dialog onCreateDialog(final Bundle savedInstanceState) {
final Bundle args = getArguments();

View File

@ -37,6 +37,8 @@ public class AccountsSpinnerAdapter extends ArrayAdapter<ParcelableAccount> {
private final MediaLoaderWrapper mImageLoader;
private final boolean mDisplayProfileImage;
private final Context mContext;
private String mDummyItemText;
public AccountsSpinnerAdapter(final Context context) {
this(context, R.layout.list_item_user);
@ -44,6 +46,7 @@ public class AccountsSpinnerAdapter extends ArrayAdapter<ParcelableAccount> {
public AccountsSpinnerAdapter(final Context context, int itemViewResource) {
super(context, itemViewResource);
mContext = context;
mImageLoader = TwidereApplication.getInstance(context).getImageLoaderWrapper();
mDisplayProfileImage = context.getSharedPreferences(DirectMessagesConversationFragment.SHARED_PREFERENCES_NAME,
Context.MODE_PRIVATE).getBoolean(DirectMessagesConversationFragment.KEY_DISPLAY_PROFILE_IMAGE, true);
@ -99,8 +102,18 @@ public class AccountsSpinnerAdapter extends ArrayAdapter<ParcelableAccount> {
}
}
} else if (text1 != null) {
text1.setText(R.string.none);
text1.setText(mDummyItemText);
}
}
public void setDummyItemText(int textRes) {
setDummyItemText(mContext.getString(textRes));
}
public void setDummyItemText(String text) {
mDummyItemText = text;
notifyDataSetChanged();
}
}

View File

@ -15,10 +15,12 @@ import android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener;
import android.support.v7.widget.FixedLinearLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.PopupMenu;
import android.support.v7.widget.PopupMenu.OnMenuItemClickListener;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.RecyclerView.OnScrollListener;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewConfiguration;
import android.view.ViewGroup;
@ -73,6 +75,15 @@ public abstract class AbsStatusesFragment<Data> extends BaseSupportFragment impl
private int mControlBarOffsetPixels;
private PopupMenu mPopupMenu;
private ReadStateManager mReadStateManager;
private ParcelableStatus mSelectedStatus;
private OnMenuItemClickListener mOnStatusMenuItemClickListener = new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
final ParcelableStatus status = mSelectedStatus;
if (status == null) return false;
return Utils.handleMenuItemClick(getActivity(), getFragmentManager(), getTwitterWrapper(), status, item);
}
};
protected AbsStatusesFragment() {
mStatusesBusCallback = createMessageBusCallback();
@ -372,10 +383,13 @@ public abstract class AbsStatusesFragment<Data> extends BaseSupportFragment impl
}
final PopupMenu popupMenu = new PopupMenu(mAdapter.getContext(), menuView,
Gravity.NO_GRAVITY, R.attr.actionOverflowMenuStyle, 0);
popupMenu.setOnMenuItemClickListener(mOnStatusMenuItemClickListener);
popupMenu.inflate(R.menu.action_status);
setMenuForStatus(mAdapter.getContext(), popupMenu.getMenu(), mAdapter.getStatus(position));
final ParcelableStatus status = mAdapter.getStatus(position);
setMenuForStatus(mAdapter.getContext(), popupMenu.getMenu(), status);
popupMenu.show();
mPopupMenu = popupMenu;
mSelectedStatus = status;
}
@Override

View File

@ -133,7 +133,7 @@ public abstract class CursorStatusesFragment extends AbsStatusesFragment<Cursor>
mContentObserver = new ContentObserver(new Handler()) {
@Override
public void onChange(boolean selfChange) {
// reloadStatuses();
reloadStatuses();
}
};
cr.registerContentObserver(Accounts.CONTENT_URI, true, mContentObserver);

View File

@ -20,7 +20,6 @@
package org.mariotaku.twidere.fragment.support;
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
@ -28,7 +27,6 @@ import android.content.res.Resources;
import android.graphics.Color;
import android.graphics.Point;
import android.graphics.Rect;
import android.net.Uri;
import android.nfc.NdefMessage;
import android.nfc.NdefRecord;
import android.nfc.NfcAdapter.CreateNdefMessageCallback;
@ -52,7 +50,6 @@ import android.support.v7.widget.RecyclerView.LayoutParams;
import android.support.v7.widget.RecyclerView.ViewHolder;
import android.text.Html;
import android.text.method.LinkMovementMethod;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MenuInflater;
import android.view.MenuItem;
@ -64,9 +61,7 @@ import android.widget.LinearLayout;
import android.widget.Space;
import android.widget.TextView;
import org.apache.http.protocol.HTTP;
import org.mariotaku.twidere.R;
import org.mariotaku.twidere.activity.support.AccountSelectorActivity;
import org.mariotaku.twidere.activity.support.ColorPickerDialogActivity;
import org.mariotaku.twidere.adapter.AbsStatusesAdapter.StatusAdapterListener;
import org.mariotaku.twidere.adapter.decorator.DividerItemDecoration;
@ -85,7 +80,6 @@ import org.mariotaku.twidere.task.TwidereAsyncTask;
import org.mariotaku.twidere.task.TwidereAsyncTask.Status;
import org.mariotaku.twidere.text.method.StatusContentMovementMethod;
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
import org.mariotaku.twidere.util.ClipboardUtils;
import org.mariotaku.twidere.util.CompareUtils;
import org.mariotaku.twidere.util.ImageLoadingHandler;
import org.mariotaku.twidere.util.LinkCreator;
@ -104,8 +98,6 @@ import org.mariotaku.twidere.view.holder.GapViewHolder;
import org.mariotaku.twidere.view.holder.LoadIndicatorViewHolder;
import org.mariotaku.twidere.view.holder.StatusViewHolder;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
@ -116,7 +108,6 @@ import twitter4j.TwitterException;
import static android.text.TextUtils.isEmpty;
import static org.mariotaku.twidere.util.UserColorNameUtils.clearUserColor;
import static org.mariotaku.twidere.util.UserColorNameUtils.clearUserNickname;
import static org.mariotaku.twidere.util.UserColorNameUtils.getUserColor;
import static org.mariotaku.twidere.util.UserColorNameUtils.getUserNickname;
import static org.mariotaku.twidere.util.UserColorNameUtils.setUserColor;
@ -312,9 +303,13 @@ public class StatusFragment extends BaseSupportFragment
Utils.openMediaDirectly(getActivity(), accountId, status, media, status.media);
//spice
SpiceProfilingUtil.log(getActivity(),
status.id + ",Clicked," + accountId + "," + status.user_id + "," + status.text_plain.length() + "," + media.media_url + "," + TypeMappingUtil.getMediaType(media.type) + "," + status.timestamp);
status.id + ",Clicked," + accountId + "," + status.user_id + ","
+ status.text_plain.length() + "," + media.media_url + ","
+ TypeMappingUtil.getMediaType(media.type) + "," + status.timestamp);
SpiceProfilingUtil.profile(getActivity(), accountId,
status.id + ",Clicked," + accountId + "," + status.user_id + "," + status.text_plain.length() + "," + media.media_url + "," + TypeMappingUtil.getMediaType(media.type) + "," + status.timestamp);
status.id + ",Clicked," + accountId + "," + status.user_id + ","
+ status.text_plain.length() + "," + media.media_url + ","
+ TypeMappingUtil.getMediaType(media.type) + "," + status.timestamp);
//end
}
@ -384,28 +379,38 @@ public class StatusFragment extends BaseSupportFragment
//spice
if (status.media == null) {
SpiceProfilingUtil.profile(getActivity(), status.account_id,
status.id + ",Words," + status.account_id + "," + status.user_id + "," + status.reply_count + "," + status.retweet_count + "," + status.favorite_count
status.id + ",Words," + status.account_id + "," + status.user_id + "," + status.reply_count
+ "," + status.retweet_count + "," + status.favorite_count
+ "," + status.text_plain.length() + "," + status.timestamp);
SpiceProfilingUtil.log(getActivity(), status.id + ",Words," + status.account_id + "," + status.user_id + "," + status.reply_count + "," + status.retweet_count + "," + status.favorite_count
SpiceProfilingUtil.log(getActivity(), status.id + ",Words," + status.account_id + "," + status.user_id
+ "," + status.reply_count + "," + status.retweet_count + "," + status.favorite_count
+ "," + status.text_plain.length() + "," + status.timestamp);
} else {
for (final ParcelableMedia spiceMedia : status.media) {
if (TypeMappingUtil.getMediaType(spiceMedia.type).equals("image")) {
SpiceProfilingUtil.profile(getActivity(), status.account_id,
status.id + ",PreviewM," + status.account_id + "," + status.user_id + "," + status.reply_count + "," + status.retweet_count + "," + status.favorite_count
+ "," + status.text_plain.length() + "," + TypeMappingUtil.getMediaType(spiceMedia.type) + "," + spiceMedia.media_url + "," + spiceMedia.width + "x" + spiceMedia.height + ","
+ status.timestamp);
status.id + ",PreviewM," + status.account_id + "," + status.user_id
+ "," + status.reply_count + "," + status.retweet_count + "," + status.favorite_count
+ "," + status.text_plain.length() + "," + TypeMappingUtil.getMediaType(spiceMedia.type)
+ "," + spiceMedia.media_url + "," + spiceMedia.width + "x" + spiceMedia.height
+ "," + status.timestamp);
SpiceProfilingUtil.log(getActivity(),
status.id + ",PreviewM," + status.account_id + "," + status.user_id + "," + status.reply_count + "," + status.retweet_count + "," + status.favorite_count
+ "," + status.text_plain.length() + "," + TypeMappingUtil.getMediaType(spiceMedia.type) + "," + spiceMedia.media_url + "," + spiceMedia.width + "x" + spiceMedia.height + ","
+ status.timestamp);
status.id + ",PreviewM," + status.account_id + "," + status.user_id
+ "," + status.reply_count + "," + status.retweet_count + "," + status.favorite_count
+ "," + status.text_plain.length() + "," + TypeMappingUtil.getMediaType(spiceMedia.type)
+ "," + spiceMedia.media_url + "," + spiceMedia.width + "x" + spiceMedia.height
+ "," + status.timestamp);
} else {
SpiceProfilingUtil.profile(getActivity(), status.account_id,
status.id + ",PreviewO," + status.account_id + "," + status.user_id + "," + status.reply_count + "," + status.retweet_count + "," + status.favorite_count
+ "," + status.text_plain.length() + "," + TypeMappingUtil.getMediaType(spiceMedia.type) + "," + spiceMedia.media_url + "," + status.timestamp);
status.id + ",PreviewO," + status.account_id + "," + status.user_id
+ "," + status.reply_count + "," + status.retweet_count + "," + status.favorite_count
+ "," + status.text_plain.length() + "," + TypeMappingUtil.getMediaType(spiceMedia.type)
+ "," + spiceMedia.media_url + "," + status.timestamp);
SpiceProfilingUtil.log(getActivity(),
status.id + ",PreviewO," + status.account_id + "," + status.user_id + "," + status.reply_count + "," + status.retweet_count + "," + status.favorite_count
+ "," + status.text_plain.length() + "," + TypeMappingUtil.getMediaType(spiceMedia.type) + "," + spiceMedia.media_url + "," + status.timestamp);
status.id + ",PreviewO," + status.account_id + "," + status.user_id
+ "," + status.reply_count + "," + status.retweet_count + "," + status.favorite_count
+ "," + status.text_plain.length() + "," + TypeMappingUtil.getMediaType(spiceMedia.type)
+ "," + spiceMedia.media_url + "," + status.timestamp);
}
}
}
@ -494,6 +499,15 @@ public class StatusFragment extends BaseSupportFragment
}
}
public void addConversation(ParcelableStatus status, int position) {
if (mConversation == null) {
mConversation = new ArrayList<>();
}
mConversation.add(position, status);
notifyDataSetChanged();
updateItemDecoration();
}
public int findPositionById(long itemId) {
for (int i = 0, j = getItemCount(); i < j; i++) {
if (getItemId(i) == itemId) return i;
@ -870,11 +884,17 @@ public class StatusFragment extends BaseSupportFragment
@Override
protected void onProgressUpdate(ParcelableStatus... values) {
super.onProgressUpdate(values);
for (ParcelableStatus status : values) {
// fragment.addConversation(status, 0);
}
}
}
private void addConversation(ParcelableStatus status, int position) {
mStatusAdapter.addConversation(status, position);
}
private static class SpaceViewHolder extends ViewHolder {
public SpaceViewHolder(View itemView) {
@ -981,127 +1001,8 @@ public class StatusFragment extends BaseSupportFragment
if (status == null || fragment == null) return false;
final AsyncTwitterWrapper twitter = fragment.getTwitterWrapper();
final FragmentActivity activity = fragment.getActivity();
switch (item.getItemId()) {
case MENU_COPY: {
if (ClipboardUtils.setText(activity, status.text_plain)) {
showOkMessage(activity, R.string.text_copied, false);
}
break;
}
case MENU_RETWEET: {
if (isMyRetweet(status)) {
twitter.cancelRetweetAsync(status.account_id, status.id, status.my_retweet_id);
} else {
twitter.retweetStatusAsync(status.account_id, status.id);
}
break;
}
case MENU_QUOTE: {
final Intent intent = new Intent(INTENT_ACTION_QUOTE);
intent.putExtra(EXTRA_STATUS, status);
fragment.startActivity(intent);
break;
}
case MENU_REPLY: {
final Intent intent = new Intent(INTENT_ACTION_REPLY);
intent.putExtra(EXTRA_STATUS, status);
fragment.startActivity(intent);
break;
}
case MENU_FAVORITE: {
if (status.is_favorite) {
twitter.destroyFavoriteAsync(status.account_id, status.id);
//spice
SpiceProfilingUtil.profile(adapter.getContext(),
status.account_id, status.id + ",Unfavor,"
+ status.account_id + "," + status.user_id + "," + status.reply_count + "," + status.retweet_count + "," + status.favorite_count + "," + status.timestamp);
SpiceProfilingUtil.log(adapter.getContext(), status.id + ",Unfavor,"
+ status.account_id + "," + status.user_id + "," + status.reply_count + "," + status.retweet_count + "," + status.favorite_count + "," + status.timestamp);
//end
} else {
twitter.createFavoriteAsync(status.account_id, status.id);
//spice
SpiceProfilingUtil.profile(adapter.getContext(),
status.account_id, status.id + ",Favor,"
+ status.account_id + "," + status.user_id + "," + status.reply_count + "," + status.retweet_count + "," + status.favorite_count + "," + status.timestamp);
SpiceProfilingUtil.log(adapter.getContext(), status.id + ",Favor,"
+ status.account_id + "," + status.user_id + "," + status.reply_count + "," + status.retweet_count + "," + status.favorite_count + "," + status.timestamp);
//end
}
break;
}
case MENU_DELETE: {
DestroyStatusDialogFragment.show(fragment.getFragmentManager(), status);
break;
}
case MENU_ADD_TO_FILTER: {
AddStatusFilterDialogFragment.show(fragment.getFragmentManager(), status);
break;
}
case MENU_SET_COLOR: {
final Intent intent = new Intent(activity, ColorPickerDialogActivity.class);
final int color = getUserColor(activity, status.user_id, true);
if (color != 0) {
intent.putExtra(EXTRA_COLOR, color);
}
intent.putExtra(EXTRA_CLEAR_BUTTON, color != 0);
intent.putExtra(EXTRA_ALPHA_SLIDER, false);
fragment.startActivityForResult(intent, REQUEST_SET_COLOR);
break;
}
case MENU_CLEAR_NICKNAME: {
clearUserNickname(activity, status.user_id);
adapter.notifyDataSetChanged();
break;
}
case MENU_SET_NICKNAME: {
final String nick = getUserNickname(activity, status.user_id, true);
SetUserNicknameDialogFragment.show(fragment.getFragmentManager(), status.user_id, nick);
break;
}
case MENU_TRANSLATE: {
final ParcelableCredentials account
= ParcelableAccount.getCredentials(activity, status.account_id);
if (Utils.isOfficialCredentials(activity, account)) {
StatusTranslateDialogFragment.show(fragment.getFragmentManager(), status);
} else {
final Resources resources = fragment.getResources();
final Locale locale = resources.getConfiguration().locale;
try {
final String template = "http://translate.google.com/#%s|%s|%s";
final String sourceLang = "auto";
final String targetLang = URLEncoder.encode(locale.getLanguage(), HTTP.UTF_8);
final String text = URLEncoder.encode(status.text_unescaped, HTTP.UTF_8);
final Uri uri = Uri.parse(String.format(Locale.ROOT, template, sourceLang, targetLang, text));
final Intent intent = new Intent(Intent.ACTION_VIEW, uri);
intent.addCategory(Intent.CATEGORY_BROWSABLE);
fragment.startActivity(intent);
} catch (UnsupportedEncodingException ignore) {
}
}
break;
}
case MENU_OPEN_WITH_ACCOUNT: {
final Intent intent = new Intent(INTENT_ACTION_SELECT_ACCOUNT);
intent.setClass(activity, AccountSelectorActivity.class);
intent.putExtra(EXTRA_SINGLE_SELECTION, true);
fragment.startActivityForResult(intent, REQUEST_SELECT_ACCOUNT);
break;
}
default: {
if (item.getIntent() != null) {
try {
fragment.startActivity(item.getIntent());
} catch (final ActivityNotFoundException e) {
Log.w(LOGTAG, e);
return false;
}
}
break;
}
}
return true;
final FragmentManager fm = fragment.getFragmentManager();
return Utils.handleMenuItemClick(activity, fm, twitter, status, item);
}
public void showStatus(ParcelableStatus status) {

View File

@ -22,6 +22,7 @@ package org.mariotaku.twidere.util;
import android.annotation.TargetApi;
import android.app.ActionBar;
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
@ -109,6 +110,7 @@ import android.widget.TextView;
import android.widget.Toast;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.http.protocol.HTTP;
import org.json.JSONException;
import org.mariotaku.jsonserializer.JSONSerializer;
import org.mariotaku.querybuilder.AllColumns;
@ -127,21 +129,27 @@ import org.mariotaku.twidere.BuildConfig;
import org.mariotaku.twidere.Constants;
import org.mariotaku.twidere.R;
import org.mariotaku.twidere.activity.CameraCropActivity;
import org.mariotaku.twidere.activity.support.AccountSelectorActivity;
import org.mariotaku.twidere.activity.support.ColorPickerDialogActivity;
import org.mariotaku.twidere.activity.support.MediaViewerActivity;
import org.mariotaku.twidere.adapter.iface.IBaseAdapter;
import org.mariotaku.twidere.adapter.iface.IBaseCardAdapter;
import org.mariotaku.twidere.app.TwidereApplication;
import org.mariotaku.twidere.fragment.iface.IBaseFragment.SystemWindowsInsetsCallback;
import org.mariotaku.twidere.fragment.support.AddStatusFilterDialogFragment;
import org.mariotaku.twidere.fragment.support.DestroyStatusDialogFragment;
import org.mariotaku.twidere.fragment.support.DirectMessagesConversationFragment;
import org.mariotaku.twidere.fragment.support.IncomingFriendshipsFragment;
import org.mariotaku.twidere.fragment.support.MutesUsersListFragment;
import org.mariotaku.twidere.fragment.support.SavedSearchesListFragment;
import org.mariotaku.twidere.fragment.support.SearchFragment;
import org.mariotaku.twidere.fragment.support.SensitiveContentWarningDialogFragment;
import org.mariotaku.twidere.fragment.support.SetUserNicknameDialogFragment;
import org.mariotaku.twidere.fragment.support.StatusFavoritersListFragment;
import org.mariotaku.twidere.fragment.support.StatusFragment;
import org.mariotaku.twidere.fragment.support.StatusRepliesListFragment;
import org.mariotaku.twidere.fragment.support.StatusRetweetersListFragment;
import org.mariotaku.twidere.fragment.support.StatusTranslateDialogFragment;
import org.mariotaku.twidere.fragment.support.StatusesListFragment;
import org.mariotaku.twidere.fragment.support.UserBlocksListFragment;
import org.mariotaku.twidere.fragment.support.UserFavoritesFragment;
@ -208,6 +216,7 @@ import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.SocketAddress;
@ -229,6 +238,7 @@ import java.util.zip.CRC32;
import javax.net.ssl.SSLException;
import edu.tsinghua.spice.SpiceService;
import edu.tsinghua.spice.Utilies.SpiceProfilingUtil;
import edu.ucdavis.earlybird.UCDService;
import twitter4j.DirectMessage;
import twitter4j.RateLimitStatus;
@ -259,6 +269,9 @@ import static org.mariotaku.twidere.provider.TwidereDataStore.DIRECT_MESSAGES_UR
import static org.mariotaku.twidere.provider.TwidereDataStore.STATUSES_URIS;
import static org.mariotaku.twidere.util.TwidereLinkify.PATTERN_TWITTER_PROFILE_IMAGES;
import static org.mariotaku.twidere.util.TwidereLinkify.TWITTER_PROFILE_IMAGES_AVAILABLE_SIZES;
import static org.mariotaku.twidere.util.UserColorNameUtils.clearUserNickname;
import static org.mariotaku.twidere.util.UserColorNameUtils.getUserColor;
import static org.mariotaku.twidere.util.UserColorNameUtils.getUserNickname;
@SuppressWarnings("unused")
public final class Utils implements Constants, TwitterConstants {
@ -3874,6 +3887,136 @@ public final class Utils implements Constants, TwitterConstants {
return pm.getDrawable(info.packageName, info.metaData.getInt(key), info.applicationInfo);
}
public static boolean handleMenuItemClick(FragmentActivity activity, FragmentManager fm, AsyncTwitterWrapper twitter, ParcelableStatus status, MenuItem item) {
switch (item.getItemId()) {
case MENU_COPY: {
if (ClipboardUtils.setText(activity, status.text_plain)) {
showOkMessage(activity, R.string.text_copied, false);
}
break;
}
case MENU_RETWEET: {
if (isMyRetweet(status)) {
twitter.cancelRetweetAsync(status.account_id, status.id, status.my_retweet_id);
} else {
twitter.retweetStatusAsync(status.account_id, status.id);
}
break;
}
case MENU_QUOTE: {
final Intent intent = new Intent(INTENT_ACTION_QUOTE);
intent.putExtra(EXTRA_STATUS, status);
activity.startActivity(intent);
break;
}
case MENU_REPLY: {
final Intent intent = new Intent(INTENT_ACTION_REPLY);
intent.putExtra(EXTRA_STATUS, status);
activity.startActivity(intent);
break;
}
case MENU_FAVORITE: {
if (status.is_favorite) {
twitter.destroyFavoriteAsync(status.account_id, status.id);
//spice
SpiceProfilingUtil.profile(activity,
status.account_id, status.id + ",Unfavor," + status.account_id
+ "," + status.user_id + "," + status.reply_count
+ "," + status.retweet_count + "," + status.favorite_count
+ "," + status.timestamp);
SpiceProfilingUtil.log(activity, status.id + ",Unfavor," + status.account_id
+ "," + status.user_id + "," + status.reply_count
+ "," + status.retweet_count + "," + status.favorite_count
+ "," + status.timestamp);
//end
} else {
twitter.createFavoriteAsync(status.account_id, status.id);
//spice
SpiceProfilingUtil.profile(activity,
status.account_id, status.id + ",Favor,"
+ status.account_id + "," + status.user_id + "," + status.reply_count
+ "," + status.retweet_count + "," + status.favorite_count
+ "," + status.timestamp);
SpiceProfilingUtil.log(activity, status.id + ",Favor,"
+ status.account_id + "," + status.user_id + "," + status.reply_count
+ "," + status.retweet_count + "," + status.favorite_count + "," + status.timestamp);
//end
}
break;
}
case MENU_DELETE: {
DestroyStatusDialogFragment.show(fm, status);
break;
}
case MENU_ADD_TO_FILTER: {
AddStatusFilterDialogFragment.show(fm, status);
break;
}
case MENU_SET_COLOR: {
final Intent intent = new Intent(activity, ColorPickerDialogActivity.class);
final int color = getUserColor(activity, status.user_id, true);
if (color != 0) {
intent.putExtra(EXTRA_COLOR, color);
}
intent.putExtra(EXTRA_CLEAR_BUTTON, color != 0);
intent.putExtra(EXTRA_ALPHA_SLIDER, false);
activity.startActivityForResult(intent, REQUEST_SET_COLOR);
break;
}
case MENU_CLEAR_NICKNAME: {
clearUserNickname(activity, status.user_id);
break;
}
case MENU_SET_NICKNAME: {
final String nick = getUserNickname(activity, status.user_id, true);
SetUserNicknameDialogFragment.show(fm, status.user_id, nick);
break;
}
case MENU_TRANSLATE: {
final ParcelableCredentials account
= ParcelableAccount.getCredentials(activity, status.account_id);
if (isOfficialCredentials(activity, account)) {
StatusTranslateDialogFragment.show(fm, status);
} else {
final Resources resources = activity.getResources();
final Locale locale = resources.getConfiguration().locale;
try {
final String template = "http://translate.google.com/#%s|%s|%s";
final String sourceLang = "auto";
final String targetLang = URLEncoder.encode(locale.getLanguage(), HTTP.UTF_8);
final String text = URLEncoder.encode(status.text_unescaped, HTTP.UTF_8);
final Uri uri = Uri.parse(String.format(Locale.ROOT, template, sourceLang, targetLang, text));
final Intent intent = new Intent(Intent.ACTION_VIEW, uri);
intent.addCategory(Intent.CATEGORY_BROWSABLE);
activity.startActivity(intent);
} catch (UnsupportedEncodingException ignore) {
}
}
break;
}
case MENU_OPEN_WITH_ACCOUNT: {
final Intent intent = new Intent(INTENT_ACTION_SELECT_ACCOUNT);
intent.setClass(activity, AccountSelectorActivity.class);
intent.putExtra(EXTRA_SINGLE_SELECTION, true);
activity.startActivityForResult(intent, REQUEST_SELECT_ACCOUNT);
break;
}
default: {
if (item.getIntent() != null) {
try {
activity.startActivity(item.getIntent());
} catch (final ActivityNotFoundException e) {
Log.w(LOGTAG, e);
return false;
}
}
break;
}
}
return true;
}
private static boolean isErrorCodeMessageSupported(final TwitterException te) {
if (te == null) return false;
return StatusCodeMessageUtils.containsHttpStatus(te.getStatusCode())

View File

@ -27,6 +27,7 @@
<com.sothree.slidinguppanel.SlidingUpPanelLayout
android:id="@+id/activities_drawer"
android:layout_width="match_parent"
android:visibility="gone"
android:layout_height="match_parent"
android:gravity="bottom"
app:umanoDragView="@+id/activities_header_title"

View File

@ -79,6 +79,8 @@
android:id="@+id/profile_type"
android:layout_width="@dimen/icon_size_profile_type_detail"
android:layout_height="@dimen/icon_size_profile_type_detail"
android:layout_marginRight="@dimen/element_spacing_minus_small"
android:layout_marginBottom="@dimen/element_spacing_minus_small"
android:layout_alignBottom="@id/profile_image"
android:layout_alignRight="@id/profile_image"
android:scaleType="fitCenter"/>

View File

@ -124,6 +124,8 @@
style="@style/Widget.ProfileType"
android:layout_width="@dimen/icon_size_profile_type_user_profile"
android:layout_height="@dimen/icon_size_profile_type_user_profile"
android:layout_marginRight="@dimen/element_spacing_minus_msmall"
android:layout_marginBottom="@dimen/element_spacing_minus_msmall"
android:layout_alignBottom="@id/profile_image"
android:layout_alignRight="@id/profile_image"
android:scaleType="fitCenter"/>

BIN
twidere/src/main/res/mipmap-hdpi/ic_launcher.png Executable file → Normal file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

BIN
twidere/src/main/res/mipmap-mdpi/ic_launcher.png Executable file → Normal file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

BIN
twidere/src/main/res/mipmap-xhdpi/ic_launcher.png Executable file → Normal file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 7.6 KiB

BIN
twidere/src/main/res/mipmap-xxhdpi/ic_launcher.png Executable file → Normal file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

After

Width:  |  Height:  |  Size: 15 KiB

BIN
twidere/src/main/res/mipmap-xxxhdpi/ic_launcher.png Executable file → Normal file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.3 KiB

After

Width:  |  Height:  |  Size: 22 KiB

View File

@ -84,7 +84,7 @@
<dimen name="icon_size_profile_type">16dp</dimen>
<dimen name="icon_size_profile_type_detail">22dp</dimen>
<dimen name="icon_size_profile_type_user_profile">28dp</dimen>
<dimen name="icon_size_profile_type_user_profile">26dp</dimen>
<dimen name="icon_size_activity_type">16dp</dimen>
<!-- Elevation values -->

View File

@ -738,5 +738,6 @@
<string name="from_name_and_name">From <xliff:g id="name">%1$s</xliff:g> and <xliff:g id="name">%2$s</xliff:g></string>
<string name="from_name_and_N_others">From <xliff:g id="name">%1$s</xliff:g> and <xliff:g id="name">%2$d</xliff:g> others</string>
<string name="projects_we_took_part">Projects we took part</string>
<string name="activated_accounts">Activated accounts</string>
</resources>

View File

@ -41,11 +41,9 @@
android:summary="@string/pay_via_paypal_summary"
android:title="@string/pay_via_paypal">
</Preference>
<Preference android:title="@string/donate_via_alipay">
<intent
android:action="android.intent.action.VIEW"
android:data="https://me.alipay.com/mariotaku"/>
</Preference>
<Preference
android:title="@string/donate_via_alipay"
android:summary="mariotaku.lee@gmail.com"/>
<Preference
android:summary="@string/contributors_list_summary"
android:title="@string/donators">

BIN
twidere/web_hi_res_512.png Executable file → Normal file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 95 KiB