Files
Haleon-Egypt-PD/GSKMTOrange/src/main/java/cpm/com/gskmtorange/LoginActivity.java
T

1209 lines
53 KiB
Java

package cpm.com.gskmtorange;
import android.Manifest;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.annotation.TargetApi;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentSender;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationManager;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.os.Looper;
import android.preference.PreferenceManager;
import android.text.TextUtils;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.EditorInfo;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.cardview.widget.CardView;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.common.api.PendingResult;
import com.google.android.gms.common.api.ResultCallback;
import com.google.android.gms.common.api.Status;
import com.google.android.gms.location.FusedLocationProviderClient;
import com.google.android.gms.location.LocationCallback;
import com.google.android.gms.location.LocationListener;
import com.google.android.gms.location.LocationRequest;
import com.google.android.gms.location.LocationResult;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.location.LocationSettingsRequest;
import com.google.android.gms.location.LocationSettingsResult;
import com.google.android.gms.location.LocationSettingsStatusCodes;
import com.google.android.gms.location.Priority;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.material.snackbar.Snackbar;
import com.google.firebase.analytics.FirebaseAnalytics;
import com.google.firebase.crashlytics.FirebaseCrashlytics;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;
import java.io.IOException;
import java.io.StringReader;
import java.lang.reflect.Type;
import java.net.MalformedURLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import cpm.com.gskmtorange.GetterSetter.PD_CONFIGURATION;
import cpm.com.gskmtorange.autoupdate.AutoUpdateActivity;
import cpm.com.gskmtorange.constant.CommonFunctions;
import cpm.com.gskmtorange.constant.CommonString;
import cpm.com.gskmtorange.password.MPinActivity;
import cpm.com.gskmtorange.xmlGetterSetter.FailureGetterSetter;
import cpm.com.gskmtorange.xmlGetterSetter.LoginGetterSetter;
import cpm.com.gskmtorange.xmlGetterSetter.TableBean;
import cpm.com.gskmtorange.xmlHandlers.XMLHandlers;
//import io.fabric.sdk.android.Fabric;
import static android.Manifest.permission.READ_CONTACTS;
import static com.google.android.gms.location.LocationRequest.Builder.IMPLICIT_MIN_UPDATE_INTERVAL;
public class LoginActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener, LocationListener {
private static final int MY_PERMISSIONS_REQUEST_CAMERA = 10;
private static final int MY_PERMISSIONS_REQUEST_LOCATION = 11;
private static final int MY_PERMISSIONS_REQUEST_STORAGE_READ = 12;
private static final int MY_PERMISSIONS_REQUEST_STORAGE_WRITE = 14;
private FirebaseAnalytics mFirebaseAnalytics;
private static final int PERMISSION_ALL = 99;
String app_ver;
LoginGetterSetter lgs = null;
static int counter = 1;
private SharedPreferences preferences = null;
private SharedPreferences.Editor editor = null;
/**
* Id to identity READ_CONTACTS permission request.
*/
private static final int REQUEST_READ_CONTACTS = 0;
//New Location Changes
private FusedLocationProviderClient fusedLocationProviderClient;
LocationRequest locationRequest;
/**
* A dummy authentication store containing known user names and passwords.
* TODO: remove after connecting to a real authentication system.
*/
double lat = 0.0;
double lon = 0.0;
// UI references.
private AutoCompleteTextView museridView;
private EditText mPasswordView;
private View mProgressView;
private View mLoginFormView;
private String userid, password;
private int versionCode;
int eventType;
CardView museridSignInButton;
GoogleApiClient mGoogleApiClient;
private static int UPDATE_INTERVAL = 200; // 5 sec
private static int FATEST_INTERVAL = 100; // 1 sec
private static int DISPLACEMENT = 1; // 10 meters
private static final int REQUEST_LOCATION = 1;
private final static int PLAY_SERVICES_RESOLUTION_REQUEST = 1000;
private Location mLastLocation;
private LocationRequest mLocationRequest;
private Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
context = this;
TextView tv_version = (TextView) findViewById(R.id.tv_version_code);
try {
app_ver = String.valueOf(getPackageManager().getPackageInfo(getPackageName(), 0).versionName);
// login_version.setText("Parinaam Version " + app_ver);
} catch (PackageManager.NameNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
tv_version.setText("Version/Versiyon - " + app_ver);
preferences = PreferenceManager.getDefaultSharedPreferences(context);
editor = preferences.edit();
// Set up the login form.
museridView = (AutoCompleteTextView) findViewById(R.id.userid);
//populateAutoComplete();
mPasswordView = (EditText) findViewById(R.id.password);
fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);
//for lebanon
// museridView.setText("test.lebanon1");
// mPasswordView.setText("cpm@123");
// for EGYPT
// museridView.setText("test.egypt");
// mPasswordView.setText("cpm123");
/*museridView.setText("egypt.1");
mPasswordView.setText("cpm123");*/
/* museridView.setText("DSR_Alex_61");
mPasswordView.setText("cpm123");*/
/* museridView.setText("DSR_Delta_24");
mPasswordView.setText("cpm123");*/
/* museridView.setText("mini_ka_84_1");
mPasswordView.setText("cpm123");*/
//UAE
/* museridView.setText("testuae");
mPasswordView.setText("cpm123");*/
/* museridView.setText("testuae1");
mPasswordView.setText("cpm123");*/
//KSA
/* museridView.setText("Esmail.d");
mPasswordView.setText("cpm@123");*/
/* museridView.setText("testksa");
mPasswordView.setText("cpm123");*/
/* museridView.setText("Ahmed.saied");
mPasswordView.setText("cpm@123");*/
/* museridView.setText("testksa");
mPasswordView.setText("cpm123");*/
/* //turkey
museridView.setText("testmer");
mPasswordView.setText("cpm123");
*/
//sa
/* museridView.setText("testsa");
mPasswordView.setText("cpm123");*/
//Qatar
/* museridView.setText("test.qatar1");
mPasswordView.setText("cpm123");*/
//Kenya
// museridView.setText("test.Kenya");
// museridView.setText("testkenya");
// mPasswordView.setText("cpm123");
/*museridView.setText("rajesh.r");
mPasswordView.setText("cpm123");*/
/* museridView.setText("testuae1");
mPasswordView.setText("cpm123");*/
//nig
// museridView.setText("test.nig");
/* museridView.setText("test.nigeria");
mPasswordView.setText("cpm@123");*/
/* museridView.setText("test.jordan");
mPasswordView.setText("cpm@123");*/
// museridView.setText("test.kuwait");
// mPasswordView.setText("cpm@123");
// museridView.setText("test.oman");
/* museridView.setText("test.bahrain");
mPasswordView.setText("cpm@123");
*/
mPasswordView.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView textView, int id, KeyEvent keyEvent) {
if (id == R.id.login || id == EditorInfo.IME_NULL) {
attemptLogin();
return true;
}
return false;
}
});
try {
app_ver = String.valueOf(getPackageManager().getPackageInfo(getPackageName(), 0).versionName);
// tv_version.setText("Version " + app_ver);
} catch (PackageManager.NameNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
FirebaseCrashlytics.getInstance().recordException(e);
}
checkAndRequestPermissions();
mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);
FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true);
museridSignInButton = (CardView) findViewById(R.id.user_login_button);
museridSignInButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
//checkAppPermission(Manifest.permission.CAMERA, MY_PERMISSIONS_REQUEST_CAMERA);
attemptLogin();
}
});
mLoginFormView = findViewById(R.id.login_form);
mProgressView = findViewById(R.id.login_progress);
}
private void checkAndRequestPermissions() {
//int permissionwrite_storage = ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
int CAMERA = ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA);
int ACCESS_NETWORK_STATE = ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_NETWORK_STATE);
int ACCESS_COARSE_LOCATION = ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION);
int locationPermission = ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION);
//int READ_EXTERNAL_STORAGE = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE);
int READ_PHONE_STATE = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE);
List<String> listPermissionsNeeded = new ArrayList<>();
if (CAMERA != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.CAMERA);
}
if (ACCESS_NETWORK_STATE != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.ACCESS_NETWORK_STATE);
}
if (ACCESS_COARSE_LOCATION != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.ACCESS_COARSE_LOCATION);
}
if (locationPermission != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.ACCESS_FINE_LOCATION);
}
if (READ_PHONE_STATE != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.READ_PHONE_STATE);
}
if (!listPermissionsNeeded.isEmpty()) {
ActivityCompat.requestPermissions(this, listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]), PERMISSION_ALL);
}
if (checkPlayServices()) {
// Building the GoogleApi client
buildGoogleApiClient();
createLocationRequest();
}
// Create an instance of GoogleAPIClient.
if (mGoogleApiClient == null) {
mGoogleApiClient = new GoogleApiClient.Builder(context)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
Log.d("", "Permission callback called-------");
if (checkPlayServices()) {
// Building the GoogleApi client
buildGoogleApiClient();
createLocationRequest();
}
// Create an instance of GoogleAPIClient.
if (mGoogleApiClient == null) {
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
}
if (requestCode == PERMISSION_ALL) {
Map<String, Integer> perms = new HashMap<>();
// Initialize the map with both permissions
perms.put(Manifest.permission.CAMERA, PackageManager.PERMISSION_GRANTED);
perms.put(Manifest.permission.ACCESS_NETWORK_STATE, PackageManager.PERMISSION_GRANTED);
perms.put(Manifest.permission.ACCESS_COARSE_LOCATION, PackageManager.PERMISSION_GRANTED);
perms.put(Manifest.permission.ACCESS_FINE_LOCATION, PackageManager.PERMISSION_GRANTED);
perms.put(Manifest.permission.READ_PHONE_STATE, PackageManager.PERMISSION_GRANTED);
// Fill with actual results from user
if (grantResults.length > 0) {
for (int i = 0; i < permissions.length; i++)
perms.put(permissions[i], grantResults[i]);
// Check for both permissions//
if (perms.get(Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED
&& perms.get(Manifest.permission.ACCESS_NETWORK_STATE) == PackageManager.PERMISSION_GRANTED
&& perms.get(Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED
&& perms.get(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
&& perms.get(Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) {
// imeiNumbers = imei.getDeviceImei();
Log.d("", "sms & location services permission granted");
// process the normal flow
//else any one or both the permissions are not granted
} else {
Log.d("", "Some permissions are not granted ask again ");
//permission is denied (this is the first time, when "never ask again" is not checked) so ask again explaining the usage of permission
// // shouldShowRequestPermissionRationale will return true
//show the dialog or snackbar saying its necessary and try again otherwise proceed with setup.
if (
ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA) ||
ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.ACCESS_NETWORK_STATE) ||
ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.ACCESS_COARSE_LOCATION) ||
ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.ACCESS_FINE_LOCATION) ||
ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_EXTERNAL_STORAGE) ||
ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_PHONE_STATE)) {
showDialogOK("Location,Photos,media,file,manage phone calls and Camera Services Permission required for this app",
(dialog, which) -> {
switch (which) {
case DialogInterface.BUTTON_POSITIVE:
checkAndRequestPermissions();
break;
case DialogInterface.BUTTON_NEGATIVE:
// proceed with logic by disabling the related features or quit the app.
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);
break;
}
});
}
}
}
}
}
private void showDialogOK(String message, DialogInterface.OnClickListener okListener) {
new androidx.appcompat.app.AlertDialog.Builder(this).setMessage(message).setPositiveButton("OK", okListener).setNegativeButton("Cancel", okListener).create().show();
}
/**
* Attempts to sign in or register the account specified by the login form.
* If there are form errors (invalid userid, missing fields, etc.), the
* errors are presented and no actual login attempt is made.
*/
private void attemptLogin() {
// Reset errors.
museridView.setError(null);
mPasswordView.setError(null);
// Store values at the time of the login attempt.
userid = museridView.getText().toString().trim();
password = mPasswordView.getText().toString().trim();
boolean cancel = false;
View focusView = null;
// Check for a valid password, if the user entered one.
if (TextUtils.isEmpty(password)) {
mPasswordView.setError(getString(R.string.error_invalid_password));
focusView = mPasswordView;
cancel = true;
}
// Check for a valid userid address.
if (TextUtils.isEmpty(userid)) {
museridView.setError(getString(R.string.error_field_required));
focusView = museridView;
cancel = true;
} /*else if (!isuseridValid(userid)) {
museridView.setError(getString(R.string.error_invalid_userid));
focusView = museridView;
cancel = true;
}*/
if (cancel) {
// There was an error; don't attempt login and focus the first
// form field with an error.
focusView.requestFocus();
} else if (!isuseridValid(userid)) {
Snackbar.make(museridView, getString(R.string.error_incorrect_username), Snackbar.LENGTH_SHORT).show();
} else if (!isPasswordValid(password)) {
Snackbar.make(museridView, getString(R.string.error_incorrect_password), Snackbar.LENGTH_SHORT).show();
} else {
new AuthenticateTask().execute();
}
}
private boolean isuseridValid(String userid) {
//TODO: Replace this with your own logic
boolean flag = true;
String u_id = preferences.getString(CommonString.KEY_USERNAME, "");
if (!u_id.equals("") && !userid.equalsIgnoreCase(u_id)) {
flag = false;
}
return flag;
}
private boolean isPasswordValid(String password) {
//TODO: Replace this with your own logic
boolean flag = true;
String pw = preferences.getString(CommonString.KEY_PASSWORD, "");
if (!pw.equals("") && !password.equals(pw)) {
flag = false;
}
return flag;
}
/**
* Shows the progress UI and hides the login form.
*/
@TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2)
private void showProgress(final boolean show) {
// On Honeycomb MR2 we have the ViewPropertyAnimator APIs, which allow
// for very easy animations. If available, use these APIs to fade-in
// the progress spinner.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
int shortAnimTime = getResources().getInteger(android.R.integer.config_shortAnimTime);
mLoginFormView.setVisibility(show ? View.GONE : View.VISIBLE);
mLoginFormView.animate().setDuration(shortAnimTime).alpha(
show ? 0 : 1).setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
mLoginFormView.setVisibility(show ? View.GONE : View.VISIBLE);
}
});
mProgressView.setVisibility(show ? View.VISIBLE : View.GONE);
mProgressView.animate().setDuration(shortAnimTime).alpha(
show ? 1 : 0).setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
mProgressView.setVisibility(show ? View.VISIBLE : View.GONE);
}
});
} else {
// The ViewPropertyAnimator APIs are not available, so simply show
// and hide the relevant UI components.
mProgressView.setVisibility(show ? View.VISIBLE : View.GONE);
mLoginFormView.setVisibility(show ? View.GONE : View.VISIBLE);
}
}
/* @Override
public Loader<Cursor> onCreateLoader(int i, Bundle bundle) {
return new CursorLoader(this,
// Retrieve data rows for the device user's 'profile' contact.
Uri.withAppendedPath(ContactsContract.Profile.CONTENT_URI,
ContactsContract.Contacts.Data.CONTENT_DIRECTORY), ProfileQuery.PROJECTION,
// Select only userid addresses.
ContactsContract.Contacts.Data.MIMETYPE +
" = ?", new String[]{ContactsContract.CommonDataKinds.userid
.CONTENT_ITEM_TYPE},
// Show primary userid addresses first. Note that there won't be
// a primary userid address if the user hasn't specified one.
ContactsContract.Contacts.Data.IS_PRIMARY + " DESC");
}
@Override
public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor cursor) {
List<String> userids = new ArrayList<>();
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
userids.add(cursor.getString(ProfileQuery.ADDRESS));
cursor.moveToNext();
}
adduseridsToAutoComplete(userids);
}
@Override
public void onLoaderReset(Loader<Cursor> cursorLoader) {
}*/
private void adduseridsToAutoComplete(List<String> useridAddressCollection) {
//Create adapter to tell the AutoCompleteTextView what to show in its dropdown list.
ArrayAdapter<String> adapter =
new ArrayAdapter<>(LoginActivity.this,
android.R.layout.simple_dropdown_item_1line, useridAddressCollection);
museridView.setAdapter(adapter);
}
/* private interface ProfileQuery {
String[] PROJECTION = {
ContactsContract.CommonDataKinds.userid.ADDRESS,
ContactsContract.CommonDataKinds.userid.IS_PRIMARY,
};
int ADDRESS = 0;
int IS_PRIMARY = 1;
}*/
/**
* Represents an asynchronous login/registration task used to authenticate
* the user.
*/
private class AuthenticateTask extends AsyncTask<Void, Void, String> {
private ProgressDialog dialog = null;
@Override
protected void onPreExecute() {
super.onPreExecute();
dialog = new ProgressDialog(LoginActivity.this);
dialog.setTitle("Login");
dialog.setMessage("Authenticating....");
dialog.setCancelable(false);
dialog.show();
}
@Override
protected String doInBackground(Void... params) {
try {
Log.e("latitudedata", lat + "," + lon);
versionCode = getPackageManager().getPackageInfo(getPackageName(), 0).versionCode;
String userauth_xml = "[DATA]" + "[USER_DATA][USER_ID]"
+ userid + "[/USER_ID]" + "[PASSWORD]" + password
+ "[/PASSWORD]" + "[IN_TIME]" + CommonFunctions.getCurrentTimeWithLanguage(context)
+ "[/IN_TIME]" + "[LATITUDE]" + lat
+ "[/LATITUDE]" + "[LONGITUDE]" + lon
+ "[/LONGITUDE]" + "[APP_VERSION]" + app_ver
+ "[/APP_VERSION]" + "[ATT_MODE]OnLine[/ATT_MODE]"
+ "[NETWORK_STATUS]" + "LoginStatus"
+ "[/NETWORK_STATUS]" + "[/USER_DATA][/DATA]";
SoapObject request = new SoapObject(CommonString.NAMESPACE,
CommonString.METHOD_LOGIN);
request.addProperty("onXML", userauth_xml);
Log.d("loginrequest", String.valueOf(request));
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
try {
HttpTransportSE androidHttpTransport = new HttpTransportSE(
CommonString.URL);
androidHttpTransport.call(CommonString.SOAP_ACTION_LOGIN,
envelope);
} catch (Exception e) {
Log.e("httpexception", e.getMessage());
}
Object result = (Object) envelope.getResponse();
if (result.toString().equalsIgnoreCase(CommonString.KEY_FAILURE)) {
runOnUiThread(() -> showAlert(CommonString.MESSAGE_FAILURE));
} else if (result.toString().equalsIgnoreCase(
CommonString.KEY_FALSE)) {
runOnUiThread(() -> showAlert(CommonString.MESSAGE_FALSE));
} else if (result.toString().equalsIgnoreCase(
CommonString.KEY_CHANGED)) {
runOnUiThread(() -> showAlert(CommonString.MESSAGE_CHANGED));
} else {
XmlPullParserFactory factory = XmlPullParserFactory
.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp = factory.newPullParser();
xpp.setInput(new StringReader(result.toString()));
xpp.next();
eventType = xpp.getEventType();
final FailureGetterSetter failureGetterSetter = XMLHandlers
.failureXMLHandler(xpp, eventType);
if (failureGetterSetter.getStatus().equalsIgnoreCase(
CommonString.KEY_FAILURE)) {
runOnUiThread(() -> {
// TODO Auto-generated method stub
showAlert(CommonString.METHOD_LOGIN
+ failureGetterSetter.getErrorMsg());
});
} else {
// For String source
xpp.setInput(new StringReader(result.toString()));
xpp.next();
eventType = xpp.getEventType();
lgs = XMLHandlers.loginXMLHandler(xpp, eventType);
//PD_CONFIGURATION
request = new SoapObject(CommonString.NAMESPACE, CommonString.METHOD_NAME_UNIVERSAL_DOWNLOAD);
request.addProperty("UserName", userid);
request.addProperty("Type", "PD_CONFIGURATION");
request.addProperty("cultureid", "1");
envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(CommonString.URL);
androidHttpTransport.call(CommonString.SOAP_ACTION_UNIVERSAL, envelope);
result = envelope.getResponse();
xpp.setInput(new StringReader(result.toString()));
xpp.next();
eventType = xpp.getEventType();
PD_CONFIGURATION pdConfiguration = XMLHandlers.PDConfigXMLHandler(xpp);
Log.e("PD_CONFIGURATION_RESULT", result.toString());
// PUT IN PREFERENCES
if (pdConfiguration.getPROJECT_ID() != null && !pdConfiguration.getPROJECT_ID().isEmpty()) {
editor.putString(CommonString.KEY_PD_PROJECT_Id, pdConfiguration.getPROJECT_ID().get(0));
editor.putString(CommonString.KEY_PD_USER_Id, pdConfiguration.getUSER_ID().get(0));
} else {
return CommonString.KEY_FAILURE;
}
editor.putString(CommonString.KEY_USERNAME, userid);
editor.putString(CommonString.KEY_PASSWORD, password);
editor.putString(CommonString.KEY_VERSION, lgs.getAPP_VERSION());
editor.putString(CommonString.KEY_PATH, lgs.getAPP_PATH());
editor.putString(CommonString.KEY_DATE, lgs.getCURRENTDATE());
editor.putString(CommonString.KEY_COUNTRY_ID, lgs.getCOUNTRY_ID());
Log.e("countryid", lgs.getCOUNTRY_ID());
editor.commit();
setDataFromSharedPreferences(lgs);
Bundle bundle = new Bundle();
bundle.putString(FirebaseAnalytics.Param.ITEM_ID, userid);
bundle.putString(FirebaseAnalytics.Param.ITEM_NAME, CommonString.KEY_LOGIN_DATA);
bundle.putString(FirebaseAnalytics.Param.CONTENT_TYPE, "Data");
bundle.putString(CommonString.KEY_LANGUAGE, preferences.getString(CommonString.KEY_LANGUAGE, ""));
mFirebaseAnalytics.logEvent(FirebaseAnalytics.Event.SELECT_CONTENT, bundle);
FirebaseCrashlytics.getInstance().setUserId(userid.toLowerCase());
return CommonString.KEY_SUCCESS;
}
}
return "";
} catch (MalformedURLException e) {
FirebaseCrashlytics.getInstance().recordException(e);
runOnUiThread(new Runnable() {
@Override
public void run() {
showAlert(CommonString.MESSAGE_EXCEPTION);
}
});
} catch (IOException e) {
FirebaseCrashlytics.getInstance().recordException(e);
counter++;
runOnUiThread(() -> {
// TODO Auto-generated method stub
if (counter < 3) {
new AuthenticateTask().execute();
} else {
showAlert(getString(R.string.nonetwork));
counter = 1;
}
});
} catch (Exception e) {
FirebaseCrashlytics.getInstance().recordException(e);
runOnUiThread(() -> showAlert(CommonString.MESSAGE_EXCEPTION));
}
return "";
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
if (result.equalsIgnoreCase(CommonString.KEY_SUCCESS)) {
// manually set true for South Africa
boolean forSA = false;
if (forSA) {
//For SA Only
if (preferences.getString(CommonString.KEY_LANGUAGE, "").equals("")) {
Intent intent = new Intent(getBaseContext(), SelectLanguageActivity.class);
intent.putExtra(CommonString.KEY_LOGIN_DATA, lgs);
startActivity(intent);
finish();
} else {
setLanguageDataFromSharedPreferences();
CommonFunctions.updateLangResources(context, preferences.getString(CommonString.KEY_LANGUAGE, ""));
Intent in = new Intent(context, MPinActivity.class);
in.putExtra(CommonString.IS_PASSWORD_CHECK, false);
startActivity(in);
finish();
//uploadPreviousImages();
}
} else {
//for other than SA
if (preferences.getString(CommonString.KEY_VERSION, "").equals(Integer.toString(versionCode))) {
if (preferences.getString(CommonString.KEY_LANGUAGE, "").equals("")) {
Intent intent = new Intent(getBaseContext(), SelectLanguageActivity.class);
intent.putExtra(CommonString.KEY_LOGIN_DATA, lgs);
startActivity(intent);
finish();
} else {
setLanguageDataFromSharedPreferences();
Intent in = new Intent(context, MPinActivity.class);
in.putExtra(CommonString.IS_PASSWORD_CHECK, false);
startActivity(in);
finish();
//uploadPreviousImages();
}
} else {
Intent intent = new Intent(getBaseContext(), AutoUpdateActivity.class);
intent.putExtra(CommonString.KEY_PATH, preferences.getString(CommonString.KEY_PATH, ""));
startActivity(intent);
finish();
}
}
}
dialog.dismiss();
}
}
public void showAlert(String str) {
AlertDialog.Builder builder = new AlertDialog.Builder(LoginActivity.this);
builder.setTitle("Parinaam");
builder.setMessage(str).setCancelable(false)
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
/* Intent i = new Intent(activity, StorelistActivity.class);
activity.startActivity(i);
activity.finish();*/
}
});
AlertDialog alert = builder.create();
alert.show();
}
private static String arabicToenglish(String number) {
char[] chars = new char[number.length()];
for (int i = 0; i < number.length(); i++) {
char ch = number.charAt(i);
if (ch >= 0x0660 && ch <= 0x0669)
ch -= 0x0660 - '0';
else if (ch >= 0x06f0 && ch <= 0x06F9)
ch -= 0x06f0 - '0';
chars[i] = ch;
}
return new String(chars);
}
public String getCurrentTimeNotUsed() {
Calendar m_cal = Calendar.getInstance();
SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");
String cdate = formatter.format(m_cal.getTime());
if (preferences.getString(CommonString.KEY_LANGUAGE, "").equalsIgnoreCase(CommonString.KEY_LANGUAGE_ARABIC_KSA)) {
cdate = arabicToenglish(cdate);
} else if (preferences.getString(CommonString.KEY_LANGUAGE, "").equalsIgnoreCase(CommonString.KEY_LANGUAGE_ARABIC_UAE)) {
cdate = arabicToenglish(cdate);
} else if (preferences.getString(CommonString.KEY_LANGUAGE, "").equalsIgnoreCase(CommonString.KEY_LANGUAGE_ARABIC_JORDAN)) {
cdate = arabicToenglish(cdate);
} else if (preferences.getString(CommonString.KEY_LANGUAGE, "").equalsIgnoreCase(CommonString.KEY_LANGUAGE_ARABIC_KUWAIT)) {
cdate = arabicToenglish(cdate);
} else if (preferences.getString(CommonString.KEY_LANGUAGE, "").equalsIgnoreCase(CommonString.KEY_LANGUAGE_ARABIC_BAHRAIN)) {
cdate = arabicToenglish(cdate);
} else if (preferences.getString(CommonString.KEY_LANGUAGE, "").equalsIgnoreCase(CommonString.KEY_LANGUAGE_ARABIC_OMAN)) {
cdate = arabicToenglish(cdate);
} else if (preferences.getString(CommonString.KEY_LANGUAGE, "").equalsIgnoreCase(CommonString.KEY_LANGUAGE_ARABIC_QATAR)) {
cdate = arabicToenglish(cdate);
} else if (preferences.getString(CommonString.KEY_LANGUAGE, "").equalsIgnoreCase(CommonString.KEY_LANGUAGE_ARABIC_LEBANON)) {
cdate = arabicToenglish(cdate);
} else if (preferences.getString(CommonString.KEY_LANGUAGE, "").equalsIgnoreCase(CommonString.KEY_LANGUAGE_ARABIC_LIBIYA)) {
cdate = arabicToenglish(cdate);
}
return cdate;
}
private void setDataFromSharedPreferences(LoginGetterSetter lgs) {
Gson gson = new Gson();
String jsonCurProduct = gson.toJson(lgs);
SharedPreferences.Editor editor = preferences.edit();
editor.putString(CommonString.KEY_LOOGIN_PREF, jsonCurProduct);
editor.commit();
}
void checkAppPermission(String permission, int requestCode) {
boolean permission_flag = false;
// Here, thisActivity is the current activity
if (ContextCompat.checkSelfPermission(LoginActivity.this,
permission)
!= PackageManager.PERMISSION_GRANTED) {
// Permission is not granted
// Should we show an explanation?
if (ActivityCompat.shouldShowRequestPermissionRationale(LoginActivity.this,
permission)) {
// Show an explanation to the user *asynchronously* -- don't block
// this thread waiting for the user's response! After the user
// sees the explanation, try again to request the permission.
showOnPermissiondenied(Manifest.permission.CAMERA, MY_PERMISSIONS_REQUEST_CAMERA, 1);
} else {
// No explanation needed; request the permission
ActivityCompat.requestPermissions(LoginActivity.this,
new String[]{permission},
requestCode);
// MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
// app-defined int constant. The callback method gets the
// result of the request.
}
} else {
// Permission has already been granted
if (requestCode == MY_PERMISSIONS_REQUEST_CAMERA) {
checkAppPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE, MY_PERMISSIONS_REQUEST_STORAGE_WRITE);
} else if (requestCode == MY_PERMISSIONS_REQUEST_STORAGE_WRITE) {
checkAppPermission(Manifest.permission.READ_EXTERNAL_STORAGE, MY_PERMISSIONS_REQUEST_STORAGE_READ);
} else if (requestCode == MY_PERMISSIONS_REQUEST_STORAGE_READ) {
checkAppPermission(Manifest.permission.ACCESS_FINE_LOCATION, MY_PERMISSIONS_REQUEST_LOCATION);
} else {
if (checkPlayServices()) {
// Building the GoogleApi client
buildGoogleApiClient();
createLocationRequest();
}
// Create an instance of GoogleAPIClient.
if (mGoogleApiClient == null) {
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
}
attemptLogin();
}
}
}
void showOnPermissiondenied(final String permissionsRequired, final int request_code, final int check) {
AlertDialog.Builder builder = new AlertDialog.Builder(LoginActivity.this);
builder.setTitle("Need Multiple Permissions");
builder.setMessage("This app needs Camera, Storage and Location permissions.");
builder.setPositiveButton("Grant", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
if (check == 0) {
checkAppPermission(permissionsRequired, request_code);
} else {
ActivityCompat.requestPermissions(LoginActivity.this,
new String[]{permissionsRequired},
request_code);
}
}
});
/* builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
finish();
}
});*/
builder.show();
}
@Override
protected void onResume() {
super.onResume();
if (mGoogleApiClient != null) {
mGoogleApiClient.connect();
}
checkgpsEnableDevice();
locationRequest = new LocationRequest.Builder(Priority.PRIORITY_HIGH_ACCURACY, 100000)
.setWaitForAccurateLocation(false)
.setMinUpdateIntervalMillis(IMPLICIT_MIN_UPDATE_INTERVAL)
.setMaxUpdateDelayMillis(1000)
.build();
LocationCallback locationCallback = new LocationCallback() {
@Override
public void onLocationResult(LocationResult locationResult) {
if (locationResult != null) {
if (locationResult == null) {
return;
}
//Showing the latitude, longitude and accuracy on the home screen.
for (Location location : locationResult.getLocations()) {
lat = location.getLatitude();
lon = location.getLongitude();
// Log.e("latitude_inside",location.getLatitude() + "," +location.getLongitude());
}
}
}
};
if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
&& ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(LoginActivity.this, new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION}, 1);
ActivityCompat.requestPermissions(LoginActivity.this, new String[]{android.Manifest.permission.ACCESS_COARSE_LOCATION}, 2);
}
fusedLocationProviderClient.requestLocationUpdates(locationRequest, locationCallback, Looper.getMainLooper());
}
/*@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
checkAppPermission(Manifest.permission.CAMERA, MY_PERMISSIONS_REQUEST_CAMERA);
if (checkPlayServices()) {
// Building the GoogleApi client
buildGoogleApiClient();
createLocationRequest();
}
// Create an instance of GoogleAPIClient.
if (mGoogleApiClient == null) {
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
}
}
*/
private boolean checkPlayServices() {
int resultCode = GooglePlayServicesUtil
.isGooglePlayServicesAvailable(this);
if (resultCode != ConnectionResult.SUCCESS) {
if (GooglePlayServicesUtil.isUserRecoverableError(resultCode)) {
GooglePlayServicesUtil.getErrorDialog(resultCode, this,
PLAY_SERVICES_RESOLUTION_REQUEST).show();
} else {
Toast.makeText(context, getResources().getString(R.string.notsuppoted), Toast.LENGTH_LONG)
.show();
finish();
}
return false;
}
return true;
}
protected synchronized void buildGoogleApiClient() {
if (mGoogleApiClient == null) {
mGoogleApiClient = new GoogleApiClient.Builder(context)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
}
}
protected void createLocationRequest() {
mLocationRequest = new LocationRequest();
mLocationRequest.setInterval(UPDATE_INTERVAL);
mLocationRequest.setFastestInterval(FATEST_INTERVAL);
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
mLocationRequest.setSmallestDisplacement(DISPLACEMENT);
}
@Override
public void onConnectionSuspended(int i) {
mGoogleApiClient.connect();
}
@Override
public void onLocationChanged(Location location) {
LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
// Toast.makeText(this, " WORKS_lat_lon " + latLng, Toast.LENGTH_LONG).show();
// updateLocation(latLng);
if (mGoogleApiClient != null) {
LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this);
}
}
protected void startLocationUpdates() {
if (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
|| ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
if (mGoogleApiClient != null) {
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);
// Toast.makeText(getApplicationContext(), "startLocation - Lat" + lat + "Long" + lon, Toast.LENGTH_LONG).show();
}
}
}
public static int distFrom(double lat1, double lng1, double lat2, double lng2) {
double earthRadius = 6371000; //meters
double dLat = Math.toRadians(lat2 - lat1);
double dLng = Math.toRadians(lng2 - lng1);
double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) *
Math.sin(dLng / 2) * Math.sin(dLng / 2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
int dist = (int) (earthRadius * c);
return dist;
}
@Override
public void onConnected(Bundle bundle) {
Log.e("onConnectdata", "true" + "," + mGoogleApiClient);
/*if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return;
}
mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
if (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
|| ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
if (mLastLocation != null) {
lat = mLastLocation.getLatitude();
lon = mLastLocation.getLongitude();
// Toast.makeText(getApplicationContext(), "onconnected lat-" + lat + " Long-" + lon, Toast.LENGTH_SHORT).show();
}
startLocationUpdates();
}*/
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
if (mGoogleApiClient != null) {
mGoogleApiClient.connect();
}
}
protected void onStart() {
super.onStart();
if (mGoogleApiClient != null) {
mGoogleApiClient.connect();
}
}
private boolean checkgpsEnableDevice() {
boolean flag = true;
if (!hasGPSDevice(context)) {
Toast.makeText(context, "Gps not Supported", Toast.LENGTH_SHORT).show();
}
final LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER) && hasGPSDevice(context)) {
enableLoc();
flag = false;
} else if (manager.isProviderEnabled(LocationManager.GPS_PROVIDER) && hasGPSDevice(context)) {
flag = true;
}
return flag;
}
private boolean hasGPSDevice(Context context) {
final LocationManager mgr = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
if (mgr == null)
return false;
final List<String> providers = mgr.getAllProviders();
if (providers == null)
return false;
return providers.contains(LocationManager.GPS_PROVIDER);
}
private void enableLoc() {
LocationRequest locationRequest = LocationRequest.create();
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
locationRequest.setInterval(30 * 1000);
locationRequest.setFastestInterval(5 * 1000);
LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder().addLocationRequest(locationRequest);
builder.setAlwaysShow(true);
if (mGoogleApiClient != null) {
PendingResult<LocationSettingsResult> result = LocationServices.SettingsApi.checkLocationSettings(mGoogleApiClient, builder.build());
result.setResultCallback(new ResultCallback<LocationSettingsResult>() {
@Override
public void onResult(LocationSettingsResult result) {
final Status status = result.getStatus();
switch (status.getStatusCode()) {
case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
try {
// Show the dialog by calling startResolutionForResult(),
// and check the result in onActivityResult().
status.startResolutionForResult((Activity) context, REQUEST_LOCATION);
} catch (IntentSender.SendIntentException e) {
// Ignore the error.
}
break;
}
}
});
}
}
ArrayList<String> language, culture_id, notice_url;
LoginGetterSetter login_data;
private void setLanguageDataFromSharedPreferences() {
Gson gson = new Gson();
login_data = new LoginGetterSetter();
String jsonPreferences = preferences.getString(CommonString.KEY_LOOGIN_PREF, "");
Type type = new TypeToken<LoginGetterSetter>() {
}.getType();
login_data = gson.fromJson(jsonPreferences, type);
language = login_data.getCULTURE_NAME();
culture_id = login_data.getCULTURE_ID();
notice_url = login_data.getNOTICE_URL();
String lang = preferences.getString(CommonString.KEY_LANGUAGE, "");
if (language.size() > 0) {
for (int i = 0; i < language.size(); i++) {
if (lang.equals(language.get(i))) {
editor.putString(CommonString.KEY_LANGUAGE, language.get(i));
editor.putString(CommonString.KEY_CULTURE_ID, culture_id.get(i));
editor.putString(CommonString.KEY_NOTICE_BOARD_LINK, notice_url.get(i));
editor.commit();
break;
}
}
}
//return ;
}
}