1
0
mirror of https://github.com/wulkanowy/wulkanowy.git synced 2024-09-20 04:19:08 -05:00

Merge branch 'grid-marks'

# Conflicts:
#	app/src/main/java/io/github/wulkanowy/activity/main/Login.java
#	app/src/main/java/io/github/wulkanowy/activity/main/MainActivity.java
This commit is contained in:
RicomenPL 2017-07-21 20:11:28 +02:00
commit a5ad57cfde
18 changed files with 548 additions and 41 deletions

View File

@ -36,5 +36,8 @@ dependencies {
compile 'com.android.support:design:25.3.1' compile 'com.android.support:design:25.3.1'
compile 'com.android.support:support-vector-drawable:25.3.1' compile 'com.android.support:support-vector-drawable:25.3.1'
compile 'com.android.support:support-v4:25.3.1' compile 'com.android.support:support-v4:25.3.1'
compile 'com.android.support:recyclerview-v7:25.3.1'
compile 'com.squareup.picasso:picasso:2.5.2'
testCompile 'junit:junit:4.12' testCompile 'junit:junit:4.12'
} }

View File

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="io.github.wulkanowy"> package="io.github.wulkanowy"
android:installLocation="internalOnly">
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
@ -11,11 +12,12 @@
android:label="@string/app_name" android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round" android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true" android:supportsRtl="true"
android:theme="@android:style/Theme.DeviceDefault"> android:theme="@style/Theme.AppCompat">
<activity <activity
android:name=".activity.started.StartedActivity" android:name=".activity.started.StartedActivity"
android:noHistory="true" android:noHistory="true"
android:theme="@style/NoActionBar"> android:theme="@style/Theme.AppCompat.NoActionBar"
android:configChanges="orientation|screenSize">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />
@ -24,11 +26,12 @@
</activity> </activity>
<activity <activity
android:name=".activity.main.MainActivity" android:name=".activity.main.MainActivity"
android:label="@string/login_title" /> android:label="@string/login_title"
android:configChanges="orientation|screenSize"/>
<activity <activity
android:name=".activity.dashboard.DashboardActivity" android:name=".activity.dashboard.DashboardActivity"
android:label="@string/title_activity_dashboard" android:label="@string/title_activity_dashboard"
android:theme="@style/Theme.AppCompat" /> android:configChanges="orientation|screenSize"/>
</application> </application>
</manifest> </manifest>

View File

@ -18,7 +18,7 @@ import io.github.wulkanowy.activity.dashboard.marks.MarksFragment;
public class DashboardActivity extends AppCompatActivity { public class DashboardActivity extends AppCompatActivity {
MarksFragment marksFragment = new MarksFragment(); MarksFragment marksFragment;
AttendanceFragment attendanceFragment = new AttendanceFragment(); AttendanceFragment attendanceFragment = new AttendanceFragment();
BoardFragment boardFragment = new BoardFragment(); BoardFragment boardFragment = new BoardFragment();
LessonplanFragment lessonplanFragment = new LessonplanFragment(); LessonplanFragment lessonplanFragment = new LessonplanFragment();
@ -68,6 +68,8 @@ public class DashboardActivity extends AppCompatActivity {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dashboard); setContentView(R.layout.activity_dashboard);
marksFragment = new MarksFragment();
setTitle(R.string.title_dashboard); setTitle(R.string.title_dashboard);
BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation); BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);

View File

@ -0,0 +1,61 @@
package io.github.wulkanowy.activity.dashboard.marks;
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.ImageView;
import android.widget.TextView;
import com.squareup.picasso.Picasso;
import java.util.ArrayList;
import io.github.wulkanowy.R;
public class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.ViewHolder> {
private Context context;
private ArrayList<String> lista;
public ImageAdapter(Context context, ArrayList<String> lista) {
this.lista = lista;
this.context = context;
}
@Override
public ImageAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.row_layout, viewGroup, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(ImageAdapter.ViewHolder viewHolder, int i) {
viewHolder.tv_android.setText(lista.get(i));
Picasso.with(context)
.load(R.drawable.sample_0)
.resize(240,120)
.noFade()
.into(viewHolder.img_android);
}
@Override
public int getItemCount() {
return lista.size();
}
public class ViewHolder extends RecyclerView.ViewHolder{
private TextView tv_android;
private ImageView img_android;
public ViewHolder(View view) {
super(view);
tv_android = (TextView)view.findViewById(R.id.tv_android);
img_android = (ImageView) view.findViewById(R.id.img_android);
}
}
}

View File

@ -1,17 +1,38 @@
package io.github.wulkanowy.activity.dashboard.marks; package io.github.wulkanowy.activity.dashboard.marks;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle; import android.os.Bundle;
import android.support.v4.app.Fragment; import android.support.v4.app.Fragment;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import io.github.wulkanowy.R; import io.github.wulkanowy.R;
public class MarksFragment extends Fragment { public class MarksFragment extends Fragment {
ArrayList<String> subject = new ArrayList<>();
View view;
public MarksFragment() { public MarksFragment() {
} }
@ -19,7 +40,120 @@ public class MarksFragment extends Fragment {
@Override @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) { Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_marks, container, false);
view = inflater.inflate(R.layout.fragment_marks, container, false);
if (subject.size() == 0) {
new MarksModel(container.getContext()).execute();
}
else if (subject.size() > 1) {
createGrid();
view.findViewById(R.id.loadingPanel).setVisibility(View.GONE);
} }
return view;
}
public void createGrid(){
RecyclerView recyclerView = (RecyclerView)view.findViewById(R.id.card_recycler_view);
recyclerView.setHasFixedSize(true);
RecyclerView.LayoutManager layoutManager = new GridLayoutManager(view.getContext(),2);
recyclerView.setLayoutManager(layoutManager);
ImageAdapter adapter = new ImageAdapter(view.getContext(),subject);
recyclerView.setAdapter(adapter);
}
public class MarksModel extends AsyncTask<Void, Void, Void> {
private Context mContext;
private Map<String, String> loginCookies;
MarksModel(Context context) {
mContext = context;
}
@Override
protected Void doInBackground(Void... params) {
String cookiesPath = mContext.getFilesDir().getPath() + "/cookies.txt";
try {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(cookiesPath));
loginCookies = (Map<String, String>) ois.readObject();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IOException e){
e.toString();
}
// get link to uonetplus-opiekun.vulcan.net.pl module
String startPageUrl = "https://uonetplus.vulcan.net.pl/powiatjaroslawski/Start.mvc/Index";
try {
Document startPage = Jsoup.connect(startPageUrl)
.followRedirects(true)
.cookies(loginCookies)
.get();
Elements studentTileLink = startPage.select(".panel.linkownia.pracownik.klient > a");
String uonetPlusOpiekunUrl = studentTileLink.attr("href");
// get context module cookie
Connection.Response res = Jsoup.connect(uonetPlusOpiekunUrl)
.followRedirects(true)
.cookies(loginCookies)
.execute();
loginCookies = res.cookies();
//get subject name
String subjectPageurl = "https://uonetplus-opiekun.vulcan.net.pl/powiatjaroslawski/005791/Oceny/Wszystkie?details=1";
Document subjectPage = Jsoup.connect(subjectPageurl)
.cookies(loginCookies)
.get();
Elements subjectTile = subjectPage.select(".ocenyZwykle-table > tbody > tr");
for (Element titlelement : subjectTile){
subject.add(titlelement.select("td:nth-child(1)").text());
}
// get marks view
String marksPageUrl = "https://uonetplus-opiekun.vulcan.net.pl/powiatjaroslawski/005791/Oceny/Wszystkie?details=2";
Document marksPage = Jsoup.connect(marksPageUrl)
.cookies(loginCookies)
.get();
Elements marksRows = marksPage.select(".ocenySzczegoly-table > tbody > tr");
for (Element element : marksRows) {
System.out.println("----------");
System.out.println("Subject" + element.select("td:nth-child(1)").text());
System.out.println("Grade: " + element.select("td:nth-child(2)").text());
System.out.println("Description: " + element.select("td:nth-child(3)").text());
System.out.println("Weight: " + element.select("td:nth-child(4)").text());
System.out.println("Date: " + element.select("td:nth-child(5)").text());
System.out.println("Teacher: " + element.select("td:nth-child(6)").text());
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(Void result) {
Set<String> hs = new HashSet<>();
hs.addAll(subject);
subject.clear();
subject.addAll(hs);
createGrid();
view.findViewById(R.id.loadingPanel).setVisibility(View.GONE);
super.onPostExecute(result);
}
}
} }

View File

@ -0,0 +1,200 @@
package io.github.wulkanowy.activity.main;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.widget.Toast;
import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.Map;
import io.github.wulkanowy.R;
import io.github.wulkanowy.activity.dashboard.DashboardActivity;
public class Login extends AsyncTask<Void, Void, Void> {
String email;
String password;
String county;
int check;
Map<String, String> loginCookies;
Activity activity;
String userMesage;
String urlForStepOne;
String urlForStepTwo;
String urlForStepThree;
ProgressDialog progress;
public Login(String emailT, String passwordT, String countyT, Activity mainAC, int check) {
activity = mainAC;
progress = new ProgressDialog(activity);
this.check = check;
if (countyT.equals("Debug")) {
urlForStepOne = activity.getString(R.string.urlStepOneDebug);
urlForStepTwo = activity.getString(R.string.urlStepTwoDebug);
urlForStepThree = activity.getString(R.string.urlStepThreeDebug);
county = activity.getString(R.string.countyDebug);
email = emailT;
password = passwordT;
} else {
urlForStepOne = activity.getString(R.string.urlStepOneRelease);
urlForStepTwo = activity.getString(R.string.urlStepTwoRelease);
urlForStepThree = activity.getString(R.string.urlStepThreeRelease);
county = countyT;
email = emailT;
password = passwordT;
}
}
@Override
protected void onPreExecute() {
super.onPreExecute();
progress.setTitle(activity.getText(R.string.login_title));
progress.setMessage(activity.getText(R.string.please_wait));
progress.setCancelable(false);
progress.show();
}
@Override
protected Void doInBackground(Void... params) {
try {
if (!stepOne()) {
return null;
}
Document certificate = stepTwo();
Connection.Response step3 = stepThree(certificate);
Document dashboardHtml = step3.parse();
String helloText = dashboardHtml.getElementsByClass("welcome").text();
if (helloText.equals("Dzień dobry!")) {
String cookiesPath = activity.getFilesDir().getPath() + "/cookies.txt";
FileOutputStream out = new FileOutputStream(cookiesPath);
ObjectOutputStream outputStream = new ObjectOutputStream(out);
outputStream.writeObject(loginCookies);
outputStream.flush();
userMesage = activity.getString(R.string.login_accepted);
} else {
userMesage = activity.getString(R.string.login_denied);
}
} catch (IOException e) {
userMesage = e.toString();
}
return null;
}
private boolean stepOne() throws IOException {
Connection.Response initial = Jsoup
.connect(urlForStepOne)
.data("LoginName", email)
.data("Password", password)
.method(Connection.Method.POST)
.execute();
loginCookies = initial.cookies();
CheckPass checkPass = new CheckPass(initial);
userMesage = checkPass.start();
return userMesage.isEmpty();
}
private Document stepTwo() throws IOException {
urlForStepTwo = urlForStepTwo.replace("{locationID}", county);
return Jsoup.connect(urlForStepTwo)
.cookies(loginCookies)
.get();
}
private Connection.Response stepThree(Document certificate) throws IOException {
Elements wresultsInput = certificate.select("input[name=wresult]");
String wresults = wresultsInput.attr("value");
Elements waInput = certificate.select("input[name=wa]");
String wa = waInput.attr("value");
urlForStepThree = urlForStepThree.replace("{locationID}", county);
Connection.Response res = Jsoup.connect(urlForStepThree)
.data("wa", wa)
.data("wresult", wresults)
.cookies(loginCookies)
.followRedirects(true)
.method(Connection.Method.POST)
.execute();
loginCookies = res.cookies();
return res;
}
protected void onPostExecute(Void result) {
super.onPostExecute(result);
progress.dismiss();
if (!userMesage.isEmpty()) {
Toast.makeText(activity, userMesage, Toast.LENGTH_LONG).show();
}
if (userMesage.equals(activity.getString(R.string.login_accepted))) {
if (check == 0) {
if (createAccount()) {
Intent intent = new Intent(activity, DashboardActivity.class);
activity.startActivity(intent);
} else if (!createAccount()) {
Toast.makeText(activity, "Konto już istnieje", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(activity, DashboardActivity.class);
activity.startActivity(intent);
}
} else if (check == 1) {
Intent intent = new Intent(activity, DashboardActivity.class);
activity.startActivity(intent);
}
}
}
public boolean createAccount() {
SharedPreferences sharedPreferences = activity.getSharedPreferences("io.github.wulkanowy", Context.MODE_PRIVATE);
if (!sharedPreferences.contains(email)) {
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("wulkanowy",email);
editor.putString(email,email);
editor.putString("sandi" + email,password);
editor.putString("county" + email,county);
editor.commit();
return true;
}
else{
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("wulkanowy",email);
editor.commit();
return false;
}
}
}

View File

@ -1,9 +1,9 @@
package io.github.wulkanowy.activity.main; package io.github.wulkanowy.activity.main;
import android.app.Activity;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.os.Bundle; import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View; import android.view.View;
import android.widget.ArrayAdapter; import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView; import android.widget.AutoCompleteTextView;
@ -14,7 +14,11 @@ import java.util.LinkedHashMap;
import io.github.wulkanowy.R; import io.github.wulkanowy.R;
public class MainActivity extends Activity { public class MainActivity extends AppCompatActivity {
String password;
String email;
String county;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
@ -49,9 +53,9 @@ public class MainActivity extends Activity {
EditText adressEmail = (EditText)findViewById(R.id.emailText); EditText adressEmail = (EditText)findViewById(R.id.emailText);
EditText passwordText = (EditText)findViewById(R.id.passwordText); EditText passwordText = (EditText)findViewById(R.id.passwordText);
EditText countyText = (EditText)findViewById(R.id.countyText); EditText countyText = (EditText)findViewById(R.id.countyText);
String password = passwordText.getText().toString(); password = passwordText.getText().toString();
String email = adressEmail.getText().toString(); email = adressEmail.getText().toString();
String county = countyText.getText().toString(); county = countyText.getText().toString();
String[] keys = this.getResources().getStringArray(R.array.counties); String[] keys = this.getResources().getStringArray(R.array.counties);
String[] values = this.getResources().getStringArray(R.array.counties_values); String[] values = this.getResources().getStringArray(R.array.counties_values);
@ -65,10 +69,12 @@ public class MainActivity extends Activity {
county = map.get(county); county = map.get(county);
} }
if (!email.isEmpty() && !password.isEmpty() && !county.isEmpty()){ if (!email.isEmpty() || !password.isEmpty() || !county.isEmpty()){
new LoginTask(this).execute(email, password, county); new Login(email, password, county, this, 0).execute();
} else { }
else if (password.isEmpty() || email.isEmpty() || county.isEmpty()) {
Toast.makeText(this, R.string.data_text, Toast.LENGTH_SHORT).show(); Toast.makeText(this, R.string.data_text, Toast.LENGTH_SHORT).show();
} }
} }
} }

