Skip to content

Commit

Permalink
Non-collaborator restrictions on browsing issues.
Browse files Browse the repository at this point in the history
Non-collaborators are not allowed to change
assignee/milestones/labels when browsing issues.
Refs pockethub#413
atermenji committed Nov 2, 2013
1 parent 00a943e commit 2cb5235
Showing 4 changed files with 44 additions and 20 deletions.
5 changes: 5 additions & 0 deletions app/src/main/java/com/github/mobile/Intents.java
Original file line number Diff line number Diff line change
@@ -116,6 +116,11 @@ public class Intents {
*/
public static final String EXTRA_USERS = INTENT_EXTRA_PREFIX + "USERS";

/**
* Boolean value which indicates if a user is a collaborator on the repo
*/
public static final String EXTRA_IS_COLLABORATOR = INTENT_EXTRA_PREFIX + "IS_COLLABORATOR";

/**
* Issue filter handle
*/
10 changes: 7 additions & 3 deletions app/src/main/java/com/github/mobile/ui/issue/IssueFragment.java
Original file line number Diff line number Diff line change
@@ -21,6 +21,7 @@
import static com.github.mobile.Intents.EXTRA_COMMENT;
import static com.github.mobile.Intents.EXTRA_ISSUE;
import static com.github.mobile.Intents.EXTRA_ISSUE_NUMBER;
import static com.github.mobile.Intents.EXTRA_IS_COLLABORATOR;
import static com.github.mobile.Intents.EXTRA_REPOSITORY_NAME;
import static com.github.mobile.Intents.EXTRA_REPOSITORY_OWNER;
import static com.github.mobile.Intents.EXTRA_USER;
@@ -104,6 +105,8 @@ public class IssueFragment extends DialogFragment {

private User user;

private boolean isCollaborator;

@Inject
private AvatarLoader avatars;

@@ -176,6 +179,7 @@ public void onCreate(Bundle savedInstanceState) {
args.getString(EXTRA_REPOSITORY_NAME));
issueNumber = args.getInt(EXTRA_ISSUE_NUMBER);
user = (User) args.getSerializable(EXTRA_USER);
isCollaborator = args.getBoolean(EXTRA_IS_COLLABORATOR, false);

DialogFragmentActivity dialogActivity = (DialogFragmentActivity) getActivity();

@@ -308,7 +312,7 @@ public void onClick(View v) {
milestoneArea.setOnClickListener(new OnClickListener() {

public void onClick(View v) {
if (issue != null)
if (issue != null && isCollaborator)
milestoneTask.prompt(issue.getMilestone());
}
});
@@ -317,15 +321,15 @@ public void onClick(View v) {
new OnClickListener() {

public void onClick(View v) {
if (issue != null)
if (issue != null && isCollaborator)
assigneeTask.prompt(issue.getAssignee());
}
});

labelsArea.setOnClickListener(new OnClickListener() {

public void onClick(View v) {
if (issue != null)
if (issue != null && isCollaborator)
labelsTask.prompt(issue.getLabels());
}
});
Original file line number Diff line number Diff line change
@@ -16,6 +16,7 @@
package com.github.mobile.ui.issue;

import static com.github.mobile.Intents.EXTRA_ISSUE_NUMBER;
import static com.github.mobile.Intents.EXTRA_IS_COLLABORATOR;
import static com.github.mobile.Intents.EXTRA_REPOSITORY_NAME;
import static com.github.mobile.Intents.EXTRA_REPOSITORY_OWNER;
import static com.github.mobile.Intents.EXTRA_USER;
@@ -51,36 +52,42 @@ public class IssuesPagerAdapter extends FragmentStatePagerAdapter {

private final IssueStore store;

private boolean isCollaborator;

/**
* @param activity
* @param repoIds
* @param issueNumbers
* @param issueStore
* @param collaborator
*/
public IssuesPagerAdapter(SherlockFragmentActivity activity,
List<RepositoryId> repoIds, int[] issueNumbers,
IssueStore issueStore) {
IssueStore issueStore, boolean collaborator) {
super(activity);

repos = repoIds;
repo = null;
issues = issueNumbers;
store = issueStore;
isCollaborator = collaborator;
}

/**
* @param activity
* @param repository
* @param issueNumbers
* @param collaborator
*/
public IssuesPagerAdapter(SherlockFragmentActivity activity,
Repository repository, int[] issueNumbers) {
Repository repository, int[] issueNumbers, boolean collaborator) {
super(activity);

repos = null;
repo = repository;
issues = issueNumbers;
store = null;
isCollaborator = collaborator;
}

@Override
@@ -104,6 +111,7 @@ public Fragment getItem(int position) {
}
}
args.putInt(EXTRA_ISSUE_NUMBER, issues[position]);
args.putBoolean(EXTRA_IS_COLLABORATOR, isCollaborator);
fragment.setArguments(args);
return fragment;
}
Original file line number Diff line number Diff line change
@@ -189,22 +189,9 @@ protected void onCreate(Bundle savedInstanceState) {
pullRequests = getBooleanArrayExtra(EXTRA_PULL_REQUESTS);
repoIds = getSerializableExtra(EXTRA_REPOSITORIES);
repo = getSerializableExtra(EXTRA_REPOSITORY);
int initialPosition = getIntExtra(EXTRA_POSITION);

setContentView(layout.pager);

pager = finder.find(id.vp_pages);

if (repo != null)
adapter = new IssuesPagerAdapter(this, repo, issueNumbers);
else
adapter = new IssuesPagerAdapter(this, repoIds, issueNumbers, store);
pager.setAdapter(adapter);

pager.setOnPageChangeListener(this);
pager.scheduleSetItem(initialPosition, this);
onPageSelected(initialPosition);

if (repo != null) {
ActionBar actionBar = getSupportActionBar();
actionBar.setSubtitle(repo.generateId());
@@ -233,6 +220,21 @@ protected void onSuccess(Repository fullRepository)
checkCollaboratorStatus();
}

private void configurePager() {
int initialPosition = getIntExtra(EXTRA_POSITION);
pager = finder.find(id.vp_pages);

if (repo != null)
adapter = new IssuesPagerAdapter(this, repo, issueNumbers, isCollaborator);
else
adapter = new IssuesPagerAdapter(this, repoIds, issueNumbers, store, isCollaborator);
pager.setAdapter(adapter);

pager.setOnPageChangeListener(this);
pager.scheduleSetItem(initialPosition, this);
onPageSelected(initialPosition);
}

private void updateTitle(final int position) {
int number = issueNumbers[position];
boolean pullRequest = pullRequests[position];
@@ -301,8 +303,12 @@ protected FragmentProvider getProvider() {

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
menu.findItem(id.m_edit).setVisible(isCollaborator);
menu.findItem(id.m_state).setVisible(isCollaborator);
MenuItem editItem = menu.findItem(id.m_edit);
MenuItem stateItem = menu.findItem(id.m_state);
if (editItem != null && stateItem != null) {
editItem.setVisible(isCollaborator);
stateItem.setVisible(isCollaborator);
}

return super.onPrepareOptionsMenu(menu);
}
@@ -349,6 +355,7 @@ protected void onSuccess(Boolean collaborator) throws Exception {

isCollaborator = collaborator;
invalidateOptionsMenu();
configurePager();
}
}.execute();
}

0 comments on commit 2cb5235

Please sign in to comment.