Files
app_Settings/src/com/android/settings/applications/AppStateWriteSettingsBridge.java
Billy Lau bb3aa2632a Bug 21589105 Rescope WRITE_SETTINGS (UX and Settings app change)...
Overall, fixed the detection of the state of permission in the corresponding
UX to be more accurate. Also ensured that apps needing this capability can
launch the summary UX through a specific intent.

AndroidManifest:
Adds the proper intent-filter so that apps can launch the Settings page using
intent.

strings.xml:
Increased the CHAR limits for some strings due to requests from translators.

Change-Id: Ie64f86e034867ed582c1c583a5e8f84671fa4d63
2015-07-21 17:44:49 +01:00

83 lines
3.1 KiB
Java

/*
* 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.applications;
import android.Manifest;
import android.app.AppOpsManager;
import android.content.Context;
import android.util.Log;
import com.android.settingslib.applications.ApplicationsState;
import com.android.settingslib.applications.ApplicationsState.AppEntry;
import com.android.settingslib.applications.ApplicationsState.AppFilter;
/*
* Connects info of apps that draw overlay to the ApplicationsState. Wraps around the generic
* AppStateAppOpsBridge class to tailor to the semantics of SYSTEM_ALERT_WINDOW. Also provides app
* filters that can use the info.
*/
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;
public AppStateWriteSettingsBridge(Context context, ApplicationsState appState, Callback
callback) {
super(context, appState, callback, APP_OPS_OP_CODE, PM_WRITE_SETTINGS);
}
@Override
protected void updateExtraInfo(AppEntry app, String pkg, int uid) {
app.extraInfo = getWriteSettingsInfo(pkg, uid);
}
public WriteSettingsState getWriteSettingsInfo(String pkg, int uid) {
PermissionState permissionState = super.getPermissionInfo(pkg, uid);
return new WriteSettingsState(permissionState);
}
// TODO: figure out how to filter out system apps for this method
public int getNumberOfPackagesWithPermission() {
return super.getNumPackagesDeclaredPermission();
}
// TODO: figure out how to filter out system apps for this method
public int getNumberOfPackagesCanWriteSettings() {
return super.getNumPackagesAllowedByAppOps();
}
public static class WriteSettingsState extends AppStateAppOpsBridge.PermissionState {
public WriteSettingsState(PermissionState permissionState) {
super(permissionState.packageName, permissionState.userHandle);
this.packageInfo = permissionState.packageInfo;
this.appOpMode = permissionState.appOpMode;
this.permissionDeclared = permissionState.permissionDeclared;
}
}
public static final AppFilter FILTER_WRITE_SETTINGS = new AppFilter() {
@Override
public void init() {
}
@Override
public boolean filterApp(AppEntry info) {
return info.extraInfo != null;
}
};
}