Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • Commit451/LabCoat
  • Iktwo/GitLabAndroid
  • jonduran3000/GitLabAndroid
  • steffandroid/GitLabAndroid
  • xiaoyanit/GitLabAndroid
  • scottolcott/GitLabAndroid
  • james.mu/GitLabAndroid
  • pushkarpandey27/GitLabAndroid
  • atomfrede/GitLabAndroid
  • burrito82/GitLabAndroid
  • txlong_onz/GitLabAndroid
  • ricardo.longa/GitLabAndroid
  • rubenroy/GitLabAndroid
  • remy_android/GitLabAndroid
  • mzestars/GitLabAndroid
  • theobisproject/LabCoat
  • tarek360/GitLabAndroid
  • TR4Android/LabCoat
  • lvsmart/LabCoat
  • buddybuild/LabCoat
  • tkuah/LabCoat
  • jay3126/LabCoat
  • rmad17/LabCoat
  • galvatron/LabCoat
  • lijianjian13/LabCoat
  • Cody2333/LabCoat
  • ajtfreitas/LabCoat
  • nestor.lobo/LabCoat
  • Microgamer/LabCoat
  • irvinwang/LabCoat
  • avallete/LabCoat
  • digicazter/LabCoat
  • lovexiaov/LabCoat
  • dineshkarpe/LabCoat
  • bak1an/LabCoat
  • loomis/LabCoat
  • sank20/LabCoat
  • Jawnnyfoo/LabCoat
  • scottyab/LabCoat
  • aleksandar-stefanovic/LabCoat
  • tfontana/LabCoat
  • fuzzmz/LabCoat
  • dipaksavaliya/LabCoat
  • adi.bk/LabCoat
  • andreea.voicu/LabCoat
  • H1ghT0p/LabCoat
  • indritqoku/LabCoat
  • armpogart/LabCoat
  • eyedol/LabCoat
  • khairulnizan/LabCoat
  • vadm.perspectiva/LabCoat
  • yiyoss1986/LabCoat
  • BRoy98/LabCoat
  • satyarth.23/LabCoat
  • victorpe76/LabCoat
  • canhnht/LabCoat
  • jinhu/LabCoat
  • weathery/LabCoat
  • gitlabproject_s/LabCoat
  • tfKamran/LabCoat
  • voxadam/LabCoat
  • nprail/LabCoat
  • terrakok/LabCoat
  • jungletian/LabCoat
  • goldins/LabCoat
  • insanum/LabCoat
  • lzrs/LabCoat
  • shankarg/LabCoat
  • rm3l/LabCoat
  • alamo_dev/LabCoat
  • insomniaqc/LabCoat
  • mrasif/LabCoat
  • Babasile/LabCoat
  • eeyoo/LabCoat
  • ditkin/LabCoat
  • unbubot/LabCoat
  • bschuhm/LabCoat
  • fanticker/LabCoat
  • colorwebdesigner/LabCoat
  • milouse/LabCoat
