diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b0b93df..b5ad990 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -5,17 +5,18 @@ + diff --git a/app/src/main/java/com/example/cosmosclient/entities/MemberListResponse.java b/app/src/main/java/com/example/cosmosclient/entities/MemberListResponse.java new file mode 100644 index 0000000..6606c3b --- /dev/null +++ b/app/src/main/java/com/example/cosmosclient/entities/MemberListResponse.java @@ -0,0 +1,10 @@ +package com.example.cosmosclient.entities; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Set; + +public class MemberListResponse { + public ArrayList member = new ArrayList<>(); + +} diff --git a/app/src/main/java/com/example/cosmosclient/entities/SigninResponse.java b/app/src/main/java/com/example/cosmosclient/entities/SigninResponse.java index 8600404..53700f8 100644 --- a/app/src/main/java/com/example/cosmosclient/entities/SigninResponse.java +++ b/app/src/main/java/com/example/cosmosclient/entities/SigninResponse.java @@ -2,5 +2,5 @@ public class SigninResponse { public String token; - public String uId; +// public String uId; } 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 70b976e..adfd574 100644 --- a/app/src/main/java/com/example/cosmosclient/resources/GroupsRest.java +++ b/app/src/main/java/com/example/cosmosclient/resources/GroupsRest.java @@ -3,6 +3,7 @@ import com.example.cosmosclient.entities.AddRequestsResponse; import com.example.cosmosclient.entities.CreateGroupResponse; import com.example.cosmosclient.entities.Group; +import com.example.cosmosclient.entities.MemberListResponse; import com.example.cosmosclient.entities.Request; import com.example.cosmosclient.entities.Requests; import com.example.cosmosclient.entities.User; @@ -39,4 +40,7 @@ // @GET("{gId}/requests/{rId}") // 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 205b4a2..608b4f8 100644 --- a/app/src/main/java/com/example/cosmosclient/resources/UsersRest.java +++ b/app/src/main/java/com/example/cosmosclient/resources/UsersRest.java @@ -17,5 +17,5 @@ @POST("users") @FormUrlEncoded - Call createUser(@Field("name") String name, @Field("pw") String pw, @Field("icon-image") String icon_image); + 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/views/ListViewAdapter.java b/app/src/main/java/com/example/cosmosclient/views/ListViewAdapter.java index 31b2691..99f0054 100644 --- a/app/src/main/java/com/example/cosmosclient/views/ListViewAdapter.java +++ b/app/src/main/java/com/example/cosmosclient/views/ListViewAdapter.java @@ -10,6 +10,8 @@ import com.example.cosmosclient.R; +import java.util.ArrayList; + public class ListViewAdapter extends BaseAdapter { static class ViewHolder { TextView textView; @@ -73,3 +75,5 @@ return 0; } } + + diff --git a/app/src/main/java/com/example/cosmosclient/views/MemberListActivity.java b/app/src/main/java/com/example/cosmosclient/views/MemberListActivity.java new file mode 100644 index 0000000..d2ab01a --- /dev/null +++ b/app/src/main/java/com/example/cosmosclient/views/MemberListActivity.java @@ -0,0 +1,141 @@ +package com.example.cosmosclient.views; + +import android.content.Intent; +import android.content.SharedPreferences; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.net.Uri; +import android.support.design.widget.FloatingActionButton; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.util.Base64; +import android.view.View; +import android.widget.AdapterView; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.ListView; +import android.widget.Toast; + +import com.example.cosmosclient.R; +import com.example.cosmosclient.app.Cosmos; +import com.example.cosmosclient.entities.Group; +import com.example.cosmosclient.entities.MemberListResponse; +import com.example.cosmosclient.entities.User; +import com.example.cosmosclient.resources.GroupsRest; + +import java.io.ByteArrayOutputStream; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.Set; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; +import retrofit2.Retrofit; +import retrofit2.converter.jackson.JacksonConverterFactory; + +public class MemberListActivity extends AppCompatActivity { + private int count; + private ArrayList userName = new ArrayList<>(); + private ArrayList userIcon = new ArrayList<>(); + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_member_list); + + //メンバー追加ボタン処理 + FloatingActionButton fab = findViewById(R.id.addrequest_button); + fab.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + startActivity(new Intent(MemberListActivity.this, + AddMemberActivity.class)); + finish(); + } + }); + + //app/CosmosにGETメソッドに必要なデータを取得 + Cosmos app = (Cosmos) getApplication(); + final String token = app.getToken(); + final String gId = app.getCurentGroup().getgId(); + + // ListViewのインスタンスを生成 + final ListView listView = findViewById(R.id.list_view); + + //retrofitの処理 + final Retrofit retrofit = new Retrofit.Builder() + .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/cosmos/") + .addConverterFactory(JacksonConverterFactory.create()) + .build(); + //interfaceから実装を取得 + final GroupsRest MemberListService = retrofit.create(GroupsRest.class); + + //API呼び出しのための値入力 + final Call call = MemberListService.getMemberListByGid(gId,token); + + //サーバからデータ受け取り + call.enqueue(new Callback() { + //成功時 + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + MemberListResponse result = response.body(); + +// Iterator it = result.member.iterator(); +// int i = 0; + + //画像を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); + + +// while(it.hasNext()){ +// userName.add(it.next().name); +// if(it.next().iconUri != null) { +// userIcon.add(it.next().iconUri); +// }else{ +// userIcon.add(String.valueOf(icon)); +// } +// i++; +// } + + //アイコンが未設定ならデフォルト画像を設定 + for(int i = 0; i call, Throwable t) { + t.printStackTrace(); + Toast.makeText(MemberListActivity.this, + "メンバー情報取得失敗", Toast.LENGTH_SHORT).show(); + } + }); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/cosmosclient/views/MemberListAdapter.java b/app/src/main/java/com/example/cosmosclient/views/MemberListAdapter.java new file mode 100644 index 0000000..c532a6c --- /dev/null +++ b/app/src/main/java/com/example/cosmosclient/views/MemberListAdapter.java @@ -0,0 +1,102 @@ +package com.example.cosmosclient.views; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.util.Base64; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +import com.example.cosmosclient.R; + +import java.util.ArrayList; + +public class MemberListAdapter extends BaseAdapter { + static class ViewHolder { + TextView textView; + ImageView imageView; + } + private LayoutInflater inflater; + private int itemLayoutId; + + private ArrayList memberName = new ArrayList<>(); + private ArrayList memberIcon = new ArrayList<>(); + + MemberListAdapter(Context context, int itemLayoutId, + ArrayList scenes, ArrayList photos) { + super(); + ArrayList b = new ArrayList<>(); + Bitmap bitmap; + this.inflater = (LayoutInflater) + context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + this.itemLayoutId = itemLayoutId; + + for(int i = 0; i scenes) { +// //アイコン無し動作用 +// super(); +// this.inflater = (LayoutInflater) +// context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); +// this.itemLayoutId = itemLayoutId; +// this.memberName = scenes; +// } + + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + MemberListAdapter.ViewHolder holder; + // 最初だけ View を inflate して、それを再利用する + if (convertView == null) { + // activity_main.xml に list.xml を inflate して convertView とする + convertView = inflater.inflate(itemLayoutId, parent, false); + // ViewHolder を生成 + holder = new MemberListAdapter.ViewHolder(); + holder.textView = convertView.findViewById(R.id.textView); + holder.imageView = convertView.findViewById(R.id.imageView); + convertView.setTag(holder); + } + // holder を使って再利用 + else { + holder = (MemberListAdapter.ViewHolder) convertView.getTag(); + } + + // holder の imageView にセット + holder.imageView.setImageBitmap(memberIcon.get(position)); + // 現在の position にあるファイル名リストを holder の textView にセット + holder.textView.setText(memberName.get(position)); + + return convertView; + } + + @Override + public int getCount() { + // texts 配列の要素数 + return memberName.size(); + } + + @Override + public Object getItem(int position) { + return null; + } + + @Override + public long getItemId(int position) { + return 0; + } + +} 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 dbfd08e..2a70436 100644 --- a/app/src/main/java/com/example/cosmosclient/views/SigninActivity.java +++ b/app/src/main/java/com/example/cosmosclient/views/SigninActivity.java @@ -94,7 +94,7 @@ //app/Cosmosに情報保存 Cosmos app = (Cosmos)getApplication(); app.setToken(result.token); - app.setuId(result.uId); + app.setuId(UserIdText.getText().toString()); //画面遷移 Intent intent = new Intent(getApplication(), GroupListActivity.class); 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 8e5f0b5..5770dcc 100644 --- a/app/src/main/java/com/example/cosmosclient/views/SignupActivity.java +++ b/app/src/main/java/com/example/cosmosclient/views/SignupActivity.java @@ -3,8 +3,10 @@ import android.content.Intent; import android.content.SharedPreferences; +import android.graphics.Bitmap; import android.net.Uri; import android.os.Handler; +import android.provider.MediaStore; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.text.Editable; @@ -23,6 +25,9 @@ import com.theartofdev.edmodo.cropper.CropImage; import com.theartofdev.edmodo.cropper.CropImageView; +import java.io.ByteArrayOutputStream; +import java.io.IOException; + import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; @@ -35,6 +40,7 @@ private boolean cpwEnable; private Button MakeAccountButton; private ImageView iconChoice; + private String iconImageBase64; @Override protected void onCreate(Bundle savedInstanceState) { @@ -91,7 +97,7 @@ //API呼び出しのための値入力 Call call = signupService.createUser(NameText.getText().toString(), - PasswordText.getText().toString(), "https://yumenavi.info/live/2018/photo/k/s015980019.jpg"); + PasswordText.getText().toString(), iconImageBase64); //サーバからデータ受け取り call.enqueue(new Callback() { @@ -169,10 +175,36 @@ CropImage.ActivityResult result = CropImage.getActivityResult(data); if (resultCode == RESULT_OK) { Uri resultUri = result.getUri(); - iconChoice.setImageURI(resultUri); + //画面にトリミングした画像をセット + //iconChoice.setImageURI(resultUri); + + try { + //UriからBitmapの取得 + Bitmap image = MediaStore.Images.Media.getBitmap(getContentResolver(),resultUri); + + //画像をBase64に変換 + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + Bitmap afterResizeBitmap = Bitmap.createScaledBitmap(image,50,50,true); + afterResizeBitmap.compress(Bitmap.CompressFormat.JPEG,70, 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(); + } + }catch(IOException e){ + e.printStackTrace(); + } } else if (resultCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE) { Exception error = result.getError(); + error.printStackTrace(); } + } } diff --git a/app/src/main/res/drawable/default_icon_image.png b/app/src/main/res/drawable/default_icon_image.png new file mode 100644 index 0000000..95c82e7 --- /dev/null +++ b/app/src/main/res/drawable/default_icon_image.png Binary files differ diff --git a/app/src/main/res/layout/activity_member_list.xml b/app/src/main/res/layout/activity_member_list.xml new file mode 100644 index 0000000..591d3be --- /dev/null +++ b/app/src/main/res/layout/activity_member_list.xml @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +