Commit 2f11e146 authored by Muhammad Suryono's avatar Muhammad Suryono

update form

parent fc1d5171
......@@ -45,6 +45,7 @@ dependencies {
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
implementation 'com.github.bumptech.glide:glide:4.3.1'
implementation 'com.squareup.okhttp3:logging-interceptor:4.2.1'
implementation project(':library')
def room_version = "2.2.5"
......
......@@ -15,6 +15,7 @@ import android.os.Environment;
import android.os.PersistableBundle;
import android.provider.MediaStore;
import android.provider.Settings;
import android.util.Base64;
import android.util.Log;
import android.view.Window;
import android.view.WindowManager;
......@@ -34,6 +35,8 @@ import androidx.lifecycle.ViewModelProviders;
import com.google.android.material.appbar.MaterialToolbar;
import com.jaredrummler.materialspinner.MaterialSpinner;
import com.yono.messeripos.api.client.Client;
import com.yono.messeripos.api.service.ProductService;
import com.yono.messeripos.databinding.FormProductBinding;
import com.yono.messeripos.models.CategoryModels;
import com.yono.messeripos.models.MainViewModels;
......@@ -41,14 +44,22 @@ import com.yono.messeripos.models.ProductModels;
import com.yono.messeripos.response.DataResponse;
import com.yono.messeripos.utils.Utils;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.nio.ByteBuffer;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.http.Multipart;
public class FormProductActivity extends AppCompatActivity {
......@@ -62,6 +73,7 @@ public class FormProductActivity extends AppCompatActivity {
private static final int REQUEST_PERMISSIONS = 448;
private boolean isUpdate = false;
String kondisi_spin;
String locationPath = null;
private static final String[] ANDROID_VERSIONS = {
"Cupcake",
......@@ -83,6 +95,7 @@ public class FormProductActivity extends AppCompatActivity {
Manifest.permission.WRITE_EXTERNAL_STORAGE};
private Utils utils = new Utils();
ProgressDialog progressDialog;
Client client = new Client();
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
......@@ -117,9 +130,6 @@ public class FormProductActivity extends AppCompatActivity {
categoryModels.add("SELECT CATEGORY");
setSpinner();
}
private void setSpinner() {
......@@ -144,12 +154,15 @@ public class FormProductActivity extends AppCompatActivity {
productModels.setStockProduct(Integer.parseInt(binding.etStock.getText().toString()));
productModels.setCategoryProduct(binding.listCategory.getSelectedIndex());
if (productModels.getImageProduct() != null){
file = new File(productModels.getImageProduct());
if (file.exists()){
Log.i("save_path", "saveProduct: "+locationPath);
if (locationPath != null){
File fileImage = new File(locationPath);
Log.i("save", "saveProduct: "+locationPath);
if (fileImage.exists()){
progressDialog.show();
// Toast.makeText(this, productModels.getImageProduct()+" "+productModels.getProductName(), Toast.LENGTH_LONG).show();
// RequestBody file = RequestBody.create(MediaType)
utils.toastMessage(FormProductActivity.this, utils.convertGson(productModels));
}
}
}
......@@ -198,10 +211,16 @@ public class FormProductActivity extends AppCompatActivity {
if (requestCode == 100 && resultCode == RESULT_OK && data != null) {
Uri selectedImage = data.getData();
Log.d("Get filepath photo", "" + getRealPathFromURI(selectedImage));
binding.setPhoto(getRealPathFromURI(selectedImage));
productModels.setImageProduct(getRealPathFromURI(selectedImage));
locationPath = getRealPathFromURI(selectedImage);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] imageBytes = baos.toByteArray();
imageBytes = Base64.decode(utils.convertImageBase64File(getRealPathFromURI(selectedImage)), Base64.DEFAULT);
Bitmap decodeImages = BitmapFactory.decodeByteArray(imageBytes,0,imageBytes.length);
binding.ivProduct.setImageBitmap(decodeImages);
productModels.setImageProduct(utils.convertImageBase64File(getRealPathFromURI(selectedImage)));
}
}
......
......@@ -32,6 +32,8 @@ import com.google.android.material.appbar.MaterialToolbar;
import com.google.gson.Gson;
import com.yono.messeripos.adapter.CategoryAdapter;
import com.yono.messeripos.adapter.ProductAdapter;
import com.yono.messeripos.api.client.Client;
import com.yono.messeripos.api.service.ProductService;
import com.yono.messeripos.databinding.ActivityMainBinding;
import com.yono.messeripos.models.CategoryModels;
import com.yono.messeripos.models.MainViewModels;
......@@ -44,6 +46,10 @@ import com.yono.messeripos.utils.Utils;
import java.util.ArrayList;
import java.util.List;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
public class MainActivity extends AppCompatActivity {
MaterialToolbar toolbar;
MainViewModels mainViewModels;
......@@ -60,6 +66,7 @@ public class MainActivity extends AppCompatActivity {
public static Boolean selectCategory = false;
public static String orderId;
private static final String ORDER_ID = "orderId";
Client client = new Client();
@SuppressLint("LongLogTag")
@Override
......@@ -128,15 +135,16 @@ public class MainActivity extends AppCompatActivity {
}
}else if (id == R.id.update){
status_update = true;
binding.topAppBar.setVisibility(View.GONE);
// binding.topAppBar.setVisibility(View.GONE);
binding.rvCategory.setVisibility(View.GONE);
// binding.appBarUpdate.setVisibility(View.VISIBLE);
// MaterialToolbar toolbars = findViewById(R.id.appBarUpdate);
// setSupportActionBar(toolbars);
MaterialToolbar toolbars = findViewById(R.id.topAppBar);
setSupportActionBar(toolbars);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setTitle("Update Product");
// toolbars.setNavigationOnClickListener(view -> updateFinish());
toolbars.setNavigationOnClickListener(view -> updateFinish());
productAdapter.notifyDataSetChanged();
}else if (id == R.id.create) {
......@@ -240,7 +248,18 @@ public class MainActivity extends AppCompatActivity {
@Override
public void onDelete(ProductModels product) {
ProductService productService = client.Client(ProductService.class);
productService.deleteProducts(product.getIdProduct()).enqueue(new Callback<DataResponse<ProductModels>>() {
@Override
public void onResponse(Call<DataResponse<ProductModels>> call, Response<DataResponse<ProductModels>> response) {
}
@Override
public void onFailure(Call<DataResponse<ProductModels>> call, Throwable t) {
}
});
}
@Override
......
......@@ -148,6 +148,8 @@ public class ProductAdapter extends RecyclerView.Adapter<ProductAdapter.MyViewHo
MainActivity.cartIsEmpty = true;
}
});
binding.btnDelete.setOnClickListener(view -> listener.onDelete(products));
}
}
}
package com.yono.messeripos.api;
import android.util.Log;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.yono.messeripos.BuildConfig;
import java.util.concurrent.TimeUnit;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
......@@ -9,9 +20,37 @@ public class ApiHelper {
public static final String BASE_URL_IMAGE = "https://storage.googleapis.com/rest-api-meser.appspot.com/images/";
public static Retrofit request(String baseUrl){
OkHttpClient.Builder okHttp = new OkHttpClient().newBuilder();
okHttp.retryOnConnectionFailure(true);
okHttp.connectTimeout(60, TimeUnit.SECONDS);
okHttp.writeTimeout(60, TimeUnit.SECONDS);
okHttp.readTimeout(60, TimeUnit.SECONDS);
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(s -> Log.e("API-LOG", s));
interceptor.level(HttpLoggingInterceptor.Level.BODY);
if (BuildConfig.DEBUG) okHttp.addInterceptor(interceptor);
okHttp.addInterceptor(chain -> {
Request request = chain.request();
Request newReq = request.newBuilder()
.addHeader("Content-Type", "application/json")
.addHeader("Accept", "application/json")
.addHeader("Accept-Encoding", "identity")
.addHeader("Connection", "close")
.addHeader("Transfer-Encoding", "chunked")
.build();
return chain.proceed(newReq);
});
OkHttpClient client = okHttp.build();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create())
// .client(client)
.addConverterFactory(GsonConverterFactory.create(
new GsonBuilder().setLenient().create()
))
.build();
return retrofit;
......
......@@ -5,25 +5,43 @@ import com.yono.messeripos.models.CategoryModels;
import com.yono.messeripos.models.ProductModels;
import com.yono.messeripos.response.DataResponse;
import java.util.HashMap;
import java.util.List;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import retrofit2.Call;
import retrofit2.http.DELETE;
import retrofit2.http.GET;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;
import retrofit2.http.Path;
public interface ProductService {
@GET(ApiHelper.VERSI_API_1+"product-categories")
Call<DataResponse<List<ProductModels<CategoryModels>>>> getProducts();
@DELETE(ApiHelper.VERSI_API_1+"product/{id}")
Call<DataResponse<ProductModels>> deleteProducts(@Path("id") int id);
@Multipart
@GET(ApiHelper.VERSI_API_1+"product")
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
@POST(ApiHelper.VERSI_API_1+"product")
Call<HashMap<String, Object>> postProduct(
@Part MultipartBody.Part image,
@Part("name") RequestBody name,
@Part("price") RequestBody price,
@Part("stock") RequestBody stock,
@Part("category_id") RequestBody category_id
);
@Multipart
@POST(ApiHelper.VERSI_API_1+"product")
Call<DataResponse<ProductModels>> postProducts(
@Part MultipartBody.Part image,
@Part("name") RequestBody name,
@Part("price") Integer price,
@Part("stock") Integer stock,
@Part("category_id") int category_id
);
}
......@@ -64,6 +64,21 @@ public class MainViewModels extends ViewModel {
return transactions;
}
public void deleteProducts(int id){
ProductService productService = client.Client(ProductService.class);
productService.deleteProducts(id).enqueue(new Callback<DataResponse<ProductModels>>() {
@Override
public void onResponse(Call<DataResponse<ProductModels>> call, Response<DataResponse<ProductModels>> response) {
Log.i("Delete", "onResponse: "+utils.convertGson(response.body()));
}
@Override
public void onFailure(Call<DataResponse<ProductModels>> call, Throwable t) {
Log.e("error delete", "onFailure: ",t );
}
});
}
private void getDataTransaction() {
TransactionService transactionService = client.Client(TransactionService.class);
......
package com.yono.messeripos.utils;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Build;
import android.util.Base64;
import android.widget.Toast;
import androidx.annotation.RequiresApi;
import androidx.recyclerview.widget.DividerItemDecoration;
import com.google.gson.Gson;
import java.io.ByteArrayOutputStream;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.text.SimpleDateFormat;
......@@ -73,4 +78,18 @@ public class Utils {
String localDate = localDateTime.format(localFormatter);
return localDate;
}
public String convertImageBase64File(String pathname){
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Bitmap bitmap = BitmapFactory.decodeFile(pathname);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] b = baos.toByteArray();
String encodeImage = Base64.encodeToString(b, Base64.DEFAULT);
return encodeImage;
}
public void toastMessage(Context context, String message){
Toast.makeText(context, message, Toast.LENGTH_LONG).show();
}
}
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