blob: 39ae66e7607a1278bde157013c46bd79dad12d22 [file] [log] [blame]
/*
* Copyright (C) 2014 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.qs.tiles;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import com.android.systemui.R;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.plugins.NPVPlugin;
import com.android.systemui.plugins.PluginListener;
import com.android.systemui.plugins.qs.DetailAdapter;
import com.android.systemui.plugins.qs.QSTile.BooleanState;
import com.android.systemui.qs.QSHost;
import com.android.systemui.qs.tileimpl.QSTileImpl;
import com.android.systemui.shared.plugins.PluginManager;
import javax.inject.Inject;
/**
* Temporary control test for prototyping
*/
public class ControlsTile extends QSTileImpl<BooleanState> {
private ControlsDetailAdapter mDetailAdapter;
private final ActivityStarter mActivityStarter;
private PluginManager mPluginManager;
private NPVPlugin mPlugin;
private Intent mHomeAppIntent;
@Inject
public ControlsTile(QSHost host,
ActivityStarter activityStarter,
PluginManager pluginManager) {
super(host);
mActivityStarter = activityStarter;
mPluginManager = pluginManager;
mDetailAdapter = (ControlsDetailAdapter) createDetailAdapter();
mHomeAppIntent = new Intent(Intent.ACTION_VIEW);
mHomeAppIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mHomeAppIntent.setComponent(new ComponentName("com.google.android.apps.chromecast.app",
"com.google.android.apps.chromecast.app.DiscoveryActivity"));
}
@Override
public DetailAdapter getDetailAdapter() {
return mDetailAdapter;
}
@Override
public BooleanState newTileState() {
return new BooleanState();
}
@Override
public void handleSetListening(boolean listening) {
}
@Override
public void setDetailListening(boolean listening) {
if (mPlugin == null) return;
mPlugin.setListening(listening);
}
@Override
protected void handleClick() {
showDetail(true);
}
@Override
public Intent getLongClickIntent() {
return mHomeAppIntent;
}
@Override
protected void handleSecondaryClick() {
showDetail(true);
}
@Override
public CharSequence getTileLabel() {
return "Controls";
}
@Override
protected void handleUpdateState(BooleanState state, Object arg) {
state.icon = ResourceIcon.get(R.drawable.ic_lightbulb_outline_gm2_24px);
state.label = "Controls";
}
@Override
public boolean supportsDetailView() {
return getDetailAdapter() != null && mQSSettingsPanelOption == QSSettingsPanel.OPEN_CLICK;
}
@Override
public int getMetricsCategory() {
return -1;
}
@Override
protected String composeChangeAnnouncement() {
if (mState.value) {
return "On";
} else {
return "Off";
}
}
@Override
public boolean isAvailable() {
return true;
}
@Override
protected DetailAdapter createDetailAdapter() {
mDetailAdapter = new ControlsDetailAdapter();
return mDetailAdapter;
}
private class ControlsDetailAdapter implements DetailAdapter {
private View mDetailView;
protected FrameLayout mHomeControlsLayout;
public CharSequence getTitle() {
return "Controls";
}
public Boolean getToggleState() {
return null;
}
public boolean getToggleEnabled() {
return false;
}
public View createDetailView(Context context, View convertView, final ViewGroup parent) {
if (convertView != null) return convertView;
mHomeControlsLayout = (FrameLayout) LayoutInflater.from(context).inflate(
R.layout.home_controls, parent, false);
mHomeControlsLayout.setVisibility(View.VISIBLE);
parent.addView(mHomeControlsLayout);
mPluginManager.addPluginListener(
new PluginListener<NPVPlugin>() {
@Override
public void onPluginConnected(NPVPlugin plugin,
Context pluginContext) {
mPlugin = plugin;
mPlugin.attachToRoot(mHomeControlsLayout);
mPlugin.setListening(true);
}
@Override
public void onPluginDisconnected(NPVPlugin plugin) {
mPlugin.setListening(false);
mHomeControlsLayout.removeAllViews();
}
}, NPVPlugin.class, false);
return mHomeControlsLayout;
}
public Intent getSettingsIntent() {
return mHomeAppIntent;
}
public void setToggleState(boolean state) {
}
public int getMetricsCategory() {
return -1;
}
public boolean hasHeader() {
return false;
}
}
}