18457ad89a851323288561d85ac86c6c26666c904Jason Monk/* 28457ad89a851323288561d85ac86c6c26666c904Jason Monk * Copyright (C) 2016 The Android Open Source Project 38457ad89a851323288561d85ac86c6c26666c904Jason Monk * 48457ad89a851323288561d85ac86c6c26666c904Jason Monk * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file 58457ad89a851323288561d85ac86c6c26666c904Jason Monk * except in compliance with the License. You may obtain a copy of the License at 68457ad89a851323288561d85ac86c6c26666c904Jason Monk * 78457ad89a851323288561d85ac86c6c26666c904Jason Monk * http://www.apache.org/licenses/LICENSE-2.0 88457ad89a851323288561d85ac86c6c26666c904Jason Monk * 98457ad89a851323288561d85ac86c6c26666c904Jason Monk * Unless required by applicable law or agreed to in writing, software distributed under the 108457ad89a851323288561d85ac86c6c26666c904Jason Monk * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 118457ad89a851323288561d85ac86c6c26666c904Jason Monk * KIND, either express or implied. See the License for the specific language governing 128457ad89a851323288561d85ac86c6c26666c904Jason Monk * permissions and limitations under the License. 138457ad89a851323288561d85ac86c6c26666c904Jason Monk */ 148457ad89a851323288561d85ac86c6c26666c904Jason Monk 158457ad89a851323288561d85ac86c6c26666c904Jason Monkpackage com.android.systemui.tuner; 168457ad89a851323288561d85ac86c6c26666c904Jason Monk 178457ad89a851323288561d85ac86c6c26666c904Jason Monkimport android.app.AlertDialog; 188457ad89a851323288561d85ac86c6c26666c904Jason Monkimport android.content.Context; 198457ad89a851323288561d85ac86c6c26666c904Jason Monkimport android.content.DialogInterface; 208457ad89a851323288561d85ac86c6c26666c904Jason Monkimport android.content.Intent; 218457ad89a851323288561d85ac86c6c26666c904Jason Monkimport android.view.KeyEvent; 228457ad89a851323288561d85ac86c6c26666c904Jason Monk 23c0d7058b14c24cd07912f5629c26b39b7b4673d5Winsonimport com.android.systemui.R; 24c0d7058b14c24cd07912f5629c26b39b7b4673d5Winson 258457ad89a851323288561d85ac86c6c26666c904Jason Monkimport java.lang.reflect.Field; 268457ad89a851323288561d85ac86c6c26666c904Jason Monkimport java.lang.reflect.Modifier; 278457ad89a851323288561d85ac86c6c26666c904Jason Monkimport java.util.ArrayList; 288457ad89a851323288561d85ac86c6c26666c904Jason Monk 298457ad89a851323288561d85ac86c6c26666c904Jason Monkpublic class KeycodeSelectionHelper { 308457ad89a851323288561d85ac86c6c26666c904Jason Monk 318457ad89a851323288561d85ac86c6c26666c904Jason Monk private static final ArrayList<String> mKeycodeStrings = new ArrayList<>(); 328457ad89a851323288561d85ac86c6c26666c904Jason Monk private static final ArrayList<Integer> mKeycodes = new ArrayList<>(); 338457ad89a851323288561d85ac86c6c26666c904Jason Monk 348457ad89a851323288561d85ac86c6c26666c904Jason Monk private static final String KEYCODE_STRING = "KEYCODE_"; 358457ad89a851323288561d85ac86c6c26666c904Jason Monk 368457ad89a851323288561d85ac86c6c26666c904Jason Monk static { 378457ad89a851323288561d85ac86c6c26666c904Jason Monk Class<KeyEvent> cls = KeyEvent.class; 388457ad89a851323288561d85ac86c6c26666c904Jason Monk for (Field field : cls.getDeclaredFields()) { 398457ad89a851323288561d85ac86c6c26666c904Jason Monk if (Modifier.isStatic(field.getModifiers()) 408457ad89a851323288561d85ac86c6c26666c904Jason Monk && field.getName().startsWith(KEYCODE_STRING) 418457ad89a851323288561d85ac86c6c26666c904Jason Monk && field.getType().equals(int.class)) { 428457ad89a851323288561d85ac86c6c26666c904Jason Monk try { 438457ad89a851323288561d85ac86c6c26666c904Jason Monk mKeycodeStrings.add(formatString(field.getName())); 448457ad89a851323288561d85ac86c6c26666c904Jason Monk mKeycodes.add((Integer) field.get(null)); 458457ad89a851323288561d85ac86c6c26666c904Jason Monk } catch (IllegalAccessException e) { 468457ad89a851323288561d85ac86c6c26666c904Jason Monk } 478457ad89a851323288561d85ac86c6c26666c904Jason Monk } 488457ad89a851323288561d85ac86c6c26666c904Jason Monk } 498457ad89a851323288561d85ac86c6c26666c904Jason Monk } 508457ad89a851323288561d85ac86c6c26666c904Jason Monk 518457ad89a851323288561d85ac86c6c26666c904Jason Monk // Force the string into something somewhat readable. 528457ad89a851323288561d85ac86c6c26666c904Jason Monk private static String formatString(String name) { 538457ad89a851323288561d85ac86c6c26666c904Jason Monk StringBuilder str = new StringBuilder(name.replace(KEYCODE_STRING, "").replace("_", " ") 548457ad89a851323288561d85ac86c6c26666c904Jason Monk .toLowerCase()); 558457ad89a851323288561d85ac86c6c26666c904Jason Monk for (int i = 0; i < str.length(); i++) { 568457ad89a851323288561d85ac86c6c26666c904Jason Monk if (i == 0 || str.charAt(i - 1) == ' ') { 578457ad89a851323288561d85ac86c6c26666c904Jason Monk str.setCharAt(i, Character.toUpperCase(str.charAt(i))); 588457ad89a851323288561d85ac86c6c26666c904Jason Monk } 598457ad89a851323288561d85ac86c6c26666c904Jason Monk } 608457ad89a851323288561d85ac86c6c26666c904Jason Monk return str.toString(); 618457ad89a851323288561d85ac86c6c26666c904Jason Monk } 628457ad89a851323288561d85ac86c6c26666c904Jason Monk 638457ad89a851323288561d85ac86c6c26666c904Jason Monk public static void showKeycodeSelect(Context context, final OnSelectionComplete listener) { 648457ad89a851323288561d85ac86c6c26666c904Jason Monk new AlertDialog.Builder(context) 658457ad89a851323288561d85ac86c6c26666c904Jason Monk .setTitle(R.string.select_keycode) 668457ad89a851323288561d85ac86c6c26666c904Jason Monk .setItems(mKeycodeStrings.toArray(new String[0]), 678457ad89a851323288561d85ac86c6c26666c904Jason Monk new DialogInterface.OnClickListener() { 688457ad89a851323288561d85ac86c6c26666c904Jason Monk @Override 698457ad89a851323288561d85ac86c6c26666c904Jason Monk public void onClick(DialogInterface dialog, int which) { 708457ad89a851323288561d85ac86c6c26666c904Jason Monk listener.onSelectionComplete(mKeycodes.get(which)); 718457ad89a851323288561d85ac86c6c26666c904Jason Monk } 728457ad89a851323288561d85ac86c6c26666c904Jason Monk }).show(); 738457ad89a851323288561d85ac86c6c26666c904Jason Monk } 748457ad89a851323288561d85ac86c6c26666c904Jason Monk 758457ad89a851323288561d85ac86c6c26666c904Jason Monk public static Intent getSelectImageIntent() { 768457ad89a851323288561d85ac86c6c26666c904Jason Monk return new Intent(Intent.ACTION_OPEN_DOCUMENT).addCategory(Intent.CATEGORY_OPENABLE) 778457ad89a851323288561d85ac86c6c26666c904Jason Monk .setType("image/*"); 788457ad89a851323288561d85ac86c6c26666c904Jason Monk } 798457ad89a851323288561d85ac86c6c26666c904Jason Monk 808457ad89a851323288561d85ac86c6c26666c904Jason Monk public interface OnSelectionComplete { 818457ad89a851323288561d85ac86c6c26666c904Jason Monk void onSelectionComplete(int code); 828457ad89a851323288561d85ac86c6c26666c904Jason Monk } 838457ad89a851323288561d85ac86c6c26666c904Jason Monk} 84