Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
B
beyond-clouds-android
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
云深项目组
beyond-clouds-android
Commits
fa55e8c8
Commit
fa55e8c8
authored
Mar 21, 2020
by
段启岩
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
博客详情完成
parent
04cbf6e7
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
333 additions
and
18 deletions
+333
-18
app/src/main/assets/pages/article.html
+17
-6
app/src/main/java/cn/yunliyunwai/beyondclouds/data/model/Article.java
+82
-0
app/src/main/java/cn/yunliyunwai/beyondclouds/data/model/Blog.java
+148
-3
app/src/main/java/cn/yunliyunwai/beyondclouds/data/source/IUserRepository.java
+6
-0
app/src/main/java/cn/yunliyunwai/beyondclouds/data/source/impl/UserRepositoryImpl.java
+5
-0
app/src/main/java/cn/yunliyunwai/beyondclouds/data/source/remote/UserApiStore.java
+9
-0
app/src/main/java/cn/yunliyunwai/beyondclouds/ui/blog/BlogDetailActivity.java
+25
-3
app/src/main/java/cn/yunliyunwai/beyondclouds/view/BeyondToolBar.java
+5
-0
app/src/main/java/cn/yunliyunwai/beyondclouds/viewmodel/BlogDetailViewModel.java
+26
-5
app/src/main/res/drawable/background_article_abstract.xml
+7
-0
app/src/main/res/layout/activity_blog_detail.xml
+0
-0
app/src/main/res/layout/beyond_tool_bar.xml
+3
-1
No files found.
app/src/main/assets/pages/article.html
View file @
fa55e8c8
<html>
<head>
<meta
charset=
"UTF-8"
>
<meta
name=
"viewport"
content=
"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no"
>
<meta
name=
"viewport"
content=
"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no"
>
<link
rel=
"stylesheet"
href=
"github-markdown.min.css"
>
<link
href=
"default.min.css"
rel=
"stylesheet"
/>
<style>
.article__content
{
padding
:
0
10px
;
*
{
margin
:
0
;
padding
:
0
;
}
body
{
padding
:
0px
;
}
.hljs
{
//
background
:
#fcfcfc
;
}
</style>
</head>
...
...
@@ -21,8 +29,11 @@
function
loadArticleContent
(
content
)
{
document
.
getElementById
(
"Article_Content"
).
innerHTML
=
content
;
hljs
.
initHighlightingOnLoad
();
hljs
.
initLineNumbersOnLoad
();
hljs
.
initHighlighting
.
called
=
false
;
hljs
.
configure
({
classPrefix
:
''
,
});
hljs
.
initHighlighting
();
}
</script>
</body>
...
...
app/src/main/java/cn/yunliyunwai/beyondclouds/data/model/Article.java
0 → 100644
View file @
fa55e8c8
package
cn
.
yunliyunwai
.
beyondclouds
.
data
.
model
;
import
java.util.Date
;
public
class
Article
{
private
String
title
;
private
String
articleAbstract
;
private
Integer
commentNumber
;
private
Integer
praiseNumber
;
private
Integer
viewNumber
;
private
String
category
;
private
boolean
praised
;
private
Date
createTime
;
private
boolean
followedAuthor
;
private
UserInfo
author
;
public
String
getTitle
()
{
return
title
;
}
public
void
setTitle
(
String
title
)
{
this
.
title
=
title
;
}
public
String
getArticleAbstract
()
{
return
articleAbstract
;
}
public
void
setArticleAbstract
(
String
articleAbstract
)
{
this
.
articleAbstract
=
articleAbstract
;
}
public
Integer
getCommentNumber
()
{
return
commentNumber
;
}
public
void
setCommentNumber
(
Integer
commentNumber
)
{
this
.
commentNumber
=
commentNumber
;
}
public
Integer
getPraiseNumber
()
{
return
praiseNumber
;
}
public
void
setPraiseNumber
(
Integer
praiseNumber
)
{
this
.
praiseNumber
=
praiseNumber
;
}
public
Integer
getViewNumber
()
{
return
viewNumber
;
}
public
void
setViewNumber
(
Integer
viewNumber
)
{
this
.
viewNumber
=
viewNumber
;
}
public
Date
getCreateTime
()
{
return
createTime
;
}
public
void
setCreateTime
(
Date
createTime
)
{
this
.
createTime
=
createTime
;
}
public
boolean
isFollowedAuthor
()
{
return
followedAuthor
;
}
public
void
setFollowedAuthor
(
boolean
followedAuthor
)
{
this
.
followedAuthor
=
followedAuthor
;
}
public
UserInfo
getAuthor
()
{
return
author
;
}
public
void
setAuthor
(
UserInfo
author
)
{
this
.
author
=
author
;
}
}
app/src/main/java/cn/yunliyunwai/beyondclouds/data/model/Blog.java
View file @
fa55e8c8
...
...
@@ -2,9 +2,6 @@ package cn.yunliyunwai.beyondclouds.data.model;
import
java.util.Date
;
import
lombok.Data
;
@Data
public
class
Blog
{
private
String
blogId
;
...
...
@@ -20,6 +17,154 @@ public class Blog {
private
String
allowComment
;
private
String
allowForward
;
private
String
userNick
;
private
Integer
commentNumber
;
private
Integer
praiseNum
;
private
Integer
viewNumber
;
private
boolean
followedAuthor
;
private
Date
createTime
;
public
String
getBlogId
()
{
return
blogId
;
}
public
void
setBlogId
(
String
blogId
)
{
this
.
blogId
=
blogId
;
}
public
String
getUserId
()
{
return
userId
;
}
public
void
setUserId
(
String
userId
)
{
this
.
userId
=
userId
;
}
public
String
getCategoryId
()
{
return
categoryId
;
}
public
void
setCategoryId
(
String
categoryId
)
{
this
.
categoryId
=
categoryId
;
}
public
String
getCategory
()
{
return
category
;
}
public
void
setCategory
(
String
category
)
{
this
.
category
=
category
;
}
public
String
getBlogTitle
()
{
return
blogTitle
;
}
public
void
setBlogTitle
(
String
blogTitle
)
{
this
.
blogTitle
=
blogTitle
;
}
public
String
getBlogAbstract
()
{
return
blogAbstract
;
}
public
void
setBlogAbstract
(
String
blogAbstract
)
{
this
.
blogAbstract
=
blogAbstract
;
}
public
String
getCover
()
{
return
cover
;
}
public
void
setCover
(
String
cover
)
{
this
.
cover
=
cover
;
}
public
String
getOriginLink
()
{
return
originLink
;
}
public
void
setOriginLink
(
String
originLink
)
{
this
.
originLink
=
originLink
;
}
public
String
getContentHtml
()
{
return
contentHtml
;
}
public
void
setContentHtml
(
String
contentHtml
)
{
this
.
contentHtml
=
contentHtml
;
}
public
String
getViewPrivileges
()
{
return
viewPrivileges
;
}
public
void
setViewPrivileges
(
String
viewPrivileges
)
{
this
.
viewPrivileges
=
viewPrivileges
;
}
public
String
getAllowComment
()
{
return
allowComment
;
}
public
void
setAllowComment
(
String
allowComment
)
{
this
.
allowComment
=
allowComment
;
}
public
String
getAllowForward
()
{
return
allowForward
;
}
public
void
setAllowForward
(
String
allowForward
)
{
this
.
allowForward
=
allowForward
;
}
public
String
getUserNick
()
{
return
userNick
;
}
public
void
setUserNick
(
String
userNick
)
{
this
.
userNick
=
userNick
;
}
public
Integer
getCommentNumber
()
{
return
commentNumber
;
}
public
void
setCommentNumber
(
Integer
commentNumber
)
{
this
.
commentNumber
=
commentNumber
;
}
public
Integer
getPraiseNum
()
{
return
praiseNum
;
}
public
void
setPraiseNum
(
Integer
praiseNum
)
{
this
.
praiseNum
=
praiseNum
;
}
public
Integer
getViewNumber
()
{
return
viewNumber
;
}
public
void
setViewNumber
(
Integer
viewNumber
)
{
this
.
viewNumber
=
viewNumber
;
}
public
boolean
isFollowedAuthor
()
{
return
followedAuthor
;
}
public
void
setFollowedAuthor
(
boolean
followedAuthor
)
{
this
.
followedAuthor
=
followedAuthor
;
}
public
Date
getCreateTime
()
{
return
createTime
;
}
public
void
setCreateTime
(
Date
createTime
)
{
this
.
createTime
=
createTime
;
}
}
app/src/main/java/cn/yunliyunwai/beyondclouds/data/source/IUserRepository.java
View file @
fa55e8c8
...
...
@@ -31,4 +31,10 @@ public interface IUserRepository {
*/
LiveData
<
Result
<
UserInfo
>>
getUserInfo
();
/**
* 获取我用户信息
* @return
*/
LiveData
<
Result
<
UserInfo
>>
getUserInfo
(
String
userId
);
}
app/src/main/java/cn/yunliyunwai/beyondclouds/data/source/impl/UserRepositoryImpl.java
View file @
fa55e8c8
...
...
@@ -37,4 +37,9 @@ public class UserRepositoryImpl implements IUserRepository {
public
LiveData
<
Result
<
UserInfo
>>
getUserInfo
()
{
return
userApiStore
.
getUserInfo
();
}
@Override
public
LiveData
<
Result
<
UserInfo
>>
getUserInfo
(
String
userId
)
{
return
userApiStore
.
getUserInfo
(
userId
);
}
}
app/src/main/java/cn/yunliyunwai/beyondclouds/data/source/remote/UserApiStore.java
View file @
fa55e8c8
...
...
@@ -10,6 +10,7 @@ import cn.yunliyunwai.beyondclouds.data.model.form.SmsLoginForm;
import
retrofit2.http.Body
;
import
retrofit2.http.GET
;
import
retrofit2.http.POST
;
import
retrofit2.http.Path
;
import
retrofit2.http.Query
;
public
interface
UserApiStore
{
...
...
@@ -36,4 +37,12 @@ public interface UserApiStore {
*/
@GET
(
"my/baseinfo"
)
LiveData
<
Result
<
UserInfo
>>
getUserInfo
();
/**
* 获取用户信息
* @param userId
* @return
*/
@GET
(
"user/{userId}/baseinfo"
)
LiveData
<
Result
<
UserInfo
>>
getUserInfo
(
@Path
(
"userId"
)
String
userId
);
}
app/src/main/java/cn/yunliyunwai/beyondclouds/ui/blog/BlogDetailActivity.java
View file @
fa55e8c8
package
cn
.
yunliyunwai
.
beyondclouds
.
ui
.
blog
;
import
android.os.Build
;
import
android.os.Bundle
;
import
android.view.LayoutInflater
;
import
android.view.View
;
...
...
@@ -41,7 +42,9 @@ public class BlogDetailActivity extends BaseActivity<BlogDetailViewModel, Activi
@Override
protected
ActivityBlogDetailBinding
initDataBinding
(
LayoutInflater
inflater
)
{
return
ActivityBlogDetailBinding
.
inflate
(
inflater
);
ActivityBlogDetailBinding
binding
=
ActivityBlogDetailBinding
.
inflate
(
inflater
);
binding
.
setLifecycleOwner
(
this
);
return
binding
;
}
@Override
...
...
@@ -61,7 +64,7 @@ public class BlogDetailActivity extends BaseActivity<BlogDetailViewModel, Activi
}
});
WebView
webView
=
binding
.
webView
BlogDetail
;
WebView
webView
=
binding
.
webView
Article
;
webView
.
loadUrl
(
"file:///android_asset/pages/article.html"
);
WebSettings
settings
=
webView
.
getSettings
();
settings
.
setJavaScriptEnabled
(
true
);
...
...
@@ -80,12 +83,31 @@ public class BlogDetailActivity extends BaseActivity<BlogDetailViewModel, Activi
@Override
public
void
onChanged
(
BlogDetailViewModel
.
LoadState
loadState
)
{
if
(
loadState
.
isLoadComplete
())
{
webView
.
loadUrl
(
"javascript:loadArticleContent(`"
+
viewModel
.
getBlog
().
getContentHtml
()
+
"`)"
);
String
contentHtml
=
viewModel
.
getBlog
().
getValue
().
getContentHtml
().
replace
(
"\n"
,
"<br>"
);
contentHtml
=
contentHtml
.
replaceAll
(
"'"
,
"\\\\'"
);
webView
.
loadUrl
(
"javascript:loadArticleContent('"
+
contentHtml
+
"')"
);
}
}
});
viewModel
.
fetchBlog
(
blogId
);
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
M
)
{
binding
.
scrollView
.
setOnScrollChangeListener
(
new
View
.
OnScrollChangeListener
()
{
@Override
public
void
onScrollChange
(
View
v
,
int
scrollX
,
int
scrollY
,
int
oldScrollX
,
int
oldScrollY
)
{
int
articleInfoWrapperHeight
=
binding
.
articleInfoWrapper
.
getHeight
();
if
(
scrollY
>=
articleInfoWrapperHeight
)
{
if
(
viewModel
.
getBlog
().
getValue
()
!=
null
)
{
binding
.
toolBar
.
setTitle
(
viewModel
.
getBlog
().
getValue
().
getBlogTitle
());
}
}
else
{
binding
.
toolBar
.
setTitle
(
""
);
}
}
});
}
}
}
app/src/main/java/cn/yunliyunwai/beyondclouds/view/BeyondToolBar.java
View file @
fa55e8c8
...
...
@@ -85,4 +85,9 @@ public class BeyondToolBar extends FrameLayout {
public
void
setOnRightIconClickListener
(
OnClickListener
onClickListener
)
{
binding
.
iconRight
.
setOnClickListener
(
onClickListener
);
}
public
void
setTitle
(
String
title
)
{
this
.
mTitle
=
title
;
binding
.
txtTitle
.
setText
(
mTitle
);
}
}
app/src/main/java/cn/yunliyunwai/beyondclouds/viewmodel/BlogDetailViewModel.java
View file @
fa55e8c8
...
...
@@ -9,7 +9,9 @@ import javax.inject.Inject;
import
cn.yunliyunwai.beyondclouds.data.model.Blog
;
import
cn.yunliyunwai.beyondclouds.data.model.Result
;
import
cn.yunliyunwai.beyondclouds.data.model.UserInfo
;
import
cn.yunliyunwai.beyondclouds.data.source.IBlogRepository
;
import
cn.yunliyunwai.beyondclouds.data.source.IUserRepository
;
import
lombok.Data
;
public
class
BlogDetailViewModel
extends
ViewModel
{
...
...
@@ -25,32 +27,40 @@ public class BlogDetailViewModel extends ViewModel {
}
private
IBlogRepository
blogRepository
;
private
IUserRepository
userRepository
;
private
Blog
mBlog
;
private
MutableLiveData
<
Blog
>
blog
=
new
MutableLiveData
<>();
private
MutableLiveData
<
UserInfo
>
userInfo
=
new
MutableLiveData
<>();
private
MutableLiveData
<
LoadState
>
loadState
=
new
MutableLiveData
<>();
@Inject
public
BlogDetailViewModel
(
IBlogRepository
blogRepository
)
{
public
BlogDetailViewModel
(
IBlogRepository
blogRepository
,
IUserRepository
userRepository
)
{
this
.
blogRepository
=
blogRepository
;
this
.
userRepository
=
userRepository
;
loadState
.
setValue
(
new
LoadState
());
}
public
Blog
getBlog
()
{
return
mB
log
;
public
LiveData
<
Blog
>
getBlog
()
{
return
b
log
;
}
public
LiveData
<
LoadState
>
getLoadState
()
{
return
loadState
;
}
public
LiveData
<
UserInfo
>
getUserInfo
()
{
return
userInfo
;
}
public
void
fetchBlog
(
String
blogId
)
{
blogRepository
.
getBlog
(
blogId
).
observeForever
(
new
Observer
<
Result
<
Blog
>>()
{
@Override
public
void
onChanged
(
Result
<
Blog
>
blogResult
)
{
if
(
blogResult
.
getCode
()
==
0
)
{
mBlog
=
blogResult
.
getData
();
fetchUserInfo
(
blogResult
.
getData
().
getUserId
());
blog
.
setValue
(
blogResult
.
getData
());
LoadState
state
=
loadState
.
getValue
();
state
.
setDataLoadComplete
(
true
);
loadState
.
setValue
(
state
);
...
...
@@ -59,6 +69,17 @@ public class BlogDetailViewModel extends ViewModel {
});
}
private
void
fetchUserInfo
(
String
userId
)
{
userRepository
.
getUserInfo
(
userId
).
removeObserver
(
new
Observer
<
Result
<
UserInfo
>>()
{
@Override
public
void
onChanged
(
Result
<
UserInfo
>
userInfoResult
)
{
if
(
userInfoResult
.
getCode
()
==
0
)
{
userInfo
.
setValue
(
userInfoResult
.
getData
());
}
}
});
}
public
void
webViewPageFinished
()
{
LoadState
state
=
loadState
.
getValue
();
state
.
setWebViewPageLoadComplete
(
true
);
...
...
app/src/main/res/drawable/background_article_abstract.xml
0 → 100644
View file @
fa55e8c8
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:shape=
"rectangle"
>
<solid
android:color=
"#f5f8fa"
/>
<corners
android:radius=
"2dp"
/>
</shape>
\ No newline at end of file
app/src/main/res/layout/activity_blog_detail.xml
View file @
fa55e8c8
This diff is collapsed.
Click to expand it.
app/src/main/res/layout/beyond_tool_bar.xml
View file @
fa55e8c8
...
...
@@ -11,7 +11,6 @@
android:textColor=
"@color/colorTextLevel4"
android:layout_marginStart=
"12dp"
android:layout_marginLeft=
"12dp"
android:background=
"@drawable/background_white_touchable"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
app:layout_constraintBottom_toBottomOf=
"parent"
...
...
@@ -27,6 +26,9 @@
android:textSize=
"16sp"
android:textColor=
"@color/colorTextLevel1"
app:layout_constraintBottom_toBottomOf=
"parent"
android:maxEms=
"14"
android:maxLines=
"1"
android:ellipsize=
"end"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
/>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment