Commit e187aa8b by Krishna Vemulawada

login sso and otp

parents 29cd325e 47ff318d
Showing with 563 additions and 28 deletions
...@@ -72,7 +72,7 @@ android { ...@@ -72,7 +72,7 @@ android {
vportal { vportal {
applicationId "com.vsoft.vera.vportal" applicationId "com.vsoft.vera.vportal"
versionCode 1 versionCode 1
versionName "0.0.9" versionName "0.1.2"
} }
} }
} }
......
...@@ -43,12 +43,18 @@ ...@@ -43,12 +43,18 @@
android:windowSoftInputMode="adjustResize|stateHidden" /> android:windowSoftInputMode="adjustResize|stateHidden" />
<activity <activity
android:name=".ui.OtpValidationActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize|stateHidden" />
<activity
android:name=".ui.LoginChooseActivity" android:name=".ui.LoginChooseActivity"
android:screenOrientation="portrait" android:screenOrientation="portrait"
/> <activity /> <activity
android:name=".ui.ADALActivity" android:name=".ui.ADALActivity"
android:screenOrientation="portrait" android:screenOrientation="portrait"
/> />
<activity android:name=".ui.ResetPasswordActivity" <activity android:name=".ui.ResetPasswordActivity"
android:screenOrientation="portrait" android:screenOrientation="portrait"
android:fitsSystemWindows="true" android:fitsSystemWindows="true"
......

36.2 KB | W: | H:

127 KB | W: | H:

app/src/main/ic_launcher-web.png
app/src/main/ic_launcher-web.png
app/src/main/ic_launcher-web.png
app/src/main/ic_launcher-web.png
  • 2-up
  • Swipe
  • Onion skin
