// Copyright 2016 Google Inc. // // 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.google.android_quick_settings; import android.annotation.SuppressLint; import android.annotation.TargetApi; import android.content.SharedPreferences; import android.graphics.drawable.Icon; import android.os.Build; import android.service.quicksettings.Tile; import android.service.quicksettings.TileService; import android.util.Log; import android.util.StringBuilderPrinter; import java.util.Locale; import static com.google.android_quick_settings.R.drawable.ic_android_black_24dp; @SuppressLint("Override") @TargetApi(Build.VERSION_CODES.N) public class QuickSettingsService extends TileService { private static final String SERVICE_STATUS_FLAG = "serviceStatus"; private static final String PREFERENCES_KEY = "com.google.android_quick_settings"; /** * Called when the tile is added to the Quick Settings. * @return TileService constant indicating tile state */ @Override public void onTileAdded() { Log.d("QS", "Tile added"); } /** * Called when this tile begins listening for events. */ @Override public void onStartListening() { Log.d("QS", "Start listening"); } /** * Called when the user taps the tile. */ @Override public void onClick() { Log.d("QS", "Tile tapped"); updateTile(); } /** * Called when this tile moves out of the listening state. */ @Override public void onStopListening() { Log.d("QS", "Stop Listening"); } /** * Called when the user removes this tile from Quick Settings. */ @Override public void onTileRemoved() { Log.d("QS", "Tile removed"); } // Changes the appearance of the tile. private void updateTile() { Tile tile = this.getQsTile(); boolean isActive = getServiceStatus(); Icon newIcon; String newLabel; int newState; // Change the tile to match the service status. if (isActive) { newLabel = String.format(Locale.US, "%s %s", getString(R.string.tile_label), getString(R.string.service_active)); newIcon = Icon.createWithResource(getApplicationContext(), ic_android_black_24dp); newState = Tile.STATE_ACTIVE; } else { newLabel = String.format(Locale.US, "%s %s", getString(R.string.tile_label), getString(R.string.service_inactive)); newIcon = Icon.createWithResource(getApplicationContext(), android.R.drawable.ic_dialog_alert); newState = Tile.STATE_INACTIVE; } // Change the UI of the tile. tile.setLabel(newLabel); tile.setIcon(newIcon); tile.setState(newState); // Need to call updateTile for the tile to pick up changes. tile.updateTile(); } // Access storage to see how many times the tile // has been tapped. private boolean getServiceStatus() { SharedPreferences prefs = getApplicationContext() .getSharedPreferences(PREFERENCES_KEY, MODE_PRIVATE); boolean isActive = prefs.getBoolean(SERVICE_STATUS_FLAG, false); isActive = !isActive; prefs.edit().putBoolean(SERVICE_STATUS_FLAG, isActive).apply(); return isActive; } }