From 5978e3a193805cb09e3f3c53636cf4382c6abb2c Mon Sep 17 00:00:00 2001 From: Amandeep Singh Date: Fri, 14 Oct 2016 23:13:01 +0530 Subject: [PATCH 1/2] Some more code --- .gitignore | 9 + .idea/compiler.xml | 22 + .idea/copyright/profiles_settings.xml | 3 + .idea/dictionaries/amandeepsingh.xml | 3 + .idea/encodings.xml | 6 + .idea/gradle.xml | 18 + .idea/misc.xml | 62 ++ .idea/modules.xml | 9 + .idea/runConfigurations.xml | 12 + app/.gitignore | 1 + app/build.gradle | 33 + app/proguard-rules.pro | 17 + .../tscore/ExampleInstrumentedTest.java | 26 + app/src/main/AndroidManifest.xml | 43 + .../java/badebaba/tscore/MainActivity.java | 148 ++++ .../main/java/badebaba/tscore/SMS/Config.java | 19 + .../badebaba/tscore/SMS/MyApplication.java | 54 ++ .../tscore/SMS/Service/HttpService.java | 127 +++ .../java/badebaba/tscore/SMS/SmsActivity.java | 317 ++++++++ .../tscore/SMS/helper/MyViewPager.java | 36 + .../tscore/SMS/helper/PrefManager.java | 83 ++ .../tscore/SMS/receiver/SmsReceiver.java | 76 ++ .../badebaba/tscore/Tscore/BottomMain.java | 99 +++ .../java/badebaba/tscore/Tscore/General.java | 37 + .../RecyclerViews/ButtonViewHolder.java | 25 + .../Tscore/RecyclerViews/CarViewholder.java | 14 + .../Tscore/RecyclerViews/CardAdapter.java | 144 ++++ .../RecyclerViews/GenericViewholder.java | 107 +++ .../Tscore/RecyclerViews/RecyclerAdapter.java | 79 ++ .../RecyclerViews/RecyclerViewHolder.java | 329 ++++++++ .../Tscore/RecyclerViews/TeacherAdapter.java | 61 ++ .../RecyclerViews/TeacherViewCallback.java | 9 + .../RecyclerViews/TeacherViewHolder.java | 763 ++++++++++++++++++ .../java/badebaba/tscore/Tscore/Staff.java | 42 + .../java/badebaba/tscore/Tscore/Teacher.java | 51 ++ app/src/main/res/drawable/bg_red.xml | 21 + app/src/main/res/drawable/fill.png | Bin 0 -> 1020 bytes app/src/main/res/drawable/fillerwelcome.png | Bin 0 -> 3185 bytes app/src/main/res/drawable/ic_launcher.png | Bin 0 -> 3785 bytes app/src/main/res/drawable/icl.png | Bin 0 -> 253 bytes app/src/main/res/drawable/launch.png | Bin 0 -> 19135 bytes app/src/main/res/drawable/picnew.png | Bin 0 -> 19788 bytes .../res/drawable/rsz_final_options_029.png | Bin 0 -> 21844 bytes app/src/main/res/layout/activity_main.xml | 35 + app/src/main/res/layout/activity_sms.xml | 210 +++++ app/src/main/res/layout/button.xml | 47 ++ app/src/main/res/layout/cardview.xml | 120 +++ app/src/main/res/layout/cardviewrecycler.xml | 19 + app/src/main/res/layout/fragment_games.xml | 26 + app/src/main/res/layout/fragment_main.xml | 16 + app/src/main/res/layout/item_list.xml | 246 ++++++ app/src/main/res/layout/main.xml | 21 + app/src/main/res/layout/teacher.xml | 426 ++++++++++ app/src/main/res/layout/teacherrecycler.xml | 18 + app/src/main/res/layout/toolbar.xml | 10 + app/src/main/res/menu/menu_main.xml | 16 + app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3418 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2206 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4842 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7718 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 10486 bytes app/src/main/res/values-w820dp/dimens.xml | 6 + app/src/main/res/values/colors.xml | 15 + app/src/main/res/values/dimens.xml | 5 + app/src/main/res/values/strings.xml | 85 ++ app/src/main/res/values/styles.xml | 15 + app/src/main/res/xml/bottombar_tabs.xml | 27 + .../java/badebaba/tscore/ExampleUnitTest.java | 17 + build.gradle | 23 + gradle.properties | 17 + gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 53636 bytes gradle/wrapper/gradle-wrapper.properties | 6 + gradlew | 160 ++++ gradlew.bat | 90 +++ settings.gradle | 1 + 75 files changed, 4582 insertions(+) create mode 100644 .gitignore create mode 100644 .idea/compiler.xml create mode 100644 .idea/copyright/profiles_settings.xml create mode 100644 .idea/dictionaries/amandeepsingh.xml create mode 100644 .idea/encodings.xml create mode 100644 .idea/gradle.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/runConfigurations.xml create mode 100644 app/.gitignore create mode 100644 app/build.gradle create mode 100644 app/proguard-rules.pro create mode 100644 app/src/androidTest/java/badebaba/tscore/ExampleInstrumentedTest.java create mode 100644 app/src/main/AndroidManifest.xml create mode 100644 app/src/main/java/badebaba/tscore/MainActivity.java create mode 100644 app/src/main/java/badebaba/tscore/SMS/Config.java create mode 100644 app/src/main/java/badebaba/tscore/SMS/MyApplication.java create mode 100644 app/src/main/java/badebaba/tscore/SMS/Service/HttpService.java create mode 100644 app/src/main/java/badebaba/tscore/SMS/SmsActivity.java create mode 100644 app/src/main/java/badebaba/tscore/SMS/helper/MyViewPager.java create mode 100644 app/src/main/java/badebaba/tscore/SMS/helper/PrefManager.java create mode 100644 app/src/main/java/badebaba/tscore/SMS/receiver/SmsReceiver.java create mode 100644 app/src/main/java/badebaba/tscore/Tscore/BottomMain.java create mode 100644 app/src/main/java/badebaba/tscore/Tscore/General.java create mode 100644 app/src/main/java/badebaba/tscore/Tscore/RecyclerViews/ButtonViewHolder.java create mode 100644 app/src/main/java/badebaba/tscore/Tscore/RecyclerViews/CarViewholder.java create mode 100644 app/src/main/java/badebaba/tscore/Tscore/RecyclerViews/CardAdapter.java create mode 100644 app/src/main/java/badebaba/tscore/Tscore/RecyclerViews/GenericViewholder.java create mode 100644 app/src/main/java/badebaba/tscore/Tscore/RecyclerViews/RecyclerAdapter.java create mode 100644 app/src/main/java/badebaba/tscore/Tscore/RecyclerViews/RecyclerViewHolder.java create mode 100644 app/src/main/java/badebaba/tscore/Tscore/RecyclerViews/TeacherAdapter.java create mode 100644 app/src/main/java/badebaba/tscore/Tscore/RecyclerViews/TeacherViewCallback.java create mode 100644 app/src/main/java/badebaba/tscore/Tscore/RecyclerViews/TeacherViewHolder.java create mode 100644 app/src/main/java/badebaba/tscore/Tscore/Staff.java create mode 100644 app/src/main/java/badebaba/tscore/Tscore/Teacher.java create mode 100644 app/src/main/res/drawable/bg_red.xml create mode 100644 app/src/main/res/drawable/fill.png create mode 100644 app/src/main/res/drawable/fillerwelcome.png create mode 100644 app/src/main/res/drawable/ic_launcher.png create mode 100644 app/src/main/res/drawable/icl.png create mode 100644 app/src/main/res/drawable/launch.png create mode 100644 app/src/main/res/drawable/picnew.png create mode 100644 app/src/main/res/drawable/rsz_final_options_029.png create mode 100644 app/src/main/res/layout/activity_main.xml create mode 100644 app/src/main/res/layout/activity_sms.xml create mode 100644 app/src/main/res/layout/button.xml create mode 100644 app/src/main/res/layout/cardview.xml create mode 100644 app/src/main/res/layout/cardviewrecycler.xml create mode 100644 app/src/main/res/layout/fragment_games.xml create mode 100644 app/src/main/res/layout/fragment_main.xml create mode 100644 app/src/main/res/layout/item_list.xml create mode 100644 app/src/main/res/layout/main.xml create mode 100644 app/src/main/res/layout/teacher.xml create mode 100644 app/src/main/res/layout/teacherrecycler.xml create mode 100644 app/src/main/res/layout/toolbar.xml create mode 100644 app/src/main/res/menu/menu_main.xml create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 app/src/main/res/values-w820dp/dimens.xml create mode 100644 app/src/main/res/values/colors.xml create mode 100644 app/src/main/res/values/dimens.xml create mode 100644 app/src/main/res/values/strings.xml create mode 100644 app/src/main/res/values/styles.xml create mode 100644 app/src/main/res/xml/bottombar_tabs.xml create mode 100644 app/src/test/java/badebaba/tscore/ExampleUnitTest.java create mode 100644 build.gradle create mode 100644 gradle.properties create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100755 gradlew create mode 100644 gradlew.bat create mode 100644 settings.gradle diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..39fb081 --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +*.iml +.gradle +/local.properties +/.idea/workspace.xml +/.idea/libraries +.DS_Store +/build +/captures +.externalNativeBuild diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..9a8b7e5 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,22 @@ + + + + + \ No newline at end of file diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml new file mode 100644 index 0000000..e7bedf3 --- /dev/null +++ b/.idea/copyright/profiles_settings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/.idea/dictionaries/amandeepsingh.xml b/.idea/dictionaries/amandeepsingh.xml new file mode 100644 index 0000000..7a0886e --- /dev/null +++ b/.idea/dictionaries/amandeepsingh.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..97626ba --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..7ac24c7 --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,18 @@ + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..da6e6cc --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + Android + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..ff44c15 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml new file mode 100644 index 0000000..7f68460 --- /dev/null +++ b/.idea/runConfigurations.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 0000000..b3db995 --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,33 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 24 + buildToolsVersion "24.0.2" + defaultConfig { + applicationId "badebaba.tscore" + minSdkVersion 15 + targetSdkVersion 24 + versionCode 1 + versionName "1.0" + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + compile fileTree(dir: 'libs', include: ['*.jar']) + androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { + exclude group: 'com.android.support', module: 'support-annotations' + }) + compile 'com.android.support:appcompat-v7:24.2.1' + compile 'com.mcxiaoke.volley:library-aar:1.0.0' + compile 'com.android.support:recyclerview-v7:24.2.1' + compile 'com.android.support:cardview-v7:24.2.1' + compile 'com.roughike:bottom-bar:2.0.2' + testCompile 'junit:junit:4.12' +} diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..34b685f --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,17 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in /Users/amandeepsingh/Library/Android/sdk/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} diff --git a/app/src/androidTest/java/badebaba/tscore/ExampleInstrumentedTest.java b/app/src/androidTest/java/badebaba/tscore/ExampleInstrumentedTest.java new file mode 100644 index 0000000..974fb12 --- /dev/null +++ b/app/src/androidTest/java/badebaba/tscore/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package badebaba.tscore; + +import android.content.Context; +import android.support.test.InstrumentationRegistry; +import android.support.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumentation test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() throws Exception { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getTargetContext(); + + assertEquals("badebaba.tscore", appContext.getPackageName()); + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..4879d5f --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/badebaba/tscore/MainActivity.java b/app/src/main/java/badebaba/tscore/MainActivity.java new file mode 100644 index 0000000..4b18114 --- /dev/null +++ b/app/src/main/java/badebaba/tscore/MainActivity.java @@ -0,0 +1,148 @@ +package badebaba.tscore; + +import android.app.Fragment; +import android.app.FragmentManager; +import android.app.FragmentTransaction; +import android.content.Intent; +import android.os.Bundle; +import android.support.annotation.IdRes; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.Toolbar; +import android.view.Menu; +import android.view.MenuItem; +import android.widget.TextView; + +import com.roughike.bottombar.BottomBar; +import com.roughike.bottombar.OnTabSelectListener; + +import badebaba.tscore.SMS.SmsActivity; +import badebaba.tscore.SMS.helper.PrefManager; +import badebaba.tscore.Tscore.General; +import badebaba.tscore.Tscore.Staff; +import badebaba.tscore.Tscore.Teacher; + + +public class MainActivity extends AppCompatActivity { + + BottomBar bottomBar; + private Toolbar toolbar; + private PrefManager pref; + private TextView name, email, mobile; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + + toolbar = (Toolbar) findViewById(R.id.toolbar); + // name = (TextView) findViewById(R.id.name); + // email = (TextView) findViewById(R.id.email); + // mobile = (TextView) findViewById(R.id.mobile); + + // enabling toolbar + setSupportActionBar(toolbar); + getSupportActionBar().setDisplayShowHomeEnabled(true); + + pref = new PrefManager(getApplicationContext()); + + + // Checking if user session + // if not logged in, take user to sms screen + if (!pref.isLoggedIn()) { + logout(); + } + + // Displaying user information from shared preferences + /* + HashMap profile = pref.getUserDetails(); + + name.setText("Name: " + profile.get("name")); + email.setText("Email: " + profile.get("email")); + mobile.setText("Mobile: " + profile.get("mobile")); + + */ + + bottomBar = (BottomBar) findViewById(R.id.bottomBar); + bottomBar.setOnTabSelectListener(new OnTabSelectListener() { + @Override + public void onTabSelected(@IdRes int tabId) { + if (tabId == R.id.general) { + // The tab with id R.id.tab_favorites was selected, + // change your content accordingly. + initialisefragment(tabId); + } else if (tabId == R.id.staff) { + initialisefragment(tabId); + + } else { + initialisefragment(tabId); + + } + } + }); + } + + public void initialisefragment(int tabId) { + Fragment fragment = null; + switch (tabId) { + case R.id.general: + fragment = new General(); + break; + case R.id.staff: + fragment = new Staff(); + break; + case R.id.teacher: + fragment = new Teacher(); + break; + default: + break; + } + if (fragment != null) { + FragmentManager fragmentManager = getFragmentManager(); + FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); + fragmentTransaction.replace(R.id.contentContainer, fragment); + fragmentTransaction.addToBackStack(null); + fragmentTransaction.commit(); + + + } + + + } + + + /** + * Logging out user + * will clear all user shared preferences and navigate to + * sms activation screen + */ + private void logout() { + pref.clearSession(); + + Intent intent = new Intent(MainActivity.this, SmsActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); + + startActivity(intent); + + finish(); + } + + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.menu_main, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + int id = item.getItemId(); + + //noinspection SimplifiableIfStatement + if (id == R.id.action_logout) { + logout(); + return true; + } + + return super.onOptionsItemSelected(item); + } +} \ No newline at end of file diff --git a/app/src/main/java/badebaba/tscore/SMS/Config.java b/app/src/main/java/badebaba/tscore/SMS/Config.java new file mode 100644 index 0000000..1b650a5 --- /dev/null +++ b/app/src/main/java/badebaba/tscore/SMS/Config.java @@ -0,0 +1,19 @@ +package badebaba.tscore.SMS; + +/** + * Created by badebaba on 9/23/2016. + */ +public class Config { + // server URL configuration + public static final String URL_REQUEST_SMS = "http://192.168.1.4:5090/android_sms/request_sms.php"; + public static final String URL_VERIFY_OTP = "http://192.168.1.4:5090/android_sms/verify_otp.php"; + + // SMS provider identification + // It should match with your SMS gateway origin + // You can use MSGIND, TESTER and ALERTS as sender ID + // If you want custom sender Id, approve MSG91 to get one + public static final String SMS_ORIGIN = "123321"; + + // special character to prefix the otp. Make sure this character appears only once in the sms + public static final String OTP_DELIMITER = ":"; +} \ No newline at end of file diff --git a/app/src/main/java/badebaba/tscore/SMS/MyApplication.java b/app/src/main/java/badebaba/tscore/SMS/MyApplication.java new file mode 100644 index 0000000..bc7949b --- /dev/null +++ b/app/src/main/java/badebaba/tscore/SMS/MyApplication.java @@ -0,0 +1,54 @@ +package badebaba.tscore.SMS; + +/** + * Created by badebaba on 9/23/2016. + */ + +import android.app.Application; +import android.text.TextUtils; + +import com.android.volley.Request; +import com.android.volley.RequestQueue; +import com.android.volley.toolbox.Volley; + +public class MyApplication extends Application { + + public static final String TAG = MyApplication.class + .getSimpleName(); + private static MyApplication mInstance; + private RequestQueue mRequestQueue; + + public static synchronized MyApplication getInstance() { + return mInstance; + } + + @Override + public void onCreate() { + super.onCreate(); + mInstance = this; + } + + public RequestQueue getRequestQueue() { + if (mRequestQueue == null) { + mRequestQueue = Volley.newRequestQueue(getApplicationContext()); + } + + return mRequestQueue; + } + + public void addToRequestQueue(Request req, String tag) { + req.setTag(TextUtils.isEmpty(tag) ? TAG : tag); + getRequestQueue().add(req); + } + + public void addToRequestQueue(Request req) { + req.setTag(TAG); + getRequestQueue().add(req); + } + + public void cancelPendingRequests(Object tag) { + if (mRequestQueue != null) { + mRequestQueue.cancelAll(tag); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/badebaba/tscore/SMS/Service/HttpService.java b/app/src/main/java/badebaba/tscore/SMS/Service/HttpService.java new file mode 100644 index 0000000..d75c467 --- /dev/null +++ b/app/src/main/java/badebaba/tscore/SMS/Service/HttpService.java @@ -0,0 +1,127 @@ +package badebaba.tscore.SMS.Service; + +/** + * Created by badebaba on 9/23/2016. + */ + +import android.app.IntentService; +import android.content.Intent; +import android.util.Log; +import android.widget.Toast; + +import com.android.volley.Request; +import com.android.volley.RequestQueue; +import com.android.volley.Response; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.StringRequest; +import com.android.volley.toolbox.Volley; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.HashMap; +import java.util.Map; + +import badebaba.tscore.MainActivity; +import badebaba.tscore.SMS.Config; +import badebaba.tscore.SMS.MyApplication; +import badebaba.tscore.SMS.helper.PrefManager; + + +public class HttpService extends IntentService { + + private static String TAG = HttpService.class.getSimpleName(); + + + public HttpService() { + super(HttpService.class.getSimpleName()); + } + + @Override + protected void onHandleIntent(Intent intent) { + if (intent != null) { + String otp = intent.getStringExtra("otp"); + verifyOtp(otp); + } + } + + /** + * Posting the OTP to server and activating the user + * + * @param otp otp received in the SMS + */ + private void verifyOtp(final String otp) { + RequestQueue requestQueue2; + requestQueue2 = Volley.newRequestQueue(getApplicationContext()); + + StringRequest strReq = new StringRequest(Request.Method.POST, + Config.URL_VERIFY_OTP, new Response.Listener() { + + @Override + public void onResponse(String response) { + Log.d(TAG, response.toString()); + + try { + + JSONObject responseObj = new JSONObject(response); + + // Parsing json object response + // response will be a json object + boolean error = responseObj.getBoolean("error"); + String message = responseObj.getString("message"); + + if (!error) { + // parsing the user profile information + JSONObject profileObj = responseObj.getJSONObject("profile"); + + String name = profileObj.getString("name"); + String email = profileObj.getString("email"); + String mobile = profileObj.getString("mobile"); + + PrefManager pref = new PrefManager(getApplicationContext()); + pref.createLogin(name, email, mobile); + + Intent intent = new Intent(HttpService.this, MainActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + startActivity(intent); + + Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show(); + + } else { + Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show(); + } + + } catch (JSONException e) { + Toast.makeText(getApplicationContext(), + "Error: " + e.getMessage(), + Toast.LENGTH_LONG).show(); + } + + } + }, new Response.ErrorListener() { + + @Override + public void onErrorResponse(VolleyError error) { + Log.e(TAG, "Error: " + error.getMessage()); + Toast.makeText(getApplicationContext(), + error.getMessage(), Toast.LENGTH_SHORT).show(); + } + }) { + + @Override + protected Map getParams() { + Map params = new HashMap(); + params.put("otp", otp); + + Log.e(TAG, "Posting params: " + params.toString()); + return params; + } + + }; + + // Adding request to request queue + requestQueue2.add(strReq); + + } + +} \ No newline at end of file diff --git a/app/src/main/java/badebaba/tscore/SMS/SmsActivity.java b/app/src/main/java/badebaba/tscore/SMS/SmsActivity.java new file mode 100644 index 0000000..a43f755 --- /dev/null +++ b/app/src/main/java/badebaba/tscore/SMS/SmsActivity.java @@ -0,0 +1,317 @@ +package badebaba.tscore.SMS; + +/** + * Created by badebaba on 9/23/2016. + */ + +import android.content.Intent; +import android.os.Bundle; +import android.support.v4.view.PagerAdapter; +import android.support.v4.view.ViewPager; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ImageButton; +import android.widget.LinearLayout; +import android.widget.ProgressBar; +import android.widget.TextView; +import android.widget.Toast; + +import com.android.volley.Request; +import com.android.volley.RequestQueue; +import com.android.volley.Response; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.StringRequest; +import com.android.volley.toolbox.Volley; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.HashMap; +import java.util.Map; + +import badebaba.tscore.MainActivity; +import badebaba.tscore.R; +import badebaba.tscore.SMS.Service.HttpService; +import badebaba.tscore.SMS.helper.PrefManager; + + +public class SmsActivity extends AppCompatActivity implements View.OnClickListener { + + private static String TAG = SmsActivity.class.getSimpleName(); + RequestQueue requestQueue; + private ViewPager viewPager; + private ViewPagerAdapter adapter; + private Button btnRequestSms, btnVerifyOtp; + private EditText inputName, inputEmail, inputMobile, inputOtp; + private ProgressBar progressBar; + private PrefManager pref; + private ImageButton btnEditMobile; + private TextView txtEditMobile; + private LinearLayout layoutEditMobile; + + /** + * Regex to validate the mobile number + * mobile number should be of 10 digits length + * + * @param mobile + * @return + */ + private static boolean isValidPhoneNumber(String mobile) { + String regEx = "^[0-9]{10}$"; + return mobile.matches(regEx); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_sms); + + viewPager = (ViewPager) findViewById(R.id.viewPagerVertical); + inputName = (EditText) findViewById(R.id.inputName); + inputEmail = (EditText) findViewById(R.id.inputEmail); + inputMobile = (EditText) findViewById(R.id.inputMobile); + inputOtp = (EditText) findViewById(R.id.inputOtp); + btnRequestSms = (Button) findViewById(R.id.btn_request_sms); + btnVerifyOtp = (Button) findViewById(R.id.btn_verify_otp); + progressBar = (ProgressBar) findViewById(R.id.progressBar); + btnEditMobile = (ImageButton) findViewById(R.id.btn_edit_mobile); + txtEditMobile = (TextView) findViewById(R.id.txt_edit_mobile); + layoutEditMobile = (LinearLayout) findViewById(R.id.layout_edit_mobile); + + + requestQueue = Volley.newRequestQueue(this); + // view click listeners + btnEditMobile.setOnClickListener(this); + btnRequestSms.setOnClickListener(this); + btnVerifyOtp.setOnClickListener(this); + + // hiding the edit mobile number + layoutEditMobile.setVisibility(View.GONE); + + pref = new PrefManager(this); + + // Checking for user session + // if user is already logged in, take him to main activity + if (pref.isLoggedIn()) { + Intent intent = new Intent(SmsActivity.this, MainActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent); + + finish(); + } + + adapter = new ViewPagerAdapter(); + viewPager.setAdapter(adapter); + viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + } + + @Override + public void onPageSelected(int position) { + } + + @Override + public void onPageScrollStateChanged(int state) { + + } + }); + + + /** + * Checking if the device is waiting for sms + * showing the user OTP screen + */ + if (pref.isWaitingForSms()) { + viewPager.setCurrentItem(1); + layoutEditMobile.setVisibility(View.VISIBLE); + } + } + + @Override + public void onClick(View view) { + switch (view.getId()) { + case R.id.btn_request_sms: + validateForm(); + break; + + case R.id.btn_verify_otp: + verifyOtp(); + break; + + case R.id.btn_edit_mobile: + viewPager.setCurrentItem(0); + layoutEditMobile.setVisibility(View.GONE); + pref.setIsWaitingForSms(false); + break; + } + } + + /** + * Validating user details form + */ + private void validateForm() { + String name = inputName.getText().toString().trim(); + String email = inputEmail.getText().toString().trim(); + String mobile = inputMobile.getText().toString().trim(); + + // validating empty name and email + if (name.length() == 0 || email.length() == 0) { + Toast.makeText(getApplicationContext(), "Please enter your details", Toast.LENGTH_SHORT).show(); + return; + } + + // validating mobile number + // it should be of 10 digits length + if (isValidPhoneNumber(mobile)) { + + // request for sms + progressBar.setVisibility(View.VISIBLE); + + // saving the mobile number in shared preferences + pref.setMobileNumber(mobile); + + // requesting for sms + requestForSMS(name, email, mobile); + + } else { + Toast.makeText(getApplicationContext(), "Please enter valid mobile number", Toast.LENGTH_SHORT).show(); + } + } + + /** + * Method initiates the SMS request on the server + * + * @param name user name + * @param email user email address + * @param mobile user valid mobile number + */ + private void requestForSMS(final String name, final String email, final String mobile) { + StringRequest strReq = new StringRequest(Request.Method.POST, + Config.URL_REQUEST_SMS, new Response.Listener() { + + @Override + public void onResponse(String response) { + Log.d(TAG, response.toString()); + + try { + JSONObject responseObj = new JSONObject(response); + Log.e("Error", response); + // Parsing json object response + // response will be a json object + boolean error = responseObj.getBoolean("error"); + String message = responseObj.getString("message"); + + // checking for error, if not error SMS is initiated + // device should receive it shortly + if (!error) { + // boolean flag saying device is waiting for sms + pref.setIsWaitingForSms(true); + + // moving the screen to next pager item i.e otp screen + viewPager.setCurrentItem(1); + txtEditMobile.setText(pref.getMobileNumber()); + layoutEditMobile.setVisibility(View.VISIBLE); + + Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show(); + + } else { + Toast.makeText(getApplicationContext(), + "Error: " + message, + Toast.LENGTH_LONG).show(); + } + + // hiding the progress bar + progressBar.setVisibility(View.GONE); + + } catch (JSONException e) { + Toast.makeText(getApplicationContext(), + "Error: " + e.getMessage(), + Toast.LENGTH_LONG).show(); + + progressBar.setVisibility(View.GONE); + } + + } + }, new Response.ErrorListener() { + + @Override + public void onErrorResponse(VolleyError error) { + Log.e(TAG, "Error: " + error.getMessage()); + Toast.makeText(getApplicationContext(), + error.getMessage(), Toast.LENGTH_SHORT).show(); + progressBar.setVisibility(View.GONE); + } + }) { + + /** + * Passing user parameters to our server + * @return + */ + @Override + protected Map getParams() { + Map params = new HashMap(); + params.put("name", name); + params.put("email", email); + params.put("mobile", mobile); + + Log.e(TAG, "Posting params: " + params.toString()); + + return params; + } + + }; + + // Adding request to request queue + // MyApplication.getInstance() = Volley.newRequestQueue(this); + requestQueue.add(strReq); + } + + /** + * sending the OTP to server and activating the user + */ + private void verifyOtp() { + String otp = inputOtp.getText().toString().trim(); + + if (!otp.isEmpty()) { + Intent grapprIntent = new Intent(getApplicationContext(), HttpService.class); + grapprIntent.putExtra("otp", otp); + startService(grapprIntent); + } else { + Toast.makeText(getApplicationContext(), "Please enter the OTP", Toast.LENGTH_SHORT).show(); + } + } + + class ViewPagerAdapter extends PagerAdapter { + + @Override + public int getCount() { + return 2; + } + + @Override + public boolean isViewFromObject(View view, Object object) { + return view == object; + } + + + public Object instantiateItem(ViewGroup collection, int position) { + + int resId = 0; + switch (position) { + case 0: + resId = R.id.layout_sms; + break; + case 1: + resId = R.id.layout_otp; + break; + } + return findViewById(resId); + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/badebaba/tscore/SMS/helper/MyViewPager.java b/app/src/main/java/badebaba/tscore/SMS/helper/MyViewPager.java new file mode 100644 index 0000000..a31dc65 --- /dev/null +++ b/app/src/main/java/badebaba/tscore/SMS/helper/MyViewPager.java @@ -0,0 +1,36 @@ +package badebaba.tscore.SMS.helper; + +/** + * Created by badebaba on 9/23/2016. + */ + +import android.content.Context; +import android.support.v4.view.ViewPager; +import android.util.AttributeSet; +import android.view.MotionEvent; + +/** + * Created by Ravi on 08/07/15. + */ +public class MyViewPager extends ViewPager { + + public MyViewPager(Context context) { + super(context); + } + + public MyViewPager(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @Override + public boolean onInterceptTouchEvent(MotionEvent event) { + // Never allow swiping to switch between pages + return false; + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + // Never allow swiping to switch between pages + return false; + } +} \ No newline at end of file diff --git a/app/src/main/java/badebaba/tscore/SMS/helper/PrefManager.java b/app/src/main/java/badebaba/tscore/SMS/helper/PrefManager.java new file mode 100644 index 0000000..c455ea8 --- /dev/null +++ b/app/src/main/java/badebaba/tscore/SMS/helper/PrefManager.java @@ -0,0 +1,83 @@ +package badebaba.tscore.SMS.helper; + +/** + * Created by badebaba on 9/23/2016. + */ + +import android.content.Context; +import android.content.SharedPreferences; +import android.content.SharedPreferences.Editor; + +import java.util.HashMap; + +/** + * Created by Ravi on 08/07/15. + */ +public class PrefManager { + // Shared preferences file name + private static final String PREF_NAME = "Tscore"; + // All Shared Preferences Keys + private static final String KEY_IS_WAITING_FOR_SMS = "IsWaitingForSms"; + private static final String KEY_MOBILE_NUMBER = "mobile_number"; + private static final String KEY_IS_LOGGED_IN = "isLoggedIn"; + private static final String KEY_NAME = "name"; + private static final String KEY_EMAIL = "email"; + private static final String KEY_MOBILE = "mobile"; + // Shared Preferences + SharedPreferences pref; + // Editor for Shared preferences + Editor editor; + // Context + Context _context; + // Shared pref mode + int PRIVATE_MODE = 0; + + public PrefManager(Context context) { + this._context = context; + pref = _context.getSharedPreferences(PREF_NAME, PRIVATE_MODE); + editor = pref.edit(); + } + + public void setIsWaitingForSms(boolean isWaiting) { + editor.putBoolean(KEY_IS_WAITING_FOR_SMS, isWaiting); + editor.commit(); + } + + public boolean isWaitingForSms() { + return pref.getBoolean(KEY_IS_WAITING_FOR_SMS, false); + } + + public String getMobileNumber() { + return pref.getString(KEY_MOBILE_NUMBER, null); + } + + public void setMobileNumber(String mobileNumber) { + editor.putString(KEY_MOBILE_NUMBER, mobileNumber); + editor.commit(); + } + + public void createLogin(String name, String email, String mobile) { + editor.putString(KEY_NAME, name); + editor.putString(KEY_EMAIL, email); + editor.putString(KEY_MOBILE, mobile); + editor.putBoolean(KEY_IS_LOGGED_IN, true); + editor.commit(); + } + + public boolean isLoggedIn() { + return pref.getBoolean(KEY_IS_LOGGED_IN, false); + } + + public void clearSession() { + editor.clear(); + editor.commit(); + } + + public HashMap getUserDetails() { + HashMap profile = new HashMap<>(); + profile.put("name", pref.getString(KEY_NAME, null)); + profile.put("email", pref.getString(KEY_EMAIL, null)); + profile.put("mobile", pref.getString(KEY_MOBILE, null)); + return profile; + } +} \ No newline at end of file diff --git a/app/src/main/java/badebaba/tscore/SMS/receiver/SmsReceiver.java b/app/src/main/java/badebaba/tscore/SMS/receiver/SmsReceiver.java new file mode 100644 index 0000000..032a788 --- /dev/null +++ b/app/src/main/java/badebaba/tscore/SMS/receiver/SmsReceiver.java @@ -0,0 +1,76 @@ +package badebaba.tscore.SMS.receiver; + +/** + * Created by badebaba on 9/23/2016. + */ + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.telephony.SmsMessage; +import android.util.Log; + +import badebaba.tscore.SMS.Config; +import badebaba.tscore.SMS.Service.HttpService; + + +public class SmsReceiver extends BroadcastReceiver { + private static final String TAG = SmsReceiver.class.getSimpleName(); + + @Override + public void onReceive(Context context, Intent intent) { + + final Bundle bundle = intent.getExtras(); + try { + if (bundle != null) { + Object[] pdusObj = (Object[]) bundle.get("pdus"); + for (Object aPdusObj : pdusObj) { + String format = bundle.getString("format"); + SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) aPdusObj, format); + String senderAddress = currentMessage.getDisplayOriginatingAddress(); + String message = currentMessage.getDisplayMessageBody(); + + Log.e(TAG, "Received SMS: " + message + ", Sender: " + senderAddress); + + // if the SMS is not from our gateway, ignore the message + if (!senderAddress.toLowerCase().contains(Config.SMS_ORIGIN.toLowerCase())) { + return; + } + + // verification code from sms + String verificationCode = getVerificationCode(message); + + Log.e(TAG, "OTP received: " + verificationCode); + + Intent hhtpIntent = new Intent(context, HttpService.class); + hhtpIntent.putExtra("otp", verificationCode); + context.startService(hhtpIntent); + } + } + } catch (Exception e) { + Log.e(TAG, "Exception: " + e.getMessage()); + } + } + + /** + * Getting the OTP from sms message body + * ':' is the separator of OTP from the message + * + * @param message + * @return + */ + private String getVerificationCode(String message) { + String code = null; + int index = message.indexOf(Config.OTP_DELIMITER); + + if (index != -1) { + int start = index + 2; + int length = 6; + code = message.substring(start, start + length); + return code; + } + + return code; + } +} \ No newline at end of file diff --git a/app/src/main/java/badebaba/tscore/Tscore/BottomMain.java b/app/src/main/java/badebaba/tscore/Tscore/BottomMain.java new file mode 100644 index 0000000..ac04f49 --- /dev/null +++ b/app/src/main/java/badebaba/tscore/Tscore/BottomMain.java @@ -0,0 +1,99 @@ +package badebaba.tscore.Tscore; + +import android.app.Fragment; +import android.app.FragmentManager; +import android.app.FragmentTransaction; +import android.os.Bundle; +import android.support.annotation.IdRes; +import android.support.annotation.Nullable; +import android.support.v7.app.AppCompatActivity; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.widget.Toast; + +import com.roughike.bottombar.BottomBar; +import com.roughike.bottombar.OnTabSelectListener; + +import badebaba.tscore.R; +import badebaba.tscore.Tscore.RecyclerViews.TeacherViewCallback; + + +/** + * Created by badebaba on 9/18/2016. + */ +public class BottomMain extends AppCompatActivity implements TeacherViewCallback { + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.main); + + BottomBar bottomBar = (BottomBar) findViewById(R.id.bottomBar); + bottomBar.setOnTabSelectListener(new OnTabSelectListener() { + @Override + public void onTabSelected(@IdRes int tabId) { + if (tabId == R.id.general) { + // The tab with id R.id.tab_favorites was selected, + // change your content accordingly. + initialisefragment(tabId); + } else if (tabId == R.id.staff) { + initialisefragment(tabId); + + } else { + initialisefragment(tabId); + + } + } + }); + } + + public void initialisefragment(int tabId) { + Fragment fragment = null; + switch (tabId) { + case R.id.general: + fragment = new General(); + break; + case R.id.staff: + fragment = new Staff(); + break; + case R.id.teacher: + fragment = new Teacher(); + break; + default: + break; + } + if (fragment != null) { + FragmentManager fragmentManager = getFragmentManager(); + FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); + fragmentTransaction.replace(R.id.contentContainer, fragment); + fragmentTransaction.addToBackStack(null); + fragmentTransaction.commit(); + } + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.menu_main, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.action_developer: + Toast.makeText(getApplicationContext(), "Architected By DrManhattan", Toast.LENGTH_SHORT).show(); + break; + case R.id.action_logout: + // mauth.signOut(); + break; + } + return super.onOptionsItemSelected(item); + } + + @Override + public void onSuccessFulSubmission() { + + } +} diff --git a/app/src/main/java/badebaba/tscore/Tscore/General.java b/app/src/main/java/badebaba/tscore/Tscore/General.java new file mode 100644 index 0000000..97907cb --- /dev/null +++ b/app/src/main/java/badebaba/tscore/Tscore/General.java @@ -0,0 +1,37 @@ +package badebaba.tscore.Tscore; + +import android.app.Fragment; +import android.os.Bundle; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import badebaba.tscore.R; +import badebaba.tscore.Tscore.RecyclerViews.CardAdapter; + +/** + * Created by badebaba on 9/18/2016. + */ + +public class General extends Fragment { + + public static final String TAG = "TAG"; + RecyclerView recyclerView2; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + View rootView = inflater.inflate(R.layout.cardviewrecycler, container, false); + recyclerView2 = (RecyclerView) rootView.findViewById(R.id.my_recycler_view2); + + CardAdapter cardAdapter = new CardAdapter(getActivity()); + recyclerView2.setAdapter(cardAdapter); + recyclerView2.setHasFixedSize(true); + recyclerView2.setLayoutManager(new LinearLayoutManager(getActivity())); + + return rootView; + } +} diff --git a/app/src/main/java/badebaba/tscore/Tscore/RecyclerViews/ButtonViewHolder.java b/app/src/main/java/badebaba/tscore/Tscore/RecyclerViews/ButtonViewHolder.java new file mode 100644 index 0000000..8c8eaa5 --- /dev/null +++ b/app/src/main/java/badebaba/tscore/Tscore/RecyclerViews/ButtonViewHolder.java @@ -0,0 +1,25 @@ +package badebaba.tscore.Tscore.RecyclerViews; + +import android.view.View; +import android.widget.Button; +import android.widget.EditText; + +import badebaba.tscore.R; + + +/** + * Created by monty on 15/9/16. + */ +public class ButtonViewHolder extends CarViewholder { + + Button bottombutton; + EditText comment; + + public ButtonViewHolder(View itemView) { + super(itemView); + bottombutton = (Button) itemView.findViewById(R.id.button); + comment = (EditText) itemView.findViewById(R.id.comment); + + + } +} diff --git a/app/src/main/java/badebaba/tscore/Tscore/RecyclerViews/CarViewholder.java b/app/src/main/java/badebaba/tscore/Tscore/RecyclerViews/CarViewholder.java new file mode 100644 index 0000000..7d0333b --- /dev/null +++ b/app/src/main/java/badebaba/tscore/Tscore/RecyclerViews/CarViewholder.java @@ -0,0 +1,14 @@ +package badebaba.tscore.Tscore.RecyclerViews; + +import android.support.v7.widget.RecyclerView; +import android.view.View; + +/** + * Created by monty on 15/9/16. + */ +public abstract class CarViewholder extends RecyclerView.ViewHolder { + + public CarViewholder(View itemView) { + super(itemView); + } +} diff --git a/app/src/main/java/badebaba/tscore/Tscore/RecyclerViews/CardAdapter.java b/app/src/main/java/badebaba/tscore/Tscore/RecyclerViews/CardAdapter.java new file mode 100644 index 0000000..33ccea1 --- /dev/null +++ b/app/src/main/java/badebaba/tscore/Tscore/RecyclerViews/CardAdapter.java @@ -0,0 +1,144 @@ +package badebaba.tscore.Tscore.RecyclerViews; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Toast; + +import badebaba.tscore.R; + + +/** + * Created by monty on 4/9/16. + */ +public class CardAdapter extends RecyclerView.Adapter { + /* + Important thing to notice here is that the multiple viewholders are needed to be checked and aligned + with respect to the position and viewtype of the layout + Viewtype: returns default value 0 for similar layout so we overrided it with two values + one for the cardview and one for the Master submit section + Pl note :::: Always create different child classes and extend it to the master class to get better result and + better judge of the execution taking place. + OncreateViewholder creates and inflates the view so here we need to distinctly create different objects of + child classes to get different results + + */ + + public static int CARD_VAL = 1; + public static int BUTTON_VAL = 2; + String[] ques = {"How would you grade the Teachers", + "How Did You Find The Study Material", + "How Was The Coaching Infrastructure", + "How Innovative Were The Teachers", + "Ease Of Travel To The Class", + "Previous Years' Results", + "Extra-Curricular Activities", + "Counselling During Admission", + "Clear Your Doubts Sessions", + "How Were The Tests Conducted", + "How Were The Seminars", + "How Were The Powerpoint Presentations", + "Quality of tests in regular time intervals", + "Syllabus coverage in tests", + "Test results/feedback on time", + "Doubt clearance after tests", + "Remedial classes after tests"}; + Context context; + LayoutInflater inflater; + // View iview; + + public CardAdapter(Context context) { + + this.context = context; + inflater = LayoutInflater.from(context); + } + + @Override + public CarViewholder onCreateViewHolder(ViewGroup parent, int viewType) { + + CarViewholder viewholder; + View iview; + if (viewType == CARD_VAL) { + iview = LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview, parent, false); + viewholder = new GenericViewholder(iview); + return viewholder; + } else { + iview = LayoutInflater.from(parent.getContext()).inflate(R.layout.button, parent, false); + viewholder = new ButtonViewHolder(iview); + return viewholder; + + } + } + + @Override + public void onBindViewHolder(CarViewholder holder, int position) { + if (getItemViewType(position) == BUTTON_VAL || position == getItemCount() + 1) { + Log.i("DEBUG", "hun" + getItemViewType(position)); + + ButtonViewHolder buttonViewHolder = (ButtonViewHolder) holder; + Log.i("DEBUG", "" + getItemViewType(position)); + + Log.i("DEBUG", "hun" + getItemViewType(position)); + + buttonViewHolder.bottombutton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Toast.makeText(view.getContext(), " DATA Sent with the Comment", Toast.LENGTH_SHORT).show(); + Toast.makeText(context, "Button Clicked", Toast.LENGTH_LONG).show(); + } + }); + } + + if (getItemViewType(position) == CARD_VAL && position <= getItemCount()) { + Log.i("DEBUG", "" + getItemViewType(position)); + + GenericViewholder genericViewholder = (GenericViewholder) holder; + // if (genericViewholder.itemView == null) + // genericViewholder.ques.setText(ques[position]); + // else { + genericViewholder.ques.setText(ques[position]); + // genericViewholder.tv1.setBackgroundResource(R.color.standardwhite); + // genericViewholder.tv2.setBackgroundResource(R.color.standardwhite); + // genericViewholder.tv3.setBackgroundResource(R.color.standardwhite); + // genericViewholder.tv5.setBackgroundResource(R.color.standardwhite); + // genericViewholder.tv4.setBackgroundResource(R.color.standardwhite); + + // } + } + // else + // holder.bottomb.setText("SUBMIT"); + + + /*holder.tv1.setOnClickListener(clicklistener); + holder.tv2.setOnClickListener(clicklistener); + holder.tv3.setOnClickListener(clicklistener); + holder.tv4.setOnClickListener(clicklistener); + holder.tv5.setOnClickListener(clicklistener); + */ + + } + + @Override + public int getItemCount() { + return ques.length + 1; + } + + @Override + public long getItemId(int position) { + return super.getItemId(position); + } + + @Override + public int getItemViewType(int position) { + //check for the termination point + //for the last point insert button + return (position < ques.length) ? CARD_VAL : BUTTON_VAL; + + + } + +} + diff --git a/app/src/main/java/badebaba/tscore/Tscore/RecyclerViews/GenericViewholder.java b/app/src/main/java/badebaba/tscore/Tscore/RecyclerViews/GenericViewholder.java new file mode 100644 index 0000000..c349cd0 --- /dev/null +++ b/app/src/main/java/badebaba/tscore/Tscore/RecyclerViews/GenericViewholder.java @@ -0,0 +1,107 @@ +package badebaba.tscore.Tscore.RecyclerViews; + +import android.view.View; +import android.widget.TextView; +import android.widget.Toast; + +import badebaba.tscore.R; + + +/** + * Created by monty on 4/9/16. + */ +public class GenericViewholder extends CarViewholder { + + TextView ques; + TextView tv1, tv2, tv3, tv4, tv5; + // Firebase mref; + // Button bottomb; + + public GenericViewholder(View itemView) { + super(itemView); + + ques = (TextView) itemView.findViewById(R.id.setQuestion); + tv1 = (TextView) itemView.findViewById(R.id.one); + tv2 = (TextView) itemView.findViewById(R.id.two); + tv3 = (TextView) itemView.findViewById(R.id.three); + tv4 = (TextView) itemView.findViewById(R.id.four); + tv5 = (TextView) itemView.findViewById(R.id.five); + // bottomb = (Button) itemView.findViewById(R.id.button); + + View.OnClickListener clicklistener = new View.OnClickListener() { + @Override + public void onClick(View view) { + switch (view.getId()) { + case R.id.one: + if (tv4.getBackground() != null || tv2.getBackground() != null || tv3.getBackground() != null + || tv5.getBackground() != null) { + tv4.setBackgroundResource(R.color.standardwhite); + tv2.setBackgroundResource(R.color.standardwhite); + tv3.setBackgroundResource(R.color.standardwhite); + tv5.setBackgroundResource(R.color.standardwhite); + } + + tv1.setBackgroundResource(R.drawable.fill); + break; + case R.id.two: + if (tv4.getBackground() != null || tv1.getBackground() != null || tv3.getBackground() != null + || tv5.getBackground() != null) { + tv4.setBackgroundResource(R.color.standardwhite); + tv1.setBackgroundResource(R.color.standardwhite); + tv3.setBackgroundResource(R.color.standardwhite); + tv5.setBackgroundResource(R.color.standardwhite); + } + + tv2.setBackgroundResource(R.drawable.fill); + break; + case R.id.three: + if (tv1.getBackground() != null || tv2.getBackground() != null || tv4.getBackground() != null + || tv5.getBackground() != null) { + tv1.setBackgroundResource(R.color.standardwhite); + tv2.setBackgroundResource(R.color.standardwhite); + tv4.setBackgroundResource(R.color.standardwhite); + tv5.setBackgroundResource(R.color.standardwhite); + } + + tv3.setBackgroundResource(R.drawable.fill); + break; + case R.id.four: + if (tv1.getBackground() != null || tv2.getBackground() != null || tv3.getBackground() != null + || tv5.getBackground() != null) { + tv1.setBackgroundResource(R.color.standardwhite); + tv2.setBackgroundResource(R.color.standardwhite); + tv3.setBackgroundResource(R.color.standardwhite); + tv5.setBackgroundResource(R.color.standardwhite); + } + + tv4.setBackgroundResource(R.drawable.fill); + break; + case R.id.five: + if (tv4.getBackground() != null || tv2.getBackground() != null || tv3.getBackground() != null + || tv1.getBackground() != null) { + tv1.setBackgroundResource(R.color.standardwhite); + tv2.setBackgroundResource(R.color.standardwhite); + tv3.setBackgroundResource(R.color.standardwhite); + tv4.setBackgroundResource(R.color.standardwhite); + } + + tv5.setBackgroundResource(R.drawable.fill); + // b5.setBackgroundColor(Color.BLUE); + break; + default: + + } + //Toast.makeText(view.getContext(), "Rating set : " + value.getRating(), Toast.LENGTH_SHORT).show(); + + } + }; + + tv1.setOnClickListener(clicklistener); + tv2.setOnClickListener(clicklistener); + tv3.setOnClickListener(clicklistener); + tv4.setOnClickListener(clicklistener); + tv5.setOnClickListener(clicklistener); + + + } +} diff --git a/app/src/main/java/badebaba/tscore/Tscore/RecyclerViews/RecyclerAdapter.java b/app/src/main/java/badebaba/tscore/Tscore/RecyclerViews/RecyclerAdapter.java new file mode 100644 index 0000000..a495320 --- /dev/null +++ b/app/src/main/java/badebaba/tscore/Tscore/RecyclerViews/RecyclerAdapter.java @@ -0,0 +1,79 @@ +package badebaba.tscore.Tscore.RecyclerViews; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Toast; + +import badebaba.tscore.R; + + +public class RecyclerAdapter extends RecyclerView.Adapter { + + public final static int CARD_VAL = 1; + public static final int BUTTON_VAL = 2; + String[] name = {"YOGITHA ", " NEHA APTE ", "NEHA LAD", "RUCHI", + "NEELAM", "BHUMIKA"}; + // RatingBar ratingBar; + Context context; + LayoutInflater inflater; + + + public RecyclerAdapter(Context context) { + this.context = context; + inflater = LayoutInflater.from(context); + } + + @Override + public CarViewholder onCreateViewHolder(ViewGroup parent, int viewType) { + + View v; + switch (viewType) { + case CARD_VAL: + v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_list, parent, false); + return new RecyclerViewHolder(v); + case BUTTON_VAL: + v = LayoutInflater.from(parent.getContext()).inflate(R.layout.button, parent, false); + return new ButtonViewHolder(v); + } + return null; + } + + @Override + public void onBindViewHolder(CarViewholder holder, int position) { + + if (getItemViewType(position) == CARD_VAL && position < getItemCount()) { + RecyclerViewHolder recyclerViewHolder = (RecyclerViewHolder) holder; + recyclerViewHolder.staff.setText(name[position]); + } else { + final ButtonViewHolder buttonViewHolder = (ButtonViewHolder) holder; + buttonViewHolder.bottombutton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + buttonViewHolder.comment.getText(); + buttonViewHolder.comment.setText(""); + Toast.makeText(view.getContext(), " DATA Sent with the Comment", Toast.LENGTH_SHORT).show(); + } + }); + + } + // holder.staff.setText(name[position]); + // holder.tv2.setOnClickListener(clickListener); + // holder.tv2.setTag(holder); + // holder.imageView.setOnClickListener(clickListener); + // holder.imageView.setTag(holder); + + } + + @Override + public int getItemCount() { + return name.length + 1; + } + + @Override + public int getItemViewType(int position) { + return (position < getItemCount() - 1) ? CARD_VAL : BUTTON_VAL; + } +} diff --git a/app/src/main/java/badebaba/tscore/Tscore/RecyclerViews/RecyclerViewHolder.java b/app/src/main/java/badebaba/tscore/Tscore/RecyclerViews/RecyclerViewHolder.java new file mode 100644 index 0000000..0a1054d --- /dev/null +++ b/app/src/main/java/badebaba/tscore/Tscore/RecyclerViews/RecyclerViewHolder.java @@ -0,0 +1,329 @@ +package badebaba.tscore.Tscore.RecyclerViews; + +import android.graphics.Color; +import android.view.View; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; +import android.widget.Toast; + +import badebaba.tscore.R; + + +public class RecyclerViewHolder extends CarViewholder { + + TextView staff; + LinearLayout visible; + // Button tv2; + //Adding buttons for the rating questions feedback + //imageview onclick should toast a message about the opening of activity for feedback + //feedback should submit the data + Button b01, b02, b03, b04, b05, b11, b12, b13, b14, b15, b21, b22, b23, b24, b25; + ImageView imageView; + //RatingBar ratingBar; + LinearLayout linearLayout; + //Adding questions + TextView q1, q2, q3; + + + public RecyclerViewHolder(final View itemView) { + super(itemView); + + // mref = new Firebase("https://tscf-b4925.firebaseio.com/stafffeedback/"); + staff = (TextView) itemView.findViewById(R.id.list_title); + visible = (LinearLayout) itemView.findViewById(R.id.visible); + imageView = (ImageView) itemView.findViewById(R.id.list_avatar); + staff.setTextColor(Color.BLACK); + q1 = (TextView) itemView.findViewById(R.id.staffq1); + q2 = (TextView) itemView.findViewById(R.id.staffq2); + q3 = (TextView) itemView.findViewById(R.id.staffq3); + // ratingBar = (RatingBar) itemView.findViewById(R.id.rate); + linearLayout = (LinearLayout) itemView.findViewById(R.id.invisiblelinearlayout); + linearLayout.setVisibility(View.INVISIBLE); + b01 = (Button) itemView.findViewById(R.id.stb01); + b02 = (Button) itemView.findViewById(R.id.stb02); + b03 = (Button) itemView.findViewById(R.id.stb03); + b04 = (Button) itemView.findViewById(R.id.stb04); + b05 = (Button) itemView.findViewById(R.id.stb05); + b11 = (Button) itemView.findViewById(R.id.stb11); + b12 = (Button) itemView.findViewById(R.id.stb12); + b13 = (Button) itemView.findViewById(R.id.stb13); + b14 = (Button) itemView.findViewById(R.id.stb14); + b15 = (Button) itemView.findViewById(R.id.stb15); + b21 = (Button) itemView.findViewById(R.id.stb21); + b22 = (Button) itemView.findViewById(R.id.stb22); + b23 = (Button) itemView.findViewById(R.id.stb23); + b24 = (Button) itemView.findViewById(R.id.stb24); + b25 = (Button) itemView.findViewById(R.id.stb25); + + + View.OnClickListener clicklistener0 = new View.OnClickListener() { + @Override + public void onClick(View view) { + visible.setVisibility(View.INVISIBLE); + Toast.makeText(view.getContext(), "Layout is made visible", Toast.LENGTH_SHORT).show(); + linearLayout.setVisibility(View.VISIBLE); + } + }; + + View.OnClickListener clicklistener1 = new View.OnClickListener() { + @Override + public void onClick(View view) { + switch (view.getId()) { + case R.id.stb01: + if (b04.getBackground() != null || b02.getBackground() != null || b03.getBackground() != null + || b05.getBackground() != null) { + b04.setBackgroundResource(R.color.standardwhite); + b02.setBackgroundResource(R.color.standardwhite); + b03.setBackgroundResource(R.color.standardwhite); + b05.setBackgroundResource(R.color.standardwhite); + } + + b01.setBackgroundResource(R.drawable.fill); + b01.setFocusableInTouchMode(true); + + break; + case R.id.stb02: + if (b01.getBackground() != null || b04.getBackground() != null || b03.getBackground() != null + || b05.getBackground() != null) { + b01.setBackgroundResource(R.color.standardwhite); + b04.setBackgroundResource(R.color.standardwhite); + b03.setBackgroundResource(R.color.standardwhite); + b05.setBackgroundResource(R.color.standardwhite); + } + + b02.setBackgroundResource(R.drawable.fill); + + // b02.setTextColor(Color.BLUE); + b02.setFocusableInTouchMode(true); + break; + case R.id.stb03: + if (b01.getBackground() != null || b02.getBackground() != null || b04.getBackground() != null + || b05.getBackground() != null) { + b01.setBackgroundResource(R.color.standardwhite); + b02.setBackgroundResource(R.color.standardwhite); + b04.setBackgroundResource(R.color.standardwhite); + b05.setBackgroundResource(R.color.standardwhite); + } + + b03.setBackgroundResource(R.drawable.fill); + b03.setFocusableInTouchMode(true); + + break; + case R.id.stb04: + if (b01.getBackground() != null || b02.getBackground() != null || b03.getBackground() != null + || b05.getBackground() != null) { + b01.setBackgroundResource(R.color.standardwhite); + b02.setBackgroundResource(R.color.standardwhite); + b03.setBackgroundResource(R.color.standardwhite); + b05.setBackgroundResource(R.color.standardwhite); + } + + b04.setBackgroundResource(R.drawable.fill); + // b04.setTextColor(Color.BLUE); + b04.setFocusableInTouchMode(true); + + break; + case R.id.stb05: + if (b01.getBackground() != null || b02.getBackground() != null || b03.getBackground() != null + || b05.getBackground() != null) { + b01.setBackgroundResource(R.color.standardwhite); + b02.setBackgroundResource(R.color.standardwhite); + b03.setBackgroundResource(R.color.standardwhite); + b04.setBackgroundResource(R.color.standardwhite); + } + + b05.setBackgroundResource(R.drawable.fill); + // b05.setTextColor(Color.BLUE); + b05.setFocusableInTouchMode(true); + + break; + default: + break; + } + //Toast.makeText(view.getContext(), "Rating set : " + value.getA1(), Toast.LENGTH_SHORT).show(); + + } + }; + + View.OnClickListener clicklistener2 = new View.OnClickListener() { + @Override + public void onClick(View view) { + switch (view.getId()) { + case R.id.stb11: + if (b14.getBackground() != null || b12.getBackground() != null || b13.getBackground() != null + || b15.getBackground() != null) { + b14.setBackgroundResource(R.color.standardwhite); + b12.setBackgroundResource(R.color.standardwhite); + b13.setBackgroundResource(R.color.standardwhite); + b15.setBackgroundResource(R.color.standardwhite); + } + + b11.setBackgroundResource(R.drawable.fill); + + break; + case R.id.stb12: + if (b14.getBackground() != null || b11.getBackground() != null || b13.getBackground() != null + || b15.getBackground() != null) { + b14.setBackgroundResource(R.color.standardwhite); + b11.setBackgroundResource(R.color.standardwhite); + b13.setBackgroundResource(R.color.standardwhite); + b15.setBackgroundResource(R.color.standardwhite); + } + + b12.setBackgroundResource(R.drawable.fill); + + break; + case R.id.stb13: + if (b14.getBackground() != null || b12.getBackground() != null || b11.getBackground() != null + || b15.getBackground() != null) { + b14.setBackgroundResource(R.color.standardwhite); + b12.setBackgroundResource(R.color.standardwhite); + b11.setBackgroundResource(R.color.standardwhite); + b15.setBackgroundResource(R.color.standardwhite); + } + b13.setBackgroundResource(R.drawable.fill); + + break; + case R.id.stb14: + if (b11.getBackground() != null || b12.getBackground() != null || b13.getBackground() != null + || b15.getBackground() != null) { + b11.setBackgroundResource(R.color.standardwhite); + b12.setBackgroundResource(R.color.standardwhite); + b13.setBackgroundResource(R.color.standardwhite); + b15.setBackgroundResource(R.color.standardwhite); + } + + b14.setBackgroundResource(R.drawable.fill); + + break; + case R.id.stb15: + if (b14.getBackground() != null || b12.getBackground() != null || b13.getBackground() != null + || b11.getBackground() != null) { + b14.setBackgroundResource(R.color.standardwhite); + b12.setBackgroundResource(R.color.standardwhite); + b13.setBackgroundResource(R.color.standardwhite); + b11.setBackgroundResource(R.color.standardwhite); + } + + b15.setBackgroundResource(R.drawable.fill); + + break; + default: + break; + } + // Toast.makeText(view.getContext(), "Rating set : " + value.getA2(), Toast.LENGTH_SHORT).show(); + + } + }; + + View.OnClickListener clicklistener3 = new View.OnClickListener() { + @Override + public void onClick(View view) { + switch (view.getId()) { + case R.id.stb21: + if (b24.getBackground() != null || b22.getBackground() != null || b23.getBackground() != null + || b25.getBackground() != null) { + b24.setBackgroundResource(R.color.standardwhite); + b22.setBackgroundResource(R.color.standardwhite); + b23.setBackgroundResource(R.color.standardwhite); + b25.setBackgroundResource(R.color.standardwhite); + } + + b21.setBackgroundResource(R.drawable.fill); + + break; + case R.id.stb22: + if (b24.getBackground() != null || b21.getBackground() != null || b23.getBackground() != null + || b25.getBackground() != null) { + b24.setBackgroundResource(R.color.standardwhite); + b21.setBackgroundResource(R.color.standardwhite); + b23.setBackgroundResource(R.color.standardwhite); + b25.setBackgroundResource(R.color.standardwhite); + } + + b22.setBackgroundResource(R.drawable.fill); + + break; + case R.id.stb23: + if (b24.getBackground() != null || b22.getBackground() != null || b21.getBackground() != null + || b25.getBackground() != null) { + b24.setBackgroundResource(R.color.standardwhite); + b22.setBackgroundResource(R.color.standardwhite); + b21.setBackgroundResource(R.color.standardwhite); + b25.setBackgroundResource(R.color.standardwhite); + } + + b23.setBackgroundResource(R.drawable.fill); + break; + case R.id.stb24: + if (b21.getBackground() != null || b22.getBackground() != null || b23.getBackground() != null + || b25.getBackground() != null) { + b21.setBackgroundResource(R.color.standardwhite); + b22.setBackgroundResource(R.color.standardwhite); + b23.setBackgroundResource(R.color.standardwhite); + b25.setBackgroundResource(R.color.standardwhite); + } + + b24.setBackgroundResource(R.drawable.fill); + + break; + case R.id.stb25: + if (b24.getBackground() != null || b22.getBackground() != null || b23.getBackground() != null + || b21.getBackground() != null) { + b24.setBackgroundResource(R.color.standardwhite); + b22.setBackgroundResource(R.color.standardwhite); + b23.setBackgroundResource(R.color.standardwhite); + b21.setBackgroundResource(R.color.standardwhite); + } + b25.setBackgroundResource(R.drawable.fill); + + break; + default: + break; + } + // Toast.makeText(view.getContext(), "Rating set : " + value.getA3(), Toast.LENGTH_SHORT).show(); + + } + }; + + + visible.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View view) { + /* + value.setStaffname(staff.getText().toString()); + value.setQ1(q1.getText().toString()); + value.setQ2(q2.getText().toString()); + value.setQ3(q3.getText().toString()); + mref.child("Staff").push().setValue(value); + Toast.makeText(view.getContext(), "Your Staff Submission is Done", Toast.LENGTH_SHORT).show(); + */ + linearLayout.setVisibility(View.INVISIBLE); + } + }); + + + imageView.setOnClickListener(clicklistener0); + b01.setOnClickListener(clicklistener1); + b02.setOnClickListener(clicklistener1); + b03.setOnClickListener(clicklistener1); + b04.setOnClickListener(clicklistener1); + b05.setOnClickListener(clicklistener1); + b11.setOnClickListener(clicklistener2); + b12.setOnClickListener(clicklistener2); + b13.setOnClickListener(clicklistener2); + b14.setOnClickListener(clicklistener2); + b15.setOnClickListener(clicklistener2); + b21.setOnClickListener(clicklistener3); + b22.setOnClickListener(clicklistener3); + b23.setOnClickListener(clicklistener3); + b24.setOnClickListener(clicklistener3); + b25.setOnClickListener(clicklistener3); + + + } + +} diff --git a/app/src/main/java/badebaba/tscore/Tscore/RecyclerViews/TeacherAdapter.java b/app/src/main/java/badebaba/tscore/Tscore/RecyclerViews/TeacherAdapter.java new file mode 100644 index 0000000..7a24104 --- /dev/null +++ b/app/src/main/java/badebaba/tscore/Tscore/RecyclerViews/TeacherAdapter.java @@ -0,0 +1,61 @@ +package badebaba.tscore.Tscore.RecyclerViews; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import badebaba.tscore.R; + + +public class TeacherAdapter extends RecyclerView.Adapter { + + private TeacherViewCallback teacherViewCallback; + + String[] teachers = {"Hitesh Vakharia(Maths)", + "Kekul Vakharia(Science)", + "Janki Barodia(French)", + " Kanika Maheshwari(French) ", + " Priti Vora(Maths) ", + " Sonal Jain (Maths) ", + " Manoj Mishra (History) ", + " Juliet Sequeira (Social Science) ", + " Vandana Nagar(English/History) ", + " Aarti Ganatra(English/Social Sciences) ", + " Tushar Bhatt(English Grammar) ", + " Pravin Parab (Sanskrit/Marathi) ", + " Shashi Singh(Hindi) ", + " Sejal Bhave(Hindi/Marathi) ", + " Shabina Sayyad(Science) ", + " Ruddhi Salvi (Science) ", + " Harshil Jariwala(Science) " + }; + Context context; + LayoutInflater inflater; + + public TeacherAdapter(Context context, TeacherViewCallback teacherViewCallback) { + this.context = context; + this.teacherViewCallback = teacherViewCallback; + inflater = LayoutInflater.from(context); + + } + + @Override + public TeacherViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + + View view = inflater.inflate(R.layout.teacher, parent, false); + TeacherViewHolder teacherViewHolder = new TeacherViewHolder(view, teacherViewCallback); + return teacherViewHolder; + } + + @Override + public void onBindViewHolder(TeacherViewHolder holder, int position) { + holder.TeacherName.setText(teachers[position]); + } + + @Override + public int getItemCount() { + return teachers.length; + } +} diff --git a/app/src/main/java/badebaba/tscore/Tscore/RecyclerViews/TeacherViewCallback.java b/app/src/main/java/badebaba/tscore/Tscore/RecyclerViews/TeacherViewCallback.java new file mode 100644 index 0000000..a6cfc32 --- /dev/null +++ b/app/src/main/java/badebaba/tscore/Tscore/RecyclerViews/TeacherViewCallback.java @@ -0,0 +1,9 @@ +package badebaba.tscore.Tscore.RecyclerViews; + +/** + * Created by amandeepsingh on 14/10/16. + */ + +public interface TeacherViewCallback { + void onSuccessFulSubmission(); +} \ No newline at end of file diff --git a/app/src/main/java/badebaba/tscore/Tscore/RecyclerViews/TeacherViewHolder.java b/app/src/main/java/badebaba/tscore/Tscore/RecyclerViews/TeacherViewHolder.java new file mode 100644 index 0000000..9e9b2f2 --- /dev/null +++ b/app/src/main/java/badebaba/tscore/Tscore/RecyclerViews/TeacherViewHolder.java @@ -0,0 +1,763 @@ +package badebaba.tscore.Tscore.RecyclerViews; + +import android.support.v7.widget.RecyclerView; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.TextView; +import android.widget.Toast; + +import badebaba.tscore.R; + + +public class TeacherViewHolder extends RecyclerView.ViewHolder { + + TextView TeacherName; + TextView q1, q2, q3, q4, q5, q6; + TextView b01, b02, b03, b04, b05; + TextView b11, b12, b13, b14, b15; + TextView b21, b22, b23, b24, b25; + TextView b31, b32, b33, b34, b35; + TextView b41, b42, b43, b44, b45; + TextView b51, b52, b53, b54, b55; + TextView Elaborate; + EditText ElaborateAns; + Button submit; + private TeacherViewCallback teacherViewCallback; + + + public TeacherViewHolder(View itemView, final TeacherViewCallback teacherViewCallback) { + super(itemView); + // mref = new Firebase("https://tscf-b4925.firebaseio.com/teacherfeedback/"); + this.teacherViewCallback = teacherViewCallback; + TeacherName = (TextView) itemView.findViewById(R.id.staffname); + q1 = (TextView) itemView.findViewById(R.id.q1); + q2 = (TextView) itemView.findViewById(R.id.q2); + q3 = (TextView) itemView.findViewById(R.id.q3); + q4 = (TextView) itemView.findViewById(R.id.q4); + q5 = (TextView) itemView.findViewById(R.id.q5); + q6 = (TextView) itemView.findViewById(R.id.q6); + Elaborate = (TextView) itemView.findViewById(R.id.elaborate); + ElaborateAns = (EditText) itemView.findViewById(R.id.elaborateans); + submit = (Button) itemView.findViewById(R.id.submitbut); + b01 = (TextView) itemView.findViewById(R.id.b1); + b02 = (TextView) itemView.findViewById(R.id.b2); + b03 = (TextView) itemView.findViewById(R.id.b3); + b04 = (TextView) itemView.findViewById(R.id.b4); + b05 = (TextView) itemView.findViewById(R.id.b5); + b11 = (TextView) itemView.findViewById(R.id.b11); + b12 = (TextView) itemView.findViewById(R.id.b12); + b13 = (TextView) itemView.findViewById(R.id.b13); + b14 = (TextView) itemView.findViewById(R.id.b14); + b15 = (TextView) itemView.findViewById(R.id.b15); + b21 = (TextView) itemView.findViewById(R.id.b21); + b22 = (TextView) itemView.findViewById(R.id.b22); + b23 = (TextView) itemView.findViewById(R.id.b23); + b24 = (TextView) itemView.findViewById(R.id.b24); + b25 = (TextView) itemView.findViewById(R.id.b25); + b31 = (TextView) itemView.findViewById(R.id.b31); + b32 = (TextView) itemView.findViewById(R.id.b32); + b33 = (TextView) itemView.findViewById(R.id.b33); + b34 = (TextView) itemView.findViewById(R.id.b34); + b35 = (TextView) itemView.findViewById(R.id.b35); + b41 = (TextView) itemView.findViewById(R.id.b41); + b42 = (TextView) itemView.findViewById(R.id.b42); + b43 = (TextView) itemView.findViewById(R.id.b43); + b44 = (TextView) itemView.findViewById(R.id.b44); + b45 = (TextView) itemView.findViewById(R.id.b45); + b51 = (TextView) itemView.findViewById(R.id.b51); + b52 = (TextView) itemView.findViewById(R.id.b52); + b53 = (TextView) itemView.findViewById(R.id.b53); + b54 = (TextView) itemView.findViewById(R.id.b54); + b55 = (TextView) itemView.findViewById(R.id.b55); + + submit = (Button) itemView.findViewById(R.id.submitbut); + + + View.OnClickListener clicklistener1 = new View.OnClickListener() { + @Override + public void onClick(View view) { + switch (view.getId()) { + case R.id.b1: + if (b04.getBackground() != null || b02.getBackground() != null || b03.getBackground() != null + || b05.getBackground() != null) { + b04.setBackgroundResource(R.color.standardwhite); + b02.setBackgroundResource(R.color.standardwhite); + b03.setBackgroundResource(R.color.standardwhite); + b05.setBackgroundResource(R.color.standardwhite); + } + + // b01.setTextColor(Color.BLUE); + b01.setBackgroundResource(R.drawable.fill); + + break; + case R.id.b2: + if (b04.getBackground() != null || b01.getBackground() != null || b03.getBackground() != null + || b05.getBackground() != null) { + b04.setBackgroundResource(R.color.standardwhite); + b01.setBackgroundResource(R.color.standardwhite); + b03.setBackgroundResource(R.color.standardwhite); + b05.setBackgroundResource(R.color.standardwhite); + } + + b02.setBackgroundResource(R.drawable.fill); + + break; + case R.id.b3: + if (b04.getBackground() != null || b02.getBackground() != null || b01.getBackground() != null + || b05.getBackground() != null) { + b04.setBackgroundResource(R.color.standardwhite); + b02.setBackgroundResource(R.color.standardwhite); + b01.setBackgroundResource(R.color.standardwhite); + b05.setBackgroundResource(R.color.standardwhite); + } + /* + b02.setTextColor(Color.BLACK); + + b03.setTextColor(Color.BLACK); + b04.setTextColor(Color.BLACK); + b05.setTextColor(Color.BLACK); + */ + // b01.setTextColor(Color.BLUE); + b03.setBackgroundResource(R.drawable.fill); + + break; + case R.id.b4: + if (b01.getBackground() != null || b02.getBackground() != null || b03.getBackground() != null + || b05.getBackground() != null) { + b01.setBackgroundResource(R.color.standardwhite); + b02.setBackgroundResource(R.color.standardwhite); + b03.setBackgroundResource(R.color.standardwhite); + b05.setBackgroundResource(R.color.standardwhite); + } + /* + b02.setTextColor(Color.BLACK); + + b03.setTextColor(Color.BLACK); + b04.setTextColor(Color.BLACK); + b05.setTextColor(Color.BLACK); + */ + // b01.setTextColor(Color.BLUE); + b04.setBackgroundResource(R.drawable.fill); + + break; + case R.id.b5: + if (b04.getBackground() != null || b02.getBackground() != null || b03.getBackground() != null + || b01.getBackground() != null) { + b04.setBackgroundResource(R.color.standardwhite); + b02.setBackgroundResource(R.color.standardwhite); + b03.setBackgroundResource(R.color.standardwhite); + b01.setBackgroundResource(R.color.standardwhite); + } + /* + b02.setTextColor(Color.BLACK); + + b03.setTextColor(Color.BLACK); + b04.setTextColor(Color.BLACK); + b05.setTextColor(Color.BLACK); + */ + // b01.setTextColor(Color.BLUE); + b05.setBackgroundResource(R.drawable.fill); + + break; + default: + + } + // Toast.makeText(view.getContext(), "Rating set : " + value.getAns1(), Toast.LENGTH_SHORT).show(); + + } + }; + View.OnClickListener clicklistener2 = new View.OnClickListener() { + @Override + public void onClick(View view) { + switch (view.getId()) { + case R.id.b11: + if (b14.getBackground() != null || b12.getBackground() != null || b13.getBackground() != null + || b15.getBackground() != null) { + b14.setBackgroundResource(R.color.standardwhite); + b12.setBackgroundResource(R.color.standardwhite); + b13.setBackgroundResource(R.color.standardwhite); + b15.setBackgroundResource(R.color.standardwhite); + } + + b11.setBackgroundResource(R.drawable.fill); + + break; + case R.id.b12: + if (b14.getBackground() != null || b11.getBackground() != null || b13.getBackground() != null + || b15.getBackground() != null) { + b14.setBackgroundResource(R.color.standardwhite); + b11.setBackgroundResource(R.color.standardwhite); + b13.setBackgroundResource(R.color.standardwhite); + b15.setBackgroundResource(R.color.standardwhite); + } + + + b12.setBackgroundResource(R.drawable.fill); + + break; + case R.id.b13: + if (b14.getBackground() != null || b12.getBackground() != null || b11.getBackground() != null + || b15.getBackground() != null) { + b14.setBackgroundResource(R.color.standardwhite); + b12.setBackgroundResource(R.color.standardwhite); + b11.setBackgroundResource(R.color.standardwhite); + b15.setBackgroundResource(R.color.standardwhite); + } + + b13.setBackgroundResource(R.drawable.fill); + + break; + case R.id.b14: + if (b11.getBackground() != null || b12.getBackground() != null || b13.getBackground() != null + || b15.getBackground() != null) { + b11.setBackgroundResource(R.color.standardwhite); + b12.setBackgroundResource(R.color.standardwhite); + b13.setBackgroundResource(R.color.standardwhite); + b15.setBackgroundResource(R.color.standardwhite); + } + /* + b02.setTextColor(Color.BLACK); + + b03.setTextColor(Color.BLACK); + b04.setTextColor(Color.BLACK); + b05.setTextColor(Color.BLACK); + */ + // b01.setTextColor(Color.BLUE); + b14.setBackgroundResource(R.drawable.fill); + //2(b14.getText().toString()); + // b4.setBackgroundColor(Color.BLUE); + break; + case R.id.b15: + if (b14.getBackground() != null || b12.getBackground() != null || b13.getBackground() != null + || b11.getBackground() != null) { + b14.setBackgroundResource(R.color.standardwhite); + b12.setBackgroundResource(R.color.standardwhite); + b13.setBackgroundResource(R.color.standardwhite); + b11.setBackgroundResource(R.color.standardwhite); + } + /* + b02.setTextColor(Color.BLACK); + + b03.setTextColor(Color.BLACK); + b04.setTextColor(Color.BLACK); + b05.setTextColor(Color.BLACK); + */ + // b01.setTextColor(Color.BLUE); + b15.setBackgroundResource(R.drawable.fill); + //2(b15.getText().toString()); + // b5.setBackgroundColor(Color.BLUE); + break; + default: + //2("0"); + } + // Toast.makeText(view.getContext(), "Rating set : " + value.getAns2(), Toast.LENGTH_SHORT).show(); + + } + }; + + View.OnClickListener clicklistener3 = new View.OnClickListener() { + @Override + public void onClick(View view) { + switch (view.getId()) { + case R.id.b21: + if (b24.getBackground() != null || b22.getBackground() != null || b23.getBackground() != null + || b25.getBackground() != null) { + b24.setBackgroundResource(R.color.standardwhite); + b22.setBackgroundResource(R.color.standardwhite); + b23.setBackgroundResource(R.color.standardwhite); + b25.setBackgroundResource(R.color.standardwhite); + } + /* + b02.setTextColor(Color.BLACK); + + b03.setTextColor(Color.BLACK); + b04.setTextColor(Color.BLACK); + b05.setTextColor(Color.BLACK); + */ + // b01.setTextColor(Color.BLUE); + b21.setBackgroundResource(R.drawable.fill); + //3(b21.getText().toString()); + + // b1.setBackgroundColor(Color.BLUE); + // b1.setCursorVisible(true); + break; + case R.id.b22: + if (b24.getBackground() != null || b24.getBackground() != null || b23.getBackground() != null + || b25.getBackground() != null) { + b24.setBackgroundResource(R.color.standardwhite); + b21.setBackgroundResource(R.color.standardwhite); + b23.setBackgroundResource(R.color.standardwhite); + b25.setBackgroundResource(R.color.standardwhite); + } + /* + b02.setTextColor(Color.BLACK); + + b03.setTextColor(Color.BLACK); + b04.setTextColor(Color.BLACK); + b05.setTextColor(Color.BLACK); + */ + // b01.setTextColor(Color.BLUE); + b22.setBackgroundResource(R.drawable.fill); + //3(b22.getText().toString()); + // b2.setBackgroundColor(Color.BLUE); + break; + case R.id.b23: + if (b24.getBackground() != null || b22.getBackground() != null || b21.getBackground() != null + || b25.getBackground() != null) { + b24.setBackgroundResource(R.color.standardwhite); + b22.setBackgroundResource(R.color.standardwhite); + b21.setBackgroundResource(R.color.standardwhite); + b25.setBackgroundResource(R.color.standardwhite); + } + /* + b02.setTextColor(Color.BLACK); + + b03.setTextColor(Color.BLACK); + b04.setTextColor(Color.BLACK); + b05.setTextColor(Color.BLACK); + */ + // b01.setTextColor(Color.BLUE); + b23.setBackgroundResource(R.drawable.fill); + //3(b23.getText().toString()); + // b3.setBackgroundColor(Color.BLUE); + break; + case R.id.b24: + if (b21.getBackground() != null || b22.getBackground() != null || b23.getBackground() != null + || b25.getBackground() != null) { + b21.setBackgroundResource(R.color.standardwhite); + b22.setBackgroundResource(R.color.standardwhite); + b23.setBackgroundResource(R.color.standardwhite); + b25.setBackgroundResource(R.color.standardwhite); + } + /* + b02.setTextColor(Color.BLACK); + + b03.setTextColor(Color.BLACK); + b04.setTextColor(Color.BLACK); + b05.setTextColor(Color.BLACK); + */ + // b01.setTextColor(Color.BLUE); + b24.setBackgroundResource(R.drawable.fill); + //3(b24.getText().toString()); + // b4.setBackgroundColor(Color.BLUE); + break; + case R.id.b25: + if (b24.getBackground() != null || b22.getBackground() != null || b23.getBackground() != null + || b21.getBackground() != null) { + b24.setBackgroundResource(R.color.standardwhite); + b22.setBackgroundResource(R.color.standardwhite); + b23.setBackgroundResource(R.color.standardwhite); + b21.setBackgroundResource(R.color.standardwhite); + } + /* + b02.setTextColor(Color.BLACK); + + b03.setTextColor(Color.BLACK); + b04.setTextColor(Color.BLACK); + b05.setTextColor(Color.BLACK); + */ + // b01.setTextColor(Color.BLUE); + b25.setBackgroundResource(R.drawable.fill); + //3(b25.getText().toString()); + // b5.setBackgroundColor(Color.BLUE); + break; + default: + //3("0"); + } + // Toast.makeText(view.getContext(), "Rating set : " + value.getAns3(), Toast.LENGTH_SHORT).show(); + + } + }; + + View.OnClickListener clicklistener5 = new View.OnClickListener() { + @Override + public void onClick(View view) { + switch (view.getId()) { + case R.id.b41: + if (b44.getBackground() != null || b42.getBackground() != null || b43.getBackground() != null + || b45.getBackground() != null) { + b44.setBackgroundResource(R.color.standardwhite); + b42.setBackgroundResource(R.color.standardwhite); + b43.setBackgroundResource(R.color.standardwhite); + b45.setBackgroundResource(R.color.standardwhite); + } + /* + b02.setTextColor(Color.BLACK); + + b03.setTextColor(Color.BLACK); + b04.setTextColor(Color.BLACK); + b05.setTextColor(Color.BLACK); + */ + // b01.setTextColor(Color.BLUE); + b41.setBackgroundResource(R.drawable.fill); + //5(b41.getText().toString()); + + // b1.setBackgroundColor(Color.BLUE); + // b1.setCursorVisible(true); + break; + case R.id.b42: + if (b44.getBackground() != null || b41.getBackground() != null || b43.getBackground() != null + || b45.getBackground() != null) { + b44.setBackgroundResource(R.color.standardwhite); + b41.setBackgroundResource(R.color.standardwhite); + b43.setBackgroundResource(R.color.standardwhite); + b45.setBackgroundResource(R.color.standardwhite); + } + /* + b02.setTextColor(Color.BLACK); + + b03.setTextColor(Color.BLACK); + b04.setTextColor(Color.BLACK); + b05.setTextColor(Color.BLACK); + */ + // b01.setTextColor(Color.BLUE); + b42.setBackgroundResource(R.drawable.fill); + //5(b42.getText().toString()); + // b2.setBackgroundColor(Color.BLUE); + break; + case R.id.b43: + if (b44.getBackground() != null || b42.getBackground() != null || b41.getBackground() != null + || b45.getBackground() != null) { + b44.setBackgroundResource(R.color.standardwhite); + b42.setBackgroundResource(R.color.standardwhite); + b41.setBackgroundResource(R.color.standardwhite); + b45.setBackgroundResource(R.color.standardwhite); + } + /* + b02.setTextColor(Color.BLACK); + + b03.setTextColor(Color.BLACK); + b04.setTextColor(Color.BLACK); + b05.setTextColor(Color.BLACK); + */ + // b01.setTextColor(Color.BLUE); + b43.setBackgroundResource(R.drawable.fill); + //5(b43.getText().toString()); + // b3.setBackgroundColor(Color.BLUE); + break; + case R.id.b44: + if (b41.getBackground() != null || b42.getBackground() != null || b43.getBackground() != null + || b45.getBackground() != null) { + b41.setBackgroundResource(R.color.standardwhite); + b42.setBackgroundResource(R.color.standardwhite); + b43.setBackgroundResource(R.color.standardwhite); + b45.setBackgroundResource(R.color.standardwhite); + } + /* + b02.setTextColor(Color.BLACK); + + b03.setTextColor(Color.BLACK); + b04.setTextColor(Color.BLACK); + b05.setTextColor(Color.BLACK); + */ + // b01.setTextColor(Color.BLUE); + b44.setBackgroundResource(R.drawable.fill); + //5(b44.getText().toString()); + // b4.setBackgroundColor(Color.BLUE); + break; + case R.id.b45: + if (b44.getBackground() != null || b42.getBackground() != null || b43.getBackground() != null + || b41.getBackground() != null) { + b44.setBackgroundResource(R.color.standardwhite); + b42.setBackgroundResource(R.color.standardwhite); + b43.setBackgroundResource(R.color.standardwhite); + b41.setBackgroundResource(R.color.standardwhite); + } + /* + b02.setTextColor(Color.BLACK); + + b03.setTextColor(Color.BLACK); + b04.setTextColor(Color.BLACK); + b05.setTextColor(Color.BLACK); + */ + // b01.setTextColor(Color.BLUE); + b45.setBackgroundResource(R.drawable.fill); + //5(b45.getText().toString()); + // b5.setBackgroundColor(Color.BLUE); + break; + default: + //5("0"); + } + // Toast.makeText(view.getContext(), "Rating set : " + value.getAns5(), Toast.LENGTH_SHORT).show(); + + } + }; + + View.OnClickListener clicklistener6 = new View.OnClickListener() { + @Override + public void onClick(View view) { + switch (view.getId()) { + case R.id.b51: + if (b54.getBackground() != null || b52.getBackground() != null || b53.getBackground() != null + || b55.getBackground() != null) { + b54.setBackgroundResource(R.color.standardwhite); + b52.setBackgroundResource(R.color.standardwhite); + b53.setBackgroundResource(R.color.standardwhite); + b55.setBackgroundResource(R.color.standardwhite); + } + /* + b02.setTextColor(Color.BLACK); + + b03.setTextColor(Color.BLACK); + b04.setTextColor(Color.BLACK); + b05.setTextColor(Color.BLACK); + */ + // b01.setTextColor(Color.BLUE); + b51.setBackgroundResource(R.drawable.fill); + //6(b51.getText().toString()); + + // b1.setBackgroundColor(Color.BLUE); + // b1.setCursorVisible(true); + break; + case R.id.b52: + if (b54.getBackground() != null || b51.getBackground() != null || b53.getBackground() != null + || b55.getBackground() != null) { + b54.setBackgroundResource(R.color.standardwhite); + b51.setBackgroundResource(R.color.standardwhite); + b53.setBackgroundResource(R.color.standardwhite); + b55.setBackgroundResource(R.color.standardwhite); + } + /* + b02.setTextColor(Color.BLACK); + + b03.setTextColor(Color.BLACK); + b04.setTextColor(Color.BLACK); + b05.setTextColor(Color.BLACK); + */ + // b01.setTextColor(Color.BLUE); + b52.setBackgroundResource(R.drawable.fill); + //6(b52.getText().toString()); + // b2.setBackgroundColor(Color.BLUE); + break; + case R.id.b53: + if (b54.getBackground() != null || b52.getBackground() != null || b51.getBackground() != null + || b55.getBackground() != null) { + b54.setBackgroundResource(R.color.standardwhite); + b52.setBackgroundResource(R.color.standardwhite); + b51.setBackgroundResource(R.color.standardwhite); + b55.setBackgroundResource(R.color.standardwhite); + } + /* + b02.setTextColor(Color.BLACK); + + b03.setTextColor(Color.BLACK); + b04.setTextColor(Color.BLACK); + b05.setTextColor(Color.BLACK); + */ + // b01.setTextColor(Color.BLUE); + b53.setBackgroundResource(R.drawable.fill); + //6(b53.getText().toString()); + // b3.setBackgroundColor(Color.BLUE); + break; + case R.id.b54: + if (b51.getBackground() != null || b52.getBackground() != null || b53.getBackground() != null + || b55.getBackground() != null) { + b51.setBackgroundResource(R.color.standardwhite); + b52.setBackgroundResource(R.color.standardwhite); + b53.setBackgroundResource(R.color.standardwhite); + b55.setBackgroundResource(R.color.standardwhite); + } + /* + b02.setTextColor(Color.BLACK); + + b03.setTextColor(Color.BLACK); + b04.setTextColor(Color.BLACK); + b05.setTextColor(Color.BLACK); + */ + // b01.setTextColor(Color.BLUE); + b54.setBackgroundResource(R.drawable.fill); + //6(b54.getText().toString()); + // b4.setBackgroundColor(Color.BLUE); + break; + case R.id.b55: + if (b54.getBackground() != null || b52.getBackground() != null || b53.getBackground() != null + || b54.getBackground() != null) { + b54.setBackgroundResource(R.color.standardwhite); + b52.setBackgroundResource(R.color.standardwhite); + b53.setBackgroundResource(R.color.standardwhite); + b55.setBackgroundResource(R.color.standardwhite); + } + /* + b02.setTextColor(Color.BLACK); + + b03.setTextColor(Color.BLACK); + b04.setTextColor(Color.BLACK); + b05.setTextColor(Color.BLACK); + */ + // b01.setTextColor(Color.BLUE); + b55.setBackgroundResource(R.drawable.fill); + //6(b55.getText().toString()); + // b5.setBackgroundColor(Color.BLUE); + break; + default: + //6("0"); + } + // Toast.makeText(view.getContext(), "Rating set : " + value.getAns6(), Toast.LENGTH_SHORT).show(); + + } + }; + + View.OnClickListener clicklistener4 = new View.OnClickListener() { + @Override + public void onClick(View view) { + switch (view.getId()) { + case R.id.b31: + if (b34.getBackground() != null || b32.getBackground() != null || b33.getBackground() != null + || b35.getBackground() != null) { + b34.setBackgroundResource(R.color.standardwhite); + b32.setBackgroundResource(R.color.standardwhite); + b33.setBackgroundResource(R.color.standardwhite); + b35.setBackgroundResource(R.color.standardwhite); + } + /* + b02.setTextColor(Color.BLACK); + + b03.setTextColor(Color.BLACK); + b04.setTextColor(Color.BLACK); + b05.setTextColor(Color.BLACK); + */ + // b01.setTextColor(Color.BLUE); + b31.setBackgroundResource(R.drawable.fill); + //4(b31.getText().toString()); + + // b1.setBackgroundColor(Color.BLUE); + // b1.setCursorVisible(true); + break; + case R.id.b32: + if (b34.getBackground() != null || b31.getBackground() != null || b33.getBackground() != null + || b35.getBackground() != null) { + b34.setBackgroundResource(R.color.standardwhite); + b31.setBackgroundResource(R.color.standardwhite); + b33.setBackgroundResource(R.color.standardwhite); + b35.setBackgroundResource(R.color.standardwhite); + } + /* + b02.setTextColor(Color.BLACK); + + b03.setTextColor(Color.BLACK); + b04.setTextColor(Color.BLACK); + b05.setTextColor(Color.BLACK); + */ + // b01.setTextColor(Color.BLUE); + b32.setBackgroundResource(R.drawable.fill); + //4(b32.getText().toString()); + // b2.setBackgroundColor(Color.BLUE); + break; + case R.id.b33: + if (b34.getBackground() != null || b32.getBackground() != null || b31.getBackground() != null + || b35.getBackground() != null) { + b34.setBackgroundResource(R.color.standardwhite); + b32.setBackgroundResource(R.color.standardwhite); + b31.setBackgroundResource(R.color.standardwhite); + b35.setBackgroundResource(R.color.standardwhite); + } + /* + b02.setTextColor(Color.BLACK); + + b03.setTextColor(Color.BLACK); + b04.setTextColor(Color.BLACK); + b05.setTextColor(Color.BLACK); + */ + // b01.setTextColor(Color.BLUE); + b33.setBackgroundResource(R.drawable.fill); + //4(b33.getText().toString()); + // b3.setBackgroundColor(Color.BLUE); + break; + case R.id.b34: + if (b33.getBackground() != null || b32.getBackground() != null || b31.getBackground() != null + || b35.getBackground() != null) { + b33.setBackgroundResource(R.color.standardwhite); + b32.setBackgroundResource(R.color.standardwhite); + b31.setBackgroundResource(R.color.standardwhite); + b35.setBackgroundResource(R.color.standardwhite); + } + /* + b02.setTextColor(Color.BLACK); + + b03.setTextColor(Color.BLACK); + b04.setTextColor(Color.BLACK); + b05.setTextColor(Color.BLACK); + */ + // b01.setTextColor(Color.BLUE); + b34.setBackgroundResource(R.drawable.fill); + // tv4.setBackgroundColor(Color.BLUE); + //4(b34.getText().toString()); + // b4.setBackgroundColor(Color.BLUE); + break; + case R.id.b35: + if (b34.getBackground() != null || b32.getBackground() != null || b33.getBackground() != null + || b31.getBackground() != null) { + b34.setBackgroundResource(R.color.standardwhite); + b32.setBackgroundResource(R.color.standardwhite); + b33.setBackgroundResource(R.color.standardwhite); + b31.setBackgroundResource(R.color.standardwhite); + } + /* + b02.setTextColor(Color.BLACK); + + b03.setTextColor(Color.BLACK); + b04.setTextColor(Color.BLACK); + b05.setTextColor(Color.BLACK); + */ + // b01.setTextColor(Color.BLUE); + b35.setBackgroundResource(R.drawable.fill); + // tv5.setBackgroundColor(Color.BLUE); + //4(b35.getText().toString()); + // b5.setBackgroundColor(Color.BLUE); + break; + default: + //4("0"); + } + // Toast.makeText(view.getContext(), "Rating set : " + value.getAns4(), Toast.LENGTH_SHORT).show(); + + } + }; + + b01.setOnClickListener(clicklistener1); + b02.setOnClickListener(clicklistener1); + b03.setOnClickListener(clicklistener1); + b04.setOnClickListener(clicklistener1); + b05.setOnClickListener(clicklistener1); + b11.setOnClickListener(clicklistener2); + b12.setOnClickListener(clicklistener2); + b13.setOnClickListener(clicklistener2); + b14.setOnClickListener(clicklistener2); + b15.setOnClickListener(clicklistener2); + b21.setOnClickListener(clicklistener3); + b22.setOnClickListener(clicklistener3); + b23.setOnClickListener(clicklistener3); + b24.setOnClickListener(clicklistener3); + b25.setOnClickListener(clicklistener3); + b31.setOnClickListener(clicklistener4); + b32.setOnClickListener(clicklistener4); + b33.setOnClickListener(clicklistener4); + b34.setOnClickListener(clicklistener4); + b35.setOnClickListener(clicklistener4); + b41.setOnClickListener(clicklistener5); + b42.setOnClickListener(clicklistener5); + b43.setOnClickListener(clicklistener5); + b44.setOnClickListener(clicklistener5); + b45.setOnClickListener(clicklistener5); + b51.setOnClickListener(clicklistener6); + b52.setOnClickListener(clicklistener6); + b53.setOnClickListener(clicklistener6); + b54.setOnClickListener(clicklistener6); + b55.setOnClickListener(clicklistener6); +// + View.OnClickListener submission = new View.OnClickListener() { + @Override + public void onClick(View view) { + // value.setElaborate(Elaborate.getText().toString()); + // value.setElaborateans(ElaborateAns.getText().toString()); + // value.setTeachername(TeacherName.getText().toString()); + // mref.push().child("Teacher feedback").setValue(value); + teacherViewCallback.onSuccessFulSubmission(); + Toast.makeText(view.getContext(), "Your Teacher Submission is Done", Toast.LENGTH_LONG).show(); + } + }; + submit.setOnClickListener(submission); + + + } +} diff --git a/app/src/main/java/badebaba/tscore/Tscore/Staff.java b/app/src/main/java/badebaba/tscore/Tscore/Staff.java new file mode 100644 index 0000000..4019608 --- /dev/null +++ b/app/src/main/java/badebaba/tscore/Tscore/Staff.java @@ -0,0 +1,42 @@ +package badebaba.tscore.Tscore; + + +import android.app.Fragment; +import android.os.Bundle; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import badebaba.tscore.R; +import badebaba.tscore.Tscore.RecyclerViews.RecyclerAdapter; + +public class Staff extends Fragment { + RecyclerView recyclerView; + // Button submit; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + } + + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + View rootview = inflater.inflate(R.layout.fragment_games, container, false); + recyclerView = (RecyclerView) rootview.findViewById(R.id.my_recycler_view); + // submit = (Button) rootview.findViewById(R.id.button1); + RecyclerAdapter adapter = new RecyclerAdapter(getActivity()); + recyclerView.setAdapter(adapter); + recyclerView.setHasFixedSize(true); + + //Layout manager for Recycler view + + recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); + + return rootview; + } +} diff --git a/app/src/main/java/badebaba/tscore/Tscore/Teacher.java b/app/src/main/java/badebaba/tscore/Tscore/Teacher.java new file mode 100644 index 0000000..d511fd3 --- /dev/null +++ b/app/src/main/java/badebaba/tscore/Tscore/Teacher.java @@ -0,0 +1,51 @@ +package badebaba.tscore.Tscore; + +import android.app.Activity; +import android.app.Fragment; +import android.os.Bundle; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import badebaba.tscore.R; +import badebaba.tscore.Tscore.RecyclerViews.TeacherAdapter; +import badebaba.tscore.Tscore.RecyclerViews.TeacherViewCallback; + +public class Teacher extends Fragment { + + + RecyclerView recyclerView2; + LinearLayoutManager linearLayoutManager; + private TeacherViewCallback teacherViewCallback; + + @Override + public void onAttach(Activity activity) { + super.onAttach(activity); + teacherViewCallback = (TeacherViewCallback) activity; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + } + + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + + View rootview = inflater.inflate(R.layout.teacherrecycler, container, false); + + recyclerView2 = (RecyclerView) rootview.findViewById(R.id.teacher_recycler); + + TeacherAdapter adapter = new TeacherAdapter(rootview.getContext(), teacherViewCallback); + linearLayoutManager = new LinearLayoutManager(getActivity()); + linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); + recyclerView2.setAdapter(adapter); + recyclerView2.setHasFixedSize(true); + recyclerView2.setLayoutManager(linearLayoutManager); + + return rootview; + } +} diff --git a/app/src/main/res/drawable/bg_red.xml b/app/src/main/res/drawable/bg_red.xml new file mode 100644 index 0000000..1009189 --- /dev/null +++ b/app/src/main/res/drawable/bg_red.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/fill.png b/app/src/main/res/drawable/fill.png new file mode 100644 index 0000000000000000000000000000000000000000..02b7921b39fa16c79814dc533ceca3fa41395733 GIT binary patch literal 1020 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 X{9xBl+el~R00000NkvXXu0mjfC1E7k literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/ic_launcher.png b/app/src/main/res/drawable/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..c16b5e2d9d6ee6858f707f99cece27fc425bc436 GIT binary patch literal 3785 zcmV;)4mR004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/icl.png b/app/src/main/res/drawable/icl.png new file mode 100644 index 0000000000000000000000000000000000000000..5e351711ccd8ba6d6c649f4987d94718887aeee1 GIT binary patch literal 253 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 G%zpt~!Yw=i literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..dbb647c --- /dev/null +++ b/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_sms.xml b/app/src/main/res/layout/activity_sms.xml new file mode 100644 index 0000000..abc116c --- /dev/null +++ b/app/src/main/res/layout/activity_sms.xml @@ -0,0 +1,210 @@ + + + + + + + + + + + + + + + + + + + +