Merge "Import translations. DO NOT MERGE" into jb-mr2-dev
diff --git a/res/layout/dream_info_row.xml b/res/layout/dream_info_row.xml
index acc3a65..e8dd824 100644
--- a/res/layout/dream_info_row.xml
+++ b/res/layout/dream_info_row.xml
@@ -24,6 +24,8 @@
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_toStartOf="@+id/divider"
+        android:clickable="true"
+        android:focusable="true"
         android:background="?android:attr/selectableItemBackground" >
 
         <!-- Dream icon -->
@@ -95,6 +97,8 @@
         android:background="?android:attr/selectableItemBackground"
         android:contentDescription="@string/screensaver_settings_button"
         android:padding="8dip"
+        android:clickable="true"
+        android:focusable="true"
         android:src="@drawable/ic_bt_config" />
 
-</RelativeLayout>
\ No newline at end of file
+</RelativeLayout>
diff --git a/src/com/android/settings/DreamBackend.java b/src/com/android/settings/DreamBackend.java
index 70124ef..1522705 100644
--- a/src/com/android/settings/DreamBackend.java
+++ b/src/com/android/settings/DreamBackend.java
@@ -277,6 +277,9 @@
             Log.w(TAG, "Error parsing : " + resolveInfo.serviceInfo.packageName, caughtException);
             return null;
         }
+        if (cn != null && cn.indexOf('/') < 0) {
+            cn = resolveInfo.serviceInfo.packageName + "/" + cn;
+        }
         return cn == null ? null : ComponentName.unflattenFromString(cn);
     }
 
diff --git a/src/com/android/settings/DreamSettings.java b/src/com/android/settings/DreamSettings.java
index 5c9f1cf..1c8f988 100644
--- a/src/com/android/settings/DreamSettings.java
+++ b/src/com/android/settings/DreamSettings.java
@@ -123,6 +123,8 @@
 
         ListView listView = getListView();
 
+        listView.setItemsCanFocus(true);
+
         TextView emptyView = (TextView) getView().findViewById(android.R.id.empty);
         emptyView.setText(R.string.screensaver_settings_disabled_prompt);
         listView.setEmptyView(emptyView);
@@ -318,6 +320,7 @@
             settingsButton.setVisibility(showSettings ? View.VISIBLE : View.INVISIBLE);
             settingsButton.setAlpha(dreamInfo.isActive ? 1f : Utils.DISABLED_ALPHA);
             settingsButton.setEnabled(dreamInfo.isActive);
