From c5c2407297d943f8caa75fb8156e93a0915e9f5b Mon Sep 17 00:00:00 2001
From: Daniel Teske <daniel.teske@digia.com>
Date: Wed, 8 May 2013 16:35:05 +0200
Subject: [PATCH] Android: Keep the permissions sorted

The order does not matter but this makes it easier for the user to find
his permission.

Change-Id: Iecb1082c3a67e002df6b0d384a3e02d45673d717
Reviewed-by: Daniel Teske <daniel.teske@digia.com>
---
 .../android/androidpackagecreationwidget.cpp  | 26 ++++++++++++++++---
 1 file changed, 22 insertions(+), 4 deletions(-)

diff --git a/src/plugins/android/androidpackagecreationwidget.cpp b/src/plugins/android/androidpackagecreationwidget.cpp
index c85164d0b88..ad47b561070 100644
--- a/src/plugins/android/androidpackagecreationwidget.cpp
+++ b/src/plugins/android/androidpackagecreationwidget.cpp
@@ -152,6 +152,7 @@ void PermissionsModel::setPermissions(const QStringList &permissions)
 {
     beginResetModel();
     m_permissions = permissions;
+    qSort(m_permissions);
     endResetModel();
 }
 
@@ -162,9 +163,9 @@ const QStringList &PermissionsModel::permissions()
 
 QModelIndex PermissionsModel::addPermission(const QString &permission)
 {
-    const int idx = m_permissions.count();
+    const int idx = qLowerBound(m_permissions, permission) - m_permissions.constBegin();
     beginInsertRows(QModelIndex(), idx, idx);
-    m_permissions.push_back(permission);
+    m_permissions.insert(idx, permission);
     endInsertRows();
     return index(idx);
 }
@@ -175,8 +176,25 @@ bool PermissionsModel::updatePermission(QModelIndex index, const QString &permis
         return false;
     if (m_permissions[index.row()] == permission)
         return false;
-    m_permissions[index.row()] = permission;
-    emit dataChanged(index, index);
+
+    int newIndex = qLowerBound(m_permissions.constBegin(), m_permissions.constEnd(), permission) - m_permissions.constBegin();
+    if (newIndex == index.row() || newIndex == index.row() + 1) {
+        m_permissions[index.row()] = permission;
+        emit dataChanged(index, index);
+        return true;
+    }
+
+    beginMoveRows(QModelIndex(), index.row(), index.row(), QModelIndex(), newIndex);
+
+    if (newIndex > index.row()) {
+        m_permissions.insert(newIndex, permission);
+        m_permissions.removeAt(index.row());
+    } else {
+        m_permissions.removeAt(index.row());
+        m_permissions.insert(newIndex, permission);
+    }
+    endMoveRows();
+
     return true;
 }
 
-- 
GitLab