Skip to content
Snippets Groups Projects
Commit 299fa07f authored by John Carlson's avatar John Carlson
Browse files

Properly load a project when we route to it via a link using the name and namespace

parent 13baeae0
No related branches found
No related tags found
No related merge requests found
Pipeline #
Showing
with 68 additions and 36 deletions
Loading
Loading
@@ -147,7 +147,7 @@ public class AddNewLabelActivity extends BaseActivity implements ColorChooserDia
String color = null;
if (mChosenColor != -1) {
color = ColorUtil.convertColorIntToString(mChosenColor);
Timber.d("Setting color to " + color);
Timber.d("Setting color to %s", color);
}
mProgress.setVisibility(View.VISIBLE);
mProgress.setAlpha(0.0f);
Loading
Loading
Loading
Loading
@@ -39,6 +39,8 @@ public class ProjectActivity extends BaseActivity {
 
private static final String EXTRA_PROJECT = "extra_project";
private static final String EXTRA_PROJECT_ID = "extra_project_id";
private static final String EXTRA_PROJECT_NAMESPACE = "extra_project_namespace";
private static final String EXTRA_PROJECT_NAME = "extra_project_name";
 
private static final int REQUEST_BRANCH_OR_TAG = 1;
 
Loading
Loading
@@ -54,6 +56,13 @@ public class ProjectActivity extends BaseActivity {
return intent;
}
 
public static Intent newIntent(Context context, String projectNamespace, String projectName) {
Intent intent = new Intent(context, ProjectActivity.class);
intent.putExtra(EXTRA_PROJECT_NAMESPACE, projectNamespace);
intent.putExtra(EXTRA_PROJECT_NAME, projectName);
return intent;
}
@BindView(R.id.root)
ViewGroup mRoot;
@BindView(R.id.toolbar)
Loading
Loading
@@ -142,7 +151,15 @@ public class ProjectActivity extends BaseActivity {
 
if (project == null) {
String projectId = getIntent().getStringExtra(EXTRA_PROJECT_ID);
loadProject(projectId);
String projectNamespace = getIntent().getStringExtra(EXTRA_PROJECT_NAMESPACE);
if (projectId != null) {
loadProject(projectId);
} else if (projectNamespace != null) {
String projectName = getIntent().getStringExtra(EXTRA_PROJECT_NAME);
loadProject(projectNamespace, projectName);
} else {
throw new IllegalStateException("You did something wrong and now we don't know what project to load. :(");
}
} else {
bindProject(project);
}
Loading
Loading
@@ -162,10 +179,19 @@ public class ProjectActivity extends BaseActivity {
}
 
private void loadProject(String projectId) {
showProgress();
App.instance().getGitLab().getProject(projectId).enqueue(mProjectCallback);
}
private void loadProject(String projectNamespace, String projectName) {
showProgress();
App.instance().getGitLab().getProject(projectNamespace, projectName).enqueue(mProjectCallback);
}
private void showProgress() {
mProgress.setAlpha(0.0f);
mProgress.setVisibility(View.VISIBLE);
mProgress.animate().alpha(1.0f);
App.instance().getGitLab().getProject(projectId).enqueue(mProjectCallback);
}
 
private void broadcastLoad() {
Loading
Loading
Loading
Loading
@@ -28,40 +28,47 @@ public class RoutingActivity extends Activity {
private final RoutingNavigator mNavigator = new RoutingNavigator() {
@Override
public void onRouteToIssue(String projectNamespace, String projectName, String issueIid) {
Timber.d("Routing to issue");
Navigator.navigateToIssue(RoutingActivity.this, projectNamespace, projectName, issueIid);
}
 
@Override
public void onRouteToCommit(String projectNamespace, String projectName, String commitSha) {
Timber.d("Routing to commit");
startActivity(LoadSomeInfoActivity.newIntent(RoutingActivity.this, projectNamespace, projectName, commitSha));
overridePendingTransition(R.anim.fade_in, R.anim.do_nothing);
}
 
@Override
public void onRouteToMergeRequest(String projectNamespace, String projectName, String mergeRequestId) {
Timber.d("Routing to merge request");
startActivity(LoadSomeInfoActivity.newMergeRequestIntent(RoutingActivity.this, projectNamespace, projectName, mergeRequestId));
overridePendingTransition(R.anim.fade_in, R.anim.do_nothing);
}
 
@Override
public void onRouteToProject(String namespace, String projectId) {
Navigator.navigateToProject(RoutingActivity.this, projectId);
Timber.d("Routing to project");
Navigator.navigateToProject(RoutingActivity.this, namespace, projectId);
}
 
@Override
public void onRouteToBuild(String projectNamespace, String projectName, String buildNumber) {
Timber.d("Routing to build");
startActivity(LoadSomeInfoActivity.newBuildIntent(RoutingActivity.this, projectNamespace, projectName, Long.valueOf(buildNumber)));
overridePendingTransition(R.anim.fade_in, R.anim.do_nothing);
}
 
@Override
public void onRouteToMilestone(String projectNamespace, String projectName, String milestoneNumber) {
Timber.d("Routing to milestone");
startActivity(LoadSomeInfoActivity.newMilestoneIntent(RoutingActivity.this, projectNamespace, projectName, milestoneNumber));
overridePendingTransition(R.anim.fade_in, R.anim.do_nothing);
}
 
@Override
public void onRouteUnknown(Uri uri) {
Timber.d("Route unknown. Opening original Uri if it exists");
if (mOriginalUri != null) {
IntentUtil.openPage(RoutingActivity.this, uri.toString());
} else {
Loading
Loading
Loading
Loading
@@ -19,7 +19,7 @@ import java.util.Collection;
/**
* Shows a projects members and a groups members
*/
public class MemberAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
public class ProjectMembersAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
 
private static final int TYPE_MEMBER = 0;
private static final int TYPE_FOOTER = 1;
Loading
Loading
@@ -70,7 +70,7 @@ public class MemberAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
return mProjectMembers.get(position);
}
 
public MemberAdapter(Listener listener) {
public ProjectMembersAdapter(Listener listener) {
mListener = listener;
mProjectMembers = new ArrayList<>();
}
Loading
Loading
package com.commit451.gitlab.fragment;
 
import android.content.DialogInterface;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
Loading
Loading
@@ -287,18 +286,7 @@ public class ProjectFragment extends ButterKnifeFragment {
mEventReceiver = new EventReceiver();
App.bus().register(mEventReceiver);
 
mOverviewVew.setMovementMethod(new InternalLinkMovementMethod(new InternalLinkMovementMethod.OnLinkClickedListener() {
@Override
public boolean onLinkClicked(String url) {
String server = App.instance().getAccount().getServerUrl().toString();
if (url.startsWith(server)) {
Timber.d("Looks like an internal server link: %s", url);
Navigator.navigateToUrl(getActivity(), Uri.parse(url), App.instance().getAccount());
return true;
}
return false;
}
}));
mOverviewVew.setMovementMethod(new InternalLinkMovementMethod(getActivity(), App.instance().getAccount().getServerUrl()));
 
mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
Loading
Loading
Loading
Loading
@@ -16,9 +16,8 @@ import android.widget.TextView;
import com.commit451.gitlab.App;
import com.commit451.gitlab.R;
import com.commit451.gitlab.activity.ProjectActivity;
import com.commit451.gitlab.adapter.MemberAdapter;
import com.commit451.gitlab.adapter.ProjectMembersAdapter;
import com.commit451.easycallback.EasyCallback;
import com.commit451.gitlab.api.GitLabFactory;
import com.commit451.gitlab.dialog.AccessDialog;
import com.commit451.gitlab.event.MemberAddedEvent;
import com.commit451.gitlab.event.ProjectReloadEvent;
Loading
Loading
@@ -49,7 +48,7 @@ public class ProjectMembersFragment extends ButterKnifeFragment {
 
private Project mProject;
private EventReceiver mEventReceiver;
private MemberAdapter mAdapter;
private ProjectMembersAdapter mAdapter;
private GridLayoutManager mProjectLayoutManager;
private Member mMember;
private Uri mNextPageUrl;
Loading
Loading
@@ -75,7 +74,7 @@ public class ProjectMembersFragment extends ButterKnifeFragment {
}
};
 
private final MemberAdapter.Listener mMemberAdapterListener = new MemberAdapter.Listener() {
private final ProjectMembersAdapter.Listener mMemberAdapterListener = new ProjectMembersAdapter.Listener() {
@Override
public void onProjectMemberClicked(Member member, ProjectMemberViewHolder memberGroupViewHolder) {
Navigator.navigateToUser(getActivity(), memberGroupViewHolder.mImageView, member);
Loading
Loading
@@ -176,7 +175,7 @@ public class ProjectMembersFragment extends ButterKnifeFragment {
mEventReceiver = new EventReceiver();
App.bus().register(mEventReceiver);
 
mAdapter = new MemberAdapter(mMemberAdapterListener);
mAdapter = new ProjectMembersAdapter(mMemberAdapterListener);
mProjectLayoutManager = new GridLayoutManager(getActivity(), 2);
mProjectLayoutManager.setSpanSizeLookup(mAdapter.getSpanSizeLookup());
mMembersListView.setLayoutManager(mProjectLayoutManager);
Loading
Loading
Loading
Loading
@@ -71,6 +71,10 @@ public class Navigator {
activity.startActivity(ProjectActivity.newIntent(activity, projectId));
}
 
public static void navigateToProject(Activity activity, String projectNamespace, String projectName) {
activity.startActivity(ProjectActivity.newIntent(activity, projectNamespace, projectName));
}
public static void navigateToPickBranchOrTag(Activity activity, long projectId, @Nullable Ref currentRef, int requestCode) {
activity.startActivityForResult(PickBranchOrTagActivity.newIntent(activity, projectId, currentRef), requestCode);
activity.overridePendingTransition(R.anim.fade_in, R.anim.do_nothing);
Loading
Loading
Loading
Loading
@@ -10,7 +10,7 @@ public interface RoutingNavigator {
void onRouteToIssue(String projectNamespace, String projectName, String issueIid);
void onRouteToCommit(String projectNamespace, String projectName, String commitSha);
void onRouteToMergeRequest(String projectNamespace, String projectName, String mergeRequestIid);
void onRouteToProject(String namespace, String projectId);
void onRouteToProject(String projectNamespace, String projectName);
void onRouteToBuild(String projectNamespace, String projectName, String buildNumber);
void onRouteToMilestone(String projectNamespace, String projectName, String milestoneNumber);
void onRouteUnknown(@Nullable Uri uri);
Loading
Loading
Loading
Loading
@@ -30,8 +30,9 @@ public class RoutingRouter {
int index = link.getPathSegments().indexOf("issues");
if (index != -1 && index > 1) {
String namespace = link.getPathSegments().get(index - 2);
String projectId = link.getPathSegments().get(index - 1);
mNavigator.onRouteToProject(namespace, projectId);
String name = link.getPathSegments().get(index - 1);
//TODO make this tell what tab to open up when we get to projects
mNavigator.onRouteToProject(namespace, name);
return;
}
} else {
Loading
Loading
package com.commit451.gitlab.util;
 
 
import android.app.Activity;
import android.net.Uri;
import android.text.Layout;
import android.text.method.LinkMovementMethod;
import android.text.style.URLSpan;
import android.view.MotionEvent;
import android.widget.TextView;
 
import com.commit451.gitlab.App;
import com.commit451.gitlab.navigation.Navigator;
import timber.log.Timber;
/**
* Set this on a textview and then you can potentially open links locally if applicable
*/
public class InternalLinkMovementMethod extends LinkMovementMethod {
 
private OnLinkClickedListener mOnLinkClickedListener;
//I hate this
private Activity mActivity;
private Uri mServerUrl;
 
public InternalLinkMovementMethod(OnLinkClickedListener onLinkClickedListener) {
mOnLinkClickedListener = onLinkClickedListener;
public InternalLinkMovementMethod(Activity activity, Uri serverUrl) {
mActivity = activity;
mServerUrl = serverUrl;
}
 
public boolean onTouchEvent(TextView widget, android.text.Spannable buffer, android.view.MotionEvent event) {
Loading
Loading
@@ -39,8 +49,9 @@ public class InternalLinkMovementMethod extends LinkMovementMethod {
URLSpan[] link = buffer.getSpans(off, off, URLSpan.class);
if (link.length != 0) {
String url = link[0].getURL();
boolean handled = mOnLinkClickedListener.onLinkClicked(url);
if (handled) {
if (url.startsWith(mServerUrl.toString())) {
Timber.d("Looks like an internal server link: %s", url);
Navigator.navigateToUrl(mActivity, Uri.parse(url), App.instance().getAccount());
return true;
}
return super.onTouchEvent(widget, buffer, event);
Loading
Loading
@@ -48,8 +59,4 @@ public class InternalLinkMovementMethod extends LinkMovementMethod {
}
return super.onTouchEvent(widget, buffer, event);
}
public interface OnLinkClickedListener {
boolean onLinkClicked(String url);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment