Merge "Set the same vibrate settings for ringer and notifications." into ics-mr1
diff --git a/res/layout/preference_progress_category.xml b/res/layout/preference_progress_category.xml
index af411ee..0a860af 100644
--- a/res/layout/preference_progress_category.xml
+++ b/res/layout/preference_progress_category.xml
@@ -30,7 +30,7 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
- android:layout_gravity="center_vertical"
+ android:layout_gravity="left|bottom"
/>
<TextView
@@ -38,10 +38,10 @@
android:background="@null"
android:paddingLeft="0dip"
android:id="@+id/scanning_text"
- android:layout_width="wrap_content"
+ android:layout_width="0dp"
android:layout_height="wrap_content"
- android:layout_gravity="center_vertical"
- android:layout_marginRight="5sp"
+ android:layout_weight="1"
+ android:layout_gravity="right|bottom"
android:text="@string/progress_scanning"
/>
@@ -51,6 +51,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
+ android:layout_marginLeft="16dip"
android:layout_marginRight="16dip"
style="?android:attr/progressBarStyleSmallTitle"
/>
diff --git a/src/com/android/settings/IccLockSettings.java b/src/com/android/settings/IccLockSettings.java
index 0df69a0..755be83 100644
--- a/src/com/android/settings/IccLockSettings.java
+++ b/src/com/android/settings/IccLockSettings.java
@@ -16,7 +16,10 @@
package com.android.settings;
+import android.content.BroadcastReceiver;
import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
import android.content.res.Resources;
import android.os.AsyncResult;
import android.os.Bundle;
@@ -30,6 +33,7 @@
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.PhoneFactory;
+import com.android.internal.telephony.TelephonyIntents;
/**
* Implements the preference screen to enable/disable ICC lock and
@@ -40,7 +44,7 @@
* these operations.
*
*/
-public class IccLockSettings extends PreferenceActivity
+public class IccLockSettings extends PreferenceActivity
implements EditPinPreference.OnPinEnteredListener {
private static final int OFF_MODE = 0;
@@ -52,7 +56,7 @@
private static final int ICC_NEW_MODE = 3;
// State when entering the new pin - second time
private static final int ICC_REENTER_MODE = 4;
-
+
// Keys in xml file
private static final String PIN_DIALOG = "sim_pin";
private static final String PIN_TOGGLE = "sim_toggle";
@@ -66,55 +70,68 @@
// (ex. portrait<-->landscape) during change PIN code
private static final String OLD_PINCODE = "oldPinCode";
private static final String NEW_PINCODE = "newPinCode";
-
+
private static final int MIN_PIN_LENGTH = 4;
private static final int MAX_PIN_LENGTH = 8;
// Which dialog to show next when popped up
private int mDialogState = OFF_MODE;
-
+
private String mPin;
private String mOldPin;
private String mNewPin;
private String mError;
// Are we trying to enable or disable ICC lock?
private boolean mToState;
-
+
private Phone mPhone;
-
+
private EditPinPreference mPinDialog;
private CheckBoxPreference mPinToggle;
-
+
private Resources mRes;
// For async handler to identify request type
- private static final int ENABLE_ICC_PIN_COMPLETE = 100;
- private static final int CHANGE_ICC_PIN_COMPLETE = 101;
+ private static final int MSG_ENABLE_ICC_PIN_COMPLETE = 100;
+ private static final int MSG_CHANGE_ICC_PIN_COMPLETE = 101;
+ private static final int MSG_SIM_STATE_CHANGED = 102;
// For replies from IccCard interface
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
AsyncResult ar = (AsyncResult) msg.obj;
switch (msg.what) {
- case ENABLE_ICC_PIN_COMPLETE:
+ case MSG_ENABLE_ICC_PIN_COMPLETE:
iccLockChanged(ar.exception == null);
break;
- case CHANGE_ICC_PIN_COMPLETE:
+ case MSG_CHANGE_ICC_PIN_COMPLETE:
iccPinChanged(ar.exception == null);
break;
+ case MSG_SIM_STATE_CHANGED:
+ updatePreferences();
+ break;
}
return;
}
};
-
+
+ private final BroadcastReceiver mSimStateReceiver = new BroadcastReceiver() {
+ public void onReceive(Context context, Intent intent) {
+ final String action = intent.getAction();
+ if (TelephonyIntents.ACTION_SIM_STATE_CHANGED.equals(action)) {
+ mHandler.sendMessage(mHandler.obtainMessage(MSG_SIM_STATE_CHANGED));
+ }
+ }
+ };
+
// For top-level settings screen to query
static boolean isIccLockEnabled() {
return PhoneFactory.getDefaultPhone().getIccCard().getIccLockEnabled();
}
-
+
static String getSummary(Context context) {
Resources res = context.getResources();
- String summary = isIccLockEnabled()
+ String summary = isIccLockEnabled()
? res.getString(R.string.sim_lock_on)
: res.getString(R.string.sim_lock_off);
return summary;
@@ -158,20 +175,28 @@
}
mPinDialog.setOnPinEnteredListener(this);
-
+
// Don't need any changes to be remembered
getPreferenceScreen().setPersistent(false);
-
+
mPhone = PhoneFactory.getDefaultPhone();
mRes = getResources();
+ updatePreferences();
}
-
+
+ private void updatePreferences() {
+ mPinToggle.setChecked(mPhone.getIccCard().getIccLockEnabled());
+ }
+
@Override
protected void onResume() {
super.onResume();
-
- mPinToggle.setChecked(mPhone.getIccCard().getIccLockEnabled());
-
+
+ // ACTION_SIM_STATE_CHANGED is sticky, so we'll receive current state after this call,
+ // which will call updatePreferences().
+ final IntentFilter filter = new IntentFilter(TelephonyIntents.ACTION_SIM_STATE_CHANGED);
+ registerReceiver(mSimStateReceiver, filter);
+
if (mDialogState != OFF_MODE) {
showPinDialog();
} else {
@@ -179,7 +204,13 @@
resetDialogState();
}
}
-
+
+ @Override
+ protected void onPause() {
+ super.onPause();
+ unregisterReceiver(mSimStateReceiver);
+ }
+
@Override
protected void onSaveInstanceState(Bundle out) {
// Need to store this state for slider open/close
@@ -219,17 +250,17 @@
return;
}
setDialogValues();
-
+
mPinDialog.showPinDialog();
}
-
+
private void setDialogValues() {
mPinDialog.setText(mPin);
String message = "";
switch (mDialogState) {
case ICC_LOCK_MODE:
message = mRes.getString(R.string.sim_enter_pin);
- mPinDialog.setDialogTitle(mToState
+ mPinDialog.setDialogTitle(mToState
? mRes.getString(R.string.sim_enable_sim_lock)
: mRes.getString(R.string.sim_disable_sim_lock));
break;
@@ -258,7 +289,7 @@
resetDialogState();
return;
}
-
+
mPin = preference.getText();
if (!reasonablePin(mPin)) {
// inject error message and display dialog again
@@ -296,13 +327,13 @@
break;
}
}
-
+
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
if (preference == mPinToggle) {
// Get the new, preferred state
mToState = mPinToggle.isChecked();
- // Flip it back and pop up pin dialog
- mPinToggle.setChecked(!mToState);
+ // Flip it back and pop up pin dialog
+ mPinToggle.setChecked(!mToState);
mDialogState = ICC_LOCK_MODE;
showPinDialog();
} else if (preference == mPinDialog) {
@@ -313,13 +344,13 @@
}
private void tryChangeIccLockState() {
- // Try to change icc lock. If it succeeds, toggle the lock state and
+ // Try to change icc lock. If it succeeds, toggle the lock state and
// reset dialog state. Else inject error message and show dialog again.
- Message callback = Message.obtain(mHandler, ENABLE_ICC_PIN_COMPLETE);
+ Message callback = Message.obtain(mHandler, MSG_ENABLE_ICC_PIN_COMPLETE);
mPhone.getIccCard().setIccLockEnabled(mToState, mPin, callback);
}
-
+
private void iccLockChanged(boolean success) {
if (success) {
mPinToggle.setChecked(mToState);
@@ -345,7 +376,7 @@
}
private void tryChangePin() {
- Message callback = Message.obtain(mHandler, CHANGE_ICC_PIN_COMPLETE);
+ Message callback = Message.obtain(mHandler, MSG_CHANGE_ICC_PIN_COMPLETE);
mPhone.getIccCard().changeIccLockPassword(mOldPin,
mNewPin, callback);
}
diff --git a/src/com/android/settings/ProgressCategory.java b/src/com/android/settings/ProgressCategory.java
index e854a00..c1b25d8 100644
--- a/src/com/android/settings/ProgressCategory.java
+++ b/src/com/android/settings/ProgressCategory.java
@@ -36,14 +36,14 @@
@Override
public void onBindView(View view) {
super.onBindView(view);
- final TextView textView = (TextView) view.findViewById(R.id.scanning_text);
+ final TextView scanning = (TextView) view.findViewById(R.id.scanning_text);
final View progressBar = view.findViewById(R.id.scanning_progress);
- textView.setText(mProgress ? R.string.progress_scanning : R.string.progress_tap_to_pair);
+ scanning.setText(mProgress ? R.string.progress_scanning : R.string.progress_tap_to_pair);
boolean noDeviceFound = (getPreferenceCount() == 0 ||
(getPreferenceCount() == 1 && getPreference(0) == mNoDeviceFoundPreference));
- textView.setVisibility(noDeviceFound ? View.INVISIBLE : View.VISIBLE);
- progressBar.setVisibility(mProgress ? View.VISIBLE : View.INVISIBLE);
+ scanning.setVisibility(noDeviceFound ? View.GONE : View.VISIBLE);
+ progressBar.setVisibility(mProgress ? View.VISIBLE : View.GONE);
if (mProgress || !noDeviceFound) {
if (mNoDeviceFoundAdded) {
diff --git a/src/com/android/settings/applications/RunningState.java b/src/com/android/settings/applications/RunningState.java
index beb9605..1b5310d 100644
--- a/src/com/android/settings/applications/RunningState.java
+++ b/src/com/android/settings/applications/RunningState.java
@@ -815,7 +815,7 @@
// Build the chains from client processes to the process they are
// dependent on; also remove any old running processes.
int NRP = mRunningProcesses.size();
- for (int i=0; i<NRP; i++) {
+ for (int i = 0; i < NRP;) {
ProcessItem proc = mRunningProcesses.valueAt(i);
if (proc.mRunningSeq == mSequence) {
int clientPid = proc.mRunningProcessInfo.importanceReasonPid;
@@ -833,9 +833,11 @@
// we will detect the change.
proc.mClient = null;
}
+ i++;
} else {
changed = true;
mRunningProcesses.remove(mRunningProcesses.keyAt(i));
+ NRP--;
}
}