blob: 60b34cdc1b8a4875c0c3dbe98a274e0c41a13853 [file] [log] [blame]
/*
* Copyright (C) 2010 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 android.app;
import android.app.IOnProjectionStateChangedListener;
import android.app.IUiModeManagerCallback;
/**
* Interface used to control special UI modes.
* @hide
*/
interface IUiModeManager {
/**
* @hide
*/
void addCallback(IUiModeManagerCallback callback);
/**
* Enables the car mode. Only the system can do this.
* @hide
*/
void enableCarMode(int flags, int priority, String callingPackage);
/**
* Disables the car mode.
*/
@UnsupportedAppUsage(maxTargetSdk = 28)
void disableCarMode(int flags);
/**
* Disables car mode (the original version is marked unsupported app usage so cannot be changed
* for the time being).
*/
void disableCarModeByCallingPackage(int flags, String callingPackage);
/**
* Return the current running mode.
*/
int getCurrentModeType();
/**
* Sets the night mode.
* <p>
* The mode can be one of:
* <ol>notnight mode</ol>
* <ol>night mode</ol>
* <ol>custom schedule mode switching</ol>
*/
void setNightMode(int mode);
/**
* Gets the currently configured night mode.
* <p>
* Returns
* <ol>notnight mode</ol>
* <ol>night mode</ol>
* <ol>custom schedule mode switching</ol>
*/
int getNightMode();
/**
* Sets the current night mode to {@link #MODE_NIGHT_CUSTOM} with the custom night mode type
* {@code nightModeCustomType}.
*
* @param nightModeCustomType
* @hide
*/
@EnforcePermission("MODIFY_DAY_NIGHT_MODE")
@JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.MODIFY_DAY_NIGHT_MODE)")
void setNightModeCustomType(int nightModeCustomType);
/**
* Returns the custom night mode type.
* <p>
* If the current night mode is not {@link #MODE_NIGHT_CUSTOM}, returns
* {@link #MODE_NIGHT_CUSTOM_TYPE_UNKNOWN}.
* @hide
*/
@EnforcePermission("MODIFY_DAY_NIGHT_MODE")
@JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.MODIFY_DAY_NIGHT_MODE)")
int getNightModeCustomType();
/**
* Sets the dark mode for the given application. This setting is persisted and will override the
* system configuration for this application.
* 1 - notnight mode
* 2 - night mode
* 3 - automatic mode switching
*/
void setApplicationNightMode(in int mode);
/**
* Tells if UI mode is locked or not.
*/
boolean isUiModeLocked();
/**
* Tells if Night mode is locked or not.
*/
boolean isNightModeLocked();
/**
* [De]activating night mode for the current user if the current night mode is custom and the
* custom type matches {@code nightModeCustomType}.
*
* @param nightModeCustomType the specify type of custom mode
* @param active {@code true} to activate night mode. Otherwise, deactivate night mode
* @return {@code true} if night mode has successfully activated for the requested
* {@code nightModeCustomType}.
* @hide
*/
@JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.MODIFY_DAY_NIGHT_MODE)")
boolean setNightModeActivatedForCustomMode(int nightModeCustom, boolean active);
/**
* [De]Activates night mode.
* @hide
*/
boolean setNightModeActivated(boolean active);
/**
* Returns custom start clock time
*/
long getCustomNightModeStart();
/**
* Sets custom start clock time
*/
void setCustomNightModeStart(long time);
/**
* Returns custom end clock time
*/
long getCustomNightModeEnd();
/**
* Sets custom end clock time
*/
void setCustomNightModeEnd(long time);
/**
* Sets projection state for the caller for the given projection type.
*/
boolean requestProjection(in IBinder binder, int projectionType, String callingPackage);
/**
* Releases projection state for the caller for the given projection type.
*/
boolean releaseProjection(int projectionType, String callingPackage);
/**
* Registers a listener for changes to projection state.
*/
@EnforcePermission("READ_PROJECTION_STATE")
void addOnProjectionStateChangedListener(in IOnProjectionStateChangedListener listener, int projectionType);
/**
* Unregisters a listener for changes to projection state.
*/
@EnforcePermission("READ_PROJECTION_STATE")
void removeOnProjectionStateChangedListener(in IOnProjectionStateChangedListener listener);
/**
* Returns packages that have currently set the given projection type.
*/
@EnforcePermission("READ_PROJECTION_STATE")
List<String> getProjectingPackages(int projectionType);
/**
* Returns currently set projection types.
*/
@EnforcePermission("READ_PROJECTION_STATE")
int getActiveProjectionTypes();
/**
* Returns the contrast for the current user
*/
float getContrast();
}