Merge "Import translations. DO NOT MERGE"
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 44a7b03..6d7994f 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1417,6 +1417,10 @@
     <string name="wifi_p2p_disconnect_message">If you disconnect, your connection with <xliff:g id="peer_name">%1$s</xliff:g> will end.</string>
     <!-- Message test for disconnection from multiple devices-->
     <string name="wifi_p2p_disconnect_multiple_message">If you disconnect, your connection with <xliff:g id="peer_name">%1$s</xliff:g> and <xliff:g id="peer_count">%2$s</xliff:g> other devices will end.</string>
+    <!-- Title for cancel connect dialog -->
+    <string name="wifi_p2p_cancel_connect_title">Cancel invitation?</string>
+    <!-- Message test for disconnection from one device-->
+    <string name="wifi_p2p_cancel_connect_message">Do you want to cancel invitation to connect with <xliff:g id="peer_name">%1$s</xliff:g>?</string>
 
     <!-- Wifi AP settings-->
     <!-- Label for wifi tether checkbox. Toggles Access Point on/off -->
diff --git a/src/com/android/settings/DataUsageSummary.java b/src/com/android/settings/DataUsageSummary.java
index d127204..b0c38b9 100644
--- a/src/com/android/settings/DataUsageSummary.java
+++ b/src/com/android/settings/DataUsageSummary.java
@@ -560,9 +560,9 @@
      * Listener to setup {@link LayoutTransition} after first layout pass.
      */
     private OnGlobalLayoutListener mFirstLayoutListener = new OnGlobalLayoutListener() {
-        /** {@inheritDoc} */
+        @Override
         public void onGlobalLayout() {
-            mListView.getViewTreeObserver().removeGlobalOnLayoutListener(mFirstLayoutListener);
+            mListView.getViewTreeObserver().removeOnGlobalLayoutListener(mFirstLayoutListener);
 
             mTabsContainer.setLayoutTransition(buildLayoutTransition());
             mHeader.setLayoutTransition(buildLayoutTransition());
@@ -628,7 +628,7 @@
      * Factory that provide empty {@link View} to make {@link TabHost} happy.
      */
     private TabContentFactory mEmptyTabContent = new TabContentFactory() {
-        /** {@inheritDoc} */
+        @Override
         public View createTabContent(String tag) {
             return new View(mTabHost.getContext());
         }
@@ -643,7 +643,7 @@
     }
 
     private OnTabChangeListener mTabListener = new OnTabChangeListener() {
-        /** {@inheritDoc} */
+        @Override
         public void onTabChanged(String tabId) {
             // user changed tab; update body
             updateBody();
@@ -990,7 +990,7 @@
     }
 
     private OnCheckedChangeListener mDataEnabledListener = new OnCheckedChangeListener() {
-        /** {@inheritDoc} */
+        @Override
         public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
             if (mBinding) return;
 
@@ -1011,7 +1011,7 @@
     };
 
     private View.OnClickListener mDisableAtLimitListener = new View.OnClickListener() {
-        /** {@inheritDoc} */
+        @Override
         public void onClick(View v) {
             final boolean disableAtLimit = !mDisableAtLimit.isChecked();
             if (disableAtLimit) {
@@ -1025,7 +1025,7 @@
     };
 
     private View.OnClickListener mAppRestrictListener = new View.OnClickListener() {
-        /** {@inheritDoc} */
+        @Override
         public void onClick(View v) {
             final boolean restrictBackground = !mAppRestrict.isChecked();
 
@@ -1041,7 +1041,7 @@
     };
 
     private OnClickListener mAppSettingsListener = new OnClickListener() {
-        /** {@inheritDoc} */
+        @Override
         public void onClick(View v) {
             // TODO: target torwards entire UID instead of just first package
             startActivity(mAppSettingsIntent);
@@ -1049,7 +1049,7 @@
     };
 
     private OnItemClickListener mListListener = new OnItemClickListener() {
-        /** {@inheritDoc} */
+        @Override
         public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
             final Context context = view.getContext();
             final AppItem app = (AppItem) parent.getItemAtPosition(position);
@@ -1059,7 +1059,7 @@
     };
 
     private OnItemSelectedListener mCycleListener = new OnItemSelectedListener() {
-        /** {@inheritDoc} */
+        @Override
         public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
             final CycleItem cycle = (CycleItem) parent.getItemAtPosition(position);
             if (cycle instanceof CycleChangeItem) {
@@ -1084,7 +1084,7 @@
             }
         }
 
-        /** {@inheritDoc} */
+        @Override
         public void onNothingSelected(AdapterView<?> parent) {
             // ignored
         }
@@ -1149,12 +1149,12 @@
 
     private final LoaderCallbacks<ChartData> mChartDataCallbacks = new LoaderCallbacks<
             ChartData>() {
-        /** {@inheritDoc} */
+        @Override
         public Loader<ChartData> onCreateLoader(int id, Bundle args) {
             return new ChartDataLoader(getActivity(), mStatsSession, args);
         }
 
-        /** {@inheritDoc} */
+        @Override
         public void onLoadFinished(Loader<ChartData> loader, ChartData data) {
             mChartData = data;
             mChart.bindNetworkStats(mChartData.network);
@@ -1170,7 +1170,7 @@
             }
         }
 
-        /** {@inheritDoc} */
+        @Override
         public void onLoaderReset(Loader<ChartData> loader) {
             mChartData = null;
             mChart.bindNetworkStats(null);
@@ -1180,18 +1180,18 @@
 
     private final LoaderCallbacks<NetworkStats> mSummaryCallbacks = new LoaderCallbacks<
             NetworkStats>() {
-        /** {@inheritDoc} */
+        @Override
         public Loader<NetworkStats> onCreateLoader(int id, Bundle args) {
             return new SummaryForAllUidLoader(getActivity(), mStatsSession, args);
         }
 
-        /** {@inheritDoc} */
+        @Override
         public void onLoadFinished(Loader<NetworkStats> loader, NetworkStats data) {
             mAdapter.bindStats(data);
             updateEmptyVisible();
         }
 
-        /** {@inheritDoc} */
+        @Override
         public void onLoaderReset(Loader<NetworkStats> loader) {
             mAdapter.bindStats(null);
             updateEmptyVisible();
@@ -1203,6 +1203,7 @@
         }
     };
 
+    @Deprecated
     private boolean isMobilePolicySplit() {
         final Context context = getActivity();
         if (hasReadyMobileRadio(context)) {
@@ -1213,6 +1214,7 @@
         }
     }
 
+    @Deprecated
     private void setMobilePolicySplit(boolean split) {
         final Context context = getActivity();
         if (hasReadyMobileRadio(context)) {
@@ -1228,28 +1230,28 @@
     }
 
     private DataUsageChartListener mChartListener = new DataUsageChartListener() {
-        /** {@inheritDoc} */
+        @Override
         public void onInspectRangeChanged() {
             if (LOGD) Log.d(TAG, "onInspectRangeChanged()");
             updateDetailData();
         }
 
-        /** {@inheritDoc} */
+        @Override
         public void onWarningChanged() {
             setPolicyWarningBytes(mChart.getWarningBytes());
         }
 
-        /** {@inheritDoc} */
+        @Override
         public void onLimitChanged() {
             setPolicyLimitBytes(mChart.getLimitBytes());
         }
 
-        /** {@inheritDoc} */
+        @Override
         public void requestWarningEdit() {
             WarningEditorFragment.show(DataUsageSummary.this);
         }
 
-        /** {@inheritDoc} */
+        @Override
         public void requestLimitEdit() {
             LimitEditorFragment.show(DataUsageSummary.this);
         }
@@ -1287,7 +1289,7 @@
             return false;
         }
 
-        /** {@inheritDoc} */
+        @Override
         public int compareTo(CycleItem another) {
             return Long.compare(start, another.start);
         }
@@ -1615,6 +1617,7 @@
             builder.setMessage(message);
 
             builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
+                @Override
                 public void onClick(DialogInterface dialog, int which) {
                     final DataUsageSummary target = (DataUsageSummary) getTargetFragment();
                     if (target != null) {
@@ -1670,6 +1673,7 @@
 
             builder.setPositiveButton(R.string.data_usage_cycle_editor_positive,
                     new DialogInterface.OnClickListener() {
+                        @Override
                         public void onClick(DialogInterface dialog, int which) {
                             final int cycleDay = cycleDayPicker.getValue();
                             final String cycleTimezone = new Time().timezone;
@@ -1730,6 +1734,7 @@
 
             builder.setPositiveButton(R.string.data_usage_cycle_editor_positive,
                     new DialogInterface.OnClickListener() {
+                        @Override
                         public void onClick(DialogInterface dialog, int which) {
                             // clear focus to finish pending text edits
                             bytesPicker.clearFocus();
@@ -1792,6 +1797,7 @@
 
             builder.setPositiveButton(R.string.data_usage_cycle_editor_positive,
                     new DialogInterface.OnClickListener() {
+                        @Override
                         public void onClick(DialogInterface dialog, int which) {
                             // clear focus to finish pending text edits
                             bytesPicker.clearFocus();
@@ -1825,6 +1831,7 @@
             builder.setMessage(R.string.data_usage_disable_mobile);
 
             builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
+                @Override
                 public void onClick(DialogInterface dialog, int which) {
                     final DataUsageSummary target = (DataUsageSummary) getTargetFragment();
                     if (target != null) {
@@ -1841,7 +1848,7 @@
 
     /**
      * Dialog to request user confirmation before setting
-     * {@link Settings.Secure#DATA_ROAMING}.
+     * {@link android.provider.Settings.Secure#DATA_ROAMING}.
      */
     public static class ConfirmDataRoamingFragment extends DialogFragment {
         public static void show(DataUsageSummary parent) {
@@ -1861,6 +1868,7 @@
             builder.setMessage(R.string.roaming_warning);
 
             builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
+                @Override
                 public void onClick(DialogInterface dialog, int which) {
                     final DataUsageSummary target = (DataUsageSummary) getTargetFragment();
                     if (target != null) {
@@ -1896,6 +1904,7 @@
             builder.setMessage(getString(R.string.data_usage_restrict_background));
 
             builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
+                @Override
                 public void onClick(DialogInterface dialog, int which) {
                     final DataUsageSummary target = (DataUsageSummary) getTargetFragment();
                     if (target != null) {
@@ -1958,6 +1967,7 @@
             builder.setMessage(R.string.data_usage_app_restrict_dialog);
 
             builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
+                @Override
                 public void onClick(DialogInterface dialog, int which) {
                     final DataUsageSummary target = (DataUsageSummary) getTargetFragment();
                     if (target != null) {
diff --git a/src/com/android/settings/widget/ChartDataUsageView.java b/src/com/android/settings/widget/ChartDataUsageView.java
index 85ee76a..c07509c 100644
--- a/src/com/android/settings/widget/ChartDataUsageView.java
+++ b/src/com/android/settings/widget/ChartDataUsageView.java
@@ -296,7 +296,7 @@
     }
 
     private OnSweepListener mHorizListener = new OnSweepListener() {
-        /** {@inheritDoc} */
+        @Override
         public void onSweep(ChartSweepView sweep, boolean sweepDone) {
             updatePrimaryRange();
 
@@ -306,7 +306,7 @@
             }
         }
 
-        /** {@inheritDoc} */
+        @Override
         public void requestEdit(ChartSweepView sweep) {
             // ignored
         }
@@ -324,7 +324,7 @@
     }
 
     private OnSweepListener mVertListener = new OnSweepListener() {
-        /** {@inheritDoc} */
+        @Override
         public void onSweep(ChartSweepView sweep, boolean sweepDone) {
             if (sweepDone) {
                 clearUpdateAxisDelayed(sweep);
@@ -341,7 +341,7 @@
             }
         }
 
-        /** {@inheritDoc} */
+        @Override
         public void requestEdit(ChartSweepView sweep) {
             if (sweep == mSweepWarning && mListener != null) {
                 mListener.requestWarningEdit();
@@ -469,7 +469,7 @@
             return Objects.hashCode(mMin, mMax, mSize);
         }
 
-        /** {@inheritDoc} */
+        @Override
         public boolean setBounds(long min, long max) {
             if (mMin != min || mMax != max) {
                 mMin = min;
@@ -480,7 +480,7 @@
             }
         }
 
-        /** {@inheritDoc} */
+        @Override
         public boolean setSize(float size) {
             if (mSize != size) {
                 mSize = size;
@@ -490,24 +490,24 @@
             }
         }
 
-        /** {@inheritDoc} */
+        @Override
         public float convertToPoint(long value) {
             return (mSize * (value - mMin)) / (mMax - mMin);
         }
 
-        /** {@inheritDoc} */
+        @Override
         public long convertToValue(float point) {
             return (long) (mMin + ((point * (mMax - mMin)) / mSize));
         }
 
-        /** {@inheritDoc} */
+        @Override
         public long buildLabel(Resources res, SpannableStringBuilder builder, long value) {
             // TODO: convert to better string
             builder.replace(0, builder.length(), Long.toString(value));
             return value;
         }
 
-        /** {@inheritDoc} */
+        @Override
         public float[] getTickPoints() {
             final float[] ticks = new float[32];
             int i = 0;
@@ -532,7 +532,7 @@
             return Arrays.copyOf(ticks, i);
         }
 
-        /** {@inheritDoc} */
+        @Override
         public int shouldAdjustAxis(long value) {
             // time axis never adjusts
             return 0;
@@ -551,7 +551,7 @@
             return Objects.hashCode(mMin, mMax, mSize);
         }
 
-        /** {@inheritDoc} */
+        @Override
         public boolean setBounds(long min, long max) {
             if (mMin != min || mMax != max) {
                 mMin = min;
@@ -562,7 +562,7 @@
             }
         }
 
-        /** {@inheritDoc} */
+        @Override
         public boolean setSize(float size) {
             if (mSize != size) {
                 mSize = size;
@@ -572,7 +572,7 @@
             }
         }
 
-        /** {@inheritDoc} */
+        @Override
         public float convertToPoint(long value) {
             if (LOG_SCALE) {
                 // derived polynomial fit to make lower values more visible
@@ -585,7 +585,7 @@
             }
         }
 
-        /** {@inheritDoc} */
+        @Override
         public long convertToValue(float point) {
             if (LOG_SCALE) {
                 final double normalized = point / mSize;
@@ -600,7 +600,7 @@
         private static final Object sSpanSize = new Object();
         private static final Object sSpanUnit = new Object();
 
-        /** {@inheritDoc} */
+        @Override
         public long buildLabel(Resources res, SpannableStringBuilder builder, long value) {
 
             final CharSequence unit;
@@ -633,7 +633,7 @@
             return (long) resultRounded;
         }
 
-        /** {@inheritDoc} */
+        @Override
         public float[] getTickPoints() {
             final long range = mMax - mMin;
 
@@ -650,7 +650,7 @@
             return tickPoints;
         }
 
-        /** {@inheritDoc} */
+        @Override
         public int shouldAdjustAxis(long value) {
             final float point = convertToPoint(value);
             if (point < mSize * 0.1) {
diff --git a/src/com/android/settings/widget/InvertedChartAxis.java b/src/com/android/settings/widget/InvertedChartAxis.java
index 2d820d9..6875749 100644
--- a/src/com/android/settings/widget/InvertedChartAxis.java
+++ b/src/com/android/settings/widget/InvertedChartAxis.java
@@ -30,33 +30,33 @@
         mWrapped = wrapped;
     }
 
-    /** {@inheritDoc} */
+    @Override
     public boolean setBounds(long min, long max) {
         return mWrapped.setBounds(min, max);
     }
 
-    /** {@inheritDoc} */
+    @Override
     public boolean setSize(float size) {
         mSize = size;
         return mWrapped.setSize(size);
     }
 
-    /** {@inheritDoc} */
+    @Override
     public float convertToPoint(long value) {
         return mSize - mWrapped.convertToPoint(value);
     }
 
-    /** {@inheritDoc} */
+    @Override
     public long convertToValue(float point) {
         return mWrapped.convertToValue(mSize - point);
     }
 
-    /** {@inheritDoc} */
+    @Override
     public long buildLabel(Resources res, SpannableStringBuilder builder, long value) {
         return mWrapped.buildLabel(res, builder, value);
     }
 
-    /** {@inheritDoc} */
+    @Override
     public float[] getTickPoints() {
         final float[] points = mWrapped.getTickPoints();
         for (int i = 0; i < points.length; i++) {
@@ -65,7 +65,7 @@
         return points;
     }
 
-    /** {@inheritDoc} */
+    @Override
     public int shouldAdjustAxis(long value) {
         return mWrapped.shouldAdjustAxis(value);
     }
diff --git a/src/com/android/settings/wifi/p2p/WifiP2pSettings.java b/src/com/android/settings/wifi/p2p/WifiP2pSettings.java
index 0e4be13..7c1fd25 100644
--- a/src/com/android/settings/wifi/p2p/WifiP2pSettings.java
+++ b/src/com/android/settings/wifi/p2p/WifiP2pSettings.java
@@ -72,6 +72,7 @@
     private WifiP2pManager mWifiP2pManager;
     private WifiP2pManager.Channel mChannel;
     private OnClickListener mDisconnectListener;
+    private OnClickListener mCancelConnectListener;
     private WifiP2pPeer mSelectedWifiPeer;
 
     private boolean mWifiP2pEnabled;
@@ -82,6 +83,7 @@
     private Preference mThisDevicePref;
 
     private static final int DIALOG_DISCONNECT  = 1;
+    private static final int DIALOG_CANCEL_CONNECT = 2;
 
     private WifiP2pDevice mThisDevice;
     private WifiP2pDeviceList mPeers = new WifiP2pDeviceList();
@@ -170,6 +172,26 @@
             }
         };
 
+        //cancel connect dialog listener
+        mCancelConnectListener = new OnClickListener() {
+            @Override
+            public void onClick(DialogInterface dialog, int which) {
+                if (which == DialogInterface.BUTTON_POSITIVE) {
+                    if (mWifiP2pManager != null) {
+                        mWifiP2pManager.cancelConnect(mChannel,
+                                new WifiP2pManager.ActionListener() {
+                            public void onSuccess() {
+                                if (DBG) Log.d(TAG, " cancel connect success");
+                            }
+                            public void onFailure(int reason) {
+                                if (DBG) Log.d(TAG, " cancel connect fail " + reason);
+                            }
+                        });
+                    }
+                }
+            }
+        };
+
         setHasOptionsMenu(true);
 
         final PreferenceScreen preferenceScreen = getPreferenceScreen();
@@ -248,6 +270,8 @@
             mSelectedWifiPeer = (WifiP2pPeer) preference;
             if (mSelectedWifiPeer.device.status == WifiP2pDevice.CONNECTED) {
                 showDialog(DIALOG_DISCONNECT);
+            } else if (mSelectedWifiPeer.device.status == WifiP2pDevice.INVITED) {
+                showDialog(DIALOG_CANCEL_CONNECT);
             } else {
                 WifiP2pConfig config = new WifiP2pConfig();
                 config.deviceAddress = mSelectedWifiPeer.device.deviceAddress;
@@ -298,6 +322,19 @@
                 .setNegativeButton(getActivity().getString(R.string.dlg_cancel), null)
                 .create();
             return dialog;
+        } else if (id == DIALOG_CANCEL_CONNECT) {
+            int stringId = R.string.wifi_p2p_cancel_connect_message;
+            String deviceName = TextUtils.isEmpty(mSelectedWifiPeer.device.deviceName) ?
+                    mSelectedWifiPeer.device.deviceAddress :
+                    mSelectedWifiPeer.device.deviceName;
+
+            AlertDialog dialog = new AlertDialog.Builder(getActivity())
+                .setTitle(R.string.wifi_p2p_cancel_connect_title)
+                .setMessage(getActivity().getString(stringId, deviceName))
+                .setPositiveButton(getActivity().getString(R.string.dlg_ok), mCancelConnectListener)
+                .setNegativeButton(getActivity().getString(R.string.dlg_cancel), null)
+                .create();
+            return dialog;
         }
         return null;
     }