package com.mobilesorcery.sdk.builder.android.ui.properties; import org.eclipse.jface.dialogs.IMessageProvider; import org.eclipse.jface.preference.FileFieldEditor; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import com.mobilesorcery.sdk.builder.android.AndroidPackager; import com.mobilesorcery.sdk.builder.android.PropertyInitializer; import com.mobilesorcery.sdk.core.PropertyUtil; import com.mobilesorcery.sdk.ui.DefaultMessageProvider; import com.mobilesorcery.sdk.ui.MoSyncPropertyPage; import com.mobilesorcery.sdk.ui.UpdateListener; public class AndroidPropertyPage extends MoSyncPropertyPage { public AndroidPropertyPage() { super(true); } private Text packageText; private Text versionNumberText; private Combo installLocationCombo; private FileFieldEditor manifestFile; private Button largeHeap; @Override protected Control createContents(Composite parent) { Composite main = new Composite(parent, SWT.NONE); main.setLayout(new GridLayout(3, false)); Label packageLabel = new Label(main, SWT.NONE); packageLabel.setText("Android Package name:"); packageText = new Text(main, SWT.SINGLE | SWT.BORDER); packageText.setLayoutData(new GridData(SWT.FILL, SWT.DEFAULT, true, false, 2, 1)); Label versionNumberLabel = new Label(main, SWT.NONE); versionNumberLabel.setText("Android Version code:"); versionNumberText = new Text(main, SWT.SINGLE | SWT.BORDER); versionNumberText.setLayoutData(new GridData(SWT.FILL, SWT.DEFAULT, true, false, 2, 1)); Label installLocationLabel = new Label(main, SWT.NONE); installLocationLabel.setText("Android Install Location:"); installLocationCombo = new Combo(main, SWT.READ_ONLY); installLocationCombo.setItems(PropertyInitializer.ANDROID_INSTALL_LOCATIONS); installLocationCombo.setLayoutData(new GridData(SWT.DEFAULT, SWT.DEFAULT, false, false, 2, 1)); UpdateListener listener = new UpdateListener(this); versionNumberText.addListener(SWT.Modify, listener); packageText.addListener(SWT.Modify, listener); manifestFile = new FileFieldEditor("dummy.1", "Custom &manifest template:", main); largeHeap = new Button(main, SWT.CHECK); largeHeap.setText("Use &large heap"); largeHeap.setLayoutData(new GridData(SWT.DEFAULT, SWT.DEFAULT, false, false, 2, 1)); initUI(); return main; } private void initUI() { setText(packageText, getProject().getProperty(PropertyInitializer.ANDROID_PACKAGE_NAME)); setText(versionNumberText, Integer.toString(PropertyUtil.getInteger(getProject(), PropertyInitializer.ANDROID_VERSION_CODE))); installLocationCombo.setText(getProject().getProperty(PropertyInitializer.ANDROID_INSTALL_LOCATION)); manifestFile.setStringValue(getProject().getProperty(PropertyInitializer.ANDROID_MANIFEST_TEMPLATE)); largeHeap.setSelection(PropertyUtil.getBoolean(getProject(), PropertyInitializer.ANDROID_LARGE_HEAP)); } @Override public boolean performOk() { getProject().setProperty(PropertyInitializer.ANDROID_PACKAGE_NAME, packageText.getText()); PropertyUtil.setInteger(getProject(), PropertyInitializer.ANDROID_VERSION_CODE, Integer.parseInt(versionNumberText.getText())); getProject().setProperty(PropertyInitializer.ANDROID_INSTALL_LOCATION, installLocationCombo.getText()); getProject().setProperty(PropertyInitializer.ANDROID_MANIFEST_TEMPLATE, manifestFile.getStringValue()); PropertyUtil.setBoolean(getProject(), PropertyInitializer.ANDROID_LARGE_HEAP, largeHeap.getSelection()); return true; } @Override public void performDefaults() { setText(packageText, getProject().getDefaultProperty(PropertyInitializer.ANDROID_PACKAGE_NAME)); installLocationCombo.setText(PropertyInitializer.ANDROID_INSTALL_LOCATION_DEFAULT); // We do not set the version # } @Override protected void validate() { IMessageProvider message = DefaultMessageProvider.EMPTY; boolean failedVersionCode = true; try { int value = Integer.parseInt(versionNumberText.getText()); failedVersionCode = value < 1; } catch (Exception e) { // Fall thru. } if (failedVersionCode) { message = new DefaultMessageProvider("Version number must be integer > 0", IMessageProvider.ERROR); } if (DefaultMessageProvider.isEmpty(message)) { message = AndroidPackager.validatePackageName(packageText.getText()); } setMessage(message); } }