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 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 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 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 cursorLoader, Cursor cursor) { List userids = new ArrayList<>(); cursor.moveToFirst(); while (!cursor.isAfterLast()) { userids.add(cursor.getString(ProfileQuery.ADDRESS)); cursor.moveToNext(); } adduseridsToAutoComplete(userids); } @Override public void onLoaderReset(Loader cursorLoader) { }*/ private void adduseridsToAutoComplete(List useridAddressCollection) { //Create adapter to tell the AutoCompleteTextView what to show in its dropdown list. ArrayAdapter 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 { 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 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 result = LocationServices.SettingsApi.checkLocationSettings(mGoogleApiClient, builder.build()); result.setResultCallback(new ResultCallback() { @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 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() { }.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 ; } }