summaryrefslogtreecommitdiffstats
path: root/src/com/android
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android')
-rw-r--r--src/com/android/settings/DevelopmentSettings.java5
-rw-r--r--src/com/android/settings/DisplaySettings.java2
-rw-r--r--src/com/android/settings/LocationSettings.java1
-rw-r--r--src/com/android/settings/SecuritySettings.java30
-rw-r--r--src/com/android/settings/Settings.java4
-rw-r--r--src/com/android/settings/SoundSettings.java10
-rw-r--r--src/com/android/settings/TetherSettings.java2
-rw-r--r--src/com/android/settings/cyanogenmod/NavRing.java316
-rw-r--r--src/com/android/settings/cyanogenmod/QuickSettings.java86
-rw-r--r--src/com/android/settings/cyanogenmod/QuickSettingsUtil.java107
-rw-r--r--src/com/android/settings/cyanogenmod/SystemSettings.java6
-rw-r--r--src/com/android/settings/cyanogenmod/superuser/MultitaskSuRequestActivity.java4
-rw-r--r--src/com/android/settings/cyanogenmod/superuser/NotifyActivity.java4
-rw-r--r--src/com/android/settings/cyanogenmod/superuser/PolicyNativeFragment.java64
-rw-r--r--src/com/android/settings/cyanogenmod/superuser/RequestActivity.java4
-rw-r--r--src/com/android/settings/cyanogenmod/superuser/SuReceiver.java4
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