如何在quicksettings中增加一个新的buttons
2015-10-26 10:40
363 查看
如何在quicksettings中增加一个新的buttons,下面主要是android L版本前(如KK)和android L版本
一,android L版本前(如KK):
下面就以在quicksettings中新增一个mms button为例。
1、新增layout文件
frameworks\base\packages\SystemUI\res\layout\quick_settings_tile_mms.xml
2、修改函数addSystemTiles (在此函数新增如下段code) frameworks\base\packages\SystemUI\src\com\android\systemui\statusbar\phone\QuickSettings.java
// mms
QuickSettingsTileView mMsTile = (QuickSettingsTileView)
inflater.inflate(R.layout.quick_settings_tile, parent, false);
mMsTile.setContent(R.layout.quick_settings_tile_mms, inflater);
mMsTile.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// mBar.collapseAllPanels(true);
// showBrightnessDialog();
Intent intent = new Intent();
intent.setComponent(new ComponentName(
"com.android.mms",
"com.android.mms.ui.ConversationList"));
startSettingsActivity(intent);
}
});
parent.addView(mMsTile);
mDynamicSpannedTiles.add(mMsTile);
3、新增后效果图
二,android L版本
可以参考mtk 源代码是如何添加mediatek自定义的QS Button:
alps\frameworks\base\packages\SystemUI\src\com\mediatek\systemui\qs\tiles
下面我们以添加一个Camera QS Button开关为例:
如下图添加 Camera QS Button:
1,增加config文件内容
alps\frameworks\base\packages\SystemUI\res\values\config.xml
<!-- The default tiles to display in QuickSettings -->
<string name="quick_settings_tiles_default" translatable="false">
wifi,bt,inversion,cell,airplane,rotation,flashlight,location,cast,hotspot,hotknot,
audioprofile,dataconnection,camera
</string>
2,在下面目录下,新建CameraController.java和CameraControllerImpl.java文件
alps\frameworks\base\packages\SystemUI\src\com\mediatek\systemui\statusbar\policy
2.1 CameraController.java:
package com.mediatek.systemui.statusbar.policy;
import java.util.Set;
public interface CameraController {
boolean isSupportCamera();
}
2.2 CameraControllerImpl.java:
package com.mediatek.systemui.statusbar.policy;
import android.content.Context;
import java.util.UUID;
public class CameraControllerImpl implements CameraController {
private static final String TAG = "CameraControllerImpl";
private final Context mContext;
public CameraControllerImpl(Context context) {
mContext = context;
}
@Override
public boolean isSupportCamera() {
return true;
}
}
3,在下面目录下,新建文件CameraTile.java
alps\frameworks\base\packages\SystemUI\src\com\mediatek\systemui\qs\tiles
CameraTile.java:
package com.mediatek.systemui.qs.tiles;
import android.content.Intent;
import android.content.Context;
import android.content.IntentFilter;
import android.content.BroadcastReceiver;
import android.net.ConnectivityManager;
import android.provider.Settings;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnAttachStateChangeListener;
import com.android.internal.telephony.TelephonyIntents;
import com.android.systemui.R;
import com.android.systemui.qs.QSTile;
import com.android.internal.telephony.IccCardConstants;
import com.mediatek.xlog.Xlog;
import com.mediatek.systemui.statusbar.policy.CameraController;
public class CameraTile extends QSTile<QSTile.BooleanState> {
private static final String TAG = "CameraTile";
private static final boolean DEBUG = true;
private final CameraController mController=null;
private boolean mListening;
private int mDataState = R.drawable.ic_qs_inversion_off;
private IccCardConstants.State mSimState = IccCardConstants.State.UNKNOWN;
private TelephonyManager mTelephonyManager;
public CameraTile(Host host) {
super(host);
;//mController = host.getCameraController();
}
@Override
protected BooleanState newTileState() {
return new BooleanState();
}
@Override
public void setListening(boolean listening) {
}
boolean enabled =false;
@Override
protected void handleClick() {
enabled =!enabled;
if (enabled) {
mDataState = R.drawable.ic_qs_inversion_on;
} else {
mDataState = R.drawable.ic_qs_inversion_off;
}
refreshState();
}
@Override
protected void handleUpdateState(BooleanState state, Object arg) {
state.label ="Camera" ;//mContext.getString(R.string.camera);
state.visible = true;
state.iconId = mDataState;
}
}
4,在下面目录下的文件添加新的方法:
alps\frameworks\base\packages\SystemUI\src\com\android\systemui\qs\tiles\QSTile.java
public interface Host {
void startSettingsActivity(Intent intent);
.................
//add new method
CameraController getCameraController ();
5,添加内容
alps\frameworks\base\packages\SystemUI\src\com\android\systemui\statusbar\phone\QSTileHost.java
5.1:
/// M: add CameraController qs
private final CameraController mCameraController ;
5.2:
public QSTileHost(Context context, PhoneStatusBar statusBar,
BluetoothController bluetooth, LocationController location,
RotationLockController rotation, NetworkController network,
ZenModeController zen, HotspotController hotspot,
CastController cast, FlashlightController flashlight,
UserSwitcherController userSwitcher, KeyguardMonitor keyguard,
SecurityController security,
/// M: add HotKnot in quicksetting
HotKnotController hotknot,
/// M: add AudioProfile in quicksetting
AudioProfileController audioprofile,
/// M: add DataConnection in quicksetting
DataConnectionController dataconnection
CameraController cameraController
) {
mContext = context;
mStatusBar = statusBar;
....
mCameraController =cameraController
}
5.3:
private QSTile<?> createTile(String tileSpec) {
if (tileSpec.equals("camera")) return new CameraTile(this);
else if (tileSpec.equals("wifi")) return new WifiTile(this);
else if (tileSpec.equals("bt")) return new BluetoothTile(this);
5.4:
@Override
public CameraController getCameraController() {
return mCameraController ;
}
一,android L版本前(如KK):
下面就以在quicksettings中新增一个mms button为例。
1、新增layout文件
frameworks\base\packages\SystemUI\res\layout\quick_settings_tile_mms.xml
2、修改函数addSystemTiles (在此函数新增如下段code) frameworks\base\packages\SystemUI\src\com\android\systemui\statusbar\phone\QuickSettings.java
// mms
QuickSettingsTileView mMsTile = (QuickSettingsTileView)
inflater.inflate(R.layout.quick_settings_tile, parent, false);
mMsTile.setContent(R.layout.quick_settings_tile_mms, inflater);
mMsTile.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// mBar.collapseAllPanels(true);
// showBrightnessDialog();
Intent intent = new Intent();
intent.setComponent(new ComponentName(
"com.android.mms",
"com.android.mms.ui.ConversationList"));
startSettingsActivity(intent);
}
});
parent.addView(mMsTile);
mDynamicSpannedTiles.add(mMsTile);
3、新增后效果图
二,android L版本
可以参考mtk 源代码是如何添加mediatek自定义的QS Button:
alps\frameworks\base\packages\SystemUI\src\com\mediatek\systemui\qs\tiles
下面我们以添加一个Camera QS Button开关为例:
如下图添加 Camera QS Button:
1,增加config文件内容
alps\frameworks\base\packages\SystemUI\res\values\config.xml
<!-- The default tiles to display in QuickSettings -->
<string name="quick_settings_tiles_default" translatable="false">
wifi,bt,inversion,cell,airplane,rotation,flashlight,location,cast,hotspot,hotknot,
audioprofile,dataconnection,camera
</string>
2,在下面目录下,新建CameraController.java和CameraControllerImpl.java文件
alps\frameworks\base\packages\SystemUI\src\com\mediatek\systemui\statusbar\policy
2.1 CameraController.java:
package com.mediatek.systemui.statusbar.policy;
import java.util.Set;
public interface CameraController {
boolean isSupportCamera();
}
2.2 CameraControllerImpl.java:
package com.mediatek.systemui.statusbar.policy;
import android.content.Context;
import java.util.UUID;
public class CameraControllerImpl implements CameraController {
private static final String TAG = "CameraControllerImpl";
private final Context mContext;
public CameraControllerImpl(Context context) {
mContext = context;
}
@Override
public boolean isSupportCamera() {
return true;
}
}
3,在下面目录下,新建文件CameraTile.java
alps\frameworks\base\packages\SystemUI\src\com\mediatek\systemui\qs\tiles
CameraTile.java:
package com.mediatek.systemui.qs.tiles;
import android.content.Intent;
import android.content.Context;
import android.content.IntentFilter;
import android.content.BroadcastReceiver;
import android.net.ConnectivityManager;
import android.provider.Settings;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnAttachStateChangeListener;
import com.android.internal.telephony.TelephonyIntents;
import com.android.systemui.R;
import com.android.systemui.qs.QSTile;
import com.android.internal.telephony.IccCardConstants;
import com.mediatek.xlog.Xlog;
import com.mediatek.systemui.statusbar.policy.CameraController;
public class CameraTile extends QSTile<QSTile.BooleanState> {
private static final String TAG = "CameraTile";
private static final boolean DEBUG = true;
private final CameraController mController=null;
private boolean mListening;
private int mDataState = R.drawable.ic_qs_inversion_off;
private IccCardConstants.State mSimState = IccCardConstants.State.UNKNOWN;
private TelephonyManager mTelephonyManager;
public CameraTile(Host host) {
super(host);
;//mController = host.getCameraController();
}
@Override
protected BooleanState newTileState() {
return new BooleanState();
}
@Override
public void setListening(boolean listening) {
}
boolean enabled =false;
@Override
protected void handleClick() {
enabled =!enabled;
if (enabled) {
mDataState = R.drawable.ic_qs_inversion_on;
} else {
mDataState = R.drawable.ic_qs_inversion_off;
}
refreshState();
}
@Override
protected void handleUpdateState(BooleanState state, Object arg) {
state.label ="Camera" ;//mContext.getString(R.string.camera);
state.visible = true;
state.iconId = mDataState;
}
}
4,在下面目录下的文件添加新的方法:
alps\frameworks\base\packages\SystemUI\src\com\android\systemui\qs\tiles\QSTile.java
public interface Host {
void startSettingsActivity(Intent intent);
.................
//add new method
CameraController getCameraController ();
5,添加内容
alps\frameworks\base\packages\SystemUI\src\com\android\systemui\statusbar\phone\QSTileHost.java
5.1:
/// M: add CameraController qs
private final CameraController mCameraController ;
5.2:
public QSTileHost(Context context, PhoneStatusBar statusBar,
BluetoothController bluetooth, LocationController location,
RotationLockController rotation, NetworkController network,
ZenModeController zen, HotspotController hotspot,
CastController cast, FlashlightController flashlight,
UserSwitcherController userSwitcher, KeyguardMonitor keyguard,
SecurityController security,
/// M: add HotKnot in quicksetting
HotKnotController hotknot,
/// M: add AudioProfile in quicksetting
AudioProfileController audioprofile,
/// M: add DataConnection in quicksetting
DataConnectionController dataconnection
CameraController cameraController
) {
mContext = context;
mStatusBar = statusBar;
....
mCameraController =cameraController
}
5.3:
private QSTile<?> createTile(String tileSpec) {
if (tileSpec.equals("camera")) return new CameraTile(this);
else if (tileSpec.equals("wifi")) return new WifiTile(this);
else if (tileSpec.equals("bt")) return new BluetoothTile(this);
5.4:
@Override
public CameraController getCameraController() {
return mCameraController ;
}
相关文章推荐
- [翻译 by Zephyr] README In Spark Building
- iOS-UIKit( UILabel.h - -解读)
- Unique Binary Search Trees
- iOS开发 - Core Bluetooth蓝牙开发
- 解决java.sql.SQLException: ORA-01789: query block has incorrect number of result columns
- Android 发送request请求在服务器端解析时乱码
- 实现自适应高度的 UITableViewCell 或 UILabel
- sudo出现sudo:must be setuid root问题的解决方法
- IOS-UIImageView
- $arr as $key=>$value解释
- Codeforces Round #327 (Div. 2) D. Chip 'n Dale Rescue Rangers 二分 物理
- requestWindowFeature
- 关于UISearch
- Codeforces Round #327 (Div. 2) A. Wizards' Duel 水题
- JSP userBean setProperty直接从request中获取参数
- Android 高级UI设计笔记06:仿微信图片选择器
- 10.14~10.25刷题(shui)记录
- UI基础篇-------UITabBarController的使用
- LeetCode_N-Queens II
- LeetCode_N-Queens