1f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monk/* 2f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monk * Copyright (C) 2016 The Android Open Source Project 3f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monk * 4f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monk * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file 5f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monk * except in compliance with the License. You may obtain a copy of the License at 6f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monk * 7f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monk * http://www.apache.org/licenses/LICENSE-2.0 8f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monk * 9f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monk * Unless required by applicable law or agreed to in writing, software distributed under the 10f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monk * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 11f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monk * KIND, either express or implied. See the License for the specific language governing 12f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monk * permissions and limitations under the License. 13f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monk */ 14f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monk 15f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monkpackage com.android.systemui.fragments; 16f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monk 17f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monkimport android.app.Fragment; 1820ff3f9255c86a3747aa55746788d4bde1d12753Jason Monkimport android.content.Context; 19f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monkimport android.util.Log; 20f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monkimport android.view.View; 21f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monk 22de850bbcaa61c1874b803f2086443febbafd81a4Jason Monkimport com.android.systemui.Dependency; 23f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monkimport com.android.systemui.plugins.FragmentBase; 24f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monkimport com.android.systemui.plugins.Plugin; 25f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monkimport com.android.systemui.plugins.PluginListener; 26f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monkimport com.android.systemui.plugins.PluginManager; 27f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monk 28f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monkpublic class PluginFragmentListener implements PluginListener<Plugin> { 29f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monk 30f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monk private static final String TAG = "PluginFragmentListener"; 31f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monk 32f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monk private final FragmentHostManager mFragmentHostManager; 33f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monk private final PluginManager mPluginManager; 34f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monk private final Class<? extends Fragment> mDefaultClass; 35f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monk private final Class<? extends FragmentBase> mExpectedInterface; 3620ff3f9255c86a3747aa55746788d4bde1d12753Jason Monk private final String mTag; 37f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monk 3820ff3f9255c86a3747aa55746788d4bde1d12753Jason Monk public PluginFragmentListener(View view, String tag, Class<? extends Fragment> defaultFragment, 39f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monk Class<? extends FragmentBase> expectedInterface) { 4020ff3f9255c86a3747aa55746788d4bde1d12753Jason Monk mTag = tag; 41f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monk mFragmentHostManager = FragmentHostManager.get(view); 42de850bbcaa61c1874b803f2086443febbafd81a4Jason Monk mPluginManager = Dependency.get(PluginManager.class); 43f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monk mExpectedInterface = expectedInterface; 44f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monk mDefaultClass = defaultFragment; 45f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monk } 46f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monk 475bec68fbea1a02d7debc2eeeaf01b9478de216e5Jason Monk public void startListening() { 485bec68fbea1a02d7debc2eeeaf01b9478de216e5Jason Monk mPluginManager.addPluginListener(this, mExpectedInterface, 495bec68fbea1a02d7debc2eeeaf01b9478de216e5Jason Monk false /* Only allow one */); 50f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monk } 51f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monk 52f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monk public void stopListening() { 53f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monk mPluginManager.removePluginListener(this); 54f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monk } 55f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monk 56f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monk @Override 5720ff3f9255c86a3747aa55746788d4bde1d12753Jason Monk public void onPluginConnected(Plugin plugin, Context pluginContext) { 58f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monk try { 59f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monk mExpectedInterface.cast(plugin); 6020ff3f9255c86a3747aa55746788d4bde1d12753Jason Monk Fragment.class.cast(plugin); 6120ff3f9255c86a3747aa55746788d4bde1d12753Jason Monk mFragmentHostManager.getPluginManager().setCurrentPlugin(mTag, 6220ff3f9255c86a3747aa55746788d4bde1d12753Jason Monk plugin.getClass().getName(), pluginContext); 63f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monk } catch (ClassCastException e) { 64f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monk Log.e(TAG, plugin.getClass().getName() + " must be a Fragment and implement " 65f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monk + mExpectedInterface.getName(), e); 66f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monk } 67f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monk } 68f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monk 69f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monk @Override 70f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monk public void onPluginDisconnected(Plugin plugin) { 7120ff3f9255c86a3747aa55746788d4bde1d12753Jason Monk mFragmentHostManager.getPluginManager().removePlugin(mTag, 7220ff3f9255c86a3747aa55746788d4bde1d12753Jason Monk plugin.getClass().getName(), mDefaultClass.getName()); 73f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monk } 74f4e019aaad6f9da3165e8f35966299c43d5cfebfJason Monk} 75