summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/com/android/settings/DataUsageSummary.java14
-rw-r--r--src/com/android/settings/DevelopmentSettings.java71
-rw-r--r--src/com/android/settings/applications/ProcStatsEntry.java35
-rw-r--r--src/com/android/settings/applications/ProcessStatsUi.java22
-rw-r--r--src/com/android/settings/fuelgauge/PowerUsageSummary.java5
-rw-r--r--src/com/android/settings/location/DimmableIconPreference.java52
-rw-r--r--src/com/android/settings/location/RecentLocationApps.java2
-rw-r--r--src/com/android/settings/location/SettingsInjector.java17
8 files changed, 60 insertions, 158 deletions
diff --git a/src/com/android/settings/DataUsageSummary.java b/src/com/android/settings/DataUsageSummary.java
index 3d5678d..a0b18fd 100644
--- a/src/com/android/settings/DataUsageSummary.java
+++ b/src/com/android/settings/DataUsageSummary.java
@@ -141,13 +141,13 @@ import com.android.settings.widget.ChartDataUsageView.DataUsageChartListener;
import com.android.settings.widget.PieChartView;
import com.google.android.collect.Lists;
+import libcore.util.Objects;
+
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Locale;
-import libcore.util.Objects;
-
/**
* Panel showing data usage history across various networks, including options
* to inspect based on usage cycle and control through {@link NetworkPolicy}.
@@ -277,6 +277,16 @@ public class DataUsageSummary extends Fragment {
mPolicyEditor.read();
try {
+ if (!mNetworkService.isBandwidthControlEnabled()) {
+ Log.w(TAG, "No bandwidth control; leaving");
+ getActivity().finish();
+ }
+ } catch (RemoteException e) {
+ Log.w(TAG, "No bandwidth control; leaving");
+ getActivity().finish();
+ }
+
+ try {
mStatsSession = mStatsService.openSession();
} catch (RemoteException e) {
throw new RuntimeException(e);
diff --git a/src/com/android/settings/DevelopmentSettings.java b/src/com/android/settings/DevelopmentSettings.java
index 1542bce..3e05bd9 100644
--- a/src/com/android/settings/DevelopmentSettings.java
+++ b/src/com/android/settings/DevelopmentSettings.java
@@ -16,15 +16,11 @@
package com.android.settings;
-import static android.Manifest.permission.READ_EXTERNAL_STORAGE;
-
import android.app.ActionBar;
import android.app.Activity;
import android.app.ActivityManagerNative;
-import android.app.ActivityThread;
import android.app.AlertDialog;
import android.app.Dialog;
-import android.app.DialogFragment;
import android.app.admin.DevicePolicyManager;
import android.app.backup.IBackupManager;
import android.bluetooth.BluetoothAdapter;
@@ -59,11 +55,11 @@ import android.preference.PreferenceScreen;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
-import android.webkit.WebViewFactory;
import android.view.Gravity;
import android.view.HardwareRenderer;
import android.view.IWindowManager;
import android.view.View;
+import android.webkit.WebViewFactory;
import android.widget.CompoundButton;
import android.widget.Switch;
import android.widget.TextView;
@@ -103,7 +99,6 @@ public class DevelopmentSettings extends RestrictedSettingsFragment
private static final String ALLOW_MOCK_LOCATION = "allow_mock_location";
private static final String HDCP_CHECKING_KEY = "hdcp_checking";
private static final String HDCP_CHECKING_PROPERTY = "persist.sys.hdcp_checking";
- private static final String ENFORCE_READ_EXTERNAL = "enforce_read_external";
private static final String LOCAL_BACKUP_PASSWORD = "local_backup_password";
private static final String HARDWARE_UI_PROPERTY = "persist.sys.ui.hw";
private static final String MSAA_PROPERTY = "debug.egl.force_msaa";
@@ -171,7 +166,6 @@ public class DevelopmentSettings extends RestrictedSettingsFragment
private CheckBoxPreference mBugreportInPower;
private CheckBoxPreference mKeepScreenOn;
private CheckBoxPreference mBtHciSnoopLog;
- private CheckBoxPreference mEnforceReadExternal;
private CheckBoxPreference mAllowMockLocation;
private PreferenceScreen mPassword;
@@ -263,7 +257,6 @@ public class DevelopmentSettings extends RestrictedSettingsFragment
mBugreportInPower = findAndInitCheckboxPref(BUGREPORT_IN_POWER_KEY);
mKeepScreenOn = findAndInitCheckboxPref(KEEP_SCREEN_ON);
mBtHciSnoopLog = findAndInitCheckboxPref(BT_HCI_SNOOP_LOG);
- mEnforceReadExternal = findAndInitCheckboxPref(ENFORCE_READ_EXTERNAL);
mAllowMockLocation = findAndInitCheckboxPref(ALLOW_MOCK_LOCATION);
mPassword = (PreferenceScreen) findPreference(LOCAL_BACKUP_PASSWORD);
mAllPrefs.add(mPassword);
@@ -492,7 +485,6 @@ public class DevelopmentSettings extends RestrictedSettingsFragment
Settings.Global.STAY_ON_WHILE_PLUGGED_IN, 0) != 0);
updateCheckBox(mBtHciSnoopLog, Settings.Secure.getInt(cr,
Settings.Secure.BLUETOOTH_HCI_LOG, 0) != 0);
- updateCheckBox(mEnforceReadExternal, isPermissionEnforced(READ_EXTERNAL_STORAGE));
updateCheckBox(mAllowMockLocation, Settings.Secure.getInt(cr,
Settings.Secure.ALLOW_MOCK_LOCATION, 0) != 0);
updateRuntimeValue();
@@ -1250,12 +1242,6 @@ public class DevelopmentSettings extends RestrictedSettingsFragment
(BatteryManager.BATTERY_PLUGGED_AC | BatteryManager.BATTERY_PLUGGED_USB) : 0);
} else if (preference == mBtHciSnoopLog) {
writeBtHciSnoopLogOptions();
- } else if (preference == mEnforceReadExternal) {
- if (mEnforceReadExternal.isChecked()) {
- ConfirmEnforceFragment.show(this);
- } else {
- setPermissionEnforced(getActivity(), READ_EXTERNAL_STORAGE, false);
- }
} else if (preference == mAllowMockLocation) {
Settings.Secure.putInt(getActivity().getContentResolver(),
Settings.Secure.ALLOW_MOCK_LOCATION,
@@ -1477,61 +1463,6 @@ public class DevelopmentSettings extends RestrictedSettingsFragment
}
}
- /**
- * Dialog to confirm enforcement of {@link android.Manifest.permission#READ_EXTERNAL_STORAGE}.
- */
- public static class ConfirmEnforceFragment extends DialogFragment {
- public static void show(DevelopmentSettings parent) {
- final ConfirmEnforceFragment dialog = new ConfirmEnforceFragment();
- dialog.setTargetFragment(parent, 0);
- dialog.show(parent.getFragmentManager(), TAG_CONFIRM_ENFORCE);
- }
-
- @Override
- public Dialog onCreateDialog(Bundle savedInstanceState) {
- final Context context = getActivity();
-
- final AlertDialog.Builder builder = new AlertDialog.Builder(context);
- builder.setTitle(R.string.enforce_read_external_confirm_title);
- builder.setMessage(R.string.enforce_read_external_confirm_message);
-
- builder.setPositiveButton(android.R.string.ok, new OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- setPermissionEnforced(context, READ_EXTERNAL_STORAGE, true);
- ((DevelopmentSettings) getTargetFragment()).updateAllOptions();
- }
- });
- builder.setNegativeButton(android.R.string.cancel, new OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- ((DevelopmentSettings) getTargetFragment()).updateAllOptions();
- }
- });
-
- return builder.create();
- }
- }
-
- private static boolean isPermissionEnforced(String permission) {
- try {
- return ActivityThread.getPackageManager().isPermissionEnforced(permission);
- } catch (RemoteException e) {
- throw new RuntimeException("Problem talking with PackageManager", e);
- }
- }
-
- private static void setPermissionEnforced(
- Context context, String permission, boolean enforced) {
- try {
- // TODO: offload to background thread
- ActivityThread.getPackageManager()
- .setPermissionEnforced(READ_EXTERNAL_STORAGE, enforced);
- } catch (RemoteException e) {
- throw new RuntimeException("Problem talking with PackageManager", e);
- }
- }
-
private static boolean isPackageInstalled(Context context, String packageName) {
try {
return context.getPackageManager().getPackageInfo(packageName, 0) != null;
diff --git a/src/com/android/settings/applications/ProcStatsEntry.java b/src/com/android/settings/applications/ProcStatsEntry.java
index cbbfbb7..d6311dc 100644
--- a/src/com/android/settings/applications/ProcStatsEntry.java
+++ b/src/com/android/settings/applications/ProcStatsEntry.java
@@ -78,7 +78,6 @@ public final class ProcStatsEntry implements Parcelable {
mBestTargetPackage = null;
if (mUnique) {
mBestTargetPackage = mPackage;
- addServices(stats.getPackageStateLocked(mPackage, mUid));
} else {
// See if there is one significant package that was running here.
ArrayList<ProcStatsEntry> subProcs = new ArrayList<ProcStatsEntry>();
@@ -90,18 +89,13 @@ public final class ProcStatsEntry implements Parcelable {
continue;
}
ProcessStats.PackageState pkgState = uids.valueAt(iu);
- boolean match = false;
for (int iproc=0, NPROC=pkgState.mProcesses.size(); iproc<NPROC; iproc++) {
ProcessStats.ProcessState subProc =
pkgState.mProcesses.valueAt(iproc);
if (subProc.mName.equals(mName)) {
- match = true;
subProcs.add(new ProcStatsEntry(subProc, totals));
}
}
- if (match) {
- addServices(stats.getPackageStateLocked(mPackage, mUid));
- }
}
}
if (subProcs.size() > 1) {
@@ -173,12 +167,8 @@ public final class ProcStatsEntry implements Parcelable {
}
}
- public void addServices(ProcessStats.PackageState pkgState) {
- for (int isvc=0, NSVC=pkgState.mServices.size(); isvc<NSVC; isvc++) {
- ProcessStats.ServiceState svc = pkgState.mServices.valueAt(isvc);
- // XXX can't tell what process it is in!
- mServices.add(new Service(svc));
- }
+ public void addService(ProcessStats.ServiceState svc) {
+ mServices.add(new Service(svc));
}
@Override
@@ -213,32 +203,22 @@ public final class ProcStatsEntry implements Parcelable {
public static final class Service implements Parcelable {
final String mPackage;
final String mName;
+ final String mProcess;
final long mDuration;
public Service(ProcessStats.ServiceState service) {
mPackage = service.mPackage;
mName = service.mName;
- long startDuration = ProcessStats.dumpSingleServiceTime(null, null, service,
- ProcessStats.ServiceState.SERVICE_STARTED,
- ProcessStats.STATE_NOTHING, 0, 0);
- long bindDuration = ProcessStats.dumpSingleServiceTime(null, null, service,
- ProcessStats.ServiceState.SERVICE_BOUND,
+ mProcess = service.mProcessName;
+ mDuration = ProcessStats.dumpSingleServiceTime(null, null, service,
+ ProcessStats.ServiceState.SERVICE_RUN,
ProcessStats.STATE_NOTHING, 0, 0);
- long execDuration = ProcessStats.dumpSingleServiceTime(null, null, service,
- ProcessStats.ServiceState.SERVICE_EXEC,
- ProcessStats.STATE_NOTHING, 0, 0);
- if (bindDuration > startDuration) {
- startDuration = bindDuration;
- }
- if (execDuration > startDuration) {
- startDuration = execDuration;
- }
- mDuration = startDuration;
}
public Service(Parcel in) {
mPackage = in.readString();
mName = in.readString();
+ mProcess = in.readString();
mDuration = in.readLong();
}
@@ -251,6 +231,7 @@ public final class ProcStatsEntry implements Parcelable {
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(mPackage);
dest.writeString(mName);
+ dest.writeString(mProcess);
dest.writeLong(mDuration);
}
diff --git a/src/com/android/settings/applications/ProcessStatsUi.java b/src/com/android/settings/applications/ProcessStatsUi.java
index 49682ed..5c5355d 100644
--- a/src/com/android/settings/applications/ProcessStatsUi.java
+++ b/src/com/android/settings/applications/ProcessStatsUi.java
@@ -30,6 +30,7 @@ import android.preference.PreferenceActivity;
import android.preference.PreferenceFragment;
import android.preference.PreferenceGroup;
import android.preference.PreferenceScreen;
+import android.util.ArrayMap;
import android.util.Log;
import android.util.SparseArray;
import android.util.TimeUtils;
@@ -245,10 +246,14 @@ public class ProcessStatsUi extends PreferenceFragment {
}
*/
+ ArrayMap<String, ProcStatsEntry> processes = new ArrayMap<String, ProcStatsEntry>(
+ mStats.mProcesses.getMap().size());
for (int ip=0, N=mStats.mProcesses.getMap().size(); ip<N; ip++) {
SparseArray<ProcessStats.ProcessState> uids = mStats.mProcesses.getMap().valueAt(ip);
for (int iu=0; iu<uids.size(); iu++) {
- procs.add(new ProcStatsEntry(uids.valueAt(iu), totals));
+ ProcStatsEntry ent = new ProcStatsEntry(uids.valueAt(iu), totals);
+ procs.add(ent);
+ processes.put(ent.mName, ent);
}
}
@@ -283,6 +288,21 @@ public class ProcessStatsUi extends PreferenceFragment {
mAppListGroup.addPreference(pref);
if (mAppListGroup.getPreferenceCount() > (MAX_ITEMS_TO_LIST+1)) break;
}
+
+ // Add in service info.
+ for (int ip=0, N=mStats.mPackages.getMap().size(); ip<N; ip++) {
+ SparseArray<ProcessStats.PackageState> uids = mStats.mPackages.getMap().valueAt(ip);
+ for (int iu=0; iu<uids.size(); iu++) {
+ ProcessStats.PackageState ps = uids.valueAt(iu);
+ for (int is=0, NS=ps.mServices.size(); is<NS; is++) {
+ ProcessStats.ServiceState ss = ps.mServices.valueAt(is);
+ if (ss.mProcessName != null) {
+ ProcStatsEntry ent = processes.get(ss.mProcessName);
+ ent.addService(ss);
+ }
+ }
+ }
+ }
}
private void load() {
diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
index 740fdb5..dc86b8d 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
@@ -249,7 +249,10 @@ public class PowerUsageSummary extends PreferenceFragment {
}
break;
case BatteryStatsHelper.MSG_REPORT_FULLY_DRAWN:
- getActivity().reportFullyDrawn();
+ Activity activity = getActivity();
+ if (activity != null) {
+ activity.reportFullyDrawn();
+ }
break;
}
super.handleMessage(msg);
diff --git a/src/com/android/settings/location/DimmableIconPreference.java b/src/com/android/settings/location/DimmableIconPreference.java
deleted file mode 100644
index bc75fc4..0000000
--- a/src/com/android/settings/location/DimmableIconPreference.java
+++ /dev/null
@@ -1,52 +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.location;
-
-import android.content.Context;
-import android.graphics.drawable.Drawable;
-import android.preference.Preference;
-import android.util.AttributeSet;
-
-/**
- * A preference item that can dim the icon when it's disabled.
- */
-public class DimmableIconPreference extends Preference {
- private static final int ICON_ALPHA_ENABLED = 255;
- private static final int ICON_ALPHA_DISABLED = 102;
-
- public DimmableIconPreference(Context context, AttributeSet attrs, int defStyle) {
- super(context, attrs, defStyle);
- }
-
- public DimmableIconPreference(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
- public DimmableIconPreference(Context context) {
- super(context);
- }
-
- @Override
- public void onParentChanged(Preference parent, boolean disableChild) {
- Drawable icon = getIcon();
- if (icon != null) {
- icon.setAlpha(disableChild ? ICON_ALPHA_DISABLED : ICON_ALPHA_ENABLED);
- setIcon(icon);
- }
- super.onParentChanged(parent, disableChild);
- }
-}
diff --git a/src/com/android/settings/location/RecentLocationApps.java b/src/com/android/settings/location/RecentLocationApps.java
index 84178e8..1fa8aac 100644
--- a/src/com/android/settings/location/RecentLocationApps.java
+++ b/src/com/android/settings/location/RecentLocationApps.java
@@ -96,7 +96,7 @@ public class RecentLocationApps {
CharSequence label,
boolean isHighBattery,
Preference.OnPreferenceClickListener listener) {
- Preference pref = new DimmableIconPreference(mActivity);
+ Preference pref = new Preference(mActivity);
pref.setIcon(icon);
pref.setTitle(label);
if (isHighBattery) {
diff --git a/src/com/android/settings/location/SettingsInjector.java b/src/com/android/settings/location/SettingsInjector.java
index 12bf38f..b919080 100644
--- a/src/com/android/settings/location/SettingsInjector.java
+++ b/src/com/android/settings/location/SettingsInjector.java
@@ -312,7 +312,8 @@ class SettingsInjector {
mSettingsBeingLoaded.remove(timedOutSetting);
mTimedOutSettings.add(timedOutSetting);
if (Log.isLoggable(TAG, Log.WARN)) {
- Log.w(TAG, "Timed out trying to get status for: " + timedOutSetting);
+ Log.w(TAG, "Timed out after " + timedOutSetting.getElapsedTime()
+ + " millis trying to get status for: " + timedOutSetting);
}
break;
default:
@@ -447,13 +448,21 @@ class SettingsInjector {
} else {
startMillis = 0;
}
- mContext.startService(intent);
+
+ // Start the service, making sure that this is attributed to the current user rather
+ // than the system user.
+ mContext.startServiceAsUser(intent, android.os.Process.myUserHandle());
+ }
+
+ public long getElapsedTime() {
+ long end = SystemClock.elapsedRealtime();
+ return end - startMillis;
}
public void maybeLogElapsedTime() {
if (Log.isLoggable(TAG, Log.DEBUG) && startMillis != 0) {
- long end = SystemClock.elapsedRealtime();
- Log.d(TAG, this + " update took " + (end - startMillis) + " millis");
+ long elapsed = getElapsedTime();
+ Log.d(TAG, this + " update took " + elapsed + " millis");
}
}
}