For this part, we will make a Login application where we log in based on id...
Fantastic news! We've Found the answer you've been seeking!
Question:
Transcribed Image Text:
For this part, we will make a Login application where we log in based on id and password in "login" table of MySQL database in Internet. Login Application 1:29 LoginDanny ID Enter ID Password Enter Password LOGIN 4 # of records > 0 # of records == 0 1:36 DG LoginDanny ID 1:37 D G LoginDanny test ID Password *** LOGIN Login Status Login success Login success 1 PHP (login.php) HTTP Request (id, password) 2 select query (id, password) query HTTP Response (# of records) records # of records 3 3 test Password .. LOGIN Login Status Login fail Login fail MySQL id password : : : : 1) we type ID and Password, and click "LOGIN" button, which sends id and password to login.php in PHP server. 2) the login.php creates a select query based on the id and password. 3) when # of records are retrieved, login.php checks the # of records, and return the # of records to mobile device. 4) if the # of records is larger than 0, dialog pops up with "login success" message. Otherwise, dialog shows "login fail" message. >>> Project name: Login + <your first name> (e.g., LoginDanny) - Choose "Empty Activity" template >>> UI requirement: Layout: use RelativeLayout Define and use constants in XML files o dimens.xml ○ layout_space: 20dp (used for padding of layout) themes.xml TextView ID: IblID Text: ID " textSize: 24sp (used for font size of all texts) ID TextView ID: IblPassword EditText ID: inputID Text: (none) Hint: Enter ID Enter ID Password Enter Password Text: Password LOGIN ID: btnLogin Text: LOGIN Button Text - "Password" ID: inputPassword Text: (none) InputType: textPassword Hint: Enter Password >>> Logic codes: We need to create "Task" class to run program in the background. "MainActivity.java" is given for your information, but you need to implement "Task" class. I will give you some information for the "Task" class. I java edu.csustan.cs3810.logindanny MainActivity C Task [MainActivity.java] public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void login (View v) { // get id and password EditText inputID = findViewById(R.id.inputID); String id inputID.getText().toString(); EditText inputPassword = findViewById(R.id.inputPassword); String password = inputPassword.getText().toString(); // run task in background Task task = new Task(this); о IblID is pronounced as (el-b-el-ai-D) If not specified explicitly, please use values on your own. } } task.execute(id, password); Errors (in red color) on "Task" and "task.execute()" will be gone after creating Task class at the next step. "login" method is called when clicking "LOGIN" button. "login" method gets id and password, and run program (task) in the background. "login" method provides two arguments (id and password) to the task program. [Task.java] - Task inherits "AsyncTask<String, Void, Integer>". "String": type of input parameters (id and password) "Void": we do not show progress, so the type of progress is Void. 。 "Integer": type of # of records, which is integer. I show you instance variables, constants, constructor, and getURL method for your information. Use them for Task.java. public class Task extends AsyncTask<String, Void, Integer> { private Context main; private AlertDialog dialog; wwwwwwwwdww private static final String PROTOCOL = "http://"; private static final String IP ="34.82.21.121"; private static final String FILE_NAME = "login.php"; private static final String HTTP_POST_METHOD = "POST"; private static final int CONNECTION_ERROR public Task(Context main) { = -1; You need to implement methods that are shown as follows. I show you method description and some explanation. You need to implement codes inside methods. O private HttpURLConnection establishConnection() ■ This method establishes TCP connection to server, and returns the connection. ○ private void sendRequest(HttpURLConnection conn, String id, String password) This method sends a request to server using "POST" method through output stream. The code of the request is as follows. String request = "id=" + id + "&password=" + password; O private String getResponse(HttpURLConnection conn) This method gets a response from server through input stream, and returns it. The response is the # of records (by the query based on id and password), and the type of String. (e.g. "1" not integer 1). ○ protected void onPreExecute() " This method creates an alert dialog object. this.main = main; } private String getURL(String fileName) { return PROTOCOL + IP + "/" + fileName; } } о Choose "AlertDialog (android.app)" when importing AlertDialog class. public class Task extends AsyncTask<String, Void, Integer> { private Context main; private AlertDialog dialog; Import AlertDialog in android.app Class to Im private static AlertDialog (android.app) private static AlertDialog (androidx.appcompat.app) Gradle: andrc O private Integer runQuery(String id, String password) ■ ■ ■ ■ This method gets TCP connection after establishing connection. If connection is null, it returns -1. This method calls send Request() to send request to server. This method calls getResponse() to receive the response from server. The response is assigned to "numOfRecords" int variable. (use Integer.parseInt() to convert String "1" to int 1). Disconnect connection. Last, this method returns the "numOfRecords". O protected Integer doInBackground(String... params) - This method gets two parameters (id and password), and calls runQuery() method whose result is returned. ○ protected void onPostExecute(Integer result) " This method pops up dialog window (with title, "Login Status"). If result is larger than 0, it sets message with "Login success". Otherwise, it sets message with "Login fail"). ■ To show the dialog window, use "show()" method. Appendix: login.php <?php /* open connection to db */ include dbconn.php'; /* get user request */ $id = $ POST["id"]; $password = $ POST["password"]; /* create query */ $query "select * from login where " "id='$id' and ". "password = '$password'"; /* run query */ $res = $conn->query($query); echo $res->num rows; /* close connection */ $conn->close(); ?> For this part, we will make a Login application where we log in based on id and password in "login" table of MySQL database in Internet. Login Application 1:29 LoginDanny ID Enter ID Password Enter Password LOGIN 4 # of records > 0 # of records == 0 1:36 DG LoginDanny ID 1:37 D G LoginDanny test ID Password *** LOGIN Login Status Login success Login success 1 PHP (login.php) HTTP Request (id, password) 2 select query (id, password) query HTTP Response (# of records) records # of records 3 3 test Password .. LOGIN Login Status Login fail Login fail MySQL id password : : : : 1) we type ID and Password, and click "LOGIN" button, which sends id and password to login.php in PHP server. 2) the login.php creates a select query based on the id and password. 3) when # of records are retrieved, login.php checks the # of records, and return the # of records to mobile device. 4) if the # of records is larger than 0, dialog pops up with "login success" message. Otherwise, dialog shows "login fail" message. >>> Project name: Login + <your first name> (e.g., LoginDanny) - Choose "Empty Activity" template >>> UI requirement: Layout: use RelativeLayout Define and use constants in XML files o dimens.xml ○ layout_space: 20dp (used for padding of layout) themes.xml TextView ID: IblID Text: ID " textSize: 24sp (used for font size of all texts) ID TextView ID: IblPassword EditText ID: inputID Text: (none) Hint: Enter ID Enter ID Password Enter Password Text: Password LOGIN ID: btnLogin Text: LOGIN Button Text - "Password" ID: inputPassword Text: (none) InputType: textPassword Hint: Enter Password >>> Logic codes: We need to create "Task" class to run program in the background. "MainActivity.java" is given for your information, but you need to implement "Task" class. I will give you some information for the "Task" class. I java edu.csustan.cs3810.logindanny MainActivity C Task [MainActivity.java] public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void login (View v) { // get id and password EditText inputID = findViewById(R.id.inputID); String id inputID.getText().toString(); EditText inputPassword = findViewById(R.id.inputPassword); String password = inputPassword.getText().toString(); // run task in background Task task = new Task(this); о IblID is pronounced as (el-b-el-ai-D) If not specified explicitly, please use values on your own. } } task.execute(id, password); Errors (in red color) on "Task" and "task.execute()" will be gone after creating Task class at the next step. "login" method is called when clicking "LOGIN" button. "login" method gets id and password, and run program (task) in the background. "login" method provides two arguments (id and password) to the task program. [Task.java] - Task inherits "AsyncTask<String, Void, Integer>". "String": type of input parameters (id and password) "Void": we do not show progress, so the type of progress is Void. 。 "Integer": type of # of records, which is integer. I show you instance variables, constants, constructor, and getURL method for your information. Use them for Task.java. public class Task extends AsyncTask<String, Void, Integer> { private Context main; private AlertDialog dialog; wwwwwwwwdww private static final String PROTOCOL = "http://"; private static final String IP ="34.82.21.121"; private static final String FILE_NAME = "login.php"; private static final String HTTP_POST_METHOD = "POST"; private static final int CONNECTION_ERROR public Task(Context main) { = -1; You need to implement methods that are shown as follows. I show you method description and some explanation. You need to implement codes inside methods. O private HttpURLConnection establishConnection() ■ This method establishes TCP connection to server, and returns the connection. ○ private void sendRequest(HttpURLConnection conn, String id, String password) This method sends a request to server using "POST" method through output stream. The code of the request is as follows. String request = "id=" + id + "&password=" + password; O private String getResponse(HttpURLConnection conn) This method gets a response from server through input stream, and returns it. The response is the # of records (by the query based on id and password), and the type of String. (e.g. "1" not integer 1). ○ protected void onPreExecute() " This method creates an alert dialog object. this.main = main; } private String getURL(String fileName) { return PROTOCOL + IP + "/" + fileName; } } о Choose "AlertDialog (android.app)" when importing AlertDialog class. public class Task extends AsyncTask<String, Void, Integer> { private Context main; private AlertDialog dialog; Import AlertDialog in android.app Class to Im private static AlertDialog (android.app) private static AlertDialog (androidx.appcompat.app) Gradle: andrc O private Integer runQuery(String id, String password) ■ ■ ■ ■ This method gets TCP connection after establishing connection. If connection is null, it returns -1. This method calls send Request() to send request to server. This method calls getResponse() to receive the response from server. The response is assigned to "numOfRecords" int variable. (use Integer.parseInt() to convert String "1" to int 1). Disconnect connection. Last, this method returns the "numOfRecords". O protected Integer doInBackground(String... params) - This method gets two parameters (id and password), and calls runQuery() method whose result is returned. ○ protected void onPostExecute(Integer result) " This method pops up dialog window (with title, "Login Status"). If result is larger than 0, it sets message with "Login success". Otherwise, it sets message with "Login fail"). ■ To show the dialog window, use "show()" method. Appendix: login.php <?php /* open connection to db */ include dbconn.php'; /* get user request */ $id = $ POST["id"]; $password = $ POST["password"]; /* create query */ $query "select * from login where " "id='$id' and ". "password = '$password'"; /* run query */ $res = $conn->query($query); echo $res->num rows; /* close connection */ $conn->close(); ?> For this part, we will make a Login application where we log in based on id and password in "login" table of MySQL database in Internet. Login Application 1:29 LoginDanny ID Enter ID Password Enter Password LOGIN 4 # of records > 0 # of records == 0 1:36 DG LoginDanny ID 1:37 D G LoginDanny test ID Password *** LOGIN Login Status Login success Login success 1 PHP (login.php) HTTP Request (id, password) 2 select query (id, password) query HTTP Response (# of records) records # of records 3 3 test Password .. LOGIN Login Status Login fail Login fail MySQL id password : : : : 1) we type ID and Password, and click "LOGIN" button, which sends id and password to login.php in PHP server. 2) the login.php creates a select query based on the id and password. 3) when # of records are retrieved, login.php checks the # of records, and return the # of records to mobile device. 4) if the # of records is larger than 0, dialog pops up with "login success" message. Otherwise, dialog shows "login fail" message. >>> Project name: Login + <your first name> (e.g., LoginDanny) - Choose "Empty Activity" template >>> UI requirement: Layout: use RelativeLayout Define and use constants in XML files o dimens.xml ○ layout_space: 20dp (used for padding of layout) themes.xml TextView ID: IblID Text: ID " textSize: 24sp (used for font size of all texts) ID TextView ID: IblPassword EditText ID: inputID Text: (none) Hint: Enter ID Enter ID Password Enter Password Text: Password LOGIN ID: btnLogin Text: LOGIN Button Text - "Password" ID: inputPassword Text: (none) InputType: textPassword Hint: Enter Password >>> Logic codes: We need to create "Task" class to run program in the background. "MainActivity.java" is given for your information, but you need to implement "Task" class. I will give you some information for the "Task" class. I java edu.csustan.cs3810.logindanny MainActivity C Task [MainActivity.java] public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void login (View v) { // get id and password EditText inputID = findViewById(R.id.inputID); String id inputID.getText().toString(); EditText inputPassword = findViewById(R.id.inputPassword); String password = inputPassword.getText().toString(); // run task in background Task task = new Task(this); о IblID is pronounced as (el-b-el-ai-D) If not specified explicitly, please use values on your own. } } task.execute(id, password); Errors (in red color) on "Task" and "task.execute()" will be gone after creating Task class at the next step. "login" method is called when clicking "LOGIN" button. "login" method gets id and password, and run program (task) in the background. "login" method provides two arguments (id and password) to the task program. [Task.java] - Task inherits "AsyncTask<String, Void, Integer>". "String": type of input parameters (id and password) "Void": we do not show progress, so the type of progress is Void. 。 "Integer": type of # of records, which is integer. I show you instance variables, constants, constructor, and getURL method for your information. Use them for Task.java. public class Task extends AsyncTask<String, Void, Integer> { private Context main; private AlertDialog dialog; wwwwwwwwdww private static final String PROTOCOL = "http://"; private static final String IP ="34.82.21.121"; private static final String FILE_NAME = "login.php"; private static final String HTTP_POST_METHOD = "POST"; private static final int CONNECTION_ERROR public Task(Context main) { = -1; You need to implement methods that are shown as follows. I show you method description and some explanation. You need to implement codes inside methods. O private HttpURLConnection establishConnection() ■ This method establishes TCP connection to server, and returns the connection. ○ private void sendRequest(HttpURLConnection conn, String id, String password) This method sends a request to server using "POST" method through output stream. The code of the request is as follows. String request = "id=" + id + "&password=" + password; O private String getResponse(HttpURLConnection conn) This method gets a response from server through input stream, and returns it. The response is the # of records (by the query based on id and password), and the type of String. (e.g. "1" not integer 1). ○ protected void onPreExecute() " This method creates an alert dialog object. this.main = main; } private String getURL(String fileName) { return PROTOCOL + IP + "/" + fileName; } } о Choose "AlertDialog (android.app)" when importing AlertDialog class. public class Task extends AsyncTask<String, Void, Integer> { private Context main; private AlertDialog dialog; Import AlertDialog in android.app Class to Im private static AlertDialog (android.app) private static AlertDialog (androidx.appcompat.app) Gradle: andrc O private Integer runQuery(String id, String password) ■ ■ ■ ■ This method gets TCP connection after establishing connection. If connection is null, it returns -1. This method calls send Request() to send request to server. This method calls getResponse() to receive the response from server. The response is assigned to "numOfRecords" int variable. (use Integer.parseInt() to convert String "1" to int 1). Disconnect connection. Last, this method returns the "numOfRecords". O protected Integer doInBackground(String... params) - This method gets two parameters (id and password), and calls runQuery() method whose result is returned. ○ protected void onPostExecute(Integer result) " This method pops up dialog window (with title, "Login Status"). If result is larger than 0, it sets message with "Login success". Otherwise, it sets message with "Login fail"). ■ To show the dialog window, use "show()" method. Appendix: login.php <?php /* open connection to db */ include dbconn.php'; /* get user request */ $id = $ POST["id"]; $password = $ POST["password"]; /* create query */ $query "select * from login where " "id='$id' and ". "password = '$password'"; /* run query */ $res = $conn->query($query); echo $res->num rows; /* close connection */ $conn->close(); ?> For this part, we will make a Login application where we log in based on id and password in "login" table of MySQL database in Internet. Login Application 1:29 LoginDanny ID Enter ID Password Enter Password LOGIN 4 # of records > 0 # of records == 0 1:36 DG LoginDanny ID 1:37 D G LoginDanny test ID Password *** LOGIN Login Status Login success Login success 1 PHP (login.php) HTTP Request (id, password) 2 select query (id, password) query HTTP Response (# of records) records # of records 3 3 test Password .. LOGIN Login Status Login fail Login fail MySQL id password : : : : 1) we type ID and Password, and click "LOGIN" button, which sends id and password to login.php in PHP server. 2) the login.php creates a select query based on the id and password. 3) when # of records are retrieved, login.php checks the # of records, and return the # of records to mobile device. 4) if the # of records is larger than 0, dialog pops up with "login success" message. Otherwise, dialog shows "login fail" message. >>> Project name: Login + <your first name> (e.g., LoginDanny) - Choose "Empty Activity" template >>> UI requirement: Layout: use RelativeLayout Define and use constants in XML files o dimens.xml ○ layout_space: 20dp (used for padding of layout) themes.xml TextView ID: IblID Text: ID " textSize: 24sp (used for font size of all texts) ID TextView ID: IblPassword EditText ID: inputID Text: (none) Hint: Enter ID Enter ID Password Enter Password Text: Password LOGIN ID: btnLogin Text: LOGIN Button Text - "Password" ID: inputPassword Text: (none) InputType: textPassword Hint: Enter Password >>> Logic codes: We need to create "Task" class to run program in the background. "MainActivity.java" is given for your information, but you need to implement "Task" class. I will give you some information for the "Task" class. I java edu.csustan.cs3810.logindanny MainActivity C Task [MainActivity.java] public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void login (View v) { // get id and password EditText inputID = findViewById(R.id.inputID); String id inputID.getText().toString(); EditText inputPassword = findViewById(R.id.inputPassword); String password = inputPassword.getText().toString(); // run task in background Task task = new Task(this); о IblID is pronounced as (el-b-el-ai-D) If not specified explicitly, please use values on your own. } } task.execute(id, password); Errors (in red color) on "Task" and "task.execute()" will be gone after creating Task class at the next step. "login" method is called when clicking "LOGIN" button. "login" method gets id and password, and run program (task) in the background. "login" method provides two arguments (id and password) to the task program. [Task.java] - Task inherits "AsyncTask<String, Void, Integer>". "String": type of input parameters (id and password) "Void": we do not show progress, so the type of progress is Void. 。 "Integer": type of # of records, which is integer. I show you instance variables, constants, constructor, and getURL method for your information. Use them for Task.java. public class Task extends AsyncTask<String, Void, Integer> { private Context main; private AlertDialog dialog; wwwwwwwwdww private static final String PROTOCOL = "http://"; private static final String IP ="34.82.21.121"; private static final String FILE_NAME = "login.php"; private static final String HTTP_POST_METHOD = "POST"; private static final int CONNECTION_ERROR public Task(Context main) { = -1; You need to implement methods that are shown as follows. I show you method description and some explanation. You need to implement codes inside methods. O private HttpURLConnection establishConnection() ■ This method establishes TCP connection to server, and returns the connection. ○ private void sendRequest(HttpURLConnection conn, String id, String password) This method sends a request to server using "POST" method through output stream. The code of the request is as follows. String request = "id=" + id + "&password=" + password; O private String getResponse(HttpURLConnection conn) This method gets a response from server through input stream, and returns it. The response is the # of records (by the query based on id and password), and the type of String. (e.g. "1" not integer 1). ○ protected void onPreExecute() " This method creates an alert dialog object. this.main = main; } private String getURL(String fileName) { return PROTOCOL + IP + "/" + fileName; } } о Choose "AlertDialog (android.app)" when importing AlertDialog class. public class Task extends AsyncTask<String, Void, Integer> { private Context main; private AlertDialog dialog; Import AlertDialog in android.app Class to Im private static AlertDialog (android.app) private static AlertDialog (androidx.appcompat.app) Gradle: andrc O private Integer runQuery(String id, String password) ■ ■ ■ ■ This method gets TCP connection after establishing connection. If connection is null, it returns -1. This method calls send Request() to send request to server. This method calls getResponse() to receive the response from server. The response is assigned to "numOfRecords" int variable. (use Integer.parseInt() to convert String "1" to int 1). Disconnect connection. Last, this method returns the "numOfRecords". O protected Integer doInBackground(String... params) - This method gets two parameters (id and password), and calls runQuery() method whose result is returned. ○ protected void onPostExecute(Integer result) " This method pops up dialog window (with title, "Login Status"). If result is larger than 0, it sets message with "Login success". Otherwise, it sets message with "Login fail"). ■ To show the dialog window, use "show()" method. Appendix: login.php <?php /* open connection to db */ include dbconn.php'; /* get user request */ $id = $ POST["id"]; $password = $ POST["password"]; /* create query */ $query "select * from login where " "id='$id' and ". "password = '$password'"; /* run query */ $res = $conn->query($query); echo $res->num rows; /* close connection */ $conn->close(); ?>
Expert Answer:
Related Book For
Posted Date:
Students also viewed these programming questions
-
Colil Computer Systems, Inc., manufactures printer circuit cards. All direct materials are added at the inception of the production process. During January, the accounting department noted that there...
-
Design a Java class that represents a cache with a fixed size. It should support operations like add, retrieve, and remove, and it should evict the least recently used item when it reaches capacity.
-
List three specific parts of the Case Guide, Objectives and Strategy Section (See below) that you had the most difficulty understanding. Describe your current understanding of these parts. Provide...
-
Question: Calculate the mass of the liquid for each trial. (Subtract the mass of the empty graduated cylinder from the mass of the graduated cylinder with liquid.) Trial 1 10.6 Trial 2 10.0 Trial 3...
-
A thin-walled double-pipe counter-flow heat exchanger is used to cool oil (cp = 2.20 kJ/kg·°C) from 150 to 40°C at a rate of 2 kg/s by water (cp = 4.18 kJ/kg·°C) that enters...
-
Find the type, transform to normal form, and solve. Show your work in detail. u xx - 16u yy = 0
-
Compare payout options at their future values (Learning Objective 3) Refer to the lottery payout options on page 486. Rather than compare the payout options at their present values (as is done in the...
-
A stream containing 5.15wt% chromium Cr is contained in the wastewater from a metal finishing plant. The wastewater stream is fed to a treatment unit that removes 95% of the chromium in the feed and...
-
8 . Prepare the following budgets for the month of December 2 0 1 3 . You will need to use proper headings and formatting 9 . Prepare a flexible budget for manufacturing costs for activity levels...
-
Jurassic Jumpers Co. (JJ Co.) offers bungee jumping for those looking for an extreme outing. JJ Co. prepares annual financial statements and has a December 31, 2023 yearend. a. On April 1, 2023, JJ...
-
(a) For any two documents z and z (note that z and z are not vectors), define a function k(x,z) to be the number of unique words that occur in both z andz (i.e. the size of the intersection of the...
-
Stare decisis (let the decision stand) is a common law principle that provides that when a decision is rendered in a lawsuit involving a particular set of facts, another lawsuit involving an...
-
Administrative law is public law issued by administrative agencies to administer the enacted laws of the federal and state governments. Administrative agencies implement and administer the...
-
Consider a boundary layer growing along a thin flat plate. This problem involves the following parameters: boundary layer thickness \(\delta\), downstream distance \(x\), freestream velocity \(V\),...
-
What is meant by political malpractice? Provide an example how it might apply in the healthcare setting.
-
Statutory law is written law that emanates from legislative bodies. A statute can abolish any rule of common law. The U.S. Constitution is the highest level of enacted law; it takes precedence over...
-
ABC Company's raw materials purchases for June, July, and August are budgeted at $45,000, $35,000, and $60,000, respectively. Based on past experience, ABC expects that 30% of a month's raw material...
-
In July 2013, cnet.com listed the battery life (in hours) and luminous intensity (i. e., screen brightness, in cd/m2) for a sample of tablet computers. We want to know if screen brightness is...
-
In Exercises find the area of the region bounded by the graphs of the equations. Use a graphing utility to graph the region and verify your result. y = e, y = 0, x = 0, x = 5
-
An open tank has the shape of a right circular cone (see figure). The tank is 8 feet across the top and 6 feet high. How much work is done in emptying the tank by pumping the water over the top edge?...
-
Find both first partial derivatives. z = ln(x + y)
-
Inventory costing methods The purchases and issues of rubber gaskets (Stores Ledger #11216) as shown in the records of Lowe Corporation for the month of November follow: Required: 1. Complete a...
-
Economic order quantity; ordering and carrying costs Similar to Self-Study Problem 1 Dolphin Company predicts that it will use 25, 000 units of material during the year. The expected daily usage is...
-
Economic order quantity; tabular computation Edgar Chemical, Inc., requires 20,000 gals. of material annually, where the cost of placing an order is $20 and the annual carrying cost per unit is $5....
Study smarter with the SolutionInn App