View File

@ -1,18 +1,34 @@
package io.github.wulkanowy.activity.started; package io.github.wulkanowy.activity.started;
import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences;
import android.os.AsyncTask; import android.os.AsyncTask;
import android.widget.Toast;
import io.github.wulkanowy.activity.dashboard.DashboardActivity; import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;
import io.github.wulkanowy.R;
import io.github.wulkanowy.activity.main.Login;
import io.github.wulkanowy.activity.main.MainActivity; import io.github.wulkanowy.activity.main.MainActivity;
public class LoadingTask extends AsyncTask<Void, Void, Void> { public class LoadingTask extends AsyncTask<Void, Void, Void> {
Context activity; Activity activity;
boolean isOnline;
String idAccount;
String email;
String password;
String county;
LoadingTask(Context main) { final boolean SAVE_DATA = true;
LoadingTask(Activity main) {
activity = main; activity = main;
} }
@ -23,15 +39,63 @@ public class LoadingTask extends AsyncTask<Void, Void, Void> {
} catch (InterruptedException e) { } catch (InterruptedException e) {
e.printStackTrace(); e.printStackTrace();
} }
isOnline = isOnline();
return null; return null;
} }
protected void onPostExecute(Void result) { protected void onPostExecute(Void result) {
/* Intent intent = new Intent(activity,MainActivity.class); if (isOnline) {
activity.startActivity(intent); */ SharedPreferences sharedPreferences = activity.getSharedPreferences("io.github.wulkanowy", Context.MODE_PRIVATE);
Intent intent = new Intent(activity,MainActivity.class); if (SAVE_DATA) {
if (sharedPreferences.contains("wulkanowy")) {
idAccount = sharedPreferences.getString("wulkanowy", "");
email = sharedPreferences.getString(idAccount, "");
password = sharedPreferences.getString("sandi" + email, "");
county = sharedPreferences.getString("county" + email, "");
if (!email.isEmpty() || !password.isEmpty() || !county.isEmpty()) {
new Login(email, password, county, activity, 1).execute();
} else if (password.isEmpty() || email.isEmpty() || county.isEmpty()) {
Toast.makeText(activity, R.string.data_text, Toast.LENGTH_SHORT).show();
}
} else {
Intent intent = new Intent(activity, MainActivity.class);
activity.startActivity(intent); activity.startActivity(intent);
} }
}
else{
Intent intent = new Intent(activity, MainActivity.class);
activity.startActivity(intent);
}
}
else{
Intent intent = new Intent(activity, MainActivity.class);
activity.startActivity(intent);
Toast.makeText(activity,"Brak połączenia z internetem",Toast.LENGTH_SHORT ).show();
}
}
public boolean isOnline() {
try {
int timeoutMs = 1500;
Socket sock = new Socket();
SocketAddress sockaddr = new InetSocketAddress("8.8.8.8", 53);
sock.connect(sockaddr, timeoutMs);
sock.close();
return true;
} catch (IOException e) {
return false;
}
}
} }

