summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcretin45 <cretin45@gmail.com>2015-08-18 14:02:22 -0700
committercretin45 <cretin45@gmail.com>2015-08-18 16:43:34 -0700
commit62db4521887b19c9adcbfcf5ecf2df27a9447923 (patch)
tree9ca1da474cb36e3d2bfef16887cd1ed406d7e0e8
parentca721f949c5acb705b9728e68b3eaf789cdc960d (diff)
downloadpackages_apps_SetupWizard-62db4521887b19c9adcbfcf5ecf2df27a9447923.zip
packages_apps_SetupWizard-62db4521887b19c9adcbfcf5ecf2df27a9447923.tar.gz
packages_apps_SetupWizard-62db4521887b19c9adcbfcf5ecf2df27a9447923.tar.bz2
SetupWizard: Wait for data sim change
When changing the default data sim for msim, disable the next action until the operation completes. This PS also refactors how the wait for radio logic a bit. CRACKLING-503 Change-Id: I38ba3ea00f63d3e42c260e5b0e8558c3bc9d347f
-rw-r--r--res/color/button_bar_text.xml21
-rw-r--r--res/layout/choose_data_sim_page.xml16
-rw-r--r--res/values/colors.xml3
-rw-r--r--src/com/cyanogenmod/setupwizard/setup/ChooseDataSimPage.java134
-rw-r--r--src/com/cyanogenmod/setupwizard/ui/SetupWizardActivity.java4
5 files changed, 149 insertions, 29 deletions
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 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2015 The CyanogenMod Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_enabled="false" android:color="@color/button_bar_text_disabled" />
+ <item android:color="@color/button_bar_text_enabled" />
+</selector>
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 @@
<include layout="@layout/header" />
- <ProgressBar
- android:id="@+id/progress"
- style="?android:attr/progressBarStyleHorizontal"
- android:indeterminateOnly="true"
- android:layout_width="match_parent"
- android:layout_height="8dp" />
-
<FrameLayout android:id="@+id/page"
android:layout_width="match_parent"
android:layout_height="0dp"
@@ -59,6 +52,15 @@
</LinearLayout>
</ScrollView>
+
+ <ProgressBar
+ android:id="@+id/progress"
+ style="?android:attr/progressBarStyleHorizontal"
+ android:indeterminateOnly="true"
+ android:layout_width="match_parent"
+ android:layout_height="8dp"
+ android:layout_gravity="top"
+ android:visibility="gone"/>
</FrameLayout>
</LinearLayout>
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 @@
<color name="accent">#009789</color>
<color name="primary_text">#8a000000</color>
<color name="secondary_text">#727272</color>
- <color name="button_bar_text">#1e1e1e</color>
+ <color name="button_bar_text_enabled">#ff1e1e1e</color>
+ <color name="button_bar_text_disabled">#321e1e1e</color>
<color name="divider">#40000000</color>
<color name="header_bg">@color/primary</color>
<color name="header_condensed_bg">@color/primary_dark</color>
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<TextView> mNameViews;
private SparseArray<ImageView> mSignalViews;
private SparseArray<CheckBox> mCheckBoxes;
+ private SparseArray<View> mRows;
+ private Button mNextButton;
private TelephonyManager mPhone;
private SparseArray<SubscriptionInfo> mSubInfoRecords;
@@ -93,16 +98,24 @@ public class ChooseDataSimPage extends SetupPage {
private SparseArray<PhoneStateListener> 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<SubscriptionInfo> subInfoRecords = mSubscriptionManager.getActiveSubscriptionInfoList();
int simCount =
subInfoRecords != null ? subInfoRecords.size() : 0;
@@ -131,6 +145,7 @@ public class ChooseDataSimPage extends SetupPage {
mNameViews = new SparseArray<TextView>(simCount);
mSignalViews = new SparseArray<ImageView>(simCount);
mCheckBoxes = new SparseArray<CheckBox>(simCount);
+ mRows = new SparseArray<View>(simCount);
mServiceStates = new SparseArray<ServiceState>(simCount);
mSignalStrengths = new SparseArray<SignalStrength>(simCount);
mPhoneStateListeners = new SparseArray<PhoneStateListener>(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,19 +192,25 @@ 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();
mIsAttached = false;
@@ -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));
}
}