AddGroupActivity.java 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363
  1. package kr.co.icontrols.iotplatform;
  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import android.graphics.drawable.BitmapDrawable;
  5. import android.os.Bundle;
  6. import android.text.Editable;
  7. import android.text.TextWatcher;
  8. import android.view.View;
  9. import android.widget.EditText;
  10. import android.widget.ImageView;
  11. import android.widget.LinearLayout;
  12. import android.widget.TextView;
  13. import androidx.annotation.Nullable;
  14. import androidx.appcompat.app.AppCompatActivity;
  15. import org.json.JSONException;
  16. import org.json.JSONObject;
  17. import java.io.IOException;
  18. import java.util.ArrayList;
  19. import kr.co.icontrols.iotplatform.DataClass.DeviceGroupInfo;
  20. import kr.co.icontrols.iotplatform.DataClass.UserInfo;
  21. import kr.co.icontrols.iotplatform.utils.HttpApi;
  22. import okhttp3.Call;
  23. import okhttp3.Callback;
  24. import okhttp3.Response;
  25. import static kr.co.icontrols.iotplatform.PopupActivity.POPUP_BUNDLE;
  26. import static kr.co.icontrols.iotplatform.PopupActivity.POPUP_IMG_INDEX;
  27. import static kr.co.icontrols.iotplatform.utils.CommonUtils.DismissConnectDialog;
  28. import static kr.co.icontrols.iotplatform.utils.CommonUtils.ErrorLogOutput;
  29. import static kr.co.icontrols.iotplatform.utils.CommonUtils.ForceDismissConnectDialog;
  30. import static kr.co.icontrols.iotplatform.utils.CommonUtils.WarnLogOutput;
  31. import static kr.co.icontrols.iotplatform.utils.CommonUtils.displayProgress;
  32. import static kr.co.icontrols.iotplatform.utils.CommonUtils.getCircleBitmap;
  33. import static kr.co.icontrols.iotplatform.utils.CommonUtils.getGroupImageResource;
  34. import static kr.co.icontrols.iotplatform.utils.CommonUtils.showNotiMsg;
  35. import static kr.co.icontrols.iotplatform.utils.Constants.EXTRA_BEFORE_ACTIVITY;
  36. import static kr.co.icontrols.iotplatform.utils.Constants.EXTRA_GROUP_LIST;
  37. import static kr.co.icontrols.iotplatform.utils.Constants.GROUP_01;
  38. import static kr.co.icontrols.iotplatform.utils.Constants.GROUP_BACKGROUND_00_STRING;
  39. import static kr.co.icontrols.iotplatform.utils.Constants.GROUP_BACKGROUND_01_STRING;
  40. import static kr.co.icontrols.iotplatform.utils.Constants.GROUP_BACKGROUND_02_STRING;
  41. import static kr.co.icontrols.iotplatform.utils.Constants.GROUP_BACKGROUND_03_STRING;
  42. import static kr.co.icontrols.iotplatform.utils.Constants.GROUP_BACKGROUND_04_STRING;
  43. import static kr.co.icontrols.iotplatform.utils.Constants.GROUP_BACKGROUND_05_STRING;
  44. import static kr.co.icontrols.iotplatform.utils.Constants.GROUP_BACKGROUND_06_STRING;
  45. import static kr.co.icontrols.iotplatform.utils.Constants.GROUP_BACKGROUND_07_STRING;
  46. import static kr.co.icontrols.iotplatform.utils.Constants.GROUP_BACKGROUND_08_STRING;
  47. import static kr.co.icontrols.iotplatform.utils.Constants.GROUP_BACKGROUND_09_STRING;
  48. import static kr.co.icontrols.iotplatform.utils.Constants.GROUP_IMG_00_STRING;
  49. import static kr.co.icontrols.iotplatform.utils.Constants.GROUP_IMG_01_STRING;
  50. import static kr.co.icontrols.iotplatform.utils.Constants.GROUP_IMG_02_STRING;
  51. import static kr.co.icontrols.iotplatform.utils.Constants.GROUP_IMG_03_STRING;
  52. import static kr.co.icontrols.iotplatform.utils.Constants.GROUP_IMG_04_STRING;
  53. import static kr.co.icontrols.iotplatform.utils.Constants.GROUP_IMG_05_STRING;
  54. import static kr.co.icontrols.iotplatform.utils.Constants.GROUP_IMG_06_STRING;
  55. import static kr.co.icontrols.iotplatform.utils.Constants.GROUP_IMG_07_STRING;
  56. import static kr.co.icontrols.iotplatform.utils.Constants.GROUP_IMG_08_STRING;
  57. import static kr.co.icontrols.iotplatform.utils.Constants.GROUP_IMG_09_STRING;
  58. import static kr.co.icontrols.iotplatform.utils.Constants.GROUP_LIST_COUNT_LINE;
  59. import static kr.co.icontrols.iotplatform.utils.Constants.RESULT_CHANGE_GROUP_IMG;
  60. import static kr.co.icontrols.iotplatform.utils.Constants.RESULT_INPUT_GROUP_NAME;
  61. public class AddGroupActivity extends AppCompatActivity implements View.OnClickListener,
  62. TextWatcher {
  63. private final String TAG = "AddGroupActivity";
  64. private LinearLayout mLayoutGroups;
  65. private EditText mTxtGroupName;
  66. private ArrayList<DeviceGroupInfo> mGroupList;
  67. private int mSelectedImgIndex = GROUP_01;
  68. private String mBeforeActivity;
  69. @Override
  70. protected void onCreate(Bundle savedInstanceState) {
  71. super.onCreate(savedInstanceState);
  72. setContentView(R.layout.activity_add_group);
  73. mLayoutGroups = findViewById(R.id.layoutGroups);
  74. mTxtGroupName = findViewById(R.id.txtGroupName);
  75. mTxtGroupName.addTextChangedListener(this);
  76. mGroupList = (ArrayList<DeviceGroupInfo>) getIntent().getSerializableExtra(EXTRA_GROUP_LIST);
  77. mBeforeActivity = getIntent().getStringExtra(EXTRA_BEFORE_ACTIVITY);
  78. shwoGroupList();
  79. changeGroupImage(mSelectedImgIndex);
  80. }
  81. @Override
  82. protected void onResume() {
  83. super.onResume();
  84. }
  85. @Override
  86. protected void onPause() {
  87. ForceDismissConnectDialog();
  88. super.onPause();
  89. }
  90. @Override
  91. protected void onDestroy() {
  92. if(mGroupList!=null) {
  93. mGroupList.clear();
  94. }
  95. super.onDestroy();
  96. }
  97. @Override
  98. protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
  99. super.onActivityResult(requestCode, resultCode, data);
  100. switch (requestCode) {
  101. /*
  102. case RESULT_INPUT_GROUP_NAME:
  103. if (resultCode == Activity.RESULT_OK) {
  104. Bundle b = data.getBundleExtra(POPUP_BUNDLE);
  105. if(b != null) {
  106. ((TextView)findViewById(R.id.txtGroupName)).setText(b.getString(PopupActivity.POPUP_INPUT));
  107. }
  108. }
  109. break;
  110. */
  111. case RESULT_CHANGE_GROUP_IMG:
  112. if (resultCode == RESULT_OK) {
  113. int selected_index = data.getIntExtra(POPUP_IMG_INDEX, 1);
  114. changeGroupImage(selected_index);
  115. }
  116. break;
  117. }
  118. }
  119. @Override
  120. public void onClick(View v) {
  121. /*
  122. final View fv = v;
  123. fv.setEnabled(false);
  124. Timer buttonTimer = new Timer();
  125. buttonTimer.schedule(new TimerTask() {
  126. @Override
  127. public void run() {
  128. runOnUiThread(new Runnable() {
  129. @Override
  130. public void run() {
  131. try {
  132. fv.setEnabled(true);
  133. } catch (Exception e) {
  134. e.printStackTrace();
  135. } finally {
  136. }
  137. }
  138. });
  139. }
  140. }, 500);
  141. */
  142. switch (v.getId()) {
  143. case R.id.btnBack:
  144. case R.id.btnBackText:
  145. onBackPressed();
  146. break;
  147. case R.id.imgGroup:{
  148. Intent intent = new Intent(this, PopupActivity.class);
  149. intent.putExtra(PopupActivity.POPUP_MODE, PopupActivity.MODE_SELECT_GROUP_IMG);
  150. intent.putExtra(PopupActivity.POPUP_TITLE_TEXT, getString(R.string.group_image));
  151. intent.putExtra(POPUP_IMG_INDEX, mSelectedImgIndex);
  152. startActivityForResult(intent, RESULT_CHANGE_GROUP_IMG);
  153. }
  154. break;
  155. /*
  156. case R.id.txtGroupName: {
  157. Intent intent = new Intent(this, PopupActivity.class);
  158. intent.putExtra(PopupActivity.POPUP_MODE, PopupActivity.MODE_INPUT);
  159. Bundle b = new Bundle();
  160. if (isEmptyGroupName()) {
  161. b.putString(PopupActivity.POPUP_INPUT, "");
  162. } else {
  163. b.putString(PopupActivity.POPUP_INPUT, ((TextView) findViewById(R.id.txtGroupName)).getText().toString());
  164. }
  165. intent.putExtra(POPUP_BUNDLE, b);
  166. intent.putExtra(PopupActivity.POPUP_TITLE_TEXT, getString(R.string.group_name));
  167. startActivityForResult(intent, RESULT_INPUT_GROUP_NAME);
  168. }
  169. break;
  170. */
  171. case R.id.btnRight:
  172. boolean isExistName = false;
  173. for(DeviceGroupInfo d : mGroupList) {
  174. if(d.friendlyName.equals(mTxtGroupName.getText().toString())) {
  175. isExistName = true;
  176. break;
  177. }
  178. }
  179. if(isEmptyGroupName()) {
  180. showNotiMsg(AddGroupActivity.this,getString(R.string.snackbar_error_need_groupname));
  181. } else if(isExistName) {
  182. showNotiMsg(AddGroupActivity.this,getString(R.string.snackbar_error_exist_groupname));
  183. } else {
  184. String groupImgString[] = {GROUP_IMG_00_STRING,
  185. GROUP_IMG_01_STRING,GROUP_IMG_02_STRING,GROUP_IMG_03_STRING,
  186. GROUP_IMG_04_STRING,GROUP_IMG_05_STRING,GROUP_IMG_06_STRING,
  187. GROUP_IMG_07_STRING,GROUP_IMG_08_STRING,GROUP_IMG_09_STRING,
  188. };
  189. String groupBackgroundString[] = {GROUP_BACKGROUND_00_STRING,
  190. GROUP_BACKGROUND_01_STRING,GROUP_BACKGROUND_02_STRING,GROUP_BACKGROUND_03_STRING,
  191. GROUP_BACKGROUND_04_STRING,GROUP_BACKGROUND_05_STRING,GROUP_BACKGROUND_06_STRING,
  192. GROUP_BACKGROUND_07_STRING,GROUP_BACKGROUND_08_STRING,GROUP_BACKGROUND_09_STRING,
  193. };
  194. displayProgress(this,"","");
  195. try {
  196. HttpApi.registerDeviceGroup(mTxtGroupName.getText().toString(),
  197. groupImgString[mSelectedImgIndex],
  198. groupBackgroundString[mSelectedImgIndex],
  199. new Callback() {
  200. @Override
  201. public void onFailure(Call call, IOException e) {
  202. e.printStackTrace();
  203. ErrorLogOutput(TAG, "HttpApi.registerDeviceGroup(onFailure)\n" + e.toString());
  204. showNotiMsg(AddGroupActivity.this,"그룹 추가를 실패하였습니다.");
  205. DismissConnectDialog();
  206. }
  207. @Override
  208. public void onResponse(Call call, Response response) throws IOException {
  209. if(response.code() == HttpApi.HTTP_NO_CONTENT) {
  210. UserInfo.dgroups.clear();
  211. WarnLogOutput(TAG, "HttpApi.registerDeviceGroup(onResponse) HTTP_NO_CONTENT");
  212. if(mBeforeActivity != null && mBeforeActivity.equals("LightRegisterDeviceFinishActivity")) {
  213. showNotiMsg(AddGroupActivity.this,"그룹를 추가하였습니다.",true);
  214. } else {
  215. showNotiMsg(AddGroupActivity.this,"그룹를 추가하였습니다.",MyGroupActivity.class);
  216. }
  217. DismissConnectDialog();
  218. } else {
  219. ErrorLogOutput(TAG, "HttpApi.registerDeviceGroup(onResponse) Error code : " + response.code() + "\nresponse : " + response.toString());
  220. showNotiMsg(AddGroupActivity.this,"그룹 추가를 실패하였습니다.");
  221. DismissConnectDialog();
  222. try {
  223. JSONObject json_data = new JSONObject(response.body().string());
  224. ErrorLogOutput(TAG, "HttpApi.registerDeviceGroup(onResponse) body : " + json_data.toString());
  225. } catch (JSONException e) {
  226. ErrorLogOutput(TAG, "HttpApi.registerDeviceGroup(onResponse) JSONException : " + e.toString());
  227. }
  228. }
  229. }
  230. });
  231. } catch (Exception e) {
  232. e.printStackTrace();
  233. ErrorLogOutput(TAG, "HttpApi.registerDeviceGroup(Exception)\n" + e.toString());
  234. showNotiMsg(AddGroupActivity.this,"그룹 추가를 실패하였습니다.");
  235. DismissConnectDialog();
  236. }
  237. }
  238. break;
  239. }
  240. }
  241. private boolean isEmptyGroupName() {
  242. return (mTxtGroupName.getText().toString().length() == 0 || mTxtGroupName.getText().toString().equals(getString(R.string.hint_input_text)));
  243. }
  244. private void changeGroupImage(final int index) {
  245. int groupImgResource[] = {R.drawable.invisiableimage,
  246. R.drawable.img_group_01,R.drawable.img_group_02,R.drawable.img_group_03,
  247. R.drawable.img_group_04,R.drawable.img_group_05,R.drawable.img_group_06,
  248. R.drawable.img_group_07,R.drawable.img_group_08,R.drawable.img_group_09
  249. };
  250. mSelectedImgIndex = index;
  251. ((ImageView)findViewById(R.id.imgGroup)).setImageBitmap(getCircleBitmap(groupImgResource[mSelectedImgIndex]));
  252. }
  253. private void shwoGroupList() {
  254. LinearLayout layoutHorizontal = null;
  255. int lineCount = 0;
  256. for(int i = 0; i < mGroupList.size(); i++){
  257. if(i%GROUP_LIST_COUNT_LINE==0) {
  258. lineCount = 0;
  259. layoutHorizontal = new LinearLayout(this);
  260. LinearLayout.LayoutParams lparam = new LinearLayout.LayoutParams(
  261. LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
  262. layoutHorizontal.setLayoutParams(lparam);
  263. layoutHorizontal.setOrientation(LinearLayout.HORIZONTAL);
  264. mLayoutGroups.addView(layoutHorizontal);
  265. LinearLayout spacelayout = new LinearLayout(this);
  266. LinearLayout.LayoutParams slparam = new LinearLayout.LayoutParams(
  267. LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
  268. slparam.weight = 1;
  269. spacelayout.setLayoutParams(slparam);
  270. spacelayout.setOrientation(LinearLayout.HORIZONTAL);
  271. layoutHorizontal.addView(spacelayout);
  272. }
  273. if(layoutHorizontal != null) {
  274. lineCount++;
  275. final View child = getLayoutInflater().inflate(R.layout.listview_horizontal_group_item, null);
  276. final TextView txtGroupName = child.findViewById(R.id.txtGroup);
  277. final ImageView imgGroup = child.findViewById(R.id.imgGroup);
  278. txtGroupName.setText(mGroupList.get(i).friendlyName);
  279. imgGroup.setImageBitmap(getCircleBitmap(getGroupImageResource(mGroupList.get(i).icon)));
  280. layoutHorizontal.addView(child);
  281. LinearLayout spacelayout = new LinearLayout(this);
  282. LinearLayout.LayoutParams slparam = new LinearLayout.LayoutParams(
  283. LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
  284. slparam.weight = 1;
  285. spacelayout.setLayoutParams(slparam);
  286. spacelayout.setOrientation(LinearLayout.HORIZONTAL);
  287. layoutHorizontal.addView(spacelayout);
  288. }
  289. if(i == mGroupList.size()-1 && lineCount < GROUP_LIST_COUNT_LINE) {
  290. while(lineCount < GROUP_LIST_COUNT_LINE) {
  291. lineCount++;
  292. final View child = getLayoutInflater().inflate(R.layout.listview_horizontal_group_item, null);
  293. final TextView txtGroupName = child.findViewById(R.id.txtGroup);
  294. final ImageView imgGroup = child.findViewById(R.id.imgGroup);
  295. txtGroupName.setVisibility(View.INVISIBLE);
  296. imgGroup.setVisibility(View.INVISIBLE);
  297. layoutHorizontal.addView(child);
  298. LinearLayout spacelayout = new LinearLayout(this);
  299. LinearLayout.LayoutParams slparam = new LinearLayout.LayoutParams(
  300. LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
  301. slparam.weight = 1;
  302. spacelayout.setLayoutParams(slparam);
  303. spacelayout.setOrientation(LinearLayout.HORIZONTAL);
  304. layoutHorizontal.addView(spacelayout);
  305. }
  306. }
  307. }
  308. }
  309. @Override
  310. public void beforeTextChanged(CharSequence s, int start, int count, int after) {
  311. }
  312. @Override
  313. public void onTextChanged(CharSequence s, int start, int before, int count) {
  314. }
  315. @Override
  316. public void afterTextChanged(Editable s) {
  317. if(mTxtGroupName.length() > 0) {
  318. findViewById(R.id.btnBack).setVisibility(View.GONE);
  319. findViewById(R.id.btnBackText).setVisibility(View.VISIBLE);
  320. findViewById(R.id.btnRight).setVisibility(View.VISIBLE);
  321. } else {
  322. findViewById(R.id.btnBack).setVisibility(View.VISIBLE);
  323. findViewById(R.id.btnBackText).setVisibility(View.GONE);
  324. findViewById(R.id.btnRight).setVisibility(View.INVISIBLE);
  325. }
  326. }
  327. }