80 results
Show changes
Showing
with 387 additions and 246 deletions
package com.commit451.gitlab.util;
import android.net.Uri;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.nio.charset.Charset;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public final class Gravatar {
private static final char[] HEX_ARRAY = "0123456789abcdef".toCharArray();
private Gravatar() {
}
public static Builder init() {
return init(null);
}
public static Builder init(String email) {
if (email != null && email.isEmpty()) {
email = null;
}
return new Builder(email);
}
private static String hexify(byte[] bytes) {
char[] hexChars = new char[bytes.length * 2];
for (int i = 0; i < bytes.length; i++) {
int v = bytes[i] & 0xFF;
hexChars[i * 2] = HEX_ARRAY[v >>> 4];
hexChars[i * 2 + 1] = HEX_ARRAY[v & 0x0F];
}
return new String(hexChars, 0, hexChars.length);
}
private static String md5(String raw) {
try {
MessageDigest digest = MessageDigest.getInstance("MD5");
digest.update(raw.getBytes(Charset.forName("UTF-8")));
return hexify(digest.digest());
} catch (NoSuchAlgorithmException e) {
throw new IllegalStateException(e);
}
}
public static class Builder {
private final String mEmail;
private boolean mSSL = false;
private boolean mExtension = false;
private int mSize = -1;
private String mDefaultImage = null;
private boolean mForceDefault = false;
private String mRating = null;
private Builder(String email) {
this.mEmail = email;
}
public Builder ssl() {
mSSL = true;
return this;
}
public Builder extension() {
mExtension = true;
return this;
}
public Builder size(int size) {
if (size < 1 || size > 2048) {
throw new IllegalArgumentException("Image size must be from 1px up to 2048px");
}
mSize = size;
return this;
}
public Builder defaultImage(DefaultImage defaultImage) {
switch (defaultImage) {
case _404:
mDefaultImage = "404";
break;
case MYSTERY_MAN:
mDefaultImage = "mm";
break;
case IDENTICON:
mDefaultImage = "identicon";
break;
case MONSTERID:
mDefaultImage = "monsterid";
break;
case WAVATAR:
mDefaultImage = "wavatar";
break;
case RETRO:
mDefaultImage = "retro";
break;
case BLANK:
mDefaultImage = "blank";
break;
}
return this;
}
public Builder defaultImage(Uri defaultImage) {
try {
mDefaultImage = URLEncoder.encode(defaultImage.toString(), "UTF-8");
} catch (UnsupportedEncodingException e) {
throw new IllegalStateException(e);
}
return this;
}
public Builder forceDefault() {
mForceDefault = true;
return this;
}
public Builder rating(Rating rating) {
switch (rating) {
case G:
mRating = "g";
break;
case PG:
mRating = "pg";
break;
case R:
mRating = "r";
break;
case X:
mRating = "x";
break;
}
return this;
}
public Uri build() {
StringBuilder uriBuilder = new StringBuilder();
if (mSSL) {
uriBuilder.append("https://secure.gravatar.com/avatar/");
} else {
uriBuilder.append("http://www.gravatar.com/avatar/");
}
if (mEmail != null) {
uriBuilder.append(md5(mEmail));
} else {
uriBuilder.append("00000000000000000000000000000000");
}
if (mExtension) {
uriBuilder.append(".jpg");
}
StringBuilder queryBuilder = new StringBuilder();
if (mSize != -1) {
queryBuilder.append("&s=").append(mSize);
}
if (mDefaultImage != null) {
queryBuilder.append("&d=").append(mDefaultImage);
}
if (mForceDefault) {
queryBuilder.append("&f=y");
}
if (mRating != null) {
queryBuilder.append("&r=").append(mRating);
}
String query = queryBuilder.toString();
if (query.length() > 0) {
uriBuilder.append("?").append(query.substring(1));
}
return Uri.parse(uriBuilder.toString());
}
}
public enum Rating {
G, PG, R, X
}
public enum DefaultImage {
_404, MYSTERY_MAN, IDENTICON, MONSTERID, WAVATAR, RETRO, BLANK
}
}
package com.commit451.gitlab.util
import android.net.Uri
import com.commit451.gitlab.ssl.X509Util
import java.io.UnsupportedEncodingException
import java.net.URLEncoder
import java.nio.charset.Charset
import java.security.MessageDigest
import java.security.NoSuchAlgorithmException
object Gravatar {
@JvmOverloads
fun init(email: String? = null): Builder {
return Builder(email)
}
private fun md5(raw: String): String {
try {
val digest = MessageDigest.getInstance("MD5")
digest.update(raw.toByteArray(Charset.forName("UTF-8")))
return X509Util.hexify(digest.digest())
} catch (e: NoSuchAlgorithmException) {
throw IllegalStateException(e)
}
}
class Builder constructor(private val mEmail: String?) {
private var mSSL = false
private var mExtension = false
private var mSize = -1
private var mDefaultImage: String? = null
private var mForceDefault = false
private var mRating: String? = null
fun ssl(): Builder {
mSSL = true
return this
}
fun extension(): Builder {
mExtension = true
return this
}
fun size(size: Int): Builder {
if (size < 1 || size > 2048) {
throw IllegalArgumentException("Image size must be from 1px up to 2048px")
}
mSize = size
return this
}
fun defaultImage(defaultImage: DefaultImage): Builder {
when (defaultImage) {
Gravatar.DefaultImage._404 -> mDefaultImage = "404"
Gravatar.DefaultImage.MYSTERY_MAN -> mDefaultImage = "mm"
Gravatar.DefaultImage.IDENTICON -> mDefaultImage = "identicon"
Gravatar.DefaultImage.MONSTERID -> mDefaultImage = "monsterid"
Gravatar.DefaultImage.WAVATAR -> mDefaultImage = "wavatar"
Gravatar.DefaultImage.RETRO -> mDefaultImage = "retro"
Gravatar.DefaultImage.BLANK -> mDefaultImage = "blank"
}
return this
}
fun build(): Uri {
val uriBuilder = StringBuilder()
if (mSSL) {
uriBuilder.append("https://secure.gravatar.com/avatar/")
} else {
uriBuilder.append("http://www.gravatar.com/avatar/")
}
if (mEmail != null) {
uriBuilder.append(md5(mEmail))
} else {
uriBuilder.append("00000000000000000000000000000000")
}
if (mExtension) {
uriBuilder.append(".jpg")
}
val queryBuilder = StringBuilder()
if (mSize != -1) {
queryBuilder.append("&s=").append(mSize)
}
if (mDefaultImage != null) {
queryBuilder.append("&d=").append(mDefaultImage)
}
if (mForceDefault) {
queryBuilder.append("&f=y")
}
if (mRating != null) {
queryBuilder.append("&r=").append(mRating)
}
val query = queryBuilder.toString()
if (query.length > 0) {
uriBuilder.append("?").append(query.substring(1))
}
return Uri.parse(uriBuilder.toString())
}
}
enum class Rating {
G, PG, R, X
}
enum class DefaultImage {
_404, MYSTERY_MAN, IDENTICON, MONSTERID, WAVATAR, RETRO, BLANK
}
}
Loading
@@ -23,10 +23,10 @@ object ImageUtil {
Loading
@@ -23,10 +23,10 @@ object ImageUtil {
} }
} }
   
return getAvatarUrl("", size) return getAvatarUrl(null as? String?, size)
} }
   
fun getAvatarUrl(email: String, size: Int): Uri { fun getAvatarUrl(email: String?, size: Int): Uri {
return Gravatar return Gravatar
.init(email) .init(email)
.ssl() .ssl()
Loading
Loading
Loading
@@ -63,7 +63,7 @@ class SendMessageView : LinearLayout {
Loading
@@ -63,7 +63,7 @@ class SendMessageView : LinearLayout {
elevation = resources.getDimensionPixelSize(R.dimen.toolbar_elevation).toFloat() elevation = resources.getDimensionPixelSize(R.dimen.toolbar_elevation).toFloat()
} }
   
textNote.setOnEditorActionListener { v, actionId, event -> textNote.setOnEditorActionListener { _, _, _ ->
onSend() onSend()
true true
} }
Loading
Loading
Loading
@@ -26,6 +26,7 @@ class BuildViewHolder(view: View) : RecyclerView.ViewHolder(view) {
Loading
@@ -26,6 +26,7 @@ class BuildViewHolder(view: View) : RecyclerView.ViewHolder(view) {
} }
} }
   
@BindView(R.id.name) lateinit var textBuildName: TextView
@BindView(R.id.number) lateinit var textBuildNumber: TextView @BindView(R.id.number) lateinit var textBuildNumber: TextView
@BindView(R.id.status) lateinit var textStatus: TextView @BindView(R.id.status) lateinit var textStatus: TextView
@BindView(R.id.duration) lateinit var textDuration: TextView @BindView(R.id.duration) lateinit var textDuration: TextView
Loading
@@ -35,7 +36,12 @@ class BuildViewHolder(view: View) : RecyclerView.ViewHolder(view) {
Loading
@@ -35,7 +36,12 @@ class BuildViewHolder(view: View) : RecyclerView.ViewHolder(view) {
} }
   
