From ee8a10de20a53e2e2791b80d9968768aa9fd43e2 Mon Sep 17 00:00:00 2001 From: Defend Date: Fri, 10 Feb 2017 17:05:12 +0300 Subject: [PATCH] First commit for the all app --- app/.gitignore | 1 + app/app.iml | 128 ++++ app/build.gradle | 27 + app/libs/jsevaluator-1.0.aar | Bin 0 -> 20729 bytes app/proguard-rules.pro | 17 + app/src/main/AndroidManifest.xml | 26 + .../defdevteam/tstu/FeedController.java | 89 +++ .../ru/defend/defdevteam/tstu/FeedParser.java | 30 + .../ru/defend/defdevteam/tstu/FeedReader.java | 75 +++ .../defend/defdevteam/tstu/MainActivity.java | 140 +++++ .../defend/defdevteam/tstu/WebActivity.java | 550 ++++++++++++++++++ .../main/res/drawable-v21/ic_menu_camera.xml | 12 + .../main/res/drawable-v21/ic_menu_gallery.xml | 9 + .../main/res/drawable-v21/ic_menu_manage.xml | 9 + .../main/res/drawable-v21/ic_menu_send.xml | 9 + .../main/res/drawable-v21/ic_menu_share.xml | 9 + .../res/drawable-v21/ic_menu_slideshow.xml | 9 + app/src/main/res/drawable/Thumbs.db | Bin 0 -> 13312 bytes app/src/main/res/drawable/logo.png | Bin 0 -> 9974 bytes app/src/main/res/drawable/side_nav_bar.xml | 9 + app/src/main/res/drawable/subs_text_bg.xml | 5 + app/src/main/res/layout/app_bar_web.xml | 38 ++ app/src/main/res/layout/cabinet.xml | 25 + app/src/main/res/layout/cabinet_about.xml | 44 ++ .../main/res/layout/cabinet_facultylist.xml | 13 + app/src/main/res/layout/cabinet_grouplist.xml | 13 + .../main/res/layout/cabinet_journallist.xml | 8 + app/src/main/res/layout/cabinet_newsfeed.xml | 13 + app/src/main/res/layout/cabinet_profile.xml | 69 +++ app/src/main/res/layout/cabinet_progress.xml | 24 + app/src/main/res/layout/content_cabinet.xml | 54 ++ app/src/main/res/layout/main.xml | 79 +++ .../main/res/layout/nav_header_cabinet.xml | 34 ++ app/src/main/res/layout/profile.xml | 6 + app/src/main/res/layout/subscriptions.xml | 61 ++ app/src/main/res/menu/cabinet.xml | 9 + app/src/main/res/menu/cabinet_drawer.xml | 45 ++ app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 5636 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 4427 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 6923 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 9426 bytes app/src/main/res/mipmap-xxxhdpi/Thumbs.db | Bin 0 -> 11776 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 12128 bytes app/src/main/res/mipmap-xxxhdpi/mail.jpg | Bin 0 -> 1243700 bytes app/src/main/res/values-en/strings.xml | 34 ++ app/src/main/res/values-ru/strings.xml | 34 ++ app/src/main/res/values-v21/styles.xml | 9 + app/src/main/res/values-w820dp/dimens.xml | 6 + app/src/main/res/values/colors.xml | 6 + app/src/main/res/values/dimens.xml | 9 + app/src/main/res/values/drawables.xml | 8 + app/src/main/res/values/strings.xml | 37 ++ app/src/main/res/values/styles.xml | 21 + .../defdevteam/tstu/FeedControllerTest.java | 16 + build.gradle | 23 + gradle.properties | 18 + gradle/wrapper/gradle-wrapper.properties | 6 + local.properties | 11 + settings.gradle | 1 + 59 files changed, 1928 insertions(+) create mode 100644 app/.gitignore create mode 100644 app/app.iml create mode 100644 app/build.gradle create mode 100644 app/libs/jsevaluator-1.0.aar create mode 100644 app/proguard-rules.pro create mode 100644 app/src/main/AndroidManifest.xml create mode 100644 app/src/main/java/ru/defend/defdevteam/tstu/FeedController.java create mode 100644 app/src/main/java/ru/defend/defdevteam/tstu/FeedParser.java create mode 100644 app/src/main/java/ru/defend/defdevteam/tstu/FeedReader.java create mode 100644 app/src/main/java/ru/defend/defdevteam/tstu/MainActivity.java create mode 100644 app/src/main/java/ru/defend/defdevteam/tstu/WebActivity.java create mode 100644 app/src/main/res/drawable-v21/ic_menu_camera.xml create mode 100644 app/src/main/res/drawable-v21/ic_menu_gallery.xml create mode 100644 app/src/main/res/drawable-v21/ic_menu_manage.xml create mode 100644 app/src/main/res/drawable-v21/ic_menu_send.xml create mode 100644 app/src/main/res/drawable-v21/ic_menu_share.xml create mode 100644 app/src/main/res/drawable-v21/ic_menu_slideshow.xml create mode 100644 app/src/main/res/drawable/Thumbs.db create mode 100644 app/src/main/res/drawable/logo.png create mode 100644 app/src/main/res/drawable/side_nav_bar.xml create mode 100644 app/src/main/res/drawable/subs_text_bg.xml create mode 100644 app/src/main/res/layout/app_bar_web.xml create mode 100644 app/src/main/res/layout/cabinet.xml create mode 100644 app/src/main/res/layout/cabinet_about.xml create mode 100644 app/src/main/res/layout/cabinet_facultylist.xml create mode 100644 app/src/main/res/layout/cabinet_grouplist.xml create mode 100644 app/src/main/res/layout/cabinet_journallist.xml create mode 100644 app/src/main/res/layout/cabinet_newsfeed.xml create mode 100644 app/src/main/res/layout/cabinet_profile.xml create mode 100644 app/src/main/res/layout/cabinet_progress.xml create mode 100644 app/src/main/res/layout/content_cabinet.xml create mode 100644 app/src/main/res/layout/main.xml create mode 100644 app/src/main/res/layout/nav_header_cabinet.xml create mode 100644 app/src/main/res/layout/profile.xml create mode 100644 app/src/main/res/layout/subscriptions.xml create mode 100644 app/src/main/res/menu/cabinet.xml create mode 100644 app/src/main/res/menu/cabinet_drawer.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/Thumbs.db create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/mail.jpg create mode 100644 app/src/main/res/values-en/strings.xml create mode 100644 app/src/main/res/values-ru/strings.xml create mode 100644 app/src/main/res/values-v21/styles.xml 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/drawables.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/testDebug/aidl/ru/defend/defdevteam/tstu/FeedControllerTest.java create mode 100644 build.gradle create mode 100644 gradle.properties create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100644 local.properties create mode 100644 settings.gradle 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/app.iml b/app/app.iml new file mode 100644 index 0000000..a16956c --- /dev/null +++ b/app/app.iml @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 0000000..3f70650 --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,27 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 25 + buildToolsVersion '25.0.2' + + defaultConfig { + applicationId "ru.defend.defdevteam.tstu" + minSdkVersion 15 + targetSdkVersion 23 + versionCode 1 + versionName "1.0" + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + compile fileTree(include: ['*.jar'], dir: 'libs') + testCompile 'junit:junit:4.12' + compile 'com.android.support:appcompat-v7:23.4.0' + compile 'com.android.support:design:23.4.0' +} diff --git a/app/libs/jsevaluator-1.0.aar b/app/libs/jsevaluator-1.0.aar new file mode 100644 index 0000000000000000000000000000000000000000..95c6567e5051817595cba64c97192887c64cad38 GIT binary patch literal 20729 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 K + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/ru/defend/defdevteam/tstu/FeedController.java b/app/src/main/java/ru/defend/defdevteam/tstu/FeedController.java new file mode 100644 index 0000000..33125b4 --- /dev/null +++ b/app/src/main/java/ru/defend/defdevteam/tstu/FeedController.java @@ -0,0 +1,89 @@ +package ru.defend.defdevteam.tstu; + +import android.app.Activity; +import android.widget.TextView; + +/** + * Created by thedefend on 29.11.16. + */ + +public class FeedController { + + FeedReader feedReader; + FeedUpdater feedUpdater; + String newsFeed; + int updateRate; //in minutes + private WebActivity activity; + + public FeedController(WebActivity activity, int updateRate) { + this(activity, updateRate, "http://press.tstu.ru/?format=feed"); + } + + public FeedController(WebActivity activity, int updateRate, String rssUrl) { + feedReader = new FeedReader(this, rssUrl); + feedUpdater = new FeedUpdater(); + this.activity = activity; + this.updateRate = updateRate; + feedUpdater.start(); + } + + private void startFeedReader() { + switch (feedReader.getThreadState()) { + case THREAD_FAIL: + feedReader.start(); + break; + case THREAD_NULL: + feedReader.start(); + break; + } + } + + private boolean checkFeedReader() throws Exception{ + switch (feedReader.getThreadState()) { + case THREAD_COMPLETE: + return true; + case THREAD_NULL: + return false; + default: + throw new Exception("Failed to get rss source string from FeedReader class"); + } + } + + public void feedUpdateAction(final String result) { + activity.runOnUiThread(new Runnable() { + @Override + public void run() { + activity.newsTextView.setText(result); + } + }); + } + + private class FeedUpdater extends Thread { + @Override + public void run() { + startFeedReader(); + try { + //TODO: вернуть к норме updateRate*60*1000 + sleep(updateRate*60); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + public FeedUpdater() { + this.start(); + } + } + + public String getRssString() throws Exception{ + if(checkFeedReader()) { + newsFeed = feedReader.getResult(); + return newsFeed; + } + throw new Exception("Feed Reader returned empty string"); + } + + interface FeedCallback{ + void Callback(); + } +} diff --git a/app/src/main/java/ru/defend/defdevteam/tstu/FeedParser.java b/app/src/main/java/ru/defend/defdevteam/tstu/FeedParser.java new file mode 100644 index 0000000..9b97351 --- /dev/null +++ b/app/src/main/java/ru/defend/defdevteam/tstu/FeedParser.java @@ -0,0 +1,30 @@ +package ru.defend.defdevteam.tstu; + +import org.w3c.dom.Document; +import org.w3c.dom.Node; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; + +/** + * Created by thedefend on 29.11.16. + */ + +public class FeedParser { + + FeedParser(String omg) { + try { + DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); + // Создается дерево DOM документа из файла + Document document = documentBuilder.parse(omg); + + // Получаем корневой элемент + Node root = document.getDocumentElement(); + } catch (Exception e) { + e.printStackTrace(); + } + + } + + +} diff --git a/app/src/main/java/ru/defend/defdevteam/tstu/FeedReader.java b/app/src/main/java/ru/defend/defdevteam/tstu/FeedReader.java new file mode 100644 index 0000000..ac195e9 --- /dev/null +++ b/app/src/main/java/ru/defend/defdevteam/tstu/FeedReader.java @@ -0,0 +1,75 @@ +package ru.defend.defdevteam.tstu; + +import android.os.Handler; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.net.URL; + +/** + * Created by thedefend on 28.11.16. + */ + +public class FeedReader extends Thread implements FeedController.FeedCallback { + + private String link; + private String result; + private FeedController feedController; + public enum States { + THREAD_NULL, + THREAD_WORK, + THREAD_FAIL, + THREAD_COMPLETE + } + private States threadState; + + FeedReader (FeedController feedController, String link) { + this.link = link; + this.feedController = feedController; + this.threadState = States.THREAD_NULL; + } + + + public void run(){ + try { + this.threadState = States.THREAD_WORK; + this.result = getRss(link); + this.threadState = States.THREAD_COMPLETE; + //TODO: слишком сильная взаимосвязь с управляющим классом + feedController.feedUpdateAction(result); + } catch (Exception e) { + this.threadState = States.THREAD_FAIL; + e.printStackTrace(); + } + + } + + private String getRss(String link) throws Exception { + String tempString = null; + String inputString = ""; + URL rssFeed = new URL(link); + BufferedReader inputStream = new BufferedReader( + new InputStreamReader(rssFeed.openStream())); + + do { + if(tempString != null) { + inputString += tempString; + } + tempString = inputStream.readLine(); + } while (tempString != null); + + return inputString; + } + + public States getThreadState() { + return this.threadState; + } + + public String getResult() { + return this.result; + } + + public void Callback(){ + + } +} diff --git a/app/src/main/java/ru/defend/defdevteam/tstu/MainActivity.java b/app/src/main/java/ru/defend/defdevteam/tstu/MainActivity.java new file mode 100644 index 0000000..d5b9e5f --- /dev/null +++ b/app/src/main/java/ru/defend/defdevteam/tstu/MainActivity.java @@ -0,0 +1,140 @@ +package ru.defend.defdevteam.tstu; + +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.support.annotation.NonNull; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.CheckBox; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.ListView; +import android.widget.TextView; + +import java.util.ArrayList; +import java.util.List; + +public class MainActivity extends AppCompatActivity { + private EditText login, password; + public ImageView logo; + private SharedPreferences sPref; + final String LOGIN = "login"; + final String PASSWORD = "password"; + final String CHECK = "check"; + public CheckBox check; + static public List subs; + + + + public void authButtonOnClick(View v){ + if(check.isChecked()){ + saveForms(); + } + Intent WebA = new Intent(this, WebActivity.class); + WebA.putExtra("login", login.getText().toString()); + WebA.putExtra("pass", password.getText().toString()); + startActivity(WebA); + //onFeedReaderComplete(); + } + + //TODO: Проверка авторизации здеся, хотя как ее тут пилить, когда ее нету лооол! + void saveForms() { + sPref = getPreferences(MODE_PRIVATE); + SharedPreferences.Editor ed = sPref.edit(); + ed.putString(LOGIN, login.getText().toString()); + ed.putString(PASSWORD, password.getText().toString()); + ed.putBoolean(CHECK, check.isChecked()); + ed.apply(); + } + + void loadForms() { + sPref = getPreferences(MODE_PRIVATE); + login.setText(sPref.getString(LOGIN, "")); + password.setText(sPref.getString(PASSWORD, "")); + check.setChecked(sPref.getBoolean(CHECK, false)); + } + + public void updateForms(View v){ + if(!check.isChecked()) { + password.setText(""); + saveForms(); + } + else { + saveForms(); + } + } + + + public class subsAdapter extends ArrayAdapter { + public subsAdapter(Context context) { + super(context, android.R.layout.simple_list_item_multiple_choice, subs); + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + groupList group = getItem(position); + + if(convertView == null){ + convertView = LayoutInflater.from(getContext()).inflate(android.R.layout.simple_list_item_multiple_choice, null); + } + ((TextView) convertView.findViewById(android.R.id.text1)).setText(group.name); + return convertView; + } + } + + + + public class groupList { + public String name, rate; + public groupList(String name, String rate){ + this.name = name; + this.rate = rate; + } + } + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.main); + login = (EditText) findViewById(R.id.editLogin); + password = (EditText) findViewById(R.id.passEdit); + check = (CheckBox) findViewById(R.id.save); + loadForms(); + //TODO: убрать потом + subs = new ArrayList(); + subs.add(new groupList("test","test")); + subs.add(new groupList("test","test")); + subs.add(new groupList("test","test")); + subs.add(new groupList("test","test")); + setContentView(R.layout.subscriptions); + ArrayAdapter subsL = new subsAdapter(this); + ListView subsList = (ListView) findViewById(R.id.subsList); + subsList.setAdapter(subsL); + } + + @Override + protected void onResume() { + super.onResume(); + Intent intent = getIntent(); + if (!(intent.getStringExtra("error") == null)) { + Log.i("TESTINGG", intent.getStringExtra("error")); + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if(check.isChecked()) saveForms(); + } + + public void OnSubsListClick(View v) { + + } +} diff --git a/app/src/main/java/ru/defend/defdevteam/tstu/WebActivity.java b/app/src/main/java/ru/defend/defdevteam/tstu/WebActivity.java new file mode 100644 index 0000000..cef5676 --- /dev/null +++ b/app/src/main/java/ru/defend/defdevteam/tstu/WebActivity.java @@ -0,0 +1,550 @@ +package ru.defend.defdevteam.tstu; + +import android.annotation.TargetApi; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.design.widget.FloatingActionButton; +import android.support.design.widget.Snackbar; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.support.design.widget.NavigationView; +import android.support.v4.view.GravityCompat; +import android.support.v4.widget.DrawerLayout; +import android.support.v7.app.ActionBarDrawerToggle; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.Toolbar; +import android.view.Menu; +import android.view.MenuItem; +import android.view.ViewGroup; +import android.webkit.ValueCallback; +import android.webkit.WebSettings; +import android.webkit.WebView; +import android.webkit.WebViewClient; +import android.widget.ArrayAdapter; +import android.widget.Chronometer; +import android.widget.ListView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + + +public class WebActivity extends AppCompatActivity + implements NavigationView.OnNavigationItemSelectedListener { + + + public WebView browser; + public WebSettings browserSet; + static public String AuthURL, MainURL, AdditionalURL ,JournalURL, RateValueURL, GroupRateURL, + FacultyRateURL, siteBuf; + static public String MainHTML, AdditionalHTML, JournalHTML, RateValueHTML, GroupRateHTML, + FacultyRateHTML; + boolean authBegin,taskFinished = false; + public TextView studentName, studentGroup, studentRate, positionGroup, + positionFaculty, newsTextView; + public RelativeLayout profileLayout, journalLayout, gRateLayout, + fRateLayout, aboutLayout, progressLayout, newsLayout; + public Toolbar myToolbar; + public Chronometer timer; + static public List group, faculty, subs; + Intent MainA; + FeedController feedController; + + + public class groupList { + public String name, rate; + public groupList(String name, String rate){ + this.name = name; + this.rate = rate; + } + } + + public class groupAdapter extends ArrayAdapter { + public groupAdapter(Context context){ + super(context, android.R.layout.simple_list_item_2, group); + } + + @Override + public View getView(int position, View convertView, ViewGroup parent){ + groupList group = getItem(position); + + if (convertView == null){ + convertView = LayoutInflater.from(getContext()).inflate(android.R.layout.simple_list_item_2, null); + } + + ((TextView) convertView.findViewById(android.R.id.text1)).setText(group.name); + ((TextView) convertView.findViewById(android.R.id.text2)).setText(group.rate); + + return convertView; + } + + } + + public class subsAdapter extends ArrayAdapter { + public subsAdapter(Context context) { + super(context, android.R.layout.simple_selectable_list_item); + } + + @NonNull + @Override + public View getView(int position, View convertView, ViewGroup parent) { + groupList group = getItem(position); + + if(convertView == null){ + convertView = LayoutInflater.from(getContext()).inflate(android.R.layout.simple_selectable_list_item, null); + } + ((TextView) convertView.findViewById(android.R.id.text1)).setText(group.name); + return convertView; + } + } + + public class facultyAdapter extends ArrayAdapter { + public facultyAdapter(Context context){ + super(context, android.R.layout.simple_list_item_2, faculty); + } + + @Override + public View getView(int position, View convertView, ViewGroup parent){ + groupList group = getItem(position); + + if (convertView == null){ + convertView = LayoutInflater.from(getContext()).inflate(android.R.layout.simple_list_item_2, null); + } + + ((TextView) convertView.findViewById(android.R.id.text1)).setText(group.name); + ((TextView) convertView.findViewById(android.R.id.text2)).setText(group.rate); + + return convertView; + } + + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.cabinet); + Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + + FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); + fab.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) + .setAction("Action", null).show(); + } + }); + + final DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); + ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( + this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); +// toolbar.setNavigationOnClickListener( +// new View.OnClickListener() { +// @Override +// public void onClick(View view) { +// Log.d("Toolbar","Hmmm..."); +// if(drawer.isDrawerOpen(GravityCompat.START)){ +// drawer.openDrawer(GravityCompat.START); +// } +// } +// }); + toggle.syncState(); + + NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); + navigationView.setNavigationItemSelectedListener(this); + + MainA = getIntent(); + + + + browser = (WebView) findViewById(R.id.webView); + browser.setWebViewClient(new MyWebViewClient()); + browserSet = browser.getSettings(); + browserSet.setJavaScriptEnabled(true); + studentName = (TextView) findViewById(R.id.studentName); + studentRate = (TextView) findViewById(R.id.studentRate); + studentGroup = (TextView) findViewById(R.id.studentGroup); + positionFaculty = (TextView) findViewById(R.id.positionFaculty); + newsTextView = (TextView) findViewById(R.id.newsTextView); + positionGroup = (TextView) findViewById(R.id.positionGroup); + profileLayout = (RelativeLayout) findViewById(R.id.profileLayout); + journalLayout = (RelativeLayout) findViewById(R.id.journalList); + gRateLayout = (RelativeLayout) findViewById(R.id.gRateLayout); + fRateLayout = (RelativeLayout) findViewById(R.id.fRateLayout); + aboutLayout = (RelativeLayout) findViewById(R.id.aboutLayout); + progressLayout = (RelativeLayout) findViewById(R.id.progressLayout); + newsLayout = (RelativeLayout) findViewById(R.id.newsLayout); + progressLayout.setVisibility(View.VISIBLE); + profileLayout.setVisibility(View.VISIBLE); + myToolbar = (Toolbar) findViewById(R.id.toolbar); + setSupportActionBar(myToolbar); + navigationView.getMenu().getItem(1).setChecked(true); + myToolbar.setTitle(R.string.title_profile); + + + feedController = new FeedController(this, 1); + + AuthURL = "http://web-iais.admin.tstu.ru:7777/zion/f?p=stud_main"; + loadSite(); + + } + + @Override + public void onBackPressed() { + DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); + if (drawer.isDrawerOpen(GravityCompat.START)) { + drawer.closeDrawer(GravityCompat.START); + } else { + super.onBackPressed(); + } + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.cabinet, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle action bar item clicks here. The action bar will + // automatically handle clicks on the Home/Up button, so long + // as you specify a parent activity in AndroidManifest.xml. + int id = item.getItemId(); + + //noinspection SimplifiableIfStatement + if (id == R.id.action_settings) { + return true; + } + + return super.onOptionsItemSelected(item); + } + + @Override + public boolean onNavigationItemSelected(MenuItem item) { + int id = item.getItemId(); + newsLayout.setVisibility(View.INVISIBLE); + profileLayout.setVisibility(View.INVISIBLE); + journalLayout.setVisibility(View.INVISIBLE); + gRateLayout.setVisibility(View.INVISIBLE); + fRateLayout.setVisibility(View.INVISIBLE); + aboutLayout.setVisibility(View.INVISIBLE); + if(!taskFinished) { + progressLayout.setVisibility(View.VISIBLE); + } + switch (id) { + case R.id.nav_newsfeed: + progressLayout.setVisibility(View.INVISIBLE); + newsLayout.setVisibility(View.VISIBLE); + myToolbar.setTitle(R.string.title_newsfeed); + break; + case R.id.nav_profile: + profileLayout.setVisibility(View.VISIBLE); + myToolbar.setTitle(R.string.title_profile); + break; + case R.id.nav_journal: + journalLayout.setVisibility(View.VISIBLE); + myToolbar.setTitle(R.string.title_journal); + break; + case R.id.nav_grouprate: + gRateLayout.setVisibility(View.VISIBLE); + myToolbar.setTitle(R.string.title_grouprate); + break; + case R.id.nav_facultyrate: + fRateLayout.setVisibility(View.VISIBLE); + myToolbar.setTitle(R.string.title_globalrate); + break; + case R.id.nav_aboutapp: + progressLayout.setVisibility(View.INVISIBLE); + aboutLayout.setVisibility(View.VISIBLE); + myToolbar.setTitle(R.string.title_about_dev); + break; + case R.id.nav_changeacc: + finish(); + break; + } + DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); + drawer.closeDrawer(GravityCompat.START); + return true; + } + + + + public static StringBuffer removeUTFCharacters(String data){ + Pattern p = Pattern.compile("\\\\u(\\p{XDigit}{4})"); + Matcher m = p.matcher(data); + StringBuffer buf = new StringBuffer(data.length()); + while (m.find()) { + String ch = String.valueOf((char) Integer.parseInt(m.group(1), 16)); + m.appendReplacement(buf, Matcher.quoteReplacement(ch)); + } + m.appendTail(buf); + return buf; + } + + public void loadSite () { + browser.loadUrl(AuthURL); + } + + public String cutLine(String a, String b, String Line){ + if(Line.contains(a)) Line = Line.substring(Line.indexOf(a)+ a.length()); + if(Line.contains(b)) { + if(b == ""){ + return Line; + } + Line = Line.substring(0, Line.indexOf(b)); + return Line; + } else { + return ""; + } + } + + public String cutLine(String a, String b, String Line, boolean hard){ + if ((!Line.contains(a)) || (a.equals("")) ) return ""; + if ((!Line.contains(b)) || (b.equals("")) ) return ""; + Line = Line.substring(Line.indexOf(a)+ a.length()); + Line = Line.substring(0, Line.indexOf(b)); + return Line; + } + + + // НЕИЗВЕСТНОЕ ИСКЛЮЧЕНИЕ + public void unknownState(int currentState){ + Log.e("unknownState","Не удалось получить ссылки на странице студента"); + Log.e("unknownState",browser.getUrl()); + finish(); + } + // АВТОРИЗАЦИЯ + public boolean Auth () { + authBegin = true; + String login = MainA.getStringExtra("login"); + String password = MainA.getStringExtra("pass"); + Log.i("Auth|Login", login); + Log.i("Auth|Password", password); + //console("Auth|Password",MainActivity.password.getText().toString()); + //browser.loadUrl("javascript:apex.submit({request:'LOGIN',set:{'P101_USERNAME':'s75389','P101_PASSWORD':'v97KFxmP'}});"); + browser.loadUrl("javascript:apex.submit({request:'LOGIN',set:{'P101_USERNAME':'"+login+"','P101_PASSWORD':'"+password+"'}});"); + return true; + } + + public byte sessionState () { + if(taskFinished) return 127; + Intent intent = new Intent(); + Log.i("sessionActive","Checking session"); + String a = cutLine("http://web-iais.admin.tstu.ru:7777/zion/f?p=503:",":",browser.getUrl()); + switch (a){ + case "LOGIN_DESKTOP": + Log.i("sessionActive","Окно авторизации"); + //MainActivity.error.setText("Конец сессии авторизации"); + finish(); + return 0; + case "er": + Log.i("sessionActive","Окно авторизации"); + //MainActivity.error.setText("Ошибка авторизации"); + finish(); + return 1; + case "1": + Log.i("sessionActive","Страница студента"); + intent.putExtra("error","Вход производился успешно"); + MainURL = browser.getUrl(); + taskGenerator(2); + return 2; + case "40": + Log.i("sessionActive","Страница - Успеваемость"); + taskGenerator(3); + return 3; + case "41": + Log.i("sessionActive","Страница - Журналы|Главная"); + taskGenerator(4); + return 4; + case "43": + Log.i("sessionActive","Страница - Рейтинг|Главная"); + String s = cutLine("","503:",MainURL) + "503:43:" + cutLine(":1:","",MainURL)+":"; + if(cutLine(s,":NO:",browser.getUrl()).equals("RATE_GROUP")) { + taskGenerator(6); + return 6; + } + if(cutLine(s,":NO:",browser.getUrl()).equals("RATE_INST")) { + taskGenerator(7); + return 7; + } + taskGenerator(5); + return 5; + + } + return 0; + } + + + // Контент генератор + public void taskGenerator(int state){ + if (!isFinishing()) + switch (state){ + case 2: + MainHTML = siteBuf; + String studNameGroup = cutLine("", + "", + MainHTML); + studentName.setText(cutLine(""," /",studNameGroup)); + studentGroup.setText("Группа: " + cutLine("/ ","",studNameGroup)); + browser.loadUrl("javascript:apex.submit('T_ЗАНЯТИЯ/ОЦЕНКИ');"); + break; + case 3: + AdditionalHTML = siteBuf; + JournalURL = "http://web-iais.admin.tstu.ru:7777/zion/" + + cutLine("",AdditionalHTML); + RateValueURL = "http://web-iais.admin.tstu.ru:7777/zion/" + + cutLine("",AdditionalHTML); + browser.loadUrl(JournalURL); + break; + case 4: + JournalHTML = siteBuf; + browser.loadUrl(RateValueURL); + break; + case 5: + RateValueHTML = siteBuf; + String rate = cutLine("","",RateValueHTML); + studentRate.setText("Балл: " + rate); + GroupRateURL = "http://web-iais.admin.tstu.ru:7777/zion/" + cutLine(">",RateValueHTML); + FacultyRateURL = "http://web-iais.admin.tstu.ru:7777/zion/" + cutLine("", RateValueHTML); + browser.loadUrl(GroupRateURL); + break; + case 6: + GroupRateHTML = siteBuf; + fillGroup(); + browser.loadUrl(FacultyRateURL); + break; + case 7: + FacultyRateHTML = siteBuf; + fillFaculty(); + fillAll(); + taskFinished = true; + progressLayout.setVisibility(View.INVISIBLE); + break; + } + + } + + public void fillGroup(){ + group = new ArrayList(); + String n,r; + String gr = siteBuf; + gr = cutLine("

Рейтинг в группе

", "", gr); + int i = 0; + while ( !(cutLine("","",gr,true) == "")){ + Integer s = Integer.valueOf(cutLine("","",gr)); + if(s == (i+1)) { + n = cutLine("", "", gr); + if (!(cutLine("", "", n) == "")) + n = cutLine("", "",n); + r = cutLine("", "", gr); + r += " | Группа: " + cutLine("","", gr, true); + group.add(new groupList(n,"Общий балл: " + r)); + i++; + } + gr = cutLine("\\n", "", gr); + } + ArrayAdapter groupL = new groupAdapter(this); + ListView groupList = (ListView) findViewById(R.id.groupList); + groupList.setAdapter(groupL); + } + + public void fillFaculty(){ + faculty = new ArrayList(); + String n,r; + String fr = siteBuf; + fr = cutLine("

Рейтинг в институте/факультете

", "", fr); + int i = 0; + while ( !(cutLine("","",fr,true) == "")){ + Integer s = Integer.valueOf(cutLine("","",fr)); + if(s == (i+1)) { + n = cutLine("", "", fr); + if (!(cutLine("", "", n) == "")) + n = cutLine("", "",n); + r = cutLine("", "", fr); + r += " | Группа: " + cutLine("","", fr, true); + faculty.add(new groupList(n,"Общий балл: " + r)); + i++; + } + fr = cutLine("\\n", "", fr); + } + ArrayAdapter facultyL = new facultyAdapter(this); + ListView facultyList = (ListView) findViewById(R.id.facultyList); + facultyList.setAdapter(facultyL); + } + + + //TODO: Переделать к хуям позор ниже + public void fillAll(){ + String s; + String s2 = GroupRateHTML; + s = cutLine("","",GroupRateHTML); + s = cutLine("",s); + while (s.equals("")) { + s2 = cutLine("","",s2); + s = cutLine("","",s2); + s = cutLine("",s); + } + s2 = cutLine("","",s2); + Log.i("GroupPos",s2); + positionGroup.setText("Место в группе: " + s2); + s = ""; + s2 = FacultyRateHTML; + s = cutLine("","",FacultyRateHTML); + s = cutLine("",s); + while (s.equals("")) { + s2 = cutLine("","",s2); + s = cutLine("","",s2); + s = cutLine("",s); + } + s2 = cutLine("","",s2); + Log.i("FacultyPos",s2); + positionFaculty.setText("Место в институте: " + s2); + } + + public void buttonRefresh (View v) { + getHTML(); + } + + public void buttonLogout (View v) { + finish(); + } + + @TargetApi(19) + public void getHTML(){ + + browser.evaluateJavascript("javascript:document.documentElement.outerHTML;", new ValueCallback() { + @Override + public void onReceiveValue(String s) { + siteBuf = s; + encodeHTML(); + if(!authBegin) Auth(); + else sessionState(); + } + }); + } + + public void encodeHTML(){ + if(siteBuf != null){ + siteBuf = removeUTFCharacters(siteBuf).toString(); + Log.d("Response html","Загружена страница "+cutLine("","",siteBuf)); + Log.i("encodeHTML",siteBuf); + } + + } + + + private class MyWebViewClient extends WebViewClient { + @Override + public void onPageFinished(WebView view, String url) { + getHTML(); + Log.i("onPageFinished",browser.getUrl()); + } + } +} diff --git a/app/src/main/res/drawable-v21/ic_menu_camera.xml b/app/src/main/res/drawable-v21/ic_menu_camera.xml new file mode 100644 index 0000000..0d9ea10 --- /dev/null +++ b/app/src/main/res/drawable-v21/ic_menu_camera.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable-v21/ic_menu_gallery.xml b/app/src/main/res/drawable-v21/ic_menu_gallery.xml new file mode 100644 index 0000000..f6872c4 --- /dev/null +++ b/app/src/main/res/drawable-v21/ic_menu_gallery.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable-v21/ic_menu_manage.xml b/app/src/main/res/drawable-v21/ic_menu_manage.xml new file mode 100644 index 0000000..c1be60b --- /dev/null +++ b/app/src/main/res/drawable-v21/ic_menu_manage.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/drawable-v21/ic_menu_send.xml b/app/src/main/res/drawable-v21/ic_menu_send.xml new file mode 100644 index 0000000..00c668c --- /dev/null +++ b/app/src/main/res/drawable-v21/ic_menu_send.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable-v21/ic_menu_share.xml b/app/src/main/res/drawable-v21/ic_menu_share.xml new file mode 100644 index 0000000..a28fb9e --- /dev/null +++ b/app/src/main/res/drawable-v21/ic_menu_share.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable-v21/ic_menu_slideshow.xml b/app/src/main/res/drawable-v21/ic_menu_slideshow.xml new file mode 100644 index 0000000..209aa64 --- /dev/null +++ b/app/src/main/res/drawable-v21/ic_menu_slideshow.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/Thumbs.db b/app/src/main/res/drawable/Thumbs.db new file mode 100644 index 0000000000000000000000000000000000000000..454f6c0cd109d6ee7c50c5af3dfe84f42a4e30ac GIT binary patch literal 13312 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 + + \ No newline at end of file diff --git a/app/src/main/res/drawable/subs_text_bg.xml b/app/src/main/res/drawable/subs_text_bg.xml new file mode 100644 index 0000000..0963c72 --- /dev/null +++ b/app/src/main/res/drawable/subs_text_bg.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/app_bar_web.xml b/app/src/main/res/layout/app_bar_web.xml new file mode 100644 index 0000000..10e59f7 --- /dev/null +++ b/app/src/main/res/layout/app_bar_web.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/cabinet.xml b/app/src/main/res/layout/cabinet.xml new file mode 100644 index 0000000..beba8f7 --- /dev/null +++ b/app/src/main/res/layout/cabinet.xml @@ -0,0 +1,25 @@ + + + + + + + + diff --git a/app/src/main/res/layout/cabinet_about.xml b/app/src/main/res/layout/cabinet_about.xml new file mode 100644 index 0000000..b11f9cb --- /dev/null +++ b/app/src/main/res/layout/cabinet_about.xml @@ -0,0 +1,44 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/cabinet_facultylist.xml b/app/src/main/res/layout/cabinet_facultylist.xml new file mode 100644 index 0000000..2e3b7af --- /dev/null +++ b/app/src/main/res/layout/cabinet_facultylist.xml @@ -0,0 +1,13 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/cabinet_grouplist.xml b/app/src/main/res/layout/cabinet_grouplist.xml new file mode 100644 index 0000000..8b08c76 --- /dev/null +++ b/app/src/main/res/layout/cabinet_grouplist.xml @@ -0,0 +1,13 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/cabinet_journallist.xml b/app/src/main/res/layout/cabinet_journallist.xml new file mode 100644 index 0000000..954b3bd --- /dev/null +++ b/app/src/main/res/layout/cabinet_journallist.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/cabinet_newsfeed.xml b/app/src/main/res/layout/cabinet_newsfeed.xml new file mode 100644 index 0000000..d3eb5fa --- /dev/null +++ b/app/src/main/res/layout/cabinet_newsfeed.xml @@ -0,0 +1,13 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/cabinet_profile.xml b/app/src/main/res/layout/cabinet_profile.xml new file mode 100644 index 0000000..d392595 --- /dev/null +++ b/app/src/main/res/layout/cabinet_profile.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/cabinet_progress.xml b/app/src/main/res/layout/cabinet_progress.xml new file mode 100644 index 0000000..6060b2a --- /dev/null +++ b/app/src/main/res/layout/cabinet_progress.xml @@ -0,0 +1,24 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/content_cabinet.xml b/app/src/main/res/layout/content_cabinet.xml new file mode 100644 index 0000000..269e456 --- /dev/null +++ b/app/src/main/res/layout/content_cabinet.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/main.xml b/app/src/main/res/layout/main.xml new file mode 100644 index 0000000..88a7fd0 --- /dev/null +++ b/app/src/main/res/layout/main.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + +