Skip to content
Snippets Groups Projects
Commit ade2c4cf authored by Jawnnypoo's avatar Jawnnypoo
Browse files

Merge branch 'develop'

parents eb09a2b1 1e4317f3
No related branches found
No related tags found
No related merge requests found
Pipeline #
Showing
with 690 additions and 290 deletions
Loading
Loading
@@ -8,7 +8,7 @@ before_script:
- tar xzf android-sdk_r24.4.1-linux.tgz
- wget -q https://raw.githubusercontent.com/journeyapps/android-sdk-installer/master/accept-licenses
- chmod +x accept-licenses
- ./accept-licenses "android-sdk-linux/tools/android -s update sdk --no-ui --all --filter tools,platform-tools,build-tools-23.0.2,android-23,extra-android-m2repository" "android-sdk-license-5be876d5|android-sdk-license-ed0d0a5b"
- ./accept-licenses "android-sdk-linux/tools/android -s update sdk --no-ui --all --filter tools,platform-tools,build-tools-23.0.3,android-23,extra-android-m2repository" "android-sdk-license-5be876d5|android-sdk-license-c81a61d9"
- export ANDROID_HOME=$PWD/android-sdk-linux
- chmod +x gradlew
 
Loading
Loading
before_script:
- unset DISPLAY
- export TERM=dumb
- export _JAVA_OPTIONS="-Djava.awt.headless=true"
- sudo apt-get -q -y update
- sudo apt-get -q -y install wget tar openjdk-7-jdk lib32stdc++6 lib32z1
- wget -q http://dl.google.com/android/android-sdk_r24.4.1-linux.tgz
- tar xzf android-sdk_r24.4.1-linux.tgz
- wget -q https://raw.githubusercontent.com/journeyapps/android-sdk-installer/master/accept-licenses
- chmod +x accept-licenses
- ./accept-licenses "android-sdk-linux/tools/android -s update sdk --no-ui --all --filter tools,platform-tools,build-tools-23.0.2,android-23,extra-android-m2repository" "android-sdk-license-5be876d5|android-sdk-license-ed0d0a5b"
- export ANDROID_HOME=$PWD/android-sdk-linux
- chmod +x gradlew
script:
- ./gradlew build -x fabricGenerateResourcesRelease --stacktrace
language: android
android:
components:
- tools
- platform-tools
- build-tools-23.0.2
- android-23
- extra-android-m2repository
before_script:
- printf "GITLAB_FABRIC_KEY = \"\"\n" > gradle.properties
- chmod +x gradlew
script: "./gradlew build -x fabricGenerateResourcesRelease --stacktrace"
Loading
Loading
@@ -4,7 +4,7 @@ apply plugin: 'com.neenbedankt.android-apt'
 
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
buildToolsVersion "23.0.3"
 
