summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSteve Kondik <steve@cyngn.com>2016-03-10 20:35:32 -0800
committerSteve Kondik <steve@cyngn.com>2016-03-10 20:35:32 -0800
commitd8c29b8f2327a2df83e606e286d053cfce28ba16 (patch)
tree84633dc0628aadf6e9ef9d1f516daeb55794e128 /src
parentd35875e92b00910f43b4227f22b673a66ca59c6d (diff)
parent9738c9f6a386eb782d1e98962c6407304eb98f33 (diff)
downloadpackages_apps_Settings-d8c29b8f2327a2df83e606e286d053cfce28ba16.zip
packages_apps_Settings-d8c29b8f2327a2df83e606e286d053cfce28ba16.tar.gz
packages_apps_Settings-d8c29b8f2327a2df83e606e286d053cfce28ba16.tar.bz2
Merge tag 'android-6.0.1_r22' of https://android.googlesource.com/platform/packages/apps/Settings into cm-13.0
Android 6.0.1 release 22 Change-Id: Ided010bc125199d47ca59d10f0ed5032a26632ff
Diffstat (limited to 'src')
-rw-r--r--src/com/android/settings/DataUsageSummary.java80
-rw-r--r--src/com/android/settings/DevelopmentSettings.java31
-rw-r--r--src/com/android/settings/ResetNetworkConfirm.java3
-rw-r--r--src/com/android/settings/UserAdapter.java4
-rw-r--r--src/com/android/settings/Utils.java73
-rw-r--r--src/com/android/settings/WifiCallingSettings.java13
-rw-r--r--src/com/android/settings/WirelessSettings.java2
-rw-r--r--src/com/android/settings/applications/AppStateWriteSettingsBridge.java6
-rwxr-xr-xsrc/com/android/settings/applications/InstalledAppDetails.java8
-rw-r--r--src/com/android/settings/applications/RunningState.java2
-rw-r--r--src/com/android/settings/drawable/CircleFramedDrawable.java136
-rw-r--r--src/com/android/settings/fuelgauge/BatteryEntry.java2
-rw-r--r--src/com/android/settings/net/ChartData.java27
-rw-r--r--src/com/android/settings/net/ChartDataLoader.java145
-rw-r--r--src/com/android/settings/net/DataUsageMeteredSettings.java1
-rw-r--r--src/com/android/settings/net/NetworkPolicyEditor.java252
-rw-r--r--src/com/android/settings/net/SummaryForAllUidLoader.java79
-rw-r--r--src/com/android/settings/net/UidDetail.java27
-rw-r--r--src/com/android/settings/net/UidDetailProvider.java194
-rw-r--r--src/com/android/settings/users/EditUserInfoController.java4
-rw-r--r--src/com/android/settings/users/EditUserPhotoController.java4
-rw-r--r--src/com/android/settings/users/RestrictedProfileSettings.java2
-rw-r--r--src/com/android/settings/users/UserSettings.java2
23 files changed, 74 insertions, 1023 deletions
diff --git a/src/com/android/settings/DataUsageSummary.java b/src/com/android/settings/DataUsageSummary.java
index c4db7c5..63120e3 100644
--- a/src/com/android/settings/DataUsageSummary.java
+++ b/src/com/android/settings/DataUsageSummary.java
@@ -81,8 +81,6 @@ import android.net.TrafficStats;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.INetworkManagementService;
-import android.os.Parcel;
-import android.os.Parcelable;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.SystemProperties;
@@ -98,7 +96,6 @@ import android.text.format.Formatter;
import android.text.format.Time;
import android.util.Log;
import android.util.SparseArray;
-import android.util.SparseBooleanArray;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
@@ -131,19 +128,20 @@ import android.widget.Toast;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.telephony.PhoneConstants;
import com.android.settings.drawable.InsetBoundsDrawable;
-import com.android.settings.net.ChartData;
-import com.android.settings.net.ChartDataLoader;
import com.android.settings.net.DataUsageMeteredSettings;
-import com.android.settings.net.NetworkPolicyEditor;
-import com.android.settings.net.SummaryForAllUidLoader;
-import com.android.settings.net.UidDetail;
-import com.android.settings.net.UidDetailProvider;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
import com.android.settings.search.SearchIndexableRaw;
import com.android.settings.widget.ChartDataUsageView;
import com.android.settings.widget.ChartDataUsageView.DataUsageChartListener;
import com.android.settings.widget.ChartNetworkSeriesView;
+import com.android.settingslib.AppItem;
+import com.android.settingslib.NetworkPolicyEditor;
+import com.android.settingslib.net.ChartData;
+import com.android.settingslib.net.ChartDataLoader;
+import com.android.settingslib.net.SummaryForAllUidLoader;
+import com.android.settingslib.net.UidDetail;
+import com.android.settingslib.net.UidDetailProvider;
import com.google.android.collect.Lists;
import libcore.util.Objects;
@@ -1638,70 +1636,6 @@ public class DataUsageSummary extends HighlightingFragment implements Indexable
}
}
- public static class AppItem implements Comparable<AppItem>, Parcelable {
- public static final int CATEGORY_USER = 0;
- public static final int CATEGORY_APP_TITLE = 1;
- public static final int CATEGORY_APP = 2;
-
- public final int key;
- public boolean restricted;
- public int category;
-
- public SparseBooleanArray uids = new SparseBooleanArray();
- public long total;
-
- public AppItem() {
- this.key = 0;
- }
-
- public AppItem(int key) {
- this.key = key;
- }
-
- public AppItem(Parcel parcel) {
- key = parcel.readInt();
- uids = parcel.readSparseBooleanArray();
- total = parcel.readLong();
- }
-
- public void addUid(int uid) {
- uids.put(uid, true);
- }
-
- @Override
- public void writeToParcel(Parcel dest, int flags) {
- dest.writeInt(key);
- dest.writeSparseBooleanArray(uids);
- dest.writeLong(total);
- }
-
- @Override
- public int describeContents() {
- return 0;
- }
-
- @Override
- public int compareTo(AppItem another) {
- int comparison = Integer.compare(category, another.category);
- if (comparison == 0) {
- comparison = Long.compare(another.total, total);
- }
- return comparison;
- }
-
- public static final Creator<AppItem> CREATOR = new Creator<AppItem>() {
- @Override
- public AppItem createFromParcel(Parcel in) {
- return new AppItem(in);
- }
-
- @Override
- public AppItem[] newArray(int size) {
- return new AppItem[size];
- }
- };
- }
-
/**
* Adapter of applications, sorted by total usage descending.
*/
diff --git a/src/com/android/settings/DevelopmentSettings.java b/src/com/android/settings/DevelopmentSettings.java
index d8b1d17..d7a4145 100644
--- a/src/com/android/settings/DevelopmentSettings.java
+++ b/src/com/android/settings/DevelopmentSettings.java
@@ -76,6 +76,7 @@ import android.view.ViewGroup;
import android.view.accessibility.AccessibilityManager;
import android.widget.Switch;
import android.widget.TextView;
+import android.widget.Toast;
import com.android.internal.logging.MetricsLogger;
import com.android.settings.fuelgauge.InactiveApps;
@@ -125,6 +126,7 @@ public class DevelopmentSettings extends SettingsPreferenceFragment
private static final String BUGREPORT_IN_POWER_KEY = "bugreport_in_power";
private static final String OPENGL_TRACES_PROPERTY = "debug.egl.trace";
private static final String TUNER_UI_KEY = "tuner_ui";
+ private static final String COLOR_TEMPERATURE_PROPERTY = "persist.sys.debug.color_temp";
private static final String DEBUG_APP_KEY = "debug_app";
private static final String WAIT_FOR_DEBUGGER_KEY = "wait_for_debugger";
@@ -166,6 +168,7 @@ public class DevelopmentSettings extends SettingsPreferenceFragment
private static final String WIFI_LEGACY_DHCP_CLIENT_KEY = "legacy_dhcp_client";
private static final String MOBILE_DATA_ALWAYS_ON = "mobile_data_always_on";
private static final String KEY_COLOR_MODE = "color_mode";
+ private static final String COLOR_TEMPERATURE_KEY = "color_temperature";
private static final String INACTIVE_APPS_KEY = "inactive_apps";
@@ -291,6 +294,8 @@ public class DevelopmentSettings extends SettingsPreferenceFragment
private SwitchPreference mDevelopmentShortcut;
+ private SwitchPreference mColorTemperaturePreference;
+
private final ArrayList<Preference> mAllPrefs = new ArrayList<Preference>();
private final ArrayList<SwitchPreference> mResetSwitchPrefs
@@ -484,6 +489,15 @@ public class DevelopmentSettings extends SettingsPreferenceFragment
removePreference(KEY_COLOR_MODE);
mColorModePreference = null;
}
+
+ mColorTemperaturePreference = (SwitchPreference) findPreference(COLOR_TEMPERATURE_KEY);
+ if (getResources().getBoolean(R.bool.config_enableColorTemperature)) {
+ mAllPrefs.add(mColorTemperaturePreference);
+ mResetSwitchPrefs.add(mColorTemperaturePreference);
+ } else {
+ removePreference(COLOR_TEMPERATURE_KEY);
+ mColorTemperaturePreference = null;
+ }
}
private ListPreference addListPreference(String prefKey) {
@@ -720,6 +734,9 @@ public class DevelopmentSettings extends SettingsPreferenceFragment
updateAdvancedRebootOptions();
updateDevelopmentShortcutOptions();
updateUpdateRecoveryOptions();
+ if (mColorTemperaturePreference != null) {
+ updateColorTemperature();
+ }
}
private void writeAdvancedRebootOptions() {
@@ -1410,6 +1427,18 @@ public class DevelopmentSettings extends SettingsPreferenceFragment
}
}
+ private void updateColorTemperature() {
+ updateSwitchPreference(mColorTemperaturePreference,
+ SystemProperties.getBoolean(COLOR_TEMPERATURE_PROPERTY, false));
+ }
+
+ private void writeColorTemperature() {
+ SystemProperties.set(COLOR_TEMPERATURE_PROPERTY,
+ mColorTemperaturePreference.isChecked() ? "1" : "0");
+ pokeSystemProperties();
+ Toast.makeText(getActivity(), R.string.color_temperature_toast, Toast.LENGTH_LONG).show();
+ }
+
private void updateUSBAudioOptions() {
updateSwitchPreference(mUSBAudio, Settings.Secure.getInt(getContentResolver(),
Settings.Secure.USB_AUDIO_AUTOMATIC_ROUTING_DISABLED, 0) != 0);
@@ -1993,6 +2022,8 @@ public class DevelopmentSettings extends SettingsPreferenceFragment
writeLegacyDhcpClientOptions();
} else if (preference == mMobileDataAlwaysOn) {
writeMobileDataAlwaysOnOptions();
+ } else if (preference == mColorTemperaturePreference) {
+ writeColorTemperature();
} else if (preference == mUSBAudio) {
writeUSBAudioOptions();
} else if (preference == mAdvancedReboot) {
diff --git a/src/com/android/settings/ResetNetworkConfirm.java b/src/com/android/settings/ResetNetworkConfirm.java
index db4b9a5..df708b9 100644
--- a/src/com/android/settings/ResetNetworkConfirm.java
+++ b/src/com/android/settings/ResetNetworkConfirm.java
@@ -34,6 +34,7 @@ import android.widget.Button;
import android.widget.Spinner;
import android.widget.Toast;
+import com.android.ims.ImsManager;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.telephony.PhoneConstants;
@@ -100,6 +101,8 @@ public class ResetNetworkConfirm extends InstrumentedFragment {
btManager.getAdapter().factoryReset();
}
+ ImsManager.factoryReset(context);
+
Toast.makeText(context, R.string.reset_network_complete_toast, Toast.LENGTH_SHORT)
.show();
}
diff --git a/src/com/android/settings/UserAdapter.java b/src/com/android/settings/UserAdapter.java
index dcdc7eb..2ac908e 100644
--- a/src/com/android/settings/UserAdapter.java
+++ b/src/com/android/settings/UserAdapter.java
@@ -33,7 +33,7 @@ import android.widget.SpinnerAdapter;
import android.widget.TextView;
import com.android.internal.util.UserIcons;
-import com.android.settings.drawable.CircleFramedDrawable;
+import com.android.settingslib.drawable.CircleFramedDrawable;
import java.util.ArrayList;
@@ -173,4 +173,4 @@ public class UserAdapter implements SpinnerAdapter, ListAdapter {
public boolean isEnabled(int position) {
return true;
}
-} \ No newline at end of file
+}
diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java
index f3f870b..837c36c 100644
--- a/src/com/android/settings/Utils.java
+++ b/src/com/android/settings/Utils.java
@@ -95,10 +95,10 @@ import android.widget.TabWidget;
import com.android.internal.util.UserIcons;
import com.android.settings.UserAdapter.UserDetails;
+import com.android.settings.bluetooth.BluetoothSettings;
import com.android.settings.dashboard.DashboardTile;
-import com.android.settings.drawable.CircleFramedDrawable;
import com.android.settingslib.applications.ApplicationsState;
-import com.android.settings.bluetooth.BluetoothSettings;
+import com.android.settingslib.drawable.CircleFramedDrawable;
import java.io.IOException;
import java.io.InputStream;
@@ -606,36 +606,6 @@ public final class Utils {
view.setPaddingRelative(paddingStart, 0, paddingEnd, paddingBottom);
}
- /**
- * Return string resource that best describes combination of tethering
- * options available on this device.
- */
- public static int getTetheringLabel(ConnectivityManager cm) {
- String[] usbRegexs = cm.getTetherableUsbRegexs();
- String[] wifiRegexs = cm.getTetherableWifiRegexs();
- String[] bluetoothRegexs = cm.getTetherableBluetoothRegexs();
-
- boolean usbAvailable = usbRegexs.length != 0;
- boolean wifiAvailable = wifiRegexs.length != 0;
- boolean bluetoothAvailable = bluetoothRegexs.length != 0;
-
- if (wifiAvailable && usbAvailable && bluetoothAvailable) {
- return R.string.tether_settings_title_all;
- } else if (wifiAvailable && usbAvailable) {
- return R.string.tether_settings_title_all;
- } else if (wifiAvailable && bluetoothAvailable) {
- return R.string.tether_settings_title_all;
- } else if (wifiAvailable) {
- return R.string.tether_settings_title_wifi;
- } else if (usbAvailable && bluetoothAvailable) {
- return R.string.tether_settings_title_usb_bluetooth;
- } else if (usbAvailable) {
- return R.string.tether_settings_title_usb;
- } else {
- return R.string.tether_settings_title_bluetooth;
- }
- }
-
/* Used by UserSettings as well. Call this on a non-ui thread. */
public static boolean copyMeProfilePhoto(Context context, UserInfo user) {
Uri contactUri = Profile.CONTENT_URI;
@@ -1087,45 +1057,6 @@ public final class Utils {
}
/**
- * Returns a circular icon for a user.
- */
- public static Drawable getUserIcon(Context context, UserManager um, UserInfo user) {
- if (user.isManagedProfile()) {
- // We use predefined values for managed profiles
- Bitmap b = BitmapFactory.decodeResource(context.getResources(),
- com.android.internal.R.drawable.ic_corp_icon);
- return CircleFramedDrawable.getInstance(context, b);
- }
- if (user.iconPath != null) {
- Bitmap icon = um.getUserIcon(user.id);
- if (icon != null) {
- return CircleFramedDrawable.getInstance(context, icon);
- }
- }
- return CircleFramedDrawable.getInstance(context, UserIcons.convertToBitmap(
- UserIcons.getDefaultUserIcon(user.id, /* light= */ false)));
- }
-
- /**
- * Returns a label for the user, in the form of "User: user name" or "Work profile".
- */
- public static String getUserLabel(Context context, UserInfo info) {
- String name = info != null ? info.name : null;
- if (info.isManagedProfile()) {
- // We use predefined values for managed profiles
- return context.getString(R.string.managed_user_title);
- } else if (info.isGuest()) {
- name = context.getString(R.string.user_guest);
- }
- if (name == null && info != null) {
- name = Integer.toString(info.id);
- } else if (info == null) {
- name = context.getString(R.string.unknown);
- }
- return context.getResources().getString(R.string.running_process_item_user_label, name);
- }
-
- /**
* Return whether or not the user should have a SIM Cards option in Settings.
* TODO: Change back to returning true if count is greater than one after testing.
* TODO: See bug 16533525.
diff --git a/src/com/android/settings/WifiCallingSettings.java b/src/com/android/settings/WifiCallingSettings.java
index d928de2..f4d143d 100644
--- a/src/com/android/settings/WifiCallingSettings.java
+++ b/src/com/android/settings/WifiCallingSettings.java
@@ -23,9 +23,11 @@ import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
+import android.os.PersistableBundle;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceScreen;
+import android.telephony.CarrierConfigManager;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.Log;
@@ -58,6 +60,7 @@ public class WifiCallingSettings extends SettingsPreferenceFragment
private TextView mEmptyView;
private boolean mValidListener = false;
+ private boolean mEditableWfcMode = true;
private final PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
/*
@@ -161,6 +164,15 @@ public class WifiCallingSettings extends SettingsPreferenceFragment
mIntentFilter = new IntentFilter();
mIntentFilter.addAction(ImsManager.ACTION_IMS_REGISTRATION_ERROR);
+
+ CarrierConfigManager configManager = (CarrierConfigManager)
+ getSystemService(Context.CARRIER_CONFIG_SERVICE);
+ if (configManager != null) {
+ PersistableBundle b = configManager.getConfig();
+ if (b != null) {
+ mEditableWfcMode = b.getBoolean(CarrierConfigManager.KEY_EDITABLE_WFC_MODE_BOOL);
+ }
+ }
}
@Override
@@ -246,6 +258,7 @@ public class WifiCallingSettings extends SettingsPreferenceFragment
} else {
preferenceScreen.removePreference(mButtonWfcMode);
}
+ preferenceScreen.setEnabled(mEditableWfcMode);
}
@Override
diff --git a/src/com/android/settings/WirelessSettings.java b/src/com/android/settings/WirelessSettings.java
index 13ce21a..4a0c9e3 100644
--- a/src/com/android/settings/WirelessSettings.java
+++ b/src/com/android/settings/WirelessSettings.java
@@ -338,7 +338,7 @@ public class WirelessSettings extends SettingsPreferenceFragment implements Inde
getPreferenceScreen().removePreference(findPreference(KEY_TETHER_SETTINGS));
} else {
Preference p = findPreference(KEY_TETHER_SETTINGS);
- p.setTitle(Utils.getTetheringLabel(cm));
+ p.setTitle(com.android.settingslib.Utils.getTetheringLabel(cm));
// Grey out if provisioning is not available.
p.setEnabled(!TetherSettings
diff --git a/src/com/android/settings/applications/AppStateWriteSettingsBridge.java b/src/com/android/settings/applications/AppStateWriteSettingsBridge.java
index 7cdf7ea..ef743fa 100644
--- a/src/com/android/settings/applications/AppStateWriteSettingsBridge.java
+++ b/src/com/android/settings/applications/AppStateWriteSettingsBridge.java
@@ -34,11 +34,9 @@ public class AppStateWriteSettingsBridge extends AppStateAppOpsBridge {
private static final String TAG = "AppStateWriteSettingsBridge";
private static final int APP_OPS_OP_CODE = AppOpsManager.OP_WRITE_SETTINGS;
private static final String PM_WRITE_SETTINGS = Manifest.permission.WRITE_SETTINGS;
- private static final String PM_CHANGE_NETWORK_STATE = Manifest.permission.CHANGE_NETWORK_STATE;
- // CHANGE_NETWORK_STATE is now merged with WRITE_SETTINGS
+
private static final String[] PM_PERMISSIONS = {
- PM_WRITE_SETTINGS,
- PM_CHANGE_NETWORK_STATE
+ PM_WRITE_SETTINGS
};
public AppStateWriteSettingsBridge(Context context, ApplicationsState appState, Callback
diff --git a/src/com/android/settings/applications/InstalledAppDetails.java b/src/com/android/settings/applications/InstalledAppDetails.java
index c866d29..4d29c73 100755
--- a/src/com/android/settings/applications/InstalledAppDetails.java
+++ b/src/com/android/settings/applications/InstalledAppDetails.java
@@ -70,20 +70,20 @@ import com.android.internal.logging.MetricsLogger;
import com.android.internal.os.BatterySipper;
import com.android.internal.os.BatteryStatsHelper;
import com.android.settings.DataUsageSummary;
-import com.android.settings.DataUsageSummary.AppItem;
import com.android.settings.R;
import com.android.settings.SettingsActivity;
import com.android.settings.Utils;
import com.android.settings.applications.PermissionsSummaryHelper.PermissionsResultCallback;
import com.android.settings.fuelgauge.BatteryEntry;
import com.android.settings.fuelgauge.PowerUsageDetail;
-import com.android.settings.net.ChartData;
-import com.android.settings.net.ChartDataLoader;
import com.android.settings.notification.AppNotificationSettings;
import com.android.settings.notification.NotificationBackend;
import com.android.settings.notification.NotificationBackend.AppRow;
-import com.android.settingslib.applications.ApplicationsState;
+import com.android.settingslib.AppItem;
import com.android.settingslib.applications.ApplicationsState.AppEntry;
+import com.android.settingslib.applications.ApplicationsState;
+import com.android.settingslib.net.ChartData;
+import com.android.settingslib.net.ChartDataLoader;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
diff --git a/src/com/android/settings/applications/RunningState.java b/src/com/android/settings/applications/RunningState.java
index 2286a24..c63bcd8 100644
--- a/src/com/android/settings/applications/RunningState.java
+++ b/src/com/android/settings/applications/RunningState.java
@@ -45,8 +45,8 @@ import android.util.Log;
import android.util.SparseArray;
import com.android.settings.R;
-import com.android.settings.Utils;
import com.android.settingslib.applications.InterestingConfigChanges;
+import com.android.settingslib.Utils;
import java.util.ArrayList;
import java.util.Collections;
diff --git a/src/com/android/settings/drawable/CircleFramedDrawable.java b/src/com/android/settings/drawable/CircleFramedDrawable.java
deleted file mode 100644
index 31b8922..0000000
--- a/src/com/android/settings/drawable/CircleFramedDrawable.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * Copyright (C) 2013 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.settings.drawable;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.graphics.Bitmap;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.ColorFilter;
-import android.graphics.Paint;
-import android.graphics.Path;
-import android.graphics.PixelFormat;
-import android.graphics.PorterDuff;
-import android.graphics.PorterDuffXfermode;
-import android.graphics.Rect;
-import android.graphics.RectF;
-import android.graphics.drawable.Drawable;
-
-import com.android.settings.R;
-
-/**
- * Converts the user avatar icon to a circularly clipped one.
- * TODO: Move this to an internal framework class and share with the one in Keyguard.
- */
-public class CircleFramedDrawable extends Drawable {
-
- private final Bitmap mBitmap;
- private final int mSize;
- private final Paint mPaint;
-
- private float mScale;
- private Rect mSrcRect;
- private RectF mDstRect;
-
- public static CircleFramedDrawable getInstance(Context context, Bitmap icon) {
- Resources res = context.getResources();
- float iconSize = res.getDimension(R.dimen.circle_avatar_size);
-
- CircleFramedDrawable instance = new CircleFramedDrawable(icon, (int) iconSize);
- return instance;
- }
-
- public CircleFramedDrawable(Bitmap icon, int size) {
- super();
- mSize = size;
-
- mBitmap = Bitmap.createBitmap(mSize, mSize, Bitmap.Config.ARGB_8888);
- final Canvas canvas = new Canvas(mBitmap);
-
- final int width = icon.getWidth();
- final int height = icon.getHeight();
- final int square = Math.min(width, height);
-
- final Rect cropRect = new Rect((width - square) / 2, (height - square) / 2, square, square);
- final RectF circleRect = new RectF(0f, 0f, mSize, mSize);
-
- final Path fillPath = new Path();
- fillPath.addArc(circleRect, 0f, 360f);
-
- canvas.drawColor(0, PorterDuff.Mode.CLEAR);
-
- // opaque circle matte
- mPaint = new Paint();
- mPaint.setAntiAlias(true);
- mPaint.setColor(Color.BLACK);
- mPaint.setStyle(Paint.Style.FILL);
- canvas.drawPath(fillPath, mPaint);
-
- // mask in the icon where the bitmap is opaque
- mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
- canvas.drawBitmap(icon, cropRect, circleRect, mPaint);
-
- // prepare paint for frame drawing
- mPaint.setXfermode(null);
-
- mScale = 1f;
-
- mSrcRect = new Rect(0, 0, mSize, mSize);
- mDstRect = new RectF(0, 0, mSize, mSize);
- }
-
- @Override
- public void draw(Canvas canvas) {
- final float inside = mScale * mSize;
- final float pad = (mSize - inside) / 2f;
-
- mDstRect.set(pad, pad, mSize - pad, mSize - pad);
- canvas.drawBitmap(mBitmap, mSrcRect, mDstRect, null);
- }
-
- public void setScale(float scale) {
- mScale = scale;
- }
-
- public float getScale() {
- return mScale;
- }
-
- @Override
- public int getOpacity() {
- return PixelFormat.TRANSLUCENT;
- }
-
- @Override
- public void setAlpha(int alpha) {
- }
-
- @Override
- public void setColorFilter(ColorFilter cf) {
- }
-
- @Override
- public int getIntrinsicWidth() {
- return mSize;
- }
-
- @Override
- public int getIntrinsicHeight() {
- return mSize;
- }
-}
diff --git a/src/com/android/settings/fuelgauge/BatteryEntry.java b/src/com/android/settings/fuelgauge/BatteryEntry.java
index c034d19..fb211dc 100644
--- a/src/com/android/settings/fuelgauge/BatteryEntry.java
+++ b/src/com/android/settings/fuelgauge/BatteryEntry.java
@@ -32,7 +32,7 @@ import android.util.Log;
import com.android.internal.os.BatterySipper;
import com.android.settings.R;
-import com.android.settings.Utils;
+import com.android.settingslib.Utils;
import java.util.ArrayList;
import java.util.HashMap;
diff --git a/src/com/android/settings/net/ChartData.java b/src/com/android/settings/net/ChartData.java
deleted file mode 100644
index 0b8969e..0000000
--- a/src/com/android/settings/net/ChartData.java
+++ /dev/null
@@ -1,27 +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.settings.net;
-
-import android.net.NetworkStatsHistory;
-
-public class ChartData {
- public NetworkStatsHistory network;
-
- public NetworkStatsHistory detail;
- public NetworkStatsHistory detailDefault;
- public NetworkStatsHistory detailForeground;
-}
diff --git a/src/com/android/settings/net/ChartDataLoader.java b/src/com/android/settings/net/ChartDataLoader.java
deleted file mode 100644
index e0336b7..0000000
--- a/src/com/android/settings/net/ChartDataLoader.java
+++ /dev/null
@@ -1,145 +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.settings.net;
-
-import static android.net.NetworkStats.SET_DEFAULT;
-import static android.net.NetworkStats.SET_FOREGROUND;
-import static android.net.NetworkStats.TAG_NONE;
-import static android.net.NetworkStatsHistory.FIELD_RX_BYTES;
-import static android.net.NetworkStatsHistory.FIELD_TX_BYTES;
-import static android.text.format.DateUtils.HOUR_IN_MILLIS;
-
-import android.content.AsyncTaskLoader;
-import android.content.Context;
-import android.net.INetworkStatsSession;
-import android.net.NetworkStatsHistory;
-import android.net.NetworkTemplate;
-import android.os.Bundle;
-import android.os.RemoteException;
-
-import com.android.settings.DataUsageSummary.AppItem;
-
-/**
- * Loader for historical chart data for both network and UID details.
- */
-public class ChartDataLoader extends AsyncTaskLoader<ChartData> {
- private static final String KEY_TEMPLATE = "template";
- private static final String KEY_APP = "app";
- private static final String KEY_FIELDS = "fields";
-
- private final INetworkStatsSession mSession;
- private final Bundle mArgs;
-
- public static Bundle buildArgs(NetworkTemplate template, AppItem app) {
- return buildArgs(template, app, FIELD_RX_BYTES | FIELD_TX_BYTES);
- }
-
- public static Bundle buildArgs(NetworkTemplate template, AppItem app, int fields) {
- final Bundle args = new Bundle();
- args.putParcelable(KEY_TEMPLATE, template);
- args.putParcelable(KEY_APP, app);
- args.putInt(KEY_FIELDS, fields);
- return args;
- }
-
- public ChartDataLoader(Context context, INetworkStatsSession session, Bundle args) {
- super(context);
- mSession = session;
- mArgs = args;
- }
-
- @Override
- protected void onStartLoading() {
- super.onStartLoading();
- forceLoad();
- }
-
- @Override
- public ChartData loadInBackground() {
- final NetworkTemplate template = mArgs.getParcelable(KEY_TEMPLATE);
- final AppItem app = mArgs.getParcelable(KEY_APP);
- final int fields = mArgs.getInt(KEY_FIELDS);
-
- try {
- return loadInBackground(template, app, fields);
- } catch (RemoteException e) {
- // since we can't do much without history, and we don't want to
- // leave with half-baked UI, we bail hard.
- throw new RuntimeException("problem reading network stats", e);
- }
- }
-
- private ChartData loadInBackground(NetworkTemplate template, AppItem app, int fields)
- throws RemoteException {
- final ChartData data = new ChartData();
- data.network = mSession.getHistoryForNetwork(template, fields);
-
- if (app != null) {
- // load stats for current uid and template
- final int size = app.uids.size();
- for (int i = 0; i < size; i++) {
- final int uid = app.uids.keyAt(i);
- data.detailDefault = collectHistoryForUid(
- template, uid, SET_DEFAULT, data.detailDefault);
- data.detailForeground = collectHistoryForUid(
- template, uid, SET_FOREGROUND, data.detailForeground);
- }
-
- if (size > 0) {
- data.detail = new NetworkStatsHistory(data.detailForeground.getBucketDuration());
- data.detail.recordEntireHistory(data.detailDefault);
- data.detail.recordEntireHistory(data.detailForeground);
- } else {
- data.detailDefault = new NetworkStatsHistory(HOUR_IN_MILLIS);
- data.detailForeground = new NetworkStatsHistory(HOUR_IN_MILLIS);
- data.detail = new NetworkStatsHistory(HOUR_IN_MILLIS);
- }
- }
-
- return data;
- }
-
- @Override
- protected void onStopLoading() {
- super.onStopLoading();
- cancelLoad();
- }
-
- @Override
- protected void onReset() {
- super.onReset();
- cancelLoad();
- }
-
- /**
- * Collect {@link NetworkStatsHistory} for the requested UID, combining with
- * an existing {@link NetworkStatsHistory} if provided.
- */
- private NetworkStatsHistory collectHistoryForUid(
- NetworkTemplate template, int uid, int set, NetworkStatsHistory existing)
- throws RemoteException {
- final NetworkStatsHistory history = mSession.getHistoryForUid(
- template, uid, set, TAG_NONE, FIELD_RX_BYTES | FIELD_TX_BYTES);
-
- if (existing != null) {
- existing.recordEntireHistory(history);
- return existing;
- } else {
- return history;
- }
- }
-}
diff --git a/src/com/android/settings/net/DataUsageMeteredSettings.java b/src/com/android/settings/net/DataUsageMeteredSettings.java
index ec1dd38..59a8b92 100644
--- a/src/com/android/settings/net/DataUsageMeteredSettings.java
+++ b/src/com/android/settings/net/DataUsageMeteredSettings.java
@@ -40,6 +40,7 @@ import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
import com.android.settings.search.SearchIndexableRaw;
+import com.android.settingslib.NetworkPolicyEditor;
import java.util.ArrayList;
import java.util.List;
diff --git a/src/com/android/settings/net/NetworkPolicyEditor.java b/src/com/android/settings/net/NetworkPolicyEditor.java
deleted file mode 100644
index 1268c3f..0000000
--- a/src/com/android/settings/net/NetworkPolicyEditor.java
+++ /dev/null
@@ -1,252 +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.settings.net;
-
-import static android.net.NetworkPolicy.CYCLE_NONE;
-import static android.net.NetworkPolicy.LIMIT_DISABLED;
-import static android.net.NetworkPolicy.SNOOZE_NEVER;
-import static android.net.NetworkPolicy.WARNING_DISABLED;
-import static android.net.NetworkTemplate.MATCH_WIFI;
-import static com.android.internal.util.Preconditions.checkNotNull;
-
-import android.net.NetworkPolicy;
-import android.net.NetworkPolicyManager;
-import android.net.NetworkTemplate;
-import android.net.wifi.WifiInfo;
-import android.os.AsyncTask;
-import android.text.TextUtils;
-import android.text.format.Time;
-
-import com.google.android.collect.Lists;
-
-import java.util.ArrayList;
-
-/**
- * Utility class to modify list of {@link NetworkPolicy}. Specifically knows
- * about which policies can coexist. This editor offers thread safety when
- * talking with {@link NetworkPolicyManager}.
- */
-public class NetworkPolicyEditor {
- // TODO: be more robust when missing policies from service
-
- public static final boolean ENABLE_SPLIT_POLICIES = false;
-
- private NetworkPolicyManager mPolicyManager;
- private ArrayList<NetworkPolicy> mPolicies = Lists.newArrayList();
-
- public NetworkPolicyEditor(NetworkPolicyManager policyManager) {
- mPolicyManager = checkNotNull(policyManager);
- }
-
- public void read() {
- final NetworkPolicy[] policies = mPolicyManager.getNetworkPolicies();
-
- boolean modified = false;
- mPolicies.clear();
- for (NetworkPolicy policy : policies) {
- // TODO: find better place to clamp these
- if (policy.limitBytes < -1) {
- policy.limitBytes = LIMIT_DISABLED;
- modified = true;
- }
- if (policy.warningBytes < -1) {
- policy.warningBytes = WARNING_DISABLED;
- modified = true;
- }
-
- mPolicies.add(policy);
- }
-
- // when we cleaned policies above, write back changes
- if (modified) writeAsync();
- }
-
- public void writeAsync() {
- // TODO: consider making more robust by passing through service
- final NetworkPolicy[] policies = mPolicies.toArray(new NetworkPolicy[mPolicies.size()]);
- new AsyncTask<Void, Void, Void>() {
- @Override
- protected Void doInBackground(Void... params) {
- write(policies);
- return null;
- }
- }.execute();
- }
-
- public void write(NetworkPolicy[] policies) {
- mPolicyManager.setNetworkPolicies(policies);
- }
-
- public boolean hasLimitedPolicy(NetworkTemplate template) {
- final NetworkPolicy policy = getPolicy(template);
- return policy != null && policy.limitBytes != LIMIT_DISABLED;
- }
-
- public NetworkPolicy getOrCreatePolicy(NetworkTemplate template) {
- NetworkPolicy policy = getPolicy(template);
- if (policy == null) {
- policy = buildDefaultPolicy(template);
- mPolicies.add(policy);
- }
- return policy;
- }
-
- public NetworkPolicy getPolicy(NetworkTemplate template) {
- for (NetworkPolicy policy : mPolicies) {
- if (policy.template.equals(template)) {
- return policy;
- }
- }
- return null;
- }
-
- public NetworkPolicy getPolicyMaybeUnquoted(NetworkTemplate template) {
- NetworkPolicy policy = getPolicy(template);
- if (policy != null) {
- return policy;
- } else {
- return getPolicy(buildUnquotedNetworkTemplate(template));
- }
- }
-
- @Deprecated
- private static NetworkPolicy buildDefaultPolicy(NetworkTemplate template) {
- // TODO: move this into framework to share with NetworkPolicyManagerService
- final int cycleDay;
- final String cycleTimezone;
- final boolean metered;
-
- if (template.getMatchRule() == MATCH_WIFI) {
- cycleDay = CYCLE_NONE;
- cycleTimezone = Time.TIMEZONE_UTC;
- metered = false;
- } else {
- final Time time = new Time();
- time.setToNow();
- cycleDay = time.monthDay;
- cycleTimezone = time.timezone;
- metered = true;
- }
-
- return new NetworkPolicy(template, cycleDay, cycleTimezone, WARNING_DISABLED,
- LIMIT_DISABLED, SNOOZE_NEVER, SNOOZE_NEVER, metered, true);
- }
-
- public int getPolicyCycleDay(NetworkTemplate template) {
- final NetworkPolicy policy = getPolicy(template);
- return (policy != null) ? policy.cycleDay : -1;
- }
-
- public void setPolicyCycleDay(NetworkTemplate template, int cycleDay, String cycleTimezone) {
- final NetworkPolicy policy = getOrCreatePolicy(template);
- policy.cycleDay = cycleDay;
- policy.cycleTimezone = cycleTimezone;
- policy.inferred = false;
- policy.clearSnooze();
- writeAsync();
- }
-
- public long getPolicyWarningBytes(NetworkTemplate template) {
- final NetworkPolicy policy = getPolicy(template);
- return (policy != null) ? policy.warningBytes : WARNING_DISABLED;
- }
-
- public void setPolicyWarningBytes(NetworkTemplate template, long warningBytes) {
- final NetworkPolicy policy = getOrCreatePolicy(template);
- policy.warningBytes = warningBytes;
- policy.inferred = false;
- policy.clearSnooze();
- writeAsync();
- }
-
- public long getPolicyLimitBytes(NetworkTemplate template) {
- final NetworkPolicy policy = getPolicy(template);
- return (policy != null) ? policy.limitBytes : LIMIT_DISABLED;
- }
-
- public void setPolicyLimitBytes(NetworkTemplate template, long limitBytes) {
- final NetworkPolicy policy = getOrCreatePolicy(template);
- policy.limitBytes = limitBytes;
- policy.inferred = false;
- policy.clearSnooze();
- writeAsync();
- }
-
- public boolean getPolicyMetered(NetworkTemplate template) {
- NetworkPolicy policy = getPolicy(template);
- if (policy != null) {
- return policy.metered;
- } else {
- return false;
- }
- }
-
- public void setPolicyMetered(NetworkTemplate template, boolean metered) {
- boolean modified = false;
-
- NetworkPolicy policy = getPolicy(template);
- if (metered) {
- if (policy == null) {
- policy = buildDefaultPolicy(template);
- policy.metered = true;
- policy.inferred = false;
- mPolicies.add(policy);
- modified = true;
- } else if (!policy.metered) {
- policy.metered = true;
- policy.inferred = false;
- modified = true;
- }
-
- } else {
- if (policy == null) {
- // ignore when policy doesn't exist
- } else if (policy.metered) {
- policy.metered = false;
- policy.inferred = false;
- modified = true;
- }
- }
-
- // Remove legacy unquoted policies while we're here
- final NetworkTemplate unquoted = buildUnquotedNetworkTemplate(template);
- final NetworkPolicy unquotedPolicy = getPolicy(unquoted);
- if (unquotedPolicy != null) {
- mPolicies.remove(unquotedPolicy);
- modified = true;
- }
-
- if (modified) writeAsync();
- }
-
- /**
- * Build a revised {@link NetworkTemplate} that matches the same rule, but
- * with an unquoted {@link NetworkTemplate#getNetworkId()}. Used to work
- * around legacy bugs.
- */
- private static NetworkTemplate buildUnquotedNetworkTemplate(NetworkTemplate template) {
- if (template == null) return null;
- final String networkId = template.getNetworkId();
- final String strippedNetworkId = WifiInfo.removeDoubleQuotes(networkId);
- if (!TextUtils.equals(strippedNetworkId, networkId)) {
- return new NetworkTemplate(
- template.getMatchRule(), template.getSubscriberId(), strippedNetworkId);
- } else {
- return null;
- }
- }
-}
diff --git a/src/com/android/settings/net/SummaryForAllUidLoader.java b/src/com/android/settings/net/SummaryForAllUidLoader.java
deleted file mode 100644
index 68dc799..0000000
--- a/src/com/android/settings/net/SummaryForAllUidLoader.java
+++ /dev/null
@@ -1,79 +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.settings.net;
-
-import android.content.AsyncTaskLoader;
-import android.content.Context;
-import android.net.INetworkStatsSession;
-import android.net.NetworkStats;
-import android.net.NetworkTemplate;
-import android.os.Bundle;
-import android.os.RemoteException;
-
-public class SummaryForAllUidLoader extends AsyncTaskLoader<NetworkStats> {
- private static final String KEY_TEMPLATE = "template";
- private static final String KEY_START = "start";
- private static final String KEY_END = "end";
-
- private final INetworkStatsSession mSession;
- private final Bundle mArgs;
-
- public static Bundle buildArgs(NetworkTemplate template, long start, long end) {
- final Bundle args = new Bundle();
- args.putParcelable(KEY_TEMPLATE, template);
- args.putLong(KEY_START, start);
- args.putLong(KEY_END, end);
- return args;
- }
-
- public SummaryForAllUidLoader(Context context, INetworkStatsSession session, Bundle args) {
- super(context);
- mSession = session;
- mArgs = args;
- }
-
- @Override
- protected void onStartLoading() {
- super.onStartLoading();
- forceLoad();
- }
-
- @Override
- public NetworkStats loadInBackground() {
- final NetworkTemplate template = mArgs.getParcelable(KEY_TEMPLATE);
- final long start = mArgs.getLong(KEY_START);
- final long end = mArgs.getLong(KEY_END);
-
- try {
- return mSession.getSummaryForAllUid(template, start, end, false);
- } catch (RemoteException e) {
- return null;
- }
- }
-
- @Override
- protected void onStopLoading() {
- super.onStopLoading();
- cancelLoad();
- }
-
- @Override
- protected void onReset() {
- super.onReset();
- cancelLoad();
- }
-}
diff --git a/src/com/android/settings/net/UidDetail.java b/src/com/android/settings/net/UidDetail.java
deleted file mode 100644
index 0b14254..0000000
--- a/src/com/android/settings/net/UidDetail.java
+++ /dev/null
@@ -1,27 +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.settings.net;
-
-import android.graphics.drawable.Drawable;
-
-public class UidDetail {
- public CharSequence label;
- public CharSequence contentDescription;
- public CharSequence[] detailLabels;
- public CharSequence[] detailContentDescriptions;
- public Drawable icon;
-}
diff --git a/src/com/android/settings/net/UidDetailProvider.java b/src/com/android/settings/net/UidDetailProvider.java
deleted file mode 100644
index a08c7de..0000000
--- a/src/com/android/settings/net/UidDetailProvider.java
+++ /dev/null
@@ -1,194 +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.settings.net;
-
-import android.app.AppGlobals;
-import android.content.Context;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.IPackageManager;
-import android.content.pm.PackageInfo;
-import android.content.pm.PackageManager;
-import android.content.pm.PackageManager.NameNotFoundException;
-import android.content.pm.UserInfo;
-import android.content.res.Resources;
-import android.graphics.drawable.Drawable;
-import android.net.ConnectivityManager;
-import android.net.TrafficStats;
-import android.os.UserManager;
-import android.os.UserHandle;
-import android.os.RemoteException;
-import android.text.TextUtils;
-import android.util.Log;
-import android.util.SparseArray;
-
-import com.android.settings.R;
-import com.android.settings.Utils;
-
-/**
- * Return details about a specific UID, handling special cases like
- * {@link TrafficStats#UID_TETHERING} and {@link UserInfo}.
- */
-public class UidDetailProvider {
- private static final String TAG = "DataUsage";
- private final Context mContext;
- private final SparseArray<UidDetail> mUidDetailCache;
-
- public static final int OTHER_USER_RANGE_START = -2000;
-
- public static int buildKeyForUser(int userHandle) {
- return OTHER_USER_RANGE_START - userHandle;
- }
-
- public static boolean isKeyForUser(int key) {
- return key <= OTHER_USER_RANGE_START;
- }
-
- public static int getUserIdForKey(int key) {
- return OTHER_USER_RANGE_START - key;
- }
-
- public UidDetailProvider(Context context) {
- mContext = context.getApplicationContext();
- mUidDetailCache = new SparseArray<UidDetail>();
- }
-
- public void clearCache() {
- synchronized (mUidDetailCache) {
- mUidDetailCache.clear();
- }
- }
-
- /**
- * Resolve best descriptive label for the given UID.
- */
- public UidDetail getUidDetail(int uid, boolean blocking) {
- UidDetail detail;
-
- synchronized (mUidDetailCache) {
- detail = mUidDetailCache.get(uid);
- }
-
- if (detail != null) {
- return detail;
- } else if (!blocking) {
- return null;
- }
-
- detail = buildUidDetail(uid);
-
- synchronized (mUidDetailCache) {
- mUidDetailCache.put(uid, detail);
- }
-
- return detail;
- }
-
- /**
- * Build {@link UidDetail} object, blocking until all {@link Drawable}
- * lookup is finished.
- */
- private UidDetail buildUidDetail(int uid) {
- final Resources res = mContext.getResources();
- final PackageManager pm = mContext.getPackageManager();
-
- final UidDetail detail = new UidDetail();
- detail.label = pm.getNameForUid(uid);
- detail.icon = pm.getDefaultActivityIcon();
-
- // handle special case labels
- switch (uid) {
- case android.os.Process.SYSTEM_UID:
- detail.label = res.getString(R.string.process_kernel_label);
- detail.icon = pm.getDefaultActivityIcon();
- return detail;
- case TrafficStats.UID_REMOVED:
- detail.label = res.getString(UserManager.supportsMultipleUsers()
- ? R.string.data_usage_uninstalled_apps_users
- : R.string.data_usage_uninstalled_apps);
- detail.icon = pm.getDefaultActivityIcon();
- return detail;
- case TrafficStats.UID_TETHERING:
- final ConnectivityManager cm = (ConnectivityManager) mContext.getSystemService(
- Context.CONNECTIVITY_SERVICE);
- detail.label = res.getString(Utils.getTetheringLabel(cm));
- detail.icon = pm.getDefaultActivityIcon();
- return detail;
- }
-
- final UserManager um = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
-
- // Handle keys that are actually user handles
- if (isKeyForUser(uid)) {
- final int userHandle = getUserIdForKey(uid);
- final UserInfo info = um.getUserInfo(userHandle);
- if (info != null) {
- detail.label = Utils.getUserLabel(mContext, info);
- detail.icon = Utils.getUserIcon(mContext, um, info);
- return detail;
- }
- }
-
- // otherwise fall back to using packagemanager labels
- final String[] packageNames = pm.getPackagesForUid(uid);
- final int length = packageNames != null ? packageNames.length : 0;
- try {
- final int userId = UserHandle.getUserId(uid);
- UserHandle userHandle = new UserHandle(userId);
- IPackageManager ipm = AppGlobals.getPackageManager();
- if (length == 1) {
- final ApplicationInfo info = ipm.getApplicationInfo(packageNames[0],
- 0 /* no flags */, userId);
- if (info != null) {
- detail.label = info.loadLabel(pm).toString();
- detail.icon = um.getBadgedIconForUser(info.loadIcon(pm),
- new UserHandle(userId));
- }
- } else if (length > 1) {
- detail.detailLabels = new CharSequence[length];
- detail.detailContentDescriptions = new CharSequence[length];
- for (int i = 0; i < length; i++) {
- final String packageName = packageNames[i];
- final PackageInfo packageInfo = pm.getPackageInfo(packageName, 0);
- final ApplicationInfo appInfo = ipm.getApplicationInfo(packageName,
- 0 /* no flags */, userId);
-
- if (appInfo != null) {
- detail.detailLabels[i] = appInfo.loadLabel(pm).toString();
- detail.detailContentDescriptions[i] = um.getBadgedLabelForUser(
- detail.detailLabels[i], userHandle);
- if (packageInfo.sharedUserLabel != 0) {
- detail.label = pm.getText(packageName, packageInfo.sharedUserLabel,
- packageInfo.applicationInfo).toString();
- detail.icon = um.getBadgedIconForUser(appInfo.loadIcon(pm), userHandle);
- }
- }
- }
- }
- detail.contentDescription = um.getBadgedLabelForUser(detail.label, userHandle);
- } catch (NameNotFoundException e) {
- Log.w(TAG, "Error while building UI detail for uid "+uid, e);
- } catch (RemoteException e) {
- Log.w(TAG, "Error while building UI detail for uid "+uid, e);
- }
-
- if (TextUtils.isEmpty(detail.label)) {
- detail.label = Integer.toString(uid);
- }
-
- return detail;
- }
-}
diff --git a/src/com/android/settings/users/EditUserInfoController.java b/src/com/android/settings/users/EditUserInfoController.java
index ab77101..a4c07bd 100644
--- a/src/com/android/settings/users/EditUserInfoController.java
+++ b/src/com/android/settings/users/EditUserInfoController.java
@@ -37,8 +37,8 @@ import android.widget.EditText;
import android.widget.ImageView;
import com.android.settings.R;
-import com.android.settings.Utils;
-import com.android.settings.drawable.CircleFramedDrawable;
+import com.android.settingslib.Utils;
+import com.android.settingslib.drawable.CircleFramedDrawable;
/**
* This class encapsulates a Dialog for editing the user nickname and photo.
diff --git a/src/com/android/settings/users/EditUserPhotoController.java b/src/com/android/settings/users/EditUserPhotoController.java
index 82e550e..f9f867d 100644
--- a/src/com/android/settings/users/EditUserPhotoController.java
+++ b/src/com/android/settings/users/EditUserPhotoController.java
@@ -45,7 +45,7 @@ import android.widget.ListAdapter;
import android.widget.ListPopupWindow;
import com.android.settings.R;
-import com.android.settings.drawable.CircleFramedDrawable;
+import com.android.settingslib.drawable.CircleFramedDrawable;
import java.io.File;
import java.io.FileNotFoundException;
@@ -343,4 +343,4 @@ public class EditUserPhotoController {
return title;
}
}
-} \ No newline at end of file
+}
diff --git a/src/com/android/settings/users/RestrictedProfileSettings.java b/src/com/android/settings/users/RestrictedProfileSettings.java
index b0b86e4..2531aaa 100644
--- a/src/com/android/settings/users/RestrictedProfileSettings.java
+++ b/src/com/android/settings/users/RestrictedProfileSettings.java
@@ -86,7 +86,7 @@ public class RestrictedProfileSettings extends AppRestrictionsFragment
} else {
((TextView) mHeaderView.findViewById(android.R.id.title)).setText(info.name);
((ImageView) mHeaderView.findViewById(android.R.id.icon)).setImageDrawable(
- Utils.getUserIcon(getActivity(), mUserManager, info));
+ com.android.settingslib.Utils.getUserIcon(getActivity(), mUserManager, info));
}
}
diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java
index 1849a9a..85d2700 100644
--- a/src/com/android/settings/users/UserSettings.java
+++ b/src/com/android/settings/users/UserSettings.java
@@ -64,10 +64,10 @@ import com.android.settings.SelectableEditTextPreference;
import com.android.settings.SettingsActivity;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.Utils;
-import com.android.settings.drawable.CircleFramedDrawable;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
import com.android.settings.search.SearchIndexableRaw;
+import com.android.settingslib.drawable.CircleFramedDrawable;
import java.util.ArrayList;
import java.util.Collections;