implement editing lists
re: sk22#30
This commit is contained in:
@@ -10,13 +10,20 @@ import android.view.ViewGroup;
|
|||||||
import android.widget.ImageButton;
|
import android.widget.ImageButton;
|
||||||
|
|
||||||
import org.joinmastodon.android.R;
|
import org.joinmastodon.android.R;
|
||||||
|
import org.joinmastodon.android.api.requests.lists.CreateList;
|
||||||
|
import org.joinmastodon.android.api.requests.lists.UpdateList;
|
||||||
import org.joinmastodon.android.api.requests.timelines.GetListTimeline;
|
import org.joinmastodon.android.api.requests.timelines.GetListTimeline;
|
||||||
|
import org.joinmastodon.android.model.ListTimeline;
|
||||||
import org.joinmastodon.android.model.Status;
|
import org.joinmastodon.android.model.Status;
|
||||||
|
import org.joinmastodon.android.ui.M3AlertDialogBuilder;
|
||||||
import org.joinmastodon.android.ui.utils.UiUtils;
|
import org.joinmastodon.android.ui.utils.UiUtils;
|
||||||
|
import org.joinmastodon.android.ui.views.ListTimelineEditor;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import me.grishka.appkit.Nav;
|
import me.grishka.appkit.Nav;
|
||||||
|
import me.grishka.appkit.api.Callback;
|
||||||
|
import me.grishka.appkit.api.ErrorResponse;
|
||||||
import me.grishka.appkit.api.SimpleCallback;
|
import me.grishka.appkit.api.SimpleCallback;
|
||||||
import me.grishka.appkit.utils.V;
|
import me.grishka.appkit.utils.V;
|
||||||
|
|
||||||
@@ -24,6 +31,7 @@ import me.grishka.appkit.utils.V;
|
|||||||
public class ListTimelineFragment extends StatusListFragment {
|
public class ListTimelineFragment extends StatusListFragment {
|
||||||
private String listID;
|
private String listID;
|
||||||
private String listTitle;
|
private String listTitle;
|
||||||
|
private ListTimeline.RepliesPolicy repliesPolicy;
|
||||||
private ImageButton fab;
|
private ImageButton fab;
|
||||||
|
|
||||||
public ListTimelineFragment() {
|
public ListTimelineFragment() {
|
||||||
@@ -33,8 +41,11 @@ public class ListTimelineFragment extends StatusListFragment {
|
|||||||
@Override
|
@Override
|
||||||
public void onAttach(Activity activity){
|
public void onAttach(Activity activity){
|
||||||
super.onAttach(activity);
|
super.onAttach(activity);
|
||||||
listID=getArguments().getString("listID");
|
Bundle args = getArguments();
|
||||||
listTitle=getArguments().getString("listTitle");
|
listID = args.getString("listID");
|
||||||
|
listTitle = args.getString("listTitle");
|
||||||
|
repliesPolicy = ListTimeline.RepliesPolicy.values()[args.getInt("repliesPolicy", 0)];
|
||||||
|
|
||||||
setTitle(listTitle);
|
setTitle(listTitle);
|
||||||
setHasOptionsMenu(true);
|
setHasOptionsMenu(true);
|
||||||
}
|
}
|
||||||
@@ -47,12 +58,37 @@ public class ListTimelineFragment extends StatusListFragment {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onOptionsItemSelected(MenuItem item) {
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
|
Bundle args = new Bundle();
|
||||||
|
args.putString("listID", listID);
|
||||||
if (item.getItemId() == R.id.edit) {
|
if (item.getItemId() == R.id.edit) {
|
||||||
|
ListTimelineEditor editor = new ListTimelineEditor(getContext());
|
||||||
|
editor.applyList(listTitle, repliesPolicy);
|
||||||
|
new M3AlertDialogBuilder(getActivity())
|
||||||
|
.setTitle(R.string.sk_edit_list_title)
|
||||||
|
.setView(editor)
|
||||||
|
.setPositiveButton(R.string.save, (d, which) -> {
|
||||||
|
new UpdateList(listID, editor.getTitle(), editor.getRepliesPolicy()).setCallback(new Callback<>() {
|
||||||
|
@Override
|
||||||
|
public void onSuccess(ListTimeline list) {
|
||||||
|
setTitle(list.title);
|
||||||
|
listTitle = list.title;
|
||||||
|
repliesPolicy = list.repliesPolicy;
|
||||||
|
args.putString("listTitle", listTitle);
|
||||||
|
args.putInt("repliesPolicy", repliesPolicy.ordinal());
|
||||||
|
setResult(true, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onError(ErrorResponse error) {
|
||||||
|
error.showToast(getContext());
|
||||||
|
}
|
||||||
|
}).exec(accountID);
|
||||||
|
})
|
||||||
|
.setNegativeButton(R.string.cancel, (d, which) -> {})
|
||||||
|
.show();
|
||||||
} else if (item.getItemId() == R.id.delete) {
|
} else if (item.getItemId() == R.id.delete) {
|
||||||
UiUtils.confirmDeleteList(getActivity(), accountID, listID, () -> {
|
UiUtils.confirmDeleteList(getActivity(), accountID, listID, () -> {
|
||||||
Bundle args = new Bundle();
|
args.putBoolean("deleted", true);
|
||||||
args.putString("listID", listID);
|
|
||||||
setResult(true, args);
|
setResult(true, args);
|
||||||
Nav.finish(this);
|
Nav.finish(this);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ import me.grishka.appkit.utils.BindableViewHolder;
|
|||||||
import me.grishka.appkit.views.UsableRecyclerView;
|
import me.grishka.appkit.views.UsableRecyclerView;
|
||||||
|
|
||||||
public class ListTimelinesFragment extends BaseRecyclerFragment<ListTimeline> implements ScrollableToTop {
|
public class ListTimelinesFragment extends BaseRecyclerFragment<ListTimeline> implements ScrollableToTop {
|
||||||
private static final int LIST_DELETED_RESULT = 987;
|
private static final int LIST_CHANGED_RESULT = 987;
|
||||||
|
|
||||||
private String accountId;
|
private String accountId;
|
||||||
private String profileAccountId;
|
private String profileAccountId;
|
||||||
@@ -147,14 +147,20 @@ public class ListTimelinesFragment extends BaseRecyclerFragment<ListTimeline> im
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onFragmentResult(int reqCode, boolean listDeleted, Bundle result){
|
public void onFragmentResult(int reqCode, boolean listChanged, Bundle result){
|
||||||
if (reqCode == LIST_DELETED_RESULT && listDeleted) {
|
if (reqCode == LIST_CHANGED_RESULT && listChanged) {
|
||||||
String listID = result.getString("listID");
|
String listID = result.getString("listID");
|
||||||
|
|
||||||
for (int i = 0; i < data.size(); i++) {
|
for (int i = 0; i < data.size(); i++) {
|
||||||
if (data.get(i).id.equals(listID)) {
|
ListTimeline item = data.get(i);
|
||||||
data.remove(i);
|
if (item.id.equals(listID)) {
|
||||||
adapter.notifyItemRemoved(i);
|
if (result.getBoolean("deleted")) {
|
||||||
|
data.remove(i);
|
||||||
|
adapter.notifyItemRemoved(i);
|
||||||
|
} else {
|
||||||
|
item.title = result.getString("listTitle", item.title);
|
||||||
|
item.repliesPolicy = ListTimeline.RepliesPolicy.values()[result.getInt("repliesPolicy")];
|
||||||
|
adapter.notifyItemChanged(i);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -223,7 +229,8 @@ public class ListTimelinesFragment extends BaseRecyclerFragment<ListTimeline> im
|
|||||||
args.putString("account", accountId);
|
args.putString("account", accountId);
|
||||||
args.putString("listID", item.id);
|
args.putString("listID", item.id);
|
||||||
args.putString("listTitle", item.title);
|
args.putString("listTitle", item.title);
|
||||||
Nav.goForResult(getActivity(), ListTimelineFragment.class, args, LIST_DELETED_RESULT, ListTimelinesFragment.this);
|
args.putInt("repliesPolicy", item.repliesPolicy.ordinal());
|
||||||
|
Nav.goForResult(getActivity(), ListTimelineFragment.class, args, LIST_CHANGED_RESULT, ListTimelinesFragment.this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,8 +15,8 @@ import org.joinmastodon.android.model.ListTimeline;
|
|||||||
|
|
||||||
public class ListTimelineEditor extends LinearLayout {
|
public class ListTimelineEditor extends LinearLayout {
|
||||||
private ListTimeline.RepliesPolicy policy = null;
|
private ListTimeline.RepliesPolicy policy = null;
|
||||||
private TextInputFrameLayout input;
|
private final TextInputFrameLayout input;
|
||||||
private Button button;
|
private final Button button;
|
||||||
|
|
||||||
@SuppressLint("ClickableViewAccessibility")
|
@SuppressLint("ClickableViewAccessibility")
|
||||||
public ListTimelineEditor(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
|
public ListTimelineEditor(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
|
||||||
@@ -37,10 +37,9 @@ public class ListTimelineEditor extends LinearLayout {
|
|||||||
setRepliesPolicy(ListTimeline.RepliesPolicy.LIST);
|
setRepliesPolicy(ListTimeline.RepliesPolicy.LIST);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void applyList(ListTimeline list) {
|
public void applyList(String title, ListTimeline.RepliesPolicy policy) {
|
||||||
policy = list.repliesPolicy;
|
input.getEditText().setText(title);
|
||||||
input.getEditText().setText(list.title);
|
setRepliesPolicy(policy);
|
||||||
setRepliesPolicy(list.repliesPolicy);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getTitle() {
|
public String getTitle() {
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent">
|
||||||
<org.joinmastodon.android.ui.views.AutoOrientationLinearLayout
|
<org.joinmastodon.android.ui.views.AutoOrientationLinearLayout
|
||||||
android:orientation="horizontal"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginBottom="8dp"
|
android:layout_marginBottom="8dp"
|
||||||
@@ -12,11 +11,12 @@
|
|||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/text"
|
android:id="@+id/text"
|
||||||
android:text="@string/sk_list_replies_policy"
|
android:text="@string/sk_list_replies_policy"
|
||||||
android:layout_width="0dp"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_weight="1"
|
|
||||||
android:layout_marginEnd="8dp"
|
android:layout_marginEnd="8dp"
|
||||||
android:paddingVertical="8dp"
|
android:paddingVertical="8dp"
|
||||||
|
android:singleLine="true"
|
||||||
|
android:ellipsize="none"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:textColor="?android:textColorPrimary"
|
android:textColor="?android:textColorPrimary"
|
||||||
android:textSize="16sp" />
|
android:textSize="16sp" />
|
||||||
@@ -25,11 +25,9 @@
|
|||||||
android:id="@+id/button"
|
android:id="@+id/button"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="32dp"
|
android:layout_height="32dp"
|
||||||
android:layout_weight="0"
|
|
||||||
android:maxWidth="140dp"
|
|
||||||
android:background="@drawable/bg_inline_button"
|
android:background="@drawable/bg_inline_button"
|
||||||
android:elevation="0dp"
|
android:elevation="0dp"
|
||||||
android:ellipsize="middle"
|
android:ellipsize="none"
|
||||||
android:fontFamily="sans-serif-medium"
|
android:fontFamily="sans-serif-medium"
|
||||||
android:singleLine="true"
|
android:singleLine="true"
|
||||||
android:stateListAnimator="@null"
|
android:stateListAnimator="@null"
|
||||||
|
|||||||
@@ -148,11 +148,12 @@
|
|||||||
<string name="sk_create_list_title">Create list</string>
|
<string name="sk_create_list_title">Create list</string>
|
||||||
<string name="sk_list_name_hint">List name</string>
|
<string name="sk_list_name_hint">List name</string>
|
||||||
<string name="sk_list_replies_policy">Show replies to</string>
|
<string name="sk_list_replies_policy">Show replies to</string>
|
||||||
<string name="sk_list_replies_policy_list">List members</string>
|
<string name="sk_list_replies_policy_list">list members</string>
|
||||||
<string name="sk_list_replies_policy_followed">Any followed user</string>
|
<string name="sk_list_replies_policy_followed">followed users</string>
|
||||||
<string name="sk_list_replies_policy_none">No one</string>
|
<string name="sk_list_replies_policy_none">no one</string>
|
||||||
<string name="sk_delete_list">Delete list</string>
|
<string name="sk_delete_list">Delete list</string>
|
||||||
<string name="sk_delete_list_confirm">Are you sure you want to delete this list?</string>
|
<string name="sk_delete_list_confirm">Are you sure you want to delete this list?</string>
|
||||||
|
<string name="sk_edit_list_title">Edit list</string>
|
||||||
|
|
||||||
<!-- accessibility labels-->
|
<!-- accessibility labels-->
|
||||||
<string name="sk_poll_option_add">Add new poll option</string>
|
<string name="sk_poll_option_add">Add new poll option</string>
|
||||||
|
|||||||
Reference in New Issue
Block a user