Skip to content
Snippets Groups Projects
Commit f49f728b authored by John's avatar John
Browse files

Merge branch 'develop' into 'develop'

Issue #231 - Open images in full screen when clicked

See merge request !24
parents 1b72c8f4 5eb88037
No related branches found
No related tags found
1 merge request!24Issue #231 - Open images in full screen when clicked
Pipeline #
Showing
with 206 additions and 96 deletions
Loading
Loading
@@ -159,6 +159,7 @@ dependencies {
compile 'com.github.Commit451:RetrofitProguardRules:2.2.0.0'
compile 'com.github.Commit451:LoganSquareProGuardRules:1.3.7.0'
compile 'com.github.Commit451:EventBusProGuardRules:3.0.0.0'
compile 'com.github.chrisbanes:PhotoView:2.0.0'
 
compile 'me.zhanghai.android.materialprogressbar:library:1.3.0'
 
Loading
Loading
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.commit451.gitlab">
<manifest package="com.commit451.gitlab"
xmlns:android="http://schemas.android.com/apk/res/android">
 
<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.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
 
<application
android:name=".App"
Loading
Loading
@@ -13,143 +13,119 @@
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<activity
android:name=".activity.LaunchActivity"
android:theme="@style/Activity.Launch">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<action android:name="android.intent.action.MAIN"/>
 
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity
android:name=".activity.ProjectsActivity"
android:launchMode="singleTask"
android:theme="@style/Activity.Projects" />
android:theme="@style/Activity.Projects"/>
<activity
android:name=".activity.GroupsActivity"
android:launchMode="singleTask"
android:theme="@style/Activity.Groups" />
android:theme="@style/Activity.Groups"/>
<activity
android:name=".activity.ActivityActivity"
android:launchMode="singleTask"
android:theme="@style/Activity.Activity" />
android:theme="@style/Activity.Activity"/>
<activity
android:name=".activity.TodosActivity"
android:launchMode="singleTask"
android:theme="@style/Activity.Todos" />
<activity android:name=".activity.ProjectActivity" />
android:theme="@style/Activity.Todos"/>
<activity android:name=".activity.ProjectActivity"/>
<activity
android:name=".activity.LoginActivity"
android:theme="@style/Activity.Login" />
<activity android:name=".activity.FileActivity" />
<activity android:name=".activity.IssueActivity" />
<activity android:name=".activity.DiffActivity" />
<activity android:name=".activity.AboutActivity" />
<activity android:name=".activity.AddUserActivity" />
android:theme="@style/Activity.Login"/>
<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"
android:theme="@style/Activity.User" />
<activity android:name=".activity.SearchActivity" />
android:theme="@style/Activity.User"/>
<activity android:name=".activity.SearchActivity"/>
<activity
android:name=".activity.GroupActivity"
android:theme="@style/Activity.Group" />
<activity android:name=".activity.MergeRequestActivity" />
<activity android:name=".activity.AddIssueActivity" />
<activity android:name=".activity.MilestoneActivity" />
<activity android:name=".activity.AddMilestoneActivity" />
<activity android:name=".activity.BuildActivity" />
android:theme="@style/Activity.Group"/>
<activity android:name=".activity.MergeRequestActivity"/>
<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.AddLabelActivity" />
<activity android:name=".activity.AddNewLabelActivity" />
android:theme="@style/Activity.Translucent"/>
<activity android:name=".activity.SettingsActivity"/>
<activity android:name=".activity.AddLabelActivity"/>
<activity android:name=".activity.AddNewLabelActivity"/>
<activity
android:name=".activity.PickBranchOrTagActivity"
android:theme="@style/Activity.Translucent" />
<activity android:name=".activity.WebLoginActivity" />
android:theme="@style/Activity.Translucent"/>
<activity android:name=".activity.WebLoginActivity"/>
<activity
android:name=".activity.AttachActivity"
android:theme="@style/Activity.Translucent" />
<activity android:name=".activity.DebugActivity" />
android:theme="@style/Activity.Translucent"/>
<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" />
<action android:name="android.intent.action.VIEW"/>
 
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE"/>
<category android:name="android.intent.category.DEFAULT"/>
 
<data android:scheme="@string/deeplink_scheme" />
<data android:scheme="@string/deeplink_scheme"/>
</intent-filter>
</activity>
<activity android:name=".widget.UserFeedWidgetConfigureActivity">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/>
</intent-filter>
</activity>
<activity android:name=".widget.ProjectFeedWidgetConfigureActivity">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/>
</intent-filter>
</activity>
<activity android:name=".widget.ProjectFeedWidgetConfigureProjectActivity" />
<activity android:name=".widget.ProjectFeedWidgetConfigureProjectActivity"/>
<activity
android:name=".activity.FullscreenImageActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:label="@string/title_activity_fullscreen_image"
android:theme="@style/FullscreenTheme">
</activity>
<receiver
android:name=".widget.UserFeedWidgetProvider"
android:label="User Feed">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
<action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/widget_user_feed" />
android:resource="@xml/widget_user_feed"/>
</receiver>
<receiver
android:name=".widget.ProjectFeedWidgetProvider"
android:label="Project Feed">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
<action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/widget_project_feed" />
android:resource="@xml/widget_project_feed"/>
</receiver>
 
<service
Loading
Loading
@@ -159,4 +135,4 @@
 
</application>
 
</manifest>
\ No newline at end of file
</manifest>
package com.commit451.gitlab.activity
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.os.Parcelable
import android.support.v7.widget.Toolbar
import android.widget.ImageView
import butterknife.BindView
import butterknife.ButterKnife
import com.commit451.gitlab.App
import com.commit451.gitlab.R
import com.commit451.gitlab.model.api.Project
import com.github.chrisbanes.photoview.PhotoViewAttacher
import org.parceler.Parcels
/**
* A full-screen activity that opens the clicked images
*/
class FullscreenImageActivity : BaseActivity() {
companion object {
val IMAGE_URL = "url"
private val EXTRA_PROJECT = "extra_project"
fun newIntent(context: Context, project: Project): Intent {
val intent = Intent(context, FullscreenImageActivity::class.java)
intent.putExtra(EXTRA_PROJECT, Parcels.wrap(project))
return intent
}
}
@BindView(R.id.toolbar) lateinit var toolbar: Toolbar
@BindView(R.id.fullscreen_content) lateinit var contentView: ImageView
lateinit var photoViewAttacher: PhotoViewAttacher
lateinit var project: Project
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_fullscreen_image)
ButterKnife.bind(this)
setToolbar()
project = Parcels.unwrap<Project>(intent.getParcelableExtra<Parcelable>(FullscreenImageActivity.EXTRA_PROJECT))
photoViewAttacher = PhotoViewAttacher(contentView)
photoViewAttacher.scaleType = ImageView.ScaleType.FIT_CENTER
var imageUrl: String = intent.getStringExtra(IMAGE_URL)
if (imageUrl.startsWith("/")) {
imageUrl = App.get().getAccount().serverUrl.toString() + project?.pathWithNamespace + imageUrl
}
App.get().picasso.load(imageUrl).into(contentView)
}
private fun setToolbar() {
toolbar.setNavigationIcon(R.drawable.ic_back_24dp)
toolbar.title = ""
setSupportActionBar(toolbar)
}
override fun onSupportNavigateUp(): Boolean {
onBackPressed()
return true
}
}
Loading
Loading
@@ -7,6 +7,7 @@ import android.view.ViewGroup
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.util.BypassFactory
import com.commit451.gitlab.viewHolder.IssueHeaderViewHolder
import com.commit451.gitlab.viewHolder.IssueLabelsViewHolder
import com.commit451.gitlab.viewHolder.LoadingFooterViewHolder
Loading
Loading
@@ -31,7 +32,8 @@ class IssueDetailsAdapter(context: Context, private var issue: Issue?, private v
 
private val notes: LinkedList<Note> = LinkedList()
private var loading = false
private val bypass: Bypass = Bypass(context)
private val bypass: Bypass = BypassFactory.create(context, project)
 
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
if (viewType == TYPE_HEADER) {
Loading
Loading
@@ -48,7 +50,7 @@ class IssueDetailsAdapter(context: Context, private var issue: Issue?, private v
 
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
if (holder is IssueHeaderViewHolder) {
holder.bind(issue!!, project)
holder.bind(issue!!, bypass, project)
} else if (holder is IssueLabelsViewHolder) {
holder.bind(issue!!.labels)
} else if (holder is NoteViewHolder) {
Loading
Loading
package com.commit451.gitlab.adapter
 
import `in`.uncod.android.bypass.Bypass
import `in`.uncod.android.bypass.ImageSpanClickListener
import android.content.Context
import android.support.v7.widget.RecyclerView
import android.view.ViewGroup
import com.commit451.gitlab.activity.FullscreenImageActivity
import com.commit451.gitlab.model.api.MergeRequest
import com.commit451.gitlab.model.api.Note
import com.commit451.gitlab.model.api.Project
import com.commit451.gitlab.util.BypassFactory
import com.commit451.gitlab.viewHolder.LoadingFooterViewHolder
import com.commit451.gitlab.viewHolder.MergeRequestHeaderViewHolder
import com.commit451.gitlab.viewHolder.NoteViewHolder
Loading
Loading
@@ -29,7 +32,13 @@ class MergeRequestDetailAdapter(context: Context, private val mergeRequest: Merg
 
private val notes: LinkedList<Note> = LinkedList()
private var loading = false
private val bypass: Bypass = Bypass(context)
private var imageClickListener = ImageSpanClickListener { view, imageSpan,
imageUrl ->
val intent = FullscreenImageActivity.newIntent(view.context, project)
intent.putExtra(FullscreenImageActivity.IMAGE_URL, imageUrl)
context.startActivity(intent)
}
private val bypass: Bypass = BypassFactory.create(context, project)
 
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
if (viewType == TYPE_HEADER) {
Loading
Loading
Loading
Loading
@@ -13,7 +13,6 @@ import android.widget.TextView
import butterknife.BindView
import butterknife.OnClick
import com.commit451.gitlab.App
import com.commit451.gitlab.BuildConfig
import com.commit451.gitlab.R
import com.commit451.gitlab.activity.ProjectActivity
import com.commit451.gitlab.event.ProjectReloadEvent
Loading
Loading
@@ -24,6 +23,7 @@ import com.commit451.gitlab.model.api.RepositoryTreeObject
import com.commit451.gitlab.navigation.Navigator
import com.commit451.gitlab.rx.CustomSingleObserver
import com.commit451.gitlab.rx.DecodeObservableFactory
import com.commit451.gitlab.util.BypassFactory
import com.commit451.gitlab.util.BypassImageGetterFactory
import com.commit451.gitlab.util.InternalLinkMovementMethod
import com.commit451.reptar.Result
Loading
Loading
@@ -134,13 +134,6 @@ class ProjectFragment : ButterKnifeFragment() {
 
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
bypass = Bypass(activity)
bypass.setImageSpanClickListener { view, imageSpan, s ->
if (BuildConfig.DEBUG) {
Snackbar.make(swipeRefreshLayout, s, Snackbar.LENGTH_LONG)
.show()
}
}
}
 
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
Loading
Loading
@@ -159,6 +152,7 @@ class ProjectFragment : ButterKnifeFragment() {
if (activity is ProjectActivity) {
project = (activity as ProjectActivity).project
branchName = (activity as ProjectActivity).getRefRef()
bypass = BypassFactory.create(context, project!!)
bindProject(project)
loadData()
} else {
Loading
Loading
package com.commit451.gitlab.util
import `in`.uncod.android.bypass.Bypass
import android.content.Context
import com.commit451.gitlab.activity.FullscreenImageActivity
import com.commit451.gitlab.model.api.Project
/**
* Creates [BypassFactory]s which are configured to handle relative Urls
*/
object BypassFactory {
fun create(context: Context): Bypass {
return Bypass(context)
}
fun create(context: Context, project: Project): Bypass {
val bypass = Bypass(context)
bypass.setImageSpanClickListener { view, imageSpan, imageUrl ->
val intent = FullscreenImageActivity.newIntent(view.context, project)
intent.putExtra(FullscreenImageActivity.IMAGE_URL, imageUrl)
context.startActivity(intent)
}
return bypass
}
}
\ No newline at end of file
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
<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"
android:background="@android:color/black"
tools:context="com.commit451.gitlab.activity.FullscreenImageActivity">
<com.github.chrisbanes.photoview.PhotoView
android:id="@+id/fullscreen_content"
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
@@ -23,5 +23,5 @@
<color name="window_background">#303030</color>
 
<color name="scrim">#99323232</color>
<color name="black_overlay">#66000000</color>
</resources>
\ No newline at end of file
Loading
Loading
@@ -465,4 +465,6 @@
<string name="no_branches">No branches</string>
<string name="no_tags">No tags</string>
<string name="fetching_some_details">Fetching some details</string>
<string name="title_activity_fullscreen_image">FullscreenImageActivity</string>
</resources>
\ No newline at end of file
Loading
Loading
@@ -6,14 +6,15 @@
<item name="colorPrimary">@color/main_blue</item>
<item name="colorAccent">@color/yellow</item>
<item name="colorPrimaryDark">@color/main_blue_darker</item>
<item name="android:navigationBarColor" tools:targetApi="lollipop">@color/main_blue_darker</item>
<item name="android:navigationBarColor" tools:targetApi="lollipop">@color/main_blue_darker
</item>
<item name="android:windowContentTransitions" tools:ignore="NewApi">true</item>
<item name="android:windowBackground">@color/window_background</item>
<item name="dialogTheme">@style/AppDialogTheme</item>
<item name="alertDialogTheme">@style/AppDialogTheme</item>
</style>
 
<style name="Activity" parent="AppTheme" />
<style name="Activity" parent="AppTheme"/>
 
<style name="Activity.Login">
<item name="android:windowBackground">?attr/colorPrimary</item>
Loading
Loading
@@ -71,4 +72,14 @@
<item name="android:foreground">?attr/selectableItemBackground</item>
</style>
 
<style name="FullscreenTheme" parent="AppTheme">
<item name="android:actionBarStyle">@style/FullscreenActionBarStyle</item>
<item name="android:windowActionBarOverlay">true</item>
<item name="android:windowBackground">@null</item>
</style>
<style name="FullscreenActionBarStyle" parent="Widget.AppCompat.ActionBar">
<item name="android:background">@color/black_overlay</item>
</style>
</resources>
\ 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