Add Report creation, report saving mechanism
parent
25eaa9d914
commit
5b33c6770b
|
|
@ -7,11 +7,14 @@ import android.content.pm.PackageManager;
|
||||||
import android.net.ConnectivityManager;
|
import android.net.ConnectivityManager;
|
||||||
import android.net.NetworkInfo;
|
import android.net.NetworkInfo;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.os.Handler;
|
||||||
|
import android.os.Looper;
|
||||||
import android.util.DisplayMetrics;
|
import android.util.DisplayMetrics;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.Window;
|
import android.view.Window;
|
||||||
import android.view.WindowManager;
|
import android.view.WindowManager;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import androidx.activity.EdgeToEdge;
|
import androidx.activity.EdgeToEdge;
|
||||||
|
|
@ -23,6 +26,8 @@ import androidx.core.view.WindowCompat;
|
||||||
import androidx.core.view.WindowInsetsCompat;
|
import androidx.core.view.WindowInsetsCompat;
|
||||||
import androidx.core.view.WindowInsetsControllerCompat;
|
import androidx.core.view.WindowInsetsControllerCompat;
|
||||||
import androidx.lifecycle.ViewModelProvider;
|
import androidx.lifecycle.ViewModelProvider;
|
||||||
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
import androidx.viewpager.widget.ViewPager;
|
import androidx.viewpager.widget.ViewPager;
|
||||||
|
|
||||||
import com.utopiaindustries.qc_android.R;
|
import com.utopiaindustries.qc_android.R;
|
||||||
|
|
@ -30,15 +35,31 @@ import com.utopiaindustries.qc_android.adapters.PagerAdapter;
|
||||||
|
|
||||||
|
|
||||||
import com.google.android.material.tabs.TabLayout;
|
import com.google.android.material.tabs.TabLayout;
|
||||||
|
import com.utopiaindustries.qc_android.adapters.ReportListAdapter;
|
||||||
|
import com.utopiaindustries.qc_android.db.ReportRepository;
|
||||||
|
import com.utopiaindustries.qc_android.db.ReportWrapper;
|
||||||
import com.utopiaindustries.qc_android.helper.Helper;
|
import com.utopiaindustries.qc_android.helper.Helper;
|
||||||
|
import com.utopiaindustries.qc_android.utils.FileUtils;
|
||||||
|
import com.utopiaindustries.qc_android.utils.NotificationHelper;
|
||||||
import com.utopiaindustries.qc_android.utils.ProgressDialogFragment;
|
import com.utopiaindustries.qc_android.utils.ProgressDialogFragment;
|
||||||
|
import com.utopiaindustries.qc_android.utils.ReportSelectListener;
|
||||||
import com.utopiaindustries.qc_android.viewmodels.ServiceViewModel;
|
import com.utopiaindustries.qc_android.viewmodels.ServiceViewModel;
|
||||||
|
|
||||||
public class DashboardActivity extends AppCompatActivity {
|
import java.io.ByteArrayInputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.ObjectInputStream;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class DashboardActivity extends AppCompatActivity implements ReportSelectListener {
|
||||||
|
|
||||||
Button btnCreateReport, btnFetchProduct, btnLogout, btnAppUpdate, btnReportUpload;
|
Button btnCreateReport, btnFetchProduct, btnLogout, btnAppUpdate, btnReportUpload;
|
||||||
ServiceViewModel serviceViewModel;
|
ServiceViewModel serviceViewModel;
|
||||||
|
|
||||||
|
RecyclerView reportRecyclerview;
|
||||||
|
TextView reportTextView;
|
||||||
|
ReportListAdapter reportListAdapter;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
@ -70,7 +91,30 @@ public class DashboardActivity extends AppCompatActivity {
|
||||||
});
|
});
|
||||||
btnLogout.setOnClickListener(v -> {});
|
btnLogout.setOnClickListener(v -> {});
|
||||||
btnAppUpdate.setOnClickListener(v -> {});
|
btnAppUpdate.setOnClickListener(v -> {});
|
||||||
btnReportUpload.setOnClickListener(v -> {});
|
btnReportUpload.setOnClickListener(v -> {
|
||||||
|
if (!Helper.isNetworkConnected(this)) {
|
||||||
|
Toast.makeText(this, "No Internet Connection Available", Toast.LENGTH_LONG).show();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
pushDataToUind();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void pushDataToUind() {
|
||||||
|
ReportRepository repository = new ReportRepository(this);
|
||||||
|
List<ReportWrapper> reportWrapperList = repository.findAllReports();
|
||||||
|
|
||||||
|
if (reportWrapperList.isEmpty()) {
|
||||||
|
Toast.makeText(this, "No Reports to upload", Toast.LENGTH_SHORT).show();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Toast.makeText(this, "Uploading Reports. Please wait", Toast.LENGTH_LONG).show();
|
||||||
|
//disableButtons();
|
||||||
|
|
||||||
|
// Start processing reports one by one
|
||||||
|
//processReportsSequentially(repository, reportWrapperList, 0, 100);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void initializeLayout() {
|
public void initializeLayout() {
|
||||||
|
|
@ -79,6 +123,7 @@ public class DashboardActivity extends AppCompatActivity {
|
||||||
btnLogout = findViewById(R.id.btn_logout);
|
btnLogout = findViewById(R.id.btn_logout);
|
||||||
btnAppUpdate = findViewById(R.id.btn_app_update);
|
btnAppUpdate = findViewById(R.id.btn_app_update);
|
||||||
btnReportUpload = findViewById(R.id.btn_reports_upload);
|
btnReportUpload = findViewById(R.id.btn_reports_upload);
|
||||||
|
reportRecyclerview = findViewById(R.id.report_recyclerview);
|
||||||
|
|
||||||
serviceViewModel = new ViewModelProvider(this).get(ServiceViewModel.class);
|
serviceViewModel = new ViewModelProvider(this).get(ServiceViewModel.class);
|
||||||
|
|
||||||
|
|
@ -107,7 +152,7 @@ public class DashboardActivity extends AppCompatActivity {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
loadReportList();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void getScreenSize() {
|
private void getScreenSize() {
|
||||||
|
|
@ -169,4 +214,125 @@ public class DashboardActivity extends AppCompatActivity {
|
||||||
progressDialog.dismiss();
|
progressDialog.dismiss();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void loadReportList() {
|
||||||
|
ReportRepository repository = new ReportRepository(this);
|
||||||
|
List<ReportWrapper> reportWrappers = repository.findAllReports();
|
||||||
|
|
||||||
|
reportListAdapter = new ReportListAdapter(reportWrappers, this, this);
|
||||||
|
reportRecyclerview.setLayoutManager(new LinearLayoutManager(this));
|
||||||
|
reportRecyclerview.setAdapter(reportListAdapter);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onItemClicked(ReportWrapper reportWrapper) {
|
||||||
|
Toast.makeText(this, String.valueOf(reportWrapper.getId()), Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*private void processReportsSequentially(ReportRepository repository,
|
||||||
|
List<ReportWrapper> wrappers,
|
||||||
|
int currentIndex, int notificationId) {
|
||||||
|
// Check if all reports have been processed
|
||||||
|
if (currentIndex >= wrappers.size()) {
|
||||||
|
//enableButtons();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ReportWrapper wrapper = wrappers.get(currentIndex);
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Load only one report at a time to save memory
|
||||||
|
byte[] fileData = FileUtils.readFile(wrapper.getContent());
|
||||||
|
InspectionReport report = deserializeReport(fileData, wrapper);
|
||||||
|
|
||||||
|
final int currentNotificationId = notificationId;
|
||||||
|
final int nextIndex = currentIndex + 1;
|
||||||
|
final int nextNotificationId = notificationId + 1;
|
||||||
|
|
||||||
|
InspectionReportService service = InspectionReportService.getInstance();
|
||||||
|
service.saveReport(report, new SubmitReportCallback() {
|
||||||
|
@Override
|
||||||
|
public void onSuccess(Map<String, String> responseMap) {
|
||||||
|
String result = responseMap.get("result");
|
||||||
|
String reportId = responseMap.get("reportId");
|
||||||
|
String sku = responseMap.get("Sku");
|
||||||
|
String generatedAt = responseMap.get("GeneratedAt");
|
||||||
|
String modelNumber = responseMap.get("modelNumber");
|
||||||
|
String code = responseMap.get("Code");
|
||||||
|
|
||||||
|
report.setPreviousReportId(Long.parseLong(reportId));
|
||||||
|
report.setGeneratedAt(generatedAt);
|
||||||
|
report.setCode(code);
|
||||||
|
|
||||||
|
// update status
|
||||||
|
repository.updateSyncStatus(report.getWrapperId());
|
||||||
|
|
||||||
|
saveReportToDraft(report, reportId);
|
||||||
|
|
||||||
|
NotificationHelper.showNotificationForReportUpload(
|
||||||
|
HomeActivity.this,
|
||||||
|
currentNotificationId,
|
||||||
|
"Upload Success",
|
||||||
|
"SKU: " + report.getItems().get(0).getSku() + " uploaded successfully.");
|
||||||
|
|
||||||
|
// Process next report after a short delay to free memory
|
||||||
|
new Handler(Looper.getMainLooper()).postDelayed(() -> {
|
||||||
|
// Force garbage collection before processing next report
|
||||||
|
System.gc();
|
||||||
|
processReportsSequentially(repository, wrappers, nextIndex, nextNotificationId);
|
||||||
|
}, 500); // 500ms delay between reports
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailure(Throwable throwable) {
|
||||||
|
if (throwable.getMessage() != null && throwable.getMessage().contains("Duplicated")) {
|
||||||
|
Log.e("Request: ", "Duplicated");
|
||||||
|
// update status
|
||||||
|
repository.updateSyncStatus(report.getWrapperId());
|
||||||
|
// remove file
|
||||||
|
FileUtils.deleteFile(report.getFilePath());
|
||||||
|
} else {
|
||||||
|
NotificationHelper.showNotificationForReportUpload(
|
||||||
|
HomeActivity.this,
|
||||||
|
currentNotificationId,
|
||||||
|
"Upload Failed",
|
||||||
|
"SKU: " + report.getItems().get(0).getSku() + " failed.\nReason: " + throwable.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Continue with next report even if current one fails
|
||||||
|
new Handler(Looper.getMainLooper()).postDelayed(() -> {
|
||||||
|
System.gc();
|
||||||
|
processReportsSequentially(repository, wrappers, nextIndex, nextNotificationId);
|
||||||
|
}, 500);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
// If there's an error loading the report, skip it and continue with the next one
|
||||||
|
NotificationHelper.showNotificationForReportUpload(
|
||||||
|
DashboardActivity.this,
|
||||||
|
notificationId,
|
||||||
|
"Upload Failed",
|
||||||
|
"Reason: " + e.getMessage());
|
||||||
|
|
||||||
|
new Handler(Looper.getMainLooper()).postDelayed(() -> {
|
||||||
|
processReportsSequentially(repository, wrappers, currentIndex + 1, notificationId + 1);
|
||||||
|
}, 500);
|
||||||
|
}
|
||||||
|
}*/
|
||||||
|
|
||||||
|
/*private InspectionReport deserializeReport(byte[] data, InspectionReportWrapper wrapper)
|
||||||
|
throws IOException, ClassNotFoundException {
|
||||||
|
|
||||||
|
try (ByteArrayInputStream byteIn = new ByteArrayInputStream(data);
|
||||||
|
ObjectInputStream in = new ObjectInputStream(byteIn)) {
|
||||||
|
|
||||||
|
InspectionReport report = (InspectionReport) in.readObject();
|
||||||
|
report.setWrapperId(wrapper.getId());
|
||||||
|
report.setFilePath(wrapper.getContent());
|
||||||
|
return report;
|
||||||
|
}
|
||||||
|
}*/
|
||||||
}
|
}
|
||||||
|
|
@ -0,0 +1,81 @@
|
||||||
|
package com.utopiaindustries.qc_android.adapters;
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.cardview.widget.CardView;
|
||||||
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
|
import com.utopiaindustries.qc_android.R;
|
||||||
|
import com.utopiaindustries.qc_android.db.ReportWrapper;
|
||||||
|
import com.utopiaindustries.qc_android.utils.ReportSelectListener;
|
||||||
|
import com.utopiaindustries.qc_android.utils.SelectListener;
|
||||||
|
|
||||||
|
import java.text.ParseException;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class ReportListAdapter extends RecyclerView.Adapter<ReportListAdapter.ViewHolder> {
|
||||||
|
private List<ReportWrapper> reportList;
|
||||||
|
private ReportSelectListener listener;
|
||||||
|
private Context context;
|
||||||
|
|
||||||
|
public ReportListAdapter(List<ReportWrapper> reports, ReportSelectListener listener, Context context) {
|
||||||
|
this.reportList = reports;
|
||||||
|
this.listener = listener;
|
||||||
|
this.context = context;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
@Override
|
||||||
|
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||||
|
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.report_list_item, parent, false);
|
||||||
|
return new ViewHolder(view);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onBindViewHolder(@NonNull ViewHolder holder, @SuppressLint("RecyclerView") int position) {
|
||||||
|
try {
|
||||||
|
holder.bindData(reportList.get(position));
|
||||||
|
|
||||||
|
holder.cardView.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
listener.onItemClicked(reportList.get(position));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getItemCount() {
|
||||||
|
return reportList.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class ViewHolder extends RecyclerView.ViewHolder {
|
||||||
|
private final TextView txtCategory, txtCreatedBy, reportDate;
|
||||||
|
private final CardView cardView;
|
||||||
|
|
||||||
|
public ViewHolder(@NonNull View itemView) {
|
||||||
|
super(itemView);
|
||||||
|
txtCategory = itemView.findViewById(R.id.txt_category);
|
||||||
|
txtCreatedBy = itemView.findViewById(R.id.txt_createdBy);
|
||||||
|
reportDate = itemView.findViewById(R.id.report_date);
|
||||||
|
cardView = itemView.findViewById(R.id.main_container);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void bindData(ReportWrapper report) {
|
||||||
|
|
||||||
|
reportDate.setText(String.valueOf(report.getId()));
|
||||||
|
txtCategory.setText("Category");
|
||||||
|
txtCreatedBy.setText("Created By");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,8 +1,10 @@
|
||||||
package com.utopiaindustries.qc_android.apiservice;
|
package com.utopiaindustries.qc_android.apiservice;
|
||||||
|
|
||||||
|
import com.utopiaindustries.qc_android.models.DataEntryModel;
|
||||||
import com.utopiaindustries.qc_android.models.InspectionCheckPoint;
|
import com.utopiaindustries.qc_android.models.InspectionCheckPoint;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
import retrofit2.http.Body;
|
import retrofit2.http.Body;
|
||||||
|
|
@ -50,4 +52,9 @@ public interface ApiService {
|
||||||
|
|
||||||
@GET("rest/uic/inspection-report/checkpoints")
|
@GET("rest/uic/inspection-report/checkpoints")
|
||||||
Call<List<InspectionCheckPoint>> fetchCheckPoints();
|
Call<List<InspectionCheckPoint>> fetchCheckPoints();
|
||||||
|
|
||||||
|
@POST("rest/uic/inspection-report")
|
||||||
|
Call<Map<String,String>> saveReport(
|
||||||
|
@Body DataEntryModel inspectionReport
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -79,7 +79,7 @@ public class DatabaseHelper extends SQLiteOpenHelper {
|
||||||
public static final String REPORT_TABLE_NAME = "report";
|
public static final String REPORT_TABLE_NAME = "report";
|
||||||
public static final String REPORT_COLUMN_ID = "id";
|
public static final String REPORT_COLUMN_ID = "id";
|
||||||
public static final String REPORT_COLUMN_CONTENT = "content";
|
public static final String REPORT_COLUMN_CONTENT = "content";
|
||||||
public static final String REPORT_COLUMN_SYNCED = "synced";
|
//public static final String REPORT_COLUMN_SYNCED = "synced";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* draft report table
|
* draft report table
|
||||||
|
|
@ -150,9 +150,7 @@ public class DatabaseHelper extends SQLiteOpenHelper {
|
||||||
|
|
||||||
String CREATE_REPORT_TABLE = "CREATE TABLE " + REPORT_TABLE_NAME + " (" +
|
String CREATE_REPORT_TABLE = "CREATE TABLE " + REPORT_TABLE_NAME + " (" +
|
||||||
REPORT_COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
|
REPORT_COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
|
||||||
REPORT_COLUMN_CONTENT + " TEXT NOT NULL," +
|
REPORT_COLUMN_CONTENT + " TEXT NOT NULL )";
|
||||||
REPORT_COLUMN_SYNCED + " INTEGER DEFAULT 0 CHECK(synced IN (0, 1))"
|
|
||||||
+ ")";
|
|
||||||
|
|
||||||
String CREATE_DRAFT_REPORT_TABLE = "CREATE TABLE " + DRAFT_REPORT_TABLE_NAME + " (" +
|
String CREATE_DRAFT_REPORT_TABLE = "CREATE TABLE " + DRAFT_REPORT_TABLE_NAME + " (" +
|
||||||
DRAFT_REPORT_COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
|
DRAFT_REPORT_COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
|
||||||
|
|
@ -189,7 +187,7 @@ public class DatabaseHelper extends SQLiteOpenHelper {
|
||||||
db.execSQL( CREATE_CHECKPOINT_TABLE );
|
db.execSQL( CREATE_CHECKPOINT_TABLE );
|
||||||
///db.execSQL( CREATE_DEFECT_TABLE );
|
///db.execSQL( CREATE_DEFECT_TABLE );
|
||||||
//db.execSQL( CREATE_UNIT_TABLE );
|
//db.execSQL( CREATE_UNIT_TABLE );
|
||||||
//db.execSQL( CREATE_REPORT_TABLE );
|
db.execSQL( CREATE_REPORT_TABLE );
|
||||||
//db.execSQL( CREATE_DRAFT_REPORT_TABLE);
|
//db.execSQL( CREATE_DRAFT_REPORT_TABLE);
|
||||||
//db.execSQL( CREATE_SKU_CHECKPOINT_TABLE );
|
//db.execSQL( CREATE_SKU_CHECKPOINT_TABLE );
|
||||||
//db.execSQL( CREATE_INSPECTION_LABEL_TABLE );
|
//db.execSQL( CREATE_INSPECTION_LABEL_TABLE );
|
||||||
|
|
@ -203,7 +201,7 @@ public class DatabaseHelper extends SQLiteOpenHelper {
|
||||||
db.execSQL( "DROP TABLE IF EXISTS " + CHECKPOINT_TABLE_NAME );
|
db.execSQL( "DROP TABLE IF EXISTS " + CHECKPOINT_TABLE_NAME );
|
||||||
//db.execSQL( "DROP TABLE IF EXISTS " + DEFECT_TABLE_NAME );
|
//db.execSQL( "DROP TABLE IF EXISTS " + DEFECT_TABLE_NAME );
|
||||||
//db.execSQL( "DROP TABLE IF EXISTS " + UNIT_TABLE_NAME );
|
//db.execSQL( "DROP TABLE IF EXISTS " + UNIT_TABLE_NAME );
|
||||||
//db.execSQL( "DROP TABLE IF EXISTS " + REPORT_TABLE_NAME );
|
db.execSQL( "DROP TABLE IF EXISTS " + REPORT_TABLE_NAME );
|
||||||
// db.execSQL( "DROP TABLE IF EXISTS " + DRAFT_REPORT_TABLE_NAME );
|
// db.execSQL( "DROP TABLE IF EXISTS " + DRAFT_REPORT_TABLE_NAME );
|
||||||
//db.execSQL( "DROP TABLE IF EXISTS " + CHECKPOINT_SKU_TABLE_NAME );
|
//db.execSQL( "DROP TABLE IF EXISTS " + CHECKPOINT_SKU_TABLE_NAME );
|
||||||
//db.execSQL( "DROP TABLE IF EXISTS " + INSPECTION_LABEL_TABLE_NAME );
|
//db.execSQL( "DROP TABLE IF EXISTS " + INSPECTION_LABEL_TABLE_NAME );
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,140 @@
|
||||||
|
package com.utopiaindustries.qc_android.db;
|
||||||
|
|
||||||
|
import static com.utopiaindustries.qc_android.db.DatabaseHelper.DRAFT_REPORT_TABLE_NAME;
|
||||||
|
import static com.utopiaindustries.qc_android.db.DatabaseHelper.REPORT_TABLE_NAME;
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint;
|
||||||
|
import android.content.ContentValues;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.database.Cursor;
|
||||||
|
import android.database.sqlite.SQLiteDatabase;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.concurrent.ExecutorService;
|
||||||
|
import java.util.concurrent.Executors;
|
||||||
|
import java.util.concurrent.RejectedExecutionException;
|
||||||
|
|
||||||
|
public class ReportRepository {
|
||||||
|
|
||||||
|
private final DatabaseHelper dbHelper;
|
||||||
|
private SQLiteDatabase database;
|
||||||
|
private final ExecutorService executorService;
|
||||||
|
private Context cxt;
|
||||||
|
|
||||||
|
public ReportRepository(Context context) {
|
||||||
|
dbHelper = new DatabaseHelper(context);
|
||||||
|
executorService = Executors.newSingleThreadExecutor();
|
||||||
|
cxt = context;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void openDatabase() {
|
||||||
|
try {
|
||||||
|
if (database == null || !database.isOpen() || !database.isDbLockedByCurrentThread()) {
|
||||||
|
database = dbHelper.getWritableDatabase();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void insert(ReportWrapper wrapper) {
|
||||||
|
executeSafely(() -> {
|
||||||
|
openDatabase();
|
||||||
|
database.beginTransaction();
|
||||||
|
try {
|
||||||
|
ContentValues values = new ContentValues();
|
||||||
|
values.put(DatabaseHelper.REPORT_COLUMN_CONTENT, wrapper.getContent());
|
||||||
|
database.insertWithOnConflict(REPORT_TABLE_NAME, null, values, SQLiteDatabase.CONFLICT_REPLACE);
|
||||||
|
database.setTransactionSuccessful();
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} finally {
|
||||||
|
database.endTransaction();
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Close the database when all operations are complete
|
||||||
|
*/
|
||||||
|
public void close() {
|
||||||
|
if (database != null && database.isOpen()) {
|
||||||
|
database.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Executes a task safely, ensuring the ExecutorService is still active
|
||||||
|
*/
|
||||||
|
private void executeSafely(Runnable task) {
|
||||||
|
try {
|
||||||
|
if (!executorService.isShutdown()) {
|
||||||
|
executorService.submit(task);
|
||||||
|
} else {
|
||||||
|
// Handle the situation when the executor is already shut down
|
||||||
|
System.out.println("Task execution rejected because ExecutorService is shut down");
|
||||||
|
}
|
||||||
|
} catch (RejectedExecutionException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressLint("Range")
|
||||||
|
public List<ReportWrapper> findAllReports() {
|
||||||
|
List<ReportWrapper> reports = new ArrayList<>();
|
||||||
|
openDatabase();
|
||||||
|
|
||||||
|
try (Cursor cursor = database.query(REPORT_TABLE_NAME,
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
null)) {
|
||||||
|
|
||||||
|
if (cursor != null && cursor.moveToFirst()) {
|
||||||
|
do {
|
||||||
|
ReportWrapper wrapper = new ReportWrapper();
|
||||||
|
wrapper.setId(cursor.getLong(cursor.getColumnIndex(DatabaseHelper.REPORT_COLUMN_ID)));
|
||||||
|
wrapper.setContent(cursor.getString(cursor.getColumnIndex(DatabaseHelper.REPORT_COLUMN_CONTENT)));
|
||||||
|
reports.add(wrapper);
|
||||||
|
} while (cursor.moveToNext());
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} finally {
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
return reports;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Delete Draft Record from draft table
|
||||||
|
* */
|
||||||
|
|
||||||
|
public void deleteDraftRecordById(Long id) {
|
||||||
|
executeSafely(() -> {
|
||||||
|
openDatabase();
|
||||||
|
database.beginTransaction();
|
||||||
|
try {
|
||||||
|
String whereClause = DatabaseHelper.DRAFT_REPORT_COLUMN_ID + " = ?";
|
||||||
|
|
||||||
|
String[] whereArgs = {String.valueOf(id)};
|
||||||
|
|
||||||
|
database.delete(DRAFT_REPORT_TABLE_NAME, whereClause, whereArgs);
|
||||||
|
|
||||||
|
database.setTransactionSuccessful();
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} finally {
|
||||||
|
database.endTransaction();
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,39 @@
|
||||||
|
package com.utopiaindustries.qc_android.db;
|
||||||
|
|
||||||
|
public class ReportWrapper {
|
||||||
|
|
||||||
|
private long id;
|
||||||
|
private String content;
|
||||||
|
|
||||||
|
public ReportWrapper(long id, String content) {
|
||||||
|
this.id = id;
|
||||||
|
this.content = content;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ReportWrapper() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getContent() {
|
||||||
|
return content;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setContent(String content) {
|
||||||
|
this.content = content;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "ReportWrapper{" +
|
||||||
|
"id=" + id +
|
||||||
|
", content='" + content + '\'' +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
package com.utopiaindustries.qc_android.fragments;
|
package com.utopiaindustries.qc_android.fragments;
|
||||||
|
|
||||||
|
import android.content.Intent;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
|
|
@ -15,8 +16,15 @@ import androidx.annotation.Nullable;
|
||||||
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.Fragment;
|
||||||
|
|
||||||
import com.utopiaindustries.qc_android.R;
|
import com.utopiaindustries.qc_android.R;
|
||||||
|
import com.utopiaindustries.qc_android.activities.DashboardActivity;
|
||||||
|
import com.utopiaindustries.qc_android.db.ReportRepository;
|
||||||
|
import com.utopiaindustries.qc_android.db.ReportWrapper;
|
||||||
import com.utopiaindustries.qc_android.models.DataEntryModel;
|
import com.utopiaindustries.qc_android.models.DataEntryModel;
|
||||||
import com.utopiaindustries.qc_android.utils.AppDataManager;
|
import com.utopiaindustries.qc_android.utils.AppDataManager;
|
||||||
|
import com.utopiaindustries.qc_android.utils.FileUtils;
|
||||||
|
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.ObjectOutputStream;
|
||||||
|
|
||||||
public class FragmentQcTerryThree extends Fragment {
|
public class FragmentQcTerryThree extends Fragment {
|
||||||
|
|
||||||
|
|
@ -125,15 +133,38 @@ public class FragmentQcTerryThree extends Fragment {
|
||||||
// Show success message
|
// Show success message
|
||||||
Toast.makeText(getActivity(), "Data submitted successfully!", Toast.LENGTH_SHORT).show();
|
Toast.makeText(getActivity(), "Data submitted successfully!", Toast.LENGTH_SHORT).show();
|
||||||
DataEntryModel dataEntryModel = AppDataManager.getInstance().getCurrentDataEntry();
|
DataEntryModel dataEntryModel = AppDataManager.getInstance().getCurrentDataEntry();
|
||||||
Log.e("DataEntryModel: " ,""+dataEntryModel);
|
Log.e("DataEntryModel: ", "" + dataEntryModel);
|
||||||
// Update UI
|
saveReport(dataEntryModel);
|
||||||
//btnSubmit.setText("Submitted ✓");
|
|
||||||
//btnSubmit.setEnabled(false);
|
|
||||||
//btnSubmit.setBackgroundColor(getResources().getColor(android.R.color.darker_gray));
|
|
||||||
|
|
||||||
// You would typically:
|
|
||||||
// 1. Send data to API/backend
|
// 1. Send data to API/backend
|
||||||
// 2. Save to database
|
// 2. Save to database
|
||||||
// 3. Navigate to success screen
|
// 3. Navigate to main screen
|
||||||
|
}
|
||||||
|
|
||||||
|
public void saveReport(DataEntryModel dataEntryModel) {
|
||||||
|
try {
|
||||||
|
// convert into byte array
|
||||||
|
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
|
||||||
|
ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
|
||||||
|
objectOutputStream.writeObject(dataEntryModel);
|
||||||
|
objectOutputStream.flush();
|
||||||
|
byte[] bytes = byteArrayOutputStream.toByteArray();
|
||||||
|
// write bytes in file
|
||||||
|
long epochSeconds = System.currentTimeMillis() / 1000;
|
||||||
|
//String fileName = "Report-" + inspectionReport.getItems().get(0).getSku() + ".bin";
|
||||||
|
String fileName = "Report-" + epochSeconds + ".bin";
|
||||||
|
String savedPath = FileUtils.writeFile(requireActivity(), bytes, fileName);
|
||||||
|
System.out.println(savedPath);
|
||||||
|
|
||||||
|
new ReportRepository(getActivity()).insert(
|
||||||
|
new ReportWrapper(0, savedPath)
|
||||||
|
);
|
||||||
|
|
||||||
|
Intent intent = new Intent(getActivity(), DashboardActivity.class);
|
||||||
|
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||||
|
startActivity(intent);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -244,7 +244,6 @@ public class FragmentQcTerryTwo extends Fragment implements CheckPointAdapter.On
|
||||||
result -> {
|
result -> {
|
||||||
if (result.getResultCode() == getActivity().RESULT_OK && photoUri != null) {
|
if (result.getResultCode() == getActivity().RESULT_OK && photoUri != null) {
|
||||||
//imageView.setImageURI(photoUri);
|
//imageView.setImageURI(photoUri);
|
||||||
dataEntryModel.setSelectedImageUri(photoUri);
|
|
||||||
|
|
||||||
Helper.uriToByteArrayAsync(
|
Helper.uriToByteArrayAsync(
|
||||||
getContext(),
|
getContext(),
|
||||||
|
|
@ -273,7 +272,6 @@ public class FragmentQcTerryTwo extends Fragment implements CheckPointAdapter.On
|
||||||
uri -> {
|
uri -> {
|
||||||
if (uri != null) {
|
if (uri != null) {
|
||||||
//imageView.setImageURI(uri);
|
//imageView.setImageURI(uri);
|
||||||
dataEntryModel.setSelectedImageUri(uri);
|
|
||||||
|
|
||||||
Helper.uriToByteArrayAsync(
|
Helper.uriToByteArrayAsync(
|
||||||
getContext(),
|
getContext(),
|
||||||
|
|
|
||||||
|
|
@ -2,10 +2,11 @@ package com.utopiaindustries.qc_android.models;
|
||||||
|
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class DataEntryModel {
|
public class DataEntryModel implements Serializable {
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
// Personal Info
|
// Personal Info
|
||||||
|
|
@ -21,7 +22,6 @@ public class DataEntryModel {
|
||||||
private String company;
|
private String company;
|
||||||
private String position;
|
private String position;
|
||||||
|
|
||||||
private Uri selectedImageUri;
|
|
||||||
private List<InspectionCheckPoint> checkPointList = new ArrayList<>();
|
private List<InspectionCheckPoint> checkPointList = new ArrayList<>();
|
||||||
|
|
||||||
// Constructor
|
// Constructor
|
||||||
|
|
@ -38,7 +38,6 @@ public class DataEntryModel {
|
||||||
this.city = other.city;
|
this.city = other.city;
|
||||||
this.company = other.company;
|
this.company = other.company;
|
||||||
this.position = other.position;
|
this.position = other.position;
|
||||||
this.selectedImageUri = other.selectedImageUri;
|
|
||||||
this.checkPointList = new ArrayList<>(other.checkPointList);
|
this.checkPointList = new ArrayList<>(other.checkPointList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -50,14 +49,6 @@ public class DataEntryModel {
|
||||||
this.checkPointList = checkPointList;
|
this.checkPointList = checkPointList;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Uri getSelectedImageUri() {
|
|
||||||
return selectedImageUri;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setSelectedImageUri(Uri selectedImageUri) {
|
|
||||||
this.selectedImageUri = selectedImageUri;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getPosition() {
|
public String getPosition() {
|
||||||
return position;
|
return position;
|
||||||
}
|
}
|
||||||
|
|
@ -122,7 +113,6 @@ public class DataEntryModel {
|
||||||
city = null;
|
city = null;
|
||||||
company = null;
|
company = null;
|
||||||
position = null;
|
position = null;
|
||||||
selectedImageUri = null;
|
|
||||||
checkPointList.clear();
|
checkPointList.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -136,7 +126,6 @@ public class DataEntryModel {
|
||||||
", city='" + city + '\'' +
|
", city='" + city + '\'' +
|
||||||
", company='" + company + '\'' +
|
", company='" + company + '\'' +
|
||||||
", position='" + position + '\'' +
|
", position='" + position + '\'' +
|
||||||
", selectedImageUri=" + selectedImageUri +
|
|
||||||
", checkPointListSize=" + checkPointList +
|
", checkPointListSize=" + checkPointList +
|
||||||
'}';
|
'}';
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import android.content.Context;
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
import com.google.gson.GsonBuilder;
|
import com.google.gson.GsonBuilder;
|
||||||
|
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
|
|
@ -16,6 +17,45 @@ import java.io.ObjectOutputStream;
|
||||||
|
|
||||||
public class FileUtils {
|
public class FileUtils {
|
||||||
|
|
||||||
|
public static String writeFile( Context context ,
|
||||||
|
byte[] content,
|
||||||
|
String fileName ){
|
||||||
|
FileOutputStream fos = null;
|
||||||
|
try {
|
||||||
|
// Get the file path in the internal storage
|
||||||
|
File file = new File( context.getFilesDir(), fileName);
|
||||||
|
// Open the file output stream
|
||||||
|
fos = new FileOutputStream(file);
|
||||||
|
fos.write( content );
|
||||||
|
fos.flush();
|
||||||
|
return file.getAbsolutePath();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} finally {
|
||||||
|
if (fos != null) {
|
||||||
|
try {
|
||||||
|
fos.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
public static byte[] readFile(String filePath) throws IOException {
|
||||||
|
File file = new File(filePath);
|
||||||
|
try (FileInputStream fis = new FileInputStream(file);
|
||||||
|
ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
|
||||||
|
byte[] buffer = new byte[8192];
|
||||||
|
int bytesRead;
|
||||||
|
while ((bytesRead = fis.read(buffer)) != -1) {
|
||||||
|
baos.write(buffer, 0, bytesRead);
|
||||||
|
}
|
||||||
|
return baos.toByteArray();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Save model object as byte array file
|
// Save model object as byte array file
|
||||||
public static String saveObjectToFile(Context context, Object model, String fileName) {
|
public static String saveObjectToFile(Context context, Object model, String fileName) {
|
||||||
File file = new File(context.getFilesDir(), fileName);
|
File file = new File(context.getFilesDir(), fileName);
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
package com.utopiaindustries.qc_android.utils;
|
||||||
|
|
||||||
|
|
||||||
|
import com.utopiaindustries.qc_android.db.ReportWrapper;
|
||||||
|
|
||||||
|
public interface ReportSelectListener {
|
||||||
|
|
||||||
|
void onItemClicked(ReportWrapper reportWrapper);
|
||||||
|
}
|
||||||
|
|
@ -10,6 +10,7 @@ import androidx.lifecycle.ViewModel;
|
||||||
import com.utopiaindustries.qc_android.apiservice.ApiService;
|
import com.utopiaindustries.qc_android.apiservice.ApiService;
|
||||||
import com.utopiaindustries.qc_android.apiservice.ApiServiceFactory;
|
import com.utopiaindustries.qc_android.apiservice.ApiServiceFactory;
|
||||||
import com.utopiaindustries.qc_android.db.CheckpointRepository;
|
import com.utopiaindustries.qc_android.db.CheckpointRepository;
|
||||||
|
import com.utopiaindustries.qc_android.models.DataEntryModel;
|
||||||
import com.utopiaindustries.qc_android.models.InspectionCheckPoint;
|
import com.utopiaindustries.qc_android.models.InspectionCheckPoint;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -229,35 +230,31 @@ public class ServiceViewModel extends ViewModel {
|
||||||
});
|
});
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
/*public void saveHSEData(HseReportRequest hseRequestModel) {
|
/*public void saveReport(DataEntryModel hseRequestModel) {
|
||||||
isLoading.setValue(true);
|
isLoading.setValue(true);
|
||||||
|
|
||||||
// Execute the task in the background
|
try {
|
||||||
executorService.execute(() -> {
|
apiService.saveReport(hseRequestModel).enqueue(new Callback<DataEntryModel>() {
|
||||||
try {
|
@Override
|
||||||
apiService.saveHseReport(hseRequestModel).enqueue(new Callback<HseSaveResponse>() {
|
public void onResponse(Call<DataEntryModel> call, Response<DataEntryModel> response) {
|
||||||
@Override
|
isLoading.setValue(false);
|
||||||
public void onResponse(Call<HseSaveResponse> call, Response<HseSaveResponse> response) {
|
if (response.isSuccessful() && response.body() != null) {
|
||||||
isLoading.setValue(false);
|
userSaveLiveData.setValue(response.body());
|
||||||
if (response.isSuccessful() && response.body() != null) {
|
} else {
|
||||||
userSaveLiveData.setValue(response.body());
|
errorLiveData.setValue(response.message());
|
||||||
} else {
|
|
||||||
errorLiveData.setValue(response.message());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onFailure(Call<HseSaveResponse> call, Throwable t) {
|
public void onFailure(Call<DataEntryModel> call, Throwable t) {
|
||||||
isLoading.setValue(false);
|
isLoading.setValue(false);
|
||||||
errorLiveData.setValue(t.getMessage());
|
errorLiveData.setValue(t.getMessage());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
errorLiveData.postValue(e.getMessage());
|
errorLiveData.postValue(e.getMessage());
|
||||||
isLoading.postValue(false);
|
isLoading.postValue(false);
|
||||||
}
|
}
|
||||||
});
|
|
||||||
|
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
public LiveData<Boolean> getLoginUser() {
|
public LiveData<Boolean> getLoginUser() {
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:shape="rectangle">
|
||||||
|
<solid android:color="@android:color/white" />
|
||||||
|
<stroke
|
||||||
|
android:color="@color/theme_color"
|
||||||
|
android:width="4dp" />
|
||||||
|
<corners android:radius="12dp" />
|
||||||
|
</shape>
|
||||||
|
|
@ -23,7 +23,7 @@
|
||||||
android:id="@+id/textView"
|
android:id="@+id/textView"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="Home"
|
android:text="Dashboard"
|
||||||
android:textColor="@color/white"
|
android:textColor="@color/white"
|
||||||
android:textSize="@dimen/_12sdp"
|
android:textSize="@dimen/_12sdp"
|
||||||
app:layout_constraintBottom_toBottomOf="@+id/toolbar"
|
app:layout_constraintBottom_toBottomOf="@+id/toolbar"
|
||||||
|
|
@ -50,7 +50,28 @@
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/toolbar">
|
app:layout_constraintTop_toBottomOf="@+id/toolbar">
|
||||||
|
|
||||||
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
|
android:id="@+id/report_recyclerview"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_above="@+id/btn_layout"
|
||||||
|
android:layout_margin="5dp"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/draft_textview"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:padding="5dp"
|
||||||
|
android:textStyle="bold"
|
||||||
|
android:textSize="@dimen/_13sdp"
|
||||||
|
android:visibility="gone"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:text="No Reports found"
|
||||||
|
android:layout_centerInParent="true"
|
||||||
|
android:gravity="center" />
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
|
android:id="@+id/btn_layout"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_alignParentBottom="true"
|
android:layout_alignParentBottom="true"
|
||||||
|
|
|
||||||
|
|
@ -4,12 +4,10 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_margin="8dp"
|
android:layout_margin="8dp"
|
||||||
android:layout_marginVertical="4dp"
|
android:background="@drawable/card_background"
|
||||||
android:clickable="true"
|
android:foreground="?attr/selectableItemBackground"
|
||||||
android:elevation="10dp"
|
app:cardCornerRadius="12dp"
|
||||||
android:focusable="true"
|
app:cardElevation="6dp">
|
||||||
android:padding="5dp"
|
|
||||||
app:cardBackgroundColor="@color/white">
|
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
|
@ -52,8 +50,10 @@
|
||||||
android:id="@+id/check_point_remarks"
|
android:id="@+id/check_point_remarks"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:singleLine="true"
|
||||||
android:layout_margin="5dp"
|
android:layout_margin="5dp"
|
||||||
android:background="@drawable/et_border"
|
android:background="@drawable/et_border"
|
||||||
|
android:imeOptions="actionDone"
|
||||||
android:hint="Remarks"
|
android:hint="Remarks"
|
||||||
android:padding="10dp" />
|
android:padding="10dp" />
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,48 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:id="@+id/main_container"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_margin="8dp"
|
||||||
|
android:background="@drawable/card_background"
|
||||||
|
android:foreground="?attr/selectableItemBackground"
|
||||||
|
app:cardCornerRadius="12dp"
|
||||||
|
app:cardElevation="6dp">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:padding="16dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/report_date"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="start"
|
||||||
|
android:text="Date"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textSize="@dimen/_11sdp" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/txt_category"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="01"
|
||||||
|
android:layout_marginTop="5dp"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textSize="@dimen/_10sdp" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/txt_createdBy"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="Remarks"
|
||||||
|
android:layout_marginTop="5dp"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textSize="@dimen/_10sdp" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</androidx.cardview.widget.CardView>
|
||||||
|
|
@ -23,9 +23,9 @@
|
||||||
android:id="@+id/textView"
|
android:id="@+id/textView"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="Home - Mobile"
|
android:text="Dashboard"
|
||||||
android:textColor="@color/white"
|
android:textColor="@color/white"
|
||||||
android:textSize="@dimen/_15sdp"
|
android:textSize="@dimen/_12sdp"
|
||||||
app:layout_constraintBottom_toBottomOf="@+id/toolbar"
|
app:layout_constraintBottom_toBottomOf="@+id/toolbar"
|
||||||
app:layout_constraintEnd_toEndOf="@+id/toolbar"
|
app:layout_constraintEnd_toEndOf="@+id/toolbar"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
|
@ -50,7 +50,100 @@
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/toolbar">
|
app:layout_constraintTop_toBottomOf="@+id/toolbar">
|
||||||
|
|
||||||
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
|
android:id="@+id/report_recyclerview"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_above="@+id/btn_layout"
|
||||||
|
android:layout_margin="5dp"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/draft_textview"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:padding="5dp"
|
||||||
|
android:textStyle="bold"
|
||||||
|
android:textSize="@dimen/_13sdp"
|
||||||
|
android:visibility="gone"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:text="No Reports found"
|
||||||
|
android:layout_centerInParent="true"
|
||||||
|
android:gravity="center" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/btn_layout"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_above="@+id/btn_create_report"
|
||||||
|
android:background="@color/grey_200"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:weightSum="2"
|
||||||
|
android:padding="5dp">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/btn_reports_upload"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_margin="5dp"
|
||||||
|
android:background="@drawable/rounded_btn_login"
|
||||||
|
android:text="Upload Reports"
|
||||||
|
app:backgroundTint="@color/grey_500" />
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/btn_app_update"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_margin="5dp"
|
||||||
|
android:background="@drawable/rounded_btn_login"
|
||||||
|
android:text="App Update"
|
||||||
|
app:backgroundTint="@color/grey_500" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/btn_fetch_product"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_margin="5dp"
|
||||||
|
android:background="@drawable/rounded_btn_login"
|
||||||
|
android:text="Fetch"
|
||||||
|
app:backgroundTint="@color/grey_500" />
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/btn_logout"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_margin="5dp"
|
||||||
|
android:background="@drawable/rounded_btn_login"
|
||||||
|
android:text="Logout"
|
||||||
|
app:backgroundTint="@color/grey_500" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/btn_create_report"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="10dp"
|
||||||
|
android:layout_marginEnd="10dp"
|
||||||
|
android:layout_marginBottom="5dp"
|
||||||
|
android:layout_alignParentBottom="true"
|
||||||
|
android:background="@drawable/rounded_btn_login"
|
||||||
|
android:text="Create"
|
||||||
|
app:backgroundTint="@color/blue_600" />
|
||||||
|
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,34 +12,36 @@
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginStart="1dp"
|
android:layout_marginStart="1dp"
|
||||||
android:layout_marginTop="60dp"
|
|
||||||
android:layout_marginEnd="1dp"
|
android:layout_marginEnd="1dp"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent">
|
app:layout_constraintTop_toTopOf="parent">
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:layout_width="150dp"
|
android:layout_width="100dp"
|
||||||
android:layout_height="150dp"
|
android:layout_height="100dp"
|
||||||
android:layout_marginBottom="20dp"
|
android:layout_marginBottom="20dp"
|
||||||
android:src="@drawable/qc" />
|
android:src="@drawable/ic_launcher" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginStart="10dp"
|
android:layout_marginStart="30dp"
|
||||||
android:layout_marginBottom="20dp"
|
android:layout_marginBottom="20dp"
|
||||||
android:padding="5dp"
|
android:padding="5dp"
|
||||||
android:text="Login Now to Continue"
|
android:text="Login Now to Continue"
|
||||||
android:textSize="@dimen/_17sdp" />
|
android:textSize="@dimen/_14sdp" />
|
||||||
|
|
||||||
|
|
||||||
<com.google.android.material.textfield.TextInputLayout
|
<com.google.android.material.textfield.TextInputLayout
|
||||||
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
|
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
|
||||||
android:layout_width="300dp"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:paddingStart="50dp"
|
||||||
|
android:paddingEnd="50dp"
|
||||||
android:layout_gravity="center_horizontal">
|
android:layout_gravity="center_horizontal">
|
||||||
|
|
||||||
<EditText
|
<EditText
|
||||||
|
|
@ -50,16 +52,19 @@
|
||||||
android:drawableStart="@drawable/ic_email"
|
android:drawableStart="@drawable/ic_email"
|
||||||
android:drawablePadding="5dp"
|
android:drawablePadding="5dp"
|
||||||
android:drawableTint="@color/grey_700"
|
android:drawableTint="@color/grey_700"
|
||||||
|
android:padding="10dp"
|
||||||
android:hint="User"
|
android:hint="User"
|
||||||
android:inputType="text" />
|
android:inputType="text" />
|
||||||
</com.google.android.material.textfield.TextInputLayout>
|
</com.google.android.material.textfield.TextInputLayout>
|
||||||
|
|
||||||
<com.google.android.material.textfield.TextInputLayout
|
<com.google.android.material.textfield.TextInputLayout
|
||||||
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
|
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
|
||||||
android:layout_width="300dp"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="center_horizontal"
|
android:layout_gravity="center_horizontal"
|
||||||
android:layout_marginTop="5dp"
|
android:layout_marginTop="10dp"
|
||||||
|
android:paddingStart="50dp"
|
||||||
|
android:paddingEnd="50dp"
|
||||||
app:passwordToggleEnabled="true">
|
app:passwordToggleEnabled="true">
|
||||||
|
|
||||||
<EditText
|
<EditText
|
||||||
|
|
@ -69,22 +74,24 @@
|
||||||
android:background="@null"
|
android:background="@null"
|
||||||
android:drawableStart="@drawable/ic_password"
|
android:drawableStart="@drawable/ic_password"
|
||||||
android:drawablePadding="5dp"
|
android:drawablePadding="5dp"
|
||||||
|
android:padding="10dp"
|
||||||
android:drawableTint="@color/grey_700"
|
android:drawableTint="@color/grey_700"
|
||||||
android:hint="Password"
|
android:hint="Password"
|
||||||
android:inputType="textPassword" />
|
android:inputType="textPassword" />
|
||||||
</com.google.android.material.textfield.TextInputLayout>
|
</com.google.android.material.textfield.TextInputLayout>
|
||||||
|
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
android:id="@+id/btn_login"
|
android:id="@+id/btn_login"
|
||||||
android:layout_width="300dp"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="15dp"
|
android:layout_marginStart="50dp"
|
||||||
|
android:layout_marginEnd="50dp"
|
||||||
|
android:layout_marginTop="20dp"
|
||||||
android:background="@drawable/rounded_btn_login"
|
android:background="@drawable/rounded_btn_login"
|
||||||
android:padding="10dp"
|
android:padding="5dp"
|
||||||
android:text="Login"
|
android:text="Login"
|
||||||
android:textColor="@color/white"
|
android:textColor="@color/white"
|
||||||
android:textSize="@dimen/_15sdp" />
|
android:textSize="@dimen/_10sdp" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
|
|
@ -95,14 +102,14 @@
|
||||||
android:layout_marginBottom="28dp"
|
android:layout_marginBottom="28dp"
|
||||||
android:textStyle="bold"
|
android:textStyle="bold"
|
||||||
android:text="V-1.0"
|
android:text="V-1.0"
|
||||||
android:textSize="@dimen/_13sdp"
|
android:textSize="@dimen/_11sdp"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintEnd_toEndOf="parent" />
|
app:layout_constraintEnd_toEndOf="parent" />
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/img_check_update"
|
android:id="@+id/img_check_update"
|
||||||
android:layout_width="40dp"
|
android:layout_width="50dp"
|
||||||
android:layout_height="40dp"
|
android:layout_height="50dp"
|
||||||
android:layout_marginTop="16dp"
|
android:layout_marginTop="16dp"
|
||||||
android:layout_marginEnd="10dp"
|
android:layout_marginEnd="10dp"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
|
|
||||||
|
|
@ -7,4 +7,12 @@
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
tools:context=".activities.QCTerryActivity">
|
tools:context=".activities.QCTerryActivity">
|
||||||
|
|
||||||
|
<fragment
|
||||||
|
android:id="@+id/nav_host_fragment"
|
||||||
|
android:name="androidx.navigation.fragment.NavHostFragment"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
app:defaultNavHost="true"
|
||||||
|
app:navGraph="@navigation/nav_graph" />
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
@ -4,70 +4,58 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_margin="8dp"
|
android:layout_margin="8dp"
|
||||||
android:layout_marginVertical="4dp"
|
android:background="@drawable/card_background"
|
||||||
android:clickable="true"
|
android:foreground="?attr/selectableItemBackground"
|
||||||
android:elevation="10dp"
|
app:cardCornerRadius="12dp"
|
||||||
android:focusable="true"
|
app:cardElevation="6dp">
|
||||||
android:padding="4dp"
|
|
||||||
app:cardBackgroundColor="@color/white">
|
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical">
|
||||||
android:padding="8dp">
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/check_point_title"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:padding="10dp"
|
||||||
|
android:background="@color/grey_200"
|
||||||
|
android:layout_gravity="center|right"
|
||||||
|
android:layout_marginBottom="5dp"
|
||||||
|
android:textStyle="bold" />
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_margin="5dp"
|
||||||
android:orientation="horizontal">
|
android:orientation="horizontal">
|
||||||
|
|
||||||
<Spinner
|
|
||||||
android:id="@+id/check_point_spinner"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="50dp"
|
|
||||||
android:layout_weight="4">
|
|
||||||
|
|
||||||
</Spinner>
|
|
||||||
|
|
||||||
<CheckBox
|
<CheckBox
|
||||||
android:id="@+id/check_point_ok"
|
android:id="@+id/check_point_ok"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="50dp"
|
android:layout_height="50dp"
|
||||||
android:layout_weight="1"
|
android:layout_weight="0.5"
|
||||||
android:text="OK"/>
|
android:text="OK" />
|
||||||
|
|
||||||
<CheckBox
|
<CheckBox
|
||||||
android:id="@+id/check_point_no"
|
android:id="@+id/check_point_no"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="50dp"
|
android:layout_height="50dp"
|
||||||
android:layout_weight="1"
|
android:layout_weight="10.5"
|
||||||
android:text="NO"/>
|
android:text="NO" />
|
||||||
|
|
||||||
<!-- <ImageButton-->
|
|
||||||
<!-- android:id="@+id/check_point_delete"-->
|
|
||||||
<!-- android:layout_width="wrap_content"-->
|
|
||||||
<!-- android:layout_height="wrap_content"-->
|
|
||||||
<!-- android:src="@drawable/ic_delete"-->
|
|
||||||
<!-- android:background="@null"-->
|
|
||||||
<!-- android:padding="8dp"/>-->
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<LinearLayout
|
<EditText
|
||||||
|
android:id="@+id/check_point_remarks"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="3dp"
|
android:singleLine="true"
|
||||||
android:orientation="horizontal">
|
android:layout_margin="5dp"
|
||||||
|
android:background="@drawable/et_border"
|
||||||
<EditText
|
android:imeOptions="actionDone"
|
||||||
android:id="@+id/check_point_remarks"
|
android:hint="Remarks"
|
||||||
android:layout_width="wrap_content"
|
android:padding="10dp" />
|
||||||
android:layout_height="50dp"
|
|
||||||
android:layout_weight="4"
|
|
||||||
android:hint="Remarks"/>
|
|
||||||
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
|
@ -77,72 +65,37 @@
|
||||||
|
|
||||||
<androidx.recyclerview.widget.RecyclerView
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
android:id="@+id/image_recycler_view"
|
android:id="@+id/image_recycler_view"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="0dp"
|
||||||
android:layout_height="150dp"
|
android:layout_height="150dp"
|
||||||
android:layout_margin="10dp"
|
android:layout_margin="10dp"
|
||||||
android:layout_weight="0.8"
|
android:layout_weight="0.9"
|
||||||
android:orientation="horizontal" />
|
android:orientation="horizontal" />
|
||||||
|
|
||||||
<!--<ImageView
|
<LinearLayout
|
||||||
android:id="@+id/preview_image"
|
android:layout_width="0dp"
|
||||||
android:layout_width="150dp"
|
|
||||||
android:layout_height="150dp">
|
|
||||||
</ImageView>-->
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/selected_image"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:layout_weight="0.2"
|
|
||||||
android:text=""
|
|
||||||
android:textAlignment="center"/>
|
|
||||||
|
|
||||||
<ImageButton
|
|
||||||
android:id="@+id/image_picker"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@null"
|
android:layout_weight="0.1"
|
||||||
android:padding="8dp"
|
android:orientation="horizontal">
|
||||||
android:src="@drawable/image_picker" />
|
|
||||||
|
|
||||||
<ImageButton
|
<ImageButton
|
||||||
android:id="@+id/delete_image"
|
android:id="@+id/image_picker"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@null"
|
android:background="@null"
|
||||||
android:padding="8dp"
|
android:padding="8dp"
|
||||||
android:src="@drawable/ic_delete" />
|
android:src="@drawable/image_picker" />
|
||||||
|
|
||||||
<ImageButton
|
<ImageButton
|
||||||
android:id="@+id/add_defect"
|
android:id="@+id/delete_image"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@null"
|
android:background="@null"
|
||||||
android:padding="8dp"
|
android:padding="8dp"
|
||||||
android:src="@drawable/ic_add" />
|
android:src="@drawable/ic_delete" />
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
<LinearLayout
|
</LinearLayout>
|
||||||
android:id="@+id/defect_layout"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginTop="3dp"
|
|
||||||
android:orientation="horizontal">
|
|
||||||
|
|
||||||
<androidx.recyclerview.widget.RecyclerView
|
|
||||||
android:id="@+id/defects_recyclerview"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"/>
|
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/standard"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:background="@color/light_blue_50"
|
|
||||||
android:padding="16dp"
|
|
||||||
android:text=""
|
|
||||||
android:textColor="#000000"
|
|
||||||
android:textSize="18sp" />
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
</androidx.cardview.widget.CardView>
|
</androidx.cardview.widget.CardView>
|
||||||
|
|
@ -27,7 +27,7 @@
|
||||||
android:text="Select Image from"
|
android:text="Select Image from"
|
||||||
android:textAllCaps="false"
|
android:textAllCaps="false"
|
||||||
android:textColor="@color/black"
|
android:textColor="@color/black"
|
||||||
android:textSize="@dimen/_15sdp"
|
android:textSize="@dimen/_12sdp"
|
||||||
android:textStyle="normal" />
|
android:textStyle="normal" />
|
||||||
|
|
||||||
<View
|
<View
|
||||||
|
|
@ -54,7 +54,7 @@
|
||||||
android:text="Camera"
|
android:text="Camera"
|
||||||
android:textAllCaps="false"
|
android:textAllCaps="false"
|
||||||
android:textColor="@color/white"
|
android:textColor="@color/white"
|
||||||
android:textSize="@dimen/_14sdp"
|
android:textSize="@dimen/_12sdp"
|
||||||
android:textStyle="normal" />
|
android:textStyle="normal" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
|
|
@ -77,7 +77,7 @@
|
||||||
android:textAllCaps="false"
|
android:textAllCaps="false"
|
||||||
android:background="@drawable/custom_button"
|
android:background="@drawable/custom_button"
|
||||||
android:textColor="@color/white"
|
android:textColor="@color/white"
|
||||||
android:textSize="@dimen/_14sdp"
|
android:textSize="@dimen/_12sdp"
|
||||||
android:textStyle="normal" />
|
android:textStyle="normal" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
|
||||||
|
|
@ -1,109 +1,98 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent">
|
||||||
android:orientation="vertical"
|
|
||||||
android:padding="16dp">
|
|
||||||
|
|
||||||
<TextView
|
<androidx.appcompat.widget.Toolbar
|
||||||
android:layout_width="wrap_content"
|
android:id="@+id/toolbar"
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginBottom="24dp"
|
|
||||||
android:text="Personal Information"
|
|
||||||
android:textSize="20sp"
|
|
||||||
android:textStyle="bold" />
|
|
||||||
|
|
||||||
<com.google.android.material.textfield.TextInputLayout
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginBottom="16dp"
|
android:background="@color/theme_color"
|
||||||
android:hint="First Name"
|
android:minHeight="?attr/actionBarSize"
|
||||||
app:errorEnabled="true">
|
android:theme="?attr/actionBarTheme">
|
||||||
|
|
||||||
<EditText
|
<TextView
|
||||||
android:id="@+id/edtFirstName"
|
android:id="@+id/textView"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:inputType="textPersonName" />
|
android:layout_gravity="center"
|
||||||
</com.google.android.material.textfield.TextInputLayout>
|
android:gravity="center"
|
||||||
|
android:padding="5dp"
|
||||||
|
android:text="QC - Terry"
|
||||||
|
android:textColor="@color/white"
|
||||||
|
android:textSize="@dimen/_11sdp" />
|
||||||
|
</androidx.appcompat.widget.Toolbar>
|
||||||
|
|
||||||
<com.google.android.material.textfield.TextInputLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="match_parent"
|
||||||
android:layout_marginBottom="16dp"
|
android:layout_above="@+id/btnNext"
|
||||||
android:hint="Last Name"
|
android:layout_below="@+id/toolbar"
|
||||||
app:errorEnabled="true">
|
android:layout_margin="5dp"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:padding="10dp">
|
||||||
|
|
||||||
<EditText
|
<TextView
|
||||||
android:id="@+id/edtLastName"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:inputType="textPersonName" />
|
|
||||||
</com.google.android.material.textfield.TextInputLayout>
|
|
||||||
|
|
||||||
<com.google.android.material.textfield.TextInputLayout
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginBottom="32dp"
|
|
||||||
android:hint="Email"
|
|
||||||
app:errorEnabled="true">
|
|
||||||
|
|
||||||
<EditText
|
|
||||||
android:id="@+id/edtEmail"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:inputType="textEmailAddress" />
|
|
||||||
</com.google.android.material.textfield.TextInputLayout>
|
|
||||||
|
|
||||||
<RelativeLayout
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:orientation="horizontal">
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_alignParentStart="true"
|
android:layout_marginBottom="24dp"
|
||||||
android:layout_centerInParent="true"
|
android:text="Personal Information"
|
||||||
android:padding="5dp"
|
android:textSize="20sp"
|
||||||
android:orientation="vertical"
|
android:textStyle="bold" />
|
||||||
android:layout_marginBottom="16dp">
|
|
||||||
|
|
||||||
<Button
|
<com.google.android.material.textfield.TextInputLayout
|
||||||
android:id="@+id/btnCamera"
|
android:layout_width="match_parent"
|
||||||
android:layout_width="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginBottom="16dp"
|
||||||
|
android:hint="First Name"
|
||||||
|
app:errorEnabled="true">
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/edtFirstName"
|
||||||
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_weight="1"
|
android:inputType="textPersonName" />
|
||||||
android:text="Camera" />
|
</com.google.android.material.textfield.TextInputLayout>
|
||||||
|
|
||||||
<Button
|
<com.google.android.material.textfield.TextInputLayout
|
||||||
android:id="@+id/btnGallery"
|
android:layout_width="match_parent"
|
||||||
android:layout_width="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginBottom="16dp"
|
||||||
|
android:hint="Last Name"
|
||||||
|
app:errorEnabled="true">
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/edtLastName"
|
||||||
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_weight="1"
|
android:inputType="textPersonName" />
|
||||||
android:text="Gallery " />
|
</com.google.android.material.textfield.TextInputLayout>
|
||||||
|
|
||||||
</LinearLayout>
|
<com.google.android.material.textfield.TextInputLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
<ImageView
|
android:layout_height="wrap_content"
|
||||||
android:id="@+id/imageView"
|
android:layout_marginBottom="32dp"
|
||||||
android:layout_width="200dp"
|
android:hint="Email"
|
||||||
android:layout_height="200dp"
|
app:errorEnabled="true">
|
||||||
android:padding="5dp"
|
|
||||||
android:layout_alignParentEnd="true"
|
|
||||||
android:background="#f0f0f0"
|
|
||||||
android:scaleType="centerCrop"
|
|
||||||
android:layout_marginBottom="24dp"/>
|
|
||||||
</RelativeLayout>
|
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/edtEmail"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:inputType="textEmailAddress" />
|
||||||
|
</com.google.android.material.textfield.TextInputLayout>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
android:id="@+id/btnNext"
|
android:id="@+id/btnNext"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="16dp"
|
android:layout_alignParentBottom="true"
|
||||||
android:text="Next →" />
|
android:background="@drawable/rounded_btn_login"
|
||||||
|
android:padding="10dp"
|
||||||
|
android:text="Next →"
|
||||||
|
android:textSize="@dimen/_11sdp" />
|
||||||
|
|
||||||
</LinearLayout>
|
</RelativeLayout>
|
||||||
|
|
@ -1,32 +1,45 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.Toolbar
|
||||||
|
android:id="@+id/toolbar"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="@color/theme_color"
|
||||||
|
android:minHeight="?attr/actionBarSize"
|
||||||
|
android:theme="?attr/actionBarTheme">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/textView"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:gravity="center"
|
||||||
|
android:padding="5dp"
|
||||||
|
android:text="QC - Terry"
|
||||||
|
android:textColor="@color/white"
|
||||||
|
android:textSize="@dimen/_11sdp" />
|
||||||
|
</androidx.appcompat.widget.Toolbar>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="vertical"
|
android:layout_below="@+id/toolbar"
|
||||||
android:padding="16dp">
|
android:layout_margin="5dp"
|
||||||
|
android:orientation="vertical">
|
||||||
<TextView
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="Employment Information"
|
|
||||||
android:textSize="20sp"
|
|
||||||
android:textStyle="bold"
|
|
||||||
android:layout_marginBottom="24dp"/>
|
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/tvSummary"
|
android:id="@+id/tvSummary"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="Summary will appear here"
|
android:layout_marginBottom="24dp"
|
||||||
android:textSize="14sp"
|
|
||||||
android:padding="12dp"
|
|
||||||
android:background="#F5F5F5"
|
android:background="#F5F5F5"
|
||||||
android:layout_marginBottom="24dp"/>
|
android:padding="12dp"
|
||||||
|
android:text="Summary will appear here"
|
||||||
|
android:textSize="14sp" />
|
||||||
|
|
||||||
<com.google.android.material.textfield.TextInputLayout
|
<com.google.android.material.textfield.TextInputLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
|
@ -39,7 +52,7 @@
|
||||||
android:id="@+id/edtCompany"
|
android:id="@+id/edtCompany"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:inputType="text"/>
|
android:inputType="text" />
|
||||||
</com.google.android.material.textfield.TextInputLayout>
|
</com.google.android.material.textfield.TextInputLayout>
|
||||||
|
|
||||||
<com.google.android.material.textfield.TextInputLayout
|
<com.google.android.material.textfield.TextInputLayout
|
||||||
|
|
@ -53,29 +66,19 @@
|
||||||
android:id="@+id/edtPosition"
|
android:id="@+id/edtPosition"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:inputType="text"/>
|
android:inputType="text" />
|
||||||
</com.google.android.material.textfield.TextInputLayout>
|
</com.google.android.material.textfield.TextInputLayout>
|
||||||
|
|
||||||
<com.google.android.material.textfield.TextInputLayout
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginBottom="32dp"
|
|
||||||
android:hint="Salary (Optional)">
|
|
||||||
|
|
||||||
<EditText
|
|
||||||
android:id="@+id/edtSalary"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:inputType="numberDecimal"/>
|
|
||||||
</com.google.android.material.textfield.TextInputLayout>
|
|
||||||
|
|
||||||
<Button
|
|
||||||
android:id="@+id/btnSubmit"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="Submit All Data"
|
|
||||||
android:layout_marginTop="16dp"
|
|
||||||
android:backgroundTint="@android:color/holo_green_dark"/>
|
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
</ScrollView>
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/btnSubmit"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentBottom="true"
|
||||||
|
android:background="@drawable/rounded_btn_login"
|
||||||
|
android:padding="10dp"
|
||||||
|
android:text="Submit"
|
||||||
|
android:textSize="@dimen/_11sdp" />
|
||||||
|
|
||||||
|
</RelativeLayout>
|
||||||
|
|
@ -1,66 +1,48 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical">
|
||||||
android:padding="16dp">
|
|
||||||
|
|
||||||
<TextView
|
<androidx.appcompat.widget.Toolbar
|
||||||
android:layout_width="wrap_content"
|
android:id="@+id/toolbar"
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="Address Information"
|
|
||||||
android:textSize="20sp"
|
|
||||||
android:textStyle="bold"
|
|
||||||
android:layout_marginBottom="24dp"/>
|
|
||||||
|
|
||||||
<com.google.android.material.textfield.TextInputLayout
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginBottom="16dp"
|
android:background="@color/theme_color"
|
||||||
android:hint="Address"
|
android:minHeight="?attr/actionBarSize"
|
||||||
app:errorEnabled="true">
|
android:theme="?attr/actionBarTheme" >
|
||||||
|
|
||||||
<EditText
|
<TextView
|
||||||
android:id="@+id/edtAddress"
|
android:id="@+id/textView"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:inputType="textPostalAddress"/>
|
android:text="QC - Terry"
|
||||||
</com.google.android.material.textfield.TextInputLayout>
|
android:layout_gravity="center"
|
||||||
|
android:gravity="center"
|
||||||
|
android:padding="5dp"
|
||||||
|
android:textColor="@color/white"
|
||||||
|
android:textSize="@dimen/_11sdp" />
|
||||||
|
</androidx.appcompat.widget.Toolbar>
|
||||||
|
|
||||||
<com.google.android.material.textfield.TextInputLayout
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
|
android:id="@+id/check_point_recycler_view"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="match_parent"
|
||||||
android:layout_marginBottom="16dp"
|
android:layout_below="@+id/toolbar"
|
||||||
android:hint="City"
|
android:layout_above="@+id/btnNext"
|
||||||
app:errorEnabled="true">
|
android:layout_margin="5dp"
|
||||||
|
android:padding="8dp" />
|
||||||
<EditText
|
|
||||||
android:id="@+id/edtCity"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:inputType="textPostalAddress"/>
|
|
||||||
</com.google.android.material.textfield.TextInputLayout>
|
|
||||||
|
|
||||||
<com.google.android.material.textfield.TextInputLayout
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginBottom="32dp"
|
|
||||||
android:hint="Zip Code"
|
|
||||||
app:errorEnabled="true">
|
|
||||||
|
|
||||||
<EditText
|
|
||||||
android:id="@+id/edtZipCode"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:inputType="number"/>
|
|
||||||
</com.google.android.material.textfield.TextInputLayout>
|
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
android:id="@+id/btnNext"
|
android:id="@+id/btnNext"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="Next →"
|
android:layout_marginTop="10dp"
|
||||||
android:layout_marginTop="16dp"/>
|
android:layout_alignParentBottom="true"
|
||||||
|
android:background="@drawable/rounded_btn_login"
|
||||||
|
android:padding="10dp"
|
||||||
|
android:textSize="@dimen/_11sdp"
|
||||||
|
android:text="Next →" />
|
||||||
|
|
||||||
</LinearLayout>
|
</RelativeLayout>
|
||||||
|
|
@ -0,0 +1,55 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:id="@+id/main_container"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_margin="8dp"
|
||||||
|
android:background="@drawable/card_background"
|
||||||
|
android:foreground="?attr/selectableItemBackground"
|
||||||
|
app:cardCornerRadius="12dp"
|
||||||
|
app:cardElevation="6dp">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:padding="16dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/report_date"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="start"
|
||||||
|
android:text="Date"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textSize="16sp" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/txt_category"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:text="01"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textSize="16sp" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/txt_createdBy"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="Remarks"
|
||||||
|
android:layout_marginTop="5dp"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textSize="16sp" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</androidx.cardview.widget.CardView>
|
||||||
Loading…
Reference in New Issue