fun bind(build: Build) { fun bind(build: Build) {
textBuildNumber.text = "${itemView.resources.getString(R.string.build_number)} $build.id" val buildNameText = String.format(itemView.resources.getString(R.string.build_name), build.name)
textBuildName.text = buildNameText
val buildNumberText = String.format(itemView.resources.getString(R.string.build_number), build.id)
textBuildNumber.text = buildNumberText
val statusText = String.format(itemView.resources.getString(R.string.build_status), build.status) val statusText = String.format(itemView.resources.getString(R.string.build_status), build.status)
textStatus.text = statusText textStatus.text = statusText
var finishedTime: Date? = build.finishedAt var finishedTime: Date? = build.finishedAt
Loading
Loading
package com.commit451.gitlab.viewHolder package com.commit451.gitlab.viewHolder
   
import android.support.v7.widget.RecyclerView import android.support.v7.widget.RecyclerView
import android.text.Html
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
Loading
@@ -11,6 +10,7 @@ import butterknife.BindView
Loading
@@ -11,6 +10,7 @@ import butterknife.BindView
import butterknife.ButterKnife import butterknife.ButterKnife
import com.commit451.gitlab.App import com.commit451.gitlab.App
import com.commit451.gitlab.R import com.commit451.gitlab.R
import com.commit451.gitlab.extension.formatAsHtml
import com.commit451.gitlab.model.rss.Entry import com.commit451.gitlab.model.rss.Entry
import com.commit451.gitlab.transformation.CircleTransformation import com.commit451.gitlab.transformation.CircleTransformation
   
Loading
@@ -42,7 +42,7 @@ class FeedEntryViewHolder(view: View) : RecyclerView.ViewHolder(view) {
Loading
@@ -42,7 +42,7 @@ class FeedEntryViewHolder(view: View) : RecyclerView.ViewHolder(view) {
.transform(CircleTransformation()) .transform(CircleTransformation())
.into(image) .into(image)
   
textTitle.text = Html.fromHtml(entry.title) textTitle.text = entry.title.formatAsHtml()
textSummary.text = Html.fromHtml(entry.summary) textSummary.text = entry.summary.formatAsHtml()
} }
} }
Loading
@@ -40,13 +40,11 @@ class IssueHeaderViewHolder(view: View) : RecyclerView.ViewHolder(view) {
Loading
@@ -40,13 +40,11 @@ class IssueHeaderViewHolder(view: View) : RecyclerView.ViewHolder(view) {
@BindView(R.id.milestone_root) lateinit var rootMilestone: ViewGroup @BindView(R.id.milestone_root) lateinit var rootMilestone: ViewGroup
@BindView(R.id.milestone_text) lateinit var textMilestone: TextView @BindView(R.id.milestone_text) lateinit var textMilestone: TextView
   
val bypass: Bypass = Bypass(view.context)
init { init {
ButterKnife.bind(this, view) ButterKnife.bind(this, view)
} }
   
fun bind(issue: Issue, project: Project) { fun bind(issue: Issue, bypass: Bypass, project: Project) {
   
if (issue.description.isNullOrEmpty()) { if (issue.description.isNullOrEmpty()) {
textDescription.visibility = View.GONE textDescription.visibility = View.GONE
Loading
Loading
Loading
@@ -56,6 +56,10 @@ class IssueViewHolder(view: View) : RecyclerView.ViewHolder(view) {
Loading
@@ -56,6 +56,10 @@ class IssueViewHolder(view: View) : RecyclerView.ViewHolder(view) {
} }
   
textMessage.text = issue.title textMessage.text = issue.title
textMessage.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0)
if (issue.isConfidential) {
textMessage.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_confidential_24dp, 0, 0, 0)
}
   
var time = "" var time = ""
if (issue.createdAt != null) { if (issue.createdAt != null) {
Loading
@@ -65,7 +69,7 @@ class IssueViewHolder(view: View) : RecyclerView.ViewHolder(view) {
Loading
@@ -65,7 +69,7 @@ class IssueViewHolder(view: View) : RecyclerView.ViewHolder(view) {
if (issue.author != null) { if (issue.author != null) {
author += issue.author.username author += issue.author.username
} }
var id = "" val id: String
var issueId = issue.iid var issueId = issue.iid
if (issueId < 1) { if (issueId < 1) {
issueId = issue.id issueId = issue.id
Loading
Loading
package com.commit451.gitlab.viewHolder
import android.support.v7.widget.RecyclerView
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import butterknife.BindView
import butterknife.ButterKnife
import com.commit451.gitlab.R
import com.commit451.gitlab.model.api.Pipeline
import com.commit451.gitlab.util.DateUtil
import java.util.*
/**
* Pipelines, woot
*/
class PipelineViewHolder(view: View) : RecyclerView.ViewHolder(view) {
companion object {
fun inflate(parent: ViewGroup): PipelineViewHolder {
val view = LayoutInflater.from(parent.context)
.inflate(R.layout.item_pipeline, parent, false)
return PipelineViewHolder(view)
}
}
@BindView(R.id.sha) lateinit var textSha: TextView
@BindView(R.id.number) lateinit var textPipelineNumber: TextView
@BindView(R.id.status) lateinit var textStatus: TextView
@BindView(R.id.ref) lateinit var textRef: TextView
init {
ButterKnife.bind(this, view)
}
fun bind(pipeline: Pipeline) {
val pipeSha = pipeline.sha.substring(0, 8)
val pipelineShaText = String.format(itemView.resources.getString(R.string.pipeline_sha), pipeSha)
textSha.text = pipelineShaText
val pipelineNumberText = String.format(itemView.resources.getString(R.string.pipeline_number), pipeline.id)
textPipelineNumber.text = pipelineNumberText
val statusText = String.format(itemView.resources.getString(R.string.pipeline_status), pipeline.status)
textStatus.text = statusText
val refText = String.format(itemView.resources.getString(R.string.pipeline_ref), pipeline.ref)
textRef.text = refText
}
}
Loading
@@ -4,7 +4,6 @@ import android.app.Activity
Loading
@@ -4,7 +4,6 @@ import android.app.Activity
import android.appwidget.AppWidgetManager import android.appwidget.AppWidgetManager
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.os.Parcelable
import android.support.v7.widget.LinearLayoutManager import android.support.v7.widget.LinearLayoutManager
import android.support.v7.widget.RecyclerView import android.support.v7.widget.RecyclerView
import android.support.v7.widget.Toolbar import android.support.v7.widget.Toolbar
Loading
@@ -15,9 +14,9 @@ import butterknife.ButterKnife
Loading
@@ -15,9 +14,9 @@ import butterknife.ButterKnife
import com.commit451.gitlab.R import com.commit451.gitlab.R
import com.commit451.gitlab.activity.BaseActivity import com.commit451.gitlab.activity.BaseActivity
import com.commit451.gitlab.data.Prefs import com.commit451.gitlab.data.Prefs
import com.commit451.gitlab.extension.getParcelerParcelable
import com.commit451.gitlab.model.Account import com.commit451.gitlab.model.Account
import com.commit451.gitlab.model.api.Project import com.commit451.gitlab.model.api.Project
import org.parceler.Parcels
import timber.log.Timber import timber.log.Timber
import java.util.* import java.util.*
   
Loading
@@ -64,7 +63,7 @@ class ProjectFeedWidgetConfigureActivity : BaseActivity() {
Loading
@@ -64,7 +63,7 @@ class ProjectFeedWidgetConfigureActivity : BaseActivity() {
toolbar.setTitle(R.string.widget_choose_account) toolbar.setTitle(R.string.widget_choose_account)
   
adapterAccounts = AccountsAdapter() adapterAccounts = AccountsAdapter()
adapterAccounts.setOnItemClickListener { adapter, view, position -> adapterAccounts.setOnItemClickListener { adapter, _, position ->
account = adapter.get(position) account = adapter.get(position)
moveAlongToChooseProject(account!!) moveAlongToChooseProject(account!!)
} }
Loading
@@ -77,9 +76,11 @@ class ProjectFeedWidgetConfigureActivity : BaseActivity() {
Loading
@@ -77,9 +76,11 @@ class ProjectFeedWidgetConfigureActivity : BaseActivity() {
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data) super.onActivityResult(requestCode, resultCode, data)
when (requestCode) { when (requestCode) {
REQUEST_PROJECT -> if (resultCode == Activity.RESULT_OK) { REQUEST_PROJECT -> {
val project = Parcels.unwrap<Project>(data?.getParcelableExtra<Parcelable>(ProjectFeedWidgetConfigureProjectActivity.EXTRA_PROJECT)) if (resultCode == Activity.RESULT_OK) {
saveWidgetConfig(account!!, project) val project = data?.getParcelerParcelable<Project>(ProjectFeedWidgetConfigureProjectActivity.EXTRA_PROJECT)!!
saveWidgetConfig(account!!, project)
}
} }
} }
} }
Loading
Loading
Loading
@@ -4,7 +4,6 @@ import android.app.Activity
Loading
@@ -4,7 +4,6 @@ import android.app.Activity
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.os.Parcelable
import android.support.design.widget.TabLayout import android.support.design.widget.TabLayout
import android.support.v4.view.ViewPager import android.support.v4.view.ViewPager
import butterknife.BindView import butterknife.BindView
Loading
@@ -12,13 +11,14 @@ import butterknife.ButterKnife
Loading
@@ -12,13 +11,14 @@ import butterknife.ButterKnife
import com.commit451.gitlab.R import com.commit451.gitlab.R
import com.commit451.gitlab.activity.BaseActivity import com.commit451.gitlab.activity.BaseActivity
import com.commit451.gitlab.adapter.ProjectPagerAdapter import com.commit451.gitlab.adapter.ProjectPagerAdapter
import com.commit451.gitlab.api.GitLabService
import com.commit451.gitlab.api.GitLabFactory import com.commit451.gitlab.api.GitLabFactory
import com.commit451.gitlab.api.GitLabService
import com.commit451.gitlab.api.OkHttpClientFactory import com.commit451.gitlab.api.OkHttpClientFactory
import com.commit451.gitlab.extension.getParcelerParcelable
import com.commit451.gitlab.extension.putParcelParcelableExtra
import com.commit451.gitlab.fragment.ProjectsFragment import com.commit451.gitlab.fragment.ProjectsFragment
import com.commit451.gitlab.model.Account import com.commit451.gitlab.model.Account
import com.commit451.gitlab.model.api.Project import com.commit451.gitlab.model.api.Project
import org.parceler.Parcels
   
/** /**
* You chose your account, now choose your project! * You chose your account, now choose your project!
Loading
@@ -32,7 +32,7 @@ class ProjectFeedWidgetConfigureProjectActivity : BaseActivity(), ProjectsFragme
Loading
@@ -32,7 +32,7 @@ class ProjectFeedWidgetConfigureProjectActivity : BaseActivity(), ProjectsFragme
   
fun newIntent(context: Context, account: Account): Intent { fun newIntent(context: Context, account: Account): Intent {
val intent = Intent(context, ProjectFeedWidgetConfigureProjectActivity::class.java) val intent = Intent(context, ProjectFeedWidgetConfigureProjectActivity::class.java)
intent.putExtra(EXTRA_ACCOUNT, Parcels.wrap(account)) intent.putParcelParcelableExtra(EXTRA_ACCOUNT, account)
return intent return intent
} }
} }
Loading
@@ -49,7 +49,7 @@ class ProjectFeedWidgetConfigureProjectActivity : BaseActivity(), ProjectsFragme
Loading
@@ -49,7 +49,7 @@ class ProjectFeedWidgetConfigureProjectActivity : BaseActivity(), ProjectsFragme
setContentView(R.layout.activity_project_feed_widget_configure) setContentView(R.layout.activity_project_feed_widget_configure)
ButterKnife.bind(this) ButterKnife.bind(this)
   
val account = Parcels.unwrap<Account>(intent.getParcelableExtra<Parcelable>(EXTRA_ACCOUNT)) val account = intent.getParcelerParcelable<Account>(EXTRA_ACCOUNT)!!
gitLabInstance = GitLabFactory.create(account, OkHttpClientFactory.create(account, false).build()) gitLabInstance = GitLabFactory.create(account, OkHttpClientFactory.create(account, false).build())
   
viewPager.adapter = ProjectPagerAdapter(this, supportFragmentManager) viewPager.adapter = ProjectPagerAdapter(this, supportFragmentManager)
Loading
@@ -58,7 +58,7 @@ class ProjectFeedWidgetConfigureProjectActivity : BaseActivity(), ProjectsFragme
Loading
@@ -58,7 +58,7 @@ class ProjectFeedWidgetConfigureProjectActivity : BaseActivity(), ProjectsFragme
   
override fun onProjectClicked(project: Project) { override fun onProjectClicked(project: Project) {
val data = Intent() val data = Intent()
data.putExtra(EXTRA_PROJECT, Parcels.wrap(project)) data.putParcelParcelableExtra(EXTRA_PROJECT, project)
setResult(Activity.RESULT_OK, data) setResult(Activity.RESULT_OK, data)
finish() finish()
} }
Loading
Loading
Loading
@@ -55,7 +55,7 @@ class UserFeedWidgetConfigureActivity : BaseActivity() {
Loading
@@ -55,7 +55,7 @@ class UserFeedWidgetConfigureActivity : BaseActivity() {
toolbar.setTitle(R.string.widget_choose_account) toolbar.setTitle(R.string.widget_choose_account)
   
adapterAccounts = AccountsAdapter() adapterAccounts = AccountsAdapter()
adapterAccounts.setOnItemClickListener { adapter, view, position -> saveWidgetConfig(adapter.get(position)) } adapterAccounts.setOnItemClickListener { adapter, _, position -> saveWidgetConfig(adapter.get(position)) }
list.layoutManager = LinearLayoutManager(this) list.layoutManager = LinearLayoutManager(this)
list.adapter = adapterAccounts list.adapter = adapterAccounts
   
Loading
Loading
package com.commit451.gitlab.widget; package com.commit451.gitlab.widget
   
import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetManager
import android.content.Context; import android.content.Context
import android.content.Intent; import android.content.Intent
   
/** /**
* Oh the woes of a weird widget * Oh the woes of a weird widget
*/ */
public class WidgetUtil { object WidgetUtil {
   
/** /**
* Update any widget * Update any widget
* @param context context * @param context context
* *
* @param clazz class of the widget provider * @param clazz class of the widget provider
* *
* @param widgetId the widget id * @param widgetId the widget id
* @see <a href="http://stackoverflow.com/a/7738687/895797">http://stackoverflow.com/a/7738687/895797</a> * *
* @see [http://stackoverflow.com/a/7738687/895797](http://stackoverflow.com/a/7738687/895797)
*/ */
public static void triggerWidgetUpdate(Context context, Class clazz, int widgetId) { fun triggerWidgetUpdate(context: Context, clazz: Class<*>, widgetId: Int) {
Intent intent = new Intent(context, clazz); val intent = Intent(context, clazz)
intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE); intent.action = AppWidgetManager.ACTION_APPWIDGET_UPDATE
// Use an array and EXTRA_APPWIDGET_IDS instead of AppWidgetManager.EXTRA_APPWIDGET_ID, // Use an array and EXTRA_APPWIDGET_IDS instead of AppWidgetManager.EXTRA_APPWIDGET_ID,
// since it seems the onUpdate() is only fired on that: // since it seems the onUpdate() is only fired on that:
int[] ids = {widgetId}; val ids = intArrayOf(widgetId)
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids); intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids)
context.sendBroadcast(intent); context.sendBroadcast(intent)
} }
} }
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM10,17l-5,-5 1.41,-1.41L10,14.17l7.59,-7.59L19,8l-9,9z"/>
</vector>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FFFFFFFF"
android:pathData="M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7zM2 4.27l2.28 2.28.46.46C3.08 8.3 1.78 10.02 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3.27 3 2 4.27zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .44-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-2.2zm4.31-.78l3.15 3.15.02-.16c0-1.66-1.34-3-3-3l-.17.01z"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM17,13L7,13v-2h10v2z"/>
</vector>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<FrameLayout <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/root" android:id="@+id/root"
android:layout_width="match_parent" android:layout_width="match_parent"
Loading
@@ -15,19 +14,22 @@
Loading
@@ -15,19 +14,22 @@
<android.support.v7.widget.Toolbar <android.support.v7.widget.Toolbar
android:id="@+id/toolbar" android:id="@+id/toolbar"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"/> android:layout_height="?attr/actionBarSize" />
   
</android.support.design.widget.AppBarLayout> </android.support.design.widget.AppBarLayout>
   
<android.support.v4.widget.NestedScrollView <android.support.v4.widget.NestedScrollView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="wrap_content"
android:layout_marginTop="?attr/actionBarSize"> app:layout_behavior="@string/appbar_scrolling_view_behavior">
   
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_margin="16dp" android:layout_marginTop="16dp"
android:layout_marginLeft="@dimen/activity_horizontal_margin"
android:layout_marginRight="@dimen/activity_horizontal_margin"
android:layout_marginBottom="32dp"
android:orientation="vertical"> android:orientation="vertical">
   
<android.support.design.widget.TextInputLayout <android.support.design.widget.TextInputLayout
Loading
@@ -41,7 +43,7 @@
Loading
@@ -41,7 +43,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:hint="@string/milestone_hint_title" android:hint="@string/milestone_hint_title"
android:imeOptions="actionNone" android:imeOptions="actionNone"
android:inputType="textCapSentences|textAutoCorrect|textMultiLine"/> android:inputType="textCapSentences|textAutoCorrect|textMultiLine" />
   
</android.support.design.widget.TextInputLayout> </android.support.design.widget.TextInputLayout>
   
Loading
@@ -56,14 +58,23 @@
Loading
@@ -56,14 +58,23 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:hint="@string/milestone_hint_description" android:hint="@string/milestone_hint_description"
android:imeOptions="actionNone" android:imeOptions="actionNone"
android:inputType="textCapSentences|textAutoCorrect|textMultiLine"/> android:inputType="textCapSentences|textAutoCorrect|textMultiLine" />
   
</android.support.design.widget.TextInputLayout> </android.support.design.widget.TextInputLayout>
   
<CheckBox
android:id="@+id/check_confidential"
android:layout_width="match_parent"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:layout_height="wrap_content"
android:checked="false"
android:text="@string/confidential_message" />
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/assignee"/> android:text="@string/assignee" />
   
<FrameLayout <FrameLayout
android:layout_width="match_parent" android:layout_width="match_parent"
Loading
@@ -73,20 +84,20 @@
Loading
@@ -73,20 +84,20 @@
android:id="@+id/assignee_progress" android:id="@+id/assignee_progress"
android:layout_width="40dp" android:layout_width="40dp"
android:layout_height="40dp" android:layout_height="40dp"
android:layout_gravity="center"/> android:layout_gravity="center" />
   
<Spinner <Spinner
android:id="@+id/assignee_spinner" android:id="@+id/assignee_spinner"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:visibility="gone"/> android:visibility="gone" />
   
</FrameLayout> </FrameLayout>
   
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/milestone"/> android:text="@string/milestone" />
   
<FrameLayout <FrameLayout
android:layout_width="match_parent" android:layout_width="match_parent"
Loading
@@ -98,13 +109,13 @@
Loading
@@ -98,13 +109,13 @@
android:layout_width="40dp" android:layout_width="40dp"
android:layout_height="40dp" android:layout_height="40dp"
android:layout_gravity="center" android:layout_gravity="center"
android:indeterminate="true"/> android:indeterminate="true" />
   
<Spinner <Spinner
android:id="@+id/milestone_spinner" android:id="@+id/milestone_spinner"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:visibility="gone"/> android:visibility="gone" />
   
</FrameLayout> </FrameLayout>
   
Loading
@@ -112,7 +123,7 @@
Loading
@@ -112,7 +123,7 @@
android:id="@+id/label_label" android:id="@+id/label_label"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/labels"/> android:text="@string/labels" />
   
<FrameLayout <FrameLayout
android:layout_width="match_parent" android:layout_width="match_parent"
Loading
@@ -124,47 +135,41 @@
Loading
@@ -124,47 +135,41 @@
android:layout_width="40dp" android:layout_width="40dp"
android:layout_height="40dp" android:layout_height="40dp"
android:layout_gravity="center" android:layout_gravity="center"
android:indeterminate="true"/> android:indeterminate="true" />
   
<LinearLayout <LinearLayout
android:id="@+id/root_add_labels" android:id="@+id/root_add_labels"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:animateLayoutChanges="true"
android:background="?attr/selectableItemBackground"
android:orientation="vertical" android:orientation="vertical"
android:paddingTop="16dp"
android:paddingBottom="16dp" android:paddingBottom="16dp"
android:visibility="gone" android:paddingTop="16dp"
android:animateLayoutChanges="true" android:visibility="gone">
android:background="?attr/selectableItemBackground">
   
<com.commit451.adapterflowlayout.AdapterFlowLayout <com.commit451.adapterflowlayout.AdapterFlowLayout
android:id="@+id/list_labels" android:id="@+id/list_labels"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginBottom="4dp"/> android:layout_marginBottom="4dp" />
   
<TextView <TextView
android:id="@+id/text_add_labels" android:id="@+id/text_add_labels"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:paddingTop="4dp"
android:paddingBottom="4dp" android:paddingBottom="4dp"
android:text="@string/add_labels"/> android:paddingTop="4dp"
android:text="@string/add_labels" />
   
</LinearLayout> </LinearLayout>
   
</FrameLayout> </FrameLayout>
   
<android.support.v7.widget.SwitchCompat
android:id="@+id/confidential_switch"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:checked="false"
android:text="@string/confidential"/>
</LinearLayout> </LinearLayout>
</android.support.v4.widget.NestedScrollView> </android.support.v4.widget.NestedScrollView>
   
<include layout="@layout/progress_fullscreen" />
   
<include layout="@layout/progress_fullscreen"/> </android.support.design.widget.CoordinatorLayout>
</FrameLayout> \ No newline at end of file
\ No newline at end of file
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.commit451.gitlab.activity.FullscreenImageActivity">
<com.github.chrisbanes.photoview.PhotoView
android:id="@+id/photo_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:keepScreenOn="true"/>
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@android:color/transparent"/>
</FrameLayout>
\ No newline at end of file
Loading
@@ -8,6 +8,7 @@
Loading
@@ -8,6 +8,7 @@
android:layout_height="match_parent"> android:layout_height="match_parent">
   
<LinearLayout <LinearLayout
android:id="@+id/app_bar_container"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginBottom="?attr/actionBarSize" android:layout_marginBottom="?attr/actionBarSize"
Loading
@@ -21,13 +22,35 @@
Loading
@@ -21,13 +22,35 @@
<android.support.v7.widget.Toolbar <android.support.v7.widget.Toolbar
android:id="@+id/toolbar" android:id="@+id/toolbar"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize" /> android:layout_height="?attr/actionBarSize" >
   
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/toolbar_title"
style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawablePadding="8dp"
tools:text="Issue title" />
<TextView
android:id="@+id/toolbar_subtitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:text="subtitle" />
</LinearLayout>
</android.support.v7.widget.Toolbar>
<TextView <TextView
android:id="@+id/issue_title" android:id="@+id/issue_title"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:padding="16dp" android:padding="16dp"
android:drawablePadding="8dp"
android:layout_marginRight="56dp" android:layout_marginRight="56dp"
tools:text="This is an issue"/> tools:text="This is an issue"/>
   
Loading
Loading
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"/>
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabMode="fixed"/>
</android.support.design.widget.AppBarLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<include layout="@layout/progress_fullscreen"/>
</FrameLayout>
</LinearLayout>
\ No newline at end of file