[Linux] Enhance GUI with icons (#90)

* [Linux] Enhance GUI with icons

* Improve visibility

* Smarter hiding of battery values

* Add simple opacity based ear detection indication

* Hide disconnected devices

* Add airpods 3 icon

* Support more devices

* Better icons

* Add documentation
This commit is contained in:
Tim Gromeyer
2025-03-31 22:57:12 +02:00
committed by GitHub
parent 4e72f6573e
commit e3dab8feb2
14 changed files with 204 additions and 47 deletions

View File

@@ -1,6 +1,7 @@
#pragma once
#include <QMetaType>
#include <QHash>
namespace AirpodsTrayApp
{
@@ -19,5 +20,76 @@ namespace AirpodsTrayApp
MaxValue = Adaptive,
};
Q_ENUM_NS(NoiseControlMode)
enum class AirPodsModel
{
Unknown,
AirPods1,
AirPods2,
AirPods3,
AirPodsPro,
AirPodsPro2Lightning,
AirPodsPro2USBC,
AirPodsMaxLightning,
AirPodsMaxUSBC,
AirPods4,
AirPods4ANC
};
Q_ENUM_NS(AirPodsModel)
// Get model enum from model number
inline AirPodsModel parseModelNumber(const QString &modelNumber)
{
// Model numbers taken from https://support.apple.com/en-us/109525
QHash<QString, AirPodsModel> modelNumberMap = {
{"A1523", AirPodsModel::AirPods1},
{"A1722", AirPodsModel::AirPods1},
{"A2032", AirPodsModel::AirPods2},
{"A2031", AirPodsModel::AirPods2},
{"A2084", AirPodsModel::AirPodsPro},
{"A2083", AirPodsModel::AirPodsPro},
{"A2096", AirPodsModel::AirPodsMaxLightning},
{"A3184", AirPodsModel::AirPodsMaxUSBC},
{"A2565", AirPodsModel::AirPods3},
{"A2564", AirPodsModel::AirPods3},
{"A3047", AirPodsModel::AirPodsPro2USBC},
{"A3048", AirPodsModel::AirPodsPro2USBC},
{"A3049", AirPodsModel::AirPodsPro2USBC},
{"A2931", AirPodsModel::AirPodsPro2Lightning},
{"A2699", AirPodsModel::AirPodsPro2Lightning},
{"A2698", AirPodsModel::AirPodsPro2Lightning},
{"A3053", AirPodsModel::AirPods4},
{"A3050", AirPodsModel::AirPods4},
{"A3054", AirPodsModel::AirPods4},
{"A3056", AirPodsModel::AirPods4ANC},
{"A3055", AirPodsModel::AirPods4ANC},
{"A3057", AirPodsModel::AirPods4ANC}};
return modelNumberMap.value(modelNumber, AirPodsModel::Unknown);
}
// Return icons based on model
inline QPair<QString, QString> getModelIcon(AirPodsModel model) {
switch (model) {
case AirPodsModel::AirPods1:
case AirPodsModel::AirPods2:
return {"pod.png", "pod_case.png"};
case AirPodsModel::AirPods3:
return {"pod3.png", "pod3_case.png"};
case AirPodsModel::AirPods4:
case AirPodsModel::AirPods4ANC:
return {"pod3.png", "pod4_case.png"};
case AirPodsModel::AirPodsPro:
case AirPodsModel::AirPodsPro2Lightning:
case AirPodsModel::AirPodsPro2USBC:
return {"podpro.png", "podpro_case.png"};
case AirPodsModel::AirPodsMaxLightning:
case AirPodsModel::AirPodsMaxUSBC:
return {"max.png", "max_case.png"};
default:
return {"pod.png", "pod_case.png"}; // Default icon for unknown models
}
}
}
}