diff --git a/Habitica/AndroidManifest.xml b/Habitica/AndroidManifest.xml index eba08a5e5..fd67718c7 100644 --- a/Habitica/AndroidManifest.xml +++ b/Habitica/AndroidManifest.xml @@ -85,6 +85,9 @@ android:label="@string/LoginActivityName" android:screenOrientation="portrait" android:windowSoftInputMode="adjustResize"> + + android:text="@string/onboarding_tasks" + style="@style/Body1" + android:textColor="@color/gray_50"/> diff --git a/Habitica/res/layout/dialog_achievement_detail.xml b/Habitica/res/layout/dialog_achievement_detail.xml index 111b05840..c7ebc2223 100644 --- a/Habitica/res/layout/dialog_achievement_detail.xml +++ b/Habitica/res/layout/dialog_achievement_detail.xml @@ -1,6 +1,8 @@ Add a task for something you would like to accomplish this week Check off any of your tasks to earn rewards Head over to your Items and try combining a Hatching Potion and Egg - There are many different types of food, but pets can be picky + Complete tasks to get food! You can feed it to your pet from Pets & Mounts Equipment is a way to customize your avatar and improve your stats Created your first task Completed a task diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/AttributeSet-Extentions.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/AttributeSet-Extentions.kt index d5ed2213c..43d18d231 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/AttributeSet-Extentions.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/extensions/AttributeSet-Extentions.kt @@ -4,5 +4,5 @@ import android.content.Context import android.content.res.TypedArray import android.util.AttributeSet -fun AttributeSet.styledAttributes(context: Context?, style: IntArray?): TypedArray? = +fun AttributeSet.styledAttributes(context: Context?, style: IntArray): TypedArray? = context?.theme?.obtainStyledAttributes(this, style, 0, 0) \ No newline at end of file diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/SignInWebViewDialogFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/SignInWebViewDialogFragment.kt index b500877b9..eb596f164 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/SignInWebViewDialogFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/SignInWebViewDialogFragment.kt @@ -48,21 +48,23 @@ class SignInWebViewDialogFragment : DialogFragment() { ): View? { super.onCreateView(inflater, container, savedInstanceState) - val webView = WebView(context).apply { - settings.apply { - javaScriptEnabled = true - javaScriptCanOpenWindowsAutomatically = true + val webView = context?.let { + WebView(it).apply { + settings.apply { + javaScriptEnabled = true + javaScriptCanOpenWindowsAutomatically = true + } } } - webView.webViewClient = SignInWebViewClient(authenticationAttempt, ::onCallback) + webView?.webViewClient = SignInWebViewClient(authenticationAttempt, ::onCallback) if (savedInstanceState != null) { savedInstanceState.getBundle(WEB_VIEW_KEY)?.run { - webView.restoreState(this) + webView?.restoreState(this) } } else { - webView.loadUrl(authenticationAttempt.authenticationUri) + webView?.loadUrl(authenticationAttempt.authenticationUri) } return webView diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/AdventureGuideActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/AdventureGuideActivity.kt index 6d7de1dcd..8d1aeda1e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/AdventureGuideActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/AdventureGuideActivity.kt @@ -2,7 +2,9 @@ package com.habitrpg.android.habitica.ui.activities import android.graphics.Paint import android.os.Bundle +import android.view.MenuItem import android.view.View +import androidx.core.app.NavUtils import androidx.core.content.ContextCompat import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.components.UserComponent @@ -15,6 +17,7 @@ import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils import io.reactivex.functions.Consumer import javax.inject.Inject + class AdventureGuideActivity : BaseActivity() { private lateinit var binding: ActivityAdventureGuideBinding @@ -59,6 +62,16 @@ class AdventureGuideActivity : BaseActivity() { ) } + override fun onOptionsItemSelected(item: MenuItem): Boolean { + return when (item.itemId) { + android.R.id.home -> { + NavUtils.navigateUpFromSameTask(this) + true + } + else -> super.onOptionsItemSelected(item) + } + } + override fun onStart() { super.onStart() compositeSubscription.add(userRepository.getUser().subscribe(Consumer { @@ -74,7 +87,7 @@ class AdventureGuideActivity : BaseActivity() { if (completed > 0) { binding.progressTextview.text = getString(R.string.percent_completed, ((completed / achievements.size.toFloat()) * 100).toInt()) - binding.progressTextview.setTextColor(ContextCompat.getColor(this, R.color.yellow_10)) + binding.progressTextview.setTextColor(ContextCompat.getColor(this, R.color.yellow_5)) } binding.achievementContainer.removeAllViews() diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ClassSelectionActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ClassSelectionActivity.kt index 3544a903f..1ea1ea435 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ClassSelectionActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ClassSelectionActivity.kt @@ -119,7 +119,7 @@ class ClassSelectionActivity : BaseActivity(), Consumer { return true } - override fun onOptionsItemSelected(item: MenuItem?): Boolean { + override fun onOptionsItemSelected(item: MenuItem): Boolean { when (item?.itemId) { R.id.opt_out -> optOutSelected() } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt index d222ea20f..7dc8c634a 100755 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt @@ -253,7 +253,7 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction { drawerToggle?.syncState() } - override fun onRestoreInstanceState(savedInstanceState: Bundle?) { + override fun onRestoreInstanceState(savedInstanceState: Bundle) { super.onRestoreInstanceState(savedInstanceState) Log.e("RESTORED:", savedInstanceState.toString()) } @@ -391,20 +391,20 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction { if (resultCode == NOTIFICATION_CLICK && data?.hasExtra("notificationId") == true) { notificationsViewModel?.click( - data.getStringExtra("notificationId"), + data.getStringExtra("notificationId") ?: "", MainNavigationController ) } if (resultCode == NOTIFICATION_ACCEPT && data?.hasExtra("notificationId") == true) { notificationsViewModel?.accept( - data.getStringExtra("notificationId") + data.getStringExtra("notificationId") ?: "" ) } if (resultCode == NOTIFICATION_REJECT && data?.hasExtra("notificationId") == true) { notificationsViewModel?.reject( - data.getStringExtra("notificationId") + data.getStringExtra("notificationId") ?: "" ) } PurchaseHandler.findForActivity(this)?.onResult(requestCode, resultCode, data) @@ -690,6 +690,7 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction { @Subscribe fun showAchievementDialog(event: ShowAchievementDialog) { + retrieveUser() compositeSubscription.add(Completable.complete() .observeOn(AndroidSchedulers.mainThread()) .subscribe(Action { @@ -703,6 +704,7 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction { @Subscribe fun showFirstDropDialog(event: ShowFirstDropDialog) { + retrieveUser() compositeSubscription.add(Completable.complete() .observeOn(AndroidSchedulers.mainThread()) .subscribe(Action { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.kt index f3732d65c..b6b579fa5 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.kt @@ -220,7 +220,7 @@ class TaskFormActivity : BaseActivity() { return true } - override fun onOptionsItemSelected(item: MenuItem?): Boolean { + override fun onOptionsItemSelected(item: MenuItem): Boolean { when (item?.itemId) { R.id.action_save -> saveTask() R.id.action_delete -> deleteTask() diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/NavigationDrawerAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/NavigationDrawerAdapter.kt index 9bd59abe8..4a36f10f9 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/NavigationDrawerAdapter.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/NavigationDrawerAdapter.kt @@ -70,19 +70,23 @@ class NavigationDrawerAdapter(tintColor: Int, backgroundTintColor: Int): Recycle override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { val drawerItem = getItem(position) - if (getItemViewType(position) == 0) { - val itemHolder = holder as? DrawerItemViewHolder - itemHolder?.tintColor = tintColor - itemHolder?.backgroundTintColor = backgroundTintColor - itemHolder?.bind(drawerItem, drawerItem.transitionId == selectedItem) - itemHolder?.itemView?.setOnClickListener { itemSelectedEvents.onNext(drawerItem) } - } else if (getItemViewType(position) == 1) { - (holder as? SectionHeaderViewHolder)?.backgroundTintColor = backgroundTintColor - (holder as? SectionHeaderViewHolder)?.bind(drawerItem) - } else if (getItemViewType(position) == 4) { - drawerItem.user?.let { (holder.itemView as? AdventureGuideMenuBanner)?.updateData(it) } - holder.itemView.setOnClickListener { itemSelectedEvents.onNext(drawerItem) } + when { + getItemViewType(position) == 0 -> { + val itemHolder = holder as? DrawerItemViewHolder + itemHolder?.tintColor = tintColor + itemHolder?.backgroundTintColor = backgroundTintColor + itemHolder?.bind(drawerItem, drawerItem.transitionId == selectedItem) + itemHolder?.itemView?.setOnClickListener { itemSelectedEvents.onNext(drawerItem) } + } + getItemViewType(position) == 1 -> { + (holder as? SectionHeaderViewHolder)?.backgroundTintColor = backgroundTintColor + (holder as? SectionHeaderViewHolder)?.bind(drawerItem) + } + getItemViewType(position) == 4 -> { + drawerItem.user?.let { (holder.itemView as? AdventureGuideMenuBanner)?.updateData(it) } + holder.itemView.setOnClickListener { itemSelectedEvents.onNext(drawerItem) } + } } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/AboutFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/AboutFragment.kt index c34f920ab..7eb5ba152 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/AboutFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/AboutFragment.kt @@ -90,7 +90,7 @@ class AboutFragment : BaseMainFragment() { private val versionName: String by lazy { try { @Suppress("DEPRECATION") - activity?.packageManager?.getPackageInfo(activity?.packageName, 0)?.versionName ?: "" + activity?.packageManager?.getPackageInfo(activity?.packageName ?: "", 0)?.versionName ?: "" } catch (e: PackageManager.NameNotFoundException) { "" } @@ -99,7 +99,7 @@ class AboutFragment : BaseMainFragment() { private val versionCode: Int by lazy { try { @Suppress("DEPRECATION") - activity?.packageManager?.getPackageInfo(activity?.packageName, 0)?.versionCode ?: 0 + activity?.packageManager?.getPackageInfo(activity?.packageName ?: "", 0)?.versionCode ?: 0 } catch (e: PackageManager.NameNotFoundException) { 0 } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/support/BugFixFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/support/BugFixFragment.kt index 0ef545184..fa687803f 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/support/BugFixFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/support/BugFixFragment.kt @@ -57,7 +57,7 @@ class BugFixFragment: BaseMainFragment() { private val versionName: String by lazy { try { @Suppress("DEPRECATION") - activity?.packageManager?.getPackageInfo(activity?.packageName, 0)?.versionName ?: "" + activity?.packageManager?.getPackageInfo(activity?.packageName ?: "", 0)?.versionName ?: "" } catch (e: PackageManager.NameNotFoundException) { "" } @@ -66,7 +66,7 @@ class BugFixFragment: BaseMainFragment() { private val versionCode: Int by lazy { try { @Suppress("DEPRECATION") - activity?.packageManager?.getPackageInfo(activity?.packageName, 0)?.versionCode ?: 0 + activity?.packageManager?.getPackageInfo(activity?.packageName ?: "", 0)?.versionCode ?: 0 } catch (e: PackageManager.NameNotFoundException) { 0 } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/support/SupportMainFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/support/SupportMainFragment.kt index 384dab4ff..5605177de 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/support/SupportMainFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/support/SupportMainFragment.kt @@ -75,7 +75,7 @@ class SupportMainFragment : BaseMainFragment() { private val versionName: String by lazy { try { @Suppress("DEPRECATION") - activity?.packageManager?.getPackageInfo(activity?.packageName, 0)?.versionName ?: "" + activity?.packageManager?.getPackageInfo(activity?.packageName ?: "", 0)?.versionName ?: "" } catch (e: PackageManager.NameNotFoundException) { "" } @@ -84,7 +84,7 @@ class SupportMainFragment : BaseMainFragment() { private val versionCode: Int by lazy { try { @Suppress("DEPRECATION") - activity?.packageManager?.getPackageInfo(activity?.packageName, 0)?.versionCode ?: 0 + activity?.packageManager?.getPackageInfo(activity?.packageName ?: "", 0)?.versionCode ?: 0 } catch (e: PackageManager.NameNotFoundException) { 0 } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/RewardsRecyclerviewFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/RewardsRecyclerviewFragment.kt index 319abed3f..6fe7dab3e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/RewardsRecyclerviewFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/RewardsRecyclerviewFragment.kt @@ -99,7 +99,7 @@ class RewardsRecyclerviewFragment : TaskRecyclerViewFragment() { userRepository.useSkill(user, selectedCard?.key ?: "", "member", - data.getStringExtra("member_id")) + data.getStringExtra("member_id") ?: "") .subscribeWithErrorHandler(Consumer { val activity = (activity as? MainActivity) ?: return@Consumer HabiticaSnackbar.showSnackbar(activity.snackbarContainer, diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/BaseTaskViewHolder.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/BaseTaskViewHolder.kt index 06a94adc6..3bfc591af 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/BaseTaskViewHolder.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/BaseTaskViewHolder.kt @@ -83,7 +83,7 @@ abstract class BaseTaskViewHolder constructor(itemView: View, var scoreTaskFunc: notesTextView?.addEllipsesListener(object : EllipsisTextView.EllipsisListener { override fun ellipsisStateChanged(ellipses: Boolean) { GlobalScope.launch(Dispatchers.Main.immediate) { - if (ellipses) { + if (ellipses && notesTextView?.maxLines != 3) { notesTextView?.maxLines = 3 } expandNotesButton?.visibility = if (ellipses || notesExpanded) View.VISIBLE else View.GONE @@ -123,7 +123,7 @@ abstract class BaseTaskViewHolder constructor(itemView: View, var scoreTaskFunc: titleTextView.setParsedMarkdown(data.parsedText) } else { titleTextView.text = data.text - titleTextView.setSpannableFactory(NoCopySpannableFactory.getInstance()); + titleTextView.setSpannableFactory(NoCopySpannableFactory.getInstance()) if (data.text.isNotEmpty()) { Single.just(data.text) .map { MarkdownParser.parseMarkdown(it) } @@ -139,7 +139,7 @@ abstract class BaseTaskViewHolder constructor(itemView: View, var scoreTaskFunc: notesTextView?.setParsedMarkdown(data.parsedText) } else { notesTextView?.text = data.notes - notesTextView?.setSpannableFactory(NoCopySpannableFactory.getInstance()); + notesTextView?.setSpannableFactory(NoCopySpannableFactory.getInstance()) data.notes?.let {notes -> if (notes.isEmpty()) { return@let diff --git a/shared/build.gradle b/shared/build.gradle index 3b55245a7..444a6ac6c 100644 --- a/shared/build.gradle +++ b/shared/build.gradle @@ -3,12 +3,12 @@ apply plugin: 'kotlin-multiplatform' apply plugin: 'kotlin-kapt' android { - compileSdkVersion 29 + compileSdkVersion 30 defaultConfig { minSdkVersion 21 - targetSdkVersion 29 + targetSdkVersion 30 versionCode 1 versionName "1.0" }