Commit c428a177 authored by iman Fauzi's avatar iman Fauzi

fix

parents 071dc35a de66a03d
......@@ -3,6 +3,12 @@
package="com.yono.messeripos">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-feature
android:name="android.hardware.camera"
android:required="true" />
<application
android:allowBackup="true"
......@@ -31,6 +37,16 @@
android:theme="@style/AppTheme.appbar" />
<activity android:name=".FormProductActivity" />
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="com.example.android.messer"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/path"/>
</provider>
<meta-data
android:name="preloaded_fonts"
android:resource="@array/preloaded_fonts" />
......
......@@ -30,6 +30,7 @@ import com.yono.messeripos.adapter.CartAdapter;
import com.yono.messeripos.models.CartModels;
import com.yono.messeripos.models.MainViewModelsCart;
import com.yono.messeripos.models.ProductCartModels;
import com.yono.messeripos.models.ProductModels;
import java.lang.reflect.Array;
import java.security.Key;
......@@ -81,9 +82,11 @@ public class CartActivity extends AppCompatActivity {
@Override
public void onChanged(List<ProductCartModels> productCartModels) {
if (productCartModels != null){
cartAdapter = new CartAdapter(CartActivity.this, productCartModels);
recyclerView.setAdapter(cartAdapter);
}
}
});
//
......
package com.yono.messeripos;
import android.content.CursorLoader;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.os.PersistableBundle;
import android.provider.MediaStore;
import android.provider.Settings;
import android.util.Log;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;
import androidx.core.content.FileProvider;
import androidx.databinding.DataBindingUtil;
import com.google.android.material.appbar.MaterialToolbar;
import com.yono.messeripos.databinding.FormProductBinding;
import com.yono.messeripos.models.ProductModels;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
public class FormProductActivity extends AppCompatActivity {
FormProductBinding binding;
ProductModels productModels;
File file;
private static final int REQUEST_IMAGE_CAPTURE = 1;
private static final int REQUEST_PERMISSIONS = 448;
private boolean isUpdate = false;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.form_product);
binding = DataBindingUtil.setContentView(this, R.layout.form_product);
binding.btnAdd.setText("Add New Prooduct");
productModels = new ProductModels();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
Window w = getWindow();
w.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
}
MaterialToolbar toolbars = findViewById(R.id.topAppBarForm);
setSupportActionBar(toolbars);
......@@ -20,5 +58,93 @@ public class FormProductActivity extends AppCompatActivity {
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setTitle("Add Product");
toolbars.setNavigationOnClickListener(view -> onBackPressed());
binding.cvProduct.setOnClickListener(view -> takePhoto());
binding.btnAdd.setOnClickListener(view -> saveProduct());
}
private void saveProduct(){
productModels.setProductName(binding.etName.getText().toString());
productModels.setPriceProduct(Integer.parseInt(binding.etPrice.getText().toString()));
productModels.setStockProduct(Integer.parseInt(binding.etStock.getText().toString()));
Toast.makeText(this, productModels.getImageProduct()+" "+productModels.getProductName(), Toast.LENGTH_LONG).show();
}
private void openFile(){
Intent i = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i, 100);
}
private File createImageFile() {
try {
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
File image = File.createTempFile(
"MESSER_" + timeStamp + "_",
".jpg",
getExternalFilesDir(Environment.DIRECTORY_PICTURES)
);
file = image;
return image;
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
}
private void takePhoto() {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
File photoFile = createImageFile();
if (photoFile != null) {
Uri photoURI = FileProvider.getUriForFile(this,
"com.example.android.messer",
photoFile);
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
}
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// if (requestCode == 100 && resultCode == RESULT_OK && data != null) {
// Uri selectedImage = data.getData();
//
// Log.d("Get filepath photo", "" + getRealPathFromURI(selectedImage));
// binding.setPhoto(getRealPathFromURI(selectedImage));
// }
if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
Log.d("Get filepath photo", "" + file.getName());
binding.setPhoto(file.getAbsolutePath());
productModels.setImageProduct(file.getName());
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQUEST_PERMISSIONS && grantResults.length != permissions.length) {
requestPermissions(permissions, REQUEST_PERMISSIONS);
}
}
private String getRealPathFromURI(Uri contentUri) {
String[] proj = {MediaStore.Images.Media.DATA};
CursorLoader loader = new CursorLoader(this, contentUri, proj, null, null, null);
Cursor cursor = loader.loadInBackground();
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
String result = cursor.getString(column_index);
cursor.close();
return result;
}
}
......@@ -5,11 +5,14 @@ import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
......@@ -21,6 +24,7 @@ import androidx.lifecycle.ViewModelProviders;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.appbar.MaterialToolbar;
import com.google.android.material.button.MaterialButton;
import com.yono.messeripos.adapter.CartAdapter;
......@@ -50,6 +54,7 @@ public class MainActivity extends AppCompatActivity {
CategoryAdapter categoryAdapter;
ProductAdapter productAdapter;
CartAdapter cartAdapter;
TextView txtBadge;
public static Boolean status_update = false;
MainViewModelsCart mainViewModelsCart;
......@@ -66,6 +71,7 @@ public class MainActivity extends AppCompatActivity {
mainViewModelsCart = new ViewModelProvider(MainActivity.this).get(MainViewModelsCart.class);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
Window w = getWindow();
w.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
......@@ -82,13 +88,6 @@ public class MainActivity extends AppCompatActivity {
status_update = true;
binding.rvCategory.setVisibility(View.GONE);
productAdapter.notifyDataSetChanged();
mainViewModelsCart.getCartProduct().observe(MainActivity.this, new Observer<List<ProductCartModels>>() {
@Override
public void onChanged(List<ProductCartModels> productCartModels) {
String js = new Gson().toJson(productCartModels);
Log.d("from cart", "Response " + js);
}
});
}else if (id == R.id.create) {
startActivity(new Intent(getApplicationContext(), FormProductActivity.class));
}
......@@ -138,4 +137,20 @@ public class MainActivity extends AppCompatActivity {
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.home, menu);
AppBarLayout materialToolbar = (AppBarLayout) menu.findItem(R.id.topAppBar).getActionView();
// final MenuItem menuItem = menu.findItem(R.id.cart_badge);
// View actionView = menuItem.getActionView();
//
// txtBadge = actionView.findViewById(R.id.cart_badge);
return true;
}
}
\ No newline at end of file
......@@ -7,11 +7,23 @@ import com.yono.messeripos.response.DataResponse;
import java.util.List;
import okhttp3.RequestBody;
import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Multipart;
import retrofit2.http.Part;
public interface ProductService {
@GET(ApiHelper.VERSI_API_1+"products-join")
Call<DataResponse<List<ProductModels<CategoryModels>>>> getProducts();
@Multipart
@GET(ApiHelper.VERSI_API_1+"products")
Call<DataResponse<ProductModels>> postProduct(
@Part("image\"; filename=\"messer_file.jpg\"")RequestBody image,
@Part RequestBody name,
@Part RequestBody price,
@Part RequestBody stock,
@Part RequestBody category_id
);
}
......@@ -18,6 +18,10 @@ public interface CartDaos {
@Query("SELECT * FROM carts ORDER BY id DESC")
public LiveData<List<ProductCartModels>> getCart();
@Query("SELECT * FROM carts WHERE id = :idCart")
public LiveData<List<ProductCartModels>> getCartById(long idCart);
@Insert(onConflict = OnConflictStrategy.IGNORE)
public void insertProduct(ProductCartModels product);
......
package com.yono.messeripos.models;
import android.text.TextUtils;
import android.widget.ImageView;
import androidx.databinding.BindingAdapter;
......@@ -10,6 +11,8 @@ import com.google.gson.annotations.SerializedName;
import com.yono.messeripos.R;
import com.yono.messeripos.api.ApiHelper;
import java.io.File;
public class ProductModels<T> {
@SerializedName("id")
private int idProduct;
......@@ -88,4 +91,15 @@ public class ProductModels<T> {
.into(view);
}
}
@BindingAdapter("path")
public static void setPathImage(ImageView view, String path) {
if (TextUtils.isEmpty(path)) view.setImageResource(R.mipmap.ic_launcher_round);
else {
File file = new File(path);
if (file.exists()) Glide.with(view).load(file).into(view);
else view.setImageResource(R.mipmap.ic_launcher_round);
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
<solid android:color="@android:color/holo_red_dark"/>
<stroke android:color="@android:color/white" android:width="1dp"/>
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
style="?attr/actionButtonStyle"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clipToPadding="false"
android:focusable="true">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@drawable/ic_baseline_shopping_cart_24"/>
<TextView
android:id="@+id/cart_badge"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_gravity="right|end|top"
android:layout_marginEnd="-5dp"
android:layout_marginRight="-5dp"
android:layout_marginTop="3dp"
android:background="@drawable/basge_background"
android:gravity="center"
android:padding="3dp"
android:textColor="@android:color/white"
android:text="0"
android:textSize="10sp"/>
</FrameLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg_add"
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:fitsSystemWindows="true"
xmlns:tools="http://schemas.android.com/tools">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/topAppBarForm"
<data>
<variable
name="productForm"
type="com.yono.messeripos.models.ProductModels" />
<variable
name="photo"
type="String" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<com.google.android.material.appbar.MaterialToolbar android:id="@+id/topAppBarForm"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:elevation="0dp"
......@@ -39,6 +49,7 @@
android:layout_width="160dp"
android:layout_height="160dp"
android:scaleType="centerCrop"
app:path="@{photo}"
android:src="@mipmap/ic_launcher_round" />
</com.google.android.material.card.MaterialCardView>
......@@ -56,9 +67,9 @@
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/etName"
android:text="@{productForm.productName}"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
android:layout_height="wrap_content" />
</com.google.android.material.textfield.TextInputLayout>
......@@ -74,9 +85,9 @@
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/etPrice"
android:text="@{productForm.priceProduct+``}"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
android:layout_height="wrap_content" />
</com.google.android.material.textfield.TextInputLayout>
......@@ -92,10 +103,10 @@
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/etStock"
android:text="@{productForm.stockProduct+``}"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="#fff"
/>
android:textColor="#fff" />
</com.google.android.material.textfield.TextInputLayout>
......@@ -103,29 +114,26 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/listCategory"
android:padding="15dp"
android:padding="25dp"
android:layout_margin="10dp"
app:layout_constraintTop_toBottomOf="@id/tfStock">
</Spinner>
android:textAlignment="textStart"
android:spinnerMode="dropdown"
app:layout_constraintTop_toBottomOf="@id/tfStock"/>
<com.google.android.material.button.MaterialButton
android:id="@+id/btnAdd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
app:layout_constraintTop_toBottomOf="@+id/listCategory"
android:foregroundGravity="bottom"
android:text="@string/add"
tools:ignore="MissingConstraints" />
android:padding="16dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@+id/listCategory"
app:layout_constraintVertical_bias="1.0"
tools:ignore="MissingConstraints"
tools:layout_editor_absoluteX="16dp" />
<ImageView
android:id="@+id/ivLogin"
android:layout_width="191dp"
android:layout_height="166dp"
android:layout_marginTop="68dp"
android:src="@drawable/ic_launcher_new_icon_foreground"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/btnAdd" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
\ No newline at end of file
......@@ -3,9 +3,9 @@
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/menu_cart"
android:orderInCategory="100"
app:showAsAction="ifRoom"
app:showAsAction="always"
android:icon="@drawable/ic_baseline_shopping_cart_24"
android:actionLayout="@layout/custome_action_badge"
android:title="Cart" />
<item
......
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-files-path
name="photos"
path="/" />
</paths>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment