All Downloads are FREE. Search and download functionalities are using the official Maven repository.

src.com.android.systemui.plugins.Plugin Maven / Gradle / Ivy

Go to download

A library jar that provides APIs for Applications written for the Google Android Platform.

There is a newer version: 15-robolectric-12650502
Show newest version
/*
 * Copyright (C) 2016 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.systemui.plugins;

import com.android.systemui.plugins.annotations.Requires;

import android.content.Context;

/**
 * Plugins are separate APKs that
 * are expected to implement interfaces provided by SystemUI.  Their
 * code is dynamically loaded into the SysUI process which can allow
 * for multiple prototypes to be created and run on a single android
 * build.
 *
 * PluginLifecycle:
 * 
 *
 * plugin.onCreate(Context sysuiContext, Context pluginContext);
 * --- This is always called before any other calls
 *
 * pluginListener.onPluginConnected(Plugin p);
 * --- This lets the plugin hook know that a plugin is now connected.
 *
 * ** Any other calls back and forth between sysui/plugin **
 *
 * pluginListener.onPluginDisconnected(Plugin p);
 * --- Lets the plugin hook know that it should stop interacting with
 *     this plugin and drop all references to it.
 *
 * plugin.onDestroy();
 * --- Finally the plugin can perform any cleanup to ensure that its not
 *     leaking into the SysUI process.
 *
 * Any time a plugin APK is updated the plugin is destroyed and recreated
 * to load the new code/resources.
 *
 * 
* * Creating plugin hooks: * * To create a plugin hook, first create an interface in * frameworks/base/packages/SystemUI/plugin that extends Plugin. * Include in it any hooks you want to be able to call into from * sysui and create callback interfaces for anything you need to * pass through into the plugin. * * Then to attach to any plugins simply add a plugin listener and * onPluginConnected will get called whenever new plugins are installed, * updated, or enabled. Like this example from SystemUIApplication: * *
 * {@literal
 * PluginManager.getInstance(this).addPluginListener(OverlayPlugin.COMPONENT,
 *        new PluginListener() {
 *        @Override
 *        public void onPluginConnected(OverlayPlugin plugin) {
 *            StatusBar phoneStatusBar = getComponent(StatusBar.class);
 *            if (phoneStatusBar != null) {
 *                plugin.setup(phoneStatusBar.getStatusBarWindow(),
 *                phoneStatusBar.getNavigationBarView());
 *            }
 *        }
 * }, OverlayPlugin.VERSION, true /* Allow multiple plugins *\/);
 * }
 * 
* Note the VERSION included here. Any time incompatible changes in the * interface are made, this version should be changed to ensure old plugins * aren't accidentally loaded. Since the plugin library is provided by * SystemUI, default implementations can be added for new methods to avoid * version changes when possible. * * Implementing a Plugin: * * See the ExamplePlugin for an example Android.mk on how to compile * a plugin. Note that SystemUILib is not static for plugins, its classes * are provided by SystemUI. * * Plugin security is based around a signature permission, so plugins must * hold the following permission in their manifest. * *
 * {@literal
 * 
 * }
 * 
* * A plugin is found through a querying for services, so to let SysUI know * about it, create a service with a name that points at your implementation * of the plugin interface with the action accompanying it: * *
 * {@literal
 * 
 *    
 *        
 *    
 * 
 * }
 * 
*/ public interface Plugin { /** * @deprecated * @see Requires */ default int getVersion() { // Default of -1 indicates the plugin supports the new Requires model. return -1; } default void onCreate(Context sysuiContext, Context pluginContext) { } default void onDestroy() { } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy