diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index f104c9e..cdef6d4 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,4 +1,7 @@ apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' + +apply plugin: 'kotlin-android-extensions' android { compileSdkVersion 28 @@ -16,6 +19,25 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } + sourceSets { + // Main source set is Kotlin! + main.java.srcDirs += 'src/main/kotlin' + + // Unit tests live in src/unitTest. + test.java.srcDir 'src/unitTests/kotlin' + + // Integration tests live in src/integrationTest. + test.java.srcDir 'src/integrationTests/kotlin' + + // Unit tests for debug build type specific code live in src/debugUnitTest. + testDebug.java.srcDir 'src/debugUnitTests/kotlin' + + // Unit tests for release build type specific code live in src/releaseUnitTest. + testRelease.java.srcDir 'src/releaseUnitTests/kotlin' + + // Functional tests live in src/functionalTests. + androidTest.java.srcDir 'src/functionalTests/kotlin' + } } dependencies { @@ -25,6 +47,7 @@ dependencies { implementation 'com.squareup.retrofit2:retrofit:2.0.2' implementation 'com.squareup.retrofit2:converter-gson:2.0.0-beta4' implementation 'com.squareup.okhttp3:logging-interceptor:3.10.0' + implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 27103ba..554a2a5 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,20 +2,23 @@ + + - + android:theme="@style/AppTheme"> + + + + \ No newline at end of file diff --git a/app/src/main/java/com/dsm2018/get_terra_android_v2/Connector/API.java b/app/src/main/java/com/dsm2018/get_terra_android_v2/Connector/API.java index 638ff7f..517c354 100644 --- a/app/src/main/java/com/dsm2018/get_terra_android_v2/Connector/API.java +++ b/app/src/main/java/com/dsm2018/get_terra_android_v2/Connector/API.java @@ -1,5 +1,29 @@ package com.dsm2018.get_terra_android_v2.Connector; +import android.content.Intent; + +import com.google.gson.JsonObject; + +import retrofit2.Call; +import retrofit2.http.Body; +import retrofit2.http.GET; +import retrofit2.http.Header; +import retrofit2.http.POST; +import retrofit2.http.Path; + public interface API { + @GET("/auth/{gameKey}") + Call key_certified(@Header("gameKey") Integer jsonObject); + + @POST("/auth/{gameKey}") + Call login( + @Path("gameKey") String gameKey, + @Body JsonObject jsonObject); + + @GET("/team") + Call teamList(@Header("Authorization") String jsonObject); + + @POST("/team") + Call team_choice(@Body JsonObject jsonObject); -} +} \ No newline at end of file diff --git a/app/src/main/java/com/dsm2018/get_terra_android_v2/Connector/Connector.java b/app/src/main/java/com/dsm2018/get_terra_android_v2/Connector/Connector.java index 4cb6139..a422059 100644 --- a/app/src/main/java/com/dsm2018/get_terra_android_v2/Connector/Connector.java +++ b/app/src/main/java/com/dsm2018/get_terra_android_v2/Connector/Connector.java @@ -2,5 +2,4 @@ public class Connector { - } diff --git a/app/src/main/java/com/dsm2018/get_terra_android_v2/Connector/ServiceGenerator.java b/app/src/main/java/com/dsm2018/get_terra_android_v2/Connector/ServiceGenerator.java index 14fbee0..3e9f973 100644 --- a/app/src/main/java/com/dsm2018/get_terra_android_v2/Connector/ServiceGenerator.java +++ b/app/src/main/java/com/dsm2018/get_terra_android_v2/Connector/ServiceGenerator.java @@ -1,22 +1,25 @@ package com.dsm2018.get_terra_android_v2.Connector; import okhttp3.OkHttpClient; +import okhttp3.logging.HttpLoggingInterceptor; import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory; public class ServiceGenerator { - private static final String URL = "http://localhost:5000/"; - private static OkHttpClient.Builder httpClient = new OkHttpClient.Builder(); - private static Retrofit.Builder builder = - new Retrofit.Builder() - .baseUrl(URL) - .addConverterFactory(GsonConverterFactory.create()) - .client(httpClient.build()); - private static Retrofit retrofit = builder.build(); + private static final String URL = "http://ec2.istruly.sexy:1234/"; - public static S createService(Class serviceClass) { - return retrofit.create(serviceClass); + private static Retrofit retrofit = null; + public static Retrofit getClient() { + HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); + interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); + OkHttpClient client = new OkHttpClient.Builder().addInterceptor(interceptor).build(); + retrofit = new Retrofit.Builder() + .baseUrl(URL) + .addConverterFactory(GsonConverterFactory.create()) + .client(client) + .build(); + return retrofit; } } diff --git a/app/src/main/java/com/dsm2018/get_terra_android_v2/LoginActivity.java b/app/src/main/java/com/dsm2018/get_terra_android_v2/LoginActivity.java index 6ee440a..b50fc9a 100644 --- a/app/src/main/java/com/dsm2018/get_terra_android_v2/LoginActivity.java +++ b/app/src/main/java/com/dsm2018/get_terra_android_v2/LoginActivity.java @@ -1,4 +1,93 @@ package com.dsm2018.get_terra_android_v2; -public class LoginActivity { -} +import android.content.Intent; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.Toast; + +import com.dsm2018.get_terra_android_v2.Connector.API; +import com.dsm2018.get_terra_android_v2.Connector.ServiceGenerator; +import com.dsm2018.get_terra_android_v2.sibal.PrefManager; +import com.google.gson.JsonObject; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + + +public class LoginActivity extends AppCompatActivity { + Button login; + EditText key_certificate; + EditText email; + EditText ID; + EditText password; + String getID; + String getPassword; + String getKeyCertificate; + String getEmail; + String getAccessToken; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_login); + + key_certificate = (EditText) findViewById(R.id.key_certificate_et); + login = (Button) findViewById(R.id.login_btn); + ID = (EditText) findViewById(R.id.id_et); + password = (EditText) findViewById(R.id.password_et); + email = (EditText) findViewById(R.id.email_et); + login.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + getID = ID.getText().toString(); + getPassword = password.getText().toString(); + getKeyCertificate = key_certificate.getText().toString(); + getEmail = email.getText().toString(); + getID = getID.trim(); + getPassword = getPassword.trim(); + getKeyCertificate = getKeyCertificate.trim(); + getEmail = getEmail.trim(); + if (getID.getBytes().length <= 0 | getPassword.getBytes().length <= 0 | getKeyCertificate.getBytes().length <= 0 | getEmail.getBytes().length <= 0) { + Toast.makeText(getApplicationContext(), "입력이 완료되지 않았습니다", Toast.LENGTH_SHORT).show(); + } else { + post(); + } + } + }); + } + + public void post() { + API retrofit = ServiceGenerator.getClient().create(API.class); + JsonObject jsonObject = new JsonObject(); + jsonObject.addProperty("id", getID); + jsonObject.addProperty("password", getPassword); + jsonObject.addProperty("email", getEmail); + Call call = retrofit.login(getKeyCertificate, jsonObject); + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + JsonObject repo = response.body(); + getAccessToken=repo.get("accessToken").getAsString(); + if (response.code() == 200) { + Intent intent = new Intent(LoginActivity.this, TeamChoiceActivity.class); + intent.putExtra("accessToken", getAccessToken); + startActivity(intent); + } else if (response.code() == 204) { + Toast.makeText(getApplicationContext(), "인증번호가 맞지 않습니다.", Toast.LENGTH_SHORT).show(); + } + PrefManager prefManager = new PrefManager(); + prefManager.saveToken(getApplicationContext(), getAccessToken, true); + } + + @Override + public void onFailure(Call call, Throwable t) { + + } + }); + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/dsm2018/get_terra_android_v2/TeamChoiceActivity.java b/app/src/main/java/com/dsm2018/get_terra_android_v2/TeamChoiceActivity.java new file mode 100644 index 0000000..8205793 --- /dev/null +++ b/app/src/main/java/com/dsm2018/get_terra_android_v2/TeamChoiceActivity.java @@ -0,0 +1,62 @@ +package com.dsm2018.get_terra_android_v2; + +import android.content.Intent; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.view.View; +import android.widget.Button; + +public class TeamChoiceActivity extends AppCompatActivity { + Button teamblue, teamgreen, teamyellow, teamviolet; + String getToken; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_teamchoice); + + getToken = getIntent().getStringExtra("accessToken"); + teamblue = (Button)findViewById(R.id.teamblue_btn); + teamblue.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent1 = new Intent(TeamChoiceActivity.this,TeamMemberActivity.class); + intent1.putExtra("teamNum","1"); + intent1.putExtra("accessToken",getToken); + startActivity(intent1); + } + }); + teamgreen = (Button)findViewById(R.id.teamgreen_btn); + teamgreen.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent2 = new Intent(TeamChoiceActivity.this,TeamMemberActivity.class); + intent2.putExtra("teamNum","2"); + intent2.putExtra("accessToken",getToken); + startActivity(intent2); + } + }); + teamyellow = (Button)findViewById(R.id.teamyellow_btn); + teamyellow.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent3 = new Intent(TeamChoiceActivity.this,TeamMemberActivity.class); + intent3.putExtra("teamNum","3"); + intent3.putExtra("accessToken",getToken); + startActivity(intent3); + } + }); + teamviolet = (Button)findViewById(R.id.teamviolet_btn); + teamviolet.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent4 = new Intent(TeamChoiceActivity.this,TeamMemberActivity.class); + intent4.putExtra("teamNum","4"); + intent4.putExtra("accessToken",getToken); + startActivity(intent4); + } + }); + + } + +} diff --git a/app/src/main/java/com/dsm2018/get_terra_android_v2/TeamMemberActivity.java b/app/src/main/java/com/dsm2018/get_terra_android_v2/TeamMemberActivity.java new file mode 100644 index 0000000..5b93e29 --- /dev/null +++ b/app/src/main/java/com/dsm2018/get_terra_android_v2/TeamMemberActivity.java @@ -0,0 +1,114 @@ +package com.dsm2018.get_terra_android_v2; + +import android.annotation.SuppressLint; +import android.content.Intent; +import android.content.SharedPreferences; +import android.graphics.Color; +import android.graphics.PorterDuff; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.TextView; +import android.widget.Toast; + +import com.dsm2018.get_terra_android_v2.Connector.API; +import com.dsm2018.get_terra_android_v2.Connector.ServiceGenerator; +import com.dsm2018.get_terra_android_v2.sibal.PrefManager; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; + +import java.util.function.Consumer; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +public class TeamMemberActivity extends AppCompatActivity { + + Button selected_btn; + ImageView colorView; + ImageView back_color; + TextView teamColor; + TextView listTv; + String getAuthorization; + String getToken; + + @SuppressLint("ResourceAsColor") + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_teammember); + + colorView = findViewById(R.id.color_view); + back_color = findViewById(R.id.back_top); + selected_btn = findViewById(R.id.select_btn); + teamColor = findViewById(R.id.team_tv); + listTv = findViewById(R.id.list_tv); + + getToken = getIntent().getStringExtra("accessToken"); + Log.d("token",getToken); + getAuthorization = getIntent().getStringExtra("teamNum"); + + API retrofit = ServiceGenerator.getClient().create(API.class); + Call call = retrofit.teamList(new PrefManager().getToken(getBaseContext(), "pref", true )); + call.enqueue(new Callback() { + @SuppressLint("ResourceAsColor") + @Override + public void onResponse(Call call, Response response) { + JsonObject repo = response.body(); + if (response.code() == 200) { + Log.d("성공", "성공"); + if(!repo.get(getAuthorization).getAsJsonObject().get("member").isJsonNull()) { + for (JsonElement member : repo.get(getAuthorization).getAsJsonObject().get("member").getAsJsonArray()) { + listTv.append(member.getAsString() + "\n"); + } + } + if (getAuthorization.equals("1")) { + Log.d("블루", "블루팀"); + teamColor.setText(R.string.blueTeam); + colorView.setImageResource(R.drawable.blue_square); + back_color.setImageResource(R.drawable.back_teammembershow_blue); + selected_btn.setTextColor(R.color.blue); + } else if (getAuthorization.equals("2")) { + Log.d("2", "2"); + teamColor.setText(R.string.greenTeam); + colorView.setImageResource(R.drawable.green_square); + back_color.setImageResource(R.drawable.back_teammembershow_green); + selected_btn.setTextColor(R.color.green); + } else if (getAuthorization.equals("3")) { + Log.d("3", "3"); + teamColor.setText(R.string.yellowTeam); + colorView.setImageResource(R.drawable.yellow_square); + back_color.setImageResource(R.drawable.back_teammembershow_yellow); + selected_btn.setTextColor(R.color.yellow); + } else if (getAuthorization.equals("4")) { + Log.d("44", "4"); + teamColor.setText(R.string.violetTeam); + colorView.setImageResource(R.drawable.violet_square); + back_color.setImageResource(R.drawable.back_teammembershow_violet); + selected_btn.setTextColor(R.color.violet); + } + + selected_btn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(TeamMemberActivity.this,MainActivity.class); + startActivity(intent); + } + }); + } + } + + @Override + public void onFailure(Call call, Throwable t) { + Log.d("실패함", "실패"); + } + }); + } + + + +} diff --git a/app/src/main/java/com/dsm2018/get_terra_android_v2/sibal/PrefManager.kt b/app/src/main/java/com/dsm2018/get_terra_android_v2/sibal/PrefManager.kt new file mode 100644 index 0000000..942601d --- /dev/null +++ b/app/src/main/java/com/dsm2018/get_terra_android_v2/sibal/PrefManager.kt @@ -0,0 +1,30 @@ +package com.dsm2018.get_terra_android_v2.sibal + +import android.content.Context +import android.content.SharedPreferences + +class PrefManager { + private fun getPref(context: Context): SharedPreferences { + return context.getSharedPreferences("pref", Context.MODE_PRIVATE) + } + + fun saveToken(context: Context, token: String, isAccess: Boolean = true) { + getPref(context).edit().let { + it.putString(getKey(isAccess), token) + it.apply() + } + } + + fun removeToken(context: Context, isAccess: Boolean = true) { + getPref(context).edit().let { + it.remove(getKey(isAccess)) + it.apply() + } + } + + fun getToken(context: Context, getTokken: String, isAccess: Boolean = true): String { + return "Bearer " + getPref(context).getString(getKey(isAccess), "") + } + + private fun getKey(isAccess: Boolean): String = if (isAccess) "Access" else "Refresh" +} \ No newline at end of file diff --git a/app/src/main/res/drawable/back_btn_login.xml b/app/src/main/res/drawable/back_btn_login.xml new file mode 100644 index 0000000..e15801b --- /dev/null +++ b/app/src/main/res/drawable/back_btn_login.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/back_btn_signup.xml b/app/src/main/res/drawable/back_btn_signup.xml new file mode 100644 index 0000000..8824afe --- /dev/null +++ b/app/src/main/res/drawable/back_btn_signup.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/back_ellipse_default.xml b/app/src/main/res/drawable/back_ellipse_default.xml new file mode 100644 index 0000000..b7526b7 --- /dev/null +++ b/app/src/main/res/drawable/back_ellipse_default.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/back_teammembershow_blue.xml b/app/src/main/res/drawable/back_teammembershow_blue.xml new file mode 100644 index 0000000..e7edb4c --- /dev/null +++ b/app/src/main/res/drawable/back_teammembershow_blue.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/back_teammembershow_green.xml b/app/src/main/res/drawable/back_teammembershow_green.xml new file mode 100644 index 0000000..5b9dcfc --- /dev/null +++ b/app/src/main/res/drawable/back_teammembershow_green.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/back_teammembershow_violet.xml b/app/src/main/res/drawable/back_teammembershow_violet.xml new file mode 100644 index 0000000..f47c676 --- /dev/null +++ b/app/src/main/res/drawable/back_teammembershow_violet.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/back_teammembershow_yellow.xml b/app/src/main/res/drawable/back_teammembershow_yellow.xml new file mode 100644 index 0000000..b90666d --- /dev/null +++ b/app/src/main/res/drawable/back_teammembershow_yellow.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/blue_square.xml b/app/src/main/res/drawable/blue_square.xml new file mode 100644 index 0000000..44b3eb0 --- /dev/null +++ b/app/src/main/res/drawable/blue_square.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/getterra_logo.png b/app/src/main/res/drawable/getterra_logo.png new file mode 100644 index 0000000..5184894 Binary files /dev/null and b/app/src/main/res/drawable/getterra_logo.png differ diff --git a/app/src/main/res/drawable/green_square.xml b/app/src/main/res/drawable/green_square.xml new file mode 100644 index 0000000..2920ade --- /dev/null +++ b/app/src/main/res/drawable/green_square.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/violet_square.xml b/app/src/main/res/drawable/violet_square.xml new file mode 100644 index 0000000..85c12bf --- /dev/null +++ b/app/src/main/res/drawable/violet_square.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/yellow_square.xml b/app/src/main/res/drawable/yellow_square.xml new file mode 100644 index 0000000..8c05816 --- /dev/null +++ b/app/src/main/res/drawable/yellow_square.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index d8fb324..3286867 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -1,6 +1,99 @@ + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="#fff5f5"> + + + + + + + + + + + + + +