diff options
Diffstat (limited to 'src/com/android')
16 files changed, 535 insertions, 114 deletions
diff --git a/src/com/android/settings/DevelopmentSettings.java b/src/com/android/settings/DevelopmentSettings.java index 7796c5e..0cfa703 100644 --- a/src/com/android/settings/DevelopmentSettings.java +++ b/src/com/android/settings/DevelopmentSettings.java @@ -572,6 +572,11 @@ public class DevelopmentSettings extends PreferenceFragment .getStringArray(R.array.root_access_entries)[Integer.valueOf(value)]); } + /* package */ static boolean isRootForAppsEnabled() { + int value = SystemProperties.getInt(ROOT_ACCESS_PROPERTY, 1); + return value == 1 || value == 3; + } + private void writeRootAccessOptions(Object newValue) { String oldValue = SystemProperties.get(ROOT_ACCESS_PROPERTY, "1"); SystemProperties.set(ROOT_ACCESS_PROPERTY, newValue.toString()); diff --git a/src/com/android/settings/DisplaySettings.java b/src/com/android/settings/DisplaySettings.java index 60e5931..d88c2f1 100644 --- a/src/com/android/settings/DisplaySettings.java +++ b/src/com/android/settings/DisplaySettings.java @@ -144,7 +144,7 @@ public class DisplaySettings extends SettingsPreferenceFragment implements mVolumeWake = (CheckBoxPreference) findPreference(KEY_VOLUME_WAKE); if (mVolumeWake != null) { if (!getResources().getBoolean(R.bool.config_show_volumeRockerWake) - && !Utils.hasVolumeRocker(getActivity())) { + || !Utils.hasVolumeRocker(getActivity())) { getPreferenceScreen().removePreference(mVolumeWake); getPreferenceScreen().removePreference((PreferenceCategory) findPreference(KEY_WAKEUP_CATEGORY)); } else { diff --git a/src/com/android/settings/LocationSettings.java b/src/com/android/settings/LocationSettings.java index cfbbe26..0e50188 100644 --- a/src/com/android/settings/LocationSettings.java +++ b/src/com/android/settings/LocationSettings.java @@ -76,6 +76,7 @@ public class LocationSettings extends SettingsPreferenceFragment if (mSettingsObserver != null) { mContentQueryMap.deleteObserver(mSettingsObserver); } + mContentQueryMap.close(); } private PreferenceScreen createPreferenceHierarchy() { diff --git a/src/com/android/settings/SecuritySettings.java b/src/com/android/settings/SecuritySettings.java index 85d76b3..e124fa2 100644 --- a/src/com/android/settings/SecuritySettings.java +++ b/src/com/android/settings/SecuritySettings.java @@ -64,6 +64,8 @@ public class SecuritySettings extends SettingsPreferenceFragment private static final String KEY_BIOMETRIC_WEAK_LIVELINESS = "biometric_weak_liveliness"; private static final String KEY_LOCK_ENABLED = "lockenabled"; private static final String KEY_VISIBLE_PATTERN = "visiblepattern"; + private static final String KEY_VISIBLE_ERROR_PATTERN = "visible_error_pattern"; + private static final String KEY_VISIBLE_DOTS = "visibledots"; private static final String KEY_SECURITY_CATEGORY = "security_category"; private static final String KEY_DEVICE_ADMIN_CATEGORY = "device_admin_category"; private static final String KEY_LOCK_AFTER_TIMEOUT = "lock_after_timeout"; @@ -100,6 +102,8 @@ public class SecuritySettings extends SettingsPreferenceFragment private CheckBoxPreference mBiometricWeakLiveliness; private CheckBoxPreference mVisiblePattern; + private CheckBoxPreference mVisibleErrorPattern; + private CheckBoxPreference mVisibleDots; private CheckBoxPreference mShowPassword; @@ -244,9 +248,6 @@ public class SecuritySettings extends SettingsPreferenceFragment } if (isCmSecurity) { - // visible pattern - mVisiblePattern = (CheckBoxPreference) root.findPreference(KEY_VISIBLE_PATTERN); - // lock instantly on power key press mPowerButtonInstantlyLocks = (CheckBoxPreference) root.findPreference( KEY_POWER_INSTANTLY_LOCKS); @@ -317,6 +318,12 @@ public class SecuritySettings extends SettingsPreferenceFragment // visible pattern mVisiblePattern = (CheckBoxPreference) root.findPreference(KEY_VISIBLE_PATTERN); + // visible error pattern + mVisibleErrorPattern = (CheckBoxPreference) root.findPreference(KEY_VISIBLE_ERROR_PATTERN); + + // visible dots + mVisibleDots = (CheckBoxPreference) root.findPreference(KEY_VISIBLE_DOTS); + // lock instantly on power key press mPowerButtonInstantlyLocks = (CheckBoxPreference) root.findPreference( KEY_POWER_INSTANTLY_LOCKS); @@ -327,8 +334,11 @@ public class SecuritySettings extends SettingsPreferenceFragment DevicePolicyManager.PASSWORD_QUALITY_SOMETHING) { PreferenceGroup securityCategory = (PreferenceGroup) root.findPreference(KEY_SECURITY_CATEGORY); - if (securityCategory != null && mVisiblePattern != null) { - securityCategory.removePreference(root.findPreference(KEY_VISIBLE_PATTERN)); + if (securityCategory != null && mVisiblePattern != null && + mVisibleErrorPattern != null && mVisibleDots != null) { + securityCategory.removePreference(mVisiblePattern); + securityCategory.removePreference(mVisibleErrorPattern); + securityCategory.removePreference(mVisibleDots); } } @@ -583,6 +593,12 @@ public class SecuritySettings extends SettingsPreferenceFragment if (mVisiblePattern != null) { mVisiblePattern.setChecked(lockPatternUtils.isVisiblePatternEnabled()); } + if (mVisibleErrorPattern != null) { + mVisibleErrorPattern.setChecked(lockPatternUtils.isShowErrorPath()); + } + if (mVisibleDots != null) { + mVisibleDots.setChecked(lockPatternUtils.isVisibleDotsEnabled()); + } if (mPowerButtonInstantlyLocks != null) { mPowerButtonInstantlyLocks.setChecked(lockPatternUtils.getPowerButtonInstantlyLocks()); } @@ -641,6 +657,10 @@ public class SecuritySettings extends SettingsPreferenceFragment lockPatternUtils.setLockPatternEnabled(isToggled(preference)); } else if (KEY_VISIBLE_PATTERN.equals(key)) { lockPatternUtils.setVisiblePatternEnabled(isToggled(preference)); + } else if (KEY_VISIBLE_ERROR_PATTERN.equals(key)) { + lockPatternUtils.setShowErrorPath(isToggled(preference)); + } else if (KEY_VISIBLE_DOTS.equals(key)) { + lockPatternUtils.setVisibleDotsEnabled(isToggled(preference)); } else if (KEY_POWER_INSTANTLY_LOCKS.equals(key)) { lockPatternUtils.setPowerButtonInstantlyLocks(isToggled(preference)); } else if (preference == mSlideLockDelayToggle) { diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java index 07b04b9..119f27f 100644 --- a/src/com/android/settings/Settings.java +++ b/src/com/android/settings/Settings.java @@ -487,6 +487,10 @@ public class Settings extends PreferenceActivity if (!showDev) { target.remove(i); } + } else if (id == R.id.superuser) { + if (!DevelopmentSettings.isRootForAppsEnabled()) { + target.remove(i); + } } if (target.get(i) == header diff --git a/src/com/android/settings/SoundSettings.java b/src/com/android/settings/SoundSettings.java index a6e0abd..8af0c67 100644 --- a/src/com/android/settings/SoundSettings.java +++ b/src/com/android/settings/SoundSettings.java @@ -225,8 +225,14 @@ public class SoundSettings extends SettingsPreferenceFragment implements mHapticFeedback.setChecked(Settings.System.getInt(resolver, Settings.System.HAPTIC_FEEDBACK_ENABLED, 1) != 0); mVolumeAdjustSounds = (CheckBoxPreference) findPreference(KEY_VOLUME_ADJUST_SOUNDS); - mVolumeAdjustSounds.setChecked(Settings.System.getInt(resolver, - Settings.System.VOLUME_ADJUST_SOUNDS_ENABLED, 1) != 0); + if (mVolumeAdjustSounds != null) { + if (!Utils.hasVolumeRocker(getActivity())) { + getPreferenceScreen().removePreference(mVolumeAdjustSounds); + } else { + mVolumeAdjustSounds.setChecked(Settings.System.getInt(resolver, + Settings.System.VOLUME_ADJUST_SOUNDS_ENABLED, 1) != 0); + } + } mLockSounds = (CheckBoxPreference) findPreference(KEY_LOCK_SOUNDS); mLockSounds.setPersistent(false); mLockSounds.setChecked(Settings.System.getInt(resolver, diff --git a/src/com/android/settings/TetherSettings.java b/src/com/android/settings/TetherSettings.java index df44e91..d2c99dc 100644 --- a/src/com/android/settings/TetherSettings.java +++ b/src/com/android/settings/TetherSettings.java @@ -388,7 +388,7 @@ public class TetherSettings extends SettingsPreferenceFragment int btState = adapter.getState(); if (btState == BluetoothAdapter.STATE_TURNING_OFF) { mBluetoothTether.setEnabled(false); - mBluetoothTether.setSummary(R.string.wifi_stopping); + mBluetoothTether.setSummary(R.string.bluetooth_turning_off); } else if (btState == BluetoothAdapter.STATE_TURNING_ON) { mBluetoothTether.setEnabled(false); mBluetoothTether.setSummary(R.string.bluetooth_turning_on); diff --git a/src/com/android/settings/cyanogenmod/NavRing.java b/src/com/android/settings/cyanogenmod/NavRing.java new file mode 100644 index 0000000..6eba01d --- /dev/null +++ b/src/com/android/settings/cyanogenmod/NavRing.java @@ -0,0 +1,316 @@ +/* + * Copyright (C) 2013 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. + */ + +package com.android.settings.cyanogenmod; + +import android.app.AlertDialog; +import android.app.Fragment; +import android.content.ContentResolver; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.Intent.ShortcutIconResource; +import android.content.res.Configuration; +import android.os.Bundle; +import android.os.Vibrator; +import android.provider.Settings; +import android.text.TextUtils; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Toast; + +import static com.android.internal.util.cm.NavigationRingConstants.*; +import com.android.internal.util.cm.NavigationRingHelpers; +import com.android.internal.widget.multiwaveview.GlowPadView; +import com.android.internal.widget.multiwaveview.TargetDrawable; +import com.android.settings.R; +import com.android.settings.Utils; + +import java.util.ArrayList; + +public class NavRing extends Fragment implements + ShortcutPickHelper.OnPickListener, GlowPadView.OnTriggerListener { + private GlowPadView mGlowPadView; + private ShortcutPickHelper mPicker; + private String[] mTargetActivities; + private ViewGroup mContainer; + + private int mTargetIndex = 0; + private int mStartPosOffset; + private int mEndPosOffset; + + private boolean mIsLandscape; + private boolean mIsScreenLarge; + + private ActionHolder mActions; + + private static final int MENU_RESET = Menu.FIRST; + private static final int MENU_SAVE = Menu.FIRST + 1; + + private class ActionHolder { + private ArrayList<CharSequence> mAvailableEntries = new ArrayList<CharSequence>(); + private ArrayList<String> mAvailableValues = new ArrayList<String>(); + + public void addAction(String action, int entryResId) { + mAvailableEntries.add(getString(entryResId)); + mAvailableValues.add(action); + } + public int getActionIndex(String action) { + int count = mAvailableValues.size(); + for (int i = 0; i < count; i++) { + if (TextUtils.equals(mAvailableValues.get(i), action)) { + return i; + } + } + return -1; + } + public String getAction(int index) { + if (index > mAvailableValues.size()) { + return null; + } + return mAvailableValues.get(index); + } + public CharSequence[] getEntries() { + return mAvailableEntries.toArray(new CharSequence[mAvailableEntries.size()]); + } + }; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + mContainer = container; + setHasOptionsMenu(true); + createActionList(); + + mIsScreenLarge = !Utils.isPhone(getActivity()); + mIsLandscape = getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE; + + mPicker = new ShortcutPickHelper(getActivity(), this); + + return inflater.inflate(R.layout.navigation_ring_targets, container, false); + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + mGlowPadView = ((GlowPadView) getActivity().findViewById(R.id.navring_target)); + mGlowPadView.setOnTriggerListener(this); + updateDrawables(); + } + + private void createActionList() { + mActions = new ActionHolder(); + mActions.addAction(ACTION_NONE, R.string.navring_action_none); + + if (NavigationRingHelpers.isAssistantAvailable(getActivity())) { + mActions.addAction(ACTION_ASSIST, R.string.navring_action_google_now); + } + if (NavigationRingHelpers.isTorchAvailable(getActivity())) { + mActions.addAction(ACTION_TORCH, R.string.navring_action_torch); + } + + mActions.addAction(ACTION_SCREENSHOT, R.string.navring_action_take_screenshot); + mActions.addAction(ACTION_IME, R.string.navring_action_open_ime_switcher); + mActions.addAction(ACTION_SILENT, R.string.navring_action_ring_silent); + + Vibrator vibrator = (Vibrator) getActivity().getSystemService(Context.VIBRATOR_SERVICE); + if (vibrator != null && vibrator.hasVibrator()) { + mActions.addAction(ACTION_VIBRATE, R.string.navring_action_ring_vibrate); + mActions.addAction(ACTION_RING_SILENT_VIBRATE, R.string.navring_action_ring_vibrate_silent); + } + + mActions.addAction(ACTION_KILL, R.string.navring_action_kill_app); + mActions.addAction(ACTION_POWER, R.string.navring_action_screen_off); + + mActions.addAction(ACTION_APP, R.string.select_application); + } + + private void setDrawables() { + final ArrayList<TargetDrawable> targets = new ArrayList<TargetDrawable>(); + final Context context = getActivity(); + + if (!mIsLandscape || mIsScreenLarge) { + mStartPosOffset = 1; + mEndPosOffset = 4; + } else { + mStartPosOffset = 3; + mEndPosOffset = 2; + } + + // Add Initial Place Holder Targets + for (int i = 0; i < mStartPosOffset; i++) { + targets.add(NavigationRingHelpers.getTargetDrawable(context, null)); + } + // Add User Targets + for (int i = 0; i < mTargetActivities.length; i++) { + final TargetDrawable drawable = + NavigationRingHelpers.getTargetDrawable(context, mTargetActivities[i]); + // we also want empty targets to be selectable here + drawable.setEnabled(true); + targets.add(drawable); + } + + // Add End Place Holder Targets + for (int i = 0; i < mEndPosOffset; i++) { + targets.add(NavigationRingHelpers.getTargetDrawable(context, null)); + } + + mGlowPadView.setTargetResources(targets); + NavigationRingHelpers.swapSearchIconIfNeeded(context, mGlowPadView); + } + + @Override + public void onResume() { + super.onResume(); + + // If running on a phone, remove padding around container + if (!mIsScreenLarge) { + mContainer.setPadding(0, 0, 0, 0); + } + } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + menu.add(0, MENU_RESET, 0, R.string.profile_reset_title) + .setIcon(R.drawable.ic_settings_backup) + .setAlphabeticShortcut('r') + .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | + MenuItem.SHOW_AS_ACTION_WITH_TEXT); + menu.add(0, MENU_SAVE, 0, R.string.wifi_save) + .setIcon(R.drawable.ic_menu_save) + .setAlphabeticShortcut('s') + .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | + MenuItem.SHOW_AS_ACTION_WITH_TEXT); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case MENU_RESET: + resetAll(); + return true; + case MENU_SAVE: + saveAll(); + Toast.makeText(getActivity(), R.string.navring_target_save, Toast.LENGTH_LONG).show(); + return true; + default: + return false; + } + } + + private void resetAll() { + final AlertDialog d = new AlertDialog.Builder(getActivity()) + .setTitle(R.string.lockscreen_target_reset_title) + .setIconAttribute(android.R.attr.alertDialogIcon) + .setMessage(R.string.navring_target_reset_message) + .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int id) { + NavigationRingHelpers.resetActionsToDefaults(getActivity()); + updateDrawables(); + Toast.makeText(getActivity(), + R.string.navring_target_reset, + Toast.LENGTH_LONG).show(); + } + }) + .setNegativeButton(R.string.cancel, null) + .create(); + + d.show(); + } + + private void saveAll() { + final ContentResolver cr = getActivity().getContentResolver(); + for (int i = 0; i < mTargetActivities.length; i++) { + Settings.System.putString(cr, + Settings.System.NAVIGATION_RING_TARGETS[i], mTargetActivities[i]); + } + updateDrawables(); + } + + @Override + public void shortcutPicked(String uri, String friendlyName, boolean isApplication) { + mTargetActivities[mTargetIndex] = uri; + setDrawables(); + } + + public void onActivityResult(int requestCode, int resultCode, Intent data) { + mPicker.onActivityResult(requestCode, resultCode, data); + super.onActivityResult(requestCode, resultCode, data); + } + + public void updateDrawables() { + mTargetActivities = NavigationRingHelpers.getTargetActions(getActivity()); + setDrawables(); + } + + public void onTargetChange(String uri) { + if (uri.equals(ACTION_APP)) { + final String label = getResources().getString(R.string.lockscreen_target_empty); + final ShortcutIconResource iconResource = + ShortcutIconResource.fromContext(getActivity(), android.R.drawable.ic_delete); + mPicker.pickShortcut( + new String[] { label }, + new ShortcutIconResource[] { iconResource }, + getId()); + } else { + mTargetActivities[mTargetIndex] = uri; + setDrawables(); + } + } + + @Override + public void onTrigger(View v, final int target) { + mTargetIndex = target - mStartPosOffset; + + final DialogInterface.OnClickListener l = new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int item) { + onTargetChange(mActions.getAction(item)); + dialog.dismiss(); + } + }; + + final int selection = mActions.getActionIndex(mTargetActivities[mTargetIndex]); + final AlertDialog dialog = new AlertDialog.Builder(getActivity()) + .setTitle(R.string.navring_choose_action_title) + .setSingleChoiceItems(mActions.getEntries(), selection, l) + .create(); + + dialog.show(); + } + + @Override + public void onGrabbed(View v, int handle) { + } + + @Override + public void onReleased(View v, int handle) { + } + + @Override + public void onGrabbedStateChange(View v, int handle) { + } + + @Override + public void onFinishFinalAnimation() { + } +} diff --git a/src/com/android/settings/cyanogenmod/QuickSettings.java b/src/com/android/settings/cyanogenmod/QuickSettings.java index c62be68..a7dd00c 100644 --- a/src/com/android/settings/cyanogenmod/QuickSettings.java +++ b/src/com/android/settings/cyanogenmod/QuickSettings.java @@ -16,23 +16,33 @@ package com.android.settings.cyanogenmod; -import android.bluetooth.BluetoothAdapter; +import static com.android.internal.util.cm.QSConstants.TILE_BLUETOOTH; +import static com.android.internal.util.cm.QSConstants.TILE_MOBILEDATA; +import static com.android.internal.util.cm.QSConstants.TILE_NETWORKMODE; +import static com.android.internal.util.cm.QSConstants.TILE_NFC; +import static com.android.internal.util.cm.QSConstants.TILE_PROFILE; +import static com.android.internal.util.cm.QSConstants.TILE_WIFIAP; +import static com.android.internal.util.cm.QSConstants.TILE_LTE; +import static com.android.internal.util.cm.QSConstants.TILE_TORCH; +import static com.android.internal.util.cm.QSUtils.deviceSupportsBluetooth; +import static com.android.internal.util.cm.QSUtils.deviceSupportsImeSwitcher; +import static com.android.internal.util.cm.QSUtils.deviceSupportsLte; +import static com.android.internal.util.cm.QSUtils.deviceSupportsNfc; +import static com.android.internal.util.cm.QSUtils.deviceSupportsUsbTether; +import static com.android.internal.util.cm.QSUtils.deviceSupportsWifiDisplay; +import static com.android.internal.util.cm.QSUtils.systemProfilesEnabled; + import android.content.ContentResolver; -import android.content.Context; import android.content.pm.PackageManager; import android.content.res.Resources; -import android.hardware.display.DisplayManager; -import android.hardware.display.WifiDisplayStatus; -import android.net.ConnectivityManager; -import android.nfc.NfcAdapter; import android.os.Bundle; import android.preference.CheckBoxPreference; import android.preference.ListPreference; import android.preference.MultiSelectListPreference; import android.preference.Preference; import android.preference.Preference.OnPreferenceChangeListener; -import android.preference.PreferenceScreen; import android.preference.PreferenceCategory; +import android.preference.PreferenceScreen; import android.provider.Settings; import android.text.TextUtils; import android.util.Log; @@ -140,10 +150,17 @@ public class QuickSettings extends SettingsPreferenceFragment implements OnPrefe mDynamicBugReport = (CheckBoxPreference) prefSet.findPreference(DYNAMIC_BUGREPORT); mDynamicBugReport.setChecked(Settings.System.getInt(resolver, Settings.System.QS_DYNAMIC_BUGREPORT, 1) == 1); mDynamicIme = (CheckBoxPreference) prefSet.findPreference(DYNAMIC_IME); - mDynamicIme.setChecked(Settings.System.getInt(resolver, Settings.System.QS_DYNAMIC_IME, 1) == 1); + if (mDynamicIme != null) { + if (deviceSupportsImeSwitcher(getActivity())) { + mDynamicIme.setChecked(Settings.System.getInt(resolver, Settings.System.QS_DYNAMIC_IME, 1) == 1); + } else { + mDynamicTiles.removePreference(mDynamicIme); + mDynamicIme = null; + } + } mDynamicUsbTether = (CheckBoxPreference) prefSet.findPreference(DYNAMIC_USBTETHER); if (mDynamicUsbTether != null) { - if (deviceSupportsUsbTether()) { + if (deviceSupportsUsbTether(getActivity())) { mDynamicUsbTether.setChecked(Settings.System.getInt(resolver, Settings.System.QS_DYNAMIC_USBTETHER, 1) == 1); } else { mDynamicTiles.removePreference(mDynamicUsbTether); @@ -152,7 +169,7 @@ public class QuickSettings extends SettingsPreferenceFragment implements OnPrefe } mDynamicWifi = (CheckBoxPreference) prefSet.findPreference(DYNAMIC_WIFI); if (mDynamicWifi != null) { - if (deviceSupportsWifiDisplay()) { + if (deviceSupportsWifiDisplay(getActivity())) { mDynamicWifi.setChecked(Settings.System.getInt(resolver, Settings.System.QS_DYNAMIC_WIFI, 1) == 1); } else { mDynamicTiles.removePreference(mDynamicWifi); @@ -163,14 +180,12 @@ public class QuickSettings extends SettingsPreferenceFragment implements OnPrefe // Don't show mobile data options if not supported boolean isMobileData = pm.hasSystemFeature(PackageManager.FEATURE_TELEPHONY); if (!isMobileData) { - QuickSettingsUtil.TILES.remove(QuickSettingsUtil.TILE_MOBILEDATA); - QuickSettingsUtil.TILES.remove(QuickSettingsUtil.TILE_WIFIAP); - QuickSettingsUtil.TILES.remove(QuickSettingsUtil.TILE_NETWORKMODE); - if(mNetworkMode != null) + QuickSettingsUtil.TILES.remove(TILE_MOBILEDATA); + QuickSettingsUtil.TILES.remove(TILE_WIFIAP); + QuickSettingsUtil.TILES.remove(TILE_NETWORKMODE); + if(mNetworkMode != null) { mStaticTiles.removePreference(mNetworkMode); - QuickSettingsUtil.TILES_DEFAULT.remove(QuickSettingsUtil.TILE_WIFIAP); - QuickSettingsUtil.TILES_DEFAULT.remove(QuickSettingsUtil.TILE_MOBILEDATA); - QuickSettingsUtil.TILES_DEFAULT.remove(QuickSettingsUtil.TILE_NETWORKMODE); + } } else { // We have telephony support however, some phones run on networks not supported // by the networkmode tile so remove both it and the associated options list @@ -190,26 +205,35 @@ public class QuickSettings extends SettingsPreferenceFragment implements OnPrefe case Phone.NT_MODE_GSM_ONLY: break; default: - QuickSettingsUtil.TILES.remove(QuickSettingsUtil.TILE_NETWORKMODE); + QuickSettingsUtil.TILES.remove(TILE_NETWORKMODE); mStaticTiles.removePreference(mNetworkMode); break; } } // Don't show the bluetooth options if not supported - if (BluetoothAdapter.getDefaultAdapter() == null) { - QuickSettingsUtil.TILES.remove(QuickSettingsUtil.TILE_BLUETOOTH); - QuickSettingsUtil.TILES_DEFAULT.remove(QuickSettingsUtil.TILE_BLUETOOTH); + if (!deviceSupportsBluetooth()) { + QuickSettingsUtil.TILES.remove(TILE_BLUETOOTH); } // Dont show the profiles tile if profiles are disabled - if (Settings.System.getInt(resolver, Settings.System.SYSTEM_PROFILES_ENABLED, 1) != 1) { - QuickSettingsUtil.TILES.remove(QuickSettingsUtil.TILE_PROFILE); + if (!systemProfilesEnabled(resolver)) { + QuickSettingsUtil.TILES.remove(TILE_PROFILE); } // Dont show the NFC tile if not supported - if (NfcAdapter.getDefaultAdapter(getActivity()) == null) { - QuickSettingsUtil.TILES.remove(QuickSettingsUtil.TILE_NFC); + if (!deviceSupportsNfc(getActivity())) { + QuickSettingsUtil.TILES.remove(TILE_NFC); + } + + // Dont show the LTE tile if not supported + if (!deviceSupportsLte(getActivity())) { + QuickSettingsUtil.TILES.remove(TILE_LTE); + } + + // Dont show the torch tile if not supported + if (!getResources().getBoolean(R.bool.has_led_flash)) { + QuickSettingsUtil.TILES.remove(TILE_TORCH); } } @@ -224,7 +248,7 @@ public class QuickSettings extends SettingsPreferenceFragment implements OnPrefe Settings.System.putInt(resolver, Settings.System.QS_DYNAMIC_BUGREPORT, mDynamicBugReport.isChecked() ? 1 : 0); return true; - } else if (preference == mDynamicIme) { + } else if (mDynamicIme != null && preference == mDynamicIme) { Settings.System.putInt(resolver, Settings.System.QS_DYNAMIC_IME, mDynamicIme.isChecked() ? 1 : 0); return true; @@ -333,14 +357,4 @@ public class QuickSettings extends SettingsPreferenceFragment implements OnPrefe return val.toString().split(SEPARATOR); } } - - private boolean deviceSupportsUsbTether() { - ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); - return (cm.getTetherableUsbRegexs().length != 0); - } - - private boolean deviceSupportsWifiDisplay() { - DisplayManager dm = (DisplayManager) getSystemService(Context.DISPLAY_SERVICE); - return (dm.getWifiDisplayStatus().getFeatureState() != WifiDisplayStatus.FEATURE_STATE_UNAVAILABLE); - } } diff --git a/src/com/android/settings/cyanogenmod/QuickSettingsUtil.java b/src/com/android/settings/cyanogenmod/QuickSettingsUtil.java index 100dd76..4a512f1 100644 --- a/src/com/android/settings/cyanogenmod/QuickSettingsUtil.java +++ b/src/com/android/settings/cyanogenmod/QuickSettingsUtil.java @@ -16,69 +16,43 @@ package com.android.settings.cyanogenmod; -import com.android.internal.telephony.PhoneConstants; -import com.android.settings.R; - -import android.content.Context; -import android.net.wimax.WimaxHelper; -import android.provider.Settings; -import android.telephony.TelephonyManager; -import android.text.TextUtils; +import static com.android.internal.util.cm.QSConstants.TILES_DEFAULT; +import static com.android.internal.util.cm.QSConstants.TILE_AIRPLANE; +import static com.android.internal.util.cm.QSConstants.TILE_AUTOROTATE; +import static com.android.internal.util.cm.QSConstants.TILE_BATTERY; +import static com.android.internal.util.cm.QSConstants.TILE_BLUETOOTH; +import static com.android.internal.util.cm.QSConstants.TILE_BRIGHTNESS; +import static com.android.internal.util.cm.QSConstants.TILE_DELIMITER; +import static com.android.internal.util.cm.QSConstants.TILE_GPS; +import static com.android.internal.util.cm.QSConstants.TILE_LOCKSCREEN; +import static com.android.internal.util.cm.QSConstants.TILE_LTE; +import static com.android.internal.util.cm.QSConstants.TILE_MOBILEDATA; +import static com.android.internal.util.cm.QSConstants.TILE_NETWORKMODE; +import static com.android.internal.util.cm.QSConstants.TILE_NFC; +import static com.android.internal.util.cm.QSConstants.TILE_PROFILE; +import static com.android.internal.util.cm.QSConstants.TILE_QUIETHOURS; +import static com.android.internal.util.cm.QSConstants.TILE_RINGER; +import static com.android.internal.util.cm.QSConstants.TILE_SCREENTIMEOUT; +import static com.android.internal.util.cm.QSConstants.TILE_SETTINGS; +import static com.android.internal.util.cm.QSConstants.TILE_SLEEP; +import static com.android.internal.util.cm.QSConstants.TILE_SYNC; +import static com.android.internal.util.cm.QSConstants.TILE_TORCH; +import static com.android.internal.util.cm.QSConstants.TILE_USER; +import static com.android.internal.util.cm.QSConstants.TILE_VOLUME; +import static com.android.internal.util.cm.QSConstants.TILE_WIFI; +import static com.android.internal.util.cm.QSConstants.TILE_WIFIAP; import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedHashMap; -/** - * THIS CLASS'S DATA MUST BE KEPT UP-TO-DATE WITH THE DATA IN - * com.android.systemui.statusbar.phone.QuickSettingsController - * IN THE SystemUI PACKAGE. - */ -public class QuickSettingsUtil { - /** - * START OF DATA MATCHING BLOCK - */ - public static final String TILE_USER = "toggleUser"; - public static final String TILE_BATTERY = "toggleBattery"; - public static final String TILE_SETTINGS = "toggleSettings"; - public static final String TILE_WIFI = "toggleWifi"; - public static final String TILE_GPS = "toggleGPS"; - public static final String TILE_BLUETOOTH = "toggleBluetooth"; - public static final String TILE_BRIGHTNESS = "toggleBrightness"; - public static final String TILE_SOUND = "toggleSound"; - public static final String TILE_SYNC = "toggleSync"; - public static final String TILE_WIFIAP = "toggleWifiAp"; - public static final String TILE_SCREENTIMEOUT = "toggleScreenTimeout"; - public static final String TILE_MOBILEDATA = "toggleMobileData"; - public static final String TILE_LOCKSCREEN = "toggleLockScreen"; - public static final String TILE_NETWORKMODE = "toggleNetworkMode"; - public static final String TILE_AUTOROTATE = "toggleAutoRotate"; - public static final String TILE_AIRPLANE = "toggleAirplane"; - public static final String TILE_TORCH = "toggleFlashlight"; // Keep old string for compatibility - public static final String TILE_SLEEP = "toggleSleepMode"; - public static final String TILE_LTE = "toggleLte"; - public static final String TILE_WIMAX = "toggleWimax"; - public static final String TILE_PROFILE = "toggleProfile"; - public static final String TILE_NFC = "toggleNfc"; - public static final String TILE_QUIETHOURS = "toggleQuietHours"; - - private static final String TILE_DELIMITER = "|"; - protected static ArrayList<String> TILES_DEFAULT = new ArrayList<String>(); +import android.content.Context; +import android.provider.Settings; +import android.text.TextUtils; - static { - TILES_DEFAULT.add(TILE_USER); - TILES_DEFAULT.add(TILE_BRIGHTNESS); - TILES_DEFAULT.add(TILE_SETTINGS); - TILES_DEFAULT.add(TILE_WIFI); - TILES_DEFAULT.add(TILE_MOBILEDATA); - TILES_DEFAULT.add(TILE_BATTERY); - TILES_DEFAULT.add(TILE_AIRPLANE); - TILES_DEFAULT.add(TILE_BLUETOOTH); - } +import com.android.settings.R; - /** - * END OF DATA MATCHING BLOCK - */ +public class QuickSettingsUtil { // Keep sorted according to titleResId's string value public static final LinkedHashMap<String, TileInfo> TILES = new LinkedHashMap<String, TileInfo>(); @@ -107,6 +81,9 @@ public class QuickSettingsUtil { TILES.put(TILE_LOCKSCREEN, new QuickSettingsUtil.TileInfo( TILE_LOCKSCREEN, R.string.title_tile_lockscreen, "com.android.systemui:drawable/ic_qs_lock_screen_off")); + TILES.put(TILE_LTE, new QuickSettingsUtil.TileInfo( + TILE_LTE, R.string.title_tile_lte, + "com.android.systemui:drawable/ic_qs_lte_off")); TILES.put(TILE_MOBILEDATA, new QuickSettingsUtil.TileInfo( TILE_MOBILEDATA, R.string.title_tile_mobiledata, "com.android.systemui:drawable/ic_qs_signal_4")); @@ -128,8 +105,8 @@ public class QuickSettingsUtil { TILES.put(TILE_SLEEP, new QuickSettingsUtil.TileInfo( TILE_SLEEP, R.string.title_tile_sleep, "com.android.systemui:drawable/ic_qs_sleep")); - TILES.put(TILE_SOUND, new QuickSettingsUtil.TileInfo( - TILE_SOUND, R.string.title_tile_sound, + TILES.put(TILE_RINGER, new QuickSettingsUtil.TileInfo( + TILE_RINGER, R.string.title_tile_sound, "com.android.systemui:drawable/ic_qs_ring_on")); TILES.put(TILE_SYNC, new QuickSettingsUtil.TileInfo( TILE_SYNC, R.string.title_tile_sync, @@ -140,6 +117,9 @@ public class QuickSettingsUtil { TILES.put(TILE_TORCH, new QuickSettingsUtil.TileInfo( TILE_TORCH, R.string.title_tile_torch, "com.android.systemui:drawable/ic_qs_torch_off")); + TILES.put(TILE_VOLUME, new QuickSettingsUtil.TileInfo( + TILE_VOLUME, R.string.title_tile_volume, + "com.android.systemui:drawable/ic_qs_volume")); TILES.put(TILE_WIFI, new QuickSettingsUtil.TileInfo( TILE_WIFI, R.string.title_tile_wifi, "com.android.systemui:drawable/ic_qs_wifi_4")); @@ -149,17 +129,6 @@ public class QuickSettingsUtil { TILES.put(TILE_USER, new QuickSettingsUtil.TileInfo( TILE_USER, R.string.title_tile_user, "com.android.systemui:drawable/ic_qs_default_user")); - -// These toggles are not available yet. Comment out for now -// if(PhoneConstants.LTE_ON_CDMA_TRUE == TelephonyManager.getDefault().getLteOnCdmaMode() || -// TelephonyManager.getDefault().getLteOnGsmMode() != 0) { -// TILES.put(TILE_LTE, new QuickSettingsUtil.TileInfo( -// TILE_LTE, R.string.title_tile_lte, -// "com.android.systemui:drawable/stat_lte_on")); -// } -// TILES.put(TILE_WIMAX, new QuickSettingsUtil.TileInfo( -// TILE_WIMAX, R.string.title_tile_wimax, -// "com.android.systemui:drawable/stat_wimax_on")); } public static String getCurrentTiles(Context context) { diff --git a/src/com/android/settings/cyanogenmod/SystemSettings.java b/src/com/android/settings/cyanogenmod/SystemSettings.java index d34b00d..1c07877 100644 --- a/src/com/android/settings/cyanogenmod/SystemSettings.java +++ b/src/com/android/settings/cyanogenmod/SystemSettings.java @@ -41,6 +41,8 @@ public class SystemSettings extends SettingsPreferenceFragment { private static final String KEY_BATTERY_LIGHT = "battery_light"; private static final String KEY_HARDWARE_KEYS = "hardware_keys"; private static final String KEY_NAVIGATION_BAR = "navigation_bar"; + private static final String KEY_NAVIGATION_RING = "navigation_ring"; + private static final String KEY_NAVIGATION_BAR_CATEGORY = "navigation_bar_category"; private static final String KEY_LOCK_CLOCK = "lock_clock"; private static final String KEY_STATUS_BAR = "status_bar"; private static final String KEY_QUICK_SETTINGS = "quick_settings_panel"; @@ -95,12 +97,16 @@ public class SystemSettings extends SettingsPreferenceFragment { } if (removeNavbar) { prefScreen.removePreference(findPreference(KEY_NAVIGATION_BAR)); + prefScreen.removePreference(findPreference(KEY_NAVIGATION_RING)); + prefScreen.removePreference(findPreference(KEY_NAVIGATION_BAR_CATEGORY)); } } else { // Secondary user is logged in, remove all primary user specific preferences prefScreen.removePreference(findPreference(KEY_BATTERY_LIGHT)); prefScreen.removePreference(findPreference(KEY_HARDWARE_KEYS)); prefScreen.removePreference(findPreference(KEY_NAVIGATION_BAR)); + prefScreen.removePreference(findPreference(KEY_NAVIGATION_RING)); + prefScreen.removePreference(findPreference(KEY_NAVIGATION_BAR_CATEGORY)); prefScreen.removePreference(findPreference(KEY_STATUS_BAR)); prefScreen.removePreference(findPreference(KEY_QUICK_SETTINGS)); prefScreen.removePreference(findPreference(KEY_POWER_MENU)); diff --git a/src/com/android/settings/cyanogenmod/superuser/MultitaskSuRequestActivity.java b/src/com/android/settings/cyanogenmod/superuser/MultitaskSuRequestActivity.java new file mode 100644 index 0000000..0103076 --- /dev/null +++ b/src/com/android/settings/cyanogenmod/superuser/MultitaskSuRequestActivity.java @@ -0,0 +1,4 @@ +package com.android.settings.cyanogenmod.superuser; + +public class MultitaskSuRequestActivity extends com.koushikdutta.superuser.MultitaskSuRequestActivity { +}
\ No newline at end of file diff --git a/src/com/android/settings/cyanogenmod/superuser/NotifyActivity.java b/src/com/android/settings/cyanogenmod/superuser/NotifyActivity.java new file mode 100644 index 0000000..23aa6a7 --- /dev/null +++ b/src/com/android/settings/cyanogenmod/superuser/NotifyActivity.java @@ -0,0 +1,4 @@ +package com.android.settings.cyanogenmod.superuser; + +public class NotifyActivity extends com.koushikdutta.superuser.NotifyActivity { +}
\ No newline at end of file diff --git a/src/com/android/settings/cyanogenmod/superuser/PolicyNativeFragment.java b/src/com/android/settings/cyanogenmod/superuser/PolicyNativeFragment.java new file mode 100644 index 0000000..b7d5fc4 --- /dev/null +++ b/src/com/android/settings/cyanogenmod/superuser/PolicyNativeFragment.java @@ -0,0 +1,64 @@ +package com.android.settings.cyanogenmod.superuser; + +import android.content.res.Resources; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ListView; + +import com.android.settings.Utils; +import com.koushikdutta.superuser.LogNativeFragment; +import com.koushikdutta.superuser.PolicyFragmentInternal; +import com.koushikdutta.superuser.SettingsNativeFragment; + +public class PolicyNativeFragment extends com.koushikdutta.superuser.PolicyNativeFragment { + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View view = super.onCreateView(inflater, container, savedInstanceState); + Utils.forcePrepareCustomPreferencesList(container, view, getInternal().getListView(), false); + return view; + } + + @Override + public PolicyFragmentInternal createFragmentInterface() { + return new FragmentInternal(this) { + @Override + protected LogNativeFragment createLogNativeFragment() { + return new LogNativeFragment() { + @Override + public View onCreateView(LayoutInflater inflater, + ViewGroup container, Bundle savedInstanceState) { + View view = super.onCreateView(inflater, container, savedInstanceState); + adjustListPadding(getInternal().getListView()); + return view; + } + }; + } + + @Override + protected SettingsNativeFragment createSettingsNativeFragment() { + return new SettingsNativeFragment() { + @Override + public View onCreateView(LayoutInflater inflater, + ViewGroup container, Bundle savedInstanceState) { + View view = super.onCreateView(inflater, container, savedInstanceState); + adjustListPadding(getInternal().getListView()); + return view; + } + }; + }; + }; + } + + private static void adjustListPadding(ListView list) { + final Resources res = list.getResources(); + final int paddingSide = res.getDimensionPixelSize( + com.android.internal.R.dimen.preference_fragment_padding_side); + final int paddingBottom = res.getDimensionPixelSize( + com.android.internal.R.dimen.preference_fragment_padding_bottom); + + list.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY); + list.setPadding(paddingSide, 0, paddingSide, paddingBottom); + } +} diff --git a/src/com/android/settings/cyanogenmod/superuser/RequestActivity.java b/src/com/android/settings/cyanogenmod/superuser/RequestActivity.java new file mode 100644 index 0000000..e6deca4 --- /dev/null +++ b/src/com/android/settings/cyanogenmod/superuser/RequestActivity.java @@ -0,0 +1,4 @@ +package com.android.settings.cyanogenmod.superuser; + +public class RequestActivity extends com.koushikdutta.superuser.RequestActivity { +}
\ No newline at end of file diff --git a/src/com/android/settings/cyanogenmod/superuser/SuReceiver.java b/src/com/android/settings/cyanogenmod/superuser/SuReceiver.java new file mode 100644 index 0000000..c4f9174 --- /dev/null +++ b/src/com/android/settings/cyanogenmod/superuser/SuReceiver.java @@ -0,0 +1,4 @@ +package com.android.settings.cyanogenmod.superuser; + +public class SuReceiver extends com.koushikdutta.superuser.SuReceiver { +}
\ No newline at end of file |