aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/android
diff options
context:
space:
mode:
authorAssam Boudjelthia <assam.boudjelthia@qt.io>2020-07-21 21:14:50 +0300
committerAssam Boudjelthia <assam.boudjelthia@qt.io>2020-07-22 07:37:39 +0000
commitaa9367f5d4cee9ba8f9c5fb73075f343c9daa94e (patch)
tree265d1b88b5c0e392fc61f29c2f0a38519c936d58 /src/plugins/android
parent26f31572620ea38888fbaafd23cafa403c1cf01a (diff)
Android: re-organize manifest editor widget
The current manifest editor has too many things at once with a long scroll bar, that can be overwhelming, this changes that by re-organizing elements and grouping others. Change-Id: Ie997af475939effbc575fa9e2a1d20184e943ff1 Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
Diffstat (limited to 'src/plugins/android')
-rw-r--r--src/plugins/android/androidmanifesteditorwidget.cpp651
-rw-r--r--src/plugins/android/androidmanifesteditorwidget.h9
2 files changed, 341 insertions, 319 deletions
diff --git a/src/plugins/android/androidmanifesteditorwidget.cpp b/src/plugins/android/androidmanifesteditorwidget.cpp
index 6efa02e98e..a235e431cb 100644
--- a/src/plugins/android/androidmanifesteditorwidget.cpp
+++ b/src/plugins/android/androidmanifesteditorwidget.cpp
@@ -64,7 +64,6 @@
#include <QFileDialog>
#include <QFileInfo>
#include <QFormLayout>
-#include <QGroupBox>
#include <QHBoxLayout>
#include <QImage>
#include <QLabel>
@@ -134,338 +133,351 @@ AndroidManifestEditorWidget::AndroidManifestEditorWidget()
this, &AndroidManifestEditorWidget::updateAfterFileLoad);
}
-void AndroidManifestEditorWidget::initializePage()
+QGroupBox *AndroidManifestEditorWidget::createPermissionsGroupBox(QWidget *parent)
{
- QWidget *mainWidget = new QWidget; // different name
+ auto permissionsGroupBox = new QGroupBox(parent);
+ permissionsGroupBox->setTitle(tr("Permissions"));
+ auto layout = new QGridLayout(permissionsGroupBox);
+
+ m_defaultPermissonsCheckBox = new QCheckBox(this);
+ m_defaultPermissonsCheckBox->setText(tr("Include default permissions for Qt modules."));
+ layout->addWidget(m_defaultPermissonsCheckBox, 0, 0);
+
+ m_defaultFeaturesCheckBox = new QCheckBox(this);
+ m_defaultFeaturesCheckBox->setText(tr("Include default features for Qt modules."));
+ layout->addWidget(m_defaultFeaturesCheckBox, 1, 0);
+
+ m_permissionsComboBox = new QComboBox(permissionsGroupBox);
+ m_permissionsComboBox->insertItems(0, QStringList()
+ << QLatin1String("android.permission.ACCESS_CHECKIN_PROPERTIES")
+ << QLatin1String("android.permission.ACCESS_COARSE_LOCATION")
+ << QLatin1String("android.permission.ACCESS_FINE_LOCATION")
+ << QLatin1String("android.permission.ACCESS_LOCATION_EXTRA_COMMANDS")
+ << QLatin1String("android.permission.ACCESS_MOCK_LOCATION")
+ << QLatin1String("android.permission.ACCESS_NETWORK_STATE")
+ << QLatin1String("android.permission.ACCESS_SURFACE_FLINGER")
+ << QLatin1String("android.permission.ACCESS_WIFI_STATE")
+ << QLatin1String("android.permission.ACCOUNT_MANAGER")
+ << QLatin1String("com.android.voicemail.permission.ADD_VOICEMAIL")
+ << QLatin1String("android.permission.AUTHENTICATE_ACCOUNTS")
+ << QLatin1String("android.permission.BATTERY_STATS")
+ << QLatin1String("android.permission.BIND_ACCESSIBILITY_SERVICE")
+ << QLatin1String("android.permission.BIND_APPWIDGET")
+ << QLatin1String("android.permission.BIND_DEVICE_ADMIN")
+ << QLatin1String("android.permission.BIND_INPUT_METHOD")
+ << QLatin1String("android.permission.BIND_REMOTEVIEWS")
+ << QLatin1String("android.permission.BIND_TEXT_SERVICE")
+ << QLatin1String("android.permission.BIND_VPN_SERVICE")
+ << QLatin1String("android.permission.BIND_WALLPAPER")
+ << QLatin1String("android.permission.BLUETOOTH")
+ << QLatin1String("android.permission.BLUETOOTH_ADMIN")
+ << QLatin1String("android.permission.BRICK")
+ << QLatin1String("android.permission.BROADCAST_PACKAGE_REMOVED")
+ << QLatin1String("android.permission.BROADCAST_SMS")
+ << QLatin1String("android.permission.BROADCAST_STICKY")
+ << QLatin1String("android.permission.BROADCAST_WAP_PUSH")
+ << QLatin1String("android.permission.CALL_PHONE")
+ << QLatin1String("android.permission.CALL_PRIVILEGED")
+ << QLatin1String("android.permission.CAMERA")
+ << QLatin1String("android.permission.CHANGE_COMPONENT_ENABLED_STATE")
+ << QLatin1String("android.permission.CHANGE_CONFIGURATION")
+ << QLatin1String("android.permission.CHANGE_NETWORK_STATE")
+ << QLatin1String("android.permission.CHANGE_WIFI_MULTICAST_STATE")
+ << QLatin1String("android.permission.CHANGE_WIFI_STATE")
+ << QLatin1String("android.permission.CLEAR_APP_CACHE")
+ << QLatin1String("android.permission.CLEAR_APP_USER_DATA")
+ << QLatin1String("android.permission.CONTROL_LOCATION_UPDATES")
+ << QLatin1String("android.permission.DELETE_CACHE_FILES")
+ << QLatin1String("android.permission.DELETE_PACKAGES")
+ << QLatin1String("android.permission.DEVICE_POWER")
+ << QLatin1String("android.permission.DIAGNOSTIC")
+ << QLatin1String("android.permission.DISABLE_KEYGUARD")
+ << QLatin1String("android.permission.DUMP")
+ << QLatin1String("android.permission.EXPAND_STATUS_BAR")
+ << QLatin1String("android.permission.FACTORY_TEST")
+ << QLatin1String("android.permission.FLASHLIGHT")
+ << QLatin1String("android.permission.FORCE_BACK")
+ << QLatin1String("android.permission.GET_ACCOUNTS")
+ << QLatin1String("android.permission.GET_PACKAGE_SIZE")
+ << QLatin1String("android.permission.GET_TASKS")
+ << QLatin1String("android.permission.GLOBAL_SEARCH")
+ << QLatin1String("android.permission.HARDWARE_TEST")
+ << QLatin1String("android.permission.INJECT_EVENTS")
+ << QLatin1String("android.permission.INSTALL_LOCATION_PROVIDER")
+ << QLatin1String("android.permission.INSTALL_PACKAGES")
+ << QLatin1String("android.permission.INTERNAL_SYSTEM_WINDOW")
+ << QLatin1String("android.permission.INTERNET")
+ << QLatin1String("android.permission.KILL_BACKGROUND_PROCESSES")
+ << QLatin1String("android.permission.MANAGE_ACCOUNTS")
+ << QLatin1String("android.permission.MANAGE_APP_TOKENS")
+ << QLatin1String("android.permission.MASTER_CLEAR")
+ << QLatin1String("android.permission.MODIFY_AUDIO_SETTINGS")
+ << QLatin1String("android.permission.MODIFY_PHONE_STATE")
+ << QLatin1String("android.permission.MOUNT_FORMAT_FILESYSTEMS")
+ << QLatin1String("android.permission.MOUNT_UNMOUNT_FILESYSTEMS")
+ << QLatin1String("android.permission.NFC")
+ << QLatin1String("android.permission.PERSISTENT_ACTIVITY")
+ << QLatin1String("android.permission.PROCESS_OUTGOING_CALLS")
+ << QLatin1String("android.permission.READ_CALENDAR")
+ << QLatin1String("android.permission.READ_CALL_LOG")
+ << QLatin1String("android.permission.READ_CONTACTS")
+ << QLatin1String("android.permission.READ_EXTERNAL_STORAGE")
+ << QLatin1String("android.permission.READ_FRAME_BUFFER")
+ << QLatin1String("com.android.browser.permission.READ_HISTORY_BOOKMARKS")
+ << QLatin1String("android.permission.READ_INPUT_STATE")
+ << QLatin1String("android.permission.READ_LOGS")
+ << QLatin1String("android.permission.READ_PHONE_STATE")
+ << QLatin1String("android.permission.READ_PROFILE")
+ << QLatin1String("android.permission.READ_SMS")
+ << QLatin1String("android.permission.READ_SOCIAL_STREAM")
+ << QLatin1String("android.permission.READ_SYNC_SETTINGS")
+ << QLatin1String("android.permission.READ_SYNC_STATS")
+ << QLatin1String("android.permission.READ_USER_DICTIONARY")
+ << QLatin1String("android.permission.REBOOT")
+ << QLatin1String("android.permission.RECEIVE_BOOT_COMPLETED")
+ << QLatin1String("android.permission.RECEIVE_MMS")
+ << QLatin1String("android.permission.RECEIVE_SMS")
+ << QLatin1String("android.permission.RECEIVE_WAP_PUSH")
+ << QLatin1String("android.permission.RECORD_AUDIO")
+ << QLatin1String("android.permission.REORDER_TASKS")
+ << QLatin1String("android.permission.RESTART_PACKAGES")
+ << QLatin1String("android.permission.SEND_SMS")
+ << QLatin1String("android.permission.SET_ACTIVITY_WATCHER")
+ << QLatin1String("com.android.alarm.permission.SET_ALARM")
+ << QLatin1String("android.permission.SET_ALWAYS_FINISH")
+ << QLatin1String("android.permission.SET_ANIMATION_SCALE")
+ << QLatin1String("android.permission.SET_DEBUG_APP")
+ << QLatin1String("android.permission.SET_ORIENTATION")
+ << QLatin1String("android.permission.SET_POINTER_SPEED")
+ << QLatin1String("android.permission.SET_PREFERRED_APPLICATIONS")
+ << QLatin1String("android.permission.SET_PROCESS_LIMIT")
+ << QLatin1String("android.permission.SET_TIME")
+ << QLatin1String("android.permission.SET_TIME_ZONE")
+ << QLatin1String("android.permission.SET_WALLPAPER")
+ << QLatin1String("android.permission.SET_WALLPAPER_HINTS")
+ << QLatin1String("android.permission.SIGNAL_PERSISTENT_PROCESSES")
+ << QLatin1String("android.permission.STATUS_BAR")
+ << QLatin1String("android.permission.SUBSCRIBED_FEEDS_READ")
+ << QLatin1String("android.permission.SUBSCRIBED_FEEDS_WRITE")
+ << QLatin1String("android.permission.SYSTEM_ALERT_WINDOW")
+ << QLatin1String("android.permission.UPDATE_DEVICE_STATS")
+ << QLatin1String("android.permission.USE_CREDENTIALS")
+ << QLatin1String("android.permission.USE_SIP")
+ << QLatin1String("android.permission.VIBRATE")
+ << QLatin1String("android.permission.WAKE_LOCK")
+ << QLatin1String("android.permission.WRITE_APN_SETTINGS")
+ << QLatin1String("android.permission.WRITE_CALENDAR")
+ << QLatin1String("android.permission.WRITE_CALL_LOG")
+ << QLatin1String("android.permission.WRITE_CONTACTS")
+ << QLatin1String("android.permission.WRITE_EXTERNAL_STORAGE")
+ << QLatin1String("android.permission.WRITE_GSERVICES")
+ << QLatin1String("com.android.browser.permission.WRITE_HISTORY_BOOKMARKS")
+ << QLatin1String("android.permission.WRITE_PROFILE")
+ << QLatin1String("android.permission.WRITE_SECURE_SETTINGS")
+ << QLatin1String("android.permission.WRITE_SETTINGS")
+ << QLatin1String("android.permission.WRITE_SMS")
+ << QLatin1String("android.permission.WRITE_SOCIAL_STREAM")
+ << QLatin1String("android.permission.WRITE_SYNC_SETTINGS")
+ << QLatin1String("android.permission.WRITE_USER_DICTIONARY")
+ );
+ m_permissionsComboBox->setEditable(true);
+ layout->addWidget(m_permissionsComboBox, 2, 0);
+
+ m_addPermissionButton = new QPushButton(permissionsGroupBox);
+ m_addPermissionButton->setText(tr("Add"));
+ layout->addWidget(m_addPermissionButton, 2, 1);
+
+ m_permissionsModel = new PermissionsModel(this);
+
+ m_permissionsListView = new QListView(permissionsGroupBox);
+ m_permissionsListView->setModel(m_permissionsModel);
+ layout->addWidget(m_permissionsListView, 3, 0, 3, 1);
+
+ m_removePermissionButton = new QPushButton(permissionsGroupBox);
+ m_removePermissionButton->setText(tr("Remove"));
+ layout->addWidget(m_removePermissionButton, 3, 1);
+
+ permissionsGroupBox->setLayout(layout);
+
+ connect(m_defaultPermissonsCheckBox, &QCheckBox::stateChanged,
+ this, &AndroidManifestEditorWidget::defaultPermissionOrFeatureCheckBoxClicked);
+ connect(m_defaultFeaturesCheckBox, &QCheckBox::stateChanged,
+ this, &AndroidManifestEditorWidget::defaultPermissionOrFeatureCheckBoxClicked);
- auto topLayout = new QVBoxLayout(mainWidget);
+ connect(m_addPermissionButton, &QAbstractButton::clicked,
+ this, &AndroidManifestEditorWidget::addPermission);
+ connect(m_removePermissionButton, &QAbstractButton::clicked,
+ this, &AndroidManifestEditorWidget::removePermission);
+ connect(m_permissionsComboBox, &QComboBox::currentTextChanged,
+ this, &AndroidManifestEditorWidget::updateAddRemovePermissionButtons);
- auto packageGroupBox = new QGroupBox(mainWidget);
- topLayout->addWidget(packageGroupBox);
+ return permissionsGroupBox;
+}
- auto setDirtyFunc = [this] { setDirty(); };
+QGroupBox *AndroidManifestEditorWidget::createPackageFormLayout(QWidget *parent)
+{
+ auto packageGroupBox = new QGroupBox(parent);
packageGroupBox->setTitle(tr("Package"));
- {
- auto formLayout = new QFormLayout();
-
- m_packageNameLineEdit = new QLineEdit(packageGroupBox);
- m_packageNameLineEdit->setToolTip(tr(
- "<p align=\"justify\">Please choose a valid package name "
- "for your application (for example, \"org.example.myapplication\").</p>"
- "<p align=\"justify\">Packages are usually defined using a hierarchical naming pattern, "
- "with levels in the hierarchy separated by periods (.) (pronounced \"dot\").</p>"
- "<p align=\"justify\">In general, a package name begins with the top level domain name"
- " of the organization and then the organization's domain and then any subdomains listed"
- " in reverse order. The organization can then choose a specific name for their package."
- " Package names should be all lowercase characters whenever possible.</p>"
- "<p align=\"justify\">Complete conventions for disambiguating package names and rules for"
- " naming packages when the Internet domain name cannot be directly used as a package name"
- " are described in section 7.7 of the Java Language Specification.</p>"));
- formLayout->addRow(tr("Package name:"), m_packageNameLineEdit);
-
- m_packageNameWarning = new QLabel;
- m_packageNameWarning->setText(tr("The package name is not valid."));
- m_packageNameWarning->setVisible(false);
-
- m_packageNameWarningIcon = new QLabel;
- m_packageNameWarningIcon->setPixmap(Utils::Icons::WARNING.pixmap());
- m_packageNameWarningIcon->setVisible(false);
- m_packageNameWarningIcon->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
-
- auto warningRow = new QHBoxLayout;
- warningRow->setContentsMargins(0, 0, 0, 0);
- warningRow->addWidget(m_packageNameWarningIcon);
- warningRow->addWidget(m_packageNameWarning);
-
- formLayout->addRow(QString(), warningRow);
-
- m_versionCodeLineEdit = new QLineEdit(packageGroupBox);
- formLayout->addRow(tr("Version code:"), m_versionCodeLineEdit);
-
- m_versionNameLinedit = new QLineEdit(packageGroupBox);
- formLayout->addRow(tr("Version name:"), m_versionNameLinedit);
-
- m_androidMinSdkVersion = new QComboBox(packageGroupBox);
- m_androidMinSdkVersion->setToolTip(
- tr("Sets the minimum required version on which this application can be run."));
- m_androidMinSdkVersion->addItem(tr("Not set"), 0);
-
- formLayout->addRow(tr("Minimum required SDK:"), m_androidMinSdkVersion);
-
- m_androidTargetSdkVersion = new QComboBox(packageGroupBox);
- m_androidTargetSdkVersion->setToolTip(
- tr("Sets the target SDK. Set this to the highest tested version. "
- "This disables compatibility behavior of the system for your application."));
- m_androidTargetSdkVersion->addItem(tr("Not set"), 0);
-
- formLayout->addRow(tr("Target SDK:"), m_androidTargetSdkVersion);
-
- packageGroupBox->setLayout(formLayout);
-
- updateSdkVersions();
-
- connect(m_packageNameLineEdit, &QLineEdit::textEdited,
- this, &AndroidManifestEditorWidget::setPackageName);
- connect(m_versionCodeLineEdit, &QLineEdit::textEdited,
- this, setDirtyFunc);
- connect(m_versionNameLinedit, &QLineEdit::textEdited,
- this, setDirtyFunc);
- connect(m_androidMinSdkVersion,
- QOverload<int>::of(&QComboBox::currentIndexChanged),
- this, setDirtyFunc);
- connect(m_androidTargetSdkVersion,
- QOverload<int>::of(&QComboBox::currentIndexChanged),
- this, setDirtyFunc);
+ auto formLayout = new QFormLayout();
+
+ m_packageNameLineEdit = new QLineEdit(packageGroupBox);
+ m_packageNameLineEdit->setToolTip(tr(
+ "<p align=\"justify\">Please choose a valid package name for your application (for "
+ "example, \"org.example.myapplication\").</p><p align=\"justify\">Packages are usually "
+ "defined using a hierarchical naming pattern, with levels in the hierarchy separated "
+ "by periods (.) (pronounced \"dot\").</p><p align=\"justify\">In general, a package "
+ "name begins with the top level domain name of the organization and then the "
+ "organization's domain and then any subdomains listed in reverse order. The "
+ "organization can then choose a specific name for their package. Package names should "
+ "be all lowercase characters whenever possible.</p><p align=\"justify\">Complete "
+ "conventions for disambiguating package names and rules for naming packages when the "
+ "Internet domain name cannot be directly used as a package name are described in "
+ "section 7.7 of the Java Language Specification.</p>"));
+ formLayout->addRow(tr("Package name:"), m_packageNameLineEdit);
+
+ m_packageNameWarning = new QLabel;
+ m_packageNameWarning->setText(tr("The package name is not valid."));
+ m_packageNameWarning->setVisible(false);
+
+ m_packageNameWarningIcon = new QLabel;
+ m_packageNameWarningIcon->setPixmap(Utils::Icons::WARNING.pixmap());
+ m_packageNameWarningIcon->setVisible(false);
+ m_packageNameWarningIcon->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
+
+ auto warningRow = new QHBoxLayout;
+ warningRow->setContentsMargins(0, 0, 0, 0);
+ warningRow->addWidget(m_packageNameWarningIcon);
+ warningRow->addWidget(m_packageNameWarning);
+
+ formLayout->addRow(QString(), warningRow);
+
+ m_versionCodeLineEdit = new QLineEdit(packageGroupBox);
+ formLayout->addRow(tr("Version code:"), m_versionCodeLineEdit);
+
+ m_versionNameLinedit = new QLineEdit(packageGroupBox);
+ formLayout->addRow(tr("Version name:"), m_versionNameLinedit);
+
+ m_androidMinSdkVersion = new QComboBox(packageGroupBox);
+ m_androidMinSdkVersion->setToolTip(
+ tr("Sets the minimum required version on which this application can be run."));
+ m_androidMinSdkVersion->addItem(tr("Not set"), 0);
+
+ formLayout->addRow(tr("Minimum required SDK:"), m_androidMinSdkVersion);
+
+ m_androidTargetSdkVersion = new QComboBox(packageGroupBox);
+ m_androidTargetSdkVersion->setToolTip(
+ tr("Sets the target SDK. Set this to the highest tested version. "
+ "This disables compatibility behavior of the system for your application."));
+ m_androidTargetSdkVersion->addItem(tr("Not set"), 0);
+
+ formLayout->addRow(tr("Target SDK:"), m_androidTargetSdkVersion);
+
+ packageGroupBox->setLayout(formLayout);
+
+ updateSdkVersions();
+
+ connect(m_packageNameLineEdit, &QLineEdit::textEdited,
+ this, &AndroidManifestEditorWidget::setPackageName);
+ connect(m_versionCodeLineEdit, &QLineEdit::textEdited,
+ this, [this]() { setDirty(); });
+ connect(m_versionNameLinedit, &QLineEdit::textEdited,
+ this, [this]() { setDirty(); });
+ connect(m_androidMinSdkVersion,
+ QOverload<int>::of(&QComboBox::currentIndexChanged),
+ this, [this]() { setDirty(); });
+ connect(m_androidTargetSdkVersion,
+ QOverload<int>::of(&QComboBox::currentIndexChanged),
+ this, [this]() { setDirty(); });
+
+ return packageGroupBox;
+}
+QGroupBox *Android::Internal::AndroidManifestEditorWidget::createApplicationGroupBox(QWidget *parent)
+{
+ auto applicationGroupBox = new QGroupBox(parent);
+ applicationGroupBox->setTitle(tr("Application"));
+ auto formLayout = new QFormLayout();
+
+ m_appNameLineEdit = new QLineEdit(applicationGroupBox);
+ formLayout->addRow(tr("Application name:"), m_appNameLineEdit);
+
+ m_activityNameLineEdit = new QLineEdit(applicationGroupBox);
+ formLayout->addRow(tr("Activity name:"), m_activityNameLineEdit);
+
+ m_targetLineEdit = new QComboBox(applicationGroupBox);
+ m_targetLineEdit->setEditable(true);
+ m_targetLineEdit->setDuplicatesEnabled(true);
+ m_targetLineEdit->installEventFilter(this);
+ formLayout->addRow(tr("Run:"), m_targetLineEdit);
+
+ m_styleExtractMethod = new QComboBox(applicationGroupBox);
+ formLayout->addRow(tr("Style extraction:"), m_styleExtractMethod);
+ const QList<QStringList> styleMethodsMap = {
+ {"default",
+ "In most cases this will be the same as \"full\", but it can also be something else "
+ "if needed, e.g. for compatibility reasons."},
+ {"full", "Useful for Qt Widgets & Qt Quick Controls 1 apps."},
+ {"minimal", "Useful for Qt Quick Controls 2 apps, it is much faster than \"full\"."},
+ {"none", "Useful for apps that don't use Qt Widgets, Qt Quick Controls 1 or Qt Quick Controls 2."}};
+ for (int i = 0; i <styleMethodsMap.size(); ++i) {
+ m_styleExtractMethod->addItem(styleMethodsMap.at(i).first());
+ m_styleExtractMethod->setItemData(i, styleMethodsMap.at(i).at(1), Qt::ToolTipRole);
}
+ applicationGroupBox->setLayout(formLayout);
+
+ connect(m_appNameLineEdit, &QLineEdit::textEdited,
+ this, [this]() { setDirty(); });
+ connect(m_activityNameLineEdit, &QLineEdit::textEdited,
+ this, [this]() { setDirty(); });
+ connect(m_targetLineEdit, &QComboBox::currentTextChanged,
+ this, [this]() { setDirty(); });
+ connect(m_styleExtractMethod,
+ QOverload<int>::of(&QComboBox::currentIndexChanged),
+ this, [this]() { setDirty(); });
+
+ return applicationGroupBox;
+}
- // Application
- auto applicationGroupBox = new QGroupBox(mainWidget);
- topLayout->addWidget(applicationGroupBox);
+QGroupBox *AndroidManifestEditorWidget::createAdvancedGroupBox(QWidget *parent)
+{
+ auto otherGroupBox = new QGroupBox(parent);
+ otherGroupBox->setTitle(tr("Advanced"));
+ m_advanvedTabWidget = new QTabWidget(otherGroupBox);
+ auto formLayout = new QFormLayout();
- applicationGroupBox->setTitle(tr("Application"));
- {
- auto formLayout = new QFormLayout();
-
- m_appNameLineEdit = new QLineEdit(applicationGroupBox);
- formLayout->addRow(tr("Application name:"), m_appNameLineEdit);
-
- m_activityNameLineEdit = new QLineEdit(applicationGroupBox);
- formLayout->addRow(tr("Activity name:"), m_activityNameLineEdit);
-
- m_targetLineEdit = new QComboBox(applicationGroupBox);
- m_targetLineEdit->setEditable(true);
- m_targetLineEdit->setDuplicatesEnabled(true);
- m_targetLineEdit->installEventFilter(this);
- formLayout->addRow(tr("Run:"), m_targetLineEdit);
-
- m_styleExtractMethod = new QComboBox(applicationGroupBox);
- formLayout->addRow(tr("Style extraction:"), m_styleExtractMethod);
- const QList<QStringList> styleMethodsMap = {
- {"default", "In most cases this will be the same as \"full\", but it can also be something else if needed, e.g. for compatibility reasons."},
- {"full", "Useful for Qt Widgets & Qt Quick Controls 1 apps."},
- {"minimal", "Useful for Qt Quick Controls 2 apps, it is much faster than \"full\"."},
- {"none", "Useful for apps that don't use Qt Widgets, Qt Quick Controls 1 or Qt Quick Controls 2."}};
- for (int i = 0; i <styleMethodsMap.size(); ++i) {
- m_styleExtractMethod->addItem(styleMethodsMap.at(i).first());
- m_styleExtractMethod->setItemData(i, styleMethodsMap.at(i).at(1), Qt::ToolTipRole);
- }
+ m_iconButtons = new AndroidManifestEditorIconContainerWidget(otherGroupBox, m_textEditorWidget);
+ m_advanvedTabWidget->addTab(m_iconButtons, tr("Application icon"));
- m_iconButtons = new AndroidManifestEditorIconContainerWidget(applicationGroupBox, m_textEditorWidget);
- formLayout->addRow(tr("Application icon:"), new QLabel());
- formLayout->addRow(QString(), m_iconButtons);
-
- m_splashButtons = new SplashIconContainerWidget(applicationGroupBox, m_textEditorWidget);
- formLayout->addRow(tr("Splash screen:"), new QLabel());
- formLayout->addRow(QString(), m_splashButtons);
-
- m_services = new AndroidServiceWidget(this);
- formLayout->addRow(tr("Android services:"), m_services);
-
- applicationGroupBox->setLayout(formLayout);
-
- connect(m_appNameLineEdit, &QLineEdit::textEdited,
- this, setDirtyFunc);
- connect(m_activityNameLineEdit, &QLineEdit::textEdited,
- this, setDirtyFunc);
- connect(m_targetLineEdit, &QComboBox::currentTextChanged,
- this, setDirtyFunc);
- connect(m_styleExtractMethod,
- QOverload<int>::of(&QComboBox::currentIndexChanged),
- this, setDirtyFunc);
- connect(m_services, &AndroidServiceWidget::servicesModified,
- this, setDirtyFunc);
- connect(m_splashButtons, &SplashIconContainerWidget::splashScreensModified,
- this, setDirtyFunc);
- connect(m_services, &AndroidServiceWidget::servicesModified,
- this, &AndroidManifestEditorWidget::clearInvalidServiceInfo);
- connect(m_services, &AndroidServiceWidget::servicesInvalid,
- this, &AndroidManifestEditorWidget::setInvalidServiceInfo);
- }
+ m_services = new AndroidServiceWidget(otherGroupBox);
+ m_advanvedTabWidget->addTab(m_services, tr("Android services"));
+ m_splashButtons = new SplashIconContainerWidget(otherGroupBox, m_textEditorWidget);
+ m_advanvedTabWidget->addTab(m_splashButtons, tr("Splash screen"));
- // Permissions
- auto permissionsGroupBox = new QGroupBox(mainWidget);
- topLayout->addWidget(permissionsGroupBox);
+ connect(m_services, &AndroidServiceWidget::servicesModified, this, [this]() { setDirty(); });
+ connect(m_services, &AndroidServiceWidget::servicesModified,
+ this, &AndroidManifestEditorWidget::clearInvalidServiceInfo);
+ connect(m_services, &AndroidServiceWidget::servicesInvalid,
+ this, &AndroidManifestEditorWidget::setInvalidServiceInfo);
+ connect(m_splashButtons, &SplashIconContainerWidget::splashScreensModified,
+ this, [this]() { setDirty(); });
- permissionsGroupBox->setTitle(tr("Permissions"));
- {
- auto layout = new QGridLayout(permissionsGroupBox);
-
- m_defaultPermissonsCheckBox = new QCheckBox(this);
- m_defaultPermissonsCheckBox->setText(tr("Include default permissions for Qt modules."));
- layout->addWidget(m_defaultPermissonsCheckBox, 0, 0);
-
- m_defaultFeaturesCheckBox = new QCheckBox(this);
- m_defaultFeaturesCheckBox->setText(tr("Include default features for Qt modules."));
- layout->addWidget(m_defaultFeaturesCheckBox, 1, 0);
-
- m_permissionsComboBox = new QComboBox(permissionsGroupBox);
- m_permissionsComboBox->insertItems(0, QStringList()
- << QLatin1String("android.permission.ACCESS_CHECKIN_PROPERTIES")
- << QLatin1String("android.permission.ACCESS_COARSE_LOCATION")
- << QLatin1String("android.permission.ACCESS_FINE_LOCATION")
- << QLatin1String("android.permission.ACCESS_LOCATION_EXTRA_COMMANDS")
- << QLatin1String("android.permission.ACCESS_MOCK_LOCATION")
- << QLatin1String("android.permission.ACCESS_NETWORK_STATE")
- << QLatin1String("android.permission.ACCESS_SURFACE_FLINGER")
- << QLatin1String("android.permission.ACCESS_WIFI_STATE")
- << QLatin1String("android.permission.ACCOUNT_MANAGER")
- << QLatin1String("com.android.voicemail.permission.ADD_VOICEMAIL")
- << QLatin1String("android.permission.AUTHENTICATE_ACCOUNTS")
- << QLatin1String("android.permission.BATTERY_STATS")
- << QLatin1String("android.permission.BIND_ACCESSIBILITY_SERVICE")
- << QLatin1String("android.permission.BIND_APPWIDGET")
- << QLatin1String("android.permission.BIND_DEVICE_ADMIN")
- << QLatin1String("android.permission.BIND_INPUT_METHOD")
- << QLatin1String("android.permission.BIND_REMOTEVIEWS")
- << QLatin1String("android.permission.BIND_TEXT_SERVICE")
- << QLatin1String("android.permission.BIND_VPN_SERVICE")
- << QLatin1String("android.permission.BIND_WALLPAPER")
- << QLatin1String("android.permission.BLUETOOTH")
- << QLatin1String("android.permission.BLUETOOTH_ADMIN")
- << QLatin1String("android.permission.BRICK")
- << QLatin1String("android.permission.BROADCAST_PACKAGE_REMOVED")
- << QLatin1String("android.permission.BROADCAST_SMS")
- << QLatin1String("android.permission.BROADCAST_STICKY")
- << QLatin1String("android.permission.BROADCAST_WAP_PUSH")
- << QLatin1String("android.permission.CALL_PHONE")
- << QLatin1String("android.permission.CALL_PRIVILEGED")
- << QLatin1String("android.permission.CAMERA")
- << QLatin1String("android.permission.CHANGE_COMPONENT_ENABLED_STATE")
- << QLatin1String("android.permission.CHANGE_CONFIGURATION")
- << QLatin1String("android.permission.CHANGE_NETWORK_STATE")
- << QLatin1String("android.permission.CHANGE_WIFI_MULTICAST_STATE")
- << QLatin1String("android.permission.CHANGE_WIFI_STATE")
- << QLatin1String("android.permission.CLEAR_APP_CACHE")
- << QLatin1String("android.permission.CLEAR_APP_USER_DATA")
- << QLatin1String("android.permission.CONTROL_LOCATION_UPDATES")
- << QLatin1String("android.permission.DELETE_CACHE_FILES")
- << QLatin1String("android.permission.DELETE_PACKAGES")
- << QLatin1String("android.permission.DEVICE_POWER")
- << QLatin1String("android.permission.DIAGNOSTIC")
- << QLatin1String("android.permission.DISABLE_KEYGUARD")
- << QLatin1String("android.permission.DUMP")
- << QLatin1String("android.permission.EXPAND_STATUS_BAR")
- << QLatin1String("android.permission.FACTORY_TEST")
- << QLatin1String("android.permission.FLASHLIGHT")
- << QLatin1String("android.permission.FORCE_BACK")
- << QLatin1String("android.permission.GET_ACCOUNTS")
- << QLatin1String("android.permission.GET_PACKAGE_SIZE")
- << QLatin1String("android.permission.GET_TASKS")
- << QLatin1String("android.permission.GLOBAL_SEARCH")
- << QLatin1String("android.permission.HARDWARE_TEST")
- << QLatin1String("android.permission.INJECT_EVENTS")
- << QLatin1String("android.permission.INSTALL_LOCATION_PROVIDER")
- << QLatin1String("android.permission.INSTALL_PACKAGES")
- << QLatin1String("android.permission.INTERNAL_SYSTEM_WINDOW")
- << QLatin1String("android.permission.INTERNET")
- << QLatin1String("android.permission.KILL_BACKGROUND_PROCESSES")
- << QLatin1String("android.permission.MANAGE_ACCOUNTS")
- << QLatin1String("android.permission.MANAGE_APP_TOKENS")
- << QLatin1String("android.permission.MASTER_CLEAR")
- << QLatin1String("android.permission.MODIFY_AUDIO_SETTINGS")
- << QLatin1String("android.permission.MODIFY_PHONE_STATE")
- << QLatin1String("android.permission.MOUNT_FORMAT_FILESYSTEMS")
- << QLatin1String("android.permission.MOUNT_UNMOUNT_FILESYSTEMS")
- << QLatin1String("android.permission.NFC")
- << QLatin1String("android.permission.PERSISTENT_ACTIVITY")
- << QLatin1String("android.permission.PROCESS_OUTGOING_CALLS")
- << QLatin1String("android.permission.READ_CALENDAR")
- << QLatin1String("android.permission.READ_CALL_LOG")
- << QLatin1String("android.permission.READ_CONTACTS")
- << QLatin1String("android.permission.READ_EXTERNAL_STORAGE")
- << QLatin1String("android.permission.READ_FRAME_BUFFER")
- << QLatin1String("com.android.browser.permission.READ_HISTORY_BOOKMARKS")
- << QLatin1String("android.permission.READ_INPUT_STATE")
- << QLatin1String("android.permission.READ_LOGS")
- << QLatin1String("android.permission.READ_PHONE_STATE")
- << QLatin1String("android.permission.READ_PROFILE")
- << QLatin1String("android.permission.READ_SMS")
- << QLatin1String("android.permission.READ_SOCIAL_STREAM")
- << QLatin1String("android.permission.READ_SYNC_SETTINGS")
- << QLatin1String("android.permission.READ_SYNC_STATS")
- << QLatin1String("android.permission.READ_USER_DICTIONARY")
- << QLatin1String("android.permission.REBOOT")
- << QLatin1String("android.permission.RECEIVE_BOOT_COMPLETED")
- << QLatin1String("android.permission.RECEIVE_MMS")
- << QLatin1String("android.permission.RECEIVE_SMS")
- << QLatin1String("android.permission.RECEIVE_WAP_PUSH")
- << QLatin1String("android.permission.RECORD_AUDIO")
- << QLatin1String("android.permission.REORDER_TASKS")
- << QLatin1String("android.permission.RESTART_PACKAGES")
- << QLatin1String("android.permission.SEND_SMS")
- << QLatin1String("android.permission.SET_ACTIVITY_WATCHER")
- << QLatin1String("com.android.alarm.permission.SET_ALARM")
- << QLatin1String("android.permission.SET_ALWAYS_FINISH")
- << QLatin1String("android.permission.SET_ANIMATION_SCALE")
- << QLatin1String("android.permission.SET_DEBUG_APP")
- << QLatin1String("android.permission.SET_ORIENTATION")
- << QLatin1String("android.permission.SET_POINTER_SPEED")
- << QLatin1String("android.permission.SET_PREFERRED_APPLICATIONS")
- << QLatin1String("android.permission.SET_PROCESS_LIMIT")
- << QLatin1String("android.permission.SET_TIME")
- << QLatin1String("android.permission.SET_TIME_ZONE")
- << QLatin1String("android.permission.SET_WALLPAPER")
- << QLatin1String("android.permission.SET_WALLPAPER_HINTS")
- << QLatin1String("android.permission.SIGNAL_PERSISTENT_PROCESSES")
- << QLatin1String("android.permission.STATUS_BAR")
- << QLatin1String("android.permission.SUBSCRIBED_FEEDS_READ")
- << QLatin1String("android.permission.SUBSCRIBED_FEEDS_WRITE")
- << QLatin1String("android.permission.SYSTEM_ALERT_WINDOW")
- << QLatin1String("android.permission.UPDATE_DEVICE_STATS")
- << QLatin1String("android.permission.USE_CREDENTIALS")
- << QLatin1String("android.permission.USE_SIP")
- << QLatin1String("android.permission.VIBRATE")
- << QLatin1String("android.permission.WAKE_LOCK")
- << QLatin1String("android.permission.WRITE_APN_SETTINGS")
- << QLatin1String("android.permission.WRITE_CALENDAR")
- << QLatin1String("android.permission.WRITE_CALL_LOG")
- << QLatin1String("android.permission.WRITE_CONTACTS")
- << QLatin1String("android.permission.WRITE_EXTERNAL_STORAGE")
- << QLatin1String("android.permission.WRITE_GSERVICES")
- << QLatin1String("com.android.browser.permission.WRITE_HISTORY_BOOKMARKS")
- << QLatin1String("android.permission.WRITE_PROFILE")
- << QLatin1String("android.permission.WRITE_SECURE_SETTINGS")
- << QLatin1String("android.permission.WRITE_SETTINGS")
- << QLatin1String("android.permission.WRITE_SMS")
- << QLatin1String("android.permission.WRITE_SOCIAL_STREAM")
- << QLatin1String("android.permission.WRITE_SYNC_SETTINGS")
- << QLatin1String("android.permission.WRITE_USER_DICTIONARY")
- );
- m_permissionsComboBox->setEditable(true);
- layout->addWidget(m_permissionsComboBox, 2, 0);
-
- m_addPermissionButton = new QPushButton(permissionsGroupBox);
- m_addPermissionButton->setText(tr("Add"));
- layout->addWidget(m_addPermissionButton, 2, 1);
-
- m_permissionsModel = new PermissionsModel(this);
-
- m_permissionsListView = new QListView(permissionsGroupBox);
- m_permissionsListView->setModel(m_permissionsModel);
- layout->addWidget(m_permissionsListView, 3, 0, 3, 1);
-
- m_removePermissionButton = new QPushButton(permissionsGroupBox);
- m_removePermissionButton->setText(tr("Remove"));
- layout->addWidget(m_removePermissionButton, 3, 1);
-
- permissionsGroupBox->setLayout(layout);
-
- connect(m_defaultPermissonsCheckBox, &QCheckBox::stateChanged,
- this, &AndroidManifestEditorWidget::defaultPermissionOrFeatureCheckBoxClicked);
- connect(m_defaultFeaturesCheckBox, &QCheckBox::stateChanged,
- this, &AndroidManifestEditorWidget::defaultPermissionOrFeatureCheckBoxClicked);
-
- connect(m_addPermissionButton, &QAbstractButton::clicked,
- this, &AndroidManifestEditorWidget::addPermission);
- connect(m_removePermissionButton, &QAbstractButton::clicked,
- this, &AndroidManifestEditorWidget::removePermission);
- connect(m_permissionsComboBox, &QComboBox::currentTextChanged,
- this, &AndroidManifestEditorWidget::updateAddRemovePermissionButtons);
- }
+ formLayout->addRow(m_advanvedTabWidget);
+ otherGroupBox->setLayout(formLayout);
+
+ return otherGroupBox;
+}
+
+void AndroidManifestEditorWidget::initializePage()
+{
+ QWidget *mainWidget = new QWidget(); // different name
+ auto topLayout = new QGridLayout(mainWidget);
- topLayout->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::Fixed, QSizePolicy::MinimumExpanding));
+ topLayout->addWidget(createPackageFormLayout(mainWidget), 0, 0);
+ topLayout->addWidget(createApplicationGroupBox(mainWidget), 0, 1);
+ topLayout->addWidget(createPermissionsGroupBox(mainWidget), 1, 0, 1, 2);
+ topLayout->addWidget(createAdvancedGroupBox(mainWidget), 2, 0, 1, 2);
+ topLayout->addItem(new QSpacerItem(0, 0, QSizePolicy::Fixed, QSizePolicy::MinimumExpanding), 3, 0);
auto mainWidgetScrollArea = new QScrollArea;
mainWidgetScrollArea->setWidgetResizable(true);
@@ -575,6 +587,7 @@ bool AndroidManifestEditorWidget::setActivePage(EditorPage page)
if (!servicesValid(m_services->services())) {
QMessageBox::critical(nullptr, tr("Service Definition Invalid"),
tr("Cannot switch to source when there are invalid services."));
+ m_advanvedTabWidget->setCurrentIndex(1);
return false;
}
syncToEditor();
diff --git a/src/plugins/android/androidmanifesteditorwidget.h b/src/plugins/android/androidmanifesteditorwidget.h
index 7a69ac49ad..95da8c3312 100644
--- a/src/plugins/android/androidmanifesteditorwidget.h
+++ b/src/plugins/android/androidmanifesteditorwidget.h
@@ -28,6 +28,9 @@
#include <texteditor/texteditor.h>
#include <QAbstractListModel>
+#include <QGroupBox>
+#include <QGridLayout>
+#include <QTabWidget>
#include <QStackedWidget>
#include <QTimer>
@@ -156,6 +159,11 @@ private:
QString parseComment(QXmlStreamReader &reader, QXmlStreamWriter &writer);
void parseUnknownElement(QXmlStreamReader &reader, QXmlStreamWriter &writer, bool ignore=false);
+ QGroupBox *createPermissionsGroupBox(QWidget *parent);
+ QGroupBox *createPackageFormLayout(QWidget *parent);
+ QGroupBox *createApplicationGroupBox(QWidget *parent);
+ QGroupBox *createAdvancedGroupBox(QWidget *parent);
+
bool m_dirty; // indicates that we need to call syncToEditor()
bool m_stayClean;
int m_errorLine;
@@ -192,6 +200,7 @@ private:
TextEditor::TextEditorWidget *m_textEditorWidget;
AndroidManifestEditor *m_editor;
QString m_androidNdkPlatform;
+ QTabWidget *m_advanvedTabWidget = nullptr;
};
} // namespace Internal
} // namespace Android