diff options
author | Jeff Davidson <jpd@google.com> | 2014-08-21 04:08:55 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2014-08-21 04:08:55 +0000 |
commit | 7f133dce33dd97a7e82dc9d7e161251a8c635155 (patch) | |
tree | cfc2530726ff27e08b15021d7214ec598e7ee8ac /packages | |
parent | 561f7f438352f70fbefb9c7606269162527e7fe5 (diff) | |
parent | 814c033d38a856068a5f131f2abf13ea73cc500c (diff) | |
download | frameworks_base-7f133dce33dd97a7e82dc9d7e161251a8c635155.zip frameworks_base-7f133dce33dd97a7e82dc9d7e161251a8c635155.tar.gz frameworks_base-7f133dce33dd97a7e82dc9d7e161251a8c635155.tar.bz2 |
am 1ff358ad: am d217efb9: am 709941fd: Merge "Less intrusive VPN dialog and other UX tweaks." into lmp-dev
* commit '1ff358ad2a0b2c0702fde65ff68f4656e55c545f':
Less intrusive VPN dialog and other UX tweaks.
Diffstat (limited to 'packages')
15 files changed, 58 insertions, 371 deletions
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml index ed3fa58..8f05f7b 100644 --- a/packages/SystemUI/res/values/strings.xml +++ b/packages/SystemUI/res/values/strings.xml @@ -834,8 +834,8 @@ <!-- Monitoring dialog title for normal devices [CHAR LIMIT=35]--> <string name="monitoring_title">Network monitoring</string> - <!-- Monitoring dialog open app button [CHAR LIMIT=30] --> - <string name="open_app">Open app</string> + <!-- Monitoring dialog disable vpn button [CHAR LIMIT=30] --> + <string name="disable_vpn">Disable VPN</string> <!-- Monitoring dialog disconnect vpn button [CHAR LIMIT=30] --> <string name="disconnect_vpn">Disconnect VPN</string> diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSFooter.java b/packages/SystemUI/src/com/android/systemui/qs/QSFooter.java index bfbc56c..a8199fa 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSFooter.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSFooter.java @@ -119,11 +119,7 @@ public class QSFooter implements OnClickListener, DialogInterface.OnClickListene @Override public void onClick(DialogInterface dialog, int which) { if (which == DialogInterface.BUTTON_NEGATIVE) { - if (mSecurityController.isLegacyVpn()) { - mSecurityController.disconnectFromLegacyVpn(); - } else { - mSecurityController.openVpnApp(); - } + mSecurityController.disconnectFromVpn(); } } @@ -142,7 +138,7 @@ public class QSFooter implements OnClickListener, DialogInterface.OnClickListene if (mSecurityController.isLegacyVpn()) { return mContext.getString(R.string.disconnect_vpn); } else { - return mContext.getString(R.string.open_app); + return mContext.getString(R.string.disable_vpn); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityController.java index ede8129..3a5a53b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityController.java @@ -23,8 +23,7 @@ public interface SecurityController { String getVpnApp(); boolean isLegacyVpn(); String getLegacyVpnName(); - void openVpnApp(); - void disconnectFromLegacyVpn(); + void disconnectFromVpn(); void addCallback(VpnCallback callback); void removeCallback(VpnCallback callback); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java index 8e04e5e..ae0291b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java @@ -18,7 +18,6 @@ package com.android.systemui.statusbar.policy; import android.app.admin.DevicePolicyManager; import android.content.Context; import android.content.Intent; -import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager.NameNotFoundException; import android.net.ConnectivityManager; import android.net.ConnectivityManager.NetworkCallback; @@ -109,18 +108,17 @@ public class SecurityControllerImpl implements SecurityController { } @Override - public void openVpnApp() { - Intent i = mContext.getPackageManager().getLaunchIntentForPackage(mVpnConfig.user); - if (i != null) { - i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - mContext.startActivity(i); - } - } - - @Override - public void disconnectFromLegacyVpn() { + public void disconnectFromVpn() { try { - mConnectivityService.prepareVpn(VpnConfig.LEGACY_VPN, VpnConfig.LEGACY_VPN); + if (isLegacyVpn()) { + mConnectivityService.prepareVpn(VpnConfig.LEGACY_VPN, VpnConfig.LEGACY_VPN); + } else { + // Prevent this app from initiating VPN connections in the future without user + // intervention. + mConnectivityService.setVpnPackageAuthorization(false); + + mConnectivityService.prepareVpn(mVpnConfig.user, VpnConfig.LEGACY_VPN); + } } catch (Exception e) { Log.e(TAG, "Unable to disconnect from VPN", e); } @@ -154,9 +152,7 @@ public class SecurityControllerImpl implements SecurityController { mIsVpnEnabled = mVpnConfig != null; if (mVpnConfig != null && !mVpnConfig.legacy) { - ApplicationInfo info = - mContext.getPackageManager().getApplicationInfo(mVpnConfig.user, 0); - mVpnName = mContext.getPackageManager().getApplicationLabel(info).toString(); + mVpnName = VpnConfig.getVpnLabel(mContext, mVpnConfig.user).toString(); } } catch (RemoteException | NameNotFoundException e) { Log.w(TAG, "Unable to get current VPN", e); diff --git a/packages/VpnDialogs/AndroidManifest.xml b/packages/VpnDialogs/AndroidManifest.xml index 03d920a..1768400 100644 --- a/packages/VpnDialogs/AndroidManifest.xml +++ b/packages/VpnDialogs/AndroidManifest.xml @@ -28,14 +28,5 @@ <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity> - - <activity android:name=".ManageDialog" - android:theme="@*android:style/Theme.DeviceDefault.Light.Dialog.Alert" - android:noHistory="true"> - <intent-filter> - <action android:name="android.intent.action.MAIN"/> - <category android:name="android.intent.category.DEFAULT"/> - </intent-filter> - </activity> </application> </manifest> diff --git a/packages/VpnDialogs/res/drawable-hdpi/ic_vpn_dialog.png b/packages/VpnDialogs/res/drawable-hdpi/ic_vpn_dialog.png Binary files differnew file mode 100644 index 0000000..a0b4b61 --- /dev/null +++ b/packages/VpnDialogs/res/drawable-hdpi/ic_vpn_dialog.png diff --git a/packages/VpnDialogs/res/drawable-mdpi/ic_vpn_dialog.png b/packages/VpnDialogs/res/drawable-mdpi/ic_vpn_dialog.png Binary files differnew file mode 100644 index 0000000..df5dfe8 --- /dev/null +++ b/packages/VpnDialogs/res/drawable-mdpi/ic_vpn_dialog.png diff --git a/packages/VpnDialogs/res/drawable-xhdpi/ic_vpn_dialog.png b/packages/VpnDialogs/res/drawable-xhdpi/ic_vpn_dialog.png Binary files differnew file mode 100644 index 0000000..18d5a3a --- /dev/null +++ b/packages/VpnDialogs/res/drawable-xhdpi/ic_vpn_dialog.png diff --git a/packages/VpnDialogs/res/drawable-xxhdpi/ic_vpn_dialog.png b/packages/VpnDialogs/res/drawable-xxhdpi/ic_vpn_dialog.png Binary files differnew file mode 100644 index 0000000..4d475dc --- /dev/null +++ b/packages/VpnDialogs/res/drawable-xxhdpi/ic_vpn_dialog.png diff --git a/packages/VpnDialogs/res/drawable-xxxhdpi/ic_vpn_dialog.png b/packages/VpnDialogs/res/drawable-xxxhdpi/ic_vpn_dialog.png Binary files differnew file mode 100644 index 0000000..9d458b4 --- /dev/null +++ b/packages/VpnDialogs/res/drawable-xxxhdpi/ic_vpn_dialog.png diff --git a/packages/VpnDialogs/res/layout/confirm.xml b/packages/VpnDialogs/res/layout/confirm.xml index ee7f4b8..66fec59 100644 --- a/packages/VpnDialogs/res/layout/confirm.xml +++ b/packages/VpnDialogs/res/layout/confirm.xml @@ -18,41 +18,12 @@ <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content"> - <LinearLayout android:layout_width="match_parent" + <TextView android:id="@+id/warning" + android:layout_width="fill_parent" android:layout_height="wrap_content" - android:orientation="vertical" - android:padding="3mm"> - - <LinearLayout android:layout_width="match_parent" - android:layout_height="wrap_content" - android:orientation="horizontal" - android:gravity="center_vertical"> - - <ImageView android:id="@+id/icon" - android:layout_width="@android:dimen/app_icon_size" - android:layout_height="@android:dimen/app_icon_size" - android:paddingRight="1mm"/> - - <TextView android:id="@+id/prompt" - android:layout_width="fill_parent" - android:layout_height="wrap_content" - android:textSize="18sp"/> - </LinearLayout> - - <TextView android:id="@+id/warning" - android:layout_width="fill_parent" - android:layout_height="wrap_content" - android:paddingTop="1mm" - android:paddingBottom="1mm" - android:text="@string/warning" - android:textSize="18sp"/> - - <CheckBox android:id="@+id/check" - android:layout_width="fill_parent" - android:layout_height="wrap_content" - android:text="@string/accept" - android:textSize="20sp" - android:filterTouchesWhenObscured="true" - android:checked="false"/> - </LinearLayout> + android:textSize="18sp" + android:paddingTop="4mm" + android:paddingLeft="3mm" + android:paddingRight="3mm" + android:paddingBottom="4mm"/> </ScrollView> diff --git a/packages/VpnDialogs/res/layout/manage.xml b/packages/VpnDialogs/res/layout/manage.xml deleted file mode 100644 index 56332c3..0000000 --- a/packages/VpnDialogs/res/layout/manage.xml +++ /dev/null @@ -1,45 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- Copyright (C) 2011 The Android Open Source 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. ---> - -<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:padding="3mm" - android:stretchColumns="0,1" - android:shrinkColumns="1"> - - <TableRow> - <TextView android:text="@string/session" style="@style/label"/> - <TextView android:id="@+id/session" style="@style/value"/> - </TableRow> - - <TableRow> - <TextView android:text="@string/duration" style="@style/label"/> - <TextView android:id="@+id/duration" style="@style/value"/> - </TableRow> - - <TableRow android:id="@+id/data_transmitted_row" android:visibility="gone"> - <TextView android:text="@string/data_transmitted" style="@style/label"/> - <TextView android:id="@+id/data_transmitted" style="@style/value"/> - </TableRow> - - <TableRow android:id="@+id/data_received_row" android:visibility="gone"> - <TextView android:text="@string/data_received" style="@style/label"/> - <TextView android:id="@+id/data_received" style="@style/value"/> - </TableRow> - -</TableLayout> diff --git a/packages/VpnDialogs/res/values/strings.xml b/packages/VpnDialogs/res/values/strings.xml index 3ff767a..84206a1 100644 --- a/packages/VpnDialogs/res/values/strings.xml +++ b/packages/VpnDialogs/res/values/strings.xml @@ -17,40 +17,15 @@ <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <!-- Dialog title to identify the request from a VPN application. [CHAR LIMIT=60] --> - <string name="prompt"><xliff:g id="app">%s</xliff:g> - attempts to create a VPN connection. - </string> + <string name="prompt">Connection request</string> <!-- Dialog message to warn about the risk of using a VPN application. [CHAR LIMIT=NONE] --> - <string name="warning">By proceeding, you are giving the application - permission to intercept all network traffic. - <b>Do NOT accept unless you trust the application.</b> Otherwise, - you run the risk of having your data compromised by a malicious - software. - </string> - - <!-- Checkbox label to accept the request from a VPN application. [CHAR LIMIT=60] --> - <string name="accept">I trust this application.</string> - - <!-- Dialog title for built-in VPN. [CHAR LIMIT=40] --> - <string name="legacy_title">VPN is connected</string> - <!-- Button label to configure the current VPN session. [CHAR LIMIT=20] --> - <string name="configure">Configure</string> - <!-- Button label to disconnect the current VPN session. [CHAR LIMIT=20] --> - <string name="disconnect">Disconnect</string> - - <!-- Label for the name of the current VPN session. [CHAR LIMIT=20] --> - <string name="session">Session:</string> - <!-- Label for the duration of the current VPN session. [CHAR LIMIT=20] --> - <string name="duration">Duration:</string> - <!-- Label for the network usage of data transmitted over VPN. [CHAR LIMIT=20] --> - <string name="data_transmitted">Sent:</string> - <!-- Label for the network usage of data received over VPN. [CHAR LIMIT=20] --> - <string name="data_received">Received:</string> - - <!-- Formatted string for the network usage over VPN. [CHAR LIMIT=40] --> - <string name="data_value_format"> - <xliff:g id="number">%1$s</xliff:g> bytes / - <xliff:g id="number">%2$s</xliff:g> packets + <string name="warning"><xliff:g id="app">%s</xliff:g> wants to set up a VPN connection + that allows it to monitor network traffic. Only accept if you trust the source. + <![CDATA[ + <br /> + <br /> + <img src="vpn_icon" /> + ]]> appears at the top of your screen when VPN is active. </string> </resources> diff --git a/packages/VpnDialogs/src/com/android/vpndialogs/ConfirmDialog.java b/packages/VpnDialogs/src/com/android/vpndialogs/ConfirmDialog.java index ddafc66..897c96cf 100644 --- a/packages/VpnDialogs/src/com/android/vpndialogs/ConfirmDialog.java +++ b/packages/VpnDialogs/src/com/android/vpndialogs/ConfirmDialog.java @@ -18,21 +18,28 @@ package com.android.vpndialogs; import android.content.Context; import android.content.DialogInterface; +import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.graphics.drawable.Drawable; import android.net.IConnectivityManager; +import android.net.VpnService; import android.os.ServiceManager; +import android.text.Html; +import android.text.Html.ImageGetter; import android.util.Log; import android.view.View; import android.widget.Button; -import android.widget.CompoundButton; -import android.widget.ImageView; import android.widget.TextView; import com.android.internal.app.AlertActivity; +import com.android.internal.net.VpnConfig; -public class ConfirmDialog extends AlertActivity implements - CompoundButton.OnCheckedChangeListener, DialogInterface.OnClickListener { +import java.util.List; + +public class ConfirmDialog extends AlertActivity + implements DialogInterface.OnClickListener, ImageGetter { private static final String TAG = "VpnConfirm"; private String mPackage; @@ -56,27 +63,22 @@ public class ConfirmDialog extends AlertActivity implements return; } - PackageManager pm = getPackageManager(); - ApplicationInfo app = pm.getApplicationInfo(mPackage, 0); - View view = View.inflate(this, R.layout.confirm, null); - ((ImageView) view.findViewById(R.id.icon)).setImageDrawable(app.loadIcon(pm)); - ((TextView) view.findViewById(R.id.prompt)).setText( - getString(R.string.prompt, app.loadLabel(pm))); - ((CompoundButton) view.findViewById(R.id.check)).setOnCheckedChangeListener(this); - mAlertParams.mIconAttrId = android.R.attr.alertDialogIcon; - mAlertParams.mTitle = getText(android.R.string.dialog_alert_title); + ((TextView) view.findViewById(R.id.warning)).setText( + Html.fromHtml( + getString(R.string.warning, VpnConfig.getVpnLabel(this, mPackage)), + this, null /* tagHandler */)); + + mAlertParams.mTitle = getText(R.string.prompt); mAlertParams.mPositiveButtonText = getText(android.R.string.ok); mAlertParams.mPositiveButtonListener = this; mAlertParams.mNegativeButtonText = getText(android.R.string.cancel); - mAlertParams.mNegativeButtonListener = this; mAlertParams.mView = view; setupAlert(); getWindow().setCloseOnTouchOutside(false); mButton = mAlert.getButton(DialogInterface.BUTTON_POSITIVE); - mButton.setEnabled(false); mButton.setFilterTouchesWhenObscured(true); } catch (Exception e) { Log.e(TAG, "onResume", e); @@ -85,18 +87,24 @@ public class ConfirmDialog extends AlertActivity implements } @Override - public void onBackPressed() { + public Drawable getDrawable(String source) { + // Should only reach this when fetching the VPN icon for the warning string. + Drawable icon = getDrawable(R.drawable.ic_vpn_dialog); + icon.setBounds(0, 0, icon.getIntrinsicWidth(), icon.getIntrinsicHeight()); + return icon; } @Override - public void onCheckedChanged(CompoundButton button, boolean checked) { - mButton.setEnabled(checked); + public void onBackPressed() { } @Override public void onClick(DialogInterface dialog, int which) { try { - if (which == DialogInterface.BUTTON_POSITIVE && mService.prepareVpn(null, mPackage)) { + if (mService.prepareVpn(null, mPackage)) { + // Authorize this app to initiate VPN connections in the future without user + // intervention. + mService.setVpnPackageAuthorization(true); setResult(RESULT_OK); } } catch (Exception e) { diff --git a/packages/VpnDialogs/src/com/android/vpndialogs/ManageDialog.java b/packages/VpnDialogs/src/com/android/vpndialogs/ManageDialog.java deleted file mode 100644 index eb20995..0000000 --- a/packages/VpnDialogs/src/com/android/vpndialogs/ManageDialog.java +++ /dev/null @@ -1,204 +0,0 @@ -/* - * Copyright (C) 2011 The Android Open Source 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.vpndialogs; - -import android.content.Context; -import android.content.DialogInterface; -import android.content.pm.ApplicationInfo; -import android.content.pm.PackageManager; -import android.net.IConnectivityManager; -import android.os.Handler; -import android.os.Message; -import android.os.ServiceManager; -import android.os.SystemClock; -import android.util.Log; -import android.view.View; -import android.widget.TextView; - -import com.android.internal.app.AlertActivity; -import com.android.internal.net.VpnConfig; - -import java.io.DataInputStream; -import java.io.FileInputStream; - -public class ManageDialog extends AlertActivity implements - DialogInterface.OnClickListener, Handler.Callback { - private static final String TAG = "VpnManage"; - - private VpnConfig mConfig; - - private IConnectivityManager mService; - - private TextView mDuration; - private TextView mDataTransmitted; - private TextView mDataReceived; - private boolean mDataRowsHidden; - - private Handler mHandler; - - @Override - protected void onResume() { - super.onResume(); - - if (getCallingPackage() != null) { - Log.e(TAG, getCallingPackage() + " cannot start this activity"); - finish(); - return; - } - - try { - - mService = IConnectivityManager.Stub.asInterface( - ServiceManager.getService(Context.CONNECTIVITY_SERVICE)); - - mConfig = mService.getVpnConfig(); - - // mConfig can be null if we are a restricted user, in that case don't show this dialog - if (mConfig == null) { - finish(); - return; - } - - View view = View.inflate(this, R.layout.manage, null); - if (mConfig.session != null) { - ((TextView) view.findViewById(R.id.session)).setText(mConfig.session); - } - mDuration = (TextView) view.findViewById(R.id.duration); - mDataTransmitted = (TextView) view.findViewById(R.id.data_transmitted); - mDataReceived = (TextView) view.findViewById(R.id.data_received); - mDataRowsHidden = true; - - if (mConfig.legacy) { - mAlertParams.mIconId = android.R.drawable.ic_dialog_info; - mAlertParams.mTitle = getText(R.string.legacy_title); - } else { - PackageManager pm = getPackageManager(); - ApplicationInfo app = pm.getApplicationInfo(mConfig.user, 0); - mAlertParams.mIcon = app.loadIcon(pm); - mAlertParams.mTitle = app.loadLabel(pm); - } - if (mConfig.configureIntent != null) { - mAlertParams.mPositiveButtonText = getText(R.string.configure); - mAlertParams.mPositiveButtonListener = this; - } - mAlertParams.mNeutralButtonText = getText(R.string.disconnect); - mAlertParams.mNeutralButtonListener = this; - mAlertParams.mNegativeButtonText = getText(android.R.string.cancel); - mAlertParams.mNegativeButtonListener = this; - mAlertParams.mView = view; - setupAlert(); - - if (mHandler == null) { - mHandler = new Handler(this); - } - mHandler.sendEmptyMessage(0); - } catch (Exception e) { - Log.e(TAG, "onResume", e); - finish(); - } - } - - @Override - protected void onPause() { - super.onPause(); - if (!isFinishing()) { - finish(); - } - } - - @Override - public void onClick(DialogInterface dialog, int which) { - try { - if (which == DialogInterface.BUTTON_POSITIVE) { - mConfig.configureIntent.send(); - } else if (which == DialogInterface.BUTTON_NEUTRAL) { - if (mConfig.legacy) { - mService.prepareVpn(VpnConfig.LEGACY_VPN, VpnConfig.LEGACY_VPN); - } else { - mService.prepareVpn(mConfig.user, VpnConfig.LEGACY_VPN); - } - } - } catch (Exception e) { - Log.e(TAG, "onClick", e); - finish(); - } - } - - @Override - public boolean handleMessage(Message message) { - mHandler.removeMessages(0); - - if (!isFinishing()) { - if (mConfig.startTime != -1) { - long seconds = (SystemClock.elapsedRealtime() - mConfig.startTime) / 1000; - mDuration.setText(String.format("%02d:%02d:%02d", - seconds / 3600, seconds / 60 % 60, seconds % 60)); - } - - String[] numbers = getNumbers(); - if (numbers != null) { - // First unhide the related data rows. - if (mDataRowsHidden) { - findViewById(R.id.data_transmitted_row).setVisibility(View.VISIBLE); - findViewById(R.id.data_received_row).setVisibility(View.VISIBLE); - mDataRowsHidden = false; - } - - // [1] and [2] are received data in bytes and packets. - mDataReceived.setText(getString(R.string.data_value_format, - numbers[1], numbers[2])); - - // [9] and [10] are transmitted data in bytes and packets. - mDataTransmitted.setText(getString(R.string.data_value_format, - numbers[9], numbers[10])); - } - mHandler.sendEmptyMessageDelayed(0, 1000); - } - return true; - } - - private String[] getNumbers() { - DataInputStream in = null; - try { - // See dev_seq_printf_stats() in net/core/dev.c. - in = new DataInputStream(new FileInputStream("/proc/net/dev")); - String prefix = mConfig.interfaze + ':'; - - while (true) { - String line = in.readLine().trim(); - if (line.startsWith(prefix)) { - String[] numbers = line.substring(prefix.length()).split(" +"); - for (int i = 1; i < 17; ++i) { - if (!numbers[i].equals("0")) { - return numbers; - } - } - break; - } - } - } catch (Exception e) { - // ignore - } finally { - try { - in.close(); - } catch (Exception e) { - // ignore - } - } - return null; - } -} |