diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml index cf4f8bc..e5a6c5f 100644 --- a/.idea/deploymentTargetDropDown.xml +++ b/.idea/deploymentTargetDropDown.xml @@ -7,11 +7,11 @@ - + - + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 9194c63..b3a7a61 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -10,6 +10,7 @@ + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 33d25d7..361b5c3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -24,6 +24,11 @@ android:name=".ShopCreateActivity" android:exported="true" android:label="@string/title_activity_shop_create"> + + + + + - - + + - - + + + + + + + + - - + + - - + + () { + @Override + public void onChanged(Account account) { + String name = account.getName(); + TextView myName = (TextView) findViewById(R.id.name); + myName.setText(name); + nemophila.setName(name); + } + + }); String uid = nemophila.getUid(); String name = nemophila.getName(); - TextView myname = (TextView) findViewById(R.id.name); - myname.setText(name); + TextView myName = (TextView) findViewById(R.id.name); + myName.setText(name); TextView id = (TextView) findViewById(R.id.id); id.setText(uid); diff --git a/app/src/main/java/com/example/nemophila/MyPageEditorActivity.java b/app/src/main/java/com/example/nemophila/MyPageEditorActivity.java index 393e666..4a75d76 100644 --- a/app/src/main/java/com/example/nemophila/MyPageEditorActivity.java +++ b/app/src/main/java/com/example/nemophila/MyPageEditorActivity.java @@ -1,6 +1,7 @@ package com.example.nemophila; import androidx.appcompat.app.AppCompatActivity; +import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; import android.content.Intent; @@ -10,6 +11,7 @@ import android.widget.EditText; import android.widget.TextView; +import com.example.nemophila.entities.Account; import com.example.nemophila.viewmodels.AccountViewModel; public class MyPageEditorActivity extends AppCompatActivity { @@ -20,7 +22,10 @@ setContentView(R.layout.activity_my_page_editor); //AccountViewModelとの通信 AccountViewModel accountViewModel = new ViewModelProvider(this).get(AccountViewModel.class); - EditText name = (EditText) findViewById(R.id.editName); + Nemophila nemophila = (Nemophila) getApplication(); + String name = nemophila.getName(); + EditText myName = (EditText) findViewById(R.id.editName); + myName.setText(name); //MyPageに戻るボタン Button backButton = (Button) findViewById(R.id.backMyPage); backButton.setOnClickListener(new View.OnClickListener() { @@ -30,6 +35,20 @@ } }); + + accountViewModel.getAccountLiveData().observe(this, new Observer() { + @Override + public void onChanged(Account account) { + String name = account.getName(); + TextView myName = (TextView) findViewById(R.id.name); + myName.setText(name); + nemophila.setName(name); + Intent intent = new Intent(MyPageEditorActivity.this, MyPageActivity.class); + startActivity(intent); + } + + }); + //変更確定ボタンを押した場合の動き Button changeNameButton = (Button) findViewById(R.id.changeConfirm); changeNameButton.setOnClickListener(new View.OnClickListener() { @@ -42,7 +61,6 @@ EditText editNewPw = (EditText) findViewById(R.id.editNewPw); String newPw = editNewPw.getText().toString(); //Nemophilaから(id)(token)をgetしてaccountViewModelに送る - Nemophila nemophila = (Nemophila) getApplication(); String uid = nemophila.getUid(); String token = nemophila.getToken(); if(newName!=null) { @@ -51,16 +69,12 @@ if(oldPw!=null && newPw!=null) { accountViewModel.changePw(uid, oldPw, newPw, token); } -//変更確定ボタンを押した場合もMyPageに戻る - Intent intent = new Intent(MyPageEditorActivity.this, MyPageActivity.class); - startActivity(intent); } }); // 削除ボタンを押したときの処理 Button deleteAccountButton = (Button) findViewById(R.id.deleteAccount); deleteAccountButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { - Nemophila nemophila = (Nemophila) getApplication(); String uid = nemophila.getUid(); String token = nemophila.getToken(); Intent intent = new Intent(MyPageEditorActivity.this, LoginActivity.class); diff --git a/app/src/main/java/com/example/nemophila/PostActivity.java b/app/src/main/java/com/example/nemophila/PostActivity.java index d932726..f0b3d2a 100644 --- a/app/src/main/java/com/example/nemophila/PostActivity.java +++ b/app/src/main/java/com/example/nemophila/PostActivity.java @@ -80,6 +80,8 @@ } }); + //コメント入力 + diff --git a/app/src/main/java/com/example/nemophila/ShopActivity.java b/app/src/main/java/com/example/nemophila/ShopActivity.java index add955f..53c5ff9 100644 --- a/app/src/main/java/com/example/nemophila/ShopActivity.java +++ b/app/src/main/java/com/example/nemophila/ShopActivity.java @@ -79,7 +79,7 @@ //PostViewModelを宣言し、LiveDataへの購読 PostsViewModel postsViewModel = new ViewModelProvider(this).get(PostsViewModel.class); //通信テスト用データ(本来currentShopのsidをPostJsonに送る) - postsViewModel.getShopPostJson("151347fa-2c90-44d7-ba48-f23f475b910d"); + postsViewModel.loadShopPost("151347fa-2c90-44d7-ba48-f23f475b910d"); //LiveDataへの購読 postsViewModel.getShopPostLiveData().observe(this, new Observer>() { @@ -91,6 +91,7 @@ PostDataModel data = new PostDataModel(); data.setName(post.getName()); data.setDate(post.getDate()); + //intで受け取った評価を対応した星の数のStringに変換 int intRate = post.getRate(); String strRate = ""; @@ -112,7 +113,5 @@ rv.setAdapter(adapter); } }); - } - } \ No newline at end of file diff --git a/app/src/main/java/com/example/nemophila/ShopCreateActivity.java b/app/src/main/java/com/example/nemophila/ShopCreateActivity.java index a0dcc9b..c1b74e3 100644 --- a/app/src/main/java/com/example/nemophila/ShopCreateActivity.java +++ b/app/src/main/java/com/example/nemophila/ShopCreateActivity.java @@ -1,11 +1,20 @@ package com.example.nemophila; import androidx.appcompat.app.AppCompatActivity; +import androidx.lifecycle.ViewModelProvider; import android.content.Intent; import android.os.Bundle; +import android.view.Gravity; import android.view.View; import android.widget.Button; +import android.widget.EditText; +import android.widget.Toast; + +import com.example.nemophila.entities.Shop; +import com.example.nemophila.viewmodels.ShopsViewModel; + +import java.io.IOException; public class ShopCreateActivity extends AppCompatActivity { @@ -14,18 +23,37 @@ super.onCreate(savedInstanceState); setContentView(R.layout.activity_shop_create); + Nemophila nemophila = (Nemophila) this.getApplication(); - // お店の名前を取得 + // ShopsViewModelにアクセス + ShopsViewModel shopsViewModel = new ViewModelProvider(this).get(ShopsViewModel.class); - //右下のボタンでShopActivityへ遷移 - //sidを発行してピンを立てたい - Button shopCreateButton = (Button)findViewById(R.id.buttonShopCreate); - shopCreateButton.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - Intent intent = new Intent(getApplication(), ShopActivity.class); - startActivity(intent); - } + // LiveDataへの購読 + shopsViewModel.getCurrentLiveData().observe(this, shop -> { + // ShopActivityでどこの店についての投稿かを管理できるように更新する + nemophila.setCurrentShop(shop); + + // ShopActivityへ画面遷移する + Intent intent = new Intent(getApplication(), ShopActivity.class); + startActivity(intent); }); + // 店の名前が入力されていればsidを発行し、新しくShopを生成 + Button shopCreateButton = findViewById(R.id.buttonShopCreate); + shopCreateButton.setOnClickListener(v -> { + EditText nameTextBox = findViewById(R.id.editTextShopCreate); + String name = nameTextBox.getText().toString(); + + // 店の名前を入力されているときのみ処理を行う + if (!name.equals("")) { + shopsViewModel.createShop(name, nemophila.getCurrentLongitude(), nemophila.getCurrentLatitude()); + shopCreateButton.setEnabled(false); + // 店の名前を入力されていないときToastを発行 + } else { + Toast ts = Toast.makeText(ShopCreateActivity.this, "名前を入力してください", Toast.LENGTH_SHORT); + ts.setGravity(Gravity.CENTER, 0, 0); + ts.show(); + } + }); } } \ No newline at end of file diff --git a/app/src/main/java/com/example/nemophila/SignUpActivity.java b/app/src/main/java/com/example/nemophila/SignUpActivity.java index c3ab931..e1f276b 100644 --- a/app/src/main/java/com/example/nemophila/SignUpActivity.java +++ b/app/src/main/java/com/example/nemophila/SignUpActivity.java @@ -24,11 +24,16 @@ private Retrofit retrofit; private AccountsRest AccountsRest; + private Nemophila nemophila; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sign_up); + + //Nemophilaと連携 + nemophila = (Nemophila) this.getApplication(); + //通信の初期化 this.retrofit = new Retrofit.Builder() .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/nemophila/") @@ -42,36 +47,45 @@ public void onClick(View view) { //Nameとpwを入力 EditText editname = (EditText) findViewById(R.id.editTextTextUserName); - String name = editname.getText().toString(); + String name = editname.getText().toString().trim(); EditText editpw = (EditText) findViewById(R.id.editTextTextNewPassword); - String pw = editpw.getText().toString(); + String pw = editpw.getText().toString().trim(); - // 通信 - Call call = AccountsRest.createAccounts(name,pw); + if (!name.isEmpty() && !pw.isEmpty() && !name.trim().equals("") && !pw.trim().equals("")) { + // 通信 + Call call = AccountsRest.createAccounts(name, pw); - call.enqueue(new Callback() { - @Override - public void onResponse(Call call, Response response) { - if (response.isSuccessful()) { - System.out.println("通信成功:changeBelongsAndMaster"); - Intent intent = new Intent(SignUpActivity.this,MainActivity.class); - startActivity(intent); - } else { - System.out.println("通信可能:changeBelongsAndMaster: " + response.code()); - if (response.code() == 500){ - ((TextView) findViewById(R.id.textView)).setText("The UserName you gave is already in use."); - }else if (response.code() == 404){ - ((TextView) findViewById(R.id.textView)).setText("SignUp failed. Please enter the correct credentials."); + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + System.out.println("通信成功:changeBelongsAndMaster"); + + //nemophila(自端末)にname,id,tokenを記憶 + nemophila.setName(response.body().getName()); + nemophila.setUid(response.body().getId()); + nemophila.setToken(response.body().getToken()); + + //mainに画面遷移 + Intent intent = new Intent(SignUpActivity.this, MainActivity.class); + startActivity(intent); + } else { + System.out.println("通信可能:changeBelongsAndMaster: " + response.code()); + if (response.code() == 500) { + ((TextView) findViewById(R.id.textView)).setText("The UserName you gave is already in use."); + } else if (response.code() == 404) { + ((TextView) findViewById(R.id.textView)).setText("SignUp failed. Please enter the correct credentials."); + } } } - } - @Override - public void onFailure(Call call, Throwable t) { - System.out.println("通信失敗:changeBelongsAndMaster"); - System.out.println(t); - } - }); + @Override + public void onFailure(Call call, Throwable t) { + System.out.println("通信失敗:changeBelongsAndMaster"); + System.out.println(t); + } + }); + } } }); //Login画面に遷移 diff --git a/app/src/main/java/com/example/nemophila/TestActivity.java b/app/src/main/java/com/example/nemophila/TestActivity.java index c38422c..85f9381 100644 --- a/app/src/main/java/com/example/nemophila/TestActivity.java +++ b/app/src/main/java/com/example/nemophila/TestActivity.java @@ -1,7 +1,6 @@ package com.example.nemophila; import androidx.appcompat.app.AppCompatActivity; -import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModelProvider; import android.os.Bundle; @@ -27,7 +26,7 @@ Nemophila nemophila = (Nemophila) this.getApplication(); //テスト用ViewModel(ViewModelが増えた場合はここで準備。spinnerItemに名前も追加すること) - //RoomViewModelへのアクセス + //ViewModelへのアクセス ShopsViewModel shopsViewModel = new ViewModelProvider(this).get(ShopsViewModel.class); AccountViewModel accountViewModel = new ViewModelProvider(this).get(AccountViewModel.class); PostsViewModel postsViewModel = new ViewModelProvider(this).get(PostsViewModel.class); @@ -64,7 +63,7 @@ //accountViewModel.getAccount("1111"); break; case 2: - postsViewModel.getShopPostJson("151347fa-2c90-44d7-ba48-f23f475b910d"); + postsViewModel.loadShopPost("151347fa-2c90-44d7-ba48-f23f475b910d"); break; } } diff --git a/app/src/main/java/com/example/nemophila/viewmodels/PostsViewModel.java b/app/src/main/java/com/example/nemophila/viewmodels/PostsViewModel.java index dd8e411..51bd9d6 100644 --- a/app/src/main/java/com/example/nemophila/viewmodels/PostsViewModel.java +++ b/app/src/main/java/com/example/nemophila/viewmodels/PostsViewModel.java @@ -48,7 +48,7 @@ //AccountのpostJsonを取得 - public void getAccountPosts(String uid) { + public void loadAccountPosts(String uid) { Call> call = postsRest.getAccountPosts(uid); call.enqueue(new Callback>() { @Override @@ -78,7 +78,7 @@ } //ShopのPostJsonを取得 - public void getShopPostJson(String sid) { + public void loadShopPost(String sid) { Call> call = postsRest.getShopPosts(sid); call.enqueue(new Callback>() { @Override @@ -94,8 +94,6 @@ @Override public void onFailure(Call> call, Throwable t) { System.out.println("ShopPosts NetWorkError: " + t); - System.out.println(t); - //通信エラー } }); } diff --git a/app/src/main/java/com/example/nemophila/viewmodels/ShopsViewModel.java b/app/src/main/java/com/example/nemophila/viewmodels/ShopsViewModel.java index 23a04cb..88282c9 100644 --- a/app/src/main/java/com/example/nemophila/viewmodels/ShopsViewModel.java +++ b/app/src/main/java/com/example/nemophila/viewmodels/ShopsViewModel.java @@ -8,6 +8,8 @@ import com.example.nemophila.resources.ShopsRest; import com.google.android.gms.maps.model.Marker; +import java.io.IOError; +import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -33,20 +35,35 @@ // ライブデータ final private MutableLiveData> shopsLiveData; + final private MutableLiveData currentShopLiveData; // コンストラクタ public ShopsViewModel() { this.shopsLiveData = new MutableLiveData<>(); + this.currentShopLiveData = new MutableLiveData<>(); this.retrofit = new Retrofit.Builder() .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/nemophila/") .addConverterFactory(JacksonConverterFactory.create()) .build(); this.shopsRest = retrofit.create(ShopsRest.class); + this.ShopToMarker = new HashMap<>(); } + // ライブデータを返す public LiveData> getShopsLiveData() { return this.shopsLiveData; } + public LiveData getCurrentLiveData() { return this.currentShopLiveData; } + + // ShopToMarkerに新しく店と地図上のピンを紐づける + public void setShopAndMarker(Shop shop, Marker marker) { + ShopToMarker.put(shop, marker); + } + + // 店に紐づいたピンを返す + public Marker getMarker(Shop shop) { + return ShopToMarker.get(shop); + } @Override public void update() { @@ -92,6 +109,7 @@ System.out.println("ステータスコード 不正 : setViewModel"); } } + // 通信が失敗 @Override public void onFailure(Call> call, Throwable t) { @@ -101,13 +119,22 @@ }); } - // ShopToMarkerに新しく店と地図上のピンを紐づける - public void setShopAndMarker(Shop shop, Marker marker) { - ShopToMarker.put(shop, marker); - } + public void createShop(String name, double longitude, double latitude) { + Call call = shopsRest.createShop(name, longitude, latitude); - // 店に紐づいたピンを返す - public Marker getMarker(Shop shop) { - return ShopToMarker.get(shop); + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + currentShopLiveData.setValue(response.body()); + } + } + + @Override + public void onFailure(Call call, Throwable t) { + System.out.println("通信失敗 : createShop"); + System.out.println(t); + } + }); } } diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index ebbd728..1a0a7e5 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -11,6 +11,7 @@ android:name="com.google.android.gms.maps.SupportMapFragment" android:layout_width="match_parent" android:layout_height="match_parent" + android:visibility="gone" tools:context=".MainActivity" /> - + + + + diff --git a/app/src/main/res/layout/activity_post.xml b/app/src/main/res/layout/activity_post.xml index 5e67388..cf63fe5 100644 --- a/app/src/main/res/layout/activity_post.xml +++ b/app/src/main/res/layout/activity_post.xml @@ -39,13 +39,14 @@ + app:layout_constraintVertical_bias="0.195" + tools:ignore="SpeakableTextPresentCheck" /> + + + + + + + + + +