diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1de6c3b..f872505 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,23 +2,24 @@ - + + + android:label="グループメンバー" /> @@ -71,13 +72,19 @@ - + android:theme="@style/AppTheme.NoActionBar"> + - - + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/example/cosmosclient/app/Cosmos.java b/app/src/main/java/com/example/cosmosclient/app/Cosmos.java index 632820b..ede712b 100644 --- a/app/src/main/java/com/example/cosmosclient/app/Cosmos.java +++ b/app/src/main/java/com/example/cosmosclient/app/Cosmos.java @@ -2,34 +2,67 @@ import android.app.Application; +import com.example.cosmosclient.entities.AreaInformation; import com.example.cosmosclient.entities.Group; +import com.example.cosmosclient.entities.Location; + +import java.util.HashMap; + +import java.util.HashMap; public class Cosmos extends Application { private String token=null; private Group curGroup=null; + private HashMap groups = new HashMap<>(); private String uId=null; + private HashMap areaInfo = new HashMap<>(); //token処理 public void setToken(String token){ this.token = token; } + public String getToken(){ return token; } - //Group処理 + //currentGroup処理 public void setCurrentGroup(Group g){ - curGroup = g; + setGroup(g); + curGroup = groups.get(g.getgId()); } + public Group getCurentGroup(){ return curGroup; } + //Group処理 + public void setGroup(Group g) { + if (!groups.containsKey(g.getgId())) { + String newGid = g.getgId(); + groups.put(newGid, g); + } + } + + public Group getGroup(String gId) { + return groups.get(gId); + } + //uId処理 public void setuId(String uId){ this.uId = uId; } + public String getuId(){ return uId; } + + //areaInfo処理 + public void setAreaInfo(int areaId, AreaInformation AreaInfo){ + this.areaInfo.put(areaId,AreaInfo); + } + public AreaInformation getAreaInfo(int areaId){ + return areaInfo.get(areaId); + } + } diff --git a/app/src/main/java/com/example/cosmosclient/entities/AreaInformation.java b/app/src/main/java/com/example/cosmosclient/entities/AreaInformation.java new file mode 100644 index 0000000..4a581ac --- /dev/null +++ b/app/src/main/java/com/example/cosmosclient/entities/AreaInformation.java @@ -0,0 +1,32 @@ +package com.example.cosmosclient.entities; + +import java.sql.Time; +import java.util.ArrayList; +import java.util.HashMap; + +public class AreaInformation { + private Location location = new Location(); + private HashMap> feature = new HashMap<>(); + private Time lastUpdated; + + public void setLocation(Location location){ + this.location = location; + } + public Location getLocation(){ + return this.location; + } + + public void setFeature(HashMap> feature) { + this.feature = feature; + } + public HashMap> getFeature() { + return feature; + } + + public void setLastUpdated(Time lastUpdated) { + this.lastUpdated = lastUpdated; + } + public Time getLastUpdated() { + return lastUpdated; + } +} diff --git a/app/src/main/java/com/example/cosmosclient/entities/Feature.java b/app/src/main/java/com/example/cosmosclient/entities/Feature.java new file mode 100644 index 0000000..63c3374 --- /dev/null +++ b/app/src/main/java/com/example/cosmosclient/entities/Feature.java @@ -0,0 +1,28 @@ +package com.example.cosmosclient.entities; + +public class Feature { + private String name; + private int code; + private Location location = new Location(); + + public void setName(String name){ + this.name = name; + } + public String getName(){ + return this.name; + } + + public void setCode(int code){ + this.code = code; + } + public int getCode(){ + return this.code; + } + + public void setLocation(Location location){ + this.location = location; + } + public Location getLocation(){ + return this.location; + } +} diff --git a/app/src/main/java/com/example/cosmosclient/entities/Group.java b/app/src/main/java/com/example/cosmosclient/entities/Group.java index 9e728a3..1ee3c6d 100644 --- a/app/src/main/java/com/example/cosmosclient/entities/Group.java +++ b/app/src/main/java/com/example/cosmosclient/entities/Group.java @@ -1,5 +1,7 @@ package com.example.cosmosclient.entities; +import com.example.cosmosclient.entities.jsons.GroupJson; + import java.util.ArrayList; import java.util.Set; @@ -9,8 +11,7 @@ /* Userどうするか private ArrayList members; */ - //private ArrayList requests; - private Set requests; + private RequestList requestList; public Group(){ @@ -22,11 +23,17 @@ setName(name); } + public Group(GroupJson groupJson){ + setgId(groupJson.getgId()); + setUri(groupJson.getUri()); + setName(groupJson.getName()); + } + public String getgId() { return gId; } - private void setgId(String gId) { + public void setgId(String gId) { this.gId = gId; } @@ -54,21 +61,12 @@ return name; } - public Set getRequests(){ - return requests; + public RequestList getRequestList(){ + return requestList; } - public void setRequests(Set requests){ - this.requests = requests; - } - - public void addRequests(Request request){ - requests.add(request); - } - - public ArrayList getRequestsList(){ - ArrayList list = new ArrayList(getRequests()); - return list; + public void setRequestList(RequestList requestList){ + this.requestList = requestList; } /*メンバー*/ @@ -85,7 +83,4 @@ // members.remove(members.indexOf(uid)); // return null; //} - - /*リクエスト*/ - } diff --git a/app/src/main/java/com/example/cosmosclient/entities/Location.java b/app/src/main/java/com/example/cosmosclient/entities/Location.java new file mode 100644 index 0000000..113b555 --- /dev/null +++ b/app/src/main/java/com/example/cosmosclient/entities/Location.java @@ -0,0 +1,24 @@ +package com.example.cosmosclient.entities; + +public class Location { + private double latitude; + private double longitude; + + public void setLatitude(double latitude) { + this.latitude = latitude; + } + public double getLatitude() { + return latitude; + } + + public void setLongitude(double longitude) { + this.longitude = longitude; + } + public double getLongitude() { + return longitude; + } + + public int hashCode(){ + return (int)((latitude+90)/0.1)+(int)((longitude/0.1)*1800); + } +} diff --git a/app/src/main/java/com/example/cosmosclient/entities/RequestList.java b/app/src/main/java/com/example/cosmosclient/entities/RequestList.java new file mode 100644 index 0000000..3a5b319 --- /dev/null +++ b/app/src/main/java/com/example/cosmosclient/entities/RequestList.java @@ -0,0 +1,56 @@ +package com.example.cosmosclient.entities; + +import java.util.List; + +public class RequestList { + private List requests; + + public RequestList() { + } + + public RequestList(List requests) { + this.requests = requests; + } + + public List getRequests() { + return requests; + } + + public void setRequests(List requests) { + this.requests = requests; + } + + public void addRequest(Request r) { + requests.add(r); + } + +// public void addRequests(List requests) { +// requests.addAll(requests); +// } + + public Request getRequest(int index) { + return requests.get(index); + } + + public void clearRequest() { + requests.clear(); + } + + public void removeRequest(int index) { + requests.remove(index); + } + +// public void removeRequests(List requests) { +// requests.removeAll(requests); +// } + + public int getRequestCount() { + return requests.size(); + } + +// @Override +// public boolean equals(Object other) { +// if (!(other instanceof Container)) return false; +// return components.equals(((Container)other).components); +// } +} diff --git a/app/src/main/java/com/example/cosmosclient/entities/Requests.java b/app/src/main/java/com/example/cosmosclient/entities/Requests.java deleted file mode 100644 index df14a88..0000000 --- a/app/src/main/java/com/example/cosmosclient/entities/Requests.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.example.cosmosclient.entities; - -import com.fasterxml.jackson.annotation.JsonIgnore; - -import java.util.ArrayList; -import java.util.List; - -public class Requests { - private List requests; - - public Requests() { - - } - - public Requests(List requests) { - this.requests = requests; - } - - public List getRequests() { - return requests; - } - - public void setRequests(List requests) { - this.requests = requests; - } - - public void addRequests(Request r) { - requests.add(r); - } - - public Request getRequest(int index) { - return requests.get(index); - } - - public void clearRequest() { - requests.clear(); - } - - public void removeRequest(int index) { - requests.remove(index); - } - - public int getRequestCount() { - return requests.size(); - } - -// @Override -// public boolean equals(Object other) { -// if (!(other instanceof Container)) return false; -// return components.equals(((Container)other).components); -// } -} diff --git a/app/src/main/java/com/example/cosmosclient/entities/UserResponse.java b/app/src/main/java/com/example/cosmosclient/entities/UserResponse.java new file mode 100644 index 0000000..28cb151 --- /dev/null +++ b/app/src/main/java/com/example/cosmosclient/entities/UserResponse.java @@ -0,0 +1,6 @@ +package com.example.cosmosclient.entities; + +public class UserResponse { + public String name; + public String iconUri; +} diff --git a/app/src/main/java/com/example/cosmosclient/resources/GroupsRest.java b/app/src/main/java/com/example/cosmosclient/resources/GroupsRest.java index 1e62250..a424816 100644 --- a/app/src/main/java/com/example/cosmosclient/resources/GroupsRest.java +++ b/app/src/main/java/com/example/cosmosclient/resources/GroupsRest.java @@ -1,16 +1,10 @@ package com.example.cosmosclient.resources; -import com.example.cosmosclient.entities.AddRequestsResponse; -import com.example.cosmosclient.entities.CreateGroupResponse; -import com.example.cosmosclient.entities.Group; import com.example.cosmosclient.entities.GroupListResponse; +import com.example.cosmosclient.entities.CreateGroupResponse; +import com.example.cosmosclient.entities.AddRequestsResponse; import com.example.cosmosclient.entities.MemberListResponse; -import com.example.cosmosclient.entities.Request; -import com.example.cosmosclient.entities.Requests; -import com.example.cosmosclient.entities.User; - -import java.util.ArrayList; -import java.util.Date; +import com.example.cosmosclient.entities.RequestList; import retrofit2.Call; import retrofit2.http.Field; @@ -35,14 +29,14 @@ Call addRequests(@Path("gId") String gId, @Field("uId") String uId, @Field("product") String product, @Field("deadline") String deadline, @Field("location") int location, @Field("token") String token); @GET("groups/{gId}/requests") - Call getRequestsListByGid(@Path("gId") String gId, @Query("token") String token, @Query("detail") boolean detail, @Query("quantity") int quantity); + Call getRequestsListByGid(@Path("gId") String gId, @Query("token") String token, @Query("detail") boolean detail, @Query("quantity") int quantity); @PUT("groups/{gId}/requests/{rId}") @FormUrlEncoded Call updateRequest(@Path("gId") String gId, @Path("rId") String rId, @Field("uId") String uId, @Field("product") String product, @Field("deadline") String deadline, @Field("location") int location, @Field("done") boolean done, @Field("token") String token); // @GET("{gId}/requests/{rId}") -// Call getRequestsDetailByGidAndRid(@Path("gid") String gid, @Path("rid") String rid, @Query("token") String token); +// Call getRequestsDetailByGidAndRid(@Path("gid") String gid, @Path("rid") String rid, @Query("token") String token); @GET("groups/{gId}/members") Call getMemberListByGid(@Path("gId") String gId, @Query("token") String token); diff --git a/app/src/main/java/com/example/cosmosclient/resources/ShopRest.java b/app/src/main/java/com/example/cosmosclient/resources/ShopRest.java new file mode 100644 index 0000000..0d9a51c --- /dev/null +++ b/app/src/main/java/com/example/cosmosclient/resources/ShopRest.java @@ -0,0 +1,17 @@ +package com.example.cosmosclient.resources; + +import com.example.cosmosclient.entities.Feature; + +import retrofit2.Call; +import retrofit2.http.GET; +import retrofit2.http.Query; + +public interface ShopRest { + + @GET("rest") + Call ShopRequest(@Query("longitude") double longitude, + @Query("latitude") double latitude, + @Query("longitudeRange") double longitudeRange, + @Query("latitudeRange") double latitudeRange, + @Query("shop") int shop); +} diff --git a/app/src/main/java/com/example/cosmosclient/resources/UsersRest.java b/app/src/main/java/com/example/cosmosclient/resources/UsersRest.java index b05522c..55e6651 100644 --- a/app/src/main/java/com/example/cosmosclient/resources/UsersRest.java +++ b/app/src/main/java/com/example/cosmosclient/resources/UsersRest.java @@ -2,7 +2,7 @@ import com.example.cosmosclient.entities.SigninResponse; import com.example.cosmosclient.entities.SignupResponse; -import com.example.cosmosclient.entities.User; +import com.example.cosmosclient.entities.UserResponse; import retrofit2.Call; import retrofit2.http.Field; @@ -18,7 +18,7 @@ Call login(@Path("uId") String uId,@Field("pw") String pw); @GET("users/{uId}") - Call getName(@Path("uId") String uId, @Field("token") String token); + Call getName(@Path("uId") String uId, @Query("token") String token); @POST("users") @FormUrlEncoded diff --git a/app/src/main/java/com/example/cosmosclient/services/CosomosBackgroundService.java b/app/src/main/java/com/example/cosmosclient/services/CosomosBackgroundService.java new file mode 100644 index 0000000..28b1dcf --- /dev/null +++ b/app/src/main/java/com/example/cosmosclient/services/CosomosBackgroundService.java @@ -0,0 +1,164 @@ +package com.example.cosmosclient.services; + +import android.Manifest; +import android.app.IntentService; +import android.app.Notification; +import android.app.NotificationChannel; +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.content.Intent; +import android.content.Context; +import android.content.pm.PackageManager; +import android.graphics.Color; +import android.location.Location; +import android.location.LocationListener; +import android.location.LocationManager; +import android.location.LocationProvider; +import android.os.Build; +import android.os.Bundle; +import android.provider.Settings; +import android.support.annotation.RequiresApi; +import android.support.v4.app.ActivityCompat; +import android.util.Log; + +import com.example.cosmosclient.R; + + +public class CosomosBackgroundService extends IntentService implements LocationListener { + private Context context; + private LocationManager locationManager; + private static final int MinTime = 1000;/*最小時間間隔*/ + private static final float MinDistance = 1;/*最小距離間隔*/ + + public CosomosBackgroundService() { + super("CosomosBackgroundService"); + } + + @Override + public void onCreate() { + super.onCreate(); +// Log.d("debug", "onCreate"); + context = getApplicationContext(); + // LocationManager インスタンス生成 + locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); + } + + @RequiresApi(api = Build.VERSION_CODES.O) + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + +// Log.d("debug", "onStartCommand"); + int requestCode = 0; + String channelId = "default"; + String title = context.getString(R.string.app_name); + PendingIntent pendingIntent = + PendingIntent.getActivity(context, requestCode, + intent, PendingIntent.FLAG_UPDATE_CURRENT); + // ForegroundにするためNotificationが必要、Contextを設定 + NotificationManager notificationManager = + (NotificationManager) context. + getSystemService(Context.NOTIFICATION_SERVICE); + // Notification Channel 設定 + NotificationChannel channel = new NotificationChannel( + channelId, title, NotificationManager.IMPORTANCE_DEFAULT); + channel.setDescription("Silent Notification"); + // 通知音を消さないと毎回通知音が出てしまう + // この辺りの設定はcleanにしてから変更 + channel.setSound(null, null); + // 通知ランプを消す + channel.enableLights(false); + channel.setLightColor(Color.BLUE); + // 通知バイブレーション無し + channel.enableVibration(false); + if (notificationManager != null) { + notificationManager.createNotificationChannel(channel); + Notification notification = new Notification.Builder(context, channelId) + .setContentTitle(title) + // 本来なら衛星のアイコンですがandroid標準アイコンを設定 + .setSmallIcon(android.R.drawable.btn_star) + .setContentText("GPS") + .setAutoCancel(true) + .setContentIntent(pendingIntent) + .setWhen(System.currentTimeMillis()) + .build(); + + // startForeground + startForeground(1, notification); + } + + startGPS(); + + return START_NOT_STICKY; + } + + @RequiresApi(api = Build.VERSION_CODES.O) + @Override + protected void onHandleIntent(Intent intent) { +// Log.d("debug", "onHandleIntent"); + } + + protected void startGPS() { +// Log.d("debug", "startGPS"); + final boolean gpsEnabled + = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); + + if (!gpsEnabled) { + // GPSを設定するように促す + enableLocationSettings(); + } + + if (locationManager != null) { + try { + if (ActivityCompat.checkSelfPermission(this, + Manifest.permission.ACCESS_FINE_LOCATION) != + PackageManager.PERMISSION_GRANTED) { + return; + } +// Log.d("debug", "requestLocationUpdates:"); + + locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, + MinTime, MinDistance, this); + } catch (Exception e) { +// Log.d("debug", "Exception:"); + + e.printStackTrace(); + } + } else { + } + } + + @Override + public void onDestroy() { +// Log.d("debug", "onDestroy"); + super.onDestroy(); + } + + @Override + public void onLocationChanged(Location location) { +// Log.d("debug", "onLocationChanged"); + Log.d("debug", "lat:" + location.getLatitude()); + Log.d("debug", "lon:" + location.getLongitude()); + + } + + @Override + public void onStatusChanged(String provider, int status, Bundle extras) { + + } + + @Override + public void onProviderEnabled(String provider) { + + } + + @Override + public void onProviderDisabled(String provider) { + + } + + private void enableLocationSettings() { + Intent settingsIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); + startActivity(settingsIntent); + } + +} diff --git a/app/src/main/java/com/example/cosmosclient/views/AddRequestActivity.java b/app/src/main/java/com/example/cosmosclient/views/AddRequestActivity.java index 465353e..425b4b6 100644 --- a/app/src/main/java/com/example/cosmosclient/views/AddRequestActivity.java +++ b/app/src/main/java/com/example/cosmosclient/views/AddRequestActivity.java @@ -137,7 +137,7 @@ //retrofitの処理 final Retrofit retrofit = new Retrofit.Builder() - .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/cosmos/") + .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/cosmos/rest/") // .baseUrl("http://10.0.2.2:8080/") .addConverterFactory(JacksonConverterFactory.create()) .build(); diff --git a/app/src/main/java/com/example/cosmosclient/views/CreateGroupActivity.java b/app/src/main/java/com/example/cosmosclient/views/CreateGroupActivity.java index 5580a7e..cea6b8e 100644 --- a/app/src/main/java/com/example/cosmosclient/views/CreateGroupActivity.java +++ b/app/src/main/java/com/example/cosmosclient/views/CreateGroupActivity.java @@ -48,7 +48,7 @@ //retrofitの処理 final Retrofit retrofit = new Retrofit.Builder() - .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/cosmos/") + .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/cosmos/rest/") .addConverterFactory(JacksonConverterFactory.create()) .build(); //interfaceから実装を取得 diff --git a/app/src/main/java/com/example/cosmosclient/views/ForgotPasswordActivity.java b/app/src/main/java/com/example/cosmosclient/views/ForgotPasswordActivity.java index 651439d..515e911 100644 --- a/app/src/main/java/com/example/cosmosclient/views/ForgotPasswordActivity.java +++ b/app/src/main/java/com/example/cosmosclient/views/ForgotPasswordActivity.java @@ -21,22 +21,22 @@ //idの取得 final EditText EmailAddressText = findViewById(R.id.NameText); - Button SendButton = findViewById(R.id.SendButton); + //Button SendButton = findViewById(R.id.SendButton); //EmailAddressText.addTextChangedListener(this); - //送信ボタン処理 - SendButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - String MailAddress = EmailAddressText.getText().toString(); - - //メールアドレスをサーバに送信する処理の予定 - Toast.makeText(ForgotPasswordActivity.this, - "入力されたアドレスにメールを送信しました", Toast.LENGTH_SHORT).show(); - finish(); - } - }); +// //送信ボタン処理 +// SendButton.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// String MailAddress = EmailAddressText.getText().toString(); +// +// //メールアドレスをサーバに送信する処理の予定 +// Toast.makeText(ForgotPasswordActivity.this, +// "入力されたアドレスにメールを送信しました", Toast.LENGTH_SHORT).show(); +// finish(); +// } +// }); } //@Override // public void beforeTextChanged(CharSequence s, int start, int count,int after) { // //ignore diff --git a/app/src/main/java/com/example/cosmosclient/views/GroupListActivity.java b/app/src/main/java/com/example/cosmosclient/views/GroupListActivity.java index 16bd164..08b6688 100644 --- a/app/src/main/java/com/example/cosmosclient/views/GroupListActivity.java +++ b/app/src/main/java/com/example/cosmosclient/views/GroupListActivity.java @@ -5,6 +5,8 @@ import android.graphics.BitmapFactory; import android.nfc.Tag; import android.os.Bundle; +import android.provider.MediaStore; +import android.support.v4.app.ActivityCompat; import android.util.Base64; import android.util.Log; import android.view.View; @@ -21,6 +23,7 @@ import android.widget.ArrayAdapter; import android.widget.BaseAdapter; import android.widget.GridView; +import android.widget.ImageView; import android.widget.ListAdapter; import android.widget.TextView; import android.widget.Toast; @@ -29,6 +32,10 @@ import com.example.cosmosclient.entities.Group; import com.example.cosmosclient.entities.GroupListResponse; import com.example.cosmosclient.entities.MemberListResponse; +import com.example.cosmosclient.entities.User; +import com.example.cosmosclient.entities.UserResponse; +import com.example.cosmosclient.entities.jsons.GroupJson; +import com.example.cosmosclient.resources.UsersRest; import com.example.cosmosclient.views.DynamicGridView; import com.example.cosmosclient.resources.GroupsRest; import retrofit2.Call; @@ -48,7 +55,7 @@ private static final String TAG = GroupListActivity.class.getName(); private DynamicGridView gridView; - GroupListResponse result; + private GroupListResponse result; @Override @@ -57,26 +64,165 @@ setContentView(R.layout.activity_group_list); Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar); - final String uId,token; - Cosmos app = (Cosmos) getApplication(); + final Cosmos app = (Cosmos) getApplication(); uId = app.getuId(); token = app.getToken(); - //ユーザ名とユーザIDを表示したい - final String uName; - uName = "hogehoge"; - NavigationView navView = (NavigationView) findViewById(R.id.nav_view); - View headerView = navView.getHeaderView(0); - TextView userNameTextView = navView.getHeaderView(0).findViewById(R.id.userName); - TextView userIDTextView = navView.getHeaderView(0).findViewById(R.id.userID); - userNameTextView.setText("ユーザ名:"+uName); - userIDTextView.setText("ユーザID:"+uId); - final ArrayList groupList = new ArrayList<>(); + + //retrofitの処理 final Retrofit retrofit = new Retrofit.Builder() - .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/cosmos/") + .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/cosmos/rest/") + .addConverterFactory(JacksonConverterFactory.create()) + .build(); + + final UsersRest getUsersService = retrofit.create(UsersRest.class); + //APIに値を送信 + Call call = getUsersService.getName(uId,token); + //サーバからデータ受け取り + call.enqueue(new Callback() { + //成功時 + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + UserResponse result = response.body(); + + //アイコンとユーザ名とユーザIDを表示したい + final String uName; + final String uIcon; + NavigationView navView = (NavigationView) findViewById(R.id.nav_view); + View headerView = navView.getHeaderView(0); + TextView userNameTextView = navView.getHeaderView(0).findViewById(R.id.userName); + TextView userIDTextView = navView.getHeaderView(0).findViewById(R.id.userID); + ImageView userIcon = navView.getHeaderView(0).findViewById(R.id.userIcon); + userIDTextView.setText("ユーザID:"+uId); + uName = result.name; + uIcon = result.iconUri; + userNameTextView.setText("ユーザ名:"+uName); + if (uIcon != null) { + byte[] decodedByte = Base64.decode(uIcon, 0); + userIcon.setImageBitmap(BitmapFactory.decodeByteArray(decodedByte, 0, decodedByte.length)); + } + +// //画像をBase64に変換 +// Bitmap icon = BitmapFactory.decodeResource(getResources(),R.drawable.default_icon_image); +// ByteArrayOutputStream baos = new ByteArrayOutputStream(); +// icon.compress(Bitmap.CompressFormat.JPEG,100, baos); +// byte[] b = baos.toByteArray(); +// String imageEncoded = Base64.encodeToString(b, Base64.DEFAULT); +//// Toast.makeText(GroupListActivity.this,"接続できたよ",Toast.LENGTH_LONG).show(); + + + //アイコンが未設定ならデフォルト画像を設定 +// for(int i = 0; i call, Throwable t) { + t.printStackTrace(); + Toast.makeText(GroupListActivity.this, + "ユーザー情報取得失敗", Toast.LENGTH_SHORT).show(); + } + }); + +// ArrayList GroupList = new ArrayList<>(); +// for (int i = 0; i < result.getGroupCount(); i++) { +// GroupList.add(result.getGroup(i).getName()); +// } + gridView = (DynamicGridView) findViewById(R.id.dynamic_grid); + + gridView.setOnDragListener(new DynamicGridView.OnDragListener() { + @Override + public void onDragStarted(int position) { + Log.d(TAG, "drag started at position" + position); + } + + @Override + public void onDragPositionsChanged(int oldPosition, int newPosition) { + Log.d(TAG, String.format("drag item position changed from %d to %d", oldPosition, newPosition)); + } + + }); + + gridView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { + @Override + public boolean onItemLongClick(AdapterView parent, View view, int position, long id) { + gridView.startEditMode(position); + return true; + } + }); + + // グループの中にはいる(リクエスト一覧画面へ) + gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { +// Toast.makeText(GroupListActivity.this, parent.getAdapter().getItem(position).toString(), +// Toast.LENGTH_SHORT).show(); + GroupJson group = result.getGroups().get(position); + ((Cosmos)getApplication()).setCurrentGroup(new Group(group)); + + Intent intent=new Intent(GroupListActivity.this, com.example.cosmosclient.views.RequestListActivity.class); + startActivity(intent); + } + }); + + /* とりあえずの画面遷移なので変更するかも */ +// TextView group1 = findViewById(R.id.group1); +// group1.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View view) { +// gridView.stopEditMode(); +// Intent intent=new Intent(GroupListActivity.this, com.example.cosmosclient.views.RequestListActivity.class); +// startActivity(intent); +// } +// }); + + + DrawerLayout drawer = findViewById(R.id.drawer_layout); + NavigationView navigationView = findViewById(R.id.nav_view); + ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( + this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); + drawer.addDrawerListener(toggle); + toggle.syncState(); + navigationView.setNavigationItemSelectedListener(this); + } + + @Override + protected void onStart() { + super.onStart(); + final String uId,token; + final Cosmos app = (Cosmos) getApplication(); + uId = app.getuId(); + token = app.getToken(); + + //retrofitの処理 + final Retrofit retrofit = new Retrofit.Builder() + .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/cosmos/rest/") .addConverterFactory(JacksonConverterFactory.create()) .build(); //interfaceから実装を取得 @@ -95,9 +241,10 @@ result = result2; // Iterator it = result.member.iterator(); // int i = 0; - for (int i = 0; i < result.getGroupCount(); i++) { - groupList.add(result.getGroup(i).getName()); - } + +// for (int i = 0; i < result.getGroupCount(); i++) { +// groupList.add(result.getGroup(i).getName()); +// } // グループ名一覧の表示 gridView.setAdapter((ListAdapter) new CheeseDynamicAdapter(GroupListActivity.this, @@ -147,63 +294,6 @@ "グループ情報取得失敗", Toast.LENGTH_SHORT).show(); } }); - -// ArrayList GroupList = new ArrayList<>(); -// for (int i = 0; i < result.getGroupCount(); i++) { -// GroupList.add(result.getGroup(i).getName()); -// } - gridView = (DynamicGridView) findViewById(R.id.dynamic_grid); - - gridView.setOnDragListener(new DynamicGridView.OnDragListener() { - @Override - public void onDragStarted(int position) { - Log.d(TAG, "drag started at position" + position); - } - - @Override - public void onDragPositionsChanged(int oldPosition, int newPosition) { - Log.d(TAG, String.format("drag item position changed from %d to %d", oldPosition, newPosition)); - } - - }); - - gridView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { - @Override - public boolean onItemLongClick(AdapterView parent, View view, int position, long id) { - gridView.startEditMode(position); - return true; - } - }); - - gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { -// Toast.makeText(GroupListActivity.this, parent.getAdapter().getItem(position).toString(), -// Toast.LENGTH_SHORT).show(); - Intent intent=new Intent(GroupListActivity.this, com.example.cosmosclient.views.RequestListActivity.class); - startActivity(intent); - } - }); - - /* とりあえずの画面遷移なので変更するかも */ -// TextView group1 = findViewById(R.id.group1); -// group1.setOnClickListener(new View.OnClickListener() { -// @Override -// public void onClick(View view) { -// gridView.stopEditMode(); -// Intent intent=new Intent(GroupListActivity.this, com.example.cosmosclient.views.RequestListActivity.class); -// startActivity(intent); -// } -// }); - - - DrawerLayout drawer = findViewById(R.id.drawer_layout); - NavigationView navigationView = findViewById(R.id.nav_view); - ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( - this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); - drawer.addDrawerListener(toggle); - toggle.syncState(); - navigationView.setNavigationItemSelectedListener(this); } @Override @@ -257,6 +347,7 @@ } else if (id == R.id.signOutButton){ gridView.stopEditMode(); Intent intent=new Intent(GroupListActivity.this, com.example.cosmosclient.views.SigninActivity.class); + ActivityCompat.finishAffinity(GroupListActivity.this); startActivity(intent); } /* diff --git a/app/src/main/java/com/example/cosmosclient/views/JoinGroupByIDActivity.java b/app/src/main/java/com/example/cosmosclient/views/JoinGroupByIDActivity.java index d6c8dda..baea2a8 100644 --- a/app/src/main/java/com/example/cosmosclient/views/JoinGroupByIDActivity.java +++ b/app/src/main/java/com/example/cosmosclient/views/JoinGroupByIDActivity.java @@ -40,7 +40,7 @@ test.setText(GroupID); //retrofitの処理 Retrofit retrofit = new Retrofit.Builder() - .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/cosmos/") + .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/cosmos/rest/") .addConverterFactory(JacksonConverterFactory.create()) .build(); //interfaceから実装を取得 diff --git a/app/src/main/java/com/example/cosmosclient/views/MemberListActivity.java b/app/src/main/java/com/example/cosmosclient/views/MemberListActivity.java index 242c8f4..0bcd81d 100644 --- a/app/src/main/java/com/example/cosmosclient/views/MemberListActivity.java +++ b/app/src/main/java/com/example/cosmosclient/views/MemberListActivity.java @@ -80,7 +80,7 @@ //retrofitの処理 final Retrofit retrofit = new Retrofit.Builder() - .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/cosmos/") + .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/cosmos/rest/") .addConverterFactory(JacksonConverterFactory.create()) .build(); //interfaceから実装を取得 diff --git a/app/src/main/java/com/example/cosmosclient/views/QRcodeReadingActivity.java b/app/src/main/java/com/example/cosmosclient/views/QRcodeReadingActivity.java index 957fee5..9166772 100644 --- a/app/src/main/java/com/example/cosmosclient/views/QRcodeReadingActivity.java +++ b/app/src/main/java/com/example/cosmosclient/views/QRcodeReadingActivity.java @@ -61,7 +61,7 @@ //retrofitの処理 final Retrofit retrofit = new Retrofit.Builder() - .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/cosmos/") + .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/cosmos/rest/") .addConverterFactory(JacksonConverterFactory.create()) .build(); //interfaceから実装を取得 diff --git a/app/src/main/java/com/example/cosmosclient/views/RequestListActivity.java b/app/src/main/java/com/example/cosmosclient/views/RequestListActivity.java index 3559520..27fc58b 100644 --- a/app/src/main/java/com/example/cosmosclient/views/RequestListActivity.java +++ b/app/src/main/java/com/example/cosmosclient/views/RequestListActivity.java @@ -5,6 +5,7 @@ import android.graphics.Color; import android.os.Build; import android.os.Bundle; +import android.os.Handler; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.view.Gravity; @@ -29,7 +30,7 @@ import com.example.cosmosclient.app.Cosmos; import com.example.cosmosclient.entities.AddRequestsResponse; import com.example.cosmosclient.entities.Request; -import com.example.cosmosclient.entities.Requests; +import com.example.cosmosclient.entities.RequestList; import com.example.cosmosclient.resources.GroupsRest; import com.example.cosmosclient.yolp.Yolp; @@ -56,8 +57,9 @@ //retrofitの処理 final Retrofit retrofit = new Retrofit.Builder() - .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/cosmos/") + .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/cosmos/rest/") // .baseUrl("http://10.0.2.2:8080/") +// .baseUrl("http://10.0.2.2:8080/rest/") .addConverterFactory(JacksonConverterFactory.create()) .build(); @@ -67,7 +69,7 @@ Toast toast; //動作テスト用 //Request List - Requests requests; + RequestList requestList; //Color制御 boolean productColorFlag = true; //買うもの (true:白, false:黒) @@ -88,7 +90,8 @@ TableLayout requesttable; // TableLayout accomplishedRequesttable = (TableLayout)findViewById(R.id.RequestList); - HashMap selectedRequestList = new HashMap<>(); + HashMap selectedRequestMap = new HashMap<>(); + Button deleteButton; Button accomplishButton; @@ -106,7 +109,7 @@ product.setColorFilter(null); productColorFlag = true; ResetRequestListTable(); - AddRequestListTable(requests); + AddRequestListTable(requestList); } else { if(deadlineRotationFlag) { deadlineRotationFlag = false; @@ -124,7 +127,6 @@ ResetRequestListTable(); AddRequestListTable(SortProduct()); } - isButtonShow(false); } }; @@ -141,7 +143,7 @@ deadline.setColorFilter(null); deadlineColorFlag = true; ResetRequestListTable(); - AddRequestListTable(requests); + AddRequestListTable(requestList); if(!deadlineRotationFlag) { deadline.setRotation(0); } @@ -166,7 +168,6 @@ AddRequestListTable(ReverseDeadline()); } } - isButtonShow(false); } }; @@ -183,7 +184,7 @@ location.setColorFilter(null); locationColorFlag = true; ResetRequestListTable(); - AddRequestListTable(requests); + AddRequestListTable(requestList); } else { if(deadlineRotationFlag) { deadlineRotationFlag = false; @@ -201,7 +202,6 @@ ResetRequestListTable(); AddRequestListTable(SortLocation()); } - isButtonShow(false); } }; @@ -218,7 +218,7 @@ name.setColorFilter(null); nameColorFlag = true; ResetRequestListTable(); - AddRequestListTable(requests); + AddRequestListTable(requestList); } else { if(deadlineRotationFlag) { deadlineRotationFlag = false; @@ -236,109 +236,52 @@ ResetRequestListTable(); AddRequestListTable(SortName()); } - isButtonShow(false); } }; //requestListRowOnClick -// public View.OnClickListener requestListRowOnClick = new View.OnClickListener() { -// @Override -// public void onClick(View view) { -// isButtonShow(true); - -// requesttable.removeView(view); -// for(View selectedRow : selectedRequestList.values()) { -// if(view.equals(selectedRow)) { -// selectedRequestList.remove(selectedRow); -// view.setBackgroundColor(Color.rgb(255, 255, 255)); -// Toast.makeText(RequestListActivity.this, view + " Reset Clicked!", Toast.LENGTH_SHORT).show(); -// } -// } -// selectedRequestList.put(requesttable.indexOfChild(view), view); -// view.setBackgroundColor(Color.rgb(200, 200, 200)); -// Toast.makeText(RequestListActivity.this, requesttable.indexOfChild(view) + "row Clicked!", Toast.LENGTH_SHORT).show(); -// } -// }; - - //requestListRowOnLongClick - public View.OnLongClickListener requestListRowOnLongClick = new View.OnLongClickListener() { + public View.OnLongClickListener requestListRowOnClick = new View.OnLongClickListener() { @Override public boolean onLongClick(View view) { - isButtonShow(true); + if(!deleteButton.isShown()) { + deleteButton.setVisibility(View.VISIBLE); + accomplishButton.setVisibility(View.VISIBLE); + + deleteButton.setClickable(true); + accomplishButton.setClickable(true); + + deleteButton.setOnClickListener(deleteOnClick); + accomplishButton.setOnClickListener(accomplishOnClick); + } // requesttable.removeView(view); - for(View selectedRow : selectedRequestList.values()) { + for(View selectedRow : selectedRequestMap.values()) { if(view.equals(selectedRow)) { - selectedRequestList.remove(selectedRow); + selectedRequestMap.remove(selectedRow); view.setBackgroundColor(Color.rgb(255, 255, 255)); Toast.makeText(RequestListActivity.this, view + " Reset Clicked!", Toast.LENGTH_SHORT).show(); return false; } } - selectedRequestList.put(requesttable.indexOfChild(view), view); + selectedRequestMap.put(requesttable.indexOfChild(view), view); view.setBackgroundColor(Color.rgb(200, 200, 200)); Toast.makeText(RequestListActivity.this, requesttable.indexOfChild(view) + "row Clicked!", Toast.LENGTH_SHORT).show(); return false; } }; - //deleteButtonOnClick + //nameOnClick public View.OnClickListener deleteOnClick = new View.OnClickListener() { @Override public void onClick(View view) { - - //RequestList取得するための必要な情報 -// Cosmos app = (Cosmos) getApplication(); -// final String gId = app.getCurentGroup().getgId(); -// final String uId = app.getuId(); -// final String token = app.getToken(); -// -// for(Integer i : selectedRequestList.keySet()) { -// Request request = requests.getRequest(i - 1); -// String deadline = null; -// if(request.getDeadline() != null) { -// deadline = String.format("%d-%02d-%02d %02d:%02d:%02d", request.getDeadline().getYear(), request.getDeadline().getMonth() + 1, request.getDeadline().getDate() + 1, 23, 59, 59); -// } -// final Call updateReqestCall = requestsService.updateRequest(gId, request.getrId(), uId, request.getProduct(), deadline, request.getLocation(), true, token); -// requests.removeRequest(i - 1); -// -// //サーバからのレスポンス -// updateReqestCall.enqueue(new Callback() { -// //成功時 -// @Override -// public void onResponse(Call call, Response response) { -// if (response.isSuccessful()) { -// AddRequestsResponse result = response.body(); -// Toast.makeText(RequestListActivity.this, "RequestListを達成しました", Toast.LENGTH_SHORT).show(); -// -// ResetRequestListTable(); -// AddRequestListTable(requests); -// } else { -// try { -// System.out.println(response.errorBody().string()); -// } catch (IOException e) { -// e.printStackTrace(); -// } -// -// //onFailureでキャッチできないエラーの処理 -// Toast.makeText(RequestListActivity.this, "通信エラー", Toast.LENGTH_SHORT).show(); -// } -// } -// -// //失敗時 -// @Override -// public void onFailure(Call call, Throwable t) { -// t.printStackTrace(); -// Toast.makeText(RequestListActivity.this, "RequestListの達成失敗しました", Toast.LENGTH_SHORT).show(); -// } -// }); -// } -// isButtonShow(false); } }; - //accomplishButtonOnClick - public View.OnClickListener accomplishOnClick = new View.OnClickListener() { + //nameOnClick + public final View.OnClickListener accomplishOnClick = new View.OnClickListener() { + Handler handler = new Handler(); +// List selectedRequestList = new ArrayList<>(); + @Override public void onClick(View view) { @@ -348,47 +291,52 @@ final String uId = app.getuId(); final String token = app.getToken(); - for(Integer i : selectedRequestList.keySet()) { - Request request = requests.getRequest(i - 1); - String deadline = null; - if(request.getDeadline() != null) { - deadline = String.format("%d-%02d-%02d %02d:%02d:%02d", request.getDeadline().getYear(), request.getDeadline().getMonth() + 1, request.getDeadline().getDate() + 1, 23, 59, 59); - } - final Call updateReqestCall = requestsService.updateRequest(gId, request.getrId(), uId, request.getProduct(), deadline, request.getLocation(), true, token); - requests.removeRequest(i - 1); - - //サーバからのレスポンス - updateReqestCall.enqueue(new Callback() { - //成功時 - @Override - public void onResponse(Call call, Response response) { - if (response.isSuccessful()) { - AddRequestsResponse result = response.body(); - Toast.makeText(RequestListActivity.this, "RequestListを達成しました", Toast.LENGTH_SHORT).show(); - - ResetRequestListTable(); - AddRequestListTable(requests); - } else { - try { - System.out.println(response.errorBody().string()); - } catch (IOException e) { - e.printStackTrace(); - } - - //onFailureでキャッチできないエラーの処理 - Toast.makeText(RequestListActivity.this, "通信エラー", Toast.LENGTH_SHORT).show(); + new Thread(new Runnable() { + public void run() { + for (Integer i : selectedRequestMap.keySet()) { + Request request = requestList.getRequest(i - 1); +// selectedRequestList.add(request); + String deadline = null; + if (request.getDeadline() != null) { + deadline = String.format("%d-%02d-%02d %02d:%02d:%02d", request.getDeadline().getYear(), request.getDeadline().getMonth() + 1, request.getDeadline().getDate() + 1, 23, 59, 59); } - } + final Call updateReqestCall = requestsService.updateRequest(gId, request.getrId(), uId, request.getProduct(), deadline, request.getLocation(), true, token); + Response response; + try { + response = updateReqestCall.execute(); + if (response.isSuccessful()) { + AddRequestsResponse result = response.body(); +// Toast.makeText(RequestListActivity.this, "RequestListを達成しました", Toast.LENGTH_SHORT).show(); +// requestList.removeRequests(selectedRequestList); + handler.post(new Runnable() { + @Override + public void run() { + ResetRequestListTable(); + AddRequestListTable(requestList); + } + }); + } else { + // onFailure + try { + System.out.println(response.errorBody().string()); + } catch (IOException e) { + e.printStackTrace(); + } - //失敗時 - @Override - public void onFailure(Call call, Throwable t) { - t.printStackTrace(); - Toast.makeText(RequestListActivity.this, "RequestListの達成失敗しました", Toast.LENGTH_SHORT).show(); + //onFailureでキャッチできないエラーの処理 +// Toast.makeText(RequestListActivity.this, "通信エラー", Toast.LENGTH_SHORT).show(); + } + } catch (IOException e) { + e.printStackTrace(); +// Toast.makeText(RequestListActivity.this, "RequestListの達成失敗しました", Toast.LENGTH_SHORT).show(); + + } + } - }); - } - isButtonShow(false); + } + }).start(); + deleteButton.setVisibility(View.INVISIBLE); + accomplishButton.setVisibility(View.INVISIBLE); } }; @@ -494,27 +442,28 @@ super.onStart(); //RequestList取得するための必要な情報 - Cosmos app = (Cosmos) getApplication(); + final Cosmos app = (Cosmos) getApplication(); final String gId = app.getCurentGroup().getgId(); final String token = app.getToken(); final boolean detail = true; int quantity = 20; - final Call requestsListByGidCall = requestsService.getRequestsListByGid(gId, token, detail, quantity); + final Call requestsListByGidCall = requestsService.getRequestsListByGid(gId, token, detail, quantity); //サーバからのレスポンス - requestsListByGidCall.enqueue(new Callback() { + requestsListByGidCall.enqueue(new Callback() { //成功時 @Override - public void onResponse(Call call, Response response) { + public void onResponse(Call call, Response response) { if (response.isSuccessful()) { TimeZone.setDefault(TimeZone.getTimeZone("Asia/Tokyo")); - requests = response.body(); + requestList = response.body(); + app.getCurentGroup().setRequestList(requestList); //Add RequestList Table - AddRequestListTable(requests); + AddRequestListTable(requestList); -// Toast.makeText(RequestListActivity.this, "RequestListを取得しました", Toast.LENGTH_SHORT).show(); + Toast.makeText(RequestListActivity.this, "RequestListを取得しました", Toast.LENGTH_SHORT).show(); } else { try { System.out.println("a" + response.errorBody().string()); @@ -528,7 +477,7 @@ //失敗時 @Override - public void onFailure(Call call, Throwable t) { + public void onFailure(Call call, Throwable t) { t.printStackTrace(); Toast.makeText(RequestListActivity.this, "RequestListの取得失敗しました", Toast.LENGTH_SHORT).show(); } @@ -542,10 +491,10 @@ ResetRequestListTable(); - requests.clearRequest(); + requestList.clearRequest(); // //Add RequestList Table -// AddRequestListTable(requests); +// AddRequestListTable(requestList); } @SuppressWarnings("StatementWithEmptyBody") @@ -576,21 +525,21 @@ return true; } - private int ConvertMonth(int i, Requests requests) { - return requests.getRequest(i).getDeadline().getMonth() + 1; + private int ConvertMonth(int i, RequestList requestList) { + return requestList.getRequest(i).getDeadline().getMonth() + 1; } @TargetApi(Build.VERSION_CODES.O) - private void AddRequestListTable(Requests requests) { + private void AddRequestListTable(RequestList requestList) { Date now = new Date(); // TableLayout requesttable = (TableLayout)findViewById(R.id.RequestList); requesttable.setShrinkAllColumns(true); - for (int i = 0; i < requests.getRequestCount(); i++) { + for (int i = 0; i < requestList.getRequestCount(); i++) { TableRow tableRow = new TableRow(this); TextView textProduct = new TextView(this); - textProduct.setText(requests.getRequest(i).getProduct()); + textProduct.setText(requestList.getRequest(i).getProduct()); textProduct.setTextSize(20); textProduct.setHeight(150); textProduct.setGravity(Gravity.CENTER); @@ -606,8 +555,8 @@ // if (requestList.get(i).getDeadline().getMonth() == now.getMonth() && requestList.get(i).getDeadline().getDate() - now.getDate() == 1) { // textDeadline.setText("明日まで"); // } - if(requests.getRequest(i).getDeadline() != null) { - textDeadline.setText(ConvertMonth(i, requests) + "/" + requests.getRequest(i).getDeadline().getDate()); + if(requestList.getRequest(i).getDeadline() != null) { + textDeadline.setText(ConvertMonth(i, requestList) + "/" + requestList.getRequest(i).getDeadline().getDate()); } // textDeadline.setText(now.getMonth() + "/" + now.getDate()); textDeadline.setTextSize(20); @@ -616,8 +565,8 @@ tableRow.addView(textDeadline, new TableRow.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT)); TextView textLocation = new TextView(this); - if(Yolp.getInstance().getSubCategoryByCode(requests.getRequest(i).getLocation()) != null) { - textLocation.setText(Yolp.getInstance().getSubCategoryByCode(requests.getRequest(i).getLocation()).getSubName()); + if(Yolp.getInstance().getSubCategoryByCode(requestList.getRequest(i).getLocation()) != null) { + textLocation.setText(Yolp.getInstance().getSubCategoryByCode(requestList.getRequest(i).getLocation()).getSubName()); } textLocation.setTextSize(20); @@ -626,13 +575,13 @@ tableRow.addView(textLocation, new TableRow.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT)); TextView textName = new TextView(this); - textName.setText(requests.getRequest(i).getIssuer().getName()); + textName.setText(requestList.getRequest(i).getIssuer().getName()); textName.setTextSize(20); textName.setHeight(150); textName.setGravity(Gravity.CENTER); tableRow.addView(textName, new TableRow.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT)); - tableRow.setOnLongClickListener(requestListRowOnLongClick); + tableRow.setOnLongClickListener(requestListRowOnClick); requesttable.addView(tableRow); } @@ -649,59 +598,38 @@ } } - private void isButtonShow(boolean flag) { - if(!flag && deleteButton.isShown()) { //編集ボタンが見えているとき - deleteButton.setVisibility(View.INVISIBLE); - accomplishButton.setVisibility(View.INVISIBLE); - - deleteButton.setClickable(false); - accomplishButton.setClickable(false); - - selectedRequestList.clear(); - } else if(flag && !deleteButton.isShown()){ - deleteButton.setVisibility(View.VISIBLE); - accomplishButton.setVisibility(View.VISIBLE); - - deleteButton.setClickable(true); - accomplishButton.setClickable(true); - - deleteButton.setOnClickListener(deleteOnClick); - accomplishButton.setOnClickListener(accomplishOnClick); - } - } - - private Requests SortProduct() { - List productsortRequestlist = (List) requests.getRequests(); + private RequestList SortProduct() { + List productsortRequestlist = (List) requestList.getRequests(); Collections.sort(productsortRequestlist, productSortComparator); - return new Requests(productsortRequestlist); + return new RequestList(productsortRequestlist); } - private Requests SortDeadline() { - List deadlinesortRequestlist = (List) requests.getRequests(); + private RequestList SortDeadline() { + List deadlinesortRequestlist = (List) requestList.getRequests(); Collections.sort(deadlinesortRequestlist, deadlineSortComparator); - return new Requests(deadlinesortRequestlist); + return new RequestList(deadlinesortRequestlist); } - private Requests ReverseDeadline() { - List deadlinesortRequestlist = (List) requests.getRequests(); + private RequestList ReverseDeadline() { + List deadlinesortRequestlist = (List) requestList.getRequests(); Collections.sort(deadlinesortRequestlist, deadlineReverseComparator); - return new Requests(deadlinesortRequestlist); + return new RequestList(deadlinesortRequestlist); } - private Requests SortLocation() { - List locationsortRequestlist = (List) requests.getRequests(); + private RequestList SortLocation() { + List locationsortRequestlist = (List) requestList.getRequests(); Collections.sort(locationsortRequestlist, locationSortComparator); - return new Requests(locationsortRequestlist); + return new RequestList(locationsortRequestlist); } - private Requests SortName() { - List namesortRequestlist = (List) requests.getRequests(); + private RequestList SortName() { + List namesortRequestlist = (List) requestList.getRequests(); Collections.sort(namesortRequestlist, nameSortComparator); - return new Requests(namesortRequestlist); + return new RequestList(namesortRequestlist); } } \ No newline at end of file diff --git a/app/src/main/java/com/example/cosmosclient/views/SigninActivity.java b/app/src/main/java/com/example/cosmosclient/views/SigninActivity.java index b5b78ae..f1cd4e9 100644 --- a/app/src/main/java/com/example/cosmosclient/views/SigninActivity.java +++ b/app/src/main/java/com/example/cosmosclient/views/SigninActivity.java @@ -1,21 +1,40 @@ package com.example.cosmosclient.views; +import android.app.Notification; +import android.app.NotificationChannel; +import android.app.NotificationManager; +import android.content.Context; +import android.Manifest; +import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; +import android.content.pm.PackageManager; +import android.os.Build; import android.os.Handler; +import android.os.HandlerThread; +import android.support.annotation.NonNull; +import android.support.annotation.RequiresApi; +import android.support.v4.app.ActivityCompat; +import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; +import android.view.Gravity; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; +import com.example.cosmosclient.MainActivity; import com.example.cosmosclient.R; import com.example.cosmosclient.app.Cosmos; +import com.example.cosmosclient.entities.AreaInformation; import com.example.cosmosclient.entities.SigninResponse; import com.example.cosmosclient.resources.UsersRest; +import com.example.cosmosclient.services.CosomosBackgroundService; + +import java.util.ArrayList; import retrofit2.Call; import retrofit2.Callback; @@ -27,11 +46,24 @@ private boolean uIdEnable; private boolean pwEnable; private Button SigninButton; + private Intent intentservice; + private static final int REQUEST_MULTI_PERMISSIONS = 101; + + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_signin); + Context context = getApplicationContext(); + + // Android 6, API 23以上でパーミッシンの確認 + if(Build.VERSION.SDK_INT >= 23){ + checkMultiPermissions(); + } + else{ + startService(); + } //各種IDを取得 SigninButton = findViewById(R.id.SigninButton); @@ -62,7 +94,7 @@ //retrofitの処理 final Retrofit retrofit = new Retrofit.Builder() - .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/cosmos/") + .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/cosmos/rest/") .addConverterFactory(JacksonConverterFactory.create()) .build(); //interfaceから実装を取得 @@ -148,6 +180,8 @@ } }); } + + private class GenericTextWatcher implements TextWatcher{ private View view; @@ -188,4 +222,95 @@ } } } + // 結果の受け取り + @Override + public void onRequestPermissionsResult(int requestCode, + @NonNull String[] permissions, @NonNull int[] grantResults) { + + if (requestCode == REQUEST_MULTI_PERMISSIONS) { + if (grantResults.length > 0) { + for (int i = 0; i < permissions.length; i++) { + // 位置情報 + if (permissions[i]. + equals(Manifest.permission.ACCESS_FINE_LOCATION)) { + if (grantResults[i] == PackageManager.PERMISSION_GRANTED) { + // 許可された + + } else { + // それでも拒否された時の対応 + toastMake("位置情報の許可がないので計測できません"); + } + } + // 外部ストレージ + else if (permissions[i]. + equals(Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + if (grantResults[i] == PackageManager.PERMISSION_GRANTED) { + // 許可された + } else { + // それでも拒否された時の対応 + toastMake("外部書込の許可がないので書き込みできません"); + } + } + } + + startService(); + + } + } + else{ + // + } + } + // 位置情報許可の確認、外部ストレージのPermissionにも対応できるようにしておく + private void checkMultiPermissions(){ + // 位置情報の Permission + int permissionLocation = ContextCompat.checkSelfPermission(this, + Manifest.permission.ACCESS_FINE_LOCATION); + // 外部ストレージ書き込みの Permission + int permissionExtStorage = ContextCompat.checkSelfPermission(this, + Manifest.permission.WRITE_EXTERNAL_STORAGE); + + ArrayList reqPermissions = new ArrayList<>(); + + // 位置情報の Permission が許可されているか確認 + if (permissionLocation == PackageManager.PERMISSION_GRANTED) { + // 許可済 + } + else{ + // 未許可 + reqPermissions.add(Manifest.permission.ACCESS_FINE_LOCATION); + } + + + // 未許可 + if (!reqPermissions.isEmpty()) { + ActivityCompat.requestPermissions(this, + (String[]) reqPermissions.toArray(new String[0]), + REQUEST_MULTI_PERMISSIONS); + // 未許可あり + } + else{ + // 許可済 + startService(); + } + } + //serviceをスタートさせる + private void startService() { + Thread thread = new Thread() { + @RequiresApi(api = Build.VERSION_CODES.O) + public void run() { + intentservice = new Intent(SigninActivity.this, CosomosBackgroundService.class); + startForegroundService(intentservice); + + } + }; + thread.start(); + } + // トーストの生成 + private void toastMake(String message){ + Toast toast = Toast.makeText(this, message, Toast.LENGTH_LONG); + // 位置調整 + toast.setGravity(Gravity.CENTER, 0, 200); + toast.show(); + } } diff --git a/app/src/main/java/com/example/cosmosclient/views/SignupActivity.java b/app/src/main/java/com/example/cosmosclient/views/SignupActivity.java index f6f3965..32a05c0 100644 --- a/app/src/main/java/com/example/cosmosclient/views/SignupActivity.java +++ b/app/src/main/java/com/example/cosmosclient/views/SignupActivity.java @@ -50,7 +50,7 @@ //retrofitの処理 final Retrofit retrofit = new Retrofit.Builder() - .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/cosmos/") + .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/cosmos/rest/") .addConverterFactory(JacksonConverterFactory.create()) .build(); //interfaceから実装を取得 diff --git a/app/src/main/res/layout/activity_forgot_password.xml b/app/src/main/res/layout/activity_forgot_password.xml index e5b5ac9..006209f 100644 --- a/app/src/main/res/layout/activity_forgot_password.xml +++ b/app/src/main/res/layout/activity_forgot_password.xml @@ -7,6 +7,7 @@ android:background="#FFFFFF" tools:context=".views.ForgotPasswordActivity"> + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/nav_header_group_list.xml b/app/src/main/res/layout/nav_header_group_list.xml index 649c531..81a5cda 100644 --- a/app/src/main/res/layout/nav_header_group_list.xml +++ b/app/src/main/res/layout/nav_header_group_list.xml @@ -14,9 +14,9 @@ android:theme="@style/ThemeOverlay.AppCompat.Dark">