diff options
Diffstat (limited to 'src/com')
5 files changed, 94 insertions, 36 deletions
diff --git a/src/com/android/settings/CryptKeeper.java b/src/com/android/settings/CryptKeeper.java index 6795e28..928b45b 100644 --- a/src/com/android/settings/CryptKeeper.java +++ b/src/com/android/settings/CryptKeeper.java @@ -478,6 +478,16 @@ public class CryptKeeper extends Activity implements TextView.OnEditorActionList mPasswordEntry.setOnEditorActionListener(this); mPasswordEntry.requestFocus(); + // Disable the Emergency call button if the device has no voice telephone capability + final TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); + if (!tm.isVoiceCapable()) { + final View emergencyCall = findViewById(R.id.emergencyCallButton); + if (emergencyCall != null) { + Log.d(TAG, "Removing the emergency Call button"); + emergencyCall.setVisibility(View.GONE); + } + } + final View imeSwitcher = findViewById(R.id.switch_ime_button); final InputMethodManager imm = (InputMethodManager) getSystemService( Context.INPUT_METHOD_SERVICE); diff --git a/src/com/android/settings/DataUsageSummary.java b/src/com/android/settings/DataUsageSummary.java index 7d45461..3b0ce59 100644 --- a/src/com/android/settings/DataUsageSummary.java +++ b/src/com/android/settings/DataUsageSummary.java @@ -278,6 +278,12 @@ public class DataUsageSummary extends Fragment { mShowWifi = mPrefs.getBoolean(PREF_SHOW_WIFI, false); mShowEthernet = mPrefs.getBoolean(PREF_SHOW_ETHERNET, false); + // override preferences when no mobile radio + if (!hasReadyMobileRadio(context)) { + mShowWifi = hasWifiRadio(context); + mShowEthernet = hasEthernet(context); + } + setHasOptionsMenu(true); } @@ -388,9 +394,6 @@ public class DataUsageSummary extends Fragment { mUsageSummary = (TextView) mHeader.findViewById(R.id.usage_summary); mEmpty = (TextView) mHeader.findViewById(android.R.id.empty); - // only assign layout transitions once first layout is finished - mListView.getViewTreeObserver().addOnGlobalLayoutListener(mFirstLayoutListener); - mAdapter = new DataUsageAdapter(mUidDetailProvider, mInsetSide); mListView.setOnItemClickListener(mListListener); mListView.setAdapter(mAdapter); @@ -461,7 +464,6 @@ public class DataUsageSummary extends Fragment { showWifi.setChecked(mShowWifi); } else { showWifi.setVisible(false); - mShowWifi = true; } final MenuItem showEthernet = menu.findItem(R.id.data_usage_menu_show_ethernet); @@ -470,7 +472,6 @@ public class DataUsageSummary extends Fragment { showEthernet.setChecked(mShowEthernet); } else { showEthernet.setVisible(false); - mShowEthernet = true; } final MenuItem metered = menu.findItem(R.id.data_usage_menu_metered); @@ -570,25 +571,22 @@ public class DataUsageSummary extends Fragment { } /** - * Listener to setup {@link LayoutTransition} after first layout pass. + * Build and assign {@link LayoutTransition} to various containers. Should + * only be assigned after initial layout is complete. */ - private OnGlobalLayoutListener mFirstLayoutListener = new OnGlobalLayoutListener() { - @Override - public void onGlobalLayout() { - mListView.getViewTreeObserver().removeOnGlobalLayoutListener(mFirstLayoutListener); - - mTabsContainer.setLayoutTransition(buildLayoutTransition()); - mHeader.setLayoutTransition(buildLayoutTransition()); - mNetworkSwitchesContainer.setLayoutTransition(buildLayoutTransition()); - - final LayoutTransition chartTransition = buildLayoutTransition(); - chartTransition.setStartDelay(LayoutTransition.APPEARING, 0); - chartTransition.setStartDelay(LayoutTransition.DISAPPEARING, 0); - chartTransition.setAnimator(LayoutTransition.APPEARING, null); - chartTransition.setAnimator(LayoutTransition.DISAPPEARING, null); - mChart.setLayoutTransition(chartTransition); - } - }; + private void ensureLayoutTransitions() { + // skip when already setup + if (mChart.getLayoutTransition() != null) return; + + mTabsContainer.setLayoutTransition(buildLayoutTransition()); + mHeader.setLayoutTransition(buildLayoutTransition()); + mNetworkSwitchesContainer.setLayoutTransition(buildLayoutTransition()); + + final LayoutTransition chartTransition = buildLayoutTransition(); + chartTransition.disableTransitionType(LayoutTransition.APPEARING); + chartTransition.disableTransitionType(LayoutTransition.DISAPPEARING); + mChart.setLayoutTransition(chartTransition); + } private static LayoutTransition buildLayoutTransition() { final LayoutTransition transition = new LayoutTransition(); @@ -1172,6 +1170,9 @@ public class DataUsageSummary extends Fragment { } mUsageSummary.setText(getString(summaryRes, totalPhrase, rangePhrase)); + + // initial layout is finished above, ensure we have transitions + ensureLayoutTransitions(); } private final LoaderCallbacks<ChartData> mChartDataCallbacks = new LoaderCallbacks< diff --git a/src/com/android/settings/inputmethod/InputMethodAndSubtypeUtil.java b/src/com/android/settings/inputmethod/InputMethodAndSubtypeUtil.java index cb4058f..c7d8c89 100644 --- a/src/com/android/settings/inputmethod/InputMethodAndSubtypeUtil.java +++ b/src/com/android/settings/inputmethod/InputMethodAndSubtypeUtil.java @@ -22,6 +22,7 @@ import android.content.ContentResolver; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; +import android.content.res.Resources; import android.preference.CheckBoxPreference; import android.preference.Preference; import android.preference.PreferenceScreen; @@ -36,6 +37,7 @@ import android.view.inputmethod.InputMethodSubtype; import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Locale; import java.util.Map; public class InputMethodAndSubtypeUtil { @@ -46,6 +48,7 @@ public class InputMethodAndSubtypeUtil { private static final char INPUT_METHOD_SEPARATER = ':'; private static final char INPUT_METHOD_SUBTYPE_SEPARATER = ';'; private static final int NOT_A_SUBTYPE_ID = -1; + private static final Locale ENGLISH_LOCALE = new Locale("en"); private static final TextUtils.SimpleStringSplitter sStringInputMethodSplitter = new TextUtils.SimpleStringSplitter(INPUT_METHOD_SEPARATER); @@ -183,7 +186,7 @@ public class InputMethodAndSubtypeUtil { getEnabledInputMethodsAndSubtypeList(resolver); HashSet<String> disabledSystemIMEs = getDisabledSystemIMEs(resolver); - final boolean onlyOneIME = inputMethodInfos.size() == 1; + final int imiCount = inputMethodInfos.size(); boolean needsToResetSelectedSubtype = false; for (InputMethodInfo imi : inputMethodInfos) { final String imiId = imi.getId(); @@ -193,11 +196,11 @@ public class InputMethodAndSubtypeUtil { // pref is instance of CheckBoxPreference in the Configure input method screen. final boolean isImeChecked = (pref instanceof CheckBoxPreference) ? ((CheckBoxPreference) pref).isChecked() - : enabledIMEAndSubtypesMap.containsKey(imiId); + : enabledIMEAndSubtypesMap.containsKey(imiId); final boolean isCurrentInputMethod = imiId.equals(currentInputMethodId); - final boolean auxIme = isAuxiliaryIme(imi); final boolean systemIme = isSystemIme(imi); - if (((onlyOneIME || (systemIme && !auxIme)) && !hasHardKeyboard) || isImeChecked) { + if ((!hasHardKeyboard && isAlwaysCheckedIme(imi, context.getActivity(), imiCount)) + || isImeChecked) { if (!enabledIMEAndSubtypesMap.containsKey(imiId)) { // imiId has just been enabled enabledIMEAndSubtypesMap.put(imiId, new HashSet<String>()); @@ -373,4 +376,47 @@ public class InputMethodAndSubtypeUtil { public static boolean isAuxiliaryIme(InputMethodInfo imi) { return imi.isAuxiliaryIme(); } + + public static boolean isAlwaysCheckedIme(InputMethodInfo imi, Context context, int imiCount) { + if (imiCount <= 1) { + return true; + } + if (!isSystemIme(imi)) { + return false; + } + if (isAuxiliaryIme(imi)) { + return false; + } + if (isValidDefaultIme(imi, context)) { + return true; + } + return containsSubtypeOf(imi, ENGLISH_LOCALE.getLanguage()); + } + + private static boolean isValidDefaultIme(InputMethodInfo imi, Context context) { + if (imi.getIsDefaultResourceId() != 0) { + try { + Resources res = context.createPackageContext( + imi.getPackageName(), 0).getResources(); + if (res.getBoolean(imi.getIsDefaultResourceId()) + && containsSubtypeOf(imi, context.getResources().getConfiguration(). + locale.getLanguage())) { + return true; + } + } catch (PackageManager.NameNotFoundException ex) { + } catch (Resources.NotFoundException ex) { + } + } + return false; + } + + private static boolean containsSubtypeOf(InputMethodInfo imi, String language) { + final int N = imi.getSubtypeCount(); + for (int i = 0; i < N; ++i) { + if (imi.getSubtypeAt(i).getLocale().startsWith(language)) { + return true; + } + } + return false; + } } diff --git a/src/com/android/settings/inputmethod/InputMethodPreference.java b/src/com/android/settings/inputmethod/InputMethodPreference.java index 4ecdb8e..90eef85 100644 --- a/src/com/android/settings/inputmethod/InputMethodPreference.java +++ b/src/com/android/settings/inputmethod/InputMethodPreference.java @@ -51,7 +51,7 @@ public class InputMethodPreference extends CheckBoxPreference private final InputMethodInfo mImi; private final InputMethodManager mImm; private final Intent mSettingsIntent; - private final boolean mIsSystemIme; + private final boolean mAlwaysChecked; private AlertDialog mDialog = null; private ImageView mInputMethodSettingsButton; @@ -68,7 +68,7 @@ public class InputMethodPreference extends CheckBoxPreference if (isChecked()) { setChecked(false); } else { - if (mIsSystemIme) { + if (mAlwaysChecked) { setChecked(true); } else { showSecurityWarnDialog(mImi, InputMethodPreference.this); @@ -87,9 +87,9 @@ public class InputMethodPreference extends CheckBoxPreference mImm = imm; mImi = imi; updateSummary(); - mIsSystemIme = InputMethodAndSubtypeUtil.isSystemIme(imi); - final boolean isAuxIme = InputMethodAndSubtypeUtil.isAuxiliaryIme(imi); - if (imiCount <= 1 || (mIsSystemIme && !isAuxIme)) { + mAlwaysChecked = InputMethodAndSubtypeUtil.isAlwaysCheckedIme( + imi, fragment.getActivity(), imiCount); + if (mAlwaysChecked) { setEnabled(false); } } diff --git a/src/com/android/settings/net/DataUsageMeteredSettings.java b/src/com/android/settings/net/DataUsageMeteredSettings.java index fea8a12..69326bc 100644 --- a/src/com/android/settings/net/DataUsageMeteredSettings.java +++ b/src/com/android/settings/net/DataUsageMeteredSettings.java @@ -48,6 +48,7 @@ public class DataUsageMeteredSettings extends SettingsPreferenceFragment { private PreferenceCategory mMobileCategory; private PreferenceCategory mWifiCategory; + private Preference mWifiDisabled; @Override public void onCreate(Bundle icicle) { @@ -63,9 +64,9 @@ public class DataUsageMeteredSettings extends SettingsPreferenceFragment { addPreferencesFromResource(R.xml.data_usage_metered_prefs); mMobileCategory = (PreferenceCategory) findPreference("mobile"); mWifiCategory = (PreferenceCategory) findPreference("wifi"); + mWifiDisabled = findPreference("wifi_disabled"); updateNetworks(context); - } private void updateNetworks(Context context) { @@ -76,15 +77,15 @@ public class DataUsageMeteredSettings extends SettingsPreferenceFragment { getPreferenceScreen().removePreference(mMobileCategory); } - if (hasWifiRadio(context)) { - mWifiCategory.removeAll(); + mWifiCategory.removeAll(); + if (hasWifiRadio(context) && mWifiManager.isWifiEnabled()) { for (WifiConfiguration config : mWifiManager.getConfiguredNetworks()) { if (config.SSID != null) { mWifiCategory.addPreference(buildWifiPref(context, config)); } } } else { - getPreferenceScreen().removePreference(mWifiCategory); + mWifiCategory.addPreference(mWifiDisabled); } } |