1 /*
2  * Copyright (c) 2023-2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include <cstdint>
17 #include <iostream>
18 #include <string>
19 #include "transaction/rs_interfaces.h"
20 
21 using namespace OHOS;
22 using namespace OHOS::Rosen;
23 using namespace std;
24 
25 class RSScreenModeTestCase {
26 public:
GetInstance()27     inline static RSScreenModeTestCase& GetInstance()
28     {
29         static RSScreenModeTestCase instance;
30         return instance;
31     }
32 
TestRun()33     void TestRun()
34     {
35         std::cout << "Render service Client screen mode Demo.cpp testRun Start\n";
36         std::cout << "The default screen id is " << defaultDisplayId_ << std::endl;
37         while (true) {
38             decltype(supportedModes_.size()) size = supportedModes_.size();
39             if (size == 0) {
40                 std::cout << "The default screen id is " << defaultDisplayId_ <<
41                     ", and it dosen't spupport any screen mode." << std::endl;
42                 break;
43             }
44             std::cout << "The default screen id is " << defaultDisplayId_ <<
45                 ", and it spupports these screen modes:." << std::endl;
46             for (decltype(supportedModes_.size()) i = 0; i < size; i++) {
47                 std::cout << "supporedMode[" << i << "]: " << supportedModes_[i].GetScreenModeId() <<", " <<
48                     supportedModes_[i].GetScreenWidth() << "x" << supportedModes_[i].GetScreenHeight() <<
49                     ", refreshrate=" << supportedModes_[i].GetScreenRefreshRate() << std::endl;
50             }
51             RSScreenModeInfo currScreenMode = rsInterface_.GetScreenActiveMode(defaultDisplayId_);
52             std::cout << "The current active screen mode :\n modeId: " << currScreenMode.GetScreenModeId() <<", " <<
53                 currScreenMode.GetScreenWidth() << "x" << currScreenMode.GetScreenHeight() <<
54                 ", refreshrate=" << currScreenMode.GetScreenRefreshRate() << std::endl;
55 
56             bool ret = ChangeScreenActiveMode();
57             if (!ret) {
58                 break;
59             }
60         }
61 
62         rsInterface_.SetScreenActiveMode(defaultDisplayId_, defaultModeId_);
63         RSScreenModeInfo currScreenMode = rsInterface_.GetScreenActiveMode(defaultDisplayId_);
64         std::cout << "The current active screen mode :\n modeId: " << currScreenMode.GetScreenModeId() <<", " <<
65             currScreenMode.GetScreenWidth() << "x" << currScreenMode.GetScreenHeight() <<
66             ", refreshrate=" << currScreenMode.GetScreenRefreshRate() << std::endl;
67         std::cout << "Render service Client screen mode Demo.cpp testRun end\n";
68     }
69 
~RSScreenModeTestCase()70     ~RSScreenModeTestCase() {};
71 private:
RSScreenModeTestCase()72     RSScreenModeTestCase() : rsInterface_(RSInterfaces::GetInstance())
73     {
74         defaultDisplayId_ = rsInterface_.GetDefaultScreenId();
75         supportedModes_ = rsInterface_.GetScreenSupportedModes(defaultDisplayId_);
76         RSScreenModeInfo defaultScreenMode = rsInterface_.GetScreenActiveMode(defaultDisplayId_);
77         defaultModeId_ = defaultScreenMode.GetScreenModeId();
78     };
79 
ChangeScreenActiveMode()80     bool ChangeScreenActiveMode()
81     {
82         std::string inputStr;
83         std::cout << "\n\nPlase input screen mode id:\n";
84         std::cin >> inputStr;
85         uint32_t newScreenModeId = 0;
86         for (auto iter = inputStr.begin(); iter != inputStr.end(); iter++) {
87             if (*iter < '0' || *iter > '9') {
88                 return false;
89             }
90             newScreenModeId *= 10; // 10 : decimal
91             newScreenModeId += (*iter - '0');
92         }
93 
94         decltype(supportedModes_.size()) size = supportedModes_.size();
95         if (newScreenModeId >= size) {
96             std::cout << "The new screen mode id is " << newScreenModeId << ", please input correct value[0";
97             if (size == 1) {
98                 std::cout << "]\n\n";
99             } else {
100                 std::cout << "-" << (size - 1) << "]\n\n";
101             }
102         } else {
103             std::cout << "The new screen mode id is " << newScreenModeId << "\n\n";
104             rsInterface_.SetScreenActiveMode(defaultDisplayId_, newScreenModeId);
105         }
106         return true;
107     }
108 
109     RSInterfaces& rsInterface_;
110     ScreenId defaultDisplayId_ = 0;
111     std::vector<RSScreenModeInfo> supportedModes_;
112     uint32_t defaultModeId_ = 0;
113 };
114 
main()115 int main()
116 {
117     RSScreenModeTestCase::GetInstance().TestRun();
118     return 0;
119 }
120