127a9fcc61823f919cee773df563b49ee11004f3bDan Sandler/* 227a9fcc61823f919cee773df563b49ee11004f3bDan Sandler * Copyright (C) 2016 The Android Open Source Project 327a9fcc61823f919cee773df563b49ee11004f3bDan Sandler * 427a9fcc61823f919cee773df563b49ee11004f3bDan Sandler * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file 527a9fcc61823f919cee773df563b49ee11004f3bDan Sandler * except in compliance with the License. You may obtain a copy of the License at 627a9fcc61823f919cee773df563b49ee11004f3bDan Sandler * 727a9fcc61823f919cee773df563b49ee11004f3bDan Sandler * http://www.apache.org/licenses/LICENSE-2.0 827a9fcc61823f919cee773df563b49ee11004f3bDan Sandler * 927a9fcc61823f919cee773df563b49ee11004f3bDan Sandler * Unless required by applicable law or agreed to in writing, software distributed under the 1027a9fcc61823f919cee773df563b49ee11004f3bDan Sandler * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 1127a9fcc61823f919cee773df563b49ee11004f3bDan Sandler * KIND, either express or implied. See the License for the specific language governing 1227a9fcc61823f919cee773df563b49ee11004f3bDan Sandler * permissions and limitations under the License. 1327a9fcc61823f919cee773df563b49ee11004f3bDan Sandler */ 1427a9fcc61823f919cee773df563b49ee11004f3bDan Sandler 1527a9fcc61823f919cee773df563b49ee11004f3bDan Sandlerpackage com.android.egg.neko; 1627a9fcc61823f919cee773df563b49ee11004f3bDan Sandler 1727a9fcc61823f919cee773df563b49ee11004f3bDan Sandlerimport android.content.Intent; 1827a9fcc61823f919cee773df563b49ee11004f3bDan Sandlerimport android.service.quicksettings.Tile; 1927a9fcc61823f919cee773df563b49ee11004f3bDan Sandlerimport android.service.quicksettings.TileService; 2027a9fcc61823f919cee773df563b49ee11004f3bDan Sandlerimport android.util.Log; 2127a9fcc61823f919cee773df563b49ee11004f3bDan Sandler 2227a9fcc61823f919cee773df563b49ee11004f3bDan Sandlerimport com.android.egg.neko.PrefState.PrefsListener; 23a801d40531b71f8c75bb03bb8fec429f503e391eChris Wrenimport com.android.internal.logging.MetricsLogger; 2427a9fcc61823f919cee773df563b49ee11004f3bDan Sandler 2527a9fcc61823f919cee773df563b49ee11004f3bDan Sandlerpublic class NekoTile extends TileService implements PrefsListener { 2627a9fcc61823f919cee773df563b49ee11004f3bDan Sandler 2727a9fcc61823f919cee773df563b49ee11004f3bDan Sandler private static final String TAG = "NekoTile"; 2827a9fcc61823f919cee773df563b49ee11004f3bDan Sandler 2927a9fcc61823f919cee773df563b49ee11004f3bDan Sandler private PrefState mPrefs; 3027a9fcc61823f919cee773df563b49ee11004f3bDan Sandler 3127a9fcc61823f919cee773df563b49ee11004f3bDan Sandler @Override 3227a9fcc61823f919cee773df563b49ee11004f3bDan Sandler public void onCreate() { 3327a9fcc61823f919cee773df563b49ee11004f3bDan Sandler super.onCreate(); 3427a9fcc61823f919cee773df563b49ee11004f3bDan Sandler mPrefs = new PrefState(this); 3527a9fcc61823f919cee773df563b49ee11004f3bDan Sandler } 3627a9fcc61823f919cee773df563b49ee11004f3bDan Sandler 3727a9fcc61823f919cee773df563b49ee11004f3bDan Sandler @Override 3827a9fcc61823f919cee773df563b49ee11004f3bDan Sandler public void onStartListening() { 3927a9fcc61823f919cee773df563b49ee11004f3bDan Sandler super.onStartListening(); 4027a9fcc61823f919cee773df563b49ee11004f3bDan Sandler mPrefs.setListener(this); 4127a9fcc61823f919cee773df563b49ee11004f3bDan Sandler updateState(); 4227a9fcc61823f919cee773df563b49ee11004f3bDan Sandler } 4327a9fcc61823f919cee773df563b49ee11004f3bDan Sandler 4427a9fcc61823f919cee773df563b49ee11004f3bDan Sandler @Override 4527a9fcc61823f919cee773df563b49ee11004f3bDan Sandler public void onStopListening() { 4627a9fcc61823f919cee773df563b49ee11004f3bDan Sandler super.onStopListening(); 4727a9fcc61823f919cee773df563b49ee11004f3bDan Sandler mPrefs.setListener(null); 4827a9fcc61823f919cee773df563b49ee11004f3bDan Sandler } 4927a9fcc61823f919cee773df563b49ee11004f3bDan Sandler 5027a9fcc61823f919cee773df563b49ee11004f3bDan Sandler @Override 51a801d40531b71f8c75bb03bb8fec429f503e391eChris Wren public void onTileAdded() { 52a801d40531b71f8c75bb03bb8fec429f503e391eChris Wren super.onTileAdded(); 53a801d40531b71f8c75bb03bb8fec429f503e391eChris Wren MetricsLogger.count(this, "egg_neko_tile_added", 1); 54a801d40531b71f8c75bb03bb8fec429f503e391eChris Wren } 55a801d40531b71f8c75bb03bb8fec429f503e391eChris Wren 56a801d40531b71f8c75bb03bb8fec429f503e391eChris Wren @Override 57a801d40531b71f8c75bb03bb8fec429f503e391eChris Wren public void onTileRemoved() { 58a801d40531b71f8c75bb03bb8fec429f503e391eChris Wren super.onTileRemoved(); 59a801d40531b71f8c75bb03bb8fec429f503e391eChris Wren MetricsLogger.count(this, "egg_neko_tile_removed", 1); 60a801d40531b71f8c75bb03bb8fec429f503e391eChris Wren } 61a801d40531b71f8c75bb03bb8fec429f503e391eChris Wren 62a801d40531b71f8c75bb03bb8fec429f503e391eChris Wren @Override 6327a9fcc61823f919cee773df563b49ee11004f3bDan Sandler public void onPrefsChanged() { 6427a9fcc61823f919cee773df563b49ee11004f3bDan Sandler updateState(); 6527a9fcc61823f919cee773df563b49ee11004f3bDan Sandler } 6627a9fcc61823f919cee773df563b49ee11004f3bDan Sandler 6727a9fcc61823f919cee773df563b49ee11004f3bDan Sandler private void updateState() { 6827a9fcc61823f919cee773df563b49ee11004f3bDan Sandler Tile tile = getQsTile(); 6927a9fcc61823f919cee773df563b49ee11004f3bDan Sandler int foodState = mPrefs.getFoodState(); 7027a9fcc61823f919cee773df563b49ee11004f3bDan Sandler Food food = new Food(foodState); 71946c2b89396554b2618ea5bbaff4652f75768016Jason Monk if (foodState != 0) { 72946c2b89396554b2618ea5bbaff4652f75768016Jason Monk NekoService.registerJobIfNeeded(this, food.getInterval(this)); 73946c2b89396554b2618ea5bbaff4652f75768016Jason Monk } 7427a9fcc61823f919cee773df563b49ee11004f3bDan Sandler tile.setIcon(food.getIcon(this)); 7527a9fcc61823f919cee773df563b49ee11004f3bDan Sandler tile.setLabel(food.getName(this)); 7627a9fcc61823f919cee773df563b49ee11004f3bDan Sandler tile.setState(foodState != 0 ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE); 7727a9fcc61823f919cee773df563b49ee11004f3bDan Sandler tile.updateTile(); 7827a9fcc61823f919cee773df563b49ee11004f3bDan Sandler } 7927a9fcc61823f919cee773df563b49ee11004f3bDan Sandler 8027a9fcc61823f919cee773df563b49ee11004f3bDan Sandler @Override 8127a9fcc61823f919cee773df563b49ee11004f3bDan Sandler public void onClick() { 8227a9fcc61823f919cee773df563b49ee11004f3bDan Sandler if (mPrefs.getFoodState() != 0) { 8327a9fcc61823f919cee773df563b49ee11004f3bDan Sandler // there's already food loaded, let's empty it 84a801d40531b71f8c75bb03bb8fec429f503e391eChris Wren MetricsLogger.count(this, "egg_neko_empty_food", 1); 8527a9fcc61823f919cee773df563b49ee11004f3bDan Sandler mPrefs.setFoodState(0); 8627a9fcc61823f919cee773df563b49ee11004f3bDan Sandler NekoService.cancelJob(this); 8727a9fcc61823f919cee773df563b49ee11004f3bDan Sandler } else { 8827a9fcc61823f919cee773df563b49ee11004f3bDan Sandler // time to feed the cats 8927a9fcc61823f919cee773df563b49ee11004f3bDan Sandler if (isLocked()) { 9027a9fcc61823f919cee773df563b49ee11004f3bDan Sandler if (isSecure()) { 9127a9fcc61823f919cee773df563b49ee11004f3bDan Sandler Log.d(TAG, "startActivityAndCollapse"); 9227a9fcc61823f919cee773df563b49ee11004f3bDan Sandler Intent intent = new Intent(this, NekoLockedActivity.class); 9327a9fcc61823f919cee773df563b49ee11004f3bDan Sandler intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 9427a9fcc61823f919cee773df563b49ee11004f3bDan Sandler startActivityAndCollapse(intent); 9527a9fcc61823f919cee773df563b49ee11004f3bDan Sandler } else { 9627a9fcc61823f919cee773df563b49ee11004f3bDan Sandler unlockAndRun(new Runnable() { 9727a9fcc61823f919cee773df563b49ee11004f3bDan Sandler @Override 9827a9fcc61823f919cee773df563b49ee11004f3bDan Sandler public void run() { 9927a9fcc61823f919cee773df563b49ee11004f3bDan Sandler showNekoDialog(); 10027a9fcc61823f919cee773df563b49ee11004f3bDan Sandler } 10127a9fcc61823f919cee773df563b49ee11004f3bDan Sandler }); 10227a9fcc61823f919cee773df563b49ee11004f3bDan Sandler } 10327a9fcc61823f919cee773df563b49ee11004f3bDan Sandler } else { 10427a9fcc61823f919cee773df563b49ee11004f3bDan Sandler showNekoDialog(); 10527a9fcc61823f919cee773df563b49ee11004f3bDan Sandler } 10627a9fcc61823f919cee773df563b49ee11004f3bDan Sandler } 10727a9fcc61823f919cee773df563b49ee11004f3bDan Sandler } 10827a9fcc61823f919cee773df563b49ee11004f3bDan Sandler 10927a9fcc61823f919cee773df563b49ee11004f3bDan Sandler private void showNekoDialog() { 11027a9fcc61823f919cee773df563b49ee11004f3bDan Sandler Log.d(TAG, "showNekoDialog"); 111a801d40531b71f8c75bb03bb8fec429f503e391eChris Wren MetricsLogger.count(this, "egg_neko_select_food", 1); 11227a9fcc61823f919cee773df563b49ee11004f3bDan Sandler showDialog(new NekoDialog(this)); 11327a9fcc61823f919cee773df563b49ee11004f3bDan Sandler } 11427a9fcc61823f919cee773df563b49ee11004f3bDan Sandler} 115