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

Merge remote-tracking branch 'origin/develop'

parents 8675a0f4 8b71a5d0
No related branches found
No related tags found
No related merge requests found
Pipeline #
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
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
.init(email)
.ssl()
Loading
Loading
Loading
Loading
@@ -63,7 +63,7 @@ class SendMessageView : LinearLayout {
elevation = resources.getDimensionPixelSize(R.dimen.toolbar_elevation).toFloat()
}
 
textNote.setOnEditorActionListener { v, actionId, event ->
textNote.setOnEditorActionListener { _, _, _ ->
onSend()
true
}
Loading
Loading
Loading
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.status) lateinit var textStatus: TextView
@BindView(R.id.duration) lateinit var textDuration: TextView
Loading
Loading
@@ -35,7 +36,12 @@ class BuildViewHolder(view: View) : RecyclerView.ViewHolder(view) {
}
 
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)
textStatus.text = statusText
var finishedTime: Date? = build.finishedAt
Loading
Loading
package com.commit451.gitlab.viewHolder
 
import android.support.v7.widget.RecyclerView
import android.text.Html
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
Loading
Loading
@@ -11,6 +10,7 @@ import butterknife.BindView
import butterknife.ButterKnife
import com.commit451.gitlab.App
import com.commit451.gitlab.R
import com.commit451.gitlab.extension.formatAsHtml
import com.commit451.gitlab.model.rss.Entry
import com.commit451.gitlab.transformation.CircleTransformation
 
Loading
Loading
@@ -42,7 +42,7 @@ class FeedEntryViewHolder(view: View) : RecyclerView.ViewHolder(view) {
.transform(CircleTransformation())
.into(image)
 
textTitle.text = Html.fromHtml(entry.title)
textSummary.text = Html.fromHtml(entry.summary)
textTitle.text = entry.title.formatAsHtml()
textSummary.text = entry.summary.formatAsHtml()
}
}
Loading
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_text) lateinit var textMilestone: TextView
 
val bypass: Bypass = Bypass(view.context)
init {
ButterKnife.bind(this, view)
}
 
