/* HVCC2WRegisterFaceRecognitionDataFragment Copyright (c) 2016 NTT DOCOMO,INC. Released under the MIT license http://opensource.org/licenses/mit-license.php */ package org.deviceconnect.android.deviceplugin.hvcc2w.setting.fragment; import android.content.Context; import android.content.DialogInterface; import android.os.Bundle; import android.os.Handler; import android.support.v4.app.Fragment; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; import android.widget.TextView; import org.deviceconnect.android.deviceplugin.hvcc2w.BuildConfig; import org.deviceconnect.android.deviceplugin.hvcc2w.R; import org.deviceconnect.android.deviceplugin.hvcc2w.manager.HVCManager; import org.deviceconnect.android.deviceplugin.hvcc2w.manager.HVCStorage; import org.deviceconnect.android.deviceplugin.hvcc2w.manager.data.FaceRecognitionDataModel; import org.deviceconnect.android.deviceplugin.hvcc2w.manager.data.FaceRecognitionObject; import org.deviceconnect.android.deviceplugin.hvcc2w.manager.data.HVCCameraInfo; import org.json.JSONException; import org.json.JSONObject; import java.util.List; import java.util.concurrent.ConcurrentHashMap; /** * HVC-C2W Settings Fragment Page 5. * * @author NTT DOCOMO, INC. */ public class HVCC2WRegisterFaceRecognitionDataFragment extends Fragment { /** * Face Recognition data ListView. */ private ListView mListView; /** * Face Recognition data name list adapter. */ private ListAdapter mAdapter; /** * Face Recognition data name. */ private EditText mName; /** * Face Recognition data register button. */ private Button mRegister; /** * Face Recognition data unregister button. */ private Button mUnregister; /** * Handler. */ private final Handler mHandler = new Handler(); /** * Service ID. */ private String mServiceId; /** * Progress. */ private HVCC2WDialogFragment mProgress; @Override public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) { mAdapter = new ListAdapter(getActivity(), -1); View root = inflater.inflate(R.layout.setting_recognize, null); mName = (EditText) root.findViewById(R.id.input_name); mRegister = (Button) root.findViewById(R.id.register_face_recognize); mRegister.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { registerFaceRecognitionData(); } }); mUnregister = (Button) root.findViewById(R.id.unregister_face_recognize); mUnregister.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { unregisterFaceRecognitionData(); } }); mListView = (ListView) root.findViewById(R.id.recoglist); mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { final String name = (String) parent.getItemAtPosition(position); mName.setText(name); } }); root.findViewById(R.id.search_c2w).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { initListView(); } }); return root; } @Override public void onPause() { super.onPause(); if (mProgress != null) { mProgress.dismiss(); mProgress = null; } } /** * Initial List View. */ private void initListView() { HVCManager.INSTANCE.getCameraList(new HVCManager.ResponseListener() { @Override public void onReceived(String json) { ConcurrentHashMap<String, HVCCameraInfo> camera = HVCManager.INSTANCE.getHVCDevices(); if (camera.size() == 0) { return; } String[] names = new String[camera.size()]; int i = 0; for (String key : camera.keySet()) { names[i] = key; i++; } final String[] serviceIds = names; final int[] pos = new int[1]; if (mServiceId == null) { HVCC2WDialogFragment.showSelectDialog(getActivity(), getString(R.string.select_dialog_message), serviceIds, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { pos[0] = i; } }, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { mServiceId = serviceIds[pos[0]]; mRegister.setVisibility(View.VISIBLE); mUnregister.setVisibility(View.VISIBLE); List<FaceRecognitionObject> objects = HVCStorage.INSTANCE.getFaceRecognitionDatasForDeviceId(mServiceId); for (FaceRecognitionObject object : objects) { mAdapter.add(object.getName()); } mListView.setAdapter(mAdapter); } }, null); } else { List<FaceRecognitionObject> objects = HVCStorage.INSTANCE.getFaceRecognitionDatasForDeviceId(mServiceId); for (FaceRecognitionObject object : objects) { mAdapter.add(object.getName()); } mListView.setAdapter(mAdapter); } mAdapter.notifyDataSetChanged(); } }); mAdapter.clear(); } /** * Register Face Recognition Data. */ private void registerFaceRecognitionData() { final String name = mName.getText().toString(); if (!name.isEmpty()) { mProgress = HVCC2WDialogFragment.newInstance(getString(R.string.hw_name), getString(R.string.loading_face_recognize_register)); mProgress.show(getActivity().getFragmentManager(), "fragment_dialog"); registerFaceRecognize(name, mServiceId); } else { HVCC2WDialogFragment.showAlert(getActivity(), getString(R.string.hw_name), getString(R.string.c2w_setting_message_6_1), null); } } /** * Unregister Face Recognition Data. */ private void unregisterFaceRecognitionData() { String name = mName.getText().toString(); if (!name.isEmpty()) { mProgress = HVCC2WDialogFragment.newInstance(getString(R.string.hw_name), getString(R.string.loading_face_recognize_unregister)); mProgress.show(getActivity().getFragmentManager(), "fragment_dialog"); unregisterFaceRecognize(name, mServiceId); } else { HVCC2WDialogFragment.showAlert(getActivity(), getString(R.string.hw_name), getString(R.string.c2w_setting_message_6_2), null); } } /** * Face Recognition Data List Adapter. */ private class ListAdapter extends ArrayAdapter<String> { public ListAdapter(Context context, int textViewId) { super(context, textViewId); } public View getView(final int position, View convertView, ViewGroup parent) { if (convertView == null) { LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.text, null); } String item = getItem(position); TextView textView = (TextView) convertView.findViewById(R.id.text); textView.setText(item); convertView.setTag(item); return convertView; } } /** * Register Face Recognition Data. * * @param name name * @param serviceId serviceId */ private void registerFaceRecognize(final String name, final String serviceId) { HVCManager.INSTANCE.setCamera(serviceId, new HVCManager.ResponseListener() { @Override public void onReceived(String json) { List<FaceRecognitionObject> recogs = HVCStorage.INSTANCE.getFaceRecognitionDatasForDeviceId(serviceId); int userId = 0; for (int i = 0; i < recogs.size(); i++, userId++) { FaceRecognitionObject recog = recogs.get(i); if (recog.getUserId() > userId) { Log.d("ABC", "rec:" + recog.getUserId() + ":" + userId); break; } } if (BuildConfig.DEBUG) { Log.d("ABC", "result userId:" + userId); } if (userId > 500) { HVCC2WDialogFragment.showAlert(getActivity(), getString(R.string.hw_name), getString(R.string.c2w_fail_register_over), null); return; } final int uId = userId; HVCManager.INSTANCE.registerAlbum(name, serviceId, userId, 0, new HVCManager.ResponseListener() { @Override public void onReceived(String json) { final int[] res = new int[1]; res[0] = 0; try { JSONObject ret = new JSONObject(json); res[0] = ret.getInt("result"); } catch (JSONException e) { e.printStackTrace(); } mHandler.post(new Runnable() { @Override public void run() { if (res[0] == 1) { FaceRecognitionObject registerObject = new FaceRecognitionDataModel(name, serviceId, uId, 0); HVCStorage.INSTANCE.registerFaceRecognitionData(registerObject); HVCC2WDialogFragment.showAlert(getActivity(), getString(R.string.hw_name), getString(R.string.c2w_success_register), null); } else { HVCC2WDialogFragment.showAlert(getActivity(), getString(R.string.hw_name), getString(R.string.c2w_fail_register), null); } initListView(); if (mProgress != null) { mProgress.dismiss(); mProgress = null; } } }); } }); } }); } /** * Register Face Recognition Data. * * @param name name * @param serviceId serviceId */ private void unregisterFaceRecognize(final String name, final String serviceId) { HVCManager.INSTANCE.setCamera(serviceId, new HVCManager.ResponseListener() { @Override public void onReceived(String json) { List<FaceRecognitionObject> recogs = HVCStorage.INSTANCE.getFaceRecognitionDatas(name); if (recogs.size() == 0) { HVCC2WDialogFragment.showAlert(getActivity(), getString(R.string.hw_name), getString(R.string.c2w_fail_unregister_nothing), null); return; } HVCManager.INSTANCE.deleteAlbum(name, new HVCManager.ResponseListener() { @Override public void onReceived(String json) { final int[] res = new int[1]; res[0] = 0; try { JSONObject ret = new JSONObject(json); res[0] = ret.getInt("result"); } catch (JSONException e) { e.printStackTrace(); } mHandler.post(new Runnable() { @Override public void run() { if (res[0] == 1) { HVCStorage.INSTANCE.removeFaceRecognitionData(name); HVCC2WDialogFragment.showAlert(getActivity(), getString(R.string.hw_name), getString(R.string.c2w_success_unregister), null); } else { HVCC2WDialogFragment.showAlert(getActivity(), getString(R.string.hw_name), getString(R.string.c2w_fail_unregister), null); } initListView(); mName.setText(""); if (mProgress != null) { mProgress.dismiss(); mProgress = null; } } }); } }); } }); } }