Add color picker for player

feature/players
Aurelien Hubert 6 years ago
parent 5dfb008261
commit 358c65f9aa
  1. 25
      app/src/main/AndroidManifest.xml
  2. 77
      app/src/main/java/net/pokeranalytics/android/ui/activity/ColorPickerActivity.kt
  3. 33
      app/src/main/java/net/pokeranalytics/android/ui/fragment/data/PlayerDataFragment.kt
  4. 35
      app/src/main/java/net/pokeranalytics/android/ui/view/PlayerImageView.kt
  5. 2
      app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt
  6. 15
      app/src/main/res/drawable/circle_player_color_1.xml
  7. 11
      app/src/main/res/drawable/circle_player_color_2.xml
  8. 11
      app/src/main/res/drawable/circle_player_color_3.xml
  9. 11
      app/src/main/res/drawable/circle_player_color_4.xml
  10. 11
      app/src/main/res/drawable/circle_player_color_5.xml
  11. 11
      app/src/main/res/drawable/circle_player_color_6.xml
  12. 11
      app/src/main/res/drawable/circle_player_color_7.xml
  13. 11
      app/src/main/res/drawable/circle_player_color_8.xml
  14. 11
      app/src/main/res/drawable/circle_player_color_9.xml
  15. 136
      app/src/main/res/layout/activity_color_picker.xml
  16. 12
      app/src/main/res/values/colors.xml
  17. 4
      app/src/main/res/values/dimens.xml
  18. 2
      app/src/main/res/values/styles.xml

@ -22,8 +22,8 @@
<activity
android:name="net.pokeranalytics.android.ui.activity.HomeActivity"
android:launchMode="singleTop"
android:label="@string/app_name"
android:launchMode="singleTop"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
@ -36,8 +36,8 @@
<activity
android:name="net.pokeranalytics.android.ui.activity.ImportActivity"
android:screenOrientation="portrait"
android:launchMode="singleTop">
android:launchMode="singleTop"
android:screenOrientation="portrait">
<intent-filter tools:ignore="AppLinkUrlError">
<action android:name="android.intent.action.VIEW" />
@ -79,6 +79,12 @@
android:launchMode="singleTop"
android:screenOrientation="portrait" />
<activity
android:name="net.pokeranalytics.android.ui.activity.ColorPickerActivity"
android:theme="@style/PokerAnalyticsTheme.AlertDialog"
android:launchMode="singleTop"
android:screenOrientation="portrait" />
<activity
android:name="net.pokeranalytics.android.ui.activity.SettingsActivity"
android:launchMode="singleTop"
@ -104,11 +110,6 @@
android:launchMode="singleTop"
android:screenOrientation="portrait" />
<activity
android:name="net.pokeranalytics.android.ui.activity.ComparisonChartActivity"
android:launchMode="singleTop"
android:screenOrientation="portrait" />
<activity
android:name="net.pokeranalytics.android.ui.activity.DataListActivity"
android:launchMode="singleTop"
@ -154,10 +155,10 @@
android:launchMode="singleTop"
android:screenOrientation="portrait" />
<activity
android:name="net.pokeranalytics.android.ui.activity.TableReportActivity"
android:launchMode="singleTop"
android:screenOrientation="portrait" />
<activity
android:name="net.pokeranalytics.android.ui.activity.TableReportActivity"
android:launchMode="singleTop"
android:screenOrientation="portrait" />
<meta-data
android:name="preloaded_fonts"

