eranseg

Backendless Homework

Dec 8th, 2019
226
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 41.57 KB | None | 0 0
  1. //-------- JAVA Files -------------------
  2. //-------------- MainActivity.java -------------
  3.  
  4. package com.sgl.mybackendless;
  5.  
  6. import androidx.appcompat.app.AppCompatActivity;
  7.  
  8. import android.content.Context;
  9. import android.content.Intent;
  10. import android.os.Bundle;
  11. import android.util.Log;
  12. import android.view.View;
  13.  
  14. import com.backendless.Backendless;
  15. import com.backendless.async.callback.AsyncCallback;
  16. import com.backendless.exceptions.BackendlessFault;
  17.  
  18. public class MainActivity extends AppCompatActivity {
  19.  
  20.     Context context;
  21.  
  22.     @Override
  23.     protected void onCreate(Bundle savedInstanceState) {
  24.         super.onCreate(savedInstanceState);
  25.         setContentView(R.layout.activity_main);
  26.         setPointer();
  27.     }
  28.  
  29.     private void setPointer() {
  30.         this.context = this;
  31.         Backendless.initApp(context, Defaults.APPLICATION_ID, Defaults.API_KEY);
  32.         loadClasses();
  33.         findViewById(R.id.btn_login).setOnClickListener(new View.OnClickListener() {
  34.             @Override
  35.             public void onClick(View v) {
  36.                 startActivity(new Intent(context, LoginActivity.class));
  37.             }
  38.         });
  39.  
  40.         findViewById(R.id.btn_register).setOnClickListener(new View.OnClickListener() {
  41.             @Override
  42.             public void onClick(View v) {
  43.                 startActivity(new Intent(context, RegisterActivity.class));
  44.             }
  45.         });
  46.     }
  47.  
  48.     private void loadClasses() {
  49.         Class classObj = new Class();
  50.         Courses course = new Courses();
  51.         for(int i = 0; i < 3; i++) {
  52.             classObj.setClassName(Defaults.CLASSES[i]);
  53.             classObj.setClassDean(Defaults.DEANS[i]);
  54.             classObj.setClassID((i + 1) * 10);
  55.             Backendless.Data.of(Class.class).save(classObj, new AsyncCallback<Class>() {
  56.                 @Override
  57.                 public void handleResponse(Class response) {
  58.                     Log.i("Success", "handleResponse: Success saving " + response.getClassName());
  59.                 }
  60.  
  61.                 @Override
  62.                 public void handleFault(BackendlessFault fault) {
  63.                     Log.e("Error", "Class save failed: " + fault.getMessage());
  64.                 }
  65.             });
  66.             for(int j = 0; j < 3; j++) {
  67.                 course.setClassID((i + 1) * 10);
  68.                 course.setCourseID(100 * (i + 1) + j);
  69.                 course.setCourseName(Defaults.COURSES[3 * i + j]);
  70.                 String semester = Math.random()*2 > 1 ? "A" : "B";
  71.                 course.setSemester(semester);
  72.                 Backendless.Data.of(Courses.class).save(course, new AsyncCallback<Courses>() {
  73.                     @Override
  74.                     public void handleResponse(Courses response) {
  75.                         Log.i("Success", "handleResponse: Success saving " + response.getCourseName());
  76.                     }
  77.  
  78.                     @Override
  79.                     public void handleFault(BackendlessFault fault) {
  80.                         Log.e("Error course", "Course save failed: " + fault.getMessage());
  81.                     }
  82.                 });
  83.             }
  84.         }
  85.     }
  86. }
  87.  
  88. //----------------- RegisterActivity.java -----------------------------
  89.  
  90. package com.sgl.mybackendless;
  91.  
  92. import androidx.appcompat.app.AppCompatActivity;
  93.  
  94. import android.content.Context;
  95. import android.content.Intent;
  96. import android.os.AsyncTask;
  97. import android.os.Bundle;
  98. import android.util.Log;
  99. import android.view.View;
  100. import android.widget.EditText;
  101. import android.widget.Toast;
  102.  
  103. import com.backendless.Backendless;
  104. import com.backendless.BackendlessUser;
  105. import com.backendless.async.callback.AsyncCallback;
  106. import com.backendless.exceptions.BackendlessFault;
  107.  
  108. import java.util.HashMap;
  109. import java.util.List;
  110.  
  111. public class RegisterActivity extends AppCompatActivity {
  112.  
  113.     EditText firstName, lastName, email, password, className;
  114.     Context context;
  115.     BackendlessUser newUser;
  116.     int classId;
  117.  
  118.     @Override
  119.     protected void onCreate(Bundle savedInstanceState) {
  120.         super.onCreate(savedInstanceState);
  121.         setContentView(R.layout.activity_register);
  122.         setPointer();
  123.     }
  124.  
  125.     private void setPointer() {
  126.         this.context = this;
  127.  
  128.         findViewById(R.id.btn_register).setOnClickListener(new View.OnClickListener() {
  129.             @Override
  130.             public void onClick(View v) {
  131.                 registerUser();
  132.             }
  133.         });
  134.     }
  135.  
  136.     private void buildUserData() {
  137.         newUser = new BackendlessUser();
  138.         final HashMap<String, Object> props = new HashMap<>();
  139.         props.put("firstName", firstName.getText().toString());
  140.         props.put("lastName", lastName.getText().toString());
  141.         props.put("password", password.getText().toString());
  142.         props.put("email", email.getText().toString());
  143.         props.put("classID", classId);
  144.         props.put("className", className.getText().toString());
  145.         newUser.setProperties(props);
  146.     }
  147.  
  148.     private void registerUser() {
  149.         firstName = findViewById(R.id.input_first_name);
  150.         lastName = findViewById(R.id.input_last_name);
  151.         email = findViewById(R.id.input_email);
  152.         password = findViewById(R.id.input_password);
  153.         className = findViewById(R.id.input_class);
  154.         classId = 9;
  155.         new retrieveClassIdtask().execute(className.getText().toString());
  156.  
  157.     }
  158.  
  159.     private class retrieveClassIdtask extends AsyncTask<String, Void, Void> {
  160.  
  161.         @Override
  162.         protected Void doInBackground(String... strings) {
  163.             try {
  164.                 List<Class> classes = Backendless.Data.of(Class.class).find();
  165.                 for (Class c : classes) {
  166.                     if(c.getClassName().equals(strings[0])) {
  167.                         classId = Integer.parseInt(c.getClassID().toString());
  168.                     }
  169.                 }
  170.             } catch (Exception e) {
  171.                 Log.e("Error", "doInBackground: " + e.getMessage());
  172.                 e.printStackTrace();
  173.             }
  174.             return null;
  175.         }
  176.  
  177.         @Override
  178.         protected void onPostExecute(Void aVoid) {
  179.             if(classId == 9) {
  180.                 Toast.makeText(context, "Bad input - Class Name", Toast.LENGTH_LONG).show();
  181.             } else {
  182.                 Log.i("Register Error", "onPostExecute: Class ID and name: " + classId + "; " + className.getText().toString());
  183.                 buildUserData();
  184.                 Backendless.UserService.register(newUser, new AsyncCallback<BackendlessUser>() {
  185.                     @Override
  186.                     public void handleResponse(BackendlessUser response) {
  187.                         String fullName = firstName.getText().toString() + " " + lastName.getText().toString();
  188.                         Toast.makeText(context, "Hi " + fullName + ", you are now registered!", Toast.LENGTH_SHORT).show();
  189.                         Intent intent = new Intent(context, StudentActivity.class);
  190.                         intent.putExtra("username", firstName.getText().toString());
  191.                         intent.putExtra("cId", classId);
  192.                         intent.putExtra("cName", className.getText().toString());
  193.                         Log.i("CLASS ID", "handleResponse: " + classId);
  194.                         startActivity(intent);
  195.                     }
  196.  
  197.                     @Override
  198.                     public void handleFault(BackendlessFault fault) {
  199.                         Log.e("Register Error", "handleFault2: " + fault.getMessage());
  200.                     }
  201.                 });
  202.             }
  203.         }
  204.     }
  205. }
  206.  
  207. // ---------------- LoginActivity.com ---------------------------
  208.  
  209. package com.sgl.mybackendless;
  210.  
  211. import androidx.appcompat.app.AppCompatActivity;
  212.  
  213. import android.content.Context;
  214. import android.content.Intent;
  215. import android.os.Bundle;
  216. import android.util.Log;
  217. import android.view.View;
  218. import android.widget.EditText;
  219. import android.widget.Toast;
  220.  
  221. import com.backendless.Backendless;
  222. import com.backendless.BackendlessUser;
  223. import com.backendless.async.callback.AsyncCallback;
  224. import com.backendless.exceptions.BackendlessFault;
  225. import com.backendless.persistence.DataQueryBuilder;
  226.  
  227. import java.util.List;
  228. import java.util.Map;
  229.  
  230. public class LoginActivity extends AppCompatActivity {
  231.  
  232.     Context context;
  233.  
  234.     @Override
  235.     protected void onCreate(Bundle savedInstanceState) {
  236.         super.onCreate(savedInstanceState);
  237.         setContentView(R.layout.activity_login);
  238.         setPointer();
  239.     }
  240.  
  241.     private void setPointer() {
  242.         this.context = this;
  243.         findViewById(R.id.btn_login).setOnClickListener(new View.OnClickListener() {
  244.             @Override
  245.             public void onClick(View v) {
  246.                 loginUser();
  247.             }
  248.         });
  249.         findViewById(R.id.txtToRegisterPage).setOnClickListener(new View.OnClickListener() {
  250.             @Override
  251.             public void onClick(View v) {
  252.                 startActivity(new Intent(context, RegisterActivity.class));
  253.             }
  254.         });
  255.     }
  256.  
  257.     private void loginUser() {
  258.         String uEmail = ((EditText)findViewById(R.id.input_email)).getText().toString();
  259.         String uPass = ((EditText)findViewById(R.id.input_password)).getText().toString();
  260.  
  261.         Backendless.UserService.login(uEmail, uPass, new AsyncCallback<BackendlessUser>() {
  262.             @Override
  263.             public void handleResponse(BackendlessUser response) {
  264.                 Intent intent = new Intent(context, StudentActivity.class);
  265.                 startActivity(intent);
  266.             }
  267.  
  268.             @Override
  269.             public void handleFault(BackendlessFault fault) {
  270.                 Toast.makeText(context, "Incorrect email or password!", Toast.LENGTH_LONG).show();
  271.             }
  272.         });
  273.     }
  274. }
  275.  
  276. //---------------------- StudentActivity.java ------------------------------
  277.  
  278. package com.sgl.mybackendless;
  279.  
  280. import androidx.appcompat.app.AppCompatActivity;
  281.  
  282. import android.content.Context;
  283. import android.os.Bundle;
  284. import android.util.Log;
  285. import android.view.View;
  286. import android.widget.ListView;
  287. import android.widget.TextView;
  288.  
  289. import com.backendless.Backendless;
  290. import com.backendless.async.callback.AsyncCallback;
  291. import com.backendless.exceptions.BackendlessFault;
  292.  
  293. import java.util.ArrayList;
  294. import java.util.List;
  295.  
  296. public class StudentActivity extends AppCompatActivity {
  297.  
  298.     Context context;
  299.     TextView titles;
  300.     ArrayList<String> cList;
  301.     String firstName, clName;
  302.     ListView coursesList;
  303.     int cId;
  304.  
  305.     @Override
  306.     protected void onCreate(Bundle savedInstanceState) {
  307.         super.onCreate(savedInstanceState);
  308.         setContentView(R.layout.activity_student);
  309.         setPointer();
  310.     }
  311.  
  312.     private void setPointer() {
  313.         // Initializing global variables
  314.         this.context = this;
  315.         titles = findViewById(R.id.txtTable);
  316.         titles.setVisibility(View.INVISIBLE);
  317.         cList = new ArrayList<>();
  318.         Bundle extras = getIntent().getExtras();
  319.         if(extras == null) {
  320.             // Coming from the LoginActivity
  321.             firstName = Backendless.UserService.CurrentUser().getProperty("firstName").toString();
  322.             clName = Backendless.UserService.CurrentUser().getProperty("className").toString();
  323.             cId = Integer.parseInt(Backendless.UserService.CurrentUser().getProperty("classID").toString());
  324.         } else {
  325.             // Coming from the RegisterActivity
  326.             firstName = extras.getString("username");
  327.             clName = extras.getString("cName");
  328.             cId = extras.getInt("cId");
  329.         }
  330.         // Set the welcome title
  331.         ((TextView)findViewById(R.id.txtWelcome)).setText("hey " + firstName + "\nWelcom to the " + clName + " class");
  332.         loadData();
  333.     }
  334.  
  335.     private void loadData() {
  336.         /* Retrieving data from the courses table in Backendless using a non-blocking method */
  337.         Backendless.Data.of(Courses.class).find(new AsyncCallback<List<Courses>>() {
  338.             @Override
  339.             public void handleResponse(List<Courses> response) {
  340.                 // Turning all data from the table to a string (done for each line of data)
  341.                 String cName, semester, finalStr;
  342.                 int courseId;
  343.                 cList.add("Course;ID;Semester");
  344.                 for (Courses course : response) {
  345.                     if(course.getClassID() == cId) {
  346.                         cName = course.getCourseName();
  347.                         courseId = course.getCourseID();
  348.                         semester = course.getSemester();
  349.                         finalStr = cName + ";" + courseId + ";" + semester;
  350.                         cList.add(finalStr);
  351.                     }
  352.                 }
  353.                 String s = cList.isEmpty() ? "You have No Courses" : "Here are your courses:";
  354.  
  355.                 titles.setText(s);
  356.                 titles.setVisibility(View.VISIBLE);
  357.  
  358.                 updateListView();
  359.             }
  360.  
  361.             @Override
  362.             public void handleFault(BackendlessFault fault) {
  363.                 Log.e("Error", "handleFault: " + fault.getMessage());
  364.             }
  365.         });
  366.     }
  367.  
  368.     private void updateListView() {
  369.         CourseAdapter courseAdapter = new CourseAdapter(context, cList);
  370.         coursesList = findViewById(R.id.courseList);
  371.         coursesList.setAdapter(courseAdapter);
  372.     }
  373. }
  374.  
  375. // ---------------- Defaults.java ------------------------
  376.  
  377. package com.sgl.mybackendless;
  378.  
  379. class Defaults {
  380.  
  381.     static final String APPLICATION_ID = "E0699EFD-6032-8AE7-FF1C-260DE5868F00";
  382.     static final String API_KEY = "D5022513-3665-43A7-9E2B-1D9AD2FAF31A";
  383.  
  384.     static final String[] CLASSES = {"Applications", "Mathematics", "ComputerGraphics"};
  385.     static final String[] COURSES = {"Java", "Android", "Swift", "Linear Algebra", "Combinatorics", "Statistics", "Projection", "Camera", "Shadowing"};
  386.     static final String[] DEANS = {"Zeev Mindali", "Daniel Braudo", "Eran Segal"};
  387. }
  388.  
  389. //------------------- CourseAdapter.java ------------------------
  390.  
  391. package com.sgl.mybackendless;
  392.  
  393. import android.content.Context;
  394. import android.graphics.Color;
  395. import android.util.Log;
  396. import android.view.LayoutInflater;
  397. import android.view.View;
  398. import android.view.ViewGroup;
  399. import android.widget.BaseAdapter;
  400. import android.widget.TextView;
  401.  
  402. import java.util.HashMap;
  403. import java.util.List;
  404.  
  405. public class CourseAdapter extends BaseAdapter {
  406.  
  407.     private List courses;
  408.     private Context context;
  409.     TextView courseId;
  410.     TextView courseName;
  411.     TextView semester;
  412.  
  413.     public CourseAdapter(Context context, List coursesList) {
  414.         this.context = context;
  415.         this.courses = coursesList;
  416.     }
  417.  
  418.     @Override
  419.     public int getCount() {
  420.         return courses.size();
  421.     }
  422.  
  423.     @Override
  424.     public Object getItem(int position) {
  425.         return (getCount() > 0) ? courses.get(position) : null;
  426.     }
  427.  
  428.     @Override
  429.     public long getItemId(int position) {
  430.         return 0;
  431.     }
  432.  
  433.     @Override
  434.     public View getView(int position, View convertView, ViewGroup parent) {
  435.  
  436.         final View singleView = LayoutInflater.from(context).inflate(R.layout.course_layout, null);
  437.         courseId = singleView.findViewById(R.id.courseID);
  438.         courseName = singleView.findViewById(R.id.courseName);
  439.         semester = singleView.findViewById(R.id.semester);
  440.         String[] values = ((String)courses.get(position)).split(";");
  441.         if(values.length != 3) {
  442.             Log.e("Error", "getView: " + " failed to parse course details!" );
  443.         } else {
  444.             courseId.setText(values[0]);
  445.             courseName.setText(values[1]);
  446.             semester.setText(values[2]);
  447.         }
  448.         if(position == 0) {
  449.             courseName.setTextColor(Color.YELLOW);
  450.             courseId.setTextColor(Color.YELLOW);
  451.             semester.setTextColor(Color.YELLOW);
  452.             courseName.setBackgroundColor(0xFFFF0000);
  453.             courseId.setBackgroundColor(0xFFFF0000);
  454.             semester.setBackgroundColor(0xFFFF0000);
  455.         }
  456.         return singleView;
  457.     }
  458. }
  459.  
  460.  
  461. // ----------------------- Class.java (generated from Backendless) ----------------------------
  462.  
  463.  
  464. package com.sgl.mybackendless;
  465.  
  466. import com.backendless.Backendless;
  467. import com.backendless.BackendlessUser;
  468. import com.backendless.async.callback.AsyncCallback;
  469. import com.backendless.persistence.*;
  470. import com.backendless.geo.GeoPoint;
  471.  
  472. import java.util.List;
  473. import java.util.Date;
  474.  
  475. public class Class
  476. {
  477.   private String objectId;
  478.   private Date created;
  479.   private Date updated;
  480.   private Integer classID;
  481.   private String ClassDean;
  482.   private String ownerId;
  483.   private String ClassName;
  484.   public String getObjectId()
  485.   {
  486.     return objectId;
  487.   }
  488.  
  489.   public Date getCreated()
  490.   {
  491.     return created;
  492.   }
  493.  
  494.   public Date getUpdated()
  495.   {
  496.     return updated;
  497.   }
  498.  
  499.   public Integer getClassID()
  500.   {
  501.     return classID;
  502.   }
  503.  
  504.   public void setClassID( Integer classID )
  505.   {
  506.     this.classID = classID;
  507.   }
  508.  
  509.   public String getClassDean()
  510.   {
  511.     return ClassDean;
  512.   }
  513.  
  514.   public void setClassDean( String ClassDean )
  515.   {
  516.     this.ClassDean = ClassDean;
  517.   }
  518.  
  519.   public String getOwnerId()
  520.   {
  521.     return ownerId;
  522.   }
  523.  
  524.   public String getClassName()
  525.   {
  526.     return ClassName;
  527.   }
  528.  
  529.   public void setClassName( String ClassName )
  530.   {
  531.     this.ClassName = ClassName;
  532.   }
  533.  
  534.                                                    
  535.   public Class save()
  536.   {
  537.     return Backendless.Data.of( Class.class ).save( this );
  538.   }
  539.  
  540.   public void saveAsync( AsyncCallback<Class> callback )
  541.   {
  542.     Backendless.Data.of( Class.class ).save( this, callback );
  543.   }
  544.  
  545.   public Long remove()
  546.   {
  547.     return Backendless.Data.of( Class.class ).remove( this );
  548.   }
  549.  
  550.   public void removeAsync( AsyncCallback<Long> callback )
  551.   {
  552.     Backendless.Data.of( Class.class ).remove( this, callback );
  553.   }
  554.  
  555.   public static Class findById( String id )
  556.   {
  557.     return Backendless.Data.of( Class.class ).findById( id );
  558.   }
  559.  
  560.   public static void findByIdAsync( String id, AsyncCallback<Class> callback )
  561.   {
  562.     Backendless.Data.of( Class.class ).findById( id, callback );
  563.   }
  564.  
  565.   public static Class findFirst()
  566.   {
  567.     return Backendless.Data.of( Class.class ).findFirst();
  568.   }
  569.  
  570.   public static void findFirstAsync( AsyncCallback<Class> callback )
  571.   {
  572.     Backendless.Data.of( Class.class ).findFirst( callback );
  573.   }
  574.  
  575.   public static Class findLast()
  576.   {
  577.     return Backendless.Data.of( Class.class ).findLast();
  578.   }
  579.  
  580.   public static void findLastAsync( AsyncCallback<Class> callback )
  581.   {
  582.     Backendless.Data.of( Class.class ).findLast( callback );
  583.   }
  584.  
  585.   public static List<Class> find( DataQueryBuilder queryBuilder )
  586.   {
  587.     return Backendless.Data.of( Class.class ).find( queryBuilder );
  588.   }
  589.  
  590.   public static void findAsync( DataQueryBuilder queryBuilder, AsyncCallback<List<Class>> callback )
  591.   {
  592.     Backendless.Data.of( Class.class ).find( queryBuilder, callback );
  593.   }
  594. }
  595.  
  596. //--------------- Courses.java (generated from Backendless) -------------
  597.  
  598.  
  599. package com.sgl.mybackendless;
  600.  
  601. import com.backendless.Backendless;
  602. import com.backendless.BackendlessUser;
  603. import com.backendless.async.callback.AsyncCallback;
  604. import com.backendless.persistence.*;
  605. import com.backendless.geo.GeoPoint;
  606.  
  607. import java.util.List;
  608. import java.util.Date;
  609.  
  610. public class Courses
  611. {
  612.   private String courseName;
  613.   private String semester;
  614.   private Date created;
  615.   private Integer classID;
  616.   private String ownerId;
  617.   private Date updated;
  618.   private Integer courseID;
  619.   private String objectId;
  620.   public String getCourseName()
  621.   {
  622.     return courseName;
  623.   }
  624.  
  625.   public void setCourseName( String courseName )
  626.   {
  627.     this.courseName = courseName;
  628.   }
  629.  
  630.   public String getSemester()
  631.   {
  632.     return semester;
  633.   }
  634.  
  635.   public void setSemester( String semester )
  636.   {
  637.     this.semester = semester;
  638.   }
  639.  
  640.   public Date getCreated()
  641.   {
  642.     return created;
  643.   }
  644.  
  645.   public Integer getClassID()
  646.   {
  647.     return classID;
  648.   }
  649.  
  650.   public void setClassID( Integer classID )
  651.   {
  652.     this.classID = classID;
  653.   }
  654.  
  655.   public String getOwnerId()
  656.   {
  657.     return ownerId;
  658.   }
  659.  
  660.   public Date getUpdated()
  661.   {
  662.     return updated;
  663.   }
  664.  
  665.   public Integer getCourseID()
  666.   {
  667.     return courseID;
  668.   }
  669.  
  670.   public void setCourseID( Integer courseID )
  671.   {
  672.     this.courseID = courseID;
  673.   }
  674.  
  675.   public String getObjectId()
  676.   {
  677.     return objectId;
  678.   }
  679.  
  680.                                                    
  681.   public Courses save()
  682.   {
  683.     return Backendless.Data.of( Courses.class ).save( this );
  684.   }
  685.  
  686.   public void saveAsync( AsyncCallback<Courses> callback )
  687.   {
  688.     Backendless.Data.of( Courses.class ).save( this, callback );
  689.   }
  690.  
  691.   public Long remove()
  692.   {
  693.     return Backendless.Data.of( Courses.class ).remove( this );
  694.   }
  695.  
  696.   public void removeAsync( AsyncCallback<Long> callback )
  697.   {
  698.     Backendless.Data.of( Courses.class ).remove( this, callback );
  699.   }
  700.  
  701.   public static Courses findById( String id )
  702.   {
  703.     return Backendless.Data.of( Courses.class ).findById( id );
  704.   }
  705.  
  706.   public static void findByIdAsync( String id, AsyncCallback<Courses> callback )
  707.   {
  708.     Backendless.Data.of( Courses.class ).findById( id, callback );
  709.   }
  710.  
  711.   public static Courses findFirst()
  712.   {
  713.     return Backendless.Data.of( Courses.class ).findFirst();
  714.   }
  715.  
  716.   public static void findFirstAsync( AsyncCallback<Courses> callback )
  717.   {
  718.     Backendless.Data.of( Courses.class ).findFirst( callback );
  719.   }
  720.  
  721.   public static Courses findLast()
  722.   {
  723.     return Backendless.Data.of( Courses.class ).findLast();
  724.   }
  725.  
  726.   public static void findLastAsync( AsyncCallback<Courses> callback )
  727.   {
  728.     Backendless.Data.of( Courses.class ).findLast( callback );
  729.   }
  730.  
  731.   public static List<Courses> find( DataQueryBuilder queryBuilder )
  732.   {
  733.     return Backendless.Data.of( Courses.class ).find( queryBuilder );
  734.   }
  735.  
  736.   public static void findAsync( DataQueryBuilder queryBuilder, AsyncCallback<List<Courses>> callback )
  737.   {
  738.     Backendless.Data.of( Courses.class ).find( queryBuilder, callback );
  739.   }
  740. }
  741.  
  742. //////////////////// Layout files ------------------------------
  743. //----------------- activity_main.xml -------------------------
  744.  
  745. <?xml version="1.0" encoding="utf-8"?>
  746. <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
  747.     xmlns:app="http://schemas.android.com/apk/res-auto"
  748.     xmlns:tools="http://schemas.android.com/tools"
  749.     android:layout_width="match_parent"
  750.     android:layout_height="match_parent"
  751.     tools:context=".MainActivity">
  752.  
  753.     <ScrollView
  754.         android:id="@+id/scrollView2"
  755.         android:layout_width="match_parent"
  756.         android:layout_height="match_parent"
  757.         android:background="#DD3131"
  758.         app:layout_constraintBottom_toBottomOf="parent"
  759.         app:layout_constraintEnd_toEndOf="parent"
  760.         app:layout_constraintStart_toStartOf="parent"
  761.         app:layout_constraintTop_toTopOf="parent">
  762.  
  763.         <LinearLayout
  764.             android:layout_width="match_parent"
  765.             android:layout_height="wrap_content"
  766.             android:orientation="vertical"
  767.             android:paddingStart="18dp"
  768.             android:paddingTop="24dp"
  769.             android:paddingEnd="24dp">
  770.  
  771.             <TextView
  772.                 android:layout_width="match_parent"
  773.                 android:layout_height="wrap_content"
  774.                 android:layout_marginTop="16dp"
  775.                 android:gravity="center"
  776.                 android:text="@string/mindali_university_of_apps"
  777.                 android:textColor="#FFFFFF"
  778.                 android:textSize="44sp" />
  779.  
  780.             <LinearLayout
  781.                 android:layout_width="match_parent"
  782.                 android:layout_height="wrap_content"
  783.                 android:orientation="horizontal">
  784.  
  785.                 <ImageView
  786.                     android:id="@+id/pic1"
  787.                     android:layout_width="0dp"
  788.                     android:layout_height="120dp"
  789.                     android:layout_gravity="center"
  790.                     android:layout_marginTop="24dp"
  791.                     android:layout_marginBottom="24dp"
  792.                     android:layout_weight="1"
  793.                     android:alpha="0.6"
  794.                     android:contentDescription="@string/site_logo"
  795.                     android:src="@drawable/diploma"
  796.                     android:tint="#FEFFFFFF" />
  797.             </LinearLayout>
  798.  
  799.  
  800.  
  801.             <TextView
  802.                 android:layout_width="match_parent"
  803.                 android:layout_height="wrap_content"
  804.                 android:layout_marginTop="20dp"
  805.                 android:gravity="center"
  806.                 android:text="@string/welcome"
  807.                 android:textColor="#FFFFFF"
  808.                 android:textSize="24sp" />
  809.             <TextView
  810.                 android:layout_width="match_parent"
  811.                 android:layout_height="wrap_content"
  812.                 android:layout_marginTop="12dp"
  813.                 android:layout_marginBottom="12dp"
  814.                 android:gravity="center"
  815.                 android:text="@string/join"
  816.                 android:textColor="#FFFFFF"
  817.                 android:textSize="20sp" />
  818.             <LinearLayout
  819.                 android:layout_width="match_parent"
  820.                 android:layout_height="match_parent"
  821.                 android:orientation="horizontal">
  822.  
  823.                 <Button
  824.                     android:id="@+id/btn_login"
  825.                     style="@style/Widget.AppCompat.Button.Borderless.Colored"
  826.                     android:layout_width="match_parent"
  827.                     android:layout_height="wrap_content"
  828.                     android:layout_marginTop="24dp"
  829.                     android:layout_marginEnd="12dp"
  830.                     android:layout_marginBottom="24dp"
  831.                     android:layout_weight="1"
  832.                     android:background="#5E910707"
  833.                     android:padding="12dp"
  834.                     android:text="@string/login"
  835.                     android:textColor="#FFFFFF"
  836.                     android:textSize="18sp" />
  837.  
  838.                 <Button
  839.                     android:id="@+id/btn_register"
  840.                     style="@style/Widget.AppCompat.Button.Borderless.Colored"
  841.                     android:layout_width="match_parent"
  842.                     android:layout_height="wrap_content"
  843.                     android:layout_marginStart="12dp"
  844.                     android:layout_marginTop="24dp"
  845.                     android:layout_marginBottom="24dp"
  846.                     android:layout_weight="1"
  847.                     android:background="#5E910707"
  848.                     android:padding="12dp"
  849.                     android:text="@string/register"
  850.                     android:textColor="#FFFFFF"
  851.                     android:textSize="18sp" />
  852.             </LinearLayout>
  853.         </LinearLayout>
  854.     </ScrollView>
  855.  
  856. </androidx.constraintlayout.widget.ConstraintLayout>
  857.  
  858. //------------------------ activity_login.xml ----------------------------
  859.  
  860. <?xml version="1.0" encoding="utf-8"?>
  861. <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
  862.     xmlns:app="http://schemas.android.com/apk/res-auto"
  863.     xmlns:tools="http://schemas.android.com/tools"
  864.     android:layout_width="match_parent"
  865.     android:layout_height="match_parent"
  866.     tools:context=".MainActivity">
  867.  
  868.     <ScrollView
  869.         android:id="@+id/scrollView2"
  870.         android:layout_width="match_parent"
  871.         android:layout_height="match_parent"
  872.         android:background="#DD3131"
  873.         app:layout_constraintBottom_toBottomOf="parent"
  874.         app:layout_constraintEnd_toEndOf="parent"
  875.         app:layout_constraintStart_toStartOf="parent"
  876.         app:layout_constraintTop_toTopOf="parent">
  877.  
  878.         <LinearLayout
  879.             android:layout_width="match_parent"
  880.             android:layout_height="wrap_content"
  881.             android:orientation="vertical"
  882.             android:paddingStart="24dp"
  883.             android:paddingTop="56dp"
  884.             android:paddingEnd="24dp">
  885.  
  886.             <ImageView
  887.                 android:id="@+id/logo"
  888.                 android:layout_width="wrap_content"
  889.                 android:layout_height="96dp"
  890.                 android:layout_gravity="center"
  891.                 android:layout_marginBottom="24dp"
  892.                 android:layout_marginTop="24dp"
  893.                 android:alpha="0.6"
  894.                 android:contentDescription="@string/site_logo"
  895.                 android:src="@drawable/logo" />
  896.  
  897.             <!-- Email Label -->
  898.             <TextView
  899.                 android:layout_width="match_parent"
  900.                 android:layout_height="wrap_content"
  901.                 android:layout_marginTop="24dp"
  902.                 android:gravity="left"
  903.                 android:text="Email"
  904.                 android:textColor="#FFFFFF"
  905.                 android:textSize="16sp" />
  906.  
  907.             <EditText
  908.                 android:id="@+id/input_email"
  909.                 style="@style/Base.Widget.MaterialComponents.TextInputEditText"
  910.                 android:layout_width="match_parent"
  911.                 android:layout_height="wrap_content"
  912.                 android:inputType="textEmailAddress"
  913.                 android:textAppearance="@style/TextAppearance.AppCompat.Medium"
  914.                 android:textColor="#FFFFFF" />
  915.  
  916.  
  917.             <!-- Password Label -->
  918.             <TextView
  919.                 android:layout_width="match_parent"
  920.                 android:layout_height="wrap_content"
  921.                 android:layout_marginTop="24dp"
  922.                 android:gravity="left"
  923.                 android:text="Password"
  924.                 android:textColor="#FFFFFF"
  925.                 android:textSize="16sp" />
  926.             <EditText
  927.                 android:id="@+id/input_password"
  928.                 android:layout_width="match_parent"
  929.                 android:layout_height="wrap_content"
  930.                 android:textColor="#FFFFFF"
  931.                 android:inputType="textPassword" />
  932.  
  933.             <Button
  934.                 android:id="@+id/btn_login"
  935.                 android:layout_width="match_parent"
  936.                 android:layout_height="wrap_content"
  937.                 android:layout_marginTop="24dp"
  938.                 android:layout_marginBottom="24dp"
  939.                 android:background="#5E910707"
  940.                 android:padding="12dp"
  941.                 android:text="@string/login"
  942.                 android:textColor="#FFFFFF"
  943.                 android:textSize="18sp" />
  944.  
  945.  
  946.             <TextView
  947.                 android:id="@+id/txtToRegisterPage"
  948.                 android:layout_width="match_parent"
  949.                 android:layout_height="wrap_content"
  950.                 android:layout_marginBottom="24dp"
  951.                 android:gravity="center"
  952.                 android:text="@string/no_account_yet_create_one"
  953.                 android:textColor="#FFFFFF"
  954.                 android:textSize="16sp" />
  955.         </LinearLayout>
  956.     </ScrollView>
  957.  
  958. </androidx.constraintlayout.widget.ConstraintLayout>
  959.  
  960. //--------------------- activity_register.xml ----------------------------
  961.  
  962. <?xml version="1.0" encoding="utf-8"?>
  963. <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
  964.     xmlns:app="http://schemas.android.com/apk/res-auto"
  965.     xmlns:tools="http://schemas.android.com/tools"
  966.     android:layout_width="match_parent"
  967.     android:layout_height="match_parent"
  968.     tools:context=".MainActivity">
  969.  
  970.     <ScrollView
  971.         android:id="@+id/scrollView2"
  972.         android:layout_width="match_parent"
  973.         android:layout_height="match_parent"
  974.         android:background="#DD3131"
  975.         app:layout_constraintBottom_toBottomOf="parent"
  976.         app:layout_constraintEnd_toEndOf="parent"
  977.         app:layout_constraintStart_toStartOf="parent"
  978.         app:layout_constraintTop_toTopOf="parent">
  979.  
  980.         <LinearLayout
  981.             android:layout_width="match_parent"
  982.             android:layout_height="wrap_content"
  983.             android:orientation="vertical"
  984.             android:paddingStart="24dp"
  985.             android:paddingTop="56dp"
  986.             android:paddingEnd="24dp">
  987.  
  988.             <ImageView
  989.                 android:id="@+id/logo"
  990.                 android:layout_width="wrap_content"
  991.                 android:layout_height="96dp"
  992.                 android:layout_gravity="center"
  993.                 android:layout_marginTop="12dp"
  994.                 android:layout_marginBottom="12dp"
  995.                 android:alpha="0.6"
  996.                 android:contentDescription="@string/site_logo"
  997.                 android:src="@drawable/pic1" />
  998.  
  999.             <!-- First Name Label -->
  1000.             <TextView
  1001.                 android:layout_width="match_parent"
  1002.                 android:layout_height="wrap_content"
  1003.                 android:layout_marginTop="6dp"
  1004.                 android:gravity="start"
  1005.                 android:text="@string/first_name"
  1006.                 android:textColor="#FFFFFF"
  1007.                 android:textSize="16sp" />
  1008.  
  1009.             <!-- First Name Input -->
  1010.             <EditText
  1011.                 android:id="@+id/input_first_name"
  1012.                 android:layout_width="match_parent"
  1013.                 android:layout_height="wrap_content"
  1014.                 android:autofillHints="@string/email"
  1015.                 android:contentDescription="@string/email"
  1016.                 android:inputType="textEmailAddress"
  1017.                 android:labelFor="@id/input_last_name"
  1018.                 android:textColor="#FFFFFF" />
  1019.  
  1020.             <!-- Last Name Label -->
  1021.             <TextView
  1022.                 android:layout_width="match_parent"
  1023.                 android:layout_height="wrap_content"
  1024.                 android:layout_marginTop="6dp"
  1025.                 android:gravity="start"
  1026.                 android:text="@string/last_name"
  1027.                 android:textColor="#FFFFFF"
  1028.                 android:textSize="16sp" />
  1029.  
  1030.             <!-- Last Name Input -->
  1031.             <EditText
  1032.                 android:id="@+id/input_last_name"
  1033.                 android:layout_width="match_parent"
  1034.                 android:layout_height="wrap_content"
  1035.                 android:autofillHints="@string/email"
  1036.                 android:contentDescription="@string/email"
  1037.                 android:ems="10"
  1038.                 android:inputType="textEmailAddress"
  1039.                 android:labelFor="@id/input_first_name"
  1040.                 android:textColor="#FFFFFF" />
  1041.  
  1042.             <!-- Email Label -->
  1043.             <TextView
  1044.                 android:layout_width="match_parent"
  1045.                 android:layout_height="wrap_content"
  1046.                 android:layout_marginTop="6dp"
  1047.                 android:gravity="start"
  1048.                 android:text="@string/email"
  1049.                 android:textColor="#FFFFFF"
  1050.                 android:textSize="16sp" />
  1051.  
  1052.             <!-- Email Input -->
  1053.             <EditText
  1054.                 android:id="@+id/input_email"
  1055.                 android:layout_width="match_parent"
  1056.                 android:layout_height="wrap_content"
  1057.                 android:autofillHints="@string/email"
  1058.                 android:contentDescription="@string/email"
  1059.                 android:ems="10"
  1060.                 android:inputType="textEmailAddress"
  1061.                 android:labelFor="@id/input_class"
  1062.                 android:textColor="#FFFFFF" />
  1063.  
  1064.             <!-- Password Label -->
  1065.             <TextView
  1066.                 android:layout_width="match_parent"
  1067.                 android:layout_height="wrap_content"
  1068.                 android:layout_marginTop="6dp"
  1069.                 android:gravity="start"
  1070.                 android:text="@string/password"
  1071.                 android:textColor="#FFFFFF"
  1072.                 android:textSize="16sp" />
  1073.  
  1074.             <!-- Password Input -->
  1075.             <EditText
  1076.                 android:id="@+id/input_password"
  1077.                 android:layout_width="match_parent"
  1078.                 android:layout_height="wrap_content"
  1079.                 android:autofillHints="@string/password"
  1080.                 android:textColor="#FFFFFF"
  1081.                 android:inputType="textPassword"
  1082.                 android:labelFor="@id/input_email" />
  1083.  
  1084.             <!-- Class Label -->
  1085.             <TextView
  1086.                 android:layout_width="match_parent"
  1087.                 android:layout_height="wrap_content"
  1088.                 android:layout_marginTop="6dp"
  1089.                 android:gravity="start"
  1090.                 android:text="@string/course"
  1091.                 android:textColor="#FFFFFF"
  1092.                 android:textSize="16sp" />
  1093.  
  1094.             <!-- Class Input -->
  1095.             <EditText
  1096.                 android:id="@+id/input_class"
  1097.                 android:layout_width="match_parent"
  1098.                 android:layout_height="wrap_content"
  1099.                 android:autofillHints="@string/course"
  1100.                 android:inputType="text"
  1101.                 android:textColor="#FFFFFF"
  1102.                 android:labelFor="@id/input_password" />
  1103.  
  1104.             <Button
  1105.                 android:id="@+id/btn_register"
  1106.                 android:layout_width="match_parent"
  1107.                 android:layout_height="wrap_content"
  1108.                 android:layout_marginTop="12dp"
  1109.                 android:layout_marginBottom="12dp"
  1110.                 android:background="#5E910707"
  1111.                 android:padding="12dp"
  1112.                 android:text="@string/register"
  1113.                 android:textColor="#FFFFFF"
  1114.                 android:textSize="18sp" />
  1115.  
  1116.  
  1117.             <TextView
  1118.                 android:id="@+id/txtToLogin"
  1119.                 android:layout_width="match_parent"
  1120.                 android:layout_height="wrap_content"
  1121.                 android:layout_marginBottom="24dp"
  1122.                 android:gravity="center"
  1123.                 android:text="@string/already_registered"
  1124.                 android:textColor="#FFFFFF"
  1125.                 android:textSize="16sp" />
  1126.         </LinearLayout>
  1127.     </ScrollView>
  1128.  
  1129. </androidx.constraintlayout.widget.ConstraintLayout>
  1130.  
  1131. //----------------------- activity_student.xml -------------------
  1132.  
  1133. <?xml version="1.0" encoding="utf-8"?>
  1134. <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
  1135.     xmlns:tools="http://schemas.android.com/tools"
  1136.     android:layout_width="match_parent"
  1137.     android:layout_height="match_parent"
  1138.     tools:context=".MainActivity">
  1139.         <LinearLayout
  1140.             android:layout_width="match_parent"
  1141.             android:layout_height="match_parent"
  1142.             android:background="#DD3131"
  1143.             android:orientation="vertical"
  1144.             android:paddingStart="18dp"
  1145.             android:paddingTop="24dp"
  1146.             android:paddingEnd="24dp">
  1147.  
  1148.             <TextView
  1149.                 android:id="@+id/txtWelcome"
  1150.                 android:layout_width="match_parent"
  1151.                 android:layout_height="wrap_content"
  1152.                 android:layout_marginTop="16dp"
  1153.                 android:gravity="center"
  1154.                 android:text="@string/student_welcome"
  1155.                 android:textColor="#FFFFFF"
  1156.                 android:textSize="32sp" />
  1157.             <TextView
  1158.                 android:id="@+id/txtTable"
  1159.                 android:layout_width="match_parent"
  1160.                 android:layout_height="wrap_content"
  1161.                 android:layout_marginTop="16dp"
  1162.                 android:gravity="start"
  1163.                 android:text="@string/student_courses"
  1164.                 android:textColor="#FFFFFF"
  1165.                 android:textSize="24sp" />
  1166.  
  1167.             <ListView
  1168.                 android:id="@+id/courseList"
  1169.                 android:layout_width="match_parent"
  1170.                 android:layout_height="match_parent"
  1171.                 android:layout_marginStart="20dp"
  1172.                 android:layout_marginEnd="20dp"
  1173.                 android:layout_marginTop="40dp"
  1174.                 android:layout_marginBottom="60dp"/>
  1175.  
  1176.         </LinearLayout>
  1177.  
  1178.  
  1179. </androidx.constraintlayout.widget.ConstraintLayout>
  1180.  
  1181. //--------------------------------- course_layout.xml --------------------------
  1182.  
  1183. <?xml version="1.0" encoding="utf-8"?>
  1184. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  1185.     android:layout_width="match_parent"
  1186.     android:layout_height="wrap_content"
  1187.     android:padding="15dp">
  1188.  
  1189.     <ImageView
  1190.         android:layout_width="wrap_content"
  1191.         android:layout_height="wrap_content"
  1192.         android:src="@drawable/course"
  1193.         android:layout_margin="10dp"
  1194.         android:id="@+id/imgDevice"
  1195.         android:contentDescription="@string/course_pic" />
  1196.  
  1197.     <TextView
  1198.         android:id="@+id/courseName"
  1199.         android:layout_width="wrap_content"
  1200.         android:layout_height="wrap_content"
  1201.         android:layout_gravity="center_vertical"
  1202.         android:layout_marginStart="30dp"
  1203.         android:layout_weight="1"
  1204.         android:text="@string/mock_data"
  1205.         android:textColor="#fff"
  1206.         android:textSize="18sp"
  1207.         android:textStyle="bold" />
  1208.  
  1209.     <TextView
  1210.         android:id="@+id/courseID"
  1211.         android:layout_width="wrap_content"
  1212.         android:layout_height="wrap_content"
  1213.         android:layout_gravity="center_vertical"
  1214.         android:layout_marginStart="30dp"
  1215.         android:layout_weight="1"
  1216.         android:text="@string/course_id"
  1217.         android:textColor="#fff"
  1218.         android:textSize="18sp"
  1219.         android:textStyle="bold" />
  1220.  
  1221.     <TextView
  1222.         android:id="@+id/semester"
  1223.         android:layout_width="wrap_content"
  1224.         android:layout_height="wrap_content"
  1225.         android:layout_weight="0.3"
  1226.         android:textStyle="bold"
  1227.         android:textColor="#fff"
  1228.         android:layout_gravity="center_vertical"
  1229.         android:textSize="18sp"
  1230.         android:paddingStart="20dp"
  1231.         android:paddingEnd="0dp"
  1232.         android:layout_marginStart="20dp"
  1233.         android:text="@string/semester"/>
  1234. </LinearLayout>
Add Comment
Please, Sign In to add comment