am e641b6a9: Adding alarm to quick settings.
* commit 'e641b6a99cabad7076e10694a5b1b30f449de462': Adding alarm to quick settings.
This commit is contained in:
@@ -32,4 +32,12 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="center_horizontal"
|
android:layout_gravity="center_horizontal"
|
||||||
/>
|
/>
|
||||||
|
<TextView
|
||||||
|
android:textAppearance="@style/TextAppearance.QuickSettings.Alarm"
|
||||||
|
android:id="@+id/alarm_textview"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_horizontal"
|
||||||
|
android:drawableLeft="@drawable/stat_sys_alarm"
|
||||||
|
/>
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
@@ -92,6 +92,11 @@
|
|||||||
<item name="android:textSize">14dp</item>
|
<item name="android:textSize">14dp</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
<style name="TextAppearance.QuickSettings.Alarm" parent="@style/TextAppearance.QuickSettings.TileView">
|
||||||
|
<item name="android:textSize">13dp</item>
|
||||||
|
<item name="android:textColor">#ff3a3b39</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
<style name="Animation" />
|
<style name="Animation" />
|
||||||
|
|
||||||
<style name="Animation.ShirtPocketPanel">
|
<style name="Animation.ShirtPocketPanel">
|
||||||
|
|||||||
@@ -17,9 +17,8 @@
|
|||||||
package com.android.systemui.statusbar.phone;
|
package com.android.systemui.statusbar.phone;
|
||||||
|
|
||||||
import android.app.Dialog;
|
import android.app.Dialog;
|
||||||
import android.bluetooth.BluetoothAdapter;
|
|
||||||
import android.bluetooth.BluetoothAdapter.BluetoothStateChangeCallback;
|
|
||||||
import android.content.BroadcastReceiver;
|
import android.content.BroadcastReceiver;
|
||||||
|
import android.content.ComponentName;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.CursorLoader;
|
import android.content.CursorLoader;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
@@ -34,7 +33,6 @@ import android.hardware.display.WifiDisplayStatus;
|
|||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
import android.provider.ContactsContract;
|
import android.provider.ContactsContract;
|
||||||
import android.provider.Settings;
|
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
@@ -45,290 +43,16 @@ import android.widget.Button;
|
|||||||
import android.widget.ListView;
|
import android.widget.ListView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Comparator;
|
|
||||||
|
|
||||||
import com.android.systemui.R;
|
import com.android.systemui.R;
|
||||||
import com.android.systemui.statusbar.phone.QuickSettingsModel.State;
|
import com.android.systemui.statusbar.phone.QuickSettingsModel.State;
|
||||||
import com.android.systemui.statusbar.policy.BatteryController;
|
import com.android.systemui.statusbar.policy.BatteryController;
|
||||||
import com.android.systemui.statusbar.policy.BatteryController.BatteryStateChangeCallback;
|
|
||||||
import com.android.systemui.statusbar.policy.BluetoothController;
|
import com.android.systemui.statusbar.policy.BluetoothController;
|
||||||
import com.android.systemui.statusbar.policy.LocationController;
|
import com.android.systemui.statusbar.policy.LocationController;
|
||||||
import com.android.systemui.statusbar.policy.LocationController.LocationGpsStateChangeCallback;
|
|
||||||
import com.android.systemui.statusbar.policy.NetworkController;
|
import com.android.systemui.statusbar.policy.NetworkController;
|
||||||
import com.android.systemui.statusbar.policy.NetworkController.NetworkSignalChangedCallback;
|
|
||||||
|
|
||||||
class QuickSettingsModel implements BluetoothStateChangeCallback,
|
import java.util.ArrayList;
|
||||||
NetworkSignalChangedCallback,
|
import java.util.Comparator;
|
||||||
BatteryStateChangeCallback,
|
|
||||||
LocationGpsStateChangeCallback {
|
|
||||||
|
|
||||||
/** Represents the state of a given attribute. */
|
|
||||||
static class State {
|
|
||||||
int iconId;
|
|
||||||
String label;
|
|
||||||
boolean enabled;
|
|
||||||
}
|
|
||||||
static class BatteryState extends State {
|
|
||||||
int batteryLevel;
|
|
||||||
boolean pluggedIn;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** The callback to update a given tile. */
|
|
||||||
interface RefreshCallback {
|
|
||||||
public void refreshView(QuickSettingsTileView view, State state);
|
|
||||||
}
|
|
||||||
|
|
||||||
private Context mContext;
|
|
||||||
|
|
||||||
private QuickSettingsTileView mUserTile;
|
|
||||||
private RefreshCallback mUserCallback;
|
|
||||||
private State mUserState = new State();
|
|
||||||
|
|
||||||
private QuickSettingsTileView mAirplaneModeTile;
|
|
||||||
private RefreshCallback mAirplaneModeCallback;
|
|
||||||
private State mAirplaneModeState = new State();
|
|
||||||
|
|
||||||
private QuickSettingsTileView mWifiTile;
|
|
||||||
private RefreshCallback mWifiCallback;
|
|
||||||
private State mWifiState = new State();
|
|
||||||
|
|
||||||
private QuickSettingsTileView mWifiDisplayTile;
|
|
||||||
private RefreshCallback mWifiDisplayCallback;
|
|
||||||
private State mWifiDisplayState = new State();
|
|
||||||
|
|
||||||
private QuickSettingsTileView mRSSITile;
|
|
||||||
private RefreshCallback mRSSICallback;
|
|
||||||
private State mRSSIState = new State();
|
|
||||||
|
|
||||||
private QuickSettingsTileView mBluetoothTile;
|
|
||||||
private RefreshCallback mBluetoothCallback;
|
|
||||||
private State mBluetoothState = new State();
|
|
||||||
|
|
||||||
private QuickSettingsTileView mBatteryTile;
|
|
||||||
private RefreshCallback mBatteryCallback;
|
|
||||||
private BatteryState mBatteryState = new BatteryState();
|
|
||||||
|
|
||||||
private QuickSettingsTileView mLocationTile;
|
|
||||||
private RefreshCallback mLocationCallback;
|
|
||||||
private State mLocationState = new State();
|
|
||||||
|
|
||||||
public QuickSettingsModel(Context context) {
|
|
||||||
mContext = context;
|
|
||||||
}
|
|
||||||
|
|
||||||
// User
|
|
||||||
void addUserTile(QuickSettingsTileView view, RefreshCallback cb) {
|
|
||||||
mUserTile = view;
|
|
||||||
mUserCallback = cb;
|
|
||||||
mUserCallback.refreshView(mUserTile, mUserState);
|
|
||||||
}
|
|
||||||
void setUserTileInfo(String name) {
|
|
||||||
mUserState.label = name;
|
|
||||||
mUserCallback.refreshView(mUserTile, mUserState);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Airplane Mode
|
|
||||||
void addAirplaneModeTile(QuickSettingsTileView view, RefreshCallback cb) {
|
|
||||||
mAirplaneModeTile = view;
|
|
||||||
mAirplaneModeTile.setOnClickListener(new View.OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
if (mAirplaneModeState.enabled) {
|
|
||||||
setAirplaneModeState(false);
|
|
||||||
} else {
|
|
||||||
setAirplaneModeState(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
mAirplaneModeCallback = cb;
|
|
||||||
mAirplaneModeCallback.refreshView(mAirplaneModeTile, mAirplaneModeState);
|
|
||||||
}
|
|
||||||
private void setAirplaneModeState(boolean enabled) {
|
|
||||||
// TODO: Sets the view to be "awaiting" if not already awaiting
|
|
||||||
|
|
||||||
// Change the system setting
|
|
||||||
Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON,
|
|
||||||
enabled ? 1 : 0);
|
|
||||||
|
|
||||||
// TODO: Update the UI to reflect system setting
|
|
||||||
// mCheckBoxPref.setChecked(enabled);
|
|
||||||
|
|
||||||
// Post the intent
|
|
||||||
Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
|
|
||||||
intent.putExtra("state", enabled);
|
|
||||||
mContext.sendBroadcastAsUser(intent, UserHandle.ALL);
|
|
||||||
}
|
|
||||||
// NetworkSignalChanged callback
|
|
||||||
@Override
|
|
||||||
public void onAirplaneModeChanged(boolean enabled) {
|
|
||||||
// TODO: If view is in awaiting state, disable
|
|
||||||
Resources r = mContext.getResources();
|
|
||||||
mAirplaneModeState.enabled = enabled;
|
|
||||||
mAirplaneModeState.iconId = (enabled ?
|
|
||||||
R.drawable.ic_qs_airplane_enabled :
|
|
||||||
R.drawable.ic_qs_airplane_normal);
|
|
||||||
mAirplaneModeCallback.refreshView(mAirplaneModeTile, mAirplaneModeState);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Wifi
|
|
||||||
void addWifiTile(QuickSettingsTileView view, RefreshCallback cb) {
|
|
||||||
mWifiTile = view;
|
|
||||||
mWifiCallback = cb;
|
|
||||||
mWifiCallback.refreshView(mWifiTile, mWifiState);
|
|
||||||
}
|
|
||||||
// NetworkSignalChanged callback
|
|
||||||
@Override
|
|
||||||
public void onWifiSignalChanged(boolean enabled, String description) {
|
|
||||||
// TODO: If view is in awaiting state, disable
|
|
||||||
Resources r = mContext.getResources();
|
|
||||||
// TODO: Check if wifi is enabled
|
|
||||||
mWifiState.enabled = enabled;
|
|
||||||
mWifiState.iconId = (enabled ?
|
|
||||||
R.drawable.ic_qs_wifi_enabled :
|
|
||||||
R.drawable.ic_qs_wifi_normal);
|
|
||||||
mWifiState.label = (enabled ?
|
|
||||||
description :
|
|
||||||
r.getString(R.string.quick_settings_wifi_no_network));
|
|
||||||
mWifiCallback.refreshView(mWifiTile, mWifiState);
|
|
||||||
}
|
|
||||||
|
|
||||||
// RSSI
|
|
||||||
void addRSSITile(QuickSettingsTileView view, RefreshCallback cb) {
|
|
||||||
mRSSITile = view;
|
|
||||||
mRSSICallback = cb;
|
|
||||||
mRSSICallback.refreshView(mRSSITile, mRSSIState);
|
|
||||||
}
|
|
||||||
private void setRSSIState(boolean enabled) {
|
|
||||||
// TODO: Set RSSI enabled
|
|
||||||
// TODO: Sets the view to be "awaiting" if not already awaiting
|
|
||||||
}
|
|
||||||
// NetworkSignalChanged callback
|
|
||||||
@Override
|
|
||||||
public void onMobileDataSignalChanged(boolean enabled, String description) {
|
|
||||||
// TODO: If view is in awaiting state, disable
|
|
||||||
Resources r = mContext.getResources();
|
|
||||||
// TODO: Check if RSSI is enabled
|
|
||||||
mRSSIState.enabled = enabled;
|
|
||||||
mRSSIState.iconId = (enabled ?
|
|
||||||
R.drawable.ic_qs_rssi_enabled :
|
|
||||||
R.drawable.ic_qs_rssi_normal);
|
|
||||||
mRSSIState.label = (enabled ?
|
|
||||||
description :
|
|
||||||
r.getString(R.string.quick_settings_rssi_emergency_only));
|
|
||||||
mRSSICallback.refreshView(mRSSITile, mRSSIState);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Bluetooth
|
|
||||||
void addBluetoothTile(QuickSettingsTileView view, RefreshCallback cb) {
|
|
||||||
mBluetoothTile = view;
|
|
||||||
mBluetoothTile.setOnClickListener(new View.OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
if (mBluetoothState.enabled) {
|
|
||||||
setBluetoothState(false);
|
|
||||||
} else {
|
|
||||||
setBluetoothState(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
mBluetoothCallback = cb;
|
|
||||||
|
|
||||||
final BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
|
|
||||||
onBluetoothStateChange(adapter.isEnabled());
|
|
||||||
}
|
|
||||||
private void setBluetoothState(boolean enabled) {
|
|
||||||
// TODO: Sets the view to be "awaiting" if not already awaiting
|
|
||||||
final BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
|
|
||||||
if (adapter != null) {
|
|
||||||
if (enabled) {
|
|
||||||
adapter.enable();
|
|
||||||
} else {
|
|
||||||
adapter.disable();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// BluetoothController callback
|
|
||||||
@Override
|
|
||||||
public void onBluetoothStateChange(boolean on) {
|
|
||||||
// TODO: If view is in awaiting state, disable
|
|
||||||
Resources r = mContext.getResources();
|
|
||||||
mBluetoothState.enabled = on;
|
|
||||||
if (on) {
|
|
||||||
mBluetoothState.iconId = R.drawable.ic_qs_bluetooth_enabled;
|
|
||||||
} else {
|
|
||||||
mBluetoothState.iconId = R.drawable.ic_qs_bluetooth_normal;
|
|
||||||
}
|
|
||||||
mBluetoothCallback.refreshView(mBluetoothTile, mBluetoothState);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Battery
|
|
||||||
void addBatteryTile(QuickSettingsTileView view, RefreshCallback cb) {
|
|
||||||
mBatteryTile = view;
|
|
||||||
mBatteryCallback = cb;
|
|
||||||
mBatteryCallback.refreshView(mBatteryTile, mBatteryState);
|
|
||||||
}
|
|
||||||
// BatteryController callback
|
|
||||||
@Override
|
|
||||||
public void onBatteryLevelChanged(int level, boolean pluggedIn) {
|
|
||||||
mBatteryState.batteryLevel = level;
|
|
||||||
mBatteryState.pluggedIn = pluggedIn;
|
|
||||||
mBatteryCallback.refreshView(mBatteryTile, mBatteryState);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Location
|
|
||||||
void addLocationTile(QuickSettingsTileView view, RefreshCallback cb) {
|
|
||||||
mLocationTile = view;
|
|
||||||
mLocationCallback = cb;
|
|
||||||
mLocationCallback.refreshView(mLocationTile, mLocationState);
|
|
||||||
disableLocationTile();
|
|
||||||
}
|
|
||||||
private void enableLocationTile() {
|
|
||||||
mLocationTile.setVisibility(View.VISIBLE);
|
|
||||||
}
|
|
||||||
private void disableLocationTile() {
|
|
||||||
mLocationTile.setVisibility(View.GONE);
|
|
||||||
}
|
|
||||||
// LocationController callback
|
|
||||||
@Override
|
|
||||||
public void onLocationGpsStateChanged(boolean inUse, String description) {
|
|
||||||
if (inUse) {
|
|
||||||
mLocationState.enabled = inUse;
|
|
||||||
mLocationState.label = description;
|
|
||||||
mLocationCallback.refreshView(mLocationTile, mLocationState);
|
|
||||||
enableLocationTile();
|
|
||||||
} else {
|
|
||||||
disableLocationTile();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Wifi Display
|
|
||||||
void addWifiDisplayTile(QuickSettingsTileView view, RefreshCallback cb) {
|
|
||||||
mWifiDisplayTile = view;
|
|
||||||
mWifiDisplayCallback = cb;
|
|
||||||
}
|
|
||||||
private void enableWifiDisplayTile() {
|
|
||||||
mWifiDisplayTile.setVisibility(View.VISIBLE);
|
|
||||||
}
|
|
||||||
private void disableWifiDisplayTile() {
|
|
||||||
mWifiDisplayTile.setVisibility(View.GONE);
|
|
||||||
}
|
|
||||||
public void onWifiDisplayStateChanged(WifiDisplayStatus status) {
|
|
||||||
if (status.isEnabled()) {
|
|
||||||
if (status.getActiveDisplay() != null) {
|
|
||||||
mWifiDisplayState.label = status.getActiveDisplay().getDeviceName();
|
|
||||||
} else {
|
|
||||||
mWifiDisplayState.label = mContext.getString(
|
|
||||||
R.string.quick_settings_wifi_display_no_connection_label);
|
|
||||||
}
|
|
||||||
mWifiDisplayCallback.refreshView(mWifiDisplayTile, mWifiDisplayState);
|
|
||||||
enableWifiDisplayTile();
|
|
||||||
} else {
|
|
||||||
disableWifiDisplayTile();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@@ -431,6 +155,17 @@ class QuickSettings {
|
|||||||
queryForUserInformation();
|
queryForUserInformation();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void startSettingsActivity(String action) {
|
||||||
|
Intent intent = new Intent(action);
|
||||||
|
startSettingsActivity(intent);
|
||||||
|
}
|
||||||
|
private void startSettingsActivity(Intent intent) {
|
||||||
|
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||||
|
mContext.startActivity(intent);
|
||||||
|
mBar.collapseAllPanels(true);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
private void addUserTiles(ViewGroup parent, LayoutInflater inflater) {
|
private void addUserTiles(ViewGroup parent, LayoutInflater inflater) {
|
||||||
QuickSettingsTileView userTile = (QuickSettingsTileView)
|
QuickSettingsTileView userTile = (QuickSettingsTileView)
|
||||||
inflater.inflate(R.layout.quick_settings_tile, parent, false);
|
inflater.inflate(R.layout.quick_settings_tile, parent, false);
|
||||||
@@ -449,6 +184,25 @@ class QuickSettings {
|
|||||||
QuickSettingsTileView timeTile = (QuickSettingsTileView)
|
QuickSettingsTileView timeTile = (QuickSettingsTileView)
|
||||||
inflater.inflate(R.layout.quick_settings_tile, parent, false);
|
inflater.inflate(R.layout.quick_settings_tile, parent, false);
|
||||||
timeTile.setContent(R.layout.quick_settings_tile_time, inflater);
|
timeTile.setContent(R.layout.quick_settings_tile_time, inflater);
|
||||||
|
timeTile.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
// TODO: Jump into the alarm application
|
||||||
|
Intent intent = new Intent();
|
||||||
|
intent.setComponent(new ComponentName(
|
||||||
|
"com.google.android.deskclock",
|
||||||
|
"com.android.deskclock.AlarmClock"));
|
||||||
|
startSettingsActivity(intent);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
mModel.addTimeTile(timeTile, new QuickSettingsModel.RefreshCallback() {
|
||||||
|
@Override
|
||||||
|
public void refreshView(QuickSettingsTileView view, State alarmState) {
|
||||||
|
TextView tv = (TextView) view.findViewById(R.id.alarm_textview);
|
||||||
|
tv.setText(alarmState.label);
|
||||||
|
tv.setVisibility(alarmState.enabled ? View.VISIBLE : View.GONE);
|
||||||
|
}
|
||||||
|
});
|
||||||
parent.addView(timeTile);
|
parent.addView(timeTile);
|
||||||
mDynamicSpannedTiles.add(timeTile);
|
mDynamicSpannedTiles.add(timeTile);
|
||||||
|
|
||||||
@@ -459,10 +213,7 @@ class QuickSettings {
|
|||||||
settingsTile.setOnClickListener(new View.OnClickListener() {
|
settingsTile.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
Intent intent = new Intent(android.provider.Settings.ACTION_SETTINGS);
|
startSettingsActivity(android.provider.Settings.ACTION_SETTINGS);
|
||||||
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
|
||||||
mContext.startActivity(intent);
|
|
||||||
mBar.collapseAllPanels(true);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
parent.addView(settingsTile);
|
parent.addView(settingsTile);
|
||||||
@@ -477,10 +228,7 @@ class QuickSettings {
|
|||||||
wifiTile.setOnClickListener(new View.OnClickListener() {
|
wifiTile.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
Intent intent = new Intent(android.provider.Settings.ACTION_WIFI_SETTINGS);
|
startSettingsActivity(android.provider.Settings.ACTION_WIFI_SETTINGS);
|
||||||
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
|
||||||
mContext.startActivity(intent);
|
|
||||||
mBar.collapseAllPanels(true);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
mModel.addWifiTile(wifiTile, new QuickSettingsModel.RefreshCallback() {
|
mModel.addWifiTile(wifiTile, new QuickSettingsModel.RefreshCallback() {
|
||||||
@@ -500,10 +248,11 @@ class QuickSettings {
|
|||||||
rssiTile.setOnClickListener(new View.OnClickListener() {
|
rssiTile.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
Intent intent = new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS);
|
Intent intent = new Intent();
|
||||||
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
intent.setComponent(new ComponentName(
|
||||||
mContext.startActivity(intent);
|
"com.android.settings",
|
||||||
mBar.collapseAllPanels(true);
|
"com.android.settings.Settings$DataUsageSummaryActivity"));
|
||||||
|
startSettingsActivity(intent);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
mModel.addRSSITile(rssiTile, new QuickSettingsModel.RefreshCallback() {
|
mModel.addRSSITile(rssiTile, new QuickSettingsModel.RefreshCallback() {
|
||||||
@@ -523,10 +272,7 @@ class QuickSettings {
|
|||||||
batteryTile.setOnClickListener(new View.OnClickListener() {
|
batteryTile.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
Intent intent = new Intent(Intent.ACTION_POWER_USAGE_SUMMARY);
|
startSettingsActivity(Intent.ACTION_POWER_USAGE_SUMMARY);
|
||||||
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
|
||||||
mContext.startActivity(intent);
|
|
||||||
mBar.collapseAllPanels(true);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
mModel.addBatteryTile(batteryTile, new QuickSettingsModel.RefreshCallback() {
|
mModel.addBatteryTile(batteryTile, new QuickSettingsModel.RefreshCallback() {
|
||||||
@@ -560,6 +306,12 @@ class QuickSettings {
|
|||||||
QuickSettingsTileView bluetoothTile = (QuickSettingsTileView)
|
QuickSettingsTileView bluetoothTile = (QuickSettingsTileView)
|
||||||
inflater.inflate(R.layout.quick_settings_tile, parent, false);
|
inflater.inflate(R.layout.quick_settings_tile, parent, false);
|
||||||
bluetoothTile.setContent(R.layout.quick_settings_tile_bluetooth, inflater);
|
bluetoothTile.setContent(R.layout.quick_settings_tile_bluetooth, inflater);
|
||||||
|
bluetoothTile.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
startSettingsActivity(android.provider.Settings.ACTION_BLUETOOTH_SETTINGS);
|
||||||
|
}
|
||||||
|
});
|
||||||
mModel.addBluetoothTile(bluetoothTile, new QuickSettingsModel.RefreshCallback() {
|
mModel.addBluetoothTile(bluetoothTile, new QuickSettingsModel.RefreshCallback() {
|
||||||
@Override
|
@Override
|
||||||
public void refreshView(QuickSettingsTileView view, State state) {
|
public void refreshView(QuickSettingsTileView view, State state) {
|
||||||
@@ -576,10 +328,7 @@ class QuickSettings {
|
|||||||
brightnessTile.setOnClickListener(new View.OnClickListener() {
|
brightnessTile.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
Intent intent = new Intent(android.provider.Settings.ACTION_DISPLAY_SETTINGS);
|
startSettingsActivity(android.provider.Settings.ACTION_DISPLAY_SETTINGS);
|
||||||
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
|
||||||
mContext.startActivity(intent);
|
|
||||||
mBar.collapseAllPanels(true);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
parent.addView(brightnessTile);
|
parent.addView(brightnessTile);
|
||||||
@@ -593,11 +342,7 @@ class QuickSettings {
|
|||||||
locationTile.setOnClickListener(new View.OnClickListener() {
|
locationTile.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
Intent intent =
|
startSettingsActivity(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
|
||||||
new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
|
|
||||||
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
|
||||||
mContext.startActivity(intent);
|
|
||||||
mBar.collapseAllPanels(true);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
mModel.addLocationTile(locationTile, new QuickSettingsModel.RefreshCallback() {
|
mModel.addLocationTile(locationTile, new QuickSettingsModel.RefreshCallback() {
|
||||||
@@ -605,6 +350,7 @@ class QuickSettings {
|
|||||||
public void refreshView(QuickSettingsTileView view, State state) {
|
public void refreshView(QuickSettingsTileView view, State state) {
|
||||||
TextView tv = (TextView) view.findViewById(R.id.location_textview);
|
TextView tv = (TextView) view.findViewById(R.id.location_textview);
|
||||||
tv.setText(state.label);
|
tv.setText(state.label);
|
||||||
|
view.setVisibility(state.enabled ? View.VISIBLE : View.GONE);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
parent.addView(locationTile);
|
parent.addView(locationTile);
|
||||||
@@ -625,6 +371,7 @@ class QuickSettings {
|
|||||||
public void refreshView(QuickSettingsTileView view, State state) {
|
public void refreshView(QuickSettingsTileView view, State state) {
|
||||||
TextView tv = (TextView) view.findViewById(R.id.wifi_display_textview);
|
TextView tv = (TextView) view.findViewById(R.id.wifi_display_textview);
|
||||||
tv.setText(state.label);
|
tv.setText(state.label);
|
||||||
|
view.setVisibility(state.enabled ? View.VISIBLE : View.GONE);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
parent.addView(wifiDisplayTile);
|
parent.addView(wifiDisplayTile);
|
||||||
@@ -658,6 +405,7 @@ class QuickSettings {
|
|||||||
mContainerView.requestLayout();
|
mContainerView.requestLayout();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Wifi Display
|
||||||
private void showWifiDisplayDialog() {
|
private void showWifiDisplayDialog() {
|
||||||
mDisplayManager.scanWifiDisplays();
|
mDisplayManager.scanWifiDisplays();
|
||||||
updateWifiDisplayStatus();
|
updateWifiDisplayStatus();
|
||||||
|
|||||||
@@ -0,0 +1,320 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2012 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.statusbar.phone;
|
||||||
|
|
||||||
|
import android.bluetooth.BluetoothAdapter;
|
||||||
|
import android.bluetooth.BluetoothAdapter.BluetoothStateChangeCallback;
|
||||||
|
import android.content.BroadcastReceiver;
|
||||||
|
import android.content.ContentResolver;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.content.IntentFilter;
|
||||||
|
import android.content.res.Resources;
|
||||||
|
import android.database.ContentObserver;
|
||||||
|
import android.hardware.display.WifiDisplayStatus;
|
||||||
|
import android.os.Handler;
|
||||||
|
import android.provider.Settings;
|
||||||
|
import android.view.View;
|
||||||
|
|
||||||
|
import com.android.systemui.R;
|
||||||
|
import com.android.systemui.statusbar.policy.BatteryController.BatteryStateChangeCallback;
|
||||||
|
import com.android.systemui.statusbar.policy.LocationController.LocationGpsStateChangeCallback;
|
||||||
|
import com.android.systemui.statusbar.policy.NetworkController.NetworkSignalChangedCallback;
|
||||||
|
|
||||||
|
|
||||||
|
class QuickSettingsModel implements BluetoothStateChangeCallback,
|
||||||
|
NetworkSignalChangedCallback,
|
||||||
|
BatteryStateChangeCallback,
|
||||||
|
LocationGpsStateChangeCallback {
|
||||||
|
|
||||||
|
/** Represents the state of a given attribute. */
|
||||||
|
static class State {
|
||||||
|
int iconId;
|
||||||
|
String label;
|
||||||
|
boolean enabled = false;
|
||||||
|
}
|
||||||
|
static class BatteryState extends State {
|
||||||
|
int batteryLevel;
|
||||||
|
boolean pluggedIn;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** The callback to update a given tile. */
|
||||||
|
interface RefreshCallback {
|
||||||
|
public void refreshView(QuickSettingsTileView view, State state);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Broadcast receive to determine if there is an alarm set. */
|
||||||
|
private BroadcastReceiver mAlarmIntentReceiver = new BroadcastReceiver() {
|
||||||
|
@Override
|
||||||
|
public void onReceive(Context context, Intent intent) {
|
||||||
|
String action = intent.getAction();
|
||||||
|
if (action.equals(Intent.ACTION_ALARM_CHANGED)) {
|
||||||
|
onAlarmChanged(intent);
|
||||||
|
onNextAlarmChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/** ContentObserver to determine the next alarm */
|
||||||
|
private class NextAlarmObserver extends ContentObserver {
|
||||||
|
public NextAlarmObserver(Handler handler) {
|
||||||
|
super(handler);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override public void onChange(boolean selfChange) {
|
||||||
|
onNextAlarmChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void startObserving() {
|
||||||
|
final ContentResolver cr = mContext.getContentResolver();
|
||||||
|
cr.registerContentObserver(
|
||||||
|
Settings.System.getUriFor(Settings.System.NEXT_ALARM_FORMATTED), false, this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private Context mContext;
|
||||||
|
private Handler mHandler;
|
||||||
|
private NextAlarmObserver mNextAlarmObserver;
|
||||||
|
|
||||||
|
private QuickSettingsTileView mUserTile;
|
||||||
|
private RefreshCallback mUserCallback;
|
||||||
|
private State mUserState = new State();
|
||||||
|
|
||||||
|
private QuickSettingsTileView mTimeTile;
|
||||||
|
private RefreshCallback mTimeAlarmCallback;
|
||||||
|
private State mTimeAlarmState = new State();
|
||||||
|
|
||||||
|
private QuickSettingsTileView mAirplaneModeTile;
|
||||||
|
private RefreshCallback mAirplaneModeCallback;
|
||||||
|
private State mAirplaneModeState = new State();
|
||||||
|
|
||||||
|
private QuickSettingsTileView mWifiTile;
|
||||||
|
private RefreshCallback mWifiCallback;
|
||||||
|
private State mWifiState = new State();
|
||||||
|
|
||||||
|
private QuickSettingsTileView mWifiDisplayTile;
|
||||||
|
private RefreshCallback mWifiDisplayCallback;
|
||||||
|
private State mWifiDisplayState = new State();
|
||||||
|
|
||||||
|
private QuickSettingsTileView mRSSITile;
|
||||||
|
private RefreshCallback mRSSICallback;
|
||||||
|
private State mRSSIState = new State();
|
||||||
|
|
||||||
|
private QuickSettingsTileView mBluetoothTile;
|
||||||
|
private RefreshCallback mBluetoothCallback;
|
||||||
|
private State mBluetoothState = new State();
|
||||||
|
|
||||||
|
private QuickSettingsTileView mBatteryTile;
|
||||||
|
private RefreshCallback mBatteryCallback;
|
||||||
|
private BatteryState mBatteryState = new BatteryState();
|
||||||
|
|
||||||
|
private QuickSettingsTileView mLocationTile;
|
||||||
|
private RefreshCallback mLocationCallback;
|
||||||
|
private State mLocationState = new State();
|
||||||
|
|
||||||
|
public QuickSettingsModel(Context context) {
|
||||||
|
mContext = context;
|
||||||
|
mHandler = new Handler();
|
||||||
|
mNextAlarmObserver = new NextAlarmObserver(mHandler);
|
||||||
|
mNextAlarmObserver.startObserving();
|
||||||
|
|
||||||
|
IntentFilter alarmIntentFilter = new IntentFilter();
|
||||||
|
alarmIntentFilter.addAction(Intent.ACTION_ALARM_CHANGED);
|
||||||
|
context.registerReceiver(mAlarmIntentReceiver, alarmIntentFilter);
|
||||||
|
}
|
||||||
|
|
||||||
|
// User
|
||||||
|
void addUserTile(QuickSettingsTileView view, RefreshCallback cb) {
|
||||||
|
mUserTile = view;
|
||||||
|
mUserCallback = cb;
|
||||||
|
mUserCallback.refreshView(mUserTile, mUserState);
|
||||||
|
}
|
||||||
|
void setUserTileInfo(String name) {
|
||||||
|
mUserState.label = name;
|
||||||
|
mUserCallback.refreshView(mUserTile, mUserState);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Time
|
||||||
|
void addTimeTile(QuickSettingsTileView view, RefreshCallback cb) {
|
||||||
|
mTimeTile = view;
|
||||||
|
mTimeAlarmCallback = cb;
|
||||||
|
mTimeAlarmCallback.refreshView(view, mTimeAlarmState);
|
||||||
|
}
|
||||||
|
void onAlarmChanged(Intent intent) {
|
||||||
|
mTimeAlarmState.enabled = intent.getBooleanExtra("alarmSet", false);
|
||||||
|
System.out.println("ALARM ENABLED: " + mTimeAlarmState.enabled);
|
||||||
|
mTimeAlarmCallback.refreshView(mTimeTile, mTimeAlarmState);
|
||||||
|
}
|
||||||
|
void onNextAlarmChanged() {
|
||||||
|
mTimeAlarmState.label = Settings.System.getString(mContext.getContentResolver(),
|
||||||
|
Settings.System.NEXT_ALARM_FORMATTED);
|
||||||
|
System.out.println("ALARM LABEL: " + mTimeAlarmState.label);
|
||||||
|
mTimeAlarmCallback.refreshView(mTimeTile, mTimeAlarmState);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Airplane Mode
|
||||||
|
void addAirplaneModeTile(QuickSettingsTileView view, RefreshCallback cb) {
|
||||||
|
mAirplaneModeTile = view;
|
||||||
|
mAirplaneModeTile.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
if (mAirplaneModeState.enabled) {
|
||||||
|
setAirplaneModeState(false);
|
||||||
|
} else {
|
||||||
|
setAirplaneModeState(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
mAirplaneModeCallback = cb;
|
||||||
|
mAirplaneModeCallback.refreshView(mAirplaneModeTile, mAirplaneModeState);
|
||||||
|
}
|
||||||
|
private void setAirplaneModeState(boolean enabled) {
|
||||||
|
// TODO: Sets the view to be "awaiting" if not already awaiting
|
||||||
|
|
||||||
|
// Change the system setting
|
||||||
|
Settings.System.putInt(mContext.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON,
|
||||||
|
enabled ? 1 : 0);
|
||||||
|
|
||||||
|
// Post the intent
|
||||||
|
Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
|
||||||
|
intent.putExtra("state", enabled);
|
||||||
|
mContext.sendBroadcast(intent);
|
||||||
|
}
|
||||||
|
// NetworkSignalChanged callback
|
||||||
|
@Override
|
||||||
|
public void onAirplaneModeChanged(boolean enabled) {
|
||||||
|
// TODO: If view is in awaiting state, disable
|
||||||
|
Resources r = mContext.getResources();
|
||||||
|
mAirplaneModeState.enabled = enabled;
|
||||||
|
mAirplaneModeState.iconId = (enabled ?
|
||||||
|
R.drawable.ic_qs_airplane_enabled :
|
||||||
|
R.drawable.ic_qs_airplane_normal);
|
||||||
|
mAirplaneModeCallback.refreshView(mAirplaneModeTile, mAirplaneModeState);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Wifi
|
||||||
|
void addWifiTile(QuickSettingsTileView view, RefreshCallback cb) {
|
||||||
|
mWifiTile = view;
|
||||||
|
mWifiCallback = cb;
|
||||||
|
mWifiCallback.refreshView(mWifiTile, mWifiState);
|
||||||
|
}
|
||||||
|
// NetworkSignalChanged callback
|
||||||
|
@Override
|
||||||
|
public void onWifiSignalChanged(boolean enabled, String description) {
|
||||||
|
// TODO: If view is in awaiting state, disable
|
||||||
|
Resources r = mContext.getResources();
|
||||||
|
// TODO: Check if wifi is enabled
|
||||||
|
mWifiState.enabled = enabled;
|
||||||
|
mWifiState.iconId = (enabled ?
|
||||||
|
R.drawable.ic_qs_wifi_enabled :
|
||||||
|
R.drawable.ic_qs_wifi_normal);
|
||||||
|
mWifiState.label = (enabled ?
|
||||||
|
description :
|
||||||
|
r.getString(R.string.quick_settings_wifi_no_network));
|
||||||
|
mWifiCallback.refreshView(mWifiTile, mWifiState);
|
||||||
|
}
|
||||||
|
|
||||||
|
// RSSI
|
||||||
|
void addRSSITile(QuickSettingsTileView view, RefreshCallback cb) {
|
||||||
|
mRSSITile = view;
|
||||||
|
mRSSICallback = cb;
|
||||||
|
mRSSICallback.refreshView(mRSSITile, mRSSIState);
|
||||||
|
}
|
||||||
|
// NetworkSignalChanged callback
|
||||||
|
@Override
|
||||||
|
public void onMobileDataSignalChanged(boolean enabled, String description) {
|
||||||
|
// TODO: If view is in awaiting state, disable
|
||||||
|
Resources r = mContext.getResources();
|
||||||
|
// TODO: Check if RSSI is enabled
|
||||||
|
mRSSIState.enabled = enabled;
|
||||||
|
mRSSIState.iconId = (enabled ?
|
||||||
|
R.drawable.ic_qs_rssi_enabled :
|
||||||
|
R.drawable.ic_qs_rssi_normal);
|
||||||
|
mRSSIState.label = (enabled ?
|
||||||
|
description :
|
||||||
|
r.getString(R.string.quick_settings_rssi_emergency_only));
|
||||||
|
mRSSICallback.refreshView(mRSSITile, mRSSIState);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Bluetooth
|
||||||
|
void addBluetoothTile(QuickSettingsTileView view, RefreshCallback cb) {
|
||||||
|
mBluetoothTile = view;
|
||||||
|
mBluetoothCallback = cb;
|
||||||
|
|
||||||
|
final BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
|
||||||
|
onBluetoothStateChange(adapter.isEnabled());
|
||||||
|
}
|
||||||
|
// BluetoothController callback
|
||||||
|
@Override
|
||||||
|
public void onBluetoothStateChange(boolean on) {
|
||||||
|
// TODO: If view is in awaiting state, disable
|
||||||
|
Resources r = mContext.getResources();
|
||||||
|
mBluetoothState.enabled = on;
|
||||||
|
if (on) {
|
||||||
|
mBluetoothState.iconId = R.drawable.ic_qs_bluetooth_enabled;
|
||||||
|
} else {
|
||||||
|
mBluetoothState.iconId = R.drawable.ic_qs_bluetooth_normal;
|
||||||
|
}
|
||||||
|
mBluetoothCallback.refreshView(mBluetoothTile, mBluetoothState);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Battery
|
||||||
|
void addBatteryTile(QuickSettingsTileView view, RefreshCallback cb) {
|
||||||
|
mBatteryTile = view;
|
||||||
|
mBatteryCallback = cb;
|
||||||
|
mBatteryCallback.refreshView(mBatteryTile, mBatteryState);
|
||||||
|
}
|
||||||
|
// BatteryController callback
|
||||||
|
@Override
|
||||||
|
public void onBatteryLevelChanged(int level, boolean pluggedIn) {
|
||||||
|
mBatteryState.batteryLevel = level;
|
||||||
|
mBatteryState.pluggedIn = pluggedIn;
|
||||||
|
mBatteryCallback.refreshView(mBatteryTile, mBatteryState);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Location
|
||||||
|
void addLocationTile(QuickSettingsTileView view, RefreshCallback cb) {
|
||||||
|
mLocationTile = view;
|
||||||
|
mLocationCallback = cb;
|
||||||
|
mLocationCallback.refreshView(mLocationTile, mLocationState);
|
||||||
|
}
|
||||||
|
// LocationController callback
|
||||||
|
@Override
|
||||||
|
public void onLocationGpsStateChanged(boolean inUse, String description) {
|
||||||
|
mLocationState.enabled = inUse;
|
||||||
|
mLocationState.label = description;
|
||||||
|
mLocationCallback.refreshView(mLocationTile, mLocationState);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Wifi Display
|
||||||
|
void addWifiDisplayTile(QuickSettingsTileView view, RefreshCallback cb) {
|
||||||
|
mWifiDisplayTile = view;
|
||||||
|
mWifiDisplayCallback = cb;
|
||||||
|
}
|
||||||
|
public void onWifiDisplayStateChanged(WifiDisplayStatus status) {
|
||||||
|
mWifiDisplayState.enabled = status.isEnabled();
|
||||||
|
if (status.getActiveDisplay() != null) {
|
||||||
|
mWifiDisplayState.label = status.getActiveDisplay().getDeviceName();
|
||||||
|
} else {
|
||||||
|
mWifiDisplayState.label = mContext.getString(
|
||||||
|
R.string.quick_settings_wifi_display_no_connection_label);
|
||||||
|
}
|
||||||
|
mWifiDisplayCallback.refreshView(mWifiDisplayTile, mWifiDisplayState);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -127,6 +127,10 @@ public class LocationController extends BroadcastReceiver {
|
|||||||
n,
|
n,
|
||||||
idOut,
|
idOut,
|
||||||
UserHandle.USER_CURRENT);
|
UserHandle.USER_CURRENT);
|
||||||
|
|
||||||
|
for (LocationGpsStateChangeCallback cb : mChangeCallbacks) {
|
||||||
|
cb.onLocationGpsStateChanged(true, text);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
mNotificationService.cancelNotificationWithTag(
|
mNotificationService.cancelNotificationWithTag(
|
||||||
mContext.getPackageName(), null,
|
mContext.getPackageName(), null,
|
||||||
|
|||||||
Reference in New Issue
Block a user