diff --git a/.idea/misc.xml b/.idea/misc.xml index abbe4f0..af9751c 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -3,10 +3,19 @@ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index db53bb1..38000c8 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,6 +3,10 @@ xmlns:tools="http://schemas.android.com/tools" package="com.example.nemophila"> + + + + + tools:targetApi="31"> + + + + + + + + + + @@ -34,11 +54,19 @@ - + + + @@ -57,23 +85,32 @@ android:name=".MainActivity" android:exported="true" android:label="@string/title_activity_maps"> - - + + - - + + + + + + + + + + + - - + android:label="@string/title_activity_post"> - + android:label="@string/title_activity_shop"> \ No newline at end of file diff --git a/app/src/main/java/com/example/nemophila/FriendActivity.java b/app/src/main/java/com/example/nemophila/FriendActivity.java new file mode 100644 index 0000000..718a01c --- /dev/null +++ b/app/src/main/java/com/example/nemophila/FriendActivity.java @@ -0,0 +1,14 @@ +package com.example.nemophila; + +import androidx.appcompat.app.AppCompatActivity; + +import android.os.Bundle; + +public class FriendActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_friend); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/nemophila/GpsActivity.java b/app/src/main/java/com/example/nemophila/GpsActivity.java new file mode 100644 index 0000000..6b78a26 --- /dev/null +++ b/app/src/main/java/com/example/nemophila/GpsActivity.java @@ -0,0 +1,139 @@ +package com.example.nemophila; + +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; + +import android.annotation.SuppressLint; +import android.net.Uri; +import android.os.Bundle; +import android.content.pm.PackageManager; +import android.location.Location; +import android.location.LocationListener; +import android.location.LocationManager; +import android.widget.TextView; +import android.content.Intent; +import android.provider.Settings; +import android.util.Log; +import android.widget.Toast; +import android.Manifest; + +import android.os.Bundle; + +public class GpsActivity extends AppCompatActivity implements LocationListener { + + LocationManager locationManager; + + private final ActivityResultLauncher + requestPermissionLauncher = registerForActivityResult( + new ActivityResultContracts.RequestPermission(), + isGranted -> { + if (isGranted) { + locationStart(); + } + else { + Toast toast = Toast.makeText(this, + "これ以上なにもできません", Toast.LENGTH_SHORT); + toast.show(); + } + }); + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_gps); + + if (ActivityCompat.checkSelfPermission(this, + Manifest.permission.ACCESS_FINE_LOCATION) + != PackageManager.PERMISSION_GRANTED) { + + requestPermissionLauncher.launch( + Manifest.permission.ACCESS_FINE_LOCATION); + } + else{ + locationStart(); + } + } + + private void locationStart(){ + Log.d("debug","locationStart()"); + + // LocationManager インスタンス生成 + locationManager = + (LocationManager) getSystemService(LOCATION_SERVICE); + + if (locationManager != null && locationManager.isProviderEnabled( + LocationManager.GPS_PROVIDER)) { + + Log.d("debug", "location manager Enabled"); + } else { + // GPSを設定するように促す + Intent settingsIntent = + new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); + startActivity(settingsIntent); + Log.d("debug", "not gpsEnable, startActivity"); + } + + if (ContextCompat.checkSelfPermission(this, + Manifest.permission.ACCESS_FINE_LOCATION) != + PackageManager.PERMISSION_GRANTED) { + ActivityCompat.requestPermissions(this, + new String[]{Manifest.permission.ACCESS_FINE_LOCATION,}, 1000); + + Log.d("debug", "checkSelfPermission false"); + return; + } + + //解決しているはずの問題にエラーが起きています + //実行はできます + locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, + 1000, 50, this); + + } + + + @SuppressLint("QueryPermissionsNeeded") + private void moveToGMap(Location location){ + String str1 = String.valueOf(location.getLatitude()); + String str2 = String.valueOf(location.getLongitude()); + + Uri uri = Uri.parse("geo:"+str1+","+str2+"?z=16"); + + Intent intent = new Intent(Intent.ACTION_VIEW, uri); + startActivity(intent); + if (intent.resolveActivity(getPackageManager()) != null) { + startActivity(intent); + } + } + + @Override + public void onLocationChanged(Location location) { + // 緯度の表示 + TextView textView1 = findViewById(R.id.text_view1); + String str1 = "Latitude:"+location.getLatitude(); + textView1.setText(str1); + + // 経度の表示 + TextView textView2 = findViewById(R.id.text_view2); + String str2 = "Longitude:"+location.getLongitude(); + textView2.setText(str2); + + //GoogleMapに送って表示 + //moveToGMap(location); + + //MainActivityに送って表示 + } + + @Override + public void onProviderEnabled(String provider) { + + } + + @Override + public void onProviderDisabled(String provider) { + + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/example/nemophila/LoginActivity.java b/app/src/main/java/com/example/nemophila/LoginActivity.java index 25dba64..bf945c6 100644 --- a/app/src/main/java/com/example/nemophila/LoginActivity.java +++ b/app/src/main/java/com/example/nemophila/LoginActivity.java @@ -1,12 +1,19 @@ package com.example.nemophila; import androidx.appcompat.app.AppCompatActivity; -import androidx.constraintlayout.widget.ConstraintSet; +import android.content.Intent; import android.os.Bundle; +import android.view.View; +import android.widget.EditText; import com.example.nemophila.resources.AccountsRest; +import java.util.HashMap; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; import retrofit2.Retrofit; import retrofit2.converter.jackson.JacksonConverterFactory; @@ -25,5 +32,44 @@ .addConverterFactory(JacksonConverterFactory.create()) .build(); this.AccountsRest = retrofit.create(AccountsRest.class); + + + findViewById(R.id.LoginButton).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + EditText edituid = (EditText) findViewById(R.id.editTextUserID); + String uid = edituid.getText().toString(); + EditText editpw = (EditText) findViewById(R.id.editTextTextNewPassword); + String pw = editpw.getText().toString(); + + // 通信 + Call call = AccountsRest.getAccounts(); + + call.enqueue (new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + System.out.println("通信成功:changeBelongsAndMaster"); + Intent intent = new Intent(LoginActivity.this,MainActivity.class); + startActivity(intent); + } else { + System.out.println("通信可能:changeBelongsAndMaster: " + response.code()); + } + } + + @Override + public void onFailure(Call call, Throwable t) { + System.out.println("通信失敗:changeBelongsAndMaster"); + } + }); + } + }); + findViewById(R.id.SignUp).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Intent intent = new Intent(LoginActivity.this,SignUpActivity.class); + startActivity(intent); + } + }); } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/example/nemophila/MainActivity.java b/app/src/main/java/com/example/nemophila/MainActivity.java index 34a3d8c..d5c1cff 100644 --- a/app/src/main/java/com/example/nemophila/MainActivity.java +++ b/app/src/main/java/com/example/nemophila/MainActivity.java @@ -1,51 +1,328 @@ package com.example.nemophila; +import androidx.annotation.NonNull; +import androidx.core.content.res.ResourcesCompat; import androidx.fragment.app.FragmentActivity; -import android.os.Bundle; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; +import android.content.res.Resources; +import android.graphics.drawable.Drawable; +import android.os.Bundle; +import android.widget.Toast; +import android.annotation.SuppressLint; +import android.net.Uri; +import android.os.Bundle; +import android.content.pm.PackageManager; +import android.location.Location; +import android.location.LocationListener; +import android.location.LocationManager; +import android.widget.TextView; +import android.content.Intent; +import android.provider.Settings; +import android.util.Log; +import android.widget.Toast; +import android.Manifest; + +import com.google.android.gms.maps.CameraUpdate; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.SupportMapFragment; +import com.google.android.gms.maps.model.BitmapDescriptor; +import com.google.android.gms.maps.model.BitmapDescriptorFactory; +import com.google.android.gms.maps.model.GroundOverlay; +import com.google.android.gms.maps.model.GroundOverlayOptions; import com.google.android.gms.maps.model.LatLng; +import com.google.android.gms.maps.model.LatLngBounds; +import com.google.android.gms.maps.model.Marker; import com.google.android.gms.maps.model.MarkerOptions; import com.example.nemophila.databinding.ActivityMainBinding; -public class MainActivity extends FragmentActivity implements OnMapReadyCallback { +import java.util.Locale; + +public class MainActivity extends FragmentActivity implements OnMapReadyCallback,LocationListener { private GoogleMap mMap; private ActivityMainBinding binding; + private LatLng latlng; + private LatLng latlng2; + private LatLng location; + + LocationManager locationManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + //現在地アイコンの取得 + Drawable ic_current = ResourcesCompat.getDrawable(getResources(),R.drawable.ic_current_location,null); binding = ActivityMainBinding.inflate(getLayoutInflater()); setContentView(binding.getRoot()); + if (ActivityCompat.checkSelfPermission(this, + Manifest.permission.ACCESS_FINE_LOCATION) + != PackageManager.PERMISSION_GRANTED) { + + requestPermissionLauncher.launch( + Manifest.permission.ACCESS_FINE_LOCATION); + } + else{ + locationStart(); + } + // Obtain the SupportMapFragment and get notified when the map is ready to be used. SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); + assert mapFragment != null; mapFragment.getMapAsync(this); } - /** - * Manipulates the map once available. - * This callback is triggered when the map is ready to be used. - * This is where we can add markers or lines, add listeners or move the camera. In this case, - * we just add a marker near Sydney, Australia. - * If Google Play services is not installed on the device, the user will be prompted to install - * it inside the SupportMapFragment. This method will only be triggered once the user has - * installed Google Play services and returned to the app. + /* + ここからマップに関する操作 */ + /* @Override public void onMapReady(GoogleMap googleMap) { mMap = googleMap; - // Add a marker in Sydney and move the + //マーカー(ピン)の登録・表示方法(例) LatLng ntlab = new LatLng(34.73, 135.26); mMap.addMarker(new MarkerOptions().position(ntlab).title("Marker in ntlab")); mMap.moveCamera(CameraUpdateFactory.newLatLng(ntlab)); + + //カメラの移動処理方法(例) + CameraUpdate cUpdate = CameraUpdateFactory.newLatLngZoom( + new LatLng(34.73, 135.26), 15); + mMap.moveCamera(cUpdate); } -} \ No newline at end of file + */ + + @Override + public void onMapReady(GoogleMap googleMap) { + mMap = googleMap; + + //研究室周辺の緯度経度 + double latitude = 34.7308032; + double longitude = 135.2630272; + + latlng = new LatLng(latitude, longitude); + //テスト用 + latlng2 = new LatLng(34.74, 135.26); + + // 標準のマーカー + setMarker(latitude, longitude); + + // アイコン画像をマーカーに設定 + //画像関連がわかっていないのでパス + //setIcon(latitude, longitude); + + // camera 移動 (初期画面) + //mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latlng, 15)); + + /* + //多分使わない + // タップした時のリスナーをセット + mMap.setOnMapClickListener(tapLocation -> { + // map(ピン以外)をtapされた位置の緯度経度 + latlng = new LatLng(tapLocation.latitude, tapLocation.longitude); + String str = String.format(Locale.US, "%f, %f", tapLocation.latitude, tapLocation.longitude); + mMap.addMarker(new MarkerOptions().position(location).title(str)); + mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latlng, 18)); + }); + */ + + //長押し時にその座標にピンを立てる + //長押し時にその座標を保存し、投稿画面に移り、投稿完了時にはピンを立てる + mMap.setOnMapLongClickListener(longpushLocation -> { + //長押しされた位置の緯度経度を取得 + LatLng newlocation = new LatLng(longpushLocation.latitude, longpushLocation.longitude); + + //投稿処理 + + + //投稿が完了した場合 + //ピンをその座標に立て、緯度経度をタイトルに設定 + //タイトルはnullにする予定 + mMap.addMarker(new MarkerOptions().position(newlocation).title(""+longpushLocation.latitude+" :"+ longpushLocation.longitude)); + //ピンを立てた位置にカメラを移動 + mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(newlocation, 18)); + }); + + // ピンをクリックした場合 + mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() { + @Override + public boolean onMarkerClick(Marker marker) { + //店の詳細と投稿一覧を表示 + //ここでshopActivityを呼び出す + + //下からクリックしたことを通知 + Toast.makeText(MainActivity.this, "ピンクリック", Toast.LENGTH_SHORT).show(); + return false; + } + }); + + } + + //ピンの設定 + private void setMarker(double latitude, double longitude){ + + MarkerOptions markerOptions = new MarkerOptions(); + MarkerOptions markerOptions2 = new MarkerOptions(); + + markerOptions.position(latlng); + markerOptions.title("ntlab"); + mMap.addMarker(markerOptions); + + //テスト用 + markerOptions2.position(latlng2); + markerOptions2.title(null); + mMap.addMarker(markerOptions2); + + // ズーム + zoomMap(latitude, longitude); + + } + + private void zoomMap(double latitude, double longitude){ + // 表示する東西南北の緯度経度を設定 + double south = latitude * (1-0.00005); + double west = longitude * (1-0.00005); + double north = latitude * (1+0.00005); + double east = longitude * (1+0.00005); + + // LatLngBounds (LatLng southwest, LatLng northeast) + //左下、右上 + LatLngBounds bounds = LatLngBounds.builder() + .include(new LatLng(south , west)) + .include(new LatLng(north, east)) + .build(); + + int width = getResources().getDisplayMetrics().widthPixels; + int height = getResources().getDisplayMetrics().heightPixels; + + // static CameraUpdate.newLatLngBounds(LatLngBounds bounds, int width, int height, int padding) + mMap.moveCamera(CameraUpdateFactory. + newLatLngBounds(bounds, width, height, 0)); + + //ズーム処理 + mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latlng, 15f)); + } + + private void setIcon(double latitude, double longitude){ + Drawable ic_current = ResourcesCompat.getDrawable(getResources(),R.drawable.icon,null); + + //LatLng current_location = new LatLng(34.73080,135.2630272); + LatLng current_location = new LatLng(latitude,longitude); + //mMap.addMarker(new MarkerOptions().position(current_location).icon(BitmapDescriptorFactory.fromResource(R.drawable.icon))); + // マップに貼り付ける BitmapDescriptor生成 + // 画像は自分で適当に用意します。ここではmipmapから持ってきましたが + BitmapDescriptor descriptor = BitmapDescriptorFactory.fromResource(R.drawable.icon); + //Drawable ic_current = ResourcesCompat.getDrawable(getResources(),R.drawable.ic_current_location,null); + + // 貼り付設定 + GroundOverlayOptions overlayOptions = new GroundOverlayOptions(); + overlayOptions.image(descriptor); + + // public GroundOverlayOptions anchor (float u, float v) + // (0,0):top-left, (0,1):bottom-left, (1,0):top-right, (1,1):bottom-right + overlayOptions.anchor(0.5f, 0.5f); + + // 張り付け画像の大きさ メートル単位 + // public GroundOverlayOptions position(LatLng location, float width, float height) + overlayOptions.position(current_location, 300f, 300f); + + // マップに貼り付け・アルファを設定 + GroundOverlay overlay = mMap.addGroundOverlay(overlayOptions); + // ズーム + zoomMap(latitude, longitude); + + // 透明度 + assert overlay != null; + overlay.setTransparency(0.0F); + } + + private final ActivityResultLauncher + requestPermissionLauncher = registerForActivityResult( + new ActivityResultContracts.RequestPermission(), + isGranted -> { + if (isGranted) { + locationStart(); + } + else { + Toast toast = Toast.makeText(this, + "これ以上なにもできません", Toast.LENGTH_SHORT); + toast.show(); + } + }); + + @SuppressLint("MissingPermission") + private void locationStart(){ + Log.d("debug","locationStart()"); + + // LocationManager インスタンス生成 + locationManager = + (LocationManager) getSystemService(LOCATION_SERVICE); + + if (locationManager != null && locationManager.isProviderEnabled( + LocationManager.GPS_PROVIDER)) { + + Log.d("debug", "location manager Enabled"); + } else { + // GPSを設定するように促す + Intent settingsIntent = + new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); + startActivity(settingsIntent); + Log.d("debug", "not gpsEnable, startActivity"); + } + + if (ContextCompat.checkSelfPermission(this, + Manifest.permission.ACCESS_FINE_LOCATION) != + PackageManager.PERMISSION_GRANTED) { + ActivityCompat.requestPermissions(this, + new String[]{Manifest.permission.ACCESS_FINE_LOCATION,}, 1000); + + Log.d("debug", "checkSelfPermission false"); + return; + } + + //解決しているはずの問題にエラーが起きています + //実行はできます + locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, + 1000, 50, this); + + } + + @Override + public void onLocationChanged(Location location) { + //現在地が変更されるたびに現在地アイコンを移動 + + // 緯度の表示 + TextView textView1 = findViewById(R.id.text_view1); + String str1 = "Latitude:"+location.getLatitude(); + textView1.setText(str1); + + // 経度の表示 + TextView textView2 = findViewById(R.id.text_view2); + String str2 = "Longitude:"+location.getLongitude(); + textView2.setText(str2); +// +// //GoogleMapに送って表示 +// moveToGMap(location); + setIcon(location.getLatitude(),location.getLongitude()); + } + + @Override + public void onProviderEnabled(String provider) { + + } + + @Override + public void onProviderDisabled(String provider) { + + } +} diff --git a/app/src/main/java/com/example/nemophila/MyPageActivity.java b/app/src/main/java/com/example/nemophila/MyPageActivity.java index b902728..9424f3b 100644 --- a/app/src/main/java/com/example/nemophila/MyPageActivity.java +++ b/app/src/main/java/com/example/nemophila/MyPageActivity.java @@ -2,7 +2,10 @@ import androidx.appcompat.app.AppCompatActivity; +import android.content.Intent; import android.os.Bundle; +import android.view.View; +import android.widget.Button; public class MyPageActivity extends AppCompatActivity { @@ -10,5 +13,29 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_mypage); + Button friendButton = (Button)findViewById(R.id.friend); + friendButton.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + Intent intent = new Intent(MyPageActivity.this,FriendActivity.class); + startActivity(intent); + + } + }); + Button changeMyPageButton = (Button)findViewById(R.id.changeMyPage); + changeMyPageButton.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + Intent intent = new Intent(MyPageActivity.this,MyPageEditorActivity.class); + startActivity(intent); + + } + }); + Button requestedButton = (Button)findViewById(R.id.requested); + requestedButton.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + Intent intent = new Intent(MyPageActivity.this,RequestedActivity.class); + startActivity(intent); + + } + }); } } \ No newline at end of file diff --git a/app/src/main/java/com/example/nemophila/MyPageEditorActivity.java b/app/src/main/java/com/example/nemophila/MyPageEditorActivity.java new file mode 100644 index 0000000..230015e --- /dev/null +++ b/app/src/main/java/com/example/nemophila/MyPageEditorActivity.java @@ -0,0 +1,14 @@ +package com.example.nemophila; + +import androidx.appcompat.app.AppCompatActivity; + +import android.os.Bundle; + +public class MyPageEditorActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_my_page_editor); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/nemophila/RequestedActivity.java b/app/src/main/java/com/example/nemophila/RequestedActivity.java new file mode 100644 index 0000000..748c4b0 --- /dev/null +++ b/app/src/main/java/com/example/nemophila/RequestedActivity.java @@ -0,0 +1,14 @@ +package com.example.nemophila; + +import androidx.appcompat.app.AppCompatActivity; + +import android.os.Bundle; + +public class RequestedActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_requested); + } +} \ 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 8ac26b4..cc01b38 100644 --- a/app/src/main/java/com/example/nemophila/SignUpActivity.java +++ b/app/src/main/java/com/example/nemophila/SignUpActivity.java @@ -3,12 +3,64 @@ import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; +import android.view.View; +import android.widget.EditText; -public class SignUpActivity extends AppCompatActivity { +import com.example.nemophila.entities.Account; +import com.example.nemophila.resources.AccountsRest; + +import java.util.HashMap; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; +import retrofit2.Retrofit; +import retrofit2.converter.jackson.JacksonConverterFactory; + +public class SignUpActivity extends AppCompatActivity{ + + private Retrofit retrofit; + private AccountsRest AccountsRest; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sign_up); + //通信の初期化 + this.retrofit = new Retrofit.Builder() + .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/nemophila/") + .addConverterFactory(JacksonConverterFactory.create()) + .build(); + this.AccountsRest = retrofit.create(AccountsRest.class); + + + findViewById(R.id.SignUpButton).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + EditText editname = (EditText) findViewById(R.id.editTextTextUserName); + String name = editname.getText().toString(); + EditText editpw = (EditText) findViewById(R.id.editTextTextNewPassword); + String pw = editpw.getText().toString(); + + // 通信 + 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"); + } else { + System.out.println("通信可能:changeBelongsAndMaster: " + response.code()); + } + } + + @Override + public void onFailure(Call call, Throwable t) { + System.out.println("通信失敗:changeBelongsAndMaster"); + } + }); + } + }); } } \ No newline at end of file diff --git a/app/src/main/java/com/example/nemophila/TestActivity.java b/app/src/main/java/com/example/nemophila/TestActivity.java new file mode 100644 index 0000000..a8ed66a --- /dev/null +++ b/app/src/main/java/com/example/nemophila/TestActivity.java @@ -0,0 +1,36 @@ +package com.example.nemophila; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.lifecycle.MutableLiveData; +import androidx.lifecycle.ViewModelProvider; + +import android.os.Bundle; +import android.view.View; +import android.widget.Button; +import android.widget.Toast; + +import com.example.nemophila.entities.Shop; +import com.example.nemophila.viewmodels.ShopsViewModel; + +import java.util.Collection; + +public class TestActivity extends AppCompatActivity { + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_test); + + //RoomViewModelへのアクセス + ShopsViewModel shopsViewModel = new ViewModelProvider(this).get(ShopsViewModel.class); + + + // setViewModelのテスト用 + Button setViewModelButton = (Button)findViewById(R.id.setViewModel); + setViewModelButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + shopsViewModel.setViewArea(20.0, 40.0, 10.0, 30.0); + } + }); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/nemophila/entities/Shop.java b/app/src/main/java/com/example/nemophila/entities/Shop.java index 360e2e0..9095f5a 100644 --- a/app/src/main/java/com/example/nemophila/entities/Shop.java +++ b/app/src/main/java/com/example/nemophila/entities/Shop.java @@ -10,7 +10,7 @@ private ArrayList posts = new ArrayList<>(); //Getter - public String getId() { + public String getSid() { return id; } public String getName() { @@ -27,7 +27,7 @@ } //Setter - public void setId(String id) { + public void setSid(String id) { this.id = id; } public void setName(String name) { diff --git a/app/src/main/java/com/example/nemophila/viewmodels/AccountViewModel.java b/app/src/main/java/com/example/nemophila/viewmodels/AccountViewModel.java index cc86a83..fc670fa 100644 --- a/app/src/main/java/com/example/nemophila/viewmodels/AccountViewModel.java +++ b/app/src/main/java/com/example/nemophila/viewmodels/AccountViewModel.java @@ -3,6 +3,7 @@ import com.example.nemophila.entities.Account; import com.example.nemophila.resources.AccountsRest; +import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; import retrofit2.Call; @@ -16,8 +17,12 @@ private final Retrofit retrofit; private final AccountsRest accountsRest; + // ライブデータ + private final MutableLiveData accountLiveData; + // コンストラクタ public AccountViewModel() { + this.accountLiveData = new MutableLiveData<>(); this.retrofit = new Retrofit.Builder() .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/nemophila/") .addConverterFactory(JacksonConverterFactory.create()) @@ -25,6 +30,11 @@ this.accountsRest = retrofit.create(AccountsRest.class); } + // ライブデータの取得 + public MutableLiveData getAccountLiveData() { + return accountLiveData; + } + // アカウント情報の取得 public void getAccount(String uid) { Call call = accountsRest.getAccount(uid); @@ -32,9 +42,15 @@ call.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + accountLiveData.setValue(response.body()); + } else { + System.out.println("response error"); + } } @Override public void onFailure(Call call, Throwable t) { + System.out.println("correspondence error"); } }); } @@ -46,9 +62,15 @@ call.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + System.out.println("successful"); + } else { + System.out.println("response error"); + } } @Override public void onFailure(Call call, Throwable t) { + System.out.println("correspondence error"); } }); } 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 4f048db..addd584 100644 --- a/app/src/main/java/com/example/nemophila/viewmodels/ShopsViewModel.java +++ b/app/src/main/java/com/example/nemophila/viewmodels/ShopsViewModel.java @@ -1,5 +1,6 @@ package com.example.nemophila.viewmodels; +import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; @@ -23,7 +24,7 @@ final private MutableLiveData> shopsLiveData; // コンストラクタ - public ShopsViewModel(MutableLiveData> shopsLiveData){ + public ShopsViewModel(){ this.shopsLiveData = new MutableLiveData<>(); this.retrofit = new Retrofit.Builder() .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/nemophila/") @@ -32,8 +33,12 @@ this.shopsRest = retrofit.create(ShopsRest.class); } + public LiveData> getMembersLiveData() { + return this.shopsLiveData; + } + // 画面を動かす, 又はGPSが移動する度に呼び出される - public void setViewArea(double ux, double uy, double lx, double ly){ + public void setViewArea(double ux, double uy, double lx, double ly) { // 画面内に収まる範囲の店舗を取得する Call> call = shopsRest.getShops(ux, uy, lx, ly); @@ -56,6 +61,7 @@ @Override public void onFailure(Call> call, Throwable t) { System.out.println("通信失敗 : setViewModel"); + System.out.println(t); } }); } diff --git a/app/src/main/res/drawable/ic_current_location.xml b/app/src/main/res/drawable/ic_current_location.xml new file mode 100644 index 0000000..3514cf2 --- /dev/null +++ b/app/src/main/res/drawable/ic_current_location.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/icon.jpg b/app/src/main/res/drawable/icon.jpg new file mode 100644 index 0000000..6f2e35a --- /dev/null +++ b/app/src/main/res/drawable/icon.jpg Binary files differ diff --git a/app/src/main/res/layout/activity_friend.xml b/app/src/main/res/layout/activity_friend.xml new file mode 100644 index 0000000..560f9dd --- /dev/null +++ b/app/src/main/res/layout/activity_friend.xml @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_gps.xml b/app/src/main/res/layout/activity_gps.xml new file mode 100644 index 0000000..8571a51 --- /dev/null +++ b/app/src/main/res/layout/activity_gps.xml @@ -0,0 +1,37 @@ + + + + + + + + \ 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 c401d01..d12efd2 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -6,4 +6,51 @@ android:layout_height="match_parent" tools:context=".LoginActivity"> +