118 |
118 |
|
119 |
119 |
public void savePreferences(SharedPreferences.Editor editor)
|
120 |
120 |
{
|
121 |
|
for(int i=0; i<NUM_OBJECTS; i++)
|
122 |
|
for(int j=0; j<MAX_SIZE; j++)
|
123 |
|
for(int k=0; k<MAX_SCRAMBLE; k++)
|
|
121 |
StringBuilder builder = new StringBuilder();
|
|
122 |
RubikObjectList list;
|
|
123 |
int[] sizes;
|
|
124 |
int length;
|
|
125 |
|
|
126 |
for(int scramble=0; scramble<MAX_SCRAMBLE; scramble++)
|
|
127 |
{
|
|
128 |
builder.setLength(0);
|
|
129 |
|
|
130 |
for(int object=0; object<NUM_OBJECTS; object++)
|
|
131 |
{
|
|
132 |
list = RubikObjectList.getObject(object);
|
|
133 |
sizes = list.getSizes();
|
|
134 |
length = sizes.length;
|
|
135 |
|
|
136 |
for(int size=0; size<length; size++)
|
124 |
137 |
{
|
125 |
|
if( mRecords[i][j][k]!=NO_RECORD)
|
126 |
|
{
|
127 |
|
editor.putLong("record_"+i+"_"+j+"_"+k, mRecords[i][j][k]);
|
128 |
|
}
|
|
138 |
builder.append(list.name());
|
|
139 |
builder.append("_");
|
|
140 |
builder.append(sizes[size]);
|
|
141 |
builder.append("=");
|
|
142 |
builder.append(mRecords[object][size][scramble]);
|
|
143 |
builder.append(" ");
|
129 |
144 |
}
|
|
145 |
}
|
|
146 |
|
|
147 |
editor.putString("record"+scramble, builder.toString());
|
|
148 |
}
|
130 |
149 |
}
|
131 |
150 |
|
132 |
151 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
133 |
152 |
|
134 |
153 |
public void restorePreferences(SharedPreferences preferences)
|
135 |
154 |
{
|
136 |
|
for(int i=0; i<NUM_OBJECTS; i++)
|
137 |
|
for(int j=0; j<MAX_SIZE; j++)
|
138 |
|
for(int k=0; k<MAX_SCRAMBLE; k++)
|
|
155 |
String recordStr, subStr, nameStr, sizeStr, timeStr;
|
|
156 |
int start, end, equals, underscore;
|
|
157 |
int object, size, time;
|
|
158 |
|
|
159 |
for(int scramble=0; scramble<MAX_SCRAMBLE; scramble++)
|
|
160 |
{
|
|
161 |
start = end = 0;
|
|
162 |
recordStr = preferences.getString("record"+scramble, "");
|
|
163 |
|
|
164 |
//android.util.Log.e("solving", scramble+" record string: "+recordStr);
|
|
165 |
|
|
166 |
while( end!=-1 )
|
|
167 |
{
|
|
168 |
end = recordStr.indexOf(" ", start);
|
|
169 |
|
|
170 |
if( end==-1 ) subStr = recordStr.substring(start);
|
|
171 |
else subStr = recordStr.substring(start,end);
|
|
172 |
|
|
173 |
start = end+1;
|
|
174 |
|
|
175 |
underscore = subStr.indexOf("_");
|
|
176 |
equals = subStr.indexOf("=");
|
|
177 |
|
|
178 |
if( underscore>=0 && equals>=0 )
|
139 |
179 |
{
|
140 |
|
mRecords[i][j][k] = preferences.getLong("record_"+i+"_"+j+"_"+k, NO_RECORD );
|
|
180 |
nameStr = subStr.substring(0,underscore);
|
|
181 |
sizeStr = subStr.substring(underscore+1, equals);
|
|
182 |
timeStr = subStr.substring(equals+1);
|
|
183 |
|
|
184 |
object = RubikObjectList.getOrdinal(nameStr);
|
|
185 |
size = RubikObjectList.getSize(object,Integer.parseInt(sizeStr));
|
|
186 |
time = Integer.parseInt(timeStr);
|
|
187 |
|
|
188 |
//android.util.Log.e("solving", "parsed: nameStr="+nameStr+" sizeStr="+sizeStr+" timeStr="+timeStr);
|
|
189 |
mRecords[object][size][scramble] = time;
|
141 |
190 |
}
|
|
191 |
}
|
|
192 |
}
|
142 |
193 |
}
|
143 |
194 |
|
144 |
195 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
... | ... | |
191 |
242 |
int scramble= play.getPicker();
|
192 |
243 |
int maxsize = RubikObjectList.getObject(object).getSizes().length;
|
193 |
244 |
|
194 |
|
if( object>=0 && object< NUM_OBJECTS && size>=0 && size<maxsize && scramble>=0 && scramble<MAX_SCRAMBLE )
|
|
245 |
if( object>=0 && object< NUM_OBJECTS && size>=0 && size<maxsize && scramble>=1 && scramble<=MAX_SCRAMBLE )
|
195 |
246 |
{
|
196 |
|
if( mRecords[object][size][scramble]> timeTaken )
|
|
247 |
if( mRecords[object][size][scramble-1]> timeTaken )
|
197 |
248 |
{
|
198 |
|
mRecords[object][size][scramble] = timeTaken;
|
|
249 |
mRecords[object][size][scramble-1] = timeTaken;
|
199 |
250 |
android.util.Log.e("solv","new record!");
|
200 |
251 |
}
|
201 |
252 |
}
|
Make the records independent of arrangement of Objects and their sizes in RubikObjectList.