Skip to content

Commit f6ae6ac

Browse files
committed
UI/UX small changes.
Bug fixes and performance improvement. Added alpha v1.2 screenshots.
1 parent 5d74fcb commit f6ae6ac

19 files changed

Lines changed: 476 additions & 241 deletions

File tree

app/build.gradle

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ android {
3838
}
3939
debug {
4040
versionNameSuffix '-debug'
41-
minifyEnabled false
42-
shrinkResources false
41+
minifyEnabled true
42+
shrinkResources true
4343
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
4444
}
4545
android.applicationVariants.all { variant ->
@@ -107,6 +107,8 @@ dependencies {
107107

108108
implementation "androidx.security:security-crypto:1.0.0-rc02"
109109

110+
implementation 'com.github.pwittchen:reactivenetwork-rx2:3.0.8'
111+
110112
testImplementation 'junit:junit:4.13'
111113
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
112114
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'

app/proguard-rules.pro

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,4 +78,9 @@
7878
-dontwarn org.codehaus.mojo.animal_sniffer.*
7979

8080
# OkHttp platform used only on JVM and when Conscrypt dependency is available.
81-
-dontwarn okhttp3.internal.platform.ConscryptPlatform
81+
-dontwarn okhttp3.internal.platform.ConscryptPlatform
82+
83+
-dontwarn com.github.pwittchen.reactivenetwork.library.rx2.ReactiveNetwork
84+
-dontwarn io.reactivex.functions.Function
85+
-dontwarn rx.internal.util.**
86+
-dontwarn sun.misc.Unsafe

app/src/main/java/crypto/delta/exchange/openexchange/MainActivity.kt

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,25 @@
11
package crypto.delta.exchange.openexchange
22

33
import android.os.Bundle
4+
import android.util.Log
5+
import androidx.appcompat.app.AlertDialog
46
import androidx.appcompat.app.AppCompatActivity
7+
import com.github.pwittchen.reactivenetwork.library.rx2.ReactiveNetwork
58
import com.google.android.material.bottomnavigation.BottomNavigationView
69
import crypto.delta.exchange.openexchange.utils.setupWithNavController
10+
import io.reactivex.android.schedulers.AndroidSchedulers
11+
import io.reactivex.disposables.Disposable
12+
import io.reactivex.schedulers.Schedulers
13+
import kotlinx.coroutines.CoroutineScope
14+
import kotlinx.coroutines.Dispatchers
15+
import kotlinx.coroutines.launch
16+
import kotlinx.coroutines.withContext
17+
718

819
class MainActivity : AppCompatActivity() {
20+
private var connectivityDisposable: Disposable? = null
21+
private var internetDisposable: Disposable? = null
22+
private var alertDialog: AlertDialog? = null
923

1024
override fun onCreate(savedInstanceState: Bundle?) {
1125
super.onCreate(savedInstanceState)
@@ -40,4 +54,61 @@ class MainActivity : AppCompatActivity() {
4054
intent = intent
4155
)
4256
}
57+
58+
override fun onResume() {
59+
super.onResume()
60+
61+
connectivityDisposable = ReactiveNetwork.observeNetworkConnectivity(applicationContext)
62+
.subscribeOn(Schedulers.io())
63+
.observeOn(AndroidSchedulers.mainThread())
64+
.subscribe { connectivity ->
65+
Log.d(TAG, connectivity.toString())
66+
val state = connectivity.state()
67+
val name = connectivity.typeName()
68+
Log.i(TAG, String.format("state: %s, typeName: %s", state, name))
69+
}
70+
71+
internetDisposable = ReactiveNetwork.observeInternetConnectivity()
72+
.subscribeOn(Schedulers.io())
73+
.observeOn(AndroidSchedulers.mainThread())
74+
.subscribe { isConnectedToInternet ->
75+
CoroutineScope(Dispatchers.Main).launch {
76+
withContext(Dispatchers.Main) {
77+
if (isConnectedToInternet) {
78+
if (null != alertDialog) {
79+
if (alertDialog!!.isShowing) {
80+
alertDialog!!.dismiss()
81+
}
82+
}
83+
} else {
84+
alertDialog =
85+
AlertDialog.Builder(this@MainActivity, R.style.AlertDialogStyle)
86+
.setTitle("No Internet!!")
87+
.setMessage("Check your internet connectivity!")
88+
.setIcon(android.R.drawable.ic_dialog_alert)
89+
.setCancelable(false)
90+
.show()
91+
}
92+
}
93+
}
94+
95+
Log.i(TAG, isConnectedToInternet.toString())
96+
}
97+
}
98+
99+
override fun onPause() {
100+
super.onPause()
101+
safelyDispose(connectivityDisposable)
102+
safelyDispose(internetDisposable)
103+
}
104+
105+
private fun safelyDispose(disposable: Disposable?) {
106+
if (disposable != null && !disposable.isDisposed) {
107+
disposable.dispose()
108+
}
109+
}
110+
111+
companion object {
112+
private const val TAG = "ReactiveNetwork"
113+
}
43114
}

app/src/main/java/crypto/delta/exchange/openexchange/api/DeltaExchangeApiEndPoints.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ import crypto.delta.exchange.openexchange.pojo.OrderBookResponse
66
import crypto.delta.exchange.openexchange.pojo.order.ChangeOrderLeverageBody
77
import crypto.delta.exchange.openexchange.pojo.order.CreateOrderRequest
88
import crypto.delta.exchange.openexchange.pojo.order.CreateOrderResponse
9-
import crypto.delta.exchange.openexchange.pojo.order.OrderLeverageResponse
109
import crypto.delta.exchange.openexchange.pojo.position.OpenPositionResponse
1110
import crypto.delta.exchange.openexchange.pojo.products.ProductsResponse
1211
import io.reactivex.Observable
12+
import okhttp3.ResponseBody
1313
import retrofit2.Call
1414
import retrofit2.http.*
1515

@@ -42,23 +42,23 @@ interface DeltaExchangeApiEndPoints {
4242
@Header("timestamp") timestamp: String,
4343
@Header("signature") signature: String,
4444
@Body createOrderRequest: CreateOrderRequest
45-
): Observable<CreateOrderResponse>
45+
): Call<ResponseBody>
4646

4747
@GET("/orders/leverage")
4848
fun getOrderLeverage(
4949
@Header("api-key") apiKey: String,
5050
@Header("timestamp") timestamp: String,
5151
@Header("signature") signature: String,
5252
@Query("product_id") productId: String?
53-
): Observable<OrderLeverageResponse>
53+
): Call<ResponseBody>
5454

5555
@POST("/orders/leverage")
5656
fun setOrderLeverage(
5757
@Header("api-key") apiKey: String,
5858
@Header("timestamp") timestamp: String,
5959
@Header("signature") signature: String,
6060
@Body changeOrderLeverageBody: ChangeOrderLeverageBody
61-
): Observable<OrderLeverageResponse>
61+
): Call<ResponseBody>
6262

6363
@GET("/orders")
6464
fun getOrders(
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package crypto.delta.exchange.openexchange.pojo;
2+
3+
import com.google.gson.annotations.Expose;
4+
import com.google.gson.annotations.SerializedName;
5+
6+
public class ErrorResponse {
7+
8+
@SerializedName("error")
9+
@Expose
10+
private String error;
11+
@SerializedName("message")
12+
@Expose
13+
private String message;
14+
15+
public String getError() {
16+
return error;
17+
}
18+
19+
public void setError(String error) {
20+
this.error = error;
21+
}
22+
23+
public String getMessage() {
24+
return message;
25+
}
26+
27+
public void setMessage(String message) {
28+
this.message = message;
29+
}
30+
31+
}

app/src/main/java/crypto/delta/exchange/openexchange/ui/order/OpenOrdersFragment.kt

Lines changed: 27 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -47,29 +47,38 @@ class OpenOrdersFragment : BaseFragment(), SwipeRefreshLayout.OnRefreshListener
4747

4848
private fun loadOrders() {
4949
chartProgressSpinner!!.visibility = View.VISIBLE
50-
val timeStamp = KotlinUtils.generateTimeStamp()
51-
val method = "GET"
52-
val path = "/orders"
53-
val queryString = "?state=open"
54-
val payload = ""
55-
val signatureData = method + timeStamp + path + queryString + payload
50+
if (KotlinUtils.apiDetailsPresent(requireContext())) {
51+
val timeStamp = KotlinUtils.generateTimeStamp()
52+
val method = "GET"
53+
val path = "/orders"
54+
val queryString = "?state=open"
55+
val payload = ""
56+
val signatureData = method + timeStamp + path + queryString + payload
5657

57-
val signature = KotlinUtils.generateSignature(
58-
signatureData,
59-
appPreferenceManager!!.apiSecret!!
60-
)
58+
val signature = KotlinUtils.generateSignature(
59+
signatureData,
60+
appPreferenceManager!!.apiSecret!!
61+
)
6162

62-
openOrdersViewModel.getOrders(appPreferenceManager!!.apiKey!!,
63-
timeStamp,
64-
signature!!,
65-
appPreferenceManager!!.currentProductId!!, "open")!!.observe(viewLifecycleOwner, Observer {
66-
if (it != null) {
67-
openOrdersRecyclerView.adapter = OpenOrdersAdapter(it)
68-
}
63+
openOrdersViewModel.getOrders(
64+
appPreferenceManager!!.apiKey!!,
65+
timeStamp,
66+
signature!!,
67+
appPreferenceManager!!.currentProductId!!, "open"
68+
)!!.observe(viewLifecycleOwner, Observer {
69+
if (it != null) {
70+
openOrdersRecyclerView.adapter = OpenOrdersAdapter(it)
71+
}
72+
chartProgressSpinner!!.visibility = View.GONE
73+
if (swipeLayout.isRefreshing) {
74+
swipeLayout.isRefreshing = false
75+
}
76+
})
77+
} else {
6978
chartProgressSpinner!!.visibility = View.GONE
7079
if (swipeLayout.isRefreshing) {
7180
swipeLayout.isRefreshing = false
7281
}
73-
})
82+
}
7483
}
7584
}

0 commit comments

Comments
 (0)