commit f35e7c534b051cfc68f7300ef9bad5901539f6d5 Author: saad.siddiq Date: Sat Nov 23 09:54:03 2024 +0500 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..aa724b7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +*.iml +.gradle +/local.properties +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml +.DS_Store +/build +/captures +.externalNativeBuild +.cxx +local.properties diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000..01cbf80 --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +QualityControl-App \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..b589d56 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml new file mode 100644 index 0000000..b268ef3 --- /dev/null +++ b/.idea/deploymentTargetSelector.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..0897082 --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,19 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/migrations.xml b/.idea/migrations.xml new file mode 100644 index 0000000..f8051a6 --- /dev/null +++ b/.idea/migrations.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..0ad17cb --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 0000000..7a16048 --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,46 @@ +plugins { + alias(libs.plugins.android.application) +} + +android { + namespace 'com.utopiaindustries.qualitycontrol' + compileSdk 34 + + defaultConfig { + applicationId "com.utopiaindustries.qualitycontrol" + minSdk 24 + targetSdk 34 + versionCode 1 + versionName "1.0" + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } +} + +dependencies { + + implementation libs.appcompat + implementation libs.material + implementation libs.activity + implementation libs.constraintlayout + testImplementation libs.junit + androidTestImplementation libs.ext.junit + androidTestImplementation libs.espresso.core + + implementation libs.retrofit.v290 + implementation libs.converter.gson + implementation libs.glide + implementation libs.easypermissions + +} \ No newline at end of file diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/app/src/androidTest/java/com/utopiaindustries/qualitycontrol/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/utopiaindustries/qualitycontrol/ExampleInstrumentedTest.java new file mode 100644 index 0000000..492cf2b --- /dev/null +++ b/app/src/androidTest/java/com/utopiaindustries/qualitycontrol/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.utopiaindustries.qualitycontrol; + +import android.content.Context; + +import androidx.test.platform.app.InstrumentationRegistry; +import androidx.test.ext.junit.runners.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); + assertEquals("com.utopiaindustries.qualitycontrol", appContext.getPackageName()); + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..d272599 --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/utopiaindustries/qualitycontrol/activities/HomeActivity.java b/app/src/main/java/com/utopiaindustries/qualitycontrol/activities/HomeActivity.java new file mode 100644 index 0000000..94836dd --- /dev/null +++ b/app/src/main/java/com/utopiaindustries/qualitycontrol/activities/HomeActivity.java @@ -0,0 +1,152 @@ +package com.utopiaindustries.qualitycontrol.activities; + +import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; +import android.util.Log; +import android.widget.Button; + +import androidx.activity.EdgeToEdge; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.graphics.Insets; +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowInsetsCompat; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentTransaction; + +import com.utopiaindustries.qualitycontrol.R; +import com.utopiaindustries.qualitycontrol.fragments.CheckingFragment; +import com.utopiaindustries.qualitycontrol.fragments.CuttingFragment; +import com.utopiaindustries.qualitycontrol.fragments.HomeFragment; +import com.utopiaindustries.qualitycontrol.fragments.PackingFragment; +import com.utopiaindustries.qualitycontrol.fragments.StitchingFragment; +import com.utopiaindustries.qualitycontrol.fragments.SubStoreFragment; + +import java.io.File; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Locale; + +public class HomeActivity extends AppCompatActivity { + + private int currentFragmentIndex = 0; + private final List fragmentList = new ArrayList<>(); + //Button btnNext; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + EdgeToEdge.enable(this); + setContentView(R.layout.activity_home); + ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> { + Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); + return insets; + }); + + //btnNext = findViewById(R.id.btn_next); + + // Initialize fragments + /*fragmentList.add(new HomeFragment()); + fragmentList.add(new CuttingFragment()); + fragmentList.add(new StitchingFragment()); + fragmentList.add(new CheckingFragment()); + fragmentList.add(new PackingFragment()); + fragmentList.add(new SubStoreFragment());*/ + + // Load the first fragment + //loadFragment(fragmentList.get(currentFragmentIndex)); + + /*btnNext.setOnClickListener(v -> navigateNext());*/ + + // Load the first fragment only if there's no saved instance + if (savedInstanceState == null) { + navigateToFragment(new HomeFragment(), false); + } + + } + + public void navigateToFragment(Fragment fragment, boolean addToBackStack) { + FragmentManager fragmentManager = getSupportFragmentManager(); + FragmentTransaction transaction = fragmentManager.beginTransaction() + .replace(R.id.fragment_container, fragment); + + if (addToBackStack) { + transaction.addToBackStack(null); // Add to the back stack + } + + transaction.commit(); + } + + // Method to navigate to a specific fragment + /*public void navigateToFragment(Fragment fragment, boolean addToBackStack) { + androidx.fragment.app.FragmentTransaction transaction = getSupportFragmentManager() + .beginTransaction() + .replace(R.id.fragment_container, fragment); + + if (addToBackStack) { + transaction.addToBackStack(null); + } + + transaction.commit(); + }*/ + + /*private void navigateNext() { + if (currentFragmentIndex < fragmentList.size() - 1) { + currentFragmentIndex++; + loadFragment(fragmentList.get(currentFragmentIndex)); + + // Change button text to "Finish" on the last fragment + if (currentFragmentIndex == fragmentList.size() - 1) { + Button btnNext = findViewById(R.id.btn_next); + btnNext.setText("Finish"); + } + } else { + // Navigate to Summary Activity + Intent intent = new Intent(this, SummaryActivity.class); + startActivity(intent); + finish(); + } + }*/ + + private void loadFragment(Fragment fragment) { + getSupportFragmentManager().beginTransaction() + .replace(R.id.fragment_container, fragment) + .addToBackStack(null) + .commit(); + } + + /*@Override + public void onBackPressed() { + *//*Fragment myFragment = getSupportFragmentManager().findFragmentById(R.id.fragment_container); + if (myFragment instanceof CuttingFragment) { + finish(); + } else { + if (getSupportFragmentManager().getBackStackEntryCount() > 0) { + getSupportFragmentManager().popBackStack(); + } else { + super.onBackPressed(); + } + }*//* + if (getSupportFragmentManager().getBackStackEntryCount() > 0) { + Log.i("TAG", "=============onBackPressed - Popping backstack===="); + getSupportFragmentManager().popBackStack(); + } else { + Log.i("TAG", "=============onBackPressed called because nothing on backstack===="); + super.onBackPressed(); + } + }*/ + + @Override + public void onBackPressed() { + if (getSupportFragmentManager().getBackStackEntryCount() > 0) { + getSupportFragmentManager().popBackStack(); // Go back to the previous fragment + } else { + super.onBackPressed(); // Exit the activity + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/utopiaindustries/qualitycontrol/activities/SplashActivity.java b/app/src/main/java/com/utopiaindustries/qualitycontrol/activities/SplashActivity.java new file mode 100644 index 0000000..20080b6 --- /dev/null +++ b/app/src/main/java/com/utopiaindustries/qualitycontrol/activities/SplashActivity.java @@ -0,0 +1,62 @@ +package com.utopiaindustries.qualitycontrol.activities; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +import android.widget.TextView; + +import androidx.activity.EdgeToEdge; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.graphics.Insets; +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowInsetsCompat; + +import com.utopiaindustries.qualitycontrol.R; +import com.utopiaindustries.qualitycontrol.helper.Helper; +import com.utopiaindustries.qualitycontrol.helper.Preference; + +public class SplashActivity extends AppCompatActivity { + + private final int TIMER = 1200; + boolean isLoggedIn = false; + TextView txtVersion; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + EdgeToEdge.enable(this); + setContentView(R.layout.activity_splash); + ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> { + Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); + return insets; + }); + + txtVersion = findViewById(R.id.txt_version); + txtVersion.setText(getResources().getString(R.string.app_version)); + + isLoggedIn = Preference.getMyBooleanPref(Helper.project_file, "isLoggedIn", getApplicationContext()); + + new Handler().postDelayed(new Runnable() { + public void run() { + + Intent myIntent = new Intent(SplashActivity.this, HomeActivity.class); + startActivity(myIntent); + overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left); + finish(); + + /* if (isLoggedIn) { + Intent myIntent = new Intent(SplashActivity.this, MainActivity.class); + startActivity(myIntent); + overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left); + finish(); + } else { + Intent myIntent = new Intent(SplashActivity.this, LoginActivity.class); + startActivity(myIntent); + overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left); + finish(); + }*/ + } + }, TIMER); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/utopiaindustries/qualitycontrol/activities/SummaryActivity.java b/app/src/main/java/com/utopiaindustries/qualitycontrol/activities/SummaryActivity.java new file mode 100644 index 0000000..49e11b6 --- /dev/null +++ b/app/src/main/java/com/utopiaindustries/qualitycontrol/activities/SummaryActivity.java @@ -0,0 +1,26 @@ +package com.utopiaindustries.qualitycontrol.activities; + +import android.os.Bundle; + +import androidx.activity.EdgeToEdge; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.graphics.Insets; +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowInsetsCompat; + +import com.utopiaindustries.qualitycontrol.R; + +public class SummaryActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + EdgeToEdge.enable(this); + setContentView(R.layout.activity_summary); + ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> { + Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); + return insets; + }); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/utopiaindustries/qualitycontrol/adapters/ImageAdapter.java b/app/src/main/java/com/utopiaindustries/qualitycontrol/adapters/ImageAdapter.java new file mode 100644 index 0000000..8a0a7c3 --- /dev/null +++ b/app/src/main/java/com/utopiaindustries/qualitycontrol/adapters/ImageAdapter.java @@ -0,0 +1,70 @@ +package com.utopiaindustries.qualitycontrol.adapters; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.RequestOptions; +import com.utopiaindustries.qualitycontrol.R; + +import java.util.List; + +public class ImageAdapter extends RecyclerView.Adapter { + + //private byte[] file; + //private List imageList; + List imageList; + private Context context; + + public ImageAdapter(List imageList, Context context) { + this.imageList = imageList; + this.context = context; + } + + @NonNull + @Override + public ImageViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_image, parent, false); + return new ImageViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ImageViewHolder holder, int position) { + //holder.imageView.setImageBitmap(null); + holder.imageView.setImageResource(R.drawable.img_load); + //Bitmap bitmap = BitmapFactory.decodeByteArray( imageList.get(position), 0 , imageList.get(position).length ); + //holder.imageView.setImageBitmap( bitmap ); + + /*Glide.with(context) + .load(bitmap) // Load the Bitmap directly + .placeholder(R.drawable.img_load) + .apply(new RequestOptions().centerCrop()) // Optional: apply transformations like center crop + .into(holder.imageView);*/ + + Glide.with(context) + .load(imageList.get(position)) // Glide will handle the decoding and placeholder + .placeholder(R.drawable.img_load) + .apply(new RequestOptions().centerCrop()) + .into(holder.imageView); + } + + @Override + public int getItemCount() { + return imageList.size(); + } + + public class ImageViewHolder extends RecyclerView.ViewHolder { + ImageView imageView; + + public ImageViewHolder(@NonNull View itemView) { + super(itemView); + imageView = itemView.findViewById(R.id.imageView); + } + } +} diff --git a/app/src/main/java/com/utopiaindustries/qualitycontrol/adapters/ItemAdapter.java b/app/src/main/java/com/utopiaindustries/qualitycontrol/adapters/ItemAdapter.java new file mode 100644 index 0000000..327246d --- /dev/null +++ b/app/src/main/java/com/utopiaindustries/qualitycontrol/adapters/ItemAdapter.java @@ -0,0 +1,85 @@ +package com.utopiaindustries.qualitycontrol.adapters; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.Spinner; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.utopiaindustries.qualitycontrol.R; +import com.utopiaindustries.qualitycontrol.models.Item; + +import java.util.List; + +public class ItemAdapter extends RecyclerView.Adapter { + + private final Context context; + private final List items; + private final String[] dropdownOptions = {"1", "2", "3", "4", "5"}; + + public ItemAdapter(Context context, List items) { + this.context = context; + this.items = items; + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.item_recycler_view, parent, false); + return new ItemViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) { + Item currentItem = items.get(position); + holder.tvItemName.setText(currentItem.getName()); + + ArrayAdapter adapter = new ArrayAdapter<>(context,R.layout.spinner_style,dropdownOptions); + adapter.setDropDownViewResource(R.layout.spinner_style); + // Set up the Spinner (Dropdown) + /*ArrayAdapter adapter = new ArrayAdapter<>(context, android.R.layout.simple_spinner_item, dropdownOptions); + adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);*/ + holder.spinnerOptions.setAdapter(adapter); + + // Preselect an option if needed + holder.spinnerOptions.setSelection(currentItem.getSelectedOption()); + + // Save selected option when user selects one + holder.spinnerOptions.setOnItemSelectedListener(new android.widget.AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(android.widget.AdapterView parent, View view, int position, long id) { + currentItem.setSelectedOption(position); // Save the selected option + + if (currentItem.getSelectedOption() != position) { // Avoid unnecessary updates + currentItem.setSelectedOption(position); // Save the selected option + } + } + + @Override + public void onNothingSelected(android.widget.AdapterView parent) { + // Do nothing + } + }); + } + + @Override + public int getItemCount() { + return items.size(); + } + + public static class ItemViewHolder extends RecyclerView.ViewHolder { + TextView tvItemName; + Spinner spinnerOptions; + + public ItemViewHolder(@NonNull View itemView) { + super(itemView); + tvItemName = itemView.findViewById(R.id.tv_item_name); + spinnerOptions = itemView.findViewById(R.id.spinner_item_options); + } + } +} diff --git a/app/src/main/java/com/utopiaindustries/qualitycontrol/apiservice/ApiService.java b/app/src/main/java/com/utopiaindustries/qualitycontrol/apiservice/ApiService.java new file mode 100644 index 0000000..e887842 --- /dev/null +++ b/app/src/main/java/com/utopiaindustries/qualitycontrol/apiservice/ApiService.java @@ -0,0 +1,31 @@ +package com.utopiaindustries.qualitycontrol.apiservice; + +import com.utopiaindustries.qualitycontrol.models.QualityControlResponse; + +import java.util.List; + +import retrofit2.Call; +import retrofit2.http.Body; +import retrofit2.http.GET; +import retrofit2.http.POST; +import retrofit2.http.Query; + +public interface ApiService { + + /*@GET("rest/uic/inspection-report") + Call> fetchAllReports( + @Query("username") String username + );*/ + + @GET("rest/application/authenticate-user") + Call isUserAuthenticated( + @Query("username") String username, + @Query("password") String password + ); + + + /*@POST("rest/application/save-truck-load") + Call pickTruckLoad( + @Body PickupRequest request + );*/ +} diff --git a/app/src/main/java/com/utopiaindustries/qualitycontrol/apiservice/ApiServiceFactory.java b/app/src/main/java/com/utopiaindustries/qualitycontrol/apiservice/ApiServiceFactory.java new file mode 100644 index 0000000..445aaf5 --- /dev/null +++ b/app/src/main/java/com/utopiaindustries/qualitycontrol/apiservice/ApiServiceFactory.java @@ -0,0 +1,17 @@ +package com.utopiaindustries.qualitycontrol.apiservice; + +import retrofit2.Retrofit; + +public class ApiServiceFactory { + + private static ApiService apiService; + + public synchronized static ApiService getApiService() { + if ( apiService == null ) { + Retrofit retrofit = RetrofitClient.getClient(); + apiService = retrofit.create( ApiService.class ); + } + return apiService; + } + +} diff --git a/app/src/main/java/com/utopiaindustries/qualitycontrol/apiservice/RetrofitClient.java b/app/src/main/java/com/utopiaindustries/qualitycontrol/apiservice/RetrofitClient.java new file mode 100644 index 0000000..82a3ecf --- /dev/null +++ b/app/src/main/java/com/utopiaindustries/qualitycontrol/apiservice/RetrofitClient.java @@ -0,0 +1,45 @@ +package com.utopiaindustries.qualitycontrol.apiservice; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; + +import java.util.concurrent.TimeUnit; + +import okhttp3.OkHttpClient; +import retrofit2.Retrofit; +import retrofit2.converter.gson.GsonConverterFactory; + +public class RetrofitClient { + + private final static String BASE_URL = "http://192.168.90.228:8080/cosmos/"; + + private static Retrofit retrofit; + + public synchronized static Retrofit getClient() { + + Gson gson = new GsonBuilder() + //.registerTypeAdapter(Boolean.class, new BooleanTypeAdapter()) + .create(); + + + if (retrofit == null) { + try { + + OkHttpClient okHttpClient = new OkHttpClient.Builder() + .connectTimeout(40, TimeUnit.SECONDS) + .readTimeout(40, TimeUnit.SECONDS) + .writeTimeout(40, TimeUnit.SECONDS) + .build(); + + retrofit = new Retrofit.Builder() + .baseUrl(BASE_URL) + .client(okHttpClient) + .addConverterFactory(GsonConverterFactory.create(gson)) + .build(); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + return retrofit; + } +} diff --git a/app/src/main/java/com/utopiaindustries/qualitycontrol/fragments/CheckingFragment.java b/app/src/main/java/com/utopiaindustries/qualitycontrol/fragments/CheckingFragment.java new file mode 100644 index 0000000..bfba586 --- /dev/null +++ b/app/src/main/java/com/utopiaindustries/qualitycontrol/fragments/CheckingFragment.java @@ -0,0 +1,72 @@ +package com.utopiaindustries.qualitycontrol.fragments; + +import android.os.Bundle; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; + +import com.utopiaindustries.qualitycontrol.R; +import com.utopiaindustries.qualitycontrol.activities.HomeActivity; +import com.utopiaindustries.qualitycontrol.adapters.ImageAdapter; +import com.utopiaindustries.qualitycontrol.adapters.ItemAdapter; +import com.utopiaindustries.qualitycontrol.models.Item; + +import java.util.ArrayList; +import java.util.List; + +public class CheckingFragment extends Fragment { + + RecyclerView recyclerView, imageRecyclerView; + ImageAdapter imageAdapter; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + View view = inflater.inflate(R.layout.fragment_checking, container, false); + + initializeLayout(view); + + List itemList = new ArrayList<>(); + itemList.add(new Item("Sort", 0)); + itemList.add(new Item("Set in Order", 0)); + itemList.add(new Item("Shine", 0)); + itemList.add(new Item("Standardize", 0)); + itemList.add(new Item("Sustain", 0)); + itemList.add(new Item("Safety", 0)); + + // Set up RecyclerView + ItemAdapter adapter = new ItemAdapter(getActivity(), itemList); + recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); + recyclerView.setAdapter(adapter); + + Button nextButton = view.findViewById(R.id.btn_next); + nextButton.setOnClickListener(v -> { + if (getActivity() instanceof HomeActivity) { + ((HomeActivity) getActivity()).navigateToFragment(new PackingFragment(), true); + } + }); + + return view; + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + } + + private void initializeLayout(View view) { + + recyclerView = view.findViewById(R.id.recycler_view_checking); + imageRecyclerView = view.findViewById(R.id.imageRecyclerView); + imageRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false)); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/utopiaindustries/qualitycontrol/fragments/CuttingFragment.java b/app/src/main/java/com/utopiaindustries/qualitycontrol/fragments/CuttingFragment.java new file mode 100644 index 0000000..af5a59b --- /dev/null +++ b/app/src/main/java/com/utopiaindustries/qualitycontrol/fragments/CuttingFragment.java @@ -0,0 +1,427 @@ +package com.utopiaindustries.qualitycontrol.fragments; + +import static android.app.Activity.RESULT_OK; + +import android.Manifest; +import android.content.Context; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; + +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AlertDialog; +import androidx.core.content.FileProvider; +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import android.os.Environment; +import android.provider.MediaStore; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.ImageButton; +import android.widget.TextView; +import android.widget.Toast; + +import com.utopiaindustries.qualitycontrol.R; +import com.utopiaindustries.qualitycontrol.activities.HomeActivity; +import com.utopiaindustries.qualitycontrol.adapters.ImageAdapter; +import com.utopiaindustries.qualitycontrol.adapters.ItemAdapter; +import com.utopiaindustries.qualitycontrol.models.Item; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.lang.reflect.Array; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Locale; +import java.util.Objects; +import java.util.function.Consumer; + +import pub.devrel.easypermissions.AfterPermissionGranted; +import pub.devrel.easypermissions.EasyPermissions; + +public class CuttingFragment extends Fragment { + + RecyclerView recyclerView, imageRecyclerView; + ImageAdapter imageAdapter; + Button nextButton; + ImageButton imagePicker, deleteImage; + private static final int CAMERA_REQUEST = 100; + private static final int GALLERY_REQUEST = 200; + String filePath = "no_pic"; + ArrayList imageList = new ArrayList<>(); + + // Activity Result Launcher for Gallery + private final ActivityResultLauncher imagePickerLauncher = + registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> { + if (result.getResultCode() == requireActivity().RESULT_OK && result.getData() != null) { + Uri selectedImage = result.getData().getData(); + if (selectedImage != null) { + //imageView.setImageURI(selectedImage); + Log.e("Selected-Image: ", "" + selectedImage); + + uriToByteArrayAsync( + getContext(), + selectedImage, + 100, // Target size in KB + compressedImage -> { + // Handle the compressed image here, e.g., display it + requireActivity().runOnUiThread(() -> { + //store.getReport().getItems().get(0).getCheckPoints().get(requestCode).addImageList(compressedImage); + imageList.add(compressedImage); + imageAdapter.notifyDataSetChanged(); + }); + }, + error -> { + // Handle any errors + requireActivity().runOnUiThread(() -> { + Toast.makeText(getContext(), "Error compressing image: " + error.getMessage(), Toast.LENGTH_SHORT).show(); + }); + } + ); + } + } + }); + + // Activity Result Launcher for Camera + private final ActivityResultLauncher cameraLauncher = + registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> { + Uri contentUri = Uri.fromFile(new File((filePath))); + + uriToByteArrayAsync( + getContext(), + contentUri, + 100, // Target size in KB + compressedImage -> { + // Handle the compressed image here, e.g., display it + requireActivity().runOnUiThread(() -> { + //store.getReport().getItems().get(0).getCheckPoints().get(requestCode).addImageList(compressedImage); + imageList.add(compressedImage); + imageAdapter.notifyDataSetChanged(); + }); + }, + error -> { + // Handle any errors + requireActivity().runOnUiThread(() -> { + Toast.makeText(getContext(), "Error compressing image: " + error.getMessage(), Toast.LENGTH_SHORT).show(); + }); + } + ); + + Log.e("contentUri: ", "" + contentUri); + if (result.getResultCode() == requireActivity().RESULT_OK && result.getData() != null) { + + Uri selectedImage = result.getData().getData(); + if (selectedImage != null) { + //imageView.setImageURI(selectedImage); + Log.e("Selected-Image: ", "" + selectedImage); + } + } + }); + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + // Inflate the layout for this fragment + View view = inflater.inflate(R.layout.fragment_cutting, container, false); + + initializeLayout(view); + + List itemList = new ArrayList<>(); + itemList.add(new Item("Sort", 0)); + itemList.add(new Item("Set in Order", 0)); + itemList.add(new Item("Shine", 0)); + itemList.add(new Item("Standardize", 0)); + itemList.add(new Item("Sustain", 0)); + itemList.add(new Item("Safety", 0)); + + // Set up RecyclerView + ItemAdapter adapter = new ItemAdapter(getActivity(), itemList); + recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); + recyclerView.setAdapter(adapter); + + imageAdapter = new ImageAdapter(imageList, getActivity()); + imageRecyclerView.setAdapter(imageAdapter); + + nextButton.setOnClickListener(v -> { + if (getActivity() instanceof HomeActivity) { + ((HomeActivity) getActivity()).navigateToFragment(new StitchingFragment(), true); + } + }); + + imagePicker.setOnClickListener(v -> { + showAlertDialog(view); + }); + + deleteImage.setOnClickListener(v -> { + + }); + + return view; + } + + private void initializeLayout(View view) { + + imagePicker = view.findViewById(R.id.image_picker); + deleteImage = view.findViewById(R.id.delete_image); + nextButton = view.findViewById(R.id.btn_next); + recyclerView = view.findViewById(R.id.recycler_view_cutting); + imageRecyclerView = view.findViewById(R.id.imageRecyclerView); + imageRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false)); + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + } + + public void showAlertDialog(View view) { + ViewGroup viewGroup = view.findViewById(android.R.id.content); + + TextView txt_camera, txt_gallery, txt_cancel; + + AlertDialog.Builder builder = new AlertDialog.Builder(requireActivity()); + View view1 = LayoutInflater.from(getActivity()).inflate(R.layout.custom_layout, viewGroup, false); + builder.setCancelable(false); + builder.setView(view1); + + txt_camera = view1.findViewById(R.id.txt_camera); + txt_gallery = view1.findViewById(R.id.txt_gallery); + txt_cancel = view1.findViewById(R.id.txt_cancel); + + AlertDialog alertDialog = builder.create(); + Objects.requireNonNull(alertDialog.getWindow()).setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + + txt_camera.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + + alertDialog.dismiss(); + openCamera(); + } + }); + + txt_gallery.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + + alertDialog.dismiss(); + openGallery(); + } + }); + + txt_cancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + + alertDialog.dismiss(); + } + }); + + alertDialog.show(); + } + + @AfterPermissionGranted(GALLERY_REQUEST) + public void openCamera() { + if (hasCameraPermission()) { + Log.e("hasCameraPermission: ", "true"); + // Have permission, do the thing! + Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); + // Ensure that there's a camera activity to handle the intent + if (takePictureIntent.resolveActivity(requireActivity().getPackageManager()) != null) { + // Create the File where the photo should go + File photoFile = null; + try { + photoFile = createImageFile(); + } catch (IOException ex) { + // Error occurred while creating the File + + } + // Continue only if the File was successfully created + if (photoFile != null) { + Uri photoURI = FileProvider.getUriForFile(requireActivity(), + "com.utopiaindustries.qualitycontrol", + photoFile); + takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI); + //startActivityForResult(takePictureIntent, CAMERA_REQUEST); + cameraLauncher.launch(takePictureIntent); + } + } + } else { + // Ask for one permission + String[] perms = {}; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + Log.e("TIRAMISU: ", "***"); + perms = new String[]{Manifest.permission.READ_MEDIA_IMAGES, Manifest.permission.CAMERA}; + } else { + Log.e("Not-TIRAMISU: ", "***"); + perms = new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA}; + + } + + //Log.e("perms: ",""+perms.length); + + EasyPermissions.requestPermissions(this, getString(R.string.rationale_camera), CAMERA_REQUEST, perms); + } + } + + public void openGallery() { + if (hasGalleryPermission()) { + // Have permission, do the thing! + Intent galleryIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); + // Start the Intent + //startActivityForResult(galleryIntent, GALLERY_REQUEST); + imagePickerLauncher.launch(galleryIntent); + } else { + // Ask for one permission + String[] perms = {}; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + perms = new String[]{Manifest.permission.READ_MEDIA_IMAGES}; + } else { + perms = new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}; + + } + EasyPermissions.requestPermissions(this, getString(R.string.rationale_camera), GALLERY_REQUEST, perms); + } + } + + private boolean hasGalleryPermission() { + String[] perms = {}; + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + perms = new String[]{Manifest.permission.READ_MEDIA_IMAGES}; + } else { + perms = new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}; + } + + return EasyPermissions.hasPermissions(requireActivity(), perms); + } + + private boolean hasCameraPermission() { + String[] perms = {}; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + //Log.e("TIRAMISU: ","***"); + perms = new String[]{Manifest.permission.READ_MEDIA_IMAGES, Manifest.permission.CAMERA}; + } else { + //Log.e("Not-TIRAMISU: ","***"); + perms = new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA}; + + } + + //Log.e("perms: ",""+perms); + return EasyPermissions.hasPermissions(requireActivity(), perms); + } + + private File createImageFile() throws IOException { + // Create an image file name + String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); + String imageFileName = "JPEG_" + timeStamp + "_"; + File storageDir = requireActivity().getExternalFilesDir(Environment.DIRECTORY_PICTURES); + File image = File.createTempFile( + imageFileName, /* prefix */ + ".jpg", /* suffix */ + storageDir /* directory */ + ); + + filePath = image.getAbsolutePath(); + return image; + } + + /*public void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == RESULT_OK) { + + if (requestCode == GALLERY_REQUEST) { + Log.e("=====From Gallery", "========="); + Uri contentUri = data.getData(); + //filePath = Helper.getPath(contentUri, this); + *//*try { + //For Cropping purposes + String currentTimeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(new Date()); + File destinationFile = new File(getCacheDir(), "croppedImage.png" + currentTimeStamp); + Uri destinationUri = Uri.fromFile(destinationFile); + + } catch (Exception e) { + Log.e("=====From Gallery error", "=========" + e.getMessage()); + e.printStackTrace(); + }*//* + + + } else if (requestCode == CAMERA_REQUEST) { + //Log.e("=====From Camera", "=========" + filePath); + + // rotatedBitmap = Helper.getBitmap(filePath); + + //For Cropping purposes + *//*String currentTimeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(new Date()); + File destinationFile = new File(getCacheDir(), "croppedImage.png" + currentTimeStamp); + Uri destinationUri = Uri.fromFile(destinationFile); + Uri contentUri = Uri.fromFile(new File((filePath)));*//* + + } + } + + }*/ + + public void uriToByteArrayAsync( + Context context, + Uri uri, + int targetSizeInKB, + Consumer onSuccess, + Consumer onError + ) { + new Thread(() -> { + try { + int targetSizeInBytes = targetSizeInKB * 1024; + + // Load the image as a Bitmap without scaling + Bitmap bitmap; + try (InputStream inputStream = context.getContentResolver().openInputStream(uri)) { + bitmap = BitmapFactory.decodeStream(inputStream); + } + + if (bitmap == null) { + throw new IOException("Failed to decode image from URI."); + } + + ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); + int minQuality = 10; + int maxQuality = 100; + int quality = maxQuality; + + // Binary search for the best quality that meets the target size + while (minQuality <= maxQuality) { + byteArrayOutputStream.reset(); + bitmap.compress(Bitmap.CompressFormat.JPEG, quality, byteArrayOutputStream); + + int byteSize = byteArrayOutputStream.size(); + if (byteSize > targetSizeInBytes) { + maxQuality = quality - 1; + } else { + minQuality = quality + 1; + } + quality = (minQuality + maxQuality) / 2; + } + + onSuccess.accept(byteArrayOutputStream.toByteArray()); + } catch (IOException e) { + onError.accept(e); + } + }).start(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/utopiaindustries/qualitycontrol/fragments/HomeFragment.java b/app/src/main/java/com/utopiaindustries/qualitycontrol/fragments/HomeFragment.java new file mode 100644 index 0000000..53c836a --- /dev/null +++ b/app/src/main/java/com/utopiaindustries/qualitycontrol/fragments/HomeFragment.java @@ -0,0 +1,91 @@ +package com.utopiaindustries.qualitycontrol.fragments; + +import android.os.Bundle; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; + +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AutoCompleteTextView; +import android.widget.Button; +import android.widget.TextView; + +import com.utopiaindustries.qualitycontrol.R; +import com.utopiaindustries.qualitycontrol.activities.HomeActivity; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; + +public class HomeFragment extends Fragment { + + AutoCompleteTextView locationTextview, departmentTextView, floorTextview; + TextView txtCurrentDate; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + + View view = inflater.inflate(R.layout.fragment_home, container, false); + + initializeLayout(view); + + String date = new SimpleDateFormat("EEEE, MMM d, yyyy", Locale.getDefault()).format(new Date()); + txtCurrentDate.setText(date); + + locationTextview.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView adapterView, View view, int position, long l) { + String item = adapterView.getItemAtPosition(position).toString(); + Log.e("Item-----------: ", "" + item); + + + } + }); + + departmentTextView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView adapterView, View view, int position, long l) { + String item = adapterView.getItemAtPosition(position).toString(); + Log.e("Item-----------: ", "" + item); + + + } + }); + + floorTextview.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView adapterView, View view, int position, long l) { + String item = adapterView.getItemAtPosition(position).toString(); + Log.e("Item-----------: ", "" + item); + + + } + }); + + Button nextButton = view.findViewById(R.id.btn_next); + nextButton.setOnClickListener(v -> { + if (getActivity() instanceof HomeActivity) { + ((HomeActivity) getActivity()).navigateToFragment(new CuttingFragment(), true); + } + }); + + return view; + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + } + + public void initializeLayout(View view) { + txtCurrentDate = view.findViewById(R.id.txt_current_date); + locationTextview = view.findViewById(R.id.location_textview); + departmentTextView = view.findViewById(R.id.department_textview); + floorTextview = view.findViewById(R.id.floor_textview); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/utopiaindustries/qualitycontrol/fragments/PackingFragment.java b/app/src/main/java/com/utopiaindustries/qualitycontrol/fragments/PackingFragment.java new file mode 100644 index 0000000..5e3f798 --- /dev/null +++ b/app/src/main/java/com/utopiaindustries/qualitycontrol/fragments/PackingFragment.java @@ -0,0 +1,72 @@ +package com.utopiaindustries.qualitycontrol.fragments; + +import android.os.Bundle; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; + +import com.utopiaindustries.qualitycontrol.R; +import com.utopiaindustries.qualitycontrol.activities.HomeActivity; +import com.utopiaindustries.qualitycontrol.adapters.ImageAdapter; +import com.utopiaindustries.qualitycontrol.adapters.ItemAdapter; +import com.utopiaindustries.qualitycontrol.models.Item; + +import java.util.ArrayList; +import java.util.List; + +public class PackingFragment extends Fragment { + + RecyclerView recyclerView, imageRecyclerView; + ImageAdapter imageAdapter; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + View view = inflater.inflate(R.layout.fragment_packing, container, false); + + initializeLayout(view); + + List itemList = new ArrayList<>(); + itemList.add(new Item("Sort", 0)); + itemList.add(new Item("Set in Order", 0)); + itemList.add(new Item("Shine", 0)); + itemList.add(new Item("Standardize", 0)); + itemList.add(new Item("Sustain", 0)); + itemList.add(new Item("Safety", 0)); + + // Set up RecyclerView + ItemAdapter adapter = new ItemAdapter(getActivity(), itemList); + recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); + recyclerView.setAdapter(adapter); + + Button nextButton = view.findViewById(R.id.btn_next); + nextButton.setOnClickListener(v -> { + if (getActivity() instanceof HomeActivity) { + ((HomeActivity) getActivity()).navigateToFragment(new SubStoreFragment(), true); + } + }); + + return view; + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + } + + private void initializeLayout(View view) { + + recyclerView = view.findViewById(R.id.recycler_view_packing); + imageRecyclerView = view.findViewById(R.id.imageRecyclerView); + imageRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false)); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/utopiaindustries/qualitycontrol/fragments/StitchingFragment.java b/app/src/main/java/com/utopiaindustries/qualitycontrol/fragments/StitchingFragment.java new file mode 100644 index 0000000..cc18749 --- /dev/null +++ b/app/src/main/java/com/utopiaindustries/qualitycontrol/fragments/StitchingFragment.java @@ -0,0 +1,72 @@ +package com.utopiaindustries.qualitycontrol.fragments; + +import android.os.Bundle; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; + +import com.utopiaindustries.qualitycontrol.R; +import com.utopiaindustries.qualitycontrol.activities.HomeActivity; +import com.utopiaindustries.qualitycontrol.adapters.ImageAdapter; +import com.utopiaindustries.qualitycontrol.adapters.ItemAdapter; +import com.utopiaindustries.qualitycontrol.models.Item; + +import java.util.ArrayList; +import java.util.List; + +public class StitchingFragment extends Fragment { + + RecyclerView recyclerView, imageRecyclerView; + ImageAdapter imageAdapter; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + View view = inflater.inflate(R.layout.fragment_stitching, container, false); + + initializeLayout(view); + + List itemList = new ArrayList<>(); + itemList.add(new Item("Sort", 0)); + itemList.add(new Item("Set in Order", 0)); + itemList.add(new Item("Shine", 0)); + itemList.add(new Item("Standardize", 0)); + itemList.add(new Item("Sustain", 0)); + itemList.add(new Item("Safety", 0)); + + // Set up RecyclerView + ItemAdapter adapter = new ItemAdapter(getActivity(), itemList); + recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); + recyclerView.setAdapter(adapter); + + Button nextButton = view.findViewById(R.id.btn_next); + nextButton.setOnClickListener(v -> { + if (getActivity() instanceof HomeActivity) { + ((HomeActivity) getActivity()).navigateToFragment(new CheckingFragment(), true); + } + }); + + return view; + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + } + + private void initializeLayout(View view) { + + recyclerView = view.findViewById(R.id.recycler_view_stitching); + imageRecyclerView = view.findViewById(R.id.imageRecyclerView); + imageRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false)); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/utopiaindustries/qualitycontrol/fragments/SubStoreFragment.java b/app/src/main/java/com/utopiaindustries/qualitycontrol/fragments/SubStoreFragment.java new file mode 100644 index 0000000..bb1916f --- /dev/null +++ b/app/src/main/java/com/utopiaindustries/qualitycontrol/fragments/SubStoreFragment.java @@ -0,0 +1,74 @@ +package com.utopiaindustries.qualitycontrol.fragments; + +import android.content.Intent; +import android.os.Bundle; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; + +import com.utopiaindustries.qualitycontrol.R; +import com.utopiaindustries.qualitycontrol.activities.HomeActivity; +import com.utopiaindustries.qualitycontrol.activities.SummaryActivity; +import com.utopiaindustries.qualitycontrol.adapters.ImageAdapter; +import com.utopiaindustries.qualitycontrol.adapters.ItemAdapter; +import com.utopiaindustries.qualitycontrol.models.Item; + +import java.util.ArrayList; +import java.util.List; + +public class SubStoreFragment extends Fragment { + + RecyclerView recyclerView, imageRecyclerView; + ImageAdapter imageAdapter; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + View view = inflater.inflate(R.layout.fragment_sub_store, container, false); + + initializeLayout(view); + + List itemList = new ArrayList<>(); + itemList.add(new Item("Sort", 0)); + itemList.add(new Item("Set in Order", 0)); + itemList.add(new Item("Shine", 0)); + itemList.add(new Item("Standardize", 0)); + itemList.add(new Item("Sustain", 0)); + itemList.add(new Item("Safety", 0)); + + // Set up RecyclerView + ItemAdapter adapter = new ItemAdapter(getActivity(), itemList); + recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); + recyclerView.setAdapter(adapter); + + Button nextButton = view.findViewById(R.id.btn_next); + nextButton.setOnClickListener(v -> { + Intent intent = new Intent(getActivity(), SummaryActivity.class); + startActivity(intent); + getActivity().finish(); + }); + + return view; + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + } + + private void initializeLayout(View view) { + + recyclerView = view.findViewById(R.id.recycler_view_substore); + imageRecyclerView = view.findViewById(R.id.imageRecyclerView); + imageRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false)); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/utopiaindustries/qualitycontrol/helper/Helper.java b/app/src/main/java/com/utopiaindustries/qualitycontrol/helper/Helper.java new file mode 100644 index 0000000..29094b6 --- /dev/null +++ b/app/src/main/java/com/utopiaindustries/qualitycontrol/helper/Helper.java @@ -0,0 +1,25 @@ +package com.utopiaindustries.qualitycontrol.helper; + +import android.content.Context; +import android.content.SharedPreferences; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; +import android.preference.PreferenceManager; +import android.text.TextUtils; + +import com.google.gson.Gson; + +public class Helper { + + public static final String project_file = "Quality-Control"; + + public static boolean isValidEmail(CharSequence target) { + return !TextUtils.isEmpty(target) && android.util.Patterns.EMAIL_ADDRESS.matcher(target).matches(); + } + + public static boolean isNetworkConnected(Context context) { + ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + NetworkInfo activeNetwork = connectivityManager.getActiveNetworkInfo(); + return activeNetwork != null && activeNetwork.isConnectedOrConnecting(); + } +} diff --git a/app/src/main/java/com/utopiaindustries/qualitycontrol/helper/Preference.java b/app/src/main/java/com/utopiaindustries/qualitycontrol/helper/Preference.java new file mode 100644 index 0000000..757f8fd --- /dev/null +++ b/app/src/main/java/com/utopiaindustries/qualitycontrol/helper/Preference.java @@ -0,0 +1,77 @@ +package com.utopiaindustries.qualitycontrol.helper; + +import android.content.Context; +import android.content.SharedPreferences; + +public class Preference { + + private static final int PREFERENCE_MODE_PRIVATE = 0; + private static String MY_STRING_PREF = "mystringpref"; + public static String LOGIN_FILE = "login_prefs"; + public static String TEMP_FILE = "temp_prefs"; + + + public static String KEY_PIN_CODE = "pin_code"; + + public static String KEY_CUSTOMER_ID = "cus_id"; + public static String KEY_CUSTOMER_NAME = "cus_name"; + + public static String KEY_USER_IS_MASTER = "user_is_master"; + + public static SharedPreferences getPrefs(String nameOfFile, Context context) { + + return context.getSharedPreferences(nameOfFile, Context.MODE_PRIVATE); + } + + public static boolean containsKey(String fileName, String key, Context context) { + return getPrefs(fileName, context).contains(key); + } + + public static String getMyStringPref(String fileName, String key, Context context) { + + return getPrefs(fileName,context).getString(key, "default"); + } + public static boolean getMyBooleanPref(String fileName, String key, Context context) { + + return getPrefs(fileName,context).getBoolean(key,false); + } + public static int getMyIntPref(String fileName, String key, Context context) { + + return getPrefs(fileName,context).getInt(key, 0); + } + + public static long getMyLongPref(String fileName, String key, Context context) { + + return getPrefs(fileName,context).getLong(key, 0); + } + + public static void setMyLongPref(String fileName, String key, Context context, long value) { + // perform validation etc.. + getPrefs(fileName,context).edit().putLong(key, value).apply(); + } + + public static void setMyStringPref(String fileName, String key, Context context, String value) { + // perform validation etc.. + getPrefs(fileName,context).edit().putString(key, value).apply(); + } + + public static void setMyBooleanPref(String fileName, String key, Context context, boolean value) { + // perform validation etc.. + getPrefs(fileName,context).edit().putBoolean(key, value).apply(); + } + + public static void setMyIntPref(String fileName, String key, Context context, int value) { + // perform validation etc.. + getPrefs(fileName,context).edit().putInt(key, value).apply(); + } + + + public static void remove(String fileName, String key, Context context) { + // perform validation etc.. + getPrefs(fileName,context).edit().remove(key).apply(); + } + public static void removeAll(String fileName, Context context) { + // perform validation etc.. + getPrefs(fileName,context).edit().clear().apply(); + } +} diff --git a/app/src/main/java/com/utopiaindustries/qualitycontrol/models/Item.java b/app/src/main/java/com/utopiaindustries/qualitycontrol/models/Item.java new file mode 100644 index 0000000..d5f1256 --- /dev/null +++ b/app/src/main/java/com/utopiaindustries/qualitycontrol/models/Item.java @@ -0,0 +1,24 @@ +package com.utopiaindustries.qualitycontrol.models; + +public class Item { + + private final String name; + private int selectedOption; // Index of the selected dropdown option + + public Item(String name, int selectedOption) { + this.name = name; + this.selectedOption = selectedOption; + } + + public String getName() { + return name; + } + + public int getSelectedOption() { + return selectedOption; + } + + public void setSelectedOption(int selectedOption) { + this.selectedOption = selectedOption; + } +} diff --git a/app/src/main/java/com/utopiaindustries/qualitycontrol/models/QualityControlResponse.java b/app/src/main/java/com/utopiaindustries/qualitycontrol/models/QualityControlResponse.java new file mode 100644 index 0000000..09ef247 --- /dev/null +++ b/app/src/main/java/com/utopiaindustries/qualitycontrol/models/QualityControlResponse.java @@ -0,0 +1,4 @@ +package com.utopiaindustries.qualitycontrol.models; + +public class QualityControlResponse { +} diff --git a/app/src/main/java/com/utopiaindustries/qualitycontrol/utils/SharedViewModel.java b/app/src/main/java/com/utopiaindustries/qualitycontrol/utils/SharedViewModel.java new file mode 100644 index 0000000..7b1efbe --- /dev/null +++ b/app/src/main/java/com/utopiaindustries/qualitycontrol/utils/SharedViewModel.java @@ -0,0 +1,467 @@ +package com.utopiaindustries.qualitycontrol.utils; + +import androidx.lifecycle.ViewModel; + +import java.util.ArrayList; + +public class SharedViewModel extends ViewModel { + private String currentDate; + private String location; + private String department; + private String floor; + + //Cutting + private String cuttingSort; + private String cuttingSetInOrder; + private String cuttingShine; + private String cuttingStandardize; + private String cuttingSustain; + private String cuttingSafety; + private String cuttingPercentage; + private String cuttingRemarks; + private ArrayList cuttingImageList; + + //Stitching + private String stitchingSort; + private String stitchingSetInOrder; + private String stitchingShine; + private String stitchingStandardize; + private String stitchingSustain; + private String stitchingSafety; + private String stitchingPercentage; + private String stitchingRemarks; + private ArrayList stitchingImageList; + + //Checking + private String checkingSort; + private String checkingSetInOrder; + private String checkingShine; + private String checkingStandardize; + private String checkingSustain; + private String checkingSafety; + private String checkingPercentage; + private String checkingRemarks; + private ArrayList checkingImageList; + + //Packing + private String packingSort; + private String packingSetInOrder; + private String packingShine; + private String packingStandardize; + private String packingSustain; + private String packingSafety; + private String packingPercentage; + private String packingRemarks; + private ArrayList packingImageList; + + //Sub Store + private String subStoreSort; + private String subStoreSetInOrder; + private String subStoreShine; + private String subStoreStandardize; + private String subStoreSustain; + private String subStoreSafety; + private String subStorePercentage; + private String subStoreRemarks; + private ArrayList subStoreImageList; + + public SharedViewModel() { + cuttingImageList = new ArrayList<>(); + stitchingImageList = new ArrayList<>(); + checkingImageList = new ArrayList<>(); + packingImageList = new ArrayList<>(); + subStoreImageList = new ArrayList<>(); + } + + public String getCurrentDate() { + return currentDate; + } + + public void setCurrentDate(String currentDate) { + this.currentDate = currentDate; + } + + public String getLocation() { + return location; + } + + public void setLocation(String location) { + this.location = location; + } + + public String getDepartment() { + return department; + } + + public void setDepartment(String department) { + this.department = department; + } + + public String getFloor() { + return floor; + } + + public void setFloor(String floor) { + this.floor = floor; + } + + public String getCuttingSort() { + return cuttingSort; + } + + public void setCuttingSort(String cuttingSort) { + this.cuttingSort = cuttingSort; + } + + public String getCuttingSetInOrder() { + return cuttingSetInOrder; + } + + public void setCuttingSetInOrder(String cuttingSetInOrder) { + this.cuttingSetInOrder = cuttingSetInOrder; + } + + public String getCuttingShine() { + return cuttingShine; + } + + public void setCuttingShine(String cuttingShine) { + this.cuttingShine = cuttingShine; + } + + public String getCuttingStandardize() { + return cuttingStandardize; + } + + public void setCuttingStandardize(String cuttingStandardize) { + this.cuttingStandardize = cuttingStandardize; + } + + public String getCuttingSustain() { + return cuttingSustain; + } + + public void setCuttingSustain(String cuttingSustain) { + this.cuttingSustain = cuttingSustain; + } + + public String getCuttingSafety() { + return cuttingSafety; + } + + public void setCuttingSafety(String cuttingSafety) { + this.cuttingSafety = cuttingSafety; + } + + public String getCuttingPercentage() { + return cuttingPercentage; + } + + public void setCuttingPercentage(String cuttingPercentage) { + this.cuttingPercentage = cuttingPercentage; + } + + public String getCuttingRemarks() { + return cuttingRemarks; + } + + public void setCuttingRemarks(String cuttingRemarks) { + this.cuttingRemarks = cuttingRemarks; + } + + public ArrayList getCuttingImageList() { + return cuttingImageList; + } + + public void setCuttingImageList(ArrayList cuttingImageList) { + this.cuttingImageList = cuttingImageList; + } + + public String getStitchingSort() { + return stitchingSort; + } + + public void setStitchingSort(String stitchingSort) { + this.stitchingSort = stitchingSort; + } + + public String getStitchingSetInOrder() { + return stitchingSetInOrder; + } + + public void setStitchingSetInOrder(String stitchingSetInOrder) { + this.stitchingSetInOrder = stitchingSetInOrder; + } + + public String getStitchingShine() { + return stitchingShine; + } + + public void setStitchingShine(String stitchingShine) { + this.stitchingShine = stitchingShine; + } + + public String getStitchingStandardize() { + return stitchingStandardize; + } + + public void setStitchingStandardize(String stitchingStandardize) { + this.stitchingStandardize = stitchingStandardize; + } + + public String getStitchingSustain() { + return stitchingSustain; + } + + public void setStitchingSustain(String stitchingSustain) { + this.stitchingSustain = stitchingSustain; + } + + public String getStitchingSafety() { + return stitchingSafety; + } + + public void setStitchingSafety(String stitchingSafety) { + this.stitchingSafety = stitchingSafety; + } + + public String getStitchingPercentage() { + return stitchingPercentage; + } + + public void setStitchingPercentage(String stitchingPercentage) { + this.stitchingPercentage = stitchingPercentage; + } + + public String getStitchingRemarks() { + return stitchingRemarks; + } + + public void setStitchingRemarks(String stitchingRemarks) { + this.stitchingRemarks = stitchingRemarks; + } + + public ArrayList getStitchingImageList() { + return stitchingImageList; + } + + public void setStitchingImageList(ArrayList stitchingImageList) { + this.stitchingImageList = stitchingImageList; + } + + public String getCheckingSort() { + return checkingSort; + } + + public void setCheckingSort(String checkingSort) { + this.checkingSort = checkingSort; + } + + public String getCheckingSetInOrder() { + return checkingSetInOrder; + } + + public void setCheckingSetInOrder(String checkingSetInOrder) { + this.checkingSetInOrder = checkingSetInOrder; + } + + public String getCheckingShine() { + return checkingShine; + } + + public void setCheckingShine(String checkingShine) { + this.checkingShine = checkingShine; + } + + public String getCheckingStandardize() { + return checkingStandardize; + } + + public void setCheckingStandardize(String checkingStandardize) { + this.checkingStandardize = checkingStandardize; + } + + public String getCheckingSustain() { + return checkingSustain; + } + + public void setCheckingSustain(String checkingSustain) { + this.checkingSustain = checkingSustain; + } + + public String getCheckingSafety() { + return checkingSafety; + } + + public void setCheckingSafety(String checkingSafety) { + this.checkingSafety = checkingSafety; + } + + public String getCheckingPercentage() { + return checkingPercentage; + } + + public void setCheckingPercentage(String checkingPercentage) { + this.checkingPercentage = checkingPercentage; + } + + public String getCheckingRemarks() { + return checkingRemarks; + } + + public void setCheckingRemarks(String checkingRemarks) { + this.checkingRemarks = checkingRemarks; + } + + public ArrayList getCheckingImageList() { + return checkingImageList; + } + + public void setCheckingImageList(ArrayList checkingImageList) { + this.checkingImageList = checkingImageList; + } + + public String getPackingSort() { + return packingSort; + } + + public void setPackingSort(String packingSort) { + this.packingSort = packingSort; + } + + public String getPackingSetInOrder() { + return packingSetInOrder; + } + + public void setPackingSetInOrder(String packingSetInOrder) { + this.packingSetInOrder = packingSetInOrder; + } + + public String getPackingShine() { + return packingShine; + } + + public void setPackingShine(String packingShine) { + this.packingShine = packingShine; + } + + public String getPackingStandardize() { + return packingStandardize; + } + + public void setPackingStandardize(String packingStandardize) { + this.packingStandardize = packingStandardize; + } + + public String getPackingSustain() { + return packingSustain; + } + + public void setPackingSustain(String packingSustain) { + this.packingSustain = packingSustain; + } + + public String getPackingSafety() { + return packingSafety; + } + + public void setPackingSafety(String packingSafety) { + this.packingSafety = packingSafety; + } + + public String getPackingPercentage() { + return packingPercentage; + } + + public void setPackingPercentage(String packingPercentage) { + this.packingPercentage = packingPercentage; + } + + public String getPackingRemarks() { + return packingRemarks; + } + + public void setPackingRemarks(String packingRemarks) { + this.packingRemarks = packingRemarks; + } + + public ArrayList getPackingImageList() { + return packingImageList; + } + + public void setPackingImageList(ArrayList packingImageList) { + this.packingImageList = packingImageList; + } + + public String getSubStoreSort() { + return subStoreSort; + } + + public void setSubStoreSort(String subStoreSort) { + this.subStoreSort = subStoreSort; + } + + public String getSubStoreSetInOrder() { + return subStoreSetInOrder; + } + + public void setSubStoreSetInOrder(String subStoreSetInOrder) { + this.subStoreSetInOrder = subStoreSetInOrder; + } + + public String getSubStoreShine() { + return subStoreShine; + } + + public void setSubStoreShine(String subStoreShine) { + this.subStoreShine = subStoreShine; + } + + public String getSubStoreStandardize() { + return subStoreStandardize; + } + + public void setSubStoreStandardize(String subStoreStandardize) { + this.subStoreStandardize = subStoreStandardize; + } + + public String getSubStoreSustain() { + return subStoreSustain; + } + + public void setSubStoreSustain(String subStoreSustain) { + this.subStoreSustain = subStoreSustain; + } + + public String getSubStoreSafety() { + return subStoreSafety; + } + + public void setSubStoreSafety(String subStoreSafety) { + this.subStoreSafety = subStoreSafety; + } + + public String getSubStorePercentage() { + return subStorePercentage; + } + + public void setSubStorePercentage(String subStorePercentage) { + this.subStorePercentage = subStorePercentage; + } + + public String getSubStoreRemarks() { + return subStoreRemarks; + } + + public void setSubStoreRemarks(String subStoreRemarks) { + this.subStoreRemarks = subStoreRemarks; + } + + public ArrayList getSubStoreImageList() { + return subStoreImageList; + } + + public void setSubStoreImageList(ArrayList subStoreImageList) { + this.subStoreImageList = subStoreImageList; + } +} diff --git a/app/src/main/java/com/utopiaindustries/qualitycontrol/viewmodels/LoginViewModel.java b/app/src/main/java/com/utopiaindustries/qualitycontrol/viewmodels/LoginViewModel.java new file mode 100644 index 0000000..5d26343 --- /dev/null +++ b/app/src/main/java/com/utopiaindustries/qualitycontrol/viewmodels/LoginViewModel.java @@ -0,0 +1,70 @@ +package com.utopiaindustries.qualitycontrol.viewmodels; + +import androidx.lifecycle.LiveData; +import androidx.lifecycle.MutableLiveData; +import androidx.lifecycle.ViewModel; + +import com.utopiaindustries.qualitycontrol.apiservice.ApiService; +import com.utopiaindustries.qualitycontrol.apiservice.ApiServiceFactory; +import com.utopiaindustries.qualitycontrol.models.QualityControlResponse; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +public class LoginViewModel extends ViewModel { + + private MutableLiveData userLiveData; + private MutableLiveData errorLiveData; + private MutableLiveData isLoading; + private ApiService apiService; + + public LoginViewModel() { + apiService = ApiServiceFactory.getApiService(); + userLiveData = new MutableLiveData<>(); + errorLiveData = new MutableLiveData<>(); + isLoading = new MutableLiveData<>(); + } + + public LiveData getUserLiveData() { + return userLiveData; + } + + public LiveData getLoadingState() { + + return isLoading; + } + + public LiveData getErrorMessage() { + return errorLiveData; + } + + public void authenticateUser(String user, String password) { + isLoading.setValue(true); + apiService.isUserAuthenticated(user, password).enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + isLoading.setValue(false); + if (response.isSuccessful() && response.body() != null) { + userLiveData.setValue(response.body()); + } else { + errorLiveData.setValue(response.message()); + } + } + + @Override + public void onFailure(Call call, Throwable t) { + isLoading.setValue(false); + errorLiveData.setValue(t.getMessage()); + } + }); + } + + public LiveData getUser() { + return userLiveData; + } + + public LiveData getError() { + return errorLiveData; + } +} diff --git a/app/src/main/res/anim/bs_list_layout_fade_in.xml b/app/src/main/res/anim/bs_list_layout_fade_in.xml new file mode 100644 index 0000000..f967280 --- /dev/null +++ b/app/src/main/res/anim/bs_list_layout_fade_in.xml @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/anim/fade_in.xml b/app/src/main/res/anim/fade_in.xml new file mode 100644 index 0000000..e27221b --- /dev/null +++ b/app/src/main/res/anim/fade_in.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/fade_out.xml b/app/src/main/res/anim/fade_out.xml new file mode 100644 index 0000000..4ebd4e2 --- /dev/null +++ b/app/src/main/res/anim/fade_out.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/grow_from_bottom.xml b/app/src/main/res/anim/grow_from_bottom.xml new file mode 100644 index 0000000..be9e03a --- /dev/null +++ b/app/src/main/res/anim/grow_from_bottom.xml @@ -0,0 +1,14 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/grow_from_top.xml b/app/src/main/res/anim/grow_from_top.xml new file mode 100644 index 0000000..16c36e8 --- /dev/null +++ b/app/src/main/res/anim/grow_from_top.xml @@ -0,0 +1,15 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/popup_hide.xml b/app/src/main/res/anim/popup_hide.xml new file mode 100644 index 0000000..e311d4b --- /dev/null +++ b/app/src/main/res/anim/popup_hide.xml @@ -0,0 +1,8 @@ + + + + diff --git a/app/src/main/res/anim/popup_show.xml b/app/src/main/res/anim/popup_show.xml new file mode 100644 index 0000000..d90ef50 --- /dev/null +++ b/app/src/main/res/anim/popup_show.xml @@ -0,0 +1,8 @@ + + + + diff --git a/app/src/main/res/anim/slide_down.xml b/app/src/main/res/anim/slide_down.xml new file mode 100644 index 0000000..be798a9 --- /dev/null +++ b/app/src/main/res/anim/slide_down.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/anim/slide_in_bottom.xml b/app/src/main/res/anim/slide_in_bottom.xml new file mode 100644 index 0000000..ae4e011 --- /dev/null +++ b/app/src/main/res/anim/slide_in_bottom.xml @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/slide_in_left.xml b/app/src/main/res/anim/slide_in_left.xml new file mode 100644 index 0000000..44e6eb9 --- /dev/null +++ b/app/src/main/res/anim/slide_in_left.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/slide_in_left_menu.xml b/app/src/main/res/anim/slide_in_left_menu.xml new file mode 100644 index 0000000..bc4f72c --- /dev/null +++ b/app/src/main/res/anim/slide_in_left_menu.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/slide_in_right.xml b/app/src/main/res/anim/slide_in_right.xml new file mode 100644 index 0000000..740308b --- /dev/null +++ b/app/src/main/res/anim/slide_in_right.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/slide_in_right_menu.xml b/app/src/main/res/anim/slide_in_right_menu.xml new file mode 100644 index 0000000..bb153b3 --- /dev/null +++ b/app/src/main/res/anim/slide_in_right_menu.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/slide_in_top.xml b/app/src/main/res/anim/slide_in_top.xml new file mode 100644 index 0000000..a608380 --- /dev/null +++ b/app/src/main/res/anim/slide_in_top.xml @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/slide_out_bottom.xml b/app/src/main/res/anim/slide_out_bottom.xml new file mode 100644 index 0000000..46b3bf1 --- /dev/null +++ b/app/src/main/res/anim/slide_out_bottom.xml @@ -0,0 +1,9 @@ + + + + + + diff --git a/app/src/main/res/anim/slide_out_left.xml b/app/src/main/res/anim/slide_out_left.xml new file mode 100644 index 0000000..4db9289 --- /dev/null +++ b/app/src/main/res/anim/slide_out_left.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/slide_out_right.xml b/app/src/main/res/anim/slide_out_right.xml new file mode 100644 index 0000000..73e7bfc --- /dev/null +++ b/app/src/main/res/anim/slide_out_right.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/slide_out_top.xml b/app/src/main/res/anim/slide_out_top.xml new file mode 100644 index 0000000..6d813cd --- /dev/null +++ b/app/src/main/res/anim/slide_out_top.xml @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/slide_up.xml b/app/src/main/res/anim/slide_up.xml new file mode 100644 index 0000000..57f2be5 --- /dev/null +++ b/app/src/main/res/anim/slide_up.xml @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/arrow_back.xml b/app/src/main/res/drawable/arrow_back.xml new file mode 100644 index 0000000..7b7c7d0 --- /dev/null +++ b/app/src/main/res/drawable/arrow_back.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/curved_layout.xml b/app/src/main/res/drawable/curved_layout.xml new file mode 100644 index 0000000..0306638 --- /dev/null +++ b/app/src/main/res/drawable/curved_layout.xml @@ -0,0 +1,18 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/et_border.xml b/app/src/main/res/drawable/et_border.xml new file mode 100644 index 0000000..28504f7 --- /dev/null +++ b/app/src/main/res/drawable/et_border.xml @@ -0,0 +1,8 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_delete.xml b/app/src/main/res/drawable/ic_delete.xml new file mode 100644 index 0000000..883bcaa --- /dev/null +++ b/app/src/main/res/drawable/ic_delete.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..07d5da9 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/app/src/main/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 0000000..2b068d1 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/image_picker.xml b/app/src/main/res/drawable/image_picker.xml new file mode 100644 index 0000000..fd890ce --- /dev/null +++ b/app/src/main/res/drawable/image_picker.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/img_load.xml b/app/src/main/res/drawable/img_load.xml new file mode 100644 index 0000000..2102567 --- /dev/null +++ b/app/src/main/res/drawable/img_load.xml @@ -0,0 +1,12 @@ + + + + + diff --git a/app/src/main/res/drawable/rounded_border.xml b/app/src/main/res/drawable/rounded_border.xml new file mode 100644 index 0000000..db35694 --- /dev/null +++ b/app/src/main/res/drawable/rounded_border.xml @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/rounded_btn_login.xml b/app/src/main/res/drawable/rounded_btn_login.xml new file mode 100644 index 0000000..0e174d6 --- /dev/null +++ b/app/src/main/res/drawable/rounded_btn_login.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/search.png b/app/src/main/res/drawable/search.png new file mode 100644 index 0000000..012167f Binary files /dev/null and b/app/src/main/res/drawable/search.png differ diff --git a/app/src/main/res/drawable/wave_4_.xml b/app/src/main/res/drawable/wave_4_.xml new file mode 100644 index 0000000..01a16b0 --- /dev/null +++ b/app/src/main/res/drawable/wave_4_.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/activity_home.xml b/app/src/main/res/layout/activity_home.xml new file mode 100644 index 0000000..b039eae --- /dev/null +++ b/app/src/main/res/layout/activity_home.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_splash.xml b/app/src/main/res/layout/activity_splash.xml new file mode 100644 index 0000000..5494a0c --- /dev/null +++ b/app/src/main/res/layout/activity_splash.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_summary.xml b/app/src/main/res/layout/activity_summary.xml new file mode 100644 index 0000000..46ac04b --- /dev/null +++ b/app/src/main/res/layout/activity_summary.xml @@ -0,0 +1,44 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/custom_layout.xml b/app/src/main/res/layout/custom_layout.xml new file mode 100644 index 0000000..e74782c --- /dev/null +++ b/app/src/main/res/layout/custom_layout.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_checking.xml b/app/src/main/res/layout/fragment_checking.xml new file mode 100644 index 0000000..7f55c88 --- /dev/null +++ b/app/src/main/res/layout/fragment_checking.xml @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +