Skip to content
This repository has been archived by the owner on Nov 3, 2021. It is now read-only.

Commit

Permalink
Merge pull request #25647 from RudyLu/build/Bug998106-filter_keyboard…
Browse files Browse the repository at this point in the history
…_default_layout

Bug 998106 - [B2G][Gaia][FTE][Keyboard] Selecting languages other than English during the FTE causes the associated keyboard not to load.
r=cctuan.
  • Loading branch information
RudyLu committed Oct 31, 2014
2 parents 494cbb2 + 91cf5fc commit fb0cba5
Show file tree
Hide file tree
Showing 4 changed files with 74 additions and 15 deletions.
24 changes: 21 additions & 3 deletions apps/system/test/unit/keyboard_helper_test.js
Expand Up @@ -924,11 +924,29 @@ suite('KeyboardHelper', function() {
expectedSettings.enabled);
});

test('change default settings and reset for nonLatin', function() {
test('change default settings and reset for nonLatin, ' +
' preloaded layout', function() {
// Zhuyin is not preloaded for current config, so won't be enabled
expectedSettings['default'][keyboardAppManifestURL] = {
'zh-Hant-Zhuyin': true, en: true, number: true};
'zh-Hans-Pinyin': true, en: true, number: true};
expectedSettings['enabled'][keyboardAppManifestURL] = {
'zh-Hant-Zhuyin': true, en: true, number: true};
'zh-Hans-Pinyin': true, en: true, number: true};

KeyboardHelper.changeDefaultLayouts('zh-CN', true);
assert.deepEqual(KeyboardHelper.settings.default,
expectedSettings['default']);

assert.deepEqual(KeyboardHelper.settings.enabled,
expectedSettings.enabled);
});

test('change default settings and reset for nonLatin layout, ' +
'not preloaded', function() {
// Zhuyin is not preloaded for current config, so won't be enabled
expectedSettings['default'][keyboardAppManifestURL] = {
en: true, number: true};
expectedSettings['enabled'][keyboardAppManifestURL] = {
en: true, number: true};

KeyboardHelper.changeDefaultLayouts('zh-TW', true);
assert.deepEqual(KeyboardHelper.settings.default,
Expand Down
3 changes: 3 additions & 0 deletions build/config/keyboard-layouts.json
Expand Up @@ -218,5 +218,8 @@
},
"langIndependentLayouts": [
{"layoutId": "number", "app": ["apps", "keyboard"]}
],
"fallbackLayouts": [
{"layoutId": "en", "app": ["apps", "keyboard"]}
]
}
28 changes: 19 additions & 9 deletions build/keyboard-layouts.js
Expand Up @@ -31,7 +31,8 @@ function getLayoutEntry(layout, webappsMapping) {
// Generate the default layout mapping from language-> keyboard layouts
// config: the build config
// webappsMapping: all the webapps mapping
function genDefaultLayouts(config, webappsMapping) {
// allLayouts: all the preloaded keyboard layouts
function genDefaultLayouts(config, webappsMapping, allLayouts) {
let layoutDefFile = utils.resolve(config.KEYBOARD_LAYOUTS_PATH,
config.GAIA_DIR);

Expand All @@ -49,13 +50,21 @@ function genDefaultLayouts(config, webappsMapping) {
// handle language -> layouts mapping
let mapping = defaultKeyboards.layout;

function parseLayout(layout) {
return getLayoutEntry(layout, webappsMapping);
}
Object.keys(defaultKeyboards.layout).forEach(function(lang) {
// Remove those mappings without the layouts preloaded
var filteredLayouts = mapping[lang].filter(function(layoutEntry) {
return (allLayouts.indexOf(layoutEntry.layoutId) != -1);
});

for (var key in mapping) {
result.layout[key] = mapping[key].map(parseLayout);
}
// Put a fallback layout to avoid an empty layout set
if (filteredLayouts.length === 0) {
filteredLayouts = defaultKeyboards.fallbackLayouts;
}

result.layout[lang] = filteredLayouts.map(function parseLayout(layout) {
return getLayoutEntry(layout, webappsMapping);
});
});

// handle language-independent layouts
let langIndLayouts = defaultKeyboards.langIndependentLayouts;
Expand All @@ -67,7 +76,7 @@ function genDefaultLayouts(config, webappsMapping) {
let resultFile = utils.resolve(
utils.joinPath('shared', 'resources', 'keyboard_layouts.json'),
config.GAIA_DIR);
utils.writeContent(resultFile, JSON.stringify(result));
utils.writeContent(resultFile, JSON.stringify(result, null, 2));
}

function execute(options) {
Expand All @@ -84,8 +93,9 @@ function execute(options) {
}

let webappsMapping = utils.getJSON(webappsMappingFile);
let allLayouts = options.GAIA_KEYBOARD_LAYOUTS.split(',');

genDefaultLayouts(options, webappsMapping);
genDefaultLayouts(options, webappsMapping, allLayouts);
}

exports.execute = execute;
Expand Down
34 changes: 31 additions & 3 deletions build/test/unit/keyboard-layouts.test.js
Expand Up @@ -46,26 +46,54 @@ suite('keyboard-layouts.js', function() {
'zh-TW': [
{'layoutId': 'zhuyin', 'app': ['apps', 'keyboard']},
{'layoutId': 'en', 'app': ['apps', 'keyboard']}
],
'es': [
{'layoutId': 'es', 'app': ['apps', 'keyboard']}
]
},
'langIndependentLayouts':
[{'layoutId': 'number', 'app': ['apps', 'keyboard']}]
,
'fallbackLayouts':
[{'layoutId': 'preload', 'app': ['apps', 'keyboard']}]
};
};
});

test('Check the generated keyboard_layouts.json', function() {
app.genDefaultLayouts(config, webappsMapping);
var preloadSet = ['en', 'zhuyin', 'es'];
app.genDefaultLayouts(config, webappsMapping, preloadSet);

var expectedResult = {
'layout': {
'en-US': [{'layoutId': 'en', 'appManifestURL': defaultManifestURL}],
'zh-TW': [{'layoutId': 'zhuyin', 'appManifestURL': defaultManifestURL},
{'layoutId': 'en', 'appManifestURL': defaultManifestURL}]},
{'layoutId': 'en', 'appManifestURL': defaultManifestURL}],
'es': [{'layoutId': 'es', 'appManifestURL': defaultManifestURL}],
},
'langIndependentLayouts':
[{'layoutId': 'number', 'appManifestURL': defaultManifestURL}]
};

assert.equal(result, JSON.stringify(expectedResult, null, 2));
});

test('Check the generatedkeyboard_layouts.json with a minimal' +
' preloaded layout set', function() {

var preloadSet = ['en'];
app.genDefaultLayouts(config, webappsMapping, preloadSet);

var expectedResult = {
'layout': {
'en-US': [{'layoutId': 'en', 'appManifestURL': defaultManifestURL}],
'zh-TW': [{'layoutId': 'en', 'appManifestURL': defaultManifestURL}],
'es': [{'layoutId': 'preload', 'appManifestURL': defaultManifestURL}]
},
'langIndependentLayouts':
[{'layoutId': 'number', 'appManifestURL': defaultManifestURL}]
};

assert.equal(result, JSON.stringify(expectedResult));
assert.equal(result, JSON.stringify(expectedResult, null, 2));
});
});

0 comments on commit fb0cba5

Please sign in to comment.