diff --git a/src/com/cyanogenmod/setupwizard/setup/AbstractSetupData.java b/src/com/cyanogenmod/setupwizard/setup/AbstractSetupData.java index add42c9..e0e3faf 100644 --- a/src/com/cyanogenmod/setupwizard/setup/AbstractSetupData.java +++ b/src/com/cyanogenmod/setupwizard/setup/AbstractSetupData.java @@ -16,12 +16,13 @@ package com.cyanogenmod.setupwizard.setup; +import android.content.BroadcastReceiver; import android.content.Context; import android.os.Bundle; import java.util.ArrayList; -public abstract class AbstractSetupData implements SetupDataCallbacks { +public abstract class AbstractSetupData extends BroadcastReceiver implements SetupDataCallbacks { private static final String TAG = AbstractSetupData.class.getSimpleName(); diff --git a/src/com/cyanogenmod/setupwizard/setup/CMSetupWizardData.java b/src/com/cyanogenmod/setupwizard/setup/CMSetupWizardData.java index f4e7153..e5e2fb8 100644 --- a/src/com/cyanogenmod/setupwizard/setup/CMSetupWizardData.java +++ b/src/com/cyanogenmod/setupwizard/setup/CMSetupWizardData.java @@ -16,29 +16,47 @@ package com.cyanogenmod.setupwizard.setup; -import com.cyanogenmod.setupwizard.util.SetupWizardUtils; - import android.content.Context; -import android.telephony.SubscriptionManager; +import android.content.Intent; +import android.content.IntentFilter; +import android.telephony.TelephonyManager; + +import com.android.internal.telephony.TelephonyIntents; +import com.cyanogenmod.setupwizard.util.SetupWizardUtils; import java.util.ArrayList; public class CMSetupWizardData extends AbstractSetupData { + private static final String TAG = CMSetupWizardData.class.getSimpleName(); + + private final TelephonyManager mTelephonyManager; + + private boolean mTimeSet = false; + private boolean mTimeZoneSet = false; + + private final int mSimSlotCount; + private final int[] mSimStates; + public CMSetupWizardData(Context context) { super(context); + mTelephonyManager = TelephonyManager.from(context); + mSimSlotCount = mTelephonyManager.getPhoneCount(); + mSimStates = new int[mSimSlotCount]; + for (int i = 0; i < mSimSlotCount; i++) { + mSimStates[i] = TelephonyManager.SIM_STATE_ABSENT; + } } @Override protected PageList onNewPageList() { - ArrayList pages = new ArrayList(); + ArrayList pages = new ArrayList(); pages.add(new WelcomePage(mContext, this)); pages.add(new WifiSetupPage(mContext, this)); - if (SetupWizardUtils.isSimMissing(mContext)) { - pages.add(new SimCardMissingPage(mContext, this)); + if (TelephonyManager.from(mContext).getSimCount() > 0) { + pages.add(new SimCardMissingPage(mContext, this).setHidden(true)); } - if (SetupWizardUtils.isMultiSimDevice(mContext) - && SubscriptionManager.getActiveSubInfoCount() > 1) { + if (SetupWizardUtils.isMultiSimDevice(mContext)) { pages.add(new ChooseDataSimPage(mContext, this)); } if (SetupWizardUtils.hasTelephony(mContext) && @@ -57,4 +75,61 @@ public class CMSetupWizardData extends AbstractSetupData { } + @Override + public void onReceive(Context context, Intent intent) { + if (intent.getAction().equals(TelephonyIntents.ACTION_SIM_STATE_CHANGED)) { + int slot = intent.getIntExtra("slot", -1); + if (slot != -1 && mSimStates.length > 0) { + mSimStates[slot] = mTelephonyManager.getSimState(slot); + } + } else if (intent.getAction().equals(Intent.ACTION_TIMEZONE_CHANGED)) { + mTimeZoneSet = true; + } else if (intent.getAction().equals(Intent.ACTION_TIME_CHANGED)) { + mTimeSet = true; + } + DateTimePage dateTimePage = (DateTimePage) getPage(DateTimePage.TAG); + dateTimePage.setHidden(mTimeZoneSet & mTimeSet); + + SimCardMissingPage simCardMissingPage = + (SimCardMissingPage) getPage(SimCardMissingPage.TAG); + if (simCardMissingPage != null) { + simCardMissingPage.setHidden(isSimInserted()); + } + + ChooseDataSimPage chooseDataSimPage = + (ChooseDataSimPage) getPage(ChooseDataSimPage.TAG); + if (chooseDataSimPage != null) { + chooseDataSimPage.setHidden(!allSimsInserted()); + } + } + + public IntentFilter getIntentFilter() { + IntentFilter filter = new IntentFilter(); + filter.addAction(TelephonyIntents.ACTION_SIM_STATE_CHANGED); + filter.addAction(Intent.ACTION_TIMEZONE_CHANGED); + filter.addAction(Intent.ACTION_TIME_CHANGED); + return filter; + } + + // We only care that one sim is inserted + private boolean isSimInserted() { + for (int state : mSimStates) { + if (state != TelephonyManager.SIM_STATE_ABSENT + && state != TelephonyManager.SIM_STATE_UNKNOWN) { + return true; + } + } + return false; + } + + // We only care the each slot has a sim + private boolean allSimsInserted() { + for (int state : mSimStates) { + if (state == TelephonyManager.SIM_STATE_ABSENT) { + return false; + } + } + return true; + } + } \ No newline at end of file diff --git a/src/com/cyanogenmod/setupwizard/setup/CyanogenServicesPage.java b/src/com/cyanogenmod/setupwizard/setup/CyanogenServicesPage.java index ac3bb90..fc6b60b 100644 --- a/src/com/cyanogenmod/setupwizard/setup/CyanogenServicesPage.java +++ b/src/com/cyanogenmod/setupwizard/setup/CyanogenServicesPage.java @@ -107,6 +107,7 @@ public class CyanogenServicesPage extends SetupPage { Bundle bundle = new Bundle(); bundle.putBoolean(SetupWizardApp.EXTRA_FIRST_RUN, true); bundle.putBoolean(SetupWizardApp.EXTRA_SHOW_BUTTON_BAR, true); + bundle.putBoolean(SetupWizardApp.EXTRA_USE_IMMERSIVE, true); AccountManager.get(activity) .addAccount(activity.getString(R.string.cm_account_type), null, null, bundle, null, new AccountManagerCallback() { diff --git a/src/com/cyanogenmod/setupwizard/setup/FinishPage.java b/src/com/cyanogenmod/setupwizard/setup/FinishPage.java index e49cbc6..5d33b8a 100644 --- a/src/com/cyanogenmod/setupwizard/setup/FinishPage.java +++ b/src/com/cyanogenmod/setupwizard/setup/FinishPage.java @@ -68,11 +68,6 @@ public class FinishPage extends SetupPage { return R.string.start; } - @Override - public int getPrevButtonTitleResId() { - return -1; - } - public static class FinishFragment extends SetupPageFragment { @Override diff --git a/src/com/cyanogenmod/setupwizard/setup/Page.java b/src/com/cyanogenmod/setupwizard/setup/Page.java index 00da6d3..dbdb56f 100644 --- a/src/com/cyanogenmod/setupwizard/setup/Page.java +++ b/src/com/cyanogenmod/setupwizard/setup/Page.java @@ -40,7 +40,7 @@ public interface Page { public boolean isRequired(); public Page setRequired(boolean required); public boolean isHidden(); - public void setHidden(boolean hidden); + public Page setHidden(boolean hidden); public boolean doPreviousAction(); public boolean doNextAction(); public void doLoadAction(Activity context, int action); diff --git a/src/com/cyanogenmod/setupwizard/setup/SetupPage.java b/src/com/cyanogenmod/setupwizard/setup/SetupPage.java index 55555ef..bb9ecd4 100644 --- a/src/com/cyanogenmod/setupwizard/setup/SetupPage.java +++ b/src/com/cyanogenmod/setupwizard/setup/SetupPage.java @@ -111,8 +111,9 @@ public abstract class SetupPage implements Page { } @Override - public void setHidden(boolean hidden) { + public Page setHidden(boolean hidden) { mHidden = hidden; + return this; } @Override diff --git a/src/com/cyanogenmod/setupwizard/ui/SetupWizardActivity.java b/src/com/cyanogenmod/setupwizard/ui/SetupWizardActivity.java index c93c76e..83179b2 100644 --- a/src/com/cyanogenmod/setupwizard/ui/SetupWizardActivity.java +++ b/src/com/cyanogenmod/setupwizard/ui/SetupWizardActivity.java @@ -33,7 +33,6 @@ import android.widget.Button; import com.cyanogenmod.setupwizard.R; import com.cyanogenmod.setupwizard.SetupWizardApp; -import com.cyanogenmod.setupwizard.setup.AbstractSetupData; import com.cyanogenmod.setupwizard.setup.CMSetupWizardData; import com.cyanogenmod.setupwizard.setup.CyanogenServicesPage; import com.cyanogenmod.setupwizard.setup.CyanogenSettingsPage; @@ -53,7 +52,9 @@ public class SetupWizardActivity extends Activity implements SetupDataCallbacks private Button mPrevButton; private View mReveal; - private AbstractSetupData mSetupData; + private EnableAccessibilityController mEnableAccessibilityController; + + private CMSetupWizardData mSetupData; private final Handler mHandler = new Handler(); @@ -63,7 +64,7 @@ public class SetupWizardActivity extends Activity implements SetupDataCallbacks getWindow().setWindowAnimations(android.R.anim.fade_in); mRootView = findViewById(R.id.root); ((SetupWizardApp)getApplicationContext()).disableStatusBar(); - mSetupData = (AbstractSetupData)getLastNonConfigurationInstance(); + mSetupData = (CMSetupWizardData)getLastNonConfigurationInstance(); if (mSetupData == null) { mSetupData = new CMSetupWizardData(this); } @@ -90,13 +91,15 @@ public class SetupWizardActivity extends Activity implements SetupDataCallbacks if (savedInstanceState != null && savedInstanceState.containsKey("data")) { mSetupData.load(savedInstanceState.getBundle("data")); } - final EnableAccessibilityController acc = new EnableAccessibilityController(this); - mRootView.setOnTouchListener(new View.OnTouchListener() { - @Override - public boolean onTouch(View v, MotionEvent event) { - return acc.onInterceptTouchEvent(event); - } - }); + if (EnableAccessibilityController.canEnableAccessibilityViaGesture(this)) { + mEnableAccessibilityController = new EnableAccessibilityController(this); + mRootView.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View v, MotionEvent event) { + return mEnableAccessibilityController.onInterceptTouchEvent(event); + } + }); + } // Since this is a new component, we need to disable here if the user // has already been through setup on a previous version. try { @@ -107,6 +110,7 @@ public class SetupWizardActivity extends Activity implements SetupDataCallbacks } catch (Settings.SettingNotFoundException e) { // Continue with setup } + registerReceiver(mSetupData, mSetupData.getIntentFilter()); } @Override @@ -118,7 +122,11 @@ public class SetupWizardActivity extends Activity implements SetupDataCallbacks @Override protected void onDestroy() { super.onDestroy(); + if (mEnableAccessibilityController != null) { + mEnableAccessibilityController.onDestroy(); + } mSetupData.unregisterListener(this); + unregisterReceiver(mSetupData); } @Override @@ -139,9 +147,9 @@ public class SetupWizardActivity extends Activity implements SetupDataCallbacks @Override public void onBackPressed() { - if (!mSetupData.isFirstPage()) { - mSetupData.onPreviousPage(); - } + if (!mSetupData.isFirstPage()) { + mSetupData.onPreviousPage(); + } } @Override @@ -161,10 +169,11 @@ public class SetupWizardActivity extends Activity implements SetupDataCallbacks if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE && mSetupData.isFirstPage()) { - getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY - | View.SYSTEM_UI_FLAG_FULLSCREEN); + getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_IMMERSIVE + | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); } else { - getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE); + getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_IMMERSIVE + | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); } updateButtonBar(); } @@ -191,13 +200,15 @@ public class SetupWizardActivity extends Activity implements SetupDataCallbacks } final Resources resources = getResources(); if (mSetupData.isLastPage()) { - mPrevButton.setVisibility(View.INVISIBLE); mRootView.setBackgroundColor(resources.getColor(R.color.primary)); mNextButton.setCompoundDrawablesWithIntrinsicBounds(null, null, getDrawable(R.drawable.ic_chevron_right_wht), null); mNextButton.setTextColor(resources.getColor(R.color.white)); + mPrevButton.setCompoundDrawablesWithIntrinsicBounds( + getDrawable(R.drawable.ic_chevron_left_wht), null, + null, null); + mPrevButton.setTextColor(resources.getColor(R.color.white)); } else { - mPrevButton.setVisibility(View.VISIBLE); mRootView.setBackgroundColor(resources.getColor(R.color.window_background)); mNextButton.setCompoundDrawablesWithIntrinsicBounds(null, null, getDrawable(R.drawable.ic_chevron_right_dark), null);