package com.rockchip.alexa.jacky.fragment; import android.content.Context; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.widget.Toolbar; import android.text.method.HideReturnsTransformationMethod; import android.text.method.PasswordTransformationMethod; import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.EditText; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import com.broadcom.cooee.Cooee; import com.rockchip.alexa.jacky.R; import com.rockchip.alexa.jacky.activity.AlexaActivity; import com.rockchip.alexa.jacky.app.AuthConstants; import com.rockchip.alexa.jacky.app.BaseApplication; import com.rockchip.alexa.jacky.app.DesUtils; import com.rockchip.alexa.jacky.info.DeviceProvisioningInfo; import com.rockchip.alexa.jacky.listener.OnSingleClickListener; import com.rockchip.alexa.jacky.socket.SocketListener; import com.rockchip.alexa.jacky.socket.SocketTransceiver; import com.rockchip.alexa.jacky.utils.Env; import com.rockchip.alexa.jacky.views.LoadingView; import org.json.JSONException; import org.json.JSONObject; import java.util.ArrayList; import java.util.List; /** * Created by Administrator on 2017/3/22. */ public class WifiInputFragment extends NoFragment implements SocketListener { private static final String TAG = "WifiInputFragment"; private LoadingView mLoadingView; private Toolbar mToolbar; private TextView mWifiSSID, mConfirm; private ImageView mWifiPwdLock; private boolean mShowPwd; private EditText mWifiPwd; private boolean mSmartConfiged; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { return inflater.inflate(R.layout.frag_wifi_input, container, false); } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); mToolbar = (Toolbar) view.findViewById(R.id.toolbar); mWifiSSID = (TextView) view.findViewById(R.id.frag_wifi_input_ssid); mWifiSSID.setText(Env.getConnectingSSID(BaseApplication.getApplication())); mWifiPwdLock = (ImageView) view.findViewById(R.id.frag_wifi_input_lock); mWifiPwd = (EditText)view.findViewById(R.id.frag_wifi_input_pwd); mConfirm = (TextView) view.findViewById(R.id.frag_wifi_input_confirm); mConfirm.setOnClickListener(new OnSingleClickListener() { @Override protected void onSingleClick(View view) { String pwd = mWifiPwd.getText().toString(); if (pwd == null || pwd.length() < 8) { Toast.makeText(BaseApplication.getApplication(), getString(R.string.error_pwd), Toast.LENGTH_SHORT).show(); } else { Toast.makeText(BaseApplication.getApplication(), "text:" + pwd, Toast.LENGTH_SHORT).show(); if (mLoadingView != null && !mLoadingView.isShowing()) { getActivity().runOnUiThread(new Runnable() { @Override public void run() { WifiManager wifiManager = (WifiManager) getActivity().getApplicationContext().getSystemService(Context.WIFI_SERVICE); final WifiInfo info = wifiManager.getConnectionInfo(); Toast.makeText(getActivity(), "IP:" + info.getIpAddress(), Toast.LENGTH_SHORT).show(); BaseApplication.getApplication().getSocketServer().setSocketListener(WifiInputFragment.this); BaseApplication.getApplication().getSocketServer().start(); mLoadingView.show(); mSmartConfiged = false; new Thread(new Runnable() { @Override public void run() { while (!mSmartConfiged) { Cooee.send(mWifiSSID.getText().toString(), mWifiPwd.getText().toString(), info.getIpAddress()); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }).start(); } }); } } } }); mWifiPwdLock.setOnClickListener(new OnSingleClickListener() { @Override protected void onSingleClick(View view) { mShowPwd = !mShowPwd; if (mShowPwd) { mWifiPwdLock.setImageResource(R.drawable.password_input_02); mWifiPwd.setTransformationMethod(HideReturnsTransformationMethod.getInstance()); } else { mWifiPwdLock.setImageResource(R.drawable.password_input_01); mWifiPwd.setTransformationMethod(PasswordTransformationMethod.getInstance()); } } }); mLoadingView = new LoadingView(getActivity(), getString(R.string.wifi_setting_up)); } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); ((AlexaActivity)getActivity()).setFragment(this); setToolbar(mToolbar); // Set title for toolbar: setTitle("WIFI Settings"); // Display close button. displayHomeAsUpEnabled(R.drawable.ic_toolbar_back); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); inflater.inflate(R.menu.menu_fragment_main, menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { return super.onOptionsItemSelected(item); } @Override public void onServerStart() { Log.d(TAG, "Socket onServerStart!"); } @Override public void onConnect(SocketTransceiver addr) { Log.d(TAG, "Socket onConnect!"); } @Override public void onConnectFail(String ip, int port) { Log.d(TAG, "Socket onConnectFail!"); } @Override public void onConnectTimeout(String ip, int port) { Log.d(TAG, "Socket onConnectTimeout!"); } @Override public void onReceive(final SocketTransceiver addr, String msg) { Log.d(TAG, "Socket onReceive!" + msg); mSmartConfiged = true; try { JSONObject resp = new JSONObject(msg); String type = resp.getString("type"); JSONObject response = resp.getJSONObject("content"); if (type.equals("DeviceProvisioning")) { List missingParameters = new ArrayList(); if (!response.has(AuthConstants.PRODUCT_ID)) { missingParameters.add(AuthConstants.PRODUCT_ID); } if (!response.has(AuthConstants.DSN)) { missingParameters.add(AuthConstants.DSN); } if (!response.has(AuthConstants.SESSION_ID)) { missingParameters.add(AuthConstants.SESSION_ID); } if (!response.has(AuthConstants.CODE_CHALLENGE)) { missingParameters.add(AuthConstants.CODE_CHALLENGE); } if (!response.has(AuthConstants.CODE_CHALLENGE_METHOD)) { missingParameters.add(AuthConstants.CODE_CHALLENGE_METHOD); } if (missingParameters.size() != 0) { throw new DeviceProvisioningInfo.MissingParametersException(missingParameters); } String productId = response.getString(AuthConstants.PRODUCT_ID).trim(); if (productId.startsWith("RK_")) { Log.d(TAG, "producted is encrypted"); productId = productId.substring(3); try { DesUtils des = new DesUtils(); productId = des.decrypt(productId); } catch (Exception e) { e.printStackTrace(); } } Log.d(TAG, "productId is " + productId); final String dsn = response.getString(AuthConstants.DSN); final String sessionId = response.getString(AuthConstants.SESSION_ID); final String codeChallenge = response.getString(AuthConstants.CODE_CHALLENGE); final String codeChallengeMethod = response.getString(AuthConstants.CODE_CHALLENGE_METHOD); final String codeVerifier = response.getString(AuthConstants.CODE_VERIFIER); final DeviceProvisioningInfo deviceProvisioningInfo = new DeviceProvisioningInfo(productId, dsn, sessionId, codeChallenge, codeChallengeMethod, codeVerifier); getActivity().runOnUiThread(new Runnable() { @Override public void run() { if (mLoadingView != null && mLoadingView.isShowing()) { mLoadingView.dismiss(); } AlexaActivity activity = ((AlexaActivity) getActivity()); activity.setDeviceProvisioningInfo(deviceProvisioningInfo); activity.setDeviceIp(addr.getInetAddress().getHostAddress()); startFragment(AlexaIndexFragment.class); } }); } } catch (JSONException e) { e.printStackTrace(); } } @Override public void onDisconnect(SocketTransceiver addr) { Log.d(TAG, "Socket onDisconnect!"); } @Override public void onServerStop() { Log.d(TAG, "Socket server stop!"); } }