/* AWSIoTLoginFragment.java Copyright (c) 2016 NTT DOCOMO,INC. Released under the MIT license http://opensource.org/licenses/mit-license.php */ package org.deviceconnect.android.deviceplugin.awsiot.setting.fragment; import android.app.Dialog; import android.app.ProgressDialog; import android.content.Intent; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.design.widget.FloatingActionButton; import android.support.v4.app.DialogFragment; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.view.inputmethod.InputMethodManager; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.Spinner; import android.widget.Toast; import com.amazonaws.regions.Regions; import org.deviceconnect.android.deviceplugin.awsiot.cores.core.AWSIotController; import org.deviceconnect.android.deviceplugin.awsiot.cores.core.AWSIotDeviceApplication; import org.deviceconnect.android.deviceplugin.awsiot.cores.core.AWSIotPrefUtil; import org.deviceconnect.android.deviceplugin.awsiot.remote.R; import org.deviceconnect.android.deviceplugin.awsiot.setting.AWSIotSettingActivity; import org.deviceconnect.android.deviceplugin.awsiot.setting.AWSIotWebViewActivity; /** * AWS Iot Login Fragment. * * @author NTT DOCOMO, INC. */ public class AWSIotLoginFragment extends Fragment { /** Access Key EditText. */ private EditText mAccessKey; /** Secret Key EditText. */ private EditText mSecretKey; /** Region select Spinner. */ private Spinner mRegion; /** AWSIotPrefUtil instance. */ private AWSIotPrefUtil mPrefUtil; /** AWSIotController instance. */ private AWSIotController mAWSIotController; /** AWS IoT Regions list. */ private final Regions[] regionsList = { Regions.US_EAST_1, Regions.US_WEST_2, Regions.AP_SOUTHEAST_1, Regions.AP_SOUTHEAST_2, Regions.AP_NORTHEAST_1, Regions.EU_CENTRAL_1, Regions.EU_WEST_1 }; @Override public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) { setHasOptionsMenu(false); mAWSIotController = ((AWSIotSettingActivity) getActivity()).getAWSIotController(); mPrefUtil = ((AWSIotSettingActivity) getContext()).getPrefUtil(); View rootView = inflater.inflate(R.layout.settings_login, null); mAccessKey = (EditText) rootView.findViewById(R.id.input_awsiot_id); mAccessKey.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if (!hasFocus) { closeSoftwareKeyboard(v); } } }); String accessKey = mPrefUtil.getAccessKey(); if (accessKey != null) { mAccessKey.setText(accessKey); } mSecretKey = (EditText) rootView.findViewById(R.id.input_awsiot_password); mSecretKey.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if (!hasFocus) { closeSoftwareKeyboard(v); } } }); String secretKey = mPrefUtil.getSecretKey(); if (secretKey != null) { mSecretKey.setText(secretKey); } String[] regionList = getResources().getStringArray(R.array.region_array); ArrayAdapter<String> adapter = new ArrayAdapter<>(getContext(), R.layout.item_region, regionList); mRegion = (Spinner) rootView.findViewById(R.id.spn_region); mRegion.setAdapter(adapter); Regions regions = mPrefUtil.getRegions(); if (regions != null) { for (int i = 0; i < regionsList.length; i++) { if (regionsList[i] == regions) { mRegion.setSelection(i); } } } /* Login button. */ Button login = (Button) rootView.findViewById(R.id.login); login.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String accessKey = mAccessKey.getText().toString(); if (accessKey.length() == 0) { Toast.makeText(getContext(), getString(R.string.awsiot_login_error_access_key), Toast.LENGTH_LONG).show(); return; } String secretKey = mSecretKey.getText().toString(); if (secretKey.length() == 0) { Toast.makeText(getContext(), getString(R.string.awsiot_login_error_secret_key), Toast.LENGTH_LONG).show(); return; } Regions region = regionsList[(int)mRegion.getSelectedItemId()]; mPrefUtil.setAccessKey(accessKey); mPrefUtil.setSecretKey(secretKey); mPrefUtil.setRegions(region); DuringLoginDialogFragment dialog = new DuringLoginDialogFragment(); dialog.show(getFragmentManager(),"DuringDialog"); mAWSIotController.login(accessKey, secretKey, region, new AWSIotController.LoginCallback() { @Override public void onLogin(final Exception err) { DuringLoginDialogFragment dialog = (DuringLoginDialogFragment) getFragmentManager().findFragmentByTag("DuringDialog"); if (dialog != null) { dialog.dismiss(); } if (err != null) { Toast.makeText(getContext(), getString(R.string.awsiot_login_error), Toast.LENGTH_LONG).show(); return; } mPrefUtil.setAWSLoginFlag(true); // Managerリスト一覧へ遷移 FragmentManager manager = getActivity().getSupportFragmentManager(); AWSIotManagerListFragment fragment = new AWSIotManagerListFragment(); FragmentTransaction transaction = manager.beginTransaction(); transaction.replace(R.id.container, fragment); transaction.commit(); ((AWSIotDeviceApplication)getActivity().getApplication()).startAWSIot(); } }); } }); /* Help button. */ FloatingActionButton fabHelp = (FloatingActionButton) rootView.findViewById(R.id.fab_help); fabHelp.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String url = "file:///android_asset/html/help/index.html"; Intent intent = new Intent(); intent.setClass(getContext(), AWSIotWebViewActivity.class); intent.putExtra(AWSIotWebViewActivity.EXTRA_URL, url); intent.putExtra(AWSIotWebViewActivity.EXTRA_TITLE, getString(R.string.activity_help_title)); startActivity(intent); } }); return rootView; } /** * Close software Keyboard */ private void closeSoftwareKeyboard(final View v) { InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(android.content.Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(v.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); } /** * Show a dialog of AWSIoT Login. */ public static class DuringLoginDialogFragment extends DialogFragment { @NonNull @Override public Dialog onCreateDialog(final Bundle savedInstanceState) { String msg = getString(R.string.awsiot_during_login); ProgressDialog progressDialog = new ProgressDialog(getActivity()); progressDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); progressDialog.setMessage(msg); progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); setCancelable(false); return progressDialog; } @Override public void onPause() { dismiss(); super.onPause(); } } }