diff options
Diffstat (limited to 'src')
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"); } } } |