summaryrefslogtreecommitdiffstats
path: root/packages
diff options
context:
space:
mode:
authorBestPig <bestpig82@gmail.com>2015-02-01 03:04:41 +0100
committerDanesh M <daneshm90@gmail.com>2015-12-10 14:03:13 -0800
commite799f3d7062eda84e4acf5a4c970b09c6cec6b66 (patch)
tree0425e833826c2ad2269e7519cd7ed1f584d8c923 /packages
parentb4f9cb3657b689b4d8ff01e01ba85376ad2c4aea (diff)
downloadframeworks_base-e799f3d7062eda84e4acf5a4c970b09c6cec6b66.zip
frameworks_base-e799f3d7062eda84e4acf5a4c970b09c6cec6b66.tar.gz
frameworks_base-e799f3d7062eda84e4acf5a4c970b09c6cec6b66.tar.bz2
SystemUI: add USB Tether tile
Drawables by blunden Change-Id: Ic44f2b596fe32152f3f722347a855325c52113c6
Diffstat (limited to 'packages')
-rw-r--r--packages/SystemUI/res/drawable/ic_qs_usb_tether_off.xml25
-rw-r--r--packages/SystemUI/res/drawable/ic_qs_usb_tether_on.xml25
-rw-r--r--packages/SystemUI/res/values/cm_strings.xml1
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/tiles/UsbTetherTile.java119
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/QSTileHost.java3
5 files changed, 173 insertions, 0 deletions
diff --git a/packages/SystemUI/res/drawable/ic_qs_usb_tether_off.xml b/packages/SystemUI/res/drawable/ic_qs_usb_tether_off.xml
new file mode 100644
index 0000000..3d54152
--- /dev/null
+++ b/packages/SystemUI/res/drawable/ic_qs_usb_tether_off.xml
@@ -0,0 +1,25 @@
+<!--
+ Copyright (C) 2015 The CyanogenMod 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="64dp"
+ android:height="64dp"
+ android:viewportWidth="64"
+ android:viewportHeight="64">
+
+ <path
+ android:fillColor="#4DFFFFFF"
+ android:pathData="M48.677,29.715h5.255v-7.254h4.401l-7.047-9.612l-7.052,9.612h4.443V29.715z M54.688,46.753l3.645-4.971h-4.401v-7.255 h-5.255v6.215L54.688,46.753z M36.741,28.805v-3.923h2.109v-8.445h-8.444v6.034L36.741,28.805z M23.942,16.007v-1.679h4.562 l-6.547-8.976l-3.656,5.014L23.942,16.007z M28.916,34.699l22.692,22.692l3.324-3.324L7.6,6.734l-3.324,3.323l15.693,15.694 l0.004,10.381l-8.571-3.715v-3.896c1.257-0.734,2.111-2.079,2.111-3.639c0-2.33-1.887-4.222-4.224-4.222 c-2.332,0-4.222,1.892-4.222,4.222c0,1.56,0.854,2.905,2.113,3.639v6.668l12.794,5.547v5.609c-2.518,0.837-4.348,3.185-4.348,5.987 c0,3.495,2.835,6.333,6.332,6.333c3.501,0,6.337-2.838,6.337-6.333c0-2.802-1.83-5.15-4.352-5.987v-9.113L28.916,34.699z M23.938,29.72l1.843,1.843l-1.839,0.93L23.938,29.72z" />
+</vector> \ No newline at end of file
diff --git a/packages/SystemUI/res/drawable/ic_qs_usb_tether_on.xml b/packages/SystemUI/res/drawable/ic_qs_usb_tether_on.xml
new file mode 100644
index 0000000..54f075c
--- /dev/null
+++ b/packages/SystemUI/res/drawable/ic_qs_usb_tether_on.xml
@@ -0,0 +1,25 @@
+<!--
+ Copyright (C) 2015 The CyanogenMod 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="64dp"
+ android:height="64dp"
+ android:viewportWidth="64"
+ android:viewportHeight="64">
+
+ <path
+ android:fillColor="#FFFFFF"
+ android:pathData="M48.677,29.724h5.255V22.47h4.401l-7.047-9.611l-7.052,9.611h4.443V29.724z M48.677,34.537h5.255v7.254h4.401l-7.047,9.611 l-7.052-9.611h4.443V34.537z M38.85,16.447h-8.444v8.445h2.11v3.251l-8.574,4.36V14.337h4.562l-6.547-8.975l-6.545,8.975h4.561 v21.805l-8.571-3.715v-3.896c1.257-0.734,2.111-2.079,2.111-3.639c0-2.33-1.887-4.222-4.224-4.222c-2.332,0-4.222,1.892-4.222,4.222c0,1.56,0.854,2.905,2.113,3.639v6.668l12.794,5.547v5.609c-2.518,0.837-4.348,3.184-4.348,5.987c0,3.495,2.835,6.333,6.332,6.333c3.501,0,6.337-2.838,6.337-6.333c0-2.802-1.83-5.15-4.352-5.987v-9.113l12.798-6.512v-5.839h2.11L38.85,16.447L38.85,16.447z" />
+</vector> \ No newline at end of file
diff --git a/packages/SystemUI/res/values/cm_strings.xml b/packages/SystemUI/res/values/cm_strings.xml
index 7938038..b324b4f 100644
--- a/packages/SystemUI/res/values/cm_strings.xml
+++ b/packages/SystemUI/res/values/cm_strings.xml
@@ -122,4 +122,5 @@
<string name="accessibility_quick_settings_sync_changed_on">Sync turned on.</string>
<string name="quick_settings_sync_label">Sync</string>
<string name="quick_settings_volume_panel_label">Volume panel</string>
+ <string name="quick_settings_usb_tether_label">USB tethering</string>
</resources>
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/UsbTetherTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/UsbTetherTile.java
new file mode 100644
index 0000000..b3b013c
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/UsbTetherTile.java
@@ -0,0 +1,119 @@
+/*
+ * Copyright (C) 2015 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.systemui.qs.tiles;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.hardware.usb.UsbManager;
+import android.provider.Settings;
+import android.net.ConnectivityManager;
+
+import com.android.internal.logging.MetricsConstants;
+import com.android.systemui.R;
+import com.android.systemui.qs.QSTile;
+
+/**
+ * USB Tether quick settings tile
+ */
+public class UsbTetherTile extends QSTile<QSTile.BooleanState> {
+ private static final Intent WIRELESS_SETTINGS = new Intent(Settings.ACTION_WIRELESS_SETTINGS);
+
+ private final ConnectivityManager mConnectivityManager;
+
+ private boolean mListening;
+
+ private boolean mUsbTethered = false;
+ private boolean mUsbConnected = false;
+
+ public UsbTetherTile(Host host) {
+ super(host);
+ mConnectivityManager = (ConnectivityManager) mContext
+ .getSystemService(Context.CONNECTIVITY_SERVICE);
+ }
+
+ protected BooleanState newTileState() {
+ return new BooleanState();
+ }
+
+ @Override
+ public void setListening(boolean listening) {
+ if (mListening == listening)
+ return;
+ mListening = listening;
+ if (listening) {
+ final IntentFilter filter = new IntentFilter();
+ filter.addAction(UsbManager.ACTION_USB_STATE);
+ mContext.registerReceiver(mReceiver, filter);
+ } else {
+ mContext.unregisterReceiver(mReceiver);
+ }
+ }
+
+ @Override
+ protected void handleClick() {
+ mConnectivityManager.setUsbTethering(!mUsbTethered);
+ }
+
+ @Override
+ protected void handleLongClick() {
+ mHost.startActivityDismissingKeyguard(WIRELESS_SETTINGS);
+ }
+
+ private void updateState() {
+ String[] tetheredIfaces = mConnectivityManager.getTetheredIfaces();
+ String[] usbRegexs = mConnectivityManager.getTetherableUsbRegexs();
+
+ mUsbTethered = false;
+ for (String s : tetheredIfaces) {
+ for (String regex : usbRegexs) {
+ if (s.matches(regex)) {
+ mUsbTethered = true;
+ return;
+ }
+ }
+ }
+ }
+
+ private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ mUsbConnected = intent.getBooleanExtra(UsbManager.USB_CONNECTED, false);
+ if (mUsbConnected && mConnectivityManager.isTetheringSupported()) {
+ updateState();
+ } else {
+ mUsbTethered = false;
+ }
+ refreshState();
+ }
+ };
+
+ @Override
+ protected void handleUpdateState(BooleanState state, Object arg) {
+ state.visible = mUsbConnected && mConnectivityManager.isTetheringSupported();
+ state.value = mUsbTethered;
+ state.label = mContext.getString(R.string.quick_settings_usb_tether_label);
+ state.icon = mUsbTethered ? ResourceIcon.get(R.drawable.ic_qs_usb_tether_on)
+ : ResourceIcon.get(R.drawable.ic_qs_usb_tether_off);
+ }
+
+ @Override
+ public int getMetricsCategory() {
+ return MetricsConstants.DONT_TRACK_ME_BRO;
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QSTileHost.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QSTileHost.java
index 2cd0971..d1be8b7 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QSTileHost.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QSTileHost.java
@@ -54,6 +54,7 @@ import com.android.systemui.qs.tiles.NfcTile;
import com.android.systemui.qs.tiles.ProfilesTile;
import com.android.systemui.qs.tiles.RotationLockTile;
import com.android.systemui.qs.tiles.SyncTile;
+import com.android.systemui.qs.tiles.UsbTetherTile;
import com.android.systemui.qs.tiles.VolumeTile;
import com.android.systemui.qs.tiles.WifiTile;
import com.android.systemui.statusbar.CustomTileData;
@@ -340,6 +341,7 @@ public class QSTileHost implements QSTile.Host, Tunable {
else if (tileSpec.equals("profiles")) return new ProfilesTile(this);
else if (tileSpec.equals("sync")) return new SyncTile(this);
else if (tileSpec.equals("volume_panel")) return new VolumeTile(this);
+ else if (tileSpec.equals("usb_tether")) return new UsbTetherTile(this);
else if (tileSpec.startsWith(IntentTile.PREFIX)) return IntentTile.create(this,tileSpec);
else throw new IllegalArgumentException("Bad tile spec: " + tileSpec);
}
@@ -416,6 +418,7 @@ public class QSTileHost implements QSTile.Host, Tunable {
else if (spec.equals("profiles")) return R.string.quick_settings_profiles;
else if (spec.equals("sync")) return R.string.quick_settings_sync_label;
else if (spec.equals("volume_panel")) return R.string.quick_settings_volume_panel_label;
+ else if (spec.equals("usb_tether")) return R.string.quick_settings_usb_tether_label;
return 0;
}