Skip to content

Commit fa35cee

Browse files
committed
Configの比較を行うメソッドを追加
1 parent a428d80 commit fa35cee

1 file changed

Lines changed: 235 additions & 0 deletions

File tree

table.go

Lines changed: 235 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,3 +244,238 @@ func readTableTypeSpec(sr *io.SectionReader) ([]uint32, error) {
244244
}
245245
return flags, nil
246246
}
247+
248+
func (c *ResTableConfig) IsMoreSpecificThan(o *ResTableConfig) bool {
249+
// imsi
250+
if (c.Mcc != 0 && c.Mnc != 0) || (o.Mcc != 0 && o.Mnc != 0) {
251+
if c.Mcc != o.Mcc {
252+
if c.Mcc != 0 {
253+
return false
254+
}
255+
if o.Mnc != 0 {
256+
return true
257+
}
258+
}
259+
if c.Mnc != o.Mnc {
260+
if c.Mnc != 0 {
261+
return false
262+
}
263+
if o.Mnc != 0 {
264+
return true
265+
}
266+
}
267+
}
268+
269+
// locale
270+
if (c.Language[0] != 0 && c.Country[0] != 0) || (o.Language[0] != 0 && o.Country[0] != 0) {
271+
if c.Language[0] != o.Language[0] {
272+
if c.Language[0] != 0 {
273+
return false
274+
}
275+
if o.Language[0] != 0 {
276+
return true
277+
}
278+
}
279+
if c.Country[0] != o.Country[0] {
280+
if c.Country[0] != 0 {
281+
return false
282+
}
283+
if o.Country[0] != 0 {
284+
return true
285+
}
286+
}
287+
}
288+
289+
// orientation
290+
if c.Orientation != o.Orientation {
291+
if c.Orientation != 0 {
292+
return false
293+
}
294+
if o.Orientation != 0 {
295+
return true
296+
}
297+
}
298+
299+
// TODO: uimode
300+
301+
// touchscreen
302+
if c.Touchscreen != o.Touchscreen {
303+
if c.Touchscreen != 0 {
304+
return false
305+
}
306+
if o.Touchscreen != 0 {
307+
return true
308+
}
309+
}
310+
311+
// TODO: input
312+
313+
// screen size
314+
if (c.ScreenWidth != 0 && c.ScreenHeight != 0) || (o.ScreenWidth != 0 && o.ScreenHeight != 0) {
315+
if c.ScreenWidth != o.ScreenWidth {
316+
if c.ScreenWidth != 0 {
317+
return false
318+
}
319+
if o.ScreenWidth != 0 {
320+
return true
321+
}
322+
}
323+
if c.ScreenHeight != o.ScreenHeight {
324+
if c.ScreenHeight != 0 {
325+
return false
326+
}
327+
if o.ScreenHeight != 0 {
328+
return true
329+
}
330+
}
331+
}
332+
333+
//version
334+
if (c.SDKVersion != 0 && c.SDKVersion != 0) || (o.MinorVersion != 0 && o.MinorVersion != 0) {
335+
if c.SDKVersion != o.SDKVersion {
336+
if c.SDKVersion != 0 {
337+
return false
338+
}
339+
if o.SDKVersion != 0 {
340+
return true
341+
}
342+
}
343+
if c.MinorVersion != o.MinorVersion {
344+
if c.MinorVersion != 0 {
345+
return false
346+
}
347+
if o.MinorVersion != 0 {
348+
return true
349+
}
350+
}
351+
}
352+
353+
return false
354+
}
355+
356+
func (c *ResTableConfig) IsBetterThan(o *ResTableConfig, r *ResTableConfig) bool {
357+
if r == nil {
358+
return c.IsMoreSpecificThan(o)
359+
}
360+
361+
// imsi
362+
if (c.Mcc != 0 && c.Mnc != 0) || (o.Mcc != 0 && o.Mnc != 0) {
363+
if c.Mcc != o.Mcc && r.Mcc != 0 {
364+
return c.Mcc != 0
365+
}
366+
if c.Mnc != o.Mnc && r.Mnc != 0 {
367+
return c.Mnc != 0
368+
}
369+
}
370+
371+
// locale
372+
if (c.Language[0] != 0 && c.Country[0] != 0) || (o.Language[0] != 0 && o.Country[0] != 0) {
373+
if c.Language[0] != o.Language[0] && r.Language[0] != 0 {
374+
return c.Language[0] != 0
375+
}
376+
if c.Country[0] != o.Country[0] && r.Country[0] != 0 {
377+
return c.Country[0] != 0
378+
}
379+
}
380+
381+
// TODO: screen layout
382+
383+
// orientation
384+
if c.Orientation != o.Orientation && r.Orientation != 0 {
385+
return c.Orientation != 0
386+
}
387+
388+
// TODO: uimode
389+
390+
// TODO: screen type
391+
392+
// TODO: input
393+
394+
// screen size
395+
if (c.ScreenWidth != 0 && c.ScreenHeight != 0) || (o.ScreenWidth != 0 && o.ScreenHeight != 0) {
396+
if c.ScreenWidth != o.ScreenWidth && r.ScreenWidth != 0 {
397+
return c.ScreenWidth != 0
398+
}
399+
if c.ScreenHeight != o.ScreenHeight && r.ScreenHeight != 0 {
400+
return c.ScreenHeight != 0
401+
}
402+
}
403+
404+
// version
405+
if (c.SDKVersion != 0 && c.SDKVersion != 0) || (o.MinorVersion != 0 && o.MinorVersion != 0) {
406+
if c.SDKVersion != o.SDKVersion && r.SDKVersion != 0 {
407+
return c.SDKVersion > o.SDKVersion
408+
}
409+
if c.MinorVersion != o.MinorVersion {
410+
return c.MinorVersion != 0
411+
}
412+
}
413+
414+
return false
415+
}
416+
417+
func (c *ResTableConfig) Match(settings *ResTableConfig) bool {
418+
// match imsi
419+
if c.Mcc != 0 && c.Mnc != 0 {
420+
if settings.Mcc == 0 {
421+
if c.Mcc != 0 {
422+
return false
423+
}
424+
} else {
425+
if c.Mcc != 0 && c.Mcc != settings.Mcc {
426+
return false
427+
}
428+
}
429+
if settings.Mnc == 0 {
430+
if c.Mnc != 0 {
431+
return false
432+
}
433+
} else {
434+
if c.Mnc != 0 && c.Mnc != settings.Mnc {
435+
return false
436+
}
437+
}
438+
}
439+
440+
// match locale
441+
if c.Language[0] != 0 && c.Country[0] != 0 {
442+
if settings.Language[0] != 0 && c.Language[0] != 0 &&
443+
!(settings.Language[0] == c.Language[0] && settings.Language[1] == c.Language[1]) {
444+
return false
445+
}
446+
if settings.Country[0] != 0 && c.Country[0] != 0 &&
447+
!(settings.Country[0] == c.Country[0] && settings.Country[1] == c.Country[1]) {
448+
return false
449+
}
450+
}
451+
452+
// TODO: screen config
453+
// TODO: screen type
454+
// TODO: input
455+
456+
// screen size
457+
if c.ScreenWidth != 0 && c.ScreenHeight != 0 {
458+
if settings.ScreenWidth != 0 && c.ScreenWidth != 0 &&
459+
c.ScreenWidth != settings.ScreenWidth {
460+
return false
461+
}
462+
if settings.ScreenHeight != 0 && c.ScreenHeight != 0 &&
463+
c.ScreenHeight != settings.ScreenHeight {
464+
return false
465+
}
466+
}
467+
468+
// version
469+
if c.SDKVersion != 0 && c.MinorVersion != 0 {
470+
if settings.SDKVersion != 0 && c.SDKVersion != 0 &&
471+
c.SDKVersion > settings.SDKVersion {
472+
return false
473+
}
474+
if settings.MinorVersion != 0 && c.MinorVersion != 0 &&
475+
c.MinorVersion != settings.MinorVersion {
476+
return false
477+
}
478+
}
479+
480+
return true
481+
}

0 commit comments

Comments
 (0)