diff --git a/Habitica/build.gradle b/Habitica/build.gradle
index d64a5d134..db0f4deb2 100644
--- a/Habitica/build.gradle
+++ b/Habitica/build.gradle
@@ -148,7 +148,7 @@ android {
buildConfigField "String", "STORE", "\"google\""
multiDexEnabled true
- versionCode 2045
+ versionCode 2046
versionName "1.7"
}
@@ -175,7 +175,7 @@ android {
}
release {
signingConfig signingConfigs.release
- debuggable false
+ debuggable true
multiDexEnabled true
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
diff --git a/Habitica/res/layout/drawer_main.xml b/Habitica/res/layout/drawer_main.xml
index 2f6918c37..776615b41 100644
--- a/Habitica/res/layout/drawer_main.xml
+++ b/Habitica/res/layout/drawer_main.xml
@@ -57,6 +57,7 @@
@@ -84,9 +85,10 @@
tools:visibility="visible"/>
+ android:paddingLeft="8dp">
While this promotion is active, you’ll receive a matching subscription automatically after sending your gift.
Choose the subscription you’d like to gift below! This purchase won’t automatically renew.
Send Gift
+ Server
diff --git a/Habitica/res/values/values.xml b/Habitica/res/values/values.xml
index 0cca16de8..34d4d74d6 100644
--- a/Habitica/res/values/values.xml
+++ b/Habitica/res/values/values.xml
@@ -123,5 +123,14 @@
- dewinTheme
- airuTheme
+
+
+ - https://habitica.com
+ - https://habitrpg-staging.herokuapp.com
+ - https://habitrpg-beta.herokuapp.com
+ - https://habitrpg-gamma.herokuapp.com
+ - https://habitrpg-delta.herokuapp.com
+
+
Monthly
diff --git a/Habitica/res/xml/preferences_fragment.xml b/Habitica/res/xml/preferences_fragment.xml
index 21f7b15aa..c8d52df8a 100644
--- a/Habitica/res/xml/preferences_fragment.xml
+++ b/Habitica/res/xml/preferences_fragment.xml
@@ -246,6 +246,11 @@
+
\ No newline at end of file
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaPurchaseVerifier.java b/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaPurchaseVerifier.java
index 7aef5d21d..55d4378c9 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaPurchaseVerifier.java
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaPurchaseVerifier.java
@@ -61,12 +61,13 @@ public class HabiticaPurchaseVerifier extends BasePurchaseVerifier {
} else {
if (PurchaseTypes.allGemTypes.contains(purchase.sku)) {
PurchaseValidationRequest validationRequest = new PurchaseValidationRequest();
- validationRequest.transaction = new Transaction();
- validationRequest.transaction.receipt = purchase.data;
- validationRequest.transaction.signature = purchase.signature;
+ validationRequest.setSku(purchase.sku);
+ validationRequest.setTransaction(new Transaction());
+ validationRequest.getTransaction().receipt = purchase.data;
+ validationRequest.getTransaction().signature = purchase.signature;
if (pendingGifts.containsKey(purchase.sku)) {
- validationRequest.gift = new IAPGift();
- validationRequest.gift.uuid = pendingGifts.get(purchase.sku);
+ validationRequest.setGift(new IAPGift());
+ validationRequest.getGift().uuid = pendingGifts.get(purchase.sku);
pendingGifts.remove(purchase.sku);
}
@@ -103,18 +104,21 @@ public class HabiticaPurchaseVerifier extends BasePurchaseVerifier {
});
} else if (PurchaseTypes.allSubscriptionNoRenewTypes.contains(purchase.sku)) {
PurchaseValidationRequest validationRequest = new PurchaseValidationRequest();
- validationRequest.transaction = new Transaction();
- validationRequest.transaction.receipt = purchase.data;
- validationRequest.transaction.signature = purchase.signature;
+ validationRequest.setSku(purchase.sku);
+ validationRequest.setTransaction(new Transaction());
+ validationRequest.getTransaction().receipt = purchase.data;
+ validationRequest.getTransaction().signature = purchase.signature;
if (pendingGifts.containsKey(purchase.sku)) {
- validationRequest.gift = new IAPGift();
- validationRequest.gift.uuid = pendingGifts.get(purchase.sku);
+ validationRequest.setGift(new IAPGift());
+ validationRequest.getGift().uuid = pendingGifts.get(purchase.sku);
pendingGifts.remove(purchase.sku);
}
apiClient.validateNoRenewSubscription(validationRequest).subscribe(purchaseValidationResult -> {
purchasedOrderList.add(purchase.orderId);
-
+ if (pendingGifts.containsKey(purchase.sku)) {
+ pendingGifts.remove(purchase.sku);
+ }
requestListener.onSuccess(verifiedPurchases);
}, throwable -> {
if (throwable.getClass().equals(retrofit2.adapter.rxjava2.HttpException.class)) {
@@ -133,10 +137,10 @@ public class HabiticaPurchaseVerifier extends BasePurchaseVerifier {
});
} else if (PurchaseTypes.allSubscriptionTypes.contains(purchase.sku)) {
SubscriptionValidationRequest validationRequest = new SubscriptionValidationRequest();
- validationRequest.transaction = new Transaction();
- validationRequest.transaction.receipt = purchase.data;
- validationRequest.transaction.signature = purchase.signature;
- validationRequest.sku = purchase.sku;
+ validationRequest.setSku(purchase.sku);
+ validationRequest.setTransaction(new Transaction());
+ validationRequest.getTransaction().receipt = purchase.data;
+ validationRequest.getTransaction().signature = purchase.signature;
apiClient.validateSubscription(validationRequest).subscribe(purchaseValidationResult -> {
purchasedOrderList.add(purchase.orderId);
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/api/HostConfig.java b/Habitica/src/main/java/com/habitrpg/android/habitica/api/HostConfig.java
deleted file mode 100644
index eba6632c8..000000000
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/api/HostConfig.java
+++ /dev/null
@@ -1,105 +0,0 @@
-package com.habitrpg.android.habitica.api;
-
-import android.content.Context;
-import android.content.SharedPreferences;
-import android.preference.PreferenceManager;
-
-import com.habitrpg.android.habitica.BuildConfig;
-import com.habitrpg.android.habitica.R;
-
-/**
- * The configuration of the host
- * Currently, the Port isn't used at all.
- *
- * @author MagicMicky
- */
-public class HostConfig {
- private String address;
- private String port;
- private String api;
- private String user;
-
- public HostConfig(SharedPreferences sharedPreferences, Context context) {
- SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
- this.port = BuildConfig.PORT;
- this.address = BuildConfig.DEBUG ? BuildConfig.BASE_URL : context.getString(R.string.base_url);
- this.api = prefs.getString("APIToken", null);
- this.user = prefs.getString(context.getString(R.string.SP_userID), null);
- }
-
- /**
- * Create a new HostConfig
- *
- * @param address the address of the server
- * @param port the port of the server
- * @param api the API token of the user
- * @param user the user ID
- */
- public HostConfig(String address, String port, String api, String user) {
- this.setAddress(address);
- this.setPort(port);
- this.setApi(api);
- this.setUser(user);
- }
-
- /**
- * @return the address
- */
- public String getAddress() {
- return address;
- }
-
- /**
- * @param address the address to set
- */
- public void setAddress(String address) {
- this.address = address;
- }
-
- /**
- * @return the port
- */
- public String getPort() {
- return port;
- }
-
- /**
- * @param port the port to set
- */
- public void setPort(String port) {
- this.port = port;
- }
-
- /**
- * @return the api
- */
- public String getApi() {
- return api;
- }
-
- /**
- * @param api the api to set
- */
- public void setApi(String api) {
- this.api = api;
- }
-
- /**
- * @return the user
- */
- public String getUser() {
- return user;
- }
-
- /**
- * @param user the user to set
- */
- public void setUser(String user) {
- this.user = user;
- }
-
- public boolean hasAuthentication() {
- return user != null && user.length() > 0 && api != null && api.length() > 0;
- }
-}
-
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/api/HostConfig.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/api/HostConfig.kt
new file mode 100644
index 000000000..093bfd7af
--- /dev/null
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/api/HostConfig.kt
@@ -0,0 +1,46 @@
+package com.habitrpg.android.habitica.api
+
+import android.content.Context
+import android.content.SharedPreferences
+import android.preference.PreferenceManager
+
+import com.habitrpg.android.habitica.BuildConfig
+import com.habitrpg.android.habitica.R
+
+/**
+ * The configuration of the host
+ * Currently, the Port isn't used at all.
+ *
+ * @author MagicMicky
+ */
+class HostConfig {
+ var address: String
+ var port: String
+ var api: String? = null
+ var user: String? = null
+
+ constructor(sharedPreferences: SharedPreferences, context: Context) {
+ val prefs = PreferenceManager.getDefaultSharedPreferences(context)
+ this.port = BuildConfig.PORT
+ if (BuildConfig.DEBUG) {
+ this.address = BuildConfig.BASE_URL
+ } else {
+ this.address = sharedPreferences.getString("server_url", null) ?: context.getString(R.string.base_url)
+ }
+ this.api = prefs.getString("APIToken", null)
+ this.user = prefs.getString(context.getString(R.string.SP_userID), "")
+ }
+
+ constructor(address: String, port: String, api: String, user: String) {
+ this.address = address
+ this.port = port
+ this.api = api
+ this.user = user
+ }
+
+ fun hasAuthentication(): Boolean {
+ return user?.isNotEmpty() == true && api?.length ?: 0 > 0
+ }
+
+}
+
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/ApiClient.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/ApiClient.kt
index 135d630c3..f8d19fd1b 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/ApiClient.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/ApiClient.kt
@@ -247,4 +247,5 @@ interface ApiClient {
fun retrieveMarketGear(): Flowable
fun verifyUsername(username: String): Flowable
+ fun updateServerUrl(newAddress: String?)
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.kt
index e9bf300f4..1d14dfbd4 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.kt
@@ -62,10 +62,10 @@ class ApiClientImpl//private OnHabitsAPIResult mResultListener;
//private HostConfig mConfig;
(private val gsonConverter: GsonConverterFactory, override val hostConfig: HostConfig, private val crashlyticsProxy: CrashlyticsProxy, private val popupNotificationsManager: PopupNotificationsManager, private val context: Context) : Consumer, ApiClient {
- private val retrofitAdapter: Retrofit
+ private lateinit var retrofitAdapter: Retrofit
// I think we don't need the ApiClientImpl anymore we could just use ApiService
- private val apiService: ApiService
+ private lateinit var apiService: ApiService
private val apiCallTransformer = FlowableTransformer, Any> { observable ->
observable
@@ -91,7 +91,10 @@ class ApiClientImpl//private OnHabitsAPIResult mResultListener;
crashlyticsProxy.setUserIdentifier(this.hostConfig.user)
crashlyticsProxy.setUserName(this.hostConfig.user)
Amplitude.getInstance().userId = this.hostConfig.user
+ buildRetrofit()
+ }
+ fun buildRetrofit() {
val logging = HttpLoggingInterceptor()
if (BuildConfig.DEBUG) {
logging.level = HttpLoggingInterceptor.Level.BODY
@@ -99,6 +102,10 @@ class ApiClientImpl//private OnHabitsAPIResult mResultListener;
val userAgent = System.getProperty("http.agent")
+ val calendar = GregorianCalendar()
+ val timeZone = calendar.timeZone
+ val timezoneOffset = -TimeUnit.MINUTES.convert(timeZone.getOffset(calendar.timeInMillis).toLong(), TimeUnit.MILLISECONDS)
+
val client = OkHttpClient.Builder()
.addInterceptor(logging)
.addNetworkInterceptor { chain ->
@@ -110,6 +117,7 @@ class ApiClientImpl//private OnHabitsAPIResult mResultListener;
.header("x-api-user", this.hostConfig.user)
}
builder = builder.header("x-client", "habitica-android")
+ .header("x-user-timzoneOffset", timezoneOffset.toString())
if (userAgent != null) {
builder = builder.header("user-agent", userAgent)
}
@@ -137,6 +145,13 @@ class ApiClientImpl//private OnHabitsAPIResult mResultListener;
this.apiService = retrofitAdapter.create(ApiService::class.java)
}
+ override fun updateServerUrl(newAddress: String?) {
+ if (newAddress != null) {
+ hostConfig.address = newAddress
+ buildRetrofit()
+ }
+ }
+
override fun registerUser(username: String, email: String, password: String, confirmPassword: String): Flowable {
val auth = UserAuth()
auth.username = username
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.kt
index 65cc05114..600b60cec 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.kt
@@ -60,16 +60,6 @@ class UserRepositoryImpl(localRepository: UserLocalRepository, apiClient: ApiCli
}
}
}
- .flatMap { user ->
- val calendar = GregorianCalendar()
- val timeZone = calendar.timeZone
- val offset = -TimeUnit.MINUTES.convert(timeZone.getOffset(calendar.timeInMillis).toLong(), TimeUnit.MILLISECONDS)
- if (offset.toInt() != user.preferences?.timezoneOffset ?: 0) {
- return@flatMap updateUser(user, "preferences.timezoneOffset", offset.toString())
- } else {
- return@flatMap Flowable.just(user)
- }
- }
} else {
return getUser().take(1)
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/PurchaseValidationRequest.java b/Habitica/src/main/java/com/habitrpg/android/habitica/models/PurchaseValidationRequest.java
deleted file mode 100644
index 235e76a2d..000000000
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/PurchaseValidationRequest.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.habitrpg.android.habitica.models;
-
-/**
- * Created by Negue on 26.11.2015.
- */
-public class PurchaseValidationRequest {
- public Transaction transaction;
- public IAPGift gift;
-}
-
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/PurchaseValidationRequest.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/PurchaseValidationRequest.kt
new file mode 100644
index 000000000..9772d28eb
--- /dev/null
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/PurchaseValidationRequest.kt
@@ -0,0 +1,8 @@
+package com.habitrpg.android.habitica.models
+
+class PurchaseValidationRequest {
+ var sku: String? = null
+ var transaction: Transaction? = null
+ var gift: IAPGift? = null
+}
+
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/SubscriptionValidationRequest.java b/Habitica/src/main/java/com/habitrpg/android/habitica/models/SubscriptionValidationRequest.java
deleted file mode 100644
index aebaf9630..000000000
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/SubscriptionValidationRequest.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package com.habitrpg.android.habitica.models;
-
-
-public class SubscriptionValidationRequest {
-
- public Transaction transaction;
- public String sku;
-
-}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/SubscriptionValidationRequest.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/SubscriptionValidationRequest.kt
new file mode 100644
index 000000000..010928519
--- /dev/null
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/SubscriptionValidationRequest.kt
@@ -0,0 +1,7 @@
+package com.habitrpg.android.habitica.models
+
+
+class SubscriptionValidationRequest {
+ var transaction: Transaction? = null
+ var sku: String? = null
+}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GemPurchaseActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GemPurchaseActivity.kt
index e4b3c7e3c..2a939080f 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GemPurchaseActivity.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GemPurchaseActivity.kt
@@ -3,6 +3,7 @@ package com.habitrpg.android.habitica.ui.activities
import android.content.Intent
import android.os.Bundle
+import android.util.Log
import android.view.MenuItem
import androidx.appcompat.widget.Toolbar
import androidx.fragment.app.FragmentPagerAdapter
@@ -91,14 +92,18 @@ class GemPurchaseActivity : BaseActivity(), InAppMessageListener {
}
override fun onError(i: Int, e: Exception) {
- crashlyticsProxy.fabricLogE("Purchase", "Consume", e)
+ crashlyticsProxy.fabricLogE("PurchaseConsumeException", "Consume", e)
}
})
}
}
override fun onError(i: Int, e: Exception) {
- crashlyticsProxy.fabricLogE("Purchase", "Error", e)
+ crashlyticsProxy.fabricLogE("PurchaseFlowException", "Error", e)
+ val billingError = e as? BillingException
+ if (billingError != null) {
+ Log.e("BILLING ERROR", billingError.toString())
+ }
}
})
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GiftIAPActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GiftIAPActivity.kt
index 67ca35ce2..b2b99b516 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GiftIAPActivity.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/GiftIAPActivity.kt
@@ -82,11 +82,6 @@ class GiftIAPActivity: BaseActivity() {
giftedUsername = intent.getStringExtra("username")
- this.subscription1MonthView?.setOnPurchaseClickListener(View.OnClickListener { selectSubscription(PurchaseTypes.Subscription1Month) })
- this.subscription3MonthView?.setOnPurchaseClickListener(View.OnClickListener { selectSubscription(PurchaseTypes.Subscription3Month) })
- this.subscription6MonthView?.setOnPurchaseClickListener(View.OnClickListener { selectSubscription(PurchaseTypes.Subscription6Month) })
- this.subscription12MonthView?.setOnPurchaseClickListener(View.OnClickListener { selectSubscription(PurchaseTypes.Subscription12Month) })
-
subscriptionButton?.setOnClickListener {
selectedSubscriptionSku?.notNull { sku -> purchaseSubscription(sku) }
}
@@ -101,6 +96,7 @@ class GiftIAPActivity: BaseActivity() {
giftedUserID = it.id
}, RxErrorHandler.handleEmptyError()))
+ setupCheckout()
activityCheckout?.destroyPurchaseFlow()
@@ -112,14 +108,14 @@ class GiftIAPActivity: BaseActivity() {
}
override fun onError(i: Int, e: Exception) {
- crashlyticsProxy.fabricLogE("Purchase", "Consume", e)
+ crashlyticsProxy.fabricLogE("PurchaseConsumeException", "Consume", e)
}
})
}
}
override fun onError(i: Int, e: Exception) {
- crashlyticsProxy.fabricLogE("Purchase", "Error", e)
+ crashlyticsProxy.fabricLogE("PurchaseFlowException", "Error", e)
}
})
@@ -132,11 +128,16 @@ class GiftIAPActivity: BaseActivity() {
override fun onReady(billingRequests: BillingRequests, s: String, b: Boolean) {}
})
- setupCheckout()
}
override fun onCreateView(name: String?, context: Context?, attrs: AttributeSet?): View? {
val view = super.onCreateView(name, context, attrs)
+
+ this.subscription1MonthView?.setOnPurchaseClickListener(View.OnClickListener { selectSubscription(PurchaseTypes.Subscription1Month) })
+ this.subscription3MonthView?.setOnPurchaseClickListener(View.OnClickListener { selectSubscription(PurchaseTypes.Subscription3Month) })
+ this.subscription6MonthView?.setOnPurchaseClickListener(View.OnClickListener { selectSubscription(PurchaseTypes.Subscription6Month) })
+ this.subscription12MonthView?.setOnPurchaseClickListener(View.OnClickListener { selectSubscription(PurchaseTypes.Subscription12Month) })
+
return view
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt
index b407b0cdc..04eb641c0 100755
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt
@@ -212,7 +212,7 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction {
avatarWithBars.setPadding(px.toInt(), statusBarHeight, px.toInt(), 0)
}
- compositeSubscription.add(userRepository.getUser(hostConfig.user)
+ compositeSubscription.add(userRepository.getUser(hostConfig.user ?: "")
.subscribe(Consumer { newUser ->
this@MainActivity.user = newUser
this@MainActivity.setUserData()
@@ -397,7 +397,7 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction {
drawerFragment?.setSettingsCount(if (this.user?.flags?.isVerifiedUsername != true) 1 else 0 )
if (remoteConfigManager.enableUsernameRelease()) {
- if (user?.flags?.isVerifiedUsername != true && isActivityVisible) {
+ if (user?.flags?.isVerifiedUsername == false && isActivityVisible) {
val intent = Intent(this, VerifyUsernameActivity::class.java)
startActivity(intent)
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SetupActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SetupActivity.kt
index 478fab56e..5cb00e30e 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SetupActivity.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SetupActivity.kt
@@ -75,7 +75,7 @@ class SetupActivity : BaseActivity(), ViewPager.OnPageChangeListener {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- compositeSubscription.add(userRepository.getUser(hostConfig.user)
+ compositeSubscription.add(userRepository.getUser(hostConfig.user ?: "")
.subscribe(Consumer { this.onUserReceived(it) }, RxErrorHandler.handleEmptyError()))
val additionalData = HashMap()
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.kt
index 16d389f01..9eade7f6a 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.kt
@@ -322,14 +322,14 @@ class TaskFormActivity : BaseActivity() {
if (task != null) {
populate(task)
- setTitle(task)
+ setTaskTitle(task)
if (taskType == Task.TYPE_TODO || taskType == Task.TYPE_DAILY) {
populateChecklistRecyclerView()
populateRemindersRecyclerView()
}
}
- setTitle(task)
+ setTaskTitle(task)
}, RxErrorHandler.handleEmptyError()))
btnDelete.isEnabled = true
@@ -338,14 +338,14 @@ class TaskFormActivity : BaseActivity() {
if (thisTask != null) {
populate(thisTask)
- setTitle(thisTask)
+ setTaskTitle(thisTask)
if (taskType == Task.TYPE_TODO || taskType == Task.TYPE_DAILY) {
populateChecklistRecyclerView()
populateRemindersRecyclerView()
}
}
} else {
- //setTitle(null as? Task)
+ setTaskTitle(null)
taskText.requestFocus()
}
@@ -688,7 +688,7 @@ class TaskFormActivity : BaseActivity() {
}
}
- private fun setTitle(task: Task?) {
+ private fun setTaskTitle(task: Task?) {
val actionBar = supportActionBar
if (actionBar != null) {
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/NavigationDrawerFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/NavigationDrawerFragment.kt
index a86bdec6f..c8c229a23 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/NavigationDrawerFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/NavigationDrawerFragment.kt
@@ -201,8 +201,8 @@ class NavigationDrawerFragment : DialogFragment() {
questMenuView.configure(it)
}, RxErrorHandler.handleEmptyError()))
- messagesButton.setOnClickListener { setSelection(R.id.inboxFragment) }
- settingsButton.setOnClickListener { setSelection(R.id.prefsActivity) }
+ messagesButtonWrapper.setOnClickListener { setSelection(R.id.inboxFragment) }
+ settingsButtonWrapper.setOnClickListener { setSelection(R.id.prefsActivity) }
}
override fun onDestroy() {
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/NewsFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/NewsFragment.kt
index 012a3f59e..95c08bb5b 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/NewsFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/NewsFragment.kt
@@ -18,8 +18,9 @@ class NewsFragment : BaseMainFragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
super.onCreateView(inflater, container, savedInstanceState)
+ val view = container?.inflate(R.layout.fragment_news)
hideToolbar()
- return container?.inflate(R.layout.fragment_news)
+ return view
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/ShopsFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/ShopsFragment.kt
index b15a23fb3..4baf3f730 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/ShopsFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/ShopsFragment.kt
@@ -27,9 +27,9 @@ class ShopsFragment : BaseMainFragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
this.usesTabLayout = true
+ super.onCreateView(inflater, container, savedInstanceState)
hideToolbar()
disableToolbarScrolling()
- super.onCreateView(inflater, container, savedInstanceState)
return inflater.inflate(R.layout.fragment_viewpager, container, false)
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.kt
index afebf3911..8e9b672b0 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.kt
@@ -8,10 +8,12 @@ import android.content.res.Configuration
import android.os.Build
import android.os.Bundle
import androidx.appcompat.app.AlertDialog
+import androidx.preference.ListPreference
import androidx.preference.Preference
import androidx.preference.PreferenceScreen
import com.habitrpg.android.habitica.HabiticaBaseApplication
import com.habitrpg.android.habitica.R
+import com.habitrpg.android.habitica.data.ApiClient
import com.habitrpg.android.habitica.data.InventoryRepository
import com.habitrpg.android.habitica.extensions.notNull
import com.habitrpg.android.habitica.helpers.*
@@ -36,10 +38,13 @@ class PreferencesFragment : BasePreferencesFragment(), SharedPreferences.OnShare
lateinit var pushNotificationManager: PushNotificationManager
@Inject
lateinit var configManager: RemoteConfigManager
+ @Inject
+ lateinit var apiClient: ApiClient
private var timePreference: TimePreference? = null
private var pushNotificationsPreference: PreferenceScreen? = null
private var classSelectionPreference: Preference? = null
+ private var serverUrlPreference: ListPreference? = null
override fun onCreate(savedInstanceState: Bundle?) {
HabiticaBaseApplication.component?.inject(this)
@@ -64,6 +69,10 @@ class PreferencesFragment : BasePreferencesFragment(), SharedPreferences.OnShare
classSelectionPreference = findPreference("choose_class")
classSelectionPreference?.isVisible = false
+
+ serverUrlPreference = findPreference("server_url") as? ListPreference
+ serverUrlPreference?.isVisible = false
+ serverUrlPreference?.summary = preferenceManager.sharedPreferences.getString("server_url", "")
}
override fun onResume() {
@@ -206,6 +215,10 @@ class PreferencesFragment : BasePreferencesFragment(), SharedPreferences.OnShare
}
"dailyDueDefaultView" -> userRepository.updateUser(user, "preferences.dailyDueDefaultView", sharedPreferences.getBoolean(key, false))
.subscribe(Consumer { }, RxErrorHandler.handleEmptyError())
+ "server_url" -> {
+ apiClient.updateServerUrl(sharedPreferences.getString(key, ""))
+ findPreference(key).summary = sharedPreferences.getString(key, "")
+ }
}
}
@@ -255,5 +268,9 @@ class PreferencesFragment : BasePreferencesFragment(), SharedPreferences.OnShare
preference.layoutResource = R.layout.preference_child_summary_error
preference.summary = context?.getString(R.string.username_not_confirmed)
}
+
+ if (user?.contributor?.admin == true) {
+ serverUrlPreference?.isVisible = true
+ }
}
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/GuildFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/GuildFragment.kt
index 724448f1d..1c9894e6f 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/GuildFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/GuildFragment.kt
@@ -45,9 +45,9 @@ class GuildFragment : BaseMainFragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
this.usesTabLayout = true
+ super.onCreateView(inflater, container, savedInstanceState)
hideToolbar()
disableToolbarScrolling()
- super.onCreateView(inflater, container, savedInstanceState)
return inflater.inflate(R.layout.fragment_viewpager, container, false)
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxFragment.kt
index 505cd62d6..17bf9b457 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxFragment.kt
@@ -39,9 +39,9 @@ class InboxFragment : BaseMainFragment(), androidx.swiperefreshlayout.widget.Swi
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
+ super.onCreateView(inflater, container, savedInstanceState)
hideToolbar()
disableToolbarScrolling()
- super.onCreateView(inflater, container, savedInstanceState)
compositeSubscription.add(this.socialRepository.markPrivateMessagesRead(user).subscribe(Consumer { }, RxErrorHandler.handleEmptyError()))
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxMessageListFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxMessageListFragment.kt
index a5be88b24..96b3f677b 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxMessageListFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxMessageListFragment.kt
@@ -44,9 +44,9 @@ class InboxMessageListFragment : BaseMainFragment(), androidx.swiperefreshlayout
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
+ super.onCreateView(inflater, container, savedInstanceState)
hideToolbar()
disableToolbarScrolling()
- super.onCreateView(inflater, container, savedInstanceState)
return inflater.inflate(R.layout.fragment_inbox_message_list, container, false)
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/TavernFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/TavernFragment.kt
index 6b2fc4dcc..130fec3a0 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/TavernFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/TavernFragment.kt
@@ -27,9 +27,9 @@ class TavernFragment : BaseMainFragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
this.usesTabLayout = true
+ super.onCreateView(inflater, container, savedInstanceState)
hideToolbar()
disableToolbarScrolling()
- super.onCreateView(inflater, container, savedInstanceState)
val v = inflater.inflate(R.layout.fragment_viewpager, container, false)
this.tutorialStepIdentifier = "tavern"
this.tutorialText = getString(R.string.tutorial_tavern)
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyFragment.kt
index dcf2a193b..9a205c306 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyFragment.kt
@@ -43,9 +43,9 @@ class PartyFragment : BaseMainFragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
this.usesTabLayout = true
+ super.onCreateView(inflater, container, savedInstanceState)
hideToolbar()
disableToolbarScrolling()
- super.onCreateView(inflater, container, savedInstanceState)
return inflater.inflate(R.layout.fragment_viewpager, container, false)
}