Skip to content

Commit 63ceda8

Browse files
committed
integrate login
1 parent df1eb50 commit 63ceda8

25 files changed

+512
-485
lines changed

app/build.gradle

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ plugins {
66
id 'kotlin-android'
77
id 'com.google.dagger.hilt.android'
88
id "com.google.protobuf" version "0.8.17"
9+
id "kotlinx-serialization"
910
}
1011

1112
def iperfkeyPropertiesFile = rootProject.file("iperfkey.properties")
@@ -58,7 +59,7 @@ android {
5859
}
5960

6061
composeOptions {
61-
kotlinCompilerExtensionVersion "1.3.2"
62+
kotlinCompilerExtensionVersion "1.4.4"
6263
}
6364

6465
externalNativeBuild {
@@ -77,6 +78,8 @@ dependencies {
7778
implementation 'androidx.navigation:navigation-ui-ktx:2.5.3'
7879
implementation 'androidx.core:core-ktx:1.3.2'
7980
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
81+
implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.0"
82+
8083
def appCenterSdkVersion = '4.1.0'
8184
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5'
8285
// implementation "androidx.work:work-runtime:2.5.0"
@@ -91,7 +94,6 @@ dependencies {
9194
implementation 'com.google.android.gms:play-services-location:21.0.1'
9295
implementation 'com.google.android.gms:play-services-maps:18.1.0'
9396

94-
9597
implementation "androidx.room:room-runtime:$room_version"
9698
kapt "androidx.room:room-compiler:$room_version"
9799
implementation "androidx.room:room-ktx:$room_version"
@@ -124,20 +126,18 @@ dependencies {
124126

125127

126128
// third-party lib
129+
// implementation "com.squareup.moshi:moshi:1.14.0"
130+
// kapt "com.squareup.moshi:moshi-kotlin-codegen:1.14.0"
127131
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
128-
implementation 'com.squareup.retrofit2:converter-jackson:2.9.0'
132+
// implementation 'com.squareup.retrofit2:converter-moshi:2.9.0'
133+
implementation 'com.squareup.retrofit2:converter-scalars:2.9.0'
129134

130-
implementation "com.squareup.okhttp3:okhttp:4.9.0"
131-
implementation 'com.jsoniter:jsoniter:0.9.23'
135+
// TODO: remove okhttp in the future
136+
implementation "com.squareup.okhttp3:okhttp:4.10.0"
132137
implementation 'com.github.kongzue.DialogX:DialogX:0.0.43.beta13'
133138

134-
// https://github.com/getActivity/XXPermissions
135139
implementation 'com.github.getActivity:XXPermissions:16.6'
136-
// implementation 'com.yanzhenjie:permission:2.0.2'
137-
implementation("io.github.g00fy2.quickie:quickie-bundled:1.6.0")
138-
implementation 'com.fasterxml.jackson.core:jackson-core:2.10.1'
139-
implementation 'com.fasterxml.jackson.core:jackson-annotations:2.10.1'
140-
implementation 'com.fasterxml.jackson.core:jackson-databind:2.10.1'
140+
implementation "io.github.g00fy2.quickie:quickie-bundled:1.6.0"
141141
implementation 'org.bouncycastle:bcpkix-jdk15to18:1.70'
142142
implementation 'org.bouncycastle:bcprov-jdk15to18:1.70'
143143
implementation 'org.apache.commons:commons-csv:1.9.0'

app/src/main/java/com/lcl/lclmeasurementtool/HomeFragment.java

Lines changed: 50 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -25,45 +25,34 @@
2525
import androidx.work.Data;
2626
import androidx.work.WorkInfo;
2727
import androidx.work.WorkManager;
28-
29-
import com.fasterxml.jackson.core.JsonProcessingException;
3028
import com.google.android.gms.maps.model.LatLng;
3129
import com.google.android.material.floatingactionbutton.FloatingActionButton;
32-
import com.jsoniter.output.JsonStream;
3330
import com.kongzue.dialogx.dialogs.MessageDialog;
3431
import com.kongzue.dialogx.dialogs.PopTip;
35-
import com.kongzue.dialogx.dialogs.TipDialog;
3632
import com.kongzue.dialogx.dialogs.WaitDialog;
37-
import com.lcl.lclmeasurementtool.constants.NetworkConstants;
38-
import com.lcl.lclmeasurementtool.database.Entity.AbstractViewModel;
39-
import com.lcl.lclmeasurementtool.database.Entity.Connectivity;
40-
import com.lcl.lclmeasurementtool.database.Entity.ConnectivityViewModel;
41-
import com.lcl.lclmeasurementtool.database.Entity.SignalStrength;
42-
import com.lcl.lclmeasurementtool.database.Entity.SignalViewModel;
4333
import com.lcl.lclmeasurementtool.Functionality.NetworkTestViewModel;
4434
import com.lcl.lclmeasurementtool.Managers.CellularManager;
4535
import com.lcl.lclmeasurementtool.Managers.LocationServiceListener;
4636
import com.lcl.lclmeasurementtool.Managers.LocationServiceManager;
4737
import com.lcl.lclmeasurementtool.Managers.NetworkChangeListener;
4838
import com.lcl.lclmeasurementtool.Managers.NetworkManager;
49-
import com.lcl.lclmeasurementtool.Managers.UploadManager;
50-
import com.lcl.lclmeasurementtool.Models.ConnectivityMessageModel;
51-
import com.lcl.lclmeasurementtool.Models.MeasurementDataModel;
52-
import com.lcl.lclmeasurementtool.Models.MeasurementDataReportModel;
53-
import com.lcl.lclmeasurementtool.Models.SignalStrengthMessageModel;
5439
import com.lcl.lclmeasurementtool.Utils.AnalyticsUtils;
55-
import com.lcl.lclmeasurementtool.errors.DecoderException;
5640
import com.lcl.lclmeasurementtool.Utils.ECDSA;
5741
import com.lcl.lclmeasurementtool.Utils.Hex;
5842
import com.lcl.lclmeasurementtool.Utils.LocationUtils;
59-
import com.lcl.lclmeasurementtool.Utils.SerializationUtils;
6043
import com.lcl.lclmeasurementtool.Utils.SignalStrengthLevel;
6144
import com.lcl.lclmeasurementtool.Utils.TimeUtils;
6245
import com.lcl.lclmeasurementtool.Utils.UnitUtils;
46+
import com.lcl.lclmeasurementtool.constants.NetworkConstants;
47+
import com.lcl.lclmeasurementtool.database.Entity.AbstractViewModel;
48+
import com.lcl.lclmeasurementtool.database.Entity.Connectivity;
49+
import com.lcl.lclmeasurementtool.database.Entity.ConnectivityViewModel;
50+
import com.lcl.lclmeasurementtool.database.Entity.SignalStrength;
51+
import com.lcl.lclmeasurementtool.database.Entity.SignalViewModel;
6352
import com.lcl.lclmeasurementtool.databinding.HomeFragmentBinding;
53+
import com.lcl.lclmeasurementtool.errors.DecoderException;
6454
import com.microsoft.appcenter.analytics.Analytics;
6555

66-
import java.io.IOException;
6756
import java.security.InvalidKeyException;
6857
import java.security.NoSuchAlgorithmException;
6958
import java.security.NoSuchProviderException;
@@ -168,17 +157,17 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat
168157
return;
169158
}
170159
LatLng latLng = LocationUtils.toLatLng(location);
171-
SignalStrengthMessageModel signalStrengthMessageModel =
172-
new SignalStrengthMessageModel(
173-
latLng.latitude,
174-
latLng.longitude,
175-
ts,
176-
dBm,
177-
level.getLevelCode(),
178-
cell_id,
179-
device_id);
180-
signalViewModel.insert(new SignalStrength(ts, dBm, level.getLevelCode(), latLng));
181-
uploadData(signalStrengthMessageModel, sk_t, h_pkr, NetworkConstants.SIGNAL_ENDPOINT);
160+
// SignalStrengthMessageModel signalStrengthMessageModel =
161+
// new SignalStrengthMessageModel(
162+
// latLng.latitude,
163+
// latLng.longitude,
164+
// ts,
165+
// dBm,
166+
// level.getLevelCode(),
167+
// cell_id,
168+
// device_id);
169+
// signalViewModel.insert(new SignalStrength(ts, dBm, level.getLevelCode(), latLng));
170+
// uploadData(signalStrengthMessageModel, sk_t, h_pkr, NetworkConstants.SIGNAL_ENDPOINT);
182171
});
183172
}
184173
});
@@ -465,16 +454,16 @@ private void parseWorkInfo(List<WorkInfo> workInfoList) {
465454
return;
466455
}
467456
LatLng latLng = LocationUtils.toLatLng(location);
468-
ConnectivityMessageModel connectivityMessageModel =
469-
new ConnectivityMessageModel(
470-
latLng.latitude,
471-
latLng.longitude,
472-
ts,
473-
prevUpload,
474-
prevDownload,
475-
prevPing, cell_id, device_id);
476-
connectivityViewModel.insert(new Connectivity(ts, prevPing, prevUpload, prevDownload, latLng));
477-
uploadData(connectivityMessageModel, sk_t, h_pkr, NetworkConstants.CONNECTIVITY_ENDPOINT);
457+
// ConnectivityMessageModel connectivityMessageModel =
458+
// new ConnectivityMessageModel(
459+
// latLng.latitude,
460+
// latLng.longitude,
461+
// ts,
462+
// prevUpload,
463+
// prevDownload,
464+
// prevPing, cell_id, device_id);
465+
// connectivityViewModel.insert(new Connectivity(ts, prevPing, prevUpload, prevDownload, latLng));
466+
// uploadData(connectivityMessageModel, sk_t, h_pkr, NetworkConstants.CONNECTIVITY_ENDPOINT);
478467
});
479468
}
480469
WorkManager.getInstance(this.context).pruneWork();
@@ -530,28 +519,28 @@ private boolean isTestCompleted() {
530519
return prevDownload != -1.0 && prevPing != -1.0 && prevUpload != -1.0;
531520
}
532521

533-
private void uploadData(MeasurementDataModel data, byte[] sk_t, byte[] h_pkr, String endpoint) throws NoSuchAlgorithmException,
534-
InvalidKeySpecException, SignatureException, InvalidKeyException, JsonProcessingException, NoSuchProviderException {
535-
536-
byte[] serialized = SerializationUtils.serializeToBytes(data);
537-
538-
byte[] sig_m = ECDSA.Sign(serialized, ECDSA.DeserializePrivateKey(sk_t));
539-
540-
SharedPreferences preferences = this.activity.getPreferences(MODE_PRIVATE);
541-
boolean show_data = preferences.getBoolean("showData", false);
542-
543-
MeasurementDataReportModel reportModel = new MeasurementDataReportModel(sig_m, h_pkr, serialized, show_data);
544-
545-
// upload data
546-
UploadManager upload = UploadManager.Builder()
547-
.addPayload(JsonStream.serialize(reportModel))
548-
.addEndpoint(endpoint);
549-
try {
550-
upload.post();
551-
} catch (IOException e) {
552-
TipDialog.show(getString(R.string.upload_ioexception), WaitDialog.TYPE.ERROR);
553-
}
554-
}
522+
// private void uploadData(MeasurementDataModel data, byte[] sk_t, byte[] h_pkr, String endpoint) throws NoSuchAlgorithmException,
523+
// InvalidKeySpecException, SignatureException, InvalidKeyException, JsonProcessingException, NoSuchProviderException {
524+
//
525+
// byte[] serialized = SerializationUtils.serializeToBytes(data);
526+
//
527+
// byte[] sig_m = ECDSA.Sign(serialized, ECDSA.DeserializePrivateKey(sk_t));
528+
//
529+
// SharedPreferences preferences = this.activity.getPreferences(MODE_PRIVATE);
530+
// boolean show_data = preferences.getBoolean("showData", false);
531+
532+
// MeasurementDataReportModel reportModel = new MeasurementDataReportModel(sig_m, h_pkr, serialized, show_data);
533+
//
534+
// // upload data
535+
// UploadManager upload = UploadManager.Builder()
536+
// .addPayload(JsonStream.serialize(reportModel))
537+
// .addEndpoint(endpoint);
538+
// try {
539+
// upload.post();
540+
// } catch (IOException e) {
541+
// TipDialog.show(getString(R.string.upload_ioexception), WaitDialog.TYPE.ERROR);
542+
// }
543+
// }
555544

556545
private byte[][] retrieveKeysInformation() {
557546
SharedPreferences preferences = this.activity.getPreferences(MODE_PRIVATE);

app/src/main/java/com/lcl/lclmeasurementtool/MainActivity.java

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,12 @@
2626
import androidx.navigation.ui.NavigationUI;
2727

2828
import com.google.android.material.textfield.TextInputEditText;
29-
import com.jsoniter.output.JsonStream;
3029
import com.kongzue.dialogx.DialogX;
3130
import com.kongzue.dialogx.dialogs.FullScreenDialog;
3231
import com.kongzue.dialogx.dialogs.MessageDialog;
3332
import com.kongzue.dialogx.dialogs.TipDialog;
3433
import com.kongzue.dialogx.dialogs.WaitDialog;
3534
import com.kongzue.dialogx.interfaces.OnBindView;
36-
import com.lcl.lclmeasurementtool.Models.RegistrationMessageModel;
3735
import com.lcl.lclmeasurementtool.Receivers.SimStatesReceiver;
3836
import com.lcl.lclmeasurementtool.Utils.AnalyticsUtils;
3937
import com.lcl.lclmeasurementtool.Utils.ECDSA;
@@ -326,39 +324,41 @@ private void validate(String sigma_t, String pk_a, String sk_t) {
326324
}
327325

328326
// prepare for registration message and then register
329-
RegistrationMessageModel registrationMessageModel = new RegistrationMessageModel(sigma_r, h_concat, R);
330-
String registration = JsonStream.serialize(registrationMessageModel);
327+
// RegistrationMessageModel registrationMessageModel = new RegistrationMessageModel(sigma_r, h_concat, R);
328+
// ObjectMapper mapper = new ObjectMapper();
329+
// mapper.writeValueAsString(registrationMessageModel)
330+
// String registration = JsonStream.serialize(registrationMessageModel);
331331

332-
OkHttpClient client = new OkHttpClient();
333-
RequestBody requestBody = RequestBody.create(registration, JSON);
334-
335-
Request request = new Request.Builder()
336-
.url(NetworkConstants.URL + NetworkConstants.REGISTRATION_ENDPOINT)
337-
.post(requestBody)
338-
.build();
339-
client.newCall(request).enqueue(new Callback() {
340-
@Override
341-
public void onFailure(@NonNull Call call, @NonNull IOException e) {
342-
showMessageOnFailure();
343-
Map<String, String> reasons = AnalyticsUtils.formatProperties(e.getMessage(), Arrays.toString(e.getStackTrace()));
344-
Analytics.trackEvent(AnalyticsUtils.REGISTRATION_FAILED, reasons);
345-
}
346-
347-
@Override
348-
public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
349-
if (response.isSuccessful()) {
350-
TipDialog.show(getString(com.lcl.lclmeasurementtool.R.string.validation_success), WaitDialog.TYPE.SUCCESS);
351-
saveCredentials(sigma_t, pk_a, sk_t);
352-
activity.runOnUiThread(() -> fullScreenDialog.dismiss());
353-
} else {
354-
Log.e(TAG, response.body().string());
355-
Map<String, String> reasons = AnalyticsUtils.formatProperties("status code", String.valueOf(response.code()), "body", response.body().string());
356-
Analytics.trackEvent(AnalyticsUtils.REGISTRATION_FAILED, reasons);
357-
TipDialog.show(getString(com.lcl.lclmeasurementtool.R.string.registration_failure), WaitDialog.TYPE.ERROR);
358-
}
359-
response.close();
360-
}
361-
});
332+
// OkHttpClient client = new OkHttpClient();
333+
// RequestBody requestBody = RequestBody.create(registration, JSON);
334+
//
335+
// Request request = new Request.Builder()
336+
// .url(NetworkConstants.URL + NetworkConstants.REGISTRATION_ENDPOINT)
337+
// .post(requestBody)
338+
// .build();
339+
// client.newCall(request).enqueue(new Callback() {
340+
// @Override
341+
// public void onFailure(@NonNull Call call, @NonNull IOException e) {
342+
// showMessageOnFailure();
343+
// Map<String, String> reasons = AnalyticsUtils.formatProperties(e.getMessage(), Arrays.toString(e.getStackTrace()));
344+
// Analytics.trackEvent(AnalyticsUtils.REGISTRATION_FAILED, reasons);
345+
// }
346+
//
347+
// @Override
348+
// public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
349+
// if (response.isSuccessful()) {
350+
// TipDialog.show(getString(com.lcl.lclmeasurementtool.R.string.validation_success), WaitDialog.TYPE.SUCCESS);
351+
// saveCredentials(sigma_t, pk_a, sk_t);
352+
// activity.runOnUiThread(() -> fullScreenDialog.dismiss());
353+
// } else {
354+
// Log.e(TAG, response.body().string());
355+
// Map<String, String> reasons = AnalyticsUtils.formatProperties("status code", String.valueOf(response.code()), "body", response.body().string());
356+
// Analytics.trackEvent(AnalyticsUtils.REGISTRATION_FAILED, reasons);
357+
// TipDialog.show(getString(com.lcl.lclmeasurementtool.R.string.registration_failure), WaitDialog.TYPE.ERROR);
358+
// }
359+
// response.close();
360+
// }
361+
// });
362362

363363
}
364364

app/src/main/java/com/lcl/lclmeasurementtool/MainActivity2.kt

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -102,11 +102,11 @@ class MainActivity2 : ComponentActivity() {
102102
// including IME animations
103103
WindowCompat.setDecorFitsSystemWindows(window, false)
104104
setContent {
105-
// if (uiState == MainActivityUiState.Login) {
106-
// viewModel.setDeviceId(UUID.randomUUID().toString())
107-
// Login(viewModel = viewModel)
108-
// return@setContent
109-
// }
105+
if (uiState == MainActivityUiState.Login) {
106+
viewModel.setDeviceId(UUID.randomUUID().toString())
107+
Login(viewModel = viewModel)
108+
return@setContent
109+
}
110110
LCLApp(windowSizeClass = calculateWindowSizeClass(activity = this), networkMonitor, simStateMonitor)
111111
}
112112
}
@@ -121,17 +121,8 @@ class MainActivity2 : ComponentActivity() {
121121
}
122122
}
123123

124-
125-
sealed interface LoginStatus {
126-
object KeyVerificationFailed: LoginStatus
127-
object QRCodeParseFailed: LoginStatus
128-
object KeyGenerationFailed: LoginStatus
129-
object KeySignFailed: LoginStatus
130-
object RegistrationFailed: LoginStatus
131-
object UnexpectedErrorOccurred: LoginStatus
132-
object RegistrationSucceeded: LoginStatus
133-
class KeyVerificationException(e: Exception): LoginStatus
134-
data class ScanSuccess(val sigmaTHex: ByteArray, val pkAHex: ByteArray, val skTHex: ByteArray): LoginStatus {
124+
sealed interface ScanStatus {
125+
data class ScanSuccess(val sigmaTHex: ByteArray, val pkAHex: ByteArray, val skTHex: ByteArray): ScanStatus {
135126
override fun equals(other: Any?): Boolean {
136127
if (this === other) return true
137128
if (javaClass != other?.javaClass) return false
@@ -152,4 +143,13 @@ sealed interface LoginStatus {
152143
return result
153144
}
154145
}
146+
147+
object KeyVerificationFailed: ScanStatus
148+
data class KeyVerificationException(val exception: Exception) : ScanStatus
149+
}
150+
151+
open class LoginStatus {
152+
object Initial: LoginStatus()
153+
data class RegistrationFailed(val reason: String): LoginStatus()
154+
object RegistrationSucceeded: LoginStatus()
155155
}

0 commit comments

Comments
 (0)