Merge branch 'develop' of https://github.com/HabitRPG/habitica-android into create_challenges
Conflicts: Habitica/res/values/strings.xml Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaBaseApplication.java
|
|
@ -1,6 +1,6 @@
|
|||
language: android
|
||||
jdk: oraclejdk8
|
||||
sudo: required
|
||||
udo: required
|
||||
addons:
|
||||
apt:
|
||||
sources:
|
||||
|
|
@ -62,4 +62,4 @@ env:
|
|||
- DISABLE_REQUEST_LOGGING=true
|
||||
matrix:
|
||||
- TEST="assembleDebug -PdisablePreDex"
|
||||
- TEST="testDebugUnitTest -PdisablePreDex --stacktrace --info" REQUIRES_SERVER=true
|
||||
- TEST="testProdDebugUnitTest -PdisablePreDex --stacktrace" REQUIRES_SERVER=true
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
package="com.habitrpg.android.habitica"
|
||||
android:versionCode="165"
|
||||
android:versionCode="168"
|
||||
android:versionName="1.0"
|
||||
android:screenOrientation="portrait"
|
||||
android:installLocation="auto" >
|
||||
|
|
|
|||
1
Habitica/assets/migrations/Habitica/35.sql
Normal file
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE Preferences ADD COLUMN dailyDueDefaultView bool;
|
||||
|
|
@ -12,7 +12,7 @@ buildscript {
|
|||
jcenter()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'io.fabric.tools:gradle:1.21.5'
|
||||
classpath 'io.fabric.tools:gradle:1.21.6'
|
||||
classpath 'me.tatarka:gradle-retrolambda:3.3.1'
|
||||
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
|
||||
classpath('com.noveogroup.android:check:1.2.3') {
|
||||
|
|
@ -61,8 +61,8 @@ dependencies {
|
|||
apt 'com.jakewharton:butterknife-compiler:8.5.1'
|
||||
|
||||
//Dependency Injection
|
||||
compile 'com.google.dagger:dagger:2.8'
|
||||
apt 'com.google.dagger:dagger-compiler:2.8'
|
||||
compile 'com.google.dagger:dagger:2.10'
|
||||
apt 'com.google.dagger:dagger-compiler:2.10'
|
||||
provided 'org.glassfish:javax.annotation:10.0-b28'
|
||||
//App Compatibility and Material Design
|
||||
compile('com.mikepenz:materialdrawer:5.8.3@aar') {
|
||||
|
|
@ -78,13 +78,13 @@ dependencies {
|
|||
compile 'com.github.kenglxn.QRGen:android:2.2.0'
|
||||
|
||||
// Emojis
|
||||
compile 'com.github.viirus:emoji-lib:0.0.3.2'
|
||||
compile 'com.github.viirus:emoji-lib:0.0.3.4'
|
||||
|
||||
// Markdown
|
||||
compile 'com.commonsware.cwac:anddown:0.3.0'
|
||||
|
||||
// About View for all dependent Libraries, we are using
|
||||
compile('com.mikepenz:aboutlibraries:5.7.1@aar') {
|
||||
compile('com.mikepenz:aboutlibraries:5.9.4@aar') {
|
||||
transitive = true
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -237,7 +237,6 @@ Severity: EASY
|
|||
<!-- See http://checkstyle.sourceforge.net/config_misc.html -->
|
||||
<module name="ArrayTypeStyle" />
|
||||
<module name="CommentsIndentation"/>
|
||||
<module name="Indentation"/>
|
||||
<module name="OuterTypeFilename"/>
|
||||
<module name="TodoComment">
|
||||
<property name="format" value="(?i)\s+TODO\s+" />
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 19 KiB |
BIN
Habitica/res/drawable-hdpi/justin_textbox.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
BIN
Habitica/res/drawable-mdpi/justin_textbox.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
BIN
Habitica/res/drawable-xxhdpi/justin_textbox.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
Habitica/res/drawable-xxhdpi/npc_justin_only.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
5
Habitica/res/drawable/badge_bg.xml
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
|
||||
<corners android:radius="3dp" />
|
||||
<solid android:color="@color/brand_400" />
|
||||
</shape>
|
||||
4
Habitica/res/drawable/ic_check_white_18dp.xml
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="18dp" android:viewportHeight="24.0" android:viewportWidth="24.0" android:width="18dp">
|
||||
<path android:fillColor="#FFFFFF" android:pathData="M9,16.17L4.83,12l-1.42,1.41L9,19 21,7l-1.41,-1.41z"/>
|
||||
</vector>
|
||||
|
|
@ -1,8 +1,8 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:top="5dp" android:left="5dp" android:right="5dp" android:bottom="5dp">
|
||||
<item android:top="4dp" android:left="4dp" android:right="4dp" android:bottom="4dp">
|
||||
<shape android:shape="oval">
|
||||
<size android:height="48dp" android:width="48dp" />
|
||||
<size android:height="50dp" android:width="50dp" />
|
||||
<solid android:color="@color/white" />
|
||||
</shape>
|
||||
</item>
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
<item>
|
||||
<shape android:shape="oval">
|
||||
<padding android:bottom="5dp" android:left="5dp" android:right="5dp" android:top="5dp" />
|
||||
<padding android:bottom="4dp" android:left="4dp" android:right="4dp" android:top="4dp" />
|
||||
<solid android:color="@color/brand_400" />
|
||||
</shape>
|
||||
</item>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
|
||||
<size android:width="36dp" android:height="36dp" />
|
||||
<size android:width="40dp" android:height="40dp" />
|
||||
<solid android:color="@color/white" />
|
||||
</shape>
|
||||
5
Habitica/res/drawable/setup_customization_flower_bg.xml
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
|
||||
<stroke android:color="@color/days_gray" android:width="2dp" />
|
||||
<size android:height="50dp" android:width="50dp" />
|
||||
</shape>
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
|
||||
<stroke android:color="@color/brand_400" android:width="3dp" />
|
||||
<size android:height="50dp" android:width="50dp" />
|
||||
</shape>
|
||||
5
Habitica/res/drawable/white_rounded_bg.xml
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
|
||||
<corners android:radius="5dp" />
|
||||
<solid android:color="@color/white" />
|
||||
</shape>
|
||||
|
|
@ -1,96 +1,107 @@
|
|||
<android.support.design.widget.CoordinatorLayout 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:id="@+id/overlayFrameLayout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:elevation="0dp"
|
||||
tools:context=".ui.activities.MainActivity"
|
||||
android:fitsSystemWindows="false">
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/fragment_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
|
||||
|
||||
<android.support.design.widget.AppBarLayout
|
||||
android:id="@+id/appbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<android.support.design.widget.CollapsingToolbarLayout
|
||||
android:id="@+id/collapsing_toolbar"
|
||||
<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">
|
||||
<android.support.design.widget.CoordinatorLayout
|
||||
android:id="@+id/coordinatorLayout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:titleEnabled="false"
|
||||
app:contentScrim="?attr/colorPrimary"
|
||||
app:expandedTitleMarginEnd="?attr/actionBarSize"
|
||||
app:expandedTitleMarginStart="0dp"
|
||||
app:layout_scrollFlags="scroll|exitUntilCollapsed">
|
||||
android:layout_height="match_parent"
|
||||
tools:context=".ui.activities.MainActivity"
|
||||
android:fitsSystemWindows="false">
|
||||
|
||||
<include
|
||||
android:id="@+id/avatar_with_bars"
|
||||
layout="@layout/avatar_with_bars"
|
||||
<FrameLayout
|
||||
android:id="@+id/fragment_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
|
||||
|
||||
<android.support.design.widget.AppBarLayout
|
||||
android:id="@+id/appbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<android.support.design.widget.CollapsingToolbarLayout
|
||||
android:id="@+id/collapsing_toolbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:titleEnabled="false"
|
||||
app:contentScrim="?attr/colorPrimary"
|
||||
app:expandedTitleMarginEnd="?attr/actionBarSize"
|
||||
app:expandedTitleMarginStart="0dp"
|
||||
app:layout_scrollFlags="scroll|exitUntilCollapsed">
|
||||
|
||||
<include
|
||||
android:id="@+id/avatar_with_bars"
|
||||
layout="@layout/avatar_with_bars"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="?attr/actionBarSize"
|
||||
app:layout_collapseMode="parallax" />
|
||||
|
||||
<android.support.v7.widget.Toolbar
|
||||
android:id="@+id/toolbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:minHeight="?attr/actionBarSize"
|
||||
android:theme="@style/Toolbar"
|
||||
app:layout_collapseMode="pin"
|
||||
app:popupTheme="@style/Theme.AppCompat.Light"
|
||||
android:fitsSystemWindows="true"/>
|
||||
</android.support.design.widget.CollapsingToolbarLayout>
|
||||
|
||||
<android.support.design.widget.TabLayout
|
||||
android:id="@+id/detail_tabs"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="54dp"
|
||||
android:layout_gravity="bottom"
|
||||
android:background="@color/brand_200"
|
||||
android:elevation="0dp"
|
||||
android:fillViewport="false"
|
||||
|
||||
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
|
||||
app:layout_anchor="@+id/collapsing_toolbar"
|
||||
app:layout_anchorGravity="bottom"
|
||||
|
||||
app:layout_collapseMode="pin"
|
||||
app:tabGravity="fill"
|
||||
app:tabIndicatorColor="@android:color/white"
|
||||
app:tabMode="fixed"
|
||||
android:fitsSystemWindows="true" />
|
||||
</android.support.design.widget.AppBarLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="?attr/actionBarSize"
|
||||
app:layout_collapseMode="parallax" />
|
||||
|
||||
<android.support.v7.widget.Toolbar
|
||||
android:id="@+id/toolbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:minHeight="?attr/actionBarSize"
|
||||
android:theme="@style/Toolbar"
|
||||
app:layout_collapseMode="pin"
|
||||
app:popupTheme="@style/Theme.AppCompat.Light"
|
||||
android:fitsSystemWindows="true"/>
|
||||
</android.support.design.widget.CollapsingToolbarLayout>
|
||||
|
||||
<android.support.design.widget.TabLayout
|
||||
android:id="@+id/detail_tabs"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="54dp"
|
||||
android:layout_gravity="bottom"
|
||||
android:background="@color/brand_200"
|
||||
android:elevation="0dp"
|
||||
android:fillViewport="false"
|
||||
|
||||
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
|
||||
app:layout_anchor="@+id/collapsing_toolbar"
|
||||
app:layout_anchorGravity="bottom"
|
||||
|
||||
app:layout_collapseMode="pin"
|
||||
app:tabGravity="fill"
|
||||
app:tabIndicatorColor="@android:color/white"
|
||||
app:tabMode="fixed"
|
||||
android:fitsSystemWindows="true" />
|
||||
</android.support.design.widget.AppBarLayout>
|
||||
|
||||
<com.roughike.bottombar.BottomBar
|
||||
android:id="@+id/bottom_navigation"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="60dp"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_gravity="bottom|center"
|
||||
android:background="@color/brand_100"
|
||||
app:bb_tabXmlResource="@xml/main_menu_tasks"
|
||||
app:bb_inActiveTabColor="@color/brand_500"
|
||||
app:bb_activeTabColor="@color/white"
|
||||
app:bb_behavior="underNavbar"
|
||||
/>
|
||||
android:orientation="vertical"
|
||||
android:layout_gravity="bottom|center"
|
||||
android:layout_alignParentBottom="true">
|
||||
<android.support.design.widget.CoordinatorLayout
|
||||
android:id="@+id/floating_menu_wrapper"
|
||||
app:layout_behavior="com.habitrpg.android.habitica.ui.helpers.FloatingActionMenuBehavior"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="bottom|right"
|
||||
android:layout_marginBottom="-5dp"
|
||||
/>
|
||||
<com.roughike.bottombar.BottomBar
|
||||
android:id="@+id/bottom_navigation"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="60dp"
|
||||
android:background="@color/brand_100"
|
||||
app:bb_tabXmlResource="@xml/main_menu_tasks"
|
||||
app:bb_inActiveTabColor="@color/brand_500"
|
||||
app:bb_activeTabColor="@color/white"
|
||||
app:bb_behavior="underNavbar"
|
||||
/>
|
||||
|
||||
</LinearLayout>
|
||||
</android.support.design.widget.CoordinatorLayout>
|
||||
<FrameLayout
|
||||
android:id="@+id/floating_menu_wrapper"
|
||||
app:layout_behavior="com.habitrpg.android.habitica.ui.helpers.FloatingActionMenuBehavior"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="bottom|right"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_marginBottom="44dp"
|
||||
android:layout_marginRight="8dp"
|
||||
android:fitsSystemWindows="true"
|
||||
/>
|
||||
</android.support.design.widget.CoordinatorLayout>
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:id="@+id/overlayFrameLayout"
|
||||
android:clickable="false"
|
||||
android:fitsSystemWindows="true"
|
||||
/>
|
||||
</FrameLayout>
|
||||
|
|
@ -2,7 +2,7 @@
|
|||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent" android:layout_height="match_parent">
|
||||
|
||||
<android.support.v4.view.ViewPager
|
||||
<com.habitrpg.android.habitica.ui.views.FadingViewPager
|
||||
android:id="@+id/view_pager"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
|
|
|
|||
|
|
@ -22,8 +22,8 @@
|
|||
app:tabTextColor="@color/white_50_alpha"
|
||||
app:tabSelectedTextColor="@color/white"
|
||||
app:tabGravity="center"
|
||||
app:tabPaddingEnd="16dp"
|
||||
app:tabPaddingStart="16dp"
|
||||
app:tabPaddingEnd="24dp"
|
||||
app:tabPaddingStart="24dp"
|
||||
/>
|
||||
|
||||
<android.support.v7.widget.RecyclerView
|
||||
|
|
|
|||
|
|
@ -7,12 +7,13 @@
|
|||
<View
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="2dp"
|
||||
android:background="@color/pill_gray" />
|
||||
android:background="@color/pill_gray"
|
||||
android:layout_marginTop="6dp"/>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="16dp"
|
||||
android:layout_margin="24dp"
|
||||
android:orientation="vertical">
|
||||
<TextView
|
||||
android:id="@+id/task_type_title"
|
||||
|
|
|
|||
26
Habitica/res/layout/filter_menu_item.xml
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="48dp"
|
||||
android:layout_height="48dp"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_gravity="right|end"
|
||||
tools:background="@color/brand_100"
|
||||
android:clickable="true">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="48dp"
|
||||
android:layout_height="48dp"
|
||||
android:src="@drawable/ic_action_filter_list"
|
||||
android:scaleType="center"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/badge_textview"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentRight="true"
|
||||
android:padding="4dp"
|
||||
tools:text="99"
|
||||
android:textColor="@color/white"
|
||||
android:background="@drawable/badge_bg"/>
|
||||
|
||||
</RelativeLayout>
|
||||
|
|
@ -17,7 +17,7 @@
|
|||
android:layout_height="match_parent"
|
||||
android:scrollbarSize="3dp"
|
||||
android:scrollbarThumbVertical="@color/md_grey_500"
|
||||
|
||||
android:paddingBottom="?attr/actionBarSize"
|
||||
android:scrollbars="vertical">
|
||||
|
||||
<LinearLayout
|
||||
|
|
|
|||
|
|
@ -51,7 +51,8 @@
|
|||
android:layout_height="match_parent"
|
||||
android:clipToPadding="false"
|
||||
android:divider="@null"
|
||||
android:scrollbars="vertical" />
|
||||
android:scrollbars="vertical"
|
||||
android:paddingBottom="?attr/actionBarSize" />
|
||||
|
||||
|
||||
</android.support.v4.widget.SwipeRefreshLayout>
|
||||
|
|
|
|||
|
|
@ -1,19 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:id="@+id/chat.refresh.layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
app:layout_behavior="@string/appbar_scrolling_view_behavior">
|
||||
|
||||
<android.support.v7.widget.RecyclerView
|
||||
android:id="@+id/chat.list"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:clipToPadding="false"
|
||||
android:divider="@null"
|
||||
android:scrollbars="vertical" />
|
||||
|
||||
</android.support.v4.widget.SwipeRefreshLayout>
|
||||
|
||||
|
|
@ -29,7 +29,7 @@
|
|||
android:scrollbarThumbVertical="@color/md_grey_500"
|
||||
android:scrollbars="vertical"
|
||||
android:paddingTop="@dimen/row_padding"
|
||||
android:paddingBottom="@dimen/row_padding" >
|
||||
android:paddingBottom="?attr/actionBarSize">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
android:layout_height="match_parent"
|
||||
android:scrollbarSize="3dp"
|
||||
android:scrollbarThumbVertical="@color/md_grey_500"
|
||||
|
||||
android:paddingBottom="?attr/actionBarSize"
|
||||
android:scrollbars="vertical">
|
||||
|
||||
<LinearLayout
|
||||
|
|
|
|||
|
|
@ -8,7 +8,8 @@
|
|||
|
||||
<android.support.v4.widget.NestedScrollView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
android:layout_height="match_parent"
|
||||
android:paddingBottom="?attr/actionBarSize">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
|
|
|
|||
|
|
@ -12,7 +12,6 @@
|
|||
android:scrollbarSize="3dp"
|
||||
android:scrollbarThumbVertical="@color/md_grey_500"
|
||||
android:scrollbars="vertical"
|
||||
android:fitsSystemWindows="true"
|
||||
android:clipToPadding="false"
|
||||
android:paddingBottom="?attr/actionBarSize"/>
|
||||
|
||||
|
|
|
|||
|
|
@ -17,7 +17,6 @@
|
|||
android:scrollbarSize="3dp"
|
||||
android:scrollbarThumbVertical="@color/md_grey_500"
|
||||
android:scrollbars="vertical"
|
||||
android:fitsSystemWindows="true"
|
||||
android:clipToPadding="false"
|
||||
android:paddingBottom="?attr/actionBarSize" />
|
||||
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/randomize_button"
|
||||
android:src="@drawable/creator_purple_bg"
|
||||
android:src="@drawable/creator_hills_bg"
|
||||
android:layout_centerHorizontal="true" />
|
||||
|
||||
<com.habitrpg.android.habitica.ui.AvatarView
|
||||
|
|
@ -30,9 +30,11 @@
|
|||
app:showBackground="false"
|
||||
app:showMount="false"
|
||||
app:showPet="false"
|
||||
app:showSleeping="false"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:layout_alignTop="@id/avatar_background"
|
||||
android:layout_marginTop="6dp"/>
|
||||
android:layout_marginTop="6dp"
|
||||
/>
|
||||
|
||||
|
||||
<com.habitrpg.android.habitica.ui.views.setup.AvatarCustomizationDrawer
|
||||
|
|
@ -47,7 +49,7 @@
|
|||
android:layout_height="wrap_content"
|
||||
app:namePlate="Justin"
|
||||
app:text="@string/avatar_setup_description"
|
||||
app:npcDrawable="@drawable/npc_justin_only"
|
||||
app:npcDrawable="@drawable/justin_textbox"
|
||||
android:layout_marginLeft="@dimen/content_inset"
|
||||
android:layout_marginRight="@dimen/content_inset"
|
||||
android:layout_above="@id/customization_drawer"
|
||||
|
|
|
|||
|
|
@ -30,12 +30,13 @@
|
|||
app:showBackground="false"
|
||||
app:showMount="false"
|
||||
app:showPet="false"
|
||||
app:showSleeping="false"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:layout_alignTop="@id/avatar_background"
|
||||
android:layout_marginTop="6dp"/>
|
||||
<android.support.v7.widget.RecyclerView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_height="230dp"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:background="@drawable/avatar_customization_category_bg"
|
||||
android:id="@+id/recyclerView"
|
||||
|
|
@ -45,8 +46,8 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:namePlate="Justin"
|
||||
app:text="@string/avatar_setup_description"
|
||||
app:npcDrawable="@drawable/npc_justin_only"
|
||||
app:text="@string/task_setup_description"
|
||||
app:npcDrawable="@drawable/justin_textbox"
|
||||
android:layout_marginLeft="@dimen/content_inset"
|
||||
android:layout_marginRight="@dimen/content_inset"
|
||||
android:layout_above="@id/recyclerView"
|
||||
|
|
|
|||
|
|
@ -1,77 +1,26 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_width="match_parent"
|
||||
android:clickable="true"
|
||||
android:id="@+id/background">
|
||||
android:layout_height="match_parent"
|
||||
android:layout_width="match_parent"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:clickable="true"
|
||||
android:fitsSystemWindows="true"
|
||||
android:id="@+id/background">
|
||||
<View android:layout_height="match_parent"
|
||||
android:layout_width="match_parent"
|
||||
android:background="@android:color/black"
|
||||
android:alpha="0.6"/>
|
||||
<LinearLayout
|
||||
android:orientation="horizontal" android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/imageView8"
|
||||
android:src="@drawable/npc_justin_only"
|
||||
android:layout_gravity="bottom"
|
||||
android:layout_marginLeft="8dp"
|
||||
android:layout_marginStart="8dp"/>
|
||||
|
||||
<LinearLayout
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:background="@android:color/black"
|
||||
android:alpha="0.6"/>
|
||||
<FrameLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@drawable/speech_bubble"
|
||||
android:layout_gravity="bottom"
|
||||
android:layout_marginLeft="6dp"
|
||||
android:layout_marginStart="6dp"
|
||||
android:layout_marginRight="12dp"
|
||||
android:layout_marginEnd="12dp"
|
||||
android:layout_marginBottom="24dp"
|
||||
android:paddingBottom="24dp"
|
||||
android:paddingLeft="10dp"
|
||||
android:paddingTop="12dp"
|
||||
android:paddingRight="10dp">
|
||||
|
||||
<TextView
|
||||
android:padding="16dp"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:fitsSystemWindows="true"
|
||||
android:layout_marginBottom="?actionBarSize">
|
||||
<com.habitrpg.android.habitica.ui.SpeechBubbleView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/tutorialTextView"
|
||||
android:layout_gravity="bottom"
|
||||
android:textSize="20sp" />
|
||||
|
||||
<LinearLayout
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
style="?android:attr/buttonBarStyle" >
|
||||
|
||||
<Button
|
||||
android:layout_width="0px"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/dismiss_tutorial"
|
||||
android:id="@+id/dismissButton"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:theme="@style/DialogButton"
|
||||
style="?android:attr/buttonBarButtonStyle" />
|
||||
|
||||
<Button
|
||||
android:layout_width="0px"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/complete_tutorial"
|
||||
android:id="@+id/completeButton"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:theme="@style/DialogButton"
|
||||
style="?android:attr/buttonBarButtonStyle" />
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
app:namePlate="Justin"
|
||||
app:npcDrawable="@drawable/justin_textbox"/>
|
||||
</FrameLayout>
|
||||
</RelativeLayout>
|
||||
|
|
|
|||
|
|
@ -4,15 +4,15 @@
|
|||
android:layout_height="match_parent"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:gravity="center_vertical"
|
||||
android:paddingLeft="12dp"
|
||||
android:paddingRight="12dp"
|
||||
android:paddingLeft="6dp"
|
||||
android:paddingRight="6dp"
|
||||
tools:background="@color/brand_200">
|
||||
<ImageView
|
||||
android:id="@+id/imageView"
|
||||
android:layout_width="@dimen/setup_customization_size"
|
||||
android:layout_height="@dimen/setup_customization_size"
|
||||
android:background="@drawable/setup_customization_bg"
|
||||
tools:src="@drawable/creator_slim_shirt_black"
|
||||
tools:src="@drawable/creator_chair_black"
|
||||
android:scaleType="center"
|
||||
/>
|
||||
<TextView
|
||||
|
|
@ -20,7 +20,7 @@
|
|||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
tools:text="Slim"
|
||||
android:layout_marginLeft="8dp"
|
||||
android:layout_marginLeft="6dp"
|
||||
android:textColor="@color/white_50_alpha"
|
||||
android:textSize="16sp"/>
|
||||
</LinearLayout>
|
||||
|
|
@ -7,23 +7,58 @@
|
|||
android:background="@color/transparent">
|
||||
<ImageView
|
||||
android:id="@+id/npc_image_view"
|
||||
android:layout_width="80dp"
|
||||
android:layout_height="105dp"
|
||||
tools:src="@drawable/npc_justin_only"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
tools:src="@drawable/justin_textbox"
|
||||
android:layout_gravity="right"
|
||||
android:layout_marginRight="30dp"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/textView"
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@color/white"
|
||||
android:background="@drawable/white_rounded_bg"
|
||||
android:paddingLeft="21dp"
|
||||
android:paddingTop="16dp"
|
||||
android:paddingRight="21dp"
|
||||
android:paddingBottom="14dp"
|
||||
android:layout_marginTop="74dp"
|
||||
tools:text="@string/welcome_text"/>
|
||||
android:layout_marginTop="56dp"
|
||||
android:orientation="vertical">
|
||||
<TextView
|
||||
android:id="@+id/textView"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
||||
style="@style/Body1"
|
||||
tools:text="@string/welcome_text"/>
|
||||
<LinearLayout
|
||||
android:id="@+id/confirmation_buttons"
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
style="?android:attr/buttonBarStyle" >
|
||||
|
||||
<Button
|
||||
android:layout_width="0px"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/dismiss_tutorial"
|
||||
android:id="@+id/dismissButton"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:theme="@style/DialogButton"
|
||||
style="?android:attr/buttonBarButtonStyle" />
|
||||
|
||||
<Button
|
||||
android:layout_width="0px"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/complete_tutorial"
|
||||
android:id="@+id/completeButton"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:theme="@style/DialogButton"
|
||||
style="?android:attr/buttonBarButtonStyle" />
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/name_plate"
|
||||
android:layout_width="wrap_content"
|
||||
|
|
@ -33,6 +68,6 @@
|
|||
android:gravity="center_vertical"
|
||||
android:textColor="@color/white"
|
||||
android:layout_marginLeft="21dp"
|
||||
android:layout_marginTop="60dp"
|
||||
android:layout_marginTop="42dp"
|
||||
android:textStyle="bold" />
|
||||
</FrameLayout>
|
||||
|
|
@ -13,7 +13,7 @@
|
|||
<!-- Search, should appear as action button -->
|
||||
<item android:id="@+id/action_search"
|
||||
android:icon="@drawable/ic_action_filter_list"
|
||||
app:actionLayout="@layout/filter_menu_item"
|
||||
android:title="@string/filter"
|
||||
app:showAsAction="ifRoom" />
|
||||
|
||||
</menu>
|
||||
|
|
|
|||
|
|
@ -181,25 +181,24 @@
|
|||
<string name="sidebar_help">Помощ и ЧЗВ</string>
|
||||
<string name="complete_tutorial">Разбрано!</string>
|
||||
<string name="dismiss_tutorial">Напомнете ми отново</string>
|
||||
<string name="intro_1_title">Добре дошли в Хабитика</string>
|
||||
<string name="intro_1_description">Присъединете се към останалите %s човека, които се забавляват, докато изпълняват ежедневните си задължения. Създайте си герой и следете истинските си задачи.</string>
|
||||
<string name="intro_2_title">Напредък в играта = напредък в живота</string>
|
||||
<string name="intro_2_description">Отключвайте функционалностите на играта като изпълнявате задачите в истинския си живот. Печелете екипировка, любимци и още, като награда за постигането на целите си!</string>
|
||||
<string name="intro_3_title">Общност и битки с чудовища</string>
|
||||
<string name="intro_1_subtitle">Добре дошли в</string>
|
||||
<string name="intro_1_title">Хабитика</string>
|
||||
<string name="intro_1_description">Време е да започнете да се забавлявате, докато вършите задачите си. Над %s вече подобряват живота си, с малки стъпки.</string>
|
||||
<string name="intro_2_subtitle">Напредък в играта</string>
|
||||
<string name="intro_2_title">Напредък в живота</string>
|
||||
<string name="intro_2_description">Отключвайте функционалности в играта като отбелязвате завършените задачи в истинския си живот. За изпълнението на целите си ще получавате екипировка, любимци и най-различни други награди.</string>
|
||||
<string name="intro_3_subtitle">Общувайте</string>
|
||||
<string name="intro_3_title">Бийте се с чудовища</string>
|
||||
<string name="intro_3_description">Приятелите Ви могат да Ви помогнат да постигнете целите си. Подкрепяйте се взаимно в живота и битките, за да израснете заедно!</string>
|
||||
<string name="intro_finish_button">Започване</string>
|
||||
<string name="intro_finish_button">Да започваме!</string>
|
||||
<string name="previous_button">Назад</string>
|
||||
<string name="next_button">Напред</string>
|
||||
<string name="skip_button">Пропускане</string>
|
||||
<string name="setup_welcome_description">Добре дошли в Хабитика, където напредването в играта ще подобри истинския Ви живот! Докато изпълнявате реалните си цели, ще отключвате екипировка, любимци, мисии и още.</string>
|
||||
<string name="setup_welcome_title">Добре дошли</string>
|
||||
<string name="avatar_setup_description">Първо, ще Ви трябва герой, който да Ви представлява в играта! Нещата, които вършите в истинския си живот, ще се отразяват на здравето, нивото и златото на героя Ви.</string>
|
||||
<string name="task_setup_description">Чудесно! А сега да създадем няколко задачи, за да започнете да печелите опит и злато.
|
||||
|
||||
Кои области от живота си искате да подобрите?</string>
|
||||
<string name="avatar_setup_description">Е, как искате да изглеждате? Не се притеснявайте, по-късно ще можете да промените това.</string>
|
||||
<string name="setup_group_work">Работа</string>
|
||||
<string name="setup_group_exercise">Упражнения</string>
|
||||
<string name="setup_group_heathWellness">Здравословно състояние</string>
|
||||
<string name="setup_group_school">Училище</string>
|
||||
<string name="setup_group_teams">Екипи</string>
|
||||
<string name="setup_group_chores">Домакинска работа</string>
|
||||
|
|
@ -461,6 +460,10 @@
|
|||
<string name="challenge_details">Подробности за предизвикателството</string>
|
||||
<string name="challenge_leave_title">Напускане на предизвикателството</string>
|
||||
<string name="challenge_leave_text">Наистина ли искате да напуснете предизвикателството „%s“?</string>
|
||||
<string name="challenge_remove_tasks_title">Премахване на задачите</string>
|
||||
<string name="challenge_remove_tasks_text">Искате ли да премахнете задачите?</string>
|
||||
<string name="remove_tasks">Премахване</string>
|
||||
<string name="keep_tasks">Задържане</string>
|
||||
<string name="my_challenges">Моите предизвикателства</string>
|
||||
<string name="public_challenges">Обществени</string>
|
||||
<string name="challenges">Предизвикателства</string>
|
||||
|
|
@ -492,6 +495,32 @@
|
|||
<string name="checkInRewardEarned">Спечелихте %1$s като награда за усърдието си в подобряването на живота си.</string>
|
||||
<string name="nextPrizeUnlocks" tools:ignore="PluralsCandidate">Следващата Ви награда ще се отключи след %1$d отчитания</string>
|
||||
<string name="pending_approval">изчакване за одобрение</string>
|
||||
<string name="filters">Филтри</string>
|
||||
<string name="done">Готово</string>
|
||||
<string name="group_tasks_edit_description">Груповите задачи не могат да бъдат редактирани.</string>
|
||||
<string name="group_tasks_edit_title">Тази задача не може да се редактира</string>
|
||||
<string name="groups">Групи</string>
|
||||
<string name="all">Всички</string>
|
||||
<string name="none">Нищо</string>
|
||||
<string name="owned">Притежавани</string>
|
||||
<string name="not_owned">Непритежавани</string>
|
||||
<string name="new_game">Нова\nигра</string>
|
||||
<string name="login_btn_fb">Влизане с Фейсбук</string>
|
||||
<string name="login_btn_google">Влизане с Гугъл</string>
|
||||
<string name="action_back">Назад</string>
|
||||
<string name="welcome_text">О, сигурно сте нов тук. Аз съм Джъстин и ще бъда Вашият съветник в Хабитика.\n\nЗа да започнете, ще трябва да си създадете герой.</string>
|
||||
<string name="randomize">Разбъркване</string>
|
||||
<string name="avatar_extras">Екстри</string>
|
||||
<string name="avatar_skin_color">Цвят на кожата</string>
|
||||
<string name="avatar_hair_color">Цвят на косата</string>
|
||||
<string name="avatar_hair_bangs">Бретон</string>
|
||||
<string name="avatar_hair_ponytail">Опашка</string>
|
||||
<string name="avatar_glasses">Очила</string>
|
||||
<string name="avatar_wheelchair">Инвалидна количка</string>
|
||||
<string name="weak">Слаби</string>
|
||||
<string name="strong">Силни</string>
|
||||
<string name="gray">Сиви</string>
|
||||
<string name="dated">С дата</string>
|
||||
<string name="completed">Завършени</string>
|
||||
<string name="setuP_group_other">Други</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -181,25 +181,23 @@
|
|||
<string name="sidebar_help">Hilfe & FAQ</string>
|
||||
<string name="complete_tutorial">Verstanden!</string>
|
||||
<string name="dismiss_tutorial">Erinnere mich noch einmal</string>
|
||||
<string name="intro_1_title">Willkommen in Habitica</string>
|
||||
<string name="intro_1_description">Tritt einer Gemeinschaft von über %s Menschen bei und erledige Dinge mit Spaß. Erstelle einen Avatar und verwalte spielerisch Deine Aufgaben des Alltags.</string>
|
||||
<string name="intro_2_title">Spielfortschritt = Lebensfortschritt</string>
|
||||
<string name="intro_2_description">Schalte zusätzliche Spielinhalte frei, indem Du Aufgaben im echten Leben erledigst. Verdiene Dir Ausrüstung, Haustiere und mehr als Belohnung für die Erfüllung Deiner Ziele!</string>
|
||||
<string name="intro_3_title">Werde sozial und kämpfe gegen Monster</string>
|
||||
<string name="intro_1_subtitle">Willkommen bei</string>
|
||||
<string name="intro_1_title">Habitica</string>
|
||||
<string name="intro_1_description">Es ist an der Zeit für Spaß, während du deine Aufgaben machst. Tritt einer Gemeinschaft von %s anderen Menschen bei, die ihr Leben Aufgabe für Aufgabe verbessern möchten.</string>
|
||||
<string name="intro_2_subtitle">Fortschritt im Spiel</string>
|
||||
<string name="intro_2_title">Fortschritt im Leben</string>
|
||||
<string name="intro_2_description">Schalte Spielinhalte durch das Erledigen und Abhaken deiner realen Aufgaben frei. Bekomme Rüstungen, Tiere und vieles mehr als Belohnungen für das Erfüllen deiner Ziele.</string>
|
||||
<string name="intro_3_title">Bekämpfe Monster</string>
|
||||
<string name="intro_3_description">Behalte Deine Ziele im Auge mit Hilfe Deiner Freunde. Unterstützt Euch gegenseitig im Leben und im Kampf, während Ihr Euch gemeinsam verbessert!</string>
|
||||
<string name="intro_finish_button">Anfangen</string>
|
||||
<string name="intro_finish_button">Fangen wir an!</string>
|
||||
<string name="previous_button">Zurück</string>
|
||||
<string name="next_button">Weiter</string>
|
||||
<string name="skip_button">Überspringen</string>
|
||||
<string name="setup_welcome_description">Willkommen zu Habitica! Hier bedeutet Fortschritt im Spiel gleichzeitig Fortschritt im echten Leben! Während Du Ziele im echten Leben erreichst, wirst Du Ausrüstung, Haustiere, Quests und vieles mehr freischalten.</string>
|
||||
<string name="setup_welcome_title">Willkommen</string>
|
||||
<string name="avatar_setup_description">Als erstes benötigst Du einen Avatar, der Dich repräsentiert! Dinge die Du im echten Leben tust beeinflussen Deine Lebenspunkte, Dein Level und Dein Gold.</string>
|
||||
<string name="task_setup_description">Großartig! Jetzt lass uns Deine Aufgaben anlegen, damit Du anfangen kannst Erfahrung zu sammeln und Gold zu bekommen.
|
||||
|
||||
Für den Anfang: Welche Bereiche Deines Lebens möchtest Du verbessern?</string>
|
||||
<string name="avatar_setup_description">Also, wie möchtest Du aussehen? Keine Sorge, Du kannst das jederzeit ändern.</string>
|
||||
<string name="setup_group_work">Arbeit</string>
|
||||
<string name="setup_group_exercise">Bewegung</string>
|
||||
<string name="setup_group_heathWellness">Gesundheit + Wohlbefinden</string>
|
||||
<string name="setup_group_school">Schule</string>
|
||||
<string name="setup_group_teams">Teams</string>
|
||||
<string name="setup_group_chores">Hausarbeit</string>
|
||||
|
|
@ -461,6 +459,10 @@ Für den Anfang: Welche Bereiche Deines Lebens möchtest Du verbessern?</string>
|
|||
<string name="challenge_details">Wettbewerbdetails</string>
|
||||
<string name="challenge_leave_title">Wettbewerb verlassen</string>
|
||||
<string name="challenge_leave_text">Bist Du Dir sicher, dass du den Wettbewerb \"%s\" verlassen willst?</string>
|
||||
<string name="challenge_remove_tasks_title">Aufgaben entfernen</string>
|
||||
<string name="challenge_remove_tasks_text">Willst du deine Aufgaben wirklich entfernen?</string>
|
||||
<string name="remove_tasks">Entfernen</string>
|
||||
<string name="keep_tasks">Behalten</string>
|
||||
<string name="my_challenges">Meine Wettbewerbe</string>
|
||||
<string name="public_challenges">Öffentlich</string>
|
||||
<string name="challenges">Wettbewerbe</string>
|
||||
|
|
@ -492,6 +494,25 @@ Für den Anfang: Welche Bereiche Deines Lebens möchtest Du verbessern?</string>
|
|||
<string name="checkInRewardEarned">Du hast ein %1$s als Belohnung für Deine Hingabe, dein Leben zu verbessern, erhalten.</string>
|
||||
<string name="nextPrizeUnlocks" tools:ignore="PluralsCandidate">Deine nächste Belohnung wird nach %1$d Log-Ins freigeschalten </string>
|
||||
<string name="pending_approval">Zustimmung ausstehend</string>
|
||||
<string name="filters">Filter</string>
|
||||
<string name="done">Fertig</string>
|
||||
<string name="group_tasks_edit_description">Gruppenaufgaben können nicht bearbeitet werden.</string>
|
||||
<string name="group_tasks_edit_title">Aufgabe kann nicht bearbeitet werden</string>
|
||||
<string name="all">Alles</string>
|
||||
<string name="none">Nichts</string>
|
||||
<string name="owned">Im Besitz</string>
|
||||
<string name="not_owned">Nicht im Besitz</string>
|
||||
<string name="login_btn_fb">Mit Facebook-Konto einloggen</string>
|
||||
<string name="login_btn_google">Mit Google-Konto einloggen</string>
|
||||
<string name="welcome_text">Oh, Du musst neu hier sein. Ich bin Justin, der Stadtführer von Habitica.\n\nAls erstes erstellen wir Dir einen Avatar.</string>
|
||||
<string name="avatar_extras">Extras</string>
|
||||
<string name="avatar_skin_color">Hautfarbe</string>
|
||||
<string name="avatar_hair_color">Haarfarbe</string>
|
||||
<string name="avatar_hair_bangs">Pony</string>
|
||||
<string name="avatar_hair_ponytail">Zopf</string>
|
||||
<string name="avatar_glasses">Brille</string>
|
||||
<string name="avatar_wheelchair">Rollstuhl</string>
|
||||
<string name="weak">Schwach</string>
|
||||
<string name="strong">Stark</string>
|
||||
<string name="gray">Grau</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -181,25 +181,14 @@
|
|||
<string name="sidebar_help">Ayuda y preguntas frecuentes</string>
|
||||
<string name="complete_tutorial">¡Ya está!</string>
|
||||
<string name="dismiss_tutorial">Vuelve a recordármelo</string>
|
||||
<string name="intro_1_title">Te damos la bienvenida a Habitica</string>
|
||||
<string name="intro_1_description">Únete a mas de %s de personas que se divierten mientras van realizando sus quehaceres. Crea un personaje y registra tus tareas del mundo real.</string>
|
||||
<string name="intro_2_title">Progreso en el juego = Progreso en la vida</string>
|
||||
<string name="intro_2_description">Desbloquea funciones del juego completando tareas en el mundo real. Obtén recompensas, como armaduras, mascotas y otras cosas, por cumplir tus objetivos.</string>
|
||||
<string name="intro_3_title">Socializa y combate monstruos</string>
|
||||
<string name="intro_3_description">No pierdas de vista tus objetivos y deja que te ayuden tus amigos. ¡Apoyaos mutuamente en la vida y en la lucha para mejorar juntos!</string>
|
||||
<string name="intro_finish_button">Comenzar</string>
|
||||
<string name="previous_button">Anterior</string>
|
||||
<string name="next_button">Siguiente</string>
|
||||
<string name="skip_button">Omitir</string>
|
||||
<string name="setup_welcome_description">Te damos la bienvenida a Habitica, donde al progresar dentro del juego, mejorarás en la vida real. A medida que cumplas tus objetivos del mundo real, desbloquearás piezas de equipamiento, mascotas, misiones y mucho más.</string>
|
||||
<string name="setup_welcome_title">Te damos la bienvenida</string>
|
||||
<string name="avatar_setup_description">Primero, necesitas un personaje que te represente dentro del juego. Lo que hagas en el mundo real afectará a la salud, el nivel de experiencia y el oro que tendrá tu personaje.</string>
|
||||
<string name="task_setup_description">¡Perfecto! Ahora, vamos a añadir tus tareas para que puedas empezar a ganar experiencia y oro.
|
||||
|
||||
Para empezar, ¿qué aspectos de tu vida te gustaría mejorar?</string>
|
||||
<string name="setup_group_work">Trabajo</string>
|
||||
<string name="setup_group_exercise">Ejercicio</string>
|
||||
<string name="setup_group_heathWellness">Salud y bienestar</string>
|
||||
<string name="setup_group_school">Clases</string>
|
||||
<string name="setup_group_teams">Equipos</string>
|
||||
<string name="setup_group_chores">Labores domésticas</string>
|
||||
|
|
@ -460,6 +449,7 @@ Para empezar, ¿qué aspectos de tu vida te gustaría mejorar?</string>
|
|||
<string name="reward">Recompensa</string>
|
||||
<string name="todo">Tarea</string>
|
||||
<string name="official">Oficial</string>
|
||||
<string name="participating">Participando</string>
|
||||
<string name="challenge">Desafío</string>
|
||||
<string name="go_to_challenge">Ir al Desafío</string>
|
||||
<string name="not_part_of_a_challenge">¡Ahora mismo no formas parte de ningún Desafío!</string>
|
||||
|
|
@ -473,6 +463,12 @@ Para empezar, ¿qué aspectos de tu vida te gustaría mejorar?</string>
|
|||
<string name="limited_count">%d restantes</string>
|
||||
<string name="gem_shop">Gema</string>
|
||||
<string name="mystery_item">Objeto Misterioso</string>
|
||||
<string name="myster_item_notes">Cada mes, los suscriptores recibirán un elemento misterioso. Este se lanza cerca de una semana antes del final del mes.</string>
|
||||
<string name="open">Abrir</string>
|
||||
<string name="notification_mystery_item">¡Abres la caja y encuentras %s!</string>
|
||||
<string name="checkInRewardEarned">Ganaste %1$s en recompensa por tu devoción por mejorar tu vida. </string>
|
||||
<string name="nextPrizeUnlocks" tools:ignore="PluralsCandidate">Su próximo premio se desbloquea en %1$d registros</string>
|
||||
<string name="pending_approval">Esperando aprobación</string>
|
||||
<string name="group_tasks_edit_description">Las Tareas de Equipo no pueden ser editadas</string>
|
||||
<string name="group_tasks_edit_title">No se puede editar tarea</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -181,25 +181,24 @@
|
|||
<string name="sidebar_help">Aide & FAQ</string>
|
||||
<string name="complete_tutorial">J\'ai compris !</string>
|
||||
<string name="dismiss_tutorial">Rappelez-le moi plus tard</string>
|
||||
<string name="intro_1_title">Bienvenue sur Habitica</string>
|
||||
<string name="intro_1_description">Rejoignez plus de %s personnes qui s\'amusent en progressant dans leur vie. Créez un avatar et suivez vos objectifs personnels.</string>
|
||||
<string name="intro_2_title">Progrès dans le jeu = Progrès dans la vie</string>
|
||||
<string name="intro_2_description">Débloquez du contenu dans le jeu en accomplissant vos tâches dans la vie réelle. Recevez des armures, des animaux, et plus, pour vous récompenser d\'avoir atteint vos buts !</string>
|
||||
<string name="intro_3_title">Réunissez-vous et battez-vous contre des monstres</string>
|
||||
<string name="intro_1_subtitle">Bienvenue sur</string>
|
||||
<string name="intro_1_title">Habitica</string>
|
||||
<string name="intro_1_description">Il est temps de s\'amuser en menant vos tâches à bien. Rejoignez plus de %s personnes qui progressent dans la vie tâche par tâche.</string>
|
||||
<string name="intro_2_subtitle">Progrès en jeu</string>
|
||||
<string name="intro_2_title">Progrès dans la vie</string>
|
||||
<string name="intro_2_description">Débloquez des fonctionnalités en jeu en validant vos tâches dans la vraie vie. Obtenez des équipements, des familiers, et d\'autres récompenses pour l\'accomplissement de vos objectifs.</string>
|
||||
<string name="intro_3_subtitle">Sociabilisez-vous</string>
|
||||
<string name="intro_3_title">Combattez des monstres</string>
|
||||
<string name="intro_3_description">Restez sur les rails de l\'accomplissement de vos buts avez l\'aide de vos amis. Épaulez-vous dans la vie et dans la bataille en vous améliorant ensemble !</string>
|
||||
<string name="intro_finish_button">Commencer</string>
|
||||
<string name="intro_finish_button">C\'est parti !</string>
|
||||
<string name="previous_button">Précédent</string>
|
||||
<string name="next_button">Suivant</string>
|
||||
<string name="skip_button">Passer</string>
|
||||
<string name="setup_welcome_description">Bienvenue sur Habitica, où progresser dans le jeu améliorera votre vie quotidienne ! En accomplissant vos buts dans le monde réel, vous débloquerez de l’expérience, des animaux, des quêtes, et bien plus encore.</string>
|
||||
<string name="setup_welcome_title">Bienvenue</string>
|
||||
<string name="avatar_setup_description">Tout d\'abord, vous avez besoin d\'un avatar, qui vous représentera dans le jeu ! </string>
|
||||
<string name="task_setup_description">Fantastique ! Maintenant, définissons des tâches afin que vous puissiez commencer à gagner de l\'expérience et de l\'or.
|
||||
|
||||
Pour commencer, quels aspects de votre vie souhaitez-vous améliorer ?</string>
|
||||
<string name="avatar_setup_description">Alors, à quoi voudriez-vous ressembler ? Ne vous inquiétez pas, vous pourrez changer d\'apparence plus tard.</string>
|
||||
<string name="setup_group_work">Travailler</string>
|
||||
<string name="setup_group_exercise">Faire de l\'exercice</string>
|
||||
<string name="setup_group_heathWellness">Santé et bien-être</string>
|
||||
<string name="setup_group_school">Ecole</string>
|
||||
<string name="setup_group_teams">Equipes</string>
|
||||
<string name="setup_group_chores">Tâches ménagères</string>
|
||||
|
|
@ -461,6 +460,10 @@ Pour commencer, quels aspects de votre vie souhaitez-vous améliorer ?</string>
|
|||
<string name="challenge_details">Détails du défi</string>
|
||||
<string name="challenge_leave_title">Quitter le défi</string>
|
||||
<string name="challenge_leave_text">Voulez-vous vraiment quitter le défi \"%s\" ?</string>
|
||||
<string name="challenge_remove_tasks_title">Supprimer les tâches</string>
|
||||
<string name="challenge_remove_tasks_text">Voulez-vous supprimer les tâches ?</string>
|
||||
<string name="remove_tasks">Supprimer</string>
|
||||
<string name="keep_tasks">Conserver</string>
|
||||
<string name="my_challenges">Mes défis</string>
|
||||
<string name="public_challenges">Publique</string>
|
||||
<string name="challenges">Défis</string>
|
||||
|
|
@ -492,6 +495,32 @@ Pour commencer, quels aspects de votre vie souhaitez-vous améliorer ?</string>
|
|||
<string name="checkInRewardEarned">Vous avez mérité cette récompense : %1$s pour votre dévotion à améliorer votre vie.</string>
|
||||
<string name="nextPrizeUnlocks" tools:ignore="PluralsCandidate">Votre prochain prix sera débloqué à %1$d connexions</string>
|
||||
<string name="pending_approval">En attente de validation</string>
|
||||
<string name="filters">Filtres</string>
|
||||
<string name="done">Complétées</string>
|
||||
<string name="group_tasks_edit_description">Les tâches de groupe ne peuvent pas être modifiées.</string>
|
||||
<string name="group_tasks_edit_title">Tâche non modifiable</string>
|
||||
<string name="groups">Groupes</string>
|
||||
<string name="all">Tous</string>
|
||||
<string name="none">Aucun</string>
|
||||
<string name="owned">Possédé</string>
|
||||
<string name="not_owned">Non possédé</string>
|
||||
<string name="new_game">Nouvelle\nPartie</string>
|
||||
<string name="login_btn_fb">Se connecter via Facebook</string>
|
||||
<string name="login_btn_google">Se connecter via Google</string>
|
||||
<string name="action_back">Retour</string>
|
||||
<string name="welcome_text">Oh, vous devez être nouveau·nouvelle. Je m\'appelle Justin et je vais vous guider dans Habitica.\n\nPour commencer, vous devez créer un avatar.</string>
|
||||
<string name="randomize">Aléatoire</string>
|
||||
<string name="avatar_extras">Bonus</string>
|
||||
<string name="avatar_skin_color">Couleur de peau</string>
|
||||
<string name="avatar_hair_color">Couleur de cheveux</string>
|
||||
<string name="avatar_hair_bangs">Frange</string>
|
||||
<string name="avatar_hair_ponytail">Queue de cheval</string>
|
||||
<string name="avatar_glasses">Lunettes</string>
|
||||
<string name="avatar_wheelchair">Fauteuil roulant</string>
|
||||
<string name="weak">Faibles</string>
|
||||
<string name="strong">Fortes</string>
|
||||
<string name="gray">Grisées</string>
|
||||
<string name="dated">Datées</string>
|
||||
<string name="completed">Terminé</string>
|
||||
<string name="setuP_group_other">Autre</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<dimen name="setup_vertical_spacing">20dp</dimen>
|
||||
<dimen name="setup_vertical_spacing">28dp</dimen>
|
||||
<dimen name="customization_drawer_subcategory_height">130dp</dimen>
|
||||
<dimen name="customization_drawer_category_height">100dp</dimen>
|
||||
<dimen name="customization_drawer_caret_margin">91dp</dimen>
|
||||
|
|
|
|||
|
|
@ -181,25 +181,14 @@
|
|||
<string name="sidebar_help">Bantuan & FAQ</string>
|
||||
<string name="complete_tutorial">Aku mengerti!</string>
|
||||
<string name="dismiss_tutorial">Peringatkan aku lagi</string>
|
||||
<string name="intro_1_title">Selamat datang di Habitica</string>
|
||||
<string name="intro_1_description">Bergabunglah dengan lebih dari %s orang bersenang-senang dalam menyelesaikan tugas. Buatlah avatar dan catat tugas dunia-nyatamu.</string>
|
||||
<string name="intro_2_title">Kemajuan dalam Permainan = Kemajuan dalam Hidup</string>
|
||||
<string name="intro_2_description">Buka fitur dalam game dengan mencentang tugas harianmu. Dapatkan baju, peliharaan, dan banyak lagi untuk hadiahmu menyelesaikan tujuan!</string>
|
||||
<string name="intro_3_title">Bersosialisasi sambil Mengalahkan Monster</string>
|
||||
<string name="intro_3_description">Tetaplah berusaha meraih tujuan dengan bantuan teman-teman. Dukung satu sama lain dalam hidup dan bertarunglah sekaligus meningkatkan kehidupan bersama-sama!</string>
|
||||
<string name="intro_finish_button">Mulai</string>
|
||||
<string name="previous_button">Sebelumnya</string>
|
||||
<string name="next_button">Berikutnya</string>
|
||||
<string name="skip_button">Lewati</string>
|
||||
<string name="setup_welcome_description">Selamat datang di Habitica, di mana meningkatkan diri dalam permainan akan meningkatkan kehidupan nyata! Seiring kamu menyelesaikan tujuan dunia-nyata, kamu akan membuka perlengkapan, peliharaan, misi, dan banyak lagi.</string>
|
||||
<string name="setup_welcome_title">Selamat Datang</string>
|
||||
<string name="avatar_setup_description">Pertama, kamu butuh avatar di dalam game untuk menggambarkan dirimu! Hal-hal yang kamu lakukan di dunia nyata akan mempengaruhi kesehatan, level pengalaman, dan emas avatarmu.</string>
|
||||
<string name="task_setup_description">Keren! Sekarang mari mengatur tugas-tugasmu jadi kamu dapat mulai mendapatkan pengalaman dan emas.
|
||||
|
||||
Untuk memulai, bagian mana dari hidupmu yang ingin kamu tingkatkan?</string>
|
||||
<string name="setup_group_work">Kerja</string>
|
||||
<string name="setup_group_exercise">Latihan Fisik</string>
|
||||
<string name="setup_group_heathWellness">Kesehatan + Kebaikan</string>
|
||||
<string name="setup_group_school">Sekolah</string>
|
||||
<string name="setup_group_teams">Tim</string>
|
||||
<string name="setup_group_chores">Pekerjaan Rumah Tangga</string>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="action_refresh">Aggiorna</string>
|
||||
<string name="action_refresh">Sincronizza</string>
|
||||
<string name="XP_default">Esperienza</string>
|
||||
<string name="HP_default">Salute</string>
|
||||
<string name="MP_default">Mana</string>
|
||||
|
|
@ -181,25 +181,24 @@
|
|||
<string name="sidebar_help">Aiuto & FAQ</string>
|
||||
<string name="complete_tutorial">Capito!</string>
|
||||
<string name="dismiss_tutorial">Ricordamelo ancora</string>
|
||||
<string name="intro_1_title">Benvenuto in Habitica</string>
|
||||
<string name="intro_1_description">Unisciti ad oltre %s persone che si divertono raggiungendo i propri obiettivi. Crea un avatar e tieni traccia delle tue attività nella vita reale.</string>
|
||||
<string name="intro_2_title">Progressi nel gioco = Progressi nella vita</string>
|
||||
<string name="intro_2_description">Sblocca nuovi elementi nel gioco portando a termine gli impegni della vita reale. Ottieni armature, animali e altro come ricompensa per aver fatto del tuo meglio!</string>
|
||||
<string name="intro_3_title">Sconfiggi mostri in compagnia</string>
|
||||
<string name="intro_1_subtitle">Benvenuto in</string>
|
||||
<string name="intro_1_title">Habitica</string>
|
||||
<string name="intro_1_description">È il momento di divertirsi raggiungendo i propri obiettivi. Unisciti ad oltre %s altre persone che migliorano la propria vita un\'attività alla volta.</string>
|
||||
<string name="intro_2_subtitle">Progressi nel gioco</string>
|
||||
<string name="intro_2_title">Progressi nella vita</string>
|
||||
<string name="intro_2_description">Sblocca nuovi elementi nel gioco portando a termine gli impegni della vita reale. Ottieni armature, animali e altro come ricompensa per aver raggiunto i tuoi obiettivi.</string>
|
||||
<string name="intro_3_subtitle">Sii Social</string>
|
||||
<string name="intro_3_title">Combatti mostri</string>
|
||||
<string name="intro_3_description">Tieni traccia dei tuoi obiettivi con l\'aiuto dei tuoi amici. Supportatevi a vicenda nella vita e nelle battaglie per migliorare insieme!</string>
|
||||
<string name="intro_finish_button">Inizia</string>
|
||||
<string name="intro_finish_button">Iniziamo!</string>
|
||||
<string name="previous_button">Indietro</string>
|
||||
<string name="next_button">Avanti</string>
|
||||
<string name="skip_button">Salta</string>
|
||||
<string name="setup_welcome_description">Benvenuto in Habitica, dove progredire nel gioco migliorerà la tua vita! Man mano che raggiungerai obiettivi nella vita reale, sbloccherai equipaggiamento, animali, missioni e altro.</string>
|
||||
<string name="setup_welcome_title">Benvenuto</string>
|
||||
<string name="avatar_setup_description">Per prima cosa, hai bisogno di un avatar che ti rappresenti! Ciò che fai nella vita reale avranno effetto su salute, esperienza e oro del tuo avatar.</string>
|
||||
<string name="task_setup_description">Splendido! Ora sistemiamo le tue attività in modo che tu possa cominciare a guadagnare oro ed esperienza.
|
||||
|
||||
Per cominciare, quali parti della tua vita vuoi migliorare?</string>
|
||||
<string name="avatar_setup_description">Quindi, che aspetto ti piacerebbe avere? Non preoccuparti, lo potrai cambiare in seguito.</string>
|
||||
<string name="setup_group_work">Lavoro</string>
|
||||
<string name="setup_group_exercise">Esercizio fisico</string>
|
||||
<string name="setup_group_heathWellness">Salute + Benessere</string>
|
||||
<string name="setup_group_school">Scuola</string>
|
||||
<string name="setup_group_teams">Team</string>
|
||||
<string name="setup_group_chores">Faccende di casa</string>
|
||||
|
|
@ -429,7 +428,7 @@ Le Dailies mancate e le cattive Habit non li danneggiano molto, e hanno sempre m
|
|||
<string name="subscriptions">Abbonamenti</string>
|
||||
<string name="subscription_duration">Ricorrente ogni %s</string>
|
||||
<string name="subscribe">Abbonati</string>
|
||||
<string name="subscribe.listitem1.description">Da ora Alexander il Mercante ti venderà Gemme al prezzo di 20 oro l\'una!\n\nLe sue consegne mensili sono inizialmente limitate a 25 Gemme al mese, ma possono aumentare a seconda della durata del tuo abbonamento.\n\nIl limite aumenta di 5 Gemme ogni tre mesi di abbonamento consecutivi, fino ad un massimo di 50 Gemme al mese!</string>
|
||||
<string name="subscribe.listitem1.description">Ora Alexander il Mercante ti venderà Gemme al prezzo di 20 Oro l\'una!\n\nLe sue consegne mensili sono inizialmente limitate a 25 Gemme al mese, ma possono aumentare a seconda della durata del tuo abbonamento.\n\nIl limite aumenta di 5 Gemme ogni tre mesi di abbonamento consecutivi, fino ad un massimo di 50 Gemme al mese!</string>
|
||||
<string name="subscribe.listitem2.description">Ogni mese riceverai un oggetto davvero unico per il tuo avatar!\n\nIn più, ogni tre mesi di abbonamento consecutivi, i misteriosi Viaggiatori del Tempo ti permetteranno di ottenere oggetti antichi (e futuri!).</string>
|
||||
<string name="subscribe.listitem3.description">Rende le To-Do completate e la cronologia dei progressi delle attività disponibili più a lungo.</string>
|
||||
<string name="subscribe.listitem4.description">Raddoppiare il numero massimo di drop giornalieri ti farà ricevere più oggetti dalle attività completate ogni giorno, aiutandoti a completare la tua scuderia più velocemente!</string>
|
||||
|
|
@ -462,6 +461,10 @@ Le Dailies mancate e le cattive Habit non li danneggiano molto, e hanno sempre m
|
|||
<string name="challenge_details">Dettagli sfida</string>
|
||||
<string name="challenge_leave_title">Abbandona sfida</string>
|
||||
<string name="challenge_leave_text">Vuoi davvero abbandonare la sfida \"%s\"?</string>
|
||||
<string name="challenge_remove_tasks_title">Rimuovi attività</string>
|
||||
<string name="challenge_remove_tasks_text">Vuoi rimuovere le attività?</string>
|
||||
<string name="remove_tasks">Rimuovi</string>
|
||||
<string name="keep_tasks">Tieni</string>
|
||||
<string name="my_challenges">Le mie sfide</string>
|
||||
<string name="public_challenges">Pubbliche</string>
|
||||
<string name="challenges">Sfide</string>
|
||||
|
|
@ -493,6 +496,32 @@ Le Dailies mancate e le cattive Habit non li danneggiano molto, e hanno sempre m
|
|||
<string name="checkInRewardEarned">Hai meritato %1$s come premio per la tua costanza nel migliorare la tua vita.</string>
|
||||
<string name="nextPrizeUnlocks" tools:ignore="PluralsCandidate">Il prossimo premio verrà sbloccato a %1$d accessi</string>
|
||||
<string name="pending_approval">in attesa di approvazione</string>
|
||||
<string name="filters">Filtri</string>
|
||||
<string name="done">Fatto</string>
|
||||
<string name="group_tasks_edit_description">Le attività di gruppo non possono essere modificate.</string>
|
||||
<string name="group_tasks_edit_title">Non puoi modificare questa attività</string>
|
||||
<string name="groups">Gruppi</string>
|
||||
<string name="all">Tutti</string>
|
||||
<string name="none">Nessuno</string>
|
||||
<string name="owned">Posseduto</string>
|
||||
<string name="not_owned">Non posseduto</string>
|
||||
<string name="new_game">Nuovo\nGioco</string>
|
||||
<string name="login_btn_fb">Accedi con Facebook</string>
|
||||
<string name="login_btn_google">Accedi con Google</string>
|
||||
<string name="action_back">Indietro</string>
|
||||
<string name="welcome_text">Oh, devi essere nuovo da queste parti. Mi chiamo Justin, e sarò la tua guida qui ad Habitica.\n\nPer cominciare, devi per prima cosa creare un avatar.</string>
|
||||
<string name="randomize">Rendi casuale</string>
|
||||
<string name="avatar_extras">Extra</string>
|
||||
<string name="avatar_skin_color">Colore pelle</string>
|
||||
<string name="avatar_hair_color">Colore capelli</string>
|
||||
<string name="avatar_hair_bangs">Frangia</string>
|
||||
<string name="avatar_hair_ponytail">Coda</string>
|
||||
<string name="avatar_glasses">Occhiali</string>
|
||||
<string name="avatar_wheelchair">Sedia a rotelle</string>
|
||||
<string name="weak">Deboli</string>
|
||||
<string name="strong">Forti</string>
|
||||
<string name="gray">Grigie</string>
|
||||
<string name="dated">Con scadenza</string>
|
||||
<string name="completed">Completate</string>
|
||||
<string name="setuP_group_other">Altro</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -173,25 +173,14 @@
|
|||
<string name="sidebar_help">עזרה ושאלות נפוצות</string>
|
||||
<string name="complete_tutorial">הבנתי!</string>
|
||||
<string name="dismiss_tutorial">הזכר לי שוב</string>
|
||||
<string name="intro_1_title">ברוכים הבאים להאביטיקה</string>
|
||||
<string name="intro_1_description">הצטרפו ללמעלה מ %s אנשים שנהנים בזמן שהם גורמים לדברים לקרות. צרו דמות ועיקבו אחר משימותיכם מהעולם האמיתי.</string>
|
||||
<string name="intro_2_title">התקדמות במשחק = התקדמות בחיים</string>
|
||||
<string name="intro_2_description">אפשרו יכולות של המשחק על ידי סימון שהשלמתם משימות בעולם האמיתי. הרוויחו שיריון, חיות מחמד, ועוד - כדי לתגמל את עצמכם על עמידה ביעדים!</string>
|
||||
<string name="intro_3_title">היו חברותיים והילחמו במפלצות</string>
|
||||
<string name="intro_3_description">שימרו על קצב התקדמות עם עזרה מחבריכם. תימכו אחד בשני בחיים ובקרב ככל שאתם משתפרים ביחד!</string>
|
||||
<string name="intro_finish_button">התחילו</string>
|
||||
<string name="previous_button">קודם</string>
|
||||
<string name="next_button">הבא</string>
|
||||
<string name="skip_button">דלגו</string>
|
||||
<string name="setup_welcome_description">ברוכים הבאים להאביטיקה, המקום בו התקדמות במשחק תשפר אתכם בחיים האמיתיים! ככל שאתם משיגים יעדים בעולם האמיתי, תשחררו ציוד, חיות מחמד, הרפתקאות, ועוד.</string>
|
||||
<string name="setup_welcome_title">ברוכים הבאים</string>
|
||||
<string name="avatar_setup_description">ראשית, אתם צריכים דמות במשחק כדי לייצג אתכם! הדברים שאתם עושים בחיים האמיתיים ישפיעו על בריאות הדמות שלכם, הניסיון והזהב שלה.</string>
|
||||
<string name="task_setup_description">נהדר! עכשיו בואו נקבע את המשימות שלכם כדי שתתחילו להרוויח ניסיון וזהב.
|
||||
|
||||
כדי להתחיל, איזה חלקים בחייכם תרצו לשפר?</string>
|
||||
<string name="setup_group_work">עבודה</string>
|
||||
<string name="setup_group_exercise">התעמלות</string>
|
||||
<string name="setup_group_heathWellness">בריאות + אורח חיים</string>
|
||||
<string name="setup_group_school">בית-ספר</string>
|
||||
<string name="setup_group_teams">קבוצות</string>
|
||||
<string name="setup_group_chores">מטלות</string>
|
||||
|
|
|
|||
|
|
@ -181,25 +181,21 @@
|
|||
<string name="sidebar_help">ヘルプとFAQ</string>
|
||||
<string name="complete_tutorial">わかった!</string>
|
||||
<string name="dismiss_tutorial">もう一度通知</string>
|
||||
<string name="intro_1_title">Habitica へようこそ</string>
|
||||
<string name="intro_1_description">%s人以上の方々が、やるべき事をかたづけるのを楽しんでいるよ。アバターをつくって、実生活のタスクを記録してみよう。</string>
|
||||
<string name="intro_2_title">ゲームの進行 = 人生の進行</string>
|
||||
<string name="intro_2_description">実生活でタスクをこなし、ゲーム内の機能をアンロックしよう。よろい、ペット、そして「ごほうび」を手に入れながら、自分自身の目標に接近しよう!</string>
|
||||
<string name="intro_3_title">友達とつながってモンスターと戦おう</string>
|
||||
<string name="intro_1_subtitle">へよこそう</string>
|
||||
<string name="intro_1_title">Habitica</string>
|
||||
<string name="intro_2_subtitle">ゲームの進行</string>
|
||||
<string name="intro_2_title">人生の進行</string>
|
||||
<string name="intro_3_subtitle">友達とつながって</string>
|
||||
<string name="intro_3_title">モンスターと戦おう</string>
|
||||
<string name="intro_3_description">友達の力を借りて目標にしがみつこう。実生活とバトルでお互いに助け合い、いっしょに成長しよう!</string>
|
||||
<string name="intro_finish_button">さあ、はじまりだ</string>
|
||||
<string name="intro_finish_button">始めましょう!</string>
|
||||
<string name="previous_button">戻る</string>
|
||||
<string name="next_button">次へ</string>
|
||||
<string name="skip_button">スキップ</string>
|
||||
<string name="setup_welcome_description">Habitica へようこそ。ここはゲームが進むほどに、あなたの実生活が改善されるところ! あなたが現実世界のゴールを達成すれば、装備やペット、クエストなどなど、新たな世界が広がるよ。</string>
|
||||
<string name="setup_welcome_title">ようこそ</string>
|
||||
<string name="avatar_setup_description">まず、ゲーム内であなたの代わりとなるアバターをつくろう。あなたの実生活での行動が、アバターの体力、経験値とレベル、そしてゴールドに影響を与えるよ。</string>
|
||||
<string name="task_setup_description">すごい! 自分のタスクを設定して、経験値とゴールドを集めよう。
|
||||
|
||||
はじめに、自分の生活のどの部分を改善したい?</string>
|
||||
<string name="setup_group_work">仕事</string>
|
||||
<string name="setup_group_exercise">エクササイズ</string>
|
||||
<string name="setup_group_heathWellness">健康と体調管理</string>
|
||||
<string name="setup_group_school">学校</string>
|
||||
<string name="setup_group_teams">チーム</string>
|
||||
<string name="setup_group_chores">家事</string>
|
||||
|
|
@ -439,6 +435,7 @@
|
|||
<string name="subscription">寄付</string>
|
||||
<string name="one_month">1ヶ月</string>
|
||||
<string name="months">%dヶ月</string>
|
||||
<string name="month">月</string>
|
||||
<string name="three_months">3ヶ月</string>
|
||||
<string name="six_months">6ヶ月</string>
|
||||
<string name="twelve_months">12ヶ月</string>
|
||||
|
|
@ -474,4 +471,7 @@
|
|||
<string name="open">開く</string>
|
||||
<string name="notification_mystery_item">プレゼントボックスを開いて%sを手に入れました!</string>
|
||||
<string name="nextPrizeUnlocks" tools:ignore="PluralsCandidate">あと%1$d日のログインで、新たな賞品が手に入ります!</string>
|
||||
<string name="all">全部</string>
|
||||
<string name="none">なし</string>
|
||||
<string name="action_back">戻る</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -181,25 +181,22 @@
|
|||
<string name="sidebar_help">도움말 & FAQ</string>
|
||||
<string name="complete_tutorial">네, 알겠어요!</string>
|
||||
<string name="dismiss_tutorial">나중에 알려주세요</string>
|
||||
<string name="intro_1_title">Habitica에 오신걸 환영합니다</string>
|
||||
<string name="intro_1_description">%s명이 넘는 사람들과 함께 아바타도 만들고 재미있게 즐기면서 실생활 목표들을 달성하세요.</string>
|
||||
<string name="intro_2_title">게임 진행도 = 인생 진행도</string>
|
||||
<string name="intro_2_description">일상생활의 과제들을 해결하면서 게임의 새로운 기능을 열어보세요. 당신이 목표를 달성할 때 마다 갑옷, 펫과 같은 다양한 보상들을 얻을 수 있습니다!</string>
|
||||
<string name="intro_3_title">친구들과 몬스터를 물리치세요</string>
|
||||
<string name="intro_1_subtitle">오신 것을 환영합니다</string>
|
||||
<string name="intro_1_title">Habitica</string>
|
||||
<string name="intro_2_subtitle">게임의 진전</string>
|
||||
<string name="intro_2_title">삶의 진전</string>
|
||||
<string name="intro_2_description">실제 삶에서의 일을 처리하는 것으로 게임의 특색들을 잠금해제 하세요. 목표를 달성해 갑옷, 펫, 그리고 더 많은 것들을 얻으세요.</string>
|
||||
<string name="intro_3_subtitle">친목을 다지세요</string>
|
||||
<string name="intro_3_title">몬스터와 싸우세요</string>
|
||||
<string name="intro_3_description">친구들의 도움으로 당신의 목표를 유지시키세요. 일상 생활과 전투에서 서로를 도와가며 함께 성장하세요!</string>
|
||||
<string name="intro_finish_button">시작하기</string>
|
||||
<string name="intro_finish_button">시작합시다!</string>
|
||||
<string name="previous_button">이전</string>
|
||||
<string name="next_button">다음</string>
|
||||
<string name="skip_button">스킵</string>
|
||||
<string name="setup_welcome_description">Habitica에 오신걸 환영합니다. 게임에서의 진행도는 당신 일상에서의 진행도를 의미하죠! 과제를 달성할수록 새로운 장비, 펫, 퀘스트 등을 열 수 있어요.</string>
|
||||
<string name="setup_welcome_title">환영합니다</string>
|
||||
<string name="avatar_setup_description">우선은 게임에서 당신을 대표할 아바타가 필요해요! 당신이 일상생활에서하는 행동들은 아바타의 체력, 경험치와 골드에 영향을 미칠꺼에요.</string>
|
||||
<string name="task_setup_description">잘했어요! 이제 과제를 설정하여 경험치와 골드를 얻어볼까요.
|
||||
|
||||
우선, 당신은 일상의 어떤 부분을 개선하고 싶으신가요?</string>
|
||||
<string name="setup_group_work">일</string>
|
||||
<string name="setup_group_exercise">운동</string>
|
||||
<string name="setup_group_heathWellness">건강</string>
|
||||
<string name="setup_group_school">학교</string>
|
||||
<string name="setup_group_teams">팀</string>
|
||||
<string name="setup_group_chores">집안일</string>
|
||||
|
|
@ -448,6 +445,7 @@
|
|||
<string name="subscription">정기구독</string>
|
||||
<string name="active">활성중</string>
|
||||
<string name="cancel_subscription">구독 취소하기</string>
|
||||
<string name="cancel_subscription_google.description">탈퇴하고 싶으신가요? 구글 플레이 스토어의 \"My Apps\"에 탈퇴 옵션이 있습니다.</string>
|
||||
<string name="visit_habitica_website">Habitica 웹사이트 가기</string>
|
||||
<string name="current_bonuses">현재 발동중인 보너스</string>
|
||||
<string name="months_subscribed">구독한 기간</string>
|
||||
|
|
@ -466,6 +464,10 @@
|
|||
<string name="challenge_details">도전 내용</string>
|
||||
<string name="challenge_leave_title">도전 그만두기</string>
|
||||
<string name="challenge_leave_text">정말로 “%s” 도전을 그만 두시겠습니까?</string>
|
||||
<string name="challenge_remove_tasks_title">할일 제거</string>
|
||||
<string name="challenge_remove_tasks_text">할일을 제거하고 싶으신가요?</string>
|
||||
<string name="remove_tasks">제거하기</string>
|
||||
<string name="keep_tasks">놔두기</string>
|
||||
<string name="my_challenges">나의 도전들</string>
|
||||
<string name="public_challenges">공개</string>
|
||||
<string name="challenges">도전과제들</string>
|
||||
|
|
@ -493,5 +495,11 @@
|
|||
<string name="myster_item_notes">매달, 정기후원자는 미스터리 아이템을 제공받습니다. 아이템은 달이 끝나기 한 주전쯤 출시됩니다.</string>
|
||||
<string name="open">열기</string>
|
||||
<string name="notification_mystery_item">상자를 열어 %s을/를 찾았습니다!</string>
|
||||
<string name="checkInRewardEarned">삶을 증진시키려는 노력의 대가로 %1$s를 얻었습니다.</string>
|
||||
<string name="nextPrizeUnlocks" tools:ignore="PluralsCandidate">다음 보상은 %1$d번 출석 후에 풀립니다.</string>
|
||||
<string name="done">완료</string>
|
||||
<string name="group_tasks_edit_description">그룹 할일은 편집할 수 없습니다.</string>
|
||||
<string name="group_tasks_edit_title">이 할일을 편집할 수 없습니다.</string>
|
||||
<string name="groups">그룹</string>
|
||||
<string name="all">모든</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -180,25 +180,14 @@
|
|||
<string name="sidebar_help">Pagalba & DUK</string>
|
||||
<string name="complete_tutorial">Supratau!</string>
|
||||
<string name="dismiss_tutorial">Priminti man vėliau</string>
|
||||
<string name="intro_1_title">Sveiki užsukę į Habitica</string>
|
||||
<string name="intro_1_description">Prisijunkite prie virš %s žmonių smagiai atliekančių kasdienes užduotis. Susikurkite avatarą ir sekite savo realaus gyvenimo užduotis.</string>
|
||||
<string name="intro_2_title">Progresas Žaidime = Progresas Gyvenime</string>
|
||||
<string name="intro_2_description">Atidenk naujas žaidimo funkcijas žymėdamas savo gyvenimo užduotis. Užsidirbk šarvus, augintinius ir kitus atlygius siekdamas savo tikslų!</string>
|
||||
<string name="intro_3_title">Bendrauk ir Kovok su Pabaisomis</string>
|
||||
<string name="intro_3_description">Sek savo tikslus pasitelkęs draugų pagalbą. Padėkit vienas kitam gyvenime kartu kovodami su pabaisomis!</string>
|
||||
<string name="intro_finish_button">Pradėk</string>
|
||||
<string name="previous_button">Praeitas</string>
|
||||
<string name="next_button">Kitas</string>
|
||||
<string name="skip_button">Praleisti</string>
|
||||
<string name="setup_welcome_description">Sveiki užsukę į Habitica, kur tobulėjimas žaidime padės jums tobulėti gyvenime! Kai siekiate gyvenimo tikslų, gausite aprangos, įrankių, augintinių, misijų ir daugiau.</string>
|
||||
<string name="setup_welcome_title">Sveiki</string>
|
||||
<string name="avatar_setup_description">Pirma, tau reik veikėjo, kuris žaidime atspindės tave! Tavo gyvenimo darbai atsispindės tavo veikėjo sveikatoje, patirtyje ir aukso kiekyje.</string>
|
||||
<string name="task_setup_description">Nuostabu! Dabar sukurkime kelias užduotis, kad galėtum pradėti rinkti patirtį ir auksą.
|
||||
|
||||
Pradžiai, kurias savo gyvenimo dalis norėtum tobulint?</string>
|
||||
<string name="setup_group_work">Darbas</string>
|
||||
<string name="setup_group_exercise">Sportas</string>
|
||||
<string name="setup_group_heathWellness">Sveikata</string>
|
||||
<string name="setup_group_school">Mokslai</string>
|
||||
<string name="setup_group_teams">Komandos</string>
|
||||
<string name="setup_group_chores">Ruošos Darbai</string>
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
<string name="sidebar.inbox">Inbox</string>
|
||||
<string name="sidebar.tavern">Herberg</string>
|
||||
<string name="sidebar.party">Groep</string>
|
||||
<string name="sidebar.purchaseGems">Koop edelstenen</string>
|
||||
<string name="sidebar.purchaseGems">Edelstenen & abonnement</string>
|
||||
<string name="sidebar.guilds">Gilden</string>
|
||||
<string name="sidebar.challenges">Uitdagingen</string>
|
||||
<string name="sidebar.section.inventory">Boedel</string>
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@
|
|||
<string name="pref_reminder_picker">Stel tijd van herinnering in</string>
|
||||
<string name="pref_cds_header">Aangepast begin van de dag</string>
|
||||
<string name="pref_cds_picker">Begin van de dag instellen</string>
|
||||
<string name="pref_push_notifications_checkbox">Gebruiker-pushnotificaties</string>
|
||||
<string name="pref_push_notifications_checkbox">Pushnotificaties</string>
|
||||
<string name="push_notifications">Pushnotificaties</string>
|
||||
<string name="push_notifications_sum">Stel je push-notificaties in</string>
|
||||
<string name="preference_push_you_won_challenge">Je hebt een uitdaging gewonnen!</string>
|
||||
|
|
@ -181,25 +181,24 @@
|
|||
<string name="sidebar_help">Help & FAQ</string>
|
||||
<string name="complete_tutorial">Begrepen!</string>
|
||||
<string name="dismiss_tutorial">Herinner me opnieuw</string>
|
||||
<string name="intro_1_title">Welkom bij Habitica</string>
|
||||
<string name="intro_1_description">Sluit je aan bij meer dan %s mensen en heb plezier terwijl je dingen gedaan krijgt. Maak een avatar en houd je taken in de echte wereld bij.</string>
|
||||
<string name="intro_2_title">Vooruitgang in het spel = Vooruitgang in je leven</string>
|
||||
<string name="intro_2_description">Speel functies vrij in het spel door je echte taken af te strepen. Verdien uitrusting, huisdieren en meer als beloning voor het bereiken van je doelen.</string>
|
||||
<string name="intro_3_title">Word sociaal en vecht tegen monsters</string>
|
||||
<string name="intro_1_subtitle">Welkom bij</string>
|
||||
<string name="intro_1_title">Habitica</string>
|
||||
<string name="intro_1_description">Het is tijd om plezier te maken terwijl je dingen gedaan krijgt. Doe mee met %s andere mensen die hun leven met iedere taak beteren.</string>
|
||||
<string name="intro_2_subtitle">Vooruitgang in het spel</string>
|
||||
<string name="intro_2_title">Vooruitgang in je leven</string>
|
||||
<string name="intro_2_description">Ontgrendel functies in het spel door taken in je echte leven af te vinken. Verdien uitrusting, huisdieren en meer als beloning voor het bereiken van je doelen.</string>
|
||||
<string name="intro_3_subtitle">Word sociaal</string>
|
||||
<string name="intro_3_title">Vecht tegen monsters</string>
|
||||
<string name="intro_3_description">Houd je doelen op peil met hulp van je vrienden. Ondersteun elkaar in het leven en vecht samen terwijl je steeds beter wordt.</string>
|
||||
<string name="intro_finish_button">Ga van start</string>
|
||||
<string name="intro_finish_button">Laten we beginnen!</string>
|
||||
<string name="previous_button">Vorige</string>
|
||||
<string name="next_button">Volgende</string>
|
||||
<string name="skip_button">Sla over</string>
|
||||
<string name="setup_welcome_description">Welkom in Habitica, waar vooruitgang in het spel je leven zal verbeteren! Terwijl je echte doelen bereikt, verdien je uitrusting, huisdieren, queestes en meer.</string>
|
||||
<string name="setup_welcome_title">Welkom</string>
|
||||
<string name="avatar_setup_description">Als eerste heb je een avatar nodig die jou vertegenwoordigt in het spel! De dingen die je in het echte leven doet zullen een effect hebben op de gezondheid, het niveau en het goud van je avatar.</string>
|
||||
<string name="task_setup_description">Geweldig! Laten we nu wat taken klaar zetten zodat je kan beginnen met het verdienen van ervaringspunten en goud.
|
||||
|
||||
Om te beginnen, welke delen van je leven wil je verbeteren?</string>
|
||||
<string name="avatar_setup_description">Dus, hoe wil jij er uit zien? Geen zorgen, je kan dit later veranderen.</string>
|
||||
<string name="setup_group_work">Werk</string>
|
||||
<string name="setup_group_exercise">Sport</string>
|
||||
<string name="setup_group_heathWellness">Gezondheid + Welzijn</string>
|
||||
<string name="setup_group_school">School</string>
|
||||
<string name="setup_group_teams">Teams</string>
|
||||
<string name="setup_group_chores">Klusjes</string>
|
||||
|
|
@ -461,6 +460,10 @@ Om te beginnen, welke delen van je leven wil je verbeteren?</string>
|
|||
<string name="challenge_details">Uitdaging details</string>
|
||||
<string name="challenge_leave_title">Verlaat uitdaging</string>
|
||||
<string name="challenge_leave_text">Weet zeker dat je de uitdaging \"%s\" wilt verlaten?</string>
|
||||
<string name="challenge_remove_tasks_title">Verwijder taken</string>
|
||||
<string name="challenge_remove_tasks_text">Wil je de taken verwijderen?</string>
|
||||
<string name="remove_tasks">Verwijder</string>
|
||||
<string name="keep_tasks">Houden</string>
|
||||
<string name="my_challenges">Mijn uitdagingen</string>
|
||||
<string name="public_challenges">Publiek</string>
|
||||
<string name="challenges">Uitdagingen</string>
|
||||
|
|
@ -491,4 +494,25 @@ Om te beginnen, welke delen van je leven wil je verbeteren?</string>
|
|||
<string name="notification_mystery_item">Je opent de doos en vind %s!</string>
|
||||
<string name="checkInRewardEarned">Je ontvangt een %1$s als beloning voor je toewijding bij het beteren van je leven.</string>
|
||||
<string name="nextPrizeUnlocks" tools:ignore="PluralsCandidate">Je volgende prijs wordt vrijgespeeld na %1$d check-ins.</string>
|
||||
<string name="pending_approval">afwachten op goedkeuring</string>
|
||||
<string name="filters">Filters</string>
|
||||
<string name="done">Klaar</string>
|
||||
<string name="group_tasks_edit_description">Groepstaken konden niet bewerkt worden.</string>
|
||||
<string name="group_tasks_edit_title">Kan deze taak niet bewerken</string>
|
||||
<string name="groups">Groepen</string>
|
||||
<string name="all">Alle</string>
|
||||
<string name="none">Geen</string>
|
||||
<string name="owned">Van jou</string>
|
||||
<string name="not_owned">Niet van jou</string>
|
||||
<string name="new_game">Nieuw\nSpel</string>
|
||||
<string name="login_btn_fb">Aanmelden met Facebook</string>
|
||||
<string name="login_btn_google">Aanmelden met Google</string>
|
||||
<string name="action_back">Terug</string>
|
||||
<string name="welcome_text">Oh, jij bent vast nieuw hier. Ik ben Justin, ik zal je gids zijn in Habitica.\n\nOm te beginnen zul je een avatar moeten maken.</string>
|
||||
<string name="randomize">Willekeurig</string>
|
||||
<string name="avatar_extras">Extra\'s</string>
|
||||
<string name="avatar_skin_color">Huidskleur</string>
|
||||
<string name="avatar_hair_color">Haarkleur</string>
|
||||
<string name="avatar_glasses">Bril</string>
|
||||
<string name="avatar_wheelchair">Rolstoel</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -181,25 +181,22 @@
|
|||
<string name="sidebar_help">Pomoc i FAQ</string>
|
||||
<string name="complete_tutorial">Jasne!</string>
|
||||
<string name="dismiss_tutorial">Przypomnij mi później</string>
|
||||
<string name="intro_1_title">Witaj w Habitica</string>
|
||||
<string name="intro_1_description">Dołącz do ponad %s ludzi bawiących się podczas wypełniania swoich zadań. Stwórz awatar i śledź swoje zadania w życiu codziennym.</string>
|
||||
<string name="intro_2_title">Awans w grze = Awans w życiu</string>
|
||||
<string name="intro_2_description">Odblokuj właściwości gry poprzez wypełnianie zadań w życiu. Zdobądź broń, chowańce i wiele innych nagród za zrealizowanie celów!</string>
|
||||
<string name="intro_3_title">Połącz siły w innymi graczami i pokonuj potwory</string>
|
||||
<string name="intro_1_subtitle">Witaj w</string>
|
||||
<string name="intro_1_title">Habitica</string>
|
||||
<string name="intro_2_subtitle">Postęp w grze</string>
|
||||
<string name="intro_2_title">Postęp w życiu</string>
|
||||
<string name="intro_2_description">Odblokuj cechy w grze przez wykonywanie twoich zadań z realnego życia. Zdobywaj broń, chowańce i znacznie więcej za realizacje swoich celów.</string>
|
||||
<string name="intro_3_title">Walcz z potworami</string>
|
||||
<string name="intro_3_description">Zmierzaj do swoich celów z pomocą przyjaciół. Wspierajcie się wzajemnie w życiu i w walce, aby wspólnie się udoskonalać!</string>
|
||||
<string name="intro_finish_button">Zaczynamy</string>
|
||||
<string name="intro_finish_button">Zaczynajmy!</string>
|
||||
<string name="previous_button">Poprzedni</string>
|
||||
<string name="next_button">Następny</string>
|
||||
<string name="skip_button">Pomiń</string>
|
||||
<string name="setup_welcome_description">Witaj w Habitice, gdzie postęp w grze ulepszy Twoje życie! Osiągając cele w prawdziwym świecie, odblokowujesz ekwipunek, chowańce, misje i wiele więcej.</string>
|
||||
<string name="setup_welcome_title">Witaj</string>
|
||||
<string name="avatar_setup_description">Na początek, potrzebujesz awatara - swojego odpowiednika w grze! To, co robisz w prawdziwym życiu, ma wpływ na zdrowie, poziom doświadczenia i złoto Twojego awatara.</string>
|
||||
<string name="task_setup_description">Wspaniale! Teraz ustalmy Twoje zadania, żebyś zaczął zdobywać doświadczenie i złoto.
|
||||
|
||||
Od czego chcesz zacząć poprawiać swoje życie?</string>
|
||||
<string name="avatar_setup_description">Więc, jak chciałbyś wyglądać. Nie obawiaj się, możesz to później zmienić.</string>
|
||||
<string name="setup_group_work">Praca</string>
|
||||
<string name="setup_group_exercise">Ćwiczenia</string>
|
||||
<string name="setup_group_heathWellness">Zdrowie i dobre samopoczucie</string>
|
||||
<string name="setup_group_school">Szkoła</string>
|
||||
<string name="setup_group_teams">Zespoły</string>
|
||||
<string name="setup_group_chores">Obowiązki domowe</string>
|
||||
|
|
@ -447,6 +444,10 @@ Od czego chcesz zacząć poprawiać swoje życie?</string>
|
|||
<string name="challenge_details">Szczegóły wyzwania</string>
|
||||
<string name="challenge_leave_title">Opuść wyzwanie.</string>
|
||||
<string name="challenge_leave_text">Jesteś pewien, że chcesz opuścić wyzwanie “%s”?</string>
|
||||
<string name="challenge_remove_tasks_title">Usuń zadania</string>
|
||||
<string name="challenge_remove_tasks_text">Czy chcesz usunąć zadania</string>
|
||||
<string name="remove_tasks">Usuń</string>
|
||||
<string name="keep_tasks">Zachowaj</string>
|
||||
<string name="my_challenges">Moje wyzwania</string>
|
||||
<string name="public_challenges">Publiczne</string>
|
||||
<string name="challenges">Wyzwania</string>
|
||||
|
|
@ -474,4 +475,31 @@ Od czego chcesz zacząć poprawiać swoje życie?</string>
|
|||
<string name="open">Otwórz</string>
|
||||
<string name="notification_mystery_item">Otwórz pudełko i znajdź %s!</string>
|
||||
<string name="checkInRewardEarned">Zdobyłeś %1$s jako nagrodę za poświęcenie w poprawie swojego życia.</string>
|
||||
<string name="pending_approval">oczekująca aprobata</string>
|
||||
<string name="filters">Filtry</string>
|
||||
<string name="done">Zrobione</string>
|
||||
<string name="group_tasks_edit_description">Grupowe zadanie nie mogą być edytowane.</string>
|
||||
<string name="group_tasks_edit_title">Nie możesz edytować tego zadania</string>
|
||||
<string name="groups">Grupy</string>
|
||||
<string name="all">Wszystkie</string>
|
||||
<string name="none">Żadne</string>
|
||||
<string name="owned">Posiadane</string>
|
||||
<string name="not_owned">Nieposiadane</string>
|
||||
<string name="new_game">Nowa\nGra</string>
|
||||
<string name="login_btn_fb">Zaloguj z Facebookiem</string>
|
||||
<string name="login_btn_google">Zaloguj z Google</string>
|
||||
<string name="action_back">Wróć</string>
|
||||
<string name="randomize">Losowy</string>
|
||||
<string name="avatar_extras">Dodatki</string>
|
||||
<string name="avatar_skin_color">Kolor skóry </string>
|
||||
<string name="avatar_hair_color">Kolor włosów</string>
|
||||
<string name="avatar_hair_bangs">Grzywka</string>
|
||||
<string name="avatar_hair_ponytail">Koński ogon</string>
|
||||
<string name="avatar_glasses">Okulary</string>
|
||||
<string name="avatar_wheelchair">Wózek</string>
|
||||
<string name="weak">Słaby</string>
|
||||
<string name="strong">Silny</string>
|
||||
<string name="gray">Szary</string>
|
||||
<string name="dated">Przestarzały</string>
|
||||
<string name="setuP_group_other">Pozostałe</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -181,25 +181,14 @@
|
|||
<string name="sidebar_help">Помощь и ЧаВо</string>
|
||||
<string name="complete_tutorial">Есть!</string>
|
||||
<string name="dismiss_tutorial">Напомнить позже</string>
|
||||
<string name="intro_1_title">Добро пожаловать в Habitica</string>
|
||||
<string name="intro_1_description">Присоединитесь к более %s участникам, которые развлекаются и добиваются успехов. Создайте аватар и отслеживайте ваши задачи.</string>
|
||||
<string name="intro_2_title">Прогресс в игре = Прогресс в жизни</string>
|
||||
<string name="intro_2_description">Разблокируйте функции в игре, выполняя реальные задачи. Зарабатывайте оружие, питомцев и многое другое в качестве награды!</string>
|
||||
<string name="intro_3_title">Общайтесь и сражайтесь с монстрами</string>
|
||||
<string name="intro_3_description">Добивайтесь поставленнх целей с помощью друзей. Поддерживайте друг друга в реальной жизни и в сражении, делая свою жизнь лучше!</string>
|
||||
<string name="intro_finish_button">Начать</string>
|
||||
<string name="previous_button">Назад</string>
|
||||
<string name="next_button">Далее</string>
|
||||
<string name="skip_button">Пропустить</string>
|
||||
<string name="setup_welcome_description">Добро пожаловать в Habitica, где продвижение в игре помогает вам в рельной жизни! Выполняя реальные задачи, вы разблокируете снаряжение, питомцев, квесты и многое другое.</string>
|
||||
<string name="setup_welcome_title">Добро пожаловать</string>
|
||||
<string name="avatar_setup_description">Для начала вам необходим игровой персонаж, который будет представлять вас. Ваши действия в реальной жизни будут влиять на здоровье персонажа, на его уровень и количество золота.</string>
|
||||
<string name="task_setup_description">Великолепно! Теперь давайте настроим задачи, чтобы вы могли начать получать опыт и золото.
|
||||
|
||||
Для начала, какие стороны своей жизни вы хотели бы улучшить?</string>
|
||||
<string name="setup_group_work">Работа</string>
|
||||
<string name="setup_group_exercise">Тренировки</string>
|
||||
<string name="setup_group_heathWellness">Здоровье + Благополучие</string>
|
||||
<string name="setup_group_school">Школа</string>
|
||||
<string name="setup_group_teams">Команды</string>
|
||||
<string name="setup_group_chores">Домашние дела</string>
|
||||
|
|
@ -434,6 +423,7 @@
|
|||
<string name="subscription">Подписка</string>
|
||||
<string name="active">Активный</string>
|
||||
<string name="cancel_subscription">Отменить подписку</string>
|
||||
<string name="cancel_subscription_google.description">Больше не хотите использовать подписку? При желании можете отписаться в разделе \"Мои приложения\" в Google Play Store.</string>
|
||||
<string name="cancel_subscription_notgoogle.description">Отменяете подписку? Из-за способа оплаты вы можете отменить подписку только через веб-сайт. Нажмите кнопку ниже, чтобы открыть страницу в браузере!</string>
|
||||
<string name="visit_habitica_website">Посетите сайт Habitica</string>
|
||||
<string name="current_bonuses">Текущие бонусы</string>
|
||||
|
|
@ -482,4 +472,6 @@
|
|||
<string name="notification_mystery_item">Вы открываете коробку и находите %s!</string>
|
||||
<string name="checkInRewardEarned">Вы заработали %1$s в качестве награды за преданность к улучшению жизни.</string>
|
||||
<string name="nextPrizeUnlocks" tools:ignore="PluralsCandidate">Ваш следующий приз будет доступен после %1$d входа в игру</string>
|
||||
<string name="group_tasks_edit_description">Групповые задания не могут быть редактированы.</string>
|
||||
<string name="group_tasks_edit_title">Нельзя редактировать это задание</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -181,25 +181,24 @@
|
|||
<string name="sidebar_help">Yardım & SSS</string>
|
||||
<string name="complete_tutorial">Anladım!</string>
|
||||
<string name="dismiss_tutorial">Daha sonra hatırlat</string>
|
||||
<string name="intro_1_title">Habitica\'ya Hoş Geldin</string>
|
||||
<string name="intro_1_description">%s\'dan fazla insanın bir şeyleri tamamlarken eğlenmesine katıl. Bir avatar oluştur ve gerçek hayatta ki görevlerini takip et.</string>
|
||||
<string name="intro_2_title">Oyun Gelişimi = Yaşam Gelişimi</string>
|
||||
<string name="intro_2_description">Gerçek hayatınızdaki görevleri tamamlayarak oyun içindeki özelliklerin kilidini açın. Zırh, evcil hayvan ve daha fazlasını hedeflerinizle tanıştığınızda ödül olarak kazanın.</string>
|
||||
<string name="intro_3_title">Sosyalleş ve Canavarlarla Savaş</string>
|
||||
<string name="intro_1_subtitle">Hoş Geldin</string>
|
||||
<string name="intro_1_title">Habitica\'ya</string>
|
||||
<string name="intro_1_description">Bir şeyleri tamamlarken artık eğlenebilirsin. %s\'dan fazla kişinin hayatlarını birer işe odaklanarak geliştirmelerine katıl. </string>
|
||||
<string name="intro_2_subtitle">Oyun gelişimi</string>
|
||||
<string name="intro_2_title">Hayatta gelişim</string>
|
||||
<string name="intro_2_description">Gerçek hayatındaki işlerini tamamlayarak oyun içindeki özellikleri aç. Zırh, evcil hayvan ve daha fazlasını hedeflerine ulaştığında ödül olarak kazan.</string>
|
||||
<string name="intro_3_subtitle">Sosyalleş</string>
|
||||
<string name="intro_3_title">Canavarlarla Savaş</string>
|
||||
<string name="intro_3_description">Hedeflerini arkadaşlarından yardım alarak devam ettir. Hayatta ve savaşlarda birbirinizi birlikte geliştirerek destek olun!</string>
|
||||
<string name="intro_finish_button">Başla</string>
|
||||
<string name="intro_finish_button">Hadi başlayalım!</string>
|
||||
<string name="previous_button">Önceki</string>
|
||||
<string name="next_button">Sonraki</string>
|
||||
<string name="skip_button">Atla</string>
|
||||
<string name="setup_welcome_description">Habitica\'ya hoşgeldin, oyunda ilerledikçe gerçek hayatını da geliştireceksin! Gerçek hayat hedeflerine ulaştıkça, ekipman, evcil hayvan, görevler ve dahasını da ortaya çıkaracaksın.</string>
|
||||
<string name="setup_welcome_title">Hoş Geldin</string>
|
||||
<string name="avatar_setup_description">Öncelikle, oyunda sizi temsil edecek bir avatar\'a ihtiyacınız var. Gerçek hayatta yaptıklarınız avatar\'ınızın sağlığını, deneyim seviyesini ve altınlarını etkiliyecektir.</string>
|
||||
<string name="task_setup_description">Müthiş! Şimdi görevlerinizi ayarlayarak deneyim ve altın kazanmaya başlayabilirsiniz.
|
||||
|
||||
Başlarken, hayatında neyi geliştirmek istiyorsun?</string>
|
||||
<string name="avatar_setup_description">Nasıl görünmek istersin? Dert etme, daha sonra bunları değiştirebilirsin.</string>
|
||||
<string name="setup_group_work">İş</string>
|
||||
<string name="setup_group_exercise">Egzersiz</string>
|
||||
<string name="setup_group_heathWellness">Sağlık + Kaliteli Yaşam</string>
|
||||
<string name="setup_group_school">Okul</string>
|
||||
<string name="setup_group_teams">Takımlar</string>
|
||||
<string name="setup_group_chores">Günlük İşler</string>
|
||||
|
|
@ -431,6 +430,7 @@ Başlarken, hayatında neyi geliştirmek istiyorsun?</string>
|
|||
<string name="subscribe.listitem1.description">Tüccar İskender artık sana tanesi 20 altına elmas satıcak!\n\nAylık sevkiyatı başlangıçta aylık 25 Elmas ile sınırlıdır, ama ardışık abonelik süresine göre artabilir.\n\nElmas limiti her üç aylık ardışık abonelik için 5 artar, toplam üst limit olan aylık 50 Elmasa kadar artabilir!</string>
|
||||
<string name="subscribe.listitem2.description">Her ay avatarın için özel görsel bir eşya alırsın!\n\nAyrıca, her üç aylık ardışık abonelik için, Gizemli Zaman Yolcuları sana tarihi (ve fütürist!) görsel eşyalara erişim sağlar.</string>
|
||||
<string name="subscribe.listitem3.description">Tamamlanmış Yapılacak İş ve iş geçmişlerine daha uzun süre erişim sağlar.</string>
|
||||
<string name="subscribe.listitem4.description">İki katı ganimet limiti tamamladığın işlerinden her gün daha fazla eşya almana ve ahırını daha hızlı tamamlamana yardımcı olur!</string>
|
||||
<string name="subscribe1month.gemcap">Elmas limiti 25\'le başlar</string>
|
||||
<string name="subscribe3month.gemcap">Elmas limiti 30\'a çıkar</string>
|
||||
<string name="subscribe6month.gemcap">Elmas limiti 35\'e çıkar</string>
|
||||
|
|
@ -440,6 +440,8 @@ Başlarken, hayatında neyi geliştirmek istiyorsun?</string>
|
|||
<string name="subscription">Abonelik</string>
|
||||
<string name="active">Etkin</string>
|
||||
<string name="cancel_subscription">Aboneliği İptal Et</string>
|
||||
<string name="cancel_subscription_google.description">Artık abone olmak istemiyor musun? Google Play Store\'un \"Uygulamalarım\" bölümünde aboneliği iptal etme seçeneğini bulabilirsin.</string>
|
||||
<string name="cancel_subscription_notgoogle.description">Artık abone olmak istemiyor musun? Ödeme yönteminden dolayı, yalnızca web sitesi üzerinden aboneliğini iptal edebilirsin. Siteyi tarayıcında açmak için aşağıdaki düğmeyi tıkla!</string>
|
||||
<string name="visit_habitica_website">Habitica Websitesini Ziyaret Et</string>
|
||||
<string name="current_bonuses">Sağlanan Faydalar</string>
|
||||
<string name="months_subscribed">Abone olunan aylar</string>
|
||||
|
|
@ -458,6 +460,10 @@ Başlarken, hayatında neyi geliştirmek istiyorsun?</string>
|
|||
<string name="challenge_details">Mücadelele Detayları</string>
|
||||
<string name="challenge_leave_title">Mücadeleden Ayrıl</string>
|
||||
<string name="challenge_leave_text">\"%s\" Mücadelesinden ayrılmak istediğinden emin misin?</string>
|
||||
<string name="challenge_remove_tasks_title">İşleri sil</string>
|
||||
<string name="challenge_remove_tasks_text">İşleri gerçekten silmek istiyor musun?</string>
|
||||
<string name="remove_tasks">Sil</string>
|
||||
<string name="keep_tasks">Tut</string>
|
||||
<string name="my_challenges">Benim Mücadelelerim</string>
|
||||
<string name="public_challenges">Herkese Açık</string>
|
||||
<string name="challenges">Mücadeleler</string>
|
||||
|
|
@ -470,9 +476,12 @@ Başlarken, hayatında neyi geliştirmek istiyorsun?</string>
|
|||
<string name="challenge">Mücadele</string>
|
||||
<string name="go_to_challenge">Mücadeleye Git</string>
|
||||
<string name="not_part_of_a_challenge">Henüz herhangi bir Mücadele katılımcısı değilsin!</string>
|
||||
<string name="join_a_challenge">Listene seçili işler eklemek için bir Mücadeleye katıl, sonra da başarılar ve hatta elmaslar kazanmak için diğer Habiticalılarla yarış!</string>
|
||||
<string name="check_the_public_challenge_tab">\"Herkese Açık\" sekmesine basarak kullanıcılar tarafından yaratılmış Mücadelelerden sana en uygun olanını bul!</string>
|
||||
<string name="add_reminder">Hatırlatıcı Ekle</string>
|
||||
<string name="warning">Uyarı</string>
|
||||
<string name="open_settings">Ayarları Aç</string>
|
||||
<string name="dont_keep_activities_warning">Görünüşe göre Geliştirici seçeneğinde \ \"Etkinlikleri saklamayın \\" etkin. Şu anda bu seçenek, habitica uygulamasıyla ilgili sorunlara neden oluyor, bu nedenle devre dışı bırakılmasını öneriyoruz.</string>
|
||||
<string name="inbox">Mesaj Kutusu</string>
|
||||
<string name="FAQ">Sıkça Sorulan Sorular</string>
|
||||
<string name="special">Özel</string>
|
||||
|
|
@ -486,6 +495,32 @@ Başlarken, hayatında neyi geliştirmek istiyorsun?</string>
|
|||
<string name="checkInRewardEarned">Kendini hayatını geliştirmeye adadığın için ödül olarak %1$s kazandın.</string>
|
||||
<string name="nextPrizeUnlocks" tools:ignore="PluralsCandidate">Bir sonraki ödülün %1$d Girişten sonra açılacak</string>
|
||||
<string name="pending_approval">onay bekleniyor</string>
|
||||
<string name="filters">Filtreler</string>
|
||||
<string name="done">Tamam</string>
|
||||
<string name="group_tasks_edit_description">Grup işleri düzenlenemez.</string>
|
||||
<string name="group_tasks_edit_title">Bu işi düzenleyemezsin</string>
|
||||
<string name="groups">Gruplar</string>
|
||||
<string name="all">Hepsi</string>
|
||||
<string name="none">Hiçbiri</string>
|
||||
<string name="owned">Sahip olunan</string>
|
||||
<string name="not_owned">Sahip olunmayan</string>
|
||||
<string name="new_game">Yeni\nOyun</string>
|
||||
<string name="login_btn_fb">Facebook ile giriş yap</string>
|
||||
<string name="login_btn_google">Google ile giriş yap</string>
|
||||
<string name="action_back">Geri</string>
|
||||
<string name="welcome_text">Ah, burada yeni olmalısın. Ben Justin, Habitica\'da ki rehberin olacağım.\n\nBaşlamak için, bir avatar yaratman gerekecek.</string>
|
||||
<string name="randomize">Rastgele</string>
|
||||
<string name="avatar_extras">Ekstralar</string>
|
||||
<string name="avatar_skin_color">Ten Rengi</string>
|
||||
<string name="avatar_hair_color">Saç Rengi</string>
|
||||
<string name="avatar_hair_bangs">Kahkül</string>
|
||||
<string name="avatar_hair_ponytail">Atkuyruğu</string>
|
||||
<string name="avatar_glasses">Gözlükler</string>
|
||||
<string name="avatar_wheelchair">Tekerlekli Sandalye</string>
|
||||
<string name="weak">Zayıf</string>
|
||||
<string name="strong">Güçlü</string>
|
||||
<string name="gray">Gri</string>
|
||||
<string name="dated">Tarihli</string>
|
||||
<string name="completed">Tamamlanmış</string>
|
||||
<string name="setuP_group_other">Diğer</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
<string name="profile_pets_and_mounts">宠物 & 坐骑</string>
|
||||
<string name="profile_pets_found">发现的宠物</string>
|
||||
<string name="profile_mounts_tamed">驯养的坐骑</string>
|
||||
<string name="profile_loading_data">加在成员数据</string>
|
||||
<string name="profile_loading_data">读取成员数据</string>
|
||||
<string name="profile_send_message_to">给%s发送信息</string>
|
||||
<string name="profile_message_sent_to">发送给%s的信息</string>
|
||||
<string name="profile_level">级别:</string>
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@
|
|||
<string name="emailAddress">电子邮件地址</string>
|
||||
<string name="confirmpassword">确认密码</string>
|
||||
<string name="logout">注销</string>
|
||||
<string name="logout_description">從你的帳號登出</string>
|
||||
<string name="logout_description">从你的账号登出</string>
|
||||
<string name="account_details_sum">账号信息</string>
|
||||
<string name="account_details">账号信息</string>
|
||||
<string name="LoginActivityName">欢迎</string>
|
||||
|
|
@ -87,8 +87,8 @@
|
|||
<string name="hard">困难</string>
|
||||
<string name="start_date">开始日期</string>
|
||||
<string name="positive_habit_form">正面的(+)</string>
|
||||
<string name="negative_habit_form">负面的 (-)</string>
|
||||
<string name="checklist">检查蛋</string>
|
||||
<string name="negative_habit_form">负面的(-)</string>
|
||||
<string name="checklist">检查单</string>
|
||||
<string name="reminders">提醒</string>
|
||||
<string name="actions">动作</string>
|
||||
<string name="attributes">属性</string>
|
||||
|
|
@ -181,25 +181,22 @@
|
|||
<string name="sidebar_help">帮助 & FAQ</string>
|
||||
<string name="complete_tutorial">成功!</string>
|
||||
<string name="dismiss_tutorial">再次提醒我</string>
|
||||
<string name="intro_1_title">欢迎来到Habitica</string>
|
||||
<string name="intro_1_description">和 %s 玩家一起,用游戏战胜拖延症!你可以创建一个账户,用它来跟踪你生活中的点滴琐事。</string>
|
||||
<string name="intro_2_title">生活即游戏!</string>
|
||||
<string name="intro_1_subtitle">欢迎来到</string>
|
||||
<string name="intro_1_title">Habitica</string>
|
||||
<string name="intro_2_subtitle">游戏进度</string>
|
||||
<string name="intro_2_title">生活进度</string>
|
||||
<string name="intro_2_description">通过完成现实生活中的任务来解锁游戏内容。得到装备、宠物和更多的奖励来促使你完成你的目标吧!</string>
|
||||
<string name="intro_3_title">与小伙伴一起,并肩击退怪兽</string>
|
||||
<string name="intro_3_subtitle">获得社交</string>
|
||||
<string name="intro_3_title">击退怪物</string>
|
||||
<string name="intro_3_description">和朋友们一起为目标努力吧。在生活和战斗中互相支持,共同进步!</string>
|
||||
<string name="intro_finish_button">开始探险之旅</string>
|
||||
<string name="intro_finish_button">让我们开始吧!</string>
|
||||
<string name="previous_button">上一页</string>
|
||||
<string name="next_button">下一页</string>
|
||||
<string name="skip_button">跳过</string>
|
||||
<string name="setup_welcome_description">欢迎来到Habitica,在游戏中打怪升级的同时改善自己的真实生活。完成现实生活中的目标,解锁大量装备、宠物、任务卷轴,更多特色等你探索。</string>
|
||||
<string name="setup_welcome_title">欢迎你</string>
|
||||
<string name="avatar_setup_description">首先,你需要创建一个角色来代表你自己。你在现实生活中的行动会影响到你的角色的生命值、经验值以及金钱。</string>
|
||||
<string name="task_setup_description">太棒了!现在开始设定你的任务,开始赚取经验和金币吧。
|
||||
|
||||
首先,你想改善生活中的哪一部分呢?</string>
|
||||
<string name="setup_group_work">工作</string>
|
||||
<string name="setup_group_exercise">运动</string>
|
||||
<string name="setup_group_heathWellness">健康</string>
|
||||
<string name="setup_group_school">学校</string>
|
||||
<string name="setup_group_teams">团队</string>
|
||||
<string name="setup_group_chores">杂务</string>
|
||||
|
|
@ -277,11 +274,11 @@
|
|||
<string name="quests">任务</string>
|
||||
<string name="pets">宠物</string>
|
||||
<string name="mounts">坐骑</string>
|
||||
<string name="armoireEquipment">您在魔法衣橱里找到了一件稀有装备:%s!恭喜你!</string>
|
||||
<string name="armoireEquipment">你在魔法衣橱里找到了一件稀有装备:%s!恭喜你!</string>
|
||||
<string name="armoireFood">你在魔法衣橱里找到了%1$s %2$s。它是用来做什么的?</string>
|
||||
<string name="armoireExp">你和大衣柜展开了殊死搏斗,并赢得了经验,尝尝这个吧!</string>
|
||||
<string name="armoireNotesFull">拉开 魔法衣橱 来获得随机的特殊装备,经验或者食物!剩余的装备:%d</string>
|
||||
<string name="armoireLastItem">您在魔法衣橱里找到了最后一件稀有装备。</string>
|
||||
<string name="armoireLastItem">你在魔法衣橱里找到了最后一件稀有装备。</string>
|
||||
<string name="armoireNotesEmpty">每个月的第一个星期这里都会有新的装备,到时记得常点进来获得经验和食物!</string>
|
||||
<string name="sell">出售 (%d金币)</string>
|
||||
<string name="hatch_with_potion">用孵化药水孵化</string>
|
||||
|
|
@ -310,10 +307,10 @@
|
|||
<string name="empty_items">你没有拥有任何的%s</string>
|
||||
<string name="user_level">Lvl %d</string>
|
||||
<string name="user_level_with_class">Lvl %1$d %2$s</string>
|
||||
<string name="warrior">戰士</string>
|
||||
<string name="rogue">盜賊</string>
|
||||
<string name="mage">法師</string>
|
||||
<string name="healer">醫師</string>
|
||||
<string name="warrior">战士</string>
|
||||
<string name="rogue">盗贼</string>
|
||||
<string name="mage">法师</string>
|
||||
<string name="healer">医师</string>
|
||||
<string name="warrior_description">战士们会有更大的机率触发暴击并在完成任务时随机获得额外的金币,经验和掉率。他们还能对boss造成严重的伤害。如果你希望获得随机性的奖励,或者在boss任务中重创boss,来玩战士吧!</string>
|
||||
<string name="mage_description">法师非常善于学习,获得经验值和升级比其他职业快。他们也会获得大量的魔力值来使用一些特殊的法术。如果你喜欢玩得有策略性,或者你强烈地希望升级解锁更多的游戏内容,来玩法师吧!</string>
|
||||
<string name="rogue_description">盗贼热衷于积累财富,比其他人获得更多的金币,还擅长寻找随机物品。他们标志性的潜行技能使得他们能够躲避未完成的日常带来的伤害。如果你希望获得更多的奖励,成就,掉落以及徽章,来玩盗贼吧!</string>
|
||||
|
|
@ -328,7 +325,7 @@
|
|||
<string name="dialog_go_back">返回</string>
|
||||
<string name="opt_out_confirmation">你确定要退出吗?</string>
|
||||
<string name="change_class">更换你的职业</string>
|
||||
<string name="change_class_description">转换你的职业病重置属性点需要3颗宝石。你能通过网页分配属性点</string>
|
||||
<string name="change_class_description">更换你的职业并重置属性点需要3颗宝石。你能通过网页分配属性点</string>
|
||||
<string name="enable_class">开启职业系统</string>
|
||||
<string name="changing_class_progress">更换职业</string>
|
||||
<string name="by_email">通过电子邮件</string>
|
||||
|
|
@ -413,7 +410,7 @@
|
|||
<string name="open_market">打开市场</string>
|
||||
<string name="cds_description">你的每日任务将会在 %1$s 后第一次打开 Habitica 时进行结算并被重置。请确保在此之前完成所有的每日任务!</string>
|
||||
<string name="AudioTheme_title">声音主题</string>
|
||||
<string name="AudioTheme_summary">更高 Habitica 的声音主题</string>
|
||||
<string name="AudioTheme_summary">更改 Habitica 的声音主题</string>
|
||||
<!--Login Incentives-->
|
||||
<string name="see_you_tomorrow">明天再见!</string>
|
||||
<string name="belongs_to_challenge">来自挑战</string>
|
||||
|
|
@ -428,6 +425,10 @@
|
|||
<string name="subscriptions">捐助</string>
|
||||
<string name="subscription_duration">每 %s 重复出现</string>
|
||||
<string name="subscribe">捐助</string>
|
||||
<string name="subscribe.listitem1.description">商人亚历山大可以按每个宝石20金币的价格向你出售宝石!\n\n他每个月的初始进货量是25个宝石,进货量会随着您的捐助长度增长!\n\n 每三个月宝石上限就会增加5,直到最大值1个月50颗宝石!</string>
|
||||
<string name="subscribe.listitem2.description">每个月你将会收到一件独特的角色饰品!另外,每连续捐助三个月,神秘的时间旅行者将授予你得到过去(和将来)的饰品的资格。</string>
|
||||
<string name="subscribe.listitem3.description">使完成的待办事项和任务的历史记录保留更长时间</string>
|
||||
<string name="subscribe.listitem4.description">双倍掉落让你每天能够从完成的任务中得到更多的物品,帮助你更快地驯服坐骑!</string>
|
||||
<string name="subscribe1month.gemcap">宝石上限起始为25</string>
|
||||
<string name="subscribe3month.gemcap">宝石上限增加到30</string>
|
||||
<string name="subscribe6month.gemcap">宝石上限增加到35</string>
|
||||
|
|
@ -437,6 +438,7 @@
|
|||
<string name="subscription">捐助</string>
|
||||
<string name="active">活跃的</string>
|
||||
<string name="cancel_subscription">取消订阅</string>
|
||||
<string name="cancel_subscription_google.description">不想再继续捐助了?你可以在Google应用商店里找到“我的应用程序”部分里找到退订选项。</string>
|
||||
<string name="cancel_subscription_notgoogle.description">不想再继续捐助了?由于您的付款方式,您只能通过这个网站停止捐助。点击下面的按钮,在您的浏览器中打开站点。</string>
|
||||
<string name="visit_habitica_website">访问Habitica的网站</string>
|
||||
<string name="current_bonuses">当前奖励</string>
|
||||
|
|
@ -452,9 +454,14 @@
|
|||
<string name="twelve_months">12个月</string>
|
||||
<string name="subscribe_prompt_thanks">通过捐助你会获得这些好处:</string>
|
||||
<string name="subscription_status">捐助状态</string>
|
||||
<string name="byLeader">由 %s</string>
|
||||
<string name="challenge_details">挑战细节</string>
|
||||
<string name="challenge_leave_title">退出挑战</string>
|
||||
<string name="challenge_leave_text">你是否确定想放弃这个挑战“%s”?</string>
|
||||
<string name="challenge_remove_tasks_title">删除任务</string>
|
||||
<string name="challenge_remove_tasks_text">你确定要删除这个任务吗?</string>
|
||||
<string name="remove_tasks">删除</string>
|
||||
<string name="keep_tasks">保持</string>
|
||||
<string name="my_challenges">我的挑战</string>
|
||||
<string name="public_challenges">公共挑战</string>
|
||||
<string name="challenges">享受挑战吧!</string>
|
||||
|
|
@ -472,6 +479,7 @@
|
|||
<string name="add_reminder">增加提醒</string>
|
||||
<string name="warning">警告</string>
|
||||
<string name="open_settings">打开设置</string>
|
||||
<string name="dont_keep_activities_warning">看来您将开发者选项 \"不要保留活动” 英语: \Don\'t keep Activities\ 打开了。启用这个选项将会对应用造成不必要的影响。我们建议您将其关闭。</string>
|
||||
<string name="inbox">收件箱</string>
|
||||
<string name="FAQ">常见问题</string>
|
||||
<string name="special">特殊的</string>
|
||||
|
|
@ -484,4 +492,14 @@
|
|||
<string name="notification_mystery_item">你打开了盒子并发现了%s!</string>
|
||||
<string name="checkInRewardEarned">由于你投入改善你的生活,你得到%1$s。</string>
|
||||
<string name="nextPrizeUnlocks" tools:ignore="PluralsCandidate">你的下一次奖赏在签到%1$d后解锁</string>
|
||||
<string name="pending_approval">等待审批的任务</string>
|
||||
<string name="filters">过滤器</string>
|
||||
<string name="done">完成</string>
|
||||
<string name="group_tasks_edit_description">团队任务无法被编辑。</string>
|
||||
<string name="group_tasks_edit_title">无法编辑此任务</string>
|
||||
<string name="groups">团队</string>
|
||||
<string name="all">所有</string>
|
||||
<string name="none">无</string>
|
||||
<string name="owned">已拥有的</string>
|
||||
<string name="not_owned">未拥有的</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
<attr name="showBackground" format="boolean" />
|
||||
<attr name="showMount" format="boolean" />
|
||||
<attr name="showPet" format="boolean" />
|
||||
<attr name="showSleeping" format="boolean" />
|
||||
</declare-styleable>
|
||||
|
||||
<declare-styleable name="GemPurchaseOptionsView">
|
||||
|
|
|
|||
|
|
@ -59,8 +59,10 @@
|
|||
<dimen name="task_top_bottom_compact_padding">16dp</dimen>
|
||||
<dimen name="reward_spacing">8dp</dimen>
|
||||
<dimen name="grid_item_margin">6dp</dimen>
|
||||
<dimen name="avatar_small_width">114dp</dimen>
|
||||
<dimen name="avatar_small_width">90dp</dimen>
|
||||
<dimen name="avatar_small_height">90dp</dimen>
|
||||
<dimen name="avatar_compact_width">114dp</dimen>
|
||||
<dimen name="avatar_compact_height">114dp</dimen>
|
||||
<dimen name="customization_width">100dp</dimen>
|
||||
<dimen name="gear_image_size">60dp</dimen>
|
||||
<dimen name="row_padding">12dp</dimen>
|
||||
|
|
@ -102,5 +104,5 @@
|
|||
<dimen name="dialog_marginTopBottom">24dp</dimen>
|
||||
<dimen name="login_intro_button_size">126dp</dimen>
|
||||
<dimen name="diamond_button_height">40dp</dimen>
|
||||
<dimen name="setup_customization_size">52dp</dimen>
|
||||
<dimen name="setup_customization_size">56dp</dimen>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -220,12 +220,10 @@
|
|||
<string name="setup_welcome_description">Welcome to Habitica, where advancing in the game will improve your real life! As you accomplish real-world goals, you\'ll unlock equipment, pets, quests, and more.</string>
|
||||
<string name="setup_welcome_title">Welcome</string>
|
||||
<string name="avatar_setup_description">So, how would you like to look? Don\'t worry, you can change this later.</string>
|
||||
<string name="task_setup_description">Splendid! Now let\'s set up your tasks so that you can start earning experience and gold.
|
||||
|
||||
To start, which parts of your life do you want to improve?</string>
|
||||
<string name="task_setup_description">Great! Now, what are you interested in working on throughout this journey?</string>
|
||||
<string name="setup_group_work">Work</string>
|
||||
<string name="setup_group_exercise">Exercise</string>
|
||||
<string name="setup_group_heathWellness">Health + Wellness</string>
|
||||
<string name="setup_group_health">Health</string>
|
||||
<string name="setup_group_school">School</string>
|
||||
<string name="setup_group_teams">Teams</string>
|
||||
<string name="setup_group_chores">Chores</string>
|
||||
|
|
@ -557,6 +555,7 @@ To start, which parts of your life do you want to improve?</string>
|
|||
<string name="dated">Dated</string>
|
||||
<string name="completed">Completed</string>
|
||||
<string name="setuP_group_other">Other</string>
|
||||
<string name="clear">Clear</string>
|
||||
<string name="save">Save</string>
|
||||
<string name="location">Location</string>
|
||||
<string name="gem_reward">Gem reward</string>
|
||||
|
|
|
|||
|
|
@ -4,8 +4,6 @@ import com.habitrpg.android.habitica.components.AppComponent;
|
|||
import com.habitrpg.android.habitica.components.DaggerAppComponent;
|
||||
import com.habitrpg.android.habitica.modules.AppModule;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
public class HabiticaApplication extends HabiticaBaseApplication {
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -1,17 +1,19 @@
|
|||
package com.habitrpg.android.habitica;
|
||||
|
||||
import android.content.Context;
|
||||
import android.support.v7.app.AlertDialog;
|
||||
|
||||
import com.amplitude.api.Amplitude;
|
||||
import com.google.gson.ExclusionStrategy;
|
||||
import com.google.gson.FieldAttributes;
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.GsonBuilder;
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
|
||||
import com.amplitude.api.Amplitude;
|
||||
import com.habitrpg.android.habitica.database.CheckListItemExcludeStrategy;
|
||||
import com.habitrpg.android.habitica.helpers.PopupNotificationsManager;
|
||||
import com.habitrpg.android.habitica.proxy.ifce.CrashlyticsProxy;
|
||||
import com.magicmicky.habitrpgwrapper.lib.api.ApiService;
|
||||
import com.magicmicky.habitrpgwrapper.lib.api.ApiClient;
|
||||
import com.magicmicky.habitrpgwrapper.lib.api.ApiService;
|
||||
import com.magicmicky.habitrpgwrapper.lib.api.Server;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.AchievementResult;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.Challenge;
|
||||
|
|
@ -26,16 +28,14 @@ import com.magicmicky.habitrpgwrapper.lib.models.LeaveChallengeBody;
|
|||
import com.magicmicky.habitrpgwrapper.lib.models.PostChatMessageResult;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.PurchaseValidationRequest;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.PurchaseValidationResult;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.Purchases;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.Quest;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.Shop;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.Skill;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.Status;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.SubscriptionValidationRequest;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.Tag;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.TaskDirectionData;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.responses.BuyResponse;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.responses.HabitResponse;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.Purchases;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.Skill;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.TutorialStep;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.UserAuth;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.UserAuthResponse;
|
||||
|
|
@ -47,7 +47,9 @@ import com.magicmicky.habitrpgwrapper.lib.models.inventory.HatchingPotion;
|
|||
import com.magicmicky.habitrpgwrapper.lib.models.inventory.Mount;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.inventory.Pet;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.inventory.QuestContent;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.responses.BuyResponse;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.responses.FeedResponse;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.responses.HabitResponse;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.responses.SkillResponse;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.responses.UnlockResponse;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.tasks.ChecklistItem;
|
||||
|
|
@ -82,10 +84,6 @@ import com.magicmicky.habitrpgwrapper.lib.utils.TaskTagDeserializer;
|
|||
import com.magicmicky.habitrpgwrapper.lib.utils.TutorialStepListDeserializer;
|
||||
import com.raizlabs.android.dbflow.structure.ModelAdapter;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.support.v7.app.AlertDialog;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.lang.annotation.Annotation;
|
||||
import java.lang.reflect.Type;
|
||||
|
|
@ -94,7 +92,6 @@ import java.net.SocketTimeoutException;
|
|||
import java.net.UnknownHostException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
|
|
@ -120,6 +117,7 @@ public class ApiClientImpl implements Action1<Throwable>, ApiClient {
|
|||
private final GsonConverterFactory gsonConverter;
|
||||
private final HostConfig hostConfig;
|
||||
private final Retrofit retrofitAdapter;
|
||||
private final PopupNotificationsManager popupNotificationsManager;
|
||||
|
||||
private CrashlyticsProxy crashlyticsProxy;
|
||||
private Context context;
|
||||
|
|
@ -127,13 +125,12 @@ public class ApiClientImpl implements Action1<Throwable>, ApiClient {
|
|||
// I think we don't need the ApiClientImpl anymore we could just use ApiService
|
||||
private final ApiService apiService;
|
||||
|
||||
final Observable.Transformer apiCallTransformer =
|
||||
private final Observable.Transformer apiCallTransformer =
|
||||
observable -> ((Observable) observable)
|
||||
.map(new Func1<HabitResponse, Object>() {
|
||||
@Override
|
||||
public Object call(HabitResponse habitResponse) {
|
||||
if (habitResponse.notifications != null) {
|
||||
PopupNotificationsManager popupNotificationsManager = PopupNotificationsManager.getInstance(com.habitrpg.android.habitica.ApiClientImpl.this, context);
|
||||
popupNotificationsManager.showNotificationDialog(habitResponse.notifications);
|
||||
}
|
||||
return habitResponse.getData();
|
||||
|
|
@ -147,10 +144,12 @@ public class ApiClientImpl implements Action1<Throwable>, ApiClient {
|
|||
|
||||
//private OnHabitsAPIResult mResultListener;
|
||||
//private HostConfig mConfig;
|
||||
public ApiClientImpl(GsonConverterFactory gsonConverter, HostConfig hostConfig, CrashlyticsProxy crashlyticsProxy, Context context) {
|
||||
public ApiClientImpl(GsonConverterFactory gsonConverter, HostConfig hostConfig, CrashlyticsProxy crashlyticsProxy, PopupNotificationsManager popupNotificationsManager, Context context) {
|
||||
this.gsonConverter = gsonConverter;
|
||||
this.hostConfig = hostConfig;
|
||||
this.context = context;
|
||||
this.crashlyticsProxy = crashlyticsProxy;
|
||||
this.popupNotificationsManager = popupNotificationsManager;
|
||||
|
||||
HabiticaBaseApplication.getComponent().inject(this);
|
||||
crashlyticsProxy.setUserIdentifier(this.hostConfig.getUser());
|
||||
|
|
@ -217,9 +216,9 @@ public class ApiClientImpl implements Action1<Throwable>, ApiClient {
|
|||
}.getType();
|
||||
Type questContentListType = new TypeToken<List<QuestContent>>() {
|
||||
}.getType();
|
||||
Type petListType = new TypeToken<HashMap<String, Pet>>() {
|
||||
Type petListType = new TypeToken<Map<String, Pet>>() {
|
||||
}.getType();
|
||||
Type mountListType = new TypeToken<HashMap<String, Mount>>() {
|
||||
Type mountListType = new TypeToken<Map<String, Mount>>() {
|
||||
}.getType();
|
||||
|
||||
//Exclusion strategy needed for DBFlow https://github.com/Raizlabs/DBFlow/issues/121
|
||||
|
|
@ -227,8 +226,8 @@ public class ApiClientImpl implements Action1<Throwable>, ApiClient {
|
|||
.setExclusionStrategies(new CheckListItemExcludeStrategy())
|
||||
.setExclusionStrategies(new ExclusionStrategy() {
|
||||
@Override
|
||||
public boolean shouldSkipField(FieldAttributes f) {
|
||||
return f.getDeclaredClass().equals(ModelAdapter.class);
|
||||
public boolean shouldSkipField(FieldAttributes field) {
|
||||
return field.getDeclaredClass().equals(ModelAdapter.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -355,18 +354,20 @@ public class ApiClientImpl implements Action1<Throwable>, ApiClient {
|
|||
habitRPGUser.setRewards(sortTasks(tasks.tasks, habitRPGUser.getTasksOrder().getRewards()));
|
||||
for (Task task : tasks.tasks.values()) {
|
||||
switch (task.getType()) {
|
||||
case "habit":
|
||||
case Task.TYPE_HABIT:
|
||||
habitRPGUser.getHabits().add(task);
|
||||
break;
|
||||
case "daily":
|
||||
case Task.TYPE_DAILY:
|
||||
habitRPGUser.getDailys().add(task);
|
||||
break;
|
||||
case "todo":
|
||||
case Task.TYPE_TODO:
|
||||
habitRPGUser.getTodos().add(task);
|
||||
break;
|
||||
case "reward":
|
||||
case Task.TYPE_REWARD:
|
||||
habitRPGUser.getRewards().add(task);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -400,10 +401,7 @@ public class ApiClientImpl implements Action1<Throwable>, ApiClient {
|
|||
}
|
||||
|
||||
private void showConnectionProblemDialog(final int resourceTitleString, final int resourceMessageString) {
|
||||
Activity currentActivity = HabiticaApplication.currentActivity;
|
||||
if (currentActivity != null) {
|
||||
showConnectionProblemDialog(currentActivity.getString(resourceTitleString), currentActivity.getString(resourceMessageString));
|
||||
}
|
||||
showConnectionProblemDialog(context.getString(resourceTitleString), context.getString(resourceMessageString));
|
||||
}
|
||||
|
||||
private void showConnectionProblemDialog(final String resourceTitleString, final String resourceMessageString) {
|
||||
|
|
@ -447,7 +445,7 @@ public class ApiClientImpl implements Action1<Throwable>, ApiClient {
|
|||
|
||||
@Override
|
||||
public void setLanguageCode(String languageCode) {
|
||||
this.languageCode = languageCode;
|
||||
this.languageCode = languageCode;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -498,7 +496,7 @@ public class ApiClientImpl implements Action1<Throwable>, ApiClient {
|
|||
}
|
||||
|
||||
@Override
|
||||
public Observable<Void> validateSubscription(SubscriptionValidationRequest request){
|
||||
public Observable<Void> validateSubscription(SubscriptionValidationRequest request) {
|
||||
return apiService.validateSubscription(request).compose(configureApiCallObserver());
|
||||
}
|
||||
|
||||
|
|
@ -669,7 +667,7 @@ public class ApiClientImpl implements Action1<Throwable>, ApiClient {
|
|||
}
|
||||
|
||||
@Override
|
||||
public Observable<PostChatMessageResult> postGroupChat(String groupId, HashMap<String, String> message) {
|
||||
public Observable<PostChatMessageResult> postGroupChat(String groupId, Map<String, String> message) {
|
||||
return apiService.postGroupChat(groupId, message).compose(configureApiCallObserver());
|
||||
}
|
||||
|
||||
|
|
@ -730,7 +728,7 @@ public class ApiClientImpl implements Action1<Throwable>, ApiClient {
|
|||
|
||||
@Override
|
||||
public Observable<Quest> forceStartQuest(String groupId, Group group) {
|
||||
return apiService.forceStartQuest(groupId,group).compose(configureApiCallObserver());
|
||||
return apiService.forceStartQuest(groupId, group).compose(configureApiCallObserver());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -759,17 +757,17 @@ public class ApiClientImpl implements Action1<Throwable>, ApiClient {
|
|||
}
|
||||
|
||||
@Override
|
||||
public Observable<HabitRPGUser> GetMember(String memberId) {
|
||||
return apiService.GetMember(memberId).compose(configureApiCallObserver());
|
||||
public Observable<HabitRPGUser> getMember(String memberId) {
|
||||
return apiService.getMember(memberId).compose(configureApiCallObserver());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Observable<AchievementResult> GetMemberAchievements(String memberId) {
|
||||
return apiService.GetMemberAchievements(memberId).compose(configureApiCallObserver());
|
||||
public Observable<AchievementResult> getMemberAchievements(String memberId) {
|
||||
return apiService.getMemberAchievements(memberId).compose(configureApiCallObserver());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Observable<PostChatMessageResult> postPrivateMessage(HashMap<String, String> messageDetails) {
|
||||
public Observable<PostChatMessageResult> postPrivateMessage(Map<String, String> messageDetails) {
|
||||
return apiService.postPrivateMessage(messageDetails).compose(configureApiCallObserver());
|
||||
}
|
||||
|
||||
|
|
@ -823,7 +821,7 @@ public class ApiClientImpl implements Action1<Throwable>, ApiClient {
|
|||
return apiService.readNotification(notificationId).compose(configureApiCallObserver());
|
||||
}
|
||||
|
||||
public Observable<ContentResult>getContent() {
|
||||
public Observable<ContentResult> getContent() {
|
||||
return apiService.getContent(languageCode).compose(configureApiCallObserver());
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
package com.habitrpg.android.habitica;
|
||||
|
||||
import android.support.annotation.Nullable;
|
||||
|
||||
import com.magicmicky.habitrpgwrapper.lib.api.ApiClient;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.QuestBoss;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.inventory.QuestContent;
|
||||
|
|
@ -11,11 +13,14 @@ import com.raizlabs.android.dbflow.sql.language.Where;
|
|||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
import rx.Observable;
|
||||
|
||||
|
||||
public class ContentCache {
|
||||
private static final String CONTENT_TYPE_ITEM = "item";
|
||||
private static final String CONTENT_TYPE_QUEST = "quest";
|
||||
private ApiClient apiClient;
|
||||
|
||||
|
||||
|
|
@ -23,36 +28,31 @@ public class ContentCache {
|
|||
this.apiClient = apiClient;
|
||||
}
|
||||
|
||||
public void GetQuestContent(final String key, final QuestContentCallback cb) {
|
||||
final QuestContent quest = new Select().from(QuestContent.class).where(Condition.column("key").eq(key)).querySingle();
|
||||
public void getQuestContent(final String key, final QuestContentCallback cb) {
|
||||
final QuestContent quest = new Select().from(QuestContent.class).where(Condition.column(ItemData.UNIQUE_IDENTIFIER).eq(key)).querySingle();
|
||||
|
||||
if (quest != null) {
|
||||
quest.boss = new Select().from(QuestBoss.class).where(Condition.column("key").eq(key)).querySingle();
|
||||
cb.GotQuest(quest);
|
||||
quest.boss = new Select().from(QuestBoss.class).where(Condition.column(ItemData.UNIQUE_IDENTIFIER).eq(key)).querySingle();
|
||||
cb.gotQuest(quest);
|
||||
} else {
|
||||
|
||||
getContentAndSearchFor("quest", key, new GotContentEntryCallback<QuestContent>() {
|
||||
@Override
|
||||
public void GotObject(QuestContent obj) {
|
||||
cb.GotQuest(obj);
|
||||
}
|
||||
});
|
||||
getContentAndSearchFor(CONTENT_TYPE_QUEST, key, cb::gotQuest);
|
||||
}
|
||||
}
|
||||
|
||||
public void GetItemData(final String key, final GotContentEntryCallback<ItemData> gotEntry) {
|
||||
final ItemData itemData = new Select().from(ItemData.class).where(Condition.column("key").eq(key)).querySingle();
|
||||
public void getItemData(final String key, final GotContentEntryCallback<ItemData> gotEntry) {
|
||||
final ItemData itemData = new Select().from(ItemData.class).where(Condition.column(ItemData.UNIQUE_IDENTIFIER).eq(key)).querySingle();
|
||||
|
||||
if (itemData != null) {
|
||||
gotEntry.GotObject(itemData);
|
||||
gotEntry.gotObject(itemData);
|
||||
} else {
|
||||
getContentAndSearchFor("item", key, gotEntry);
|
||||
getContentAndSearchFor(CONTENT_TYPE_ITEM, key, gotEntry);
|
||||
}
|
||||
}
|
||||
|
||||
public void GetItemDataList(final List<String> keysToSearch, GotContentEntryCallback<List<ItemData>> gotEntries) {
|
||||
public void getItemDataList(final List<String> keysToSearch, GotContentEntryCallback<List<ItemData>> gotEntries) {
|
||||
|
||||
Condition.In keyCondition = Condition.column("key").in("");
|
||||
Condition.In keyCondition = Condition.column(ItemData.UNIQUE_IDENTIFIER).in("");
|
||||
|
||||
for (String item : keysToSearch) {
|
||||
keyCondition = keyCondition.and(item);
|
||||
|
|
@ -63,9 +63,9 @@ public class ContentCache {
|
|||
List<ItemData> items = query.queryList();
|
||||
|
||||
if (items != null && items.size() == keysToSearch.size()) {
|
||||
gotEntries.GotObject(items);
|
||||
gotEntries.gotObject(items);
|
||||
} else {
|
||||
getContentAndSearchForList("item", keysToSearch, gotEntries);
|
||||
getContentAndSearchForList(keysToSearch, gotEntries);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -74,23 +74,23 @@ public class ContentCache {
|
|||
|
||||
.subscribe(contentResult -> {
|
||||
switch (typeOfSearch) {
|
||||
case "quest": {
|
||||
case CONTENT_TYPE_QUEST: {
|
||||
Collection<QuestContent> questList = contentResult.quests;
|
||||
|
||||
for (QuestContent quest : questList) {
|
||||
if (quest.getKey().equals(searchKey)) {
|
||||
gotEntry.GotObject((T) quest);
|
||||
gotEntry.gotObject((T) quest);
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case "item": {
|
||||
case CONTENT_TYPE_ITEM: {
|
||||
T searchedItem = null;
|
||||
|
||||
if (searchKey.equals("potion")) {
|
||||
if ("potion".equals(searchKey)) {
|
||||
searchedItem = (T) contentResult.potion;
|
||||
} else if (searchKey == "armoire") {
|
||||
} else if ("armoire".equals(searchKey)) {
|
||||
searchedItem = (T) contentResult.armoire;
|
||||
} else {
|
||||
Collection<ItemData> itemList = contentResult.gear.flat;
|
||||
|
|
@ -102,35 +102,37 @@ public class ContentCache {
|
|||
}
|
||||
}
|
||||
|
||||
gotEntry.GotObject(searchedItem);
|
||||
gotEntry.gotObject(searchedItem);
|
||||
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}, throwable -> {
|
||||
});
|
||||
}
|
||||
|
||||
private void getContentAndSearchForList(final String typeOfSearch, final List<String> searchKeys, final GotContentEntryCallback<List<ItemData>> gotEntry) {
|
||||
private void getContentAndSearchForList(final List<String> searchKeys, final GotContentEntryCallback<List<ItemData>> gotEntry) {
|
||||
List<ItemData> resultList = new ArrayList<>();
|
||||
apiClient.getContent()
|
||||
|
||||
.flatMap(contentResult -> {
|
||||
List<ItemData> itemList = new ArrayList<ItemData>(contentResult.gear.flat);
|
||||
List<ItemData> itemList = new ArrayList<>(contentResult.gear.flat);
|
||||
itemList.add(contentResult.potion);
|
||||
itemList.add(contentResult.armoire);
|
||||
return Observable.from(itemList);
|
||||
})
|
||||
.filter(item -> searchKeys.contains(item.key))
|
||||
.subscribe(resultList::add, throwable -> {
|
||||
}, () -> gotEntry.GotObject(resultList));
|
||||
}, () -> gotEntry.gotObject(resultList));
|
||||
}
|
||||
|
||||
public interface GotContentEntryCallback<T extends Object> {
|
||||
void GotObject(T obj);
|
||||
void gotObject(@Nullable T obj);
|
||||
}
|
||||
|
||||
public interface QuestContentCallback {
|
||||
void GotQuest(QuestContent content);
|
||||
void gotQuest(QuestContent content);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,5 +7,9 @@ public class HabitDatabase {
|
|||
|
||||
public static final String NAME = "Habitica";
|
||||
|
||||
public static final int VERSION = 34;
|
||||
public static final int VERSION = 35;
|
||||
|
||||
public HabitDatabase() {
|
||||
super();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,19 +27,13 @@ import android.content.SharedPreferences;
|
|||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.PackageInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.ShortcutInfo;
|
||||
import android.content.pm.ShortcutManager;
|
||||
import android.content.res.Resources;
|
||||
import android.database.DatabaseErrorHandler;
|
||||
import android.database.sqlite.SQLiteDatabase;
|
||||
import android.graphics.drawable.Icon;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.annotation.RequiresApi;
|
||||
import android.support.multidex.MultiDexApplication;
|
||||
import android.util.Log;
|
||||
|
||||
|
|
@ -63,7 +57,6 @@ import org.solovyev.android.checkout.PurchaseVerifier;
|
|||
|
||||
import java.io.File;
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.Arrays;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
|
|
@ -85,14 +78,12 @@ public abstract class HabiticaBaseApplication extends MultiDexApplication {
|
|||
/**
|
||||
* For better performance billing class should be used as singleton
|
||||
*/
|
||||
@NonNull
|
||||
private Billing billing;
|
||||
/**
|
||||
* Application wide {@link Checkout} instance (can be used
|
||||
* anywhere in the app).
|
||||
* This instance contains all available products in the app.
|
||||
*/
|
||||
@NonNull
|
||||
private Checkout checkout;
|
||||
|
||||
public static HabiticaBaseApplication getInstance(Context context) {
|
||||
|
|
@ -109,7 +100,7 @@ public abstract class HabiticaBaseApplication extends MultiDexApplication {
|
|||
}
|
||||
}
|
||||
|
||||
private static void setFinalStatic(Field field, Object newValue) throws NoSuchFieldException, IllegalAccessException {
|
||||
private static void setFinalStatic(Field field, @Nullable Object newValue) throws NoSuchFieldException, IllegalAccessException {
|
||||
field.setAccessible(true);
|
||||
field.set(null, newValue);
|
||||
}
|
||||
|
|
@ -268,8 +259,9 @@ public abstract class HabiticaBaseApplication extends MultiDexApplication {
|
|||
|
||||
@Override
|
||||
public void onActivityDestroyed(Activity activity) {
|
||||
if (currentActivity == activity)
|
||||
if (currentActivity.equals(activity)) {
|
||||
currentActivity = null;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
@ -340,9 +332,7 @@ public abstract class HabiticaBaseApplication extends MultiDexApplication {
|
|||
|
||||
@Override
|
||||
public File getDatabasePath(String name) {
|
||||
File dbFile = new File(getExternalFilesDir(null), "HabiticaDatabase/" + name);
|
||||
//Crashlytics.setString("Database File", dbFile.getAbsolutePath());
|
||||
return dbFile;
|
||||
return new File(getExternalFilesDir(null), "HabiticaDatabase/" + name);
|
||||
}
|
||||
|
||||
private void createBillingAndCheckout() {
|
||||
|
|
@ -359,6 +349,7 @@ public abstract class HabiticaBaseApplication extends MultiDexApplication {
|
|||
return Billing.newCache();
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public PurchaseVerifier getPurchaseVerifier() {
|
||||
return new HabiticaPurchaseVerifier(HabiticaBaseApplication.this, lazyApiHelper.get());
|
||||
|
|
|
|||
|
|
@ -2,6 +2,8 @@ package com.habitrpg.android.habitica.callbacks;
|
|||
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
|
||||
|
||||
import android.support.annotation.Nullable;
|
||||
|
||||
import rx.functions.Action1;
|
||||
|
||||
/**
|
||||
|
|
@ -10,9 +12,10 @@ import rx.functions.Action1;
|
|||
*/
|
||||
public class HabitRPGUserCallback implements Action1<HabitRPGUser> {
|
||||
|
||||
@Nullable
|
||||
public final OnUserReceived callBack;
|
||||
|
||||
public HabitRPGUserCallback(OnUserReceived callback) {
|
||||
public HabitRPGUserCallback(@Nullable OnUserReceived callback) {
|
||||
this.callBack = callback;
|
||||
}
|
||||
|
||||
|
|
@ -20,7 +23,9 @@ public class HabitRPGUserCallback implements Action1<HabitRPGUser> {
|
|||
public void call(HabitRPGUser habitRPGUser) {
|
||||
// Negue: once everything is refactored to DbFlowTaskLocalRepository, this will be removed
|
||||
habitRPGUser.async().save();
|
||||
callBack.onUserReceived(habitRPGUser);
|
||||
if (callBack != null) {
|
||||
callBack.onUserReceived(habitRPGUser);
|
||||
}
|
||||
}
|
||||
|
||||
public interface OnUserReceived {
|
||||
|
|
|
|||
|
|
@ -2,12 +2,14 @@ package com.habitrpg.android.habitica.callbacks;
|
|||
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
|
||||
|
||||
import android.support.annotation.Nullable;
|
||||
|
||||
|
||||
public class MergeUserCallback extends HabitRPGUserCallback {
|
||||
|
||||
private HabitRPGUser user;
|
||||
|
||||
public MergeUserCallback(HabitRPGUserCallback.OnUserReceived callback, HabitRPGUser user) {
|
||||
public MergeUserCallback(@Nullable HabitRPGUserCallback.OnUserReceived callback, HabitRPGUser user) {
|
||||
super(callback);
|
||||
this.user = user;
|
||||
}
|
||||
|
|
@ -29,6 +31,8 @@ public class MergeUserCallback extends HabitRPGUserCallback {
|
|||
|
||||
this.user.async().save();
|
||||
|
||||
callBack.onUserReceived(this.user);
|
||||
if (callBack != null) {
|
||||
callBack.onUserReceived(this.user);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,7 +6,9 @@ import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
|
|||
import com.magicmicky.habitrpgwrapper.lib.models.SetupCustomization;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.drawable.Drawable;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
|
@ -44,9 +46,9 @@ public class SetupCustomizationRepositoryImpl implements SetupCustomizationRepos
|
|||
case "hair": {
|
||||
switch (subcategory) {
|
||||
case "bangs":
|
||||
return getBangs();
|
||||
return getBangs(user.getPreferences().getHair().getColor());
|
||||
case "ponytail":
|
||||
return getHairBases();
|
||||
return getHairBases(user.getPreferences().getHair().getColor());
|
||||
case "color":
|
||||
return getHairColors();
|
||||
}
|
||||
|
|
@ -79,7 +81,7 @@ public class SetupCustomizationRepositoryImpl implements SetupCustomizationRepos
|
|||
|
||||
private List<SetupCustomization> getGlasses() {
|
||||
return Arrays.asList(
|
||||
SetupCustomization.createGlasses("", 0),
|
||||
SetupCustomization.createGlasses("eyewear_base_0", R.drawable.creator_blank_face),
|
||||
SetupCustomization.createGlasses("eyewear_special_blackTopFrame", R.drawable.creator_eyewear_special_blacktopframe),
|
||||
SetupCustomization.createGlasses("eyewear_special_blueTopFrame", R.drawable.creator_eyewear_special_bluetopframe),
|
||||
SetupCustomization.createGlasses("eyewear_special_greenTopFrame", R.drawable.creator_eyewear_special_greentopframe),
|
||||
|
|
@ -111,20 +113,20 @@ public class SetupCustomizationRepositoryImpl implements SetupCustomizationRepos
|
|||
);
|
||||
}
|
||||
|
||||
private List<SetupCustomization> getHairBases() {
|
||||
private List<SetupCustomization> getHairBases(String color) {
|
||||
return Arrays.asList(
|
||||
SetupCustomization.createHairPonytail("0", R.drawable.creator_blank_face),
|
||||
SetupCustomization.createHairPonytail("1", R.drawable.creator_hair_base_1_red),
|
||||
SetupCustomization.createHairPonytail("3", R.drawable.creator_hair_base_3_red)
|
||||
SetupCustomization.createHairPonytail("1", getResId("creator_hair_base_1_"+color)),
|
||||
SetupCustomization.createHairPonytail("3", getResId("creator_hair_base_3_"+color))
|
||||
);
|
||||
}
|
||||
|
||||
private List<SetupCustomization> getBangs() {
|
||||
private List<SetupCustomization> getBangs(String color) {
|
||||
return Arrays.asList(
|
||||
SetupCustomization.createHairBangs("0", R.drawable.creator_blank_face),
|
||||
SetupCustomization.createHairBangs("1", R.drawable.creator_hair_bangs_1_red),
|
||||
SetupCustomization.createHairBangs("2", R.drawable.creator_hair_bangs_2_red),
|
||||
SetupCustomization.createHairBangs("3", R.drawable.creator_hair_bangs_3_red)
|
||||
SetupCustomization.createHairBangs("1", getResId("creator_hair_bangs_1_"+color)),
|
||||
SetupCustomization.createHairBangs("2", getResId("creator_hair_bangs_2_"+color)),
|
||||
SetupCustomization.createHairBangs("3", getResId("creator_hair_bangs_3_"+color))
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -169,4 +171,14 @@ public class SetupCustomizationRepositoryImpl implements SetupCustomizationRepos
|
|||
SetupCustomization.createSkin("6bd049", R.color.skin_6bd049)
|
||||
);
|
||||
}
|
||||
|
||||
private int getResId(String resName) {
|
||||
|
||||
try {
|
||||
return context.getResources().getIdentifier(resName, "drawable", context.getPackageName());
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package com.habitrpg.android.habitica.helpers;
|
||||
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v7.app.AlertDialog;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
|
|
@ -25,31 +26,27 @@ import java.util.Map;
|
|||
*/
|
||||
|
||||
public class PopupNotificationsManager {
|
||||
private static PopupNotificationsManager instance;
|
||||
private Map<String, Boolean> seenNotifications;
|
||||
@Nullable
|
||||
private ApiClient apiClient;
|
||||
private Context context;
|
||||
|
||||
// @TODO: A queue for displaying alert dialogues
|
||||
|
||||
private PopupNotificationsManager(ApiClient apiClient, Context context) {
|
||||
this.apiClient = apiClient;
|
||||
public PopupNotificationsManager(Context context) {
|
||||
this.seenNotifications = new HashMap<>();
|
||||
this.context = context.getApplicationContext();
|
||||
}
|
||||
|
||||
public static PopupNotificationsManager getInstance(ApiClient apiHelper, Context context) {
|
||||
if (instance == null) {
|
||||
instance = new PopupNotificationsManager(apiHelper, context);
|
||||
}
|
||||
return instance;
|
||||
public void setApiClient(@Nullable ApiClient apiClient) {
|
||||
this.apiClient = apiClient;
|
||||
}
|
||||
|
||||
public Boolean displayNotification(Notification notification) {
|
||||
Boolean displayNotification(Notification notification) {
|
||||
String title = notification.data.message;
|
||||
String youEarnedMessage = "";
|
||||
|
||||
LayoutInflater factory = LayoutInflater.from(HabiticaApplication.currentActivity);
|
||||
LayoutInflater factory = LayoutInflater.from(context);
|
||||
final View view = factory.inflate(R.layout.dialog_login_incentive, null);
|
||||
|
||||
SimpleDraweeView imageView = (SimpleDraweeView) view.findViewById(R.id.imageView);
|
||||
|
|
@ -89,17 +86,14 @@ public class PopupNotificationsManager {
|
|||
final AlertDialog dialog = builder.create();
|
||||
dialog.show();
|
||||
|
||||
confirmButton.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
if (apiClient != null) {
|
||||
// @TODO: This should be handled somewhere else? MAybe we notifiy via event
|
||||
apiClient.readNotificaiton(notification.getId())
|
||||
.subscribe(next -> {}, throwable -> {});
|
||||
}
|
||||
|
||||
dialog.hide();
|
||||
confirmButton.setOnClickListener(view1 -> {
|
||||
if (apiClient != null) {
|
||||
// @TODO: This should be handled somewhere else? MAybe we notifiy via event
|
||||
apiClient.readNotificaiton(notification.getId())
|
||||
.subscribe(next -> {}, throwable -> {});
|
||||
}
|
||||
|
||||
dialog.hide();
|
||||
});
|
||||
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,8 @@
|
|||
package com.habitrpg.android.habitica.helpers;
|
||||
|
||||
import android.content.Context;
|
||||
import android.support.annotation.Nullable;
|
||||
|
||||
import com.habitrpg.android.habitica.HabiticaApplication;
|
||||
|
||||
import java.io.File;
|
||||
|
|
@ -18,10 +21,12 @@ import rx.schedulers.Schedulers;
|
|||
|
||||
// based on http://stackoverflow.com/questions/29838565/downloading-files-using-okhttp-okio-and-rxjava
|
||||
public class SoundFileLoader {
|
||||
OkHttpClient client;
|
||||
private final Context context;
|
||||
private OkHttpClient client;
|
||||
|
||||
public SoundFileLoader() {
|
||||
public SoundFileLoader(Context context) {
|
||||
client = new OkHttpClient();
|
||||
this.context = context;
|
||||
}
|
||||
|
||||
public Observable<List<SoundFile>> download(List<SoundFile> files) {
|
||||
|
|
@ -70,8 +75,14 @@ public class SoundFileLoader {
|
|||
.map(ArrayList::new);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private String getExternalCacheDir() {
|
||||
return HabiticaApplication.getInstance(HabiticaApplication.currentActivity).getExternalCacheDir().getPath();
|
||||
File cacheDir = HabiticaApplication.getInstance(context).getExternalCacheDir();
|
||||
if (cacheDir != null) {
|
||||
return cacheDir.getPath();
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public String getFullAudioFilePath(SoundFile soundFile) {
|
||||
|
|
|
|||
|
|
@ -1,8 +1,6 @@
|
|||
package com.habitrpg.android.habitica.helpers;
|
||||
|
||||
import com.habitrpg.android.habitica.HabiticaApplication;
|
||||
|
||||
import android.media.MediaPlayer;
|
||||
import com.habitrpg.android.habitica.HabiticaBaseApplication;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
|
|
@ -29,12 +27,10 @@ public class SoundManager {
|
|||
SoundFileLoader soundFileLoader;
|
||||
private String soundTheme;
|
||||
|
||||
private MediaPlayer mp = new MediaPlayer();
|
||||
|
||||
private HashMap<String, SoundFile> loadedSoundFiles;
|
||||
|
||||
public SoundManager() {
|
||||
HabiticaApplication.getInstance(HabiticaApplication.currentActivity).getComponent().inject(this);
|
||||
HabiticaBaseApplication.getComponent().inject(this);
|
||||
|
||||
loadedSoundFiles = new HashMap<>();
|
||||
}
|
||||
|
|
@ -84,7 +80,7 @@ public class SoundManager {
|
|||
loadedSoundFiles.put(type, file);
|
||||
file.play();
|
||||
|
||||
}, throwable -> throwable.printStackTrace());
|
||||
}, Throwable::printStackTrace);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3,14 +3,16 @@ package com.habitrpg.android.habitica.helpers;
|
|||
import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Created by magicmicky on 02/10/15.
|
||||
*/
|
||||
public class TaskFilterHelper {
|
||||
private List<String> tagsId;
|
||||
private String activeFilter;
|
||||
private Map<String, String> activeFilters = new HashMap<>();
|
||||
|
||||
public TaskFilterHelper() {
|
||||
tagsId = new ArrayList<>();
|
||||
|
|
@ -21,8 +23,8 @@ public class TaskFilterHelper {
|
|||
this.tagsId.add(tags);
|
||||
}
|
||||
|
||||
public int howMany() {
|
||||
return this.tagsId.size() + (activeFilter != null ? 1 : 0);
|
||||
public int howMany(String type) {
|
||||
return this.tagsId.size() + (activeFilters.get(type) != null || Task.FILTER_ACTIVE.equals(activeFilters.get(type)) ? 1 : 0);
|
||||
}
|
||||
|
||||
public List<String> getTags() {
|
||||
|
|
@ -38,9 +40,10 @@ public class TaskFilterHelper {
|
|||
}
|
||||
|
||||
public List<Task> filter(List<Task> tasks) {
|
||||
List<Task> filtered = new ArrayList<Task>();
|
||||
List<Task> filtered = new ArrayList<>();
|
||||
String activeFilter = activeFilters.get(tasks.get(0).type);
|
||||
for (Task task : tasks) {
|
||||
if (isFiltered(task)) {
|
||||
if (isFiltered(task, activeFilter)) {
|
||||
filtered.add(task);
|
||||
}
|
||||
}
|
||||
|
|
@ -48,7 +51,7 @@ public class TaskFilterHelper {
|
|||
return filtered;
|
||||
}
|
||||
|
||||
private boolean isFiltered(Task task) {
|
||||
private boolean isFiltered(Task task, String activeFilter) {
|
||||
if (!task.containsAllTagIds(tagsId)) {
|
||||
return false;
|
||||
}
|
||||
|
|
@ -75,7 +78,11 @@ public class TaskFilterHelper {
|
|||
return true;
|
||||
}
|
||||
|
||||
public void setActiveFilter(String activeFilter) {
|
||||
this.activeFilter = activeFilter;
|
||||
public void setActiveFilter(String type, String activeFilter) {
|
||||
activeFilters.put(type, activeFilter);
|
||||
}
|
||||
|
||||
public String getActiveFilter(String type) {
|
||||
return activeFilters.get(type);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,10 +7,6 @@ import com.magicmicky.habitrpgwrapper.lib.models.tasks.ItemData;
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by krh12 on 3/31/2017.
|
||||
*/
|
||||
|
||||
public class UserStatComputer {
|
||||
|
||||
// @TODO: Not really sure if this is correct
|
||||
|
|
@ -35,7 +31,7 @@ public class UserStatComputer {
|
|||
}
|
||||
|
||||
public List<StatsRow> computeClassBonus (List<ItemData> itemDataList, HabitRPGUser user) {
|
||||
List<StatsRow> skillRows = new ArrayList();
|
||||
List<StatsRow> skillRows = new ArrayList<>();
|
||||
|
||||
float strAttributes = 0;
|
||||
float intAttributes = 0;
|
||||
|
|
@ -62,16 +58,16 @@ public class UserStatComputer {
|
|||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
if (str_ != 0) {
|
||||
sb.append("STR " + str_ + ", ");
|
||||
sb.append("STR ").append(str_).append(", ");
|
||||
}
|
||||
if (int_ != 0) {
|
||||
sb.append("INT " + int_ + ", ");
|
||||
sb.append("INT ").append(int_).append(", ");
|
||||
}
|
||||
if (con_ != 0) {
|
||||
sb.append("CON " + con_ + ", ");
|
||||
sb.append("CON ").append(con_).append(", ");
|
||||
}
|
||||
if (per_ != 0) {
|
||||
sb.append("PER " + per_ + ", ");
|
||||
sb.append("PER ").append(per_).append(", ");
|
||||
}
|
||||
|
||||
// remove the last comma
|
||||
|
|
@ -102,27 +98,29 @@ public class UserStatComputer {
|
|||
|
||||
if (!userClassMatchesGearClass && !userClassMatchesGearSpecialClass) classBonus = 0;
|
||||
|
||||
if (itemClass.isEmpty()) {
|
||||
if (itemClass == null || itemClass.isEmpty()) {
|
||||
itemClass = itemSpecialClass;
|
||||
}
|
||||
|
||||
switch (itemClass) {
|
||||
case "rogue":
|
||||
strClassBonus = str_ * classBonus;
|
||||
perClassBonus = per_ * classBonus;
|
||||
break;
|
||||
case "healer":
|
||||
conClassBonus = con_ * classBonus;
|
||||
intClassBonus = int_ * classBonus;
|
||||
break;
|
||||
case "warrior":
|
||||
strClassBonus = str_ * classBonus;
|
||||
conClassBonus = con_ * classBonus;
|
||||
break;
|
||||
case "wizard":
|
||||
intClassBonus = int_ * classBonus;
|
||||
perClassBonus = per_ * classBonus;
|
||||
break;
|
||||
if (itemClass != null) {
|
||||
switch (itemClass) {
|
||||
case "rogue":
|
||||
strClassBonus = str_ * classBonus;
|
||||
perClassBonus = per_ * classBonus;
|
||||
break;
|
||||
case "healer":
|
||||
conClassBonus = con_ * classBonus;
|
||||
intClassBonus = int_ * classBonus;
|
||||
break;
|
||||
case "warrior":
|
||||
strClassBonus = str_ * classBonus;
|
||||
conClassBonus = con_ * classBonus;
|
||||
break;
|
||||
case "wizard":
|
||||
intClassBonus = int_ * classBonus;
|
||||
perClassBonus = per_ * classBonus;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ import rx.functions.Action0;
|
|||
import static com.habitrpg.android.habitica.helpers.MathHelper.round;
|
||||
import static com.habitrpg.android.habitica.ui.helpers.UiUtils.showSnackbar;
|
||||
|
||||
public class NotifyUserUseCase extends UseCase<NotifyUserUseCase.RequestValues, Void> {
|
||||
public class NotifyUserUseCase extends UseCase<NotifyUserUseCase.RequestValues, Stats> {
|
||||
|
||||
public static final int MIN_LEVEL_FOR_SKILLS = 11;
|
||||
private LevelUpUseCase levelUpUseCase;
|
||||
|
|
@ -31,8 +31,8 @@ public class NotifyUserUseCase extends UseCase<NotifyUserUseCase.RequestValues,
|
|||
}
|
||||
|
||||
@Override
|
||||
protected Observable<Void> buildUseCaseObservable(RequestValues r) {
|
||||
return Observable.from(() -> {
|
||||
protected Observable<Stats> buildUseCaseObservable(RequestValues r) {
|
||||
return Observable.defer(() -> {
|
||||
Stats stats = r.user.getStats();
|
||||
|
||||
if (r.lvl > stats.getLvl()) {
|
||||
|
|
@ -49,7 +49,7 @@ public class NotifyUserUseCase extends UseCase<NotifyUserUseCase.RequestValues,
|
|||
showSnackbar(r.context, r.snackbarTargetView, pair.first, pair.second);
|
||||
}
|
||||
|
||||
return null;
|
||||
return Observable.just(stats);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package com.habitrpg.android.habitica.modules;
|
||||
|
||||
import com.habitrpg.android.habitica.helpers.PopupNotificationsManager;
|
||||
import com.habitrpg.android.habitica.proxy.ifce.CrashlyticsProxy;
|
||||
import com.magicmicky.habitrpgwrapper.lib.api.ApiClient;
|
||||
import com.habitrpg.android.habitica.ContentCache;
|
||||
|
|
@ -33,8 +34,14 @@ public class ApiModule {
|
|||
|
||||
@Provides
|
||||
@Singleton
|
||||
public ApiClient providesApiHelper(GsonConverterFactory gsonConverter, HostConfig hostConfig, CrashlyticsProxy crashlyticsProxy, Context context) {
|
||||
return new com.habitrpg.android.habitica.ApiClientImpl(gsonConverter, hostConfig, crashlyticsProxy, context);
|
||||
public PopupNotificationsManager providesPopupNotificationsManager(Context context) {
|
||||
return new PopupNotificationsManager(context);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
public ApiClient providesApiHelper(GsonConverterFactory gsonConverter, HostConfig hostConfig, CrashlyticsProxy crashlyticsProxy, PopupNotificationsManager popupNotificationsManager, Context context) {
|
||||
return new com.habitrpg.android.habitica.ApiClientImpl(gsonConverter, hostConfig, crashlyticsProxy, popupNotificationsManager, context);
|
||||
}
|
||||
|
||||
@Provides
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ public class AppModule {
|
|||
@Provides
|
||||
@Named("UserID")
|
||||
public String providesUserID(SharedPreferences sharedPreferences) {
|
||||
return sharedPreferences.getString(application.getString(R.string.SP_userID), null);
|
||||
return sharedPreferences.getString(application.getString(R.string.SP_userID), "");
|
||||
}
|
||||
|
||||
@Provides
|
||||
|
|
@ -60,8 +60,8 @@ public class AppModule {
|
|||
}
|
||||
|
||||
@Provides
|
||||
public SoundFileLoader providesSoundFileLoader() {
|
||||
return new SoundFileLoader();
|
||||
public SoundFileLoader providesSoundFileLoader(Context context) {
|
||||
return new SoundFileLoader(context);
|
||||
}
|
||||
|
||||
@Provides
|
||||
|
|
|
|||
|
|
@ -54,6 +54,7 @@ public class AvatarView extends View {
|
|||
private boolean showBackground = true;
|
||||
private boolean showMount = true;
|
||||
private boolean showPet = true;
|
||||
private boolean showSleeping = true;
|
||||
private boolean hasBackground;
|
||||
private boolean hasMount;
|
||||
private boolean hasPet;
|
||||
|
|
@ -107,6 +108,7 @@ public class AvatarView extends View {
|
|||
showBackground = a.getBoolean(R.styleable.AvatarView_showBackground, true);
|
||||
showMount = a.getBoolean(R.styleable.AvatarView_showMount, true);
|
||||
showPet = a.getBoolean(R.styleable.AvatarView_showPet, true);
|
||||
showSleeping = a.getBoolean(R.styleable.AvatarView_showSleeping, true);
|
||||
} finally {
|
||||
a.recycle();
|
||||
}
|
||||
|
|
@ -191,6 +193,11 @@ public class AvatarView extends View {
|
|||
layerMap.put(LayerType.BACKGROUND, "background_" + backgroundName);
|
||||
if (resetHasAttributes) hasBackground = true;
|
||||
}
|
||||
|
||||
if (showSleeping && user.getPreferences().getSleep()) {
|
||||
layerMap.put(AvatarView.LayerType.ZZZ, "zzz");
|
||||
}
|
||||
|
||||
return layerMap;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ public class MaxHeightLinearLayout extends LinearLayout {
|
|||
|
||||
private final float defaultHeight = 0.9f;
|
||||
private float maxHeight;
|
||||
private DisplayMetrics displaymetrics = new DisplayMetrics();
|
||||
|
||||
public MaxHeightLinearLayout(Context context) {
|
||||
super(context);
|
||||
|
|
@ -58,9 +59,8 @@ public class MaxHeightLinearLayout extends LinearLayout {
|
|||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
||||
|
||||
if (HabiticaApplication.currentActivity != null) {
|
||||
DisplayMetrics displaymetrics = new DisplayMetrics();
|
||||
HabiticaApplication.currentActivity.getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
|
||||
int height = (int) ((int) displaymetrics.heightPixels * maxHeight);
|
||||
int height = (int) (displaymetrics.heightPixels * maxHeight);
|
||||
|
||||
heightMeasureSpec = Math.min(heightMeasureSpec, View.MeasureSpec.makeMeasureSpec(height, View.MeasureSpec.AT_MOST));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,6 +7,8 @@ import android.content.Context;
|
|||
import android.content.res.TypedArray;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.FrameLayout;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
|
@ -25,6 +27,9 @@ public class SpeechBubbleView extends FrameLayout {
|
|||
@BindView(R.id.npc_image_view)
|
||||
ImageView npcImageView;
|
||||
|
||||
@BindView(R.id.confirmation_buttons)
|
||||
ViewGroup confirmationButtons;
|
||||
|
||||
public SpeechBubbleView(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
|
||||
|
|
@ -44,6 +49,8 @@ public class SpeechBubbleView extends FrameLayout {
|
|||
if (iconRes != null) {
|
||||
npcImageView.setImageDrawable(iconRes);
|
||||
}
|
||||
|
||||
confirmationButtons.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -11,6 +11,8 @@ import android.widget.FrameLayout;
|
|||
import android.widget.RelativeLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
|
||||
|
|
@ -18,7 +20,7 @@ public class TutorialView extends FrameLayout implements View.OnClickListener {
|
|||
|
||||
public TutorialStep step;
|
||||
public OnTutorialReaction onReaction;
|
||||
@BindView(R.id.tutorialTextView)
|
||||
@BindView(R.id.textView)
|
||||
TextView tutorialTextView;
|
||||
@BindView(R.id.background)
|
||||
RelativeLayout background;
|
||||
|
|
@ -45,9 +47,9 @@ public class TutorialView extends FrameLayout implements View.OnClickListener {
|
|||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (v == background || v == completeButton) {
|
||||
if (Objects.equals(v, background) || Objects.equals(v, completeButton)) {
|
||||
this.onReaction.onTutorialCompleted(this.step);
|
||||
} else if (v == dismissButton) {
|
||||
} else if (Objects.equals(v, dismissButton)) {
|
||||
this.onReaction.onTutorialDeferred(this.step);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ import com.habitrpg.android.habitica.interactors.DisplayItemDropUseCase;
|
|||
import com.habitrpg.android.habitica.interactors.HabitScoreUseCase;
|
||||
import com.habitrpg.android.habitica.interactors.NotifyUserUseCase;
|
||||
import com.habitrpg.android.habitica.interactors.TodoCheckUseCase;
|
||||
import com.habitrpg.android.habitica.ui.fragments.social.challenges.ChallegeDetailDialogHolder;
|
||||
import com.habitrpg.android.habitica.ui.fragments.social.challenges.ChallengeDetailDialogHolder;
|
||||
import com.habitrpg.android.habitica.ui.fragments.social.challenges.ChallengeTasksRecyclerViewFragment;
|
||||
import com.habitrpg.android.habitica.ui.helpers.MarkdownParser;
|
||||
import com.habitrpg.android.habitica.ui.helpers.UiUtils;
|
||||
|
|
@ -248,7 +248,7 @@ public class ChallengeDetailActivity extends BaseActivity {
|
|||
private void showChallengeLeaveDialog(){
|
||||
new AlertDialog.Builder(this)
|
||||
.setTitle(this.getString(R.string.challenge_leave_title))
|
||||
.setMessage(String.format(this.getString(R.string.challenge_leave_text), challenge.name))
|
||||
.setMessage(this.getString(R.string.challenge_leave_text, challenge.name))
|
||||
.setPositiveButton(this.getString(R.string.yes), (dialog, which) -> {
|
||||
dialog.dismiss();
|
||||
|
||||
|
|
@ -319,23 +319,25 @@ public class ChallengeDetailActivity extends BaseActivity {
|
|||
public void bind(Challenge challenge) {
|
||||
this.challenge = challenge;
|
||||
|
||||
challengeName.setText(EmojiParser.parseEmojis(challenge.name));
|
||||
if (challengeName != null) {
|
||||
challengeName.setText(EmojiParser.parseEmojis(challenge.name));
|
||||
}
|
||||
challengeDescription.setText(MarkdownParser.parseMarkdown(challenge.description));
|
||||
|
||||
memberCountTextView.setText(challenge.memberCount + "");
|
||||
memberCountTextView.setText(String.valueOf(challenge.memberCount));
|
||||
|
||||
if (challenge.prize == 0) {
|
||||
gem_prize_layout.setVisibility(View.GONE);
|
||||
} else {
|
||||
gem_prize_layout.setVisibility(View.VISIBLE);
|
||||
gemPrizeTextView.setText(challenge.prize + "");
|
||||
gemPrizeTextView.setText(String.valueOf(challenge.prize));
|
||||
}
|
||||
}
|
||||
|
||||
@OnClick(R.id.btn_show_more)
|
||||
void onShowMore() {
|
||||
|
||||
ChallegeDetailDialogHolder.showDialog(ChallengeDetailActivity.this, ChallengeDetailActivity.this.apiClient,
|
||||
ChallengeDetailDialogHolder.showDialog(ChallengeDetailActivity.this, ChallengeDetailActivity.this.apiClient,
|
||||
HabiticaApplication.User, challenge,
|
||||
challenge1 -> {
|
||||
|
||||
|
|
@ -394,11 +396,8 @@ public class ChallengeDetailActivity extends BaseActivity {
|
|||
|
||||
public void onTaskDataReceived(TaskDirectionData data, Task task) {
|
||||
if (task.type.equals("reward")) {
|
||||
|
||||
showSnackbar(this, floatingMenuWrapper, getString(R.string.notification_purchase, task.getText()), UiUtils.SnackbarDisplayType.NORMAL);
|
||||
|
||||
} else {
|
||||
|
||||
if (HabiticaApplication.User != null) {
|
||||
notifyUserUseCase.observable(new NotifyUserUseCase.RequestValues(this, floatingMenuWrapper, () -> {
|
||||
// retrieveUser? forward message to MainActivity ? or mark it to refresh ?
|
||||
|
|
|
|||
|
|
@ -124,7 +124,7 @@ public class FullProfileActivity extends BaseActivity {
|
|||
|
||||
setTitle(R.string.profile_loading_data);
|
||||
|
||||
apiClient.GetMember(this.userId)
|
||||
apiClient.getMember(this.userId)
|
||||
|
||||
.subscribe(this::updateView,
|
||||
throwable -> {
|
||||
|
|
@ -248,7 +248,7 @@ public class FullProfileActivity extends BaseActivity {
|
|||
mountsTamedCount.setText(String.valueOf(user.getMountsTamedCount()));
|
||||
|
||||
// Load the members achievements now
|
||||
apiClient.GetMemberAchievements(this.userId)
|
||||
apiClient.getMemberAchievements(this.userId)
|
||||
|
||||
.subscribe(this::fillAchievements,
|
||||
throwable -> {
|
||||
|
|
@ -375,26 +375,28 @@ public class FullProfileActivity extends BaseActivity {
|
|||
outfitList.add(outfit.getShield());
|
||||
outfitList.add(outfit.getWeapon());
|
||||
|
||||
contentCache.GetItemDataList(outfitList, gotEntries);
|
||||
contentCache.getItemDataList(outfitList, gotEntries);
|
||||
}
|
||||
|
||||
public void gotGear(List<ItemData> itemDataList, HabitRPGUser user) {
|
||||
UserStatComputer userStatComputer = new UserStatComputer();
|
||||
List<UserStatComputer.StatsRow> statsRows = userStatComputer.computeClassBonus(itemDataList, user);
|
||||
|
||||
// @TODO: MAke this dynamic by iterating over rows and check type?
|
||||
UserStatComputer.EquipmentRow equipmentRow = (UserStatComputer.EquipmentRow) statsRows.get(0);
|
||||
addEquipmentRow(equipmentTableLayout, equipmentRow.gearKey, equipmentRow.text, equipmentRow.stats);
|
||||
for (UserStatComputer.StatsRow row : statsRows) {
|
||||
if (row.getClass().equals(UserStatComputer.EquipmentRow.class)) {
|
||||
UserStatComputer.EquipmentRow equipmentRow = (UserStatComputer.EquipmentRow) row;
|
||||
addEquipmentRow(equipmentTableLayout, equipmentRow.gearKey, equipmentRow.text, equipmentRow.stats);
|
||||
} else if (row.getClass().equals(UserStatComputer.AttributeRow.class)) {
|
||||
UserStatComputer.AttributeRow attributeRow2 = (UserStatComputer.AttributeRow) row;
|
||||
addAttributeRow(getString(attributeRow2.labelId), attributeRow2.strVal, attributeRow2.intVal, attributeRow2.conVal, attributeRow2.perVal, attributeRow2.roundDown, attributeRow2.isSummary);
|
||||
}
|
||||
}
|
||||
|
||||
stopAndHideProgress(equipmentProgress);
|
||||
equipmentTableLayout.setVisibility(View.VISIBLE);
|
||||
|
||||
// @TOOD: We could probably remove the excess parameters - thank you classes
|
||||
UserStatComputer.AttributeRow attributeRow1 = (UserStatComputer.AttributeRow) statsRows.get(1);
|
||||
addAttributeRow(getString(attributeRow1.labelId) + ": ", attributeRow1.strVal, attributeRow1.intVal, attributeRow1.conVal, attributeRow1.perVal, attributeRow1.roundDown, attributeRow1.isSummary);
|
||||
|
||||
UserStatComputer.AttributeRow attributeRow2 = (UserStatComputer.AttributeRow) statsRows.get(2);
|
||||
addAttributeRow(getString(attributeRow2.labelId), attributeRow2.strVal, attributeRow2.intVal, attributeRow2.conVal, attributeRow2.perVal, attributeRow2.roundDown, attributeRow2.isSummary);
|
||||
stopAndHideProgress(attributesProgress);
|
||||
attributesTableLayout.setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
||||
public void gotCostume(List<ItemData> obj) {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,38 @@
|
|||
package com.habitrpg.android.habitica.ui.activities;
|
||||
|
||||
import com.google.android.gms.auth.GoogleAuthException;
|
||||
import com.google.android.gms.auth.GoogleAuthUtil;
|
||||
import com.google.android.gms.auth.GooglePlayServicesAvailabilityException;
|
||||
import com.google.android.gms.auth.UserRecoverableAuthException;
|
||||
import com.google.android.gms.common.AccountPicker;
|
||||
import com.google.android.gms.common.GooglePlayServicesUtil;
|
||||
import com.google.android.gms.common.Scopes;
|
||||
|
||||
import com.facebook.AccessToken;
|
||||
import com.facebook.CallbackManager;
|
||||
import com.facebook.FacebookCallback;
|
||||
import com.facebook.FacebookException;
|
||||
import com.facebook.FacebookSdk;
|
||||
import com.facebook.login.LoginManager;
|
||||
import com.facebook.login.LoginResult;
|
||||
import com.habitrpg.android.habitica.BuildConfig;
|
||||
import com.habitrpg.android.habitica.HostConfig;
|
||||
import com.habitrpg.android.habitica.R;
|
||||
import com.habitrpg.android.habitica.callbacks.HabitRPGUserCallback;
|
||||
import com.habitrpg.android.habitica.components.AppComponent;
|
||||
import com.habitrpg.android.habitica.helpers.AmplitudeManager;
|
||||
import com.habitrpg.android.habitica.prefs.scanner.IntentIntegrator;
|
||||
import com.habitrpg.android.habitica.prefs.scanner.IntentResult;
|
||||
import com.habitrpg.android.habitica.ui.helpers.UiUtils;
|
||||
import com.habitrpg.android.habitica.ui.views.login.LockableScrollView;
|
||||
import com.habitrpg.android.habitica.ui.views.login.LoginBackgroundView;
|
||||
import com.magicmicky.habitrpgwrapper.lib.api.ApiClient;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.UserAuthResponse;
|
||||
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import android.accounts.AccountManager;
|
||||
import android.animation.Animator;
|
||||
import android.animation.AnimatorListenerAdapter;
|
||||
|
|
@ -35,36 +68,6 @@ import android.widget.ProgressBar;
|
|||
import android.widget.ScrollView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.facebook.AccessToken;
|
||||
import com.facebook.CallbackManager;
|
||||
import com.facebook.FacebookCallback;
|
||||
import com.facebook.FacebookException;
|
||||
import com.facebook.login.LoginManager;
|
||||
import com.facebook.login.LoginResult;
|
||||
import com.google.android.gms.auth.GoogleAuthException;
|
||||
import com.google.android.gms.auth.GoogleAuthUtil;
|
||||
import com.google.android.gms.auth.GooglePlayServicesAvailabilityException;
|
||||
import com.google.android.gms.auth.UserRecoverableAuthException;
|
||||
import com.google.android.gms.common.AccountPicker;
|
||||
import com.google.android.gms.common.GooglePlayServicesUtil;
|
||||
import com.google.android.gms.common.Scopes;
|
||||
import com.habitrpg.android.habitica.BuildConfig;
|
||||
import com.habitrpg.android.habitica.HostConfig;
|
||||
import com.habitrpg.android.habitica.R;
|
||||
import com.habitrpg.android.habitica.callbacks.HabitRPGUserCallback;
|
||||
import com.habitrpg.android.habitica.components.AppComponent;
|
||||
import com.habitrpg.android.habitica.helpers.AmplitudeManager;
|
||||
import com.habitrpg.android.habitica.prefs.scanner.IntentIntegrator;
|
||||
import com.habitrpg.android.habitica.prefs.scanner.IntentResult;
|
||||
import com.habitrpg.android.habitica.ui.views.login.LockableScrollView;
|
||||
import com.habitrpg.android.habitica.ui.views.login.LoginBackgroundView;
|
||||
import com.magicmicky.habitrpgwrapper.lib.api.ApiClient;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.UserAuthResponse;
|
||||
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
|
|
@ -78,6 +81,7 @@ import butterknife.OnClick;
|
|||
import rx.Observable;
|
||||
import rx.exceptions.Exceptions;
|
||||
import rx.functions.Action1;
|
||||
import rx.schedulers.Schedulers;
|
||||
|
||||
/**
|
||||
* @author Mickael Goubin
|
||||
|
|
@ -131,12 +135,11 @@ public class LoginActivity extends BaseActivity
|
|||
EditText mEmail;
|
||||
@BindView(R.id.confirm_password)
|
||||
EditText mConfirmPassword;
|
||||
@BindView(R.id.fb_login_button)
|
||||
Button mFacebookLoginBtn;
|
||||
@BindView(R.id.forgot_pw_tv)
|
||||
TextView mForgotPWTV;
|
||||
private CallbackManager callbackManager;
|
||||
private String googleEmail;
|
||||
private LoginManager loginManager;
|
||||
|
||||
@Override
|
||||
protected int getLayoutResId() {
|
||||
|
|
@ -184,10 +187,12 @@ public class LoginActivity extends BaseActivity
|
|||
|
||||
private void setupFacebookLogin() {
|
||||
callbackManager = CallbackManager.Factory.create();
|
||||
LoginManager.getInstance().registerCallback(callbackManager,
|
||||
loginManager = LoginManager.getInstance();
|
||||
loginManager.registerCallback(callbackManager,
|
||||
new FacebookCallback<LoginResult>() {
|
||||
@Override
|
||||
public void onSuccess(LoginResult loginResult) {
|
||||
Log.e("Login", "SUCCESS");
|
||||
AccessToken accessToken = AccessToken.getCurrentAccessToken();
|
||||
apiClient.connectSocial("facebook", accessToken.getUserId(), accessToken.getToken())
|
||||
.subscribe(LoginActivity.this, throwable -> hideProgress());
|
||||
|
|
@ -195,10 +200,12 @@ public class LoginActivity extends BaseActivity
|
|||
|
||||
@Override
|
||||
public void onCancel() {
|
||||
Log.e("Login", "CANCEL");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(FacebookException exception) {
|
||||
exception.printStackTrace();
|
||||
}
|
||||
});
|
||||
|
||||
|
|
@ -206,8 +213,11 @@ public class LoginActivity extends BaseActivity
|
|||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
|
||||
super.onBackPressed();
|
||||
if (isShowingForm) {
|
||||
hideForm();
|
||||
} else {
|
||||
super.onBackPressed();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -334,6 +344,15 @@ public class LoginActivity extends BaseActivity
|
|||
if (requestCode == REQUEST_CODE_RECOVER_FROM_PLAY_SERVICES_ERROR) {
|
||||
handleGoogleLoginResult();
|
||||
}
|
||||
|
||||
if (requestCode == FacebookSdk.getCallbackRequestCodeOffset()) {
|
||||
//This is necessary because the regular login callback is not called for some reason
|
||||
AccessToken accessToken = AccessToken.getCurrentAccessToken();
|
||||
if (accessToken.getToken() != null) {
|
||||
apiClient.connectSocial("facebook", accessToken.getUserId(), accessToken.getToken())
|
||||
.subscribe(LoginActivity.this, throwable -> hideProgress());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void parse(String contents) {
|
||||
|
|
@ -438,7 +457,7 @@ public class LoginActivity extends BaseActivity
|
|||
|
||||
@OnClick(R.id.fb_login_button)
|
||||
public void handleFacebookLogin() {
|
||||
LoginManager.getInstance().logInWithReadPermissions(this, Collections.singletonList("user_friends"));
|
||||
loginManager.logInWithReadPermissions(this, Collections.singletonList("user_friends"));
|
||||
}
|
||||
|
||||
@OnClick(R.id.google_login_button)
|
||||
|
|
@ -468,9 +487,10 @@ public class LoginActivity extends BaseActivity
|
|||
throw Exceptions.propagate(e);
|
||||
}
|
||||
})
|
||||
.subscribeOn(Schedulers.io())
|
||||
.flatMap(token -> apiClient.connectSocial("google", googleEmail, token))
|
||||
|
||||
.subscribe(LoginActivity.this, throwable -> {
|
||||
throwable.printStackTrace();
|
||||
hideProgress();
|
||||
if (throwable.getCause() != null && GoogleAuthException.class.isAssignableFrom(throwable.getCause().getClass())) {
|
||||
handleGoogleAuthException((GoogleAuthException) throwable.getCause());
|
||||
|
|
@ -520,6 +540,7 @@ public class LoginActivity extends BaseActivity
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
private void showForm() {
|
||||
isShowingForm = true;
|
||||
ValueAnimator panAnimation = ObjectAnimator.ofInt(backgroundContainer, "scrollY", 0).setDuration(1000);
|
||||
|
|
@ -599,5 +620,6 @@ public class LoginActivity extends BaseActivity
|
|||
showAnimation.play(newGameAlphaAnimation).after(scrollViewAlphaAnimation);
|
||||
showAnimation.play(showLoginAlphaAnimation).after(scrollViewAlphaAnimation);
|
||||
showAnimation.start();
|
||||
UiUtils.dismissKeyboard(this);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,13 +2,13 @@ package com.habitrpg.android.habitica.ui.activities;
|
|||
|
||||
import android.appwidget.AppWidgetManager;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.pm.PackageInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.ResolveInfo;
|
||||
import android.content.res.Configuration;
|
||||
import android.content.res.Resources;
|
||||
import android.database.sqlite.SQLiteDoneException;
|
||||
import android.databinding.DataBindingUtil;
|
||||
import android.graphics.Bitmap;
|
||||
|
|
@ -19,23 +19,21 @@ import android.os.Build;
|
|||
import android.os.Bundle;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.design.widget.CoordinatorLayout;
|
||||
import android.support.design.widget.TabLayout;
|
||||
import android.support.v4.app.FragmentTransaction;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.support.v4.content.FileProvider;
|
||||
import android.support.v4.view.GravityCompat;
|
||||
import android.support.v4.view.OnApplyWindowInsetsListener;
|
||||
import android.support.v4.view.ViewCompat;
|
||||
import android.support.v4.view.WindowInsetsCompat;
|
||||
import android.support.v4.widget.DrawerLayout;
|
||||
import android.support.v7.app.AlertDialog;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.util.Log;
|
||||
import android.util.TypedValue;
|
||||
import android.view.Gravity;
|
||||
import android.view.Display;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.Window;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.FrameLayout;
|
||||
|
|
@ -133,7 +131,6 @@ import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task;
|
|||
import com.magicmicky.habitrpgwrapper.lib.models.tasks.TaskTag;
|
||||
import com.mikepenz.materialdrawer.AccountHeader;
|
||||
import com.mikepenz.materialdrawer.Drawer;
|
||||
import com.mikepenz.materialdrawer.DrawerBuilder;
|
||||
import com.mikepenz.materialdrawer.holder.BadgeStyle;
|
||||
import com.mikepenz.materialdrawer.model.PrimaryDrawerItem;
|
||||
import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem;
|
||||
|
|
@ -193,8 +190,7 @@ public class MainActivity extends BaseActivity implements Action1<Throwable>, Ha
|
|||
public MaintenanceApiService maintenanceService;
|
||||
public HabitRPGUser user;
|
||||
@BindView(R.id.floating_menu_wrapper)
|
||||
public
|
||||
FrameLayout floatingMenuWrapper;
|
||||
public ViewGroup floatingMenuWrapper;
|
||||
@BindView(R.id.bottom_navigation)
|
||||
BottomBar bottomNavigation;
|
||||
@Inject
|
||||
|
|
@ -210,7 +206,7 @@ public class MainActivity extends BaseActivity implements Action1<Throwable>, Ha
|
|||
@BindView(R.id.avatar_with_bars)
|
||||
View avatar_with_bars;
|
||||
@BindView(R.id.overlayFrameLayout)
|
||||
CoordinatorLayout overlayFrameLayout;
|
||||
ViewGroup overlayLayout;
|
||||
PushNotificationManager pushNotificationManager;
|
||||
// region UseCases
|
||||
|
||||
|
|
@ -249,7 +245,6 @@ public class MainActivity extends BaseActivity implements Action1<Throwable>, Ha
|
|||
private AvatarWithBarsViewModel avatarInHeader;
|
||||
private AlertDialog faintDialog;
|
||||
private AvatarView sideAvatarView;
|
||||
private AvatarView dialogAvatarView;
|
||||
private Date lastSync;
|
||||
private TutorialView activeTutorialView;
|
||||
private boolean isloadingContent;
|
||||
|
|
@ -318,7 +313,6 @@ public class MainActivity extends BaseActivity implements Action1<Throwable>, Ha
|
|||
toolbar.setPadding(0, getStatusBarHeight(), 0, 0);
|
||||
float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 16, getResources().getDisplayMetrics());
|
||||
avatar_with_bars.setPadding((int)px, getStatusBarHeight(), (int)px, 0);
|
||||
floatingMenuWrapper.setPadding(0, 0, 0, getNavigationBarHeight());
|
||||
}
|
||||
|
||||
EventBus.getDefault().register(this);
|
||||
|
|
@ -334,15 +328,6 @@ public class MainActivity extends BaseActivity implements Action1<Throwable>, Ha
|
|||
return result;
|
||||
}
|
||||
|
||||
private int getNavigationBarHeight() {
|
||||
int result = 0;
|
||||
int resourceId = getResources().getIdentifier("navigation_bar_height", "dimen", "android");
|
||||
if (resourceId > 0) {
|
||||
result = getResources().getDimensionPixelSize(resourceId);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void injectActivity(AppComponent component) {
|
||||
component.inject(this);
|
||||
|
|
@ -383,9 +368,7 @@ public class MainActivity extends BaseActivity implements Action1<Throwable>, Ha
|
|||
AlertDialog dialog = new AlertDialog.Builder(MainActivity.this)
|
||||
.setTitle(getString(R.string.warning))
|
||||
.setMessage(R.string.dont_keep_activities_warning)
|
||||
.setNeutralButton(R.string.close, (warningDialog, which) -> {
|
||||
warningDialog.dismiss();
|
||||
})
|
||||
.setNeutralButton(R.string.close, (warningDialog, which) -> warningDialog.dismiss())
|
||||
.setPositiveButton(R.string.open_settings, (hatchingDialog, which) -> {
|
||||
showDeveloperOptionsScreen();
|
||||
hatchingDialog.dismiss();
|
||||
|
|
@ -1122,9 +1105,7 @@ public class MainActivity extends BaseActivity implements Action1<Throwable>, Ha
|
|||
);
|
||||
} else {
|
||||
buyRewardUseCase.observable(new BuyRewardUseCase.RequestValues(event.Reward))
|
||||
.subscribe(res -> {
|
||||
onTaskDataReceived(res, event.Reward);
|
||||
}, error -> {
|
||||
.subscribe(res -> onTaskDataReceived(res, event.Reward), error -> {
|
||||
});
|
||||
}
|
||||
|
||||
|
|
@ -1148,17 +1129,15 @@ public class MainActivity extends BaseActivity implements Action1<Throwable>, Ha
|
|||
@Subscribe
|
||||
public void openMysteryItem(OpenMysteryItemEvent event) {
|
||||
apiClient.openMysteryItem()
|
||||
.subscribe(mysteryItem -> {
|
||||
apiClient.retrieveUser(false)
|
||||
.subscribe(new HabitRPGUserCallback(user1 -> {
|
||||
OpenedMysteryItemEvent openedEvent = new OpenedMysteryItemEvent();
|
||||
openedEvent.numberLeft = user1.getPurchased().getPlan().mysteryItems.size();
|
||||
openedEvent.mysteryItem = mysteryItem;
|
||||
EventBus.getDefault().post(openedEvent);
|
||||
MainActivity.this.onUserReceived(user1);
|
||||
}), throwable -> {
|
||||
});
|
||||
}, throwable -> {
|
||||
.subscribe(mysteryItem -> apiClient.retrieveUser(false)
|
||||
.subscribe(new HabitRPGUserCallback(user1 -> {
|
||||
OpenedMysteryItemEvent openedEvent = new OpenedMysteryItemEvent();
|
||||
openedEvent.numberLeft = user1.getPurchased().getPlan().mysteryItems.size();
|
||||
openedEvent.mysteryItem = mysteryItem;
|
||||
EventBus.getDefault().post(openedEvent);
|
||||
MainActivity.this.onUserReceived(user1);
|
||||
}), throwable -> {
|
||||
}), throwable -> {
|
||||
});
|
||||
}
|
||||
|
||||
|
|
@ -1207,15 +1186,13 @@ public class MainActivity extends BaseActivity implements Action1<Throwable>, Ha
|
|||
AlertDialog dialog = new AlertDialog.Builder(MainActivity.this)
|
||||
.setTitle(getString(R.string.hatched_pet_title, potionName, eggName))
|
||||
.setView(petWrapper)
|
||||
.setPositiveButton(R.string.close, (hatchingDialog, which) -> {
|
||||
hatchingDialog.dismiss();
|
||||
})
|
||||
.setPositiveButton(R.string.close, (hatchingDialog, which) -> hatchingDialog.dismiss())
|
||||
.setNeutralButton(R.string.share, (hatchingDialog, which) -> {
|
||||
ShareEvent event1 = new ShareEvent();
|
||||
event1.sharedMessage = getString(R.string.share_hatched, potionName, eggName) + " https://habitica.com/social/hatch-pet";
|
||||
Bitmap sharedImage = Bitmap.createBitmap(140, 140, Bitmap.Config.ARGB_8888);
|
||||
Canvas canvas = new Canvas(sharedImage);
|
||||
canvas.drawColor(getResources().getColor(R.color.brand_300));
|
||||
canvas.drawColor(ContextCompat.getColor(this, R.color.brand_300));
|
||||
petImageView.getDrawable().draw(canvas);
|
||||
event1.shareImage = sharedImage;
|
||||
EventBus.getDefault().post(event1);
|
||||
|
|
@ -1258,7 +1235,7 @@ public class MainActivity extends BaseActivity implements Action1<Throwable>, Ha
|
|||
event1.sharedMessage = getString(R.string.share_raised, colorName, animalName) + " https://habitica.com/social/raise-pet";
|
||||
Bitmap sharedImage = Bitmap.createBitmap(99, 99, Bitmap.Config.ARGB_8888);
|
||||
Canvas canvas = new Canvas(sharedImage);
|
||||
canvas.drawColor(getResources().getColor(R.color.brand_300));
|
||||
canvas.drawColor(ContextCompat.getColor(this, R.color.brand_300));
|
||||
mountImageView.getDrawable().draw(canvas);
|
||||
event1.shareImage = sharedImage;
|
||||
EventBus.getDefault().post(event1);
|
||||
|
|
@ -1289,6 +1266,7 @@ public class MainActivity extends BaseActivity implements Action1<Throwable>, Ha
|
|||
|
||||
@Override
|
||||
public void onTaskDataReceived(TaskDirectionData data, Task task) {
|
||||
|
||||
if (task.type.equals("reward")) {
|
||||
|
||||
showSnackbar(this, floatingMenuWrapper, getString(R.string.notification_purchase, task.getText()), SnackbarDisplayType.NORMAL);
|
||||
|
|
@ -1297,12 +1275,20 @@ public class MainActivity extends BaseActivity implements Action1<Throwable>, Ha
|
|||
|
||||
if (user != null) {
|
||||
notifyUserUseCase.observable(new NotifyUserUseCase.RequestValues(this, floatingMenuWrapper, this::retrieveUser,
|
||||
user, data.getExp(), data.getHp(), data.getGp(), data.getMp(), data.getLvl()));
|
||||
user, data.getExp(), data.getHp(), data.getGp(), data.getMp(), data.getLvl()))
|
||||
.subscribe(aVoid -> {
|
||||
user.getStats().hp = data.getHp();
|
||||
user.getStats().exp = data.getExp();
|
||||
user.getStats().mp = data.getMp();
|
||||
user.getStats().gp = data.getGp();
|
||||
setUserData(true);
|
||||
}, throwable -> {});
|
||||
}
|
||||
|
||||
displayItemDropUseCase.observable(new DisplayItemDropUseCase.RequestValues(data, this, floatingMenuWrapper))
|
||||
.subscribe(aVoid -> {}, throwable -> {});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -1322,7 +1308,7 @@ public class MainActivity extends BaseActivity implements Action1<Throwable>, Ha
|
|||
hpBar.setPartyMembers(true);
|
||||
AvatarWithBarsViewModel.setHpBarData(hpBar, user.getStats(), this);
|
||||
|
||||
dialogAvatarView = (AvatarView) customView.findViewById(R.id.avatarView);
|
||||
AvatarView dialogAvatarView = (AvatarView) customView.findViewById(R.id.avatarView);
|
||||
dialogAvatarView.setUser(user);
|
||||
}
|
||||
|
||||
|
|
@ -1354,7 +1340,7 @@ public class MainActivity extends BaseActivity implements Action1<Throwable>, Ha
|
|||
return super.onKeyUp(keyCode, event);
|
||||
}
|
||||
|
||||
public FrameLayout getFloatingMenuWrapper() {
|
||||
public ViewGroup getFloatingMenuWrapper() {
|
||||
return floatingMenuWrapper;
|
||||
}
|
||||
|
||||
|
|
@ -1376,7 +1362,7 @@ public class MainActivity extends BaseActivity implements Action1<Throwable>, Ha
|
|||
TutorialView view = new TutorialView(this, step, this);
|
||||
view.setTutorialText(text);
|
||||
view.onReaction = this;
|
||||
this.overlayFrameLayout.addView(view);
|
||||
this.overlayLayout.addView(view);
|
||||
this.activeTutorialView = view;
|
||||
|
||||
Map<String, Object> additionalData = new HashMap<>();
|
||||
|
|
@ -1395,7 +1381,7 @@ public class MainActivity extends BaseActivity implements Action1<Throwable>, Ha
|
|||
|
||||
.subscribe(new MergeUserCallback(this, user), throwable -> {
|
||||
});
|
||||
this.overlayFrameLayout.removeView(this.activeTutorialView);
|
||||
this.overlayLayout.removeView(this.activeTutorialView);
|
||||
this.removeActiveTutorialView();
|
||||
|
||||
Map<String, Object> additionalData = new HashMap<>();
|
||||
|
|
@ -1415,7 +1401,7 @@ public class MainActivity extends BaseActivity implements Action1<Throwable>, Ha
|
|||
|
||||
private void removeActiveTutorialView() {
|
||||
if (this.activeTutorialView != null) {
|
||||
this.overlayFrameLayout.removeView(this.activeTutorialView);
|
||||
this.overlayLayout.removeView(this.activeTutorialView);
|
||||
this.activeTutorialView = null;
|
||||
}
|
||||
}
|
||||
|
|
@ -1449,17 +1435,13 @@ public class MainActivity extends BaseActivity implements Action1<Throwable>, Ha
|
|||
switch (event.Task.type) {
|
||||
case Task.TYPE_DAILY: {
|
||||
dailyCheckUseCase.observable(new DailyCheckUseCase.RequestValues(event.Task, !event.Task.getCompleted()))
|
||||
.subscribe(res -> {
|
||||
EventBus.getDefault().post(new TaskUpdatedEvent(event.Task));
|
||||
}, error -> {
|
||||
.subscribe(new TaskScoringCallback(this, event.Task.getId()), error -> {
|
||||
});
|
||||
}
|
||||
break;
|
||||
case Task.TYPE_TODO: {
|
||||
todoCheckUseCase.observable(new TodoCheckUseCase.RequestValues(event.Task, !event.Task.getCompleted()))
|
||||
.subscribe(res -> {
|
||||
EventBus.getDefault().post(new TaskUpdatedEvent(event.Task));
|
||||
}, error -> {
|
||||
.subscribe(new TaskScoringCallback(this, event.Task.getId()), error -> {
|
||||
});
|
||||
}
|
||||
break;
|
||||
|
|
@ -1469,14 +1451,14 @@ public class MainActivity extends BaseActivity implements Action1<Throwable>, Ha
|
|||
@Subscribe
|
||||
public void onEvent(ChecklistCheckedCommand event) {
|
||||
checklistCheckUseCase.observable(new ChecklistCheckUseCase.RequestValues(event.task.getId(), event.item.getId()))
|
||||
.subscribe(res -> EventBus.getDefault().post(new TaskUpdatedEvent(event.task)), error -> {
|
||||
.subscribe(new TaskUpdateCallback(), error -> {
|
||||
});
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onEvent(HabitScoreEvent event) {
|
||||
habitScoreUseCase.observable(new HabitScoreUseCase.RequestValues(event.habit, event.Up))
|
||||
.subscribe(res -> onTaskDataReceived(res, event.habit), error -> {
|
||||
.subscribe(new TaskScoringCallback(this, event.habit.getId()), error -> {
|
||||
});
|
||||
}
|
||||
|
||||
|
|
@ -1546,15 +1528,6 @@ public class MainActivity extends BaseActivity implements Action1<Throwable>, Ha
|
|||
}
|
||||
}
|
||||
|
||||
public void closeDrawer(int gravity) {
|
||||
this.drawer.closeDrawer();
|
||||
}
|
||||
|
||||
public void openDrawer(int gravity) {
|
||||
EventBus.getDefault().post(new ToggledEditTagsEvent(false));
|
||||
this.drawer.openDrawer();
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onEvent(OpenFullProfileCommand cmd) {
|
||||
if (cmd.MemberId.equals("system"))
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ import android.support.v7.preference.PreferenceManager;
|
|||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
|
||||
import com.habitrpg.android.habitica.ui.views.FadingViewPager;
|
||||
import com.magicmicky.habitrpgwrapper.lib.api.ApiClient;
|
||||
import com.habitrpg.android.habitica.HostConfig;
|
||||
import com.habitrpg.android.habitica.R;
|
||||
|
|
@ -68,7 +69,7 @@ public class SetupActivity extends BaseActivity implements ViewPager.OnPageChang
|
|||
@Inject
|
||||
protected HostConfig hostConfig;
|
||||
@BindView(R.id.view_pager)
|
||||
ViewPager pager;
|
||||
FadingViewPager pager;
|
||||
@BindView(R.id.nextButton)
|
||||
Button nextButton;
|
||||
@BindView(R.id.previousButton)
|
||||
|
|
@ -107,8 +108,16 @@ public class SetupActivity extends BaseActivity implements ViewPager.OnPageChang
|
|||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
Window window = getWindow();
|
||||
window.setStatusBarColor(ContextCompat.getColor(this, R.color.days_gray));
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||
View decor = getWindow().getDecorView();
|
||||
decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
|
||||
window.setStatusBarColor(ContextCompat.getColor(this, R.color.light_gray_bg));
|
||||
} else {
|
||||
window.setStatusBarColor(ContextCompat.getColor(this, R.color.days_gray));
|
||||
}
|
||||
}
|
||||
|
||||
pager.disableFading = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -58,7 +58,6 @@ public class CustomizationSetupAdapter extends RecyclerView.Adapter<RecyclerView
|
|||
|
||||
@Override
|
||||
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
|
||||
Object obj = customizationList.get(position);
|
||||
((CustomizationViewHolder) holder).bind(customizationList.get(position));
|
||||
}
|
||||
|
||||
|
|
@ -155,12 +154,20 @@ public class CustomizationSetupAdapter extends RecyclerView.Adapter<RecyclerView
|
|||
imageView.setImageDrawable(null);
|
||||
}
|
||||
textView.setText(customization.text);
|
||||
if (isCustomizationActive(customization)) {
|
||||
imageView.setBackgroundResource(R.drawable.setup_customization_bg_selected);
|
||||
textView.setTextColor(ContextCompat.getColor(context, R.color.white));
|
||||
if ("flowers".equals(customization.subcategory)) {
|
||||
if (isCustomizationActive(customization)) {
|
||||
imageView.setBackgroundResource(R.drawable.setup_customization_flower_bg_selected);
|
||||
} else {
|
||||
imageView.setBackgroundResource(R.drawable.setup_customization_flower_bg);
|
||||
}
|
||||
} else {
|
||||
imageView.setBackgroundResource(R.drawable.setup_customization_bg);
|
||||
textView.setTextColor(ContextCompat.getColor(context, R.color.white_50_alpha));
|
||||
if (isCustomizationActive(customization)) {
|
||||
imageView.setBackgroundResource(R.drawable.setup_customization_bg_selected);
|
||||
textView.setTextColor(ContextCompat.getColor(context, R.color.white));
|
||||
} else {
|
||||
imageView.setBackgroundResource(R.drawable.setup_customization_bg);
|
||||
textView.setTextColor(ContextCompat.getColor(context, R.color.white_50_alpha));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -168,7 +175,11 @@ public class CustomizationSetupAdapter extends RecyclerView.Adapter<RecyclerView
|
|||
public void onClick(View v) {
|
||||
if (customization.path.equals("glasses")) {
|
||||
EquipCommand command = new EquipCommand();
|
||||
command.key = customization.key;
|
||||
if (customization.key.length() == 0) {
|
||||
command.key = user.getItems().getGear().getEquipped().getEyeWear();
|
||||
} else {
|
||||
command.key = customization.key;
|
||||
}
|
||||
command.type = "equipped";
|
||||
EventBus.getDefault().post(command);
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -64,7 +64,7 @@ public class TaskSetupAdapter extends RecyclerView.Adapter<TaskSetupAdapter.Task
|
|||
|
||||
Context context;
|
||||
|
||||
public TaskViewHolder(View itemView) {
|
||||
TaskViewHolder(View itemView) {
|
||||
super(itemView);
|
||||
|
||||
ButterKnife.bind(this, itemView);
|
||||
|
|
@ -73,7 +73,7 @@ public class TaskSetupAdapter extends RecyclerView.Adapter<TaskSetupAdapter.Task
|
|||
|
||||
itemView.setOnClickListener(this);
|
||||
|
||||
icon = ContextCompat.getDrawable(context, R.drawable.ic_check);
|
||||
icon = ContextCompat.getDrawable(context, R.drawable.ic_check_white_18dp);
|
||||
icon.setColorFilter(ContextCompat.getColor(context, R.color.brand_100), PorterDuff.Mode.MULTIPLY);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ public class AchievementAdapter extends RecyclerView.Adapter<RecyclerView.ViewHo
|
|||
public MainActivity activity;
|
||||
private List<Object> itemList;
|
||||
|
||||
public <T extends Achievement> void setItemList(List<Object> itemList) {
|
||||
public void setItemList(List<Object> itemList) {
|
||||
this.itemList = itemList;
|
||||
this.notifyDataSetChanged();
|
||||
}
|
||||
|
|
@ -93,7 +93,7 @@ public class AchievementAdapter extends RecyclerView.Adapter<RecyclerView.ViewHo
|
|||
|
||||
Resources resources;
|
||||
|
||||
public AchievementViewHolder(View itemView) {
|
||||
AchievementViewHolder(View itemView) {
|
||||
super(itemView);
|
||||
ButterKnife.bind(this, itemView);
|
||||
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ import com.raizlabs.android.dbflow.sql.language.Select;
|
|||
|
||||
import android.content.Context;
|
||||
import android.databinding.ObservableArrayList;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
|
|
@ -35,12 +36,12 @@ public abstract class BaseTasksRecyclerViewAdapter<VH extends BaseTaskViewHolder
|
|||
protected CrashlyticsProxy crashlyticsProxy;
|
||||
protected List<Task> content;
|
||||
protected List<Task> filteredContent;
|
||||
int layoutResource;
|
||||
private int layoutResource;
|
||||
Context context;
|
||||
private TaskFilterHelper taskFilterHelper;
|
||||
|
||||
public BaseTasksRecyclerViewAdapter(String taskType, TaskFilterHelper taskFilterHelper, int layoutResource,
|
||||
Context newContext, String userID) {
|
||||
Context newContext, @Nullable String userID) {
|
||||
this.setHasStableIds(true);
|
||||
this.taskType = taskType;
|
||||
this.context = newContext.getApplicationContext();
|
||||
|
|
@ -81,11 +82,11 @@ public abstract class BaseTasksRecyclerViewAdapter<VH extends BaseTaskViewHolder
|
|||
return filteredContent != null ? filteredContent.size() : 0;
|
||||
}
|
||||
|
||||
public View getContentView(ViewGroup parent) {
|
||||
View getContentView(ViewGroup parent) {
|
||||
return getContentView(parent, layoutResource);
|
||||
}
|
||||
|
||||
public View getContentView(ViewGroup parent, int layoutResource) {
|
||||
protected View getContentView(ViewGroup parent, int layoutResource) {
|
||||
return LayoutInflater.from(parent.getContext()).inflate(layoutResource, parent, false);
|
||||
}
|
||||
|
||||
|
|
@ -105,7 +106,7 @@ public abstract class BaseTasksRecyclerViewAdapter<VH extends BaseTaskViewHolder
|
|||
}
|
||||
|
||||
public void filter() {
|
||||
if (this.taskFilterHelper == null || this.taskFilterHelper.howMany() == 0) {
|
||||
if (this.taskFilterHelper == null || this.taskFilterHelper.howMany(taskType) == 0) {
|
||||
filteredContent = content;
|
||||
} else {
|
||||
filteredContent = new ObservableArrayList<>();
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ public class RewardsRecyclerViewAdapter extends BaseTasksRecyclerViewAdapter<Rew
|
|||
private ApiClient apiClient;
|
||||
|
||||
public RewardsRecyclerViewAdapter(String taskType, TaskFilterHelper taskFilterHelper, int layoutResource, Context newContext, HabitRPGUser user, ApiClient apiClient) {
|
||||
super(taskType, taskFilterHelper, layoutResource, newContext, user.getId());
|
||||
super(taskType, taskFilterHelper, layoutResource, newContext, user != null ? user.getId() : null);
|
||||
this.user = user;
|
||||
this.apiClient = apiClient;
|
||||
this.contentCache = new ContentCache(apiClient);
|
||||
|
|
@ -40,7 +40,7 @@ public class RewardsRecyclerViewAdapter extends BaseTasksRecyclerViewAdapter<Rew
|
|||
return new RewardViewHolder(getContentView(parent));
|
||||
}
|
||||
|
||||
public void loadEquipmentRewards() {
|
||||
private void loadEquipmentRewards() {
|
||||
if (apiClient != null) {
|
||||
apiClient.getInventoryBuyableGear()
|
||||
|
||||
|
|
@ -54,9 +54,9 @@ public class RewardsRecyclerViewAdapter extends BaseTasksRecyclerViewAdapter<Rew
|
|||
if (user.getFlags().getArmoireEnabled()) {
|
||||
itemKeys.add("armoire");
|
||||
}
|
||||
return Observable.create((Observable.OnSubscribe<List<Task>>) subscriber -> {
|
||||
contentCache.GetItemDataList(itemKeys, obj -> {
|
||||
ArrayList<Task> buyableItems = new ArrayList<>();
|
||||
return Observable.create((Observable.OnSubscribe<List<Task>>) subscriber -> contentCache.getItemDataList(itemKeys, obj -> {
|
||||
ArrayList<Task> buyableItems = new ArrayList<>();
|
||||
if (obj != null) {
|
||||
for (ItemData item : obj) {
|
||||
Task reward = new Task();
|
||||
reward.text = item.text;
|
||||
|
|
@ -66,7 +66,7 @@ public class RewardsRecyclerViewAdapter extends BaseTasksRecyclerViewAdapter<Rew
|
|||
reward.specialTag = "item";
|
||||
reward.setId(item.key);
|
||||
|
||||
if (item.key.equals("armoire")) {
|
||||
if ("armoire".equals(item.key)) {
|
||||
if (user.getFlags().getArmoireEmpty()) {
|
||||
reward.notes = context.getResources().getString(R.string.armoireNotesEmpty);
|
||||
} else {
|
||||
|
|
@ -81,10 +81,10 @@ public class RewardsRecyclerViewAdapter extends BaseTasksRecyclerViewAdapter<Rew
|
|||
|
||||
buyableItems.add(reward);
|
||||
}
|
||||
subscriber.onNext(buyableItems);
|
||||
subscriber.onCompleted();
|
||||
});
|
||||
});
|
||||
}
|
||||
subscriber.onNext(buyableItems);
|
||||
subscriber.onCompleted();
|
||||
}));
|
||||
})
|
||||
.subscribe(items -> {
|
||||
this.filteredContent.addAll(items);
|
||||
|
|
|
|||