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
No related merge requests found
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