| /* |
| * Copyright (C) 2016 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.egg.neko; |
| |
| import android.content.Intent; |
| import android.service.quicksettings.Tile; |
| import android.service.quicksettings.TileService; |
| import android.util.Log; |
| |
| import com.android.egg.neko.PrefState.PrefsListener; |
| import com.android.internal.logging.MetricsLogger; |
| |
| public class NekoTile extends TileService implements PrefsListener { |
| |
| private static final String TAG = "NekoTile"; |
| |
| private PrefState mPrefs; |
| |
| @Override |
| public void onCreate() { |
| super.onCreate(); |
| mPrefs = new PrefState(this); |
| } |
| |
| @Override |
| public void onStartListening() { |
| super.onStartListening(); |
| mPrefs.setListener(this); |
| updateState(); |
| } |
| |
| @Override |
| public void onStopListening() { |
| super.onStopListening(); |
| mPrefs.setListener(null); |
| } |
| |
| @Override |
| public void onTileAdded() { |
| super.onTileAdded(); |
| MetricsLogger.count(this, "egg_neko_tile_added", 1); |
| } |
| |
| @Override |
| public void onTileRemoved() { |
| super.onTileRemoved(); |
| MetricsLogger.count(this, "egg_neko_tile_removed", 1); |
| } |
| |
| @Override |
| public void onPrefsChanged() { |
| updateState(); |
| } |
| |
| private void updateState() { |
| Tile tile = getQsTile(); |
| int foodState = mPrefs.getFoodState(); |
| Food food = new Food(foodState); |
| if (foodState != 0) { |
| NekoService.registerJobIfNeeded(this, food.getInterval(this)); |
| } |
| tile.setIcon(food.getIcon(this)); |
| tile.setLabel(food.getName(this)); |
| tile.setState(foodState != 0 ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE); |
| tile.updateTile(); |
| } |
| |
| @Override |
| public void onClick() { |
| if (mPrefs.getFoodState() != 0) { |
| // there's already food loaded, let's empty it |
| MetricsLogger.count(this, "egg_neko_empty_food", 1); |
| mPrefs.setFoodState(0); |
| NekoService.cancelJob(this); |
| } else { |
| // time to feed the cats |
| if (isLocked()) { |
| if (isSecure()) { |
| Log.d(TAG, "startActivityAndCollapse"); |
| Intent intent = new Intent(this, NekoLockedActivity.class); |
| intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); |
| startActivityAndCollapse(intent); |
| } else { |
| unlockAndRun(new Runnable() { |
| @Override |
| public void run() { |
| showNekoDialog(); |
| } |
| }); |
| } |
| } else { |
| showNekoDialog(); |
| } |
| } |
| } |
| |
| private void showNekoDialog() { |
| Log.d(TAG, "showNekoDialog"); |
| MetricsLogger.count(this, "egg_neko_select_food", 1); |
| showDialog(new NekoDialog(this)); |
| } |
| } |