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:
Billy Lau
2015-07-30 17:22:04 +00:00
committed by Android Git Automerger
10 changed files with 47 additions and 6 deletions

View File

@@ -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>

View File

@@ -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 */ }
} }

View File

@@ -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(),
}; };

View File

@@ -88,10 +88,12 @@ 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;
break; if ((permissionFlags[i] & PackageInfo.REQUESTED_PERMISSION_GRANTED) != 0) {
permissionState.staticPermissionGranted = true;
break;
}
} }
} }
} }
@@ -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;
} }

View File

@@ -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;
} }
} }

View File

@@ -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;
} }
} }

View File

@@ -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;
} }
} }

View File

@@ -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);

View File

@@ -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,

View File

@@ -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);