project.ext {
LABCOAT_FABRIC_KEY = project.hasProperty("LABCOAT_FABRIC_KEY") ? project.LABCOAT_FABRIC_KEY : "";
Loading
Loading
@@ -14,21 +14,20 @@ android {
minSdkVersion 16
targetSdkVersion 23
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
versionCode 225
versionName "2.2.5"
versionCode 226
versionName "2.2.6"
manifestPlaceholders = [fabric_key: project.ext.LABCOAT_FABRIC_KEY]
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
ext.enableCrashlytics = true
manifestPlaceholders = [fabric_key: project.ext.LABCOAT_FABRIC_KEY]
}
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
ext.enableCrashlytics = false
manifestPlaceholders = [fabric_key: ""]
}
}
lintOptions {
Loading
Loading
@@ -43,29 +42,31 @@ dependencies {
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3.1'
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3.1'
 
compile 'com.android.support:appcompat-v7:23.2.1'
compile 'com.android.support:design:23.2.1'
compile 'com.android.support:recyclerview-v7:23.2.1'
compile 'com.android.support:cardview-v7:23.2.1'
compile 'com.android.support:palette-v7:23.2.1'
compile 'com.android.support:customtabs:23.2.1'
compile 'com.squareup.retrofit2:retrofit:2.0.0'
compile 'com.squareup.retrofit2:converter-gson:2.0.0'
compile('com.squareup.retrofit2:converter-simplexml:2.0.0') {
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.android.support:design:23.4.0'
compile 'com.android.support:recyclerview-v7:23.4.0'
compile 'com.android.support:cardview-v7:23.4.0'
compile 'com.android.support:palette-v7:23.4.0'
compile 'com.android.support:customtabs:23.4.0'
compile 'com.squareup.retrofit2:retrofit:2.0.2'
compile 'com.squareup.retrofit2:converter-gson:2.0.2'
compile('com.squareup.retrofit2:converter-simplexml:2.0.2') {
exclude group: 'xpp3', module: 'xpp3'
exclude group: 'stax', module: 'stax-api'
exclude group: 'stax', module: 'stax'
}
compile 'com.squareup.okhttp3:okhttp:3.2.0'
compile 'com.squareup.okhttp3:logging-interceptor:3.2.0'
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.2'
compile 'io.reactivex:rxandroid:1.1.0'
compile 'com.jakewharton:butterknife:7.0.1'
compile 'com.jakewharton.timber:timber:4.1.1'
compile 'io.reactivex:rxjava:1.1.5'
compile 'io.reactivex:rxandroid:1.2.0'
compile 'com.jakewharton:butterknife:8.0.1'
apt 'com.jakewharton:butterknife-compiler:8.0.1'
compile 'com.jakewharton.timber:timber:4.1.2'
compile 'com.google.code.gson:gson:2.6.2'
compile 'net.danlew:android.joda:2.9.2'
compile 'net.danlew:android.joda:2.9.3'
compile "org.parceler:parceler-api:1.0.4"
apt "org.parceler:parceler:1.0.4"
compile 'com.commit451:bypasses:1.0.1'
Loading
Loading
@@ -73,23 +74,26 @@ dependencies {
compile 'com.commit451:foregroundviews:1.0.0'
compile 'com.commit451:elasticdragdismisslayout:1.0.2'
compile 'com.commit451:adapterlayout:1.0.1'
compile 'com.github.Commit451:Gimbal:1.0.0'
compile 'com.github.Commit451:Teleprinter:1.0.1'
compile 'com.github.Commit451:BypassPicassoImageGetter:1.0.0'
compile 'com.github.Commit451:Jounce:1.0.1'
compile 'com.pnikosis:materialish-progress:1.7'
compile 'com.jawnnypoo:physicslayout:1.0.1'
compile 'com.github.ivbaranov:materiallettericon:0.2.1'
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.wefika:flowlayout:0.4.1"
compile 'com.novoda:simple-chrome-custom-tabs:0.1.3-rc1'
compile('com.crashlytics.sdk.android:crashlytics:2.5.5@aar') {
transitive = true;
}
compile('com.github.afollestad:app-theme-engine:1.0.1@aar') {
transitive = true
}
compile('com.github.afollestad.material-dialogs:core:0.8.5.7@aar') {
compile('com.github.afollestad.material-dialogs:core:0.8.5.8@aar') {
transitive = true
}
compile('com.github.afollestad.material-dialogs:commons:0.8.5.7@aar') {
compile('com.github.afollestad.material-dialogs:commons:0.8.5.8@aar') {
transitive = true
}
}
File deleted
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.commit451.gitlab" >
package="com.commit451.gitlab">
 
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
 
<application
android:name=".LabCoatApp"
Loading
Loading
@@ -13,38 +13,32 @@
android:fullBackupContent="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
android:theme="@style/AppTheme">
 
<activity
android:name=".activity.GitlabActivity"
android:theme="@android:style/Theme.NoDisplay"
android:noHistory="true" >
android:name=".activity.LaunchActivity"
android:noHistory="true"
android:theme="@android:style/Theme.NoDisplay">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
 
<activity android:name=".activity.ProjectActivity" />
<activity android:name=".activity.LoginActivity" />
<activity android:name=".activity.ProjectsActivity"
android:launchMode="singleTask"/>
<activity android:name=".activity.GroupsActivity"
android:launchMode="singleTask"/>
<activity
android:name=".activity.FileActivity">
</activity>
android:name=".activity.ProjectsActivity"
android:launchMode="singleTask"/>
<activity
android:name=".activity.IssueActivity" >
</activity>
android:name=".activity.GroupsActivity"
android:launchMode="singleTask"/>
<activity
android:name=".activity.DiffActivity" >
</activity>
android:name=".activity.ActivityActivity"
android:launchMode="singleTask"/>
<activity android:name=".activity.ProjectActivity"/>
<activity android:name=".activity.LoginActivity"/>
<activity android:name=".activity.FileActivity"/>
<activity android:name=".activity.IssueActivity"/>
<activity android:name=".activity.DiffActivity"/>
<activity android:name=".activity.AboutActivity"/>
<activity android:name=".activity.AddUserActivity"/>
<activity android:name=".activity.UserActivity"/>
Loading
Loading
@@ -54,10 +48,31 @@
<activity android:name=".activity.AddIssueActivity"/>
<activity android:name=".activity.MilestoneActivity"/>
<activity android:name=".activity.AddMilestoneActivity"/>
<activity android:name=".activity.BuildActivity"/>
<activity android:name=".activity.LoadSomeInfoActivity"
android:theme="@style/Activity.Translucent"/>
<activity android:name=".activity.SettingsActivity"/>
<activity
android:name=".activity.RoutingActivity"
android:launchMode="singleTask"
android:noHistory="true"
android:theme="@android:style/Theme.NoDisplay">
<!-- Standard Url -->
<intent-filter android:label="@string/deeplink_text">
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.BROWSABLE"/>
<category android:name="android.intent.category.DEFAULT"/>
<data
android:scheme="@string/deeplink_scheme"/>
</intent-filter>
</activity>
<meta-data
android:name="io.fabric.ApiKey"
android:value="${fabric_key}" />
android:value="${fabric_key}"/>
</application>
 
</manifest>
\ No newline at end of file
Loading
Loading
@@ -7,6 +7,7 @@ import android.support.annotation.VisibleForTesting;
 
import com.crashlytics.android.Crashlytics;
import com.crashlytics.android.core.CrashlyticsCore;
import com.novoda.simplechromecustomtabs.SimpleChromeCustomTabs;
import com.squareup.leakcanary.LeakCanary;
import com.squareup.otto.Bus;
 
Loading
Loading
@@ -49,6 +50,7 @@ public class LabCoatApp extends Application {
}
 
JodaTimeAndroid.init(this);
SimpleChromeCustomTabs.initialize(this);
}
 
@VisibleForTesting
Loading
Loading
Loading
Loading
@@ -17,15 +17,15 @@ 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.gitlab.api.EasyCallback;
import com.commit451.gitlab.api.GitLabClient;
import com.commit451.gitlab.model.api.Contributor;
import com.commit451.gitlab.navigation.NavigationManager;
import com.commit451.gitlab.transformation.CircleTransformation;
import com.commit451.gitlab.util.ImageUtil;
import com.commit451.gitlab.util.IntentUtil;
import com.commit451.gitlab.util.NavigationManager;
import com.commit451.gitlab.util.WindowUtil;
import com.jawnnypoo.physicslayout.Physics;
import com.jawnnypoo.physicslayout.PhysicsConfig;
import com.jawnnypoo.physicslayout.PhysicsFrameLayout;
Loading
Loading
@@ -34,7 +34,7 @@ import org.jbox2d.common.Vec2;
 
import java.util.List;
 
import butterknife.Bind;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import retrofit2.Callback;
Loading
Loading
@@ -42,28 +42,29 @@ import timber.log.Timber;
 
/**
* Thats what its all about
* Created by Jawn on 8/25/2015.
*/
public class AboutActivity extends BaseActivity {
private static final long REPO_ID = 473568;
private static final String REPO_ID = "473568";
 
public static Intent newInstance(Context context) {
public static Intent newIntent(Context context) {
Intent intent = new Intent(context, AboutActivity.class);
return intent;
}
 
@Bind(R.id.root)
@BindView(R.id.root)
ViewGroup mRoot;
@Bind(R.id.toolbar)
@BindView(R.id.toolbar)
Toolbar mToolbar;
@Bind(R.id.contributors)
@BindView(R.id.contributors)
TextView mContributors;
@Bind(R.id.physics_layout)
@BindView(R.id.physics_layout)
PhysicsFrameLayout mPhysicsLayout;
@BindView(R.id.progress)
View mProgress;
 
@OnClick(R.id.sauce)
void onSauceClick() {
if ("https://gitlab.com".equals(GitLabClient.getAccount().getServerUrl().toString())) {
if (getString(R.string.url_gitlab).equals(GitLabClient.getAccount().getServerUrl().toString())) {
NavigationManager.navigateToProject(AboutActivity.this, REPO_ID);
} else {
IntentUtil.openPage(AboutActivity.this, getString(R.string.source_url));
Loading
Loading
@@ -72,13 +73,14 @@ public class AboutActivity extends BaseActivity {
 
SensorManager sensorManager;
Sensor gravitySensor;
Gimbal mGimbal;
 
private final SensorEventListener sensorEventListener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_GRAVITY) {
if (mPhysicsLayout.getPhysics().getWorld() != null) {
WindowUtil.normalizeForOrientation(getWindow(), event);
mGimbal.normalizeGravityEvent(event);
mPhysicsLayout.getPhysics().getWorld().setGravity(new Vec2(-event.values[0], event.values[1]));
}
}
Loading
Loading
@@ -92,12 +94,14 @@ public class AboutActivity extends BaseActivity {
private Callback<List<Contributor>> mContributorResponseCallback = new EasyCallback<List<Contributor>>() {
@Override
public void onResponse(@NonNull List<Contributor> response) {
mProgress.setVisibility(View.GONE);
addContributors(Contributor.groupContributors(response));
}
 
@Override
public void onAllFailure(Throwable t) {
Timber.e(t, null);
mProgress.setVisibility(View.GONE);
Snackbar.make(mRoot, R.string.failed_to_load_contributors, Snackbar.LENGTH_SHORT)
.show();
}
Loading
Loading
@@ -106,7 +110,8 @@ public class AboutActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
WindowUtil.lockToCurrentOrientation(this);
mGimbal = new Gimbal(this);
mGimbal.lock();
setContentView(R.layout.activity_about);
ButterKnife.bind(this);
mToolbar.setNavigationIcon(R.drawable.ic_back_24dp);
Loading
Loading
@@ -121,6 +126,7 @@ public class AboutActivity extends BaseActivity {
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
gravitySensor = sensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY);
GitLabClient.instance().getContributors(REPO_ID).enqueue(mContributorResponseCallback);
mProgress.setVisibility(View.VISIBLE);
}
 
@Override
Loading
Loading
package com.commit451.gitlab.activity;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.widget.Toolbar;
import android.view.View;
import com.commit451.gitlab.LabCoatApp;
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;
import butterknife.BindView;
import butterknife.ButterKnife;
import timber.log.Timber;
/**
* Displays the current users projects feed
*/
public class ActivityActivity extends BaseActivity {
private static final String TAG_FEED_FRAGMENT = "feed_fragment";
public static Intent newIntent(Context context) {
Intent intent = new Intent(context, ActivityActivity.class);
return intent;
}
@BindView(R.id.drawer_layout) DrawerLayout mDrawerLayout;
@BindView(R.id.toolbar) Toolbar mToolbar;
EventReceiver mEventReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_activity);
ButterKnife.bind(this);
mEventReceiver = new EventReceiver();
LabCoatApp.bus().register(mEventReceiver);
mToolbar.setTitle(R.string.nav_activity);
mToolbar.setNavigationIcon(R.drawable.ic_menu_24dp);
mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mDrawerLayout.openDrawer(GravityCompat.START);
}
});
FeedFragment feedFragment = (FeedFragment) getSupportFragmentManager().findFragmentByTag(TAG_FEED_FRAGMENT);
if (feedFragment == null) {
Uri feedUri = GitLabClient.getAccount().getServerUrl();
feedUri = feedUri.buildUpon()
.appendPath("dashboard")
.appendPath("projects.atom")
.build();
Timber.d("Showing activity feed for: %s", feedUri.toString());
feedFragment = FeedFragment.newInstance(feedUri);
getSupportFragmentManager().beginTransaction()
.replace(R.id.root_fragment, feedFragment, TAG_FEED_FRAGMENT)
.commit();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
LabCoatApp.bus().unregister(mEventReceiver);
}
private class EventReceiver {
@Subscribe
public void onCloseDrawerEvent(CloseDrawerEvent event) {
mDrawerLayout.closeDrawers();
}
}
}
Loading
Loading
@@ -3,7 +3,6 @@ package com.commit451.gitlab.activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.annotation.NonNull;
import android.support.design.widget.Snackbar;
import android.support.design.widget.TextInputLayout;
Loading
Loading
@@ -12,23 +11,28 @@ import android.text.TextUtils;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.Spinner;
import android.widget.TextView;
 
import com.afollestad.appthemeengine.customizers.ATEActivityThemeCustomizer;
import com.commit451.elasticdragdismisslayout.ElasticDragDismissFrameLayout;
import com.commit451.elasticdragdismisslayout.ElasticDragDismissListener;
import com.commit451.gitlab.LabCoatApp;
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.gitlab.api.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;
import com.commit451.gitlab.model.api.Label;
import com.commit451.gitlab.model.api.Member;
import com.commit451.gitlab.model.api.Milestone;
import com.commit451.gitlab.model.api.Project;
import com.commit451.gitlab.navigation.NavigationManager;
import com.commit451.gitlab.view.AdapterFlowLayout;
import com.commit451.teleprinter.Teleprinter;
 
import org.parceler.Parcels;
 
Loading
Loading
@@ -36,21 +40,16 @@ import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
 
import butterknife.Bind;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import retrofit2.Callback;
import timber.log.Timber;
 
/**
* Activity to input new issues, but not really a dialog at all wink wink
*/
public class AddIssueActivity extends MorphActivity implements ATEActivityThemeCustomizer {
@Override
public int getActivityTheme() {
return PreferenceManager.getDefaultSharedPreferences(this).getBoolean("dark_theme", true) ?
R.style.Activity_Translucent : R.style.ActivityLight_Translucent;
}
public class AddIssueActivity extends MorphActivity {
 
private static final String KEY_PROJECT = "project";
private static final String KEY_ISSUE = "issue";
Loading
Loading
@@ -64,30 +63,45 @@ public class AddIssueActivity extends MorphActivity implements ATEActivityThemeC
return intent;
}
 
@Bind(R.id.root)
ElasticDragDismissFrameLayout mRoot;
@Bind(R.id.toolbar)
@BindView(R.id.root)
FrameLayout mRoot;
@BindView(R.id.toolbar)
Toolbar mToolbar;
@Bind(R.id.title_text_input_layout)
@BindView(R.id.title_text_input_layout)
TextInputLayout mTitleInputLayout;
@Bind(R.id.title)
@BindView(R.id.title)
EditText mTitleInput;
@Bind(R.id.description)
@BindView(R.id.description)
EditText mDescriptionInput;
@Bind(R.id.progress)
@BindView(R.id.progress)
View mProgress;
@Bind(R.id.assignee_progress)
@BindView(R.id.assignee_progress)
View mAssigneeProgress;
@Bind(R.id.assignee_spinner)
@BindView(R.id.assignee_spinner)
Spinner mAssigneeSpinner;
@Bind(R.id.milestone_progress)
@BindView(R.id.milestone_progress)
View mMilestoneProgress;
@Bind(R.id.milestone_spinner)
@BindView(R.id.milestone_spinner)
Spinner mMilestoneSpinner;
@BindView(R.id.label_label)
TextView mLabelLabel;
@BindView(R.id.labels_progress)
View mLabelsProgress;
@BindView(R.id.list_labels)
AdapterFlowLayout mListLabels;
@BindView(R.id.text_add_labels)
TextView mTextAddLabels;
 
private Project mProject;
private Issue mIssue;
private HashSet<Member> mMembers;
private AddIssueLabelAdapter mLabelsAdapter;
private Teleprinter mTeleprinter;
@OnClick({R.id.text_add_labels, R.id.list_labels})
void onAddLabelsClick() {
NavigationManager.navigateToAddLabels(AddIssueActivity.this, mProject, mIssue);
}
 
private final Callback<List<Milestone>> mMilestonesCallback = new EasyCallback<List<Milestone>>() {
@Override
Loading
Loading
@@ -144,6 +158,28 @@ public class AddIssueActivity extends MorphActivity implements ATEActivityThemeC
}
};
 
private final Callback<List<Label>> mLabelCallback = new EasyCallback<List<Label>>() {
@Override
public void onResponse(@NonNull List<Label> response) {
mLabelsProgress.setVisibility(View.GONE);
mListLabels.setVisibility(View.VISIBLE);
setLabels(response);
}
@Override
public void onAllFailure(Throwable t) {
Timber.e(t, null);
//null body could just mean no labels have been created for this project
if (t instanceof NullBodyException) {
setLabels(new ArrayList<Label>());
} else {
mListLabels.setVisibility(View.GONE);
mLabelsProgress.setVisibility(View.GONE);
mLabelLabel.setVisibility(View.GONE);
}
}
};
private final Callback<Issue> mIssueCreatedCallback = new EasyCallback<Issue>() {
 
@Override
Loading
Loading
@@ -170,10 +206,13 @@ public class AddIssueActivity extends MorphActivity implements ATEActivityThemeC
setContentView(R.layout.activity_add_issue);
ButterKnife.bind(this);
morph(mRoot);
mTeleprinter = new Teleprinter(this);
 
mProject = Parcels.unwrap(getIntent().getParcelableExtra(KEY_PROJECT));
mIssue = Parcels.unwrap(getIntent().getParcelableExtra(KEY_ISSUE));
mMembers = new HashSet<>();
mLabelsAdapter = new AddIssueLabelAdapter();
mListLabels.setAdapter(mLabelsAdapter);
 
mToolbar.setNavigationIcon(R.drawable.ic_back_24dp);
mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
Loading
Loading
@@ -201,23 +240,13 @@ public class AddIssueActivity extends MorphActivity implements ATEActivityThemeC
} else {
mToolbar.inflateMenu(R.menu.menu_add_milestone);
}
mRoot.addListener(new ElasticDragDismissListener() {
@Override
public void onDrag(float elasticOffset, float elasticOffsetPixels, float rawOffset, float rawOffsetPixels) {
}
@Override
public void onDragDismissed() {
onBackPressed();
}
});
load();
}
 
private void load() {
GitLabClient.instance().getMilestones(mProject.getId()).enqueue(mMilestonesCallback);
GitLabClient.instance().getProjectMembers(mProject.getId()).enqueue(mAssigneeCallback);
GitLabClient.instance().getLabels(mProject.getId()).enqueue(mLabelCallback);
}
 
private void showLoading() {
Loading
Loading
@@ -245,8 +274,27 @@ public class AddIssueActivity extends MorphActivity implements ATEActivityThemeC
}
}
 
private void setLabels(List<Label> projectLabels) {
if (projectLabels != null && !projectLabels.isEmpty() && mIssue != null && mIssue.getLabels() != null) {
ArrayList<Label> currentLabels = new ArrayList<>();
for (Label label : projectLabels) {
for (String labelName : mIssue.getLabels()) {
if (labelName.equals(label.getName())) {
currentLabels.add(label);
}
}
}
if (!currentLabels.isEmpty()) {
mLabelsAdapter.setLabels(currentLabels);
}
} else {
mTextAddLabels.setVisibility(View.VISIBLE);
}
}
private void save() {
if (!TextUtils.isEmpty(mTitleInput.getText())) {
mTeleprinter.hideKeyboard();
mTitleInputLayout.setError(null);
showLoading();
Long assigneeId = null;
Loading
Loading
Loading
Loading
@@ -4,7 +4,6 @@ package com.commit451.gitlab.activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.annotation.NonNull;
import android.support.design.widget.Snackbar;
import android.support.design.widget.TextInputLayout;
Loading
Loading
@@ -14,10 +13,9 @@ import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.FrameLayout;
 
import com.afollestad.appthemeengine.customizers.ATEActivityThemeCustomizer;
import com.commit451.elasticdragdismisslayout.ElasticDragDismissFrameLayout;
import com.commit451.elasticdragdismisslayout.ElasticDragDismissListener;
import com.commit451.easel.Easel;
import com.commit451.gitlab.LabCoatApp;
import com.commit451.gitlab.R;
import com.commit451.gitlab.api.EasyCallback;
Loading
Loading
@@ -25,7 +23,6 @@ import com.commit451.gitlab.api.GitLabClient;
import com.commit451.gitlab.event.MilestoneChangedEvent;
import com.commit451.gitlab.event.MilestoneCreatedEvent;
import com.commit451.gitlab.model.api.Milestone;
import com.commit451.gitlab.util.AppThemeUtil;
import com.wdullaer.materialdatetimepicker.date.DatePickerDialog;
 
import org.parceler.Parcels;
Loading
Loading
@@ -33,28 +30,22 @@ import org.parceler.Parcels;
import java.util.Calendar;
import java.util.Date;
 
import butterknife.Bind;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import retrofit2.Callback;
import timber.log.Timber;
 
public class AddMilestoneActivity extends MorphActivity implements ATEActivityThemeCustomizer {
@Override
public int getActivityTheme() {
return PreferenceManager.getDefaultSharedPreferences(this).getBoolean("dark_theme", true) ?
R.style.Activity_Translucent : R.style.ActivityLight_Translucent;
}
public class AddMilestoneActivity extends MorphActivity {
 
private static final String KEY_PROJECT_ID = "project_id";
private static final String KEY_MILESTONE = "milestone";
 
public static Intent newInstance(Context context, long projectId) {
return newInstance(context, projectId, null);
public static Intent newIntent(Context context, long projectId) {
return newIntent(context, projectId, null);
}
 
public static Intent newInstance(Context context, long projectId, Milestone milestone) {
public static Intent newIntent(Context context, long projectId, Milestone milestone) {
Intent intent = new Intent(context, AddMilestoneActivity.class);
intent.putExtra(KEY_PROJECT_ID, projectId);
if (milestone != null) {
Loading
Loading
@@ -63,19 +54,19 @@ public class AddMilestoneActivity extends MorphActivity implements ATEActivityTh
return intent;
}
 
@Bind(R.id.root)
ElasticDragDismissFrameLayout mRoot;
@Bind(R.id.toolbar)
@BindView(R.id.root)
FrameLayout mRoot;
@BindView(R.id.toolbar)
Toolbar mToolbar;
@Bind(R.id.title_text_input_layout)
@BindView(R.id.title_text_input_layout)
TextInputLayout mTitleTextInputLayout;
@Bind(R.id.title)
@BindView(R.id.title)
EditText mTitle;
@Bind(R.id.description)
@BindView(R.id.description)
EditText mDescription;
@Bind(R.id.due_date)
@BindView(R.id.due_date)
Button mDueDate;
@Bind(R.id.progress)
@BindView(R.id.progress)
View mProgress;
 
@OnClick(R.id.due_date)
Loading
Loading
@@ -90,7 +81,7 @@ public class AddMilestoneActivity extends MorphActivity implements ATEActivityTh
now.get(Calendar.MONTH),
now.get(Calendar.DAY_OF_MONTH)
);
dpd.setAccentColor(AppThemeUtil.resolveAccentColor(this));
dpd.setAccentColor(Easel.getThemeAttrColor(this, R.attr.colorAccent));
dpd.show(getFragmentManager(), "date_picker");
}
 
Loading
Loading
@@ -166,15 +157,6 @@ public class AddMilestoneActivity extends MorphActivity implements ATEActivityTh
return false;
}
});
mRoot.addListener(new ElasticDragDismissListener() {
@Override
public void onDrag(float elasticOffset, float elasticOffsetPixels, float rawOffset, float rawOffsetPixels) {}
@Override
public void onDragDismissed() {
onBackPressed();
}
});
}
 
private void createMilestone() {
Loading
Loading
Loading
Loading
@@ -31,15 +31,15 @@ import com.commit451.gitlab.event.MemberAddedEvent;
import com.commit451.gitlab.model.api.Group;
import com.commit451.gitlab.model.api.Member;
import com.commit451.gitlab.model.api.UserBasic;
import com.commit451.gitlab.util.KeyboardUtil;
import com.commit451.gitlab.util.PaginationUtil;
import com.commit451.gitlab.viewHolder.UserViewHolder;
import com.commit451.teleprinter.Teleprinter;
 
import org.parceler.Parcels;
 
import java.util.List;
 
import butterknife.Bind;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import retrofit2.Callback;
Loading
Loading
@@ -65,17 +65,17 @@ public class AddUserActivity extends MorphActivity {
return intent;
}
 
@Bind(R.id.root)
@BindView(R.id.root)
ViewGroup mRoot;
@Bind(R.id.toolbar)
@BindView(R.id.toolbar)
Toolbar mToolbar;
@Bind(R.id.search)
@BindView(R.id.search)
EditText mUserSearch;
@Bind(R.id.swipe_layout)
@BindView(R.id.swipe_layout)
SwipeRefreshLayout mSwipeRefreshLayout;
@Bind(R.id.list)
@BindView(R.id.list)
RecyclerView mRecyclerView;
@Bind(R.id.clear)
@BindView(R.id.clear)
View mClearView;
GridLayoutManager mUserLinearLayoutManager;
 
Loading
Loading
@@ -86,7 +86,7 @@ public class AddUserActivity extends MorphActivity {
public void run() {
mClearView.setVisibility(View.GONE);
mUserSearch.getText().clear();
KeyboardUtil.showKeyboard(AddUserActivity.this, mUserSearch);
mTeleprinter.showKeyboard(mUserSearch);
}
});
}
Loading
Loading
@@ -99,6 +99,8 @@ public class AddUserActivity extends MorphActivity {
String mSearchQuery;
Uri mNextPageUrl;
boolean mLoading = false;
Teleprinter mTeleprinter;
 
private final View.OnClickListener mOnBackPressed = new View.OnClickListener() {
@Override
Loading
Loading
@@ -246,6 +248,7 @@ public class AddUserActivity extends MorphActivity {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_user);
ButterKnife.bind(this);
mTeleprinter = new Teleprinter(this);
mProjectId = getIntent().getLongExtra(KEY_PROJECT_ID, -1);
mGroup = Parcels.unwrap(getIntent().getParcelableExtra(KEY_GROUP));
mAccessDialog = new AccessDialog(this, mOnAccessAppliedListener);
Loading
Loading
@@ -264,7 +267,7 @@ public class AddUserActivity extends MorphActivity {
}
 
private void loadData() {
KeyboardUtil.hideKeyboard(AddUserActivity.this);
mTeleprinter.hideKeyboard();
mSwipeRefreshLayout.setRefreshing(true);
mLoading = true;
GitLabClient.instance().searchUsers(mSearchQuery).enqueue(mUserCallback);
Loading
Loading
Loading
Loading
@@ -6,20 +6,12 @@ import android.support.design.widget.TextInputLayout;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
 
import com.afollestad.appthemeengine.ATEActivity;
import com.commit451.gitlab.R;
 
/**
* Created by Jawn on 7/27/2015.
* Base activity for others to derive from
*/
public class BaseActivity extends ATEActivity {
@Nullable
@Override
public final String getATEKey() {
return PreferenceManager.getDefaultSharedPreferences(this).getBoolean("dark_theme", true) ?
"dark_theme" : "light_theme";
}
public class BaseActivity extends AppCompatActivity {
 
public boolean hasEmptyFields(TextInputLayout... textInputLayouts) {
boolean hasEmptyField = false;
Loading
Loading
package com.commit451.gitlab.activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.Snackbar;
import android.support.design.widget.TabLayout;
import android.support.v4.view.ViewPager;
import android.support.v7.widget.Toolbar;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import com.commit451.gitlab.LabCoatApp;
import com.commit451.gitlab.R;
import com.commit451.gitlab.adapter.BuildSectionsPagerAdapter;
import com.commit451.gitlab.api.EasyCallback;
import com.commit451.gitlab.api.GitLabClient;
import com.commit451.gitlab.event.BuildChangedEvent;
import com.commit451.gitlab.model.api.Build;
import com.commit451.gitlab.model.api.Project;
import org.parceler.Parcels;
import butterknife.BindView;
import butterknife.ButterKnife;
import timber.log.Timber;
/**
* Shows the details of a merge request
*/
public class BuildActivity extends BaseActivity {
private static final String KEY_PROJECT = "key_project";
private static final String KEY_BUILD = "key_merge_request";
public static Intent newIntent(Context context, Project project, Build build) {
Intent intent = new Intent(context, BuildActivity.class);
intent.putExtra(KEY_PROJECT, Parcels.wrap(project));
intent.putExtra(KEY_BUILD, Parcels.wrap(build));
return intent;
}
@BindView(R.id.root)
ViewGroup mRoot;
@BindView(R.id.toolbar)
Toolbar mToolbar;
@BindView(R.id.tabs)
TabLayout mTabLayout;
@BindView(R.id.pager)
ViewPager mViewPager;
@BindView(R.id.progress)
View mProgress;
Project mProject;
Build mBuild;
private final EasyCallback<Build> mRetryCallback = new EasyCallback<Build>() {
@Override
public void onResponse(@NonNull Build response) {
mProgress.setVisibility(View.GONE);
Snackbar.make(mRoot, R.string.build_started, Snackbar.LENGTH_LONG)
.show();
LabCoatApp.bus().post(new BuildChangedEvent(response));
}
@Override
public void onAllFailure(Throwable t) {
Timber.e(t, null);
mProgress.setVisibility(View.GONE);
Snackbar.make(mRoot, R.string.unable_to_retry_build, Snackbar.LENGTH_LONG)
.show();
}
};
private final EasyCallback<Build> mEraseCallback = new EasyCallback<Build>() {
@Override
public void onResponse(@NonNull Build response) {
mProgress.setVisibility(View.GONE);
Snackbar.make(mRoot, R.string.build_erased, Snackbar.LENGTH_LONG)
.show();
LabCoatApp.bus().post(new BuildChangedEvent(response));
}
@Override
public void onAllFailure(Throwable t) {
Timber.e(t, null);
mProgress.setVisibility(View.GONE);
Snackbar.make(mRoot, R.string.unable_to_erase_build, Snackbar.LENGTH_LONG)
.show();
}
};
private final EasyCallback<Build> mCancelCallback = new EasyCallback<Build>() {
@Override
public void onResponse(@NonNull Build response) {
mProgress.setVisibility(View.GONE);
Snackbar.make(mRoot, R.string.build_canceled, Snackbar.LENGTH_LONG)
.show();
LabCoatApp.bus().post(new BuildChangedEvent(response));
}
@Override
public void onAllFailure(Throwable t) {
Timber.e(t, null);
mProgress.setVisibility(View.GONE);
Snackbar.make(mRoot, R.string.unable_to_cancel_build, Snackbar.LENGTH_LONG)
.show();
}
};
private final Toolbar.OnMenuItemClickListener mOnMenuItemClickListener = new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_retry:
mProgress.setVisibility(View.VISIBLE);
GitLabClient.instance().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);
return true;
case R.id.action_cancel:
mProgress.setVisibility(View.VISIBLE);
GitLabClient.instance().cancelBuild(mProject.getId(), mBuild.getId()).enqueue(mCancelCallback);
return true;
}
return false;
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_build);
ButterKnife.bind(this);
mProject = Parcels.unwrap(getIntent().getParcelableExtra(KEY_PROJECT));
mBuild = Parcels.unwrap(getIntent().getParcelableExtra(KEY_BUILD));
mToolbar.setTitle(getString(R.string.build_number) + mBuild.getId());
mToolbar.setNavigationIcon(R.drawable.ic_back_24dp);
mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
mToolbar.setSubtitle(mProject.getNameWithNamespace());
mToolbar.inflateMenu(R.menu.menu_build);
mToolbar.setOnMenuItemClickListener(mOnMenuItemClickListener);
setupTabs();
}
private void setupTabs() {
BuildSectionsPagerAdapter sectionsPagerAdapter = new BuildSectionsPagerAdapter(
this,
getSupportFragmentManager(),
mProject,
mBuild);
mViewPager.setAdapter(sectionsPagerAdapter);
mTabLayout.setupWithViewPager(mViewPager);
}
}
Loading
Loading
@@ -24,7 +24,7 @@ import org.parceler.Parcels;
 
import java.util.List;
 
import butterknife.Bind;
import butterknife.BindView;
import butterknife.ButterKnife;
import retrofit2.Callback;
import timber.log.Timber;
Loading
Loading
@@ -37,19 +37,19 @@ public class DiffActivity extends BaseActivity {
private static final String EXTRA_PROJECT = "extra_project";
private static final String EXTRA_COMMIT = "extra_commit";
 
public static Intent newInstance(Context context, Project project, RepositoryCommit commit) {
public static Intent newIntent(Context context, Project project, RepositoryCommit commit) {
Intent intent = new Intent(context, DiffActivity.class);
intent.putExtra(EXTRA_PROJECT, Parcels.wrap(project));
intent.putExtra(EXTRA_COMMIT, Parcels.wrap(commit));
return intent;
}
 
@Bind(R.id.root) ViewGroup mRoot;
@Bind(R.id.toolbar) Toolbar mToolbar;
@Bind(R.id.swipe_layout) SwipeRefreshLayout mSwipeRefreshLayout;
@Bind(R.id.list) RecyclerView mDiffRecyclerView;
@BindView(R.id.root) ViewGroup mRoot;
@BindView(R.id.toolbar) Toolbar mToolbar;
@BindView(R.id.swipe_layout) SwipeRefreshLayout mSwipeRefreshLayout;
@BindView(R.id.list) RecyclerView mDiffRecyclerView;
DiffAdapter mDiffAdapter;
@Bind(R.id.message_text) TextView mMessageText;
@BindView(R.id.message_text) TextView mMessageText;
 
private Project mProject;
private RepositoryCommit mCommit;
Loading
Loading
Loading
Loading
@@ -34,7 +34,7 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.nio.charset.Charset;
 
import butterknife.Bind;
import butterknife.BindView;
import butterknife.ButterKnife;
import retrofit2.Callback;
import rx.Subscriber;
Loading
Loading
@@ -65,10 +65,10 @@ public class FileActivity extends BaseActivity {
return intent;
}
 
@Bind(R.id.root) ViewGroup mRoot;
@Bind(R.id.toolbar) Toolbar mToolbar;
@Bind(R.id.file_blob) WebView mFileBlobView;
@Bind(R.id.progress) View mProgressView;
@BindView(R.id.root) ViewGroup mRoot;
@BindView(R.id.toolbar) Toolbar mToolbar;
@BindView(R.id.file_blob) WebView mFileBlobView;
@BindView(R.id.progress) View mProgressView;
 
private long mProjectId;
private String mPath;
Loading
Loading
Loading
Loading
@@ -5,10 +5,8 @@ import android.animation.ObjectAnimator;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Build;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.annotation.NonNull;
import android.support.design.widget.CollapsingToolbarLayout;
import android.support.design.widget.Snackbar;
Loading
Loading
@@ -19,9 +17,6 @@ import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.ImageView;
 
import com.afollestad.appthemeengine.Config;
import com.afollestad.appthemeengine.customizers.ATEActivityThemeCustomizer;
import com.afollestad.appthemeengine.util.ATEUtil;
import com.commit451.easel.Easel;
import com.commit451.gitlab.R;
import com.commit451.gitlab.adapter.GroupPagerAdapter;
Loading
Loading
@@ -30,11 +25,10 @@ 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;
import com.commit451.gitlab.util.AppThemeUtil;
 
import org.parceler.Parcels;
 
import butterknife.Bind;
import butterknife.BindView;
import butterknife.ButterKnife;
import retrofit2.Callback;
import timber.log.Timber;
Loading
Loading
@@ -42,45 +36,42 @@ import timber.log.Timber;
/**
* See the things about the group
*/
public class GroupActivity extends BaseActivity implements ATEActivityThemeCustomizer {
@Override
public int getActivityTheme() {
return PreferenceManager.getDefaultSharedPreferences(this).getBoolean("dark_theme", true) ?
R.style.Activity_Group : R.style.ActivityLight_Group;
}
public class GroupActivity extends BaseActivity {
 
private static final String KEY_GROUP = "key_group";
private static final String KEY_GROUP_ID = "key_group_id";
 
public static Intent newInstance(Context context, Group group) {
public static Intent newIntent(Context context, Group group) {
Intent intent = new Intent(context, GroupActivity.class);
intent.putExtra(KEY_GROUP, Parcels.wrap(group));
return intent;
}
 
public static Intent newInstance(Context context, long groupId) {
public static Intent newIntent(Context context, long groupId) {
Intent intent = new Intent(context, GroupActivity.class);
intent.putExtra(KEY_GROUP_ID, groupId);
return intent;
}
 
@Bind(R.id.root) View mRoot;
@Bind(R.id.toolbar) Toolbar mToolbar;
@Bind(R.id.collapsing_toolbar) CollapsingToolbarLayout mCollapsingToolbarLayout;
@Bind(R.id.viewpager) ViewPager mViewPager;
@Bind(R.id.tabs) TabLayout mTabLayout;
@Bind(R.id.backdrop) ImageView mBackdrop;
@BindView(R.id.root) View mRoot;
@BindView(R.id.toolbar) Toolbar mToolbar;
@BindView(R.id.collapsing_toolbar) CollapsingToolbarLayout mCollapsingToolbarLayout;
@BindView(R.id.viewpager) ViewPager mViewPager;
@BindView(R.id.tabs) TabLayout mTabLayout;
@BindView(R.id.backdrop) ImageView mBackdrop;
@BindView(R.id.progress) View mProgress;
 
private final Callback<GroupDetail> mGroupCallback = new EasyCallback<GroupDetail>() {
@Override
public void onResponse(@NonNull GroupDetail response) {
mProgress.setVisibility(View.GONE);
bind(response);
}
 
@Override
public void onAllFailure(Throwable t) {
Timber.e(t, null);
mProgress.setVisibility(View.GONE);
showError();
}
};
Loading
Loading
@@ -92,10 +83,6 @@ public class GroupActivity extends BaseActivity implements ATEActivityThemeCusto
ButterKnife.bind(this);
 
// Default content and scrim colors
mCollapsingToolbarLayout.setContentScrimColor(
Config.primaryColor(this, AppThemeUtil.resolveThemeKey(this)));
mCollapsingToolbarLayout.setStatusBarScrimColor(
Config.primaryColorDark(this, AppThemeUtil.resolveThemeKey(this)));
 
mToolbar.setNavigationIcon(R.drawable.ic_back_24dp);
mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
Loading
Loading
@@ -109,6 +96,7 @@ public class GroupActivity extends BaseActivity implements ATEActivityThemeCusto
Group group = Parcels.unwrap(getIntent().getParcelableExtra(KEY_GROUP));
bind(group);
} else {
mProgress.setVisibility(View.VISIBLE);
long groupId = getIntent().getLongExtra(KEY_GROUP_ID, -1);
GitLabClient.instance().getGroup(groupId).enqueue(mGroupCallback);
}
Loading
Loading
@@ -139,8 +127,8 @@ public class GroupActivity extends BaseActivity implements ATEActivityThemeCusto
 
private void bindPalette(Palette palette) {
int animationTime = 1000;
int vibrantColor = palette.getVibrantColor(AppThemeUtil.resolvePrimaryColor(this));
int darkerColor = ATEUtil.darkenColor(vibrantColor);
int vibrantColor = palette.getVibrantColor(Easel.getThemeAttrColor(this, R.attr.colorAccent));
int darkerColor = Easel.getDarkerColor(vibrantColor);
 
if (Build.VERSION.SDK_INT >= 21) {
Easel.getNavigationBarColorAnimator(getWindow(), darkerColor)
Loading
Loading
@@ -149,12 +137,12 @@ public class GroupActivity extends BaseActivity implements ATEActivityThemeCusto
}
 
ObjectAnimator.ofObject(mCollapsingToolbarLayout, "contentScrimColor", new ArgbEvaluator(),
((ColorDrawable) mCollapsingToolbarLayout.getContentScrim()).getColor(), vibrantColor)
Easel.getThemeAttrColor(this, R.attr.colorPrimary), vibrantColor)
.setDuration(animationTime)
.start();
 
ObjectAnimator.ofObject(mCollapsingToolbarLayout, "statusBarScrimColor", new ArgbEvaluator(),
((ColorDrawable) mCollapsingToolbarLayout.getStatusBarScrim()).getColor(), darkerColor)
Easel.getThemeAttrColor(this, R.attr.colorPrimaryDark), darkerColor)
.setDuration(animationTime)
.start();
 
Loading
Loading
Loading
Loading
@@ -4,7 +4,6 @@ import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.annotation.NonNull;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
Loading
Loading
@@ -16,50 +15,46 @@ import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.TextView;
 
import com.afollestad.appthemeengine.customizers.ATEActivityThemeCustomizer;
import com.commit451.gitlab.LabCoatApp;
import com.commit451.gitlab.R;
import com.commit451.gitlab.adapter.GroupAdapter;
import com.commit451.gitlab.api.EasyCallback;
import com.commit451.gitlab.api.GitLabClient;
import com.commit451.gitlab.event.CloseDrawerEvent;
import com.commit451.gitlab.model.api.Group;
import com.commit451.gitlab.util.NavigationManager;
import com.commit451.gitlab.navigation.NavigationManager;
import com.commit451.gitlab.util.PaginationUtil;
import com.commit451.gitlab.viewHolder.GroupViewHolder;
import com.squareup.otto.Subscribe;
 
import java.util.List;
 
import butterknife.Bind;
import butterknife.BindView;
import butterknife.ButterKnife;
import retrofit2.Callback;
import timber.log.Timber;
 
/**
* Displays the groups of the current user
* Created by Jawn on 10/4/2015.
*/
public class GroupsActivity extends BaseActivity implements ATEActivityThemeCustomizer {
public class GroupsActivity extends BaseActivity {
 
@Override
public int getActivityTheme() {
return PreferenceManager.getDefaultSharedPreferences(this).getBoolean("dark_theme", true) ?
R.style.Activity_Groups : R.style.ActivityLight_Groups;
}
public static Intent newInstance(Context context) {
public static Intent newIntent(Context context) {
Intent intent = new Intent(context, GroupsActivity.class);
return intent;
}
 
@Bind(R.id.drawer_layout) DrawerLayout mDrawerLayout;
@Bind(R.id.toolbar) Toolbar mToolbar;
@Bind(R.id.swipe_layout) SwipeRefreshLayout mSwipeRefreshLayout;
@Bind(R.id.list) RecyclerView mGroupRecyclerView;
@Bind(R.id.message_text) TextView mMessageText;
@BindView(R.id.drawer_layout) DrawerLayout mDrawerLayout;
@BindView(R.id.toolbar) Toolbar mToolbar;
@BindView(R.id.swipe_layout) SwipeRefreshLayout mSwipeRefreshLayout;
@BindView(R.id.list) RecyclerView mGroupRecyclerView;
@BindView(R.id.message_text) TextView mMessageText;
GroupAdapter mGroupAdapter;
LinearLayoutManager mGroupLayoutManager;
 
private Uri mNextPageUrl;
private boolean mLoading = false;
EventReceiver mEventReceiver;
 
private final RecyclerView.OnScrollListener mOnScrollListener = new RecyclerView.OnScrollListener() {
@Override
Loading
Loading
@@ -127,6 +122,9 @@ public class GroupsActivity extends BaseActivity implements ATEActivityThemeCust
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_groups);
ButterKnife.bind(this);
mEventReceiver = new EventReceiver();
LabCoatApp.bus().register(mEventReceiver);
mToolbar.setTitle(R.string.nav_groups);
mToolbar.setNavigationIcon(R.drawable.ic_menu_24dp);
mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
Loading
Loading
@@ -155,6 +153,12 @@ public class GroupsActivity extends BaseActivity implements ATEActivityThemeCust
load();
}
 
@Override
protected void onDestroy() {
super.onDestroy();
LabCoatApp.bus().unregister(mEventReceiver);
}
private void load() {
mMessageText.setVisibility(View.GONE);
mSwipeRefreshLayout.post(new Runnable() {
Loading
Loading
@@ -188,7 +192,15 @@ public class GroupsActivity extends BaseActivity implements ATEActivityThemeCust
 
mLoading = true;
 
Timber.d("loadMore called for " + mNextPageUrl);
Timber.d("loadMore called for %s", mNextPageUrl);
GitLabClient.instance().getGroups(mNextPageUrl.toString()).enqueue(mMoreGroupsCallback);
}
private class EventReceiver {
@Subscribe
public void onCloseDrawerEvent(CloseDrawerEvent event) {
mDrawerLayout.closeDrawers();
}
}
}
Loading
Loading
@@ -2,19 +2,19 @@ package com.commit451.gitlab.activity;
 
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.support.annotation.NonNull;
import android.support.design.widget.Snackbar;
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.KeyEvent;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.TextView;
 
import com.commit451.gitlab.LabCoatApp;
Loading
Loading
@@ -24,22 +24,28 @@ import com.commit451.gitlab.api.EasyCallback;
import com.commit451.gitlab.api.GitLabClient;
import com.commit451.gitlab.event.IssueChangedEvent;
import com.commit451.gitlab.event.IssueReloadEvent;
import com.commit451.gitlab.model.api.FileUploadResponse;
import com.commit451.gitlab.model.api.Issue;
import com.commit451.gitlab.model.api.Note;
import com.commit451.gitlab.model.api.Project;
import com.commit451.gitlab.navigation.NavigationManager;
import com.commit451.gitlab.util.IntentUtil;
import com.commit451.gitlab.util.KeyboardUtil;
import com.commit451.gitlab.util.NavigationManager;
import com.commit451.gitlab.util.PaginationUtil;
import com.commit451.gitlab.view.SendMessageView;
import com.commit451.teleprinter.Teleprinter;
import com.squareup.otto.Subscribe;
 
import org.parceler.Parcels;
 
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.List;
 
import butterknife.Bind;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import okhttp3.MediaType;
import okhttp3.RequestBody;
import retrofit2.Callback;
import timber.log.Timber;
 
Loading
Loading
@@ -50,47 +56,57 @@ public class IssueActivity extends BaseActivity {
 
private static final String EXTRA_PROJECT = "extra_project";
private static final String EXTRA_SELECTED_ISSUE = "extra_selected_issue";
private static final String EXTRA_PROJECT_NAMESPACE = "project_namespace";
private static final String EXTRA_PROJECT_NAME = "project_name";
private static final String EXTRA_ISSUE_IID = "extra_issue_iid";
 
public static Intent newInstance(Context context, Project project, Issue issue) {
private static final int REQUEST_IMAGE = 1;
public static Intent newIntent(Context context, Project project, Issue issue) {
Intent intent = new Intent(context, IssueActivity.class);
intent.putExtra(EXTRA_PROJECT, Parcels.wrap(project));
intent.putExtra(EXTRA_SELECTED_ISSUE, Parcels.wrap(issue));
return intent;
}
 
@Bind(R.id.root)
public static Intent newIntent(Context context, String namespace, String projectName, String issueIid) {
Intent intent = new Intent(context, IssueActivity.class);
intent.putExtra(EXTRA_PROJECT_NAMESPACE, namespace);
intent.putExtra(EXTRA_PROJECT_NAME, projectName);
intent.putExtra(EXTRA_ISSUE_IID, issueIid);
return intent;
}
@BindView(R.id.root)
ViewGroup mRoot;
@Bind(R.id.toolbar)
@BindView(R.id.toolbar)
Toolbar mToolbar;
@Bind(R.id.issue_title)
@BindView(R.id.issue_title)
TextView mIssueTitle;
@Bind(R.id.swipe_layout)
@BindView(R.id.swipe_layout)
SwipeRefreshLayout mSwipeRefreshLayout;
@Bind(R.id.list)
@BindView(R.id.list)
RecyclerView mNotesRecyclerView;
@Bind(R.id.new_note_edit)
EditText mNewNoteEdit;
@Bind(R.id.progress)
@BindView(R.id.send_message_view)
SendMessageView mSendMessageView;
@BindView(R.id.progress)
View mProgress;
 
@OnClick(R.id.new_note_button)
public void onNewNoteClick() {
postNote();
}
@OnClick(R.id.fab_edit_issue)
public void onEditIssueClick(View fab) {
NavigationManager.navigateToEditIssue(IssueActivity.this, fab, mProject, mIssue);
}
 
private MenuItem mOpenCloseMenuItem;
private IssueDetailsAdapter mIssueDetailsAdapter;
private LinearLayoutManager mNotesLayoutManager;
private Project mProject;
private Issue mIssue;
private String mIssueIid;
private boolean mLoading;
private Uri mNextPageUrl;
private Teleprinter mTeleprinter;
 
private EventReceiver mEventReceiver;
 
Loading
Loading
@@ -122,6 +138,49 @@ public class IssueActivity extends BaseActivity {
}
};
 
private Callback<Project> mProjectCallback = new EasyCallback<Project>() {
@Override
public void onResponse(@NonNull Project response) {
mProject = response;
GitLabClient.instance().getIssuesByIid(mProject.getId(), mIssueIid).enqueue(mIssueCallback);
}
@Override
public void onAllFailure(Throwable t) {
Timber.e(t, null);
mSwipeRefreshLayout.setRefreshing(false);
Snackbar.make(mRoot, getString(R.string.failed_to_load), Snackbar.LENGTH_SHORT)
.show();
}
};
private Callback<List<Issue>> mIssueCallback = new EasyCallback<List<Issue>>() {
@Override
public void onResponse(@NonNull List<Issue> response) {
if (response.isEmpty()) {
mSwipeRefreshLayout.setRefreshing(false);
Snackbar.make(mRoot, getString(R.string.failed_to_load), Snackbar.LENGTH_SHORT)
.show();
} else {
mIssue = response.get(0);
mIssueDetailsAdapter = new IssueDetailsAdapter(IssueActivity.this, mIssue);
mNotesRecyclerView.setAdapter(mIssueDetailsAdapter);
bindIssue();
bindProject();
loadNotes();
}
}
@Override
public void onAllFailure(Throwable t) {
Timber.e(t, null);
mSwipeRefreshLayout.setRefreshing(false);
Snackbar.make(mRoot, getString(R.string.failed_to_load), Snackbar.LENGTH_SHORT)
.show();
}
};
private Callback<List<Note>> mNotesCallback = new EasyCallback<List<Note>>() {
 
@Override
Loading
Loading
@@ -198,17 +257,31 @@ public class IssueActivity extends BaseActivity {
}
};
 
private Callback<FileUploadResponse> mUploadImageCallback = new EasyCallback<FileUploadResponse>() {
@Override
public void onResponse(@NonNull FileUploadResponse response) {
mProgress.setVisibility(View.GONE);
mSendMessageView.appendText(response.getMarkdown());
}
@Override
public void onAllFailure(Throwable t) {
Timber.e(t, null);
mProgress.setVisibility(View.GONE);
Snackbar.make(mRoot, getString(R.string.connection_error), Snackbar.LENGTH_SHORT)
.show();
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_issue);
ButterKnife.bind(this);
mTeleprinter = new Teleprinter(this);
mEventReceiver = new EventReceiver();
LabCoatApp.bus().register(mEventReceiver);
 
mProject = Parcels.unwrap(getIntent().getParcelableExtra(EXTRA_PROJECT));
mIssue = Parcels.unwrap(getIntent().getParcelableExtra(EXTRA_SELECTED_ISSUE));
mToolbar.setNavigationIcon(R.drawable.ic_back_24dp);
mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
Loading
Loading
@@ -216,22 +289,28 @@ public class IssueActivity extends BaseActivity {
onBackPressed();
}
});
mToolbar.setSubtitle(mProject.getNameWithNamespace());
mToolbar.inflateMenu(R.menu.menu_issue);
mOpenCloseMenuItem = mToolbar.getMenu().findItem(R.id.action_close);
mToolbar.setOnMenuItemClickListener(mOnMenuItemClickListener);
 
mIssueDetailsAdapter = new IssueDetailsAdapter(IssueActivity.this, mIssue);
mNotesLayoutManager = new LinearLayoutManager(this);
mNotesRecyclerView.setLayoutManager(mNotesLayoutManager);
mNotesRecyclerView.setAdapter(mIssueDetailsAdapter);
mNotesRecyclerView.addOnScrollListener(mOnScrollListener);
 
mNewNoteEdit.setOnEditorActionListener(new TextView.OnEditorActionListener() {
mSendMessageView.setCallbacks(new SendMessageView.Callbacks() {
@Override
public void onSendClicked(String message) {
postNote(message);
}
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
postNote();
return true;
public void onGalleryClicked() {
NavigationManager.navigateToChoosePhoto(IssueActivity.this, REQUEST_IMAGE);
}
@Override
public void onCameraClicked() {
}
});
 
Loading
Loading
@@ -241,8 +320,51 @@ public class IssueActivity extends BaseActivity {
loadNotes();
}
});
bindIssue();
loadNotes();
if (getIntent().hasExtra(EXTRA_SELECTED_ISSUE)) {
mProject = Parcels.unwrap(getIntent().getParcelableExtra(EXTRA_PROJECT));
mIssue = Parcels.unwrap(getIntent().getParcelableExtra(EXTRA_SELECTED_ISSUE));
mIssueDetailsAdapter = new IssueDetailsAdapter(IssueActivity.this, mIssue);
mNotesRecyclerView.setAdapter(mIssueDetailsAdapter);
bindIssue();
bindProject();
loadNotes();
} else if (getIntent().hasExtra(EXTRA_ISSUE_IID)) {
mIssueIid = getIntent().getStringExtra(EXTRA_ISSUE_IID);
String projectNamespace = getIntent().getStringExtra(EXTRA_PROJECT_NAMESPACE);
String projectName = getIntent().getStringExtra(EXTRA_PROJECT_NAME);
mSwipeRefreshLayout.post(new Runnable() {
@Override
public void run() {
if (mSwipeRefreshLayout != null) {
mSwipeRefreshLayout.setRefreshing(true);
}
}
});
GitLabClient.instance().getProject(projectNamespace, projectName).enqueue(mProjectCallback);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case REQUEST_IMAGE:
//Not checking result code because apps are dumb and don't use it
Uri selectedImage = data.getData();
if (selectedImage != null) {
try {
Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), selectedImage);
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);
} catch (IOException e) {
Timber.e(e, null);
}
}
break;
}
}
 
@Override
Loading
Loading
@@ -251,6 +373,10 @@ public class IssueActivity extends BaseActivity {
LabCoatApp.bus().unregister(mEventReceiver);
}
 
private void bindProject() {
mToolbar.setSubtitle(mProject.getNameWithNamespace());
}
private void bindIssue() {
mToolbar.setTitle(getString(R.string.issue_number) + mIssue.getIid());
setOpenCloseMenuStatus();
Loading
Loading
@@ -277,10 +403,9 @@ public class IssueActivity extends BaseActivity {
GitLabClient.instance().getIssueNotes(mNextPageUrl.toString()).enqueue(mMoreNotesCallback);
}
 
private void postNote() {
String body = mNewNoteEdit.getText().toString();
private void postNote(String message) {
 
if (body.length() < 1) {
if (message.length() < 1) {
return;
}
 
Loading
Loading
@@ -288,10 +413,10 @@ public class IssueActivity extends BaseActivity {
mProgress.setAlpha(0.0f);
mProgress.animate().alpha(1.0f);
// Clear text & collapse keyboard
KeyboardUtil.hideKeyboard(this);
mNewNoteEdit.setText("");
mTeleprinter.hideKeyboard();
mSendMessageView.clearText();
 
GitLabClient.instance().addIssueNote(mProject.getId(), mIssue.getId(), body).enqueue(mPostNoteCallback);
GitLabClient.instance().addIssueNote(mProject.getId(), mIssue.getId(), message).enqueue(mPostNoteCallback);
}
 
private void closeOrOpenIssue() {
Loading
Loading
Loading
Loading
@@ -6,9 +6,8 @@ import android.os.Bundle;
import com.commit451.gitlab.BuildConfig;
import com.commit451.gitlab.data.Prefs;
import com.commit451.gitlab.model.Account;
import com.commit451.gitlab.util.AppThemeUtil;
import com.commit451.gitlab.ssl.CustomKeyManager;
import com.commit451.gitlab.util.NavigationManager;
import com.commit451.gitlab.navigation.NavigationManager;
 
import java.util.List;
 
Loading
Loading
@@ -18,11 +17,10 @@ import timber.log.Timber;
* This activity acts as switching platform for the application directing the user to the appropriate
* activity based on their logged in state
*/
public class GitlabActivity extends Activity {
public class LaunchActivity extends Activity {
 
@Override
protected void onCreate(Bundle savedInstanceState) {
AppThemeUtil.setupDefaultConfigs(this);
super.onCreate(savedInstanceState);
 
int savedVersion = Prefs.getSavedVersion(this);
Loading
Loading
@@ -48,7 +46,7 @@ public class GitlabActivity extends Activity {
runOnUiThread(new Runnable() {
@Override
public void run() {
NavigationManager.navigateToProjects(GitlabActivity.this);
NavigationManager.navigateToStartingActivity(LaunchActivity.this);
finish();
}
});
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