DO NOT MERGE: Prevent non-system IME from becoming device admin am: 9260c67352

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/23545057

Change-Id: I533b1a673de2d3660a75452f5f7c58fe33ab55a6
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Taran Singh
2023-06-12 20:29:17 +00:00
committed by Automerger Merge Worker

View File

@@ -66,6 +66,7 @@ import android.text.TextUtils.TruncateAt;
import android.util.EventLog; import android.util.EventLog;
import android.util.Log; import android.util.Log;
import android.view.Display; import android.view.Display;
import android.view.KeyEvent;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
@@ -155,12 +156,12 @@ public class DeviceAdminAdd extends CollapsingToolbarBaseActivity {
mHandler = new Handler(getMainLooper()); mHandler = new Handler(getMainLooper());
mDPM = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE); mDPM = getSystemService(DevicePolicyManager.class);
mAppOps = (AppOpsManager)getSystemService(Context.APP_OPS_SERVICE); mAppOps = getSystemService(AppOpsManager.class);
mLayoutInflaternflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); mLayoutInflaternflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
PackageManager packageManager = getPackageManager(); PackageManager packageManager = getPackageManager();
if ((getIntent().getFlags()&Intent.FLAG_ACTIVITY_NEW_TASK) != 0) { if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_NEW_TASK) != 0) {
Log.w(TAG, "Cannot start ADD_DEVICE_ADMIN as a new task"); Log.w(TAG, "Cannot start ADD_DEVICE_ADMIN as a new task");
finish(); finish();
return; return;
@@ -170,7 +171,7 @@ public class DeviceAdminAdd extends CollapsingToolbarBaseActivity {
EXTRA_CALLED_FROM_SUPPORT_DIALOG, false); EXTRA_CALLED_FROM_SUPPORT_DIALOG, false);
String action = getIntent().getAction(); String action = getIntent().getAction();
ComponentName who = (ComponentName)getIntent().getParcelableExtra( ComponentName who = (ComponentName) getIntent().getParcelableExtra(
DevicePolicyManager.EXTRA_DEVICE_ADMIN); DevicePolicyManager.EXTRA_DEVICE_ADMIN);
if (who == null) { if (who == null) {
String packageName = getIntent().getStringExtra(EXTRA_DEVICE_ADMIN_PACKAGE_NAME); String packageName = getIntent().getStringExtra(EXTRA_DEVICE_ADMIN_PACKAGE_NAME);
@@ -226,7 +227,7 @@ public class DeviceAdminAdd extends CollapsingToolbarBaseActivity {
PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS); PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS);
int count = avail == null ? 0 : avail.size(); int count = avail == null ? 0 : avail.size();
boolean found = false; boolean found = false;
for (int i=0; i<count; i++) { for (int i = 0; i < count; i++) {
ResolveInfo ri = avail.get(i); ResolveInfo ri = avail.get(i);
if (ai.packageName.equals(ri.activityInfo.packageName) if (ai.packageName.equals(ri.activityInfo.packageName)
&& ai.name.equals(ri.activityInfo.name)) { && ai.name.equals(ri.activityInfo.name)) {
@@ -350,16 +351,16 @@ public class DeviceAdminAdd extends CollapsingToolbarBaseActivity {
} }
setContentView(R.layout.device_admin_add); setContentView(R.layout.device_admin_add);
mAdminIcon = (ImageView)findViewById(R.id.admin_icon); mAdminIcon = (ImageView) findViewById(R.id.admin_icon);
mAdminName = (TextView)findViewById(R.id.admin_name); mAdminName = (TextView) findViewById(R.id.admin_name);
mAdminDescription = (TextView)findViewById(R.id.admin_description); mAdminDescription = (TextView) findViewById(R.id.admin_description);
mProfileOwnerWarning = (TextView) findViewById(R.id.profile_owner_warning); mProfileOwnerWarning = (TextView) findViewById(R.id.profile_owner_warning);
mProfileOwnerWarning.setText( mProfileOwnerWarning.setText(
mDPM.getResources().getString(SET_PROFILE_OWNER_POSTSETUP_WARNING, mDPM.getResources().getString(SET_PROFILE_OWNER_POSTSETUP_WARNING,
() -> getString(R.string.adding_profile_owner_warning))); () -> getString(R.string.adding_profile_owner_warning)));
mAddMsg = (TextView)findViewById(R.id.add_msg); mAddMsg = (TextView) findViewById(R.id.add_msg);
mAddMsgExpander = (ImageView) findViewById(R.id.add_msg_expander); mAddMsgExpander = (ImageView) findViewById(R.id.add_msg_expander);
final View.OnClickListener onClickListener = new View.OnClickListener() { final View.OnClickListener onClickListener = new View.OnClickListener() {
@Override @Override
@@ -380,7 +381,7 @@ public class DeviceAdminAdd extends CollapsingToolbarBaseActivity {
boolean hideMsgExpander = mAddMsg.getLineCount() <= maxLines; boolean hideMsgExpander = mAddMsg.getLineCount() <= maxLines;
mAddMsgExpander.setVisibility(hideMsgExpander ? View.GONE : View.VISIBLE); mAddMsgExpander.setVisibility(hideMsgExpander ? View.GONE : View.VISIBLE);
if (hideMsgExpander) { if (hideMsgExpander) {
((View)mAddMsgExpander.getParent()).invalidate(); ((View) mAddMsgExpander.getParent()).invalidate();
} }
mAddMsg.getViewTreeObserver().removeOnGlobalLayoutListener(this); mAddMsg.getViewTreeObserver().removeOnGlobalLayoutListener(this);
} }
@@ -420,8 +421,8 @@ public class DeviceAdminAdd extends CollapsingToolbarBaseActivity {
final View restrictedAction = findViewById(R.id.restricted_action); final View restrictedAction = findViewById(R.id.restricted_action);
restrictedAction.setFilterTouchesWhenObscured(true); restrictedAction.setFilterTouchesWhenObscured(true);
restrictedAction.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) { final View.OnClickListener restrictedActionClickListener = v -> {
if (!mActionButton.isEnabled()) { if (!mActionButton.isEnabled()) {
showPolicyTransparencyDialogIfRequired(); showPolicyTransparencyDialogIfRequired();
return; return;
@@ -464,14 +465,20 @@ public class DeviceAdminAdd extends CollapsingToolbarBaseActivity {
} }
}, mHandler)); }, mHandler));
// Don't want to wait too long. // Don't want to wait too long.
getWindow().getDecorView().getHandler().postDelayed(new Runnable() { getWindow().getDecorView().getHandler().postDelayed(
@Override public void run() { () -> continueRemoveAction(null), 2 * 1000);
continueRemoveAction(null);
}
}, 2*1000);
} }
};
restrictedAction.setOnKeyListener((view, keyCode, keyEvent) -> {
if ((keyEvent.getFlags() & KeyEvent.FLAG_FROM_SYSTEM) == 0) {
Log.e(TAG, "Can not activate device-admin with KeyEvent from non-system app.");
// Consume event to suppress click.
return true;
} }
// Fallback to view click handler.
return false;
}); });
restrictedAction.setOnClickListener(restrictedActionClickListener);
} }
/** /**