am eb372c93
: Merge "Bug: 22718745 Intents to \'draw over other apps\' should go direct to the package\'s page instead of the top level one" into mnc-dev
* commit 'eb372c93ee00fa9365206129136501497e6341c7': Bug: 22718745 Intents to 'draw over other apps' should go direct to the package's page instead of the top level one
This commit is contained in:
@@ -2541,6 +2541,18 @@
|
|||||||
android:value="com.android.settings.applications.ManageApplications" />
|
android:value="com.android.settings.applications.ManageApplications" />
|
||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
|
<activity android:name="Settings$AppDrawOverlaySettingsActivity"
|
||||||
|
android:label="@string/draw_overlay_title"
|
||||||
|
android:taskAffinity="">
|
||||||
|
<intent-filter android:priority="1">
|
||||||
|
<action android:name="android.settings.action.MANAGE_OVERLAY_PERMISSION" />
|
||||||
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
|
<data android:scheme="package" />
|
||||||
|
</intent-filter>
|
||||||
|
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
|
||||||
|
android:value="com.android.settings.applications.DrawOverlayDetails" />
|
||||||
|
</activity>
|
||||||
|
|
||||||
<activity android:name="Settings$WriteSettingsActivity"
|
<activity android:name="Settings$WriteSettingsActivity"
|
||||||
android:label="@string/write_settings_title"
|
android:label="@string/write_settings_title"
|
||||||
android:taskAffinity="">
|
android:taskAffinity="">
|
||||||
@@ -2552,5 +2564,17 @@
|
|||||||
android:value="com.android.settings.applications.ManageApplications" />
|
android:value="com.android.settings.applications.ManageApplications" />
|
||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
|
<activity android:name="Settings$AppWriteSettingsActivity"
|
||||||
|
android:label="@string/write_settings_title"
|
||||||
|
android:taskAffinity="">
|
||||||
|
<intent-filter android:priority="1">
|
||||||
|
<action android:name="android.settings.action.MANAGE_WRITE_SETTINGS" />
|
||||||
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
|
<data android:scheme="package" />
|
||||||
|
</intent-filter>
|
||||||
|
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
|
||||||
|
android:value="com.android.settings.applications.WriteSettingsDetails" />
|
||||||
|
</activity>
|
||||||
|
|
||||||
</application>
|
</application>
|
||||||
</manifest>
|
</manifest>
|
||||||
|
@@ -116,4 +116,6 @@ public class Settings extends SettingsActivity {
|
|||||||
public static class MemorySettingsActivity extends SettingsActivity { /* empty */ }
|
public static class MemorySettingsActivity extends SettingsActivity { /* empty */ }
|
||||||
public static class OverlaySettingsActivity extends SettingsActivity { /* empty */ }
|
public static class OverlaySettingsActivity extends SettingsActivity { /* empty */ }
|
||||||
public static class WriteSettingsActivity extends SettingsActivity { /* empty */ }
|
public static class WriteSettingsActivity extends SettingsActivity { /* empty */ }
|
||||||
|
public static class AppDrawOverlaySettingsActivity extends SettingsActivity { /* empty */ }
|
||||||
|
public static class AppWriteSettingsActivity extends SettingsActivity { /* empty */ }
|
||||||
}
|
}
|
||||||
|
@@ -70,12 +70,14 @@ import com.android.settings.accessibility.AccessibilitySettings;
|
|||||||
import com.android.settings.accessibility.CaptionPropertiesFragment;
|
import com.android.settings.accessibility.CaptionPropertiesFragment;
|
||||||
import com.android.settings.accounts.AccountSettings;
|
import com.android.settings.accounts.AccountSettings;
|
||||||
import com.android.settings.accounts.AccountSyncSettings;
|
import com.android.settings.accounts.AccountSyncSettings;
|
||||||
|
import com.android.settings.applications.DrawOverlayDetails;
|
||||||
import com.android.settings.applications.InstalledAppDetails;
|
import com.android.settings.applications.InstalledAppDetails;
|
||||||
import com.android.settings.applications.ManageApplications;
|
import com.android.settings.applications.ManageApplications;
|
||||||
import com.android.settings.applications.ManageAssist;
|
import com.android.settings.applications.ManageAssist;
|
||||||
import com.android.settings.applications.ProcessStatsSummary;
|
import com.android.settings.applications.ProcessStatsSummary;
|
||||||
import com.android.settings.applications.ProcessStatsUi;
|
import com.android.settings.applications.ProcessStatsUi;
|
||||||
import com.android.settings.applications.UsageAccessDetails;
|
import com.android.settings.applications.UsageAccessDetails;
|
||||||
|
import com.android.settings.applications.WriteSettingsDetails;
|
||||||
import com.android.settings.bluetooth.BluetoothSettings;
|
import com.android.settings.bluetooth.BluetoothSettings;
|
||||||
import com.android.settings.dashboard.DashboardCategory;
|
import com.android.settings.dashboard.DashboardCategory;
|
||||||
import com.android.settings.dashboard.DashboardSummary;
|
import com.android.settings.dashboard.DashboardSummary;
|
||||||
@@ -350,6 +352,8 @@ public class SettingsActivity extends Activity
|
|||||||
ProcessStatsUi.class.getName(),
|
ProcessStatsUi.class.getName(),
|
||||||
PowerUsageDetail.class.getName(),
|
PowerUsageDetail.class.getName(),
|
||||||
ProcessStatsSummary.class.getName(),
|
ProcessStatsSummary.class.getName(),
|
||||||
|
DrawOverlayDetails.class.getName(),
|
||||||
|
WriteSettingsDetails.class.getName(),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@@ -88,13 +88,15 @@ public abstract class AppStateAppOpsBridge extends AppStateBaseBridge {
|
|||||||
int[] permissionFlags = permissionState.packageInfo.requestedPermissionsFlags;
|
int[] permissionFlags = permissionState.packageInfo.requestedPermissionsFlags;
|
||||||
if (requestedPermissions != null) {
|
if (requestedPermissions != null) {
|
||||||
for (int i = 0; i < requestedPermissions.length; i++) {
|
for (int i = 0; i < requestedPermissions.length; i++) {
|
||||||
if (mPermissions[0].equals(requestedPermissions[i]) &&
|
if (mPermissions[0].equals(requestedPermissions[i])) {
|
||||||
(permissionFlags[i] & PackageInfo.REQUESTED_PERMISSION_GRANTED) != 0) {
|
|
||||||
permissionState.permissionDeclared = true;
|
permissionState.permissionDeclared = true;
|
||||||
|
if ((permissionFlags[i] & PackageInfo.REQUESTED_PERMISSION_GRANTED) != 0) {
|
||||||
|
permissionState.staticPermissionGranted = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
// Check app op state.
|
// Check app op state.
|
||||||
List<PackageOps> ops = mAppOpsManager.getOpsForPackage(uid, pkg, mAppOpsOpCodes);
|
List<PackageOps> ops = mAppOpsManager.getOpsForPackage(uid, pkg, mAppOpsOpCodes);
|
||||||
if (ops != null && ops.size() > 0 && ops.get(0).getOps().size() > 0) {
|
if (ops != null && ops.size() > 0 && ops.get(0).getOps().size() > 0) {
|
||||||
@@ -164,7 +166,7 @@ public abstract class AppStateAppOpsBridge extends AppStateBaseBridge {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This method will set the packageInfo and permissionDeclared field of the associated
|
* This method will set the packageInfo and staticPermissionGranted field of the associated
|
||||||
* PermissionState, which describes a particular package.
|
* PermissionState, which describes a particular package.
|
||||||
*/
|
*/
|
||||||
private void loadPermissionsStates(SparseArray<ArrayMap<String, PermissionState>> entries) {
|
private void loadPermissionsStates(SparseArray<ArrayMap<String, PermissionState>> entries) {
|
||||||
@@ -185,7 +187,7 @@ public abstract class AppStateAppOpsBridge extends AppStateBaseBridge {
|
|||||||
final PermissionState pe = entriesForProfile.get(packageInfo.packageName);
|
final PermissionState pe = entriesForProfile.get(packageInfo.packageName);
|
||||||
if (pe != null) {
|
if (pe != null) {
|
||||||
pe.packageInfo = packageInfo;
|
pe.packageInfo = packageInfo;
|
||||||
pe.permissionDeclared = true;
|
pe.staticPermissionGranted = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -279,6 +281,7 @@ public abstract class AppStateAppOpsBridge extends AppStateBaseBridge {
|
|||||||
public final String packageName;
|
public final String packageName;
|
||||||
public final UserHandle userHandle;
|
public final UserHandle userHandle;
|
||||||
public PackageInfo packageInfo;
|
public PackageInfo packageInfo;
|
||||||
|
public boolean staticPermissionGranted;
|
||||||
public boolean permissionDeclared;
|
public boolean permissionDeclared;
|
||||||
public int appOpMode;
|
public int appOpMode;
|
||||||
|
|
||||||
@@ -293,7 +296,7 @@ public abstract class AppStateAppOpsBridge extends AppStateBaseBridge {
|
|||||||
// permission (this means pre-M gets approval during install time; M apps gets approval
|
// permission (this means pre-M gets approval during install time; M apps gets approval
|
||||||
// during runtime.
|
// during runtime.
|
||||||
if (appOpMode == AppOpsManager.MODE_DEFAULT) {
|
if (appOpMode == AppOpsManager.MODE_DEFAULT) {
|
||||||
return permissionDeclared;
|
return staticPermissionGranted;
|
||||||
}
|
}
|
||||||
return appOpMode == AppOpsManager.MODE_ALLOWED;
|
return appOpMode == AppOpsManager.MODE_ALLOWED;
|
||||||
}
|
}
|
||||||
|
@@ -66,6 +66,7 @@ public class AppStateOverlayBridge extends AppStateAppOpsBridge {
|
|||||||
this.packageInfo = permissionState.packageInfo;
|
this.packageInfo = permissionState.packageInfo;
|
||||||
this.appOpMode = permissionState.appOpMode;
|
this.appOpMode = permissionState.appOpMode;
|
||||||
this.permissionDeclared = permissionState.permissionDeclared;
|
this.permissionDeclared = permissionState.permissionDeclared;
|
||||||
|
this.staticPermissionGranted = permissionState.staticPermissionGranted;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -57,6 +57,7 @@ public class AppStateUsageBridge extends AppStateAppOpsBridge {
|
|||||||
this.packageInfo = permissionState.packageInfo;
|
this.packageInfo = permissionState.packageInfo;
|
||||||
this.appOpMode = permissionState.appOpMode;
|
this.appOpMode = permissionState.appOpMode;
|
||||||
this.permissionDeclared = permissionState.permissionDeclared;
|
this.permissionDeclared = permissionState.permissionDeclared;
|
||||||
|
this.staticPermissionGranted = permissionState.staticPermissionGranted;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -66,6 +66,7 @@ public class AppStateWriteSettingsBridge extends AppStateAppOpsBridge {
|
|||||||
this.packageInfo = permissionState.packageInfo;
|
this.packageInfo = permissionState.packageInfo;
|
||||||
this.appOpMode = permissionState.appOpMode;
|
this.appOpMode = permissionState.appOpMode;
|
||||||
this.permissionDeclared = permissionState.permissionDeclared;
|
this.permissionDeclared = permissionState.permissionDeclared;
|
||||||
|
this.staticPermissionGranted = permissionState.staticPermissionGranted;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -143,6 +143,8 @@ public class DrawOverlayDetails extends AppInfoWithHeader implements OnPreferenc
|
|||||||
|
|
||||||
boolean isAllowed = mOverlayState.isPermissible();
|
boolean isAllowed = mOverlayState.isPermissible();
|
||||||
mSwitchPref.setChecked(isAllowed);
|
mSwitchPref.setChecked(isAllowed);
|
||||||
|
// you cannot ask a user to grant you a permission you did not have!
|
||||||
|
mSwitchPref.setEnabled(mOverlayState.permissionDeclared);
|
||||||
mOverlayPrefs.setEnabled(isAllowed);
|
mOverlayPrefs.setEnabled(isAllowed);
|
||||||
getPreferenceScreen().removePreference(mOverlayPrefs);
|
getPreferenceScreen().removePreference(mOverlayPrefs);
|
||||||
|
|
||||||
|
@@ -130,6 +130,7 @@ public class UsageAccessDetails extends AppInfoWithHeader implements OnPreferenc
|
|||||||
|
|
||||||
boolean hasAccess = mUsageState.isPermissible();
|
boolean hasAccess = mUsageState.isPermissible();
|
||||||
mSwitchPref.setChecked(hasAccess);
|
mSwitchPref.setChecked(hasAccess);
|
||||||
|
mSwitchPref.setEnabled(mUsageState.permissionDeclared);
|
||||||
mUsagePrefs.setEnabled(hasAccess);
|
mUsagePrefs.setEnabled(hasAccess);
|
||||||
|
|
||||||
ResolveInfo resolveInfo = mPm.resolveActivityAsUser(mSettingsIntent,
|
ResolveInfo resolveInfo = mPm.resolveActivityAsUser(mSettingsIntent,
|
||||||
|
@@ -142,6 +142,8 @@ public class WriteSettingsDetails extends AppInfoWithHeader implements OnPrefere
|
|||||||
|
|
||||||
boolean canWrite = mWriteSettingsState.isPermissible();
|
boolean canWrite = mWriteSettingsState.isPermissible();
|
||||||
mSwitchPref.setChecked(canWrite);
|
mSwitchPref.setChecked(canWrite);
|
||||||
|
// you can't ask a user for a permission you didn't even declare!
|
||||||
|
mSwitchPref.setEnabled(mWriteSettingsState.permissionDeclared);
|
||||||
mWriteSettingsPrefs.setEnabled(canWrite);
|
mWriteSettingsPrefs.setEnabled(canWrite);
|
||||||
getPreferenceScreen().removePreference(mWriteSettingsPrefs);
|
getPreferenceScreen().removePreference(mWriteSettingsPrefs);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user