우선
에러 로그를 보면
page1.xml: com.android.layoutlib.bridge.MockView cannot be cast to android.view.ViewGroup
java.lang.ClassCastException: com.android.layoutlib.bridge.MockView cannot be cast to android.view.ViewGroup
이하 좌르르륵 나오고
소스는
package com.lu2300.optimizer;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.ListPreference;
import android.preference.PreferenceActivity;
import android.widget.Toast;
public class Page1 extends PreferenceActivity implements OnSharedPreferenceChangeListener {
/** Called when the activity is first created. */
private ListPreference mHomeFunc;
private CheckBoxPreference mHomeWake;
private ListPreference mSearchFunc;
private CheckBoxPreference mSearchWake;
ArrayList<String> hardArr = new ArrayList<String>();
boolean bReadFile[] = {false, false};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Load the preferences from an XML resource
addPreferencesFromResource(R.layout.page1);
mHomeFunc = (ListPreference)getPreferenceScreen().findPreference("HomeFunc");
mHomeWake = (CheckBoxPreference)getPreferenceScreen().findPreference("HomeWake");
mSearchFunc = (ListPreference)getPreferenceScreen().findPreference("searchFunc");
mSearchWake = (CheckBoxPreference)getPreferenceScreen().findPreference("searchWake");
int isTruth = Truth.findTruth();
if(isTruth == 0){
addMsg("시스템 접근 권한이 없어서 적용을 할 수 없습니다.\n설정값 보기만 가능합니다.");
}
// 1. 외장 하드 키 설정값을 시스템에서 불러옵니다.
{
// 1.1 파일 불러오기
FileInputStream fis;
BufferedReader bufferReader = null;
try {
File path = new File("/system/usr/keylayout/ku3700_keypad.kl");
fis = new FileInputStream(path);
bufferReader = new BufferedReader(new InputStreamReader(fis));
String strLine = null;
while( (strLine = bufferReader.readLine()) != null)
hardArr.add(strLine + "\n");
fis.close();
bReadFile[0] = true;
} catch (IOException e) {
bReadFile[0] = false;
}
// 1.2 구문 해석해서 앱에 적용하기
if(bReadFile[0] == true){
for(int i = 0; i < hardArr.size();i++){
// 각 문자열에서 토큰으로 분리하자
String originStr = hardArr.get(i);
StringTokenizer st = new StringTokenizer(originStr, " \t\n");
String first = null;
String second = null;
String third = null;
String fourth = null;
if(st.hasMoreTokens())
first = st.nextToken();
else
continue;
if(first.toLowerCase().equals("key")){ // 첫번째 토큰
if(st.hasMoreTokens()){
second = st.nextToken(); // 두번째 토큰
if(second.equals("102")){ // home 버튼
if(st.hasMoreTokens()){
third = st.nextToken(); // 세번째 토큰
mHomeFunc.setValue(third); // 특정 기능
if(st.hasMoreTokens()){ // WAKE
fourth = st.nextToken();
if(fourth.toUpperCase().equals("WAKE_DROPPED") || fourth.toUpperCase().equals("WAKE") ){
mHomeWake.setChecked(true);
}else{
mHomeWake.setChecked(false);
}
}else{
mHomeWake.setChecked(false);
}
}else{
addMsg("잘못된 키 설정입니다.\n 설정된 값이 없습니다.");
}
}else if(second.equals("217")){ // search 버튼
if(st.hasMoreTokens()){
third = st.nextToken();
mSearchFunc.setValue(third);
if(st.hasMoreTokens()){ // WAKE
fourth = st.nextToken();
if(fourth.toUpperCase().equals("WAKE_DROPPED") || fourth.toUpperCase().equals("WAKE") ){
mSearchWake.setChecked(true);
}else{
mSearchWake.setChecked(false);
}
}else{
mSearchWake.setChecked(false);
}
}else{
addMsg("잘못된 키 설정입니다.\n 설정된 값이 없습니다.");
}
}else if(second.equals("231")){ // CALL 버튼
// CALL 버튼은 설정 없음
}
}else{
addMsg("알 수 없는 키 설정이 있습니다.\n" + hardArr.get(i) + "\n패치시 이 라인은 삭제됩니다."); // 첫번째가 키인데 없다면? 어헝헝헝
}
}
}
}
}
if(bReadFile[0] == true && bReadFile[0] == true){
// addMsg("시스템 -> 앱 : 설정값을 읽어왔습니다.");
}else{
addMsg("시스템 -> 앱 : 설정값 읽기 실패했습니다.\n앱에서 설정값을 읽어옵니다.");
}
}
@Override
protected void onResume() {
super.onResume();
// Setup the initial values
mHomeFunc.setSummary("저장 값 : " + getPreferenceScreen().getSharedPreferences().getString("homeFunc", ""));
mSearchFunc.setSummary("저장 값 : " + getPreferenceScreen().getSharedPreferences().getString("searchFunc", ""));
// Set up a listener whenever a key changes
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}
@Override
protected void onPause() {
super.onPause();
getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
String key) {
if (key.equals("homeFunc")) {
mHomeFunc.setSummary("저장 값 : " + sharedPreferences.getString("homeFunc", ""));
}else if (key.equals("searchFunc")) {
mSearchFunc.setSummary("저장 값 : " + sharedPreferences.getString("searchFunc", ""));
}
}
private void addMsg(String str){
Toast.makeText(this, str, Toast.LENGTH_SHORT).show();
}
}