diff options
author | Dianne Hackborn <hackbod@google.com> | 2015-08-10 14:53:33 -0700 |
---|---|---|
committer | Dianne Hackborn <hackbod@google.com> | 2015-08-10 17:07:14 -0700 |
commit | be4df036e1c688a1b7a5fc9d4ab18f09729296b3 (patch) | |
tree | 6a868b54d5eb15d46a46a63a888ef5e027f39e69 /src/com/android | |
parent | ba38155d257aa00e0dabb9cf9eefc1a281278a14 (diff) | |
download | packages_apps_Settings-be4df036e1c688a1b7a5fc9d4ab18f09729296b3.zip packages_apps_Settings-be4df036e1c688a1b7a5fc9d4ab18f09729296b3.tar.gz packages_apps_Settings-be4df036e1c688a1b7a5fc9d4ab18f09729296b3.tar.bz2 |
Fix issue #23037899: Support for Battery Optimization permission + Dialog
New pretty dialog.
Change-Id: I6094b83139beffc407b01049a0d9d1f85a95df07
Diffstat (limited to 'src/com/android')
-rw-r--r-- | src/com/android/settings/applications/ManageApplications.java | 10 | ||||
-rw-r--r-- | src/com/android/settings/fuelgauge/RequestIgnoreBatteryOptimizations.java | 116 |
2 files changed, 116 insertions, 10 deletions
diff --git a/src/com/android/settings/applications/ManageApplications.java b/src/com/android/settings/applications/ManageApplications.java index 8d5679f..61c2ebb 100644 --- a/src/com/android/settings/applications/ManageApplications.java +++ b/src/com/android/settings/applications/ManageApplications.java @@ -258,16 +258,6 @@ public class ManageApplications extends InstrumentedFragment mListType = LIST_TYPE_HIGH_POWER; // Default to showing system. mShowSystem = true; - if (Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS.equals(intent.getAction()) - && intent.getData() != null) { - mCurrentPkgName = intent.getData().getSchemeSpecificPart(); - if (mCurrentPkgName != null) { - mCurrentUid = mApplicationsState.getEntry(mCurrentPkgName, - UserHandle.myUserId()).info.uid; - mFinishAfterDialog = true; - startApplicationDetailsActivity(); - } - } } else if (className.equals(OverlaySettingsActivity.class.getName())) { mListType = LIST_TYPE_OVERLAY; getActivity().getActionBar().setTitle(R.string.system_alert_window_access_title); diff --git a/src/com/android/settings/fuelgauge/RequestIgnoreBatteryOptimizations.java b/src/com/android/settings/fuelgauge/RequestIgnoreBatteryOptimizations.java new file mode 100644 index 0000000..1c1e9df --- /dev/null +++ b/src/com/android/settings/fuelgauge/RequestIgnoreBatteryOptimizations.java @@ -0,0 +1,116 @@ +/* + * 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.settings.fuelgauge; + +import android.Manifest; +import android.content.DialogInterface; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; +import android.os.IDeviceIdleController; +import android.os.PowerManager; +import android.os.RemoteException; +import android.os.ServiceManager; +import com.android.settings.R; + +import android.net.Uri; +import android.os.Bundle; +import android.util.Log; +import com.android.internal.app.AlertActivity; +import com.android.internal.app.AlertController; + +public class RequestIgnoreBatteryOptimizations extends AlertActivity implements + DialogInterface.OnClickListener { + static final String TAG = "RequestIgnoreBatteryOptimizations"; + + private static final String DEVICE_IDLE_SERVICE = "deviceidle"; + + IDeviceIdleController mDeviceIdleService; + String mPackageName; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + mDeviceIdleService = IDeviceIdleController.Stub.asInterface( + ServiceManager.getService(DEVICE_IDLE_SERVICE)); + + Uri data = getIntent().getData(); + if (data == null) { + Log.w(TAG, "No data supplied for IGNORE_BATTERY_OPTIMIZATION_SETTINGS in: " + + getIntent()); + finish(); + return; + } + mPackageName = data.getSchemeSpecificPart(); + if (mPackageName == null) { + Log.w(TAG, "No data supplied for IGNORE_BATTERY_OPTIMIZATION_SETTINGS in: " + + getIntent()); + finish(); + return; + } + + PowerManager power = getSystemService(PowerManager.class); + if (power.isIgnoringBatteryOptimizations(mPackageName)) { + Log.i(TAG, "Not should prompt, already ignoring optimizations: " + mPackageName); + finish(); + return; + } + + ApplicationInfo ai; + try { + ai = getPackageManager().getApplicationInfo(mPackageName, 0); + } catch (PackageManager.NameNotFoundException e) { + Log.w(TAG, "Requested package doesn't exist: " + mPackageName); + finish(); + return; + } + + if (getPackageManager().checkPermission( + Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS, mPackageName) + != PackageManager.PERMISSION_GRANTED) { + Log.w(TAG, "Requested package " + mPackageName + " does not hold permission " + + Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS); + finish(); + return; + } + + final AlertController.AlertParams p = mAlertParams; + p.mTitle = getText(R.string.high_power_prompt_title); + p.mMessage = getString(R.string.high_power_prompt_body, ai.loadLabel(getPackageManager())); + p.mPositiveButtonText = getText(R.string.yes); + p.mNegativeButtonText = getText(R.string.no); + p.mPositiveButtonListener = this; + p.mNegativeButtonListener = this; + setupAlert(); + } + + @Override + public void onClick(DialogInterface dialog, int which) { + switch (which) { + case BUTTON_POSITIVE: + try { + mDeviceIdleService.addPowerSaveWhitelistApp(mPackageName); + } catch (RemoteException e) { + Log.w(TAG, "Unable to reach IDeviceIdleController", e); + } + setResult(RESULT_OK); + break; + case BUTTON_NEGATIVE: + break; + } + } +} |