mirror of
https://github.com/TwidereProject/Twidere-Android
synced 2025-02-17 04:00:48 +01:00
added repost for fanfou
This commit is contained in:
parent
d945dfca01
commit
5acd195ba0
@ -37,6 +37,10 @@ public class StatusUpdate extends SimpleValueMap {
|
||||
put("in_reply_to_status_id", inReplyToStatusId);
|
||||
}
|
||||
|
||||
public void setRepostStatusId(final String repostStatusId) {
|
||||
put("repost_status_id", repostStatusId);
|
||||
}
|
||||
|
||||
public void setLocation(final GeoLocation location) {
|
||||
remove("lat");
|
||||
remove("long");
|
||||
|
@ -51,9 +51,12 @@ public class ParcelableStatusUpdate implements Parcelable {
|
||||
@JsonField(name = "in_reply_to_status")
|
||||
@ParcelableThisPlease
|
||||
public ParcelableStatus in_reply_to_status;
|
||||
@JsonField(name = "boolean")
|
||||
@JsonField(name = "is_possibly_sensitive")
|
||||
@ParcelableThisPlease
|
||||
public boolean is_possibly_sensitive;
|
||||
@JsonField(name = "repost_status_id")
|
||||
@ParcelableThisPlease
|
||||
public String repost_status_id;
|
||||
|
||||
public ParcelableStatusUpdate() {
|
||||
}
|
||||
@ -67,6 +70,7 @@ public class ParcelableStatusUpdate implements Parcelable {
|
||||
", location=" + location +
|
||||
", in_reply_to_status=" + in_reply_to_status +
|
||||
", is_possibly_sensitive=" + is_possibly_sensitive +
|
||||
", repost_status_id='" + repost_status_id + '\'' +
|
||||
'}';
|
||||
}
|
||||
|
||||
|
@ -21,6 +21,9 @@ public class UpdateStatusActionExtra implements ActionExtra {
|
||||
@ParcelableThisPlease
|
||||
@JsonField(name = "is_possibly_sensitive")
|
||||
boolean isPossiblySensitive;
|
||||
@ParcelableThisPlease
|
||||
@JsonField(name = "repost_status_id")
|
||||
String repostStatusId;
|
||||
|
||||
public ParcelableStatus getInReplyToStatus() {
|
||||
return inReplyToStatus;
|
||||
@ -38,6 +41,13 @@ public class UpdateStatusActionExtra implements ActionExtra {
|
||||
this.isPossiblySensitive = isPossiblySensitive;
|
||||
}
|
||||
|
||||
public String isRepostStatusId() {
|
||||
return repostStatusId;
|
||||
}
|
||||
|
||||
public void setRepostStatusId(String repostStatusId) {
|
||||
this.repostStatusId = repostStatusId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int describeContents() {
|
||||
|
@ -40,10 +40,13 @@ import android.view.View;
|
||||
import android.widget.Button;
|
||||
import android.widget.EditText;
|
||||
|
||||
import com.twitter.Validator;
|
||||
|
||||
import org.mariotaku.twidere.Constants;
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.adapter.DummyStatusHolderAdapter;
|
||||
import org.mariotaku.twidere.model.Draft;
|
||||
import org.mariotaku.twidere.model.ParcelableAccount;
|
||||
import org.mariotaku.twidere.model.ParcelableCredentials;
|
||||
import org.mariotaku.twidere.model.ParcelableStatus;
|
||||
import org.mariotaku.twidere.model.ParcelableStatusUpdate;
|
||||
@ -63,37 +66,11 @@ import org.mariotaku.twidere.view.holder.iface.IStatusViewHolder;
|
||||
|
||||
import static org.mariotaku.twidere.util.Utils.isMyRetweet;
|
||||
|
||||
public class RetweetQuoteDialogFragment extends BaseSupportDialogFragment implements
|
||||
Constants, DialogInterface.OnClickListener {
|
||||
public class RetweetQuoteDialogFragment extends BaseSupportDialogFragment implements Constants {
|
||||
|
||||
public static final String FRAGMENT_TAG = "retweet_quote";
|
||||
private PopupMenu mPopupMenu;
|
||||
|
||||
@Override
|
||||
public void onClick(final DialogInterface dialog, final int which) {
|
||||
final ParcelableStatus status = getStatus();
|
||||
if (status == null) return;
|
||||
switch (which) {
|
||||
case DialogInterface.BUTTON_POSITIVE: {
|
||||
final AsyncTwitterWrapper twitter = mTwitterWrapper;
|
||||
if (twitter == null) return;
|
||||
retweetOrQuote(twitter, status);
|
||||
break;
|
||||
}
|
||||
case DialogInterface.BUTTON_NEUTRAL: {
|
||||
final Intent intent = new Intent(INTENT_ACTION_QUOTE);
|
||||
final Menu menu = mPopupMenu.getMenu();
|
||||
final MenuItem quoteOriginalStatus = menu.findItem(R.id.quote_original_status);
|
||||
intent.putExtra(EXTRA_STATUS, status);
|
||||
intent.putExtra(EXTRA_QUOTE_ORIGINAL_STATUS, quoteOriginalStatus.isChecked());
|
||||
startActivity(intent);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public Dialog onCreateDialog(final Bundle savedInstanceState) {
|
||||
@ -113,11 +90,31 @@ public class RetweetQuoteDialogFragment extends BaseSupportDialogFragment implem
|
||||
builder.setView(view);
|
||||
builder.setTitle(R.string.retweet_quote_confirm_title);
|
||||
if (isMyRetweet(status)) {
|
||||
builder.setPositiveButton(R.string.cancel_retweet, this);
|
||||
builder.setPositiveButton(R.string.cancel_retweet, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
mTwitterWrapper.cancelRetweetAsync(status.account_key, status.id, status.my_retweet_id);
|
||||
}
|
||||
});
|
||||
} else if (!status.user_is_protected) {
|
||||
builder.setPositiveButton(R.string.retweet, this);
|
||||
builder.setPositiveButton(R.string.retweet, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
retweetOrQuote(mTwitterWrapper, credentials, status);
|
||||
}
|
||||
});
|
||||
}
|
||||
builder.setNeutralButton(R.string.quote, this);
|
||||
builder.setNeutralButton(R.string.quote, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
final Intent intent = new Intent(INTENT_ACTION_QUOTE);
|
||||
final Menu menu = mPopupMenu.getMenu();
|
||||
final MenuItem quoteOriginalStatus = menu.findItem(R.id.quote_original_status);
|
||||
intent.putExtra(EXTRA_STATUS, status);
|
||||
intent.putExtra(EXTRA_QUOTE_ORIGINAL_STATUS, quoteOriginalStatus.isChecked());
|
||||
startActivity(intent);
|
||||
}
|
||||
});
|
||||
builder.setNegativeButton(android.R.string.cancel, null);
|
||||
|
||||
holder.displayStatus(status, false, true);
|
||||
@ -146,7 +143,7 @@ public class RetweetQuoteDialogFragment extends BaseSupportDialogFragment implem
|
||||
final AsyncTwitterWrapper twitter = mTwitterWrapper;
|
||||
final ParcelableStatus status = getStatus();
|
||||
if (twitter == null || status == null) return false;
|
||||
retweetOrQuote(twitter, status);
|
||||
retweetOrQuote(twitter, credentials, status);
|
||||
dismiss();
|
||||
return true;
|
||||
}
|
||||
@ -159,7 +156,7 @@ public class RetweetQuoteDialogFragment extends BaseSupportDialogFragment implem
|
||||
|
||||
@Override
|
||||
public void onTextChanged(CharSequence s, int start, int before, int count) {
|
||||
updateTextCount(getDialog(), s, status);
|
||||
updateTextCount(getDialog(), s, status, credentials);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -197,24 +194,26 @@ public class RetweetQuoteDialogFragment extends BaseSupportDialogFragment implem
|
||||
dialog.setOnShowListener(new DialogInterface.OnShowListener() {
|
||||
@Override
|
||||
public void onShow(DialogInterface dialog) {
|
||||
updateTextCount(dialog, editComment.getText(), status);
|
||||
updateTextCount(dialog, editComment.getText(), status, credentials);
|
||||
}
|
||||
});
|
||||
return dialog;
|
||||
}
|
||||
|
||||
private void updateTextCount(DialogInterface dialog, CharSequence s, ParcelableStatus status) {
|
||||
private void updateTextCount(DialogInterface dialog, CharSequence s, ParcelableStatus status,
|
||||
ParcelableAccount account) {
|
||||
if (!(dialog instanceof AlertDialog)) return;
|
||||
final AlertDialog alertDialog = (AlertDialog) dialog;
|
||||
final Button positiveButton = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE);
|
||||
if (positiveButton == null) return;
|
||||
if (s.length() > 0) {
|
||||
if (useQuote(s.length() > 0, account)) {
|
||||
positiveButton.setText(R.string.comment);
|
||||
} else {
|
||||
positiveButton.setText(isMyRetweet(status) ? R.string.cancel_retweet : R.string.retweet);
|
||||
}
|
||||
final String statusLink = LinkCreator.getStatusWebLink(status).toString();
|
||||
final StatusTextCountView textCountView = (StatusTextCountView) alertDialog.findViewById(R.id.comment_text_count);
|
||||
assert textCountView != null;
|
||||
textCountView.setTextCount(mValidator.getTweetLength(s + " " + statusLink));
|
||||
}
|
||||
|
||||
@ -224,36 +223,61 @@ public class RetweetQuoteDialogFragment extends BaseSupportDialogFragment implem
|
||||
return args.getParcelable(EXTRA_STATUS);
|
||||
}
|
||||
|
||||
private void retweetOrQuote(AsyncTwitterWrapper twitter, ParcelableStatus status) {
|
||||
private void retweetOrQuote(AsyncTwitterWrapper twitter, ParcelableAccount account, ParcelableStatus status) {
|
||||
final Dialog dialog = getDialog();
|
||||
if (dialog == null) return;
|
||||
final EditText editComment = ((EditText) dialog.findViewById(R.id.edit_comment));
|
||||
if (editComment.length() > 0) {
|
||||
if (useQuote(editComment.length() > 0, account)) {
|
||||
final Menu menu = mPopupMenu.getMenu();
|
||||
final MenuItem quoteOriginalStatus = menu.findItem(R.id.quote_original_status);
|
||||
final MenuItem linkToQuotedStatus = menu.findItem(R.id.link_to_quoted_status);
|
||||
final MenuItem itemQuoteOriginalStatus = menu.findItem(R.id.quote_original_status);
|
||||
final Uri statusLink;
|
||||
if (!status.is_quote || !quoteOriginalStatus.isChecked()) {
|
||||
statusLink = LinkCreator.getTwitterStatusLink(status.user_screen_name, status.id);
|
||||
} else {
|
||||
statusLink = LinkCreator.getTwitterStatusLink(status.quoted_user_screen_name, status.quoted_id);
|
||||
final boolean quoteOriginalStatus = itemQuoteOriginalStatus.isChecked();
|
||||
|
||||
String commentText;
|
||||
final ParcelableStatusUpdate update = new ParcelableStatusUpdate();
|
||||
update.accounts = new ParcelableAccount[]{account};
|
||||
final String editingComment = String.valueOf(editComment.getText());
|
||||
switch (ParcelableAccountUtils.getAccountType(account)) {
|
||||
case ParcelableAccount.Type.FANFOU: {
|
||||
if (!status.is_quote || !quoteOriginalStatus) {
|
||||
commentText = getString(R.string.fanfou_repost_format, editingComment,
|
||||
status.user_screen_name, status.text_plain);
|
||||
update.repost_status_id = status.id;
|
||||
} else {
|
||||
commentText = getString(R.string.fanfou_repost_format, editingComment,
|
||||
status.quoted_user_screen_name, status.quoted_text_plain);
|
||||
update.repost_status_id = status.quoted_id;
|
||||
}
|
||||
if (commentText.length() > Validator.MAX_TWEET_LENGTH) {
|
||||
commentText = commentText.substring(0, Math.max(Validator.MAX_TWEET_LENGTH,
|
||||
editingComment.length()));
|
||||
}
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
if (!status.is_quote || !quoteOriginalStatus) {
|
||||
statusLink = LinkCreator.getTwitterStatusLink(status.user_screen_name,
|
||||
status.id);
|
||||
} else {
|
||||
statusLink = LinkCreator.getTwitterStatusLink(status.quoted_user_screen_name,
|
||||
status.quoted_id);
|
||||
}
|
||||
commentText = editingComment + " " + statusLink;
|
||||
break;
|
||||
}
|
||||
}
|
||||
final String commentText = editComment.getText() + " " + statusLink;
|
||||
ParcelableStatusUpdate update = new ParcelableStatusUpdate();
|
||||
update.text = commentText;
|
||||
update.accounts = ParcelableAccountUtils.getAccounts(getContext(), status.account_key);
|
||||
if (linkToQuotedStatus.isChecked()) {
|
||||
update.in_reply_to_status = status;
|
||||
}
|
||||
update.is_possibly_sensitive = status.is_possibly_sensitive;
|
||||
BackgroundOperationService.updateStatusesAsync(getContext(), Draft.Action.QUOTE, update);
|
||||
} else if (isMyRetweet(status)) {
|
||||
twitter.cancelRetweetAsync(status.account_key, status.id, status.my_retweet_id);
|
||||
} else {
|
||||
twitter.retweetStatusAsync(status.account_key, status.id);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean useQuote(boolean hasComment, ParcelableAccount account) {
|
||||
return hasComment || ParcelableAccount.Type.FANFOU.equals(account.account_type);
|
||||
}
|
||||
|
||||
public static RetweetQuoteDialogFragment show(final FragmentManager fm, final ParcelableStatus status) {
|
||||
final Bundle args = new Bundle();
|
||||
args.putParcelable(EXTRA_STATUS, status);
|
||||
|
@ -368,6 +368,7 @@ public class BackgroundOperationService extends IntentService implements Constan
|
||||
final UpdateStatusActionExtra extra = new UpdateStatusActionExtra();
|
||||
extra.setInReplyToStatus(item.in_reply_to_status);
|
||||
extra.setIsPossiblySensitive(item.is_possibly_sensitive);
|
||||
extra.setRepostStatusId(item.repost_status_id);
|
||||
draft.action_extras = extra;
|
||||
final ContentResolver resolver = getContentResolver();
|
||||
final Uri draftUri = resolver.insert(Drafts.CONTENT_URI, DraftValuesCreator.create(draft));
|
||||
@ -644,6 +645,9 @@ public class BackgroundOperationService extends IntentService implements Constan
|
||||
if (statusUpdate.in_reply_to_status != null) {
|
||||
status.inReplyToStatusId(statusUpdate.in_reply_to_status.id);
|
||||
}
|
||||
if (statusUpdate.repost_status_id != null) {
|
||||
status.setRepostStatusId(statusUpdate.repost_status_id);
|
||||
}
|
||||
if (statusUpdate.location != null) {
|
||||
status.location(ParcelableLocationUtils.toGeoLocation(statusUpdate.location));
|
||||
}
|
||||
|
@ -106,7 +106,7 @@ public abstract class GetActivitiesTask extends AbstractTask<RefreshTaskParam, O
|
||||
final ResponseList<Activity> activities = getActivities(twitter, credentials, paging);
|
||||
storeActivities(cr, loadItemLimit, accountKey, noItemsBefore, activities, sinceId, maxId);
|
||||
if (saveReadPosition) {
|
||||
saveReadPosition(accountKey,credentials, twitter);
|
||||
saveReadPosition(accountKey, credentials, twitter);
|
||||
}
|
||||
errorInfoStore.remove(getErrorInfoKey(), accountKey);
|
||||
} catch (TwitterException e) {
|
||||
@ -161,7 +161,7 @@ public abstract class GetActivitiesTask extends AbstractTask<RefreshTaskParam, O
|
||||
String.valueOf(deleteBound[1])};
|
||||
int rowsDeleted = cr.delete(getContentUri(), where.getSQL(), whereArgs);
|
||||
boolean insertGap = valuesList.size() >= loadItemLimit && !noItemsBefore
|
||||
&& rowsDeleted <= 0;
|
||||
&& rowsDeleted <= 0 && activities.size() > 1;
|
||||
if (insertGap && !valuesList.isEmpty()) {
|
||||
valuesList.get(valuesList.size() - 1).put(Activities.IS_GAP, true);
|
||||
}
|
||||
|
@ -222,7 +222,7 @@ public abstract class GetStatusesTask extends AbstractTask<RefreshTaskParam,
|
||||
final boolean deletedOldGap = rowsDeleted > 0 && ArrayUtils.contains(statusIds, maxId);
|
||||
final boolean noRowsDeleted = rowsDeleted == 0;
|
||||
final boolean insertGap = minIdx != -1 && (noRowsDeleted || deletedOldGap) && !noItemsBefore
|
||||
&& !hasIntersection;
|
||||
&& !hasIntersection && statuses.size() > 1;
|
||||
if (insertGap) {
|
||||
values[minIdx].put(Statuses.IS_GAP, true);
|
||||
}
|
||||
|
@ -172,7 +172,7 @@
|
||||
android:layout_alignStart="@+id/profile_container"
|
||||
android:layout_below="@id/profile_container"
|
||||
android:layout_marginBottom="@dimen/element_spacing_small"
|
||||
android:layout_marginTop="@dimen/element_spacing_normal"
|
||||
android:layout_marginTop="@dimen/element_spacing_small"
|
||||
android:paddingLeft="@dimen/element_spacing_normal"
|
||||
android:paddingRight="@dimen/element_spacing_normal"
|
||||
android:textAppearance="?android:textAppearanceMedium"
|
||||
|
@ -18,11 +18,6 @@
|
||||
-->
|
||||
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item
|
||||
android:id="@+id/link_to_quoted_status"
|
||||
android:checkable="true"
|
||||
android:checked="true"
|
||||
android:title="@string/link_to_quoted_status" />
|
||||
<item
|
||||
android:id="@+id/quote_original_status"
|
||||
android:checkable="true"
|
||||
|
@ -14,5 +14,5 @@
|
||||
<string name="easter_egg_triggered_message" translatable="false">不二对你的膝盖发动了会心一击!</string>
|
||||
<string name="sample_status_text">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam faucibus quis purus ac malesuada. Duis id vulputate magna, a eleifend amet.</string>
|
||||
<string name="unsupported_activity_action_title"><xliff:g id="action">%s</xliff:g> action</string>
|
||||
|
||||
<string name="fanfou_repost_format"><xliff:g id="text">%1$s</xliff:g> 转 \@<xliff:g id="screen_name">%2$s</xliff:g> <xliff:g id="orig_text">%3$s</xliff:g></string>
|
||||
</resources>
|
Loading…
x
Reference in New Issue
Block a user