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">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ android:id="@+id/newAccount"
+ android:layout_width="250dp"
+ android:layout_height="50dp"
+ android:backgroundTint="#0F1010"
+ android:text="signup"
+ android:textSize="18sp"
+ app:cornerRadius="20dp"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintHorizontal_bias="0.496"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintVertical_bias="0.823" />
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 64fa823..df65e07 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -7,34 +7,33 @@
android:layout_height="match_parent"
tools:context=".views.MainActivity">
-
+
-
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_sign_up.xml b/app/src/main/res/layout/activity_sign_up.xml
index e4842d2..88b483d 100644
--- a/app/src/main/res/layout/activity_sign_up.xml
+++ b/app/src/main/res/layout/activity_sign_up.xml
@@ -5,82 +5,69 @@
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
+ android:background="#F1FAEC"
tools:context=".views.SignUpActivity">
-
+ app:layout_constraintVertical_bias="0.71" />
+
+
+
+ app:layout_constraintVertical_bias="0.368" />
-
-
-
-
-
-
+ app:layout_constraintVertical_bias="0.205" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file