@ -0,0 +1,77 @@
package net.pokeranalytics.android.ui.activity
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.view.View
import androidx.fragment.app.Fragment
import kotlinx.android.synthetic.main.activity_color_picker.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
class ColorPickerActivity : PokerAnalyticsActivity() {
companion object {
const val INTENT_COLOR = "INTENT_COLOR"
fun newInstance(context: Context) {
val intent = Intent(context, ColorPickerActivity::class.java)
context.startActivity(intent)
}
/**
* Create a new instance for result
*/
fun newInstanceForResult(fragment: Fragment, requestCode: Int) {
val intent = Intent(fragment.requireContext(), ColorPickerActivity::class.java)
fragment.startActivityForResult(intent, requestCode)
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_color_picker)
initUI()
}
/**
* Init UI
*/
private fun initUI() {
color1.setOnClickListener { manageSelectedColor(it) }
color2.setOnClickListener { manageSelectedColor(it) }
color3.setOnClickListener { manageSelectedColor(it) }
color4.setOnClickListener { manageSelectedColor(it) }
color5.setOnClickListener { manageSelectedColor(it) }
color6.setOnClickListener { manageSelectedColor(it) }
color7.setOnClickListener { manageSelectedColor(it) }
color8.setOnClickListener { manageSelectedColor(it) }
color9.setOnClickListener { manageSelectedColor(it) }
}
private fun manageSelectedColor(view: View) {
val color = when(view) {
color1 -> getColor(R.color.player_color_1)
color2 -> getColor(R.color.player_color_2)
color3 -> getColor(R.color.player_color_3)
color4 -> getColor(R.color.player_color_4)
color5 -> getColor(R.color.player_color_5)
color6 -> getColor(R.color.player_color_6)
color7 -> getColor(R.color.player_color_7)
color8 -> getColor(R.color.player_color_8)
color9 -> getColor(R.color.player_color_9)
else -> getColor(R.color.player_color_1)
}
val intent = Intent()
intent.putExtra(INTENT_COLOR, color)
setResult(Activity.RESULT_OK, intent)
finish()
}
}

@ -1,12 +1,16 @@
package net.pokeranalytics.android.ui.fragment.data
import android.app.Activity.RESULT_OK
import android.app.AlertDialog
import android.content.Intent
import android.graphics.Color
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.realm.Player
import net.pokeranalytics.android.ui.activity.ColorPickerActivity
import net.pokeranalytics.android.ui.activity.components.MediaActivity
import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
@ -22,6 +26,10 @@ import java.io.File
*/
class PlayerDataFragment : EditableDataFragment(), StaticRowRepresentableDataSource {
companion object {
const val REQUEST_CODE_PICK_COLOR = 1000
}
private val player: Player
get() {
return this.item as Player
@ -36,6 +44,16 @@ class PlayerDataFragment : EditableDataFragment(), StaticRowRepresentableDataSou
return inflater.inflate(R.layout.fragment_player, container, false)
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == REQUEST_CODE_PICK_COLOR && resultCode == RESULT_OK && data?.hasExtra(ColorPickerActivity.INTENT_COLOR) == true) {
val color = data.getIntExtra(ColorPickerActivity.INTENT_COLOR, Color.TRANSPARENT)
player.color = if (color != Color.TRANSPARENT) color else null
rowRepresentableAdapter.refreshRow(PlayerRow.IMAGE)
}
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initUI()
@ -113,19 +131,20 @@ class PlayerDataFragment : EditableDataFragment(), StaticRowRepresentableDataSou
val placesArray = ArrayList<CharSequence>()
placesArray.add(getString(R.string.take_a_picture))
placesArray.add(getString(R.string.library))
// TODO
//placesArray.add(getString(R.string.select_a_color))
placesArray.add(getString(R.string.select_a_color))
if (player.hasPicture()) {
placesArray.add(getString(R.string.remove_picture))
}
builder.setItems(placesArray.toTypedArray()) { _, which ->
when (which) {
0 -> mediaActivity?.openImageCaptureIntent(false)
1 -> mediaActivity?.openImageGalleryIntent(false)
2 -> {
when (placesArray[which]) {
getString(R.string.take_a_picture) -> mediaActivity?.openImageCaptureIntent(false)
getString(R.string.library) -> mediaActivity?.openImageGalleryIntent(false)
getString(R.string.select_a_color) -> {
ColorPickerActivity.newInstanceForResult(this, REQUEST_CODE_PICK_COLOR)
}
getString(R.string.remove_picture) -> {
player.updateValue(null, PlayerRow.IMAGE)
rowRepresentableAdapter.refreshRow(PlayerRow.IMAGE)
}

@ -1,12 +1,14 @@
package net.pokeranalytics.android.ui.view
import android.content.Context
import android.graphics.Color
import android.graphics.drawable.GradientDrawable
import android.util.AttributeSet
import android.util.TypedValue
import android.view.LayoutInflater
import android.widget.FrameLayout
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.content.ContextCompat.getColor
import androidx.core.content.res.ResourcesCompat
import com.bumptech.glide.Glide
import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions.withCrossFade
@ -33,6 +35,13 @@ class PlayerImageView : FrameLayout {
SMALL -> 16f
}
}
fun getStrokeSize() : Int {
return when (this) {
NORMAL -> 4.px
SMALL -> 2.px
}
}
}
private lateinit var playerImageView: ConstraintLayout
@ -67,7 +76,7 @@ class PlayerImageView : FrameLayout {
/**
* Set the session data to the view
*/
fun setPlayer(player: Player, size: Size = Size.NORMAL) {
fun setPlayer(player: Player, size: Size = Size.NORMAL, isClickable: Boolean = true) {
// Initial
val playerInitial = if (player.name.isNotEmpty()) {
@ -87,7 +96,6 @@ class PlayerImageView : FrameLayout {
// Picture
if (player.hasPicture()) {
playerImageView.playerStroke.background = null
Glide.with(this)
.load(player.picture)
@ -100,15 +108,26 @@ class PlayerImageView : FrameLayout {
playerImageView.playerImage.setImageDrawable(null)
}
// Stroke
player.color?.let {
val drawable = playerImageView.playerStroke.background as GradientDrawable?
drawable?.setStroke(4.px, it)
// Player color
val color = if (player.color != null) {
player.color as Int
} else if (player.hasPicture()) {
Color.TRANSPARENT
} else {
getColor(context, R.color.kaki)
}
// Stroke & initial
val drawable = playerImageView.playerStroke.background as GradientDrawable?
drawable?.setStroke(size.getStrokeSize(), color)
playerImageView.playerInitial.setTextColor(color)
// Click listener
playerImageView.playerImageSelection.setOnClickListener {
onImageClickListener?.onClick(it)
if (isClickable) {
playerImageView.playerImageSelection.setOnClickListener {
onImageClickListener?.onClick(it)
}
}
}

@ -638,7 +638,7 @@ enum class RowViewType(private var layoutRes: Int) {
if (row is Player) {
itemView.findViewById<PlayerImageView?>(R.id.playerImage)?.let { playerImageView ->
playerImageView.setPlayer(row, PlayerImageView.Size.SMALL)
playerImageView.setPlayer(row, PlayerImageView.Size.SMALL, false)
}
itemView.findViewById<AppCompatTextView?>(R.id.playerName)?.let { textView ->
textView.text = row.name

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="@color/player_color_1" />
<stroke
android:color="@color/gray"
android:width="1dp" />
<size
android:width="48dp"
android:height="48dp" />
</shape>

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="@color/player_color_2" />
<size
android:width="48dp"
android:height="48dp" />
</shape>

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="@color/player_color_3" />
<size
android:width="48dp"
android:height="48dp" />
</shape>

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="@color/player_color_4" />
<size
android:width="48dp"
android:height="48dp" />
</shape>

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="@color/player_color_5" />
<size
android:width="48dp"
android:height="48dp" />
</shape>

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="@color/player_color_6" />
<size
android:width="48dp"
android:height="48dp" />
</shape>

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="@color/player_color_7" />
<size
android:width="48dp"
android:height="48dp" />
</shape>

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="@color/player_color_8" />
<size
android:width="48dp"
android:height="48dp" />
</shape>

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="@color/player_color_9" />
<size
android:width="48dp"
android:height="48dp" />
</shape>

@ -0,0 +1,136 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.cardview.widget.CardView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
app:cardCornerRadius="8dp"
app:cardBackgroundColor="@color/white">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="8dp">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/color1"
android:layout_width="@dimen/color_picker_circle_size"
android:layout_height="@dimen/color_picker_circle_size"
android:layout_marginStart="@dimen/color_picker_circle_margin"
android:layout_marginTop="@dimen/color_picker_circle_margin"
android:background="@drawable/circle_player_color_1"
android:foreground="?selectableItemBackgroundBorderless"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/color2"
android:layout_width="@dimen/color_picker_circle_size"
android:layout_height="@dimen/color_picker_circle_size"
android:layout_marginStart="@dimen/color_picker_circle_margin"
android:layout_marginTop="@dimen/color_picker_circle_margin"
android:background="@drawable/circle_player_color_2"
android:foreground="?selectableItemBackgroundBorderless"
app:layout_constraintStart_toEndOf="@+id/color1"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/color3"
android:layout_width="@dimen/color_picker_circle_size"
android:layout_height="@dimen/color_picker_circle_size"
android:layout_marginStart="@dimen/color_picker_circle_margin"
android:layout_marginTop="@dimen/color_picker_circle_margin"
android:layout_marginEnd="@dimen/color_picker_circle_margin"
android:background="@drawable/circle_player_color_3"
android:foreground="?selectableItemBackgroundBorderless"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/color2"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/color4"
android:layout_width="@dimen/color_picker_circle_size"
android:layout_height="@dimen/color_picker_circle_size"
android:layout_marginStart="@dimen/color_picker_circle_margin"
android:layout_marginTop="@dimen/color_picker_circle_margin"
android:background="@drawable/circle_player_color_4"
android:foreground="?selectableItemBackgroundBorderless"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/color1" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/color5"
android:layout_width="@dimen/color_picker_circle_size"
android:layout_height="@dimen/color_picker_circle_size"
android:layout_marginStart="@dimen/color_picker_circle_margin"
android:layout_marginTop="@dimen/color_picker_circle_margin"
android:background="@drawable/circle_player_color_5"
android:foreground="?selectableItemBackgroundBorderless"
app:layout_constraintStart_toEndOf="@+id/color4"
app:layout_constraintTop_toBottomOf="@+id/color2" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/color6"
android:layout_width="@dimen/color_picker_circle_size"
android:layout_height="@dimen/color_picker_circle_size"
android:layout_marginStart="@dimen/color_picker_circle_margin"
android:layout_marginTop="@dimen/color_picker_circle_margin"
android:layout_marginEnd="@dimen/color_picker_circle_margin"
android:background="@drawable/circle_player_color_6"
android:foreground="?selectableItemBackgroundBorderless"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/color5"
app:layout_constraintTop_toBottomOf="@+id/color2" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/color7"
android:layout_width="@dimen/color_picker_circle_size"
android:layout_height="@dimen/color_picker_circle_size"
android:layout_marginStart="@dimen/color_picker_circle_margin"
android:layout_marginTop="@dimen/color_picker_circle_margin"
android:layout_marginBottom="@dimen/color_picker_circle_margin"
android:background="@drawable/circle_player_color_7"
android:foreground="?selectableItemBackgroundBorderless"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/color4" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/color8"
android:layout_width="@dimen/color_picker_circle_size"
android:layout_height="@dimen/color_picker_circle_size"
android:layout_marginStart="@dimen/color_picker_circle_margin"
android:layout_marginTop="@dimen/color_picker_circle_margin"
android:layout_marginBottom="@dimen/color_picker_circle_margin"
android:background="@drawable/circle_player_color_8"
android:foreground="?selectableItemBackgroundBorderless"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@+id/color4"
app:layout_constraintTop_toBottomOf="@+id/color5" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/color9"
android:layout_width="@dimen/color_picker_circle_size"
android:layout_height="@dimen/color_picker_circle_size"
android:layout_marginStart="@dimen/color_picker_circle_margin"
android:layout_marginTop="@dimen/color_picker_circle_margin"
android:layout_marginEnd="@dimen/color_picker_circle_margin"
android:layout_marginBottom="@dimen/color_picker_circle_margin"
android:background="@drawable/circle_player_color_9"
android:foreground="?selectableItemBackgroundBorderless"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/color8"
app:layout_constraintTop_toBottomOf="@+id/color6" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
</FrameLayout>

@ -11,6 +11,7 @@
<color name="gray_light">#8AFFFFFF</color>
<color name="gray_darker">#141414</color>
<color name="gray_dark">#1B1F1B</color>
<color name="gray">#808080</color>
<color name="white_dark">#e0e0e0</color>
<color name="dark_clear">#40000000</color>
@ -43,4 +44,15 @@
<color name="chart_bar">#3c8c50</color>
<color name="chart_selected_bar">#71fb94</color>
<color name="player_color_1">#00000000</color>
<color name="player_color_2">#ffdf3e</color>
<color name="player_color_3">#65FF82</color>
<color name="player_color_4">#8efde7</color>
<color name="player_color_5">#3aaeff</color>
<color name="player_color_6">#6150ff</color>
<color name="player_color_7">#ff56ff</color>
<color name="player_color_8">#ff573d</color>
<color name="player_color_9">#ff971e</color>
</resources>

@ -5,4 +5,8 @@
<dimen name="design_bottom_navigation_active_text_size" tools:override="true">12sp</dimen>
<dimen name="design_bottom_navigation_text_size" tools:override="true">11sp</dimen>
<dimen name="color_picker_circle_size">48dp</dimen>
<dimen name="color_picker_circle_margin">8dp</dimen>
</resources>

@ -290,6 +290,8 @@
<item name="colorAccent">@color/green</item>
<item name="android:textColorPrimary">@color/white</item>
<item name="android:windowBackground">@color/gray_dark</item>
<item name="android:windowAnimationStyle">@null</item>
<item name="windowNoTitle">true</item>
</style>

Loading…
Cancel
Save