+            settingsButton.setFocusable(dreamInfo.isActive);
             settingsButton.setOnClickListener(new OnClickListener(){
                 @Override
                 public void onClick(View v) {
@@ -329,7 +332,8 @@
 
         private View createDreamInfoRow(ViewGroup parent) {
             final View row =  mInflater.inflate(R.layout.dream_info_row, parent, false);
-            row.setOnClickListener(new OnClickListener(){
+            final View header = row.findViewById(android.R.id.widget_frame);
+            header.setOnClickListener(new OnClickListener(){
                 @Override
                 public void onClick(View v) {
                     v.setPressed(true);
diff --git a/src/com/android/settings/NotificationStation.java b/src/com/android/settings/NotificationStation.java
index b56fbd4..1242d85 100644
--- a/src/com/android/settings/NotificationStation.java
+++ b/src/com/android/settings/NotificationStation.java
@@ -160,35 +160,39 @@
         public int priority;
         public int user;
         public long timestamp;
+        public boolean active;
     }
 
     private List<HistoricalNotificationInfo> loadNotifications() {
         final int currentUserId = ActivityManager.getCurrentUser();
         try {
-            StatusBarNotification[] nions;
-            nions = SHOW_HISTORICAL_NOTIFICATIONS
-                    ? mNoMan.getHistoricalNotifications(mContext.getPackageName(), 50)
-                    : mNoMan.getActiveNotifications(mContext.getPackageName());
+            StatusBarNotification[] active = mNoMan.getActiveNotifications(mContext.getPackageName());
+            StatusBarNotification[] dismissed = mNoMan.getHistoricalNotifications(mContext.getPackageName(), 50);
 
             List<HistoricalNotificationInfo> list
-                    = new ArrayList<HistoricalNotificationInfo>(nions.length);
+                    = new ArrayList<HistoricalNotificationInfo>(active.length + dismissed.length);
 
-            for (StatusBarNotification sbn : nions) {
-                final HistoricalNotificationInfo info = new HistoricalNotificationInfo();
-                info.pkg = sbn.pkg;
-                info.user = sbn.getUserId();
-                info.icon = loadIconDrawable(info.pkg, info.user, sbn.notification.icon);
-                info.pkgicon = loadPackageIconDrawable(info.pkg, info.user);
-                if (sbn.notification.extras != null) {
-                    info.title = sbn.notification.extras.getString(Notification.EXTRA_TITLE);
-                }
-                info.timestamp = sbn.postTime;
-                info.priority = sbn.notification.priority;
-                logd("   [%d] %s: %s", info.timestamp, info.pkg, info.title);
+            for (StatusBarNotification[] resultset
+                    : new StatusBarNotification[][] { active, dismissed }) {
+                for (StatusBarNotification sbn : resultset) {
+                    final HistoricalNotificationInfo info = new HistoricalNotificationInfo();
+                    info.pkg = sbn.pkg;
+                    info.user = sbn.getUserId();
+                    info.icon = loadIconDrawable(info.pkg, info.user, sbn.notification.icon);
+                    info.pkgicon = loadPackageIconDrawable(info.pkg, info.user);
+                    if (sbn.notification.extras != null) {
+                        info.title = sbn.notification.extras.getString(Notification.EXTRA_TITLE);
+                    }
+                    info.timestamp = sbn.postTime;
+                    info.priority = sbn.notification.priority;
+                    logd("   [%d] %s: %s", info.timestamp, info.pkg, info.title);
 
-                if (info.user == UserHandle.USER_ALL
-                        || info.user == currentUserId) {
-                    list.add(info);
+                    info.active = (resultset == active);
+
+                    if (info.user == UserHandle.USER_ALL
+                            || info.user == currentUserId) {
+                        list.add(info);
+                    }
                 }
             }
 
@@ -275,6 +279,8 @@
             // bind caption
             ((TextView) row.findViewById(android.R.id.title)).setText(info.title);
 
+            row.setAlpha(info.active ? 1.0f : 0.5f);
+
 //            // bind radio button
 //            RadioButton radioButton = (RadioButton) row.findViewById(android.R.id.button1);
 //            radioButton.setChecked(dreamInfo.isActive);
diff --git a/src/com/android/settings/SoundSettings.java b/src/com/android/settings/SoundSettings.java
index 7e461711..931858c 100644
--- a/src/com/android/settings/SoundSettings.java
+++ b/src/com/android/settings/SoundSettings.java
@@ -78,7 +78,7 @@
 
     private static final String[] NEED_VOICE_CAPABILITY = {
             KEY_RINGTONE, KEY_DTMF_TONE, KEY_CATEGORY_CALLS,
-            KEY_EMERGENCY_TONE
+            KEY_EMERGENCY_TONE, KEY_VIBRATE
     };
 
     private static final int MSG_UPDATE_RINGTONE_SUMMARY = 1;
@@ -175,9 +175,6 @@
             removePreference(KEY_VIBRATE);
             removePreference(KEY_HAPTIC_FEEDBACK);
         }
-        if (!Utils.isVoiceCapable(getActivity())) {
-            removePreference(KEY_VIBRATE);
-        }
 
         if (TelephonyManager.PHONE_TYPE_CDMA == activePhoneType) {
             ListPreference emergencyTonePreference =