View File

@ -1,11 +1,11 @@
package io.github.wulkanowy.activity.started; package io.github.wulkanowy.activity.started;
import android.app.Activity;
import android.os.Bundle; import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import io.github.wulkanowy.R; import io.github.wulkanowy.R;
public class StartedActivity extends Activity { public class StartedActivity extends AppCompatActivity {
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

View File

@ -11,9 +11,12 @@
<FrameLayout <FrameLayout
android:id="@+id/fragment_container" android:id="@+id/fragment_container"
app:layout_behavior="android.support.design.widget.AppBarLayout$ScrollingViewBehavior"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="0dp" android:layout_height="0dp"
android:layout_weight="1" /> android:fitsSystemWindows="true"
android:layout_weight="1"
/>
<android.support.design.widget.BottomNavigationView <android.support.design.widget.BottomNavigationView

View File

@ -1,4 +1,4 @@
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
@ -9,4 +9,4 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:text="Fragment Frekwencja" /> android:text="Fragment Frekwencja" />
</FrameLayout> </android.support.design.widget.CoordinatorLayout>

View File

@ -1,4 +1,4 @@
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
@ -11,4 +11,4 @@
android:text="Fragment Dashboard" /> android:text="Fragment Dashboard" />
</FrameLayout> </android.support.design.widget.CoordinatorLayout>

View File

@ -1,4 +1,4 @@
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
@ -9,4 +9,4 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:text="Fragment Plan lekcji" /> android:text="Fragment Plan lekcji" />
</FrameLayout> </android.support.design.widget.CoordinatorLayout>

View File

@ -1,17 +1,25 @@
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
tools:context="io.github.wulkanowy.activity.dashboard.marks.MarksFragment"> tools:context="io.github.wulkanowy.activity.dashboard.marks.MarksFragment">
<android.support.v7.widget.RecyclerView
android:id="@+id/card_recycler_view"
android:scrollbars="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<TextView <RelativeLayout
android:id="@+id/loadingPanel"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:text="Fragment Oceny" /> android:gravity="center" >
<ExpandableListView <ProgressBar
android:layout_width="match_parent" android:layout_width="wrap_content"
android:layout_height="match_parent" /> android:layout_height="wrap_content"
android:indeterminate="true" />
</RelativeLayout>
</FrameLayout> </android.support.design.widget.CoordinatorLayout>

View File

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginRight="1dp"
android:layout_marginLeft="1dp"
android:layout_marginBottom="2dp"
>
<ImageView
android:id="@+id/img_android"
android:adjustViewBounds="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<TextView
android:id="@+id/tv_android"
android:gravity="center"
android:textColor="#000000"
android:background="#FFFFFF"
android:textStyle="bold"
android:lines="2"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>

View File

@ -2,5 +2,4 @@
<!-- Example customization of dimensions originally defined in res/values/dimens.xml <!-- Example customization of dimensions originally defined in res/values/dimens.xml
(such as screen margins) for screens with more than 820dp of available width. This (such as screen margins) for screens with more than 820dp of available width. This
would include 7" and 10" devices in landscape (~960dp and ~1280dp respectively). --> would include 7" and 10" devices in landscape (~960dp and ~1280dp respectively). -->
<dimen name="activity_horizontal_margin">64dp</dimen>
</resources> </resources>

View File

@ -1,5 +1,3 @@
<resources> <resources>
<!-- Default screen margins, per the Android Design guidelines. --> <!-- Default screen margins, per the Android Design guidelines. -->
<dimen name="activity_horizontal_margin">16dp</dimen>
<dimen name="activity_vertical_margin">16dp</dimen>
</resources> </resources>