diff --git a/Classes/AboutView.m b/Classes/AboutView.m
index a11566bef..fad3e915a 100644
--- a/Classes/AboutView.m
+++ b/Classes/AboutView.m
@@ -71,8 +71,8 @@ static UICompositeViewDescription *compositeDescription = nil;
tabBar:nil
sideMenu:SideMenuView.class
fullscreen:false
- landscapeMode:LinphoneManager.runningOnIpad
- portraitMode:true];
+ isLeftFragment:YES
+ fragmentWith:nil];
}
return compositeDescription;
}
diff --git a/Classes/AssistantView.m b/Classes/AssistantView.m
index b63ba79d9..d3e9be48d 100644
--- a/Classes/AssistantView.m
+++ b/Classes/AssistantView.m
@@ -68,8 +68,9 @@ static UICompositeViewDescription *compositeDescription = nil;
tabBar:nil
sideMenu:SideMenuView.class
fullscreen:false
- landscapeMode:true // LinphoneManager.runningOnIpad
- portraitMode:true];
+ isLeftFragment:NO
+ fragmentWith:nil];
+
compositeDescription.darkBackground = true;
}
return compositeDescription;
diff --git a/Classes/Base.lproj/AssistantViewScreens.xib b/Classes/Base.lproj/AssistantViewScreens.xib
index bd514cde7..62b17b32d 100644
--- a/Classes/Base.lproj/AssistantViewScreens.xib
+++ b/Classes/Base.lproj/AssistantViewScreens.xib
@@ -47,7 +47,7 @@
-
@@ -498,12 +458,10 @@
-
-
@@ -517,7 +475,6 @@
-
@@ -535,7 +492,6 @@
-
@@ -551,7 +507,6 @@
-
@@ -564,12 +519,10 @@
-
-
@@ -585,12 +538,10 @@
-
-
@@ -603,7 +554,6 @@
-
@@ -616,7 +566,6 @@
-
@@ -632,7 +581,6 @@
-
@@ -646,7 +594,6 @@
-
@@ -655,7 +602,6 @@
-
@@ -670,7 +616,6 @@
-
@@ -680,7 +625,6 @@
-
@@ -697,12 +641,10 @@
-
-
-
-
-
-
@@ -742,10 +679,9 @@
-
-
@@ -784,7 +717,6 @@
-
@@ -797,13 +729,11 @@
-
-
@@ -812,18 +742,15 @@
-
-
-
@@ -837,13 +764,11 @@
-
-
@@ -852,7 +777,6 @@
-
@@ -865,24 +789,20 @@
-
-
-
-
@@ -892,7 +812,6 @@
-
@@ -902,24 +821,20 @@
-
-
-
-
@@ -934,7 +849,6 @@
-
@@ -947,7 +861,6 @@
-
@@ -958,7 +871,6 @@
-
@@ -969,7 +881,6 @@
-
@@ -980,7 +891,6 @@
-
@@ -991,7 +901,6 @@
-
@@ -1002,7 +911,6 @@
-
@@ -1013,7 +921,6 @@
-
@@ -1024,7 +931,6 @@
-
@@ -1035,7 +941,6 @@
-
@@ -1046,7 +951,6 @@
-
@@ -1057,7 +961,6 @@
-
@@ -1066,7 +969,6 @@
-
@@ -1076,12 +978,10 @@
-
-
@@ -1103,7 +1003,6 @@
-
@@ -1125,7 +1024,6 @@
-
@@ -1145,7 +1043,6 @@
-
@@ -1154,12 +1051,10 @@
-
-
@@ -1173,7 +1068,6 @@
-
@@ -1191,7 +1085,6 @@
-
@@ -1207,7 +1100,6 @@
-
@@ -1220,12 +1112,10 @@
-
-
@@ -1241,7 +1131,6 @@
-
@@ -1254,7 +1143,6 @@
-
@@ -1267,7 +1155,6 @@
-
@@ -1283,7 +1170,6 @@
-
@@ -1299,10 +1185,8 @@
-
-
@@ -1311,7 +1195,6 @@
-
@@ -1326,7 +1209,6 @@
-
@@ -1336,7 +1218,6 @@
-
@@ -1353,12 +1234,10 @@
-
-
@@ -1367,21 +1246,16 @@
-
-
-
-
-
diff --git a/Classes/Base.lproj/CallView~ipad.xib b/Classes/Base.lproj/CallView~ipad.xib
new file mode 100644
index 000000000..d82372b51
--- /dev/null
+++ b/Classes/Base.lproj/CallView~ipad.xib
@@ -0,0 +1,1342 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Classes/Base.lproj/ChatConversationView.xib b/Classes/Base.lproj/ChatConversationView.xib
index aac56f489..f36ddc7ba 100644
--- a/Classes/Base.lproj/ChatConversationView.xib
+++ b/Classes/Base.lproj/ChatConversationView.xib
@@ -1,14 +1,14 @@
-
+
-
+
-
+
@@ -43,12 +43,10 @@
-
-
@@ -64,7 +62,6 @@
-
@@ -80,7 +77,6 @@
-
@@ -91,7 +87,6 @@
-
@@ -104,7 +99,6 @@
-
@@ -118,7 +112,6 @@
-
@@ -133,7 +126,6 @@
-
@@ -149,7 +141,6 @@
-
@@ -164,7 +155,6 @@
-
@@ -173,7 +163,6 @@
-
@@ -190,19 +179,16 @@
-
-
-
@@ -215,12 +201,10 @@
-
-
@@ -234,7 +218,6 @@
-
@@ -249,23 +232,18 @@
-
-
-
-
-
@@ -286,12 +264,10 @@
-
-
@@ -307,7 +283,6 @@
-
@@ -323,7 +298,6 @@
-
@@ -334,7 +308,6 @@
-
@@ -349,7 +322,6 @@
-
@@ -365,7 +337,6 @@
-
@@ -378,7 +349,6 @@
-
@@ -391,7 +361,6 @@
-
@@ -406,7 +375,6 @@
-
@@ -415,7 +383,6 @@
-
@@ -426,7 +393,6 @@
-
@@ -439,13 +405,11 @@
-
-
@@ -455,12 +419,10 @@
-
-
@@ -474,14 +436,12 @@
-
-
@@ -494,18 +454,14 @@
-
-
-
-
diff --git a/Classes/Base.lproj/ContactDetailsView.xib b/Classes/Base.lproj/ContactDetailsView.xib
index 60ee7377c..8509227f8 100644
--- a/Classes/Base.lproj/ContactDetailsView.xib
+++ b/Classes/Base.lproj/ContactDetailsView.xib
@@ -1,8 +1,8 @@
-
+
-
+
@@ -13,6 +13,7 @@
+
@@ -36,12 +37,10 @@
-
-
@@ -56,7 +55,6 @@
-
@@ -73,7 +71,6 @@
-
@@ -90,7 +87,6 @@
-
@@ -106,7 +102,6 @@
-
@@ -115,7 +110,6 @@
-
@@ -123,7 +117,6 @@
-
@@ -131,7 +124,6 @@
-
@@ -141,15 +133,20 @@
-
+
+
+
+
+
+
+
+
-
-
@@ -169,12 +166,10 @@
-
-
@@ -189,7 +184,6 @@
-
@@ -206,7 +200,6 @@
-
@@ -223,7 +216,6 @@
-
@@ -239,7 +231,6 @@
-
@@ -248,12 +239,10 @@
-
-
@@ -261,7 +250,6 @@
-
@@ -271,15 +259,20 @@
-
+
+
+
+
+
+
+
+
-
-
diff --git a/Classes/Base.lproj/DialerView.xib b/Classes/Base.lproj/DialerView.xib
index aa92c7fd6..fa3ac8b53 100644
--- a/Classes/Base.lproj/DialerView.xib
+++ b/Classes/Base.lproj/DialerView.xib
@@ -1,8 +1,8 @@
-
+
-
+
@@ -17,8 +17,10 @@
+
+
@@ -45,12 +47,10 @@
-
-
@@ -63,7 +63,6 @@
-
@@ -74,7 +73,6 @@
-
@@ -83,7 +81,6 @@
-
@@ -98,7 +95,6 @@
-
@@ -112,7 +108,6 @@
-
@@ -126,7 +121,6 @@
-
@@ -140,7 +134,6 @@
-
@@ -154,7 +147,6 @@
-
@@ -168,7 +160,6 @@
-
@@ -182,7 +173,6 @@
-
@@ -196,7 +186,6 @@
-
@@ -210,7 +199,6 @@
-
@@ -224,7 +212,6 @@
-
@@ -238,7 +225,6 @@
-
@@ -250,7 +236,6 @@
-
@@ -260,7 +245,6 @@
-
@@ -275,7 +259,6 @@
-
@@ -290,7 +273,6 @@
-
@@ -305,7 +287,6 @@
-
@@ -320,7 +301,6 @@
-
@@ -333,15 +313,12 @@
-
-
-
diff --git a/Classes/Base.lproj/DialerView~ipad.xib b/Classes/Base.lproj/DialerView~ipad.xib
new file mode 100644
index 000000000..64cb2ed29
--- /dev/null
+++ b/Classes/Base.lproj/DialerView~ipad.xib
@@ -0,0 +1,739 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Classes/Base.lproj/HistoryDetailsView.xib b/Classes/Base.lproj/HistoryDetailsView.xib
index 92909a139..6104ac807 100644
--- a/Classes/Base.lproj/HistoryDetailsView.xib
+++ b/Classes/Base.lproj/HistoryDetailsView.xib
@@ -1,8 +1,8 @@
-
+
-
+
@@ -10,7 +10,9 @@
+
+
@@ -34,12 +36,10 @@
-
-
@@ -52,7 +52,6 @@
-
@@ -63,7 +62,6 @@
-
@@ -72,7 +70,6 @@
-
@@ -81,7 +78,6 @@
-
@@ -90,7 +86,6 @@
-
@@ -99,7 +94,6 @@
-
@@ -108,7 +102,6 @@
-
@@ -121,7 +114,6 @@
-
@@ -132,25 +124,29 @@
-
-
+
+
+
+
+
+
+
+
-
-
@@ -170,12 +166,10 @@
-
-
@@ -188,7 +182,6 @@
-
@@ -199,12 +192,10 @@
-
-
@@ -218,7 +209,6 @@
-
@@ -227,7 +217,6 @@
-
@@ -236,7 +225,6 @@
-
@@ -244,8 +232,7 @@
-
-
+
@@ -257,8 +244,7 @@
-
-
+
@@ -271,22 +257,26 @@
-
-
+
+
+
+
+
+
+
+
-
-
diff --git a/Classes/Base.lproj/LaunchScreen.xib b/Classes/Base.lproj/LaunchScreen.xib
index ce26325fd..7704de7e7 100644
--- a/Classes/Base.lproj/LaunchScreen.xib
+++ b/Classes/Base.lproj/LaunchScreen.xib
@@ -17,46 +17,44 @@
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
@@ -68,6 +66,7 @@
+
diff --git a/Classes/Base.lproj/SideMenuView.xib b/Classes/Base.lproj/SideMenuView.xib
index 4aabcd766..50397d262 100644
--- a/Classes/Base.lproj/SideMenuView.xib
+++ b/Classes/Base.lproj/SideMenuView.xib
@@ -42,7 +42,7 @@
-
+
@@ -84,7 +84,7 @@
-
+
@@ -135,9 +135,4 @@
-
-
-
-
-
diff --git a/Classes/Base.lproj/SideMenuView~ipad.xib b/Classes/Base.lproj/SideMenuView~ipad.xib
new file mode 100644
index 000000000..175226f7a
--- /dev/null
+++ b/Classes/Base.lproj/SideMenuView~ipad.xib
@@ -0,0 +1,138 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Classes/CallIncomingView.m b/Classes/CallIncomingView.m
index 4b2572b71..ec431a6d0 100644
--- a/Classes/CallIncomingView.m
+++ b/Classes/CallIncomingView.m
@@ -53,8 +53,8 @@ static UICompositeViewDescription *compositeDescription = nil;
tabBar:nil
sideMenu:CallSideMenuView.class
fullscreen:false
- landscapeMode:LinphoneManager.runningOnIpad
- portraitMode:true];
+ isLeftFragment:YES
+ fragmentWith:nil];
compositeDescription.darkBackground = true;
}
return compositeDescription;
diff --git a/Classes/CallOutgoingView.m b/Classes/CallOutgoingView.m
index 309254d6c..b8807ca08 100644
--- a/Classes/CallOutgoingView.m
+++ b/Classes/CallOutgoingView.m
@@ -33,8 +33,9 @@ static UICompositeViewDescription *compositeDescription = nil;
tabBar:nil
sideMenu:CallSideMenuView.class
fullscreen:false
- landscapeMode:LinphoneManager.runningOnIpad
- portraitMode:true];
+ isLeftFragment:NO
+ fragmentWith:nil];
+
compositeDescription.darkBackground = true;
}
return compositeDescription;
diff --git a/Classes/CallView.m b/Classes/CallView.m
index 346050f8a..87692f006 100644
--- a/Classes/CallView.m
+++ b/Classes/CallView.m
@@ -60,8 +60,8 @@ static UICompositeViewDescription *compositeDescription = nil;
tabBar:nil
sideMenu:CallSideMenuView.class
fullscreen:false
- landscapeMode:false
- portraitMode:true];
+ isLeftFragment:YES
+ fragmentWith:nil];
compositeDescription.darkBackground = true;
}
return compositeDescription;
diff --git a/Classes/ChatConversationCreateView.m b/Classes/ChatConversationCreateView.m
index a0ed0ae8c..71f82e283 100644
--- a/Classes/ChatConversationCreateView.m
+++ b/Classes/ChatConversationCreateView.m
@@ -22,8 +22,8 @@ static UICompositeViewDescription *compositeDescription = nil;
tabBar:TabBarView.class
sideMenu:SideMenuView.class
fullscreen:false
- landscapeMode:false
- portraitMode:true];
+ isLeftFragment:NO
+ fragmentWith:ChatsListView.class];
}
return compositeDescription;
}
diff --git a/Classes/ChatConversationView.h b/Classes/ChatConversationView.h
index 4438d68f0..cf28ebac1 100644
--- a/Classes/ChatConversationView.h
+++ b/Classes/ChatConversationView.h
@@ -39,6 +39,7 @@
BOOL composingVisible;
}
+@property(weak, nonatomic) IBOutlet UIIconButton *backButton;
@property(nonatomic, strong) IBOutlet ChatConversationTableView *tableController;
@property(weak, nonatomic) IBOutlet HPGrowingTextView *messageField;
@property(weak, nonatomic) IBOutlet UIView *topBar;
@@ -51,7 +52,6 @@
@property(strong, nonatomic) IBOutlet UILabel *composeLabel;
@property(strong, nonatomic) IBOutlet UIView *composeIndicatorView;
@property(nonatomic, strong) IBOutlet UIButton *pictureButton;
-@property(weak, nonatomic) IBOutlet UIIconButton *backButton;
@property(weak, nonatomic) IBOutlet UIIconButton *callButton;
@property(weak, nonatomic) IBOutlet UIBackToCallButton *backToCallButton;
diff --git a/Classes/ChatConversationView.m b/Classes/ChatConversationView.m
index 02da23aa1..d5d4cc6f2 100644
--- a/Classes/ChatConversationView.m
+++ b/Classes/ChatConversationView.m
@@ -56,8 +56,8 @@ static UICompositeViewDescription *compositeDescription = nil;
tabBar:TabBarView.class
sideMenu:SideMenuView.class
fullscreen:false
- landscapeMode:false
- portraitMode:true];
+ isLeftFragment:NO
+ fragmentWith:ChatsListView.class];
}
return compositeDescription;
}
@@ -71,6 +71,12 @@ static UICompositeViewDescription *compositeDescription = nil;
- (void)viewDidLoad {
[super viewDidLoad];
+ // if we use fragments, remove back button
+ if (LinphoneManager.runningOnIpad) {
+ _backButton.hidden = YES;
+ _backButton.alpha = 0;
+ }
+
_messageField.minNumberOfLines = 1;
_messageField.maxNumberOfLines = ([LinphoneManager runningOnIpad]) ? 10 : 3;
_messageField.delegate = self;
@@ -155,7 +161,7 @@ static UICompositeViewDescription *compositeDescription = nil;
[self update];
linphone_chat_room_mark_as_read(chatRoom);
[self setComposingVisible:linphone_chat_room_is_remote_composing(chatRoom) withDelay:0];
- [[NSNotificationCenter defaultCenter] postNotificationName:kLinphoneMessageReceived object:self];
+ // [[NSNotificationCenter defaultCenter] postNotificationName:kLinphoneMessageReceived object:self];
} else {
_chatView.hidden = YES;
}
@@ -164,7 +170,7 @@ static UICompositeViewDescription *compositeDescription = nil;
- (void)applicationWillEnterForeground:(NSNotification *)notif {
if (chatRoom != nil) {
linphone_chat_room_mark_as_read(chatRoom);
- [[NSNotificationCenter defaultCenter] postNotificationName:kLinphoneMessageReceived object:self];
+ // [[NSNotificationCenter defaultCenter] postNotificationName:kLinphoneMessageReceived object:self];
}
}
@@ -461,8 +467,7 @@ static UICompositeViewDescription *compositeDescription = nil;
- (IBAction)onBackClick:(id)event {
[_tableController setChatRoom:NULL];
- ChatsListView *view = VIEW(ChatsListView);
- [PhoneMainView.instance popToView:view.compositeViewDescription];
+ [PhoneMainView.instance popToView:ChatsListView.compositeViewDescription];
}
- (IBAction)onEditClick:(id)event {
@@ -484,7 +489,7 @@ static UICompositeViewDescription *compositeDescription = nil;
}
- (IBAction)onDeleteClick:(id)sender {
- NSString *msg = [NSString stringWithFormat:NSLocalizedString(@"Do you want to delete selected message?", nil)];
+ NSString *msg = [NSString stringWithFormat:NSLocalizedString(@"Do you want to delete selected messages?", nil)];
[UIConfirmationDialog ShowWithMessage:msg
cancelMessage:nil
confirmMessage:nil
diff --git a/Classes/ChatsListTableView.m b/Classes/ChatsListTableView.m
index 35f5a884a..2a79a50cd 100644
--- a/Classes/ChatsListTableView.m
+++ b/Classes/ChatsListTableView.m
@@ -108,6 +108,16 @@ static void chatTable_free_chatrooms(void *data) {
}
data = [self sortChatRooms];
[super loadData];
+
+ // reset conversation view since in fragment mode, conversations are relative to current data
+ // select first conversation if any
+ if ([self totalNumberOfItems] > 0) {
+ ChatConversationView *view = VIEW(ChatConversationView);
+ [view setChatRoom:(LinphoneChatRoom *)ms_list_nth_data(data, 0)];
+ [PhoneMainView.instance changeCurrentView:view.compositeViewDescription];
+ } else {
+ [PhoneMainView.instance changeCurrentView:ChatConversationCreateView.compositeViewDescription];
+ }
}
#pragma mark - UITableViewDataSource Functions
diff --git a/Classes/ChatsListView.m b/Classes/ChatsListView.m
index 09aa697e6..3660a62e0 100644
--- a/Classes/ChatsListView.m
+++ b/Classes/ChatsListView.m
@@ -58,8 +58,8 @@ static UICompositeViewDescription *compositeDescription = nil;
tabBar:TabBarView.class
sideMenu:SideMenuView.class
fullscreen:false
- landscapeMode:LinphoneManager.runningOnIpad
- portraitMode:true];
+ isLeftFragment:YES
+ fragmentWith:ChatConversationCreateView.class];
}
return compositeDescription;
}
@@ -81,7 +81,8 @@ static UICompositeViewDescription *compositeDescription = nil;
}
- (IBAction)onDeleteClick:(id)sender {
- NSString *msg = [NSString stringWithFormat:NSLocalizedString(@"Do you want to delete selected conversation?", nil)];
+ NSString *msg =
+ [NSString stringWithFormat:NSLocalizedString(@"Do you want to delete selected conversations?", nil)];
[UIConfirmationDialog ShowWithMessage:msg
cancelMessage:nil
confirmMessage:nil
diff --git a/Classes/ContactDetailsView.h b/Classes/ContactDetailsView.h
index a2ebe9d20..4927ee42f 100644
--- a/Classes/ContactDetailsView.h
+++ b/Classes/ContactDetailsView.h
@@ -41,6 +41,7 @@
@property(weak, nonatomic) IBOutlet UILabel *nameLabel;
@property(weak, nonatomic) IBOutlet UIToggleButton *deleteButton;
@property(weak, nonatomic) IBOutlet UIView *contentView;
+@property(weak, nonatomic) IBOutlet UILabel *emptyLabel;
- (IBAction)onBackClick:(id)event;
- (IBAction)onCancelClick:(id)event;
diff --git a/Classes/ContactDetailsView.m b/Classes/ContactDetailsView.m
index 433e9e8f1..a5a2e4122 100644
--- a/Classes/ContactDetailsView.m
+++ b/Classes/ContactDetailsView.m
@@ -112,6 +112,9 @@ static void sync_address_book(ABAddressBookRef addressBook, CFDictionaryRef info
- (void)selectContact:(ABRecordRef)acontact andReload:(BOOL)reload {
_contact = NULL;
[self resetData];
+
+ _emptyLabel.hidden = (acontact != NULL);
+
_contact = acontact;
[_avatarImage setImage:[FastAddressBook imageForContact:_contact thumbnail:NO] bordered:NO withRoundedRadius:YES];
[ContactDisplay setDisplayNameLabel:_nameLabel forContact:acontact];
@@ -168,20 +171,28 @@ static void sync_address_book(ABAddressBookRef addressBook, CFDictionaryRef info
#pragma mark - ViewController Functions
-- (void)viewWillAppear:(BOOL)animated {
- [super viewWillAppear:animated];
+- (void)viewDidLoad {
+ [super viewDidLoad];
+
+ // if we use fragments, remove back button
+ if (LinphoneManager.runningOnIpad) {
+ _backButton.hidden = YES;
+ _backButton.alpha = 0;
+ }
+
+ [self setContact:NULL];
_tableController.tableView.accessibilityIdentifier = @"Contact table";
[_editButton setImage:[UIImage imageNamed:@"valid_disabled.png"]
forState:(UIControlStateDisabled | UIControlStateSelected)];
+}
- if ([ContactSelection getSelectionMode] == ContactSelectionModeEdit ||
- [ContactSelection getSelectionMode] == ContactSelectionModeNone) {
- [_editButton setHidden:FALSE];
- } else {
- [_editButton setHidden:TRUE];
- }
+- (void)viewWillAppear:(BOOL)animated {
+ [super viewWillAppear:animated];
+
+ _editButton.hidden = ([ContactSelection getSelectionMode] != ContactSelectionModeEdit &&
+ [ContactSelection getSelectionMode] != ContactSelectionModeNone);
}
#pragma mark - UICompositeViewDelegate Functions
@@ -195,8 +206,8 @@ static UICompositeViewDescription *compositeDescription = nil;
tabBar:TabBarView.class
sideMenu:SideMenuView.class
fullscreen:false
- landscapeMode:LinphoneManager.runningOnIpad
- portraitMode:true];
+ isLeftFragment:NO
+ fragmentWith:ContactsListView.class];
}
return compositeDescription;
}
@@ -273,7 +284,7 @@ static UICompositeViewDescription *compositeDescription = nil;
}
- (IBAction)onDeleteClick:(id)sender {
- NSString *msg = NSLocalizedString(@"Do you want to delete selected this contact?", nil);
+ NSString *msg = NSLocalizedString(@"Do you want to delete selected contact?", nil);
[UIConfirmationDialog ShowWithMessage:msg
cancelMessage:nil
confirmMessage:nil
diff --git a/Classes/ContactsListTableView.m b/Classes/ContactsListTableView.m
index 17efd91a9..6fdaea794 100644
--- a/Classes/ContactsListTableView.m
+++ b/Classes/ContactsListTableView.m
@@ -144,6 +144,12 @@ static int ms_strcmpfuz(const char *fuzzy_word, const char *sentence) {
}
}
[super loadData];
+ // reset details view since in fragment mode, details are relative to current data
+ // select first contact if any
+ ABRecordRef contact =
+ ([self totalNumberOfItems] > 0) ? [self contactForIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]] : nil;
+ ContactDetailsView *view = VIEW(ContactDetailsView);
+ [view setContact:contact];
}
static void sync_address_book(ABAddressBookRef addressBook, CFDictionaryRef info, void *context) {
@@ -167,16 +173,20 @@ static void sync_address_book(ABAddressBookRef addressBook, CFDictionaryRef info
return [(OrderedDictionary *)[addressBookMap objectForKey:[addressBookMap keyAtIndex:section]] count];
}
+- (ABRecordRef)contactForIndexPath:(NSIndexPath *)indexPath {
+
+ OrderedDictionary *subDic = [addressBookMap objectForKey:[addressBookMap keyAtIndex:[indexPath section]]];
+ NSString *key = [[subDic allKeys] objectAtIndex:[indexPath row]];
+ return (__bridge ABRecordRef)([subDic objectForKey:key]);
+}
+
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *kCellId = NSStringFromClass(UIContactCell.class);
UIContactCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellId];
if (cell == nil) {
cell = [[UIContactCell alloc] initWithIdentifier:kCellId];
}
- OrderedDictionary *subDic = [addressBookMap objectForKey:[addressBookMap keyAtIndex:[indexPath section]]];
-
- NSString *key = [[subDic allKeys] objectAtIndex:[indexPath row]];
- ABRecordRef contact = (__bridge ABRecordRef)([subDic objectForKey:key]);
+ ABRecordRef contact = [self contactForIndexPath:indexPath];
// Cached avatar
UIImage *image = [avatarMap objectForKey:[NSNumber numberWithInt:ABRecordGetRecordID(contact)]];
diff --git a/Classes/ContactsListView.m b/Classes/ContactsListView.m
index 5b6e3be53..f027b671b 100644
--- a/Classes/ContactsListView.m
+++ b/Classes/ContactsListView.m
@@ -96,8 +96,8 @@ static UICompositeViewDescription *compositeDescription = nil;
tabBar:TabBarView.class
sideMenu:SideMenuView.class
fullscreen:false
- landscapeMode:LinphoneManager.runningOnIpad
- portraitMode:true];
+ isLeftFragment:YES
+ fragmentWith:ContactDetailsView.class];
}
return compositeDescription;
}
@@ -194,7 +194,7 @@ static UICompositeViewDescription *compositeDescription = nil;
}
- (IBAction)onDeleteClick:(id)sender {
- NSString *msg = [NSString stringWithFormat:NSLocalizedString(@"Do you want to delete selected contact?", nil)];
+ NSString *msg = [NSString stringWithFormat:NSLocalizedString(@"Do you want to delete selected contacts?", nil)];
[UIConfirmationDialog ShowWithMessage:msg
cancelMessage:nil
confirmMessage:nil
diff --git a/Classes/DialerView.h b/Classes/DialerView.h
index d080676f2..c9321d6b7 100644
--- a/Classes/DialerView.h
+++ b/Classes/DialerView.h
@@ -27,7 +27,7 @@
#import "UIDigitButton.h"
@interface DialerView
- : UIViewController {
+ : TPMultiLayoutViewController {
}
- (void)setAddress:(NSString *)address;
diff --git a/Classes/DialerView.m b/Classes/DialerView.m
index 708cc7d95..e0a9664cc 100644
--- a/Classes/DialerView.m
+++ b/Classes/DialerView.m
@@ -78,8 +78,8 @@ static UICompositeViewDescription *compositeDescription = nil;
tabBar:TabBarView.class
sideMenu:SideMenuView.class
fullscreen:false
- landscapeMode:LinphoneManager.runningOnIpad
- portraitMode:true];
+ isLeftFragment:YES
+ fragmentWith:nil];
compositeDescription.darkBackground = true;
}
return compositeDescription;
diff --git a/Classes/FirstLoginView.m b/Classes/FirstLoginView.m
index 99d5e7a63..cd2473341 100644
--- a/Classes/FirstLoginView.m
+++ b/Classes/FirstLoginView.m
@@ -36,8 +36,8 @@ static UICompositeViewDescription *compositeDescription = nil;
tabBar:nil
sideMenu:nil
fullscreen:false
- landscapeMode:LinphoneManager.runningOnIpad
- portraitMode:true];
+ isLeftFragment:NO
+ fragmentWith:nil];
}
return compositeDescription;
}
diff --git a/Classes/HistoryDetailsTableView.m b/Classes/HistoryDetailsTableView.m
index a8a11eefe..998b26949 100644
--- a/Classes/HistoryDetailsTableView.m
+++ b/Classes/HistoryDetailsTableView.m
@@ -18,11 +18,16 @@
} else {
[callLogs removeAllObjects];
}
- const MSList *logs = linphone_core_get_call_history_for_address([LinphoneManager getLc], peer);
- while (logs != NULL) {
- LinphoneCallLog *log = (LinphoneCallLog *)logs->data;
- [callLogs addObject:[NSValue valueWithPointer:log]];
- logs = ms_list_next(logs);
+
+ if (peer) {
+ const MSList *logs = linphone_core_get_call_history_for_address([LinphoneManager getLc], peer);
+ while (logs != NULL) {
+ LinphoneCallLog *log = (LinphoneCallLog *)logs->data;
+ if (linphone_address_weak_equal(linphone_call_log_get_remote_address(log), peer)) {
+ [callLogs addObject:[NSValue valueWithPointer:log]];
+ }
+ logs = ms_list_next(logs);
+ }
}
[[self tableView] reloadData];
}
diff --git a/Classes/HistoryDetailsView.h b/Classes/HistoryDetailsView.h
index 3ae2801b9..355d53b56 100644
--- a/Classes/HistoryDetailsView.h
+++ b/Classes/HistoryDetailsView.h
@@ -29,6 +29,7 @@
@private
LinphoneCallLog *callLog;
}
+@property(weak, nonatomic) IBOutlet UIButton *backButton;
@property(weak, nonatomic) IBOutlet UILabel *contactLabel;
@property(nonatomic, strong) IBOutlet UIRoundedImageView *avatarImage;
@property(nonatomic, strong) IBOutlet UILabel *addressLabel;
@@ -36,6 +37,7 @@
@property(nonatomic, copy, setter=setCallLogId:) NSString *callLogId;
@property(weak, nonatomic) IBOutlet UIView *headerView;
@property(strong, nonatomic) IBOutlet HistoryDetailsTableView *tableView;
+@property(weak, nonatomic) IBOutlet UILabel *emptyLabel;
- (IBAction)onBackClick:(id)event;
- (IBAction)onAddContactClick:(id)event;
diff --git a/Classes/HistoryDetailsView.m b/Classes/HistoryDetailsView.m
index 7bf73ab92..1d92a47b5 100644
--- a/Classes/HistoryDetailsView.m
+++ b/Classes/HistoryDetailsView.m
@@ -34,8 +34,8 @@ static UICompositeViewDescription *compositeDescription = nil;
tabBar:TabBarView.class
sideMenu:SideMenuView.class
fullscreen:false
- landscapeMode:LinphoneManager.runningOnIpad
- portraitMode:true];
+ isLeftFragment:NO
+ fragmentWith:HistoryListView.class];
}
return compositeDescription;
}
@@ -56,6 +56,12 @@ static UICompositeViewDescription *compositeDescription = nil;
- (void)viewDidLoad {
[super viewDidLoad];
+ // if we use fragments, remove back button
+ if (LinphoneManager.runningOnIpad) {
+ _backButton.hidden = YES;
+ _backButton.alpha = 0;
+ }
+
UITapGestureRecognizer *headerTapGesture =
[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onContactClick:)];
[_headerView addGestureRecognizer:headerTapGesture];
@@ -65,7 +71,6 @@ static UICompositeViewDescription *compositeDescription = nil;
[super viewWillAppear:animated];
[self update];
- [_tableView loadDataForAddress:(callLog ? linphone_call_log_get_remote_address(callLog) : NULL)];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(update)
@@ -91,52 +96,29 @@ static UICompositeViewDescription *compositeDescription = nil;
#pragma mark -
-+ (void)adaptSize:(UILabel *)label field:(UIView *)field {
- //
- // Adapt size
- //
- CGRect labelFrame = [label frame];
- CGRect fieldFrame = [field frame];
-
- fieldFrame.origin.x -= labelFrame.size.width;
-
- // Compute firstName size
- CGSize contraints;
- contraints.height = [label frame].size.height;
- contraints.width = ([field frame].size.width + [field frame].origin.x) - [label frame].origin.x;
- CGSize firstNameSize = [[label text] sizeWithFont:[label font] constrainedToSize:contraints];
- labelFrame.size.width = firstNameSize.width;
-
- // Compute lastName size & position
- fieldFrame.origin.x += labelFrame.size.width;
- fieldFrame.size.width = (contraints.width + [label frame].origin.x) - fieldFrame.origin.x;
-
- [label setFrame:labelFrame];
- [field setFrame:fieldFrame];
-}
-
-- (void)retrieveCallLog {
+- (void)update {
// Look for the call log
callLog = NULL;
- const MSList *list = linphone_core_get_call_logs([LinphoneManager getLc]);
- while (list != NULL) {
- LinphoneCallLog *log = (LinphoneCallLog *)list->data;
- const char *cid = linphone_call_log_get_call_id(log);
- if (cid != NULL && [_callLogId isEqualToString:[NSString stringWithUTF8String:cid]]) {
- callLog = log;
- break;
+ if (_callLogId) {
+ const MSList *list = linphone_core_get_call_logs([LinphoneManager getLc]);
+ while (list != NULL) {
+ LinphoneCallLog *log = (LinphoneCallLog *)list->data;
+ const char *cid = linphone_call_log_get_call_id(log);
+ if (cid != NULL && [_callLogId isEqualToString:[NSString stringWithUTF8String:cid]]) {
+ callLog = log;
+ break;
+ }
+ list = list->next;
}
- list = list->next;
}
-}
-- (void)update {
// Pop if callLog is null
- [self retrieveCallLog];
if (callLog == NULL) {
- [PhoneMainView.instance popCurrentView];
+ _emptyLabel.hidden = NO;
+ _addContactButton.hidden = YES;
return;
}
+ _emptyLabel.hidden = YES;
LinphoneAddress *addr = linphone_call_log_get_remote_address(callLog);
_addContactButton.hidden = ([FastAddressBook getContactWithAddress:addr] != nil);
@@ -145,6 +127,8 @@ static UICompositeViewDescription *compositeDescription = nil;
char *addrURI = linphone_address_as_string_uri_only(addr);
_addressLabel.text = [NSString stringWithUTF8String:addrURI];
ms_free(addrURI);
+
+ [_tableView loadDataForAddress:(callLog ? linphone_call_log_get_remote_address(callLog) : NULL)];
}
#pragma mark - Action Functions
diff --git a/Classes/HistoryListTableView.m b/Classes/HistoryListTableView.m
index e73bff879..e26b3efe9 100644
--- a/Classes/HistoryListTableView.m
+++ b/Classes/HistoryListTableView.m
@@ -104,6 +104,12 @@
}
- (void)loadData {
+ for (id day in self.sections.allKeys) {
+ for (id log in self.sections[day]) {
+ linphone_call_log_unref([log pointerValue]);
+ }
+ }
+
const MSList *logs = linphone_core_get_call_logs([LinphoneManager getLc]);
self.sections = [NSMutableDictionary dictionary];
while (logs != NULL) {
@@ -128,8 +134,7 @@
list = ms_list_append(list, log);
linphone_call_log_set_user_data(prev, list);
} else {
- linphone_call_log_set_user_data(log, NULL);
- [eventsOnThisDay addObject:[NSValue valueWithPointer:log]];
+ [eventsOnThisDay addObject:[NSValue valueWithPointer:linphone_call_log_ref(log)]];
}
}
logs = ms_list_next(logs);
@@ -138,6 +143,17 @@
[self computeSections];
[super loadData];
+
+ // reset details view since in fragment mode, details are relative to current data
+ // select first log if any
+ NSString *callId = nil;
+ if ([self totalNumberOfItems] > 0) {
+ id logId = [_sections objectForKey:_sortedDays[0]][0];
+ LinphoneCallLog *log = [logId pointerValue];
+ callId = [NSString stringWithUTF8String:linphone_call_log_get_call_id(log) ?: ""];
+ }
+ HistoryDetailsView *view = VIEW(HistoryDetailsView);
+ [view setCallLogId:callId];
}
- (void)computeSections {
@@ -222,7 +238,13 @@
[tableView beginUpdates];
id log = [_sections objectForKey:_sortedDays[indexPath.section]][indexPath.row];
LinphoneCallLog *callLog = [log pointerValue];
+ MSList *count = linphone_call_log_get_user_data(callLog);
+ while (count) {
+ linphone_core_remove_call_log([LinphoneManager getLc], count->data);
+ count = count->next;
+ }
linphone_core_remove_call_log([LinphoneManager getLc], callLog);
+ linphone_call_log_unref(callLog);
[[_sections objectForKey:_sortedDays[indexPath.section]] removeObject:log];
if (((NSArray *)[_sections objectForKey:_sortedDays[indexPath.section]]).count == 0) {
[_sections removeObjectForKey:_sortedDays[indexPath.section]];
@@ -247,6 +269,7 @@
count = count->next;
}
linphone_core_remove_call_log([LinphoneManager getLc], callLog);
+ linphone_call_log_unref(callLog);
[[_sections objectForKey:_sortedDays[indexPath.section]] removeObject:log];
if (((NSArray *)[_sections objectForKey:_sortedDays[indexPath.section]]).count == 0) {
[_sections removeObjectForKey:_sortedDays[indexPath.section]];
diff --git a/Classes/HistoryListView.m b/Classes/HistoryListView.m
index eb4296257..fa9c6be73 100644
--- a/Classes/HistoryListView.m
+++ b/Classes/HistoryListView.m
@@ -19,6 +19,7 @@
#import "HistoryListView.h"
#import "PhoneMainView.h"
+#import "LinphoneUI/UIHistoryCell.h"
@implementation HistoryListView
@@ -35,8 +36,8 @@ static UICompositeViewDescription *compositeDescription = nil;
tabBar:TabBarView.class
sideMenu:SideMenuView.class
fullscreen:false
- landscapeMode:LinphoneManager.runningOnIpad
- portraitMode:true];
+ isLeftFragment:YES
+ fragmentWith:HistoryDetailsView.class];
}
return compositeDescription;
}
@@ -91,7 +92,7 @@ static UICompositeViewDescription *compositeDescription = nil;
}
- (IBAction)onDeleteClick:(id)event {
- NSString *msg = [NSString stringWithFormat:NSLocalizedString(@"Do you want to delete selected log?", nil)];
+ NSString *msg = [NSString stringWithFormat:NSLocalizedString(@"Do you want to delete selected logs?", nil)];
[UIConfirmationDialog ShowWithMessage:msg
cancelMessage:nil
confirmMessage:nil
diff --git a/Classes/ImagePickerView.m b/Classes/ImagePickerView.m
index 8ef50c0a0..d20c87566 100644
--- a/Classes/ImagePickerView.m
+++ b/Classes/ImagePickerView.m
@@ -54,8 +54,8 @@ static UICompositeViewDescription *compositeDescription = nil;
tabBar:nil
sideMenu:SideMenuView.class
fullscreen:false
- landscapeMode:LinphoneManager.runningOnIpad
- portraitMode:true];
+ isLeftFragment:NO
+ fragmentWith:nil];
compositeDescription.darkBackground = false;
}
return compositeDescription;
diff --git a/Classes/ImageView.m b/Classes/ImageView.m
index 28748683c..83d903ec8 100644
--- a/Classes/ImageView.m
+++ b/Classes/ImageView.m
@@ -123,8 +123,8 @@ static UICompositeViewDescription *compositeDescription = nil;
tabBar:nil
sideMenu:SideMenuView.class
fullscreen:false
- landscapeMode:LinphoneManager.runningOnIpad
- portraitMode:true];
+ isLeftFragment:NO
+ fragmentWith:nil];
}
return compositeDescription;
}
diff --git a/Classes/LinphoneUI/Base.lproj/StatusBarView.xib b/Classes/LinphoneUI/Base.lproj/StatusBarView.xib
index ef33fb4e0..d0caf7bd6 100644
--- a/Classes/LinphoneUI/Base.lproj/StatusBarView.xib
+++ b/Classes/LinphoneUI/Base.lproj/StatusBarView.xib
@@ -1,8 +1,8 @@
-
+
-
+
@@ -26,16 +26,14 @@
-
-
-
-
+
+
@@ -52,9 +50,8 @@
-
-
-
+
+
@@ -64,16 +61,14 @@
-
-
+
-
-
-
+
+
@@ -83,10 +78,9 @@
-
-
+
+
-
@@ -95,12 +89,10 @@
-
-
-
+
@@ -112,7 +104,6 @@
-
diff --git a/Classes/LinphoneUI/Base.lproj/TabBarView.xib b/Classes/LinphoneUI/Base.lproj/TabBarView.xib
index c8f03344a..20789ebf3 100644
--- a/Classes/LinphoneUI/Base.lproj/TabBarView.xib
+++ b/Classes/LinphoneUI/Base.lproj/TabBarView.xib
@@ -1,8 +1,8 @@
-
+
-
+
@@ -29,12 +29,10 @@
-
-
@@ -46,7 +44,6 @@
-
@@ -62,7 +59,6 @@
-
@@ -74,7 +70,6 @@
-
@@ -87,21 +82,18 @@
-
-
+
-
-
@@ -110,22 +102,19 @@
-
-
+
-
-
@@ -134,11 +123,9 @@
-
-
@@ -150,12 +137,10 @@
-
-
@@ -171,7 +156,6 @@
-
@@ -183,7 +167,6 @@
-
@@ -196,21 +179,18 @@
-
-
+
-
-
@@ -219,22 +199,19 @@
-
-
+
-
-
@@ -243,13 +220,11 @@
-
-
@@ -259,7 +234,6 @@
-
diff --git a/Classes/LinphoneUI/Base.lproj/UICallConferenceCell.xib b/Classes/LinphoneUI/Base.lproj/UICallConferenceCell.xib
index b8148544c..0b81fa266 100644
--- a/Classes/LinphoneUI/Base.lproj/UICallConferenceCell.xib
+++ b/Classes/LinphoneUI/Base.lproj/UICallConferenceCell.xib
@@ -1,8 +1,8 @@
-
+
-
+
@@ -20,16 +20,30 @@
-
-
-
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -40,26 +54,7 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Classes/LinphoneUI/Base.lproj/UICompositeView.xib b/Classes/LinphoneUI/Base.lproj/UICompositeView.xib
index 32428d092..1668cddf2 100644
--- a/Classes/LinphoneUI/Base.lproj/UICompositeView.xib
+++ b/Classes/LinphoneUI/Base.lproj/UICompositeView.xib
@@ -8,8 +8,9 @@
-
+
+
@@ -22,8 +23,18 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
+
@@ -59,8 +70,14 @@
-
-
+
+
+
+
+
+
+
+
diff --git a/Classes/LinphoneUI/Base.lproj/UICompositeView~ipad.xib b/Classes/LinphoneUI/Base.lproj/UICompositeView~ipad.xib
new file mode 100644
index 000000000..d4b20b633
--- /dev/null
+++ b/Classes/LinphoneUI/Base.lproj/UICompositeView~ipad.xib
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Classes/LinphoneUI/Base.lproj/UIConfirmationDialog.xib b/Classes/LinphoneUI/Base.lproj/UIConfirmationDialog.xib
index ff821e1e2..7cd0c8bb0 100644
--- a/Classes/LinphoneUI/Base.lproj/UIConfirmationDialog.xib
+++ b/Classes/LinphoneUI/Base.lproj/UIConfirmationDialog.xib
@@ -23,40 +23,47 @@
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
diff --git a/Classes/LinphoneUI/Base.lproj/UIContactCell.xib b/Classes/LinphoneUI/Base.lproj/UIContactCell.xib
index e096a978d..5754ba770 100644
--- a/Classes/LinphoneUI/Base.lproj/UIContactCell.xib
+++ b/Classes/LinphoneUI/Base.lproj/UIContactCell.xib
@@ -1,8 +1,8 @@
-
+
-
+
@@ -20,12 +20,10 @@
-
-
@@ -33,11 +31,9 @@
-
-
+
-
diff --git a/Classes/LinphoneUI/StatusBarView.m b/Classes/LinphoneUI/StatusBarView.m
index 4d5f759ee..1e0b19cdc 100644
--- a/Classes/LinphoneUI/StatusBarView.m
+++ b/Classes/LinphoneUI/StatusBarView.m
@@ -342,7 +342,14 @@
}
- (IBAction)onRegistrationStateClick:(id)sender {
- linphone_core_refresh_registers([LinphoneManager getLc]);
+ LinphoneCore *lc = [LinphoneManager getLc];
+ if (linphone_core_get_default_proxy_config(lc)) {
+ linphone_core_refresh_registers(lc);
+ } else if (linphone_core_get_proxy_config_list(lc)) {
+ [PhoneMainView.instance changeCurrentView:SettingsView.compositeViewDescription];
+ } else {
+ [PhoneMainView.instance changeCurrentView:AssistantView.compositeViewDescription];
+ }
}
@end
diff --git a/Classes/LinphoneUI/UIBouncingView.m b/Classes/LinphoneUI/UIBouncingView.m
index 60e4ce007..b56157b69 100644
--- a/Classes/LinphoneUI/UIBouncingView.m
+++ b/Classes/LinphoneUI/UIBouncingView.m
@@ -29,6 +29,10 @@ INIT_WITH_COMMON {
return self;
}
+- (void)dealloc {
+ [[NSNotificationCenter defaultCenter] removeObserver:self];
+}
+
- (void)settingsUpdate:(NSNotification *)notif {
if ([[LinphoneManager instance] lpConfigBoolForKey:@"animations_preference"] == false) {
[self stopBounceAnimation:kBounceAnimation target:self];
@@ -92,6 +96,9 @@ INIT_WITH_COMMON {
}
- (void)startAnimating:(BOOL)animated {
+ if (!self.hidden) {
+ return;
+ }
[self setHidden:FALSE];
if ([[LinphoneManager instance] lpConfigBoolForKey:@"animations_preference"] == true) {
if (animated) {
@@ -108,6 +115,10 @@ INIT_WITH_COMMON {
}
- (void)stopAnimating:(BOOL)animated {
+ if (self.hidden) {
+ return;
+ }
+
[self stopBounceAnimation:kBounceAnimation target:self];
if (animated) {
[self disappearAnimation:kDisappearAnimation
diff --git a/Classes/LinphoneUI/UICamSwitch.m b/Classes/LinphoneUI/UICamSwitch.m
index eb2d64a50..6716ff59b 100644
--- a/Classes/LinphoneUI/UICamSwitch.m
+++ b/Classes/LinphoneUI/UICamSwitch.m
@@ -26,39 +26,11 @@
#pragma mark - Lifecycle Functions
-- (id)initUICamSwitch {
+INIT_WITH_COMMON {
[self addTarget:self action:@selector(touchUp:) forControlEvents:UIControlEventTouchUpInside];
return self;
}
-- (id)init {
- self = [super init];
- if (self) {
- if (!(self = [self initUICamSwitch]))
- return nil;
- }
- return self;
-}
-
-- (id)initWithFrame:(CGRect)frame {
-
- self = [super initWithFrame:frame];
- if (self) {
- if (!(self = [self initUICamSwitch]))
- return nil;
- }
- return self;
-}
-
-- (id)initWithCoder:(NSCoder *)decoder {
- self = [super initWithCoder:decoder];
- if (self) {
- if (!(self = [self initUICamSwitch]))
- return nil;
- }
- return self;
-}
-
#pragma mark -
- (void)touchUp:(id)sender {
diff --git a/Classes/LinphoneUI/UIChatBubbleTextCell.m b/Classes/LinphoneUI/UIChatBubbleTextCell.m
index c50521f44..e529141cf 100644
--- a/Classes/LinphoneUI/UIChatBubbleTextCell.m
+++ b/Classes/LinphoneUI/UIChatBubbleTextCell.m
@@ -276,11 +276,12 @@ static const CGFloat CELL_IMAGE_WIDTH = 100.0f;
[[UIChatBubbleTextCell alloc] initWithIdentifier:NSStringFromClass(UIChatBubbleTextCell.class)];
dateFont = cell.contactDateLabel.font;
dateViewSize = cell.contactDateLabel.frame.size;
+ dateViewSize.width = CGFLOAT_MAX;
}
CGSize messageSize = [self ViewHeightForMessage:chat withWidth:width];
CGSize dateSize = [self computeBoundingBox:[self ContactDateForChat:chat] size:dateViewSize font:dateFont];
- messageSize.width = MAX(MAX(messageSize.width, dateSize.width + CELL_MESSAGE_X_MARGIN), CELL_MIN_WIDTH);
+ messageSize.width = MAX(MAX(messageSize.width, MIN(dateSize.width + CELL_MESSAGE_X_MARGIN, width)), CELL_MIN_WIDTH);
return messageSize;
}
diff --git a/Classes/LinphoneUI/UICheckBoxTableView.h b/Classes/LinphoneUI/UICheckBoxTableView.h
index 692a30199..d8d114375 100644
--- a/Classes/LinphoneUI/UICheckBoxTableView.h
+++ b/Classes/LinphoneUI/UICheckBoxTableView.h
@@ -27,4 +27,6 @@
- (IBAction)onEditClick:(id)sender;
- (IBAction)onCancelClick:(id)sender;
+- (NSInteger)totalNumberOfItems;
+
@end
diff --git a/Classes/LinphoneUI/UICompositeView.h b/Classes/LinphoneUI/UICompositeView.h
index 8be0f04f9..7af4bd45e 100644
--- a/Classes/LinphoneUI/UICompositeView.h
+++ b/Classes/LinphoneUI/UICompositeView.h
@@ -27,27 +27,29 @@
@interface UICompositeViewDescription : NSObject {
}
-@property(strong) NSString *content;
+@property(strong) NSString *name;
@property(strong) NSString *statusBar;
@property(strong) NSString *tabBar;
@property(strong) NSString *sideMenu;
+@property(strong) NSString *otherFragment;
@property(assign) BOOL statusBarEnabled;
@property(assign) BOOL tabBarEnabled;
@property(assign) BOOL sideMenuEnabled;
@property(assign) BOOL fullscreen;
+@property(assign) BOOL isLeftFragment;
+@property(assign) BOOL darkBackground;
@property(assign) BOOL landscapeMode;
@property(assign) BOOL portraitMode;
-@property(assign) BOOL darkBackground;
- (id)copy;
- (BOOL)equal:(UICompositeViewDescription *)description;
-- (id)init:(Class)content
- statusBar:(Class)statusBar
- tabBar:(Class)tabBar
- sideMenu:(Class)sideMenu
- fullscreen:(BOOL)fullscreen
- landscapeMode:(BOOL)landscapeMode
- portraitMode:(BOOL)portraitMode;
+- (id)init:(Class)name
+ statusBar:(Class)statusBar
+ tabBar:(Class)tabBar
+ sideMenu:(Class)sideMenu
+ fullscreen:(BOOL)fullscreen
+ isLeftFragment:(BOOL)isLeftFragment
+ fragmentWith:(Class)otherFragment;
@end
@@ -66,9 +68,9 @@
}
@property(strong) CATransition *viewTransition;
-
@property(nonatomic, strong) IBOutlet UIView *statusBarView;
-@property(nonatomic, strong) IBOutlet UIView *contentView;
+@property(nonatomic, strong) IBOutlet UIView *mainView;
+@property(nonatomic, strong) IBOutlet UIView *detailsView;
@property(nonatomic, strong) IBOutlet UIView *tabBarView;
@property(strong, nonatomic) IBOutlet UIView *sideMenuView;
diff --git a/Classes/LinphoneUI/UICompositeView.m b/Classes/LinphoneUI/UICompositeView.m
index eff60f87f..577ece25c 100644
--- a/Classes/LinphoneUI/UICompositeView.m
+++ b/Classes/LinphoneUI/UICompositeView.m
@@ -27,7 +27,7 @@
- (id)copy {
UICompositeViewDescription *copy = [UICompositeViewDescription alloc];
- copy.content = self.content;
+ copy.name = self.name;
copy.statusBar = self.statusBar;
copy.tabBar = self.tabBar;
copy.sideMenu = self.sideMenu;
@@ -37,22 +37,24 @@
copy.fullscreen = self.fullscreen;
copy.landscapeMode = self.landscapeMode;
copy.portraitMode = self.portraitMode;
+ copy.isLeftFragment = self.isLeftFragment;
+ copy.otherFragment = self.otherFragment;
copy.darkBackground = self.darkBackground;
return copy;
}
- (BOOL)equal:(UICompositeViewDescription *)description {
- return [self.content compare:description.content] == NSOrderedSame;
+ return [self.name compare:description.name] == NSOrderedSame;
}
- (id)init:(Class)content
- statusBar:(Class)statusBar
- tabBar:(Class)tabBar
- sideMenu:(Class)sideMenu
- fullscreen:(BOOL)fullscreen
- landscapeMode:(BOOL)landscapeMode
- portraitMode:(BOOL)portraitMode {
- self.content = NSStringFromClass(content);
+ statusBar:(Class)statusBar
+ tabBar:(Class)tabBar
+ sideMenu:(Class)sideMenu
+ fullscreen:(BOOL)fullscreen
+ isLeftFragment:(BOOL)isLeftFragment
+ fragmentWith:(Class)otherFragment {
+ self.name = NSStringFromClass(content);
self.statusBar = NSStringFromClass(statusBar);
self.tabBar = NSStringFromClass(tabBar);
self.sideMenu = NSStringFromClass(sideMenu);
@@ -60,8 +62,10 @@
self.tabBarEnabled = YES;
self.sideMenuEnabled = NO;
self.fullscreen = fullscreen;
- self.landscapeMode = YES; // landscapeMode;
- self.portraitMode = YES; // portraitMode;
+ self.landscapeMode = YES;
+ self.portraitMode = YES;
+ self.isLeftFragment = isLeftFragment || (otherFragment == nil);
+ self.otherFragment = LinphoneManager.runningOnIpad ? NSStringFromClass(otherFragment) : nil;
self.darkBackground = true;
return self;
@@ -72,7 +76,8 @@
@property(nonatomic, strong) UIViewController *statusBarViewController;
@property(nonatomic, strong) UIViewController *tabBarViewController;
-@property(nonatomic, strong) UIViewController *contentViewController;
+@property(nonatomic, strong) UIViewController *mainViewController;
+@property(nonatomic, strong) UIViewController *detailsViewController;
@property(nonatomic, strong) UIViewController *sideMenuViewController;
@end
@@ -148,7 +153,8 @@
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
- [self.contentViewController viewWillAppear:animated];
+ [self.mainViewController viewWillAppear:animated];
+ [self.detailsViewController viewWillAppear:animated];
[self.tabBarViewController viewWillAppear:animated];
[self.statusBarViewController viewWillAppear:animated];
[self.sideMenuViewController viewWillAppear:animated];
@@ -161,7 +167,8 @@
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
- [self.contentViewController viewDidAppear:animated];
+ [self.mainViewController viewDidAppear:animated];
+ [self.detailsViewController viewDidAppear:animated];
[self.tabBarViewController viewDidAppear:animated];
[self.statusBarViewController viewDidAppear:animated];
[self.sideMenuViewController viewDidAppear:animated];
@@ -169,7 +176,8 @@
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
- [self.contentViewController viewWillDisappear:animated];
+ [self.mainViewController viewWillDisappear:animated];
+ [self.detailsViewController viewWillDisappear:animated];
[self.tabBarViewController viewWillDisappear:animated];
[self.statusBarViewController viewWillDisappear:animated];
[self.sideMenuViewController viewWillDisappear:animated];
@@ -181,7 +189,8 @@
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
- [self.contentViewController viewDidDisappear:animated];
+ [self.mainViewController viewDidDisappear:animated];
+ [self.detailsViewController viewDidDisappear:animated];
[self.tabBarViewController viewDidDisappear:animated];
[self.statusBarViewController viewDidDisappear:animated];
[self.sideMenuViewController viewDidDisappear:animated];
@@ -193,7 +202,8 @@
duration:(NSTimeInterval)duration {
currentOrientation = toInterfaceOrientation;
[super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
- [self.contentViewController willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
+ [self.mainViewController willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
+ [self.detailsViewController willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
[self.tabBarViewController willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
[self.statusBarViewController willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
[self.sideMenuViewController willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
@@ -203,7 +213,8 @@
duration:(NSTimeInterval)duration {
[super willAnimateRotationToInterfaceOrientation:toInterfaceOrientation
duration:duration]; // Will invoke TPMultiLayout
- [self.contentViewController willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration];
+ [self.mainViewController willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration];
+ [self.detailsViewController willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration];
[self.tabBarViewController willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration];
[self.statusBarViewController willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration];
[self.sideMenuViewController willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration];
@@ -212,7 +223,8 @@
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
[super didRotateFromInterfaceOrientation:fromInterfaceOrientation];
- [self.contentViewController didRotateFromInterfaceOrientation:fromInterfaceOrientation];
+ [self.mainViewController didRotateFromInterfaceOrientation:fromInterfaceOrientation];
+ [self.detailsViewController didRotateFromInterfaceOrientation:fromInterfaceOrientation];
[self.tabBarViewController didRotateFromInterfaceOrientation:fromInterfaceOrientation];
[self.statusBarViewController didRotateFromInterfaceOrientation:fromInterfaceOrientation];
[self.sideMenuViewController didRotateFromInterfaceOrientation:fromInterfaceOrientation];
@@ -287,11 +299,11 @@
bool remove = true;
/*ImagePickerView can be used as popover and we do NOT want to free it*/;
- if ([key isEqualToString:ImagePickerView.compositeViewDescription.content]) {
+ if ([key isEqualToString:ImagePickerView.compositeViewDescription.name]) {
remove = false;
} else if (exclude != nil) {
for (UICompositeViewDescription *description in exclude) {
- if ([key isEqualToString:description.content] || [key isEqualToString:description.statusBar] ||
+ if ([key isEqualToString:description.name] || [key isEqualToString:description.statusBar] ||
[key isEqualToString:description.tabBar] || [key isEqualToString:description.sideMenu]) {
remove = false;
break;
@@ -379,7 +391,8 @@
sideMenu:(NSNumber *)sideMenu
fullscreen:(NSNumber *)fullscreen {
- UIViewController *oldContentViewController = self.contentViewController;
+ UIViewController *oldMainViewController = self.mainViewController;
+ UIViewController *oldDetailsViewController = self.detailsViewController;
UIViewController *oldStatusBarViewController = self.statusBarViewController;
UIViewController *oldTabBarViewController = self.tabBarViewController;
UIViewController *oldSideMenuViewController = self.sideMenuViewController;
@@ -390,37 +403,58 @@
oldViewDescription = currentViewDescription;
currentViewDescription = [description copy];
+ UIViewController *newMainViewController = description.isLeftFragment
+ ? [self getCachedController:description.name]
+ : [self getCachedController:description.otherFragment];
+ UIViewController *newDetailsViewController = description.isLeftFragment
+ ? [self getCachedController:description.otherFragment]
+ : [self getCachedController:description.name];
+ UIViewController *newStatusBarViewController = [self getCachedController:description.statusBar];
+ UIViewController *newTabBarViewController = [self getCachedController:description.tabBar];
+ UIViewController *newSideMenuViewController = [self getCachedController:description.sideMenu];
+
// Animate only with a previous screen
if (oldViewDescription != nil && self.viewTransition != nil) {
- [self.contentView.layer removeAnimationForKey:@"transition"];
- [self.contentView.layer addAnimation:self.viewTransition forKey:@"transition"];
- if (![oldViewDescription.statusBar isEqualToString:currentViewDescription.statusBar] ||
+ if (oldMainViewController != newMainViewController) {
+ [self.mainView.layer removeAnimationForKey:@"transition"];
+ [self.mainView.layer addAnimation:self.viewTransition forKey:@"transition"];
+ } else {
+ [self.mainView.layer removeAnimationForKey:@"transition"];
+ }
+ if (oldDetailsViewController != newDetailsViewController) {
+ [self.detailsView.layer removeAnimationForKey:@"transition"];
+ [self.detailsView.layer addAnimation:self.viewTransition forKey:@"transition"];
+ } else {
+ [self.detailsView.layer removeAnimationForKey:@"transition"];
+ }
+
+ if (oldStatusBarViewController != newStatusBarViewController ||
oldViewDescription.statusBarEnabled != currentViewDescription.statusBarEnabled) {
[self.statusBarView.layer removeAnimationForKey:@"transition"];
[self.statusBarView.layer addAnimation:self.viewTransition forKey:@"transition"];
} else {
[self.statusBarView.layer removeAnimationForKey:@"transition"];
}
- if (![oldViewDescription.tabBar isEqualToString:currentViewDescription.tabBar] ||
+ if (oldTabBarViewController != newTabBarViewController ||
oldViewDescription.tabBarEnabled != currentViewDescription.tabBarEnabled) {
[self.tabBarView.layer removeAnimationForKey:@"transition"];
[self.tabBarView.layer addAnimation:self.viewTransition forKey:@"transition"];
} else {
[self.tabBarView.layer removeAnimationForKey:@"transition"];
}
- if (![oldViewDescription.sideMenu isEqualToString:currentViewDescription.sideMenu] ||
+ if (oldSideMenuViewController != newSideMenuViewController ||
oldViewDescription.sideMenuEnabled != currentViewDescription.sideMenuEnabled) {
[self.sideMenuView.layer removeAnimationForKey:@"transition"];
[self.sideMenuView.layer addAnimation:self.viewTransition forKey:@"transition"];
}
}
- UIViewController *newContentViewController = [self getCachedController:description.content];
- UIViewController *newStatusBarViewController = [self getCachedController:description.statusBar];
- UIViewController *newTabBarViewController = [self getCachedController:description.tabBar];
- UIViewController *newSideMenuViewController = [self getCachedController:description.sideMenu];
-
- [UICompositeView removeSubView:oldContentViewController];
+ if (oldMainViewController != nil && oldMainViewController != newMainViewController) {
+ [UICompositeView removeSubView:oldMainViewController];
+ }
+ if (oldDetailsViewController != nil && oldDetailsViewController != newDetailsViewController) {
+ [UICompositeView removeSubView:oldDetailsViewController];
+ }
if (oldTabBarViewController != nil && oldTabBarViewController != newTabBarViewController) {
[UICompositeView removeSubView:oldTabBarViewController];
}
@@ -432,7 +466,8 @@
}
self.statusBarViewController = newStatusBarViewController;
- self.contentViewController = newContentViewController;
+ self.mainViewController = newMainViewController;
+ self.detailsViewController = newDetailsViewController;
self.tabBarViewController = newTabBarViewController;
self.sideMenuViewController = newSideMenuViewController;
@@ -443,17 +478,24 @@
[UICompositeView setOrientation:correctOrientation
animated:currentOrientation != UIDeviceOrientationUnknown];
if (UIInterfaceOrientationIsLandscape(correctOrientation)) {
- [self.contentViewController willAnimateRotationToInterfaceOrientation:correctOrientation duration:0];
+ [self.mainViewController willAnimateRotationToInterfaceOrientation:correctOrientation duration:0];
+ [self.detailsViewController willAnimateRotationToInterfaceOrientation:correctOrientation duration:0];
[self.tabBarViewController willAnimateRotationToInterfaceOrientation:correctOrientation duration:0];
[self.statusBarViewController willAnimateRotationToInterfaceOrientation:correctOrientation duration:0];
[self.sideMenuViewController willAnimateRotationToInterfaceOrientation:correctOrientation duration:0];
}
} else {
- if (oldContentViewController != newContentViewController) {
- UIInterfaceOrientation oldOrientation = self.contentViewController.interfaceOrientation;
- [self.contentViewController willRotateToInterfaceOrientation:correctOrientation duration:0];
- [self.contentViewController willAnimateRotationToInterfaceOrientation:correctOrientation duration:0];
- [self.contentViewController didRotateFromInterfaceOrientation:oldOrientation];
+ if (oldMainViewController != newMainViewController) {
+ UIInterfaceOrientation oldOrientation = self.mainViewController.interfaceOrientation;
+ [self.mainViewController willRotateToInterfaceOrientation:correctOrientation duration:0];
+ [self.mainViewController willAnimateRotationToInterfaceOrientation:correctOrientation duration:0];
+ [self.mainViewController didRotateFromInterfaceOrientation:oldOrientation];
+ }
+ if (oldDetailsViewController != newDetailsViewController) {
+ UIInterfaceOrientation oldOrientation = self.detailsViewController.interfaceOrientation;
+ [self.detailsViewController willRotateToInterfaceOrientation:correctOrientation duration:0];
+ [self.detailsViewController willAnimateRotationToInterfaceOrientation:correctOrientation duration:0];
+ [self.detailsViewController didRotateFromInterfaceOrientation:oldOrientation];
}
if (oldTabBarViewController != newTabBarViewController) {
UIInterfaceOrientation oldOrientation = self.tabBarViewController.interfaceOrientation;
@@ -524,83 +566,69 @@
[UIView setAnimationDuration:0.35];
}
- CGRect contentFrame = self.contentView.frame;
- CGRect viewFrame = [self.view frame];
+ // Compute frame for each elements
+ CGRect viewFrame = self.view.frame;
- // Resize StatusBar
+ // 1. status bar - fixed size on top
CGRect statusBarFrame = self.statusBarView.frame;
- int origin = IPHONE_STATUSBAR_HEIGHT;
- if (currentViewDescription.fullscreen)
- origin = 0;
-
+ int origin = currentViewDescription.fullscreen ? 0 : IPHONE_STATUSBAR_HEIGHT;
if (self.statusBarViewController != nil && currentViewDescription.statusBarEnabled) {
statusBarFrame.origin.y = origin;
} else {
statusBarFrame.origin.y = origin - statusBarFrame.size.height;
}
- contentFrame.origin.y = statusBarFrame.origin.y + statusBarFrame.size.height;
+ // 2. side menu - fixed size, always starting below status bar
+ CGRect sideMenuFrame = viewFrame;
+ sideMenuFrame.origin.y = origin + statusBarFrame.size.height;
+ sideMenuFrame.size.height -= sideMenuFrame.origin.y;
+ if (!currentViewDescription.sideMenuEnabled) {
+ // really hide; -width won't be enough since some animations may use this...
+ sideMenuFrame.origin.x = -3 * sideMenuFrame.size.width;
+ }
+
+ // 3. tab bar - on portrait full width at bottom / on landscape on left, starting below status bar
// Resize TabBar
CGRect tabFrame = self.tabBarView.frame;
if (self.tabBarViewController != nil && currentViewDescription.tabBarEnabled) {
- if (UIInterfaceOrientationIsLandscape([self currentOrientation])) {
- tabFrame.origin.x = 0;
- tabFrame.origin.y = contentFrame.origin.y;
- tabFrame.size.height = viewFrame.size.height - contentFrame.origin.y;
- contentFrame.origin.x = tabFrame.size.width;
- contentFrame.size.height = tabFrame.size.height;
+ tabFrame.origin.x = 0;
+ if (UIInterfaceOrientationIsPortrait([self currentOrientation])) {
+ tabFrame.origin.y = viewFrame.size.height - tabFrame.size.height;
} else {
- tabFrame.origin.y = viewFrame.size.height;
- tabFrame.origin.x = viewFrame.size.width;
- tabFrame.size.height = self.tabBarViewController.view.frame.size.height;
- // tabFrame.size.width = self.tabBarViewController.view.frame.size.width;
- tabFrame.origin.y -= tabFrame.size.height;
- tabFrame.origin.x -= tabFrame.size.width;
- contentFrame.size.height = tabFrame.origin.y - contentFrame.origin.y;
-
- // for some views, we need the content to overlap, in which case
- // we insert in the tab XIB a mask with tag -1 and with y = the amount of
- // points that the content should overlap.
- for (UIView *view in self.tabBarViewController.view.subviews) {
- if (view.tag == -1) {
- contentFrame.size.height += view.frame.origin.y;
- break;
- }
- }
+ tabFrame.origin.y = statusBarFrame.origin.y + statusBarFrame.size.height;
+ tabFrame.size.height = viewFrame.size.height - tabFrame.origin.y;
}
} else {
- contentFrame.origin.x = 0;
- contentFrame.size.height = viewFrame.size.height - contentFrame.origin.y;
+ tabFrame.origin.x = -tabFrame.size.width;
tabFrame.origin.y = viewFrame.size.height;
}
- contentFrame.size.width = viewFrame.size.width - contentFrame.origin.x;
- if (currentViewDescription.fullscreen) {
- // contentFrame.origin.y = origin;
- contentFrame.size.height = viewFrame.size.height - contentFrame.origin.y;
+ // 4. main view and details view - space left width of 35%/65% each
+ CGRect mainFrame = viewFrame;
+ mainFrame.origin.y = statusBarFrame.origin.y + statusBarFrame.size.height;
+ mainFrame.size.height -= mainFrame.origin.y;
+ if (!currentViewDescription.fullscreen) {
+ if (UIInterfaceOrientationIsPortrait([self currentOrientation])) {
+ mainFrame.size.height -= viewFrame.size.height - tabFrame.origin.y;
+ } else {
+ mainFrame.origin.x = tabFrame.origin.x + tabFrame.size.width;
+ mainFrame.size.width -= mainFrame.origin.x;
+ }
}
-
- // Resize SideMenu
- CGRect sideMenuFrame;
- if (UIInterfaceOrientationIsPortrait([self currentOrientation])) {
- sideMenuFrame = contentFrame;
- sideMenuFrame.size.height += tabFrame.size.height;
- } else {
- sideMenuFrame = viewFrame;
- sideMenuFrame.size.height -= origin + statusBarFrame.size.height;
- sideMenuFrame.origin.y = origin + statusBarFrame.size.height;
- }
-
- if (!currentViewDescription.sideMenuEnabled) {
- sideMenuFrame.origin.x =
- -3 * sideMenuFrame.size.width; // really hide; -width won't be enough since some animations may use this...
+ CGRect detailsFrame = mainFrame;
+ if (self.detailsViewController != nil) {
+ detailsFrame = mainFrame;
+ mainFrame.size.width = ceil(mainFrame.size.width * .35);
+ detailsFrame.size.width -= mainFrame.size.width;
+ detailsFrame.origin.x += mainFrame.size.width;
}
// Set frames
-
- // 1. content view
- self.contentView.frame = contentFrame;
- self.contentViewController.view.frame = self.contentView.bounds;
+ // 1. main view and details view
+ self.mainView.frame = mainFrame;
+ self.mainViewController.view.frame = self.mainView.bounds;
+ self.detailsView.frame = detailsFrame;
+ self.detailsViewController.view.frame = self.detailsView.bounds;
// 2. tab bar
self.tabBarView.frame = tabFrame;
@@ -625,7 +653,12 @@
// Change view
if (description != nil) {
- [UICompositeView addSubView:self.contentViewController view:self.contentView];
+ if (oldMainViewController == nil || oldMainViewController != self.tabBarViewController) {
+ [UICompositeView addSubView:self.mainViewController view:self.mainView];
+ }
+ if (oldDetailsViewController == nil || oldDetailsViewController != self.detailsViewController) {
+ [UICompositeView addSubView:self.detailsViewController view:self.detailsView];
+ }
if (oldTabBarViewController == nil || oldTabBarViewController != self.tabBarViewController) {
[UICompositeView addSubView:self.tabBarViewController view:self.tabBarView];
}
@@ -665,7 +698,7 @@
[self update:nil tabBar:nil statusBar:nil sideMenu:[NSNumber numberWithBool:!hidden] fullscreen:nil];
}
- (UIViewController *)getCurrentViewController {
- return self.contentViewController;
+ return self.mainViewController;
}
- (BOOL)currentViewSupportsLandscape {
diff --git a/Classes/LinphoneUI/UIContactCell.m b/Classes/LinphoneUI/UIContactCell.m
index 383b239a3..d41fba729 100644
--- a/Classes/LinphoneUI/UIContactCell.m
+++ b/Classes/LinphoneUI/UIContactCell.m
@@ -36,6 +36,13 @@
UIView *sub = ((UIView *)[arrayOfViews objectAtIndex:0]);
[self setFrame:CGRectMake(0, 0, sub.frame.size.width, sub.frame.size.height)];
[self addSubview:sub];
+
+ // Sections are wider on iPad and overlap linphone image - let's move it a bit
+ if (LinphoneManager.runningOnIpad) {
+ CGRect frame = _linphoneImage.frame;
+ frame.origin.x -= frame.size.width / 2;
+ _linphoneImage.frame = frame;
+ }
}
return self;
}
diff --git a/Classes/LinphoneUI/UIHistoryCell.h b/Classes/LinphoneUI/UIHistoryCell.h
index 647d0ad2b..8cba9e8da 100644
--- a/Classes/LinphoneUI/UIHistoryCell.h
+++ b/Classes/LinphoneUI/UIHistoryCell.h
@@ -35,4 +35,6 @@
- (id)initWithIdentifier:(NSString*)identifier;
+- (IBAction)onDetails:(id)event;
+
@end
diff --git a/Classes/LinphoneUI/UIVideoButton.m b/Classes/LinphoneUI/UIVideoButton.m
index 9909fa9ce..d78a50656 100644
--- a/Classes/LinphoneUI/UIVideoButton.m
+++ b/Classes/LinphoneUI/UIVideoButton.m
@@ -27,31 +27,8 @@
@synthesize waitView;
-- (void)initUIVideoButton {
+INIT_WITH_COMMON {
last_update_state = FALSE;
-}
-
-- (id)init {
- self = [super init];
- if (self) {
- [self initUIVideoButton];
- }
- return self;
-}
-
-- (id)initWithCoder:(NSCoder *)decoder {
- self = [super initWithCoder:decoder];
- if (self) {
- [self initUIVideoButton];
- }
- return self;
-}
-
-- (id)initWithFrame:(CGRect)frame {
- self = [super initWithFrame:frame];
- if (self) {
- [self initUIVideoButton];
- }
return self;
}
diff --git a/Classes/PhoneMainView.h b/Classes/PhoneMainView.h
index 4c080db3e..fa7d97bd1 100644
--- a/Classes/PhoneMainView.h
+++ b/Classes/PhoneMainView.h
@@ -53,7 +53,7 @@
})
#define VIEW(x) \
- DYNAMIC_CAST([PhoneMainView.instance.mainViewController getCachedController:x.compositeViewDescription.content], x)
+ DYNAMIC_CAST([PhoneMainView.instance.mainViewController getCachedController:x.compositeViewDescription.name], x)
@class PhoneMainView;
@@ -85,7 +85,7 @@
- (void)changeCurrentView:(UICompositeViewDescription *)currentView push:(BOOL)push;
- (void)changeCurrentView:(UICompositeViewDescription *)view push:(BOOL)push animated:(BOOL)animated;
- (UIViewController*)popCurrentView;
-- (void)popToView:(UICompositeViewDescription *)currentView;
+- (UIViewController *)popToView:(UICompositeViewDescription *)currentView;
- (UICompositeViewDescription *)firstView;
- (void)showStatusBar:(BOOL)show;
- (void)showTabBar:(BOOL)show;
diff --git a/Classes/PhoneMainView.m b/Classes/PhoneMainView.m
index bf8aa5aa7..e974a35b3 100644
--- a/Classes/PhoneMainView.m
+++ b/Classes/PhoneMainView.m
@@ -563,7 +563,7 @@ static RootViewManager *rootViewManagerInstance = nil;
}
- (BOOL)isUnauthorizedView:(UICompositeViewDescription *)view {
- return [[LinphoneManager.instance lpConfigStringForKey:@"unauthorized_views"] containsString:view.content];
+ return [[LinphoneManager.instance lpConfigStringForKey:@"unauthorized_views"] containsString:view.name];
}
- (UIViewController *)_changeCurrentView:(UICompositeViewDescription *)view
@@ -577,11 +577,11 @@ static RootViewManager *rootViewManagerInstance = nil;
if (fallback && [NSClassFromString(fallback) respondsToSelector:@selector(compositeViewDescription)]) {
fallback_view = [NSClassFromString(fallback) performSelector:@selector(compositeViewDescription)];
}
- LOGW(@"Trying to access unauthorized view %@, going back to %@", view.content, fallback_view.content);
+ LOGW(@"Trying to access unauthorized view %@, going back to %@", view.name, fallback_view.name);
view = fallback_view;
}
if (![view equal:vc.currentView] || vc != self) {
- LOGI(@"Change current view to %@", [view content]);
+ LOGI(@"Change current view to %@", view.name);
if (animated && transition == nil)
transition = [PhoneMainView getTransition:vc.currentView new:view];
[vc.mainViewController setViewTransition:(animated ? transition : nil)];
@@ -598,14 +598,14 @@ static RootViewManager *rootViewManagerInstance = nil;
return [vc->mainViewController getCurrentViewController];
}
-- (void)popToView:(UICompositeViewDescription *)view {
+- (UIViewController *)popToView:(UICompositeViewDescription *)view {
NSMutableArray *viewStack = [RootViewManager instance].viewDescriptionStack;
while ([viewStack count] > 1 && ![[viewStack lastObject] equal:view]) {
[viewStack removeLastObject];
}
- [self _changeCurrentView:[viewStack lastObject]
- transition:[PhoneMainView getBackwardTransition]
- animated:[[LinphoneManager instance] lpConfigBoolForKey:@"animations_preference"]];
+ return [self _changeCurrentView:[viewStack lastObject]
+ transition:[PhoneMainView getBackwardTransition]
+ animated:[[LinphoneManager instance] lpConfigBoolForKey:@"animations_preference"]];
}
- (UICompositeViewDescription *)firstView {
diff --git a/Classes/SettingsView.m b/Classes/SettingsView.m
index f03606560..3a6037d7a 100644
--- a/Classes/SettingsView.m
+++ b/Classes/SettingsView.m
@@ -328,8 +328,8 @@ static UICompositeViewDescription *compositeDescription = nil;
tabBar:nil
sideMenu:SideMenuView.class
fullscreen:false
- landscapeMode:LinphoneManager.runningOnIpad
- portraitMode:true];
+ isLeftFragment:YES
+ fragmentWith:nil];
}
return compositeDescription;
}
diff --git a/Resources/Images.xcassets/AppIcon.appiconset/Contents.json b/Resources/Images.xcassets/AppIcon.appiconset/Contents.json
index 2982bf4af..90730a624 100644
--- a/Resources/Images.xcassets/AppIcon.appiconset/Contents.json
+++ b/Resources/Images.xcassets/AppIcon.appiconset/Contents.json
@@ -101,10 +101,16 @@
"idiom" : "ipad",
"filename" : "linphone_icon_152.png",
"scale" : "2x"
+ },
+ {
+ "size" : "83.5x83.5",
+ "idiom" : "ipad",
+ "filename" : "linphone_icon_167.png",
+ "scale" : "2x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
-}
\ No newline at end of file
+}
diff --git a/Resources/Images.xcassets/AppIcon.appiconset/linphone_icon_120.png b/Resources/Images.xcassets/AppIcon.appiconset/linphone_icon_120.png
index a4f35eef9..662f657bb 100644
Binary files a/Resources/Images.xcassets/AppIcon.appiconset/linphone_icon_120.png and b/Resources/Images.xcassets/AppIcon.appiconset/linphone_icon_120.png differ
diff --git a/Resources/Images.xcassets/AppIcon.appiconset/linphone_icon_152.png b/Resources/Images.xcassets/AppIcon.appiconset/linphone_icon_152.png
index e17395e61..26a4e5269 100644
Binary files a/Resources/Images.xcassets/AppIcon.appiconset/linphone_icon_152.png and b/Resources/Images.xcassets/AppIcon.appiconset/linphone_icon_152.png differ
diff --git a/Resources/Images.xcassets/AppIcon.appiconset/linphone_icon_167.png b/Resources/Images.xcassets/AppIcon.appiconset/linphone_icon_167.png
new file mode 100644
index 000000000..9eec1c7f7
Binary files /dev/null and b/Resources/Images.xcassets/AppIcon.appiconset/linphone_icon_167.png differ
diff --git a/Resources/Images.xcassets/AppIcon.appiconset/linphone_icon_57.png b/Resources/Images.xcassets/AppIcon.appiconset/linphone_icon_57.png
index 134b51b80..4ef4e5fe2 100644
Binary files a/Resources/Images.xcassets/AppIcon.appiconset/linphone_icon_57.png and b/Resources/Images.xcassets/AppIcon.appiconset/linphone_icon_57.png differ
diff --git a/Resources/Images.xcassets/AppIcon.appiconset/linphone_icon_57@2x.png b/Resources/Images.xcassets/AppIcon.appiconset/linphone_icon_57@2x.png
index ebbfd0288..277dbd653 100644
Binary files a/Resources/Images.xcassets/AppIcon.appiconset/linphone_icon_57@2x.png and b/Resources/Images.xcassets/AppIcon.appiconset/linphone_icon_57@2x.png differ
diff --git a/Resources/Images.xcassets/AppIcon.appiconset/linphone_icon_72.png b/Resources/Images.xcassets/AppIcon.appiconset/linphone_icon_72.png
index e87a07a5a..ae1756067 100644
Binary files a/Resources/Images.xcassets/AppIcon.appiconset/linphone_icon_72.png and b/Resources/Images.xcassets/AppIcon.appiconset/linphone_icon_72.png differ
diff --git a/Resources/Images.xcassets/AppIcon.appiconset/linphone_icon_72@2x.png b/Resources/Images.xcassets/AppIcon.appiconset/linphone_icon_72@2x.png
index 80577b143..09d035946 100644
Binary files a/Resources/Images.xcassets/AppIcon.appiconset/linphone_icon_72@2x.png and b/Resources/Images.xcassets/AppIcon.appiconset/linphone_icon_72@2x.png differ
diff --git a/Resources/Images.xcassets/AppIcon.appiconset/linphone_icon_76.png b/Resources/Images.xcassets/AppIcon.appiconset/linphone_icon_76.png
index e81264a7b..dfc02b4c9 100644
Binary files a/Resources/Images.xcassets/AppIcon.appiconset/linphone_icon_76.png and b/Resources/Images.xcassets/AppIcon.appiconset/linphone_icon_76.png differ
diff --git a/iTunesArtwork b/iTunesArtwork
index 9037b6a1f..daafcb919 100644
Binary files a/iTunesArtwork and b/iTunesArtwork differ
diff --git a/linphone.xcodeproj/project.pbxproj b/linphone.xcodeproj/project.pbxproj
index 7d862e665..1697f2085 100755
--- a/linphone.xcodeproj/project.pbxproj
+++ b/linphone.xcodeproj/project.pbxproj
@@ -81,6 +81,7 @@
6306440E1BECB08500134C72 /* FirstLoginView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6306440C1BECB08500134C72 /* FirstLoginView.m */; };
6308F9C51BF0DD6600D1234B /* XMLRPCHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 6308F9C41BF0DD6600D1234B /* XMLRPCHelper.m */; };
630CF5571AF7CE1500539F7A /* UITextField+DoneButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 630CF5561AF7CE1500539F7A /* UITextField+DoneButton.m */; };
+ 63130FB21C1ED06900371918 /* SideMenuView~ipad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 63130FB01C1ED06900371918 /* SideMenuView~ipad.xib */; };
631348301B6F7B6600C6BDCB /* UIRoundBorderedButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 6313482F1B6F7B6600C6BDCB /* UIRoundBorderedButton.m */; };
631348321B6FA53300C6BDCB /* rootca.pem in Resources */ = {isa = PBXBuildFile; fileRef = 631348311B6FA53300C6BDCB /* rootca.pem */; };
6316FA6D1BE12A3E0050E441 /* UIRightImageButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 6316FA6C1BE12A3E0050E441 /* UIRightImageButton.m */; };
@@ -470,6 +471,9 @@
63730FBA1C07570C00AD7A74 /* waiting_time@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 63730E521C07570C00AD7A74 /* waiting_time@2x.png */; };
6377AC801BDE4069007F7625 /* UIBackToCallButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 6377AC7F1BDE4069007F7625 /* UIBackToCallButton.m */; };
6381DA7D1C1AD5EA00DF3BBD /* UIBouncingView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6381DA7C1C1AD5EA00DF3BBD /* UIBouncingView.m */; };
+ 638F1A621C2021B2004B8E02 /* DialerView~ipad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 638F1A601C2021B2004B8E02 /* DialerView~ipad.xib */; };
+ 638F1A881C2167C2004B8E02 /* CallView~ipad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 638F1A861C2167C2004B8E02 /* CallView~ipad.xib */; };
+ 638F1A911C21993D004B8E02 /* UICompositeView~ipad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 638F1A8F1C21993D004B8E02 /* UICompositeView~ipad.xib */; };
639CEAFD1A1DF4D9004DE38F /* StatusBarView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 639CEAFF1A1DF4D9004DE38F /* StatusBarView.xib */; };
639CEB001A1DF4E4004DE38F /* UIHistoryCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 639CEB021A1DF4E4004DE38F /* UIHistoryCell.xib */; };
639CEB031A1DF4EB004DE38F /* UICompositeView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 639CEB051A1DF4EB004DE38F /* UICompositeView.xib */; };
@@ -885,6 +889,7 @@
6308F9C41BF0DD6600D1234B /* XMLRPCHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = XMLRPCHelper.m; path = Utils/XMLRPCHelper.m; sourceTree = ""; };
630CF5551AF7CE1500539F7A /* UITextField+DoneButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UITextField+DoneButton.h"; sourceTree = ""; };
630CF5561AF7CE1500539F7A /* UITextField+DoneButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UITextField+DoneButton.m"; sourceTree = ""; };
+ 63130FB11C1ED06900371918 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = "Base.lproj/SideMenuView~ipad.xib"; sourceTree = ""; };
6313482E1B6F7B6600C6BDCB /* UIRoundBorderedButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIRoundBorderedButton.h; sourceTree = ""; };
6313482F1B6F7B6600C6BDCB /* UIRoundBorderedButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIRoundBorderedButton.m; sourceTree = ""; };
631348311B6FA53300C6BDCB /* rootca.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = rootca.pem; path = "liblinphone-sdk/apple-darwin/share/linphone/rootca.pem"; sourceTree = SOURCE_ROOT; };
@@ -1289,6 +1294,9 @@
6377AC7F1BDE4069007F7625 /* UIBackToCallButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIBackToCallButton.m; sourceTree = ""; };
6381DA7B1C1AD5EA00DF3BBD /* UIBouncingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIBouncingView.h; sourceTree = ""; };
6381DA7C1C1AD5EA00DF3BBD /* UIBouncingView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIBouncingView.m; sourceTree = ""; };
+ 638F1A611C2021B2004B8E02 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = "Base.lproj/DialerView~ipad.xib"; sourceTree = ""; };
+ 638F1A871C2167C2004B8E02 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = "Base.lproj/CallView~ipad.xib"; sourceTree = ""; };
+ 638F1A901C21993D004B8E02 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = "Base.lproj/UICompositeView~ipad.xib"; sourceTree = ""; };
639CEAFE1A1DF4D9004DE38F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/StatusBarView.xib; sourceTree = ""; };
639CEB011A1DF4E4004DE38F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/UIHistoryCell.xib; sourceTree = ""; };
639CEB041A1DF4EB004DE38F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/UICompositeView.xib; sourceTree = ""; };
@@ -1740,6 +1748,7 @@
D3F83EE91582021700336684 /* CallView.h */,
D3F83EEA1582021700336684 /* CallView.m */,
D381881C15FE3FCA00C3EDCA /* CallView.xib */,
+ 638F1A861C2167C2004B8E02 /* CallView~ipad.xib */,
6341807A1BBC103100F71761 /* ChatConversationCreateTableView.h */,
6341807B1BBC103100F71761 /* ChatConversationCreateTableView.m */,
6336715E1BCBAAD200BFCBDE /* ChatConversationCreateView.h */,
@@ -1769,6 +1778,7 @@
22F2508B107141E100AC9B3F /* DialerView.h */,
22F2508C107141E100AC9B3F /* DialerView.m */,
D38187C415FE345B00C3EDCA /* DialerView.xib */,
+ 638F1A601C2021B2004B8E02 /* DialerView~ipad.xib */,
6306440B1BECB08500134C72 /* FirstLoginView.h */,
6306440C1BECB08500134C72 /* FirstLoginView.m */,
639E9C951C0DB7BE00019A75 /* FirstLoginView.xib */,
@@ -1809,6 +1819,7 @@
633756421B67D2B100E21BAD /* SideMenuView.h */,
633756431B67D2B100E21BAD /* SideMenuView.m */,
639E9CB21C0DB83000019A75 /* SideMenuView.xib */,
+ 63130FB01C1ED06900371918 /* SideMenuView~ipad.xib */,
D354981E1587716B000081D8 /* StatusBarView.h */,
D354981F1587716B000081D8 /* StatusBarView.m */,
639CEAFF1A1DF4D9004DE38F /* StatusBarView.xib */,
@@ -1871,6 +1882,7 @@
D31B4B1E159876C0002E6C72 /* UICompositeView.h */,
D31B4B1F159876C0002E6C72 /* UICompositeView.m */,
639CEB051A1DF4EB004DE38F /* UICompositeView.xib */,
+ 638F1A8F1C21993D004B8E02 /* UICompositeView~ipad.xib */,
63701DDD1BA32039006A9AE3 /* UIConfirmationDialog.h */,
63701DDE1BA32039006A9AE3 /* UIConfirmationDialog.m */,
639E9CAB1C0DB7FB00019A75 /* UIConfirmationDialog.xib */,
@@ -2761,7 +2773,7 @@
29B97313FDCFA39411CA2CEA /* Project object */ = {
isa = PBXProject;
attributes = {
- LastUpgradeCheck = 0700;
+ LastUpgradeCheck = 0720;
TargetAttributes = {
1D6058900D05DD3D006BFB54 = {
DevelopmentTeam = Z2V957B3D6;
@@ -2873,6 +2885,7 @@
636316D11A1DEBCB0009B839 /* AboutView.xib in Resources */,
63730F931C07570C00AD7A74 /* route_earpiece_selected.png in Resources */,
63730F1B1C07570C00AD7A74 /* history_chat_indicator@2x.png in Resources */,
+ 638F1A621C2021B2004B8E02 /* DialerView~ipad.xib in Resources */,
63730E981C07570C00AD7A74 /* call_transfer_default@2x.png in Resources */,
63730ED01C07570C00AD7A74 /* color_D.png in Resources */,
63730FB81C07570C00AD7A74 /* voicemail@2x.png in Resources */,
@@ -2998,6 +3011,7 @@
63730E791C07570C00AD7A74 /* call_hangup_disabled.png in Resources */,
F088488A19FF8C41007FFCF3 /* UIContactCell.xib in Resources */,
63730EF41C07570C00AD7A74 /* deselect_all.png in Resources */,
+ 63130FB21C1ED06900371918 /* SideMenuView~ipad.xib in Resources */,
63730F461C07570C00AD7A74 /* numpad_3_default.png in Resources */,
63730EB11C07570C00AD7A74 /* chat_add_disabled.png in Resources */,
63730F5F1C07570C00AD7A74 /* numpad_9_default@2x.png in Resources */,
@@ -3044,6 +3058,7 @@
63730F9C1C07570C00AD7A74 /* routes_default@2x.png in Resources */,
63730F8B1C07570C00AD7A74 /* route_bluetooth_disabled.png in Resources */,
63AADBFA1B6A0FF200AA16FD /* msg.wav in Resources */,
+ 638F1A911C21993D004B8E02 /* UICompositeView~ipad.xib in Resources */,
63730E971C07570C00AD7A74 /* call_transfer_default.png in Resources */,
63730ED91C07570C00AD7A74 /* conference_exit_default@2x.png in Resources */,
63730F101C07570C00AD7A74 /* footer_history_default.png in Resources */,
@@ -3108,6 +3123,7 @@
63730F791C07570C00AD7A74 /* options_transfer_call_default.png in Resources */,
63730EC51C07570C00AD7A74 /* chat_start_body_disabled.png in Resources */,
D38187DD15FE348A00C3EDCA /* AssistantView.xib in Resources */,
+ 638F1A881C2167C2004B8E02 /* CallView~ipad.xib in Resources */,
63730F851C07570C00AD7A74 /* pause_small_disabled.png in Resources */,
63730EAC1C07570C00AD7A74 /* cancel_edit_default@2x.png in Resources */,
63730F411C07570C00AD7A74 /* numpad_1_over@2x.png in Resources */,
@@ -3590,6 +3606,14 @@
name = InfoPlist.strings;
sourceTree = "";
};
+ 63130FB01C1ED06900371918 /* SideMenuView~ipad.xib */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 63130FB11C1ED06900371918 /* Base */,
+ );
+ name = "SideMenuView~ipad.xib";
+ sourceTree = "";
+ };
634610101B6140A500548952 /* CallOutgoingView.xib */ = {
isa = PBXVariantGroup;
children = (
@@ -3617,6 +3641,30 @@
name = SettingsView.xib;
sourceTree = "";
};
+ 638F1A601C2021B2004B8E02 /* DialerView~ipad.xib */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 638F1A611C2021B2004B8E02 /* Base */,
+ );
+ name = "DialerView~ipad.xib";
+ sourceTree = "";
+ };
+ 638F1A861C2167C2004B8E02 /* CallView~ipad.xib */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 638F1A871C2167C2004B8E02 /* Base */,
+ );
+ name = "CallView~ipad.xib";
+ sourceTree = "";
+ };
+ 638F1A8F1C21993D004B8E02 /* UICompositeView~ipad.xib */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 638F1A901C21993D004B8E02 /* Base */,
+ );
+ name = "UICompositeView~ipad.xib";
+ sourceTree = "";
+ };
639CEAFF1A1DF4D9004DE38F /* StatusBarView.xib */ = {
isa = PBXVariantGroup;
children = (
diff --git a/linphone.xcodeproj/xcshareddata/xcschemes/LinphoneTester.xcscheme b/linphone.xcodeproj/xcshareddata/xcschemes/LinphoneTester.xcscheme
index 140b7cb98..0345d7d43 100644
--- a/linphone.xcodeproj/xcshareddata/xcschemes/LinphoneTester.xcscheme
+++ b/linphone.xcodeproj/xcshareddata/xcschemes/LinphoneTester.xcscheme
@@ -1,6 +1,6 @@