Skip to content
Snippets Groups Projects
Commit e3c730d9 authored by Michi302's avatar Michi302
Browse files

Merge branch 'master' into fdroid

# Conflicts:
#	README.md
#	app/build.gradle
#	app/src/main/java/com/commit451/gitlab/LabCoatApp.java
parents 28c09fb7 e73b1aab
No related branches found
No related tags found
No related merge requests found
Pipeline #
Showing
with 464 additions and 151 deletions
package com.commit451.gitlab.adapter;
 
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.ViewGroup;
 
Loading
Loading
@@ -12,6 +13,8 @@ import com.commit451.gitlab.viewHolder.NoteViewHolder;
import java.util.ArrayList;
import java.util.List;
 
import in.uncod.android.bypass.Bypass;
/**
* Shows the comments and details of a merge request
* Created by John on 11/16/15.
Loading
Loading
@@ -28,10 +31,12 @@ public class MergeRequestDetailAdapter extends RecyclerView.Adapter<RecyclerView
private ArrayList<Note> mNotes;
private MergeRequest mMergeRequest;
private boolean mLoading = false;
private Bypass mBypass;
 
public MergeRequestDetailAdapter(MergeRequest mergeRequest) {
public MergeRequestDetailAdapter(Context context, MergeRequest mergeRequest) {
mMergeRequest = mergeRequest;
mNotes = new ArrayList<>();
mBypass = new Bypass(context);
}
 
@Override
Loading
Loading
@@ -50,10 +55,10 @@ public class MergeRequestDetailAdapter extends RecyclerView.Adapter<RecyclerView
@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
if (holder instanceof MergeRequestHeaderViewHolder) {
((MergeRequestHeaderViewHolder) holder).bind(mMergeRequest);
((MergeRequestHeaderViewHolder) holder).bind(mMergeRequest, mBypass);
} else if (holder instanceof NoteViewHolder) {
Note note = getNoteAt(position);
((NoteViewHolder) holder).bind(note);
((NoteViewHolder) holder).bind(note, mBypass);
} else if (holder instanceof LoadingFooterViewHolder) {
((LoadingFooterViewHolder) holder).bind(mLoading);
}
Loading
Loading
package com.commit451.gitlab.adapter;
 
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
 
import com.commit451.gitlab.R;
import com.commit451.gitlab.model.api.UserBasic;
import com.commit451.gitlab.viewHolder.LoadingFooterViewHolder;
import com.commit451.gitlab.viewHolder.UserViewHolder;
 
import java.util.ArrayList;
Loading
Loading
@@ -15,13 +17,19 @@ import java.util.Collection;
* Adapter for a list of users
* Created by John on 9/28/15.
*/
public class UsersAdapter extends RecyclerView.Adapter<UserViewHolder> {
public class UsersAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private static final int FOOTER_COUNT = 1;
private static final int TYPE_ITEM = 0;
private static final int TYPE_FOOTER = 1;
 
public interface Listener {
void onUserClicked(UserBasic user, UserViewHolder userViewHolder);
}
private Listener mListener;
private ArrayList<UserBasic> mData;
private boolean mLoading = false;
 
private final View.OnClickListener mItemClickListener = new View.OnClickListener() {
@Override
Loading
Loading
@@ -32,28 +40,59 @@ public class UsersAdapter extends RecyclerView.Adapter<UserViewHolder> {
}
};
 
private final GridLayoutManager.SpanSizeLookup mSpanSizeLookup = new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
int viewType = getItemViewType(position);
if (viewType == TYPE_FOOTER) {
return 2;
} else {
return 1;
}
}
};
public UsersAdapter(Listener listener) {
mListener = listener;
mData = new ArrayList<>();
}
 
@Override
public UserViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
UserViewHolder holder = UserViewHolder.inflate(parent);
holder.itemView.setOnClickListener(mItemClickListener);
return holder;
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
switch (viewType) {
case TYPE_ITEM:
UserViewHolder holder = UserViewHolder.inflate(parent);
holder.itemView.setOnClickListener(mItemClickListener);
return holder;
case TYPE_FOOTER:
return LoadingFooterViewHolder.inflate(parent);
}
throw new IllegalStateException("No known viewholder for type " + viewType);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (holder instanceof UserViewHolder) {
((UserViewHolder) holder).bind(mData.get(position));
holder.itemView.setTag(R.id.list_position, position);
holder.itemView.setTag(R.id.list_view_holder, holder);
} else if (holder instanceof LoadingFooterViewHolder) {
((LoadingFooterViewHolder) holder).bind(mLoading);
}
}
 
