package com.xiaomi.xms.sales.xmsf.account.ui; import android.app.Activity; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.os.AsyncTask; import android.os.Bundle; import android.telephony.TelephonyManager; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ProgressBar; import android.widget.TextView; import com.xiaomi.xms.sales.R; import com.xiaomi.xms.sales.util.LogUtil; import com.xiaomi.xms.sales.xmsf.account.exception.InvalidResponseException; import com.xiaomi.xms.sales.xmsf.account.utils.CloudHelper; import java.io.IOException; public class RegisterSmsSentFragment extends StepsFragment { private static final String TAG = "RegisterSmsSentFragment"; private TextView mStatusTextView; private ProgressBar mProgressBar; private static final int ERROR_NETWORK = 1; private static final int ERROR_REGISTER = 2; /** * Intervals in milliseconds of rolling sms status upon server. */ public static final int[] ROLL_SMS_STATUS_INTERVALS = new int[] { 1000, 2000, 5000, 10000, 20000, 60000 }; public static final int[] ROLL_REG_STATUS_INTERVALS = new int[] { 5000, 5000, 20000, 60000 }; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.micloud_sms_sent, container, false); getActivity().setTitle(R.string.title_activate); return v; } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); mStatusTextView = (TextView) view.findViewById(R.id.status_text); mStatusTextView.setVisibility(View.GONE); mProgressBar = (ProgressBar) view.findViewById(R.id.progress_bar); mProgressBar.setVisibility(View.GONE); QueryActivationTask task = new QueryActivationTask(); task.execute(); } @Override public void onResume() { super.onResume(); displaySoftInputIfNeed(getView(), false); } @Override protected void onButtonFinishClicked() { getActivity().finish(); } class QueryActivationTask extends AsyncTask<Void, Void, Integer> { @Override protected void onPreExecute() { mStatusTextView.setVisibility(View.VISIBLE); mProgressBar.setVisibility(View.VISIBLE); mStatusTextView.setText(R.string.micloud_active_sms_status_wait); mButtonFinish.setEnabled(false); } @Override protected void onPostExecute(Integer result) { mProgressBar.setVisibility(View.GONE); if (result == Activity.RESULT_OK) { mStatusTextView.setText(R.string.micloud_active_sms_status_success); } else if (result == ERROR_NETWORK) { mStatusTextView.setText(R.string.micloud_active_sms_status_network); } else if (result == ERROR_REGISTER) { mStatusTextView.setText(R.string.micloud_active_sms_status_fail); } mButtonFinish.setEnabled(true); } @Override protected Integer doInBackground(Void... params) { for (int wait : ROLL_SMS_STATUS_INTERVALS) { try { Thread.sleep(wait); } catch (InterruptedException e) { e.printStackTrace(); } ConnectivityManager cm = (ConnectivityManager) getActivity().getSystemService( Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = cm.getActiveNetworkInfo(); if (networkInfo != null && networkInfo.isConnected()) { boolean success = check(); if (success) { return Activity.RESULT_OK; } } else { return ERROR_NETWORK; } } return ERROR_REGISTER; } private boolean check() { Context context = getActivity(); String phone = null; TelephonyManager tm = (TelephonyManager) context .getSystemService(Context.TELEPHONY_SERVICE); final String deviceId = tm.getDeviceId(); final String imsi = tm.getSubscriberId(); try { phone = CloudHelper.queryPhone(deviceId, imsi); } catch (IOException e) { e.printStackTrace(); } catch (InvalidResponseException e) { e.printStackTrace(); } if (TextUtils.isEmpty(phone)) { return false; } LogUtil.d(TAG, "get phone:" + phone); // query user id String userId = null; try { userId = CloudHelper.getUserIdForPhone(phone); } catch (IOException e) { e.printStackTrace(); } catch (InvalidResponseException e) { e.printStackTrace(); } if (!TextUtils.isEmpty(userId)) { return true; } else { return false; } } } }