diff --git a/res/color/button_bar_text.xml b/res/color/button_bar_text.xml
new file mode 100644
index 0000000..c670d2d
--- /dev/null
+++ b/res/color/button_bar_text.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/res/layout/choose_data_sim_page.xml b/res/layout/choose_data_sim_page.xml
index d470dbd..c93a89f 100644
--- a/res/layout/choose_data_sim_page.xml
+++ b/res/layout/choose_data_sim_page.xml
@@ -21,13 +21,6 @@
-
-
+
+
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 7943291..34110b7 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -24,7 +24,8 @@
#009789
#8a000000
#727272
- #1e1e1e
+ #ff1e1e1e
+ #321e1e1e
#40000000
@color/primary
@color/primary_dark
diff --git a/src/com/cyanogenmod/setupwizard/setup/ChooseDataSimPage.java b/src/com/cyanogenmod/setupwizard/setup/ChooseDataSimPage.java
index af123e0..e053399 100644
--- a/src/com/cyanogenmod/setupwizard/setup/ChooseDataSimPage.java
+++ b/src/com/cyanogenmod/setupwizard/setup/ChooseDataSimPage.java
@@ -33,6 +33,7 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AnimationUtils;
+import android.widget.Button;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.ProgressBar;
@@ -50,6 +51,8 @@ public class ChooseDataSimPage extends SetupPage {
public static final String TAG = "ChooseDataSimPage";
+ private static final String CHANGE_DATA_SIM_ID_EXTRA = ".changingToId";
+
public ChooseDataSimPage(Context context, SetupDataCallbacks callbacks) {
super(context, callbacks);
}
@@ -85,6 +88,8 @@ public class ChooseDataSimPage extends SetupPage {
private SparseArray mNameViews;
private SparseArray mSignalViews;
private SparseArray mCheckBoxes;
+ private SparseArray mRows;
+ private Button mNextButton;
private TelephonyManager mPhone;
private SparseArray mSubInfoRecords;
@@ -93,16 +98,24 @@ public class ChooseDataSimPage extends SetupPage {
private SparseArray mPhoneStateListeners;
private boolean mIsAttached = false;
+ private boolean mRadioReady = false;
private Context mContext;
private SubscriptionManager mSubscriptionManager;
+ private int mCurrentDataPhoneId;
+ private int mChangingToDataPhoneId;
+
private final Handler mHandler = new Handler();
private final Runnable mRadioReadyRunnable = new Runnable() {
@Override
public void run() {
- hideWaitForRadio();
+ // If we timeout out waiting for the radio, Oh well.
+ if (!mRadioReady) {
+ mRadioReady = true;
+ checkForRadioReady();
+ }
}
};
@@ -110,9 +123,9 @@ public class ChooseDataSimPage extends SetupPage {
@Override
public void onClick(View view) {
SubscriptionInfo subInfoRecord = (SubscriptionInfo)view.getTag();
- if (subInfoRecord != null) {
- mSubscriptionManager.setDefaultDataSubId(subInfoRecord.getSubscriptionId());
- setDataSubChecked(subInfoRecord);
+ if (subInfoRecord != null &&
+ subInfoRecord.getSimSlotIndex() != mCurrentDataPhoneId) {
+ changeDataSub(subInfoRecord);
}
}
};
@@ -121,6 +134,7 @@ public class ChooseDataSimPage extends SetupPage {
protected void initializePage() {
mPageView = (ViewGroup)mRootView.findViewById(R.id.page_view);
mProgressBar = (ProgressBar) mRootView.findViewById(R.id.progress);
+ mNextButton = (Button) getActivity().findViewById(R.id.next_button);
List subInfoRecords = mSubscriptionManager.getActiveSubscriptionInfoList();
int simCount =
subInfoRecords != null ? subInfoRecords.size() : 0;
@@ -131,6 +145,7 @@ public class ChooseDataSimPage extends SetupPage {
mNameViews = new SparseArray(simCount);
mSignalViews = new SparseArray(simCount);
mCheckBoxes = new SparseArray(simCount);
+ mRows = new SparseArray(simCount);
mServiceStates = new SparseArray(simCount);
mSignalStrengths = new SparseArray(simCount);
mPhoneStateListeners = new SparseArray(simCount);
@@ -145,6 +160,7 @@ public class ChooseDataSimPage extends SetupPage {
mNameViews.put(slot, (TextView) simRow.findViewById(R.id.sim_title));
mSignalViews.put(slot, (ImageView) simRow.findViewById(R.id.signal));
mCheckBoxes.put(slot, (CheckBox) simRow.findViewById(R.id.enable_check));
+ mRows.put(slot, simRow);
mPhoneStateListeners.put(slot, createPhoneStateListener(subInfoRecord));
mPageView.addView(inflater.inflate(R.layout.divider, null));
}
@@ -162,6 +178,10 @@ public class ChooseDataSimPage extends SetupPage {
super.onCreate(savedInstanceState);
mContext = getActivity().getApplicationContext();
mSubscriptionManager = SubscriptionManager.from(mContext);
+ mCurrentDataPhoneId = mSubscriptionManager.getDefaultDataPhoneId();
+ mChangingToDataPhoneId = (savedInstanceState == null) ?
+ mCurrentDataPhoneId :
+ savedInstanceState.getInt(CHANGE_DATA_SIM_ID_EXTRA, mCurrentDataPhoneId);
}
@Override
@@ -172,18 +192,24 @@ public class ChooseDataSimPage extends SetupPage {
for (int i = 0; i < mPhoneStateListeners.size(); i++) {
mPhone.listen(mPhoneStateListeners.valueAt(i),
PhoneStateListener.LISTEN_SERVICE_STATE
- | PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
+ | PhoneStateListener.LISTEN_SIGNAL_STRENGTHS
+ | PhoneStateListener.LISTEN_DATA_CONNECTION_STATE
+ );
}
+ mRadioReady = SetupWizardUtils.isRadioReady(mContext, null);
updateSignalStrengths();
updateCurrentDataSub();
- if (SetupWizardUtils.isRadioReady(mContext, null)) {
- hideWaitForRadio();
- } else if (mTitleView != null) {
- mTitleView.setText(R.string.loading);
- mHandler.postDelayed(mRadioReadyRunnable, SetupWizardApp.RADIO_READY_TIMEOUT);
+ checkForRadioReady();
+ if (mRadioReady) {
+ checkSimChangingState();
}
}
+ @Override
+ public void onSaveInstanceState(Bundle outState) {
+ outState.putInt(CHANGE_DATA_SIM_ID_EXTRA, mChangingToDataPhoneId);
+ }
+
@Override
public void onPause() {
super.onPause();
@@ -204,25 +230,66 @@ public class ChooseDataSimPage extends SetupPage {
@Override
public void onServiceStateChanged(ServiceState state) {
- if (SetupWizardUtils.isRadioReady(mContext, state)) {
- hideWaitForRadio();
- }
+ mRadioReady = SetupWizardUtils.isRadioReady(mContext, state);
+ checkForRadioReady();
mServiceStates.put(subInfoRecord.getSimSlotIndex(), state);
updateSignalStrength(subInfoRecord);
}
+
+ @Override
+ public void onDataConnectionStateChanged(int state) {
+ mCurrentDataPhoneId = mSubscriptionManager.getDefaultDataPhoneId();
+ checkSimChangingState();
+ }
};
}
- private void hideWaitForRadio() {
- if (getUserVisibleHint() && mProgressBar.isShown()) {
+ private void checkForRadioReady() {
+ if (mRadioReady) {
mHandler.removeCallbacks(mRadioReadyRunnable);
+ hideProgress();
+ mNextButton.setEnabled(true);
+ showPage();
+ return;
+ } else {
if (mTitleView != null) {
- mTitleView.setText(mPage.getTitleResId());
+ mTitleView.setText(R.string.loading);
}
- mProgressBar.setVisibility(View.GONE);
- mPageView.setVisibility(View.VISIBLE);
+ mNextButton.setEnabled(false);
+ showProgress();
+ if (!mHandler.hasCallbacks(mRadioReadyRunnable)) {
+ mHandler.postDelayed(mRadioReadyRunnable, SetupWizardApp.RADIO_READY_TIMEOUT);
+ }
+ }
+ }
+
+ private void showPage() {
+ final Context context = getActivity();
+ if (mTitleView != null) {
+ mTitleView.setText(mPage.getTitleResId());
+ }
+ mPageView.setVisibility(View.VISIBLE);
+ if (context != null && getUserVisibleHint() && !mPageView.isShown()) {
mPageView.startAnimation(
- AnimationUtils.loadAnimation(getActivity(), R.anim.translucent_enter));
+ AnimationUtils.loadAnimation(context, R.anim.translucent_enter));
+ }
+ }
+
+ private void showProgress() {
+ final Context context = getActivity();
+ if (context != null && getUserVisibleHint() && !mProgressBar.isShown()) {
+ mProgressBar.setVisibility(View.VISIBLE);
+ mProgressBar.startAnimation(
+ AnimationUtils.loadAnimation(context, R.anim.translucent_enter));
+ }
+ }
+
+ private void hideProgress() {
+ final Context context = getActivity();
+ if (context != null && getUserVisibleHint() && mProgressBar.isShown()) {
+ mProgressBar.startAnimation(
+ AnimationUtils.loadAnimation(context, R.anim.translucent_exit));
+ mProgressBar.setVisibility(View.INVISIBLE);
}
}
@@ -234,6 +301,29 @@ public class ChooseDataSimPage extends SetupPage {
}
}
+ private void changeDataSub(SubscriptionInfo subInfoRecord) {
+ if (mChangingToDataPhoneId != subInfoRecord.getSimSlotIndex()) {
+ mChangingToDataPhoneId = subInfoRecord.getSimSlotIndex();
+ mSubscriptionManager.setDefaultDataSubId(subInfoRecord.getSubscriptionId());
+ setDataSubChecked(subInfoRecord);
+ }
+ checkSimChangingState();
+ }
+
+ private void checkSimChangingState() {
+ if (mIsAttached && mRadioReady) {
+ if (mCurrentDataPhoneId != mChangingToDataPhoneId) {
+ showProgress();
+ mNextButton.setEnabled(false);
+ enableRows(false);
+ } else {
+ hideProgress();
+ mNextButton.setEnabled(true);
+ enableRows(true);
+ }
+ }
+ }
+
private void setDataSubChecked(SubscriptionInfo subInfoRecord) {
if (mIsAttached) {
for (int i = 0; i < mCheckBoxes.size(); i++) {
@@ -260,6 +350,12 @@ public class ChooseDataSimPage extends SetupPage {
}
}
+ private void enableRows(boolean enabled) {
+ for (int i = 0; i < mRows.size(); i++) {
+ mRows.get(i).setEnabled(enabled);
+ }
+ }
+
private void updateCarrierText(SubscriptionInfo subInfoRecord) {
if (mIsAttached) {
String name = mPhone.getNetworkOperatorName(subInfoRecord.getSubscriptionId());
diff --git a/src/com/cyanogenmod/setupwizard/ui/SetupWizardActivity.java b/src/com/cyanogenmod/setupwizard/ui/SetupWizardActivity.java
index afa861a..373e7e8 100644
--- a/src/com/cyanogenmod/setupwizard/ui/SetupWizardActivity.java
+++ b/src/com/cyanogenmod/setupwizard/ui/SetupWizardActivity.java
@@ -265,8 +265,8 @@ public class SetupWizardActivity extends Activity implements SetupDataCallbacks,
mButtonBar.setBackgroundResource(R.color.button_bar_background);
mNextButton.setCompoundDrawablesWithIntrinsicBounds(null, null,
getDrawable(R.drawable.ic_chevron_right_dark), null);
- mNextButton.setTextColor(resources.getColor(R.color.button_bar_text));
- mPrevButton.setTextColor(resources.getColor(R.color.button_bar_text));
+ mNextButton.setTextColor(resources.getColorStateList(R.color.button_bar_text));
+ mPrevButton.setTextColor(resources.getColorStateList(R.color.button_bar_text));
}
}