Fix AG design issues

This commit is contained in:
Phillip Thelen 2020-06-15 18:05:32 +02:00
parent b1c393b168
commit bc2db020cd
22 changed files with 92 additions and 59 deletions

View file

@ -85,6 +85,9 @@
android:label="@string/LoginActivityName"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.habitrpg.android.habitica.ui.activities.MainActivity" />
</activity>
<activity
android:name=".ui.activities.IntroActivity"

View file

@ -145,7 +145,7 @@ dependencies {
}
android {
compileSdkVersion 29
compileSdkVersion 30
buildToolsVersion '29.0.3'
testOptions {
unitTests {

View file

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -24,8 +25,9 @@
android:layout_height="66dp">
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/achievement_icon"
android:layout_width="48dp"
android:layout_height="52dp"
android:layout_width="52dp"
android:layout_height="56dp"
app:actualImageScaleType="fitCenter"
android:layout_gravity="center"/>
</FrameLayout>
<TextView

View file

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -12,8 +13,9 @@
android:layout_height="86dp">
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/achievement_icon"
android:layout_width="48dp"
android:layout_height="52dp"
android:layout_width="52dp"
android:layout_height="56dp"
app:actualImageScaleType="fitCenter"
android:layout_centerInParent="true"/>
<TextView
android:id="@+id/achievement_count_label"

View file

@ -53,12 +53,13 @@
android:gravity="center_horizontal"
android:text="@string/adventure_guide_description"
style="@style/Body2"
android:textColor="@color/gray_50"
android:layout_marginStart="30dp"
android:layout_marginEnd="30dp"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/spacing_large"
android:layout_marginTop="24dp"
android:layout_marginStart="30dp"
android:layout_marginEnd="30dp">
<TextView
@ -85,8 +86,10 @@
android:layout_height="wrap_content"
android:layout_marginStart="30dp"
android:layout_marginEnd="30dp"
android:layout_marginBottom="@dimen/spacing_medium"
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:progressBackgroundTint="@color/gray_600"
android:progressBackgroundTintMode="src_in"
android:progressTint="@color/yellow_50"/>
<LinearLayout

View file

@ -9,18 +9,17 @@
android:id="@+id/icon_view"
android:layout_width="52dp"
android:layout_height="56dp"
android:scaleType="center"
app:actualImageScaleType="fitCenter"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:layout_marginTop="6dp"
android:layout_marginBottom="6dp"
android:layout_marginStart="30dp"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_gravity="center_vertical"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:layout_marginTop="6dp"
android:layout_marginBottom="6dp"
android:layout_marginStart="17dp"
android:layout_marginEnd="30dp">
<TextView

View file

@ -20,16 +20,17 @@
android:layout_height="match_parent"
android:layout_marginStart="16dp"
android:layout_marginTop="12dp"
android:layout_marginEnd="8dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="12dp"
android:layout_weight="1"
android:orientation="vertical">
<TextView
style="@style/Caption1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/onboarding_tasks" />
android:text="@string/onboarding_tasks"
style="@style/Body1"
android:textColor="@color/gray_50"/>
<LinearLayout
android:layout_width="match_parent"
@ -73,7 +74,7 @@
android:background="@drawable/adventure_guide_menu_card_gray"
android:src="@drawable/ic_keyboard_arrow_right"
android:scaleType="center"
android:alpha="0.25"
android:alpha="0.4"
/>
</FrameLayout>
</LinearLayout>

View file

@ -1,6 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal">
<LinearLayout
@ -15,9 +17,9 @@
android:src="@drawable/sparkles_left" />
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/icon_view"
android:layout_width="48dp"
android:layout_height="52dp"
android:scaleType="center"
android:layout_width="52dp"
android:layout_height="56dp"
app:actualImageScaleType="fitCenter"
android:layout_marginStart="20dp"
android:layout_marginEnd="20dp" />
<ImageView

View file

@ -1033,7 +1033,7 @@
<string name="create_task_description">Add a task for something you would like to accomplish this week</string>
<string name="complete_task_description">Check off any of your tasks to earn rewards</string>
<string name="hatch_pet_description">Head over to your Items and try combining a Hatching Potion and Egg</string>
<string name="feedPet_description">There are many different types of food, but pets can be picky</string>
<string name="feedPet_description">Complete tasks to get food! You can feed it to your pet from Pets &amp; Mounts</string>
<string name="purchase_equipment_description">Equipment is a way to customize your avatar and improve your stats</string>
<string name="createdTaskTitle">Created your first task</string>
<string name="completedTaskTitle">Completed a task</string>

View file

@ -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)

View file

@ -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

View file

@ -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()

View file

@ -119,7 +119,7 @@ class ClassSelectionActivity : BaseActivity(), Consumer<User> {
return true
}
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item?.itemId) {
R.id.opt_out -> optOutSelected()
}

View file

@ -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 {

View file

@ -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()

View file

@ -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) }
}
}
}

View file

@ -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
}

View file

@ -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
}

View file

@ -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
}

View file

@ -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,

View file

@ -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

View file

@ -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"
}