diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1f943f0..3599197 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -17,7 +17,7 @@ android:networkSecurityConfig="@xml/network_security_config"> + android:exported="false"> books; //getter public String getToken(){ return token; @@ -23,6 +27,7 @@ public Integer getCurYear() {return curYear;} public Integer getCurMouth(){return curMonth;} public Integer getCurDay(){return curDay;} + public ArrayList getBook(){return books;} //setter public void setToken(String token){ @@ -35,4 +40,5 @@ public void setCurYear(Integer curYear){this.curYear = curYear;} public void setCurMonth(Integer curMonth){this.curMonth = curMonth;} public void setCurDay(Integer curDay){this.curDay = curDay;} + public void setBook(ArrayList books){this.books = books;} } diff --git a/app/src/main/java/com/example/citrusclient/views/CalendarFragment.java b/app/src/main/java/com/example/citrusclient/views/CalendarFragment.java new file mode 100644 index 0000000..4fd89f9 --- /dev/null +++ b/app/src/main/java/com/example/citrusclient/views/CalendarFragment.java @@ -0,0 +1,146 @@ +package com.example.citrusclient.views; + +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 android.widget.TableLayout; +import android.widget.TableRow; +import android.widget.TextView; + +import com.example.citrusclient.R; +import com.example.citrusclient.models.Schedule; +import com.example.citrusclient.viewmodels.ScheduleViewModel; + +import java.util.ArrayList; +import java.util.List; + +/** + * A simple {@link Fragment} subclass. + * Use the {@link CalendarFragment#newInstance} factory method to + * create an instance of this fragment. + */ +public class CalendarFragment extends Fragment { + + // TODO: Rename parameter arguments, choose names that match + // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER + private static final String ARG_PARAM1 = "param1"; + private static final String ARG_PARAM2 = "param2"; + + // TODO: Rename and change types of parameters + private String mParam1; + private String mParam2; + + + private TableLayout tableLayout; + private TableRow[] tableRows = new TableRow[6]; + + public CalendarFragment() { + // Required empty public constructor + } + + /** + * Use this factory method to create a new instance of + * this fragment using the provided parameters. + * + * @param param1 Parameter 1. + * @param param2 Parameter 2. + * @return A new instance of fragment ScheduleFragment. + */ + // TODO: Rename and change types and number of parameters + public static CalendarFragment newInstance(String param1, String param2) { + CalendarFragment fragment = new CalendarFragment(); + Bundle args = new Bundle(); + args.putString(ARG_PARAM1, param1); + args.putString(ARG_PARAM2, param2); + fragment.setArguments(args); + return fragment; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if (getArguments() != null) { + mParam1 = getArguments().getString(ARG_PARAM1); + mParam2 = getArguments().getString(ARG_PARAM2); + } + + + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_calendar, container, false); + } + + private List scheduleList; + ScheduleViewModel scheduleViewModel; + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + tableLayout = view.findViewById(R.id.calendarlayout); + for(int i = 0; i < 6; i++) { + tableRows[i] = (TableRow) tableLayout.getChildAt(i); + for(int j = 0; j < 7; j++) { + RecyclerView recyclerView = new RecyclerView(requireContext());//RecyclerView.LayoutParams.MATCH_PARENT + recyclerView.setLayoutManager(new LinearLayoutManager(view.getContext())); + recyclerView.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.MATCH_PARENT)); + List schedules = new ArrayList<>(); + schedules.add(new Schedule("abc", "3232", "yyyy", 0, 1)); + recyclerView.setAdapter(new MyScheduleAdapter(schedules)); + TableRow.LayoutParams p = (TableRow.LayoutParams) recyclerView.getLayoutParams(); + p.weight = 1; + tableRows[i].addView(recyclerView); + } + } + } +} + +class MyScheduleAdapter extends RecyclerView.Adapter { + + private List scheduleList; + + MyScheduleAdapter(List schedules) { this.scheduleList = schedules; } + + public void setSchedules(List schedules) { + scheduleList = schedules; + notifyDataSetChanged(); + } + @NonNull + @Override + public MyScheduleAdapter.MyScheduleViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.a_calendar_schedule, parent, false); + return new MyScheduleViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull MyScheduleAdapter.MyScheduleViewHolder holder, int position) { + Schedule scheduleData = this.scheduleList.get(position); + holder.scheduleText.setText(scheduleData.getTitle()); + } + + @Override + public int getItemCount() { + return scheduleList.size(); + } + + static class MyScheduleViewHolder extends RecyclerView.ViewHolder { + TextView scheduleText; + public MyScheduleViewHolder(@NonNull View itemView) { + super(itemView); + scheduleText = itemView.findViewById(R.id.schedule_text); + } + } +} + diff --git a/app/src/main/java/com/example/citrusclient/views/LoginActivity.java b/app/src/main/java/com/example/citrusclient/views/LoginActivity.java index 4ef1225..d38374d 100644 --- a/app/src/main/java/com/example/citrusclient/views/LoginActivity.java +++ b/app/src/main/java/com/example/citrusclient/views/LoginActivity.java @@ -2,38 +2,124 @@ import android.content.Intent; import android.os.Bundle; // +import android.os.Handler; import android.view.View; import android.widget.Button; +import android.widget.EditText; +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.example.citrusclient.Citrus; import com.example.citrusclient.R; +import com.example.citrusclient.rest.AccountsRest; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; +import retrofit2.Retrofit; +import retrofit2.converter.jackson.JacksonConverterFactory; public class LoginActivity extends AppCompatActivity { + private Retrofit retrofit; + private AccountsRest accountsRest; + private Citrus citrus; + //画面起動時 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); EdgeToEdge.enable(this); setContentView(R.layout.activity_login); - - username = findViewById(R.id.username); - password = findViewById(R.id.password); - loginButton = findViewById(R.id.loginButton); 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; }); - Button nextButton = (Button)findViewById(R.id.newAccount); - nextButton.setOnClickListener(new View.OnClickListener(){ + //citrusと連携 + citrus = (Citrus) this.getApplication(); + + //通信の初期化 + this.retrofit = new Retrofit.Builder() + .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/citrus/") + .addConverterFactory(JacksonConverterFactory.create()) + .build(); + this.accountsRest = retrofit.create(AccountsRest.class); + + Button loginButton = (Button)findViewById(R.id.loginButton); + loginButton.setOnClickListener(new View.OnClickListener(){ public void onClick(View v){ - Intent intent = new Intent(LoginActivity.this,MainActivity.class); + //テキストを文字列で認識 + EditText editid = (EditText) findViewById(R.id.username); + String id = editid.getText().toString().trim(); + EditText editpw = (EditText) findViewById(R.id.password); + String pw = editpw.getText().toString().trim(); + final Handler handler = new Handler(); + + //入力欄が空欄の時 + if(id.isEmpty() && pw.isEmpty() && id.trim().isEmpty() && pw.trim().isEmpty()){ + System.out.println("不適切入力"); + ((TextView)findViewById(R.id.textView_respons)).setText("適切に入力してください"); + + //Intent intent = new Intent(LoginActivity.this,MainActivity.class); + //startActivity(intent); + + }else if(!id.isEmpty() && !pw.isEmpty() && !id.trim().isEmpty() && !pw.trim().isEmpty() ){ + //入力欄が全て適切に入力された場合の処理 + Call call = accountsRest.login(id,pw); + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()){ + if (!response.body().equals("null")) { + System.out.println("通信成功"); + //端末にtoken.id登録 + String token = response.body(); + citrus.setToken(token); + citrus.setAccountId(id); + + //画面遷移 + handler.post(new Runnable() { + @Override + public void run() { + Intent intent = new Intent(LoginActivity.this, + MainActivity.class); + startActivity(intent); + } + }); + }else{ + ((TextView)findViewById(R.id.textView_respons)).setText(("パスワードが間違っています")); + + } + + }else{ + //通信可能(ただしエラーが発生した場合) + //404がPW入力されてないときだけど、前で定義しているからいらないよね..? + System.out.println("通信可能"); + if(response.code()==404){ + ((TextView)findViewById(R.id.textView_respons)).setText(("IDが間違っています")); + } + } + } + //通信失敗 + @Override + public void onFailure(Call call, Throwable t) { + System.out.println("通信失敗"); + System.out.println(t); + } + }); + } + } + }); + Button newButton = (Button)findViewById(R.id.newAccount); + newButton.setOnClickListener(new View.OnClickListener(){ + + public void onClick(View v){ + Intent intent = new Intent(LoginActivity.this,SignUpActivity.class); startActivity(intent); } }); diff --git a/app/src/main/java/com/example/citrusclient/views/MainActivity.java b/app/src/main/java/com/example/citrusclient/views/MainActivity.java index 02b7179..ea3db46 100644 --- a/app/src/main/java/com/example/citrusclient/views/MainActivity.java +++ b/app/src/main/java/com/example/citrusclient/views/MainActivity.java @@ -10,13 +10,25 @@ import androidx.core.view.ViewCompat; import androidx.core.view.WindowInsetsCompat; import androidx.fragment.app.Fragment; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; +import com.example.citrusclient.Citrus; import com.example.citrusclient.R; +import com.example.citrusclient.models.Book; +import com.example.citrusclient.viewmodels.BooksViewModel; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.google.android.material.navigation.NavigationBarView; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + public class MainActivity extends AppCompatActivity { + BooksViewModel booksViewModel; + Citrus citrus; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -28,6 +40,17 @@ return insets; }); + + + citrus = (Citrus) getApplication(); + booksViewModel = new ViewModelProvider(this).get(BooksViewModel.class); + booksViewModel.getBookLiveData().observe(this, new Observer>() { + @Override + public void onChanged(HashMap integerBookHashMap) { + citrus.setBook(new ArrayList<>(integerBookHashMap.values())); + } + }); + showFragment(new MyBookshelfFragment()); setNavViewEvent(); @@ -54,7 +77,7 @@ } else if(itemId == R.id.home){//ホーム showFragment(new HomeFragment()); }else if(itemId == R.id.calendar){ //カレンダ - + showFragment(new CalendarFragment()); }else if(itemId == R.id.face){//マイページ } diff --git a/app/src/main/res/layout/a_calendar_schedule.xml b/app/src/main/res/layout/a_calendar_schedule.xml new file mode 100644 index 0000000..dd2b441 --- /dev/null +++ b/app/src/main/res/layout/a_calendar_schedule.xml @@ -0,0 +1,14 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index 18a868c..675ff7e 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -1,114 +1,105 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:card_view="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:id="@+id/main" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="#F1FAEC" + android:gravity="center" + android:orientation="vertical" + android:outlineSpotShadowColor="@color/white" + tools:context=".MainActivity"> - - - - - - - - - - - - - -