diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b5ad990..9919eb8 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,21 +2,24 @@ - + - + + @@ -68,13 +71,18 @@ android:label="メンバー追加" /> + - - + + + + \ 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 7eee198..ede712b 100644 --- a/app/src/main/java/com/example/cosmosclient/app/Cosmos.java +++ b/app/src/main/java/com/example/cosmosclient/app/Cosmos.java @@ -8,9 +8,12 @@ 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<>(); @@ -18,22 +21,38 @@ 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; } 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/GroupListResponse.java b/app/src/main/java/com/example/cosmosclient/entities/GroupListResponse.java new file mode 100644 index 0000000..9af528b --- /dev/null +++ b/app/src/main/java/com/example/cosmosclient/entities/GroupListResponse.java @@ -0,0 +1,48 @@ +package com.example.cosmosclient.entities; + +import com.example.cosmosclient.entities.jsons.GroupJson; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +import java.util.List; +//@JsonIgnoreProperties(ignoreUnknown = true) + +public class GroupListResponse { + private List groups; + + public GroupListResponse() { + + } + + public GroupListResponse(List groups) { + this.groups = groups; + } + + public List getGroups() { + return groups; + } + + public void setGroups(List groups) { + this.groups = groups; + } + + public void addGroup(GroupJson g) { + groups.add(g); + } + + public GroupJson getGroup(int index) { + return groups.get(index); + } + + public void clearGroup() { + groups.clear(); + } + + public void removeGroup(int index) { + groups.remove(index); + } + + public int getGroupCount() { + return groups.size(); + } + +} 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..5175c2f --- /dev/null +++ b/app/src/main/java/com/example/cosmosclient/entities/RequestList.java @@ -0,0 +1,52 @@ +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 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/entities/jsons/GroupJson.java b/app/src/main/java/com/example/cosmosclient/entities/jsons/GroupJson.java new file mode 100644 index 0000000..9264728 --- /dev/null +++ b/app/src/main/java/com/example/cosmosclient/entities/jsons/GroupJson.java @@ -0,0 +1,35 @@ +package com.example.cosmosclient.entities.jsons; + +public class GroupJson { + private String name; + private String gId; + private String uri; + + public String getgId() { + return gId; + } + + public void setgId(String gId) { + this.gId = gId; + } + + public String getUri() { + return uri; + } + + public void setUri(String uri){ + this.uri = uri; + } + + public void setName(String name){ + this.name = name; + } + + public String getName(){ + return name; + } + + public String toString() { + return name; + } +} 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 adfd574..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,15 +1,10 @@ package com.example.cosmosclient.resources; -import com.example.cosmosclient.entities.AddRequestsResponse; +import com.example.cosmosclient.entities.GroupListResponse; import com.example.cosmosclient.entities.CreateGroupResponse; -import com.example.cosmosclient.entities.Group; +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; @@ -22,6 +17,9 @@ public interface GroupsRest { + @GET("groups") + Call getGroups(@Query("uId") String uId, @Query("token") String token); + @POST("groups") @FormUrlEncoded Call createGroup(@Field("name") String name, @Field("uId") String uId, @Field("token") String token); @@ -31,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/UsersRest.java b/app/src/main/java/com/example/cosmosclient/resources/UsersRest.java index 608b4f8..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,10 +2,12 @@ import com.example.cosmosclient.entities.SigninResponse; import com.example.cosmosclient.entities.SignupResponse; +import com.example.cosmosclient.entities.UserResponse; import retrofit2.Call; import retrofit2.http.Field; import retrofit2.http.FormUrlEncoded; +import retrofit2.http.GET; import retrofit2.http.POST; import retrofit2.http.Path; import retrofit2.http.Query; @@ -15,6 +17,9 @@ @FormUrlEncoded Call login(@Path("uId") String uId,@Field("pw") String pw); + @GET("users/{uId}") + Call getName(@Path("uId") String uId, @Query("token") String token); + @POST("users") @FormUrlEncoded Call createUser(@Field("name") String name, @Field("pw") String pw, @Field("iconImage") String icon_image); 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..4ce93a6 --- /dev/null +++ b/app/src/main/java/com/example/cosmosclient/services/CosomosBackgroundService.java @@ -0,0 +1,178 @@ +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.os.Build; +import android.os.Bundle; +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; + + 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"); + +// Thread thread = new Thread() { +// public void run() { +// int count = 10; +// +// try { +// for(int i=0 ; i< count ; i++) { +// Thread.sleep(1000); +// +// Log.d("debug", "sleep: " + String.valueOf(i)); +// } +// +// } catch (InterruptedException e) { +// Thread.currentThread().interrupt(); +// } +// } +// }; +// thread.start(); + 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 super.onStartCommand(intent,flags,startId); + } + + @Override + protected void onHandleIntent(Intent intent) { + + Log.d("debug", "onHandleIntent"); + int count = 10; + + try { + for(int i=0 ; i< count ; i++) { + Thread.sleep(1000); + + Log.d("debug", "sleep: " + String.valueOf(i)); + } + + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + } +// protected void startGPS() { +// StringBuilder strBuf = new StringBuilder(); +// strBuf.append("startGPS\n"); +// +// 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; +// } +// +// locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, +// MinTime, MinDistance, this); +// } catch (Exception e) { +// e.printStackTrace(); +// } +// } else { +// strBuf.append("locationManager=null\n"); +// } +// } + @Override + public void onDestroy() { + Log.d("debug", "onDestroy"); + + super.onDestroy(); + } + + @Override + public void onLocationChanged(Location location) { + + } + + @Override + public void onStatusChanged(String provider, int status, Bundle extras) { + + } + + @Override + public void onProviderEnabled(String provider) { + + } + + @Override + public void onProviderDisabled(String provider) { + + } +} diff --git a/app/src/main/java/com/example/cosmosclient/views/AddMemberActivity.java b/app/src/main/java/com/example/cosmosclient/views/AddMemberActivity.java index 0446342..857101d 100644 --- a/app/src/main/java/com/example/cosmosclient/views/AddMemberActivity.java +++ b/app/src/main/java/com/example/cosmosclient/views/AddMemberActivity.java @@ -1,5 +1,6 @@ package com.example.cosmosclient.views; +import android.content.ActivityNotFoundException; import android.content.Intent; import android.graphics.BitmapFactory; import android.net.Uri; @@ -39,7 +40,6 @@ setContentView(R.layout.activity_add_member); /*ここからグループ名表示*/ TextView groupName = findViewById(R.id.groupName); - //現在のグループ情報を格納しているものからgIdを取得 Cosmos app = (Cosmos) getApplication(); Group curentGroup = app.getCurentGroup(); groupName.setText(curentGroup.getName()); @@ -64,7 +64,8 @@ @Override public void onItemClick(AdapterView parent, View v, int position, long id) { - + Cosmos app = (Cosmos) getApplication(); + Group curentGroup = app.getCurentGroup(); Intent intent = null; // clickされたpositionのtextとphotoのID @@ -75,47 +76,24 @@ intent = new Intent(this.getApplicationContext(), DisplayGroupIDActivity.class); }else{ // intent = new Intent(this.getApplicationContext(), DisplayQRActivity.class); - intent = new Intent(Intent.ACTION_VIEW, Uri.parse("line://msg/text/?GroupID")); + String URL="line://msg/text/あなたは"+curentGroup.getName()+"に招待されています。%0D%0A今すぐアプリを立ち上げて、下記のIDを入力して今すぐ参加しよう!%0D%0A"+curentGroup.getgId(); + intent = new Intent(Intent.ACTION_VIEW, Uri.parse(URL)); + } // Intent intent = new Intent(this.getApplicationContext(), DisplayQRActivity.class); // SubActivityへ遷移 + try { startActivity(intent); + } + //Lineがダウンロードされいない場合に入る + catch (ActivityNotFoundException e) { + // ブラウザアプリが有効でない場合はここに入る + // 必要ならエラー表示とかする + intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=jp.naver.line.android&hl=ja")); + startActivity(intent); + + } } -// @Override -// protected void onCreate(Bundle savedInstanceState) { -// super.onCreate(savedInstanceState); -// setContentView(R.layout.activity_add_member); -// //各種idを取得 -// Button qrButton = findViewById(R.id.addQR); -// Button idButton = findViewById(R.id.addID); -// Button mailButton = findViewById(R.id.addMail); -// TextView groupText=findViewById(R.id.groupName); -// -// //QRからメンバー追加の画面遷移処理画面を記述 -// qrButton.setOnClickListener(new View.OnClickListener() { -// @Override -// public void onClick(View v) { -// Intent intent = new Intent(getApplication(), DisplayQRActivity.class); -// startActivity(intent); -// } -// }); -// //IDからメンバー追加の画面遷移処理画面を記述 -// idButton.setOnClickListener(new View.OnClickListener() { -// @Override -// public void onClick(View v) { -// Intent intent = new Intent(getApplication(), DisplayQRActivity.class); -// startActivity(intent); -// } -// }); -// //Mailからメンバー追加の画面遷移処理画面を記述 -// mailButton.setOnClickListener(new View.OnClickListener() { -// @Override -// public void onClick(View v) { -// Intent intent = new Intent(getApplication(), DisplayQRActivity.class); -// startActivity(intent); -// } -// }); -// -// } + } 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/CheeseDynamicAdapter.java b/app/src/main/java/com/example/cosmosclient/views/CheeseDynamicAdapter.java index b2e17db..f6131ad 100644 --- a/app/src/main/java/com/example/cosmosclient/views/CheeseDynamicAdapter.java +++ b/app/src/main/java/com/example/cosmosclient/views/CheeseDynamicAdapter.java @@ -7,6 +7,7 @@ import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ImageView; +import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; @@ -69,12 +70,13 @@ itemList = (ListView) view.findViewById(R.id.listview); //image = (ImageView) view.findViewById(R.id.item_img); + /* ArrayList items = new ArrayList<>(); items.add("からし"); items.add("わさび"); items.add("砂糖"); - - ArrayAdapter adapter = new ArrayAdapter(getContext(), R.layout.item_list, items); + */ + //ArrayAdapter adapter = new ArrayAdapter(getContext(), R.layout.item_list, items); //itemList.setAdapter(adapter); } diff --git a/app/src/main/java/com/example/cosmosclient/views/Cheeses.java b/app/src/main/java/com/example/cosmosclient/views/Cheeses.java index a1386ac..d02cdc2 100644 --- a/app/src/main/java/com/example/cosmosclient/views/Cheeses.java +++ b/app/src/main/java/com/example/cosmosclient/views/Cheeses.java @@ -1,13 +1,16 @@ package com.example.cosmosclient.views; +import com.example.cosmosclient.resources.GroupsRest; +import retrofit2.Call; + public class Cheeses { public static final String[] sCheeseStrings = { - "ファミリー\n 紙コップ\n 延長ケーブル", - "会社\n からし", - "Group3\n ケーキ\n ほげほげ", - "Group4\n ほげほげ\n ほげほげ", - "Group5\n ほげほげ\n ほげほげ\n ほげほげ\n ほげほげ", - "Group6\n ほげほげ\n ほげほげ\n ほげほげ", + "ファミリー", + "会社", + "Group3", + "Group4", + "Group5", + "Group6", "Group7" }; } 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/GroupListActivity.java b/app/src/main/java/com/example/cosmosclient/views/GroupListActivity.java index 22b50ec..08b6688 100644 --- a/app/src/main/java/com/example/cosmosclient/views/GroupListActivity.java +++ b/app/src/main/java/com/example/cosmosclient/views/GroupListActivity.java @@ -1,8 +1,13 @@ package com.example.cosmosclient.views; import android.content.Intent; +import android.graphics.Bitmap; +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; import android.support.v4.view.GravityCompat; @@ -16,15 +21,32 @@ import android.view.Menu; import android.widget.AdapterView; 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; +import com.example.cosmosclient.app.Cosmos; +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; +import retrofit2.Callback; +import retrofit2.Response; +import retrofit2.Retrofit; +import retrofit2.converter.jackson.JacksonConverterFactory; import com.example.cosmosclient.R; +import java.io.ByteArrayOutputStream; import java.util.ArrayList; import java.util.Arrays; @@ -33,6 +55,7 @@ private static final String TAG = GroupListActivity.class.getName(); private DynamicGridView gridView; + private GroupListResponse result; @Override @@ -41,13 +64,97 @@ setContentView(R.layout.activity_group_list); Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar); + final String uId,token; + final Cosmos app = (Cosmos) getApplication(); + uId = app.getuId(); + token = app.getToken(); - String[] list = {"ファミリー\n 紙コップ\n 延長ケーブル", "Group2\n からし", "Group3\n ケーキ\n something"}; + + + //retrofitの処理 + final Retrofit retrofit = new Retrofit.Builder() + .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.setAdapter((ListAdapter) new CheeseDynamicAdapter(this, - new ArrayList(Arrays.asList(Cheeses.sCheeseStrings)), - getResources().getInteger(R.integer.column_count))); gridView.setOnDragListener(new DynamicGridView.OnDragListener() { @Override @@ -70,26 +177,30 @@ } }); + // グループの中にはいる(リクエスト一覧画面へ) 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); - } - }); +// 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); @@ -102,6 +213,90 @@ } @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から実装を取得 + final GroupsRest getGroupsService = retrofit.create(GroupsRest.class); + + //API呼び出しのための値入力 + final Call call = getGroupsService.getGroups(uId,token); + + //サーバからデータ受け取り + call.enqueue(new Callback() { + //成功時 + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + GroupListResponse result2 = response.body(); + result = result2; +// Iterator it = result.member.iterator(); +// int i = 0; + +// for (int i = 0; i < result.getGroupCount(); i++) { +// groupList.add(result.getGroup(i).getName()); +// } + + // グループ名一覧の表示 + gridView.setAdapter((ListAdapter) new CheeseDynamicAdapter(GroupListActivity.this, + result.getGroups(), + getResources().getInteger(R.integer.column_count))); + + //画像を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(); + } + }); + } + + @Override public void onBackPressed() { DrawerLayout drawer = findViewById(R.id.drawer_layout); if (drawer.isDrawerOpen(GravityCompat.START)) { @@ -152,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); } /* @@ -172,5 +368,7 @@ DrawerLayout drawer = findViewById(R.id.drawer_layout); drawer.closeDrawer(GravityCompat.START); return true; + + } } 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/ListViewAdapter.java b/app/src/main/java/com/example/cosmosclient/views/ListViewAdapter.java index 99f0054..64113fa 100644 --- a/app/src/main/java/com/example/cosmosclient/views/ListViewAdapter.java +++ b/app/src/main/java/com/example/cosmosclient/views/ListViewAdapter.java @@ -42,7 +42,7 @@ convertView = inflater.inflate(itemLayoutId, parent, false); // ViewHolder を生成 holder = new ViewHolder(); - holder.textView = convertView.findViewById(R.id.textView); + holder.textView = convertView.findViewById(R.id.userID); holder.imageView = convertView.findViewById(R.id.imageView); convertView.setTag(holder); } 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 ad97c66..0bcd81d 100644 --- a/app/src/main/java/com/example/cosmosclient/views/MemberListActivity.java +++ b/app/src/main/java/com/example/cosmosclient/views/MemberListActivity.java @@ -5,6 +5,7 @@ import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; +import android.os.Handler; import android.support.design.widget.FloatingActionButton; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; @@ -48,10 +49,18 @@ TextView groupName = findViewById(R.id.groupName); //メンバー追加ボタン処理 - FloatingActionButton fab = findViewById(R.id.addrequest_button); + final FloatingActionButton fab = findViewById(R.id.addrequest_button); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { + //ボタン連打防止 + fab.setEnabled(false); + new Handler().postDelayed(new Runnable() { + public void run() { + fab.setEnabled(true); + } + }, 1000L); + startActivity(new Intent(MemberListActivity.this, AddMemberActivity.class)); finish(); @@ -71,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/MemberListAdapter.java b/app/src/main/java/com/example/cosmosclient/views/MemberListAdapter.java index c532a6c..42e1f48 100644 --- a/app/src/main/java/com/example/cosmosclient/views/MemberListAdapter.java +++ b/app/src/main/java/com/example/cosmosclient/views/MemberListAdapter.java @@ -66,7 +66,7 @@ convertView = inflater.inflate(itemLayoutId, parent, false); // ViewHolder を生成 holder = new MemberListAdapter.ViewHolder(); - holder.textView = convertView.findViewById(R.id.textView); + holder.textView = convertView.findViewById(R.id.userID); holder.imageView = convertView.findViewById(R.id.imageView); convertView.setTag(holder); } 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 ed8ce4c..34394ac 100644 --- a/app/src/main/java/com/example/cosmosclient/views/RequestListActivity.java +++ b/app/src/main/java/com/example/cosmosclient/views/RequestListActivity.java @@ -29,7 +29,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,7 +56,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(); @@ -67,7 +67,7 @@ Toast toast; //動作テスト用 //Request List - Requests requests; + RequestList requestList; //Color制御 boolean productColorFlag = true; //買うもの (true:白, false:黒) @@ -106,7 +106,7 @@ product.setColorFilter(null); productColorFlag = true; ResetRequestListTable(); - AddRequestListTable(requests); + AddRequestListTable(requestList); } else { if(deadlineRotationFlag) { deadlineRotationFlag = false; @@ -140,7 +140,7 @@ deadline.setColorFilter(null); deadlineColorFlag = true; ResetRequestListTable(); - AddRequestListTable(requests); + AddRequestListTable(requestList); if(!deadlineRotationFlag) { deadline.setRotation(0); } @@ -181,7 +181,7 @@ location.setColorFilter(null); locationColorFlag = true; ResetRequestListTable(); - AddRequestListTable(requests); + AddRequestListTable(requestList); } else { if(deadlineRotationFlag) { deadlineRotationFlag = false; @@ -215,7 +215,7 @@ name.setColorFilter(null); nameColorFlag = true; ResetRequestListTable(); - AddRequestListTable(requests); + AddRequestListTable(requestList); } else { if(deadlineRotationFlag) { deadlineRotationFlag = false; @@ -286,13 +286,13 @@ final String token = app.getToken(); for(Integer i : selectedRequestList.keySet()) { - Request request = requests.getRequest(i - 1); + Request request = requestList.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); + requestList.removeRequest(i - 1); //サーバからのレスポンス updateReqestCall.enqueue(new Callback() { @@ -304,7 +304,7 @@ Toast.makeText(RequestListActivity.this, "RequestListを達成しました", Toast.LENGTH_SHORT).show(); ResetRequestListTable(); - AddRequestListTable(requests); + AddRequestListTable(requestList); } else { try { System.out.println(response.errorBody().string()); @@ -431,36 +431,27 @@ protected void onStart() { super.onStart(); - //retrofitの処理 -// final Retrofit retrofit = new Retrofit.Builder() -//// .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/cosmos/") -// .baseUrl("http://10.0.2.2:8080/") -// .addConverterFactory(JacksonConverterFactory.create()) -// .build(); - -// //interfaceから実装を取得 -// final GroupsRest requestsService = retrofit.create(GroupsRest.class); - //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(); } else { @@ -476,7 +467,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(); } @@ -490,10 +481,10 @@ ResetRequestListTable(); - requests.clearRequest(); + requestList.clearRequest(); // //Add RequestList Table -// AddRequestListTable(requests); +// AddRequestListTable(requestList); } @SuppressWarnings("StatementWithEmptyBody") @@ -524,21 +515,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); @@ -554,8 +545,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); @@ -564,8 +555,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); @@ -574,7 +565,7 @@ 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); @@ -597,38 +588,38 @@ } } - 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 371839f..59da57b 100644 --- a/app/src/main/java/com/example/cosmosclient/views/SigninActivity.java +++ b/app/src/main/java/com/example/cosmosclient/views/SigninActivity.java @@ -6,7 +6,10 @@ import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; +import android.os.Build; import android.os.Handler; +import android.os.HandlerThread; +import android.support.annotation.RequiresApi; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.text.Editable; @@ -16,11 +19,13 @@ 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 retrofit2.Call; import retrofit2.Callback; @@ -32,12 +37,40 @@ private boolean uIdEnable; private boolean pwEnable; private Button SigninButton; + private Intent intentservice; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_signin); +// // 別スレ生成 -> 開始 +// HandlerThread handlerThread = new HandlerThread("other"); +// handlerThread.start(); +// +// //作成したHandlerThread(別スレ)内部のLooperを引数として、HandlerThread(のLooper)にメッセージを送るHandlerを生成する。 +// Handler handler = new Handler(handlerThread.getLooper()); +// //Handlerのpostメソッドでメッセージ(タスク:重たい処理)を送信する。 +// handler.post(new Runnable() { +// @RequiresApi(api = Build.VERSION_CODES.O) +// @Override +// public void run() { +// //重たい処理を記述 +// intentservice = new Intent(SigninActivity.this, CosomosBackgroundService.class); +// startForegroundService(intentservice); +// } +// }); + + Thread thread = new Thread() { + @RequiresApi(api = Build.VERSION_CODES.O) + public void run() { + intentservice = new Intent(SigninActivity.this, CosomosBackgroundService.class); + startForegroundService(intentservice); + + } + }; + thread.start(); //各種IDを取得 SigninButton = findViewById(R.id.SigninButton); Button SignupButton = findViewById(R.id.SignupButton); @@ -67,7 +100,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から実装を取得 @@ -94,60 +127,25 @@ @Override public void onResponse(Call call, Response response) { if (response.isSuccessful()) { - SigninResponse result = response.body(); + if(response.body() == null){ + //パスワードが違う際、アプリが落ちてしまうため + Toast.makeText(SigninActivity.this, + "パスワードが違います",Toast.LENGTH_LONG).show(); + }else{ + SigninResponse result = response.body(); - //app/Cosmosに情報保存 - Cosmos app = (Cosmos)getApplication(); - app.setToken(result.token); - app.setuId(UserIdText.getText().toString()); + //app/Cosmosに情報保存 + Cosmos app = (Cosmos) getApplication(); + app.setToken(result.token); + app.setuId(UserIdText.getText().toString()); -// AreaInformation area = new AreaInformation(); -// area.location.longitude = 23.222; -// area.location.latitude = 23.333; -// app.setAreaInfo(area.location.hashCode(),area); -// AreaInformation aaa = app.getAreaInfo(123456); - - //画面遷移 - Intent intent = new Intent(getApplication(), GroupListActivity.class); - startActivity(intent); - Toast.makeText(SigninActivity.this, - "ログインしました", Toast.LENGTH_SHORT).show(); - -// //通知オブジェクトの用意と初期化 -// Notification notification = null; -// -// //システムから通知マネージャー取得 -// NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE); -// //アプリ名をチャンネルIDとして利用 -// String chID = getString(R.string.app_name); -// -// //アンドロイドのバージョンで振り分け -// if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { //APIが「26」以上の場合 -// -// //通知チャンネルIDを生成してインスタンス化 -// NotificationChannel notificationChannel = new NotificationChannel(chID, chID, NotificationManager.IMPORTANCE_DEFAULT); -// //通知の説明のセット -// notificationChannel.setDescription(chID); -// //通知チャンネルの作成 -// notificationManager.createNotificationChannel(notificationChannel); -// //通知の生成と設定とビルド -// notification = new Notification.Builder(SigninActivity.this, chID) -// .setContentTitle(getString(R.string.app_name)) //通知タイトル -// .setContentText("通知確認") //通知内容 -// .setSmallIcon(R.drawable.default_icon_image) //通知用アイコン -// .build(); //通知のビルド -// } else { -// //APIが「25」以下の場合 -// //通知の生成と設定とビルド -//// notification = new Notification.Builder(SigninActivity.this) -//// .setContentTitle(getString(R.string.app_name)) -//// .setContentText("アプリ通知テスト25まで") -//// .setSmallIcon(R.drawable.default_icon_image) -//// .build(); -// } -// //通知の発行 -// notificationManager.notify(1, notification); - finish(); + //画面遷移 + Intent intent = new Intent(getApplication(), GroupListActivity.class); + startActivity(intent); + Toast.makeText(SigninActivity.this, + "ログインしました", Toast.LENGTH_SHORT).show(); + finish(); + } }else{ //onFailureでキャッチできないエラーの処理 @@ -159,7 +157,7 @@ //失敗時 @Override public void onFailure(Call call, Throwable t) { - //t.printStackTrace(); + t.printStackTrace(); Toast.makeText(SigninActivity.this, "ユーザIDもしくはパスワードが間違っています",Toast.LENGTH_SHORT).show(); } @@ -188,6 +186,8 @@ } }); } + + private class GenericTextWatcher implements TextWatcher{ private View view; 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 5770dcc..32a05c0 100644 --- a/app/src/main/java/com/example/cosmosclient/views/SignupActivity.java +++ b/app/src/main/java/com/example/cosmosclient/views/SignupActivity.java @@ -41,6 +41,7 @@ private Button MakeAccountButton; private ImageView iconChoice; private String iconImageBase64; + private int quality = 70; @Override protected void onCreate(Bundle savedInstanceState) { @@ -49,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から実装を取得 @@ -185,18 +186,21 @@ //画像をBase64に変換 ByteArrayOutputStream baos = new ByteArrayOutputStream(); Bitmap afterResizeBitmap = Bitmap.createScaledBitmap(image,50,50,true); - afterResizeBitmap.compress(Bitmap.CompressFormat.JPEG,70, baos); + afterResizeBitmap.compress(Bitmap.CompressFormat.JPEG,quality, baos); byte[] b = baos.toByteArray(); String imageEncoded = Base64.encodeToString(b, Base64.DEFAULT); - if(imageEncoded.length() <= 2000){ - iconChoice.setImageBitmap(image); - iconImageBase64 = imageEncoded; - }else{ - Toast.makeText(SignupActivity.this, - "この画像は使用できません。\n別の画像を選択してください。",Toast.LENGTH_LONG).show(); + while (imageEncoded.length() >2000){ + //文字数の2000文字以下になるまで圧縮率を上げて再度変換 + baos = new ByteArrayOutputStream(); + quality -=5; + afterResizeBitmap.compress(Bitmap.CompressFormat.JPEG,quality, baos); + b = baos.toByteArray(); + imageEncoded = Base64.encodeToString(b, Base64.DEFAULT); } + iconChoice.setImageBitmap(image); + iconImageBase64 = imageEncoded; }catch(IOException e){ e.printStackTrace(); } diff --git a/app/src/main/res/layout/activity_signup.xml b/app/src/main/res/layout/activity_signup.xml index c0b617e..ea37005 100644 --- a/app/src/main/res/layout/activity_signup.xml +++ b/app/src/main/res/layout/activity_signup.xml @@ -44,7 +44,7 @@ android:layout_height="1dp" android:layout_marginStart="8dp" android:layout_marginLeft="50dp" - android:layout_marginTop="32dp" + android:layout_marginTop="24dp" android:layout_marginEnd="8dp" android:layout_marginRight="50dp" android:background="@android:color/darker_gray" @@ -59,7 +59,7 @@ android:layout_height="28dp" android:layout_marginStart="8dp" android:layout_marginLeft="8dp" - android:layout_marginTop="18dp" + android:layout_marginTop="8dp" android:layout_marginEnd="8dp" android:layout_marginRight="8dp" android:background="#FFFFFF" @@ -77,15 +77,15 @@ android:layout_height="66dp" android:layout_marginStart="8dp" android:layout_marginLeft="8dp" - android:layout_marginTop="16dp" + android:layout_marginTop="8dp" android:layout_marginEnd="8dp" android:layout_marginRight="8dp" - android:textAllCaps="false" android:text="@string/make_account" + android:textAllCaps="false" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.445" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/ConfirmPasswordText" /> + app:layout_constraintTop_toBottomOf="@+id/choiceImage" /> + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_grid.xml b/app/src/main/res/layout/item_grid.xml index 829341c..4fc0f67 100644 --- a/app/src/main/res/layout/item_grid.xml +++ b/app/src/main/res/layout/item_grid.xml @@ -2,6 +2,7 @@ \ No newline at end of file diff --git a/app/src/main/res/layout/item_list.xml b/app/src/main/res/layout/item_list.xml index 21d5116..5037c41 100644 --- a/app/src/main/res/layout/item_list.xml +++ b/app/src/main/res/layout/item_list.xml @@ -2,11 +2,10 @@ - \ No newline at end of file diff --git a/app/src/main/res/layout/list.xml b/app/src/main/res/layout/list.xml index f7142e2..5bb4578 100644 --- a/app/src/main/res/layout/list.xml +++ b/app/src/main/res/layout/list.xml @@ -15,7 +15,7 @@ android:contentDescription="picture"/>