diff --git a/examples/example_bestshot/example/.idea/assetWizardSettings.xml b/examples/example_bestshot/example/.idea/assetWizardSettings.xml index 8934cf4..5d79692 100644 --- a/examples/example_bestshot/example/.idea/assetWizardSettings.xml +++ b/examples/example_bestshot/example/.idea/assetWizardSettings.xml @@ -18,7 +18,7 @@ @@ -28,8 +28,8 @@ diff --git a/examples/example_bestshot/example/app/build.gradle b/examples/example_bestshot/example/app/build.gradle index a55d981..32c7f6c 100644 --- a/examples/example_bestshot/example/app/build.gradle +++ b/examples/example_bestshot/example/app/build.gradle @@ -172,7 +172,7 @@ dependencies { implementation 'com.trello:rxlifecycle-components:1.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'com.google.android.material:material:1.0.0' - + implementation 'com.google.android.gms:play-services-location:18.0.0' @@ -181,6 +181,10 @@ dependencies { implementation 'io.github.inflationx:calligraphy3:3.1.1' implementation 'io.github.inflationx:viewpump:2.0.3' + implementation 'com.android.volley:volley:1.2.1' + implementation 'com.github.f0ris.sweetalert:library:1.6.2' + /*implementation 'com.github.f0ris.sweetalert:library:1.5.1'*/ + // implementation('com.crashlytics.sdk.android:crashlytics:2.6.5@aar') { // transitive = true; // } diff --git a/examples/example_bestshot/example/app/src/main/AndroidManifest.xml b/examples/example_bestshot/example/app/src/main/AndroidManifest.xml index e7805d4..98fb172 100644 --- a/examples/example_bestshot/example/app/src/main/AndroidManifest.xml +++ b/examples/example_bestshot/example/app/src/main/AndroidManifest.xml @@ -11,6 +11,8 @@ + + @@ -19,10 +21,35 @@ + android:theme="@style/AppTheme" + android:usesCleartextTraffic="true"> + + + + + + + + diff --git a/examples/example_bestshot/example/app/src/main/java/ru/visionlab/constant/Url.java b/examples/example_bestshot/example/app/src/main/java/ru/visionlab/constant/Url.java index dfd7439..ed2c978 100644 --- a/examples/example_bestshot/example/app/src/main/java/ru/visionlab/constant/Url.java +++ b/examples/example_bestshot/example/app/src/main/java/ru/visionlab/constant/Url.java @@ -2,5 +2,5 @@ package ru.visionlab.constant; public class Url { - public static final String Base_url= "https://reqres.in/api/"; + public static final String Base_url= "http://huaiglobal.com/api/"; } diff --git a/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/App.java b/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/App.java index 7153f4f..6dfd6b6 100644 --- a/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/App.java +++ b/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/App.java @@ -2,7 +2,6 @@ package ru.visionlab.femdemo; import android.app.Application; import android.os.StrictMode; -import android.widget.Toast; //import com.crashlytics.android.Crashlytics; @@ -90,5 +89,7 @@ public class App extends Application { void inject(AuthSuccessActivity activity); void inject(ServerSettingsActivity activity); + + void inject(RegisterFromCheckActivity registerFromCheckActivity); } } diff --git a/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/ApprovalListActivity.java b/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/ApprovalListActivity.java new file mode 100644 index 0000000..cb552e6 --- /dev/null +++ b/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/ApprovalListActivity.java @@ -0,0 +1,119 @@ +package ru.visionlab.femdemo; + +import androidx.appcompat.app.AppCompatActivity; + +import android.app.ProgressDialog; +import android.os.Bundle; +import android.view.View; +import android.widget.ImageButton; +import android.widget.TextView; +import android.widget.Toast; + +import com.android.volley.Request; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.StringRequest; +import com.android.volley.toolbox.Volley; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +public class ApprovalListActivity extends AppCompatActivity { + + ImageButton back; + TextView RequestIDVal,EmployeeIDVal,EmployeeNameVal,LDateVal,LTimeOutVal,LTimeInVal,NoOfHrsVal,LeaveTypeVal,ApproverIDVal,ApproverNameVal,ReasonVal; + + String RequestID,EmployeeID,EmployeeName,LDate,LTimeOut,LTimeIn,NoOfHrs,LeaveType,ApproverID,ApproverName,Reason; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_approval_list); + + back = findViewById(R.id.back); + back.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + + onBackPressed(); + + } + }); + + PermissionApprovalList(); + + RequestIDVal = findViewById(R.id.RequestIDVal); + EmployeeIDVal = findViewById(R.id.EmployeeIDVal); + EmployeeNameVal = findViewById(R.id.EmployeeNameVal); + LDateVal = findViewById(R.id.LDateVal); + LTimeOutVal = findViewById(R.id.LTimeOutVal); + LTimeInVal = findViewById(R.id.LTimeInVal); + NoOfHrsVal = findViewById(R.id.NoOfHrsVal); + LeaveTypeVal = findViewById(R.id.LeaveTypeVal); + ApproverIDVal = findViewById(R.id.ApproverIDVal); + ApproverNameVal = findViewById(R.id.ApproverNameVal); + ReasonVal = findViewById(R.id.ReasonVal); + + + + } + + public void PermissionApprovalList(){ + final ProgressDialog loading = ProgressDialog.show(ApprovalListActivity.this, "Fetching information", "Please wait ", false, false); + + String url= "http://43.242.212.92:7001/api/lgt/PermissionApprovallist?ApproverID=27256"; + StringRequest stringRequest=new StringRequest(Request.Method.GET, url, new com.android.volley.Response.Listener() { + @Override + public void onResponse(String response) { + + try { + JSONArray jsonArray=new JSONArray(response); + JSONObject jb1=jsonArray.getJSONObject(0); + RequestID = jb1.getString("RequestID"); + EmployeeID = jb1.getString("EmployeeID"); + EmployeeName = jb1.getString("EmployeeName"); + LDate = jb1.getString("LDate"); + LTimeOut = jb1.getString("LTimeOut"); + LTimeIn = jb1.getString("LTimeIn"); + NoOfHrs = jb1.getString("NoOfHrs"); + LeaveType = jb1.getString("LeaveType"); + ApproverID = jb1.getString("ApproverID"); + ApproverName = jb1.getString("ApproverName"); + Reason = jb1.getString("Reason"); + + RequestIDVal.setText(RequestID); + EmployeeIDVal.setText(EmployeeID); + EmployeeNameVal.setText(EmployeeName); + LDateVal.setText(LDate); + LTimeOutVal.setText(LTimeOut); + LTimeInVal.setText(LTimeIn); + NoOfHrsVal.setText(NoOfHrs); + LeaveTypeVal.setText(LeaveType); + ApproverIDVal.setText(ApproverID); + ApproverNameVal.setText(ApproverName); + ReasonVal.setText(Reason); + + + } catch (JSONException e) { + throw new RuntimeException(e); + } + loading.dismiss(); + } + + }, new com.android.volley.Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { +// Log.d("error-=>",error.getMessage()); + Toast.makeText(ApprovalListActivity.this, "Failed to get response = " + error.getMessage(), Toast.LENGTH_SHORT).show(); + loading.dismiss(); + System.out.println("Error message: "+ error.getMessage()); + + + } + }) + { + + }; + Volley.newRequestQueue(ApprovalListActivity.this).add(stringRequest); + } +} \ No newline at end of file diff --git a/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/CheckInActivity.java b/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/CheckInActivity.java index 83286ec..feaf1b7 100644 --- a/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/CheckInActivity.java +++ b/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/CheckInActivity.java @@ -1,26 +1,57 @@ package ru.visionlab.femdemo; +import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.LinearLayoutCompat; +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; import android.app.AlertDialog; +import android.app.ProgressDialog; +import android.content.Context; import android.content.DialogInterface; import android.content.Intent; +import android.content.SharedPreferences; +import android.content.pm.PackageManager; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; +import android.location.Location; import android.os.Bundle; +import android.util.Log; import android.view.Gravity; import android.view.LayoutInflater; -import android.view.MenuItem; import android.view.View; import android.view.WindowManager; -import android.widget.Button; import android.widget.ImageView; -import android.widget.PopupMenu; +import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; +import com.android.volley.Request; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.StringRequest; +import com.android.volley.toolbox.Volley; +import com.google.android.gms.location.FusedLocationProviderClient; +import com.google.android.gms.tasks.OnSuccessListener; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + + +import javax.inject.Inject; + +import cn.pedant.SweetAlert.SweetAlertDialog; +import ru.visionlab.femdemo.authentication.AuthSuccessActivity; import ru.visionlab.femdemo.login.LoginActivity; -import ru.visionlab.femdemo.register.RegisterActivityNew; +import ru.visionlab.femdemo.login.LoginActivityNew; +import ru.visionlab.femdemo.register.RegisterActivity; +import ru.visionlab.femdemo.settings.VLPreferences; public class CheckInActivity extends AppCompatActivity { @@ -28,19 +59,108 @@ public class CheckInActivity extends AppCompatActivity { ImageView menu; AlertDialog dialogBuilder; + TextView btnCheckIn,btnCheckOut; + + private static final int LOCATION_PERMISSION_REQUEST_CODE = 1; + private FusedLocationProviderClient fusedLocationClient; + + String targetLat1="",targetlat2="",targetLon1="",targetLon2=""; + + SharedPreferences sharedPreferences; + + private Context mContext; + + boolean FromRegister=true,FromRegisterCheck,backToCheck; + + private static boolean RUN_ONCE = true; + boolean checkInprssd = false; + + String valueFromApiCheckIn,valueFromApiCheckInFromReg,valueEmer; + + LinearLayoutCompat checkSuccess; + + TextView txtSuccess; + + @Inject + VLPreferences preferences; + + String login="", currentDateAndTime; + + RelativeLayout rel3; + + boolean _approverstatus; + + + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_checkin); + + + checkSuccess = findViewById(R.id.checkSuccess); + txtSuccess = findViewById(R.id.txtSuccess); + + + + Intent intent = getIntent(); + FromRegister = intent.getBooleanExtra("FromRegister",false); + FromRegisterCheck = intent.getBooleanExtra("FromRegisterCheck",false); + backToCheck = intent.getBooleanExtra("backToCheck",false); + valueFromApiCheckInFromReg = intent.getStringExtra("valueFromApiCheckIn"); + System.out.println("Value of FromRegisterCheck "+FromRegisterCheck + FromRegister + " "+backToCheck + " " + valueFromApiCheckInFromReg); + + login = intent.getStringExtra("UserName"); + System.out.println("Value of loginUserName "+login); + /*if(login == null){ + login = ""; + } + else{ + login = "User"; + + }*/ + leaveApprover(); + + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss "); + + // on below line we are creating a variable + // for current date and time and calling a simple date format in it. + currentDateAndTime = sdf.format(new Date()); + + System.out.println("Current date and time " + currentDateAndTime); + + SharedPreferences shared = getSharedPreferences("MyPrefs", MODE_PRIVATE); + String loginFromShare = shared.getString("login", ""); + String Descriptor = shared.getString("Descriptor", ""); + + + + + + + + + + + sharedPreferences= this.getSharedPreferences("MyPrefs", MODE_PRIVATE); + String userId = sharedPreferences.getString("id", ""); + + + + System.out.println("Value of userId: "+ userId); + logout = findViewById(R.id.logout); logout.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - Intent intent = new Intent(CheckInActivity.this, LoginActivity.class); + + + Intent intent = new Intent(CheckInActivity.this, LoginActivityNew.class); startActivity(intent); + finish(); } }); @@ -49,36 +169,95 @@ public class CheckInActivity extends AppCompatActivity { @Override public void onClick(View view) { LayoutInflater inflater = LayoutInflater.from(getApplicationContext()); - view = inflater.inflate(R.layout.layout, null); + view = inflater.inflate(R.layout.layout, null); TextView popup_log_out = view.findViewById(R.id.popup_log_out); + login = ""; + + + rel3 = view.findViewById(R.id.rel3); + if(!_approverstatus){ + rel3.setVisibility(View.GONE); + } + + + popup_log_out.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - Intent intent = new Intent(CheckInActivity.this, LoginActivity.class); + Intent intent = new Intent(CheckInActivity.this, LoginActivityNew.class); + startActivity(intent); + finish(); + } + }); + System.out.println("Value of username "+ login); + if(login==""){ + + login = "User"; + + } + else{ + System.out.println("Value of username in else "+ login); + login = intent.getStringExtra("UserName"); + } + + + + + + TextView username = view.findViewById(R.id.username); + username.setText(loginFromShare); + + TextView request = view.findViewById(R.id.request); + + TextView permissionApproval = view.findViewById(R.id.permissionApproval); + permissionApproval.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Intent intent = new Intent(CheckInActivity.this, ApprovalListActivity.class); startActivity(intent); } }); + request.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Intent intent = new Intent(CheckInActivity.this, PermissionRequestActivity.class); + startActivity(intent); + //leaveApprover(); + } + }); + TextView report = view.findViewById(R.id.report); + report.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + + - /*Button btn_confirm = view.findViewById(R.id.btn_confirm); - Button btn_cancel = view.findViewById(R.id.btn_cancel); - TextView txt_title = view.findViewById(R.id.txt_title); - TextView txt_content = view.findViewById(R.id.txt_content); + Intent intent = new Intent(CheckInActivity.this, ReportActivity.class); + startActivity(intent); + //getReport(); + //checkIn(); + } + }); + + TextView emergency = view.findViewById(R.id.emergency); + emergency.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + emergencySos(); + } + }); - btn_cancel.setVisibility(View.GONE); - btn_confirm.setText("OK"); - txt_title.setText("WARNING"); - txt_content.setText("This job is not active. Please synchronize to get the latest data, then contact your coordinator if needed.");*/ final AlertDialog alertDialog = new AlertDialog.Builder(CheckInActivity.this) .setView(view) .create(); alertDialog.show(); - alertDialog.getWindow().setLayout(600,460); - alertDialog.getWindow().setGravity(Gravity.TOP|Gravity.LEFT); + // alertDialog.getWindow().setLayout(780, ); + alertDialog.getWindow().setGravity(Gravity.TOP | Gravity.LEFT); alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); @@ -87,60 +266,635 @@ public class CheckInActivity extends AppCompatActivity { params.horizontalMargin = -100; alertDialog.getWindow().setAttributes(params); - /*btn_confirm.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - alertDialog.cancel(); - } - }); - btn_cancel.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - alertDialog.cancel(); - } - });*/ } }); - /*menu.setOnClickListener(new View.OnClickListener() { + + btnCheckIn = findViewById(R.id.btnCheckIn); + btnCheckIn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { + System.out.println("Clicked check in button"); + checkInprssd = true; + System.out.println(checkInprssd); + //requestLocationUpdates(); + if (ContextCompat.checkSelfPermission(CheckInActivity.this, android.Manifest.permission.ACCESS_FINE_LOCATION) + == PackageManager.PERMISSION_GRANTED) { + // Permission granted, so request location updates + //requestLocationUpdates(); + targetLocationListFromCheckIn(); - // instance of alert dialog to build alert dialog - AlertDialog.Builder builder = new AlertDialog.Builder(CheckInActivity.this); - builder.setIcon(R.drawable.andrew); - builder.setTitle("Andrew Bahl"); - // builder.setMessage("Bottom Alert dialog"); + } else { + // Permission not granted, request it + ActivityCompat.requestPermissions(CheckInActivity.this, + new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION}, + LOCATION_PERMISSION_REQUEST_CODE); + } + } + }); + btnCheckOut = findViewById(R.id.btnCheckOut); + btnCheckOut.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + System.out.println("Clicked check in button"); - // set the neutral button to do some actions - builder.setNeutralButton("Logout", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - Intent intent = new Intent(CheckInActivity.this, LoginActivity.class); - startActivity(intent); + //requestLocationUpdates(); + if (ContextCompat.checkSelfPermission(CheckInActivity.this, android.Manifest.permission.ACCESS_FINE_LOCATION) + == PackageManager.PERMISSION_GRANTED) { + // Permission granted, so request location updates + // requestLocationUpdates(); + targetLocationListFromCheckOut(); + + } else { + // Permission not granted, request it + ActivityCompat.requestPermissions(CheckInActivity.this, + new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION}, + LOCATION_PERMISSION_REQUEST_CODE); + } + } + }); + + SharedPreferences sharedPreferences = getSharedPreferences("MyPrefs", Context.MODE_PRIVATE); + SharedPreferences.Editor editor = sharedPreferences.edit(); + editor.putBoolean("loggedBefore",true); + editor.apply(); + + runOnce(); + + } + + private void runOnce() { + if (RUN_ONCE) { + RUN_ONCE = false; + FromRegister = true; + + // do something + } + else { + + new SweetAlertDialog(CheckInActivity.this, SweetAlertDialog.SUCCESS_TYPE) + .setTitleText(valueFromApiCheckIn) + .setConfirmText("OK") + .setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() { + @Override + public void onClick(SweetAlertDialog sDialog) { + sDialog.dismissWithAnimation(); + + } + }) + .setContentText(valueFromApiCheckInFromReg).show(); + + /*if(FromRegister){ + new SweetAlertDialog(CheckInActivity.this, SweetAlertDialog.SUCCESS_TYPE) + .setTitleText("You have checked in successfully") + .setConfirmText("Thanks you.") + .setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() { + @Override + public void onClick(SweetAlertDialog sDialog) { + sDialog.dismissWithAnimation(); + + } + }) + .setContentText("Have a productive day").show(); + } + else{ + new SweetAlertDialog(CheckInActivity.this, SweetAlertDialog.SUCCESS_TYPE) + .setTitleText("You have checked out successfully") + .setConfirmText("Thanks you.") + .setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() { + @Override + public void onClick(SweetAlertDialog sDialog) { + sDialog.dismissWithAnimation(); + + } + }) + .setContentText("").show(); + }*/ + + /*if(!backToCheck) { + if(checkInprssd){ + new SweetAlertDialog(CheckInActivity.this, SweetAlertDialog.SUCCESS_TYPE) + .setTitleText("You have checked in successfully") + .setConfirmText("Thanks you.") + .setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() { + @Override + public void onClick(SweetAlertDialog sDialog) { + sDialog.dismissWithAnimation(); + + } + }) + .setContentText("Have a productive day").show(); } - }); - // show the alert dialog - AlertDialog alertDialog = builder.create(); - alertDialog.show(); - alertDialog.getWindow().setLayout(800,400); - alertDialog.getWindow().setGravity(Gravity.TOP); - *//*PopupMenu popupMenu = new PopupMenu(CheckInActivity.this, menu); - popupMenu.getMenuInflater().inflate(R.menu.navigation_menu, popupMenu.getMenu()); - popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { + + }*/ + } + } + + private void requestLocationUpdates() { + 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) { + // 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; + } + fusedLocationClient = new FusedLocationProviderClient(getApplicationContext()); + fusedLocationClient.getLastLocation() + .addOnSuccessListener(this, new OnSuccessListener() { @Override - public boolean onMenuItemClick(MenuItem menuItem) { - // Toast message on menu item clicked - Toast.makeText(CheckInActivity.this, "You Clicked " + menuItem.getTitle(), Toast.LENGTH_SHORT).show(); - return true; + public void onSuccess(Location location) { + if (location != null) { + double latitude = location.getLatitude(); + double longitude = location.getLongitude(); + + // Do something with the latitude and longitude + String message = "Latitude: " + latitude + "\nLongitude: " + longitude; + System.out.println("My current location: "+ message); + Toast.makeText(CheckInActivity.this, message, Toast.LENGTH_SHORT).show(); + Location target = new Location(""); + target.setLatitude(latitude); + target.setLongitude(longitude); + + Location current = new Location(""); + current.setLatitude(20.5109958); + current.setLongitude(88.4009709); + + float distance = current.distanceTo(target); + System.out.println("Distance: "+distance); + if(distance<500){ + Toast.makeText(CheckInActivity.this, "You are out of range!Please get back to location", Toast.LENGTH_SHORT).show(); + //showFailedDialog(); + } + else{ + //showSuccessDialog(); + Toast.makeText(CheckInActivity.this, "Attendance ready to be captured", Toast.LENGTH_SHORT).show(); + Intent intent = new Intent(CheckInActivity.this, RegisterActivity.class); + intent.putExtra("FromLoginPage",true); + startActivity(intent); + } + } else { + Toast.makeText(CheckInActivity.this, "Location not available", Toast.LENGTH_SHORT).show(); + } } }); - // Showing the popup menu - popupMenu.show();*//* + + + } + public void leaveApprover(){ + final ProgressDialog loading = ProgressDialog.show(CheckInActivity.this, "Authenticating", "Please wait while logging", false, false); + String url= "http://43.242.212.92:7001/api/lgt/IsELeaveApprover?employeeid=27256"; + //String url= "http://43.242.212.92:7001/api/lgt/IsELeaveApprover?employeeid=29034"; + StringRequest stringRequest=new StringRequest(Request.Method.GET, url, new com.android.volley.Response.Listener() { + @Override + public void onResponse(String response) { + try { + JSONArray jsonArray=new JSONArray(response); + JSONObject jb1=jsonArray.getJSONObject(0); + _approverstatus=jb1.getBoolean("_approverstatus"); + + + + System.out.println("_approverstatus " + _approverstatus); + } catch (JSONException e) { + throw new RuntimeException(e); + } + + loading.dismiss(); + } + + }, new com.android.volley.Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { +// Log.d("error-=>",error.getMessage()); + Toast.makeText(CheckInActivity.this, "Failed to get response = " + error.getMessage(), Toast.LENGTH_SHORT).show(); + System.out.println("Error message: "+ error.getMessage()); + + + } + }) + { + + }; + Volley.newRequestQueue(CheckInActivity.this).add(stringRequest); + } + + public void emergencySos(){ + final ProgressDialog loading = ProgressDialog.show(CheckInActivity.this, "Authenticating", "Please wait ", false, false); + + String url= "http://43.242.212.92:7001/api/lgt/EmargencySOS"; + StringRequest stringRequest=new StringRequest(Request.Method.POST, url, new com.android.volley.Response.Listener() { + @Override + public void onResponse(String response) { + JSONObject jsonObject= null; + try { + jsonObject = new JSONObject(response); + } catch (JSONException e) { + throw new RuntimeException(e); + } + try { + valueEmer = jsonObject.getString("_statusMessage"); + } catch (JSONException e) { + throw new RuntimeException(e); + } + Toast.makeText(CheckInActivity.this, valueEmer, Toast.LENGTH_LONG).show(); + loading.dismiss(); + } + + }, new com.android.volley.Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { +// Log.d("error-=>",error.getMessage()); + Toast.makeText(CheckInActivity.this, "Failed to get response = " + error.getMessage(), Toast.LENGTH_SHORT).show(); + loading.dismiss(); + System.out.println("Error message: "+ error.getMessage()); + + + } + }) + { + @Override + protected Map getParams() { + Map params = new HashMap(); + + params.put("employeeid", "29034"); + params.put("userid", "skumar"); + + + return params; + } + }; + Volley.newRequestQueue(CheckInActivity.this).add(stringRequest); + } + public void getReport(){ + final ProgressDialog loading = ProgressDialog.show(CheckInActivity.this, "Authenticating", "Please wait ", false, false); + //String url= "http://43.242.212.92:7001/api/lgt/AttendanceReport"; + String url= "http://43.242.212.92:7001/api/lgt/AttendanceReport?employeeid="+"101"+"&fromdate="+"06/06/2023"+"&todate="+"06/07/2023"; + StringRequest stringRequest=new StringRequest(Request.Method.GET, url, new com.android.volley.Response.Listener() { + @Override + public void onResponse(String response) { + Toast.makeText(CheckInActivity.this, "Response successful", Toast.LENGTH_SHORT).show(); + loading.dismiss(); + } + + }, new com.android.volley.Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { +// Log.d("error-=>",error.getMessage()); + Toast.makeText(CheckInActivity.this, "Failed to get response = " + error.getMessage(), Toast.LENGTH_SHORT).show(); + loading.dismiss(); + System.out.println("Error message: "+ error.getMessage()); + + + } + }) + { + @Override + protected Map getParams() { + Map params = new HashMap(); + + /*params.put("employeeid", "101"); + params.put("fromdate", "06/06/2023"); + params.put("todate", "06/07/2023");*/ + + return params; + } + }; + Volley.newRequestQueue(CheckInActivity.this).add(stringRequest); + } + public void checkIn(){ + final ProgressDialog loading = ProgressDialog.show(CheckInActivity.this, "Checking in", "Please wait while checking", false, false); + String url= "http://43.242.212.92:7001/api/lgt/CheckIn"; + StringRequest stringRequest=new StringRequest(Request.Method.POST, url, new com.android.volley.Response.Listener() { + @Override + public void onResponse(String response) { + + Log.d("data-=>",response); + + + try { + JSONObject jsonObject=new JSONObject(response); + valueFromApiCheckIn = jsonObject.getString("_statusMessage"); + } catch (JSONException e) { + throw new RuntimeException(e); + } + + Toast.makeText(CheckInActivity.this, valueFromApiCheckIn, Toast.LENGTH_LONG).show(); + + Intent intent = new Intent(CheckInActivity.this, RegisterActivity.class); + intent.putExtra("FromLoginPage",true); + intent.putExtra("valueFromApiCheckIn",valueFromApiCheckIn); + startActivity(intent); + + + loading.dismiss(); + + + } + }, new com.android.volley.Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { +// Log.d("error-=>",error.getMessage()); + Toast.makeText(CheckInActivity.this, "Fail to get response = " + error.getMessage(), Toast.LENGTH_SHORT).show(); + System.out.println("Error message: "+ error.getMessage()); + + + } + }) + { + @Override + protected Map getParams() { + Map params = new HashMap(); + + params.put("employeeid", "101"); + params.put("location", "loca1"); + params.put("latitude", "10.235"); + params.put("longitude", "55.666"); + params.put("checkintime", currentDateAndTime); + params.put("locStateDevice", "1"); + params.put("locStateApp", "1"); + params.put("batteryPercent", "1"); + params.put("cellInfo", "1"); + params.put("accuracy", "1"); + params.put("locTS", "1"); + params.put("spoofingEnb", "0"); + params.put("providerNetTime", "10/07/2023 12:10:05"); + + return params; + } + }; + Volley.newRequestQueue(CheckInActivity.this).add(stringRequest); + } + public void checkOut(){ + final ProgressDialog loading = ProgressDialog.show(CheckInActivity.this, "Checking out", "Please wait while checking", false, false); + String url= "http://43.242.212.92:7001/api/lgt/CheckOut"; + StringRequest stringRequest=new StringRequest(Request.Method.POST, url, new com.android.volley.Response.Listener() { + @Override + public void onResponse(String response) { + + try { + JSONObject jsonObject=new JSONObject(response); + valueFromApiCheckIn = jsonObject.getString("_statusMessage"); + + System.out.println("Value from api check out "+valueFromApiCheckIn); + } catch (JSONException e) { + throw new RuntimeException(e); + } + + Log.d("data-=>",response); + Toast.makeText(CheckInActivity.this, valueFromApiCheckIn, Toast.LENGTH_SHORT).show(); + Intent intent = new Intent(CheckInActivity.this, RegisterActivity.class); + intent.putExtra("FromLoginPage",true); + intent.putExtra("valueFromApiCheckIn",valueFromApiCheckIn); + startActivity(intent); + /*new SweetAlertDialog(CheckInActivity.this, SweetAlertDialog.SUCCESS_TYPE) + .setTitleText("You have successfully checked out.") + .setConfirmText("Face recognition") + .setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() { + @Override + public void onClick(SweetAlertDialog sDialog) { + sDialog.dismissWithAnimation(); + + } + }) + .setContentText("Thank you.").show();*/ + loading.dismiss(); + } + }, new com.android.volley.Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { +// Log.d("error-=>",error.getMessage()); + Toast.makeText(CheckInActivity.this, "Fail to get response = " + error.getMessage(), Toast.LENGTH_SHORT).show(); + loading.dismiss(); + System.out.println("Error message: "+ error.getMessage()); + + + } + }) + { + @Override + protected Map getParams() { + Map params = new HashMap(); + + params.put("employeeid", "29034"); + params.put("location", "loca1"); + params.put("latitude", "10.235"); + params.put("longitude", "55.666"); + params.put("checkouttime", currentDateAndTime); + params.put("locStateDevice", "1"); + params.put("locStateApp", "1"); + params.put("batteryPercent", "1"); + params.put("cellInfo", "1"); + params.put("accuracy", "1"); + params.put("locTS", "1"); + params.put("spoofingEnb", "0"); + params.put("providerNetTime", "10/07/2023 12:10:05"); + + return params; } - });*/ + }; + Volley.newRequestQueue(CheckInActivity.this).add(stringRequest); } + public void targetLocationListFromCheckIn(){ + final ProgressDialog loading = ProgressDialog.show(CheckInActivity.this, "Checking location", "Please wait while checking", false, false); + String url= "http://43.242.212.92:7001/api/lgt/EmployeeLocation?employeeid=29034"; + StringRequest stringRequest=new StringRequest(Request.Method.GET, url, new com.android.volley.Response.Listener() { + @Override + public void onResponse(String response) { + + Log.d("data-=>",response); + try { + JSONObject jsonObject=new JSONObject(response); + JSONArray jsonArray=jsonObject.getJSONArray("_lstEmployee_Location"); + /*for(int i=0;i",error.getMessage()); + Toast.makeText(CheckInActivity.this, "Fail to get response = " + error.getMessage(), Toast.LENGTH_SHORT).show(); + System.out.println("Error message: "+ error.getMessage()); + + + } + }) + { + + }; + Volley.newRequestQueue(CheckInActivity.this).add(stringRequest); + } + + public void targetLocationListFromCheckOut(){ + final ProgressDialog loading = ProgressDialog.show(CheckInActivity.this, "Checking location", "Please wait while checking", false, false); + String url= "http://43.242.212.92:7001/api/lgt/EmployeeLocation?employeeid=29034"; + StringRequest stringRequest=new StringRequest(Request.Method.GET, url, new com.android.volley.Response.Listener() { + @Override + public void onResponse(String response) { + + Log.d("data-=>",response); + try { + JSONObject jsonObject=new JSONObject(response); + JSONArray jsonArray=jsonObject.getJSONArray("_lstEmployee_Location"); + /*for(int i=0;i",error.getMessage()); + Toast.makeText(CheckInActivity.this, "Fail to get response = " + error.getMessage(), Toast.LENGTH_SHORT).show(); + System.out.println("Error message: "+ error.getMessage()); + + + } + }) + { + + }; + Volley.newRequestQueue(CheckInActivity.this).add(stringRequest); + } + + private void showSuccessDialog() { + AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder.setTitle("Success"); + builder.setMessage("Attendance ready to be captured."); + builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // Perform any necessary action when the user clicks the "OK" button. + dialog.dismiss(); // Close the dialog. + } + }); + + AlertDialog dialog = builder.create(); + dialog.show(); + } + private void showFailedDialog() { + AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder.setTitle("Failed"); + builder.setMessage("You are out of range!Please get back to location"); + builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // Perform any necessary action when the user clicks the "OK" button. + dialog.dismiss(); // Close the dialog. + } + }); + + AlertDialog dialog = builder.create(); + dialog.show(); + } + + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, + @NonNull int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + if (requestCode == LOCATION_PERMISSION_REQUEST_CODE) { + if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + // Permission granted, so request location updates + requestLocationUpdates(); + } else { + Toast.makeText(this, "Location permission denied", Toast.LENGTH_SHORT).show(); + } + } + } + } \ No newline at end of file diff --git a/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/CheckInNewActivity.java b/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/CheckInNewActivity.java new file mode 100644 index 0000000..a80194b --- /dev/null +++ b/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/CheckInNewActivity.java @@ -0,0 +1,211 @@ +package ru.visionlab.femdemo; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; + +import android.app.ProgressDialog; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.location.Location; +import android.os.Bundle; +import android.util.Log; +import android.view.View; +import android.widget.TextView; +import android.widget.Toast; + +import com.android.volley.Request; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.StringRequest; +import com.android.volley.toolbox.Volley; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.HashMap; +import java.util.Map; + +import cn.pedant.SweetAlert.SweetAlertDialog; +import ru.visionlab.femdemo.register.RegisterActivity; + +public class CheckInNewActivity extends AppCompatActivity { + + TextView btnCheckIn,btnCheckOut; + private static final int LOCATION_PERMISSION_REQUEST_CODE = 1; + + String targetLat1="",targetlat2="",targetLon1="",targetLon2=""; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_check_in_new); + + /*new SweetAlertDialog(CheckInNewActivity.this, SweetAlertDialog.SUCCESS_TYPE) + .setTitleText("You have successfully checked out.") + .setConfirmText("Face recognition") + .setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() { + @Override + public void onClick(SweetAlertDialog sDialog) { + sDialog.dismissWithAnimation(); + + } + }) + .setContentText("Thank you.").show();*/ + + btnCheckIn = findViewById(R.id.btnCheckIn); + btnCheckIn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + System.out.println("Clicked check in button"); + //requestLocationUpdates(); + if (ContextCompat.checkSelfPermission(CheckInNewActivity.this, android.Manifest.permission.ACCESS_FINE_LOCATION) + == PackageManager.PERMISSION_GRANTED) { + // Permission granted, so request location updates + //requestLocationUpdates(); + targetLocationListFromCheckIn(); + + } else { + // Permission not granted, request it + ActivityCompat.requestPermissions(CheckInNewActivity.this, + new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION}, + LOCATION_PERMISSION_REQUEST_CODE); + } + } + }); + } + + public void targetLocationListFromCheckIn(){ + final ProgressDialog loading = ProgressDialog.show(CheckInNewActivity.this, "Checking location", "Please wait while checking", false, false); + String url= "http://43.242.212.92:7001/api/lgt/EmployeeLocation?employeeid=29034"; + StringRequest stringRequest=new StringRequest(Request.Method.GET, url, new com.android.volley.Response.Listener() { + @Override + public void onResponse(String response) { + + Log.d("data-=>",response); + try { + JSONObject jsonObject=new JSONObject(response); + JSONArray jsonArray=jsonObject.getJSONArray("_lstEmployee_Location"); + /*for(int i=0;i",error.getMessage()); + Toast.makeText(CheckInNewActivity.this, "Fail to get response = " + error.getMessage(), Toast.LENGTH_SHORT).show(); + System.out.println("Error message: "+ error.getMessage()); + + + } + }) + { + + }; + Volley.newRequestQueue(CheckInNewActivity.this).add(stringRequest); + } + + public void checkIn(){ + final ProgressDialog loading = ProgressDialog.show(CheckInNewActivity.this, "Checking in", "Please wait while checking", false, false); + String url= "http://43.242.212.92:7001/api/lgt/CheckIn"; + StringRequest stringRequest=new StringRequest(Request.Method.POST, url, new com.android.volley.Response.Listener() { + @Override + public void onResponse(String response) { + + Log.d("data-=>",response); + + + + Toast.makeText(CheckInNewActivity.this, "Attendance captured", Toast.LENGTH_SHORT).show(); + Intent intent = new Intent(CheckInNewActivity.this, RegisterActivity.class); + intent.putExtra("FromLoginPage",true); + intent.putExtra("FromNewCheck",true); + startActivity(intent); + + + loading.dismiss(); + + + } + }, new com.android.volley.Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { +// Log.d("error-=>",error.getMessage()); + Toast.makeText(CheckInNewActivity.this, "Fail to get response = " + error.getMessage(), Toast.LENGTH_SHORT).show(); + System.out.println("Error message: "+ error.getMessage()); + + + } + }) + { + @Override + protected Map getParams() { + Map params = new HashMap(); + + params.put("employeeid", "101"); + params.put("location", "loca1"); + params.put("latitude", "10.235"); + params.put("longitude", "55.666"); + params.put("checkintime", "10/07/2023 12:10:05"); + params.put("locStateDevice", "1"); + params.put("locStateApp", "1"); + params.put("batteryPercent", "1"); + params.put("cellInfo", "1"); + params.put("accuracy", "1"); + params.put("locTS", "1"); + params.put("spoofingEnb", "0"); + params.put("providerNetTime", "10/07/2023 12:10:05"); + + return params; + } + }; + Volley.newRequestQueue(CheckInNewActivity.this).add(stringRequest); + } +} \ No newline at end of file diff --git a/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/LeaveRequestActivity.java b/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/LeaveRequestActivity.java new file mode 100644 index 0000000..abd2d09 --- /dev/null +++ b/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/LeaveRequestActivity.java @@ -0,0 +1,47 @@ +package ru.visionlab.femdemo; + +import androidx.appcompat.app.AppCompatActivity; + +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.widget.ImageButton; +import android.widget.LinearLayout; + +public class LeaveRequestActivity extends AppCompatActivity { + LinearLayout lin1,lin2; + + ImageButton back; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_leave_request); + + back = findViewById(R.id.back); + back.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + onBackPressed(); + } + }); + + lin1 = findViewById(R.id.lin1); + lin1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Intent intent = new Intent(LeaveRequestActivity.this, LeaveRequestDetailsActivity.class); + startActivity(intent); + } + }); + + lin2 = findViewById(R.id.lin2); + lin2.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Intent intent = new Intent(LeaveRequestActivity.this, LeaveRequestDetailsActivity.class); + startActivity(intent); + } + }); + } +} \ No newline at end of file diff --git a/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/LeaveRequestDetailsActivity.java b/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/LeaveRequestDetailsActivity.java new file mode 100644 index 0000000..280fc85 --- /dev/null +++ b/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/LeaveRequestDetailsActivity.java @@ -0,0 +1,115 @@ +package ru.visionlab.femdemo; + +import androidx.appcompat.app.AppCompatActivity; + +import android.app.ProgressDialog; +import android.os.Bundle; +import android.view.View; +import android.widget.Button; +import android.widget.ImageButton; +import android.widget.ImageView; +import android.widget.Toast; + +import com.android.volley.Request; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.StringRequest; +import com.android.volley.toolbox.Volley; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.HashMap; +import java.util.Map; + +import ru.visionlab.femdemo.R; + +public class LeaveRequestDetailsActivity extends AppCompatActivity { + + Button btnapprove,btnreject; + + ImageButton back; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_leave_request_details); + + back = findViewById(R.id.back); + back.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + onBackPressed(); + } + }); + + btnapprove = findViewById(R.id.btnapprove); + btnapprove.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + PermissionApprovalAction(); + } + }); + + btnreject = findViewById(R.id.btnreject); + } + + public void PermissionApprovalAction(){ + + + final ProgressDialog loading = ProgressDialog.show(LeaveRequestDetailsActivity.this, "Fetching information", "Please wait ", false, false); + + String url= "http://43.242.212.92:7001/api/lgt/PermissionApprovalAction"; + StringRequest stringRequest=new StringRequest(Request.Method.POST, url, new com.android.volley.Response.Listener() { + @Override + public void onResponse(String response) { + + + try { + JSONObject jsonObject = new JSONObject(response); + String _statusMessage3 = jsonObject.getString("_statusMessage"); + System.out.println("_statusMessage "+_statusMessage3); + if(_statusMessage3.equals("Saved Successfully")){ + Toast.makeText(LeaveRequestDetailsActivity.this, "Current Status :A", Toast.LENGTH_SHORT).show(); + } + + } catch (JSONException e) { + throw new RuntimeException(e); + } + + + + loading.dismiss(); + } + + }, new com.android.volley.Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { +// Log.d("error-=>",error.getMessage()); + Toast.makeText(LeaveRequestDetailsActivity.this, "Failed to get response = " + error.getMessage(), Toast.LENGTH_SHORT).show(); + loading.dismiss(); + System.out.println("Error message: "+ error.getMessage()); + + + } + }) + { + @Override + protected Map getParams() { + Map params = new HashMap(); + + params.put("permissionID", "27507"); + params.put("eleavetype", "27256"); + params.put("actionby", "asaif"); + params.put("remark", "Testing Approve"); + params.put("actionflag", "A"); + + + + return params; + } + }; + Volley.newRequestQueue(LeaveRequestDetailsActivity.this).add(stringRequest); + } +} \ No newline at end of file diff --git a/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/PermissionRequestActivity.java b/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/PermissionRequestActivity.java new file mode 100644 index 0000000..d1e026f --- /dev/null +++ b/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/PermissionRequestActivity.java @@ -0,0 +1,383 @@ +package ru.visionlab.femdemo; + +import androidx.appcompat.app.AppCompatActivity; + +import android.app.ProgressDialog; +import android.app.TimePickerDialog; +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ImageButton; +import android.widget.LinearLayout; +import android.widget.Spinner; +import android.widget.TextView; +import android.widget.TimePicker; +import android.widget.Toast; + +import com.android.volley.Request; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.StringRequest; +import com.android.volley.toolbox.Volley; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.Calendar; +import java.util.HashMap; +import java.util.Map; + +import ru.visionlab.femdemo.R; +import ru.visionlab.femdemo.login.LoginActivity; + +public class PermissionRequestActivity extends AppCompatActivity { + + ImageButton back; + Button btnSubmit,btn_private; + String _statusMessage; + EditText edtRemarks; + String remarks=""; + LinearLayout timePickerFrom,timePickerTo; + private int mDay, mHour, mMinute; + TextView textTimeFrom,textTimeTo; + + LinearLayout linearLayout1; + + Spinner spinner; + + String permission_type; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_permission_request); + linearLayout1 = findViewById(R.id.linearLayout1); + + IsELeaveApprover(); + //PermissionInsert(); + PermissionApprovalList(); + PermissionTypes(); + + + spinner = findViewById(R.id.spinner); + ArrayAdapter adapter = ArrayAdapter.createFromResource(this, R.array.spinner_items, android.R.layout.simple_spinner_item); + adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + spinner.setAdapter(adapter); + + spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView parentView, View selectedItemView, int position, long id) { + // Handle the selected item here + permission_type = parentView.getItemAtPosition(position).toString(); + System.out.println("Value of permission_type "+permission_type); + // Do something with the selected item + } + + @Override + public void onNothingSelected(AdapterView parentView) { + // Handle the case where nothing is selected (if needed) + } + }); + + + back = findViewById(R.id.back); + back.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + /*Intent intent = new Intent(PermissionRequestActivity.this, CheckInActivity.class); + intent.putExtra("backToCheck",true); + startActivity(intent);*/ + onBackPressed(); + + } + }); + + btn_private = findViewById(R.id.btn_private); + btn_private.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Intent intent = new Intent(PermissionRequestActivity.this, LeaveRequestActivity.class); + startActivity(intent); + } + }); + + btnSubmit = findViewById(R.id.btnSubmit); + btnSubmit.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + getPermission(); + } + }); + edtRemarks = findViewById(R.id.edtRemarks); + + timePickerFrom = findViewById(R.id.timePickerFrom); + textTimeFrom = findViewById(R.id.textTimeFrom); + timePickerFrom.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + final Calendar c = Calendar.getInstance(); + mHour = c.get(Calendar.HOUR_OF_DAY); + mMinute = c.get(Calendar.MINUTE); + + // Launch Time Picker Dialog + TimePickerDialog timePickerDialog = new TimePickerDialog(PermissionRequestActivity.this, + new android.app.TimePickerDialog.OnTimeSetListener() { + + @Override + public void onTimeSet(TimePicker view, int hourOfDay, + int minute) { + + + + textTimeFrom.setText(hourOfDay + ":" + minute); + } + }, mHour, mMinute, false); + timePickerDialog.show(); + } + }); + timePickerTo = findViewById(R.id.timePickerTo); + textTimeTo = findViewById(R.id.textTimeTo); + timePickerTo.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + final Calendar c = Calendar.getInstance(); + mHour = c.get(Calendar.HOUR_OF_DAY); + mMinute = c.get(Calendar.MINUTE); + + // Launch Time Picker Dialog + TimePickerDialog timePickerDialog = new TimePickerDialog(PermissionRequestActivity.this, + new android.app.TimePickerDialog.OnTimeSetListener() { + + @Override + public void onTimeSet(TimePicker view, int hourOfDay, + int minute) { + + + + textTimeTo.setText(hourOfDay + ":" + minute); + } + }, mHour, mMinute, false); + timePickerDialog.show(); + } + }); + + + + + } + + public void getPermission(){ + final ProgressDialog loading = ProgressDialog.show(PermissionRequestActivity.this, "Fetching information", "Please wait ", false, false); + remarks = edtRemarks.getText().toString(); + String url= "http://43.242.212.92:7001/api/lgt/PermissionInsert"; + StringRequest stringRequest=new StringRequest(Request.Method.POST, url, new com.android.volley.Response.Listener() { + @Override + public void onResponse(String response) { + JSONObject jsonObject= null; + try { + jsonObject = new JSONObject(response); + } catch (JSONException e) { + throw new RuntimeException(e); + } + try { + _statusMessage = jsonObject.getString("_statusMessage"); + System.out.println("Status message: "+_statusMessage); + } catch (JSONException e) { + throw new RuntimeException(e); + } + Toast.makeText(PermissionRequestActivity.this, _statusMessage, Toast.LENGTH_SHORT).show(); + loading.dismiss(); + } + + }, new com.android.volley.Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { +// Log.d("error-=>",error.getMessage()); + Toast.makeText(PermissionRequestActivity.this, "Failed to get response = " + error.getMessage(), Toast.LENGTH_SHORT).show(); + loading.dismiss(); + System.out.println("Error message: "+ error.getMessage()); + + + } + }) + { + @Override + protected Map getParams() { + Map params = new HashMap(); + + params.put("employeeid", "101"); + params.put("eleavetype", "P"); + params.put("datedaytype", "Today"); + params.put("fromtime", "13:22"); + params.put("totime", "15:22"); + params.put("reason", remarks); + params.put("attachment", ""); + params.put("userid", "a"); + + + return params; + } + }; + Volley.newRequestQueue(PermissionRequestActivity.this).add(stringRequest); + } + public void IsELeaveApprover(){ + + + final ProgressDialog loading = ProgressDialog.show(PermissionRequestActivity.this, "Fetching information", "Please wait ", false, false); + + String url= "http://43.242.212.92:7001/api/lgt/IsELeaveApprover?employeeid=29034"; + StringRequest stringRequest=new StringRequest(Request.Method.GET, url, new com.android.volley.Response.Listener() { + @Override + public void onResponse(String response) { + + + try { + JSONArray jsonArray=new JSONArray(response); + JSONObject jb1=jsonArray.getJSONObject(0); + boolean _approverstatus=jb1.getBoolean("_approverstatus"); + + if(!_approverstatus){ + linearLayout1.setVisibility(View.GONE); + } + + + System.out.println("_approverstatus " + _approverstatus); + } catch (JSONException e) { + throw new RuntimeException(e); + } + + + + loading.dismiss(); + } + + }, new com.android.volley.Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { +// Log.d("error-=>",error.getMessage()); + Toast.makeText(PermissionRequestActivity.this, "Failed to get response = " + error.getMessage(), Toast.LENGTH_SHORT).show(); + loading.dismiss(); + System.out.println("Error message: "+ error.getMessage()); + + + } + }) + { + + }; + Volley.newRequestQueue(PermissionRequestActivity.this).add(stringRequest); + } + + public void PermissionInsert(){ + final ProgressDialog loading = ProgressDialog.show(PermissionRequestActivity.this, "Fetching information", "Please wait ", false, false); + + String url= "http://43.242.212.92:7001/api/lgt/PermissionInsert"; + StringRequest stringRequest=new StringRequest(Request.Method.POST, url, new com.android.volley.Response.Listener() { + @Override + public void onResponse(String response) { + + try { + JSONObject jsonObject = new JSONObject(response); + String _statusMessage = jsonObject.getString("_statusMessage"); + System.out.println("_statusMessage "+_statusMessage); + } catch (JSONException e) { + throw new RuntimeException(e); + } + loading.dismiss(); + } + + }, new com.android.volley.Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { +// Log.d("error-=>",error.getMessage()); + Toast.makeText(PermissionRequestActivity.this, "Failed to get response = " + error.getMessage(), Toast.LENGTH_SHORT).show(); + loading.dismiss(); + System.out.println("Error message: "+ error.getMessage()); + + + } + }) + { + @Override + protected Map getParams() { + Map params = new HashMap(); + + params.put("employeeid", "101"); + params.put("eleavetype", "P"); + params.put("datedaytype", "Today"); + params.put("fromtime", "13:22"); + params.put("totime", "15:22"); + params.put("reason", "Meeting"); + params.put("attachment", ""); + params.put("userid", "a"); + params.put("startdate", "demouser1"); + params.put("enddate", ""); + + + return params; + } + }; + Volley.newRequestQueue(PermissionRequestActivity.this).add(stringRequest); + } + public void PermissionApprovalList(){ + final ProgressDialog loading = ProgressDialog.show(PermissionRequestActivity.this, "Fetching information", "Please wait ", false, false); + + String url= "http://43.242.212.92:7001/api/lgt/PermissionApprovallist?ApproverID=27256"; + StringRequest stringRequest=new StringRequest(Request.Method.GET, url, new com.android.volley.Response.Listener() { + @Override + public void onResponse(String response) { + + Toast.makeText(PermissionRequestActivity.this, "Response successful1", Toast.LENGTH_SHORT).show(); + loading.dismiss(); + } + + }, new com.android.volley.Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { +// Log.d("error-=>",error.getMessage()); + Toast.makeText(PermissionRequestActivity.this, "Failed to get response = " + error.getMessage(), Toast.LENGTH_SHORT).show(); + loading.dismiss(); + System.out.println("Error message: "+ error.getMessage()); + + + } + }) + { + + }; + Volley.newRequestQueue(PermissionRequestActivity.this).add(stringRequest); + } + public void PermissionTypes(){ + final ProgressDialog loading = ProgressDialog.show(PermissionRequestActivity.this, "Fetching information", "Please wait ", false, false); + + String url= "http://43.242.212.92:7001/api/lgt/PermissionTypes"; + StringRequest stringRequest=new StringRequest(Request.Method.GET, url, new com.android.volley.Response.Listener() { + @Override + public void onResponse(String response) { + + Toast.makeText(PermissionRequestActivity.this, "Response successful2", Toast.LENGTH_SHORT).show(); + loading.dismiss(); + } + + }, new com.android.volley.Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { +// Log.d("error-=>",error.getMessage()); + Toast.makeText(PermissionRequestActivity.this, "Failed to get response = " + error.getMessage(), Toast.LENGTH_SHORT).show(); + loading.dismiss(); + System.out.println("Error message: "+ error.getMessage()); + + + } + }) + { + + }; + Volley.newRequestQueue(PermissionRequestActivity.this).add(stringRequest); + } +} \ No newline at end of file diff --git a/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/RegisterFromCheckActivity.java b/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/RegisterFromCheckActivity.java new file mode 100644 index 0000000..0f22b92 --- /dev/null +++ b/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/RegisterFromCheckActivity.java @@ -0,0 +1,565 @@ +package ru.visionlab.femdemo; + +import android.Manifest; +import android.annotation.SuppressLint; +import android.content.Intent; +import android.graphics.Bitmap; +import android.media.MediaScannerConnection; +import android.net.Uri; +import android.os.Bundle; +import android.os.Environment; +import android.os.Handler; +import android.provider.MediaStore; +import android.util.Base64; +import android.util.Log; +import android.view.MenuItem; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ImageButton; +import android.widget.ImageView; +import android.widget.Toast; + +import androidx.annotation.Nullable; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.widget.Toolbar; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; + +import com.tbruyelle.rxpermissions.RxPermissions; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.net.SocketException; +import java.util.List; + +import javax.inject.Inject; + +import butterknife.BindView; +import cn.pedant.SweetAlert.SweetAlertDialog; +import ru.PreferenceManager.PreferenceManager; +import ru.visionlab.femdemo.CheckInActivity; +import ru.visionlab.femdemo.Config; +import ru.visionlab.femdemo.Core.PhotoProcessor; +import ru.visionlab.femdemo.App; +import ru.visionlab.femdemo.BuildConfig; +import ru.visionlab.femdemo.LocationHelper; +import ru.visionlab.femdemo.R; +import ru.visionlab.femdemo.Storage; +import ru.visionlab.femdemo.Utils; +import ru.visionlab.femdemo.api.RegisterApiImplLuna2; +import ru.visionlab.femdemo.api.RegisterApiImplLocal; +import ru.visionlab.femdemo.api.RegisterApiInterface; +import ru.visionlab.femdemo.api.VLApi; +import ru.visionlab.femdemo.api.VerifyApiImplLuna2; +import ru.visionlab.femdemo.api.VerifyApiImplLunaLocal; +import ru.visionlab.femdemo.api.VerifyApiInterface; +import ru.visionlab.femdemo.authentication.AuthSuccessActivity; +import ru.visionlab.femdemo.authentication.AuthenticationActivity; +import ru.visionlab.femdemo.authentication.FaceNotRecognizedFragment; +import ru.visionlab.femdemo.base.PhotoFragment; +import ru.visionlab.femdemo.base.ToolbarActivity; +import ru.visionlab.femdemo.login.LoginActivity; +import ru.visionlab.femdemo.login.LoginActivityNew; +import ru.visionlab.femdemo.models.SearchResult; +import ru.visionlab.femdemo.models.SearchResultPerson; +import ru.visionlab.femdemo.register.FaceNotFoundFragment; +import ru.visionlab.femdemo.register.RegisterFragment; +import ru.visionlab.femdemo.register.RegistrationModel; +import ru.visionlab.femdemo.register.SavePhotoFragment; +import ru.visionlab.femdemo.settings.VLPreferences; + +public class RegisterFromCheckActivity extends ToolbarActivity implements RegisterFragment.Listener, PhotoFragment.Listener, + SavePhotoFragment.Listener, FaceNotFoundFragment.Listener, RegisterApiInterface.Listener, VerifyApiInterface.Listener, FaceNotRecognizedFragment.Listener{ + + public static final String REGISTER_FRAGMENT = "REGISTER FRAGMENT"; + public static final String PHOTO_FRAGMENT = "PHOTO_FRAGMENT"; + public static final String SAVE_PHOTO_FRAGMENT = "SAVE PHOTO FRAGMENT"; + public static final String FACE_NOT_FOUND_FRAGMENT = "FACE NOT FOUND FRAGMENT"; + public static final String SAVE_PHOTO_NAME = "PhotomakerAndroidDemo Registration Photo"; + private Thread thread; + EditText compId,username,otp; + String company_ID="",user="",OTP=""; + + + @Inject + VLPreferences preferences; + + @Inject + VLApi api; + + @Inject + LocationHelper locationHelper; + + @Inject + PhotoProcessor photoProcessor; + @Nullable + @BindView(R.id.toolbar) + Toolbar toolbar; + + Bitmap bitmap; + + RegistrationModel registrationModel; + + ImageButton back_img; + Button verifynproceed; + ImageView photo; + private static final int pic_id = 123; + PreferenceManager preferenceManager; + Bitmap photo2=null; + Button save,retry; + String encodedImage=""; + boolean fromLoginPage,FromNewCheck; + private PhotoFragment fragment; + String login; + private long verifEndTime; + private long verifStartTime; + + private int faceFailCount; + + private boolean goingSomewhere = false; + + @SuppressLint("MissingInflatedId") + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + ((App) getApplication()).getComponent().inject(this); + setContentView(R.layout.activity_register); + + //ButterKnife.bind(this); + setToolbar(); + Intent intent = getIntent(); + fromLoginPage = intent.getBooleanExtra("FromLoginPage",true); + System.out.println("Value of FromLoginPage "+fromLoginPage); + if(fromLoginPage){ + showPhotoScreen(); + } + else { + showRegisterScreen(); + } + FromNewCheck = intent.getBooleanExtra("FromLoginPage",false); + System.out.println("Value of FromNewCheck "+FromNewCheck); + + + /*back_img.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Intent intent = new Intent(RegisterActivity.this, LoginActivity.class); + startActivity(intent); + } + });*/ + // compId = findViewById(R.id.compId); +// username = findViewById(R.id.username); + // otp = findViewById(R.id.otp); + + + // company_ID = compId.getText().toString().trim(); +// user = username.getText().toString().trim(); + // OTP = otp.getText().toString().trim(); + + /*verifynproceed = findViewById(R.id.verifynproceed); + verifynproceed.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + if(company_ID.equals("002") *//*&& user.equals("34") *//* && OTP.equals("444")){ + Intent intent = new Intent(RegisterActivity.this, LoginActivity.class); + startActivity(intent); + } + } + });*/ + + preferenceManager=PreferenceManager.getInstance(this); + } + + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + // Match the request 'pic id with requestCode + if (requestCode == pic_id) { + // BitMap is data structure of image file which store the image in memory + photo2 = (Bitmap) data.getExtras().get("data"); + // Set the image in imageview for display + + if(photo2.equals("") || photo2==null){ + photo.setBackgroundResource(R.drawable.user1); + + } + else { + photo.setImageDrawable(null); + photo.setImageBitmap(photo2); + System.out.println("imageview "+ photo.getDrawable()); + System.out.println("imageview photo2 "+ photo2); + + Toast.makeText(this, "Image set", Toast.LENGTH_SHORT).show(); + } + + } + } + + @Override + protected void onDestroy() + { + photoProcessor.release(); + super.onDestroy(); + } + + private void showRegisterScreen() { + final RegisterFragment fragment = RegisterFragment.newInstance(); + fragment.setListener(this); + getSupportFragmentManager() + .beginTransaction() + .replace(R.id.container, fragment, PHOTO_FRAGMENT) + .addToBackStack(fragment.toString()) + .commit(); + } + + private void setToolbar() { + setSupportActionBar(toolbar); + final ActionBar actionBar = getSupportActionBar(); + if (actionBar != null) { + actionBar.setDisplayHomeAsUpEnabled(true); + actionBar.setDisplayShowHomeEnabled(true); + } + } + + @Override + public void onBackPressed() { + Log.i("STATUS","STACK COUNT "+getSupportFragmentManager().getBackStackEntryCount()); + preferences.setStartTime(String.valueOf(System.currentTimeMillis())); + if (getSupportFragmentManager().getBackStackEntryCount() > 1) { + getSupportFragmentManager().popBackStack(); + } else { + super.onBackPressed(); + } + } + + @Override + public void onSignUpClick(RegistrationModel registrationModel) { + if((!BuildConfig.IS_OFFLINE_VERSION) && preferences.getLuna2()) { + thread = new Thread(() -> { + Storage.getInstance().updateDatabase(preferences.getLuna2Server(), preferences.getEncodedUserData(), api, preferences.getServerChanged()); + }); + thread.start(); + } + this.registrationModel = registrationModel; + Utils.hideKeyboard(this, getCurrentFocus()); + new Handler().post(this::showPhotoScreen); + } + + private void showPhotoScreen() { + fragment = PhotoFragment.newInstance(); + fragment.setPhotoProcessor(photoProcessor); + fragment.setListener(this); + fragment.enableLivenessCheck(false); + + preferences.setStartTime(String.valueOf(System.currentTimeMillis())); + preferences.setNeedPortrait(false); + System.out.println("Inside photo screen method"); + getSupportFragmentManager() + .beginTransaction() + .replace(R.id.container, fragment, PHOTO_FRAGMENT) + .addToBackStack(fragment.toString()) + .commit(); + } + + private void showPhotoReadyScreen(Bitmap bitmap) { + final SavePhotoFragment fragment = SavePhotoFragment.newInstance(); + fragment.setPhoto(bitmap); + fragment.setListener(this); + getSupportFragmentManager() + .beginTransaction() + .replace(R.id.container, fragment, SAVE_PHOTO_FRAGMENT) + .addToBackStack(fragment.toString()) + .commit(); + System.out.println("Inside save photo screen method"); + } + + @Override + public void onBestFrameReady(Bitmap bitmap) { + this.bitmap = bitmap; + if(fromLoginPage){ + verifyPhoto(bitmap); + } + showPhotoReadyScreen(bitmap); + } + + private void verifyPhoto(Bitmap bitmap){ + fragment.showWaitState(); + login=preferences.getUsername(); + System.out.println("Value of login while verification " + login); + try { + if (thread != null) + thread.join(); + }catch (InterruptedException e) { + e.printStackTrace(); + } + VerifyApiInterface verifyApi; + if (BuildConfig.IS_OFFLINE_VERSION) { + verifyApi = new VerifyApiImplLunaLocal(this, photoProcessor, login, this); + } else { //if (preferences.getLuna2()) { + Log.i("LUNA2 ", preferences.getLuna2Server()); + verifyApi = new VerifyApiImplLuna2(this, preferences.getLuna2Server(), login, api, this, bitmap, preferences.getEncodedUserData()); + } + + verifStartTime = System.nanoTime(); + verifyApi.verifyPerson(); + } + + @Override + public void onTimeout(FaceNotFoundFragment.Reason reason) { + final FaceNotFoundFragment fragment = FaceNotFoundFragment.newInstance(); + fragment.setReason(reason); + fragment.setListener(this); + getSupportFragmentManager() + .beginTransaction() + .replace(R.id.container, fragment, FACE_NOT_FOUND_FRAGMENT) + .addToBackStack(fragment.toString()) + .commit(); + } + + @Override + public void onNeedCameraPermission() { + goToAppDetails(R.string.permission_need_for_register); + } + + @Override + public void onInteractionWaitingOpenedEyes() {} + + @Override + public void onTimeout(){} + + @Override + public void onLivenessResult(int livenessState, int blinkState, int livenessType){} + + @Override + public void onRetryClick() { + onBackPressed(); + } + + @Override + public boolean onOptionsItemSelected(MenuItem menuItem) { + if (menuItem.getItemId() == android.R.id.home) { + if (getSupportFragmentManager().findFragmentByTag(SAVE_PHOTO_FRAGMENT) != null) { + getSupportFragmentManager().popBackStack(); + getSupportFragmentManager().popBackStack(); + return true; + } + } + return super.onOptionsItemSelected(menuItem); + } + + @Override + public void onSaveClick() { + registerPerson(); + } + + private void registerPerson() { + RegisterApiInterface registerApi; + try { + if (thread != null) { + thread.join(); + } + }catch (InterruptedException e){ + e.printStackTrace(); + } + + if (BuildConfig.IS_OFFLINE_VERSION) { + registerApi = new RegisterApiImplLocal(this, registrationModel, photoProcessor, this, bitmap); + } else { + registerApi = new RegisterApiImplLuna2(this, preferences.getLuna2Server(), registrationModel, api, locationHelper, this, bitmap, preferences.getEncodedUserData()); + } + + registerApi.registerPerson(); + } + + private void SaveBitmapToGallery(Bitmap finalBitmap) { + String root = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString(); + + File myDir = new File(root + "/saved_images"); + myDir.mkdirs(); + + File file = null; + int num = 0; + // find next name + do { + try { + file = new File (myDir, new String(SAVE_PHOTO_NAME + num + ".jpg")); + } catch (Exception e) { + e.printStackTrace(); + break; + } + + ++num; + } + while(file.exists()); + + try { + FileOutputStream out = new FileOutputStream(file); + finalBitmap.compress(Bitmap.CompressFormat.JPEG, 50, out); + out.flush(); + out.close(); + + } catch (Exception e) { + e.printStackTrace(); + } + + // Tell the media scanner about the new file so that it is + // immediately available to the user. + MediaScannerConnection.scanFile(this, new String[] { file.toString() }, null, + new MediaScannerConnection.OnScanCompletedListener() { + public void onScanCompleted(String path, Uri uri) { + Log.i("ExternalStorage", "Scanned " + path + ":"); + Log.i("ExternalStorage", "-> uri=" + uri); + } + }); + System.out.println("Inside saving image method"); + } + + @Override + public void onRegistrationFail(Throwable throwable) { + + if(throwable instanceof RegisterApiImplLuna2.InternetConnectionException){ + Toast.makeText(this,getResources().getString(R.string.bad_internet_conneciton), Toast.LENGTH_LONG).show(); + }else if(throwable instanceof RegisterApiImplLuna2.SocketTimeOutException || + throwable instanceof SocketException) { + Toast.makeText(this,getResources().getString(R.string.TimeOut), Toast.LENGTH_LONG).show(); + }else if(throwable instanceof RegisterApiImplLuna2.WrongAccDataException){ + Toast.makeText(this,getResources().getString(R.string.bad_acc_data), Toast.LENGTH_LONG).show(); + }else if(throwable instanceof RegisterApiImplLuna2.WrongServAddrException || + throwable instanceof IllegalArgumentException){ + Toast.makeText(this,getResources().getString(R.string.bad_server_address), Toast.LENGTH_LONG).show(); + }else if(throwable instanceof retrofit2.adapter.rxjava.HttpException ){ + Toast.makeText(this,throwable.getMessage(), Toast.LENGTH_LONG).show(); + } + else if(throwable instanceof RegisterApiImplLocal.DescriptorNotExtractedException) { + Toast.makeText(this,throwable.getMessage(), Toast.LENGTH_LONG).show(); + } + + if(preferences.getLuna2()){ + Storage.getInstance().clearConnectionFlags(); + } + if (getSupportFragmentManager().findFragmentByTag(SAVE_PHOTO_FRAGMENT) != null) { + getSupportFragmentManager().popBackStack(); + getSupportFragmentManager().popBackStack(); + } + } + + @Override + public void onRegistrationSuccess() { + preferences.setServerChanged(false); + if (preferences.getSavePhoto()) { + RxPermissions.getInstance(this) + .request(Manifest.permission.WRITE_EXTERNAL_STORAGE) + .subscribe(granted -> { + if (granted) { + SaveBitmapToGallery(bitmap); + + Toast.makeText(this, R.string.photo_saved_to_gallery, Toast.LENGTH_SHORT).show(); + } else { + Toast.makeText(this, R.string.permission_need_for_write_external, Toast.LENGTH_SHORT).show(); + } + + // finish on any case + finishRegistration(); + }); + } + else + { + finishRegistration(); + } + } + + private void finishRegistration() + { + preferences.setUsername(registrationModel.login); + + // preferences.setPin(registrationModel.password); + Intent intent = new Intent(RegisterFromCheckActivity.this, LoginActivityNew.class); + startActivity(intent); + finish(); + } + + @Override + public void onVerificationSuccess(SearchResult searchResult) { + verifEndTime = System.nanoTime(); + preferences.setServerChanged(false); + final List persons = searchResult.getPersons(); + if (persons != null && !persons.isEmpty()) { + final SearchResultPerson person = persons.get(0); + if (person.similarity > Config.MIN_SIMILARITY) { + onFaceAuthSuccess(); + } else { + onFaceAuthFail(AuthenticationActivity.AuthFailReason.SIMILARITY); + } + } else { + onFaceAuthFail(AuthenticationActivity.AuthFailReason.SIMILARITY); + } + } + + @Override + public void onVerificationFail(Throwable throwable) { + + } + + private void onFaceAuthSuccess() { + showSuccess(); + /*if (preferences.getFingerAuth()) { + onFingerClick(finger); + } else { + showSuccess(); + }*/ + } + private void showSuccess() { + + + + final Intent intent = new Intent(RegisterFromCheckActivity.this, CheckInActivity.class); + intent.putExtra(AuthSuccessActivity.LOGIN, login); + intent.putExtra("FromRegisterCheck", true); + + if (BuildConfig.IS_OFFLINE_VERSION) { + intent.putExtra(AuthSuccessActivity.TIME, (int) (((double) (verifEndTime - verifStartTime)) / 1e6)); + } + + startActivity(intent); + + finish(); + + + + } + + private void onFaceAuthFail(AuthenticationActivity.AuthFailReason reason) { + if (faceFailCount < 4) { + final FaceNotRecognizedFragment fragment = FaceNotRecognizedFragment.newInstance(); + fragment.setListener(this); + if (reason == AuthenticationActivity.AuthFailReason.SIMILARITY && BuildConfig.IS_OFFLINE_VERSION) + { + fragment.setVerificationTime((int)((double)(verifEndTime - verifStartTime) / 1e6)); + } + fragment.setFailReason(reason); + showFragment(fragment); + } else { + showFail(); + } + } + + private void showFail() { + Toast.makeText(this, R.string.access_denied, Toast.LENGTH_SHORT).show(); + finish(); + } + + private void showFragment(Fragment fragment) { + final FragmentManager fragmentManager = getSupportFragmentManager(); + if (fragmentManager.findFragmentByTag(fragment.toString()) == null) { + if (!goingSomewhere) { + goingSomewhere = true; + fragmentManager + .beginTransaction() + .replace(R.id.container, fragment, fragment.toString()) + .commit(); + goingSomewhere = false; + } + } + } +} \ No newline at end of file diff --git a/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/ReportActivity.java b/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/ReportActivity.java new file mode 100644 index 0000000..a849969 --- /dev/null +++ b/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/ReportActivity.java @@ -0,0 +1,203 @@ +package ru.visionlab.femdemo; + +import androidx.appcompat.app.AppCompatActivity; + +import android.app.DatePickerDialog; +import android.app.ProgressDialog; +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.widget.Button; +import android.widget.DatePicker; +import android.widget.ImageButton; +import android.widget.LinearLayout; +import android.widget.TextView; +import android.widget.Toast; + +import com.android.volley.Request; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.StringRequest; +import com.android.volley.toolbox.Volley; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.Calendar; +import java.util.HashMap; +import java.util.Map; + +public class ReportActivity extends AppCompatActivity { + + Button btnReport; + ImageButton back; + + LinearLayout fromDate,toDate; + TextView textFromDate,textToDate; + + int yearFrom,monthOfYearFrom,dayOfmonthFrom; + int yearTo,monthOfYearTo,dayOfmonthTo; + + String valuefromApi=""; + + String passingDateFrom,passingDateTo; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_report); + + btnReport = findViewById(R.id.btnReport); + btnReport.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + + Intent intent = new Intent(ReportActivity.this, ReportDetailsActivity.class); + intent.putExtra("passingDateFrom",passingDateFrom); + intent.putExtra("passingDateTo",passingDateTo); + startActivity(intent); + //getReport(); + } + }); + back = findViewById(R.id.back); + back.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + /*Intent intent = new Intent(ReportActivity.this, CheckInActivity.class); + intent.putExtra("backToCheck",true); + startActivity(intent);*/ + onBackPressed(); + } + }); + + fromDate = findViewById(R.id.fromDate); + textFromDate = findViewById(R.id.textFromDate); + fromDate.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + + final Calendar c = Calendar.getInstance(); + int year = c.get(Calendar.YEAR); + int month = c.get(Calendar.MONTH); + int day = c.get(Calendar.DAY_OF_MONTH); + + DatePickerDialog datePickerDialog = new DatePickerDialog( + // on below line we are passing context. + ReportActivity.this, + new DatePickerDialog.OnDateSetListener() { + @Override + public void onDateSet(DatePicker view, int year, + int monthOfYear, int dayOfMonth) { + // on below line we are setting date to our text view. + textFromDate.setText(dayOfMonth + "/" + (monthOfYear + 1) + "/" + year); + + yearFrom = year; + dayOfmonthFrom = dayOfMonth; + monthOfYearFrom = monthOfYear; + + System.out.println("Date from values: " + dayOfmonthFrom + "/" + (monthOfYearFrom + 1) + "/" + yearFrom); + + passingDateFrom = dayOfmonthFrom + "/" + (monthOfYearFrom + 1) + "/" + yearFrom; + System.out.println("passingDateFrom " + passingDateFrom); + } + }, + // on below line we are passing year, + // month and day for selected date in our date picker. + year, month, day); + // at last we are calling show to + // display our date picker dialog. + datePickerDialog.show(); + + } + }); + + toDate = findViewById(R.id.toDate); + textToDate = findViewById(R.id.textToDate); + toDate.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + + final Calendar c = Calendar.getInstance(); + int year = c.get(Calendar.YEAR); + int month = c.get(Calendar.MONTH); + int day = c.get(Calendar.DAY_OF_MONTH); + + DatePickerDialog datePickerDialog = new DatePickerDialog( + // on below line we are passing context. + ReportActivity.this, + new DatePickerDialog.OnDateSetListener() { + @Override + public void onDateSet(DatePicker view, int year, + int monthOfYear, int dayOfMonth) { + // on below line we are setting date to our text view. + textToDate.setText(dayOfMonth + "/" + (monthOfYear + 1) + "/" + year); + + yearTo = year; + dayOfmonthTo = dayOfMonth; + monthOfYearTo = monthOfYear; + + System.out.println("Date from values: " + dayOfmonthTo + "/" + (monthOfYearTo + 1) + "/" + yearTo); + + passingDateTo = dayOfmonthTo + "/" + (monthOfYearTo + 1) + "/" + yearTo; + System.out.println("passingDateTo " + passingDateTo); + + } + }, + // on below line we are passing year, + // month and day for selected date in our date picker. + year, month, day); + // at last we are calling show to + // display our date picker dialog. + datePickerDialog.show(); + + } + }); + + } + + public void getReport(){ + final ProgressDialog loading = ProgressDialog.show(ReportActivity.this, "Authenticating", "Please wait ", false, false); + //String url= "http://43.242.212.92:7001/api/lgt/AttendanceReport"; + //String url= "http://43.242.212.92:7001/api/lgt/AttendanceReport?employeeid="+"101"+"&fromdate="+"06/06/2023"+"&todate="+"06/07/2023"; + String url= "http://43.242.212.92:7001/api/lgt/AttendanceReport?employeeid="+"101"+"&fromdate="+dayOfmonthFrom + "/" + (monthOfYearFrom + 1) + "/" + yearFrom+"&todate="+dayOfmonthTo + "/" + (monthOfYearTo + 1) + "/" + yearTo; + StringRequest stringRequest=new StringRequest(Request.Method.GET, url, new com.android.volley.Response.Listener() { + @Override + public void onResponse(String response) { + try { + JSONObject jsonObject=new JSONObject(response); + JSONObject jb1=jsonObject.getJSONObject("statusModel"); + valuefromApi = jb1.getString("_statusMessage"); + System.out.println("Report status from api " + valuefromApi); + } catch (JSONException e) { + throw new RuntimeException(e); + } + Toast.makeText(ReportActivity.this, valuefromApi, Toast.LENGTH_SHORT).show(); + loading.dismiss(); + } + + }, new com.android.volley.Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { +// Log.d("error-=>",error.getMessage()); + Toast.makeText(ReportActivity.this, "Failed to get response = " + error.getMessage(), Toast.LENGTH_SHORT).show(); + loading.dismiss(); + System.out.println("Error message: "+ error.getMessage()); + + + } + }) + { + @Override + protected Map getParams() { + Map params = new HashMap(); + + /*params.put("employeeid", "101"); + params.put("fromdate", "06/06/2023"); + params.put("todate", "06/07/2023");*/ + + return params; + } + }; + Volley.newRequestQueue(ReportActivity.this).add(stringRequest); + } +} \ No newline at end of file diff --git a/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/ReportDetailsActivity.java b/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/ReportDetailsActivity.java new file mode 100644 index 0000000..ed4d2a2 --- /dev/null +++ b/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/ReportDetailsActivity.java @@ -0,0 +1,122 @@ +package ru.visionlab.femdemo; + +import androidx.appcompat.app.AppCompatActivity; + +import android.app.ProgressDialog; +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.widget.ImageButton; +import android.widget.ImageView; +import android.widget.TextView; +import android.widget.Toast; + +import com.android.volley.Request; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.StringRequest; +import com.android.volley.toolbox.Volley; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.HashMap; +import java.util.Map; + +public class ReportDetailsActivity extends AppCompatActivity { + + String passingDateFrom,passingDateTo; + TextView empIdVal,pdateVal,Check_InVal,Check_OutVal,statusVal; + + ImageView back; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_report_details); + + empIdVal = findViewById(R.id.empIdVal); + pdateVal = findViewById(R.id.pdateVal); + Check_InVal = findViewById(R.id.Check_InVal); + Check_OutVal = findViewById(R.id.Check_OutVal); + statusVal = findViewById(R.id.statusVal); + + back = findViewById(R.id.back); + back.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Intent intent = new Intent(ReportDetailsActivity.this, ReportActivity.class); + startActivity(intent); + } + }); + + + + Intent intent = getIntent(); + passingDateFrom = intent.getStringExtra("passingDateFrom"); + passingDateTo = intent.getStringExtra("passingDateTo"); + + System.out.println("passingDateFrom " + passingDateFrom + " " + passingDateTo); + + getReport(); + } + + public void getReport(){ + final ProgressDialog loading = ProgressDialog.show(ReportDetailsActivity.this, "Authenticating", "Please wait ", false, false); + + String url= "http://43.242.212.92:7001/api/lgt/AttendanceReport?employeeid="+"101"+"&fromdate="+passingDateFrom+"&todate="+passingDateTo; + StringRequest stringRequest=new StringRequest(Request.Method.GET, url, new com.android.volley.Response.Listener() { + @Override + public void onResponse(String response) { + try { + JSONObject jsonObject=new JSONObject(response); + JSONArray jsonArray=jsonObject.getJSONArray("_lstAttendanceData"); + JSONObject jb1=jsonArray.getJSONObject(0); + String EmployeeID = jb1.getString("EmployeeID"); + String pdate = jb1.getString("pdate"); + String Check_In = jb1.getString("Check_In"); + String Check_Out = jb1.getString("Check_Out"); + String status = jb1.getString("status"); + + empIdVal.setText(EmployeeID); + pdateVal.setText(pdate); + Check_InVal.setText(Check_In); + Check_OutVal.setText(Check_Out); + statusVal.setText(status); + + System.out.println("data from api " + EmployeeID + " " + pdate+" "+Check_In+" "+Check_Out+" "+status); + } catch (JSONException e) { + throw new RuntimeException(e); + } + + + Toast.makeText(ReportDetailsActivity.this, "Successfull" , Toast.LENGTH_SHORT).show(); + loading.dismiss(); + } + + }, new com.android.volley.Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { +// Log.d("error-=>",error.getMessage()); + Toast.makeText(ReportDetailsActivity.this, "Failed to get response = " + error.getMessage(), Toast.LENGTH_SHORT).show(); + loading.dismiss(); + System.out.println("Error message: "+ error.getMessage()); + + + } + }) + { + @Override + protected Map getParams() { + Map params = new HashMap(); + + /*params.put("employeeid", "101"); + params.put("fromdate", "06/06/2023"); + params.put("todate", "06/07/2023");*/ + + return params; + } + }; + Volley.newRequestQueue(ReportDetailsActivity.this).add(stringRequest); + } +} \ No newline at end of file diff --git a/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/Splashactivity.java b/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/Splashactivity.java index 48f1828..5131472 100644 --- a/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/Splashactivity.java +++ b/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/Splashactivity.java @@ -2,12 +2,16 @@ package ru.visionlab.femdemo; import androidx.appcompat.app.AppCompatActivity; +import android.content.Context; import android.content.Intent; +import android.content.SharedPreferences; import android.os.Bundle; import android.os.Handler; import android.view.WindowManager; +import cn.pedant.SweetAlert.SweetAlertDialog; import ru.visionlab.femdemo.login.LoginActivity; +import ru.visionlab.femdemo.login.LoginActivityNew; public class Splashactivity extends AppCompatActivity { @@ -23,15 +27,28 @@ public class Splashactivity extends AppCompatActivity { public void run() { // on below line we are // creating a new intent - Intent i = new Intent(Splashactivity.this, LoginActivity.class); + SharedPreferences sharedPreferences = getSharedPreferences("MyPrefs", Context.MODE_PRIVATE); + boolean loggedBefore = sharedPreferences.getBoolean("loggedBefore",false); + + System.out.println("Value of loggedBefore "+ loggedBefore); + + if(loggedBefore){ + Intent i = new Intent(Splashactivity.this, LoginActivity.class); + startActivity(i); + } + else { + + + Intent i = new Intent(Splashactivity.this, LoginActivity.class); // on below line we are + // starting a new activity. + startActivity(i); + + // on the below line we are finishing + // our current activity. + finish(); + } - // on below line we are - // starting a new activity. - startActivity(i); - // on the below line we are finishing - // our current activity. - finish(); } }, 2000); } diff --git a/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/Storage.java b/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/Storage.java index 65e3797..5f8cc90 100644 --- a/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/Storage.java +++ b/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/Storage.java @@ -88,8 +88,10 @@ public class Storage { } public void addToStorageLunaLocal(String login, String Descriptor) { + + System.out.println("making sure this metyhos " + login +" "+ Descriptor); if (!LunaLocalData.containsKey(login)){ - Log.i(TAG, "Pushed new person!: login"+login+"DESCR"+LunaLocalData.get(login)); + Log.i(TAG, "Pushed new person!: login "+login+" DESCR "+Descriptor); LunaLocalData.put(login,Descriptor); } else{ @@ -102,10 +104,10 @@ public class Storage { public String getDescriptorLocal(String Login){ if(LunaLocalData.containsKey(Login)){ - Log.i(TAG,"Returned descriptor is"+LunaLocalData.get(Login)); + Log.i(TAG,"Returned descriptor is "+LunaLocalData.get(Login)); return LunaLocalData.get(Login); } - Log.i(TAG,"NO SUCH LOGIN!!!"); + Log.i(TAG,"NO SUCH LOGIN!!!"+Login); return null; } @@ -258,9 +260,11 @@ public class Storage { public void updateOfflineData(){ SharedPreferences sharedpref = context.getSharedPreferences("Offline",Context.MODE_PRIVATE); + try{ if(sharedpref != null){ String jsonString = sharedpref.getString("My_map",(new JSONObject()).toString()); + Log.i(TAG,"Inside updateOfflineData "+jsonString); JSONObject jsonObject = new JSONObject(jsonString); Iterator keyStr = jsonObject.keys(); while(keyStr.hasNext()){ diff --git a/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/api/JsonPlaceHolderApi.java b/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/api/JsonPlaceHolderApi.java index 70b6fa1..471705f 100644 --- a/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/api/JsonPlaceHolderApi.java +++ b/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/api/JsonPlaceHolderApi.java @@ -6,18 +6,22 @@ import retrofit2.Call; import retrofit2.http.Body; import retrofit2.http.FieldMap; import retrofit2.http.FormUrlEncoded; +import retrofit2.http.Headers; import retrofit2.http.POST; import ru.visionlab.femdemo.models.RegistrationNew; import ru.visionlab.femdemo.models.Users; public interface JsonPlaceHolderApi { - @FormUrlEncoded + // @FormUrlEncoded @POST("services/app/Employee/RegisterEmployee") - //Call createpost(@Body RegistrationNew registrationNew); - Call createpost(@FieldMap Map fields); + Call createpost(@Body RegistrationNew registrationNew); + //Call createpost(@FieldMap Map fields); - @FormUrlEncoded - @POST("posts") - Call login(@FieldMap Map fields); + //@FormUrlEncoded + @Headers("Content-Type:application/json") + @POST("TokenAuth/LogIn") + //Call login(@Body Map fields); + Call login(@Body Users users); + //Call login(@FieldMap Map fields); } diff --git a/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/api/RegisterApiImplLocal.java b/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/api/RegisterApiImplLocal.java index 634afb2..3f0067c 100644 --- a/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/api/RegisterApiImplLocal.java +++ b/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/api/RegisterApiImplLocal.java @@ -1,10 +1,13 @@ package ru.visionlab.femdemo.api; import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; import android.graphics.Bitmap; import android.util.Base64; import android.util.Log; +import cn.pedant.SweetAlert.SweetAlertDialog; import ru.visionlab.femdemo.Core.PhotoProcessor; import ru.visionlab.femdemo.Storage; import ru.visionlab.femdemo.register.RegistrationModel; @@ -41,17 +44,36 @@ public class RegisterApiImplLocal implements RegisterApiInterface { @Override public void registerPerson() { - Log.i(TAG,"Login is"+registrationModel.login); - // photoProcessor.calcFaceDescriptorFromBestFrame(); - byte[] bestFrameDescriptorByteArray = photoProcessor.getFaceDescriptorByteArray(); + Log.i("Route", "registerPerson registerapiimplocal"); + //Log.i(TAG,"Login is"+registrationModel.login); - if (bestFrameDescriptorByteArray == null || bestFrameDescriptorByteArray.length == 0) { - onFail(new DescriptorNotExtractedException("FAILED to register: could not extract descriptor ")); + if(registrationModel == null){ + new SweetAlertDialog(context, SweetAlertDialog.WARNING_TYPE) + .setTitleText("Face not recognised") + .setConfirmText("Back to login") + .setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() { + @Override + public void onClick(SweetAlertDialog sDialog) { + sDialog.dismissWithAnimation(); + + + } + }) + .setContentText("OK").show(); } else{ - String descriptorEncrypted = Base64.encodeToString(bestFrameDescriptorByteArray, Base64.DEFAULT); - onSuccess(descriptorEncrypted); + // photoProcessor.calcFaceDescriptorFromBestFrame(); + byte[] bestFrameDescriptorByteArray = photoProcessor.getFaceDescriptorByteArray(); + + if (bestFrameDescriptorByteArray == null || bestFrameDescriptorByteArray.length == 0) { + onFail(new DescriptorNotExtractedException("FAILED to register: could not extract descriptor ")); + } + else{ + String descriptorEncrypted = Base64.encodeToString(bestFrameDescriptorByteArray, Base64.DEFAULT); + onSuccess(descriptorEncrypted); + } } + } private void onFail(Throwable throwable) { @@ -59,9 +81,16 @@ public class RegisterApiImplLocal implements RegisterApiInterface { } private void onSuccess(String descriptor) { + Log.i("Route", "onSuccess"); Log.i(TAG,"Desctiptor has been saved : descr = "+descriptor); System.out.println("Value of login after registration " + registrationModel.login); + SharedPreferences sharedPreferences = context.getSharedPreferences("MyPrefs", Context.MODE_PRIVATE); + SharedPreferences.Editor editor = sharedPreferences.edit(); + editor.putString("login",registrationModel.login); + editor.putString("Descriptor",descriptor); + editor.commit(); Storage.getInstance().addToStorageLunaLocal(registrationModel.login, descriptor); + listener.onRegistrationSuccess(); } } diff --git a/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/authentication/AuthenticationActivity.java b/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/authentication/AuthenticationActivity.java index d157def..abd8351 100644 --- a/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/authentication/AuthenticationActivity.java +++ b/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/authentication/AuthenticationActivity.java @@ -37,6 +37,7 @@ import butterknife.ButterKnife; import butterknife.OnClick; import retrofit2.adapter.rxjava.HttpException; import ru.visionlab.femdemo.App; +import ru.visionlab.femdemo.CheckInActivity; import ru.visionlab.femdemo.Config; import ru.visionlab.femdemo.Core.PhotoProcessor; import ru.visionlab.femdemo.BuildConfig; @@ -397,10 +398,12 @@ public class AuthenticationActivity extends ToolbarActivity implements PinFragme } private void onFaceAuthSuccess() { + System.out.println("Success after face recognition"); if (preferences.getFingerAuth()) { onFingerClick(finger); } else { showSuccess(); + } } diff --git a/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/base/PhotoFragment.java b/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/base/PhotoFragment.java index 383f25f..b3aaf1e 100644 --- a/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/base/PhotoFragment.java +++ b/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/base/PhotoFragment.java @@ -274,7 +274,7 @@ public class PhotoFragment extends BaseFragment implements Camera.PreviewCallbac @Override public void onError() { - System.out.println("On photo success2"); + System.out.println("On photo failure"); } }); diff --git a/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/di/NetworkModule.java b/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/di/NetworkModule.java index c9bee3a..44492d2 100644 --- a/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/di/NetworkModule.java +++ b/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/di/NetworkModule.java @@ -76,6 +76,8 @@ public class NetworkModule { // Install the all-trusting trust manager final SSLContext sslContext; try { + + sslContext = SSLContext.getInstance("SSL"); sslContext.init(null, trustAllCerts, new java.security.SecureRandom()); // Create an ssl socket factory with our all-trusting manager diff --git a/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/login/LoginActivity.java b/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/login/LoginActivity.java index f4c0e5c..87114a8 100644 --- a/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/login/LoginActivity.java +++ b/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/login/LoginActivity.java @@ -2,7 +2,9 @@ package ru.visionlab.femdemo.login; import android.Manifest; import android.app.Activity; +import android.content.Context; import android.content.Intent; +import android.content.SharedPreferences; import android.hardware.Camera; import android.os.Bundle; @@ -75,9 +77,11 @@ public class LoginActivity extends BaseActivity { LinearLayout register; String user = ""; Button login_new; - Button reg_new; + // Button reg_new; LinearLayoutCompat lay_licence_verify; + TextView reg_new; + @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -89,6 +93,12 @@ public class LoginActivity extends BaseActivity { lay_licence_verify = findViewById(R.id.lay_licence_verify); + SharedPreferences sharedPreferences = getSharedPreferences("MyPrefs", Context.MODE_PRIVATE); + String login = sharedPreferences.getString("login",""); + String Descriptor = sharedPreferences.getString("Descriptor",""); + + System.out.println("Value of login and Descriptor " + login+" "+Descriptor ); + login_new = findViewById(R.id.login_new); login_new.setOnClickListener(new View.OnClickListener() { diff --git a/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/login/LoginActivityNew.java b/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/login/LoginActivityNew.java index 10f5bde..09c0ef5 100644 --- a/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/login/LoginActivityNew.java +++ b/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/login/LoginActivityNew.java @@ -1,16 +1,43 @@ package ru.visionlab.femdemo.login; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; +import android.app.AlertDialog; +import android.app.ProgressDialog; +import android.content.Context; +import android.content.DialogInterface; import android.content.Intent; +import android.content.SharedPreferences; +import android.content.pm.PackageManager; +import android.location.Location; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.ImageButton; +import android.widget.ImageView; import android.widget.Toast; +import com.android.volley.AuthFailureError; +import com.android.volley.NetworkResponse; +import com.android.volley.Request; +import com.android.volley.RequestQueue; +import com.android.volley.ServerError; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.HttpHeaderParser; +import com.android.volley.toolbox.JsonObjectRequest; +import com.android.volley.toolbox.StringRequest; +import com.android.volley.toolbox.Volley; +import com.google.android.gms.location.FusedLocationProviderClient; +import com.google.android.gms.tasks.OnSuccessListener; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.UnsupportedEncodingException; import java.util.HashMap; import java.util.Map; @@ -22,6 +49,7 @@ import retrofit2.converter.gson.GsonConverterFactory; import ru.visionlab.constant.Url; import ru.visionlab.femdemo.CheckInActivity; import ru.visionlab.femdemo.R; +import ru.visionlab.femdemo.Storage; import ru.visionlab.femdemo.api.CallApiService; import ru.visionlab.femdemo.api.JsonPlaceHolderApi; import ru.visionlab.femdemo.authentication.AuthenticationActivity; @@ -32,6 +60,9 @@ import ru.visionlab.femdemo.register.RegisterActivityNew; public class LoginActivityNew extends AppCompatActivity { + public static final String MyPREFERENCES = "MyPrefs" ; + public static final String ID = "id"; + Button btnSignin; ImageButton back; @@ -45,6 +76,13 @@ public class LoginActivityNew extends AppCompatActivity { String tenancyName =""; + private static final int LOCATION_PERMISSION_REQUEST_CODE = 1; + private FusedLocationProviderClient fusedLocationClient; + + ImageView faceImage; + + SharedPreferences sharedpreferences; + String empIdShared=""; @Override protected void onCreate(Bundle savedInstanceState) { @@ -53,6 +91,22 @@ public class LoginActivityNew extends AppCompatActivity { edt_empId = findViewById(R.id.edt_empId); edt_pass = findViewById(R.id.edt_pass); + + sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE); + + SharedPreferences shared = getSharedPreferences("MyPrefs", MODE_PRIVATE); + String login = shared.getString("login", ""); + String Descriptor = shared.getString("Descriptor", ""); + + System.out.println("value of login and Descriptor in login new " + login + " " + Descriptor); + + if(Descriptor != null){ + Storage.getInstance().addToStorageLunaLocal(login,Descriptor); + } + + if(login == null || login.equals("")){ + Toast.makeText(LoginActivityNew.this,"Please register before logging in ",Toast.LENGTH_SHORT).show(); + } createRetrofit(); empId = edt_empId.getText().toString().trim(); @@ -63,20 +117,56 @@ public class LoginActivityNew extends AppCompatActivity { btnSignin = findViewById(R.id.btnSignin); - btnSignin.setOnClickListener(new View.OnClickListener() { + if(!login.equals("")){ + btnSignin.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { + /*if (ContextCompat.checkSelfPermission(LoginActivityNew.this, android.Manifest.permission.ACCESS_FINE_LOCATION) + == PackageManager.PERMISSION_GRANTED) { + // Permission granted, so request location updates + requestLocationUpdates(); + } else { + // Permission not granted, request it + ActivityCompat.requestPermissions(LoginActivityNew.this, + new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION}, + LOCATION_PERMISSION_REQUEST_CODE); + }*/ + isAllFieldsChecked = CheckAllFields(); if(isAllFieldsChecked) { - // login(); - Intent intent = new Intent(LoginActivityNew.this, RegisterActivity.class); + // login(); + System.out.println("After login activity new "); + /*Intent intent = new Intent(LoginActivityNew.this, RegisterActivity.class); intent.putExtra("FromLoginPage",true); - startActivity(intent); + startActivity(intent);*/ + //login(); + //loginVolley(); + loginVolleyNil(); + //loginRetro(); } } }); + } + else{ + Toast.makeText(LoginActivityNew.this,"Please register before logging in ",Toast.LENGTH_SHORT).show(); + } + + + faceImage = findViewById(R.id.faceImage); + + if(!login.equals("")){ + faceImage.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Intent intent = new Intent(LoginActivityNew.this, RegisterActivity.class); + intent.putExtra("FromLoginPage",true); + startActivity(intent); + } + }); + } + back = findViewById(R.id.back); back.setOnClickListener(new View.OnClickListener() { @@ -99,6 +189,89 @@ public class LoginActivityNew extends AppCompatActivity { jsonPlaceHolderApi=retrofit.create(JsonPlaceHolderApi.class); } + private void requestLocationUpdates() { + 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) { + // 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; + } + fusedLocationClient = new FusedLocationProviderClient(getApplicationContext()); + fusedLocationClient.getLastLocation() + .addOnSuccessListener(this, new OnSuccessListener() { + @Override + public void onSuccess(Location location) { + if (location != null) { + double latitude = location.getLatitude(); + double longitude = location.getLongitude(); + + // Do something with the latitude and longitude + String message = "Latitude: " + latitude + "\nLongitude: " + longitude; + System.out.println("My current location: "+ message); + Toast.makeText(LoginActivityNew.this, message, Toast.LENGTH_SHORT).show(); + Location target = new Location(""); + target.setLatitude(latitude); + target.setLongitude(longitude); + + Location current = new Location(""); + current.setLatitude(20.5109958); + current.setLongitude(88.4009709); + + float distance = current.distanceTo(target); + System.out.println("Distance: "+distance); + if(distance<500){ + showFailedDialog(); + } + else{ + showSuccessDialog(); + + // Toast.makeText(CheckInActivity.this, "Attendance ready to be captured", Toast.LENGTH_SHORT).show(); + } + } else { + Toast.makeText(LoginActivityNew.this, "Location not available", Toast.LENGTH_SHORT).show(); + } + } + }); + + + } + + private void showSuccessDialog() { + AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder.setTitle("Success"); + builder.setMessage("Attendance ready to be captured."); + builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + Intent intent = new Intent(LoginActivityNew.this, RegisterActivity.class); + startActivity(intent); + // dialog.dismiss(); // Close the dialog. + } + }); + + AlertDialog dialog = builder.create(); + dialog.show(); + } + private void showFailedDialog() { + AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder.setTitle("Failed"); + builder.setMessage("You are out of range!Please get back to location"); + builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // Perform any necessary action when the user clicks the "OK" button. + dialog.dismiss(); // Close the dialog. + } + }); + + AlertDialog dialog = builder.create(); + dialog.show(); + } + private boolean CheckAllFields() { if (edt_empId.length() == 0) { @@ -118,11 +291,26 @@ public class LoginActivityNew extends AppCompatActivity { Map fields=new HashMap<>(); fields.put("employeeId",edt_empId.getText().toString()); fields.put("password",edt_pass.getText().toString()); - fields.put("tenancyName","facebio"); + fields.put("tenancyName","Testing"); /*Users users = new Users(empId,pass,tenancyName);*/ - CallApiService.getClient().login(fields); - Call call=jsonPlaceHolderApi.login(fields); + /*CallApiService.getClient().login(fields); + Call call=jsonPlaceHolderApi.login(fields);*/ + + Retrofit retrofit = new Retrofit.Builder() + .baseUrl("http://huaiglobal.com/api/") + // as we are sending data in json format so + // we have to add Gson converter factory + .addConverterFactory(GsonConverterFactory.create()) + // at last we are building our retrofit builder. + .build(); + // below line is to create an instance for our retrofit api class. + jsonPlaceHolderApi = retrofit.create(JsonPlaceHolderApi.class); + + Users users = new Users(edt_empId.getText().toString(),edt_pass.getText().toString(),"Testing"); + System.out.println("Login credentials: " + edt_empId.getText().toString() + " "+ edt_pass.getText().toString() + " "+"Testing"); + Call call = jsonPlaceHolderApi.login(users); + //Call call = jsonPlaceHolderApi.login(fields); call.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { @@ -137,6 +325,56 @@ public class LoginActivityNew extends AppCompatActivity { } else{ Toast.makeText(LoginActivityNew.this, "Error "+String.valueOf(response.code()), Toast.LENGTH_SHORT).show(); + System.out.println("Error: " + response.message()); + } + + } + + @Override + public void onFailure(Call call, Throwable t) { + Toast.makeText(LoginActivityNew.this, ""+t.getMessage(), Toast.LENGTH_SHORT).show(); + Log.e("error=",t.getMessage().toString()); + } + }); + } + public void loginRetro(){ + Map fields=new HashMap<>(); + fields.put("username","demouser1"); + fields.put("password","123"); + fields.put("imei","string"); + + /*Users users = new Users(empId,pass,tenancyName);*/ + /*CallApiService.getClient().login(fields); + Call call=jsonPlaceHolderApi.login(fields);*/ + + Retrofit retrofit = new Retrofit.Builder() + .baseUrl("http://43.242.212.92:7001/api/lgt/Login") + // as we are sending data in json format so + // we have to add Gson converter factory + .addConverterFactory(GsonConverterFactory.create()) + // at last we are building our retrofit builder. + .build(); + // below line is to create an instance for our retrofit api class. + jsonPlaceHolderApi = retrofit.create(JsonPlaceHolderApi.class); + + Users users = new Users("demouser1","123","string"); + System.out.println("Login credentials: " + edt_empId.getText().toString() + " "+ edt_pass.getText().toString() + " "+"Testing"); + Call call = jsonPlaceHolderApi.login(users); + //Call call = jsonPlaceHolderApi.login(fields); + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if(response.isSuccessful()) + { + response.code(); + Log.e("login response code=", String.valueOf(response.code())); + Toast.makeText(LoginActivityNew.this, "Logging in ", Toast.LENGTH_SHORT).show(); + + + } + else{ + Toast.makeText(LoginActivityNew.this, "Error "+String.valueOf(response.code()), Toast.LENGTH_SHORT).show(); + System.out.println("Error: " + response.message()); } } @@ -148,4 +386,149 @@ public class LoginActivityNew extends AppCompatActivity { } }); } + public void loginVolley(){ + String url = "http://huaiglobal.com/api/TokenAuth/LogIn"; // Replace with your API endpoint URL + + RequestQueue queue = Volley.newRequestQueue(LoginActivityNew.this); + StringRequest request = new StringRequest(Request.Method.POST, url, new com.android.volley.Response.Listener() { + @Override + public void onResponse(String response) { + + + // on below line we are displaying a success toast message. + Toast.makeText(LoginActivityNew.this, "Data added to API", Toast.LENGTH_SHORT).show(); + + } + }, new com.android.volley.Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + // method to handle errors. + + + NetworkResponse response = error.networkResponse; + if (error instanceof ServerError && response != null) { + try { + String res = new String(response.data, + HttpHeaderParser.parseCharset(response.headers, "utf-8")); + // Now you can use any deserializer to make sense of data + JSONObject obj = new JSONObject(res); + System.out.println("Error message: "+ obj); + } catch (UnsupportedEncodingException e1) { + // Couldn't properly decode data to string + e1.printStackTrace(); + } catch (JSONException e2) { + // returned data is not JSONObject? + e2.printStackTrace(); + } + } + + Toast.makeText(LoginActivityNew.this, "Fail to get response = " + error.getMessage(), Toast.LENGTH_SHORT).show(); + System.out.println("Error message: "+ error.getMessage()); + } + }) { + @Override + protected Map getParams() { + // below line we are creating a map for + // storing our values in key and value pair. + Map params = new HashMap(); + + // on below line we are passing our key + // and value pair to our parameters. + params.put("userNameOrEmailAddress", edt_empId.getText().toString()); + params.put("password", edt_pass.getText().toString()); + params.put("tenancyName", "Testing"); + + + + + + // at last we are + // returning our params. + return params; + } + @Override + public Map getHeaders() throws AuthFailureError { + HashMap headers = new HashMap(); + headers.put("Content-Type", "application/json; charset=utf-8"); + return headers; + } + /*@Override + public Map getHeaders() throws AuthFailureError { + Map params = new HashMap(); + params.put("Authorization", "bearer "+"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1laWRlbnRpZmllciI6IjUiLCJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoiYWRtaW4iLCJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9lbWFpbGFkZHJlc3MiOiJkYXNzYW5kaXBAc2VudGllbnRnZWVrcy5jb20iLCJBc3BOZXQuSWRlbnRpdHkuU2VjdXJpdHlTdGFtcCI6IjdFR1lVNFRBU1BUS05BREIzVEtHM0ZQNzdFQ1AzVjNBIiwiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS93cy8yMDA4LzA2L2lkZW50aXR5L2NsYWltcy9yb2xlIjoiQWRtaW4iLCJodHRwOi8vd3d3LmFzcG5ldGJvaWxlcnBsYXRlLmNvbS9pZGVudGl0eS9jbGFpbXMvdGVuYW50SWQiOiI0Iiwic3ViIjoiNSIsImp0aSI6IjYwOTFhMTgwLTkzMWItNGYwMS05ZWVjLTM3OTNkYmExMjkxYiIsImlhdCI6MTY5Mzg5OTk1NCwidG9rZW5fdmFsaWRpdHlfa2V5IjoiMzM3ZjAzMmEtN2I3NS00MTkzLWFhY2QtYjA3OWEyYjYxMjI0IiwidXNlcl9pZGVudGlmaWVyIjoiNUA0IiwidG9rZW5fdHlwZSI6IjAiLCJyZWZyZXNoX3Rva2VuX3ZhbGlkaXR5X2tleSI6Ijg1MTlmMjU3LWE3NmEtNDViOS05MDQ0LTU4ZTk0ZThhZTEwZSIsIm5iZiI6MTY5Mzg5OTk1NCwiZXhwIjoxNjkzOTg2MzU0LCJpc3MiOiJtdWx0aSIsImF1ZCI6Im11bHRpIn0.ImuWLPg85b7fN1nWzr1Es1L9j6xm7DrK4L_UxApzkqM"); + return params; + }*/ + }; + + queue.add(request); + } + + public void loginVolleyNil(){ + final ProgressDialog loading = ProgressDialog.show(LoginActivityNew.this, "Authenticating", "Please wait while logging", false, false); + String url= "http://43.242.212.92:7001/api/lgt/Login"; + StringRequest stringRequest=new StringRequest(Request.Method.POST, url, new com.android.volley.Response.Listener() { + @Override + public void onResponse(String response) { + + Log.d("data-=>",response); + String _employeeid = response.toString(); + System.out.println("Value of _employeeid " +_employeeid ); + /*try { + JSONObject jsonObject=new JSONObject(response); + empIdShared = jsonObject.getString("_employeeid"); + SharedPreferences.Editor editor = sharedpreferences.edit(); + editor.putString(ID, empIdShared); + editor.commit(); + } catch (JSONException e) { + throw new RuntimeException(e); + }*/ + loading.dismiss(); + Toast.makeText(LoginActivityNew.this, "Data added to API", Toast.LENGTH_SHORT).show(); + Intent intent = new Intent(LoginActivityNew.this, RegisterActivity.class); + intent.putExtra("FromLoginPage",true); + startActivity(intent); + + } + /*JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, url, null, new com.android.volley.Response.Listener() { + @Override + public void onResponse(JSONObject response) { + // inside the on response method. + // we are hiding our progress bar. + + try { + + String _employeeid = response.getString("_employeeid"); + String _employeename = response.getString("_employeename"); + + + + } catch (JSONException e) { + // if we do not extract data from json object properly. + // below line of code is use to handle json exception + e.printStackTrace(); + } + }*/ + }, new com.android.volley.Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { +// Log.d("error-=>",error.getMessage()); + Toast.makeText(LoginActivityNew.this, "Fail to get response = " + error.getMessage(), Toast.LENGTH_SHORT).show(); + System.out.println("Error message: "+ error.getMessage()); + + + } + }) + { + @Override + protected Map getParams() throws AuthFailureError { + HashMapmap=new HashMap<>(); + map.put("username","demouser1"); + map.put("password","123"); + map.put("imei","string"); + + return map; + } + }; + Volley.newRequestQueue(LoginActivityNew.this).add(stringRequest); + } } \ No newline at end of file diff --git a/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/register/RegisterActivity.java b/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/register/RegisterActivity.java index 206d149..40a351d 100644 --- a/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/register/RegisterActivity.java +++ b/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/register/RegisterActivity.java @@ -2,7 +2,9 @@ package ru.visionlab.femdemo.register; import android.Manifest; import android.annotation.SuppressLint; +import android.content.Context; import android.content.Intent; +import android.content.SharedPreferences; import android.graphics.Bitmap; import android.media.MediaScannerConnection; import android.net.Uri; @@ -37,7 +39,9 @@ import java.util.List; import javax.inject.Inject; import butterknife.BindView; +import cn.pedant.SweetAlert.SweetAlertDialog; import ru.PreferenceManager.PreferenceManager; +import ru.visionlab.femdemo.CheckInActivity; import ru.visionlab.femdemo.Config; import ru.visionlab.femdemo.Core.PhotoProcessor; import ru.visionlab.femdemo.App; @@ -103,7 +107,7 @@ public class RegisterActivity extends ToolbarActivity implements RegisterFragmen Bitmap photo2=null; Button save,retry; String encodedImage=""; - boolean fromLoginPage; + boolean fromLoginPage,FromNewCheck,checkinButton; private PhotoFragment fragment; String login; private long verifEndTime; @@ -113,6 +117,8 @@ public class RegisterActivity extends ToolbarActivity implements RegisterFragmen private boolean goingSomewhere = false; + String valueFromApiCheckIn; + @SuppressLint("MissingInflatedId") @@ -124,15 +130,25 @@ public class RegisterActivity extends ToolbarActivity implements RegisterFragmen //ButterKnife.bind(this); setToolbar(); + + SharedPreferences sharedPreferences = getSharedPreferences("MyPrefs", Context.MODE_PRIVATE); + String login = sharedPreferences.getString("login",""); + String Descriptor = sharedPreferences.getString("Descriptor",""); + + System.out.println("Value of login and Descriptor " + preferences.getUsername()+" "); Intent intent = getIntent(); fromLoginPage = intent.getBooleanExtra("FromLoginPage",true); - System.out.println("Value of FromLoginPage "+fromLoginPage); + checkinButton = intent.getBooleanExtra("checkinButton",false); + valueFromApiCheckIn = intent.getStringExtra("valueFromApiCheckIn"); + System.out.println("Value of FromLoginPage "+fromLoginPage + checkinButton + " "+ valueFromApiCheckIn); if(fromLoginPage){ showPhotoScreen(); } else { showRegisterScreen(); } + FromNewCheck = intent.getBooleanExtra("FromLoginPage",false); + System.out.println("Value of FromNewCheck "+FromNewCheck); /*back_img.setOnClickListener(new View.OnClickListener() { @@ -249,6 +265,7 @@ public class RegisterActivity extends ToolbarActivity implements RegisterFragmen } private void showRegisterScreen() { + Log.i("Route", "showRegisterScreen"); final RegisterFragment fragment = RegisterFragment.newInstance(); fragment.setListener(this); getSupportFragmentManager() @@ -280,9 +297,12 @@ public class RegisterActivity extends ToolbarActivity implements RegisterFragmen @Override public void onSignUpClick(RegistrationModel registrationModel) { + Log.i("Route", "onSignUpClick"); if((!BuildConfig.IS_OFFLINE_VERSION) && preferences.getLuna2()) { thread = new Thread(() -> { + Storage.getInstance().updateDatabase(preferences.getLuna2Server(), preferences.getEncodedUserData(), api, preferences.getServerChanged()); + Log.i("Route", "updateDatabase"); }); thread.start(); } @@ -292,6 +312,7 @@ public class RegisterActivity extends ToolbarActivity implements RegisterFragmen } private void showPhotoScreen() { + Log.i("Route", "showPhotoScreen"); fragment = PhotoFragment.newInstance(); fragment.setPhotoProcessor(photoProcessor); fragment.setListener(this); @@ -308,6 +329,7 @@ public class RegisterActivity extends ToolbarActivity implements RegisterFragmen } private void showPhotoReadyScreen(Bitmap bitmap) { + Log.i("Route", "showPhotoReadyScreen"); final SavePhotoFragment fragment = SavePhotoFragment.newInstance(); fragment.setPhoto(bitmap); fragment.setListener(this); @@ -321,6 +343,7 @@ public class RegisterActivity extends ToolbarActivity implements RegisterFragmen @Override public void onBestFrameReady(Bitmap bitmap) { + Log.i("Route", "onBestFrameReady"); this.bitmap = bitmap; if(fromLoginPage){ verifyPhoto(bitmap); @@ -329,6 +352,7 @@ public class RegisterActivity extends ToolbarActivity implements RegisterFragmen } private void verifyPhoto(Bitmap bitmap){ + Log.i("Route", "verifyPhoto fromLoginPage"); fragment.showWaitState(); login=preferences.getUsername(); System.out.println("Value of login while verification " + login); @@ -340,6 +364,7 @@ public class RegisterActivity extends ToolbarActivity implements RegisterFragmen } VerifyApiInterface verifyApi; if (BuildConfig.IS_OFFLINE_VERSION) { + Log.i("Route", "VerifyApiInterface"); verifyApi = new VerifyApiImplLunaLocal(this, photoProcessor, login, this); } else { //if (preferences.getLuna2()) { Log.i("LUNA2 ", preferences.getLuna2Server()); @@ -399,6 +424,7 @@ public class RegisterActivity extends ToolbarActivity implements RegisterFragmen } private void registerPerson() { + Log.i("Route", "registerPerson"); RegisterApiInterface registerApi; try { if (thread != null) { @@ -410,6 +436,7 @@ public class RegisterActivity extends ToolbarActivity implements RegisterFragmen if (BuildConfig.IS_OFFLINE_VERSION) { registerApi = new RegisterApiImplLocal(this, registrationModel, photoProcessor, this, bitmap); + Log.i("Route", "registerPerson registerApi"); } else { registerApi = new RegisterApiImplLuna2(this, preferences.getLuna2Server(), registrationModel, api, locationHelper, this, bitmap, preferences.getEncodedUserData()); } @@ -555,18 +582,66 @@ public class RegisterActivity extends ToolbarActivity implements RegisterFragmen }*/ } private void showSuccess() { - final Intent intent = new Intent(this, AuthSuccessActivity.class); + + final Intent intent = new Intent(RegisterActivity.this, CheckInActivity.class); intent.putExtra(AuthSuccessActivity.LOGIN, login); + System.out.println("login value "+ login); + + if (BuildConfig.IS_OFFLINE_VERSION) { - intent.putExtra(AuthSuccessActivity.TIME, (int)(((double) (verifEndTime - verifStartTime)) / 1e6)); + intent.putExtra(AuthSuccessActivity.TIME, (int) (((double) (verifEndTime - verifStartTime)) / 1e6)); + intent.putExtra("FromRegister", true); + intent.putExtra("checkinButtonFromRegister", true); + intent.putExtra("valueFromApiCheckIn", valueFromApiCheckIn); + intent.putExtra("UserName", login); } startActivity(intent); + finish(); + + /*if (checkinButton) { + final Intent intent = new Intent(RegisterActivity.this, CheckInActivity.class); + intent.putExtra(AuthSuccessActivity.LOGIN, login); + + + if (BuildConfig.IS_OFFLINE_VERSION) { + intent.putExtra(AuthSuccessActivity.TIME, (int) (((double) (verifEndTime - verifStartTime)) / 1e6)); + intent.putExtra("FromRegister", true); + intent.putExtra("checkinButtonFromRegister", true); + intent.putExtra("valueFromApiCheckIn", valueFromApiCheckIn); + } + + startActivity(intent); + + finish(); + } + else{ + final Intent intent = new Intent(RegisterActivity.this, CheckInActivity.class); + intent.putExtra(AuthSuccessActivity.LOGIN, login); + + + if (BuildConfig.IS_OFFLINE_VERSION) { + intent.putExtra(AuthSuccessActivity.TIME, (int) (((double) (verifEndTime - verifStartTime)) / 1e6)); + intent.putExtra("FromRegister", false); + intent.putExtra("checkinButtonFromRegister", false); + intent.putExtra("valueFromApiCheckIn", valueFromApiCheckIn); + } + + startActivity(intent); + + finish(); + } +*/ + + + + } private void onFaceAuthFail(AuthenticationActivity.AuthFailReason reason) { + System.out.println("Root fail"); if (faceFailCount < 4) { final FaceNotRecognizedFragment fragment = FaceNotRecognizedFragment.newInstance(); fragment.setListener(this); diff --git a/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/register/RegisterActivityNew.java b/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/register/RegisterActivityNew.java index 49c2ee0..3d5a905 100644 --- a/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/register/RegisterActivityNew.java +++ b/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/register/RegisterActivityNew.java @@ -9,8 +9,20 @@ import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.ImageButton; +import android.widget.TextView; import android.widget.Toast; +import com.android.volley.AuthFailureError; +import com.android.volley.DefaultRetryPolicy; +import com.android.volley.Request; +import com.android.volley.RequestQueue; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.BasicNetwork; +import com.android.volley.toolbox.DiskBasedCache; +import com.android.volley.toolbox.HurlStack; +import com.android.volley.toolbox.StringRequest; +import com.android.volley.toolbox.Volley; + import org.json.JSONException; import org.json.JSONObject; @@ -42,7 +54,10 @@ public class RegisterActivityNew extends AppCompatActivity { JsonPlaceHolderApi jsonPlaceHolderApi; - Button verifynproceed; + Button verifynproceed,face; + TextView skip; + + @Override protected void onCreate(Bundle savedInstanceState) { @@ -57,19 +72,41 @@ public class RegisterActivityNew extends AppCompatActivity { verifynproceed = findViewById(R.id.verifynproceed); + verifynproceed.setEnabled(true); verifynproceed.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - isAllFieldsChecked = CheckAllFields(); + + Intent intent = new Intent(RegisterActivityNew.this, RegisterActivity.class); + intent.putExtra("FromLoginPage",false); + startActivity(intent); + /*isAllFieldsChecked = CheckAllFields(); if(isAllFieldsChecked) { + Intent intent = new Intent(RegisterActivityNew.this, RegisterActivity.class); intent.putExtra("FromLoginPage",false); startActivity(intent); //saveInfo(); - } + //savaData(); + }*/ + } + }); + + + + skip = findViewById(R.id.skip); + skip.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + + Intent intent = new Intent(RegisterActivityNew.this, RegisterActivity.class); + intent.putExtra("FromLoginPage",false); + startActivity(intent); + } }); + back_img = findViewById(R.id.back_img); back_img.setOnClickListener(new View.OnClickListener() { @Override @@ -80,12 +117,12 @@ public class RegisterActivityNew extends AppCompatActivity { }); } public void createRetrofit(){ - Retrofit retrofit=new Retrofit.Builder() + /*Retrofit retrofit=new Retrofit.Builder() .baseUrl("http://huaiglobal.com/api/") .addConverterFactory(GsonConverterFactory.create()) .build(); - jsonPlaceHolderApi=retrofit.create(JsonPlaceHolderApi.class); + jsonPlaceHolderApi=retrofit.create(JsonPlaceHolderApi.class);*/ } @@ -114,25 +151,34 @@ public class RegisterActivityNew extends AppCompatActivity { fields.put("employeeId",edt_emp.getText().toString()); fields.put("otp",edt_otp.getText().toString()); - /* RegistrationNew registrationNew = new RegistrationNew(edt_comp.getText().toString(),edt_emp.getText().toString(),edt_otp.getText().toString()); - System.out.println("Value of registrationNew " );*/ - CallApiService.getClient().createpost(fields); - Call call=jsonPlaceHolderApi.createpost(fields); + + Retrofit retrofit=new Retrofit.Builder() + .baseUrl("http://huaiglobal.com/api/services/app/Account/RegisterLunaEmployee") + .addConverterFactory(GsonConverterFactory.create()) + .build(); + + jsonPlaceHolderApi=retrofit.create(JsonPlaceHolderApi.class); + + RegistrationNew registrationNew = new RegistrationNew(edt_comp.getText().toString(),edt_emp.getText().toString(),edt_otp.getText().toString()); + System.out.println("Value of registrationNew " ); + //CallApiService.getClient().createpost(fields); + Call call=jsonPlaceHolderApi.createpost(registrationNew); call.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { if(response.isSuccessful()) { Log.e("register code=", String.valueOf(response.code())); - Toast.makeText(RegisterActivityNew.this, "User Added succesfully", Toast.LENGTH_SHORT).show(); - Intent intent = new Intent(RegisterActivityNew.this, RegisterFragment.class); - startActivity(intent); + Toast.makeText(RegisterActivityNew.this, "User Added successfully", Toast.LENGTH_SHORT).show(); + /*Intent intent = new Intent(RegisterActivityNew.this, RegisterFragment.class); + startActivity(intent);*/ } else{ Log.e("else part register code=", String.valueOf(response.code())); - Intent intent = new Intent(RegisterActivityNew.this, RegisterFragment.class); - startActivity(intent); + /*Intent intent = new Intent(getApplicationContext(), RegisterFragment.class); + startActivity(intent);*/ + System.out.println("Response code: "+response.code()); Toast.makeText(RegisterActivityNew.this, "Current user did not login to the application!", Toast.LENGTH_SHORT).show(); @@ -146,4 +192,63 @@ public class RegisterActivityNew extends AppCompatActivity { } }); } + public void savaData(){ + System.out.println("Inside save info"); + String url = "http://huaiglobal.com/api/services/app/Account/RegisterLunaEmployee"; // Replace with your API endpoint URL + + RequestQueue queue = Volley.newRequestQueue(RegisterActivityNew.this); + StringRequest request = new StringRequest(Request.Method.POST, url, new com.android.volley.Response.Listener() { + @Override + public void onResponse(String response) { + + // on below line we are displaying a success toast message. + Toast.makeText(RegisterActivityNew.this, "Data added to API", Toast.LENGTH_SHORT).show(); + + } + }, new com.android.volley.Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + // method to handle errors. + Toast.makeText(RegisterActivityNew.this, "Fail to get response = " + error, Toast.LENGTH_SHORT).show(); + System.out.println("Error: " + error); + /*Intent intent = new Intent(RegisterActivityNew.this, RegisterFragment.class); + startActivity(intent);*/ + } + }) { + @Override + protected Map getParams() { + // below line we are creating a map for + // storing our values in key and value pair. + Map params = new HashMap(); + + // on below line we are passing our key + // and value pair to our parameters. + params.put("companyCode", edt_comp.getText().toString()); + params.put("employeeCode", edt_emp.getText().toString()); + params.put("otp", edt_otp.getText().toString()); + System.out.println("Data input: "+ edt_comp.getText().toString() + " " +edt_emp.getText().toString() +" "+ edt_otp.getText().toString()); + + + // at last we are + // returning our params. + return params; + } + /*@Override + public Map getHeaders() throws AuthFailureError { + Map params = new HashMap(); + params.put("Authorization", "bearer "+"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1laWRlbnRpZmllciI6IjUiLCJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoiYWRtaW4iLCJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9lbWFpbGFkZHJlc3MiOiJkYXNzYW5kaXBAc2VudGllbnRnZWVrcy5jb20iLCJBc3BOZXQuSWRlbnRpdHkuU2VjdXJpdHlTdGFtcCI6IjdFR1lVNFRBU1BUS05BREIzVEtHM0ZQNzdFQ1AzVjNBIiwiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS93cy8yMDA4LzA2L2lkZW50aXR5L2NsYWltcy9yb2xlIjoiQWRtaW4iLCJodHRwOi8vd3d3LmFzcG5ldGJvaWxlcnBsYXRlLmNvbS9pZGVudGl0eS9jbGFpbXMvdGVuYW50SWQiOiI0Iiwic3ViIjoiNSIsImp0aSI6IjYwOTFhMTgwLTkzMWItNGYwMS05ZWVjLTM3OTNkYmExMjkxYiIsImlhdCI6MTY5Mzg5OTk1NCwidG9rZW5fdmFsaWRpdHlfa2V5IjoiMzM3ZjAzMmEtN2I3NS00MTkzLWFhY2QtYjA3OWEyYjYxMjI0IiwidXNlcl9pZGVudGlmaWVyIjoiNUA0IiwidG9rZW5fdHlwZSI6IjAiLCJyZWZyZXNoX3Rva2VuX3ZhbGlkaXR5X2tleSI6Ijg1MTlmMjU3LWE3NmEtNDViOS05MDQ0LTU4ZTk0ZThhZTEwZSIsIm5iZiI6MTY5Mzg5OTk1NCwiZXhwIjoxNjkzOTg2MzU0LCJpc3MiOiJtdWx0aSIsImF1ZCI6Im11bHRpIn0.ImuWLPg85b7fN1nWzr1Es1L9j6xm7DrK4L_UxApzkqM"); + return params; + }*/ + + @Override + public Map getHeaders() throws AuthFailureError { + HashMap headers = new HashMap(); + headers.put("Content-Type", "application/json; charset=utf-8"); + return headers; + } + }; + + queue.add(request); + + } } \ No newline at end of file diff --git a/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/register/RegisterFragment.java b/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/register/RegisterFragment.java index 66adeaf..180a31c 100644 --- a/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/register/RegisterFragment.java +++ b/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/register/RegisterFragment.java @@ -8,6 +8,7 @@ import android.text.Editable; import android.text.InputType; import android.text.TextUtils; import android.text.method.PasswordTransformationMethod; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -57,6 +58,11 @@ public class RegisterFragment extends BaseFragment { TextInputLayout phoneWrapper; Listener listener; + @BindView(R.id.pass) + EditText pass; + + String password=""; + public RegisterFragment() { } @@ -115,6 +121,14 @@ public class RegisterFragment extends BaseFragment { @OnClick(R.id.signUp) public void onClick() { + Log.i("Route", "signUp"); + password = pass.getText().toString(); + if(password.equals("")){ + signUp.setEnabled(false); + } + + + Utils.hideKeyboardRoutine(getContext(), getView()); if (listener != null && validateFields(true, true)) { RegistrationModel registrationModel = new RegistrationModel(); @@ -132,6 +146,7 @@ public class RegisterFragment extends BaseFragment { result = validateEmail(changeFocus, showError); result = validateLogin(showError) && result; + signUp.setEnabled(result); return result; diff --git a/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/register/SavePhotoFragment.java b/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/register/SavePhotoFragment.java index 71ff66f..a55b434 100644 --- a/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/register/SavePhotoFragment.java +++ b/examples/example_bestshot/example/app/src/main/java/ru/visionlab/femdemo/register/SavePhotoFragment.java @@ -6,6 +6,8 @@ import android.graphics.PorterDuff; import android.os.Bundle; import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; + +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -81,6 +83,7 @@ public class SavePhotoFragment extends BaseFragment { @OnClick({R.id.save}) public void onClick() { + Log.i("Route", "save onClick"); save.setEnabled(false); progressBar.setVisibility(View.VISIBLE); if (listener != null) { diff --git a/examples/example_bestshot/example/app/src/main/res/drawable/approval.png b/examples/example_bestshot/example/app/src/main/res/drawable/approval.png new file mode 100644 index 0000000..81f9b19 Binary files /dev/null and b/examples/example_bestshot/example/app/src/main/res/drawable/approval.png differ diff --git a/examples/example_bestshot/example/app/src/main/res/drawable/attendance_icon.png b/examples/example_bestshot/example/app/src/main/res/drawable/attendance_icon.png new file mode 100644 index 0000000..529c357 Binary files /dev/null and b/examples/example_bestshot/example/app/src/main/res/drawable/attendance_icon.png differ diff --git a/examples/example_bestshot/example/app/src/main/res/drawable/bg_btn_with_stroke_grey.xml b/examples/example_bestshot/example/app/src/main/res/drawable/bg_btn_with_stroke_grey.xml new file mode 100644 index 0000000..f58f3d8 --- /dev/null +++ b/examples/example_bestshot/example/app/src/main/res/drawable/bg_btn_with_stroke_grey.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/examples/example_bestshot/example/app/src/main/res/drawable/bg_btn_with_stroke_red.xml b/examples/example_bestshot/example/app/src/main/res/drawable/bg_btn_with_stroke_red.xml new file mode 100644 index 0000000..58c8395 --- /dev/null +++ b/examples/example_bestshot/example/app/src/main/res/drawable/bg_btn_with_stroke_red.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/examples/example_bestshot/example/app/src/main/res/drawable/bg_button_sos.xml b/examples/example_bestshot/example/app/src/main/res/drawable/bg_button_sos.xml new file mode 100644 index 0000000..8c4670d --- /dev/null +++ b/examples/example_bestshot/example/app/src/main/res/drawable/bg_button_sos.xml @@ -0,0 +1,11 @@ + + + + + + + + + + \ No newline at end of file diff --git a/examples/example_bestshot/example/app/src/main/res/drawable/bg_button_time.xml b/examples/example_bestshot/example/app/src/main/res/drawable/bg_button_time.xml new file mode 100644 index 0000000..d56ab3a --- /dev/null +++ b/examples/example_bestshot/example/app/src/main/res/drawable/bg_button_time.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/examples/example_bestshot/example/app/src/main/res/drawable/bg_linear_grey.xml b/examples/example_bestshot/example/app/src/main/res/drawable/bg_linear_grey.xml new file mode 100644 index 0000000..1261c6a --- /dev/null +++ b/examples/example_bestshot/example/app/src/main/res/drawable/bg_linear_grey.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/examples/example_bestshot/example/app/src/main/res/drawable/calender.png b/examples/example_bestshot/example/app/src/main/res/drawable/calender.png new file mode 100644 index 0000000..df79c48 Binary files /dev/null and b/examples/example_bestshot/example/app/src/main/res/drawable/calender.png differ diff --git a/examples/example_bestshot/example/app/src/main/res/drawable/calender2.xml b/examples/example_bestshot/example/app/src/main/res/drawable/calender2.xml new file mode 100644 index 0000000..4ec8c56 --- /dev/null +++ b/examples/example_bestshot/example/app/src/main/res/drawable/calender2.xml @@ -0,0 +1,5 @@ + + + diff --git a/examples/example_bestshot/example/app/src/main/res/drawable/cross.png b/examples/example_bestshot/example/app/src/main/res/drawable/cross.png new file mode 100644 index 0000000..290802f Binary files /dev/null and b/examples/example_bestshot/example/app/src/main/res/drawable/cross.png differ diff --git a/examples/example_bestshot/example/app/src/main/res/drawable/custom_spinner_background.xml b/examples/example_bestshot/example/app/src/main/res/drawable/custom_spinner_background.xml new file mode 100644 index 0000000..8b75828 --- /dev/null +++ b/examples/example_bestshot/example/app/src/main/res/drawable/custom_spinner_background.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/examples/example_bestshot/example/app/src/main/res/drawable/down_arrow.xml b/examples/example_bestshot/example/app/src/main/res/drawable/down_arrow.xml new file mode 100644 index 0000000..210ee4c --- /dev/null +++ b/examples/example_bestshot/example/app/src/main/res/drawable/down_arrow.xml @@ -0,0 +1,5 @@ + + + diff --git a/examples/example_bestshot/example/app/src/main/res/drawable/edittext_border.xml b/examples/example_bestshot/example/app/src/main/res/drawable/edittext_border.xml new file mode 100644 index 0000000..19f4b33 --- /dev/null +++ b/examples/example_bestshot/example/app/src/main/res/drawable/edittext_border.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/example_bestshot/example/app/src/main/res/drawable/emergency.png b/examples/example_bestshot/example/app/src/main/res/drawable/emergency.png new file mode 100644 index 0000000..2625162 Binary files /dev/null and b/examples/example_bestshot/example/app/src/main/res/drawable/emergency.png differ diff --git a/examples/example_bestshot/example/app/src/main/res/drawable/ese.png b/examples/example_bestshot/example/app/src/main/res/drawable/ese.png new file mode 100644 index 0000000..ff2397b Binary files /dev/null and b/examples/example_bestshot/example/app/src/main/res/drawable/ese.png differ diff --git a/examples/example_bestshot/example/app/src/main/res/drawable/frank.png b/examples/example_bestshot/example/app/src/main/res/drawable/frank.png new file mode 100644 index 0000000..12f14f6 Binary files /dev/null and b/examples/example_bestshot/example/app/src/main/res/drawable/frank.png differ diff --git a/examples/example_bestshot/example/app/src/main/res/drawable/permission.png b/examples/example_bestshot/example/app/src/main/res/drawable/permission.png new file mode 100644 index 0000000..9651fc4 Binary files /dev/null and b/examples/example_bestshot/example/app/src/main/res/drawable/permission.png differ diff --git a/examples/example_bestshot/example/app/src/main/res/drawable/report.png b/examples/example_bestshot/example/app/src/main/res/drawable/report.png new file mode 100644 index 0000000..e6663cb Binary files /dev/null and b/examples/example_bestshot/example/app/src/main/res/drawable/report.png differ diff --git a/examples/example_bestshot/example/app/src/main/res/drawable/tick.png b/examples/example_bestshot/example/app/src/main/res/drawable/tick.png new file mode 100644 index 0000000..4f2b7bb Binary files /dev/null and b/examples/example_bestshot/example/app/src/main/res/drawable/tick.png differ diff --git a/examples/example_bestshot/example/app/src/main/res/drawable/time.xml b/examples/example_bestshot/example/app/src/main/res/drawable/time.xml new file mode 100644 index 0000000..523d30b --- /dev/null +++ b/examples/example_bestshot/example/app/src/main/res/drawable/time.xml @@ -0,0 +1,6 @@ + + + + diff --git a/examples/example_bestshot/example/app/src/main/res/layout/activity_approval_list.xml b/examples/example_bestshot/example/app/src/main/res/layout/activity_approval_list.xml new file mode 100644 index 0000000..3522dc5 --- /dev/null +++ b/examples/example_bestshot/example/app/src/main/res/layout/activity_approval_list.xml @@ -0,0 +1,393 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/example_bestshot/example/app/src/main/res/layout/activity_check_in_new.xml b/examples/example_bestshot/example/app/src/main/res/layout/activity_check_in_new.xml new file mode 100644 index 0000000..55bdf6a --- /dev/null +++ b/examples/example_bestshot/example/app/src/main/res/layout/activity_check_in_new.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +