diff --git a/res/layout/choose_data_sim_page.xml b/res/layout/choose_data_sim_page.xml index 67963f2..d470dbd 100644 --- a/res/layout/choose_data_sim_page.xml +++ b/res/layout/choose_data_sim_page.xml @@ -21,6 +21,13 @@ + + + style="@style/PageContent" + android:visibility="gone"> + + + style="@style/PageContent" + android:visibility="gone"> mNameViews; private SparseArray mSignalViews; private SparseArray mCheckBoxes; @@ -93,6 +99,17 @@ public class ChooseDataSimPage extends SetupPage { private boolean mIsAttached = false; + private Context mContext; + + private final Handler mHandler = new Handler(); + + private final Runnable mRadioReadyRunnable = new Runnable() { + @Override + public void run() { + hideWaitForRadio(); + } + }; + private View.OnClickListener mSetDataSimClickListener = new View.OnClickListener() { @Override public void onClick(View view) { @@ -108,6 +125,7 @@ public class ChooseDataSimPage extends SetupPage { @Override protected void initializePage() { mPageView = (ViewGroup)mRootView.findViewById(R.id.page_view); + mProgressBar = (ProgressBar) mRootView.findViewById(R.id.progress); List subInfoRecords = SubscriptionController .getInstance().getActiveSubscriptionInfoList(); int simCount = subInfoRecords.size(); @@ -148,6 +166,7 @@ public class ChooseDataSimPage extends SetupPage { public void onResume() { super.onResume(); mIsAttached = true; + mContext = getActivity().getApplicationContext(); mPhone = (TelephonyManager)getActivity().getSystemService(Context.TELEPHONY_SERVICE); for (int i = 0; i < mPhoneStateListeners.size(); i++) { mPhone.listen(mPhoneStateListeners.get(i), @@ -156,6 +175,12 @@ public class ChooseDataSimPage extends SetupPage { } updateSignalStrengths(); updateCurrentDataSub(); + if (SetupWizardUtils.isRadioReady(mContext, null)) { + hideWaitForRadio(); + } else if (mTitleView != null) { + mTitleView.setText(R.string.loading); + mHandler.postDelayed(mRadioReadyRunnable, SetupWizardApp.RADIO_READY_TIMEOUT); + } } @Override @@ -172,22 +197,34 @@ public class ChooseDataSimPage extends SetupPage { @Override public void onSignalStrengthsChanged(SignalStrength signalStrength) { - if (mIsAttached) { - mSignalStrengths.put(subInfoRecord.getSimSlotIndex(), signalStrength); - updateSignalStrength(subInfoRecord); - } + mSignalStrengths.put(subInfoRecord.getSimSlotIndex(), signalStrength); + updateSignalStrength(subInfoRecord); } @Override public void onServiceStateChanged(ServiceState state) { - if (mIsAttached) { - mServiceStates.put(subInfoRecord.getSimSlotIndex(), state); - updateSignalStrength(subInfoRecord); + if (SetupWizardUtils.isRadioReady(mContext, state)) { + hideWaitForRadio(); } + mServiceStates.put(subInfoRecord.getSimSlotIndex(), state); + updateSignalStrength(subInfoRecord); } }; } + private void hideWaitForRadio() { + if (getUserVisibleHint() && mProgressBar.isShown()) { + mHandler.removeCallbacks(mRadioReadyRunnable); + if (mTitleView != null) { + mTitleView.setText(mPage.getTitleResId()); + } + mProgressBar.setVisibility(View.GONE); + mPageView.setVisibility(View.VISIBLE); + mPageView.startAnimation( + AnimationUtils.loadAnimation(getActivity(), R.anim.translucent_enter)); + } + } + private void updateSignalStrengths() { if (mIsAttached) { for (int i = 0; i < mSubInfoRecords.size(); i++) { diff --git a/src/com/cyanogenmod/setupwizard/setup/MobileDataPage.java b/src/com/cyanogenmod/setupwizard/setup/MobileDataPage.java index 2d4fecb..caffc41 100644 --- a/src/com/cyanogenmod/setupwizard/setup/MobileDataPage.java +++ b/src/com/cyanogenmod/setupwizard/setup/MobileDataPage.java @@ -20,6 +20,7 @@ import android.app.Fragment; import android.app.FragmentManager; import android.content.Context; import android.os.Bundle; +import android.os.Handler; import android.telephony.PhoneStateListener; import android.telephony.ServiceState; import android.telephony.SignalStrength; @@ -27,11 +28,15 @@ import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.text.TextUtils; import android.view.View; +import android.view.ViewGroup; +import android.view.animation.AnimationUtils; import android.widget.ImageView; +import android.widget.ProgressBar; import android.widget.Switch; import android.widget.TextView; import com.cyanogenmod.setupwizard.R; +import com.cyanogenmod.setupwizard.SetupWizardApp; import com.cyanogenmod.setupwizard.cmstats.SetupStats; import com.cyanogenmod.setupwizard.ui.SetupPageFragment; import com.cyanogenmod.setupwizard.util.SetupWizardUtils; @@ -69,6 +74,8 @@ public class MobileDataPage extends SetupPage { public static class MobileDataFragment extends SetupPageFragment { + private ViewGroup mPageView; + private ProgressBar mProgressBar; private View mEnableDataRow; private Switch mEnableMobileData; private ImageView mSignalView; @@ -80,26 +87,36 @@ public class MobileDataPage extends SetupPage { private boolean mIsAttached = false; + private Context mContext; + + private final Handler mHandler = new Handler(); + + private final Runnable mRadioReadyRunnable = new Runnable() { + @Override + public void run() { + hideWaitForRadio(); + } + }; + private PhoneStateListener mPhoneStateListener = new PhoneStateListener(SubscriptionManager.getDefaultDataSubId()) { - @Override - public void onSignalStrengthsChanged(SignalStrength signalStrength) { - if (mIsAttached) { - mSignalStrength = signalStrength; - updateSignalStrength(); - } - } + @Override + public void onSignalStrengthsChanged(SignalStrength signalStrength) { + mSignalStrength = signalStrength; + updateSignalStrength(); + } - @Override - public void onServiceStateChanged(ServiceState state) { - if (mIsAttached) { - mServiceState = state; - updateSignalStrength(); - } - } + @Override + public void onServiceStateChanged(ServiceState state) { + if (SetupWizardUtils.isRadioReady(mContext, state)) { + hideWaitForRadio(); + } + mServiceState = state; + updateSignalStrength(); + } - }; + }; private View.OnClickListener mEnableDataClickListener = new View.OnClickListener() { @Override @@ -115,6 +132,8 @@ public class MobileDataPage extends SetupPage { @Override protected void initializePage() { + mPageView = (ViewGroup)mRootView.findViewById(R.id.page_view); + mProgressBar = (ProgressBar) mRootView.findViewById(R.id.progress); mEnableDataRow = mRootView.findViewById(R.id.data); mEnableDataRow.setOnClickListener(mEnableDataClickListener); mEnableMobileData = (Switch) mRootView.findViewById(R.id.data_switch); @@ -133,12 +152,19 @@ public class MobileDataPage extends SetupPage { public void onResume() { super.onResume(); mIsAttached = true; + mContext = getActivity().getApplicationContext(); mPhone = (TelephonyManager)getActivity().getSystemService(Context.TELEPHONY_SERVICE); mPhone.listen(mPhoneStateListener, PhoneStateListener.LISTEN_SERVICE_STATE | PhoneStateListener.LISTEN_SIGNAL_STRENGTHS); updateDataConnectionStatus(); updateSignalStrength(); + if (SetupWizardUtils.isRadioReady(mContext, null)) { + hideWaitForRadio(); + } else if (mTitleView != null) { + mTitleView.setText(R.string.loading); + mHandler.postDelayed(mRadioReadyRunnable, SetupWizardApp.RADIO_READY_TIMEOUT); + } } @Override @@ -148,6 +174,19 @@ public class MobileDataPage extends SetupPage { mPhone.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE); } + private void hideWaitForRadio() { + if (getUserVisibleHint() && mProgressBar.isShown()) { + mHandler.removeCallbacks(mRadioReadyRunnable); + if (mTitleView != null) { + mTitleView.setText(mPage.getTitleResId()); + } + mProgressBar.setVisibility(View.GONE); + mPageView.setVisibility(View.VISIBLE); + mPageView.startAnimation( + AnimationUtils.loadAnimation(getActivity(), R.anim.translucent_enter)); + } + } + private void updateCarrierText() { if (mIsAttached) { String name = diff --git a/src/com/cyanogenmod/setupwizard/util/SetupWizardUtils.java b/src/com/cyanogenmod/setupwizard/util/SetupWizardUtils.java index 3ea2ee8..1aeda14 100644 --- a/src/com/cyanogenmod/setupwizard/util/SetupWizardUtils.java +++ b/src/com/cyanogenmod/setupwizard/util/SetupWizardUtils.java @@ -27,12 +27,15 @@ import android.net.NetworkInfo; import android.net.wifi.WifiManager; import android.os.UserHandle; import android.os.UserManager; +import android.telephony.ServiceState; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.util.Log; import com.android.internal.telephony.SubscriptionController; +import com.cyanogenmod.setupwizard.SetupWizardApp; + import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.GooglePlayServicesUtil; @@ -126,6 +129,19 @@ public class SetupWizardUtils { return true; } + public static boolean isRadioReady(Context context, ServiceState state) { + final SetupWizardApp setupWizardApp = (SetupWizardApp)context.getApplicationContext(); + if (setupWizardApp.isRadioReady()) { + return true; + } else { + final boolean ready = state != null + && state.getState() != ServiceState.STATE_POWER_OFF; + setupWizardApp.setRadioReady(ready); + return ready; + } + + } + public static boolean isGuestUser(Context context) { UserManager userManager = (UserManager) context.getSystemService(Context.USER_SERVICE); return userManager.isGuestUser();