diff options
author | 2017-01-23 21:17:15 +0000 | |
---|---|---|
committer | 2017-01-23 21:17:19 +0000 | |
commit | 8ac1bff7e23ac984568652e1c5e9ffc7dd47e341 (patch) | |
tree | 26b76bf41699a8c435aa441a3de95bdbb272c4f1 | |
parent | e710a6fc6663048e0c3302c085a409aa1045a21a (diff) | |
parent | e256a18dcd8c0fda68abc5005c405eb8a5c18bea (diff) |
Merge "Query for the settings package in KeyguardManager instead of hardcoding it." into cw-f-dev
-rw-r--r-- | core/java/android/app/KeyguardManager.java | 38 |
1 files changed, 22 insertions, 16 deletions
diff --git a/core/java/android/app/KeyguardManager.java b/core/java/android/app/KeyguardManager.java index b794f9cdbc79..1850cebf4f07 100644 --- a/core/java/android/app/KeyguardManager.java +++ b/core/java/android/app/KeyguardManager.java @@ -22,18 +22,19 @@ import android.app.trust.ITrustManager; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; -import android.content.pm.UserInfo; +import android.content.pm.ResolveInfo; import android.os.Binder; -import android.os.RemoteException; import android.os.IBinder; import android.os.IUserManager; +import android.os.RemoteException; import android.os.ServiceManager; import android.os.UserHandle; -import android.os.UserManager; -import android.view.IWindowManager; import android.view.IOnKeyguardExitResult; +import android.view.IWindowManager; import android.view.WindowManagerGlobal; +import java.util.List; + /** * Class that can be used to lock and unlock the keyboard. Get an instance of this * class by calling {@link android.content.Context#getSystemService(java.lang.String)} @@ -88,12 +89,9 @@ public class KeyguardManager { Intent intent = new Intent(ACTION_CONFIRM_DEVICE_CREDENTIAL); intent.putExtra(EXTRA_TITLE, title); intent.putExtra(EXTRA_DESCRIPTION, description); - if (mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_WATCH)) { - intent.setPackage("com.google.android.apps.wearable.settings"); - } else { - // For security reasons, only allow this to come from system settings. - intent.setPackage("com.android.settings"); - } + + // explicitly set the package for security + intent.setPackage(getSettingsPackageForIntent(intent)); return intent; } @@ -114,15 +112,23 @@ public class KeyguardManager { intent.putExtra(EXTRA_TITLE, title); intent.putExtra(EXTRA_DESCRIPTION, description); intent.putExtra(Intent.EXTRA_USER_ID, userId); - if (mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_WATCH)) { - intent.setPackage("com.google.android.apps.wearable.settings"); - } else { - // For security reasons, only allow this to come from system settings. - intent.setPackage("com.android.settings"); - } + + // explicitly set the package for security + intent.setPackage(getSettingsPackageForIntent(intent)); + return intent; } + private String getSettingsPackageForIntent(Intent intent) { + List<ResolveInfo> resolveInfos = mContext.getPackageManager() + .queryIntentActivities(intent, PackageManager.MATCH_SYSTEM_ONLY); + for (int i = 0; i < resolveInfos.size(); i++) { + return resolveInfos.get(i).activityInfo.packageName; + } + + return "com.android.settings"; + } + /** * @deprecated Use {@link android.view.WindowManager.LayoutParams#FLAG_DISMISS_KEYGUARD} * and/or {@link android.view.WindowManager.LayoutParams#FLAG_SHOW_WHEN_LOCKED} |