package com.example.cosmosclient.views; import android.app.DatePickerDialog; import android.content.Context; import android.os.Bundle; import android.os.Handler; import android.support.v7.app.AppCompatActivity; import android.view.KeyEvent; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.DatePicker; import android.widget.EditText; import android.widget.ImageButton; import android.widget.Spinner; import android.widget.Toast; import com.example.cosmosclient.R; import com.example.cosmosclient.app.Cosmos; import com.example.cosmosclient.entities.AddRequestsResponse; import com.example.cosmosclient.resources.GroupsRest; import com.example.cosmosclient.yolp.Yolp; import java.io.IOException; import java.util.Calendar; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; import retrofit2.Retrofit; import retrofit2.converter.jackson.JacksonConverterFactory; public class AddRequestActivity extends AppCompatActivity { private InputMethodManager inputMethodManager; private ImageButton calenderButton; private Integer deadlineYear; private Integer deadlineMonth; private Integer deadlineDayOfMonth; private EditText editTextProduct; private EditText editTextDeadline; private Spinner category; private Spinner subCategory; private String selectedSubCategory; private Button addButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_add_request); //キーボード表示を制御するためのオブジェクト inputMethodManager = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); calenderButton = findViewById(R.id.calenderButton); editTextProduct = findViewById(R.id.editTextProduct); editTextDeadline = findViewById(R.id.editTextDeadline); category = findViewById(R.id.spinnerLocationCategory); subCategory = findViewById(R.id.spinnerLocationSubCategory); setSpinner(category, Yolp.getInstance().getCategoryNames()); addButton = findViewById(R.id.buttonAdd); calenderButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //キーボードを閉じる inputMethodManager.hideSoftInputFromWindow(editTextProduct.getWindowToken(), InputMethodManager.RESULT_UNCHANGED_SHOWN); //Calendarインスタンスを取得 final Calendar calender = Calendar.getInstance(); //DatePickerDialogインスタンスを取得 DatePickerDialog datePickerDialog = new DatePickerDialog(AddRequestActivity.this, new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) { deadlineYear = year; deadlineMonth = month; deadlineDayOfMonth = dayOfMonth; //setした日付を取得して表示 editTextDeadline.setText(String.format("%d / %02d / %02d", year, month+1, dayOfMonth)); } }, calender.get(Calendar.YEAR), calender.get(Calendar.MONTH), calender.get(Calendar.DATE) ); //dialogを表示 datePickerDialog.show(); } }); //editTextDeadlineにリスナーをセット editTextDeadline.setOnKeyListener(new View.OnKeyListener() { //コールバックとしてonKey()メソッドを定義 @Override public boolean onKey(View v, int keyCode, KeyEvent event) { //イベントを取得するタイミングには、ボタンが押されてなおかつエンターキーだったときを指定 if((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER)){ //キーボードを閉じる inputMethodManager.hideSoftInputFromWindow(editTextProduct.getWindowToken(), InputMethodManager.RESULT_UNCHANGED_SHOWN); return true; } return false; } }); // 追加ボタン addButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //ボタン連打防止 addButton.setEnabled(false); new Handler().postDelayed(new Runnable() { public void run() { addButton.setEnabled(true); } }, 3000L); // エディットテキストのテキストを取得 String inputProduct = editTextProduct.getText().toString(); //retrofitの処理 final Retrofit retrofit = new Retrofit.Builder() .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/cosmos/") // .baseUrl("http://10.0.2.2:8080/") .addConverterFactory(JacksonConverterFactory.create()) .build(); //interfaceから実装を取得 final GroupsRest addRequestsService = retrofit.create(GroupsRest.class); //RequestList取得するための必要な情報 Cosmos app = (Cosmos) getApplication(); final String uId = app.getuId(); final String gId = app.getCurentGroup().getgId(); final String token = app.getToken(); final boolean detail = true; String deadline = null; if(deadlineYear != null && deadlineMonth != null && deadlineDayOfMonth != null) { deadline = String.format("%d-%02d-%02d %02d:%02d:%02d", deadlineYear, deadlineMonth +1, deadlineDayOfMonth, 23, 59, 59); } Call<AddRequestsResponse> call = addRequestsService.addRequests(gId, uId, inputProduct, deadline, Yolp.getInstance().getCodeBySubcategory(selectedSubCategory), token); // Call<AddRequestsResponse> call = addRequestsService.addRequests(gId, uId, inputProduct, new Date(deadlineYear, deadlineMonth, deadlineDayOfMonth), Yolp.getInstance().getCodeBySubcategory(selectedSubCategory), token); // Call<AddRequestsResponse> call = addRequestsService.addRequests(gId, uId, inputProduct, Yolp.getInstance().getCodeBySubcategory(selectedSubCategory), token); //サーバからのレスポンス call.enqueue(new Callback<AddRequestsResponse>() { //成功時 @Override public void onResponse(Call<AddRequestsResponse> call, Response<AddRequestsResponse> response) { if (response.isSuccessful()) { AddRequestsResponse result = response.body(); Toast.makeText(AddRequestActivity.this, "RequestListに追加しました", Toast.LENGTH_SHORT).show(); } else { try { System.out.println(response.errorBody().string()); } catch (IOException e) { e.printStackTrace(); } //onFailureでキャッチできないエラーの処理 Toast.makeText(AddRequestActivity.this, "通信エラー", Toast.LENGTH_SHORT).show(); } } //失敗時 @Override public void onFailure(Call<AddRequestsResponse> call, Throwable t) { t.printStackTrace(); Toast.makeText(AddRequestActivity.this, "RequestListの追加失敗しました", Toast.LENGTH_SHORT).show(); } }); finish(); } }); // リスナーを登録 category.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { // アイテムが選択された時 @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { Spinner spinner = (Spinner)parent; String selectedCategory = (String)spinner.getSelectedItem(); SearchSubCategory(selectedCategory); } // アイテムが選択されなかった public void onNothingSelected(AdapterView<?> parent) { } }); // リスナーを登録 subCategory.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { // アイテムが選択された時 @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { Spinner spinner = (Spinner)parent; selectedSubCategory = (String)spinner.getSelectedItem(); } // アイテムが選択されなかった public void onNothingSelected(AdapterView<?> parent) { } }); } private void SearchSubCategory(String selectedCategory) { switch(selectedCategory) { case "家電・携帯電話": setSpinner(subCategory, Yolp.getInstance().getCategoryByName("家電・携帯電話").getSubCategoryNames().toArray(new String[0])); break; case "コンビニ・スーパー": setSpinner(subCategory, Yolp.getInstance().getCategoryByName("コンビニ・スーパー").getSubCategoryNames().toArray(new String[0])); break; } } private void setSpinner(Spinner spinner, String[] arr){ ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, arr); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(adapter); } }