demo transaksi
This commit is contained in:
@@ -3,15 +3,25 @@ apply plugin: 'realm-android'
|
||||
apply plugin: 'kotlin-android'
|
||||
//apply plugin: 'kotlin-android-extensions'
|
||||
|
||||
// Native apps previously hard-required `ontimekeystore.jks` (not committed in this repo).
|
||||
// Fallback to the standard Android debug keystore so builds can still produce APKs locally.
|
||||
def ontimeKeystoreFile = file('ontimekeystore.jks')
|
||||
def defaultDebugKeystoreFile = file("${System.getProperty('user.home')}/.android/debug.keystore")
|
||||
def hasOntimeKeystore = ontimeKeystoreFile.exists()
|
||||
def signingStoreFile = hasOntimeKeystore ? ontimeKeystoreFile : defaultDebugKeystoreFile
|
||||
def signingStorePassword = hasOntimeKeystore ? '123456@ontime' : 'android'
|
||||
def signingKeyAlias = hasOntimeKeystore ? 'ontimekeystore' : 'androiddebugkey'
|
||||
def signingKeyPassword = hasOntimeKeystore ? '123456@ontime' : 'android'
|
||||
|
||||
android {
|
||||
namespace "id.ontime.customer"
|
||||
signingConfigs {
|
||||
debug {
|
||||
// Use local ontime keystore (make sure this file exists in the app module)
|
||||
storeFile file('ontimekeystore.jks')
|
||||
storePassword '123456@ontime'
|
||||
keyAlias 'ontimekeystore'
|
||||
keyPassword '123456@ontime'
|
||||
storeFile signingStoreFile
|
||||
storePassword signingStorePassword
|
||||
keyAlias signingKeyAlias
|
||||
keyPassword signingKeyPassword
|
||||
}
|
||||
}
|
||||
compileSdk 34
|
||||
|
||||
@@ -546,7 +546,7 @@ public class LoginActivity extends AppCompatActivity {
|
||||
}
|
||||
request.setPassword(password.getText().toString());
|
||||
|
||||
// FCM token is required: prefer cached token from Realm, otherwise fetch a fresh one.
|
||||
// Best effort FCM token: prefer cached token, otherwise fetch a fresh one.
|
||||
Realm realm = BaseApp.getInstance(this).getRealmInstance();
|
||||
FirebaseToken storedToken = realm.where(FirebaseToken.class).findFirst();
|
||||
if (storedToken != null && storedToken.getTokenId() != null && !storedToken.getTokenId().isEmpty()) {
|
||||
@@ -569,15 +569,13 @@ public class LoginActivity extends AppCompatActivity {
|
||||
});
|
||||
doLoginRequest(request, emailText);
|
||||
} else {
|
||||
progresshide();
|
||||
Log.e(TAG, "FCM getToken failed: " + (task.getException() != null ? task.getException().getMessage() : "empty token"));
|
||||
notif(getString(R.string.fcm_token_required));
|
||||
Log.w(TAG, "FCM getToken not ready, continue login without token");
|
||||
doLoginRequest(request, emailText);
|
||||
}
|
||||
});
|
||||
} catch (IllegalStateException e) {
|
||||
progresshide();
|
||||
Log.e(TAG, "FirebaseMessaging not available; FCM token is required", e);
|
||||
notif(getString(R.string.fcm_token_required));
|
||||
Log.w(TAG, "FirebaseMessaging unavailable during login, continue without token", e);
|
||||
doLoginRequest(request, emailText);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -620,19 +618,24 @@ public class LoginActivity extends AppCompatActivity {
|
||||
notif(showMsg);
|
||||
}
|
||||
} else {
|
||||
String errMsg = "Login failed";
|
||||
String errMsg = getString(R.string.phoneemailwrong);
|
||||
try {
|
||||
if (response.errorBody() != null) {
|
||||
String errBody = response.errorBody().string();
|
||||
Log.e(TAG, "Login error body: code=" + code + " body=" + (errBody != null ? errBody : "null"));
|
||||
if (errBody != null && !errBody.isEmpty()) errMsg = errBody;
|
||||
if (errBody != null && !errBody.isEmpty()) {
|
||||
String low = errBody.toLowerCase();
|
||||
if (!(low.contains("wrong") || low.contains("salah") || low.contains("not found") || low.contains("unauthorized"))) {
|
||||
errMsg = errBody;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Log.e(TAG, "Login error: code=" + code + " no error body");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, "Login error reading body", e);
|
||||
}
|
||||
if (code == 401) errMsg = getString(R.string.phoneemailwrong);
|
||||
if (code == 400 || code == 401 || code == 403) errMsg = getString(R.string.phoneemailwrong);
|
||||
notif(errMsg);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -837,16 +837,14 @@ public class RegisterActivity extends AppCompatActivity {
|
||||
request.setCountrycode(countryCode.getText().toString());
|
||||
request.setChecked(check);
|
||||
|
||||
// FCM v1: get token async then register (token is mandatory)
|
||||
// FCM v1: best effort token fetch before register.
|
||||
try {
|
||||
FirebaseMessaging.getInstance().getToken().addOnCompleteListener(task -> {
|
||||
if (task.isSuccessful() && task.getResult() != null && !task.getResult().isEmpty()) {
|
||||
request.setToken(task.getResult());
|
||||
} else {
|
||||
progresshide();
|
||||
Log.e("RegisterActivity", "FCM getToken failed for register: " + (task.getException() != null ? task.getException().getMessage() : "empty token"));
|
||||
notif(getString(R.string.fcm_token_required));
|
||||
return;
|
||||
Log.w("RegisterActivity", "FCM getToken not ready, continue register without token");
|
||||
request.setToken("");
|
||||
}
|
||||
UserService service = ServiceGenerator.createService(UserService.class, request.getEmail(), request.getPassword());
|
||||
service.register(request).enqueue(new Callback<RegisterResponseJson>() {
|
||||
@@ -884,9 +882,42 @@ public class RegisterActivity extends AppCompatActivity {
|
||||
});
|
||||
});
|
||||
} catch (IllegalStateException e) {
|
||||
progresshide();
|
||||
Log.e("RegisterActivity", "FirebaseMessaging not available; FCM token is required for register", e);
|
||||
notif(getString(R.string.fcm_token_required));
|
||||
Log.w("RegisterActivity", "FirebaseMessaging unavailable during register, continue without token", e);
|
||||
request.setToken("");
|
||||
UserService service = ServiceGenerator.createService(UserService.class, request.getEmail(), request.getPassword());
|
||||
service.register(request).enqueue(new Callback<RegisterResponseJson>() {
|
||||
@Override
|
||||
public void onResponse(@NonNull Call<RegisterResponseJson> call, @NonNull Response<RegisterResponseJson> response) {
|
||||
progresshide();
|
||||
if (response.isSuccessful()) {
|
||||
if (Objects.requireNonNull(response.body()).getMessage().equalsIgnoreCase("next")) {
|
||||
Nextbtn(viewFlipper);
|
||||
|
||||
} else if (response.body().getMessage().equalsIgnoreCase("success")) {
|
||||
|
||||
User user = response.body().getData().get(0);
|
||||
saveUser(user);
|
||||
registerPanic();
|
||||
Intent intent = new Intent(RegisterActivity.this, MainActivity.class);
|
||||
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
startActivity(intent);
|
||||
finish();
|
||||
|
||||
} else {
|
||||
notif(response.body().getMessage());
|
||||
}
|
||||
} else {
|
||||
notif("error");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(@NonNull Call<RegisterResponseJson> call, @NonNull Throwable t) {
|
||||
progresshide();
|
||||
t.printStackTrace();
|
||||
notif("error!");
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -43,7 +43,9 @@ public class BaseApp extends Application {
|
||||
|
||||
// FCM v1: async token fetch and topic subscribe (reference: test app LoginActivity).
|
||||
try {
|
||||
FirebaseApp app = FirebaseApp.initializeApp(this);
|
||||
FirebaseApp app = FirebaseApp.getApps(this).isEmpty()
|
||||
? FirebaseApp.initializeApp(this)
|
||||
: FirebaseApp.getInstance();
|
||||
if (app != null) {
|
||||
FirebaseMessaging.getInstance().getToken()
|
||||
.addOnCompleteListener(task -> {
|
||||
|
||||
Reference in New Issue
Block a user