diff --git a/common/src/main/res/values/colors.xml b/common/src/main/res/values/colors.xml
index 70f4dea5a..e8f140bca 100644
--- a/common/src/main/res/values/colors.xml
+++ b/common/src/main/res/values/colors.xml
@@ -1,6 +1,7 @@
#ffffff
+ #000000
#36205D
#432874
diff --git a/common/src/main/res/values/strings.xml b/common/src/main/res/values/strings.xml
index 4567eeb63..a8e8ef357 100644
--- a/common/src/main/res/values/strings.xml
+++ b/common/src/main/res/values/strings.xml
@@ -42,5 +42,9 @@
Validation Error
You have to fill out all fields.
+ %d Habits
+ %d Dailies
+ %d To do\'s
+ %d Rewards
\ No newline at end of file
diff --git a/wearos/build.gradle b/wearos/build.gradle
index 208b298ae..306a1a394 100644
--- a/wearos/build.gradle
+++ b/wearos/build.gradle
@@ -25,10 +25,12 @@ android {
applicationIdSuffix ".debug"
ext.enableCrashlytics = false
ext.alwaysUpdateBuildId = false
+ resValue "string", "app_name", "Habitica Debug"
}
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ resValue "string", "app_name", "Habitica"
}
}
buildFeatures {
@@ -53,6 +55,7 @@ dependencies {
}
implementation("com.squareup.retrofit2:converter-moshi:$retrofit_version")
implementation("com.squareup.moshi:moshi-kotlin:$moshi_version")
+ implementation 'androidx.coordinatorlayout:coordinatorlayout:1.1.0'
kapt("com.squareup.moshi:moshi-kotlin-codegen:$moshi_version")
//Analytics
diff --git a/wearos/src/main/AndroidManifest.xml b/wearos/src/main/AndroidManifest.xml
index 53c6cde44..b79825d79 100644
--- a/wearos/src/main/AndroidManifest.xml
+++ b/wearos/src/main/AndroidManifest.xml
@@ -12,7 +12,7 @@
android:label="@string/app_name"
android:supportsRtl="true"
android:name="com.habitrpg.wearos.habitica.MainApplication"
- android:theme="@style/Theme.AppCompat.NoActionBar">
+ android:theme="@style/HabiticaAppTheme">
diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/models/MenuItem.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/models/MenuItem.kt
index a15f71089..a0b92a5fa 100644
--- a/wearos/src/main/java/com/habitrpg/wearos/habitica/models/MenuItem.kt
+++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/models/MenuItem.kt
@@ -7,6 +7,7 @@ data class MenuItem(
val title: String,
val icon: Drawable?,
val color: Int,
+ val textColor: Int,
val isProminent: Boolean = false,
val onClick: () -> Unit
)
\ No newline at end of file
diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/MainActivity.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/MainActivity.kt
index 5565eacba..a333b0485 100644
--- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/MainActivity.kt
+++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/MainActivity.kt
@@ -6,9 +6,9 @@ import androidx.activity.viewModels
import androidx.appcompat.content.res.AppCompatResources
import androidx.core.content.ContextCompat
import androidx.wear.widget.WearableLinearLayoutManager
-import com.habitrpg.common.habitica.models.tasks.TaskType
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.databinding.ActivityMainBinding
+import com.habitrpg.common.habitica.models.tasks.TaskType
import com.habitrpg.wearos.habitica.models.MenuItem
import com.habitrpg.wearos.habitica.ui.adapters.HubAdapter
import com.habitrpg.wearos.habitica.ui.viewmodels.MainViewModel
@@ -38,6 +38,7 @@ class MainActivity : BaseActivity() {
getString(R.string.new_task),
AppCompatResources.getDrawable(this, R.drawable.icon_plus),
ContextCompat.getColor(this, R.color.brand_400),
+ ContextCompat.getColor(this, R.color.black),
true
) {
openTaskFormActivity()
@@ -46,7 +47,8 @@ class MainActivity : BaseActivity() {
"habits",
getString(R.string.habits),
AppCompatResources.getDrawable(this, R.drawable.icon_habits),
- ContextCompat.getColor(this, R.color.brand_400)
+ ContextCompat.getColor(this, R.color.brand_500),
+ ContextCompat.getColor(this, R.color.brand_700)
) {
openTasklist(TaskType.HABIT)
},
@@ -54,7 +56,8 @@ class MainActivity : BaseActivity() {
"dailies",
getString(R.string.dailies),
AppCompatResources.getDrawable(this, R.drawable.icon_dailies),
- ContextCompat.getColor(this, R.color.brand_400)
+ ContextCompat.getColor(this, R.color.brand_500),
+ ContextCompat.getColor(this, R.color.brand_700)
) {
openTasklist(TaskType.DAILY)
},
@@ -62,7 +65,8 @@ class MainActivity : BaseActivity() {
"todos",
getString(R.string.todos),
AppCompatResources.getDrawable(this, R.drawable.icon_todos),
- ContextCompat.getColor(this, R.color.brand_400)
+ ContextCompat.getColor(this, R.color.brand_500),
+ ContextCompat.getColor(this, R.color.brand_700)
) {
openTasklist(TaskType.TODO)
},
@@ -70,7 +74,8 @@ class MainActivity : BaseActivity() {
"rewards",
getString(R.string.rewards),
AppCompatResources.getDrawable(this, R.drawable.icon_rewards),
- ContextCompat.getColor(this, R.color.brand_400)
+ ContextCompat.getColor(this, R.color.brand_500),
+ ContextCompat.getColor(this, R.color.brand_700)
) {
openTasklist(TaskType.REWARD)
},
@@ -78,7 +83,8 @@ class MainActivity : BaseActivity() {
"Stats",
getString(R.string.stats),
AppCompatResources.getDrawable(this, R.drawable.icon_stats),
- ContextCompat.getColor(this, R.color.brand_400)
+ ContextCompat.getColor(this, R.color.brand_500),
+ ContextCompat.getColor(this, R.color.brand_700)
) {
openStatsActivity()
},
@@ -86,7 +92,8 @@ class MainActivity : BaseActivity() {
"avatar",
getString(R.string.avatar),
AppCompatResources.getDrawable(this, R.drawable.icon_avatar),
- ContextCompat.getColor(this, R.color.brand_400)
+ ContextCompat.getColor(this, R.color.brand_500),
+ ContextCompat.getColor(this, R.color.brand_700)
) {
openAvatarActivity()
},
@@ -94,7 +101,8 @@ class MainActivity : BaseActivity() {
"settings",
getString(R.string.settings),
AppCompatResources.getDrawable(this, R.drawable.icon_settings),
- ContextCompat.getColor(this, R.color.brand_400)
+ ContextCompat.getColor(this, R.color.brand_500),
+ ContextCompat.getColor(this, R.color.brand_700)
) {
openSettingsActivity()
}
diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/SplashActivity.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/SplashActivity.kt
index 53dc1ca42..87804c598 100644
--- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/SplashActivity.kt
+++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/SplashActivity.kt
@@ -3,6 +3,7 @@ package com.habitrpg.wearos.habitica.ui.activities
import android.content.Intent
import android.os.Bundle
import androidx.activity.viewModels
+import androidx.core.view.isVisible
import androidx.lifecycle.lifecycleScope
import com.google.android.gms.tasks.Tasks
import com.google.android.gms.wearable.CapabilityClient
@@ -34,18 +35,23 @@ class SplashActivity: BaseActivity() {
startLoginActivity()
}
}
+
+ viewModel.showAccountLoader.observe(this) {
+ binding.progressBar.isVisible = it
+ binding.textView.isVisible = it
+ }
}
private fun startMainActivity() {
val intent = Intent(this, MainActivity::class.java)
- intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(intent)
+ finish()
}
private fun startLoginActivity() {
val intent = Intent(this, LoginActivity::class.java)
- intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(intent)
+ finish()
}
private fun requestAuthenticationData(nodeID: String) {
diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/TaskListActivity.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/TaskListActivity.kt
index 5082f9a52..52c934f88 100644
--- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/TaskListActivity.kt
+++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/TaskListActivity.kt
@@ -1,15 +1,20 @@
package com.habitrpg.wearos.habitica.ui.activities
+import android.content.Context
import android.content.Intent
import android.os.Bundle
+import android.util.AttributeSet
+import android.view.View
import androidx.activity.viewModels
+import androidx.coordinatorlayout.widget.CoordinatorLayout
+import androidx.core.view.ViewCompat
import androidx.wear.activity.ConfirmationActivity
import androidx.wear.widget.WearableLinearLayoutManager
+import com.habitrpg.android.habitica.R
+import com.habitrpg.android.habitica.databinding.ActivityTasklistBinding
import com.habitrpg.common.habitica.models.responses.TaskDirection
import com.habitrpg.common.habitica.models.responses.TaskScoringResult
import com.habitrpg.common.habitica.models.tasks.TaskType
-import com.habitrpg.android.habitica.R
-import com.habitrpg.android.habitica.databinding.ActivityTasklistBinding
import com.habitrpg.wearos.habitica.models.tasks.Task
import com.habitrpg.wearos.habitica.ui.adapters.DailyListAdapter
import com.habitrpg.wearos.habitica.ui.adapters.HabitListAdapter
@@ -19,6 +24,8 @@ import com.habitrpg.wearos.habitica.ui.adapters.ToDoListAdapter
import com.habitrpg.wearos.habitica.ui.viewmodels.TaskListViewModel
import com.habitrpg.wearos.habitica.util.HabiticaScrollingLayoutCallback
import dagger.hilt.android.AndroidEntryPoint
+import java.lang.Float.max
+import java.lang.Float.min
@AndroidEntryPoint
class TaskListActivity: BaseActivity() {
@@ -29,7 +36,7 @@ class TaskListActivity: BaseActivity
binding = ActivityTasklistBinding.inflate(layoutInflater)
super.onCreate(savedInstanceState)
configureAdapter()
- binding.root.apply {
+ binding.recyclerView.apply {
layoutManager =
WearableLinearLayoutManager(this@TaskListActivity, HabiticaScrollingLayoutCallback())
adapter = this@TaskListActivity.adapter
@@ -37,11 +44,14 @@ class TaskListActivity: BaseActivity
viewModel.tasks.observe(this) {
adapter.data = it
+ adapter.title = getTitle(it.size)
}
adapter.onTaskScore = {
scoreTask(it)
}
+
+ binding.addTaskButton.setOnClickListener { }
}
private fun scoreTask(task: Task) {
@@ -71,25 +81,78 @@ class TaskListActivity: BaseActivity
startActivity(intent)
}
+ private fun openTaskFormActivity() {
+ startActivity(Intent(this, TaskFormActivity::class.java))
+ }
+
private fun configureAdapter() {
when (viewModel.taskType) {
TaskType.HABIT -> {
adapter = HabitListAdapter()
- adapter.title = getString(R.string.habits)
}
TaskType.DAILY -> {
adapter = DailyListAdapter()
- adapter.title = getString(R.string.dailies)
}
TaskType.TODO -> {
adapter = ToDoListAdapter()
- adapter.title = getString(R.string.todos)
}
TaskType.REWARD -> {
adapter = RewardListAdapter()
- adapter.title = getString(R.string.rewards)
}
else -> {}
}
+ adapter.title = getTitle(null)
+ }
+
+ private fun getTitle(count: Int?): String {
+ val taskType = viewModel.taskType ?: return ""
+ return if (count != null) {
+ when (taskType) {
+ TaskType.HABIT -> getString(R.string.x_habits, count)
+ TaskType.DAILY -> getString(R.string.x_dailies, count)
+ TaskType.TODO -> getString(R.string.x_todos, count)
+ TaskType.REWARD -> getString(R.string.x_rewards, count)
+ }
+ } else {
+ when (taskType) {
+ TaskType.HABIT -> getString(R.string.habits)
+ TaskType.DAILY -> getString(R.string.dailies)
+ TaskType.TODO -> getString(R.string.todos)
+ TaskType.REWARD -> getString(R.string.rewards)
+ }
+ }
+ }
+}
+
+class ScrollAwayBehavior(context: Context, attrs: AttributeSet) :
+ CoordinatorLayout.Behavior(context, attrs) {
+
+ override fun onStartNestedScroll(
+ coordinatorLayout: CoordinatorLayout, child: V, directTargetChild: View, target: View, axes: Int, type: Int
+ ): Boolean {
+ return axes == ViewCompat.SCROLL_AXIS_VERTICAL
+ }
+
+ override fun onNestedPreScroll(
+ coordinatorLayout: CoordinatorLayout, child: V, target: View, dx: Int, dy: Int, consumed: IntArray, type: Int
+ ) {
+ super.onNestedPreScroll(coordinatorLayout, child, target, dx, dy, consumed, type)
+ child.translationY = max(0f, min(child.height.toFloat(), child.translationY + dy))
+ }
+
+ override fun onStopNestedScroll(
+ coordinatorLayout: CoordinatorLayout,
+ child: V,
+ target: View,
+ type: Int
+ ) {
+ super.onStopNestedScroll(coordinatorLayout, child, target, type)
+ if (child.translationY != 0f && child.translationY != child.height.toFloat()) {
+ if (child.translationY < (child.height.toFloat() / 2f)) {
+ child.translationY = 0f
+ } else {
+ child.translationY = child.height.toFloat()
+ }
+ }
}
}
\ No newline at end of file
diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewHolders/HubViewHolder.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewHolders/HubViewHolder.kt
index f27e74ed0..ec130c6ea 100644
--- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewHolders/HubViewHolder.kt
+++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/viewHolders/HubViewHolder.kt
@@ -12,9 +12,10 @@ class HubViewHolder(itemView: View): BindableViewHolder