/* * Copyright (C) 2015-2016 Willi Ye <williye97@gmail.com> * * This file is part of Kernel Adiutor. * * Kernel Adiutor is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Kernel Adiutor is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Kernel Adiutor. If not, see <http://www.gnu.org/licenses/>. * */ package com.grarak.kerneladiutor.services.profile; import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.util.Log; import com.grarak.kerneladiutor.R; import com.grarak.kerneladiutor.database.tools.profiles.Profiles; import com.grarak.kerneladiutor.services.boot.Service; import com.grarak.kerneladiutor.utils.Prefs; import com.grarak.kerneladiutor.utils.Utils; import com.grarak.kerneladiutor.utils.kernel.cpu.CPUFreq; import com.grarak.kerneladiutor.utils.root.RootUtils; import java.util.ArrayList; import java.util.List; import cyanogenmod.app.CMStatusBarManager; import cyanogenmod.app.CustomTile; /** * Created by willi on 21.07.16. */ public class Tile extends BroadcastReceiver { private static final String TAG = Tile.class.getSimpleName(); private static final String NAME = "name"; private static final String COMMANDS = "commands"; private static final String ACTION_TOGGLE_STATE = "com.grarak.kerneladiutor.action.ACTION_TOGGLE_STATE"; @Override public void onReceive(Context context, Intent intent) { if (ACTION_TOGGLE_STATE.equals(intent.getAction())) { String name = intent.getStringExtra(NAME); if (name != null) Log.i(TAG, name); String[] commands = intent.getStringArrayExtra(COMMANDS); if (commands != null) { List<String> adjustedCommands = new ArrayList<>(); RootUtils.SU su = new RootUtils.SU(true, TAG); for (String command : commands) { synchronized (this) { CPUFreq.ApplyCpu applyCpu; if (command.startsWith("#") && command.contains("%d") && (applyCpu = new CPUFreq.ApplyCpu(command.substring(1))).toString() != null) { adjustedCommands.addAll(Service.getApplyCpu(applyCpu, su)); } else { adjustedCommands.add(command); } } } for (String command : adjustedCommands) { su.runCommand(command); } } } } public static void publishProfileTile(List<Profiles.ProfileItem> profiles, Context context) { if (!Utils.hasCMSDK()) return; if (profiles == null || profiles.size() < 1 || !Prefs.getBoolean("profiletile", true, context)) { try { CMStatusBarManager.getInstance(context).removeTile(0); } catch (RuntimeException ignored) { } return; } Intent intent = new Intent(); intent.setAction(ACTION_TOGGLE_STATE); ArrayList<CustomTile.ExpandedListItem> expandedListItems = new ArrayList<>(); for (int i = 0; i < profiles.size(); i++) { CustomTile.ExpandedListItem expandedListItem = new CustomTile.ExpandedListItem(); expandedListItem.setExpandedListItemTitle(profiles.get(i).getName()); expandedListItem.setExpandedListItemDrawable(R.drawable.ic_launcher_preview); List<String> commands = new ArrayList<>(); for (Profiles.ProfileItem.CommandItem commandItem : profiles.get(i).getCommands()) { commands.add(commandItem.getCommand()); } intent.putExtra(NAME, profiles.get(i).getName()); intent.putExtra(COMMANDS, commands.toArray(new String[commands.size()])); PendingIntent pendingIntent = PendingIntent.getBroadcast(context, i, intent, 0); expandedListItem.setExpandedListItemOnClickIntent(pendingIntent); expandedListItems.add(expandedListItem); } CustomTile.ListExpandedStyle listExpandedStyle = new CustomTile.ListExpandedStyle(); listExpandedStyle.setListItems(expandedListItems); CustomTile mCustomTile = new CustomTile.Builder(context) .setExpandedStyle(listExpandedStyle) .setLabel(R.string.profile) .setIcon(R.drawable.ic_launcher_preview) .build(); try { CMStatusBarManager.getInstance(context).publishTile(0, mCustomTile); } catch (Exception e) { Prefs.saveBoolean("profiletile", false, context); } } }