@Override
public void onBindViewHolder(UserViewHolder userViewHolder, int position) {
userViewHolder.bind(mData.get(position));
userViewHolder.itemView.setTag(R.id.list_position, position);
userViewHolder.itemView.setTag(R.id.list_view_holder, userViewHolder);
public int getItemViewType(int position) {
if (position == mData.size()) {
return TYPE_FOOTER;
} else {
return TYPE_ITEM;
}
}
 
@Override
public int getItemCount() {
return mData.size();
return mData.size() + FOOTER_COUNT;
}
 
private UserBasic getUser(int position) {
Loading
Loading
@@ -76,4 +115,13 @@ public class UsersAdapter extends RecyclerView.Adapter<UserViewHolder> {
mData.clear();
notifyDataSetChanged();
}
public void setLoading(boolean loading) {
mLoading = loading;
notifyItemChanged(mData.size());
}
public GridLayoutManager.SpanSizeLookup getSpanSizeLookup() {
return mSpanSizeLookup;
}
}
package com.commit451.gitlab.api;
 
import com.commit451.gitlab.GitLabApp;
import com.commit451.gitlab.LabCoatApp;
import com.commit451.gitlab.model.Account;
import com.commit451.gitlab.provider.GsonProvider;
import com.commit451.gitlab.provider.OkHttpClientProvider;
Loading
Loading
@@ -82,7 +82,7 @@ public final class GitLabClient {
 
public static Picasso getPicasso(Account account) {
checkAccountSet();
return new Picasso.Builder(GitLabApp.instance())
return new Picasso.Builder(LabCoatApp.instance())
.downloader(new OkHttpDownloader(OkHttpClientProvider.getInstance(account)))
.build();
}
Loading
Loading
@@ -97,7 +97,7 @@ public final class GitLabClient {
 
private static void checkAccountSet() {
if (sAccount == null) {
List<Account> accounts = Account.getAccounts(GitLabApp.instance());
List<Account> accounts = Account.getAccounts(LabCoatApp.instance());
GitLabClient.setAccount(accounts.get(0));
}
}
Loading
Loading
package com.commit451.gitlab.customtabs;
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.net.Uri;
import android.support.design.widget.Snackbar;
import com.commit451.gitlab.R;
/**
* A fallback to open the url in the browser
* Created by John on 9/3/15.
*/
public class BrowserFallback implements CustomTabsActivityHelper.CustomTabFallback {
@Override
public void openUri(Activity activity, Uri uri) {
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(uri);
try {
activity.startActivity(i);
} catch (ActivityNotFoundException e) {
Snackbar.make(activity.getWindow().getDecorView(), R.string.error_no_browser, Snackbar.LENGTH_SHORT)
.show();
}
}
}
package com.commit451.gitlab.customtabs;
import android.app.Activity;
import android.content.ComponentName;
import android.net.Uri;
import android.os.Bundle;
import android.support.customtabs.CustomTabsClient;
import android.support.customtabs.CustomTabsIntent;
import android.support.customtabs.CustomTabsServiceConnection;
import android.support.customtabs.CustomTabsSession;
import java.util.List;
public class CustomTabsActivityHelper {
private CustomTabsSession mCustomTabsSession;
private CustomTabsClient mClient;
private CustomTabsServiceConnection mConnection;
private ConnectionCallback mConnectionCallback;
/**
* Opens the URL on a Custom Tab if possible. Otherwise fallsback to opening it on a WebView
*
* @param activity The host activity
* @param customTabsIntent a CustomTabsIntent to be used if Custom Tabs is available
* @param uri the Uri to be opened
* @param fallback a CustomTabFallback to be used if Custom Tabs is not available
*/
public static void openCustomTab(Activity activity,
CustomTabsIntent customTabsIntent,
Uri uri,
CustomTabFallback fallback) {
String packageName = CustomTabsHelper.getPackageNameToUse(activity);
//If we cant find a package name, it means theres no browser that supports
//Chrome Custom Tabs installed. So, we fallback to the webview
if (packageName == null) {
if (fallback != null) {
fallback.openUri(activity, uri);
}
} else {
customTabsIntent.intent.setPackage(packageName);
customTabsIntent.launchUrl(activity, uri);
}
}
/**
* Unbinds the Activity from the Custom Tabs Service
* @param activity the activity that is connected to the service
*/
public void unbindCustomTabsService(Activity activity) {
if (mConnection == null) return;
activity.unbindService(mConnection);
mClient = null;
mCustomTabsSession = null;
}
/**
* Creates or retrieves an exiting CustomTabsSession
*
* @return a CustomTabsSession
*/
public CustomTabsSession getSession() {
if (mClient == null) {
mCustomTabsSession = null;
} else if (mCustomTabsSession == null) {
mCustomTabsSession = mClient.newSession(null);
}
return mCustomTabsSession;
}
/**
* Register a Callback to be called when connected or disconnected from the Custom Tabs Service
* @param connectionCallback
*/
public void setConnectionCallback(ConnectionCallback connectionCallback) {
this.mConnectionCallback = connectionCallback;
}
/**
* Binds the Activity to the Custom Tabs Service
* @param activity the activity to be binded to the service
*/
public void bindCustomTabsService(Activity activity) {
if (mClient != null) return;
String packageName = CustomTabsHelper.getPackageNameToUse(activity);
if (packageName == null) return;
mConnection = new CustomTabsServiceConnection() {
@Override
public void onCustomTabsServiceConnected(ComponentName name, CustomTabsClient client) {
mClient = client;
mClient.warmup(0L);
if (mConnectionCallback != null) mConnectionCallback.onCustomTabsConnected();
//Initialize a session as soon as possible.
getSession();
}
@Override
public void onServiceDisconnected(ComponentName name) {
mClient = null;
if (mConnectionCallback != null) mConnectionCallback.onCustomTabsDisconnected();
}
};
CustomTabsClient.bindCustomTabsService(activity, packageName, mConnection);
}
public boolean mayLaunchUrl(Uri uri, Bundle extras, List<Bundle> otherLikelyBundles) {
if (mClient == null) return false;
CustomTabsSession session = getSession();
if (session == null) return false;
return session.mayLaunchUrl(uri, extras, otherLikelyBundles);
}
/**
* A Callback for when the service is connected or disconnected. Use those callbacks to
* handle UI changes when the service is connected or disconnected
*/
public interface ConnectionCallback {
/**
* Called when the service is connected
*/
void onCustomTabsConnected();
/**
* Called when the service is disconnected
*/
void onCustomTabsDisconnected();
}
/**
* To be used as a fallback to open the Uri when Custom Tabs is not available
*/
public interface CustomTabFallback {
/**
*
* @param activity The Activity that wants to open the Uri
* @param uri The uri to be opened by the fallback
*/
void openUri(Activity activity, Uri uri);
}
}
\ No newline at end of file
package com.commit451.gitlab.customtabs;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.net.Uri;
import android.support.customtabs.CustomTabsService;
import android.text.TextUtils;
import android.util.Log;
import java.util.ArrayList;
import java.util.List;
/**
* Helper class for Custom Tabs.
*/
public class CustomTabsHelper {
private static final String TAG = "CustomTabsHelper";
static final String STABLE_PACKAGE = "com.android.chrome";
static final String BETA_PACKAGE = "com.chrome.beta";
static final String DEV_PACKAGE = "com.chrome.dev";
static final String LOCAL_PACKAGE = "com.google.android.apps.chrome";
private static final String EXTRA_CUSTOM_TABS_KEEP_ALIVE =
"android.support.customtabs.extra.KEEP_ALIVE";
private static String sPackageNameToUse;
private CustomTabsHelper() {}
public static void addKeepAliveExtra(Context context, Intent intent) {
Intent keepAliveIntent = new Intent().setClassName(
context.getPackageName(), KeepAliveService.class.getCanonicalName());
intent.putExtra(EXTRA_CUSTOM_TABS_KEEP_ALIVE, keepAliveIntent);
}
/**
* Goes through all apps that handle VIEW intents and have a warmup service. Picks
* the one chosen by the user if there is one, otherwise makes a best effort to return a
* valid package name.
*
* This is <strong>not</strong> threadsafe.
*
* @param context {@link Context} to use for accessing {@link PackageManager}.
* @return The package name recommended to use for connecting to custom tabs related components.
*/
public static String getPackageNameToUse(Context context) {
if (sPackageNameToUse != null) return sPackageNameToUse;
PackageManager pm = context.getPackageManager();
// Get default VIEW intent handler.
Intent activityIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.example.com"));
ResolveInfo defaultViewHandlerInfo = pm.resolveActivity(activityIntent, 0);
String defaultViewHandlerPackageName = null;
if (defaultViewHandlerInfo != null) {
defaultViewHandlerPackageName = defaultViewHandlerInfo.activityInfo.packageName;
}
// Get all apps that can handle VIEW intents.
List<ResolveInfo> resolvedActivityList = pm.queryIntentActivities(activityIntent, 0);
List<String> packagesSupportingCustomTabs = new ArrayList<>();
for (ResolveInfo info : resolvedActivityList) {
Intent serviceIntent = new Intent();
serviceIntent.setAction(CustomTabsService.ACTION_CUSTOM_TABS_CONNECTION);
serviceIntent.setPackage(info.activityInfo.packageName);
if (pm.resolveService(serviceIntent, 0) != null) {
packagesSupportingCustomTabs.add(info.activityInfo.packageName);
}
}
// Now packagesSupportingCustomTabs contains all apps that can handle both VIEW intents
// and service calls.
if (packagesSupportingCustomTabs.isEmpty()) {
sPackageNameToUse = null;
} else if (packagesSupportingCustomTabs.size() == 1) {
sPackageNameToUse = packagesSupportingCustomTabs.get(0);
} else if (!TextUtils.isEmpty(defaultViewHandlerPackageName)
&& !hasSpecializedHandlerIntents(context, activityIntent)
&& packagesSupportingCustomTabs.contains(defaultViewHandlerPackageName)) {
sPackageNameToUse = defaultViewHandlerPackageName;
} else if (packagesSupportingCustomTabs.contains(STABLE_PACKAGE)) {
sPackageNameToUse = STABLE_PACKAGE;
} else if (packagesSupportingCustomTabs.contains(BETA_PACKAGE)) {
sPackageNameToUse = BETA_PACKAGE;
} else if (packagesSupportingCustomTabs.contains(DEV_PACKAGE)) {
sPackageNameToUse = DEV_PACKAGE;
} else if (packagesSupportingCustomTabs.contains(LOCAL_PACKAGE)) {
sPackageNameToUse = LOCAL_PACKAGE;
}
return sPackageNameToUse;
}
/**
* Used to check whether there is a specialized handler for a given intent.
* @param intent The intent to check with.
* @return Whether there is a specialized handler for the given intent.
*/
private static boolean hasSpecializedHandlerIntents(Context context, Intent intent) {
try {
PackageManager pm = context.getPackageManager();
List<ResolveInfo> handlers = pm.queryIntentActivities(
intent,
PackageManager.GET_RESOLVED_FILTER);
if (handlers == null || handlers.size() == 0) {
return false;
}
for (ResolveInfo resolveInfo : handlers) {
IntentFilter filter = resolveInfo.filter;
if (filter == null) continue;
if (filter.countDataAuthorities() == 0 || filter.countDataPaths() == 0) continue;
if (resolveInfo.activityInfo == null) continue;
return true;
}
} catch (RuntimeException e) {
Log.e(TAG, "Runtime exception while getting specialized handlers");
}
return false;
}
/**
* @return All possible chrome package names that provide custom tabs feature.
*/
public static String[] getPackages() {
return new String[]{"", STABLE_PACKAGE, BETA_PACKAGE, DEV_PACKAGE, LOCAL_PACKAGE};
}
}
\ No newline at end of file
package com.commit451.gitlab.customtabs;
import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
/**
* Empty service used by the custom tab to bind to, raising the application's importance.
*/
public class KeepAliveService extends Service {
private static final Binder sBinder = new Binder();
@Override
public IBinder onBind(Intent intent) {
return sBinder;
}
}
\ No newline at end of file
Loading
Loading
@@ -23,7 +23,6 @@ import timber.log.Timber;
 
/**
* Change a users access level, either for a group or for a project
* Created by Jawn on 9/16/2015.
*/
public class AccessDialog extends AppCompatDialog {
 
Loading
Loading
package com.commit451.gitlab.dialog;
import android.content.Context;
import android.support.v7.app.AppCompatDialog;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import com.commit451.gitlab.R;
import com.commit451.gitlab.adapter.AssigneeAdapter;
import com.commit451.gitlab.api.GitLabClient;
import com.commit451.gitlab.model.api.Member;
import com.commit451.gitlab.model.api.Project;
import com.commit451.gitlab.model.api.UserBasic;
import java.util.List;
import butterknife.Bind;
import butterknife.ButterKnife;
import butterknife.OnClick;
import retrofit.Callback;
import retrofit.Response;
import retrofit.Retrofit;
import timber.log.Timber;
/**
* Assign peeps to an issue
*/
public class AssigneeDialog extends AppCompatDialog {
@Bind(R.id.list) RecyclerView mRecyclerView;
AssigneeAdapter mAssigneeAdapter;
@Bind(R.id.progress) View mProgress;
@Bind(R.id.content_root) View mContentRoot;
@OnClick(R.id.cancel_button)
void onCancel() {
dismiss();
}
@OnClick(R.id.assign_button)
void onAssign() {
//TODO assign user
mProgress.setVisibility(View.VISIBLE);
mContentRoot.animate().alpha(0.0f);
}
UserBasic mAssignee;
private final Callback<List<Member>> mUsersCallback = new Callback<List<Member>>() {
@Override
public void onResponse(Response<List<Member>> response, Retrofit retrofit) {
if (!response.isSuccess()) {
return;
}
mAssigneeAdapter.setUsers(response.body());
}
@Override
public void onFailure(Throwable t) {
Timber.e(t, null);
dismiss();
}
};
public AssigneeDialog(Context context, UserBasic assignee, Project project) {
super(context);
setContentView(R.layout.dialog_assignee);
ButterKnife.bind(this);
mAssignee = assignee;
mRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
mAssigneeAdapter = new AssigneeAdapter(context, assignee);
mRecyclerView.setAdapter(mAssigneeAdapter);
GitLabClient.instance().getProjectMembers(project.getId()).enqueue(mUsersCallback);
}
}
package com.commit451.gitlab.fragment;
 
import com.commit451.gitlab.GitLabApp;
import com.commit451.gitlab.LabCoatApp;
import com.commit451.gitlab.event.ReloadDataEvent;
import com.squareup.otto.Subscribe;
 
Loading
Loading
@@ -17,13 +17,13 @@ public class BaseFragment extends Fragment{
super.onViewCreated(view, savedInstanceState);
 
mBaseEventReceiever = new EventReceiver();
GitLabApp.bus().register(mBaseEventReceiever);
LabCoatApp.bus().register(mBaseEventReceiever);
}
 
@Override
public void onDestroyView() {
super.onDestroyView();
GitLabApp.bus().unregister(mBaseEventReceiever);
LabCoatApp.bus().unregister(mBaseEventReceiever);
}
 
protected void loadData() {
Loading
Loading
Loading
Loading
@@ -10,7 +10,7 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
 
import com.commit451.gitlab.GitLabApp;
import com.commit451.gitlab.LabCoatApp;
import com.commit451.gitlab.R;
import com.commit451.gitlab.activity.DiffActivity;
import com.commit451.gitlab.activity.ProjectActivity;
Loading
Loading
@@ -151,7 +151,7 @@ public class CommitsFragment extends BaseFragment {
ButterKnife.bind(this, view);
 
mEventReceiver = new EventReceiver();
GitLabApp.bus().register(mEventReceiver);
LabCoatApp.bus().register(mEventReceiver);
 
mCommitsAdapter = new CommitsAdapter(mCommitsAdapterListener);
mCommitsLayoutManager = new LinearLayoutManager(getActivity());
Loading
Loading
@@ -179,7 +179,7 @@ public class CommitsFragment extends BaseFragment {
public void onDestroyView() {
super.onDestroyView();
ButterKnife.unbind(this);
GitLabApp.bus().unregister(mEventReceiver);
LabCoatApp.bus().unregister(mEventReceiver);
}
 
@Override
Loading
Loading
Loading
Loading
@@ -10,7 +10,7 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
 
import com.commit451.gitlab.GitLabApp;
import com.commit451.gitlab.LabCoatApp;
import com.commit451.gitlab.R;
import com.commit451.gitlab.adapter.FeedAdapter;
import com.commit451.gitlab.api.GitLabClient;
Loading
Loading
@@ -93,7 +93,7 @@ public class FeedFragment extends BaseFragment {
private final FeedAdapter.Listener mFeedAdapterListener = new FeedAdapter.Listener() {
@Override
public void onFeedEntryClicked(Entry entry) {
IntentUtil.openPage(getActivity().getWindow().getDecorView(), entry.getLink().getHref());
IntentUtil.openPage(getActivity(), entry.getLink().getHref().toString());
}
};
 
Loading
Loading
@@ -114,7 +114,7 @@ public class FeedFragment extends BaseFragment {
ButterKnife.bind(this, view);
 
mEventReceiver = new EventReceiver();
GitLabApp.bus().register(mEventReceiver);
LabCoatApp.bus().register(mEventReceiver);
 
mFeedAdapter = new FeedAdapter(mFeedAdapterListener);
mEntryListView.setLayoutManager(new LinearLayoutManager(getActivity()));
Loading
Loading
@@ -134,7 +134,7 @@ public class FeedFragment extends BaseFragment {
public void onDestroyView() {
super.onDestroyView();
ButterKnife.unbind(this);
GitLabApp.bus().unregister(mEventReceiver);
LabCoatApp.bus().unregister(mEventReceiver);
}
 
@Override
Loading
Loading
Loading
Loading
@@ -4,6 +4,7 @@ import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.os.Bundle;
import android.support.design.widget.Snackbar;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
Loading
Loading
@@ -12,9 +13,8 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;
 
import com.commit451.gitlab.GitLabApp;
import com.commit451.gitlab.LabCoatApp;
import com.commit451.gitlab.R;
import com.commit451.gitlab.activity.ProjectActivity;
import com.commit451.gitlab.adapter.BreadcrumbAdapter;
Loading
Loading
@@ -43,6 +43,7 @@ public class FilesFragment extends BaseFragment {
return new FilesFragment();
}
 
@Bind(R.id.root) View mRoot;
@Bind(R.id.swipe_layout) SwipeRefreshLayout mSwipeRefreshLayout;
@Bind(R.id.list) RecyclerView mFilesListView;
@Bind(R.id.breadcrumb) RecyclerView mBreadcrumbListView;
Loading
Loading
@@ -133,7 +134,7 @@ public class FilesFragment extends BaseFragment {
// Creates a new text clip to put on the clipboard
ClipData clip = ClipData.newPlainText(treeItem.getName(), treeItem.getUrl(mProject, mBranchName, mCurrentPath).toString());
clipboard.setPrimaryClip(clip);
Toast.makeText(getActivity(), R.string.copied_to_clipboard, Toast.LENGTH_SHORT)
Snackbar.make(mRoot, R.string.copied_to_clipboard, Snackbar.LENGTH_SHORT)
.show();
}
 
Loading
Loading
@@ -144,7 +145,7 @@ public class FilesFragment extends BaseFragment {
 
@Override
public void onOpenInBrowserClicked(RepositoryTreeObject treeItem){
IntentUtil.openPage(getView(), treeItem.getUrl(mProject, mBranchName, mCurrentPath));
IntentUtil.openPage(getActivity(), treeItem.getUrl(mProject, mBranchName, mCurrentPath).toString());
}
};
 
Loading
Loading
@@ -159,7 +160,7 @@ public class FilesFragment extends BaseFragment {
ButterKnife.bind(this, view);
 
mEventReceiver = new EventReceiver();
GitLabApp.bus().register(mEventReceiver);
LabCoatApp.bus().register(mEventReceiver);
 
mFilesAdapter = new FilesAdapter(mFilesAdapterListener);
mFilesListView.setLayoutManager(new LinearLayoutManager(getActivity()));
Loading
Loading
@@ -189,7 +190,7 @@ public class FilesFragment extends BaseFragment {
public void onDestroyView() {
super.onDestroyView();
ButterKnife.unbind(this);
GitLabApp.bus().unregister(mEventReceiver);
LabCoatApp.bus().unregister(mEventReceiver);
}
 
@Override
Loading
Loading
@@ -234,7 +235,7 @@ public class FilesFragment extends BaseFragment {
 
private void updateBreadcrumbs() {
List<BreadcrumbAdapter.Breadcrumb> breadcrumbs = new ArrayList<>();
breadcrumbs.add(new BreadcrumbAdapter.Breadcrumb(mProject.getName(), new BreadcrumbAdapter.Listener() {
breadcrumbs.add(new BreadcrumbAdapter.Breadcrumb(getString(R.string.root), new BreadcrumbAdapter.Listener() {
@Override
public void onClick() {
loadData("");
Loading
Loading
package com.commit451.gitlab.fragment;
 
import com.commit451.gitlab.GitLabApp;
import android.os.Bundle;
import android.support.design.widget.Snackbar;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.commit451.gitlab.LabCoatApp;
import com.commit451.gitlab.R;
import com.commit451.gitlab.adapter.GroupMembersAdapter;
import com.commit451.gitlab.api.GitLabClient;
Loading
Loading
@@ -14,16 +24,6 @@ import com.squareup.otto.Subscribe;
 
import org.parceler.Parcels;
 
import android.os.Bundle;
import android.support.design.widget.Snackbar;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.List;
 
import butterknife.Bind;
Loading
Loading
@@ -182,7 +182,7 @@ public class GroupMembersFragment extends BaseFragment {
ButterKnife.bind(this, view);
 
mEventReceiver = new EventReceiver();
GitLabApp.bus().register(mEventReceiver);
LabCoatApp.bus().register(mEventReceiver);
 
mGroupMembersAdapter = new GroupMembersAdapter(mListener);
mRecyclerView.setLayoutManager(new GridLayoutManager(getActivity(), 2));
Loading
Loading
@@ -202,12 +202,12 @@ public class GroupMembersFragment extends BaseFragment {
public void onDestroyView() {
super.onDestroyView();
ButterKnife.unbind(this);
GitLabApp.bus().unregister(mEventReceiver);
LabCoatApp.bus().unregister(mEventReceiver);
}
 
@OnClick(R.id.add_user_button)
public void onAddUserClick() {
NavigationManager.navigateToAddGroupMember(getActivity(), mGroup);
public void onAddUserClick(View fab) {
NavigationManager.navigateToAddGroupMember(getActivity(), fab, mGroup);
}
 
public void loadData() {
Loading
Loading
Loading
Loading
@@ -14,7 +14,7 @@ import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;
 
import com.commit451.gitlab.GitLabApp;
import com.commit451.gitlab.LabCoatApp;
import com.commit451.gitlab.R;
import com.commit451.gitlab.activity.ProjectActivity;
import com.commit451.gitlab.adapter.IssuesAdapter;
Loading
Loading
@@ -184,7 +184,7 @@ public class IssuesFragment extends BaseFragment {
ButterKnife.bind(this, view);
 
mEventReceiver = new EventReceiver();
GitLabApp.bus().register(mEventReceiver);
LabCoatApp.bus().register(mEventReceiver);
 
mIssuesAdapter = new IssuesAdapter(mIssuesAdapterListener);
mIssuesLayoutManager = new LinearLayoutManager(getActivity());
Loading
Loading
@@ -214,7 +214,7 @@ public class IssuesFragment extends BaseFragment {
public void onDestroyView() {
super.onDestroyView();
ButterKnife.unbind(this);
GitLabApp.bus().unregister(mEventReceiver);
LabCoatApp.bus().unregister(mEventReceiver);
}
 
@OnClick(R.id.add_issue_button)
Loading
Loading
Loading
Loading
@@ -13,7 +13,7 @@ import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;
 
import com.commit451.gitlab.GitLabApp;
import com.commit451.gitlab.LabCoatApp;
import com.commit451.gitlab.R;
import com.commit451.gitlab.activity.ProjectActivity;
import com.commit451.gitlab.adapter.MergeRequestAdapter;
Loading
Loading
@@ -174,7 +174,7 @@ public class MergeRequestsFragment extends BaseFragment {
ButterKnife.bind(this, view);
 
mEventReceiver = new EventReceiver();
GitLabApp.bus().register(mEventReceiver);
LabCoatApp.bus().register(mEventReceiver);
 
mMergeRequestAdapter = new MergeRequestAdapter(mMergeRequestAdapterListener);
mMergeLayoutManager = new LinearLayoutManager(getActivity());
Loading
Loading
@@ -204,7 +204,7 @@ public class MergeRequestsFragment extends BaseFragment {
public void onDestroyView() {
super.onDestroyView();
ButterKnife.unbind(this);
GitLabApp.bus().unregister(mEventReceiver);
LabCoatApp.bus().unregister(mEventReceiver);
}
 
@Override
Loading
Loading
Loading
Loading
@@ -14,7 +14,7 @@ import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;
 
import com.commit451.gitlab.GitLabApp;
import com.commit451.gitlab.LabCoatApp;
import com.commit451.gitlab.R;
import com.commit451.gitlab.activity.ProjectActivity;
import com.commit451.gitlab.adapter.MilestoneAdapter;
Loading
Loading
@@ -189,7 +189,7 @@ public class MilestonesFragment extends BaseFragment {
ButterKnife.bind(this, view);
 
mEventReceiver = new EventReceiver();
GitLabApp.bus().register(mEventReceiver);
LabCoatApp.bus().register(mEventReceiver);
 
mMilestoneAdapter = new MilestoneAdapter(mMilestoneListener);
mMilestoneLayoutManager = new LinearLayoutManager(getActivity());
Loading
Loading
@@ -219,7 +219,7 @@ public class MilestonesFragment extends BaseFragment {
public void onDestroyView() {
super.onDestroyView();
ButterKnife.unbind(this);
GitLabApp.bus().unregister(mEventReceiver);
LabCoatApp.bus().unregister(mEventReceiver);
}
 
@Override
Loading
Loading
Loading
Loading
@@ -11,7 +11,7 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
 
import com.commit451.gitlab.GitLabApp;
import com.commit451.gitlab.LabCoatApp;
import com.commit451.gitlab.R;
import com.commit451.gitlab.activity.ProjectActivity;
import com.commit451.gitlab.api.GitLabClient;
Loading
Loading
@@ -19,6 +19,7 @@ import com.commit451.gitlab.event.ProjectReloadEvent;
import com.commit451.gitlab.model.api.Project;
import com.commit451.gitlab.model.api.RepositoryFile;
import com.commit451.gitlab.model.api.RepositoryTreeObject;
import com.commit451.gitlab.util.NavigationManager;
import com.commit451.gitlab.util.PicassoImageGetter;
import com.squareup.otto.Subscribe;
 
Loading
Loading
@@ -27,6 +28,7 @@ import java.util.List;
 
import butterknife.Bind;
import butterknife.ButterKnife;
import butterknife.OnClick;
import in.uncod.android.bypass.Bypass;
import retrofit.Callback;
import retrofit.Response;
Loading
Loading
@@ -40,6 +42,7 @@ public class OverviewFragment extends BaseFragment {
}
 
@Bind(R.id.swipe_layout) SwipeRefreshLayout mSwipeRefreshLayout;
@Bind(R.id.creator) TextView mCreatorView;
@Bind(R.id.star_count) TextView mStarCountView;
@Bind(R.id.forks_count) TextView mForksCountView;
@Bind(R.id.overview_text) TextView mOverviewVew;
Loading
Loading
@@ -49,6 +52,17 @@ public class OverviewFragment extends BaseFragment {
private EventReceiver mEventReceiver;
private Bypass mBypass;
 
@OnClick(R.id.creator)
void onCreatorClick() {
if (mProject != null) {
if (mProject.belongsToGroup()) {
NavigationManager.navigateToGroup(getActivity(), mProject.getNamespace().getId());
} else {
NavigationManager.navigateToUser(getActivity(), mProject.getOwner());
}
}
}
private final Callback<List<RepositoryTreeObject>> mFilesCallback = new Callback<List<RepositoryTreeObject>>() {
@Override
public void onResponse(Response<List<RepositoryTreeObject>> response, Retrofit retrofit) {
Loading
Loading
@@ -106,7 +120,7 @@ public class OverviewFragment extends BaseFragment {
String text = new String(Base64.decode(response.body().getContent(), Base64.DEFAULT), Charset.forName("UTF-8"));
 
mOverviewVew.setText(mBypass.markdownToSpannable(text,
new PicassoImageGetter(mOverviewVew, getResources(), GitLabClient.getPicasso())));
new PicassoImageGetter(mOverviewVew, GitLabClient.getPicasso())));
}
 
@Override
Loading
Loading
@@ -141,7 +155,7 @@ public class OverviewFragment extends BaseFragment {
ButterKnife.bind(this, view);
 
mEventReceiver = new EventReceiver();
GitLabApp.bus().register(mEventReceiver);
LabCoatApp.bus().register(mEventReceiver);
 
mOverviewVew.setMovementMethod(LinkMovementMethod.getInstance());
 
Loading
Loading
@@ -166,7 +180,7 @@ public class OverviewFragment extends BaseFragment {
public void onDestroyView() {
super.onDestroyView();
ButterKnife.unbind(this);
GitLabApp.bus().unregister(mEventReceiver);
LabCoatApp.bus().unregister(mEventReceiver);
}
 
@Override
Loading
Loading
@@ -193,6 +207,11 @@ public class OverviewFragment extends BaseFragment {
}
 
private void bindProject(Project project) {
if (project.belongsToGroup()) {
mCreatorView.setText(String.format(getString(R.string.created_by), project.getNamespace().getName()));
} else {
mCreatorView.setText(String.format(getString(R.string.created_by), project.getOwner().getUsername()));
}
mStarCountView.setText(String.valueOf(project.getStarCount()));
mForksCountView.setText(String.valueOf(project.getForksCount()));
}
Loading
Loading
Loading
Loading
@@ -12,7 +12,7 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
 
import com.commit451.gitlab.GitLabApp;
import com.commit451.gitlab.LabCoatApp;
import com.commit451.gitlab.R;
import com.commit451.gitlab.activity.ProjectActivity;
import com.commit451.gitlab.adapter.MemberAdapter;
Loading
Loading
@@ -202,7 +202,7 @@ public class ProjectMembersFragment extends BaseFragment {
ButterKnife.bind(this, view);
 
mEventReceiver = new EventReceiver();
GitLabApp.bus().register(mEventReceiver);
LabCoatApp.bus().register(mEventReceiver);
 
mAdapter = new MemberAdapter(mMemberAdapterListener);
mProjectLayoutManager = new GridLayoutManager(getActivity(), 2);
Loading
Loading
@@ -231,7 +231,7 @@ public class ProjectMembersFragment extends BaseFragment {
public void onDestroyView() {
super.onDestroyView();
ButterKnife.unbind(this);
GitLabApp.bus().unregister(mEventReceiver);
LabCoatApp.bus().unregister(mEventReceiver);
}
 
@OnClick(R.id.add_user_button)
Loading
Loading
Loading
Loading
@@ -5,7 +5,6 @@ import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.view.LayoutInflater;
Loading
Loading
@@ -13,7 +12,7 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
 
import com.commit451.gitlab.GitLabApp;
import com.commit451.gitlab.LabCoatApp;
import com.commit451.gitlab.R;
import com.commit451.gitlab.adapter.UsersAdapter;
import com.commit451.gitlab.api.GitLabClient;
Loading
Loading
@@ -55,7 +54,7 @@ public class UsersFragment extends BaseFragment {
@Bind(R.id.swipe_layout) SwipeRefreshLayout mSwipeRefreshLayout;
@Bind(R.id.list) RecyclerView mUsersListView;
@Bind(R.id.message_text) TextView mMessageView;
private LinearLayoutManager mUserLinearLayoutManager;
private GridLayoutManager mUserLinearLayoutManager;
 
private String mQuery;
private EventReceiver mEventReceiver;
Loading
Loading
@@ -138,12 +137,14 @@ public class UsersFragment extends BaseFragment {
}
mUsersAdapter.addData(response.body());
mNextPageUrl = PaginationUtil.parse(response).getNext();
mUsersAdapter.setLoading(false);
}
 
@Override
public void onFailure(Throwable t) {
Timber.e(t, null);
mLoading = false;
mUsersAdapter.setLoading(false);
}
};
 
Loading
Loading
@@ -165,10 +166,11 @@ public class UsersFragment extends BaseFragment {
ButterKnife.bind(this, view);
 
mEventReceiver = new EventReceiver();
GitLabApp.bus().register(mEventReceiver);
LabCoatApp.bus().register(mEventReceiver);
 
mUsersAdapter = new UsersAdapter(mUsersAdapterListener);
mUserLinearLayoutManager = new GridLayoutManager(getActivity(), 2);
mUserLinearLayoutManager.setSpanSizeLookup(mUsersAdapter.getSpanSizeLookup());
mUsersListView.setLayoutManager(mUserLinearLayoutManager);
mUsersListView.setAdapter(mUsersAdapter);
mUsersListView.addOnScrollListener(mOnScrollListener);
Loading
Loading
@@ -187,7 +189,7 @@ public class UsersFragment extends BaseFragment {
public void onDestroyView() {
super.onDestroyView();
ButterKnife.unbind(this);
GitLabApp.bus().unregister(mEventReceiver);
LabCoatApp.bus().unregister(mEventReceiver);
}
 
@Override
Loading
Loading
@@ -216,7 +218,8 @@ public class UsersFragment extends BaseFragment {
 
private void loadMore() {
mLoading = true;
Timber.d("loadMore called for " + mNextPageUrl.toString() + " " + mQuery);
mUsersAdapter.setLoading(true);
Timber.d("loadMore called for %s %s", mNextPageUrl.toString(), mQuery);
GitLabClient.instance().searchUsers(mNextPageUrl.toString(), mQuery).enqueue(mMoreUsersCallback);
}
 
Loading
Loading
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