Skip to content

Commit 198bb05

Browse files
committed
Add manage milestones button
1 parent 5ee5f9e commit 198bb05

File tree

4 files changed

+93
-25
lines changed

4 files changed

+93
-25
lines changed

app/src/main/java/com/gh4a/activities/IssueEditActivity.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -357,12 +357,11 @@ public void onMilestoneSelected(MilestoneDialog.MilestoneSelection milestoneSele
357357
}
358358

359359
private void showMilestonesDialog() {
360-
MilestoneDialog dialog = MilestoneDialog.newInstance(mRepoOwner, mRepoName, false);
360+
boolean fromPullRequest = mEditIssue.pullRequest() != null;
361+
MilestoneDialog dialog = MilestoneDialog.newInstance(mRepoOwner, mRepoName, fromPullRequest, false, true);
361362
getSupportFragmentManager().beginTransaction()
362363
.add(dialog, "dialog_milestone")
363364
.commitAllowingStateLoss();
364-
365-
// TODO: Button to manage milestones
366365
}
367366

368367
private void showAssigneesDialog() {

app/src/main/java/com/gh4a/activities/IssueListActivity.java

+1-3
Original file line numberDiff line numberDiff line change
@@ -40,15 +40,13 @@
4040
import com.gh4a.ServiceFactory;
4141
import com.gh4a.dialogs.MilestoneDialog;
4242
import com.gh4a.fragment.IssueListFragment;
43-
import com.gh4a.fragment.IssueMilestoneListFragment;
4443
import com.gh4a.fragment.LoadingListFragmentBase;
4544
import com.gh4a.utils.ApiHelpers;
4645
import com.gh4a.utils.RxUtils;
4746
import com.gh4a.utils.SingleFactory;
4847
import com.gh4a.utils.UiUtils;
4948
import com.meisolsson.githubsdk.model.Issue;
5049
import com.meisolsson.githubsdk.model.Label;
51-
import com.meisolsson.githubsdk.model.Milestone;
5250
import com.meisolsson.githubsdk.model.User;
5351
import com.meisolsson.githubsdk.service.issues.IssueAssigneeService;
5452
import com.meisolsson.githubsdk.service.issues.IssueLabelService;
@@ -564,7 +562,7 @@ private void showLabelsDialog() {
564562
}
565563

566564
private void showMilestonesDialog() {
567-
MilestoneDialog dialog = MilestoneDialog.newInstance(mRepoOwner, mRepoName, true);
565+
MilestoneDialog dialog = MilestoneDialog.newInstance(mRepoOwner, mRepoName, mIsPullRequest, true, false);
568566
getSupportFragmentManager().beginTransaction()
569567
.add(dialog, "dialog_milestone")
570568
.commitAllowingStateLoss();

app/src/main/java/com/gh4a/dialogs/BasePagerDialog.java

+56-17
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,22 @@
44
import android.support.annotation.Nullable;
55
import android.support.v4.app.DialogFragment;
66
import android.support.v4.app.Fragment;
7+
import android.support.v4.app.FragmentManager;
78
import android.support.v4.app.FragmentPagerAdapter;
89
import android.support.v4.view.ViewPager;
10+
import android.util.SparseArray;
911
import android.view.LayoutInflater;
1012
import android.view.View;
1113
import android.view.ViewGroup;
1214
import android.widget.Button;
1315
import android.widget.LinearLayout;
1416

17+
import com.gh4a.BaseActivity;
1518
import com.gh4a.R;
1619

1720
public abstract class BasePagerDialog extends DialogFragment implements View.OnClickListener {
1821
private LinearLayout mButtonBar;
22+
private FragmentAdapter mPagerAdapter;
1923

2024
@Nullable
2125
@Override
@@ -24,23 +28,8 @@ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
2428
View view = inflater.inflate(R.layout.dialog_pager, container, false);
2529

2630
ViewPager pager = view.findViewById(R.id.dialog_pager);
27-
pager.setAdapter(new FragmentPagerAdapter(getChildFragmentManager()) {
28-
@Override
29-
public Fragment getItem(int position) {
30-
return makeFragment(position);
31-
}
32-
33-
@Override
34-
public CharSequence getPageTitle(int position) {
35-
return getString(getTabTitleResIds()[position]);
36-
}
37-
38-
@Override
39-
public int getCount() {
40-
int[] titleResIds = getTabTitleResIds();
41-
return titleResIds != null ? titleResIds.length : 0;
42-
}
43-
});
31+
mPagerAdapter = new FragmentAdapter(getChildFragmentManager());
32+
pager.setAdapter(mPagerAdapter);
4433

4534
mButtonBar = view.findViewById(R.id.button_bar);
4635

@@ -57,6 +46,15 @@ public void onClick(View v) {
5746
}
5847
}
5948

49+
protected void refreshPages() {
50+
for (int position = 0; position < mPagerAdapter.getCount(); position++) {
51+
Fragment fragment = mPagerAdapter.getExistingFragment(position);
52+
if (fragment instanceof BaseActivity.RefreshableChild) {
53+
((BaseActivity.RefreshableChild) fragment).onRefresh();
54+
}
55+
}
56+
}
57+
6058
protected Button addButton(int textResId) {
6159
Button button = (Button) getLayoutInflater()
6260
.inflate(R.layout.dialog_button, mButtonBar, false);
@@ -74,4 +72,45 @@ protected Button addButton(int textResId) {
7472
protected abstract int[] getTabTitleResIds();
7573

7674
protected abstract Fragment makeFragment(int position);
75+
76+
private class FragmentAdapter extends FragmentPagerAdapter {
77+
private final SparseArray<Fragment> mFragments = new SparseArray<>();
78+
79+
FragmentAdapter(FragmentManager fm) {
80+
super(fm);
81+
}
82+
83+
@Override
84+
public Fragment getItem(int position) {
85+
return makeFragment(position);
86+
}
87+
88+
@Override
89+
public Object instantiateItem(ViewGroup container, int position) {
90+
Fragment f = (Fragment) super.instantiateItem(container, position);
91+
mFragments.put(position, f);
92+
return f;
93+
}
94+
95+
@Override
96+
public void destroyItem(ViewGroup container, int position, Object object) {
97+
super.destroyItem(container, position, object);
98+
mFragments.remove(position);
99+
}
100+
101+
Fragment getExistingFragment(int position) {
102+
return mFragments.get(position);
103+
}
104+
105+
@Override
106+
public CharSequence getPageTitle(int position) {
107+
return getString(getTabTitleResIds()[position]);
108+
}
109+
110+
@Override
111+
public int getCount() {
112+
int[] titleResIds = getTabTitleResIds();
113+
return titleResIds != null ? titleResIds.length : 0;
114+
}
115+
}
77116
}

app/src/main/java/com/gh4a/dialogs/MilestoneDialog.java

+34-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.gh4a.dialogs;
22

3+
import android.app.Activity;
34
import android.content.Context;
5+
import android.content.Intent;
46
import android.os.Bundle;
57
import android.support.annotation.Nullable;
68
import android.support.v4.app.Fragment;
@@ -10,6 +12,7 @@
1012
import android.widget.Button;
1113

1214
import com.gh4a.R;
15+
import com.gh4a.activities.IssueMilestoneListActivity;
1316
import com.gh4a.fragment.IssueMilestoneListFragment;
1417
import com.meisolsson.githubsdk.model.Milestone;
1518

@@ -18,26 +21,35 @@ public class MilestoneDialog extends BasePagerDialog
1821
private static final String EXTRA_OWNER = "owner";
1922
private static final String EXTRA_REPO = "repo";
2023
private static final String EXTRA_SHOW_ANY_MILESTONE = "show_any_milestone";
24+
private static final String EXTRA_SHOW_MANAGE_MILESTONES_BUTTON = "show_manage_milestones_button";
25+
private static final String EXTRA_FROM_PULL_REQUEST = "from_pull_request";
2126
private static final int[] TITLES = new int[]{
2227
R.string.open, R.string.closed
2328
};
29+
private static final int REQUEST_MANAGE_MILESTONES = 3000;
2430

2531
public static MilestoneDialog newInstance(String repoOwner, String repoName,
26-
boolean showAnyMilestoneButton) {
32+
boolean fromPullRequest, boolean showAnyMilestoneButton,
33+
boolean showManageMilestonesButton) {
2734
MilestoneDialog dialog = new MilestoneDialog();
2835
Bundle args = new Bundle();
2936
args.putString(EXTRA_OWNER, repoOwner);
3037
args.putString(EXTRA_REPO, repoName);
38+
args.putBoolean(EXTRA_FROM_PULL_REQUEST, fromPullRequest);
3139
args.putBoolean(EXTRA_SHOW_ANY_MILESTONE, showAnyMilestoneButton);
40+
args.putBoolean(EXTRA_SHOW_MANAGE_MILESTONES_BUTTON, showManageMilestonesButton);
3241
dialog.setArguments(args);
3342
return dialog;
3443
}
3544

3645
private String mRepoOwner;
3746
private String mRepoName;
47+
private boolean mFromPullRequest;
3848
private boolean mShowAnyMilestoneButton;
49+
private boolean mShowManageMilestonesButton;
3950
private Button mNoMilestoneButton;
4051
private Button mAnyMilestoneButton;
52+
private Button mManageMilestonesButton;
4153
private SelectionCallback mSelectionCallback;
4254

4355
@Override
@@ -46,7 +58,9 @@ public void onCreate(@Nullable Bundle savedInstanceState) {
4658
Bundle args = getArguments();
4759
mRepoOwner = args.getString(EXTRA_OWNER);
4860
mRepoName = args.getString(EXTRA_REPO);
61+
mFromPullRequest = args.getBoolean(EXTRA_FROM_PULL_REQUEST);
4962
mShowAnyMilestoneButton = args.getBoolean(EXTRA_SHOW_ANY_MILESTONE);
63+
mShowManageMilestonesButton = args.getBoolean(EXTRA_SHOW_MANAGE_MILESTONES_BUTTON);
5064
}
5165

5266
@Override
@@ -68,6 +82,9 @@ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
6882
mAnyMilestoneButton = addButton(R.string.issue_filter_by_any_milestone);
6983
}
7084
mNoMilestoneButton = addButton(R.string.issue_filter_by_no_milestone);
85+
if (mShowManageMilestonesButton) {
86+
mManageMilestonesButton = addButton(R.string.issue_manage_milestones);
87+
}
7188
return view;
7289
}
7390

@@ -77,19 +94,34 @@ public void onClick(View v) {
7794
onMilestoneSelected(MilestoneSelection.Type.NO_MILESTONE);
7895
} else if (v == mAnyMilestoneButton) {
7996
onMilestoneSelected(MilestoneSelection.Type.ANY_MILESTONE);
97+
} else if (v == mManageMilestonesButton) {
98+
Intent intent = IssueMilestoneListActivity.makeIntent(
99+
getContext(), mRepoOwner, mRepoName, mFromPullRequest);
100+
startActivityForResult(intent, REQUEST_MANAGE_MILESTONES);
80101
} else {
81102
super.onClick(v);
82103
}
83104
}
84105

106+
@Override
107+
public void onActivityResult(int requestCode, int resultCode, Intent data) {
108+
if (requestCode == REQUEST_MANAGE_MILESTONES) {
109+
if (resultCode == Activity.RESULT_OK) {
110+
refreshPages();
111+
}
112+
} else {
113+
super.onActivityResult(requestCode, resultCode, data);
114+
}
115+
}
116+
85117
@Override
86118
protected int[] getTabTitleResIds() {
87119
return TITLES;
88120
}
89121

90122
@Override
91123
protected Fragment makeFragment(int position) {
92-
return IssueMilestoneListFragment.newInstance(mRepoOwner, mRepoName, position == 1, false);
124+
return IssueMilestoneListFragment.newInstance(mRepoOwner, mRepoName, position == 1, mFromPullRequest);
93125
}
94126

95127
@Override

0 commit comments

Comments
 (0)