如何在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
// 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 ;
}