Script Java Pets
Script Java Pets
java
package com.ksdcom.hewanku;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
/**
* Created by kiki supendi on 24/02/24.
*/
class ApiClient {
private static final String BASE_URL =
"http://20.20.20.12:8080/demo_pets/";
private static Retrofit retrofit;
if (retrofit==null){
retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFac
tory.create())
.build();
}
return retrofit;
}
}
Pets.java
package com.ksdcom.hewanku;
import com.google.gson.annotations.SerializedName;
Adapter.java
package com.ksdcom.hewanku;
import android.annotation.SuppressLint;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.Switch;
import android.widget.TextView;
import android.widget.Toast;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import
com.bumptech.glide.load.resource.drawable.DrawableTransit
ionOptions;
import com.bumptech.glide.request.RequestOptions;
import java.util.ArrayList;
import java.util.List;
import de.hdodenhof.circleimageview.CircleImageView;
public class Adapter extends
RecyclerView.Adapter<Adapter.MyViewHolder> implements
Filterable {
List<Pets> pets, petsFilter;
private Context context;
private RecyclerViewClickListener mListener;
CustomFilter filter;
@Override
public MyViewHolder onCreateViewHolder(ViewGroup
parent, int viewType) {
View view =
LayoutInflater.from(parent.getContext()).inflate(R.layout
.list_item, parent, false);
return new MyViewHolder(view, mListener);
}
@SuppressLint("CheckResult")
@Override
public void onBindViewHolder(final MyViewHolder
holder, int position) {
holder.mName.setText(pets.get(position).getName());
holder.mType.setText(pets.get(position).getBreed() + " /
"
+ pets.get(position).getSpecies());
holder.mDate.setText(pets.get(position).getBirth());
Glide.with(context)
.load(pets.get(position).getPicture())
.apply(requestOptions)
.into(holder.mPicture);
if (love){
holder.mLove.setImageResource(R.drawable.likeon);
} else {
holder.mLove.setImageResource(R.drawable.likeof);
}
}
@Override
public int getItemCount() {
return pets.size();
}
@Override
public Filter getFilter() {
if (filter==null) {
filter=new CustomFilter((ArrayList<Pets>)
petsFilter,this);
}
return filter;
}
mListener = listener;
mRowContainer.setOnClickListener(this);
mLove.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.row_container:
mListener.onRowClick(mRowContainer,
getAdapterPosition());
break;
case R.id.love:
mListener.onLoveClick(mLove,
getAdapterPosition());
break;
default:
break;
}
}
}
package com.ksdcom.hewanku;
import android.widget.Filter;
import java.util.ArrayList;
public CustomFilter(ArrayList<Pets>
filterList,Adapter adapter)
{
this.adapter=adapter;
this.filterList=filterList;
}
//FILTERING OCURS
@Override
protected FilterResults performFiltering(CharSequence
constraint) {
FilterResults results=new FilterResults();
//CHECK CONSTRAINT VALIDITY
if(constraint != null && constraint.length() > 0)
{
//CHANGE TO UPPER
constraint=constraint.toString().toUpperCase();
//STORE OUR FILTERED PLAYERS
ArrayList<Pets> filteredPets=new
ArrayList<>();
if(filterList.get(i).getName().toUpperCase().contains(con
straint))
{
//ADD PLAYER TO FILTERED PLAYERS
filteredPets.add(filterList.get(i));
}
}
results.count=filteredPets.size();
results.values=filteredPets;
}else
{
results.count=filterList.size();
results.values=filterList;
}
return results;
}
@Override
protected void publishResults(CharSequence
constraint, FilterResults results) {
adapter.pets= (ArrayList<Pets>) results.values;
//REFRESH
adapter.notifyDataSetChanged();
}
}
MainActivity.java
package com.ksdcom.hewanku;
import android.app.SearchManager;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import
android.support.design.widget.FloatingActionButton;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.SearchView;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import java.util.List;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
apiInterface =
ApiClient.getApiClient().create(ApiInterface.class);
progressBar = findViewById(R.id.progress);
recyclerView = findViewById(R.id.recyclerView);
listener = new
Adapter.RecyclerViewClickListener() {
@Override
public void onRowClick(View view, final int
position) {
Intent intent = new
Intent(MainActivity.this, EditorActivity.class);
intent.putExtra("id",
petsList.get(position).getId());
intent.putExtra("name",
petsList.get(position).getName());
intent.putExtra("species",
petsList.get(position).getSpecies());
intent.putExtra("breed",
petsList.get(position).getBreed());
intent.putExtra("gender",
petsList.get(position).getGender());
intent.putExtra("picture",
petsList.get(position).getPicture());
intent.putExtra("birth",
petsList.get(position).getBirth());
startActivity(intent);
}
@Override
public void onLoveClick(View view, int
position) {
final int id =
petsList.get(position).getId();
final Boolean love =
petsList.get(position).getLove();
final ImageView mLove =
view.findViewById(R.id.love);
if (love){
mLove.setImageResource(R.drawable.likeof);
petsList.get(position).setLove(false);
updateLove("update_love", id, false);
adapter.notifyDataSetChanged();
} else {
mLove.setImageResource(R.drawable.likeon);
petsList.get(position).setLove(true);
updateLove("update_love", id, true);
adapter.notifyDataSetChanged();
}
}
};
FloatingActionButton fab =
findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view) {
startActivity(new
Intent(MainActivity.this, EditorActivity.class));
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_main, menu);
searchView.setSearchableInfo(
searchManager.getSearchableInfo(getComponentName())
);
searchView.setQueryHint("Search Pet...");
searchView.setOnQueryTextListener(new
SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(final String
query) {
adapter.getFilter().filter(query);
return false;
}
@Override
public boolean onQueryTextChange(String
newText) {
adapter.getFilter().filter(newText);
return false;
}
});
searchMenuItem.getIcon().setVisible(false,
false);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onFailure(Call<List<Pets>> call,
Throwable t) {
Toast.makeText(MainActivity.this, "rp :"+
t.getMessage().toString(),
Toast.LENGTH_SHORT).show();
}
});
}
call.enqueue(new Callback<Pets>() {
@Override
public void onResponse(Call<Pets> call,
Response<Pets> response) {
Log.i(MainActivity.class.getSimpleName(),
"Response "+response.toString());
String value =
response.body().getValue();
String message =
response.body().getMassage();
if (value.equals("1")){
Toast.makeText(MainActivity.this,
message, Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(MainActivity.this,
message, Toast.LENGTH_SHORT).show();
}
}
@Override
public void onFailure(Call<Pets> call,
Throwable t) {
Toast.makeText(MainActivity.this,
t.getMessage().toString(), Toast.LENGTH_SHORT).show();
}
});
}
@Override
protected void onResume() {
super.onResume();
getPets();
}
}
EditorActivity.java
package com.ksdcom.hewanku;
import android.annotation.SuppressLint;
import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.provider.MediaStore;
import
android.support.design.widget.FloatingActionButton;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Base64;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.request.RequestOptions;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Locale;
import de.hdodenhof.circleimageview.CircleImageView;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_editor);
mName = findViewById(R.id.name);
mSpecies = findViewById(R.id.species);
mBreed = findViewById(R.id.breed);
mBirth = findViewById(R.id.birth);
mPicture = findViewById(R.id.picture);
mFabChoosePic = findViewById(R.id.fabChoosePic);
mGenderSpinner = findViewById(R.id.gender);
mBirth = findViewById(R.id.birth);
mBirth.setFocusableInTouchMode(false);
mBirth.setFocusable(false);
mBirth.setOnClickListener(new
View.OnClickListener() {
@Override
public void onClick(View v) {
new DatePickerDialog(EditorActivity.this,
date, myCalendar
.get(Calendar.YEAR),
myCalendar.get(Calendar.MONTH),
myCalendar.get(Calendar.DAY_OF_MONTH)).show();
}
});
mFabChoosePic.setOnClickListener(new
View.OnClickListener() {
@Override
public void onClick(View v) {
chooseFile();
}
});
setupSpinner();
setDataFromIntentExtra();
}
mName.setText(name);
mSpecies.setText(species);
mBreed.setText(breed);
mBirth.setText(birth);
requestOptions.diskCacheStrategy(DiskCacheStrategy.NONE);
requestOptions.placeholder(R.drawable.logo);
requestOptions.error(R.drawable.logo);
Glide.with(EditorActivity.this)
.load(picture)
.apply(requestOptions)
.into(mPicture);
switch (gender) {
case GENDER_MALE:
mGenderSpinner.setSelection(1);
break;
case GENDER_FEMALE:
mGenderSpinner.setSelection(2);
break;
default:
mGenderSpinner.setSelection(0);
break;
}
} else {
getSupportActionBar().setTitle("Add a Pet");
}
}
genderSpinnerAdapter.setDropDownViewResource(android.R.la
yout.simple_dropdown_item_1line);
mGenderSpinner.setAdapter(genderSpinnerAdapter);
mGenderSpinner.setOnItemSelectedListener(new
AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?>
parent, View view, int position, long id) {
String selection = (String)
parent.getItemAtPosition(position);
if (!TextUtils.isEmpty(selection)) {
if
(selection.equals(getString(R.string.gender_male))) {
mGender = GENDER_MALE;
} else if
(selection.equals(getString(R.string.gender_female))) {
mGender = GENDER_FEMALE;
} else {
mGender = GENDER_UNKNOWN;
}
}
}
@Override
public void onNothingSelected(AdapterView<?>
parent) {
mGender = 0;
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_editor, menu);
action = menu;
action.findItem(R.id.menu_save).setVisible(false);
if (id == 0){
action.findItem(R.id.menu_edit).setVisible(false);
action.findItem(R.id.menu_delete).setVisible(false);
action.findItem(R.id.menu_save).setVisible(true);
}
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
this.finish();
return true;
case R.id.menu_edit:
//Edit
editMode();
InputMethodManager imm =
(InputMethodManager)
getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(mName,
InputMethodManager.SHOW_IMPLICIT);
action.findItem(R.id.menu_edit).setVisible(false);
action.findItem(R.id.menu_delete).setVisible(false);
action.findItem(R.id.menu_save).setVisible(true);
return true;
case R.id.menu_save:
//Save
if (id == 0) {
if
(TextUtils.isEmpty(mName.getText().toString()) ||
TextUtils.isEmpty(mSpecies.getText().toString()) ||
TextUtils.isEmpty(mBreed.getText().toString()) ||
TextUtils.isEmpty(mBirth.getText().toString()) ){
AlertDialog.Builder alertDialog =
new AlertDialog.Builder(this);
alertDialog.setMessage("Please
complete the field!");
alertDialog.setPositiveButton("Ok", new
DialogInterface.OnClickListener() {
@Override
public void
onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
alertDialog.show();
}
else {
postData("insert");
action.findItem(R.id.menu_edit).setVisible(true);
action.findItem(R.id.menu_save).setVisible(false);
action.findItem(R.id.menu_delete).setVisible(true);
readMode();
}
} else {
updateData("update", id);
action.findItem(R.id.menu_edit).setVisible(true);
action.findItem(R.id.menu_save).setVisible(false);
action.findItem(R.id.menu_delete).setVisible(true);
readMode();
}
return true;
case R.id.menu_delete:
AlertDialog.Builder dialog = new
AlertDialog.Builder(EditorActivity.this);
dialog.setMessage("Delete this pet?");
dialog.setPositiveButton("Yes" ,new
DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface
dialog, int which) {
dialog.dismiss();
deleteData("delete", id,
picture);
}
});
dialog.setNegativeButton("Cencel", new
DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface
dialog, int which) {
dialog.dismiss();
}
});
dialog.show();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
};
mBirth.setText(sdf.format(myCalendar.getTime()));
}
startActivityForResult(Intent.createChooser(intent,
"Select Picture"), 1);
}
@Override
protected void onActivityResult(int requestCode, int
resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode,
data);
if (requestCode == 1 && resultCode == RESULT_OK
&& data != null && data.getData() != null) {
Uri filePath = data.getData();
try {
bitmap =
MediaStore.Images.Media.getBitmap(getContentResolver(),
filePath);
mPicture.setImageBitmap(bitmap);
} catch (IOException e) {
e.printStackTrace();
}
}
}
readMode();
apiInterface =
ApiClient.getApiClient().create(ApiInterface.class);
call.enqueue(new Callback<Pets>() {
@Override
public void onResponse(Call<Pets> call,
Response<Pets> response) {
progressDialog.dismiss();
Log.i(EditorActivity.class.getSimpleName(),
response.toString());
String value =
response.body().getValue();
String message =
response.body().getMassage();
if (value.equals("1")){
finish();
} else {
Toast.makeText(EditorActivity.this,
message, Toast.LENGTH_SHORT).show();
}
}
@Override
public void onFailure(Call<Pets> call,
Throwable t) {
progressDialog.dismiss();
Toast.makeText(EditorActivity.this,
t.getMessage().toString(), Toast.LENGTH_SHORT).show();
}
});
}
private void updateData(final String key, final int
id) {
final ProgressDialog progressDialog = new
ProgressDialog(this);
progressDialog.setMessage("Updating...");
progressDialog.show();
readMode();
apiInterface =
ApiClient.getApiClient().create(ApiInterface.class);
call.enqueue(new Callback<Pets>() {
@Override
public void onResponse(Call<Pets> call,
Response<Pets> response) {
progressDialog.dismiss();
Log.i(EditorActivity.class.getSimpleName(),
response.toString());
String value =
response.body().getValue();
String message =
response.body().getMassage();
if (value.equals("1")){
Toast.makeText(EditorActivity.this,
message, Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(EditorActivity.this,
message, Toast.LENGTH_SHORT).show();
}
}
@Override
public void onFailure(Call<Pets> call,
Throwable t) {
progressDialog.dismiss();
Toast.makeText(EditorActivity.this,
t.getMessage().toString(), Toast.LENGTH_SHORT).show();
}
});
}
readMode();
apiInterface =
ApiClient.getApiClient().create(ApiInterface.class);
call.enqueue(new Callback<Pets>() {
@Override
public void onResponse(Call<Pets> call,
Response<Pets> response) {
progressDialog.dismiss();
Log.i(EditorActivity.class.getSimpleName(),
response.toString());
String value =
response.body().getValue();
String message =
response.body().getMassage();
if (value.equals("1")){
Toast.makeText(EditorActivity.this,
message, Toast.LENGTH_SHORT).show();
finish();
} else {
Toast.makeText(EditorActivity.this,
message, Toast.LENGTH_SHORT).show();
}
}
@Override
public void onFailure(Call<Pets> call,
Throwable t) {
progressDialog.dismiss();
Toast.makeText(EditorActivity.this,
t.getMessage().toString(), Toast.LENGTH_SHORT).show();
}
});
}
@SuppressLint("RestrictedApi")
void readMode(){
mName.setFocusableInTouchMode(false);
mSpecies.setFocusableInTouchMode(false);
mBreed.setFocusableInTouchMode(false);
mName.setFocusable(false);
mSpecies.setFocusable(false);
mBreed.setFocusable(false);
mGenderSpinner.setEnabled(false);
mBirth.setEnabled(false);
mFabChoosePic.setVisibility(View.INVISIBLE);
}
@SuppressLint("RestrictedApi")
private void editMode(){
mName.setFocusableInTouchMode(true);
mSpecies.setFocusableInTouchMode(true);
mBreed.setFocusableInTouchMode(true);
mGenderSpinner.setEnabled(true);
mBirth.setEnabled(true);
mFabChoosePic.setVisibility(View.VISIBLE);
}
}