mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-04-14 19:56:32 +00:00
Add setting for task list display mode
This commit is contained in:
parent
dc803b52f8
commit
864101288b
23 changed files with 191 additions and 52 deletions
|
|
@ -64,7 +64,7 @@ dependencies {
|
||||||
compileOnly 'com.github.pengrad:jdk9-deps:1.0'
|
compileOnly 'com.github.pengrad:jdk9-deps:1.0'
|
||||||
//App Compatibility and Material Design
|
//App Compatibility and Material Design
|
||||||
implementation 'androidx.appcompat:appcompat:1.1.0'
|
implementation 'androidx.appcompat:appcompat:1.1.0'
|
||||||
implementation 'com.google.android.material:material:1.1.0'
|
implementation 'com.google.android.material:material:1.0.0'
|
||||||
implementation 'androidx.recyclerview:recyclerview:1.1.0'
|
implementation 'androidx.recyclerview:recyclerview:1.1.0'
|
||||||
implementation 'androidx.legacy:legacy-preference-v14:1.0.0'
|
implementation 'androidx.legacy:legacy-preference-v14:1.0.0'
|
||||||
// Emojis
|
// Emojis
|
||||||
|
|
@ -162,8 +162,8 @@ android {
|
||||||
multiDexEnabled true
|
multiDexEnabled true
|
||||||
resConfigs "en", "bg", "de", "en-rGB", "es", "fr", "hr-rHR", "in", "it", "iw", "ja", "ko", "lt", "nl", "pl", "pt-rBR", "pt-rPT", "ru", "tr", "zh", "zh-rTW"
|
resConfigs "en", "bg", "de", "en-rGB", "es", "fr", "hr-rHR", "in", "it", "iw", "ja", "ko", "lt", "nl", "pl", "pt-rBR", "pt-rPT", "ru", "tr", "zh", "zh-rTW"
|
||||||
|
|
||||||
versionCode 2408
|
versionCode 2412
|
||||||
versionName "2.6"
|
versionName "2.6.1"
|
||||||
}
|
}
|
||||||
|
|
||||||
viewBinding {
|
viewBinding {
|
||||||
|
|
@ -213,6 +213,12 @@ android {
|
||||||
dimension "buildType"
|
dimension "buildType"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
staff {
|
||||||
|
dimension "buildType"
|
||||||
|
buildConfigField "String", "TESTING_LEVEL", "\"staff\""
|
||||||
|
resValue "string", "app_name", "Habitica Staff"
|
||||||
|
}
|
||||||
|
|
||||||
alpha {
|
alpha {
|
||||||
dimension "buildType"
|
dimension "buildType"
|
||||||
buildConfigField "String", "TESTING_LEVEL", "\"alpha\""
|
buildConfigField "String", "TESTING_LEVEL", "\"alpha\""
|
||||||
|
|
|
||||||
|
|
@ -1014,5 +1014,5 @@
|
||||||
<string name="read_more">Read More</string>
|
<string name="read_more">Read More</string>
|
||||||
<string name="purchase_amount_error">You are unable to buy that amount.</string>
|
<string name="purchase_amount_error">You are unable to buy that amount.</string>
|
||||||
<string name="still_questions">Still have a question?</string>
|
<string name="still_questions">Still have a question?</string>
|
||||||
<string name="delete_checklist_entry">Delete Checklist entry</string>
|
<string name="task_display">Task list display</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,18 @@
|
||||||
<item>@string/avatar_size_broad</item>
|
<item>@string/avatar_size_broad</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
|
|
||||||
|
<string-array name="TaskDisplayTypes">
|
||||||
|
<item>Standard</item>
|
||||||
|
<item>Compact</item>
|
||||||
|
<item>Minimal</item>
|
||||||
|
</string-array>
|
||||||
|
|
||||||
|
<string-array name="TaskDisplayValues">
|
||||||
|
<item>standard</item>
|
||||||
|
<item>compact</item>
|
||||||
|
<item>minimal</item>
|
||||||
|
</string-array>
|
||||||
|
|
||||||
<string-array name="Language">
|
<string-array name="Language">
|
||||||
<item>English</item>
|
<item>English</item>
|
||||||
<item>Български</item>
|
<item>Български</item>
|
||||||
|
|
|
||||||
|
|
@ -112,6 +112,13 @@
|
||||||
android:shouldDisableView="false"
|
android:shouldDisableView="false"
|
||||||
android:summary="@string/SP_APIToken_summary"
|
android:summary="@string/SP_APIToken_summary"
|
||||||
android:layout="@layout/preference_child_summary"/>
|
android:layout="@layout/preference_child_summary"/>
|
||||||
|
<ListPreference
|
||||||
|
android:entries="@array/weekdays"
|
||||||
|
android:entryValues="@array/weekdayValues"
|
||||||
|
android:key="@string/pref_first_day_of_the_week_key"
|
||||||
|
android:layout="@layout/preference_child_summary"
|
||||||
|
android:summary="@string/pref_first_day_of_the_week_summary"
|
||||||
|
android:title="@string/pref_first_day_of_the_week_title" />
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
||||||
|
|
||||||
<Preference
|
<Preference
|
||||||
|
|
@ -131,11 +138,12 @@
|
||||||
<PreferenceCategory
|
<PreferenceCategory
|
||||||
android:title="@string/app_settings"
|
android:title="@string/app_settings"
|
||||||
android:layout="@layout/preference_category">
|
android:layout="@layout/preference_category">
|
||||||
<ListPreference android:title="@string/pref_first_day_of_the_week_title"
|
<ListPreference
|
||||||
android:key="@string/pref_first_day_of_the_week_key"
|
android:title="@string/task_display"
|
||||||
android:entries="@array/weekdays"
|
android:key="task_display"
|
||||||
android:entryValues="@array/weekdayValues"
|
android:entries="@array/TaskDisplayTypes"
|
||||||
android:summary="@string/pref_first_day_of_the_week_summary"
|
android:entryValues="@array/TaskDisplayValues"
|
||||||
|
android:defaultValue="standard"
|
||||||
android:layout="@layout/preference_child_summary"/>
|
android:layout="@layout/preference_child_summary"/>
|
||||||
<ListPreference android:title="@string/Language_title"
|
<ListPreference android:title="@string/Language_title"
|
||||||
android:key="language"
|
android:key="language"
|
||||||
|
|
|
||||||
|
|
@ -76,5 +76,9 @@
|
||||||
<key>raiseShops</key>
|
<key>raiseShops</key>
|
||||||
<value>false</value>
|
<value>false</value>
|
||||||
</entry>
|
</entry>
|
||||||
|
<entry>
|
||||||
|
<key>enableTaskDisplayMode</key>
|
||||||
|
<value>true</value>
|
||||||
|
</entry>
|
||||||
</defaultsMap>
|
</defaultsMap>
|
||||||
<!-- END xml_defaults -->
|
<!-- END xml_defaults -->
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
package com.habitrpg.android.habitica.helpers
|
package com.habitrpg.android.habitica.helpers
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import androidx.preference.PreferenceManager
|
||||||
import com.google.firebase.remoteconfig.FirebaseRemoteConfig
|
import com.google.firebase.remoteconfig.FirebaseRemoteConfig
|
||||||
import com.google.gson.Gson
|
import com.google.gson.Gson
|
||||||
import com.google.gson.reflect.TypeToken
|
import com.google.gson.reflect.TypeToken
|
||||||
|
|
@ -82,4 +84,13 @@ class AppConfigManager {
|
||||||
fun raiseShops(): Boolean {
|
fun raiseShops(): Boolean {
|
||||||
return remoteConfig.getBoolean("raiseShops")
|
return remoteConfig.getBoolean("raiseShops")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun taskDisplayMode(context: Context): String {
|
||||||
|
return if (remoteConfig.getBoolean("enableTaskDisplayMode")) {
|
||||||
|
val preferences = PreferenceManager.getDefaultSharedPreferences(context)
|
||||||
|
preferences.getString("task_display", "standard") ?: "standard"
|
||||||
|
} else {
|
||||||
|
"standard"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ import android.graphics.drawable.Drawable
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
import android.view.inputmethod.InputMethodManager
|
import android.view.inputmethod.InputMethodManager
|
||||||
import android.widget.Button
|
import android.widget.Button
|
||||||
import androidx.appcompat.content.res.AppCompatResources
|
import androidx.appcompat.content.res.AppCompatResources
|
||||||
|
|
@ -61,6 +62,7 @@ class SetupActivity : BaseActivity(), ViewPager.OnPageChangeListener {
|
||||||
internal var taskSetupFragment: TaskSetupFragment? = null
|
internal var taskSetupFragment: TaskSetupFragment? = null
|
||||||
internal var user: User? = null
|
internal var user: User? = null
|
||||||
private var completedSetup = false
|
private var completedSetup = false
|
||||||
|
private var createdTasks = false
|
||||||
|
|
||||||
private val isLastPage: Boolean
|
private val isLastPage: Boolean
|
||||||
get() = this.pager.adapter == null || this.pager.currentItem == (this.pager.adapter?.count ?: 0) - 1
|
get() = this.pager.adapter == null || this.pager.currentItem == (this.pager.adapter?.count ?: 0) - 1
|
||||||
|
|
@ -127,8 +129,13 @@ class SetupActivity : BaseActivity(), ViewPager.OnPageChangeListener {
|
||||||
if (this.taskSetupFragment == null) {
|
if (this.taskSetupFragment == null) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
if (createdTasks) {
|
||||||
|
onUserReceived(user)
|
||||||
|
return
|
||||||
|
}
|
||||||
val newTasks = this.taskSetupFragment?.createSampleTasks()
|
val newTasks = this.taskSetupFragment?.createSampleTasks()
|
||||||
this.completedSetup = true
|
this.completedSetup = true
|
||||||
|
createdTasks = true
|
||||||
newTasks?.let {
|
newTasks?.let {
|
||||||
this.taskRepository.createTasks(it).subscribe(Consumer { onUserReceived(user) }, RxErrorHandler.handleEmptyError())
|
this.taskRepository.createTasks(it).subscribe(Consumer { onUserReceived(user) }, RxErrorHandler.handleEmptyError())
|
||||||
}
|
}
|
||||||
|
|
@ -194,14 +201,14 @@ class SetupActivity : BaseActivity(), ViewPager.OnPageChangeListener {
|
||||||
|
|
||||||
private fun onUserReceived(user: User?) {
|
private fun onUserReceived(user: User?) {
|
||||||
if (completedSetup) {
|
if (completedSetup) {
|
||||||
if (!compositeSubscription.isDisposed) {
|
|
||||||
compositeSubscription.dispose()
|
|
||||||
}
|
|
||||||
val additionalData = HashMap<String, Any>()
|
val additionalData = HashMap<String, Any>()
|
||||||
additionalData["status"] = "completed"
|
additionalData["status"] = "completed"
|
||||||
AmplitudeManager.sendEvent("setup", AmplitudeManager.EVENT_CATEGORY_BEHAVIOUR, AmplitudeManager.EVENT_HITTYPE_EVENT, additionalData)
|
AmplitudeManager.sendEvent("setup", AmplitudeManager.EVENT_CATEGORY_BEHAVIOUR, AmplitudeManager.EVENT_HITTYPE_EVENT, additionalData)
|
||||||
|
|
||||||
compositeSubscription.add(userRepository.updateUser(user, "flags.welcomed", true).subscribe(Consumer {
|
compositeSubscription.add(userRepository.updateUser(user, "flags.welcomed", true).subscribe(Consumer {
|
||||||
|
if (!compositeSubscription.isDisposed) {
|
||||||
|
compositeSubscription.dispose()
|
||||||
|
}
|
||||||
startMainActivity()
|
startMainActivity()
|
||||||
}, RxErrorHandler.handleEmptyError()))
|
}, RxErrorHandler.handleEmptyError()))
|
||||||
return
|
return
|
||||||
|
|
@ -256,6 +263,29 @@ class SetupActivity : BaseActivity(), ViewPager.OnPageChangeListener {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun instantiateItem(container: ViewGroup, position: Int): Any {
|
||||||
|
val item = super.instantiateItem(container, position)
|
||||||
|
when (item) {
|
||||||
|
is AvatarSetupFragment -> {
|
||||||
|
avatarSetupFragment = item
|
||||||
|
item.activity = this@SetupActivity
|
||||||
|
item.setUser(user)
|
||||||
|
item.width = pager.width
|
||||||
|
}
|
||||||
|
is TaskSetupFragment -> {
|
||||||
|
taskSetupFragment = item
|
||||||
|
item.setUser(user)
|
||||||
|
}
|
||||||
|
is WelcomeFragment -> {
|
||||||
|
welcomeFragment = item
|
||||||
|
item.nameValidEvents.toFlowable(BackpressureStrategy.DROP)?.subscribe {
|
||||||
|
setNextButtonEnabled(it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return item
|
||||||
|
}
|
||||||
|
|
||||||
override fun getCount(): Int {
|
override fun getCount(): Int {
|
||||||
return 3
|
return 3
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import android.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.util.SparseArray
|
import android.util.SparseArray
|
||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
|
import android.view.ViewGroup
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.fragment.app.FragmentPagerAdapter
|
import androidx.fragment.app.FragmentPagerAdapter
|
||||||
import androidx.viewpager.widget.ViewPager
|
import androidx.viewpager.widget.ViewPager
|
||||||
|
|
@ -67,6 +68,21 @@ class SkillTasksActivity : BaseActivity() {
|
||||||
return fragment
|
return fragment
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun instantiateItem(container: ViewGroup, position: Int): Any {
|
||||||
|
val item = super.instantiateItem(container, position)
|
||||||
|
if (item is SkillTasksRecyclerViewFragment) {
|
||||||
|
item.taskType = when (position) {
|
||||||
|
0 -> Task.TYPE_HABIT
|
||||||
|
1 -> Task.TYPE_DAILY
|
||||||
|
else -> Task.TYPE_TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
compositeSubscription.add(item.getTaskSelectionEvents().subscribe(Consumer { task -> taskSelected(task) }, RxErrorHandler.handleEmptyError()))
|
||||||
|
viewFragmentsDictionary.put(position, item)
|
||||||
|
}
|
||||||
|
return item
|
||||||
|
}
|
||||||
|
|
||||||
override fun getCount(): Int {
|
override fun getCount(): Int {
|
||||||
return 3
|
return 3
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -116,7 +116,7 @@ class ChallengeTasksRecyclerViewAdapter(taskFilterHelper: TaskFilterHelper?, lay
|
||||||
addBtn.setOnClickListener { newTask?.let { callback.onNext(it) } }
|
addBtn.setOnClickListener { newTask?.let { callback.onNext(it) } }
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun bind(data: Task, position: Int) {
|
override fun bind(data: Task, position: Int, displayMode: String) {
|
||||||
this.newTask = data
|
this.newTask = data
|
||||||
addBtn.text = data.text
|
addBtn.text = data.text
|
||||||
}
|
}
|
||||||
|
|
@ -126,7 +126,7 @@ class ChallengeTasksRecyclerViewAdapter(taskFilterHelper: TaskFilterHelper?, lay
|
||||||
|
|
||||||
private val dividerName: TextView = itemView.findViewById(R.id.divider_name)
|
private val dividerName: TextView = itemView.findViewById(R.id.divider_name)
|
||||||
|
|
||||||
override fun bind(data: Task, position: Int) {
|
override fun bind(data: Task, position: Int, displayMode: String) {
|
||||||
dividerName.text = data.text
|
dividerName.text = data.text
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,7 @@ abstract class BaseTasksRecyclerViewAdapter<VH : BindableViewHolder<Task>>(var t
|
||||||
override fun onBindViewHolder(holder: VH, position: Int) {
|
override fun onBindViewHolder(holder: VH, position: Int) {
|
||||||
val item = filteredContent?.get(position)
|
val item = filteredContent?.get(position)
|
||||||
if (item != null) {
|
if (item != null) {
|
||||||
holder.bind(item, position)
|
holder.bind(item, position, "normal")
|
||||||
}
|
}
|
||||||
/*if (this.displayedChecklist != null && ChecklistedViewHolder.class.isAssignableFrom(holder.getClass())) {
|
/*if (this.displayedChecklist != null && ChecklistedViewHolder.class.isAssignableFrom(holder.getClass())) {
|
||||||
ChecklistedViewHolder checklistedHolder = (ChecklistedViewHolder) holder;
|
ChecklistedViewHolder checklistedHolder = (ChecklistedViewHolder) holder;
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,14 @@ abstract class RealmBaseTasksRecyclerViewAdapter<VH : BaseTaskViewHolder>(
|
||||||
private var updateOnModification: Boolean = false
|
private var updateOnModification: Boolean = false
|
||||||
override var ignoreUpdates: Boolean = false
|
override var ignoreUpdates: Boolean = false
|
||||||
|
|
||||||
|
override var taskDisplayMode: String = "standard"
|
||||||
|
set(value) {
|
||||||
|
if (field != value) {
|
||||||
|
field = value
|
||||||
|
notifyDataSetChanged()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private val resultsListener: OrderedRealmCollectionChangeListener<RealmResults<Task>> by lazy {
|
private val resultsListener: OrderedRealmCollectionChangeListener<RealmResults<Task>> by lazy {
|
||||||
OrderedRealmCollectionChangeListener<RealmResults<Task>> { _, changeSet ->
|
OrderedRealmCollectionChangeListener<RealmResults<Task>> { _, changeSet ->
|
||||||
buildChangeSet(changeSet)
|
buildChangeSet(changeSet)
|
||||||
|
|
@ -128,7 +136,7 @@ abstract class RealmBaseTasksRecyclerViewAdapter<VH : BaseTaskViewHolder>(
|
||||||
override fun onBindViewHolder(holder: VH, position: Int) {
|
override fun onBindViewHolder(holder: VH, position: Int) {
|
||||||
val item = getItem(position)
|
val item = getItem(position)
|
||||||
if (item != null) {
|
if (item != null) {
|
||||||
holder.bind(item, position)
|
holder.bind(item, position, taskDisplayMode)
|
||||||
holder.errorButtonClicked = Action {
|
holder.errorButtonClicked = Action {
|
||||||
errorButtonEventsSubject.onNext("")
|
errorButtonEventsSubject.onNext("")
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,15 @@ class RewardsRecyclerViewAdapter(private var customRewards: OrderedRealmCollecti
|
||||||
private var purchaseCardSubject = PublishSubject.create<ShopItem>()
|
private var purchaseCardSubject = PublishSubject.create<ShopItem>()
|
||||||
val purchaseCardEvents: Flowable<ShopItem> = purchaseCardSubject.toFlowable(BackpressureStrategy.LATEST)
|
val purchaseCardEvents: Flowable<ShopItem> = purchaseCardSubject.toFlowable(BackpressureStrategy.LATEST)
|
||||||
|
|
||||||
|
|
||||||
|
override var taskDisplayMode: String = "standard"
|
||||||
|
set(value) {
|
||||||
|
if (field != value) {
|
||||||
|
field = value
|
||||||
|
notifyDataSetChanged()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private val inAppRewardCount: Int
|
private val inAppRewardCount: Int
|
||||||
get() {
|
get() {
|
||||||
if (inAppRewards?.isValid != true) return 0
|
if (inAppRewards?.isValid != true) return 0
|
||||||
|
|
@ -71,7 +80,7 @@ class RewardsRecyclerViewAdapter(private var customRewards: OrderedRealmCollecti
|
||||||
if (customRewards != null && position < customRewardCount) {
|
if (customRewards != null && position < customRewardCount) {
|
||||||
val reward = customRewards?.get(position) ?: return
|
val reward = customRewards?.get(position) ?: return
|
||||||
val gold = user?.stats?.gp ?: 0.0
|
val gold = user?.stats?.gp ?: 0.0
|
||||||
(holder as? RewardViewHolder)?.bind(reward, position, reward.value < gold)
|
(holder as? RewardViewHolder)?.bind(reward, position, reward.value < gold, taskDisplayMode)
|
||||||
} else if (inAppRewards != null) {
|
} else if (inAppRewards != null) {
|
||||||
val item = inAppRewards?.get(position - customRewardCount) ?: return
|
val item = inAppRewards?.get(position - customRewardCount) ?: return
|
||||||
if (holder is ShopItemViewHolder) {
|
if (holder is ShopItemViewHolder) {
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,8 @@ interface TaskRecyclerViewAdapter {
|
||||||
|
|
||||||
val errorButtonEvents: Flowable<String>
|
val errorButtonEvents: Flowable<String>
|
||||||
|
|
||||||
|
var taskDisplayMode: String
|
||||||
|
|
||||||
fun updateData(tasks: OrderedRealmCollection<Task>?)
|
fun updateData(tasks: OrderedRealmCollection<Task>?)
|
||||||
|
|
||||||
fun filter()
|
fun filter()
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,10 @@ class PreferencesFragment : BasePreferencesFragment(), SharedPreferences.OnShare
|
||||||
val themePreference = findPreference("theme_name") as? ListPreference
|
val themePreference = findPreference("theme_name") as? ListPreference
|
||||||
themePreference?.isVisible = configManager.testingLevel() == AppTestingLevel.ALPHA || BuildConfig.DEBUG
|
themePreference?.isVisible = configManager.testingLevel() == AppTestingLevel.ALPHA || BuildConfig.DEBUG
|
||||||
themePreference?.summary = themePreference?.entry
|
themePreference?.summary = themePreference?.entry
|
||||||
|
|
||||||
|
|
||||||
|
val taskDisplayPreference = findPreference("task_display") as? ListPreference
|
||||||
|
taskDisplayPreference?.summary = taskDisplayPreference?.entry
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
|
|
@ -224,6 +228,10 @@ class PreferencesFragment : BasePreferencesFragment(), SharedPreferences.OnShare
|
||||||
apiClient.updateServerUrl(sharedPreferences.getString(key, ""))
|
apiClient.updateServerUrl(sharedPreferences.getString(key, ""))
|
||||||
findPreference(key).summary = sharedPreferences.getString(key, "")
|
findPreference(key).summary = sharedPreferences.getString(key, "")
|
||||||
}
|
}
|
||||||
|
"task_display" -> {
|
||||||
|
val preference = findPreference(key) as ListPreference
|
||||||
|
preference.summary = preference.entry
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -102,6 +102,8 @@ open class TaskRecyclerViewFragment : BaseFragment(), androidx.swiperefreshlayou
|
||||||
this.recyclerAdapter?.filter()
|
this.recyclerAdapter?.filter()
|
||||||
}, RxErrorHandler.handleEmptyError()))
|
}, RxErrorHandler.handleEmptyError()))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
context?.let { recyclerAdapter?.taskDisplayMode = configManager.taskDisplayMode(it) }
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun handleTaskResult(result: TaskScoringResult, value: Int) {
|
private fun handleTaskResult(result: TaskScoringResult, value: Int) {
|
||||||
|
|
@ -359,6 +361,11 @@ open class TaskRecyclerViewFragment : BaseFragment(), androidx.swiperefreshlayou
|
||||||
}.subscribe(Consumer { }, RxErrorHandler.handleEmptyError()))
|
}.subscribe(Consumer { }, RxErrorHandler.handleEmptyError()))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onResume() {
|
||||||
|
super.onResume()
|
||||||
|
context?.let { recyclerAdapter?.taskDisplayMode = configManager.taskDisplayMode(it) }
|
||||||
|
}
|
||||||
|
|
||||||
fun setActiveFilter(activeFilter: String) {
|
fun setActiveFilter(activeFilter: String) {
|
||||||
taskFilterHelper.setActiveFilter(classType ?: "", activeFilter)
|
taskFilterHelper.setActiveFilter(classType ?: "", activeFilter)
|
||||||
recyclerAdapter?.filter()
|
recyclerAdapter?.filter()
|
||||||
|
|
|
||||||
|
|
@ -5,5 +5,5 @@ import androidx.recyclerview.widget.RecyclerView
|
||||||
|
|
||||||
abstract class BindableViewHolder<T>(itemView: View) : RecyclerView.ViewHolder(itemView) {
|
abstract class BindableViewHolder<T>(itemView: View) : RecyclerView.ViewHolder(itemView) {
|
||||||
|
|
||||||
abstract fun bind(data: T, position: Int)
|
abstract fun bind(data: T, position: Int, displayMode: String)
|
||||||
}
|
}
|
||||||
|
|
@ -104,7 +104,7 @@ abstract class BaseTaskViewHolder constructor(itemView: View, var scoreTaskFunc:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun bind(data: Task, position: Int) {
|
override fun bind(data: Task, position: Int, displayMode: String) {
|
||||||
task = data
|
task = data
|
||||||
itemView.setBackgroundResource(R.color.white)
|
itemView.setBackgroundResource(R.color.white)
|
||||||
|
|
||||||
|
|
@ -134,40 +134,53 @@ abstract class BaseTaskViewHolder constructor(itemView: View, var scoreTaskFunc:
|
||||||
titleTextView.setParsedMarkdown(parsedText)
|
titleTextView.setParsedMarkdown(parsedText)
|
||||||
}, RxErrorHandler.handleEmptyError())
|
}, RxErrorHandler.handleEmptyError())
|
||||||
}
|
}
|
||||||
if (data.parsedNotes != null) {
|
if (displayMode != "minimal") {
|
||||||
notesTextView?.setParsedMarkdown(data.parsedText)
|
if (data.parsedNotes != null) {
|
||||||
} else {
|
notesTextView?.setParsedMarkdown(data.parsedText)
|
||||||
notesTextView?.text = data.notes
|
} else {
|
||||||
notesTextView?.setSpannableFactory(NoCopySpannableFactory.getInstance());
|
notesTextView?.text = data.notes
|
||||||
data.notes?.let {notes ->
|
notesTextView?.setSpannableFactory(NoCopySpannableFactory.getInstance());
|
||||||
if (notes.isEmpty()) {
|
data.notes?.let {notes ->
|
||||||
return@let
|
if (notes.isEmpty()) {
|
||||||
|
return@let
|
||||||
|
}
|
||||||
|
Single.just(notes)
|
||||||
|
.map { MarkdownParser.parseMarkdown(it) }
|
||||||
|
.subscribeOn(Schedulers.io())
|
||||||
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
|
.subscribe(Consumer { parsedNotes ->
|
||||||
|
notesTextView?.text = parsedNotes
|
||||||
|
notesTextView?.setParsedMarkdown(parsedNotes)
|
||||||
|
}, RxErrorHandler.handleEmptyError())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Single.just(notes)
|
} else {
|
||||||
.map { MarkdownParser.parseMarkdown(it) }
|
notesTextView?.visibility = View.GONE
|
||||||
.subscribeOn(Schedulers.io())
|
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
|
||||||
.subscribe(Consumer { parsedNotes ->
|
|
||||||
notesTextView?.text = parsedNotes
|
|
||||||
notesTextView?.setParsedMarkdown(parsedNotes)
|
|
||||||
}, RxErrorHandler.handleEmptyError())
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
titleTextView.text = data.text
|
titleTextView.text = data.text
|
||||||
notesTextView?.text = data.notes
|
if (displayMode != "minimal") {
|
||||||
|
notesTextView?.text = data.notes
|
||||||
|
} else {
|
||||||
|
notesTextView?.visibility = View.GONE
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rightBorderView?.setBackgroundResource(data.lightTaskColor)
|
rightBorderView?.setBackgroundResource(data.lightTaskColor)
|
||||||
iconViewReminder?.visibility = if (data.reminders?.size ?: 0 > 0) View.VISIBLE else View.GONE
|
if (displayMode == "standard") {
|
||||||
iconViewTag?.visibility = if (data.tags?.size ?: 0 > 0) View.VISIBLE else View.GONE
|
iconViewReminder?.visibility = if (data.reminders?.size ?: 0 > 0) View.VISIBLE else View.GONE
|
||||||
|
iconViewTag?.visibility = if (data.tags?.size ?: 0 > 0) View.VISIBLE else View.GONE
|
||||||
|
|
||||||
iconViewChallenge?.visibility = if (task?.challengeID != null) View.VISIBLE else View.GONE
|
iconViewChallenge?.visibility = if (task?.challengeID != null) View.VISIBLE else View.GONE
|
||||||
|
|
||||||
configureSpecialTaskTextView(data)
|
configureSpecialTaskTextView(data)
|
||||||
|
|
||||||
|
taskIconWrapper?.visibility = if (taskIconWrapperIsVisible) View.VISIBLE else View.GONE
|
||||||
|
} else {
|
||||||
|
taskIconWrapper?.visibility = View.GONE
|
||||||
|
}
|
||||||
|
|
||||||
taskIconWrapper?.visibility = if (taskIconWrapperIsVisible) View.VISIBLE else View.GONE
|
|
||||||
|
|
||||||
if (data.isPendingApproval) {
|
if (data.isPendingApproval) {
|
||||||
approvalRequiredTextView?.visibility = View.VISIBLE
|
approvalRequiredTextView?.visibility = View.VISIBLE
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@ abstract class ChecklistedViewHolder(itemView: View, scoreTaskFunc: ((Task, Task
|
||||||
expandCheckboxTouchArea(checkboxHolder, checkbox)
|
expandCheckboxTouchArea(checkboxHolder, checkbox)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun bind(newTask: Task, position: Int) {
|
override fun bind(newTask: Task, position: Int, displayMode: String) {
|
||||||
var completed = newTask.completed
|
var completed = newTask.completed
|
||||||
if (newTask.isPendingApproval) {
|
if (newTask.isPendingApproval) {
|
||||||
completed = false
|
completed = false
|
||||||
|
|
@ -66,7 +66,7 @@ abstract class ChecklistedViewHolder(itemView: View, scoreTaskFunc: ((Task, Task
|
||||||
} else {
|
} else {
|
||||||
this.rightBorderView?.setBackgroundColor(this.taskGray)
|
this.rightBorderView?.setBackgroundColor(this.taskGray)
|
||||||
}
|
}
|
||||||
super.bind(newTask, position)
|
super.bind(newTask, position, displayMode)
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract fun shouldDisplayAsActive(newTask: Task): Boolean
|
abstract fun shouldDisplayAsActive(newTask: Task): Boolean
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ class DailyViewHolder(itemView: View, scoreTaskFunc: ((Task, TaskDirection) -> U
|
||||||
return isVisible
|
return isVisible
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun bind(newTask: Task, position: Int) {
|
override fun bind(newTask: Task, position: Int, displayMode: String) {
|
||||||
this.task = newTask
|
this.task = newTask
|
||||||
if (newTask.isChecklistDisplayActive) {
|
if (newTask.isChecklistDisplayActive) {
|
||||||
this.checklistIndicatorWrapper.setBackgroundResource(newTask.lightTaskColor)
|
this.checklistIndicatorWrapper.setBackgroundResource(newTask.lightTaskColor)
|
||||||
|
|
@ -55,7 +55,7 @@ class DailyViewHolder(itemView: View, scoreTaskFunc: ((Task, TaskDirection) -> U
|
||||||
reminderTextView.text = reminderString
|
reminderTextView.text = reminderString
|
||||||
}
|
}
|
||||||
|
|
||||||
super.bind(newTask, position)
|
super.bind(newTask, position, displayMode)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun shouldDisplayAsActive(newTask: Task): Boolean {
|
override fun shouldDisplayAsActive(newTask: Task): Boolean {
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@ class HabitViewHolder(itemView: View, scoreTaskFunc: ((Task, TaskDirection) -> U
|
||||||
btnMinus.setOnClickListener { onMinusButtonClicked() }
|
btnMinus.setOnClickListener { onMinusButtonClicked() }
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun bind(data: Task, position: Int) {
|
override fun bind(data: Task, position: Int, displayMode: String) {
|
||||||
this.task = data
|
this.task = data
|
||||||
if (data.up == true) {
|
if (data.up == true) {
|
||||||
this.btnPlusWrapper.setBackgroundResource(data.lightTaskColor)
|
this.btnPlusWrapper.setBackgroundResource(data.lightTaskColor)
|
||||||
|
|
@ -82,7 +82,7 @@ class HabitViewHolder(itemView: View, scoreTaskFunc: ((Task, TaskDirection) -> U
|
||||||
} else {
|
} else {
|
||||||
streakTextView.visibility = View.GONE
|
streakTextView.visibility = View.GONE
|
||||||
}
|
}
|
||||||
super.bind(data, position)
|
super.bind(data, position, displayMode)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun onPlusButtonClicked() {
|
private fun onPlusButtonClicked() {
|
||||||
|
|
|
||||||
|
|
@ -63,9 +63,9 @@ class RewardViewHolder(itemView: View, scoreTaskFunc: ((Task, TaskDirection) ->
|
||||||
this.buyButton.isEnabled = !taskActionsDisabled
|
this.buyButton.isEnabled = !taskActionsDisabled
|
||||||
}
|
}
|
||||||
|
|
||||||
fun bind(reward: Task, position: Int, canBuy: Boolean) {
|
fun bind(reward: Task, position: Int, canBuy: Boolean, displayMode: String) {
|
||||||
this.task = reward
|
this.task = reward
|
||||||
super.bind(reward, position)
|
super.bind(reward, position, displayMode)
|
||||||
this.priceLabel.text = NumberAbbreviator.abbreviate(itemView.context, this.task?.value ?: 0.0)
|
this.priceLabel.text = NumberAbbreviator.abbreviate(itemView.context, this.task?.value ?: 0.0)
|
||||||
|
|
||||||
if (canBuy) {
|
if (canBuy) {
|
||||||
|
|
|
||||||
|
|
@ -12,14 +12,14 @@ class TodoViewHolder(itemView: View, scoreTaskFunc: ((Task, TaskDirection) -> Un
|
||||||
|
|
||||||
private val dateFormatter: DateFormat = android.text.format.DateFormat.getDateFormat(context)
|
private val dateFormatter: DateFormat = android.text.format.DateFormat.getDateFormat(context)
|
||||||
|
|
||||||
override fun bind(newTask: Task, position: Int) {
|
override fun bind(newTask: Task, position: Int, displayMode: String) {
|
||||||
this.task = newTask
|
this.task = newTask
|
||||||
if (newTask.completed) {
|
if (newTask.completed) {
|
||||||
checklistIndicatorWrapper.setBackgroundColor(taskGray)
|
checklistIndicatorWrapper.setBackgroundColor(taskGray)
|
||||||
} else {
|
} else {
|
||||||
checklistIndicatorWrapper.setBackgroundColor(newTask.lightTaskColor)
|
checklistIndicatorWrapper.setBackgroundColor(newTask.lightTaskColor)
|
||||||
}
|
}
|
||||||
super.bind(newTask, position)
|
super.bind(newTask, position, displayMode)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun configureSpecialTaskTextView(task: Task) {
|
override fun configureSpecialTaskTextView(task: Task) {
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,11 @@ or alternatively using `brew cask install fastlane`
|
||||||
fastlane android test
|
fastlane android test
|
||||||
```
|
```
|
||||||
Runs all the tests
|
Runs all the tests
|
||||||
|
### android staff
|
||||||
|
```
|
||||||
|
fastlane android staff
|
||||||
|
```
|
||||||
|
Submit a new Staff Build to Google Play
|
||||||
### android alpha
|
### android alpha
|
||||||
```
|
```
|
||||||
fastlane android alpha
|
fastlane android alpha
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue