Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Room Park Android
Project
Project
Details
Activity
Releases
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
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Vladislav Bogdashkin
Room Park Android
Commits
9d0ed16c
Commit
9d0ed16c
authored
Oct 16, 2019
by
Vladislav Bogdashkin
🎣
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update common info view with favorite card viewholder
parent
1091d10b
Changes
9
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
311 additions
and
71 deletions
+311
-71
ScreenController.kt
...oompark/presentation/screen/favorites/ScreenController.kt
+29
-1
ScreenPresenter.kt
...roompark/presentation/screen/favorites/ScreenPresenter.kt
+4
-0
ScreenViewState.kt
...roompark/presentation/screen/favorites/ScreenViewState.kt
+2
-0
FavoritesAdapter.kt
...rk/presentation/screen/favorites/util/FavoritesAdapter.kt
+111
-0
CamsLIstAdapter.kt
...ompark/presentation/screen/feeds/utils/CamsLIstAdapter.kt
+0
-2
favorite_card_viewholder.xml
app/src/main/res/layout/favorite_card_viewholder.xml
+81
-60
favorites_common_info_block.xml
app/src/main/res/layout/favorites_common_info_block.xml
+80
-0
favorites_screen.xml
app/src/main/res/layout/favorites_screen.xml
+3
-7
info_ceil_view.xml
app/src/main/res/layout/info_ceil_view.xml
+1
-1
No files found.
app/src/main/java/com/biganto/visual/roompark/presentation/screen/favorites/ScreenController.kt
View file @
9d0ed16c
package
com.biganto.visual.roompark.presentation.screen.favorites
package
com.biganto.visual.roompark.presentation.screen.favorites
import
android.view.View
import
android.view.View
import
androidx.recyclerview.widget.LinearLayoutManager
import
androidx.recyclerview.widget.RecyclerView
import
butterknife.BindView
import
com.biganto.visual.roompark.R
import
com.biganto.visual.roompark.R
import
com.biganto.visual.roompark.base.RoomParkApplication
import
com.biganto.visual.roompark.base.RoomParkApplication
import
com.biganto.visual.roompark.base.RoomParkMainActivity
import
com.biganto.visual.roompark.base.RoomParkMainActivity
import
com.biganto.visual.roompark.conductor.BigantoBaseController
import
com.biganto.visual.roompark.conductor.BigantoBaseController
import
com.biganto.visual.roompark.presentation.screen.favorites.util.FavoritesListAdapter
import
com.biganto.visual.roompark.view_utils.grid.CeilsDecoration
import
timber.log.Timber
import
timber.log.Timber
import
javax.inject.Inject
import
javax.inject.Inject
...
@@ -25,9 +30,26 @@ class FavoritesScreenController :
...
@@ -25,9 +30,26 @@ class FavoritesScreenController :
@Inject
@Inject
override
lateinit
var
injectedPresenter
:
FavoritesScreenPresenter
override
lateinit
var
injectedPresenter
:
FavoritesScreenPresenter
@BindView
(
R
.
id
.
favorites_cards_recycler_view
)
lateinit
var
favoritesRecyclerView
:
RecyclerView
override
fun
onViewBound
(
v
:
View
)
{
private
fun
bindRecycler
()
{
favoritesRecyclerView
.
isNestedScrollingEnabled
=
true
favoritesRecyclerView
.
layoutManager
=
LinearLayoutManager
(
activity
,
RecyclerView
.
VERTICAL
,
false
)
favoritesRecyclerView
.
adapter
=
FavoritesListAdapter
()
favoritesRecyclerView
.
itemAnimator
=
null
if
(
favoritesRecyclerView
.
itemDecorationCount
==
0
)
favoritesRecyclerView
.
addItemDecoration
(
CeilsDecoration
(
1
,
resources
?.
getDimensionPixelSize
(
R
.
dimen
.
ceil_grid_padding
))
)
}
override
fun
onViewBound
(
v
:
View
)
{
bindRecycler
()
}
}
override
fun
render
(
viewState
:
FavoritesScreenViewState
)
{
override
fun
render
(
viewState
:
FavoritesScreenViewState
)
{
...
@@ -35,6 +57,7 @@ class FavoritesScreenController :
...
@@ -35,6 +57,7 @@ class FavoritesScreenController :
Timber
.
d
(
"Render state $viewState"
)
Timber
.
d
(
"Render state $viewState"
)
when
(
viewState
){
when
(
viewState
){
is
FavoritesScreenViewState
.
Idle
->
render
(
viewState
)
is
FavoritesScreenViewState
.
Idle
->
render
(
viewState
)
is
FavoritesScreenViewState
.
FavoriteEstatesLoaded
->
render
(
viewState
)
}
}
}
}
...
@@ -42,6 +65,11 @@ class FavoritesScreenController :
...
@@ -42,6 +65,11 @@ class FavoritesScreenController :
}
}
private
fun
render
(
viewState
:
FavoritesScreenViewState
.
FavoriteEstatesLoaded
)
{
(
favoritesRecyclerView
.
adapter
as
FavoritesListAdapter
).
addItems
(
viewState
.
items
)
}
private
fun
getComponent
()
=
DaggerFavoritesScreenComponent
.
factory
()
private
fun
getComponent
()
=
DaggerFavoritesScreenComponent
.
factory
()
.
create
(
RoomParkApplication
.
component
,
activity
as
RoomParkMainActivity
)
.
create
(
RoomParkApplication
.
component
,
activity
as
RoomParkMainActivity
)
.
inject
(
this
)
.
inject
(
this
)
...
...
app/src/main/java/com/biganto/visual/roompark/presentation/screen/favorites/ScreenPresenter.kt
View file @
9d0ed16c
...
@@ -20,7 +20,11 @@ class FavoritesScreenPresenter @Inject constructor(
...
@@ -20,7 +20,11 @@ class FavoritesScreenPresenter @Inject constructor(
override
fun
bindIntents
()
{
override
fun
bindIntents
()
{
val
prefetchCards
=
interactor
.
getFavoritesForCurrentUser
()
.
map
{
FavoritesScreenViewState
.
FavoriteEstatesLoaded
(
it
)
}
val
state
=
restoreStateObservable
val
state
=
restoreStateObservable
.
mergeWith
(
prefetchCards
)
.
doOnError
{
Timber
.
e
(
it
)}
.
doOnError
{
Timber
.
e
(
it
)}
.
subscribeOn
(
Schedulers
.
io
())
.
subscribeOn
(
Schedulers
.
io
())
.
observeOn
(
AndroidSchedulers
.
mainThread
())
.
observeOn
(
AndroidSchedulers
.
mainThread
())
...
...
app/src/main/java/com/biganto/visual/roompark/presentation/screen/favorites/ScreenViewState.kt
View file @
9d0ed16c
package
com.biganto.visual.roompark.presentation.screen.favorites
package
com.biganto.visual.roompark.presentation.screen.favorites
import
com.biganto.visual.roompark.conductor.BigantoBaseViewState
import
com.biganto.visual.roompark.conductor.BigantoBaseViewState
import
com.biganto.visual.roompark.domain.model.EstateModel
/**
/**
* Created by Vladislav Bogdashkin on 30.09.2019.
* Created by Vladislav Bogdashkin on 30.09.2019.
...
@@ -9,4 +10,5 @@ import com.biganto.visual.roompark.conductor.BigantoBaseViewState
...
@@ -9,4 +10,5 @@ import com.biganto.visual.roompark.conductor.BigantoBaseViewState
sealed
class
FavoritesScreenViewState
:
BigantoBaseViewState
()
{
sealed
class
FavoritesScreenViewState
:
BigantoBaseViewState
()
{
class
Idle
:
FavoritesScreenViewState
()
class
Idle
:
FavoritesScreenViewState
()
class
FavoriteEstatesLoaded
(
val
items
:
List
<
EstateModel
>)
:
FavoritesScreenViewState
()
}
}
\ No newline at end of file
app/src/main/java/com/biganto/visual/roompark/presentation/screen/favorites/util/FavoritesAdapter.kt
0 → 100644
View file @
9d0ed16c
package
com.biganto.visual.roompark.presentation.screen.favorites.util
import
android.view.LayoutInflater
import
android.view.View
import
android.view.ViewGroup
import
android.widget.TextView
import
androidx.recyclerview.widget.RecyclerView
import
butterknife.BindView
import
butterknife.ButterKnife
import
com.biganto.visual.roompark.R
import
com.biganto.visual.roompark.domain.model.CommonInfoModel
import
com.biganto.visual.roompark.domain.model.EstateModel
/**
* Created by Vladislav Bogdashkin on 16.10.2019.
*/
class
FavoritesListAdapter
:
RecyclerView
.
Adapter
<
CamListViewHolder
>()
{
private
var
list
:
MutableList
<
EstateModel
>
=
mutableListOf
()
fun
addItems
(
list
:
List
<
EstateModel
>){
this
.
list
.
clear
()
this
.
list
.
addAll
(
list
)
notifyDataSetChanged
()
}
override
fun
onCreateViewHolder
(
parent
:
ViewGroup
,
viewType
:
Int
):
CamListViewHolder
=
CamListViewHolder
(
LayoutInflater
.
from
(
parent
.
context
)
.
inflate
(
R
.
layout
.
favorite_card_viewholder
,
parent
,
false
)
)
override
fun
getItemCount
():
Int
=
list
.
size
override
fun
onBindViewHolder
(
holder
:
CamListViewHolder
,
position
:
Int
)
{
holder
.
bindModel
(
list
[
position
])
}
}
class
CamListViewHolder
(
itemView
:
View
)
:
RecyclerView
.
ViewHolder
(
itemView
)
{
@BindView
(
R
.
id
.
object_card_title
)
lateinit
var
estateTitle
:
TextView
@BindView
(
R
.
id
.
common_info_block
)
lateinit
var
commonInfo
:
View
@BindView
(
R
.
id
.
start_tour_button
)
lateinit
var
startTour
:
View
@BindView
(
R
.
id
.
info_ceil_1
)
lateinit
var
info1
:
View
@BindView
(
R
.
id
.
info_ceil_2
)
lateinit
var
info2
:
View
@BindView
(
R
.
id
.
info_ceil_3
)
lateinit
var
info3
:
View
@BindView
(
R
.
id
.
info_ceil_4
)
lateinit
var
info4
:
View
@BindView
(
R
.
id
.
info_ceil_5
)
lateinit
var
info5
:
View
@BindView
(
R
.
id
.
info_ceil_6
)
lateinit
var
info6
:
View
@BindView
(
R
.
id
.
info_ceil_7
)
lateinit
var
info7
:
View
@BindView
(
R
.
id
.
info_ceil_8
)
lateinit
var
info8
:
View
fun
typeName
(
type
:
String
)
=
when
(
type
){
"flat"
->
"КВАРТИРА"
"parking"
->
"МАШИНОМЕСТО"
"storage"
->
"КЛАДОВКА"
else
->
"ОБЪЕКТ"
}
init
{
ButterKnife
.
bind
(
this
,
itemView
)
}
fun
bindModel
(
model
:
EstateModel
)
{
val
fullObjName
=
"${typeName(model.type)}\n${model.number}"
estateTitle
.
text
=
fullObjName
if
(
model
.
commonInfo
==
null
)
commonInfo
.
visibility
=
View
.
GONE
else
{
commonInfo
.
visibility
=
View
.
VISIBLE
;
renderCommonInfo
(
model
.
commonInfo
)}
if
(
model
.
type
==
"flat"
)
startTour
.
visibility
=
View
.
VISIBLE
else
startTour
.
visibility
=
View
.
GONE
}
fun
renderCommonInfo
(
info
:
CommonInfoModel
){
if
(
info
.
building
==
null
)
info1
.
visibility
=
View
.
GONE
else
{
info1
.
title
().
text
=
"Корпус"
;
info1
.
text
().
text
=
info
.
building
.
toString
()}
if
(
info
.
section_begin
==
null
)
info1
.
visibility
=
View
.
GONE
else
{
info2
.
title
().
text
=
"Секция"
;
info2
.
text
().
text
=
info
.
section_begin
.
toString
()}
if
(
info
.
floor
==
null
)
info1
.
visibility
=
View
.
GONE
else
{
info3
.
title
().
text
=
"Этаж"
;
info3
.
text
().
text
=
info
.
floor
.
toString
()}
if
(
info
.
area
==
null
)
info1
.
visibility
=
View
.
GONE
else
{
info4
.
title
().
text
=
"Общая, м²"
;
info4
.
text
().
text
=
info
.
area
.
toString
()}
if
(
info
.
price_meter
==
null
)
info1
.
visibility
=
View
.
GONE
else
{
info5
.
title
().
text
=
"Цена за м²"
;
info5
.
text
().
text
=
info
.
price_meter
.
toRubly
()}
if
(
info
.
price
==
null
)
info1
.
visibility
=
View
.
GONE
else
{
info6
.
title
().
text
=
"Стоимость"
;
info6
.
text
().
text
=
info
.
price
.
toRubly
()}
if
(
true
)
info7
.
visibility
=
View
.
GONE
else
{
info7
.
title
().
text
=
"вщщ"
;
info7
.
text
().
text
=
info
.
building
.
toString
()}
if
(
true
)
info8
.
visibility
=
View
.
GONE
else
{
info8
.
title
().
text
=
"щщщщщз"
;
info8
.
text
().
text
=
info
.
building
.
toString
()}
}
private
fun
View
.
title
()
=
this
.
findViewById
<
TextView
>(
R
.
id
.
info_ceil_header
)
private
fun
View
.
text
()
=
this
.
findViewById
<
TextView
>(
R
.
id
.
info_ceil_content
)
private
fun
Int
.
toRubly
()
=
String
.
format
(
"% d"
,
this
)
}
\ No newline at end of file
app/src/main/java/com/biganto/visual/roompark/presentation/screen/feeds/utils/CamsLIstAdapter.kt
View file @
9d0ed16c
...
@@ -50,6 +50,4 @@ class CamListViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
...
@@ -50,6 +50,4 @@ class CamListViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
fun
bindModel
(
model
:
WebCamModel
)
{
fun
bindModel
(
model
:
WebCamModel
)
{
camTitle
.
text
=
model
.
title
camTitle
.
text
=
model
.
title
}
}
}
}
app/src/main/res/layout/favorite_card_viewholder.xml
View file @
9d0ed16c
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<
androidx.constraintlayout.widget.ConstraintLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
<
com.google.android.material.card.MaterialCardView
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"
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"8dp"
android:layout_marginBottom=
"16dp"
android:background=
"@color/colorCommonBackground"
>
<androidx.constraintlayout.widget.ConstraintLayout
android:id=
"@+id/linearLayout10"
android:id=
"@+id/linearLayout10"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_height=
"wrap_content"
android:orientation=
"vertical"
>
android:orientation=
"vertical"
android:padding=
"16dp"
>
<FrameLayout
<FrameLayout
android:id=
"@+id/feed_read"
android:id=
"@+id/feed_read"
android:layout_width=
"12dp"
android:layout_width=
"12dp"
android:layout_height=
"12dp"
android:layout_height=
"12dp"
android:layout_marginStart=
"16dp"
android:layout_marginTop=
"16dp"
android:background=
"@drawable/new_feed_icon"
android:background=
"@drawable/new_feed_icon"
android:backgroundTint=
"@color/colorAccent"
android:backgroundTint=
"@color/colorAccent"
android:visibility=
"visible"
android:visibility=
"visible"
...
@@ -37,8 +42,6 @@
...
@@ -37,8 +42,6 @@
android:id=
"@+id/object_plan_icon"
android:id=
"@+id/object_plan_icon"
android:layout_width=
"24dp"
android:layout_width=
"24dp"
android:layout_height=
"24dp"
android:layout_height=
"24dp"
android:layout_marginTop=
"16dp"
android:layout_marginEnd=
"16dp"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
app:srcCompat=
"@drawable/ic_favorites"
/>
app:srcCompat=
"@drawable/ic_favorites"
/>
...
@@ -48,8 +51,6 @@
...
@@ -48,8 +51,6 @@
style=
"@style/Header_TextView.Main_Header"
style=
"@style/Header_TextView.Main_Header"
android:layout_width=
"0dp"
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"16dp"
android:layout_marginEnd=
"16dp"
android:layout_marginTop=
"8dp"
android:layout_marginTop=
"8dp"
android:text=
"КВАРТИРА\n№ 452"
android:text=
"КВАРТИРА\n№ 452"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
...
@@ -57,6 +58,7 @@
...
@@ -57,6 +58,7 @@
app:layout_constraintTop_toBottomOf=
"@+id/object_plan_icon"
/>
app:layout_constraintTop_toBottomOf=
"@+id/object_plan_icon"
/>
<include
<include
android:id=
"@+id/header_divider"
layout=
"@layout/horizontal_divider"
layout=
"@layout/horizontal_divider"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
...
@@ -66,5 +68,24 @@
...
@@ -66,5 +68,24 @@
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@+id/object_card_title"
/>
app:layout_constraintTop_toBottomOf=
"@+id/object_card_title"
/>
<include
android:id=
"@+id/common_info_block"
layout=
"@layout/favorites_common_info_block"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@+id/header_divider"
/>
<include
android:id=
"@+id/start_tour_button"
layout=
"@layout/start_tour_viewholder"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"16dp"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@+id/common_info_block"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</com.google.android.material.card.MaterialCardView>
\ No newline at end of file
\ No newline at end of file
app/src/main/res/layout/favorites_common_info_block.xml
0 → 100644
View file @
9d0ed16c
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:orientation=
"vertical"
>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_marginTop=
"8dp"
android:orientation=
"horizontal"
>
<include
android:id=
"@+id/info_ceil_1"
layout=
"@layout/info_ceil_view"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_weight=
"1"
/>
<include
android:id=
"@+id/info_ceil_2"
layout=
"@layout/info_ceil_view"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_weight=
"1"
/>
<include
android:id=
"@+id/info_ceil_3"
layout=
"@layout/info_ceil_view"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_weight=
"1"
/>
<include
android:id=
"@+id/info_ceil_4"
layout=
"@layout/info_ceil_view"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_weight=
"1"
/>
</LinearLayout>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_marginTop=
"8dp"
android:orientation=
"horizontal"
>
<include
android:id=
"@+id/info_ceil_5"
layout=
"@layout/info_ceil_view"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_weight=
"1"
/>
<include
android:id=
"@+id/info_ceil_6"
layout=
"@layout/info_ceil_view"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_weight=
"1"
/>
<include
android:id=
"@+id/info_ceil_7"
layout=
"@layout/info_ceil_view"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_weight=
"1"
/>
<include
android:id=
"@+id/info_ceil_8"
layout=
"@layout/info_ceil_view"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_weight=
"1"
android:visibility=
"visible"
/>
</LinearLayout>
</LinearLayout>
\ No newline at end of file
app/src/main/res/layout/favorites_screen.xml
View file @
9d0ed16c
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
<LinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_height=
"match_parent"
android:background=
"@color/colorOpacityCardBackground"
android:background=
"@color/colorOpacityCardBackground"
android:orientation=
"vertical"
>
android:orientation=
"vertical"
>
<TextView
android:id=
"@+id/textView16"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:text=
"TextView"
/>
<androidx.recyclerview.widget.RecyclerView
<androidx.recyclerview.widget.RecyclerView
android:id=
"@+id/favorites_cards_recycler_view"
android:id=
"@+id/favorites_cards_recycler_view"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_height=
"match_parent"
android:padding=
"16dp"
/>
android:padding=
"16dp"
tools:listitem=
"@layout/favorite_card_viewholder"
/>
</LinearLayout>
</LinearLayout>
\ No newline at end of file
app/src/main/res/layout/info_ceil_view.xml
View file @
9d0ed16c
...
@@ -13,7 +13,7 @@
...
@@ -13,7 +13,7 @@
<com.google.android.material.textview.MaterialTextView
<com.google.android.material.textview.MaterialTextView
style=
"@style/Common_Text.Default"
style=
"@style/Common_Text.Default"
android:id=
"@+id/info_ce
a
il_content"
android:id=
"@+id/info_ceil_content"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"4dp"
android:layout_marginTop=
"4dp"
...
...
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