package com.vsoft.vera.api.interfaces;
import com.vsoft.vera.api.pojos.OtpPostData;
import com.vsoft.vera.utils.Constants;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Query;
public interface OtpApi {
@POST(Constants.URL_PHONE_NUMBER_VERIFICATION)
Call<ResponseBody> getOtp(@Body OtpPostData otpPostData);
@GET(Constants.URL_PHONE_NUMBER_VALIDATION)
Call<ResponseBody> validateOtp(@Query(value = Constants.PHONE_NUMBER,encoded = true) String phone_number,
@Query(value = Constants.COUNTRY_CODE, encoded = true) String country_code,
@Query(Constants.VERIFICATION_CODE) String verification_code,
@Query(Constants.LANGUAGE) String language);
}
package com.vsoft.vera.api.listeners.get;
import com.vsoft.vera.api.pojos.LoginApiResponse;
public interface GetValidateOtpApiListener {
void onDoneApiCall(String message);
void onFailApiCall(String message);
}
package com.vsoft.vera.api.listeners.post;
public interface PostOtpApiListener {
void onDoneApiCall(String message);
void onFailApiCall(String message);
}
package com.vsoft.vera.api.managers;
import com.google.gson.JsonObject;
import com.vsoft.vera.api.RestClient;
import com.vsoft.vera.api.interfaces.LoginApi;
import com.vsoft.vera.api.interfaces.OtpApi;
import com.vsoft.vera.api.listeners.get.GetValidateOtpApiListener;
import com.vsoft.vera.api.listeners.post.PostOtpApiListener;
import com.vsoft.vera.api.pojos.OtpPostData;
import com.vsoft.vera.db.models.Reference;
import com.vsoft.vera.utils.CatalogueLog;
import com.vsoft.vera.utils.Constants;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.Response;
import retrofit2.Retrofit;
public class OtpApiManager {
private static String error = "Something went Wrong";
public static void getOTP(String mobileNumber, PostOtpApiListener listener){
final Retrofit retrofit = RestClient.getInitializedRestAdapterWithOutAuthorizationHeader();
OtpPostData otpPostData = new OtpPostData();
otpPostData.setPhone_number(mobileNumber);
otpPostData.setVia("sms");
otpPostData.setCountry_code("+1");
otpPostData.setLn("en");
Call<ResponseBody> call = retrofit.create(OtpApi.class).getOtp(otpPostData);
try {
//Retrofit synchronous call
Response<ResponseBody> response = call.execute();
if(response.isSuccessful()){
try{
JSONObject jsonObject = new JSONObject(response.body().string());
if(jsonObject.has(Constants.RESPONSE_SUCCESS)){
boolean success = jsonObject.getBoolean(Constants.RESPONSE_SUCCESS);
if(success){
listener.onDoneApiCall(jsonObject.getString(Constants.RESPONSE_MESSAGE));
}else{
if(jsonObject.has(Constants.RESPONSE_ERRORS)){
JSONObject errors = jsonObject.getJSONObject(Constants.RESPONSE_ERRORS);
if(errors.has(Constants.RESPONSE_MESSAGE)) {
listener.onFailApiCall(jsonObject.getString(Constants.RESPONSE_MESSAGE));
}else{
listener.onFailApiCall(error);
}
}else{
listener.onFailApiCall(error);
}
}
}else{
listener.onFailApiCall(error);
}
}catch (JSONException e) {
CatalogueLog.e("LoginApiManager: submitLoginValues: onResponse: ", e);
listener.onFailApiCall(error);
} catch (IOException e) {
CatalogueLog.e("LoginApiManager: submitLoginValues: onResponse: ", e);
listener.onFailApiCall(error);
}
}else {
JSONObject errorObject = new JSONObject(response.errorBody().string());
if(errorObject.has(Constants.RESPONSE_MESSAGE)){
listener.onFailApiCall(errorObject.getString(Constants.RESPONSE_MESSAGE));
}else{
listener.onFailApiCall(error);
}
}
}catch (IOException e) {
CatalogueLog.e("OtpApiManager: IOException: ", e);
listener.onFailApiCall(error);
} catch (NullPointerException e) {
CatalogueLog.e("OtpApiManager: NullPointerException: ", e);
listener.onFailApiCall(error);
} catch (JSONException e) {
CatalogueLog.e("OtpApiManager: JSONException: ", e);
listener.onFailApiCall(error);
}
}
public static void validateOTP(String mobileNumber,String verificationCode, GetValidateOtpApiListener listener){
final Retrofit retrofit = RestClient.getInitializedRestAdapterWithOutAuthorizationHeader();
Call<ResponseBody> call = retrofit.create(OtpApi.class).validateOtp(mobileNumber,"+1",verificationCode,"en");
try {
//Retrofit synchronous call
Response<ResponseBody> response = call.execute();
if(response.isSuccessful()){
try{
JSONObject jsonObject = new JSONObject(response.body().string());
if(jsonObject.has(Constants.RESPONSE_SUCCESS)){
boolean success = jsonObject.getBoolean(Constants.RESPONSE_SUCCESS);
if(success){
listener.onDoneApiCall(jsonObject.getString(Constants.RESPONSE_MESSAGE));
}else{
if(jsonObject.has(Constants.RESPONSE_ERRORS)){
JSONObject errors = jsonObject.getJSONObject(Constants.RESPONSE_ERRORS);
if(errors.has(Constants.RESPONSE_MESSAGE)) {
listener.onFailApiCall(jsonObject.getString(Constants.RESPONSE_MESSAGE));
}else{
listener.onFailApiCall(error);
}
}else{
listener.onFailApiCall(error);
}
}
}else{
listener.onFailApiCall(error);
}
}catch (JSONException e) {
CatalogueLog.e("LoginApiManager: submitLoginValues: onResponse: ", e);
listener.onFailApiCall(error);
} catch (IOException e) {
CatalogueLog.e("LoginApiManager: submitLoginValues: onResponse: ", e);
listener.onFailApiCall(error);
}
}else {
JSONObject errorObject = new JSONObject(response.errorBody().string());
if(errorObject.has(Constants.RESPONSE_MESSAGE)){
listener.onFailApiCall(errorObject.getString(Constants.RESPONSE_MESSAGE));
}else{
listener.onFailApiCall(error);
}
}
}catch (IOException e) {
CatalogueLog.e("OtpApiManager: IOException: ", e);
listener.onFailApiCall(error);
} catch (NullPointerException e) {
CatalogueLog.e("OtpApiManager: NullPointerException: ", e);
listener.onFailApiCall(error);
} catch (JSONException e) {
CatalogueLog.e("OtpApiManager: JSONException: ", e);
listener.onFailApiCall(error);
}
}
}
package com.vsoft.vera.api.pojos;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class OtpPostData {
@SerializedName("via")
@Expose
private String via;
@SerializedName("phone_number")
@Expose
private String phone_number;
@SerializedName("country_code")
@Expose
private String country_code;
@SerializedName("ln")
@Expose
private String ln;
public String getVia() {
return via;
}
public void setVia(String via) {
this.via = via;
}
public String getPhone_number() {
return phone_number;
}
public void setPhone_number(String phone_number) {
this.phone_number = phone_number;
}
public String getCountry_code() {
return country_code;
}
public void setCountry_code(String country_code) {
this.country_code = country_code;
}
public String getLn() {
return ln;
}
public void setLn(String ln) {
this.ln = ln;
}
}
...@@ -13,6 +13,7 @@ import android.view.KeyEvent; ...@@ -13,6 +13,7 @@ import android.view.KeyEvent;
import android.view.View; import android.view.View;
import android.widget.EditText; import android.widget.EditText;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.Toast;
import com.google.android.gms.analytics.Tracker; import com.google.android.gms.analytics.Tracker;
import com.vsoft.vera.CatalogueApplication; import com.vsoft.vera.CatalogueApplication;
...@@ -77,7 +78,7 @@ public class LoginScreen extends Activity { ...@@ -77,7 +78,7 @@ public class LoginScreen extends Activity {
switch (keyCode) { switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_CENTER: case KeyEvent.KEYCODE_DPAD_CENTER:
case KeyEvent.KEYCODE_ENTER: case KeyEvent.KEYCODE_ENTER:
callLoginAPI(); callLoginAPI(false);
return true; return true;
default: default:
break; break;
...@@ -113,6 +114,22 @@ public class LoginScreen extends Activity { ...@@ -113,6 +114,22 @@ public class LoginScreen extends Activity {
Util.sendScreenName(tracker, getString(R.string.login_screen_string)); Util.sendScreenName(tracker, getString(R.string.login_screen_string));
} }
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == Constants.LOGIN_SCREEN_OTP_REQUEST_CODE){
if(data!=null && data.getExtras()!=null){
String message = data.getExtras().getString(Constants.MESSAGE);
if(message.equalsIgnoreCase(Constants.RESPONSE_SUCCESS)){
callLoginAPI(false);
}else{
Toast.makeText(this,"Something went Wrong",Toast.LENGTH_LONG).show();
}
}
}
}
private void CheckLoginValues() { private void CheckLoginValues() {
String sysId = PrefManager.getSharedPref(LoginScreen.this, PrefManager.PREFERENCE_USER_SYS_ID); String sysId = PrefManager.getSharedPref(LoginScreen.this, PrefManager.PREFERENCE_USER_SYS_ID);
if (!TextUtils.isEmpty(sysId)) { if (!TextUtils.isEmpty(sysId)) {
...@@ -136,7 +153,7 @@ public class LoginScreen extends Activity { ...@@ -136,7 +153,7 @@ public class LoginScreen extends Activity {
} }
} }
private void callLoginAPI() { private void callLoginAPI(boolean withOtp) {
String userNameString = mUserNameEditText.getText().toString().trim(); String userNameString = mUserNameEditText.getText().toString().trim();
String passwordString = mPasswordEditText.getText().toString().trim(); String passwordString = mPasswordEditText.getText().toString().trim();
...@@ -149,19 +166,38 @@ public class LoginScreen extends Activity { ...@@ -149,19 +166,38 @@ public class LoginScreen extends Activity {
if (!TextUtils.isEmpty(userNameString) && !TextUtils.isEmpty(passwordString)) { if (!TextUtils.isEmpty(userNameString) && !TextUtils.isEmpty(passwordString)) {
KeyboardUtil.hideKeyboard(LoginScreen.this); KeyboardUtil.hideKeyboard(LoginScreen.this);
if (mApplication.isNetConnected()) { if (mApplication.isNetConnected()) {
if(withOtp){
launchOptValidationScreen();
}else{
new LoginDetailsSendToServer().execute(mUserNameEditText.getText().toString().trim(), mPasswordEditText.getText().toString().trim()); new LoginDetailsSendToServer().execute(mUserNameEditText.getText().toString().trim(), mPasswordEditText.getText().toString().trim());
}
} else { } else {
DialogUtils.showNoConnectionDialog(LoginScreen.this); DialogUtils.showNoConnectionDialog(LoginScreen.this);
} }
} }
} }
@OnClick(R.id.login_screen_login_text_view) @OnClick({R.id.login_screen_login_text_view,R.id.login_screen_login_text_view_twillio})
void onLoginClicked() { void onLoginClicked(View mView) {
callLoginAPI();
if(mView.getId()==R.id.login_screen_login_text_view){
callLoginAPI(false);
}else if(mView.getId()==R.id.login_screen_login_text_view_twillio){
callLoginAPI(true);
} }
}
private void launchOptValidationScreen(){
Intent intent = new Intent(LoginScreen.this,OtpValidationActivity.class);
startActivityForResult(intent,Constants.LOGIN_SCREEN_OTP_REQUEST_CODE);
}
private class LoginDetailsSendToServer extends AsyncTask<String, Integer, Integer> { private class LoginDetailsSendToServer extends AsyncTask<String, Integer, Integer> {
private ProgressDialog progressDialog; private ProgressDialog progressDialog;
private static final int USER_DETAIL = 1; private static final int USER_DETAIL = 1;
......
...@@ -53,6 +53,13 @@ public class Constants { ...@@ -53,6 +53,13 @@ public class Constants {
public static final String MESSAGE = "Message"; public static final String MESSAGE = "Message";
public static final String PHONE_NUMBER = "phone_number";
public static final String COUNTRY_CODE = "country_code";
public static final String VERIFICATION_CODE = "verification_code";
public static final String LANGUAGE = "ln";
public static final String VIA = "via";
/** /**
* Broadcast custom intent * Broadcast custom intent
*/ */
...@@ -78,13 +85,14 @@ public class Constants { ...@@ -78,13 +85,14 @@ public class Constants {
public static final String URL_PARAM_FILE_NAME = "file_name"; public static final String URL_PARAM_FILE_NAME = "file_name";
public static final String URL_PARAM_SYS_ID = "sys_id"; public static final String URL_PARAM_SYS_ID = "sys_id";
public static final String URL_PARAM_OPENED_BY = "opened_by"; public static final String URL_PARAM_OPENED_BY = "opened_by";
public static String URL_PHONE_NUMBER_VERIFICATION = "https://api.authy.com/protected/json/phones/verification/start?api_key=" + Constants.TWILIO_VALIDATION_KEY; public static final String URL_PHONE_NUMBER_VERIFICATION = "https://api.authy.com/protected/json/phones/verification/start?api_key=" + Constants.TWILIO_VALIDATION_KEY;
public static String URL_PHONE_NUMBER_VALIDATION = "https://api.authy.com/protected/json/phones/verification/check?api_key=" + Constants.TWILIO_VALIDATION_KEY; public static final String URL_PHONE_NUMBER_VALIDATION = "https://api.authy.com/protected/json/phones/verification/check?api_key=" + Constants.TWILIO_VALIDATION_KEY;
/** /**
* Request Code * Request Code
* */ * */
public static final int LOGIN_SCREEN_REQUEST_CODE = 105; public static final int LOGIN_SCREEN_REQUEST_CODE = 105;
public static final int LOGIN_SCREEN_OTP_REQUEST_CODE = 112;
/** /**
* Preference Notification token. * Preference Notification token.
...@@ -158,6 +166,9 @@ public class Constants { ...@@ -158,6 +166,9 @@ public class Constants {
public static final String RESPONSE_VARIABLES_OBJECT_NAME = "variables"; public static final String RESPONSE_VARIABLES_OBJECT_NAME = "variables";
public static final String RESPONSE_CATEGORY_OBJECT_NAME = "Category"; public static final String RESPONSE_CATEGORY_OBJECT_NAME = "Category";
public static final String RESPONSE_VARIABLES_UI_POLICY_ACTIONS = "ui_policy_actions"; public static final String RESPONSE_VARIABLES_UI_POLICY_ACTIONS = "ui_policy_actions";
public static final String RESPONSE_SUCCESS = "success";
public static final String RESPONSE_MESSAGE = "message";
public static final String RESPONSE_ERRORS = "errors";
/** /**
* Web services urls * Web services urls
......
...@@ -2,12 +2,35 @@ ...@@ -2,12 +2,35 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android" <shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle"> android:shape="rectangle">
<solid android:color="@color/login_screen_login_button_background_color" /> <!-- <solid android:color="@color/button_bg" />-->
<corners android:radius="10dip" /> <!-- <corners android:radius="10dip" />-->
<!-- <stroke-->
<!-- android:width="1dp"-->
<!-- android:color="@color/button_bg" />-->
<corners
android:radius="10dp"
/>
<gradient
android:angle="45"
android:centerX="35%"
android:centerColor="#6699c8"
android:startColor="#7faad1"
android:endColor="#1966ad"
android:type="linear"
/>
<padding
android:left="0dp"
android:top="0dp"
android:right="0dp"
android:bottom="0dp"
/>
<size
android:width="270dp"
android:height="60dp"
/>
<stroke
android:width="1dp"
android:color="@color/login_screen_login_button_background_color" />
</shape> </shape>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/fulton_bg"
android:orientation="vertical">
<android.support.v7.widget.Toolbar
android:id="@+id/tool_bar_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/button_bg_two"
android:minHeight="?attr/actionBarSize"
app:contentInsetEnd="0dp"
app:contentInsetLeft="0dp"
app:contentInsetRight="0dp"
app:contentInsetStart="0dp"
app:titleTextColor="@color/tool_bar_title_color">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/small_margin"
android:layout_marginRight="@dimen/small_margin">
<TextView
style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_centerVertical="true"
android:text="FULTON COUNTY"
android:textColor="@color/screen_bg_color_white" />
</RelativeLayout>
</android.support.v7.widget.Toolbar>
<RelativeLayout
android:id="@+id/phone_validate_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.TextInputLayout
android:id="@+id/phone_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="0dp"
android:layout_marginBottom="0dp"
android:layout_centerVertical="true">
<EditText
android:id="@+id/otp_screen_phone_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/extra_large_margin"
android:layout_marginRight="@dimen/extra_large_margin"
android:background="@drawable/username_under_bg_box"
android:hint="Please enter phone number"
android:lines="1"
android:inputType="number"
android:padding="@dimen/normal_margin"
android:singleLine="true" />
</android.support.design.widget.TextInputLayout>
<TextView
android:id="@+id/otp_screen_text_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/normal_margin"
android:layout_marginLeft="@dimen/extra_large_margin"
android:layout_marginRight="@dimen/extra_large_margin"
android:layout_marginTop="30dp"
android:layout_below="@+id/phone_layout"
android:background="@drawable/login_bg"
android:gravity="center"
android:paddingBottom="@dimen/normal_margin"
android:paddingTop="@dimen/normal_margin"
android:text="@string/generate_otp"
android:textColor="@android:color/white"
android:textSize="@dimen/large_text_size" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/otp_validate_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone">
<android.support.design.widget.TextInputLayout
android:id="@+id/otp_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="0dp"
android:layout_marginBottom="0dp"
android:layout_centerVertical="true">
<EditText
android:id="@+id/otp_screen_otp_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/extra_large_margin"
android:layout_marginRight="@dimen/extra_large_margin"
android:background="@drawable/username_under_bg_box"
android:hint="@string/enter_otp"
android:lines="1"
android:inputType="number"
android:padding="@dimen/normal_margin"
android:singleLine="true" />
</android.support.design.widget.TextInputLayout>
<TextView
android:id="@+id/otp_screen_validate_text_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/normal_margin"
android:layout_marginLeft="@dimen/extra_large_margin"
android:layout_marginRight="@dimen/extra_large_margin"
android:layout_marginTop="30dp"
android:layout_below="@+id/otp_layout"
android:background="@drawable/login_bg"
android:gravity="center"
android:paddingBottom="@dimen/normal_margin"
android:paddingTop="@dimen/normal_margin"
android:text="@string/validate_otp"
android:textColor="@android:color/white"
android:textSize="@dimen/large_text_size" />
</RelativeLayout>
</RelativeLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/activity_main" android:id="@+id/activity_main"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="#FFFFFF" android:background="@drawable/fulton_bg"
android:orientation="vertical" android:orientation="vertical"
tools:context="com.vsoft.vera.ui.ADALActivity"> tools:context="com.vsoft.vera.ui.ADALActivity">
<android.support.v7.widget.Toolbar
android:id="@+id/tool_bar_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/button_bg_two"
android:minHeight="?attr/actionBarSize"
app:contentInsetEnd="0dp"
app:contentInsetLeft="0dp"
app:contentInsetRight="0dp"
app:contentInsetStart="0dp"
app:titleTextColor="@color/tool_bar_title_color">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/small_margin"
android:layout_marginRight="@dimen/small_margin">
<TextView
style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_centerVertical="true"
android:text="FULTON COUNTY"
android:textColor="@color/screen_bg_color_white" />
</RelativeLayout>
</android.support.v7.widget.Toolbar>
<TextView <TextView
android:text="WelCome" android:text="WelCome"
...@@ -19,12 +49,14 @@ ...@@ -19,12 +49,14 @@
android:id="@+id/welcome" android:id="@+id/welcome"
android:visibility="gone"/> android:visibility="gone"/>
<ImageView <ImageView
android:id="@+id/logo_banner"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:visibility="visible" android:visibility="visible"
android:layout_marginTop="50dp" android:layout_marginTop="50dp"
android:alpha="0.8"
android:layout_gravity="center_horizontal" android:layout_gravity="center_horizontal"
android:background="@drawable/ic_login_banner" /> android:background="@drawable/fulton_app_logo" />
<Button <Button
android:id="@+id/callGraph" android:id="@+id/callGraph"
...@@ -33,7 +65,7 @@ ...@@ -33,7 +65,7 @@
android:layout_marginBottom="@dimen/normal_margin" android:layout_marginBottom="@dimen/normal_margin"
android:layout_marginLeft="@dimen/extra_large_margin" android:layout_marginLeft="@dimen/extra_large_margin"
android:layout_marginRight="@dimen/extra_large_margin" android:layout_marginRight="@dimen/extra_large_margin"
android:layout_marginTop="30dp" android:layout_marginTop="50dp"
android:background="@drawable/login_bg" android:background="@drawable/login_bg"
android:gravity="center" android:gravity="center"
android:paddingBottom="@dimen/normal_margin" android:paddingBottom="@dimen/normal_margin"
......
...@@ -3,14 +3,14 @@ ...@@ -3,14 +3,14 @@
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="#EBEAEA" android:background="@drawable/fulton_bg"
android:orientation="vertical"> android:orientation="vertical">
<android.support.v7.widget.Toolbar <android.support.v7.widget.Toolbar
android:id="@+id/tool_bar_view" android:id="@+id/tool_bar_view"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="#303030" android:background="@color/button_bg_two"
android:minHeight="?attr/actionBarSize" android:minHeight="?attr/actionBarSize"
app:contentInsetEnd="0dp" app:contentInsetEnd="0dp"
app:contentInsetLeft="0dp" app:contentInsetLeft="0dp"
...@@ -39,7 +39,7 @@ ...@@ -39,7 +39,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_centerInParent="true" android:layout_centerInParent="true"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:text="@string/app_name" android:text="FULTON COUNTY"
android:textColor="@color/screen_bg_color_white" /> android:textColor="@color/screen_bg_color_white" />
<ImageView <ImageView
......
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
</adaptive-icon>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
</adaptive-icon>
\ No newline at end of file

3.22 KB | W: | H:

6.88 KB | W: | H:

app/src/main/res/mipmap-hdpi/ic_launcher.png
app/src/main/res/mipmap-hdpi/ic_launcher.png
app/src/main/res/mipmap-hdpi/ic_launcher.png
app/src/main/res/mipmap-hdpi/ic_launcher.png
  • 2-up
  • Swipe
  • Onion skin

4.61 KB | W: | H:

10.5 KB | W: | H:

app/src/main/res/mipmap-xhdpi/ic_launcher.png
app/src/main/res/mipmap-xhdpi/ic_launcher.png
app/src/main/res/mipmap-xhdpi/ic_launcher.png
app/src/main/res/mipmap-xhdpi/ic_launcher.png
  • 2-up
  • Swipe
  • Onion skin

7.52 KB | W: | H:

18.7 KB | W: | H:

app/src/main/res/mipmap-xxhdpi/ic_launcher.png
app/src/main/res/mipmap-xxhdpi/ic_launcher.png
app/src/main/res/mipmap-xxhdpi/ic_launcher.png
app/src/main/res/mipmap-xxhdpi/ic_launcher.png
  • 2-up
  • Swipe
  • Onion skin
...@@ -30,6 +30,10 @@ ...@@ -30,6 +30,10 @@
<!--Notification screen--> <!--Notification screen-->
<color name="list_divider_color">@color/light_gray</color> <color name="list_divider_color">@color/light_gray</color>
<color name="button_bg">#0055A4</color>
<color name="button_bg_two">#002a52</color>
<!--Chatbot Screen--> <!--Chatbot Screen-->
<color name="username0">#e21400</color> <color name="username0">#e21400</color>
<color name="username1">#91580f</color> <color name="username1">#91580f</color>
......
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources></resources> <resources>
\ No newline at end of file <color name="ic_launcher_background">#FFFFFF</color>
</resources>
\ No newline at end of file
<resources> <resources>
<string name="app_name">V-Portal</string> <string name="app_name">Fulton-County</string>
<string name="set_string">Set</string> <string name="set_string">Set</string>
<string name="submit_string">Submit</string> <string name="submit_string">Submit</string>
...@@ -47,19 +47,30 @@ ...@@ -47,19 +47,30 @@
<!--Login Screen--> <!--Login Screen-->
<string name="prompt_relogin_login_expired">Login expired, please login again&#8230;</string> <string name="prompt_relogin_login_expired">Login expired, please login again&#8230;</string>
<string name="login_screen_login_string">Login</string> <string name="login_screen_login_string">Login</string>
<string name="login_screen_login_string_twillio">Login With Twillio</string> <string name="login_screen_login_string_twillio">Login With OTP</string>
<string name="login_screen_submit_string">Submit</string> <string name="login_screen_submit_string">Submit</string>
<string name="login_screen_logging_in_loading_string">Logging in&#8230;</string> <string name="login_screen_logging_in_loading_string">Logging in&#8230;</string>
<string name="login_screen_getting_user_detail_loading_string">Getting user details&#8230;</string> <string name="login_screen_getting_user_detail_loading_string">Getting user details&#8230;</string>
<string name="login_screen_invalid_username_and_password_string">Invalid username and password</string> <string name="login_screen_invalid_username_and_password_string">Invalid username and password</string>
<string name="user_detail_not_available">Unable to fetch user details.</string> <string name="user_detail_not_available">Unable to fetch user details.</string>
<string name="generate_otp">Generate OTP</string>
<string name="generating_otp">Generating OTP</string>
<string name="sending_otp">Sending OTP</string>
<string name="validate_otp">Validate OTP</string>
<string name="validating_otp">Validating OTP</string>
<string name="enter_otp">Enter OTP</string>
<string name="user_error">Please enter username</string> <string name="user_error">Please enter username</string>
<string name="pasw_error">Please enter password</string> <string name="pasw_error">Please enter password</string>
<string name="phone_error">Please enter mobile number</string>
<string name="otp_error">Please enter OTP</string>
<string name="username_string">Username</string> <string name="username_string">Username</string>
<string name="password_string">Password</string> <string name="password_string">Password</string>
<string name="confirm_password_string">Confirm Password</string> <string name="confirm_password_string">Confirm Password</string>
<string name="home_screen_logout_string">Ver: %1$s</string> <string name="home_screen_logout_string">Ver: %1$s</string>
<string name="phone">Phone </string>
<!--Variable Screen--> <!--Variable Screen-->
<string name="variable_form_mandatory_toast_string">Fields marked with an asterisk(*) are mandatory.</string> <string name="variable_form_mandatory_toast_string">Fields marked with an asterisk(*) are mandatory.</string>
......
...@@ -3,13 +3,14 @@ ...@@ -3,13 +3,14 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_gravity="center" android:layout_gravity="center"
android:background="#000" android:background="@drawable/fulton_splash_screen"
android:orientation="vertical"> android:orientation="vertical">
<ImageView <ImageView
android:layout_gravity="center" android:layout_gravity="center"
android:layout_width="200dp" android:layout_width="200dp"
android:layout_height="150dp" android:layout_height="150dp"
android:background="@drawable/logo_splash" android:visibility="gone"
android:background="@drawable/fulton_splash_screen"
/> />
</FrameLayout> </FrameLayout>
\ No newline at end of file
<resources> <resources>
<string name="app_name">VERA 2.1</string> <string name="app_name">Fulton-County</string>
<!--home Screen Option--> <!--home Screen Option-->
<!--Start--> <!--Start-->
......
The file could not be displayed because it is too large.
[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"0.0.9","enabled":true,"outputFile":"app-vportal-staging.apk","fullName":"vportalStaging","baseName":"vportal-staging"},"path":"app-vportal-staging.apk","properties":{}}] [{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"0.1.2","enabled":true,"outputFile":"app-vportal-staging.apk","fullName":"vportalStaging","baseName":"vportal-staging"},"path":"app-vportal-staging.apk","properties":{}}]
\ No newline at end of file \ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment