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

Merge branch 'master' into fdroid

# Conflicts:
#	app/build.gradle
#	app/src/main/java/com/commit451/gitlab/App.java
parents b7633464 230cbe28
No related branches found
No related tags found
No related merge requests found
Pipeline #
Showing
with 404 additions and 109 deletions
Loading
Loading
@@ -31,16 +31,18 @@ The following 3rd party libraries and resources are the reason this app works. R
- Parceler (https://github.com/johncarl81/parceler)
- Bypasses (https://github.com/Commit451/bypasses)
- Easel (https://github.com/Commit451/Easel)
- ForegroundViews (https://github.com/Commit451/ForegroundViews)
- ElasticDragDismissLayout (https://github.com/Commit451/ElasticDragDismissLayout)
- AdapterLayout (https://github.com/Commit451/AdapterLayout)
- Gimbal (https://github.com/Commit451/Gimbal)
- Teleprinter (https://github.com/Commit451/Teleprinter)
- BypassPicassoImageGetter (https://github.com/Commit451/BypassPicassoImageGetter)
- Jounce (https://github.com/Commit451/Jounce)
- EasyCallback (https://github.com/Commit451/EasyCallback)
- ForegroundViews (https://github.com/Commit451/ForegroundViews)
- Material-ish Progress (https://github.com/pnikosis/materialish-progress)
- PhysicsLayout (https://github.com/Jawnnypoo/PhysicsLayout)
- Material Letter Icon (https://github.com/IvBaranov/MaterialLetterIcon)
- RecyclerViewSquire (https://github.com/AlexKGwyn/RecyclerViewSquire)
- RobotoTextView (https://github.com/johnkil/Android-RobotoTextView)
- GitDiffTextView (https://github.com/alorma/GitDiffTextView)
- MaterialDateTimePicker (https://github.com/wdullaer/MaterialDateTimePicker)
Loading
Loading
def versionMajor = 2
def versionMinor = 2
def versionPatch = 6
def versionBuild = 2 // bump for dogfood builds, public betas, etc.
apply plugin: 'com.android.application'
apply plugin: 'com.neenbedankt.android-apt'
 
def versionMajor = 2
def versionMinor = 2
def versionPatch = 7
def versionBuild = 0 // bump for dogfood builds, public betas, etc.
android {
compileSdkVersion 24
buildToolsVersion "24.0.0"
Loading
Loading
@@ -17,6 +17,7 @@ android {
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
versionCode versionMajor * 1000000 + versionMinor * 10000 + versionPatch * 100 + versionBuild
versionName "${versionMajor}.${versionMinor}.${versionPatch}"
vectorDrawables.useSupportLibrary = true
}
buildTypes {
release {
Loading
Loading
@@ -36,7 +37,7 @@ android {
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
testCompile 'org.robolectric:robolectric:3.1'
testCompile 'org.robolectric:robolectric:3.1.1'
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3.1'
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3.1'
 
Loading
Loading
@@ -47,21 +48,22 @@ dependencies {
compile 'com.android.support:palette-v7:24.0.0'
compile 'com.android.support:customtabs:24.0.0'
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.github.aurae.retrofit2:converter-logansquare:1.4.1'
compile('com.squareup.retrofit2:converter-simplexml:2.1.0') {
exclude group: 'xpp3', module: 'xpp3'
exclude group: 'stax', module: 'stax-api'
exclude group: 'stax', module: 'stax'
}
compile 'com.github.aurae.retrofit2:converter-logansquare:1.4.1'
compile 'com.squareup.okhttp3:okhttp:3.4.1'
compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'
compile 'com.squareup.picasso:picasso:2.5.2'
compile 'com.jakewharton.picasso:picasso2-okhttp3-downloader:1.0.2'
compile 'com.squareup:otto:1.3.8'
compile 'io.reactivex:rxjava:1.1.7'
compile 'com.artemzin.rxjava:proguard-rules:1.1.7.0'
compile 'io.reactivex:rxandroid:1.2.1'
compile 'com.jakewharton:butterknife:8.2.0'
apt 'com.jakewharton:butterknife-compiler:8.2.0'
compile 'com.jakewharton:butterknife:8.2.1'
apt 'com.jakewharton:butterknife-compiler:8.2.1'
compile 'com.jakewharton.timber:timber:4.1.2'
apt 'com.bluelinelabs:logansquare-compiler:1.3.7'
compile 'com.bluelinelabs:logansquare:1.3.7'
Loading
Loading
@@ -69,10 +71,10 @@ dependencies {
compile 'org.parceler:parceler-api:1.1.5'
apt 'org.parceler:parceler:1.1.5'
compile 'com.commit451:bypasses:1.0.1'
compile 'com.commit451:elasticdragdismisslayout:1.0.2'
compile 'com.github.Commit451:ElasticDragDismissLayout:1.0.3'
compile 'com.github.Commit451:AdapterLayout:1.0.2'
compile 'com.github.Commit451:Easel:1.0.0'
compile 'com.github.Commit451:Gimbal:1.0.0'
compile 'com.github.Commit451:Gimbal:2.0.0'
compile 'com.github.Commit451:Teleprinter:1.0.2'
compile 'com.github.Commit451:BypassPicassoImageGetter:1.0.0'
compile 'com.github.Commit451:Jounce:1.0.1'
Loading
Loading
@@ -84,7 +86,7 @@ dependencies {
compile 'com.github.ivbaranov:materiallettericon:0.2.2'
compile 'com.github.johnkil.android-robototextview:robototextview:2.5.0'
compile 'com.github.alorma:diff-textview:1.3.0'
compile 'com.wdullaer:materialdatetimepicker:2.3.0'
compile 'com.wdullaer:materialdatetimepicker:2.4.0'
compile 'com.wefika:flowlayout:0.4.1'
compile 'com.github.novoda:simple-chrome-custom-tabs:0.1.3-rc1'
 
Loading
Loading
Loading
Loading
@@ -23,7 +23,6 @@
 
# So that Fabric can still have line numbers
-keepattributes SourceFile,LineNumberTable
-keep class com.commit451.gitlab.ssl.CustomSSLSocketFactory
 
# Picasso rules
-dontwarn com.squareup.okhttp.**
Loading
Loading
@@ -38,7 +37,6 @@
-dontwarn okhttp3.**
-dontwarn okio.**
-dontwarn retrofit2.**
-dontwarn rx.**
 
-keepclasseswithmembers class * {
@retrofit2.http.* <methods>;
Loading
Loading
@@ -126,4 +124,7 @@
-keep class org.parceler.Parceler$$Parcels
 
# Unicoding Bypass library
-keep class in.uncod.android.** { *; }
\ No newline at end of file
-keep class in.uncod.android.** { *; }
# Custom rules
-keep class com.commit451.gitlab.ssl.CustomSSLSocketFactory
\ No newline at end of file
Loading
Loading
@@ -38,7 +38,8 @@
android:launchMode="singleTask"
android:theme="@style/Activity.Activity"/>
<activity android:name=".activity.ProjectActivity"/>
<activity android:name=".activity.LoginActivity"/>
<activity android:name=".activity.LoginActivity"
android:theme="@style/Activity.Login"/>
<activity android:name=".activity.FileActivity"/>
<activity android:name=".activity.IssueActivity"/>
<activity android:name=".activity.DiffActivity"/>
Loading
Loading
@@ -61,6 +62,7 @@
android:theme="@style/Activity.Translucent"/>
<activity android:name=".activity.SettingsActivity"/>
<activity android:name=".activity.AddLabelActivity"/>
<activity android:name=".activity.AddNewLabelActivity"/>
 
<activity
android:name=".activity.RoutingActivity"
Loading
Loading
Loading
Loading
@@ -7,15 +7,26 @@ import android.net.Uri;
import android.support.annotation.VisibleForTesting;
 
import com.bluelinelabs.logansquare.LoganSquare;
import com.commit451.gitlab.api.GitLab;
import com.commit451.gitlab.api.GitLabFactory;
import com.commit451.gitlab.api.GitLabRss;
import com.commit451.gitlab.api.GitLabRssFactory;
import com.commit451.gitlab.api.OkHttpClientFactory;
import com.commit451.gitlab.api.PicassoFactory;
import com.commit451.gitlab.api.converter.UriTypeConverter;
import com.commit451.gitlab.model.Account;
import com.novoda.simplechromecustomtabs.SimpleChromeCustomTabs;
import com.squareup.leakcanary.LeakCanary;
import com.squareup.otto.Bus;
import com.squareup.picasso.Picasso;
 
import net.danlew.android.joda.JodaTimeAndroid;
 
import java.util.List;
import java.util.Locale;
 
import okhttp3.OkHttpClient;
import okhttp3.logging.HttpLoggingInterceptor;
import timber.log.Timber;
 
/**
Loading
Loading
@@ -24,13 +35,16 @@ import timber.log.Timber;
public class App extends Application {
 
/**
* Register our type converters on our singleton LoganSquare create
* Register our type converters on our singleton LoganSquare instance. Needs to be set here
* since we are fetching accounts immediately with LoganSquare
*/
static {
LoganSquare.registerTypeConverter(Uri.class, new UriTypeConverter());
}
 
private static Bus sBus;
private static App sInstance;
public static Bus bus() {
if (sBus == null) {
sBus = new Bus();
Loading
Loading
@@ -38,11 +52,15 @@ public class App extends Application {
return sBus;
}
 
private static App sInstance;
public static App instance() {
return sInstance;
}
 
private Account mAccount;
private GitLab mGitLab;
private GitLabRss mGitLabRss;
private Picasso mPicasso;
@Override
public void onCreate() {
super.onCreate();
Loading
Loading
@@ -57,6 +75,11 @@ public class App extends Application {
 
JodaTimeAndroid.init(this);
SimpleChromeCustomTabs.initialize(this);
List<Account> accounts = Account.getAccounts(this);
if(!accounts.isEmpty()) {
setAccount(accounts.get(0));
}
}
 
@VisibleForTesting
Loading
Loading
@@ -81,4 +104,51 @@ public class App extends Application {
Timber.e(e, null);
}
}
public GitLab getGitLab() {
return mGitLab;
}
public GitLabRss getGitLabRss() {
return mGitLabRss;
}
public Picasso getPicasso() {
return mPicasso;
}
public Account getAccount() {
return mAccount;
}
public void setAccount(Account account) {
mAccount = account;
OkHttpClient.Builder clientBuilder = OkHttpClientFactory.create(account);
if (BuildConfig.DEBUG) {
clientBuilder.addInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY));
}
OkHttpClient client = clientBuilder.build();
initGitLab(account, client);
initGitLabRss(account, client);
//This is kinda weird, but basically, I don't want to see all the annoying logs from bitmap
//decoding since the Okhttpclient is going to log everything, but it does not matter in release
//builds, and will actually speed up the init time to share the same client between all these
if (BuildConfig.DEBUG) {
initPicasso(OkHttpClientFactory.create(account).build());
} else {
initPicasso(client);
}
}
private void initGitLab(Account account, OkHttpClient client) {
mGitLab = GitLabFactory.create(account, client);
}
private void initGitLabRss(Account account, OkHttpClient client) {
mGitLabRss = GitLabRssFactory.create(account, client);
}
private void initPicasso(OkHttpClient client) {
mPicasso = PicassoFactory.createPicasso(client);
}
}
Loading
Loading
@@ -17,10 +17,10 @@ import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
 
import com.commit451.gitbal.Gimbal;
import com.commit451.gitlab.R;
import com.commit451.easycallback.EasyCallback;
import com.commit451.gitlab.api.GitLabClient;
import com.commit451.gimbal.Gimbal;
import com.commit451.gitlab.App;
import com.commit451.gitlab.R;
import com.commit451.gitlab.model.api.Contributor;
import com.commit451.gitlab.navigation.Navigator;
import com.commit451.gitlab.transformation.CircleTransformation;
Loading
Loading
@@ -64,7 +64,7 @@ public class AboutActivity extends BaseActivity {
 
@OnClick(R.id.sauce)
void onSauceClick() {
if (getString(R.string.url_gitlab).equals(GitLabClient.getAccount().getServerUrl().toString())) {
if (getString(R.string.url_gitlab).equals(App.instance().getAccount().getServerUrl().toString())) {
Navigator.navigateToProject(AboutActivity.this, REPO_ID);
} else {
IntentUtil.openPage(AboutActivity.this, getString(R.string.source_url));
Loading
Loading
@@ -125,7 +125,7 @@ public class AboutActivity extends BaseActivity {
mPhysicsLayout.getPhysics().enableFling();
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
gravitySensor = sensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY);
GitLabClient.instance().getContributors(REPO_ID).enqueue(mContributorResponseCallback);
App.instance().getGitLab().getContributors(REPO_ID).enqueue(mContributorResponseCallback);
mProgress.setVisibility(View.VISIBLE);
}
 
Loading
Loading
@@ -166,7 +166,7 @@ public class AboutActivity extends BaseActivity {
}
 
Uri url = ImageUtil.getAvatarUrl(contributor.getEmail(), imageSize);
GitLabClient.getPicasso()
App.instance().getPicasso()
.load(url)
.transform(new CircleTransformation())
.into(imageView);
Loading
Loading
Loading
Loading
@@ -11,7 +11,6 @@ import android.view.View;
 
import com.commit451.gitlab.App;
import com.commit451.gitlab.R;
import com.commit451.gitlab.api.GitLabClient;
import com.commit451.gitlab.event.CloseDrawerEvent;
import com.commit451.gitlab.fragment.FeedFragment;
import com.squareup.otto.Subscribe;
Loading
Loading
@@ -57,7 +56,7 @@ public class ActivityActivity extends BaseActivity {
 
FeedFragment feedFragment = (FeedFragment) getSupportFragmentManager().findFragmentByTag(TAG_FEED_FRAGMENT);
if (feedFragment == null) {
Uri feedUri = GitLabClient.getAccount().getServerUrl();
Uri feedUri = App.instance().getAccount().getServerUrl();
 
feedUri = feedUri.buildUpon()
.appendPath("dashboard")
Loading
Loading
Loading
Loading
@@ -4,25 +4,26 @@ import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.Snackbar;
import android.support.design.widget.TextInputLayout;
import android.support.v7.widget.Toolbar;
import android.text.TextUtils;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.Spinner;
import android.widget.TextView;
 
import com.commit451.easycallback.EasyCallback;
import com.commit451.easycallback.NullBodyException;
import com.commit451.gitlab.App;
import com.commit451.gitlab.R;
import com.commit451.gitlab.adapter.AddIssueLabelAdapter;
import com.commit451.gitlab.adapter.AssigneeSpinnerAdapter;
import com.commit451.gitlab.adapter.MilestoneSpinnerAdapter;
import com.commit451.easycallback.EasyCallback;
import com.commit451.gitlab.api.GitLabClient;
import com.commit451.gitlab.api.exception.NullBodyException;
import com.commit451.gitlab.event.IssueChangedEvent;
import com.commit451.gitlab.event.IssueCreatedEvent;
import com.commit451.gitlab.model.api.Issue;
Loading
Loading
@@ -88,10 +89,10 @@ public class AddIssueActivity extends MorphActivity {
TextView mLabelLabel;
@BindView(R.id.labels_progress)
View mLabelsProgress;
@BindView(R.id.root_add_labels)
ViewGroup mRootAddLabels;
@BindView(R.id.list_labels)
AdapterFlowLayout mListLabels;
@BindView(R.id.text_add_labels)
TextView mTextAddLabels;
 
private Project mProject;
private Issue mIssue;
Loading
Loading
@@ -99,7 +100,7 @@ public class AddIssueActivity extends MorphActivity {
private AddIssueLabelAdapter mLabelsAdapter;
private Teleprinter mTeleprinter;
 
@OnClick(R.id.text_add_labels)
@OnClick(R.id.root_add_labels)
void onAddLabelsClick() {
Navigator.navigateToAddLabels(AddIssueActivity.this, mProject, REQUEST_LABEL);
}
Loading
Loading
@@ -135,7 +136,7 @@ public class AddIssueActivity extends MorphActivity {
mMembers.addAll(response);
if (mProject.belongsToGroup()) {
Timber.d("Project belongs to a group, loading those users too");
GitLabClient.instance().getGroupMembers(mProject.getNamespace().getId()).enqueue(mGroupMembersCallback);
App.instance().getGitLab().getGroupMembers(mProject.getNamespace().getId()).enqueue(mGroupMembersCallback);
} else {
setAssignees();
}
Loading
Loading
@@ -168,7 +169,7 @@ public class AddIssueActivity extends MorphActivity {
@Override
public void success(@NonNull List<Label> response) {
mLabelsProgress.setVisibility(View.GONE);
mListLabels.setVisibility(View.VISIBLE);
mRootAddLabels.setVisibility(View.VISIBLE);
setLabels(response);
}
 
Loading
Loading
@@ -250,9 +251,9 @@ public class AddIssueActivity extends MorphActivity {
}
 
private void load() {
GitLabClient.instance().getMilestones(mProject.getId(), getString(R.string.milestone_state_value_default)).enqueue(mMilestonesCallback);
GitLabClient.instance().getProjectMembers(mProject.getId()).enqueue(mAssigneeCallback);
GitLabClient.instance().getLabels(mProject.getId()).enqueue(mLabelCallback);
App.instance().getGitLab().getMilestones(mProject.getId(), getString(R.string.milestone_state_value_default)).enqueue(mMilestonesCallback);
App.instance().getGitLab().getProjectMembers(mProject.getId()).enqueue(mAssigneeCallback);
App.instance().getGitLab().getLabels(mProject.getId()).enqueue(mLabelCallback);
}
 
private void showLoading() {
Loading
Loading
@@ -293,8 +294,24 @@ public class AddIssueActivity extends MorphActivity {
if (!currentLabels.isEmpty()) {
mLabelsAdapter.setLabels(currentLabels);
}
} else {
mTextAddLabels.setVisibility(View.VISIBLE);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case REQUEST_LABEL:
if (resultCode == RESULT_OK) {
Label label = Parcels.unwrap(data.getParcelableExtra(AddLabelActivity.KEY_LABEL));
if (mLabelsAdapter.containsLabel(label)) {
Snackbar.make(mRoot, R.string.label_already_added, Snackbar.LENGTH_SHORT)
.show();
} else {
mLabelsAdapter.addLabel(label);
}
}
break;
}
}
 
Loading
Loading
@@ -326,30 +343,35 @@ public class AddIssueActivity extends MorphActivity {
milestoneId = milestone.getId();
}
}
String labelsCommaSeperated = mLabelsAdapter.getCommaSeperatedStringOfLabels();
createOrSaveIssue(mTitleInput.getText().toString(),
mDescriptionInput.getText().toString(),
assigneeId,
milestoneId);
milestoneId,
labelsCommaSeperated);
} else {
mTitleInputLayout.setError(getString(R.string.required_field));
}
}
 
private void createOrSaveIssue(String title, String description, Long assigneeId, Long milestoneId) {
private void createOrSaveIssue(String title, String description, @Nullable Long assigneeId,
@Nullable Long milestoneId, @Nullable String labels) {
if (mIssue == null) {
GitLabClient.instance().createIssue(
App.instance().getGitLab().createIssue(
mProject.getId(),
title,
description,
assigneeId,
milestoneId).enqueue(mIssueCreatedCallback);
milestoneId,
labels).enqueue(mIssueCreatedCallback);
} else {
GitLabClient.instance().updateIssue(mProject.getId(),
App.instance().getGitLab().updateIssue(mProject.getId(),
mIssue.getId(),
title,
description,
assigneeId,
milestoneId).enqueue(mIssueCreatedCallback);
milestoneId,
labels).enqueue(mIssueCreatedCallback);
}
}
 
Loading
Loading
Loading
Loading
@@ -8,17 +8,21 @@ import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
 
import com.commit451.easycallback.EasyCallback;
import com.commit451.gitlab.App;
import com.commit451.gitlab.R;
import com.commit451.gitlab.adapter.LabelAdapter;
import com.commit451.gitlab.api.GitLabClient;
import com.commit451.gitlab.model.api.Label;
import com.commit451.gitlab.navigation.Navigator;
import com.commit451.gitlab.viewHolder.LabelViewHolder;
 
import org.parceler.Parcels;
import java.util.List;
 
import butterknife.BindView;
Loading
Loading
@@ -31,6 +35,9 @@ import timber.log.Timber;
public class AddLabelActivity extends BaseActivity {
 
private static final String KEY_PROJECT_ID = "project_id";
private static final int REQUEST_NEW_LABEL = 1;
public static final String KEY_LABEL = "label";
 
public static Intent newIntent(Context context, long projectId) {
Intent intent = new Intent(context, AddLabelActivity.class);
Loading
Loading
@@ -60,6 +67,18 @@ public class AddLabelActivity extends BaseActivity {
 
mProjectId = getIntent().getLongExtra(KEY_PROJECT_ID, -1);
mToolbar.setTitle(R.string.labels);
mToolbar.inflateMenu(R.menu.menu_add_label);
mToolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_add_label:
Navigator.navigateToAddNewLabel(AddLabelActivity.this, mProjectId, REQUEST_NEW_LABEL);
return true;
}
return false;
}
});
mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
Loading
Loading
@@ -69,12 +88,10 @@ public class AddLabelActivity extends BaseActivity {
mLabelAdapter = new LabelAdapter(new LabelAdapter.Listener() {
@Override
public void onLabelClicked(Label label, LabelViewHolder viewHolder) {
}
@Override
public void onAddLabelClicked() {
Intent data = new Intent();
data.putExtra(KEY_LABEL, Parcels.wrap(label));
setResult(RESULT_OK, data);
finish();
}
});
mList.setAdapter(mLabelAdapter);
Loading
Loading
@@ -101,7 +118,7 @@ public class AddLabelActivity extends BaseActivity {
}
}
});
GitLabClient.instance().getLabels(mProjectId).enqueue(new EasyCallback<List<Label>>() {
App.instance().getGitLab().getLabels(mProjectId).enqueue(new EasyCallback<List<Label>>() {
@Override
public void success(@NonNull List<Label> response) {
mSwipeRefreshLayout.setRefreshing(false);
Loading
Loading
@@ -119,4 +136,17 @@ public class AddLabelActivity extends BaseActivity {
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case REQUEST_NEW_LABEL:
if (resultCode == RESULT_OK) {
Label newLabel = Parcels.unwrap(data.getParcelableExtra(AddNewLabelActivity.KEY_NEW_LABEL));
mLabelAdapter.addLabel(newLabel);
}
break;
}
}
}
Loading
Loading
@@ -19,7 +19,7 @@ import com.commit451.easel.Easel;
import com.commit451.gitlab.App;
import com.commit451.gitlab.R;
import com.commit451.easycallback.EasyCallback;
import com.commit451.gitlab.api.GitLabClient;
import com.commit451.gitlab.api.GitLabFactory;
import com.commit451.gitlab.event.MilestoneChangedEvent;
import com.commit451.gitlab.event.MilestoneCreatedEvent;
import com.commit451.gitlab.model.api.Milestone;
Loading
Loading
@@ -176,12 +176,12 @@ public class AddMilestoneActivity extends MorphActivity {
}
 
if (mMilestone == null) {
GitLabClient.instance().createMilestone(mProjectId,
App.instance().getGitLab().createMilestone(mProjectId,
mTitle.getText().toString(),
mDescription.getText().toString(),
dueDate).enqueue(mMilestoneCallback);
} else {
GitLabClient.instance().editMilestone(mProjectId,
App.instance().getGitLab().editMilestone(mProjectId,
mMilestone.getId(),
mTitle.getText().toString(),
mDescription.getText().toString(),
Loading
Loading
package com.commit451.gitlab.activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.support.annotation.ColorInt;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.Snackbar;
import android.support.design.widget.TextInputLayout;
import android.support.v7.widget.Toolbar;
import android.text.TextUtils;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.afollestad.materialdialogs.color.ColorChooserDialog;
import com.commit451.easycallback.EasyCallback;
import com.commit451.easycallback.HttpException;
import com.commit451.gitlab.App;
import com.commit451.gitlab.R;
import com.commit451.gitlab.model.api.Label;
import com.commit451.gitlab.util.ColorUtil;
import com.commit451.gitlab.util.Validator;
import org.parceler.Parcels;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import timber.log.Timber;
/**
* Create a brand new label
*/
public class AddNewLabelActivity extends BaseActivity implements ColorChooserDialog.ColorCallback {
private static final String KEY_PROJECT_ID = "project_id";
public static final String KEY_NEW_LABEL = "new_label";
public static Intent newIntent(Context context, long projectId) {
Intent intent = new Intent(context, AddNewLabelActivity.class);
intent.putExtra(KEY_PROJECT_ID, projectId);
return intent;
}
@BindView(R.id.root)
ViewGroup mRoot;
@BindView(R.id.toolbar)
Toolbar mToolbar;
@BindView(R.id.title_text_input_layout)
TextInputLayout mTextInputLayoutTitle;
@BindView(R.id.description)
TextView mDescription;
@BindView(R.id.image_color)
ImageView mImageColor;
@BindView(R.id.progress)
View mProgress;
int mChosenColor = -1;
private final EasyCallback<Label> mCreateLabelCallback = new EasyCallback<Label>() {
@Override
public void success(@NonNull Label response) {
Intent data = new Intent();
data.putExtra(KEY_NEW_LABEL, Parcels.wrap(response));
setResult(RESULT_OK, data);
finish();
}
@Override
public void failure(Throwable t) {
Timber.e(t, null);
mProgress.setVisibility(View.GONE);
if (t instanceof HttpException && ((HttpException) t).getCode() == 409) {
Snackbar.make(mRoot, R.string.label_already_exists, Snackbar.LENGTH_SHORT)
.show();
} else {
Snackbar.make(mRoot, R.string.failed_to_create_label, Snackbar.LENGTH_SHORT)
.show();
}
}
};
@OnClick(R.id.root_color)
void onChooseColorClicked() {
// Pass AppCompatActivity which implements ColorCallback, along with the title of the dialog
new ColorChooserDialog.Builder(this, R.string.add_new_label_choose_color)
.preselect(mChosenColor)
.show();
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_new_label);
ButterKnife.bind(this);
mToolbar.setNavigationIcon(R.drawable.ic_back_24dp);
mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
onBackPressed();
}
});
mToolbar.inflateMenu(R.menu.menu_add_new_label);
mToolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_create:
createLabel();
return true;
}
return false;
}
});
}
@Override
public void onColorSelection(@NonNull ColorChooserDialog dialog, @ColorInt int selectedColor) {
mChosenColor = selectedColor;
mImageColor.setImageDrawable(new ColorDrawable(selectedColor));
}
private long getProjectId() {
return getIntent().getLongExtra(KEY_PROJECT_ID, -1);
}
private void createLabel() {
if (Validator.validateFieldsNotEmpty(getString(R.string.required_field), mTextInputLayoutTitle)) {
if (mChosenColor == -1) {
Snackbar.make(mRoot, R.string.add_new_label_color_is_required, Snackbar.LENGTH_SHORT)
.show();
return;
}
String title = mTextInputLayoutTitle.getEditText().getText().toString();
String description = null;
if (!TextUtils.isEmpty(mDescription.getText())) {
description = mDescription.getText().toString();
}
String color = null;
if (mChosenColor != -1) {
color = ColorUtil.convertColorIntToString(mChosenColor);
Timber.d("Setting color to " + color);
}
mProgress.setVisibility(View.VISIBLE);
mProgress.setAlpha(0.0f);
mProgress.animate().alpha(1.0f);
App.instance().getGitLab().createLabel(getProjectId(), title, color, description)
.enqueue(mCreateLabelCallback);
}
}
}
Loading
Loading
@@ -19,13 +19,12 @@ import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.TextView;
 
import com.commit451.easycallback.EasyCallback;
import com.commit451.easycallback.HttpException;
import com.commit451.gitlab.App;
import com.commit451.gitlab.R;
import com.commit451.gitlab.adapter.UsersAdapter;
import com.commit451.gitlab.animation.HideRunnable;
import com.commit451.easycallback.EasyCallback;
import com.commit451.gitlab.api.GitLabClient;
import com.commit451.gitlab.api.exception.HttpException;
import com.commit451.gitlab.dialog.AccessDialog;
import com.commit451.gitlab.event.MemberAddedEvent;
import com.commit451.gitlab.model.api.Group;
Loading
Loading
@@ -169,12 +168,12 @@ public class AddUserActivity extends MorphActivity {
public void onAccessApplied(int accessLevel) {
mAccessDialog.showLoading();
if (mGroup == null) {
GitLabClient.instance().addProjectMember(
App.instance().getGitLab().addProjectMember(
mProjectId,
mSelectedUser.getId(),
accessLevel).enqueue(mAddGroupMemeberCallback);
} else {
GitLabClient.instance().addGroupMember(mGroup.getId(),
App.instance().getGitLab().addGroupMember(mGroup.getId(),
mSelectedUser.getId(),
accessLevel).enqueue(mAddGroupMemeberCallback);
}
Loading
Loading
@@ -257,6 +256,12 @@ public class AddUserActivity extends MorphActivity {
mUserSearch.setOnEditorActionListener(mSearchEditorActionListener);
mUserSearch.addTextChangedListener(mTextWatcher);
mAdapter = new UsersAdapter(mUserClickListener);
mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
loadData();
}
});
mRecyclerView.setAdapter(mAdapter);
mUserLinearLayoutManager = new GridLayoutManager(this, 2);
mUserLinearLayoutManager.setSpanSizeLookup(mAdapter.getSpanSizeLookup());
Loading
Loading
@@ -270,13 +275,13 @@ public class AddUserActivity extends MorphActivity {
mTeleprinter.hideKeyboard();
mSwipeRefreshLayout.setRefreshing(true);
mLoading = true;
GitLabClient.instance().searchUsers(mSearchQuery).enqueue(mUserCallback);
App.instance().getGitLab().searchUsers(mSearchQuery).enqueue(mUserCallback);
}
 
private void loadMore() {
mLoading = true;
mAdapter.setLoading(true);
Timber.d("loadMore " + mNextPageUrl.toString() + " " + mSearchQuery);
GitLabClient.instance().searchUsers(mNextPageUrl.toString(), mSearchQuery).enqueue(mMoreUsersCallback);
App.instance().getGitLab().searchUsers(mNextPageUrl.toString(), mSearchQuery).enqueue(mMoreUsersCallback);
}
}
Loading
Loading
@@ -16,7 +16,7 @@ import com.commit451.gitlab.App;
import com.commit451.gitlab.R;
import com.commit451.gitlab.adapter.BuildSectionsPagerAdapter;
import com.commit451.easycallback.EasyCallback;
import com.commit451.gitlab.api.GitLabClient;
import com.commit451.gitlab.api.GitLabFactory;
import com.commit451.gitlab.event.BuildChangedEvent;
import com.commit451.gitlab.model.api.Build;
import com.commit451.gitlab.model.api.Project;
Loading
Loading
@@ -116,15 +116,15 @@ public class BuildActivity extends BaseActivity {
switch (item.getItemId()) {
case R.id.action_retry:
mProgress.setVisibility(View.VISIBLE);
GitLabClient.instance().retryBuild(mProject.getId(), mBuild.getId()).enqueue(mRetryCallback);
App.instance().getGitLab().retryBuild(mProject.getId(), mBuild.getId()).enqueue(mRetryCallback);
return true;
case R.id.action_erase:
mProgress.setVisibility(View.VISIBLE);
GitLabClient.instance().eraseBuild(mProject.getId(), mBuild.getId()).enqueue(mEraseCallback);
App.instance().getGitLab().eraseBuild(mProject.getId(), mBuild.getId()).enqueue(mEraseCallback);
return true;
case R.id.action_cancel:
mProgress.setVisibility(View.VISIBLE);
GitLabClient.instance().cancelBuild(mProject.getId(), mBuild.getId()).enqueue(mCancelCallback);
App.instance().getGitLab().cancelBuild(mProject.getId(), mBuild.getId()).enqueue(mCancelCallback);
return true;
}
return false;
Loading
Loading
Loading
Loading
@@ -12,10 +12,10 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
 
import com.commit451.easycallback.EasyCallback;
import com.commit451.gitlab.App;
import com.commit451.gitlab.R;
import com.commit451.gitlab.adapter.DiffAdapter;
import com.commit451.easycallback.EasyCallback;
import com.commit451.gitlab.api.GitLabClient;
import com.commit451.gitlab.model.api.Diff;
import com.commit451.gitlab.model.api.Project;
import com.commit451.gitlab.model.api.RepositoryCommit;
Loading
Loading
@@ -116,6 +116,6 @@ public class DiffActivity extends BaseActivity {
}
}
});
GitLabClient.instance().getCommitDiff(mProject.getId(), mCommit.getId()).enqueue(mDiffCallback);
App.instance().getGitLab().getCommitDiff(mProject.getId(), mCommit.getId()).enqueue(mDiffCallback);
}
}
\ No newline at end of file
Loading
Loading
@@ -21,9 +21,9 @@ import android.view.ViewGroup;
import android.webkit.MimeTypeMap;
import android.webkit.WebView;
 
import com.commit451.gitlab.R;
import com.commit451.easycallback.EasyCallback;
import com.commit451.gitlab.api.GitLabClient;
import com.commit451.gitlab.App;
import com.commit451.gitlab.R;
import com.commit451.gitlab.model.api.RepositoryFile;
import com.commit451.gitlab.observable.DecodeObservableFactory;
 
Loading
Loading
@@ -133,7 +133,7 @@ public class FileActivity extends BaseActivity {
 
private void loadData() {
mProgressView.setVisibility(View.VISIBLE);
GitLabClient.instance().getFile(mProjectId, mPath, mRef).enqueue(mRepositoryFileCallback);
App.instance().getGitLab().getFile(mProjectId, mPath, mRef).enqueue(mRepositoryFileCallback);
}
 
private void bindFile(RepositoryFile repositoryFile) {
Loading
Loading
Loading
Loading
@@ -18,10 +18,10 @@ import android.view.View;
import android.widget.ImageView;
 
import com.commit451.easel.Easel;
import com.commit451.easycallback.EasyCallback;
import com.commit451.gitlab.App;
import com.commit451.gitlab.R;
import com.commit451.gitlab.adapter.GroupPagerAdapter;
import com.commit451.easycallback.EasyCallback;
import com.commit451.gitlab.api.GitLabClient;
import com.commit451.gitlab.model.api.Group;
import com.commit451.gitlab.model.api.GroupDetail;
import com.commit451.gitlab.transformation.PaletteTransformation;
Loading
Loading
@@ -98,7 +98,7 @@ public class GroupActivity extends BaseActivity {
} else {
mProgress.setVisibility(View.VISIBLE);
long groupId = getIntent().getLongExtra(KEY_GROUP_ID, -1);
GitLabClient.instance().getGroup(groupId).enqueue(mGroupCallback);
App.instance().getGitLab().getGroup(groupId).enqueue(mGroupCallback);
}
}
 
Loading
Loading
@@ -108,7 +108,7 @@ public class GroupActivity extends BaseActivity {
}
 
private void bind(Group group) {
GitLabClient.getPicasso()
App.instance().getPicasso()
.load(group.getAvatarUrl())
.transform(PaletteTransformation.instance())
.into(mBackdrop, new PaletteTransformation.PaletteCallback(mBackdrop) {
Loading
Loading
Loading
Loading
@@ -8,21 +8,19 @@ import android.support.annotation.NonNull;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
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.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.TextView;
 
import com.commit451.easycallback.EasyCallback;
import com.commit451.gitlab.App;
import com.commit451.gitlab.R;
import com.commit451.gitlab.adapter.GroupAdapter;
import com.commit451.easycallback.EasyCallback;
import com.commit451.gitlab.api.GitLabClient;
import com.commit451.gitlab.event.CloseDrawerEvent;
import com.commit451.gitlab.model.api.Group;
import com.commit451.gitlab.navigation.Navigator;
import com.commit451.gitlab.util.DynamicGridLayoutManager;
import com.commit451.gitlab.util.PaginationUtil;
import com.commit451.gitlab.viewHolder.GroupViewHolder;
import com.squareup.otto.Subscribe;
Loading
Loading
@@ -50,7 +48,7 @@ public class GroupsActivity extends BaseActivity {
@BindView(R.id.list) RecyclerView mGroupRecyclerView;
@BindView(R.id.message_text) TextView mMessageText;
GroupAdapter mGroupAdapter;
LinearLayoutManager mGroupLayoutManager;
DynamicGridLayoutManager mGroupLayoutManager;
 
private Uri mNextPageUrl;
private boolean mLoading = false;
Loading
Loading
@@ -145,7 +143,8 @@ public class GroupsActivity extends BaseActivity {
load();
}
});
mGroupLayoutManager = new GridLayoutManager(this, 2);
mGroupLayoutManager = new DynamicGridLayoutManager(this);
mGroupLayoutManager.setMinimumWidthDimension(R.dimen.user_list_image_size);
mGroupRecyclerView.setLayoutManager(mGroupLayoutManager);
mGroupAdapter = new GroupAdapter(mGroupAdapterListener);
mGroupRecyclerView.setAdapter(mGroupAdapter);
Loading
Loading
@@ -173,7 +172,7 @@ public class GroupsActivity extends BaseActivity {
mNextPageUrl = null;
mLoading = true;
 
GitLabClient.instance().getGroups().enqueue(mGroupsCallback);
App.instance().getGitLab().getGroups().enqueue(mGroupsCallback);
}
 
private void loadMore() {
Loading
Loading
@@ -193,7 +192,7 @@ public class GroupsActivity extends BaseActivity {
mLoading = true;
 
Timber.d("loadMore called for %s", mNextPageUrl);
GitLabClient.instance().getGroups(mNextPageUrl.toString()).enqueue(mMoreGroupsCallback);
App.instance().getGitLab().getGroups(mNextPageUrl.toString()).enqueue(mMoreGroupsCallback);
}
 
private class EventReceiver {
Loading
Loading
Loading
Loading
@@ -21,7 +21,7 @@ import com.commit451.gitlab.App;
import com.commit451.gitlab.R;
import com.commit451.gitlab.adapter.IssueDetailsAdapter;
import com.commit451.easycallback.EasyCallback;
import com.commit451.gitlab.api.GitLabClient;
import com.commit451.gitlab.api.GitLabFactory;
import com.commit451.gitlab.event.IssueChangedEvent;
import com.commit451.gitlab.event.IssueReloadEvent;
import com.commit451.gitlab.model.api.FileUploadResponse;
Loading
Loading
@@ -142,7 +142,7 @@ public class IssueActivity extends BaseActivity {
@Override
public void success(@NonNull Project response) {
mProject = response;
GitLabClient.instance().getIssuesByIid(mProject.getId(), mIssueIid).enqueue(mIssueCallback);
App.instance().getGitLab().getIssuesByIid(mProject.getId(), mIssueIid).enqueue(mIssueCallback);
}
 
@Override
Loading
Loading
@@ -341,7 +341,7 @@ public class IssueActivity extends BaseActivity {
}
}
});
GitLabClient.instance().getProject(projectNamespace, projectName).enqueue(mProjectCallback);
App.instance().getGitLab().getProject(projectNamespace, projectName).enqueue(mProjectCallback);
}
}
 
Loading
Loading
@@ -358,7 +358,7 @@ public class IssueActivity extends BaseActivity {
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
RequestBody requestBody = RequestBody.create(MediaType.parse("image/jpeg"), stream.toByteArray());
GitLabClient.instance().uploadFile(mProject.getId(), requestBody).enqueue(mUploadImageCallback);
App.instance().getGitLab().uploadFile(mProject.getId(), requestBody).enqueue(mUploadImageCallback);
} catch (IOException e) {
Timber.e(e, null);
}
Loading
Loading
@@ -394,13 +394,13 @@ public class IssueActivity extends BaseActivity {
}
});
mLoading = true;
GitLabClient.instance().getIssueNotes(mProject.getId(), mIssue.getId()).enqueue(mNotesCallback);
App.instance().getGitLab().getIssueNotes(mProject.getId(), mIssue.getId()).enqueue(mNotesCallback);
}
 
private void loadMoreNotes() {
mLoading = true;
mIssueDetailsAdapter.setLoading(true);
GitLabClient.instance().getIssueNotes(mNextPageUrl.toString()).enqueue(mMoreNotesCallback);
App.instance().getGitLab().getIssueNotes(mNextPageUrl.toString()).enqueue(mMoreNotesCallback);
}
 
private void postNote(String message) {
Loading
Loading
@@ -416,16 +416,16 @@ public class IssueActivity extends BaseActivity {
mTeleprinter.hideKeyboard();
mSendMessageView.clearText();
 
GitLabClient.instance().addIssueNote(mProject.getId(), mIssue.getId(), message).enqueue(mPostNoteCallback);
App.instance().getGitLab().addIssueNote(mProject.getId(), mIssue.getId(), message).enqueue(mPostNoteCallback);
}
 
private void closeOrOpenIssue() {
mProgress.setVisibility(View.VISIBLE);
if (mIssue.getState().equals(Issue.STATE_CLOSED)) {
GitLabClient.instance().updateIssueStatus(mProject.getId(), mIssue.getId(), Issue.STATE_REOPEN)
App.instance().getGitLab().updateIssueStatus(mProject.getId(), mIssue.getId(), Issue.STATE_REOPEN)
.enqueue(mOpenCloseCallback);
} else {
GitLabClient.instance().updateIssueStatus(mProject.getId(), mIssue.getId(), Issue.STATE_CLOSE)
App.instance().getGitLab().updateIssueStatus(mProject.getId(), mIssue.getId(), Issue.STATE_CLOSE)
.enqueue(mOpenCloseCallback);
}
}
Loading
Loading
Loading
Loading
@@ -19,6 +19,9 @@ import timber.log.Timber;
*/
public class LaunchActivity extends Activity {
 
//Figure out how this works, then reenable
private static final boolean PRIVATE_KEY_ENABLED = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Loading
Loading
@@ -32,13 +35,15 @@ public class LaunchActivity extends Activity {
List<Account> accounts = Account.getAccounts(this);
if(accounts.isEmpty()) {
Navigator.navigateToLogin(this);
finish();
} else {
loadPrivateKey(accounts, 0);
return;
if (PRIVATE_KEY_ENABLED) {
loadPrivateKey(accounts, 0);
} else {
Navigator.navigateToStartingActivity(LaunchActivity.this);
finish();
}
}
// Always finish this activity
finish();
}
 
private void loadPrivateKey(final List<Account> accounts, final int i) {
Loading
Loading
@@ -46,8 +51,7 @@ public class LaunchActivity extends Activity {
runOnUiThread(new Runnable() {
@Override
public void run() {
Navigator.navigateToStartingActivity(LaunchActivity.this);
finish();
}
});
return;
Loading
Loading
Loading
Loading
@@ -8,9 +8,9 @@ import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Toast;
 
import com.commit451.gitlab.R;
import com.commit451.easycallback.EasyCallback;
import com.commit451.gitlab.api.GitLabClient;
import com.commit451.gitlab.App;
import com.commit451.gitlab.R;
import com.commit451.gitlab.model.api.Build;
import com.commit451.gitlab.model.api.MergeRequest;
import com.commit451.gitlab.model.api.Milestone;
Loading
Loading
@@ -98,19 +98,19 @@ public class LoadSomeInfoActivity extends AppCompatActivity {
switch (mLoadType) {
case LOAD_TYPE_DIFF:
String sha = getIntent().getStringExtra(EXTRA_COMMIT_SHA);
GitLabClient.instance().getCommit(response.getId(), sha).enqueue(mCommitCallback);
App.instance().getGitLab().getCommit(response.getId(), sha).enqueue(mCommitCallback);
return;
case LOAD_TYPE_MERGE_REQUEST:
String mergeRequestId = getIntent().getStringExtra(EXTRA_MERGE_REQUEST);
GitLabClient.instance().getMergeRequestsByIid(response.getId(), mergeRequestId).enqueue(mMergeRequestCallback);
App.instance().getGitLab().getMergeRequestsByIid(response.getId(), mergeRequestId).enqueue(mMergeRequestCallback);
return;
case LOAD_TYPE_BUILD:
long buildId = getIntent().getLongExtra(EXTRA_BUILD_ID, -1);
GitLabClient.instance().getBuild(response.getId(), buildId).enqueue(mBuildCallback);
App.instance().getGitLab().getBuild(response.getId(), buildId).enqueue(mBuildCallback);
return;
case LOAD_TYPE_MILESTONE:
String milestoneId = getIntent().getStringExtra(EXTRA_MILESTONE_ID);
GitLabClient.instance().getMilestonesByIid(response.getId(), milestoneId).enqueue(mMilestoneCallback);
App.instance().getGitLab().getMilestonesByIid(response.getId(), milestoneId).enqueue(mMilestoneCallback);
return;
}
 
Loading
Loading
@@ -203,7 +203,7 @@ public class LoadSomeInfoActivity extends AppCompatActivity {
case LOAD_TYPE_MILESTONE:
String namespace = getIntent().getStringExtra(EXTRA_PROJECT_NAMESPACE);
String project = getIntent().getStringExtra(EXTRA_PROJECT_NAME);
GitLabClient.instance().getProject(namespace, project).enqueue(mProjectCallback);
App.instance().getGitLab().getProject(namespace, project).enqueue(mProjectCallback);
break;
}
}
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