fun bind(issue: Issue, project: Project) {
fun bind(issue: Issue, bypass: Bypass, project: Project) {
 
if (issue.description.isNullOrEmpty()) {
textDescription.visibility = View.GONE
Loading
Loading
Loading
Loading
@@ -56,6 +56,10 @@ class IssueViewHolder(view: View) : RecyclerView.ViewHolder(view) {
}
 
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 = ""
if (issue.createdAt != null) {
Loading
Loading
@@ -65,7 +69,7 @@ class IssueViewHolder(view: View) : RecyclerView.ViewHolder(view) {
if (issue.author != null) {
author += issue.author.username
}
var id = ""
val id: String
var issueId = issue.iid
if (issueId < 1) {
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
Loading
@@ -4,7 +4,6 @@ import android.app.Activity
import android.appwidget.AppWidgetManager
import android.content.Intent
import android.os.Bundle
import android.os.Parcelable
import android.support.v7.widget.LinearLayoutManager
import android.support.v7.widget.RecyclerView
import android.support.v7.widget.Toolbar
Loading
Loading
@@ -15,9 +14,9 @@ import butterknife.ButterKnife
import com.commit451.gitlab.R
import com.commit451.gitlab.activity.BaseActivity
import com.commit451.gitlab.data.Prefs
import com.commit451.gitlab.extension.getParcelerParcelable
import com.commit451.gitlab.model.Account
import com.commit451.gitlab.model.api.Project
import org.parceler.Parcels
import timber.log.Timber
import java.util.*
 
Loading
Loading
@@ -64,7 +63,7 @@ class ProjectFeedWidgetConfigureActivity : BaseActivity() {
toolbar.setTitle(R.string.widget_choose_account)
 
adapterAccounts = AccountsAdapter()
adapterAccounts.setOnItemClickListener { adapter, view, position ->
adapterAccounts.setOnItemClickListener { adapter, _, position ->
account = adapter.get(position)
moveAlongToChooseProject(account!!)
}
Loading
Loading
@@ -77,9 +76,11 @@ class ProjectFeedWidgetConfigureActivity : BaseActivity() {
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
when (requestCode) {
REQUEST_PROJECT -> if (resultCode == Activity.RESULT_OK) {
val project = Parcels.unwrap<Project>(data?.getParcelableExtra<Parcelable>(ProjectFeedWidgetConfigureProjectActivity.EXTRA_PROJECT))
saveWidgetConfig(account!!, project)
REQUEST_PROJECT -> {
if (resultCode == Activity.RESULT_OK) {
val project = data?.getParcelerParcelable<Project>(ProjectFeedWidgetConfigureProjectActivity.EXTRA_PROJECT)!!
saveWidgetConfig(account!!, project)
}
}
}
}
Loading
Loading
Loading
Loading
@@ -4,7 +4,6 @@ import android.app.Activity
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.os.Parcelable
import android.support.design.widget.TabLayout
import android.support.v4.view.ViewPager
import butterknife.BindView
Loading
Loading
@@ -12,13 +11,14 @@ import butterknife.ButterKnife
import com.commit451.gitlab.R
import com.commit451.gitlab.activity.BaseActivity
import com.commit451.gitlab.adapter.ProjectPagerAdapter
import com.commit451.gitlab.api.GitLabService
import com.commit451.gitlab.api.GitLabFactory
import com.commit451.gitlab.api.GitLabService
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.model.Account
import com.commit451.gitlab.model.api.Project
import org.parceler.Parcels
 
/**
* You chose your account, now choose your project!
Loading
Loading
@@ -32,7 +32,7 @@ class ProjectFeedWidgetConfigureProjectActivity : BaseActivity(), ProjectsFragme
 
fun newIntent(context: Context, account: Account): Intent {
val intent = Intent(context, ProjectFeedWidgetConfigureProjectActivity::class.java)
intent.putExtra(EXTRA_ACCOUNT, Parcels.wrap(account))
intent.putParcelParcelableExtra(EXTRA_ACCOUNT, account)
return intent
}
}
Loading
Loading
@@ -49,7 +49,7 @@ class ProjectFeedWidgetConfigureProjectActivity : BaseActivity(), ProjectsFragme
setContentView(R.layout.activity_project_feed_widget_configure)
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())
 
viewPager.adapter = ProjectPagerAdapter(this, supportFragmentManager)
Loading
Loading
@@ -58,7 +58,7 @@ class ProjectFeedWidgetConfigureProjectActivity : BaseActivity(), ProjectsFragme
 
override fun onProjectClicked(project: Project) {
val data = Intent()
data.putExtra(EXTRA_PROJECT, Parcels.wrap(project))
data.putParcelParcelableExtra(EXTRA_PROJECT, project)
setResult(Activity.RESULT_OK, data)
finish()
}
Loading
Loading
Loading
Loading
@@ -55,7 +55,7 @@ class UserFeedWidgetConfigureActivity : BaseActivity() {
toolbar.setTitle(R.string.widget_choose_account)
 
adapterAccounts = AccountsAdapter()
adapterAccounts.setOnItemClickListener { adapter, view, position -> saveWidgetConfig(adapter.get(position)) }
adapterAccounts.setOnItemClickListener { adapter, _, position -> saveWidgetConfig(adapter.get(position)) }
list.layoutManager = LinearLayoutManager(this)
list.adapter = adapterAccounts
 
Loading
Loading
package com.commit451.gitlab.widget;
package com.commit451.gitlab.widget
 
import android.appwidget.AppWidgetManager;
import android.content.Context;
import android.content.Intent;
import android.appwidget.AppWidgetManager
import android.content.Context
import android.content.Intent
 
/**
* Oh the woes of a weird widget
*/
public class WidgetUtil {
object WidgetUtil {
 
/**
* Update any widget
* @param context context
* *
* @param clazz class of the widget provider
* *
* @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) {
Intent intent = new Intent(context, clazz);
intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
fun triggerWidgetUpdate(context: Context, clazz: Class<*>, widgetId: Int) {
val intent = Intent(context, clazz)
intent.action = AppWidgetManager.ACTION_APPWIDGET_UPDATE
// Use an array and EXTRA_APPWIDGET_IDS instead of AppWidgetManager.EXTRA_APPWIDGET_ID,
// since it seems the onUpdate() is only fired on that:
int[] ids = {widgetId};
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids);
context.sendBroadcast(intent);
val ids = intArrayOf(widgetId)
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids)
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"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
<android.support.design.widget.CoordinatorLayout 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"
Loading
Loading
@@ -15,19 +14,22 @@
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"/>
android:layout_height="?attr/actionBarSize" />
 
</android.support.design.widget.AppBarLayout>
 
<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="?attr/actionBarSize">
android:layout_height="wrap_content"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
 
<LinearLayout
android:layout_width="match_parent"
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.support.design.widget.TextInputLayout
Loading
Loading
@@ -41,7 +43,7 @@
android:layout_height="wrap_content"
android:hint="@string/milestone_hint_title"
android:imeOptions="actionNone"
android:inputType="textCapSentences|textAutoCorrect|textMultiLine"/>
android:inputType="textCapSentences|textAutoCorrect|textMultiLine" />
 
</android.support.design.widget.TextInputLayout>
 
Loading
Loading
@@ -56,14 +58,23 @@
android:layout_height="wrap_content"
android:hint="@string/milestone_hint_description"
android:imeOptions="actionNone"
android:inputType="textCapSentences|textAutoCorrect|textMultiLine"/>
android:inputType="textCapSentences|textAutoCorrect|textMultiLine" />
 
</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
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/assignee"/>
android:text="@string/assignee" />
 
<FrameLayout
android:layout_width="match_parent"
Loading
Loading
@@ -73,20 +84,20 @@
android:id="@+id/assignee_progress"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_gravity="center"/>
android:layout_gravity="center" />
 
<Spinner
android:id="@+id/assignee_spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"/>
android:visibility="gone" />
 
</FrameLayout>
 
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/milestone"/>
android:text="@string/milestone" />
 
<FrameLayout
android:layout_width="match_parent"
Loading
Loading
@@ -98,13 +109,13 @@
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_gravity="center"
android:indeterminate="true"/>
android:indeterminate="true" />
 
<Spinner
android:id="@+id/milestone_spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"/>
android:visibility="gone" />
 
</FrameLayout>
 
Loading
Loading
@@ -112,7 +123,7 @@
android:id="@+id/label_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/labels"/>
android:text="@string/labels" />
 
<FrameLayout
android:layout_width="match_parent"
Loading
Loading
@@ -124,47 +135,41 @@
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_gravity="center"
android:indeterminate="true"/>
android:indeterminate="true" />
 
<LinearLayout
android:id="@+id/root_add_labels"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:animateLayoutChanges="true"
android:background="?attr/selectableItemBackground"
android:orientation="vertical"
android:paddingTop="16dp"
android:paddingBottom="16dp"
android:visibility="gone"
android:animateLayoutChanges="true"
android:background="?attr/selectableItemBackground">
android:paddingTop="16dp"
android:visibility="gone">
 
<com.commit451.adapterflowlayout.AdapterFlowLayout
android:id="@+id/list_labels"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="4dp"/>
android:layout_marginBottom="4dp" />
 
<TextView
android:id="@+id/text_add_labels"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:paddingTop="4dp"
android:paddingBottom="4dp"
android:text="@string/add_labels"/>
android:paddingTop="4dp"
android:text="@string/add_labels" />
 
</LinearLayout>
 
</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>
</android.support.v4.widget.NestedScrollView>
 
<include layout="@layout/progress_fullscreen" />
 
<include layout="@layout/progress_fullscreen"/>
</FrameLayout>
\ No newline at end of file
</android.support.design.widget.CoordinatorLayout>
\ 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
Loading
@@ -8,6 +8,7 @@
android:layout_height="match_parent">
 
<LinearLayout
android:id="@+id/app_bar_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="?attr/actionBarSize"
Loading
Loading
@@ -21,13 +22,35 @@
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
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
android:id="@+id/issue_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:drawablePadding="8dp"
android:layout_marginRight="56dp"
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
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