blob: 3d34bee0f328caf72d0c9943ae60b64f446b67ba [file] [log] [blame]
/*
* Copyright (C) 2021 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.server.policy;
import android.annotation.NonNull;
import android.content.ComponentName;
import android.content.Intent;
import android.util.Log;
import android.view.KeyEvent;
/**
* This class wrapped the Intent for global key ops.
*/
public final class GlobalKeyIntent {
private static final String EXTRA_BEGAN_FROM_NON_INTERACTIVE =
"EXTRA_BEGAN_FROM_NON_INTERACTIVE";
private final ComponentName mComponentName;
private final KeyEvent mKeyEvent;
private final boolean mBeganFromNonInteractive;
GlobalKeyIntent(@NonNull ComponentName componentName, @NonNull KeyEvent event,
boolean beganFromNonInteractive) {
mComponentName = componentName;
mKeyEvent = new KeyEvent(event);
mBeganFromNonInteractive = beganFromNonInteractive;
}
Intent getIntent() {
final Intent intent = new Intent(Intent.ACTION_GLOBAL_BUTTON)
.setComponent(mComponentName)
.setFlags(Intent.FLAG_RECEIVER_FOREGROUND)
.putExtra(Intent.EXTRA_KEY_EVENT, mKeyEvent)
.putExtra(EXTRA_BEGAN_FROM_NON_INTERACTIVE, mBeganFromNonInteractive);
return intent;
}
/**
* Get the {@link KeyEvent} information of {@link Intent#ACTION_GLOBAL_BUTTON}.
*/
public KeyEvent getKeyEvent() {
return mKeyEvent;
}
/**
* Indicate if the global key is dispatched from non-interactive mode.
* Information of {@link Intent#ACTION_GLOBAL_BUTTON}.
*/
public boolean beganFromNonInteractive() {
return mBeganFromNonInteractive;
}
/**
* Generate a GlobalKeyIntent from {@link Intent}, the action must be
* {@link Intent#ACTION_GLOBAL_BUTTON}.
*
* @param intent The received intent of the global key.
*/
public static GlobalKeyIntent from(@NonNull Intent intent) {
if (intent.getAction() != Intent.ACTION_GLOBAL_BUTTON) {
Log.wtf("GlobalKeyIntent", "Intent should be ACTION_GLOBAL_BUTTON");
return null;
}
final KeyEvent event = intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT, android.view.KeyEvent.class);
final boolean fromNonInteractive =
intent.getBooleanExtra(EXTRA_BEGAN_FROM_NON_INTERACTIVE, false);
return new GlobalKeyIntent(intent.getComponent(), event, fromNonInteractive);
}
}